×
超值优惠券
¥50
100可用 有效期2天

全场图书通用(淘书团除外)

关闭
暂无评论
图文详情
  • ISBN:9787121420948
  • 装帧:一般胶版纸
  • 册数:暂无
  • 重量:暂无
  • 开本:16开
  • 页数:348
  • 出版时间:2021-10-01
  • 条形码:9787121420948 ; 978-7-121-42094-8

本书特色

适读人群 :本书适合从事互联网后端开发的人员阅读。RPC概览 主要介绍RPC的核心概念、历史背景、演进过程及技术原理,并且介绍四个常见的RPC框架与使用示例。 RPC框架核心组件 详细介绍RPC框架的核心组成部分、异构语言下RPC框架的挑战,以及解决异构语言的方案,并且针对每个核心组成部分介绍业界常见的实现方案。基于这些核心组成部分,还介绍如何编写一个RPC框架的示例。 服务治理 详细介绍服务治理的核心内容,包括注册中心、配置中心、元数据中心、服务路由策略、负载均衡策略、高可用策略及服务可观测性。

内容简介

本书由浅入深、详细地介绍了RPC技术和RPC框架的原理。除此之外,本书还详细介绍了与RPC框架原理相关的技术,包括远程通信技术、通信协议、序列化技术、动态代理技术、IDL等。本书首先介绍了RPC技术和RPC框架的发展背景、历史及演进过程,以加深读者对RPC技术的理解。然后介绍了常见的RPC框架,让读者能够对这些RPC框架有整体上的了解。接下来将RPC框架的核心组成部分拆开,对这些组成部分逐个进行介绍,并且介绍相关的技术和概念,比如介绍远程通信方式时,会介绍Socket技术、I/O模型等。本书接着介绍了实现简易的RPC框架的流程,让读者能够上手实际操作。本书还介绍了RPC框架是如何应对异构语言下的挑战的,并且介绍了与RPC框架相关的服务治理内容,包括注册中心、配置中心、元数据中心、服务路由策略、负载均衡策略、高可用策略及服务可观测性,让读者能够全面地了解RPC框架。

目录

目录


第1部分 RPC概览
第1章 初识RPC 2
1.1 计算机核心处理器简介 3
1.1.1 单核处理器系统时代 3
1.1.2 多核处理器系统时代 4
1.1.3 多处理器系统时代 5
1.2 IPC简介 6
1.3 RPC简介 7
1.4 RPC的发展历程 10
1.5 RPC核心组成部分 11
1.5.1 服务调用方 12
1.5.2 服务提供方 12
1.5.3 本地存根 12
1.5.4 RPC通信者 13
1.6 RPC调用过程 13
1.6.1 服务暴露的过程 14
1.6.2 服务发现的过程 15
1.6.3 服务引用的过程 16
1.6.4 方法调用的过程 16
第2章 初览RPC框架 18
2.1 RPC框架简介 19
2.2 RPC框架发展及市场现状 21
2.3 Dubbo简介 25
2.4 gRPC简介 31
2.5 Thrift简介 38
2.6 Spring Cloud简介 44
2.6.1 Spring Cloud项目简介 45
2.6.2 使用Spring Cloud的组件实现RPC调用的示例 51
2.7 选择RPC框架的几个角度 61
第2部分 RPC框架核心组件
第3章 远程通信方式 68
3.1 远程通信方式简介 69
3.1.1 Socket简介 69
3.1.2 Java对Socket接口的封装 74
3.1.3 网络应用程序框架 78
3.2 I/O模型 78
3.3 Java对I/O模型的封装 81
3.3.1 BIO 81
3.3.2 NIO 82
3.3.3 AIO 93
3.4 远程通信实现方案之Netty 99
3.4.1 Netty核心组件介绍 102
3.4.2 线程模型 105
3.5 远程通信实现方案之Mina 111
3.6 远程通信实现方案之Grizzly 119
第4章 通信协议 127
4.1 标准协议 128
4.2 传输层协议 131
4.3 应用层协议 136
4.4 自定义协议简介 141
4.5 如何设计自定义协议 143
第5章 序列化 147
5.1 序列化和反序列化 148
5.2 文本格式的序列化方案 149
5.2.1 XML格式 150
5.2.2 JSON格式 152
5.3 二进制格式的序列化方案 158
5.4 序列化框架选型 167
第6章 动态代理 170
6.1 动态代理简介 171
6.2 JDK自带的动态代理方案 175
6.2.1 JDK实现动态代理的示例 175
6.2.2 通过JDK实现动态代理的原理 177
6.3 CGLib动态代理方案 183
6.3.1 使用CGLib实现动态代理的示例 184
6.3.2 使用CGLib实现动态代理的原理 185
6.4 Javassist动态代理方案 193
6.4.1 使用Javassist实现动态代理的示例 194
6.4.2 使用Javassist实现动态代理的原理 195
第7章 实现一个简易的RPC框架 203
7.1 实现简易的RPC框架 204
7.2 实现远程调用 205
7.3 实现服务治理能力 216
7.4 使用简易的RPC框架 222
第8章 异构语言应用调用 228
8.1 RPC在异构语言下的挑战 229
8.2 IDL简介 230
8.3 Dubbo在跨语言上的解决方案 232
8.3.1 Dubbo服务提供者 233
8.3.2 Dubbo服务消费者 237
8.4 CXF在跨语言上的解决方案 240
8.5 gRPC在跨语言上的解决方案 241
第3部分 服务治理
第9章 注册中心 244
9.1 注册中心简介 245
9.2 CAP模型与ACID、BASE理论 250
9.3 分布式一致性 256
9.4 注册中心实现方案之Eureka 262
9.5 注册中心实现方案之ZooKeeper 265
9.6 注册中心实现方案之Nacos 269
9.7 注册中心在一致性和可用性之间的抉择 273
第10章 配置中心 276
10.1 配置中心简介 277
10.2 配置中心实现方案之Apollo 281
10.2.1 服务端的设计 283
10.2.2 客户端的设计 285
10.3 配置中心实现方案之Nacos 286
第11章 元数据中心 292
11.1 元数据中心简介 293
11.2 元数据中心的选型 295
第12章 服务的路由 297
12.1 路由策略 298
12.2 负载均衡策略 302
12.2.1 服务端负载均衡 303
12.2.2 客户端负载均衡 304
12.3 负载均衡算法 305
12.3.1 随机算法 306
12.3.2 轮询算法 306
12.3.3 *少活跃数算法 307
12.3.4 一致性Hash负载均衡算法 308
第13章 分布式系统高可用策略 310
13.1 分布式系统高可用 311
13.2 Hystrix 317
13.3 Resilience4j 320
13.4 Sentinel 324
第14章 服务可观测性 330
14.1 服务可观测性简介 331
14.2 日志记录 333
14.3 聚合度量 335
14.4 链路追踪 337

