因果担保不是偶然的。

|| 分布式系统

传统的数据库,因为它们服务于从单个节点进bet way行读写,自然地,为读写操作(称为“因果一致性”)提供顺序排序保证。分布式系统可以提供这些保证,但为了做到这一点,它必须协调和排序所有节点上的相关事件,并限制某些操作完成的速度。虽然因果一致性在保留所有数据排序保证时最容易理解——模仿垂直缩放的数据库,即使系统遇到节点崩溃或网络分区等故障,也存在许多合法的一致性和耐久性权衡,所有系统都需要做出这些权衡。

bet wayMongoDB一直在不断地运行并通过-Jepsen试验多年来。最近,我们一直在和Jepsen团队测试因果一致性。在他们的帮助下,我们了解了如果您用一致性保证来交换数据吞吐量和近况,故障模式会变得多么复杂。

用libabigail修剪动态重建

|| C++ 开源 优化

复杂的C++项目经常与冗长的构建时间进行斗争。将一个项目拆分为多个动态链接的组件,与依赖静态链接相比,可以为开发人员提供更快的增量重建和更短的编辑-编译测试周期。尤其是当有大量的测试二进制文件时。然而,由于构建系统处理可传递的库依赖关系的方式,它们通常不会在动态增量重建中实现所有可能的收益。红帽的ABI自省库libabigail为某些类型的源代码修改提供了一种消除不必要的可传递重新链接的可能途径。

考虑到引入官方MongoDB Go驱动程序的社区效应bet way

|| 戈朗 司机 开源

当你所依赖的开源项目不再满足你的需求时,你会怎么做?当你的选择不仅仅影响你自己时,但是一个更大的社区,什么原则指导你的决定?

提交补丁通常是第一个选项,但是要接受它们,您得听维护者的摆布。如果你需要的改变是彻底的,重大变更,接受的几率很低。最终,只有几个现实的选择:找到一个替代方案,为项目提供资金,或者写下你自己的替代品。每个依赖于开源的人都会在某个时候面临这个难题。

多年来依靠社会发展MGO Go驱动程序Mongbet wayoDB,bet wayMongoDB已经开始了一项全新的工作,内部开发,开源驱动程序。我们知道,发布一个公司赞助的替代方案来获得成功,社区开发的项目给用户带来了紧张和不确定性,所以我们并没有轻易做出这个决定。我们仔细考虑了我们的选择将如何影响MongoDB当前和未来的Go用户。bet way

CS4All投资:一年之后

|| CS4ALL 教育

当纽约市的一些高中老师与MongoDB合作教授计算机科学时,bet way他们成功了吗?他们的课程没有经过测试,他们在困难的地区教书,那里的大多数学生来自贫困和少数民族家庭。我和这两位老师谈过,Jeremy Mellema和Timothy Chen,回到九月,请当他们在MongoDB完成暑期奖学金并开始教授他们的课程时;bet way在今年春天的学年结束时,我再次拜访了杰里米和蒂姆以了解结果。

他们的成功少得可怜。他们发现学生阅读能力差是学习编程的障碍,教新的编码员如何解决问题,本身,未解决的问题在一个粗略的迭代单元中——一个学期——进行实验并找到有效的教学方法是非常缓慢的。但即使是部分胜利也会对个别孩子产生影响,像MongoDB这样的公司的专业工程师的支持可能是一种强大的催化剂。bet way

再会,索拉里斯

||

[更新时间:2017年8月29日下午3:45:编辑以包含有关Solaris下载和安全补丁的更多详细信息。]

索拉里斯是第一个“真正的操作系统“我曾经用过。

布朗大学计算机科学系太阳微系统公司90年代末,我还是那里的一名大学生的时候,我在那里购物。当我上操作系统实验室的课时,cs - 169,请我们实现了Sun研究操作系统的一个玩具版本春季操作系统.我在计算机系的几个同龄人后来在Sun工作,开发或改进了许多使Solaris变得伟大的技术,就像ZFS,请dtrace,请libumem,请MDB,请,请和区域.这个《Solaris链接器和库指南》仍然是理解共享库内部结构的最佳方法之一。我工作的第一个初创公司是在Solaris x86上开发的,因为团队非常了解Solaris。今天,我在MongoDB的服务器工程团队的许多同事都分享了Solaris的形成经验。bet way我们对Solaris和它在开发过程中所付出的令人惊叹的工程努力有很多共同的怀旧之情和欣赏之情。

就是这样,对于我们很多人来说,在MongoDBbet way,苦乐参半宣布MongoDB将终止对Solaris的支持。bet way

