分布式服务--dubbo学习二

原创 2016年05月31日 13:09:46

Dubbo的工作原理

1、轻量级java容器通过main函数初始化Spring上下文,根据服务提供者配置的XML文件将服务按照指定协议发布,完成服务的初始化工作。

2、服务提供者根据配置的服务注册中心地址链接服务注册中心,将服务提供者信息发布到服务注册中心。

3、消费者分局消费者XML配置文件的服务引用信息,链接注册中心,获取指定服务的地址等路由信息。

4、服务注册中心根据服务订阅关系,动态地指向消费者推送服务地址信息。

5、消费者调用远程服务时,根据路由策略,从本地的服务提供者地址列表中选择一个服务提供者,然后根据协议类型建立链路,跨进程调用服务提供者。


Dubbo架构的主要质量属性

1、连通性

①注册中心负责服务地址的注册与查找,相当于目录服务,服务提供者和消费者只在启动时与注册中心交互,注册中心不转发请求,压力较小。

②监控中心服务统计各服务调用次数、调用时间等,统计先在内存汇总后每一分钟发送到监控中心服务器,并以报表展示。

③服务消费者向注册中心获取服务提供者地址列表,并根据负载算法直接调用提供者 ,同事汇报调用时间到监控中心。

④注册中心、服务提供者、服务消费者三者之间均为长连接,监控中心除外。

⑤注册中心通过长连接感知服务提供者的存在,服务提供者宕机,注册中心将立即推送事件通知消费者。

⑥注册中心和监控中心全部宕机,不影响已运行的提供者和消费者,消费者在本地缓存了提供者列表。

⑦注册中心和监控中心都是可选的,服务消费者可以直连服务提供者。

2、健壮性

①监控中心宕机不影响使用,只是丢失部分采样数据。

②数据库宕机后,注册中心仍能通过缓存提供服务列表查询,但不能注册新的服务。

③注册中心对等集群,任意一台宕机后,将自动切换到另一台。

④注册中心全部宕机后,服务提供者和服务消费者仍能通过本地缓存通信。

⑥服务提供者无状态,任意一台宕机后不影响使用。

⑦服务提供者全部宕机后,服务消费者应用将无法使用,并无限次重连等待服务提供者恢复。

3、伸缩性

4、扩展性


绝大多数的分布式服务框架都推荐使用长连接进行内部通信,问。

1、相比于短连接,长连接更节省能源。如果发送一条消息就要创建链路、发起握手认证、关闭链路释放资源,会损耗大量的系统资源。长连接只在首次创建时或者链路断连重连才创建链路,链路创建成功之后服务提供者和服务消费者会通过业务消息和心跳维系链路,实现多消息服用同一个链路节省资源。

2、远程通信是常态,调用时延是关键指标:服务化之后,本地API调用变成了远程服务调用,大量本地方法演化成了跨进程通信,网络时延成为关键指标之一。相比于一次简单地服务调用,链路的重建通常耗时更多,这就会导致关键链路成的时延消耗远远大于服务调用本身的损耗,这对于大型的业务系统而言是无法接受的。


BIO与NIO

传统的BIO通信模型的服务端,通常由一个独立的Acceptor线程负责监听客户端的连接,它接收到客户端连接请求之后为每个客户端创建一个新的线程进行链路处理,处理完成之后,通过输出流返回应答给客户端,线程销毁,这就是典型的请求----应答模型。

此模型最大的问题就是缺乏弹性伸缩能力,当客户端并发访问量增加后,服务端的线程个数和客户端并发访问数成1:1的正比关系,由于线程是JAVA虚拟机非常宝贵的系统资源,当线程数膨胀之后,系统地性能将急剧下降,随着并发访问量的继续增大,系统会发生线程堆栈溢出、创建新线程失败等问题,并最终导致进程宕机或者僵死,不能对外提供服务。


NIO采用多路复用技术,一个多复用器Selector可以同时轮询多个Channel,由于JDK使用了epoll()代替传统的select实现,所以它并没有最大连接句柄1024/2048的限制。这也就意味着只需要一个县城负责Selector的轮询,就可以接入成千上万的客户端。

随着开源NIO框架的发展,越来越多的NIO框架。

比如Hadoop的RPC框架avro使用Netty作为底层通信框架,Storm也采用的是Netty。

