认识云原生——云原生测试实战(1)

发表于:2024-2-06 09:43

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:孙高飞    来源:51Testing软件测试网原创

  第1章 认识云原生
  近几年,云原生(cloudnative)成为一个非常热门的话题,在如今的软件行业,如果技术团队还没有投入云原生的“怀抱”,就会被贴上过时的标签。但云原生到底是什么?在已经使用云计算的情况下,云原生为我们带来了什么新的东西?把应用部署在云上就是云原生了吗?相信这些是每个初入云原生领域的人都会感到困惑的问题。在现有资料中,大多数针对云原生的介绍都让人云里雾里,或者不同的资料之间有较大的区别。这是因为云原生并没有确定的实现方式,每个人和组织对于云原生的定义也是不一样的,即使是相同的人随着时间的推移对于云原生也会有新的理解。在这里建议大家不要纠结云原生具体的实现方式,而要搞清楚使用云原生的目的是什么,清楚使用它的目的后,我们自然可以结合自身的工作环境来推导出云原生是什么了。
  1.1 什么是云原生
  “云原生”于2010年被提出,它表示一种架构,这种架构能让应用和中间件在云环境中保持良好的运行和迭代状态。在当时,提出云原生的概念以及云原生架构必须包含的属性,是为了能构建一种符合云计算特性的标准来指导云计算应用的编写,原文描述是:“I'vebeenthinkingalotaboutwhatitmeansforapplicationsandmiddlewaretoworkwellinacloudenvironment”(我一直在思考应用和中间件在云环境中良好工作意味着什么)。所以,云原生本质上是为了能让程序在云环境中运行和迭代得更好而产生的一种设计思想。理论上云原生没有固定的架构实现,因为云环境的设计是各不相同的,每种云环境都有适合它运行的设计思路。只不过在当今的软件行业,云领域应用最多的是容器技术,所以现在提到云原生往往都绕不开Docker、containerd、Kubernetes(简称K8s)等。本书也将聚焦容器领域,但这并不是说云原生只有容器这一条实现路径。比较正式的定义可以参考CNCF(cloudnativecomputingfoundation,云原生计算基金会)的说法:云原生技术有利于各组织在公有云、私有云和混合云等新型动态环境中,构建和运行可弹性扩展的应用。云原生的关键技术包括容器、服务网格(servicemesh)微服务、不可变基础设施和声明式API(applicationprograminterface,应用程序接口)。这些技术能够构建容错性好、易于管理和便于观察的松耦合系统。结合可靠的自动化手段,云原生技术使工程师能够轻松地对系统做出频繁的重大变更和做出可预测的重大变更。
  把程序部署在云中运行和让程序更好地在云中运行是两种完全不一样的设计,前者只需要把应用程序打包后放到云中运行即可,无法保证整个流程的高效和稳定,只是做到了软件的运行基于云,而不是云原生。实现云原生的关键不是在哪里运行应用,而是如何构建应用。这需要在设计之初就考虑到云的设计并最大程度地利用其特点完善整个系统。可以理解为,技术团队应把云环境当作应用的一部分,在最开始就思考如何对接云平台中的网络、存储、安全、通信、调度等特性,尽量利用云平台提供的特性来实现应用,并以此为背景总结出一套可以让产品高效迭代的流程和方法论。例如,在传统的设计中,应用是与服务器绑定的。即便设计了良好的高可用和负载均衡架构,也是把众多服务和数据分布在固定的几台服务器中,一旦服务器崩溃,其中的应用就会停止提供服务。而在云原生的思维方式里,应用是不依赖某个具体的服务器的,应用在部署时声明它需要的资源(内存、CPU、GPU、存储等),云平台会自动把它调度到符合条件的服务器中。而如果该服务器崩溃,云平台也可以把该服务器上所有的应用调度到其他符合条件的服务器中运行。如果应用依赖存储设备,云平台也会提供相应的分布式存储来完成数据的迁移。所以,在CNCF的定义中,云原生的关键技术包括容器(利用容器技术把应用程序都制作成镜像,才可以随意地在任何服务器中部署与运行)、微服务和声明式API等。
  在云原生的演化路线中,技术栈中由云平台管理的部分越来越多,云平台接管了软件运行所需要的网络、存储、安全、通信、调度等设计,软件只需要按照规范进行对接就可以完成以前需要很高的成本才能完成的工作。随后,人们发现由开发人员管理的部分越来越少,开发人员只需要关心自己的业务实现,其他的部分都由云平台解决。这样是正确的,因为“云”这个概念被提出的目的就是减少开发团队的开发成本,把他们从复杂的基础设施中解放出来,这也是云原生的目的。
  虽然云原生在不同公司的实现方式可能是不一样的,但在业界也确实存在一些常用的实践方法,具体如下。
  · 容器化:容器是云原生非常关键的技术之一,通过把应用程序制作成镜像,使得应用与具体的服务器解耦。云平台可以自由地调度资源并充分利用容器的技术优势,如快速启动、更低的资源消耗、更灵活的超卖策略等。
  · 微服务化:这是指应用采用微服务架构进行开发,即把应用拆分成一个个独立的微服务,微服务之间采用定义好的API进行通信,每个微服务可以独立开发、升级、扩展与演进,每个微服务还可以采用不同的技术进行开发。微服务也是云原生非常关键的技术之一,把整个系统拆分成众多小而简单的服务,有助于云平台系统实施更加有效的调度策略。
  · 弹性能力:应用的性能可以根据实际的需要进行弹性伸缩,在系统负载较高时动态地进行扩容,在系统负载较低时通过缩容来回收资源。一般的云平台都会提供这样的弹性能力,这也得益于容器技术。例如,一个实现了负载均衡的服务拥有两个实例,这两个实例分布在不同的机器中,当业务高峰期来临时,系统发现这两个实例的负载较高后可以选择自动在另外的机器中创建一个新的实例,并把它加入负载均衡来共同承担压力,或者选择不添加新的实例,但动态地为原来的两个实例增加资源配额。
  · DevOps:可以说云原生进一步推动了DevOps的发展,尤其是在持续集成与发布领域,利用云原生非常容易实现开发与部署的一体化运作。
  云原生还有其他的关键技术,如服务网格、无服务器(serverless)等,只不过它们并不像上面的实践方法那样普及,所以这里就不详细介绍了。
查看《云原生测试实战》全部连载章节
版权声明:51Testing软件测试网获得作者授权连载本书部分章节。
任何个人或单位未获得明确的书面许可,不得对本文内容复制、转载或进行镜像,否则将追究法律责
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号