自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

亞馬遜的實(shí)踐:分布式系統(tǒng)的難點(diǎn)

云計(jì)算 分布式
在軟件開(kāi)發(fā)和運(yùn)維過(guò)程中,存在許多標(biāo)準(zhǔn)化問(wèn)題。例如,軟件和應(yīng)用缺乏統(tǒng)一的標(biāo)準(zhǔn),通訊協(xié)議和數(shù)據(jù)格式各不相同,開(kāi)發(fā)和運(yùn)維的過(guò)程和方法也不一致。

問(wèn)題一:異構(gòu)系統(tǒng)的不標(biāo)準(zhǔn)問(wèn)題

在軟件開(kāi)發(fā)和運(yùn)維過(guò)程中,存在許多標(biāo)準(zhǔn)化問(wèn)題。例如,軟件和應(yīng)用缺乏統(tǒng)一的標(biāo)準(zhǔn),通訊協(xié)議和數(shù)據(jù)格式各不相同,開(kāi)發(fā)和運(yùn)維的過(guò)程和方法也不一致。不同的軟件和編程語(yǔ)言帶來(lái)了不同的兼容性問(wèn)題,以及各自不同的開(kāi)發(fā)、測(cè)試、運(yùn)維標(biāo)準(zhǔn)。這種差異導(dǎo)致我們?cè)陂_(kāi)發(fā)和運(yùn)維時(shí)采用不同的方法,從而增加了架構(gòu)的復(fù)雜度。

舉例來(lái)說(shuō),有的軟件需要通過(guò)修改 .conf 文件來(lái)更改配置,而另一些則需要調(diào)用管理 API 接口。在通訊方面,不同軟件采用不同的協(xié)議,即使在相同的網(wǎng)絡(luò)協(xié)議中,也可能出現(xiàn)不同的數(shù)據(jù)格式。不同的技術(shù)團(tuán)隊(duì)由于使用了不同的技術(shù)棧,也會(huì)導(dǎo)致開(kāi)發(fā)和運(yùn)維方式的多樣化。這些差異都會(huì)使我們的分布式系統(tǒng)架構(gòu)變得極其復(fù)雜。因此,分布式系統(tǒng)架構(gòu)需要制定相應(yīng)的規(guī)范。

例如,我注意到許多服務(wù)的 API 返回錯(cuò)誤時(shí)不使用 HTTP 的錯(cuò)誤狀態(tài)碼,而是返回 HTTP 200,然后在響應(yīng)體(HTTP Body)中的 JSON 字符串中包含類(lèi)似 “error, bla bla error message” 的錯(cuò)誤信息。這種設(shè)計(jì)不僅反直覺(jué),而且極大地影響了監(jiān)控的實(shí)現(xiàn)。實(shí)際上,現(xiàn)在應(yīng)該使用 Swagger 等規(guī)范來(lái)標(biāo)準(zhǔn)化 API。

另一個(gè)例子是配置管理。很多公司在軟件配置管理中只是采用簡(jiǎn)單的 key-value 形式,這種靈活性雖然很高,但也很容易被濫用。例如,不規(guī)范的配置命名,不規(guī)范的值,甚至在配置中直接嵌入前端展示內(nèi)容。一個(gè)合理的配置管理應(yīng)分為三層:底層和操作系統(tǒng)相關(guān),中間層和中間件相關(guān),最上層則是業(yè)務(wù)應(yīng)用相關(guān)。底層和中間層的配置不應(yīng)讓用戶隨意修改,而是通過(guò)模板選擇。比如,操作系統(tǒng)相關(guān)的配置應(yīng)形成標(biāo)準(zhǔn)模板供用戶選擇,而非隨意修改。只有當(dāng)配置管理形成了規(guī)范,我們才能有效控制各種系統(tǒng)的復(fù)雜性。

再比如,數(shù)據(jù)通訊協(xié)議通常包括協(xié)議頭和協(xié)議體。協(xié)議頭定義了基本的協(xié)議數(shù)據(jù),而協(xié)議體則包含業(yè)務(wù)數(shù)據(jù)。我們需要在協(xié)議頭的定義上制定嚴(yán)格的標(biāo)準(zhǔn),以便所有使用該協(xié)議的團(tuán)隊(duì)都遵循同一套規(guī)則。這種規(guī)范化能夠幫助我們更好地進(jìn)行請(qǐng)求監(jiān)控、調(diào)度和管理。

