写点什么

架构设计篇之微服务实战笔记(七)

发布于: 2021 年 02 月 26 日
架构设计篇之微服务实战笔记(七)

第三部分、部署


微服务应用中,恰当的部署方案至关重要

微服务生产环境的基本组成部分

部署服务至公有云平台

服务打包为不可变工件


8.1、部署的重要性


  • 稳定性和可用性

  • 手工变更的管理代价昂贵


8.2、微服务生产环境


8.2.1、微服务生产环境的特点


  • 部署目标或者运行平台(API 配置来部署和更新服务配置)

  • 运行是管理(自动愈合和自动扩容)

  • 日志和监控

  • 安全运维(网络控制和密码凭据)

  • 负载均衡、DNS 以及其他路由组件

  • 部署流水线(代码交付到生产环境)


8.2.2、自动化和速度


  • 自动化(大量的基础设施管理和配置)

  • 速度(部署效率的提高)


8.3、部署服务的快捷方式


举例子可以使用 Google 计算引擎 GCE 作为生产环境(Google Compute Engine),故障分区和自愈是需要关注的点,其他示例可以忽略。用腾讯云或者阿里云也可以实现。


8.4、构建服务工件


服务工件是服务中的一个不确定的,不可修改的软件包。比如 Java 的 Jar 文件。


8.4.1、工件的组成


  • 编译后的或者未编译的应用代码

  • 应用类库

  • 安装到操作系统的二进制依赖项

  • 辅助进程(logging 或者 cron)

  • 外部依赖,如数据存储、负载均衡器或者其他服务


8.4.2、不可变性


工件处理完毕以后就不可以随意更改,为了保证服务的稳定可靠性


8.4.3、服务工件的类型


  • 操作系统软件包

  • 服务器镜像

  • 容器


8.4.4、配置


搭建一个部署配置信息严格从代码解耦的配置平台


8.5、服务与主机关系模型


8.5.1、单服务主机


服务和底层主机一对一部署的方式,方便通过命令进行管控


8.5.2、单主机多静态服务


这种方式需要将配置信息进行管理好,防止之后无人管理


8.5.3、单主机多调度化服务


Pass 平台的承诺,容器调度器负责在这些服务器集群上运行容器并平衡服务器的资源需求。


  • 调度模型的优点(避免静态化模型的不足,因为调度器的目标就是持续优化集群内服务的资源使用率)

  • 复杂的容器调度器比如 K8s


8.6、不停机部署服务


  • 滚动部署(启动新实例的时候,逐步将旧实例从服务中剔除掉)

  • 金丝雀部署(在较大规模的服务组比如实例数大于 50 中,开发者可能需要更多的金丝雀实例来获取有代表性的反馈)

  • 蓝绿部署(创建一个运行新版本代码的并行服务组绿色集合,开发者逐步从蓝色集合老版本代码迁移过去,平滑迁移)


第九章、基于容器和调度器的部署(只描述流程,其余更建议直接看容器的书)


使用容器将微服务打包为可部署工件

如何在容器调度器 K8s 中运行微服务

K8s 的核心概念:pod、服务和复制集

在 K8s 上执行金丝雀部署和回滚


9.1、服务容器化


研发-编写服务代码-打包到容器镜像-推送到容器注册中心


研发-编写部署指令-指示调度器-部署集群(从容器注册中心拉取代码)


9.1.1、镜像使用


  • 安装和配置 Python 以及 pip

  • 安装常见的二进制类库如 make、libmagic\libc\libpq\gcc\libxml2

  • 安装常见的 SCM 包如 Git、Mercurial

  • 安装基本的 HTTP 工具如 Curl、wget

  • 安装基础操作系统


9.1.2、构建镜像

9.1.3、运行容器

9.1.4、镜像存储

9.2、集群部署

9.2.1、pod 的设计与运行

9.2.2、负载均衡

9.2.3、快速揭秘

9.2.4、健康检查

  • 存活性

  • 就绪性

9.2.5、部署新版本服务

  • 部署

  • 金丝雀部署

9.2.6、回滚

9.2.7、连接多个服务

第十章、构建微服务交付流水线(只描述了流程,具体可以看具体的书)


为微服务设计一套持续交付流水线

使用 Jenkins 和 Kubernetes 实现部署任务自动化

管理预发布环境和生产环境

使用功能标记和暗发布来区分部署和发布


10.1、让部署变得平淡

10.2、使用 Jenkins 构建流水线

10.2.1、构建流水线配置

10.2.2、构建镜像

10.2.3、运行测试

10.2.4、发布工件

10.2.5、部署至预发布环境

10.2.6、预发布环境

10.2.7、部署生产环境

10.3、构建可复用的流水线步骤

过程式构建流水线和声明式构建流水线

10.4、降低部署影响以及实现功能发布的技术


  • 暗发布

  • 功能标记

10.5、小结


  • 微服务部署应该满足两大目标:节奏安全和一致性

  • 部署新服务所花费的时间通常是微服务应用的一大阻碍

  • 对微服务而言,持续交付是理想的部署实践方式,通过快速交付小版本的经过验证的变更集来降低风险

  • 良好的持续交付流水线能确保部署过程的可见性,部署结果的正确性

  • Jenkins 是流行的自动化构建工具

  • 发布和回滚应该分开管理。


发布于: 2021 年 02 月 26 日阅读数: 53
用户头像

小胜靠智,大胜靠德 2019.06.27 加入

历经创业、京东、腾讯、滴滴公司,希望能够有些东西一起分享。公众号:小诚信驿站,微信/CSDN搜索:wolf_love666

评论

发布
暂无评论
架构设计篇之微服务实战笔记(七)