产品特色
编辑推荐
历时三年终到稿,还未读完初稿,就知道《架构解密:从分布式到微服务》将是一本热销书。
从传统分布式架构迁移到基于容器技术的微服务架构,这本就是百谈不厌的话题。
更别提内容涉及Microservices、Kubernetes、SOA、Distribute Memory、ElasticSearch、Kafka、CAP、NUMA、SOA、GlusterFS、Actor、Akka、RabbitMQ、Spring Cloud、ZeroC Ice……
Leader-us的文字还是那样充满IT情怀和抱负,也一如既往地流畅和通俗易懂。
一个很复杂的问题,经过Leader-us一个调侃就变得简单化。
一个看似很简单的问题,Leader-us却总能深入到幕后,包括独有的数据和原理讲解,一手的资料啊有木有,世上难买啊有木有,很珍贵啊有木有!
Leader-us调侃道:“《架构解密:从分布式到微服务》是一本代码级吹水架构师必备读物,从此360°无死角吹水,绝地反击,打败纯吹水派架构师”,让我们拭目以待。
内容简介
分布式架构与微服务平台是当今IT界的关键技术,也是资深软件工程师和系统架构师必须掌握的核心技术。《架构解密:从分布式到微服务》以从传统分布式架构迁移到基于容器技术的微服务架构为主线,全面、透彻地介绍了与分布式架构及微服务相关的知识和技术。《架构解密:从分布式到微服务》一开始并没有提及分布式的枯燥理论,而是讲述了一段精彩的IT发展史,其中重点讲述了大型机、UNIX小机器的没落与X86平台的崛起,从而巧妙地引出CPU、内存、网络、存储的分布式演进过程,这恰恰是分布式软件系统赖以运行的“物质基础”。然后简明扼要地介绍了进行系统架构所必需的网络基础,并详细介绍了分布式系统中的经典理论、设计套路及RPC通信,对内存、SOA架构、分布式存储、分布式计算等进行了深度解析,最后详细介绍了全文检索与消息队列中间件,以及微服务架构所涉及的重点内容。
《架构解密:从分布式到微服务》是Leader-us多年架构经验的倾情分享,主要面向关注分布式架构及微服务,以及有志于成为实力派架构师的IT人士。
作者简介
Leader-us,本名吴治辉,惠普资深软件架构师,国内知名开源分布式数据库中间件 Mycat的发起人,精通Java编程,拥有超过16年软件研发经验,专注于电信和云计算方面的软件研发,参与过众多分布式与云计算相关的大型项目架构设计和 Coding,是业界少有的具备很强 Coding 能力的 S级资深架构师;曾经选拔和培养了大批优秀Java工程师,他们中的大多数人进入知名软件公司参与核心研发,也有一些人选择创业。
Leader-us 也是《ZeroC Ice 木又威指南》《Kubernetes 木又威指南:从 Docker到 Kubernetes 实践全接触》的作者。
目录
第1章 大话分布式系统 1
1.1 IT争霸战 1
1.1.1 划时代的第一台计算机 1
1.1.2 IT界的恐龙时代 4
1.1.3 贵族的没落与平民的胜利 6
1.1.4 ARM新贵的爆发 10
1.1.5 超级计算机的绝地反击 11
1.2 分布式系统的开国元勋 13
1.3 分布式系统的基石:TCP/IP 17
1.4 从无奈到崛起的CDN网 19
1.5 这是一个最好的时代 21
第2章 “知识木桶”中的短板—— 网络基础 23
2.1 即使高手也不大懂的网络 23
2.2 NIO,一本难念的经 30
2.2.1 难懂的ByteBuffer 30
2.2.2 晦涩的“非阻塞” 39
2.2.3 复杂的Reactor模型 41
2.3 AIO,大道至简的设计与苦涩的现实 45
2.4 网络传输中的对象序列化问题 50
第3章 分布式系统的经典基础理论 55
3.1 从分布式系统的设计理念说起 55
3.2 分布式系统的一致性原理 58
3.3 分布式系统的基石之ZooKeeper 61
3.3.1 ZooKeeper的原理与功能 61
3.3.2 ZooKeeper的场景案例分析 65
3.4 经典的CA理论 69
3.5 BASE准则,一个影响深远的指导思想 72
3.6 重新认识分布式事务 73
3.6.1 数据库单机事务的实现原理 73
3.6.2 经典的X/OpenDTP事务模型 75
3.6.3 互联网中的分布式事务解决方案 78
第4章 聊聊RPC 83
4.1 从IPC通信说起 83
4.2 古老又有生命力的RPC 85
4.3 从RPC到服务治理框架 91
4.4 基于ZeroC Ice的微服务架构指南 94
4.4.1 微服务架构概述 95
4.4.2 ZeroC Ice微服务架构指南 100
第5章 深入浅析内存 107
5.1 你所不知道的内存知识 107
5.1.1 复杂的CPU与单纯的内存 107
5.1.2 多核CPU与内存共享的问题 110
5.1.3 著名的Cache伪共享问题 113
5.1.4 深入理解不一致性内存 115
5.2 内存计算技术的前世今生 118
5.3 内存缓存技术分析 123
5.3.1 缓存概述 123
5.3.2 缓存实现的几种方式 125
5.3.3 学习Memcache的内存管理技术 127
5.3.4 Redis的独特之处 129
5.4 内存计算产品分析 131
5.4.1 SAP HANA 131
5.4.2 Hazelcast 133
5.4.3 VoltDB 135
第6章 深入解析分布式存储 138
6.1 数据存储进化史 138
6.2 经典的网络文件系统NFS 145
6.3 高性能计算领域的分布式文件系统 148
6.4 企业级分布式文件系统GlusterFS 150
6.5 创新的Linux分布式存储系统—— Ceph 153
6.6 软件定义存储 160
第7章 聊聊分布式计算 166
7.1 不得不说的Actor模型 166
7.2 Actor原理与实践 170
7.3 初识Akka 177
7.4 适用面很广的Storm 185
7.5 MapReduce及其引发的新世界 194
第8章 全文检索与消息队列中间件 201
8.1 全文检索 201
8.1.1 什么是全文检索 201
8.1.2 起于Lucene 202
8.1.3 Solr 206
8.1.4 ElasticSearch 209
8.2 消息队列 217
8.2.1 消息队列概述 217
8.2.2 JEE专属的JMS 221
8.2.3 生生不息的ActiveMQ 226
8.2.4 RabbitMQ 231
8.2.5 Kafka 238
第9章 微服务架构 244
9.1 微服务架构概述 244
9.1.1 微服务架构兴起的原因 244
9.1.2 不得不提的容器技术 246
9.1.3 如何全面理解微服务架构 249
9.2 几种常见的微服务架构方案 253
9.2.1 ZeroC IceGrid微服务架构 253
9.2.2 Spring Cloud微服务架构 256
9.2.3 基于消息队列的微服务架构 259
9.2.4 Docker Swarm微服务架构 261
9.3 深入Kubernetes微服务平台 263
9.3.1 Kubernetes的概念与功能 263
9.3.2 Kubernetes的组成与原理 268
9.3.3 基于Kubernetes的PaaS平台
前言/序言
写给像笔者的你
我们都是IT人,所以,我们注定了很像。
我们可能小时候都挺聪明,学习也挺好,也早恋(可能纯洁度不同)。这一切都是有关联的,因为早恋所以你写情书,所以你有了点文采,又所以喜欢读笔者的文字,于是,你成了笔者的第1个读者,虽然我们分布在不同的“机房”中。
我们因为都受过严格、系统的全面教育,所以骨子里是温顺的,性格上是温柔的。我们因为在智商上高于情商的概率是99%,所以多年独占风云榜之状元称谓——呆。我们一起努力的结果,是验证了那句话——科学无国界。在《生活大爆炸》《IT狂人》等热播美剧中,我们终于找到祖国之外的同类,于是我们开始自恋地打广告:我很呆但我很幽默。
不知道女友要什么东西啊,分手了才知道人家暗示了那么多次自己都不懂啊!
我们都是高学历的概率是99%,我们都近视的概率是99%,我们未富先胖的概率是99%,我们未老先白头的概率是99%,我们目前在北上广或者未来在北上广的概率是99%,我们背井离乡的概率是99%,我们的计算机内存超过4GB的概率是99%,我们喜欢新计算机胜过于喜欢新女友的概率是99%。
我们曾经是众人眼中的宠儿,但不知从何时起,沦落为新一代的“农民工”。在《死神来了之中国特供版》里,每年都有几个IT精英注定被永远地带走,我们在默默悲伤的同时,心里也在默默祈祷:OMyGod,让我活到82岁吧,就算没有28岁的小娇妻。
我们听过最多的公司是微软,我们最离不开的品牌是Windows,虽然对于它们的评价,我们无法达成一致;同样,对于马云及乔布斯,我们也有着不同的评价,虽然他们缔造的“帝国”对我们的生活都产生了重要影响。
最后也是最重要的一点,我们都生活在一个有意思的时代,这个时代无法用任何哲学理论来左右我们的思想和行为。金钱向左,理想朝右,我们始终不放弃一个宏伟梦想:寻找最优秀的算法,收获金钱,实现理想。
吐槽归吐槽,言归正传,笔者假设你跟笔者一样是个有为青年,目标是成为IT精英,目前烦透了信息系统、Web及低水平的重复编码工作,打算进阶架构师队伍,并下定决心潜心修行一年半载,脱掉程序猿的旧外套,换上“土豪金”的IT新人套装,那么,请你准备如下软硬件,开始和笔者一起,探秘分布式架构的奥义,走向“云端”。
有8GB内存的计算机一台,4GB勉强过关。
计算机保持联网,遇到问题能随时“谷歌”。
笔者的QQ号码,该号码在本书某个DEMO的代码中。
Eclipse或你熟悉的Java开发工具。
除此之外,更重要的是以下几点。
不求快,但求坚持到底,系统学习比局部掌握更重要。
不怕错,就怕蒙混过关,尝试和出错是学编程的王者之道。
不怕动手,就怕只动眼,原理与实践都重要,技术都是实践和总结出来的。
Leader-us
2017年5月31日
《云端之上:现代应用架构的演进与实践》 在数字化浪潮席卷全球的今天,软件系统的复杂性与日俱增。从承载亿万用户流量的电商平台,到驱动企业核心业务的金融系统,再到提供海量信息服务的社交媒体,每一个成功的数字产品背后,都离不开一套稳健、高效、可扩展的现代应用架构。本书——《云端之上:现代应用架构的演进与实践》——便是对这一复杂而迷人的领域的一次深度探索。 第一部分:基石的构建——从单体到分布式 现代应用架构的起点,并非一开始就是零散的微观世界,而是源于对规模化处理和高可用性需求的必然回应。早期,许多系统以单体架构(Monolithic Architecture)的形式诞生,将所有功能打包在一个独立的应用程序中。这种架构的优点显而易见:开发简单,部署方便,易于理解和维护。然而,随着业务的快速增长,单体应用逐渐暴露出其局限性。庞大的代码库使得开发效率低下,任何小的改动都可能影响整个系统,增加了出错的风险。部署也变得越来越困难,一次更新可能需要停机数小时甚至数天。此外,当某个模块出现性能瓶颈时,整个应用程序的扩展也受到限制,无法针对性地优化。 正是为了克服单体架构的种种弊端,分布式架构(Distributed Architecture)应运而生。分布式架构的核心思想是将一个大型应用程序拆分成多个独立的服务,这些服务可以通过网络进行通信和协作。这一转变带来了革命性的变化。首先,可伸缩性(Scalability)得到了极大的提升。每个服务都可以根据自身的负载需求独立地进行扩展,例如,电商平台中的商品查询服务在促销期间可以增加更多实例,而订单处理服务则根据实际订单量动态调整。其次,高可用性(High Availability)显著增强。当某个服务发生故障时,不会导致整个系统的瘫痪,其他服务仍然可以正常运行,用户体验受到最小的影响。通过负载均衡和故障转移机制,系统能够实现持续的可用性。 分布式架构的实现,也催生了一系列新的技术和设计模式。服务注册与发现(Service Registration and Discovery)机制变得至关重要,它使得服务能够动态地找到彼此,而无需硬编码服务地址。常见的实现方式包括ZooKeeper、etcd以及Consul等。API网关(API Gateway)作为所有外部请求的统一入口,负责路由、认证、限流、监控等功能,简化了客户端与后端服务的交互。消息队列(Message Queue)(如Kafka、RabbitMQ)在分布式系统中扮演着关键角色,它提供了异步通信的能力,解耦了服务间的依赖,使得数据能够可靠地在不同服务间传递,缓冲了高并发的冲击,并且能够实现事件驱动的架构。 然而,分布式架构并非银弹,它也带来了新的挑战。分布式事务(Distributed Transactions)的复杂性是其中之一,如何保证跨多个服务的操作原子性,以及处理数据一致性问题,需要引入如两阶段提交(2PC)、TCC(Try-Confirm-Cancel)或Saga模式等复杂的解决方案。分布式系统的监控与调试(Monitoring and Debugging)也变得更加困难,日志分散、链路追踪(Distributed Tracing)的需求变得迫切,以便能够定位问题发生的根源。网络延迟和可靠性(Network Latency and Reliability)也成为需要重点考虑的因素,服务间的调用可能因为网络问题而失败,需要设计合理的容错机制,如超时、重试、熔断(Circuit Breaker)等。 第二部分:精雕细琢——微服务架构的兴起与实践 在分布式架构的基础上,为了进一步提高开发效率、灵活性和敏捷性,微服务架构(Microservices Architecture)应运而生。微服务将应用程序拆分成一组小型的、独立的、自治的服务,每个服务都围绕着特定的业务能力构建,并且可以独立部署、独立扩展、独立迭代。与粗粒度的分布式服务不同,微服务更加强调“小而精”,每个服务都力求职责单一,并且拥有自己的数据库。 微服务架构带来的核心优势在于敏捷性(Agility)和技术多样性(Technology Diversity)。团队可以专注于开发和维护少量代码,实现更快的开发周期和更频繁的部署。不同的微服务可以使用最适合其特定需求的编程语言、框架和数据库,打破了技术栈的统一限制,能够更好地适应不断变化的技术环境。独立部署(Independent Deployment)使得团队能够独立地发布新功能或修复bug,减少了发布过程中的风险和依赖。 然而,微服务的引入也带来了显著的复杂度管理(Complexity Management)问题。服务数量的大幅增加,使得运维和监控的难度呈指数级增长。服务间通信(Inter-service Communication)需要更加精心的设计,RESTful API、gRPC等通信协议的选择,以及消息队列的应用,都需要根据实际场景进行权衡。服务治理(Service Governance),包括服务的注册、发现、路由、配置管理、流量控制等,成为微服务架构不可或缺的一部分。 为了应对这些挑战,一系列围绕微服务架构的生态系统和工具应运而生。容器化技术(Containerization Technologies),如Docker,为微服务的打包、部署和隔离提供了标准化的解决方案。容器编排平台(Container Orchestration Platforms),如Kubernetes,则极大地简化了大规模容器集群的管理,实现了自动化部署、扩展和管理。服务网格(Service Mesh)(如Istio、Linkerd)的出现,将服务间通信的复杂性(如负载均衡、熔断、重试、监控、安全等)从应用程序代码中剥离出来,由基础设施层统一处理,极大地降低了开发者的负担。 此外,微服务架构还对团队组织(Team Organization)提出了新的要求。康威定律(Conway's Law)指出,“任何系统设计都会模仿组织沟通结构”。为了更好地支持微服务架构,敏捷团队(Agile Teams)通常会采用“小团队、大责任”的模式,每个团队负责一个或多个微服务的端到端的生命周期,包括开发、测试、部署和运维。 第三部分:面向未来——云原生、DevOps与架构演进 现代应用架构的演进,与云计算的普及密不可分。云原生(Cloud Native)理念的兴起,强调构建和运行能够充分利用云平台优势的应用程序。微服务、容器化、持续集成/持续部署(CI/CD)以及自动化运维,都是云原生架构的重要组成部分。云原生不仅仅是一种技术栈,更是一种思维方式和文化,它鼓励快速迭代、弹性伸缩、故障容忍和可观测性。 DevOps文化的推广,更是将开发(Development)和运维(Operations)紧密地结合在一起,打破了传统的部门壁垒,通过自动化工具和流程,实现软件从开发到上线再到运维的全生命周期的协同与效率提升。持续集成(Continuous Integration)和持续部署(Continuous Deployment)(或持续交付Continuous Delivery)是DevOps的核心实践,它们使得代码的集成和交付过程更加频繁、自动化和可靠。 在架构设计层面,领域驱动设计(Domain-Driven Design, DDD)成为了构建复杂业务系统的重要方法论。DDD强调以业务领域模型为核心,将软件设计与业务逻辑紧密结合,通过限界上下文(Bounded Context)等概念,帮助开发者清晰地划分微服务的边界,避免产生“大泥球”式的微服务。 可观测性(Observability)在现代应用架构中扮演着越来越重要的角色。它不仅仅是简单的监控,而是能够通过日志(Logs)、指标(Metrics)和追踪(Traces)等多种维度,深入了解系统的内部状态,从而更有效地发现、诊断和解决问题。日志聚合(Log Aggregation)(如ELK Stack, Loki)、分布式追踪(Distributed Tracing)(如Jaeger, Zipkin)和指标收集与可视化(Metrics Collection and Visualization)(如Prometheus, Grafana)是实现高可观测性的关键技术。 此外,随着业务的不断发展,架构也需要持续的演进。演进式架构(Evolutionary Architecture)的思想,鼓励设计易于修改和适应变化的系统,而不是追求一次性的完美设计。这意味着需要拥抱变化,不断地对架构进行评估和调整,以满足不断变化的业务需求和技术趋势。 总结 《云端之上:现代应用架构的演进与实践》旨在为读者提供一个全面而深入的视角,理解从单体架构到分布式架构,再到微服务架构的演进历程。本书将详细探讨这些架构模式的核心理念、关键技术、实践挑战以及应对策略。我们将深入剖析服务拆分、通信协议、数据管理、服务治理、容器化、编排、DevOps流程以及云原生理念等多个方面,帮助读者构建出更加健壮、可伸缩、敏捷且易于维护的现代应用系统。无论您是初入架构领域的新手,还是经验丰富的架构师,本书都将为您提供宝贵的洞察和实用的指导,助力您在瞬息万变的数字化时代,打造面向未来的卓越应用架构。