容器之于微服务架构
不一样微服务之间可能存在一些异构,为了让每个团队在微服务体系下发挥最大效能,咱们容许不一样团队采用不一样的编程语言,甚至不一样的运行环境来去运行这些微服务。所以,咱们在运维和管理微服务时,最初其实并无一套统一的标准去处理的异构环境,这也是为何后来容器技术变得流行起来,它的一个重要做用就是经过一层标准的封装以及标准的运行时,来标准化微服务部署。这样从生命周期管理的角度来看,每个微服务之间的差别就会变少,共同点变多。编程
Kubernetes 的做用是帮助把已经标准化的微服务最便捷地运行到底层资源上面。咱们讲到的存储、计算、网络都经过 Kubernetes 这层进行了统一抽象和封装,让已经被容器统一的微服务可以直接运行到 Kubernetes 平台。所以,运维人员不用再苦恼如何去把某个微服务分配到具体的某一个资源或计算单元上去。经过容器和容器平台,大大简化了微服务自己的生命周期管理,简化了微服务自身的运维管理问题,也促进了微服务更多地被企业所采用。网络
此外,Kubernetes 具备一个 Pod 的概念。一个 Pod 其实是一组容器的集合,在一个 Pod 中能够运行一个或多个容器。通常来说,当咱们采用微服务架构时,会把微服务的主体运行在主容器中,主容器的生命周期跟 Pod 自身的生命周期是一个耦合的状态。架构
除了主容器以外,在同一个 Pod 中还会运行一些边车容器(Sidecar 容器),为主容器提供一些辅助功能,好比:日志采集、网络代理、身份鉴权等,这样微服务除了自身提供的核心业务服务之外,经过 Kubernetes 咱们还能够动态添加一些额外的辅助能力,让微服务管理变得更健壮。运维
另外一方面,Pod 还提供了一些很是有用的功能:编程语言
状态信息:Pod 会提供一个标准接口显示运行状态。例如,是否已经准备好接收流量,若是准备好接收流量,那么从 Ingress 流量就能够打到微服务上。若是运行状态不良,咱们能够尝试对这个容器进行修理、重启或删除,甚至是换到另外一个计算单元上去运行,为微服务总体的稳定性提供了保障。ide
地址服务:每个 Pod 都有一个标准化的 DNS 地址服务,能够被统一的寻址。这样对于须要统一暴露出来 API 的日志、监控、追踪能力都有着很是大的帮助,能够根据这个 DNS 的地址来访问 Pod 所暴露的可观测性信息,便捷及时的发现运行时问题。微服务
因此咱们能够看到容器平台及容器其实在微观上也帮助了微服务具备更多能力、具备更强的健壮性以及具备更好的可观测性。单元测试
当咱们将大型的单体应用拆解为多个微服务,也必定会增长 IT 系统研发协同、交付、运维的复杂性。云原生就在于帮助微服务解决生命周期管理以及运维管理难题。测试
由于微服务的数量很是多,部署、管理的工做量很大。代理
而随着 CI/CD 概念推广以及容器技术普及,微服务将这两种理念和技术结合起来,造成新的:“微服务 + API + 平台” 的开发模式,提出了容器化微服务的持续交付概念。
传统单体架构 DevOps 开发方式,要求产品队伍横跨产品管理、开发、QA、DBA 以及系统运维管理。
微服务架构 DevOps 开发方式,将一个大臃肿的总体产品开发队伍切分为根据不一样微服务的划分的产品队伍,以及一个大的总体的平台队伍负责运营管理,二者之间经过 API 交互,作到了松耦合隔绝。
在测试方面,微服务架构下的测试分为三个层次:
三种测试从上到下实施的容易程度递增,可是测试效果递减。端到端测试最费时费力,可是经过测试后咱们对系统最有信心。单元测试最容易实施,效率也最高,可是测试后不能保证整个系统没有问题。
综上,咱们能够感觉到微服务架构与容器、Kubernetes、DevOps 等云原生关键技术天然地走到了一块儿,构成了云原生应用架构的雏形。
云原生应用架构具备下述特色: