前言
大型网站或者企业级应用往往要求高并发、高性能、高可用,而传统的集中式系统已无法满足需求,系统架构正向着分布式系统不断演进。同时,越来越多的企业选择通过云的方式发布和部署应用,这也大大促进了分布式系统的发展。未来将是分布式系统“爆发”的时代。
本文正是对分布式系统的原理做了全面的总结,同时辅以大量的实战案例,令读者可以轻松入门分布式系统。
目录
主要内容
本文从原理和实践角度全面介绍如何设计分布式系统。
内容包括节点、通信、并发与并行、面向对象的分布式架构、面向服务的分布式架构、面向消息的分布式架构、REST风格的架构、微服务架构、Serverless架构、Cloud Native架构、虚拟化与容器技术、分布式计算、分布式存储、分布式监控、分布式版本控制、数据一致性、分布式事务、安全性、可用性等。
全文内容丰富、案例新颖,相关理论与技术实践较为前瞻。
本文最后还提供了一个综合实战案例,手把手教读者基于Spring Cloud技术来实现微服务架构。
本文面向的读者主要是对分布式系统感兴趣的计算机专业学生、软件工程师、系统架构师等。
第1章 分布式系统概述,本章介绍分布式系统的基本概念、特征以及设计分布式系统所要面临的挑战。
第2章 节点,分布式系统中,程序往往会部署到不同的节点中。不同的节点之间需要通过网络来进行通信。每个节点的独立运算的结果最终汇集以支撑起分布式系统的庞大运算量。在实际的项目中,一个节点往往是一个操作系统上的进程。
本章介绍了节点上的进程、线程、纤程的概念及其之间的关系。同时也介绍了网络通信常见的异常场景。
第3章 通信,进程间的通信是一切分布式系统的核心。如果没有通信机制,分布式系统的各个子系统将是“一盘散沙”,毫无作用。
本章将介绍网络通信的基础知识,以及常用的通信方式。
第4章 并发与并行,分布式系统的一个重要特征就是计算能力是可以并发或者并行的。在分布式系统中,往往会将一个大任务进行分解,而后下发给不同的节点去计算,从而节省整个任务的计算时间。
第5章 面向对象的分布式架构,面向对象编程是非常流行的编程模式,因此,在分布式系统中,基于对象来设计分布式架构是自然而然的。
本章介绍面向对象的分布式架构。
第6章 面向服务的分布式架构,面向对象的分布式架构有其限制,比如与平台强关联、实现复杂等。因此,近些年来,面向服务的分布式架构逐渐兴起。本章介绍面向服务的分布式架构。
第7章 面向消息的分布式架构,面向服务的分布式架构普遍会采用HTTP作为通信协议。而HTTP都是遵循“请求-响应”模式,在服务器未返回结果之前,客户端会一致等待,直到获取到结果或者是超时未知,这在一定程度上限制了程序的处理能力,毕竟等待就是浪费。同时,HTTP也不一定完全可靠。
因此,对于实时、高并发、高可用这类接口而言,采用消息通信的方式更为合适。本章介绍面向消息的分布式架构。
第8章 REST风格的架构,在第6章中,我们介绍了Web服务。其中Web服务又可以分为“大”Web服务及RESTful Web服务。本章将深入讨论RESTful Web服务及其架构风格。
第9章 微服务架构,自2014年业界提出“微服务(Microservices)”的概念以来,微服务架构就不断演进,并且日趋火爆。越来越多的企业拥抱微服务,期望通过微服务的架构来解决大型项目的管理与运维。
那么什么是微服务?微服务架构与传统的SOA架构有什么区别?何时应该采用微服务架构?如何构建微服务?本章就针对上述提到的问题,来简单介绍下微服务架构。
第10章 Serverless架构,在目前主流云计算基础设施即服务(
Infrastructure-as-a-Service,IaaS)和平台即服务(Platform-as a-Service,PaaS)中,开发者进行业务开发时,仍然需要关心很多和服务器相关的服务器开发工作,比如缓存、消息服务、Web应用服务器、数据库,以及对服务器进行性能优化,考虑存储和计算资源,考虑负载和扩展,考虑服务器容灾稳定性等非业务逻辑的开发。对于这些服务器的运维和开发,知识和经验极大地限制了开发者进行业务开发的效率。设想一下,如果开发者直接租用服务或者开发服务而无须关注如何在服务器中运行部署服务,是否可以极大地提升开发效率和产品质量?这种去服务器而直接使用服务的架构,我们称之为无服务器架构(Serverless架构)。
本章详细介绍Serverless架构。
第11章 Cloud Native架构,未来越来越多的企业将会“拥抱云”。特别是对于中小企业及个人开发者而言,以云架构为优先的Cloud Native应用开发模式将会深入人心。Cloud Native能帮助企业快速推出产品,同时节省成本。
本章详细介绍Cloud Native架构。
第12章 虚拟化与容器技术,虚拟化技术已经改变了现代计算方式,它能够提升系统资源的使用效率,消除应用程序和底层硬件之间的依赖关系,同时加强负载的可移植性和安全性,但是Hypervisor和虚拟机只是部署虚拟负载的方式之一。作为一种能够替代传统虚拟化技术的解决方案,容器虚拟化技术凭借其高效性和可靠性得到了快速发展,它能够提供新的特性,以帮助数据中心专家解决新的顾虑。
本章介绍虚拟化技术与容器技术。
第13章 分布式计算,分布式计算就是将一个大的计算任务分解成多个小任务,然后分配给多台计算机分别计算,再上传运算结果后统一合并得出数据结论。
本章详细介绍分布式计算。
第14章 分布式存储,互联网每天产生数以亿计的数据,这些数据如何能够被正确地存储、解析、利用,是摆在每个数据公司面前的挑战。传统的关系型数据库,对于处理大规模的数据显得力不从心,由此以NoSQL为代表的分布式存储应运而生。
NoSQL,泛指非关系型的数据库。NoSQL数据库的产生旨在解决大规模数据集合多重数据种类带来的挑战,尤其是大数据应用的难题。
本章介绍分布式存储。
第15章 分布式监控,相比于单机的部署模式,应用在分布式部署下带来了新的挑战。一方面,应用往往有多个实例,这些实例需要在分布式多个节点上进行部署;另一方面,通过人工手动操作命令来监控这些应用,已经变得越来越困难。特别是在微服务架构下,每个微服务往往需要设置单独的监控,这意味着服务越多监控越多。而且每个微服务可能使用不同的技术或语言,依靠不同的机器或容器,使用其特有的版本控制,这也大大增大了监控的复杂性。
本章将介绍分布式下常用的监控技术,这些技术都能够解决上面所提到的问题。
第16章 分布式版本控制,在企业中,项目源代码或者文档往往需要进行版本的管理。即便是个人的工作,采用版本管理工具进行管理,对于方便查找特定版本的内容,或者是回溯历史的修改内容都是极其必要。版本控制系统是帮助人们协调工作的工具,它能够帮助我们和其他小组成员监测同一组文件,比如说软件源代码,升级过程中所做的变更,也就是说,它可以帮助我们轻松地将工作进行融合。
本章介绍分布式版本控制。
第17章 数据一致性,对于数据库而言,事务的ACID这4个特性保证了一个事务的正确性。其中,一致性特征是指在事务开始之前和结束之后数据完整性不被破坏。对于集中式系统而言,实现数据的一致性是容易的,毕竟依赖于数据库自然就实现了ACID特征。然而,在分布式系统中,要想保证数据的一致性就没有那么简单了。
本章介绍分布式系统下的数据一致性概念及解决方案。
第18章 分布式事务,正如第17章所述,在分布式系统中,为了保证数据的高可用,通常会将数据保存多个副本,这些副本会放置在不同的节点上。这些数据节点可能是物理机器,也可能是虚拟机。为了对用户提供正确的CURD等语意,我们需要保证这些放置在不同节点上的副本是一致的,这就涉及分布式事务的问题。
本章详细讲解分布式事务。
第19章 安全性,计算机的安全性通常包括两个部分:认证和访问控制。认证包括对有效用户身份的确认和识别。而访问控制则致力于避免对数据文件和系统资源的有害篡改。举例来说,在一个孤立、集中、单用户系统中(例如一台计算机),通过上锁存放该计算机的房间和磁盘就能够实现其安全性。只有拥有房间和磁盘钥匙的用户才能访问系统资源和文件。这就同时实现了认证和访问控制。因此,安全性实际上就相当于锁住计算机和房间的钥匙。
与集中式的系统相比分布式系统的安全将会复杂得多,因为安全涉及整个系统,所以有关安全的任何一个单纯的设计缺陷都可能导致所有的安全措施无效。分布式系统是由各个子系统组成的,子系统之间也需要做身份识别;各子系统都是通过网络进行连接的,那么它们之间的安全通信也是需要保障的。
第20章 可用性,系统的可用性(Availability)指系统在面对各种异常时可以正确提供服务的能力。系统的可用性可以用系统停服务的时间与正常服务的时间的比例来衡量,也可以用某功能的失败次数与成功次数的比例来衡量。可用性是分布式的重要指标,衡量了系统的鲁棒性,是系统容错能力的体现。
本章介绍分布式系统的可用性。
第21章 综合实战:基于Spring Cloud的微服务架构设计与实现,本章是进入综合实战环节,将演示基于Spring Cloud框架来设计和实现一个微服务架构应用。