1. 云计算的发展

虚拟化技术是云计算的基础,它在硬件级别分离应用程序。随着虚拟化技术的发展,出现了容器,它在操作系统级别分离硬件程序。也就是说,虚拟化为每个应用提供自己的操作系统,而容器共享服务器的操作系统。容器化的优点是消除了虚拟机低效利用资源的问题,降低了存储成本,提高了可扩展性和可移植性;缺点是安全性不够高,因为应用程序在服务器内没有被物理隔离。随着容器技术的发展,云计算进入Kubernetes时代,主流路线演变成Kubernetes+Docker。

云计算模式演化:

  • 传统IT
  • IaaS(Infrastructure-as-a-Service),基础设施即服务
  • PaaS(Platform-as-a-Service),平台即服务
  • SaaS(Software-as-a-Service),软件即服务
    在这里插入图片描述

2. 云原生要点

2.1 云原生的背景

随着移动互联网时代业务高速的发展,巨大用户基数下快速变更和不断创新的需求推动了传统的软件开发方式。面对业务的快速迭代和团队规模的不断扩大,降低沟通协作成本和加快产品的交付速度,为用户呈现更好的体验成为了各互联网公司努力的方向。

这样的背景下,微服务和云原生开始流行。康威定律是微服务架构的理论基础,通过服务的拆分,每个小团队服务一个服务,增加了内聚性,减少了频繁开会,提高了沟通效率。快速交付意味着更新的频次提高,更新容易造成服务的故障问题,更新与高可用性之间需要权衡。云原生是一种理念,也是一种基础设施,通过工具和方法减少更新导致的故障问题,保证服务的高可用性。

2.2 云原生要点

云原生应用架构的主要特征

  • 符合12因素应用
  • 面向微服务架构
  • 敏捷架构
  • 基于 API 协作
  • 抗脆弱性

12因素是关于如何编码、部署和运维的原则

  • 代码库
    每个可部署app在版本控制系统中都有一个独立的代码库,可以在不同的环境中部署多个实例。
  • 依赖
    App应该使用适当的工具(如Maven、Bundler、NPM)来对依赖进行显式的声明,而不该在部署环境中隐式的实现依赖。
  • 配置
    配置或其他随发布环境(如部署、staging、生产)而变更的部分应当作为操作系统级的环境变量注入。
  • 后端服务
    后端服务,例如数据库、消息代理应视为附加资源,并在所有环境中同等看待。
  • 编译、发布、运行
    构建一个可部署的app组件并将它与配置绑定,根据这个组件/配置的组合来启动一个或者多个进程,这两个阶段是严格分离的。
  • 进程
    该app执行一个或者多个无状态进程(例如master/work),它们之间不需要共享任何东西。任何需要的状态都置于后端服务(例如cache、对象存储等)。
  • 端口绑定
    该应用程序是独立的,并通过端口绑定(包括HTTP)导出任何/所有服务。
  • 并发
    并发通常通过水平扩展应用程序进程来实现(尽管如果需要的话进程也可以通过内部管理的线程多路复用来实现)。
  • 可任意处置性
    通过快速迅速启动和优雅的终止进程,可以最大程度上的实现鲁棒性。这些方面允许快速弹性缩放、部署更改和从崩溃中恢复。
  • 开发/生产平等
    通过保持开发、staging和生产环境尽可能的相同来实现持续交付和部署。
  • 日志
    不管理日志文件,将日志视为事件流,允许执行环境通过集中式服务收集、聚合、索引和分析事件。
  • 管理进程
    行政或管理类任务(如数据库迁移),应该在与app长期运行的相同的环境中一次性完成。

云原生的要点

  • DevOps
  • 持续集成
  • 微服务架构
  • 容器化

云原生的代表技术

  • 微服务
  • 容器
  • 服务网格
  • DevOps
  • 声名式 API

3. 云原生的基础架构

云原生是一系列云计算技术体系和企业管理方法的集合,既包含实现应用云原生化的方法论,也包含落地实践的关键技术。云原生应用利用微服务、服务网格、容器、DevOps和声名式 API 等代表技术,来构建容错性好,易于管理和便于观察的松耦合系统。

3.1 微服务

微服务是指将大型复杂软件应用拆分成多个简单应用,每个简单应用描述着一个小业务,系统中的各个简单应用可被独立部署。微服务具有降低系统复杂度、独立部署、独立扩展和跨语言编程等优点。但微服务架构的灵活、开发的快捷也带来了运维的挑战和分布式系统的复杂性。

