(1)Lars項目概述(Reactor部分)【Lars-基于C++負載均衡遠程服務(wù)器調(diào)度系統(tǒng)教程】

看云文檔地址:
https://www.kancloud.cn/aceld/lars


【Lars教程目錄】

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


【Lars系統(tǒng)概述】
第1章-概述
第2章-項目目錄構(gòu)建


【Lars系統(tǒng)之Reactor模型服務(wù)器框架模塊】
第1章-項目結(jié)構(gòu)與V0.1雛形
第2章-內(nèi)存管理與Buffer封裝
第3章-事件觸發(fā)EventLoop
第4章-鏈接與消息封裝
第5章-Client客戶端模型
第6章-連接管理及限制
第7章-消息業(yè)務(wù)路由分發(fā)機制
第8章-鏈接創(chuàng)建/銷毀Hook機制
第9章-消息任務(wù)隊列與線程池
第10章-配置文件讀寫功能
第11章-udp服務(wù)與客戶端
第12章-數(shù)據(jù)傳輸協(xié)議protocol buffer
第13章-QPS性能測試
第14章-異步消息任務(wù)機制
第15章-鏈接屬性設(shè)置功能


【Lars系統(tǒng)之DNSService模塊】
第1章-Lars-dns簡介
第2章-數(shù)據(jù)庫創(chuàng)建
第3章-項目目錄結(jié)構(gòu)及環(huán)境構(gòu)建
第4章-Route結(jié)構(gòu)的定義
第5章-獲取Route信息
第6章-Route訂閱模式
第7章-Backend Thread實時監(jiān)控


【Lars系統(tǒng)之Report Service模塊】
第1章-項目概述-數(shù)據(jù)表及proto3協(xié)議定義
第2章-獲取report上報數(shù)據(jù)
第3章-存儲線程池及消息隊列


【Lars系統(tǒng)之LoadBalance Agent模塊】
第1章-項目概述及構(gòu)建
第2章-主模塊業(yè)務(wù)結(jié)構(gòu)搭建
第3章-Report與Dns Client設(shè)計與實現(xiàn)
第4章-負載均衡模塊基礎(chǔ)設(shè)計
第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啟動工具腳本


1 Lars系統(tǒng)開發(fā)

(Load balance And Remote service schedule System)

系統(tǒng)開發(fā)環(huán)境:

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是一個簡單、易用、高性能的服務(wù)間遠程調(diào)用管理、調(diào)度、負載均衡系統(tǒng)。

1) 優(yōu)勢

  1. 性能強悍

    集群支持千萬并發(fā)鏈接,滿足用戶的海量業(yè)務(wù)訪問需求。

  2. 高可用

    采用集群化部署,支持多可用區(qū)的容災(zāi),無縫實時切換。

  3. 靈活擴展

    自動分發(fā),與彈性伸縮無縫集成,靈活擴展用戶用于的對外服務(wù)能力。

  4. 簡單易用

    快速部署、實時生效,支持多種協(xié)議,多種調(diào)度算法,用戶可以高效的管理和調(diào)整服務(wù)分發(fā)策略等。

2) 應(yīng)用場景

(1)、大型門戶網(wǎng)站

? 針對大型門戶網(wǎng)站訪問量高的特點,通過彈性負載均衡將用戶的訪問流量均勻的分發(fā)到多個后端云服務(wù)器上,確保業(yè)務(wù)快速平穩(wěn)的運行

優(yōu)勢

  • 靈活擴展

    可根據(jù)實際的用戶訪問量,自動擴展負載分發(fā)能力

  • 高性能

    集群支持高并發(fā)連接,滿足海量訪問量訴求

Lars-場景1.png

(2)、跨可用區(qū)同城容災(zāi)

? 彈性負載均衡可將流量跨可用區(qū)進行分發(fā),建立實時的同城容災(zāi)機制,滿足銀行貿(mào)易等企業(yè)對系統(tǒng)的高可用性要求。

優(yōu)勢

  • 靈活擴展

    可根據(jù)實際的用戶訪問量,自動擴展負載分發(fā)能力

  • 同城容災(zāi)

    支持跨可用區(qū)的雙活容災(zāi),實現(xiàn)無縫實時切換

Lars-場景2.png

(3)、電商搶購

