所谓“理论联系实际”、“万变不离其宗”。学术界的论文常常是指导工业界的圭臬,特别是在计算机相关科学领域:快速的发展,常常有赖于学术界几篇论文的突破。

\u0026#xD;

百度基础体系首席架构师林仕鼎发布了一篇博客,指导大家如何阅读、学习系统架构领域的相关论文。

\u0026#xD;

一开头,林仕鼎指出:

\u0026#xD;

\u0026#xD;

系统架构是一个工程和研究相结合的领域,既注重实践又依赖理论指导,入门容易但精通很难,有时候还要讲点悟性……要在此领域进阶,除了要不断设计并搭建实际系统,也要注意方法论和设计理念的学习和提炼。

\u0026#xD;

对于工程师来说,到一定阶段后往往会遇到成长瓶颈。要突破此瓶颈,需要在所属技术领域更深入学习,了解本领域的问题本质、方法论与设计理念、发展历史等。

\u0026#xD;

\u0026#xD;

文中提到的东西虽然主要来自他09年的文章,没有包括近几年的工作,不过他认为:

\u0026#xD;

\u0026#xD;

其实也足够了,看paper是一个从少到多再到少的过程。对问题本质、背景和发展历史有大致了解,再辅以hands-on的实践(长期的真正的实践),足以摸到本领域的门径。

\u0026#xD;

\u0026#xD;

林仕鼎在文中一共提到9个领域:操作系统、虚拟机、系统设计、编程模型、分布式算法、覆盖网络和P2P DHT、分布式系统、有争议的计算模型、调试。篇幅所限,本文只列举部分,全文请移步原文。

\u0026#xD;

他首先分享了操作系统领域的相关论文:

\u0026#xD;

Mach:相关介绍,论文链接。

\u0026#xD;

\u0026#xD;

传统的kernel实现中,对中断的响应是在一个“大函数”里实现的。称为大函数的原因是从中断的入口到出口都是同一个控制流,当有中断重入发生的时候,实现逻辑将变得非常复杂。大多数的OS,如UNIX,都采用这种monolithic kernel architecture。

\u0026#xD;

1985年开始的Mach项目,提出了一种全新的microkernel结构,使得由于70年代UNIX的发展到了极致而觉得后续无枝可依的学术界顿时找到了兴奋点,也开始了沸沸扬扬的monokernel与microkernel的争论。

\u0026#xD;

\u0026#xD;

Exokernel:相关介绍,论文链接。

\u0026#xD;

\u0026#xD;

虽然microkernel的结构很好,但实际中并没有广泛应用,因为performance太差,而且大家逐渐发现OS的问题并不在于实现的复杂性,而更多在于如何提高application使用资源的灵活性。这也就是在kernel extension(例如loadable module in Linux)出现后,有关OS kernel architecture的争论就慢慢淡出人们视线的原因。

\u0026#xD;

Exokernel正是在这样的背景中出现的,它并不提供传统OS的abstraction(process,virtual memory等),而是专注于资源隔离与复用(resource isolation and multiplexing),由MIT提出。在exokernel之上,提供了一套库,著名的libOS,用于实现各种OS的interface。这样的结构为application提供了最大的灵活度,使不同的application可以或专注于调度公平性或响应实时性,或专注于提高资源使用效率以优化性能。以今天的眼光来看,exokernel更像是一个virtual machine monitor。

\u0026#xD;

\u0026#xD;

Singularity:相关介绍,论文链接。

\u0026#xD;

\u0026#xD;

Singularity出现在virus,spyware取之不尽、杀之不绝的21世纪初期,由Microsoft Research提出。学术界和工业界都在讨论如何提供一个trust-worthy computing环境,如何使计算机系统更具有manage-ability。

\u0026#xD;

Singularity认为要解决这些问题,底层系统必须提供硬件隔离,而以前人们都依赖的硬件virtual memory机制并无法提供高灵活性和良好性能。在.Net和Java等runtime出现之后,一个软件级的解决方案成为可能。

\u0026#xD;

Singularity在microkernel的基础上,通过.Net构建了一套type-safed assembly作为ABI,同时规定了数据交换的message passing机制,从根本上防止了修改隔离数据的可能。再加上对应用的安全性检查,从而提供一个可控、可管理的操作系统。由于.Net CLR的持续优化以及硬件的发展,加了这些检查后的Singularity在性能上的损失相对于它提供的这些良好特性,仍是可以接受的。

\u0026#xD;

\u0026#xD;

关于虚拟化技术,他重点提到如下几篇:

