LoadBalance 模块

一、概述

承担的需求(主要秘密)

同一个服务在多台机器上部署,负载均衡用来解决选取哪一个服务器的问题.

可能会修改的实现(次要秘密)

  • 负载均衡算法
  • 服务列表的维护
  • 服务的健康监测
  • 不同的注册中心

涉及的相关质量属性

  • R2 服务可靠性
  • R10 高峰吞吐量

设计概述

一个服务可能调用其他多个服务,而每个服务有多台实际的服务器.所以我们采用LoadBalancerClient,下简称Client,作为各个服务的门面,发起者可以直接调用Client.每一种服务对应一个LoadBalancer对象,提供对服务列表的初始化/选择/增加/删除等操作.

对于不同的负载均衡算法,封装在LoadBalanceStrategy中.对于不同的服务列表维护方法,比如读配置中的静态服务列表,或注册中心查询到的列表,通过UpdateStrategy封装.

角色

模块对外接口

  1. Object execute(Request request);

二、类的设计

2.1 类图

2.2 类描述

LoadBalancerClient类

类职责

本类是LoadBalancer模块的门面,提供execute方法来发起服务调用

类方法
  • public Object execute(Request request):
    • 职责:发起一次请求
    • 前置条件:配置正确,服务初始化成功
    • 后置条件:完成调用返回结果

Config类

类职责

负载均衡模块的配置,包括服务列表是否静态,是否启用ping检测服务健康,负载均衡算法,配置中心的信息等.

类属性
  • bool isStaticServer //server列表是否是静态的

  • bool ping //是否使用ping命令检测server状态

  • loadBalanceRuleClass //负载均衡的策略类

  • String registerServerType //注册中心的类型

  • String registerServerHost //注册中心的地址


ConfigBuilder类

类职责

因为Config类构造过程比较复杂,而且将来的配置项可能增多.因此使用专门的Builder来构造Config

类方法
  • ConfigBuilder staticServerList(bool)

  • ConfigBuilder ping(bool)

  • ConfigBuilder loadBalanceStrategy(Obj)

  • ConfigBuilder registerServer(String type,String host)

  • Config build()


LoadBalancer类

类职责

负责一个具体服务的负载均衡.包括挑选服务器,维护服务器列表等.

类方法
  • public Server selectServer(Requesst)
    • 职责:选择一个被调用的Server
    • 前置条件:配置正确,服务正常启动
    • 后置条件:无
  • public Object execute(Server)
    • 职责:对指定的Server执行调用
    • 前置条件: Server的信息正确
    • 后置条件:无
  • public void initServer()
    • 职责:初始化Server的列表
    • 前置条件:关于列表的配置正确
    • 后置条件:server列表被初始化
  • public void updateServer()
    • 职责:更新Server的列表
    • 前置条件:列表已被初始化
    • 后置条件:列表被更新

LoadBalanceStrategy类

类职责

负载均衡算法的策略接口,从Server列表中选出一个Server.

类方法
  • public Server choose(ServerList,Requesst)
    • 职责:从list中选一个server
    • 前置条件:List不为空
    • 后置条件:无

RandomStrategy类

类职责

负载均衡算法的策略接口的一种实现,采用随机法选取服务器,

类方法
  • public Server choose(ServerList,Requesst)
    • 职责:用随机法从List中选取一个Server
    • 前置条件:配置正确,服务正常启动
    • 后置条件:无

UpdateStrategy类

类职责

服务器列表的更新策略,负责服务器列表的增删.

类方法
  • public void update(ServerList)
    • 职责:对服务器列表进行增删
    • 前置条件:服务器列表需要发生变动
    • 后置条件:服务器列表变动

RegisterUpdateStrategy类

类职责

针对注册中心实现的更新策略,接收注册中心的通知,更新服务列表

类方法
  • public void update(ServerList)

    • 职责:对服务器列表进行增删
    • 前置条件:服务器列表需要发生变动
    • 后置条件:服务器列表变动
  • public void registerChange(ChangeEvent)

    • 职责:适配注册中心提供的接口,接收注册变动的通知
    • 前置条件:注册中心的服务列表发生变动
    • 后置条件:服务列表变动

Server类

类职责

VO类,记录Server的各类属性

类属性
  • public String serverId; //服务ID
  • public String serviceName; //服务名称
  • public String host; //服务地址
  • public int port; //服务端口

三、重要协作

顺序图

四、设计模式应用

策略模式

负载均衡模块有两处使用了策略模式.分别是负载均衡的策略和服务列表更新的策略.

负载均衡策略

负载均衡有多种算法,为了方便算法的替换,采用LoadBalanceStrategy封装具体算法.

服务更新策略

服务列表可以来源于注册中心或手动配置.使用注册中心这意味着不需要自己去检测其状态,只需要监听即可.手动配置时需要定期ping服务器已确定其状态.这里采用不同的UpdateStrategy封装.

适配器模式

对于面向注册中心的服务更新,需要监听Register发来的变化.这里让RegisterUpdateStrategy适配RegisterObserver接口,以监听变化并完成更新.

Builder

负载均衡的Config类是复杂的,并且其数据可能来源于配置文件,硬编码或者网络,因此使用Builder来处理其构造过程.

results matching ""

    No results matching ""