通過(guò)這些規(guī)范化措施,我們可以更好地控制分布式系統(tǒng)的復(fù)雜度,提高系統(tǒng)的可維護(hù)性和穩(wěn)定性。

問(wèn)題二:系統(tǒng)架構(gòu)中的服務(wù)依賴(lài)性問(wèn)題

在傳統(tǒng)的單體應(yīng)用中,如果某臺(tái)服務(wù)器宕機(jī),整個(gè)應(yīng)用就會(huì)停止運(yùn)行。然而,這并不意味著分布式架構(gòu)下就不會(huì)出現(xiàn)類(lèi)似的問(wèn)題。在分布式系統(tǒng)中,各個(gè)服務(wù)之間通常存在依賴(lài)關(guān)系。當(dāng)依賴(lài)鏈上的某個(gè)服務(wù)發(fā)生故障時(shí),可能會(huì)引發(fā)“多米諾骨牌”效應(yīng),導(dǎo)致一系列連鎖反應(yīng)。因此,在分布式架構(gòu)中,服務(wù)的依賴(lài)關(guān)系也可能帶來(lái)許多問(wèn)題。

一個(gè)典型的情況是,非關(guān)鍵業(yè)務(wù)被關(guān)鍵業(yè)務(wù)依賴(lài),結(jié)果導(dǎo)致非關(guān)鍵業(yè)務(wù)變得像關(guān)鍵業(yè)務(wù)一樣重要。服務(wù)依賴(lài)鏈中常會(huì)出現(xiàn)“木桶效應(yīng)”,即整個(gè)系統(tǒng)的服務(wù)水平協(xié)議(SLA)由表現(xiàn)最差的那個(gè)服務(wù)所決定。這屬于服務(wù)治理的范疇。有效的服務(wù)治理不僅要求我們定義每個(gè)服務(wù)的重要程度,還需要清晰地定義和描述關(guān)鍵業(yè)務(wù)的主要調(diào)用路徑。沒(méi)有這樣的治理和管理措施,我們將難以有效地運(yùn)維和管理整個(gè)系統(tǒng)。

需要特別注意的是,盡管許多分布式架構(gòu)在應(yīng)用層面做到了業(yè)務(wù)隔離,但在數(shù)據(jù)庫(kù)層面卻沒(méi)有。如果一個(gè)非關(guān)鍵業(yè)務(wù)因?yàn)閿?shù)據(jù)庫(kù)問(wèn)題而導(dǎo)致整個(gè)數(shù)據(jù)庫(kù)負(fù)載過(guò)高,可能會(huì)拖垮整個(gè)系統(tǒng),導(dǎo)致全站不可用。因此,在數(shù)據(jù)庫(kù)層面也需要進(jìn)行相應(yīng)的隔離。最佳實(shí)踐是每條業(yè)務(wù)線使用獨(dú)立的數(shù)據(jù)庫(kù)。這也是亞馬遜服務(wù)器的實(shí)踐之一:系統(tǒng)之間禁止直接訪問(wèn)對(duì)方的數(shù)據(jù)庫(kù),只能通過(guò)服務(wù)接口進(jìn)行交互。這種做法符合微服務(wù)架構(gòu)的要求。

總而言之,我們不僅要拆分服務(wù),還需要為每個(gè)服務(wù)分配獨(dú)立的數(shù)據(jù)庫(kù),從而避免不同服務(wù)之間相互干擾。這樣才能真正實(shí)現(xiàn)業(yè)務(wù)隔離,提升系統(tǒng)的可靠性和穩(wěn)定性。

問(wèn)題三:故障發(fā)生的概率更大

在分布式系統(tǒng)中,由于使用的機(jī)器和服務(wù)數(shù)量龐大,故障發(fā)生的概率比傳統(tǒng)的單體應(yīng)用更高。雖然分布式系統(tǒng)可以通過(guò)隔離來(lái)減小故障的影響范圍,但由于組件繁多、結(jié)構(gòu)復(fù)雜,故障的發(fā)生頻率反而更高。另一方面,由于管理難度大,系統(tǒng)架構(gòu)全貌難以掌握,因此錯(cuò)誤更容易發(fā)生。對(duì)于分布式系統(tǒng)的運(yùn)維而言,這幾乎是噩夢(mèng)般的挑戰(zhàn)。隨著時(shí)間的推移,我們會(huì)逐漸認(rèn)識(shí)到以下幾點(diǎn):

  1. 故障發(fā)生并不可怕,恢復(fù)時(shí)間過(guò)長(zhǎng)才是真正的問(wèn)題。在分布式系統(tǒng)中,故障幾乎是不可避免的,但如果恢復(fù)時(shí)間過(guò)長(zhǎng),就會(huì)對(duì)業(yè)務(wù)產(chǎn)生嚴(yán)重影響。
  2. 故障發(fā)生并不可怕,影響范圍過(guò)大才令人擔(dān)憂。在設(shè)計(jì)分布式系統(tǒng)時(shí),我們需要盡量控制故障的影響范圍,避免單點(diǎn)故障帶來(lái)的連鎖反應(yīng)。

