服務(wù)發(fā)現(xiàn)學(xué)習(xí)筆記

背景

互聯(lián)網(wǎng)的廣泛應(yīng)用只搁,使分布式系統(tǒng)越來越流行,但也同時引入了兩個問題:

  1. 每個層次各個服務(wù)節(jié)點(diǎn)的負(fù)載均衡問題
  2. 服務(wù)節(jié)點(diǎn)的臨時故障問題(容災(zāi))

什么是服務(wù)發(fā)現(xiàn)

簡單的說唐全,在soa架構(gòu)體系中奈搜,通常地,服務(wù)作為一個功能模塊昧绣,只對外開放一個服務(wù)名,使用方只需要拿著這個服務(wù)名捶闸,就可以找到一個可以提供正常服務(wù)的機(jī)器滞乙。這種根據(jù)服務(wù)名發(fā)現(xiàn)服務(wù)的功能,就叫做服務(wù)發(fā)現(xiàn)鉴嗤。

服務(wù)發(fā)現(xiàn)的好處

在soa架構(gòu)體系下,可以方便地進(jìn)行水平伸縮序调。

傳統(tǒng)方式下醉锅,每增加一個服務(wù)實(shí)例,就需要更新一下客戶端的應(yīng)用配置发绢。

但是到了微服務(wù)時代硬耍,這種處理方式顯得太過于低效。引入了服務(wù)發(fā)現(xiàn)边酒,可以讓這種伸縮不對客戶端造成影響经柴,只在中間做一層轉(zhuǎn)換,使服務(wù)的變化都在這個系統(tǒng)中登記墩朦,外部只需要在調(diào)用時去獲取實(shí)例的網(wǎng)絡(luò)位置(IP地址和端口)坯认,不需要頻繁修改自己的配置。

什么是lvs

lvs是Linux虛擬服務(wù)器氓涣,將內(nèi)網(wǎng)的機(jī)器組成機(jī)器群提供網(wǎng)絡(luò)服務(wù)牛哺,外部的請求打在負(fù)載均衡器上,負(fù)載均衡器再將請求分發(fā)到其中一臺服務(wù)器上去劳吠。

服務(wù)發(fā)現(xiàn)與lvs的差異

共同點(diǎn)

服務(wù)發(fā)現(xiàn)與lvs都是為了實(shí)現(xiàn)負(fù)載均衡引润;

不同點(diǎn)

  • 服務(wù)發(fā)現(xiàn)只是提供服務(wù)查詢,服務(wù)發(fā)現(xiàn)掛了痒玩,客戶端仍可以通過緩存的查詢結(jié)果淳附,繼續(xù)與服務(wù)端簡歷連接议慰;
  • lvs則是網(wǎng)絡(luò)中的一個關(guān)鍵節(jié)點(diǎn),lvs掛了奴曙,將直接導(dǎo)致整個網(wǎng)絡(luò)服務(wù)對外不可用别凹;

負(fù)載均衡算法

比較常見的有權(quán)重隨機(jī)算法(RandomLoadBalance),權(quán)重輪詢算法(RobinRoundLoadBalance)缆毁,一致性哈希算法(ConsistenHashLoadBalance)番川,最少活躍度算法(LeastActiviteLoadBalance)。

權(quán)重隨機(jī)算法

這種算法最簡單脊框,權(quán)重為幾個隨機(jī)對象的命中比例颁督,權(quán)重設(shè)置越高越容易命中。

<?php
/**
 * file: random.php
 */
$config = [
    'apple' => 5,
    'banana' => 3,
    'orange' => 3,
    'pear' => 4
];
$choices = [];
foreach ($config as $choice => $weight) {
    while ($weight >= 0) {
        $choices[] = $choice;
        $weight--;
    }
}
if (count($choices) <= 0) {
    throw new Exception("weight config invalid");
}
for ($i = 0; $i < 30; $i++) {
    $choosedKey = array_rand($choices);
    var_dump($choices[$choosedKey]);
}
<?php
/**
 * 權(quán)重隨機(jī)算法改進(jìn)版
 * file: random_v2.php
 */
$config = [
    'apple' => 5,
    'banana' => 3,
    'orange' => 3,
    'pear' => 4
];
function random_choose($config)
{
    $weightSum = array_sum($config);
    if ($weightSum <= 0) {
        throw new Exception("config valid");
    }
    $randNum = rand(1, $weightSum);
    foreach ($config as $choice => $weight) {
        if ($randNum <= $weight) {
            return $choice;
        }
        $randNum -= $weight;
    }
}
for ($i = 0; $i < 30; $i++) {
    $choosed = random_choose($config);
    var_dump($choosed);
}

權(quán)重輪詢算法

輪流使用共享資源的基礎(chǔ)上浇雹,加上權(quán)重分配沉御,相對公平地使用各個資源。

一致性哈希算法

