<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Lars負(fù)載均衡遠(yuǎn)程服務(wù)器調(diào)度系統(tǒng)

          聯(lián)合創(chuàng)作 · 2023-10-01 07:54

          Lars 是一個簡單、易用、高性能的服務(wù)間遠(yuǎn)程調(diào)用管理、調(diào)度、負(fù)載均衡系統(tǒng)。

          (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 版本及以上

          二、開發(fā)技術(shù)文檔及教程

          Lars詳細(xì)教程

          PC端文檔

          《Lars-基于C++負(fù)載均衡遠(yuǎn)程服務(wù)器調(diào)度系統(tǒng)教程》

          三、概述:

          Lars 是一個簡單、易用、高性能的服務(wù)間遠(yuǎn)程調(diào)用管理、調(diào)度、負(fù)載均衡系統(tǒng)。

          1) 優(yōu)勢

          1. 性能強悍

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

          2. 高可用

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

          3. 靈活擴(kuò)展

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

          4. 簡單易用

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

          2) 應(yīng)用場景

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

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

          優(yōu)勢

          • 靈活擴(kuò)展

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

          • 高性能

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

          Lars-1.png

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

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

          優(yōu)勢

          • 靈活擴(kuò)展

            可根據(jù)實際的用戶訪問量,自動擴(kuò)展負(fù)載分發(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)的遠(yuǎn)程服務(wù)一個Lars系統(tǒng)包含一個DNSService,一個Report Service,以及部署于每個服務(wù)器的LoadBalance Agent,業(yè)務(wù)代碼通過API與Lars系統(tǒng)進(jìn)行交互

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

          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同機(jī)服務(wù)器上,負(fù)責(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都把持著自己需要通信的遠(yuǎn)程服務(wù)標(biāo)識modid+cmdid,每個biz都向本機(jī)LoadBalance Agent獲取遠(yuǎn)程節(jié)點,進(jìn)而可以和遠(yuǎn)程目標(biāo)服務(wù)通信,此外業(yè)務(wù)模塊會匯報本次的節(jié)點調(diào)用結(jié)果給LoadBalance Agent;
          3. LoadBalance Agent負(fù)責(zé)路由管理、負(fù)載均衡等核心任務(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端查看、報警。

          四、快速開始

          (1) 編譯及安裝

          代碼下載

              git clone https://github.com/aceld/Lars.git

          編譯

              cd ./Lars
              make

          (2) 數(shù)據(jù)庫配置

          創(chuàng)建表

              cd ./Lars/base/sql
          進(jìn)入`mysql`,導(dǎo)入表`lars_dns.sql`文件
              mysql -u root -p
              #輸入密碼
          mysql> source ./lars_dns.sql

          (3) 各子系統(tǒng)配置文檔

          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]
          
          ;經(jīng)過若干次獲取請求host節(jié)點后,試探選擇一次overload過載節(jié)點
          probe_num=10
          
          ;初始化host_info主機(jī)信息訪問成功的個數(shù),防止剛啟動時少量失敗就認(rèn)為過載
          init_succ_cnt=180
          
          ;當(dāng)idle節(jié)點切換至over_load時的初始化失敗次數(shù),主要為了累計一定成功次數(shù)才能切換會idle
          init_err_cnt=5
          
          ;當(dāng)idle節(jié)點失敗率高于此值,節(jié)點變overload狀態(tài)
          err_rate=0.1
          
          ;當(dāng)overload節(jié)點成功率高于此值,節(jié)點變成idle狀態(tài)
          succ_rate=0.5
          
          ;當(dāng)idle節(jié)點連續(xù)失敗次數(shù)超過此值,節(jié)點變成overload狀態(tài)
          contin_err_limit=15
          
          ;當(dāng)overload節(jié)點連續(xù)成功次數(shù)超過此值, 節(jié)點變成idle狀態(tài)
          contin_succ_limit=15
          
          ;整個窗口的真實失敗率閾值
          window_err_rate=0.7
          
          ;對于某個modid/cmdid下的某個idle狀態(tài)的host,需要清理一次負(fù)載信息的周期
          idle_timeout=15
          
          ;對于某個modid/cmdid/下的某個overload狀態(tài)的host,在過載隊列等待的最大時間
          overload_timeout=15
          
          ;對于每個NEW狀態(tài)的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 服務(wù)的ip地址+端口號 lars_web_login.png

          配置主機(jī) lars_web_add_host.png

          查看所有主機(jī)配置 lars_web_all_hosts.png

          (6) 模擬效果測試

          啟動模擬器測試

              cd ./Lars
              ./run_lars test simulator 1 1

          更多測試工具

              cd ./Lars
              ./run_lars help
          =======啟動子系統(tǒng)==========
          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查看主機(jī)調(diào)用狀態(tài)

          lars_web_status.png

          五、Lars QPS性能測試

          主機(jī)1

          CPU個數(shù):2個 , 內(nèi)存: 2GB , 系統(tǒng):Ubuntu18.04虛擬機(jī)

          線程數(shù) QPS
          1 0.5w/s
          2 2.2w/s
          10 5.5w/s
          100 5.3w/s

          主機(jī)2

          CPU個數(shù): 24個 , 內(nèi)存:128GB, 系統(tǒng): 云主機(jī)

          線程數(shù) QPS
          1 8.36w/s
          3 28.06w/s
          5 55.18w/s
          8 56.74w/s

          開發(fā)者

          瀏覽 13
          點贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          編輯 分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          編輯 分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  肏逼视频网 | 少妇做受 高潮10在线 | 天天性爱网 | www,久久aaa | 日本一级色情片 |