云原生思想 — 云原生的微服务架构

225 阅读6分钟

目录

文章目录

容器之于微服务架构

不同微服务之间可能存在一些异构,为了让每一个团队在微服务体系下发挥最大效能,我们允许不同团队采用不同的编程语言,甚至不同的运行环境来去运行这些微服务。因此,我们在运维和管理微服务时,最初其实并没有一套统一的标准去处理的异构环境,这也是为什么后来容器技术变得流行起来,它的一个重要作用就是通过一层标准的封装以及标准的运行时,来标准化微服务部署。这样从生命周期管理的角度来看,每一个微服务之间的差异就会变少,共同点变多。

在这里插入图片描述

Kubernetes 之于微服务架构

Kubernetes 的作用是帮助把已经标准化的微服务最便捷地运行到底层资源上面。我们讲到的存储、计算、网络都通过 Kubernetes 这层进行了统一抽象和封装,让已经被容器统一的微服务能够直接运行到 Kubernetes 平台。因此,运维人员不用再苦恼如何去把某个微服务分配到具体的某一个资源或计算单元上去。通过容器和容器平台,大大简化了微服务本身的生命周期管理,简化了微服务自身的运维管理问题,也促进了微服务更多地被企业所采用。

在这里插入图片描述

此外,Kubernetes 具有一个 Pod 的概念。一个 Pod 实际上是一组容器的集合,在一个 Pod 中可以运行一个或多个容器。一般来讲,当我们采用微服务架构时,会把微服务的主体运行在主容器中,主容器的生命周期跟 Pod 自身的生命周期是一个耦合的状态。

除了主容器之外,在同一个 Pod 中还会运行一些边车容器(Sidecar 容器),为主容器提供一些辅助功能,比如:日志采集、网络代理、身份鉴权等,这样微服务除了自身提供的核心业务服务以外,通过 Kubernetes 我们还可以动态添加一些额外的辅助能力,让微服务管理变得更健壮。

另一方面,Pod 还提供了一些非常有用的功能:

  • 状态信息:Pod 会提供一个标准接口显示运行状态。例如,是否已经准备好接收流量,如果准备好接收流量,那么从 Ingress 流量就可以打到微服务上。如果运行状态不良,我们可以尝试对这个容器进行修理、重启或删除,甚至是换到另一个计算单元上去运行,为微服务整体的稳定性提供了保障。
  • 地址服务:每一个 Pod 都有一个标准化的 DNS 地址服务,可以被统一的寻址。这样对于需要统一暴露出来 API 的日志、监控、追踪能力都有着非常大的帮助,可以根据这个 DNS 的地址来访问 Pod 所暴露的可观测性信息,便捷及时的发现运行时问题。

所以我们可以看到容器平台及容器其实在微观上也帮助了微服务具有更多能力、具有更强的健壮性以及具有更好的可观测性。

在这里插入图片描述

DevOps 之于微服务架构

当我们将大型的单体应用拆解为多个微服务,也一定会增加 IT 系统研发协同、交付、运维的复杂性。云原生就在于帮助微服务解决生命周期管理以及运维管理难题。

因为微服务的数量非常多,部署、管理的工作量很大。

  • 开发方面:如何保证各个服务在持续开发的情况下仍然保持协同合作。
  • 测试方面:服务拆分后,几乎所有功能都会涉及多个服务。原本单个程序的测试变为服务间调用的测试。测试变得更加复杂。

而随着 CI/CD 概念推广以及容器技术普及,微服务将这两种理念和技术结合起来,形成新的:“微服务 + API + 平台” 的开发模式,提出了容器化微服务的持续交付概念。

传统单体架构 DevOps 开发方式,要求产品队伍横跨产品管理、开发、QA、DBA 以及系统运维管理。
在这里插入图片描述

微服务架构 DevOps 开发方式,将一个大臃肿的整体产品开发队伍切分为根据不同微服务的划分的产品队伍,以及一个大的整体的平台队伍负责运营管理,两者之间通过 API 交互,做到了松耦合隔绝。

在这里插入图片描述

在测试方面,微服务架构下的测试分为三个层次:

  1. 端到端(集成)测试:覆盖整个系统,一般在用户界面进行测试。由于端到端测试实施难度较大,一般只对核心功能做端到端测试。一旦端到端测试失败,则需要将其分解到单元测试,分析失败原因,然后编写单元测试来重现这个问题,这样未来我们便可以更快地捕获同样的错误。
  2. 服务(功能)测试:针对服务接口进行测试。服务测试的难度在于服务会经常依赖一些其他服务。这个问题可以通过 Mock Server 解决:
  3. 单元测试:针对代码单元进行测试。我们一般会编写大量的单元测试(包括回归测试)尽量覆盖所有代码。

三种测试从上到下实施的容易程度递增,但是测试效果递减。端到端测试最费时费力,但是通过测试后我们对系统最有信心。单元测试最容易实施,效率也最高,但是测试后不能保证整个系统没有问题。

在这里插入图片描述

云原生的微服务架构 — 云原生应用架构

综上,我们可以感受到微服务架构与容器、Kubernetes、DevOps 等云原生关键技术自然地走到了一起,构成了云原生应用架构的雏形。

在这里插入图片描述

云原生应用架构具有下述特点:

  • 平台化:利用云作为一个平台,为微服务架构进行更多的赋能。
  • 标准化:微服务本身的部署、运维,微服务之间与其它服务之间的通讯都能做到标准化,让服务与服务之间的互联互通变得更容易,服务能够跨到不同的平台上,做到一次编写、一次定义、多处运行。
  • 轻量化:让研发人员关心核心业务代码、业务逻辑的研发,而不是复杂的微服务治理相关的逻辑研发。
  • 产品化:希望能构建微服务相关的产品,以产品化的方式支持大家使用微服务架构,让它变得更好用、更易用。

在这里插入图片描述