Lars 基于 C++ 负载均衡远程服务器调度系统

程序名称:Lars

授权协议: MIT

操作系统: Linux

开发语言: C/C++

Lars 介绍

( L oad balance A nd R emote service schedule S ystem)

一、系统开发环境:

Linux : Ubuntu18.04

protobuf : libprotoc 3.6.1版本及以上

mysql: mysql Ver 14.14 Distrib 5.7.27 版本及以上

g++: (Ubuntu 7.4.0-1ubuntu1~18.04.1) 7.4.0 版本及以上

二、开发技术文档及教程

Lars详细教程

PC端文档

《Lars-基于C++负载均衡远程服务器调度系统教程》

移动端文档

三、概述:

Lars 是一个简单、易用、高性能的服务间远程调用管理、调度、负载均衡系统。

1) 优势

  1. 性能强悍

集群支持千万并发链接,满足用户的海量业务访问需求。

  1. 高可用

采用集群化部署,支持多可用区的容灾,无缝实时切换。

  1. 灵活扩展

自动分发,与弹性伸缩无缝集成,灵活扩展用户用于的对外服务能力。

  1. 简单易用

快速部署、实时生效,支持多种协议,多种调度算法,用户可以高效的管理和调整服务分发策略等。

2) 应用场景

(1)、大型门户网站

​ 针对大型门户网站访问量高的特点,通过弹性负载均衡将用户的访问流量均匀的分发到多个后端云服务器上,确保业务快速平稳的运行

  • 灵活扩展

可根据实际的用户访问量,自动扩展负载分发能力

  • 高性能

集群支持高并发连接,满足海量访问量诉求

(2)、跨可用区同城容灾

​ 弹性负载均衡可将流量跨可用区进行分发,建立实时的同城容灾机制,满足银行贸易等企业对系统的高可用性要求。

  • 灵活扩展

可根据实际的用户访问量,自动扩展负载分发能力

  • 同城容灾

支持跨可用区的双活容灾,实现无缝实时切换

(3)、电商抢购

​ 电商业务呈现出较强的潮汐效应。Lars通过和弹性伸缩等服务的无缝集成,自动创建后端云服务器,将流量自动分发到新的云服务器,缓解了促销高峰时期的系统压力。

  • 弹性伸缩

根据业务流量实时创建或移除云服务器

  • 高可用

通过健康检查快速屏蔽异常云服务器,确保业务高可用

  • 高性能

集群支持高并发连接,满足海量访问量诉求

3) Lars系统总体架构

​ 对于一个部门的后台,为增强灵活性,一个服务可以被抽象为命令字:modid+cmdid的组合,称为 一个模块
,而这个服务往往有多个服务节点,其所有服务节点的地址集合被称为这个模块下的 路由 ,节点地址简称为节点

  • modid:标识业务的大类,如:“直播列表相关”

  • cmdid:标识具体服务内容,如:“批量获取直播列表”

​ 业务代码利用modid,cmdid,就可以调用对应的远程服务一个Lars系统包含一个DNSService,一个Report
Service,以及部署于每个服务器的LoadBalance Agent,业务代码通过API与Lars系统进行交互

API
:根据自身需要的modid,cmdid,向Lars系统获取节点、汇报节点调用结果;提供C++、Golang(开发中…)、Python(开发中…)接口

LoadBalance Agent :运行于每个服务器上,负责为此服务器上的业务提供节点获取、节点状态汇报、路由管理、负载调度等核心功能

DNSService : 运行于一台服务器上(也可以用LVS部署多实例防单点),负责modid,cmdid到节点路由的转换

Report Service : 运行于DNSService同机服务器上,负责收集各modid,cmdid下各节点调用状况,可用于观察、报警

modid,cmdid数据由Mysql管理,具体SQL脚本在common/sql路径下
至于modid,cmdid的注册、删除可以利用Web端操作MySQL。

