作者:lixuefeng
转载链接:https://zhuanlan.zhihu.com/p/74483850
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
-------------------------------------------------------------------------------------------
IT软体技术架构进入云化时代后,新概念、新技术大量涌现。从几年前热火的Openstack、计算存储网路三大虚拟化技术、Iaas平台,到近几年更火热的容器和云原生的相关技术,在云计算这一领域新技术可谓是层出不穷。
我们经常会听到的这些概念,比如容器、docker、kubernetes、微服务架构、Paas平台、服务中台、Devops、云原生等等。这些技术和概念彼此之间感觉是独立的,我们很容易从其中某一个角度学习入手并应用;但是,很多时候,我们会发现这些技术彼此之间又有密切的关联,从文章也好、技术落地应用的场景也好,它们往往又出现在同一个地方。它们之间究竟有什么联系,彼此之间有什么依赖,让人十分的困惑。
在本文中,从这些技术彼此之间的依赖和关系入手,讲述它们在当今软体云化和微服务化时代中的作用,希望读者从这些总结对比入手,对微服务相关的技术体系建立全局性的视野和理解。
1. Docker容器:
docker大部分人都熟悉或者至少是听过。Docker技术在很多技术资料和书籍上,往往会跟虚拟化技术做对比,它们的对比如下:
- KVM等虚拟化技术是在操作系统级别上进行虚拟和隔离,每一个虚机都是独立的OS。
- 而docker是在同一个操作系统中,实现了轻量级的虚拟化。「轻量级的虚拟化」怎么理解呢?看起来docker容器是独立的操作系统,本质上是同一个操作系统中的进程隔离。所以它是轻量级的;从而,docker比KVM更省资源、资源利用率更高。
Docker的设计理念很伟大、作用也很伟大。但是docker的伟大性远不只是体现在「轻量的虚拟化」;docker的伟大性体现在:它实现了:同一个软体发布,在不同的平台上运行。
这个好处是不是很熟悉?这其实就是Java最初流行起来的原因。Python语言为了实现这一点,弄出了VirtualEnv,把依赖包都随著程序发布,才解决了多平台运行的问题。Docker的设计很优雅,一个应用都打包成一个image格式,image采用分层技术等等,这部分不是本文的重点,大家希望更深入了解的话,可以参考其他资料。
2. Kubernetes
docker镜像运行起来是一个一个的程序,多个程序合起来做成一个大的分散式应用怎么做呢?
答案很简单,一样的,程序之间互相调用就行。就好比传统的分散式应用,多弄几台伺服器,一个伺服器上装一个程序,程序之间通过socket或其他协议通信。基于docker的分散式应用也是如此,区别只是网路虚拟化了、CPU和内存资源也虚拟化了。
但是永远不要低估分散式应用的复杂性,举两个例子,想像我们搭建了一套分散式集群,运行了一套分散式应用:
- 这个集群中的某个机器出故障了(断电了、硬碟坏了等等),怎么去排查故障、怎么去修复?
- 这个集群中某一部分业务由于访问量增加,需要扩充支撑能力,怎么扩充?
针对这两个问题,我们很容易想到答案,那就是人过去检查机器、修复或者重装,负载过大了,就改应用的架构,上面套上负载均衡性,采用可扩展的架构。这些都是传统的办法,这些解决办法不好的地方也很明显,就是修复太慢,太费人力、成本高、对业务影响大,想像一个网站,等扩展架构都弄好了,用户也就都流失了。
Kubernetes是容器编排系统,它首要的目的就是为了解决上面这个例子里的两个问题:
- 分散式容器应用的可靠性,在伺服器或容器应用出现问题的情况下,自动感知,自动将容器应用在集群内的其他机器里重新运行起来
- 分散式容器应用的可扩展性,通过启动相同的容器应用,自动的提升应用的负载支撑能力。
Google为了压制AWS,把自己的容器运行平台开源出来,成为了现在的Kubernetes,这段历史大家可以搜索了解一下。
3. Paas
云计算的经典理论上讲三大层:Iaas、Paas、Saas,分布是Infrastructure、Platform、Software as a service。其中的Infrastructure指的是硬体资源虚拟化;Platform指的是软体平台,是应用软体运行的基础平台。
为什么经典理论要把Paas这一层单独拿出来?
Saas层是直接面向业务用户的,Iaas层是应用运行的底层物理资源,中间的Paas是应用运行的标准平台,它包括基础资料库服务、基础中间件服务、基础开发框架和开发套件、应用部署、管理和运维服务。通过Paas平台这一层,Saas层更专注于自身的业务实现,运行平台和运行中间件由Paas层提供。
因为前述的Kubernetes的成熟程度以及无可比拟的优势,Paas层的基础架构基本上都是采用Kubernetes。
有时候会听到「中台」这个概念,中台这个」中「字意思是」上对Saas、下对Iaas「,中间的就是中台。中台这个概念本质上是把paas层再细分,分为底层基础平台(kubernetes和docker这一层)、数据层(叫做数据中台)、业务层(业务中台)等。