運(yùn)維團(tuán)隊(duì)在分布式系統(tǒng)中面臨巨大的壓力,幾乎時(shí)刻都在處理各種大小不一的故障。很多大公司試圖通過(guò)添加大量的監(jiān)控指標(biāo)來(lái)應(yīng)對(duì)這些問(wèn)題,有時(shí)甚至設(shè)置了幾萬(wàn)個(gè)監(jiān)控點(diǎn)。但這種做法實(shí)際上是“蠻力”策略。一方面,過(guò)多的信息會(huì)導(dǎo)致信息過(guò)載,反而難以獲取有價(jià)值的洞察;另一方面,服務(wù)水平協(xié)議(SLA)要求我們定義關(guān)鍵指標(biāo)(Key Metrics),即最為重要的性能和狀態(tài)指標(biāo)。然而,很多公司在實(shí)際操作中忽視了這一點(diǎn)。

這種做法反映了運(yùn)維思維上的惰性,因?yàn)樗魂P(guān)注“救火階段”而不是“防火階段”。正所謂“防火勝于救火”,我們需要在設(shè)計(jì)和運(yùn)維系統(tǒng)時(shí)預(yù)先考慮故障的發(fā)生,即所謂的“設(shè)計(jì)即為容錯(cuò)”(Design for Failure)。在系統(tǒng)設(shè)計(jì)中,就應(yīng)考慮如何減輕故障的影響。如果無(wú)法完全避免故障,也應(yīng)通過(guò)自動(dòng)化手段盡快恢復(fù)故障,將影響控制在最小范圍內(nèi)。

隨著系統(tǒng)中機(jī)器和服務(wù)數(shù)量的增加,我們會(huì)發(fā)現(xiàn)人類(lèi)的局限性逐漸成為管理的瓶頸。人類(lèi)無(wú)法對(duì)復(fù)雜系統(tǒng)進(jìn)行面面俱到的管理,這時(shí),自動(dòng)化手段就顯得尤為重要?!叭斯芾泶a,代碼管理機(jī)器,人不直接管理機(jī)器”,這一理念意味著我們應(yīng)通過(guò)自動(dòng)化和代碼治理來(lái)管理分布式系統(tǒng)的復(fù)雜性,將人的作用集中在管理代碼和策略上,而將具體的系統(tǒng)操作交由自動(dòng)化系統(tǒng)執(zhí)行。這種方式不僅能夠提升系統(tǒng)的穩(wěn)定性和可控性,還能有效減輕運(yùn)維團(tuán)隊(duì)的負(fù)擔(dān)。

問(wèn)題四:多層架構(gòu)的運(yùn)維復(fù)雜度更大

通常情況下我們可以將系統(tǒng)分為四個(gè)層次:基礎(chǔ)層、平臺(tái)層、應(yīng)用層和接入層。

  1. 基礎(chǔ)層包括機(jī)器、網(wǎng)絡(luò)和存儲(chǔ)設(shè)備等基礎(chǔ)設(shè)施。
  2. 平臺(tái)層指的是中間件層,包含 Tomcat、MySQL、Redis、Kafka 等軟件。
  3. 應(yīng)用層包含各種業(yè)務(wù)軟件和功能服務(wù)。
  4. 接入層負(fù)責(zé)用戶請(qǐng)求的接入,如網(wǎng)關(guān)、負(fù)載均衡、CDN 和 DNS 等。

對(duì)于這四個(gè)層次,我們需要明確一點(diǎn):任意一層出現(xiàn)問(wèn)題,都會(huì)影響整個(gè)系統(tǒng)的運(yùn)行。如果沒(méi)有一個(gè)統(tǒng)一的視圖和管理機(jī)制,各層的運(yùn)維就會(huì)被割裂,導(dǎo)致更大的復(fù)雜性。