立即生效,我们计划停止为Solaris生产MongoDB的新版本,bet way跨越所有受支持的MongoDB版本。bet way将继续提供现有的Solaris发布构件,但不会发布新版本,除非根据现有的支持合同提出了一个关键问题,该支持合同涵盖了在Solaris上运行的MongoDB 3.0到3.4版。我们将继续修复社区的关键缺陷,bet way无论在哪里发现或如何报告。任何人都可以使用我们的安全项目报告安全漏洞要创建帐户,然后一张票,描述了脆弱性。

这对我们来说不是一个容易的决定,我们认为,重要的是提供一些背景资料,说明为什么我们最初做出的决定似乎是一个反复无常的决定。

Mobet wayngoDB工程对反多样性宣言的回应

|| 多样性

以下是我上周五发给MongoDB工程团队的邮件。bet way在团队的要求下,我现在公开了。-爱略特


你可能听说过谷歌一位(现在是前任)员工发布的关于谷歌多样性努力的10页备忘录。备忘录的部分内容声称,科技领域的性别差异源于生物差异。我想明确一下MongoDB在这个问题上的立场,bet way我在这个问题上的立场,我们期望员工在这方面有什么样的行为。

如果一切都是公平的,几千年来,整个谈话将不复存在。事实是,性别歧视的历史遗产,种族歧视,而一系列其他的ISM是真实的和强大的。真正重要的是试图弥补这种损害,虽然这是一个必然的不完美的努力,尽管如此,它仍然至关重要,多样性努力是实现这一目标的有效方法。如果我们都同意朝着公平竞争的方向努力是我们的目标,关于如何最好地实现这一目标的讨论可以负责任地进行。

这个宣言,然而,根本不是健康对话的一部分。它提出了多样性努力和基于合理陈述和无上下文参考研究的歧视之间的虚假等效。这只不过是又一次试图用理性主义的外衣来掩盖偏见。历史上到处都是,我们只能希望我们的工作能把他们的货物迅速地运到充满可耻思想的垃圾箱里。对于那些有幸阅读这个最新例子而不感到直接威胁的人来说,要明白,相信作者的“一些好的观点”可以为他的结论提供掩护,这会给你的同事造成一个充满敌意的环境。

郑重声明,我关注多样性的原因有很多,超越了明显的和至高无上的道德。我百分之百相信MongoDB更多元化的工程团队将使我们的产品更好。bet way多样性不仅仅是一个衡量标准,这是一种更具包容性的思考方式,拥有更多不同观点和思维过程的团队可以更好地理解其他人将如何与他们所构建的事物交互。这样的团队无能为力,但建设得更好,更有用,更易于理解的产品,从而更好地实现我们公司的核心使命,即提高开发人员的生产力。

当我们接受不同价值状态的力量时,我们致力于增加多样性并不是为了改变我们的标准(这正是备忘录所暗示的)。而是对资源的承诺,采访中,成长,并保留符合这些标准的代表性不足群体的成员。如果您对此有任何疑问或顾虑,请随时与我联系。

呈现WinKerberos

|| 开源 蟒蛇 Kerberos

WinKerberos是一个Python模块,为Windows上的Python应用程序提供Kerberos工具,其中pykerberos不起作用。Winkerberos可以作为使用pykerberos的客户机应用程序在Windows上的一个替代品。

为什么要为python编写一个新的kerberos模块?

Mongbet wayoDB Enterprise Edition 2.4支持一种新的身份验证机制:使用通用安全服务API (bet wayGSSAPI)。蒙古包,MongoDB的Python驱动,bet way需要支持这个新的身份验证机制。

在任何Python应用程序中使用Kerberos的信息都不多,更不用说在Windows上运行。尼克·科格伦2011年的文章“使用python kerberos模块”是当时能得到的最好的信息。尼克的文章是关于使用PyKerberos要实现HTTP“协商”身份验证,MongoDB使bet way用自定义TCP有线协议,但是使用本文的代码示例,其他一些来源,仔细阅读RFC 4752第3.1节,请我在pymongo中获得了Kerberos身份验证,几天之内就可以在除Windows以外的任何地方工作。

PyKerberos是苹果作为开源的一部分写的吗日历和联系人服务器项目。它是一个纯C python扩展模块,基于MITKerberos v5或Heimdal构建,并在MacOS和Linux上进行了良好的测试。虽然有传言说人们可以让PyKerberos在Windows上工作,我们永远不知道他们是怎么做到的。