常见的微服务组件及概念:

  • 服务注册:服务提供方将自己调用地址注册到服务注册中心,让服务调用方能够方便地找到自己。
  • 服务发现:服务调用方从服务注册中心找到自己需要调用的服务的地址。
  • 负载均衡:服务提供方一般以多实例的形式提供服务,负载均衡功能能够让服务调用方连接到合适的服务节点。并且,节点选择的工作对服务调用方来说是透明的。
  • 服务网关:服务网关是服务调用的唯一入口,可以在这个组件是实现用户鉴权、动态路由、灰度发布、A/B 测试、负载限流等功能。
  • 配置中心:将本地化的配置信息(properties, xml, yaml 等)注册到配置中心,实现程序包在开发、测试、生产环境的无差别性,方便程序包的迁移。
  • API 管理:以方便的形式编写及更新 API 文档,并以方便的形式供调用者查看和测试。
  • 集成框架:微服务组件都以职责单一的程序包对外提供服务,集成框架以配置的形式将所有微服务组件(特别是管理端组件)集成到统一的界面框架下,让用户能够在统一的界面中使用系统。
  • 分布式事务:对于重要的业务,需要通过分布式事务技术(TCC、高可用消息服务、最大努力通知)保证数据的一致性。
  • 调用链:记录完成一个业务逻辑时调用到的微服务,并将这种串行或并行的调用关系展示出来。在系统出错时,可以方便地找到出错点。
  • 支撑平台:系统微服务化后,系统变得更加碎片化,系统的部署、运维、监控等都比单体架构更加复杂,那么,就需要将大部分的工作自动化。现在,可以通过 Docker 等工具来中和这些微服务架构带来的弊端。 例如持续集成、蓝绿发布、健康检查、性能健康等等。

在这里插入图片描述
优点

  • 易于开发和维护:一个微服务只会关注一个特定的业务功能,所以业务清晰、代码量较少。开发和维护单个微服务相对简单。
  • 单个微服务启动较快。
  • 局部修改容易部署:单体应用只要有修改,就得重新部署整个应用。微服务解决了这样的问题。一般来说,对某个微服务进行修改,只需要重新部署这个服务即可。
  • 技术栈不受限制:在微服务架构中,可以结合项目业务及团队的特点,合理的选择技术栈。
  • 按需伸缩:可根据需求,实现细粒度的扩展。

缺点

  • 运维要求高:更多的服务意味着要投入更多的运维。
  • 分布式固有的复杂性:使用微服务构建的是分布式系统。对于一个分布式系统,系统容错、网络延迟、分布式事务等都会带来巨大的问题。
  • 接口调整成本高:微服务之间通过接口进行通信。如果修改某一个微服务的API,可能所有用到这个接口的微- 服务都需要进行调整。

传统单体应用程序和微服务之间的架构差异如下图:
在这里插入图片描述

3.2 容器

为了解决微服务架构下大量应用部署的问题,引入容器。

容器是一种轻量级的虚拟化技术,能够在单一主机上提供多个隔离的操作系统环境,通过一系列的 namespace 进行进程隔离,每个容器都有唯一的可写文件系统和资源配额。

Docker 是一个开源的应用容器引擎,使用容器技术,用户可以将微服务及其所需的所有配置、依赖关系和环境变量打包成容器镜像,轻松移植到全新的服务器节点上,而无需重新配置环境,这使得容器成为部署单个微服务最理想的工具。

Kubernetes 是 Google 开源的容器集群管理系统,可以实现容器集群的自动化部署、自动扩缩容和维护等功能。

3.3 服务网格

微服务技术架构实践中主要有侵入式架构和非侵入时架构两种实现形式。侵入式架构是指服务框架嵌入程序代码,开发者组合各种组件,如 RPC、负载均衡、熔断等,实现微服务架构。非侵入式架构以代理的形式与应用程序部署在一起,接管应用程序的网络且对其透明,开发者只需要关注自身的业务即可。

为了解决微服务框架的侵入性问题,引入了 Service Mesh。Service Mesh 一般的字面解释是“服务网格”,作为时下最流行的分布式系统架构微服务的动态链接器,处于服务到服务的通信的专用基础设施层,该层独立于应用程序为服务之间的通信提供轻量级的可靠传递。如果简单的描述的话,可以将它比作是应用程序或者说微服务间的 TCP/IP,负责服务之间的网络调用、限流、熔断和监控,同样使用 ServiceMesh 也就无须关系服务之间的那些原来是通过应用程序或者其他框架实现的事情,比如 Spring Cloud架构,现在只要交给 Service Mesh 就可以了。
在这里插入图片描述

3.4 DevOps

DevOps 是一组过程、方法与系统的统称,用于促进开发、技术运营和质量保证(QA)部门之间的沟通、协作与整合。DevOps 增强开发者和运维者之间的沟通与交流,目标是缩短开发周期,增加部署频率,更可靠的发布。DevOps包含三个部分:开发、测试和运维。
在这里插入图片描述
参考资料:
https://www.cnblogs.com/ITBlock/p/10056297.html
https://www.rainbond.com/docs/advanced-scenarios/micro/service_mesh/service-mesh/
https://blog.csdn.net/tsoTeo/article/details/106249140
https://www.infoq.cn/article/gogxlb2exfkk9evbzwbl
https://www.cnblogs.com/xishuai/p/microservices-and-service-mesh.html

更多推荐