? 電商業(yè)務(wù)呈現(xiàn)出較強的潮汐效應(yīng)。Lars通過和彈性伸縮等服務(wù)的無縫集成,自動創(chuàng)建后端云服務(wù)器,將流量自動分發(fā)到新的云服務(wù)器,緩解了促銷高峰時期的系統(tǒng)壓力。

優(yōu)勢

  • 彈性伸縮

    根據(jù)業(yè)務(wù)流量實時創(chuàng)建或移除云服務(wù)器

  • 高可用

    通過健康檢查快速屏蔽異常云服務(wù)器,確保業(yè)務(wù)高可用

  • 高性能

    集群支持高并發(fā)連接,滿足海量訪問量訴求

Lars-場景3.png

3) Lars系統(tǒng)總體架構(gòu)

? 對于一個部門的后臺,為增強靈活性,一個服務(wù)可以被抽象為命令字:modid+cmdid的組合,稱為一個模塊,而這個服務(wù)往往有多個服務(wù)節(jié)點,其所有服務(wù)節(jié)點的地址集合被稱為這個模塊下的路由,節(jié)點地址簡稱為節(jié)點

  • modid:標(biāo)識業(yè)務(wù)的大類,如:“直播列表相關(guān)”

  • cmdid:標(biāo)識具體服務(wù)內(nèi)容,如:“批量獲取直播列表”

    ? 業(yè)務(wù)代碼利用modid,cmdid,就可以調(diào)用對應(yīng)的遠程服務(wù)一個Lars系統(tǒng)包含一個DNSService,一個Report Service,以及部署于每個服務(wù)器的LoadBalance Agent,業(yè)務(wù)代碼通過API與ELB系統(tǒng)進行交互

API :根據(jù)自身需要的modid,cmdid,向ELB系統(tǒng)獲取節(jié)點、匯報節(jié)點調(diào)用結(jié)果;提供C++Java、Python接口

LoadBalance Agent:運行于每個服務(wù)器上,負責(zé)為此服務(wù)器上的業(yè)務(wù)提供節(jié)點獲取、節(jié)點狀態(tài)匯報、路由管理、負載調(diào)度等核心功能

DNSService : 運行于一臺服務(wù)器上(也可以用LVS部署多實例防單點),負責(zé)modid,cmdid到節(jié)點路由的轉(zhuǎn)換

Report Service : 運行于DNSService同機服務(wù)器上,負責(zé)收集各modid,cmdid下各節(jié)點調(diào)用狀況,可用于觀察、報警

modid,cmdid數(shù)據(jù)由Mysql管理,具體SQL腳本在common/sql路徑下
至于modid,cmdid的注冊、刪除可以利用Web端操作MySQL。

1-Lars-總體架構(gòu)設(shè)計.png

如圖,每個服務(wù)器(虛線)部署了一臺LoadBalance Agent,以及多個業(yè)務(wù)服務(wù)

  1. 開發(fā)者在Web端注冊、刪除、修改modid,cmdid的路由信息,信息被寫入到MySQL數(shù)據(jù)庫;
  2. 服務(wù)器上每個業(yè)務(wù)biz都把持著自己需要通信的遠程服務(wù)標(biāo)識modid+cmdid,每個biz都向本機LoadBalance Agent獲取遠程節(jié)點,進而可以和遠程目標(biāo)服務(wù)通信,此外業(yè)務(wù)模塊會匯報本次的節(jié)點調(diào)用結(jié)果給LoadBalance Agent;
  3. LoadBalance Agent負責(zé)路由管理、負載均衡等核心任務(wù),并周期性向DNSService獲取最新的路由信息,周期性把各modid,cmdid的各節(jié)點一段時間內(nèi)的調(diào)用結(jié)果傳給Report Service
  4. DNSService監(jiān)控MySQL,周期性將最新路由信息加載出來;
  5. Report Service將各modid,cmdid的各節(jié)點一段時間內(nèi)的調(diào)用結(jié)果寫回到MySQL,方便Web端查看、報警。

關(guān)于作者:

作者:Aceld(劉丹冰)

mail: danbing.at@gmail.com
github: https://github.com/aceld
原創(chuàng)書籍gitbook: http://legacy.gitbook.com/@aceld

原創(chuàng)聲明:未經(jīng)作者允許請勿轉(zhuǎn)載, 如果轉(zhuǎn)載請注明出處

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容