3月19日我们发布MongoDB bet wayEnterprise 2.4时,2013年,在Windows上使用Kerberos身份验证需要支持PyMongo的用户数量似乎为零。5月22日,2013年,我们发布了PyMongo 2.5,在PyKerberos支持的平台上支持Kerberos身份验证。到2016年,在Windows上多次请求Kerberos支持之后,使用下面的命令实现支持的尝试失败了Kerberos SSPI,请我们决定编写一个新的Python模块。此模块将支持针对pymongo和任何其他需要它的python项目的Windows上的Kerberos身份验证。

进入Winkerberos

WinKerberos是纯C python扩展模块,支持python 2.6,2.7,和3.3 +。它提供了pykerberos的大部分客户端API,但是使用微软的安全支持提供程序接口(SSPI)盖下。PyMongo,请请求,请和其他一些项目在Windows上使用WinKerberos作为Kerberos提供者。它是pypi上可用作为预构建的二进制车轮,可以在不使用C编译器的情况下与PIP一起安装:

python-m pip安装winkerberos

要向使用pykerberos进行客户端身份验证的现有应用程序添加Windows支持,变化:

进口kerberos

到:

尝试:将winkerberos导入为kerberos,但导入错误:导入kerberos

如果需要在应用程序中从头实现Kerberos身份验证,的自述文件提供用于Winkerberos或Pykerberos的示例实现。

帮助我们改进WinKerberos

Winkerberos实现了Pykerberos自0.1版以来所需的所有特性。从那时起,我们又发布了六个版本,增加了对社区请求的功能的支持,以及用户提供的补丁,为SPNEGORFC 5929通道绑定.作为Pykerberos for Windows的重新实现,温克伯罗斯仍然不完整。它缺少一些PyKerberos的客户端功能,像changepassword和getserverprincipaldetails,并且不实现任何服务器API。如果您想在WinKerberos中看到这些特性,或者您正在向PyKerberos添加一个新的特性,这个特性也应该存在于WinKerberos中,我们很乐意接受社区的补丁。如果你在温克伯罗斯发现一只虫子,或者想要请求一个新特性,拜托在Github项目中提交票据.

断开WiredTiger日志阻塞:无等待解决方案(2/2)

|| 优化 C 并发性

第一部分其中的一对探索了WiredTiger写前日志的原始算法,该日志用于合并写操作以最小化IO。它在两个阶段中使用原子比较和交换操作来完成这一操作,而不需要花费时间进行锁定。只要每个核心运行的线程不超过几个,这个算法就可以非常好地工作。但是,当线程数超过该限制时,由于它依赖于繁忙的等待以避免锁定,从而导致了日志阻塞——这是一个严重的问题,因为许多MongoDB工作负载的每个核心都有大量的线程。bet way这个问题阻碍了MongoDB将WiredTigebet wayr作为v3.2中默认存储引擎的目标。

感谢我的同事,这个故事有个圆满的结局。高级技术服务工程师布鲁斯·卢卡斯。bet way布鲁斯一开始发现了原木,就把它报告给我;一起,我们在不影响任何其他工作量的情况下克服了它。因为布鲁斯的思维方式并没有受到最初方法的影响,他能够提供为解决方案铺平道路的关键洞察力,允许wiredtiger成为v3.2中的默认存储引擎。

断开wiredtiger logjam:预写日志(1/2)

|| 优化 C 并发性

代码不能优化;它只能被优化对于一组条件.当条件改变时,优化可能成为瓶颈,当这种情况发生时,对假设的彻底审计很可能是解决方案的关键。

Wiredtiger提前写入日志证明了这一原理。它是高性能存储引擎中的关键代码路径,我对它进行了大量优化,以避免I/O和锁定。但当wiredtiger成为MongoDB中的存储引擎时,我最初针对的一些条件变得无效。bet way当我的一个同事调查了一个在测试过程中发现的负结垢案例时,他在提前写日志中发现了一个严重的瓶颈……称之为“日志阻塞”。这项调查最终促使我们重新思考我们的假设,并针对新的情况进行优化。我们用一个快速原型验证了这个新方法,然后覆盖所有的复杂和边缘情况,以产生一个完全实现的解决方案。

在这两部分系列的第一部分中,我会深入到窃听器记录的内部。我将展示它如何在不锁定的情况下将多个线程编组到一个缓冲区中,我将解释这个设计和新的条件之间的两个冲突是如何产生堵塞的。第二部分将重点介绍如何消除瓶颈。我会分析它的根源,描述使我们的解决方案成为可能的关键洞察力,并详细说明了新的算法以及它如何反映我们当前的情况。