微服务与Docker 是近年来分布式大规模服务架构中两个主流的技术趋势,本书主要介绍中小型企业在架构落地过程中柔性地切入微服务和Docker 虚拟化的各种方法。
书中主要介绍了微服务架构的各种技术选型、微服务拆分的各项原则、传统应用向微服务架构过渡的方法论、Docker 技术原理、Docker 跨主机通信选型、Docker 与DevOps 的整合方法等要点,同时简单介绍了利用Rancher 搭建Docker 容器云平台的快速解决方案,非常适合云计算从业人员阅读、学习。
深入解析微服务、容器技术、Service Mesh原理,帮助读者快速建立微服务生态圈的全局知识体系。
蒋彪,高级架构师。2006年至今,历任程序员、技术经理、架构师、高级架构师等职,具有十余年研发及技术管理工作经验。早年在日本参与过みずほ银行(瑞穂实业银行)内部精算系统重构项目,以及东京证券交易所新一代交易系统研发项目,回国后主持过江苏三六五网、麦芽金服等公司的大型高并发互联网架构工作。主要技术领域是微服务设计、容器化部署、容器云计算、DevOps方法论、AIOps模型实战。
前言
Docker 与微服务是什么
到底什么是架构师?一名架构师的职责应该是什么?
很多年前,我作为一名架构初学者,便了解了架构师要做的事情。从方法论上来看,就是“识别利益相关者”“梳理各个层次的利益传递”和“根据利益线索设计有伸缩性的架构”。
同样,以架构师的视角来看,到底什么是微服务呢?作为架构师,我所看到的微服务,是在团队人数井喷,产品迭代周期太快,系统中的技术负债过剩导致不能将鸡蛋放到同一个摇摇欲坠的篮子,投资人对产品功能特性提出夸张、多变要求的大背景下,在投资人、经理层、研发人员、测试人员、运维人员等各个利益相关者的逼迫下,被迫地将系统从并发、扩展、易维护等维度进行的拆分。
按照微服务的思想将系统拆分之后,我们发现,拆分得越厉害,系统的信息熵就越大,因此有了系统的拆分,就要有拆分之后的治理。
比如,如何保证拆分之后应用的注册发现?如何保证拆分之后服务的熔断限流监控?如何保证服务之间底层通信的可靠性和序列化?
为此,各种各样的服务治理以及分布式服务协同框架便出现了。
那么是不是有了微服务的拆分再加上微服务的治理就足够了呢?对于开发人员而言也许足够了,但是对于运维人员而言,远远不够。拆分使得系统的健壮性大大提高,但是也使系统的发布和运维异常复杂。试想一下,如何在一个分布式的环境下令几万个微服务快速启停?如何实现几万个微服务的管理、编排与自动扩容?
为了解决这些问题,Docker 以及与Docker 关联的各种容器编排技术便出现了。
因此,如果我们站在终点回望起点,就会知道为什么会有微服务,又为什么会有Docker,乃至为什么会有今天的Service Mesh。我们可以说,这些技术的产生一脉相承,它们的根本目的都是解决系统复杂度井喷之后的系统架构问题;从学术上来说,这些技术都是在和复杂分布式架构中的信息熵进行对抗;从工程上来说,这些技术是当今时代背景催生出的必然产物。
为什么写此书
作为一名技术人员,比起知道技术的用法,更重要的是要知道如何使这项技术切合公司现有的技术栈、业务线,如何解决公司的痛点,如何在各个部门的协同下将技术实际落地。
一项技术再好,再优秀,在实际落地中也要“削足适履”,要根据公司的产品线走,跟着公司的技术现状确定如何应用。毕竟绝大多数公司的第一要务是生存与盈利,能够专职供养一支底层研究技术团队的公司少之又少,更何况是对Docker 这样的“底之又底”的技术栈。
对于一名架构师而言,当你决定引入Docker 的时候,你要知道,你在公司内引入的不是一个简单的技术框架、一个中间件、一个自动化工具,而是一种思想、一个云平台、一个新的开发习惯。
对于Docker 的引入,从入门到落地,需要架构师、运维工程师、网络工程师、研发人员、测试工程师,乃至公司高层的全面支持和协作。把Docker 用到极致,就是在建设自己的云平台和PaaS,对于这种体量的研究,若没有一个全面的规划和路线图是无法完成的。
同时,对于Docker 的引入者而言,需要学习包括Docker 底层的原理、Docker 的网络模型、Docker 的容器隔离、Docker 下的自动发布与自动运维,乃至常被很多人挂在嘴边的Docker 容器编排、Docker 与微服务、Docker 与DevOps 在内的方方面面的知识。
上述所有的知识,若能够集中在一个人身上,实在是难得。毕竟,在IT 行业,每个人都有自己的知识短板。
甚至我可以负责任地说,在很多公司中,若想找到一支能够搞定底层到上层方方面面建设的专业团队,都是很困难的。
举个例子,我见过很多Docker 实际应用的场景,在一些中型场景中,通常直接用bridge端口来转发通信,为什么会这样?因为很多公司虽然不缺少优秀的程序员,但是缺少网络方面的架构师,不懂也不敢尝试复杂的网络模式。再比如,我亲眼见到有的项目在落地的时候,采用Docker 挂载卷轴的方式发布代码,为什么?因为这些公司缺少专门的人来维护CI/CD 平台。
正是因为有这些困难,所以笔者将自己在中小型企业中推广微服务和Docker 的亲身经历和亲眼所见总结出来,从技术选型和架构切入的层面进行梳理,希望通过这本书将这些好的经验传递给需要的读者,帮助更多的人。
本书内容
本书共包括三个部分,共计13 章,每部分及每章的简要内容如下。
第一部分 Docker 与微服务基础
第1 章 微服务架构概述
本章介绍了微服务具体是什么,为什么要使用微服务,微服务的架构设计原则,以及从单体到微服务的演进过程。
第2 章 微服务中的技术选型
本章主要介绍了微服务架构中的各种技术选型,包括服务治理、服务网关、服务发现、请求链路追踪等。
第3 章 Service Mesh
本章主要介绍了目前非常前沿的一个微服务架构Service Mesh,讲述其定义、优势、发展历程以及未来可能的发展趋势。
第4 章 Docker 技术简介
本章主要介绍了Docker 技术是什么,Docker 与传统VM 的区别,Docker 的作用和优势,Docker 生态圈的现状与发展,以及微服务与Docker 的联系等。
第二部分 Docker 架构与生态
第5 章 Docker 技术架构
本章介绍了Docker 的进程模型,Docker 在宿主机上的进程特征,Docker 容器的底层实现机制,以及Docker 在运行时的技术模型。
第6 章 Docker 逻辑架构
本章介绍了Docker 中各个核心组件之间的逻辑架构关系,讲解了各个组件之间是如何进行耦合的,最后简单介绍了开源仓库Harbor 的原理和部署方式。
第7 章 Docker 网络架构
本章介绍了Docker 在单机环境下的网络通信模式,包括Bridge、Host、Container、None等,同时介绍了Docker 在跨主机集群环境下的常见网络通信模式,比如Flannel、L2-FLAT 等。
第8 章 Docker 安全架构
本章介绍了Docker 技术中常见的安全问题,比如Docker 自身隔离机制不足导致的安全缺陷、Docker 镜像被注入恶意代码导致的安全缺陷等,同时提出了一系列的Docker 安全检查基线,最后介绍了几种常见的Docker 安全工具。
第9 章 Docker 与DevOps
本章介绍了Docker 中的代码如何挂载,如何在Docker 容器中实现服务注册发现,同时介绍了Dockerfile 的写法和规范,以及如何在Docker 中收集日志、实施监控,如何与CI/CD 平台整合等。
第10 章 容器编排
本章介绍了容器编排技术的概念、用途和具体用法,列举了常见的几种容器编排技术,比如Swarm、Kubernetes 和Mesos 等,对它们进行了比较,简单介绍了它们的部署安装及使用方法。
第三部分 Docker 落地之路
第11 章 企业级Docker 容器云架构
本章介绍了在企业级环境下如何进行整体的Docker 架构设计,同时介绍了围绕着Docker建立企业级容器云平台架构的方法。
第12 章 基于Rancher 的容器云管理平台
本章介绍了基于开源PaaS 软件Rancher 建立企业级容器云平台的各类方案,以及其中各种技术难点的解决方法。
第13 章 微服务与Docker 化实战
本章介绍了如何在某条实际产品线的Docker 化落地过程中进行平滑切入,如何打通容器网络和物理网络,以及如何将产品线整合进Rancher 的容器云平台。
一千个读者里就有一千种Docker。