猜你喜欢
分布式系统应用设计

分布式系统应用设计

书籍作者:Brendan ISBN:9787519834852
书籍语言:简体中文 连载状态:全集
电子书格式:pdf,txt,epub,mobi,azw3 下载次数:5856
创建日期:2021-02-14 发布日期:2021-02-14
运行环境:PC/Windows/Linux/Mac/IOS/iPhone/iPad/Kindle/Android/安卓/平板
内容简介
容器及其编排系统的快速发展极大地改变了分布式系统的开发和部署方式,从此,我们有了全新的方式与接口来描述核心分布式系统的开发模式及可重用的容器化组件。作为一本指导性手册,《分布式系统应用设计》主要介绍了常见的可重用的设计模式,以帮助开发人员更高效地开发可靠的分布式系统。
  之前开发者经常不得不从头开发系统,导致每个系统架构看起来都各不相同。
  《分布式系统应用设计》作者展示了如何利用现有的、验证过的设计模式来构建可靠的分布式系统。对于系统工程师和应用开发者而言,可以从中学习如何借助设计模式强大的语言和框架表征优势来显著提高工程质量。
  深入理解设计模式和可重用组件如何帮助开发者开发可靠分布式系统。如何借助边车、适配鬻和大使模式在单机环境中将功能分解成为一组容器。
  掌握多节点常见的松耦合模式,以实现复制、扩展和组件之间的通信。
  学习大规模批处理设计模式,如工作队列、基于事件的处理和协调工作流程。
作者简介

Brendan Burns,微软Azure的杰出工程师,也是Kubernetes开源项目的共同创始人。在加入微软之前,他曾在谷歌云平台工作,帮助构建了Deployment Manager和Cloud DNS等API。


编辑推荐

容器及其编排系统的快速发展极大地改变了分布式系统的开发和部署方式,从此,我们有了全新的方式与接口来描述核心分布式系统的开发模式及可重用的容器化组件。作为一本指导性手册,本书主要介绍了常见的可重用的设计模式,以帮助开发人员更高效地开发可靠的分布式系统。

之前开发者经常不得不从头开发系统,导致每个系统架构看起来都各不相同。本书作者展示了如何利用现有的、验证过的设计模式来构建可靠的分布式系统。对于系统工程师和应用开发者而言,可以从中学习如何借助设计模式强大的语言和框架表征优势来显著提高工程质量。


前言

