传送门
- 什么是云原生?
- 云原生设计理念
- .NET微服务
Containers
现在谈到云原生, 绕不开“容器”。
在《Cloud Native Patterns》一书中,作者Cornelia Davis指出:“容器是云原生应用的基石”;
云原生基金会将微服务容器化作为云原生旅行的第一步。
很容易就想到将微服务容器化, 过程也很简单。
将代码、依赖项和运行时打包到一个称为容器镜像的二进制文件中。镜像存储在镜像仓库,Docker官方维护了Docker Hub
镜像仓库。
需要时,可以将镜像转换为可运行的容器实例,该实例可在装有容器运行时引擎的任何计算机上运行,你可以按需部署任意数量的容器实例。
下图显示了三个微服务在单主机以容器化运行。
每个容器维护自己的依赖关系和运行时,这可能会有所不同,上图我们看到在同一主机上运行的Product
微服务的不同版本。每个容器共享基础主机操作系统,内存和处理器的一部分,但彼此隔离。
容器模型遵守“十二要素应用”的Dependencies
原则。
容器同时支持Linux和Windows工作负载。
虽然存在多个容器供应商,但Docker占据了最大的市场份额,该公司一直在推动软件容器的发展,它已经成为打包、部署和运行云原生应用程序的事实上的标准。
Why containers
容器提供了移植性,并保证在跨环境时,能输出一致。通过将所有内容封装进单个程序包,可以将微服务+依赖项与基础设施隔离。
你可以在安装Docker运行时引擎的 任何环境部署同一容器,容器化消除了预先配置环境的时间开销 (for框架、程序库文件、和运行时)。
通过共享底层操作系统和主机资源,容器的占用空间比完整的虚拟机小很多,小体积,高密度,在一台主机上可以运行多个微服务。
容器编排
Docker Api/工具创建镜像和容器,你还需要工具管理容器。
管理容器的软件称为"容器编排器",大规模使用容器时,容器编排器至关重要。
容器编排器做了什么 ?
容器编排器遵循“十二要素应用程序”中的disposability
和concurrency
原则。
目前市面上存在多个容器编排器,但Kubernetes已成为云原生世界的事实标准。这是一个可移植、可扩展的开源的、管理容器的平台。
Azure Kubernets Services在第2章“Scaling Cloud-Native Applications”中详细介绍。