传送门

  • 什么是云原生?
  • 云原生设计理念
  • .NET微服务

Containers

现在谈到云原生, 绕不开“容器”。

在《Cloud Native Patterns》一书中,作者Cornelia Davis指出:“容器是云原生应用的基石”;

云原生基金会将微服务容器化作为云原生旅行的第一步。

很容易就想到将微服务容器化, 过程也很简单。

将代码、依赖项和运行时打包到一个称为容器镜像的二进制文件中。镜像存储在镜像仓库,Docker官方维护了Docker Hub镜像仓库。

需要时,可以将镜像转换为可运行的容器实例,该实例可在装有容器运行时引擎的任何计算机上运行,你可以按需部署任意数量的容器实例。

下图显示了三个微服务在单主机以容器化运行。

每个容器维护自己的依赖关系和运行时,这可能会有所不同,上图我们看到在同一主机上运行的Product微服务的不同版本。每个容器共享基础主机操作系统,内存和处理器的一部分,但彼此隔离。

容器模型遵守“十二要素应用”的Dependencies原则。

要素2指定“每个微服务隔离并打包其自己的依赖项、更改项(不影响整个系统)”

容器同时支持Linux和Windows工作负载。

虽然存在多个容器供应商,但Docker占据了最大的市场份额,该公司一直在推动软件容器的发展,它已经成为打包、部署和运行云原生应用程序的事实上的标准。

Why containers

  • 容器提供了移植性,并保证在跨环境时,能输出一致。通过将所有内容封装进单个程序包,可以将微服务+依赖项与基础设施隔离。

  • 你可以在安装Docker运行时引擎的 任何环境部署同一容器,容器化消除了预先配置环境的时间开销 (for框架、程序库文件、和运行时)。

  • 通过共享底层操作系统和主机资源,容器的占用空间比完整的虚拟机小很多,小体积,高密度,在一台主机上可以运行多个微服务。

容器编排

Docker Api/工具创建镜像和容器,你还需要工具管理容器。

管理容器的软件称为"容器编排器",大规模使用容器时,容器编排器至关重要。

容器编排器做了什么 ?

任务 描述
Scheduling 自动配置、调度容器实例
Affinity/anti-affinity 在附近或相距较远的位置调配容器,以提高可用性和性能
Health monitoring 自动探测并修复故障
Failover 自动将失败的实例转移到状况良好的机器
Scaling 自动增减容器 去匹配预期状态
Networking 给容器提供覆盖网络
Service Discovery 容器之间互相发现
Rolling Upgrades 零停机增量升级,零停机自动回滚

容器编排器遵循“十二要素应用程序”中的disposabilityconcurrency原则。

要素9: 强调“服务实例应该是一次性的,这样有利于快速启动(提供可伸缩能力),优雅关闭让系统保持正确状态”

要素8: 强调“服务在大量小的相同进程(副本)上扩展,而不是在可用的功能最强大的计算机上扩展单个大型实例”。

目前市面上存在多个容器编排器,但Kubernetes已成为云原生世界的事实标准。这是一个可移植、可扩展的开源的、管理容器的平台。

你可以自建k8s集群,自行调配和管理k8s资源,这可能很复杂。

Azure云将K8s作为托管服务(AKS),你只需要利用K8s功能,而不需要维护K8s集群。

Azure Kubernets Services在第2章“Scaling Cloud-Native Applications”中详细介绍。

最新文章

  1. 烂泥:数据库管理之phpmyadmin免密码配置
  2. 封装的ajax
  3. 你真的了解UIViewController生命周期吗?
  4. mvc、mvp、mvvm使用关系总结
  5. Redis 集合操作
  6. hdu 4421 Bit Magic
  7. Android下使用InputStream读取文件
  8. 【转】Android学习基础自定义Checkbox组件
  9. MFC多线程编的可能
  10. Openjudge-计算概论(A)-完美立方
  11. jenkins外网slave配置
  12. Java相关面试题总结
  13. Python神器 Jupyter Notebook
  14. 搭建opencv javaweb项目
  15. spring注解注入:<context:component-scan>详解
  16. printf 字符串格式化
  17. java多线程框架
  18. 忘记MySQL root密码重置MySQL root密码
  19. oracle非空不做更新
  20. windows上配置连接git

热门文章

  1. PHP MySQLi extension is not loaded
  2. 两万字长文总结,梳理 Java 入门进阶那些事
  3. 【MySQL】1托2 ab复制 一个主机两个slave操作手册
  4. 【EXPDP】导出全部表的时候,选择不导出某个表
  5. 攻防世界 - Web(三)
  6. python—base64
  7. Java自学笔记1206
  8. MYSQL基础知识的复习3
  9. timeout of 20000ms exceeded
  10. Fixing SQL Injection: ORM is not enough