九头蛇大会将于7月11日至12日在圣彼得堡举行,专门致力于并行和分布式系统的开发。 Hydra的特点是它将出色的科学家(通常只能在国外的科学会议上找到)和著名的实践工程师相结合,在科学与实践的交汇处融合成一个大型程序。
九头蛇是我们过去几年中最重要的会议之一。 在她进行非常认真的准备之前,选择了发言人和报告。 上周,与JUG.ru集团公司董事Alexei Fedorov( 23derevo )进行了一次访谈 。
我们已经讨论了三个重要的参与者,即分布式系统理论的创始人-Leslie Lamport,Maurice Herlichi和Michael Scott。 现在是时候讨论整个程序了!

动机
如果您正在编程,那么您将以某种方式处理多线程和分布式计算。 相关领域的专家可以直接与他们合作,但是隐式地从各个地方来看发行版:在任何多核计算机或分布式服务中,都有并行执行计算的功能。
有许多会议揭示了应用程序编程的各个方面。 另一方面,我们设有特殊的科学流派,其讲课形式揭示了大量复杂的理论。 例如, SPTDC学校与圣彼得堡的Hydra并行运行。 在Hydra,我们试图将苛刻的实践,科学以及他们交汇处的所有东西结合在一起。
想想看:我们生活在一个奇妙的时代,您可以结识我们所从事的科学和工程领域的创始人。 物理学家不会遇到牛顿或爱因斯坦-离开的火车。 但是仍然有一些人生活在我们身边,他们创造了分布式系统理论的基础,提出了流行的编程语言,并首次将所有这些都体现在了可行的原型中。 这些人并没有半途而废,现在他们正在世界著名的大学和公司中从事紧迫的工作,并且是迄今为止最大的知识和经验来源。
另一方面,与他们会面的机会通常仅是理论上的:我们中很少有人能够不断监视任何罗切斯特大学的公共活动,然后赶赴美国再回到迈克尔·斯科特(Michael Scott)的演讲。 通常来说,拜访所有Hydra参与者都处于小规模状态,不算花费时间的深渊(尽管这听起来像是一个有趣的追求)。
另一方面,我们有很多高级工程师正在研究分布式系统的紧急问题,他们肯定有话要说。 但是这里有一个问题-他们工作 ,而且他们的时间很昂贵。 是的,如果您是Microsoft,Google或JetBrains的员工,则在内部活动中与一位著名演讲者见面的可能性大大增加,但总的来说-不,并非每天都会发生。
因此,Hydra会议完成了我们大多数人无法完成的一项重要任务-在一个地方,同时聚集了那些可以改变您的生活的人。 我承认并不是每个人都需要分布式系统,这是一些复杂的基本问题。 您可以在余生中使用PHP编写CRUD,并保持完全满意。 但是谁需要它是您的机会。
自从首次宣布在哈布雷举办的Hydra会议以来,已经过去了很多时间。 在这段时间里,许多工作已经完成-现在,我们有了几乎所有报告的清单。 没有呆滞的单线程算法,只有纯分布式硬核! 让我们用普通的单词结束,看看现在手头有什么。
主题演讲
主题演讲开始和结束会议的日子。 通常,开幕主题演讲的意思是确定会议的总体精神和方向。 闭幕主题演讲画了一条线,并解释了如何利用会议期间获得的知识和技能。 开始和结束:最重要的是要记住的一切,总的来说,它的重要性日益增加。
Cliff是Java世界中的传奇人物。 在90年代后期,他以其博士学位论文撰写了一篇名为《 组合分析,组合优化 》的论文,该论文在一段时间后成为HotSpot JVM Server编译器的基础。 两年后,他已经在Sun Microsystems的JVM上工作,并向世界展示了JIT有资格。 整个故事是Java是最快的现代运行时之一,它具有最智能,最快的优化,这来自于Cliff Click。 从一开始,就认为如果静态编译器有可用的东西,您甚至无法尝试进行jit。 多亏了Cliff和团队的工作,所有新语言都开始以默认JIT编译的想法创建。 当然,这不是一个人的工作,但是克里夫在其中扮演了非常重要的角色。
在开幕主题演讲中,Cliff将讨论他的另一项努力-H20 ,这是一种用于工业应用的分布式和可扩展机器学习的内存平台。 更确切地说,是关于键值对在其中的分布式存储。 这是一个非常快速的存储库,具有许多有趣的属性(确切的列表在description中 ),使您可以在流式处理大数据的数学方法中使用类似的解决方案。
Cliff将讲的另一个话题是Azul硬件事务存储器的经验 。 他的传记的另一部分是在Azul的十年工作 ,他在硬件和Azul技术堆栈上进行了许多更新和改进:JIT编译器,运行时,线程模型,错误处理,堆栈工作,硬件中断,类加载等。这样的事情-恩,您明白了。
最有趣的部分是从他们为大型企业制造硬件-运行Java的超级计算机开始的。 这是一个相当创新的事情,专门针对Java进行了改进,它有特殊的要求-读取低空垃圾收集的存储障碍,带有边界检查的数组,虚拟调用……最酷的技术之一是硬件事务存储。 864个内核中的所有L1都可以参与事务编写,这对于使用Java中的锁尤为重要(只要不存在实际内存冲突,同步块就可以并行工作)。 但是,一个绝妙的主意陷入了残酷的现实-在本报告中,克里夫(Cliff)将解释为什么HTM和STM不太适合多线程计算的实际需求。
Michael Scott- 双重数据结构
迈克尔·斯科特 ( Michael Scott)是罗切斯特大学(University of Rochester)的计算机科学教授,与他的缘分已经使他联系了34年 ;而在威斯康星州立大学麦迪逊分校,他担任了5年的院长。 他从事并行和分布式编程以及语言设计领域的研究,并向学生传授该知识。
得益于“编程语言语用学” ( Programming Language Pragmatics)教科书,全世界都知道Michael,该教科书的最新版本是在2015年发布的。 他的作品“共享内存多处理器上的可伸缩同步算法”获得了Dijkstra奖 ,这是分布式计算领域最著名的奖项 ,并且公开地位于罗切斯特大学的在线图书馆中。 您也可以从“简单,快速和实用的非阻塞和阻塞并发队列算法”中了解他是同一Michael-Scott算法的作者。
对于Java世界,这是一个特例:他与Doug Lea一起开发了运行Java库的非阻塞算法和同步队列。 这正是Dual数据结构主题演讲的主题-在Java SE 6中对这些结构的介绍允许十倍的时间来提高java.util.concurrent.ThreadPoolExecutor
的性能。 如果您事先对这些“双重数据结构”感兴趣,那么可以进行相应的工作 。
莫里斯·赫里奇 ( Maurice Herlichi )曾两次获得Dijkstra大奖。 第一个用于等待自由同步 (布朗大学),第二个用于更新事务:事务性存储:无锁数据结构的架构支持 (弗吉尼亚理工大学)。 迪克斯特拉奖授予的是其重要性和影响力已经至少十年显着的作品,而且显然,莫里斯(Maurice)是该领域最著名的专家之一。 他目前在布朗大学(Brown University)担任教授,在整个段落中都有许多成就。
在最后的主题演讲中,Maurice将就分布式计算的经典性谈论区块链分布式系统的理论和实践,以及如何简化许多相关问题。 这份报告完全是会议的主题-根本不是关于采矿的炒作,而是关于我们的知识如何惊人地有效和适用于各种任务。
2017年7月,莫里斯(Maurice)来到俄罗斯SPTDC学校,参加了JUG.ru集会,可以在YouTube上观看录音:
主程序
接下来是对该程序中包含的报告的简短回顾。 一些报告在此进行了详细描述,而一些报告则较短。 详细描述主要在英语报告中获得,这些报告需要链接到科学论文,Wikipedia上的术语等。 完整列表可以在会议网站上看到 。 该站点上的列表将被更新和补充。
莱斯利·兰普特- 问答
Leslie Lampport是分布式计算基础工作的作者。 LaTeX代表Lamport TeX。 这是他在1979年首次引入一致一致性的概念,他的文章“如何使多处理器计算机正确执行多进程程序”获得了Dijkstra奖。
就格式而言,这是程序中最不寻常的部分,因为它甚至不是报告,而是问答会话。 当相当一部分观众已经熟悉(或可以结识)基于“ Lamport理论”,他自己的文章和报告的各种作品时,重要的是将所有可用时间都花在直接交流上。
这个想法很简单-您在YouTube上观看了两个报告: “编程不应该编码”和“如果您不编写程序,不要使用编程语言”,并准备至少一个问题,然后莱斯利回答。
这两个视频中的第一个,我们已经变成habrosta了 。 如果您没有一个小时的时间观看视频,则可以快速阅读所有这些内容。
注意:YouTube上还有更多来自Leslie Lamport的视频。 例如,有一门优秀的TLA +课程 。 这门课程的离线版本位于作者的主页上 ,他在YouTube上上传了该版本,以方便在移动设备上查看。
Martin Kleppmann是剑桥大学的研究员,致力于CRDT和算法的形式验证。 Martin于2017年出版的 《 设计数据密集型应用程序》一书非常成功,并跻身数据存储和处理领域的畅销书榜单。 微软首席技术官凯文·斯科特(Kevin Scott) 曾说过 :“这对于开发工程师来说是必不可少的。 “这是一种将理论与实践相结合的稀有资源,可帮助开发人员更智能地设计和实施基础架构以及数据处理系统。” Kafka的创建者和首席执行官Confluent的Jay Kreps说了类似的话。
在从事学术研究之前,Martin从事该行业,并共同创立了两家成功的初创公司:
- Rapportive,致力于显示您的电子邮件联系人的社交资料,LinkedIn于2012年购买了该联系人;
- Go Test It,一项用于在各种浏览器中自动检查网站的服务,RedGate在2009年购买了该服务。
总的来说,尽管Martin的知名度不如我们的主要演讲人,但Martin已经能够为分布式计算和行业的发展做出一些贡献。
在这份报告中,马丁将谈论一个与其学术研究更接近的话题。 在Google Docs和用于共同编辑文档的类似沙发中,“共同编辑”是指复制的任务:每个用户都有自己的通用文档副本,然后他们可以对其进行修改,所有更改都通过网络发送给其他参与者。 脱机更改文档会导致文档相对于其他参与者的暂时不一致,并且重新同步需要冲突处理。 为此,实际上存在无冲突的复制数据类型 (CRDT),这是一个相当新的事物,其实质仅在2011年提出。 本报告讨论了自CRDT以来的最新情况,取得了哪些最新成就,并讨论了总体上创建本地优先应用程序的方法,特别是开源库Automerge的使用。
下周我们将在哈布雷(Habré)上发表对马丁的大型访谈,这将很有趣。
Pedro在思科工作,过去十年来一直在开发并行算法,包括同步机制,无锁和无等待的数据结构以及您可以在此主题上想象的一切。 他目前的研究和工程兴趣集中在通用构造,软件事务性存储器,持久性存储器和类似技术上,这些技术能够实现正确,可扩展和容错的应用程序。 他还是Concurrency Freaks博客(在狭窄圈子中广为人知)的作者。
现在,大多数多线程应用程序都在并行数据结构上工作,从在参与者之间使用消息队列开始,到以键值存储中的索引数据结构结束。 在Java JDK中,它们已经成功地工作了很多年,而在C ++中,它们正在缓慢地被添加。
实现并行数据结构的最简单方法是顺序(单线程)实现,其中方法受互斥对象保护。 任何六月都可以访问,但是在扩展和性能方面存在明显的问题。 同时,无锁和无等待的数据结构不仅可以更好地处理错误,而且具有更成功的性能概况-但是,其开发需要深入的专业知识并适应特定的应用程序。 错误的一行代码足以破坏所有内容。
哪怕是非专家也能设计和实现这样的数据结构? 众所周知,可以使用通用设计或事务性存储器使任何顺序算法成为线程安全的。 首先,他们可以降低进入此任务的门槛。 但是,两种解决方案都倾向于导致实施效率低下。 佩德罗(Pedro)将讨论他们如何设法使这些设计更有效率,以及如何将其用于算法。
海蒂·霍华德(Heidi Howard)- 解放分布式共识
与马丁一样,海蒂·霍华德(Heidi Howard)是剑桥大学的分布式系统研究人员。 她的专长是一致性,容错能力,性能和分布式共识。 她以泛化称为Flexible Paxos的Paxos算法而闻名。
回想一下, Paxos是用于解决不可靠计算机网络中共识问题的一系列协议,这些协议基于Leslie Lamport的工作。 因此,我们的一些发言人正在处理其他发言人最初提出的任务-这太好了。
在多个主机之间找到共识的能力(用于寻址,领导者选择,阻止或协调)是现代分布式系统中的一个基本问题。 Paxos现在是解决找到共识的问题的主要方法,并且围绕它进行了大量研究,以针对各种实际需要扩展和优化该算法。
在本报告中,我们将修订Paxos的理论基础,削弱最初的要求并推广该算法。 我们将看到,Paxos实际上只是众多共识方法中的一种选择,并且频谱中的其他点对于构建良好的分布式系统也非常有用。
Alex是数据库和存储系统方面的专家,对我们而言更重要的是,是Cassandra的提交者。 他目前与O'Reilly一起正在编写Database Internals一书。
对于最终具有一致性的系统(用俄语术语-“长期一致性”),在删除节点或划分网络后,必须解决以下难题:要么继续满足请求,牺牲一致性,要么拒绝满足请求并牺牲可用性。 在这样的系统中,法定数量的节点子集重叠并保证至少一个节点将包含最新值可以是一个很好的边界解决方案。 您可以承受故障和与某些节点的连接断开的困扰,并继续使用最新值进行响应。
但是,一切都是有代价的。 仲裁复制方案意味着增加的存储成本:您需要一次在多个节点上存储冗余数据,以确保出现问题时有足够数量的可用副本。 事实证明,您无法将所有数据存储在所有副本上。 您可以通过仅在部分节点上保留数据来减少存储负载,并使用特殊节点(瞬态副本)进行故障处理。
在本报告的过程中,我们将看看见证见证副本 , Spanner和Megastore所使用的复制方案以及该概念在Apache Cassandra中的实现(名称为Transient Replication&Cheap Quorums) 。
Dmitry是一位Google开发人员,致力于C / C ++和Go-Address / Memory / ThreadSanitizer的动态测试,以及用于Linux内核的类似工具。 Go具有可扩展的goroutine调度程序,网络轮询器和并行垃圾收集器。 他是多线程领域的专家,是十二种新的非阻塞算法的作者,并且是英特尔黑带技术的拥有者。
现在介绍一下报告本身。 Go具有goroutine(轻线程)和通道(FIFO队列)形式的对多线程的本机支持。 由于有了这些机制,用户编写现代的多线程应用程序变得非常轻松愉快,并且看起来很神奇。 据我们了解,这里没有魔术。 在此报告中,德米特里(Dmitry)将深入研究Go调度程序的复杂工作,并展示实现此“魔术”的秘密。 首先,他将概述调度程序的主要组件,并告诉您它是如何工作的。 此外,我们将仔细研究某些方面,例如停车/拆箱策略和阻塞系统调用的处理。 最后,德米特里(Dmitry)将讨论调度程序中可能的改进。
德米特里(Dmitry)在外包方面工作了近9年,而并未失去与大学和科学界的联系。 Odnoklassniki的大数据分析为他提供了一次难得的机会,可以将理论培训和科学基础与真正受欢迎的产品的开发相结合。
分布式图形分析曾经是而且仍然是一项艰巨的任务:当有必要获取有关相邻顶点连接的信息时,通常必须在机器之间提取数据,这会导致执行时间和网络基础架构上的负载增加。 在此报告中,我们将了解如何使用概率数据结构或诸如社交网络中友谊图的对称性之类的事实来获得显着的处理速度。 所有这些都通过Apache Spark代码示例进行说明。
Denis是Cosmos DB开发人员,是检查一致性模型,共识算法和分布式事务领域的专家。 现在,他在Microsoft工作,在此之前,他从事Amazon和Yandex的分布式系统。
在本报告中,我们将熟悉过去几年中发明的分布式事务协议,该协议可以在支持条件更新(比较和设置)的任何数据存储之上的客户端上实现。 最重要的是,生命不会以两阶段提交而结束,可以在应用程序级别将事务添加到任何数据库的顶部,但是不同的协议(2PC,Percolator,RAMP)会有不同的权衡,因此不能免费提供给我们。
Alexey( zaleslaw )是我们的长期演讲者,也是其他会议上的程序委员会的成员。 自2012年以来,一直在EPAM Systems担任培训师,并与Hadoop / Spark和其他重要日期成为朋友。
在本报告中,Alexey将基于他与Apache Spark ML,Apache Mahout,Apache Flink ML的合作经验以及创建Apache Ignite ML的经验,讨论将经典的机器学习算法用于分布式执行的问题。 Alexey还将讨论在这些框架中分布式ML算法的实现。
最后-Yandex的两份有关Yandex数据库的报告。
Vladislav是分布式平台组中的Yandex开发人员。 Yandex数据库是一种可水平扩展的,按地理区域分布的容错DBMS,它可以承受磁盘,服务器,机架和数据中心的故障,而不会影响一致性。 为了确保容错能力,使用了专有的分布式共识算法以及报告中详细讨论的许多技术解决方案。 DBMS开发人员和基于DBMS的应用程序解决方案的开发人员都可能会对该报告感兴趣。
Semyon-Yandex分布式平台小组中的开发人员,正在研究使用YDB安装的多租户的可能性。
Yandex数据库专为OLTP请求而设计,并满足交易系统的ACID要求。 在报告中,我们将考虑YDB交易系统基础上的交易计划算法。 我们将分析哪些实体参与交易,谁为交易分配全局顺序,如何实现交易的原子性,可靠性和严格的隔离级别。 通过一个常见问题的示例,我们考虑使用两阶段提交和确定性事务来实现事务。 我们讨论它们的差异。
接下来是什么?
会议计划继续充满新的报告。 特别是,我们希望获得JetBrains的Nikita Koval ( ndkoval )和Odnoklassniki的Oleg Anastasiev ( m0nstermind )的报告。 Nikita在Kotlin团队中从事协程的算法,Oleg在Odnoklassniki平台上为高负载系统开发体系结构和解决方案。 此外,还有一个有条件的空位,计划委员会正在为之工作。
九头蛇会议将于7月11日至12日在圣彼得堡举行。 门票可以在官方网站上购买 。 我们提请注意在线票务的可用性-如果出于某些原因,您现在无法在圣彼得堡居住。
在九头蛇见我!