新書推薦:
《
FANUC工业机器人装调与维修
》
售價:HK$
102.4
《
吕著中国通史
》
售價:HK$
64.4
《
爱琴海的光芒 : 千年古希腊文明
》
售價:HK$
204.7
《
不被他人左右:基于阿德勒心理学的无压力工作法
》
售價:HK$
67.9
《
SDGSAT-1卫星热红外影像图集
》
售價:HK$
457.7
《
股市趋势技术分析(原书第11版)
》
售價:HK$
227.7
《
汉匈战争全史
》
售價:HK$
102.4
《
恶的哲学研究(社会思想丛书)
》
售價:HK$
109.8
|
編輯推薦: |
1、微服务是当前非常热的技术关键词之一,那么微服务如何落地呢?首先要实现服务化,微服务架构是一种服务化架构风格。《分布式服务框架原理与实践》对如何构建分布式服务化系统,提供了原理分析、关键技术、开发案例以及业界技术对比,非常系统化,不论是学习分布式服务技术还是深入大型互联网架构都非常实用。
2、《分布式服务框架原理与实践》作者李林锋多年来在华为一直从事核心代码的架构设计和开发,属于实战型架构师,这本书集合了他多年的架构思路,书中内容组织清晰,图例详实,非常便于理解与吸收。
3、《分布式服务框架原理与实践》首先分析了作为一个分布式服务框架所需具备的能力,包括服务注册中心、服务调用、服务路由、服务发布/灰度发布等;接着分析了服务底层如何有效地进行通信,包括通信框架、序列化/反序列化及协议栈等;然后分析了服务如何做到高可靠性及高安全性等重要特性;*后也阐述了从服务化如何向微服务演进。干货满满!
|
內容簡介: |
本书作者具有丰富的分布式服务框架、平台中间件的架构设计和实践经验,主导设计的华为分布式服务框架已经在全球数十个国家成功商用。书中依托工作实践,从分布式服务框架的架构设计原理到实践经验总结,涵盖了服务化架构演进、订阅发布、路由策略、集群容错和服务治理等多个专题,全方位剖析服务框架的设计原则和原理,结合大量实践案例与读者分享作者对分布式服务框架设计和运维的体会。同时,对基于Docker部署微服务以及基于微服务架构开发、部署和运维业务系统进行了详细介绍。
|
關於作者: |
李林锋,现任华为PaaS平台架构师,8年Java NIO通信框架、平台中间件架构设计和开发经验,主导设计和开发的华为分布式服务框架已经在全球数十个国家成功商用。精通Netty、Mina、RPC框架、企业ESB总线、分布式服务框架等技术,《Netty权威指南》作者,公司总裁技术创新奖获得者。
微博、微信:Nettying
微信公众号:Netty之家
|
目錄:
|
第1 章 应用架构演进 ...................................................................................... 1
1.1 传统垂直应用架构 .................................................................................. 2
1.1.1 垂直应用架构介绍 ............................................................................. 2
1.1.2 垂直应用架构面临的挑战 .................................................................. 4
1.2 RPC 架构 ....................................................................................................... 6
1.2.1 RPC 框架原理 .................................................................................... 6
1.2.2 *简单的RPC 框架实现 .................................................................... 8
1.2.3 业界主流RPC 框架 .......................................................................... 14
1.2.4 RPC 框架面临的挑战 ....................................................................... 17
1.3 SOA 服务化架构 ......................................................................................... 18
1.3.1 面向服务设计的原则........................................................................ 18
1.3.2 服务治理 .......................................................................................... 19
1.4 微服务架构 .................................................................................................. 21
1.4.1 什么是微服务 ................................................................................... 21
1.4.2 微服务架构对比SOA ....................................................................... 22
1.5 总结 ............................................................................................................. 23
第2 章 分布式服务框架入门 .................................................................................... 25
2.1 分布式服务框架诞生背景 ........................................................................... 26
2.1.1 应用从集中式走向分布式 ................................................................ 26?
2.1.2 亟需服务治理 ................................................................................... 28
2.2 业界分布式服务框架介绍 ........................................................................... 29
2.2.1 阿里Dubbo ....................................................................................... 30
2.2.2 **HSF .......................................................................................... 33
2.2.3 亚马逊Coral Service ........................................................................ 35
2.3 分布式服务框架设计 ................................................................................... 36
2.3.1 架构原理 .......................................................................................... 36
2.3.2 功能特性 .......................................................................................... 37
2.3.3 性能特性 .......................................................................................... 39
2.3.4 可靠性 .............................................................................................. 39
2.3.5 服务治理 .......................................................................................... 40
2.4 总结 ............................................................................................................. 41
第3 章 通信框架 ..................................................................................................... 42
3.1 关键技术点分析 ........................................................................................... 43
3.1.1 长连接还是短连接 ........................................................................... 43
3.1.2 BIO 还是NIO ................................................................................... 43
3.1.3 自研还是选择开源NIO 框架 ........................................................... 46
3.2 功能设计 ...................................................................................................... 47
3.2.1 服务端设计 ....................................................................................... 48
3.2.2 客户端设计 ....................................................................................... 50
3.3 可靠性设计 .................................................................................................. 53
3.3.1 链路有效性检
|
內容試閱:
|
8.2.2 异步服务调用
基于JDK的Future机制,可以非常方便地实现异步服务调用,JDK的Future接口定义如图8-5所示。
JDK原生的Future主要用于异步操作,它代表了异步操作的执行结果,用户可以通过调用它的get方法获取结果。如果当前操作没有执行完,get操作将阻塞调用线程。
在实际项目中,往往会扩展JDK的Future,提供Future-Listener机制,它支持主动获取和被动异步回调通知两种模式,适用于不同的业务场景。
以Netty的Future接口定义为例,新增了监听器管理接口,监听器主要用于异步通知回调。
异步服务调用的工作流程如下:
1) 消费者调用服务端发布的接口,接口调用由分布式服务框架包装成动态代理,发起远程服务调用。
2) 通信框架异步发送请求消息,如果没有发生IO异常,返回。
3) 请求消息发送成功后,IO线程构造Future对象,设置到RPC上下文中。
4) 用户线程通过RPC上下文获取Future对象。
5) 构造Listener对象,将其添加到Future中,用于服务端应答异步回调通知。
6) 用户线程返回,不阻塞等待应答。
7) 服务端返回应答消息,通信框架负责反序列化等。
8) IO线程将应答设置到Future对象的操作结果中。
9) Future对象扫描注册的监听器列表,循环调用监听器的operationComplete方法,将结果通知给监听器,监听器获取到结果之后,继续后续业务逻辑的执行,异步服务调用结束。
需要指出的是,还有另外一种异步服务调用形式,就是不添加Listener,用户连续发起N次服务调用,然后依次从RPC上下文中获取Future对象,*终再主动get结果,业务线程阻塞,相比于老的同步服务调用,它的阻塞时间更短,其工作原理如图8-8所示。
异步服务调用的代码示例如下:
xxxService1.xxxMethodReq;
Future f1 = RpcContext.getContext.getFuture;
xxxService2.xxxMethodReq;
Future f2 = RpcContext.getContext.getFuture;
Object xxResult1 = f1.get3000;
Object xxResult2 = f2.get3000; }
假如xxxService1和xxxService2发布成异步服务,则调用xxxMethod之后当前业务线程不阻塞,立即返回null。用户不能直接使用它的返回值,而是通过当前线程上下文RPCContext获取异步操作结果Future。获取到Future之后继续发起其他异步服务调用,然后获取另一个Future……*后,通过Future的get方法集中获取结果。无论有多少个Future,采用此种方式用户线程*长阻塞时间为耗时*长的Future,即T = Max tfuture1....N。如果采用同步服务调用,用户线程的阻塞时间T = tfuture1 + tfuture2 + ……+ tfutureN。
异步服务调用相比于同步服务调用有两个优点:
◎ 化串行为并行,提升服务调用效率,减少业务线程阻塞时间。
◎ 化同步为异步,避免业务线程阻塞。
由于每次服务调用都是同步阻塞,三个服务调用总耗时为T = T1 + T2 + T3。下面我们看下采用异步服务调用之后的优化效果。
采用异步服务调用模式,*后调用三个服务异步操作结果Future的get方法同步等待应答,它的总执行时间T = MaxT1, T2, T3,相比于同步服务调用,性能提升效果非常明显。
第二种基于Future-Listener的纯异步服务调用,它的代码示例如下:
xxxService1.xxxMethodReq;
Future f1 = RpcContext.getContext.getFuture;
Listener l = new xxxListener;
f1.addListenerl;
......后续代码省略 }
基于Future-Listener的异步服务调用相比于Future-get模式更好,但是在实际使用中有一定的局限性,具体的使用限制留给读者自己思考。
|
|