coding是一种爱好,知识需要系统学习

看到小咪呢,就会很快乐

  博客园  :: 首页  ::  ::  ::  :: 管理
第1章 网络通信协议
1.1 文本协议与二进制协议
①文本协议:由一串ACSII字符组成的数据。
优点:容易理解,方便调试。
缺点:传输效率低(增加冗余字符用来分割);很难传输二进制文件如图片;解析复杂(需要字符串比较)。
②二进制协议:一串字节流,通常包括消息头(header)和消息体(body),消息头的长度固定,并且消息头包括了消息体的长度。
优点:传输高效(没有冗余字段);解析方便(固定长度,直接比较字节)。
缺点:定义严格(哪个位置是什么意义),场景单一,难理解(自然加密)。
 
 
第2章 服务访问
2.1 RPC、SOA和REST
WebService:服务器如何向客户端提供服务,常用的方法有如下三种:
①PRC:远程过程调用,面向方法。即像调用本地服务方法一样调用服务器的服务方法。
通常的实现有 XML-RPC , JSON-RPC,SOAP。
②SOA:面向服务的架构,面向消息。
③REST:Representational state transfer,表现层状态转换,面向资源。
REST不是一种协议,它是一种架构, 一种 Web Service 能够如果满足REST的几个条件, 通常就称这个系统是 Restful 的。
REST 的三个要素是:唯一的资源标识、简单的方法 (此处的方法是个抽象的概念)、一定的表达方式。
REST是以资源为中心,名词即资源的地址,动词即施加于名词上的一些有限操作,表达是对各种资源形态的抽象。
以HTTP为例, 名词即为URI(统一资源标识), 动词包括POST, GET, PUT, DELETE等(还有其它不常用的2个,所以 整个动词集合是有限的), 资源的形态(如text, html, image, pdf等)。
 
2.2 RPC与REST的区别
①RPC以动词为中心,而REST以名词为中心。
②RPC使用基于TCP的高性能二进制协议,与实现语言依赖和高耦合,而REST基于HTTP文本协议,跨平台跨语言。
③RPC传输高效,适合企业内部系统,而REST适合企业对外发布服务。
 
2.3 SOA与微服务的区别
 
 
第3章 Dubbo服务框架
3.1 Dubbo简介
dubbo:阿里开源的一个java高性能服务框架,服务发布与调用采用RPC,与Spring集成。
dubbox:当当网对dubbo的扩展,支持REST风格,支持Kryo和FST序列化实现,升级Spring至3.0。
Spring Cloud:基于Spring Boot,提供业界标准的一套微服务架构解决方案。比如:配置管理,服务发现,熔断,路由,微代理,控制总线,一次性token,全局琐,leader选举,分布式session,集群状态等。
 
dubbo与spring cloud的区别:
 
3.2 Dubbo架构组成
节点角色说明:
Provider:暴露服务的服务提供方。
Consumer: 调用远程服务的服务消费方。
Registry:服务注册与发现的注册中心。
Monitor: 统计服务的调用次调和调用时间的监控中心。
Container: 服务运行容器。
 
调用关系说明:
1、服务容器负责启动,加载,运行服务提供者。
2、服务提供者在启动时,向注册中心注册自己提供的服务。
3、服务消费者在启动时,向注册中心订阅自己所需的服务。
4、注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。
5、服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。
6、服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。
 
3.3 Dubbo特性
dubbo特性有:连通性、健壮性、伸缩性、升级性。
(1)连通性
注册中心:负责服务地址的注册与查找,相当于目录服务,服务提供者和消费者只在启动时与注册中心交互,注册中心不转发请求,压力较小。
监控中心:负责统计各服务调用次数,调用时间等,统计先在内存汇总后每分钟一次发送到监控中心服务器,并以报表展示。
服务提供者:向注册中心注册其提供的服务,并汇报调用时间到监控中心,此时间不包含网络开销。
服务消费者:向注册中心获取服务提供者地址列表,并根据负载算法直接调用提供者,同时汇报调用时间到监控中心,此时间包含网络开销。
注册中心,服务提供者,服务消费者三者之间均为长连接,监控中心除外。
注册中心通过长连接感知服务提供者的存在,服务提供者宕机,注册中心将立即推送事件通知消费者。
注册中心和监控中心全部宕机,不影响已运行的提供者和消费者,消费者在本地缓存了提供者列表。注册中心和监控中心都是可选的,服务消费者可以直连服务提供者。
 
