不可不知的四大云原生关键技术:容器、微服务、服务网格、DevOps
11月21日,“2019云计算沙龙(第三期):云原生与多云管理”主题沙龙活动在上海市徐汇区交大科技园成功召开。此次活动吸引了诸多云计算相关的厂商专家以及业内专业人士积极参与,并就云原生与多云管理进行了积极讨论。
在过去几年里,随着云计算技术的风起云涌,云形态也发生着日新月异的变化。云原生技术也在云平台如火如荼的快速发展中应运而生。
美国专注于云计算与大数据基础平台的公司Pivotal最先提出了云原生应用,后来由谷歌成立的云原生计算基金会(CNCF,全称Cloud Native Computing Foundation)对云原生应用进行了定义:
· 云原生技术有利于各组织在公有云、私有云和混合云等新型动态环境中,构建和运行可弹性扩展的应用。
· 这些技术能够构建容错性好、易于管理和便于观察的松耦合系统。结合可靠的自动化手段,云原生技术让工程师能够轻松地对系统作出频繁和可预测的重大变更。
· 云原生计算基金会(CNCF)致力于培育和维护一个厂商中立的开源生态系统,来推广云原生技术。CNCF通过将最前沿的模式民主化,将这些创新为大众所用。
这或许看起来有些复杂。简单来说,云原生可以从字面涵义来理解,指的是任何在云中诞生、或主要在云中设计并运行的事物。但云原生不只是指应用程序所在的位置,更多的是指应用程序的的构建和部署方式。
云原生的代表性技术
1. 容器
容器技术是一种轻量级的虚拟化技术,主要致力于提供一种可移植、可重用且自动化的方式来打包和运行应用。容器这一术语是对船运集装箱的一个类比,它提供了一个标准化方式,将不同内容组合在一起,同时又将它们彼此隔离开来。
将容器和云原生联系起来,您或许会有些疑惑:容器不仅仅是在云端运行,如果有需要,也可以在本地服务器上运行容器。比如,在本地CI/CD管道中采用容器技术,或者使用容器来部署本地的内部业务应用程序。
但是,无需对容器技术进行太多延展,就可以将其与云原生技术联系起来。在很大程度上,容器有助于部署云应用:
· 您可以在云中部署容器。通常还可以使用相同的开源工具来管理云中的容器。这意味着,容器最大限度地提高了云之间的移动性。
· 可以使用容器在云中部署应用程序,而不必为特定云提供商的虚拟服务器或计算实例之间的细微差别而困扰。
· 云供应商可以使用容器来构建其他类型的服务,例如无服务器计算。
· 容器为在云中运行的应用程序提供安全优势。容器应用程序和主机环境之间增加了另一层隔离,而无需再运行整个虚拟服务器。
因此,虽然使用容器是确实不需要使用云,但容器却大大简化了云应用程序的部署。在云原生领域中,容器和云齐头并进,共同发展。因此,可以说容器技术是云原生应用发展的基石。
2. 微服务
微服务可以简单地描述为将一个大型的软件应用程序的功能分为多个独立的小型软件服务或“微服务”。每项微服务通常单独部署在容器中,负责一项单独的任务。为了让微服务协同工作,形成大型可伸缩的应用程序,微服务之间还可以进行通信和交换数据。简而言之,微服务的特点可以总结为:
· 云原生应用程序由多个不同的可重用组件(称为微服务)组成,这些组件都可以集成到任何云环境中。
· 这些微服务可以作为应用程序的构建模块,通常包装在容器中。
· 每个微服务可以协同工作,共同构成一个应用程序,单每个微服务可以通过自动化和编排流程进行独立扩展、持续改进和快速迭代。
· 每个微服务的灵活性也提高了云原生应用程序的敏捷性和持续改进,解决了单体大型应用程序的复杂性和灵活性问题。
以人力资源系统为例。以前,整个人力资源系统部署在一个大软件包中(例如,使用MVC框架的WAR文件)。使用微服务后,就无需将人力资源组件部署为一个大软件包——大型单体应用程序。该大型单体应用程序被划分并部署为按用途分类的若干个较小功能单元(工资、出勤和员工等微服务)。这样,维护一个模块时(例如,“工资”模块),由于微服务可以独立工作,就无需停用整个应用程序,也不会影响到其他功能,从而提高了更新迭代速度,也提高了服务质量。
3. 服务网格
随着微服务数量的增多,可能会形成上百个甚至上千个相互关联的服务,通过内部或外部网络相互连接。如果要绘制出每个微服务之间的连接关系,情况就复杂了。从代码级别管理这些服务的连接关系会很麻烦。这意味着,服务A需要了解服务B的网络层。为了解决这一挑战,服务网格技术应运而生。
服务网格是用于处理服务间通信的专用基础结构层。对于构成现代化的云原生应用程序的服务而言,服务网格负责可靠地交付这些拓扑结构复杂的服务请求。实际上,服务网格通常是通过一系列的轻量级网络代理来实现的,这些网络代理与应用程序代码一起部署,而无需再关注应用程序。