許多公司在團(tuán)隊(duì)分工上是按照技能進(jìn)行劃分的,比如產(chǎn)品開(kāi)發(fā)、中間件開(kāi)發(fā)、業(yè)務(wù)運(yùn)維、系統(tǒng)運(yùn)維等子團(tuán)隊(duì)。這種分工方式會(huì)導(dǎo)致每個(gè)團(tuán)隊(duì)只關(guān)注自己負(fù)責(zé)的部分,造成整個(gè)系統(tǒng)缺乏協(xié)同,信息不暢。當(dāng)某個(gè)環(huán)節(jié)出現(xiàn)問(wèn)題時(shí),整個(gè)系統(tǒng)就像“多米諾骨牌”一樣,一個(gè)故障會(huì)引發(fā)連鎖反應(yīng),影響范圍不斷擴(kuò)大。

由于缺乏統(tǒng)一的運(yùn)維視圖,團(tuán)隊(duì)無(wú)法清楚地了解一個(gè)服務(wù)調(diào)用在每個(gè)層次和資源中是如何流轉(zhuǎn)的。因此,當(dāng)出現(xiàn)故障時(shí),定位問(wèn)題和溝通協(xié)調(diào)會(huì)消耗大量時(shí)間和精力。此前我在某云平臺(tái)工作時(shí)曾遇到過(guò)類(lèi)似的情況:從接入層到負(fù)載均衡,再到服務(wù)層和操作系統(tǒng)層,每個(gè)環(huán)節(jié)的 KeepAlive 參數(shù)設(shè)置不一致,導(dǎo)致軟件的實(shí)際運(yùn)行行為與文檔描述不符。工程師在排查問(wèn)題的過(guò)程中屢屢受挫,以為解決了一個(gè)問(wèn)題,結(jié)果又出現(xiàn)了新的問(wèn)題。經(jīng)過(guò)多次反復(fù)排查和調(diào)試,最終才將所有 KeepAlive 參數(shù)設(shè)置成一致,耗費(fèi)了大量時(shí)間。

由此可見(jiàn),分工本身不是問(wèn)題,問(wèn)題在于分工后的協(xié)作是否統(tǒng)一和規(guī)范。這一點(diǎn)尤其值得重視。在系統(tǒng)運(yùn)維中,確保各層次之間的協(xié)調(diào)一致、標(biāo)準(zhǔn)化管理以及對(duì)系統(tǒng)的整體視圖掌握,是避免運(yùn)維混亂、提高效率和系統(tǒng)穩(wěn)定性的關(guān)鍵。

圖片圖片


責(zé)任編輯:武曉燕 來(lái)源: 二進(jìn)制跳動(dòng)
相關(guān)推薦

2013-03-22 14:44:52

大規(guī)模分布式系統(tǒng)飛天開(kāi)放平臺(tái)

2023-05-12 08:23:03

分布式系統(tǒng)網(wǎng)絡(luò)

2023-02-11 00:04:17

分布式系統(tǒng)安全

2018-10-24 11:01:53

分布式存儲(chǔ)系統(tǒng)

2021-10-30 19:30:23

分布式Celery隊(duì)列

2022-12-28 09:48:09

分布式系統(tǒng)關(guān)鍵路徑

2022-07-18 10:29:33

數(shù)據(jù)分布式系統(tǒng)

2009-02-06 09:38:38

memcached分布式緩存系統(tǒng)ASP.NET

2022-03-15 09:10:00

分布式訓(xùn)練實(shí)踐

2022-03-21 19:44:30

CitusPostgreSQ執(zhí)行器

2023-05-29 14:07:00

Zuul網(wǎng)關(guān)系統(tǒng)

2024-04-08 11:04:03

2023-10-08 10:49:16

搜索系統(tǒng)分布式系統(tǒng)

2019-07-17 22:23:01

分布式系統(tǒng)負(fù)載均衡架構(gòu)

2017-12-05 09:43:42

分布式系統(tǒng)核心

2023-04-26 08:01:09

分布式編譯系統(tǒng)

2019-06-19 15:40:06

分布式鎖RedisJava

2022-08-15 14:56:30

搜索引擎分布式

2017-10-27 08:40:44

分布式存儲(chǔ)剪枝系統(tǒng)

2023-10-26 18:10:43

分布式并行技術(shù)系統(tǒng)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)