看云文檔地址:
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章-負(fù)載均衡模塊基礎(chǔ)設(shè)計
第5章-負(fù)載均衡獲取Host主機信息API
第6章-負(fù)載均衡上報Host主機信息API
第7章-過期窗口清理與過載超時(V0.5)
第8章-定期拉取最新路由信息(V0.6)
第9章-負(fù)載均衡獲取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ù)間遠(yuǎn)程調(diào)用管理觉渴、調(diào)度逃默、負(fù)載均衡系統(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ù)載均衡將用戶的訪問流量均勻的分發(fā)到多個后端云服務(wù)器上疚脐,確保業(yè)務(wù)快速平穩(wěn)的運行
優(yōu)勢
-
靈活擴展
可根據(jù)實際的用戶訪問量亿柑,自動擴展負(fù)載分發(fā)能力
-
高性能
集群支持高并發(fā)連接邢疙,滿足海量訪問量訴求
(2)、跨可用區(qū)同城容災(zāi)
? 彈性負(fù)載均衡可將流量跨可用區(qū)進(jìn)行分發(fā)望薄,建立實時的同城容災(zāi)機制疟游,滿足銀行貿(mào)易等企業(yè)對系統(tǒng)的高可用性要求。
優(yōu)勢
-
靈活擴展
可根據(jù)實際的用戶訪問量痕支,自動擴展負(fù)載分發(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)的遠(yuǎn)程服務(wù)一個Lars系統(tǒng)包含一個DNSService咧栗,一個Report Service窄赋,以及部署于每個服務(wù)器的LoadBalance Agent,業(yè)務(wù)代碼通過API與ELB系統(tǒng)進(jìn)行交互
API :根據(jù)自身需要的modid,cmdid
楼熄,向ELB系統(tǒng)獲取節(jié)點忆绰、匯報節(jié)點調(diào)用結(jié)果;提供C++
可岂、Java
错敢、Python
接口
LoadBalance Agent:運行于每個服務(wù)器上,負(fù)責(zé)為此服務(wù)器上的業(yè)務(wù)提供節(jié)點獲取缕粹、節(jié)點狀態(tài)匯報稚茅、路由管理、負(fù)載調(diào)度等核心功能
DNSService : 運行于一臺服務(wù)器上(也可以用LVS部署多實例防單點)平斩,負(fù)責(zé)modid,cmdid
到節(jié)點路由的轉(zhuǎn)換
Report Service : 運行于DNSService同機服務(wù)器上亚享,負(fù)責(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都把持著自己需要通信的遠(yuǎn)程服務(wù)標(biāo)識
modid+cmdid
燥筷,每個biz都向本機LoadBalance Agent獲取遠(yuǎn)程節(jié)點,進(jìn)而可以和遠(yuǎn)程目標(biāo)服務(wù)通信院崇,此外業(yè)務(wù)模塊會匯報本次的節(jié)點調(diào)用結(jié)果給LoadBalance Agent肆氓; - LoadBalance Agent負(fù)責(zé)路由管理、負(fù)載均衡等核心任務(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)載請注明出處