前言
早期的互联网产品用户量少、并发量低、数据量小,系统服务只需要部署单个服务器即可满足吞吐量需求。随着用户规模和业务量的不断上涨,单个应用服务器会到达性能瓶颈,分布式系统帮助企业用多台廉价机器完成了复杂计算或存储任务。
近年来,随着微服务技术、容器集群管理技术和工具的不断发展,各大互联网公司纷纷效仿“大中台战略”,建设适应自家组织架构的“云平台”,以应对市场变化,灵活、快速地做出策略调整。架构演进的主要推动因素就是互联网产品面临的庞大用户量问题。总体来说,云原生是分布式架构的扩展。
本书系统介绍云原生技术,从安装入门到应用部署,展示云原生应用全景,采用大量的源码及图表进行分析,让读者知其然并知其所以然,达到深度学习和理解技术组件的目标。本书“零基础”起步,深入浅出,抽丝剥茧,清晰透彻地阐述复杂的知识,帮助读者建立云原生技术知识体系。
本书的技术选型主要源自Apache软件基金会和云原生计算基金会(Cloud Native Computing Foundation,CNCF)的核心项目,这两个基金会主持的技术社区比较成熟,技术的更新频率高且应用广泛。
本书首先介绍分布式架构设计,阐述分布式中心化协同框架、微服务通信框架的原理与应用。然后在分布式架构的基础上,结合企业大中台战略,进一步分析云平台常用的核心技术模块,包括容器编排、运维监控告警、服务治理等,从而清晰、完整地展现云平台技术架构。
本书共分为3个部分,包含8章,下面详细介绍本书的组成结构。
第一部分(第1章)主要介绍计算机服务扩容的发展历程。早期的互联网信息系统通常为单节点架构,随着用户数量的增多,系统逐渐发展为分布式架构。
第二部分(第2章和第3章)主要介绍传统分布式架构的核心技术。在分布式领域,围绕中心化协同工作机制,产生了一批优秀的分布式开源框架,分布式中心化集群框架Apache ZooKeeper(简称ZooKeeper)是其中的典型代表。
第2章介绍ZooKeeper分布式协同技术的原理与应用。ZooKeeper实现了中心化的管理方式,提供了注册中心和配置中心,解决了分布式系统需要从一个中心地址获取配置的问题。当然仅有ZooKeeper是不够的,分布式架构还需要解决高并发通信问题。
第3章介绍Netty与Apache Dubbo(简称Dubbo)技术的原理与应用。Netty是一个基于Java NIO类库的异步通信框架,可以实现高并发通信,并维持大规模的TCP通信连接。它具有异步非阻塞、基于事件驱动、高性能、高可靠性和高可定制性等特点。Netty框架结合RPC框架Dubbo,可实现高可用的服务器调用、负载均衡和自定义路由策略功能。
第二部分介绍的分布式架构设计图如图1所示。
图1 分布式架构设计图
图1展示了分布式架构下服务消费者(简称消费者)调用服务提供者(简称提供者)的流程。
(1)提供者通过Dubbo发起服务注册请求。提供者业务线程在启动过程中通过通信框架Netty发起服务注册请求。
(2)消费者通过Dubbo获取提供者信息。Dubbo在启动时会从ZooKeeper拉取提供者信息并缓存在本地。这些提供者信息包括提供者实例IP地址、版本号、接口信息、序列化算法、参数校验规则、返回值类型等。
(3)消费者业务线程发起请求。消费者通过业务线程向Dubbo发起请求。这个请求可以是同步的,也可以是异步的。如果该请求是同步的,那么业务线程将会被阻塞挂起,由Dubbo统一管理请求。Dubbo遍历本地缓存的提供者列表,协调负载均衡策略和容错策略,筛选出符合条件的提供者实例,最终通过通信框架Netty发出该请求。
(4)Netty处理通信请求。通信框架Netty负责发送和接收实际请求,消费者和提供者是直接建立连接的,整个请求报文不会再通过注册中心代理发送。
(5)Dubbo调用提供者方法。Dubbo在接收到Netty的请求报文时,先序列化和组装参数,然后调用提供者业务线程的具体方法。之后Dubbo拿到提供者方法的调用结果时,会再次序列化返回值,最后传递给通信框架Netty,由Netty负责回传给消费者。
第三部分(第4章至第8章)的重点是构建PaaS层。这一部分首先会分析平台底座,主要阐述如何将IaaS层提供的相对分散的虚拟机组成一个集群环境,涉及的主要技术包括Docker容器和Kubernetes编排引擎。
第4章介绍Docker容器技术的原理与应用。Docker是目前最流行的Linux容器解决方案之一,它是基于Go语言开发的开源应用容器技术,集成了开发、打包、发布应用等功能,是PaaS中台的基石。
第5章介绍Kubernetes编排引擎的原理与应用。Kubernetes是开源的容器编排(orchestration)系统,简称K8s,是用于自动部署、扩展和管理容器化应用程序的开源系统。它将应用程序的容器组合成逻辑单元,以便于管理和服务发现。
大中台战略背景下涌现了很多优秀的PaaS中台架构设计,本书给出的是一种通用的PaaS中台架构设计,它融合了运维层的集群日志管理和指标监控告警功能,被统称为云平台架构设计。云平台架构设计图如图2所示。
图2 云平台架构设计图
在图2中,云平台架构设计围绕着PaaS层展开,PaaS层需要依赖IaaS层提供的各种支持,包括云主机、云存储、云网络、云安全。IaaS层最终把不同规格的硬件组装或拆分,提供统一规格的虚拟机给PaaS层使用。PaaS层为SaaS层提供服务。
PaaS层、SaaS层和IaaS层都会用到运维层,运维层提供日志管理、指标监控与告警等功能。这些功能也是PaaS层的基本能力。本书参考Kubernetes开源社区,挑选了两个经典的框架来阐述运维层的实现方式。
第6章介绍Prometheus框架指标监控与告警的原理与应用,该框架支持通过拉取被监控目标上的HTTP端点来收集指标,还支持自定义告警功能和可视化查询界面。
第7章介绍Kubernetes集群日志管理的功能,重点分析Elastic Stack框架,该框架依赖分布式搜索引擎,实现了日志采集和可视化查询界面。
如果说PaaS层的基本功能是为微服务提供运行环境,那么服务治理能力则是它的加分项。第8章对微服务治理框架Istio在云平台的应用场景进行展望。Istio是由谷歌、IBM与Lyft共同开发的开源项目。Istio是服务网格,能够为微服务提供流量管理机制,同时提供其他增值功能,包括安全性、监控、路由、连接管理与策略等。
读者可以依据本书介绍的技术,快速搭建分布式架构环境或云平台架构环境,为企业微服务的稳定运行保驾护航。
本书适合对Docker有一定了解并希望探索和深入研究云技术的工程师阅读。本书注重剖析技术原理,采用大量的源码及图表进行分析,让读者知其然并知其所以然,达到深度学习和理解技术组件的目标。
本书适合容器云初学者阅读。本书简明、清晰地讲解云平台核心组件技术的基本知识,同时在讲解过程中穿插实战演练,使读者对云平台技术有较为全面的理解,是一本快速入门容器云的图书。
本书也适合计算机等相关专业学生阅读,可帮助高校学生提升云原生技能。当前互联网企业大多处于应用服务规模化发展阶段,企业在招聘时普遍会考察应聘者开发分布式或云平台微服务的能力,因此应聘者需要对云平台有初步的认识和基本的实践能力。