Netty的优势:

①API使用简单,开发门槛低

②功能强大,预置了多种编码功能,支持多种主流协议

③定制能力强,可以通过与其他业界主流的NIO框架对比,Netty的性能最优。

④成熟、稳定、Netty修复了已经发现的所有JSK NIO BUG 业务开发人员不需要再为NIO的BUG而担心

⑤社区活跃、版本迭代周期短,发现的BUG可以被及时修复。同时,更多的新功能会加入




版权声明:本文为博主原创文章,未经博主允许不得转载。

dubbo 问题整理

1 面试题:Dubbo中zookeeper做注册中心,如果注册中心集群都挂掉,发布者和订阅者之间还能通信么? 可以的,启动dubbo时,消费者会从zk拉取注册的生产者的地址接口等数据,缓存在本地。每...
  • luwei42768
  • luwei42768
  • 2017年02月03日 15:48
  • 10357

分布式服务--dubbo学习一

Dubbo是阿里巴巴提供的开源的SOA服务化治理的技术框架,据说只是剖出来的一部分开源的,但一些基本的需求已经可以满足的,而且扩展性也非常好(至今没领悟到扩展性怎么做到的),通过spring bean...
  • ASAS1314
  • ASAS1314
  • 2016年05月26日 18:21
  • 364

Dubbo分布式服务框架入门(附工程)

本文介绍了dubbo的一些概念,并对zookeeper、dubbo-admin、提供者、消费者的搭建进行了详细的讲解,且附有工程源码...
  • u013142781
  • u013142781
  • 2015年12月23日 15:49
  • 27252

Dubbo分布式服务框架入门

原:http://www.importnew.com/19732.html 要想了解Dubbo是什么,我们不防先了解它有什么用。 使用场景:比如我想开发一个网上商城项目,这个网上商城呢,比较复杂,...
  • u014695188
  • u014695188
  • 2016年05月26日 15:13
  • 247

Dubbo源码学习之知识点分析

最近听到有朋友公司用这个Dubbo,正好想了解一下源码。经过一小段时间分析,发现知识点非常多,很有价值。包括:动态代理,spring整合,各种设计模式,线程池,锁,netty这样基于nio的tcp框架...
  • herriman
  • herriman
  • 2016年05月28日 15:37
  • 1348

Dubbo分布式服务治理(一)——Dubbo注册中心&&管理平台安装(Linux)

一、Dubbo介绍      Dubbo是阿里巴巴SOA服务化治理方案的核心框架,每天为2,000+个服务提供3,000,000,000+次访问量支持,并被广泛应用于阿里巴巴集团的各成员站点。 1...
  • Daybreak1209
  • Daybreak1209
  • 2016年06月21日 19:45
  • 1965

Dubbo分布式服务治理(二)——Dubbo服务运行方式&&监控中心安装(Linux)

一、Dubbo服务运行方式 1、使用servlet容器(tomcat、jetty)发布运行      Dubbo服务可将其发布到web容器中供,注册到ZK,传送消息通知调用;      这种方式...
  • Daybreak1209
  • Daybreak1209
  • 2016年06月21日 21:01
  • 1951

分布式服务Dubbo:服务降级

何为服务降级?为什么使用服务降级? 服务降级就是当服务响应超时或连接请求超时,不用继续等下去,而采用降级措施,意思就是返回一个planB,返回一个我们自己定义好的提示。 而之为什么要使用服务降级,这时...
  • u011320740
  • u011320740
  • 2017年12月29日 11:17
  • 109

Dubbo源码学习之知识点分析(续)

在上一篇里以文字为主,介绍了dubbo中的很多知识点,在本篇文章中,主要以代码为主,以一个同步请求直到收到返回值的代码分析,把整个的过程弄清楚。 代码只贴核心的语句,很容易追踪的,有些地方及时补充说...
  • herriman
  • herriman
  • 2016年05月30日 22:01
  • 1875

dubbo分布式服务

架构 (#) 节点角色说明: Provider: 暴露服务的服务提供方。 Consumer: 调用远程服务的服务消费方。 Registry: 服务注册与发...
  • liufangaliya
  • liufangaliya
  • 2016年08月10日 11:17
  • 224
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:分布式服务--dubbo学习二
举报原因:
原因补充:

(最多只允许输入30个字)