美文网首页
(28)项目概述及构建(LoadBalanceAgent部分)-

(28)项目概述及构建(LoadBalanceAgent部分)-

作者: 刘丹冰Aceld | 来源:发表于2019-10-23 09:39 被阅读0次

    【Lars教程目录】

    Lars源代码
    https://github.com/aceld/Lars


    【Lars系统概述】
    第1章-概述
    第2章-项目目录构建


    【Lars系统之Reactor模型服务器框架模块】
    第1章-项目结构与V0.1雏形
    第2章-内存管理与Buffer封装
    第3章-事件触发EventLoop
    第4章-链接与消息封装
    第5章-Client客户端模型
    第6章-连接管理及限制
    第7章-消息业务路由分发机制
    第8章-链接创建/销毁Hook机制
    第9章-消息任务队列与线程池
    第10章-配置文件读写功能
    第11章-udp服务与客户端
    第12章-数据传输协议protocol buffer
    第13章-QPS性能测试
    第14章-异步消息任务机制
    第15章-链接属性设置功能


    【Lars系统之DNSService模块】
    第1章-Lars-dns简介
    第2章-数据库创建
    第3章-项目目录结构及环境构建
    第4章-Route结构的定义
    第5章-获取Route信息
    第6章-Route订阅模式
    第7章-Backend Thread实时监控


    【Lars系统之Report Service模块】
    第1章-项目概述-数据表及proto3协议定义
    第2章-获取report上报数据
    第3章-存储线程池及消息队列


    【Lars系统之LoadBalance Agent模块】
    第1章-项目概述及构建
    第2章-主模块业务结构搭建
    第3章-Report与Dns Client设计与实现
    第4章-负载均衡模块基础设计
    第5章-负载均衡获取Host主机信息API
    第6章-负载均衡上报Host主机信息API
    第7章-过期窗口清理与过载超时(V0.5)
    第8章-定期拉取最新路由信息(V0.6)
    第9章-负载均衡获取Route信息API(0.7)
    第10章-API初始化接口(V0.8)
    第11章-Lars Agent性能测试工具
    第12章- Lars启动工具脚本


    六、Lars-Load Balance Agent负载代理

    1) 简介

    ​ 一个服务称为一个模块,一个模块由modid+cmdid来标识
    modid+cmdid的组合表示一个远程服务,这个远程服务一般部署在多个节点上

    LB Agent以UDP方式为业务方提供:1、节点获取服务;2、节点调用结果上报服务

    1.1 业务1-节点获取服务:

    ​ 业务方每次要向远程服务发送消息时,先利用modid+cmdid去向LB Agent获取一个可用节点,然后向该节点发送消息,完成一次远程调用;具体获取modid+cmdid下的哪个节点是由LB Agent负责的

    1.2 业务2-节点调用结果上报服务

    ​ 对LB Agent节点的一次远程调用后,调用结果会汇报给LB Agent,以便LB Agent根据自身的LB算法来感知远程服务节点的状态是空闲还是过载,进而控制节点获取时的节点调度.

    4-Lars-agent.png

    LB Agent拥有5个线程,一个LB算法:

    UDP Server服务,并运行LB算法,对业务提供节点获取和节点调用结果上报服务;为了增大系统吞吐量,使用3个UDP Server服务互相独立运行LB算法:modid+cmdid % 3 = i的那些模块的服务与调度,由第i+1个UDP Server线程负责

    Dns Service Client:是dnsserver的客户端线程,负责根据需要,向dnsserver获取一个模块的节点集合(或称为获取路由);UDP Server会按需向此线程的MQ写入获取路由请求,DSS Client将MQ到来的请求转发到dnsserver,之后将dnsserver返回的路由信息更新到对应的UDP Server线程维护的路由信息中

    Report Service Client:是reporter的客户端线程,负责将每个模块下所有节点在一段时间内的调用结果、过载情况上报到reporter Service端,便于观察情况、做报警;本身消费MQ数据,UDP Server会按需向MQ写入上报状态请求。

    2) 构建Lars-Agent项目

    2.1 构建目录结构

    依次创建如下目录:

    Lars/lars_loadbalance_agent

    lars_loadbalance_agent/
    ├── bin/
    ├── conf/
    │   └── lars_lb_agent.conf
    ├── include/
    ├── Makefile
    └── src/
    

    其中Makefile如下:

    TARGET= bin/lars_lb_agent
    CXX=g++
    CFLAGS=-g -O2 -Wall -Wno-deprecated
    
    BASE=../base
    BASE_H=$(BASE)/include
    
    PROTO = $(BASE)/proto
    PROTO_H = $(BASE)/proto
    
    LARS_REACTOR=../lars_reactor
    LARS_REACTOR_H =$(LARS_REACTOR)/include
    LARS_REACTOR_LIB=$(LARS_REACTOR)/lib  -llreactor
    
    MYSQL=$(BASE)/mysql-connector-c
    MYSQL_H=$(MYSQL)/include
    MYSQL_LIB=$(MYSQL)/lib/libmysqlclient.a
    
    OTHER_LIB = -lpthread -ldl -lprotobuf
    SRC= ./src
    INC= -I./include -I$(BASE_H) -I$(LARS_REACTOR_H) -I$(MYSQL_H) -I$(PROTO_H)
    
    LIB= $(MYSQL_LIB) -L$(LARS_REACTOR_LIB) $(OTHER_LIB) 
    
    
    OBJS = $(addsuffix .o, $(basename $(wildcard $(SRC)/*.cpp)))
    OBJS += $(PROTO)/lars.pb.o
    
    $(TARGET): $(OBJS)
            mkdir -p bin
            $(CXX) $(CFLAGS) -o $(TARGET) $(OBJS) $(INC) $(LIB)
    
    %.o: %.cpp
            $(CXX) $(CFLAGS) -c -o $@ $< $(INC) 
    
    .PHONY: clean
    
    clean:
            -rm -f src/*.o  $(PROTO)/lars.pb.o $(TARGET)
    

    ​ 实际上reporter、dns相似。

    conf/lars_lb_agent.conf

    [reporter]
    ip = 127.0.0.1
    port = 7779
    
    [dnsserver]
    ip = 127.0.0.1
    port = 7778
    

    ​ 目前的基本配置文件,因为loadbalance_agent是充当reporter和dnsserver的客户端,所以需要知道对应的reporter和dnsserver的ip和port信息。


    关于作者:

    作者:Aceld(刘丹冰)

    mail: danbing.at@gmail.com
    github: https://github.com/aceld
    原创书籍gitbook: http://legacy.gitbook.com/@aceld

    原创声明:未经作者允许请勿转载, 如果转载请注明出处

    相关文章

      网友评论

          本文标题:(28)项目概述及构建(LoadBalanceAgent部分)-

          本文链接:https://www.haomeiwen.com/subject/ybehvctx.html