容器和分布式系统:从哪里来,将会去哪里

容器和分布式系统:从哪里来,将会去哪里_第1张图片

Mesosphere首席执行官(CEO)Florian Leibert最近和Chuck McManis(https://www.linkedin.com/in/cmcmanis)进行了一次座谈,内容关于早期研发分布式系统遇到的挑战、容器技术的起源和计算的未来。如果你有看Hacker News,很有可能你已经认识他了,笔名为ChuckMcM(https://news.ycombinator.com/user?id=ChuckMcM)的他很活跃。这次惊世的对话涉及到Chuck和他团队早期在建立分布式系统时所解决的问题,学到的经验教训和如何形成现在的架构--同时很有可能是计算的未来。


容器和分布式系统:从哪里来,将会去哪里_第2张图片



在机制中寻找机制

?


Florian Leibert(FL):你好,Chuck,可以给我们介绍下你令人印象深刻的工程师职业生涯么?你真正地在系统底层工作了很长的时间,可以跟我们稍微介绍一下这方面。


Chuck McManis(CM):我80年代中期来到旧金山湾区就职于Intel,然后我被一个叫Sun MicroSystems的初创公司招募过去。1986年Sun公开上市后我加入他们的内核组。那是一个非常有趣的地方,有很多聪明的人,很多人比我聪明得多,所以我在那里每天都在学习。我们和Berkeley在一起紧密合作开发Unix的BSD分发版本。我是基础开放网络计算(Basic Open Network Computing,BONC)组的一员,该组负责为内核网络化。我们那时仅仅提出一个称为网络文件系统(https://tools.ietf.org/html/rfc1094)的分布式文件系统格式,来实现远程过程调用。网络的激增是令人兴奋的。Sun把整个公司都联网了,我们大概有1500台机器。这在当时是一个巨大的数字,在其他地方根本不可能重建,但是在今天看来却平淡无奇,很普通。


这是全新的领域,当我们建立并分布化这些系统时,一开始就遇到了并发问题,怎么能使分布式变得有可能呢?内核编程对我来说是令人兴奋的,因为不允许出错。然后我发现这其中最令人兴奋的角色是网络开发者。如果网络开发者在他们代码中犯了错,他们会把整个网络宕掉,宕掉1500个内核。我对那个级别的复杂度非常感兴趣,因为我总是乐于解决真正复杂的问题,并在机制中寻找机制。我设计了一个叫做NIS+(https://en.wikipedia.org/wiki/NIS%2B)的复杂服务,第一个不存在于单独机器上的服务。它实际是很多机器的集合,对外表现为一个单独服务。


我们遇到了很多甚至现在都存在于分布式系统的问题,比如时间同步、日志、事务新建。大约在Leslie Lamport发表一个关于拜占庭将军问题的开创性论文(https://www.microsoft.com/en-us/research/publication/byzantine-generals-problem/)时候,影响了我们。我不久前重读这篇论文,因为它在Hacker News,我认为它做了很伟大的工作,提供了分布式系统建立的核心关键、基础的理解。分布式系统在80年晚期90年初期演进地非常迅速。大量的精力用于研究跨机器间的过程调用,并使得机器间透明,这样程序就可以被写成一个过程函数,而这些过程函数可以分布在多个机器上,就像之前单机运行的那样。


使分布式计算更容易

?


FL:Chuck,你现在应该是很熟悉Mesos了,Mesos的宗旨是使写分布式系统变得超级容易。当然会和现在的Kubernetes,有些相似的地方。人们还是像以前那样想使分布式编程变得更加容易,这一直是没有变化的。


CM:是的,当然是。早期关于多进程和分布式进程、超级计算和分布式计算间有场争论,直至今天这场争论仍在继续。一个分布式系统需要节点间的网络连接,相对于单个节点内部,这是很小很小的带宽占用。在Sun Microsystems之后,我加入了几个创业公司,然后加入了制造存储机的Network Appliance(http://www.netapp.com/us/index.aspx)。在那时我开始从扩展客户端存储的角度来关注分布式系统,而不依赖于处理器扩展架构,并构建分布式RAID阵列。分布式文件系统的关键是他们是状态依赖的。没有合适的状态管理,你不可能让一堆人改变和移动文件。所以我们发现其中的一个关键是在结束回收一个操作事务前,很多的元数据需要在全部节点上保持一致。元数据量和在网路间的传输速度是能多快执行这些事务的限制因素。


容器技术的起源

?

FL:回到Sun Microsystems的日子,你和伙伴们已经在关于操作系统端隔离和打包的内核领域有研究了,对吗?你几乎是在Docker出现之前提出的Docker概念,或者类似的概念像Solaris zones和Cgroups。根据你的经历,到底是什么驱动你从事这样的工作,为什么隔了这么久人们才会对这个话题感兴趣?另外为什么今天这么多人大肆宣传这个很旧的技术?


CM:这确实是一个好问题,它涉及到并行处理系统和分布式系统这场争论。在Sun Microsystems有两种意见:贝奥武夫高性能计算集群(Beowulf Cluster)(https://ntrs.nasa.gov/search.jsp?R=20150001285) 和分布式系统。在贝奥武夫高性能计算集群中,显而易见的一个特点是你可以拿出一个节点,并用到集群中,而且不影响带宽,不影响在其他节点上的资源使用,这个特点并不昂贵。这使得贝奥武夫高性能计算集群非常值得拥有,但是并行计算的伙伴们没有同等的财力支持,他们确实想研发出一种架构,这个架构里专用的服务器使用可以隔离并行计算的内核执行特殊任务。当服务器的任务变化时,每个服务器根据任务进行适当的伸缩,但这基本是个无用的垃圾。来自顾客的各种需求会说:“我不想买每年一个新机器。我想能够以不同的方式重新利用现有的硬件。我想使它能够重新配置。”


关键的需求是资源利用、进程隔离和防止信息泄露。事实证明在20年前IBM通过分区隔离已经在某种程度上解决了这个问题,但是他们是在自己的大型机硬件和架构上实现的。目前是每个人都有这个需求,而且是在廉价普通的硬件上。非常有洞见的是Google已经在2000年内部实现了,并且证明了他们确实擅长解决这个问题。


恰好在那段时间,我被招募到Google的平台组工作研究伸缩存储。那是一个巨大的机会,因为我正在研发相当大网络存储系统。我意识一个关于分布式系统的非常重要的关键点,就是系统间的元数据有一天会超过实际物理设备。


能够支持服务的可用带宽的数量实际变成关键因素,它决定了有多少数据可进出系统。Google因有一套策略使每个节点都统一而出名,这样就可以在节点之上进行事情调度了。我提出了一个有点异端的观点,就是或许存储可以变成跑在设备上的一级服务,这个设备只用来为网络提供存储的API。


容器变成主流

?


FL:所以这样看起来整个职业生涯中你的工作很多是关于隔离,关于使资源共享更高效的。我们已经讨论了些在Sun Micorsystems关于容器技术的早期起源。再次讨论下容器技术,你认为为什么这个技术花了这么久才变成主流,从内置于Solaris到Docker实现?


CM:原因是计算机性能提高快于进程隔离的需求,更高效的系统效率,所以人们能够使用更多的硬件来解决问题。这阻挡了我们一段时间,但是人们有越来越多的硬件来解决建立他们自己的问题解决方案。今天的计算机是非常快的,硬盘容量高,内存如此便宜,对于一个相当大的问题,你可以分割解决。大多数人购买便宜的硬件,但是只利用它20%的能力,他们不关心这个因为没有巨额金钱投资。对于AWS,Azure,Google,或者Facebook并不是这样。如果看下早期的容器研究工作,都是来自于这些公司的需求,简化管理他们的数据设施,并且最大化高效的设备运营。


他们开始提供这些作为服务,客户们发现通过标准化的配置迅速部署的益处。客户们开始想要在他们自己的数据中心中有这样的设施,来获得像Google或者Amazon那样的效率和能力。另外,当Amazon和Google的员工离职后去了其他公司,他们想要这样的工具所以他们开始重造这样的工具。在大型公司内部一开始致力于解决资源利用的工具就演变成了全世界可以使用的开源工具。


容器的下一步

?


FL:根据你在分布式系统上的经历,你认为我们正在走像Google这样公司的类似路径么?需要解决棘手的网络问题?哪个解决方案最终会演变成主流甚至创始性的,例如Container Network Interface(https://github.com/containernetworking/cni),其他解决方案是否有存在?


CM:是的,这是一个大数据问题。而且在如今,对于非常巨大的数据集上是非常令人抓狂的。你可以应用众所周知的算法如机器学习、相关算法,从之前不可见的数据中提取知识。这些工作正在被分布式系统完成,因为他们是更划算的伸缩扩展,但这会恶化网络带宽问题。


分布式计算的未来

?


FL:听起来你是说你相信未来将会有更多的云,而不是我们现在有的三四个中心云,最终在边缘也都会变成云。


CM:是的,其中大部分是围绕廉价的处理器获得的。我们可以在末端构建廉价处理器构成的云,连接到非常廉价的传感器和读取器上。他们将是一个独立的云。在某个位置上可以有成百上千的独立的云。他们甚至不需要连接到网络上,只要能够自行运行即可。他们是独立的云。这和我们最初建立分布式计算的技术是类似的。


原文链接:https://mesosphere.com/blog/containers-distributed-systems/


深入学习Kubernetes

?


本次培训内容包含:Kubernetes架构、Kubernetes安装、Kubernetes功能导览、监控解决方案、Kubernetes高阶——设计和实现、Kubernetes落地实践等,点击识别下方二维码加微信好友了解具体培训内容


?


点击阅读原文链接即可报名。

你可能感兴趣的:(容器和分布式系统:从哪里来,将会去哪里)