(2)健壮性
监控中心宕掉不影响使用,只是丢失部分采样数据。
数据库宕掉后,注册中心仍能通过缓存提供服务列表查询,但不能注册新服务。
注册中心是对等集群,任意一台宕掉后,将自动切换到另一台。注册中心全部宕掉后,服务提供者和服务消费者仍能通过本地缓存通讯。
服务提供者无状态,任意一台宕掉后,不影响使用。服务提供者全部宕掉后,服务消费者应用将无法使用,并无限次重连等待服务提供者恢复。
 
(3)伸缩性
注册中心为对等集群,可动态增加机器部署实例,所有客户端将自动发现新的注册中心。
服务提供者无状态,可动态增加机器部署实例,注册中心将推送新的服务提供者信息给消费者。
 
(4)升级性
当服务集群规模进一步扩大,带动IT治理结构进一步升级,需要实现动态部署,进行流动计算,现有分布式服务架构不会带来阻力。
 
3.4 Dubbo调用方式
异步调用:dubbo基于NIO的非阻塞实现并行异步调用,客户端不需要启动多线程即可完成并行调用多个远程服务,相对多线程开销较小。
3.5 Dubbo注册中心
dubbo提供的注册中心有4种类型:
①Multicast注册中心
②Zookeeper注册中心
③Redis注册中心
④Simple注册中心
 
3.6 Dubbo远程通信协议
dubbo支持的远程通信协议如下:
①Mina
②Netty
③Grizzly
 
3.6 Dubbo远程调用协议
dubbo支持的远程调用协议如下:
①Dubbo协议
②Hessian协议
③HTTP协议
④RMI协议
⑤WebService协议
⑥Thrift协议
⑦Memcached协议
⑧Redis协议
 
3.7 Dubbo集群容错
集群容错:在集群调用失败时,Dubbo提供了多种容错方案如下:(默认为failover重试)
①Failover
失败自动切换,当出现失败,重试其它服务器。为默认容错方案。通常用于读操作,但重试会带来更长延迟。可通过retries=“2”来设置重试次数(不含第一次)。
Failfast
快速失败,只发起一次调用,失败立即报错。通常用于非幂等性的写操作,比如新增记录。
Failsafe
失败安全,出现异常时,直接忽略。通常用于写入审计日志等操作。
④Failback
失败自动恢复,后台记录失败请求,定时重发。通常用于消息通知操作。
⑤Forking
并行调用多个服务器,只要一个成功即返回。通常用于实时性要求较高的读操作,但需要浪费更多服务资源。可通过forks=“2”来设置最大并行数。
⑥Broadcast
广播调用所有提供者,逐个调用,任意一台报错则报错。(2.1.0开始支持)。通常用于通知所有提供者更新缓存或日志等本地资源信息。
 
3.8 Dubbo负载均衡
dubbo负载均衡策略有4种,分别如下:
①Random,随机,按权重设置随机概率。
在一个截面上碰撞的概率高,但调用量越大分布越均匀,而且按概率使用权重后也比较均匀,有利于动态调整提供者权重。
②RoundRobin,轮循,按公约后的权重设置轮循比率。
存在慢的提供者累积请求问题,比如:第二台机器很慢,但没挂,当请求调到第二台时就卡在那,久而久之,所有请求都卡在调到第二台上。
③LeastActive,最少活跃调用数,相同活跃数的随机,活跃数指调用前后计数差。
使慢的提供者收到更少请求,因为越慢的提供者的调用前后计数差会越大。
④ConsistentHash,一致性Hash,相同参数的请求总是发到同一提供者。
当某一台提供者挂时,原本发往该提供者的请求,基于虚拟节点,平摊到其它提供者,不会引起剧烈变动。
 
3.8 Dubbo内核实现&SPI
dubbo采用微内核+插件体系,使得设计优雅,扩展性强。那所谓的微内核+插件体系是如何实现的呢!即我们定义了服务接口标准,让厂商去通过SPI机制实现,jdk通过ServiceLoader类实现spi机制的服务查找功能。
 
SPI:是一种服务发现机制,可以不需要修改代码,就能将接口从一种实现更改成另一种实现,满足可插拔原则,实现服务插件化。
当服务的提供者,提供了服务接口的一种实现之后,在jar包的META-INF/services/目录里同时创建一个以服务接口命名的文件。该文件内容就是实现该服务接口的具体实现类。而当外部程序装配这个模块的时候,就能通过该jar包META-INF/services/里的配置文件找到具体的实现类名,并装载实例化,完成模块的注入。 基于这样一个约定就能很好的找到服务接口的实现类,而不需要再代码里指定。jdk提供服务实现查找的一个工具类:java.util.ServiceLoader。
例如:(该文件内容仅有一行文本:com.ywsc.fenfenzhong.spi.learn.FileSearch)
 
posted on 2018-03-17 10:05  fhwup  阅读(158)  评论(0编辑  收藏  举报