\u0026#xD;

  • \u0026#xD;

    《Scale and Performance in the Denali Isolation Kernel》:为互联网服务而设计的应用层虚拟机,在普通机器上可运行数千个VMs。其VMM基于isolation kernel,提供隔离,但并不要求资源分配绝对公平,以此减少性能消耗。

    \u0026#xD; \u0026#xD;

  • \u0026#xD;

    《The Entropia VirtualMachine for Desktop Grids》 要统一利用公司内桌面机器资源来进行计算,需要对计算任务进行良好的包装,以保证不影响机器正常使用并与用户数据隔离。Entropia就提供了这样的一个计算环境,基于windows实现了一个应用层虚拟机。其基本做法就是对计算任务所调用的syscall进行重定向以保证隔离。

    \u0026#xD; \u0026#xD;

在“系统设计”方面,他推荐的是: 《Thirty Years Is Long Enough: Getting Beyond C》:

\u0026#xD;

\u0026#xD;

C可能是这个世界上最成功的编程语言,但其缺点也十分明显。比如不支持thread,在今天高度并行的硬件结构中显得有点力不从心,而这方面则是functional programming language的长处,如何结合二者的优点,是一个很promising的领域。

\u0026#xD;

\u0026#xD;

编程模型的重点推荐是:《SEDA: An Architecture for Well-Conditioned, Scalable Internet Services》

\u0026#xD;

\u0026#xD;

Thread不好,但event也没法解决所有问题,于是我们寻找一个结合的方法。SEDA将应用拆分为多个stage,不同stage通过queue相连接,同一个stage内可以启动多个thread来执行queue中的event,并且可通过反馈来自动调整thread数量。

\u0026#xD;

\u0026#xD;

分布式算法:

\u0026#xD;

  • \u0026#xD;

    Byzantine (《The ByzantineGenerals Problem》): 分布式系统中的错误各种各样,有出错就能停机的,有出错了拖后腿的,更严重的是出错了会做出恶意行为的,将会对系统造成严重影响。对于这类问题,Lamport提出了Byzantine failure model,对于一个由3f+1个冗余组成的状态机,只要叛变的冗余数量小于等于f,整个状态机还能正常工作。

    \u0026#xD; \u0026#xD;

  • \u0026#xD;

    Paxos (《The part-time parliament》,) 如何在一个异步的分布式环境中达成consensus,这是分布式算法研究的最根本问题。Paxos是这类算法的顶峰。

    \u0026#xD; \u0026#xD;

分布式系统方面的论文很多,他重点提到这一篇:《Simulating Large-Scale P2P Systems with the WiDS Toolkit》:

\u0026#xD;

\u0026#xD;

Distributed simulation有意思的地方是simulated protocol是分布式的,而这个simulation engine本身也是分布式的。逻辑和物理的时间和事件交杂在系统中,需要仔细处理。

\u0026#xD;

\u0026#xD;

对于有争议的计算模型,他指出:

\u0026#xD;

\u0026#xD;

现在的软件系统已经复杂到了人已经无法掌握的程度,很多系统在发布时都仍然带着许多确定性(deterministic)或非确定性(non-deterministic)的bug,只能不断打补丁。既然作为人类,不够精细的特性决定了我们无法把系统的bug fix干净,我们只能从其他角度入手研究一种让系统在这令人沮丧的环境中仍能工作的方法。这就像一个分布式系统,故障无法避免,我们选择让系统作为整体来提供高可靠性。

\u0026#xD;

\u0026#xD;

这个领域的论文主要研究内容都集中于:

\u0026#xD;

  • 如何正确保存状态;\u0026#xD;
  • 如何捕捉错误并恢复状态;\u0026#xD;
  • 在进行单元级恢复时,如何做到不影响整体。\u0026#xD;

在系统调试领域,林仕鼎推荐两篇论文:

\u0026#xD;

  • Black box debugging,《Performance debugging for distributed systems of black boxes》\u0026#xD;

\u0026#xD;

对大型系统的performance debugging非常困难,因为里面的问题很多都是非确定性的,而且无法重现。只能通过对log的挖掘,找出配对的调用/消息以定位问题。

\u0026#xD;

\u0026#xD;

  • 《A Tool for Finding Copy-paste and Related Bugs in Operating System Code》\u0026#xD;

\u0026#xD;

很多人在重用代码的时候,都使用copy-paste。但有时候简单的CP会带来严重的问题,例如局部变量的重名等。CP-miner通过分析代码,建立语法树结构,然后mine出这类错误。

\u0026#xD;

\u0026#xD;

在文中,林仕鼎提出:

\u0026#xD;

\u0026#xD;

希望大家能通过对这些领域的了解和学习,掌握更多system design principles,在自己的工作中得心应手,步入自由王国。

\u0026#xD;

