架构探险:从零开始写分布式服务框架
  • 推荐4
  • 收藏20
  • 浏览7.7K

架构探险:从零开始写分布式服务框架

李业兵 , 李业兵 (作者)  董英 (责任编辑)

  • 书  号:978-7-121-31959-4
  • 出版日期:2017-07-31
  • 页  数:400
  • 开  本:16(185*235)
  • 出版状态:图书立项
  • 维护人:董英
分布式服务框架目前已经是互联网公司实现SOA服务化架构的必备基础设施,对于一般的开发而言,自己要独立实现一个分布式服务框架,还是有相当的难度的。本书围绕如何从零开始实现一个可用的分布式服务框架,介绍了实现分布式服务框架所需技术的方方面面。对于从事开发行业的程序员有很大的现实价值。能够从中学习到很多的实用技术,了解并掌握实现分布式服务框架所需的思想以及技术。
一线技术专家全方位解析分布式服务框架底层技术细节,
手把手教你搭建一个完整的符合自身需求的分布式服务框架
李业兵

先后在支付宝运营支撑事业部、去哪儿网酒店事业部任职高级开发工程师。于2015年加入猫眼电影(原美团网旗下电影事业部),负责交易业务线架构与开发工作。

擅长电商交易领域系统设计与架构,在电商交易领域系统架构设计方面积累了较为丰富的实践经验。

对高并发系统设计、服务化架构、互联网中间件开发保持着浓厚的兴趣。
缘起
随着互联网浪潮风起云涌,互联网行业发展非常迅猛。此时将所有业务集中实现在一个应用上的做法已经满足不了公司及业务发展的需要了。基于面向服务体系架构来构建系统成了互联网架构师构建系统的不二选择,而面向服务体系架构能够落地的基础技术之一就是分布式服务框架。
要完全掌握分布式服务框架存在一定的技术门槛,市面上不乏一些非常出色的开源分布式服务框架。但对于新手而言,直接通过阅读源码来掌握分布式服务框架原理也并不是一件特别容易的事。
现在市面上也有专门的书籍来介绍分布式服务框架,但大都是从理论和方法论的角度来描述其原理的。有句俗语:“有些事,难不难,做了才知道;有些山,陡不陡,爬了才知道。”对于程序员来说,总是想通过具体的代码来了解一个分布式服务框架的实现细节,这样更为直观和深刻。为了帮助部分想了解分布式服务框架内部实现原理,甚至想自己实现一个分布式服务框架的读者,我写了这样一本介绍如何从零开始写一个分布式服务框架的书,希望能够对想了解分布式服务框架实现细节的读者有所帮助。
内容大纲
全书一共8章。按照分布式服务框架的各个组成部分及各个组成部分所需的知识点或者这些知识点适当的延伸来组织每一章节的内容。建议读者按照全书章节的组织顺序来阅读。
第1章主要介绍日常开发常用的RPC框架,包括RMI、CXF、Axis2、Thrift、gRPC、HttpClient,并就每一种RPC框架给出了实际可运行的代码示例,以及自己实现的一个简易版的RPC框架。
第2章对于基于服务体系架构做了介绍,对分布式服务框架总体架构及实现分布式服务框架所需的技术做了概要性介绍。
第3章介绍9种序列化/反序列化方案,每一种序列化/反序列化方案均给出了相应的代码示例,并给出了具体的选型建议。同时,将这9种序列化/反序列化实现集成在一起,实现了可配置化的序列化/反序列化工具引擎,最终整合在分布式服务框架实现内部。
第4章对Spring做了概要性介绍。有针对性地对FactoryBean周边知识及如何使用FactoryBean实现分布式服务的发布和引入做了详细介绍并给出代码实现。
第5章介绍ZooKeeper常用知识及如何使用ZooKeeper实现服务的注册与发现,并给出了具体的代码实现。
第6章围绕系统之间底层通信相关的知识点来组织,从Java I/O 体系(阻塞I/O、NIO、NIO2)到Netty相关知识均做了详细介绍。最后就使用Netty实现分布式服务框架底层通信给出了代码实现。
第7章介绍常用的软负载算法,并针对每一种算法给出了代码实现。同时将实现的多种软负载算法集成可配置的软负载工具引擎,最终整合在分布式服务框架实现内部。
第8章介绍分布式服务框架服务治理相关的概念及方法论,并就部分服务治理功能给出了具体实现。
全书完整地实现了一个可以实际运行的分布式服务框架,全书所有代码均提供下载。
致谢
首先感谢我的妻子,在写书这段时间,宝宝的出生给了我人生中最好的礼物,宝宝的咿呀学语、一个不经意的笑容都能给我莫大的支持和鼓励。
同时,感谢猫眼电影公司的同事和领导,给了我宽松的学习与工作氛围,学到了很多知识,也得到了很多成长的机会。
最后,感谢辛苦劳作的编辑,本书能够出版有你们很大的一份功劳。
写在最后
这本书偏向实战,会有很多代码实现细节的描述,全书完整的代码实现会另给下载链接。本书所实现的分布式服务框架并未经历严苛生产环境的考验,定有很多不足之处,希望日后有机会再继续完善。写书对我来说是一个比较大的挑战,因为一个技术点,自己能理解和会用文字表达出来让别人也能理解是完全不同的层次。心中特别忐忑,担心因为自己对知识理解不够深入,以及文字表达水平不够,导致对读者有所误导。书中难免有错误和疏漏之处,在此恳请读者批评指正。

