谈到云原生, 绕不开"容器化"
本文转载自微信公众号「全栈码农画像」,作者小码甲 。转载本文请联系全栈码农画像公众号。
Containers
现在谈到云原生, 绕不开“容器”。
在《Cloud Native Patterns》一书中,作者Cornelia Davis指出:“容器是云原生应用的基石”;
云原生基金会将微服务容器化作为云原生旅行的第一步。
很容易就想到将微服务容器化, 过程也很简单。
将代码、依赖项和运行时打包到一个称为容器镜像的二进制文件中。镜像存储在镜像仓库,Docker官方维护了Docker Hub镜像仓库。
需要时,可以将镜像转换为可运行的容器实例,该实例可在装有容器运行时引擎的任何计算机上运行,你可以按需部署任意数量的容器实例。
下图显示了三个微服务在单主机以容器化运行。
每个容器维护自己的依赖关系和运行时,这可能会有所不同,上图我们看到在同一主机上运行的Product微服务的不同版本。每个容器共享基础主机操作系统,内存和处理器的一部分,但彼此隔离。
容器模型遵守“十二要素应用”的Dependencies原则。
要素2指定“每个微服务隔离并打包其自己的依赖项、更改项(不影响整个系统)”
容器同时支持Linux和Windows工作负载。
虽然存在多个容器供应商,但Docker已经成为打包、部署和运行云原生应用程序的事实标准,Docker占据了最大的市场份额,该公司一直在推动软件容器的发展。
Why containers
- 容器提供了移植性,并保证在跨环境时,能输出一致。通过将所有内容封装进单个程序包,可以将微服务+依赖项与基础设施隔离。
- 你可以在安装Docker运行时引擎的 任何环境部署同一容器,容器化消除了预先配置环境的时间开销 (for框架、程序库文件、和运行时)。
- 通过共享底层操作系统和主机资源,容器的占用空间比完整的虚拟机小很多,小体积,高密度,在一台主机上可以运行多个微服务。
容器编排
Docker Api/工具创建镜像和容器,你还需要工具管理容器。
管理容器的软件称为"容器编排器",大规模使用容器时,容器编排器至关重要。
容器编排器做了什么 ?
任务 | 描述 |
---|---|
Scheduling | 自动配置、调度容器实例 |
Affinity/anti-affinity | 在附近或相距较远的位置调配容器,以提高可用性和性能 |
Health monitoring | 自动探测并修复故障 |
Failover | 自动将失败的实例转移到状况良好的机器 |
Scaling | 自动增减容器 去匹配预期状态 |
Networking | 给容器提供覆盖网络 |
Service Discovery | 容器之间互相发现 |
Rolling Upgrades | 零停机增量升级,零停机自动回滚 |
容器编排器遵循“十二要素应用程序”中的disposability和concurrency原则。
要素9:强调“服务实例应该是一次性的,这样有利于快速启动(提供可伸缩能力),优雅关闭让系统保持正确状态”,
要素8:强调“服务在大量小的相同进程(副本)上扩展,而不是在可用的功能最强大的计算机上扩展单个大型实例”。
目前市面上存在多个容器编排器,但Kubernetes已成为云原生世界的事实标准,这是一个可移植、可扩展的、开源的、管理容器的平台。
你可以自建k8s集群,自行调配和管理k8s资源,这可能很复杂。
Azure云将K8s作为托管服务(AKS),你只需要利用K8s功能,而不需要维护K8s集群。
Azure Kubernets Services在第2章“Scaling Cloud-Native Applications”中详细介绍。
Ref
https://docs.microsoft.com/en-us/dotnet/architecture/cloud-native/definition
相关文章
- 忙中有失:开发人员慌乱中容易出现的3个疏忽
- 国庆长假前,IT人员需要做好这几件事
- 3款强大的开源密码管理器
- OS开发爱好者福利:树莓派上编译C语言,顺便掌握一波硬件知识
- GoUI:一个非常简单的 GUI 框架
- 虚拟机发展依然强劲,但会被容器取代吗?
- DevOps工程师的必备技能清单
- 对Kurbernetes中服务暴露方法的一些理解和说明
- 一个简单的跨域问题,一不小心就带来三个大大的 BUG
- 互联网分层架构,为啥要前后端分离?
- 竞赛比完代码模型怎么处理?Kaggle大神:别删,这都是宝藏
- 中芯国际全面回应“被美封杀”:未收到出口管制官方消息 只生产民用品
- 摊牌了!我要手写一个“Spring Boot”
- 超棒 Vue Github可视化分析系统GitDataV
- 使用Flutter完成10个商业项目后的经验教训
- 改了配置,却不想重启,怎么整?
- 从6行到92行:If-Else是贫瘠的多态性
- 程序员限定快乐:看看别人的代码快乐一下
- 提到算法就头大,12个算法设计项目给你练练脑
- 程序运行后性能总会下降?你应该先了解编程语言的内存布局与管理