讀發(fā)布!設(shè)計(jì)與部署穩(wěn)定的分布式系統(tǒng)(第2版)筆記10_自動化和緩慢的響應(yīng).png 1. 工業(yè)機(jī)器人 1.1. 具有多層防護(hù)措施,防止對人員、機(jī)器和設(shè)施造成損害 1.2. 防護(hù)措施能限制機(jī)器人的動作和傳感器的感知 1.3. 機(jī)械臂的旋轉(zhuǎn)范圍會遠(yuǎn)遠(yuǎn)小于它可以達(dá)到的全部運(yùn)動范圍 2. 自動化 2.1. 它更像是工業(yè)機(jī)器人 2.1.1. 掌握控制層感知系統(tǒng)的當(dāng)前狀態(tài) 2.1.2. 將其與期望的狀態(tài)進(jìn)行對比 2.1.3. 對系統(tǒng)施加影響,使當(dāng)前狀態(tài)進(jìn)入到期望狀態(tài) 2.2. 自動化系統(tǒng)并未簡單地按照人類管理員的意愿行事 2.2.1. 自動化平臺與管理員關(guān)于系統(tǒng)預(yù)期狀態(tài)的不同“信念”的沖突,引發(fā)了2016年8月11日鏈接聚合網(wǎng)站Reddit遭遇停機(jī)事故 2.2.2. 刻意的手動更改與自動化平臺之間的沖突 2.3. 自動化使得管理員能夠花費(fèi)較少的努力進(jìn)行大量的操作,這就是一個力量倍增器 2.4. 自動化系統(tǒng)面對兩套相互沖突的指令時,也會卡殼 2.5. 由自動化所引發(fā)的操作,需要花時間才能完成 2.5.1. 這段時間通常會比監(jiān)控的時間間隔要長,因此請務(wù)必考慮到系統(tǒng)需要經(jīng)過一些延遲后,才能對操作做出響應(yīng) 3. 控制層 3.1. 控制層中的軟件主要管理基礎(chǔ)設(shè)施和應(yīng)用程序,而不是直接交付用戶功能 3.1.1. 日志記錄 3.1.2. 監(jiān)控 3.1.3. 調(diào)度程序 3.1.4. 擴(kuò)展控制器 3.1.5. 負(fù)載均衡器 3.1.6. 配置管理 3.2. 基礎(chǔ)設(shè)施管理工具可以迅速對系統(tǒng)產(chǎn)生巨大的影響,要在其內(nèi)部構(gòu)建限制器和防護(hù)措施,防止其快速毀掉整個系統(tǒng) 3.3. 控制層軟件中實(shí)現(xiàn)類似工業(yè)機(jī)器人的防護(hù)措施 3.3.1. 如果軟件觀測器顯示系統(tǒng)中80%以上的部分不可用,那么與系統(tǒng)出問題相比,軟件觀測器出問題的可能性更大 3.3.1.1. 被隔離的節(jié)點(diǎn)無法正確地感知當(dāng)前狀態(tài) 3.3.1.2. 控制系統(tǒng)會感知環(huán)境,但它們有可能被愚弄 3.3.2. 運(yùn)用滯后原則 3.3.2.1. 快速啟動機(jī)器 3.3.2.2. 要慢慢關(guān)機(jī) 3.3.2.3. 啟動新機(jī)器要比關(guān)閉舊機(jī)器更安全 3.3.3. 當(dāng)期望狀態(tài)與觀測狀態(tài)之間的差距很大時,要發(fā)出確認(rèn)信號,這相當(dāng)于工業(yè)機(jī)器人上的大型黃色旋轉(zhuǎn)警示燈在報(bào)警 3.3.4. 那些消耗資源的系統(tǒng)應(yīng)該設(shè)計(jì)成有狀態(tài)的,從而檢測它們是否正在試圖啟動無限多個實(shí)例 3.3.5. 構(gòu)建減速區(qū)域,緩解勢能 3.3.5.1. 控制層雖然每秒都能感知到系統(tǒng)已經(jīng)過載,但它啟動一臺虛擬機(jī)處理負(fù)載需要花費(fèi)5分鐘 3.3.5.2. 大量負(fù)載依然存在的情況下,要確保控制層不會在5分鐘內(nèi)啟動300個虛擬機(jī) 4. 緩慢的響應(yīng) 4.1. 通常由過度的需求引起 4.2. 爭著使用已經(jīng)供不應(yīng)求的數(shù)據(jù)庫連接,會使響應(yīng)變慢,進(jìn)而加劇這種爭用,導(dǎo)致惡性循環(huán) 4.3. 內(nèi)存泄漏經(jīng)常表現(xiàn)為響應(yīng)緩慢 4.3.1. 內(nèi)存泄漏會導(dǎo)致垃圾收集器過度運(yùn)行,從而引發(fā)響應(yīng)緩慢 4.4. 低層級的低效協(xié)議會導(dǎo)致網(wǎng)絡(luò)停頓,從而導(dǎo)致響應(yīng)緩慢 4.5. 對網(wǎng)站來說,響應(yīng)緩慢會招致更多的流量 4.5.1. 那些等待頁面響應(yīng)的用戶,會頻繁地單擊重新加載按鈕,為已經(jīng)過載的系統(tǒng)施加更多的流量 4.6. 緩慢的響應(yīng)會將調(diào)用系統(tǒng)和被調(diào)用系統(tǒng)中的資源拖得動彈不得 4.6.1. 生成響應(yīng)較慢比拒絕連接或返回錯誤更糟 4.7. 緩慢的響應(yīng)傾向于逐層向上傳播,并逐漸導(dǎo)致層疊失效 4.7.1. 一旦陷入響應(yīng)緩慢,上游系統(tǒng)本身的處理速度也會隨之變慢,并且當(dāng)響應(yīng)時間超過其自身的超時時間時,會很容易引發(fā)穩(wěn)定性問題 4.8. 快速返回系統(tǒng)失效信息,能使調(diào)用方的系統(tǒng)快速完成事務(wù)處理,最終成功或是系統(tǒng)失效,取決于應(yīng)用程序的邏輯 4.9. 讓系統(tǒng)具備監(jiān)控自身性能的能力,就能辨別其何時違背SLA 4.9.1. 系統(tǒng)能跟蹤自己的響應(yīng)情況,那么就可以知道自己何時變慢 4.9.2. 系統(tǒng)平均響應(yīng)時間超出系統(tǒng)所允許的時間時,可以考慮發(fā)送一個即時錯誤響應(yīng) 4.9.3. 當(dāng)平均響應(yīng)時間超過調(diào)用方的超時時間時,應(yīng)該發(fā)送這樣的響應(yīng)