zoukankan      html  css  js  c++  java
  • Dubbox以及微服务

    Dubbox以及微服务

    zookeeper在Dubbo中扮演了一个什么角色,起到了什么作用?

    现在整体架构是如下图(假设服务消费者为订单服务,服务提供者为用户服务):

    这样会有什么问题呢?

    1. 当服务提供者增加节点时,需要修改配置文件

    当其中一个服务提供者宕机时,服务消费者不能及时感知到,还会往宕机的服务发送请求

    这个时候就得引入注册中心了

    注册中心

    Dubbo目前支持4种注册中心,(multicast zookeeper redis simple) 推荐使用Zookeeper注册中心,本文就讲一下用zookeeper实现服务注册和发现(敲黑板,又一种zookeeper的用处),大致流程如下

    现在我们来看Dubbo官网对Dubbo的介绍图,有没有和我们上面画的很相似

    节点角色说明

    调用关系说明

    1. 服务容器负责启动(上面例子为Spring容器),加载,运行服务提供者。
    2. 服务提供者在启动时,向注册中心注册自己提供的服务。
    3. 服务消费者在启动时,向注册中心订阅自己所需的服务。
    4. 注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。
    5. 服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。
    6. 服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。

    要使用注册中心,只需要将provider.xml和consumer.xml更改为如下

    如果zookeeper是一个集群,则多个地址之间用逗号分隔即可

    注册信息在zookeeper中如何保存?

    启动上面服务后,我们观察zookeeper的根节点多了一个dubbo节点及其他,图示如下

    最后一个节点中192.168.1.104是内网地址,你可以任务和上面配置的localhost一个效果,大家可以想一下我为什么把最后一个节点标成绿色的。没错,最后一个节点是临时节点,而其他节点是持久节点,这样,当服务宕机时,这个节点就会自动消失,不再提供服务,服务消费者也不会再请求。如果部署多个DemoService,则providers下面会有好几个节点,一个节点保存一个DemoService的服务地址

    其实一个zookeeper集群能被多个应用公用,如Storm集群和Dubbo配置的就是一个zookeeper集群,为什么呢?因为不同的框架会在zookeeper上建不同的节点,互不影响。如dubbo会创建一个/dubbo节点,storm会创建一个/storm节点,如图

    如何同样的方法调用由Dubbox集群提供那么就会需要提供负载均衡的机制。(注:zookeeper自己本身没有负载均衡功能,但是他的特性(可以通过心跳机制发现那些Dubbo服务器死机了,从而维护可调用列表)可以借助其他方法实现类似负载均衡的能力。比如dubbo消费者取得了服务器列表之后,会随机调用其中的一个。常用的负载均衡实现方式如下:

    轮询(Round Robin)

    轮询算法把每个请求轮流发送到每个服务器上。

    下图中,一共有6个客户端产生了6个请求,这6个请求按(1,2,3,4,5,6)的顺序发送。(1,3,5)的请求会被发送到服务器1,(2,4,6)的请求会被发送到服务器2.

    该算法比较适合每个服务器的性能差不多的场景,如果有性能存在差异的情况下,那么性能较差的服务器可能无法承担过大的负载

    加权轮询

    加权轮序是在轮询的基础上,根据服务器的性能差异,为服务器赋予一个的权值,性能高的服务器分配更高的权值。例如下图中,服务器1被赋予的权值为5,服务器2被赋予的权值为1,那么(1,2,3,4,5)请求会被发送到服务器1,(6)请求会被发送到服务器2。

    最少连接

    由于每个请求的连接时间不一样,使用轮询或者加权轮询算法的话,可能会让一台服务器当前连接数过大,而另一台服务器的连接过小,造成负载不平衡。

    例如下图中,(1, 3, 5) 请求会被发送到服务器 1,但是 (1, 3) 很快就断开连接,此时只有 (5) 请求连接服务器 1;(2, 4,6) 请求被发送到服务器 2,只有 (2) 的连接断开,此时 (6, 4) 请求连接服务器 2。该系统继续运行时,服务器 2 会承担过大的负载。

    最少连接算法就是将请求发送给当前最少连接数的服务器上。

    例如下图中,服务器 1 当前连接数最小,那么新到来的请求 6 就会被发送到服务器 1 上。

    加权最少连接

    在最少连接的基础上,根据服务器的性能为每台服务器分配权重,再根据权重计算出每台服务器能处理的连接数

    随机算法

    把请求随机发送到服务器上

    和轮询算法类似,该算法比较适合服务器性能差不多的场景

    源地址哈希法(IP Hash)

    源地址哈希通过对客户端IP计算哈希值之后,再对服务器数量取模的得到目标服务器的序号。

    可以保证同一IP的客户端的请求会转发到同一台服务器上,用来实现会话粘滞。

     

    Dubbo的整体架构如下:

     

     

     

     

     

     

     

    zhengti11

  • 相关阅读:
    mysql BETWEEN操作符 语法
    mysql IN操作符 语法
    mysql LIKE通配符 语法
    mysql TOP语句 语法
    mysql DELETE语句 语法
    mysql Update语句 语法
    mysql INSERT语句 语法
    mysql ORDER BY语句 语法
    mysql OR运算符 语法
    mysql AND运算符 语法
  • 原文地址:https://www.cnblogs.com/kexinxin/p/11595213.html
Copyright © 2011-2022 走看看