架构设计:服务自动化部署和管理流程

本文源码:GitHub·点这里 || GitEE·点这里

一、分布式服务

从常规分布式架构系统来说,划分出十来个独立的微服务模块是很常见的,然后不同的开发人员分工几个服务块,负责日常开发和维护,微服务之间会出现版本差异也是自然的。例如用户服务需要开发版本为7.0,其他服务可能高于这个版本或者低于这个版本,所以对服务发布这块做持续集成就很有必要。

现在比较通用的服务自动发布和管理的技术栈:Jenkins持续集成工具、Docker容器、K8S容器管理。

二、Jenkins集成

Jenkins可以很方便的整合常用的代码仓库,例如:GitHub、SVN等,提供持续集成能力,可以把整个代码构建打包,部署做成自动管理流程,代码一经提交就会自动发布到指定环境下,极大减少非必要的工作量。

  • 开发人员提交本地代码;
  • 代码仓库通过Hook机制通知Jenkins;
  • Jenkins获取最新代码编译打包;
  • 生成Docker镜像文件上传到中心仓库;
  • 最终触发滚动或者灰度等发布机制;

在整个代码发布过程如果出现问题,可以快速的回滚到上个版本,需要手动处理的流程极少,作为程序员这个职业,越是工作时间长,越要善用自动化的流程。系统架构越复杂,则服务部署、数据和环境隔离、容灾、灰度、动态扩容就更是需要自动管理,上述技术体系可以很轻松的解决这些问题。

三、Docker容器

Docker是作为开源的应用容器引擎,有三个核心概念,Image-镜像,Container-容器、Repository-仓库;开发人员可以通过打包应用和依赖包到一个可移植的容器中,容器是完全使用沙箱机制,相互之间不会有任何接口,然后发布到任何流行的服务器上,也可以实现虚拟化。

上述微服务模块变多,需要持续集成工具管理;同理当Docker容器变多和复杂,管理和调度也是一个问题。

四、K8S容器管理

Kubernetes简称K8S,用做灵活和便捷管理和调度Docker容器,提供应用部署、规划、更新、维护的一种机制,让部署容器化的应用简单并且高效,支持自动化部署、大规模可伸缩、应用容器化管理。

在上面的部署环境架构下,Docker可以理解为Kubernetes上的一个组件,通过K8S去统一管理。

这样一套服务发布和环境管理的技术体系现在非常常用,从开发的角度看,熟悉基本使用流程最好,原理逻辑不负责,但是实际操作复杂,通常由专业的运维管理,能说清楚环境的搭建思路也是面试中常见的问题。

五、源代码地址

GitHub地址:知了一笑
//github.com/cicadasmile/spring-cloud-base
GitEE地址:知了一笑
//gitee.com/cicadasmile/spring-cloud-base

推荐阅读:编程体系整理

序号 项目名称 GitHub地址 GitEE地址 推荐指数
01 Java描述设计模式,算法,数据结构 GitHub·点这里 GitEE·点这里 ☆☆☆☆☆
02 Java基础、并发、面向对象、Web开发 GitHub·点这里 GitEE·点这里 ☆☆☆☆
03 SpringCloud微服务基础组件案例详解 GitHub·点这里 GitEE·点这里 ☆☆☆
04 SpringCloud微服务架构实战综合案例 GitHub·点这里 GitEE·点这里 ☆☆☆☆☆
05 SpringBoot框架基础应用入门到进阶 GitHub·点这里 GitEE·点这里 ☆☆☆☆
06 SpringBoot框架整合开发常用中间件 GitHub·点这里 GitEE·点这里 ☆☆☆☆☆
07 数据管理、分布式、架构设计基础案例 GitHub·点这里 GitEE·点这里 ☆☆☆☆☆
08 大数据系列、存储、组件、计算等框架 GitHub·点这里 GitEE·点这里 ☆☆☆☆☆