Lars

负载均衡远程服务器调度系统
授权协议 MIT
开发语言 C/C++
所属分类 服务器软件、 集群/负载均衡
软件类型 开源软件
地区 国产
投 递 者 劳烨
操作系统 Linux
开源组织
适用人群 未知
 软件概览

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

(Load balance And Remote service schedule System)


一、系统开发环境:

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. 性能强悍

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

  2. 高可用

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

  3. 灵活扩展

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

  4. 简单易用

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

2) 应用场景

(1)、大型门户网站

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

优势

  • 灵活扩展

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

  • 高性能

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

Lars-1.png

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

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

优势

  • 灵活扩展

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

  • 同城容灾

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

Lars-场景2.png

(3)、电商抢购

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

优势

  • 弹性伸缩

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

  • 高可用

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

  • 高性能

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

Lars-场景3.png

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。

1-Lars-总体架构设计.png

如图,每个服务器(虚线)部署了一台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地址+端口号 lars_web_login.png

配置主机 lars_web_add_host.png

查看所有主机配置 lars_web_all_hosts.png

(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_web_status.png

五、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是一个适用于高维数据的回归算法。 优点: 特别适合于特征维度n 远高于样本数m的情况。 算法的最坏计算复杂度和最小二乘法类似,但是其计算速度几乎和前向选择算法一样 可以产生分段线性结果的完整路径,这在模型的交叉验证中极为有用 缺点: 由于LARS的迭代方向是根据目标的残差而定,所以该算法对样本的噪声极为敏感。

  • 我的第一篇博客哟(沧海一声笑) 基础知识传送门:https://zhuanlan.zhihu.com/p/46999826 参考博文传送门:http://blog.sina.com.cn/s/blog_4a03c0100101b3c3.html。 我的工作:对代码进行了一些些修改,修正了错误部分,以及去掉了无用的部分。 本来Matlab就不是很熟,算法更是一头雾水(嘤~)花掉了姐妹儿两天的时间,肩

  • 为什么深度学习很慢? 如果我们利用并行计算,怎样才能完美的利用大量的processor? 为什么large batch size会引起精度降低? 新优化器 参考: 快速神经网络的训练算法 --UC Berkeley博士尤洋 本片文章介绍的两种算法不仅可以优化并行计算,在普通硬件环境中运行也是有效的。算法是由UC Berkeley博士尤洋开发。在固定精度的情况下,新算法可以更快的达到要求,在固定训练

  • 快速神经网络的训练算法 --UC Berkeley博士尤洋 快速神经网络的训练算法 --UC Berkeley博士尤洋 为什么深度学习很慢? 如果我们利用并行计算,怎样才能完美的利用大量的processor? 为什么large batch size会引起精度降低? 新优化器 参考: 快速神经网络的训练算法 --UC Berkeley博士尤洋 本片文章介绍的两种算法不仅可以优化并行计算,在普通硬件环

  • 【Lars教程目录】 二、项目目录构建 ​ 首先在一切开始之前,我们应该将最基本的项目架构创建出来。 1)创建Lars代码总目录 $cd ~/ $mkdir Lars 创建一个模块Lars_reactor lars_reactor是一个网络IO库,是我们要实现的,我们就先以它作为第一个子项目进行构建。 $mkdir lars_reactor 然后在lars_reactor模块下创建一系列文件,如下

  • 【Lars教程目录】 7) 负载均衡上报Host主机信息API(V0.4) 7.1 proto通信协议定义 syntax = "proto3"; package lars; /* Lars系统的消息ID */ enum MessageId { ID_UNKNOW = 0; //proto3 enum第一个属性必须是0,用来占位 ID_GetRouteRequest = 1; //向DNS请求Rou

  • 最近在学习Lars这个算法,先整理些资料,供以后参考学习,然后做出总结! http://cos.name/cn/topic/101533 http://cos.name/2011/04/an-introduction-to-lars/ http://www.douban.com/note/260105878/ http://www.mathworks.cn/cn/help/stats/lasso-

  • lars(lars) lars()所属R语言包:lars                                          Fits Least Angle Regression, Lasso and Infinitesimal Forward Stagewise regression models                                          

  • 例子 LassoLars 是一个使用 LARS 算法的 lasso 模型,不同于基于坐标下降法的实现,它可以得到一个精确解,也就是一个关于自身参数标准化后的一个分段线性解。 >>> from sklearn import linear_model >>> reg = linear_model.LassoLars(alpha=.1) >>> reg.fit([[0, 0], [1, 1]], [0,

  • Package ‘lars’ February 20, 2015 Type Package Version 1.2 Date 2013-04-23 Title Least Angle Regression, Lasso and Forward Stagewise Author Trevor Hastie and Brad Efron Maintainer Trevor Hastie Descrip

  • lars算法R语言操作指南.pdf Package ‘lars’ February 20, 2015 Type Package Version 1.2 Date 2013-04-23 Title Least Angle Regression, Lasso and Forward Stagewise Author Trevor Hastie and Brad Efron Maintainer Tre

 相关资料
  • 用于设置容器内pod的访问方式。 服务 服务定义了访问后端Pod的访问方式。 路由 路由是允许访问集群内路由的规则集合。

  • 负载均衡即服务(Load Balance as a Service,LBaaS)是一项网络高级服务。 顾名思义,它允许租户动态的在自己的网络创建一个负载均衡设备。 负载均衡,可以说是分布式系统中比较基础的组件,它接收前端过来的请求,然后将请求按照某种均衡的策略转发给后端资源池中的某个处理单元,以完成处理。进而可以实现高可用性和横向的扩展性。 OpenStack Neutron 通过高级服务扩展的形

  • Kubernetes在设计之初就充分考虑了针对容器的服务发现与负载均衡机制,提供了Service资源,并通过kube-proxy配合cloud provider来适应不同的应用场景。随着kubernetes用户的激增,用户场景的不断丰富,又产生了一些新的负载均衡机制。目前,kubernetes中的负载均衡大致可以分为以下几种机制,每种机制都有其特定的应用场景: Service:直接用Service

  • 从我们的应用程序创建和运行开始,我们就需要一种发送信息到外边的方法。如果我们当前运行多个 app, 它们也需要一种方法来找到彼此。 我们可以通过域名系统(DNS)使用Mesos-DNS作为服务发现。Mesos-DNS 会给正运行在 Mesos 上的每个应用程序生成一个主机名, 在当前的机器上把这些名字转化成IP地址和端口。如果通过多个 framework(不只是 Marathon)发布应用程序,M

  • 负载均衡(Load balancing)是一种计算机网络技术,用来在多个计算机(计算机集群)、网络连接、CPU、磁盘驱动器或其他资源中分配负载,以达到最佳化资源使用、最大化吞吐率、最小化响应时间、同时避免过载的目的。 使用带有负载均衡的多个服务器组件,取代单一的组件,可以通过冗余提高可靠性。负载均衡服务通常是由专用软体和硬件来完成。 负载均衡最重要的一个应用是利用多台服务器提供单一服务,这种方案有

  • 负载均衡包括负载均衡实例、访问控制及证书。 实例 负载均衡实例是一个运行的负载均衡服务,通过设置的虚拟IP接收流量并将其转发分配给后端服务器。 访问控制 访问控制用于设置访问负载均衡的IP白名单或IP黑名单。 证书 当在负载均衡实例上配置HTTPS监听转发来自HTTPS协议的请求时,需要配置证书。

  • 一个简单的负载均衡的示例,把www.domain.com均衡到本机不同的端口,也可以改为均衡到不同的地址上。> http { : upstream myproject { : server 127.0.0.1:8000 weight=3; : server 127.0.0.1:8001; : server 127.0.0.1:8002; : server 127.0.0.1:8003; : }

  • SOFARPC 提供多种负载均衡算法,目前支持以下五种: 类型 名称 描述 random 随机算法 默认负载均衡算法。 localPref 本地优先算法 优先发现是否本机发布了该服务,如果没有再采用随机算法。 roundRobin 轮询算法 方法级别的轮询,各个方法间各自轮询,互不影响。 consistentHash 一致性hash算法 同样的方法级别的请求会路由到同样的节点。 weightRou