展开全部

节选

前面提到RPC会带来地址空间被隔离的问题,在远程调用的过程中,Consumer端的地址空间中任何一个内存地址在Provider端都是没有意义的。除了内存地址无法匹配,在不同的机器上还可能出现位宽不同、处理器的大小端不同、编译环境导致的结构体内存布局不同、字符串编码不同等情况,这些情况都会导致在远程调用的过程中Consumer端的函数调用无法像本地调用一样正确匹配到真实的函数实现,从而导致函数调用失败。所以在远程调用过程中,Consumer端发起的函数调用让Provider端精准地知道自己应该执行哪个函数就是必须要解决的问题,而Stub的存在就是为了让远程调用像本地调用一样直接进行函数调用,无须关心地址空间隔离、函数不匹配等问题。Stub的职责就是进行类型和参数转化。如果把Consumer端和Provider端比作两个不同语种的人,那么Stub就类似于翻译员,虽然Consumer端和Provider端的语言不同,但是经过Stub处理后,两端还是能够正常地传达信息并进行沟通。 本地存根(Stub)分为服务调用方的本地存根和服务提供方的本地存根。服务调用方的本地存根与服务消费者都属于Consumer端,它们存在于同一台机器上,服务调用方的本地存根会接收Consumer的函数调用,本地存根会解析函数调用的函数名、参数等信息,整理并且组装这些数据,然后将这些数据按照定义好的协议进行序列化,打包成可传输的消息,交给RPCRuntime。服务调用方的本地存根除了会处理服务消费者提供的方法、参数、方法参数类型等数据,还会处理服务提供方返回的结果,它会将RPCRuntime返回的数据包反序列化成服务调用方所需要的数据结果并传递给服务消费方。就像是两国领导人谈话时某国的领导人需要向翻译员传达自己想要讲的话,而翻译员需要将这些话翻译成对方国家的语言进行表达,并且将对方国家的领导人的讲话内容翻译后传达给本国的领导人。其中序列化和协议会分别在第5章和第6章做详细的介绍。 从服务消费方的角度来看,Stub隐藏了远程调用的实现细节,就像是远程服务的一个代理对象,可以让服务消费方感觉调用远程服务方法就像调用本地方法一样。服务提供方的本地存根与服务提供方都属于Provider端,它们一起存在于同一台机器上。当Provider端的RPCRuntime收到请求包后,交由服务提供方的本地存根进行参数等数据的转化。服务提供方的本地存根会重新转换客户端传递的数据,以便在Provider端的机器上找到对应的函数,传递正确的参数数据,*终正确地执行真实函数的调用。等函数执行完成后,服务提供方会将执行结果返回给服务提供方的本地存根,由本地存根再将结果数据序列化、打包,*后交给RPCRuntime。服务提供方的本地存根与服务调用方的本地存根一样都是充当了翻译员的角色。还是用上面两国领导人交谈的例子,只是两国领导人各自有自己的翻译员而已。

作者简介

Apache Dubbo Committer,ServiceMesher中文社区成员,热爱分享,热衷开源,专注于服务化、分布式、云原生等技术领域,对这些技术领域有着深入的研究。

预估到手价 ×

预估到手价是按参与促销活动、以最优惠的购买方案计算出的价格(不含优惠券部分),仅供参考,未必等同于实际到手价。

确定
快速
导航