分布式或者说 SOA 分布式重要的就是面向服务,说简单的分布式就是咱们把整个系统拆分红不一样的服务而后将这些服务放在不一样的服务器上减轻单体服务的压力提升并发量和性能。好比电商系统能够简单地拆分红订单系统、商品系统、登陆系统等等。算法
咱们可使用 Dubbo做为分布式系统的桥梁,那么什么是 Dubbo 呢?服务器
Apache Dubbo (incubating) |ˈdʌbəʊ| 是一款高性能、轻量级的开源Java RPC 框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。简单来讲 Dubbo 是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。网络
下面咱们简单地来看一下 Dubbo 的架构,加深对 Dubbo 的理解。架构
下面咱们再来看看 Dubbo 的架构,咱们后面会使用 zookeeper 做为注册中心,这也是 Dubbo 官方推荐的一种方式。并发
上述节点简单说明:负载均衡
Provider 暴露服务的服务提供方框架
Consumer 调用远程服务的服务消费方分布式
Registry 服务注册与发现的注册中心ide
Monitor 统计服务的调用次数和调用时间的监控中心高并发
Container 服务运行容器
调用关系说明:
服务容器负责启动,加载,运行服务提供者。
服务提供者在启动时,向注册中心注册本身提供的服务。
服务消费者在启动时,向注册中心订阅本身所需的服务。
注册中心返回服务提供者地址列表给消费者,若是有变动,注册中心将基于长链接推送变动数据给消费者。
服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,若是调用失败,再选另外一台调用。
服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。
咱们在讲 Dubbo 的时候提到了 Dubbo 其实是一款 RPC 框架,那么RPC 到底是什么呢?相信看了下面我对 RPC 的介绍你就明白了!
RPC(Remote Procedure Call)—远程过程调用,它是一种经过网络从远程计算机程序上请求服务,而不须要了解底层网络技术的协议。好比两个不一样的服务A,B部署在两台不一样的机器上,那么服务 A 若是想要调用服务 B 中的某个方法该怎么办呢?使用 HTTP请求 固然能够,可是可能会比较慢并且一些优化作的并很差。 RPC 的出现就是为了解决这个问题。
若是你要开发分布式程序,你也能够直接基于 HTTP 接口进行通讯,可是为何要用 Dubbo呢?
我以为主要能够从 Dubbo 提供的下面四点特性来讲为何要用 Dubbo:
负载均衡——同一个服务部署在不一样的机器时该调用那一台机器上的服务
服务调用链路生成——服务之间互相是如何调用的
服务访问压力以及时长统计——当前系统的压力主要在哪里,如何来扩容和优化
服务降级——某个服务挂掉以后调用备用服务