通過對請求做hash處理昭灵,映射到hash環(huán)上吠裆,來分配到對應(yīng)的資源。

參考資料

Haunt - Youzan 服務(wù)發(fā)現(xiàn) 概述

Linux服務(wù)器集群系統(tǒng)(一)

權(quán)重隨機(jī)算法

平滑的基于權(quán)重的輪詢算法

每天進(jìn)步一點(diǎn)點(diǎn)——五分鐘理解一致性哈希算法(consistent hashing)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末烂完,一起剝皮案震驚了整個濱河市试疙,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌抠蚣,老刑警劉巖祝旷,帶你破解...
    沈念sama閱讀 219,188評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異嘶窄,居然都是意外死亡怀跛,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,464評論 3 395
  • 文/潘曉璐 我一進(jìn)店門柄冲,熙熙樓的掌柜王于貴愁眉苦臉地迎上來吻谋,“玉大人,你說我怎么就攤上這事现横±焓埃” “怎么了?”我有些...
    開封第一講書人閱讀 165,562評論 0 356
  • 文/不壞的土叔 我叫張陵戒祠,是天一觀的道長晦攒。 經(jīng)常有香客問我,道長得哆,這世上最難降的妖魔是什么脯颜? 我笑而不...
    開封第一講書人閱讀 58,893評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮贩据,結(jié)果婚禮上栋操,老公的妹妹穿的比我還像新娘闸餐。我一直安慰自己,他們只是感情好矾芙,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,917評論 6 392
  • 文/花漫 我一把揭開白布舍沙。 她就那樣靜靜地躺著,像睡著了一般剔宪。 火紅的嫁衣襯著肌膚如雪拂铡。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,708評論 1 305
  • 那天葱绒,我揣著相機(jī)與錄音感帅,去河邊找鬼。 笑死地淀,一個胖子當(dāng)著我的面吹牛失球,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播帮毁,決...
    沈念sama閱讀 40,430評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼实苞,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了烈疚?” 一聲冷哼從身側(cè)響起黔牵,我...
    開封第一講書人閱讀 39,342評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎爷肝,沒想到半個月后荧止,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,801評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡阶剑,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,976評論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了危号。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片牧愁。...
    茶點(diǎn)故事閱讀 40,115評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖外莲,靈堂內(nèi)的尸體忽然破棺而出猪半,到底是詐尸還是另有隱情,我是刑警寧澤偷线,帶...
    沈念sama閱讀 35,804評論 5 346
  • 正文 年R本政府宣布磨确,位于F島的核電站,受9級特大地震影響声邦,放射性物質(zhì)發(fā)生泄漏乏奥。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,458評論 3 331
  • 文/蒙蒙 一亥曹、第九天 我趴在偏房一處隱蔽的房頂上張望邓了。 院中可真熱鬧恨诱,春花似錦、人聲如沸骗炉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,008評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽句葵。三九已至厕鹃,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間乍丈,已是汗流浹背剂碴。 一陣腳步聲響...
    開封第一講書人閱讀 33,135評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留诗赌,地道東北人汗茄。 一個月前我還...
    沈念sama閱讀 48,365評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像铭若,于是被迫代替她去往敵國和親洪碳。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,055評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 【摘要】 面對大量用戶訪問叼屠、高并發(fā)請求瞳腌,海量數(shù)據(jù),可以使用高性能的服務(wù)器镜雨、大型數(shù)據(jù)庫嫂侍,存儲設(shè)備,高性能Web服務(wù)器...
    靜修佛緣閱讀 4,561評論 0 24
  • 一荚坞、什么是負(fù)載均衡挑宠? 互聯(lián)網(wǎng)早期,業(yè)務(wù)流量比較小并且業(yè)務(wù)邏輯比較簡單颓影,單臺服務(wù)器便可以滿足基本的需求各淀;但隨著互聯(lián)網(wǎng)...
    彬彬醬閱讀 2,196評論 0 19
  • 摘要:面對大量用戶訪問、高并發(fā)請求诡挂,海量數(shù)據(jù)碎浇,可以使用高性能的服務(wù)器、大型數(shù)據(jù)庫璃俗,存儲設(shè)備奴璃,高性能Web服務(wù)器,采...
    layjoy閱讀 13,815評論 3 93
  • 分布式架構(gòu)實(shí)踐——負(fù)載均衡 也許當(dāng)我老了城豁,也一樣寫代碼苟穆;不為別的,只為了愛好。 1 什么是負(fù)載均衡(Load ba...
    Bobby0322閱讀 7,407評論 1 27
  • Linux服務(wù)器集群系統(tǒng)各概念辨析 計算機(jī)集群 WEB的負(fù)載均衡鞭缭、集群剖膳、高可用解決方案 計算機(jī)集群 計算機(jī)集群簡稱...
    Zhang21閱讀 3,290評論 0 18