查看原文
其他

参加国外的顶级技术大会是一种怎样的体验?| PPT下载

2016-03-18 QCon2016北京站 InfoQ

以下是一位外国技术人参加2016QCon伦敦全球软件开发者大会的体验。想不想知道呢?

关注InfoQ,回复关键字「伦敦」下载干货PPT。

纪要

第一天

2016年3月7日,QCon全球软件开发者大会(伦敦站)正式拉开帷幕,首先开场的是前SpringSource的CTO Adrian Colyer,对他最新撰写的论文及之前的一些论文进行了总结分享,这些论文是他的博客的重要组成部分,并且他还提供了一个索引列表。演讲稿可以在speakerdeck上进行下载。

在第一天的议程中,来自Apple公司的两个分享引起了大家极大的兴趣。Norman Maurer分享了Apple公司超过50万台的大规模Netty部署以及他们在这套框架上的一些改进优化成果。其中之一是通过扩展Twitter的Finagle框架,实现了一个高性能的SSL网络终端层。问题的部分原因是Java的NIO过多的同步锁以及Java的SSL库做了太多冗余的事情,阻碍了资源的最大化使用。

在OpenSSL/LibreSSL/BoringSSL基础上,通过为Netty提供一个新的SSLProvider,可以让单台服务器的容量从10Mb/s提高到60Mb/s,多核服务器的利用率从40%提升到100%。还有一个分享是有关Apple公司对Cassandra扩展优化方面的,包括他们碰到的一些坑。这些问题最终被解决并被合并到了代码库,比如为了避免集群节点变化时产生数据不一致而采取的集群节点签名和增量重建。

大会上有一位盲人分享者(他的导盲犬非常漂亮)讲述他是怎样用IBM云计算来完成一个长距离的马拉松比赛的。这是一个非常鼓舞人心的分享,我强烈建议大家去观看这个分享视频。

QCon伦敦站有Java的相关话题,但这无疑已经不是大会的关键内容。Java相关议程有很多:Simon Ritter分享如何用Jigsaw来实现Java的模块化(演讲稿);Jeurgen Hoeller分享Spring5的新特性(演讲稿);Mark Price带来了有关hot code is faster code的精彩演讲(演讲稿);在最后,还有很有价值的Java9的G1垃圾回收新特性分享(演讲稿)。

在全天活动最后,John Graham-Cunning和Sydney Paula共同主持了“是谁发明了电脑”的主题讨论,谈及Babbage、Lovelace和Turing的部分历史。期待分享视频和演讲稿近期能够让大家下载观看。

第一天的议程中还有很多有意思的话题,相关讲师和演讲稿的链接已经整理到这个日程表中,分享视频也会很快和大家见面。

纪要

第二天

此次QCon伦敦大会首先探讨了过去二十年中各引领一时风潮的架构设计趋势。虽然开题内容已然极具吸引力,但紧随其后的主题演讲却将本次大会推向新的高潮。

各主题演讲囊括一系列焦点议题,其中包括大家可能感兴趣的架构选项(由Wes Reisz主持)、《走近裸机》演讲(由Martin Thompson主持)以及《真实世界中的现代CS》(源自Google Docs架构,由MichaLemonik主讲)等等。

虽然未能全程记录其内容,不过我在推文当中已经发布了几张与之相关的现场照片。很明显,Google Docs架构已经成为一套出色的Web电子表格服务器; 一家名为2WebTechnologies的小型企业则推出了一款名为XL2Web的产品,能够作为远程查看平台浏览电子表格内容,且支持Excel表格格式并可将其渲染为远程HTML视图。

由于当时最先进的浏览器也只是IE SP1,因此所有数据都需要被保存在服务器之上以待使用。而以此为基础的协作机制则完全是一场偶然——两位工作人员同时编辑了一篇文档,并发现自身能够同时查看其结果。幸运的是他们构建的这套模型不存在非交换操作限制,这意味着此类同时操作能够轻松重现。

这也正是如今Google Docs SDK所使用的基本实现模式; 事实上,该API仍然存在且如今开始为移动协作贡献力量。规模化通过对内容在拆分与一致性之间选取平衡点的方式实现; 作为一套极具人气的读取/写入文档模式,用户可以切换至只读版本以实现一致性保障。

事实证明,一旦一致性单元的体积超出单一服务器的承载能力,这种一致性将不再具有保障,这意味着我们需要对文件进行拆分以实现细粒度控制能力,这有点像是对书中的特定章节进行调整。最终,Google Storage拥有大量数据,但仍能保证一切有条不紊地保持运行。

其它值得一提的内容还包括Martin Thompson带来的《低延迟请求与并发Java》演讲,他在其中提到Java应用所能够实现的几种延迟削减方式,特别是在处理垃圾回收与伪共享机制的情况下。他的开源Aeron消息服务器采用一套运行在客户端上的进程外消息代理机制,并能够在Java进程之外交付消息,这就使得客户端中的Java垃圾回收操作不再由于GC暂停而造成不必要的卡顿现象。

消息由一系列旋转队列集负责传递,随后利用共享式内存允许客户端直接向内存空间中写入消息并供服务器加以读取。他同时比较了Java当中的标准Queue对象,同时演示了由其产生的垃圾与锁定效果,其延迟水平(特别是99%之后的小数部分)会随着更多生产程序的涌入而显著提升。

在此之后,他介绍了Many To One Concurrent Array Queue并展示了其它标准队列机制的基准效率测试结果。整场主题演讲可谓惊喜连连,敬请大家期待我们的整理成果。而在内容正式上线之前,大家不妨查看Martin的博客与他在GitHub上发布的示例代码。