如图,每个服务器(虚线)部署了一台LoadBalance Agent,以及多个业务服务

  1. 开发者在Web端注册、删除、修改modid,cmdid的路由信息,信息被写入到MySQL数据库;
  2. 服务器上每个业务biz都把持着自己需要通信的远程服务标识modid+cmdid,每个biz都向本机LoadBalance Agent获取远程节点,进而可以和远程目标服务通信,此外业务模块会汇报本次的节点调用结果给LoadBalance Agent;
  3. LoadBalance Agent负责路由管理、负载均衡等核心任务,并周期性向DNSService获取最新的路由信息,周期性把各modid,cmdid的各节点一段时间内的调用结果传给Report Service
  4. DNSService监控MySQL,周期性将最新路由信息加载出来;
  5. Report Service将各modid,cmdid的各节点一段时间内的调用结果写回到MySQL,方便Web端查看、报警。

四、快速开始

(1) 编译及安装

代码下载

    git clone https://github.com/aceld/Lars.git

编译

    cd ./Lars
    make

(2) 数据库配置

创建表

    cd ./Lars/base/sql


进入`mysql`,导入表`lars_dns.sql`文件


    mysql -u root -p
    #输入密码


mysql> source ./lars_dns.sql

(3) 各子系统配置文档

lars reporter

./Lars/lars_reporter/conf/lars_reporter.conf

[reactor]
maxConn = 1024
threadNum = 5
ip = 127.0.0.1
port = 7779

[mysql]
db_host = 127.0.0.1
db_port = 3306
db_user = root
db_passwd = **Your PassWord**
db_name = lars_dns

[repoter]
db_thread_cnt = 3

lars dns

./Lars/lars_dns/conf/lars_dns.conf

[reactor]
maxConn = 1024
threadNum = 5
ip = 127.0.0.1
port = 7778

[mysql]
db_host = 127.0.0.1
db_port = 3306
db_user = root
db_passwd = **Your PassWord**
db_name = lars_dns

lars LoadBalance Agent

./Lars/lars_loadbalance_agent/conf/lars_lb_agent.conf

[reporter]
ip = 127.0.0.1
port = 7779

[dnsserver]
ip = 127.0.0.1
port = 7778

[loadbalance]

;经过若干次获取请求host节点后,试探选择一次overload过载节点
probe_num=10

;初始化host_info主机信息访问成功的个数,防止刚启动时少量失败就认为过载
init_succ_cnt=180

;当idle节点切换至over_load时的初始化失败次数,主要为了累计一定成功次数才能切换会idle
init_err_cnt=5

;当idle节点失败率高于此值,节点变overload状态
err_rate=0.1

;当overload节点成功率高于此值,节点变成idle状态
succ_rate=0.5

;当idle节点连续失败次数超过此值,节点变成overload状态
contin_err_limit=15

;当overload节点连续成功次数超过此值, 节点变成idle状态
contin_succ_limit=15

;整个窗口的真实失败率阈值
window_err_rate=0.7

;对于某个modid/cmdid下的某个idle状态的host,需要清理一次负载信息的周期
idle_timeout=15

;对于某个modid/cmdid/下的某个overload状态的host,在过载队列等待的最大时间
overload_timeout=15

;对于每个NEW状态的modid/cmdid,多久更新一下本地路由,秒
update_timeout=15

(4)启动

启动 lars reporter serivce

    cd ./Lars
    ./run_lars reporter

启动 lars dns service

    cd ./Lars
    ./run_lars dns

启动 lars lbagent service

    cd ./Lars
    ./run_lars lbagent

启动 lars web service

    cd ./Lars
    ./run_lars web

(5) Web管理端操作

打开浏览器,输入web 服务的ip地址+端口号

配置主机

查看所有主机配置

(6) 模拟效果测试

启动模拟器测试

    cd ./Lars
    ./run_lars test simulator 1 1

更多测试工具

    cd ./Lars
    ./run_lars help


=======启动子系统==========
Usage ./run_lars [reporter|dns|lbagent|web|test]

