具体描述
《架构探险:从零开始写分布式服务框架》的初衷是希望把分布式服务框架的实现细节及分布式服务框架周边的知识点梳理清楚,为那些对分布式服务框架感兴趣的人打开一扇窗户,降低获取相关知识的门槛。所以《架构探险:从零开始写分布式服务框架》围绕实现分布式服务框架所需的知识点,进行了比较详尽细致的介绍。包括常见的RPC框架、常见的序列化/反序列化方案及选型、分布式服务框架服务的发布引入实现细节、软负载实现、底层通信方案实现、服务注册与发现实现、服务治理常见的功能等。通过对这些知识点的逐步讲解,层层深入,最终完成一个可运行的分布式服务框架。
通过《架构探险:从零开始写分布式服务框架》,读者可以完整地了解实现一个分布式服务框架的所有技术细节和实现原理,希望对想了解分布式服务框架实现细节的读者有所启发和帮助。
作者简介
目录信息
1.1 RPC框架原理 1
1.2 RMI介绍 2
1.2.1 原生RMI代码示例 3
1.2.2 RMI穿透防火墙 5
1.3 CXF/Axis2介绍 7
1.3.1 CXF介绍 7
1.3.2 Axis2介绍 14
1.4 Thrift介绍 21
1.4.1 Thrift工作原理介绍 23
1.4.2 Thrift IDL语法说明 26
1.4.3 基于Apache Thrift的Java版完整案例 28
1.4.4 基于Java注解的简化实现 36
1.5 gRPC介绍 42
1.5.1 protobuf3语法介绍 43
1.5.2 gRPC使用示例 45
1.6 HTTP Client介绍 53
1.6.1 构建HttpClient对象 54
1.6.2 构建URI对象 55
1.6.3 构建请求对象(HttpGet、HttpPost) 56
1.6.4 HttpClient发起调用及获取调用返回结果 56
1.7 实现自己的RPC框架 61
1.8 RPC框架与分布式服务框架的区别 68
1.9 本章小结 68
第2章 分布式服务框架总体架构与功能 69
2.1 面向服务的体系架构(SOA) 69
2.1.1 面向服务架构范式 69
2.1.2 服务拆分原则 71
2.2 分布式服务框架现实需求 72
2.3 分布式服务框架总体架构及所需的技术概述 72
2.4 本章小结 74
第3章 分布式服务框架序列化与反序列化实现 75
3.1 序列化原理及常用的序列化介绍 75
3.2 Java默认的序列化 77
3.3 XML序列化框架介绍 80
3.4 JSON序列化框架介绍 82
3.5 Hessian序列化框架介绍 87
3.6 protobuf序列化框架介绍 88
3.7 protostuff序列化框架介绍 93
3.8 Thrift序列化框架介绍 98
3.9 Avro序列化框架介绍 100
3.9.1 Avro介绍 100
3.9.2 Avro IDL语言介绍 101
3.9.3 Schema定义介绍 103
3.9.4 Maven配置及使用IDL与Schema自动生成代码 103
3.9.5 Avro序列化/反序列化实现 105
3.10 JBoss Marshalling序列化框架介绍 110
3.11 序列化框架的选型 112
3.12 实现自己的序列化工具引擎 113
3.13 本章小结 118
第4章 实现分布式服务框架服务的发布与引入 119
4.1 Spring Framework框架概述 119
4.1.1 Spring Framework介绍 119
4.1.2 Spring Framework周边生态项目介绍 121
4.2 FactoryBean的秘密 122
4.2.1 FactoryBean的作用及使用场景 123
4.2.2 FactoryBean实现原理及示例说明 124
4.3 Spring框架对于已有RPC框架集成的支持 127
4.3.1 Spring支持集成RPC框架介绍 127
4.3.2 基于RmiProxyFactoryBean 实现RMI与Spring的集成 128
4.3.3 基于HttpInvokerProxyFactoryBean实现HTTP Invoker与Spring的集成 131
4.3.4 基于HessianProxyFactoryBean实现Hessian与Spring的集成 133
4.4 实现自定义服务框架与Spring的集成 136
4.4.1 实现远程服务的发布 136
4.4.2 实现远程服务的引入 144
4.5 在Spring中定制自己的XML标签 150
4.6 本章小结 158
第5章 分布式服务框架注册中心 159
5.1 服务注册中心介绍 159
5.2 ZooKeeper实现服务的注册中心原理 161
5.2.1 ZooKeeper介绍 161
5.2.2 部署ZooKeeper 161
5.2.3 ZkClient使用介绍 164
5.2.4 ZooKeeper实现服务注册中心 173
5.3 集成ZooKeeper实现自己的服务注册与发现 175
5.3.1 服务注册中心服务提供方 175
5.3.2 服务注册中心服务消费方 176
5.3.3 服务注册中心实现 178
5.4 本章小结 189
第6章 分布式服务框架底层通信实现 190
6.1 Java I/O模型及I/O类库的进化 190
6.1.1 Linux下实现的I/O模型 190
6.1.2 Java语言实现的I/O模型 194
6.1.3 Java Classic I/O(Blocking I/O)介绍 194
6.1.4 Java Non-blocking I/O(NIO)介绍 211
6.1.5 NIO2及Asynchronous I/O介绍 233
6.2 Netty使用介绍 255
6.2.1 Netty开发入门 256
6.2.2 Netty粘包/半包问题解决 265
6.3 使用Netty构建服务框架底层通信 320
6.3.1 构建分布式服务框架Netty服务端 320
6.3.2 构建分布式服务框架服务调用端Netty客户端 330
6.4 本章小结 347
第7章 分布式服务框架软负载实现 348
7.1 软负载的实现原理 348
7.2 负载均衡常用算法 349
7.2.1 软负载随机算法实现 349
7.2.2 软负载加权随机算法实现 350
7.2.3 软负载轮询算法实现 351
7.2.4 软负载加权轮询算法实现 352
7.2.5 软负载源地址hash算法实现 354
7.3 实现自己的软负载机制 355
7.4 软负载在分布式服务框架中的应用 357
7.5 本章小结 361
第8章 分布式服务框架服务治理 362
8.1 服务治理介绍 362
8.2 服务治理的简单实现 364
8.2.1 服务分组路由实现 364
8.2.2 简单服务依赖关系分析实现 374
8.2.3 服务调用链路跟踪实现原理 380
8.3 本章小结 380
附录A 如何配置运行本书完成的分布式服务框架 381
· · · · · · (收起)
读后感
用户评价
我必须承认,最初翻开这本书时,我对它的期望并不高,市面上同类书籍实在太多,大多流于表面,只会停留在架构图和名词解释上。然而,这本书真正吸引我的地方在于其对“健壮性”的执着追求。作者在每一个模块的设计中,都反复强调了容错和隔离的必要性。比如,在处理超时与重试机制时,书中不仅仅展示了如何设置合理的超时时间,更进一步探讨了幂等性保证、指数退避策略以及如何避免雪崩效应的熔断器设计。尤其是在系统限流那一节,作者引入了令牌桶和漏桶算法的对比分析,并通过一个模拟高并发场景的测试用例,展示了不同策略在压力下的表现差异。这种注重工程实践中“万一出错怎么办”的思维方式,是很多纯理论书籍所缺乏的。读完这部分,我立刻被启发,回去审视了我们现有服务中一个长期存在的并发问题,并尝试用书中提到的方法进行了优化。这种能直接落地并解决实际问题的能力,是这本书最大的价值所在。
我特别欣赏作者在全书脉络中嵌入的“可扩展性”思想。许多框架在最初实现时功能是完备的,但后续的迭代和功能增加往往会带来架构的僵化。这本书在设计之初,就预留了足够的接口和抽象层,为未来的功能扩展做好了准备。例如,在设计插件化机制时,作者不仅仅是简单地定义了接口,还展示了如何利用反射和依赖注入的思想,使得新的功能模块可以不修改核心代码的情况下被动态加载。这一点对于长期维护一个复杂的分布式系统至关重要。阅读过程中,我一直在思考如何将书中学到的设计模式应用到我当前负责的项目中。这种主动将书本知识与个人工作场景进行映射的学习体验,使得这本书的价值被最大化地发挥出来。它不是一本只读一次的书,更像是一本可以伴随架构师职业生涯不断翻阅和参考的工具手册。
这本书的文字风格非常独特,它不像典型的技术文档那样严谨得让人望而生畏,反而带着一种探索未知的兴奋感。作者使用了大量的类比和生动的场景描述,将诸如“一致性模型”、“CAP理论”这类晦涩的概念,转化成了生活中常见的例子。比如,在讲解RAFT算法的日志复制过程时,作者巧妙地将其比作一个小型“新闻发布会”,谁是发言人、信息如何传达到所有与会者,一目了然。更令人欣赏的是,作者在介绍完理论后,总能迅速地将读者拉回到代码实现的层面,清晰地指出哪些地方需要额外的同步机制,哪些地方可以使用原子操作来提高效率。这种理论与实践的无缝切换,使得学习过程充满了连贯性。对于那些希望从“会用框架”进阶到“理解并能修改框架”的开发者而言,这种由浅入深、步步深入的讲解方式,简直是量身定制。它不只是告诉你“怎么做”,更重要的是让你明白“为什么必须这么做”。
这本书在技术选型和设计决策的论述上,展现了极高的成熟度。它没有盲目推崇某一种时髦的技术栈,而是站在系统整体性能和可维护性的角度进行权衡。例如,在讨论序列化协议时,作者没有简单地说JSON不好或Protobuf好,而是详细列举了它们的性能指标、兼容性考量以及代码生成效率,最终根据分布式服务框架对低延迟的要求,给出了倾向性的建议,并且阐明了这种倾向性在特定场景下可能需要调整。这种开放和辩证的视角,极大地拓宽了我的技术视野。我过去总习惯于被动接受既有的技术选型,但读完这本书后,我开始习惯于主动思考:如果我的业务场景对延迟的要求更高,或者对数据格式的动态性要求更强,我应该如何调整框架的设计?这种培养“系统思维”的能力,比单纯掌握某项技术的具体语法要重要得多。
这本书的结构设计非常巧妙,它不像很多技术书籍那样堆砌概念,而是以一种叙事性的方式,带领读者一步步构建起一个完整的分布式服务框架。从最基础的RPC通信协议选型开始,作者就展现出深厚的实战经验,清晰地阐述了每一步选择背后的权衡利弊。我印象最深的是关于服务注册与发现那一章,作者没有止步于介绍Zookeeper或Etcd的API用法,而是深入剖析了它们在分布式环境下的心跳机制、领导者选举等核心问题,甚至还穿插了自研的简单注册中心实现,这使得抽象的概念变得具体可感。整个阅读过程,感觉就像是跟着一位经验丰富的架构师进行实地考察,而不是枯燥地啃理论。特别是作者在讨论负载均衡策略时,对随机、轮询到一致性哈希的演进过程进行了细致的描绘,并用代码片段直观展示了如何用Go语言实现一个高效的负载均衡器。这种“边做边学”的节奏,极大地降低了初学者进入复杂分布式领域的门槛。对于想真正理解分布式系统内部运作的工程师来说,这本教材提供的不是知识的清单,而是一张可供探索的地图。
整体思路还是清醒,关键核心的代码都到点上了
什么水平看什么书,不强求,但是这书只贴代码,我是soa入门,其他熟悉soa的人就不要看了
第6章相对来说比较精彩。前面的章节也算重新梳理了一下脉络。
省图借来看的,不亏
作为入门级书本来说,还是可以的。一般的本科生或者培训机构毕业的,拿着这本书按部就班写下来,通过rpc 相关的面试还是没多少问题的。