同样的,我建议大家关注硬件事务内存(简称HTM)这一重要议题。虽然其早在Haswell时代就已经出现,但却由于存在固件缺陷而遭到禁用——不过下一代Broadwell芯片已经通过其TSX指令集将HTM交付至我们手中。这使得事务能够在发生(一旦出现故障,则调用清理/重试位置)后,将随后的全部指令修改内容保存在缓存之内,直到其被最终提交——这时各项经过修改的变更才会被重新写入,或者将状态重新存储至事务开头并调用重试逻辑。

这种方式能够实现多项特定改进(特别是通过无主动锁定实现锁忽略),尤其是在锁机制涵盖多种不同数据结构并有可能造成并发数据吞吐强度增加的前提之下。我记录下了此次QCon伦敦大会上由Gil带来的演讲,也在尽快整理素材希望将其发布在InfoQ站点当中。

谷歌方面带来的另一项演讲着眼于分布式系统在持久性内存变更层面的具体实践。尽管主讲人本身从事的正是分布式构建设计工作,不过其在演讲中引用了大量来自学术文献的内容,而鲜少提及自己的实践体会。这有点像PaperweLove网站昨天发布主题演讲时的状况。

这里我们来总结其发言核心如果大家的现有系统有可能发生故障,则以租赁方式进行构建(pull request heartbeat)并在heartbeat发生故障时立即断开客户端连接,以此实现整体稳定性; 特别是在客户端任务处于可重复提交的条件之下。当然,多分段流水线也能够简化规模调整,特别是在对各队列阶段加以划分并面对大量消费者的情况下; 不过这部分内容应该属于分布式规划伸缩基础知识的范畴了。

简单来讲,我也参加了JIT与GC演讲,主讲人利用大量配置标记与调查举措向我们解释了Java当中的垃圾回收机制以及无核化技术的运行原理。这两项演讲同样非常精彩,不过其中涉及的细节过多,这意味着我很难以文字的形式向大家重现其内容。

本次大会并没有组织晚间主题演讲或者是晚间聚会活动——这想这可能QCon大会多年以来第一次没有准备此类项目。对于初次参与QCon大会的朋友来说这可能没什么大不了,但如果各位已经算得上老观众,那么这次的情况无疑令人有些意外。

纪要

第三天

今天是本次QCon伦敦大会的最后一天,而我则负责主持其中的现代原生语言议题。由于亲自参与,所以今天的文章可能在立场上有所偏向——请大家见谅:) 
作为新一天的开篇之作,我们推出了由Sylvan Clebsch带来的《FinTech公司的Pony使用心得》。Pony是一款出色的语言,用于构建LLVM并采用一套全面的系统以通过单一进程应对数百万条消息以及actor。每个actor都拥有自己的消息队列以及heap; 因此当垃圾回收机制运行时,其只需要配合单一actor的heap,该actor的其余部分仍能够正常工作。

如此一来,Pony彻底摆脱了其它垃圾回收运行时(例如Go与Java)中的垃圾回收暂停导致进程中止的问题。另外,代码写入完全不受阻碍; 一切都以异步方式进行。这意味着工作运转毫无延迟,且整体系统具备事件驱动特性。(事实上,当没有更多消息需要处理时,即意味着其无任务可执行,而系统也将就此关闭。)

消息队列不存在边界(以避免拥塞),但系统在资源容量被全部占用时仍然会出现拥塞; 在这种情况下,其会减少发送请求的actor数量以作为背压实现形式。Pony拥有出色的实际表现,但知名度却并不高,因此我很高兴能以此作为今天第一场演讲的内容。我认为Pony的发展前途将一片光明。如果大家对其抱有兴趣,不妨点击此处查看该语言的官方网站。

第二场演讲为《Rust,面向每个人的系统编程》。由于Rust被广泛用于各类静态编译检查以验证对象不存在预期之外的共享或者差异属性,因此我个人对于这场演讲的定位——Rust应用原理——极为赞赏。我建议大家对Rust语言进行深入了解,其官方网站为https://www.rust-lang.org ,这里提供大量宝贵的细节信息。第三场演讲为Peter Bourgon带来的《六年编程路》,其中深入剖析了各类设计模式以及极具价值的实践技巧,我们将在稍后将内容整理为文章以飨读者。

第四场演讲是由我主持的《深入了解开源Swift》。我将尽快在SpeakerDeck上为大家带来演讲内容,但在这里可以先做做预告:我的演讲着眼于Swift如何将SIL编译为汇编语言,这种作法对于提升性能的重要意义——例如由throws转移至非throws方法所造成的签名变更(反之亦然),外加其自身函数所调用的实际默认参数。

第五场也是最后一场演讲来自两位IBM公司员工,其中Patrick Bohrer谈到了如何将Swift纳入服务器。IBM公司为Swift项目投入了大量资源,并在移动应用领域与苹果公司建立起协作关系,同时在服务器层面携手Linux。

Chris曾广泛参与过多个开源项目的贡献工作,其中包括Node.js以及Java,而他和他的团队目前正致力于将libdispatch (亦被称为Grand Central Dispatch)引入Linux环境,从而保证其可移植多线程代码能够运行在OS X、iOS以及Linux平台之上。Patrick还介绍了IBM在Linux上实现的Swift语言沙箱方案,其将应用程序每次运行的代码进行打包并作为Docker容器加以部署,随后才进行编译、运行并显示结果。

他还快速演示了Open Whisk项目,其使得Lambda类计算(由Swift等语言编写而成)任务能够被快速得到部署并将代码片段上传至云环境当中。IBM公司在其Swift网站中提供大量相关细节信息。


QCon伦敦真好,可惜太远,机票太贵!

如果你错过了QCon伦敦,千万别错过家门口的QCon2016北京站!

100多位国内外顶尖技术大牛,

4月21~23日相约北京,

报名请戳阅读原文!

http://2016.qconbeijing.com/

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存