
看云文檔地址:
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)勢
-
性能強悍
集群支持千萬并發(fā)鏈接,滿足用戶的海量業(yè)務(wù)訪問需求。
-
高可用
采用集群化部署,支持多可用區(qū)的容災(zāi),無縫實時切換。
-
靈活擴展
自動分發(fā),與彈性伸縮無縫集成,靈活擴展用戶用于的對外服務(wù)能力。
-
簡單易用
快速部署、實時生效,支持多種協(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ā)連接,滿足海量訪問量訴求

(2)、跨可用區(qū)同城容災(zāi)
? 彈性負載均衡可將流量跨可用區(qū)進行分發(fā),建立實時的同城容災(zāi)機制,滿足銀行貿(mào)易等企業(yè)對系統(tǒng)的高可用性要求。
優(yōu)勢
-
靈活擴展
可根據(jù)實際的用戶訪問量,自動擴展負載分發(fā)能力
-
同城容災(zāi)
支持跨可用區(qū)的雙活容災(zāi),實現(xiàn)無縫實時切換

(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ā)連接,滿足海量訪問量訴求

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。

如圖,每個服務(wù)器(虛線)部署了一臺LoadBalance Agent,以及多個業(yè)務(wù)服務(wù)
- 開發(fā)者在Web端注冊、刪除、修改
modid,cmdid的路由信息,信息被寫入到MySQL數(shù)據(jù)庫; - 服務(wù)器上每個業(yè)務(wù)biz都把持著自己需要通信的遠程服務(wù)標(biāo)識
modid+cmdid,每個biz都向本機LoadBalance Agent獲取遠程節(jié)點,進而可以和遠程目標(biāo)服務(wù)通信,此外業(yè)務(wù)模塊會匯報本次的節(jié)點調(diào)用結(jié)果給LoadBalance Agent; - LoadBalance Agent負責(zé)路由管理、負載均衡等核心任務(wù),并周期性向DNSService獲取最新的路由信息,周期性把各
modid,cmdid的各節(jié)點一段時間內(nèi)的調(diào)用結(jié)果傳給Report Service - DNSService監(jiān)控MySQL,周期性將最新路由信息加載出來;
- 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)載請注明出處