前言
谁适合读这本书
如今几乎每个开发人员都堪称为分布式系统的开发人员或使用者(甚至两者皆有)。即使相对简单的移动应用也已经支持了云API,因此数据可以来自客户手中的任何设备。无论你是开发分布式系统的新兵,还是经验丰富的老手,本书所描述的设计模式和组件都可以帮助你将分布式系统开发从艺术转变为科学。分布式系统的可重用组件和相关开发模式使得开发者可以更专注于应用的核心逻辑。本书的目标是帮助开发人员在构建分布式系统时可以做得更好、更快、更高效。
为何写这本书
从Web搜索到云,在我的软件系统开发经历中,曾经负责过许多可扩展、可靠的分布式系统。总的来说,这些系统几乎每一个都是从头开始构建的,而且其他很多分布式应用程序也是如此。虽然秉持着相同的设计理念,有时甚至是几乎相同的逻辑,但如何合理采用合适的设计模式或重用组件,依然是摆在开发者面前极具挑战性的任务。坦白讲,在重新系统实现上我浪费了太多的时间,而结果有时还不如原来那般精致。
最近兴起的容器和容器编排系统则从根本上改变了分布式系统开发的格局。突然间,我们有了一个更好的对象与接口,来表示核心分布式系统模式及构建可重用的容器化组件。我写这本书主要是为了汇集分布式系统从业者的经验,提供一个可共享的语言和通用标准库,以方便快捷地构建更好的系统。
今天的分布式系统世界
曾几何时,人们编写的程序主要在单机上运行和访问。世界变化如此之快,现在几乎每个大型应用程序都是运行在多台机器上的分布式系统,开放给世界各地的海量用户并发访问。然而设计和开发这些系统通常像个黑盒子,仅由少部分人所掌握。与所有技术类似,分布式系统也在不断地快速演进、规范化和抽象化。本书主要描述了一系列可重复的通用模式,这些模式可以使可靠的分布式系统的开发更加简单和高效。模式和可重用组件的采用使得开发人员无需再重复造轮子,节省的时间则可以专注于构建应用核心逻辑。
本书的主要内容
本书分为以下四部分:
第1章,概述
简单介绍分布式系统,并解释为什么模式和可重用组件可以在可靠的分布式系统的快速开发中发挥重要作用。
第Ⅰ部分,单节点模式
第2~4章主要讨论在单节点上的设计模式和可重用组件,包括边车、适配器和大使模式。
第Ⅱ部分, 服务模式
第8章和第9章主要针对长期运行的服务(如Web应用程序)介绍多节点分布式模式,包括复制、伸缩和主节点选举等。
第Ⅲ部分,批处理计算模式
第10~12章介绍用于大规模批处理数据处理的分布式系统模式,包括工作队列、基于事件的处理和协调的工作流程。
如果你是一位经验丰富的分布式系统工程师,可以跳过前面几章,这些章节主要是介绍本书的期望,如何应用这些模式,以及为什么分布式系统模式概念如此重要。
几乎每个人都能在单节点模式中找到一些很有帮助的实用工具,它们是本书最为通用和最可重用的模式。
根据你的学习目标和兴趣点,可以选择专注于大规模的大数据模式,或长期运行服务器模式(或两者兼有)。这两部分在很大程度上彼此独立,可以按任意顺序阅读。
如果你已经有了丰富的分布式系统经验,可能会发现前面某些章节(例如,第II部分中关于命名、发现和负载平衡部分)已经非常熟悉,可以选择性阅读,但推荐快速浏览下其中的图片或者框图。
排版约定
本书使用以下排版约定:
斜体(Italic)
表示一个新术语、URL、电子邮件、文件名或者文件扩展名。
等宽字体(Constant width)
表示程序列表及段落内部用于引用程序元素,如变量或函数名称、数据库、数据类型、环境变量、函数语句和关键字等。
加粗等宽字体(Constant width bold)
表示由用户所输入的命令或其他文本。
斜体等宽字体(Constant width italic)
表示应由用户所提供的实际值或根据上下文所确定的值来替换的文本。
在线资源
本书描述了一般适用的分布式系统模式,但希望读者熟悉容器和容器编排系统。如果你没有很多这方面的知识储备,建议使用以下资源快速学习:
? https://docker.io
? https://kubernetes.io
? https://dcos.io
使用代码示例
相关补充材料(包括代码示例,练习等)可以从https://github.com/brendandburns/designing-distributed-systems下载。
本书是为了帮助你完成你的工作。通常对于本书提供的示例代码,你可以在自己程序和文档中使用它。除非复制了大部分代码,否则无需与我们联系以获得许可。使用本书中几个代码块不需要许可,出售或分发O'Reilly书籍中的示例光盘则需要获得许可,通过引用本书和示例代码来回答一些问题则不需要许可,将本书中的大量示例代码集成到产品文档中则需要获得许可。
我们很希望但并不强制要求你在引用本书内容时加上引用说明。引用说明一般包括书名、作者、出版社和ISBN。例如:“Designing Distributed Systems by Brendan Burns (O’Reilly). Copyright 2018 Brendan Burns, 978-1-491-98364-5”。
如果你认为对代码示例的使用可能会超出合理的使用范围或上述许可,请通过邮件[email protected]与我们联系。
O’Reilly Safari
Safari(之前称为Safari Books Online)是一个基于会员的培训和参考平台,适用企业、政府、教育工作者和个人。
会员可以访问来自250多家出版商的数千本书籍、培训视频、学习路径、互动教程和策划播放列表,包括O’Reilly Media、Harvard Business Review、Prentice Hall Professional、Addison-Wesley Professional、Microsoft Press、Sams、Que、Peachpit Press、Adobe、Focal Press、Cisco Press、John Wiley&Sons、Syngress、Morgan Kaufmann、IBM Redbooks、Packt、Adobe Press、FT Press、Apress、Manning、New Riders、McGraw-Hill、Jones&Bartlett和Course Technology等。
想了解更多信息,请访问http://oreilly.com/safari。
如何联系我们
如有任何关于本书的反馈和意见,请联系出版商:
美国:
O’Reilly Media, Inc.
1005 Gravenstein Highway North
Sebastopol, CA 95472
中国:
北京市西城区西直门南大街2号成铭大厦C座807室(100035)
奥莱利技术咨询(北京)有限公司
我们提供了一个本书的Web页面,其中列出了勘误表、示例和相关内容信息。
欢迎访问http://bit.ly/designing-distributed-systems。
如有相关评论或技术问题,请发送电子邮件至[email protected]
有关我们的书籍、课程、会议和新闻的更多信息,请访问我们的网站http://www.oreilly.com。
我们的Facebook:http://facebook.com/oreilly。
我们的Twitter:http://twitter.com/oreillymedia。
我们的YouTube:http://www.youtube.com/oreillymedia。
致谢
感谢我的妻子Robin和我的孩子们,她们让我感到快乐和高效,并为此奉献了很多,也非常感谢那些花时间帮助我学习这些知识的所有人,同时还要感谢我的父母。

目录

目录
前言1
第1章 概述7
系统开发简介7
软件开发中的模式简介8
模式,实践和组件的价值10
小结12
第Ⅰ部分 单节点模式
第2章 边车模式17
一个边车模式的例子:为遗留系统增加HTTPS 功能18
基于边车模式的动态配置19
模块化应用容器20
使用边车模式构建一个简单的PaaS22
基于边车模式的模块化和可重用性设计23
小结27
第3章 大使模式28
使用大使模式来做服务分片29
使用大使模式实现服务代理33
使用大使模式做请求验证或拆分33
第4章 适配器37
监控38
日志40
第Ⅱ部分 服务模式
第5章 基于副本的负载均衡51
无状态服务51
会话跟踪服务55
应用层复制服务56
缓存层介绍56
扩展缓存层60
小结64
第6章 分片服务65
缓存分片66
深入了解分片函数73
支持副本的分配服务77
热分片系统77
第7章 分散模式与聚集模式79
在根节点上进行分散/聚集80
叶子分片82
第8章 函数与事件驱动处理87
何时采用FaaS87
FaaS的模式91
第9章 所有权选举98
是否需要主副本选举99
主副本选举概要101
处理并发操作109
第Ⅲ部分 批处理计算模式
第10章 工作队列系统115
通用工作队列系统115
实践:实现视频缩略图器122
动态扩展执行器123
多执行器模式125
第11章 事件驱动的批处理127
事件驱动批处理模式128
实践:为新用户注册构建事件驱动流程134
发布者/订阅者基础结构136
实践:部署Kafka137
第12章 协调批处理140
连接(或栏栅同步)140
Reduce142
实践:图像标记和处理流水线145
第13章 结论:一个新的开始149

产品特色