Coder Social home page Coder Social logo

zhaoyaogit / easy-load-balancer Goto Github PK

View Code? Open in Web Editor NEW

This project forked from leechanx/easy-load-balancer

0.0 1.0 0.0 16.67 MB

Easy-Load-Balancer(ELB)是一个易用、稳定、高性能的服务间远程调用的管理、调度、负载系统

License: MIT License

Makefile 0.85% C++ 41.40% Python 1.84% C 40.13% Pascal 0.23% Objective-C 15.39% TSQL 0.16%

easy-load-balancer's Introduction

Easy Load Balancer

ELB(Easy Load Balance)是一个简单、易用、高性能的服务间远程调用管理、调度、负载系统

此系统的闭源版本已经在我司300+台服务器、2000+个远程服务上自2017年4月稳定运行至今

PS: 本系统各组件的网络框架直接采用了我做的另一个项目:高性能C++多线程Reactor网络服务框架:Easy-Reactor,以顺便检验Easy-Reactor项目的性能和可用性。ELB系统开发完成后,事实证明系统性能还是很好的:-D (如:组件LB Agent QPS 50+W/s,组件dnsserver QPS 3线程时25+W/s、5线程时39+W/s,具体各组件的性能测试见各组件的README)

介绍

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

  • modid:标识业务的大类,如:“直播列表相关”
  • cmdid:标识具体服务内容,如:“批量获取直播列表”

业务代码利用modid,cmdid,就可以调用对应的远程服务

一个ELB系统包含一个dnsserver,一个reporter,以及部署于每个服务器的Lbagent,业务代码通过API与ELB系统进行交互

API :根据自身需要的modid,cmdid,向ELB系统获取节点、汇报节点调用结果;提供C++JavaPython接口

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

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

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

modid,cmdid数据由Mysql管理,具体SQL脚本在common/sql路径下 至于modid,cmdid的注册、删除可以利用Web端操作MySQL(但由于个人能力有限,Web没有写)

总体架构

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

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

各组件架构原理介绍

DNS Server: dnsserver readme

LB Agent(含过载发现、调度等负载均衡算法内容介绍): lb agent readme

Reporter: reporter readme

API: API readme

API缓存层: cache readme

TODO

  • LB算法对节的异构性考虑不够细致,值得优化
  • 增加更多语言API

easy-load-balancer's People

Contributors

leechanx avatar

Watchers

James Cloos avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.