百度基础体系首席架构师林仕鼎分享系统架构领域论文精要相关推荐

  1. QCon北京2013:NASA云计算专家Khawaja,百度基础体系首席架构师林仕鼎

    距离QCon北京2013(4月25-27)还有一个月,现在大会讲师邀约工作已几近完成.具体日程安排.演讲信息请见大会日程页面. \ 需要注意的是,3月31日是大会8折购票的截止日,4月开始大会门票将进 ...

  2. 专访百度云首席架构师林仕鼎:如何突破瓶颈

    专访百度云首席架构师林仕鼎:如何突破瓶颈 在今年的百度开发者大会上,百度云战略高调发布,成为开发者们瞩目的焦点.一直以来在公共领域很低调的百度移动·云事业部的首席架构师,也在当天以百度云首席架构师的身 ...

  3. 前百度云首席架构师林仕鼎的创业梦:以十年为期,搭建在“云”上、可复制的虚拟学校

    前百度云首席架构师林仕鼎的创业梦:以十年为期,搭建在"云"上.可复制的虚拟学校 前天,百度云首席架构师林仕鼎将离开百度.投身创业的消息流传开来. "技术出身的工程师会想怎 ...

  4. 林仕鼎:系统架构领域的一些学习材料

    原文出处: 林仕鼎的轻博客(@林仕鼎)    系统架构是一个工程和研究相结合的领域,既注重实践又依赖理论指导,入门容易但精通很难,有时候还要讲点悟性,很具有"伪科学"的特征.要在此 ...

  5. 转载:林仕鼎: 系统架构领域的一些学习材料

    林仕鼎: 系统架构领域的一些学习材料 作者:@林仕鼎  http://weibo.com/linshiding 系统架构是一个工程和研究相结合的领域,既注重实践又依赖理论指导,入门容易但精通很难,有时 ...

  6. 百度重要技术精英出走! 云计算和大数据首席架构师林仕鼎辞职!

    既然陈怀临的弯曲评论已经公开了这一消息,那我也就可以说啦. 其实林仕鼎的决定几个月之前就做出了,圈内朋友都知道,我也当面向他确认过.他当时说在考虑教育或者电商方面的创业.刚才在微信群里他告诉大家,已经 ...

  7. 林仕鼎: 系统架构领域的一些学习材料

    作者:@林仕鼎  http://weibo.com/linshiding 系统架构是一个工程和研究相结合的领域,既注重实践又依赖理论指导,入门容易但精通很难,有时候还要讲点悟性,很具有"伪科 ...

  8. 林仕鼎:架构设计与架构师

    发表于13小时前|340次阅读| 来源CSDN|0 条评论| 作者包研 架构师林仕鼎百度云计算大会第五届云计算大会讲师秀 摘要:他自称"西二旗跨界架构师",又戴上了百度基础体系首席 ...

  9. 林仕鼎谈数据中心计算(三):学术界与工业界,以及未来展望

    在<林仕鼎谈数据中心计算>的第一部分,百度基础体系首席架构师林仕鼎先生提到要将数据中心当做逻辑上的一台机器来设计架构.在之后的对话中,林仕鼎具体介绍了对数据中心的存储资源做逻辑分层.物理映 ...

最新文章

  1. 【Flask】视图高级
  2. 教程 | OpenCV深度神经网络实现人体姿态评估
  3. 亮剑:PHP,我的未来不是梦(3)
  4. Java 输入 输出
  5. iOS: JS和Native交互的两种方法,iosjsnative交互
  6. 报错记录:SprintBoot---Unable to start embedded container; nested exception is java.lang……
  7. Python3.X新特性之print和exec
  8. 文件处理之解决使用 feof(c语言)或(fin.eof())出现多读问题
  9. Lambda表达式替代匿名方法
  10. Hbase常用操作记录
  11. 这是一个关于软件开发的博客。
  12. iPhone 14 Pro或配备8GB内存:苹果史上开天辟地的升级
  13. 北京冬奥会科技感十足多家科技公司助力
  14. python井字棋如何判断输赢_python 井字棋游戏 简单版,不知道为什么不判断,用Tkinter做的界面...
  15. 网站访问数据统计工具
  16. 删除bootcamp后扩充Mac分区
  17. 非洲做项目的务实与务虚
  18. postgresql -- 绑定变量窥视规则
  19. Python实现图像的椒盐噪声添加和基础的平滑处理(均值滤波与中值滤波)
  20. jquery触发键盘按下事件

热门文章

  1. 6-1 求二叉树高度
  2. Vue Plugin Vue插件
  3. 学习积累——利用JAVA实现身份证图片正反面信息提取
  4. POJ3422 Kaka's Matrix Travels
  5. 总结了大佬的学习方法 #CSDN博文精选# #学习方法# #高效系统化学习#
  6. swing应用-简单记事本
  7. 为了孩子快乐成长,我写了个迷宫游戏
  8. [闪存2.1] NAND FLASH特性串烧 | 不了解闪存特性,你能用好闪存产品吗?
  9. wasp软件怎么安装不了_安装选项 · alibaba/wasp Wiki · GitHub
  10. Vegas视频素材下载——