=======测试工具============
Usage ./run_lars test gethost ModID CmdID
Usage ./run_lars test getroute ModID CmdID
Usage ./run_lars test report ModID CmdID IP Port 0|1  --- 0:SUCC, 1:OVERLOAD
Usage ./run_lars test simulator ModID CmdID [errRate(0-10)] [queryCnt(0-999999)]
Usage ./run_lars test qps ThreadNum
Usage ./run_lars test example ModID CmdID

(7)Web查看主机调用状态

五、Lars QPS性能测试

主机1

CPU个数:2个 , 内存: 2GB , 系统:Ubuntu18.04虚拟机

线程数 QPS
1 0.5w/s
2 2.2w/s
10 5.5w/s
100 5.3w/s

主机2

CPU个数: 24个 , 内存:128GB, 系统: 云主机

线程数 QPS
1 8.36w/s
3 28.06w/s
5 55.18w/s
8 56.74w/s

开发者

Lars 官网

https://gitee.com/Aceld/Lars

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


memcached-session-manager 将session存储到memchached实现方案时。他主要功能是修改tomcat的session存储机制,使之能够把session序列化存放到memcached中。
Tomcat Native 这个项目可以让 Tomcat 使用 Apache 的 apr 包来处理包括文件和网络IO操作,以提升性能。
EasyTomcat 是一个用来帮助简化 Tomcat 和MySQL 管理的系统,你可以启动、停止和配置 Tomcat和MySQL
riak-session-manager 是使用 Riak 来存储Tomcat session 信息的项目。 配置方法:
tomcat-redis-session-manager 是一个用来将 Tomcat 的 Session 数据存储在 Redis 库中的项目。
这是一款在 Oracle 的 JDeveloper 开发环境下管理Tomcat 的插件,如下图所示:
扩展Tomcat 6.x,使用redis存放session信息!是一个Eclipse项目,最好用EGit来Clone(因为里面有个中文文件名的说明文件).
dhcpcd 是一个兼容 RFC2131的DHCP客户端程序,支持DHCP的全部功能并且体积非常小,只有差不多 46k。
phpDHCPAdmin 是一个基于 Web 的动态主机配置协议(DHCP Daemon)的管理工具,可单独设置组、用户级别;PXE、多子网;空间租赁管理功能。可对数据进行可视化展示、分类。适合大规模的 dhcpd 环境管理。
JDHCP 项目的目的是为 Java 应用增加简单操作 DHCP 协议的方法,DHCP是动态主机配置协议的简称。使用这个API可以轻松的发送、接收和解析DHCP消息,可用于编写DHCP的客户端、服务器端应用。
DHCP服务器为客户端计算机分配IP地址,通常应用在企业网络中以减小配置成本,所有客户端的IP地址都保存在服务器端。
dhcp4java是一个用于操作DHCP信息包的纯Java类库。适用于DHCP服务器, DHCP客户端或DHCP转发。
dhcp-forwarder 是一个 DHCP 中继代理,它将在不同的子网广播域中转发 DHCP 广播信息。
不用看都知道是一个开源的 DHCP 服务器。 Open DHCP Server is a multi-subnet DHCP server. It supports both dynamic and
GAdmin-ProFTPD是一个基于GTK的可视化DHCP服务端管理工具。 更多的屏幕截图请看:http://mange.dynalias.org/linux/gadmin-dhcpd/screenshots/
Dual DHCP DNS Server 是一个提供 DHCP 和 DNS 服务的服务器软件,每一个功能都可以单独启用或者关闭。
Dhcpy6d 是一个开源的 DHCPv6 的服务器软件,相当于为 IPv6 客户端提供 DHCP 协议。
DHCP as a filesystem,要求 FUSE 的支持,使用 Go 语言开发。 安装: GOFUSE=github.com/hanwen/go-fuse
简易图床支持 HDFS 本地存储远端存储等。 Status Esay Graph bed Use HDFS Use Qiniu Use upyun Use Local
一个使用python开发的简单好用的 PXE (DHCP/TFTP/HTTP) 服务器,同时支持netboot、dhcp-