李业兵

目录

第1章 常用的RPC框架 1
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

读者评论

  • 进行多个应用负载均衡调用的时候报RevokerResponseHolder.putResultValue()空指针异常是怎么回事啊,部署单个应用就不会

    哈哈哈发表于 2022/3/12 12:38:20
  • 思路差不多清晰了,但只支持单个服务发布了引入。服务提供者列表本地缓存不能动态感知(新增服务提供者不会刷新服务提供者列表)。请问这些问题是否存在?

    夜尽天明1发表于 2019/6/5 16:22:35
  • 用thrief声场j**a报错,

    kinve发表于 2018/11/24 14:02:25
  • 为什么第一张自己写的简单的那个RPC框架不能运行显示
    Exception in thread “main” j**a.lang.reflect.UndeclaredThrowableException
    at com.sun.proxy.$Proxy0.sayHello(Unknown Source)
    at invoke.RpcProviderMain.main(RpcProviderMain.j**a:10)
    Caused by: j**a.net.ConnectException: Connection refused: connect
    at j**a.net.DualStackPlainSocketImpl.connect0(Native Method)

    Mr.Luo发表于 2018/8/3 0:09:13
  • 压缩包里面是乱码

    xuebusi发表于 2018/5/22 10:38:39
    • 作者用idea写的demo,用eclipse打开可能存在乱码问题

      mmd发表于 2018/6/2 20:56:17

下载资源

图书类别

相关博文

相关图书

ATT&CK框架实践指南

过去,入侵检测能力的度量是个公认的行业难题,各个企业得安全负责人每年在入侵防护上都投入大量费用,但几乎没有人能回答CEO 的问题:“买了这么多产品,我们的入侵防...

¥148.00

架构解密:从分布式到微服务(第2版)

吴治辉 (作者)

微服务、云原生、Kubernetes、Service Mesh是分布式领域的热点技术,它们并不是凭空出现的,一定继承了某些“前辈”的优点。我们不仅要了解这些技术...

 

深入理解Apache Dubbo与实战

诣极 林琳 (作者)

本书首先介绍Dubbo的简史、后续的规划和整体架构大图;接着介绍Dubbo环境配置,并基于Dubbo开发第一款应用程序;然后介绍Dubbo内置的常用注册中心的实...

¥79.00

RabbitMQ实战指南

朱忠华 (作者)

本书从消息中间件的概念和RabbitMQ的历史切入,主要阐述RabbitMQ的安装、使用、配置、管理、运维、原理、扩展等方面的细节。本书大致可以分为基础篇、进阶...

¥79.00

Spring Boot 2精髓:从构建小系统到架构分布式大系统

李家智 (作者)

Spring Boot是目前Spring技术体系中炙手可热的框架之一,既可用于构建业务复杂的企业应用系统,也可以开发高性能和高吞吐量的互联网应用。Spring ...

¥79.00

Apache Kafka源码剖析

徐郡明 (作者)

本书以 Kafka 0.10.0 版本源码为基础,针对 Kafka的架构设计到实现细节进行详细阐述。本书共5 章,从 Kafka 的应用场景、源码环境搭建开始逐...

¥89.00