From e9dcced03ca66bae4428b06c5105724faf9bc308 Mon Sep 17 00:00:00 2001 From: <> Date: Tue, 27 Aug 2024 02:18:33 +0000 Subject: [PATCH] Deployed 34dece2b with MkDocs version: 1.6.0 --- .../distributed-ft/index.html | 249 +++++++++++++----- feedback/index.html | 14 +- search/search_index.json | 2 +- 3 files changed, 185 insertions(+), 80 deletions(-) diff --git a/feedback/designing-data-intensive-applications/distributed-ft/index.html b/feedback/designing-data-intensive-applications/distributed-ft/index.html index 492c601f..3c1fdfa7 100644 --- a/feedback/designing-data-intensive-applications/distributed-ft/index.html +++ b/feedback/designing-data-intensive-applications/distributed-ft/index.html @@ -1205,9 +1205,13 @@
我們從處理競賽狀況時就提起:分散式資料庫沒辦法有效容錯。這次,我們終於要來談談分散式資料庫要怎麼容錯了!我們先來談談單台機器的容錯機制,再來帶出分散式系統的容錯機制。
+我們從處理競賽狀況時就提起:分散式資料庫沒辦法有效容錯。 +這次,我們終於要來談談分散式資料庫要怎麼容錯了!我們先來談談單台機器的容錯機制,再來帶出分散式系統的容錯機制。
-對應用程式開發人員來說,他可以很簡單的在異動前告知資料庫我要使用「交易」的機制,以此來滿足資料的一致性和容錯性。但是我們前面提了「複製延遲」很輕易就可以破壞這一系列的保證。同時,我們也要問問自己,如何讓開發人員使用和「交易」相似的方式來讓開發人員不需要在寫程式的時候還要思考分散式叢集會有的邊際狀況?
+對應用程式開發人員來說,他可以很簡單的在異動前告知資料庫我要使用「交易」的機制, +以此來滿足資料的一致性和容錯性。但是我們前面提了「複製延遲」很輕易就可以破壞這一系列的保證。 +同時,我們也要問問自己, +如何讓開發人員使用和「交易」相似的方式來讓開發人員不需要在寫程式的時候還要思考分散式叢集會有的邊際狀況?
那分散式資料庫又該做什麼?在開始前,我們先前情提要一下。
執行緒延宕
-即使單台機器也會受到執行序的延宕,但是單台機器的延宕代表所有程序都會被延宕,所以他並不會認知到自己被延宕了(除非檢查時間)。
-但是到了分散式系統時,執行序的延宕就代表有一節點突然無法運作,這時其他節點仍能正常運作。隔了三十秒之後,該節點恢復正常了,這時就可能造成不同節點的錯誤認知,例如複權(split brain)。
+即使單台機器也會受到執行序的延宕,但是單台機器的延宕代表所有程序都會被延宕, +所以他並不會認知到自己被延宕了(除非檢查時間)。
+但是到了分散式系統時,執行序的延宕就代表有一節點突然無法運作,這時其他節點仍能正常運作。 +隔了三十秒之後,該節點恢復正常了,這時就可能造成不同節點的錯誤認知,例如複權(split brain)。
我們有提到很多 NoSQL 宣稱最終一致性是必然的,然而最終一致性雖然可以讓狀態達到最終的一致性,但是當你從(暫時的)錯誤狀態作出任何判斷並執行異動時,相對應的錯誤異動就成為「正確的」異動,並永久的影響資料庫的狀態。
-例如帳號註冊時,檢查帳號是否註冊過:因為應用程式從資料庫得到的資訊是帳號沒被註冊過,所以允許註冊,這時就會讓這種暫時的錯誤狀態成為永久的錯誤狀態。
-因爲這異於一般的開發環境(通常我們存取程式碼中的變數時,都期望得到的值是最新的狀態),所以這會增加應用程式開發的負擔,每此設計時都要仔細設想各種狀況。而且這種東西很難得到保證:我這樣做就一定沒錯。
+我們有提到很多 NoSQL 宣稱最終一致性是必然的,然而最終一致性雖然可以讓狀態達到最終的一致性, +但是當你從(暫時的)錯誤狀態作出任何判斷並執行異動時,相對應的錯誤異動就成為「正確的」異動, +並永久的影響資料庫的狀態。
+例如帳號註冊時,檢查帳號是否註冊過:因為應用程式從資料庫得到的資訊是帳號沒被註冊過,所以允許註冊, +這時就會讓這種暫時的錯誤狀態成為永久的錯誤狀態。
+因爲這異於一般的開發環境(通常我們存取程式碼中的變數時,都期望得到的值是最新的狀態), +所以這會增加應用程式開發的負擔,每此設計時都要仔細設想各種狀況。而且這種東西很難得到保證:我這樣做就一定沒錯。
當我們讓分散式資料庫擁有高一致性,就會犧牲高可用性和高效能,所以在開始講分散式的容錯系統前,需要先有個認知: 我不一定需要這些東西 。
-在衍生資料的系列中(本系列叫做分散式系統),我們會提一個資料庫叢集的架構,這個架構就是試著鬆弛這個權衡:同時擁有高一致性和高可用性。
+當我們讓分散式資料庫擁有高一致性,就會犧牲高可用性和高效能,所以在開始講分散式的容錯系統前, +需要先有個認知: 我不一定需要高一致性 。
+在衍生資料的系列中(本系列叫做分散式系統),我們會提一個資料庫叢集的架構, +這個架構就是試著鬆弛這個權衡:同時擁有高一致性和高可用性。
最後,我們重新確認一下名詞的定義。
處理機制其實就是讓叢集執行得像是線性系統,而先前的單一領袖複製方式其實就很像這個東西。
-問題是,單一領袖的領袖從何而來?如果領袖是從管理者(人類)決定的話就代表需要 24 小時輪班來監控這個領袖的健康狀態,然而我們可能僅能透過網路的監控系統去檢查,因為基於網路這監控系統很可能是不穩定的。如果我們要自動化,那就一樣需要共識演算法。
+問題是,單一領袖的領袖從何而來?如果領袖是從管理者(人類)決定的話就代表需要 24 小時輪班來監控這個領袖的健康狀態, +然而我們可能僅能透過網路的監控系統去檢查,因為基於網路這監控系統很可能是不穩定的。 +如果我們要自動化,那就一樣需要共識演算法。
他有些可能的名詞,但主要還是要看文章的前後文:
滿足鴿舍理論並不代表符合線性系統,他不能保證叢集的狀態一致,就算你滿足最好的狀況:三台都異動成功,你仍然會發生狀態錯誤的問題,如圖上所示。
+滿足鴿舍理論並不代表符合線性系統,他不能保證叢集的狀態一致,就算你滿足最好的狀況: +三台都異動成功,你仍然會發生狀態錯誤的問題,如圖上所示。
線性系統是高成本的而且很可能是不能容錯的(想想單一領袖,當領袖失能時很多事都可能出錯),但是線性系統卻可以很簡單的幫助我們理解共識演算法要做的事。
+線性系統是高成本的而且很可能是不能容錯的(想想單一領袖,當領袖失能時很多事都可能出錯), +但是線性系統卻可以很簡單的幫助我們理解共識演算法要做的事。
因果關係不是線性系統,但是他和線性系統差在哪?在因果關係的系統中,我們不會說 異動 A 早於 異動 B,而是說 異動 B 依賴於 異動 A。這樣的關係異於線性系統。我們來看看以下例子:
+因果關係不是線性系統,但是他和線性系統差在哪?在因果關係的系統中, +我們不會說 異動 A 早於 異動 B,而是說 異動 B 依賴於 異動 A。 +這樣的關係異於線性系統。我們來看看以下例子:
-在單台資料庫中有可能發生圖上右邊的並行異動請求的模式,這時就會出現狀況。我們之前提說透過快照隔離,賦予每個請求當下的版本,讓他只允許取得當下版本的資訊。而這中間的賦予順序就是幫助我們得到因果關係。
-相對而言,線性系統中右上方的 Read A
就會出現在下面的請求之前。也就是因果關係並不會阻止並行的請求,但是他會幫助我們釐清請求和請求之間的關係也因此因果關係並不強於線性關係。
在單台資料庫中有可能發生圖上右邊的並行異動請求的模式,這時就會出現狀況。 +我們之前提說透過快照隔離,賦予每個請求當下的版本,讓他只允許取得當下版本的資訊。 +而這中間的賦予順序就是幫助我們得到因果關係。
+相對而言,線性系統中右上方的 Read A
就會出現在下面的請求之前。
+也就是因果關係並不會阻止並行的請求,但是他會幫助我們釐清請求和請求之間的關係也因此因果關係並不強於線性關係。
因果關係會賦予全域順序嗎?因果關係並不是全域順序,他可能在兩個節點間得到一個一樣的版本,例如 節點 A 得到版本 123,節點 B 也得到版本 123。
-但是這並不會造成問題,因為只有相依的請求才有賦予順序的必要。若兩個請求沒有關係,那麼給予他們相同的數字也沒什麼關係。想想現在南極正有一陣風吹起,我們不會說我先動南極的風才動的,因為這比較沒有意義。
+因果關係會賦予全域順序嗎?因果關係並不是全域順序, +他可能在兩個節點間得到一個一樣的版本,例如 節點 A 得到版本 123,節點 B 也得到版本 123。
+但是這並不會造成問題,因為只有相依的請求才有賦予順序的必要。 +若兩個請求沒有關係,那麼給予他們相同的數字也沒什麼關係。 +想想現在南極正有一陣風吹起,我們不會說我先動南極的風才動的,因為這比較沒有意義。
當要異動某個值時,我們需要紀錄:是否這個新的異動來自於先前的狀態。所以我們需要一個類似 版本向量 的東西。當要做異動時,應用程式需要傳給資料庫當初他在讀取時的版本,資料庫就可以透過版本確定這個先前讀取的資料是否已經過時(stale)。舉例來說,資料庫擁有版本一的狀態,當被請求要異動到版本三時,需要等待版本二的異動被執行(類似於序列化快照隔離中,資料庫透過了解某些異動請求之間的因果關係來並免發生資料不一致)。
-目前,賦予順序是線性系統之外最強的一致性,並且可以維持效能和可用性。但仍是開放研究,並未投入線上環境且有些問題需要處理(例如若要求每個資料都紀錄因果關係,這個量會很大而且不符合 OLTP 的模式:大量讀取小量異動):
+當要異動某個值時,我們需要紀錄:是否這個新的異動來自於先前的狀態。 +所以我們需要一個類似 版本向量 的東西。當要做異動時,應用程式需要傳給資料庫當初他在讀取時的版本, +資料庫就可以透過版本確定這個先前讀取的資料是否已經過時(stale)。 +舉例來說,資料庫擁有版本一的狀態,當被請求要異動到版本三時, +需要等待版本二的異動被執行(類似於序列化快照隔離中,資料庫透過了解某些異動請求之間的因果關係來並免發生資料不一致)。
+目前,賦予順序是線性系統之外最強的一致性, +並且可以維持效能和可用性。 +但仍是開放研究,並未投入線上環境且有些問題需要處理 +(例如若要求每個資料都紀錄因果關係,這個量會很大而且不符合 OLTP 的模式:大量讀取小量異動):
我們看到透過紀錄大量的版本來保持因果關係,但是實際應用程式基本上都是拉取很多資料而異動一部份資料,這樣版本的資訊會很龐大而失準。
-也許我們可以替每一個異動都加上版本(也就是全域的順序),只要每個叢集內的資料庫遵循著這個版本去執行,就能確保他的因果關係。這就好像單一領袖的資料叢集都會遵守領袖的異動順序,我們現在把這個概念套用在多領袖/無領袖的叢集上。
+也許我們可以替每一個異動都加上版本(也就是全域的順序), +只要每個叢集內的資料庫遵循著這個版本去執行,就能確保他的因果關係。 +這就好像單一領袖的資料叢集都會遵守領袖的異動順序,我們現在把這個概念套用在多領袖/無領袖的叢集上。
Lamport 在早期明確訂立了「因果關係」和「全域順序」在分散式系統的重要性。他於 1978 年的論文是目前分散式系統相關論文中最多引用次數的論文之一。
+Lamport 在早期明確訂立了「因果關係」和「全域順序」在分散式系統的重要性。 +他於 1978 年的 +論文 +是目前分散式系統相關論文中最多引用次數的論文之一。
不過這個方式在建立使用者帳號這個場景並不怎麼適用(也就是說他並不是全域順序)。
-Lamport 時間戳記(序列化時間戳記)運作原理是每個節點和每個請求者做任何請求時都會攜帶最大的計數,當節點遇到比自己的計數還高的值時,則更新自己的計數,以此來確保全域的順序。
-但是如果兩個並行的請求分別在不同節點做使用者的註冊(就會像 c=6
時那個樣子),各節點不知道對方目前正在處理使用者的註冊,所以這個全域順序並沒辦法幫助我們避免註冊兩個重複的使用者。
要讓 序列化時間戳記 成功避免重複,就需要在節點處理異動請求時去和其他節點確認:我正要執行「計數為六」的異動,請你的計數加一。當其他節點再執行相同的異動(例如註冊同一個使用者帳號)時,因為他的計數是七,而他又知道計數六的異動正在執行相似的請求,於是他就拒絕執行計數七的異動。
+Lamport 時間戳記(序列化時間戳記)運作原理是每個節點和每個請求者做任何請求時都會攜帶最大的計數, +當節點遇到比自己的計數還高的值時,則更新自己的計數,以此來確保全域的順序。
+但是如果兩個並行的請求分別在不同節點做使用者的註冊(就會像 c=6
時那個樣子),
+各節點不知道對方目前正在處理使用者的註冊,所以這個全域順序並沒辦法幫助我們避免註冊兩個重複的使用者。
要讓 序列化時間戳記 成功避免重複,就需要在節點處理異動請求時去和其他節點確認: +我正要執行「計數為六」的異動,請你的計數加一。 +當其他節點再執行相同的異動(例如註冊同一個使用者帳號)時, +因為他的計數是七,而他又知道計數六的異動正在執行相似的請求,於是他就拒絕執行計數七的異動。
和版本向量的差異
序列化時間戳記(vector clock)容易和 版本向量 (version vector)混淆。
@@ -1315,11 +1356,15 @@我們了解因果關係在分散式系統的重要,也提了一些可以幫助我們得到因果關係的方式而全域順序廣播(total order broadcast)就是其一。
-剛剛我們提到節點通知大家:我正要執行「計數為六」的異動,請你的計數加一。這個做法就叫全域順序廣播。通常都是第三方管理這個順序,例如 ZooKeeper、etcd。
+我們了解因果關係在分散式系統的重要, +也提了一些可以幫助我們得到因果關係的方式而全域順序廣播(total order broadcast)就是其一。
+剛剛我們提到節點通知大家: +我正要執行「計數為六」的異動,請你的計數加一。 +這個做法就叫全域順序廣播。通常都是第三方管理這個順序,例如 ZooKeeper、etcd。
ZooKeeper 不是在做共識演算法嗎?
-有論文證明全域順序廣播和共識演算法是一樣的,待會我們提共識演算法的時候會再回到這主題。
+有論文證明全域順序廣播和共識演算法是一樣的, +待會我們提共識演算法的時候會再回到這主題。
全域順序廣播保證兩件事情:
@@ -1330,22 +1375,28 @@他也能用來被實踐於圍欄鎖(fencing token)中的遞增編號。
線性系統比全域順序廣播更為嚴謹,全域順序廣播確保異動執行的順序,但卻不保證異動送過去的順序。除此之外,線性系統要求讀取到的值就是最新狀態,然而全域順序廣播通常不會限制讀取的順序。
-但是線性系統是可以建立在全域順序廣播之上的。
--+但是線性系統比全域順序廣播更易實作出來。
-
線性系統比全域順序廣播更為嚴謹,全域順序廣播確保異動執行的順序,但卻不保證異動送過去的順序。 +除此之外,線性系統要求讀取到的值就是最新狀態,然而全域順序廣播通常不會限制讀取的順序。 +但是線性系統是可以建立在全域順序廣播之上的。
+Info
+線性系統比全域順序廣播更易實作出來。
+怎麼達成?
-想像之前我們在討論競賽狀況時的住院醫生申請休假:休假的邏輯是先取得目前值班住院醫生人數,並於應用程式中檢查數量是否大於一,若大於則允許休假,反之則拒絕。
-同一時間兩個醫生請求休假,就會造成兩個醫師都休假成功。
-怎麼依上述例子(想簡單一點就是註冊帳號的例子)完成分散式的一致性(線性系統)?
+想像之前我們在討論競賽狀況時的住院醫生申請休假: +休假的邏輯是先取得目前值班住院醫生人數,並於應用程式中檢查數量是否大於一,若大於則允許休假,反之則拒絕。
+同一時間兩個醫生請求休假,就會造成兩個醫師都休假成功。 +怎麼依上述例子(想簡單一點就是註冊帳號的例子)完成分散式的一致性(線性系統)?
id1
反過來說,全域順序廣播也可以透過線性系統達成,不過這裡就不贅述了。
我們再回頭比較一下 全域順序廣播 和 序列化時間戳記,全域順序廣播下的節點會監聽這個廣播,並確保照著順序執行異動。序列化時間戳記就是讓各節點得到一個共有的序列化戳記,但是不保證並行請求之間的衝突,因為並行的請求並沒有相依性。
-前面我們有提全域順序廣播就是在實踐共識演算法,我們也知道全域順序廣播和線性系統是可以相互實踐出來的。也就是一個分散式系統若能實踐線性的 increment-and-get(用來遞增「順序」),就能實踐出全域順序廣播。
-有論文在講這三件事:全域順序廣播、分散式系統下線性 increment-and-get、共識演算法,都是在處理一樣的事,如果我們有一個演算法能解決任一樣,就能一同解決所有問題。
+我們再回頭比較一下 全域順序廣播 和 序列化時間戳記, +全域順序廣播下的節點會監聽這個廣播,並確保照著順序執行異動。 +序列化時間戳記就是讓各節點得到一個共有的序列化戳記,但是不保證並行請求之間的衝突, +因為並行的請求並沒有相依性。
+前面我們有提全域順序廣播就是在實踐共識演算法,我們也知道全域順序廣播和線性系統是可以相互實踐出來的。 +也就是一個分散式系統若能實踐線性的 increment-and-get(用來遞增「順序」),就能實踐出全域順序廣播。
+有論文在講這三件事: +全域順序廣播、分散式系統下線性 increment-and-get、共識演算法,都是在處理一樣的事, +如果我們有一個演算法能解決任一樣,就能一同解決所有問題。
在開始講共識演算法之前,我們花了很多時間去釐清很多事情的關係(線性系統、因果關係、全域順序廣播)和理解一些背景知識(網路、時鐘、資料庫等等)。
-這也是為什麼共識演算法這麼難的原因,並不是因為他的實作很困難,而是他需要有很多背景知識才能讓我們對於他要處理的東西有所概念。
-共識演算法的概念很單純:讓各個節點同意某一個結果。但是若對這些背景知識不了解,會讓你錯誤的實作(coding)這些演算法。
+在開始講共識演算法之前,我們花了很多時間去釐清很多事情的關係(線性系統、因果關係、全域順序廣播) +和理解一些背景知識(網路、時鐘、資料庫等等)。
+這也是為什麼共識演算法這麼難的原因,並不是因為他的實作很困難, +而是他需要有很多背景知識才能讓我們對於他要處理的東西有所概念。
+共識演算法的概念很單純:讓各個節點同意某一個結果。但是若對這些背景知識不了解, +會讓你錯誤的實作(coding)這些演算法。
-大部分關聯式資料叢集都有實作 2PC。
以單一節點的資料庫為例,當請求進來時不會馬上異動資料,而是先寫進日誌(WAL)中,之後再執行這次異動。這麼做的好處是可以避免執行到一半機器重開機時可以復原。
-當狀況變成分散式系統時也是一樣。有一個協調者(coordinator)發送異動請求,確保異動被收到(prepare,phase 1)之後就會進行提交(commit,phase 2)。
+以單一節點的資料庫為例,當請求進來時不會馬上異動資料,而是先寫進日誌(WAL)中, +之後再執行這次異動。這麼做的好處是可以避免執行到一半機器重開機時可以復原。
+當狀況變成分散式系統時也是一樣。有一個協調者(coordinator)發送異動請求, +確保異動被收到(prepare,phase 1)之後就會進行提交(commit,phase 2)。
有點像結婚時,牧師問夫妻是否同意時雙方回答:我願意(prepare),之後牧師就會同意這場婚禮(commit)。
-除了第二階段之外,任何一段發生意外時,協調者都可以放棄本次異動。但是當事情進行到第二階段時(也就是大家都同意這次異動時)所有節點都必須完成這次異動,不論發生什麼事。對於節點的角度來說,當他在第一階段回答:準備好了時,他就必須等到協調者的回應,不管是放棄或提交,不論發生什麼事。
+除了第二階段之外,任何一段發生意外時,協調者都可以放棄本次異動。但是當事情進行到第二階段時 +(也就是大家都同意這次異動時)所有節點都必須完成這次異動,不論發生什麼事。 +對於節點的角度來說,當他在第一階段回答:準備好了時,他就必須等到協調者的回應,不管是放棄或提交。
總結一下做法:
當發生意外時,不論協調者或著節點都必須停止運作直到確認接收到「放棄」或「提交」。這就讓分散式系統的高可用性和效能完全失能。
-3PC 相較於 2PC 則不會讓節點或協調者停止運作,但是需要一個服務偵測系統,告訴協調者現在哪個節點停止運作了,但是服務偵測系統無法完美偵測錯誤(例如他對節點的網路中斷了,但是節點和節點仍可以正常溝通)導致這個系統失靈,所以即使 2PC 會有協調者失能時的狀況需要處理,但仍有很多資料庫叢集實作他。
+當發生意外時,不論協調者或著節點都必須停止運作直到確認接收到「放棄」或「提交」。 +這就讓分散式系統的高可用性和效能完全失能。
+3PC 相較於 2PC 則不會讓節點或協調者停止運作,但是需要一個服務偵測系統,告訴協調者現在哪個節點停止運作了, +但是服務偵測系統無法完美偵測錯誤(例如他對節點的網路中斷了,但是節點和節點仍可以正常溝通)導致這個系統失靈, +所以即使 2PC 會有協調者失能時的狀況需要處理,但仍有很多資料庫叢集實作他。
如果提交過程中有一部份資料庫沒有成功送出提交訊息,這些資料庫就會停止所有相關資料的異動(或甚至整個資料庫停止異動)。為什麼要這麼硬?這就是會了達成一致性的犧牲,如果資料庫準備好了但尚未進行提交而允許其他異動時,就會讓多台資料庫的狀態無法達成一致。
-這時就會發現其實協調者是資料庫叢集的一環,當協調者中止時,對資料庫叢集來說是一個很重大的傷害,這也降低了我們預期的高可用性。但是大部分協調者的實作都不支援高可用性(多節點)。
-有時協調者會被實作於應用程式中(透過 SDK 等等),這也讓應用程式從原本的無狀態變成有狀態。這種錯誤認知會造成很多維運上的意外,例如沒有正確 Auto Scaling 等等。
-有時協調者的資料(異動是否提交的結論)遺失了,或者因任何狀況導致協調者長時間無法運作,資料庫中通常都會有個 API (heuristic decision)允許不透過協調者直接告知資料庫是否要提交,這就是用來避免這個狀況的發生。但是資料庫是否要提交是需要到各個節點確認各自的運作狀態來決定的,不這麼做的好很可能會有一些資料庫是「提交」而一些是「放棄」。
+如果提交過程中有一部份資料庫沒有成功送出提交訊息,這些資料庫就會停止所有相關資料的異動(或甚至整個資料庫停止異動)。 +為什麼要這麼硬?這就是會了達成一致性的犧牲,如果資料庫準備好了但尚未進行提交而允許其他異動時, +就會讓多台資料庫的狀態無法達成一致。
+這時就會發現其實協調者是資料庫叢集的一環,當協調者中止時,對資料庫叢集來說是一個很重大的傷害, +這也降低了我們預期的高可用性。但是大部分協調者的實作都不支援高可用性(多節點)。
+有時協調者會被實作於應用程式中(透過 SDK 等等),這也讓應用程式從原本的無狀態變成有狀態。 +這種錯誤認知會造成很多維運上的意外,例如沒有正確 Auto Scaling 等等。
+有時協調者的資料(異動是否提交的結論)遺失了,或者因任何狀況導致協調者長時間無法運作, +資料庫中通常都會有個 API(heuristic decision)允許不透過協調者直接告知資料庫是否要提交, +這就是用來避免這個狀況的發生。但是資料庫是否要提交是需要到各個節點確認各自的運作狀態來決定的, +不這麼做的好很可能會有一些資料庫是「提交」而一些是「放棄」。
XA(eXtended Architecture)是一種介面,這個介面讓 2PC 允許在異質的應用程式間擁有相同的構通橋樑。
-例如資料庫和寄送郵件的應用程式。
+XA(eXtended Architecture)是一種介面,這個介面讓 2PC 允許在異質的應用程式間擁有相同的構通橋樑。 +例如資料庫和寄送郵件的應用程式。
一般我們在提共識演算法時,都是指上述這幾種,他們都會有一些特性異於 2PC,我們待會就會談。
-不過這裡要講的是這些共識演算法都會得到一個結論:多數決才能保證共識。也就是五個節點中,需要有三個節點同一這個結果。
+不過這裡要講的是這些共識演算法都會得到一個結論: +多數決才能保證共識。也就是五個節點中,需要有三個節點同一這個結果。
-有人做了一些比較。
不僅是實作,要使用這些共識演算法提供者本身就不容易了,所以有類似 Apache Curator 透過高維度的類別來幫助開發者使用 Apache ZooKeeper。
+不僅是實作,要使用這些共識演算法提供者本身就不容易了, +所以有類似 Apache Curator 透過高維度的類別來幫助開發者使用 Apache ZooKeeper。
這些共識演算法需要滿足上述四個條件。
ZooKeeper/etcd/.. 和一般的資料庫不太一樣,他們不是用來儲存線上異動資料的資料庫,相反的,通常他們能儲存的量都很小(足夠被放進記憶體裡面)而這個小型資料庫叢集也通常不會太多節點(3~5 個),避免共識的過程太耗時。
-通常他儲存的資料會是: 節點 10.1.1.23
是分區 7 的領袖 ,這種不容易變動但卻是很重要的資料。所以 ZooKeeper/etcd/.. 的資料叢集很可能會用來服務一組比他們還要大很多的叢集(例如上百個資料庫節點)
ZooKeeper/etcd/.. 和一般的資料庫不太一樣,他們不是用來儲存線上異動資料的資料庫,相反的, +通常他們能儲存的量都很小(足夠被放進記憶體裡面)而這個小型資料庫叢集也通常不會太多節點(3~5 個), +避免共識的過程太耗時。
+通常他儲存的資料會是: 節點 10.1.1.23
是分區 7 的領袖 ,這種不容易變動但卻是很重要的資料。
+所以 ZooKeeper/etcd/.. 的資料叢集很可能會用來服務一組比他們還要大很多的叢集(例如上百個資料庫節點)
全域順序廣播就是一直重複執行共識演算法,確保每個節點都能按照相同順序去執行異動請求。
-因為每次異動請求都需要同步確認各節點的決定,所以效能不會好,除此之外當網路不穩定時(多個資料中心分散在不同場域)就很容易讓整個共識群組一直在重新選擇新的領袖。
-另外,共識是需要多數決的,當有新的節點進來這個群組,多數決的數量就會被改變。這種動態群組(dynamic membership)也是一個需要被解決的問題(開放研究)。
-效能問題和固定節點問題讓很多資料叢集選擇不使用共識演算法。除此之外,通常我們會在資料庫叢集之外建立一個共識演算法群組,這種系統外的架構,很可能會讓整體架構變得複雜。
+因為每次異動請求都需要同步確認各節點的決定,所以效能不會好, +除此之外當網路不穩定時(多個資料中心分散在不同場域)就很容易讓整個共識群組一直在重新選擇新的領袖。
+另外,共識是需要多數決的,當有新的節點進來這個群組,多數決的數量就會被改變。 +這種動態群組(dynamic membership)也是一個需要被解決的問題(開放研究)。
+效能問題和固定節點問題讓很多資料叢集選擇不使用共識演算法。 +除此之外,通常我們會在資料庫叢集之外建立一個共識演算法群組, +這種系統外的架構,很可能會讓整體架構變得複雜。
我們暸解了分散式資料庫面臨什麼狀況(網路延遲等等),並且順著思路往下走,知道要解決這個問題其實就是需要一個線性執行異動的系統。
-雖然線性系統能很好的幫助我們理解該如何處理分散式系統的共識,但是線性系統是很耗成本的,我們退而求其次,改採賦予因果關係這條路。
-賦予因果關係就是要替每一組異動請求加上他的來源,幫助資料庫決定這個請求該不該執行。他不像線性系統要求所有編號都是獨立的,就像版本控制的圖一樣,我們可以有多個分支代表並行請求,最後再合併起來,當合併錯誤時,就放棄(或嘗試修復並再發出一個分支)那些小分支。
-我們提到了全域順序廣播的實踐和其與共識演算法的關係。而共識演算法其實就是讓分散式系統變成一個序列化狀態機
-這章其實統合了前面所有分散式資料庫的內容。我們先前快速帶過了複製延遲但沒有提到當分區要做全域類型的搜尋(例如平均使用者年齡)時他可能會遇到的競賽狀況。在這一章都重新打開布幕讓我們一虧裡面實際會面臨的狀況和解法。
-這章雖然不像前面在講 資料倉儲 的時候那麼多數學的感覺,但是卻是最難的一部份,因為你要把前面所學到的所有東西整合在一起去思考。單台資料庫他面臨了什麼問題?他透過什麼方式解決?當解決完之後,放在分散式資料資料庫時為什麼會失靈?分散式資料庫又透過什麼樣抽象程度的角度去解決這件事?
-看完這次分享之後,你會發現其實大部分文字還是著重在理解上述的問題,而不是實際展示或說明某某演算法的實作和邏輯(理解完某某演算法的實作之後,隔幾個月之後很可能就會忘記實際內容,畢竟你需要反覆理解維運這些實作的機會真的很少,在限制學習時間的情況下,我更傾向於理解在解決問題時其背後的抽象層面),因為當你看完實作之後,你可能會有個結論:喔喔喔,共識演算法是讓一群節點得到一個共識,那然後呢?,我個人認為比較難的部分是去理解所謂「因果關係」在分散式系統的重要性,也就是全域順序廣播如何幫助我們避免分散式系統的邊際狀況。
+我們暸解了分散式資料庫面臨什麼狀況(網路延遲等等),並且順著思路往下走, +知道要解決這個問題其實就是需要一個線性執行異動的系統。
+雖然線性系統能很好的幫助我們理解該如何處理分散式系統的共識,但是線性系統是很耗成本的, +我們退而求其次,改採賦予因果關係這條路。
+賦予因果關係就是要替每一組異動請求加上他的來源,幫助資料庫決定這個請求該不該執行。 +他不像線性系統要求所有編號都是獨立的,就像版本控制的圖一樣,我們可以有多個分支代表並行請求, +最後再合併起來,當合併錯誤時,就放棄(或嘗試修復並再發出一個分支)那些小分支。
+我們提到了全域順序廣播的實踐和其與共識演算法的關係。 +而共識演算法其實就是讓分散式系統變成一個 +序列化狀態機
+這章其實統合了前面所有分散式資料庫的內容。 +我們先前快速帶過了複製延遲但沒有提到當分區要做全域類型的搜尋(例如平均使用者年齡)時他可能會遇到的競賽狀況。 +在這一章都重新打開布幕讓我們一虧裡面實際會面臨的狀況和解法。
+這章雖然不像前面在講 資料倉儲 的時候那麼多數學的感覺, +但是卻是最難的一部份,因為你要把前面所學到的所有東西整合在一起去思考。單台資料庫他面臨了什麼問題? +他透過什麼方式解決? +當解決完之後,放在分散式資料資料庫時為什麼會失靈? +分散式資料庫又透過什麼樣抽象程度的角度去解決這件事?
+看完這次分享之後,你會發現其實大部分文字還是著重在理解上述的問題, +而不是實際展示或說明某某演算法的實作和邏輯 +(理解完某某演算法的實作之後,隔幾個月之後很可能就會忘記實際內容, +畢竟你需要反覆理解維運這些實作的機會真的很少,在限制學習時間的情況下, +我更傾向於理解在解決問題時其背後的抽象層面), +因為當你看完實作之後,你可能會有個結論:喔喔喔,共識演算法是讓一群節點得到一個共識,那然後呢? +,我個人認為比較難的部分是去理解所謂「因果關係」在分散式系統的重要性, +也就是全域順序廣播如何幫助我們避免分散式系統的邊際狀況。
一句話概括這章
分散式系統的容錯就是透過全域順序來維持因果關係。
@@ -1474,7 +1579,7 @@@@ -1219,7 +1219,7 @@
@@ -1248,7 +1248,7 @@
@@ -1277,14 +1277,14 @@
\u4f60\u597d\uff0c\u6211\u53eb\u5442\u5b78\u6d32\u3002\u6211\u5728 104 \u8cc7\u8a0a\u79d1\u6280\u5de5\u4f5c\uff0c\u6b61\u8fce\u767c PR \u505a\u4efb\u4f55\u4fee\u6539\u3002
\u9019\u500b\u7db2\u7ad9\u65b9\u4fbf\u6211\u505a\u8cc7\u8a0a\u7684\u6574\u7406\uff0c \u4e5f\u53ef\u4ee5\u767c\u4e00\u4e9b issues \u4f86\u7576\u4f5c\u5099\u5fd8\u9304\u3002
\u4e0d\u53ea\u662f\u65b0\u589e\u6587\u7ae0\uff0c\u4e5f\u5305\u542b\u4fee\u6539\u820a\u7684\u6587\u7ae0\u3002
{{ blog_content }}
"},{"location":"#\u5fc3\u5f97","title":"\u5fc3\u5f97","text":"Release It!\uff0c\u71b1\u9580\u7684\u7dad\u904b\u66f8\u7c4d\u7684\u76f8\u95dc\u5fc3\u5f97\u548c\u6574\u7406\uff0c\u5e36\u4f60\u4e86\u89e3\u7dad\u904b\u6703\u9047\u5230\u7684\u554f\u984c\u3001\u89e3\u6c7a\u65b9\u6cd5\u3001\u67b6\u69cb\u8a2d\u8a08\u3001\u5fc3\u614b\u8abf\u6574\u7b49\u7b49\u3002
"},{"location":"#\u56de\u9867","title":"\u56de\u9867","text":"2023 \u5e74\u7684\u56de\u9867\u6587\uff0c\u5305\u542b\u74b0\u5883\u3001\u751f\u7269\u3001\u6578\u4f4d\u3001\u79d1\u6280\u548c\u4eba\u6587\u3002
"},{"location":"#\u5c08\u6848","title":"\u5c08\u6848","text":"\u540d\u7a31 \u7248\u672c \u7c21\u4ecb POS \u7cfb\u7d71 Privacy Policy SpotlightAnt \u96c6\u4e2d\u6ce8\u610f\u5c0f\u5de5\u5177 Lua \u958b\u767c\u5de5\u5177 \u57f7\u884c\u6e2c\u8a66\u548c\u98a8\u683c\u6aa2\u67e5 JOSE JWT/JWE/JWS/JWK \u7684\u5305\u88dd\u4ee5\u4e0b\u662f\u4e00\u4e9b\u958b\u6e90\u5c08\u6848
"},{"location":"awesome/","title":"AWESOME","text":""},{"location":"awesome/cb/","title":"\u6f2b\u756b\u63a8\u85a6","text":"\u4e00\u76f4\u60f3\u8457\u8981\u628a\u81ea\u5df1\u559c\u6b61\u7684\u6f2b\u756b\u6574\u7406\u8d77\u4f86\uff0c\u4e26\u5beb\u4e0a\u4e00\u4e9b\u7c21\u55ae\u7684\u5fc3\u5f97\uff0c \u672a\u4f86\u7684\u81ea\u5df1\u5982\u679c\u770b\u5230\u9019\u4e9b\u5fc3\u5f97\u5c07\u6703\u662f\u500b\u5f88\u6709\u8da3\u7684\u72c0\u6cc1\u5427 \ud83d\ude02\u3002 \u7576\u7136\uff0c\u5c0d\u65bc\u8a55\u8ad6\u9019\u4e9b\u5fc3\u8840\u7d50\u6676\u6211\u7d55\u5c0d\u662f\u6c92\u6709\u8cc7\u683c\u7684\uff0c \u80fd\u8b93\u6211\u539a\u8457\u81c9\u76ae\u5beb\u4e0b\u9019\u4e9b\u8a55\u8ad6\u7684\u53ea\u80fd\u662f\u56e0\u70ba\u5beb\u9019\u4e9b\u8a55\u8ad6\u6642\u662f\u771f\u5fc3\u800c\u56b4\u8085\u7684\uff0c \u5982\u679c\u54ea\u4e00\u5929\u6211\u610f\u8b58\u5230\u81ea\u5df1\u6b63\u5728\u80e1\u8b05\u9b3c\u626f\u6642\uff0c\u5e0c\u671b\u6709\u4eba\u6216\u81ea\u5df1\u80fd\u53ca\u6642\u767c\u73fe\u4e26\u63d0\u9192\u81ea\u5df1\u8a72\u597d\u597d\u51b7\u975c\u4e0b\u4f86\u3002
\u9019\u4efd\u63a8\u85a6\u6e05\u55ae\u53ef\u80fd\u4e0d\u6703\u6709\u90a3\u4e9b\u300c\u7d93\u5178\u300d\u4e4b\u4f5c\uff0c\u4f8b\u5982\u602a\u91ab\u9ed1\u5091\u514b\u3001\u591a\u62c9A\u5922\u7b49\u7b49\u3002 \u4e26\u4e0d\u662f\u56e0\u70ba\u9019\u4e9b\u4f5c\u54c1\u4e0d\u597d\u770b\uff0c\u800c\u662f\u57fa\u65bc\u5c0f\u6642\u5019\u90fd\u662f\u900f\u904e\u5361\u901a\uff08\u52d5\u756b\uff09\u4f86\u8a8d\u8b58\u9019\u4e9b\u4f5c\u54c1\uff0c \u8b93\u6211\u5c0d\u65bc\u8981\u7528\u6f2b\u756b\u7684\u89d2\u5ea6\u4f86\u770b\u9019\u4e9b\u4f5c\u54c1\u6642\u7adf\u6709\u4e9b\u5f46\u626d\uff0c\u4e5f\u8a31\u4ed6\u5011\u5728\u6211\u5fc3\u4e2d\u4e26\u4e0d\u6b78\u985e\u65bc\u6f2b\u756b\u5427\u3002
\u5728\u63a5\u4e0b\u4f86\u7684\u6599\u8868\u4e2d\uff0c\u7b2c\u4e00\u5c64\u6703\u5217\u51fa\u4f5c\u8005\u7b2c\u4e8c\u5c64\u518d\u5217\u51fa\u4f5c\u54c1\uff0c\u5982\u679c\u4f5c\u54c1\u662f\u4ee5\u539f\u4f5c\uff08\u901a\u5e38\u662f\u5c0f\u8aaa\uff09\u70ba\u57fa\u790e\u7684\uff0c \u5c31\u6703\u5728\u4f5c\u54c1\u540d\u5f8c\u9762\u52a0\u4e0a\u539f\u4f5c\u4f5c\u8005\uff0c\u4f8b\u5982\u300c\u4e95\u4e0a\u96c4\u5f65\u2014\u6d6a\u4eba\u528d\u5ba2 + \u5409\u5ddd\u82f1\u6cbb\u300d\u3002 \u7b2c\u4e09\u5c64\u4ee3\u8868\u5176\u4f5c\u54c1\u662f\u4e0a\u4e00\u5c64\u4f5c\u54c1\u7684\u5ef6\u4f38\u4f5c\u54c1\uff0c\u4f8b\u5982\u300c\u8acb\u53eb\u6211\u82f1\u96c4\u2014\u516c\u5f0f\u5408\u96c6\u300d
\u6700\u559c\u6b61\u7684\u4f5c\u8005\uff1a
\u6f2b\u756b\u5217\u8868\uff1a
\u9019\u88e1\u662f\u96a8\u7b46\uff0c\u7d00\u9304\u5404\u7a2e\u6771\u897f\u3002\u6709\u932f\u6b61\u8fce\u4f86\u4fee\u6b63\u3002
"},{"location":"essay/#\u6700\u8fd1\u7684\u7570\u52d5","title":"\u6700\u8fd1\u7684\u7570\u52d5","text":"\u4e0d\u53ea\u662f\u65b0\u589e\u6587\u7ae0\uff0c\u4e5f\u5305\u542b\u4fee\u6539\u820a\u7684\u6587\u7ae0\u3002
{{ blog_content essay }}
"},{"location":"essay/devex-in-action/","title":"\u958b\u767c\u9ad4\u9a57\u7684\u6539\u9032","text":"\u6458\u8981
\u672c\u6587\u6458\u9304\u81ea\uff1aDevEx in Action\u3002
\u6587\u4e2d\u95e1\u8ff0\u70ba\u4ec0\u9ebc\u512a\u5316\u958b\u767c\u9ad4\u9a57\u5f88\u91cd\u8981\uff0c\u4e26\u4f9d\u6b64\u4f86\u8a2d\u8a08\u51fa\u4e00\u500b\u512a\u8cea\u7684\u5de5\u4f5c\u74b0\u5883\u3002
\u512a\u5316\u5de5\u7a0b\u958b\u767c\u9ad4\u9a57\uff08\u5047\u8a2d\uff09\u6709\u4e09\u500b\u76ee\u6a19\u8981\u6eff\u8db3\uff1a
\u5728\u512a\u5316\u958b\u767c\u9ad4\u9a57\u4e0a\uff0c\uff08\u5047\u8a2d\uff09\u6709\u4e09\u500b\u6307\u6a19\u53ef\u4ee5\u8003\u616e\uff1a
\u53ea\u6709\u9019\u4e09\u500b\u55ce\uff1f
\u9019\u4e9b\u53ea\u662f\u4f5c\u8005\u63d0\u4f9b\u7684\u6307\u6a19\uff0c\u6839\u64da\u60c5\u5883\u53ef\u4ee5\u81ea\u884c\u8a2d\u8a08\u3002
\u4f46\u662f\u8981\u6ce8\u610f\uff0c\u6839\u64da PLS-SEM\uff08\u5f8c\u9762\u7684\u5206\u6790\u5de5\u5177\uff09\u6700\u4f73\u6307\u5357\uff0c \u6307\u6a19\u6578\u91cf\u8d8a\u9ad8\uff0c\u6a23\u672c\u6578\u8981\u8ddf\u8457\u63d0\u9ad8\u624d\u80fd\u964d\u4f4e\u8aa4\u5dee\u3002
\u7e3d\u7d50\u4f86\u8aaa\uff0c\u5c31\u6703\u6709\u9019\u4e09\u5c0d\u4e09\u7684\u7dda\u5716\uff1a
---\ntitle: \u958b\u767c\u9ad4\u9a57\u7684\u4e09\u500b\u65b9\u5411\n---\nflowchart LR\n p[\u500b\u4eba]\n t[\u5718\u968a]\n o[\u7d44\u7e54]\n fs(\u5fc3\u6d41)\n fl(\u56de\u994b)\n cl(\u8a8d\u77e5\u8ca0\u8377)\n fs --H1a-->p\n fs --H1b-->t\n fs --H1c-->o\n fl --H2a-->p\n fl --H2b-->t\n fl --H2c-->o\n cl --H3a-->p\n cl --H3b-->t\n cl --H3c-->o\n
"},{"location":"essay/devex-in-action/#\u554f\u5377","title":"\u554f\u5377","text":"\u900f\u904e\u554f\u5377\u548c PLS \u7684\u5206\u6790\uff0c \u9996\u5148\u78ba\u4fdd\u554f\u5377\u9805\u76ee\uff08\u524d\u4e09\u9805\uff09\u548c\u76ee\u6a19\uff08\u5fc3\u6d41\u3001\u56de\u994b\u3001\u8a8d\u77e5\u8ca0\u8377\uff09\u6709\u95dc\u4fc2\u4e14\u5408\u7406\uff0c \u63a5\u8457\u627e\u51fa\u5047\u8a2d\uff08x \u5229\u65bc y\uff09\u548c\u9805\u76ee\uff08\u5f8c\u4e09\u9805\uff09\u7684\u95dc\u4fc2\u7a0b\u5ea6\u4e26\u78ba\u8a8d\u5047\u8a2d\u662f\u5426\u5408\u7406\u3002
\u4e0b\u9762\u662f PLS-SEM \u4e2d\u7684\u5916\u986f\u69cb\u5ff5\uff08exogenous construct\uff09\uff0c \u6bcf\u500b\u9805\u76ee\uff08formatively item\uff09\u6703\u5f62\u6210\u5404\u81ea\u7684\u69cb\u5ff5\u3002
\u9805\u76ee \u5e73\u5747\u5f97\u5206 \u6a19\u6e96\u5dee \u8ca0\u8377\u91cf \u5728\u5de5\u6642\u4e2d\uff0c\u6211\u6709\u5927\u91cf\u6642\u9593\u9032\u884c\u5c08\u6ce8\u5730\u958b\u767c1 3.383 0.845 0.826 \u5728\u65e5\u5e38\u5de5\u4f5c\u9031\u4e2d\uff0c\u4f60\u591a\u9577\u88ab\u975e\u9810\u671f\u7684\u5de5\u4f5c\u5e72\u64fe\u6216\u4e2d\u65b72 3.826 1.087 0.557 \u4e00\u822c\u4f86\u8aaa\uff0c\u6211\u7684\u7a0b\u5f0f\u78bc\u5de5\u4f5c\u662f\u5438\u5f15\u4eba\u76841 3.580 0.871 0.796\u5fc3\u6d41\u69cb\u5ff5\uff0c\u7d44\u6210\u4fe1\u5ea6: 0.776\uff0c\u5e73\u5747\u8b8a\u7570\u62bd\u53d6\u91cf: 0.542
\u9805\u76ee \u5e73\u5747\u5f97\u5206 \u6a19\u6e96\u5dee \u8ca0\u8377\u91cf \u9762\u5c0d\u516c\u53f8\u5167\u90e8\u5de5\u7a0b\u7684\u7591\u554f\uff08\u4f8b\u5982\u7a0b\u5f0f\u78bc\u3001\u7cfb\u7d71\u6216\u5546\u52d9\u908f\u8f2f\uff09\uff0c\u591a\u5e38\u6703\u82b1\u8d85\u904e\u5341\u5206\u9418\u4f86\u89e3\u6c7a3 2.799 1.309 0.793 \u591a\u5c11\u6bd4\u4f8b\u7684\u7a0b\u5f0f\u78bc\u5be9\u95b1\uff08code review\uff09\uff0c\u6703\u5728\u56db\u5c0f\u6642\u5167\u5b8c\u62104 2.895 1.412 0.698\u56de\u994b\u69cb\u5ff5\uff0c\u7d44\u6210\u4fe1\u5ea6: 0.715\uff0c\u5e73\u5747\u8b8a\u7570\u62bd\u53d6\u91cf: 0.558
\u9805\u76ee \u5e73\u5747\u5f97\u5206 \u6a19\u6e96\u5dee \u8ca0\u8377\u91cf \u5728\u4f60\u4e3b\u8981\u7684\u5718\u968a\u4e2d\uff0c\u90e8\u7f72\u61c9\u7528\u7684\u5bb9\u6613\u7a0b\u5ea6\u5982\u4f555 3.735 0.858 0.728 \u4f60\u591a\u5e38\u8f15\u6613\u7684\u7406\u89e3\u5de5\u4f5c\u4e2d\u7684\u7a0b\u5f0f\u78bc1 3.827 0.788 0.648 \u4e00\u822c\u4f86\u8aaa\uff0c\u5fc5\u9808\u9075\u5b88\u7684\u5de5\u4f5c\u6d41\u7a0b\u5c0d\u6211\u4f86\u8aaa\u662f\u8f15\u6613\u7406\u89e3\u548c\u64cd\u4f5c\u76841 3.607 0.841 0.759 \u4e00\u822c\u4f86\u8aaa\uff0c\u6211\u64c1\u6709\u7684\u958b\u767c\u5de5\u5177\u662f\u53ef\u4ee5\u76f4\u89c0\u64cd\u4f5c\u76841 3.689 0.854 0.780\u8a8d\u77e5\u8ca0\u8377\u69cb\u5ff5\uff0c\u7d44\u6210\u4fe1\u5ea6: 0.820\uff0c\u5e73\u5747\u8b8a\u7570\u62bd\u53d6\u91cf: 0.534
\u63a5\u8457\u4e0b\u9762\u662f PLS-SEM \u4e2d\u7684\u5f15\u5165\u69cb\u5ff5\uff08endogenous construct\uff09\uff0c \u6bcf\u500b\u9805\u76ee\uff08reflectively item\uff09\u6703\u53cd\u61c9\u5404\u81ea\u7684\u69cb\u5ff5\u3002
\u9805\u76ee \u5e73\u5747\u5f97\u5206 \u6a19\u6e96\u5dee \u8ca0\u8377\u91cf \u5728\u904e\u53bb\u4e00\u500b\u6708\u4e2d\uff0c\u6211\u5b78\u5230\u548c\u6211\u5de5\u4f5c\u76f8\u95dc\u7684\u65b0\u6280\u80fd6 3.922 0.995 0.670 \u5728\u904e\u53bb\u4e00\u500b\u6708\u4e2d\uff0c\u6211\u611f\u5230\u5f88\u6709\u751f\u7522\u529b6 3.680 0.990 0.816 \u5728\u904e\u53bb\u4e00\u500b\u6708\u4e2d\uff0c\u6211\u5728\u5de5\u4f5c\u4e2d\u6709\u5275\u9020\u529b\u7684\u8868\u73fe6 3.635 0.993 0.852\u500b\u4eba\u5f71\u97ff\u69cb\u5ff5\uff0c\u7d44\u6210\u4fe1\u5ea6: 0.825\uff0c\u5e73\u5747\u8b8a\u7570\u62bd\u53d6\u91cf: 0.614
\u9805\u76ee \u5e73\u5747\u5f97\u5206 \u6a19\u6e96\u5dee \u8ca0\u8377\u91cf \u4f60\u6703\u5982\u4f55\u8a55\u6bd4\u5718\u968a\u4e2d\u7684\u7a0b\u5f0f\u78bc\u54c1\u8cea5 3.584 0.865 0.945 \u4f60\u591a\u5e38\u6703\u56e0\u70ba\u6280\u8853\u50b5\u800c\u5f71\u97ff\u4f60\u5b8c\u6210\u65b0\u7684\u5de5\u4f5c\u9805\u76ee1 2.826 0.917 0.653\u5718\u968a\u5f71\u97ff\u69cb\u5ff5\uff0c\u7d44\u6210\u4fe1\u5ea6: 0.790\uff0c\u5e73\u5747\u8b8a\u7570\u62bd\u53d6\u91cf: 0.660
\u9805\u76ee \u5e73\u5747\u5f97\u5206 \u6a19\u6e96\u5dee \u8ca0\u8377\u91cf \u4f60\u591a\u5e38\u67e5\u770b\u5176\u4ed6\u516c\u53f8\u7684\u8077\u7f3a\uff08\u672c\u56de\u7b54\u53ea\u6703\u7528\u4f5c\u7814\u7a76\u7528\u9014\uff097 3.922 1.024 0.607 \u6211\u7684\u516c\u53f8\u652f\u6301\u5275\u610f\u767c\u60f36 3.922 0.999 0.869 \u6211\u7684\u516c\u53f8\u5b8c\u6210\u5b83\u5236\u5b9a\u7684\u76ee\u6a196 3.680 0.828 0.830 \u6211\u7684\u516c\u53f8\u662f\u7372\u5229\u76846 3.635 0.913 0.605\u7d44\u7e54\u5f71\u97ff\u69cb\u5ff5\uff0c\u7d44\u6210\u4fe1\u5ea6: 0.823\uff0c\u5e73\u5747\u8b8a\u7570\u62bd\u53d6\u91cf: 0.545
"},{"location":"essay/devex-in-action/#\u7d50\u679c","title":"\u7d50\u679c","text":"\u900f\u904e\u554f\u5377\u548c PLS-SEM\uff0c\u7d71\u8a08\u4e26\u8a08\u7b97\u5f97\u5230 \u5404\u500b\u6307\u6a19\u5c0d\u5404\u500b\u76ee\u6a19\u7684\u91cd\u8981\u7a0b\u5ea6\uff1a
---\ntitle: \u6307\u6a19\u5c0d\u5404\u76ee\u6a19\u7684\u5f71\u97ff\u7a0b\u5ea6\n---\nflowchart LR\n p[\u500b\u4eba]\n t[\u5718\u968a]\n o[\u7d44\u7e54]\n fs(\u5fc3\u6d41)\n fl(\u56de\u994b)\n cl(\u8a8d\u77e5\u8ca0\u8377)\n fs --0.307-->p\n fs --0.173-->t\n fs --0.167-->o\n fl --NS-->p\n fl --0.141-->t\n fl --NS-->o\n cl --0.254-->p\n cl --0.422-->t\n cl --0.325-->o\n
\u4ee5\u5716\u4e2d\u70ba\u4f8b\uff0c\u300c\u56de\u994b\u300d\u5c31\u53ea\u5c0d\u300c\u5718\u968a\u300d\u6709\u8f03\u7a4d\u6975\u7684\u5f71\u97ff\uff1b \u800c\u300c\u8a8d\u77e5\u8ca0\u8377\u300d\u5247\u662f\u5c0d\u300c\u5718\u968a\u300d\u548c\u300c\u7d44\u7e54\u300d\u6709\u6700\u7a4d\u6975\u7684\u5f71\u97ff\uff1b \u6700\u5f8c\u5247\u662f\u300c\u5fc3\u6d41\u300d\u5c0d\u300c\u500b\u4eba\u300d\u5f71\u97ff\u6700\u9ad8\u3002
"},{"location":"essay/devex-in-action/#\u5fc3\u6d41","title":"\u5fc3\u6d41","text":"\u63d0\u4f9b\u5de5\u7a0b\u4eba\u54e1\u5c08\u6ce8\u7684\u958b\u767c\uff0c\u4e0d\u53ea\u662f\u512a\u5316\u500b\u4eba\u6548\u7387\uff0c\u4e5f\u80fd\u540c\u6642\u512a\u5316\u5718\u968a\u548c\u7d44\u7e54\u3002
\u80fd\u5920\u64c1\u6709\u8db3\u5920\u6642\u9593\u7684\u6c88\u6d78\u958b\u767c\uff0c\u6703\u8b93\u958b\u767c\u8005\u589e\u52a0 50% \u7684\u751f\u7522\u6548\u7387\u3002 \u96d6\u7136\u5728\u591a\u4eba\u958b\u767c\u7684\u60c5\u6cc1\u4e0b\uff0c\u5f88\u96e3\u6e96\u78ba\u8b93\u6bcf\u500b\u4eba\u90fd\u80fd\u6c88\u6d78\u958b\u767c\uff0c \u4f46\u537b\u662f\u4e00\u500b\u53ef\u4ee5\u52aa\u529b\u7684\u76ee\u6a19\uff0c\u4e0d\u7ba1\u662f\u74b0\u5883\u4e0a\uff08\u5b89\u975c\u7684\u7a7a\u9593\uff09\u9084\u662f\u5718\u968a\u5354\u4f5c\u65b9\u5f0f\u4e0a\uff08\u6e1b\u5c11\u6703\u8b70\uff09\u3002
\u91dd\u5c0d\u6709\u8208\u8da3\u7684\u4e8b\u7269\u9032\u884c\u5de5\u7a0b\u958b\u767c\u6703\u589e\u52a0 30% \u7684\u751f\u7522\u6548\u7387\u3002 \u900f\u904e\u5718\u968a\u5167\u7684\u5de5\u4f5c\u4e92\u63db\u6216\u751a\u81f3\u7d44\u7e54\u5167\u90e8\u591a\u5718\u968a\u7684\u5de5\u4f5c\u4e92\u63db\uff0c\u53ef\u4ee5\u8b93\u958b\u767c\u8005\u6709\u6a5f\u6703\u9ad4\u9a57\u4e0d\u540c\u958b\u767c\u74b0\u5883\u3002 \u4e5f\u53ef\u4ee5\u900f\u904e\u9ed1\u5ba2\u677e\u4f86\u8b93\u958b\u767c\u8005\u6709\u6a5f\u6703\u5b78\u7fd2\u548c\u6311\u6230\u3002
"},{"location":"essay/devex-in-action/#\u56de\u994b","title":"\u56de\u994b","text":"\u597d\u7684\u56de\u994b\u50c5\u80fd\u512a\u5316\u5718\u968a\u7684\u6548\u80fd\u3002
\u64c1\u6709\u5feb\u901f\u7684\u4ee3\u78bc\u5be9\u95b1\u6703\u63d0\u9ad8\u7522\u54c1 20% \u7684\u5275\u65b0\uff0c\u5feb\u901f\u7684\u4ee3\u78bc\u5be9\u95b1\u6703\u52a0\u5feb\u5718\u968a\u8d70\u4e0b\u4e00\u6b65\u7684\u901f\u5ea6\u3002
\u5feb\u901f\u56de\u61c9\u5167\u90e8\u958b\u767c\u554f\u984c\u4e5f\u6703\u964d\u4f4e 50% \u7684\u6280\u8853\u50b5\u767c\u751f\u7387\uff0c \u5b83\u9700\u8981\u8b93\u4ee3\u78bc\u6587\u4ef6\u5316\uff0c\u540c\u6642\u8981\u653e\u5728\u4e00\u500b\u53ef\u4f9b\u5feb\u901f\u67e5\u95b1\u7684\u5730\u65b9\uff0c\u4e26\u63d0\u51fa\u6700\u4f73\u5be6\u4f5c\u7684\u6307\u5357\u3002
"},{"location":"essay/devex-in-action/#\u8a8d\u77e5\u8ca0\u8377","title":"\u8a8d\u77e5\u8ca0\u8377","text":"\u82e5\u958b\u767c\u8005\u80fd\u5920\u9ad8\u5ea6\u719f\u6089\u8655\u7406\u7684\u7a0b\u5f0f\u78bc\uff0c\u80fd\u5920\u63d0\u9ad8 42% \u7684\u958b\u767c\u6548\u7387\u3002 \u4e00\u4e9b\u5de5\u5177\u548c\u6703\u8b70\u53ef\u4ee5\u5e6b\u52a9\u8de8\u5718\u968a\u6216\u5718\u968a\u5167\u7684\u7a0b\u5f0f\u78bc\u8a8d\u77e5\u7a0b\u5ea6\u3002
\u958b\u767c\u8005\u5982\u679c\u8a8d\u70ba\u4ed6\u5011\u4f7f\u7528\u7684\u5de5\u5177\u6216\u5de5\u4f5c\u6d41\u7a0b\u662f\u76f4\u89c0\u7684\uff0c\u5c07\u6703\u63d0\u5347 50% \u7684\u5275\u65b0\u3002 \u53cd\u4e4b\uff0c\u5247\u4e0d\u50c5\u662f\u6e1b\u4f4e\u6548\u7387\uff0c\u66f4\u53ef\u80fd\u964d\u4f4e\u7559\u4efb\u7684\u610f\u9858\uff0c \u63db\u53e5\u8a71\u8aaa\uff0c\u9019\u6703\u5f71\u97ff\u500b\u4eba\u3001\u5718\u968a\u548c\u7d44\u7e54\u7684\u54c1\u8cea\u3002
"},{"location":"essay/devex-in-action/#\u7e3d\u7d50","title":"\u7e3d\u7d50","text":"\u7e3d\u7d50\u4f86\u8aaa\uff0c\u964d\u4f4e\u958b\u767c\u7684\u8a8d\u77e5\u8ca0\u8377\u5c0d\u65bc\u500b\u4eba\u3001\u5718\u9ad4\u548c\u7d44\u7e54\u662f\u6700\u6709\u6548\u7684\u3002
\u4f46\u662f\u9019\u908a\u7684\u7cbe\u83ef\u5728\u65bc \u7528\u6578\u64da\u5c55\u793a\uff0c\u63db\u53e5\u8a71\u8aaa\uff0c\u6211\u5011\u53ef\u4ee5\u77e5\u9053\u5982\u4f55\u8861\u91cf\u6539\u8b8a\u3002 \u4f8b\u5982\u516c\u53f8\u958b\u59cb\u8a2d\u8a08\u4e00\u500b\u5de5\u5177\u52a0\u901f\u958b\u767c\uff0c\u9019\u6a23\u7684\u512a\u5316\u5982\u679c\u53ef\u4ee5\u900f\u904e\u6578\u5b57\u77e5\u9053\u67d0\u65b9\u9762\u63d0\u5347 40%\uff0c\u67d0\u65b9\u9762\u964d\u4f4e 10%\uff0c \u5c31\u53ef\u4ee5\u77e5\u9053\u9019\u5de5\u5177\u7684\u512a\u52e2\u548c\u52a3\u52e2\uff0c\u9032\u4e00\u6b65\u6539\u5584\u3002
\u9019\u6a23\u7684\u6a5f\u5236\u4e0d\u7ba1\u662f\u516c\u53f8\u76ee\u524d\u5c0d\u65bc\u512a\u5316\u958b\u767c\u9ad4\u9a57\u662f\u525b\u8d77\u6b65\u9084\u662f\u6b63\u5728\u8def\u4e0a\uff0c\u90fd\u80fd\u6709\u6a5f\u5236\u8861\u91cf\u548c\u8a2d\u5b9a\u76ee\u6a19\u3002
1=\u5f9e\u4e0d\u30012=\u9bae\u5c11\u30013=\u5076\u723e\u30014=\u7d93\u5e38\u30015=\u5e7e\u4e4e\u00a0\u21a9\u21a9\u21a9\u21a9\u21a9\u21a9
1=\u6578\u500b\u5c0f\u6642\u4e00\u6b21\u30012=\u6bcf\u65e5\u81f3\u5c11\u4e00\u6b21\u30013=\u6bcf\u5169\u5929\u81f3\u5c11\u4e00\u6b21\u30014=\u6bcf\u9031\u81f3\u5c11\u4e00\u6b21\u30015=\u6bcf\u5468\u5c0f\u65bc\u4e00\u6b21\u00a0\u21a9
1=\u6bcf\u5169\u5929\u81f3\u5c11\u4e00\u6b21\u30012=\u6bcf\u5468\u81f3\u5c11\u4e00\u6b21\u30013=\u6bcf\u5169\u5468\u81f3\u5c11\u4e00\u6b21\u30014=\u6bcf\u6708\u81f3\u5c11\u4e00\u6b21\u30015=\u6bcf\u6708\u5c0f\u65bc\u4e00\u6b21\u00a0\u21a9
1=0-20%\u30012=21-40%\u30013=41-60%\u30014=61-80%\u30015=81-100%\u00a0\u21a9
1=\u975e\u5e38\u7cdf\u30012=\u7cdf\u7cd5\u30013=\u53ef\u63a5\u53d7\u30014=\u597d\u30015=\u975e\u5e38\u597d\u00a0\u21a9\u21a9
1=\u975e\u5e38\u4e0d\u540c\u610f\u30012=\u4e0d\u540c\u610f\u30013=\u7121\u6cd5\u6c7a\u5b9a\u30014=\u540c\u610f\u30015=\u975e\u5e38\u540c\u610f\u00a0\u21a9\u21a9\u21a9\u21a9\u21a9\u21a9
1=\u6bcf\u65e5\u30012=\u6bcf\u9031\u30013=\u6bcf\u6708\u30014=\u6bcf\u6578\u6708\u30015=\u5f9e\u4e0d\u00a0\u21a9
GPL \u548c AGPL \u4e0d\u7ba1\u662f\u5565\u7248\u672c\u90fd\u8981\u6c42\u76f4\u63a5\u5f15\u7528\u8a72\u7a0b\u5f0f\u5eab\u7684\u5c08\u6848\u8981\u516c\u958b\uff08\u5118\u7ba1\u6709\u4e9b\u4eba\u53cd\u5c0d\uff09\u3002
If you are not directly linking against the GPL'd library, then your software should not need to be licensed as GPL.
Reference
\u4f46\u662f LGPL \u6216 GPL with classpath exception \u53ef\u4ee5\u5141\u8a31\u5f15\u7528\u5957\u4ef6\uff0c\u4f46\u662f\u4e0d\u5141\u8a31\u76f4\u63a5\u8907\u88fd\u8cbc\u4e0a\u9032\u7a0b\u5f0f\u78bc\u4e2d\u3002
There are less permissive licenses like the LGPL and the GPL with classpath exception that allow the code to be linked by any other code (so in Java terms, you can have dependencies with those licenses), but not embedded (or, more likely copy-pasted).
Reference
\u4e0b\u8868\u662f\u4e0d\u540c\u8a31\u53ef\u9593\u7684\u6bd4\u8f03\u3002
The easiest way to check all your npm dependency
\u5728\u591a\u500b Repo \u4e2d\u627e\u5230\u76f8\u4f9d\u5957\u4ef6\u662f\u5426\u6709\u4f7f\u7528 GPL \u7684\u7b56\u7565\u6703\u662f\uff1a
\u7528\u4e86\u54ea\u4e9b script \u627e\u8cc7\u6599\u3002
"},{"location":"essay/gpl-check/#npm","title":"NPM","text":"# data/derived/package.json.deps.txt has package name in second column, same as composer\n$ awk '{print $2}' data/derived/package.json.deps.txt \\\n | sort -u \\\n | xargs -P 8 -I{} bash -c 'curl \"https://registry.npmjs.org/{}/latest\" -s \\\n | jq -r '\"'\"'select(.name != null) | [.name, .license|tostring] | @tsv'\"'\"' \\\n | tee -a data/derived/package.json.deps.license.txt'\n
"},{"location":"essay/gpl-check/#composer","title":"Composer","text":"$ awk '{print $2}' data/derived/composer.json.deps.txt \\\n # \u907f\u514d\u7279\u5b9a vendor \u7684\u5957\u4ef6\n | grep -v '^104' \\\n # \u907f\u514d\u975e\u5957\u4ef6\u7684\u76f8\u4f9d\uff0c\u4f8b\u5982 php\n | grep '\\/' \\\n | sort -u \\\n | xargs -P 8 -I{} bash -c '\n curl \"https://repo.packagist.org/p2/$1.json\" -s \\\n | jq -r \".packages[] | to_entries | .[].value | select(.name != null) | [.name, .license|tostring] | @tsv\" \\\n | sed \"s/\\\",\\\"/\\\\t/g\" | sed \"s/\\\\[\\\"//\" | sed \"s/\\\"\\\\]//\" \\\n | tee -a data/derived/composer.json.deps.license.txt' - {}\n
"},{"location":"essay/gpl-check/#maven","title":"Maven","text":"Maven \u9700\u8981\u7684\u6b65\u9a5f\u6709\u9ede\u591a\uff0c\u5148\u53d6\u6700\u65b0\u7248\u672c\u518d\u53d6\u8a72\u7248\u672c\u7684 POM \u6a94\uff0c\u4ee5\u4e0b\u4ee5 org.springframework.boot
\u7684 spring-boot-starter-data-jpa
\u70ba\u4f8b\u3002
scripts/parse-pom.js \u8a73\u898b\u65bc\u6b64
$ base='https://repo1.maven.org/maven2'\n# \u4e0d\u662f `.` \u505a\u5340\u9694\u800c\u662f `/`\n$ project='org/springframework/boot'\n$ app='pring-boot-starter-data-jpa'\n# \u53d6\u5f97\u6307\u5b9a\u5957\u4ef6\u6700\u65b0\u7248\u672c\n$ curl -s \"$base/$project/$app/maven-metadata.xml\" \\\n | grep '<latest>' \\\n # \u79fb\u9664 <latest>2.7.1</latest> \u7684 tag\n | cut -c 13- | rev | cut -c 10- | rev\n2.7.1\n\n# \u53d6\u8a72\u7248\u672c\u7684 POM \u6a94\n$ curl \"$base/$project/$app/2.7.1/$app-2.7.1.pom\" \\\n | node scripts/parse-pom.js\norg.springframework.boot pring-boot-starter-data-jpa Apache-License-Version-2.0\n
\u4f9d\u7167\u4e0a\u9762\u7684\u908f\u8f2f\uff0c\u5c31\u53ef\u4ee5\u4f7f\u7528\u4e0b\u9762\u7684 script\uff1a
build.gradle
\u548c pom.xml
\u5dee\u4e0d\u591a\uff0c\u53ea\u6709\u7b2c\u4e00\u6b65\u7684\u7be9\u9078\u9700\u8981\u8abf\u4e00\u4e0b\uff0c pom.xml
\u53ea\u9700\u8981\u7be9\u9078 dep
\u5c31\u53ef\u4ee5
.
5. \u628a\u7d50\u679c\u4ee5 /
\u9023\u7d50$ file='data/derived/build.gradle.deps'\n$ filter='NF >= 4'\n$ filter=\"$filter && \\$2 ~ /.*dependency.*/\"\n$ filter=\"$filter && \\$3 !~ /(104|jar|androidx|com\\.cac\\.)/\"\n$ filter=\"$filter && \\$3 ~ /\\./\"\n$ awk \"$filter {print \\$3 \\\"/\\\" \\$4}\" \"$file.txt\" | \\\n sed 's/\\./\\//g' | \\\n sort -u > \"$file.trimmed.txt\"\n\n$ cat data/derived/build.gradle.deps.trimmed.txt | \\\n xargs -P 8 -I{} bash -c '\n curl -s \"$base/$1/maven-metadata.xml\" \\\n | grep \"<latest>\" \\\n | cut -c 13- | rev | cut -c 10- | rev \\\n | awk \"{print \\\"$1 \\\" \\$1}\" >> \"$file.latest.txt\"' - {}\n\n$ cat \"$file.latest.txt\" | \\\n awk '{print $1 \"/\" $2 \" \" $1 \"-\" $2 \".pom\"}' | \\\n sed 's/ .*\\//\\//g' | \\\n xargs -P 8 -I{} bash -c '\n curl \"$base/$1\" -s \\\n | node scripts/parse-pom.js \\\n >> \"$file.license.txt\"' - {}\n
"},{"location":"essay/gpl-check/#\u7d50\u679c","title":"\u7d50\u679c","text":"\u67e5\u627e\u7d50\u679c
"},{"location":"essay/gpl-check/#npm_1","title":"NPM","text":"build.gradle
\u548c pom.xml
\u90fd\u8981\u8dd1\u5b8c\u3002
Nginx using calendar versioning, and it release stable version every 2 years.
If you are wondering what changes between 1.18 and 1.20 then you can see all changes in 1.19. The reason 1.22 has additional version (1.22.1) is because CVE (CVE-2022-41741, CVE-2022-41742)
Message prefix \ud83d\udc41\ufe0f is change that I think it is important.
You can grep the messages by raw changes: by-versions or by structured: by-module/by-protocols/others.
"},{"location":"essay/nginx-changelog/#global","title":"Global","text":"Security:
resolver
directive was used, allowing an attacker who is able to forge UDP packets from the DNS server to cause worker process crash or, potentially, arbitrary code execution (CVE-2021-23017). 1.21.0Feature:
min_free
parameter of the proxy_cache_path
, fastcgi_cache_path
, scgi_cache_path
, and uwsgi_cache_path
directives. Thanks to Adam Bambuch. 1.19.1userid_flags
directive. 1.19.3proxy_cookie_flags
directive. 1.19.3proxy_cookie_flags
directive can now contain variables. 1.19.8$connection_time
variable. 1.19.10keepalive_time
directive. 1.19.10Bugfix:
negative size buf in writer
alerts might appear in logs if a memcached server returned a malformed response. 1.19.1large_client_header_buffers
sizes were used in different virtual servers. 1.19.2[crit] cache file ... has too long header
messages might appear in logs if caching was used and the backend returned responses with the Vary
header line. 1.19.3stale-if-error
cache control extension was erroneously applied if backend returned a response with status code 500, 502, 503, 504, 403, 404, or 429. 1.19.3upstream sent frame for closed stream
errors might occur when working with gRPC backends. 1.19.5GET http://example.com?args HTTP/1.0
. 1.19.6no live upstreams
errors if a server
inside upstream
block was marked as down
. 1.19.6add_trailer
directive. 1.19.7return
directive was used with the image_filter
or xslt_stylesheet
directives. 1.19.7zero size buf in output
alerts might appear in logs if an upstream server returned an incorrect response during unbuffered proxying; the bug had appeared in 1.19.1. 1.19.7auth_delay
or limit_req
delay, or when working with backends. 1.19.9\"
, <
, >
, \\
, ^
, ``,
{,
|, and
}` characters when proxying with changed URI. 1.21.1info
level instead of error
; the bug had appeared in 1.21.1. 1.21.4$content_length
variable when using chunked transfer encoding. 1.21.4Connection: keep-alive
header line in responses during graceful shutdown of old worker processes. 1.21.6EPOLLEXCLUSIVE
on Linux client connections were unevenly distributed among worker processes. 1.21.6Change:
keepalive_requests
directive was changed to 1000. 1.19.10Host
request header line. 1.21.1Content-Length
and Transfer-Encoding
header lines are present in the request. 1.21.1Transfer-Encoding
header line. 1.21.2sendfile_max_chunk
directive was changed to 2 megabytes. 1.21.4Workaround:
[crit] SSL_write() failed
messages might appear in logs when using OpenSSL 1.1.1. 1.19.3gzip filter failed to use preallocated memory
alerts appeared in logs when using zlib-ng. 1.19.10Grouped by modules.
Bugfix:
mp4_start_key_frame
directive in the ngx_http_mp4_module. Thanks to Tracey Jaquith. 1.21.4Feature:
fastopen
parameter of the listen
directive in the stream module. Thanks to Anbang Wen. 1.21.0SSL_sendfile()
when using OpenSSL 3.0. 1.21.4ssl_alpn
directive in the stream module. 1.21.4proxy_half_close
directive in the stream module. 1.21.4Feature:
proxy_smtp_auth
directive in mail proxy. 1.19.4proxy_protocol
parameter of the listen
directive, the proxy_protocol
and set_real_ip_from
directives in mail proxy. 1.19.8max_errors
directive in the mail proxy module. 1.21.0Bugfix:
Grouped by protocols.
"},{"location":"essay/nginx-changelog/#ssl","title":"SSL","text":"Feature:
ssl_reject_handshake
directive. 1.19.4ssl_conf_command
, proxy_ssl_conf_command
, grpc_ssl_conf_command
, and uwsgi_ssl_conf_command
directives. 1.19.4proxy_ssl_certificate
, proxy_ssl_certificate_key
grpc_ssl_certificate
, grpc_ssl_certificate_key
, uwsgi_ssl_certificate
, and uwsgi_ssl_certificate_key
directives. 1.21.0Auth-SSL-Protocol
and Auth-SSL-Cipher
header lines are now passed to the mail proxy authentication server. Thanks to Rob Mueller. 1.21.2$ssl_alpn_protocol
variable. 1.21.4$ssl_curve
variable. 1.21.5Bugfix:
ssl_ocsp
directive. 1.19.1SSL_shutdown() failed (SSL: ... bad write retry)
messages might appear in logs. 1.19.2ssl_ocsp
directive was used. 1.19.2SSL_shutdown() failed (SSL: ... bad write retry)
messages might appear in logs; the bug had appeared in 1.19.2. 1.19.3@SECLEVEL=N
in the ssl_ciphers
directive. 1.21.2ssl_session_ticket_key
when using TLSv1.3. 1.21.6Change:
Bugfix:
upstream sent frame for closed stream
errors might occur when working with gRPC backends. 1.19.5Feature
Bugfix:
resolver
directive was not specified. 1.19.0upstream sent response body larger than indicated content length
errors might occur when working with gRPC backends; the bug had appeared in 1.19.1. 1.19.9Bugfix:
error_page
directive. 1.19.3keepalive_timeout 0
; the bug had appeared in 1.19.7. 1.19.8Content-Length
header line was not present in the request. 1.21.2aio_write
directive. 1.21.4sendfile
and aio
directives. 1.21.5Change:
lingering_close
, lingering_time
, and lingering_timeout
directives now work when using HTTP/2. 1.19.1http2_max_field_size
and http2_max_header_size
directives have been removed, the large_client_header_buffers
directive should be used instead. 1.19.7http2_recv_timeout
, http2_idle_timeout
, and http2_max_requests
directives have been removed, the keepalive_timeout
and keepalive_requests
directives should be used instead. 1.19.7Bugfix:
zero size buf in output
alerts might appear in logs if a FastCGI server returned an incorrect response; the bug had appeared in 1.19.1. 1.19.2Change:
from 1.19.0 to 1.22.1(stable)
"},{"location":"essay/nginx-changelog/#1216","title":"1.21.6","text":"\ud83d\udcc6 25 Jan 2022
\ud83d\udcc6 28 Dec 2021
\ud83d\udcc6 02 Nov 2021
\ud83d\udcc6 07 Sep 2021
\ud83d\udcc6 31 Aug 2021
\ud83d\udcc6 06 Jul 2021
\ud83d\udcc6 25 May 2021
\ud83d\udcc6 13 Apr 2021
\ud83d\udcc6 30 Mar 2021
\ud83d\udcc6 09 Mar 2021
\ud83d\udcc6 16 Feb 2021
\ud83d\udcc6 15 Dec 2020
\ud83d\udcc6 24 Nov 2020
\ud83d\udcc6 27 Oct 2020
\ud83d\udcc6 29 Sep 2020
\ud83d\udcc6 11 Aug 2020
\ud83d\udcc6 07 Jul 2020
\ud83d\udcc6 26 May 2020
Node.js v14 \u7248\u5c07\u65bc 2023-04-30 \u8d77\u4e0d\u518d\u652f\u63f4\uff08EOL\uff09\uff0c \u800c v16 \u7248\u5c07\u65bc 2023-09-11 \u904e\u671f\uff0c \u7531\u65bc\u6642\u9593\u76f8\u5dee\u4e0d\u5927\uff0c\u52e2\u5fc5\u6703\u6709\u8a31\u591a\u4eba\u5f9e v14 \u76f4\u63a5\u5347\u5230 v18\uff082025-04-30\uff09\u3002
\u9019\u88e1\u6703\u5217\u51fa\u4e00\u4e9b\u9700\u8981\u6ce8\u610f\u7684\u9ede\u3002
\u9084\u6709\u5176\u4ed6\u5730\u65b9\u4e5f\u6709\u6458\u8981\u6574\u7406\u55ce\u7576\u7136\u6709\uff0c\u4f60\u9664\u4e86\u76f4\u63a5\u5403\u751f\u9b5a\u7247\uff1a
\u4e5f\u53ef\u4ee5\u5403\u5176\u4ed6\u4eba\u716e\u904e\u7684\uff1a
v14 \u5230 v18 \u652f\u63f4\u7684\u5354\u5b9a\u5f9e ES2019 \u5347\u5230 ES2023\uff0c \u4f46\u8981\u6ce8\u610f v14 \u4e26\u4e0d\u662f\u6bcf\u500b ES2019 \u4ee5\u4e0a\u7684\u529f\u80fd\u90fd\u4e0d\u652f\u63f4\uff0c \u4f8b\u5982 v14 \u652f\u63f4 private class method\uff0c\u4f46\u9019\u537b\u662f ES2022 \u624d\u958b\u59cb\u652f\u63f4\u7684 API\uff1a
class MyClass {\n #myPrivateField = 'this is private';\n}\n
\u8a73\u7d30\u7684\u5c0d\u7167\uff0c\u4f60\u53ef\u4ee5\u5230 node.green \u67e5\u770b\u3002
"},{"location":"essay/node-changelog-14-18/#v8","title":"V8","text":"Node.js \u6bcf\u6b21\u5347\u7248\u90fd\u6703\u66f4\u65b0 V8 \u7684\u7248\u672c\uff0c \u6240\u6709\u7248\u672c\u7684\u66f4\u65b0\u90fd\u53ef\u4ee5\u5230 Chrome road-map \u67e5\u770b\u3002 v14 \u4f7f\u7528\u7684\u7248\u672c\u662f 8.6\uff0c\u800c v18 \u5247\u662f 10.1\u3002
\u6240\u8b02 V8 10.1 \u7248\u672c\uff0c \u5c31\u662f\u5c0d\u61c9 Chrome 101 \u7248\uff0c\u8a73\u898b V8 version numbering scheme\u3002
V8 \u7684\u5347\u7248\u5927\u81f4\u5dee\u7570\u5728\u65bc\u5c0d ES \u7684\u9069\u61c9\u548c\u6548\u80fd\u7684\u8abf\u6821\u3002 \u5982\u679c\u4f60\u60f3\u8981\u77e5\u9053 V8 \u65b0\u589e\u6216\u8abf\u6574\u4e86\u54ea\u4e9b API \u4f60\u53ef\u4ee5\u900f\u904e\uff1a
git log branch-heads/A.B..branch-heads/X.Y include/v8\\*.h\n
\u4f86\u67e5\u770b\uff0c\u8a73\u898b api-changes\u3002
"},{"location":"essay/node-changelog-14-18/#typescript","title":"TypeScript","text":"TypeScript \u7684\u8a2d\u5b9a\u4e5f\u6703\u56e0\u70ba Node.js \u5347\u7248\u800c\u6709\u6539\u8b8a\uff0c\u5efa\u8b70\u53ef\u4ee5\u53c3\u8003\u5b98\u65b9\u63a8\u85a6\u7684\u8a2d\u5b9a\u6a94\uff1a
v14 \u4f7f\u7528\u7684 openssl \u7248\u672c\u662f v1.1.1\uff0c\u4f46\u662f v18 \u4f7f\u7528\u7684 openssl \u662f v3.0\uff0c \u76f8\u95dc\u5dee\u7570\u53ef\u4ee5\u770b openssl migration_guide\u3002
\u5c0d\u65bc\u7db2\u8def\u670d\u52d9\u4f86\u8aaa\uff0c\u6700\u9700\u8981\u6ce8\u610f\u7684\u61c9\u8a72\u662f TLS \u76f8\u95dc\u7684\u5dee\u7570\u3002 \u5728 v3.0 \u4e2d\uff0c\u9810\u8a2d\u6703\u62d2\u7d55 server \u4f7f\u7528\u4e0d\u5b89\u5168\u7684 renegotiation \u6a5f\u5236\uff0c \u8a73\u898b RFC-5736 TLS Renegotiation Extension\u3002 \u6211\u5011\u53ef\u4ee5\u900f\u904e openssl
\u7684\u6307\u4ee4\u6aa2\u67e5\u4f60\u7684\u670d\u52d9\u662f\u5426\u7b26\u5408\u9019\u500b\u5354\u5b9a\uff1a
$ openssl s_client -connect legacy-server.example.com:443\nCONNECTED(00000005)\n8056015BF87F0000:error:0A000152:SSL routines:final_renegotiate:unsafe legacy renegotiation disabled:ssl/statem/extensions.c:893:\n---\nno peer certificate available\n---\nNo client certificate CA names sent\n---\nSSL handshake has read 53 bytes and written 338 bytes\nVerification: OK\n---\nNew, (NONE), Cipher is (NONE)\nSecure Renegotiation IS NOT supported\nCompression: NONE\nExpansion: NONE\nNo ALPN negotiated\nSSL-Session:\n Protocol : TLSv1.2\n Cipher : 0000\n Session-ID: \n Session-ID-ctx: \n Master-Key: \n PSK identity: None\n PSK identity hint: None\n SRP username: None\n Start Time: 1681355997\n Timeout : 7200 (sec)\n Verify return code: 0 (ok)\n Extended master secret: no\n---\n
\u53ef\u4ee5\u6ce8\u610f\u5230 Secure Renegotiation IS NOT supported
\u9019\u500b\u8a0a\u606f\uff0c \u4ee3\u8868\u9019\u500b\u670d\u52d9\u4f7f\u7528\u4e0d\u5b89\u5168\u9023\u7dda\uff0c\u6240\u4ee5\u8acb\u6c42\u65b9\u62d2\u7d55\u9019\u6b21\u9023\u7dda\u3002 \u4e5f\u56e0\u6b64\u5982\u679c\u4f60\u7684\u74b0\u5883\u9084\u5728\u4f7f\u7528\u820a\u7248\u7684 TLS \u5be6\u4f5c\u6a5f\u5236\uff0c\u5c31\u9700\u8981\u66f4\u65b0\u6216\u8a2d\u5b9a\u3002
\u5982\u679c\u4f60\u900f\u904e tcpdump \u7684\u624b\u6bb5\u4f86\u53d6\u5f97\u5c01\u5305\u8cc7\u8a0a\u6642\uff0c \u4f60\u53ef\u4ee5\u5728 server hello \u7684\u5c01\u5305\u4e2d\uff0c\u770b\u5230\u4ed6\u7f3a\u5c11\u8a72 extension \u7684\u8cc7\u8a0a\u3002
Extension: renegotiation_info (len=1)\nType: renegotiation_info (65281)\nLength: 1\nRenegotiation Info extension\n Renegotiation info extension length: 0\n
\u5982\u679c\u74b0\u5883\u5f88\u96e3\u6539\u8b8a\uff0c\u53ef\u4ee5\u76f4\u63a5\u5728 HTTP client \u4e0a\u505a\u8abf\u6574\uff1a
import { constants } from 'node:crypto'\naxios.create({\n httpsAgent: new https.Agent({\n secureOptions: constants.SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION,\n }),\n});\n
\u4e5f\u53ef\u4ee5\u5728\u555f\u52d5\u7684\u6642\u5019\u9935\u7d66 OpenSSL \u8a2d\u5b9a\u6a94\uff1a
nodejs_conf = openssl_init\n\n[openssl_init]\nssl_conf = ssl_sect\n\n[ssl_sect]\nsystem_default = system_default_sect\n\n[system_default_sect]\nOptions = UnsafeLegacyRenegotiation\n
\u7136\u5f8c\u555f\u52d5 Node.js\uff1a
# \u4e5f\u53ef\u4ee5\u900f\u904e\u74b0\u5883\u8b8a\u6578 OPENSSL_CONF\uff0c\u4f46\u662f\u4e0b\u9762\u512a\u5148\u6b0a\u8f03\u9ad8\u3002\nnode --openssl-config=openssl.conf\n
"},{"location":"essay/node-changelog-14-18/#\u904e\u6642\u529f\u80fd","title":"\u904e\u6642\u529f\u80fd","text":"\u5b8c\u6574\u904e\u6642\uff08deprecated\uff09\u529f\u80fd\u7684\u5217\u8868\u53ef\u4ee5\u53c3\u7167\u5b98\u65b9\u6587\u4ef6\u3002 \u4f46\u8981\u6ce8\u610f\u9019\u500b\u6587\u4ef6\u5305\u542b\u6b77\u4f86\u6240\u6709\u904e\u6642\u529f\u80fd\uff0c\u81f3\u65bc v14 \u5230 v18 \u4e4b\u9593\u904e\u6642\u7684\u529f\u80fd\uff0c \u53ef\u4ee5\u900f\u904e\u6bd4\u5c0d v14 \u7684\u904e\u6642\u529f\u80fd\uff0c \u627e\u51fa\u90a3\u4e9b\u591a\u51fa\u4f86\u7684\u904e\u6642\u529f\u80fd\u5c31\u662f\u5f8c\u9762\u624d\u65b0\u589e\u7684\u3002
\u4f8b\u5982\uff1aDEP0153 dns.lookup
and dnsPromises.lookup
options type coercion\u3002
\u9019\u88e1\u5217\u51fa\u503c\u5f97\u6ce8\u610f\u7684\u9ede\uff1a
request.abort()
\u7684\u68c4\u7528\uff0c \u5efa\u8b70\u6539\u6210 request.destroy()
\u9019\u88e1\u6574\u7406\u4e00\u4e9b\u6709\u8da3\u7684\u65b0\u529f\u80fd\uff1a
import { setTimeout } from 'timers/promises';\nasync function run() {\n await setTimeout(5000);\n}\n
headersTimeout
\uff1a\u8b80\u53d6 HTTP Header \u8d85\u904e 60 \u79d2\u5f8c\u6703\u4e2d\u65b7\u9023\u7ddarequestTimeout
\uff1a\u8655\u7406 HTTP \u8acb\u6c42\u8d85\u904e 5 \u5206\u9418\u5f8c\u6703\u4e2d\u65b7\u9023\u7dda\u4e0b\u9762\u662f\u4e00\u4e9b\u6709\u8da3\u4f46\u9084\u5728\u958b\u767c\u968e\u6bb5\u7684\u529f\u80fd\uff1a
const myInit = {\n method: \"GET\",\n headers: {\n Accept: \"image/jpeg\",\n },\n mode: \"cors\",\n cache: \"default\",\n};\n\nfetch(new Request(\"flowers.jpg\"), myInit)\n
import test from 'node:test';\nimport assert from 'assert';\n\ntest('synchronous passing test', (t) => {\n // This test passes because it does not throw an exception.\n assert.strictEqual(1, 1);\n});\n
\u9019\u6b21\u5347\u7248\uff0c\u5e7e\u4e4e\u662f\u7121\u75db\u5347\u7248\u3002 \u4e5f\u56e0\u70ba\u5e73\u5e38\u6709\u5728\u7528\u975c\u614b\u898f\u5247\u548c\u55ae\u5143\u6e2c\u8a66\u4f86\u9a57\u8b49\uff0c\u6240\u4ee5\u5347\u7248\u7684\u6642\u5019\u4e5f\u8f03\u6709\u4fe1\u5fc3\u3002 \u5c31\u653e\u5fc3\u7d66\u5b83\u5347\u4e0a\u53bb\u5427\uff01
"},{"location":"essay/pls-sem/","title":"PLS-SEM\uff1a\u91cf\u5316\u62bd\u8c61\u6307\u6a19","text":"PLS-SEM \u662f\u4e00\u7a2e\u9a57\u8b49\u5047\u8a2d\u3001\u6578\u64da\u5316\u6982\u5ff5\u7684\u5de5\u5177\uff0c\u672c\u7bc7\u5c07\u89e3\u91cb\u5176\u4e2d\u7684\u610f\u7fa9\u548c\u7528\u6cd5\u3002
\u53c3\u7167
\u672c\u7bc7\u53c3\u7167 \u300cPartial Least Squares Structural Equation Modeling (PLS-SEM) Using R: A Workbook\u300d\u3002
\u4f5c\u8005\uff1aJoseph F. Hair Jr., G. Tomas M. Hult, Christian M. Ringle, Marko Sarstedt, Nicholas P. Danks, Soumya Ray
"},{"location":"essay/pls-sem/#\u7d50\u69cb\u8aaa\u660e","title":"\u7d50\u69cb\u8aaa\u660e","text":"\u5de6\u53f3\u5169\u908a\u5404\u6709\u4e00\u500b\u6a21\u578b\uff0c\u7a31\u4f5c \u6e2c\u91cf\u6a21\u578b\uff08measurement model\uff09\uff0c \u6bcf\u500b\u6a21\u578b\u7531\u69cb\u9762\uff08Y1
\u5230 Y4
\uff0cconstruct\uff09\u548c\u8b8a\u6578\uff08x1
\u5230 x10
\uff0cvariable\uff09\u7d44\u6210\u3002 \u4e2d\u9593\u7684\u6a21\u578b\u5247\u7a31\u4f5c \u7d50\u69cb\u6a21\u578b\uff08structural model\uff09\u3002
x1
\u5230 x10
\u90fd\u662f\u4e00\u7a2e\u6307\u6a19\u8b8a\u6578\uff08\u6216\u6f5b\u5728\u8b8a\u6578\u3001\u9805\u76ee\uff0cindicator variable, indicator, latent variable, item\uff09\uff1a
x1
\u5230 x6
\uff09\u7a31\u70ba\u5f62\u6210\u6027\u6307\u6a19 \uff08\u6216\u5916\u751f\u6f5b\u5728\u8b8a\u6578\uff0cformative indicator, exogenous latent variable\uff09\uff1bx7
\u5230 x9
\uff09\u7a31\u70ba\u53cd\u6620\u6027\u6307\u6a19 \uff08\u6216\u5167\u751f\u6f5b\u5728\u8b8a\u6578\uff0creflective indicator, endogenous latent variable\uff09\u3002\u7531\u4e0a\u95dc\u4fc2\u800c\u5f97\u7684\u5de6\u908a\u6a21\u578b\u5c31\u662f \u5f62\u6210\u6027\u6e2c\u91cf\u6a21\u578b\uff08formative measurement model\uff09\u3001 \u53f3\u908a\u5247\u662f \u53cd\u6620\u6027\u6e2c\u91cf\u6a21\u578b\uff08reflective measurement model\uff09\u3002
\u5f62\u6210\u6027\u6e2c\u91cf\u6a21\u578b\u4e2d\u69cb\u9762\u548c\u8b8a\u6578\u90fd\u6703\u88ab\u7528\u4f86\u89e3\u91cb\uff0c\u4f8b\u5982 x1
\u5230 x3
\u7528\u4f86\u89e3\u91cb Y1
\u3001Y1
\u7528\u4f86\u89e3\u91cb Y2
\uff1b \u53cd\u4e4b\uff0c\u53cd\u6620\u6027\u6e2c\u91cf\u6a21\u578b\u4ea6\u5982\u662f\u3002\u800c\u76f8\u5c0d
\u7576\u69cb\u9762\u6216\u8b8a\u6578\u9700\u8981\u548c\u5176\u4ed6\u9805\u76ee\u5171\u8b8a\u6642\uff0c\u5c31\u6703\u6709\u8aa4\u5dee\uff08error terms\uff0ce7
\u5230 e9
\u548c z3
\u5230 z4
\uff09\uff0c \u9019\u662f\u56e0\u70ba\u5728\u5617\u8a66\u300c\u8a08\u7b97\u300d\uff08\u6216\u5171\u8b8a\uff09\u6642\uff0c\u5fc5\u7136\u6703\u56e0\u70ba\u591a\u7b46\u6578\u64da\u9593\u7684\u5dee\u7570\u800c\u7522\u751f\u8aa4\u5dee\u3002 \u800c\u5f62\u6210\u6027\u6e2c\u91cf\u6a21\u578b\u56e0\u70ba\u662f\u7528\u4f86\u89e3\u91cb\u69cb\u9762\uff0c\u6240\u4ee5\u6700\u7d42\u7522\u751f\u7684\u662f\u5404\u500b\u8b8a\u6578\u89e3\u91cb\u69cb\u9762\u6642\u7684\u91cd\u8981\u6027\u3002 \u63db\u53e5\u8a71\u8aaa\uff0c\u5f62\u6210\u6027\u6e2c\u91cf\u6a21\u578b\u7684\u8b8a\u6578\u5f7c\u6b64\u662f\u7368\u7acb\u7684\u6240\u4ee5\u4e0d\u6703\u7522\u751f\u8aa4\u5dee\uff0c \u800c\u53cd\u6620\u6027\u6e2c\u91cf\u6a21\u578b\u7684\u8b8a\u6578\u5f7c\u6b64\u662f\u76f8\u4f9d\u7684\u6240\u4ee5\u6703\u7522\u751f\u8aa4\u5dee\u3002
\u6700\u5f8c Y4
\u56e0\u70ba\u53ea\u6709\u4e00\u500b\u6307\u6a19\u6240\u4ee5\u6307\u6a19\u548c\u69cb\u9762\u7684\u95dc\u4fc2\u4e26\u975e\u55ae\u5411\u7684\uff0c\u800c\u662f\u540c\u6642\u7528\u4f86\u300c\u89e3\u91cb\u300d\u548c\u300c\u8a08\u7b97\u300d\u3002
\u6e2c\u91cf\u7406\u8ad6\uff08measurement variable\uff09\u5c31\u662f\u91dd\u5c0d\u300c\u5982\u4f55\u8a08\u7b97\u51fa\u8b8a\u6578\u548c\u69cb\u9762\u300d\u800c\u767c\u5c55\u7684\u7406\u8ad6\u3002
\u7576\u5047\u8a2d\u5efa\u7acb\u6642\uff0c\u7a76\u7adf\u8981\u4f7f\u7528\u53cd\u6620\u6027\u6216\u5f62\u6210\u6027\u69cb\u9762\uff0c\u9084\u6709\u8981\u4f7f\u7528\u591a\u500b\u6216\u55ae\u500b\u8b8a\u6578\u6642\uff0c\u662f\u5efa\u7acb\u6a21\u578b\u6642\u7684\u57fa\u790e\u3002 \u63db\u53e5\u8a71\u8aaa\uff0c\u69cb\u9762\u7684\u9806\u5e8f\u548c\u4f4d\u7f6e\u662f\u4f9d\u8cf4\u65bc\u5047\u8a2d\u6216\u8005\u7814\u7a76\u54e1\u7684\u7d93\u9a57\u548c\u77e5\u8b58\u3002
"},{"location":"essay/pls-sem/#\u6bd4\u8f03-cb-sem","title":"\u6bd4\u8f03 CB-SEM","text":"\u4f86\u6e90\u9019\u6bb5\u63d0\u5230\u4e86\u5f88\u591a\u300c\u7814\u7a76\u8868\u660e\u300d\uff0c\u9084\u6709\u9810\u8a2d\u6027\u8a00\u8ad6\uff0c\u4f8b\u5982\u300c\u8a31\u591a\u4f86\u6e90\u90fd\u6703\u5c0e\u81f4\u8a08\u91cf\u4e0d\u78ba\u5b9a\u6027\u300d\uff0c \u5efa\u8b70\u53c3\u7167\u8ad6\u6587\u4e2d 1.3 \u7ae0\u300cPLS-SEM and CB-SEM\u300d\u7684\u76f8\u95dc\u9023\u7d50\u3002
\u611f\u60f3
\u500b\u4eba\u8a8d\u70ba\u9019\u6bb5\u662f\u9019\u7bc7\u6587\u7ae0\u7684\u91cd\u9ede\uff0cPLS-SEM \u6709\u5f88\u591a\u5de5\u5177\u53ef\u4ee5\u5be6\u73fe\uff0c\u7db2\u8def\u4e0a\u4e5f\u6709\u5f88\u591a\u5982\u4f55\u64cd\u4f5c\u7684\u8aaa\u660e\uff0c \u4f46\u662f\u5176\u6838\u5fc3\u7684\u50f9\u503c\u4ee3\u8868\u8457\u4ec0\u9ebc\uff1f
\u9019\u4e5f\u662f\u672c\u6bb5\u843d\u5617\u8a66\u8aaa\u660e\u7684\u6771\u897f\u3002
PLS-SEM \u548c CB-SEM \u4e4b\u9593\u7684\u4e00\u500b\u95dc\u9375\u6982\u5ff5\u5dee\u7570\u5728\u65bc\u6bcf\u7a2e\u65b9\u6cd5\u8655\u7406\u6a21\u578b\u4e2d\u6f5b\u5728\u8b8a\u6578\u7684\u65b9\u5f0f\u3002
CB-SEM \u4ee3\u8868\u4e86\u4e00\u7a2e\u57fa\u65bc\u5171\u540c\u56e0\u5b50\u7684 SEM \u65b9\u6cd5\uff0c\u5176\u5c07\u69cb\u9762\u8996\u70ba\u89e3\u91cb\u76f8\u95dc\u6307\u6a19\u4e4b\u9593\u5171\u8b8a\u7684\u5171\u540c\u56e0\u5b50\u3002 \u9019\u7a2e\u65b9\u6cd5\u8207\u53cd\u6620\u6027\u6e2c\u91cf\u6a21\u578b\u7684\u7406\u5ff5\u4e00\u81f4\uff0c\u63db\u53e5\u8a71\u8aaa\uff0c\u6307\u6a19\u53ca\u5176\u5171\u8b8a\u88ab\u8996\u70ba\u69cb\u9762\u7684\u8868\u73fe\u5f62\u5f0f\u3002 \u539f\u5247\u4e0a\uff0cCB-SEM \u4e5f\u53ef\u4ee5\u8a2d\u8a08\u6210\u5f62\u6210\u6027\u6e2c\u91cf\u6a21\u578b\uff0c\u7136\u800c\uff0c\u8981\u9054\u6210\u9019\u500b\u76ee\u7684\uff0c\u9700\u8981\u65bd\u52a0\u7279\u5b9a\u9650\u5236\u3002 \u5982\u5b78\u8005\u6240\u6307\u51fa\u7684\uff1a\u300c\u9019\u4e9b\u9650\u5236\u901a\u5e38\u8207\u7406\u8ad6\u8003\u91cf\u76f8\u77db\u76fe\uff0c\u56e0\u6b64\u6703\u5f15\u767c\u51fa\u4e00\u500b\u554f\u984c\uff1a\u6a21\u578b\u8a2d\u8a08\u662f\u5426\u61c9\u8a72\u5f15\u5c0e\u5047\u8a2d\u6216\u7406\u8ad6\uff0c\u53cd\u4e4b\u4ea6\u7136\u300d\u3002
\u53e6\u4e00\u65b9\u9762\uff0cPLS-SEM \u611f\u8208\u8da3\u7684\u5047\u8a2d\u53ef\u4ee5\u4f5c\u70ba\u7d44\u5408\u9032\u884c\u6e2c\u91cf\uff0c\u9019\u5c31\u662f\u70ba\u4ec0\u9ebc PLS \u88ab\u8a8d\u70ba\u662f\u4e00\u7a2e\u57fa\u65bc\u7d44\u5408\u7684 SEM \u65b9\u6cd5\u3002 \u5728 PLS-SEM \u4e2d\uff0c\u6a21\u578b\u4f30\u8a08\u662f\u4ee5\u7dda\u6027\u7d44\u5408\u65b9\u5f0f\u6574\u5408\u6307\u6a19\u4e26\u4f9d\u6b64\u6e2c\u91cf\u6a21\u578b\uff0c \u9019\u4e9b\u7d44\u5408\u7684\u6307\u647d\u662f\u5c0d\u69cb\u9762\u7684\u5b8c\u6574\u4ee3\u8868\uff0c\u56e0\u6b64\u6210\u70ba\u4e86\u5047\u8a2d\u7684\u6709\u6548\u4ee3\u7406\u3002 \u57fa\u65bc\u7d44\u5408\u7684\u65b9\u6cd5\u8207\u5f62\u6210\u6027\u6e2c\u91cf\u7684\u6e2c\u91cf\u7406\u5ff5\u4e00\u81f4\uff0c\u4f46\u9019\u4e26\u4e0d\u610f\u5473\u8457 PLS-SEM \u50c5\u80fd\u5920\u4f30\u8a08\u5f62\u6210\u7684\u69cb\u9762\u3002 \u539f\u56e0\u5728\u65bc\u4f30\u8a08\u89c0\u9ede\uff08\u5373\u5f62\u6210\u7d44\u5408\u4ee5\u4ee3\u8868\u6982\u5ff5\uff09\u4e0d\u61c9\u8207\u6e2c\u91cf\u7406\u8ad6\u89c0\u9ede\uff08\u5373\u6307\u5b9a\u6a21\u578b\u70ba\u53cd\u6620\u6027\u6216\u5f62\u6210\u6027\uff09\u6df7\u6dc6\u3002
\u7531\u6b64\u53ef\u77e5\uff0cPLS \u91cb\u653e\u4e86 CB-SEM \u7684\u5f37\u5047\u8a2d\uff0c\u5373\u6240\u6709\u6307\u6a19\u96c6\u4e4b\u9593\u7684\u5171\u8b8a\u7531\u4e00\u500b\u5171\u540c\u56e0\u5b50\u89e3\u91cb\u3002 \u540c\u6642\uff0c\u4f7f\u7528\u6307\u6a19\u7684\u52a0\u6b0a\u7d44\u5408\u6709\u52a9\u65bc\u8003\u616e\u6e2c\u91cf\u8aa4\u5dee\uff0c \u56e0\u6b64\u4f7f\u5f97 PLS-SEM \u6bd4\u4f7f\u7528\u7e3d\u5206\u7684\u591a\u5143\u8ff4\u6b78\uff08multiple regression using sum scores\uff09\u66f4\u512a\u8d8a\uff0c\u5176\u4e2d\u6bcf\u500b\u6307\u6a19\u90fd\u88ab\u7b49\u540c\u52a0\u6b0a\u3002
\u503c\u5f97\u6ce8\u610f\u7684\u662f\uff0cPLS-SEM \u7522\u751f\u7684\u7d44\u5408\u4e26\u4e0d\u88ab\u5047\u5b9a\u70ba\u8207\u5b83\u5011\u6240\u4ee3\u8868\u7684\u7406\u8ad6\u6982\u5ff5\u76f8\u540c\uff0c\u5b83\u5011\u88ab\u660e\u78ba\u5730\u8996\u70ba\u8fd1\u4f3c\u503c\u3002 \u56e0\u6b64\uff0c\u4e00\u4e9b\u5b78\u8005\u8a8d\u70ba CB-SEM \u662f\u4e00\u7a2e\u66f4\u76f4\u63a5\u548c\u7cbe\u78ba\u7684\u65b9\u6cd5\u4f86\u5be6\u8b49\u6e2c\u91cf\u7406\u8ad6\u6982\u5ff5\uff0c\u800c PLS-SEM \u5247\u63d0\u4f9b\u4e86\u8fd1\u4f3c\u503c\u3002 \u7136\u800c\uff0c\u5176\u4ed6\u5b78\u8005\u537b\u4e0d\u8a8d\u540c\uff0c\u56e0\u70ba\u5728 CB-SEM \u4e2d\u884d\u751f\u7684\u5171\u540c\u56e0\u5b50\u4e5f\u4e0d\u4e00\u5b9a\u7b49\u540c\u65bc\u7814\u7a76\u7684\u7406\u8ad6\u6982\u5ff5\uff0c \u7814\u7a76\u4e5f\u8868\u660e\uff0c\u5171\u540c\u56e0\u5b50\u6a21\u578b\u53ef\u80fd\u5b58\u5728\u76f8\u7576\u5927\u7684\u8a08\u91cf\u4e0d\u78ba\u5b9a\u6027\uff08metrological uncertainty\uff09\u3002
\u8a08\u91cf\u4e0d\u78ba\u5b9a\u6027\u662f\u6307\u53ef\u4ee5\u6b78\u56e0\u65bc\u88ab\u6e2c\u91cf\u7684\u5c0d\u8c61\u6216\u6982\u5ff5\u7684\u6e2c\u91cf\u503c\u7684\u5206\u6563\u7a0b\u5ea6\u3002 \u8a31\u591a\u4f86\u6e90\u90fd\u6703\u5c0e\u81f4\u8a08\u91cf\u4e0d\u78ba\u5b9a\u6027\uff0c\u5982\u5b9a\u7fa9\u6027\u7684\u4e0d\u78ba\u5b9a\u6216\u8207\u8a2d\u8a08\u6e2c\u91cf\u5c3a\u5ea6\u6642\u7684\u9650\u5236\uff0c\u9019\u9060\u9060\u8d85\u51fa\u4e86 CB-SEM \u5206\u6790\u6240\u7522\u751f\u7684\u7c21\u55ae\u6a19\u6e96\u8aa4\u5dee\u3002 \u56e0\u6b64\uff0c\u4e0d\u78ba\u5b9a\u6027\u662f\u9a57\u8b49\u6e2c\u91cf\u5408\u6cd5\u6027\u7684\u5a01\u8105\uff0c\u5c0d\u7814\u7a76\u7d50\u679c\u7684\u53ef\u91cd\u8907\u6027\u7522\u751f\u4e0d\u826f\u5f71\u97ff\u3002
\u96d6\u7136\u4e0d\u78ba\u5b9a\u6027\u4e5f\u9069\u7528\u65bc\u57fa\u65bc\u7d44\u5408\u7684SEM\uff0c\u4f46\u7814\u7a76\u4eba\u54e1\u5728 CB-SEM \u5206\u6790\u4e2d\u8655\u7406\u6a21\u578b\u7684\u65b9\u5f0f\u901a\u5e38\u6703\u5c0e\u81f4\u4e0d\u78ba\u5b9a\u6027\u660e\u986f\u589e\u52a0\u3002 \u66f4\u78ba\u5207\u5730\u8aaa\uff0c\u70ba\u4e86\u6539\u5584\u6a21\u578b\u9069\u914d\u5ea6\uff0c\u7814\u7a76\u4eba\u54e1\u901a\u5e38\u6703\u6e1b\u5c11\u6bcf\u500b\u69cb\u9762\u7684\u6307\u6a19\u6578\u91cf\uff0c\u9019\u53cd\u904e\u4f86\u6703\u589e\u52a0\u4e0d\u78ba\u5b9a\u6027\u3002
\u9019\u4e9b\u554f\u984c\u4e0d\u4e00\u5b9a\u610f\u5473\u8457\u7d44\u5408\u6a21\u578b\u66f4\u512a\u8d8a\uff0c \u4f46\u5b83\u5011\u5c0d\u65bc\u67d0\u4e9b\u7814\u7a76\u4eba\u54e1\u8a8d\u70ba CB-SEM \u5728\u8861\u91cf\u4e0d\u53ef\u89c0\u5bdf\u6982\u5ff5\u6642\u80fd\u5920\u5efa\u69cb\u51fa\u6a19\u6e96\u7684\u5047\u8a2d\uff0c\u63d0\u51fa\u4e86\u76f8\u7576\u5927\u7684\u8cea\u7591\u3002 \u4e8b\u5be6\u4e0a\uff0c\u5404\u500b\u79d1\u5b78\u9818\u57df\u7684\u7814\u7a76\u4eba\u54e1\u9010\u6f38\u610f\u8b58\u5230\uff0c\u5171\u540c\u56e0\u5b50\u53ef\u80fd\u4e26\u4e0d\u7e3d\u662f\u8861\u91cf\u6982\u5ff5\u7684\u6b63\u78ba\u65b9\u6cd5\u3002 \u540c\u6a23\u5730\uff0c\u7814\u7a76\u8868\u660e\uff0c\u4f7f\u7528\u7e3d\u5206\u53ef\u4ee5\u986f\u8457\u589e\u52a0\u8a08\u91cf\u4e0d\u78ba\u5b9a\u5ea6\uff0c\u9019\u5c0d\u9019\u7a2e\u6e2c\u91cf\u65b9\u6cd5\u63d0\u51fa\u4e86\u8cea\u7591\u3002
\u9664\u4e86\u5728\u6e2c\u91cf\u54f2\u5b78\u4e0a\u7684\u5dee\u7570\u4e4b\u5916\uff0c\u6f5b\u5728\u8b8a\u6578\u7684\u4e0d\u540c\u8655\u7406\uff0c\u66f4\u5177\u9ad4\u5730\u8aaa\uff0c\u69cb\u9762\u5206\u6578\u7684\u53ef\u7528\u6027\u4e5f\u5c0d\u65b9\u6cd5\u7684\u61c9\u7528\u7bc4\u570d\u7522\u751f\u4e86\u5f8c\u679c\u3002 \u5177\u9ad4\u800c\u8a00\uff0c\u5728 CB-SEM \u6846\u67b6\u5167\u4f30\u8a08\u6f5b\u5728\u8b8a\u6578\u5206\u6578\u662f\u53ef\u80fd\u7684\uff0c\u4f46\u9019\u4e9b\u4f30\u8a08\u5206\u6578\u4e26\u4e0d\u662f\u552f\u4e00\u7684\u3002 \u4e5f\u5c31\u662f\u8aaa\uff0c\u53ef\u80fd\u6709\u7121\u9650\u591a\u7a2e\u4e0d\u540c\u7684\u6f5b\u5728\u8b8a\u6578\u5206\u6578\u96c6\u5408\uff0c\u5b83\u5011\u540c\u6a23\u9069\u7528\u65bc\u6a21\u578b\u3002 \u9019\u7a2e\u56e0\u7d20\uff08\u5206\u6578\uff09\u7684\u4e0d\u78ba\u5b9a\u6027\u7684\u4e00\u500b\u95dc\u9375\u7d50\u679c\u662f\uff0c\u5171\u540c\u56e0\u5b50\u8207\u6a21\u578b\u4e4b\u5916\u7684\u4efb\u4f55\u8b8a\u6578\u4e4b\u9593\u7684\u76f8\u95dc\u6027\u672c\u8eab\u5c31\u662f\u4e0d\u78ba\u5b9a\u7684\u3002 \u56e0\u6b64\uff0c\u9019\u7a2e\u9650\u5236\u4f7f\u5f97 CB-SEM \u975e\u5e38\u4e0d\u9069\u5408\u65bc\u9810\u6e2c\u3002
\u76f8\u53cd\uff0cPLS-SEM\u7684\u4e00\u500b\u4e3b\u8981\u512a\u52e2\u662f\uff0c\u4e00\u65e6\u5efa\u7acb\u4e86\u6307\u6a19\u6b0a\u91cd\uff0c\u5b83\u7e3d\u662f\u70ba\u6bcf\u500b\u7d44\u5408\u751f\u6210\u55ae\u4e00\u7279\u5b9a\u7684\uff08\u5373\u78ba\u5b9a\u7684\uff09\u5206\u6578\u3002 \u9019\u4e9b\u78ba\u5b9a\u7684\u5206\u6578\u662f\u88ab\u6e2c\u91cf\u7684\u7406\u8ad6\u7684\u4ee3\u7406\uff0c\u5c31\u50cf\u5171\u540c\u56e0\u5b50\u662f CB-SEM \u4e2d\u6982\u5ff5\u7684\u4ee3\u7406\u4e00\u6a23\u3002
\u4ec0\u9ebc\u662f\u300c\u4e0d\u78ba\u5b9a\u6027\u300d\u7576\u6578\u503c\u6bcf\u6b21\u8a08\u7b97\u7d50\u679c\u90fd\u4e0d\u4e00\u6a23\u6642\uff0c\u7a31\u70ba\u4e0d\u78ba\u5b9a\u6027\uff08indeterminancy\uff09\uff0c\u53cd\u4e4b\u5247\u7a31\u70ba\u78ba\u5b9a\u6027\uff08determinancy\uff09\u3002
\u5229\u7528\u9019\u4e9b\u4ee3\u7406\u4f5c\u70ba\u8f38\u5165\uff0cPLS-SEM \u4f7f\u7528\u6700\u5c0f\u5e73\u65b9\u8ff4\u6b78\uff08least squares regression\uff09\u7684\u65b9\u6cd5\uff0c \u76ee\u6a19\u662f\u6700\u5c0f\u5316\u5167\u751f\u69cb\u9762\u7684\u8aa4\u5dee\u9805\uff08\u5373\u6b98\u5dee\u65b9\u5dee\uff09\u3002 \u7c21\u800c\u8a00\u4e4b\uff0cPLS-SEM \u901a\u904e\u4f30\u8a08\u4fc2\u6578\uff08\u5373\u6a21\u578b\u4e2d\u7684\u8def\u5f91\u95dc\u4fc2\uff09\u7684\u65b9\u6cd5\uff0c\u65e8\u5728\u6700\u5927\u5316\u5167\u751f\u69cb\u9762\uff08\u5373\u7406\u8ad6\u7684\u76ee\u6a19\uff09\u7684 \\(R^2\\) \u503c\u3002 \u9019\u500b\u7279\u6027\u5be6\u73fe\u4e86 PLS-SEM \u7684\uff08\u6a23\u672c\u5167\uff09\u9810\u6e2c\u76ee\u6a19\uff0c\u56e0\u6b64\u7576\u7814\u7a76\u76ee\u6a19\u662f\u7406\u8ad6\u767c\u5c55\u548c\u89e3\u91cb\u8b8a\u7570\uff08\u69cb\u9762\u7684\u9810\u6e2c\uff09\u6642\uff0cPLS-SEM \u662f\u9996\u9078\u65b9\u6cd5\u3002 \u56e0\u6b64\uff0cPLS-SEM \u4e5f\u88ab\u8a8d\u70ba\u662f\u4e00\u7a2e\u57fa\u65bc\u8b8a\u7570\u7684 SEM \u65b9\u6cd5\u3002 \u5177\u9ad4\u800c\u8a00\uff0cPLS-SEM \u65b9\u6cd5\u7684\u908f\u8f2f\u662f\u4f7f\u7528\u6240\u6709\u6307\u6a19\u7684\u8b8a\u7570\u4f86\u4f30\u8a08\u6a21\u578b\u95dc\u4fc2\uff0c\u7279\u5225\u6ce8\u91cd\u5c0d\u4f9d\u8cf4\u8b8a\u6578 \uff08\u4f8b\u5982\u9019\u7bc7\uff09 \u7684\u9810\u6e2c\u3002
\u76f8\u6bd4\u4e4b\u4e0b\uff0cCB-SEM \u5c07\u7e3d\u8b8a\u7570\u62c6\u5206\u70ba\u4e09\u7a2e\u985e\u578b\uff1a\u5171\u540c\u3001\u552f\u4e00\u548c\u8aa4\u5dee\u8b8a\u7570\u3002 \u4f46\u50c5\u5229\u7528\u5171\u540c\u8b8a\u7570\uff08\u5373\u8207\u540c\u4e00\u6a21\u578b\u4e2d\u5176\u4ed6\u6307\u6a19\u5171\u4eab\u7684\u8b8a\u7570\uff09\u9032\u884c\u6a21\u578b\u4f30\u8a08\u3002 \u4e5f\u5c31\u662f\u8aaa\uff0cCB-SEM \u50c5\u89e3\u91cb\u6e2c\u91cf\u548c\u7d50\u69cb\u6a21\u578b\u6307\u6a19\u4e4b\u9593\u7684\u5354\u8b8a\uff0c\u4e26\u4e0d\u5c08\u6ce8\u65bc\u9810\u6e2c\u69cb\u9762\u7684\u4f9d\u8cf4\u8b8a\u6578\u3002
PLS \u8ff4\u6b78PLS-SEM \u8207\u53e6\u4e00\u7a2e\u6d41\u884c\u7684\u591a\u8b8a\u91cf\u6578\u64da\u5206\u6790\u6280\u8853\uff0cPLS \u8ff4\u6b78\uff0c\u76f8\u4f3c\u4f46\u4e26\u4e0d\u76f8\u7b49\u3002 PLS \u8ff4\u6b78\u662f\u4e00\u7a2e\u57fa\u65bc\u8ff4\u6b78\u7684\u65b9\u6cd5\uff0c\u5b83\u63a2\u7d22\u591a\u500b\u81ea\u8b8a\u6578\u8207\u55ae\u500b\u6216\u591a\u500b\u56e0\u8b8a\u6578\u4e4b\u9593\u7684\u7dda\u6027\u95dc\u4fc2\u3002 \u7136\u800c\uff0cPLS \u8ff4\u6b78\u8207\u5e38\u898f\u8ff4\u6b78\u6709\u6240\u4e0d\u540c\uff0c\u56e0\u70ba\u5728\u958b\u767c\u8ff4\u6b78\u6a21\u578b\u6642\uff0c\u8a72\u65b9\u6cd5\u900f\u904e\u4e3b\u8981\u7684\u591a\u81ea\u8b8a\u6578\u7d44\u5408\u5206\u6790\u4e2d\u63a8\u5c0e\u51fa\u7d44\u5408\u56e0\u5b50\u3002 \u800c PLS-SEM \u4f9d\u8cf4\u65bc\u9810\u5148\u6307\u5b9a\u7684\u69cb\u9762\u8207\u69cb\u9762\u548c\u69cb\u9762\u8207\u8b8a\u6578\u4e4b\u9593\u7684\u95dc\u4fc2\u7db2\u7d61\u3002
\u4e0b\u8868\u6bd4\u8f03\u4e86 PLS-SEM \u548c CB-SEM \u4e4b\u9593\u7684\u4e3b\u8981\u5dee\u7570\uff1a
\u7279\u5fb5 PLS-SEM CB-SEM \u54f2\u5b78 \u57fa\u65bc\u7d44\u5408 \u57fa\u65bc\u5171\u540c\u56e0\u5b50 \u6e2c\u91cf\u6a21\u578b \u69cb\u9762\u5206\u6578\u88ab\u8996\u70ba\u8fd1\u4f3c\u503c \u69cb\u9762\u88ab\u8996\u70ba\u5171\u540c\u56e0\u5b50 \u6a21\u578b\u4f30\u8a08 \u6700\u5c0f\u5e73\u65b9\u8ff4\u6b78 \u6700\u5927\u6982\u4f3c\u4f30\u8a08 \u5206\u6790\u65b9\u6cd5 \u8b8a\u7570\u91cf\u5206\u6790 \u5171\u8b8a\u91cf\u5206\u6790 \u8cc7\u6599\u985e\u578b \u7121\u5206\u4f48\u8981\u6c42 \u5e38\u614b\u5206\u4f48 \u7406\u8ad6\u767c\u5c55 \u5c0d\u8b8a\u7570\u7684\u89e3\u91cb\u548c\u9810\u6e2c \u5c0d\u65bc\u6f5b\u5728\u6982\u5ff5\u7684\u7cbe\u78ba\u6e2c\u91cf \u7406\u8ad6\u65b9\u5411 \u61c9\u7528\u65bc\u9810\u6e2c\u548c\u7406\u8ad6\u767c\u5c55 \u4e3b\u8981\u7528\u65bc\u6e2c\u91cf\u6a21\u578b\u7684\u9a57\u8b49\u548c\u7cbe\u78ba\u6e2c\u91cf \u8b8a\u7570\u89e3\u91cb \u91cd\u8996\u5c0d\u5167\u751f\u69cb\u9020\u7684\u8b8a\u7570\u7684\u89e3\u91cb \u8f03\u5c11\u95dc\u6ce8\u89e3\u91cb\u8b8a\u7570\uff0c\u66f4\u591a\u95dc\u6ce8\u6a21\u578b\u7684\u9069\u914d\u548c\u7d50\u69cb\u65b9\u7a0b\u5f0f\u6a21\u578b \u6a21\u578b\u8907\u96dc\u5ea6 \u5c0d\u65bc\u8907\u96dc\u6a21\u578b\u63d0\u4f9b\u8f03\u5f37\u7684\u9069\u7528\u6027 \u5728\u8907\u96dc\u6a21\u578b\u4e2d\u53ef\u80fd\u6703\u5c0e\u81f4\u8a08\u7b97\u4e0a\u7684\u6311\u6230"},{"location":"essay/pls-sem/#\u6ce8\u610f\u4e8b\u9805","title":"\u6ce8\u610f\u4e8b\u9805","text":"\u8a2d\u8a08 PLS-SEM \u6a21\u578b\u6642\u4e3b\u8981\u6709\u56db\u500b\u65b9\u5411\u7684\u8003\u91cf\uff1a
\u9078\u7528\u548c\u6536\u96c6\u539f\u59cb\u8cc7\u6599\u6642\uff0c\u8981\u6ce8\u610f\u4ec0\u9ebc\u3002
\u7d71\u8a08\u5b78\u4e0a\u901a\u5e38\u6703\u95dc\u6ce8\u4e00\u500b\u8b8a\u6578\u6216\u6307\u6a19\u7684\u6e2c\u91cf\u5c3a\u5ea6\uff08levels of measurement\uff09\u662f\u591a\u5c11\uff0c \u9019\u4e4b\u4e2d\u901a\u5e38\u6703\u6709\u56db\u500b\u7a2e\u985e\uff1a
\u91dd\u5c0d\u5047\u8a2d\u9032\u884c\u6a21\u578b\u7684\u5efa\u7f6e\u6642\uff0c\u8981\u6ce8\u610f\u4ec0\u9ebc\u3002
\u9032\u884c\u6f14\u7b97\u6cd5\u7684\u8a2d\u8a08\u548c\u6548\u7387\u8abf\u6821\u6642\uff0c\u8981\u6ce8\u610f\u4ec0\u9ebc\u3002
\u91dd\u5c0d\u7d50\u679c\u9032\u884c\u8a55\u4f30\u6642\uff0c\u6709\u4ec0\u9ebc\u6307\u6a19\u53ef\u4ee5\u6ce8\u610f\u7684\uff1a
\u5f88\u591a\u5f88\u96dc\uff0c\u6211\u5011\u63a5\u4e0b\u4f86\u6839\u64da\u5404\u6a21\u578b\u9069\u7528\u7684\u8a55\u4f30\u4f86\u8a0e\u8ad6\u3002
"},{"location":"essay/pls-sem/#\u53cd\u6620\u6027\u6e2c\u91cf\u6a21\u578b\u7684\u8a55\u4f30","title":"\u53cd\u6620\u6027\u6e2c\u91cf\u6a21\u578b\u7684\u8a55\u4f30","text":"\u4f9d\u5e8f\u9032\u884c\u56db\u7a2e\u8a55\u4f30\uff1a
\u6307\u6a19\u4fe1\u5ea6\u53ef\u4ee5\u900f\u904e\u6307\u6a19\u8ca0\u8f09\uff08indicator loading\uff09\u7684\u5e73\u65b9\u4f86\u7b97\u51fa\uff0c \u6307\u6a19\u8ca0\u8f09\u4ee3\u8868\u8457\u6307\u6a19\u548c\u69cb\u9762\u7684\u8b8a\u7570\u6578\u76f8\u95dc\u6027\uff1a
\\[\\begin{aligned} \\lambda = \\frac{\\text{Cov}(Y, \\eta)}{\\sqrt{\\text{Var}(\\eta)}} \\end{aligned}\\]\u5176\u4e2d \\(\\text{Cov}(Y, \\eta)\\) \u4ee3\u8868\u6307\u6a19\u548c\u6307\u6a19\u8b8a\u6578\u7684\u5171\u8b8a\u6578\u3001\\(\\text{Var}(\\eta)\\) \u4ee3\u8868\u6307\u6a19\u8b8a\u6578\u7684\u8b8a\u7570\u6578\u3002 \u4e00\u822c\u4f86\u8aaa\uff0c\u90fd\u6703\u671f\u671b\u6307\u6a19\u8ca0\u8f09\u9ad8\u65bc 0.708\uff0c\u9019\u6a23\u6307\u6a19\u4fe1\u5ea6\uff08\u5e73\u65b9\u5f8c\u7684\u7d50\u679c\uff09\u5c31\u6703\u56e0\u6b64\u5927\u65bc 0.5\u3002 \u90a3\u904e\u4f4e\u7684\u6307\u6a19\u8ca0\u8f09\u8a72\u600e\u9ebc\u8fa6\uff1f
\u5982\u679c\u5c0f\u65bc 0.4 \u7684\u6307\u6a19\uff0c\u56e0\u70ba\u76f8\u95dc\u6027\u592a\u4f4e\uff0c\u53ef\u4ee5\u79fb\u9664\u3002 \u4f46\u662f\u5982\u679c\u5927\u65bc 0.4 \u5c0f\u65bc 0.7\uff0c\u5c31\u5efa\u8b70\u53ea\u6709\u5728\u522a\u9664\u5f8c\u53ef\u4ee5\u63d0\u9ad8\u5167\u90e8\u4e00\u81f4\u6027\u4fe1\u5ea6\u6216\u6536\u6582\u7a69\u5b9a\u5ea6\u63d0\u9ad8\u5230\u4e00\u5b9a\u95a5\u503c\u5f8c\uff0c\u624d\u80fd\u522a\u9664\u3002 \u4e5f\u56e0\u70ba\u5176\u689d\u4ef6\u4e0b\uff0c\u4f4e\u4fe1\u5ea6\u7684\u6307\u6a19\u901a\u5e38\u4ecd\u88ab\u4fdd\u7559\u8457\u3002
"},{"location":"essay/pls-sem/#\u5167\u90e8\u4e00\u81f4\u6027\u4fe1\u5ea6","title":"\u5167\u90e8\u4e00\u81f4\u6027\u4fe1\u5ea6","text":""},{"location":"essay/questionnaire-principal/","title":"\u554f\u5377\u8a2d\u8a08\u6307\u5357","text":""},{"location":"essay/questionnaire-principal/#\u984c\u9805\u8a2d\u8a08\u7684\u539f\u5247","title":"\u984c\u9805\u8a2d\u8a08\u7684\u539f\u5247","text":"\u4e00\u984c\u591a\u554f
"},{"location":"essay/questionnaire-principal/#\u674e\u7279\u514b\u91cf\u5c3a","title":"\u674e\u7279\u514b\u91cf\u5c3a","text":"\u554f\u5377\u8cc7\u6599\u5eab
"},{"location":"essay/questionnaire-principal/#\u554f\u984c\u7684\u985e\u578b","title":"\u554f\u984c\u7684\u985e\u578b","text":"\u4f60\u6709\u591a\u5927\u7684\u610f\u9858\u5c07\u7522\u54c1\u63a8\u85a6\u7d66\u89aa\u670b\u597d\u53cb\uff1f
0~10 \u5206\uff1a
\u8ddf\u81ea\u5df1\u8cfd\u8dd1
"},{"location":"essay/questionnaire-principal/#\u6ce8\u610f","title":"\u6ce8\u610f","text":"\u6700\u95dc\u5fc3\u7684\u8b70\u984c\uff0c\u53ef\u80fd\u9700\u8981\u8cbb\u529b\u601d\u8003
\u5e0c\u671b\u586b\u7b54\u8005\u9032\u4e00\u6b65\u63a1\u53d6\u7684\u884c\u52d5
\u8996\u76ee\u7684\u800c\u5b9a\uff0c\u62bd\u734e\u3001\u79ae\u54c1\u53ef\u6709\u6548\u63d0\u5347\u586b\u7b54\u8005\u610f\u9858\u3002
\u5229\u7528 spreadsheet
\u3001excel
\u7b49\u5de5\u5177\u505a\u8349\u7a3f\uff0c\u65b9\u4fbf\u8a18\u9304\u4fee\u6539\u904e\u7a0b\u548c\u505a\u7559\u8a00\u3002
\u628a\u6b77\u4f86\u7684\u984c\u76ee\u3001\u9078\u9805\u5404\u4e00\u9801\uff0c\u65b9\u4fbf\u8a2d\u8a08\u65b0\u7684\u554f\u5377
"},{"location":"essay/questionnaire-principal/#\u6587\u6848","title":"\u6587\u6848","text":"\u6587\u6848\u5beb\u4f5c\uff0c\u6309\u7167\u65cf\u7fa4\u6027\u8cea\u8abf\u6574\u3002
"},{"location":"essay/questionnaire-principal/#\u554f\u5377\u5206\u6790","title":"\u554f\u5377\u5206\u6790","text":"\u5efa\u7acb container \u524d\uff0c\u9700\u8981\u5148\u5efa\u7acb image\uff0c\u7136\u800c\u9019\u6b65\u9a5f\u6703\u548c\u61c9\u7528\u7a0b\u5f0f\u7684\u9700\u6c42\u800c\u6709\u5f88\u5927\u7684\u4e0d\u540c\uff0c\u5728\u6b64\u8b39\u6982\u7565\u4ecb\u7d39\u4ee5 Node.js \u70ba\u80cc\u666f\u7684\u61c9\u7528\u7a0b\u5f0f\u3002
\u88fd\u4f5c image \u5206\u70ba\u4e09\u500b\u6b65\u9a5f\uff1a
\u4ee5 Node.js \u70ba\u4f8b\uff0c\u5247\u662f npm i
\u6216\u66f4\u7cbe\u7c21\u7684 npm ci --only=production
\u3002 \u5176\u4ed6\u5982\uff1a
composer install --no-dev --optimize-autoloader
pip install
bundle install --clean --without dev
Dockerfile \u662f Docker \u7528\u4f86\u5efa\u7acb image \u7684\u6307\u4ee4\u8868\uff0c\u985e\u4f3c Makefile\u3002 \u4ee5\u4e0b\u70ba Node.js \u5efa\u7acb\u76f8\u4f9d\u5957\u4ef6\u7684\u6307\u4ee4\u8868\uff1a
FROM node:lts-alpine AS deps\n\n# Change current folder to /srv\nWORKDIR /srv\nCOPY package*.json ./\nRUN npm ci --only=production\n
\u4e0a\u8ff0\u6bcf\u4e00\u884c\u90fd\u4ee3\u8868\u4e00\u500b Layer\uff0c\u800c\u6bcf\u4e00\u6b21\u547c\u53eb FROM
\uff0c\u5373\u4ee3\u8868\u5efa\u7acb\u4e00\u7d44 Stage\u3002
\u5728 Docker \u7684 Best Practice \u4e2d\u6703\u5efa\u8b70\u4f7f\u7528\u8d8a\u5c11 command \u8d8a\u597d\u5c31\u662f\u907f\u514d\u904e\u5927\u7684 layer
"},{"location":"essay/architecture/made-container/#\u6e96\u5099\u597d\u57f7\u884c\u61c9\u7528\u7a0b\u5f0f\u7684\u74b0\u5883","title":"\u6e96\u5099\u597d\u57f7\u884c\u61c9\u7528\u7a0b\u5f0f\u7684\u74b0\u5883","text":"\u5728\u57f7\u884c\u74b0\u5883\u4e2d\uff0c\u4e0d\u9700\u8981\u4e00\u4e9b Node.js \u7684\u7279\u5b9a\u529f\u80fd\uff0c\u5982 npm
\u3002
FROM node:lts-slim AS release\n
\u9664\u6b64\u4e4b\u5916\u4e5f\u53ef\u4ee5\u5728 Alpine \u74b0\u5883\u4e0b\u5efa\u7acb\u6975\u7c21\u7684 Node.js\uff0c\u8a73\u898b\u5be6\u4f5c\u7684\u7a0b\u5f0f\u78bc\u3002
\u6982\u5ff5\u5c31\u662f\u4e0b\u8f09 curl
\uff08Alpine \u7121 curl
\uff09\u518d\u4e0b\u8f09 Node.js \u5f8c\u522a\u9664\u4e0d\u5fc5\u8981\u6a94\u6848
\u66f4\u5b8c\u6574\u5167\u5bb9\u8a73\u898b Node.js \u63d0\u4f9b\u7684\u5efa\u7acb image \u7684\u6700\u4f73\u505a\u6cd5\u6307\u5f15
\u518d\u4f86\u5c31\u5269\u628a\u525b\u525b\u5728 deps
\u74b0\u5883\u4e2d\u5efa\u7acb\u7684\u76f8\u4f9d\u5957\u4ef6\u62c9\u904e\u4f86\uff1a
COPY --from=deps /srv/node_modules ./node_modules\nCOPY . .\n
\u8b66\u544a\uff1aCOPY . .
\u4ee3\u8868\u6703\u628a\u73fe\u5728\u672c\u5730\u7aef\u8cc7\u6599\u593e\u4e2d\u7684\u6240\u6709\u6a94\u6848\u8907\u88fd\u6b64 image \u4e2d\u3002 \u70ba\u4e86\u907f\u514d\u4e0d\u5fc5\u8981\u6a94\u6848\u88ab\u8907\u88fd\uff0c\u53ef\u65bc .dockerignore
\u4e2d\u8a2d\u5b9a
.dockerignore \u7bc4\u4f8b\uff1a
node_modules\nnpm-debug.log\nDockerfile\n.git\n.gitignore\n.eslintrc\n
"},{"location":"essay/architecture/made-container/#\u57f7\u884c\u61c9\u7528\u7a0b\u5f0f","title":"\u57f7\u884c\u61c9\u7528\u7a0b\u5f0f","text":"\u518d\u4f86\u5c31\u5269\u6e96\u5099\u8a2d\u5b9a\u6a94\u548c\u57f7\u884c\u7a0b\u5f0f\u4e86\uff1a
EXPOSE 1337\nENV HOST 0.0.0.0\nENV PORT 1337\nCMD [ \"node\", \"server.js\"\n
"},{"location":"essay/architecture/made-container/#\u5305\u88dd\u6210-container","title":"\u5305\u88dd\u6210 Container","text":"docker build -t example/server:v0.0.1 .\n
\u9019\u6642\u5c31\u53ef\u4ee5\u770b\u5230\u5404\u500b layer \u88ab\u57f7\u884c\u7684\u904e\u7a0b\u3002
Sending build context to Docker daemon 155.6kB\nStep 1/11 : FROM node:lts-alpine AS deps\n ---> 532fd65ecacd\n... TRUNCATED ...\nStep 11/11 : CMD [ \"node\", \"server.js\" ]\n ---> Running in d7bde6cfc4dc\nRemoving intermediate container d7bde6cfc4dc\n ---> a99750d85d81\nSuccessfully built a99750d85d81\n
"},{"location":"essay/architecture/made-container/#\u66f4\u65b0","title":"\u66f4\u65b0","text":"Docker Image \u5728\u5efa\u7acb\u6642\uff0c\u6703\u900f\u904e SHA \u503c\u9032\u884c\u66ab\u5b58\uff0c\u6240\u4ee5\u7576\u6709\u90e8\u5206\u6539\u52d5\u7684\u6642\u5019\u5c31\u4e0d\u9700\u8981\u5168\u90e8\u91cd\u65b0\u5efa\u7acb\u3002
SHA \u503c\u8a08\u7b97\u65b9\u5f0f\u662f\u4e0a\u4e00\u500b SHA \u503c\u52a0\u4e0a\u73fe\u884c\u7684\u6307\u4ee4\u7d44\u51fa\u4f86\u7684\u3002
\u4e5f\u5c31\u662f\u8aaa\uff0c\u82e5\u6539\u52d5\u7684\u50c5\u6709\u61c9\u7528\u7a0b\u5f0f\u7684\u7a0b\u5f0f\u78bc\uff0c\u5982 server.js
\uff0c\u5728\u91cd\u5efa image \u6642\u5c31\u50c5\u9700\u8981\u57f7\u884c COPY . .
\u4ee5\u5f8c\u7684\u4ee3\u78bc\u3002
\u76f8\u5c0d\u7684\uff0c\u7576 package.json \u6539\u8b8a\u6642\uff08\u5982 dependency \u589e\u52a0\uff09\u5c31\u9700\u8981\u5f9e deps
\u9019\u5c64 stage \u958b\u59cb\u5efa\u7acb\u8d77\u3002
\u900f\u904e docker history example/server:v0.0.1
\u53ef\u4ee5\u89c0\u770b\u5176\u5efa\u7acb\u6642\u7684\u8a18\u61b6\u9ad4\u7528\u91cf\u3002
v0.0.1
\u4ee3\u8868\u521d\u59cb\u7248\u672cv0.0.2
\u4ee3\u8868\u4fee\u6b63 server.js
v0.0.3
\u4ee3\u8868\u65b0\u589e\u5957\u4ef6\u672c\u8cc7\u6599\u4f86\u6e90\u65bc NIST 800-32 Ct.3
\u53ef\u80fd\u9700\u8981\u6e9d\u901a\u7684\u539f\u56e0\uff1a
certificate policy \u5b9a\u7fa9\u7c3d\u8b49\u7684\u653f\u7b56\uff0c\u4f8b\u5982\u8a72\u7528\u4ec0\u9ebc\u91d1\u9470\u7a2e\u985e\u3001\u9577\u5ea6\u3002\u80fd\u505a\u5230\u6aa2\u67e5\u7684\u6b65\u9a5f\uff0c\u5be6\u52d9\u4e0a\u50c5\u6709\u7c3d\u767c\u6642\u4f5c\u6aa2\u67e5\uff0c\u7136\u5f8c\u518d\u628a\u8cc7\u8a0a\u653e\u5728\u7c3d\u8b49\u4e0a\u3002
correctly configuring root certificate stores is a critical step in key management.
X.509 \u6703\u653e
\u9a57\u8b49\u904e\u7a0b
\u9a57\u8b49\u904e\u7a0b\u4e2d\u7684\u6bcf\u4e00\u6bb5\u90fd\u9700\u8981\u78ba\u8a8d\uff08path validation\uff09\uff1a
\u7c3d\u8b49\u7684\u72c0\u614b\u5c55\u793a\uff08\u7c3d\u8b49\u6c92\u88ab\u64a4\u92b7\uff09\u65b9\u5f0f\u6709\u5169\u7a2e\uff1a
\u82e5\u4e00\u958b\u59cb\u662f\u4f7f\u7528 key establishment \u505a\u7c3d\u8b49\uff0c\u8981\u53ef\u4ee5\u505a\u91d1\u9470\u7684\u56de\u5fa9\u3002
"},{"location":"essay/architecture/pki-checklist/#procurement-guidance","title":"Procurement Guidance","text":"\u6311\u9078 CA \u7522\u54c1\u7684 check list\u3002
"},{"location":"essay/architecture/pki-checklist/#cara-software-and-hardware","title":"CA/RA Software and Hardware","text":"\u7ba1\u7406\u8005\u61c9\u78ba\u4fdd\u4f7f\u7528\u7aef\u7684\u4eba\u63a5\u53d7\u5fc5\u8981\u8a13\u7df4\u548c\u516c\u53f8\u5b89\u5168\u653f\u7b56\u88ab\u57f7\u884c\u3002
"},{"location":"essay/architecture/pki-checklist/#certificate-issuance","title":"Certificate Issuance","text":"For federal agencies, detailed configuration guidance for OCSP responders is specified in Draft Guidance for OCSP Responders in the U.S. Federal PKI.17
\u5c0d\u65bc\u548c PKI \u7533\u8acb\u6b0a\u8b49\u7684\u4f7f\u7528\u8005\uff1a
Docker Desktop \u5728\u7279\u5b9a\u689d\u4ef6\u4e0b\u8981\u9322\u4e86\uff0c\u8a72\u7528\u4ec0\u9ebc\u53d6\u4ee3\uff1f
\u73fe\u6709\u5de5\u5177\uff1a
colima start --runtime containerd
\u4f86\u8abf\u6574\uff09\uff0c\u8b93\u4f60\u53ef\u4ee5\u5feb\u901f\u5efa\u7f6e\u74b0\u5883\u3002lima
, nerdctl
\uff09\u6574\u5408\u8d77\u4f86\u4e26\u63d0\u4f9b\u6307\u4ee4\u4ecb\u9762\u95dc\u65bc\u4ec0\u9ebc\u662f container runtime/engine \u6709\u4e00\u7bc7\u8d85\u6e05\u695a\u7684\u6587\u7ae0 A breakdown of container runtimes for Kubernetes and Docker\u3002
\u672c\u7bc7\u4ee5\u4e0b\u5167\u5bb9\u5c07\u4e0d\u518d\u9069\u7528
\u7531\u65bc\u8a31\u591a\u5de5\u5177\u5df2\u7d93\u958b\u6e90\uff08\u958b\u7bc7\u90a3\u6bb5\uff09\uff0c\u4f60\u4e0d\u9700\u8981\u9019\u9ebc\u8271\u96e3\u7684\u81ea\u5df1\u555f\u4e00\u500b VM \u4f86\u505a\u4e8b\uff0c\u6240\u4ee5\u9019\u7bc7\u6587\u7ae0\u4e0b\u9762\u4f60\u61c9\u8a72\u4e0d\u9700\u8981\u770b\u4e86\ud83d\ude02
\u2014 2022/11/28
\u4f60\u81ea\u5df1\u5efa\u7acb\u4e00\u500b VM\uff08Linux based\uff09\u53bb\u652f\u6490 Docker\uff0c\u9019\u4e5f\u662f\u672c\u7bc7\u7684\u91cd\u9ede\u3002
\u70ba\u4ec0\u9ebc\u8981 Docker \u8981\u7528 VM\uff1f
"},{"location":"essay/architecture/replace-docker-desktop/#\u79fb\u9664-docker-desktop","title":"\u79fb\u9664 Docker Desktop","text":"$ brew install docker\n# Optional: docker-compose\n$ brew install docker-compose\n
"},{"location":"essay/architecture/replace-docker-desktop/#\u6e96\u5099\u5de5\u5177","title":"\u6e96\u5099\u5de5\u5177","text":"brew install vagrant\nbrew install virtualbox\n
"},{"location":"essay/architecture/replace-docker-desktop/#provision","title":"Provision","text":"\u5efa\u7acb Vagrantfile\uff1a
# encoding: utf-8\n# -*- mode: ruby -*-\n# vi: set ft=ruby :\nVAGRANTFILE_API_VERSION = \"2\"\n\nVagrant.configure('2') do |config|\n # ubuntu 14.x\n # config.vm.box = 'ubuntu/trusty64'\n # ubuntu 16.x\n config.vm.box = 'ubuntu/xenial64'\n # ubuntu 18.x\n # config.vm.box = 'ubuntu/bionic64'\n # ubuntu 20.x\n # config.vm.box = 'ubuntu/focal64'\n\n # Optional: hostmanager\n config.hostmanager.enabled = true\n config.hostmanager.manage_host = true\n config.hostmanager.manage_guest = true\n config.hostmanager.include_offline = true\n config.vm.hostname = 'docker.local'\n\n # \u4efb\u4e00 IP \u5373\u53ef\n # \u672c\u6a5f\u8981\u9023\u7d50\u5230\u6b64 Docker \u9700\u8981\u5148\u6307\u5b9a\u4f4d\u7f6e\n # export DOCKER_HOST=tcp://192.168.66.4:2375\n # \u6216\u8005\u900f\u904e hostmanager \u6307\u5b9a\u7684 host name\n # export DOCKER_HOST=tcp://docker.local:2375\n # \u4f46\u662f\u9019\u6703\u9700\u8981\u66f4\u591a\u6642\u9593\u53bb\u8b93\u6a5f\u5668\u53bb\u8fa8\u8a8d IP\n config.vm.network 'private_network', ip: '192.168.66.4'\n\n # guest \u4ee3\u8868 VM port\uff0chost \u4ee3\u8868\u672c\u6a5f port\n config.vm.network 'forwarded_port', guest: 2375, host: 2375, id: 'dockerd'\n # \u4f7f\u7528 ID \u65b9\u4fbf\u8a18\u61b6\n config.vm.network 'forwarded_port', guest: 80, host: 80, id: 'http'\n # Protocol \u6709\u9700\u8981\uff0c\u8981\u6539\n config.vm.network 'forwarded_port', guest: 2000, host: 2000, id: 'xray', protocol: 'udp'\n\n config.vm.provision \"docker\"\n config.vm.provision 'shell', path: 'provision.sh'\nend\n
\u5efa\u7acb provision.sh
# Configure Docker to listen on a TCP socket\n# https://stackoverflow.com/a/42204921/12089368\n# https://dev.to/dhwaneetbhatt/run-docker-without-docker-desktop-on-macos-306h\nmkdir /etc/systemd/system/docker.service.d\n\necho '[Service]\nExecStart=\nExecStart=/usr/bin/dockerd --containerd=/run/containerd/containerd.sock' > /etc/systemd/system/docker.service.d/docker.conf\n\necho '{\n \"hosts\": [\"fd://\", \"tcp://0.0.0.0:2375\"]\n}' > /etc/docker/daemon.json\n\n# Reload configuration\nsystemctl daemon-reload\nsystemctl restart docker.service\n
"},{"location":"essay/architecture/replace-docker-desktop/#go","title":"Go","text":"\u5efa\u7acb VM
# Build VM + provision\n$ vagrant up\n# play with VM\n$ vagrant ssh\n# \u66f4\u65b0 IP \u8a2d\u5b9a\n$ vagrant reload\n
\u8a2d\u5b9a Docker Daemon \u8def\u5f91
# IP \u6216\u662f Host \u8a73\u898b\u4e0a\u9762\u7684 Vagrantfile\n$ export DOCKER_HOST=tcp://192.168.66.4:2375\n
\u958b\u59cb\u4f7f\u7528 Docker\uff01
"},{"location":"essay/architecture/tcp-socket-loss-after-dhcp/","title":"TCP socket \u9023\u7dda\u88ab\u6e05\u9664\u7684\u932f\u8aa4\u6392\u67e5","text":"\u670d\u52d9\u662f\u653e\u5728 Ubuntu 18 \u7684 Docker \u4e4b\u4e2d\uff0c\u5b83\u6703\u5728\u555f\u52d5\u4e4b\u521d\u548c Redis \u9032\u884c\u9023\u7dda\uff0c \u4f46\u662f\u9019\u9023\u7dda\u6703\u5728\u4e00\u6bb5\u6642\u9593\u4e4b\u5f8c\uff0c\u83ab\u540d\u5931\u6548\uff1a\u5c0d\u670d\u52d9\u4f86\u8aaa\u9023\u7dda\u9084\u5728\uff0c\u4f46\u662f\u5c0d Redis \u4f86\u8aaa\u537b\u4e0d\u5728\u3002
\u672c\u6587\u5c07\u662f\u64b0\u5beb\u9019\u500b\u72c0\u6cc1\u7684\u6392\u67e5\u904e\u7a0b\u3002
"},{"location":"essay/architecture/tcp-socket-loss-after-dhcp/#\u600e\u9ebc\u78ba\u8a8d\u9023\u7dda\u72c0\u6cc1","title":"\u600e\u9ebc\u78ba\u8a8d\u9023\u7dda\u72c0\u6cc1","text":"\u6211\u5011\u5728\u4e09\u500b\u5730\u65b9\u9032\u884c\u9023\u7dda\u72c0\u6cc1\u7684\u6aa2\u67e5\uff0c\u5206\u5225\u662f Redis\u3001Ubuntu\uff08Host\uff09\u548c\u627f\u8f09\u670d\u52d9\u7684\u5bb9\u5668\uff08Container\uff09\u3002
/\u6211\u5011\u4f7f\u7528 netstat\uff0c \u4f46\u4e5f\u53ef\u4ee5\u4f7f\u7528\u66f4\u73fe\u4ee3\u7684 ss\u3002
$ netstat -tn | grep ESTABLISHED\ntcp 0 0 172.0.0.1:53558 172.0.0.2:6379 ESTABLISHED\ntcp 0 0 172.0.0.1:37672 172.0.0.2:6379 ESTABLISHED\n
\u4e0a\u8ff0\u7bc4\u4f8b\u662f\u5217\u51fa\u5728 Host \u4e0a\u548c Redis\uff08port 6379\uff09\u5efa\u7acb\u7684\u9023\u7dda\u3002 \u540c\u6a23\u7684\u6307\u4ee4\u53ef\u4ee5\u5728\u5bb9\u5668\u5167\u90e8\u548c Redis \u4e0a\u770b\u5230\uff0c\u53ea\u662f Redis \u7684 grep
\u5c31\u6703\u6539\u6210 LISTEN
\u7576\u9023\u7dda\u5efa\u7acb\u4e4b\u5f8c\u7684\u4e00\u6bb5\u6642\u9593\u5f8c\uff08\u7d04\u4e94\u5230\u4e09\u5341\u5206\u9418\uff0c\u4e0d\u56fa\u5b9a\uff0c\u4f46\u4e0d\u6703\u8d85\u904e\u4e09\u5341\u5206\u9418\uff09\uff0c Redis \u5c31\u6703\u6536\u5230 TCP RST
\uff0c\u7136\u5f8c\u628a\u9023\u7dda\u95dc\u6389\uff1a
\u5728\u6642\u9593 14:28:29.395914\uff08\u5c01\u5305\u7de8\u865f 2886\uff09\u6642\uff0cclient \u548c Redis \u5efa\u7acb\u5b8c\u6210\u9023\u7dda\uff0c \u5728 14:28:29.443402\uff08\u5c01\u5305\u7de8\u865f 2919\uff09\u6642\uff0c\u5b8c\u6210\u4e00\u7cfb\u5217 Redis \u5546\u52d9\u908f\u8f2f\u7684\u4f7f\u7528\u3002 \u904e\u4e86\u7d04\u4e94\u5206\u9418\uff0cRedis \u56de\u61c9 TCP Keep-Alive\uff08\u50c5\u6709\u6a19\u982d\u7684\u5c01\u5305\uff0c\u7de8\u865f 3855\uff09\uff0c \u4f46\u9019\u662f\u9810\u671f\u7684\u5c01\u5305\uff0c\u56e0\u70ba\u6211\u5011\u5728 Redis \u8a2d\u5b9a\u4e86 300 \u79d2\u7684 TCP Keep-Alive\u3002
\u4f46\u4ee4\u4eba\u7591\u60d1\u7684\u662f\uff0cclient \u537b\u5728\u4e0b\u4e00\u500b\u5c01\u5305\uff08\u7de8\u865f 3856\uff09\u56de\u61c9 TCP RST
\u3002
\u7576\u6211\u5011\u900f\u904e\u4e0a\u8ff0\u65b9\u6cd5\u78ba\u8a8d\u9023\u7dda\u72c0\u6cc1\u6642\uff0c \u4e0d\u7ba1\u5f9e Host \u9084\u662f Container \u7684\u89d2\u5ea6\u4f86\u770b\uff0c\u9023\u7dda\u90fd\u9084\u5728\u3002 \u6240\u4ee5\uff0c\u9019\u500b TCP RST
\uff0c\u7a76\u7adf\u662f\u8ab0\u767c\u7684\uff1f
\u5c31\u7d50\u8ad6\u4f86\u8aaa\uff0c\u9019\u500b\u662f\u932f\u8aa4\u65b9\u5411\uff0c\u4e0d\u904e\u5728\u9019\u88e1\u8a18\u9304\u4e00\u4e0b\u3002
Ubuntu \u57fa\u672c\u90fd\u6703\u88dd\u4e0a systemd \u53bb\u7ba1\u7406\u5f88\u591a\u7cfb\u7d71\u670d\u52d9\uff0c\u5176\u4e2d\u4e00\u500b\u5c31\u662f system-network\u3002 \u76f8\u95dc\u7684 issue\uff08docker0 interface keeps losing IPv4 ipaddress\uff09 \u8868\u73fe\u4e86\u5f88\u985e\u4f3c\u7684\u7279\u5fb5\uff0c\u6545\u800c\u958b\u59cb\u671d\u8457\u65b9\u5411\u8ffd\u3002 \u4f46\u662f\u5728\u6a5f\u5668\u4e0a\u900f\u904e networkctl list
\u5217\u51fa\u7684\u8cc7\u6599\u537b\u4e0d\u7b26\u5408 issue \u4e0a\u7684\u8aaa\u660e\uff1a
$ networkctl list\nIDX LINK TYPE OPERATIONAL SETUP\n 1 lo loopback carrier unmanaged\n 2 ens3 ether routable configured\n 3 ens4 ether off unmanaged\n 4 docker0 ether no-carrier unmanaged\n942 br-788fecf403ed ether routable unmanaged\n944 veth6af5546 ether degraded unmanaged\n\n6 links listed.\n
\u7531\u4e0a\u53ef\u77e5\uff0cdocker \u76f8\u95dc\u7684 link\uff08docker0
\u3001br-*
\u548c veth*
\uff09\u90fd\u4e0d\u662f\u900f\u904e system-network \u53bb\u7ba1\u7406\u4e86\u3002
\u5176\u4e2d\u7684 degraded \u4ee3\u8868\u8a72 link \u6c92\u6709 public IP\uff0c\u56e0\u70ba\u662f\u865b\u64ec\u4ecb\u9762\uff0c\u6240\u4ee5\u9019\u6a23\u662f\u6b63\u5e38\u7684\u3002
"},{"location":"essay/architecture/tcp-socket-loss-after-dhcp/#\u91cd\u65b0\u601d\u8003\u884c\u70ba\u8868\u73fe","title":"\u91cd\u65b0\u601d\u8003\u884c\u70ba\u8868\u73fe","text":"\u6211\u5011\u77e5\u9053 Host \u8a8d\u70ba\u4ed6\u7684\u7684\u9023\u7dda\u9084\u5728\uff0c\u6240\u4ee5\u6709\u500b\u61c9\u7528\u5728 netstat \u611f\u77e5\u5230\u8b8a\u5316\u4e4b\u524d\u5c31\u62d2\u7d55\u6389\u5c01\u5305\u4e86\uff0c \u6240\u4ee5\u6211\u5011\u5fc5\u9808\u53bb\u4e86\u89e3 netstat \u7684\u904b\u4f5c\u6d41\u7a0b\u3002
\u63a8\u85a6\u4f7f\u7528 ssss
\u662f\u88ab\u8a8d\u70ba\u61c9\u8a72\u53d6\u4ee3 netstat \u7684\u5de5\u5177\u3002
the netstat command has been deprecated in favor of the faster, more human-readable ss command.
\u4e8b\u5be6\u4e0a\uff0c\u5f88\u591a\u5de5\u5177\u5df2\u7d93\u88ab\u8a8d\u70ba\u662f\u904e\u6642\u7684\uff0c\u4ee5 Linux foundation \u4e2d\u63a8\u85a6\u7684 networking \u5de5\u5177\u70ba\u4f8b\uff1a
program obsoleted by arp ip neigh ifconfig ip addr ipmaddr ip maddr iptunnel ip tunnel route ip route nameif ifrename mii-tool ethtoolss
\u662f\u900f\u904e socket_diag \u53bb\u53d6\u5f97 OS's kernel \u7684\u9023\u7dda\u8cc7\u8a0a\uff0c\u5305\u62ec\uff1a
netstat \u662f\u900f\u904e /proc
\u7684\u8cc7\u6599\u593e\u4f86\u53d6\u5f97\u73fe\u6709\u7684\u9023\u7dda\u8cc7\u8a0a\uff0c \u63db\u53e5\u8a71\u8aaa\uff0c\u5c0d netstat \u4f86\u8aaa\uff0c\u9023\u7dda\u8cc7\u8a0a\u5176\u5be6\u662f user-space \u800c\u975e kernel space\uff1a
\u4e0a\u9762\u9019\u5f35\u5716\u5f88\u8907\u96dc\uff0c\u4f46\u662f\u65e2\u7136\u5fb5\u72c0\u662f TCP RST
\u90a3\u6211\u5011\u5c31\u5c08\u6ce8\u65bc layer3 \u7684\u6d41\u7a0b\u3002 \u5728\u9032\u5230 user-space \u4e4b\u524d\uff0c\u6703\u6709\u4e09\u5927\u584a\uff1a
mangle \u548c filter \u90fd\u662f iptables \u7b49\u9632\u706b\u7246\u670d\u52d9\u6703\u8ddf OS \u8a3b\u518a Hooks \u4f86\u9054\u6210\uff0c \u5728 Linux \u4e2d\uff0c\u5be6\u8e10\u9019\u500b Hook \u7684\u5c31\u662f Netfilter\u3002 \u5728\u96f2\u539f\u751f\u74b0\u5883\u7684 Cilium \u5247\u662f\u900f\u904e Linux \u4e2d\u7684 eBPF \u5be6\u8e10\u3002
NAT \u5247\u662f\u7528\u4f86\u4fee\u6b63 IP \u4f86\u9054\u5230\u6e9d\u901a\uff0c\u7d93\u5178\u7684\u7528\u6cd5\u5c31\u662f\u628a \u672c\u5730 IP \u8f49\u6210\u5916\u90e8 IP\u3002
\u90a3 pre-routing \u7684 conntrack \u662f\u4ec0\u9ebc\u5462\uff1f
"},{"location":"essay/architecture/tcp-socket-loss-after-dhcp/#smoking-gun-2---conntrack","title":"Smoking gun 2 - conntrack","text":"conntrack\uff08connection tracking\uff09\u88ab\u8a2d\u8a08\u4f86\u8ffd\u8e64\u5354\u5b9a\u7684\u6d41\u7a0b\u72c0\u614b\uff0c \u9019\u88e1\u7684\u6d41\u7a0b\u4e5f\u53ef\u7a31\u70ba\u9023\u7dda\u72c0\u614b\uff0c\u4f46\u8981\u6ce8\u610f\u9019\u500b\u300c\u9023\u7dda\u300d\u4e26\u4e0d\u662f L4 \u610f\u7fa9\u4e0a\u7684\u9023\u7dda\uff0c \u6700\u660e\u986f\u7684\u7279\u5fb5\u5c31\u662f conntrack \u4ecd\u6703\u53bb\u8ffd\u8e64 UDP\u3001ICMP \u9019\u985e\u975e\u300c\u9023\u7dda\u300d\u7684\u5354\u5b9a\u3002
\u4ec0\u9ebc\u662f\u6d41\u7a0b\u72c0\u614b\uff1f\u8209\u500b\u4f8b\u5b50\uff0c\u7576\u4f60\u6536\u5230 TCP ACK
\uff0c\u4f60\u53ef\u4ee5\u77e5\u9053\u76ee\u524d\u9019\u500b\u5c01\u5305\u76ee\u7684\u662f\u4ec0\u9ebc\u55ce\uff1f
\u5728\u4e0d\u77e5\u9053\u73fe\u5728\u6d41\u7a0b\u7684\u72c0\u614b\u4e0b\uff0c\u4f60\u600e\u9ebc\u8fa8\u5225\u9019\u500b ACK
\u662f\u5e36\u6709\u60e1\u610f\u7684 ACK
\u9084\u662f\u6b63\u5e38\u7684 ACK
\uff1f
\u900f\u904e\u5728\u6240\u6709 port \u4e0a\u9762\u767c\u9001 ACK \u6211\u53ef\u4ee5\u78ba\u4fdd\u76ee\u524d\u8a72\u7bc0\u9ede\u958b\u901a\u4e86\u54ea\u4e9b port\uff08\u5305\u542b\u90a3\u4e9b client port\uff09\uff0c \u5982\u679c port \u88ab\u958b\u901a\uff0c\u6211\u5c31\u6703\u6536\u5230 TCP RST\uff0c\u53cd\u4e4b\u5247\u6703\u6c92\u6709\u4efb\u4f55\u56de\u61c9\u3002
\u5982\u679c\u6211\u60f3\u8981\u8b93\u9019\u985e\u7684\u5c01\u5305\u90fd\u4e0d\u7d66\u4efb\u4f55\u56de\u61c9\uff0c\u6211\u5c31\u9700\u8981\u8b93 conntrack \u6709\u80fd\u529b\u8fa8\u5225\u54ea\u500b ACK \u662f\u6b63\u78ba\u7684 ACK\u3002
\u70ba\u4e86\u8a18\u9304\u9019\u4e9b\u6d41\u7a0b\uff0c\u4f60\u53ef\u4ee5\u60f3\u50cf conntrack \u6703\u8ffd\u8e64\u81f3\u5c11\u516d\u7a2e\u7684\u8cc7\u6599\uff1a
$ conntrack -L\nudp 17 29 src=172.0.0.1 dst=172.0.0.3 sport=138 dport=138 [UNREPLIED] src=172.0.0.3 dst=172.0.0.1 sport=138 dport=138 mark=0 use=1\ntcp 6 110 TIME_WAIT src=172.0.0.1 dst=172.0.0.4 sport=40286 dport=80 src=172.0.0.4 dst=172.0.0.1 sport=80 dport=40286 [ASSURED] mark=0 use=1\n
\u5206\u6790\u4e00\u4e0b\u8f38\u51fa\uff1a
UNREPLIED
\u4ee3\u8868\u9019\u500b UDP\u300c\u9023\u7dda\u300d\u6c92\u6709\u6536\u5230\u56de\u8986\uff0c\u9019\u662f UDP \u7279\u6709\u7684\u72c0\u614b\uff1b\u5728\u7b2c\u4e8c\u884c\u4e2d\uff0cTCP \u9023\u7dda\u6700\u5f8c\u9032\u5165 ASSURED
\u72c0\u614b\uff0c \u4ee3\u8868\u9019\u500b\u9023\u7dda\u5df2\u7d93\u5efa\u7acb\u8d77\u4f86\u4e0d\u6703\u88ab\u56e0\u70ba\u5012\u6578\u8a08\u6642\u800c\u88ab\u56de\u6536\uff0c\u4f46\u662f\u5b83\u4ecd\u6703\u5728 TCP \u7d50\u675f\u9023\u7dda\u5f8c\u88ab\u56de\u6536\u3002
\u9810\u8a2d\u53ef\u4ee5\u8a18\u9304 256K \u500b\u6d41\u7a0b\u8cc7\u8a0a\uff0c\u4f60\u53ef\u4ee5\u900f\u904e cat /proc/sys/net/nf_conntrack_max
\u4f86\u78ba\u8a8d\u3002
\u5982\u679c\u4f60\u60f3\u77e5\u9053\u4e0d\u540c\u5354\u5b9a\u5f97\u5230\u7684\u72c0\u614b\u6709\u54ea\u4e9b\uff0c\u53ef\u4ee5\u53c3\u8003\u9019\u7bc7 blog\u3002
conntrack \u7684\u6559\u5b78\u8cc7\u6e90conntrack \u5f88\u8907\u96dc\uff0c\u5149\u662f\u7406\u89e3\u9019\u500b\u5957\u4ef6\u5b58\u5728\u76ee\u7684\u5c31\u9700\u8981\u4e00\u4e9b\u6642\u9593\uff0c\u5e95\u5c64\u5be6\u4f5c\u66f4\u662f\u8907\u96dc\u3002 \u7db2\u8def\u4e0a\u6709\u627e\u5230\u4e00\u4e9b\u6559\u7a0b\uff1a
Fedora Magazine \u95dc\u65bc conntrack \u7684\u4ecb\u7d39\uff1a
\u6709\u500b cloudflare blog \u8aaa\u660e\u9019\u4ef6\u4e8b\uff0c\u7c21\u55ae\u4f86\u8aaa\uff0c\u53ef\u80fd\u6703\u628a\u65b0\u7684\u5c01\u5305\u4e1f\u68c4\u4e26\u6368\u68c4 conntrack \u8868\u683c\u4e2d\u90a3\u4e9b\u975e ASSURED
\u7684\u9023\u7dda\u3002
\u5982\u540c\u524d\u9762\u63d0\u5230\u7684\u300cTCP ACK Scan\u300d\uff0c \u5982\u679c conntrack \u6536\u5230\u6c92\u6709\u8a3b\u518a\u7684 TCP ACK
\uff0c\u9810\u8a2d\u6703\u56de\u61c9 TCP RST
\u3002
\u9019\u548c\u6211\u5011\u89c0\u5bdf\u5230\u7684\u884c\u7232\u8868\u73fe\u4e00\u6a23\uff0c\u4f46\u6211\u5011\u7684\u9023\u7dda\u8868\u88ab\u91cd\u7f6e\u4e86\u55ce\uff1f
"},{"location":"essay/architecture/tcp-socket-loss-after-dhcp/#\u9023\u7dda\u8868\u88ab\u91cd\u7f6e\u4e86\u55ce","title":"\u9023\u7dda\u8868\u88ab\u91cd\u7f6e\u4e86\u55ce","text":"\u56e0\u70ba\u8868\u5fb5\u662f\u4e00\u6a23\u7684\uff0c\u670d\u52d9\u611f\u77e5\u4e0d\u5230 TCP Keep-Alive\uff0c\u4f46\u662f\u537b\u900f\u904e tcpdump \u89c0\u5bdf\u5230 TCP RST
\uff0c \u6240\u4ee5\u6211\u5011\u958b\u59cb\u61f7\u7591\u662f\u4e0d\u662f conntrack \u7684\u554f\u984c\uff0c\u9806\u8457\u9019\u6a23\u7684\u601d\u7dad\uff0c\u5617\u8a66\u5c0b\u627e\u8b49\u64da\u3002
$ conntrack -L | grep 6379 | grep -n ESTABLISHED | wc -l\nconntrack v1.4.4 (conntrack-tools): 171 flow entries have been shown.\n25\n
\u9019\u500b\u6307\u4ee4\u544a\u8a34\u6211\u5011\uff0c\u73fe\u5728\u548c Redis\uff08port 6379\uff09\u7684\u9023\u7dda\u6709 25 \u689d\uff0c \u63a5\u8457\u5b9a\u671f\u53bb\u6aa2\u67e5\u9019\u500b\u6307\u4ee4\u7684\u7d50\u679c\uff0c\u5c31\u6703\u767c\u73fe\u4e00\u6bb5\u6642\u9593\u4e4b\u5f8c\uff0c\u5b83\u88ab\u6e05\u7a7a\u4e86\uff1a
$ watch -c 'conntrack -L | grep 6379 | grep -n ESTABLISHED | wc -l'\nconntrack v1.4.4 (conntrack-tools): 90 flow entries have been shown.\n0\n
\u900f\u904e syslog \u4e5f\u53ef\u4ee5\u8ffd\u67e5\u5230\u7576 conntrack \u986f\u793a\u70ba 0 \u7684\u6642\u5019\uff0c\u6709\u9019\u6a23\u76f8\u95dc\u7684\u7d00\u9304\uff1a
$ tail -f /var/log/syslog | grep DHCP\nJul 4 10:52:38 my-host systemd-networkd[913]: ens3: DHCP lease lost\nJul 4 10:52:38 my-host systemd-networkd[913]: ens3: DHCPv4 address 172.1.0.1/20 via 172.1.0.2\n
\u53ef\u4ee5\u770b\u5230\u7576 conntrack \u88ab\u6e05\u7a7a\u6642\uff08conntrack -L
\u70ba\u96f6\uff09\uff0cDHCP Server \u7684\u8acb\u6c42\u88ab\u4e86\u9001\u9032\u4f86\uff0c \u9019\u7a2e\u5de7\u5408\uff0c\u8db3\u4ee5\u8b93\u6211\u5011\u7e7c\u7e8c\u6df1\u5165\u8ffd\u8e64\u3002\u4e5f\u9032\u4e00\u6b65\u767c\u73fe\u4e00\u4e9b\u76f8\u95dc issue\uff1a
\u4e5f\u6ce8\u610f\u5230 systemd.networkd \u5728\u7ba1\u7406\u9023\u7dda\u7684\u6642\u5019\uff0c\u53ef\u80fd\u6703\u5c0a\u91cd DHCP \u7684\u8acb\u6c42\u4e26\u91cd\u65b0\u7d81\u5b9a\u672c\u5730\u4f4d\u7f6e\uff1a
KeepConfiguration
Takes a boolean or one of \"static\", \"dhcp-on-stop\", \"dhcp\". When \"static\", systemd-networkd will not drop static addresses and routes on starting up process. When set to \"dhcp-on-stop\", systemd-networkd will not drop addresses and routes on stopping the daemon. When \"dhcp\", the addresses and routes provided by a DHCP server will never be dropped even if the DHCP lease expires. This is contrary to the DHCP specification, but may be the best choice if, e.g., the root filesystem relies on this connection. The setting \"dhcp\" implies \"dhcp-on-stop\", and \"yes\" implies \"dhcp\" and \"static\". Defaults to \"dhcp-on-stop\" when systemd-networkd is running in initrd, \"yes\" when the root filesystem is a network filesystem, and \"no\" otherwise.
\u4e0d\u904e\u4e0d\u7ba1\u539f\u56e0\u662f\u4ec0\u9ebc\uff0c\u6700\u7d42\u6211\u5011\u7684\u89e3\u6cd5\u662f\u5728 DHCP Server \u4e2d\u7d81\u5b9a\u975c\u614b IP\uff0c \u907f\u514d\u6bcf\u9694\u4e09\u5341\u5206\u9418\u91cd\u65b0\u8a2d\u5b9a\u4e00\u6b21 IP\u3002
"},{"location":"essay/architecture/tcp-socket-loss-after-dhcp/#\u54ea\u88e1\u53ef\u4ee5\u52a0\u901f","title":"\u54ea\u88e1\u53ef\u4ee5\u52a0\u901f","text":"\u5728\u8655\u7406\u9019\u554f\u984c\u7684\u6642\u5019\u5176\u5be6\u82b1\u4e86\u5f88\u591a\u6642\u9593\uff0c\u4e3b\u8981\u662f\u56e0\u70ba\u5c0d Linux \u5e95\u5c64\u8655\u7406\u9023\u7dda\u7684\u4e0d\u6e05\u695a\u3002 \u91cd\u65b0\u9806\u4e00\u4e0b\u6392\u67e5\u7684\u8108\u7d61\uff1a
ACK
\u5c01\u5305\uff1aACK
\u5c01\u5305\uff1bACK
\u5c01\u5305\uff0c\u4e26\u4e14\u63a5\u8457\u56de\u61c9 RST
\u5c01\u5305\uff1bRST
\uff0c\u4e26\u4e14\u91cb\u653e\u76f8\u95dc\u8cc7\u6e90\u3002\u5176\u5be6\u6392\u67e5\u904e\u7a0b\u5f88\u91cd\u8981\u7684\u4e00\u9ede\u662f log\uff0c\u4f46\u537b\u5e38\u5e38\u88ab\u5ffd\u7565\uff0c \u6211\u5011\u61c9\u8a72\u5728 TCP Dump \u7684\u904e\u7a0b\uff0c\u4e00\u8d77\u53bb\u76e3\u807d Log \u7684\u8f38\u51fa\u3002
\u65e2\u7136\u6392\u67e5\u51fa\u662f client \u7684\u554f\u984c\uff0c\u6211\u5011\u4e5f\u53ef\u4ee5\u8a66\u8457\u5728\u76f8\u540c\u74b0\u5883\u7684\u5176\u4ed6\u7bc0\u9ede\u770b\u770b\u662f\u5426\u6709\u9023\u7dda\u932f\u8aa4\u554f\u984c\u3002 \u6700\u5f8c\u5c31\u662f\u96d6\u7136\u975e\u7cfb\u7d71\u7ba1\u7406\u8005\u5e73\u5e38\u4e0d\u61c9\u8a72\u5728\u7dda\u4e0a\u74b0\u5883\u4e2d\u64cd\u4f5c\u76f8\u95dc\u7bc0\u9ede\uff0c\u4f46\u662f\u7576\u9032\u5165\u6392\u67e5\u7684\u6d41\u7a0b\u6642\uff0c \u9700\u8981\u76e1\u5feb\u8b93\u76f8\u95dc\u4eba\u54e1\u6709\u6b0a\u9650\u53ef\u4ee5\u9032\u5230\u7bc0\u9ede\u9032\u884c\u5404\u7a2e\u5be6\u9a57\uff0c\u5426\u5247\u6bcf\u6b21\u505a\u64cd\u4f5c\u90fd\u9700\u8981\u5927\u5bb6\u7d04\u6642\u9593\uff0c\u7c21\u76f4\u66e0\u65e5\u8cbb\u6642\u3002
\u6700\u5f8c\uff0c\u9019\u6bb5\u7684\u6392\u67e5\u5f88\u5927\u7a0b\u5ea6\u662f\u540c\u4e8b Angus \u505a\u7684\uff0c\u5728\u9019\u908a\u50c5\u4f5c\u7c21\u55ae\u7d00\u9304\uff0c \u82e5\u672a\u4f86\u6709\u4efb\u4f55\u4eba\u56e0\u70ba\u9019\u7bc7\u6587\u7ae0\u5f97\u5230\u5e6b\u52a9\uff0c\u50c5\u4ee5\u6b64\u8868\u9054\u5c0d Angus \u7684\u611f\u8b1d\u3002
"},{"location":"essay/architecture/tomcat-max-packet-size/","title":"Tomcat \u7684 max_packet_size","text":"Tomcat \u4e2d\uff0c\u82e5 HTTP \u8868\u982d\u904e\u5927\uff0c\u6703\u56de\u61c9 413\u3002\u4f46\u662f\u6839\u64da MDN 413 \u4ee3\u8868 Payload Too Large\uff0c\u4e5f\u5c31\u662f HTTP Body \u904e\u5927\uff0c\u70ba\u4ec0\u9ebc\u6703\u6709\u9019\u5dee\u7570\uff1f
\u70ba\u4e86\u907f\u514d Header \u904e\u5927\uff0c\u6211\u5011\u4e0d\u662f\u61c9\u8a72\u8a2d\u7f6e maxHttpHeaderSize \u55ce\uff1f\u70ba\u4ec0\u9ebc\u6703\u9700\u8981\u8a2d\u7f6e packetSize \u9019\u548c Header \u770b\u8d77\u4f86\u6c92\u4ec0\u9ebc\u95dc\u4fc2\u7684\u8a2d\u7f6e\u5462\uff1f
Tomcat \u662f\u4e00\u500b\u63d0\u4f9b Web \u5bb9\u5668\u7684\u7522\u54c1\uff0c\u5118\u7ba1\u672c\u8eab\u63d0\u4f9b web-server \u7684\u529f\u80fd\uff0c\u4f46\u662f\u5927\u90e8\u5206\u60c5\u6cc1\u4ecd\u548c\u7b2c\u4e09\u65b9\u7684 web-server \u505a\u4e32\u63a5\u3002
"},{"location":"essay/architecture/tomcat-max-packet-size/#web-server","title":"web server","text":"\u4e0d\u540c\u7684 Server \u6703\u9700\u8981\u4f7f\u7528\u4e0d\u540c\u7684 connector \u4f86\u548c Tomcat \u505a\u6e9d\u901a\u3002
\u4ee5\u4e0a\u8ff0\u9806\u5e8f\u4f86\u8aaa\uff0c\u5404\u81ea\u5206\u5225\u9700\u8981
\u4f86\u628a HTTP \u8acb\u6c42\u50b3\u9001\u7d66 Tomcat\u3002
"},{"location":"essay/architecture/tomcat-max-packet-size/#worker","title":"worker","text":"\u5c0d\u61c9 web server \u4f86\u8aaa\uff0c\u5be6\u969b\u8655\u7406\u76f8\u95dc HTTP \u8acb\u6c42\u7684\u670d\u52d9\uff0c\u7a31\u70ba worker\uff08backend\uff09\u3002
\u96d6\u7136\u672c\u6587\u8b39\u505a Tomcat \u7684\u4ecb\u7d39\uff0c\u5be6\u969b\u4ecd\u6709\uff1a
\u7d9c\u4e0a\u8ff0\u6240\u8aaa\uff0c\u6211\u5011\u53ef\u4ee5\u6574\u7406\u51fa\u4ee5\u4e0b\u95dc\u4fc2\uff1a
\u4e0a\u95dc\u4fc2\u5716\u770b\u5230 Web Server \u548c Worker \u7684\u6e9d\u901a\u662f\u900f\u904e AJP\uff08Apache JServ Protocol\uff09\u9019\u5354\u5b9a\u6240\u5f62\u6210\u7684\u3002
HTTP Connector \u7684\u8a2d\u7f6e\u8aaa\u660e\u3002 AJP Connector \u7684\u8a2d\u7f6e\u8aaa\u660e\u3002
"},{"location":"essay/architecture/tomcat-max-packet-size/#ajp","title":"AJP","text":"\u56de\u5230\u4e00\u958b\u59cb\u7684\u554f\u984c\uff0c\u70ba\u4ec0\u9ebc HTTP Header \u904e\u5927\uff0cTomcat \u8981\u56de 413\uff1f\u6839\u64da AJP \u4e2d Request Packet Structure \u7684\u8aaa\u660e\uff0c\u4ed6\u6703\u628a HTTP Header \u548c\u4e00\u4e9b\u8cc7\u8a0a\u6574\u5408\u9032\u4e8c\u9032\u4f4d\u7684\u7de8\u78bc\u8cc7\u6599\u4e2d\uff0c\u4e26\u50b3\u9001\u7d66 Worker\u3002
\u4ee5\u4e0a\u8ff0\u72c0\u6cc1\u4f86\u8003\u616e\uff0c\u5c0d Worker \u4f86\u8aaa\uff0c\u4ed6\u6536\u5230\u7684 HTTP Request \u4e2d\u7684 Header \u4e0d\u55ae\u55ae\u53ea\u662f Header\uff0c\u800c\u662f\u5728\u4ed6\u5011\u4e16\u754c\u4e2d\u7684 packet\u3002\u5c01\u5305\u904e\u5927\uff0c\u5c31\u56de 413\uff0c\u807d\u8d77\u4f86\u5f88\u5408\u7406...
\u6700\u5f8c\u5c31\u662f\u70ba\u4ec0\u9ebc\u8981\u8a2d\u7f6e maxHttpHeaderSize
\u548c packetSize
\uff1f\u539f\u4f86 maxHttpHeaderSize
\u662f\u7528\u4f86\u7d66 HTTP Connector \u7684\u8a2d\u7f6e\uff0c\u800c packetSize
\u662f\u7528\u4f86\u7d66 AJP Connector \u7684\u3002
\u820a\u6709\u7cfb\u7d71\uff08Legacy system\uff09\u5c0d\u8a31\u591a\u958b\u767c\u8005\u4f86\u8aaa\uff0c\u662f\u5834\u60e1\u5922\u3002 \u5b83\u901a\u5e38\u6709\u5e7e\u500b\u7279\u9ede\uff1a
\u7531\u65bc\u4ed6\u7684\u7a69\u5b9a\uff0c\u5c0e\u81f4\u6c92\u5fc5\u8981\u53bb\u6539\uff0c\u7531\u65bc\u4ed6\u7684\u76e4\u6839\u932f\u7bc0\uff0c\u5c0e\u81f4\u8981\u53bb\u6539\u5f88\u56f0\u96e3\u3002 \u9032\u800c\u5f15\u8d77\u5b83\u8b8a\u6210\u820a\u6709\u7cfb\u7d71\uff1a\u4f7f\u7528\u820a\u7684\u904b\u884c\u7cfb\u7d71\u3001\u820a\u7684\u8a9e\u8a00\u7248\u672c\u3001\u820a\u7684\u76f8\u4f9d\u5957\u4ef6\u7b49\u7b49\u3002
\u5728\u8655\u7406\u820a\u6709\u7cfb\u7d71\u6642\uff0c\u9019\u88e1\u5217\u51fa\u4e94\u500b\u5de5\u6cd5\uff1a
\u548c\u4e94\u500b\u5fc3\u6cd5\uff1a
\u9019\u4e9b\u5de5\u6cd5\u4e26\u4e0d\u50c5\u50c5\u53ea\u662f\u7368\u7acb\u7684\u65b9\u6cd5\uff0c\u66f4\u6709\u751a\u8005\uff0c\u5b83\u5011\u53ef\u80fd\u662f\u4e00\u7cfb\u5217\u8655\u7406\u820a\u6709\u7cfb\u7d71\u7684\u6b65\u9a5f\uff1a
"},{"location":"essay/code/handle-legacy-system/#\u64f1\u7f6e","title":"\u64f1\u7f6e","text":"\u4e00\u500b\u6700\u7701\u529b\u7684\u65b9\u6cd5\uff0c\u64f1\u7f6e\u3002
\u4f60\u8a55\u4f30\u904e\u6539\u8b8a\u5e36\u4f86\u7684\u6210\u672c\u548c\u98a8\u96aa\uff0c\u65bc\u662f\u767c\u73fe\u7dad\u6301\u73fe\u72c0\u5c31\u662f\u6700\u597d\u7684\u8fa6\u6cd5\u3002 \u901a\u5e38\u8a0e\u8ad6\u904e\u7a0b\u4e2d\u6703\u4f34\u96a8\u8457\u672a\u4f86\u53ef\u80fd\u53ef\u884c\u7684\u65b9\u5411\uff0c\u53ea\u662f\u7576\u4e0b\u6b20\u7f3a\u67d0\u4e9b\u689d\u4ef6\u6216\u74b0\u5883\u3002
"},{"location":"essay/code/handle-legacy-system/#\u5305\u88dd","title":"\u5305\u88dd","text":"\u900f\u904e\u61c9\u7528\u7a0b\u5f0f\u8a2d\u8a08\u4ecb\u9762\uff08Application Programming Interface, API\uff09 \u4f60\u53ef\u4ee5\u628a\u820a\u6709\u7cfb\u7d71\u5305\u88dd\u8d77\u4f86\u3002
\u900f\u904e\u65b0\u7684\u8a9e\u8a00\u3001\u5957\u4ef6\u3001\u670d\u52d9\u5305\u88dd\u820a\u6709\u7cfb\u7d71\uff0c\u9019\u7a2e\u624b\u6cd5\u7a31\u70ba Strangler Pattern \u2013 Martin Fowler \u6216 Encasement Strategy \u2013 Dr. Robert L. Read\u3002 \u5728\u9019\u904e\u7a0b\u4e2d\uff0c\u4f60\u65e2\u80fd\u78ba\u4fdd\u670d\u52d9\u4e0d\u6703\u6709\u76f8\u5bb9\u6027\u554f\u984c\uff0c\u4e5f\u80fd\u589e\u52a0\u4e00\u9ede\u53ef\u4ee5\u63a7\u5236\u7684\u9762\u7a4d\u3002
"},{"location":"essay/code/handle-legacy-system/#\u64f4\u5145","title":"\u64f4\u5145","text":"\u65e2\u7136\u8981\u6539\u8b8a\u5f88\u96e3\uff0c\u90a3\u5c31\u50c5\u50c5\u64f4\u5145\uff08augmentation\uff09\u4ed6\u7684\u529f\u80fd\uff0c\u76e1\u53ef\u80fd\u53bb\u512a\u5316\u800c\u4e0d\u662f\u7570\u52d5\u5546\u52d9\u908f\u8f2f\u3002
\u9019\u7a2e\u624b\u6cd5\u901a\u5e38\u6703\u548c\u5305\u88dd\u4f75\u884c\u4f7f\u7528\u3002
"},{"location":"essay/code/handle-legacy-system/#\u66ff\u63db\u64a4\u9664","title":"\u66ff\u63db\u3001\u64a4\u9664","text":"\u9019\u7a2e\u624b\u6cd5\u5f88\u76f4\u89c0\uff0c\u66ff\u63db\uff08replacement\uff09\u90e8\u5206\u529f\u80fd\u6216\u8005\u76f4\u63a5\u64a4\u9664\uff08retirement\uff09\u820a\u6709\u7cfb\u7d71\u3002
\u5148\u5f9e\u7c21\u55ae\u6216\u6025\u8feb\u7684\u529f\u80fd\u6162\u6162\u6539\uff0c\u505a\u4e00\u4e9b\u90e8\u5206\u7684\u66ff\u63db\u3002 \u6216\u8005\u76f4\u63a5\u5f9e\u982d\u91cd\u5beb\uff0c\u4e26\u628a\u7dda\u4e0a\u7684\u8f38\u5165\u8f38\u51fa\u90fd\u4fdd\u7559\u4e0b\u4f86\uff0c\u7136\u5f8c\u9a57\u8b49\u65b0\u7684\u7cfb\u7d71\u4e26\u4e0d\u6703\u6709\u4efb\u4f55\u7834\u58de\u3002
"},{"location":"essay/code/handle-legacy-system/#\u8a17\u7ba1","title":"\u8a17\u7ba1","text":"\u820a\u6709\u7cfb\u7d71\u4e4b\u6240\u4ee5\u96e3\u4ee5\u6539\u52d5\uff0c\u6709\u5f88\u5927\u4e00\u90e8\u4efd\u7684\u539f\u56e0\u5728\u65bc\u5b83\u548c\u5176\u4ed6\u7cfb\u7d71\u7684\u96b1\u6666\u95dc\u4fc2\u3002
\u7576\u4f60\u8abf\u6574\u5b8c\u820a\u6709\u7cfb\u7d71\u6216\u76f4\u63a5\u64a4\u9664\uff0c\u537b\u7a81\u7136\u6709\u4e00\u500b\u5718\u968a\u544a\u8a34\u4f60\uff1a\u300c\u62b1\u6b49\u6211\u7684\u7cfb\u7d71\u56e0\u70ba\u4f60\u7684\u6539\u52d5\u58de\u4e86\u3002\u300d \u65e2\u7136\u6539\u52d5\u820a\u6709\u7cfb\u7d71\u662f\u5171\u8b58\uff0c\u4e26\u4e14\u5df2\u7d93\u958b\u59cb\u57f7\u884c\u4e86\uff0c\u5728\u5176\u4ed6\u5718\u968a\u56e0\u70ba\u6642\u7a0b\u6216\u5176\u4ed6\u5c08\u6848\u95dc\u4fc2\u7121\u6cd5\u914d\u5408\u6539\u52d5\u6642 \uff08\u5373\u4f7f\u4f60\u5df2\u7d93\u76e1\u53ef\u80fd\u6eff\u8db3\u4e26\u76f8\u5bb9\u5927\u90e8\u5206\u60c5\u5883\u4e86\uff09\uff0c \u4f60\u53ef\u4ee5\u628a\u820a\u6709\u7cfb\u7d71\u7684\u7ba1\u7406\u6b0a\uff08ownership\uff09\u8a17\u7ba1\uff08custodian\uff09\u7d66\u53e6\u4e00\u500b\u9700\u8981\u5b83\u7684\u5718\u968a\u3002
"},{"location":"essay/code/handle-legacy-system/#\u5de5\u6cd5\u7684\u6574\u5408","title":"\u5de5\u6cd5\u7684\u6574\u5408","text":"\u4e0a\u9762\u63d0\u5230\u7684\u9019\u4e9b\u65b9\u6cd5\u5176\u5be6\u4e5f\u53ef\u4ee5\u6574\u5408\u6210\u4e00\u6574\u5957\u7684\u6539\u52d5\u6b65\u9a5f\uff1a
\u5b78\u4e86\u5de5\u6cd5\u6f0f\u4e86\u5fc3\u6cd5\uff0c\u5c31\u597d\u50cf\u5f97\u5176\u5f62\u800c\u4e0d\u5f97\u5176\u795e\u3002
"},{"location":"essay/code/handle-legacy-system/#\u5b9a\u7fa9\u57fa\u6e96","title":"\u5b9a\u7fa9\u57fa\u6e96","text":"\u66ff\u820a\u6709\u7cfb\u7d71\u589e\u52a0\u89c0\u6e2c\u6027\uff08observability\uff09\uff0c\u4e26\u4e14\u5efa\u7acb\u820a\u6709\u7cfb\u7d71\u7684\u57fa\u6e96\uff0c\u4f8b\u5982 HTTP 5xx \u72c0\u614b\u7684\u56de\u61c9\u6bd4\u4f8b\u3002 \u6bcf\u6b21\u6539\u5584\u6642\uff0c\u78ba\u4fdd\u9019\u500b\u57fa\u6e96\u6c92\u6709\u88ab\u7a81\u7834\u3002
"},{"location":"essay/code/handle-legacy-system/#\u5efa\u7acb\u8a08\u756b","title":"\u5efa\u7acb\u8a08\u756b","text":"\u5efa\u7acb\u672a\u4f86\u53ef\u80fd\u7684\u767c\u5c55\u8def\u5f91\uff0c\u4e26\u6301\u7e8c\u8ffd\u8e64\u9032\u5ea6\u662f\u5426\u9054\u6a19\u3002 \u6e96\u7e69\u5b9a\u51fa\u4f86\uff0c\u5c07\u6703\u5e6b\u52a9\u4f60\u8d70\u5f97\u66f4\u9060\u66f4\u4e45\u3002
\u5b9a\u7fa9\u51fa\u6700\u7d42\u63a8\u51fa\u7684\u6642\u9650\uff0c\u901a\u5e38\u7576\u4f60\u8a02\u51fa\u4e00\u500b\u65e5\u671f\uff0c\u5927\u5bb6\u5c31\u6703\u628a\u4ed6\u91d8\u5728\u65e5\u66c6\u4e0a\u3002
"},{"location":"essay/code/handle-legacy-system/#\u5c0b\u627e\u9818\u5c0e","title":"\u5c0b\u627e\u9818\u5c0e","text":"\u7576\u7dda\u4e0a\u51fa\u73fe\u554f\u984c\u6642\uff0c\u9019\u500b\u4eba\u6703\u662f\u5c0d\u5916\u7684\u7a97\u53e3\uff0c\u4e26\u4e14\u64c1\u6709\u6574\u500b\u5c08\u6848\u7684\u8996\u89d2\u3002 \u540c\u6642\uff0c\u4ed6\u6703\u78ba\u4fdd\u5de5\u6642\u7684\u512a\u5148\u7a0b\u5ea6\u88ab\u6eff\u8db3\uff0c\u5c08\u6ce8\u5728\u7576\u4e0b\u61c9\u8a72\u88ab\u89e3\u6c7a\u7684\u4e8b\u60c5\u3002
"},{"location":"essay/code/handle-legacy-system/#\u78ba\u4fdd\u6e9d\u901a","title":"\u78ba\u4fdd\u6e9d\u901a","text":"\u5916\u90e8\u55ae\u4f4d\u5f88\u53ef\u80fd\u6703\u7121\u6cd5\u7406\u89e3\u70ba\u4ec0\u9ebc\u597d\u597d\u5730\u8981\u53bb\u6539\u820a\u6709\u7cfb\u7d71\uff0c \u78ba\u4fdd\u548c\u5176\u4ed6\u4eba\u7684\u6e9d\u901a\uff0c\u4e26\u4e14\u8b93\u4ed6\u4eba\u7406\u89e3\u6539\u52d5\u820a\u6709\u7cfb\u7d71\u7684\u5fc5\u8981\u6027\u3002
\u6700\u91cd\u8981\u7684\u662f\u8b93\u4ed6\u5011\u77e5\u9053\uff0c\u7576\u51fa\u73fe\u554f\u984c\u6642\uff0c\u8a72\u53bb\u627e\u8ab0\uff0c\u600e\u9ebc\u89e3\u6c7a\uff1f
"},{"location":"essay/code/handle-legacy-system/#\u8fed\u4ee3\u66f4\u65b0","title":"\u8fed\u4ee3\u66f4\u65b0","text":"\u5148\u91dd\u5c0d\u5c0f\u7bc4\u570d\u7684\u7570\u52d5\u53bb\u4fee\u6539\u3001\u512a\u5316\u3002 \u7576\u6574\u500b\u4e0a\u7dda\u6d41\u7a0b\u662f\u66a2\u901a\u4e14\u719f\u6089\u7684\uff0c\u518d\u4f86\u9010\u6b65\u4e00\u6bb5\u4e00\u6bb5\u7684\u8abf\u6574\u3002
"},{"location":"essay/code/handle-legacy-system/#\u7e3d\u7d50","title":"\u7e3d\u7d50","text":"\u820a\u6709\u7cfb\u7d71\u662f\u9700\u8981\u8de8\u55ae\u4f4d\u4e4b\u9593\u7684\u52aa\u529b\uff0c\u5728\u8655\u7406\u7684\u904e\u7a0b\u5f88\u6709\u53ef\u80fd\u662f\u66e0\u65e5\u8cbb\u6642\u7684\u3002 \u5c0d\u4ed6\u62b1\u6709\u8010\u5fc3\u4e26\u5c0b\u6c42\u5fc3\u7406\u4e0a\u7684\u8a8d\u540c\u548c\u652f\u6301\u3002\u6700\u5f8c\uff0c\u795d\u4f60\u597d\u904b\uff01
"},{"location":"essay/code/node.js-best-practice/","title":"Node.js \u6700\u4f73\u5be6\u4f5c","text":"Referrer from express.js best practice.
In most cases, these are still useful in different frameworks or applications.
"},{"location":"essay/code/node.js-best-practice/#do-in-code","title":"Do In Code","text":"const callback = async () => {\n console.log(\"do another thing\");\n throw new Error(\"foo\");\n console.log(\"do more thing\");\n};\n\nconst method = async () => {\n console.log(\"do first thing\");\n callback();\n console.log(\"do second thing\");\n};\n\nconst main = async () => {\n try {\n method();\n } catch (err) {\n console.log(\"fire try-catch!\");\n }\n\n console.log(\"finish project!\");\n};\n
"},{"location":"essay/code/node.js-best-practice/#result","title":"Result","text":"do first thing\ndo another thing\ndo second thing\nfinish project!\nUnhandledPromiseRejectionWarning: Error: foo\n... (error stack)\n
"},{"location":"essay/code/node.js-best-practice/#why","title":"why?","text":"callback
invoked some time later after method
(do another thing
).do second thing
).finish project!
).env.NODE_ENV='production';
https://wiki.debian.org/systemd/ \u21a9
http://upstart.ubuntu.com/ \u21a9
https://nodejs.org/docs/latest/api/cluster.html \u21a9
https://docs.strongloop.com/display/SLC/Clustering \u21a9
Varnish https://www.varnish-cache.org/ \u21a9
Nginx https://serversforhackers.com/nginx-caching/ \u21a9
Nginx https://serversforhackers.com/nginx-caching/ \u21a9
HAProxy http://www.haproxy.org/ \u21a9
EACCES
(Permission denied): An attempt was made to access a file in a way forbidden by its file access permissions.EADDRINUSE
(Address already in use): An attempt to bind a server (net
, http
, or https
) to a local address failed due to another server on the local system already occupying that address.EPERM
(Operation not permitted): An attempt was made to perform an operation that requires elevated privileges.EEXIST
(File exists): An existing file was the target of an operation that required that the target not exist.EISDIR
(Is a directory): An operation expected a file, but the given pathname was a directory.EMFILE
(Too many open files in system): Maximum number of file descriptors allowable on the system has been reached, and requests for another descriptor cannot be fulfilled until at least one has been closed. This is encountered when opening many files at once in parallel, especially on systems (in particular, macOS) where there is a low file descriptor limit for processes. To remedy a low limit, run ulimit -n 2048
in the same shell that will run the Node.js process.ENOENT
(No such file or directory): Commonly raised by fs
operations to indicate that a component of the specified pathname does not exist. No entity (file or directory) could be found by the given path.ENOTDIR
(Not a directory): A component of the given pathname existed, but was not a directory as expected. Commonly raised by fs.readdir
.ENOTEMPTY
(Directory not empty): A directory with entries was the target of an operation that requires an empty directory, usually fs.unlink
.\u7c21\u4ecb\u7269\u4ef6\u5c0e\u5411\u7684\u540d\u8a5e\uff0c\u4ee5 TypeScript \u70ba\u4f8b\u3002
"},{"location":"essay/code/object-oriented-terms/#\u7a2e\u985e","title":"\u7a2e\u985e","text":"\u4ecb\u7d39\u5404\u7a2e\u4f60\u6703\u770b\u5230\u7684\u540d\u8a5e\u3002
"},{"location":"essay/code/object-oriented-terms/#\u985e\u5225","title":"\u985e\u5225","text":"Class\uff0c\u985e\u5225\uff0c\u4e00\u7a2e\u53ef\u4ee5\u6574\u5408\u908f\u8f2f\u548c\u72c0\u614b\u7684\u55ae\u4f4d\uff0c\u4f8b\u5982\uff1a
// \u985e\u5225\u540d\u7a31\uff0c\u8cb4\u8cd3\u72d7\nclass Poodle {\n // \u975c\u614b\u516c\u958b\u5c6c\u6027\uff0c\u6b63\u5e38\u7684\u8cb4\u8cd3\u72d7\u7684\u817f\u6578\n public static legs = 4;\n\n // \u516c\u958b\u5c6c\u6027\uff0c\u9019\u500b\u8cb4\u8cd3\u72d7\u7684\u817f\u6578\n public legs: number;\n\n // \u79c1\u6709\u5c6c\u6027\uff0c\u9019\u500b\u8cb4\u8cd3\u72d7\u7684\u80fd\u91cf\n private energy: number;\n\n // \u5efa\u69cb\u5b50\n constructor(legs = Poodle.legs, energy = 10) {\n this.legs = legs;\n this.energy = energy;\n }\n\n // \u516c\u958b\u51fd\u5f0f\uff0c\u8cb4\u8cd3\u72d7\u547c\u53eb\n public shout(): string {\n this.shoutCost();\n return 'woof';\n }\n\n // \u516c\u958b\u51fd\u5f0f\uff0c\u9019\u96bb\u8cb4\u8cd3\u72d7\u53d7\u50b7\u4e86\u55ce\n public isInjured() {\n return Poodle.legs > this.legs;\n }\n\n // \u516c\u958b\u51fd\u5f0f\uff0c\u9019\u96bb\u8cb4\u8cd3\u72d7\u662f\u4e0d\u662f\u7d2f\u4e86\n public isTired(): boolean {\n return this.energy < 5;\n }\n\n // \u79c1\u6709\u51fd\u5f0f\uff0c\u7576\u53eb\u4e86\u4e4b\u5f8c\u6703\u6d88\u8017\u7684\u6771\u897f\n private shoutCost(): void {\n this.energy -= 3;\n }\n}\n
\u63a5\u8457\u4f60\u53ef\u4ee5\u9019\u6a23\u64cd\u4f5c\uff1a
// \u5efa\u69cb\u5be6\u4f8b\uff0c\u5e38\u8aaa new \u4e00\u500b instnace\nconst poodle = new Poodle(3);\n// \u4f7f\u7528\u516c\u958b\u51fd\u5f0f\nconsole.log(`Is injured? ${poodle.isInjured()}`);\nconsole.log(`Shout: ${poodle.shout()}`);\nconsole.log(`Is tired? ${poodle.isTired()}`);\nconsole.log(`Shout: ${poodle.shout()}`);\nconsole.log(`Is tired? ${poodle.isTired()}`);\n// \u4f7f\u7528\u516c\u958b\u5c6c\u6027\nconsole.log(`Legs should have: ${Poodle.legs}, but get ${poodle.legs}`);\n// \u4ee5\u4e0b\u64cd\u4f5c\u6703\u51fa\u932f\npoodle.energy;\npoodle.shoutCost();\n
\u6709\u5e7e\u9ede\u540d\u8a5e\uff1a
\u628a\u985e\u5225\u62bd\u8c61\u5316\uff0c\u4f8b\u5982\uff1a
abstract class Dog {\n public static legs = 4;\n\n public legs: number;\n\n // \u6ce8\u610f\u9019\u88e1\u5f9e private \u6539\u6210 protected\n protected energy: number;\n\n constructor(legs = Dog.legs, energy = 10) {\n this.legs = legs;\n this.energy = energy;\n }\n\n public shout(): string {\n this.shoutCost();\n return 'woof';\n }\n\n public isInjured(): boolean {\n return Dog.legs > this.legs;\n }\n\n // \u6ce8\u610f\u9019\u88e1\u5f9e private \u6539\u6210 protected\n // \u9664\u6b64\u4e4b\u5916\uff0c\u628a\u9019\u500b\u51fd\u793a\u62bd\u8c61\u5316\uff0cabstract\n protected abstract shoutCost(): void;\n}\n\n// \u8cb4\u8cd3\u72ac\nclass Poodle extends Dog {\n protected shoutCost(): void {\n this.energy -= 3;\n }\n}\n\n// \u9b25\u725b\u72ac\nclass Bulldog extends Dog {\n // \u5446\u5446\u7684\u72d7\u7a2e\uff0c\u568e\u53eb\u6703\u6d88\u8017\u66f4\u591a\u9ad4\u529b\n protected shoutCost(): void {\n this.energy -= 4;\n }\n}\n
\u9019\u88e1\u6709\u5e7e\u500b\u65b0\u7684\u540d\u8a5e\uff1a
Poodle
\u6216 Bulldog
\u90fd\u53bb\u7e7c\u627f\u62bd\u8c61\u985e\u5225 Dog
\u4f46\u662f\u62bd\u8c61\u985e\u5225\u4e0d\u80fd\u5efa\u69cb\uff1a
// \u6703\u51fa\u932f\nconst dog = new Dog();\n
"},{"location":"essay/code/object-oriented-terms/#\u4ecb\u9762","title":"\u4ecb\u9762","text":"\u9664\u4e86\u62bd\u8c61\u985e\u5225\uff0c\u4f60\u4e5f\u53ef\u4ee5\u7528\u4ecb\u9762\uff08interface\uff09\u4f86\u628a\u62bd\u8c61\u7a0b\u5ea6\u62c9\u9ad8\uff1a
interface Animal {\n legs: number;\n\n isInjured(): boolean;\n}\n\n// \u6ce8\u610f\u9019\u88e1\u662f\u7528 implements \u4e0d\u662f extends\nabstract class Dog implements Animal {}\n
\u4ecb\u9762\u4e00\u6a23\u4e0d\u80fd\u5efa\u69cb\uff1a
// \u6703\u51fa\u932f\nconst animal = new Animal();\n
\u9019\u88e1\u518d\u5f37\u8abf\u4e00\u4e0b\u4ecb\u9762\u672c\u8eab\u6c92\u6709\u5be6\u4f5c\uff0c\u4ecb\u9762\u53ea\u662f\u544a\u8a34\u5927\u5bb6\uff1a\u6211\u6709\u9019\u500b\u51fd\u5f0f\uff0c\u4f46\u5176\u4ed6\u4eba\u600e\u9ebc\u5be6\u4f5c\u7684\u6211\u4e0d\u77e5\u9053\u3002\u4ee5\u4e0a\u9762\u7684\u4ecb\u9762\u70ba\u4f8b\uff0c\u6240\u6709 Animal
\u90fd\u53ef\u4ee5\u6709 isInjured
\u9019\u500b\u51fd\u793a\uff0c\u4e26\u4e14\u4ed6\u56de\u50b3\u7684\u503c\u5fc5\u9808\u662f boolean
\u3002
\u4e5f\u56e0\u6b64\u985e\u5225\u5fc5\u9808\u53bb\u300c\u5be6\u4f5c\u300d\u9019\u500b\u4ecb\u9762\uff0c\u4ee5\u4e0a\u9762\u7684\u62bd\u8c61\u985e\u5225 Dog
\u70ba\u4f8b\uff0c\u4ed6\u5c31\u5be6\u4f5c\u4e86\u9019\u500b\u51fd\u793a\uff1a
abstract class Dog implements Animal {\n public isInjured(): boolean {\n // \u9019\u88e1\u7684\u7a0b\u5f0f\u78bc\uff0c\u7a31\u70ba\u5be6\u4f5c\n return Dog.legs > this.legs;\n }\n}\n
"},{"location":"essay/code/object-oriented-terms/#\u6bd4\u8f03\u4e00\u4e0b","title":"\u6bd4\u8f03\u4e00\u4e0b","text":"\u70ba\u4ec0\u9ebc\u8981\u62c9\u9ad8\u62bd\u8c61\u7a0b\u5ea6\uff1f
\u60f3\u50cf\u4e00\u4e0b\u670b\u53cb\u6253\u96fb\u8a71\u7d66\u4f60\uff0c\u554f\u4f60\u5728\u5e79\u561b\uff0c\u4f60\u53ef\u4ee5\u6709\u5169\u7a2e\u9078\u64c7\uff1a
\u5f9e\u4f8b\u5b50\u53ef\u4ee5\u4e86\u89e3\u5230\uff0c\u62bd\u8c61\u7684\u76ee\u7684\u662f\u70ba\u4e86\u6e9d\u901a\uff0c\u7576\u7269\u4ef6\u548c\u7269\u4ef6\u4e4b\u9593\u6e9d\u901a\u5bb9\u6613\u4e86\u4e4b\u5f8c\uff0c\u624d\u6709\u53ef\u80fd\u628a\u6574\u9ad4\u7684\u67b6\u69cb\u5beb\u7684\u55ae\u7d14\u7c21\u55ae\uff0c\u4f8b\u5982\uff1a
// \u6aa2\u67e5\u73fe\u5728\u7684\u74b0\u5883\u662f\u4e0d\u662f\u512a\u826f\u7684\nfunction isGoodEnv(animals: Animal[]): boolean {\n // \u627e\u51fa\u75b2\u5026\u7684\u52d5\u7269\n const tiredAnimals = animals.filter((animal) => animal.isTired());\n // \u5982\u679c\u75b2\u5026\u7684\u52d5\u7269\u5c0f\u65bc\u7e3d\u9ad4\u7684\u4e09\u6210\uff0c\u5c31\u662f\u597d\u7684\u74b0\u5883\n return tiredAnimals.length / animals.length < 0.3;\n}\n
\u9664\u6b64\u4e4b\u5916\uff0c\u62bd\u8c61\u4e4b\u5f8c\uff0c\u5c31\u53ef\u4ee5\u5ef6\u4f38\u5f88\u591a\u8a2d\u8a08\u6a21\u5f0f\uff08Design Patterns\uff09\u3002
"},{"location":"essay/code/object-oriented-terms/#\u6574\u5408\u4e00\u4e0b","title":"\u6574\u5408\u4e00\u4e0b","text":"\u96d6\u7136\u4ecb\u9762\u548c\u62bd\u8c61\u985e\u5225\u4e0d\u80fd\u5efa\u69cb\uff0c\u4f46\u662f\u4ed6\u53ef\u4ee5\u88ab\u7528\u4f5c\u578b\u5225\uff08type\uff09\u3002
// \u6311\u9017\u52d5\u7269\uff0c\u6703\u89f8\u6cd5\u5b83\u543c\u53eb\nfunction influriate(animal: Animal) {\n return animal.shout();\n}\n\nconst poodle = new Poodle();\nconsole.log(influriate(poodle));\n
"},{"location":"essay/web/certificate-transparency/","title":"Certificate Transparency","text":"\u56e0\u70ba CA (Certificate Authorities)\u7c3d\u51fa\u4f86\u7684\u7c3d\u8b49\uff08Certificate\uff09\u53ef\u80fd\u4e0d\u88ab\u4fe1\u4efb\uff08\u932f\u8aa4\u8a2d\u5b9a\u3001\u88ab\u653b\u64ca\u3001\u516c\u53f8\u5012\u9589\u7b49\u7b49\uff09\uff0c\u6240\u4ee5\u9700\u8981\u8b93\u6bcf\u500b CA \u53bb\u628a\u7c3d\u767c\u51fa\u4f86\u7684\u6191\u8b49\u8a18\u9304\u5728\u4e00\u500b\u516c\u958b\u7684\u5730\u65b9\uff08\u6216\u8005\u7a31\u5176\u70ba\u65e5\u8a8c\uff0clog\uff09\u8b93\u5927\u5bb6\u5be9\u6838\u3002
\u9019\u500b\u516c\u958b\u7684\u65e5\u8a8c\u7a31\u4f5c\u7c3d\u8b49\u900f\u660e\u5316\uff08Certificate Transparency\uff0cCT\uff09\uff0c\u5176\u8981\u80fd\uff1a
\u7576\u5be9\u6838\u767c\u73fe\u6709\u554f\u984c\u6642\uff0c\u5c31\u53ef\u4ee5\u900f\u904e\u65e2\u6709\u6a5f\u5236\u64a4\u92b7\u8a72\u6191\u8b49\uff08OCSP1\u3001CRL\u3001CRLSet \u7b49\u7b49\uff09\u3002\u5c31\u4e0d\u6703\u518d\u50cf\u4e4b\u524d\u90a3\u6a23\uff0c\u767c\u73fe\u554f\u984c\u6642\uff0c\u5df2\u7d93\u662f\u597d\u5e7e\u5929\u4e4b\u5f8c\u4e86\u3002
"},{"location":"essay/web/certificate-transparency/#referrer","title":"Referrer","text":"\u5efa\u8b70\u4e0d\u8981\u4f7f\u7528 OCSP\uff0c\u53ef\u4ee5\u770b Referrer \u4e2d\u7684\u9023\u7d50\u3002\u00a0\u21a9
HTTP\uff08HyperText Transfer Protocol\uff09\u8d85\u6587\u672c\u50b3\u8f38\u5354\u5b9a\u7684\u8aaa\u660e\u548c\u6ce8\u610f\u4e8b\u9805\u3002
"},{"location":"essay/web/http/#osi-\u4e2d\u626e\u6f14\u7684\u89d2\u8272","title":"OSI \u4e2d\u626e\u6f14\u7684\u89d2\u8272","text":"\u50b3\u8f38\u5c64\uff08Transport Layer\uff09\u4e4b\u4e0a\uff0c\u901a\u5e38\u5305\u8fa6\u6703\u8b70\u5c64\u3001\u8868\u73fe\u5c64\u3001\u61c9\u7528\u5c64\uff0c \u4f46\u5728\u7b2c\u4e09\u7248\uff08HTTP/3\uff09\u4e4b\u5f8c\uff0c\u9023\u50b3\u8f38\u5c64\u4e5f\u4e00\u8d77\u5305\u9032\u53bb\u4e86\uff0c \u8a73\u898b QUIC \u5b98\u7db2\u548c\u5be6\u969b\u5c01\u5305\u5167\u5bb9\u3002
HTTP \u5efa\u7acb\u5728 TCP \u4e4b\u4e0a\uff0c\u96d6\u7136 TCP \u53ef\u4ee5\u78ba\u4fdd\u9023\u7dda\u7684\u7a69\u5b9a\uff0c \u4f46\u662f\u6211\u5011\u9700\u8981\u66f4\u9ad8\u5c64\u6b21\u7684\u6703\u8a71\uff08Session\uff09\u548c\u8a2d\u5b9a\u6a5f\u5236\uff0c\u4f8b\u5982\uff1a \u9019\u6b21\u8acb\u6c42\u7684\u4eba\uff0c\u662f\u4e0d\u662f\u4e00\u500b\u6708\u524d\u767b\u5165\u7684\u90a3\u500b\u4f7f\u7528\u8005\u3002 \u9019\u7a2e\u9a57\u8b49\u908f\u8f2f\uff0c\u5728\u4efb\u4f55\u50b3\u8f38\u5c64\u5354\u5b9a\u90fd\u7121\u6cd5\u8fa6\u5230\uff0c\u56e0\u70ba\u9019\u5df2\u7d93\u727d\u6d89\u5230\u300c\u61c9\u7528\u908f\u8f2f\u300d\u4e86\u3002
\u5f9e\u4e0a\u9762\u4e5f\u53ef\u4ee5\u5f97\u77e5\uff0cHTTP \u5176\u5be6\u5c31\u662f\u4e00\u7a2e\u91dd\u5c0d\u61c9\u7528\u7a0b\u5f0f\u908f\u8f2f\u7684\u5354\u5b9a\uff0c \u6240\u8b02\u7684\u8d85\u6587\u672c\uff08Hypertext\uff09\u5c31\u662f\u4e0d\u518d\u50cf\u5e95\u5c64\u5354\u5b9a\u90a3\u6a23\uff0c \u900f\u904e\u4f4d\u5143\uff08bit\uff09\u53bb\u505a\u4e00\u4e9b\u53c3\u6578\u8a2d\u5b9a\uff0c\u4f8b\u5982 TCP \u9078\u9805\uff0c \u800c\u662f\u900f\u904e\u7d14\u6587\u5b57\u4f86\u63a7\u5236\u53c3\u6578\uff0c \u4f8b\u5982 HTTP \u7528 HSTS \u53bb\u5354\u8abf\u8acb\u6c42\u65b9\uff08\u901a\u5e38\u662f\u700f\u89bd\u5668\uff09\u61c9\u8a72\u7528\u54ea\u500b\u7248\u672c\u7684\u5354\u5b9a\u3002
\u6574\u500b\u5354\u5b9a\u975e\u5e38\u55ae\u7d14\u7684\u5206\u6210\u4e09\u500b\u5340\u584a\uff1a\u5354\u5b9a\u8cc7\u8a0a\uff0c\u53c3\u6578\u8a2d\u5b9a\uff0c\u6e9d\u901a\u5167\u5bb9\u3002 \u4e26\u5206\u5225\u7528 CRLF \u9019\u500b\u63db\u884c\u7b26\u865f\uff0c \u4f86\u6a19\u793a\u9019\u4e09\u500b\u5340\u584a\u7684\u4f4d\u7f6e\u3002
"},{"location":"essay/web/http/#\u5354\u5b9a\u8cc7\u8a0a","title":"\u5354\u5b9a\u8cc7\u8a0a","text":"\u9019\u662f\u8acb\u6c42\u6216\u56de\u61c9\u7684\u7b2c\u4e00\u884c\u3002
\u5982\u679c\u662f\u8acb\u6c42\u65b9\uff0c\u5167\u5bb9\u5c31\u5305\u62ec\u4f60\u7528\u4e86\u4ec0\u9ebc\u7248\u672c\u7684 HTTP\uff0c \u4f60\u91dd\u5c0d\u61c9\u7528\u7a0b\u5f0f\u7684\u54ea\u500b\u5730\u65b9\uff08HTTP Path\uff09\uff0c \u505a\u4ec0\u9ebc\u6a23\u7684\u8acb\u6c42\uff08HTTP Method\uff09\uff0c\u4f8b\u5982\uff1a
GET /hello HTTP/2\n...\u63a5\u4e0b\u4f86\u662f\u53c3\u6578\u8a2d\u5b9a...\n
\u5c31\u662f\u4f7f\u7528 GET
\u65b9\u6cd5\u5230\u61c9\u7528\u7a0b\u5f0f\u7684 /hello
\u9019\u500b\u4f4d\u7f6e\u53bb\u505a HTTP/2 \u7684\u8acb\u6c42\u3002
\u5982\u679c\u662f\u56de\u61c9\uff0c \u5247\u662f\u6703\u6709\u7248\u672c\u548c\u56de\u61c9\u7684\u72c0\u614b\uff08HTTP Status\uff09\uff0c\u4f8b\u5982\uff1a
HTTP/2 200\n...\u63a5\u4e0b\u4f86\u662f\u53c3\u6578\u8a2d\u5b9a...\n
\u5c31\u662f\u56de\u61c9 200 \u9019\u500b\u7de8\u865f\uff0c \u5728 RFC-9110 \u4e2d\uff0c 200 \u9019\u500b\u7de8\u865f\u4ee3\u8868 OK
\u3002
\u8b93\u9019\u500b\u5354\u5b9a\u64c1\u6709\u975e\u5e38\u591a\u7709\u89d2\u7684\u5730\u65b9\u5c31\u662f\u53c3\u6578\u8a2d\u5b9a\uff0c \u4f4d\u7f6e\u5728\u8acb\u6c42\uff08\u6216\u56de\u61c9\uff09\u7684\u7b2c\u4e8c\u884c\u5230\u4e0b\u4e00\u500b\u7a7a\u884c\uff1a
GET / HTTP/2\nheader1: value\nheader2: value\n\npayload\n
\u4e0a\u8ff0\u7bc4\u4f8b\u53ef\u4ee5\u770b\u5230\u6a19\u982d\uff08Header\uff09\u7e3d\u5171\u6709\u5169\u500b\uff0c \u9019\u662f\u56e0\u70ba\u7b2c\u4e8c\u884c\u5230\u4e0b\u4e00\u500b\u7a7a\u884c\u4e4b\u9593\u7e3d\u5171\u6709\u5169\u884c\u3002
\u6a19\u982d\u7684\u683c\u5f0f\u5f88\u55ae\u7d14\uff0c\u884c\u9996\u5230\u5192\u865f\u4e4b\u524d\u70ba\u9375\uff08key\uff09\uff0c\u5927\u5c0f\u5beb\u6c92\u5dee\uff0c\u4e0d\u53ef\u4ee5\u6709\u7a7a\u683c\uff1b \u5192\u865f\u5f8c\u70ba\u503c\uff08value\uff09\uff0c\u5927\u5c0f\u5beb\u6709\u5dee\uff0c\u9700\u8981\u5ffd\u7565\u524d\u9762\u7684\u7a7a\u683c\u3002
\u7531\u6b64\u8a95\u751f\u6975\u5176\u8907\u96dc\u7684\u61c9\u7528\u8a2d\u5b9a\u74b0\u5883\u3002 \u8eab\u70ba\u4f7f\u7528\u8005\u901a\u5e38\u4f60\u4e0d\u7528\u592a\u64d4\u5fc3\u9019\u4ef6\u4e8b\u60c5\uff0c\u56e0\u70ba\u5049\u5927\u7684\u700f\u89bd\u5668\u548c\u76f8\u95dc\u898f\u7bc4\uff0c\u4f8b\u5982 W3C\u3001 IANA \u548c\u5f88\u53d7\u516c\u4fe1\u7684 MDN \u7b49\u7b49\uff0c \u90fd\u5e6b\u4f60\u7ba1\u7406\u597d\u4e86\uff0c\u4f46\u662f\u8eab\u70ba\u61c9\u7528\u7a0b\u5f0f\u7684\u958b\u767c\u8005\uff0c\u4f60\u53ef\u80fd\u5c31\u8981\u958b\u59cb\u982d\u5927\u4e86\u3002
"},{"location":"essay/web/http/#\u6e9d\u901a\u5167\u5bb9","title":"\u6e9d\u901a\u5167\u5bb9","text":"\u5728\u7b2c\u4e00\u500b\u7a7a\u884c\u4e4b\u5f8c\u7684\u6587\u5b57\uff0c\u901a\u5e38\u5b58\u653e\u61c9\u7528\u7a0b\u5f0f\u908f\u8f2f\u7684\u5167\u5bb9\uff0c\u4f8b\u5982\uff1a
POST /give-me-ticket HTTP/2\nheader1: value\nheader2: value\n\n\u6211\u7684\u540d\u5b57\u662f\u5442\u5b78\u6d32\uff0c\u5e6b\u6211\u8a02\u6a5f\u7968\u3002\n
\u81f3\u65bc\u5b58\u653e\u7684\u5167\u5bb9\u8981\u7528\u4ec0\u9ebc\u683c\u5f0f\uff0c \u5c31\u53ef\u4ee5\u6839\u64da\u61c9\u7528\u7a0b\u5f0f\u81ea\u5df1\u53bb\u9078\u64c7\u4e86\u3002
"},{"location":"essay/web/http/#\u6a19\u982d\u53c3\u6578\u8a2d\u5b9a","title":"\u6a19\u982d\uff1a\u53c3\u6578\u8a2d\u5b9a","text":""},{"location":"essay/web/http/#\u7dad\u904b\u8981\u6ce8\u610f\u7684\u6a19\u982d","title":"\u7dad\u904b\u8981\u6ce8\u610f\u7684\u6a19\u982d","text":""},{"location":"essay/web/http/#access-control-max-age","title":"Access-Control-Max-Age","text":"MDN
\u5b83\u662f\u7528\u4f86\u8655\u7406 Preflight \u8acb\u6c42\u7684\u5feb\u53d6\u3002
"},{"location":"essay/web/http/#\u8cc7\u5b89\u8981\u6ce8\u610f\u7684\u6a19\u982d","title":"\u8cc7\u5b89\u8981\u6ce8\u610f\u7684\u6a19\u982d","text":""},{"location":"essay/web/http/#x-forwarded-for","title":"X-Forwarded-For","text":"\u628a\u8acb\u6c42\u65b9\u7684 IP \u50b3\u905e\u4e0b\u53bb\uff0c\u4f46\u662f\u5728\u958b\u653e\u7db2\u8def\u4e0b\uff0c\u662f\u53ef\u4ee5\u88ab\u7be1\u6539\uff0c\u8981\u5c0f\u5fc3\u4f7f\u7528\u3002
"},{"location":"essay/web/http/#meta","title":"Meta","text":"set the cookie
"},{"location":"essay/web/http/#content-encoding","title":"Content-Encoding","text":"\u907f\u514d CRLF Injection
"},{"location":"essay/web/http/#connection","title":"Connection","text":"\u5982\u679c\u8acb\u6c42\u6709\u9019\u500b Header\uff0c\u670d\u52d9\u65b9\u5728\u56de\u61c9\u5f8c\uff0c\u5c31\u6703\u4e3b\u52d5\u95dc\u9589\u9023\u7dda\u3002 \u95dc\u9589\u9023\u7dda\u7684\u90a3\u65b9\u662f\u8981\u8ca0\u64d4\u8f03\u5927\u7684 TCP \u958b\u92b7\uff0c\u4e26\u8caf\u5b58 TCP TIME_WAIT
\u7684\u9023\u7dda\u3002
\u7528\u4f86\u6a19\u8a8c\u8cc7\u6e90\u7684\u7248\u672c\uff0c\u53ef\u4ee5\u4f7f\u7528\u9019\u500b\u589e\u52a0\u5feb\u53d6\u6a5f\u5236\uff0c\u4f8b\u5982\uff1a
sequenceDiagram\n participant c as Client\n participant s as Server\n c ->> s: Request content\n s ->> c: Content with eTag: `abc`\n c ->> s: Update content if-match: `abc`\n c ->> s: Request content if-none-match: `abc`\n
Server \u6536\u5230 if-match
\u5f8c\u5c31\u53ef\u4ee5\u6aa2\u67e5\u662f\u5426\u6709\u7af6\u8cfd\u554f\u984c\uff08\u540c\u6642\u6709\u5169\u500b\u4eba\u66f4\u65b0\u8a72 content\uff09\uff0c \u6216\u8005\u4e5f\u53ef\u4ee5\u900f\u904e if-none-match
\u6aa2\u67e5\u662f\u5426\u70ba\u820a\u7248\u7684 content \u7136\u5f8c\u5c31\u56de\u50b3 304\uff08Not Modified\uff09\uff0c \u907f\u514d\u7db2\u8def\u8cc7\u6e90\u7684\u8017\u7528\u3002
\u8a2d\u5b9a public max-age=0 must-revalidate
\u4ee3\u8868\uff1a
\u5e6b\u6211\u5feb\u53d6\u9019\u6771\u897f\uff0c\u4f46\u662f\u99ac\u4e0a\u8b93\u4ed6\u904e\u671f\uff0c\u4e26\u91cd\u65b0\u548c\u6211\u9a57\u8b49\u9019\u6771\u897f\u7684
More Aggressive Cache Header
"},{"location":"essay/web/http/#\u4e0d\u540c\u7248\u672c\u7684\u5dee\u7570","title":"\u4e0d\u540c\u7248\u672c\u7684\u5dee\u7570","text":"\u76ee\u524d HTTP \u4e3b\u6d41\u4e0a\u5171\u6709\u4e09\u7a2e\u7248\u672c\uff1a1.1\u30012 \u548c 3\u3002 \u6574\u500b\u516c\u958b\u7db2\u8def\u74b0\u5883\u4e2d\uff0cHTTP/3 \u7684\u4f7f\u7528\u7387\u5728 2024/06 \u6642\uff0c\u5df2\u7d93\u4f86\u5230 30%\uff0c \u4f46\u662f Cloudflare \u7684\u6587\u7ae0\u6307\u51fa\uff0c \u5927\u90e8\u5206\u4f7f\u7528 HTTP/3 \u7684\u5834\u666f\u662f\u5728\u700f\u89bd\u5668\u548c\u670d\u52d9\u7684\u6e9d\u901a\u3002 \u5982\u679c\u662f API \u5f62\u5f0f\uff0c\u5247\u4e3b\u8981\u9084\u662f HTTP/1.1\uff0c \u9019\u4e5f\u8aaa\u660e\u4efb\u4f55\u4e00\u500b\u65b0\u5354\u5b9a\u7684\u63a8\u5ee3\u90fd\u9700\u8981\u6f2b\u9577\u7684\u9069\u61c9\u671f\u3002
"},{"location":"essay/web/http/#\u4e00\u4e9b\u5e38\u898b\u7684\u554f\u984c","title":"\u4e00\u4e9b\u5e38\u898b\u7684\u554f\u984c","text":"\u6211\u7684\u61c9\u7528\u7a0b\u5f0f\u662f\u7528 HTTP \u6e9d\u901a\u55ce
\u9019\u5176\u5be6\u662f\u500b\u5f88\u5fae\u5999\u7684\u554f\u984c\uff0c\u901a\u5e38\u4f86\u8aaa\uff0c\u4f60\u7684\u61c9\u7528\u7a0b\u5f0f\u9075\u5b88\u4e86\u90e8\u5206 HTTP \u5354\u5b9a\u3002
HTTP \u76f8\u95dc\u7684 RFC \u975e\u5e38\u975e\u5e38\u591a\uff0c\u5149\u662f\u7248\u672c\u5c31\u6709\u56db\u500b\uff1a1.0/1.1/2.0/3.0\uff0c \u5176\u4e2d\u4f60\u4f7f\u7528\u7684\u5957\u4ef6\u53ef\u80fd\u4e5f\u6c92\u6709\u5be6\u4f5c 1xx \u7684\u56de\u61c9\u7de8\u865f\uff08\u524d\u9762\u7684\u7bc4\u4f8b\u662f 200\uff09\uff0c \u4f8b\u5982 101 Switching Protocol\uff0c \u6709\u6642\u9019\u500b\u7de8\u865f\u4e5f\u88ab\u7528\u4f86\u5207\u63db\u5230 WebSocket\u3002
\u518d\u4f8b\u5982\uff0cHTTP 2.0 \u62d2\u7d55\u5be6\u4f5c Transfer-Encoding\uff0c \u4f60\u7684 HTTP \u5957\u4ef6\u6709\u6b63\u78ba\u5be6\u4f5c\u55ce\uff1f \u7576\u7248\u672c\u70ba HTTP 1.1 \u6642\uff0c\u53c8\u6709\u6b63\u78ba\u5be6\u4f5c\u5176\u548c Content-Encoding \u7684\u5dee\u7570\u55ce\uff1f
"},{"location":"essay/web/maglev/","title":"Maglev","text":"\u672c\u7bc7\u91dd\u5c0d 2016 \u5e74\u7684\u8ad6\u6587 Maglev: A Fast and Reliable Software Network Load Balancer \u9032\u884c\u8aaa\u660e\u3002
"},{"location":"essay/web/maglev/#\u6982\u8ff0","title":"\u6982\u8ff0","text":"Maglev \u662f\u500b\u8edf\u9ad4 L4 \u8ca0\u8f09\u5747\u8861\u5668\uff08Load Balancer, LB\uff09\uff0c\u4ed6\u88ab\u5efa\u69cb\u5728\u4e00\u822c\u7684 Linux \u6a5f\u5668\u4e0a\uff0c \u6240\u4ee5\u53ef\u4ee5\u5f88\u5927\u5730\u7bc0\u7701\u7dad\u8b77\u786c\u9ad4\u8a2d\u5099\u7684\u6210\u672c\uff08\u4eba\u529b\u3001\u5c08\u696d\u7b49\u7b49\uff09\u3002 \u9664\u6b64\u4e4b\u5916\uff0c\u4ed6\u4e0d\u50cf\u786c\u9ad4\u8a2d\u5099\u90a3\u6a23\u901a\u5e38\u90fd\u662f active-standby\uff0c \u800c\u662f\u6bcf\u53f0\u8a2d\u5099\u90fd\u80fd\u6709\u6548\u5730\u8655\u7406\u5c01\u5305\uff0c\u8f15\u6613\u9054\u5230\u6c34\u5e73\u64f4\u5c55\u3002 \u5728\u4f7f\u7528 8 core\u3001128 GiB \u548c 10 Gbps NIC (Network Interface Card) \u7684\u7576\u4ee3\uff082016\uff09\u786c\u9ad4\u4e0b\uff0c \u6bcf\u53f0\u8a2d\u5099\u9054\u5230\u7d04 12 Mpps \u7684\u8655\u7406\u80fd\u529b\u3002 \u5c0d\u61c9\u5230 Google \u7576\u6642\u6bcf\u500b\u53e2\u96c6\u6703\u9700\u8981\u8655\u7406 10Gbps \u7684\u6d41\u91cf\uff0c \u9019\u76f8\u7576\u65bc 813Kpps \u7684 1500-byte IP \u5c01\u5305\u3001\u6216\u8005 9.06 Mpps \u7684 100-byte IP \u5c01\u5305\u3002
\u70ba\u4ec0\u9ebc\u786c\u9ad4\u8a2d\u5099\u901a\u5e38\u90fd\u662f active-standby\u8aaa\u5230 L4 \u8ca0\u8f09\u5747\u8861\u5668\uff0c\u52e2\u5fc5\u6703\u63d0\u4f9b TCP \u7684\u8ca0\u8f09\uff0c\u7136\u800c TCP \u70ba\u4e86\u505a\u5230\u9023\u7dda\u7684\u6548\u679c\uff0c \u9700\u8981\u7d00\u9304\u7368\u81ea\u8655\u7406\u6240\u6709\u7684\u5c01\u5305\uff08\u70ba\u4e86\u505a\u8a08\u6578\uff09\u3002
\u5982\u679c\u6709\u5169\u53f0 LB\uff0c\u5c01\u5305\u5206\u6563\u958b\u4f86\u5c31\u6703\u51fa\u932f\u3002
\u7db2\u8def\u5728\u50b3\u8f38\u6642\uff0c\u5be6\u969b\u7684\u908f\u8f2f\u6703\u88ab\u5c01\u88dd\u597d\u5e7e\u5c64\uff0c\u9019\u5c31\u662f OSI \u5206\u5c64\u7684\u6982\u5ff5\u3002 \u7576 Maglev \u524d\u9762\u7684 \u8def\u7531\u5668\uff08router\uff09\u6536\u5230\u5c01\u5305\u7684\u6642\u5019\uff0c\u6703\u900f\u904e ECMP \u6c7a\u5b9a\u8a72\u5206\u6d3e\u5c01\u5305\u7d66\u54ea\u500b Maglev\u3002 \u6b64\u6642\uff0cMaglev \u6839\u64da L3 \u548c L4 \u7684\u8cc7\u8a0a\u7d44\u6210\u4e00\u500b\u7d44\u5408\uff0c\u7a31\u70ba 5-tuple1\uff0c \u4e5f\u5c31\u662f\uff1a\u4f86\u6e90 IP\u3001\u76ee\u7684 IP\u3001\u4f86\u6e90\u961c\u3001\u76ee\u7684\u961c\u3001\u5354\u5b9a\u985e\u5225\u3002 \u900f\u904e\u9019\u500b\u7d44\u5408\uff0c\u8a08\u7b97 consistent hashing \u4f86\u6307\u5b9a\u6700\u7d42\u670d\u52d9\u53e2\u96c6\u88e1\u7684\u7279\u5b9a\u7bc0\u9ede\u3002
\u63db\u53e5\u8a71\u8aaa\uff0cMaglev \u6c92\u6709\u771f\u6b63\u8655\u7406 L4 \u7684\u9023\u7dda\u554f\u984c\uff0c\u800c\u662f\u900f\u904e\u78ba\u4fdd\u7279\u5b9a\u6d41\uff08flow\uff09\u7684\u5c01\u5305\u6d41\u5165\u7279\u5b9a\u7684\u7bc0\u9ede\u3002
\u9019\u4e9b\u5c31\u662f Maglev \u7684\u62bd\u8c61\u7d50\u69cb\uff0c\u8aaa\u8d77\u4f86\u7c21\u55ae\uff0c\u4f46\u662f\u8ad6\u6587\u5167\u4ecb\u7d39\u7684\u4e00\u4e9b\u5be6\u4f5c\uff0c\u505a\u8d77\u4f86\u537b\u4e26\u4e0d\u7c21\u55ae\u3002
"},{"location":"essay/web/maglev/#\u80cc\u666f\u77e5\u8b58","title":"\u80cc\u666f\u77e5\u8b58","text":"\u5728\u958b\u59cb\u8b1b\u7d30\u7bc0\u524d\uff0c\u5148\u7c21\u55ae\u88dc\u8db3\u4e00\u4e0b\u80cc\u666f\u77e5\u8b58\u3002
"},{"location":"essay/web/maglev/#ecmp","title":"ECMP","text":"Equal-cost multi-path routing (ECMP) \u662f\u4e00\u7a2e\u8def\u7531\u6f14\u7b97\u6cd5\uff0c\u6211\u5011\u4f86\u900f\u904e\u5be6\u969b\u6848\u4f8b\u4e86\u89e3\u4ed6\u5427\uff01
\u5047\u8a2d\u6709\u4e00\u500b\u8def\u7531\u5668 (R) \u9023\u63a5\u5230\u4e09\u53f0\u4f3a\u670d\u5668 (S1, S2, S3) \u548c\u4e00\u53f0\u5ba2\u6236\u7aef\u6a5f\u5668 (C)\u3002 \u5f9e R \u5230\u9054\u4f3a\u670d\u5668\u6709\u5169\u500b\u7b49\u50f9\u6210\u672c\u7684\u8def\u5f91\uff0c\u8def\u5f91 1 (R -> \u4ecb\u9762 1) \u548c\u8def\u5f91 2 (R -> \u4ecb\u9762 2)\u3002 ECMP \u7684\u5c01\u5305\u6d41\u52d5\u5982\u4e0b\uff1a
\u73fe\u5728\uff0c\u60f3\u50cf\u5ba2\u6236\u7aef C \u5411\u4f3a\u670d\u5668 S1 \u767c\u9001\u53e6\u4e00\u500b\u5c01\u5305\u3002ECMP \u5c07\u518d\u6b21\u6839\u64da\u96dc\u6e4a\u7b97\u6cd5\u8a08\u7b97\u8def\u5f91\u3002 \u6709\u5169\u7a2e\u53ef\u80fd\u6027\uff1a
ECMP \u7684\u512a\u9ede\uff1a
\u9700\u8981\u8003\u616e\u7684\u4e8b\u9805\uff1a
\u7136\u800c Maglev \u900f\u904e\u4e00\u4e9b\u624b\u6bb5\uff0c\u4f86\u907f\u514d\u9023\u7dda\u7684\u4e2d\u65b7\u3002
"},{"location":"essay/web/maglev/#bgp","title":"BGP","text":"Border Gateway Protocol (BGP)\uff0c\u865f\u7a31\u6700\u8907\u96dc\u548c\u91cd\u8981\u7684\u8def\u7531\u5354\u5b9a\u4e4b\u4e00\uff0c\u4e3b\u8981\u76ee\u7684\u6709\u5e7e\u500b\uff1a
Linux \u5728\u8655\u7406\u5c01\u5305\u7684\u6642\u5019\u662f\u8907\u96dc\u7684\uff0c \u9019\u662f\u56e0\u70ba\u4ed6\u9700\u8981\u8655\u7406\u5f88\u591a L3/L4 \u7684\u5be6\u4f5c\u908f\u8f2f\u3002 \u800c\u5728 Maglev \u5be6\u4f5c\u4e2d\uff0c\u5247\u662f\u4f7f\u7528 Linux kernel bypass \u9019\u500b\u6a21\u7d44\uff0c\u900f\u904e\u5ba2\u88fd\u5316\u9054\u5230\u9ad8\u6548\u6027\u3002
"},{"location":"essay/web/maglev/#\u5be6\u4f5c\u7d30\u7bc0","title":"\u5be6\u4f5c\u7d30\u7bc0","text":""},{"location":"essay/web/maglev/#\u670d\u52d9\u767c\u73fe","title":"\u670d\u52d9\u767c\u73fe","text":"\u6ce8\u5165\u8a2d\u5b9a\u4e4b\u5f8c\uff0c\u900f\u904e Config Manager \u5206\u767c\u6240\u6709\u4e0a\u6e38\u7684\u8a2d\u5b9a\uff0c \u5305\u542b\u4e0a\u6e38\u670d\u52d9\u5404\u500b\u7bc0\u9ede\u7684\u5be6\u9ad4 IP \u548c\u4ee3\u8868\u670d\u52d9\u7684 VIP\u3002 \u540c\u6642\u6703\u6709\u500b Health Checker \u6aa2\u67e5\u4e0a\u6e38\uff0c\u4e26\u6c7a\u5b9a\u54ea\u4e9b\u4e0a\u6e38\u53ef\u4ee5\u63a5\u6536\u5c01\u5305\u3002
Maglev \u4e5f\u6703\u900f\u904e\u6ce8\u5165\u7684\u8a2d\u5b9a\uff0c\u628a\u76f8\u95dc\u7684 VIP \u85c9\u7531 BGP\uff08\u5716\u4e0a\u7684 VIP Announcer\uff09\u505a\u8def\u7531\u4f48\u9054\u3002
\u7531\u65bc\u5206\u6563\u5f0f\u7684\u67b6\u69cb\uff0c\u5169\u53f0 Maglev \u6709\u53ef\u80fd\u6703\u6709\u77ed\u66ab\u7684\u6642\u9593\uff0c\u540c\u6642\u64c1\u6709\u4e0d\u540c\u7684\u8a2d\u5b9a\uff0c \u9019\u6642\u900f\u904e ECMP \u548c consistent hashing \u6a5f\u5236\uff0c\u4f9d\u7167\u76f8\u540c\u7684 5-tuple \u4ecd\u7136\u53ef\u4ee5\u9078\u64c7\u5230\u76f8\u540c\u7684\u4e0a\u6e38\u3002
However, consistent hashing will make connection flaps between Maglevs with similar backend pools mostly succeed even during these very short windows.
"},{"location":"essay/web/maglev/#forwarder","title":"Forwarder","text":"Forwarder \u900f\u904e NIC \u6536\u5230\u5c01\u5305\u4e4b\u5f8c\uff0cMaglev \u6703\u9078\u64c7\u51fa\u7279\u5b9a\u7684\u4e0a\u6e38\uff0c \u7136\u5f8c\u628a\u76f8\u95dc\u5c01\u5305\u9032\u884c\u5305\u88dd\uff08encapsulation\uff09\u5f8c\uff0c\u50b3\u905e\u7d66\u8a72\u4e0a\u6e38\u3002
\u4e00\u958b\u59cb\u8b93\u6bcf\u500b\u5c01\u5305\u900f\u904e 5-tuple \u9078\u64c7 receiving queues \u6709\u5169\u500b\u597d\u8655\uff1a
\u4f46\u662f\u7576\u7279\u5b9a queue \u585e\u6eff\u6642\uff0c\u5c31\u6703\u958b\u59cb\u4f7f\u7528 round-robin \u7684\u9078\u64c7\u6f14\u7b97\u6cd5\uff0c\u907f\u514d\u5c01\u5305\u4e00\u76f4\u6392\u4e0d\u5230\u968a\u3002
\u4ee5\u4e0b\u662f backend selection \u7684\u908f\u8f2f\uff1a
flowchart TD\n packet[Poll from receiving queue] --> vip{Lookup VIP}\n vip --hit-->tuple[Calc 5-tuple]\n vip --miss--> drop[Drop]\n tuple --> backend{Lookup conn table}\n backend --hit--> enc[Encapsulate]\n backend --miss--> hash{Consistent Hashing}\n hash --select--> insert[Insert to table]\n insert --> enc\n hash --empty-->drop\n enc --> trans[Transmission Queue]\n
\u4e4b\u6240\u4ee5\u4e0d\u4f7f\u7528 steering \u7684 5 tuple \u662f\u70ba\u4e86\u907f\u514d\u8de8 thread \u4e4b\u9593\u7684\u885d\u7a81\uff0c \u6bcf\u500b thread \u7dad\u8b77\u81ea\u5df1\u7684 connection table \u4e5f\u662f\u540c\u6a23\u7684\u539f\u56e0\u3002
\u53e6\u5916\u7576\u4e0a\u6e38\u6c92\u6709\u4efb\u4f55\u53ef\u7528\u7684\u7bc0\u9ede\u6642\uff0cconsistent hashing \u5c31\u6703\u5f97\u5230 empty
\u7136\u5f8c drop \u6389\u76f8\u95dc\u5c01\u5305\u3002
\u7531\u65bc Maglev \u7684\u5176\u4e2d\u4e00\u500b\u7279\u8272\u662f\u53ef\u4ee5\u5728 Linux \u6a5f\u5668\u4e2d\u9032\u884c\u90e8\u7f72\uff0c \u6240\u4ee5\u9700\u8981\u900f\u904e bypass Linux kernel \u4f86\u907f\u514d\u4e2d\u9593\u7684\u7121\u8b02\u6d88\u8017\u3002 \u70ba\u4e86\u8b93\u5c01\u5305\u5728 steering \u548c muxing \u7b49\u6a21\u7d44\u4e4b\u9593\u50b3\u905e\u6642\uff0c\u4e0d\u8981\u7528\u8907\u88fd\uff0c\u4ed6\u5011\u90fd\u662f\u4f7f\u7528\u6307\u6a19\u9032\u884c\u8655\u7406\uff0c \u540c\u6642\uff0c\u70ba\u4e86\u9650\u5236\u670d\u52d9\u7684\u8a18\u61b6\u9ad4\u4f7f\u7528\uff0c\u5c31\u9700\u8981\u5efa\u7acb\u4e00\u500b packet pool \u4f86\u9650\u5236\u670d\u52d9\u7684\u8cc7\u6e90\u4f7f\u7528\u3002
\u5728 Maglev \u555f\u52d5\u6642\uff0c\u6703\u53bb\u8981\u4e00\u5b9a\u5927\u5c0f\u7684 packet pool \u53bb\u5132\u5b58\u5c01\u5305\uff0c \u9664\u6b64\u4e4b\u5916\uff0csteering \u548c muxing \u6a21\u7d44\u4e5f\u6703\u5206\u5225\u8981\u5230\u4e00\u5b9a\u5927\u5c0f\u7684 ring queue \u4f86\u5132\u5b58\u5c01\u5305\u7684\u6307\u6a19\u3002 \u800c\u9019\u5169\u500b\u6a21\u7d44\uff0c\u5404\u81ea\u53c8\u5728 ring queue \u4e0a\u653e\u4e86\u4e09\u7a2e\u4e0d\u540c\u610f\u7fa9\u7684\u63a2\u91dd\uff1a
\u9019\u88e1\u6bcf\u500b\u63a2\u91dd\u5728\u8655\u7406\u76f8\u61c9\u7684\u4efb\u52d9\u5f8c\uff0c\u5c31\u6703\u52a0 1\uff0c\u63db\u53e5\u8a71\u8aaa\uff0c\u9019\u4e9b\u63a2\u91dd\u6703\u4e92\u76f8\u8ffd\u8d95\u4ed6\u5011\u4e0b\u500b\u4efb\u52d9\u7684\u63a2\u91dd\u3002
\u512a\u5316\u8abf\u6574
\u70ba\u4e86\u8ffd\u6c42\u6548\u7387\uff0c\u6bcf\u500b\u63a2\u91dd\u90fd\u662f\u6279\u6b21\u8655\u7406\u4efb\u52d9\uff0c\u6240\u4ee5\u63a2\u91dd\u53ef\u80fd\u6703\u4e00\u6b21\u52a0\u8d85\u904e 1\u3002
\u70ba\u4e86\u9054\u5230\u9019\u500b\u6279\u6b21\u8655\u7406\uff0c\u5169\u500b\u6a21\u7d44\u6703\u5728\u7b49\u5230\u5c01\u5305\u9054\u5230\u4e00\u5b9a\u5927\u5c0f\u5f8c\uff0c \u6216\u8005\u7b49\u5230\u8d85\u904e \\(50\\mu s\\) \u5f8c\uff0c\u624d\u53bb\u8655\u7406\uff0c\u9019\u5c31\u6703\u640d\u5931\u4e00\u5b9a\u7684\u6f5b\u6642\u3002
\u524d\u9762\u63d0\u5230\u7684 forwarder \u7684\u6bcf\u500b thread \u5728\u8655\u7406\u4e00\u500b\u5c01\u5305\u4e0a\uff0c\u6703\u82b1\u5230\u7d04 350ns\uff0c \u5728\u9019\u6a23\u7684\u80cc\u666f\u4e0b\uff0c\u4f4e\u6d41\u91cf\u6642\u671f\u53ef\u80fd\u6703\u8b93\u5c01\u5305\u8655\u7406\u901f\u5ea6\u8b8a\u6162\uff0c\u53ef\u80fd\u7684\u505a\u6cd5\u5c31\u662f\u52d5\u614b\u8abf\u6574\u9019\u500b\u6279\u6b21\u5927\u5c0f\u3002
\u9019\u88e1\u4e5f\u4e00\u8d77\u8a08\u7b97\u4e00\u4e0b Maglev \u7406\u8ad6\u4e0a\u7684\u6975\u9650\u503c\uff0c\u5047\u8a2d packet pool \u5b58\u653e\u6700\u591a 3000 \u500b\u5c01\u5305 \uff08\u5047\u8a2d\u4e00\u500b\u5c01\u5305\u5927\u5c0f\u70ba 1500-byte\uff0c\u5c31\u6703\u9700\u8981 4.5 MB \u7684\u8a18\u61b6\u9ad4\uff09\uff0c \u7136\u5f8c\u5047\u8a2d\u6574\u500b forwarder \u53ef\u4ee5\u8655\u7406 10 Mpps \u7684\u91cf\uff0c \u4e5f\u5c31\u662f\u8aaa\u4ed6\u9700\u8981\u4f7f\u7528 \\(3000\\text{p} / 10^7\\text{pps} = 0.0003\\text{s}\\) \u79d2\u4f86\u5b8c\u5168\u8655\u7406\u9019\u4e9b\u5c01\u5305\u3002 \u9019\u4ee3\u8868 Maglev \u6703\u9020\u6210\u7279\u5b9a\u5c01\u5305\u6700\u9ad8 \\(300\\mu s\\) \u7684\u5ef6\u9072\u3002
"},{"location":"essay/web/maglev/#consistent-hashing","title":"Consistent Hashing","text":"\u524d\u9762\u6709\u63d0\u5230 ECMP \u6703\u900f\u904e\u96dc\u6e4a\u4f86\u9078\u64c7\u4e0a\u6e38\uff0c\u7406\u8ad6\u4e0a\u7576 Maglev \u53e2\u96c6\u6578\u91cf\u6c92\u8b8a\uff0c \u76f8\u540c\u8acb\u6c42\u90fd\u6703\u88ab\u9078\u64c7\u5230\u540c\u4e00\u500b Maglev \u4e0a\u3002 \u4f46\u9019\u500b\u5047\u8a2d\u6703\u96a8\u8457\u7dad\u904b\u65e5\u5e38\u800c\u88ab\u6253\u7834\uff0c\u4f8b\u5982\u65b0\u589e\u3001\u6e1b\u5c11\u6a5f\u5668\u3002 \u4e5f\u56e0\u6b64\uff0c\u5728\u9019\u908a\u7684 consistent hashing \u5c31\u5f88\u91cd\u8981\uff0c \u56e0\u70ba\u4e0d\u540c\u7684 Maglev \u6703\u6839\u64da\u76f8\u540c\u7684 hash \u7d50\u679c\uff0c\u800c\u53bb\u9078\u64c7\u76f8\u540c\u7684\u4e0a\u6e38\u3002
\u908a\u969b\u72c0\u6cc1
\u7576\u5728 Maglev \u7bc0\u9ede\u65b0\u589e\u6e1b\u5c11\u6642\uff08ECMP \u91cd\u7b97\u6642\uff09\uff0c\u5982\u679c\u540c\u6642\u53bb\u66f4\u65b0 Maglev \u7684\u8a2d\u5b9a\u6a94\uff0c \u5c31\u5f88\u53ef\u80fd\u6703\u9047\u5230\u524d\u9762\u63d0\u5230\u7684\u908a\u969b\u72c0\u6cc1\uff0c\u5c0e\u81f4\u9023\u7dda\u932f\u4f4d\uff08connection flaps\uff09\u3002
\u65e9\u5728 1990s Rendezvous \u5c31\u63d0\u51fa\u7b2c\u4e00\u500b consistent hashing \u7684\u6a5f\u5236\uff0c \u60f3\u50cf\u4e00\u4e0b\u5982\u679c\u7528 mod \u4f86\u505a\u4e0a\u6e38\u7684\u6311\u9078\uff0c\u5047\u8a2d\u7e3d\u5171\u6709 5 \u500b\u4e0a\u6e38\u7bc0\u9ede\uff0c \u6839\u64da 5-tuple \u53bb\u505a\u4e00\u500b hash \u7136\u5f8c\u7528 mod 5
\u7684\u7d50\u679c\uff0c\u4f86\u5e73\u5747\u5206\u914d\u7d66\u9019 5 \u500b\u7bc0\u9ede\u3002 \u4f46\u662f\u5982\u679c\u670d\u52d9\u5f9e 5 \u500b\u7bc0\u9ede\u8b8a\u6210 6 \u500b\uff0c\u5c31\u6703\u8b93\u5e7e\u4e4e\u6240\u6709\u9023\u7dda\u90fd\u88ab\u91cd\u65b0\u5206\u914d\uff0c \u4f8b\u5982 10 mod 5
\u5f9e 0 \u8b8a\u6210 4\u3002 consistent hashing \u5c31\u662f\u5728\u89e3\u6c7a\u9019\u500b\u554f\u984c\u3002
\u9019\u88e1\u63d0\u4e00\u4e0b\u65e9\u524d\u7684\u6f14\u7b97\u6cd5\u5957\u7528\u5728 Maglev \u4e0a\u6703\u6709\u7684\u4e00\u4e9b\u72c0\u6cc1\uff1a
\u63db\u53e5\u8a71\u8aaa\uff0c\u5728\u72a7\u7272\u7b2c 2 \u9ede\u7684\u60c5\u6cc1\u4e0b\uff0c\u6211\u5011\u53ef\u4ee5\u5617\u8a66\u6539\u5584\u7b2c 1 \u9ede\u3002
\u4ec0\u9ebc\u662f\u300c\u8868\u300d
\u9019\u88e1\u7684\u8868\u5728\u5c55\u793a\u6f14\u7b97\u6cd5\u7d30\u7bc0\u6642\u5c31\u6703\u770b\u5230\uff0c\u6982\u5ff5\u5c31\u662f consistent hashing \u6703\u5efa\u7acb\u4e00\u500b\u8868\uff0c \u4ee5\u9054\u5230\u7a69\u5b9a\u6563\u5217\u7684\u76ee\u7684\u3002
\u6bcf\u6b21\u8868\u91cd\u5efa\uff0c\u5c31\u6709\u53ef\u80fd\u5c0e\u81f4\u76f8\u540c\u7684 5-tuple \u5c0d\u61c9\u5230\u4e0d\u540c\u4e0a\u6e38\u3002
"},{"location":"essay/web/maglev/#maglev-\u7684-consistent-hashing","title":"Maglev \u7684 Consistent Hashing","text":"\u5047\u8a2d\u6211\u5011\u6709\u500b\u8868\u5927\u5c0f\u70ba \\(M\\)\u3001\u4e0a\u6e38\u6578\u91cf\u70ba \\(N\\)\uff0c \u4e26\u9078\u5b9a\u5169\u500b hash \u51fd\u5f0f\uff0ch1
\u3001h2
\uff0c \u7136\u5f8c\u4f9d\u6b64\u627e\u51fa\u6bcf\u500b\u4e0a\u6e38\u7684 offset
\u548c skip
\uff1a
\u6700\u5f8c\u5c31\u53ef\u4ee5\u5efa\u7acb\u51fa\u5c0d\u7167\u8868\uff1a
\\[\\begin{aligned} \\mathit{permutation}_{ij} = (\\mathit{offset}_i + j \\times \\mathit{skip}_i) \\mod M \\qquad \\forall \\quad i \\in N , j \\in M \\end{aligned}\\]\u4f46\u9019\u88e1\u8981\u8a18\u5f97\u628a M \u8a2d\u70ba\u8cea\u6578\uff0c\u5426\u5247\u5728\u7528 skip
\u904d\u6b77 permutation
\u5c31\u6703\u8df3\u4e0d\u51fa\u5faa\u74b0\u3002
\u6700\u5f8c\u6839\u64da\u4e0a\u8ff0\u7684\u6f14\u7b97\u6cd5\u5f97\u51fa\u4e00\u500b\u9577\u5ea6\u70ba M \u7684\u6563\u5217\u8868 entry
\u3002
\u5047\u8a2d\u6709 3 \u500b\u4e0a\u6e38\uff0c\u8868\u5927\u5c0f\u70ba 7\uff0c\u4e14 3 \u500b\u4e0a\u904a\u7684 offset
\u548c skip
\u5206\u5225\u662f\uff1a (3, 4)
\u3001(0, 2)
\u548c (3, 1)
\uff0c\u5f97\u51fa permutation
\u8868\u5982\u4e0b\uff1a
j
i=0
i=1
i=2
0 3 0 3 1 0 2 4 2 4 4 5 3 1 6 6 4 5 1 0 5 2 3 1 6 6 5 2 \u5728\u524d\u9762\u7684\u6f14\u7b97\u6cd5\u4e2d\uff0c\u6211\u5011\u5c55\u793a\u5728\u7b2c 5 \u884c\u7684 while loop \u4e00\u6b65\u4e00\u6b65\u63a8\u6f14\u4e0b\u7684\u60c5\u6cc1\uff08\u5047\u8a2d B0 \u4ee3\u8868 i=0
\u7684\u4e0a\u6e38\uff09\uff1a
\u5728\u4e0a\u8ff0\u63a8\u6f14\u4e0b\uff0c\u53ef\u4ee5\u5f97\u51fa entry
\uff1a
\u7576 B1 \u9019\u500b\u4e0a\u6e38\u4e0b\u7dda\u4e4b\u5f8c\uff0c\u91cd\u65b0\u63a8\u6f14\uff1a
Step B0 B2 1 3 3, 4 2 0 5 3 4, 1 6 4 5, 2 -\u5f97\u51fa\u7684\u65b0 entry
\uff0c\u4e26\u9032\u884c\u6bd4\u8f03\uff1a
\u53ef\u4ee5\u770b\u5230\u5927\u90e8\u5206\u7684 hash \u4ecd\u5728\u539f\u672c\u4f4d\u7f6e\uff0c\u4f46\u662f\u90e8\u5206\u4ecd\u6703\u6709\u8b8a\u66f4\uff0c\u4f8b\u5982 j=6
\u3002 \u5f9e\u4ee5\u4e0a\u7bc4\u4f8b\u53ef\u4ee5\u77e5\u9053\u9019\u662f\u4e00\u7d44\u4e0a\u6e38\uff0c\u5982\u679c\u4f60\u6709\u5f88\u591a\u500b\u670d\u52d9\uff0c\u6bcf\u500b\u670d\u52d9\u90fd\u6709\u81ea\u5df1\u7684\u4e00\u7fa4\u4e0a\u6e38\uff0c \u9019\u6642\u5c31\u6703\u9700\u8981\u5efa\u7f6e\u76f8\u61c9\u6578\u91cf\u7684\u8868\uff0c\u6240\u4ee5\u8868\u7684\u5927\u5c0f\uff0c\u5c0d\u65bc\u670d\u52d9\u7684\u8cc7\u6e90\u7528\u91cf\u5c31\u662f\u4e00\u9805\u91cd\u8981\u8b70\u984c\u3002
\u9664\u4e86\u900f\u904e\u767d\u7bb1\uff08\u4ee5 HTTP \u65b9\u5f0f\u66b4\u9732\u6307\u6a19\uff09\u548c\u9ed1\u7bb1\uff08\u63a2\u91dd\uff09\u53bb\u5b9a\u671f\u76e3\u63a7\u5916\uff0cMaglev \u4e5f\u6709\u4e00\u4e9b\u9664\u932f\u624b\u6bb5\u3002
\u7531\u65bc\u5f9e router \u8d70\u5230 Maglev \u518d\u8d70\u5230\u4e0a\u6e38\u7bc0\u9ede\u7684\u8def\u5f91\u5f88\u591a\u7a2e\uff0c\u6709\u6642\u70ba\u4e86\u9664\u932f\uff0c \u6703\u9700\u8981\u4e00\u500b\u65b9\u6cd5\u77e5\u9053 Maglev \u5230\u5e95\u628a\u9019\u500b\u5c01\u5305\u9001\u7d66\u8ab0\u3002 \u958b\u767c\u5718\u968a\u8b93 Maglev \u53ef\u4ee5\u8fa8\u8b58\u7279\u5b9a L3 \u548c L4 \u7684\u8868\u982d\uff0c\u7576\u6536\u5230\u9019\u500b\u8868\u982d\uff0c \u5c31\u6703\u628a\u9019\u6b21\u7684\u8def\u7531\u6b77\u7a0b\u7b49\u7b49\u7528\u4f86\u9664\u932f\u7684\u8cc7\u8a0a\u767c\u9001\u5230\u7279\u5b9a\u7684 IP \u4e2d\u3002
\u958b\u767c\u8005\u986f\u7136\u5f88\u611b\u9019\u500b\u9664\u932f\u5de5\u5177\uff1a
This tool is extremely helpful in debugging production issues, especially when there is more than one Maglev machine on the path, as happens in the case of fragment redirection.
"},{"location":"essay/web/maglev/#\u6e2c\u8a66","title":"\u6e2c\u8a66","text":"\u6536\u96c6\u6b50\u6d32\u53e2\u96c6\u4e2d\uff0c458 \u500b\u4e0a\u6e38\uff08\u5305\u62ec Google Search\uff09\u7684 connections per second (cps) \u5f8c\uff0c \u4ed6\u5011\u8a08\u7b97\u51fa\u5176\u6574\u9ad4\u7684 cps \u5e73\u5747\u503c\u548c\u6a19\u6e96\u5dee\uff0c\u6a19\u6e96\u5dee\u90fd\u843d\u5728 6%~7%\u3002 \u5f9e\u5e73\u5747\u503c\uff08\u85cd\u7dda\uff09\u4e2d\u4e5f\u53ef\u4ee5\u770b\u51fa\u9ad8\u4f4e\u5c01\u548c\u4f5c\u606f\u7684\u95dc\u4fc2\uff08\u6642\u9593\u8ef8\u4e26\u975e\u7576\u5730\u6642\u9593\uff09\u3002
\u9ec3\u8272\u7dda\u5247\u4ee3\u8868\u662f\u5426\u904e\u5ea6\u5efa\u7f6e\u6a5f\u5668\uff0c\u5728\u6d41\u91cf\u9ad8\u5cf0\u6642\u5927\u7d04\u843d\u5728 9 \u6210\u7684\u8ca0\u8f09\u80fd\u529b\uff0c \u4e5f\u5c31\u662f\u8aac\uff0c\u5047\u8a2d\u670d\u52d9\u53ef\u4ee5\u6700\u9ad8\u627f\u8f09 10 rps \u7684\u6d41\u91cf\uff0c\u5be6\u969b\u6d41\u91cf\u5247\u843d\u5728 9 rps\u3002 \u96e2\u5cf0\u6642\u56e0\u70ba\u6d41\u91cf\u4f4e\u672c\u8eab\u5c31\u5f88\u8f03\u96e3\u6293\u8cc7\u6e90\uff0c\u6240\u4ee5\u5c31\u5bb9\u6613\u6709\u904e\u5ea6\u5efa\u7f6e\u7684\u554f\u984c\uff0c\u4f46\u662f\u4e5f\u843d\u5728 7.5 \u6210\u5de6\u53f3\u3002
\u9019\u9805\u6307\u6a19\u4ee3\u8868\u8457 Maglev \u662f\u5426\u6b63\u78ba\u7684\u5747\u8861\u8ca0\u8f09\uff0c\u56e0\u70ba\u8d8a\u4e0d\u5747\u8861\u7684\u8d8a\u5bb9\u6613\u9020\u6210\u904e\u5ea6\u5efa\u7f6e\u3002
SYN
\u7684\u5c01\u5305\u4ee3\u8868\u8457\u7b2c\u4e00\u6b21\u901a\u904e Maglev\uff0c\u6240\u4ee5\u6703\u9700\u8981\u8a08\u7b97 consistent hashing \u4f86\u5c0b\u627e\u4e0a\u6e38\uff1b non-SYN
\u5247\u662f\u4ee3\u8868\u9023\u7dda\u5efa\u7acb\u5f8c\u7684\u5c01\u5305\uff0c\u56e0\u70ba\u4e0d\u7528\u8a08\u7b97 consistent hashing \u6240\u4ee5\u901a\u91cf\u8f03\u9ad8\uff1b \u6700\u5f8c\u5247\u662f\u6975\u7aef\u7684 5-tuple\uff0c\u5b8c\u5168\u76f8\u540c\u7684\u4f86\u6e90\u548c\u76ee\u7684\uff0c\u7528\u4f86\u6e2c\u8a66\u7406\u8ad6\u4e0a\u7684\u6700\u9ad8\u901a\u91cf\u3002
\u7576 thread \u6578\u62c9\u9ad8\u5230 6 \u548c 7 \u7684\u6642\u5019\uff0c\u5c31\u53ef\u4ee5\u770b\u5230\u74f6\u9838\u4e0d\u662f\u7b97\u529b\uff0c\u800c\u662f\u5728\u65bc NIC\u3002 \u7576 NIC \u70ba 40 Gbps \u6642\uff0c\u5c31\u53ef\u4ee5\u9806\u5229\u4e0a\u53bb\uff0c\u4f46\u662f\u518d\u4e0a\u53bb\u7684\u74f6\u9838\u53c8\u8b8a\u6210\u4e86 steering \u6a21\u7d44\uff0c \u6240\u4ee5\u9019\u4e5f\u662f\u672a\u4f86\u53ef\u4ee5\u512a\u5316\u7684\u65b9\u5411\u3002
\u900f\u904e Maglev \u7684 consistent hashing \u6f14\u7b97\u6cd5\uff0c \u53ea\u9700\u8981 65537 \u7684\u8868 2\uff0c\u4e0d\u9700\u8981 65537 \u9019\u9ebc\u5927\u7684\u8868\uff0c\u5c31\u53ef\u4ee5\u8b93\u8ca0\u8f09\u9054\u5230\u8db3\u5920\u5747\u8861\u3002
\u4e0a\u5716\u7684\u5be6\u9a57\u662f\u8a2d\u5b9a 1000 \u500b\u4e0a\u6e38\uff0c\u4e26\u5c0d\u61c9\u5169\u7a2e\u4e0d\u540c\u5927\u5c0f\u7684\u8868\u548c\u4e09\u500b\u4e0d\u540c\u7684\u6f14\u7b97\u6cd5\uff0c \u7e31\u8ef8\u4ee3\u8868\u6bcf\u500b\u4e0a\u6e38\u5728\u9019\u5f35\u8868\u51fa\u73fe\u7684\u6bd4\u4f8b\uff0c\u63db\u53e5\u8a71\u8aaa\uff0c\u6bcf\u500b\u4e0a\u6e38\u5206\u914d\u5230 0.001 \u7684\u8868\u5c31\u662f\u5b8c\u7f8e\u7684\u5747\u8861\u8ca0\u8f09\u3002 \u53ef\u4ee5\u770b\u5230\u9664\u4e86 Maglev \u7684\u6f14\u7b97\u6cd5\u4e4b\u5916\uff0c\u5269\u4e0b\u5169\u500b\u90fd\u5bb9\u6613\u6703\u6709\u4e0d\u5747\u8861\u8ca0\u8f09\u7684\u72c0\u6cc1\u3002
\u7531\u65bc Karger \u6f14\u7b97\u6cd5\u548c Rendezvous \u6f14\u7b97\u6cd5\u90fd\u4e0d\u6703\u56e0\u70ba\u4e0a\u6e38\u8b8a\u52d5\uff0c\u800c\u6539\u8b8a\u5176\u5c0d\u61c9\u4f4d\u7f6e\uff0c \u6240\u4ee5\u4e0a\u5716\u53ea\u6709\u5c55\u793a Maglev \u5c0d\u65bc\u4e0a\u6e38\u8b8a\u52d5\u7684\u8ca0\u8377\u80fd\u529b\u3002 \u96a8\u8457\u4e00\u5b9a\u6bd4\u4f8b\u7684\u4e0a\u6e38\u5931\u80fd\uff08\u6a6b\u8ef8\uff09\uff0c\u53ef\u4ee5\u770b\u5230\u9019\u5f35\u8868\u7684\u932f\u4f4d\u6bd4\u4f8b\u6703\u4e0a\u5347\uff0c\u800c\u8868\u8d8a\u5927\uff0c\u8d8a\u80fd\u5bb9\u932f\u3002
\u5373\u4f7f\u5982\u6b64\uff0cMaglev \u9810\u8a2d\u7684\u8868\u5927\u5c0f\u4ecd\u7136\u662f 65537\uff0c\u9019\u662f\u56e0\u70ba 65537 \u5927\u5c0f\u7684\u8868\u91cd\u5efa\u9700\u8981\u7d04 1.8ms\uff0c \u800c 655373 \u7684\u8868\u5247\u9700\u8981 22.9ms\uff0c\u9019\u662f\u56e0\u70ba\u4e00\u6b21\u6027\u5927\u91cf\u4e0a\u6e38\u5931\u80fd\u7684\u60c5\u6cc1\u4e0d\u591a\uff0c \u72a7\u7272\u7684\u6578\u5341\u6beb\u79d2\u5c31\u986f\u5f97\u4e0d\u5920\u5212\u7b97\u3002
"},{"location":"essay/web/maglev/#\u5ef6\u4f38","title":"\u5ef6\u4f38","text":"\u4ee5\u4e0b\u662f\u4e00\u4e9b\u5be6\u52d9\u4e0a\u6703\u9047\u5230\u7684\u554f\u984c\u548c\u76f8\u95dc\u64f4\u5c55\u7684\u61c9\u7528\u3002
"},{"location":"essay/web/maglev/#vip-matching","title":"VIP Matching","text":"Google \u6709\u5f88\u591a\u53e2\u96c6\uff0c\u4e26\u4e14\u6703\u66ff\u5404\u500b\u53e2\u96c6\u5206\u985e\uff08classes\uff09\uff0c\u8d8a\u5927\u7684\u53e2\u96c6\u5176\u5167\u90e8\u64c1\u6709\u7684 IP \u5c31\u8d8a\u591a\uff0c \u63db\u53e5\u8a71\u8aaa\uff0c\u5b83\u7684 IP \u524d\u7db4\u6703\u66f4\u77ed\uff0c\u4f8b\u5982 121.113.17.0/20
\u5c31\u6bd4 74.125.137.0/24
\u9084\u8981\u5927\u3002
\u7576\u4e0a\u6e38\u767c\u751f\u707d\u96e3\u7684\u6642\u5019\uff0cMaglev \u6703\u9700\u8981\u628a\u6d41\u91cf\u8f49\u79fb\u5230\u4e0d\u540c\u7684\u53e2\u96c6\u4e0a\u6e38\u4e2d\uff0c \u9019\u6642\uff0c\u5b83\u5011\u5c31\u9700\u8981\u500b\u65b9\u6cd5\u77e5\u9053\u5404\u500b\u53e2\u96c6\u7684\u4e0a\u6e38 VIP\u3002 \u6bd4\u8d77\u900f\u904e\u8a2d\u5b9a\u7b49\u65b9\u5f0f\u8b93\u5404\u500b Maglev \u8a8d\u51fa\u5c0d\u65b9\u4f86\uff0c\u958b\u767c\u5718\u968a\u63d0\u51fa\u53e6\u4e00\u500b\u65b9\u5f0f\u4f86\u89e3\u6c7a\u3002
\u6211\u5011\u8b93\u4e0d\u540c\u53e2\u96c6\uff0c\u4f46\u662f\u76f8\u540c\u4e0a\u6e38\u7684 BP \u90fd\u6703\u64c1\u6709\u76f8\u540c\u300c\u5f8c\u7db4\u300d\u7684 VIP\u3002 \u9019\u6642\uff0c\u5982\u679c\u6211\u5011\u9650\u5236 Maglev \u53ea\u80fd\u628a\u6d41\u91cf\u8f49\u5c0e\u5230\u76f8\u540c\u7b49\u7d1a\u7684\u53e2\u96c6\uff0c \u5c31\u53ef\u4ee5\u4e0d\u9700\u8981\u77e5\u9053\u5c0d\u65b9\u4e0a\u6e38 VIP \u7684\u72c0\u6cc1\u4e0b\uff0c\u55ae\u7d14\u628a\u5c01\u5305\u524d\u7db4\u6539\u6210\u5c0d\u61c9\u7684\u53e2\u96c6\uff0c \u5c31\u53ef\u4ee5\u9806\u5229\u8f49\u5c0e\u3002
\u4ee5\u4e0a\u5716\u70ba\u4f8b\uff0c173.194.71.1
\u7684 Service 1
\u88ab\u8f49\u5c0e\u70ba 173.194.72.1
\u7684\u76f8\u540c\u670d\u52d9\u3002
\u5728 IP \u4e2d\uff0c\u6709\u4e00\u500b\u6280\u8853\u7a31\u70ba IP \u5206\u7247 (IP fragmentation)\uff0c \u5b83\u7684\u76ee\u7684\u662f\u6700\u5927\u5316\u5c01\u5305\u6548\u7387\uff0c\u4f8b\u5982\u5927\u8cc7\u6599\u7684\u50b3\u8f38\u3002 \u8a72\u5354\u5b9a\u53ea\u6703\u8b93\u7b2c\u4e00\u500b\u5c01\u5305\u64c1\u6709 L4 \u7684\u6a19\u982d\uff0c\u63db\u53e5\u8a71\u8aaa\uff0c\u524d\u9762\u63d0\u5230\u7684 5-tuple \u56e0\u70ba\u6c92\u6709 port \u7684\u8cc7\u8a0a\uff0c \u6240\u4ee5\u8a08\u7b97\u51fa\u7684 5-tuple \u6703\u5931\u6e96\uff0c\u5c0e\u81f4\u9001\u5230\u4e0d\u540c\u7684\u4e0a\u6e38\u3002
Maglev \u6703\u5148\u900f\u904e 3-tuple\uff08\u4f86\u6e90 IP\u3001\u76ee\u7684 IP\u3001\u5354\u5b9a\u985e\u5225\uff09\uff0c \u6c7a\u5b9a\u8a72\u5c01\u5305\u8981\u8b93 Maglev \u53e2\u96c6\u4e2d\u7684\u54ea\u500b Maglev\uff08\u900f\u904e\u8a2d\u5b9a\u8b93\u5b83\u5011\u8a8d\u8b58\u5c0d\u65b9\uff09\u8655\u7406\u3002 \u7576\u78ba\u4fdd\u540c\u500b\u6d41\u7684\u5c01\u5305\u90fd\u9032\u5230\u540c\u500b Maglev \u5f8c\uff0c\u5c31\u53ef\u4ee5\u5728\u5176\u5167\u90e8\u6c7a\u5b9a\u4e0a\u6e38\u8981\u8d70\u54ea\u4e00\u500b\u7bc0\u9ede\uff0c\u5176\u6f14\u7b97\u6cd5\u5982\u4e0b\uff1a
\u5982\u679c\u5f8c\u7e8c\u5c01\u5305\u6bd4\u7b2c\u4e00\u500b\u5c01\u5305\u65e9\u5230\uff0c\u5c31\u6703\u5feb\u53d6\u7b49\u5230\u7b2c\u4e00\u500b\u5c01\u5305\u62b5\u9054\uff0c\u6216\u8005\u904e\u671f\u3002 \u7531\u65bc\u9650\u5236\u53ef\u4ee5\u4f7f\u7528 fragmentation \u7684\u670d\u52d9\uff0c\u6240\u4ee5\u9019\u500b\u8868\u4e0d\u9700\u8981\u591a\u5927\u7684\u8cc7\u6e90\u5c31\u80fd\u8655\u7406\u3002
"},{"location":"essay/web/maglev/#sharding","title":"Sharding","text":"\u6587\u4e2d\u6709\u63d0\u5230 Maglev \u7406\u8ad6\u4e0a\u662f\u53ef\u4ee5\u505a sharding \u7684\uff0c\u4f46\u662f\u4e26\u6c92\u6709\u592a\u591a\u7d30\u7bc0\uff0c \u6211\u8a8d\u70ba\u9019\u500b\u984c\u76ee\u6eff\u9069\u5408\u7576\u4f5c\u56de\u5bb6\u4f5c\u696d\u7684\uff0c\u53ef\u4ee5\u62ff\u4f86\u81ea\u5df1\u60f3\u60f3\u8a72\u600e\u9ebc\u5be6\u4f5c\u6bd4\u8f03\u597d\uff0c\u5c31\u4e0d\u5728\u9019\u908a\u95e1\u8ff0\u4e86\uff01
"},{"location":"essay/web/maglev/#\u7e3d\u7d50","title":"\u7e3d\u7d50","text":"\u548c\u786c\u9ad4\u8ca0\u8f09\u5747\u8861\u5668\u76f8\uff0cMaglev \u53ef\u4ee5\u505a\u5230\u6c34\u5e73\u64f4\u5c55\uff0c\u901a\u904e\u4e00\u4e9b\u5de7\u5999\u7684\u8a2d\u8a08\u4e5f\u80fd\u6709\u6548\u7dad\u6301\u9577\u9023\u7dda\u3002 \u5e02\u9762\u4e0a\u5176\u5be6\u4e5f\u6709\u4e00\u4e9b\u8edf\u9ad4\u8ca0\u8f09\u5747\u8861\u5668\u5982 Microsoft Ananta \uff0c\u4f46\u662f\u4e26\u6c92\u6709\u91dd\u5c0d kernel \u7684\u9ad8\u6548\u4f7f\u7528\u548c\u4e0a\u6e38\u7bc0\u9ede\u7570\u52d5\u7684\u72c0\u6cc1\u4f86\u512a\u5316\u3002 \u5176\u4ed6\u5982 NGINX \u7684\u901a\u7528\u578b\u8ca0\u8f09\u5747\u8861\u5668\uff0c\u96d6\u7136\u53ef\u4ee5\u642d\u914d ECMP \u7684\u8def\u7531\u5668\u548c consistent hashing \u7684\u5916\u639b\uff0c \u4f46\u662f\u70ba\u4e86\u6eff\u8db3\u66f4\u591a\u7684\u5ba2\u88fd\u5316\u548c\u4fbf\u5229\u6027\uff0c\u72a7\u7272\u90e8\u5206\u6548\u80fd\u3002
\u5176\u4ed6\u8edf\u9ad4\u512a\u5316\u7d30\u7bc0\u7684\u53c3\u8003\u653e\u5728\u4e0b\u9762\uff0c\u6709\u8208\u8da3\u518d\u770b\u5427\uff01 \u4e0d\u904e\u770b\u5230 Maglev \u7c21\u55ae\u7684\u8a2d\u8a08\uff0c\u8b93\u6211\u60f3\u5230\u540c\u4e8b\u7684\u4e00\u53e5\u8a71\uff0c\u5c31\u4ee5\u6b64\u53e5\u8a71\u505a\u70ba\u7d50\u5c3e\uff1a
\u5206\u6563\u5f0f\u7684\u554f\u984c\u662f\u500b\u5f88\u597d\u7406\u89e3\u7684\u554f\u984c\uff0c\u4e5f\u5f88\u76f4\u89c0\uff0c\u4f46\u662f\u70ba\u4ec0\u9ebc\u89e3\u6c7a\u9019\u500b\u554f\u984c\u7684\u65b9\u5f0f\u90fd\u9019\u9ebc\u8907\u96dc\uff1f
\u5be6\u4f5c\u7d30\u7bc0\u53c3\u8003Smith et al 3 \u5efa\u8b70\u6e1b\u5c11\u8edf\u4e2d\u65b7\u548c\u7269\u4ef6\u8907\u88fd\u4f86\u589e\u52a0\u61c9\u7528\u7a0b\u5f0f\u7684\u901a\u91cf\u3002 Mogul et al 4 \u958b\u767c polling-based \u7684\u65b9\u5f0f\u4f86\u907f\u514d\u9396\u7684\u4e2d\u65b7\u3002 Edwards et al 5 \u63d0\u51fa\u4f7f\u7528 userspace \u7684\u7db2\u8def\u4f86\u505a\u9694\u96e2\u3002 Marinos et al 6 \u986f\u793a\u4f7f\u7528\u7279\u5b9a userspace \u7db2\u8def\u5806\u68e7\u548c kernel bypass \u53ef\u4ee5\u5927\u5e45\u63d0\u9ad8\u901a\u91cf\u3002 Hanford et al 7 \u5efa\u8b70\u628a\u5206\u6563\u7684\u5c01\u5305\u653e\u5728\u4e0d\u540c CPU \u8655\u7406\uff0c\u63d0\u9ad8\u5feb\u53d6\u547d\u4e2d\u7387\u3002 CuckooSwitch 8 \u662f\u500b\u9ad8\u6821\u7684\u8edf\u9ad4 L2 \u4ea4\u63db\u5668\uff0c\u5176\u4e2d\u4e00\u500b\u7279\u8272\u5c31\u662f\u6279\u6b21\u548c\u9810\u7d04\u5f0f\u7684\u6240\u53d6\u8a18\u61b6\u9ad4\u3002 RouteBricks 9 \u89e3\u91cb\u5982\u4f55\u6709\u6548\u7684\u5229\u7528\u5e73\u884c\u904b\u7b97\u4f86\u8655\u7406\u4e0d\u540c\u7684\u5c01\u5305\u3002
... \u5982\u540c\u5176\u4ed6\u6280\u8853\uff0c\u7576 Maglev \u555f\u52d5\u6642\u5b83\u6703\u52ab\u6301\u6574\u500b NIC\uff0c\u4e26\u4f7f\u7528 TAP \u4ecb\u9762\u4f86\u628a\u5c01\u5305\u91cd\u65b0\u50b3\u905e\u7d66 NIC\u3002
\u53c3\u95b1\u7b2c\u4e09\u6bb5\uff0cForwarder Design and Implementation\u3002\u00a0\u21a9
\u9019\u6578\u5b57\u6c92\u6709\u4efb\u4f55\u610f\u7fa9\uff0c\u53ea\u662f\u9078\u4e86\u4e00\u500b\u5920\u5927\u7684\u8cea\u6578\u505a\u5be6\u9a57\u3002\u00a0\u21a9
J. Smith and C. Traw. Giving applications access to gb/s networking. Network, IEEE, 7(4):44\u201352, 1993.\u00a0\u21a9
J. C. Mogul and K. K. Ramakrishnan. Eliminating receive livelock in an interrupt-driven kernel. In Proceedings of USENIX ATC, 1996.\u00a0\u21a9
A. Edwards and S. Muir. Experiences implementing a high performance tcp in user-space. In Proceedings of SIGCOMM, 1995.\u00a0\u21a9
I. Marinos, R. N. Watson, and M. Handley. Network stack specialization for performance. In Proceedings of SIGCOMM, 2014.\u00a0\u21a9
N. Hanford, V. Ahuja, M. Balman, M. K. Farrens, D. Ghosal, E. Pouyoul, and B. Tierney. Characterizing the impact of endsystem affinities on the end-to-end performance of high-speed flows. In Proceedings of NDM, 2013.\u00a0\u21a9
D. Zhou, B. Fan, H. Lim, M. Kaminsky, and D. G. Andersen. Scalable, high performance ethernet forwarding with cuckooswitch. In Proceedings of CoNEXT, 2013.\u00a0\u21a9
M. Dobrescu, N. Egi, K. Argyraki, B.-G. Chun, K. Fall, G. Iannaccone, A. Knies, M. Manesh, and S. Ratnasamy. Routebricks: Exploiting parallelism to scale software routers. In Proceedings of SOSP, 2009.\u00a0\u21a9
Written By Harris Andrea, original post
\u672a\u4f86\u60f3\u7ffb\u8b6f\u9019\u7bc7\u6587\u7ae0\uff0c\u4e26\u671f\u671b\u8b80\u904e\u5176\u4e2d\u5e7e\u672c\uff0c\u5148\u653e\u8457\u3002
I have read tens of books (both in ebook format and also hard copy textbooks) in my networking professional career over the last 18 years.
In fact, all of my preparation for my Cisco and other IT certifications was based on book studying (in addition to hands-on practice of course).
Personally, I believe that having a hard copy book in your hands and reading it from start to finish by taking written notes along the way, is one of the best ways to memorize and learn the material.
In this article I will list and review some of the best books on computer networking for both beginners and expert professionals.
The field of TCP/IP networking is evolving with new technological advancements and, in my opinion, it currently undergoes a transition from purely hardware to more software-based networks.
For the reason above I have also included books in the list (see towards the end) that focus on next generation networks, SDN, and automation/programmability.
When I first wrote this article, I intentionally didn\u2019t include any books related to Cisco certifications because that time was a transitional period for Cisco exams and certifications.
After the dust has settled, there are now some great Cisco books worth mentioning for professionals looking to earn Cisco certifications, so I have included some recommended options in the list.
You will find mostly some great books which teach both the fundamentals and more advanced concepts in computer networking that will surely be very valuable for professionals.
Let\u2019s get started:
"},{"location":"essay/web/network-books/#computer-networking-a-top-down-approach","title":"Computer Networking: A Top-Down Approach","text":"Computer Networking: A Top-Down Approach (6th Edition)
This book is organized into the network layers of Internet Protocol Stack which is the base of all computer networking (together with the OSI model), therefore it offers a very good structure and learning experience.
Written by two University professors (James Kurose and Keith Ross), the book is mostly suited for beginners and for university students in computer science or engineering majors.
Even if people who don\u2019t have any knowledge about networking will find the book easily accessible and comprehensible.
Although currently there is a newer 7th Edition of this book, its much higher price tag compared to the 6th Edition is not worth the extra money.
Also, the newer edition does not include that much extra material so I would recommend the cheaper 6th Edition just to save you some money. Although it is an older book, you will still learn the fundamentals of networking which is the basis for more practical material.
As I said above, the book is called \u201cTop-Down Approach\u201d because it starts at the Application layer of the Internet Protocol Stack (top layer) and works its way down to the Physical layer (bottom layer) of the stack. The other layers examined include Transport, Network and Link layers.
The above structure makes sense a lot in the pedagogical perspective since the whole computer networking functionality is based on this protocol layered structure.
Most useful for:
To summarize, I belief this book is a great choice for beginners or university students to acquire a comprehensive knowledge in computer networking fundamentals.
"},{"location":"essay/web/network-books/#network-warrior","title":"Network Warrior","text":"Network Warrior (2nd Edition)
Unlike the previous book above, \u201cNetwork Warrior\u201d book is much more practical and the examples described in the book are taken from real world networks and from the experience of the author.
The practical examples and configuration samples you will find in the book are taken from actual Cisco networking equipment so the book will be very helpful to Cisco network administrators that are actually working in the field and want to get the job done.
Some of the topics covered in the book include:
Most useful for:
To summarize, this book is great as a practical reference for professionals already working with Cisco networks. Although it is an old book, most of the concepts, configurations and technologies are still valid to this date.
"},{"location":"essay/web/network-books/#routing-tcpip-volume-i","title":"Routing TCP/IP, Volume I","text":"Routing TCP/IP, Volume i (2nd Edition)
This book is published by Cisco press and is one of the best-selling textbooks providing deep understanding of IP routing protocols.
It is geared towards more advanced professionals and is focused on Interior Routing protocols (IGPs) for both IPv4 and IPv6.
It is considered as the defacto standard for all network engineers who already have experience with Cisco IOS routers and who want to prepare for the CCIE Routing certification.
Most useful for:
If you are a Cisco networking engineer working mostly with Layer 3 routing devices, this book is the bible of Layer 3 IP communications. Please note that the book covers only Interior Gateway Protocols (IGPs). If you want to learn also BGP, please see the next book below.
"},{"location":"essay/web/network-books/#routing-tcpip-volume-ii","title":"Routing TCP/IP, Volume II","text":"Routing TCP/IP, Volume II (2nd Edition)
This is a continuation of the previous book above and covers exterior routing protocols (such as BGP) and also more advanced IP routing concepts.
In fact, it covers many concepts required for taking the CCIE exam and offers expert-level instruction on network design, deployment, support etc for managing complex networks.
The book is heavy weight on BGP, such as BGP and routing policies, scaling BGP, multi-protocol BGP etc. Other topics include NAT44, NAT64, multicast protocols etc.
The author (Jeff Doyle) is a CCIE veteran with vast experience in IP design and networking and is considered one of the best authors in Cisco press books.
Most useful for:
Advanced routing engineers who want to prepare for CCIE or want to learn everything about BGP (e.g people working in ISPs or big corporations). This book is 1100+ pages and is considered the bible of Exterior Routing and BGP design in networks.
"},{"location":"essay/web/network-books/#networking-all-in-one-for-dummies","title":"Networking All-in-One For Dummies","text":"Networking All-in-One For Dummies
This is one of the most recent (8th edition at the time of this writing) and updated textbooks in this list about computer networking that covers a wide range of topics for both beginners and for seasoned professionals.
This 1000+ pages book is one of the cheapest options in this list which provides so much value compared to its price.
The book is structured in 10 mini-books and covers a lot of recent and up-to-date technologies such as Cloud services (Amazon, Azure etc), Windows 10, Linux, Windows Server 2019, Office 365, general networking topics, virtualization, routing, switching, wireless, security etc.
It is one of the most thorough and all-in-one books out there and I recommend it as a great reference for any professional.
Most useful for:
For beginners who want to get an overall understanding of multiple topics in networking. Also, for experienced professionals who want to have a reference book for their job.
It is not focused only on core networking concepts (like routing etc) as the previous books, but covers also general IT systems and networking for Windows environments, Linux etc.
"},{"location":"essay/web/network-books/#cisco-networking-all-in-one-for-dummies","title":"Cisco Networking All-in-One For Dummies","text":"Cisco Networking All-in-One For Dummies
If you bought the other \u201cFor Dummies\u201d book above, then \u201cCisco Networking All-in-One For Dummies\u201d is a nice complementary option for professionals that started managing or supporting Cisco networking technologies.
This book is practical and technical in nature and offers actual Cisco configuration commands and examples that you can implement and use in your network.
Similar to the previous book above, the content is split into 6 mini books with each one divided into chapters and sections.
Each one of these chapters and sections focuses on a specific task/knowledge. Therefore, you can easily navigate the book back and forth according to the task or feature that you want to investigate or implement.
The 6 minibooks cover the following topics/themes:
Most useful for:
For professionals that support, manage and design networks running over Cisco infrastructure (routers, switches, wireless, firewalls etc).
"},{"location":"essay/web/network-books/#comptia-network-certification-all-in-one-exam-guide","title":"CompTIA Network+ Certification All-in-One Exam Guide","text":"CompTIA Network+ Certification All-in-One Exam Guide (8th Edition for Exam N10-008)
This is the only vendor-neutral certification related book in this list. I have included it here because CompTIA exams teach concepts that are universal and are not specific/bound to a certain vendor only.
The book is for the latest Network+ (Exam N10-008) and covers topics in general networking, cabling basics, ethernet networks, TCP/IP basics, routing, wireless networks, virtualization and cloud computing, network security, network management and monitoring etc.
The author (Mike Meyers) is the leading authority in writing CompTIA exam books and has authored several best sellers in this field.
Most useful for:
Mostly for people who want to study and prepare for the CompTIA Network+ exam. Even if you don\u2019t want to take the exam, this book will be really valuable for beginners who want to acquire extensive knowledge around computer networking in a vendor-neutral approach.
"},{"location":"essay/web/network-books/#the-complete-guide-to-lan-switching-technology","title":"The Complete Guide to LAN Switching Technology","text":"The Complete Guide to LAN Switching Technology (2nd Edition)
Ethernet switches are the backbone of any LAN network. You also find them everywhere and in every corporate network.
As a networking professional you must learn LAN switching technology and this book will help you with that endeavor.
The book focuses strictly on LAN switching and covers in-depth all related concepts and topics such as foundations of LAN switches, advanced LAN concepts, loop prevention, VLAN concepts, multicast, security in LANs etc.
Although this book is old, the fundamentals of LAN switching technologies do not change much over the years, so the book is still relevant in today\u2019s LAN networks.
Most useful for:
You will benefit most from this book if you already have a few years experience in networking and LAN management. The book goes in-depth about switching technologies so you must have some prior experience.
Mostly suitable for network designers, professionals managing and operating corporate LAN switch infrastructure or Value-added Resellers of networking equipment.
"},{"location":"essay/web/network-books/#network-programmability-and-automation","title":"Network Programmability and Automation","text":"Network Programmability and Automation: Skills for the Next-Generation Network Engineer
As I have mentioned at the beginning of this article, the book list I have compiled here includes also textbooks that look at the future of networking.
The \u201cNetwork Programmability and Automation\u201d book from O\u2019REILLY Media is one of these books that teaches a next-generation concept for network engineers.
This concept is about automating the management and operation of hardware-based networks using software tools, programming, Application Programming Interfaces (API) etc.
The book covers topics such as Python (used to create useful scripts to automate networking tasks), Linux, IT automation tools such as Ansible, SDN concepts, working with Network APIs, Integration concepts etc.
Keep in mind here that the new Cisco certification exams after their 2020 updates, include a lot of programmability and automation topics. This is another reason that modern network engineers must shift their mindset into more software-based concepts and automation.
Most useful for:
If you are a hard-core traditional network engineer already managing and monitoring your infrastructure with the CLI, this book will help you make the shift to a more efficient and more productive management and operation.
If you fall into the group above, you don\u2019t need any previous knowledge in software development or programming.
"},{"location":"essay/web/network-books/#software-defined-networks-a-comprehensive-approach","title":"Software Defined Networks: A Comprehensive Approach","text":"Software Defined Networks: A Comprehensive Approach
Continuing our reviews of books about next-generation concepts, this book deals with the SDN Model (Software Defined Networking) which seems to be the new era in computer networks.
The book includes the history of SDN, how software was used to forward and route packets in networks, how an enterprise will benefit from SDN or not, how SDN works, the OpenFlow specification, SDN in data centers, SDN applications, NETCONF and much more.
If you are a network designer or architect, this book will help you understand and explain to top-management the benefits or risks of integrating the SDN model in your existing network environment.
Most useful for:
The book offers a very good overall understanding of SDN concepts and OpenFlow which will help professionals who are already experienced in IP networks to acquire an overall knowledge of SDN.
"},{"location":"essay/web/network-books/#ccna-200-301-official-cert-guide-library","title":"CCNA 200-301 Official Cert Guide Library","text":"CCNA 200-301 Official Cert Guide Library
As mentioned at the very beginning of this article, I decided to include also books related to vendor-specific exams.
Since most of the people visiting this website are Cisco professionals or people interested to pass Cisco exams, I couldn\u2019t ignore one of the most popular and useful networking certification which is Cisco CCNA.
The theory and knowledge required for the newest CCNA 200-301 exam is covered fully in this comprehensive library which actually includes two books:
Instead of paying double the money to buy the two books above separately, you can buy this value-priced Package Library.
Most useful for:
This is a Cisco-approved self-study resource for people preparing for the Cisco CCNA 200-301 exam. Along the way in studying these books, you will learn key fundamental networking concepts which will be helpful in your whole career as network engineer.
Please note that this library is very detailed and can be overwhelming for total beginners in networking.
"},{"location":"essay/web/network-books/#ccna-200-301-practical-lab-guide-with-packet-tracer-labs","title":"CCNA 200-301 Practical Lab Guide With Packet Tracer Labs","text":"Guide link
Last but not least is my own Practical Lab Guide which comes as PDF electronic Lab Book and includes also 42 downloadable Packet Tracer labs based on the official CCNA 200-301 Cisco exam blueprint.
I admit that the above Lab Book alone will not help you pass the exam by itself. It is however a great companion resource with practical labs which should be used together with other material such as the Cisco Cert Library mentioned above.
If you want an affordable Lab preparation guide for the practical aspects of the CCNA exam, then my Lab Guide Book here will be very helpful, even for people that just want a refreshing in fundamental practical Cisco networking concepts.
"},{"location":"essay/web/network-books/#final-words","title":"Final Words","text":"Of course, the book list above is not a comprehensive list of every computer networking book out there.
However, I have tried to collect and present the best ones in my opinion that will help most beginners just starting out in networking and also experts that want to advance their knowledge and skills even further.
To summarize, here are my book suggestions categorized according to your experience and knowledge level.
"},{"location":"essay/web/network-books/#best-books-for-beginners","title":"Best Books for Beginners","text":"Please let me know in the comments below if you have other book suggestions that you liked so that everyone will benefit from your own personal experience.
"},{"location":"essay/web/network-details/","title":"\u7db2\u8def\u50b3\u4e86\u4ec0\u9ebc","text":"\u4e59\u592a\u7db2\uff08Ethernet\uff09\u548c\u5176\u4e4b\u4e0a\u7684\u7db2\u8def\u5354\u5b9a\uff08Internet Protocol, IP\uff09\u50b3\u4e86\u4ec0\u9ebc\uff1f
\u5176\u4ed6\u9084\u6709\u4ec0\u9ebc\uff1f
\u90fd\u662f 1 \u548c 0 \u7684\u4ea4\u66ff\u4f86\u4ee3\u8868\u6709\u8a0a\u6846\u8981\u50b3\u9001\u9032\u4f86\u4e86\u3002
10101010 10101010 10101010 10101010 10101010 10101010 10101010 10101011\n
"},{"location":"essay/web/network-details/#\u8868\u982d\u8cc7\u8a0a","title":"\u8868\u982d\u8cc7\u8a0a","text":"1501
\u4ee3\u8868\u8a0a\u6846\u9577\u5ea6\u53cd\u4e4b\u5927\u65bc 1535
\u5247\u662f\u4ee3\u8868\u7a2e\u985e1500
\u662f Ethernet 802.3 \u7684\u6700\u5927\u50b3\u8f38\u55ae\u4f4d\uff08MTU\uff09\uff0c\u4f46\u662f\u82e5\u4f7f\u7528\u5176\u4ed6\u5354\u5b9a\u5247\u662f\u6539\u70ba\u586b\u5beb 1535
\u4ee5\u4e0a\uff08\u4e0d\u542b\uff09\u7684\u503c\u3002
\u56e0\u70ba 1536
\u4ee5\u5341\u516d\u9032\u4f4d\u8868\u9054\u662f 0x600
\u6240\u4ee5\u4ee5\u6b64\u70ba\u8d77\u59cb\uff0c\u5354\u5b9a\u7a2e\u985e\u7684\u9078\u64c7\u6709\u9019\u4e9b\u3002
\u9019\u6a23\u5176\u4ed6\u5354\u5b9a\u7684\u9577\u5ea6\u8981\u600e\u9ebc\u8a08\u7b97\uff1f\u53ef\u4ee5\u901a\u904e\u524d\u9762\u63d0\u7684 \u8a0a\u6846\u9593\u9694 \u6216 \u6aa2\u6838\u548c \u4f86\u78ba\u8a8d\u3002\u4f46\u6709\u4e9b\u7279\u6b8a\u5354\u5b9a\u4ecd\u9700\u8981\u6307\u5b9a\u9577\u5ea6\u3002
"},{"location":"essay/web/network-details/#\u6aa2\u6838\u548c","title":"\u6aa2\u6838\u548c","text":"\u9700\u8981\u900f\u904e\u6aa2\u6838\u548c\u4f86\u67e5\u9a57\u672c\u8a0a\u6846\u662f\u5426\u53d7\u5230\u5e72\u64fe\u800c\u6709\u932f\u8aa4\u8a0a\u606f\uff0c\u9019\u985e\u6aa2\u6838\u548c\u5728\u6b64\u7684\u540d\u7a31\u53eb\u505a\u6846\u6aa2\u67e5\u9806\u5e8f\uff08Frame check sequence, FCS\uff09\u3002
\u4e59\u592a\u7db2\u4f7f\u7528\u7684\u6aa2\u6838\u548c\u662f CRC\uff0c\u5176\u900f\u904e\u591a\u9805\u5f0f\u76f8\u9664\u5f97\u5230\u7684\u5546\u7684\u4e00\u4e9b\u7279\u6027\u6eff\u8db3\u9ad8\u932f\u8aa4\u6aa2\u67e5\u7387\uff0c\u4e5f\u5c31\u662f\u56db\u500b\u4f4d\u5143\u7d44\u5c31\u80fd\u6aa2\u67e5\u591a\u500b\u4f4d\u5143\u7d44\u7684\u8cc7\u8a0a\uff08\u9664\u4e86\u6536\u767c\u5668\u76f8\u95dc\u4e4b\u5916\u7684\u8a0a\u606f\u90fd\u542b\uff09\u3002
"},{"location":"essay/web/network-details/#\u7db2\u8def\u5354\u5b9a","title":"\u7db2\u8def\u5354\u5b9a","text":"Wiki \u90fd\u8b1b\u5f97\u5f88\u8a73\u7d30\uff0c\u4e0d\u8d05\u8ff0\u4e86\uff0c\u4e3b\u8981\u6709\u5206\u5169\u500b\u7248\u672c\uff1a
\u9019\u908a\u63d0\u4e00\u4e0b IPv6 \u6709\u5e7e\u9ede\u8981\u6ce8\u610f\uff1a
\u670d\u52d9\u54c1\u8cea\u63a7\u5236
\u7576\u7db2\u8def\u58c5\u585e\uff08congestion\uff09\u7684\u6642\u5019\uff0c\u9700\u8981\u5148\u8655\u7406\u7b49\u7d1a\u6bd4\u8f03\u9ad8\u7684\uff08\u901a\u4fe1\u985e\u5225\uff09\u6216\u8005\u900f\u904e\u53cd\u58d3\uff08back-pressure\uff09\u7b49\u6a5f\u5236\uff08\u670d\u52d9\u54c1\u8cea\u63a7\u5236\uff09\u4f86\u6709\u6548\u8655\u7406\u9ad8\u6d41\u91cf\u3002
\u9ad8\u6d41\u91cf\u6642\u6703\u56b4\u91cd\u5f71\u97ff\u65e2\u6709\u7684\u670d\u52d9\u80fd\u529b\uff0c\u597d\u7684\u670d\u52d9\u54c1\u8cea\u63a7\u5236\u6703\u8b93\u66f2\u7dda\u8d70\u5411 Desirable \u90a3\u689d\u3002
"},{"location":"essay/web/network-details/#\u6d41\u7a0b","title":"\u6d41\u7a0b","text":"\u4e86\u89e3\u4e59\u592a\u7db2\u548c\u7db2\u8def\u5354\u5b9a\u7684\u8cc7\u6599\u5167\u5bb9\u4e4b\u5f8c\uff0c\u6211\u5011\u4f86\u770b\u770b\u5be6\u969b\u600e\u9ebc\u8dd1\u7684\uff1f
NIC Architecture
\u7db2\u5361\uff08Network Interface Card, NIC, Network Adaptor\uff09\u662f\u5916\u63a5\u6216\u5167\u5d4c\u9032\u96fb\u8166\uff08\u6216\u8def\u7531\u5668\u6216\u4ea4\u63db\u5668\uff09\u88e1\u7684\u96fb\u8def\u3002\u7576\u7db2\u8def\u7dda\u50b3\u9001\u9032\u4f86\u8a0a\u865f\u6642\uff0c\u6536\u767c\u5668\uff08PHY\uff09\u5c31\u6703\u958b\u59cb\u8655\u7406\u8a0a\u865f\uff0c\u78ba\u8a8d\u6709\u8a0a\u6846\u4e4b\u5f8c\uff0c\u5148\u505a\u6aa2\u6838\u548c\u7684\u67e5\u9a57\u3002
\u56e0\u70ba CRC \u53ef\u4ee5\u76f4\u63a5\u505a\u4e8c\u9032\u4f4d\u7684\u904b\u7b97\u5f97\u51fa\uff0c\u6240\u4ee5\u5728\u96fb\u8def\u4e0a\u5c31\u6703\u76f8\u5c0d\u55ae\u7d14\u3002\u6aa2\u67e5\u5b8c\u4e4b\u5f8c\u5c31\u6703\u958b\u59cb\u900f\u904e header-parsing
\u505a\u6a19\u982d\u8cc7\u8a0a\u7684\u6aa2\u67e5\uff0c\u5305\u542b MAC \u76ee\u7684\u5730\u7aef\u7684\u78ba\u8a8d\u3001\u4e59\u592a\u7a2e\u985e\u548c\u8a0a\u6846\u9577\u5ea6\u3002\u6700\u5f8c\u5f97\u5230\u7684\u8cc7\u6599\uff08\u4e5f\u5c31\u662f\u7db2\u8def\u5c64\u7684 IP \u8cc7\u8a0a\uff09\u6703\u5f80\u4e3b\u6a5f\u9001\u3002
\u8cc7\u6599\u9023\u7d50\u5c64\u7684\u6392\u968a
\u53ef\u4ee5\u6ce8\u610f\u5230\u7db2\u5361\u6703\u900f\u904e Scheduling \u548c Queueing \u7684\u65b9\u5f0f\u4f86\u6392\u968a\u6d88\u5316\u591a\u7b46\u8cc7\u8a0a\u3002
"},{"location":"essay/web/network-details/#\u5f80\u4e0a\u9001\u7684\u6d41\u7a0b","title":"\u5f80\u4e0a\u9001\u7684\u6d41\u7a0b","text":"\u9019\u88e1\u7684\u300c\u4e0a\u300d\u5176\u5be6\u5c31\u662f OSI \u968e\u5c64\u7684\u6982\u5ff5\u3002
IP Processing RX
\u7576\u8cc7\u6599\u88ab\u9001\u4e0a\u4f86\u4e4b\u5f8c\u6703\u505a\u4e00\u4e9b\u4f4d\u7f6e\u89e3\u6790\u5354\u5b9a\uff08Address Resolver Protocol, ARP\uff09\u7684\u8655\u7406\u3002\u53e6\u5916 IP \u5728\u5f80\u4e0b\u9001\u7684\u6642\u5019\u9664\u4e86\u6aa2\u67e5 ARP \u4e4b\u5916\u4e5f\u6703\u6aa2\u67e5\u662f\u5426\u9700\u8981\u56de\u9001\uff08loopback\uff09\u3002
\u6aa2\u67e5 IP \u5c01\u5305\u9806\u5e8f\u6703\u662f\uff1a
\u7ffb\u8b6f\u90fd\u6839\u64da\u300c\u96d9\u8a9e\u8a5e\u5f59\u3001\u5b78\u8853\u540d\u8a5e\u66a8\u8fad\u66f8\u8cc7\u8a0a\u7db2\u300d\u5b9a\u7fa9\u3002\u00a0\u21a9
\u6982\u7565\u5716\u8b1b\u8ff0\u7db2\u8def\u7684\u50b3\u8f38\u6d41\u7a0b\u3002\u5be6\u969b\u4e0a\u50b3\u4e86\u4ec0\u9ebc\u548c\u4e00\u4e9b\u5e95\u5c64\u5143\u4ef6\u904b\u4f5c\u539f\u7406\u8acb\u770b\u300c\u7db2\u8def\u50b3\u4e86\u4ec0\u9ebc\u300d
"},{"location":"essay/web/network-routing/#\u6982\u7565\u5716","title":"\u6982\u7565\u5716","text":"\u5716\u4e2d\u4e0a\u534a\u90e8\u662f\u5728\u8b1b\u7db2\u8def\u50b3\u8f38\u904e\u7a0b\uff0c\u4e0b\u534a\u90e8\u662f\u4e00\u4e9b\u4ecb\u7d39\u3002
\u5de6\u53f3\u5169\u908a\u90fd\u6709 Socket API\uff0c\u5373\u662f BSD Socket\uff0c\u4ed6\u662f\u4e00\u500b\u88ab\u5305\u88dd\u7684\u7a0b\u5f0f\u5eab\u3002\u7576\u958b\u767c\u8005\u8981\u9032\u884c HTTP \u6e9d\u901a\u6642\u5c31\u6703\u900f\u904e Socket API \u4f86\u5efa\u7acb\u9023\u7dda\uff0c\u4e26\u9078\u5b9a\u60f3\u8981\u7684\u50b3\u8f38\u5c64\u5354\u5b9a\u9032\u884c\u6e9d\u901a\u3002
\u4ee5 HTTP \u70ba\u4f8b\uff0c\u5927\u90e8\u5206\u60c5\u6cc1\u90fd\u662f\u4f7f\u7528 TCP\uff08\u9023\u7d50\u4e2d\u6709\u9644\u4f7f\u7528 API \u7684\u7a0b\u5f0f\u78bc\uff09\uff0c\u4e4b\u5f8c Socket API \u5c31\u6703\u5728\u7a0b\u5f0f\u5eab\u5167\u90e8\u628a\u76f8\u95dc\u8cc7\u6599\u62c6\u5c64\u4e00\u500b\u500b\u7247\u6bb5\uff08segment\uff09\u4e26\u6dfb\u52a0\u4e00\u4e9b TCP \u7684\u8cc7\u8a0a\u3002\u5305\u88dd\u5b8c\u4e4b\u5f8c\uff0c\u5c31\u6703\u518d\u5305\u88dd\u6210\u5c01\u5305\uff08packet\uff09\u3002
\u7576\u5305\u88dd\u6210\u4e00\u500b\u500b\u7684\u5c01\u5305\u4e4b\u5f8c\uff0c\u6703\u4e1f\u7d66 \u7db2\u5361 \u4f86\u8655\u7406\u6210\u4e00\u500b\u500b\u7684\u8a0a\u6846\u4e26\u900f\u904e\u6536\u767c\u5668\u548c\u7db2\u8def\u7dda\uff08\u4e5f\u53ef\u80fd\u662f Wi-Fi \u7b49\u7b49\uff0c\u8a73\u898b\u7db2\u8def\u50b3\u4e86\u4ec0\u9ebc\uff09\u50b3\u905e\u5230\u7db2\u969b\u7db2\u8def\u3002
"},{"location":"essay/web/network-routing/#\u7db2\u969b\u7db2\u8def","title":"\u7db2\u969b\u7db2\u8def","text":"\u7db2\u969b\u7db2\u8def\u4e2d\u85cd\u8272\u5708\u5708\u4ee3\u8868\u8def\u7531\u5668\uff0c\u7da0\u8272\u9577\u65b9\u9ad4\u4ee3\u8868\u4ea4\u63db\u5668\uff0c\u50b3\u8f38\u5230\u8def\u7531\u5668\u524d\u53ef\u80fd\u6703\u7d93\u904e\u591a\u53f0\u4ea4\u63db\u5668\uff0c\u800c\u8def\u7531\u5668\u4e2d\u5176\u5be6\u4e5f\u6709\u4ea4\u63db\u5668\u7684\u529f\u80fd\uff08\u542b\u6709 MAC \u503c\uff09\u3002
\u8def\u7531\u5668\u548c\u8def\u7531\u5668\u4e4b\u9593\uff08\u4e2d\u9593\u53ef\u80fd\u593e\u96dc\u4ea4\u63db\u5668\uff09\u7684\u6e9d\u901a\u975e\u5e38\u975e\u5e38\u8907\u96dc\uff08\u6839\u64da Xiaobo Zhou \u7684\u8aaa\u6cd5\uff0c\u662f OSI \u968e\u5c64\u88e1\u6700\u8907\u96dc\u7684\u5c64\u7d1a\uff09\uff0c\u88e1\u9762\u5305\u62ec\u6700\u4f73\u8def\u5f91\u641c\u5c0b\u3001\u6392\u968a\u7684\u7b56\u7565\u3001\u7de9\u885d\u7684\u7ba1\u7406\u7b49\u7b49\u3002\u4e0d\u904e\u6211\u5011\u9019\u88e1\u5c31\u55ae\u7d14\u5047\u8a2d\u8def\u7531\u5668\u77e5\u9053\u8981\u628a\u8a0a\u865f\u9001\u7d66\u8ab0\u3002
\u50b3\u4e00\u50b3\u6700\u5f8c\u5c31\u6703\u4ea4\u5230\u76ee\u7684\u7aef\uff0c\u76ee\u7684\u7aef\u518d\u628a\u76f8\u95dc\u8cc7\u8a0a\u53cd\u8b6f\u5230\u61c9\u7528\u5c64\u7d1a\u7684\u8cc7\u8a0a\u3002
"},{"location":"essay/web/network-routing/#\u5404\u5c64\u6709\u54ea\u4e9b\u670d\u52d9","title":"\u5404\u5c64\u6709\u54ea\u4e9b\u670d\u52d9","text":"\u5716\u7684\u5de6\u4e0b\u89d2\u6709\u7c21\u4ecb\u4e00\u4e9b\u6211\u81ea\u5df1\u77e5\u9053\u7684\u670d\u52d9\u548c\u5354\u5b9a\u3002
\u4ee5\u50b3\u8f38\u5c64\u70ba\u4f8b\uff0c\u5728\u5230\u4f60\u7684\u61c9\u7528\u7a0b\u5f0f\u4e4b\u524d\u6703\u6709\u8ca0\u8f09\u5e73\u8861\u5668\u3001\u4ee3\u7406\u4f3a\u670d\u5668\u7b49\u7b49\u3002\u4ed6\u8ca0\u8cac\u7684\u5354\u5b9a\u6709 TCP\u3001UDP \u548c ICMP \u7b49\u7b49\u3002\u9019\u88e1\u63d0\u4e00\u4e0b ICMP \u5c0d\u61c9\u5230 Socket API \u5176\u5be6\u662f\u6c92\u6709\u5305\u88dd\u7684\uff0c\u800c\u662f\u4f7f\u7528 Raw Socket \u63a5\u53e3\u3002ICMP \u7684\u7528\u9014\u662f\u6aa2\u67e5\u76ee\u7684\u7aef\u7684\u7db2\u8def\u5c64\u670d\u52d9\u72c0\u614b\uff0c\u6700\u6709\u540d\u7684\u5be6\u4f5c\u5c31\u662f ping\uff08\u9001 ping \u904e\u53bb\u8981 pong \u56de\u4f86\uff09\u3002
\u5728\u8cc7\u6599\u9023\u7d50\u5c64\u4e2d\u53ef\u80fd\u9084\u6709 ATM\uff08Asynchronous Transfer Mode\uff09\uff0c\u4ed6\u7570\u65bc\u4e59\u592a\u7db2\u7684\u7121\u9023\u63a5\u5f0f\u901a\u8a0a\uff08connection-less\uff09\uff0c\u6703\u5728\u4ea4\u63db\u5668\u9593\u5efa\u7acb\u9023\u7dda\uff0c\u4e5f\u5c31\u662f\u7576\u9023\u7dda\u88ab\u4e2d\u65b7\u6642\uff08\u6c92\u6709\u56de\u61c9\uff09\u6703\u8981\u6c42\u4f86\u6e90\u7aef\u91cd\u65b0\u5efa\u7acb\u5176\u4ed6\u8def\u5f91\u7684\u9023\u7dda\uff0c\u9019\u6a23\u53ef\u4ee5\u78ba\u4fdd\u9023\u7dda\u7684\u54c1\u8cea\u548c\u9650\u7e2e\u7db2\u8def\u5ef6\u9072\u7684\u6700\u5927\u503c\uff0c\u4f46\u662f\u6703\u964d\u4f4e\u983b\u5bec\u7684\u4f7f\u7528\u7387\u3002
"},{"location":"essay/web/ntp/","title":"NTP","text":"Network Time Protocol \u8aaa\u660e\u5982\u4f55\u8b93\u5404\u65b9\u88dd\u7f6e\u53ef\u4ee5\u548c\u4e2d\u592e\u7684 NTP Server \u9032\u884c\u6821\u6642\u7684\u5de5\u4f5c\u3002
"},{"location":"essay/web/ntp/#\u904b\u4f5c\u539f\u7406","title":"\u904b\u4f5c\u539f\u7406","text":"NTP \u662f\u900f\u904e\u8a08\u7b97\u4f86\u56de\u7684\u6642\u9593\u5dee\u4f86\u5f97\u77e5\u7bc0\u9ede\u548c\u4e2d\u539f\u6a19\u6e96\u6642\u9593\u7684\u5dee\u7570\uff0c \u8981\u6ce8\u610f\u7684\u662f NTP \u5728\u6821\u6642\u7684\u6642\u5019\u662f\u4e00\u6b21\u52d5\u4e00\u9ede\u7136\u5f8c\u9010\u6f38\u9760\u8fd1\u5230\u6b63\u78ba\u6642\u9593\uff08\u6bcf\u79d2 0.5ms\uff09\u3002
\u4f46\u662f\u6703\u6709\u4e9b\u554f\u984c\uff1a
\u53e6\u5916 NTP \u662f\u57fa\u65bc\u961c\u53e3 123 \u7684 UDP \u9032\u884c\u50b3\u8f38\u3002
"},{"location":"essay/web/ntp/#\u6f14\u9032","title":"\u6f14\u9032","text":"Version Year RFC Desc. v0 1981 RFC 958 NTP \u6982\u5ff5\u9996\u6b21\u63d0\u51fa\uff0c\u5b9a\u7fa9\u6e96\u78ba\u5ea6\u3001\u9810\u4f30\u53ef\u80fd\u7684\u8aa4\u5dee\u548c\u76f8\u5c0d\u6642\u9418\u7684\u7279\u6027 v1 1988 RFC 1059 \u63d0\u51fa\u5be6\u4f5c\u898f\u5247\u3001\u76f8\u95dc\u6f14\u7b97\u6cd5\u548c client-server \u8207 peer-to-peer \u7684\u6a21\u5f0f v2 1989 RFC 1119 \u63d0\u4f9b\u9a57\u8b49\u548c\u63a7\u5236\u8a0a\u606f v3 1992 RFC 1305 \u6821\u6642\u6a5f\u5236\u3001\u4e0a\u6e38\u6642\u9418\u7684\u9078\u64c7\u548c\u904e\u6ffe\u6f14\u7b97\u6cd5\u4e26\u652f\u63f4\u5ee3\u64ad\u6642\u9593\u8cc7\u8a0a\uff0c\u88ab\u5ee3\u6cdb\u4f7f\u7528\u7684\u7248\u672c v4 2010 RFC 5905 \u652f\u63f4 IPv6 \u548c\u63d0\u4f9b\u52a0\u5bc6\u548c\u9a57\u8b49\u624b\u6bb5\u4f86\u5f37\u5316\u5b89\u5168\u6027NTP \u6f14\u9032
\u53c3\u8003 Info-Finder\u3002
"},{"location":"essay/web/ntp/#\u958f\u79d2","title":"\u958f\u79d2","text":"\u7531\u65bc UTC \u6642\u9593\u900f\u904e\u539f\u5b50\u9418\u505a\u8a08\u7b97\uff0c\u4ee5\u6b64\u53ef\u4ee5\u7cbe\u6e96\u5f97\u51fa\u904e\u4e86\u591a\u5c11\u6642\u9593\uff0c\u4f46\u662f\u548c\u4e00\u822c\u4f7f\u7528\u7684\u66c6\u6cd5\u6703\u6709\u6240\u885d\u7a81\u3002
\u885d\u7a81\u5c31\u4f86\u81ea\u65bc\u4e00\u822c\u66c6\u6cd5\u662f\u900f\u904e\u89c0\u6e2c\u592a\u967d\u4f86\u8a2d\u8a08\u51fa\u4e00\u6574\u5e74\u6709 365.25 \u5929\u3002\u4f46\u5be6\u969b\u5730\u7403\u81ea\u8f49\u548c\u516c\u8f49\u7684\u9031\u671f\u662f\u6709\u4e9b\u5fae\u8b8a\u5316\u7684\uff0c\u4e5f\u5c31\u662f\uff0c\u900f\u904e\u539f\u5b50\u9418\u8a08\u7b97\u7684\u6642\u9593\u6703\u548c\u66c6\u6cd5\u6642\u9593\u6703\u6709\u4e0d\u898f\u5247\u7684\u5dee\u7570\u3002
\u4e0d\u898f\u5247\u6027
\u5730\u7403\u81ea\u8f49\u901f\u5ea6\u6e1b\u6162\u7684\u4e3b\u8981\u539f\u56e0\u662f\u6f6e\u6c50\u6469\u64e6\uff0c \u50c5\u6b64\u4e00\u9805\u5c31\u5c07\u4f7f\u4e00\u5929\u6bcf\u4e16\u7d00\u5ef6\u9577 2.3ms\u3002 \u5176\u4ed6\u4fc3\u6210\u56e0\u7d20\u5305\u62ec\u5730\u7403\u5730\u6bbc\u76f8\u5c0d\u65bc\u5176\u6838\u5fc3\u7684\u904b\u52d5\uff0c \u5730\u51fd\u5c0d\u6d41\u7684\u8b8a\u5316\uff0c\u4ee5\u53ca\u5c0e\u81f4\u5de8\u5927\u8cea\u91cf\u518d\u5206\u914d\u7684\u4efb\u4f55\u5176\u4ed6\u4e8b\u4ef6\u6216\u904e\u7a0b\u3002
\u9019\u4e9b\u904e\u7a0b\u6539\u8b8a\u4e86\u5730\u7403\u7684\u6163\u6027\u77e9\uff0c\u7531\u65bc\u89d2\u52d5\u91cf\u5b88\u6046\u800c\u5f71\u97ff\u4e86\u81ea\u8f49\u901f\u7387\u3002 \u5176\u4e2d\u4e00\u4e9b\u91cd\u5206\u914d\u6703\u63d0\u9ad8\u5730\u7403\u7684\u81ea\u8f49\u901f\u5ea6\uff0c\u7e2e\u77ed\u592a\u967d\u65e5\uff0c\u4e26\u5c0d\u6297\u6f6e\u6c50\u6469\u64e6\u3002 \u4f8b\u5982\uff0c\u51b0\u6cb3\u53cd\u5f48\u5c07\u592a\u967d\u65e5\u7e2e\u77ed\u4e86 0.6ms / \u4e16\u7d00\uff0c 2004 \u5e74\u767c\u751f\u5728\u5370\u5ea6\u6d0b\u7684\u5730\u9707\u548c\u6d77\u562f\u88ab\u8a8d\u70ba\u7e2e\u77ed\u4e86 2.68 \u5fae\u79d2\u3002
\u70ba\u4e86\u6d88\u5f4c\u9019\u9805\u5dee\u7570\uff0c\u958f\u79d2\u88ab\u8a2d\u8a08\u51fa\u4f86\u4e86\u3002
\u958f\u79d2\u53ef\u52a0\u53ef\u6e1b
\u958f\u79d2\u6703\u88ab\u52a0\u9032\u539f\u5b50\u9418\u7b97\u51fa\u7684 UTC \u6642\u9593\uff0c\u7406\u8ad6\u4e0a\u53ef\u4ee5\u662f\u589e\u52a0\u6216\u6e1b\u5c11\u3002 \u4f46\u6b77\u53f2\u4e0a\uff08\u81ea\u5f9e 1972 \u5e74\u4ee5\u5f8c\uff09\u53ea\u589e\u52a0\u904e\u958f\u79d2\u3002
"},{"location":"essay/web/ntp/#\u62b9\u9ed1\u5728\u958f\u79d2\u9644\u8fd1\u7684\u6642\u9593","title":"\u62b9\u9ed1\u5728\u958f\u79d2\u9644\u8fd1\u7684\u6642\u9593","text":"\u300c\u62b9\u9ed1\u5728\u958f\u79d2\u9644\u8fd1\u7684\u6642\u9593\u300d\u662f\u7dad\u57fa\u767e\u79d1\u7684\u7ffb\u8b6f\uff0c\u82f1\u6587\u70ba leap smear\u3002\u9019\u662f Google \u63d0\u51fa\u7684\u6280\u8853\uff0c\u4e3b\u8981\u70ba\u4e86\u907f\u514d\u4f7f\u7528\u50b3\u7d71\u65b9\u5f0f\u6703\u9020\u6210\u7684\u7cfb\u7d71\u932f\u8aa4\u3002
\u50b3\u7d71\u65b9\u5f0f\u662f\u5728 0 \u9ede\u524d\u7684\u90a3\u4e00\u79d2\u591a\u7b49\u5f85\u4e00\u79d2\uff0c\u4e5f\u5c31\u662f\u90a3\u4e00\u79d2\u6703\u9700\u8981\u5169\u79d2\u7684\u6642\u9593\u4f86\u5b8c\u6210\uff0c\u9019\u500b\u6a5f\u5236\u6703\u5728\u8a31\u591a\u7684\u5730\u65b9\u51fa\u73fe\u932f\u8aa4\u5224\u5b9a\uff0c\u5c24\u5176\u662f\u4f9d\u8cf4\u6642\u9593\u7684\u7cfb\u7d71\uff0c\u751a\u81f3\u5f71\u97ff\u61c9\u7528\u7a0b\u5f0f\u7684\u5224\u65b7\u3002Leap smear \u5c31\u662f\u628a\u9019\u4e00\u79d2\u96a8\u6a5f\u5206\u6563\u7d66\u7576\u5929\u7684\u6bcf\u4e00\u79d2\uff0c\u8b93\u88ab\u5206\u914d\u5230\u7684\u79d2\u8981\u8dd1\u4e45\u4e00\u9ede\u9ede\uff0c\u8b93\u7cfb\u7d71\u5e7e\u4e4e\u611f\u53d7\u4e0d\u5230\u4eca\u5929\u591a\u4e86\u4e00\u79d2\u3002
"},{"location":"essay/web/ntp/#\u5ee2\u9664","title":"\u5ee2\u9664","text":"\u6700\u8fd1\uff082022/08\uff09\u6709\u807d\u5230\u8981\u5ee2\u9664\u958f\u79d2\u7684\u98a8\u8072\uff0c\u4f8b\u5982 Meta\uff08\u4ee5\u524d\u7a31 Facebook\uff09\u5de5\u7a0b\u5728 It\u2019s time to leave the leap second in the past \u63d0\u5230\u7684\uff0c\u672a\u4f86\u7684\u4e00\u5343\u5e74\uff08millennium\uff09\u82e5\u5ffd\u7565\u958f\u79d2\u7684\u5f71\u97ff\uff0c\u4ecd\u7136\u80fd\u5e73\u8861\u96fb\u8166\u6642\u9593\u548c\u66c6\u6cd5\u6642\u9593\u7684\u5dee\u7570\u800c\u5ffd\u7565\u5176\u5e36\u4f86\u7684\u5f71\u97ff\uff0c\u81f3\u5c11\u6a5f\u7387\u4e0a\u4f86\u8aaa\u662f\u5982\u6b64\u3002
\u5df2\u7d93\u7d93\u904e\u6c7a\u8b70\uff082022/11/18\uff09\u78ba\u5b9a\u5ee2\u9664\u958f\u79d2\u4e86\uff0c\u4e26\u5c07\u65bc 2035 \u5e74\u5f8c\u958b\u59cb\u5be6\u65bd\u3002 \u539f\u56e0\u662f\u76ee\u524d\u5730\u7403\u81ea\u8f49\u6b63\u52a0\u901f\u4e2d\uff08\u6bcf\u5929\u7684\u79d2\u6578\u5c07\u6e1b\u5c11\uff0c\u5118\u7ba1\u7406\u8ad6\u4e0a\u61c9\u8a72\u53d7\u5230\u6708\u7403\u5f15\u529b\u800c\u6e1b\u6162\uff09\uff0c\u6240\u4ee5\u9577\u9060\u4f86\u770b\uff0c\u6b77\u4f86\u53ea\u589e\u52a0\u904e\u7684\u958f\u79d2\u5c07\u6703\u88ab\u5e73\u8861\u3002
"},{"location":"essay/web/ntp/#referrer","title":"Referrer","text":"Idempotent
\u51aa\u7b49\u7684\uff0c\u91cd\u8907\u57f7\u884c\u5f8c\u7d50\u679c\u4ecd\u76f8\u540c\uff0c\u4f8b\u5982\u91cd\u8907\u522a\u9664\uff08delete\uff09\u76f8\u540c\u7684\u8cc7\u6e90\uff0c\u4e26\u4e0d\u6703\u9020\u6210\u984d\u5916\u7684\u5f71\u97ff\u3002
Destructive\uff1a
\u7834\u58de\u6027\u7684\uff0c\u57f7\u884c\u5f8c\u6703\u53ef\u80fd\u6703\u9020\u6210\u8cc7\u6599\u7684\u7121\u6cd5\u5fa9\u539f\uff0c\u4e4b\u6240\u4ee5 POST \u4e0d\u662f\uff0c\u662f\u56e0\u70ba POST \u901a\u5e38\u88ab\u7528\u4f86\u5efa\u7acb\u8cc7\u6599\uff0c \u800c\u4e0d\u662f\u4fee\u6539\u8cc7\u6599\u3002
PUT \u53ef\u80fd\u70ba user.name = 'Evan'
\uff0c \u4e5f\u53ef\u80fd\u70ba user.access_count += 1
\uff0c \u6545\u4e26\u4e0d\u662f\u6bcf\u500b\u64cd\u4f5c\u90fd\u662f idempotent\u3002
\u82e5\u70ba destructive\uff0c\u53ef\u4f7f\u7528 ETag
\u548c If-Match
\u7684 HTTP \u8868\u982d\u4f86\u78ba\u8a8d\u662f\u5426\u91cd\u8907\u4fee\u6539\u3002
CAS
\u5c31\u5982\u540c Memcached/Redis \u7684 CAS\uff08compare and set\uff09\u3002
"},{"location":"essay/web/retry-strategy/#circuit-breaker-pattern","title":"Circuit Breaker Pattern","text":"\u591a\u4e45 retry \u4e00\u6b21\uff1f
\u5728\u4e0a\u8ff0\u7684\u60c5\u6cc1\u4e0b\uff0cexponential backoff \u5c31\u662f\u696d\u754c\u7684 retry \u6a19\u6e96\uff0c\u4f8b\u5982\uff1a
\u82e5\u540c\u6642\u6709\u8a31\u591a instance \u8981 retry connection\uff0c\u53ef\u80fd\u6703\u5c0e\u81f4\u540c\u6642\u9593\u904e\u591a\u7684 request \u9032\u5165 server \u4e2d\u3002
\u5982\u4e0a\u5716\u6240\u793a\uff0c\u9019\u72c0\u6cc1\u5c31\u53eb thundering herd\uff0c\u6240\u6709\u8acb\u6c42\u56e0\u70ba\u56de\u50b3\uff0c\u90fd\u64e0\u5728\u4e00\u8d77\u767c\u9001\u3002
\u76f8\u95dc\u5be6\u969b\u6848\u4f8b
\u5728 Google \u5206\u4eab\u7684 Pok\u00e9mon GO \u4e8b\u4ef6\u4e2d\uff0c \u5c31\u662f\u9019\u500b\u72c0\u6cc1\u7684\u5beb\u7167\u3002
\u9019\u6642\u5728\u5404\u500b instance \u4e2d\u589e\u52a0 \u00b110% \u5167\u7684\u4e82\u6578\u6703\u5e73\u5747\u5206\u6563\u9019\u4e9b\u8acb\u6c42\u3002\u9019\u7a2e\u505a\u6cd5\u5c31\u53eb\u505a jitter\uff1a
function retryWaitSeconds(retryCount) {\n const time = SCHEDULE_WAIT_SECONDS[retryCount] || DEFAULT_WAIT_SECONDS;\n // return 0.9~1.1 time\n return Math.random() * (time * 0.2) + time * 0.9;\n}\n
\u6216\u662f\u589e\u52a0 offset\uff1a
const PERIOD = 60_000;\nconst OFFSET = Math.random() * PERIOD;\nsetTimeout(() => {\n // 0~60 seconds\n setInterval(() => retry(), PERIOD);\n}, OFFSET);\n
"},{"location":"essay/web/tcp/","title":"TCP","text":"Transmission Control Protocol \u50b3\u8f38\u63a7\u5236\u5354\u5b9a\u7684\u4f5c\u7528\u8aaa\u660e\u548c\u7dad\u904b\u5fc3\u5f97\u3002
"},{"location":"essay/web/tcp/#osi-\u4e2d\u626e\u6f14\u7684\u89d2\u8272","title":"OSI \u4e2d\u626e\u6f14\u7684\u89d2\u8272","text":"Network \u4e4b\u4e0a\uff0cApplication \u4e4b\u4e0b\u3002
Network \u4e2d\u7684 IP \u662f\u4e00\u7a2e\u4e0d\u8003\u616e\u9023\u7dda\u7684\u5354\u5b9a\uff0c\u4ed6\u53ea\u9700\u8981\u8ca0\u8cac\u628a\u5c01\u5305\u8def\u7531\u7d66\u6307\u5b9a\u7684\u76ee\u7684\u5730\u3002\u5728\u6b64\u4e4b\u4e0a\u7684 TCP \u5247\u6703\u900f\u904e\u985e\u4f3c\u65bc HTTP session \u7684\u6a5f\u5236\uff0c\u53cd\u5fa9\u78ba\u8a8d\u6bb5\uff08segment\uff09\u88e1\u7684\u8a0a\u865f\u548c\u7de8\u865f\u4f86\u78ba\u4fdd\u5169\u7aef\u7684\u9023\u7dda\u3002
\u63db\u53e5\u8a71\u8aaa\uff0cTCP \u662f\u88ab\u8a2d\u8a08\u6210\u96d9\u5411\uff08bidirectional\uff09\u3001\u5e8f\u5217\u6027\uff08ordered\uff09\u548c\u53ef\u9760\uff08reliable\uff09\u7684\u8cc7\u6599\u50b3\u8f38\u5354\u5b9a\u3002
\u912d\u4e2d\u52dd
TCP \u6703\u900f\u904e\u4e0a\u8ff0\u5404\u7a2e\u7de8\u865f\u548c\u6a19\u8a18\u4f86\u5b8c\u6210\u9023\u7dda\u6240\u9700\u7684\u6e9d\u901a\u3002 \u7576\u5efa\u7acb\u9023\u7dda\uff08\u4e09\u6b21\u63e1\u624b\uff09\u5f8c\uff0c\u96d9\u65b9\u5c31\u4e0d\u5b58\u5728\u76e3\u807d\u65b9\u548c\u767c\u8d77\u65b9\u3002 \u5169\u8005\u7686\u53ef\u4ee5\u505a\u76e3\u807d\u548c\u9001\u8a0a\u606f\uff0c\u540c\u6642\u96d9\u65b9\u4e5f\u90fd\u53ef\u4ee5\u8981\u6c42\u4e2d\u65b7\u9023\u7dda\uff0c \u4e26\u4e14\u96d9\u65b9\u90fd\u8981\u540c\u610f\u95dc\u9589\u9023\u7dda\uff0c\u6b64\u6642\u9023\u7dda\u624d\u80fd\u512a\u96c5\u800c\u5b8c\u6574\u7684\u95dc\u9589\u9023\u7dda\uff08\u56db\u6b21\u63ee\u624b\uff09\u3002 \u5176\u5b8c\u6574\u751f\u547d\u7684\u7a0b\u5982\u4e0b\uff1a
\u5efa\u7acb\u9023\u7dda\uff1a
\u95dc\u9589\u9023\u7dda\uff1a
TIME_WAIT
)\u3002\u5404\u500b\u6a19\u8a18\uff08flag\uff09\u4ee3\u8868\u7684\u610f\u7fa9\u5728\u4e0b\u6bb5\u5c55\u793a\u3002
"},{"location":"essay/web/tcp/#tcp-\u4fe1\u865f","title":"TCP \u4fe1\u865f","text":"\u4e0d\u540c\u7684 TCP \u4fe1\u865f\u4ee3\u8868\u9019\u500b TCP \u6bb5\uff08segment\uff09\u7684\u610f\u7fa9\u662f\u4ec0\u9ebc\uff0c \u4ee5\u4e0b\u4f9d\u7167\u8a72\u4fe1\u865f\u5728\u5c01\u5305\u7684\u4f4d\u7f6e\u9806\u5e8f\u4f86\u6392\u5217\uff1a
0.0.0.0:port
\uff1b\u912d\u4e2d\u52dd
\u5f7c\u6b64\u6703\u5728\u4e09\u6b21\u63e1\u624b\u4e2d\u78ba\u8a8d\u63a5\u4e0b\u4f86\u7684 SEQ
\u865f\u78bc\uff0c\u540c\u6642\u4e92\u76f8\u78ba\u8a8d\u95dc\u4fc2\uff1a
\u4e3b\u52d5\u95dc\u9589\uff08Active Close\uff09\u7684\u90a3\u65b9\u53ef\u4ee5\u6839\u64da\u9700\u6c42\u95dc\u9589\u9023\u7dda\uff0c \u4f46\u662f\u5c0d\u88ab\u52d5\u95dc\u9589\uff08Passive Close\uff09\u7684\u90a3\u65b9\u4f86\u8aaa\uff0c\u50b3\u9001\u7684\u8cc7\u6599\u53ef\u80fd\u9084\u6c92\u5b8c\u6210\uff0c \u9019\u6642\u5c31\u9700\u8981\u7b49\u61c9\u7528\u5c64\u8cc7\u6599\u90fd\u9001\u51fa\u53bb\u4e4b\u5f8c\uff0c\u624d\u6703\u518d\u4e00\u6b21\u505a\u95dc\u9589\u7684\u52d5\u4f5c\u3002
\u6240\u4ee5\u6d41\u7a0b\u5927\u81f4\u5982\u4e0b\uff1a
FIN
\uff0c\u4e26\u9032\u5165 FIN_WAIT1
\u72c0\u614b\uff1bACK
\uff1bFIN
\uff1bFIN_WAIT1
\u6642\uff0c\u5982\u679c\u6536\u5230 FIN
\u5c31\u9032\u5165 Closing
\u72c0\u614b\u6e96\u5099\u76f4\u63a5\u9032\u5165 TIME_WAIT
\uff1bFIN_WAIT1
\u6642\uff0c\u5982\u679c\u6536\u5230 ACK
\u5c31\u9032\u5165 FIN_WAIT2
\u72c0\u614b\uff0c\u7b49\u5f85\u6536\u5230 FIN
\u5c31\u76f4\u63a5\u9032\u5165 TIME_WAIT
\uff1bFIN_WAIT1
\u6642\uff0c\u5982\u679c\u6536\u5230 FIN+ACK
\u5c31\u9032\u5165 TIME_WAIT
\uff1bTIME_WAIT
\u72c0\u614b\uff0c\u7b49\u5230\u8d85\u904e\u5169\u6b21 MSL\uff08Maximum Segment Lifetime\uff09\u7684\u6642\u9593\u5f8c\uff0c\u95dc\u9589\u9023\u7dda\u3002\u9019\u6642\u4f60\u5c31\u6703\u6ce8\u610f\u5230\u4e00\u4ef6\u4e8b\uff0c\u8eab\u70ba\u4e3b\u52d5\u95dc\u9589\u7684\u90a3\u65b9\uff0c\u662f\u9700\u8981\u4ed8\u51fa\u4ee3\u50f9\u7684\u3002 \u4ed6\u9700\u8981\u9032\u5165\u7b49\u5f85\u5c0d\u65b9\u95dc\u9589\u7684\u72c0\u614b\uff08FIN WAIT 1
\u6216 FIN WAIT 2
\uff09\uff0c\u7136\u5f8c\u9084\u8981\u518d\u5f85\u5728 TIME_WAIT
\u4f86\u907f\u514d\u961c\u7684\u8907\u7528\u3002 \u76f8\u8f03\u800c\u8a00\uff0c\u88ab\u52d5\u90a3\u65b9\u5c31\u53ea\u8981\u78ba\u8a8d\u95dc\u9589\u5f8c\uff0c\u5c31\u53ef\u4ee5\u701f\u7051\u8aaa\u518d\u898b\u4e86\u3002
\u4e4b\u6240\u4ee5\u8981\u9032\u5165 TIME_WAIT
\u9019\u500b\u72c0\u614b\u662f\u56e0\u70ba\u5982\u679c\u76f4\u63a5\u4f7f\u7528\u9019\u500b\u4f86\u6e90\u57e0\uff0c \u4e0b\u6b21\u7684\u9023\u7dda\u5f88\u53ef\u80fd\u6703\u6536\u5230\u4e0a\u6b21\u9023\u7dda\u7684\u91cd\u9001\uff08Retransmission\uff09\u8cc7\u8a0a\u3002
TCP \u9078\u9805\uff08TCP Option\uff09\u5927\u90e8\u5206\u90fd\u662f\u5728\u63e1\u624b\u968e\u6bb5\u78ba\u8a8d\u7684\uff0c \u8a73\u898b\uff0c\u9019\u88e1\u5217\u8209\u5e7e\u500b\uff1a
Kernel options \u53ef\u4ee5\u53c3\u8003 sysctl-explorer\uff0c \u66f4\u591a\u8aaa\u660e\u5c07\u5728\u6307\u6a19\u4e2d\u5c55\u793a\u3002
"},{"location":"essay/web/tcp/#\u7bc4\u4f8b","title":"\u7bc4\u4f8b","text":"\u4ee5\u9023\u7dda\u5230 google.com \u4e2d\u7522\u751f\u7684\u591a\u500b\u5c01\u5305\u505a\u8aaa\u660e\u3002
\u5982\u679c\u662f HTTP/3 \u5c31\u4e0d\u662f TCP \u4e86\uff0c\u5230\u6642\u8981\u770b\u770b\u7528\u4ec0\u9ebc\u7db2\u7ad9\u6bd4\u8f03\u597d\u3002
tcpdump -i <interface> port <port> -w - -U | tee /tmp/evan.pcap | tcpdump -r -\n
"},{"location":"essay/web/tcp/#\u5efa\u7acb\u9023\u7dda\u968e\u6bb5","title":"\u5efa\u7acb\u9023\u7dda\u968e\u6bb5","text":"MSS(Maximum TCP Segment Size) v.s. MTU(Maximum Transmission Unit):
MTU = MSS + 40 (IP header + TCP header)\n
"},{"location":"essay/web/tcp/#sequence-number","title":"SEQuence number","text":"TBD
"},{"location":"essay/web/tcp/#acknowledge-number","title":"ACKnowledge number","text":"TBD
"},{"location":"essay/web/tcp/#options","title":"Options","text":"TBD
"},{"location":"essay/web/tcp/#\u6307\u6a19","title":"\u6307\u6a19","text":"\u6307\u6a19\u540d\u7a31\u90fd\u6709\u524d\u7db4\uff1anode_netstat_TcpExt_
\u3002
\u4f86\u6e90
\u672c\u5217\u8868\u793a\u4f7f\u7528 Node Exporter \u63d0\u4f9b\u7684\u6307\u6a19\u3002
\u4f60\u53ef\u4ee5\u900f\u904e\u4ee5\u4e0b\u6307\u4ee4\u4f86\u53d6\u5f97\u5404\u500b\u6307\u6a19\u7684\u4e0a\u5347\u5e45\u5ea6\uff1a
increase(label_replace({__name__=~\"node_netstat_Tcp.*\"}, \"na\", \"$1\", \"__name__\", \"node_netstat_Tcp(.+)\")[5m:1m])\n
\u540d\u7a31 \u539f\u7406 \u8aaa\u660e ArpFilter Basic \u63a5\u6536\u5230 ARP \u5c01\u5305\u6642\uff0c\u62ff\u5230\u672a\u77e5\u7684 entry \u6642 EmbryonicRsts Basic SYN_RECV
\u6642\u6536\u5230\u4e0d\u5408\u7406\u7684\u5c01\u5305\uff0c\u4e26\u56de\u50b3 RST
ListenDrops Basic LISTEN
\u56e0\u4efb\u4f55\u539f\u56e0\u5efa\u7acb\u9023\u7dda\u5931\u6557\uff0c\u5927\u65bc\u7b49\u65bc ListenOverflows TCPTimeouts Basic \u7b2c\u4e00\u6b21\u767c\u751f RTO \u6216 SYN-ACK \u8d85\u6642 TW Basic TIME_WAIT
\u6578\u91cf TCPTimeWaitOverflow Basic TIME_WAIT
\u6578\u91cf\u592a\u591a\u4e86 TWKilled Basic TIME_WAIT
\u5728\u672a\u9054\u6642\u9650\u6642\uff0c\u5f37\u5236\u56de\u6536\u7684\u6578\u91cf TWRecycled Basic TIME_WAIT
\u88ab\u56de\u6536\u7684\u6578\u91cf TCPAbortFailed Basic \u7a0b\u5f0f\u767c\u751f\u932f\u8aa4\u6642\uff0c\u5f37\u5236\u95dc\u9589\u9023\u7dda TCPAbortOnClose Basic \u5728\u9032\u5165 FIN_WAIT_1
\u6216 FIN_WAIT_2
\u6642\uff0c\u5f37\u5236\u95dc\u9589\u9023\u7dda TCPAbortOnData Basic \u5728\u9023\u7dda\u9084\u6709\u8cc7\u6599\u6642\uff0c\u5f37\u5236\u95dc\u9589\u9023\u7dda TCPAbortOnMemory Basic \u8cc7\u6e90\u8d85\u904e\u9650\u5236\u6642\uff0c\u5f37\u5236\u95dc\u9589\u9023\u7dda TCPAbortOnTimeout Basic RTO/probe/keepalive timer \u9054\u5230\u6700\u9ad8\u4e0a\u9650\u6642\uff0c\u5f37\u5236\u95dc\u9589\u9023\u7dda TCPSynRetrans Basic \u91cd\u65b0\u5617\u8a66\u9001\u51fa SYN
TCPRetransFail Basic \u91cd\u65b0\u5617\u8a66\u9001\u51fa SYN
\u537b\u4ecd\u5931\u6557\uff1f TCPKeepAlive Basic Keep-Alive \u6b21\u6578 TCPFastRetrans Fast Retransmission \u6536\u5230\u65b0\u7684 ACK
\uff0c\u820a\u7684\u9084\u6c92\u6536\u5230\u5c31\u76f4\u63a5 retrans TCPSlowStartRetrans Delayed ACK Delayed ACK \u958b\u59cb\u555f\u7528 DelayedACKLocked Delayed ACK Timer \u88ab\u672c\u6a5f lock \u4f4f\u800c\u7121\u6cd5\u6b63\u78ba\u767c\u9001 ACK
DelayedACKLost Delayed ACK \u9001\u51fa\u7684 ACK
\u88ab\u8a8d\u70ba\u4e0d\u5408\u6cd5 DelayedACKs Delayed ACK \u9001\u51fa Delayed ACK \u6b21\u6578 ListenOverflows Backlog LISTEN
\u6210\u529f\u5b8c\u6210\u63e1\u624b\u5f8c\uff0c\u6e96\u5099\u79fb\u4ea4\u9023\u7dda\u6642\u767c\u73fe queue \u6eff\u4e86 TCPBacklogCoalesce Backlog TCPBacklogDrop Backlog \u9032\u5165\u4f47\u5217\u6642\u5931\u6557 PAWSActive PAWS SYN_SENT
\u5f8c\u7684 ACK
\u6aa2\u67e5 PAWS \u5931\u6557 PAWSPassive PAWS SYN_RECV
\u5f8c\u7684 ACK
\u6aa2\u67e5 PAWS \u5931\u6557 PAWSEstab PAWS \u9023\u7dda\u5efa\u7acb\u5f8c PAWS \u6aa2\u67e5\u5931\u6557 TCPTSReorder PAWS Timestamp \u4e82\u5e8f\u4e86 TCPDSACKIgnoredNoUndo Selective ACK \u6536\u5230\u975e\u6cd5 D-SACK \u6642\uff0c\u8a71\u53e5\u8a71\u8aaa\uff0cSACK \u4e2d\u7684\u5e8f\u865f\u592a\u820a TCPDSACKIgnoredOld Selective ACK \u6536\u5230\u975e\u6cd5 D-SACK \u6642\uff0c\u8a71\u53e5\u8a71\u8aaa\uff0cSACK \u4e2d\u7684\u5e8f\u865f\u592a\u820a TCPDSACKOfoRecv Selective ACK \u672c\u6a5f\u767c\u9001\u7684\u820a\u5c01\u5305\u9084\u6c92\u9001\u5230\uff0c\u65b0\u7684\u5c01\u5305\u5df2\u7d93\u9001\u53bb\u4e86 TCPDSACKOfoSent Selective ACK \u672c\u6a5f\u820a\u7684\u5c01\u5305\u9084\u6c92\u6536\u5230\uff0c\u65b0\u7684\u5c01\u5305\u5df2\u7d93\u4f86\u4e86 TCPDSACKOldSent Selective ACK \u5c0d\u65b9\u50b3\u672c\u6a5f\u5df2\u7d93\u770b\u904e\u7684\u5c01\u5305\uff0c\u63db\u53e5\u8a71\u8aaa\uff0c\u5c0d\u65b9\u6536\u4e0d\u5230\u672c\u6a5f\u7684 ACK
TCPDSACKRecv Selective ACK \u5c0d\u65b9\u6536\u5230\u672c\u6a5f\u7684\u5c01\u5305\u91cd\u50b3\uff0c\u63db\u53e5\u8a71\u8aaa\uff0c\u672c\u6a5f\u6536\u4e0d\u5230\u5c0d\u65b9\u7684 ACK
TCPDSACKUndo Selective ACK TCPLostRetransmit Selective ACK \u9001\u904e\u53bb\u7684\u5c01\u5305\u6c92\u6709\u5f97\u5230\u76f8\u61c9\u7684 SACK TCPSACKDiscard Selective ACK \u6536\u5230\u975e\u6cd5 SACK \u6642\uff0c\u8a71\u53e5\u8a71\u8aaa\uff0cSACK \u4e2d\u7684\u5e8f\u865f\u592a\u820a TCPSACKReneging Selective ACK \u672c\u6a5f\u5df2\u7d93\u4e1f\u6389\u4e86\u4e4b\u524d\u63a5\u6536\u7684\u6578\u64da\uff0c\u672c\u6a5f\u98df\u8a00\u4e86 TCPSACKReorder Selective ACK \u672c\u6a5f\u6536\u4e0d\u5230\u5c0d\u65b9\u5c01\u5305\uff0c\u958b\u59cb\u7b49\u5f85\u820a\u8cc7\u6599 TCPSackRecovery Selective ACK \u672c\u6a5f\u9001\u4e0d\u51fa\u53bb\u5c01\u5305\uff0c\u958b\u59cb\u6574\u7406\u5c01\u5305\u9806\u5e8f TCPSackFailures Selective ACK RTO \u767c\u751f\uff0c\u4e0d\u518d\u91cd\u50b3\u5c0d\u65b9\u6c92\u63a5\u6536\u5230\u7684\u5c01\u5305 TCPSackRecoveryFail Selective ACK RTO \u767c\u751f\uff0c\u4e0d\u518d\u91cd\u6574\u63a5\u6536\u7684\u5c01\u5305\u9806\u5e8f TCPSackShifted Selective ACK Linux \u6210\u529f\u6574\u7406\u9806\u5e8f TCPSackShiftFallback Selective ACK Linux \u6574\u7406\u9806\u5e8f\u5931\u6557 TCPSackMerged Selective ACK \u5f97\u5230\u4e82\u5e8f\u8cc7\u6599\u5f8c\uff0c\u9032\u884c\u6574\u4f75\u6210\u529f TCPRenoFailures \u5728\u4e0d\u555f\u7528 SACK \u7684\u72c0\u614b TCPRenoRecovery \u5728\u4e0d\u555f\u7528 SACK \u7684\u72c0\u614b TCPRenoRecoveryFail \u5728\u4e0d\u555f\u7528 SACK \u7684\u72c0\u614b TCPRenoReorder \u5728\u4e0d\u555f\u7528 SACK \u7684\u72c0\u614b TCPDeferAcceptDrop Defer Accept Defer accept \u7684\u9023\u7dda\u88ab\u4e1f\u68c4 TCPFastOpenActive Fast Open \u767c\u9001\u65b9\u6210\u529f\u5efa\u7acb TCPFastOpenActiveFail Fast Open \u767c\u9001\u65b9\u5efa\u7acb\u5931\u6557 TCPFastOpenBlackhole Fast Open \u907f\u514d firewall \u963b\u64cb\u5c0e\u81f4\u5931\u80fd\u7684\u6a5f\u5236\u88ab\u89f8\u767c TCPFastOpenCookieReqd Fast Open Server \u56de\u61c9 Cookie Required TCPFastOpenListenOverflow Fast Open \u63a5\u6536\u65b9\u9023\u7dda\u4f47\u5217\u6eff\u6ea2 TCPFastOpenPassive Fast Open \u63a5\u6536\u65b9\u7372\u5f97\u65b0\u9023\u7dda TCPFastOpenPassiveAltKey Fast Open \u63a5\u6536\u65b9\u7372\u5f97\u65b0\u9023\u7dda\u4e14 cookie \u6709\u6548 TCPFastOpenPassiveFail Fast Open \u63a5\u6536\u65b9\u5617\u8a66\u5efa\u7acb\u9023\u7dda\u5931\u6557 TCPFromZeroWindowAdv Zero Window TCPToZeroWindowAdv Zero Window TCPWantZeroWindowAdv Zero Window TCPZeroWindowDrop Zero Window SyncookiesFailed SYN Cookies \u9a57\u8b49\u5931\u6557 SyncookiesRecv SYN Cookies \u6536\u5230\u6709 cookie \u7684 SYN SyncookiesSent SYN Cookies \u9001\u51fa\u6709 cookie \u7684 SYN TCPAutoCorking CORK \u6eff\u4e86\u6216\u6642\u9593\u5230\u4e86\uff0c\u76f4\u63a5\u9001\u51fa TCPRcvCoalesce Coalescing \u6536\u5230\u6574\u4f75\u7684\u5c01\u5305 TCPAbortOnLinger Linger \u9032\u5165 FIN_WAIT_2
\u6642\uff0c\u5f37\u5236\u95dc\u9589\u9023\u7dda TCPChallengeACK TCPSYNChallenge TCPACKSkippedChallenge TCPOFODrop TCPOFOMerge TCPOFOQueue TCPMTUPFail TCPMTUPSuccess PruneCalled OfoPruned RcvPruned BusyPollRxPackets IPReversePathFilter LockDroppedIcmps ICMP ICMP \u5c01\u5305\u672c\u61c9\u88ab\u4e1f\u68c4\uff0c\u4f46\u56e0\u70ba\u662f\u672c\u6a5f\u7684\u8acb\u6c42\uff0c\u6240\u4ee5\u88ab handle \u4e86 OutOfWindowIcmps ICMP \u5728\u5df2\u6709\u7684\u9023\u7dda\u4e2d\u5075\u6e2c\u51fa\u932f\u8aa4\u72c0\u614b PFMemallocDrop TCPACKSkippedFinWait2 TCPACKSkippedPAWS TCPACKSkippedSeq TCPACKSkippedSynRecv TCPACKSkippedTimeWait TCPAckCompressed TCPPureAcks TCPFullUndo TCPPartialUndo TCPLossUndo TCPDelivered TCPDeliveredCE TCPHPAcks TCPHPHits TCPHystartDelayCwnd TCPHystartDelayDetect TCPHystartTrainCwnd TCPHystartTrainDetect TCPLossFailures TCPLossProbeRecovery TCPLossProbes TCPMemoryPressures TCPMemoryPressuresChrono TCPMinTTLDrop Basic \u5c01\u5305\u7684 TTL \u904e\u5c0f\uff0c\u63db\u53e5\u8a71\u8aaa\uff0c\u50b3\u4e86\u592a\u4e45\u6216\u592a\u9060 TCPOrigDataSent TCPRcvCollapsed TCPRcvQDrop TCPReqQFullDoCookies TCPReqQFullDrop TCPSpuriousRTOs TCPSpuriousRtxHostQueues TCPWinProbe TCPWqueueTooBig TCPMD5Failure TCPMD5NotFound TCPMD5Unexpected \u76f8\u95dc\u8aaa\u660e\u53ef\u4ee5\u53c3\u8003\uff1a
\u9023\u7dda\u5efa\u7acb\u5f8c\u6703\u88ab\u5132\u5b58\u5728\u4e00\u500b\u4f47\u5217\u4e2d\uff0c\u9019\u500b\u4f47\u5217\u7a31\u70ba backlog\u3002 Linux \u7684\u5be6\u4f5c\u662f\u628a \u4e09\u6b21\u63e1\u624b\u968e\u6bb5 \u548c \u9023\u7dda\u5efa\u7acb\u5b8c\u6210 \u5206\u5225\u653e\u5728\u4e0d\u540c\u7684\u4f47\u5217\u3002
\u8a73\u898b Linux man page listen\uff0c \u4ee5\u53ca How TCP backlog works in Linux\u3002
"},{"location":"essay/web/tcp/#linger","title":"Linger","text":"Linux \u900f\u904e SO_LINGER
\u4f86\u555f\u7528\uff0c\u900f\u904e RST
\u4f86\u95dc\u9589\u9023\u7dda\u3002 \u9019\u6642\u53ef\u80fd\u6703\u9047\u5230\u7de9\u885d\u5340\u9084\u6709\u8cc7\u6599\u6642\uff0c\u88ab\u8feb\u4e2d\u65b7\u3002
\u6709\u5169\u7a2e\u968e\u6bb5\uff0c\u9019\u908a\u4e0d\u8d05\u8ff0\u3002
"},{"location":"essay/web/tcp/#defer-accept","title":"Defer Accept","text":"Linux \u900f\u904e TCP_DEFER_ACCEPT
\u4f86\u555f\u7528\uff0c\u53ea\u5728\u6536\u5230\u8cc7\u6599\u5f8c\u624d\u628a\u8a72\u9023\u7dda\u8a8d\u5b9a\u70ba\u6210\u529f\u3002
\u672c\u4f86\u5982\u679c\u9001\u51fa\u7684\u5c01\u5305\u5728 RTO
\u5167\u6c92\u6709\u6536\u5230 ACK\uff0c\u5247\u6703\u91cd\u65b0\u767c\u9001\uff08retransmission\uff09\uff0c \u4f46\u662f\u5982\u679c\u767c\u9001\u65b9\u6536\u5230\u5927\u65bc\u6700\u4f4e\u7684 ACK \u865f\u78bc\u6642\uff0c\u5c31\u6703\u76f4\u63a5\u56de\u50b3\u820a\u7684\u5c01\u5305\uff0c\u4e00\u7a2e\u5feb\u901f\u56de\u50b3\u7684\u6a5f\u5236\u3002
\u7576\u63a5\u53d7\u65b9\u7684\u7de9\u5b58\u6eff\u6ea2\u4e86\uff0c\u4ee3\u8868\u63a5\u53d7\u65b9\u5be6\u5728\u904e\u65bc\u5fd9\u788c\uff0c\u6d88\u5316\u4e0d\u5b8c\u5bc4\u904e\u4f86\u7684\u5c01\u5305\u3002
Full window \u5247\u4ee3\u8868\u767c\u9001\u65b9\u9700\u8981\u7b49\u5f85\u5c0d\u65b9\u7684 ACK
\u4ee5\u63a5\u8457\u767c\u9001\u66f4\u591a\u8cc7\u8a0a\uff0c\u63db\u53e5\u8a71\u8aaa\uff0c\u5c0d\u65b9\u4e00\u76f4\u6c92\u6709\u56de ACK
\u7d66\u6211\uff0c \u6211\u4e0d\u6562\u9001\u66f4\u591a\u5c01\u5305\u7d66\u4ed6\u3002
\u7528\u4f86\u6e1b\u5c11\u7db2\u8def\u8ca0\u8377\u7684\uff0c\u7b49\u5230\u6642\u6a5f\u7d14\u719f\u5f8c\u4e00\u6b21\u6027\u9001\u51fa\u591a\u500b\u5c01\u5305\uff0c\u6642\u6a5f\u5305\u62ec\uff1a
MSS=MTU \u2013 40
\uff09ACK
\u900f\u904e TCP_NODELAY=1
\u4f86\u55ae\u7368\u70ba\u7279\u5b9a socket \u95dc\u9589\u672c\u529f\u80fd\u3002
\u5982\u679c\u642d\u914d Delayed ACK \u53ef\u80fd\u6703\u9020\u6210\u6211\u5728\u7b49\u4f60\u7684 ACK
\u518d\u7e7c\u7e8c\u9001\u5c01\u5305\uff0c\u800c\u4f60\u5728\u7b49\u6211\u7684 ACK
\u624d\u6703\u7e7c\u7e8c\u9001\u5c01\u5305\u3002
\u548c Coalescing \u76f8\u4f3c\uff0c\u7b49\u5230\u7de9\u885d\u586b\u6eff\u4e86\u624d\u628a\u8cc7\u6599\u9001\u51fa\uff0c \u9019\u500b\u529f\u80fd\u9069\u7528\u65bc\u6709\u591a\u500b\u5206\u6bb5\u7684\u5340\u584a\u8981\u9001\u51fa\uff0c\u4f8b\u5982 HTTP Header \u548c HTTP Body\u3002
\u548c Coalescing \u7684\u5dee\u7570\u4e3b\u8981\u5728\u65bc\uff1a
ACK
\u900f\u904e TCP_CORK=1
\u4f86\u55ae\u7368\u70ba\u7279\u5b9a socket \u958b\u555f\u672c\u529f\u80fd\u3002
\u7528\u4f86\u6e1b\u5c11\u7db2\u8def\u8ca0\u8377\u7684\uff0c\u4e0d\u7528\u6bcf\u6b21\u6536\u5230\u5c01\u5305\u90fd\u56de ACK\uff0c\u800c\u662f\uff1a
Linux \u900f\u904e TCP_QUICKACK=1
\u4f86\u95dc\u9589\u672c\u529f\u80fd\u3002
\u5982\u679c\u642d\u914d Coalescing \u53ef\u80fd\u6703\u9020\u6210\u6211\u5728\u7b49\u4f60\u7684 ACK
\u518d\u7e7c\u7e8c\u9001\u5c01\u5305\uff0c\u800c\u4f60\u5728\u7b49\u6211\u7684 ACK
\u624d\u6703\u7e7c\u7e8c\u9001\u5c01\u5305\u3002
\u7528\u4f86\u907f\u514d\u91cd\u8907\u50b3\u9001\u7684\u6a5f\u5236\uff0c\u53ef\u4ee5\u6307\u5b9a\u7279\u5b9a\u5c01\u5305\u91cd\u50b3\uff0c\u800c\u4e0d\u7528\u4e00\u76f4\u7b49\u5f85\u6700\u820a\u7684\u90a3\u500b\u91cd\u50b3\u3002
"},{"location":"essay/web/tcp/#duplicated","title":"Duplicated","text":"\u900f\u904e SACK \u4f86\u544a\u77e5\u5c0d\u65b9\u6211\u6536\u5230\u4e86\u91cd\u8907\u7684\u5c01\u5305\uff0c\u4f8b\u5982\uff1a
\u6216\u8005\u544a\u77e5\u820a\u7684\u5c01\u5305\u9084\u6c92\u6536\u5230\uff0c\u65b0\u7684\u5c01\u5305\u5df2\u7d93\u4f86\u4e86\uff08Out-of-order, OFO\uff09\uff0c\u4f8b\u5982\uff1a
"},{"location":"essay/web/tcp/#syn-cookies","title":"SYN Cookies","text":"\u63a5\u6536\u65b9\u5728\u6536\u5230 SYN
\u6642\uff0c\u56de\u50b3\u4e00\u500b cookie\uff0c \u4e26\u7b49\u5230\u4e0b\u6b21\u6536\u5230\u76f8\u61c9 cookie \u7684 ACK
\u5f8c\u624d\u958b\u59cb\u5206\u914d\u8a18\u61b6\u9ad4\u7d66\u9019\u500b\u9023\u7dda\u3002 \u9019\u6a23\u53ef\u4ee5\u907f\u514d\u5927\u91cf SYN
\u50b3\u5165\u6642\uff0c\u6bcf\u500b\u90fd\u5206\u914d\u76f8\u61c9\u9023\u7dda\u7684\u8a18\u61b6\u9ad4\u6642\uff0c\u5c0e\u81f4\u7684\u670d\u52d9\u5fd9\u788c\u3002
\u4e00\u958b\u59cb\u5c0f\u5c01\u5305\u7684\u5ef6\u9072\uff0c\u53ef\u80fd\u6703\u9020\u6210\u5c01\u5305\u9806\u5e8f\u7684\u8aa4\u5224\uff0c\u8a73\u898b SYN cookies ate my dog\u3002
"},{"location":"essay/web/tcp/#paws","title":"PAWS","text":"PAWS(Protection Against Wrapping Sequence)\uff0c\u662f\u7528\u4f86\u907f\u514d SEQ
\u6ea2\u4f4d\u9020\u6210\u7684\u5224\u65b7\u932f\u8aa4\u3002 \u5be6\u4f5c\u4e0a\u6703\u4f7f\u7528\u6642\u9593\u6233\u8a18\u4f86\u9a57\u8b49\u4e4b\u3002
\u6bcf\u500b TCP \u5c01\u5305\u90fd\u6703\u6709\u500b SEQ
\u865f\u78bc\u4f86\u4ee3\u8868\u4e4b\uff0c\u5982\u679c\u6536\u5230\u820a\u7684 SEQ
\u865f\u78bc\u5c31\u4ee3\u8868\u9019\u662f\u4e4b\u524d\u91cd\u50b3\u7684\u5c01\u5305\uff0c\u9700\u8981\u6368\u68c4\u4e4b\uff0c\u5982\u4e0b\u5716\u6240\u793a\u3002
---\ntitle: TCP Sequence Number\n---\nsequenceDiagram\n Client-->Server: Initialize SEQ as 100\n Client->>+Server: Length 33, SEQ-100\n Client-->>Network: Length 33, SEQ-100\n Server->>-Client: ACK-133\n Client->>+Server: Length 44, SEQ 133\n Server->>-Client: ACK-177\n Network->>Server: Length 33, SEQ-100\n Note right of Server: \u26a0\ufe0fDrop!\n
Tip
\u521d\u59cb\u5316\u7684 SEQ
\u662f\u96a8\u6a5f\u7522\u751f\u7684\uff0c\u907f\u514d\u88ab\u731c\u5230\uff0c\u505a\u51fa\u507d\u9020\u5c01\u5305\u7684\u653b\u64ca\u3002
SEQ \u662f\u4e00\u500b \\(2^32\\) \u7684\u503c\uff0c\u6700\u5927\u7684\u503c\u7d04\u70ba 43 \u5104\uff0c\u63db\u53e5\u8a71\u8aaa\u4e00\u689d\u9023\u7dda\u5982\u679c\u50b3\u9001\u4e86 4GB \u7684\u8cc7\u6599\uff0c\u5c31\u6703\u9047\u5230\u6ea2\u4f4d\uff0c\u7136\u5f8c\u5c31\u6703\u4e1f\u68c4\u8a72\u5c01\u5305\u3002 \u4e0d\u7ba1\u9019\u500b\u9023\u7dda\u662f\u9577\u9023\u7dda\u9084\u662f\u77ed\u6642\u9593\u5927\u91cf\u8cc7\u6599\u50b3\u905e\u3002
---\ntitle: TCP Sequence Number Overflow\n---\nsequenceDiagram\n Client-->Server: Initialize SEQ as 1G\n Client->>+Server: Length 1G, SEQ-1G\n Client->>+Server: Length 1G, SEQ-2G\n Client->>+Server: Length 1G, SEQ-3G\n Client->>+Server: Length 1G, SEQ-4G\n Client->>+Server: Length 1G, SEQ-1G(Overflow)\n Note right of Server: \u26a0\ufe0fDrop!\n
\u65bc\u662f\u5c31\u958b\u59cb\u4f7f\u7528\u6642\u9593\u6233\u8a18\uff08Timestamp, TS\uff09\u5728\u6bcf\u500b\u5c01\u5305\u4e0a\uff0c\u9019\u6a23\u5373\u6642\u50b3\u5927\u91cf\u7684\u8cc7\u6599\uff0c\u4ecd\u4e0d\u6703\u56e0\u70ba\u6ea2\u4f4d\u800c\u62d2\u7d55\u5c01\u5305\u3002
---\ntitle: TCP Sequence Number Overflow\n---\nsequenceDiagram\n Client-->Server: Initialize SEQ as 1G\n Client->>+Server: Length 1G, SEQ-1G, TS-1\n Client->>+Server: Length 1G, SEQ-2G, TS-2\n Client->>+Server: Length 1G, SEQ-3G, TS-3\n Client->>+Server: Length 1G, SEQ-4G, TS-4\n Client->>+Server: Length 1G, SEQ-1G(Overflow), TS-5\n Note right of Server: OK, TS-5 > TS-4\n
\u8981\u6ce8\u610f\u7684\u662f\u6642\u9593\u6233\u8a18\u7684\u521d\u59cb\u503c\u4e5f\u662f\u96a8\u6a5f\u7522\u751f\u7684\u3002
"},{"location":"essay/web/tcp/#\u554f\u984c_3","title":"\u554f\u984c","text":"Client-A \u7684\u8acb\u6c42\u901a\u904e SNAT \u88ab\u8f49\u767c\u5230 Server\uff0c\u4e26\u4ee5\u6642\u9593\u6233\u8a18 TS-A \u8a2a\u554f\u4e26\u7d50\u675f\u9023\u7dda\u3002 Client-B \u7684\u8acb\u6c42\u5728\u9001\u51fa\u8acb\u6c42\u6642\u5982\u679c\u4e5f\u56e0\u70ba SNAT \u88ab\u4f7f\u7528\u5230\u76f8\u540c\u7684 Port\uff0c\u6b64\u6642 Client-B \u53ef\u80fd\u6703\u56e0\u70ba\u6642\u9593\u6233\u8a18\u4e0d\u540c\u800c\u88ab\u62d2\u7d55\u3002
"},{"location":"essay/web/tcp/#forward-rto","title":"Forward RTO","text":"\u900f\u904e\u5728\u4e00\u6bb5\u6642\u9593\u5167\u7b49\u5f85\u7576\u4e0b\u5169\u500b ACK
\u5c01\u5305\uff0c\u4e26\u767c\u73fe\u5927\u65bc\u91cd\u50b3\u7684\u5c01\u5305\uff0c\u9019\u4ee3\u8868\u9019\u662f\u865b\u5047\u91cd\u50b3\u3002 \u5f9e\u800c\u9054\u5230\u907f\u514d\u55ae\u7d14\u7db2\u8def\u5ef6\u9072\u5c0e\u81f4\u7684\u932f\u8aa4\u91cd\u9001\u3002
\u63a5\u6536\u65b9\u548c\u767c\u9001\u65b9\u540c\u6642\u7d00\u9304 cookie\uff0c\u4e26\u5728\u4e0b\u6b21\u9023\u7dda\u6642\u5ffd\u7565\u63e1\u624b\u968e\u6bb5\u3002
"},{"location":"essay/web/tcp/#congestion-control","title":"Congestion Control","text":"\u907f\u514d\u5c01\u5305\u58c5\u585e\uff0cTCP \u63d0\u4f9b\u5e7e\u7a2e\u6f14\u7b97\u6cd5\uff1a
\u63d0\u4f9b\u7684\u6307\u6a19\uff1aTBD
"},{"location":"essay/web/tcp/#\u7279\u6b8a","title":"\u7279\u6b8a","text":"\u4e00\u4e9b\u5728\u6307\u6a19\u4e0a\u770b\u4e0d\u5230\u7684\u529f\u80fd\u3002
"},{"location":"essay/web/tcp/#ecn","title":"ECN","text":"\u4f7f\u7528\u986f\u5f0f\u64c1\u585e\u901a\u77e5\uff08Explicit Congestion Notification, ECN\uff09\u53ef\u4ee5\u6e2c\u91cf\u64c1\u585e\u7684\u7a0b\u5ea6\u3002
"},{"location":"essay/web/tcp/#\u6709\u7528\u6307\u4ee4","title":"\u6709\u7528\u6307\u4ee4","text":"\u67e5\u770b\u70ba\u4ec0\u9ebc kernel reject \u5c01\u5305\uff08\u6bb5\uff09\uff1a
$ netstat -s | grep reject\n416177 passive connections rejected because of time stamp\n 13 packets rejects in established connections because of timestamp\n
\u67e5\u770b\u5c01\u5305 kernel \u8a2d\u5b9a\uff1a
$ sysctl -ae | grep 'net\\.ipv4\\.tcp_'\nnet.ipv4.tcp_abort_on_overflow = 0\n...\n
"},{"location":"essay/web/tcp/#bsd-socket-api","title":"BSD Socket API","text":"TCP \u5728 Berkeley Socket \u4e4b\u4e0a\u7684\u6d41\u7a0b\u3002
Socket \u70ba\u5305\u88dd\u5e95\u5c64\u904b\u4f5c\u7684 API\uff0c\u5305\u62ec Data Link Layer \u548c Network Layer\u3002
\u540d\u7a31 \u529f\u80fd Socket \u5efa\u7acb Socket \u4f86\u76e3\u807d\uff08listen\uff09\u9023\u7dda Bind \u7d81\u5b9a address \u548c port\uff0c\u53ef\u8a2d\u5b9a IP \u906e\u7f69 Listen \u76e3\u807d TCP \u9023\u7dda\u548c\u9650\u5236\u9023\u7dda\u6578\uff0cUDP \u4e0d\u9700\u8981\u547c\u53eb\u672c\u51fd\u5f0f Accept \u8ff4\u5708\u53bb\u63a5\u53d7\u9023\u7dda\uff0c\u4e26\u9032\u884c\u5f8c\u7e8c\u7684\u4ea4\u63e1\u884c\u70ba\u5404\u6d41\u7a0b\u7c21\u4ecb
\u5be6\u4f5c\u7bc4\u4f8b\u7d81\u5b9a port \u548c\u4f4d\u7f6e\uff08IPv4\uff09\u5f8c\u5efa\u7acb\u9023\u7dda\uff1a
bzero((char *)&server, sizeof(struct sockaddr_in));\nserver.sin_family = AF_INET;\nserver.sin_port = htons(port);\nserver.sin_addr.s_addr = htonl(INADDR_ANY);\nif (bind(sd, (struct sockaddr *)&server, sizeof(server)) == -1) {\n fprintf(stderr, \"Can't bind name to socket\\n\");\n exit(1);\n}\n
listen(sd, 5); // (1)\n\nwhile (1) {\n client_len = sizeof(client);\n new_sd = accept(sd, (struct sockaddr *)&client, &client_len); // (2)\n if (new_sd == -1) {\n fprintf(stderr, \"Can't accept client\\n\");\n exit(1);\n }\n // ...\n}\n
new_sd
\u53bb\u8b80\u5beb\u8cc7\u6599\uff0csd
\u5247\u7e7c\u7e8c\u76e3\u807d\u9023\u7dda\u8acb\u6c42\u3002\u907a\u5931\uff1a\u5f88\u53ef\u80fd\u5be6\u969b\u6709\u9001\u5230\u6307\u5b9a\u4f4d\u7f6e\uff0c\u4f46\u662f\u56e0\u70ba\u50b3\u8f38\u904e\u7a0b\u8a0a\u865f\u88ab\u5e72\u64fe\u4e86\uff0c\u5c0e\u81f4\u6aa2\u9a57\u548c\u7684\u6aa2\u67e5\u5931\u6557\u3002
\u91cd\u8907\u5bc4\u9001\uff1a\u5efa\u7acb\u5728\u907a\u5931\u4e4b\u4e0a\u7684\u554f\u984c\uff0c\u7576\u76ee\u7684\u5730\u6536\u5230\u4e26\u56de\u50b3 ACK
\u6642\uff0c\u767c\u9001\u65b9\u5f88\u53ef\u80fd\u6c92\u6536\u5230\u9019\u500b\u8a0a\u865f\uff0c\u5c31\u8aa4\u4ee5\u70ba\u6c92\u9001\u6210\u529f\uff0c\u5c31\u518d\u9001\u4e00\u6b21\u3002
\u5931\u5e8f\uff1a\u539f\u672c\u662f\u7167 1,2,3,... \u7684\u9806\u5e8f\u9001\u51fa\u53bb\uff0c\u6536\u5230\u537b\u5f88\u53ef\u80fd\u662f 3,1,4,...\uff0c\u9019\u53ef\u80fd\u662f\u56e0\u7232\u58c5\u585e\u6216\u7db2\u8def\u5ef6\u9072\u9020\u6210\u7684\uff0c\u751a\u81f3\u53ef\u80fd\u6bcf\u500b\u5c01\u5305\u8def\u7531\u8def\u5f91\u4e0d\u540c\uff08IP \u7684\u5354\u5b9a\u6703\u6c7a\u5b9a\u9019\u4e00\u7cfb\u5217\u7684\u5c01\u5305\u600e\u9ebc\u9001\uff09
\u7576 TCP \u9023\u7dda\u88ab\u958b\u6eff\u4e86\uff0c\u6703\u767c\u751f\u4ec0\u9ebc\u4e8b\uff1f\u9700\u8981\u5148\u5b9a\u7fa9\u88ab\u958b\u6eff\u4e86\u662f\u4ec0\u9ebc\u610f\u601d\uff0c\u662f\u90e8\u5206\u9032\u5165 TIME_WAIT
\u72c0\u614b\u55ce\uff0c\u9084\u662f\u6240\u6709\u90fd\u662f Active \u7684\u72c0\u614b\uff1f
\u5982\u679c\u662f TIME_WAIT
\u7684\u72c0\u6cc1\u53ef\u4ee5\u8003\u616e\u95dc\u9589 TIME_WAIT
\u7684\u9023\u7dda\u3002
\u82e5\u90fd\u662f Active \u7684\u72c0\u614b\uff0c\u4e14\u8cc7\u6e90\u7684\u5141\u8a31\u4e0b\u5247\u53ef\u4ee5\u8003\u616e\u7528 Virtual IP \u5efa\u7acb\u66f4\u591a\u9023\u7dda\uff0c\u56e0\u70ba TCP \u7684\u6bcf\u500b\u9023\u7dda\u90fd\u662f\u4ee5 IP \u548c Port \u70ba\u4e00\u500b\u7d44\u5408\u3002\u8a73\u898b The Road to 2 Million Websocket Connections in Phoenix\u3002
\u5982\u4f55\u95dc\u9589 TIME_WAIT \u72c0\u614b\u7684\u9023\u7dda\uff1f\u4f60\u53ef\u4ee5\u8ce6\u4e88\u8a72\u9023\u7dda\u4e00\u500b\u9078\u9805\uff1aSO_REUSEADDR
\uff0c\u5728 Linux \u4e2d\uff0c\u4f60\u4e5f\u53ef\u4ee5\u8abf\u6574 TCP_TW_REUSE
\u6216 TCP_TW_RECYCLE
\uff1a
This socket option tells the kernel that even if this port is busy (in the TIME_WAIT state), go ahead and reuse it anyway. If it is busy, but with another state, you will still get an address already in use error. It is useful if your server has been shut down, and then restarted right away while sockets are still active on its port. You should be aware that if any unexpected data comes in, it may confuse your server, but while this is possible, it is not likely.
\u6216\u8005\u8abf\u6574 Maximum Segment Lifetime(MSL)\uff1a
# \u770b\u4e00\u4e0b\u73fe\u5728\u72c0\u614b\n$ sysctl net.ipv4.tcp_fin_timeout\n# VI \u6539\n$ vi /proc/sys/net/ipv4/tcp_fin_timeout\n# Hot reload\n$ sysctl -p /etc/sysctl.conf\n
\u4ec0\u9ebc\u662f TCP Timeout\uff1f \u5c31\u662f\u61c9\u7528\u5c64\u7684\u67d0\u4e9b HTTP Client \u5957\u4ef6\u6703\u5beb\u7684 Connection Timeout\uff0c\u901a\u5e38\u7cfb\u7d71\u5c64\u7684\u9810\u8a2d\u70ba\u5341\u5206\u9418\u3002
\u73fe\u5728\u6709\u4e00\u500b\u72c0\u6cc1\uff1a
\u7576\u7136\u4e0d\u80fd\u4e00\u6982\u800c\u8ad6\uff0c\u4e0d\u904e\u6709\u9047\u904e\u9019\u500b\u7d93\u9a57\u3002\u90a3\u6b21\u7684\u539f\u56e0\u662f\u56e0\u70ba\u4e0b\u6e38\u7684\u670d\u52d9\u7cfb\u7d71\u5c64\u9023\u7dda\u6578\u88ab\u5403\u6eff\u4e86\uff0c\u4f46\u662f\u8cc7\u6e90\u4f7f\u7528\u7387\u4ecd\u5728\u6b63\u5e38\u7684\u6c34\u5e73\u3002
\u56e0\u70ba\u7cfb\u7d71\u5c64\u9023\u7dda\u88ab\u5403\u6eff\u4e86\uff0c\u6240\u4ee5\u958b\u59cb\u9020\u6210\u670d\u52d9\u9700\u8981\u82b1\u5f88\u591a\u6642\u9593\u624d\u80fd\u5efa\u7acb\u9023\u7dda\uff08\u7b49\u5f85\u5176\u4ed6\u9023\u7dda\u88ab\u95dc\u9589\uff09\uff0c\u540c\u6642\u4e0b\u6e38\u670d\u52d9\u6703\u56e0\u70ba TCP \u5929\u751f\u7684\u6a5f\u5236\u958b\u59cb\u53cd\u58d3\uff08back-pressure\uff09\uff0c\u5728\u4e0a\u6e38\u4ecd\u6703\u6709\u4e00\u5b9a\u7684\u7db2\u8def\u983b\u5bec\u8017\u7528\u7387\u3002
\u9019\u6642\u7684\u89e3\u6c7a\u8fa6\u6cd5\u9664\u4e86\u524d\u9762\u300c\u7576 TCP \u9023\u7dda\u88ab\u958b\u6eff\u4e86\uff0c\u6703\u767c\u751f\u4ec0\u9ebc\u4e8b\uff1f\u300d\u7684\u89e3\u6c7a\u4e4b\u9053\u4e4b\u5916\uff0c\u6709\u5e7e\u500b\u61c9\u7528\u5c64\u9762\u7684\u8655\u7406\u6a5f\u5236\uff1a
RFC-9293 - TCP\uff0c\u53d6\u4ee3\u904e\u6642\u7684 RFC-793, 879, 1011, 1122, 2873, 6093, 6429, 6528, and 6691 RFC-2018 - SACK \u8aaa\u660e RFC-7323 - TCP Options: Window Scale, Timestamp
\u4e4b\u524d\u6709\u770b\u5230\u4e00\u500b RFC\uff08\u5fd8\u8a18\u7de8\u865f\uff09\u8aaa\u660e\u68c4\u7528 TCP Timestamp\uff0c\u56e0\u70ba\u5b83\u4f54\u7528\u5f88\u591a\u7a7a\u9593\uff0c\u6545\u63a8\u85a6\u5176\u4ed6\u505a\u6cd5\uff0c\u5305\u62ec\u4f7f\u7528 TLS\u3002
"},{"location":"essay/web/url-structure/","title":"URL \u9577\u4ec0\u9ebc\u6a23\u5b50","text":"URL: scheme://host:port/path
http
, https
subdomain.domain.tld
com
com.tw
io
github.io
http
default 80
https
default 443
/path?query_key=query_value#fragment
https://example.com:443
is same origin to https://example.com
http://eample.com:443
is different origin to http://example.com
(why? http
default port
is 80)http://api.example.com
is same site of http://auth.example.com
schemeful-same-site
consider scheme on site
Sec-Fetch-Site
([time=April, 2020]) can know where request came fromsame-site
same-origin
cross-site
none
What is Origin?
"},{"location":"essay/web-security/cross-origin-resources-sharing/#\u6b77\u53f2","title":"\u6b77\u53f2","text":"\u70ba\u4e86\u4fdd\u8b77\u4f7f\u7528\u8005\u7684\u96b1\u79c1\u548c\u88ab\u8981\u6c42\u7684\u7db2\u7ad9\u96b1\u79c1\u3002
"},{"location":"essay/web-security/cross-origin-resources-sharing/#\u5716\u8868\u8aaa\u660e","title":"\u5716\u8868\u8aaa\u660e","text":"http://example.com
\u7684\u7db2\u7ad9\u3002http://image.com
\uff09\u8981\u6a94\u6848\uff08\u5716\u7247\uff0cCSS \u6a94...\uff09\u3002http://example.com
http://example.com | http://other.com
*
\u593e\u96dc\u7684\u6771\u897f\u5e38\u5e38\u5c31\u662f\u4f7f\u7528\u8005\u7684\u96b1\u79c1\u3002
"},{"location":"essay/web-security/cross-origin-resources-sharing/#\u653b\u64ca","title":"\u653b\u64ca","text":"\u82e5\u5141\u8a31\u6240\u6709\u7684\u8981\u6c42\uff0c\u653b\u64ca\u8005\u53ef\u4ee5\u5728\u81ea\u5df1\u7db2\u7ad9\uff08devil.com
\uff09\u8981\u6c42\u4e00\u500b\u5728\u88ab\u653b\u64ca\u7db2\u7ad9\uff08example.com
\uff09\u4e2d\u7684\u6703\u54e1\u5c08\u5c6c\u5716\u7247\uff0c\u4e26\u900f\u904e\u5716\u7247\u6216\u5176\u4ed6\u4e92\u52d5\u65b9\u5f0f\u8981\u5230\u6703\u54e1\u500b\u4eba\u53ef\u8fa8\u8b58\u7684\u8cc7\u6599\u6216\u751a\u81f3 cookie
\u7684\u503c\u3002
very new feature!!
CORP
\u548c CORS
Cross-Origin-Resource-Policy
- same-origin
- same-site
- cross-origin
Cross-Origin-Embedder-Policy
- require-corp
GET /api/v2/shops/{shop_name}/revenue_data.json HTTP/1.1\n...\n
\u653b\u64ca\u8005\u53ea\u8981\u66f4\u6539 shop_name
\u5c31\u53ef\u4ee5\u5b58\u53d6\u4ed6\u4eba\u7684\u8cc7\u6599\u3002
\u5982\u679c API \u5728\u8655\u7406\u8eab\u4efd\u8a8d\u8b49\u6642\uff0c\u6c92\u6709\u9069\u7576\u4fdd\u8b77\uff0c\u5982\uff1aCAPTCHA
\u3001\u901f\u5ea6\u9650\u5236
\u3001\u9396 IP
\u7b49\u3002
\u653b\u64ca\u8005\u53ef\u4ee5\u904b\u7528\u4f7f\u7528\u8005\u5e33\u865f\u3001\u5bc6\u78bc\u7d44\u5408\u5217\u8868\u53cd\u8986\u5617\u8a66\u4f86\u53d6\u5f97\u6b0a\u9650\uff0c \u5c31\u53ef\u4ee5\u5f97\u5230\u6b63\u78ba\u7684\u7d44\u5408\u3002
"},{"location":"essay/web-security/owasp-api-top10/#excessive-data-exposure","title":"Excessive Data Exposure","text":"\u65b0\u9032\u4fdd\u5168
\u53ea\u80fd\u5b58\u53d6\u9650\u5236\u7684\u76e3\u63a7
\u3002
GET /api/v2/camera/ids HTTP/1.1\n...\n
\u56de\u50b3\u7684\u537b\u662f\u5168\u90e8\u7684\u76e3\u63a7
\uff0c\u7136\u5f8c\u518d\u5728 APP \u4f5c\u904e\u6ffe\u548c\u9650\u5236\u3002
\u963b\u65b7\u670d\u52d9\u653b\u64ca (DoS)
GET /api/v2/users?page=1&size=100 HTTP/1.1\n...\n
size
\u5f9e 100
\u8abf\u6574\u6210 2,000,000
\u3002
\u53ef\u4ee5\u5b58\u53d6\u672a\u7d93\u6388\u6b0a\u7684\u529f\u80fd
POST /api/admin/v2/invites HTTP/1.1\n\n...\n\n{\"email\"\uff1a\"hugo@malicious.com\"}\n
\u6ce8\u610f\u548c Object \u4e4b\u9593\u7684\u5dee\u7570
"},{"location":"essay/web-security/owasp-api-top10/#mass-assignment","title":"Mass Assignment","text":"\u6bd4\u8f03\u4e0b\u5217\u5169\u6bb5\u7a0b\u5f0f\u78bc\u7684\u5dee\u7570\u3002
const user = new User(req.body);\nuser.update();\n
const data = req.body;\nconst user = new User({ name: data.name, age: data.age });\nuser.update();\n
\u82e5\u4f7f\u7528\u8005\u6253\u5165\u4ee5\u4e0b API \u5c1a\u7121\u5f71\u97ff\u3002
PUT /api/v2/user/data HTTP/1.1\n\n...\n\n{\"name\"\uff1a\"john\",\"age\"\uff1a24}\n
\u4f46\u6539\u6210\u4ee5\u4e0b\u8cc7\u8a0a\uff0c\u5247\u6703\u7d66\u4e88\u932f\u8aa4\u6b0a\u9650\u3002
PUT /api/v2/user/data HTTP/1.1\n\n...\n\n{\"name\"\uff1a\"john\",\"age\"\uff1a24,\"money\"\uff1a999999}\n
"},{"location":"essay/web-security/owasp-api-top10/#security-misconfiguration","title":"Security Misconfiguration","text":"\u5982\u679c\u8cc7\u6599\u5eab\u7ba1\u7406\u7cfb\u7d71\u4f7f\u7528\u7684\u662f\u9810\u8a2d\u914d\u7f6e
\u800c\u5176\u5728\u9ed8\u8a8d\u60c5\u6cc1\u4e0b\u6703\u89e3\u9664\u8eab\u4efd\u8a8d\u8b49...
"},{"location":"essay/web-security/owasp-api-top10/#injection","title":"Injection","text":"POST /api/v2/auth/login HTTP/1.1\n\n...\n\n{\"account\"\uff1a\"some-account' OR 1 --\", \"password\": \"dont-care\"}\n
\u5728\u8cc7\u6599\u5eab\u4e2d\u6703\u5982\u4ee5\u4e0b\u57f7\u884c\uff1a
SELECT * FROM user\nWHERE account='some-account' OR 1 --' AND password='dont-care'\nLIMIT 1\n
"},{"location":"essay/web-security/owasp-api-top10/#improper-assets-management","title":"Improper Assets Management","text":"v2
\u628a Lack of Resources & Rate Limiting \u7684\u554f\u984c\u4fee\u597d\u4e86
GET /api/v2/users?page=1&size=100 HTTP/1.1\n...\n
\u4f46\u662f v1
\u5462\uff1f\u6709\u6b63\u78ba\u4fee\u6b63\u6216\u91cd\u65b0\u5c0e\u5165\uff08redirect\uff09\u5230 v2
\u55ce
\u6e2c\u8a66\u74b0\u5883\u7684 DB \u6709\u6c92\u6709\u548c\u6b63\u5f0f\u74b0\u5883\u4e92\u76f8\u5f71\u97ff\uff1f
"},{"location":"essay/web-security/owasp-api-top10/#insufficient-logging--monitoring","title":"Insufficient Logging & Monitoring","text":"\u597d\u7684 Log \u548c\u8b66\u544a\u7cfb\u7d71\uff0c\u6703\u8b93\u7ba1\u7406\u54e1\u6709\u80fd\u529b\u7576\u4e0b\u5c0d\u653b\u64ca\u505a\u8655\u7406\u3002
"},{"location":"essay/web-security/owasp-authentication-best-practice/","title":"OWASP \u9a57\u8b49\u6a5f\u5236\u6700\u4f73\u6307\u5357","text":""},{"location":"essay/web-security/owasp-authentication-best-practice/#passsword","title":"Passsword","text":"Referer: https://github.com/OWASP/owasp-mstg/blob/master/Document/0x04e-Testing-Authentication-and-Session-Management.md#testing-best-practices-for-passwords-mstg-auth-5-and-mstg-auth-6
Referer: https://github.com/OWASP/owasp-mstg/blob/master/Document/0x04e-Testing-Authentication-and-Session-Management.md#session-management-best-practices
jti
\uff08JWT ID\uff09KeyChain
\u6216 KeyStore
alg
\u53ef\u63a5\u53d7 none
exp
\u8981\u6ce8\u610fimplicit grant
\uff0ccode grant
\u8981\u4e00\u6b21\u6027\u4e14\u77ed\u6642scope
\u5982\u8ad6\u4f55\u7a2e\u72c0\u6cc1\uff0c\u4f60\u90fd\u61c9\u8a72\u9a57\u8b49\u8acb\u6c42\u662f\u5426\u4f86\u81ea\u4e0d\u540c\u88dd\u7f6e\u3002\u56e0\u6b64\uff0c\u8981\u80fd\u78ba\u8a8d\u4f60\u7684\u7a0b\u5f0f\u771f\u7684\u88ab\u88dd\u5728\u6b63\u78ba\u7684\u88dd\u7f6e\u4e0a\u3002
iOS\uff1a
In iOS, a developer can use identifierForVendor
, which is related to the bundle ID: the moment you change a bundle ID, the method will return a different value. When the app is ran for the first time, make sure you store the value returned by identifierForVendor
to the KeyChain, so that changes to it can be detected at an early stage.
Android\uff1a
In Android, the developer can use Settings.Secure.ANDROID_ID
till Android 8.0 (API level 26) to identify an application instance. Note that starting at Android 8.0 (API level 26), ANDROID_ID
is no longer a device unique ID. Instead, it becomes scoped by the combination of app signing key, user and device. So validating ANDROID_ID
for device blocking could be tricky for these Android versions. Because if an app changes its signing key, the ANDROID_ID
will change and it won't be able to recognize old users devices. Therefore, it's better to store the ANDROID_ID
encrypted and privately in a private a shared preferences file using a randomly generated key from the AndroidKeyStore
and preferably AES_GCM encryption. The moment the app signature changes, the application can check for a delta and register the new ANDROID_ID
. The moment this new ID changes without a new application signing key, it should indicate that something else is wrong.
\u9664\u6b64\u4e4b\u5916\uff0c\u5728\u4e00\u958b\u59cb\u7684\u88dd\u7f6e\u7d81\u5b9a\u4e0a\uff0c\u53ef\u4ee5\u900f\u904e\u7c3d\u767c\u8acb\u6c42\uff0c\u4f86\u63d0\u9ad8\u5b89\u5168\u6027\u3002
Next, the device binding can be extended by signing requests with a key stored in the Keychain
for iOS and in the KeyStore
in Android can reassure strong device binding.
\u4f60\u4e5f\u53ef\u4ee5\u9a57\u8b49 IP
\u3001\u5730\u7406\u4f4d\u7f6e
\u548c\u6642\u9593\u8ecc\u8de1
\u3002
\u4f8b\u5982\u628a\u6a5f\u654f\u8cc7\u6599\u5b58\u9032 local storage \u800c\u4e0d\u662f\u539f\u751f\u7684\u52a0\u5bc6\u5132\u5b58\u7a7a\u9593\uff1a
Keychain
Keystore
\u8acb\u53c3\u7167\u5404\u5e73\u53f0\u7684\u6700\u4f73\u505a\u6cd5\uff01\uff01
"},{"location":"essay/web-security/owasp-mobile-risk-top10/#\u4e0d\u5b89\u5168\u7684\u8cc7\u6599\u5132\u5b58insecure-data-storage","title":"\u4e0d\u5b89\u5168\u7684\u8cc7\u6599\u5132\u5b58\uff08Insecure Data Storage\uff09","text":"\u53ef\u80fd\u7684\u5132\u5b58\u7a7a\u9593\uff1a
\u9810\u9632\uff1a
iGoat\u7684\u6559\u5b78\u5f71\u7247\u3002
"},{"location":"essay/web-security/owasp-mobile-risk-top10/#\u50b3\u8f38\u5c64\u4fdd\u8b77\u4e0d\u8db3insecure-communication","title":"\u50b3\u8f38\u5c64\u4fdd\u8b77\u4e0d\u8db3\uff08Insecure Communication\uff09","text":"\u50b3\u8f38\u5a92\u4ecb\u53ef\u5305\u542b\uff1a
\u6700\u4f73\u505a\u6cd5\uff1a
SMS
\u3001MMS
\u50b3\u51fa\u53bbGET /api/some-method?rule=user HTTP/1.1\n
\u53ef\u4ee5\u8f15\u6613\u6539\u6210 rule=admin
\u8acb\u7528 Server \u7aef\u7684\u8cc7\u6599\u4f86\u6388\u6b0a\u4f7f\u7528\u8005
"},{"location":"essay/web-security/owasp-mobile-risk-top10/#\u4f60\u7684-app-\u5beb\u5f97\u4e0d\u597dpoor-code-quality","title":"\u4f60\u7684 APP \u5beb\u5f97\u4e0d\u597d\uff08Poor Code Quality\uff09","text":"\u6cdb\u6307\u6240\u6709\u5728 Client \u7aef\u7684\u767c\u751f\u7684\u554f\u984c
\u9810\u9632\uff1a
buffer overflow
\u548c memory leak
\u662f\u9ad8\u98a8\u96aa\u7684\u5b89\u5168\u6027\u554f\u984cinclude <stdio.h>\n\n int main(int argc, char **argv)\n {\n char buf[8]; // buffer for eight characters\n gets(buf); // \u4f7f\u7528\u8005\u8f38\u5165\uff0c\u9019\u5f88\u5371\u96aa\uff01\n printf(\"%s\\n\", buf); // print out data stored in buf\n return 0; // 0 as return value\n }\n
"},{"location":"essay/web-security/owasp-mobile-risk-top10/#\u4f60\u7684\u7a0b\u5f0f\u78bc\u88ab\u653e\u5230\u975e\u6b63\u5e38\u74b0\u5883\u4e86code-tampering","title":"\u4f60\u7684\u7a0b\u5f0f\u78bc\u88ab\u653e\u5230\u975e\u6b63\u5e38\u74b0\u5883\u4e86\uff08Code Tampering\uff09","text":"\u4e00\u822c\u4f86\u8aaa\uff0c\u6240\u6709 APP \u90fd\u6703\u6709\u9019\u554f\u984c \u4f46\u662f\u5982\u679c APP \u5927\u90e8\u5206\u908f\u8f2f\u90fd\u5728\u9a57\u8b49\u5f8c\u6216 Server \u7aef\u7684\u8f38\u51fa\uff0c\u5247\u6b64\u985e\u5b89\u5168\u6027\u8b70\u984c\u53ef\u5ffd\u7565
\u8f03\u9700\u8981\u6ce8\u610f\u7684\u7522\u696d\uff1a\u624b\u904a\u3001\u5de5\u5177\u7a0b\u5f0f
\u9700\u53c3\u7167\u5404\u5e73\u53f0\u7684\u6700\u4f73\u4f5c\u6cd5\u4f86\u9810\u9632\u3002
"},{"location":"essay/web-security/owasp-mobile-risk-top10/#\u9006\u5411\u5de5\u7a0breverse-engineering","title":"\u9006\u5411\u5de5\u7a0b\uff08Reverse Engineering\uff09","text":"\u6709\u5de5\u5177\u53ef\u9810\u9632\uff08IDA Pro\u3001Hopper\uff09\uff0c\u4e5f\u6709\u5f88\u591a\u5de5\u5177\u53ef\u5e6b\u52a9\u9006\u5411\u5de5\u7a0b\uff0c\u6311\u4e00\u4e0b
\u6e1b\u5c11\u4e00\u500b Function \u7684\u5de5\u4f5c\uff0c\u8b93\u9006\u5411\u5f8c\u7684\u7a0b\u5f0f\u78bc\u4e0d\u5bb9\u6613\u95b1\u8b80
"},{"location":"essay/web-security/owasp-mobile-risk-top10/#\u53ef\u5f71\u97ff\u7a0b\u5f0f\u904b\u884c\u7684\u6a5f\u5236extraneous-functionality","title":"\u53ef\u5f71\u97ff\u7a0b\u5f0f\u904b\u884c\u7684\u6a5f\u5236\uff08Extraneous Functionality\uff09","text":"\u653b\u64ca\u8005\u53ef\u4ee5\u628a APP \u57f7\u884c\u5728 local \u7aef\uff0c\u7136\u5f8c\u6539\u8a2d\u5b9a\u6a94\u6216\u89c0\u5bdf log\u3002
debug
\u7684 log\u5f8c\u7aef\u9700\u8981\u6ce8\u610f\u53ef\u80fd\u906d\u53d7\u7684\u653b\u64ca\uff1a
\u57fa\u672c\u89c0\u5ff5\uff1a
\u4f7f\u7528\u56b4\u8b39\u7684\u8eab\u5206\u9a57\u8b49\u8207\u6388\u6b0a\uff08\u4f8b\u5982\uff1a\u96d9\u56e0\u7d20\u8a8d\u8b49\uff09
"},{"location":"essay/web-security/owasp-mobile-risk-top10/#\u4e0d\u9069\u7576\u7684-session-\u8655\u7406improper-session-handling","title":"\u4e0d\u9069\u7576\u7684 Session \u8655\u7406\uff08Improper Session Handling\uff09","text":"\u5047\u8a2d Skype \u61c9\u7528\u7a0b\u5f0f\u5177\u6709 HTML
\u6216 Script Injection
\u5f31\u9ede\uff0c\u653b\u64ca\u8005\u53ea\u8981\u4e8b\u5148\u628a\u5177\u6709\u60e1\u610f\u9023\u7d50\u7684 iframe
\u5beb\u5165\u67d0\u500b\u7279\u5b9a\u7db2\u9801\uff1a
<iframe src=\"skype:17031234567?call\"></iframe>\n
\u4e00\u4f46\u53ef\u651c\u5f0f\u884c\u52d5\u88dd\u7f6e\u7684\u700f\u89bd\u5668\u8b80\u53d6\u5230\u6b64 iframe
\u7a0b\u5f0f\u78bc\u6642\uff0cSkype \u61c9\u7528\u7a0b\u5f0f\u5c07\u7121\u9700\u4f7f\u7528\u8005\u6388\u6b0a\uff0c\u81ea\u52d5\u958b\u59cb\u64ad\u865f\u7d66\u6307\u5b9a\u7684\u96fb\u8a71\u865f\u78bc\u3002
Cross Site Rrequest Foriegn
"},{"location":"essay/web-security/owasp-mobile-risk-top10/#\u5c01\u88dd\u6a94\u6848\u4fdd\u8b77\u4e0d\u8db3--\u7f3a\u5c11\u4e8c\u9032\u4f4d\u4fdd\u8b77lack-of-binary-protections","title":"\u5c01\u88dd\u6a94\u6848\u4fdd\u8b77\u4e0d\u8db3 / \u7f3a\u5c11\u4e8c\u9032\u4f4d\u4fdd\u8b77\uff08Lack of Binary Protections\uff09","text":"Binary \u4fdd\u8b77\u53ef\u78ba\u4fdd\u653b\u64ca\u8005\u7121\u6cd5\u900f\u904e\u9006\u5411\u5de5\u7a0b\u7372\u5f97\u60a8\u7684 App
\u8cc7\u6599\u61c9\u907f\u514d\u81ea\u52d5\u5132\u5b58\u65bc\u53ef\u651c\u5f0f\u884c\u52d5\u88dd\u7f6e\u5167
\u61c9\u7528\u7a0b\u5f0f\u539f\u59cb\u78bc\u4e2d\uff0c\u628a\u8f38\u5165\u6216\u8f38\u51fa\u7684\u76f8\u95dc\u53c3\u6578\u76f4\u63a5\u5beb\u5165\u5728\u7a0b\u5f0f\u78bc\u7576\u4e2d
"},{"location":"feedback/","title":"\u5fc3\u5f97","text":"\u9019\u88e1\u4f5c\u70ba\u6211\u7684\u5fc3\u5f97\u7d00\u9304\uff0c\u8b80\u5b8c\u4f46\u662f\u89ba\u5f97\u4e0d\u9700\u8981\u5beb\u5fc3\u5f97\u5c31\u4e0d\u5217\u5728\u9019\u4e86\u3002
\u66f8\u540d \u72c0\u614b \u8a55\u50f9 \u4f5c\u8005 \u51fa\u7248\u65e5\u671f Implementation Patterns \u8b80\u5b8c \u2605\u2605\u2605\u2605\u2605 Kent Beck 2007-10 Distributed Systems with Node.js \u5b8c\u6210 \u2605\u2605\u2606\u2606\u2606 Thomas Hunter 2020-11 Designing Data-intensive Applications \u5b8c\u6210 \u2605\u2605\u2605\u2605\u2605 Martin Kleppmann 2017-03 Future Of Fusion Energy \u5beb\u4f5c \u2605\u2605\u2605\u2605\u2606 Jason Parisi, Paperback 2018-12 Release It! \u5b8c\u6210 \u2605\u2605\u2605\u2606\u2606 Michael T. Nygard 2018-01 Adaptive Concurrency \u5b8c\u6210 \u5fc3\u5f97 2022-07 The Site Reliability Workbook \u5beb\u4f5c \u2605\u2605\u2605\u2605\u2605 Google \u91dd\u5c0d\u7dad\u904b\u7684\u5be6\u4f5c\u6574\u7406 2018-09"},{"location":"feedback/#\u6700\u8fd1\u7684\u7570\u52d5","title":"\u6700\u8fd1\u7684\u7570\u52d5","text":"\u4e0d\u53ea\u662f\u65b0\u589e\u6587\u7ae0\uff0c\u4e5f\u5305\u542b\u4fee\u6539\u820a\u7684\u6587\u7ae0\u3002
{{ blog_content feedback }}
"},{"location":"feedback/#\u60f3\u8b80","title":"\u60f3\u8b80","text":"\u8b80\u5b8c\u66f8\uff0c\u4f46\u662f\u9084\u6c92\u958b\u59cb\u5beb\u5fc3\u5f97\u3002
\u958b\u59cb\u5beb\u4f5c\uff08\u53ef\u80fd\u8b80\u5b8c\u4e5f\u53ef\u80fd\u9084\u6c92\u8b80\u5b8c\uff09\u3002
\u8b80\u5b8c\u4e14\u5beb\u5b8c\u5fc3\u5f97\u3002
\u9019\u4efd\u5fc3\u5f97\u5168\u90e8\u6b78\u529f\u65bc\u9019\u90e8\u5f71\u7247\u548c\u9019\u7bc7\u90e8\u843d\u683c\u6587\u7ae0\u3002\u56e0\u70ba\u9019\u4efd\u5fc3\u5f97\u5c07\u6703\u65bc 104 TOL \u4e2d\u767c\u8868\uff0c\u6240\u4ee5\u5c07\u6703\u4ee5\u7c21\u5831\u7684\u6a23\u5b50\u9032\u884c\u64b0\u5beb\u3002
\u8a3b1\uff1a\u76f8\u95dc PPT \u53ea\u80fd\u88ab 104 \u7684\u54e1\u5de5\u67e5\u770b\uff0c\u4f46\u672c\u7bc7\u4ee5\u6db5\u84cb\u5168\u90e8\u7684\u5167\u5bb9\u3002
\u8a3b2\uff1a\u76f8\u95dc\u7a0b\u5f0f\u78bc\u5be6\u4f5c\u5728 GitHub \u4e0a\u3002
"},{"location":"feedback/adaptive-concurrency/#\u524d\u8a00","title":"\u524d\u8a00","text":"\u5728\u4eca\u65e5\uff082022\u5e74\uff09\uff0c\u8a31\u591a\u4eba\u5c0d\u65bc\u9069\u61c9\u6027\u4e26\u884c\u8655\u7406\uff08Adaptive Concurrency\uff09\u662f\u964c\u751f\u7684\uff0c\u4f46\u5be6\u969b\u4e0a\u5b83\u81ea 1988 \u5e74\u4fbf\u5df2\u5b58\u5728\u65bc\u6211\u5011\u5f88\u5e38\u4f7f\u7528\u7684\u5354\u5b9a TCP \u7576\u4e2d\u3002\u4ed6\u5728\u9019\u4e4b\u4e2d\u626e\u6f14\u4e86\u4ec0\u9ebc\u89d2\u8272\uff0c\u53c8\u70ba\u4ec0\u9ebc\u6703\u91cd\u65b0\u6d6e\u51fa\u6c34\u9762\u4f86\u8b93\u6211\u5011\u91cd\u65b0\u601d\u8003\u5b83\u7684\u50f9\u503c\u5462\uff1f
\u5728\u958b\u59cb\u524d\uff0c\u6211\u60f3\u5148\u4ee5\u9280\u884c\u4f5c\u70ba\u601d\u8003\u7bc4\u4f8b\uff0c\u5176\u5be6\u9019\u4e26\u4e0d\u662f\u5076\u7136\uff0c\u5728\u5f8c\u9762\u63d0\u5230\u7684\u5229\u7279\u723e\u6cd5\u5247\u4e2d\u5c31\u6703\u8b93\u5927\u5bb6\u77e5\u9053\u70ba\u4ec0\u9ebc\u8981\u4ee5\u9280\u884c\u4f5c\u70ba\u7bc4\u4f8b\u3002
"},{"location":"feedback/adaptive-concurrency/#\u9280\u884c\u7684\u4e26\u884c\u8655\u7406","title":"\u9280\u884c\u7684\u4e26\u884c\u8655\u7406","text":"\u4f60\u73fe\u5728\u7d93\u71df\u8457\u4e00\u5bb6\u9280\u884c\uff0c\u4f60\u96c7\u7528\u4e86\u4e00\u4e9b\u884c\u54e1\uff0c\u800c\u4f60\u8eab\u70ba\u71b1\u60c5\u7684\u7d93\u71df\u8005\uff0c\u6703\u7ad9\u5728\u9867\u5ba2\u548c\u884c\u54e1\u4e2d\u9593\uff0c\u5e6b\u5fd9\u63a5\u5f85\u3001\u5957\u8fd1\u4e4e\u548c\u5f15\u5c0e\u9867\u5ba2\u81f3\u6307\u5b9a\u884c\u54e1\u3002\u5728\u5be6\u969b\u71df\u696d\u524d\uff0c\u6211\u5011\u5c0d\u65bc\u5206\u884c\u5167\u7684\u6c23\u6c1b\u60f3\u50cf\u53ef\u80fd\u5982\u4e0b\uff1a
\u5feb\u6a02\u7684\u9280\u884c\u751f\u6d3b\u6301\u7e8c\u4e0d\u9577\uff0c\u4e8b\u5be6\u4e0a\u5728\u958b\u5f35\u5f8c\u4e0d\u4e45\u4f60\u5c31\u9762\u81e8\u4e86\u4e00\u4e9b\u72c0\u6cc1\uff1a
\u7576\u9019\u4e9b\u554f\u984c\u6c92\u6709\u89e3\u6c7a\uff0c\u6216\u8457\u9023\u7e8c\u6578\u5929\u767c\u751f\u9019\u7a2e\u72c0\u6cc1\uff0c\u4f60\u7684\u9280\u884c\u5c31\u6703\u958b\u59cb\u53d7\u5230\u9867\u5ba2\u7684\u6279\u8a55\u3002\u800c\u9019\u7a2e\u540d\u8b7d\u50b7\u5bb3\u901a\u5e38\u9700\u8981\u6578\u500d\u7684\u6642\u9593\u548c\u91d1\u9322\u4f86\u89e3\u6c7a\u3002
"},{"location":"feedback/adaptive-concurrency/#\u8d85\u7d1a\u4fdd\u9463\u840a\u7279\u5229\u7c73\u7279","title":"\u8d85\u7d1a\u4fdd\u9463\uff0c\u840a\u7279\u5229\u7c73\u7279","text":"\u70ba\u4e86\u89e3\u6c7a\u9019\u554f\u984c\uff0c\u4f60\u8acb\u4e86\u4e00\u4f4d\u8d85\u7d1a\u4fdd\u9463\uff0c\u840a\u7279\u5229\u7c73\u7279\uff08Rate Limit\uff09\u3002\u4ed6\u6703\u900f\u904e\u9650\u5236\u55ae\u4e00\u9867\u5ba2\u7684\u4f7f\u7528\u7e3d\u91cf\u4f86\u6e1b\u5c11\u90a3\u4e9b\u56e0\u70ba\u7279\u5b9a\u4eba\u58eb\u5c0e\u81f4\u7684\u670d\u52d9\u54c1\u8cea\u4e0b\u964d\u3002\u63db\u53e5\u8a71\u8aaa\uff0c\u5982\u679c\u6709\u4eba\u4e00\u5929\u4f86 30 \u6b21\uff0c\u6bcf\u6b21\u90fd\u662f\u9700\u8981\u8655\u7406 30 \u5206\u9418\u7684\u696d\u52d9\uff0c\u90a3\u4f60\u5f88\u53ef\u80fd\u6703\u8acb\u840a\u7279\u5229\u7c73\u7279\u51fa\u4f86\uff0c\u4e26\u9650\u5236\u8a72\u9867\u5ba2\u7684\u6b21\u6578\uff0c\u907f\u514d\u5176\u4ed6\u9867\u5ba2\u4e0d\u80fd\u6b63\u5e38\u8655\u7406\u4ed6\u5011\u7684\u696d\u52d9\u3002
\u4f46\u662f\u56de\u60f3\u4e00\u4e0b\u6211\u5011\u6700\u4e00\u958b\u59cb\u7684\u554f\u984c\uff0c\u51b7\u6c23\u58de\u6389\u3001\u884c\u54e1\u8acb\u5047\u3001\u696d\u52d9\u91cf\u5408\u7406\u5730\u5927\u589e\uff0c\u9019\u4e9b\u597d\u50cf\u90fd\u4e0d\u662f\u4e00\u500b\u4fdd\u9463\u80fd\u5920\u89e3\u6c7a\u7684\u3002\u4e8b\u5be6\u4e0a\u4e5f\u6c92\u6709\u4efb\u4f55\u4e00\u5bb6\u9280\u884c\u6703\u7528\u9019\u7a2e\u65b9\u5f0f\u4f86\u8655\u7406\u9867\u5ba2\u7b49\u592a\u4e45\u7684\u554f\u984c\u3002\u4f60\u60f3\u50cf\u4e00\u4e0b\uff0c\u6bcf\u6b21\u9032\u53bb\u9280\u884c\u8655\u7406\u696d\u52d9\uff0c\u5c31\u6709\u500b\u4fdd\u9463\u5728\u65c1\u908a\u8a08\u6642\u6aa2\u67e5\uff0c\u7576\u8d85\u904e\u4e00\u79d2\u9418\u5f8c\u5c31\u628a\u4f60\u5f37\u5236\u8e22\u51fa\uff0c\u9019\u7a2e\u53ef\u80fd\u8b93\u6b63\u5e38\u64cd\u4f5c\u7684\u9867\u5ba2\u8b8a\u5f97\u60f1\u706b\u7684\u884c\u70ba\uff0c\u61c9\u8a72\u662f\u5728\u53ef\u9810\u898b\u7684\u672a\u4f86\u4e2d\u90fd\u4e0d\u6703\u51fa\u73fe\u7684\u653f\u7b56\u3002
\u807d\u8d77\u4f86\u5f88\u53ef\u7b11\uff0c\u4f46\u9019\u537b\u5be6\u4f5c\u5728\u6211\u5011\u5f88\u591a\u7684\u7db2\u8def\u670d\u52d9\u4e2d\u3002
"},{"location":"feedback/adaptive-concurrency/#api-management","title":"API Management","text":"\u73fe\u5728\u6211\u5011\u628a\u5834\u666f\u56de\u5230\u7db2\u8def\u670d\u52d9\u4e2d\uff0c\u9019\u88e1\u6709\u500b\u5f88\u597d\u7684\u4f8b\u5b50\uff0cAPI Management\uff08APIM\uff09\u3002\u5b83\u7684\u5b9a\u4f4d\u662f\u627f\u63a5\u5404\u500b\u5f8c\u53f0\u670d\u52d9\u7684\u4e2d\u7e7c\u7ad9\uff0c\u8209\u4f8b\u4f86\u8aaa\u524d\u7aef\u4f7f\u7528\u8005\u5728\u4ed6\u7684\u96fb\u8166\u6309\u4e0b\u8868\u683c\u9001\u51fa\u6642\uff0c\u5f88\u53ef\u80fd\u5c31\u6703\u5148\u7d93\u904e APIM \u518d\u5230\u8655\u7406\u9019\u500b\u8868\u683c\u5546\u52d9\u908f\u8f2f\u7684\u670d\u52d9\u7bc0\u9ede\u4e2d\u3002
\u9019\u500b APIM \u4e0d\u53ea\u662f\u6703\u628a\u6d41\u91cf\u5c0e\u5230\u6307\u5b9a\u7684\u670d\u52d9\u4e2d\uff0c\u4ed6\u4e5f\u9700\u8981\u5e6b\u6211\u5011\u6aa2\u67e5\u4f7f\u7528\u8005\u8eab\u4efd\u3001\u60e1\u610f\u8acb\u6c42\u548c\u9650\u5236\u6d41\u91cf\u3002\u9019\u500b\u89d2\u8272\u6709\u6c92\u6709\u807d\u8d77\u4f86\u50cf\u662f\u5728\u9280\u884c\u4f8b\u5b50\u4e2d\u7684\u4f60\uff1f\u4f60\u7684\u5de5\u4f5c\u5c31\u662f\u6aa2\u67e5\u9867\u5ba2\u8eab\u4efd\u3001\u78ba\u8a8d\u662f\u5426\u60e1\u610f\u3001\u78ba\u8a8d\u521d\u6b65\u9700\u6c42\u5f8c\u518d\u5c0e\u6d41\u5230\u6307\u5b9a\u884c\u54e1\u3002\u63a5\u4e0b\u4f86\u6211\u5011\u770b\u770b APIM \u5373\u5c07\u9762\u81e8\u7684\u4e00\u4e9b\u6311\u6230\uff1a
\u7576\u67d0\u500b\u670d\u52d9\u7684\u8acb\u6c42\u7a81\u7136\u589e\u52a0\uff0c\u6211\u5011\u53ef\u4ee5\u900f\u904e\u9650\u6d41\u6a5f\u5236\uff08Rate Limit\uff0c\u6c92\u932f\u5c31\u662f\u8d85\u7d1a\u4fdd\u9463 \u840a\u7279\u5229\u7c73\u7279\uff09\u4f86\u907f\u514d\u4e0a\u6e38\u548c APIM \u672c\u8eab\u7684\u670d\u52d9\u964d\u8f09\uff0c\u9032\u800c\u5f15\u767c\u5168\u670d\u52d9\u7684\u964d\u8f09\u3002\u5176\u908f\u8f2f\u5927\u81f4\u662f\u7576\u67d0\u500b\u670d\u52d9\u6216\u4f7f\u7528\u8005\u6bcf\u5206\u9418\u7684\u8acb\u6c42\u6578\u8d85\u904e\u4e0a\u9650\uff0c\u5c31\u62d2\u7d55\u63a5\u4e0b\u4f86\u7684\u6240\u6709\u8acb\u6c42\u3002
\u7576\u8acb\u6c42\u7684\u7e3d\u91cf\u7a81\u7136\u589e\u52a0\u6642\uff0c\u6211\u5011\u53ef\u4ee5\u900f\u904e\u81ea\u52d5\u589e\u9577\uff08auto scaling\uff09\u7684\u6a5f\u5236\uff0c\u589e\u52a0 APIM \u7684\u7bc0\u9ede\u6578\u91cf\u3002\u4f46\u662f\u7576\u8acb\u6c42\u589e\u9577\u7684\u901f\u5ea6\u904e\u5feb\u5c31\u53ef\u80fd\u6703\u4f86\u4e0d\u53ca\u589e\u52a0 APIM \u7684\u7bc0\u9ede\u6578\uff0c\u4f8b\u5982\u58de\u6389\u7684\u670d\u52d9\u91cd\u555f\u77ac\u9593\u3002\u5c31\u7b97 APIM \u6709\u81ea\u52d5\u589e\u9577\u7684\u6a5f\u5236\uff0c\u4f46\u5982\u679c\u4e0a\u6e38\u670d\u52d9\u6c92\u6709\u9019\u500b\u6a5f\u5236\uff0c\u5c0d\u65bc\u4e0a\u6e38\u4f86\u8aaa\u7a81\u7136\u589e\u52a0\u7684\u8acb\u6c42\u4ecd\u7136\u6703\u5c0d\u670d\u52d9\u9020\u6210\u50b7\u5bb3\u3002
\u6700\u5f8c\uff0c\u7576\u4e0a\u6e38\u670d\u52d9\u964d\u8f09\u6642\uff0c\u73fe\u6709\u7684\u9650\u6d41\u6a5f\u5236\u6c92\u8fa6\u6cd5\u5feb\u901f\u53cd\u61c9\u9019\u500b\u670d\u52d9\u7684\u5065\u5eb7\u72c0\u6cc1\uff0c\u6b64\u6642\u7684\u9650\u6d41\u5c31\u5982\u540c\u865b\u8a2d\u3002\u8209\u4f8b\u4f86\u8aaa\uff0c\u672c\u4f86\u670d\u52d9\u6bcf\u79d2\u53ef\u4ee5\u63a5\u53d7 100 \u500b\u8acb\u6c42\uff0c\u56e0\u6b64\u5728 APIM \u4e2d\u7684\u8a2d\u5b9a\u4fbf\u9650\u5236\u6bcf\u79d2\u6700\u591a 100 \u500b\u8acb\u6c42\u9001\u904e\u53bb\uff0c\u4f46\u662f\u56e0\u70ba\u670d\u52d9\u958b\u59cb\u964d\u8f09\u4e86\uff08\u4f8b\u5982\u6b63\u5728\u505a\u5783\u573e\u56de\u6536\uff09\uff0c\u6b64\u6642\u5b83\u53ea\u80fd\u627f\u8f09 50 \u500b\u8acb\u6c42\uff0c\u4f46 APIM \u6c92\u8fa6\u6cd5\u611f\u77e5\u5230\u9019\u4ef6\u4e8b\u3002\u6240\u4ee5 APIM \u5c31\u628a\u8d85\u904e 50 \u500b\u8acb\u6c42\u5f80\u4e0a\u6e38\u9001\uff0c\u9020\u6210\u670d\u52d9\u7bc0\u9ede\u8ca0\u8f09\u904e\u91cd\uff0c\u76f4\u63a5\u4e2d\u65b7\u7a0b\u5e8f\u3002
APIM \u4e4b\u6240\u4ee5\u7a31\u70ba API Management\uff0c\u5c31\u662f\u56e0\u70ba\u6211\u5011\u671f\u671b\u4ed6\u80fd\u505a\u5230\u7ba1\u7406 API \u7684\u529f\u80fd\uff0c\u4e0d\u50c5\u50c5\u662f\u8981\u505a\u5230\u9a57\u8b49\u6388\u6b0a\u548c\u5c0e\u6d41\u7684\u529f\u80fd\u3002\u5b83\u4e5f\u8981\u80fd\u907f\u514d\u7d66\u4e88\u4e0a\u6e38\u670d\u52d9\u904e\u591a\u7684\u8acb\u6c42\u5c0e\u81f4\u5176\u670d\u52d9\u5d29\u6f70\uff0c\u5426\u5247\u5c31\u61c9\u8a72\u7a31\u5176\u70ba Auth Proxy \u800c\u975e Management\u3002
"},{"location":"feedback/adaptive-concurrency/#\u8ca0\u8f09\u6e2c\u8a66","title":"\u8ca0\u8f09\u6e2c\u8a66","text":"\u6240\u4ee5\u554f\u984c\u56de\u5230\uff1a\u6211\u8981\u600e\u9ebc\u77e5\u9053\u4e00\u500b\u670d\u52d9\u6bcf\u79d2\u80fd\u627f\u8f09\u7684\u91cf\uff1f\u9019\u500b\u554f\u984c\u807d\u8d77\u4f86\u5f88\u7c21\u55ae\uff0c\u5176\u5be6\u5f88\u8907\u96dc\u3002\u9996\u5148\u6211\u5011\u9700\u8981\u505a\u4e00\u500b\u8ca0\u8f09\u6e2c\u8a66\u78ba\u8a8d\u8a72\u670d\u52d9\u80fd\u627f\u64d4\u7684\u8ca0\u8f09\u3002\u4f46\u662f\u9019\u500b\u6e2c\u8a66\u74b0\u5883\u9700\u8981\u76e1\u53ef\u80fd\u7684\u6e1b\u5c11\u548c\u7dda\u4e0a\u74b0\u5883\u7684\u5dee\u7570\uff0c\u4f8b\u5982\u672c\u5730\u7aef\u5e38\u99d0\u7a0b\u5e8f\uff08daemon\uff09\u7684\u5dee\u7570\u3001\u61c9\u7528\u7a0b\u5f0f\u7684\u8a2d\u5b9a\u5dee\u7570\u3001\u7db2\u8def\u74b0\u5883\u7684\u5dee\u7570\u3002\u518d\u4f86\u9084\u6709\uff0c\u6e2c\u8a66\u6642\u662f\u5728\u540c\u4e00\u53f0\u96fb\u8166\u9084\u662f\u62ff\u591a\u53f0\u96fb\u8166\u4e00\u8d77\u767c\u9001\u4e26\u884c\u8acb\u6c42\uff1f\uff0c\u9019\u4e9b\u8acb\u6c42\u7684\u9023\u7dda\u662f\u5426\u9700\u8981 keep alive \uff1f\u6bcf\u500b\u8acb\u6c42\u7684\u916c\u8f09\uff08payload\uff09\u90fd\u8981\u6709\u5dee\u7570\u55ce\uff1f\u6700\u5f8c\u662f\u61c9\u7528\u7a0b\u5f0f\u672c\u8eab\u8981\u6e2c\u54ea\u4e9b\u529f\u80fd\uff1f\u6709\u4e9b\u529f\u80fd\u6703\u9700\u8981\u8dd1\u7d04 10 \u79d2\uff0c\u6709\u4e9b\u537b\u662f\u55ae\u7d14\u7684\u8acb\u6c42\u6545\u50c5\u9700 30 \u6beb\u79d2\u5c31\u6703\u56de\u61c9\uff0c\u9019\u4ee3\u8868\u4e0d\u540c\u7684\u529f\u80fd\u6709\u4e0d\u540c\u80fd\u627f\u8f09\u7684\u91cf\u3002
\u5728\u6e2c\u8a66\u6642\u4e5f\u9700\u8981\u6ce8\u610f\u4e26\u884c\u8acb\u6c42\u6578\u4e0a\u5347\u6642\uff0c\u670d\u52d9\u7684\u901a\u91cf\u4e26\u4e0d\u6703\u7dad\u6301\u5728\u6700\u9ad8\u6c34\u5e73\uff0c\u800c\u662f\u6703\u958b\u59cb\u9032\u5165\u9000\u5316\u671f\uff08degradation\uff09\uff0c\u9019\u6642\u6211\u5011\u8981\u627e\u7684\u300c\u670d\u52d9\u6bcf\u79d2\u80fd\u627f\u8f09\u7684\u91cf\u300d\u5c31\u6703\u662f\u5728\u9019\u500b\u66f2\u7dda\u7684\u6700\u9ad8\u9ede\u3002\u6240\u4ee5\u5728\u6e2c\u8a66\u6642\u4e0d\u80fd\u4e00\u6627\u7684\u589e\u52a0\u4e26\u884c\u8acb\u6c42\u7684\u6578\u91cf\u7136\u5f8c\u8a08\u7b97\u6f5b\u4f0f\uff08latency\uff09\uff0c\u800c\u662f\u8981\u8a08\u7b97\u901a\u91cf\u548c\u4e26\u884c\u8acb\u6c42\u6578\u7684\u5e73\u9762\u5716\uff0c\u4e26\u540c\u6642\u8a08\u7b97\u51fa\u9019\u500b\u670d\u52d9\u7684\u5bb9\u91cf\uff0c\u624d\u80fd\u5f97\u51fa\u9ad8\u8acb\u6c42\u91cf\u6642\u670d\u52d9\u6240\u8868\u73fe\u7684\u884c\u70ba\u3002
\u5bb9\u91cf\u548c\u901a\u91cf\u662f\u4ec0\u9ebc\uff1f\u5bb9\u91cf\uff08capacity\uff09\u548c\u901a\u91cf\uff08throughput\uff09\u5e38\u5e38\u88ab\u641e\u6df7\uff0c\u4f46\u9019\u5169\u8005\u662f\u5b8c\u5168\u4e0d\u540c\u7684\u6771\u897f\u3002\u5bb9\u91cf\u662f\u6c92\u6709\u6642\u9593\u6982\u5ff5\u7684\uff0c\u4ee3\u8868\u4e00\u500b\u670d\u52d9\u80fd\u627f\u8f09\u7684\u7e3d\u91cf\uff0c\u901a\u91cf\u662f\u6709\u6642\u9593\u6982\u5ff5\u7684\uff0c\u4ee3\u8868\u4e00\u500b\u670d\u52d9\u6bcf\u79d2\u80fd\u8655\u7406\u8acb\u6c42\u7684\u91cf\u3002
\u8209\u4f8b\u4f86\u8aaa\uff0c\u5047\u8a2d\u4e00\u500b\u670d\u52d9\u7684\u5bb9\u91cf\u662f \\(200\\; req\\)\uff0c\u901a\u91cf\u662f \\(100\\; req/s\\)\uff0c\u7576\u6bcf\u79d2\u6709 50 \u500b\u8acb\u6c42\u6253\u9032\u9019\u500b\u670d\u52d9\uff0c\u6beb\u7121\u7591\u554f\u9019\u670d\u52d9\u53ef\u4ee5\u627f\u8f09\u9019\u500b\u91cf\uff0c\u56e0\u70ba\u6839\u64da\u5176\u901a\u91cf\u6211\u5011\u77e5\u9053\u5b83\u6bcf\u79d2\u53ef\u4ee5\u8655\u7406 100 \u500b\u8acb\u6c42\uff0c\u6240\u4ee5\u5373\u4f7f\u73fe\u5728\u6bcf\u79d2\u6709 100 \u500b\u8acb\u6c42\uff0c\u4ed6\u4e5f\u8981\u80fd\u8655\u7406\u3002\u554f\u984c\u662f\u7576\u73fe\u5728\u6bcf\u79d2\u6709 150 \u500b\u8acb\u6c42\u6642\uff0c\u9019\u500b\u670d\u52d9\u6703\u6709\u4ec0\u9ebc\u6a23\u7684\u884c\u70ba\u6a21\u5f0f\uff1f\u9996\u5148\u4e00\u958b\u59cb\u6703\u6709 150 \u500b\u8acb\u6c42\u9001\u9032\u670d\u52d9\u88e1\uff0c\u9019\u500b\u670d\u52d9\u90fd\u80fd\u63a5\u53d7\u9019\u4e9b\u8acb\u6c42\uff0c\u56e0\u70ba\u4ed6\u7684\u5bb9\u91cf\u662f 200\uff0c\u4f46\u662f\u56e0\u70ba\u901a\u91cf\u662f 100\uff0c\u6240\u4ee5\u7b2c\u4e00\u79d2\u904e\u5f8c\u53ea\u80fd\u6d88\u5316\u6389\u5176\u4e2d\u7684 100 \u500b\u8acb\u6c42\uff0c\u5b83\u809a\u5b50\u88e1\u4ecd\u7136\u6709 50 \u500b\u8acb\u6c42\u672a\u6d88\u5316\u3002\u9019\u6642\u4f86\u5230\u4e0b\u4e00\u79d2\uff08\u7b2c\u4e8c\u79d2\uff09\uff0c\u56e0\u70ba\u53c8\u6709 150 \u500b\u8acb\u6c42\u8fd1\u4f86\uff0c\u6240\u4ee5\u809a\u5b50\u88e1\u7e3d\u8a08\u6709 200 \u500b\u8acb\u6c42\uff0c\u9019\u4e5f\u53ef\u4ee5\u88ab\u63a5\u53d7\uff0c\u56e0\u70ba\u5bb9\u91cf\u662f 200\uff0c\u7d93\u904e\u4e00\u79d2\u6d88\u5316\u5f8c\uff0c\u73fe\u5728\u809a\u5b50\u88e1\u5269\u4e0b 100 \u500b\u8acb\u6c42\u3002\u7576\u53c8\u4f86\u5230\u4e0b\u4e00\u79d2\uff08\u7b2c\u4e09\u79d2\uff09\u6642\uff0c\u5c31\u6703\u6709 250 \u500b\u8acb\u6c42\uff0c\u9019\u6642\u670d\u52d9\u56e0\u70ba\u5bb9\u91cf\u4e0d\u5920\u800c\u62d2\u7d55\u591a\u51fa\u4f86\u7684 50 \u500b\u8acb\u6c42\u3002
\u9019\u6a23\u5bb9\u91cf\u5927\u6709\u4ec0\u9ebc\u597d\u8655\uff1f\u56e0\u70ba\u8acb\u6c42\u7684\u6578\u91cf\u662f\u4e0d\u7a69\u7684\uff0c\u53ef\u80fd\u6bcf\u79d2 10 \u500b\u4e5f\u53ef\u80fd\u7a81\u7136\u6bcf\u79d2 150 \u500b\uff0c\u6240\u4ee5\u9ad8\u5bb9\u91cf\u4ee3\u8868\u4ed6\u80fd\u5bb9\u8a31\u9019\u4e9b\u5dee\u7570\uff0c\u4f46\u662f\u771f\u6b63\u8655\u7406\u8acb\u6c42\u7684\u6548\u7387\u9084\u662f\u8981\u770b\u901a\u91cf\u3002
"},{"location":"feedback/adaptive-concurrency/#\u58c5\u585e\u63a7\u5236","title":"\u58c5\u585e\u63a7\u5236","text":"\u8ca0\u8f09\u6e2c\u8a66\u807d\u8d77\u4f86\u8981\u6ce8\u610f\u5f88\u591a\u7709\u7709\u89d2\u89d2\uff0c\u9019\u6a23\u6211\u5011\u6709\u6c92\u6709\u4e00\u500b\u81ea\u52d5\u5316\u7684\u6a5f\u5236\u5462\uff1f\u9019\u6642\u5c31\u6703\u63d0\u5230\u81ea\u52d5\u5316\u8655\u7406\u58c5\u585e\u7684\u63a7\u5236\u7cfb\u7d71\uff0c\u6216\u8005\u7a31\u58c5\u585e\u63a7\u5236\uff08congestion avoidance control\uff09\u3002\u76f8\u95dc\u8ad6\u6587\u59cb\u65bc 1988 \u5e74\uff0c\u800c\u6700\u4e00\u958b\u59cb\u61c9\u7528\u7684\u5730\u65b9\u5c31\u5982\u524d\u8a00\u6240\u8ff0\uff0c\u662f\u5728 TCP \u5354\u5b9a\u4e2d\u3002
\u96a8\u8457\u8a72\u63a7\u5236\u6f14\u7b97\u6cd5\u7684\u512a\u52e2\u986f\u73fe\u51fa\u4f86\uff0c\u958b\u59cb\u51fa\u73fe\u4e00\u4e9b\u76f8\u95dc\u7684\u512a\u5316\u548c\u8a2d\u8a08\uff0c\u4f8b\u5982 1995 \u5e74\u7684 Vegas\u30012002 \u5e74\u7684 AIMD-FC\u30012004 \u5e74\u7684 BIC \u7b49\u7b49\u5404\u7a2e\u6f14\u7b97\u6cd5\u3002\u7136\u800c\u9019\u6a23\u4e00\u500b\u7a31\u4e0d\u4e0a\u6700\u65b0\u7684\u9818\u57df\u70ba\u4ec0\u9ebc\u53c8\u91cd\u65b0\u6d6e\u51fa\u6c34\u9762\u4e86\u5462\uff1f\u9019\u662f\u56e0\u70ba\u9019\u500b\u6771\u897f\u53ef\u4ee5\u5f88\u597d\u7684\u89e3\u6c7a\u6211\u5011\u4e0a\u9762\u63d0\u5230 APIM \u7684\u8acb\u6c42\u7ba1\u7406\u554f\u984c\u3002
\u6709\u54ea\u4e9b\u4ee3\u7406\u4f3a\u670d\u5668\u5df2\u7d93\u9810\u8a2d\u652f\u63f4\u96cd\u585e\u63a7\u5236\u4e86\u5462\uff1f\u4e26\u4e0d\u662f\u6bcf\u500b\u4ee3\u7406\u4f3a\u670d\u5668\uff08proxy\uff09\u90fd\u9810\u8a2d\u652f\u63f4\uff0c\u4f8b\u5982 Nginx\uff08community version\uff09\u3001HAProxy \u9810\u8a2d\u90fd\u6c92\u6709\u652f\u63f4\uff0c\u9700\u8981\u984d\u5916\u88dd\u4e00\u4e9b\u5916\u639b\uff0c\u4f8b\u5982 Nginx \u9700\u8981\u5b89\u88dd lua \u7684\u5916\u639b\u5f8c\u4f7f\u7528\u76f8\u95dc\u7684\u5957\u4ef6\uff0c\u9019\u4e5f\u662f\u672c\u7bc7\u7684\u4e3b\u8981\u5be6\u4f5c\u3002\u76f8\u5c0d\u800c\u8a00\u8f03\u65b0\u7684 Envoy \u548c Vector\uff08\u96d6\u7136\u4ed6\u4e0d\u662f\u4ee3\u7406\u4f3a\u670d\u5668\uff0c\u4f46\u662f\u5728\u8cc7\u6599\u57fa\u790e\u8a2d\u65bd\u4e2d\u626e\u6f14\u8457\u985e\u4f3c\u7684\u89d2\u8272\uff09\u90fd\u6709\u652f\u63f4\u3002
\u51fa\u4e4e\u610f\u6599\u5730\uff0c\u4e0a\u9762\u63d0\u5230\u7684\u5f88\u591a\u6f14\u7b97\u6cd5\uff0c\u548c\u8ca0\u8f09\u6e2c\u8a66\u7684\u7709\u7709\u89d2\u89d2\u7adf\u80fd\u900f\u904e\u4e00\u500b\u7c21\u55ae\u516c\u5f0f\u6b78\u7d0d\u8d77\u4f86\uff01\u9019\u500b\u516c\u5f0f\u5c31\u662f 1954 \u5e74\u5229\u7279\u723e\u63d0\u51fa\u7684\u5229\u7279\u723e\u6cd5\u5247\u3002
... This relationship is covered very nicely with Little's Law Netflix - concurrency-limit
"},{"location":"feedback/adaptive-concurrency/#\u5229\u7279\u723e\u6cd5\u5247","title":"\u5229\u7279\u723e\u6cd5\u5247","text":"\u5229\u7279\u723e\u6cd5\u5247\uff08Little's law\uff09\u65bc 1954 \u5e74\u5229\u7279\u723e\u63d0\u51fa\u3002\u6211\u5011\u56de\u5230\u4e00\u958b\u59cb\u9280\u884c\u7684\u4f8b\u5b50\uff0c\u5982\u679c\u6211\u73fe\u5728\u60f3\u8981\u8a2d\u8a08\u9280\u884c\u7684\u6905\u5b50\u6578\u91cf\u6216\u8005\u5927\u5ef3\u63d0\u4f9b\u4eba\u7b49\u5f85\u7684\u7a7a\u9593\u5927\u5c0f\u6642\uff0c\u5c31\u8981\u601d\u8003\u300c\u9280\u884c\u5e73\u5747\u6703\u6709\u5e7e\u500b\u9867\u5ba2\u5728\u88e1\u9762\u300d\u9019\u500b\u554f\u984c\uff0c\u9019\u6642\u5c31\u53ef\u4ee5\u4f7f\u7528\u5229\u7279\u723e\u900f\u904e\u7cbe\u5999\u7684\u63a8\u5c0e\u5f97\u51fa\u7684\u9019\u500b\u6cd5\u5247\u3002\u5047\u8a2d\u9280\u884c\u6bcf\u5c0f\u6642\u5e73\u5747\u9032\u4f86\u7684\u4eba\u6578\u6709 30 \u500b\u4eba\uff08\\(30\\; p/hr\\)\uff09\u800c\u6bcf\u500b\u4eba\u7b49\u5f85\u52a0\u8655\u7406\u696d\u52d9\u7684\u5e73\u5747\u6642\u9593\u662f 6 \u5206\u9418\uff08\u4e5f\u5c31\u662f 0.1 \u500b\u5c0f\u6642\uff0c\\(0.1\\; hr\\)\uff09\u9019\u6a23\u6211\u5011\u5c31\u53ef\u4ee5\u7b97\u51fa\u5e73\u5747\u7684\u9867\u5ba2\u4eba\u6578\u70ba \\(30\\; p/hr \\times 0.1\\; hr = 3\\; p\\)\uff0c\u4e09\u500b\u4eba\u3002\u6240\u4ee5\u6211\u5011\u53ea\u9700\u8981\u6e96\u5099\u4e09\u5f35\u6905\u5b50\u5c31\u53ef\u4ee5\u8b93\u5728\u9280\u884c\u7684\u4eba\u90fd\u80fd\u5f97\u5230\u4f4d\u5b50\u5750\uff08\u81f3\u5c11\u6a5f\u7387\u4e0a\u4f86\u8aaa\u662f\u9019\u6a23\uff09\u3002
\u6211\u5011\u518d\u770b\u770b\u4e00\u500b\u4f8b\u5b50\uff0c\u5009\u5132\u4e2d\u5fc3\u60f3\u8981\u77e5\u9053\u300c\u5009\u5eab\u8981\u591a\u5927\u4f86\u5b58\u653e\u9019\u4e9b\u8ca8\u54c1\u300d\uff0c\u6240\u4ee5\u4ed6\u958b\u59cb\u8a08\u7b97\u6bcf\u5929\u5e73\u5747\u9001\u9032\u4f86\u7684\u8ca8\u54c1\u6578\u548c\u6bcf\u4ef6\u8ca8\u7269\u5e73\u5747\u8981\u653e\u591a\u4e45\u624d\u6703\u88ab\u9001\u51fa\uff0c\u4e26\u5f97\u51fa\u6709\u6bcf\u5929\u6709 100 \u4ef6\u8ca8\u54c1\u9032\u4f86\u4e14\u6bcf\u4ef6\u8ca8\u54c1\u8981\u5b58\u653e\u4e09\u5929\u624d\u6703\u88ab\u9001\u51fa\uff0c\u9019\u6642\u6211\u5011\u5c31\u77e5\u9053\u9019\u500b\u5009\u5eab\u8981\u53ef\u4ee5\u653e 300 \u4ef6\u8ca8\u54c1\u624d\u5920\u5927\u3002\u9019\u500b\u8a08\u7b97\u4ee3\u8868\u4e86\u4ec0\u9ebc\uff1f\u5373\u4f7f\u5728\u8a08\u7b97\u9019\u500b\u975e\u5e38\u62bd\u8c61\u7684\u7d50\u679c\u300c\u6211\u9700\u8981\u591a\u5927\u7684\u5009\u5eab\u300d\u6642\uff0c\u6211\u50c5\u50c5\u9700\u8981\u5169\u500b\u53c3\u6578\u5c31\u53ef\u4ee5\u5b8c\u6210\u8a08\u7b97\uff0c\u4e26\u4e14\u4e0d\u53d7\u5230\u8ca8\u6d41\u7a0b\u5206\u914d\u3001\u670d\u52d9\u5206\u914d\u3001\u670d\u52d9\u9806\u5e8f\uff0c\u6216\u4efb\u4f55\u5176\u4ed6\u56e0\u7d20\u5f71\u97ff\uff0c\u53b2\u5bb3\u5427\uff1f
"},{"location":"feedback/adaptive-concurrency/#\u7db2\u8def\u670d\u52d9\u7684\u5229\u7279\u723e\u6cd5\u5247","title":"\u7db2\u8def\u670d\u52d9\u7684\u5229\u7279\u723e\u6cd5\u5247","text":"\u6211\u5011\u628a\u4f8b\u5b50\u653e\u56de\u7db2\u8def\u670d\u52d9\u4e2d\uff0c\u7576\u6211\u5011\u60f3\u77e5\u9053\u9019\u500b\u670d\u52d9\u80fd\u4e0d\u80fd\u8655\u7406\u9019\u500b\u8acb\u6c42\u91cf\uff0c\u6211\u5011\u5c31\u53ef\u4ee5\u958b\u59cb\u5957\u7528\u5229\u7279\u723e\u6cd5\u5247\u3002
\\(L\\) \u4ee3\u8868\u5e73\u5747\u8acb\u6c42\u91cf\uff0c\\(\\lambda\\) \u4ee3\u8868\u8acb\u6c42\u7387\uff0c\\(W\\) \u4ee3\u8868\u57f7\u884c\u6642\u9593\u3002
\u6c92\u8fa6\u6cd5\u60f3\u50cf\uff1f\u6c92\u95dc\u4fc2\uff0c\u6211\u5011\u4f86\u5be6\u4f5c\u3002
\u8acb\u5148\u5230 playground-adaptive-concurrency\uff0c\u7167\u8457 README \u64cd\u4f5c\uff0c\u628a\u670d\u52d9\u555f\u52d5\u8d77\u4f86\u3002
"},{"location":"feedback/adaptive-concurrency/#\u5be6\u4f5c\u4e00","title":"\u5be6\u4f5c\u4e00","text":"\u6bcf\u79d2 15 \u500b\u8acb\u6c42\u4e14\u6bcf\u500b\u8acb\u6c42 500 \u6beb\u79d2\u5f8c\u57f7\u884c\u5b8c\u6210\u3002
node src/client.js --wait 500 --rate 15 --duration 120 --port 8080\n
\u5716\u7684\u4e0a\u534a\u90e8\u662f\u8acb\u6c42\u7684\u6578\u91cf\u5206\u4f48\uff0c\u7531\u65bc\u6bcf\u79d2\u9418\u6703\u6709 15 \u500b\u8acb\u6c42\uff0c\u6240\u4ee5\u7e3d\u91cf\u6703\u7dad\u6301\u5728 15 \u500b\u3002\u6b63\u5728\u8655\u7406\uff08in-flight\uff09\u7684\u8acb\u6c42\u6703\u4e00\u76f4\u7dad\u6301\u5728 10 \u500b\uff08\u6839\u64da\u8a2d\u5b9a\uff0c\u4e00\u500b server \u6700\u591a\u53ea\u80fd\u540c\u6642\u8655\u7406 10 \u500b\u8acb\u6c42\uff09\uff0c\u800c pending \u7684\u6578\u91cf\u6703\u7dad\u6301\u5728 5 \u500b\u3002\u6703\u770b\u5230 pending \u7684\u6578\u91cf\u6296\u52d5\u662f\u56e0\u70ba\u5728\u505a metrics \u7684\u6642\u5019\u662f\u6bcf 0.5 \u79d2\u8f38\u51fa\u4e00\u6b21\uff0c\u6709\u6642\u904e\u4e86 0.5 \u79d2\u5f8c\u6240\u6709\u7684\u8acb\u6c42\u90fd\u8655\u7406\u5b8c\u4e86\uff08\u56e0\u70ba\u6709 jitter\uff09\uff0c\u6240\u4ee5\u5c31\u6703\u986f\u793a\u8b8a\u52d5\u7684 pending \u6578\u91cf\u3002\u5716\u4e2d\u7684\u5de6\u4e0b\u89d2\u4ee3\u8868 server \u6bcf\u79d2\u8655\u7406\u7684\u8acb\u6c42\u6578\u91cf\uff0c\u4e5f\u5c31\u662f\u901a\u91cf\uff08throughput\uff09\u3002\u53f3\u4e0b\u89d2\u662f\u5e73\u5747\u7684\u6f5b\u6642\uff0c10 \u500b\u8acb\u6c42\u9700\u8017\u6642 500ms\uff0c5 \u500b\u8acb\u6c42\u9700\u8017\u6642 1000ms\uff0c\u6545\u800c \\(\\left ( 10 \\times 500 + 5 \\times 1000 \\right )/15 \\approx 667\\; ms\\)\u3002
\u7528\u62fc\u5716\u7684\u65b9\u5f0f\u4f86\u5448\u73fe\u8acb\u6c42\u7684\u72c0\u614b\u5c31\u6703\u5982\u4e0b\u5716\uff1a
\u9019\u500b\u7d50\u679c\u61c9\u8a72\u662f\u53ef\u4ee5\u60f3\u50cf\u7684\uff0c\u4f46\u662f\u4e0b\u4e00\u500b\u5be6\u4f5c\u5462\uff1f
"},{"location":"feedback/adaptive-concurrency/#\u5be6\u4f5c\u4e8c","title":"\u5be6\u4f5c\u4e8c","text":"\u6bcf\u79d2 15 \u500b\u8acb\u6c42\u4e14\u6bcf\u500b\u8acb\u6c42 600 \u6beb\u79d2\u5f8c\u57f7\u884c\u5b8c\u6210\u3002
node src/client.js --wait 600 --rate 15 --duration 120 --port 8080\n
\u5728\u958b\u59cb\u524d\uff0c\u4f60\u53ef\u4ee5\u8a66\u8457\u56de\u7b54\u9019\u500b\u554f\u984c\uff1a\u73fe\u5728\u61c9\u7528\u7a0b\u5f0f\u80fd\u670d\u52d9\u9019\u500b\u91cf\u7684\u8acb\u6c42\u55ce\uff1f
\u8ddf\u4f60\u60f3\u7684\u4e00\u6a23\u55ce\uff1f\u5373\u4f7f\u8acb\u6c42\u4f86\u5230 600 \u6beb\u79d2\uff0c\u9019\u500b\u670d\u52d9\u4e5f\u80fd\u8655\u7406\uff01\u9019\u807d\u8d77\u4f86\u6709\u9ede\u9055\u53cd\u76f4\u89ba\uff0c\u56e0\u70ba\u591a\u51fa\u4f86\u7684 100 \u6beb\u79d2\u597d\u50cf\u6703\u9010\u6f38\u7d2f\u7a4d\uff0c\u6700\u5f8c\u5c0e\u81f4\u670d\u52d9\u4f86\u4e0d\u53ca\u8655\u7406\u3002\u4f46\u5176\u5be6\u6211\u5011\u7167\u4e0a\u9762\u628a\u8acb\u6c42\u7528\u62fc\u5716\u7684\u65b9\u5f0f\u756b\u51fa\u4f86\u5c31\u80fd\u77e5\u9053\u5be6\u969b\u600e\u9ebc\u904b\u4f5c\u7684\u3002
\u7531\u4e0a\u5716\u5c31\u53ef\u4ee5\u77e5\u9053\u96a8\u8457\u6642\u9593\u9032\u884c\uff0c\u8acb\u6c42\u8655\u7406\u7684\u6a21\u5f0f\u5c31\u6703\u4e00\u76f4\u5faa\u74b0\u4e0b\u53bb\uff0c\u7559\u4e0b\u4e2d\u9593 200 ms\uff08\\(2000 - 600 \\times 3 = 200\\; ms\\)\uff09\u7684\u7a7a\u767d\u3002
\u9019\u6a23\u6bcf\u6b21\u6211\u5728\u7b97\u670d\u52d9\u80fd\u8655\u7406\u7684\u91cf\u90fd\u9700\u8981\u756b\u9019\u500b\u62fc\u5716\u55ce\uff1f\u4e0d\u8981\u5fd8\u4e86\uff0c\u6211\u5011\u9084\u6709\u5229\u7279\u723e\u6cd5\u5247\uff01\u7576\u6211\u5011\u628a\u6578\u503c\u5e36\u9032\u516c\u5f0f\u88e1\u5c31\u6703\u767c\u73fe\u751f\u547d\u7684\u7f8e\u597d\uff01\\(L = \\lambda \\times W = 15\\; req/s \\times 0.6\\; s = 9\\; req\\)\uff0c\u6240\u4ee5\u5982\u679c\u6211\u5011\u7684\u61c9\u7528\u7a0b\u5f0f\u64c1\u6709\u5927\u65bc 9 \u7684\u5bb9\u91cf\uff08capacity\uff09\uff0c\u6211\u5c31\u80fd\u8655\u7406\u9019\u500b\u6f5b\u6642\uff08latency\uff09\u7684\u8acb\u6c42\u3002\u5404\u4f4d\u4e5f\u53ef\u4ee5\u8a66\u8457\u7b97\u4e00\u4e0b\u53f3\u4e0b\u89d2\u7684\u300cServer latency\u300d\u70ba\u4ec0\u9ebc\u6703\u7dad\u6301\u5728 0.88 \u79d2\u5de6\u53f3\u3002
"},{"location":"feedback/adaptive-concurrency/#\u5be6\u4f5c\u4e09","title":"\u5be6\u4f5c\u4e09","text":"\u6bcf\u79d2 15 \u500b\u8acb\u6c42\u4e14\u6bcf\u500b\u8acb\u6c42 700 \u6beb\u79d2\u5f8c\u57f7\u884c\u5b8c\u6210\u3002
node src/client.js --wait 700 --rate 15 --duration 120 --port 8080\n
\u6211\u5011\u5728\u958b\u59cb\u524d\u5c31\u53ef\u4ee5\u8a66\u8457\u7528\u5229\u7279\u723e\u6cd5\u5247\u7b97\u4e00\u4e0b\u9019\u6a23\u670d\u52d9\u80fd\u4e0d\u80fd\u627f\u8f09\uff0c\u8981\u6ce8\u610f server \u53ea\u80fd\u627f\u8f09 10 \u500b\u8acb\u6c42\u7684\u91cf\uff0c\u63db\u53e5\u8a71\u8aaa\u4ed6\u7684\u5bb9\u91cf\u53ea\u6709 10\uff0c\u7576\u8acb\u6c42\u6578\u8d85\u904e 10 \u5c31\u6703\u8b93\u8acb\u6c42 pending\u3002
\\(15 \\times 0.7 = 11.5\\; req\\)\uff0c\u7531\u6b64\u53ef\u77e5\u56e0\u70ba\u4ed6\u8d85\u904e\u670d\u52d9\u7684\u5bb9\u91cf\uff0c\u6240\u4ee5\u5c31\u6703\u958b\u59cb\u8b93\u8acb\u6c42\u5ef6\u5b95\uff08pending\uff09\uff0c\u4e26\u7b49\u5f85\u6709\u80fd\u529b\u6642\u518d\u505a\u904b\u7b97\uff0c\u6700\u5f8c Nginx \u7b49\u592a\u4e45\uff0c\u51fa\u73fe timeout \u7684\u8acb\u6c42\uff0c\u4e26\u56de\u61c9 504\u3002
\u9019\u88e1\u7684\u5716\u5c31\u9700\u8981\u597d\u597d\u89e3\u91cb\u4e00\u4e0b\u4e86\uff0c\u9996\u5148\u770b\u4e0a\u9762 server \u7684\u8655\u7406\u72c0\u6cc1\uff0c\u56e0\u70ba\u9084\u6c92\u8655\u7406\u597d\u4e0a\u4e00\u79d2\u7684\u8acb\u6c42\uff0c\u53c8\u63a5\u8457\u4f86\u4e86\u4e0b\u4e00\u79d2\u7684\u8acb\u6c42\uff0c\u6240\u4ee5 pending \u7684\u8acb\u6c42\u6578\u5c31\u6703\u958b\u59cb\u7121\u6b62\u5883\u7684\u7d2f\u7a4d\u3002\u5728\u5de6\u4e0b\u89d2\u7684 client \u7684\u89d2\u5ea6\uff0c\u5c31\u6703\u767c\u73fe\u7576\u5230\u4e86 10:15:50
HTTP 200 \u7684\u8acb\u6c42\u958b\u59cb\u6e1b\u5c11\uff0c\u53d6\u800c\u4ee3\u4e4b\u7684\u662f Nginx \u56de\u7684 504 Timeout\uff0c\u4e14\u9019\u500b\u904e\u7a0b\u662f\u6f38\u9032\u7684\u3002\u9019\u662f\u56e0\u70ba\u5728\u904e\u7a0b\u4e2d\u4ecd\u7136\u6709\u8acb\u6c42\u5728 4 \u79d2\u5167\u56de\u61c9\u8acb\u6c42\uff08pending \u8f49\u5230 in-flight \u4e26\u82b1 0.7 \u79d2\u8655\u7406\u5b8c\u6210\uff09\uff0c\u4f46\u662f\u7576\u8d85\u904e\u81e8\u754c\u9ede\u6642\uff0c\u4e5f\u5c31\u662f\u6240\u6709\u8acb\u6c42\u90fd\u9700\u8981\u57f7\u884c\u8d85\u904e 4 \u79d2\u6642\uff0cclient \u5c31\u6703\u6536\u5230\u6240\u6709\u7684\u8acb\u6c42\u7686\u70ba 504\uff0c\u540c\u4e00\u6642\u9593\u6211\u5011\u53ef\u4ee5\u770b\u53f3\u4e0b\u89d2\u7684\u5716\u4f86\u9a57\u8b49\u5e73\u5747\u6f5b\u6642\u6b63\u9010\u6b65\u5f80 4 \u79d2\u9760\u8fd1\u3002\u7576\u5230\u4e86 10:17:05
\u6642\uff0c\u6211\u5011\u518d\u56de\u5230 server \u7684\u89d2\u5ea6\uff0c\u56e0\u70ba\u5169\u5206\u9418\uff08120 \u79d2\uff09\u904e\u53bb\u4e86\uff0cclient \u4e0d\u518d\u9001\u8acb\u6c42\u904e\u4f86\u6642\uff0c\u4ed6\u5c31\u80fd\u9010\u6b65\u628a\u809a\u5b50\u4e2d\u7684\u8acb\u6c42\u6d88\u5316\u4e0b\u4f86\uff0c\u56e0\u800c pending \u7684\u8acb\u6c42\u6578\u958b\u59cb\u9a5f\u964d\u3002
\u63a5\u8457\u6211\u5011\u4f86\u7b97\u4e00\u4e0b\u5de6\u4e0b\u89d2\u4e2d\u6de1\u85cd\u8272\u7684\u7dda\uff08HTTP 200 \u6bcf\u79d2\u7684\u8acb\u6c42\u6578\u4e26\u6bcf\u5341\u79d2\u5e73\u5747\u4e00\u6b21\uff09\uff0cserver \u7684\u901a\u91cf\u5728\u9ad8\u5cf0\u6642\u5e73\u5747\u4f86\u8aaa\u662f\u591a\u5c11\uff08\u4e5f\u5c31\u662f 10:15:10
\u5230 10:15:45
\u4e4b\u9593\uff09\uff1f\u9019\u6642\u5c31\u662f\u628a\u5229\u7279\u723e\u6cd5\u5247\u63db\u4e00\u4e0b\uff1a\\(\\lambda = L / W = 10 / 0.7 \\approx 14.3\\)\uff0c\u53cd\u904e\u4f86\u8aaa\uff0c\u5982\u679c\u6211\u8981\u6c42\u9019\u500b\u670d\u52d9\u8981\u80fd\u6bcf\u79d2\u8655\u7406 15 \u500b\u8acb\u6c42\uff0c\u9019\u6642\u9700\u8981\u8b93\u6bcf\u500b\u8acb\u6c42\u58d3\u5728\u5e7e\u79d2\u5167\u5b8c\u6210\uff1f\\(W = L / \\lambda = 10 / 15 \\approx 0.67\\)\uff0c\u4e5f\u5c31\u662f\u5982\u679c\u8acb\u6c42\u5728 0.67 \u79d2\u5167\u5b8c\u6210\uff0c\u4ed6\u5c31\u4e0d\u6703\u8b93\u8acb\u6c42\u958b\u59cb\u96cd\u585e\u4e26\u5806\u7a4d\uff0c\u611f\u53d7\u5230\u5229\u7279\u723e\u6cd5\u5247\u7684\u65b9\u4fbf\u4e86\u55ce\uff01
\u6709\u4e86\u5229\u7279\u723e\u6cd5\u5247\uff0c\u7576\u6211\u5011\u628a\u300c\u5e73\u5747\u8acb\u6c42\u91cf\u300d\u8a2d\u70ba\u63a7\u5236\u8b8a\u56e0\uff08\u4ee5\u4e0a\u9762\u5be6\u4f5c\u70ba\u4f8b\u5c31\u662f 10\uff09\uff0c\u6211\u5011\u5c31\u53ef\u4ee5\u77e5\u9053\u7576\u6f5b\u6642\uff08latency\uff09\u4e0a\u5347\uff0c\u670d\u52d9\u7684\u901a\u91cf\uff08throughput\uff09\u5c31\u6703\u964d\u4f4e\u3002\u6545\u800c\u8eab\u70ba APIM\uff0c\u6211\u5011\u5c31\u53ef\u4ee5\u964d\u4f4e\u8acb\u6c42\u5c0e\u6d41\u5230\u8a72\u670d\u52d9\u7684\u91cf\uff0c\u4f86\u907f\u514d\u670d\u52d9\u6301\u7e8c\u5730\u963b\u585e\u672a\u80fd\u8655\u7406\u7684\u8acb\u6c42\u3002
\u4f46\u554f\u984c\u662f\uff0c\u6211\u5011\u5f88\u53ef\u80fd\u4e0d\u77e5\u9053\u4e0a\u6e38\u670d\u52d9\u9650\u5236\u8acb\u6c42\u7684\u91cf\uff0c\u9019\u6642\u6211\u5011\u5c31\u53ea\u80fd\u900f\u904e\u89c0\u6e2c\u6f5b\u6642\u4f86\u81ea\u52d5\u4fee\u6b63\u670d\u52d9\u80fd\u6536\u5230\u7684\u8acb\u6c42\u91cf\u3002\u9019\u500b\u7cbe\u795e\uff0c\u5c31\u662f Additive-Increase/Multiplicative-Decrease\uff08AIMD\uff09\u5728\u505a\u7684\u4e8b\u3002
\u7576\u6f5b\u6642\u7a69\u5b9a\u6642\uff0c\u9010\u6b65\u589e\u52a0\uff08Additive-Increase\uff09\u8acb\u6c42\u7684\u9650\u5236\u6578\uff0c\u7576\u6f5b\u6642\u904e\u9ad8\u6642\uff0c\u5c31\u58d3\u4f4e\u8acb\u6c42\u6578\uff08Multiplicative-Decrease\uff09\uff0c\u8b93\u4e0a\u6e38\u670d\u52d9\u6709\u6642\u9593\u80fd\u8655\u7406\u73fe\u6709\u7684\u8acb\u6c42\u3002\u807d\u8d77\u4f86\u6c92\u4ec0\u9ebc\u7528\uff1f\u6211\u5011\u4f86 DEMO \u770b\u770b\u5427\uff01
AIMD \u5be6\u4f5c\u7d30\u7bc0\u8a73\u898b\u76f8\u95dc\u7a0b\u5f0f\u78bc\u3002
"},{"location":"feedback/adaptive-concurrency/#\u5be6\u4f5c-aimd","title":"\u5be6\u4f5c AIMD","text":"node src/client.js --wait 700 --rate 15 --duration 120 --port 8081\n
\u73fe\u5728\u4f60\u5c31\u53ef\u4ee5\u770b\u5230\u5c0d\u4e0a\u6e38\u670d\u52d9\u4f86\u8aaa\u5f88\u660e\u986f\u7684\u5dee\u7570\u4e86\uff0c\u4ed6\u4e0d\u518d\u6703\u6709\u4e0d\u65b7\u4e0a\u5347\u7684 pending \u8acb\u6c42\uff0c\u800c\u662f\u5728\u4e00\u500b\u6301\u7e8c\u7a69\u5b9a\u7684\u6c34\u5e73\u4e2d\u3002\u9019\u662f\u56e0\u70ba\u5728\u5be6\u4f5c AIMD \u7684 proxy \u4e2d\uff0c\u5b83\u958b\u59cb\u7d00\u9304\u670d\u52d9\u53ef\u4ee5\u627f\u8f09\u7684\u91cf\uff0c\u4e26\u62d2\u7d55\u90a3\u4e9b\u8d85\u51fa\u9650\u5236\u7684\u8acb\u6c42\u3002\u4ee5\u5de6\u4e0b\u89d2\u7684\u5716\u4f86\u8aaa\uff0c\u56e0\u70ba proxy \u521d\u59cb\u7684\u9650\u5236\u662f\u5341\u500b\u8acb\u6c42\uff0c\u6240\u4ee5\u4e00\u958b\u59cb\u6703\u6709\u4e00\u500b\u5c0f\u5c71\u4e18\uff0c\u7576\u4ed6\u958b\u59cb\u9010\u6b65\u589e\u52a0\uff08Additive-Increase\uff09\u8acb\u6c42\u7684\u9650\u5236\u6578\u6642\uff0c\u9019\u500b\u7d05\u8272\u5c0f\u5c71\u4e18\u5c31\u958b\u59cb\u4e0b\u964d\uff0c\u6700\u5f8c\u4f86\u5230\u4e00\u500b\u5e73\u7a69\u7684\u6c34\u5e73\u7dda\u4e2d\u3002\u5c0d\u65bc\u4e0a\u6e38\u670d\u52d9\u4f86\u8aaa\uff0c\u4ed6\u7684\u901a\u91cf\uff08throughput\uff09\u4ecd\u7136\u7dad\u6301\u8457\u7d04 \\(14.3 req/s\\) \u5de6\u53f3\uff0c\u4f46\u91cd\u9ede\u662f\u4ed6\u4e0d\u518d\u7d2f\u7a4d\u90a3\u4e9b\u7121\u6cd5\u6d88\u5316\u7684\u8acb\u6c42\uff0c\u800c\u662f\u900f\u904e proxy \u76f4\u63a5\u62d2\u7d55\u9019\u4e9b\u8acb\u6c42\u3002
\u6211\u5011\u518d\u4f86\u770b\u770b\u53e6\u5916\u4e00\u500b\u5be6\u4f5c\uff0c\u9019\u6b21\u5be6\u4f5c\u662f\u8b93\u4e0a\u6e38\u670d\u52d9\u7684\u6f5b\u6642\u5f9e 600ms \u5347\u5230 700ms \u518d\u5347\u5230 1000ms\u3002
# \u4f7f server \u9810\u8a2d\u7b49\u5f85 600ms\ncurl localhost:8000/set-wait/600\n# --wait = 0 \u4ee3\u8868\u4f7f\u7528 server \u9810\u8a2d\u7684 waiting time\nnode src/client.js --wait 0 --rate 15 --duration 0 --port 8081\n# \u9010\u6b65\u589e\u52a0\ncurl localhost:8000/set-wait/700\ncurl localhost:8000/set-wait/1000\n
\u5728 11:06:30
\u4ee5\u524d\uff0c\u884c\u70ba\u90fd\u548c\u524d\u9762\u5dee\u4e0d\u591a\uff0c\u503c\u5f97\u6ce8\u610f\u7684\u662f\uff0c\u7576\u6f5b\u6642\u4f86\u5230 1000ms \u6642\uff0c\u53ef\u4ee5\u770b\u5230 proxy \u958b\u59cb\u81ea\u52d5\u964d\u4f4e\u8acb\u6c42\u6578\uff0c\u958b\u59cb\u62d2\u7d55\u591a\u51fa\u7684 5 \u500b\u8acb\u6c42\u3002\u9019\u88e1\u91cd\u9ede\u662f\u4e0a\u5716\u7684\u8acb\u6c42\u6578\uff0c\u4ed6\u7684\u66f2\u7dda\u5f88\u5178\u578b\u7684\u53cd\u61c9\u4e86 AIMD \u7684\u589e\u5e45\uff1a\u9010\u6b65\u4e0a\u5347\uff0c\u5feb\u901f\u9661\u843d\u3002\u9019\u4e00\u5207\u90fd\u4e0d\u9700\u8981\u8abf\u6574\u61c9\u7528\u7a0b\u5f0f\uff0c\u53ea\u662f\u5728 proxy \u4e2d\u52a0\u4e0a\u4e00\u4e9b\u5c0f\u7a0b\u5f0f\uff0c\u5c31\u53ef\u4ee5\u5927\u5927\u7684\u964d\u4f4e\u4e0a\u6e38\u670d\u52d9\u627f\u8f09\u904e\u591a\u7684\u8acb\u6c42\u767c\u751f\u7684\u6a5f\u6703\u3002
\u63a5\u4e0b\u4f86\u6211\u5011\u5c31\u4f86\u6bd4\u8f03\u4e00\u4e0b\u9650\u6d41\u6a5f\u5236\u548c\u9069\u61c9\u6027\u4e26\u884c\u8655\u7406\uff08AIMD \u5c31\u662f\u4e00\u7a2e\u5be6\u4f5c\uff09\u3002
"},{"location":"feedback/adaptive-concurrency/#\u5229\u7528\u7387\u7684\u6bd4\u8f03","title":"\u5229\u7528\u7387\u7684\u6bd4\u8f03","text":"\u6240\u8b02\u7684\u5229\u7528\u7387\uff0c\u5c31\u662f\u670d\u52d9\u88ab\u5b8c\u6574\u5730\u4f7f\u7528\u7684\u6bd4\u4f8b\u3002\u8209\u4f8b\u4f86\u8aaa\uff0c\u5982\u679c\u4e00\u500b\u670d\u52d9\u64c1\u6709 100 \u7684\u901a\u91cf\uff0c\u4f46\u662f\u70ba\u4e86\u907f\u514d\u5404\u500b\u4f7f\u7528\u8005\uff08client\uff09\u6436\u4f54\u8cc7\u6e90\uff0c\u6240\u4ee5\u9650\u5236 \u4f7f\u7528\u8005A \u6bcf\u79d2\u53ea\u80fd\u6253 15 \u500b\u8acb\u6c42\uff0c\u4f7f\u7528\u8005B \u6bcf\u79d2\u53ea\u80fd\u6253 40 \u500b\u8acb\u6c42\uff0c\u800c\u9019\u4e9b\u4f7f\u7528\u8005\u7684\u8acb\u6c42\u7e3d\u9650\u5236\u6703\u5c0f\u65bc\u7b49\u65bc 100\uff0c\u9019\u662f\u56e0\u70ba\u907f\u514d\u7576\u6bcf\u500b\u670d\u52d9\u90fd\u540c\u6642\u4f7f\u7528\u6700\u9ad8\u4e0a\u9650\uff0c\u5c31\u5f88\u53ef\u80fd\u8b93\u9019\u500b APIM \u4e2d\u65b7\u7a0b\u5e8f\u3002\u4f46\u662f\u7576\u9019\u500b\u670d\u52d9\u524d\u9762\u639b\u8f09\u4e86\u9069\u61c9\u6027\u4e26\u884c\u8655\u7406\u7684\u6a5f\u5236\uff0c\u5c31\u53ef\u4ee5\u5b89\u5fc3\u8b93 \u4f7f\u7528\u8005A \u548c \u4f7f\u7528\u8005B \u90fd\u64c1\u6709\u6bcf\u79d2 80 \u500b\u8acb\u6c42\u7684\u9650\u5236\uff0c\u5373\u4f7f\u4ed6\u5011\u5408\u8a08\u8d77\u4f86\u662f 160 \u4e5f\u5c31\u662f\u5927\u65bc\u80fd\u8ca0\u8377\u7684\u6bcf\u79d2 100 \u500b\u8acb\u6c42\u3002
\u9019\u6709\u4ec0\u9ebc\u512a\u52e2\uff1f\u7b2c\u4e00\u500b\u5c31\u662f\u670d\u52d9\u7684\u8cc7\u6e90\u80fd\u88ab\u6709\u6548\u5229\u7528\uff0c\u7b2c\u4e8c\u500b\u5c31\u662f\u7576\u8acb\u6c42\u7684\u91cf\u589e\u52a0\u6642\uff0c\u4f7f\u7528\u8005\u6bd4\u8f03\u4e0d\u6703\u8e29\u5230\u9650\u5236\u800c\u88ab\u62d2\u7d55\uff08\u901a\u5e38\u9650\u6d41\u7684\u9650\u5236\u662f\u6709\u6642\u6548\u7684\uff0c\u4f8b\u5982\u4e0d\u518d\u63a5\u53d7\u9019\u500b\u4f7f\u7528\u8005\u6216\u670d\u52d9\u63a5\u4e0b\u4f86 5 \u5206\u9418\u7684\u8acb\u6c42\uff09\u3002
\u6211\u5011\u4f86\u5be6\u4f5c\u770b\u770b\u5427\uff01
# \u5206\u5225\u5728\u5169\u500b\u7d42\u7aef\u8f38\u5165\u5176\u4e2d\u4e00\u500b\u6307\u4ee4\nnode src/client.js --wait 700 --rate 10 --duration 120 --name A --port 8081\nnode src/client.js --wait 700 --rate 10 --duration 120 --name B --port 8081\n
\u6211\u5011\u53ef\u4ee5\u770b\u5230\u5de6\u4e0b\u7684 \u4f7f\u7528\u8005A \u548c\u53f3\u4e0b\u7684 \u4f7f\u7528\u8005 B \u90fd\u53ef\u4ee5\u5f97\u5230 HTTP 200 \u7684\u56de\u61c9\uff0c\u4e14\u5169\u8005\u7684\u7e3d\u901a\u91cf\uff08\u5de6\u4e0a\u89d2\uff09\u4ecd\u7136\u662f\u55ae\u4e00\u4f7f\u7528\u8005\u7684 14.3\u3002\u5982\u679c\u6709\u8208\u8da3\uff0c\u53ef\u4ee5\u6e2c\u8a66\u4e00\u4e0b\u57f7\u884c\u9019\u4e9b client \u7684\u5148\u5f8c\u9806\u5e8f\u662f\u5426\u6703\u5c0d\u7372\u5f97 504 \u7684\u6bd4\u4f8b\u6709\u6240\u5f71\u97ff\uff0c\u9019\u500b\u8b70\u984c\u6211\u5011\u7559\u5230\u5ef6\u4f38\u518d\u63d0\u4e00\u4e0b\u3002
"},{"location":"feedback/adaptive-concurrency/#\u53ef\u64f4\u5c55\u6027\u7684\u6bd4\u8f03","title":"\u53ef\u64f4\u5c55\u6027\u7684\u6bd4\u8f03","text":"\u96a8\u8457\u61c9\u7528\u7a0b\u5f0f\u7684\u6210\u9577\uff0c\u6211\u5011\u52e2\u5fc5\u6703\u9762\u81e8\u53ef\u64f4\u5c55\u6027\u7684\u6311\u6230\u3002\u9650\u6d41\u6a5f\u5236\u5f88\u96e3\u505a\u5230\u53ef\u64f4\u5c55\u6027\uff0c\u4e8b\u5be6\u4e0a\u4ed6\u8981\u9762\u81e8\u7684\u662f\u5206\u6563\u5f0f\u7cfb\u7d71\u6700\u56f0\u96e3\u7684\u554f\u984c\u2014\u2014\u72c0\u614b\u6a5f\u7684\u5206\u6563\u5f0f\u8655\u7406\u3002\u56e0\u70ba\u8981\u505a\u9650\u6d41\uff0c\u52e2\u5fc5\u9700\u8981\u5132\u5b58\u5404\u500b\u4f7f\u7528\u8005\u7684\u4f7f\u7528\u7d00\u9304\uff0c\u4f8b\u5982\u7d00\u9304\u5176\u4e94\u5206\u9418\u5167\u7684\u8acb\u6c42\u6578\u3002\u53ef\u80fd\u7684\u505a\u6cd5\u6709\uff1a
\u628a\u64f4\u5c55\u6027\u7684\u554f\u984c\u653e\u5230\u9069\u61c9\u6027\u4e26\u884c\u8655\u7406\u6703\u767c\u751f\u4ec0\u9ebc\u4e8b\uff1f\u6211\u5011\u4f86\u5be6\u4f5c\u770b\u770b\u5427\uff01
# \u5206\u5225\u5728\u5169\u500b\u7d42\u7aef\u8f38\u5165\u5176\u4e2d\u4e00\u500b\u6307\u4ee4\nnode src/client.js --wait 700 --rate 10 --duration 0 --port 8081\nnode src/client.js --wait 700 --rate 10 --duration 0 --port 8082\n
\u6211\u5011\u53ef\u4ee5\u770b\u5230\u9019\u5be6\u4f5c\u4e2d\u6709\u5169\u500b proxy\uff0cProxyA \u7684 port \u662f 8081\u3001ProxyB \u7684 port \u662f 8082\u3002\u7576\u5169\u500b proxy \u5404\u81ea\u63a5\u6536\u5341\u500b\u8acb\u6c42\u6642\uff0c\u4ed6\u5011\u6703\u81ea\u5df1\u6839\u64da\u4e0a\u6e38\u7684\u6f5b\u6642\u627e\u51fa\u6700\u9069\u7576\u7684\u8acb\u6c42\u9650\u5236\uff0c\u6240\u4ee5\u5c0d\u65bc\u4e0a\u6e38\u670d\u52d9\u4f86\u8aaa\uff0c\u5be6\u969b\u901a\u91cf\u4ecd\u7136\u7dad\u6301 \\(14.3 req/s\\) \u5de6\u53f3\u3002\u9019\u6642\u4f60\u5b8c\u5168\u4e0d\u9700\u8981\u8003\u616e\u64f4\u5c55\u6027\u7684\u554f\u984c\uff0c\u56e0\u70ba\u9019\u4e9b proxy \u6703\u81ea\u52d5\u627e\u51fa\u6700\u9069\u7576\u7684\u9650\u5236\uff0c\u53ea\u662f\u4f60\u4e0d\u80fd\u7d66\u4e88\u904e\u9ad8\u7684\u901a\u91cf\u6700\u4f4e\u9650\u5236\uff0c\u56e0\u70ba\u7576\u6d41\u91cf\u5206\u6563\u5230\u591a\u500b proxy \u6642\uff0c\u5404\u81ea proxy \u7684\u901a\u91cf\u53ef\u80fd\u6703\u5f88\u4f4e\uff0c\u8a2d\u5b9a\u904e\u9ad8\u7684\u6700\u4f4e\u9650\u5236\u5c07\u6703\u7834\u58de\u9810\u671f\u7684\u884c\u70ba\u3002
"},{"location":"feedback/adaptive-concurrency/#\u7e3d\u7d50","title":"\u7e3d\u7d50","text":"\u6211\u5011\u770b\u5230\u4e86\u9069\u61c9\u6027\u4e26\u884c\u8655\u7406\u53ef\u4ee5\u5e6b\u52a9\u6211\u5011\u6392\u89e3\u4e0a\u6e38\u670d\u52d9\u7684\u904e\u8f09\uff0c\u6211\u5011\u751a\u81f3\u4e0d\u9700\u8981\u77e5\u9053\u4e0a\u6e38\u670d\u52d9\u7684\u901a\u91cf\u6216\u5bb9\u91cf\uff0c\u900f\u904e\u6301\u7e8c\u89c0\u6e2c\u7684\u6f5b\u6642\u4f86\u8abf\u6574\u61c9\u8a72\u9001\u5f80\u4e0a\u6e38\u7684\u8acb\u6c42\u6578\u3002\u6700\u5f8c\u518d\u4f86\u554f\u500b\u554f\u984c\uff0c\u53e4\u8001\u7684\u8a13\u8a00\u4e2d\uff0c\u6709\u5f97\u5fc5\u6709\u5931\uff0c\u5728\u9019\u88e1\u5931\u6e96\u4e86\u55ce\uff1f\u807d\u8d77\u4f86\u4ed6\u597d\u50cf\u53ef\u4ee5\u5b8c\u5168\u53d6\u4ee3\u9650\u6d41\u6a5f\u5236\uff1f\u9019\u662f\u56e0\u70ba\u9650\u6d41\u6a5f\u5236\u548c\u9069\u61c9\u6027\u4e26\u884c\u8655\u7406\u5206\u5225\u8981\u89e3\u6c7a\u7684\u554f\u984c\u4e0d\u540c\uff0c\u56de\u5230\u6211\u5011\u6700\u4e00\u958b\u59cb\u7684\u4f8b\u5b50\uff0c\u4fdd\u9463\u4e26\u4e0d\u662f\u4e00\u500b\u7121\u80fd\u7684\u8077\u696d\uff0c\u53ea\u662f\u4ed6\u5011\u80fd\u8655\u7406\u7684\u4e8b\u60c5\u548c\u696d\u52d9\u8655\u7406\u6642\u9593\u88ab\u62c9\u9577\u9019\u5169\u8005\u4e4b\u9593\u7684\u95dc\u806f\u6027\u4e26\u4e0d\u9ad8\u3002\u9650\u6d41\u6a5f\u5236\u5728\u9762\u5c0d\u60e1\u610f\uff08\u7121\u610f\uff09\u7684\u8acb\u6c42\u7684\u7834\u58de\u662f\u53ef\u4ee5\u5f88\u597d\u7684\u9632\u7bc4\u7684\uff0c\u900f\u904e IP\u3001UA \u751a\u81f3 Header \u4f86\u8fa8\u5225\u4f7f\u7528\u8005\u4e26\u7d66\u4e88\u9650\u5236\u3002
\u5728\u9069\u61c9\u6027\u4e26\u884c\u8655\u7406\u4e2d\uff0c\u300c\u6709\u5f97\u5fc5\u6709\u5931\u300d\u662f\u9069\u7528\u5728\u5be6\u4f5c\u7684\u6f14\u7b97\u6cd5\u4e0a\uff0c\u4f8b\u5982\u4e0a\u8ff0\u7684 AIMD\u3002
"},{"location":"feedback/adaptive-concurrency/#\u5ef6\u4f38","title":"\u5ef6\u4f38","text":"\u5176\u5be6\u9084\u6709\u5f88\u591a\u5ef6\u4f38\u53ef\u4ee5\u8abf\u6574\u548c\u512a\u5316\uff0c\u9019\u88e1\u5217\u8209\u5e7e\u500b\uff1a
\u9664\u4e86\u9019\u4e9b\u554f\u984c\uff0c\u5982\u679c\u4f60\u5c0d\u65bc\u5982\u4f55\u589e\u52a0\u7db2\u8def\u670d\u52d9\u7684\u7a69\u5b9a\u5ea6\uff0c\u6700\u597d\u7684\u8fa6\u6cd5\u9084\u662f\u8b80\u66f8\uff0c\u56e0\u70ba\u66f8\u88e1\u7684\u5167\u5bb9\u90fd\u6703\u6bd4\u8f03\u7cfb\u7d71\u6027\u7684\u8b1b\u89e3\uff0c\u63a8\u85a6\u7684\u66f8\u6709 Google \u5167\u90e8\u5de5\u7a0b\u5e2b\u5beb\u7684 Site Reliability Engineering\u3002
"},{"location":"feedback/maintenace-experience/","title":"\u7dad\u904b\u4e0a\u7684\u4e00\u4e9b\u5fc3\u5f97","text":"\u7dad\u904b\u7684\u6838\u5fc3\u601d\u60f3\u662f\u8981\u7406\u89e3\u4f60\u7684\u7522\u54c1\uff0c\u4e26\u4f9d\u64da\u5f97\u5230\u7684\u6578\u64da\u4f5c\u51fa\u6c7a\u7b56\u3002
\u6240\u8b02\u7684\u300c\u7406\u89e3\u7522\u54c1\u300d\u5c31\u5e36\u4ee3\u8868\u900f\u660e\u5316\uff0clog/metric/trace
log \u53c8\u5206\u4e09\u7a2e\uff1atext log\u3001introspection log\uff08eg. exception stack\uff09 \u548c structure log\u3002
\u5c0d\u65bc SLO \u4f86\u8aaa structure log \u548c metrics \u624d\u662f\u91cd\u9ede\u3002
\u5c0d\u65bc\u8981\u627e\u670d\u52d9\u5931\u80fd\u7684\u554f\u984c\uff0ctrace \u548c introspection log \u6703\u662f\u91cd\u9ede\u3002
Metrics \u53ef\u80fd\u4e5f\u5305\u542b\u9019\u53f0\u4e3b\u6a5f\u4e0a\u6b21\u90e8\u7f72\u6642\u9593\uff08program version tag\uff09\u3002
SLO \u53ef\u80fd\u662f\u670d\u52d9\u6700\u4e45\u5931\u80fd\u4e09\u5341\u5206\u9418\uff0cSLI \u6703\u544a\u8a34\u4f60\u4e0d\u540c\u9762\u5411\u7684\u6307\u6a19\uff0c\u5e6b\u52a9\u4f60\u627e\u5230\u554f\u984c\u3002
trace \u8981\u653e tcp \u9023\u7dda\u6642\u9593\uff0c\u53ef\u4ee5\u5e6b\u52a9\u4f60\u5feb\u901f\u91d0\u6e05\u9023\u7dda\u901f\u5ea6\u6162\u7684\u539f\u56e0\u3002
trace \u8ddf metrics \u5dee\u5728\u54ea\uff1f
\u4ec0\u9ebc\u90fd\u62c9\uff0c\u4f8b\u5982 agent connections \u5f9e\u96f2\u5230\u5730\u5f8c\u8b8a\u9ad8\uff0c agent log \u770b\u5230 latency \u62c9\u9ad8\uff0c\u5c0d\u61c9\u8abf\u6574\uff0c\u4f46\u662f\u9084\u6c92\u505a
\u7167\u9867\u597d\u4f60\u7684 monitor \u670d\u52d9\uff1a
statsd
, Prometheus
Prometheus
, InfluxDB
(long term)Grafana
, Viceroy
Alertmanager
metrics \u6ce8\u610f\u56db\u5927\u6307\u6a19\uff1a
\u600e\u9ebc\u76e3\u63a7\u670d\u52d9\uff1f\u5047\u8a2d\u4f60\u7684 SLO \u8a02\u5b9a 30 \u5929\u6700\u9ad8 0.1% \u7684\u932f\u8aa4\u7387\uff1a
\u89e3\u6cd5\u662f\uff1a\u6539\u6210\u76e3\u63a7 burn rate\uff0c\u9019\u500b\u932f\u8aa4\u7387\u6703\u591a\u5feb\u6d88\u8017\u6389\u4f60\u7684 error budget\uff1a
\u4f4e\u6d41\u91cf\u7684\u89e3\u6cd5\uff1a
\u6709\u6642\u592a\u5bec\u9b06\u7684 SLO \u6703\u8b93\u9810\u671f\u7684\u544a\u8b66\u5931\u9748\u3002 \u4f8b\u5982\uff0cSLO \u6bcf\u6708 90% \u4ee5\u4e0a\u7684\u53ef\u7528\u6027\uff0c\u76e3\u63a7\u8a2d\u5b9a\u6bcf\u5c0f\u6642 > 2% \u7684\u932f\u8aa4\u7387\u5c07\u4e0d\u53ef\u80fd\u88ab\u89f8\u767c\uff1a
\\[\\begin{align} 720*2\\% = 14.4 rate >= 14.4* (1-90\\%) = 1.4 \\end{align}\\]\u8981\u8b93\u932f\u8aa4\u7684\u8acb\u6c42\u5927\u65bc\u8acb\u6c42\u7e3d\u6578\u7684 1.4 \u500d\uff0c\u986f\u7136\u662f\u4e0d\u53ef\u80fd\u7684\u3002
\u5982\u679c\u4f60\u6709\u5f88\u591a\u670d\u52d9\uff08\u5fae\u670d\u52d9\uff09\uff0c\u4e0d\u8981\u6bcf\u500b\u90fd\u52a0\u4e0a\u7368\u7acb\u7684 SLO\uff0c\u800c\u662f\u628a\u5b83\u5206\u985e\u597d\u4e26\u5957\u7528\u5176\u61c9\u6709\u7684 SLO\u3002 \u4f8b\u5982\uff1a
Request class Availability Latency @ 90%a Latency @ 99%CRITICAL
99.99% 100 ms 200 ms HIGH_FAST
99.9% 100 ms 200 ms HIGH_SLOW
99.9% 1,000 ms 5,000 ms LOW
99% None None NO_SLO
None None None \u4f46\u662f\u8981\u505a\u9019\u4e9b\u6771\u897f\uff0c\u4f60\u5c31\u6703\u767c\u73fe\uff0c\u6211\u7684\u6642\u9593\u90fd\u88ab\u529f\u80fd\u958b\u767c\u4f54\u6eff\uff01\u9019\u6642\u5019\u600e\u9ebc\u8fa6\uff1f
\u9019\u5c31\u5c0d\u5230\u300c\u6211\u9700\u8981\u82b1\u591a\u5c11\u6642\u9593\u5728\u7dad\u904b\u4e0a\u300d
\u518d\u5e36\u5230 error budge\uff0c\u4e26\u4f9d\u6b64\u5c0e\u5230\u300c\u4f9d\u64da\u5f97\u5230\u7684\u6578\u64da\u505a\u51fa\u6c7a\u7b56\u300d\u3002
\u518d\u4f9d\u6b64\u5c0e\u5230\u516c\u53f8\u67b6\u69cb\uff0cDevOps v.s. SRE
\u5229\u7528 THD \u505a\u4e00\u500b\u7bc4\u4f8b\u3002
\u516c\u53f8\u6709\u500b\u6848\u4f8b\uff0cJava \u904e GSLB \u7684\u9023\u7dda\u6c60\u5728 GSLB \u7684\u9023\u7dda\u8868\u88ab reset\uff0c\u5c0e\u81f4\u6240\u6709 db \u9023\u7dda\u5931\u80fd\u3002
"},{"location":"feedback/release-it/","title":"Release It","text":"\u9019\u672c\u66f8\u5617\u8a66\u628a\u4e00\u500b\u975e\u5e38\u8907\u96dc\u7684\u6771\u897f\uff0c\u7cfb\u7d71\u5316\u5730\u95e1\u8ff0\u51fa\u4f86\uff0c\u90a3\u5c31\u662f\uff1a\u7dad\u904b\u3002
"},{"location":"feedback/release-it/#\u524d\u8a00","title":"\u524d\u8a00","text":"\u7dad\u904b\u662f \u7dad\u6301\u904b\u4f5c \u7684\u7c21\u5beb\uff0c\u807d\u8d77\u4f86\u6bd4\u8d77\u5beb\u4e9b\u670d\u52d9\u7684\u65b0\u529f\u80fd\u66f4\u7c21\u55ae\uff0c \u4f46\u9019\u4e0d\u53ea\u8981\u6c42\u5c0d\u81ea\u5df1\u7684\u670d\u52d9\u66b8\u89e3\uff0c \u4e5f\u9700\u8981\u5c0d\u5f9e\u5e95\u5c64\u7684\u786c\u9ad4\u6a5f\u5668\u5230\u4e0a\u5c64\u7684\u8edf\u9ad4\u61c9\u7528\u4e2d\u9593\u6240\u6709\u7cfb\u7d71\u7684\u884c\u7232\u548c\u4e4b\u9593\u7684\u95dc\u4fc2\u90fd\u8981\u66b8\u89e3\u3002
\u7576\u6d41\u91cf\u4e0a\u5347\uff0c\u6216\u8005\u7bc0\u9ede\u8d8a\u4f86\u8d8a\u591a\uff0c\u4f60\u4e0d\u53ea\u9700\u8981\u55ae\u9ede\u7684\u66b8\u89e3\uff0c\u66f4\u9700\u8981\u5168\u9762\u6027\u7684\u53bb\u5be9\u8996\u670d\u52d9\u7684\u67b6\u69cb\u3002
\u95dc\u65bc\u4e8c\u9019\u500b\u6578\u5b57
\u300c\u4e8c\u300d\u9019\u500b\u6578\u5b57\u5728\u7db2\u8def\u670d\u52d9\u4e2d\u662f\u500b\u6709\u8da3\u7684\u6578\u5b57\uff0c \u56e0\u70ba\u5be6\u969b\u4e0a\u6211\u5011\u901a\u5e38\u6703\u8655\u7406\u7684\u6578\u91cf\u7d1a\u53ea\u6709\u4e09\u500b\uff1a \u96f6\u500b\u3001\u4e00\u500b\u548c\u591a\u500b\u3002
\u6240\u4ee5\u7576\u4f60\u6709\u4e00\u500b\u4ee5\u4e0a\u7684\u670d\u52d9\u6642\uff0c\u4f60\u9700\u8981\u8655\u7406\u7684\u6771\u897f\u5c31\u6703\u8b8a\u5f88\u591a\u3002
\u9664\u6b64\u4e4b\u5916\uff0c\u4e4b\u6240\u4ee5\u8b93\u7dad\u904b\u9019\u9ebc\u56f0\u96e3\u7684\u539f\u56e0\u4e5f\u5728\u65bc\u6bcf\u500b\u4f01\u696d\u751a\u81f3\u5230\u6bcf\u500b\u61c9\u7528\uff0c \u4ed6\u9700\u8981\u9762\u81e8\u7684\u7dad\u904b\u56f0\u96e3\u53ef\u80fd\u90fd\u4e0d\u4e00\u6a23\uff0c\u4f60\u5f88\u96e3\u627e\u5230\u4e00\u672c\u66f8\u4e00\u53e5\u8a71\uff0c\u5c31\u53ef\u4ee5\u89e3\u6c7a\u4f60\u7684\u554f\u984c\u3002
\u6700\u5f8c\uff0c\u7dad\u904b\u9084\u6709\u4e00\u500b\u7279\u8272\uff1a\u4f60\u627e\u4e0d\u5230\u6b63\u78ba\u7b54\u6848\uff0c\u4f60\u901a\u5e38\u90fd\u5728\u4e00\u4e9b\u6b0a\u8861\u4e2d\u505a\u9078\u64c7\u3002 \u5728\u5beb\u9019\u4efd\u5fc3\u5f97\u7684\u6642\u5019\uff0c\u6211\u4e5f\u5728\u601d\u8003\u8981\u600e\u9ebc\u628a\u9019\u9ebc\u62bd\u8c61\u7684\u6771\u897f\u5beb\u597d\uff0c \u9019\u4e3b\u8981\u9084\u662f\u56e0\u70ba\u6211\u5e0c\u671b\u81ea\u5df1\u5beb\u7684\u5fc3\u5f97\uff0c\u4e0d\u6b62\u662f\u7ffb\u8b6f\uff0c\u66f4\u662f\u4e00\u7a2e\u65b0\u7684\u8a6e\u91cb\u3002
\u9019\u4efd\u5fc3\u5f97\u4e3b\u8981\u5206\u6210\u4e09\u6bb5\uff08\u96d6\u7136\u66f8\u4e2d\u662f\u56db\u6bb5\uff09\uff1a
\u66f8\u4e2d\u5beb\u5f97\u6709\u8072\u6709\u8272\uff0c\u4f46\u5728\u9019\u88e1\u5c31\u50c5\u4ee5\u689d\u5217\u5f0f\u7684\u65b9\u5f0f\u64b0\u5beb\uff0c\u5e6b\u52a9\u5feb\u901f\u5be9\u8996\u548c\u56de\u61b6\u3002
\u5176\u4e2d\u6bcf\u500b\u554f\u984c\u90fd\u6709\u5e7e\u500b\u5c0d\u61c9\u7684\u89e3\u6cd5\uff0c\u53ef\u80fd\u662f\u66f8\u4e2d\u5beb\u7684\u4e5f\u53ef\u80fd\u662f\u81ea\u5df1\u7684\u7d93\u9a57\u548c\u60f3\u6cd5\u3002
\u6bcf\u4e00\u500b\u6848\u4f8b\u90fd\u6703\u6709\u500b\u5f15\u7528\uff0c\u4ee3\u8868\u9019\u500b\u6848\u4f8b\u7684\u51fa\u8655\u548c\u9801\u6578\uff08\u6ce8\u610f\uff0c\u9801\u6578\u5c0d\u61c9\u7684\u662f Release it! \u7b2c\u4e8c\u7248\uff09\u3002
"},{"location":"feedback/release-it/#tcp-\u985e\u578b","title":"TCP \u985e\u578b","text":"TCP \u5c0e\u81f4\u7684\u5931\u80fd\u3002
"},{"location":"feedback/release-it/#\u672a\u6b63\u78ba\u95dc\u9589\u9023\u7dda","title":"\u672a\u6b63\u78ba\u95dc\u9589\u9023\u7dda","text":"\u8acb\u6c42\u65b9\u900f\u904e VIP \u548c\u670d\u52d9\u7aef\u5efa\u7acb\u9023\u7dda\uff0c\u670d\u52d9\u7aef\u505a\u4e86 HA \u4e4b\u5f8c\uff0cTCP \u9023\u7dda\u4fbf\u81ea\u7136\u88ab\u68c4\u7528\u3002 \u4f46\u662f\u5c0d\u65bc\u8acb\u6c42\u65b9\uff0c\u56e0\u70ba VIP \u6c92\u6709\u8b8a\uff0c\u6240\u4ee5\u4ecd\u7136\u8a8d\u70ba\u9019\u689d\u9023\u7dda\u5b58\u5728\uff0c \u7136\u800c\u61c9\u7528\u7a0b\u5f0f\u537b\u5728\u9023\u7dda\u767c\u751f\u932f\u8aa4\u6642\u672a\u8655\u7406\u9019\u500b\u4f8b\u5916\u72c0\u6cc1\uff0c \u5c0e\u81f4\u7121\u6cd5\u6b63\u78ba\u95dc\u9589\u9023\u7dda\uff0c\u9032\u800c\u9023\u7dda\u6c60\u4e2d\u7684\u6240\u6709\u9023\u7dda\u90fd\u88ab\u8feb\u505c\u64fa\u3002
Case study, postmortem - p14
\u4f60\u53ef\u4ee5\uff1a
\u9019\u901a\u5e38\u51fa\u73fe\u5728 Java \u9019\u985e\u591a\u7dda\u7a0b\u4e14\u9700\u8981\u91cd\u8907\u5229\u7528\u9023\u7dda\u7684\u7a0b\u5f0f\uff0c \u6545\u800c\u5728 PHP\uff08\u5feb\u901f\u751f\u6ec5\u7684\u5b50\u7a0b\u5e8f\uff09 \u6216 Node.js\uff08\u55ae\u7dda\u7a0b\uff0clibuv\uff09 \u4f60\u5f88\u5c11\u6703\u770b\u5230\u9023\u7dda\u6c60\u7684\u5be6\u4f5c\u3002
\u4e0a\u9762\u8aaa\u6c92\u6709\u6b63\u78ba\u95dc\u9589\u9023\u7dda\u7684\u7a0b\u5f0f\u78bc\u5728\u9019\uff1a
Connection conn = null;\nStatement stmt = null;\ntry {\n // \u5982\u679c\u9023\u7dda\u6c60\u6c92\u6709\u9023\u7dda\u53ef\u7528\uff0c\u5c31\u6703\u5728\u9019\u908a\u7b49\u5f85\u3002\n // \u7136\u5f8c\u4f60\u901a\u5e38\u6703\u770b\u5230 HTTP 500 \u6216 Timeout \u7279\u5225\u9ad8\uff0c\n // \u4f46\u662f\u4f7f\u7528\u7684 CPU/Mem \u537b\u5f88\u4f4e\n conn = connectionPool.getConnection();\n stmt = conn.createStatement();\n // Do the things\n} finally {\n if (stmt != null) {\n stmt.close();\n }\n if (conn != null) {\n conn.close();\n }\n}\n
\u6709\u770b\u5230\u554f\u984c\u55ce\uff1f\u4e8b\u5be6\u4e0a\uff0c\u5f88\u591a\u6559\u79d1\u66f8\u4e0a\u90fd\u662f\u5efa\u8b70\u9019\u6a23\u5beb\u3002 \u4f46\u662f\u5982\u679c\u4f60\u6709\u6ce8\u610f\u904e JDBC \u7684\u6587\u4ef6\uff08\u61c9\u8a72\u6703\u548c\u5f88\u591a IDE \u6574\u5408\uff09\uff0c\u5c31\u6703\u767c\u73fe stmt.close()
\u9019\u500b\u51fd\u793a\u662f\u6703\u4e1f Exception \u7684\uff01
\u548c\u8cc7\u6599\u5eab\u5df2\u7d93\u5efa\u7acb\u597d\u9023\u7dda\uff0c\u5728\u50b3\u8f38\u8cc7\u6599\u6642\uff0c\u56e0\u70ba\u9632\u706b\u7246\u7684 session table \u91cd\u7f6e\uff0c \u5c0e\u81f4\u539f\u6709\u7684\u9023\u7dda\u5c01\u5305\u90fd\u88ab\u4e1f\u68c4\uff08\u6ce8\u610f\uff0c\u4e0d\u662f\u62d2\u7d55\uff09\uff0c \u9032\u800c\u8b93\u670d\u52d9\u548c\u8acb\u6c42\u7aef\u90fd\u8a8d\u70ba\u9023\u7dda\u4ecd\u5b58\u5728\uff0c\u5be6\u969b\u537b\u7121\u6cd5\u9032\u884c\u4efb\u4f55\u6e9d\u901a\u3002 \u6240\u4ee5\u5728\u7bc0\u9ede\u4e0a\u6703\u770b\u5230\u5f88\u9ad8\u7684 TCP Retransmission\u3002
Integration Points, The 5 A.M. Problem - p38
\u4f60\u53ef\u4ee5\uff1a
\u884c\u70ba\u5806\u7a4d\u5c0e\u81f4\u7684\u5931\u80fd\u3002
"},{"location":"feedback/release-it/#\u6301\u7e8c\u904b\u4f5c\u4e0b\u7684\u7d2f\u7a4d","title":"\u6301\u7e8c\u904b\u4f5c\u4e0b\u7684\u7d2f\u7a4d","text":"\u5728\u9ad8\u53ef\u7528\u6027\u4e0b\u7684\u591a\u500b\u7bc0\u9ede\uff0c\u7576\u670d\u52d9\u6709\u8457 \u6703\u96a8\u8457\u6d41\u91cf\u4e0a\u5347\u800c\u8b8a\u660e\u986f\u7684\u932f\u8aa4 \u6642\uff08\u4f8b\u5982\u8a18\u61b6\u9ad4\u5806\u7a4d\uff09\uff0c \u55ae\u4e00\u7bc0\u9ede\u7684\u5931\u80fd\u6703\u52a0\u901f\u5176\u4ed6\u7bc0\u9ede\u7684\u5931\u80fd\u3002 \u4f8b\u5982\uff0c\u539f\u672c\u6709\u4e09\u500b\u7bc0\u9ede\uff0c\u6bcf\u500b\u7bc0\u9ede\u5206\u914d\u4e09\u5206\u4e4b\u4e00\u7684\u6d41\u91cf\uff0c \u7576\u5176\u4e2d\u4e00\u53f0\u56e0\u70ba\u8a18\u61b6\u9ad4\u5806\u7a4d\uff0c\u5c0e\u81f4\u5931\u80fd\u6642\u6703\u52a0\u901f\u5269\u4e0b\u5169\u53f0\u7684\u6d88\u4ea1\u3002
\u5728\u672a\u7372\u5f97\u6539\u5584\u524d\uff08\u901a\u5e38\u8a18\u61b6\u9ad4\u5806\u7a4d\u7684\u932f\u8aa4\u4e26\u4e0d\u5bb9\u6613\u6539\u5584\uff09\uff0c \u53ef\u80fd\u9700\u8981\u5b9a\u671f\u53bb\u91cd\u555f\u670d\u52d9\uff0c\u6216\u8005\u4eba\u5de5\u7684\u4ecb\u5165\u3002
Chain Reactions, Searching... - p48
\u4f60\u53ef\u4ee5\uff1a
\u670d\u52d9\u7aef\u4e26\u672a\u544a\u77e5\u8acb\u6c42\u7684\u932f\u8aa4\u662f\u66ab\u6642\u6027\uff08\u4f8b\u5982\u9396\u6b7b\uff09\u9084\u662f\u6c38\u4e45\u6027\uff08\u4f8b\u5982\u8f38\u5165\u683c\u5f0f\u932f\u8aa4\uff09\uff0c \u6240\u4ee5\u8acb\u6c42\u7aef\u53cd\u8986\u91cd\u65b0\u767c\u9001\uff0c\u52a0\u901f\u96d9\u65b9\u7684\u6d88\u4ea1\u3002
Cascading Failures - p50
\u4f60\u53ef\u4ee5\uff1a
\u524d\u7aef\u4f7f\u7528\u8005\u932f\u8aa4\u8a2d\u7f6e\u7684\u4ee3\u7406\u8005 \uff08\u4f8b\u5982 Chrome \u7684\u512a\u5316\u8a2d\u5b9a\uff09 \u6703\u53cd\u8986\u767c\u9001\u8acb\u6c42\uff0c \u4e26\u4e14\u9019\u4e9b\u8acb\u6c42\u4e0d\u6703\u53bb\u7d00\u9304 session ID\uff0c\u5c0e\u81f4\u53cd\u8986\u5efa\u7f6e\u7121\u610f\u7fa9\u7684 session\uff0c\u52a0\u91cd\u670d\u52d9\u8ca0\u64d4\u3002
Unwanted Users - p57
\u4f60\u53ef\u4ee5\uff1a
\u9ad8\u8ca0\u8f09\u5c0e\u81f4\u65b7\u8def\u5668\u65b7\u96fb\uff0c\u9032\u800c\u8b93\u6240\u6709\u4e3b\u6a5f\u95dc\u6a5f\u3002 \u7576\u8981\u91cd\u65b0\u555f\u52d5\u6a5f\u5668\u6642\uff0c\u6bcf\u53f0\u4e3b\u6a5f\u5728\u91cd\u958b\u6a5f\u7684\u904e\u7a0b\u4e2d\u8acb\u6c42\u6bd4\u5e73\u6642\u66f4\u591a\u7684\u96fb\u6d41\uff0c\u5c0e\u81f4\u65b7\u8def\u5668\u53cd\u8986\u8df3\u96fb\u3002
Dogpile - p79
\u4f60\u53ef\u4ee5\uff1a
\u932f\u8aa4\u914d\u7f6e\u901a\u5e38\u662f\u670d\u52d9\u5931\u80fd\u7684\u5927\u90e8\u5206\u539f\u56e0\u3002
"},{"location":"feedback/release-it/#\u81ea\u52d5\u5316\u7684\u66b4\u885d","title":"\u81ea\u52d5\u5316\u7684\u66b4\u885d","text":"\u5957\u4ef6\u7ba1\u7406\u5de5\u5177\u5728\u670d\u52d9\u5347\u7248\u904e\u7a0b\u628a\u9810\u671f\u88ab\u95dc\u6389\u7684 auto-scaler \u6a5f\u5236\u555f\u52d5\uff0c \u5c0e\u81f4 auto-scaler \u56e0\u70ba\u904e\u6642\u7684\u932f\u8aa4\u72c0\u614b\uff0c\u8a8d\u70ba\u61c9\u8a72\u95dc\u9589\u5927\u90e8\u5206\u7bc0\u9ede\u3002
Outage Amplification - p80
\u4f60\u53ef\u4ee5\uff1a
\u8cc7\u6599\u5eab\u4e2d\u7684\u8cc7\u6599\u672c\u4f86\u662f metadata\uff0c\u4e26\u4e0d\u9810\u671f\u4ed6\u6703\u6709\u5927\u91cf\u8cc7\u6599\u3002 \u4f46\u610f\u5916\u5c31\u767c\u751f\u5728\u9019\u4e9b\u7406\u6240\u7576\u7136\u7684\u4e8b\u60c5\u4e0a\uff0c\u61c9\u7528\u7a0b\u5f0f\u8655\u7406\u6642\u6c92\u6709\u4f7f\u7528 pagination\uff0c \u5927\u91cf\u7684\u8cc7\u6599\u5403\u5149\u7bc0\u9ede\u6240\u6709\u7684\u8a18\u61b6\u9ad4\uff0c\u4e26\u5c0e\u81f4\u5931\u80fd\u3002
Unbounded Result Sets - p87
\u4f60\u53ef\u4ee5\uff1a
\u7576\u7269\u4ef6\u904b\u7b97\u932f\u8aa4\u6642\uff0c\u9700\u8981\u4e1f\u51fa\u932f\u8aa4\uff0c\u800c\u975e\u7e7c\u7e8c\u8b93\u8a72\u7269\u4ef6\u63a5\u8457\u9032\u884c\u5f8c\u7e8c\u5de5\u4f5c\u5f8c\u518d\u4e1f\u932f\u3002
We Got the Fax\u2013\u2013It's All Black, p107
\u4f60\u53ef\u4ee5\uff1a
\u7576\u5176\u4e2d\u4e00\u500b\u5916\u90e8\u4f9d\u8cf4\u80fd\u8655\u7406\u7684\u91cf\u8b8a\u5f88\u4f4e\u6642\uff0c\u5c0e\u81f4\u5176\u4ed6\u670d\u52d9\u5b8c\u5168\u5931\u80fd\u3002 \u9019\u662f\u56e0\u70ba\u9023\u7dda\u6c60\u7684\u9023\u7dda\u662f\u5171\u7528\u7684\uff0c\u5176\u5916\u986f\u7279\u5fb5\u5305\u62ec\uff1a\u983b\u5bec\u5f88\u9ad8\u3001\u6f5b\u6642\u5f88\u9577\u3001\u8cc7\u6e90\uff08CPU/Mem\uff09\u4f7f\u7528\u7387\u4f4e\u3002
\u4f60\u53ef\u4ee5\uff1a
Trampled by Your Own Customers, p277
\u65e9\u671f\u958b\u767c\u901a\u5e38\u662f\u4e00\u5e74\u56db\u5230\u4e94\u6b21\u66f4\u65b0\uff0c\u6bcf\u4e00\u6b21\u66f4\u65b0\u90fd\u6703\u662f\u4e00\u5927\u5305\uff0c \u4f5c\u8005\u4e5f\u5206\u4eab\u5176\u4e2d\u4e00\u6b21\u6848\u4f8b\uff0c\u4e00\u500b\u9577\u9054\u4e00\u5e74\u591a\u7684\u958b\u767c\u3002
\u9019\u6b21\u66f4\u65b0\u4e3b\u8981\u662f\u5728\u91cd\u69cb\u6574\u500b\u7dda\u4e0a\u8cfc\u7269\u7db2\u7ad9\uff0c\u4e26\u63d0\u4f9b\u4e00\u4e9b\u500b\u4eba\u5316\u9996\u9801\u3002
\u90a3\u6642\u7684\u6280\u8853\u53ea\u6709\u4f3a\u670d\u5668\u5074\u6e32\u67d3\uff08server side render\uff09\uff0c \u4e14\u670d\u52d9\u662f\u4ee5\u55ae\u77f3\uff08monolithic\uff09\u7db2\u7ad9\u5448\u73fe\u3002 \u986f\u7136\u5927\u5bb6\u90fd\u662f\u6709\u7d93\u9a57\u7684\u4eba\uff0c\u5373\u4f7f\u958b\u767c\u5b8c\u3001\u8a2d\u7f6e\u597d\u7dda\u4e0a\u74b0\u5883\uff0c\u4ecd\u9810\u5148\u505a\u4e86\u5f88\u591a\u8ca0\u8f09\u6e2c\u8a66\u3001QA \u9a57\u8b49\u7b49\u7b49\u3002
\u95dc\u65bc\u55ae\u77f3\u5f0f\u7684\u7db2\u7ad9\u65e9\u671f\u5728\u958b\u767c\u7684\u6642\u5019\uff0c\u901a\u5e38\u8b93\u4e00\u500b\u670d\u52d9\u8ca0\u8cac\u5168\u90e8\u7684\u529f\u80fd\uff0c \u5305\u62ec\u767b\u5165\u8a3b\u518a\u3001\u7522\u54c1\u5217\u8868\u3001\u8cfc\u7269\u8eca\u3001\u91d1\u6d41\u7b49\u7b49\u3002 \u96d6\u7136\u65b9\u4fbf\u7ba1\u7406\uff0c\u4f46\u7dad\u904b\u4e0a\u537b\u6703\u51fa\u73fe\u5f88\u591a\u554f\u984c\uff0c\u9019\u88e1\u5c31\u4e0d\u5217\u8209\u4e86\u3002
\u73fe\u5728\u5927\u591a\u90fd\u662f\u5206\u6563\u5f0f\u7684\u5fae\u670d\u52d9\uff0c\u4f46\u4ecd\u53ef\u80fd\u6703\u900f\u904e\u4e00\u4e9b\u7a0b\u5f0f\u4e0a\u7684\u624b\u6cd5\uff08\u4f8b\u5982\uff0c service-weaver\uff09 \u8b93\u773e\u591a\u7684\u5fae\u670d\u52d9\u4fdd\u6709\u55ae\u77f3\u7684\u4fbf\u5229\u6027\uff0c\u540c\u6642\u53c8\u6709\u5fae\u670d\u52d9\u7684\u9ad8\u53ef\u9760\u6027\u3002
\u53e6\u5916\uff0c\u4f60\u53ef\u80fd\u6703\u4ee5\u70ba\u55ae\u77f3\u5f0f\u7684\u7db2\u7ad9\u6703\u8b93\u524d\u5f8c\u7aef\u66f4\u6709\u6548\u7684\u4e32\u63a5\uff0c\u4f46\u6839\u64da\u5eb7\u5a01\u5b9a\u5f8b\uff0c \u524d\u5f8c\u7aef\u7684\u4e32\u63a5\u6548\u7387\u53d7\u5236\u65bc\u516c\u53f8\u5167\u90e8\u6e9d\u901a\u7684\u983b\u7387\u548c\u7ba1\u9053\u800c\u975e\u4f7f\u7528\u4e0a\u7684\u6280\u8853\u548c\u5de5\u5177\u3002 \u63db\u53e5\u8a71\u8aaa\uff0c\u4e0d\u7ba1\u662f\u524d\u5f8c\u7aef\u5206\u96e2\u3001\u55ae\u77f3\u5f0f\uff0c \u5982\u679c\u516c\u53f8\u74b0\u5883\u4e0a\u8b93\u9019\u5169\u500b\u5718\u968a\u5206\u96e2\u800c\u9bae\u5c11\u4ea4\u6d41\uff0c \u4f60\u4ecd\u53ef\u80fd\u9762\u81e8\u524d\u5f8c\u7aef\u4e32\u63a5\u56f0\u96e3\u7684\u7a98\u5883\u3002
\u4ed6\u5011\u7684\u8ca0\u8f09\u6e2c\u8a66\u5f88\u56b4\u8b39\uff08\u81f3\u5c11\u5c31\u6211\u500b\u4eba\u4f86\u8aaa\uff0c\u6c92\u770b\u904e\u9019\u9ebc\u56b4\u8b39\u7684\u8ca0\u8f09\u6e2c\u8a66\uff09\uff0c \u4f7f\u7528\u5be6\u969b\u4f7f\u7528\u8005\u6703\u7528\u7684\u6a5f\u5668\uff08Windows \u800c\u975e Linux\uff09\uff0c\u4e14\u6a5f\u5668\u4eba\u6703\u9ede\u64ca\u9801\u9762\uff0c \u4e26\u6a21\u64ec\u4f7f\u7528\u8005\u6ed1\u52d5\u9801\u9762\uff0c\u9ede\u64ca\u7522\u54c1\u7d30\u7bc0\u7b49\u7b49\uff0c \u4e26\u5728\u6578\u500b\uff08\u7570\u6b65\u4e14\u4f7f\u7528\u4e0d\u540c\u9023\u7dda\uff09\u4f7f\u7528\u8005\u4e2d\u6311\u51fa\u5e7e\u500b\u771f\u7684\u6703\u8d70\u91d1\u6d41\u3001\u8cfc\u8cb7\u7269\u54c1\u7684\u6d41\u7a0b\u3002
\u6e2c\u8a66\u7684\u91cf\u662f\u540c\u6642\u6709 1,200 \u500b\u4f7f\u7528\u8005\u5728\u4f7f\u7528\uff0c \u7576\u7136\u9019\u4e9b\u6d41\u91cf\uff0c\u90fd\u4f86\u6e90\u65bc\u771f\u5be6\u7684\u7dda\u4e0a\u7d71\u8a08\u6578\u64da\uff08\u9019\u9084\u662f\u6de1\u5b63\u7684\u6642\u5019\uff0c\u5f88\u986f\u7136\u5b83\u662f\u500b\u5927\u7db2\u7ad9\uff09\u3002
\u7136\u5f8c\u5728\u6e2c\u8a66\u7684\u6642\u5019\uff0c\u58d3\u529b\u6e2c\u8a66\u8b93\u670d\u52d9\u6574\u500b\u5931\u80fd\uff0c\u5404\u500b\u7bc0\u9ede\u56e0\u70ba\u9ad8\u8ca0\u8f09\uff0c\u88ab\u8feb\u4e2d\u65b7\u3002
\u9019\u662f\u597d\u4e8b\uff0c\u56e0\u70ba\u81f3\u5c11\u4ed6\u5011\u4e0d\u662f\u5728\u7dda\u4e0a\u7684\u74b0\u5883\u4e0b\u958b\u59cb\u4fee\u932f\u548c\u627e\u51fa\u6709\u554f\u984c\u7684\u4f9d\u8cf4\u548c\u670d\u52d9\u3002 \u7d93\u904e\u4e09\u500b\u6708\uff0c\u53cd\u8986\u7684\u8abf\u6574\uff0c\u4e26\u61c9\u7528\u4e00\u4e9b\u7d55\u5999\u7684\u62db\u5f0f\u6210\u529f\u628a\u8ca0\u8f09\u6490\u9ad8\uff0c \u4e26\u5141\u8a31\u627f\u53d7\u7576\u521d\u6e2c\u8a66\u7684\u5341\u500d\uff0c12,000 \u500b\u4f7f\u7528\u8005\u7684\u91cf\u3002 \u662f\u6642\u5019\u8fce\u4f86\u4e0a\u7dda\u4e86\uff01
\u4e5d\u9ede\u4e0a\u7dda\uff0c\u900f\u904e\u5f8c\u53f0\u76e3\u63a7\uff0c\u670d\u52d9\u5728\u4e5d\u9ede\u4e94\u5206\u6642\u7684 session \u91cf\u9054\u5230 10,000\uff1b \u4e5d\u9ede\u5341\u5206\u6642\uff0c\u9054\u5230 50,000\uff1b \u4e5d\u9ede\u4e09\u5341\u5206\u6642\uff0c\u9054\u5230 250,000\uff0c\u4e26\u8b93\u6574\u500b\u670d\u52d9\u5931\u80fd\u4e86\u3002
\u767c\u751f\u4e86\u4ec0\u9ebc\u4e8b\uff1f
\u5373\u4f7f\u9019\u9ebc\u56b4\u8b39\uff0c\u73fe\u5be6\u7684\u60c5\u6cc1\u537b\u6c38\u9060\u6709\u4f60\u60f3\u4e0d\u5230\u7684\u72c0\u6cc1\u767c\u751f\uff1a
\u6211\u8a8d\u70ba\u4e8b\u4ef6\u4e3b\u8981\u6b78\u56e0\u65bc\u5e7e\u9ede\uff1a
\u505a\u4e00\u53f0 server \u548c client\uff0c\u4ed6\u6703\u6a21\u64ec\u4e00\u4e9b\u5e95\u5c64\uff08\u7db2\u8def\u9023\u7dda\u4e0a\uff09\u904b\u4f5c\u7684\u7570\u5e38\u884c\u70ba\uff1a
RST
\u6216\u5176\u4ed6\u53ef\u80fd\uff1bSYN
\u6216 ACK
\u7684\u8a0a\u865f\uff1bACK
\uff0c\u5c0e\u81f4\u4e00\u76f4\u91cd\u65b0\u767c\u9001\uff08retransmission\uff09\uff1b\u7136\u5f8c\u78ba\u4fdd\u904e\u53bb\u7684\u9023\u7dda\u662f\u80fd\u627f\u53d7\u6216\u81f3\u5c11\u4e0d\u6703\u8b93\u9019\u4e9b\u932f\u8aa4\u7684\u9023\u7dda\u5f71\u97ff\u5176\u4ed6\u9023\u7dda\u3002
"},{"location":"feedback/release-it/#\u904b\u884c\u74b0\u5883","title":"\u904b\u884c\u74b0\u5883","text":"\u7576\u7dda\u4e0a\u554f\u984c\u51fa\u932f\u6642\uff0c\u6709\u6642\u4e0d\u662f\u5728\u61c9\u7528\u7a0b\u5f0f\u4e2d\u52a0\u4e0a\u65e5\u8a8c\uff08log\uff09\u5c31\u80fd\u627e\u5230\u7684\uff0c \u4f60\u53ef\u80fd\u6703\u9700\u8981\u9032\u5230\u6a5f\u5668\u4e2d\u9032\u884c\u8a3a\u65b7\u3002 \u53ef\u4ee5\u8a3a\u65b7\u7684\u524d\u63d0\u662f\uff1a\u4f60\u8981\u5c0d\u4f60\u7684\u61c9\u7528\u7a0b\u5f0f\u548c\u5176\u904b\u884c\u74b0\u5883\u6709\u8db3\u5920\u7684\u77ad\u89e3\uff0c\u4ee5\u4e0b\u5206\u5e7e\u500b\u9762\u5411\uff1a
\u76f8\u95dc\u7684\u57fa\u790e\u77e5\u8b58\u548c\u6ce8\u610f\u4e8b\u9805\uff0c \u4e3b\u8981\u5206\u5169\u985e\uff0c\u7db2\u8def\u548c\u96fb\u8166\uff08\u6216\u7a31\u904b\u884c\u63a7\u5236\u3001\u7bc0\u9ede\uff09\uff1a
\u8981\u91d0\u6e05\u6574\u500b\u7db2\u8def\u7684\u904b\u884c\uff0c\u77ed\u77ed\u5e7e\u884c\u5b57\u4e0d\u592a\u53ef\u80fd\uff0c \u6211\u5efa\u8b70\u5c31\u4e00\u9ede\u4e00\u9ede\u5438\u6536\uff0c\u914d\u4e0a\u4e00\u4e9b\u5be6\u52d9\u7d93\u9a57\u6703\u8b93\u4f60\u66f4\u6709\u611f\u3002
\u4e00\u822c\u4f86\u8aaa\uff0c\u6703\u900f\u904e\u7db2\u8def\u53bb\u8d70\u5230\u6307\u5b9a\u7684\u7bc0\u9ede\uff0c\u5176\u4e2d\u8fa8\u8b58\u7bc0\u9ede\u7684\u65b9\u5f0f\u6709\u5169\u7a2e\uff1a
hostname
\u7372\u5f97\u3002\u5169\u8005\u5408\u5728\u4e00\u8d77\u7a31\u70ba \u5b8c\u6574\u7db2\u57df\u540d\u7a31\uff08Fully Qualified Domain Name, FQDN\uff09\u3002 \u63db\u53e5\u8a71\u8aaa\uff0c\u4e00\u53f0\u6a5f\u5668\u53ef\u4ee5\u6709\u5f88\u591a\u500b domain/FQDN\uff0c\u800c\u4e14 Hostname \u53ef\u80fd\u6703\u548c domain \u4e0d\u4e00\u6a23\u3002
\u9664\u6b64\u4e4b\u5916\uff0c\u5728\u958b\u767c\u74b0\u5883\u4e2d NIC \u53ef\u80fd\u6709\u591a\u500b\uff0c\u4f8b\u5982\uff1a
$ ifconfig \nlo0: <loopback>\ngif0: <tunnel for ipv4,6>\nstf0: <tunnel for ipv4,6>\nap1: <access-point mostly for WiFi>\nen0: <ethernet>\nen*: <more ethernet>\nawdl0: <apple wireless direct link for somthing like AirDrop>\nbridge0: <for virtual>\nllw0: <low-latency WLAN>\nutun0: <tunnel for VPN>\nutun*: <more tunnel>\n
\u4f46\u5728\u7dda\u4e0a\u74b0\u5883\u53ef\u80fd\u5c31\u53ea\u6703\u6709\u4e00\u500b\u662f\u7d66\u61c9\u7528\u7a0b\u5f0f\u9023\u7dda\u7528\u3001\u4e00\u500b\u662f\u7d66\u5f8c\u53f0\u7ba1\u7406\u6216\u8cc7\u6599\u5099\u4efd\u7528\uff0c \u9019\u5169\u500b\u63a5\u53e3\u53ef\u80fd\u5404\u81ea\u6709\u7368\u7acb\u7684 IP\uff08\u9019\u6642\u5f88\u53ef\u80fd\u5c31\u5c0d\u61c9\u5230\u4e0d\u540c\u7684 domain\uff09\u3002 \u4e5f\u53ef\u80fd\u662f\u4e00\u500b\u61c9\u7528\u7a0b\u5f0f\u5169\u500b NIC \u4f46\u90fd\u662f\u76f8\u540c\u7684 IP\uff0c \u9019\u6642\u4f7f\u7528\u7684\u6280\u8853\u7a31\u70ba\u642d\u63a5\uff08bonding/teaming\uff09\uff0c\u76ee\u7684\u662f\u5206\u6524\u51fa\u53bb\u7684\u6d41\u91cf\u3002 \u4e5f\u56e0\u70ba\u9019\u6a23\uff0c\u6709\u6642\u5728\u5efa\u7acb\u61c9\u7528\u7a0b\u5f0f\u7684\u6642\u5019\u6211\u5011\u4e0d\u80fd\u7d81\u5b9a\u6240\u6709\u7684 NIC\uff080.0.0.0:8080
\uff09 \u800c\u662f\u8981\u6307\u5b9a domain \u6216 IP\uff08app.example.com:8080
\u6216 172.168.1.2
\uff09\u3002
\u5206\u70ba\u4e09\u985e\uff1a\u5be6\u9ad4\u6a5f\uff08physical host\uff09\u3001 \u865b\u64ec\u6a5f\uff08virtual machine, VM\uff09\u3001 \u5bb9\u5668\uff08container\uff09\uff0c \u6700\u5f8c\u6703\u5728\u4ecb\u7d39\u4e00\u4e9b\u96f2\u7aef\u74b0\u5883\u7684\u6ce8\u610f\u4e8b\u9805\u3002
"},{"location":"feedback/release-it/#\u5be6\u9ad4\u6a5f","title":"\u5be6\u9ad4\u6a5f","text":"\u4e00\u822c\u4f86\u8aaa\u548c\u958b\u767c\u74b0\u5883\u4e26\u4e0d\u6703\u76f8\u5dee\u592a\u591a\uff0c\u90fd\u662f\u591a\u6838\u5fc3\u3001x86\u300164 \u4f4d\u5143\u3001\u76f8\u4f3c\u7684\u6642\u9418\u6676\u7247\u3002 \u4e3b\u8981\u5dee\u7570\u53ef\u80fd\u5728\u65bc\u8cc7\u6599\u4e2d\u5fc3\u7684\u4e3b\u6a5f\u5132\u5b58\u7a7a\u9593\u901a\u5e38\u4e0d\u6703\u592a\u5927\uff0c\u4ed6\u901a\u5e38\u6703\u900f\u904e NAS \u6216 SAN \u4f86\u64f4\u5145\u3002 \u9019\u662f\u70ba\u4e86\u8b93\u55ae\u53f0\u6a5f\u5668\u7684\u6210\u672c\u964d\u4f4e\uff0c\u8b93\u6c34\u5e73\u64f4\u5c55\u53ef\u4ee5\u7bc0\u7701\u5730\u88ab\u9054\u6210\u3002
\u9664\u6b64\u4e4b\u5916\uff0c\u5982\u679c\u6709\u7279\u6b8a\u61c9\u7528\u9700\u8981\u4f7f\u7528\u5230 GPU \u6216\u9ad8 RAM\uff08\u4f8b\u5982\u6a5f\u5668\u5b78\u7fd2\u3001\u5716\u5f62\u904b\u7b97\uff09 \u624d\u6703\u984d\u5916\u8ce6\u4e88\u8a72\u61c9\u7528\u7279\u6b8a\u6a5f\u5668\u3002
"},{"location":"feedback/release-it/#\u865b\u64ec\u6a5f","title":"\u865b\u64ec\u6a5f","text":"\u73fe\u5728\u7684\u7db2\u8def\u61c9\u7528\u7bc0\u9ede\u6beb\u7121\u7591\u554f\u662f\u4ee5\u865b\u64ec\u6a5f\u4f5c\u70ba\u4e3b\u5c0e\uff0c\u96d6\u7136\u72a7\u7272\u4e86\u4e00\u4e9b\u8cc7\u6e90\u90fd\u662f\u537b\u63db\u4f86\u4e86\u5f88\u5927\u7684\u7ba1\u7406\u65b9\u4fbf\u3002 \u4f46\u662f\u865b\u64ec\u6a5f\u9084\u662f\u6709\u4e9b\u554f\u984c\uff0c\u4f8b\u5982\u5b83\u7684\u6548\u80fd\u662f\u96e3\u9810\u671f\u7684\uff0c\u9019\u88e1\u5305\u62ec CPU\u3001\u8a18\u61b6\u9ad4\u3001\u7db2\u8def\u3002 \u9019\u662f\u56e0\u70ba\u639b\u8f09\u865b\u64ec\u6a5f\u7684\u4e3b\u6a5f\uff08host\uff09\uff0c\u6703\u70ba\u4e86\u8cc7\u6e90\u8abf\u5ea6\u800c\u66ab\u505c\u9019\u4e9b\u865b\u64ec\u6a5f\u7684\u904b\u4f5c\u3002
\u9019\u807d\u8d77\u4f86\u53ef\u4ee5\u88ab\u63a5\u53d7\uff0c\u56e0\u70ba\u7db2\u8def\u61c9\u7528\u7684\u6f5b\u6642\u4e00\u76f4\u90fd\u662f\u96e3\u4ee5\u9810\u671f\u7684\uff0c \u4f46\u5982\u679c\u90a3\u4e9b\u88ab\u8feb\u66ab\u505c\u7684\u7bc0\u9ede\u662f\u91cd\u8981\u7684\u670d\u52d9\uff0c\u7206\u70b8\u534a\u5f91\u53ef\u80fd\u5c31\u6703\u5f88\u5927\u4e86\u3002 \u4f8b\u5982\u7ba1\u7406\u53e2\u96c6\u7684\u7bc0\u9ede\uff0c\u5982 auto-scaling\u3001\u670d\u52d9\u767c\u73fe\u6216\u5171\u8b58\u6f14\u7b97\u3002
\u9664\u6b64\u4e4b\u5916\uff0c\u6642\u9418\u7684\u504f\u79fb\u5728\u9019\u500b\u74b0\u5883\u4e0b\uff0c\u7522\u751f\u4e86\u66f4\u5927\u7684\u8b8a\u6578\u3002 \u865b\u64ec\u6a5f\u6703\u70ba\u4e86\u548c\u4e3b\u6a5f\u5c0d\u9f4a\u6642\u9418\u800c\u5f37\u5236\u8abf\u6574\u6642\u9418\uff0c \u5c0d\u61c9\u7528\u4f86\u8aaa\uff0c\u6642\u9593\u5c31\u53ef\u80fd\u6703\u4e82\u8df3\uff08\u6703\u5f80\u524d\u4e5f\u6703\u5f80\u5f8c\uff09\uff0c\u5982\u679c\u61c9\u7528\u662f\u5c0d\u6642\u9593\u654f\u611f\u7684\uff0c\u5c31\u9700\u8981\u6ce8\u610f\u3002
"},{"location":"feedback/release-it/#\u5bb9\u5668","title":"\u5bb9\u5668","text":"\u5bb9\u5668\u901a\u5e38\u662f\u958b\u767c\u8005\u9700\u8981\u53bb\u8a2d\u8a08\u548c\u8abf\u6574\u7684\u904b\u884c\u63a7\u5236\uff0c\u76f8\u5c0d\u800c\u8a00\u865b\u64ec\u6a5f\u5247\u662f\u7cfb\u7d71\u7ba1\u7406\u54e1\u9700\u8981\u53bb\u8655\u7406\u7684\u3002 \u5bb9\u5668\u5f88\u50cf\u5728\u96f2\u7aef\u4e0a\u7ba1\u7406\u865b\u64ec\u6a5f\uff0c\u4f60\u4e0d\u6703\u9810\u671f\u4ed6\u7684 IP \u6046\u4e45\u4e0d\u8b8a\u4e5f\u4e0d\u6703\u628a\u91cd\u8981\u7684\u8cc7\u6599\u653e\u9032\u5176\u6a94\u6848\u7cfb\u7d71\u4e2d\uff0c \u56e0\u70ba\u5b83\u901a\u5e38\u662f\u77ed\u66ab\u5b58\u5728\u7684\u3002
\u5bb9\u5668\u6e1b\u5c11\u4e86\u958b\u767c\u74b0\u5883\u548c\u7dda\u4e0a\u74b0\u5883\u7684\u5dee\u7570\uff0c\u4f46\u4ed6\u4ecd\u6709\u4e00\u4e9b\u56f0\u5883\uff0c\u7136\u800c\u96a8\u8457\u5176\u767c\u5c55\uff0c\u9019\u4e9b\u56f0\u5883\u5df2\u7d93\u4e00\u4e00\u88ab\u89e3\u6c7a\u4e86\u3002 \u4e0d\u904e\u5728\u4f7f\u7528\u4e0a\u4ecd\u9700\u8981\u6ce8\u610f\u4e00\u4e9b\u4e8b\u60c5\uff1a
\u4f60\u6703\u9700\u8981\u4e00\u4e9b\u6642\u9593\u53bb\u9069\u61c9\u5bb9\u5668\u7684\u9664\u932f\u3002
\u5bb9\u5668\u7684\u56f0\u5883\u7db2\u8def\u5728\u5bb9\u5668\u4e16\u754c\u662f\u8907\u96dc\u7684\uff0c\u56e0\u70ba\u4f60\u53ef\u80fd\u4e0d\u6703\u5728 host \u4e0a\u66b4\u9732\u4ed6\u7684\u7db2\u8def\u57e0\uff0c \u4f46\u537b\u9700\u8981\u8b93\u4ed6\u6709\u80fd\u529b\u5c0d\u5916\u9023\u7dda\uff08\u63db\u53e5\u8a71\u8aaa\uff0c\u53ea\u51fa\u4e0d\u9032\uff09\u3002 \u6211\u5011\u901a\u5e38\u6703\u4f7f\u7528 VLAN\uff08\u6216\u8005\u8aaa\uff0coverlay network\uff09\u53bb\u6a4b\u63a5\u9019\u500b\u9023\u7dda\uff0c\u4e26\u7528\u8edf\u9ad4\u4ea4\u63db\u5668\u53bb\u4ea4\u63db\u5c01\u5305\u3002
\u9664\u6b64\u4e4b\u5916\uff0c\u5bb9\u5668\u901a\u5e38\u662f\u5c0f\u800c\u591a\u7684\uff0c\u6240\u4ee5\u4f60\u6703\u9700\u8981\u4e00\u500b\u81ea\u52d5\u5316\u7684\u7ba1\u7406\u7cfb\u7d71\uff08\u6216\u8005\u8aaa\uff0ccontrol plane\uff09\u3002
"},{"location":"feedback/release-it/#\u96f2\u7aef","title":"\u96f2\u7aef","text":"\u96d6\u7136\u4f60\u9700\u8981\u82b1\u4e9b\u6642\u9593\u642c\u9077\u61c9\u7528\u5230\u96f2\u7aef\u4e0a\uff0c\u4f46\u662f\u96f2\u7aef\u74b0\u5883\u63d0\u4f9b\u5f88\u591a\u512a\u52e2\uff0c \u6700\u4e3b\u8981\u7684\u5c31\u662f\u53ef\u7528\u6027\uff08\u9069\u5408\u505a auto-scaling\uff09\u548c\u4f4e\u6210\u672c\u3002\u4f46\u662f\u5728\u96f2\u7aef\u9700\u8981\u6ce8\u610f\uff1a
\u96f2\u7aef\u4e0a\u7684\u5bb9\u5668\u540c\u6642\u9762\u81e8\u8457 \u5bb9\u5668 \u548c \u96f2\u7aef\u4e0a\u7684\u865b\u64ec\u6a5f \u6703\u6709\u7684\u56f0\u5883\u3002 \u4f46\u662f\u96a8\u8457\u96f2\u7aef\u670d\u52d9\u7684\u6210\u719f\uff0c\u9019\u4e9b\u56f0\u96e3\u5176\u5be6\u90fd\u4e0d\u662f\u56f0\u96e3\uff0c\u53ea\u662f\u6703\u9700\u8981\u4f60\u82b1\u9ede\u6642\u9593\u53bb\u7814\u7a76\u548c\u7d2f\u7a4d\u7dad\u904b\u7d93\u9a57\u3002
"},{"location":"feedback/release-it/#\u55ae\u4e00\u7bc0\u9ede","title":"\u55ae\u4e00\u7bc0\u9ede","text":"\u55ae\u4e00\u7bc0\u9ede\u96d6\u7136\u53ea\u662f\u4e00\u500b\u9f90\u5927\u670d\u52d9\u7684\u57fa\u77f3\uff0c\u4f46\u662f\u5efa\u69cb\u826f\u597d\u7684\u7bc0\u9ede\uff0c\u6703\u5e6b\u52a9\u4f60\u5728\u5f8c\u7e8c\u7dad\u904b\u5927\u578b\u670d\u52d9\u7701\u4e0b\u5f88\u591a\u529f\u592b\u3002 \u800c\u6240\u8b02\u7684\u826f\u597d\u7bc0\u9ede\u7684\u8a2d\u8a08\uff0c\u901a\u5e38\u662f\u5728\u958b\u767c\u521d\u671f\u5c31\u8003\u616e\u9032\u53bb\uff0c\u5305\u62ec\u5f8c\u9762\u63d0\u7684\u670d\u52d9\u7684\u900f\u660e\u5316\u3002
\u90e8\u7f72\u548c\u8a2d\u5b9a\u7e3d\u7d50\u5e7e\u9ede\u6ce8\u610f\uff1a
\u76e3\u63a7\u7e3d\u7d50\u5e7e\u9ede\u6ce8\u610f\uff1a
/var/logs
\uff09\uff0c\u5bb9\u5668\u7684\u8a71\u55ae\u7d14\u8f38\u51fa\u5230 stdout
\u5c31\u53ef\u4ee5\u3002error
\u5c64\u7d1a\u7684\u65e5\u8a8c\u5e38\u614b\u51fa\u73fe\uff08\u4f8b\u5982\u4f7f\u7528\u8005\u8f38\u5165\u683c\u5f0f\u932f\u8aa4\u4e0d\u61c9\u70ba error
\uff09\u3002\u96a8\u8457\u6d41\u91cf\u8b8a\u591a\u6216\u70ba\u4e86\u9ad8\u53ef\u7528\u6027\uff08High Availability, HA\uff09\uff0c\u4e00\u500b\u670d\u52d9\u958b\u59cb\u5f9e\u55ae\u4e00\u7bc0\u9ede\u6210\u9577\u70ba\u4e00\u500b\u53e2\u96c6\u3002 \u9019\u6642\u6211\u5011\u770b\u5f85\u670d\u52d9\u5c31\u4e0d\u662f\u5f9e\u7bc0\u9ede\u7684\u89d2\u5ea6\u53bb\u770b\uff0c \u800c\u662f\u4e00\u500b\u7531\u670d\u52d9\u767c\u73fe\uff08service discovery\uff09\u3001\u8ca0\u8f09\u5e73\u8861\uff08load balance\uff09\u7d44\u6210\u7684\u53e2\u96c6\u3002
\u9019\u985e\u5de5\u5177\u5f88\u591a\uff0c\u5f9e\u50b3\u7d71\u7684\u55ae\u4e00\u8077\u8cac\u7684 ZooKeeper\u3001Consul\u3001Nginx\uff0c \u5230\u73fe\u5728\u5168\u90e8\u6574\u5408\u7684 Kubernetes\uff08\u6216\u6709\u9ede\u904e\u6642\u4f46\u5176\u5be6\u624d\u51fa\u751f\u5341\u5e7e\u5e74\u7684 Mesos\uff09\u3002 \u6211\u5011\u5728\u4f7f\u7528\u9019\u4e9b\u5de5\u5177\u7684\u6642\u5019\uff0c \u8981\u8003\u91cf\u5f9e\u516c\u53f8\u7684\u898f\u6a21\u3001\u670d\u52d9\u7684\u67b6\u69cb\u5230\u9019\u4e9b\u5de5\u5177\u672c\u8eab\u7684\u8fed\u4ee3\u6027\u548c\u52d5\u614b\uff08\u81ea\u52d5\u5316\uff09\u6027\uff0c \u4e5f\u5c31\u662f\u8aaa\u9019\u5de5\u5177\u662f\u5426\u65b9\u4fbf\u88ab\u66ff\u63db\u548c\u5347\u7d1a\u3002
\u9019\u88e1\u6211\u5011\u6703\u8ac7\u4e09\u7a2e\u985e\u578b\u7684\u8ca0\u8f09\u5e73\u8861\u65b9\u5f0f\uff0cDNS\u3001GSLB \u548c\u55ae\u7d14\u7684 LB\u3002 \u63a5\u8457\u518d\u8ac7\u5230\u76f8\u61c9\u7684 \u8cc7\u6e90\u7ba1\u7406 \u548c \u7db2\u8def\u8a2d\u5b9a \u7684\u6ce8\u610f\u4e8b\u9805\u3002
"},{"location":"feedback/release-it/#dns","title":"DNS","text":"\u53ea\u6709\u4eba\u624d\u80fd\u6c7a\u5b9a\u73fe\u5728\u9019\u500b\u670d\u52d9\u8981\u7528\u4ec0\u9ebc\u9818\u57df\u540d\u7a31\uff08domain name\uff09\uff0c\u800c\u9019\u500b\u540d\u7a31\u901a\u5e38\u662f\u4e0d\u6703\u6539\u8b8a\u7684\u3002 \u7576\u9019\u500b\u57df\u540d\u88ab\u6c7a\u5b9a\u4e86\uff0c\u5c31\u53ef\u4ee5\u8a3b\u518a\u9032 DNS \u4e2d\u3002 \u9019\u88e1\u8981\u6ce8\u610f\u7684\u662f\u7db2\u57df\u540d\u7a31\u53ef\u4ee5\u662f\u552f\u4e00\uff0c\u4f46\u662f\u76ee\u7684\u5730\u4f4d\u7f6e\u53ef\u80fd\u662f\u5206\u6563\u5728\u4e16\u754c\u5404\u5730\u3002
\u4f46\u662f\u5c0d\u65bc\u670d\u52d9\u63d0\u4f9b\u8005\u4f86\u8aaa\uff0c\u5373\u4f7f\u9001\u51fa\u591a\u500b IP \u4f4d\u7f6e\uff0c\u6700\u7d42\u5ba2\u6236\u9078\u64c7\u8981\u4f7f\u7528\u54ea\u500b IP\uff0c\u662f\u5ba2\u6236\u6c7a\u5b9a\u7684\u3002 \u5b83\u53ef\u80fd\u662f\u50b3\u7d71\u7684\u5faa\u74b0\u6bd4\u5c0d\uff08round robin\uff09\uff0c\u6216\u8005\u4f9d\u7167\u700f\u89bd\u5668\u7684\u908f\u8f2f\u53bb\u5224\u65b7\uff0c \u9019\u6642\u8981\u5229\u7528\u9019\u500b\u6a5f\u5236\u53bb\u505a\u5230\u5f48\u6027\u7684\u8ca0\u8f09\u5e73\u8861\uff0c\u5c31\u4e0d\u592a\u5be6\u969b\u4e86\uff0c\u56e0\u70ba\u63a7\u5236\u6b0a\u4e0d\u5728\u4f60\u8eab\u4e0a\u3002
\u95dc\u65bc DNS \u7684\u5f48\u6027
\u9019\u88e1\u6240\u8aaa\u7684\u5f48\u6027\uff0c\u662f\u6307\u7576\u670d\u52d9\u964d\u8f09\u751a\u81f3\u5931\u80fd\u4e86\uff0c\u5c31\u9700\u8981\u907f\u514d\u5ba2\u6236\u518d\u9001\u8acb\u6c42\u904e\u4f86\u3002 \u9019\u6642\uff0c\u5f48\u6027\u4e14\u5feb\u901f\u7684\u963b\u6b62\u6bcf\u500b DNS \u767c\u9001\u9019\u500b\u5931\u80fd\u7684 IP \u662f\u56f0\u96e3\u7684\u3002 \u56e0\u70ba DNS \u7684\u904b\u4f5c\u662f\u8907\u96dc \uff08\u53ef\u4ee5\u8aaa\u662f\u7db2\u8def\u4e16\u754c\u4e2d\u6700\u8907\u96dc\u7684\u4e00\u584a\uff0c \u60f3\u60f3\u90a3\u4e9b\u8def\u7531\u7684\u5354\u5b9a\uff0cRIP\u3001EIGRP\u3001OSPF\u3001BGP\uff09 \u4e14\u591a\u500b DNS server \u4e26\u4e0d\u662f\u7531\u4e00\u500b\u7d71\u4e00\u7684\u55ae\u4f4d\u7ba1\u7406\u7684\uff0c\u5728\u8a2d\u5b9a\u4e0a\u5f88\u53ef\u80fd\u51fa\u73fe\u5206\u6b67\u3002
"},{"location":"feedback/release-it/#gslb","title":"GSLB","text":"\u5c0d\u65bc\u9019\u7a2e\u4e0d\u540c\u5730\u5340\u7684\u8ca0\u8f09\u5e73\u8861\uff0c\u66f4\u5e38\u898b\u7684\u662f\u63d0\u4f9b\u591a\u500b GSLB\u3002 GSLB \u53ef\u4ee5\u505a\u5230\u6aa2\u67e5\u4e0b\u6e38\u7684\u5065\u5eb7\u72c0\u6cc1\u3001\u5f48\u6027\u5206\u914d\u6d41\u91cf\u5230\u4e0d\u540c\u7bc0\u9ede\uff0c \u6700\u91cd\u8981\u7684\u662f\u5b83\u901a\u5e38\u6b78\u4f60\u6240\u7ba1\uff0c\u6240\u4ee5\u4f60\u53ef\u4ee5\u5feb\u901f\u5c0d\u5b83\u9032\u884c\u4efb\u4f55\u8a2d\u5b9a \uff08\u7576\u7136\uff0c\u8a2d\u5b9a\u932f\u4e86\u5c31\u6703\u6b7b\u5f88\u5feb\uff09\u3002
\u5982\u679c\u4f60\u6709\u591a\u500b GSLB\uff08\u591a\u500b\u8cc7\u6599\u4e2d\u5fc3\uff09\uff0c\u4f60\u5fc3\u88e1\u8981\u6709\u500b\u5e95\uff1a \u4e26\u4e0d\u662f\u6bcf\u6b21\u8acb\u6c42\uff0c\u5ba2\u6236\u90fd\u6703\u4e56\u4e56\u7167\u8457\u524d\u6b21\u7684 GSLB \u9032\u4f86\u3002
"},{"location":"feedback/release-it/#\u8ca0\u8f09\u5e73\u8861\u5668","title":"\u8ca0\u8f09\u5e73\u8861\u5668","text":"\u9019\u5176\u5be6\u548c GSLB \u7684\u5de5\u4f5c\u8077\u8cac\u5f88\u50cf\uff0c\u53ea\u662f GSLB \u901a\u5e38\u662f\u4efb\u4f55\u5916\u90e8\u7684\u4eba\u90fd\u9023\u5f97\u5230\uff0c \u4f46\u662f\u9019\u88e1\u7684\u8ca0\u8f09\u5e73\u8861\u5668\u662f\u6307\u67d0\u670d\u52d9\uff08\u6216\u591a\u500b\u670d\u52d9\uff09\u524d\u9762\u7684\u5e73\u8861\u5668\uff0c \u901a\u5e38\u6703\u88ab\u653e\u9032\u79c1\u6709\u7684\u7db2\u8def\u74b0\u5883\u4e2d\uff0c\u4e26\u7b49\u5f85 GSLB \u628a\u6d41\u91cf\u5c0e\u6d41\u9032\u4f86\u3002
\u5982\u679c\u9019\u500b\u5e73\u8861\u5668\u662f\u8ca0\u8cac\u591a\u500b\u670d\u52d9\u7684\uff0c\u4ed6\u5c31\u6703\u6709\u5f88\u591a VIP(s)\uff0c\u7136\u5f8c\u6bcf\u500b IP \u5c0d\u61c9\u4e00\u500b\u670d\u52d9\uff08\u591a\u7bc0\u9ede\uff09\u3002
\u8ca0\u8f09\u5e73\u8861\u5668\u5176\u5be6\u548c GSLB \u4e00\u6a23\u90fd\u9700\u8981\u8a2d\u5b9a\uff1a
\u5c0d\u65bc\u5e73\u8861\u5668\u4f86\u8aaa\uff0c\u4e0d\u518d\u662f\u4ee5\u4e3b\u6a5f\u540d\u7a31\uff08hostname\uff09\u4f86\u505a\u641c\u5c0b\u540d\u7a31\uff0c\u800c\u662f\u4ee5\u5916\u90e8\u7db2\u5740 \uff08\u4e5f\u5c31\u662f domain\uff0c\u5176\u5be6\u672c\u4f86\u5c31\u662f\u9019\u6a23\uff0c\u53ea\u662f\u9019\u908a\u518d\u5f37\u8abf\u4e00\u6b21 hostname \u8ddf domain \u7684\u5dee\u7570\uff09\u3002
\u9664\u6b64\u4e4b\u5916\uff0c\u6709\u6642\u4ed6\u4e0d\u662f\u7528\u4f86\u505a\u300c\u8ca0\u8f09\u5e73\u8861\u300d\u800c\u662f\u670d\u52d9\u5f15\u5c0e\uff0c \u4f8b\u5982 HTTP \u8def\u5f91\u70ba /login
\u8d70\u9019\u3001/profile
\u8d70\u90a3\u3002
\u6d41\u91cf\u589e\u9577\u53ef\u80fd\u6703\u8017\u76e1\u7cfb\u7d71\u7684\u8cc7\u6e90\uff0c\u4ee5\u7db2\u8def\u70ba\u4f8b\uff0c\u6709\u5e7e\u9ede\u8981\u6ce8\u610f\uff1a
TIME_WAIT
\u72c0\u614b\uff09\u3002listen
socket \u7684\u4f47\u5217\uff0c \u53ea\u6709\u6210\u529f\u5efa\u7acb\u9023\u7dda\u7684 socket \u624d\u6703\u958b\u59cb\u79fb\u4ea4\u7d66\u61c9\u7528\u7a0b\u5f0f\u7aef\uff0c \u6240\u4ee5\u4f60\u53ef\u80fd\u6703\u6709\u5f88\u591a\u6b63\u5728\u4f47\u5217\u7684\u9023\u7dda\u3002\u7576\u4e0a\u8ff0\u884c\u70ba\u8e29\u5230\u9650\u5236\uff0c\u5c31\u6703\u958b\u59cb\u62d2\u7d55\u9032\u4f86\u7684\u8acb\u6c42\uff0c \u9032\u800c\u4fc3\u767c\u8acb\u6c42\u7aef\u91cd\u65b0\u5617\u8a66\u9023\u7dda\u6216\u91cd\u65b0\u767c\u9001\u8cc7\u6599\u7684\u6a5f\u5236\uff0c \u52a0\u91cd\u670d\u52d9\u7684\u8ca0\u64d4\u3002 \u9664\u6b64\u4e4b\u5916\uff0c\u4e00\u500b\u9023\u7dda\u6703\u6b77\u7d93\u5f88\u591a\u968e\u6bb5\u7684\u8655\u7406\uff0c\u9019\u6642\u5982\u679c\u61c9\u7528\u5c64\u7aef\u7684\u670d\u52d9\u5df2\u7d93\u6eff\u8f09\u4e86\uff0c \u6211\u5011\u7576\u7136\u6703\u5e0c\u671b\u8acb\u6c42\u5728\u5f88\u65e9\u7684\u968e\u6bb5\u5c31\u88ab\u56de\u62d2\u3002
\u4e00\u500b\u5065\u5168\u7684\u8ca0\u8f09\u5e73\u8861\u5668\uff0c\u5c31\u5f88\u9069\u5408\u5728\u6700\u4e00\u958b\u59cb\u5c31\u62d2\u7d55\u8acb\u6c42\uff0c\u6e1b\u8f15\u670d\u52d9\u7684\u8ca0\u64d4\u3002 \u9019\u6642\uff0c\u61c9\u7528\u7a0b\u5f0f\u7684\u5065\u5eb7\u6aa2\u67e5\u5c31\u5f88\u91cd\u8981\u4e86\uff0c \u8b93\u61c9\u7528\u7a0b\u5f0f\u63d0\u4f9b\u5b8c\u6574\u7684\u8cc7\u8a0a\uff0c\u9032\u800c\u8b93\u8ca0\u8f09\u5e73\u8861\u5668\u6709\u80fd\u529b\u5224\u65b7\u4e1f\u9032\u53bb\u7684\u91cf\u3002
\u9664\u6b64\u4e4b\u5916\uff0c\u4e5f\u53ef\u4ee5\u4f7f\u7528\u4e00\u4e9b\u9069\u61c9\u6027\u4e26\u884c\u8655\u7406\u7684\u6a5f\u5236\uff0c \u7136\u5f8c\u9019\u500b\u56de\u61c9\u53ef\u4ee5\u662f\u55ae\u7d14\u7684 HTTP 503 Service Unavailable\u3002
"},{"location":"feedback/release-it/#\u7db2\u8def\u76f8\u95dc\u7684\u6ce8\u610f\u4e8b\u9805","title":"\u7db2\u8def\u76f8\u95dc\u7684\u6ce8\u610f\u4e8b\u9805","text":"\u9019\u88e1\u6709\u5e7e\u500b\u9762\u5411\u53ef\u4ee5\u8003\u616e\uff1a
\u53e2\u96c6\u7ba1\u7406\u4e26\u4e0d\u662f\u4e00\u500b\u7c21\u55ae\u7684\u516c\u5f0f\uff0c\u628a\u6578\u5b57\u4ee3\u9032\u53bb\u5c31\u53ef\u4ee5\u5f97\u5230\u7d50\u679c\u3002 \u6211\u5011\u9700\u8981\u8003\u91cf\u81ea\u5df1\u7684\u9700\u6c42\u548c\u74b0\u5883\uff08\u8fed\u4ee3\u7387\u3001\u5373\u6642\u6027\u3001\u7dad\u904b\u6027\uff09\uff0c\u4f86\u6c7a\u5b9a\u6211\u5011\u9700\u8981\u88dc\u8db3\u54ea\u500b\u9762\u5411\u7684\u4e0d\u8db3\u3002
\u53e2\u96c6\u7ba1\u7406\u5de5\u5177\u662f\u7528\u4f86\u6e1b\u8f15\u4eba\u985e\u8ca0\u64d4\uff0c \u6240\u4ee5\u7576\u4e00\u500b\u4eba\u985e\u56e0\u70ba\u932f\u8aa4\u64cd\u4f5c\u5c0e\u81f4\u53e2\u96c6\u5931\u80fd\uff0c \u6211\u5011\u61c9\u8a72\u6b78\u548e\u65bc\u5de5\u5177\u7684\u5075\u932f\u6027\u548c\u7ba1\u7406\u6027\u7684\u5931\u80fd\u3002 \u4f46\u9019\u4e5f\u56de\u61c9\u5230\u53e2\u96c6\u7ba1\u7406\u4e26\u4e0d\u662f\u9b54\u6cd5\uff0c \u4ed6\u4ecd\u7136\u662f\u4e00\u884c\u4e00\u884c\u7684\u7a0b\u5f0f\u78bc\uff0c \u6240\u4ee5\u5728\u770b\u5230\u4e00\u4e9b\u6587\u7ae0\u6216\u65b0\u805e\u5728\u63a8\u5ee3\u67d0\u500b\u7ba1\u7406\u5de5\u5177\uff08\u4f8b\u5982 K8s\uff09\u6642\uff0c \u61c9\u9996\u5148\u601d\u8003\u9019\u5de5\u5177\u662f\u5426\u7b26\u5408\u9700\u6c42\uff0c \u5efa\u7f6e\u3001\u7dad\u904b\u3001\u62c6\u9664\uff08\u5de5\u5177\u4e00\u5b9a\u6703\u6709\u8fed\u4ee3\uff09\u7684\u6210\u672c\u548c\u5176\u5e36\u4f86\u7684\u6548\u76ca\u3002
AWS \u7684\u5931\u80fd\u6848\u4f8bAWS 2017 \u5e74\u767c\u751f\u7684 S3 \u5931\u80fd\u4e8b\u4ef6\uff0c \u5176\u4e2d\u7684\u5c4d\u6aa2\u5831\u544a\u53ef\u4ee5\u770b\u5230\uff1a
\u4e00\u4f4d\u6388\u6b0a\u7684\u7ba1\u7406\u8005\u6839\u64da\u6307\u5357\u9032\u884c\u64cd\u4f5c\uff0c\u5728\u57f7\u884c\u4e00\u500b\u95dc\u9589\u55ae\u4e00\u7bc0\u9ede\u7684\u6307\u4ee4\u6642\uff0c \u56e0\u70ba\u6307\u4ee4\u7684\u932f\u8aa4\uff0c\u5c0e\u81f4\u95dc\u9589\u4e86\u5927\u90e8\u5206\u7684\u7bc0\u9ede\u3002
\u5728\u6b64\u6211\u5011\u53ef\u4ee5\u53cd\u601d\u5e7e\u4ef6\u4e8b\u60c5\uff1a
\u6211\u5011\u6703\u5148\u91d0\u6e05\u300c\u53e2\u96c6\u7ba1\u7406\u548c\u88ab\u7ba1\u7406\u7684\u670d\u52d9\u300d\u4e4b\u9593\u7684\u95dc\u4fc2\uff0c \u63a5\u8457\u8a66\u8457\u8b93\u300c\u670d\u52d9\u900f\u660e\u5316\u300d\u4e5f\u5c31\u662f\u5229\u65bc\u7ba1\u7406\u3002 \u7576\u670d\u52d9\u9700\u8981\u7684\u7bc0\u9ede\u6578\u8d8a\u4f86\u8d8a\u591a\u6642\uff0c \u9700\u8981\u4e00\u4e9b\u300c\u5099\u7f6e\u548c\u90e8\u7f72\u300d\u7684\u81ea\u52d5\u5316\u5de5\u5177\u5354\u52a9\u7ba1\u7406\uff0c \u6700\u5f8c\u6709\u4e9b\u670d\u52d9\u4e0d\u9069\u5408\u5feb\u901f\u91cd\u555f\uff0c\u9700\u8981\u4e00\u500b\u300c\u63a7\u5236\u7ba1\u7406\u7684\u4ecb\u9762\u300d\u3002
"},{"location":"feedback/release-it/#\u5e73\u81fa\u548c\u4f7f\u7528\u8005\u7684\u95dc\u4fc2","title":"\u5e73\u81fa\u548c\u4f7f\u7528\u8005\u7684\u95dc\u4fc2","text":"\u6211\u5011\u9996\u5148\u5206\u5225\u4ee5 \u76e3\u63a7\u7cfb\u7d71 \u548c \u8cc7\u6599\u5eab \u4f86\u6aa2\u8996\u4e00\u4e0b\u73fe\u5728\u7684\u8edf\u9ad4\u74b0\u5883\u4e2d \u5e73\u53f0\u5efa\u7f6e\u8005\u548c\u958b\u767c\u4eba\u54e1\u4e4b\u9593\u7684\u95dc\u4fc2\u3002
\u73fe\u5728\u6709\u5f88\u591a\u958b\u6e90\u7684\u76e3\u63a7\u7cfb\u7d71\uff0c\u7576\u4f60\u628a\u5e73\u53f0\u5efa\u7f6e\uff08\u53ef\u80fd\u662f\u7cfb\u7d71\u5de5\u7a0b\u5e2b\uff09\u8d77\u4f86\u4e4b\u5f8c\uff0c\u662f\u600e\u9ebc\u8b93\u958b\u767c\u4eba\u54e1\u4f7f\u7528\u7684\uff1f \u65e9\u671f\u53ef\u80fd\u662f\u958b\u767c\u4eba\u54e1\u586b\u55ae\u5b50\uff0c\u8acb\u76f8\u95dc\u4eba\u54e1\u505a\u597d\u61c9\u7528\u7a0b\u5f0f\u7684\u76e3\u63a7\u3002 \u4f46\u96a8\u8457\u767c\u5c55\uff08DevOps\uff09\uff0c\u958b\u767c\u8005\u4e5f\u6162\u6162\u958b\u59cb\u50be\u5411\u81ea\u5df1\u8a2d\u5b9a\u548c\u8abf\u6574\u76f8\u95dc\u76e3\u63a7\u3002 \u9019\u6709\u9ede\u50cf\u662f\u5beb\u7a0b\u5f0f\u6642\u7684\u4ecb\u9762\uff08interface\uff09\uff0c \u5efa\u7f6e\u4eba\u54e1\u505a\u597d\u4e00\u500b\u5f48\u6027\u5f88\u9ad8\u7684\u5e73\u53f0\u5f8c\uff0c\u8b93\u958b\u767c\u4eba\u54e1\u586b\u597d\u81ea\u5df1\u7684\u5be6\u4f5c\u3002
\u9019\u4ee3\u8868\u4e4b\u4e2d\u7684\u8cac\u4efb\u79fb\u8f49\u4e86\uff0c\u5e73\u53f0\u5efa\u7f6e\u4eba\u54e1\u5c08\u6ce8\u65bc\u591a\u6a23\u5316\u3001\u7a69\u5b9a\u548c\u6709\u6548\u7387\u7684\u5e73\u53f0\uff0c \u958b\u767c\u4eba\u54e1\u5c08\u6ce8\u65bc\u61c9\u7528\u908f\u8f2f\uff0c\u8abf\u6574\u6c34\u4f4d\u3001\u793a\u8b66\u95a5\u503c\u3001 \u670d\u52d9\u6307\u6a19\uff08SLA\uff09\u7b49\u7b49\u3002
\u540c\u6a23\u7684\u72c0\u6cc1\u767c\u751f\u5728\u8cc7\u6599\u5eab\u4e2d\uff0c DBA\uff08Database Architecture\uff09\u7684\u5de5\u4f5c\u61c9\u8a72\u662f\u5efa\u7acb\u4e00\u500b\u9ad8\u6548\u7387\u548c\u7a69\u5b9a\u7684\u8cc7\u6599\u5eab\u3002 \u4f46\u662f\u65e9\u671f RDBMS \u7684\u7cfb\u7d71\u4e0b\uff0c\u61c9\u7528\u7a0b\u5f0f\u7684\u8a2d\u8a08\u908f\u8f2f\u6703\u5927\u5927\u5f71\u97ff\u8cc7\u6599\u5eab\u7684\u7a69\u5b9a\u5ea6\uff0c \u6162\u6162\u7684 DBA \u5c31\u8b8a\u6210 DBA(Database Administrator)\uff0c\u958b\u59cb\u8981\u7ba1\u7406\u61c9\u7528\u7a0b\u5f0f\u7684\u8cc7\u6599\u5eab\u908f\u8f2f\u3002
\u9019\u4e5f\u662f NoSQL \u904b\u52d5\u7684\u80cc\u666f\u56e0\u7d20\u4e4b\u4e00\uff0c\u5617\u8a66\u8981\u628a\u8cc7\u6599\u5eab\u7ba1\u7406\u548c\u61c9\u7528\u908f\u8f2f\u62bd\u96e2\u3002
\u9019\u4e9b\u6b77\u53f2\u77e5\u8b58\uff0c\u90fd\u53ef\u4ee5\u5e6b\u52a9\u6211\u5011\u66b8\u89e3\uff0c\u4e00\u500b\u53e2\u96c6\u7ba1\u7406\u5de5\u5177\u61c9\u8a72\u8981\u9577\u6210\u4ec0\u9ebc\u6a23\u5b50\uff0c \u6211\u5011\u4e0d\u4eff\u628a K8s \u5957\u7528\u5728\u9019\u500b\u95dc\u4fc2\u4e4b\u4e2d\uff0c\u7136\u5f8c\u601d\u8003\u4e00\u4e0b\u5b83\u73fe\u5728\u7684\u6a23\u5b50\u662f\u4e00\u500b\u7406\u60f3\u7684\u6a23\u5b50\u55ce\uff1f
\u600e\u9ebc\u77e5\u9053\u73fe\u884c\u5de5\u5177\u4e0d\u9069\u5408\uff1f
\u4f5c\u8005\u63d0\u4f9b\u4e00\u500b\u601d\u8003\u9ede\uff1a
\u5982\u679c\u4f60\u767c\u73fe\u4f60\u7684\u5de5\u4f5c\u662f\u6bcf\u5929\uff08\u6216\u6bcf\u9694\u5e7e\u5929\uff09\u90fd\u6709\u500b\u56fa\u5b9a\u4e8b\u60c5\u8981\u505a\uff0c\u4f8b\u5982\u91cd\u555f\u670d\u52d9\u3002 \u9019\u5c31\u662f\u4e00\u500b\u5f88\u5f37\u7684\u8ad6\u9ede\u8aaa\u660e\u73fe\u884c\u7684\u5de5\u5177\u5df2\u7d93\u4e0d\u9069\u5408\u4f7f\u7528\u4e86\u3002
"},{"location":"feedback/release-it/#\u670d\u52d9\u7684\u900f\u660e\u5316","title":"\u670d\u52d9\u7684\u900f\u660e\u5316","text":"\u8981\u600e\u9ebc\u77e5\u9053\u4f60\u7684\u670d\u52d9\u6216\u7bc0\u9ede\u73fe\u5728\u7684\u5065\u5eb7\u72c0\u6cc1\u600e\u9ebc\u6a23\u4e86\uff1f \u900f\u660e\u5316\u4f60\u7684\u670d\u52d9\u3002
\u76e3\u63a7\u7cfb\u7d71\u767e\u767e\u7a2e\uff0c\u65e9\u671f\u6bcf\u7a2e\u985e\u578b\u7684\u76e3\u63a7\u90fd\u9700\u8981\u4ed8\u4e0a\u5927\u7b46\u9214\u7968\u4f86\u8cfc\u8cb7\u4f01\u696d\u7684\u670d\u52d9\uff0c \u4f46\u73fe\u5728\u958b\u6e90\u670d\u52d9\u904d\u5730\u958b\u82b1\uff0c\u6211\u5011\u9078\u64c7\u7684\u57fa\u6e96\u662f\u4ec0\u9ebc\uff1f
\u4ee5\u9019\u4e9b\u70ba\u51fa\u767c\u9ede\uff0c\u627e\u5230\u90a3\u4e9b\u61c9\u7528\u7a0b\u5f0f\u9700\u8981\u6ce8\u610f\u7684\u5730\u65b9\uff0c\u4f8b\u5982\uff1a
\u4f9d\u7167\u9019\u4e9b\u6771\u897f\uff0c\u5c31\u53ef\u4ee5\u53bb\u8a2d\u8a08\u6211\u8a72\u6536\u96c6\u54ea\u4e9b\u65e5\u8a8c\u3001\u6307\u6a19\u548c\u793a\u8b66\u3002 \u540c\u6642\u9084\u8981\u8003\u91cf\u5404\u7a2e\u6210\u672c\uff0c\u5305\u62ec\uff1a\u958b\u767c\u3001\u5efa\u7f6e\u3001\u57fa\u790e\u8a2d\u65bd\u3001\u7dad\u904b\u548c\u6548\u7387\uff08\u8a2d\u5b9a\u512a\u5316\uff09\u3002 \u9019\u4e9b\u90fd\u662f\u4ee5\u76ee\u6a19\uff08\u8cfa\u9322\u3001\u7701\u9322\uff0c\u597d\u7528\u3001\u7a69\u5b9a\uff09\u70ba\u601d\u8003\u9ede\uff0c\u56de\u6263\u5230\u505a\u6cd5\uff0c \u800c\u975e\u5f9e\u6280\u8853\u5c64\u9762\u70ba\u7acb\u8db3\u9ede\u3002
\u53e6\u5916\u5728\u9078\u64c7\u670d\u52d9\u4e2d\u54ea\u4e9b\u8cc7\u8a0a\u8981\u66b4\u9732\u6642\uff0c\u901a\u5e38\u662f\u6240\u6709\u6771\u897f\u90fd\u66b4\u9732\u51fa\u4f86\uff0c \u5be6\u969b\u5728\u505a\u7dad\u904b\u7684\u6642\u5019\uff0c\u7576\u767c\u751f\u60f3\u8981\u7684\u8cc7\u8a0a\u6c92\u6709\u66b4\u9732\u6642\uff0c \u5c31\u53ea\u80fd\u770b\u5230\u5169\u500b\u5de5\u7a0b\u5e2b\u76f8\u8996\u800c\u7b11\uff0c\u5169\u624b\u4e00\u6524\u3002
\u62fc\u5716\u9084\u7f3a\u4e86\u54ea\u4e00\u584a
\u5c31\u50cf\u5c1a\u672a\u51fa\u73fe\u7684\u6574\u5408\u8cc7\u6599\u7684\u670d\u52d9\u4e00\u6a23\uff0c \u5c0d\u65bc\u61c9\u7528\u7a0b\u5f0f\u4f86\u8aaa\uff0c\u6211\u5011\u9084\u662f\u75db\u82e6\u65bc\u6574\u5408\u6240\u6709\u9a57\u8b49\u6388\u6b0a\u7cfb\u7d71\u548c\u76e3\u63a7\u4ecb\u9762\u3002
"},{"location":"feedback/release-it/#\u670d\u52d9\u7684\u591a\u9762\u5411","title":"\u670d\u52d9\u7684\u591a\u9762\u5411","text":"\u8981\u6ce8\u610f\u6bcf\u500b\u5718\u968a\u60f3\u8981\u770b\u7684\u6771\u897f\u53ef\u80fd\u4e0d\u4e00\u6a23\uff1a
\u8eab\u70ba\u4e00\u500b\u76e3\u63a7\u7cfb\u7d71\u8981\u600e\u9ebc\u6eff\u8db3\u9019\u4e9b\u6771\u897f\uff1f \u4f60\u53ef\u4ee5\u4f7f\u7528\u4e32\u6d41\u8655\u7406\u3002
"},{"location":"feedback/release-it/#\u53ef\u80fd\u91cd\u8981\u7684\u8cc7\u8a0a","title":"\u53ef\u80fd\u91cd\u8981\u7684\u8cc7\u8a0a","text":"\u9019\u88e1\u7279\u5225\u5217\u51fa\u4e00\u4e9b\u91cd\u8981\u7684\u8cc7\u8a0a\u4e26\u505a\u7c21\u55ae\u7684\u5206\u985e\uff1a
\u9019\u4e9b\u8cc7\u8a0a\u901a\u5e38\u90fd\u6703\u642d\u914d\u6642\u9593\u8ef8\uff08\u4f8b\u5982\uff0c\u8fd1\u5169\u500b\u5c0f\u6642\u7684\u72c0\u614b\uff09\u548c\u95a5\u503c\uff08\u8d85\u904e 80% \u5c31\u958b\u59cb\u901a\u77e5\u7ba1\u7406\u8005\uff09\u4f86\u670d\u7528\u3002
"},{"location":"feedback/release-it/#\u5099\u7f6e\u548c\u90e8\u7f72","title":"\u5099\u7f6e\u548c\u90e8\u7f72","text":"\u96a8\u8457\u61c9\u7528\u7a0b\u5f0f\u6216\u8005\u7bc0\u9ede\u6578\u91cf\u7684\u589e\u52a0\uff0c\u9700\u8981\u8b93\u6bcf\u6b21\u66f4\u65b0\u6216\u7570\u52d5\u53ef\u4ee5\u5feb\u901f\u3001\u4fbf\u6377\u3002
\u5728\u670d\u52d9\u5099\u7f6e\uff08provision\uff09\u6642\u671f\uff0c\u4f60\u901a\u5e38\u6703\u6709\u63a8\uff08push\uff09\u6216\u8005\u62c9\uff08pull\uff09\u9019\u5169\u7a2e\u6a21\u5f0f\u3002
\u300c\u63a8\u300d\u6703\u662f\u4e00\u500b\u4e2d\u592e\u670d\u52d9\uff0c\u628a\u8cc7\u8a0a\uff08\u7d44\u614b\u8a2d\u5b9a\u3001\u93e1\u50cf\u6a94\u3001\u57f7\u884c\u6a94\u7b49\u7b49\uff09\u9001\u5230\u6307\u5b9a\u7bc0\u9ede\u6216\u670d\u52d9\u4e2d\uff0c \u9019\u7a2e\u505a\u6cd5\u6bd4\u8f03\u55ae\u7d14\uff0c\u53ef\u4ee5\u900f\u904e SSH \u7b49\u6a5f\u5236\u5feb\u901f\u9054\u6210\u9a57\u8b49\u6388\u6b0a\u884c\u70ba\u3002
\u300c\u62c9\u300d\u5247\u662f\u8b93\u5404\u500b\u7bc0\u9ede\u53bb\u62c9\u53d6\u6307\u5b9a\u4f4d\u7f6e\u7684\u8cc7\u8a0a\uff0c\u9019\u901a\u5e38\u5c0d\u65bc\u5feb\u901f\u751f\u6ec5\u7684\u74b0\u5883\uff08\u4f8b\u5982\u5bb9\u5668\u5316\uff09\u5f88\u9069\u5408\uff0c \u5c0d\u65bc\u64f4\u589e\u6027\uff08scalability\uff09\u4e5f\u6709\u5f88\u597d\u7684\u8f14\u52a9\u3002 \u4f46\u7f3a\u9ede\u5c31\u662f\u9700\u8981\u8a2d\u8a08\u597d\u9a57\u8b49\u6388\u6b0a\u7684\u6a5f\u5236\u3002
\u9664\u4e86\u65e9\u671f\u975c\u614b\u8a2d\u5b9a\uff08\u4f8b\u5982 env file\uff09\uff0c \u4f60\u53ef\u4ee5\u900f\u904e\u63d0\u4f9b\u7d44\u614b\u8a2d\u5b9a\u7684\u670d\u52d9\uff08\u901a\u5e38\u662f ZooKeeper \u6216 etcd\uff09\u4f86\u9054\u5230\u52d5\u614b\u8a2d\u5b9a\u3002 \u5728\u9019\u4e4b\u4e2d\uff0c\u9700\u8981\u6ce8\u610f\u5e7e\u500b\u8981\u9ede\uff1a
\u9664\u6b64\u4e4b\u5916\uff0c\u5728\u5099\u7f6e\u6642\u901a\u5e38\u6703\u5e0c\u671b\u74b0\u5883\u662f\u4e7e\u6de8\u7684\uff0c\u53ef\u91cd\u8907\u518d\u73fe\u7684\u3002 \u4f8b\u5982\uff1a\u7576\u5f9e\u65b0\u7248\u672c\uff08v2\uff09\u76f4\u63a5\u9000\u7248\uff08v1\uff09\u6642\uff0c\u5176\u7d50\u679c\u8981\u548c\u7576\u521d\u5347\u5230\u820a\u7248\u6642\u4e00\u6a23\uff08v1\uff09\uff0c \u53ef\u80fd\u53ef\u4ee5\u900f\u904e Lock \u6a94\u6216\u6aa2\u67e5 sha\uff08\u6216 eTag \u7b49\u7b49\uff09\u503c\u3002
\u6aa2\u67e5 eTag \u5931\u6557\u7684\u6848\u4f8b\u5206\u4eab\u6709\u78b0\u904e\u4e00\u500b\u6848\u4f8b\uff0c\u5c31\u662f\u958b\u767c\u8005\u6bcf\u6b21\u5347\u7248\uff0c\u6703\u8986\u5beb\u820a\u7248\u7684\u5099\u7f6e\u6a94\uff08\u4f8b\u5982\u58d3\u7e2e\u6a94\uff09\u3002
\u9019\u5c0e\u81f4\u4eca\u5929\u65b0\u7248\u672c\u51fa\u554f\u984c\u8981\u9000\u7248\u6642\uff0c \u7a0b\u5f0f\u767c\u73fe\u820a\u7248\u672c eTag \u5c0d\u61c9\u7684\u58d3\u7e2e\u6a94\uff08latest.zip
\uff09\u5df2\u7d93\u6539\u8b8a\u4e86\uff0c \u5c0e\u81f4\u9000\u7248\u5931\u6557\uff0c\u9700\u8981\u8b93\u61c9\u7528\u7a0b\u5f0f\u91cd\u65b0\u6253\u5305\u4e00\u6b21\u518d\u90e8\u7f72\uff0c\u9020\u6210\u5931\u80fd\u6642\u9593\u62c9\u9577\u3002
\u6709\u6642\u5019\u670d\u52d9\u6c92\u8fa6\u6cd5\u5feb\u901f\u555f\u52d5\uff0c \u4f8b\u5982\u670d\u52d9\u555f\u52d5\u6642\u9700\u8981\u5f9e\u5feb\u53d6\u6696\u6a5f\u3001 \u555f\u52d5\u524d\u9700\u8981\u5148\u5efa\u7f6e\u7a0b\u5f0f\u78bc\u7684\u865b\u64ec\u6a5f\uff08\u4f8b\u5982 JVM\uff09\u3001 \u670d\u52d9\u4f4f\u5728\u865b\u64ec\u6a5f\u4e0a\uff08\u4f8b\u5982 AWS EC2\uff09\u7b49\u7b49\u3002
\u9019\u6642\uff0c\u4f60\u9700\u8981\u4e00\u500b\u65b9\u5f0f\u53ef\u4ee5\u5728\u5916\u90e8\u5f71\u97ff\u61c9\u7528\u7a0b\u5f0f\uff0c\u800c\u4e0d\u9700\u8981\u91cd\u65b0\u555f\u52d5\u670d\u52d9\u3002 \u53ef\u80fd\u53ef\u4ee5\u5373\u6642\u63a7\u5236\u7684\u884c\u70ba\u6709\uff1a
\u4f46\u662f\u4e0d\u8981\u5728\u9019\u88e1\u53bb\u66b4\u9732 \u300c\u6539\u52d5\u8cc7\u6599\u5eab\u7684\u7db1\u76ee\u300d\u6216 \u300c\u6e05\u9664\u5feb\u53d6\u300d\u7684\u63a5\u53e3\uff0c \u56e0\u70ba\u9019\u7a2e\u5373\u6642\u8abf\u52d5\u5927\u91cf\u6301\u7e8c\u6027\u72c0\u614b\u7684\u884c\u70ba\uff0c\u901a\u5e38\u90fd\u6703\u9020\u6210\u4e00\u4e9b\u610f\u60f3\u4e0d\u5230\u7684\u908a\u969b\u72c0\u6cc1\u3002
\u9084\u6709\u500b\u554f\u984c\u662f\u9019\u500b\u63a5\u53e3\u8981\u600e\u9ebc\u66b4\u9732\uff1f \u901a\u5e38\u6703\u9078\u64c7\u6253\u958b\u4e00\u500b HTTP \u7aef\u53e3\uff0c\u900f\u904e\u6253 HTTP API \u4f86\u9054\u6210\u76ee\u7684\u3002 \u4f46\u5982\u679c\u670d\u52d9\u7684\u7bc0\u9ede\u6709\u4e94\u767e\u500b\uff0c\u96e3\u9053\u8981\u5c0d\u4e94\u767e\u500b\u7bc0\u9ede\u6253 HTTP \u8acb\u6c42\u55ce\uff1f
\u9019\u6642\u6211\u5011\u53ef\u4ee5\u4f7f\u7528\u4e8b\u4ef6\u4f47\u5217\u6a5f\u5236\uff0c\u8b93\u9019\u4e94\u767e\u500b\u7bc0\u9ede\u53bb\u76e3\u807d\u67d0\u500b\u4e8b\u4ef6\uff0c \u7136\u5f8c\u7ba1\u7406\u4eba\u54e1\u767c\u51fa\u9019\u500b\u4e8b\u4ef6\uff0c\u8b93\u6bcf\u500b\u7bc0\u9ede\u4e00\u6279\u4e00\u6279\uff08\u4e00\u6b21\u6027\u8b93\u5927\u5bb6\u505a\u4e8b\u6703\u589e\u52a0\u5927\u91cf\u8ca0\u8377\uff09\u7684\u53bb\u8655\u7406\u9019\u500b\u4e8b\u4ef6\u3002
\u6709\u6642\u5927\u5bb6\u6703\u5beb\u4e00\u500b GUI \u8b93\u5927\u5bb6\u53ef\u4ee5\u8f15\u9b06\u64cd\u4f5c\uff0c\u807d\u8d77\u4f86\u597d\u50cf\u5f88\u5408\u7406\uff0c \u4f46\u662f\u9019\u500b\u4ecb\u9762\u53ea\u80fd\u63d0\u4f9b\u7c21\u55ae\u800c\u9ad8\u5c64\u6b21\u7684\u64cd\u4f5c\uff0c \u4f8b\u5982\u8b93\u5be9\u6838\u8005\u540c\u610f\u9019\u6b21\u81ea\u52d5\u5316\u7684\u64cd\u4f5c\uff08\u4f8b\u5982 autoscaling\uff09\u7b49\u7b49\u3002 \u5426\u5247\u4efb\u4f55\u7d30\u90e8\u7684\u884c\u70ba\u90fd\u5141\u8a31\u8b93\u4eba\u53bb\u64cd\u4f5c\uff0c\u800c\u975e\u4f7f\u7528\u56fa\u5b9a\u8173\u672c\uff0c\u9019\u7121\u7591\u662f\u589e\u52a0\u5931\u8aa4\u7684\u98a8\u96aa\u3002
"},{"location":"feedback/release-it/#\u9069\u61c9\u529b","title":"\u9069\u61c9\u529b","text":"\u6642\u9593\u5728\u8d70\uff0c\u9069\u61c9\u74b0\u5883\u8b8a\u5316\u7684\u80fd\u529b\u662f\u5fc5\u4e0d\u53ef\u5c11\u7684\u3002 \u8981\u8b93\u670d\u52d9\u6709\u9069\u61c9\u529b\uff0c\u512a\u826f\u7684\u67b6\u69cb\u662f\u5fc5\u7136\u7684\uff0c\u5176\u4e2d\u53c8\u5206\u6210\u4e09\u500b\u9762\u5411\uff1a
\u66f8\u4e2d\u5404\u500b\u4f8b\u5b50\u90fd\u6703\u95e1\u660e\u4e00\u4e9b\u72c0\u6cc1\u548c\u8a0e\u8ad6\uff0c\u9019\u88e1\u4ee5\u689d\u5217\u5f0f\u7684\u65b9\u5f0f\u5217\u51fa\uff1a
SRE \u548c DevOps \u7684\u5dee\u7570
\u8a73\u7d30\u53ef\u4ee5\u53c3\u8003 Site Reliable Workbook \u7684\u7b2c\u4e8c\u7ae0 How SRE Relates to DevOps
"},{"location":"feedback/release-it/#\u670d\u52d9\u5c64\u7d1a\u7684\u67b6\u69cb","title":"\u670d\u52d9\u5c64\u7d1a\u7684\u67b6\u69cb","text":"\u5f37\u8abf\u4e09\u7a2e\u5065\u5eb7\u7684\u670d\u52d9\u67b6\u69cb\uff1a
\u9019\u6bb5\u53ef\u4ee5\u53c3\u8003\uff1aDesign Data-Intensive Application\uff0c \u88e1\u9762\u5c31\u6703\u8ac7\u5f97\u5f88\u8a73\u7d30\u3002
\u4e3b\u8981\u6982\u5ff5\u662f\u8981\u628a\u8cc7\u6599\u7d50\u69cb\u548c\u908f\u8f2f\u62bd\u96e2\uff0c \u4f8b\u5982\u4e0d\u8981\u50b3 user ID\uff0c\u800c\u662f\u50b3 URN\uff0c \u9019\u8981\u4e0b\u6e38\u6216\u5176\u4ed6\u670d\u52d9\u5728\u4f7f\u7528\u7684\u6642\u5019\uff0c\u624d\u4e0d\u6703\u56e0\u70ba\u4e0d\u540c\u908f\u8f2f\uff0c\u800c\u8b93\u8cc7\u6599\u7d50\u69cb\u8f49\u4f86\u8f49\u53bb\u3002 \u5176\u5be6 AWS \u5728\u9019\u584a\u5c31\u73a9\u5f97\u5f88\u597d\uff0c\u4ed6\u6bcf\u500b\u670d\u52d9\u90fd\u662f\u4e00\u500b ARN \u800c\u4e0d\u662f ID\u3002
"},{"location":"feedback/release-it/#\u7d50\u8a9e","title":"\u7d50\u8a9e","text":"\u7e3d\u7684\u4f86\u8aaa\uff0c\u96a8\u8457\u5404\u5927\u4f01\u696d\u9010\u6f38\u7d2f\u7a4d\u4e00\u4e9b\u7dad\u904b\u9700\u8981\u6ce8\u610f\u7684\u4e8b\u9805\uff0c \u5373\u4f7f\u9019\u4e9b\u77e5\u8b58\u5929\u751f\u5c31\u6703\u96f6\u96f6\u6563\u6563\u7684\uff0c \u4f46\u81f3\u5c11\u4e5f\u6709\u4e86\u4e00\u4e9b\u7cfb\u7d71\u5316\u7684\u8a8d\u8b58\u3002
\u5982\u679c\u672a\u4f86\u8981\u66f4\u8fd1\u4e00\u6b65\u7684\u6df1\u5316\uff0c\u53ef\u4ee5\u53c3\u8003 Google SRE \u9019\u500b\u7db2\u7ad9\uff0c \u88e1\u9762\u8b1b\u4e86\u975e\u5e38\u591a\u985e\u4f3c\u7684\u6771\u897f\uff0c \u4f46\u4ed6\u8457\u91cd\u5728\u5efa\u7acb SLO\uff0c \u4e26\u4ee5\u6b64\u4f5c\u70ba\u6c7a\u7b56\u7684\u57fa\u790e\uff0c\u9019\u4e5f\u662f\u4e0b\u4e00\u4efd\u5fc3\u5f97\u60f3\u5beb\u7684\u5167\u5bb9\u3002
"},{"location":"feedback/release-it/#\u5b57\u8a5e\u89e3\u91cb","title":"\u5b57\u8a5e\u89e3\u91cb","text":"\u95dc\u65bc\u865b\u64ec IP\uff08VIP\uff09Virtual IP\uff1b\u865b\u64ec IP \u4f4d\u7f6e\uff0c\u6703\u9700\u8981\u6709\u500b\u670d\u52d9\u7ba1\u7406 VIP \u5c0d\u61c9\u771f\u5be6 IP \u7684\u8868\u683c\u3002 \u5728 Linux \u4e2d\uff0c\u901a\u5e38\u662f conntrack\uff08Netfilter\uff09\u3002
\u4ec0\u9ebc\u662f conntrack\uff1f
\u6709\u72c0\u614b\u9632\u706b\u7246\uff08stateful firewall\uff09\u662f\u76f8\u5c0d\u65bc\u65e9\u671f\u7684\u7121\u72c0\u614b\u9632\u706b\u7246\uff08stateless firewall\uff09\u800c\u8a00\u7684\uff1a \u65e9\u671f\u9632\u706b\u7246\u53ea\u80fd drop syn to port 443
\u6216\u8005 allow syn to port 80
\u9019\u7a2e\u975e\u5e38\u7c21\u55ae\u7684\u898f\u5247\uff0c \u6c92\u6709 flow \u7684\u6982\u5ff5\uff0c \u56e0\u6b64\u7121\u6cd5\u5be6\u73fe\u8af8\u5982\u300c\u5982\u679c\u9019\u500b ack \u4e4b\u524d\u5df2\u7d93\u6709 syn\uff0c \u5c31 allow\uff0c\u5426\u5247 drop\u300d\u9019\u6a23\u7684\u898f\u5247\uff0c \u4f7f\u7528\u975e\u5e38\u53d7\u9650\u3002
\u986f\u7136\uff0c\u8981\u5be6\u73fe\u6709\u72c0\u614b\u9632\u706b\u7246\uff0c\u5c31\u5fc5\u9808\u7d00\u9304 flow \u548c\u72c0\u614b\uff0c\u9019\u6b63\u662f conntrack \u505a\u7684\u4e8b\u60c5\u3002
\u865b\u64ec IP \u901a\u5e38\u6709\u5e7e\u500b\u529f\u80fd\uff1a
\u7531\u65bc\u529f\u80fd\u5f88\u591a\uff0c\u9700\u8981\u6ce8\u610f\u4e0a\u4e0b\u6587\u4e2d\u5176\u4ee3\u8868\u7684\u610f\u7fa9\u3002
"},{"location":"feedback/designing-data-intensive-applications/","title":"Designing Data-Intensive Applications","text":"2020 5 \u6708\u5df2\u92b7\u552e 100,000 \u672c\uff0c\u4e14\u662f 2019 \u5e74 O\u2019Reilly \u6240\u6709\u4f5c\u54c1\u92b7\u91cf\u7b2c\u4e8c\u540d\u7684\u4f5c\u54c1\uff08\u7b2c\u4e00\u540d\u662f\u6a5f\u5668\u5b78\u7fd2\u7684\uff09\u3002
Martin Kleppmann
Table of contents
\u8eab\u70ba\u4e00\u500b\u61c9\u7528\u7a0b\u5f0f\u958b\u767c\u8005\uff0c\u6211\u8a72\u5982\u4f55\u770b\u5f85\u672c\u66f8
\u5982\u679c\u4f60\u80fd\u5920\u4e86\u89e3\u8cc7\u6599\u5eab\u7684\u5167\u90e8\u904b\u4f5c\u65b9\u5f0f\uff0c\u4f60\u5c31\u80fd\u6709\u4e00\u500b\u8f03\u958b\u95ca\u7684\u8996\u91ce\u53bb\u770b\u5f85\u54ea\u7a2e\u5de5\u5177\u6216\u662f\u54ea\u4e9b\u8a2d\u5b9a\u662f\u6700\u9069\u5408\u4f60\u7684\u61c9\u7528\u7a0b\u5f0f\u3002 \u96d6\u7136\u672c\u66f8\u4e0d\u6703\u6709\u4efb\u4f55\u7522\u54c1\u7684\u7d30\u7bc0\u4ecb\u7d39\uff0c\u537b\u6703\u8b93\u4f60\u5728\u770b\u8cc7\u6599\u5eab\u6587\u4ef6\u6642\uff0c\u66b8\u89e3\u4e0d\u540c\u540d\u8a5e\u5176\u80cc\u5f8c\u53ef\u80fd\u4ee3\u8868\u7684\u512a\u52a3\u52e2\u3002
As an application developer you\u2019re armed with this knowledge about the internals of storage engines, you are in a much better position to know which tool is best suited for your particular application. If you need to adjust a database\u2019s tuning parameters, this understanding allows you to imagine what effect a higher or a lower value may have. Although this chapter couldn\u2019t make you an expert in tuning any one particular storage engine, it has hopefully equipped you with enough vocabulary and ideas that you can make sense of the documentation for the database of your choice.
\u8cc7\u6599\u7684\u91cd\u8981\u6027
2021 AWS Summit \u63d0\u5230\uff1a\u7d71\u4e00\u8cc7\u6599\u4ee5\u767c\u63ee\u5176\u50f9\u503c\uff0c\u6210\u70ba\u8cc7\u6599\u9a45\u52d5\u578b\u4f01\u696d\uff0c\u5176\u7279\u8272\uff1a
\u5206\u6210\u4e09\u5927\u584a\uff1a
\u5c0d\u61c9\u66f8\u4e2d\u7684 Data Models and Query Languages\uff0c\u5c55\u793a\u5404\u7a2e\u8cc7\u6599\u6a21\u578b2\u548c\u6bd4\u8f03\u3002
\u4eba\u969b\u95dc\u4fc2
\u5047\u8a2d\u6709 \\(N\\) \u500b\u9ede\uff0c\u9ede\u548c\u9ede\u7684\u9023\u7d50\u5c31\u6703\u6709 \\(\\frac{N^2-N}{2}\\) \u500b\u3002
\u8a66\u60f3\u6709\u767e\u842c\u500b\u793e\u4ea4\u5a92\u9ad4\u7684\u7528\u6236\uff0c\u82e5\u8981\u4f7f\u7528 MySQL \u5efa\u7acb\u4e00\u500b\u5f7c\u6b64\u4e4b\u9593\u8a8d\u8b58\u8207\u5426\u7684\u4eba\u969b\u7db2\u7d61\u6703\u9700\u8981\u591a\u5c11 entry\uff1f\u9019\u6642\u5019\u6709\u6c92\u6709\u9664\u4e86 Relational Model \u4e4b\u5916\u7684\u9078\u64c7\uff1f
\u5c0d\u61c9\u66f8\u4e2d Storage and Retrieval \u7684\u524d\u534a\u6bb5\uff0c\u5982\u4f55\u52a0\u901f\u8cc7\u6599\u7684\u8b80\u53d6\u3002
\u96d9\u7d22\u5f15
MySQL \u6bcf\u6b21\u4e0b query \u53ea\u6703\u9075\u5f9e\u5176\u4e2d\u4e00\u500b index\uff0c\u70ba\u4ec0\u9ebc\uff1f\u82e5\u8981\u505a\u591a\u500b\u7d22\u5f15\uff0c\u9700\u8981\u72a7\u7272\u4ec0\u9ebc\uff1f
\u6709\u4e9b\u60c5\u6cc1\u5fc5\u9808\u8981\u96d9\u7d22\u5f15\uff0c\u4f8b\u5982\uff1a\u5730\u7406\u4f4d\u7f6e\u4e2d\u7684\u7d93\u7def\u5ea6\uff0c\u53ea\u641c\u5c0b\u7d93\u5ea6\u7684\u8a71\u6548\u80fd\u7684\u63d0\u5347\u6709\u9650\u3002
\u5c0d\u61c9\u66f8\u4e2d Storage and Retrieval \u7684\u5f8c\u534a\u6bb5\uff0c\u5982\u4f55\u5340\u5206\u7dda\u4e0a\u548c\u5f8c\u53f0\u7684\u8cc7\u6e90\u3002
\u6578\u64da\u5206\u6790
\u5982\u679c\u6211\u5011\u8981\u5206\u6790\u7dda\u4e0a\u4f7f\u7528\u8005\u7684\u8cc7\u6599\uff0c\u5982\u4f55\u907f\u9762\u548c\u7dda\u4e0a\u4f7f\u7528\u8005\u6436\u6548\u80fd\uff1f
\u5c0d\u61c9\u66f8\u4e2d\u7684 Encoding and Evolution\uff0c\u8cc7\u6599\u5eab\u7684\u7de8\u78bc\u6700\u4f73\u5316\u548c\u524d\u5f8c\u76f8\u5bb9\u3002
\u820a\u7248\u7de8\u78bc\u5982\u4f55\u8b80\u65b0\u7248\u8cc7\u6599
\u8ffd\u6c42\u8cc7\u6599\u9ad4\u7a4d\u7684\u6975\u81f4\u58d3\u7e2e\uff0c\u7ba1\u7406\uff08Maintainable\uff09\u4e5f\u5f88\u91cd\u8981\u3002\u82e5\u8cc7\u6599\u5eab\u540c\u6642\u5b58\u5728\u65b0\u7248\u548c\u820a\u7248\u7684\u8cc7\u6599\uff0c\u5982\u4f55\u907f\u514d\u7de8\u78bc\u5931\u6548\uff1f
\u5c0d\u61c9\u66f8\u4e2d\u7684 Transaction\uff0c\u5982\u4f55\u907f\u514d\u7af6\u8cfd\u60c5\u6cc1\uff08race condition\uff09\u5e36\u4f86\u7684\u932f\u8aa4\u72c0\u614b\u3002
\u8a02\u7968\u554f\u984c
\u5169\u500b\u7528\u6236\u540c\u4e00\u6642\u9593\u8a02\u8cfc\u9650\u91cf\u7968\u7a2e\u4e14\u76ee\u524d\u50c5\u5269\u4e00\u5f35\uff0c\u61c9\u7528\u7a0b\u5f0f\u5229\u7528 Read-Decision-Write \u7684\u6a5f\u5236\uff0c\u6703\u8b93\u5169\u4eba\u540c\u6642\u8a02\u8cfc\u6210\u529f\u3002\u8a72\u600e\u9ebc\u907f\u514d\uff1f
\u5c0d\u61c9\u66f8\u4e2d\u7684 Replication\uff0c\u5982\u4f55\u52d5\u614b\u8907\u88fd\u8cc7\u6599\u5230\u591a\u53f0\u8cc7\u6599\u5eab\u4e2d\uff0c\u4ee5\u9054\u6210\uff1a
\u8907\u88fd\u5ef6\u9072
\u7576\u6a5f\u5668\u5728\u505a\u8907\u88fd\u7684\u6642\u5019\uff0c\u82e5\u662f \u6a5f\u5668A \u5b8c\u6210\u8907\u88fd\u800c \u6a5f\u5668B \u9084\u6c92\uff0c\u4f7f\u7528\u8005\u91cd\u65b0\u8f09\u5165\u9801\u9762\u53ef\u80fd\u6703\u6709\u4e0d\u540c\u7684\u7d50\u679c\u3002
\u751a\u81f3\u5728\u8907\u88fd\u5230 \u6a5f\u5668B \u7684\u6642\u5019\u7db2\u8def\u4e2d\u65b7\uff0c\u8a72\u600e\u9ebc\u9054\u6210\u4e00\u81f4\u6027\uff1f
\u5c0d\u61c9\u66f8\u4e2d\u7684 Partition\uff0c\u5982\u4f55\u52d5\u614b\u5206\u5340\u8cc7\u6599\u5230\u591a\u53f0\u8cc7\u6599\u5eab\u4e2d\uff0c\u4ee5\u907f\u514d\u55ae\u53f0\u6a5f\u5668\u7121\u6cd5\u8ca0\u8377\u904e\u5927\u7684\u8cc7\u6599\u91cf\uff08\u4e26\u975e\u6d41\u91cf\uff09\u3002
\u5e73\u5747\u5206\u914d
\u4ee5 user ID \u4f5c\u70ba\u5206\u5340\u7684\u9375\u503c\u70ba\u4f8b\u3002\u7576\u793e\u4ea4\u8edf\u9ad4\u4e2d\u7684\u4e00\u4f4d\u540d\u4eba\u767c\u6587\u6642\uff0c\u7279\u5b9a\u5206\u5340\u6703\u6709\u4e0d\u5c0d\u7a31\u7684\u5927\u6d41\u91cf\uff0c\u5982\u4f55\u907f\u514d\u3002
\u5c0d\u61c9\u66f8\u4e2d\u7684 The Trouble with Distributed Systems\uff0c\u5728\u5206\u6563\u5f0f\u8cc7\u6599\u5eab\u4e0b\uff0c\u4f60\u6703\u9762\u81e8\u7684\u72c0\u6cc13\u548c\u61c9\u5982\u4f55\u770b\u5f85\u3002
Debug
\u5728\u627e\u5c0b\u932f\u8aa4\u7684\u6642\u5019\uff0c\u6211\u5011\u6703\u5148\u5047\u8a2d\u57fa\u790e\u670d\u52d9\u662f\u6b63\u78ba\u56de\u61c9\u7684\u3002 \u4e26\u5728\u6b64\u5047\u8a2d\u4e4b\u4e0a\u958b\u59cb\u627e\u932f\uff0c\u7576\u9019\u500b\u932f\u8aa4\u7528\u4e86\u5169\u5929\uff08\u5f88\u96e3\u91cd\u73fe\uff09\u53bb\u627e\uff0c \u4f60\u53ef\u80fd\u5c31\u9700\u8981\u958b\u59cb\u8cea\u7591\u6700\u4e00\u958b\u59cb\u7684\u5047\u8a2d\u4e86\u3002\u9019\u5c31\u662f\u672c\u7ae0\u5617\u8a66\u8b93\u5927\u5bb6\u53bb\u611f\u53d7\u7684\uff0c \u540c\u6642\u4e5f\u8a66\u8457\u8aaa\u660e\u5171\u8b58\u7684\u91cd\u8981\u6027\u548c\u50f9\u503c\u3002
\u5c0d\u61c9\u66f8\u4e2d\u7684 Consistency and Consensus\uff0c\u5229\u7528 \u5171\u8b58 \u9054\u6210\u4e00\u81f4\u60274\u548c\u5bb9\u932f\u7684\u670d\u52d9\u3002
\u89c0\u5ff5
\u5171\u8b58\u6f14\u7b97\u6cd5\u5df2\u7d93\u767c\u5c55\u5e7e\u5341\u5e74\u4e86\uff0c\u4ecd\u7136\u6709\u8a31\u591a\u5f85\u7814\u7a76\u7684\u5730\u65b9\uff0c\u4f46\u662f\u5b83\u7684\u50f9\u503c\u662f\u4ec0\u9ebc\uff1f
\u4ee5\u6a5f\u5668\u5b78\u7fd2\u4f86\u8aaa\uff0c\u8b93\u5176\u767c\u5c55\u84ec\u52c3\u7684\u50f9\u503c\u5728\u65bc\u7528\u6a5f\u5668\u505a\u9810\u6e2c\u3001\u5206\u6790\u548c\u9078\u64c7\uff0c\u90a3\u5171\u8b58\u6f14\u7b97\u6cd5\u5462\uff1f
\u672c\u66f8\u7684\u91cd\u9ede\u4e00\u76f4\u90fd\u4e0d\u662f\u5c0d\u6f14\u7b97\u6cd5\u548c\u5de5\u5177\u505a\u7d30\u7bc0\u8a0e\u8ad6\uff0c \u4e0d\u7ba1\u662f\u4f7f\u7528 Raft\u3001Paxos \u7b49\u7b49\u7684\u5171\u8b58\u6f14\u7b97\u6cd5\uff0c \u4ed6\u5011\u90fd\u662f\u5617\u8a66\u5728\u5206\u6563\u5f0f\u7cfb\u7d71\u7684\u74b0\u5883\u63d0\u5230\u7684\u5404\u7a2e\u554f\u984c\u4e4b\u4e0a\uff0c \u5efa\u7acb\u4e00\u500b\u64c1\u6709\u548c\u591a\u53f0\u6a5f\u5668\u5354\u5546\u4e26\u9054\u6210\u5bb9\u932f\u80fd\u529b\u9ad8\u7684\u6f14\u7b97\u6cd5\uff0c\u800c\u53c8\u6709\u54ea\u4e9b\u72c0\u6cc1\u662f\u53ef\u4ee5\u505a\u6b0a\u8861\u7684\uff1f
\u524d\u9762\u90fd\u5728\u8b1b\u91dd\u5c0d\u55ae\u4e00\u61c9\u7528\u7a0b\u5f0f\u7684\u8cc7\u6599\u5eab\uff0c\u73fe\u5728\u8a66\u8457\u628a\u628a\u93e1\u982d\u62c9\u9060\u3002\u73fe\u5728\u4f86\u770b\u770b\u4e0d\u540c\u61c9\u7528\u7a0b\u5f0f\u4e4b\u9593\u7684\u4ea4\u6d41\u3001\u884d\u4f38\u548c\u6574\u5408\u3002
\u5feb\u53d6
\u6700\u76f4\u89c0\u7684\u884d\u751f\u8cc7\u6599\uff08Derived Data\uff09\u5c31\u662f\u5feb\u53d6\uff0c\u6211\u5f9e\u8cc7\u6599\u5eab\u88e1\u62c9\u51fa\u4e00\u4e9b\u8cc7\u6599\u653e\u9032\u5feb\u53d6\uff0c\u52a0\u901f\u61c9\u7528\u7a0b\u5f0f\u9032\u7a0b\u3002
"},{"location":"feedback/designing-data-intensive-applications/#\u6279\u6b21\u8655\u7406","title":"\u6279\u6b21\u8655\u7406","text":"\u5c0d\u61c9\u66f8\u4e2d\u7684 Batch Processing\uff0c\u8a0e\u8ad6\u6279\u6b21\u8655\u7406\u7684\u7406\u5ff5\u548c\u50f9\u503c\u3002
\u6392\u7a0b\u5de5\u4f5c
\u6279\u6b21\u8655\u7406\uff08batch job\uff09\u548c\u6392\u7a0b\u5de5\u4f5c\uff08cron job\uff09\u662f\u5169\u4ef6\u4e8b\u60c5\u3002
\u6392\u7a0b\u6253 API \u505a search-index\u3001\u63a8\u85a6\u7cfb\u7d71\u548c\u5206\u6790\u7b49\u7b49\uff0c\u7136\u5f8c\u518d\u628a\u7d50\u679c\u7522\u51fa\u5728\u8cc7\u6599\u5eab\u4e2d\u3002\u5982\u679c\u7a0b\u5f0f\u78bc\u5beb\u932f\u4e86\uff0c\u5c0e\u81f4\u7dda\u4e0a\u8cc7\u6599\u5eab\u5d29\u58de\uff0c\u8a72\u600e\u9ebc\u9000\u7248\u5230\u820a\u8cc7\u6599\uff1f
\u6982\u5ff5
HDFS \u6982\u5ff5\u5f88\u55ae\u7d14\uff0c\u5206\u6563\u5f0f\u7684\u8cc7\u6599\u7cfb\u7d71\u3002\u4f46\u662f\u70ba\u4ec0\u9ebc\u8fd1\u5341\u5e7e\u5e74\u4f86\u624d\u958b\u59cb\u666e\u904d\uff1f
Hadoop \u4e4b\u4e0a\uff0c\u884d\u4f38\u5f88\u591a\u7522\u54c1\uff0c\u70ba\u4ec0\u9ebc\uff1f
\u5c0d\u61c9\u66f8\u4e2d\u7684 Stream Processing\uff0c\u5982\u4f55\u628a\u5373\u6642\u8cc7\u6599\u8f49\u63db\u6210\u4e8b\u4ef6\u4e26\u8655\u7406\u3002
\u6309\u8b9a\u6578
\u81c9\u66f8\u4e2d\uff0c\u6211\u5011\u53ef\u4ee5\u770b\u5230\u6bcf\u500b\u8cbc\u6587\u7684\u6309\u8b9a\u6578\u548c\u90e8\u5206\u6309\u8b9a\u4eba\u7684\u540d\u5b57\u3002
\u5c0d\u61c9\u66f8\u4e2d\u7684 The Future of Data Systems\uff0c\u6574\u5408\u524d\u9762\u7684\u5167\u5bb9\uff0c\u4e26\u505a\u51fa\u4e00\u500b\u5f37\u5065\u7684\u61c9\u7528\u7a0b\u5f0f\u3002
"},{"location":"feedback/designing-data-intensive-applications/#\u8cab\u7a7f\u672c\u66f8\u7684\u76ee\u7684","title":"\u8cab\u7a7f\u672c\u66f8\u7684\u76ee\u7684","text":"\u4e00\u500b\u61c9\u7528\u7a0b\u5f0f\u9700\u8981\u6eff\u8db3\u8a31\u591a\u9700\u6c42\u624d\u80fd\u63d0\u4f9b\u7279\u5b9a\u670d\u52d9\u3002
\u7576\u670d\u52d9\u767c\u751f\u72c0\u6cc1\u6642\uff0c\u4ecd\u7136\u80fd\u6b63\u78ba\u904b\u884c\u3002\u72c0\u6cc1\u53ef\u80fd\u70ba
\u5bb9\u932f\u80fd\u529b\uff08Fault-tolerance\uff09\u4ee3\u8868\u4ed6\u80fd\u63a5\u53d7\u7279\u5b9a\u72c0\u6cc1\u7684\u767c\u751f\uff0c\u4e26\u8b93\u4f7f\u7528\u8005\u4e0d\u6703\u53d7\u6b64\u5f71\u97ff\u3002
"},{"location":"feedback/designing-data-intensive-applications/#\u53ef\u5ef6\u5c55\u6027","title":"\u53ef\u5ef6\u5c55\u6027","text":"\u53ef\u5ef6\u5c55\u6027\u4ee3\u8868\u5373\u4f7f\u6d41\u91cf\u589e\u52a0\uff0c\u8868\u73fe\u4ecd\u662f\u6b63\u5e38\u7684\u3002\u5728\u8a0e\u8ad6\u5ef6\u5c55\u6027\u524d\uff0c\u9700\u5b9a\u7fa9_\u6d41\u91cf_\uff08load\uff09\u548c_\u8868\u73fe\u80fd\u529b_\uff08performance quantitatively\uff09\u3002
\u4ee5 Twitter \u7684\u500b\u4eba\u9996\u9801\u70ba\u4f8b\uff0c\u5229\u7528\u56de\u61c9\u6642\u9593\u7684\u767e\u5206\u4f4d\u6578\uff08percentiles\uff09\u4ee3\u8868\u8868\u73fe\u80fd\u529b\uff0c\u6bcf\u500b\u767c\u5e03\u8005\u7684\u5beb\u5165\u548c\u8ffd\u96a8\u8005\u7684\u8b80\u53d6\u9996\u9801\u4f5c\u70ba\u6d41\u91cf\u3002\u5373\u4f7f\u6d41\u91cf\u589e\u52a0\uff0c\u56de\u61c9\u6642\u9593\u7684\u767e\u5206\u4f4d\u6578\u4ecd\u4f4e\u65bc\u7279\u5b9a\u6c34\u5e73\u3002
\u5728\u4e00\u500b\u53ef\u64f4\u5145\u7684\u7cfb\u7d71\uff0c\u6211\u5011\u53ef\u4ee5\u589e\u52a0\u6a5f\u5668\u7684\u91cf\uff08processing capacity\uff09\u4f86\u7dad\u6301\u53ef\u9760\u7684\u8868\u73fe\u80fd\u529b\u3002
"},{"location":"feedback/designing-data-intensive-applications/#\u53ef\u7dad\u8b77\u6027","title":"\u53ef\u7dad\u8b77\u6027","text":"\u53ef\u7dad\u8b77\u6027\u6709\u5f88\u591a\u9762\u5411\uff0c\u57fa\u672c\u4e0a\u4f86\u8aaa\uff0c\u5c31\u662f\u70ba\u4e86\u8b93\u5de5\u7a0b\u5e2b\u548c\u904b\u7dad\u5de5\u7a0b\u5e2b\u6e96\u6642\u3002\u8b93\u7cfb\u7d71\u4fdd\u6301\u62bd\u8c61\u5316\uff08\u628a\u7dad\u5ea6\u63d0\u9ad8\uff09\u53ef\u4ee5\u964d\u4f4e\u7cfb\u7d71\u7684\u8907\u96dc\u6027\uff0c\u4e26\u4e14\u8b93\u5176\u66f4\u5bb9\u6613\u4fee\u6539\u548c\u9069\u61c9\u65b0\u7684\u529f\u80fd\u3002
\u597d\u7684\u64cd\u4f5c\u6027\uff08operability\uff09\u4ee3\u8868\u80fd\u89c0\u5bdf\u5230\u7cfb\u7d71\u5167\u90e8\u904b\u4f5c\u72c0\u614b\u548c\u5065\u5eb7\u6aa2\u67e5\uff0c\u4e26\u4e14\u64c1\u6709\u9ad8\u6548\u7684\u65b9\u5f0f\u53bb\u7ba1\u7406\u3002
"},{"location":"feedback/designing-data-intensive-applications/#\u7d50\u8ad6","title":"\u7d50\u8ad6","text":"\u901a\u5e38\u4f86\u8aaa\u4e0d\u6703\u6709\u4e00\u500b\u8fa6\u6cd5\u53ef\u4ee5\u7c21\u55ae\u4e14\u5b8c\u6574\u7684\u8b93\u61c9\u7528\u7a0b\u5f0f\u53ef\u9760\u3001\u597d\u5ef6\u5c55\u548c\u7dad\u8b77\u3002\u7136\u800c\uff0c\u90fd\u6703\u6709\u67d0\u7a2e\u6a21\u5f0f\u6216\u5de5\u5177\u5e6b\u52a9\u6211\u5011\u4e00\u500b\u4e00\u500b\u89e3\u6c7a\u9019\u4e9b\u554f\u984c\u3002
\u7ae0\u7bc0\u5f15\u7528\u6578\uff0c\u5728\u6211\u8b80\u66f8\u7684\u7d93\u9a57\u4e2d\uff0c\u53ef\u4ee5\u628a\u9019\u500b\u7576\u4f5c\u7ae0\u7bc0\u7684\u96e3\u6613\u5ea6\u4f86\u505a\u5224\u65b7\u3002\u00a0\u21a9
\u672c\u66f8\u7684\u4e2d\u6587\u7ffb\u8b6f\u90fd\u4f86\u81ea\u570b\u5bb6\u6559\u80b2\u7814\u7a76\u9662\u2014\u96d9\u8a9e\u8a5e\u5f59\u3001\u5b78\u8853\u540d\u8a5e\u66a8\u8fad\u66f8\u8cc7\u8a0a\u7db2\u3002\u00a0\u21a9
\u5728\u4e0d\u8003\u616e\u62dc\u5360\u5ead\u932f\u8aa4\u4e0b\u3002\u00a0\u21a9
\u8981\u6ce8\u610f\u9019\u88e1\u7684\u4e00\u81f4\u6027\u548c\u7af6\u8cfd\u60c5\u6cc1\u4e2d\u7684 Consistency \u662f\u4e0d\u4e00\u6a23\u7684\u3002\u5171\u8b58\u6f14\u7b97\u6cd5\u4e2d\u7684 Consistency\uff0c\u4ee3\u8868\u5728\u65bc\u5206\u6563\u5f0f\u7cfb\u7d71\u4e0b\u5982\u4f55\u8b93\u591a\u500b\u8907\u88fd\uff08Replication\uff09\u7684\u72c0\u614b\u9054\u6210\u4e00\u81f4\u6027\uff0c\u5f8c\u8005\u5728\u65bc\u7368\u7acb\u4e0d\u540c\u7684\u7570\u52d5\uff08transaction\uff09\u4e26\u907f\u514d\u5176\u4ea4\u4e92\u5f71\u97ff\u800c\u7dad\u6301\u4e00\u81f4\u6027\u3002\u00a0\u21a9
\u5982\u4f55\u5229\u7528\u5206\u6563\u5f0f\u6a94\u6848\u7cfb\u7d71\u5b8c\u6210\u6279\u6b21\u8cc7\u6599\u7684\u8a08\u7b97\u3002
HackMD \u5831\u544a\u6587\u672c
\u6211\u5011\u63d0\u4e86\u55ae\u53f0\u8cc7\u6599\u5eab\u5982\u4f55\u5728\u6548\u7387\u548c\u4e00\u81f4\u6027\u627e\u5230\u5e73\u8861\u9ede\uff0c\u9019\u9ede\u96a8\u8457\u6f14\u9032\u8d8a\u4f86\u8d8a\u80fd\u88ab\u5927\u5bb6\u63a5\u53d7\uff0c \u4f46\u662f\u4e00\u53f0\u8cc7\u6599\u5eab\u4e0d\u53ef\u80fd\u5e6b\u6211\u5011\u628a\u6240\u6709\u4e8b\u60c5\u90fd\u505a\u597d\u3002 \u4f8b\u5982\u8cc7\u6599\u5927\u5230\u5fc5\u9808\u591a\u500b\u7bc0\u9ede\u53bb\u8655\u7406\u3001\u9700\u8981\u9ad8\u53ef\u7528\u6027\u7b49\u7b49\uff0c\u6211\u5011\u958b\u59cb\u9700\u8981\u4f7f\u7528\u5206\u6563\u5f0f\u7684\u8cc7\u6599\u5eab\u3002
\u7136\u800c\u5206\u6563\u5f0f\u7684\u8cc7\u6599\u5eab\u6703\u6253\u7834\u55ae\u53f0\u8cc7\u6599\u5eab\u7684\u5e73\u8861\uff0c\u6211\u5011\u4ecd\u7136\u53ef\u4ee5\u900f\u904e\u5171\u8b58\u6f14\u7b97\u6cd5\u30012(3)PL \u7b49\u7b49\u7dad\u6301\u4e00\u81f4\u6027\uff0c \u4f46\u9019\u6642\u6548\u7387\u5c31\u6703\u964d\u4f4e\u3002 \u4e14\u9019\u4e9b\u6f14\u7b97\u6cd5\u7684\u5be6\u4f5c\u901a\u5e38\u90fd\u9700\u8981\u975e\u5e38\u8b39\u614e\u7684\u6e2c\u8a66\u548c\u601d\u8003\uff0c\u5426\u5247\u4efb\u4f55\u908a\u969b\u60c5\u6cc1\u90fd\u53ef\u80fd\u7834\u58de\u6389\u9810\u671f\u7684\u4e00\u81f4\u6027\u4fdd\u8b49\u548c\u9ad8\u53ef\u7528\u6027\u3002
\u6709\u6c92\u6709\u65e2\u80fd\u64c1\u6709\u9ad8\u4e00\u81f4\u6027\u53c8\u64c1\u6709\u9ad8\u53ef\u7528\u6027\u7136\u5f8c\u53c8\u80fd\u57f7\u884c\u8907\u96dc\u7684\u641c\u5c0b\uff08\u4f8b\u5982\u95dc\u806f\u5f0f\u8cc7\u6599\u5eab\u7684 SQL\uff09\u7684\u65b9\u6848\uff1f
\u6709\uff0c\u4f46\u662f\u958b\u59cb\u524d\u6211\u5011\u9700\u8981\u4ecb\u7d39\u4e00\u4e9b\u300c\u884d\u751f\u8cc7\u6599\u300d\u7684\u5de5\u5177\u3002
"},{"location":"feedback/designing-data-intensive-applications/derived-batch/#\u7c21\u4ecb","title":"\u7c21\u4ecb","text":"\u4e4b\u524d\u8b1b\u7684\u8cc7\u6599\u5eab\u90fd\u662f\u5047\u8a2d\u61c9\u7528\u7a0b\u5f0f\u4f7f\u7528\u7684\u55ae\u7a2e\u8cc7\u6599\u5eab\uff0c\u4e0d\u7ba1\u662f\u55ae\u53f0\u9084\u662f\u5206\u6563\u5f0f\u7684\u3002 \u4f46\u5be6\u969b\u4e0a\u61c9\u7528\u7a0b\u5f0f\u662f\u66f4\u8907\u96dc\u7684\uff0c\u4ed6\u6703\u6709\u5feb\u53d6\u3001\u641c\u5c0b\u7d22\u5f15\u3001\u76e3\u63a7\u7b49\u7b49\u4e0d\u540c\u7684\u8cc7\u6599\u7cfb\u7d71\uff0c \u9019\u6b21\u8981\u4ecb\u7d39\u7684\u5c31\u662f\u5176\u4e2d\u4e00\u7a2e\u8cc7\u6599\u7cfb\u7d71\uff1a\u6279\u6b21\u8655\u7406\u3002
\u7ba1\u7406\u548c\u61c9\u7528\u7684\u91cd\u8981\u6027
\u5c0d\u61c9\u7528\u7a0b\u5f0f\u4f86\u8aaa\u5982\u4f55\u6574\u5408\u4e0d\u540c\u8cc7\u6599\u7cfb\u7d71\u548c\u5982\u4f55\u4f7f\u7528\u55ae\u4e00\u8cc7\u6599\u7cfb\u7d71\u662f\u4e00\u6a23\u91cd\u8981\u7684\uff01
"},{"location":"feedback/designing-data-intensive-applications/derived-batch/#\u985e\u5225\u4ecb\u7d39","title":"\u985e\u5225\u4ecb\u7d39","text":"\u6211\u5011\u5148\u4f86\u4ecb\u7d39\u300c\u8cc7\u6599\u300d\u662f\u4ec0\u9ebc\uff1f\u4e00\u822c\u6211\u5011\u6703\u628a\u8cc7\u6599\u5206\u5169\u7a2e\uff1a
\u884d\u751f\u8cc7\u6599\u7684\u751f\u6210\u901a\u5e38\u53d6\u6c7a\u65bc\u61c9\u7528\u7a0b\u5f0f\u7684\u985e\u578b\uff0c\u4f8b\u5982\u793e\u7fa4\u8edf\u9ad4\u6703\u63a8\u85a6\u53ef\u80fd\u8a8d\u8b58\u7684\u4f7f\u7528\u8005\u4e26\u5feb\u53d6\u6709\u8208\u8da3\u7684\u63a8\u6587\uff0c \u4ee5\u52a0\u901f\u8b80\u53d6\u7684\u901f\u5ea6\u3002\u4efb\u4f55\u8cc7\u6599\u7cfb\u7d71\u53ea\u662f\u4e00\u7a2e\u5de5\u5177\uff0c\u6839\u64da\u5546\u52d9\u908f\u8f2f\u9078\u64c7\u5de5\u5177\u7684\u4f7f\u7528\u65b9\u5f0f\u662f\u958b\u767c\u8005\u5fc5\u9808\u8981\u8655\u7406\u7684\u4e8b\u60c5\u3002 \u5c0d\u61c9\u7528\u7a0b\u5f0f\u800c\u8a00\uff0c\u4f7f\u7528\u884d\u751f\u8cc7\u6599\u4e00\u5b9a\u6703\u8b93\u7a0b\u5f0f\u8b8a\u5f97\u66f4\u8907\u96dc\uff0c \u8a72\u600e\u9ebc\u628a\u884d\u751f\u8cc7\u6599\u548c\u539f\u59cb\u8cc7\u6599\u5207\u5206\u6e05\u695a\uff08\u4e0d\u53ea\u662f\u61c9\u7528\u9762\uff0c\u800c\u662f\u7ba1\u7406\u9762\uff09\u662f\u4e00\u4ef6\u91cd\u8981\u7684\u4e8b\u3002
\u985e\u578b \u6a21\u5f0f \u6642\u9593 \u6ce8\u91cd \u670d\u52d9\u8655\u7406 \u8acb\u6c42\u3001\u56de\u61c9 \u77ed \u9ad8\u53ef\u7528\u3001\u4f4e\u6f5b\u6642 \u6279\u6b21\u8655\u7406 \u8acb\u6c42 \u9577 \u901a\u91cf\uff08throughput\uff09 \u4e32\u6d41\u8655\u7406 \u6d88\u5316\u3001\u7522\u51fa \u7121 \u8ca0\u8f09\u7cfb\u7d71\u985e\u5225\u7684\u6bd4\u8f03
\u57fa\u672c\u4e0a\u7cfb\u7d71\u53ef\u4ee5\u5206\u4e09\u7a2e\uff1a
\u900f\u904e\u9019\u4e9b\u7570\u65bc\u524d\u9762\u6211\u5011\u6240\u63d0\u904e\u7684\u8cc7\u6599\u5eab\u7684\u8cc7\u6599\u7cfb\u7d71\uff0c\u6211\u5011\u5c31\u53ef\u4ee5\u5efa\u69cb\u51fa\u4e00\u500b\u53ef\u9760\uff08\u9ad8\u53ef\u7528\u3001\u4f4e\u6f5b\u6642\uff09\u3001\u9ad8\u5ef6\u5c55\u548c\u6613\u65bc\u7ba1\u7406\u7684\u5927\u67b6\u69cb\u3002
"},{"location":"feedback/designing-data-intensive-applications/derived-batch/#\u7bc4\u570d\u5230\u54ea\u88e1","title":"\u7bc4\u570d\u5230\u54ea\u88e1","text":"\u6211\u5011\u6703\u4ecb\u7d39\u6279\u6b21\u8655\u7406\u4e2d\u7684 MapReduce \u4f86\u5e6b\u52a9\u6211\u5011\u4e86\u89e3\u6279\u6b21\u8655\u7406\u5728\u505a\u4ec0\u9ebc\u3002 \u96d6\u7136\u4ed6\u5df2\u7d93\u904e\u6642\u4e86\uff0c \u4f46\u662f\u4ed6\u7c21\u55ae\u660e\u77ad\u7684\u904b\u4f5c\u65b9\u5f0f\u80fd\u5920\u8b93\u6211\u5011\u5f88\u8f15\u6613\u66b8\u89e3\u6279\u6b21\u8655\u7406\u7684\u6982\u5ff5\u3002
\u7576\u7136\uff0c\u5728\u9019\u4e4b\u4e0a\u7684\u5176\u4ed6\u985e\u578b\u7684\u5de5\u5177\u548c\u6846\u67b6\u4e5f\u6703\u7c21\u55ae\u4ecb\u7d39\u4e00\u4e0b\u3002
\u6279\u6b21\u8655\u7406\u7684\u6b77\u53f2
\u4f55\u6a02\u79ae\u5728 1890 \u5e74\u7684\u4eba\u53e3\u666e\u67e5\u6240\u4f7f\u7528\u7684\u6253\u5b54\u5361\u7247\u88fd\u8868\u6a5f \u5c31\u662f\u4f7f\u7528\u6a5f\u68b0\u5f0f\u7684\u65b9\u5f0f\u805a\u5408\u4eba\u53e3\u7684\u8cc7\u6599\uff08\u5e74\u9f61\u3001\u4eba\u7a2e\u7b49\u7b49\uff09\u3002 \u9019\u7a2e\u5229\u7528\u6253\u5b54\u5361\u628a\u591a\u500b\u7bc0\u9ede\u7684\u8cc7\u6599\u6574\u5408\u5728\u4e00\u8d77\u7684\u65b9\u5f0f\u548c\u73fe\u4ee3\u7684 MapReduce \u65b9\u5f0f\u5341\u5206\u76f8\u4f3c\u3002
\u5c31\u50cf\u6211\u5011\u5728\u7db2\u969b\u7db2\u8def\u7684\u9032\u7a0b\u4e0a\u770b\u5230\u7684\u4e00\u6a23\uff0c \u6b77\u53f2\u7e3d\u662f\u5728\u91cd\u8907\u3002
"},{"location":"feedback/designing-data-intensive-applications/derived-batch/#unix","title":"Unix","text":"\u6211\u5011\u6703\u5148\u900f\u904e GNU Coreutils \u4e86\u89e3 Unix \u958b\u767c\u54f2\u5b78\uff0c\u4e26\u5982\u4f55\u63a8\u5ee3\u5230 MapReduce\u3002
\u6211\u5011\u900f\u904e\u65e5\u8a8c\u6a94\u6848\uff0c\u5617\u8a66\u627e\u51fa\u4e00\u4e9b\u6709\u7528\u7684\u8cc7\u8a0a\uff1a
"},{"location":"feedback/designing-data-intensive-applications/derived-batch/#\u67e5\u770b\u4e00\u4e0b\u8cc7\u6599\u683c\u5f0f","title":"\u67e5\u770b\u4e00\u4e0b\u8cc7\u6599\u683c\u5f0f","text":"$ head -n 5 11-30.log\n2 2021-11-30T08:42:26.728Z 2021-11-30T08:42:27.587Z 858.817257 400\n3 2021-11-30T08:42:26.729Z 2021-11-30T08:42:27.590Z 860.616378 400\n4 2021-11-30T08:42:26.729Z 2021-11-30T08:42:27.591Z 861.390112 400\n1 2021-11-30T08:42:26.726Z 2021-11-30T08:42:27.592Z 865.229151 400\n2 2021-11-30T08:42:27.588Z 2021-11-30T08:42:27.596Z 7.301911 400\n
\u4e0a\u9762\u7684\u6a94\u6848\u6bcf\u6b04\u7684\u503c\u5206\u5225\u662f connection ID
\u3001start time
\u3001end time
\u3001latency
\u3001HTTP status code
\u3002
# \u627e\u6700\u4f4e\u6f5b\u6642\n$ cat 11-30.log | awk '{print $4}' | sort -n | head -n 5\n
"},{"location":"feedback/designing-data-intensive-applications/derived-batch/#\u67e5\u770b\u6f5b\u6642\u4ee5\u6beb\u79d2\u70ba\u55ae\u4f4d\u7684\u5206\u4f48","title":"\u67e5\u770b\u6f5b\u6642\u4ee5\u6beb\u79d2\u70ba\u55ae\u4f4d\u7684\u5206\u4f48","text":"# \u900f\u904e less \u4f86\u6aa2\u67e5\u8f38\u51fa\u7684\u683c\u5f0f\uff0c\u7b49\u78ba\u8a8d\u6c92\u554f\u984c\u5f8c\u518d\u63a5\u8457\u57f7\u884c\u5f8c\u7e8c\u6b65\u9a5f\uff0c\u907f\u514d\u8017\u6642\u7684\u8a08\u7b97\u91cd\u65b0\u57f7\u884c\u3002\n$ cat 11-30.log | awk '{printf \"%.0f\\n\", $4}' | less\n# \u6703\u767c\u73fe\u662f\u9577\u5c3e\u5206\u4f48\n$ cat 11-30.log | awk '{printf \"%.0f\\n\", $4}' | sort | uniq -c | sort -n -k2 | head -n 20\n
\u76f8\u95dc\u5c0f\u6284\u53ef\u4ee5\u53c3\u8003 the-art-of-command-line
"},{"location":"feedback/designing-data-intensive-applications/derived-batch/#\u6709\u54ea\u4e9b\u54f2\u5b78\u5728\u5176\u4e2d","title":"\u6709\u54ea\u4e9b\u54f2\u5b78\u5728\u5176\u4e2d","text":"\u525b\u525b\u6211\u5011\u900f\u904e sort
\u3001uniq
\u3001awk
\u3001sed
\u7b49\u7b49\u7684\u5de5\u5177\u5b8c\u6210\u4e00\u7cfb\u5217\u8907\u96dc\u7684\u904b\u7b97\u3002GNU Coreutils \u7684\u7406\u5ff5\u4fbf\u662f\u900f\u904e\u55ae\u4e00\u4ecb\u9762\u8b93\u6bcf\u500b\u7368\u7acb\u7684\u5c0f\u5de5\u5177\u5f7c\u6b64\u6e9d\u901a\uff0c\u800c\u9019\u4e9b\u5c0f\u5de5\u5177\u90fd\u80fd\u505a\u597d\u81ea\u5df1\u7684\u4e8b\uff0c\u4ee5\u4e0b\u662f GNU Coreutils \u5728\u8a2d\u8a08\u6642\u57fa\u65bc\u7684\u7406\u5ff5\uff1a
\u4ec0\u9ebc\u662f\u6bcf\u500b\u5de5\u5177\u505a\u597d\u81ea\u5df1\u7684\u4e8b\uff1f\u8209\u4f8b\u4f86\u8aaa\uff0csort
\u6703\u628a\u5927\u8cc7\u6599\u5206\u6210\u5c0f\u4efd\u5c0f\u4efd\u6392\u5e8f\u597d\u7684\u8cc7\u6599\uff0c \u518d\u628a\u9019\u4e9b\u8cc7\u6599\u6574\u5408\u5728\u4e00\u8d77\u3002\u5176\u4e2d\u6bcf\u4efd\u8cc7\u6599\u90fd\u662f\u900f\u904e\u4e0d\u540c CPU \u4e26\u884c\u8655\u7406\u7684\uff0c \u8b93\u6574\u9ad4\u6548\u7387\u63d0\u9ad8\u5230\u5e7e\u4e4e\u6c92\u6709\u4e00\u500b\u7a0b\u5f0f\u8a9e\u8a00\u5167\u5efa\u7684\u6392\u5e8f\u6f14\u7b97\u6cd5\u80fd\u548c\u4ed6\u4e26\u8ad6\u7684\u3002
\u5148\u4eba\u7684\u667a\u6167
\u6709\u6c92\u6709\u5f88\u50cf\u6211\u5011\u6700\u8fd1\u7684\u654f\u6377\u958b\u767c\uff1f
"},{"location":"feedback/designing-data-intensive-applications/derived-batch/#\u5927\u81f4\u6d41\u7a0b\u662f\u4ec0\u9ebc","title":"\u5927\u81f4\u6d41\u7a0b\u662f\u4ec0\u9ebc","text":"\u4ed6\u7528\u4ec0\u9ebc\u55ae\u4e00\u4ecb\u9762\u4f86\u6e9d\u901a\u4e26\u9054\u6210 \u8f38\u5165=\u8f38\u51fa\uff1f\u6a94\u6848\u3002 \u4e0d\u540c\u7a0b\u5e8f\u900f\u904e\u50b3\u905e\u5f7c\u6b64\u7684\u6a94\u6848\u63cf\u8ff0\u7b26\uff08file descriptor\uff09\u4f86\u544a\u77e5\u5c0d\u65b9\u81ea\u5df1\u7684\u6a94\u6848\u4f4d\u7f6e\uff0c \u7a0b\u5e8f\u518d\u524d\u5f80\u8a72\u6a94\u6848\u8b80\u53d6\u8cc7\u6599\u3002\u4e00\u822c\u4f86\u8aaa\uff0c\u6a94\u6848\u63cf\u8ff0\u7b26\u6709\u4e09\u7a2e
\u7576\u4ed6\u62ff\u5230\u6a94\u6848\u63cf\u8ff0\u7b26\u6642\uff0c\u4e0a\u4e00\u500b\u7a0b\u5e8f\u5c31\u6703\u4e32\u6d41\u8f38\u51fa\u9032\u4f86\uff0c\u4e26\u8b93\u4e0b\u4e00\u500b\u7a0b\u5e8f\u4f7f\u7528\u3002 \u5982\u679c\u904b\u7b97\u5fc5\u9808\u7b49\u5230\u5168\u90e8\u7b97\u5b8c\u7121\u6cd5\u900f\u904e\u4e32\u6d41\u50b3\u905e\u7684\u5373\u6642\u8cc7\u6599\uff08\u4f8b\u5982\u6392\u5e8f\uff09\uff0c\u9019\u6642\u5c31\u6703\u4e00\u6b21\u6027\u5beb\u5165\u3002
Linux \u5167\u6240\u6709\u6771\u897f\u90fd\u662f\u6a94\u6848
\u4e8b\u5be6\u4e0a\uff0cLinux \u7cfb\u5217\u7684\u4f5c\u696d\u7cfb\u7d71\u5728\u5e95\u5c64\u4e2d\u4e0d\u540c\u7a0b\u5e8f\u9593\u7684\u6e9d\u901a\u90fd\u662f\u6a94\u6848\u3002
\u4f8b\u5982\u8033\u6a5f\u900f\u904e /dev/audio
\u4e0b\u7684\u6a94\u6848\u63cf\u8ff0\u7b26\u4f86\u4f5c\u70ba\u8f38\u5165\u8f38\u51fa\u3001\u672c\u5730\u7aef\u7684\u7db2\u8def\u6e9d\u901a\u5247\u662f\u900f\u904e /dev/lp0
\u4e0b\u7684\u6a94\u6848\u63cf\u8ff0\u7b26\u4f86\u8a18\u9304\u76f8\u95dc\u8cc7\u8a0a\u7b49\u7b49\u3002
\u6240\u4ee5\u6211\u5011\u524d\u9762\u770b\u5230\u7684 |
\u5176\u5be6\u5c31\u662f\u4e0a\u4e00\u500b\u7a0b\u5e8f\u50b3\u905e\u81ea\u5df1\u7684\u6a94\u6848\u63cf\u8ff0\u7b26\u7d66\u4e0b\u4e00\u500b\u6a94\u6848\uff0c\u4e5f\u5c31\u662f\u6240\u8b02\u7684\u7ba1\u7dda\uff08pipeline\uff09\u3002 \u8b80\u53d6\u6a94\u6848\u6642\u518d\u628a ANSII \u7de8\u78bc\u65b9\u5f0f\u7684 \\n
\uff080x0A
\uff09\u4f5c\u70ba\u5b9a\u754c\u7b26\uff08delimiter\uff09\u3002\u4f9d\u6b64\uff0c\u6240\u8b02\u300c\u4e00\u7b46\u300d\u8cc7\u6599\u5c31\u51fa\u4f86\u4e86\u3002
\u9019\u662f\u975e\u5e38\u53b2\u5bb3\u7684\uff01\u4ed6\u8b93\u8655\u7406\u5b8c\u5168\u4e0d\u540c\u6771\u897f\u7684\u5de5\u5177\u5f7c\u6b64\u80fd\u9019\u9ebc\u826f\u597d\u7684\u6e9d\u901a\uff0c \u60f3\u60f3\u6211\u5011\u7684\u8cc7\u6599\u5eab\u5373\u4f7f\u90fd\u662f\u95dc\u806f\u5f0f\uff08\u6216\u6587\u4ef6\u5f0f\u6216\u5716\u50cf\u5f0f\uff09\uff0c\u5982\u679c\u8981\u5f9e \u8cc7\u6599\u5eab A \u8f49\u79fb\u5230 \u8cc7\u6599\u5eab B \u662f\u591a\u9ebb\u7169\u7684\u4e8b\u3002
\u5b9a\u754c\u7b26
\u96d6\u7136\u66f4\u6b63\u78ba\u7684\u5b9a\u754c\u7b26\u662f 0x0E
\uff0c\u56e0\u70ba\u9019\u5c31\u662f\u4ed6\u88ab\u8a2d\u8a08\u51fa\u4f86\u7684\u539f\u56e0\u3002
\u4e0d\u904e\u6700\u7d42\u9078\u64c7\u7684 \\n
\u4e5f\u8a31\u5c31\u662f\u5728\u4eba\u985e\u7684\u53ef\u8b80\u6027\u548c\u6a5f\u5668\u7684\u53ef\u8b80\u6027\u9593\u7684\u5e73\u8861\u5427\u3002
HTTP \u900f\u904e URL \u4f86\u6307\u5b9a\u76ee\u7684\u7aef\uff08\u4e0d\u53ea\u662f domain\uff0c\u4e5f\u5305\u62ec path\u3001segment \u548c query\uff09\uff0c \u800c\u9019\u500b\u65b9\u5f0f\u8b93\u7db2\u969b\u7db2\u8def\u7684\u6240\u6709 HTTP \u7684\u6e9d\u901a\u53ef\u4ee5\u81ea\u7531\u5207\u63db\uff0c \u9019\u5c31\u597d\u50cf\u7ba1\u7dda\u529f\u80fd\u4e00\u6a23\uff0c\u6240\u4ee5\u5de5\u5177\uff08\u7db2\u7ad9\uff09\u5f7c\u6b64\u9593\u7684\u6e9d\u901a\u90fd\u662f\u901a\u904e\u50b3\u9001\u6a94\u6848\u63cf\u8ff0\u7b26\uff08URL\uff09\u3002
\u4f46\u662f\u5728\u65e9\u671f\u7684 BBS \u6240\u4f7f\u7528\u7684\u7db2\u8def\u5354\u5b9a\u4e3b\u8981\u662f BNU/UUCP \u6216\u662f Fidonet \u901a\u8a0a\u5354\u5b9a\uff0c \u4f7f\u7528\u8005\u7aef\u900f\u904e\u64a5\u63a5\u8edf\u9ad4\u901a\u904e\u6578\u64da\u6a5f\u64a5\u53eb\u8a72 BBS \u7ad9\u53f0\u7684\u96fb\u8a71\u865f\u78bc\u4f86\u9023\u63a5\u9032\u7ad9\uff0c \u9019\u5c31\u4ee3\u8868\u7576\u9700\u8981\u8f49\u5230\u5225\u7684\u7ad9\u53f0\u6642\uff0c\u6211\u5011\u9700\u8981\u9000\u51fa\u73fe\u6709\u7ad9\u53f0\uff0c\u8f38\u5165\u76ee\u6a19\u7ad9\u53f0\u7684\u96fb\u8a71\u865f\u78bc\uff0c \u518d\u8f38\u5165\u7d30\u90e8\u7684\u4f4d\u7f6e\uff08\u4ee5 URL \u70ba\u4f8b\u5c31\u662f path + segment + query\uff09\uff0c \u9019\u5c31\u8b93\u4e0d\u540c\u7db2\u7ad9\u7684\u6e9d\u901a\u8b8a\u5f97\u975e\u5e38\u56f0\u96e3\u3002
"},{"location":"feedback/designing-data-intensive-applications/derived-batch/#\u6bd4\u8f03","title":"\u6bd4\u8f03","text":"\u548c\u5176\u4ed6\u7a0b\u5f0f\u6709\u4ec0\u9ebc\u5dee\uff1f
function getLatencyDistribution(filename) {\n const stream = readFileLineByLine(filename);\n const counter = {};\n\n for (const line of stream) {\n const latency = line.split(\" \")[3];\n const latencyInt = parseInt(latency, 10);\n counter[latencyInt] = (counter[latencyInt] || 0) + 1;\n }\n\n return Object.entries(counter)\n .map((entry) => ({ latency: entry[0], count: entry[1] }))\n .sort((a, b) => a.latency - b.latency);\n}\n
JavaScript \u5beb\u51fa\u4f86\u7684\u51fd\u5f0f\u4e00\u6a23\u53ef\u4ee5\u5b8c\u6210\u5de5\u4f5c\uff0c\u4f46\u662f\u7576\u6211\u9700\u8981\u8abf\u6574\u7522\u51fa\uff0c\u4f8b\u5982\u4ee5\u6578\u91cf\u4f86\u6392\u5e8f\u800c\u975e\u4ee5\u5ef6\u9072\u4f86\u6392\u5e8f\uff0c \u5c31\u8981\u9032\u53bb\u7a0b\u5f0f\u78bc\u88e1\u9762\u66b8\u89e3\u6574\u500b\u7d50\u69cb\u518d\u505a\u8abf\u6574\u3002\u76f8\u5c0d\u800c\u8a00 GNU Coreutils \u5c31\u5f88\u55ae\u7d14\u4e86\u3002
\u9664\u6b64\u4e4b\u5916\uff0c\u6211\u5011\u53ef\u4ee5\u770b\u5230 JS \u7a0b\u5f0f\u78bc\u88e1\u9762\u4ed6\u7684 counter
\u662f\u4f7f\u7528\u8a18\u61b6\u9ad4\u4f86\u8a18\u9304\u9019\u4e9b\u6578\u91cf\uff0c \u4f46\u662f\u5982\u679c\u7576\u7c92\u5ea6\u8abf\u5230\u5f88\u7d30\u7684\u5fae\u79d2\u7b49\u7d1a\u6642\u5c31\u5f88\u53ef\u80fd\u51fa\u73fe\u8a18\u61b6\u9ad4\u4e0d\u5920\u7684\u72c0\u6cc1\uff0c \u76f8\u6bd4\u8f03\u800c\u8a00 sort
\u548c uniq
\u7684\u7d44\u5408\uff0c \u56e0\u70ba\u662f\u4f7f\u7528\u6a94\u6848\u7cfb\u7d71\u505a\u7d00\u9304\uff08\u548c\u5c11\u91cf\u7684\u8a18\u61b6\u9ad4\uff09\u5c31\u53ef\u4ee5\u907f\u514d\u9019\u4ef6\u4e8b\u7684\u767c\u751f\u3002
sort \u548c uniq \u4e0d\u90a3\u9ebc\u4f9d\u8cf4\u65bc\u8a18\u61b6\u9ad4
uniq
\u7684\u505a\u6cd5\u662f\u53ea\u627e\u524d\u5f8c\u6587\u662f\u5426\u6709\u76f8\u540c\u7684\u5b57\u4f86\u505a\u8a18\u6578\uff0c\u9019\u6a23\u5c31\u53ef\u4ee5\u907f\u514d\u5168\u6587\u6aa2\u7d22\u3002 \u6240\u4ee5\u6211\u5011\u624d\u9700\u8981\u5728 uniq
\u4e4b\u524d\u5148 sort
\u3002
\u800c sort
\u6703\u628a\u6a94\u6848\u62c6\u6210\u4e00\u5c0f\u584a\u4e00\u5c0f\u584a\uff08\u6279\u6b21\u8655\u7406\u7684\u6982\u5ff5\uff01\uff09\uff0c\u7136\u5f8c\u5404\u81ea\u6392\u5e8f\u518d\u6574\u5408\u5728\u4e00\u8d77\uff0c \u5c31\u597d\u50cf\u6211\u5011\u524d\u9762\u770b\u5230\u7684\u6392\u5e8f\u5b57\u4e32\u8868\u3002
GNU Coreutils \u7684\u597d\u8655\u4e0d\u50c5\u50c5\u662f\u65b9\u4fbf\u4e14\u6709\u6548\uff0c\u4ed6\u4e5f\u53ef\u4ee5\u900f\u904e\u81ea\u5df1\u5beb\u5de5\u5177\u63d0\u9ad8\u5f48\u6027\u5ea6\u3002
\u900f\u904e Python \u5beb\u81ea\u5df1\u7684\u7a0b\u5e8f myProcessimport os # (1)\n\nr, w = os.pipe()\nfr = os.fdopen(r, \"r\", 1)\nfw = os.fdopen(w, \"w\")\n\nwhile fr.readable():\n output = myProcess(fr.read())\n fw.write(output)\n
pip install -e $LIB_FOLDER
\u4f86\u7522\u751f\u81ea\u5df1\u7684\u5de5\u5177\u4e86\u3002\u7576\u7136 GNU Coreutils \u9084\u662f\u6709\u4e9b\u7f3a\u9ede\u7684\uff1a
{print $4}
\u4ee3\u8868\u7684\u662f\u6f5b\u6642\u3002curl
\u662f\u7528\u4f86\u547c\u53eb HTTP \u8acb\u6c42\u7684\u5de5\u5177\uff0cHTTP \u8acb\u6c42\u7684\u8f38\u5165\u6709\u5f88\u591a\u7a2e\uff1a \u8cc7\u6599\uff08body\uff09\u3001\u6a19\u982d\uff08header\uff09\u3001\u9a57\u8b49\u8cc7\u8a0a\u3001\u662f\u5426\u4f7f\u7528 proxy \u7b49\u7b49\u3002\u6700\u5f8c\u518d\u63d0\u4e00\u4e0b GNU Coreutils \u7684\u91cd\u9ede\uff1a\u9ad8\u5bb9\u932f\u6027\u3002
\u4efb\u4f55\u8f38\u5165\u7684\u6a94\u6848\u53ea\u505a\u8b80\u53d6\uff0c\u4e26\u8f38\u51fa\u65bc\u5176\u4ed6\u6a94\u6848\uff08\u6216\u87a2\u5e55\uff09\uff0c\u4f60\u4e0d\u7528\u64d4\u5fc3\u8f38\u5165\u5728\u50b3\u5165\u9019\u500b\u5de5\u5177\u4e4b\u5f8c\u6703\u53d7\u5230\u640d\u58de\u3002 \u9019\u4e5f\u4ee3\u8868\u4f60\u53ef\u4ee5\u53cd\u8986\u5617\u8a66\u8abf\u6574\u5de5\u5177\u7684\u4f7f\u7528\uff0c\u6216\u8005\u7576\u6709\u4efb\u4f55\u554f\u984c\u6642\u91cd\u65b0\u5617\u8a66\u4e0d\u540c\u65b9\u5f0f\uff0c \u9019\u662f\u4e00\u500b\u975e\u5e38\u91cd\u8981\u7684\u529f\u80fd\uff0c\u6211\u5011\u4e5f\u6703\u5728\u5f8c\u9762\u518d\u4e00\u6b21\u770b\u5230\u9019\u7a2e\u6a5f\u5236\u7684\u597d\u8655\u3002
"},{"location":"feedback/designing-data-intensive-applications/derived-batch/#hadoop","title":"Hadoop","text":"\u6211\u5011\u4e86\u89e3\u4e86 Unix \u7684\u54f2\u5b78\u7684\u597d\u8655\u5f88\u591a\uff0c\u4f46\u662f\u6709\u6c92\u6709\u8fa6\u6cd5\u8f49\u79fb\u5230\u5206\u6563\u5f0f\u7684\u7cfb\u7d71\u5462\uff1f
\u5206\u6563\u5f0f \u55ae\u53f0 Hadoop Unix HDFS \u7ba1\u7dda MapReduce \u5728\u9019\u4e4b\u4e0a\u7684\u6846\u67b6\u5206\u6563\u5f0f\u7684 Unix \u5c31\u662f Hadoop
Hadoop \u5c31\u662f\u5206\u6563\u5f0f\u7684\u4e00\u500b\u5927 Unix \u7cfb\u7d71\u3002\u800c\u9019\u4e4b\u4e2d Hadoop Distributed File System(HDFS) \u5c31\u662f GNU Coreutils \u4f7f\u7528\u7684\u7ba1\u7dda\u3002
\u800c\u6211\u5011\u6703\u4ecb\u7d39\u7684 MapReduce \u5c31\u662f\u9019\u4e4b\u4e0a\u7684\u5176\u4e2d\u4e00\u7a2e\u6846\u67b6\u3002
"},{"location":"feedback/designing-data-intensive-applications/derived-batch/#hdfs","title":"HDFS","text":"HDFS \u662f\u958b\u6e90\u8edf\u9ad4\uff0c\u4ed6\u6709\u5f88\u591a\u5176\u4ed6\u76f8\u4f3c\u7684\u7522\u54c1\uff0c\u4f46\u5927\u81f4\u4e0a\u7684\u908f\u8f2f\u662f\u4e00\u6a23\u7684\uff1a\u900f\u904e\u7121\u5171\u4eab\u67b6\u69cb\u5efa\u69cb\u51fa\u591a\u53f0\u7bc0\u9ede\u4ea4\u63db\u8cc7\u6599\u7684\u6a5f\u5236
\u5728\u4ecb\u7d39 MapReduce \u4e4b\u524d\u6211\u5011\u5148\u770b\u770b\u61c9\u7528
\u4f8b\u5982 Lucene/Solr \u5c31\u662f\u900f\u904e MapReduce \u5728\u5206\u6563\u5f0f\u8cc7\u6599\u7cfb\u7d71\u4e2d\u7522\u751f\u7d22\u5f15\uff08Index\uff09\u3002
\u5168\u6587\u7d22\u5f15\u7684\u5efa\u7acb\u65b9\u5f0f\u662f\u900f\u904e\u4ee5\u540d\u8a5e\u548c\u6587\u7ae0\u7de8\u865f\u505a key-value pair\u3002 \u8209\u4f8b\u4f86\u8aaa\uff0c\u860b\u679c: 1,6
\u4ee3\u8868\u6709 \u860b\u679c
\u55ae\u8a5e\u7684\u6587\u7ae0\u6709 1,6
\u3002 \u7576\u7136\u5be6\u969b\u53ef\u80fd\u66f4\u8907\u96dc\u5305\u62ec\u6a21\u7cca\u7d22\u5f15\u3001\u540c\u7fa9\u8a5e\u3001\u932f\u5b57\u641c\u5c0b\u7b49\u7b49\u4e0d\u904e\u5148\u4ee5\u6b64\u70ba\u57fa\u790e\u4f86\u8a0e\u8ad6\u3002
\u7576\u4f7f\u7528 MapReduce \u6642\uff0c\u5c31\u6703\u8b8a\u5f97\u5f88\u55ae\u7d14\uff1a\u628a\u6240\u6709\u6587\u7ae0\u5206\u5340\u5230\u4e0d\u540c\u6a5f\u5668\uff0c \u8b93\u5404\u81ea\u53bb\u5256\u6790\u51fa\u55ae\u8a5e\uff08map\uff09\uff0c\u6700\u5f8c\u5408\u4f75\uff08reduce\uff09\u6210\u4e0a\u8ff0\u7684\u9375\u503c\u7d44\u3002 \u4f60\u53ef\u80fd\u53ef\u4ee5\u5beb\u5e7e\u500b\u5de5\u5177\u53bb\u505a\u4e0d\u540c\u7684\u4e8b\uff0c\u4f8b\u5982\u6709\u4e00\u500b\u5de5\u5177\u662f\u628a\u6587\u7ae0\u62c6\u6210\u55ae\u5b57\uff0c \u4e00\u500b\u5de5\u5177\u662f\u628a\u55ae\u5b57\u505a\u7d71\u8a08\uff0c\u4e0d\u904e\u6bcf\u500b\u5de5\u5177\u90fd\u662f\u4e00\u7d44 MapReduce\u3002
\u9019\u5c31\u50cf\u662f\u4e00\u500b\u9ed1\u76d2\u5b50\uff0c\u6587\u7ae0\u9032\u4f86\u7d22\u5f15\u51fa\u53bb\uff0c\u900f\u904e\u53e6\u4e00\u7a2e\u9762\u8c8c\u5be9\u8996\u8cc7\u6599\u3002 \u7136\u5f8c\u7576\u6587\u7ae0\u6709\u7570\u52d5\u6642\uff0c \u5c31\u91cd\u65b0\u518d\u8dd1\u4e00\u6b21\u5c31\u53ef\u4ee5\u4e86\uff08\u70ba\u4e86\u7bc0\u7701\u8a08\u7b97\u8cc7\u6e90\uff0c\u9019\u90e8\u5206\u662f\u53ef\u4ee5\u88ab\u512a\u5316\u7684\uff0c\u4f8b\u5982\u53ea\u8dd1\u5fc5\u8981\u7684\u8cc7\u6e90\uff09\uff0c\u975e\u5e38\u55ae\u7d14\u3002
\u5f9e\u4e0a\u4f8b\u4f86\u770b\u5c0d\u65bc Map \u548c Reduce \u7684\u5de5\u4f5c\u5c31\u76f8\u5c0d\u55ae\u7d14\u4e86\u3002
\u7576 Mapper \u628a\u4e8b\u60c5\u90fd\u505a\u5b8c\u4e86\u4e4b\u5f8c\uff0c\u6703\u901a\u77e5\u4e2d\u592e\u4e26\u8b93\u4e2d\u592e\u901a\u77e5 Reducer\uff0c\u9019\u6642 Reducer \u6703\u958b\u59cb\u8ddf Mapper \u8981\u8cc7\u6599\u3002 Reducer \u9019\u4e00\u7cfb\u5217\u8981\u8cc7\u6599\u3001\u628a\u5f97\u5230\u7684\u8cc7\u6599\u6392\u5e8f\u5c31\u53eb\u505a shuffle
\uff08\u9019\u548c\u6211\u5011\u5e38\u898b\u7684\u96a8\u6a5f\u6027\u4e0d\u592a\u4e00\u6a23\uff0c\u9700\u6ce8\u610f\u907f\u514d\u641e\u6df7\uff09\u3002
\u4e00\u7d44 Mapper \u52a0 Reducer \u7a31\u70ba\u4e00\u500b \u7a0b\u5e8f\u3002\u800c\u6bcf\u500b\u7a0b\u5e8f\u8f38\u51fa\u7684\u7d50\u679c\u90fd\u6703\u4e1f\u9032 HDFS \u4e2d\u3002
\u8981\u6ce8\u610f\u7684\u662f\uff0c\u6bcf\u6b21 Mapper \u7684\u8f38\u51fa\u90fd\u6703\u505a\u5230\u6392\u5e8f\u7684\u52d5\u4f5c\uff08\u5c31\u50cf\u6211\u5011\u524d\u9762 Unix \u4f8b\u5b50\u4e2d\u7684 sort
\uff09\uff0c \u4e26\u628a\u6392\u5e8f\u5f8c\u7684\u7d50\u679c\u91cd\u65b0\u5206\u914d\u7d66\u4e0d\u540c\u7bc0\u9ede\u7684 Reducer\u3002
\u5c31\u50cf Unix \u90a3\u6a23\uff0c\u55ae\u4e00\u500b\u7a0b\u5e8f\u53ef\u4ee5\u505a\u7684\u4e8b\u60c5\u6709\u9650\uff0c\u4f46\u662f\u900f\u904e\u7d44\u5408\u591a\u500b\u7a0b\u5e8f\u5c31\u53ef\u4ee5\u5275\u9020\u51fa\u9ad8\u6548\u53c8\u5feb\u901f\u8fed\u4ee3\u7684\u61c9\u7528\u3002 \u9019\u4e00\u6574\u4e32\u7684\u7a0b\u5e8f\u7a31\u70ba\u5de5\u4f5c\u6d41\u7a0b\uff08workflow\uff09
\u7136\u800c MapReduce \u4e0d\u50cf Unix \u90a3\u6a23\u53ef\u4ee5\u50b3\u905e\u6a94\u6848\u63cf\u8ff0\u7b26\uff0c \u4ed6\u662f\u900f\u904e\u8f38\u51fa\u5230\u6307\u5b9a\u8cc7\u6599\u593e\u5f8c\u8b93\u4e0b\u4e00\u500b\u7a0b\u5e8f\u53d6\u5f97\u8a72\u8cc7\u6599\u593e\u4e0b\u7684\u8cc7\u6599\u4f5c\u70ba\u8f38\u5165\u4f86\u50b3\u905e\u5176\u8f38\u51fa\uff0c \u9019\u662f\u6709\u597d\u6709\u58de\u7684\u5f85\u6703\u6211\u5011\u518d\u4e00\u8d77\u3002
\u96a8\u8457\u5de5\u4f5c\u6d41\u7a0b\u8d8a\u4f86\u8d8a\u8907\u96dc\uff0c\u6703\u9700\u8981\u4e00\u500b\u597d\u7684\u7ba1\u7406\u7cfb\u7d71\u5e6b\u5fd9\u76e3\u7763\u9019\u4e9b\u7a0b\u5e8f\u3002 \u9019\u6642\u985e\u4f3c Airflow \u7684\u5de5\u4f5c\u6d41\u7a0b\u7ba1\u7406\u4eba\uff08workflow schedular\uff09\u5c31\u51fa\u73fe\u4e86\u3002
"},{"location":"feedback/designing-data-intensive-applications/derived-batch/#\u806f\u5408","title":"\u806f\u5408","text":"\u5f88\u591a\u6642\u5019\u6211\u5011\u4e0d\u6703\u53ea\u770b\u4e00\u500b\u6a94\u6848\uff0c\u6211\u5011\u53ef\u80fd\u6703\u591a\u500b\u6a94\u6848\u540c\u6642\u4f7f\u7528\uff0c \u5c31\u597d\u50cf\u95dc\u806f\u5f0f\u8cc7\u6599\u5eab\u7684\u806f\u5408\uff08Join\uff09\u548c\u7fa4\u7d44\uff08Group\uff09\u3002\u4f46\u662f\u5728 MapReduce \u4e2d\u8981\u600e\u9ebc\u5be6\u4f5c\uff1f
\u5716\u4e0a\u7684\u7bc4\u4f8b\u662f\u627e\u51fa\u300c\u62dc\u8a2a\u900f\u5b9a\u8def\u5f91\uff08path\uff09\u7684\u4eba\u7684\u5e74\u9f61\u300d\uff0c \u6240\u4ee5\u5c31\u9700\u8981\u628a\u4f7f\u7528\u8005\u7684\u6d3b\u52d5\u548c\u4f7f\u7528\u8005\u7684\u8cc7\u8a0a\u505a\u806f\u5408\u3002 \u9019\u6642\u6211\u5011\u53ef\u80fd\u5f97\u51fa\u7684\u7d50\u679c\u5c31\u6703\u662f\uff1a\u300c\u62dc\u8a2a\u8def\u5f91 /x \u7684\u4eba\u7684\u51fa\u751f\u5e74\u4efd\u70ba 1989 \u7684\u4eba\u6578\u662f x \u4eba\u300d\uff1a
\u62dc\u8a2a\u8def\u5f91 /x \u7684\u4eba\u7684\u51fa\u751f\u5e74\u4efd\u70ba 1989 \u7684\u4eba\u6578\u662f 5 \u4eba/x 1989 5\n/x 1990 6\n/y 1991 3\n...\n
\u9019\u88e1\u5c31\u53ef\u4ee5\u770b\u51fa\u806f\u5408\u548c\u7fa4\u7d44\u5728 MapReduce \u4e2d\u5176\u5be6\u662f\u975e\u5e38\u50cf\u7684\u3002 \u4ed6\u5011\u90fd\u662f\u5f9e Mapper \u4e2d\u5f97\u5230\u67d0\u4e9b\u6392\u5e8f\u4e14\u6574\u5408\u5728\u4e00\u8d77\u7684\u8cc7\u6599\u4e4b\u5f8c\uff0c\u505a\u4e00\u4e9b\u8a08\u7b97\u3002
\u540d\u8a5e
\u56e0\u70ba\u9019\u88e1\u7684\u806f\u5408\u662f\u5728\u8f38\u51fa Mapper \u4e26\u6392\u5e8f\u524d\u505a\u7684\uff0c\u6240\u4ee5\u9019\u7a2e\u806f\u5408\u65b9\u5f0f\u53eb\u505a sort-merge joins\uff0c \u4e5f\u56e0\u70ba\u771f\u6b63\u5f97\u5230\u806f\u5408\u7684\u8cc7\u6599\u662f\u5728 Reducer\uff0c\u6240\u4ee5\u4e5f\u53eb\u505a reduce-side joins\u3002
"},{"location":"feedback/designing-data-intensive-applications/derived-batch/#\u5982\u4f55\u8655\u7406\u71b1\u9ede\u504f\u659c","title":"\u5982\u4f55\u8655\u7406\u71b1\u9ede\u504f\u659c\uff1f","text":"\u5c31\u50cf\u6211\u5011\u5728\u5206\u6563\u5f0f\u8cc7\u6599\u5eab\u7684\u5206\u5340\u88e1\u770b\u5230\u7684\uff0c\u5982\u679c\u4f7f\u7528\u8005\u662f\u540d\u4eba\uff0c \u9019\u4e00\u6a23\u6703\u6709\u71b1\u9ede\u7684\u554f\u984c\uff0c\u6211\u5011\u6709\u5e7e\u7a2e\u505a\u6cd5\uff1a
user1 year30 /url/x
\u8b8a\u6210 123 user1 year30 /url/x
\u597d\u8b93\u4ed6\u53ef\u4ee5\u88ab\u6253\u4e82\u3002 \u7576\u6574\u5408\u597d\u4e4b\u5f8c\uff0c\u518d\u900f\u904e user1
\u6574\u5408\u8d77\u4f86\u3002\u6211\u5011\u4e5f\u53ef\u4ee5\u5728 Mapper \u9019\u908a\u505a\u806f\u5408\uff0c\u9019\u6642\u9019\u7a2e\u806f\u5408\u5c31\u53eb\u505a map-side join\u3002
Map-side join \u7684\u8f38\u51fa\u548c\u4e0d\u505a\u806f\u5408\u7684\u8f38\u51fa\u5dee\u4e0d\u591a\uff0c\u76f8\u5c0d\u800c\u8a00 Reduce-side join \u7684\u8f38\u5165\u6703\u53d7\u9650\u65bc\u4f60\u8981\u505a\u806f\u5408\u7684\u9375\u3002 \u4f46\u662f Map-side join \u537b\u53d7\u9650\u65bc\u806f\u5408\u8868\u7684\u6a23\u5b50\uff0c Hive \u7684 metastore \u548c Hadoop \u7684 HCatalog \u5c31\u662f\u7528\u4f86\u8a18\u9304\u9019\u4e9b\u806f\u5408\u8868\u7684\u7279\u6027\u3002
\u6211\u5011\u5be6\u969b\u5728\u4f7f\u7528\u7684\u6642\u5019\uff0c\u5176\u5be6\u5f88\u96e3\u53bb\u9078\u64c7\u61c9\u8a72\u8981\u7528\u4ec0\u9ebc\u806f\u5408\u65b9\u5f0f\uff0c \u6240\u4ee5\u9019\u6642\u5019\u5c31\u51fa\u5148\u9ad8\u7dad\u5ea6\u7684\u5de5\u5177\uff08\u5982 Pig\u3001Hive \u7b49\u7b49\uff0c\u9019\u908a\u6211\u5011\u5f85\u6703\u4e5f\u6703\u5728\u63d0\u5230\uff09\uff0c \u5728\u5e95\u5c64\u5e6b\u6211\u5011\u81ea\u52d5\u53bb\u9078\u64c7\u9019\u4e9b\u6771\u897f\u3002
"},{"location":"feedback/designing-data-intensive-applications/derived-batch/#vs-mpp","title":"v.s. MPP","text":"\u9084\u8a18\u5f97\u4e4b\u524d\u5728\u8a0e\u8ad6\u5206\u5340\u7684\u6642\u5019\u6709\u63d0\u5230 Massive Parallel Processing(MPP) \u55ce\uff1f \u4ed6\u662f\u900f\u904e\u5206\u5340\u8b93\u4e0d\u540c\u7bc0\u9ede\u7684\u8cc7\u6599\u5eab\u8655\u7406\u5404\u81ea\u64c1\u6709\u7684\u8cc7\u6599\u3002\u6211\u5011\u4e0b\u9762\u5c31\u4f86\u770b\u770b\u5169\u8005\u9593\u7684\u5dee\u7570\u5427\u3002
"},{"location":"feedback/designing-data-intensive-applications/derived-batch/#\u8cc7\u6599\u7d50\u69cb","title":"\u8cc7\u6599\u7d50\u69cb","text":"\u6279\u6b21\u8655\u7406\u7684\u8cc7\u6599\u662f\u751f\u7684\uff08Raw\uff09\uff0c\u76f8\u5c0d\u65bc MPP \u662f\u7d50\u69cb\u5316\u7684\uff08schema\uff09
\u4e0a\u9762\u63d0\u5230\u7684\u300c\u751f\u300d\u4ee3\u8868\u4ed6\u4e0d\u9700\u8981\u5148\u4ed4\u7d30\u800c\u8b39\u614e\u5730\u628a\u8cc7\u6599\u7d50\u69cb\u5316\u5c31\u53ef\u4ee5\u76f4\u63a5\u5132\u5b58\uff0c \u7576\u672a\u4f86\u9700\u8981\u8f49\u6210\u4efb\u4f55\u5546\u52d9\u908f\u8f2f\u7684\u7d50\u69cb\u90fd\u53ef\u4ee5\uff0c\u9019\u4e5f\u662f\u6240\u8b02\u7684\u58fd\u53f8\u7406\u8ad6\uff08Sushi\uff09\uff1a \u751f\u7684\u6bd4\u719f\u7684\u597d\u5403\u3002\u9019\u4e4b\u4e2d\u7684\u61c9\u7528\u6709\u4e9b\u4eba\u6703\u7a31\u70ba\u8cc7\u6599\u6e56\uff08Data lake\uff09\u6216\u4f01\u696d\u8cc7\u6599\u5009\u5132\uff08enterprise data hub\uff09\u3002
\u7576\u8cc7\u6599\u53ef\u4ee5\u8f15\u6613\u8f49\u6210\u4efb\u610f\u683c\u5f0f\u6642\uff0c\u8de8\u55ae\u4f4d\u7684\u5408\u4f5c\u5c31\u80fd\u8f15\u6613\u9054\u6210\uff0c \u4f8b\u5982 \u5718\u968a A \u60f3\u8981\u62ff \u5718\u968a B \u7684\u8cc7\u6599\u6642\uff0c\u4ed6\u4e0d\u9700\u8981\u95b1\u8b80\u7e41\u7463\u7684\u6587\u4ef6\u7b49\u7b49\uff0c \u53ef\u4ee5\u76f4\u63a5\u62ff\u539f\u59cb\u8cc7\u6599\u505a\u4efb\u4f55\u8f49\u63db\u52a0\u901f\u5275\u65b0\u7684\u958b\u767c\u3002
\u4e5f\u56e0\u6b64 Hadoop \u5e38\u5e38\u88ab\u61c9\u7528\u65bc ETL \u4e4b\u4e2d\uff0c\u7576\u4efb\u4f55\u7dda\u4e0a\u8cc7\u6599\u66f4\u65b0\u6642\uff0c \u6211\u53ef\u4ee5\u5148\u628a\u539f\u59cb\u8cc7\u6599\u5b58\u9032 HDFS\uff0c\u518d\u5229\u7528 MapReduce \u8f49\u6210\u9700\u8981\u7684 \u8cc7\u6599\u5009\u5132 \u683c\u5f0f\u4e26\u7f6e\u5165\u5176\u4e2d\u3002
"},{"location":"feedback/designing-data-intensive-applications/derived-batch/#\u5bb9\u932f\u6027","title":"\u5bb9\u932f\u6027","text":"\u6279\u6b21\u8655\u7406\u53ef\u4ee5\u505a\u5230 roll back\u3002
\u6279\u6b21\u8655\u7406\u9069\u5408\u6a5f\u5668\u5b78\u7fd2\u3001\u63a8\u85a6\u7cfb\u7d71\u7b49\u7b49\uff0c\u9019\u4e9b\u61c9\u7528\u7684\u7522\u51fa\u901a\u5e38\u90fd\u4ee3\u8868\u8457\uff1a \u6211\u5229\u7528\u539f\u59cb\u8cc7\u6599\uff08SOT\uff09\u7522\u51fa\u4e00\u7d44\u65b0\u7684\u884d\u751f\u8cc7\u6599\uff08Derived data\uff09\uff0c \u4f8b\u5982\uff0c\u4f7f\u7528\u8005\u7de8\u865f\u548c\u63a8\u85a6\u7522\u54c1\u7de8\u865f\u7684\u9375\u503c\u7d44\u3002\u7522\u51fa\u7684\u8cc7\u6599\u5c31\u53ef\u4ee5\u653e\u5728\u4efb\u4e00\u53f0\u7bc0\u9ede\u7684\u8cc7\u6599\u7cfb\u7d71\u4e2d\uff0c\u4e26\u900f\u904e\u8cc7\u6599\u5eab\u8b80\u53d6\u8a72\u8cc7\u6599\u63d0\u4f9b\u641c\u5c0b\u3002 \u9019\u904e\u7a0b\u4e5f\u4ee3\u8868\u4efb\u4f55\u4e00\u7d44\u65b0\u7684\u7522\u51fa\u5982\u679c\u6709\u4efb\u4f55\u932f\u8aa4\uff0c\u90fd\u53ef\u4ee5\u5f88\u5feb\u901f\u7684\u5207\u63db\u5230\u820a\u7248\u672c\uff0c\u5c31\u597d\u50cf\u61c9\u7528\u7a0b\u5f0f\u7684 roll back \u6a5f\u5236\u3002
\u53ef\u4ee5\u62ff\u9019\u4e9b\u6a94\u6848\u63d0\u4f9b\u641c\u5c0b\u7684\u8cc7\u6599\u5eab\u53ef\u80fd\u6709\uff1a
\u9019\u6a23\u5bb9\u932f\u7684\u6a5f\u5236\u7570\u65bc\u4ee5\u524d MPP\uff0c\u7576\u4f60\u66f4\u65b0\u8cc7\u6599\u4e4b\u5f8c\u901a\u5e38\u4ee3\u8868\u8457\u8cc7\u6599\u5eab\u7684\u8cc7\u6599\u78ba\u5be6\u88ab\u7570\u52d5\u4e86\u3002
"},{"location":"feedback/designing-data-intensive-applications/derived-batch/#\u91cd\u4f86\u7684\u6a5f\u5236","title":"\u91cd\u4f86\u7684\u6a5f\u5236","text":"\u7531\u65bc\u6bcf\u6b21\u57f7\u884c\u7a0b\u5e8f\u5f8c\uff0c\u90fd\u6703\u628a\u8f38\u51fa\u4e1f\u9032 HDFS\uff0c\u9019\u6a23\u5c31\u53ef\u4ee5\u78ba\u4fdd\u5728\u4e0b\u4e00\u6b21\u7684\u7a0b\u5e8f\u57f7\u884c\u4e2d\u65b7\u4e4b\u5f8c\uff0c \u53ef\u4ee5\u5229\u7528\u5df2\u7d93\u5728\u78c1\u789f\u4e2d\u7684\u8cc7\u6599\u76f4\u63a5\u91cd\u8907\u904b\u884c\u8a72\u7a0b\u5e8f\u3002 \u9019\u65b9\u5f0f\u7570\u65bc MPP \u6703\u76f4\u63a5\u6368\u68c4\uff08abort\uff09\u8a72\u8acb\u6c42\u6216\u8005\u5168\u90e8\u91cd\u505a\uff08\u9084\u8a18\u5f97\u539f\u5b50\u6027\u55ce\uff1f\uff09\u3002
\u4f46\u554f\u984c\u662f\uff0c\u6709\u9700\u8981\u505a\u5230\u9019\u9ebc\u5bb9\u932f\u55ce\uff1f\u96fb\u8166\u4e0d\u662f\u4e0d\u5e38\u58de\u6389\u55ce\uff1f
\u56e0\u70ba\u6279\u6b21\u8655\u7406\u7684\u91cd\u8981\u6027\u901a\u5e38\u4f4e\u65bc\u8655\u7406\u7dda\u4e0a\u8acb\u6c42\u7684\u6a5f\u5668\uff0c\u8655\u7406\u7dda\u4e0a\u8acb\u6c42\u7684\u7bc0\u9ede\u5c0d\u65bc\u9ad8\u53ef\u7528\u6027\u7684\u8981\u6c42\u975e\u5e38\u9ad8\uff0c \u9019\u6642\u5728\u5171\u7528\u8cc7\u6e90\u7684\u74b0\u5883\u4e0b\uff08\u4f8b\u5982\u96f2\u7aef\u53ef\u80fd\u90fd\u662f\u5728\u540c\u4e00\u500b\u5be6\u9ad4\u4e0d\u540c VM\uff09\u6703\u628a\u6279\u6b21\u8655\u7406\u7684\u7a0b\u5e8f\u91cd\u8981\u6027\uff08priority\uff09\u8abf\u4f4e\uff0c \u7576\u5176\u4ed6\u91cd\u8981\u6027\u9ad8\u7684\u7a0b\u5e8f\u9700\u8981\u8cc7\u6e90\uff08CPU/\u8a18\u61b6\u9ad4\uff09\u6642\uff0c\u6279\u6b21\u8655\u7406\u5c31\u5f88\u53ef\u80fd\u88ab\u4e2d\u65b7\u3002
\u4ee5 Google \u7684\u7d71\u8a08\u4f86\u8aaa\uff0c \u6bcf\u500b\u5c0f\u6642\u6709 5% \u7684\u6a5f\u7387\u6703\u56e0\u70ba\u5176\u4ed6\u7a0b\u5e8f\u7684\u95dc\u4fc2\u5c0e\u81f4\u7a0b\u5e8f\u91cd\u8dd1\u3002
\u6240\u4ee5\u5728 MapReduce \u4e2d\uff0c\u6bcf\u500b\u7a0b\u5e8f\u7d50\u675f\u90fd\u628a\u7d50\u679c\u4e1f\u9032 HDFS \u807d\u8d77\u4f86\u5c31\u5408\u7406\u591a\u4e86\uff0c \u56e0\u70ba\u6bcf\u4e00\u500b\u5de5\u4f5c\u6d41\u53ef\u80fd\u8dd1\u4e00\u6b21\u90fd\u597d\u5e7e\u5c0f\u6642\uff0c\u82e5\u4e2d\u65b7\u6642\u4e0d\u80fd\u6b63\u78ba\u91cd\u8907\u4e0a\u4e00\u500b\u7a0b\u5e8f\u5c31\u6703\u5f88\u6d6a\u8cbb\u8cc7\u6e90\u3002
"},{"location":"feedback/designing-data-intensive-applications/derived-batch/#\u5c0f\u7bc0","title":"\u5c0f\u7bc0","text":"\u9762\u5411 \u6279\u6b21\u8655\u7406 MPP \u8cc7\u6599 \u751f/\u539f\u59cb \u7d50\u69cb\u5316 \u7522\u51fa \u884d\u751f\u8cc7\u6599 \u5831\u8868 \u5fa9\u539f \u8f15\u6613 \u8f03\u96e3 \u5f48\u6027 \u9ad8 \u4f4e \u76f4\u89c0 \u4f4e \u9ad8 \u5bb9\u932f \u5bb9\u6613 \u539f\u5b50\u6027MPP \u548c MapReduce \u7684\u5dee\u7570
\u6211\u5011\u6574\u7406\u4e00\u4e0b\u5169\u8005\u5dee\u7570\uff1a
\u4e0a\u9762\u7684\u6bd4\u8f03\u5176\u5be6\u76f8\u5c0d\u65e9\u671f\uff0c\u5f85\u6703\u5728\u4ecb\u7d39\u8cc7\u6599\u6d41\u5f15\u64ce\uff08dataflow engine\uff09\u6642\uff0c \u6211\u5011\u6703\u518d\u505a\u4e00\u6b21\u6bd4\u8f03\uff0c\u9019\u6642\u5019\u6703\u767c\u73fe\u96a8\u8457\u6f14\u9032\uff0c \u6279\u6b21\u7a0b\u5f0f\u548c MPP \u5176\u5be6\u6b63\u4e92\u76f8\u5b78\u7fd2\u8457\u5f7c\u6b64\u7684\u512a\u9ede\uff08\u5c31\u597d\u50cf CISC/RISC \u7684\u95dc\u4fc2\uff09\u3002
"},{"location":"feedback/designing-data-intensive-applications/derived-batch/#vs-unix","title":"v.s. Unix","text":"\u518d\u4f86\u6bd4\u8f03\u4e00\u4e0b MapReduce \u548c\u4e00\u958b\u59cb\u8a0e\u8ad6\u7684 Unix \u5427\uff01
\u76f8\u6027\u6027\uff1a
\u4e0d\u78ba\u5b9a\u6027
\u6709\u6642\u8a08\u7b97\u4e0d\u662f\u78ba\u5b9a\u6027\u7684\uff08deterministic\uff09\uff0c \u4e5f\u5c31\u662f\u76f8\u540c\u7684\u8f38\u5165\u6703\u7522\u751f\u4e0d\u540c\u7684\u8f38\u51fa\uff08\u53ef\u80fd\u4f9d\u8cf4\u65bc\u5916\u90e8\u8cc7\u6e90\u6216\u96a8\u6a5f\u72c0\u614b\uff09\uff0c \u9019\u6642\u5c31\u5f88\u96e3\u4fdd\u8b49\u5bb9\u932f\u6027\uff08\u7121\u6cd5\u8f15\u6613\u91cd\u8a66\uff09\u4e86\u3002
\u5dee\u7570\u6027\uff1a
{print $4}
\uff0c\u800c\u662f {print $latency}
\u70ba\u4e86\u89e3\u6c7a\u4e0a\u8ff0 MapReduce \u7684\u7f3a\u9ede\uff0c\u65b0\u578b\u614b\u7684\u6846\u67b6\u5c31\u51fa\u73fe\u4e86\uff1aSpark, Tez, Flink\u3002
\u7570\u65bc MapReduce \u8b93\u6bcf\u4e00\u500b\u5b50\u7a0b\u5e8f\u5f7c\u6b64\u7368\u7acb\uff0c\u6700\u5f8c\u518d\u6574\u5408\u4e00\u8d77\uff0c \u4ed6\u5011\u6703\u628a\u5168\u90e8\u7684\u7a0b\u5e8f\u7576\u6210\u55ae\u4e00\u500b\u5de5\u4f5c\uff08job\uff09\uff0c\u9019\u7a2e\u6a21\u5f0f\u7a31\u5176\u70ba\u8cc7\u6599\u6d41\u5f15\u64ce\uff08dataflow engine\uff09\u3002 \u55ae\u4e00\u5de5\u4f5c\u4e2d\u6703\u6709\u591a\u500b\u904b\u7b97\u5b50\uff08operator\uff09\u5c31\u50cf MapReduce \u7684\u55ae\u4e00\u7a0b\u5e8f\u4e00\u6a23\uff0c \u53ea\u662f\u4e0d\u540c\u7684\u904b\u7b97\u5b50\u4e4b\u9593\u7684\u6e9d\u901a\u6709\u5e7e\u7a2e\u6a21\u5f0f\uff1a
\u56de\u61b6\u4e00\u4e0b\u6279\u6b21\u8655\u7406\u7684\u610f\u7fa9
\u8a18\u5f97\u524d\u9762\u63d0\u7684\uff1a\u6279\u6b21\u8655\u7406\u5c31\u662f\u628a\u8cc7\u6599\u5206\u6210\u4e00\u584a\u4e00\u584a\u4e1f\u7d66\u4e0d\u540c\u7bc0\u9ede\u8655\u7406\u3002 \u4e5f\u5c31\u662f\u6bcf\u500b\u904b\u7b97\u5b50\uff08\u7a0b\u5f0f\u78bc\uff09\u6703\u6ce8\u5165\u9032\u5404\u500b\u7bc0\u9ede\uff0c\u4e26\u5206\u914d\u76f8\u5c0d\u61c9\u7684\u8cc7\u6599\u5206\u5340\u8b93\u4ed6\u904b\u7b97\u3002
"},{"location":"feedback/designing-data-intensive-applications/derived-batch/#vs-mapreduce","title":"v.s. MapReduce","text":"\u9019\u4e9b\u6846\u67b6\u548c MapReduce \u5dee\u7570\u9020\u6210\u7684\u5f71\u97ff\u6709\uff1a
\u904b\u7b97\u5b50\u9593\u7684\u8cc7\u6599\u4e0d\u6703\u4e1f\u9032 HDFS \u5c31\u4ee3\u8868\u7576\u6709\u7bc0\u9ede\u5931\u80fd\u6642\uff0c\u9700\u8981\u77e5\u9053\u8a72\u8cc7\u6599\u5206\u5340\u662f\u54ea\u4e9b\u8cc7\u6599\uff0c \u9019\u5c31\u9700\u8981\u4e00\u500b\u4e2d\u592e\u7ba1\u7406\u7cfb\u7d71\u3002 \u4f8b\u5982 Spark \u4f7f\u7528 Resilint Distributed Dataset(RDD)\u3001Flink \u5b9a\u671f\u8a2d\u7f6e\u6aa2\u67e5\u9ede\uff08checkpoint\uff09\u3002
\u900f\u904e\u77ad\u89e3\u904b\u7b97\u5b50\u4e4b\u9593\u7684\u95dc\u4fc2\uff08\u9084\u8a18\u5f97\u524d\u9762\u63d0\u7684\u4e09\u7a2e\u95dc\u4fc2\u55ce\uff1f\uff09\u5c31\u53ef\u4ee5\u6c7a\u5b9a\u4e0a\u4e00\u52d5\u7684\u7a0b\u5e8f\u8f38\u51fa\u5f9e\u54ea\u908a\u62ff\u3002
"},{"location":"feedback/designing-data-intensive-applications/derived-batch/#\u5176\u4ed6\u5ef6\u4f38","title":"\u5176\u4ed6\u5ef6\u4f38","text":"\u56e0\u70ba\u6279\u6b21\u904b\u7b97\u5728\u5206\u6563\u5f0f\u7cfb\u7d71\u7684\u767c\u5c55\u8da8\u65bc\u6210\u719f\uff0c\u958b\u767c\u8005\u958b\u59cb\u95dc\u6ce8\u5f88\u591a\u5176\u4ed6\u8b70\u984c\uff1a
less
\u4e00\u6a23\uff0c\u53ef\u4ee5\u770b\u5230\u90e8\u5206\u7684\u904b\u7b97\u7d50\u679c\u800c\u4e0d\u662f\u5168\u90e8\u8dd1\u5b8cMPP \u548c\u8cc7\u6599\u6d41\u5f15\u64ce\u7684\u5dee\u7570
\u8cc7\u6599\u6d41\u5f15\u64ce\u548c MPP \u6b63\u4e92\u76f8\u5b78\u7fd2\uff1a
\u6279\u6b21\u8655\u7406\u4e0d\u662f\u6392\u7a0b\u6253 API\uff0c\u800c\u662f\u628a\u8cc7\u6599\u5206\u6210\u4e00\u5c0f\u584a\u4e00\u5c0f\u584a\uff0c\u8b93\u591a\u500b\u7121\u5171\u4eab\u7684\u7bc0\u9ede\u5e73\u884c\u904b\u7b97\u3002
\u672c\u6b21\u5206\u4eab\u7684\u9806\u5e8f\u5927\u81f4\u5982\u4e0b\uff1a
\u5f9e\u9019\u4e4b\u4e2d\u4e5f\u80fd\u770b\u51fa\u6574\u500b\u6279\u6b21\u8655\u7406\u7684\u767c\u5c55\u908f\u8f2f\u548c\u80cc\u5f8c\u63a8\u52d5\u4ed6\u53d7\u5230\u5927\u5bb6\u95dc\u6ce8\u7684\u539f\u56e0\u3002 \u4e0d\u904e\u4e0a\u9762\u63d0\u5230\u7684\u300c\u8cc7\u6599\u300d\u90fd\u5047\u8a2d\u4ed6\u662f\u6709\u9650\u7684\uff0c\u4f8b\u5982\u4f7f\u7528\u8005\u53ef\u80fd\u5c31\u4e94\u767e\u842c\u7b46\u3001\u4f7f\u7528\u8005\u6d3b\u52d5\u7684\u8cc7\u6599\u5c31 50TB \u7b49\u7b49\uff0c \u7136\u800c\u73fe\u5be6\u751f\u6d3b\u7684\u8cc7\u6599\u662f\u6301\u7e8c\u4e0d\u65b7\u7684\uff0c\u4f8b\u5982\u4f7f\u7528\u8005\u6d3b\u52d5\u7684\u8cc7\u6599\u6bcf\u5206\u6bcf\u79d2\u90fd\u5728\u589e\u52a0\uff0c \u9019\u6a23\u6211\u5011\u5728\u7b97\u6392\u5e8f\u7684\u7d50\u679c\u5c31\u6703\u6709\u5dee\u7570\uff0c\u8a72\u600e\u9ebc\u8655\u7406\uff1f
\u9019\u5c31\u6703\u9700\u8981\u7528\u5230\u4e0b\u4e00\u7ae0\u7684\u4e32\u6d41\u8655\u7406\u3002
"},{"location":"feedback/designing-data-intensive-applications/derived-stream/","title":"\u884d\u751f\u8cc7\u6599\u2014\u4e32\u6d41\u8655\u7406","text":"\u8cc7\u6599\u96a8\u6642\u90fd\u5728\u7522\u751f\uff0c\u900f\u904e\u4e32\u6d41\u8655\u7406\u7b97\u51fa\u6700\u5373\u6642\u7684\u7d50\u679c\u3002
HackMD \u5831\u544a\u6587\u672c
"},{"location":"feedback/designing-data-intensive-applications/derived-stream/#\u4e32\u6d41","title":"\u4e32\u6d41","text":"\u4e32\u6d41\uff08stream\uff09\u4ee3\u8868\u8005\u8cc7\u6599\u662f\u9023\u7e8c\u6027\u7684\u800c\u975e\u4e00\u6b21\u6027\u7684\u50b3\u905e\u3002
Stream v.s. Read/Write
\u4e00\u958b\u59cb\u63a5\u89f8\u7db2\u8def\u61c9\u7528\u7a0b\u5f0f\u6642\uff0c \u6211\u5c0d\u65bc\u4e00\u4e9b\u6a94\u6848\uff08\u6216\u7db2\u8def\uff09\u7684\u8f38\u5165\u8f38\u51fa\u51fd\u5f0f \uff08\u4f8b\u5982 PHP \u548c JS\uff09\u7528 stream \u5f88\u4e0d\u89e3\uff0c \u70ba\u4ec0\u9ebc\u4e0d\u7528 read/write \u5c31\u597d\uff0c\u5e79\u561b\u641e\u500b\u65b0\u540d\u8a5e\u3002
\u5176\u5be6\u7528 stream \u66f4\u80fd\u8868\u73fe\u51fa\uff1a\u8cc7\u6599\u662f\u4e00\u9ede\u4e00\u9ede\u50b3\u904e\u53bb\uff0c\u800c\u975e\u4e00\u6b21\u6027\u9001\u51fa\u3002 \u4f7f\u7528 stream \u9019\u500b\u540d\u8a5e\u80fd\u5e6b\u52a9\u6211\u5011\u66f4\u4e86\u89e3\u5176\u5167\u90e8\u5be6\u4f5c\u7684\u5167\u5bb9\u3002\u904e\u53bb\u7684\u7591\u554f\u7e3d\u5728\u4e0d\u7d93\u610f\u9593\u5f97\u5230\u89e3\u7b54\u3002
"},{"location":"feedback/designing-data-intensive-applications/derived-stream/#\u72c0\u614b\u7684\u6210\u5f62","title":"\u72c0\u614b\u7684\u6210\u5f62","text":"\u60f3\u50cf\u4e00\u4e0b\u9280\u884c\u662f\u600e\u9ebc\u5b58\u8cc7\u6599\u7684\uff1f
\u7576\u4f60\u5e33\u6236\u6709\u554f\u984c\u6253\u53bb\u7d66\u9280\u884c\u6642\uff0c\u4ed6\u5011\u4e0d\u6703\u544a\u8a34\u4f60\u6839\u64da\u6211\u5011\u5728\u8cc7\u6599\u5eab\u7684\u8868\u683c\u4e2d\uff0c\u4f60\u73fe\u5728\u7684\u5e33\u6236\u5c31\u662f 300 \u584a\uff0c \u6240\u4ee5\u6c92\u932f\u4f60\u7684\u5e33\u6236\u76ee\u524d\u5c31\u662f 300 \u584a\uff0c\u76f8\u53cd\u7684\u4ed6\u5011\u6703\u544a\u8a34\u4f60\u4f60\u5728\u67d0\u4e00\u5929\u8cb7\u4e86\u4ec0\u9ebc\u6771\u897f\u82b1\u4e86\u591a\u5c11\u9322\uff0c \u5e33\u6236\u5f9e\u591a\u5c11\u9322\u8b8a\u5230\u591a\u5c11\u9322\u3002\u9019\u7a2e\u65b9\u5f0f\u4e26\u975e\u5f9e\u96fb\u8166\u6642\u4ee3\u624d\u958b\u59cb\uff0c\u800c\u662f\u5728\u5f88\u4e45\u4ee5\u524d\u91d1\u878d\u696d\u5c31\u662f\u9019\u9ebc\u505a\u7684\uff0c \u4ee5\u524d\u5ba2\u670d\u54e1\u624b\u4e0a\u53ef\u80fd\u6703\u62ff\u8457\u4e00\u672c\u5e33\u55ae\uff0c\u4e0a\u9762\u4e0d\u6703\u53ea\u6709\u4e00\u500b\u6578\u5b57\uff0c\u800c\u662f\u4e00\u9023\u4e32\u4e0d\u540c\u6642\u9593\u7684\u7570\u52d5\uff08\u5373\u4f7f\u8a72\u7570\u52d5\u672c\u8eab\u662f\u932f\u7684\uff09\u3002 \u4ed6\u5011\u6703\u5f9e\u4e2d\u544a\u8a34\u4f60\u4e0a\u4e00\u6b21\u4ea4\u6613\u5728\u4ec0\u9ebc\u6642\u5019\uff0c\u5e33\u6236\u5f9e\u591a\u5c11\u9322\u8b8a\u5230\u591a\u5c11\u9322\uff0c\u7136\u5f8c\u518d\u4f9d\u5e8f\u5f80\u4e0a\u8ffd\u554f\u984c\u51fa\u5728\u54ea\u88e1\u3002
\u9019\u7a2e\u5132\u5b58\u7684\u65b9\u5f0f\u4e0d\u662f\u5132\u5b58\u8cc7\u6599\u6700\u7d42\u7684\u72c0\u614b\uff0c\u800c\u662f\u5132\u5b58\u53ef\u4ee5\u8b8a\u6210\u73fe\u5728\u72c0\u614b\u7684\u6240\u6709\u300c\u6b77\u53f2\u7d00\u9304\u300d\u3002 \u9019\u7a2e\u7d00\u9304\u4e00\u822c\u7a31\u70ba\u4e8b\u4ef6\u3002\u800c\u4e00\u9023\u4e32\u7684\u4e8b\u4ef6\u5c31\u662f\u672c\u6b21\u8981\u8a0e\u8ad6\u7684\u4e32\u6d41\u3002
"},{"location":"feedback/designing-data-intensive-applications/derived-stream/#\u4e8b\u4ef6\u662f\u4e0d\u8b8a\u7684","title":"\u4e8b\u4ef6\u662f\u4e0d\u8b8a\u7684","text":"\u6240\u6709\u7684\u72c0\u614b\u90fd\u662f\u4e8b\u4ef6\u7684\u7d2f\u7a4d\uff0c\u6211\u5011\u5e38\u4f7f\u7528\u7684\u8cc7\u6599\u5eab\u5c31\u662f\u5132\u5b58\u9019\u4e9b\u7d2f\u7a4d\u4e8b\u4ef6\u5f8c\u7684\u300c\u72c0\u614b\u300d\uff08\u70ba\u4e86\u63d0\u9ad8\u8b80\u53d6\u7684\u6548\u7387\uff09\u3002
\u4e0d\u8ad6\u4f7f\u7528\u8005\u662f\u5426\u771f\u7684\u505a\u4e86\u54ea\u4e9b\u6539\u8b8a\uff08\u5ea7\u4f4d\u53ef\u80fd\u56e0\u70ba\u6eff\u4e86\u8a02\u7968\u5931\u6557\u6216\u8005\u8cfc\u7269\u8eca\u7684\u5546\u54c1\u589e\u52a0\u5f8c\u53c8\u88ab\u79fb\u9664\uff09\uff0c \u9019\u4e9b\u4e8b\u4ef6\u4e00\u65e6\u7522\u751f\u90fd\u7121\u6cd5\u88ab\u7570\u52d5\uff08\u5118\u7ba1\u53ef\u80fd\u56e0\u70ba\u96b1\u79c1\u7b49\u539f\u56e0\u88ab\u8feb\u79fb\u9664\uff0c\u4f46\u54f2\u5b78\u4e0a\u4fdd\u6301\u4e0d\u8b8a\uff09\uff0c \u76f8\u5c0d\u800c\u8a00\u300c\u72c0\u614b\u300d\u537b\u662f\u5e38\u5e38\u88ab\u6539\u8b8a\u7684\uff0c\u4f46\u9019\u5169\u8005\u662f\u76f8\u8f14\u76f8\u6210\u7684\uff1a\u6211\u5011\u900f\u904e\u4e8b\u4ef6\u7522\u751f\u72c0\u614b\uff0c\u518d\u5f9e\u72c0\u614b\u7522\u751f\u4e8b\u4ef6\u3002
\u5f88\u591a\u8cc7\u6599\u5eab\u61c9\u7528\uff08\u4f8b\u5982 MVCC\uff09\u6216\u8005\u61c9\u7528\u7a0b\u5f0f\uff08\u4f8b\u5982 Git\uff09\u80cc\u5f8c\u90fd\u6709\u9019\u500b\u6982\u5ff5\u3002
"},{"location":"feedback/designing-data-intensive-applications/derived-stream/#\u8cc7\u6599\u5eab\u7684\u61c9\u7528","title":"\u8cc7\u6599\u5eab\u7684\u61c9\u7528","text":"\u6211\u5011\u4f86\u7c21\u55ae\u63d0\u4e00\u4e0b\u5728\u8cc7\u6599\u5eab\u4e2d\u4f7f\u7528\u4e32\u6d41\u8655\u7406\u7684\u6a5f\u5236\u3002
\u8cc7\u6599\u5eab\u7684\u5beb\u5165\u5c31\u662f\u4e8b\u4ef6\uff0c\u60f3\u60f3\u55ae\u4e00\u9818\u8896\u7684\u8907\u88fd\uff0c\u7576\u9818\u8896\u6536\u5230\u5beb\u5165\u8acb\u6c42\u6642\u6703\u628a\u8acb\u6c42\u4e1f\u9032\u8907\u88fd\u65e5\u8a8c\u4e2d\uff0c \u7136\u5f8c\u5404\u500b\u8ffd\u96a8\u8005\u6703\u8ffd\u8e64\u9019\u4e9b\u8907\u88fd\u65e5\u8a8c\u4e26\u6839\u64da\u5176\u4e2d\u7684\u5167\u5bb9\u7570\u52d5\u8cc7\u6599\u5eab\u7684\u8cc7\u6599\uff0c\u9019\u4e9b\u8acb\u6c42\u5c31\u662f\u6240\u8b02\u7684\u300c\u4e8b\u4ef6\u300d\u3002
\u6211\u5011\u4e5f\u6709\u5728\u5168\u57df\u9806\u5e8f\u5ee3\u64ad\u63d0\u5230\u6709\u4e00\u7fa4\u5354\u8abf\u8005\u6703\u628a\u5168\u57df\u9806\u5e8f\u544a\u77e5\u7d66\u5404\u500b\u7bc0\u9ede\uff0c\u9054\u6210\u6b63\u78ba\u7684\u56e0\u679c\u95dc\u4fc2\uff0c \u9019\u5176\u4e2d\u7684\u300c\u9806\u5e8f\u300d\u5c31\u662f\u4e00\u7a2e\u4e8b\u4ef6\uff0c\u4e26\u50b3\u905e\u7d66\u5404\u500b\u7bc0\u9ede\u3002
"},{"location":"feedback/designing-data-intensive-applications/derived-stream/#\u548c\u6279\u6b21\u7684\u5dee\u7570","title":"\u548c\u6279\u6b21\u7684\u5dee\u7570","text":"\u5f9e\u4e0a\u9762\u7684\u4f8b\u5b50\u4e2d\u53ef\u4ee5\u770b\u5230\uff0c\u6211\u5011\u6709\u4e86\u4e8b\u4ef6\u5c31\u6703\u6709\u7372\u5f97\u8a72\u4e8b\u4ef6\u7684\u89d2\u8272\u548c\u7522\u751f\u8a72\u4e8b\u4ef6\u7684\u89d2\u8272\uff0c \u9019\u4e9b\u89d2\u8272\u5206\u5225\u7a31\u70ba \u8ffd\u8e64\u8005\uff08consumer, subscriber, recipient\uff09\u548c \u767c\u5e03\u8005\uff08publisher, sender, producer\uff09\u3002
\u5c31\u597d\u50cf\u5728\u6279\u6b21\u8655\u7406\u4e2d\u6709\u4e00\u500b\u5de5\u4f5c\u6d41\u6216\u7a0b\u5e8f\u6703\u628a\u7d50\u679c\u8f38\u51fa\u6210\u4e00\u4efd\u6a94\u6848\uff0c \u63a5\u4e0b\u4f86\u5c31\u53ef\u4ee5\u8b93\u5176\u4ed6\u6279\u6b21\u7a0b\u5e8f\u628a\u9019\u4efd\u6a94\u6848\u7576\u6210\u8f38\u5165\uff08\u6216\u806f\u5408\u8868\uff09\u9032\u884c\u4e0b\u4e00\u500b\u5de5\u4f5c\u6d41\u6216\u7a0b\u5e8f\u3002 \u5c0d\u61c9\u65bc\u4e32\u6d41\u8655\u7406\u7684\u767c\u5e03\u8005\u548c\u8ffd\u8e64\u8005\u662f\u4e00\u6a23\u7684\uff0c\u800c\u9019\u4efd\u300c\u6a94\u6848\u300d\u5728\u4e32\u6d41\u8655\u7406\u4e2d\u4ee3\u8868\u8457\u4e00\u9023\u4e32\u7684\u4e8b\u4ef6\uff0c \u4e5f\u5c31\u662f \u4e32\u6d41 \u6216 \u4e3b\u984c\uff08stream, topic\uff09\u3002
trigger \u4e5f\u662f\u4e32\u6d41\u8655\u7406
\u95dc\u806f\u5f0f\u8cc7\u6599\u5eab\u6709 trigger
\u9019\u7a2e\u985e\u4f3c\u529f\u80fd\uff0c\u4f46\u662f\u9019\u6703\u8b93\u55ae\u53f0\u8cc7\u6599\u5eab\u8b8a\u5f88\u8907\u96dc\uff0c \u5f71\u97ff\u5176\u4ed6\u61c9\u8a72\u505a\u7684\u4e8b\u60c5\u7684\u6548\u7387\uff0c \u4e14 trigger
\u80fd\u505a\u7684\u4e8b\u4e5f\u5f88\u6709\u9650\u3002
\u6211\u5011\u901a\u5e38\u53ef\u4ee5\u8b93\u8ffd\u8e64\u8005\u5b9a\u671f\u53bb\u548c\u767c\u5e03\u8005\u8981\u8cc7\u6599\uff0c\u9019\u6a23\u4e5f\u80fd\u9054\u6210\u6240\u8b02\u7684\u5373\u6642\u8cc7\u6599\u66f4\u65b0\uff0c \u4f46\u662f\u9019\u6703\u8b93\u554f\u984c\u63d0\u5347\u5230\u6211\u8a72\u591a\u4e45\u548c\u767c\u5e03\u8005\u8981\u8cc7\u6599\uff1f \u800c\u9019\u554f\u984c\u5e38\u5e38\u6c92\u6709\u4e00\u500b\u597d\u7b54\u6848\uff0c\u540c\u6642\u7576\u8ffd\u8e64\u8005\u8b8a\u591a\u7684\u6642\u5019\uff0c\u767c\u5e03\u8005\u6703\u8b8a\u5f97\u5f88\u5fd9\uff0c\u9019\u901a\u5e38\u4e0d\u662f\u500b\u597d\u65b9\u6cd5\u3002
"},{"location":"feedback/designing-data-intensive-applications/derived-stream/#\u5bb9\u932f","title":"\u5bb9\u932f","text":"\u7576\u8ffd\u8e64\u8005\u4e0d\u80fd\u6b63\u5e38\u904b\u4f5c\u6642\u6709\u53ef\u80fd\u662f\u56e0\u70ba\uff1a
\u5fc5\u8981\u6027
\u6709\u4e9b\u61c9\u7528\u5141\u8a31\u8cc7\u6599\u6709\u4e00\u9ede\u932f\uff08\u4f8b\u5982 metric \u6f0f\u6389\u4e00\u5169\u5206\u9418\u7684\u8cc7\u8a0a\u662f\u53ef\u88ab\u63a5\u53d7\u7684\uff09\uff0c\u5c31\u4e0d\u9700\u8981\u56b4\u8b39\u7684\u5bb9\u932f\u3002
"},{"location":"feedback/designing-data-intensive-applications/derived-stream/#\u5982\u4f55\u50b3\u9001\u4e8b\u4ef6","title":"\u5982\u4f55\u50b3\u9001\u4e8b\u4ef6","text":"\u8ffd\u8e64\u8005\u548c\u767c\u5e03\u8005\u7684\u95dc\u4fc2\u6703\u5f71\u97ff\u4e8b\u4ef6\u662f\u600e\u9ebc\u50b3\u905e\u7684\uff0c\u53ef\u80fd\u7684\u95dc\u4fc2\u6709\uff1a
\u767c\u5e03\u8005\u76f4\u63a5\u628a\u4e8b\u4ef6\u9001\u7d66\u8ffd\u8e64\u8005\uff0c\u6709\u5e7e\u500b\u7279\u9ede
\u76f8\u95dc\u8edf\u9ad4\u6709\uff1a
\u767c\u5e03\u8005\u628a\u4e8b\u4ef6\u9001\u5230\u4e2d\u4ecb\u8005\uff08broker, queue\uff09
\u9019\u6642\u6211\u5011\u6703\u628a\u9ad8\u53ef\u7528\u6027\u5f9e \u767c\u5e03\u8005 \u79fb\u8f49\u5230 \u4e2d\u4ecb\u8005 \u672c\u8eab\uff0c \u8ffd\u8e64\u8005\u4e0d\u518d\u95dc\u5fc3\u767c\u5e03\u8005\u7684\u5b58\u6d3b\u72c0\u614b\u3002\u9019\u4e5f\u53ef\u4ee5\u964d\u4f4e\u767c\u5e03\u8005\u7684\u8907\u96dc\u6027\uff0c \u56e0\u70ba\u767c\u5e03\u8005\u901a\u5e38\u90fd\u662f\u4e00\u4e9b\u5546\u52d9\u908f\u8f2f\u7684\u61c9\u7528\u7a0b\u5f0f\u3002
\u7576\u8ffd\u8e64\u8005\u5931\u80fd\u6642\u53ef\u4ee5\u900f\u904e\u548c\u8ffd\u8e64\u8005\u5b9a\u671f\u7684\u61c9\u7b54\uff08acknowledgment\uff09\u5f97\u77e5\u3002 \u7576\u6536\u5230\u61c9\u7b54\u78ba\u4fdd\u8ffd\u8e64\u8005\u5df2\u7d93\u8655\u7406\u5b8c\u4e8b\u4ef6\u5f8c\u5c31\u522a\u9664\u8a72\u4e8b\u4ef6\uff0c\u53cd\u4e4b\u5247\u53cd\u8986\u50b3\u905e\u76f4\u5230\u5b8c\u6210\u3002
\u76f8\u95dc\u8edf\u9ad4\u6709\u5f88\u591a
\u5206\u5de5\u5408\u4f5c
\u5c31\u50cf\u6211\u5011\u4e0d\u6703\u5728\u61c9\u7528\u7a0b\u5f0f\u4e2d\u5beb\u8cc7\u6599\u5132\u5b58\u7684\u908f\u8f2f\uff0c\u800c\u662f\u628a\u9019\u90e8\u5206\u9700\u8981\u8003\u616e\u7684\u5404\u7a2e\u554f\u984c\u4e1f\u7d66\u8cc7\u6599\u5eab\uff0c \u6211\u5011\u4e00\u6a23\u6703\u628a\u767c\u5e03\u8005\u9700\u8981\u6ce8\u610f\u5230\u7684\u5404\u7a2e\u4e8b\u60c5\u4e1f\u7d66\u4e2d\u4ecb\u8005\u8655\u7406\u3002
"},{"location":"feedback/designing-data-intensive-applications/derived-stream/#\u548c\u8cc7\u6599\u5eab\u6709\u4ec0\u9ebc\u5dee","title":"\u548c\u8cc7\u6599\u5eab\u6709\u4ec0\u9ebc\u5dee\uff1f","text":"DELETE TABLE ...
\uff09\u6642\u624d\u522a\u9664\u767c\u5e03\u8005\u548c\u8ffd\u8e64\u8005\u5728\u8655\u7406\u4e8b\u4ef6\u7684\u6642\u6a5f\u662f \u7570\u6b65 \u7684\uff0c\u4e5f\u5c31\u662f\u767c\u5e03\u8005\u4e0d\u6703\u7b49\u5230\u8ffd\u8e64\u8005\u8655\u7406\u5b8c\u4e8b\u60c5\u5f8c\u624d\u7d50\u675f\u7a0b\u5e8f\uff0c \u76f8\u8f03\u65bc\u548c\u8cc7\u6599\u5eab\u7684\u6e9d\u901a\u901a\u5e38\u662f \u540c\u6b65 \u7684\u3002
\u6709\u53ef\u80fd\u7bc0\u9ede\u5df2\u7d93\u5b8c\u6210\u4e8b\u4ef6\u4f46\u662f\u56de\u50b3\u8a0a\u606f\u6642\u7db2\u8def\u51fa\u73fe\u554f\u984c\uff0c\u6b64\u6642\u53ef\u4ee5\u900f\u904e 2PC \u9019\u985e\u6a5f\u5236\u9632\u7bc4\u3002
"},{"location":"feedback/designing-data-intensive-applications/derived-stream/#\u591a\u500b\u8ffd\u8e64\u8005","title":"\u591a\u500b\u8ffd\u8e64\u8005","text":"\u4e8b\u4ef6\u7684\u50b3\u905e\u5206\u6210\u5169\u7a2e\uff0c\u8981\u9ebb\u70ba\u4e86\u964d\u4f4e\u6f5b\u6642\u800c\u900f\u904e \u8ca0\u8f09\u5e73\u8861 \u7684\u6a5f\u5236\u50b3\u905e\u7d66\u591a\u500b\u8ffd\u8e64\u8005\uff0c \u8981\u9ebb\u70ba\u4e86\u8b93\u8ffd\u8e64\u8005\u53ef\u4ee5\u9ad8\u53ef\u7528\u800c\u4f7f\u7528\u6247\u51fa\uff08fan-out\uff09\u6a5f\u5236\u3002 \u9019\u5169\u8005\u7684\u95dc\u4fc2\u6709\u9ede\u50cf\u662f\u5206\u5340\u548c\u8907\u88fd\u7684\u6982\u5ff5\u3002
\u4f46\u662f\u8981\u6ce8\u610f\u5982\u679c\u4f7f\u7528\u8ca0\u8f09\u5e73\u8861\u6642\uff0c\u5c31\u53ef\u80fd\u9020\u6210\u8655\u7406\u4e8b\u4ef6\u6642\u7684\u5931\u5e8f\uff0c\u6240\u4ee5\u5efa\u8b70\u4f7f\u7528\u8ca0\u8f09\u5e73\u8861\u6642\u7528\u4f86\u8655\u7406\u9806\u5e8f\u4e0d\u91cd\u8981\u7684\u4e3b\u984c\u3002
"},{"location":"feedback/designing-data-intensive-applications/derived-stream/#\u6c92\u8fa6\u6cd5\u5fa9\u7528","title":"\u6c92\u8fa6\u6cd5\u5fa9\u7528","text":"\u6279\u6b21\u8655\u7406\u6709\u5fa9\u7528\u6027\uff1a\u6211\u53ef\u4ee5\u57f7\u884c\u4efb\u610f\u6b21\u8a08\u7b97\u90fd\u4e0d\u7528\u64d4\u5fc3\u8cc7\u6599\u7684\u640d\u58de\uff08\u56e0\u70ba\u4e0d\u7570\u52d5\u8f38\u5165\uff09\u3002 \u7576\u6211\u6d88\u5316\u5b8c\u4e00\u500b\u4e8b\u4ef6\u5f8c\uff0c\u4e2d\u4ecb\u8005\u5c31\u6703\u628a\u8cc7\u6599\u522a\u9664\uff0c\u9019\u6642\u60f3\u518d\u91cd\u65b0\u7b97\u4e00\u6b21\u5c31\u6c92\u8fa6\u6cd5\u4e86\u3002 \u9019\u4e5f\u9020\u6210\u7576\u6709\u65b0\u7684\u8ffd\u8e64\u8005\u9032\u4f86\u6642\u4e0d\u80fd\u770b\u5230\u4ee5\u524d\u7684\u6771\u897f\u3002
"},{"location":"feedback/designing-data-intensive-applications/derived-stream/#\u65e5\u8a8c\u578b\u4e2d\u4ecb\u8005","title":"\u65e5\u8a8c\u578b\u4e2d\u4ecb\u8005","text":"\u56e0\u70ba\u7121\u6cd5\u5fa9\u7528\uff0c\u65b0\u578b\u614b\u7684\u4e2d\u4ecb\u8005\u5c31\u8a95\u751f\u4e86\uff1a\u65e5\u8a8c\u578b\u4e2d\u4ecb\u8005\uff0c\u53ef\u80fd\u7684\u8edf\u9ad4\u6709\uff1a
\u9084\u8a18\u5f97 GNU Coreutils \u55ce\uff1f\u5176\u4e2d\u6709\u500b tail
\u7684\u51fd\u5f0f\uff0c \u4ed6\u5141\u8a31\u4f60\u67e5\u770b\u8cc7\u6599\u7684\u5c3e\u90e8\uff0c\u7576\u52a0\u4e0a -f
\u6642\uff0c\u5c31\u53ef\u4ee5\u6301\u7e8c\u8ffd\u8e64\uff0c \u9019\u6982\u5ff5\u548c\u65e5\u8a8c\u578b\u4e2d\u4ecb\u8005\u5f88\u50cf\uff1a\u4f60\u53ef\u4ee5\u6301\u7e8c\u8ffd\u8e64\u8a72\u4e3b\u984c\uff0c\u4f46\u662f\u8cc7\u6599\u4e0d\u6703\u88ab\u522a\u9664\u3002 \u6240\u4ee5\u6240\u6709\u65b0\u4f86\u7684\u8ffd\u8e64\u8005\u90fd\u53ef\u4ee5\u5f9e\u65b0\u958b\u59cb\u8655\u7406\u4e8b\u4ef6\u3002
\u4e8b\u5be6\u4e0a\u65e5\u8a8c\u578b\u4e2d\u4ecb\u8005\u5c31\u662f\u9019\u6a23\u8655\u7406\u7684\uff0c\u6bcf\u6b21\u4e8b\u4ef6\u9032\u4f86\u5c31\u5148\u4e1f\u9032\u65e5\u8a8c\u4e2d\u7136\u5f8c\u518d\u50b3\u7d66\u8ffd\u8e64\u8005\u3002 \u7576\u8ffd\u8e64\u8005\u8981\u4f7f\u7528\u4e8b\u4ef6\u6642\uff0c\u4ed6\u53ef\u4ee5\u4efb\u610f\u8655\u7406\u800c\u4e0d\u9700\u64d4\u5fc3\u4e8b\u4ef6\u4e4b\u5f8c\u6703\u88ab\u92b7\u6bc0\uff0c\u9019\u6a23\u7684\u5bb9\u932f\u6a5f\u5236\u5c31\u597d\u50cf\u6279\u6b21\u8655\u7406\u4e00\u6a23\u3002
\u56e0\u70ba\u8ffd\u8e64\u8005\u548c\u4e8b\u4ef6\u7684\u95dc\u4fc2\u89e3\u8026\u4e86\uff0c\u6240\u4ee5\u9700\u8981\u6ce8\u610f\u7684\u6771\u897f\u6e1b\u5c11\u4e86\u3002 \u50b3\u7d71\u7684\u4e2d\u4ecb\u8005\u6703\u7b49\u5230\u6240\u6709\u8ffd\u8e64\u8005\u90fd\u6536\u5230\u4e8b\u4ef6\u624d\u522a\u9664\u8a72\u4e8b\u4ef6\uff0c \u5982\u679c\u8ffd\u8e64\u8005\u5931\u80fd\uff08\u6216\u4e0b\u7dda\uff09\u4e86\u5c31\u9700\u8981\u8b39\u614e\u7684\u8a2d\u5b9a\u907f\u514d\u4e2d\u4ecb\u8005\u70ba\u4e86\u5bb9\u932f\u8caf\u5b58\u904e\u591a\u4e8b\u4ef6\u9032\u8a18\u61b6\u9ad4\uff0c \u9019\u6642\u65e5\u8a8c\u578b\u4e2d\u4ecb\u8005\u5c31\u53ef\u4ee5\u8d77\u5230\u5f88\u597d\u7684\u7dad\u904b\u512a\u52e2\u3002
"},{"location":"feedback/designing-data-intensive-applications/derived-stream/#\u4fdd\u5b58\u591a\u4e45","title":"\u4fdd\u5b58\u591a\u4e45\uff1f","text":"\u5c31\u50cf\u6392\u5e8f\u5b57\u4e32\u8868\u4e00\u6a23\uff0c\u65e5\u8a8c\u662f\u6709\u6700\u5927\u9650\u5236\u7684\uff0c \u7576\u4e00\u672c\u65e5\u8a8c\u9054\u5230\u8a72\u503c\u6642\uff0c\u5247\u91cd\u65b0\u958b\u4e00\u672c\u65e5\u8a8c\u4e26\u9644\u52a0\u4e8b\u4ef6\u4e0a\u53bb\u3002 \u4e26\u4f9d\u64da\u8a2d\u5b9a\u9650\u5236\u6700\u591a\u65e5\u8a8c\u6578\uff0c\u7576\u8d85\u904e\u6642\u5c31\u522a\u9664\u6700\u820a\u7684\u65e5\u8a8c\uff0c\u9019\u5c31\u4ee3\u8868\u5982\u679c\u4e00\u500b\u8ffd\u8e64\u8005\u843d\u5f8c\u592a\u591a\uff0c \u4ed6\u6709\u53ef\u80fd\u907a\u6f0f\u90a3\u4e9b\u904e\u4e45\u7684\u8cc7\u8a0a\u3002
\u4f46\u662f\u4e00\u822c\u5be6\u969b\u4f7f\u7528\u901a\u5e38\u90fd\u6703\u8caf\u5b58\u5927\u7d04\u6578\u5929\u81f3\u6578\u79ae\u62dc\u7684\u8cc7\u6599\uff08\u4ee5 6TB \u7684\u5bb9\u91cf\u4f86\u7b97\uff09\uff0c \u5728\u9019\u6bb5\u6642\u9593\uff0c\u8b93\u7dad\u904b\u4eba\u54e1\u91cd\u555f\u8ffd\u8e64\u8005\u662f\u8db3\u5920\u7684\u3002 \u4f60\u4e5f\u53ef\u4ee5\u900f\u904e\u4e00\u4e9b\u8b66\u5831\u7cfb\u7d71\u5e6b\u52a9\u4f60\u8ffd\u8e64\u9019\u4e9b\u843d\u5f8c\u7684\u9032\u5ea6\u3002
"},{"location":"feedback/designing-data-intensive-applications/derived-stream/#\u512a\u52e2","title":"\u512a\u52e2","text":"\u6f5b\u6642\u662f\u7a69\u5b9a\u7684\uff0c\u56e0\u70ba\u50b3\u7d71\u7684\u4e2d\u4ecb\u8005\u6703\u628a\u8cc7\u6599\u5b58\u9032\u8a18\u61b6\u9ad4\uff0c\u7576\u4e00\u76f4\u6709\u4e8b\u4ef6\u6c92\u88ab\u6d88\u5316\u5c0e\u81f4\u8a18\u61b6\u9ad4\u4e0d\u5920\u4e86\u5c31\u6703\u843d\u6a94\uff0c \u6240\u4ee5\u4e2d\u4ecb\u8005\u8655\u7406\u4e8b\u4ef6\u7684\u6f5b\u6642\u5c31\u5f88\u5927\u4e00\u90e8\u4efd\u53d7\u5230\u73fe\u6709\u4e8b\u4ef6\u7684\u91cf\u5f71\u97ff\uff1b \u76f8\u5c0d\u800c\u8a00\u65e5\u8a8c\u578b\u7684\u4e2d\u4ecb\u8005\u5c31\u53ef\u4ee5\u505a\u5230\u8f03\u7a69\u5b9a\u7684\u6f5b\u6642\uff0c\u56e0\u70ba\u90fd\u662f\u628a\u4e8b\u4ef6\u9644\u52a0\u9032\u65e5\u8a8c\u4e2d\u3002
\u4e0d\u518d\u9700\u8981\u5b9a\u671f\u63a5\u6536\u61c9\u7b54\u4f86\u78ba\u8a8d\u662f\u5426\u63a5\u6536\u5230\u4e8b\u4ef6\uff0c\u800c\u662f\u5b9a\u671f\u5132\u5b58 \u504f\u79fb\u91cf\uff0c \u7576\u8ffd\u8e64\u8005\u5931\u80fd\u4e26\u5fa9\u539f\u6642\u5c31\u53ef\u4ee5\u5f9e\u4e0a\u6b21\u5132\u5b58\u7684\u504f\u79fb\u91cf\u4f86\u91cd\u65b0\u50b3\u9001\u4e8b\u4ef6\u3002
\u56e0\u70ba\u4e0a\u8ff0\u6a5f\u5236\uff08\u4e0d\u9700\u8981\u78ba\u8a8d\u662f\u5426\u6536\u5230\uff09\u8b93\u4ed6\u53ef\u4ee5\u9032\u884c\u6279\u6b21\u7684\u50b3\u9001\u800c\u4e0d\u9700\u8981\u4e00\u500b\u4e00\u500b\u50b3\u9001\uff0c \u518d\u52a0\u4e0a\u9023\u7dda\u7684\u7ba1\u7dda\u6a5f\u5236\uff0c\u63d0\u5347\u4ed6\u7684\u901a\u91cf\u3002\u5982\u679c\u662f\u50b3\u7d71\u4e2d\u4ecb\u8005\uff0c \u56e0\u70ba\u9700\u8981\u540c\u6642\u548c\u591a\u500b\u8ffd\u8e64\u8005\u78ba\u8a8d\u662f\u5426\u57f7\u884c\u904e\u8a72\u4e8b\u4ef6\uff08\u82e5\u90fd\u6709\u57f7\u884c\u5c31\u522a\u9664\u8a72\u4e8b\u4ef6\uff09\uff0c \u6240\u4ee5\u7121\u6cd5\u50cf\u9019\u6a23\u6279\u6b21\u8655\u7406\u3002 \u9019\u4e5f\u89e3\u9664\u4e86\u591a\u500b\u8ffd\u8e64\u8005\u4e4b\u524d\u96b1\u6666\u7684\u95dc\u4fc2\uff0c\u7576\u6211\u5011\u8981\u65b0\u589e\u4e00\u500b\u8ffd\u8e64\u8005\u5230\u7dda\u4e0a\u7684\u50b3\u7d71\u4e2d\u4ecb\u8005\u4e2d\uff0c\u5c31\u9700\u8981\u5be9\u614e\u7684\u8003\u616e\u3002
"},{"location":"feedback/designing-data-intensive-applications/derived-stream/#\u751f\u614b","title":"\u751f\u614b","text":"\u5206\u5340\u4e4b\u5f8c\u5c31\u53ef\u4ee5\u907f\u514d\u4e2d\u4ecb\u8005\u7684\u55ae\u4e00\u7bc0\u9ede\u904e\u5ea6\u64cd\u52de\uff0c\u4f7f\u7528\u8907\u88fd\u8b93\u591a\u500b\u7bc0\u9ede\u64c1\u6709\u8cc7\u6599\u5247\u53ef\u4ee5\u63d0\u9ad8\u53ef\u7528\u6027\u3002 \u81f3\u65bc\u524d\u9762\u63d0\u7684 \u504f\u79fb\u91cf\uff0c\u5728\u5206\u5340\u4e4b\u5f8c\u4e00\u6a23\u53ef\u4ee5\u5728\u5404\u500b\u5206\u5340\u4e2d\u8a18\u9304\u504f\u79fb\u91cf\u3002
\u7576\u70ba\u4e86\u964d\u4f4e\u8ffd\u8e64\u8005\u7684\u8ca0\u8f09\u4f7f\u7528\u8f2a\u6d41\u50b3\u905e\u4e8b\u4ef6\u7684\u6a5f\u5236\uff08\u524d\u9762\u7684 load-balance\uff09\u6642\uff0c \u6211\u5011\u53ef\u4ee5\u900f\u904e\u4e0d\u540c\u8ffd\u8e64\u8005\u8ffd\u8e64\u4e0d\u540c\u5206\u5340\u4f86\u9054\u6210\uff08\u5982\u679c\u7528\u50b3\u7d71\u4e2d\u4ecb\u8005\u7684\u65b9\u5f0f\u5c31\u6703\u9047\u5230\u4e82\u5e8f\u7684\u554f\u984c\uff09\uff0c \u4f46\u662f\u9019\u6703\u8b93\u8ffd\u8e64\u8005\u7684\u6578\u91cf\u53d7\u9650\u65bc\u5206\u5340\u6578\u91cf\u3002 \u9664\u6b64\u4e4b\u5916\uff0c\u7576\u6709\u4e00\u500b\u7bc0\u9ede\u57f7\u884c\u7de9\u6162\u6642\u5c31\u6703\u8b93\u4e2d\u4ecb\u8005\u7b49\u5f85\u5206\u5340\u4e2d\u5f8c\u7e8c\u7684\u4e8b\u4ef6\u88ab\u50b3\u9001\u51fa\u53bb \uff08\u50b3\u7d71\u7684\u4e2d\u4ecb\u8005\u53ef\u4ee5\u4ea4\u66ff\u50b3\u905e\u7d66\u4e0d\u540c\u8ffd\u8e64\u8005\uff0c\u96d6\u7136\u9019\u4e5f\u662f\u9020\u6210\u4e82\u5e8f\u7684\u539f\u56e0\uff09\uff0c \u6839\u64da\u61c9\u7528\u7a0b\u5f0f\u7684\u4e0d\u540c\u9019\u53ef\u80fd\u662f\u4e0d\u88ab\u63a5\u53d7\u7684\u3002
\u7e3d\u800c\u8a00\u4e4b\uff0c\u65e5\u8a8c\u578b\u4e2d\u4ecb\u8005\u9069\u5408\u9ad8\u901a\u91cf\u4f4e\u904b\u7b97\uff1b\u53cd\u4e4b\uff0c\u50b3\u7d71\u4e2d\u4ecb\u8005\u9069\u5408\u4f4e\u901a\u91cf\u9ad8\u904b\u7b97\u4e14\u9806\u5e8f\u4e26\u4e0d\u91cd\u8981\u7684\u8cc7\u6599\u6a21\u5f0f\u3002
"},{"location":"feedback/designing-data-intensive-applications/derived-stream/#\u539f\u53e4\u6642\u4ee3\u7684\u4e8b\u4ef6","title":"\u539f\u53e4\u6642\u4ee3\u7684\u4e8b\u4ef6","text":"\u7576\u4e8b\u4ef6\u8d8a\u4f86\u8d8a\u591a\u7684\u6642\u5019\uff0c\u6211\u5011\u53ef\u4ee5\u900f\u904e \u5feb\u7167\u6a5f\u5236 \u4f86\u907f\u514d\u6bcf\u6b21\u8cc7\u6599\u91cd\u5efa\u90fd\u8981\u5f9e\u539f\u53e4\u6642\u4ee3\u958b\u59cb\uff0c\u800c\u662f\u5f9e\u6700\u5f8c\u4e00\u6b21\u7684\u5feb\u7167\u5efa\u7acb\u3002
\u9664\u4e86\u5feb\u7167\u9019\u65b9\u6cd5\u4e4b\u5916\uff0c\u6211\u5011\u53ef\u4ee5\u904b\u7528\u5728\u6392\u5e8f\u5b57\u4e32\u8868\u4e2d\u5b78\u5230\u7684\uff0c \u5b9a\u671f\u5728\u80cc\u666f\u4e2d\u628a\u65e5\u8a8c\u58d3\u7e2e\u8d77\u4f86\uff08\u65e5\u8a8c\u7dca\u58d3\uff0clog compaction\uff09\uff0c\u4f8b\u5982\u5c0d\u540c\u4e00\u500b\u503c\u5f97\u7570\u52d5\u53ea\u4fdd\u7559\u6700\u65b0\u7684\uff1a
\u5982\u679c key \u90fd\u4e00\u6a23\uff0c\u5c31\u7559\u6700\u65b0\u7684\u5c31\u597dkey=123, value=321\nkey=123, value=456\n# \u4ee5\u4e0a\u90fd\u522a\u9664\nkey=123, value=789\n
\u81f3\u65bc\u8981\u7528\u54ea\u7a2e\u65b9\u5f0f\u5247\u6839\u64da\u8cc7\u6599\u7684\u7279\u5fb5\uff0c\u82e5\u8cc7\u6599\u7570\u52d5\uff08update\uff09\u983b\u7e41\uff0c \u5982\u679c\u4f7f\u7528 \u65e5\u8a8c\u7dca\u58d3 \u6703\u8b93\u80cc\u666f\u57f7\u884c\u904e\u591a\u7684\u7dca\u58d3\u5c0e\u81f4\u58d3\u8feb\u57f7\u884c\u901f\u5ea6\u3002 \u76f8\u5c0d\u800c\u8a00\uff0c\u82e5\u8cc7\u6599\u672c\u8eab\u5927\u90e8\u5206\u90fd\u662f\u65b0\u589e\uff0c\u9019\u6a23\u5c31\u5f88\u9069\u5408\u4f7f\u7528 \u65e5\u8a8c\u7dca\u58d3\u3002
"},{"location":"feedback/designing-data-intensive-applications/derived-stream/#\u522a\u9664\u4e8b\u4ef6","title":"\u522a\u9664\u4e8b\u4ef6","text":"\u4e8b\u4ef6\u6709\u6642\u9762\u81e8\u5fc5\u9808\u522a\u9664\u7684\u72c0\u6cc1\uff0c\u4f8b\u5982\u516c\u53f8\u653f\u7b56\u3001\u96b1\u79c1\u6b0a\u3001\u5b89\u5168\u6027\u7b49\u7b49\uff0c \u9019\u6642\u5c31\u6703\u767c\u73fe\u522a\u9664\u4e8b\u4ef6\u5176\u5be6\u5f88\u56f0\u96e3\u3002\u4f60\u6709\u5f88\u591a\u8ffd\u8e64\u8005\uff0c\u4e0d\u7ba1\u5728\u786c\u9ad4\u6216\u8edf\u9ad4\u4e0a\u53c8\u6709\u5f88\u591a\u5099\u4efd\u6a5f\u5236\uff0c \u5230\u5f8c\u9762\u4f60\u6703\u767c\u73fe\u522a\u9664\u8cc7\u6599\u4e0d\u4ee3\u8868\u8b93\u8cc7\u6599\u4e0d\u898b\uff0c\u800c\u662f\u8b93\u8cc7\u6599\u66f4\u96e3\u88ab\u627e\u5230\u3002
"},{"location":"feedback/designing-data-intensive-applications/derived-stream/#\u540c\u6b65\u554f\u984c","title":"\u540c\u6b65\u554f\u984c","text":"\u6211\u5011\u8aaa\u660e\u4e86\u4e32\u6d41\u662f\u4ec0\u9ebc\uff0c\u4e5f\u8aaa\u660e\u8a72\u600e\u9ebc\u50b3\u905e\u4e8b\u4ef6\uff0c\u4f46\u9084\u6c92\u8aaa\u4e32\u6d41\u6703\u9020\u6210\u7684\u4e00\u4e9b\u554f\u984c\u3002
\u73fe\u5be6\u751f\u6d3b\u4e2d\u61c9\u7528\u7a0b\u5f0f\u6703\u6709\u591a\u7a2e\u8cc7\u6599\u7cfb\u7d71\uff0c\u4e3b\u8981\u7684\u8cc7\u6599\u5eab\u8ca0\u8cac OLTP\u3001\u7528\u4f86\u52a0\u901f\u8b80\u53d6\u7684\u5feb\u53d6\u3001\u7528\u4f86\u63d0\u4f9b\u4f7f\u7528\u8005\u641c\u5c0b\u7684\u5168\u6587\u6aa2\u7d22\u7b49\u7b49\u3002 \u4f46\u662f\u5982\u679c\u8cc7\u6599\u5eab\u66f4\u65b0\u7684\u6642\u5019\uff0c\u6211\u8981\u600e\u9ebc\u8b93\u9019\u4e9b\u884d\u751f\u8cc7\u6599\u4e5f\u8ddf\u8457\u66f4\u65b0\uff1f \u4f60\u53ef\u80fd\u89ba\u5f97\u900f\u904e\u61c9\u7528\u7a0b\u5f0f\u6216\u4e3b\u8981\u8cc7\u6599\u5eab\u4f86\u66f4\u65b0\u5c31\u53ef\u4ee5\uff0c\u4f46\u662f\u6703\u6709\u7af6\u8cfd\u72c0\u6cc1\uff0c\u5982\u4e0a\u5716\u3002
\u9019\u7a2e\u4e26\u884c\u8655\u7406\u7684\u554f\u984c\u6211\u5011\u5728\u8ac7\u8655\u7406\u7af6\u8cfd\u72c0\u6cc1\u6642\u5c31\u63d0\u904e\u5f88\u591a\uff0c \u7576\u727d\u6d89\u5230\u7570\u8cea\u7684\u61c9\u7528\u7a0b\u5f0f\uff08\u8cc7\u6599\u5eab\u548c\u5feb\u53d6\u548c\u5168\u6587\u6aa2\u7d22\uff09\u9593\u7684\u540c\u6b65\u6642\u5c31\u66f4\u56f0\u96e3\u3002
"},{"location":"feedback/designing-data-intensive-applications/derived-stream/#\u900f\u904e\u65e5\u8a8c\u89e3\u6c7a","title":"\u900f\u904e\u65e5\u8a8c\u89e3\u6c7a","text":"\u4e32\u6d41\u8655\u7406\u53ef\u4ee5\u600e\u9ebc\u89e3\u6c7a\u9019\u554f\u984c\uff1f
\u6bcf\u6b21\u8cc7\u6599\u5eab\u7570\u52d5\u6642\uff0c\u90fd\u6703\u66f4\u65b0 WAL \u6216\u908f\u8f2f\u65e5\u8a8c\uff0c \u554f\u984c\u662f\u9019\u4e9b\u8cc7\u8a0a\u901a\u5e38\u90fd\u662f\u50c5\u9650\u65bc\u76f8\u540c\u7684\u8cc7\u6599\u5eab\u53e2\u96c6\u4e2d\uff0c\u6211\u5011\u6c92\u8fa6\u6cd5\u900f\u904e API \u7b49\u516c\u958b\u4ecb\u9762\u5f97\u5230\u9019\u4e9b\u8cc7\u6599\uff0c \u4f46\u5982\u679c\u53ef\u4ee5\u5462\uff1f
CDC\uff08Change data capture\uff09\u5c31\u662f\u9019\u6a23\u7684\u4e00\u500b\u6982\u5ff5\u3002
\u548c\u524d\u9762\u63d0\u7684\u4e00\u4e9b ETL \u5f88\u50cf\uff0c \u4f46\u662f\u5dee\u7570\u5728\u65bc\u9019\u88e1\u662f\u900f\u904e WAL\u3001\u908f\u8f2f\u65e5\u8a8c \u4e26\u4e32\u6d41\u51fa\u8cc7\u6599\u800c\u975e\u6279\u6b21\u3002 \u9019\u6642\u5716\u4e0a\u7684\u5168\u6587\u7d22\u5f15\u6216\u8cc7\u6599\u5009\u5132\u5c31\u8b8a\u6210\u6240\u8b02\u7684\u300c\u884d\u751f\u8cc7\u6599\u7cfb\u7d71\u300d\u3002 \u9664\u6b64\u4e4b\u5916\uff0c\u5982\u679c\u900f\u904e WAL\u3001\u908f\u8f2f\u65e5\u8a8c \u4e32\u6d41\u9019\u4e9b\u8b8a\u5316\uff0c \u5c31\u4e0d\u7528\u64d4\u5fc3\u9806\u5e8f\u7684\u554f\u984c\uff08\u76f8\u8f03\u65bc\u5728\u8cc7\u6599\u5eab\u524d\u505a\u6536\u96c6\uff09\uff0c\u56e0\u70ba\u4ed6\u5df2\u7d93\u5728\u65e5\u8a8c\u4e2d\u505a\u597d\u9806\u5e8f\u7684\u6392\u5b9a\u4e86\u3002
\u4f46\u662f\u56e0\u70ba CDC \u662f\u7570\u6b65\u7684\uff08\u8cc7\u6599\u5eab\u4e0d\u6703\u7b49\u5230\u78ba\u8a8d\u63a5\u6536\u65b9\u78ba\u5be6\u6536\u5230\u624d\u7e7c\u7e8c\u505a\u4e8b\uff09 \u6240\u4ee5\u6240\u6709\u53ef\u80fd\u767c\u751f\u65bc\u8907\u88fd\u5ef6\u9072\u7684\u72c0\u6cc1\u90fd\u53ef\u80fd\u767c\u751f\u3002
"},{"location":"feedback/designing-data-intensive-applications/derived-stream/#\u5de5\u5177","title":"\u5de5\u5177","text":"\u6709\u4e9b\u8cc7\u6599\u5eab\u7684\u5916\u639b\u5de5\u5177\u5141\u8a31 CDC
\u6709\u4e9b\u751a\u81f3\u652f\u63f4\u7576\u7279\u5b9a\u503c\u88ab\u7570\u52d5\u6642\u8f38\u51fa\u4e8b\u4ef6\uff1a
CREATE TABLE products EXPORT TO TARGET offsiteprod\n ON INSERT, UPDATE, DELETE\n [ ... ];\n
"},{"location":"feedback/designing-data-intensive-applications/derived-stream/#\u4e8b\u4ef6\u4f86\u6e90","title":"\u4e8b\u4ef6\u4f86\u6e90","text":"\u4e8b\u4ef6\u4f86\u6e90 CDC \u62bd\u8c61 \u8cc7\u6599 \u54f2\u5b78 \u5de5\u5177 \u5feb\u7167 \u58d3\u7dca \u6bd4\u8f03\u4e8b\u4ef6\u4f86\u6e90\u548c CDC
\u4e8b\u4ef6\u4f86\u6e90\uff08Event Sourcing\uff0cDomain-Driven Design \u793e\u7fa4\u7684\u7528\u8a5e\uff09\u548c CDC \u5f88\u50cf\uff0c \u90fd\u662f\u50b3\u905e\u4e8b\u4ef6\u7d66\u9700\u8981\u4f7f\u7528\u7684\u4eba\uff0c\u4f46\u662f\u4e0d\u50cf CDC \u662f\u76e3\u807d\u6bcf\u6b21\u8cc7\u6599\u5eab\u5beb\u5165\u8acb\u6c42\uff08\u5728\u65e5\u8a8c\u5c64\u7d1a\u4e2d\uff09 \u4e26\u628a\u8a72\u8cc7\u8a0a\u8f49\u6210\u901a\u7528\u7684\u683c\u5f0f\u7d66\u5916\u90e8\u8ffd\u8e64\u8005\uff0c\u4e8b\u4ef6\u4f86\u6e90\u66f4\u50be\u5411\u65bc\u628a\u4e8b\u4ef6\u4ee5\u62bd\u8c61\u7684\u65b9\u5f0f\u5448\u73fe\u3002
\u4f8b\u5982\u7576\u5b78\u751f\u5728\u7db2\u9801\u4e0a\u9ede\u64ca\u9000\u51fa\u9078\u4fee\u8ab2\u7a0b\u6642\uff0c\u4e8b\u4ef6\u4f86\u6e90\u7684\u8a2d\u8a08\u5c31\u6703\u7d00\u9304\u8a72\u4e8b\u4ef6\u300c\u5b78\u751f A \u9000\u51fa \u8ab2\u7a0b B\u300d\uff0c \u9019\u6642\u53ef\u80fd\u6703\u6709\u4e00\u500b\u61c9\u7528\u7a0b\u5f0f\u76e3\u807d\u4e8b\u4ef6\u4e26\u57f7\u884c\u79fb\u9664 \u5b78\u751f A \u7684\u500b\u4eba\u8ab2\u7a0b\u8cc7\u8a0a\u548c\u5b78\u5206\u7d71\u8a08\uff0c \u6709\u4e00\u500b\u61c9\u7528\u7a0b\u5f0f\u76e3\u807d\u4e8b\u4ef6\u4e26\u8b93\u6b63\u5728\u6392\u968a\u9078\u4fee \u8ab2\u7a0b B \u7684 \u5b78\u751f B \u6210\u529f\u9078\u4fee\u8a72\u8ab2\u7a0b\u3002
\u4e0a\u8ff0\u7528\u6cd5\u53ef\u80fd\u540c\u6a23\u7528\u65bc CDC \u53ea\u662f\u4e0d\u90a3\u9ebc\u62bd\u8c61\uff0c\u4f8b\u5982\uff1aid=A;class=null
\u3002 \u9664\u6b64\u4e4b\u5916\uff0c\u9019\u5169\u500b\u51fa\u767c\u9ede\u4e26\u4e0d\u4e00\u6a23\uff0cCDC \u76ee\u7684\u5728\u65bc\u958b\u653e\u8cc7\u6599\u5eab\u5167\u90e8\u7684\u7570\u52d5\u8cc7\u6599\uff0c\u4e14\u8cc7\u8a0a\u53ef\u80fd\u5f88\u7d30\uff1b \u53cd\u4e4b\u4e8b\u4ef6\u4f86\u6e90\u662f\u4e00\u7a2e\u54f2\u5b78\uff0c \u50be\u5411\u65bc\u628a\u8cc7\u6599\u62bd\u8c61\u5316\u4e26\u8b93\u4efb\u4e00\u7a2e\u76ee\u7684\uff08Domain-Driver \u7684\u7531\u4f86\uff09\u7684\u61c9\u7528\u7a0b\u5f0f\u53bb\u57f7\u884c\u4ed6\u8a72\u505a\u7684\u4e8b\u3002
\u7531\u6b64\uff0cCDC \u901a\u5e38\u53ef\u4ee5\u505a\u5230\u58d3\u7dca\u65e5\u8a8c\uff08\u9650\u5236\u76f8\u540c key \u7684\u7570\u52d5\u7684\u65e5\u8a8c\u6578\u91cf\uff09\uff0c \u4f46\u662f\u4e8b\u4ef6\u4f86\u6e90\u50be\u5411\u65bc\u5efa\u7acb\u5feb\u7167\uff08\u96d6\u7136\u6839\u64da\u5176\u54f2\u5b78\u4e0d\u61c9\u8a72\u5efa\u7acb\u5feb\u7167\uff0c\u56e0\u70ba\u6240\u6709\u5feb\u7167\u90fd\u662f\u57fa\u65bc\u67d0\u7a2e\u300c\u908f\u8f2f\u300d\u800c\u975e\u539f\u59cb\u8cc7\u6599\u672c\u8eab\uff09\u3002
\u8a72\u4e0d\u8a72\u4f7f\u7528 CDC \u505a Event sourcing\uff1f
StackOverflow \u6709\u4eba\u63d0\u51fa\u9019\u6a23\u7684\u554f\u984c\uff0c\u500b\u4eba\u8a8d\u70ba\u6eff\u6709\u8da3\u7684\u3002
"},{"location":"feedback/designing-data-intensive-applications/derived-stream/#\u91cd\u65b0\u8868\u9054\u8cc7\u6599\u9762\u8c8c","title":"\u91cd\u65b0\u8868\u9054\u8cc7\u6599\u9762\u8c8c","text":"\u900f\u904e\u5168\u90e8\u7684\u4e8b\u4ef6\uff0c\u6211\u53ef\u4ee5\u91cd\u65b0\u5efa\u69cb\u4e00\u500b\u65b0\u7684\u8996\u91ce\uff0c\u5c31\u597d\u50cf\u6279\u6b21\u8655\u7406\u4e00\u6a23\u3002 \u6839\u64da\u4f60\u7684\u5546\u52d9\u908f\u8f2f\u548c\u9700\u6c42\uff0c\u4e0d\u518d\u9700\u8981\u900f\u904e\u8907\u96dc\u7684\u524d\u5f8c\u76f8\u5bb9\u7684\u6a5f\u5236\u4f86\u66f4\u65b0\u4f60\u7684\u7db1\u76ee\uff0c\u800c\u662f\u5b8c\u5168\u91cd\u65b0\u5efa\u7acb\u8d77\u65b0\u7684\u8cc7\u6599\u9762\u8c8c\u3002
\u4f8b\u5982 Druid \u900f\u904e Apache Kafka\uff08\u65e5\u8a8c\u578b\u4e2d\u4ecb\u8005\uff09\u8caf\u5b58\u7684\u4e8b\u4ef6\uff0c \u53ef\u4ee5\u6839\u64da\u9700\u6c42\u5ba2\u5236\u8cc7\u6599\u9762\u8c8c\u3002 \u9019\u7a2e\u6839\u64da\u9700\u6c42\u5efa\u7acb\u9762\u8c8c\u7684\u6982\u5ff5\u7a31\u70ba Command Query Responsibility Segregation(CQRS)\u3002
"},{"location":"feedback/designing-data-intensive-applications/derived-stream/#\u662f\u5426\u6b63\u898f\u5316\u4e0d\u518d\u6709\u610f\u7fa9","title":"\u662f\u5426\u6b63\u898f\u5316\u4e0d\u518d\u6709\u610f\u7fa9","text":"\u5982\u679c\u6709\u5c0d\u8cc7\u6599\u5eab\u8f03\u719f\u7684\uff0c\u53ef\u80fd\u5c31\u77e5\u9053\u5e38\u5e38\u6703\u5728\u8981\u4e0d\u8981\u6b63\u898f\u5316\uff08normalization\uff09\u6642\u505a\u5f88\u591a\u722d\u8faf\u8a0e\u8ad6\uff0c \u4f46\u662f\u5982\u679c\u900f\u904e\u9019\u65b9\u6cd5\uff0c\u8981\u4e0d\u8981\u6b63\u898f\u5316\u5c31\u986f\u5f97\u6c92\u90a3\u9ebc\u6709\u610f\u7fa9\u4e86\uff0c\u56e0\u70ba\u6240\u6709\u8cc7\u6599\u90fd\u662f\u53bb\u6b63\u898f\u5316\uff0c \u4f46\u53c8\u900f\u904e\u8ffd\u8e64\u6a5f\u5236\uff08fan-out\uff09\u7dad\u6301\u6b63\u898f\u5316\u3002
\u6b63\u898f\u5316\u548c\u53bb\u6b63\u898f\u5316
\u901a\u5e38\u53bb\u6b63\u898f\u5316\u7684\u7528\u610f\u5728\u52a0\u901f\u8b80\u53d6\u901f\u5ea6\uff0c\u6b63\u898f\u5316\u7684\u7528\u610f\u5728\u6e1b\u5c11\u5beb\u5165\u6642\u7684\u8907\u96dc\u5ea6\u3002 \u7db2\u8def\u4e0a\u6709\u5f88\u591a\u8cc7\u6599\u5eab\u8a72\u4e0d\u8a72\u6b63\u898f\u5316\u7684\u722d\u8ad6\uff0c\u4e0d\u904e\u6211\u500b\u4eba\u662f\u50be\u5411\u65bc\u53bb\u6b63\u898f\u5316\u3002
"},{"location":"feedback/designing-data-intensive-applications/derived-stream/#\u540c\u6b65\u591a\u8655\u7570\u52d5\u7684\u8cc7\u6599","title":"\u540c\u6b65\u591a\u8655\u7570\u52d5\u7684\u8cc7\u6599","text":"\u524d\u9762\u63d0\u5230\u5982\u679c\u4e00\u500b\u5beb\u5165\u8acb\u6c42\u6703\u540c\u6642\u7570\u52d5\u5f88\u591a\u8cc7\u6599\uff08\u4f8b\u5982\u591a\u500b\u95dc\u806f\u5f0f\u7684\u8868\uff09\u6642\uff0c \u9019\u6642\u5728\u505a\u4e00\u81f4\u6027\u548c\u539f\u5b50\u6027\u5c31\u6703\u76f8\u5c0d\u8907\u96dc\uff0c\u4f46\u662f\u5982\u679c\u900f\u904e\u4e8b\u4ef6\u4f86\u6e90\u7684\u65b9\u5f0f\uff0c \u591a\u500b\u8cc7\u6599\u7684\u7570\u52d5\uff08\u4f8b\u5982\u524d\u9762\u63d0\u7684\u5b78\u751f\u9000\u9078\u8ab2\u7a0b\uff09\u5728\u62bd\u8c61\u5c64\u9762\u4e0a\u5176\u5be6\u53ea\u662f\u4e00\u500b\u4e8b\u4ef6\uff0c\u4e5f\u5c31\u662f\u9644\u52a0\u4e00\u884c\u8cc7\u6599\u5230\u65e5\u8a8c\u4e2d\u3002
\u9019\u6a23\u505a\u4e00\u81f4\u6027\u548c\u539f\u5b50\u6027\u5c31\u5f88\u55ae\u7d14\u4e86\uff0c\u8b93\u4e0d\u540c\u8ffd\u8e64\u8005\u8655\u7406\u4e0d\u540c\u8868\u7684\u8a08\u7b97\u5c31\u53ef\u4ee5\u8f15\u6613\u9054\u5230\u539f\u5b50\u6027\uff0c \u7136\u5f8c\u591a\u500b\u76f8\u540c\u4e26\u884c\u4e8b\u4ef6\u56e0\u70ba\u662f\u55ae\u4e00\u4e8b\u4ef6\u6240\u4ee5\u4e0d\u6703\u6709\u591a\u500b\u7570\u52d5\u76f8\u4e92\u4ea4\u53c9\uff0c \u5c31\u5f88\u8f15\u6613\u53ef\u4ee5\u9054\u6210\u4e00\u81f4\u6027\uff08\u4f46\u662f\u6703\u6709\u548c\u8907\u88fd\u5ef6\u9072\u4e00\u6a23\u7684\u554f\u984c\uff0c\u4e5f\u5c31\u662f\u50c5\u80fd\u9054\u6210\u6700\u7d42\u4e00\u81f4\u6027\uff09\u3002
"},{"location":"feedback/designing-data-intensive-applications/derived-stream/#\u4e32\u6d41\u8655\u7406","title":"\u4e32\u6d41\u8655\u7406","text":"\u4e32\u6d41\u8655\u7406\u548c\u6279\u6b21\u8655\u7406\u7406\u5ff5\u4e00\u6a23\uff1a\u6bcf\u500b\u7a0b\u5e8f\uff08job, operator\uff09\u505a\u81ea\u5df1\u7684\u4e8b\uff0c \u900f\u904e\u591a\u500b\u7a0b\u5e8f\u7684\u5354\u4f5c\u88fd\u4f5c\u51fa\u8907\u96dc\u7684\u61c9\u7528\u3002\u524d\u9762\u8b1b\u7684\u90fd\u662f\u55ae\u4e00\u8655\u7406\u65b9\u5f0f\uff0c \u4f8b\u5982\u5feb\u53d6\uff0c\u6211\u5011\u9084\u6c92\u63d0\u5230\u50cf\u6279\u6b21\u8655\u7406\u90a3\u6a23\u53ef\u4ee5\u591a\u500b\u7a0b\u5e8f\u50b3\u905e\u7684\u6a5f\u5236\uff0c\u9084\u6709\u9019\u4e4b\u4e2d\u6703\u9047\u5230\u7684\u4e00\u4e9b\u554f\u984c\u3002
\u9069\u7528\u65bc\u6279\u6b21\u8655\u7406\u7684 \u5206\u5340 \u548c \u5e73\u884c\u8655\u7406 \u5728\u4e32\u6d41\u8655\u7406\u4e2d\u90fd\u662f\u4e00\u6a23\u7684\u6a5f\u5236\uff0c \u5dee\u5225\u5728\u65bc\u6279\u6b21\u8655\u7406\u662f\u8655\u7406\u4e00\u6bb5\u8cc7\u6599\uff0c\u4e5f\u5c31\u662f\u9019\u500b\u8cc7\u6599\u5927\u5c0f\u662f\u53d7\u9650\u7684\uff0c \u7576\u904b\u7b97\u5230\u4e00\u534a\u7684\u6642\u5019\u7bc0\u9ede\u5931\u80fd\u6642\u5c31\u53ef\u4ee5\u91cd\u65b0\u904b\u7b97\uff0c\u4f46\u662f\u5728\u4e32\u6d41\u8655\u7406\u6642\u8cc7\u6599\u662f\u7121\u9650\u7684\u3002 \u4e00\u500b\u904b\u884c\u4e86\u597d\u5e7e\u500b\u6708\u7684\u7d50\u679c\uff0c\u6211\u5011\u4e0d\u53ef\u80fd\u8aaa\u91cd\u7b97\u5c31\u91cd\u7b97\uff0c\u5fc5\u9808\u8981\u6709\u65b9\u5f0f\u8655\u7406\u3002
"},{"location":"feedback/designing-data-intensive-applications/derived-stream/#\u54ea\u4e9b\u61c9\u7528","title":"\u54ea\u4e9b\u61c9\u7528","text":"\u300c\u5efa\u7acb\u65b0\u89c0\u9ede\u300d\u524d\u9762\u6709\u63d0\u904e\uff0c\u9019\u88e1\u5c31\u653e\u5728\u4e00\u8d77\u56de\u9867\u4e00\u4e0b\u3002 \u524d\u9762\u5169\u500b\u901a\u5e38\u662f\u9700\u8981\u5728\u7279\u5b9a\u7bc4\u570d\u5167\u7684\u8cc7\u6599\uff0c\u4f46\u662f\u5efa\u7acb\u65b0\u89c0\u9ede\u901a\u5e38\u9700\u8981\u5f9e\u539f\u53e4\u6642\u4ee3\u7684\u8cc7\u6599\u624d\u80fd\u5efa\u7acb\u6b63\u78ba\u7684\u89c0\u9ede\u3002
"},{"location":"feedback/designing-data-intensive-applications/derived-stream/#\u8907\u5408\u4e8b\u4ef6\u8655\u7406","title":"\u8907\u5408\u4e8b\u4ef6\u8655\u7406","text":"\u8907\u5408\u4e8b\u4ef6\u8655\u7406\uff08CEP\uff09\u5f88\u50cf Regular Expression\uff0cCEP \u5c31\u662f\u4e00\u7a2e\u7be9\u9078\u7279\u5b9a\u4e8b\u4ef6\u7684\u5de5\u5177\uff0c \u81ea 1990 \u767c\u5c55\u81f3\u4eca\uff0c\u6709\u50cf SQL \u90a3\u6a23\u62bd\u8c61\u7684\u8a9e\u6cd5 \uff08\u5982 CEL\uff09 \u4e5f\u6709 GUI \u5de5\u5177\u3002
example in CELselect *\nfrom MeasurementCreated e\nwhere getNumber(e, \"c8y_Temperature.T.value\") > 100\n
\u4e0d\u50cf\u5176\u4ed6\u8cc7\u6599\u5eab\u628a\u8cc7\u6599\u5b58\u8d77\u4f86\uff0c\u7136\u5f8c\u8b93\u5916\u90e8\u8f38\u5165\u641c\u5c0b\u8a9e\u6cd5\u9032\u4f86\uff08\u8cc7\u6599\u662f\u4e3b\u3001\u641c\u5c0b\u662f\u5ba2\uff09\uff0c CEP \u6703\u8b93\u8a9e\u6cd5\u5b58\u9032\u7bc0\u9ede\u4e2d\uff0c\u7136\u5f8c\u8b93\u8cc7\u6599\u8f38\u5165\u9032\u7bc0\u9ede\uff08\u641c\u5c0b\u662f\u4e3b\u3001\u8cc7\u6599\u662f\u5ba2\uff09\u3002 \u6709\u6642\u8b93\u6bcf\u500b\u8cc7\u6599\u90fd\u904e\u9019\u500b\u641c\u5c0b\u6703\u964d\u4f4e\u6574\u9ad4\u7684\u901f\u5ea6\uff0c\u6240\u4ee5\u6709\u6642\u5019\u6703\u5148\u7d93\u904e \u7d22\u5f15 \u518d\u8dd1\u7be9\u9078\uff0c \u4f8b\u5982 Elasticsearch \u7684 percolate\u3002
\u53ef\u80fd\u7684\u61c9\u7528\u6709\uff1a
\u53ef\u80fd\u7684\u8edf\u9ad4\u6709\uff1a
\u4e0d\u50cf CEP \u9019\u7a2e\u7be9\u9078\u7279\u5b9a\u4e8b\u4ef6\u7684\uff0c\u61c9\u7528\u4e5f\u53ef\u80fd\u662f\u5728\u7279\u5b9a\u5340\u9593\u5167\u6574\u5408\u591a\u500b\u4e8b\u4ef6\u4e26\u8f38\u51fa\u6210\u9700\u8981\u7684\u7d50\u679c\u3002
\u9019\u88e1\u9700\u8981\u6ce8\u610f\u7684\u662f\u8981\u600e\u9ebc\u8a02\u5b9a\u7279\u5b9a\u5340\u9593\uff1f\u9019\u500b\u6211\u5011\u6703\u5728\u5f8c\u9762\u63d0\u4e32\u6d41\u8655\u7406\u7684\u554f\u984c\u6642\u8a0e\u8ad6\u3002
\u53ef\u80fd\u7684\u8edf\u9ad4\u6709\uff1a
\u4e32\u6d41\u8655\u7406\u7b97\u51fa\u7684\u503c\u4e0d\u662f\u6e96\u78ba\u7684
\u6709\u6642\u5019\u70ba\u4e86\u6e1b\u5c11\u904b\u7b97\u6216\u5132\u5b58\u8cc7\u6e90\u6703\u900f\u904e\u4e00\u4e9b\u6a5f\u7387\u904b\u7b97 \uff08\u4f8b\u5982\u57fa\u6578\u4f30\u8a08\uff09 \u5c0e\u81f4\u8f38\u51fa\u7684\u7d50\u679c\u548c\u771f\u5be6\u7d50\u679c\u6709\u4e9b\u5fae\u5dee\u7570\uff0c\u4e0d\u904e\u9019\u4e26\u4e0d\u662f\u56e0\u70ba\u4e32\u6d41\u8655\u7406\u5929\u751f\u7684\u74b0\u5883\uff0c\u800c\u662f\u72a7\u7272\u6e96\u78ba\u6027\u63db\u53d6\u6548\u80fd\uff0c \u9019\u4e5f\u53ef\u80fd\u662f\u5f88\u591a\u4eba\u6703\u8a8d\u70ba\u4e32\u6d41\u8655\u7406\u7684\u7d50\u679c\u901a\u5e38\u4e0d\u6e96\u7684\u8b2c\u8aa4\u4f86\u6e90\u3002
"},{"location":"feedback/designing-data-intensive-applications/derived-stream/#\u6709\u54ea\u4e9b\u554f\u984c","title":"\u6709\u54ea\u4e9b\u554f\u984c","text":"\u4e3b\u8981\u6709\u5169\u500b\uff1a\u6642\u9593 \u548c \u806f\u5408\u3002
"},{"location":"feedback/designing-data-intensive-applications/derived-stream/#\u8a72\u9078\u54ea\u500b\u6642\u9593","title":"\u8a72\u9078\u54ea\u500b\u6642\u9593\uff1f","text":"\u5982\u679c\u4f7f\u7528\u7a0b\u5e8f\u57f7\u884c\u7576\u4e0b\u7684\u6642\u9593\u5c31\u6703\u56e0\u70ba\u50b3\u905e\u5ef6\u9072\u800c\u51fa\u73fe\u8aa4\u5dee\uff0c \u53cd\u904e\u4f86\u8aaa\u6709\u6642\u5f9e\u4f7f\u7528\u8005\u9001\u4f86\u7684\u4e8b\u4ef6\u548c\u6e96\u78ba\u4e8b\u4ef6\u767c\u751f\u7684\u6642\u9593\u5dee\u5f88\u591a\uff0c \u4f8b\u5982\u624b\u6a5f\u9023\u5230 Wifi \u5f8c\u624d\u6703\u628a\u4e8b\u4ef6\u9001\u7d66\u4f3a\u670d\u5668\u3002 \u4f46\u662f\u5982\u679c\u4f7f\u7528\u4f7f\u7528\u8005\u88dd\u7f6e\u7576\u4e0b\u7684\u6642\u9593\uff0c\u5c31\u5f88\u5bb9\u6613\u53d7\u5230\u4f7f\u7528\u8005\u624b\u52d5\u6539\u6642\u9593\u9020\u6210\u7684\u8aa4\u5dee\uff0c \u6240\u4ee5\u9078\u64c7\u54ea\u500b\u6642\u9593\u662f\u9700\u8981\u6839\u64da\u61c9\u7528\u7a0b\u5f0f\u53bb\u8a0e\u8ad6\u7684\u3002
\u4e0d\u904e\u4e0a\u8ff0\u72c0\u6cc1\u901a\u5e38\u6703\u6709\u5176\u4ed6\u89e3\u6cd5\uff1a\u7d00\u9304\u4e09\u500b\u6642\u9593\uff0c\u5206\u5225\u662f\u4e8b\u4ef6\u767c\u751f\u6642\u88dd\u7f6e\u7576\u4e0b\u7684\u6642\u9593\uff0c \u4e8b\u4ef6\u9001\u51fa\u6642\u88dd\u7f6e\u7576\u4e0b\u7684\u6642\u9593\uff0c\u5f8c\u7aef\u4f3a\u670d\u5668\u6536\u5230\u4e8b\u4ef6\u7576\u4e0b\u7684\u6642\u9593\u3002 \u900f\u904e\u4f3a\u670d\u5668\u7684\u6642\u9593\u548c\u4e8b\u4ef6\u9001\u51fa\u7684\u6642\u9593\u4f86\u8a08\u7b97\u88dd\u7f6e\u548c\u4f3a\u670d\u5668\u7684\u6642\u9593\u5dee\uff0c\u5f97\u77e5\u4e8b\u4ef6\u767c\u751f\u6642\u7684\u771f\u6b63\u6642\u9593\u3002
"},{"location":"feedback/designing-data-intensive-applications/derived-stream/#\u6642\u9593\u7a97","title":"\u6642\u9593\u7a97","text":"\u5728\u9078\u64c7\u6642\u9593\u7a97\u7684\u5be6\u4f5c\u524d\u6211\u5011\u9700\u8981\u9078\u6642\u8ddd\uff08\u6bcf\u4e94\u5206\u9418\u7d71\u8a08\u4e00\u6b21\u9084\u662f\u6bcf\u5206\u9418\uff09\uff0c\u4f46\u7121\u8ad6\u54ea\u4e2d\u5be6\u4f5c\u90fd\u6703\u6709\u843d\u5f8c\u4e8b\u4ef6\u7684\u60c5\u6cc1\uff0c \u4f8b\u5982\u7d71\u8a08\u6bcf\u5206\u9418\u7684\u8acb\u6c42\u6578\u6642\u6211\u8a72\u600e\u9ebc\u6c7a\u5b9a\u9019\u5206\u9418\uff08\u4f8b\u5982 09:30 \u7684\u9019\u5206\u9418\uff09\u7684\u7d71\u8a08\u5df2\u7d93\u7d50\u675f\u4e86\uff1f \u6709\u53ef\u80fd\u8acb\u6c42\u767c\u751f\u5728 09:30.999\uff0c\u4f46\u662f\u9001\u904e\u4f86\u6642\u5df2\u7d93 09:31.1\uff0c\u9019\u6642\u9019\u500b\u8acb\u6c42\u5c31\u88ab\u653e\u5728 31 \u5206\u800c\u5931\u53bb\u6e96\u5ea6\u3002 \u9019\u6642\u6211\u5011\u53ef\u4ee5 \u5ffd\u7565 \u6216\u8005 \u767c\u5e03\u4fee\u6b63\uff08\u901a\u5e38\u9700\u8981\u8b93\u7a0b\u5e8f\u7d00\u9304\u4e0a\u4e00\u500b\u503c\uff09\u3002
\u6709\u5e7e\u7a2e\u6642\u9593\u7a97\uff1a
0930-0935
\u30010935~0940
\u3001...\u30020930~0937
\u30010936~0943
\u3001...\u30020930~0935
\u4e2d\u6700\u65e9\u7684\u4e8b\u4ef6\u662f 09:31:11
\u6700\u665a\u7684\u662f 09:34:44
\u9019\u6642\u7a97\u683c\u5c31\u662f 09:31:11~09:34:44
\u3002\u6279\u6b21\u8655\u7406\u5c31\u6709\u5728\u8655\u7406\u806f\u5408\u4e86\uff0c\u4f46\u662f\u4e32\u6d41\u8655\u7406\u7684\u8cc7\u6599\u662f\u6301\u7e8c\u4e0d\u65b7\u7684\uff0c\u5728\u9762\u5c0d\u806f\u5408\uff08join\uff09\u6642\u5c31\u9700\u8981\u66f4\u8b39\u614e\u7684\u65b9\u6cd5\u4f86\u8655\u7406\u3002
"},{"location":"feedback/designing-data-intensive-applications/derived-stream/#\u5169\u7d44\u4e3b\u984c","title":"\u5169\u7d44\u4e3b\u984c","text":"\u5ee3\u544a\u9ede\u64ca\u6642\u5dee\uff1a\\(\u9ede\u64ca\u6642\u9593 - \u63a8\u64ad\u6642\u9593\\)
\u60f3\u50cf\u4e00\u4e0b\u5ee3\u544a\u9ede\u64ca\u6642\u5dee\u7684\u8a08\u7b97\uff1a\\(\u9ede\u64ca\u6642\u9593 - \u63a8\u64ad\u6642\u9593\\)\uff0c \u900f\u904e\u4e00\u4e9b session \u6a5f\u5236\uff08\u4f8b\u5982 cookie\uff09\u6211\u5011\u77e5\u9053\u9019\u5169\u500b\u4e8b\u4ef6\u4f86\u6e90\u65bc\u540c\u4e00\u500b\u4f7f\u7528\u8005\u5c31\u53ef\u4ee5\u505a\u9019\u6a23\u7684\u8a08\u7b97\uff0c \u9019\u6642\u8ffd\u8e64\u8005\u5c31\u9700\u8981\u540c\u6642\u8ffd\u8e64\u9019\u5169\u500b\u4e3b\u984c\uff0c\u4e26\u8a18\u9304\u5176\u4e2d\u4e00\u500b\u4e3b\u984c\uff08\u4ee5\u672c\u4f8b\u4f86\u8aaa\u5c31\u662f \u9ede\u64ca\u4e8b\u4ef6\uff09\uff0c \u7576 \u63a8\u64ad\u6642\u9593 \u6709\u548c\u5132\u5b58\u7684 \u9ede\u64ca\u4e8b\u4ef6 \u6709\u76f8\u540c\u7684\u4f7f\u7528\u8005\u7de8\u865f\u5c31\u53ef\u4ee5\u8f38\u51fa\u5ee3\u544a\u9ede\u64ca\u6642\u5dee\u9019\u500b\u4e8b\u4ef6\u3002 \u7576\u7136\u5132\u5b58\u7684\u91cf\u662f\u9700\u8981\u9650\u5236\u7684\uff0c\u4f8b\u5982\u50c5\u8a18\u9304\u4e00\u5c0f\u6642\u5167\u3002
"},{"location":"feedback/designing-data-intensive-applications/derived-stream/#\u52d5\u614b\u8868\u548c\u4e3b\u984c","title":"\u52d5\u614b\u8868\u548c\u4e3b\u984c","text":"\u4f7f\u7528\u8005\u884c\u70ba\uff1a\u4f7f\u7528\u8005\u884c\u70ba \u806f\u5408 \u4f7f\u7528\u8005\u8cc7\u8a0a
\u5728\u6279\u6b21\u8655\u7406\u4e2d\uff0c\u4f7f\u7528\u8005\u8cc7\u8a0a \u53ea\u9700\u8981\u8003\u616e\u958b\u59cb\u8a08\u7b97\u6642\u7684\u90a3\u4e00\u77ac\u9593\u5373\u53ef\uff0c \u56e0\u70ba \u4f7f\u7528\u8005\u884c\u70ba \u7684\u8cc7\u6599\u4e5f\u53ea\u6709\u90a3\u77ac\u9593\u7684\u8cc7\u8a0a\u3002 \u4f46\u662f\u5728\u4e32\u6d41\u8655\u7406\u4e2d \u4f7f\u7528\u8005\u884c\u70ba \u662f\u5373\u6642\u7684\u8cc7\u6599\uff0c\u4f8b\u5982\u65e9\u4e0a \u4f7f\u7528\u8005 123 \u7dbd\u865f\u53eb\u300c\u5c0f\u660e\u300d\uff0c \u5230\u4e86\u4e0b\u5348\u537b\u6539\u6210\u300c\u5927\u660e\u300d\uff0c\u6240\u4ee5\u9019\u500b\u8981\u806f\u5408\u7684\u8868\uff08\u4f7f\u7528\u8005\u8cc7\u8a0a\uff09\u662f \u52d5\u614b\u8868\uff0c\u6703\u96a8\u8457\u6642\u9593\u7570\u52d5\uff0c \u800c\u52d5\u614b\u8868\u7684\u7531\u4f86\u5c31\u662f\u524d\u9762\u63d0\u7684 CDC\u3002
\u9019\u6709\u9ede\u50cf\u662f\u524d\u9762\u7684\u8ffd\u8e64\u5169\u500b\u4e3b\u984c\uff0c\u53ea\u662f\u5176\u4e2d\u4e00\u500b\u4e3b\u984c\u9700\u8981\u6574\u5408\u6210\u300c\u72c0\u614b\u300d
"},{"location":"feedback/designing-data-intensive-applications/derived-stream/#\u52d5\u614b\u8868\u548c\u52d5\u614b\u8868","title":"\u52d5\u614b\u8868\u548c\u52d5\u614b\u8868","text":"Twitter\uff1a\u670b\u53cb\u767c\u6587 \u806f\u5408 \u4f7f\u7528\u8005\u4e3b\u9801
\u5982\u679c\u6bcf\u6b21\u4f7f\u7528\u8005\u5237\u65b0\u4e3b\u9801\u90fd\u900f\u904e\u50b3\u7d71\u95dc\u806f\u5f0f\u8cc7\u6599\u5eab\u53bb\u806f\u5408\u6703\u5927\u5927\u5f71\u97ff\u6548\u80fd\uff0c\u9019\u6642\u5c31\u53ef\u4ee5\u8003\u616e\u4f7f\u7528\u4e32\u6d41\u8655\u7406\u3002 \u505a\u6cd5\u5c31\u6703\u662f\u7576\u670b\u53cb\u767c\u6587\u6642\uff0c\u66f4\u65b0\u6240\u6709\u8ffd\u8e64\u4ed6\u7684\u4eba\u7684\u4e3b\u9801\u8cc7\u8a0a\uff0c\u7136\u5f8c\u518d\u8b93\u5916\u90e8\u61c9\u7528\u7a0b\u5f0f\u53bb\u53d6\u5f97\u9019\u500b\u7a0b\u5e8f\u8f38\u51fa\u7684\u4e3b\u9801\u8cc7\u8a0a\u3002 \u9019\u500b\u7a0b\u5e8f\u5c31\u9700\u8981\u900f\u904e\u5169\u500b\u4e3b\u984c\uff08\u5206\u5225\u662f \u670b\u53cb\u767c\u6587 \u548c \u4f7f\u7528\u8005\u4e3b\u9801\uff09\u7d00\u9304\u5169\u500b\u300c\u72c0\u614b\u300d\u3002
"},{"location":"feedback/designing-data-intensive-applications/derived-stream/#\u806f\u5408\u6642\u8cc7\u6599\u5df2\u7d93\u904e\u671f","title":"\u806f\u5408\u6642\u8cc7\u6599\u5df2\u7d93\u904e\u671f\uff1f","text":"\u6709\u6642\u5019\u5728\u806f\u5408\u7684\u6642\u5019\u8cc7\u6599\u5df2\u7d93\u904e\u671f\uff0c\u4f8b\u5982\u8cfc\u7269\u5546\u57ce\u5728\u7d50\u5e33\u6642\u6703\u52a0\u4e0a\u570b\u5bb6\u7684\u7a05\u7387\uff0c \u800c\u9019\u500b\u7a05\u7387\u662f\u7d50\u5e33\u77ac\u9593\uff08\u6216\u8005\u8aaa\u7576\u5929\uff09\u7684\u7a05\u7387\uff0c\u5982\u679c\u904e\u4e86\u5e7e\u5929\u67d0\u570b\u7684\u7a05\u7387\u66f4\u65b0\u6642\uff0c \u5728\u5f8c\u53f0\u7d71\u8a08\u90a3\u4e00\u5929\u7684\u71df\u6536\u6642\u5c31\u6703\u6709\u932f\uff0c \u6240\u4ee5\u9019\u7a2e\u6703\u8b8a\u52d5\u7684\u503c\uff08slowly changing dimension, SCD\uff09\u5c31\u4e0d\u80fd\u76f4\u63a5\u6539 key-value \u7684\u503c\uff0c \u800c\u662f\u8981\u518d\u6ce8\u5165\u4e00\u500b\u65b0\u7684\u7d00\u9304\u4e26\u8ce6\u4e88\u65b0\u7684\u7de8\u865f\u907f\u514d\u8cc7\u8a0a\u907a\u5931\uff0c\u4f8b\u5982\uff1a
\u6ce8\u5165\u65b0\u7684\u503c\u800c\u975e\u7570\u52d5\u820a\u503c-- \u4e0d\u61c9\u7528 UPDATE\uff1a\n-- UPDATE dim_tax\n-- SET tax=15\n-- WHERE country = 'Taiwan'\nINSERT dim_tax (country, tax, date) VALUES\n('Taiwan', 10, '2000-01-01'),\n('Taiwan', 15, '2009-01-01');\n
"},{"location":"feedback/designing-data-intensive-applications/derived-stream/#\u4e32\u6d41\u8655\u7406\u7684\u5bb9\u932f","title":"\u4e32\u6d41\u8655\u7406\u7684\u5bb9\u932f","text":"\u4e3b\u8981\u6982\u5ff5\u90fd\u662f\u5982\u4f55\u505a\u5230 \u539f\u5b50\u6027\u3002
\u6279\u6b21\u8655\u7406\u7684\u5bb9\u932f\u662f\u900f\u904e\u6bcf\u6b21\u7d50\u679c\u8f38\u51fa\u5230 HDFS \u4e2d\uff0c\u5728\u4e0b\u6b21\u904b\u7b97\u6642\u91cd\u65b0\u62ff\u4e0a\u4e00\u500b\u7a0b\u5e8f\u7684\u7d50\u679c\u5c31\u53ef\u4ee5\u4e86\uff0c \u800c\u4e0d\u9700\u8981\u5168\u90e8\u91cd\u7b97\uff0c\u4f46\u662f\u4e32\u6d41\u8655\u7406\u5462\uff1f
Apache Spark \u4f7f\u7528 Microbatching \u7684\u65b9\u5f0f\uff0c\u4e5f\u5c31\u662f\u628a\u4e32\u6d41\u8655\u7406\u7576\u6210\u5c0f\u7684\u6279\u6b21\u8655\u7406\uff0c \u6240\u4ee5\u6bcf\u6b21\u5c0f\u7684\u6279\u6b21\u8655\u7406\u505a\u5b8c\u90fd\u53ef\u4ee5\u5beb\u4e00\u4e9b\u5099\u4efd\u6a94\u6848\u3002\u4f46\u9019\u4e5f\u4ee3\u8868\u6642\u9593\u7a97\u5929\u751f\u5c31\u53ea\u80fd\u4f7f\u7528 \u7ffb\u8f49\u6642\u9593\u7a97\u3002 \u76f8\u5c0d\u800c\u8a00 Apache Flink \u900f\u904e\u5b9a\u671f\u5efa\u7acb\u6aa2\u67e5\u9ede\u7684\u6a5f\u5236\uff0c\u96d6\u7136\u548c Microbatching \u5f88\u50cf\uff0c \u4f46\u662f\u4e0d\u53d7\u9650\u9078\u64c7\u7684\u6642\u9593\u7a97\u3002
\u9084\u6709\u4e00\u500b\u91cd\u9ede\u662f\u8981\u8b93\u904b\u7b97\u662f\u51aa\u7b49\u7684\uff08idempotent\uff09\uff0c\u4e5f\u5c31\u662f\u6bcf\u6b21\u904b\u7b97\u76f8\u540c\u4e8b\u4ef6\u7684\u7d50\u679c\u90fd\u8981\u4e00\u6a23\uff0c \u9019\u5c31\u4ee3\u8868\u904b\u7b97\u4e2d\u4e0d\u80fd\u593e\u5e36\u6642\u9593\u6216\u96a8\u6a5f\u6027\uff0c\u9019\u6642\u5c31\u8981\u8b93\u4e8b\u4ef6\u4e2d\u593e\u5e36\u9019\u4e9b\u503c\u3002 \u5c31\u7b97\u6c92\u8fa6\u6cd5\u907f\u514d\uff08\u4f8b\u5982 x=x+1
\uff09\u6211\u5011\u4e5f\u53ef\u4ee5\u7d00\u9304\u4e8b\u4ef6\u7684\u7de8\u865f\uff08\u4ee5\u65e5\u8a8c\u578b\u4e2d\u4ecb\u8005\u70ba\u4f8b\u5c31\u662f\u504f\u79fb\u91cf\uff09\u4f86\u907f\u514d\u91cd\u65b0\u904b\u7b97\u3002
\u81f3\u65bc\u91cd\u5efa\u72c0\u614b\u524d\u9762\u5c31\u6709\u63d0\u4e86\uff0c\u9700\u8981\u6709\u6a5f\u5236\u907f\u514d\u5f9e\u958b\u5929\u95e2\u5730\u7684\u6642\u5019\u91cd\u4f86\uff0c \u900f\u904e\u58d3\u7dca\u65e5\u8a8c\u3001 \u5efa\u7acb\u984d\u5916\u5099\u4efd\u4e3b\u984c\u3001 \u5feb\u7167\u9032 HDFS\u3001\u591a\u5e7e\u500b\u505a\u4e00\u6a23\u4e8b\u7684\u8ffd\u8e64\u8005\u7b49\u7b49\u3002
\u8b93\u975e\u51aa\u7b49\u8a08\u7b97\u8b8a\u6210\u51aa\u7b49
\u6709\u4e00\u4e9b\u8ad6\u6587\u5728\u8a0e\u8ad6\u5982\u4f55\u8b93\u975e\u51aa\u7b49\u8a08\u7b97\u8b8a\u6210\u51aa\u7b49\u3002
"},{"location":"feedback/designing-data-intensive-applications/derived-stream/#\u7d50\u8ad6","title":"\u7d50\u8ad6","text":"\u4e8b\u4ef6\u4f86\u6e90\u7684\u6982\u5ff5\u8cab\u7a7f\u672c\u7ae0\u7bc0\uff0c\u900f\u904e\u548c\u4ee5\u5f80\u300c\u7dad\u6301\u72c0\u614b\u300d\u7684\u6982\u5ff5\u4e0d\u540c\uff0c\u4e8b\u4ef6\u4f86\u6e90\u8ce6\u4e88\u8cc7\u6599\u6210\u70ba\u4e00\u7a2e\u300c\u9762\u76f8\u300d\u3002 \u5c0d\u65bc\u4e8b\u4ef6\u7b49\u7b49\u6a5f\u5236\u60f3\u8981\u6df1\u5165\uff0c \u63a8\u85a6\u6b64\u6587\u7ae0\u3002
"},{"location":"feedback/designing-data-intensive-applications/distributed-env/","title":"\u5206\u6563\u5f0f\u7cfb\u7d71\u7684\u74b0\u5883","text":"\u672c\u7ae0\u6703\u8a0e\u8ad6\u7db2\u8def\u3001\u6642\u9418\u3001\u57f7\u884c\u7dd2\u662f\u5982\u4f55\u5f71\u97ff \u5206\u6563\u5f0f\u7cfb\u7d71 \u7684\u3002
HackMD \u5831\u544a
\u6211\u5011\u6709\u63d0\u904e\u5206\u6563\u5f0f\u7684\u7cfb\u7d71\u6703\u8b93\u55ae\u4e00\u8cc7\u6599\u5eab\u4e2d\u4ea4\u6613\u6a5f\u5236\u6240\u80fd\u63d0\u4f9b\u7684\u4e00\u81f4\u6027\u5931\u53bb\u539f\u6709\u7684\u4fdd\u8b49\u3002\u70ba\u4e86\u8b93\u61c9\u7528\u7a0b\u5f0f\u958b\u767c\u4eba\u54e1\u5728\u5206\u6563\u5f0f\u6216\u8005\u55ae\u53f0\u7684\u8cc7\u6599\u5eab\u90fd\u4e0d\u6703\u6709\u592a\u5927\u7684\u4f7f\u7528\u5dee\u7570\uff0c\u6211\u5011\u9700\u8981\u500b\u65b9\u6cd5\u89e3\u6c7a\u9019\u554f\u984c\u3002
\u4e0d\u904e\u5728\u8a0e\u8ad6\u5982\u4f55\u89e3\u6c7a\u9019\u554f\u984c\u4e4b\u524d\uff0c\u6211\u5011\u9700\u8981\u5148\u4f86\u8a0e\u8ad6\u4e00\u4e0b\u5206\u6563\u5f0f\u7684\u74b0\u5883\u9762\u81e8\u4e86\u54ea\u4e9b\u56f0\u5883\uff0c\u4e26\u8b93\u6211\u5011\u5c0d\u65bc\u6574\u9ad4\u74b0\u5883\u6709\u500b\u521d\u6b65\u7684\u6982\u5ff5\u3002
\u55ae\u53f0\uff08HPC\uff09 \u5206\u6563\u5f0f \u5168\u932f or \u6b63\u5e38 \u90e8\u5206\u932f\u4e14\u4e0d\u6b63\u5e38\u904b\u4f5c \u4e0d\u5bb9\u6613\u51fa\u932f \u5bb9\u6613\u51fa\u932f offline online\u2014\u4e0d\u5141\u8a31\u505c\u6a5f \u7dda\u8def\u6e9d\u901a \u7db2\u8def\u6e9d\u901a checkpoint retry\u6bd4\u8f03\u55ae\u53f0\u6a5f\u5668\u548c\u5206\u6563\u5f0f\u7cfb\u7d71\u7684\u5dee\u7570
\u55ae\u53f0\u9ad8\u6548\u80fd\u6a5f\u5668\uff08High-Performance Computer, HPC\uff09\u56e0\u70ba\u767c\u751f\u932f\u8aa4\u6642\u901a\u5e38\u662f\u975e\u5e38\u8907\u96dc\u7684\uff0c\u53ef\u80fd\u727d\u6d89\u5230\u786c\u9ad4\u3001\u97cc\u9ad4\u3001\u4f5c\u696d\u7cfb\u7d71\u7b49\u7b49\uff0c\u70ba\u4e86\u8b93\u767c\u751f\u932f\u8aa4\u6642\u4f7f\u7528\u8005\u4ecd\u7136\u53ef\u4ee5\u57f7\u884c\u5176\u4ed6\u5de5\u4f5c\uff0c\u57f7\u884c\u5de5\u4f5c\u7684\u7d50\u679c\u901a\u5e38\u662f\u8981\u9ebb\u6210\u529f\uff08\u5f97\u5230\u9810\u671f\u7684\u7d50\u679c\uff09\u8981\u9ebb\u5931\u6557\uff08\u57f7\u884c\u7dd2\u76f4\u63a5\u4e2d\u65b7\uff09\u3002
\u60f3\u50cf\u4e00\u4e0b\u4f60\u5728\u64cd\u4f5c\u81ea\u5df1\u7684\u7b46\u96fb\u4e26\u57f7\u884c\u64cd\u4f5c\uff08\u767b\u5165\u8996\u7a97\u3001\u6253\u958b\u7c21\u5831\uff09\u6642\uff0c\u901a\u5e38\u662f\u8981\u9ebb\u986f\u793a\u57f7\u884c\u6210\u529f\u8981\u9ebb\u5c31\u662f\u597d\u50cf\u6c92\u767c\u751f\u904e\u4efb\u4f55\u4e8b\u4e00\u6a23\uff0c\u76f4\u63a5\u4e2d\u65b7\u7a0b\u5e8f\u3002\u9664\u6b64\u4e4b\u5916\uff0c\u7576\u767c\u751f\u56b4\u91cd\u554f\u984c\u6642\u4f5c\u696d\u7cfb\u7d71\u5f88\u53ef\u80fd\u6703\u8b93\u7cfb\u7d71\u91cd\u65b0\u555f\u52d5\uff08\u85cd\u87a2\u5e55\u3001kernal panic \u7b49\u7b49\uff09\uff0c\u800c\u91cd\u65b0\u555f\u52d5\u4e4b\u5f8c\u539f\u672c\u7684\u554f\u984c\u5c31\u795e\u5947\u5730\u6d88\u5931\u4e86\u3002
\u76f8\u5c0d\u4f86\u8aaa\uff0c\u5206\u6563\u5f0f\u7cfb\u7d71\u5c0d\u65bc\u5916\u90e8\u89c0\u5bdf\u8005\u800c\u8a00\uff0c\u7576\u767c\u751f\u554f\u984c\u6642\u6703\u51fa\u73fe\u4e0d\u9810\u671f\u7684\u7d50\u679c\uff0c\u4f8b\u5982\u660e\u660e\u986f\u793a\u57f7\u884c\u5931\u6557\uff0c\u5be6\u969b\u537b\u57f7\u884c\u6210\u529f\u3002\u800c\u4e14\u660e\u660e\u6c92\u505a\u4efb\u4f55\u6539\u8b8a\uff0c\u91cd\u65b0\u57f7\u884c\u7b2c\u4e8c\u6b21\u4e4b\u5f8c\uff0c\u53c8\u5f9e\u5931\u6557\u8b8a\u6210\u6210\u529f\u4e86\u3002\u60f3\u60f3\u6211\u5011\u5728\u7dad\u904b\u6642\u9047\u4e0a\u7684\u90a3\u4e9b\u602a\u4e8b\uff01
\u63a5\u4e0b\u4f86\u6211\u5011\u5c31\u6703\u4f86\u8aaa\u660e\u4e00\u4e0b\uff0c\u5206\u6563\u5f0f\u7cfb\u7d71\u5230\u5e95\u8655\u65bc\u4ec0\u9ebc\u6a23\u7684\u74b0\u5883\u8b93\u4ed6\u9019\u9ebc\u7570\u65bc\u55ae\u53f0\u6a5f\u5668\u3002
\u4e0d\u5bb9\u6613\u51fa\u932f\u901a\u5e38\u4ee3\u8868\u7576\u767c\u751f\u932f\u8aa4\u7684\u6642\u5019\uff0c\u6211\u5011\u5f88\u53ef\u80fd\u662f\u7121\u80fd\u70ba\u529b\u7684\u3002
\u9019\u88e1\u7684\u932f\u8aa4\u90fd\u4e0d\u8003\u616e\u62dc\u5360\u5ead\u932f\u8aa4\u3002
"},{"location":"feedback/designing-data-intensive-applications/distributed-env/#\u7c21\u4ecb","title":"\u7c21\u4ecb","text":"\u5206\u6563\u5f0f\u7cfb\u7d71\u96d6\u7136\u5728\u76f8\u540c\u6210\u672c\u4e0b\u53ef\u4ee5\u8ca0\u8377\u66f4\u591a\u7684\u8acb\u6c42\uff0c\u4e5f\u80fd\u907f\u514d\u904e\u591a\u7684\u4efb\u4e00\u7bc0\u9ede\u7684\u4e2d\u65b7\u5c0e\u81f4\u670d\u52d9\u4e2d\u65b7\u3002
\u6211\u5011\u90fd\u77e5\u9053\u5206\u6563\u5f0f\u7cfb\u7d71\u7684\u74b0\u5883\u6bd4\u55ae\u53f0\u6a5f\u5668\u7684\u74b0\u5883\u66f4\u4e0d\u7a69\u5b9a\uff0c\u5982\u5716\u4e0a\u6240\u793a\uff0c\u4ed6\u4e0d\u50c5\u9700\u8981\u9762\u5c0d\u57f7\u884c\u7dd2\u7684\u554f\u984c\uff0c\u66f4\u9700\u8981\u9762\u5c0d\u7db2\u969b\u7db2\u8def\u548c\u4e0d\u540c\u6642\u9418\u7684\u554f\u984c\u3002
\u9019\u6642\u6211\u5011\u8981\u554f\u554f\u81ea\u5df1\uff0c\u70ba\u4ec0\u9ebc\uff1f\u70ba\u4ec0\u9ebc\u660e\u660e\u5728\u66f4\u4e0d\u7a69\u5b9a\u7684\u74b0\u5883\u4e4b\u4e2d\uff0c\u537b\u80fd\u5efa\u7acb\u66f4\u9ad8\u53ef\u7528\u548c\u66f4\u6709\u6548\u7387\u7684\u7cfb\u7d71\uff1f
\u9019\u662f\u56e0\u70ba\u9019\u4e9b\u5354\u5b9a\u6216\u8005\u670d\u52d9\u90fd\u662f\u5efa\u7acb\u5728\u6bcf\u4e00\u5b50\u5c64\uff08service, in OSI\uff09\u7684\u62bd\u8c61\u7dad\u5ea6\u4e4b\u4e0a\u3002
\u4e00\u500b HTTP \u8acb\u6c42\u662f\u5efa\u7acb\u5728
\u6bcf\u4e00\u5c64\u7684\u62bd\u8c61\u7dad\u5ea6\uff0c\u8b93\u4f60\u5728\u548c\u5b50\u5c64\u6e9d\u901a\u6642\u90fd\u5b8c\u5168\u4e0d\u9700\u8981\u8003\u616e\u66f4\u4e0b\u5c64\u7684\u6a5f\u5236\uff0c\u800c\u6700\u7d42\u62ff\u5230\u7684\u61c9\u7528\u7a0b\u5f0f\u8cc7\u8a0a\u5e7e\u4e4e\u53ef\u4ee5\u8aaa\u662f\u6c92\u6709\u4efb\u4f55\u932f\u8aa4\u7684\u8cc7\u8a0a\u3002\u7576\u7136\uff0c\u4f60\u4e5f\u53ef\u4ee5\u5728\u61c9\u7528\u7a0b\u5f0f\u4e2d\uff0c\u518d\u505a\u4e00\u6b21\u6392\u932f\u7684\u884c\u70ba\uff0c\u4f8b\u5982\u7576\u8d85\u904e\u4e00\u5b9a\u6642\u9593\u6c92\u56de\u61c9\u6642\uff0c\u91cd\u65b0\u8acb\u6c42\u4e00\u6b21\u3002
\u597d\u7528\u8cc7\u6e90
\u5c0d\u65bc\u7db2\u969b\u7db2\u8def\u7684\u904b\u4f5c\uff0c\u5efa\u8b70\u53ef\u4ee5\u4e0a Computer Communication \u9019\u4e00\u7cfb\u5217\u7684\u8ab2\u7a0b\u3002
\u5982\u679c\u662f\u8981\u55ae\u55ae\u4e86\u89e3 OSI \u4e0d\u540c\u5c64\u7684\u610f\u7fa9\u548c\u6e9d\u901a\u7684\u6982\u7565\u57fa\u790e\u4ecb\u7d39\uff0c\u53ef\u4ee5\u4e0a\u7cfb\u5217\u8ab2\u7a0b\u7684\u7b2c\u4e00\u5802\u8ab2 Fundamentals of Network Communication
\u6642\u9418\u548c\u57f7\u884c\u7dd2\u7684\u72c0\u6cc1\u4e5f\u662f\u4e00\u6a23\u7684\uff01\u6211\u5011\u5f85\u6703\u518d\u7d30\u8ac7\uff0c\u5148\u7e7c\u7e8c\u6df1\u5165\u4e00\u4e0b\u7db2\u969b\u7db2\u8def\u7684\u554f\u984c\u3002
"},{"location":"feedback/designing-data-intensive-applications/distributed-env/#\u7db2\u969b\u7db2\u8def","title":"\u7db2\u969b\u7db2\u8def","text":"\u9806\u5e8f\u6703\u4f9d\u5e8f\u5982\u4e0a\uff0c\u4f46\u662f\u7576\u4f86\u5230\u300c\u8981\u600e\u9ebc\u77e5\u9053\u7db2\u8def\u9047\u5230\u54ea\u4e9b\u554f\u984c\u300d\u6642\uff0c\u6703\u767c\u73fe\u7d50\u679c\u5c31\u662f\u6211\u5011\u6c92\u8fa6\u6cd5\u77e5\u9053\u767c\u751f\u4ec0\u9ebc\u4e8b\u3002
\u65e2\u7136\u7121\u6cd5\u77e5\u9053\u7db2\u8def\u9047\u5230\u54ea\u4e9b\u554f\u984c\uff0c\u6211\u5011\u8981\u600e\u9ebc\u5224\u5b9a\u7279\u5b9a\u7bc0\u9ede\u9023\u4e0d\u4e0a\u4e86\uff1f
\u901a\u5e38\u662f\u7528\u903e\u6642\u6a5f\u5236\uff08Timeout\uff09\uff0c\u4f46\u662f\u70ba\u4ec0\u9ebc\u7db2\u8def\u5ef6\u9072\u662f\u7121\u754c\u7684\uff08unbounded\uff09\uff1f
\u6211\u6709\u5beb\u4e86\u7bc7\u7db2\u8def\u600e\u9ebc\u50b3\u548c\u7db2\u8def\u50b3\u4e86\u4ec0\u9ebc\uff0c\u6709\u8208\u8da3\u4e86\u89e3\u66f4\u7d30\u7684\u90fd\u53ef\u4ee5\u67e5\u770b\u3002
"},{"location":"feedback/designing-data-intensive-applications/distributed-env/#\u6709\u54ea\u4e9b\u554f\u984c","title":"\u6709\u54ea\u4e9b\u554f\u984c","text":"\u5169\u500b\u65b9\u5411\uff1a
\u505c\u96fb\u3001\u5730\u5c64\u4e0b\u9677\u3001\u559d\u9189\u7684\u5361\u8eca\u53f8\u6a5f\u7b49\u7b49\u3002
\u5716\u7247\u63d0\u4f9b\u65bc\u6b64\u6587\u7ae0
Coda Hale \u7684\u7d93\u9a57\u8ac7
In my limited experience I\u2019ve dealt with long-lived network partitions in a single data center (DC), PDU failures, switch failures, accidental power cycles of whole racks, whole-DC backbone failures, whole-DC power failures, and a hypoglycemic driver smashing his Ford pickup truck into a DC\u2019s HVAC system. And I\u2019m not even an ops guy.
"},{"location":"feedback/designing-data-intensive-applications/distributed-env/#\u932f\u8aa4\u8a2d\u5b9a","title":"\u932f\u8aa4\u8a2d\u5b9a","text":"\u9019\u500b\u61c9\u8a72\u662f\u4e3b\u6d41\u3002
\u55ae\u7d14\u8edf\u9ad4\u9762\u6709 bug\uff1a
\u5982\u679c\u60f3\u4e86\u89e3\u66f4\u591a\u53ef\u80fd\u6703\u6709\u7684\u554f\u984c\uff0c\u53ef\u4ee5\u67e5\u95b1\uff1a
\u8981\u600e\u9ebc\u77e5\u9053\u7db2\u8def\u9047\u5230\u54ea\u4e9b\u554f\u984c\uff1f
\u7db2\u969b\u7db2\u8def\u7684\u554f\u984c\u767c\u751f\u5728\u4efb\u4f55\u5730\u65b9\uff0c\u904e\u53bb\u6216\u56de\u4f86\u7684\u8def\u4e0a\u3002\u800c\u554f\u984c\u53ef\u80fd\u662f\u5ef6\u9072\u3001\u932f\u8aa4\u3001\u907a\u5931\u3002
\u4f60\u6c92\u6709\u8fa6\u6cd5\u900f\u904e\u55ae\u4e00\u4e00\u500b\u932f\u8aa4\u8acb\u6c42\u77e5\u9053\u662f\u54ea\u7a2e\u539f\u56e0\u9020\u6210\u9019\u500b\u932f\u8aa4\u8acb\u6c42\u3002
\u65e2\u7136\u7121\u6cd5\u77e5\u9053\u7db2\u8def\u9047\u5230\u54ea\u4e9b\u554f\u984c\uff0c\u6211\u5011\u8981\u600e\u9ebc\u5224\u5b9a\u7279\u5b9a\u7bc0\u9ede\u9023\u4e0d\u4e0a\u4e86\uff1f
"},{"location":"feedback/designing-data-intensive-applications/distributed-env/#\u5982\u4f55\u5224\u5b9a\u7bc0\u9ede\u4e0b\u7dda\u4e86","title":"\u5982\u4f55\u5224\u5b9a\u7bc0\u9ede\u4e0b\u7dda\u4e86","text":"\u6709\u4e00\u4e9b\u65b9\u6cd5
FIN
\u6216 RST
\u5c0d\u61c9\u7528\u7a0b\u5f0f\u4f86\u8aaa\uff0c\u80fd\u505a\u7684\u6709\u9650\uff0c\u56e0\u6b64\u901a\u5e38\u90fd\u6703\u4f7f\u7528\u903e\u6642\u6a5f\u5236\uff0c\u4f46\u662f\u9700\u8981\u4f7f\u7528\u903e\u6642\u7684\u539f\u56e0\u662f\u4ec0\u9ebc\uff1f
\u56e0\u70ba\u6211\u5011\u4e0d\u77e5\u9053\u7db2\u8def\u4ed6\u6700\u9577\u6703\u591a\u4e45\u56de\u61c9\u3002\u4f8b\u5982\uff0c\u5982\u679c\u6211\u77e5\u9053\u7db2\u8def\u6700\u4e45\u6700\u4e45\u4e00\u5b9a\u6703\u5728\u5341\u79d2\u5167\u56de\u6211\uff1a\u4ed6\u627e\u4e0d\u5230\u76ee\u6a19\u7bc0\u9ede\uff0c\u9019\u6a23\u6211\u5c31\u4e0d\u9700\u8981\u903e\u6642\u6a5f\u5236\u4e86\u3002
\u9019\u6a23\u53e6\u4e00\u500b\u554f\u984c\u5c31\u4f86\u4e86\uff1a\u70ba\u4ec0\u9ebc\u7db2\u8def\u5ef6\u9072\u662f\u7121\u754c\u7684\uff08unbounded\uff09\uff1f
"},{"location":"feedback/designing-data-intensive-applications/distributed-env/#\u70ba\u4ec0\u9ebc\u7db2\u8def\u5ef6\u9072\u662f\u7121\u754c\u7684","title":"\u70ba\u4ec0\u9ebc\u7db2\u8def\u5ef6\u9072\u662f\u7121\u754c\u7684","text":"\u7db2\u8def\u5c01\u5305\u662f\u9700\u8981\u6392\u968a\u7684\uff0c\u96d9\u5411\u90fd\u9700\u8981\uff0c\u6392\u968a\u539f\u56e0\u53ef\u80fd\u70ba\uff1a
Packet Switching Networks Algorithms \u548c Stop Rate Limiting
\u4f46\u662f\u6709\u6c92\u6709\u6a5f\u5236\u662f\u4e0d\u9700\u8981\u6392\u968a\u7684\uff1f\u60f3\u60f3\u624b\u6a5f\uff0c\u5b83\u5728\u5f88\u4e45\u4ee5\u524d\u5c31\u51fa\u73fe\u4e86\uff0c\u800c\u4e14\u901a\u8a71\u662f\u975e\u5e38\u7a69\u5b9a\u7684\uff0c\u4ed6\u7528\u4e86\u4ec0\u9ebc\u65b9\u5f0f\uff1f
\u9019\u88e1\u4e0d\u6703\u8ac7\u592a\u591a\uff0c\u4f46\u662f\u9019\u500b\u8cc7\u8a0a\u7684\u95dc\u9375\u5b57\u662f\uff1a\u96fb\u8def\u4ea4\u63db\uff08circuit switching\uff09 v.s. \u5c01\u5305\u4ea4\u63db\uff08packet switching\uff09
\u800c\u4e4b\u6240\u4ee5\u7db2\u8def\u6700\u7d42\u9078\u64c7\u5c01\u5305\u4ea4\u63db\uff0c\u662f\u56e0\u70ba\u6210\u672c\u548c\u6548\u76ca\u7684\u6b0a\u8861\u8003\u91cf\u3002
\u82e5\u6709\u8208\u8da3\u53ef\u4ee5\u5c55\u958b\u4f86\u770b\u624b\u6a5f\u901a\u8a71\u6703\u9700\u8981\u5efa\u7acb\u9023\u7dda\uff0c\u4e26\u5728\u9019\u6b21\u9023\u7dda\u4e2d\u4f54\u7528\u56fa\u5b9a\u983b\u5bec\uff0c\u7531\u65bc\u5176\u4ed6\u624b\u6a5f\u4e0d\u6703\u518d\u4f86\u6436\u9019\u983b\u5bec\uff0c\u6240\u4ee5\u53ef\u4ee5\u78ba\u4fdd\u4ed6\u7684\u7a69\u5b9a\u3002
\u624b\u6a5f\u63a1\u7528\u7684\u5c31\u662f\u7dda\u8def\u4ea4\u63db\uff0c\u5373\u4f7f\u6c92\u6709\u8a0a\u865f\u8981\u50b3\u905e\u4e5f\u6703\u4f54\u7528\u983b\u5bec\uff0c\u7576\u9700\u8981\u5927\u91cf\u8cc7\u8a0a\u50b3\u9001\u7684\u6642\u5019\u53c8\u53d7\u9650\u65bc\u4f54\u7528\u7684\u56fa\u5b9a\u983b\u5bec\uff0c\u786c\u9ad4\u4f7f\u7528\u7387\u6574\u9ad4\u8f03\u4f4e\u3002
\u76f8\u5c0d\u800c\u8a00\uff0c\u63a1\u7528\u5c01\u5305\u4ea4\u63db\u7684\u8def\u7531\u5668\u5728\u5de5\u4f5c\u6642\u53ea\u9700\u628a\u5f97\u5230\u7684\u5c01\u5305\u5f80\u5f8c\u9001\uff0c\u4e0d\u7528\u7dad\u6301\u9023\u7dda\u3002\u9664\u4e86\u53ef\u4ee5\u907f\u514d\u8def\u7531\u5668\u88ab\u7279\u5b9a\u9023\u7dda\u5361\u4f4d\u4e4b\u5916\uff0c\u4e5f\u80fd\u8b93\u8def\u7531\u5668\u5c08\u6ce8\u65bc\u8f49\u9001\u5c01\u5305\u800c\u975e\u7dad\u6301\u9023\u7dda\u3002
\u4e0a\u9762\u6bd4\u8f03\u7684\u662f\u884c\u52d5\u901a\u8a0a\u548c\u7bc0\u9ede\u7684\u901a\u8a0a\uff0c\u82e5\u53ea\u8003\u616e\u7bc0\u9ede\u7684\u901a\u8a0a\u5247\u6703\u628a\u5c01\u5305\u4ea4\u63db\u548c\u7dda\u8def\u4ea4\u63db\u5206\u5225\u7a31\u70ba Datagram subnet \u548c Virtual-circut subnet\uff0c\u5176\u6bd4\u8f03\u70ba\uff1a
issue Datagram virtual-circuit circuit setup Not needed required State information Routers do not hold state information about connections Each VC requires router table space per connection Routing Each packet is routed independently Route choosen when VC is set up; all packets follow it Effect of router failures None, except for packets lost during the crash All VCs that passed through the failed router are terminated Quality of services Difficult Easy if enough resources can be allocated in advance for each VC Congestion control Difficult Easy if enough resources can be allocated in advance for each VC Implement Internet Protocal, IP Asynchronous Transfer Mode, ATM\u5c01\u5305\u4ea4\u63db\u548c\u7dda\u8def\u4ea4\u63db\u7684\u6bd4\u8f03
\u5176\u5be6\u9084\u6709\u5f88\u591a\u8b70\u984c\u4f86\u512a\u5316\u4f60\u7684\u7db2\u8def\u901f\u5ea6\u751a\u81f3\u9650\u7e2e\u7db2\u8def\u5ef6\u9072\u6700\u5927\u503c\uff0c\u5305\u62ec\u6700\u4f73\u8def\u5f91\u641c\u5c0b\u3001\u6392\u968a\u7684\u7b56\u7565\u3001\u7de9\u885d\u7684\u7ba1\u7406\u7b49\u7b49\u3002
"},{"location":"feedback/designing-data-intensive-applications/distributed-env/#\u6642\u9418","title":"\u6642\u9418","text":"\u6642\u9418\u7684\u6e96\u78ba\u6027\u5c0d\u5206\u6563\u5f0f\u7cfb\u7d71\u91cd\u8981\u55ce\uff1f
\u5728\u8a0e\u8ad6\u9019\u4e4b\u524d\uff0c\u6211\u5011\u5148\u4f86\u8ac7\u8ac7\u4ec0\u9ebc\u662f\u300c\u6642\u9418\u300d\uff1f
"},{"location":"feedback/designing-data-intensive-applications/distributed-env/#\u5169\u7a2e\u6642\u9418","title":"\u5169\u7a2e\u6642\u9418","text":"\u7576\u6211\u5011\u5728\u8ac7\u8ad6\u6642\u9418\u7684\u6642\u5019\uff0c\u53ef\u80fd\u7684\u6642\u9418\u6709\u5169\u7a2e\u3002
\u7576\u65e5\u6642\u9418\u6703\u56de\u61c9\u7576\u4e0b\u7684\u6642\u9593\uff0c\u4f8b\u5982\u4e0b\u5348\u4e09\u9ede\u56db\u5341\u5206\u5341\u4e94\u79d2\u3002\u76f8\u5c0d\u800c\u8a00\uff0c\u908f\u8f2f\u6642\u9418\u7684\u503c\u4e26\u6c92\u6709\u771f\u6b63\u610f\u7fa9\uff0c\u5176\u50f9\u503c\u5728\u65bc\u5169\u500b\u503c\u9593\u7684\u5dee\u4ee3\u8868\u7684\u662f\u7cbe\u6e96\u7684\u6642\u9593\u5dee\uff0c\u4f8b\u5982\u7b2c\u4e00\u500b\u503c\u548c\u7b2c\u4e8c\u500b\u503c\u5dee\u4e94\u767e\u5948\u79d2\uff08\u6839\u64da\u8a2d\u5b9a\u5dee\u503c\u53ef\u80fd\u70ba 500 \u6216\u8005 0.5\uff09\u3002
\u908f\u8f2f\u6642\u9593\u6e96\u78ba\u6027\u6703\u53d7\u591a\u6838\u5fc3\u5f71\u97ff\uff0c\u6bcf\u500b CPU \u53ef\u80fd\u6709\u4e0d\u540c\u7684\u503c\uff0c\u4f46\u662f\u4f5c\u696d\u7cfb\u7d71\u6703\u76e1\u91cf\u8b93\u4f60\u7684\u57f7\u884c\u7dd2\u6bcf\u6b21\u5b58\u53d6\u90fd\u4f7f\u7528\u540c\u4e00\u500b CPU \u7684\u503c\u3002
"},{"location":"feedback/designing-data-intensive-applications/distributed-env/#\u76f8\u95dc\u7a0b\u5f0f\u78bc","title":"\u76f8\u95dc\u7a0b\u5f0f\u78bc","text":"\u4e0d\u540c\u7a0b\u5f0f\u78bc\u4e5f\u6703\u91dd\u5c0d\u9019\u5169\u7a2e\u6642\u9593\u63d0\u51fa\u4e0d\u540c API\u3002
\u5728\u8b1b\u5230\u7576\u65e5\u6642\u9418\u7684\u6e96\u78ba\u6027\u6642\uff0c\u5c31\u5fc5\u9808\u8ac7\u5230\u4ed6\u5982\u4f55\u6821\u6642\u7684\u3002Network Time Protocol\uff08NTP\uff09\u4fbf\u662f\u7528\u4f86\u6821\u6642\u7684\u53e4\u8001\u5354\u5b9a\u3002
\u6211\u5011\u6703\u5148\u8ac7\u6240\u8b02\u7684\u300c\u6642\u9593\u300d\u662f\u600e\u9ebc\u4f86\u7684\uff0c\u518d\u4f86\u8ac7\u8ac7\u600e\u9ebc\u6821\u6642\u3002
"},{"location":"feedback/designing-data-intensive-applications/distributed-env/#\u7576\u65e5\u6642\u9418\u662f\u600e\u9ebc\u4f86\u7684","title":"\u7576\u65e5\u6642\u9418\u662f\u600e\u9ebc\u4f86\u7684","text":"\u77f3\u82f1\u9707\u76ea\u5668\uff08Crystal Oscillator, CSO, XO\uff09\u662f\u7528\u4f86\u8a08\u7b97\u73fe\u5728\u6642\u9593\u7684\u96fb\u5b50\u5143\u4ef6\uff0c\u4ed6\u662f\u6709\u8aa4\u5dee\u7684\u3002\u6839\u64da Google \u8abf\u67e5\u5167\u90e8\u8cc7\u6599\u4e2d\u5fc3\uff0c\u5e73\u5747\u6bcf\u53f0\u6a5f\u5668\u6703\u6709 200 ppm \u7684\u8aa4\u5dee\uff0c\u4e5f\u5c31\u662f\u6bcf\u5929 17 \u79d2\u7684\u8aa4\u5dee\u3002
\u4f5c\u696d\u7cfb\u7d71\u900f\u904e\u548c CPU \u7684\u6e9d\u901a\u7372\u5f97\u5176\u8cc7\u8a0a\uff1a
# \u8a2d\u5b9a ah \u7684\u503c\u70ba 44, 0x2c\nmov ah 2ch\n# interupt \u81f3 OS\uff0833, 0x21\uff09\uff0cOS \u5f97\u77e5 ah \u7684\u503c\u70ba 44 \u4ee3\u8868\u8981\u53d6\u5f97\u6642\u9593\u8a0a\u606f\nint 21h\n
"},{"location":"feedback/designing-data-intensive-applications/distributed-env/#ntp-\u904b\u4f5c\u539f\u7406","title":"NTP \u904b\u4f5c\u539f\u7406","text":"NTP \u662f\u900f\u904e\u8a08\u7b97\u4f86\u56de\u7684\u6642\u9593\u5dee\u4f86\u5f97\u77e5\u7bc0\u9ede\u548c\u4e2d\u539f\u6a19\u6e96\u6642\u9593\u7684\u5dee\u7570\uff0c\u8981\u6ce8\u610f\u7684\u662f NTP \u5728\u6821\u6642\u7684\u6642\u5019\u662f\u4e00\u6b21\u52d5\u4e00\u9ede\u7136\u5f8c\u9010\u6f38\u9760\u8fd1\u5230\u6b63\u78ba\u6642\u9593\u3002
\u4f46\u662f\u6703\u6709\u4e9b\u554f\u984c\uff1a
\u9664\u4e86 NTP \u4e4b\u5916\uff0c\u9084\u6709\u54ea\u4e9b\u6821\u6642\u65b9\u5f0f\uff1a
\u9019\u4e9b\u7684\u6210\u672c\u90fd\u5f88\u9ad8\uff0c\u4e14\u9700\u8981\u5c08\u696d\u4eba\u54e1\u4f86\u7dad\u904b\u3002
"},{"location":"feedback/designing-data-intensive-applications/distributed-env/#\u7cbe\u6e96\u6642\u9593\u91cd\u8981\u55ce","title":"\u7cbe\u6e96\u6642\u9593\u91cd\u8981\u55ce\uff1f","text":"note: \u6211\u5011\u77e5\u9053\u4e86\u7bc0\u9ede\u6642\u9593\u662f\u4e0d\u6e96\u7684\uff0c\u4f46\u662f\u56de\u5230\u4e00\u958b\u59cb\uff0c\u7cbe\u6e96\u7684\u6642\u9593\u662f\u91cd\u8981\u7684\u55ce\uff1f
\u9664\u4e86\u5716\u4e0a\u770b\u5230\u7684\u554f\u984c\uff0c\u524d\u9762\u6211\u5011\u5728\u8b1b\u8655\u7406\u7af6\u8cfd\u72c0\u6cc1\u7684\u6642\u5019\u6709\u63d0\u5230 \u5feb\u7167\u9694\u96e2\uff0c\u4ed6\u662f\u5229\u7528\u81ea\u52d5\u589e\u52a0\u7684\u7248\u672c\u4f86\u9054\u6210\u4e00\u81f4\u6027\uff0c\u4f46\u5982\u679c\u662f\u5206\u6563\u5f0f\u8cc7\u6599\u5eab\uff0c\u4e0d\u540c\u7684\u7bc0\u9ede\u5c31\u9700\u8981\u4e00\u500b\u5927\u5bb6\u90fd\u6709\u300c\u5171\u8b58\u300d\u7684\u7248\u672c\u7cfb\u7d71\u3002
\u9019\u6642\u7cbe\u6e96\u7684\u6642\u9593\u5c31\u53ef\u4ee5\u88ab\u4f7f\u7528\u4e86\u3002
"},{"location":"feedback/designing-data-intensive-applications/distributed-env/#\u6642\u9593\u4fe1\u4efb\u5340\u9593","title":"\u6642\u9593\u4fe1\u4efb\u5340\u9593","text":"\u8981\u600e\u9ebc\u7372\u5f97\u7cbe\u6e96\u7684\u6642\u9593\uff1f\u5982\u679c\u662f\u900f\u904e\u7db2\u969b\u7db2\u8def\u50b3\u905e\u6642\u9593\uff0c\u8981\u7372\u5f97\u6700\u7cbe\u6e96\u7684\u6642\u9593\u78ba\u5be6\u6709\u5148\u5929\u4e0a\u7684\u96e3\u5ea6\uff0c\u4f46\u662f\u6211\u5011\u53ef\u4ee5\u5728\u63a7\u5236\u7684\u7db2\u8def\u72c0\u6cc1\u4e2d\uff0c\u7d66\u4e88\u4e00\u5b9a\u4fe1\u4efb\u7a0b\u5ea6\u7684\u6642\u9593\u5340\u9593\uff0c\u4f8b\u5982\uff1a
$ curl https://what-time-is-it\n{\n \"confidence\": 95.123,\n \"start\": \"10:00:00.000\",\n \"end\": \"10:00:00.100\"\n}\n
\u9019\u6a23\u7684\u65b9\u5f0f\u7570\u65bc\u5728\u7a0b\u5f0f\u8a9e\u8a00\u4e2d\u8981\u7372\u5f97\u6642\u9593\uff08\u4f8b\u5982 Date.now
\uff09\u90fd\u662f\u76f4\u63a5\u7d66\u4e88\u6642\u9593\u5b9a\u503c\u800c\u4e0d\u6703\u900f\u904e\u4fe1\u4efb\u5340\u9593\u7684\u65b9\u5f0f\u3002
Google Spanner \u5c31\u662f\u4e00\u7a2e\u8cc7\u6599\u53e2\u96c6\u5617\u8a66\u900f\u904e\u89e3\u6c7a\u6642\u9418\u554f\u984c\u4f86\u5f97\u5230\u9ad8\u4e00\u81f4\u6027\u4e14\u9ad8\u53ef\u7528\u6027\u3002
Info
\u53ef\u7121\u9650\u64f4\u5145\u4e26\u5177\u5099\u4e00\u81f4\u6027\u7684\u96f2\u7aef\u539f\u751f\u670d\u52d9\uff0c\u53ef\u7528\u6027\u9ad8\u9054 99.999%\u3002\uff08\\(\\dfrac{60*24*365}{100,000}=5.256\\)\uff0c\u4e5f\u5c31\u662f\u4fdd\u8b49\u6bcf\u5e74\u50c5\u6709\u4e94\u5206\u9418\u7684\u7121\u6cd5\u670d\u52d9\u6642\u9593\uff09
\u4e0b\u9762\u662f\u4e00\u4e9b Google Spanner \u7684\u767d\u76ae\u66f8\uff0c\u90fd\u4e0d\u96e3\u4f46\u662f\u6eff\u6709\u8da3\u7684\uff1a
\u7f3a\u9ede\u7576\u7136\u662f\u53ea\u80fd\u5728 Google \u96f2\u7aef\u5be6\u8e10\uff08\u9700\u8981\u597d\u7684\u8a2d\u5099\u52a0\u4e0a\u7dad\u904b\u4eba\u54e1\uff09\u3002
"},{"location":"feedback/designing-data-intensive-applications/distributed-env/#\u76e3\u63a7\u7cfb\u7d71","title":"\u76e3\u63a7\u7cfb\u7d71","text":"\u597d\u7684\u76e3\u63a7\u7cfb\u7d71\u8b93\u4f60\u5728\u6709\u72c0\u6cc1\u6642\u5373\u6642\u77e5\u9053\u73fe\u5728\u7bc0\u9ede\u7684\u6642\u9593\u72c0\u6cc1\uff0c\u4f46\u662f\u9019\u6771\u897f\u6bd4\u8f03\u5c11\u53bb\u95dc\u6ce8\u3002
\u88ab\u5ef6\u5b95\u4e86\u4ee3\u8868\u8acb\u6c42\u53ef\u80fd\u6703\u903e\u6642\uff0c\u4f46\u662f\u9019\u53c8\u5982\u4f55\uff1f\u61c9\u7528\u7a0b\u5f0f\u5982\u679c\u8003\u616e Timeout \u7684\u6a5f\u5236\u7b49\u7b49\uff0c\u9019\u4e0d\u5c31\u89e3\u6c7a\u4e86\uff1f
"},{"location":"feedback/designing-data-intensive-applications/distributed-env/#\u6703\u9020\u6210\u4ec0\u9ebc\u554f\u984c","title":"\u6703\u9020\u6210\u4ec0\u9ebc\u554f\u984c\uff1f","text":"server.on(\"request\", async (req) => {\n // \u9818\u8896\u624d\u6703\u6709\u9396\n const lock = await getLeaderLock();\n\n if (lock.isMine()) {\n // \u6709\u6642\u9650\u4ee5\u5229\u91cd\u9078\u9818\u8896\n await lock.renewIfNeeded();\n } else if (req.willModifiy()) {\n // \u6536\u5230\u5beb\u5165\u8acb\u6c42\u6642\u8f49\u9001\u7d66\u9818\u8896\n return transferToLeader(req);\n }\n\n return handler(req);\n});\n
\u4e0a\u8ff0\u7684\u7a0b\u5f0f\u78bc\u662f\u7528\u5728_\u55ae\u4e00\u9818\u8896_\u7684\u8cc7\u6599\u53e2\u96c6\uff0c\u7576_\u8ffd\u96a8\u8005_\u6536\u5230\u5beb\u5165\u8acb\u6c42\u6642\u6703\u8f49\u9001\u7d66\u9818\u8896\u3002\u800c\u5224\u5b9a\u662f\u5426\u70ba\u9818\u8896\u5247\u662f\u900f\u904e\u9396\uff0c\u5982\u679c\u8a72\u8cc7\u6599\u5eab\u53ef\u4ee5\u62ff\u5230\u9396\u5247\u4ee3\u8868\u4ed6\u70ba\u9818\u8896\uff0c\u4e26\u4e14\u70ba\u4e86\u8b93\u9818\u8896\u5931\u80fd\u6642\u53ef\u4ee5\u8f49\u79fb\u6b0a\u529b\uff0c\u9019\u500b\u9396\u662f\u6709\u6642\u9650\u7684\u3002
\u72c0\u6cc1\u4f86\u4e86\uff1a\u5982\u679c\u5728\u57f7\u884c handler
\u6642\uff0c\u57f7\u884c\u7dd2\u88ab\u5ef6\u5b95\u8d85\u904e\u6642\u9650\u4e86\uff0c\u6703\u767c\u751f\u4ec0\u9ebc\u4e8b\uff1f
\u9019\u500b\u9818\u8896\u4ecd\u7136\u8a8d\u70ba\u81ea\u5df1\u662f\u9818\u8896\uff0c\u540c\u6642\u8cc7\u6599\u53e2\u96c6\u53c8\u6709\u53e6\u4e00\u500b\u9818\u8896\uff0c\u9019\u5c31\u6703\u9020\u6210\u524d\u9762\u63d0\u7684_\u5fa9\u6b0a_\uff08split brain\uff09\u554f\u984c\u3002
\u7c21\u800c\u8a00\u4e4b\uff0c\u57f7\u884c\u7dd2\u7570\u5e38\u7684\u5ef6\u5b95\u53ef\u80fd\u6703\u8b93\u6240\u6709\u7684\u6aa2\u67e5\u6a5f\u5236\u90fd\u5931\u6548\u3002
"},{"location":"feedback/designing-data-intensive-applications/distributed-env/#\u53ef\u80fd\u6709\u54ea\u4e9b\u539f\u56e0","title":"\u53ef\u80fd\u6709\u54ea\u4e9b\u539f\u56e0","text":"\u524d\u9762\u63d0\u5230\u7684\u53ef\u80fd\u6703\u6709\u7684\u554f\u984c\uff0c\u6211\u5011\u53ef\u4ee5\u900f\u904e Fencing token \u9019\u500b\u6a5f\u5236\u4f86\u907f\u514d\uff0c\u4e0d\u904e\u9019\u88e1\u8981\u6ce8\u610f\u7684\u662f Client \u548c Storage \u90fd\u6703\u9700\u8981\u5b58\u53d6\u9019\u500b\u7ba1\u7406\u9396\u7684\u670d\u52d9\uff0c\u6703\u589e\u52a0\u6574\u9ad4\u67b6\u69cb\u7684\u8907\u96dc\u5ea6\u3002
"},{"location":"feedback/designing-data-intensive-applications/distributed-env/#\u7e3d\u7d50","title":"\u7e3d\u7d50","text":"\u5206\u6563\u5f0f\u7cfb\u7d71\u7684\u4e0d\u7a69\u5b9a\u8b93\u6211\u5011\u9762\u81e8\u4e00\u81f4\u6027\u548c\u53ef\u7528\u6027\u7684\u9078\u64c7\uff0c\u800c\u5176\u89e3\u6c7a\u8fa6\u6cd5\u6709\uff1a
\u600e\u9ebc\u5728 \u5206\u6563\u5f0f\u7cfb\u7d71 \u4e2d\u5efa\u7acb\u5bb9\u932f\u7684\u8cc7\u6599\u5eab\u53e2\u96c6\u3002
HackMD \u5831\u544a
"},{"location":"feedback/designing-data-intensive-applications/distributed-ft/#\u7c21\u4ecb","title":"\u7c21\u4ecb","text":"\u6211\u5011\u5f9e\u8655\u7406\u7af6\u8cfd\u72c0\u6cc1\u6642\u5c31\u63d0\u8d77\uff1a\u5206\u6563\u5f0f\u8cc7\u6599\u5eab\u6c92\u8fa6\u6cd5\u6709\u6548\u5bb9\u932f\u3002\u9019\u6b21\uff0c\u6211\u5011\u7d42\u65bc\u8981\u4f86\u8ac7\u8ac7\u5206\u6563\u5f0f\u8cc7\u6599\u5eab\u8981\u600e\u9ebc\u5bb9\u932f\u4e86\uff01\u6211\u5011\u5148\u4f86\u8ac7\u8ac7\u55ae\u53f0\u6a5f\u5668\u7684\u5bb9\u932f\u6a5f\u5236\uff0c\u518d\u4f86\u5e36\u51fa\u5206\u6563\u5f0f\u7cfb\u7d71\u7684\u5bb9\u932f\u6a5f\u5236\u3002
\u5c0d\u61c9\u7528\u7a0b\u5f0f\u958b\u767c\u4eba\u54e1\u4f86\u8aaa\uff0c\u4ed6\u53ef\u4ee5\u5f88\u7c21\u55ae\u7684\u5728\u7570\u52d5\u524d\u544a\u77e5\u8cc7\u6599\u5eab\u6211\u8981\u4f7f\u7528\u300c\u4ea4\u6613\u300d\u7684\u6a5f\u5236\uff0c\u4ee5\u6b64\u4f86\u6eff\u8db3\u8cc7\u6599\u7684\u4e00\u81f4\u6027\u548c\u5bb9\u932f\u6027\u3002\u4f46\u662f\u6211\u5011\u524d\u9762\u63d0\u4e86\u300c\u8907\u88fd\u5ef6\u9072\u300d\u5f88\u8f15\u6613\u5c31\u53ef\u4ee5\u7834\u58de\u9019\u4e00\u7cfb\u5217\u7684\u4fdd\u8b49\u3002\u540c\u6642\uff0c\u6211\u5011\u4e5f\u8981\u554f\u554f\u81ea\u5df1\uff0c\u5982\u4f55\u8b93\u958b\u767c\u4eba\u54e1\u4f7f\u7528\u548c\u300c\u4ea4\u6613\u300d\u76f8\u4f3c\u7684\u65b9\u5f0f\u4f86\u8b93\u958b\u767c\u4eba\u54e1\u4e0d\u9700\u8981\u5728\u5beb\u7a0b\u5f0f\u7684\u6642\u5019\u9084\u8981\u601d\u8003\u5206\u6563\u5f0f\u53e2\u96c6\u6703\u6709\u7684\u908a\u969b\u72c0\u6cc1\uff1f
\u90a3\u5206\u6563\u5f0f\u8cc7\u6599\u5eab\u53c8\u8a72\u505a\u4ec0\u9ebc\uff1f\u5728\u958b\u59cb\u524d\uff0c\u6211\u5011\u5148\u524d\u60c5\u63d0\u8981\u4e00\u4e0b\u3002
"},{"location":"feedback/designing-data-intensive-applications/distributed-ft/#\u74b0\u5883","title":"\u74b0\u5883","text":"\u4e0a\u6b21\u63d0\u4e86\u5206\u6563\u5f0f\u74b0\u5883\u7684\u56f0\u5883\uff0c\u544a\u8a34\u6211\u5011\u54ea\u4e9b\u8def\u662f\u4e0d\u80fd\u8d70\u7684\u3002
\u57f7\u884c\u7dd2\u5ef6\u5b95
\u5373\u4f7f\u55ae\u53f0\u6a5f\u5668\u4e5f\u6703\u53d7\u5230\u57f7\u884c\u5e8f\u7684\u5ef6\u5b95\uff0c\u4f46\u662f\u55ae\u53f0\u6a5f\u5668\u7684\u5ef6\u5b95\u4ee3\u8868\u6240\u6709\u7a0b\u5e8f\u90fd\u6703\u88ab\u5ef6\u5b95\uff0c\u6240\u4ee5\u4ed6\u4e26\u4e0d\u6703\u8a8d\u77e5\u5230\u81ea\u5df1\u88ab\u5ef6\u5b95\u4e86\uff08\u9664\u975e\u6aa2\u67e5\u6642\u9593\uff09\u3002
\u4f46\u662f\u5230\u4e86\u5206\u6563\u5f0f\u7cfb\u7d71\u6642\uff0c\u57f7\u884c\u5e8f\u7684\u5ef6\u5b95\u5c31\u4ee3\u8868\u6709\u4e00\u7bc0\u9ede\u7a81\u7136\u7121\u6cd5\u904b\u4f5c\uff0c\u9019\u6642\u5176\u4ed6\u7bc0\u9ede\u4ecd\u80fd\u6b63\u5e38\u904b\u4f5c\u3002\u9694\u4e86\u4e09\u5341\u79d2\u4e4b\u5f8c\uff0c\u8a72\u7bc0\u9ede\u6062\u5fa9\u6b63\u5e38\u4e86\uff0c\u9019\u6642\u5c31\u53ef\u80fd\u9020\u6210\u4e0d\u540c\u7bc0\u9ede\u7684\u932f\u8aa4\u8a8d\u77e5\uff0c\u4f8b\u5982\u8907\u6b0a\uff08split brain\uff09\u3002
"},{"location":"feedback/designing-data-intensive-applications/distributed-ft/#\u66ab\u6642\u7684\u932f\u8aa4\u72c0\u614b\u6703\u6210\u70ba\u6c38\u4e45","title":"\u66ab\u6642\u7684\u932f\u8aa4\u72c0\u614b\u6703\u6210\u70ba\u6c38\u4e45","text":"\u6211\u5011\u6709\u63d0\u5230\u5f88\u591a NoSQL \u5ba3\u7a31\u6700\u7d42\u4e00\u81f4\u6027\u662f\u5fc5\u7136\u7684\uff0c\u7136\u800c\u6700\u7d42\u4e00\u81f4\u6027\u96d6\u7136\u53ef\u4ee5\u8b93\u72c0\u614b\u9054\u5230\u6700\u7d42\u7684\u4e00\u81f4\u6027\uff0c\u4f46\u662f\u7576\u4f60\u5f9e\uff08\u66ab\u6642\u7684\uff09\u932f\u8aa4\u72c0\u614b\u4f5c\u51fa\u4efb\u4f55\u5224\u65b7\u4e26\u57f7\u884c\u7570\u52d5\u6642\uff0c\u76f8\u5c0d\u61c9\u7684\u932f\u8aa4\u7570\u52d5\u5c31\u6210\u70ba\u300c\u6b63\u78ba\u7684\u300d\u7570\u52d5\uff0c\u4e26\u6c38\u4e45\u7684\u5f71\u97ff\u8cc7\u6599\u5eab\u7684\u72c0\u614b\u3002
\u4f8b\u5982\u5e33\u865f\u8a3b\u518a\u6642\uff0c\u6aa2\u67e5\u5e33\u865f\u662f\u5426\u8a3b\u518a\u904e\uff1a\u56e0\u70ba\u61c9\u7528\u7a0b\u5f0f\u5f9e\u8cc7\u6599\u5eab\u5f97\u5230\u7684\u8cc7\u8a0a\u662f\u5e33\u865f\u6c92\u88ab\u8a3b\u518a\u904e\uff0c\u6240\u4ee5\u5141\u8a31\u8a3b\u518a\uff0c\u9019\u6642\u5c31\u6703\u8b93\u9019\u7a2e\u66ab\u6642\u7684\u932f\u8aa4\u72c0\u614b\u6210\u70ba\u6c38\u4e45\u7684\u932f\u8aa4\u72c0\u614b\u3002
\u56e0\u7232\u9019\u7570\u65bc\u4e00\u822c\u7684\u958b\u767c\u74b0\u5883\uff08\u901a\u5e38\u6211\u5011\u5b58\u53d6\u7a0b\u5f0f\u78bc\u4e2d\u7684\u8b8a\u6578\u6642\uff0c\u90fd\u671f\u671b\u5f97\u5230\u7684\u503c\u662f\u6700\u65b0\u7684\u72c0\u614b\uff09\uff0c\u6240\u4ee5\u9019\u6703\u589e\u52a0\u61c9\u7528\u7a0b\u5f0f\u958b\u767c\u7684\u8ca0\u64d4\uff0c\u6bcf\u6b64\u8a2d\u8a08\u6642\u90fd\u8981\u4ed4\u7d30\u8a2d\u60f3\u5404\u7a2e\u72c0\u6cc1\u3002\u800c\u4e14\u9019\u7a2e\u6771\u897f\u5f88\u96e3\u5f97\u5230\u4fdd\u8b49\uff1a\u6211\u9019\u6a23\u505a\u5c31\u4e00\u5b9a\u6c92\u932f\u3002
"},{"location":"feedback/designing-data-intensive-applications/distributed-ft/#\u4e00\u81f4\u6027\u548c\u6548\u80fd\u7684\u6b0a\u8861","title":"\u4e00\u81f4\u6027\u548c\u6548\u80fd\u7684\u6b0a\u8861","text":"\u7576\u6211\u5011\u8b93\u5206\u6563\u5f0f\u8cc7\u6599\u5eab\u64c1\u6709\u9ad8\u4e00\u81f4\u6027\uff0c\u5c31\u6703\u72a7\u7272\u9ad8\u53ef\u7528\u6027\u548c\u9ad8\u6548\u80fd\uff0c\u6240\u4ee5\u5728\u958b\u59cb\u8b1b\u5206\u6563\u5f0f\u7684\u5bb9\u932f\u7cfb\u7d71\u524d\uff0c\u9700\u8981\u5148\u6709\u500b\u8a8d\u77e5\uff1a \u6211\u4e0d\u4e00\u5b9a\u9700\u8981\u9019\u4e9b\u6771\u897f \u3002
\u5728\u884d\u751f\u8cc7\u6599\u7684\u7cfb\u5217\u4e2d\uff08\u672c\u7cfb\u5217\u53eb\u505a\u5206\u6563\u5f0f\u7cfb\u7d71\uff09\uff0c\u6211\u5011\u6703\u63d0\u4e00\u500b\u8cc7\u6599\u5eab\u53e2\u96c6\u7684\u67b6\u69cb\uff0c\u9019\u500b\u67b6\u69cb\u5c31\u662f\u8a66\u8457\u9b06\u5f1b\u9019\u500b\u6b0a\u8861\uff1a\u540c\u6642\u64c1\u6709\u9ad8\u4e00\u81f4\u6027\u548c\u9ad8\u53ef\u7528\u6027\u3002
"},{"location":"feedback/designing-data-intensive-applications/distributed-ft/#\u4ec0\u9ebc\u662f\u4e00\u81f4\u6027","title":"\u4ec0\u9ebc\u662f\u4e00\u81f4\u6027\uff1f","text":"\u6700\u5f8c\uff0c\u6211\u5011\u91cd\u65b0\u78ba\u8a8d\u4e00\u4e0b\u540d\u8a5e\u7684\u5b9a\u7fa9\u3002
\u9019\u7ae0\u6703\u8ac7\u4e3b\u8981\u4e09\u4ef6\u4e8b\uff0c \u7dda\u6027\u7cfb\u7d71 \u3001 \u56e0\u679c\u95dc\u4fc2 \u548c \u5171\u8b58 \u3002
"},{"location":"feedback/designing-data-intensive-applications/distributed-ft/#\u7dda\u6027\u7cfb\u7d71","title":"\u7dda\u6027\u7cfb\u7d71","text":"\u8655\u7406\u6a5f\u5236\u5176\u5be6\u5c31\u662f\u8b93\u53e2\u96c6\u57f7\u884c\u5f97\u50cf\u662f\u7dda\u6027\u7cfb\u7d71\uff0c\u800c\u5148\u524d\u7684\u55ae\u4e00\u9818\u8896\u8907\u88fd\u65b9\u5f0f\u5176\u5be6\u5c31\u5f88\u50cf\u9019\u500b\u6771\u897f\u3002
\u554f\u984c\u662f\uff0c\u55ae\u4e00\u9818\u8896\u7684\u9818\u8896\u5f9e\u4f55\u800c\u4f86\uff1f\u5982\u679c\u9818\u8896\u662f\u5f9e\u7ba1\u7406\u8005\uff08\u4eba\u985e\uff09\u6c7a\u5b9a\u7684\u8a71\u5c31\u4ee3\u8868\u9700\u8981 24 \u5c0f\u6642\u8f2a\u73ed\u4f86\u76e3\u63a7\u9019\u500b\u9818\u8896\u7684\u5065\u5eb7\u72c0\u614b\uff0c\u7136\u800c\u6211\u5011\u53ef\u80fd\u50c5\u80fd\u900f\u904e\u7db2\u8def\u7684\u76e3\u63a7\u7cfb\u7d71\u53bb\u6aa2\u67e5\uff0c\u56e0\u70ba\u57fa\u65bc\u7db2\u8def\u9019\u76e3\u63a7\u7cfb\u7d71\u5f88\u53ef\u80fd\u662f\u4e0d\u7a69\u5b9a\u7684\u3002\u5982\u679c\u6211\u5011\u8981\u81ea\u52d5\u5316\uff0c\u90a3\u5c31\u4e00\u6a23\u9700\u8981\u5171\u8b58\u6f14\u7b97\u6cd5\u3002
\u4ed6\u6709\u4e9b\u53ef\u80fd\u7684\u540d\u8a5e\uff0c\u4f46\u4e3b\u8981\u9084\u662f\u8981\u770b\u6587\u7ae0\u7684\u524d\u5f8c\u6587\uff1a
\u6eff\u8db3\u9d3f\u820d\u7406\u8ad6\u4e26\u4e0d\u4ee3\u8868\u7b26\u5408\u7dda\u6027\u7cfb\u7d71\uff0c\u4ed6\u4e0d\u80fd\u4fdd\u8b49\u53e2\u96c6\u7684\u72c0\u614b\u4e00\u81f4\uff0c\u5c31\u7b97\u4f60\u6eff\u8db3\u6700\u597d\u7684\u72c0\u6cc1\uff1a\u4e09\u53f0\u90fd\u7570\u52d5\u6210\u529f\uff0c\u4f60\u4ecd\u7136\u6703\u767c\u751f\u72c0\u614b\u932f\u8aa4\u7684\u554f\u984c\uff0c\u5982\u5716\u4e0a\u6240\u793a\u3002
"},{"location":"feedback/designing-data-intensive-applications/distributed-ft/#\u8a0e\u8ad6\u7dda\u6027\u7cfb\u7d71","title":"\u8a0e\u8ad6\u7dda\u6027\u7cfb\u7d71","text":"\u7dda\u6027\u7cfb\u7d71\u662f\u9ad8\u6210\u672c\u7684\u800c\u4e14\u5f88\u53ef\u80fd\u662f\u4e0d\u80fd\u5bb9\u932f\u7684\uff08\u60f3\u60f3\u55ae\u4e00\u9818\u8896\uff0c\u7576\u9818\u8896\u5931\u80fd\u6642\u5f88\u591a\u4e8b\u90fd\u53ef\u80fd\u51fa\u932f\uff09\uff0c\u4f46\u662f\u7dda\u6027\u7cfb\u7d71\u537b\u53ef\u4ee5\u5f88\u7c21\u55ae\u7684\u5e6b\u52a9\u6211\u5011\u7406\u89e3\u5171\u8b58\u6f14\u7b97\u6cd5\u8981\u505a\u7684\u4e8b\u3002
"},{"location":"feedback/designing-data-intensive-applications/distributed-ft/#\u56e0\u679c\u95dc\u4fc2","title":"\u56e0\u679c\u95dc\u4fc2","text":"\u56e0\u679c\u95dc\u4fc2\u4e0d\u662f\u7dda\u6027\u7cfb\u7d71\uff0c\u4f46\u662f\u4ed6\u548c\u7dda\u6027\u7cfb\u7d71\u5dee\u5728\u54ea\uff1f\u5728\u56e0\u679c\u95dc\u4fc2\u7684\u7cfb\u7d71\u4e2d\uff0c\u6211\u5011\u4e0d\u6703\u8aaa \u7570\u52d5 A \u65e9\u65bc \u7570\u52d5 B\uff0c\u800c\u662f\u8aaa \u7570\u52d5 B \u4f9d\u8cf4\u65bc \u7570\u52d5 A\u3002\u9019\u6a23\u7684\u95dc\u4fc2\u7570\u65bc\u7dda\u6027\u7cfb\u7d71\u3002\u6211\u5011\u4f86\u770b\u770b\u4ee5\u4e0b\u4f8b\u5b50\uff1a
\u5728\u55ae\u53f0\u8cc7\u6599\u5eab\u4e2d\u6709\u53ef\u80fd\u767c\u751f\u5716\u4e0a\u53f3\u908a\u7684\u4e26\u884c\u7570\u52d5\u8acb\u6c42\u7684\u6a21\u5f0f\uff0c\u9019\u6642\u5c31\u6703\u51fa\u73fe\u72c0\u6cc1\u3002\u6211\u5011\u4e4b\u524d\u63d0\u8aaa\u900f\u904e\u5feb\u7167\u9694\u96e2\uff0c\u8ce6\u4e88\u6bcf\u500b\u8acb\u6c42\u7576\u4e0b\u7684\u7248\u672c\uff0c\u8b93\u4ed6\u53ea\u5141\u8a31\u53d6\u5f97\u7576\u4e0b\u7248\u672c\u7684\u8cc7\u8a0a\u3002\u800c\u9019\u4e2d\u9593\u7684\u8ce6\u4e88\u9806\u5e8f\u5c31\u662f\u5e6b\u52a9\u6211\u5011\u5f97\u5230\u56e0\u679c\u95dc\u4fc2\u3002
\u76f8\u5c0d\u800c\u8a00\uff0c\u7dda\u6027\u7cfb\u7d71\u4e2d\u53f3\u4e0a\u65b9\u7684 Read A
\u5c31\u6703\u51fa\u73fe\u5728\u4e0b\u9762\u7684\u8acb\u6c42\u4e4b\u524d\u3002\u4e5f\u5c31\u662f\u56e0\u679c\u95dc\u4fc2\u4e26\u4e0d\u6703\u963b\u6b62\u4e26\u884c\u7684\u8acb\u6c42\uff0c\u4f46\u662f\u4ed6\u6703\u5e6b\u52a9\u6211\u5011\u91d0\u6e05\u8acb\u6c42\u548c\u8acb\u6c42\u4e4b\u9593\u7684\u95dc\u4fc2\u4e5f\u56e0\u6b64\u56e0\u679c\u95dc\u4fc2\u4e26\u4e0d\u5f37\u65bc\u7dda\u6027\u95dc\u4fc2\u3002
\u56e0\u679c\u95dc\u4fc2\u6703\u8ce6\u4e88\u5168\u57df\u9806\u5e8f\u55ce\uff1f\u56e0\u679c\u95dc\u4fc2\u4e26\u4e0d\u662f\u5168\u57df\u9806\u5e8f\uff0c\u4ed6\u53ef\u80fd\u5728\u5169\u500b\u7bc0\u9ede\u9593\u5f97\u5230\u4e00\u500b\u4e00\u6a23\u7684\u7248\u672c\uff0c\u4f8b\u5982 \u7bc0\u9ede A \u5f97\u5230\u7248\u672c 123\uff0c\u7bc0\u9ede B \u4e5f\u5f97\u5230\u7248\u672c 123\u3002
\u4f46\u662f\u9019\u4e26\u4e0d\u6703\u9020\u6210\u554f\u984c\uff0c\u56e0\u70ba\u53ea\u6709\u76f8\u4f9d\u7684\u8acb\u6c42\u624d\u6709\u8ce6\u4e88\u9806\u5e8f\u7684\u5fc5\u8981\u3002\u82e5\u5169\u500b\u8acb\u6c42\u6c92\u6709\u95dc\u4fc2\uff0c\u90a3\u9ebc\u7d66\u4e88\u4ed6\u5011\u76f8\u540c\u7684\u6578\u5b57\u4e5f\u6c92\u4ec0\u9ebc\u95dc\u4fc2\u3002\u60f3\u60f3\u73fe\u5728\u5357\u6975\u6b63\u6709\u4e00\u9663\u98a8\u5439\u8d77\uff0c\u6211\u5011\u4e0d\u6703\u8aaa\u6211\u5148\u52d5\u5357\u6975\u7684\u98a8\u624d\u52d5\u7684\uff0c\u56e0\u70ba\u9019\u6bd4\u8f03\u6c92\u6709\u610f\u7fa9\u3002
"},{"location":"feedback/designing-data-intensive-applications/distributed-ft/#\u53ef\u4ee5\u5be6\u4f5c\u55ce","title":"\u53ef\u4ee5\u5be6\u4f5c\u55ce","text":"\u7576\u8981\u7570\u52d5\u67d0\u500b\u503c\u6642\uff0c\u6211\u5011\u9700\u8981\u7d00\u9304\uff1a\u662f\u5426\u9019\u500b\u65b0\u7684\u7570\u52d5\u4f86\u81ea\u65bc\u5148\u524d\u7684\u72c0\u614b\u3002\u6240\u4ee5\u6211\u5011\u9700\u8981\u4e00\u500b\u985e\u4f3c \u7248\u672c\u5411\u91cf \u7684\u6771\u897f\u3002\u7576\u8981\u505a\u7570\u52d5\u6642\uff0c\u61c9\u7528\u7a0b\u5f0f\u9700\u8981\u50b3\u7d66\u8cc7\u6599\u5eab\u7576\u521d\u4ed6\u5728\u8b80\u53d6\u6642\u7684\u7248\u672c\uff0c\u8cc7\u6599\u5eab\u5c31\u53ef\u4ee5\u900f\u904e\u7248\u672c\u78ba\u5b9a\u9019\u500b\u5148\u524d\u8b80\u53d6\u7684\u8cc7\u6599\u662f\u5426\u5df2\u7d93\u904e\u6642\uff08stale\uff09\u3002\u8209\u4f8b\u4f86\u8aaa\uff0c\u8cc7\u6599\u5eab\u64c1\u6709\u7248\u672c\u4e00\u7684\u72c0\u614b\uff0c\u7576\u88ab\u8acb\u6c42\u8981\u7570\u52d5\u5230\u7248\u672c\u4e09\u6642\uff0c\u9700\u8981\u7b49\u5f85\u7248\u672c\u4e8c\u7684\u7570\u52d5\u88ab\u57f7\u884c\uff08\u985e\u4f3c\u65bc\u5e8f\u5217\u5316\u5feb\u7167\u9694\u96e2\u4e2d\uff0c\u8cc7\u6599\u5eab\u900f\u904e\u4e86\u89e3\u67d0\u4e9b\u7570\u52d5\u8acb\u6c42\u4e4b\u9593\u7684\u56e0\u679c\u95dc\u4fc2\u4f86\u4e26\u514d\u767c\u751f\u8cc7\u6599\u4e0d\u4e00\u81f4\uff09\u3002
\u76ee\u524d\uff0c\u8ce6\u4e88\u9806\u5e8f\u662f\u7dda\u6027\u7cfb\u7d71\u4e4b\u5916\u6700\u5f37\u7684\u4e00\u81f4\u6027\uff0c\u4e26\u4e14\u53ef\u4ee5\u7dad\u6301\u6548\u80fd\u548c\u53ef\u7528\u6027\u3002\u4f46\u4ecd\u662f\u958b\u653e\u7814\u7a76\uff0c\u4e26\u672a\u6295\u5165\u7dda\u4e0a\u74b0\u5883\u4e14\u6709\u4e9b\u554f\u984c\u9700\u8981\u8655\u7406\uff08\u4f8b\u5982\u82e5\u8981\u6c42\u6bcf\u500b\u8cc7\u6599\u90fd\u7d00\u9304\u56e0\u679c\u95dc\u4fc2\uff0c\u9019\u500b\u91cf\u6703\u5f88\u5927\u800c\u4e14\u4e0d\u7b26\u5408 OLTP \u7684\u6a21\u5f0f\uff1a\u5927\u91cf\u8b80\u53d6\u5c0f\u91cf\u7570\u52d5\uff09\uff1a
\u4e00\u4e9b\u8cc7\u6599\u5eab\u5617\u8a66\u5728\u6eff\u8db3\u56e0\u679c\u95dc\u4fc2\u6642\uff0c\u7d66\u4e88\u6548\u80fd\u548c\u53ef\u7528\u6027
\u6211\u5011\u770b\u5230\u900f\u904e\u7d00\u9304\u5927\u91cf\u7684\u7248\u672c\u4f86\u4fdd\u6301\u56e0\u679c\u95dc\u4fc2\uff0c\u4f46\u662f\u5be6\u969b\u61c9\u7528\u7a0b\u5f0f\u57fa\u672c\u4e0a\u90fd\u662f\u62c9\u53d6\u5f88\u591a\u8cc7\u6599\u800c\u7570\u52d5\u4e00\u90e8\u4efd\u8cc7\u6599\uff0c\u9019\u6a23\u7248\u672c\u7684\u8cc7\u8a0a\u6703\u5f88\u9f90\u5927\u800c\u5931\u6e96\u3002
\u4e5f\u8a31\u6211\u5011\u53ef\u4ee5\u66ff\u6bcf\u4e00\u500b\u7570\u52d5\u90fd\u52a0\u4e0a\u7248\u672c\uff08\u4e5f\u5c31\u662f\u5168\u57df\u7684\u9806\u5e8f\uff09\uff0c\u53ea\u8981\u6bcf\u500b\u53e2\u96c6\u5167\u7684\u8cc7\u6599\u5eab\u9075\u5faa\u8457\u9019\u500b\u7248\u672c\u53bb\u57f7\u884c\uff0c\u5c31\u80fd\u78ba\u4fdd\u4ed6\u7684\u56e0\u679c\u95dc\u4fc2\u3002\u9019\u5c31\u597d\u50cf\u55ae\u4e00\u9818\u8896\u7684\u8cc7\u6599\u53e2\u96c6\u90fd\u6703\u9075\u5b88\u9818\u8896\u7684\u7570\u52d5\u9806\u5e8f\uff0c\u6211\u5011\u73fe\u5728\u628a\u9019\u500b\u6982\u5ff5\u5957\u7528\u5728\u591a\u9818\u8896/\u7121\u9818\u8896\u7684\u53e2\u96c6\u4e0a\u3002
"},{"location":"feedback/designing-data-intensive-applications/distributed-ft/#\u6709\u54ea\u4e9b\u932f\u8aa4\u7684\u65b9\u5f0f","title":"\u6709\u54ea\u4e9b\u932f\u8aa4\u7684\u65b9\u5f0f","text":"\u9019\u4e9b\u90fd\u4e0d\u662f\u5168\u57df\u7684\u9806\u5e8f\u3002
"},{"location":"feedback/designing-data-intensive-applications/distributed-ft/#lamport-\u6642\u9593\u6233\u8a18","title":"Lamport \u6642\u9593\u6233\u8a18","text":"Lamport \u5728\u65e9\u671f\u660e\u78ba\u8a02\u7acb\u4e86\u300c\u56e0\u679c\u95dc\u4fc2\u300d\u548c\u300c\u5168\u57df\u9806\u5e8f\u300d\u5728\u5206\u6563\u5f0f\u7cfb\u7d71\u7684\u91cd\u8981\u6027\u3002\u4ed6\u65bc 1978 \u5e74\u7684\u8ad6\u6587\u662f\u76ee\u524d\u5206\u6563\u5f0f\u7cfb\u7d71\u76f8\u95dc\u8ad6\u6587\u4e2d\u6700\u591a\u5f15\u7528\u6b21\u6578\u7684\u8ad6\u6587\u4e4b\u4e00\u3002
\u4e0d\u904e\u9019\u500b\u65b9\u5f0f\u5728\u5efa\u7acb\u4f7f\u7528\u8005\u5e33\u865f\u9019\u500b\u5834\u666f\u4e26\u4e0d\u600e\u9ebc\u9069\u7528\uff08\u4e5f\u5c31\u662f\u8aaa\u4ed6\u4e26\u4e0d\u662f\u5168\u57df\u9806\u5e8f\uff09\u3002
Lamport \u6642\u9593\u6233\u8a18\uff08\u5e8f\u5217\u5316\u6642\u9593\u6233\u8a18\uff09\u904b\u4f5c\u539f\u7406\u662f\u6bcf\u500b\u7bc0\u9ede\u548c\u6bcf\u500b\u8acb\u6c42\u8005\u505a\u4efb\u4f55\u8acb\u6c42\u6642\u90fd\u6703\u651c\u5e36\u6700\u5927\u7684\u8a08\u6578\uff0c\u7576\u7bc0\u9ede\u9047\u5230\u6bd4\u81ea\u5df1\u7684\u8a08\u6578\u9084\u9ad8\u7684\u503c\u6642\uff0c\u5247\u66f4\u65b0\u81ea\u5df1\u7684\u8a08\u6578\uff0c\u4ee5\u6b64\u4f86\u78ba\u4fdd\u5168\u57df\u7684\u9806\u5e8f\u3002
\u4f46\u662f\u5982\u679c\u5169\u500b\u4e26\u884c\u7684\u8acb\u6c42\u5206\u5225\u5728\u4e0d\u540c\u7bc0\u9ede\u505a\u4f7f\u7528\u8005\u7684\u8a3b\u518a\uff08\u5c31\u6703\u50cf c=6
\u6642\u90a3\u500b\u6a23\u5b50\uff09\uff0c\u5404\u7bc0\u9ede\u4e0d\u77e5\u9053\u5c0d\u65b9\u76ee\u524d\u6b63\u5728\u8655\u7406\u4f7f\u7528\u8005\u7684\u8a3b\u518a\uff0c\u6240\u4ee5\u9019\u500b\u5168\u57df\u9806\u5e8f\u4e26\u6c92\u8fa6\u6cd5\u5e6b\u52a9\u6211\u5011\u907f\u514d\u8a3b\u518a\u5169\u500b\u91cd\u8907\u7684\u4f7f\u7528\u8005\u3002
\u8981\u8b93 \u5e8f\u5217\u5316\u6642\u9593\u6233\u8a18 \u6210\u529f\u907f\u514d\u91cd\u8907\uff0c\u5c31\u9700\u8981\u5728\u7bc0\u9ede\u8655\u7406\u7570\u52d5\u8acb\u6c42\u6642\u53bb\u548c\u5176\u4ed6\u7bc0\u9ede\u78ba\u8a8d\uff1a\u6211\u6b63\u8981\u57f7\u884c\u300c\u8a08\u6578\u70ba\u516d\u300d\u7684\u7570\u52d5\uff0c\u8acb\u4f60\u7684\u8a08\u6578\u52a0\u4e00\u3002\u7576\u5176\u4ed6\u7bc0\u9ede\u518d\u57f7\u884c\u76f8\u540c\u7684\u7570\u52d5\uff08\u4f8b\u5982\u8a3b\u518a\u540c\u4e00\u500b\u4f7f\u7528\u8005\u5e33\u865f\uff09\u6642\uff0c\u56e0\u70ba\u4ed6\u7684\u8a08\u6578\u662f\u4e03\uff0c\u800c\u4ed6\u53c8\u77e5\u9053\u8a08\u6578\u516d\u7684\u7570\u52d5\u6b63\u5728\u57f7\u884c\u76f8\u4f3c\u7684\u8acb\u6c42\uff0c\u65bc\u662f\u4ed6\u5c31\u62d2\u7d55\u57f7\u884c\u8a08\u6578\u4e03\u7684\u7570\u52d5\u3002
\u548c\u7248\u672c\u5411\u91cf\u7684\u5dee\u7570
\u5e8f\u5217\u5316\u6642\u9593\u6233\u8a18\uff08vector clock\uff09\u5bb9\u6613\u548c \u7248\u672c\u5411\u91cf \uff08version vector\uff09\u6df7\u6dc6\u3002
\u6211\u5011\u4e86\u89e3\u56e0\u679c\u95dc\u4fc2\u5728\u5206\u6563\u5f0f\u7cfb\u7d71\u7684\u91cd\u8981\uff0c\u4e5f\u63d0\u4e86\u4e00\u4e9b\u53ef\u4ee5\u5e6b\u52a9\u6211\u5011\u5f97\u5230\u56e0\u679c\u95dc\u4fc2\u7684\u65b9\u5f0f\u800c\u5168\u57df\u9806\u5e8f\u5ee3\u64ad\uff08total order broadcast\uff09\u5c31\u662f\u5176\u4e00\u3002
\u525b\u525b\u6211\u5011\u63d0\u5230\u7bc0\u9ede\u901a\u77e5\u5927\u5bb6\uff1a\u6211\u6b63\u8981\u57f7\u884c\u300c\u8a08\u6578\u70ba\u516d\u300d\u7684\u7570\u52d5\uff0c\u8acb\u4f60\u7684\u8a08\u6578\u52a0\u4e00\u3002\u9019\u500b\u505a\u6cd5\u5c31\u53eb\u5168\u57df\u9806\u5e8f\u5ee3\u64ad\u3002\u901a\u5e38\u90fd\u662f\u7b2c\u4e09\u65b9\u7ba1\u7406\u9019\u500b\u9806\u5e8f\uff0c\u4f8b\u5982 ZooKeeper\u3001etcd\u3002
ZooKeeper \u4e0d\u662f\u5728\u505a\u5171\u8b58\u6f14\u7b97\u6cd5\u55ce\uff1f
\u6709\u8ad6\u6587\u8b49\u660e\u5168\u57df\u9806\u5e8f\u5ee3\u64ad\u548c\u5171\u8b58\u6f14\u7b97\u6cd5\u662f\u4e00\u6a23\u7684\uff0c\u5f85\u6703\u6211\u5011\u63d0\u5171\u8b58\u6f14\u7b97\u6cd5\u7684\u6642\u5019\u6703\u518d\u56de\u5230\u9019\u4e3b\u984c\u3002
"},{"location":"feedback/designing-data-intensive-applications/distributed-ft/#\u63d0\u4f9b\u54ea\u4e9b\u4fdd\u8b49","title":"\u63d0\u4f9b\u54ea\u4e9b\u4fdd\u8b49","text":"\u5168\u57df\u9806\u5e8f\u5ee3\u64ad\u4fdd\u8b49\u5169\u4ef6\u4e8b\u60c5\uff1a
\u5206\u6563\u5f0f\u8cc7\u6599\u5eab\u5728\u505a\u8907\u88fd\u7684\u6642\u5019\uff0c\u82e5\u80fd\u4fdd\u6301\u76f8\u540c\u9806\u5e8f\u9032\u884c\u8907\u88fd\uff0c\u90a3\u8cc7\u6599\u5eab\u5c07\u64c1\u6709\u6700\u6b63\u78ba\u7684\u8cc7\u6599\uff0c\u6211\u5011\u53ef\u4ee5\u628a\u4ed6\u60f3\u50cf\u6210 append-only \u7684\u65e5\u8a8c\u3002\u4ed6\u4e5f\u80fd\u6eff\u8db3\u6211\u5011\u4e4b\u524d\u63d0\u904e\u5f88\u5f37\u7684\u4e00\u81f4\u6027\uff1a\u5e8f\u5217\u5316\u4e00\u81f4\u6027\uff0c\u56e0\u70ba\u7570\u52d5\u90fd\u88ab\u7167\u8457\u9806\u5e8f\u57f7\u884c\u4e86\u3002
\u9019\u807d\u8d77\u4f86\u5f88\u50cf\u55ae\u4e00\u9818\u8896\u5728\u505a\u7684\u4e8b\u60c5\uff0c\u4f46\u662f\u8b93\u55ae\u4e00\u9818\u8896\u4e0d\u88ab\u63a1\u7528\u7684\u539f\u56e0\u662f\u7576\u8acb\u6c42\u7684\u91cf\u8d85\u904e\u4e00\u53f0\u6a5f\u5668\u80fd\u8ca0\u8377\u7684\u6642\u5019\u8a72\u600e\u9ebc\u8fa6\uff1f\u7576\u9818\u8896\u5931\u80fd\u6642\u8a72\u600e\u9ebc\u8fa6\uff1f
"},{"location":"feedback/designing-data-intensive-applications/distributed-ft/#\u570d\u6b04\u9396","title":"\u570d\u6b04\u9396","text":"\u4ed6\u4e5f\u80fd\u7528\u4f86\u88ab\u5be6\u8e10\u65bc\u570d\u6b04\u9396\uff08fencing token\uff09\u4e2d\u7684\u905e\u589e\u7de8\u865f\u3002
"},{"location":"feedback/designing-data-intensive-applications/distributed-ft/#\u548c\u7dda\u6027\u7cfb\u7d71\u7684\u95dc\u4fc2","title":"\u548c\u7dda\u6027\u7cfb\u7d71\u7684\u95dc\u4fc2","text":"\u7dda\u6027\u7cfb\u7d71\u6bd4\u5168\u57df\u9806\u5e8f\u5ee3\u64ad\u66f4\u70ba\u56b4\u8b39\uff0c\u5168\u57df\u9806\u5e8f\u5ee3\u64ad\u78ba\u4fdd\u7570\u52d5\u57f7\u884c\u7684\u9806\u5e8f\uff0c\u4f46\u537b\u4e0d\u4fdd\u8b49\u7570\u52d5\u9001\u904e\u53bb\u7684\u9806\u5e8f\u3002\u9664\u6b64\u4e4b\u5916\uff0c\u7dda\u6027\u7cfb\u7d71\u8981\u6c42\u8b80\u53d6\u5230\u7684\u503c\u5c31\u662f\u6700\u65b0\u72c0\u614b\uff0c\u7136\u800c\u5168\u57df\u9806\u5e8f\u5ee3\u64ad\u901a\u5e38\u4e0d\u6703\u9650\u5236\u8b80\u53d6\u7684\u9806\u5e8f\u3002
\u4f46\u662f\u7dda\u6027\u7cfb\u7d71\u662f\u53ef\u4ee5\u5efa\u7acb\u5728\u5168\u57df\u9806\u5e8f\u5ee3\u64ad\u4e4b\u4e0a\u7684\u3002
\u4f46\u662f\u7dda\u6027\u7cfb\u7d71\u6bd4\u5168\u57df\u9806\u5e8f\u5ee3\u64ad\u66f4\u6613\u5be6\u4f5c\u51fa\u4f86\u3002
\u600e\u9ebc\u9054\u6210\uff1f
\u60f3\u50cf\u4e4b\u524d\u6211\u5011\u5728\u8a0e\u8ad6\u7af6\u8cfd\u72c0\u6cc1\u6642\u7684\u4f4f\u9662\u91ab\u751f\u7533\u8acb\u4f11\u5047\uff1a\u4f11\u5047\u7684\u908f\u8f2f\u662f\u5148\u53d6\u5f97\u76ee\u524d\u503c\u73ed\u4f4f\u9662\u91ab\u751f\u4eba\u6578\uff0c\u4e26\u65bc\u61c9\u7528\u7a0b\u5f0f\u4e2d\u6aa2\u67e5\u6578\u91cf\u662f\u5426\u5927\u65bc\u4e00\uff0c\u82e5\u5927\u65bc\u5247\u5141\u8a31\u4f11\u5047\uff0c\u53cd\u4e4b\u5247\u62d2\u7d55\u3002
\u540c\u4e00\u6642\u9593\u5169\u500b\u91ab\u751f\u8acb\u6c42\u4f11\u5047\uff0c\u5c31\u6703\u9020\u6210\u5169\u500b\u91ab\u5e2b\u90fd\u4f11\u5047\u6210\u529f\u3002
\u600e\u9ebc\u4f9d\u4e0a\u8ff0\u4f8b\u5b50\uff08\u60f3\u7c21\u55ae\u4e00\u9ede\u5c31\u662f\u8a3b\u518a\u5e33\u865f\u7684\u4f8b\u5b50\uff09\u5b8c\u6210\u5206\u6563\u5f0f\u7684\u4e00\u81f4\u6027\uff08\u7dda\u6027\u7cfb\u7d71\uff09\uff1f
id1
idn
id1
\u548c idn
\u9593\u6240\u6709\u8acb\u6c42\u90fd\u88ab\u57f7\u884c\uff08id(n-1)
\u5f88\u53ef\u80fd\u6703\u6bd4 idn
\u665a\u4f86\uff09idn
\uff0c\u4e26\u518d\u9644\u52a0\u81f3\u62bd\u8c61\u65e5\u8a8c\u4e2d\u82e5\u8981\u8b93\u8b80\u53d6\u7684\u8acb\u6c42\u9054\u6210\u7dda\u6027\u7cfb\u7d71\uff0c\u53ef\u4ee5\u6709\u5e7e\u7a2e\u505a\u6cd5\uff1a
\u53cd\u904e\u4f86\u8aaa\uff0c\u5168\u57df\u9806\u5e8f\u5ee3\u64ad\u4e5f\u53ef\u4ee5\u900f\u904e\u7dda\u6027\u7cfb\u7d71\u9054\u6210\uff0c\u4e0d\u904e\u9019\u88e1\u5c31\u4e0d\u8d05\u8ff0\u4e86\u3002
"},{"location":"feedback/designing-data-intensive-applications/distributed-ft/#\u56de\u9867\u4e00\u4e0b","title":"\u56de\u9867\u4e00\u4e0b","text":"\u6211\u5011\u518d\u56de\u982d\u6bd4\u8f03\u4e00\u4e0b \u5168\u57df\u9806\u5e8f\u5ee3\u64ad \u548c \u5e8f\u5217\u5316\u6642\u9593\u6233\u8a18\uff0c\u5168\u57df\u9806\u5e8f\u5ee3\u64ad\u4e0b\u7684\u7bc0\u9ede\u6703\u76e3\u807d\u9019\u500b\u5ee3\u64ad\uff0c\u4e26\u78ba\u4fdd\u7167\u8457\u9806\u5e8f\u57f7\u884c\u7570\u52d5\u3002\u5e8f\u5217\u5316\u6642\u9593\u6233\u8a18\u5c31\u662f\u8b93\u5404\u7bc0\u9ede\u5f97\u5230\u4e00\u500b\u5171\u6709\u7684\u5e8f\u5217\u5316\u6233\u8a18\uff0c\u4f46\u662f\u4e0d\u4fdd\u8b49\u4e26\u884c\u8acb\u6c42\u4e4b\u9593\u7684\u885d\u7a81\uff0c\u56e0\u70ba\u4e26\u884c\u7684\u8acb\u6c42\u4e26\u6c92\u6709\u76f8\u4f9d\u6027\u3002
\u524d\u9762\u6211\u5011\u6709\u63d0\u5168\u57df\u9806\u5e8f\u5ee3\u64ad\u5c31\u662f\u5728\u5be6\u8e10\u5171\u8b58\u6f14\u7b97\u6cd5\uff0c\u6211\u5011\u4e5f\u77e5\u9053\u5168\u57df\u9806\u5e8f\u5ee3\u64ad\u548c\u7dda\u6027\u7cfb\u7d71\u662f\u53ef\u4ee5\u76f8\u4e92\u5be6\u8e10\u51fa\u4f86\u7684\u3002\u4e5f\u5c31\u662f\u4e00\u500b\u5206\u6563\u5f0f\u7cfb\u7d71\u82e5\u80fd\u5be6\u8e10\u7dda\u6027\u7684 increment-and-get\uff08\u7528\u4f86\u905e\u589e\u300c\u9806\u5e8f\u300d\uff09\uff0c\u5c31\u80fd\u5be6\u8e10\u51fa\u5168\u57df\u9806\u5e8f\u5ee3\u64ad\u3002
\u6709\u8ad6\u6587\u5728\u8b1b\u9019\u4e09\u4ef6\u4e8b\uff1a\u5168\u57df\u9806\u5e8f\u5ee3\u64ad\u3001\u5206\u6563\u5f0f\u7cfb\u7d71\u4e0b\u7dda\u6027 increment-and-get\u3001\u5171\u8b58\u6f14\u7b97\u6cd5\uff0c\u90fd\u662f\u5728\u8655\u7406\u4e00\u6a23\u7684\u4e8b\uff0c\u5982\u679c\u6211\u5011\u6709\u4e00\u500b\u6f14\u7b97\u6cd5\u80fd\u89e3\u6c7a\u4efb\u4e00\u6a23\uff0c\u5c31\u80fd\u4e00\u540c\u89e3\u6c7a\u6240\u6709\u554f\u984c\u3002
"},{"location":"feedback/designing-data-intensive-applications/distributed-ft/#\u5171\u8b58\u6f14\u7b97\u6cd5","title":"\u5171\u8b58\u6f14\u7b97\u6cd5","text":"\u5728\u958b\u59cb\u8b1b\u5171\u8b58\u6f14\u7b97\u6cd5\u4e4b\u524d\uff0c\u6211\u5011\u82b1\u4e86\u5f88\u591a\u6642\u9593\u53bb\u91d0\u6e05\u5f88\u591a\u4e8b\u60c5\u7684\u95dc\u4fc2\uff08\u7dda\u6027\u7cfb\u7d71\u3001\u56e0\u679c\u95dc\u4fc2\u3001\u5168\u57df\u9806\u5e8f\u5ee3\u64ad\uff09\u548c\u7406\u89e3\u4e00\u4e9b\u80cc\u666f\u77e5\u8b58\uff08\u7db2\u8def\u3001\u6642\u9418\u3001\u8cc7\u6599\u5eab\u7b49\u7b49\uff09\u3002
\u9019\u4e5f\u662f\u70ba\u4ec0\u9ebc\u5171\u8b58\u6f14\u7b97\u6cd5\u9019\u9ebc\u96e3\u7684\u539f\u56e0\uff0c\u4e26\u4e0d\u662f\u56e0\u70ba\u4ed6\u7684\u5be6\u4f5c\u5f88\u56f0\u96e3\uff0c\u800c\u662f\u4ed6\u9700\u8981\u6709\u5f88\u591a\u80cc\u666f\u77e5\u8b58\u624d\u80fd\u8b93\u6211\u5011\u5c0d\u65bc\u4ed6\u8981\u8655\u7406\u7684\u6771\u897f\u6709\u6240\u6982\u5ff5\u3002
\u5171\u8b58\u6f14\u7b97\u6cd5\u7684\u6982\u5ff5\u5f88\u55ae\u7d14\uff1a\u8b93\u5404\u500b\u7bc0\u9ede\u540c\u610f\u67d0\u4e00\u500b\u7d50\u679c\u3002\u4f46\u662f\u82e5\u5c0d\u9019\u4e9b\u80cc\u666f\u77e5\u8b58\u4e0d\u4e86\u89e3\uff0c\u6703\u8b93\u4f60\u932f\u8aa4\u7684\u5be6\u4f5c\uff08coding\uff09\u9019\u4e9b\u6f14\u7b97\u6cd5\u3002
"},{"location":"feedback/designing-data-intensive-applications/distributed-ft/#\u61c9\u7528","title":"\u61c9\u7528","text":"\u5be6\u4f5c\u4e3b\u8981\u6709\u5169\u7a2e\uff0c2PC \u548c\u5171\u8b58\u6f14\u7b97\u6cd5\u3002
"},{"location":"feedback/designing-data-intensive-applications/distributed-ft/#2pc","title":"2PC","text":"2PC \u53ef\u4ee5\u8aaa\u662f\u4e00\u7a2e\u5171\u8b58\u6f14\u7b97\u6cd5\uff0c\u4f46\u662f\u4e00\u822c\u4e0d\u6703\u7a31\u5b83\u70ba\u5171\u8b58\u6f14\u7b97\u6cd5\uff0c \u800c\u76f4\u63a5\u7a31\u5176\u70ba 2PC\uff0c\u56e0\u70ba\u4ed6\u4e0d\u6eff\u8db3\u4e00\u4e9b\u7279\u6027\u3002
\u5927\u90e8\u5206\u95dc\u806f\u5f0f\u8cc7\u6599\u53e2\u96c6\u90fd\u6709\u5be6\u4f5c 2PC\u3002
\u4ee5\u55ae\u4e00\u7bc0\u9ede\u7684\u8cc7\u6599\u5eab\u70ba\u4f8b\uff0c\u7576\u8acb\u6c42\u9032\u4f86\u6642\u4e0d\u6703\u99ac\u4e0a\u7570\u52d5\u8cc7\u6599\uff0c\u800c\u662f\u5148\u5beb\u9032\u65e5\u8a8c\uff08WAL\uff09\u4e2d\uff0c\u4e4b\u5f8c\u518d\u57f7\u884c\u9019\u6b21\u7570\u52d5\u3002\u9019\u9ebc\u505a\u7684\u597d\u8655\u662f\u53ef\u4ee5\u907f\u514d\u57f7\u884c\u5230\u4e00\u534a\u6a5f\u5668\u91cd\u958b\u6a5f\u6642\u53ef\u4ee5\u5fa9\u539f\u3002
\u7576\u72c0\u6cc1\u8b8a\u6210\u5206\u6563\u5f0f\u7cfb\u7d71\u6642\u4e5f\u662f\u4e00\u6a23\u3002\u6709\u4e00\u500b\u5354\u8abf\u8005\uff08coordinator\uff09\u767c\u9001\u7570\u52d5\u8acb\u6c42\uff0c\u78ba\u4fdd\u7570\u52d5\u88ab\u6536\u5230\uff08prepare\uff0cphase 1\uff09\u4e4b\u5f8c\u5c31\u6703\u9032\u884c\u63d0\u4ea4\uff08commit\uff0cphase 2\uff09\u3002
\u6709\u9ede\u50cf\u7d50\u5a5a\u6642\uff0c\u7267\u5e2b\u554f\u592b\u59bb\u662f\u5426\u540c\u610f\u6642\u96d9\u65b9\u56de\u7b54\uff1a\u6211\u9858\u610f\uff08prepare\uff09\uff0c\u4e4b\u5f8c\u7267\u5e2b\u5c31\u6703\u540c\u610f\u9019\u5834\u5a5a\u79ae\uff08commit\uff09\u3002
\u9664\u4e86\u7b2c\u4e8c\u968e\u6bb5\u4e4b\u5916\uff0c\u4efb\u4f55\u4e00\u6bb5\u767c\u751f\u610f\u5916\u6642\uff0c\u5354\u8abf\u8005\u90fd\u53ef\u4ee5\u653e\u68c4\u672c\u6b21\u7570\u52d5\u3002\u4f46\u662f\u7576\u4e8b\u60c5\u9032\u884c\u5230\u7b2c\u4e8c\u968e\u6bb5\u6642\uff08\u4e5f\u5c31\u662f\u5927\u5bb6\u90fd\u540c\u610f\u9019\u6b21\u7570\u52d5\u6642\uff09\u6240\u6709\u7bc0\u9ede\u90fd\u5fc5\u9808\u5b8c\u6210\u9019\u6b21\u7570\u52d5\uff0c\u4e0d\u8ad6\u767c\u751f\u4ec0\u9ebc\u4e8b\u3002\u5c0d\u65bc\u7bc0\u9ede\u7684\u89d2\u5ea6\u4f86\u8aaa\uff0c\u7576\u4ed6\u5728\u7b2c\u4e00\u968e\u6bb5\u56de\u7b54\uff1a\u6e96\u5099\u597d\u4e86\u6642\uff0c\u4ed6\u5c31\u5fc5\u9808\u7b49\u5230\u5354\u8abf\u8005\u7684\u56de\u61c9\uff0c\u4e0d\u7ba1\u662f\u653e\u68c4\u6216\u63d0\u4ea4\uff0c\u4e0d\u8ad6\u767c\u751f\u4ec0\u9ebc\u4e8b\u3002
\u7e3d\u7d50\u4e00\u4e0b\u505a\u6cd5\uff1a
\u4e0a\u8ff0\u63d0\u5230\u7684\u300c\u6c7a\u5b9a\u300d\u4ee3\u8868\u4e00\u65e6\u5404\u7bc0\u9ede\u6216\u5354\u8abf\u8005\u6c7a\u5b9a\u4e86\u6bcf\u500b\u7d50\u8ad6\uff08\u63d0\u4ea4\u6216\u8005\u653e\u68c4\uff09\u5c31\u4e0d\u80fd\u518d\u66f4\u6539\u3002
"},{"location":"feedback/designing-data-intensive-applications/distributed-ft/#\u7576\u5b83\u767c\u751f\u610f\u5916\u6642","title":"\u7576\u5b83\u767c\u751f\u610f\u5916\u6642","text":"\u7576\u767c\u751f\u610f\u5916\u6642\uff0c\u4e0d\u8ad6\u5354\u8abf\u8005\u6216\u8457\u7bc0\u9ede\u90fd\u5fc5\u9808\u505c\u6b62\u904b\u4f5c\u76f4\u5230\u78ba\u8a8d\u63a5\u6536\u5230\u300c\u653e\u68c4\u300d\u6216\u300c\u63d0\u4ea4\u300d\u3002\u9019\u5c31\u8b93\u5206\u6563\u5f0f\u7cfb\u7d71\u7684\u9ad8\u53ef\u7528\u6027\u548c\u6548\u80fd\u5b8c\u5168\u5931\u80fd\u3002
3PC \u76f8\u8f03\u65bc 2PC \u5247\u4e0d\u6703\u8b93\u7bc0\u9ede\u6216\u5354\u8abf\u8005\u505c\u6b62\u904b\u4f5c\uff0c\u4f46\u662f\u9700\u8981\u4e00\u500b\u670d\u52d9\u5075\u6e2c\u7cfb\u7d71\uff0c\u544a\u8a34\u5354\u8abf\u8005\u73fe\u5728\u54ea\u500b\u7bc0\u9ede\u505c\u6b62\u904b\u4f5c\u4e86\uff0c\u4f46\u662f\u670d\u52d9\u5075\u6e2c\u7cfb\u7d71\u7121\u6cd5\u5b8c\u7f8e\u5075\u6e2c\u932f\u8aa4\uff08\u4f8b\u5982\u4ed6\u5c0d\u7bc0\u9ede\u7684\u7db2\u8def\u4e2d\u65b7\u4e86\uff0c\u4f46\u662f\u7bc0\u9ede\u548c\u7bc0\u9ede\u4ecd\u53ef\u4ee5\u6b63\u5e38\u6e9d\u901a\uff09\u5c0e\u81f4\u9019\u500b\u7cfb\u7d71\u5931\u9748\uff0c\u6240\u4ee5\u5373\u4f7f 2PC \u6703\u6709\u5354\u8abf\u8005\u5931\u80fd\u6642\u7684\u72c0\u6cc1\u9700\u8981\u8655\u7406\uff0c\u4f46\u4ecd\u6709\u5f88\u591a\u8cc7\u6599\u5eab\u53e2\u96c6\u5be6\u4f5c\u4ed6\u3002
"},{"location":"feedback/designing-data-intensive-applications/distributed-ft/#\u5354\u8abf\u8005\u8b8a\u6210\u8cc7\u6599\u53e2\u96c6\u7684\u4e00\u74b0","title":"\u5354\u8abf\u8005\u8b8a\u6210\u8cc7\u6599\u53e2\u96c6\u7684\u4e00\u74b0","text":"\u5982\u679c\u63d0\u4ea4\u904e\u7a0b\u4e2d\u6709\u4e00\u90e8\u4efd\u8cc7\u6599\u5eab\u6c92\u6709\u6210\u529f\u9001\u51fa\u63d0\u4ea4\u8a0a\u606f\uff0c\u9019\u4e9b\u8cc7\u6599\u5eab\u5c31\u6703\u505c\u6b62\u6240\u6709\u76f8\u95dc\u8cc7\u6599\u7684\u7570\u52d5\uff08\u6216\u751a\u81f3\u6574\u500b\u8cc7\u6599\u5eab\u505c\u6b62\u7570\u52d5\uff09\u3002\u70ba\u4ec0\u9ebc\u8981\u9019\u9ebc\u786c\uff1f\u9019\u5c31\u662f\u6703\u4e86\u9054\u6210\u4e00\u81f4\u6027\u7684\u72a7\u7272\uff0c\u5982\u679c\u8cc7\u6599\u5eab\u6e96\u5099\u597d\u4e86\u4f46\u5c1a\u672a\u9032\u884c\u63d0\u4ea4\u800c\u5141\u8a31\u5176\u4ed6\u7570\u52d5\u6642\uff0c\u5c31\u6703\u8b93\u591a\u53f0\u8cc7\u6599\u5eab\u7684\u72c0\u614b\u7121\u6cd5\u9054\u6210\u4e00\u81f4\u3002
\u9019\u6642\u5c31\u6703\u767c\u73fe\u5176\u5be6\u5354\u8abf\u8005\u662f\u8cc7\u6599\u5eab\u53e2\u96c6\u7684\u4e00\u74b0\uff0c\u7576\u5354\u8abf\u8005\u4e2d\u6b62\u6642\uff0c\u5c0d\u8cc7\u6599\u5eab\u53e2\u96c6\u4f86\u8aaa\u662f\u4e00\u500b\u5f88\u91cd\u5927\u7684\u50b7\u5bb3\uff0c\u9019\u4e5f\u964d\u4f4e\u4e86\u6211\u5011\u9810\u671f\u7684\u9ad8\u53ef\u7528\u6027\u3002\u4f46\u662f\u5927\u90e8\u5206\u5354\u8abf\u8005\u7684\u5be6\u4f5c\u90fd\u4e0d\u652f\u63f4\u9ad8\u53ef\u7528\u6027\uff08\u591a\u7bc0\u9ede\uff09\u3002
\u6709\u6642\u5354\u8abf\u8005\u6703\u88ab\u5be6\u4f5c\u65bc\u61c9\u7528\u7a0b\u5f0f\u4e2d\uff08\u900f\u904e SDK \u7b49\u7b49\uff09\uff0c\u9019\u4e5f\u8b93\u61c9\u7528\u7a0b\u5f0f\u5f9e\u539f\u672c\u7684\u7121\u72c0\u614b\u8b8a\u6210\u6709\u72c0\u614b\u3002\u9019\u7a2e\u932f\u8aa4\u8a8d\u77e5\u6703\u9020\u6210\u5f88\u591a\u7dad\u904b\u4e0a\u7684\u610f\u5916\uff0c\u4f8b\u5982\u6c92\u6709\u6b63\u78ba Auto Scaling \u7b49\u7b49\u3002
\u6709\u6642\u5354\u8abf\u8005\u7684\u8cc7\u6599\uff08\u7570\u52d5\u662f\u5426\u63d0\u4ea4\u7684\u7d50\u8ad6\uff09\u907a\u5931\u4e86\uff0c\u6216\u8005\u56e0\u4efb\u4f55\u72c0\u6cc1\u5c0e\u81f4\u5354\u8abf\u8005\u9577\u6642\u9593\u7121\u6cd5\u904b\u4f5c\uff0c\u8cc7\u6599\u5eab\u4e2d\u901a\u5e38\u90fd\u6703\u6709\u500b API \uff08heuristic decision\uff09\u5141\u8a31\u4e0d\u900f\u904e\u5354\u8abf\u8005\u76f4\u63a5\u544a\u77e5\u8cc7\u6599\u5eab\u662f\u5426\u8981\u63d0\u4ea4\uff0c\u9019\u5c31\u662f\u7528\u4f86\u907f\u514d\u9019\u500b\u72c0\u6cc1\u7684\u767c\u751f\u3002\u4f46\u662f\u8cc7\u6599\u5eab\u662f\u5426\u8981\u63d0\u4ea4\u662f\u9700\u8981\u5230\u5404\u500b\u7bc0\u9ede\u78ba\u8a8d\u5404\u81ea\u7684\u904b\u4f5c\u72c0\u614b\u4f86\u6c7a\u5b9a\u7684\uff0c\u4e0d\u9019\u9ebc\u505a\u7684\u597d\u5f88\u53ef\u80fd\u6703\u6709\u4e00\u4e9b\u8cc7\u6599\u5eab\u662f\u300c\u63d0\u4ea4\u300d\u800c\u4e00\u4e9b\u662f\u300c\u653e\u68c4\u300d\u3002
"},{"location":"feedback/designing-data-intensive-applications/distributed-ft/#xa","title":"XA","text":"XA\uff08eXtended Architecture\uff09\u662f\u4e00\u7a2e\u4ecb\u9762\uff0c\u9019\u500b\u4ecb\u9762\u8b93 2PC \u5141\u8a31\u5728\u7570\u8cea\u7684\u61c9\u7528\u7a0b\u5f0f\u9593\u64c1\u6709\u76f8\u540c\u7684\u69cb\u901a\u6a4b\u6a11\u3002
\u4f8b\u5982\u8cc7\u6599\u5eab\u548c\u5bc4\u9001\u90f5\u4ef6\u7684\u61c9\u7528\u7a0b\u5f0f\u3002
"},{"location":"feedback/designing-data-intensive-applications/distributed-ft/#\u5e38\u898b\u7684\u5171\u8b58\u6f14\u7b97\u6cd5","title":"\u5e38\u898b\u7684\u5171\u8b58\u6f14\u7b97\u6cd5","text":"\u4e00\u822c\u6211\u5011\u5728\u63d0\u5171\u8b58\u6f14\u7b97\u6cd5\u6642\uff0c\u90fd\u662f\u6307\u4e0a\u8ff0\u9019\u5e7e\u7a2e\uff0c\u4ed6\u5011\u90fd\u6703\u6709\u4e00\u4e9b\u7279\u6027\u7570\u65bc 2PC\uff0c\u6211\u5011\u5f85\u6703\u5c31\u6703\u8ac7\u3002
\u4e0d\u904e\u9019\u88e1\u8981\u8b1b\u7684\u662f\u9019\u4e9b\u5171\u8b58\u6f14\u7b97\u6cd5\u90fd\u6703\u5f97\u5230\u4e00\u500b\u7d50\u8ad6\uff1a\u591a\u6578\u6c7a\u624d\u80fd\u4fdd\u8b49\u5171\u8b58\u3002\u4e5f\u5c31\u662f\u4e94\u500b\u7bc0\u9ede\u4e2d\uff0c\u9700\u8981\u6709\u4e09\u500b\u7bc0\u9ede\u540c\u4e00\u9019\u500b\u7d50\u679c\u3002
\u6709\u4eba\u505a\u4e86\u4e00\u4e9b\u6bd4\u8f03\u3002
\u4e0d\u50c5\u662f\u5be6\u4f5c\uff0c\u8981\u4f7f\u7528\u9019\u4e9b\u5171\u8b58\u6f14\u7b97\u6cd5\u63d0\u4f9b\u8005\u672c\u8eab\u5c31\u4e0d\u5bb9\u6613\u4e86\uff0c\u6240\u4ee5\u6709\u985e\u4f3c Apache Curator \u900f\u904e\u9ad8\u7dad\u5ea6\u7684\u985e\u5225\u4f86\u5e6b\u52a9\u958b\u767c\u8005\u4f7f\u7528 Apache ZooKeeper\u3002
"},{"location":"feedback/designing-data-intensive-applications/distributed-ft/#\u7279\u6027","title":"\u7279\u6027","text":"\u9019\u4e9b\u5171\u8b58\u6f14\u7b97\u6cd5\u9700\u8981\u6eff\u8db3\u4e0a\u8ff0\u56db\u500b\u689d\u4ef6\u3002
2PC \u5c31\u662f\u6c92\u6709\u5bb9\u932f\u6027\uff0c\u5354\u8abf\u8005\u4e0d\u80fd\u5931\u80fd\u3002\u524d\u9762\u6211\u5011\u8b1b\u7684\u591a\u6578\u6c7a\u4e5f\u4ee3\u8868\u4efb\u4e00\u5171\u8b58\u6f14\u7b97\u6cd5\u7684\u524d\u63d0\u90fd\u662f\u50c5\u6709\u5c11\u65bc\u534a\u6578\u7684\u7bc0\u9ede\u5931\u80fd\u3002
\u4e16\u4ee3\u6578
\u9019\u4e9b\u5171\u8b58\u6f14\u7b97\u6cd5\u5176\u5be6\u5167\u90e8\u6a5f\u5236\u548c 2PC \u5f88\u50cf\uff0c\u4f60\u53ef\u4ee5\u628a\u6bcf\u500b\u7bc0\u9ede\u90fd\u7576\u6210\u5354\u8abf\u8005\uff0c\u4ed6\u5011\u53ef\u4ee5\u63d0\u6848\u3001\u6c7a\u5b9a\u7b49\u7b49\u3002
\u9019\u500b\u6982\u5ff5\u7a31\u70ba \u4e16\u4ee3\u6578\uff08epoch number, ballot number, view number, term number\uff09\uff0c\u4e5f\u5c31\u662f\u78ba\u4fdd\u6bcf\u4e00\u6b21\u5171\u8b58\u90fd\u6709\u4e00\u7d44\uff08\u591a\u500b\uff09\u5354\u8abf\u8005\uff0c\u800c\u5169\u6b21\u5171\u8b58\u7684\u5354\u8abf\u8005\u662f\u7368\u7acb\u6216\u4e0d\u4e00\u6a23\u7684\u3002
"},{"location":"feedback/designing-data-intensive-applications/distributed-ft/#\u61c9\u7528_1","title":"\u61c9\u7528","text":"ZooKeeper/etcd/.. \u548c\u4e00\u822c\u7684\u8cc7\u6599\u5eab\u4e0d\u592a\u4e00\u6a23\uff0c\u4ed6\u5011\u4e0d\u662f\u7528\u4f86\u5132\u5b58\u7dda\u4e0a\u7570\u52d5\u8cc7\u6599\u7684\u8cc7\u6599\u5eab\uff0c\u76f8\u53cd\u7684\uff0c\u901a\u5e38\u4ed6\u5011\u80fd\u5132\u5b58\u7684\u91cf\u90fd\u5f88\u5c0f\uff08\u8db3\u5920\u88ab\u653e\u9032\u8a18\u61b6\u9ad4\u88e1\u9762\uff09\u800c\u9019\u500b\u5c0f\u578b\u8cc7\u6599\u5eab\u53e2\u96c6\u4e5f\u901a\u5e38\u4e0d\u6703\u592a\u591a\u7bc0\u9ede\uff083~5 \u500b\uff09\uff0c\u907f\u514d\u5171\u8b58\u7684\u904e\u7a0b\u592a\u8017\u6642\u3002
\u901a\u5e38\u4ed6\u5132\u5b58\u7684\u8cc7\u6599\u6703\u662f\uff1a \u7bc0\u9ede 10.1.1.23
\u662f\u5206\u5340 7 \u7684\u9818\u8896 \uff0c\u9019\u7a2e\u4e0d\u5bb9\u6613\u8b8a\u52d5\u4f46\u537b\u662f\u5f88\u91cd\u8981\u7684\u8cc7\u6599\u3002\u6240\u4ee5 ZooKeeper/etcd/.. \u7684\u8cc7\u6599\u53e2\u96c6\u5f88\u53ef\u80fd\u6703\u7528\u4f86\u670d\u52d9\u4e00\u7d44\u6bd4\u4ed6\u5011\u9084\u8981\u5927\u5f88\u591a\u7684\u53e2\u96c6\uff08\u4f8b\u5982\u4e0a\u767e\u500b\u8cc7\u6599\u5eab\u7bc0\u9ede\uff09
\u5168\u57df\u9806\u5e8f\u5ee3\u64ad\u5c31\u662f\u4e00\u76f4\u91cd\u8907\u57f7\u884c\u5171\u8b58\u6f14\u7b97\u6cd5\uff0c\u78ba\u4fdd\u6bcf\u500b\u7bc0\u9ede\u90fd\u80fd\u6309\u7167\u76f8\u540c\u9806\u5e8f\u53bb\u57f7\u884c\u7570\u52d5\u8acb\u6c42\u3002
\u56e0\u70ba\u6bcf\u6b21\u7570\u52d5\u8acb\u6c42\u90fd\u9700\u8981\u540c\u6b65\u78ba\u8a8d\u5404\u7bc0\u9ede\u7684\u6c7a\u5b9a\uff0c\u6240\u4ee5\u6548\u80fd\u4e0d\u6703\u597d\uff0c\u9664\u6b64\u4e4b\u5916\u7576\u7db2\u8def\u4e0d\u7a69\u5b9a\u6642\uff08\u591a\u500b\u8cc7\u6599\u4e2d\u5fc3\u5206\u6563\u5728\u4e0d\u540c\u5834\u57df\uff09\u5c31\u5f88\u5bb9\u6613\u8b93\u6574\u500b\u5171\u8b58\u7fa4\u7d44\u4e00\u76f4\u5728\u91cd\u65b0\u9078\u64c7\u65b0\u7684\u9818\u8896\u3002
\u53e6\u5916\uff0c\u5171\u8b58\u662f\u9700\u8981\u591a\u6578\u6c7a\u7684\uff0c\u7576\u6709\u65b0\u7684\u7bc0\u9ede\u9032\u4f86\u9019\u500b\u7fa4\u7d44\uff0c\u591a\u6578\u6c7a\u7684\u6578\u91cf\u5c31\u6703\u88ab\u6539\u8b8a\u3002\u9019\u7a2e\u52d5\u614b\u7fa4\u7d44\uff08dynamic membership\uff09\u4e5f\u662f\u4e00\u500b\u9700\u8981\u88ab\u89e3\u6c7a\u7684\u554f\u984c\uff08\u958b\u653e\u7814\u7a76\uff09\u3002
\u6548\u80fd\u554f\u984c\u548c\u56fa\u5b9a\u7bc0\u9ede\u554f\u984c\u8b93\u5f88\u591a\u8cc7\u6599\u53e2\u96c6\u9078\u64c7\u4e0d\u4f7f\u7528\u5171\u8b58\u6f14\u7b97\u6cd5\u3002\u9664\u6b64\u4e4b\u5916\uff0c\u901a\u5e38\u6211\u5011\u6703\u5728\u8cc7\u6599\u5eab\u53e2\u96c6\u4e4b\u5916\u5efa\u7acb\u4e00\u500b\u5171\u8b58\u6f14\u7b97\u6cd5\u7fa4\u7d44\uff0c\u9019\u7a2e\u7cfb\u7d71\u5916\u7684\u67b6\u69cb\uff0c\u5f88\u53ef\u80fd\u6703\u8b93\u6574\u9ad4\u67b6\u69cb\u8b8a\u5f97\u8907\u96dc\u3002
"},{"location":"feedback/designing-data-intensive-applications/distributed-ft/#\u7e3d\u7d50","title":"\u7e3d\u7d50","text":"\u6211\u5011\u66b8\u89e3\u4e86\u5206\u6563\u5f0f\u8cc7\u6599\u5eab\u9762\u81e8\u4ec0\u9ebc\u72c0\u6cc1\uff08\u7db2\u8def\u5ef6\u9072\u7b49\u7b49\uff09\uff0c\u4e26\u4e14\u9806\u8457\u601d\u8def\u5f80\u4e0b\u8d70\uff0c\u77e5\u9053\u8981\u89e3\u6c7a\u9019\u500b\u554f\u984c\u5176\u5be6\u5c31\u662f\u9700\u8981\u4e00\u500b\u7dda\u6027\u57f7\u884c\u7570\u52d5\u7684\u7cfb\u7d71\u3002
\u96d6\u7136\u7dda\u6027\u7cfb\u7d71\u80fd\u5f88\u597d\u7684\u5e6b\u52a9\u6211\u5011\u7406\u89e3\u8a72\u5982\u4f55\u8655\u7406\u5206\u6563\u5f0f\u7cfb\u7d71\u7684\u5171\u8b58\uff0c\u4f46\u662f\u7dda\u6027\u7cfb\u7d71\u662f\u5f88\u8017\u6210\u672c\u7684\uff0c\u6211\u5011\u9000\u800c\u6c42\u5176\u6b21\uff0c\u6539\u63a1\u8ce6\u4e88\u56e0\u679c\u95dc\u4fc2\u9019\u689d\u8def\u3002
\u8ce6\u4e88\u56e0\u679c\u95dc\u4fc2\u5c31\u662f\u8981\u66ff\u6bcf\u4e00\u7d44\u7570\u52d5\u8acb\u6c42\u52a0\u4e0a\u4ed6\u7684\u4f86\u6e90\uff0c\u5e6b\u52a9\u8cc7\u6599\u5eab\u6c7a\u5b9a\u9019\u500b\u8acb\u6c42\u8a72\u4e0d\u8a72\u57f7\u884c\u3002\u4ed6\u4e0d\u50cf\u7dda\u6027\u7cfb\u7d71\u8981\u6c42\u6240\u6709\u7de8\u865f\u90fd\u662f\u7368\u7acb\u7684\uff0c\u5c31\u50cf\u7248\u672c\u63a7\u5236\u7684\u5716\u4e00\u6a23\uff0c\u6211\u5011\u53ef\u4ee5\u6709\u591a\u500b\u5206\u652f\u4ee3\u8868\u4e26\u884c\u8acb\u6c42\uff0c\u6700\u5f8c\u518d\u5408\u4f75\u8d77\u4f86\uff0c\u7576\u5408\u4f75\u932f\u8aa4\u6642\uff0c\u5c31\u653e\u68c4\uff08\u6216\u5617\u8a66\u4fee\u5fa9\u4e26\u518d\u767c\u51fa\u4e00\u500b\u5206\u652f\uff09\u90a3\u4e9b\u5c0f\u5206\u652f\u3002
\u6211\u5011\u63d0\u5230\u4e86\u5168\u57df\u9806\u5e8f\u5ee3\u64ad\u7684\u5be6\u8e10\u548c\u5176\u8207\u5171\u8b58\u6f14\u7b97\u6cd5\u7684\u95dc\u4fc2\u3002\u800c\u5171\u8b58\u6f14\u7b97\u6cd5\u5176\u5be6\u5c31\u662f\u8b93\u5206\u6563\u5f0f\u7cfb\u7d71\u8b8a\u6210\u4e00\u500b\u5e8f\u5217\u5316\u72c0\u614b\u6a5f
\u9019\u7ae0\u5176\u5be6\u7d71\u5408\u4e86\u524d\u9762\u6240\u6709\u5206\u6563\u5f0f\u8cc7\u6599\u5eab\u7684\u5167\u5bb9\u3002\u6211\u5011\u5148\u524d\u5feb\u901f\u5e36\u904e\u4e86\u8907\u88fd\u5ef6\u9072\u4f46\u6c92\u6709\u63d0\u5230\u7576\u5206\u5340\u8981\u505a\u5168\u57df\u985e\u578b\u7684\u641c\u5c0b\uff08\u4f8b\u5982\u5e73\u5747\u4f7f\u7528\u8005\u5e74\u9f61\uff09\u6642\u4ed6\u53ef\u80fd\u6703\u9047\u5230\u7684\u7af6\u8cfd\u72c0\u6cc1\u3002\u5728\u9019\u4e00\u7ae0\u90fd\u91cd\u65b0\u6253\u958b\u5e03\u5e55\u8b93\u6211\u5011\u4e00\u8667\u88e1\u9762\u5be6\u969b\u6703\u9762\u81e8\u7684\u72c0\u6cc1\u548c\u89e3\u6cd5\u3002
\u9019\u7ae0\u96d6\u7136\u4e0d\u50cf\u524d\u9762\u5728\u8b1b \u8cc7\u6599\u5009\u5132 \u7684\u6642\u5019\u90a3\u9ebc\u591a\u6578\u5b78\u7684\u611f\u89ba\uff0c\u4f46\u662f\u537b\u662f\u6700\u96e3\u7684\u4e00\u90e8\u4efd\uff0c\u56e0\u70ba\u4f60\u8981\u628a\u524d\u9762\u6240\u5b78\u5230\u7684\u6240\u6709\u6771\u897f\u6574\u5408\u5728\u4e00\u8d77\u53bb\u601d\u8003\u3002\u55ae\u53f0\u8cc7\u6599\u5eab\u4ed6\u9762\u81e8\u4e86\u4ec0\u9ebc\u554f\u984c\uff1f\u4ed6\u900f\u904e\u4ec0\u9ebc\u65b9\u5f0f\u89e3\u6c7a\uff1f\u7576\u89e3\u6c7a\u5b8c\u4e4b\u5f8c\uff0c\u653e\u5728\u5206\u6563\u5f0f\u8cc7\u6599\u8cc7\u6599\u5eab\u6642\u70ba\u4ec0\u9ebc\u6703\u5931\u9748\uff1f\u5206\u6563\u5f0f\u8cc7\u6599\u5eab\u53c8\u900f\u904e\u4ec0\u9ebc\u6a23\u62bd\u8c61\u7a0b\u5ea6\u7684\u89d2\u5ea6\u53bb\u89e3\u6c7a\u9019\u4ef6\u4e8b\uff1f
\u770b\u5b8c\u9019\u6b21\u5206\u4eab\u4e4b\u5f8c\uff0c\u4f60\u6703\u767c\u73fe\u5176\u5be6\u5927\u90e8\u5206\u6587\u5b57\u9084\u662f\u8457\u91cd\u5728\u7406\u89e3\u4e0a\u8ff0\u7684\u554f\u984c\uff0c\u800c\u4e0d\u662f\u5be6\u969b\u5c55\u793a\u6216\u8aaa\u660e\u67d0\u67d0\u6f14\u7b97\u6cd5\u7684\u5be6\u4f5c\u548c\u908f\u8f2f\uff08\u7406\u89e3\u5b8c\u67d0\u67d0\u6f14\u7b97\u6cd5\u7684\u5be6\u4f5c\u4e4b\u5f8c\uff0c\u9694\u5e7e\u500b\u6708\u4e4b\u5f8c\u5f88\u53ef\u80fd\u5c31\u6703\u5fd8\u8a18\u5be6\u969b\u5167\u5bb9\uff0c\u7562\u7adf\u4f60\u9700\u8981\u53cd\u8986\u7406\u89e3\u7dad\u904b\u9019\u4e9b\u5be6\u4f5c\u7684\u6a5f\u6703\u771f\u7684\u5f88\u5c11\uff0c\u5728\u9650\u5236\u5b78\u7fd2\u6642\u9593\u7684\u60c5\u6cc1\u4e0b\uff0c\u6211\u66f4\u50be\u5411\u65bc\u7406\u89e3\u5728\u89e3\u6c7a\u554f\u984c\u6642\u5176\u80cc\u5f8c\u7684\u62bd\u8c61\u5c64\u9762\uff09\uff0c\u56e0\u70ba\u7576\u4f60\u770b\u5b8c\u5be6\u4f5c\u4e4b\u5f8c\uff0c\u4f60\u53ef\u80fd\u6703\u6709\u500b\u7d50\u8ad6\uff1a\u5594\u5594\u5594\uff0c\u5171\u8b58\u6f14\u7b97\u6cd5\u662f\u8b93\u4e00\u7fa4\u7bc0\u9ede\u5f97\u5230\u4e00\u500b\u5171\u8b58\uff0c\u90a3\u7136\u5f8c\u5462\uff1f\uff0c\u6211\u500b\u4eba\u8a8d\u70ba\u6bd4\u8f03\u96e3\u7684\u90e8\u5206\u662f\u53bb\u7406\u89e3\u6240\u8b02\u300c\u56e0\u679c\u95dc\u4fc2\u300d\u5728\u5206\u6563\u5f0f\u7cfb\u7d71\u7684\u91cd\u8981\u6027\uff0c\u4e5f\u5c31\u662f\u5168\u57df\u9806\u5e8f\u5ee3\u64ad\u5982\u4f55\u5e6b\u52a9\u6211\u5011\u907f\u514d\u5206\u6563\u5f0f\u7cfb\u7d71\u7684\u908a\u969b\u72c0\u6cc1\u3002
\u4e00\u53e5\u8a71\u6982\u62ec\u9019\u7ae0
\u5206\u6563\u5f0f\u7cfb\u7d71\u7684\u5bb9\u932f\u5c31\u662f\u900f\u904e\u5168\u57df\u9806\u5e8f\u4f86\u7dad\u6301\u56e0\u679c\u95dc\u4fc2\u3002
"},{"location":"feedback/designing-data-intensive-applications/distributed-partition/","title":"\u5206\u6563\u5f0f\u8cc7\u6599\u5eab\u2014\u5206\u5340","text":"\u5206\u6563\u8cc7\u6599\u548c\u904b\u7b97\uff0c\u4f7f\u5176\u5e7e\u4e4e\u7121\u9650\u5236\u5730\u6210\u9577\u3002
HackMD \u5831\u544a\u6587\u672c
\u6211\u5011\u524d\u9762\u4ecb\u7d39\u904e\u5206\u6563\u5f0f\u8cc7\u6599\u5eab\u7684\u8907\u88fd\uff0c\u4e5f\u63d0\u904e\u8907\u88fd\u548c\u5206\u5340\u5169\u8005\u662f\u53ef\u4ee5\u7368\u7acb\u5340\u5206\u7684\u3002 \u4e00\u822c\u4f86\u8aaa\u4efb\u4e00\u8907\u88fd\u7684\u6f14\u7b97\u6cd5\u53ef\u4ee5\u642d\u914d\u4efb\u4e00\u5206\u5340\u7684\u6f14\u7b97\u6cd5\u3002
\u5206\u5340\u5e6b\u52a9\u6211\u5011\u628a\u5f88\u5927\u7684\u8cc7\u6599\u5eab\u62c6\u6210\u4e00\u500b\u4e00\u500b\u5c0f\u5c0f\u7684\u8cc7\u6599\u5eab\u3002\u4f60\u53ef\u4ee5\u628a\u9019\u4e9b\u5c0f\u8cc7\u6599\u5eab\u7576\u6210\u7368\u7acb\u7684\u8cc7\u6599\u5eab\u3002 \u7576\u6709\u91dd\u5c0d\u4ed6\u7684\u8cc7\u6599\u7684\u641c\u5c0b\u9032\u4f86\u4e86\uff0c\u4ed6\u5c31\u53ef\u4ee5\u7167\u8457\u55ae\u4e00\u8cc7\u6599\u5eab\u7684\u904b\u4f5c\u65b9\u5f0f\u57f7\u884c\u3002
\u8907\u88fd\u662f\u628a\u8cc7\u6599\u5eab\u5f9e\u4e00\u500b\u589e\u52a0\u5230\u591a\u500b\uff0c\u4f46\u662f\u5206\u5340\u662f\u628a\u8cc7\u6599\u5eab\u5f9e\u4e00\u500b\u62c6\u6210\u591a\u500b\u3002
\u9019\u5169\u500b\u6771\u897f\u8981\u6ce8\u610f\u7684\u6771\u897f\u90fd\u4e0d\u592a\u4e00\u6a23\uff0c\u8907\u88fd\u8981\u6ce8\u610f\u7684\u662f\u8981\u600e\u9ebc\u7dad\u6301\u5169\u500b\u8cc7\u6599\u5eab\u7684\u8cc7\u6599\u4e00\u81f4\u6027\uff0c\u4e26\u8655\u7406\u591a\u500b\u8cc7\u6599\u5eab\u4e0d\u540c\u5beb\u5165\u7684\u885d\u7a81\u3002 \u53cd\u4e4b\uff0c\u5206\u5340\u5247\u662f\u6ce8\u91cd\u5169\u500b\u8cc7\u6599\u5eab\u7684\u4e92\u52d5\u3002\u8cc7\u6599\u8981\u6d41\u9032\u54ea\u500b\u8cc7\u6599\u5eab\uff1f\u8981\u600e\u9ebc\u57f7\u884c\u5206\u6790\u985e\u578b\uff08OLAP\uff09\u7684\u641c\u5c0b\uff1f \u5728\u6b0a\u8861\u4e0a\uff0c\u8907\u88fd\u9700\u8981\u8003\u616e\u4e00\u81f4\u6027\u548c\u6548\u80fd\u7684\u6bd4\u4f8b\uff1b\u5206\u5340\u5247\u9700\u8981\u8003\u616e\u4e0d\u540c\u5340\u7684\u5e73\u8861\u548c\u8cc7\u6599\u7684\u9023\u7e8c\u6027\u3002
\u4ec0\u9ebc\u662f\u4e0d\u540c\u5340\u7684\u5e73\u8861\u548c\u8cc7\u6599\u7684\u9023\u7e8c\u6027\uff1f
\u8209\u4f8b\u4f86\u8aaa\uff0c\u8cfc\u7269\u8a18\u9304\u7684\u8cc7\u6599\u96a8\u6a5f\u5206\u4f48\u53ef\u4ee5\u8b93\u4ed6\u5f88\u9ad8\u5e73\u8861\u6027\uff0c\u4f46\u662f\u7576\u8981\u53d6\u5f97\u524d\u5341\u7b46\u7d00\u9304\u6642\u5c31\u53ef\u80fd\u9700\u8981\u904d\u6b77\u8cc7\u6599\u5eab\uff1b \u53cd\u4e4b\u7167\u9806\u5e8f\u5132\u5b58\u53ef\u4ee5\u8b93\u8cc7\u6599\u64c1\u6709\u9ad8\u9023\u7e8c\u6027\u3002\u4f46\u662f\u56e0\u70ba\u4f7f\u7528\u8005\u5728\u641c\u5c0b\u8cfc\u7269\u8a18\u9304\u6642\u5e7e\u4e4e\u53ea\u6703\u627e\u6700\u8fd1\u7684\u8cc7\u6599\uff0c \u6240\u4ee5\u6703\u8b93\u5927\u90e8\u5206\u7684\u641c\u5c0b\u843d\u5728\u64c1\u6709\u8f03\u65b0\u8cc7\u6599\u7684\u8cc7\u6599\u5eab\u3002 \u7d50\u8ad6\uff1a\u9ad8\u5e73\u8861\u53ef\u4ee5\u8b93\u6bcf\u53f0\u8cc7\u6599\u5eab\u90fd\u6709\u4e8b\u505a\uff1b\u9ad8\u9023\u7e8c\u53ef\u4ee5\u8b93\u641c\u5c0b\u8b8a\u55ae\u7d14
\u8907\u88fd\u7684\u8d95\u5de5\u548c\u5206\u5340\u7684\u5e73\u8861\u90fd\u662f\u7528\u5728\u7576\u8cc7\u6599\u5eab\u91cd\u555f\u6216\u65b0\u589e\u8cc7\u6599\u5eab\u6642\u7684\u884c\u70ba\u3002
\u5206\u5340\u5f9e 1980 \u5e74\u4ee3\u5c31\u958b\u59cb\u767c\u5c55\uff0c\u76f4\u5230 2010 \u5e74\u5de6\u53f3 NoSQL \u7684\u610f\u8b58\u5d1b\u8d77\uff0c \u958b\u59cb\u8003\u616e\u66f4\u6613\u64f4\u589e\u7684\u67b6\u69cb\uff0c\u53c8\u518d\u4e00\u6b21\u8b93\u5927\u5bb6\u95dc\u6ce8\u9019\u4e3b\u984c\u3002 \u9664\u4e86 NoSQL\uff0cHadoop \u67b6\u69cb\u7684 \u8cc7\u6599\u5009\u5132 \u4e5f\u9700\u8981\u6709\u5206\u5340\u7684\u6982\u5ff5\uff0c \u9019\u88e1\u63d0\u5230\u7684\u6771\u897f\u5230\u6642\u5019\u90fd\u6703\u5728\u4ecb\u7d39 Hadoop \u7684\u6642\u5019\u7528\u5230\u3002
\u5206\u5340\u7684\u6982\u5ff5\u4e0d\u7ba1\u662f OLTP \u6216\u8005 OLAP \u90fd\u6703\u9700\u8981\u7528\u5230\u3002
\u5206\u5340\u7684\u82f1\u6587\u540d\u8a5e\u5f88\u591a\uff1apartition, shard, region, tablet, vnode, vBucket
"},{"location":"feedback/designing-data-intensive-applications/distributed-partition/#\u4e09\u5927\u554f\u984c","title":"\u4e09\u5927\u554f\u984c","text":"\u4e0b\u9762\u4f9d\u6b21\u8a0e\u8ad6\u3002
"},{"location":"feedback/designing-data-intensive-applications/distributed-partition/#\u5206\u5340","title":"\u5206\u5340","text":"\u7576\u8cc7\u6599\u9032\u4f86\uff0c\u6211\u8981\u8b93\u4ed6\u53bb\u54ea\u4e00\u5340\uff1f
"},{"location":"feedback/designing-data-intensive-applications/distributed-partition/#\u8209\u500b\u4f8b\u5b50","title":"\u8209\u500b\u4f8b\u5b50","text":"\u4eba\u529b\u9280\u884c\u767b\u5165\u9700\u8981\u4f7f\u7528\u8eab\u5206\u8b49\u5b57\u865f\uff0c\u4eca\u5929\u6211\u5011\u8981\u8b93\u4f7f\u7528\u8005\u8cc7\u6599\u5728\u591a\u500b\u8cc7\u6599\u5eab\u9032\u884c\u5206\u5340\uff0c\u4e26\u4f9d\u64da\u8eab\u5206\u8b49\u5b57\u865f\u6c7a\u5b9a\u54ea\u500b\u4f7f\u7528\u8005\u8fd1\u54ea\u500b\u5206\u5340\u3002
\u9ad8\u5e73\u8861\u53ef\u4ee5\u8b93\u6bcf\u53f0\u8cc7\u6599\u5eab\u90fd\u6709\u4e8b\u505a\uff1b\u9ad8\u9023\u7e8c\u53ef\u4ee5\u8b93\u641c\u5c0b\u8b8a\u55ae\u7d14
"},{"location":"feedback/designing-data-intensive-applications/distributed-partition/#\u6574\u7406\u4e00\u4e0b","title":"\u6574\u7406\u4e00\u4e0b","text":"\u6211\u5011\u628a\u4e0a\u9762\u7684\u4f8b\u5b50\u6574\u7406\u4e00\u4e0b\uff0c\u5c31\u6703\u767c\u73fe\u5169\u8457\u6a21\u5f0f\uff1a\u4e00\u7a2e\u662f\u7167\u8457\u9806\u5e8f\u6392\uff0c\u4e00\u7a2e\u662f\u96a8\u6a5f\u4e82\u6578\u7167\u9806\u5e8f\u6392\u3002
\u7167\u9806\u5e8f\u6392\u5c31\u6703\u5bb9\u6613\u88fd\u9020\u71b1\u9ede\uff08hot spot\uff09\uff0c\u9020\u6210\u4e00\u53f0\u8cc7\u6599\u5eab\u5f88\u5fd9\u5f88\u5fd9\uff0c\u5176\u4ed6\u7684\u5c31\u9592\u9592\u6c92\u4e8b\u505a\u3002 \u9664\u6b64\u4e4b\u5916\uff0c\u9019\u65b9\u5f0f\u4e5f\u9700\u8981\u8b93\u61c9\u7528\u7a0b\u5f0f\u8a2d\u8a08\u4eba\u54e1\u8003\u616e\u908a\u754c\u8981\u5982\u4f55\u5236\u5b9a\u3002
\u4ee5\u8eab\u5206\u8b49\u5b57\u865f\u70ba\u4f8b\uff0c\u82e5\u6211\u5011\u6309\u7167\u7b2c\u4e00\u500b\u82f1\u6587\u5b57\u70ba\u5206\u5340\u9375\uff0c\u6211\u5011\u53ef\u80fd\u662f A \uff5e B \u4e00\u7d44\uff0cC \uff5e F \u4e00\u7d44\uff0cG \uff5e K \u4e00\u7d44\u7b49\u7b49\u3002 \u9019\u9ebc\u505a\u7684\u539f\u56e0\u662f\u4e0d\u540c\u57ce\u5e02\u7684\u4eba\u7684\u6578\u91cf\u4e0d\u540c\uff0c\u6240\u4ee5\u5e73\u5747\u5206\u914d\u6703\u9020\u6210\u8ca0\u8f09\u504f\u659c\u3002
\u6700\u5f8c_\u96dc\u6e4a_\uff08hash\uff09\u7684\u65b9\u5f0f\u5927\u90e8\u5206\u8cc7\u6599\u5eab\u90fd\u7528\u6b64\u65b9\u5f0f\u505a\u5206\u5340\u3002\u4f46\u662f\u4ed6\u6703\u8b93\u7bc4\u570d\u641c\u5c0b\u7684\u6548\u80fd\u4f4e\u843d\uff0c \u6240\u4ee5\u6709\u4e9b\u8cc7\u6599\u5eab\u751a\u81f3\u4e0d\u5141\u8a31\u5206\u5340\u9375\u7684\u7bc4\u570d\u641c\u5c0b\uff0c \u4f8b\u5982 Riak\u3001 Couchbase \u548c Voldemort\uff0c MongoDB \u5247\u662f\u6703\u76f4\u63a5\u5c0d\u6240\u6709\u8cc7\u6599\u5eab\u641c\u5c0b\u3002
Info\u9019\u88e1\u8a0e\u8ad6\u7684\u90fd\u5148\u5047\u8a2d\u8cc7\u6599\u4e0d\u6703\u589e\u52a0\uff0c\u4e0d\u9700\u8981\u8003\u616e\u5e73\u8861\u554f\u984c\u3002
"},{"location":"feedback/designing-data-intensive-applications/distributed-partition/#\u71b1\u9ede","title":"\u71b1\u9ede","text":"\u5982\u679c\u7279\u5b9a\u7684\u503c\u672c\u4f86\u5c31\u5f88\u5e38\u88ab\u8acb\u6c42\uff0c\u4e0d\u7ba1\u7528\u54ea\u7a2e\u65b9\u5f0f\u90fd\u6703\u9020\u6210\u71b1\u9ede\uff08\u540c\u4e00\u500b\u503c\u7d93\u904e\u96dc\u6e4a\u5f8c\u9084\u662f\u9577\u4e00\u6a23\uff09\u3002 \u4f8b\u5982\u793e\u7fa4\u8edf\u9ad4\u4e0a\u7684\u540d\u4eba\uff0c\u6bcf\u6b21\u767c\u6587\u4f9d\u7167\u4ed6\u7684\u4f7f\u7528\u8005 ID\uff08\u6216\u767c\u6587 ID\uff09\uff0c\u6d41\u91cf\u90fd\u6703\u88ab\u5c0e\u9032\u8a72\u5206\u5340\u7684\u6a5f\u5668\u3002
\u4f60\u53ef\u4ee5\u900f\u904e\u4eba\u5de5\u65b9\u5f0f\u5beb\u6b7b\u9032\u7279\u6b8a\u7684\u5217\u8868\uff0c\u6bcf\u6b21\u8a72\u5217\u8868\u88e1\u7684\u4eba\u767c\u6587\uff0c\u5c31\u52a0\u4e0a\u4e00\u4e9b\u96a8\u6a5f\u7684\u503c\u5728\u6587\u7ae0 ID \u524d\u9762\uff08\u4e5f\u5c31\u662f\u4e00\u500b\u6587\u7ae0\u6703\u6709\u591a\u500b ID\uff09\uff0c\u5e6b\u52a9\u5206\u6563\u6d41\u91cf\u3002
\u4f8b\u5982\uff1aTwitter 3% \u7684\u6a5f\u5668\u5c08\u9580\u66ff Justin Bieber \u670d\u52d9
Info
\u7576\u7136\uff0c\u9019\u65b9\u6cd5\u9700\u8981\u505a\u5de5\u53bb\u7ba1\u7406\uff08bookkeeping\uff09\u9019\u4e9b ID\u3002\u7136\u5f8c\u6bcf\u6b21\u5b8c\u6574\u7684\u8b80\u53d6\u5c31\u6703\u9700\u8981\u5206\u6563\u641c\u5c0b\u5230\u591a\u500b\u8cc7\u6599\u5eab\u4e2d\u3002
\u8cc7\u6599\u5eab\u81ea\u52d5\u5e73\u8861\u71b1\u9ede\u4ecd\u662f\u958b\u653e\u7814\u7a76\uff01
"},{"location":"feedback/designing-data-intensive-applications/distributed-partition/#\u8def\u7531","title":"\u8def\u7531","text":"\u7576\u8acb\u6c42\u9032\u4f86\uff0c\u6211\u600e\u9ebc\u77e5\u9053\u8a72\u8cc7\u6599\u5728\u54ea\u88e1\uff1f
\u4e09\u7a2e\u65b9\u5f0f\uff0c\u8b93\u8cc7\u6599\u5eab\u53bb\u8def\u7531\u3001\u900f\u904e\u4e2d\u9593\u4eba\u3001\u8acb\u6c42\u4eba\u81ea\u5df1\u5224\u65b7\u3002\u9019\u4e09\u7a2e\u65b9\u5f0f\u90fd\u4e0d\u96e3\u7406\u89e3\uff0c\u6709\u9ede\u50cf\u662f\u5fae\u670d\u52d9\u4e0b\uff0c \u6211\u8981\u600e\u9ebc\u77e5\u9053\u5c0d\u65b9\u670d\u52d9\u7684 IP \u7684\u6982\u5ff5\uff0c\u4e5f\u5c31\u662f_\u670d\u52d9\u767c\u73fe_\uff08service discovery\uff09\u3002
\u670d\u52d9\u767c\u73fe
\u6709\u5f88\u591a\u516c\u53f8\u5167\u90e8\u767c\u5c55\u81ea\u5df1\u7684_\u670d\u52d9\u767c\u73fe_\u7cfb\u7d71\uff0c \u4e26\u628a\u5b83\u958b\u6e90\u51fa\u4f86\u3002
\u56f0\u96e3\u7684\u554f\u984c\u662f\uff1a\u8981\u600e\u9ebc\u77e5\u9053\u8cc7\u6599\u5728\u8ab0\u8eab\u4e0a\uff1f \u5c24\u5176\u7576\u8cc7\u6599\u5eab\u7684\u8cc7\u6599\u4e00\u76f4\u900f\u904e_\u5e73\u8861_\u91cd\u65b0\u5206\u914d\uff0c\u77e5\u9053\u5373\u6642\u7684\u8cc7\u6599\u4f4d\u7f6e\u5c31\u6703\u8b8a\u5f97\u5f88\u8907\u96dc\u4e86\u3002
"},{"location":"feedback/designing-data-intensive-applications/distributed-partition/#\u7b2c\u4e09\u65b9\u5e6b\u5fd9\u7ba1","title":"\u7b2c\u4e09\u65b9\u5e6b\u5fd9\u7ba1","text":"\u8981\u600e\u9ebc\u77e5\u9053\u8cc7\u6599\u5728\u8ab0\u8eab\u4e0a\uff1f\u7b2c\u4e00\u500b\u65b9\u5f0f\u662f\u6709\u4e00\u500b\u7b2c\u4e09\u65b9\uff08\u5716\u4e2d\u7684\u4f8b\u5b50\u662f\u4f7f\u7528 ZooKeeper\uff09\u53bb\u7d00\u9304\u9019\u4e9b\u8cc7\u6599\u3002
\u807d\u8d77\u4f86\u597d\u50cf\u4e0d\u96e3\uff0c\u5c31\u662f\u518d\u958b\u4e00\u500b\u8cc7\u6599\u5eab\u53bb\u653e\u9019\u4e9b\u8cc7\u6599\uff0c\u4f46\u662f\u5f8c\u9762\u6211\u5011\u6703\u63d0\uff1a \u7576\u6211\u5011\u9700\u8981 \u5206\u6563\u5f0f\u7cfb\u7d71 \u53bb\u5c0d\u67d0\u7a2e\u72c0\u614b\u9054\u6210\u4e00\u500b \u5171\u8b58\uff0c\u662f\u975e\u5e38\u56f0\u96e3\u7684\uff0c\u5f88\u591a\u908a\u969b\u60c5\u6cc1\u6703\u51fa\u73fe\u3002 \u628a\u8a72\u6f14\u7b97\u6cd5\u5be6\u4f5c\u51fa\u4f86\u540c\u6642\u4e5f\u6703\u9700\u8981\u6ce8\u610f\u5f88\u591a\u5c0f\u7d30\u7bc0\uff08\u6709\u9ede\u50cf\u662f\u5bc6\u78bc\u5b78\u4e0a\u7684\u5be6\u4f5c\uff09\uff0c \u900f\u904e\u4e00\u500b\u958b\u6e90\u4e14\u88ab\u5927\u91cf\u4f7f\u7528\u7684\u8edf\u9ad4\uff08\u4f8b\u5982 ZooKeeper\uff09\u4f86\u5c08\u7cbe\u65bc\u9054\u6210\u9019\u4ef6\u4e8b\u662f\u76f8\u5c0d\u5b89\u5168\u7684\u3002
\u7576\u76f8\u95dc\u8cc7\u6599\u88ab\u653e\u5728\u7b2c\u4e09\u65b9\u4e4b\u5f8c\uff0c\u4e0a\u9762\u63d0\u5230\u7684\u4e09\u500b\u65b9\u6cd5\u7684\u4e09\u500b\u5c0d\u8c61\uff1a\u8cc7\u6599\u5eab\u3001\u4e2d\u9593\u4eba\u3001\u8acb\u6c42\u4eba\uff0c \u5c31\u53ef\u4ee5\u53bb\u76e3\u63a7\u9019\u500b\u7b2c\u4e09\u65b9\u7684\u8cc7\u6599\u4e26\u6c7a\u5b9a\u8acb\u6c42\u8a72\u9001\u7d66\u54ea\u500b\u5206\u5340\u3002
\u54ea\u4e9b\u8cc7\u6599\u5eab\u6709\u5be6\u4f5c\u9019\u6771\u897f
\u8cc7\u6599\u5eab\u900f\u904e\u5354\u5b9a\uff08Gossip protocol\uff09\u5f7c\u6b64\u544a\u77e5\u5c0d\u65b9\u76ee\u524d\u8cc7\u6599\u5eab\u7684\u72c0\u614b\uff0c\u4e26\u8b93\u4f7f\u7528\u8a72\u8cc7\u6599\u7684\u8acb\u6c42\u9001\u904e\u53bb\u7d66\u8a72\u8cc7\u6599\u5eab\u3002
\u9019\u65b9\u5f0f\u96d6\u7136\u6703\u589e\u52a0\u8cc7\u6599\u5eab\u8981\u505a\u7684\u4e8b\u60c5\uff0c\u4f46\u662f\u8b93\u5176\u4e0d\u518d\u9700\u8981\u7b2c\u4e09\u65b9\u5354\u52a9\u3002
Cassandra \u548c Riak \u90fd\u662f\u4f7f\u7528\u9019\u65b9\u5f0f\u3002
"},{"location":"feedback/designing-data-intensive-applications/distributed-partition/#\u4e0d\u8981\u81ea\u52d5\u5316\u5e73\u8861","title":"\u4e0d\u8981\u81ea\u52d5\u5316\u5e73\u8861","text":"\u6211\u5011\u524d\u9762\u63d0\u5230\u56f0\u96e3\u7684\u662f\u7576\u8cc7\u6599\u5eab\u7684\u8cc7\u6599\u4e00\u76f4\u900f\u904e\u81ea\u52d5\u5316\u7684_\u5e73\u8861_\u91cd\u65b0\u5206\u914d\uff0c\u5f88\u96e3\u5373\u6642\u5171\u8b58\u6027\u7684\u77e5\u9053\u8cc7\u6599\u4f4d\u7f6e\u3002 \u65e2\u7136\u9019\u6a23\uff0c\u6bcf\u6b21\u5e73\u8861\u90fd\u900f\u904e\u4eba\u5de5\u7684\u65b9\u4f86\u53bb\u505a\uff0c\u4e26\u8a2d\u5b9a\u597d\u6bcf\u53f0\u8cc7\u6599\u5eab\u7684\u8cc7\u6599\u7bc4\u570d\uff0c\u9019\u6a23\u4e8b\u60c5\u5c31\u7c21\u55ae\u4e86 \ud83d\ude00\u3002
Couchbase \u5c31\u662f\u7528\u9019\u65b9\u5f0f\uff0c \u7576 cluster node \u88ab\u66f4\u65b0\u7684\u6642\u5019\uff0c\u5c31\u7d00\u9304\u9019\u4e9b\u5206\u5340\u7684 metadata\u3002
"},{"location":"feedback/designing-data-intensive-applications/distributed-partition/#\u5e73\u8861","title":"\u5e73\u8861","text":"\u91cd\u65b0\u5206\u914d\u8cc7\u6599\u7684\u6642\u5019\u5230\u4e86\u3002
\u8cc7\u6599\u6703\u8d8a\u9577\u8d8a\u5927\uff0c\u9700\u8981\u6709\u65b0\u7684\u8cc7\u6599\u5eab\u5206\u64d4\u5de5\u4f5c\u3002 \u9664\u6b64\u4e4b\u5916\uff0c\u7576\u8cc7\u6599\u5eab\u6e1b\u5c11\uff08\u58de\u6389\u6216\u8a2d\u5b9a\uff09\u4e86\uff0c\u4e5f\u53ef\u80fd\u9700\u8981\u91cd\u65b0\u5206\u914d\u8cc7\u6599\u3002
\u901a\u5e38\u8cc7\u6599\u5eab\u58de\u6389\u6642\u6703\u4f7f\u7528\u8d95\u5de5\uff0c\u800c\u4e0d\u662f\u91cd\u65b0\u5e73\u8861\uff0c\u907f\u514d\u7121\u8b02\u7684\u5e73\u8861\u3002
"},{"location":"feedback/designing-data-intensive-applications/distributed-partition/#\u57fa\u672c\u9700\u6c42","title":"\u57fa\u672c\u9700\u6c42","text":"\u9019\u88e1\u7684\u524d\u63d0\u662f\u6211\u5011\u5df2\u7d93\u6c7a\u5b9a\u597d\u8981\u7528\u4ec0\u9ebc\u65b9\u5f0f\u5206\u5340\uff08\u7bc4\u570d\u5206\u5340\u6216\u8005\u96dc\u6e4a\u5206\u5340\uff09
\u9019\u4e9b\u90fd\u662f\u80cc\u666f\u57f7\u884c\uff0c\u7576\u78ba\u8a8d\u5206\u914d\u5b8c\u4e4b\u5f8c\u518d\u628a\u6d41\u91cf\u5c0e\u904e\u53bb\u3002
"},{"location":"feedback/designing-data-intensive-applications/distributed-partition/#\u81ea\u52d5\u5316\u6216\u624b\u52d5","title":"\u81ea\u52d5\u5316\u6216\u624b\u52d5","text":"\u5e73\u8861\u662f\u8017\u6642\u8017\u5de5\u7684\u884c\u70ba\uff0c\u8981\u8b39\u614e\u7684\u4f7f\u7528\u81ea\u52d5\u5316\uff0c\u6c92\u7528\u597d\u751a\u81f3\u6703\u5c0e\u81f4\u9023\u9396\u53cd\u61c9\uff1a \u56e0\u7bc0\u9ede\u5fd9\u788c\u65bc OLTP \u548c\u5e73\u8861\u5206\u5340\u5c0e\u81f4\u88ab\u5224\u5b9a\u7121\u6cd5\u6b63\u5e38\u904b\u4f5c\u7684\u7bc0\u9ede\uff0c \u6700\u7d42\u88ab\u8feb\u9000\u51fa\u6642\u53c8\u56e0\u70ba\u9700\u8981\u8abf\u6574\u5206\u5340\u5c0e\u81f4\u9032\u4e00\u6b65\u7684\u63d0\u5347\u5176\u4ed6\u7bc0\u9ede\u7684\u5de5\u4f5c\u91cf\u3002
\u524d\u9762\u6211\u5011\u5728\u63d0\u5982\u4f55\u8def\u7531\u7684\u6642\u5019\u5c31\u6709\u8b1b\u5230\u4e00\u500b\u65b9\u6cd5\uff1a\u4e0d\u8981\u81ea\u52d5\u5316\u5e73\u8861\uff0c\u5c31\u662f\u5efa\u7acb\u5728\u624b\u52d5\u5e73\u8861\u662f\u53ef\u88ab\u63a5\u53d7\u7684\u9019\u500b\u524d\u63d0\u3002
Couchbase\u3001Riak\u3001Voldemort \u6703\u81ea\u52d5\u5316\u5e73\u8861\uff0c\u4f46\u662f\u4e0d\u6703\u57f7\u884c\u9019\u500b\u5e73\u8861\uff0c\u800c\u662f\u4ea4\u7531\u7dad\u904b\u4eba\u54e1\u4f86\u6309\u4e0b\u300c\u78ba\u8a8d\u300d\u7684\u6309\u9215\u3002
"},{"location":"feedback/designing-data-intensive-applications/distributed-partition/#\u5176\u4ed6","title":"\u5176\u4ed6","text":"Parallel Database Systems
\u7c21\u55ae\u4f86\u8aaa\u5c31\u662f\u8b93\u5404\u8cc7\u6599\u5eab\u505a\u5b83\u80fd\u505a\u7684\u4e8b\uff0c\u6700\u5f8c\u518d\u4f86\u6574\u5408\u8cc7\u6599\u3002
\u9019\u6771\u897f\u6703\u5f88\u8907\u96dc\uff0c\u6211\u5011\u6703\u7d71\u4e00\u5728\u6279\u6b21\u8655\u7406\u8a0e\u8ad6\uff0c\u4e0d\u904e\u9019\u88e1\u4e5f\u80fd\u611f\u53d7\u5230\u6240\u8b02\u7684\u6279\u6b21\u8655\u7406\uff08batch processing\uff09\u548c\u6392\u7a0b\u8655\u7406\uff08cron-job\uff09\u7684\u5dee\u7570\u3002
\u4ee5\u4e0b\u662f MPP \u4e0d\u540c\u5be6\u4f5c\u65b9\u5f0f\u7684\u8cc7\u6599\u5eab\u5206\u985e\uff1a
Category Example Systems in this Category Classic Aster nCluster, DB2 Parallel Edition, Gamma, Greenplum, Netezza, SQL Server Parallel Data Warehouse, Teradata Columnar Amazon RedShift, C-Store, Infobright, MonetDB, ParAccel, Sybase IQ, Vec- torWise, Vertica MapReduce Cascading, Clydesdale, Google MapReduce, Hadoop, HadoopDB, Hadoop++, Hive, JAQL, Pig Dataflow Dremel, Dryad, Hyracks, Nephele, Pregel, SCOPE, Shark, Spark/Massively Parallel Databases and MapReduce Systems
"},{"location":"feedback/designing-data-intensive-applications/distributed-partition/#\u6b21\u7d22\u5f15","title":"\u6b21\u7d22\u5f15","text":"\u6b21\u7d22\u5f15\u5f88\u597d\u7528\uff0c\u4f46\u662f\u9055\u80cc\u4e86\u5206\u5340\u5929\u751f\u7684\u74b0\u5883\uff0c\u6211\u5011\u6709\u54ea\u4e9b\u9078\u64c7\u5462\uff1f
\u672c\u5730\u7d22\u5f15\u6709\u6642\u5019\u4e5f\u53eb document index\uff1b \u5168\u57df\u7d22\u5f15\u6709\u6642\u5019\u4e5f\u53eb term index\u3002
"},{"location":"feedback/designing-data-intensive-applications/distributed-partition/#\u672c\u5730\u7d22\u5f15","title":"\u672c\u5730\u7d22\u5f15","text":"\u9019\u65b9\u5f0f\u5f88\u55ae\u7d14\uff0c\u5c31\u662f\u6211\u5728\u6211\u80fd\u8655\u7406\u7684\u5730\u65b9\u505a\u597d\u6b21\u7d22\u5f15\u3002
\u4f46\u662f\u7576\u6211\u5011\u8981\u900f\u904e\u6b21\u7d22\u5f15\u641c\u5c0b\u7684\u6642\u5019\uff08\u4ee5\u5716\u4e0a\u70ba\u4f8b\u5c31\u662f\u641c\u5c0b\u300c\u7d05\u8272\u7684\u8eca\u300d\uff09\uff0c\u9700\u8981\u5168\u90e8\u7684\u8cc7\u6599\u5eab\u90fd\u641c\u5c0b\u4e00\u904d\u3002
Info
\u6240\u4ee5\uff0c\u6709\u6642\u5019\u900f\u904e\u6b21\u7d22\u5f15\u7684\u641c\u5c0b\u6703\u53eb\u505a scatter/gather\u3002
\u4f60\u53ef\u80fd\u53ef\u4ee5\u5728\u4e00\u958b\u59cb\u505a\u5206\u5340\u7684\u6642\u5019\uff0c\u5c0d\u4e3b\u9375\u505a\u4e00\u4e9b\u8655\u7406\uff0c\u4f8b\u5982\u7d05\u8272\u7684\u8eca\u524d\u7db4\u52a0\u500b r
\uff0c \u4f46\u662f\u9019\u6a23\u53ef\u80fd\u6703\u9020\u6210_\u71b1\u9ede_\uff0c\u6216\u8005\u6703\u9055\u80cc\u8cc7\u6599\u5eab\u63d0\u4f9b\u7684\u4e00\u4e9b\u5929\u751f\u9650\u5236\uff08constrant\uff09\uff0c\u4f8b\u5982\u81ea\u52d5\u589e\u52a0\u7684 ID\u3002
Example
MongoDB Riak\u3001Cassandra\u3001Elasticsearch\u3001SolrCloud\u3001VoltDB \u90fd\u4f7f\u7528\u9019\u65b9\u5f0f\u3002
"},{"location":"feedback/designing-data-intensive-applications/distributed-partition/#\u5168\u57df\u7d22\u5f15","title":"\u5168\u57df\u7d22\u5f15","text":"\u53e6\u5916\u66ff\u6b21\u7d1a\u7d22\u5f15\u589e\u52a0\u5206\u5340\u908f\u8f2f\uff08\u4ee5\u5716\u4e0a\u70ba\u4f8b\u5c31\u662f\u7d05\u8272\u8eca\u7684 ID \u6703\u9032\u5230_\u5206\u5340 1_\uff09
\u9019\u6642\u6211\u5011\u53ea\u9700\u8981\u6839\u64da\u9019\u500b\u8cc7\u6599\uff0c\u53bb\u627e\u9700\u8981\u7684\u7bc0\u9ede\u5c31\u597d\uff0c\u96d6\u7136\u53ef\u80fd\u9700\u8981\u8de8\u7bc0\u9ede\u53bb\u627e\uff0c\u4f46\u4e0d\u662f\u5168\u90e8\u90fd\u627e\u904e\u4e00\u904d\u3002
\u4f46\u662f\u9019\u6703\u589e\u52a0\u5beb\u5165\u6642\u7684\u6548\u80fd\uff0c\u56e0\u70ba\u662f\u5728\u5beb\u5165\uff0c\u6240\u4ee5\u5c31\u5f88\u53ef\u80fd\u6703\u767c\u751f\u7af6\u8cfd\u72c0\u6cc1\uff0c\u9700\u8981\u5206\u6563\u5f0f\u7684\u4ea4\u6613\uff08\u4e5f\u5c31\u662f \u5171\u8b58 \uff09\u3002
Example
Riak\u3001Oracle data warehous\u3001Amazon DynamoDB \u90fd\u6709\u984d\u5916\u63d0\u4f9b\u9019\u9078\u9805\u3002
\u9019\u7a2e\u5efa\u7acb\u984d\u5916\u7684\u8cc7\u8a0a\u5e6b\u52a9\u6211\u5011\u67e5\u627e\uff0c\u5176\u5be6\u662f\u4e00\u500b\u5f88\u6709\u8da3\u7684\u984c\u6750\uff0c\u6211\u5011\u6703\u5728\u6700\u5f8c\u4e00\u7ae0\u7684\u6642\u5019\uff0c\u900f\u904e\u6211\u5011\u5b78\u5230\u7684\u6240\u6709\u5de5\u5177\uff0c\u518d\u4f86\u8a0e\u8ad6\u8981\u600e\u9ebc\u6709\u6548\u89e3\u9019\u554f\u984c\u3002
"},{"location":"feedback/designing-data-intensive-applications/distributed-partition/#\u8907\u88fd\u5ef6\u9072","title":"\u8907\u88fd\u5ef6\u9072","text":"\u8cc7\u6599\u5eab\u9593\u7684\u8cc7\u6599\u53ea\u56e0\u70ba\u5ef6\u9072\u800c\u5c0e\u81f4\u4e0d\u4e00\u81f4\u3002
\u4e0d\u53ea\u662f\u8907\u88fd\u6703\u5ef6\u9072\u3001\u7576\u57f7\u884c\u591a\u5206\u5340\u7684\u8acb\u6c42\u6642\uff0c\u4e5f\u6703\u6709\u5ef6\u9072\u3002
\u4e0d\u904e\u9019\u88e1\u6211\u5011\u53ea\u6703\u8a0e\u8ad6\u5728\u591a\u8cc7\u6599\u5eab\u56e0\u70ba\u5ef6\u9072\u5c0e\u81f4\u7684\u8cc7\u6599\u4e0d\u4e00\u81f4\u3002 \u800c\u4e14\u50c5\u8ac7\u5230\u300c\u5ef6\u9072\u300d\uff0c\u4e0d\u6703\u8ac7\u5230\u4efb\u4f55\u8cc7\u6599\u5eab\u7121\u6cd5\u56de\u61c9\u6216\u7db2\u8def\u4e2d\u65b7\u5c0e\u81f4\u7684\u4e0d\u4e00\u81f4\uff0c\u56e0\u70ba\u9019\u9700\u8981 \u5171\u8b58\u6f14\u7b97\u6cd5 \u4f86\u5e6b\u6211\u5011\u8655\u7406\u3002
\u4ee5\u4e0b\u5716\u70ba\u4f8b\uff0c\u5c31\u662f\u9001\u7d66 Follower2 \u7684\u8cc7\u6599\u88ab\u4e2d\u65b7\u4e86\uff0c\u6211\u8981\u600e\u9ebc\u5fa9\u539f Follower1 \u7684\u8cc7\u6599\uff1f
"},{"location":"feedback/designing-data-intensive-applications/distributed-partition/#\u8b80\u4f60\u5beb\u7684\u8cc7\u6599","title":"\u8b80\u4f60\u5beb\u7684\u8cc7\u6599","text":"\u56e0\u70ba\u8907\u88fd\u5ef6\u9072\u5c0e\u81f4\u7121\u6cd5\u6b63\u78ba\u300c\u8b80\u4f60\u5beb\u7684\u8cc7\u6599\uff08read-your-own-write\uff09\u300d\u3002\u9019\u6642\u6211\u5011\u53ef\u4ee5\u5728\u7279\u5b9a\u60c5\u6cc1\u4e0b\u5229\u7528\u61c9\u7528\u7a0b\u5f0f\u7684\u908f\u8f2f\u907f\u514d\uff1a
\u5982\u679c\u8cc7\u6599\u5eab\u6709\u505a\u5206\u5340\uff0c\u56e0\u70ba\u4e0d\u540c\u5206\u5340\u6709\u4e0d\u540c Leader\uff0c\u53ef\u4ee5\u8212\u7de9\u9019\u72c0\u6cc1\u3002
"},{"location":"feedback/designing-data-intensive-applications/distributed-partition/#\u55ae\u8abf\u8b80\u53d6","title":"\u55ae\u8abf\u8b80\u53d6","text":"\u55ae\u8abf\u8b80\u53d6\uff08monotonic-read\uff09\u53ef\u4ee5\u907f\u514d\u4f7f\u7528\u8005\u7b2c\u4e8c\u6b21\u8acb\u6c42\u770b\u5230\u7684\u8cc7\u6599\u72c0\u614b\u662f\u7b2c\u4e00\u6b21\u8acb\u6c42\u7684\u820a\u8cc7\u6599\u3002
\u6211\u5011\u53ef\u4ee5\u5f37\u5236\u4f7f\u7528\u8005\u9019\u6b21 session \u53ea\u80fd\u770b\u5230\u540c\u4e00\u53f0 replica \u7684\u8cc7\u6599\u3002\u4f46\u662f replica \u4e0d\u80fd\u670d\u52d9\u6642\uff0c\u4ecd\u6703\u6709\u9019\u72c0\u6cc1\u767c\u751f\u3002
"},{"location":"feedback/designing-data-intensive-applications/distributed-partition/#\u9806\u5e8f\u4e00\u81f4\u8b80\u53d6","title":"\u9806\u5e8f\u4e00\u81f4\u8b80\u53d6","text":"\u9806\u5e8f\u4e00\u81f4\u8b80\u53d6\uff08consistent prefix read\uff09\u548c\u524d\u9762\u55ae\u8abf\u8b80\u53d6\u5f88\u50cf\uff0c\u53ea\u662f\u662f\u7279\u6307\u5206\u5340\u6642\u767c\u751f\u7684\u9806\u5e8f\u6df7\u4e82\u3002
\u6211\u5011\u53ef\u4ee5\u900f\u904e\u4e0a\u6b21\u63d0\u7684\u7248\u672c\u5411\u91cf\u4f86\u907f\u514d\u9019\u4ef6\u4e8b\uff0c\u4f46\u662f\u9700\u8981\u6709\u65b9\u6cd5\u7ba1\u7406\u9019\u4e9b\u7248\u672c\u3002
\u5206\u6563\u5f0f\u8cc7\u6599\u5eab\u53ea\u80fd\u4fdd\u6301\u6700\u7d42\u4e00\u81f4\u6027\uff1f
\u9019\u6a23\u807d\u8d77\u4f86\u5373\u4f7f\u6211\u5011\u5728\u55ae\u53f0\u8cc7\u6599\u80fd\u4fdd\u6301\u5f88\u5f37\u7684\u4e00\u81f4\u6027\uff0c\u5728\u5206\u6563\u5f0f\u8cc7\u6599\u5eab\u4e0b\uff0c\u5c31\u56de\u5230\u6700\u5f31\u7684\u4e00\u81f4\u6027\uff1a \u6700\u7d42\u4e00\u81f4\u6027\uff08eventually consistency\uff09\u55ce\uff1f
\u662f\u6709\u65b9\u6cd5\u53ef\u4ee5\u9054\u6210\u66f4\u5f37\u7684\u4e00\u81f4\u6027\uff0c\u4f46\u662f\u4f60\u6703\u770b\u5230\u5f88\u591a\u8cc7\u6599\u5eab\u6587\u4ef6\u90fd\u8aaa\uff0c\u7576\u4f7f\u7528\u8cc7\u6599\u53e2\u96c6\u7684\u6642\u5019\uff0c \u6211\u5011\u53ea\u63d0\u4f9b\u6700\u7d42\u4e00\u81f4\u6027\uff0c\u9019\u662f\u56e0\u70ba\u9054\u6210\u66f4\u5f37\u7684\u4e00\u81f4\u6027\u5e38\u5e38\u6703\u5e36\u4f86\u5f88\u591a\u6548\u80fd\u548c\u9ad8\u4e00\u81f4\u6027\u7684\u72a7\u7272\u3002
\u6211\u5011\u4e5f\u6703\u5728\u6700\u5f8c\u4e00\u7ae0\u8a0e\u8ad6\u9664\u4e86\u5206\u6563\u5f0f\u7684\u4ea4\u6613\uff08\u5171\u8b58\u6f14\u7b97\u6cd5\uff09\u4e4b\u5916\uff0c\u6211\u5011\u9084\u6709\u4ec0\u9ebc\u597d\u65b9\u6cd5\u53ef\u4ee5\u4e0d\u72a7\u7272\u9ad8\u53ef\u7528\u6027\u5462\uff1f
"},{"location":"feedback/designing-data-intensive-applications/distributed-partition/#\u7e3d\u7d50","title":"\u7e3d\u7d50","text":"\u5206\u5340\u7684\u6982\u5ff5\u5f88\u591a\u90fd\u6703\u91cd\u898b\u65bc_\u6279\u6b21\u8655\u7406_\u4e2d\uff0c\u5230\u6642\u6703\u518d\u628a\u9019\u4e3b\u984c\u91cd\u65b0\u6293\u51fa\u4f86\u8a0e\u8ad6\u3002
"},{"location":"feedback/designing-data-intensive-applications/distributed-replication/","title":"\u5206\u6563\u5f0f\u8cc7\u6599\u5eab\u2014\u8907\u88fd","text":"\u70ba\u4e86\u8b93\u8cc7\u6599\u5eab\u5099\u4efd\u3001\u9ad8\u53ef\u7528\u6027\u3001\u4f4e\u6f5b\u6642\u3002
HackMD \u5831\u544a
"},{"location":"feedback/designing-data-intensive-applications/distributed-replication/#\u70ba\u4ec0\u9ebc","title":"\u70ba\u4ec0\u9ebc","text":"\u70ba\u4ec0\u9ebc\u8981\u8b93\u8cc7\u6599\u5eab\u9032\u884c\u8907\u88fd\uff1f\u4e3b\u8981\u662f\u4e09\u500b\u539f\u56e0\uff1a
\u55ae\u53f0\u6a5f\u5668\u5176\u5be6\u5728\u5176\u6210\u9577\u904e\u7a0b\u4e5f\u662f\u6709\u4e00\u6a23\u7684\u554f\u984c\u3002
\u9019\u6b21\u8ac7\u7684\u8cc7\u6599\u5eab\u9593\u7684\u8907\u88fd\u90fd\u662f\u5efa\u7acb\u5728\u7121\u5171\u4eab\u67b6\u69cb\u4e4b\u4e0a\uff0c\u4e5f\u5c31\u662f\u5169\u53f0\u6a5f\u5668\u662f\u5f7c\u6b64\u7368\u7acb\u7684\uff1a\u4e00\u53f0\u6a5f\u5668\u88ab\u71d2\u5f97\u7cbe\u5149\u4e4b\u5f8c\uff0c\u53e6\u4e00\u53f0\u6a5f\u5668\u4ecd\u80fd\u6b63\u5e38\u904b\u884c\u3002
\u4f46\u662f\u4ed6\u5011\u4ecd\u7136\u5171\u4eab\u67d0\u7a2e\u5354\u5b9a\uff0c\u4f8b\u5982\u6e9d\u901a\u65b9\u5f0f\u90fd\u662f\u900f\u904e\u7db2\u969b\u7db2\u8def\u6216\u8005\u90fd\u662f\u5728\u540c\u4e00\u500b\u6a5f\u623f\u4f7f\u7528\u540c\u4e00\u500b\u96fb\u529b\u4f86\u6e90\u3002
\u6703\u63a1\u7528\u7121\u5171\u4eab\u67b6\u69cb\u7684\u539f\u56e0\u5c31\u662f\u56e0\u70ba\u5e7e\u4e4e\u6c92\u6709\u9650\u5236\u7684\u64f4\u589e\u6027\u548c\u5176\u5e36\u4f86\u7684\u6210\u672c\u50c5\u50c5\u53ea\u662f\u7dda\u6027\u6210\u9577\u800c\u5df2\u3002
"},{"location":"feedback/designing-data-intensive-applications/distributed-replication/#\u5206\u6563\u5f0f\u8cc7\u6599\u5eab","title":"\u5206\u6563\u5f0f\u8cc7\u6599\u5eab","text":"\u5206\u6563\u5f0f\u8cc7\u6599\u5eab\uff0c\u5c31\u662f\u591a\u53f0\u8cc7\u6599\u5eab\u9032\u884c\u5c0d\u8cc7\u6599\u7684\u8655\u7406\u3002
\u8981\u8b93\u591a\u53f0\u8cc7\u6599\u5eab\u5408\u4f5c\u5b8c\u6210\u61c9\u7528\u7a0b\u5f0f\u7684\u6307\u4ee4\uff0c\u5c31\u9700\u8981\u5171\u540c\u9075\u5b88\u67d0\u4e00\u500b\u8655\u7406\u6a5f\u5236\u3002\u9019\u6a5f\u5236\u53ef\u80fd\u662f
Info
\u56e0\u70ba\u8cc7\u6599\u662f\u6301\u7e8c\u8b8a\u52d5\u7684 (OLTP)\uff0c\u6240\u4ee5\u96e3\u3002
\u5176\u4e2d\u5728\u505a\u5206\u6563\u5f0f\u8cc7\u6599\u5eab\u7684\u6642\u5019\uff0c\u4e3b\u8981\u6703\u9700\u8981\u8655\u7406\u5169\u500b\u6771\u897f\uff1a
\u8907\u88fd\u9700\u8981\u505a\u540c\u6b65\uff0c\u800c\u5176\u4e2d\u7684\u53d6\u6368\u5c31\u597d\u50cf\u524d\u9762\u5728\u8a0e\u8ad6\u7af6\u8cfd\u554f\u984c\u6642\u8cc7\u6599\u4e00\u81f4\u6027\u7684\u53d6\u6368\uff0c\u8981\u6c42\u8d8a\u9ad8\u7684\u540c\u6b65\u7387\u5c31\u6703\u9762\u81e8\u8f03\u4f4e\u7684\u6548\u80fd\u3002\u7136\u800c\u5f85\u6703\u6211\u5011\u53ef\u4ee5\u770b\u5230\uff0c\u900f\u904e\u5354\u8abf\u8005\uff0c\u5728\u8cc7\u6599\u6eff\u8db3\u7279\u5b9a\u689d\u4ef6\u4e0b\uff0c\u53ef\u4ee5\u505a\u5230\u5169\u5168\u5176\u7f8e\uff1f
\u5206\u5340\u6703\u628a\u8cc7\u6599\u653e\u5728\u4e0d\u540c\u7684\u8cc7\u6599\u5eab\uff0c\u4f8b\u5982\uff1a\u4f7f\u7528\u8005 1-50 \u653e\u5728 \u8cc7\u6599\u5eab 1\uff0c\u4f7f\u7528\u8005 51-100 \u653e\u5728 \u8cc7\u6599\u5eab 2\u3002\u5176\u6ce8\u91cd\u7684\u662f\u5982\u4f55\u505a\u5230\u7d22\u5f15\u3001\u8cc7\u6599\u91cf\u7684\u5e73\u8861\u548c\u5f7c\u6b64\u9593\u7684\u5354\u4f5c\u3002
\u9019\u88e1\u8981\u6ce8\u610f\u7684\u662f\u5169\u8005\u6240\u4f7f\u7528\u7684\u6f14\u7b97\u6cd5\u662f\u53ef\u4ee5\u7368\u7acb\u5340\u5206\u7684\u3002\u4e00\u822c\u4f86\u8aaa\u4efb\u4e00\u8907\u88fd\u7684\u6f14\u7b97\u6cd5\u53ef\u4ee5\u642d\u914d\u4efb\u4e00\u5206\u5340\u7684\u6f14\u7b97\u6cd5\u3002
"},{"location":"feedback/designing-data-intensive-applications/distributed-replication/#\u6982\u7565\u5716","title":"\u6982\u7565\u5716","text":"\u8907\u88fd\u548c\u5206\u5340\u901a\u5e38\u662f\u540c\u6642\u5b58\u5728\u7684\uff0c\u6240\u4ee5\u6211\u5011\u6703\u540c\u6642\u5229\u7528\u8907\u88fd\u548c\u5206\u5340\uff0c\u9054\u6210\u5206\u6563\u5f0f\u8cc7\u6599\u5eab\u3002\u4ed6\u5011\u5169\u500b\u65b9\u5f0f\u5206\u5225\u8981\u8655\u7406\u7684\u6771\u897f\u90fd\u4e0d\u592a\u4e00\u6a23\uff1a
\u4e0d\u904e\u6211\u5011\u9019\u6b21\u6703\u5148\u4ecb\u7d39\u8907\u88fd\uff0c\u4e4b\u5f8c\u518d\u4ecb\u7d39\u5206\u5340\u3002\u6240\u4ee5\u4ee5\u4e0b\u7684\u8a0e\u8ad6\u90fd\u662f\u5047\u8a2d\u73fe\u6709\u7684\u8cc7\u6599\u91cf\u53ef\u4ee5\u7528\u4e00\u53f0\u6a5f\u5668\u4f86\u5bb9\u7d0d\u3002
"},{"location":"feedback/designing-data-intensive-applications/distributed-replication/#\u600e\u9ebc\u8907\u88fd","title":"\u600e\u9ebc\u8907\u88fd\uff1f","text":"\u4e2d\u6587 \u7d71\u4e00 \u5176\u4ed6 \u55ae\u4e00\u9818\u8896 leader/follower master/slave(standby), active/passive, primary/secondary \u591a\u9818\u8896 multi-leader master/master, active/active \u7121\u9818\u8896 leaderless dynamo-style\u4e09\u7a2e\u65b9\u6cd5\u5c0d\u61c9\u524d\u9762\u63d0\u7684\uff1a\u9818\u8896\u3001\u5404\u81ea\u70ba\u653f\u3001\u5354\u8abf\u8005\u3002\u4ee5\u4e0b\u90fd\u6703\u7d71\u4e00\u8aaa\u6cd5\u70ba\u55ae\u4e00\u9818\u8896\u3001\u591a\u9818\u8896\u3001\u7121\u9818\u8896\u3002
"},{"location":"feedback/designing-data-intensive-applications/distributed-replication/#\u4e09\u7a2e\u65b9\u5f0f\u7684\u6bd4\u8f03","title":"\u4e09\u7a2e\u65b9\u5f0f\u7684\u6bd4\u8f03","text":"\u9019\u4e09\u7a2e\u65b9\u5f0f\u90fd\u6709\u5176\u5e36\u4f86\u7684\u7f3a\u9ede\u548c\u512a\u9ede\uff0c\u63a5\u4e0b\u4f86\u6211\u5011\u5c31\u662f\u8981\u4f86\u8ac7\u8ac7\u5404\u81ea\u9700\u8981\u8003\u616e\u7684\u6b0a\u8861\u3002
\u7136\u800c\uff0c\u4e0d\u8ad6\u4efb\u4f55\u4e00\u7a2e\u8907\u88fd\u65b9\u5f0f\u90fd\u8981\u9762\u5c0d\u8d95\u5de5\u548c\u540c\u6b65\u5ef6\u9072\u3002
\u8d95\u5de5\uff08catch up\uff09\u5c31\u662f\u7576\u8cc7\u6599\u5eab\u505c\u6b62\u904b\u4f5c\u6642\uff08\u7528\u4f86\u7dad\u4fee\u6216\u610f\u5916\u7684\u58de\u6389\uff09\uff0c\u5982\u4f55\u8b93\u8cc7\u6599\u8ddf\u4e0a\uff08\u4e0d\u7ba1\u662f\u5f9e\u820a\u7684\u72c0\u614b\u6216\u8005\u5f9e\u5b8c\u5168\u7a7a\u767d\u7684\u72c0\u614b\uff09\u6700\u65b0\u7684\u72c0\u614b\u3002\u5176\u4f5c\u6cd5\uff1a
\u81f3\u65bc\u5ef6\u9072\uff0c\u6211\u5011\u6703\u7d71\u4e00\u5728\u4e0b\u4e00\u7ae0\u7684\u5206\u5340\u8a0e\u8ad6\u3002
\u96d6\u7136\u7121\u9818\u8896\u6c92\u6709\u628a\u540c\u7570\u6b65\u653e\u9032\u53bb\uff0c\u4f46\u5be6\u969b\u4e0a\uff0c\u4ed6\u4e5f\u662f\u9700\u8981\u88ab\u8003\u616e\u7684\uff0c\u53ea\u662f\u5927\u90e8\u5206\u8cc7\u6599\u5eab\u5be6\u4f5c\u90fd\u662f\u540c\u6642\u5b58\u5728\uff0c\u7570\u65bc\u6709\u9818\u8896\u6642\u7684\u8907\u88fd\u5927\u90e8\u5206\u90fd\u662f\u7d14\u7570\u6b65\u3002
"},{"location":"feedback/designing-data-intensive-applications/distributed-replication/#\u55ae\u4e00\u9818\u8896","title":"\u55ae\u4e00\u9818\u8896","text":"\u55ae\u4e00\u9818\u8896\u5c31\u662f\u4e00\u53f0\u8cc7\u6599\u5eab\uff08leader\uff09\u8ca0\u8cac\u5beb\u5165\u8cc7\u6599\uff0c\u5269\u4e0b\u7684\u8cc7\u6599\u5eab\uff08follower\uff09\u8ca0\u8cac\u540c\u6b65\u8cc7\u6599\u4e26\u63d0\u4f9b\u4f7f\u7528\u8005\u8b80\u53d6\u8cc7\u6599\u3002
\u4e0a\u5716\u4e2d\u7684 Replication streams \u5373\u662f\u5728\u9818\u8896\u5f97\u5230\u8cc7\u6599\u5f8c\uff0c\u628a\u76f8\u95dc\u8cc7\u8a0a\u50b3\u905e\u7d66\u8ffd\u96a8\u8005\uff0c \u81f3\u65bc\u300c\u76f8\u95dc\u8cc7\u8a0a\u300d\u662f\u4ec0\u9ebc\uff0c\u5f8c\u9762\u6703\u63d0\u3002
\u63a5\u4e0b\u4f86\u6211\u5011\u5c31\u4f86\u770b\u770b\u55ae\u4e00\u9818\u8896\u6709\u54ea\u4e9b\u6b0a\u8861\u3002
\u9806\u5e8f\u6703\u662f\uff1a
\u524d\u9762\u63d0\u7684\u8d95\u5de5\u554f\u984c\uff0c\u9019\u908a\u8a0e\u8ad6\u4e09\u7a2e\u72c0\u6cc1\u3002\u5206\u5225\u662f
\u57fa\u672c\u4e0a\u4e0d\u7ba1\u54ea\u7a2e\u8907\u88fd\u65b9\u5f0f\uff08\u55ae\u4e00\u9818\u8896\u3001\u591a\u9818\u8896\u3001\u7121\u9818\u8896\uff09\u90fd\u662f\u9019\u6a23\u7684\u9806\u5e8f\u3002\u82e5\u6709\u9818\u8896\u5247\u628a\u9818\u8896\u7684\u8cc7\u6599\u8907\u88fd\u5230\u8ffd\u96a8\u8005\u8eab\u4e0a\uff0c\u53cd\u4e4b\u5247\u6311\u4e00\u500b\u6700\u65b0\u7684\u8cc7\u6599\u5eab\u8907\u88fd\u3002
\u7531\u65bc\u8cc7\u6599\u662f\u4e00\u76f4\u6301\u7e8c\u7684\uff08OLTP\uff09\uff0c\u7576\u8907\u88fd\u904e\u53bb\u5f8c\uff0c\u9700\u8981\u6709\u6a5f\u5236\u8b93\u4ed6\u628a\u6700\u65b0\u8cc7\u6599\u88dc\u4e0a\u3002
\u6a5f\u5236\u5927\u81f4\u5982\u4e0b\uff1a
\u548c\u524d\u9762\u7684\u5f88\u50cf\uff0c\u5c31\u662f\u57f7\u884c\u5f8c\u9762\u5169\u52d5\uff1a\u88dc\u4e0a\u6700\u65b0\u8cc7\u6599\u3001\u6649\u5347\u8ffd\u96a8\u8005\u3002
"},{"location":"feedback/designing-data-intensive-applications/distributed-replication/#\u9818\u8896\u91cd\u555f","title":"\u9818\u8896\u91cd\u555f","text":"\u7576\u9818\u8896\u5931\u80fd\u6642\uff0c\u6211\u5011\u9700\u8981\u57f7\u884c \u6545\u969c\u5207\u63db\uff08failover\uff09\u7684\u52d5\u4f5c\u3002\u5176\u9806\u5e8f\u5982\u4e0b\uff1a
\u4ee5\u4e0b\u662f GitHub \u9047\u5230\u9818\u8896\u91cd\u555f\u5f8c\uff0c\u6368\u68c4\u5c1a\u672a\u540c\u6b65\u7684\u8cc7\u6599\u6240\u9020\u6210\u7684\u72c0\u6cc1
\u5176\u4e3b\u8981\u539f\u56e0\u662f\u56e0\u70ba\u4e3b\u9375\u6709\u905e\u589e\u7684\u6a21\u5f0f\uff0c\u4f46\u662f\u8cc7\u6599\u5eab\u91cd\u555f\u5f8c\uff0c\u5176\u905e\u589e\u5f8c\u7684\u8cc7\u6599\u907a\u5931\u4e86\uff0c\u5c0e\u81f4\u8cc7\u6599\u4e0d\u540c\u6b65\u3002
"},{"location":"feedback/designing-data-intensive-applications/distributed-replication/#\u540c\u7570\u6b65","title":"\u540c\u7570\u6b65","text":"\u540c\u7570\u6b65\u662f\u9700\u8981\u505a\u6b0a\u8861\u7684\u3002
\u5b8c\u5168\u7684\u540c\u6b65\u6703\u8b93\u6f5b\u6642\u8b8a\u5f97\u5f88\u4e0d\u7a69\uff0c\u540c\u6642\u55ae\u53f0\u8cc7\u6599\u5eab\u82e5\u58de\u6389\u4e86\uff0c\u5c31\u6703\u5c0e\u81f4\u5168\u90e8\u8cc7\u6599\u7121\u6cd5\u5beb\u5165\uff0c\u9019\u5c31\u9055\u80cc\u4e86\u7576\u521d\u5efa\u7acb\u591a\u53f0\u8cc7\u6599\u5eab\u4ee5\u63d0\u5347\u53ef\u7528\u6027\u7684\u539f\u5247\u3002
\u5b8c\u5168\u7684\u7570\u6b65\u53c8\u6703\u8b93\u8cc7\u6599\u7684\u4e00\u81f4\u6027\u8b8a\u5f97\u5f88\u4e0d\u7a69\uff0c\u9019\u4e5f\u6703\u7834\u58de\u6211\u5011\u4e0a\u4e00\u6b21\u8a0e\u8ad6\u7684\u55ae\u53f0\u8cc7\u6599\u5eab\u8f9b\u82e6\u5efa\u7acb\u7684\u4e00\u81f4\u6027\uff0c\u8b93\u524d\u9762\u63d0\u5230\u7684\u7af6\u8cfd\u72c0\u6cc1\u90fd\u53ef\u80fd\u767c\u751f\u3002
\u6709\u4e9b\u8cc7\u6599\u5eab\u7684\u505a\u6cd5\u662f\u53d6\u5176\u5e73\u8861\u4f7f\u7528\u534a\u540c\u6b65\uff08semi-synchronous\uff09\uff0c\u5982\u5716\u4e0a\u6240\u793a\u3002\u4e0d\u904e\u5927\u90e8\u5206\u55ae\u4e00\u9818\u8896\u7684\u8cc7\u6599\u53e2\u96c6\u90fd\u63a1\u7528\u5b8c\u5168\u7684\u7570\u6b65\uff0c\u4ee5\u8ffd\u6c42\u9ad8\u53ef\u7528\u6027\u3002
"},{"location":"feedback/designing-data-intensive-applications/distributed-replication/#\u8907\u88fd\u65e5\u8a8c","title":"\u8907\u88fd\u65e5\u8a8c","text":"\u524d\u9762\u63d0\u4e86\u5f88\u591a\u9818\u8896\u628a\u8cc7\u6599\u8f49\u5230\u8ffd\u96a8\u8005\u6642\u6703\u9047\u5230\u7684\u554f\u984c\u548c\u6b0a\u8861\u3002\u4f46\u662f\u90fd\u6c92\u63d0\u4ed6\u600e\u9ebc\u628a\u8cc7\u6599\u8f49\u5230\u8ffd\u96a8\u8005\u7684\u3002\u57fa\u672c\u4e0a\u6709\u4e09\u7a2e\uff1a
NOW()
\u3001RAND()
\u3001AUTO_INCR()
\u7b49\u7b49\u3002WHERE <some condition>
\uff0c\u5247\u6703\u8981\u6c42\u6240\u6709\u8cc7\u6599\u5eab\u72c0\u614b\u90fd\u662f\u4e00\u81f4\u7684\uff0c\u5426\u5247\u5f88\u5bb9\u6613\u56e0\u70ba\u72c0\u614b\u4e0d\u4e00\u81f4\u5c0e\u81f4\u57f7\u884c\u7d50\u679c\u4e0d\u4e00\u6a23\u3002UPDATE users SET age = age + 10 WHERE age < 10
\u5247\u53ef\u80fd\u50b3\u905e\u66f4\u65b0\u7684\u4f7f\u7528\u8005 ID \u548c\u5176\u66f4\u65b0\u5f8c\u7684\u8cc7\u6599\u3002\u4f7f\u7528\u9019\u65b9\u5f0f\u7684\u6709 MySQL \u7684 binlog\u3002\u9664\u6b64\u4e4b\u5916\uff0c\u4ed6\u4e5f\u65b9\u4fbf\u900f\u904e ETL \u7b49\u65b9\u5f0f\u88fd\u4f5c\u5176\u4ed6 \u884d\u751f\u8cc7\u6599 \u3002\u56e0\u70ba\u55ae\u4e00\u8cc7\u6599\u4e2d\u5fc3\uff08data center\uff09\u8cc7\u6599\u5eab\u5f7c\u6b64\u4e4b\u9593\u4e0d\u6703\u76f8\u8ddd\u592a\u9060\uff0c\u6240\u4ee5\u9069\u5408\u9019\u7a2e\u65b9\u5f0f\u3002\u4f46\u662f\u5982\u679c\u6709\u4efb\u4e00\u53f0\u5728\u76f8\u8ddd\u9059\u9060\u7684\u5730\u65b9\uff0c\u5247\u6703\u8b93\u9019\u500b\u8cc7\u6599\u5eab\u53e2\u96c6\u7684\u540c\u6b65\u6027\u8b8a\u5f97\u5f88\u4e0d\u7a69\u5b9a\u3002
\u7531\u65bc\u8cc7\u6599\u90fd\u662f\u5f9e\u9818\u8896\u5beb\u5165\uff0c\u6240\u4ee5\u524d\u9762\u63d0\u7684\u55ae\u4e00\u8cc7\u6599\u5eab\u4e0b\u7684\u4ea4\u6613\u6a5f\u5236\u53ef\u4ee5\u904b\u884c\u7684\u5f88\u9806\u5229\u3002\u4f46\u662f\u4ecd\u6709\u8cc7\u6599\u53e2\u96c6\u5167\u7684\u591a\u8cc7\u6599\u5eab\u4e00\u81f4\u6027\u554f\u984c\u3002
"},{"location":"feedback/designing-data-intensive-applications/distributed-replication/#\u591a\u9818\u8896","title":"\u591a\u9818\u8896","text":"\u5982\u679c\u55ae\u4e00\u9818\u8896\u5931\u80fd\uff0c\u6703\u6709\u4e00\u6bb5\u6642\u9593\u4e0d\u80fd\u904b\u884c\uff0c\u76f4\u89ba\u4e0a\u5c31\u662f\u8b93\u9818\u8896\u8b8a\u6210\u591a\u500b\u3002\u4f46\u662f\u5be6\u969b\u4e0a\uff0c\u5f88\u5c11\u8cc7\u6599\u5eab\u63a1\u7528\u9019\u65b9\u5f0f\uff0c\u56e0\u70ba\u4ed6\u6703\u5e36\u4f86\u5f88\u591a\u885d\u7a81\u548c\u932f\u8aa4\u3002
\u5982\u679c\u4f60\u7684\u74b0\u5883\u53ea\u6709\u4e00\u500b\u8cc7\u6599\u4e2d\u5fc3\uff0c\u90a3\u53ef\u80fd\u5c31\u4e0d\u9700\u8981\u9019\u9ebc\u8907\u96dc\u7684\u6a5f\u5236\uff0c\u76f8\u5c0d\u800c\u8a00\u7576\u6709\u591a\u500b\u8cc7\u6599\u4e2d\u5fc3\u6642\uff0c\u6211\u5011\u5c31\u53ef\u4ee5\u7528\u9019\u65b9\u5f0f\uff0c\u4f46\u662f\u8acb\u5c0f\u5fc3\u4f7f\u7528\u3002
\u6709\u4e9b\u8cc7\u6599\u5eab\u9810\u8a2d\u652f\u63f4\u591a\u9818\u8896\u7684\u53e2\u96c6\uff0c\u6709\u4e9b\u9700\u8981\u5916\u90e8\u5de5\u5177\u652f\u63f4\uff0c\u4f8b\u5982 MySQL \u7684 Tungsten Replicator\u3001PostgreSQL \u7684 BDR\u3001Oracle \u7684 GoldenGate
\u524d\u9762\u5df2\u7d93\u8a0e\u8ad6\u5b8c\u6709\u9818\u8896\u6642\u9700\u8981\u6ce8\u610f\u7684_\u8907\u88fd\u65e5\u8a8c_\u548c_\u540c\u7570\u6b65_\u3002\u63a5\u4e0b\u4f86\u6703\u8457\u91cd\u5728\u591a\u9818\u8896\u9700\u8981\u6ce8\u610f\u7684\u8655\u7406\u885d\u7a81\u548c\u68b3\u7406\u56e0\u679c\u3002
\u9806\u5e8f\u6703\u662f\uff1a
\u5728\u6548\u80fd\u4e0a\uff0c\u4e0d\u53ea\u662f\u5beb\u5165\u7684\u8cc7\u6599\u5eab\u8b8a\u591a\uff0c\u53ef\u4ee5\u5206\u64d4\uff0c\u66f4\u91cd\u8981\u7684\u662f\u53ef\u4ee5\u653e\u7f6e\u5728\u591a\u500b\u8cc7\u6599\u4e2d\u5fc3\uff0c\u9019\u6642\u5c31\u53ef\u4ee5\u6839\u64da\u4f7f\u7528\u8005\u628a\u8acb\u6c42\u9001\u5230\u6bd4\u8f03\u8fd1\u7684\u8cc7\u6599\u4e2d\u5fc3\u3002
\u5728\u5bb9\u932f\u4e0a\uff0c\u56e0\u70ba\u653e\u5728\u591a\u53f0\u8cc7\u6599\u4e2d\u5fc3\uff0c\u4efb\u4e00\u500b\u8cc7\u6599\u4e2d\u5fc3\u7684\u57fa\u790e\u8a2d\u65bd\u640d\u5bb3\u4e26\u4e0d\u6703\u9020\u6210\u5168\u9762\u6027\u7684\u505c\u64fa\u3002\u4e5f\u53ef\u4ee5\u907f\u514d\u55ae\u4e00\u9818\u8896\u56e0\u70ba\u9818\u8896\u5931\u80fd\u5c0e\u81f4\u670d\u52d9\u7d42\u6b62\u7684\u72c0\u6cc1\uff0c\u56e0\u70ba\u5176\u4ed6\u9818\u8896\u6703\u5e6b\u5fd9\u5206\u64d4\u8acb\u6c42\uff0c\u4e26\u7b49\u5f85\u5931\u80fd\u9818\u8896\u88ab\u66ff\u63db\u3002
"},{"location":"feedback/designing-data-intensive-applications/distributed-replication/#\u591a\u9818\u8896\u7684\u58de\u8655","title":"\u591a\u9818\u8896\u7684\u58de\u8655","text":"\u4ed6\u6703\u7834\u58de\u5f88\u591a\u8cc7\u6599\u5eab\u539f\u6709\u7684\u529f\u80fd\uff0c\u4f8b\u5982\uff0c\u81ea\u52d5\u589e\u52a0\u7684 ID\u3001\u8cc7\u6599\u9650\u5236\uff08constraints\uff09\u7b49\u7b49\u3002\u9664\u6b64\u4e4b\u5916\uff0c\u7576\u591a\u53f0\u8cc7\u6599\u5eab\u540c\u6642\u5beb\u5165\u6642\u52e2\u5fc5\u5c31\u9700\u8981\u8655\u7406\u5169\u500b\u5beb\u5165\u7684\u885d\u7a81\u3002\u5c31\u50cf\u524d\u9762\u63d0\u7684\uff0c\u6709\u6642\u5019\u885d\u7a81\u4e0d\u90a3\u9ebc\u660e\u986f\uff0c\u4f8b\u5982\u8a02\u7968\u554f\u984c\u3002
"},{"location":"feedback/designing-data-intensive-applications/distributed-replication/#\u591a\u9818\u8896\u5176\u5be6\u5f88\u5e38\u767c\u751f","title":"\u591a\u9818\u8896\u5176\u5be6\u5f88\u5e38\u767c\u751f","text":"\u4f8b\u5982\u624b\u6a5f\u4e2d\u7684\u65e5\u66c6\u61c9\u7528\u7a0b\u5f0f\uff0c\u4f60\u7684\u624b\u6a5f\u5373\u4f7f\u6c92\u6709\u7db2\u8def\uff0c\u4ecd\u8981\u53ef\u4ee5\u7d00\u9304\u884c\u7a0b\u65bc\u65e5\u66c6\u4e2d\uff0c\u4e26\u4e14\u5728\u91cd\u65b0\u4e0a\u7dda\u4e4b\u5f8c\uff0c\u548c\u8cc7\u6599\u5eab\u7684\u8cc7\u6599\u6574\u5408\u518d\u4e00\u8d77\u3002\u4f46\u662f\u6574\u5408\u7684\u8cc7\u6599\u53ef\u80fd\u6703\u56e0\u70ba\u4f60\u540c\u4e00\u6642\u9593\u53c8\u5728\u5176\u4ed6\u88dd\u7f6e\uff08\u4f8b\u5982\u7b46\u96fb\uff09\u66f4\u65b0\u8cc7\u6599\u5c0e\u81f4\u6709\u885d\u7a81\u3002
\u9019\u60c5\u6cc1\u5c31\u597d\u50cf\u591a\u9818\u8896\u7684\u8cc7\u6599\u53e2\u96c6\uff0c\u9019\u6642\u540c\u6b65\u7684\u5ef6\u9072\u53ef\u80fd\u5c31\u4e0d\u662f\u597d\u5e7e\u79d2\u800c\u662f\u597d\u5e7e\u5929\u3002CouchDB \u5c31\u662f\u5c08\u9580\u8a2d\u8a08\u8655\u7406\u9019\u7a2e\u72c0\u6cc1\u7684\u8cc7\u6599\u5eab\u3002
\u7b2c\u4e8c\u7a2e\u72c0\u6cc1\u5c31\u662f\u7de8\u8f2f\u7dda\u4e0a\u6587\u4ef6\uff0c\u4f8b\u5982 Google Doc/HackMD\u3002\u76f4\u5f97\u6ce8\u610f\u7684\u662f\uff0c\u7576\u6211\u5011\u5728\u7de8\u8f2f\u6642\uff0c\u901a\u5e38\u8a72\u7dda\u4e0a\u6587\u4ef6\u6703\u6a19\u793a\u54ea\u500b\u4eba\u6b63\u5728\u54ea\u500b\u5730\u65b9\u7de8\u8f2f\uff0c\u9019\u9ebc\u505a\u5176\u5be6\u5c31\u80fd\u5927\u5927\u964d\u4f4e\u540c\u6642\u7de8\u8f2f\u76f8\u540c\u5730\u65b9\u9020\u6210\u7684\u885d\u7a81\u3002
"},{"location":"feedback/designing-data-intensive-applications/distributed-replication/#\u62d3\u64b2","title":"\u62d3\u64b2","text":"\u7576\u9818\u8896\u8d85\u904e\u5169\u500b\u7684\u6642\u5019\uff0c\u5f7c\u6b64\u9593\u6e9d\u901a\u7684\u8def\u5f91\u5c31\u6703\u6709\u5f88\u591a\u7a2e\uff0c\u4e0a\u9762\u63d0\u7684\u662f\u5e38\u898b\u7684\u4e09\u7a2e\u3002
MySQL \u9810\u8a2d\u50c5\u652f\u63f4\u74b0\u72c0\u62d3\u64b2\uff0c\u800c\u74b0\u72c0\u62d3\u64b2\u548c\u661f\u72c0\uff08\u6216\u7a31\u6a39\u72c0\uff09\u62d3\u64b2\u6703\u8ce6\u4e88\u6bcf\u500b\u7bc0\u9ede\u4e00\u500b ID\uff0c\u4e26\u5728\u8907\u88fd\u904e\u7a0b\u4e2d\uff0c\u5728\u8907\u88fd\u65e5\u8a8c\u4e2d\u52a0\u4e0a\u5404\u81ea\u7684 ID\uff0c\u7528\u4f86\u4ee3\u8868\u4ed6\u5df2\u7d93\u8dd1\u904e\u9019\u500b\u8cc7\u6599\u3002\u907f\u514d\u8a72\u8cc7\u6599\u4e00\u76f4\u88ab\u4e1f\u9032\u8907\u88fd\u7684\u8f2a\u8ff4\u4e2d\u3002
\u4e0d\u904e\u74b0\u72c0\u62d3\u64b2\u548c\u661f\u72c0\u62d3\u64b2\u90fd\u6703\u6709\u500b\u7f3a\u9ede\u5c31\u662f\u7576\u5176\u4e2d\u4e00\u500b\u62d3\u64b2\u65b7\u7dda\u4e86\uff0c\u5f88\u53ef\u80fd\u6703\u5c0e\u81f4\u8907\u88fd\u7684\u9023\u7d50\u4e2d\u65b7\uff0c\u7136\u5f8c\u5927\u5bb6\u5fc5\u9808\u7b49\u4ed6\u5fa9\u539f\u3002
\u6700\u5e38\u898b\u7684\u662f\u7b2c\u4e09\u7a2e\uff0call-to-all\u3002\u4e0d\u904e\u4ed6\u5bb9\u6613\u6703\u9700\u8981\u68b3\u7406\u56e0\u679c\uff0c\u6211\u5011\u5f85\u6703\u518d\u4f86\u770b\u9019\u554f\u984c\u3002
\u4e0d\u904e\u91cd\u9ede\u662f\u524d\u9762\u63d0\u7684\u554f\u984c\u90fd\u662f\u53ef\u4ee5\u88ab\u8655\u7406\u7684\uff0c\u4f46\u662f\u8eab\u70ba\u61c9\u7528\u7a0b\u5f0f\u958b\u767c\u4eba\u54e1\uff0c\u6211\u5011\u9700\u8981\u5728\u8a72\u8cc7\u6599\u5eab\u6587\u4ef6\u4e2d\u67e5\u627e\u76f8\u95dc\u8aaa\u660e\uff0c\u7136\u5f8c\u660e\u78ba\u77e5\u9053\u6c92\u6709\u9019\u4e9b\u8655\u7406\u6a5f\u5236\u6642\uff0c\u6211\u5011\u6703\u9047\u5230\u54ea\u4e9b\u554f\u984c\u3002\u4e26\u5be6\u969b\u505a\u904e\u4e00\u4e9b\u6e2c\u8a66\u78ba\u4fdd\u9019\u4e9b\u4fdd\u8b49\u662f\u7b26\u5408\u6211\u5011\u9810\u671f\u7684\u3002
"},{"location":"feedback/designing-data-intensive-applications/distributed-replication/#\u55ae\u4e00\u9818\u8896\u4e5f\u6709\u62d3\u64b2","title":"\u55ae\u4e00\u9818\u8896\u4e5f\u6709\u62d3\u64b2","text":"\u9664\u4e86\u591a\u9818\u8896\u4e4b\u5916\uff0c\u55ae\u4e00\u9818\u8896\u4e5f\u662f\u6709\u62d3\u64b2\u7684\u3002\u4ee5\u5716\u70ba\u4f8b\u5c31\u662f Replication Chain\uff08RC\uff09\u3002
"},{"location":"feedback/designing-data-intensive-applications/distributed-replication/#\u8655\u7406\u885d\u7a81","title":"\u8655\u7406\u885d\u7a81","text":"\u6211\u5011\u4e00\u76f4\u6709\u63d0\u5230\u591a\u9818\u8896\u9700\u8981\u8655\u7406\u885d\u7a81\uff0c\u73fe\u5728\u6211\u5011\u5c31\u4f86\u770b\u770b\u600e\u9ebc\u8655\u7406\u885d\u7a81\u3002
\u4e0a\u8ff0\u65b9\u5f0f\u90fd\u7b97\u65b0\u7684\u65b9\u5f0f\uff0c\u4e26\u4e14\u73fe\u6709\u7684\u8cc7\u6599\u5eab\u901a\u5e38\u5c0d\u65bc\u885d\u7a81\u4e26\u6c92\u6709\u5f88\u597d\u7684\u652f\u63f4\uff0c\u4e00\u6a23\uff0c\u7d30\u770b\u6587\u4ef6\uff0c\u4e26\u505a\u6e2c\u8a66\u3002
\u4f8b\u5982\u4e9e\u99ac\u905c\u4ee5\u524d\u5728\u8655\u7406\u8cfc\u7269\u8eca\u7684\u885d\u7a81\u6642\uff0c\u4ed6\u5011\u8003\u616e\u4e86\u6dfb\u52a0\u7522\u54c1\u6642\u7684\u885d\u7a81\uff0c\u537b\u6c92\u6709\u8003\u616e\u522a\u9664\u6642\u7684\u885d\u7a81\uff0c\u5c0e\u81f4\u660e\u660e\u522a\u9664\u7684\u7522\u54c1\uff0c\u5237\u65b0\u9801\u9762\u5f8c\u53c8\u51fa\u73fe\u5728\u8cfc\u7269\u8eca\u4e4b\u4e2d\u3002
"},{"location":"feedback/designing-data-intensive-applications/distributed-replication/#\u68b3\u7406\u56e0\u679c","title":"\u68b3\u7406\u56e0\u679c","text":"\u56e0\u679c\u6df7\u4e82\u4e26\u4e0d\u662f\u885d\u7a81\uff0c\u4ee5\u4e0a\u5716\u70ba\u4f8b\uff0c\u5169\u500b\u8acb\u6c42\u4e26\u4e0d\u662f\u4e26\u884c\u8655\u7406\uff0c\u800c\u662f\u6709\u76f8\u4f9d\u95dc\u4fc2\u7684\uff0c\u9019\u6642\u9020\u6210\u932f\u8aa4\u7684\u4fbf\u662f\u885d\u7a81\u7684\u6df7\u4e82\u3002
\u6211\u5011\u53ef\u4ee5\u6709\u7684\u505a\u6cd5\u5c31\u662f\u66ff\u5404\u500b\u8acb\u6c42\u6dfb\u52a0 ID\uff0c\u4e5f\u5c31\u662f\u7248\u672c\u5411\u91cf\u3002
"},{"location":"feedback/designing-data-intensive-applications/distributed-replication/#\u7248\u672c\u5411\u91cf","title":"\u7248\u672c\u5411\u91cf","text":"\u70ba\u4e86\u8b93\u4e8b\u60c5\u8b8a\u7c21\u55ae\uff0c\u6211\u5011\u5148\u60f3\u50cf\u53ea\u6709\u4e00\u500b\u8cc7\u6599\u5eab\uff0c\u4e86\u89e3\u539f\u7406\u5f8c\uff0c\u518d\u64f4\u5c55\u5230\u591a\u53f0\u8cc7\u6599\u5eab\u6642\u5c31\u4e0d\u96e3\u4e86\u3002
[milk]
\uff0c\u5b9a\u5176\u70ba\u7248\u672c\u4e00[eggs]
\uff0c\u5f97\u5230\u7248\u672c\u4e00\u7684\u8cc7\u6599 [milk]
\uff0c\u4e26\u5728\u61c9\u7528\u7a0b\u5f0f\u4e2d\u6574\u5408\u5169\u8005\u6210\u70ba [eggs, milk]
[milk, flour]
\uff0c\u5f97\u5230\u7248\u672c\u4e8c\u7684\u8cc7\u6599 [eggs]
\uff0c\u4e26\u5728\u61c9\u7528\u7a0b\u5f0f\u4e2d\u6574\u5408\u5169\u8005\u6210\u70ba [milk, flour, eggs]
[eggs, milk, ham]
\u5f97\u5230\u7248\u672c\u4e09\u7684\u8cc7\u6599 [milk, flour]
\uff0c\u4e26\u6574\u5408\u6210 [eggs, milk, ham, flour]
[milk, flour, eggs, bacon, ham]
\u900f\u904e\u8ce6\u4e88\u5404\u500b\u5beb\u5165\u8acb\u6c42\u4e00\u500b\u7248\u672c\uff0c\u4e26\u5728\u6bcf\u6b21\u9001\u51fa\u8acb\u6c42\u6642\uff0c\u593e\u5e36\u73fe\u6709\u7684\u7248\u672c\uff0c\u4f86\u8b93\u61c9\u7528\u7a0b\u5f0f\u6574\u4f75\uff08\u6216\u8a2d\u7f6e\u8cc7\u6599\u5eab\u8b93\u4ed6\u81ea\u5df1\u6574\u4f75\uff09\u3002\u9019\u4e0d\u50c5\u53ef\u4ee5\u8655\u7406\u885d\u7a81\uff0c\u7576\u767c\u751f\u56e0\u679c\u6df7\u4e82\u6642\uff0c\u6211\u5011\u4e5f\u53ef\u4ee5\u900f\u904e\u7248\u672c\u53bb\u6574\u5408\u885d\u7a81\u3002
\u73fe\u5728\u628a\u8cc7\u6599\u5eab\u64f4\u589e\u5230\u591a\u7248\u672c\uff0c\u9019\u6642\u5c31\u6703\u5f97\u5230\u7248\u672c\u5411\u91cf\uff08version vector\uff09\uff0c\u800c\u975e\u55ae\u4e00\u7248\u672c\u3002
Info
\u7248\u672c\u5411\u91cf\u548c\u6642\u9418\u5411\u91cf\uff08vector clocks\uff09\u662f\u5169\u7a2e\u4e0d\u540c\u7684\u6771\u897f\uff0c\u6642\u9418\u5411\u91cf\u662f\u7528\u4f86\u8b93 \u5206\u6563\u5f0f\u7cfb\u7d71 \u7372\u5f97\u4e00\u500b\u7d71\u4e00\u7684\u905e\u589e\u9806\u5e8f\u3002\u4e4b\u5f8c\u6703\u518d\u8a73\u7d30\u4ecb\u7d39\uff0c\u82e5\u6709\u8208\u8da3\u53ef\u4ee5\u770b\u4e00\u4e0b\u6587\u7ae0\u3002
"},{"location":"feedback/designing-data-intensive-applications/distributed-replication/#\u7121\u9818\u8896","title":"\u7121\u9818\u8896","text":"\u524d\u9762\u5169\u7a2e\u65b9\u5f0f\u90fd\u662f\u8b93\u4f7f\u7528\u8005\u9001\u51fa\u8acb\u6c42\u5230\u7279\u5b9a\u8cc7\u6599\u5eab\uff0c\u4f46\u662f\u7121\u9818\u8896\u7684\u65b9\u5f0f\u662f\u8b93\u4f7f\u7528\u8005\uff08\u900f\u904e\u5354\u8abf\u8005\uff09\u9001\u8acb\u6c42\u5230\u5168\u90e8\uff08\u6216\u5927\u90e8\u5206\uff09\u7684\u8cc7\u6599\u5eab\u3002
\u5176\u5be6\u7121\u9818\u8896\u7684\u6982\u5ff5\u4e26\u4e0d\u65b0\uff0c\u4f46\u662f\u9019\u6982\u5ff5\u5728\u65e9\u671f\u7684\u6548\u7528\u4e26\u4e0d\u660e\u986f\uff0c\u5c24\u5176\u7576\u6642\u4e00\u53f0\u95dc\u9023\u5f0f\u8cc7\u6599\u5eab\u5c31\u53ef\u4ee5\u505a\u5230\u5f88\u591a\u4e8b\u60c5\u7684\u6642\u5019\u3002\u96a8\u8457 Amazon \u958b\u59cb\u63a8\u51fa Dynamo \u7cfb\u7d71\u6642\uff0c\u6709\u8d8a\u4f86\u8d8a\u591a\u8cc7\u6599\u5eab\u4e5f\u652f\u63f4\u9019\u985e\u65b9\u5f0f\u7684\u8907\u88fd\u3002
\u652f\u63f4\u7684\u8cc7\u6599\u5eab\u6709
\u6709\u4e9b\u8cc7\u6599\u5eab\u53e2\u96c6\u5167\u6703\u63d0\u4f9b\u5354\u8abf\u8005\u8ca0\u8cac\u9001\u9019\u4e9b\u8acb\u6c42\u5230\u5404\u500b\u8cc7\u6599\u5eab\uff0c\u6709\u4e9b\u5247\u662f\u8b93\u4f7f\u7528\u8005\u76f4\u63a5\u547c\u53eb\uff08\u900f\u904e SDK \u7b49\u65b9\u5f0f\uff09\u3002
\u548c\u591a\u9818\u8896\u4e00\u6a23\uff0c\u7121\u9818\u8896\u56e0\u70ba\u6bcf\u500b\u8cc7\u6599\u5eab\u7bc0\u9ede\u90fd\u6703\u505a\u5beb\u5165\u7684\u52d5\u4f5c\uff0c\u6240\u4ee5\u5f88\u53ef\u80fd\u6703\u9020\u6210\u5169\u500b\u8cc7\u6599\u5eab\u7684\u72c0\u614b\u4e0d\u4e00\u81f4\uff0c\u4f8b\u5982\u8cc7\u6599\u5eab 1 \u5148\u5beb A \u518d\u5beb B\uff0c\u8cc7\u6599\u5eab 2 \u5148\u5beb B \u518d\u5beb A\u3002
\u9019\u6642\u5c31\u9700\u8981\u8655\u7406\u5169\u500b\u8cc7\u6599\u5eab\u9593\u7684\u885d\u7a81\uff0c\u9084\u8981\u68b3\u7406\u76f8\u95dc\u56e0\u679c\u3002\u4e0d\u904e\u5927\u81f4\u908f\u8f2f\u662f\u5dee\u4e0d\u591a\u7684\u3002
\u4e3b\u8981\u5dee\u5225\u5728\u65bc\u7121\u9818\u8896\u4ed6\u9700\u8981\u5728\u5404\u500b\u8cc7\u6599\u5eab\u9593\u5b9a\u671f\u6574\u4f75\uff0c\u6240\u4ee5\u9019\u6bb5\u7684\u9806\u5e8f\u6703\u662f
\u540c\u6642\u5beb\u5165\u591a\u500b\u8cc7\u6599\u5eab\u5f8c\uff0c\u5982\u679c\u5176\u4e2d\u5e7e\u500b\u8cc7\u6599\u5eab\u56e0\u70ba\u4efb\u4f55\u539f\u56e0\uff08\u7db2\u8def\u5ef6\u9072\u3001\u8cc7\u6599\u5eab\u91cd\u555f\uff09\u7121\u6cd5\u9001\u51fa\u6210\u529f\uff0c\u5c31\u6703\u5c0e\u81f4\u904b\u884c\u7d42\u6b62\u3002\u70ba\u4e86\u7dad\u6301\u9ad8\u53ef\u7528\u6027\u548c\u8cc7\u6599\u7684\u4e00\u81f4\u6027\uff0c\u6211\u5011\u8981\u600e\u9ebc\u9078\u64c7\u5141\u8a31\u5931\u6557\u7684\u8acb\u6c42\u6578\u91cf\uff1f
\u4ee5\u5716\u7247\u70ba\u4f8b\uff0c\u4e94\u500b\u8cc7\u6599\u5eab\uff0c\u6211\u53ea\u8981\u6210\u529f\u5beb\u5165\u548c\u8b80\u53d6\u5404\u4e09\u500b\u8cc7\u6599\u5eab\uff0c\u5c31\u80fd\u78ba\u4fdd\u62ff\u5230\u6700\u65b0\u7684\u8cc7\u6599\u56de\u50b3\u7d66\u4f7f\u7528\u8005\u3002
\u4e5f\u5c31\u662f \\(w+r>n\\)\uff0c\u9019\u88e1\u7684 \\(n\\) \u4ee3\u8868\u8cc7\u6599\u5eab\u7e3d\u6578\u3002
\u4e0d\u904e\u6709\u4e9b\u908a\u969b\u60c5\u6cc1\u6703\u8b93\u9019\u7a2e\u4fdd\u91cd\u5931\u6548\uff1a
\u9019\u7406\u8ad6\u82f1\u6587\u7a31\u70ba qourum\uff0c\u6709\u4e9b\u4eba\u6703\u7ffb\u8b6f\u70ba\u6cd5\u5b9a\u4eba\u6578\uff0c\u4f46\u662f\u6cd5\u5b9a\u4eba\u6578\u9019\u540d\u8a5e\u662f\u7528\u5728\u6cd5\u5f8b\u9818\u57df\u7684\u3002\u4e8b\u5be6\u4e0a\uff0c\u9019\u500b\u7406\u8ad6\u662f\u57fa\u65bc\u9d3f\u5de2\u539f\u7406\u3002\u4e5f\u5c31\u662f\u7576\u6211\u6709\u5341\u96bb\u9d3f\u5b50\uff0c\u4e5d\u500b\u9d3f\u5de2\uff0c\u6211\u5c31\u80fd\u4fdd\u8b49\u6709\u4e00\u500b\u9d3f\u5de2\u6709\u5169\u96bb\u4ee5\u4e0a\u7684\u9d3f\u5b50\u3002
\u6709\u4e9b\u8cc7\u6599\u5eab\u70ba\u4e86\u9ad8\u53ef\u7528\u6027\uff0c\u4e0d\u6703\u6eff\u8db3\u9d3f\u5de2\u539f\u7406\uff0c\u4f8b\u5982\u5728\u4e94\u500b\u8cc7\u6599\u5eab\u4e2d\u50c5\u6210\u529f\u9001\u7d66\u5169\u500b\u8cc7\u6599\u5eab\u5c31\u5b8c\u6210\u8a72\u6b21\u8acb\u6c42\u3002
\u9664\u6b64\u4e4b\u5916\uff0c\u6709\u4e9b\u8cc7\u6599\u5eab\u7576\u767c\u73fe\u6c92\u8fa6\u6cd5\u6eff\u8db3\u9810\u5b9a\u7684\u6578\u91cf\u6642\uff0c\u6703\u628a\u8acb\u6c42\u9001\u5230\u539f\u672c \\(n\\) \u4e4b\u5916\u7684\u8cc7\u6599\u5eab\uff08\u6216\u8005\u653e\u9032\u5354\u8abf\u8005\u672c\u8eab\uff09\uff0c\u9019\u7a2e\u6211\u5011\u7a31\u70ba\u7a00\u8584\u7684\u9d3f\u5de2\uff08sloppy quorum\uff09\u3002\u7576\u539f\u672c\u7121\u6cd5\u9001\u51fa\u7684\u8cc7\u6599\u5eab\u6062\u5fa9\u539f\u72c0\u4e4b\u5f8c\uff0c\u518d\u8b93\u9019\u4e9b\u5099\u63f4\u7684\u8cc7\u6599\u5eab\u628a\u8cc7\u6599\u9001\u56de\u7d66\u9019\u4e9b\u8cc7\u6599\u5eab\uff0c\u9019\u904e\u7a0b\u7a31\u70ba\u63d0\u793a\u79fb\u4ea4\uff08hinted handoff\uff09\u3002
\u7576\u8cc7\u6599\u53e2\u96c6\u8d8a\u4f86\u8d8a\u5927\uff0c\u4f60\u8981\u9001\u51fa\u7684\u8acb\u6c42\u5f88\u591a\uff0c\u9019\u4ee3\u8868\u8d8a\u4f86\u8d8a\u5bb9\u6613\u51fa\u73fe\u7121\u6cd5\u6b63\u78ba\u9001\u51fa\u7684\u72c0\u6cc1\uff0c\u9019\u6642\u8cc7\u6599\u5eab\u6703\u8d8a\u4f86\u8d8a\u96e3\u7dad\u6301\u4e00\u81f4\u6027\u3002\u6240\u4ee5\u9700\u8981\u6709\u4e00\u500b\u65b9\u6cd5\u4f86\u8655\u7406\u9019\u4ef6\u4e8b\uff0c\u6211\u5011\u4e0b\u9762\u5c31\u662f\u5728\u8a0e\u8ad6\u9019\u4ef6\u4e8b\u3002
"},{"location":"feedback/designing-data-intensive-applications/distributed-replication/#\u7dad\u6301\u8cc7\u6599\u5eab\u7684\u4e00\u81f4\u6027","title":"\u7dad\u6301\u8cc7\u6599\u5eab\u7684\u4e00\u81f4\u6027","text":"\u7576\u4e0d\u80fd\u5beb\u5165\u7684\u8cc7\u6599\u5eab\u9694\u4e86\u4e00\u6bb5\u6642\u9593\u6062\u5fa9\u539f\u72c0\u4e86\uff0c\u6211\u5011\u6703\u5728\u4e0b\u6b21\u8b80\u53d6\u7684\u6642\u5019\uff0c\u628a\u9019\u500b\u8cc7\u6599\u5eab\u7684\u8cc7\u6599\u5408\u6210\u5230\u6700\u65b0\u7684\u8cc7\u6599\u3002\u9019\u500b\u52d5\u4f5c\u6211\u5011\u7a31\u70ba\u8b80\u53d6\u6642\u5fa9\u539f\uff08read repair\uff09\u3002
\u4f46\u662f\u9019\u4ee3\u8868\uff0c\u5982\u679c\u8cc7\u6599\u6c92\u88ab\u8b80\u53d6\uff0c\u4ed6\u6c38\u9060\u4e0d\u6703\u539f\u6301\u6700\u65b0\u8cc7\u6599\uff0c\u8a72\u600e\u9ebc\u80cc\u666f\u8655\u7406\uff1f
"},{"location":"feedback/designing-data-intensive-applications/distributed-replication/#\u5b9a\u671f\u6574\u4f75","title":"\u5b9a\u671f\u6574\u4f75","text":"dynamo-style \u8cc7\u6599\u5eab\u6703\u4f7f\u7528\u53cd\u71b5\uff08anti-entropy process\uff09\u5b9a\u671f\u8b93\u5169\u500b\u8cc7\u6599\u5eab\u7684\u8cc7\u6599\u9054\u6210\u4e00\u81f4\u6027\u3002\u900f\u904e Merkle tree\uff0c\u53ef\u4ee5\u5feb\u901f\u627e\u5230\u5169\u500b\u8cc7\u6599\u5eab\u9593\u7684\u5dee\u7570\uff0c\u4e26\u50b3\u905e\u5f7c\u6b64\u7684\u5dee\u7570\u4f86\u9054\u6210\u540c\u6b65\u3002
\u4e0d\u904e\u4e26\u4e0d\u662f\u6240\u6709\u8cc7\u6599\u5eab\u6709\u5be6\u4f5c\u9019\u500b\u884c\u70ba\uff08\u4f8b\u5982 Voldemort\uff09\uff0c\u9664\u6b64\u4e4b\u5916\u53cd\u71b5\u4e26\u4e0d\u4fdd\u4f4f\u8cc7\u6599\u5beb\u5165\u7684\u9806\u5e8f\uff0c\u6240\u4ee5\u5f88\u53ef\u80fd\u6703\u9020\u6210\u8cc7\u6599\u7684\u885d\u7a81\u3002
"},{"location":"feedback/designing-data-intensive-applications/distributed-replication/#\u7121\u9818\u8896\u7684\u512a\u7f3a\u9ede","title":"\u7121\u9818\u8896\u7684\u512a\u7f3a\u9ede","text":"\u56e0\u70ba\u6709\u9d3f\u5de2\u539f\u7406\uff0c\u53ef\u4ee5\u4fdd\u8b49\u8cc7\u6599\u7684\u4e00\u81f4\u6027\uff0c\u4e26\u5141\u8a31\u90e8\u5206\u7684\u7570\u6b65\u4f86\u9054\u6210\u9ad8\u53ef\u7528\u6027\u3002
\u9664\u6b64\u4e4b\u5916\uff0c\u56e0\u70ba\u9d3f\u5de2\u539f\u7406\u8b93\u4ed6\u4e0d\u9700\u8981\u5f37\u5236\u7b49\u5230\u6240\u6709\u8acb\u6c42\u9001\u51fa\u6210\u529f\uff0c\u6240\u4ee5\u8cc7\u6599\u5eab\u53ef\u4ee5\u900f\u904e\u7570\u6b65\u7684\u65b9\u5f0f\u628a\u8acb\u6c42\u9001\u5230\u5225\u7684\u8cc7\u6599\u4e2d\u5fc3\u3002
\u7136\u800c\u5beb\u5165\u7684\u8acb\u6c42\u5f88\u53ef\u80fd\u6703\u5728\u6eff\u8db3\u4e00\u81f4\u6027\u7684\u904e\u7a0b\u4e2d\u5c0e\u81f4\u9806\u5e8f\u88ab\u91cd\u7f6e\uff0c\u9019\u5c31\u4ee3\u8868\u8cc7\u6599\u4e0d\u80fd\u904e\u65bc\u8907\u96dc\uff08dyanmo-style \u7684\u8cc7\u6599\u540c\u5e38\u90fd\u662f k-v pair\uff09\uff0c\u624d\u80fd\u8b93\u5373\u4f7f\u8cc7\u6599\u5beb\u5165\u9806\u5e8f\u88ab\u6253\u4e82\uff0c\u4ecd\u80fd\u6709\u6548\u904b\u4f5c\u3002
"},{"location":"feedback/designing-data-intensive-applications/distributed-replication/#\u5176\u4ed6","title":"\u5176\u4ed6","text":"\u7576\u591a\u500b\u8cc7\u6599\u5eab\u9032\u884c\u8907\u88fd\u6642\uff0c\u80af\u5b9a\u6703\u51fa\u73fe\u5ef6\u9072\u5c0e\u81f4\u8cc7\u6599\u7684\u4e0d\u4e00\u81f4\u3002\u5c31\u597d\u50cf\u6211\u5011\u4e0a\u6b21\u63d0\u7684\u7af6\u8cfd\u72c0\u6cc1\u4e00\u6a23\uff0c\u6709\u54ea\u4e9b\u72c0\u6cc1\u8ddf\u54ea\u4e9b\u8655\u7406\u4e0a\uff1f\u8907\u88fd\u5ef6\u9072\u6211\u5011\u6703\u5728\u4e0b\u4e00\u6b21\u7684\u5206\u5340\u8a0e\u8ad6\uff01
\u9664\u6b64\u4e4b\u5916\uff0c\u6709\u4e9b\u8cc7\u6599\u5eab\u6703\u63d0\u4f9b\u63a5\u53e3\uff0c\u8b93\u7dad\u904b\u4eba\u54e1\u77e5\u9053\u73fe\u5728\u8cc7\u6599\u5eab\u7684\u4e00\u81f4\u6027\u72c0\u6cc1\u3002\u901a\u5e38\u9818\u8896\u985e\u578b\u7684\u8907\u88fd\u65b9\u5f0f\u5f88\u597d\u505a\uff0c\u900f\u904e\u9818\u8896\u548c\u8ddf\u96a8\u8005\u90fd\u6bd4\u8f03\u4f86\u627e\u51fa\u5dee\u7570\u3002\u4f46\u662f\u5728\u7121\u9818\u8896\u7684\u5206\u6563\u5f0f\u8cc7\u6599\u5eab\u4e2d\uff0c\u56e0\u70ba\u8cc7\u6599\u7684\u5beb\u5165\u662f\u975e\u9806\u5e8f\u6027\u7684\uff0c\u505a\u6cd5\u5c31\u6703\u6eff\u56f0\u96e3\u7684\u3002\u9019\u9818\u57df\u4ecd\u5728\u7814\u7a76\u4e2d\uff0c\u800c\u4e14\u5be6\u4f5c\u7684\u6bd4\u4f8b\u8f03\u4f4e\u3002
\u5927\u90e8\u5206\u7dad\u904b\u6a5f\u5668\u7684\u6210\u672c\u90fd\u662f\u5728\u96fb\u91cf\u4e0a\uff0c\u82e5\u6709\u4e00\u500b\u4e0d\u9700\u8981\u50b3\u9001\u5927\u91cf\u8cc7\u6599\u4e14\u50b3\u9001\u7684\u983b\u7387\u4e0d\u9ad8\u7684\u6f14\u7b97\u6cd5\uff0c\u5c31\u53ef\u4ee5\u7701\u5f88\u591a\u9322\uff01
"},{"location":"feedback/designing-data-intensive-applications/distributed-replication/#\u7e3d\u7d50","title":"\u7e3d\u7d50","text":"\u6211\u5011\u958b\u982d\u8ac7\u4e86\u5206\u6563\u5f0f\u8cc7\u6599\u5eab\u7684\u597d\u8655\u3002\u4e26\u5340\u5206\u4e86\u5169\u7a2e\u8655\u7406\u65b9\u5f0f\u2014\u8907\u88fd\u3001\u5206\u5340\u3002\u9019\u6b21\u96c6\u4e2d\u8a0e\u8ad6\u5982\u4f55\u505a\u5230\u591a\u8cc7\u6599\u5eab\u7684\u8907\u88fd\u3002
\u5404\u500b\u8907\u88fd\u65b9\u5f0f\u5f7c\u6b64\u90fd\u6709\u6b0a\u8861\uff0c\u5982\u679c\u4f60\u7684\u8cc7\u6599\u4e26\u4e0d\u8907\u96dc\uff0c\u5c31\u53ef\u4ee5\u8003\u616e\u4f7f\u7528\u7121\u9818\u8896\u7684\u65b9\u5f0f\u3002\u5982\u679c\u4f60\u53ea\u9700\u8981\u5728\u55ae\u4e00\u8cc7\u6599\u4e2d\u5fc3\u5efa\u7acb\u8cc7\u6599\u53e2\u96c6\uff0c\u5c31\u53ef\u4ee5\u8003\u616e\u55ae\u4e00\u9818\u8896\u7684\u8907\u88fd\u65b9\u5f0f\u3002
Network Attached Storage(NAS)\u00a0\u21a9
Storage Area Network(SAN)\u00a0\u21a9
\u56de\u9867\u4e00\u4e0b\u8cc7\u6599\u5eab\u548c\u884d\u751f\u8cc7\u6599\u6700\u5f8c\u518d\u6574\u5408\u8d77\u4f86\u3002
HackMD \u5831\u544a\u6587\u672c
"},{"location":"feedback/designing-data-intensive-applications/farewell/#\u7e3d\u7d50","title":"\u7e3d\u7d50","text":"\u9019\u88e1\u6211\u5011\u7e3d\u7d50\u4e00\u4e0b\u8cc7\u6599\u5eab\u76f8\u95dc\u77e5\u8b58\uff0c\u5305\u62ec\u5206\u6563\u5f0f\u8cc7\u6599\u5eab\u548c\u884d\u751f\u8cc7\u6599\u7cfb\u7d71\u3002
"},{"location":"feedback/designing-data-intensive-applications/farewell/#\u8cc7\u6599\u5eab\u57fa\u790e","title":"\u8cc7\u6599\u5eab\u57fa\u790e","text":"\u6839\u64da\u5546\u52d9\u908f\u8f2f\u9078\u64c7\u8cc7\u6599\u6a21\u578b\uff0c\u53ef\u80fd\u6709 \u95dc\u806f\u5f0f\u3001\u6587\u4ef6\u5f0f\u3001\u5716\u50cf\u5f0f \u7b49\u7b49\uff0c\u5176\u4ed6\u4e0d\u5e38\u898b\u7684\u6a21\u578b\u5c31\u6703\u6839\u64da\u7279\u6b8a\u9700\u6c42\u8a2d\u8a08\uff0c\u4f8b\u5982\u57fa\u56e0\u8cc7\u6599\u5eab\u3002
\u6839\u64da\u4e0d\u540c\u8cc7\u6599\u6a21\u578b\u6703\u4f7f\u7528\u4e0d\u540c\u641c\u5c0b\u8a9e\u8a00\uff0c \u5e38\u898b\u7684 SQL \u662f \u5ba3\u544a\u5f0f\uff08\u5ba3\u544a\u8981\u4ec0\u9ebc\u62bd\u8c61\u7684\u7d50\u679c\uff09\u7684\u8a9e\u8a00\uff0c \u5176\u4ed6\u9084\u6709\u50cf\u7a0b\u5f0f\u78bc\u4e00\u6a23\u64c1\u6709\u9ad8\u5f48\u6027\u7684 \u547d\u547d\u5f0f\uff08\u4e00\u6b65\u4e00\u6b65\u547d\u4ee4\u8cc7\u6599\u5eab\u505a\u4ec0\u9ebc\u4e8b \u8ddf\u4e0d\u5e38\u898b\u4f46\u662f\u5728\u7279\u6b8a\u60c5\u6cc1\u975e\u5e38\u597d\u7528\u7684 \u908f\u8f2f\u5f0f\uff08\u4e0d\u5beb\u884c\u70ba\u800c\u662f\u5beb\u908f\u8f2f\uff09\u3002
\u908f\u8f2f\u5f0f\u7684\u4f7f\u7528\u5834\u666f
\u5728\u5716\u50cf\u5f0f\u8cc7\u6599\u5eab\u4e2d\u641c\u5c0b\u300c\u51fa\u751f\u5728\u53f0\u5317\u4f46\u662f\u642c\u53bb\u53f0\u5357\u7684\u4f7f\u7528\u8005\u300d\uff0c \u6211\u5011\u53ef\u4ee5\u900f\u904e\u544a\u8a34\u8cc7\u6599\u5eab\u300c\u4ec0\u9ebc\u662f\u4f4f\u5728\u53f0\u5317\u300d \uff08\u544a\u77e5\u908f\u8f2f\u800c\u975e\u547d\u4ee4\uff0cedge=born
\u4e0d\u7b49\u65bc if (edge=born) return true;
\uff09 \u9084\u6709\u300c\u4ec0\u9ebc\u662f\u642c\u53bb\u53f0\u5357\u300d\uff08edge=migration, node=Tainan
\uff09\u8b93\u8cc7\u6599\u5eab\u53ef\u4ee5\u627e\u5230\u6211\u5011\u60f3\u8981\u7684\u8cc7\u6599\u3002
\u70ba\u4ec0\u9ebc\u4e0a\u8ff0\u4f8b\u5b50\u6703\u4f7f\u7528 \u5716\u50cf\u5f0f \u548c \u908f\u8f2f\u5f0f \u641c\u5c0b\uff1f
\u7531\u65bc\u5730\u7406\u95dc\u4fc2\u4e0d\u80fd\u7c21\u55ae\u7528 \u95dc\u806f\u5f0f \u8cc7\u6599\u5eab\u8868\u793a \uff08\u4f8b\u5982 \u67d0\u5730 \u5305\u542b\u65bc \u67d0\u5e02 \u7b49\u7b49\uff0c\u9019\u7a2e\u95dc\u4fc2\u5728 \u95dc\u806f\u5f0f \u4e2d\u6703\u8b93\u8cc7\u6599\u5bb9\u6613\u5197\u9577\uff09\uff0c \u6240\u4ee5\u7528\u5716\u50cf\u5f0f\u3002\u800c \u5716\u50cf\u5f0f \u7684\u641c\u5c0b\u53c8\u5e38\u5e38\u6709\u5546\u52d9\u908f\u8f2f\u5728\u5176\u4e2d\uff0c\u6240\u4ee5\u505a\u6210 \u5ba3\u544a\u5f0f \u6c92\u90a3\u9ebc\u65b9\u4fbf\u3002
\u63a5\u8457\u6211\u5011\u628a\u7126\u9ede\u5f9e\u61c9\u7528\u7a0b\u5f0f\u653e\u5230\u8cc7\u6599\u5eab\u4e2d\uff0c\u7576\u8cc7\u6599\u5eab\u8981\u5f9e\u6a94\u6848\u7cfb\u7d71\u4e2d\u62ff\u8cc7\u6599\u6642\uff0c \u4ed6\u600e\u9ebc\u8fa6\u5230\u5feb\u901f\u5728\u832b\u832b\u8cc7\u6599\u6d77\u4e2d\u627e\u5230\u6307\u5b9a\u8cc7\u6599\u7684\uff1f\u900f\u904e\u7d22\u5f15\u3002 \u6211\u5011\u5148\u5f9e \u6563\u5217\u5f0f\u7d22\u5f15 \u4e86\u89e3\u5982\u4f55\u900f\u904e key-value \u7d44\u5408\u5efa\u69cb\u5f37\u5927\u7684\u8a18\u61b6\u9ad4\u7d22\u5f15\uff0c \u4f9d\u6b64\u5ef6\u4f38\u7684 \u6392\u5e8f\u5b57\u4e32\u8868 \u5247\u662f\u5229\u7528\u9644\u52a0\u9032\u65e5\u8a8c\u7684\u65b9\u5f0f\u628a\u8cc7\u6599\u5b58\u9032\u6a94\u6848\u7cfb\u7d71\u3002 \u5229\u7528\u786c\u9ad4\u5929\u751f\u9069\u5408\u9644\u52a0\u7684\u7279\u6027\u548c\u80cc\u666f\u57f7\u884c\u7684\u7dca\u58d3\uff08compaction\uff09\uff0c \u4fdd\u6301\u6392\u5e8f\u4e14\u7dca\u5bc6\u7684\u65e5\u8a8c\u53ef\u4ee5\u8b93\u4ed6\u540c\u6642\u9069\u5408\u5beb\u5165\u548c\u8b80\u53d6\u3002\u6700\u5f8c\u518d\u63d0\u5e38\u898b\u7684 b-tree \u548c\u5176\u8207\u6392\u5e8f\u5b57\u4e32\u8868\u7684\u6bd4\u8f03\u3002
\u4e86\u89e3\u8cc7\u6599\u5eab\u600e\u9ebc\u5feb\u901f\u62ff\u53d6\u6307\u5b9a\u8cc7\u6599\u4e4b\u5f8c\uff0c\u6211\u5011\u4f86\u770b\u770b\u53e6\u4e00\u7a2e\u7d22\u5f15\uff0c\u884c\u5f0f\u7d22\u5f15\u3002 \u6709\u4e9b\u641c\u5c0b\u4e0d\u662f\u6307\u5b9a\u8cc7\u6599\uff0c\u800c\u662f\u7bc4\u570d\u8cc7\u6599\uff0c\u4f8b\u5982\u9019\u500b\u6708\u7684\u8a3b\u518a\u8005\u6578\u91cf\uff0c\u9019\u7a2e\u641c\u5c0b\u6211\u5011\u7a31\u70ba OLAP\u3002 \u9019\u6bb5\u6211\u5011\u63d0\u4e86\u5f88\u591a\u8cc7\u6599\u5eab\u600e\u9ebc\u548c\u5e95\u5c64 OS \u548c\u786c\u9ad4\u6e9d\u901a\uff0c\u4e26\u512a\u5316\u9019\u4e00\u7cfb\u5217\u7684\u904e\u7a0b\u3002
\u4e86\u89e3\u61c9\u7528\u7a0b\u5f0f\u548c\u8cc7\u6599\u5eab\u7684\u904b\u4f5c\u57fa\u790e\u4e4b\u5f8c\uff0c\u6211\u5011\u518d\u4f86\u770b\u770b\u8cc7\u6599\u5eab\u600e\u9ebc\u548c\u61c9\u7528\u7a0b\u5f0f\u6216\u672c\u5730\u4e3b\u6a5f\u6e9d\u901a\uff1a \u7de8\u78bc\u3002\u5e38\u898b\u7684 JSON/CSV/XML \u4e0d\u592a\u9069\u5408\u7528\u4f86\u505a\u8cc7\u6599\u5eab\u7684\u7de8\u78bc\uff0c \u56e0\u70ba\u6548\u7387\u4f4e\u843d\u3001\u8cc7\u6599\u80a5\u5927\u548c\u4e0d\u6613\u6f14\u9032\u3002 \u96a8\u8457\u61c9\u7528\u7a0b\u5f0f\u7684\u908f\u8f2f\u6539\u8b8a\uff0c\u8cc7\u6599\u5eab\u7684\u7db1\u76ee\u6703\u88ab\u6539\u8b8a\uff0c\u9019\u4e4b\u4e2d\u7684\u7de8\u78bc\u9700\u8981\u9069\u61c9\u6f14\u9032\u3002 \u9019\u4e4b\u4e2d\u63d0\u4e86\u5e7e\u500b\u6709\u8da3\u7684\u7de8\u78bc\uff0c\u503c\u5f97\u6ce8\u610f\u7684\u662f Apache Avro \u5982\u4f55\u9069\u61c9\u6f14\u9032\u548c\u7121\u7db1\u76ee\u7684\u67b6\u69cb\u3002
"},{"location":"feedback/designing-data-intensive-applications/farewell/#\u5bb9\u932f\u6a5f\u5236","title":"\u5bb9\u932f\u6a5f\u5236","text":"\u4e26\u884c\u7684\u8acb\u6c42\u6703\u8b93\u8cc7\u6599\u5eab\u72c0\u614b\u51fa\u932f\uff0c\u4f8b\u5982\u540c\u6642\u6709\u4eba\u8a02\u7968\u3002\u5728\u55ae\u53f0\u8cc7\u6599\u5eab\u4e2d\uff0c \u8070\u660e\u7684\u958b\u6cd5\u8005\u5617\u8a66\u628a\u53ef\u80fd\u767c\u751f\u7684\u554f\u984c\u90fd\u900f\u904e\u4ea4\u6613\u6a5f\u5236\u4f86\u907f\u514d\u3002 \u4ea4\u6613\u6a5f\u5236\u63d0\u4f9b\u5169\u9805\u4fdd\u8b49\uff1a
\u8981\u6ce8\u610f\u7684\u662f\u53ea\u6709\u9694\u96e2\u6027\u80fd\u907f\u514d\u7af6\u8cfd\u72c0\u6cc1\uff0c\u81f3\u65bc\u539f\u5b50\u6027\u53ea\u662f\u63d0\u4f9b\u8cc7\u6599\u5eab\u5bb9\u932f\u7684\u6a5f\u5236\u4e5f\u5c31\u662f\u767c\u751f\u4efb\u4f55\u554f\u984c\u90fd\u4e0d\u6703\u628a\u554f\u984c\u6b98\u7559\u5728\u72c0\u614b\u4e2d\uff0c\u800c\u662f\u56de\u5230\u6700\u4e00\u958b\u59cb\u6b63\u5e38\u7684\u72c0\u614b\u3002
"},{"location":"feedback/designing-data-intensive-applications/farewell/#\u9694\u96e2\u6027\u7684\u7b49\u7d1a","title":"\u9694\u96e2\u6027\u7684\u7b49\u7d1a","text":"\u9694\u96e2\u6027\uff08isolation\uff09\u7684\u4e16\u754c\u975e\u5e38\u8907\u96dc\uff0c\u4e0d\u53ea\u662f\u56e0\u70ba\u5be6\u4f5c\u6642\u9700\u8981\u6ce8\u610f\u7684\u7709\u7709\u89d2\u89d2\u66f4\u662f\u56e0\u70ba\u5e02\u9762\u4e0a\u6709\u975e\u5e38\u975e\u5e38\u591a\u7684\u8cc7\u6599\u5eab\uff0c\u800c\u6bcf\u500b\u8cc7\u6599\u5eab\u5c0d\u65bc\u9694\u96e2\u6027\u7684\u5b9a\u7fa9\u90fd\u4e0d\u592a\u4e00\u6a23\u3002\u8d8a\u5f37\u7684\u9694\u96e2\u6027\u901a\u5e38\u4ee3\u8868\u8cc7\u6599\u5eab\u64c1\u6709\u8d8a\u5f37\u7684\u4e00\u81f4\u6027\uff08consistency\uff09\uff1a
\u4f7f\u7528\u63d0\u4ea4\u5f8c\u7684\u8cc7\u6599\uff08no-dirty-read + no-dirty-write\uff09\uff1a\u4e00\u822c\u4f86\u8aaa\u662f\u9694\u96e2\u6027\u4e2d\u6700\u5f31\u7684\uff0c\u900f\u904e\u52a0\u9396\uff08\u53ea\u52a0\u5beb\u5165\u7684\uff09\u8b93\u5169\u500b\u4ea4\u6613\u9593\u4e0d\u6703\u4e92\u76f8\u5f71\u97ff\uff0c\u4e26\u5728\u63d0\u4ea4\u4ea4\u6613\u5f8c\u624d\u6574\u5408\u9032\u8cc7\u6599\u5eab\u907f\u514d\u4ea4\u6613\u9593\u770b\u5230\u5f7c\u6b64\u5c1a\u672a\u63d0\u4ea4\u7684\u72c0\u614b\u3002
\u5feb\u7167\u9694\u96e2\uff1a\u7576 \u4ea4\u6613A
\u958b\u59cb\u57f7\u884c\u5f8c\uff0c\u4ea4\u6613B
\u5b8c\u6210\u63d0\u4ea4\uff0c\u9032\u800c\u5f71\u97ff \u4ea4\u6613A
\u7684\u5224\u65b7\uff08\u56e0\u70ba \u4ea4\u6613B
\u5b8c\u6210\u63d0\u4ea4\u6703\u8b93\u65b0\u7684\u72c0\u614b\u901a\u904e \u4f7f\u7528\u63d0\u4ea4\u5f8c\u7684\u8cc7\u6599 \u7684\u6aa2\u67e5\uff09\uff0c\u9019\u6642\u53ef\u4ee5\u4f7f\u7528 MVCC\uff0c\u66ff\u6bcf\u500b\u4ea4\u6613\u958b\u59cb\u7576\u4e0b\u5efa\u7acb\u8cc7\u6599\u7248\u672c\uff0c\u907f\u514d\u8b80\u5230\u932f\u8aa4\u72c0\u614b
\u5e8f\u5217\u5316\u9694\u96e2\uff1a\u6709\u4e9b\u8cc7\u6599\u5eab\u900f\u904e\u55ae\u4e00\u57f7\u884c\u5e8f\uff08\u4f8b\u5982 Redis\uff09\u4f86\u9054\u6210\u5e8f\u5217\u5316\u7684\u4e00\u81f4\u6027\uff0c\u4f46\u662f\u5176\u4ed6\u4f7f\u7528\u6a94\u6848\u7cfb\u7d71\u7684\u8cc7\u6599\u5eab\u7121\u6cd5\u7528\u9019\u7a2e\u65b9\u5f0f\uff0c\u5426\u5247\u6548\u80fd\u6703\u56b4\u91cd\u53d7\u5230\u786c\u789f\u8b80\u53d6\u7684\u5f71\u97ff\uff0c2PL \u900f\u904e\u8b93\u8b80\u53d6\u7684\u8acb\u6c42\u4e5f\u52a0\u4e0a\u9396\u4f86\u63d0\u4f9b\u5e8f\u5217\u5316\u9694\u96e2\uff0c\u4f46\u662f OLTP \u7684\u8acb\u6c42\u5927\u90e8\u5206\u90fd\u662f\u8b80\u53d6\u8acb\u6c42\uff0c\u6240\u4ee5\u9019\u65b9\u6cd5\u6703\u56b4\u91cd\u5f71\u97ff\u6548\u80fd\u3002\u5feb\u7167\u5e8f\u5217\u5316\u9694\u96e2\uff08SSI\uff09\u53ef\u4ee5\u4fdd\u8b49\u6548\u7387\u53c8\u80fd\u63d0\u4f9b\u9694\u96e2\u6027\uff0c\u4f46\u662f\u65b9\u6cd5\u8f03\u65b0\uff0c\u5f85\u6642\u9593\u7684\u8003\u9a57\u8b93\u9019\u6f14\u7b97\u6cd5\u8f03\u7a69\u5b9a\u3002
"},{"location":"feedback/designing-data-intensive-applications/farewell/#\u5206\u6563\u5f0f\u8cc7\u6599\u5eab","title":"\u5206\u6563\u5f0f\u8cc7\u6599\u5eab","text":"\u96a8\u8457\u8cc7\u6599\u548c\u6d41\u91cf\u7684\u6210\u9577\uff0c\u6211\u5011\u9700\u8981\u5206\u5340\u548c\u8907\u88fd\u7684\u5e6b\u5fd9\u3002
\u8907\u88fd\u5e6b\u52a9\u6211\u5011\u63d0\u9ad8\u6574\u500b\u7cfb\u7d71\u7684\u53ef\u7528\u6027\uff0c\u7576\u4e00\u53f0\u8cc7\u6599\u5eab\u56e0\u70ba\u4efb\u4f55\u539f\u56e0\u7121\u6cd5\u56de\u61c9\u8acb\u6c42\u6642\uff0c\u5176\u4ed6\u8cc7\u6599\u5eab\u5c31\u53ef\u4ee5\u5e6b\u5fd9\u3002\u540c\u6642\u900f\u904e\u628a\u6d41\u91cf\u5e73\u5747\u5206\u914d\u65bc\u5404\u500b\u8907\u88fd\u4e2d\uff0c\u5c31\u80fd\u9054\u5230\u975e\u5e38\u6709\u6548\u7684\u8ca0\u8f09\u5e73\u8861\u3002\u4f46\u662f\u56e0\u70ba\u4e0d\u540c\u8cc7\u6599\u5eab\u53ef\u80fd\u4e0d\u662f\u5b8c\u5168\u4e00\u6a23\u7684\u6240\u4ee5\u6703\u6709\u72c0\u614b\u4e0d\u4e00\u81f4\u7684\u72c0\u6cc1\u3002\u8d8a\u662f\u8981\u6c42\u4e0d\u540c\u8cc7\u6599\u5eab\u7684\u72c0\u614b\u4e00\u81f4\u6027\uff0c\u901a\u5e38\u5c31\u6703\u72a7\u7272\u8907\u88fd\u7684\u6548\u80fd\u3002
\u5206\u5340\u5e6b\u52a9\u6211\u5011\u8212\u89e3\u8cc7\u6599\u8d8a\u9577\u8d8a\u5927\uff0c\u55ae\u53f0\u7bc0\u9ede\u7121\u6cd5\u8ca0\u8377\u7684\u72c0\u6cc1\uff0c\u540c\u6642\u5728\u90e8\u5206\u72c0\u6cc1\u4e0b\uff0c\u4e5f\u80fd\u505a\u5230\u8ca0\u8f09\u5e73\u8861\u7684\u6548\u679c\uff0c\u7576\u8cc7\u6599\u5eab\u8655\u7406\u6307\u5b9a\u8cc7\u6599\uff08\u4f8b\u5982\u4f7f\u7528\u8005 1234 \u7684\u8cc7\u8a0a\uff09\u7684\u8acb\u6c42\u6642\uff0c\u5c31\u53ef\u4ee5\u628a\u8acb\u6c42\u9001\u5230\u64c1\u6709\u8a72\u8cc7\u6599\u7684\u5206\u5340\uff0c\u4f46\u662f\u5982\u679c\u8655\u7406\u7684\u8acb\u6c42\u9700\u8981\u591a\u500b\u5206\u5340\u7684\u8cc7\u6599\uff08\u4f8b\u5982\u4f7f\u7528\u8005\u7684\u5e73\u5747\u5e74\u9f61\uff09\u6642\uff0c\u5c31\u6703\u63d0\u9ad8\u56de\u61c9\u6642\u9593\u548c\u932f\u8aa4\u767c\u751f\u7684\u6a5f\u7387\u3002\u6240\u4ee5\u5206\u5340\u6703\u9762\u81e8\u8cc7\u6599\u9023\u7e8c\u6027\u548c\u8cc7\u6599\u5206\u5340\u5e73\u8861\u7684\u6b0a\u8861\uff0c\u8d8a\u9ad8\u7684\u9023\u7e8c\u6027\u4ee3\u8868\u53ef\u4ee5\u505a\u5230\u8d8a\u597d\u7684\u7bc4\u570d\u641c\u5c0b\uff0c\u8d8a\u9ad8\u7684\u5e73\u8861\uff08\u8cc7\u6599\u5e73\u5747\u6253\u6563\u5230\u5206\u5340\uff09\u4ee3\u8868\u80fd\u505a\u5230\u8d8a\u597d\u7684\u8ca0\u8f09\u5e73\u8861\u3002
"},{"location":"feedback/designing-data-intensive-applications/farewell/#\u8907\u88fd","title":"\u8907\u88fd","text":"\u8981\u505a\u5230\u8907\u88fd\u4e3b\u8981\u6709\u4e09\u7a2e\u65b9\u5f0f\uff1a
\u55ae\u4e00\u9818\u8896\u56e0\u70ba\u9ad8\u5ea6\u4f9d\u8cf4\u552f\u4e00\u7684\u9818\u8896\uff0c\u7576\u9818\u8896\u5931\u80fd\u6642\u91cd\u9078\u9818\u8896\u7684\u6a5f\u5236\u5fc5\u9808\u8981\u8b39\u614e\u8a2d\u8a08\u5426\u5247\u5bb9\u6613\u9020\u6210\u8907\u6b0a\uff08split brain\uff09\u7684\u554f\u984c\uff0c\u9664\u6b64\u4e4b\u5916\u56e0\u70ba\u53d7\u9650\u65bc\u55ae\u4e00\u9818\u8896\u7684\u5730\u7406\u4f4d\u7f6e\uff0c\u4e0d\u597d\u505a\u5230\u591a\u8cc7\u6599\u4e2d\u5fc3\u7684\u7d50\u69cb\u3002\u55ae\u4e00\u9818\u8896\u6700\u5927\u512a\u52e2\u5728\u65bc\u6240\u6709\u7570\u52d5\u90fd\u5728\u9818\u8896\u5b8c\u6210\uff0c\u4e0d\u6703\u6709\u5169\u500b\u7570\u52d5\u885d\u7a81\u7684\u72c0\u6cc1\u3002
\u591a\u9818\u8896\u56e0\u70ba\u5141\u8a31\u591a\u500b\u7bc0\u9ede\u57f7\u884c\u7570\u52d5\uff0c\u7576\u7570\u52d5\u9593\u9020\u6210\u885d\u7a81\u5c31\u9700\u8981\u900f\u904e\u4e00\u4e9b\u6f14\u7b97\u6cd5\u89e3\u885d\u7a81\uff0c\u9019\u8b93\u591a\u9818\u8896\u7684\u53e2\u96c6\u8f03\u5c11\u88ab\u5be6\u73fe\u3002
\u7121\u9818\u8896\u548c\u76f4\u89c0\u4e0a\u5f88\u597d\u7406\u89e3\u7684\u9818\u8896\u985e\u578b\u53e2\u96c6\u4e0d\u540c\uff0c\u4e14\u662f\u8fd1\u5e7e\u5e74\u624d\u53c8\u91cd\u65b0\u53d7\u5230\u95dc\u6ce8\u7684\u8907\u88fd\u65b9\u5f0f\u3002\u900f\u904e\u61c9\u7528\u7a0b\u5f0f\u548c\u8cc7\u6599\u5eab\u4e2d\u9593\u7684\u5354\u8abf\u8005\uff08\u5354\u8abf\u8005\u662f\u7121\u72c0\u614b\uff0c\u6240\u4ee5\u53ef\u4ee5\u50cf\u61c9\u7528\u7a0b\u5f0f\u822c\u5f88\u5bb9\u6613\u9054\u5230\u9ad8\u53ef\u7528\uff09\u4f86\u5e6b\u52a9\u8acb\u6c42\u9001\u5230\u6240\u6709\u8cc7\u6599\u5eab\u3002\u900f\u904e \u9d3f\u5de2\u539f\u7406 \u53ef\u4ee5\u4fdd\u8b49\u8cc7\u6599\u7684\u4e00\u81f4\u6027\uff0c\u4e26\u5141\u8a31\u90e8\u5206\u7684\u7570\u6b65\u4f86\u9054\u6210\u9ad8\u53ef\u7528\u6027\u3002\u3002\u7576\u6709\u7bc0\u9ede\u6c92\u6536\u5230\u8acb\u6c42\u6642\uff08\u56e0\u70ba\u662f\u4f7f\u7528\u7570\u6b65\u7684\u65b9\u5f0f\uff0c\u6240\u4ee5\u6c92\u8fa6\u6cd5\u4fdd\u8b49\u7bc0\u9ede\u6536\u5230\u8cc7\u6599\uff09\u5c31\u900f\u904e\u80cc\u666f\u5b9a\u671f\u6574\u4f75\uff08anti-entropy process\uff09\u548c\u8b80\u53d6\u6642\u5fa9\u539f\uff08read repair\uff09\u4f86\u7dad\u6301\u4e00\u81f4\u6027\u3002
"},{"location":"feedback/designing-data-intensive-applications/farewell/#\u8907\u88fd\u65e5\u8a8c","title":"\u8907\u88fd\u65e5\u8a8c","text":"\u5728\u9818\u8896\u985e\u578b\u7684\u8cc7\u6599\u53e2\u96c6\u4e2d\uff0c \u900f\u904e\u5728\u8cc7\u6599\u5eab\u9593\u50b3\u905e \u8907\u88fd\u65e5\u8a8c \u4f86\u9054\u6210\u4e00\u81f4\u6027\u3002 \u4e3b\u8981\u662f\u4f7f\u7528\u908f\u8f2f\u65e5\u8a8c\uff0c\u56e0\u70ba\u4ed6\u4ecb\u65bc\u8a9e\u6cd5\u65e5\u8a8c\u548c WAL \u4e2d\u9593\uff0c \u4e0d\u6703\u904e\u65bc\u62bd\u8c61\u5c0e\u81f4\u5be6\u969b\u8cc7\u6599\u6703\u7522\u751f\u5dee\u7570\uff08\u4f8b\u5982 UPDATE user 1234 updated_at = now()
\uff09\uff0c MySQL \u7684 binlog \u548c PostgreSQL \u7684 logical-decoding \u5c31\u662f\u9019\u7a2e\u6771\u897f\u3002
\u5728\u591a\u500b\u7bc0\u9ede\u8981\u9054\u6210\u4e00\u81f4\u6027\u6703\u6709\u5982\u4e0a\u5716\u7684\u4e09\u7a2e\u65b9\u5f0f\uff0c\u503c\u5f97\u6ce8\u610f\u7684\u662f\u7121\u8ad6\u662f\u54ea\u4e00\u7a2e\uff0c\u76ee\u524d\u7684\u7814\u7a76\u90fd\u6703\u56de\u6b78\u5230\u55ae\u4e00\u7bc0\u9ede\u7684\u901a\u91cf\u4f86\u9054\u6210\u5168\u57df\u9806\u5e8f\u5ee3\u64ad\uff0c\u4e5f\u5c31\u662f\u6548\u80fd\u6703\u53d7\u5230\u55ae\u4e00\u7bc0\u9ede\u7684\u5929\u82b1\u677f\u9650\u5236\u3002
\u5171\u8b58\u6f14\u7b97\u6cd5\u7684\u9ad8\u53ef\u7528\u548c\u8ca0\u8f09\u5e73\u8861
\u5171\u8b58\u6f14\u7b97\u6cd5\u8b93\u591a\u500b\u7bc0\u9ede\u5171\u540c\u64c1\u6709\u4e00\u500b\u5168\u57df\u9806\u5e8f\uff0c\u4e26\u63d0\u4f9b\u7d66\u5916\u90e8\u4f7f\u7528\u8005\u4f86\u5e6b\u52a9\u9054\u6210\u7dda\u6027\u6216\u5e8f\u5217\u5316\u7684\u57f7\u884c\u5e8f\u3002
\u7136\u800c\u5171\u8b58\u6f14\u7b97\u6cd5\u6c92\u8fa6\u6cd5\u505a\u5230\u8ca0\u8f09\u5e73\u8861\uff0c\u5168\u90e8\u7bc0\u9ede\u90fd\u8981\u53c3\u8207\u65b0\u7684\u9806\u5e8f\u7684\u9078\u8209\uff0c\u900f\u904e\u53ea\u9700\u8981\u591a\u6578\uff08\u591a\u6578\u6c7a\uff09\u7bc0\u9ede\u7684\u5b58\u6d3b\u4f86\u4fdd\u8b49\u53ef\u7528\u6027\u3002\u4e0d\u904e\u6211\u5011\u53ef\u4ee5\u900f\u904e\u8b80\u5beb\u5206\u96e2\u4f86\u5e6b\u52a9\u964d\u4f4e\u9078\u8209\u4eba\u7684\u8ca0\u64d4\uff0c\u4f8b\u5982 Paxos \u7684 Learner \u7bc0\u9ede\u3002
"},{"location":"feedback/designing-data-intensive-applications/farewell/#\u884d\u751f\u8cc7\u6599\u7cfb\u7d71","title":"\u884d\u751f\u8cc7\u6599\u7cfb\u7d71","text":"\u5728\u4ecb\u7d39\u8cc7\u6599\u5eab\u7684\u6642\u5019\uff0c\u6211\u5011\u63d0\u5230\u4e86\u5f88\u591a\u7a2e\u61c9\u7528\uff0c\u90fd\u662f\u900f\u904e\u539f\u59cb\u8cc7\u6599\u91cd\u65b0\u8f49\u8b6f\u6210\u53e6\u4e00\u7a2e\u9762\u8c8c\u8b93\u5176\u4ed6\u61c9\u7528\u7a0b\u5f0f\u8b80\u53d6\uff0c\u4e0d\u7ba1\u662f\u6b21\u7d22\u5f15\u9084\u662f\u5feb\u53d6\u7b49\u7b49\u3002\u5728\u9019\u4e4b\u4e2d\uff0c\u6709\u4e00\u7a2e\u8a08\u7b97\u65b9\u5f0f\u7a31\u70ba\u6279\u6b21\u8655\u7406\uff0c\u4ed6\u7684\u54f2\u5b78\u5728\u65bc\u4e0d\u7570\u52d5\u8cc7\u6599\u4f86\u6e90\uff0c\u76f4\u63a5\u628a\u60f3\u8981\u7684\u7d50\u679c\u7b97\u51fa\u4f86\u653e\u5230\u6a94\u6848\u7cfb\u7d71\uff0c\u518d\u8b93\u5176\u4ed6\u7a0b\u5e8f\u8a08\u7b97\u5176\u4ed6\u7d50\u679c\u3002
\u9019\u6a23\u7684\u54f2\u5b78\u548c\u6211\u5011\u5728 Linux \u4e0a\u7684 GNU Coreutils \u5de5\u5177\u975e\u5e38\u76f8\u50cf\uff0c\u900f\u904e\u4e0d\u7570\u52d5\u8cc7\u6599\u6e90\u4f86\u6eff\u8db3\u51aa\u7b49\u7684\uff08idempotent\uff09\u3002\u53ea\u662f\u9019\u88e1\u7684\u6279\u6b21\u8655\u7406\u4e0d\u518d\u53ea\u662f\u55ae\u4e00\u7bc0\u9ede\u800c\u662f\u5206\u6563\u5f0f\u7684\uff0c\u5176\u4e2d\u7684 Unix \u7684\u6a94\u6848\u63cf\u8ff0\u7b26\u5c0d\u61c9\u5230\u5206\u6563\u5f0f\u7cfb\u7d71\u5c31\u662f HDFS\uff0c\u800c Coreutils \u5c31\u662f MapReduce/Spark/Flink \u7b49\u6846\u67b6\u63d0\u4f9b\u7684\u7a0b\u5f0f\u5eab\u6216\u8005\u81ea\u5df1\u5ba2\u5236\u7684\u5546\u52d9\u908f\u8f2f\u3002
\u6279\u6b21\u8655\u7406\u900f\u904e\u5206\u6563\u5f0f\u904b\u7b97\u548c\u4e0d\u7570\u52d5\u4f86\u6e90\u6240\u5f62\u6210\u7684\u5bb9\u932f\u6027\uff0c\u5728\u5f88\u591a\u5834\u666f\u4e2d\u90fd\u80fd\u6709\u8ca2\u737b\uff0c\u4f8b\u5982\u55ae\u53f0\u7bc0\u9ede\u4f60\u9664\u4e86\u53ef\u4ee5\u8dd1\u7dda\u4e0a\u670d\u52d9\uff0c\u900f\u904e\u8ce6\u4e88\u6279\u6b21\u8655\u7406\u7684\u7a0b\u5e8f\u8f03\u4f4e\u7684\u512a\u5148\u7a0b\u5ea6\u8b93\u6a5f\u5668\u5728\u4f4e\u6d41\u91cf\u6642\u4ecd\u80fd\u4fdd\u6301\u4e00\u5b9a\u7684\u904b\u7b97\u91cf\u3002
\u4e32\u6d41\u8655\u7406\u548c\u6279\u6b21\u8655\u7406\u5f88\u50cf\uff0c\u90fd\u662f\u7528\u65bc\u7522\u751f\u884d\u751f\u8cc7\u6599\u3002\u4f46\u662f\u4e32\u6d41\u8655\u7406\u5f88\u91cd\u8981\u7684\u4e00\u9ede\u662f\u5132\u5b58\u7684\u4e0d\u518d\u662f\u300c\u72c0\u614b\u300d\u800c\u662f\u5f62\u6210\u72c0\u614b\u7684\u300c\u4e8b\u4ef6\u300d\u3002
\u9019\u9ede\u548c\u8cc7\u6599\u5eab\u6709\u5f88\u5927\u7684\u5dee\u5225\uff0c\u524d\u9762\u63d0\u7684\u8cc7\u6599\u5eab\u90fd\u900f\u904e\u958b\u767c\u8005\u5c0d\u65bc\u5546\u52d9\u908f\u8f2f\u53bb\u8a2d\u8a08\u7db1\u76ee\uff0c\u8b93\u8cc7\u6599\u5eab\u5132\u5b58\u7b26\u5408\u9700\u6c42\u7684\u72c0\u614b\u3002\u4f46\u662f\u61c9\u7528\u7a0b\u5f0f\u662f\u6703\u6210\u9577\u7684\uff0c\u7576\u73fe\u6709\u7684\u7db1\u76ee\u4e0d\u5920\u652f\u63f4\u65b0\u7684\u61c9\u7528\u6642\uff0c\u52e2\u5fc5\u5c31\u6703\u6709\u7570\u52d5\uff0c\u9019\u6642\u65b0\u7684\u72c0\u614b\u5f88\u53ef\u80fd\u5c31\u9700\u8981\u7b49\u5f85\u4f7f\u7528\u8005\u53bb\u8f38\u5165\uff0c\u6216\u8005\u900f\u904e\u80cc\u666f\u904b\u7b97\u628a\u8cc7\u6599\u88dc\u9032\u53bb\uff0c\u4e0d\u8ad6\u54ea\u4e00\u7a2e\u90fd\u4e0d\u662f\u5f88\u597d\u7684\u65b9\u6cd5\uff0c\u5c24\u5176\u4e0d\u5c0f\u5fc3\u6539\u932f\u4e86\u6771\u897f\u8981\u5fa9\u539f\u6642\u5c31\u66f4\u56f0\u96e3\u4e86\u3002
\u900f\u904e\u5132\u5b58\u539f\u59cb\u7684\u4e8b\u4ef6\uff0c\u7576\u6211\u6709\u9700\u8981\u65b0\u7684\u7db1\u76ee\u6642\uff0c\u6211\u5c31\u53ef\u4ee5\u900f\u904e\u6b77\u53f2\u7684\u4e8b\u4ef6\u91cd\u65b0\u5f62\u5851\u51fa\u5168\u65b0\u7684\u72c0\u614b\u3002\u9664\u6b64\u4e4b\u5916\uff0c\u7576\u767c\u73fe\u73fe\u6709\u72c0\u614b\u6709\u932f\u6642\uff0c\u6211\u53ef\u4ee5\u900f\u904e\u6b77\u53f2\u4e8b\u4ef6\u91cd\u65b0\u8a08\u7b97\u72c0\u614b\u4e26\u6aa2\u67e5\u54ea\u4e00\u500b\u4e8b\u4ef6\u5c0e\u81f4\u72c0\u614b\u7570\u5e38\u3002
CDC\uff08Change Data Capture\uff09\u5c31\u662f\u8cc7\u6599\u5eab\u628a\u6bcf\u6b21\u7684\u7570\u52d5\u8f38\u51fa\u6210\u4e8b\u4ef6\u3002
"},{"location":"feedback/designing-data-intensive-applications/farewell/#\u6574\u5408","title":"\u6574\u5408","text":"\u63a5\u4e0b\u4f86\u5c31\u8981\u8ac7\u8ac7\u600e\u9ebc\u505a\u5230\u4e00\u500b\u53ef\u4ee5\u6eff\u8db3\u9ad8\u5bb9\u932f\u3001\u9ad8\u53ef\u7528\u548c\u9ad8\u8907\u96dc\u5ea6\u7684\u67b6\u69cb\u3002
"},{"location":"feedback/designing-data-intensive-applications/farewell/#\u70ba\u4ec0\u9ebc\u8981\u6574\u5408","title":"\u70ba\u4ec0\u9ebc\u8981\u6574\u5408","text":"\u6211\u5011\u5f9e\u524d\u9762\u5df2\u7d93\u77e5\u9053\u9078\u64c7\u4e0d\u540c\u8cc7\u6599\u5eab\uff08\u4f8b\u5982\u9078\u64c7 MySQL v.s. Redis\uff09\u5176\u5be6\u5c31\u662f\u5728\u4e0d\u540c\u9762\u5411\u4f5c\u6b0a\u8861\uff0c\u8209\u4f8b\u4f86\u8aaa\uff1a
\u6bcf\u500b\u8cc7\u6599\u5eab\u6703\u52aa\u529b\u5ba3\u7a31\u5176\u512a\u52e2\uff0c\u4f46\u662f\u901a\u904e\u524d\u5e7e\u7ae0\u7684\u5b78\u7fd2\uff0c\u6211\u5011\u61c9\u8a72\u5177\u5099\u4e86\u80fd\u7528\u5bec\u95ca\u7684\u8996\u91ce\u53bb\u67e5\u770b\u9019\u4e9b\u6587\u4ef6\uff0c\u6211\u5011\u80fd\u5728\u5167\u5fc3\u56de\u7b54\u81ea\u5df1\uff1a\u7576\u4ed6\u63d0\u4f9b\u9019\u9805\u512a\u52e2\u6642\u72a7\u7272\u4e86\u4ec0\u9ebc\uff1f
\u6b63\u56e0\u70ba\u6c92\u6709\u4e00\u500b\u5de5\u5177\u80fd\u5920\u61c9\u4ed8\u5404\u7a2e\u72c0\u6cc1\uff0c\u6211\u5011\u7121\u53ef\u907f\u514d\u5730\u8981\u6574\u5408\u9019\u4e9b\u4e0d\u540c\u7528\u9014\u7684\u8cc7\u6599\u7cfb\u7d71\u3002\u4f46\u662f\u8a72\u600e\u9ebc\u6574\u5408\uff1f\u5e38\u898b\u7684\u505a\u6cd5\u5c31\u662f\u900f\u904e\u61c9\u7528\u7a0b\u5f0f\u6574\u5408\uff1a
\u7576\u61c9\u7528\u7a0b\u5f0f\u958b\u59cb\u6574\u5408\u4e86\uff0c\u4f60\u5c31\u9700\u8981\u4e00\u500b\u6e05\u695a\u7684\u6982\u89c0\u77e5\u9053\u8cc7\u6599\u4ee5\u4f55\u7a2e\u683c\u5f0f\u5f9e\u54ea\u908a\u8f38\u5165\uff0c \u53c8\u4ee5\u4f55\u7a2e\u683c\u5f0f\u6703\u8f38\u51fa\u5230\u4f55\u8655\uff0c\u9019\u4e9b\u90fd\u4e0d\u662f\u5bb9\u6613\u7684\u4e8b\u60c5\uff0c\u7121\u95dc\u4f60\u662f\u4e0d\u662f\u5de5\u7a0b\u5e2b\u3002 \u9664\u6b64\u4e4b\u5916\u900f\u904e\u61c9\u7528\u7a0b\u5f0f\u5f88\u5bb9\u6613\u5c31\u6703\u9047\u5230\u908a\u969b\u72c0\u6cc1\uff0c\u56e0\u70ba\u6211\u5011\u6c92\u8fa6\u6cd5\u6709\u6548\u7684\u5728\u958b\u767c\u7576\u4e0b\u4e86\u89e3\u5404\u7a2e\u53ef\u80fd\u7684\u72c0\u6cc1\uff0c \u4f8b\u5982\u5feb\u53d6\u9020\u6210\u7684\u72c0\u614b\u4e0d\u4e00\u81f4\u3002
\u5982\u679c\u6c92\u6709\u4e00\u500b\u6e05\u695a\u7684\u6982\u89c0\u6703\u767c\u751f\u4ec0\u9ebc\u4e8b\uff1f\u4ee5\u5168\u6587\u7d22\u5f15\u70ba\u4f8b\uff1a
\u5982\u679c\u5168\u6587\u7d22\u5f15\u539f\u672c\u900f\u904e\u8cc7\u6599\u5eab\u7684 CDC \u4f86\u7372\u5f97\u8cc7\u6599\uff0c\u4e26\u4f9d\u6b64\u4fdd\u8b49\u5176\u548c\u8cc7\u6599\u5eab\u7684\u72c0\u614b\u4e00\u81f4\u6027\uff0c\u4f46\u662f\u5982\u679c\u4eca\u5929\u6709\u500b\u61c9\u7528\u7a0b\u5f0f\u4e0d\u77e5\u9053\u9019\u500b\u72c0\u6cc1\uff0c\u518d\u984d\u5916\u88dc\u4e0a\u4e00\u4e9b\u8f38\u5165\u7d66\u641c\u5c0b\u7d22\u5f15\uff0c\u9019\u6642\u5c31\u6703\u51fa\u60f3\u5169\u8005\u72c0\u614b\u4e0d\u4e00\u81f4\u7684\u72c0\u6cc1\u3002
\u9019\u7a2e\u60c5\u6cc1\u6703\u96a8\u8457\u67b6\u69cb\u8907\u96dc\u7684\u63d0\u5347\u8b8a\u5f97\u8d8a\u4f86\u8d8a\u96b1\u6666\u3002
"},{"location":"feedback/designing-data-intensive-applications/farewell/#\u600e\u9ebc\u6709\u6548\u6574\u5408","title":"\u600e\u9ebc\u6709\u6548\u6574\u5408","text":"\u5176\u5be6\u4e0a\u9762\u9019\u500b\u72c0\u6cc1\u4ee3\u8868\u8457\u597d\u7684\u61c9\u7528\u7a0b\u5f0f\u67b6\u69cb\u5c31\u662f\u5728\u89e3\u6c7a\uff1a\u600e\u9ebc\u6709\u6548\u6574\u5408\u7570\u8cea\u9593\u7684\u72c0\u614b\uff1f
\u5206\u6563\u5f0f\u4ea4\u6613\u67b6\u69cb\uff08\u4f8b\u5982 XA\uff09\uff1a\u4ed6\u80fd\u8b93\u7570\u8cea\u9593\u7684\u61c9\u7528\u4fdd\u6301\u7dda\u6027\u95dc\u4fc2\uff0c\u4e5f\u5c31\u662f\u8b80\u5230\u7684\u8cc7\u8a0a\u5c31\u662f\u6700\u65b0\u7684\u8cc7\u8a0a\u3002
XA \u7684\u7f3a\u9ede\u5c31\u662f\u4f4e\u6548\u80fd\u4f4e\u53ef\u7528\u6027\uff0c\u53e6\u4e00\u7a2e\u65b9\u5f0f\u662f\u900f\u904e\u4e8b\u4ef6\u4f86\u6e90\uff0c\u5229\u7528\u4e8b\u4ef6\u662f\u51aa\u7b49\u7684\uff08idempotent\uff09\u548c\u6c7a\u5b9a\u6027\u7684\uff08deterministic\uff09\u4f86\u4fdd\u6301\u4e00\u81f4\uff0c\u4e5f\u5c31\u662f\u6bcf\u6b21\u57f7\u884c\u76f8\u540c\u7684\u4e8b\u4ef6\u90fd\u6703\u5f97\u5230\u76f8\u540c\u7684\u7d50\u679c\uff0c\u4f46\u662f\u6703\u6709\u300c\u8907\u88fd\u5ef6\u9072\u300d\u7684\u554f\u984c\uff08\u7570\u65bc\u7dda\u6027\u95dc\u4fc2\uff09\u3002
\u51aa\u7b49 v.s. \u6c7a\u5b9a\u6027
\u51aa\u7b49 \u4ee3\u8868\u91cd\u8907\u57f7\u884c\u8a72\u884c\u70ba\u6642\u4e0d\u6703\u9020\u6210\u984d\u5916\u7684\u5f71\u97ff\uff0c\u4f8b\u5982\u522a\u9664\u6a94\u6848\uff0c\u7576\u4f60\u91cd\u8907\u522a\u9664\u8a72\u6a94\u6848\u6642\uff0c\u4e0d\u6703\u6709\u5176\u4ed6\u5f71\u97ff\u3002 \u6c7a\u5b9a\u6027 \u4ee3\u8868\u6bcf\u6b21\u8f38\u5165\u90fd\u6703\u6709\u76f8\u540c\u7684\u8f38\u51fa\uff0c\u4f8b\u5982\u7d71\u8a08\u6307\u5b9a\u5b57\u4e32\u9577\u5ea6\uff0c\u4e0d\u6703\u7b2c\u4e8c\u6b21\u5f97\u5230\u7684\u7b54\u6848\u548c\u7b2c\u4e00\u6b21\u4e0d\u4e00\u6a23\uff0c\u540c\u6642\u4e0d\u6703\u6709\u5176\u4ed6\u5916\u90e8\u5f71\u97ff\uff0c\u4f8b\u5982\u958b\u65b0\u6a94\u6848\u3002
\u6c7a\u5b9a\u6027 \u7684\u8981\u6c42\u6bd4 \u51aa\u7b49 \u9ad8\u3002\u5dee\u7570\u8a73\u898b\u65bc\u6b64
\u6839\u64da\u4f60\u7684\u61c9\u7528\u7a0b\u5f0f\u548c\u74b0\u5883\u7684\u8981\u6c42\uff0c\u9078\u64c7\u4e0d\u540c\u7684\u65b9\u5f0f\uff1a
\u7576\u4f4e\u6548\u7387\u548c\u4f4e\u5bb9\u932f\u4e0d\u80fd\u88ab\u5bb9\u5fcd\uff0c\u4e8b\u4ef6\u4f86\u6e90\u5c31\u8b8a\u6210\u552f\u4e00\u7684\u9078\u64c7\u4e86\u3002\u63a5\u4e0b\u4f86\u8a0e\u8ad6\u7684\u91cd\u9ede\u5c31\u662f\uff1a\u4e8b\u4ef6\u4f86\u6e90\u600e\u9ebc\u6574\u5408\u7570\u8cea\u61c9\u7528\uff1f\u63d0\u4f9b\u4e86\u54ea\u4e9b\u597d\u58de\u8655\uff1f\u6709\u6c92\u6709\u9664\u4e86\u6700\u7d42\u4e00\u81f4\u6027\u4e4b\u5916\u7684\u9078\u64c7\uff1f
Google Sheet \u7684\u9ad8\u5ea6\u76f8\u4f3c
\u4e8b\u4ef6\u4f86\u6e90\u7684\u67b6\u69cb\u548c Google Sheet \u5f88\u50cf\uff0c\u7576\u539f\u59cb\u8cc7\u6599\u6539\u8b8a\uff0c\u5916\u9762\u7684\u7a0b\u5f0f\u6703\u81ea\u52d5\u611f\u77e5\u4e26\u4fee\u6b63\u7522\u51fa\u7684\u503c\u3002
"},{"location":"feedback/designing-data-intensive-applications/farewell/#\u4e8b\u4ef6\u4f86\u6e90","title":"\u4e8b\u4ef6\u4f86\u6e90","text":"\u900f\u904e\u4e8b\u4ef6\u4f86\u6e90\u5929\u751f \u7570\u6b65 \u7684\u8655\u7406\u65b9\u5f0f\uff0c\u8b93\u5169\u500b\u7570\u8cea\u61c9\u7528\u53ef\u4ee5\u5f7c\u6b64\u7368\u7acb\u4e0d\u518d\u4f9d\u8cf4\u5f7c\u6b64\uff08\u8f38\u51fa\u4e8b\u4ef6\u6642\u4e0d\u7528\u7b49\u5230\u56de\u61c9\uff09\u9054\u5230\u9ad8\u5bb9\u932f\u548c\u9ad8\u6548\u7387\u3002
\u9664\u6b64\u4e4b\u5916\uff0c\u524d\u9762\u5728\u6279\u6b21\u8655\u7406\u4e2d\u63d0\u7684 \u6c7a\u5b9a\u6027 \u4e5f\u80fd\u63d0\u5347\u5bb9\u932f\u6027\uff0c\u8209\u4f8b\u4f86\u8aaa\uff0c\u6279\u6b21\u8655\u7406\u4e2d\u5982\u679c\u8a08\u7b97\u904e\u7a0b\u4e2d\u51fa\u932f\uff08\u7db2\u8def\u4e2d\u65b7\u7b49\u7b49\uff09\u5c31\u91cd\u65b0\u62ff\u8f38\u5165\u505a\u4e00\u6b21\u8a08\u7b97\uff0c\u800c\u9019\u8a08\u7b97\u4e0d\u6703\u56e0\u70ba\u7b2c\u4e8c\u6b21\u904b\u7b97\u800c\u6709\u4e0d\u540c\u8f38\u51fa\u3002\u6c7a\u5b9a\u6027\u4e0d\u50c5\u65b9\u4fbf\u5bb9\u932f\u4e5f\u6709\u5229\u65bc\u5e6b\u52a9\u6211\u5011\u6574\u5408\u7570\u8cea\u9593\u7684\u61c9\u7528\uff0c\u4f8b\u5982\u6211\u5011\u5c31\u53ef\u4ee5\u900f\u904e\u78ba\u4fdd\u8cc7\u6599\u5eab\u7684 CDC \u662f\u6c7a\u5b9a\u6027\u4e4b\u5f8c\uff0c\u8ffd\u8e64\u8005\u7684\u5931\u80fd\u90fd\u53ef\u4ee5\u900f\u904e\u91cd\u65b0\u8a08\u7b97\u4f86\u6eff\u8db3\u9700\u8981\u7684\u8cc7\u6599\u9762\u5411\u3002
\u524d\u9762\u8cc7\u6599\u5eab\u900f\u904e\u539f\u5b50\u6027\u8b93\u8a08\u7b97\u53ef\u4ee5\u6368\u68c4\u8a08\u7b97\u5f8c\u91cd\u65b0\u57f7\u884c\u8a08\u7b97\uff0c\u4f46\u662f\u7576\u4f7f\u7528\u524d\u9762\u63d0\u7684\u300c\u51aa\u7b49\u300d\u548c\u300c\u6c7a\u5b9a\u6027\u300d\u6642\uff0c\u5c31\u9700\u8981\u61c9\u7528\u7a0b\u5f0f\u81ea\u5df1\u53bb\u6ce8\u610f\u9019\u4e9b\u4e8b\u4ef6\u662f\u5426\u6709\u8a72\u7279\u6027\uff0c\u53e6\u5916\u9084\u6709\u4e0d\u540c\u4e8b\u4ef6\u9593\u7684\u300c\u56e0\u679c\u300d\u4e5f\u9700\u8981\u76e1\u91cf\u7368\u7acb\u3002\u4e00\u822c\u4f86\u8aaa\u61c9\u7528\u7a0b\u5f0f\u6709\u5e7e\u7a2e\u9078\u64c7\uff1a
\u56e0\u679c\u7684\u96b1\u6666\u6027
\u6709\u6642\u5169\u500b\u4e8b\u4ef6\u7684\u56e0\u679c\u662f\u5f88\u96b1\u6666\u7684\u4f8b\u5982\u5206\u624b\u5f8c\u7684\u60c5\u4fb6\u5728\u793e\u4ea4\u8edf\u9ad4\u4e92\u76f8\u5c01\u9396\uff0c\u5176\u4e2d\u4e00\u500b\u4eba\u5728\u5206\u624b\u5f8c\u767c\u8cbc\u6587\u5927\u7206\u6599\uff0c\u9019\u4e4b\u4e2d\u7684\u5169\u500b\u4e8b\u4ef6\u300c\u5c01\u9396\u300d\u548c\u300c\u767c\u6587\u300d\u5176\u5be6\u662f\u6709\u56e0\u679c\u7684\u3002
"},{"location":"feedback/designing-data-intensive-applications/farewell/#\u770b\u770b\u4f8b\u5b50","title":"\u770b\u770b\u4f8b\u5b50","text":"\u6211\u5011\u4ee5\u6b21\u7d22\u5f15\u70ba\u4f8b\uff0c\u5982\u679c\u5728\u5206\u6563\u5f0f\u7684\u8cc7\u6599\u5eab\u4e2d\u8981\u7dad\u6301\u6b21\u7d22\u5f15\uff0c \u6211\u5011\u6703\u9700\u8981\u5728\u5404\u500b\u5206\u5340\u4e2d\u540c\u6b65\u9019\u4e9b\u8cc7\u6599\uff08\u7121\u8ad6\u662f\u672c\u5730\u7d22\u5f15\u6216\u8005\u5168\u57df\u7d22\u5f15\uff09\uff0c\u4f46\u662f\u9019\u6703\u589e\u52a0\u5beb\u5165\u8cc7\u6599\u6642\u7684\u5de5\u4f5c\u3002
\u5982\u679c\u628a\u9019\u6a23\u7684\u6b21\u7d22\u5f15\u900f\u904e\u4e8b\u4ef6\u4f86\u6e90\u7684\u6a5f\u5236\u8b93\u5176\u4ed6\u61c9\u7528\u53bb\u7dad\u6301\u9019\u500b\u65b0\u7684\u8cc7\u6599\u5eab\u9762\u5411\uff0c \u9019\u6642\u5c31\u4e0d\u9700\u8981\u72a7\u7272\u5beb\u5165\u6216\u8b80\u53d6\u7684\u6548\u80fd\u4e86\uff0c\u4e5f\u56e0\u70ba\u9019\u6a23\u8b93\u8cc7\u6599\u5eab\u64c1\u6709\u66f4\u9ad8\u7684\u53ef\u7528\u6027\u3002
\u518d\u8209\u4e00\u500b\u7db1\u76ee\u6f14\u9032\u7684\u4f8b\u5b50\uff0c\u5728\u8a0e\u8ad6\u7db1\u76ee\u6642\uff0c \u6211\u5011\u8ac7\u4e86\u5f88\u591a\u6a5f\u5236\u5e6b\u52a9\u7dad\u904b\u9019\u500b\u6703\u96a8\u8457\u61c9\u7528\u7a0b\u5f0f\u6210\u9577\u4e00\u76f4\u6539\u8b8a\u7684\u6771\u897f\u3002 \u4f46\u662f\u900f\u904e\u4e8b\u4ef6\u4f86\u6e90\uff0c\u6211\u5011\u751a\u81f3\u53ef\u4ee5\u5efa\u7acb\u5169\u500b\u5b8c\u5168\u4e0d\u540c\u7db1\u76ee\u7684\u8cc7\u6599\u5eab\uff0c \u518d\u900f\u904e A/B \u6e2c\u8a66\u5c0e\u6d41\u7279\u5b9a\u4f7f\u7528\u8005\u5230\u65b0\u7684\u7db1\u76ee\u4e0a\uff0c\u904b\u884c\u4e00\u9663\u5b50\u4e4b\u5f8c\u78ba\u4fdd\u8cc7\u6599\u6c92\u6709\u7570\u5e38\u5c31\u53ef\u4ee5\u5b8c\u6574\u5207\u63db\u3002
"},{"location":"feedback/designing-data-intensive-applications/farewell/#\u7368\u7acb\u5beb\u5165\u548c\u6574\u5408\u8b80\u53d6","title":"\u7368\u7acb\u5beb\u5165\u548c\u6574\u5408\u8b80\u53d6","text":"\u900f\u904e\u9019\u4e9b\u4f8b\u5b50\u6211\u5011\u5c31\u6703\u767c\u73fe\uff0c\u6574\u5408\u7570\u8cea\u9593\u7684\u61c9\u7528\u5176\u5be6\u5c31\u662f\u628a\u539f\u672c\u55ae\u4e00\u8cc7\u6599\u5eab\u505a\u7684\u4e8b\u5206\u7d66\u5176\u4ed6\u61c9\u7528\u53bb\u505a\u3002\u4e5f\u5c31\u662f\u8b93\u8cc7\u6599\u5eab\u5167\u90e8\u904b\u4f5c\u539f\u4f86\u5206\u6563\u7d66\u5404\u500b\u7368\u7acb\u7684\u61c9\u7528\u7a0b\u5f0f\u53e2\u96c6\uff0c\u5c31\u597d\u50cf\u73fe\u5728\u5e38\u7528\u7684\u5fae\u670d\u52d9\uff08micro service\uff09\uff0c\u4e5f\u6709\u4eba\u7a31\u5176\u70ba database-inside-out\uff08\u628a\u8cc7\u6599\u5eab\u88e1\u7684\u908f\u8f2f\u62ff\u51fa\u4f86\uff09\u3002\u9019\u9ebc\u505a\u5c31\u6703\u8b93\u5404\u500b\u670d\u52d9\u64c1\u6709\u9ad8\u53ef\u7528\u6027\uff0c\u540c\u6642\u53c8\u80fd\u900f\u904e\u4e8b\u4ef6\u6a5f\u5236\u6eff\u8db3\u5f7c\u6b64\u7684\u4e00\u81f4\u6027\u3002
\u9019\u6642\u9664\u4e86\u5beb\u5165\uff0c\u6211\u5011\u4e5f\u8981\u8003\u616e\u5982\u4f55\u900f\u904e\u55ae\u4e00\u4ecb\u9762\u8b80\u53d6\u9019\u4e9b\u7570\u8cea\u7684\u8cc7\u6599\uff0c\u4f8b\u5982 PostgreSQL \u7684 foreign data wrapper \u5c31\u7b26\u5408\u9019\u7a2e\u9700\u6c42\uff0c\u6709\u9ede\u50cf\u662f MPP \u88e1\u9762\u4ed6\u5728\u591a\u500b\u5206\u5340\u57f7\u884c\u6574\u5408\u641c\u5c0b\u3002
\u7136\u800c\u6574\u5408\u9019\u4e9b\u4e0d\u540c\u7684\u61c9\u7528\u6642\uff0c\u6211\u5011\u6703\u9700\u8981\u4ed4\u7d30\u7684\u601d\u8003\u7576\u67d0\u7bc0\u9ede\u5931\u80fd\u6642\uff0c\u6703\u767c\u751f\u4ec0\u9ebc\u4e8b\uff1f\u7136\u5f8c\u6574\u5408\u6642\u4e4b\u9593\u7684\u670d\u52d9\u767c\u73fe\u8981\u600e\u9ebc\u505a\uff1f\u8b93\u61c9\u7528\u7a0b\u5f0f\u4e0d\u9700\u8003\u616e\u8eab\u70ba\u8ffd\u8e64\u8005\u9700\u8981\u6ce8\u610f\u7684\u4e8b\u60c5\u7684\u62bd\u8c61\u4ecb\u9762\u7b49\u7b49\u90fd\u662f\u8981\u4ed4\u7d30\u601d\u8003\u7684\u554f\u984c\u3002\u76ee\u524d\u5e02\u9762\u4e0a\u4e26\u6c92\u6709\u91dd\u5c0d\u9019\u4e9b\u7d50\u69cb\u7684\u670d\u52d9\u51fa\u73fe\uff0c\u4f46\u662f\u6709\u76f8\u95dc\u7684\u7814\u7a76\uff0c\u4f8b\u5982 differential dataflow\u3002
\u4e0a\u9762\u5169\u5f35\u5716\u4f86\u6e90\u662f Samza \u5831\u544a\u7c21\u5831\uff0c\u5206\u5225\u662f 54 \u9801\u548c 57 \u9801\u3002
"},{"location":"feedback/designing-data-intensive-applications/farewell/#\u600e\u9ebc\u505a\u5230\u9ad8\u4e00\u81f4\u6027","title":"\u600e\u9ebc\u505a\u5230\u9ad8\u4e00\u81f4\u6027","text":"\u600e\u9ebc\u505a\u5230\u9ad8\u4e00\u81f4\u6027\uff1f\u6574\u7406\u51fa\u4e09\u500b\u65b9\u6cd5\uff0c\u4f9d\u6b21\u8a0e\u8ad6\u4e4b\u3002
"},{"location":"feedback/designing-data-intensive-applications/farewell/#\u628a\u4f7f\u7528\u8005\u7d0d\u9032\u53e2\u96c6","title":"\u628a\u4f7f\u7528\u8005\u7d0d\u9032\u53e2\u96c6","text":"\u4e00\u822c\u7684\u7db2\u8def\u61c9\u7528\u90fd\u6703\u7b49\u5f85\u4f7f\u7528\u8005\u900f\u904e\u700f\u89bd\u53bb\u6216\u8005\u624b\u6a5f\u61c9\u7528\u9001\u51fa\u8acb\u6c42\u5f8c\u5f97\u5230\u56de\u61c9\uff0c\u9019\u6642\u5982\u679c\u5f8c\u7aef\u670d\u52d9\u7684\u72c0\u614b\u662f\u900f\u904e\u4e8b\u4ef6\u4f86\u6e90\u6642\uff0c\u6211\u5011\u662f\u53ef\u80fd\u6703\u5f97\u5230\u4e0d\u662f\u6700\u5373\u6642\u7684\u8cc7\u6599\u3002\u4f46\u662f\u73fe\u5728\u7684\u6280\u8853\u8b93\u6211\u5011\u4e0d\u5fc5\u518d\u7b49\u4f7f\u7528\u8005\u4e3b\u52d5\u53bb\u91cd\u65b0\u6574\u7406\u6216\u8005\u767c\u9001\u8acb\u6c42\u4f86\u5f97\u5230\u6700\u65b0\u8cc7\u6599\uff0c\u6211\u5011\u4e5f\u53ef\u4ee5\u900f\u904e\u5f8c\u7aef\u4e3b\u52d5\u767c\u9001\u65b0\u8cc7\u6599\u7d66\u4f7f\u7528\u8005\u3002
\u82e5\u4e0d\u518d\u628a\u4f7f\u7528\u8005\u7576\u6210\u670d\u52d9\u5916\u7684\u7aef\u9ede\u800c\u662f\u670d\u52d9\u5167\u7684\u7aef\u9ede\uff0c\u6211\u5011\u5c31\u53ef\u4ee5\u900f\u904e\u5148\u524d\u5728\u65e5\u8a8c\u578b\u4e2d\u4ecb\u8005\u63d0\u5230\u7684 \u504f\u79fb\u91cf \u4f86\u8a18\u9304\u6bcf\u500b\u7dda\u4e0a\u4f7f\u7528\u8005\u7576\u4e0b\u4ed6\u8ddd\u96e2\u6700\u65b0\u72c0\u614b\u591a\u9060\u3002\u7576\u6709\u4efb\u4f55\u65b0\u4e8b\u4ef6\u5c31\u767c\u9001\u7d66\u4f7f\u7528\u8005\uff0c\u9019\u6a23\u5c0d\u4f7f\u7528\u8005\u4f86\u8aaa\u5c31\u80fd\u5f97\u5230\u6700\u77ed\u66ab\u7684\u72c0\u614b\u4e0d\u4e00\u81f4\uff0c\u9019\u6a23\u53c8\u4f55\u5617\u4e0d\u662f\u6211\u5011\u4e00\u958b\u59cb\u6700\u671f\u671b\u7684\u55ce\uff1f
\u4f46\u662f\u9019\u500b\u6771\u897f\u7684\u56f0\u96e3\u9ede\u5728\u65bc\uff0c\u6211\u5011\u592a\u7fd2\u6163\u8acb\u6c42\uff0f\u56de\u61c9\u9019\u7a2e\u6a21\u5f0f\uff0c\u6240\u4ee5\u4e0d\u53ea\u662f\u61c9\u7528\u7a0b\u5f0f\uff0f\u76f8\u95dc\u5957\u4ef6\u9700\u8981\u6709\u65b0\u7684\u4ecb\u9762\uff0c\u958b\u767c\u4eba\u54e1\u4e5f\u9700\u8981\u5728\u9019\u7a2e\u65b0\u578b\u614b\u7684\u67b6\u69cb\u4e2d\u53d6\u5f97\u601d\u60f3\u4e0a\u7684\u6539\u9032\u3002
"},{"location":"feedback/designing-data-intensive-applications/farewell/#\u9ede\u5c0d\u9ede\u7684\u9632\u8b77","title":"\u9ede\u5c0d\u9ede\u7684\u9632\u8b77","text":"TCP \u548c HTTP \u7684\u95dc\u4fc2\u5c31\u597d\u50cf\u8cc7\u6599\u5eab\u548c\u61c9\u7528\u7a0b\u5f0f\u7684\u95dc\u4fc2\u3002TCP \u63d0\u4f9b\u5f88\u591a\u7684\u5bb9\u932f\u6a5f\u5236\uff1a\u907f\u514d\u5c01\u5305\u91cd\u8907\u5bc4\u9001\uff0f\u63a5\u6536\u3001\u7576\u4e00\u90e8\u4efd\u7684\u5c01\u5305\u907a\u5931\u6642\u6368\u68c4\u8acb\u6c42\u3001Timeout \u7b49\u7b49\uff0c\u4f46\u662f\u61c9\u7528\u7a0b\u5f0f\u9084\u662f\u5f97\u505a\u4e00\u4e9b\u5bb9\u932f\u6a5f\u5236\uff1aRetry\u3001Timeout \u7b49\u7b49\u3002
\u9019\u7a2e\u61c9\u7528\u7a0b\u5f0f\u5169\u7aef\u7684\u5bb9\u932f\u7a31\u70ba\u9ede\u5c0d\u9ede\u7684\u9632\u8b77\u6a5f\u5236\u3002
TCP \u5c31\u597d\u50cf\u8cc7\u6599\u5eab\u4e00\u6a23\uff0c\u63d0\u4f9b\u4e86\u5f88\u591a\u4fdd\u8b77\u6a5f\u5236\uff1a\u4ea4\u6613\u3001WAL \u7b49\u7b49\uff0c\u4f46\u662f\u5c0d\u65bc\u61c9\u7528\u7a0b\u5f0f\u4f86\u8aaa\uff0c\u9084\u662f\u5f97\u505a\u4e00\u5b9a\u7684\u5bb9\u932f\u6a5f\u5236\u3002\u8209\u4f8b\u4f86\u8aaa\uff1a
\u7576\u91cd\u8907\u5bc4\u9001\u8acb\u6c42\u6642\uff0c\u4ea4\u6613\u6a5f\u5236\u7121\u6cd5\u907f\u514d\u91cd\u8907\u7684\u904b\u7b97BEGIN TRANSACTION;\nUPDATE accounts SET balance = balance + 21 WHERE account_id = 1234;\nUPDATE accounts SET balance = balance - 21 WHERE account_id = 4321;\nCOMMIT\n
\u4ee5\u4e0a\u8ff0\u7684\u7a0b\u5f0f\u78bc\u70ba\u4f8b\uff0c\u5373\u4f7f\u7528\u8a72\u65b9\u5f0f\u5305\u88dd\u8acb\u6c42\uff0c\u9084\u662f\u6703\u9047\u5230\u4f60\u932f\u8aa4\u91cd\u8907\u5bc4\u9001\u8acb\u6c42\uff08\u4f8b\u5982\u4f7f\u7528\u8005\u6309\u4e86\u5169\u6b21\u6309\u9215\uff09\u5c0e\u81f4\u7684\u72c0\u614b\u932f\u8aa4\u3002
\u5efa\u7acb\u552f\u4e00\u7684 request_id \u4f86\u907f\u514d\u91cd\u8907\u57f7\u884cALTER TABLE requests ADD UNIQUE (request_id);\n\nBEGIN TRANSACTION;\n\nINSERT INTO requests (request_id, from_account, to_account, amount) VALUES ('some-unique-id', 4321, 1234, 21)\n\nUPDATE accounts SET balance = balance + 21 WHERE account_id = 1234;\nUPDATE accounts SET balance = balance - 21 WHERE account_id = 4321;\nCOMMIT\n
\u5982\u679c\u8981\u907f\u514d\u9019\u72c0\u6cc1\uff0c\u4f60\u53ef\u4ee5\u900f\u904e\u6dfb\u52a0\u7de8\u865f\uff08\u53ef\u80fd\u662f\u6240\u6709\u8cc7\u8a0a\u7684\u96dc\u6e4a\uff09\u5230\u8acb\u6c42\u4e2d\uff0c\u4e26\u4f7f\u7528\u8cc7\u6599\u5eab\u7684 Unique Constraint \u4f86\u907f\u514d\u3002
\u4f46\u662f\u4e0a\u8ff0\u6a5f\u5236\u5230\u4e86\u5206\u6563\u5f0f\u6642\u5c31\u4ee3\u8868\u4f60\u53ea\u80fd\u5728\u55ae\u4e00\u9818\u8896\u7684\u53e2\u96c6\u6709\u6548\uff0c\u56e0\u70ba\u591a\u9818\u8896\u5c31\u53ef\u80fd\u767c\u751f\u5169\u500b\u8acb\u6c42\u9001\u5230\u4e0d\u540c\u9818\u8896\u53bb\u8655\u7406\uff0c\u90a3\u9019\u6a23\u591a\u9818\u8896\u8a72\u600e\u9ebc\u8fa6\u5462\uff1f
\u9664\u4e86\u8907\u88fd\u4e4b\u5916\uff08\u4e5f\u5c31\u662f\u4e0d\u7ba1\u4f7f\u7528\u54ea\u7a2e\u8907\u88fd\u65b9\u5f0f\uff09\uff0c\u5982\u679c\u53e2\u96c6\u6709\u4f7f\u7528\u5206\u5340\uff0c\u9019\u6642\u5c31\u53ef\u80fd\u5169\u500b\u5e33\u865f\u7684\u8acb\u6c42 ID \u5728\u4e0d\u540c\u5206\u5340\u5c31\u6703\u8b93\u9019\u500b\u4ea4\u6613\u5be6\u4f5c\u8b8a\u5f97\u5f88\u8907\u96dc\uff08\u56e0\u70ba\u9700\u8981\u8de8\u5206\u5340\u78ba\u4fdd Unique Constraint\uff09\uff0c\u9019\u6642\u5c31\u4ee3\u8868\u4f60\u9700\u8981\u5168\u57df\u9806\u5e8f\u5ee3\u64ad\u4f86\u907f\u514d\u908a\u969b\u72c0\u6cc1\u3002
"},{"location":"feedback/designing-data-intensive-applications/farewell/#\u4e8b\u4ef6\u4f86\u6e90\u7684\u9ede\u5c0d\u9ede\u9632\u8b77","title":"\u4e8b\u4ef6\u4f86\u6e90\u7684\u9ede\u5c0d\u9ede\u9632\u8b77","text":"\u4ee5\u4f7f\u7528\u8005\u8a3b\u518a\u5e33\u865f\u70ba\u4f8b\uff0c\u61c9\u7528\u7a0b\u5f0f\u5e0c\u671b\u4f7f\u7528\u8005\u53ea\u6703\u7533\u8acb\u540c\u4e00\u500b\u5e33\u865f\u540d\u7a31\u3002\u6211\u5011\u53ef\u4ee5\u5229\u7528\u65e5\u8a8c\u578b\u4e2d\u4ecb\u8005\u548c\u4e00\u7d44\u8ffd\u8e64\u8005\uff0c\u4e26\u900f\u904e\u4e2d\u4ecb\u8005\u7684\u5206\u5340\u6a5f\u5236\uff0c\u628a\u4e0d\u540c\u5e33\u865f\uff08\u53ef\u80fd\u52a0\u500b\u96dc\u6e4a\uff09\u7684\u7533\u8acb\u4e8b\u4ef6\u653e\u5728\u4e0d\u540c\u7684\u5206\u5340\uff0c\u8b93\u8ffd\u8e64\u8005\u8ffd\u8e64\u9019\u4e9b\u4e8b\u4ef6\u4e26\u7dad\u6301\u72c0\u614b\uff0c\u518d\u628a\u7533\u8acb\u4e8b\u4ef6\u7684\u6210\u529f\u8207\u5426\u8f38\u51fa\u6210\u53e6\u4e00\u500b\u4e3b\u984c\uff0c\u9019\u6a23\u5c31\u53ef\u4ee5\u505a\u5230\u64f4\u5c55\u6027\u53c8\u80fd\u4fdd\u6301\u4e00\u81f4\u6027\u3002
\u6574\u7406\u4e00\u4e0b\u900f\u904e\u4e8b\u4ef6\u4f86\u6e90\u505a\u9ad8\u4e00\u81f4\u6027\u7684\u908f\u8f2f\u548c\u9806\u5e8f\uff1a
\u76e3\u63a7\u6a5f\u5236\u53ef\u4ee5\u5e6b\u52a9\u4e86\u89e3\u8cc7\u6599\u53e2\u96c6\u7684\u5065\u5eb7\uff08\u4e00\u81f4\u6027\uff09\u7a0b\u5ea6\uff0c\u9019\u7a2e\u76e3\u63a7\u6280\u8853\u4e00\u76f4\u5f88\u8ca7\u810a\uff0c\u4f46\u662f\u5982\u679c\u6709\u4e86\u9019\u500b\u6771\u897f\uff0c\u53ef\u4ee5\u8b93\u6211\u5011\u5c0d\u65bc\u76ee\u524d\u64c1\u6709\u7684\u8cc7\u6599\u72c0\u6cc1\u6709\u8db3\u5920\u7684\u4fe1\u5fc3\u548c\u8aaa\u670d\u529b\u3002
\u5982\u679c\u4f7f\u7528\u4e8b\u4ef6\u4f86\u6e90\uff0c\u5728\u767c\u73fe\u53e2\u96c6\u6709\u5065\u5eb7\u7a0b\u5ea6\u4f4e\u843d\u7684\u5f37\u6cc1\u6642\uff0c\u5c31\u53ef\u4ee5\u5f9e\u539f\u59cb\uff08\u6216\u5feb\u7167\uff09\u72c0\u614b\u5229\u7528\u6b77\u53f2\u4e8b\u4ef6\u91cd\u65b0\u5efa\u7acb\u72c0\u614b\u4f86\u6eff\u8db3\u4e00\u81f4\u6027\u3002
\u7c3d\u8b49\u900f\u660e\u5316
\u7c3d\u8b49\u900f\u660e\u5316\uff08Certificate Transparency\uff09 \u662f\u4e00\u7a2e\u8b93\u6191\u8b49\u6a5f\u69cb\uff08CA\uff09\u53ef\u4ee5\u516c\u958b\u5176\u7c3d\u767c\u7684\u6191\u8b49\u7684\u6a5f\u5236\uff0c\u900f\u904e\u65e5\u8a8c\u5f62\u5f0f\u53ea\u9644\u52a0\u6bcf\u6b21\u65b0\u7c3d\u7684\u6191\u8b49\u3002 \u4e00\u5e74\u53ef\u7c3d\u767c\u7684\u6191\u8b49\u53ef\u80fd\u5e7e\u5341\u5104\u500b\uff0c\u8981\u600e\u9ebc\u505a\u5230\u6bcf\u6b21\u65b0\u589e\u6191\u8b49\u81ea\u52d5\u91cd\u65b0\u7522\u51fa\u9019\u500b\u65e5\u8a8c\u7684\u7c3d\u540d\uff1f
\u5982\u679c\u53ef\u4ee5\u505a\u5230\uff0c\u90a3\u9ebc\u9019\u9ede\u662f\u4e0d\u662f\u5c31\u53ef\u4ee5\u900f\u904e\u66ff\u5169\u500b\u8cc7\u6599\u5eab\u7522\u51fa\u5404\u81ea\u7684\u96dc\u6e4a\u503c\uff0c\u4e26\u7528\u4f86\u6aa2\u67e5\u5169\u500b\u8cc7\u6599\u5eab\u7684\u72c0\u614b\u662f\u5426\u4e00\u81f4\uff1f
\u800c\u9019\u500b\u6771\u897f\u662f\u4e0d\u662f\u5c31\u662f\u76e3\u63a7\u6a5f\u5236\uff1f
"},{"location":"feedback/designing-data-intensive-applications/farewell/#\u9ad8\u4e00\u81f4\u6027\u91cd\u8981\u55ce","title":"\u9ad8\u4e00\u81f4\u6027\u91cd\u8981\u55ce","text":"\u5c0d\u65bc\u5916\u90e8\u89c0\u5bdf\u8005\u4f86\u8aaa\uff0c\u7576\u4ed6\u9001\u51fa\u8acb\u6c42\u5f8c\u53e6\u5916\u4e00\u500b\u88dd\u7f6e\u53ef\u80fd\u770b\u4e0d\u5230\u525b\u525b\u7684\u7570\u52d5\uff0c\u4f46\u662f\u6211\u5011\u5728\u5927\u90e8\u5206\u60c5\u6cc1\u90fd\u4e0d\u9700\u8981\u9019\u9ebc\u56b4\u8b39\u7684\u4e00\u81f4\u6027\uff0c\u901a\u5e38\u6211\u5011\u5728\u610f\u7684\u662f\u7570\u52d5\u7684\u6b63\u78ba\u6027\uff0c\u53ea\u8981\u6700\u7d42\u7d50\u679c\u662f\u6b63\u78ba\uff0c\u8b93\u4f7f\u7528\u8005\u7b49\u500b\u5e7e\u5206\u9418\u53c8\u4f55\u4eff\uff0c\u4f8b\u5982\uff0c\u4fe1\u7528\u5361\u4ea4\u6613\u3001\u8a02\u7968\u3001\u7db2\u8cfc\u7b49\u7b49\u3002\u6211\u5011\u4e5f\u53ef\u4ee5\u900f\u904e\u4e00\u4e9b\u524d\u7aef\u63d0\u793a\u4f86\u8aaa\u660e\u72c0\u614b\u53ef\u80fd\u4e0d\u662f\u6700\u5373\u6642\u6216\u8005\u5148\u986f\u793a\u7d50\u679c\u518d\u901a\u77e5\u662f\u5426\u6b63\u78ba\u7570\u52d5\u3002
\u4ee5\u6e1b\u5c11\u9053\u6b49\u70ba\u6700\u7d42\u76ee\u7684\u7684\u8a71
\u4f60\u4e5f\u53ef\u4ee5\u9019\u6a23\u60f3\uff1a\u9ad8\u4e00\u81f4\u6027\u907f\u514d\u6211\u5011\u56e0\u70ba\u932f\u8aa4\u72c0\u614b\u8981\u5411\u4f7f\u7528\u8005\u9053\u6b49\u7684\u6a5f\u6703\uff0c\u4f46\u662f\u537b\u63d0\u9ad8\u4e86\u56e0\u70ba\u964d\u4f4e\u6548\u80fd\u3001\u53ef\u7528\u6027\u6240\u9700\u8981\u5411\u4f7f\u7528\u8005\u9053\u6b49\u7684\u6a5f\u6703\u3002\u65e2\u7136\u5982\u6b64\uff0c\u4f55\u4e0d\u6700\u4e00\u958b\u59cb\u5c31\u6e96\u5099\u597d\u9053\u6b49\u7684\u6a5f\u5236\u4e26\u4f7f\u7528\u9019\u7a2e\u9ad8\u53ef\u7528\u4e14\u9ad8\u5bb9\u932f\u7684\u6a5f\u5236\uff0c\u4e26\u5728\u767c\u751f\u932f\u8aa4\u72c0\u614b\u6642\u624b\u52d5\u4fee\u5fa9\u3002
"},{"location":"feedback/designing-data-intensive-applications/farewell/#\u5176\u4ed6\u6771\u897f","title":"\u5176\u4ed6\u6771\u897f","text":"\u8b1b\u4e86\u9019\u9ebc\u591a\u4e0d\u662f\u8981\u5426\u5b9a\u5f37\u4e00\u81f4\u6027\u7684\u8cc7\u6599\u53e2\u96c6\uff0c\u800c\u662f\u628a\u8996\u91ce\u62d3\u5bec\uff0c\u628a\u9019\u4e9b\u8cc7\u6599\u5eab\u7576\u6210\u5168\u516c\u53f8\u8cc7\u6599\u7cfb\u7d71\u7684\u4e00\u5c0f\u90e8\u5206\u5de5\u5177\uff0c\u800c\u9019\u5de5\u5177\u53ea\u662f\u884d\u751f\u8cc7\u6599\u7684\u4e00\u74b0\u4e26\u9069\u7528\u65bc\u90a3\u4e9b\u9700\u8981\u975e\u5e38\u56b4\u8b39\u8655\u7406\u8cc7\u6599\u7684\u61c9\u7528\u7a0b\u5f0f\u3002
\u76ee\u524d\u5e02\u9762\u4e0a\u5df2\u7d93\u6709\u8abf\u5ea6\u5bb9\u5668\u5316\u7684\u61c9\u7528\u7a0b\u5f0f\u7684\u5de5\u5177\uff0c\u4f8b\u5982 Kubernetes\uff0c\u9019\u8b93\u958b\u767c\u8005\u80fd\u5c0d\u65bc\u90e8\u7f72\u74b0\u5883\u64c1\u6709\u66f4\u9ad8\u7684\u63a7\u5236\u80fd\u529b\u3002\u4f46\u662f\u9019\u50c5\u9650\u65bc\u81ea\u5df1\u7684\u61c9\u7528\u7a0b\u5f0f\uff0c\u7576\u8de8\u5718\u968a\u9700\u8981\u4ea4\u63db\u8cc7\u6599\u6642\uff0c\u6211\u5011\u4ecd\u7136\u9700\u8981\u4f7f\u7528\u65e2\u6709\u7684\u6a5f\u5236\uff1a\u67e5\u770b\u6587\u4ef6\u3002
\u6709\u6c92\u6709\u4e00\u500b\u516c\u958b\u7684\u5730\u65b9\u8b93\u6211\u5011\u76f4\u63a5\u67e5\u770b\u9019\u4e9b\u8cc7\u6599\uff1f\u900f\u904e\u4e00\u500b\u6982\u89c0\u7684\u8cc7\u6599\u6d41\u5716\uff0c\u6211\u5011\u53ef\u4ee5\u5feb\u901f\u77e5\u9053\u54ea\u4e9b\u8cc7\u6599\u5c6c\u65bc\u54ea\u4e9b\u5718\u968a\uff0c\u9019\u4e9b\u8cc7\u6599\u53c8\u6709\u54ea\u4e9b\u61c9\u7528\u7a0b\u5f0f\u4f7f\u7528\uff0c\u800c\u9019\u500b\u6982\u7565\u5716\u5c31\u662f\u900f\u904e\u4e2d\u592e\u7684\u4e8b\u4ef6\u7ba1\u7406\u8005\u6216\u8005\u300c\u4e8b\u4ef6\u8abf\u5ea6\u5de5\u5177\u300d\u53bb\u5efa\u7acb\u3002
"},{"location":"feedback/designing-data-intensive-applications/foundation-dw/","title":"\u8cc7\u6599\u5009\u5132","text":"\u5982\u4f55\u5efa\u7acb\u4e00\u500b\u53ef\u4f9b\u5feb\u901f\u5206\u6790\u7684\u8cc7\u6599\u5eab\u3002\u4f8b\u5982\uff1a
HackMD \u5831\u544a\u6587\u672c
"},{"location":"feedback/designing-data-intensive-applications/foundation-dw/#\u4ec0\u9ebc\u662f-oltpolap-\u548c-dwh","title":"\u4ec0\u9ebc\u662f OLTP\u3001OLAP \u548c DWH","text":"\u4e00\u822c\u4f86\u8aaa\uff0c\u8cc7\u6599\u5eab\u5c0d\u65bc\u670d\u52d9\u4f7f\u7528\u8005\u4f86\u8aaa\uff0c\u5373\u662f\u5728\u4e00\u7fa4\u8cc7\u6599\u4e2d\u627e\u51fa\u7279\u5b9a\u8cc7\u6599\uff0c\u505a\u8b80\u5beb\u7684\u52d5\u4f5c\u3002 \u9019\u7a2e\u64cd\u4f5c\uff0c\u7a31\u70ba \u7dda\u4e0a\u7570\u52d5\u8655\u7406 \uff08online transaction processing, OLTP \uff09\u3002
\u65e9\u671f\u8cc7\u6599\u5eab\u7684\u64cd\u4f5c\u5e7e\u4e4e\u662f\u5546\u52d9\u4ea4\u6613\uff0c\u6240\u4ee5\u4fdd\u7559\u820a\u7a31\u300c\u4ea4\u6613\u300d\uff08transaction\uff09\u3002
\u7136\u800c\uff0c\u96a8\u8457\u8cc7\u6599\u7684\u589e\u52a0\uff0c\u958b\u59cb\u9700\u8981\u5c0d\u8cc7\u6599\u5eab\u505a\u4e00\u4e9b\u5206\u6790\u3002\u5e6b\u52a9\u670d\u52d9\u7ba1\u7406\u8005\u53bb\u505a\u4e00\u4e9b\u7279\u5b9a\u7684\u6c7a\u7b56\uff0c\u4f8b\u5982\uff1a
\u9019\u4e00\u985e\u7684\u884c\u70ba\uff0c\u5e38\u5e38\u9700\u8981\u91dd\u5c0d\u6240\u6709\u7684\u8cc7\u6599\u505a\u8b80\u53d6\uff0c\u800c\u4e0d\u9700\u8981\u5beb\u5165\u3002\u6211\u5011\u7a31\u4e4b\u70ba \u7dda\u4e0a\u5206\u6790\u8655\u7406 \uff08online analytic processing\uff0c OLAP\uff09\u3002
\u91dd\u5c0d\u9019\u7a2e\u548c OLTP \u7684\u64cd\u4f5c\u6709\u5f88\u5927\u5dee\u7570\u7684\u8cc7\u6599\uff0c\u800c\u53bb\u505a\u8a2d\u8a08\u7684\u8cc7\u6599\u5eab\uff0c\u6211\u5011\u7a31\u4e4b\u70ba \u8cc7\u6599\u5132\u5009\uff08Data Warehouse\uff0cDWH\uff09\u3002
\u6709\u6642\u5019\u4e26\u4e0d\u662f\u90a3\u9ebc\u6e05\u695a\u5c31\u53ef\u4ee5\u5340\u5206 OLTP \u548c OLAP\uff0c\u4f46\u662f\u4ecd\u6709\u4e00\u4e9b\u4e3b\u8981\u7684\u5dee\u7570\uff1a
\u5c6c\u6027 \u7dda\u4e0a\u7570\u52d5\u8655\u7406 \u7dda\u4e0a\u5206\u6790\u8655\u7406 \u4e3b\u8981\u7684\u8b80\u53d6\u6a21\u5f0f \u5c0f\u91cf\u8cc7\u6599\uff0c\u4e14\u900f\u904e\u9375\u7be9\u9078 \u805a\u5408\uff08aggregate\uff09\u5927\u91cf\u8cc7\u6599 \u4e3b\u8981\u7684\u5beb\u5165\u6a21\u5f0f \u4f4e\u6f5b\u6642\uff08latency\uff09\uff0c\u4e14\u96a8\u6a5f\u5beb\u5165 \u4e00\u6b21\u6027\u5927\u91cf\u5beb\u5165\uff0c\u6216\u900f\u904e\u4e8b\u4ef6\u6d41\u5165 \u4e3b\u8981\u4f7f\u7528\u65bc \u900f\u904e\u7db2\u8def\u6e9d\u901a\u7684\u670d\u52d9\u4f7f\u7528\u8005 \u5167\u90e8\u5206\u6790\u5e2b\uff0c\u5e6b\u52a9\u6c7a\u7b56 \u8cc7\u6599\u4ee3\u8868\u4ec0\u9ebc \u6700\u65b0\u72c0\u614b \u4e8b\u4ef6\u7684\u6b77\u53f2\u7d00\u9304 \u8cc7\u6599\u5eab\u5927\u5c0f GB~TB TB~PB"},{"location":"feedback/designing-data-intensive-applications/foundation-dw/#\u6bd4\u8f03","title":"\u6bd4\u8f03","text":"OLTP \u985e\u578b\u8cc7\u6599\u5eab\u901a\u5e38\u662f\u670d\u52d9\u4f7f\u7528\u8005\u76f4\u63a5\u63a5\u89f8\u7684\u3002 \u9019\u4ee3\u8868\u5927\u91cf\u7684\u8acb\u6c42\u6703\u88ab\u9700\u8981\u8655\u7406\uff0c\u70ba\u4e86\u8655\u7406\u9019\u985e\u9700\u6c42\uff0c\u8acb\u6c42\u901a\u5e38\u53ea\u6703\u63a5\u89f8\u8cc7\u6599\u5eab\u4e2d\u4e00\u90e8\u4efd\u8cc7\u6599\u3002 \u61c9\u7528\u7a0b\u5f0f\u53ef\u80fd\u6703\u900f\u904e\u7d22\u5f15\uff08index\uff09\u4f86\u52a0\u901f\u641c\u5c0b\u3002 \u9019\u985e\u7684\u8cc7\u6599\u5eab\u901a\u5e38\u6ce8\u91cd\u5f9e\u78c1\u789f\u4e2d\u627e\u5c0b\u7684\u901f\u5ea6 \uff08seek time\uff0c \u627e\u5c0b\u7279\u5b9a\u8cc7\u6599\u4f4d\u7f6e\u7684\u901f\u5ea6\uff09\u3002
OLAP \u985e\u578b\u8cc7\u6599\u5eab\u8f03\u5c11\u88ab\u77e5\u9053\uff0c\u56e0\u70ba\u9019\u985e\u578b\u8cc7\u6599\u5eab\u662f\u7528\u4f86\u505a\u5206\u6790\uff0c\u800c\u975e\u8b93\u670d\u52d9\u4f7f\u7528\u8005\u76f4\u63a5\u5b58\u53d6\u3002 \u96d6\u7136\u8acb\u6c42\u91cf\u6bd4 OLTP \u4f4e\uff0c\u4f46\u662f\u6bcf\u6b21\u8acb\u6c42\u53ef\u80fd\u90fd\u9700\u8981\u904d\u6b77\u8cc7\u6599\u5eab\u4f86\u53d6\u5f97\u7279\u5b9a\u5206\u6790\u7d50\u679c\u3002 \u9019\u985e\u7684\u8cc7\u6599\u5eab\u901a\u5e38\u6ce8\u91cd\u65bc\u78c1\u789f\u4e2d\u7684\u983b\u5bec \uff08bandwidth\uff0c\u8b80\u53d6\u5927\u91cf\u8cc7\u6599\u7684\u901f\u5ea6\uff09\u3002
"},{"location":"feedback/designing-data-intensive-applications/foundation-dw/#\u8cc7\u6599\u5009\u5132_1","title":"\u8cc7\u6599\u5009\u5132","text":"\u5c0d\u65bc\u516c\u53f8\u4f86\u8aaa\u53ef\u80fd\u6703\u6709\u5f88\u591a\u8cc7\u6599\u5eab\u53bb\u6eff\u8db3\u5404\u500b\u55ae\u4f4d\u7684\u9700\u6c42\u3002\u9019\u4e9b\u8cc7\u6599\u5eab\u5f88\u53ef\u80fd\u5f7c\u6b64\u662f\u5404\u81ea\u7368\u7acb\u7684\uff0c\u4f46\u537b\u90fd\u662f\u5728\u66ff\u540c\u4e00\u7fa4\u4f7f\u7528\u8005\u5728\u670d\u52d9\u3002\u4f8b\u5982\uff1a\u4eba\u529b\u9280\u884c\u7684
\u9664\u6b64\u4e4b\u5916\uff0c\u9019\u4e9b\u8cc7\u6599\u5eab\u70ba\u4e86\u6eff\u8db3 OLTP \u4f4e\u6f5b\u6642\u6027\uff0c \u7576\u4f60\u8981\u4e0b\u6307\u4ee4\u53bb\u641c\u96c6\u5168\u57df\u7684\u8cc7\u8a0a\u6642\uff0c\u4f60\u5f88\u53ef\u80fd\u6703\u88ab DBA \u62d2\u7d55\u3002 \u70ba\u4e86\u540c\u6642\u6eff\u8db3\u7dda\u4e0a\u4f7f\u7528\u8005\u9ad8\u6548\u7387\u7684\u904b\u4f5c\u548c\u5206\u6790\u5e2b\u7684\u6578\u64da\u722c\u53d6\uff0c \u9019\u6642 \u8cc7\u6599\u5132\u5009\uff08Data Warehouse\uff0cDWH\uff09\u4fbf\u51fa\u73fe\u4e86\u3002
\u5176\u7279\u6027\u6703\u628a\u6240\u6709\u4e0d\u540c\u670d\u52d9\u7684\u8cc7\u6599\uff0c \u5b9a\u6642\uff08periodic data dump\uff09\u6216\u6301\u7e8c\uff08continuous stream of updates\uff09\u5f9e\u8cc7\u6599\u5eab\u4e2d\u64f7\u53d6\u8cc7\u6599\u3002 \u4e26\u5b58\u5165\u9069\u5408\u5206\u6790\u7684\u7db1\u76ee\uff08schema\uff09\uff0c\u505a\u4e00\u4e9b\u91cd\u8907\u8cc7\u6599\u7684\u6e05\u7406\u7b49\u7b49\u3002 \u9019\u4e00\u7cfb\u5217\u7684\u884c\u70ba\u7a31\u4f5c\u8403\u53d6\u3001\u8b8a\u63db\u53ca\u8f09\u5165\uff08Extract\u2013Transform\u2013Load\uff0c ETL\uff09\u3002
\u6211\u5011\u4e4b\u524d\u5b78\u5230\u7684\u7d22\u5f15\u6f14\u7b97\u6cd5\uff0c\u4e26\u4e0d\u9069\u5408\u9019\u985e\u5206\u6790\u6027\u7684\u884c\u70ba\u3002 \u6240\u4ee5\u96d6\u7136\u5927\u90e8\u5206 DW \u90fd\u662f\u95dc\u806f\u5f0f\u8cc7\u6599\u5eab\uff0c \u5176\u5167\u90e8\u904b\u7b97\u908f\u8f2f\u537b\u548c\u5e38\u898b\u7684 OLTP \u95dc\u806f\u5f0f\u8cc7\u6599\u5eab\u4e0d\u540c\u3002\u76ee\u524d\u4e5f\u8d8a\u4f86\u8d8a\u591a\u8cc7\u6599\u5eab\u91dd\u5c0d\u4e0d\u540c\u5834\u57df\u505a\u7279\u5b9a\u7684\u512a\u5316\uff0c \u4e5f\u5c31\u662f\u5f88\u5c11\u6703\u770b\u5230\u4e00\u500b\u8cc7\u6599\u5eab\u540c\u6642\u6eff\u8db3 OLTP \u548c OLAP\u3002
Dedicated\uff0c\u737b\u8eab\u7684\u3002\u73fe\u5728\u5f88\u591a\u7522\u54c1\u90fd\u662f\u57fa\u65bc\u672c\u7406\u5ff5\u53bb\u63d0\u4f9b\u670d\u52d9\uff0c\u5c08\u5fc3\u505a\u4e00\u4ef6\u4e8b\uff0c\u800c\u4e14\u628a\u5b83\u505a\u597d\u3002 \u5fae\u670d\u52d9\u4e5f\u662f\u9019\u7a2e\u6982\u5ff5\u3002
"},{"location":"feedback/designing-data-intensive-applications/foundation-dw/#\u4e00\u4e9b-dw-\u8cc7\u6599\u5eab","title":"\u4e00\u4e9b DW \u8cc7\u6599\u5eab","text":"\u8cc7\u6599\u5009\u5132 \u53ef\u80fd\u7684\u7db1\u76ee\uff08schema\uff09\u8a2d\u8a08\u6709\u5169\u7a2e\uff1a
\u4ee5\u66f8\u4e2d\u7bc4\u4f8b\u505a\u4ecb\u7d39\uff1a
\u5728\u7d30\u770b\u9019\u4e9b\u8cc7\u6599\u4ee3\u8868\u7684\u610f\u7fa9\u4e4b\u524d\uff0c\u5148\u6ce8\u610f\u5230\u8868\uff08table\uff09\u7684\u524d\u7db4\u8a5e\u6709\u5169\u7a2e\uff1a
dim
\u5c0d\u8cc7\u6599\u63d0\u4f9b\u7dad\u5ea6\uff08dimension\uff09\u7684\u8868fact
\u5c55\u793a\u6240\u6709\u72c0\u614b\u7684\u8868\uff0c\u4e8b\u5be6\u8868\u4ee5\u4e0a\u8ff0\u5716\u7247\u70ba\u4f8b\u5b50\uff0c\u7522\u54c1\u3001\u5546\u5e97\u3001\u9867\u5ba2\u3001\u65e5\u671f\u3001\u63a8\u5ee3\u6d3b\u52d5\u7b49\u7b49\u5c31\u662f\u63d0\u9ad8\u4e8b\u5be6\u8868\u7dad\u5ea6\u7684\u8cc7\u6599\u5eab\u3002\u800c fact_sales
\u5c31\u662f\u92b7\u552e\u76f8\u95dc\u7684\u4e8b\u5be6\u8868\uff0c\u6216\u8005\u8aaa\u8a72\u8868\u7d00\u9304\u4e86\u6240\u6709\u92b7\u552e\u76f8\u95dc\u7684\u884c\u70ba\uff08\u4e8b\u4ef6\uff09\u3002
\u5118\u7ba1\u6709\u4e9b\u662f\u5c0d\u7167\u5176\u4ed6\u8868\u7684\u5916\u5340\u9375\uff08foreign key\uff09\uff0c\u4f46\u4ecd\u6709\u5f88\u591a\u6b04\u4f4d\u662f\u76f8\u95dc\u884c\u70ba\uff08\u4e8b\u4ef6\uff09\u7684\u5c6c\u6027\uff0c \u4f8b\u5982\uff1a\u8a72\u300c\u9867\u5ba2\u300d\u65bc\u8a72\u300c\u5546\u5e97\u300d\u8cfc\u8cb7\u8a72\u300c\u7522\u54c1\u300d\u7684\u6578\u91cf\u3001\u539f\u50f9\u3001\u552e\u50f9\u7b49\u7b49\u3002 \u7531\u6b64\u53ef\u77e5\uff0c\u82e5\u63d0\u4f9b\u7d30\u7bc0\u4fe1\u606f\uff0c\u8a72\u8868\u683c\u5c07\u6703\u6709\u975e\u5e38\u591a\u7684\u6b04\u4f4d\uff0c \u6216\u8005\u8aaa\u5c6c\u6027\uff08property\uff09\uff0c\u751a\u81f3\u53ef\u80fd\u5230\u6578\u767e\u7a2e\u5c6c\u6027\u3002
"},{"location":"feedback/designing-data-intensive-applications/foundation-dw/#\u96ea\u82b1\u7db1\u76ee","title":"\u96ea\u82b1\u7db1\u76ee","text":"\u985e\u4f3c\u65bc\u661f\u72c0\u7db1\u76ee\uff0c\u53ea\u662f\u4ed6\u7684\u7dad\u5ea6\u8868\u53ef\u80fd\u6703\u6709\u5f88\u591a\u5c64\uff0c\u4f8b\u5982\uff1a\u300c\u7522\u54c1\u8868\u300d\u53c8\u6703\u6709\u5916\u5340\u9375\u9023\u5230\u300c\u54c1\u724c\u8868\u300d\u548c\u300c\u7a2e\u985e\u8868\u300d\u3002
"},{"location":"feedback/designing-data-intensive-applications/foundation-dw/#\u6bd4\u8f03_1","title":"\u6bd4\u8f03","text":"\u5927\u90e8\u5206\u8cc7\u6599\u5eab\u9078\u64c7\u4f7f\u7528\u661f\u72c0\u7db1\u76ee\uff0c\u56e0\u70ba\u5176
\u5728\u4e00\u822c OLAP \u4e2d\uff0c\u53ea\u6703\u8b80\u53d6\u90e8\u5206\u6b04\u4f4d\uff0c\u4ee5\u4e0a\u8ff0\u8868\u683c\u70ba\u4f8b\uff1a\u5728\u5047\u65e5\u8cfc\u8cb7\u7279\u5b9a\u7a2e\u985e\u7684\u6578\u91cf\uff1a
SELECT\n dim_date.weekday, dim_product.category,\n SUM(fact_sales.quantity) AS quantity_sold\nFROM fact_sales\n JOIN dim_date ON fact_sales.date_key = dim_date.date_key\n JOIN dim_product ON fact_sales.product_sk = dim_product.product_sk\nWHERE\n dim_date.year = 2013 AND\n dim_product.category IN ('Fresh fruit', 'Candy')\nGROUP BY\n dim_date.weekday, dim_product.category;\n
\u7531\u6b64\u4f8b\u53ef\u77e5\uff0c\u5728\u8a72\u7279\u6027\u4e0b\uff0c\u82e5\u6bcf\u6b21\u64cd\u4f5c\u50c5\u62ff\u53d6\u90e8\u5206\u8cc7\u6599\u505a\u904b\u7b97\uff0c \u662f\u5426\u6709\u5fc5\u8981\u505a\u529f\u8b93\u5176\u4ed6\u6b04\u4f4d\u7684\u8cc7\u6599\u4e00\u8d77\u5f9e\u78c1\u789f\uff08disk\uff09\u4e2d\u8b80\u53d6\u51fa\u4f86\uff1f
\u5c24\u5176\u662f\u5728\u8cc7\u6599\u91cf\u6709\u597d\u5e7e PB\uff0c\u800c\u6bcf\u4e00\u884c\u53ef\u80fd\u6709\u597d\u5e7e\u767e\u500b\u5c6c\u6027\u6642\uff0c\u9019\u985e\u300c\u5c0f\u7f3a\u9ede\u300d\u5c07\u6703\u88ab\u653e\u5927\u3002
\u884c\u5f0f\u8cc7\u6599\u5eab\uff08column-oriented storage\uff09\u7684\u6982\u5ff5\u5c31\u662f\u7531\u6b64\u800c\u751f\uff0c \u6211\u4e0d\u4ee5\u6bcf\u5217\uff08row\uff09\u70ba\u55ae\u4f4d\u505a\u5132\u5b58\uff0c\u800c\u662f\u6539\u70ba\u6bcf\u884c\u70ba\u55ae\u4f4d\u3002 \u9019\u6a23\u5728\u8b80\u53d6\u6642\uff0c\u5c31\u53ea\u9700\u8981\u8b80\u53d6\u5c11\u90e8\u5206\u7684\u8cc7\u6599\u3002
\u4e26\u975e\u53ea\u6709\u95dc\u806f\u5f0f\u8cc7\u6599\u5eab\u9069\u5408\u505a\u884c\u5f0f\u8cc7\u6599\u5eab\uff0c\u50c5\u50c5\u56e0\u70ba\u95dc\u806f\u5f0f\u8cc7\u6599\u5eab\u5728\u8b1b\u89e3\u4e0a\u662f\u6700\u597d\u7406\u89e3\u7684\u3002 Parquet \u5c31\u662f\u4e00\u500b\u4ee5 Google's Dremel paper \u70ba\u57fa\u790e\u7684\u6587\u4ef6\u5f0f\u8cc7\u6599\u5eab\u3002
\u9019\u540c\u6642\u4e5f\u4ee3\u8868\uff0c\u6bcf\u4e00\u884c\u90fd\u9700\u8981\u64c1\u6709\u76f8\u540c\u7684\u9806\u5e8f\u548c\u6578\u91cf\uff0c\u800c\u9019\u689d\u4ef6\u5728 OLAP \u662f\u7b26\u5408\u7684\uff0c\u56e0\u70ba\u5176\u4e0d\u6703\u522a\u9664\u4efb\u4e00\u884c\u8cc7\u6599\u3002
"},{"location":"feedback/designing-data-intensive-applications/foundation-dw/#\u58d3\u7e2e","title":"\u58d3\u7e2e","text":"\u597d\u7684\u8cc7\u6599\u58d3\u7e2e\uff0c\u53ef\u4ee5\u964d\u4f4e\u5728\u8b80\u53d6\u6d77\u91cf\u8cc7\u6599\u7684\u6642\u9593\uff0c\u800c OLAP \u9084\u6709\u500b\u7279\u6027\uff0c\u5c31\u662f\u300c\u884c\u300d\u53ef\u80fd\u7684\u503c\u662f\u6709\u9650\u7684\u3002\u4f8b\u5982\uff1a\u7522\u54c1\u6578\u91cf\u53ef\u80fd\u53ea\u6709\u6578\u842c\u6216\u6578\u5341\u842c\u500b\uff0c\u4f46\u662f\u8a02\u55ae\u537b\u53ef\u80fd\u6bcf\u5e74\u6709\u597d\u5e7e\u5104\u7b46\u3002
\u56e0\u6b64\uff0c\u4ee5\u64cd\u4f5c\u70ba\u884c\uff0c\u7522\u54c1\u7de8\u865f\u70ba\u884c\uff08\u7570\u65bc\u8cc7\u6599\u5eab\u6bcf\u7b46\u8a02\u55ae\u90fd\u4ee5\u5217\u5b58\u5728\uff0c\u800c\u7522\u54c1\u7de8\u865f\u662f\u4e00\u7a2e\u6b04\u4f4d\uff09\uff0c\u53ef\u5f97\u4e0b\u8868\uff1a
\u7522\u54c1\u7de8\u865f \u8a02\u55ae 1 \u8a02\u55ae 2 \u8a02\u55ae 3 ... 1 1 0 1 ... 2 0 1 0 ... 3 0 0 0 ... ... - - - ...\u5176\u610f\u7fa9\u4ee3\u8868\uff1a
\u8a02\u55ae 1
\u8cfc\u8cb7 \u7522\u54c1 1
\u8a02\u55ae 2
\u8cfc\u8cb7 \u7522\u54c1 2
\u8a02\u55ae 3
\u8cfc\u8cb7 \u7522\u54c1 1
\u6b64\u6642\u4e26\u4e0d\u80fd\u58d3\u7e2e\u8cc7\u6599\uff0c\u4e8b\u5be6\u4e0a\uff0c\u4ed6\u53ea\u662f\u628a\u5404\u64cd\u4f5c\u7684\u5404\u7522\u54c1\u7de8\u865f\uff0c\u5c55\u958b\u6210\u4e8c\u9032\u4f4d\u800c\u5df2\u3002 \u4e5f\u5c31\u662f\uff0c\u4f4d\u5143\u6620\u5c04\uff08bitmap encoding\uff09\u3002 \u7136\u800c\uff0c\u56e0\u70ba OLAP \u7684\u7279\u6027\u8b93\u6bcf\u884c\u6709\u591a\u500b\u70ba 0 \u7684\u6b04\u4f4d\uff0c \u6b64\u6642\u5c31\u53ef\u4ee5\u900f\u904e\u57f7\u884c\u9577\u5ea6\u7de8\u78bc\uff08run-length encoded\uff09\u9032\u884c\u58d3\u7e2e\u3002
\u800c\u5c55\u958b\u6210\u4e8c\u9032\u4f4d\u7684\u683c\u5f0f\uff0c\u4e0d\u6b62\u5229\u65bc\u58d3\u7e2e\uff0c\u5728\u8a08\u7b97\u6642\uff0c\u4e5f\u53ef\u4ee5\u55ae\u7d14\u900f\u904e OR AND \u53bb\u505a\u8a08\u7b97\u3002\u4f8b\u5982\uff1a
WHERE product_sk IN (30, 68, 69)\n
\u6211\u5011\u8b80\u53d6\u7522\u54c1\u7684\u4f4d\u5143\u6620\u5c04\u8868\u4e2d\u7684\u7b2c 30
\uff0c68
\u548c 69
\u5217\uff0c \u7136\u5f8c\u62ff\u51fa\u4e09\u6bb5\u4f4d\u5143\u5411\u91cf\uff08bit vector\uff09\u505a\u4f4d\u5143\u9593\u7684 OR \u904b\u7b97\u3002
WHERE product_sk = 31 AND store_sk = 3\n
\u6211\u5011\u8b80\u53d6\u4f4d\u7522\u54c1\u7684\u5143\u6620\u5c04\u8868\u4e2d\u7684\u7b2c 31
\u5217\uff0c\u7136\u5f8c\u8b80\u53d6\u5546\u5e97\u7684\u5143\u6620\u5c04\u8868\u4e2d\u7684\u7b2c 3
\u5217\u505a\u4f4d\u5143\u9593\u7684 AND \u904b\u7b97\u3002
\u9019\u985e\u64cd\u4f5c\u4e4b\u6240\u4ee5\u53ef\u4ee5\u904b\u4f5c\uff0c\u5c31\u662f\u56e0\u70ba\u6211\u5011\u540c\u6b65\u6240\u6709\u884c\u7684\u6578\u91cf\u548c\u9806\u5e8f\u3002 \u4e5f\u5c31\u662f\u6bcf\u5217\u90fd\u64c1\u6709\u6240\u6709\u6b04\u4f4d\uff08\u6bcf\u500b\u8a02\u55ae\u90fd\u6709\u7522\u54c1\u7de8\u865f\u3001\u5546\u5e97\u7de8\u865f\u7b49\u7b49\uff09\u3002
\u82e5\u9700\u8981\u67e5\u770b\u66f4\u591a\u58d3\u7e2e\u7684\u6f14\u7b97\u6cd5\uff0c \u53ef\u4ee5\u67e5\u770b The Design and Implementation of Modern Column-Oriented Database Systems. Ct4-2\u3002
Column Family \u548c Column Oriented \u662f\u4e0d\u540c\u7684\u6982\u5ff5\uff0c \u5176\u88ab\u61c9\u7528\u65bc\u57fa\u65bc Bigtable \u67b6\u69cb\u7684\u8cc7\u6599\u5eab Cassandra \u548c HBase \u4e2d\u3002
\u5176\u539f\u7406\u662f\u628a\u6240\u6709\u884c\uff08\u7bc0\u9ede\uff09\u6574\u5408\u6210\u4e00\u500b\u55ae\u4f4d\uff0c\u5c31\u50cf\u662f\u628a\u6bcf\u500b\u6587\u4ef6\u7576\u6210\u95dc\u806f\u5f0f\u8cc7\u6599\u5eab\u7684\u8868\uff08table\uff09\uff0c \u4e26\u4e14\u4e0d\u6703\u5c0d\u9019\u55ae\u4f4d\u9032\u884c\u5217\u58d3\u7e2e\uff08column compression\uff09\uff0c \u56e0\u6b64\u8a72\u6a21\u578b\u4ecd\u4e3b\u8981\u662f\u4ee5\u5217\u5f0f\u8cc7\u6599\u5eab\uff08row-oriented\uff09\u70ba\u4e3b\u3002
"},{"location":"feedback/designing-data-intensive-applications/foundation-dw/#\u786c\u9ad4\u9762\u512a\u5316","title":"\u786c\u9ad4\u9762\u512a\u5316","text":"\u7576\u9032\u884c\u904b\u7b97\u548c\u5206\u6790\u6642\uff0c\u7cfb\u7d71\u5fc5\u9808\u5f9e\u786c\u9ad4\u78c1\u789f\uff08disk\uff09\u4e2d\u8b80\u53d6\u8cc7\u6599\u4e26\u5b58\u9032\u8a18\u61b6\u9ad4\uff08memory\uff09\u4e2d\u3002 \u9664\u4e86\u9019\u4e00\u6bb5\u7684\u983b\u5bec\u9700\u8981\u8003\u91cf\u5916\uff0c\u9084\u9700\u8981\u8003\u91cf\u8a18\u61b6\u9ad4\u9032\u5165 CPU \u5feb\u53d6\u4e2d\u7684\u983b\u5bec\u3002 \u5728\u57f7\u884c\u9019\u4e9b\u884c\u70ba\u7684\u8a0a\u865f\u6642\uff0c \u70ba\u4e86\u512a\u5316 \u6307\u4ee4\u7ba1\u7dda\u5316\uff08Instruction pipeline\uff09\u76e1\u53ef\u80fd\u907f\u514d_\u5feb\u53d6\u5c64\u7d1a\u7684\u8aa4\u5224_\uff08branch mis-predictions\uff09\uff0c \u4e26\u4f7f\u7528\u73fe\u4ee3 CPU \u4e2d\u7684 SIMD\uff08single-instruction-multi-data\uff09 \u6307\u4ee4\u3002
\u55ae\u4f4d Latency \u7b2c\u4e00\u5c64\u5feb\u53d6 1 ns \u7b2c\u4e8c\u5c64\u5feb\u53d6 4 ns \u7b2c\u4e09\u5c64\u5feb\u53d6 40 ns \u2191 \u4e3b\u8a18\u61b6\u9ad4\uff08DDR\uff09 80 ns \u2191 \u8b80\u53d6\u78c1\u789f 80 us \u2191/Intel - Memory Performance in a Nutshell
\u9664\u4e86\u76e1\u53ef\u80fd\u6e1b\u5c11\u62c9\u53d6\u7684\u8cc7\u6599\uff0c\u6bcf\u6b21\u62c9\u53d6\u6642\u4e5f\u9808\u6709\u6548\u7684\u914d\u5408 CPU \u7684\u9031\u671f\u3002 \u4f8b\u5982\uff0c\u641c\u5c0b\u5f15\u64ce\u6703\u628a\u58d3\u7e2e\u5f8c\u7684\u884c\u5f0f\u8cc7\u6599\u5206\u6210\u597d\u5e7e\u6bb5\uff08chunk\uff09\uff0c \u4e26\u6301\u7e8c\u4e14\u7dca\u5bc6\u5730\uff08\u4e5f\u5c31\u662f\u904e\u7a0b\u4e2d\u4e0d\u547c\u53eb\u4efb\u4f55\u51fd\u793a\uff0c\u907f\u514d function call/jump\uff09\u653e\u9032 CPU \u7b2c\u4e00\u5c64\u5feb\u53d6\u4e2d\u3002 \u9664\u6b64\u4e4b\u5916\u6bcf\u4e00\u6bb5\uff08chunk\uff09\u5f7c\u6b64\u9593\u90fd\u53ef\u4ee5\u76f4\u63a5\u4f7f\u7528\u96fb\u6676\u9ad4\u53bb\u57f7\u884c AND \u6216 OR \u7b49\u908f\u8f2f\u904b\u7b97\u3002
\u9019\u4e00\u7cfb\u5217\u7684\u6280\u5de7\u7a31\u70ba\u5411\u91cf\u8655\u7406\uff08vectorized processing\uff09\uff0c\u4e8b\u5be6\u4e0a\u9019\u5c31\u662f SIMD \u9019\u985e\u6307\u4ee4\u5728\u505a\u7684\u4e8b\u3002
"},{"location":"feedback/designing-data-intensive-applications/foundation-dw/#\u6392\u5e8f","title":"\u6392\u5e8f","text":"\u628a\u8cc7\u6599\u7d93\u904e\u6392\u5e8f\u5f8c\u518d\u5132\u5b58\u9664\u4e86\u52a0\u901f\u641c\u5c0b\u4e5f\u53ef\u4ee5\u900f\u904e\u9577\u5ea6\u7de8\u78bc\uff08run-length encoded\uff09\u4f7f\u58d3\u7e2e\u66f4\u7dca\u5bc6\u3002\u4f8b\u5982 00001000100
\u6392\u5e8f\u5f8c\u8b8a\u6210 1,2,0,9
\uff081 \u6709 2 \u500b\uff0c0 \u6709 9 \u500b\uff09\u3002
\u53ef\u4ee5\u900f\u904e\u4e4b\u524d\u63d0\u904e\u7684 \u6392\u5e8f\u5b57\u4e32\u8868 \u4f86\u505a\u6392\u5e8f\u3002 SSTables \u5206\u6210\u78c1\u789f\u4e0a\u7684\u8cc7\u6599\u548c\u8a18\u61b6\u9ad4\u4e2d\u7684\u8cc7\u6599\uff0c\u8a18\u61b6\u9ad4\u7684\u8cc7\u6599\u65b9\u4fbf\u505a\u6392\u5e8f\u548c\u63d2\u5165\u3002 \u7576\u8a18\u61b6\u9ad4\u9054\u5230\u4e00\u5b9a\u5927\u5c0f\u5f8c\uff0c\u5beb\u5165\u78c1\u789f\u4e2d\u3002\u800c\u78c1\u789f\u4e2d\u7684\u6a94\u6848\u6bcf\u884c\u53c8\u88ab\u5206\u6210\u597d\u5e7e\u6bb5\uff0c\u65b9\u4fbf\u505a\u8cc7\u6599\u7684\u67e5\u627e\u548c\u63d2\u5165\u3002 Vertica \u7684\u8cc7\u6599\u5eab\u4fbf\u662f\u4f9d\u6b64\u65b9\u5f0f\u3002
\u9700\u8981\u6ce8\u610f\u7684\u662f\uff0c\u96d6\u7136\u662f\u628a\u6bcf\u884c\u4f5c\u70ba\u5132\u5b58\u55ae\u4f4d\uff0c\u5728\u6392\u5e8f\u6642\u4ecd\u8981\u8b93\u6240\u6709\u884c\u7684\u5404\u5217\u8cc7\u6599\u4fdd\u6301\u76f8\u540c\u9806\u5e8f\u3002
\u6211\u5011\u4ee5\u524d\u9762\u4f8b\u5b50\u63d0\u5230\u96f6\u552e\u696d\u70ba\u4f8b\uff1a
\u82e5\u767c\u73fe\u5e38\u5e38\u4f7f\u7528\u65e5\u671f\u55ae\u4f4d\u505a\u641c\u5c0b\uff0c\u5982\u6bcf\u6708\u7684\u8cfc\u8cb7\u7522\u54c1\u7e3d\u6578\uff0c\u5247\u53ef\u4ee5\u4f7f\u7528 date_key
\u4f86\u505a\u6392\u5e8f\u3002 \u4e5f\u53ef\u4ee5\u518d\u65b0\u589e\u4e00\u500b\u884c\u4f86\u6392\u5e8f\u3002 \u4f8b\u5982\uff0c\u4f7f\u7528\u7522\u54c1\u7de8\u865f\u984d\u5916\u505a\u4e00\u7d44\u6392\u5e8f\u7684\u8cc7\u6599\uff0c\u9019\u6a23\u8cc7\u6599\u5c31\u6703\u4ee5\u65e5\u671f\u6392\u5e8f\uff0c\u8b93\u8cc7\u6599\u5eab\u5feb\u901f\u627e\u5230\u6307\u5b9a\u65e5\u671f\u3002 \u540c\u6642\u53c8\u518d\u4f7f\u7528\u7522\u54c1\u7de8\u865f\u6392\u5e8f\uff0c\u9019\u6642\u5e6b\u52a9\u5206\u6790\u5e2b\u5feb\u901f\u5224\u65b7\u54ea\u5929\u6709\u54ea\u4e9b\u7522\u54c1\u71b1\u8ce3\u3002
\u6392\u5e8f\u7684\u884c\u7a2e\u8d8a\u591a\uff0c\u5176\u80fd\u5f37\u5316\u7684\u58d3\u7e2e\u91cf\u548c\u641c\u5c0b\u901f\u5ea6\u5c31\u8d8a\u5c11\u3002
\u70ba\u4e86\u907f\u514d\u7b2c\u4e8c\u3001\u4e09\u7d44\u6392\u5e8f\u5f71\u97ff\u8f03\u5c11\uff0c\u9019\u6642\u5c31\u767c\u5c55\u51fa\u65b0\u7684\u5c0f\u6280\u5de7\uff0c\u4f8b\u5982 Vertica \u7684\u8cc7\u6599\u5eab\uff1a
\u53cd\u6b63\u8cc7\u6599\u90fd\u8981\u505a\u5099\u4efd\u548c HA \u800c\u628a\u8cc7\u6599\u8907\u88fd\u5230\u5404\u6a5f\u5668\uff0c\u4f60\u5c31\u53ef\u4ee5\u628a\u5404\u6a5f\u5668\u7684\u8cc7\u6599\u505a\u4e0d\u540c\u65b9\u5f0f\u53bb\u5132\u5b58\u3002 \u4f8b\u5982\u8cc7\u6599\u5eab A \u4ee5\u65e5\u671f\u4f5c\u70ba sort key
\uff0c\u8cc7\u6599\u5eab B \u4ee5\u7522\u54c1\u4f5c\u70ba sort key
\u3002
\u53ef\u4ee5\u60f3\u50cf\u5176\u548c\u5217\u5f0f\u8cc7\u6599\u5eab\u7684\u591a\u7d22\u5f15\u7684\u5dee\u7570\u3002\u5217\u5f0f\u8cc7\u6599\u5eab\u5728\u591a\u7d22\u5f15\u4e2d\uff0c\u5e38\u5e38\u6703\u5728\u7d22\u5f15\u4e2d\u5132\u5b58\u6a94\u6848\u7684\u4f86\u6e90\uff0c \u4f8b\u5982 heap file \u7b49\u7b49\u3002 \u800c\u884c\u5f0f\u8cc7\u6599\u5eab\u5247\u662f\u6839\u64da\u7279\u5b9a\u6392\u5e8f\u65b9\u5f0f\u76f4\u63a5\u5132\u5b58\u8a72\u8cc7\u6599\u3002
"},{"location":"feedback/designing-data-intensive-applications/foundation-dw/#\u66ab\u5b58\u805a\u5408","title":"\u66ab\u5b58\u805a\u5408","text":"\u641c\u5c0b\u6642\uff0c\u5e38\u5e38\u6703\u7528\u5230\u805a\u5408\uff08aggregation\uff09\u8cc7\u6599\uff0c\u4f8b\u5982\u7e3d\u6578\uff08sum\uff09\u3001\u5e73\u5747\uff08avg\uff09\u7b49\u7b49\u3002 \u800c\u9019\u985e\u64cd\u4f5c\u5e38\u5e38\u90fd\u9700\u8981\u904d\u6b77\u8cc7\u6599\u5eab\uff0c\u65e2\u7136\u9019\u4e9b\u8cc7\u6599\u5f88\u8017\u6642\u53c8\u9700\u8981\u5e38\u5e38\u7528\u5230\uff0c\u5c31\u66ab\u5b58\u4ed6\u5427\u3002 \u9019\u985e\u66ab\u5b58\u5f8c\u7684\u805a\u5408\u8cc7\u6599\uff0c\u7a31\u70ba\u7269\u5316\u805a\u5408\uff08materialized aggregates\uff09\uff0c \u800c\u5c55\u793a\u9019\u985e\u8cc7\u6599\u7684\u5716\u6216\u8868\uff08table\uff09\u7a31\u70ba\u7269\u5316\u8996\u5716\uff08materialized view\uff09\u3002
\u7269\u5316\u8996\u5716\u548c\u95dc\u806f\u5f0f\u8cc7\u6599\u5eab\u5e38\u898b\u7684\u6a19\u6e96\u8996\u5716\uff08standard/virtual view\uff09\u6709\u6240\u5dee\u7570\uff0c \u6a19\u6e96\u8996\u5716\u53ea\u662f\u628a\u67e5\u8a62\u8a18\u9304\u6574\u5408\u5728\u4e00\u8d77\uff0c\u7576\u88ab\u4f7f\u7528\u6642\uff0c\u4ecd\u7136\u6703\u57f7\u884c\u5176\u4e2d\u4e00\u7cfb\u5217\u7684\u67e5\u8a62\u3002
\u53cd\u4e4b\uff0c\u7269\u5316\u8996\u5716\u662f\u76f4\u63a5\u628a\u641c\u5c0b\u7d50\u679c\u5132\u5b58\u8d77\u4f86\uff0c\u4e5f\u5c31\u662f\u4e00\u4efd\u53bb\u6b63\u898f\u5316\uff08de-normalized\uff0c \u76f8\u540c\u8cc7\u6599\u653e\u5728\u591a\u500b\u5730\u65b9\uff0c\u63d0\u9ad8\u8cc7\u6599\u540c\u6b65\u7684\u56f0\u96e3\uff09\u7684\u8cc7\u6599
\u5716\u4e2d\u5c55\u793a\uff0c\u4e8c\u7dad\u8cc7\u6599\u5728\u505a\u7269\u5316\u6574\u5408\u6642\u7684\u65b9\u5f0f\u3002\u6bcf\u4e00\u500b\u55ae\u5143\uff08cell\uff09\u5132\u5b58\u67d0\u4e00\u5929\u7684\u67d0\u4e00\u500b\u7522\u54c1\u92b7\u552e\u7e3d\u984d\uff0c \u5217\u5c3e\u5132\u5b58\u67d0\u4e00\u5929\u7684\u6240\u6709\u7522\u54c1\u92b7\u552e\u7e3d\u984d\uff0c\u884c\u5c3e\u5132\u5b58\u67d0\u4e00\u7522\u54c1\u7684\u6240\u6709\u92b7\u552e\u7e3d\u984d\u3002 \u9664\u6b64\u4e4b\u5916\uff0c\u8cc7\u6599\u66f4\u53ef\u80fd\u88ab\u9032\u884c\u591a\u7dad\u5ea6\u7684\u5132\u5b58\uff0c\u4f8b\u5982\u8cfc\u7269\u8005\u7684\u5e74\u9f61\u7b49\u7b49\u3002
\u7dad\u8b77\u7269\u5316\u8996\u5716\u662f\u6703\u964d\u4f4e\u5beb\u5165\u6642\u7684\u6548\u80fd\u7684\uff0c\u6240\u4ee5\u5728 OLTP \u7684\u8cc7\u6599\u5eab\u4e2d\u5f88\u5c11\u6703\u770b\u5230\u5176\u5b58\u5728\u3002
\u4e00\u822c\u7684 \u8cc7\u6599\u5009\u5132 \u90fd\u6703\u76e1\u53ef\u80fd\u7684\u4fdd\u5b58\u539f\u59cb\u8cc7\u6599\uff08\u58fd\u53f8\u7b56\u7565\uff09\uff0c\u7576\u5728\u641c\u5c0b\u6642\uff0c\u5982\u679c\u9700\u8981\u52a0\u901f\u67d0\u4e9b\u7d50\u679c\uff0c\u518d\u4f7f\u7528\u9019\u4e9b\u52a0\u901f\u624b\u6cd5\u3002
"},{"location":"feedback/designing-data-intensive-applications/foundation-encode/","title":"\u7de8\u78bc\u548c\u9032\u7a0b","text":"\u61c9\u7528\u7a0b\u5f0f\u7121\u53ef\u907f\u514d\u5730\u9700\u8981\u6f14\u9032\uff0c\u5728\u6539\u8b8a\u61c9\u7528\u7a0b\u5f0f\u7684\u540c\u6642\uff0c\u901a\u5e38\u4e5f\u6703\u9700\u8981\u8abf\u6574\u8cc7\u6599\u7684\u7d50\u69cb\u3002\u5982\u4f55\u8b93\u61c9\u7528\u7a0b\u5f0f\u5728\u4f7f\u7528\u8cc7\u6599\u6642\u4fdd\u6301\u524d\u5f8c\u76f8\u5bb9\uff1f
\u8cc7\u6599\u5728\u505a\u5132\u5b58\u6216\u8f38\u51fa\u7684\u6642\u5019\u662f\u9700\u8981\u7de8\u78bc\uff08encoding\uff09\u7684\uff0c\u9664\u4e86\u53ef\u4ee5\u5e6b\u52a9\u58d3\u7e2e\u8cc7\u6599\u91cf\u3001\u52a0\u901f\u6548\u80fd\u5916\uff0c \u597d\u7684\u7de8\u78bc\u65b9\u5f0f\u4e5f\u80fd\u63d0\u4f9b\u826f\u597d\u7684\u524d\u5f8c\u76f8\u5bb9\u3002
HackMD \u5831\u544a\u6587\u672c
"},{"location":"feedback/designing-data-intensive-applications/foundation-encode/#\u7de8\u78bc","title":"\u7de8\u78bc","text":"\u7576\u4f60\u628a\u8cc7\u6599\u5b58\u9032\u8a18\u61b6\u9ad4\u4e2d\uff0c\u53ef\u4ee5\u900f\u904e\u5404\u7a2e\u8cc7\u6599\u578b\u5225\u53bb\u5c0d\u8cc7\u6599\u9032\u884c\u64cd\u4f5c\uff0c\u4f8b\u5982\u9663\u5217\u3001\u7269\u4ef6\u7b49\u7b49\u3002\u7136\u800c\u7576\u628a\u8cc7\u6599\u5b58\u9032\u78c1\u789f\uff08filesystem\uff09\u4e2d\u6216\u8005\u900f\u904e\u7db2\u8def\u50b3\u9001\u7d66\u5176\u4ed6\u670d\u52d9\u6642\uff0c\u5c31\u9700\u8981\u4ee5\u7de8\u78bc\u5f8c\u7684\u8cc7\u6599\uff08\u4f8b\u5982 JSON \u683c\u5f0f\uff09\u4f86\u5132\u5b58\u6216\u8f38\u51fa\u3002
"},{"location":"feedback/designing-data-intensive-applications/foundation-encode/#\u7a0b\u5f0f\u78bc\u5167\u5efa","title":"\u7a0b\u5f0f\u78bc\u5167\u5efa","text":"\u6211\u5011\u90fd\u6703\u900f\u904e\u7a0b\u5f0f\u8a9e\u8a00\u4f86\u548c\u8a18\u61b6\u9ad4\u6e9d\u901a\uff0c\u4e0d\u540c\u7a0b\u5f0f\u8a9e\u8a00\u9810\u8a2d\u5c31\u6709\u4e9b\u7de8\u78bc\u65b9\u5f0f\uff0cJava\uff1ajava.io.Serializable
\u3001Ruby\uff1aMarshal
\u3001Python\uff1apickle
\uff0c\u7136\u800c
JSON\u3001XML\u3001CSV\uff0c\u9019\u4e9b\u683c\u5f0f\u90fd\u5f88\u5e38\u898b\uff0c\u4e0d\u9700\u8981\u7db1\u76ee\u5c31\u80fd\u89e3\u78bc\u3002\u7136\u800c
\u7136\u800c\u9019\u4e9b\u4ecd\u662f\u4e3b\u8981\u7684\u7de8\u78bc\u65b9\u5f0f\uff0c\u4e5f\u56e0\u70ba\u5927\u5bb6\u5f88\u7fd2\u6163\u9019\u4e9b\u65b9\u5f0f\u7684\u7de8\u78bc\uff0c\u5c0e\u81f4\u66f4\u6709\u6548\u548c\u66f4\u65b9\u4fbf\u7ba1\u7406\u7684\u7de8\u78bc\u65b9\u5f0f\u5f88\u96e3\u5438\u5f15\u5230\u5927\u5bb6\u7684\u76ee\u5149\u3002
"},{"location":"feedback/designing-data-intensive-applications/foundation-encode/#\u4e8c\u9032\u4f4d-json","title":"\u4e8c\u9032\u4f4d JSON","text":"\u6709\u4e9b\u683c\u5f0f\u662f\u4ee5 JSON \u70ba\u57fa\u790e\u505a\u6f14\u5316\u7684\uff0c\u5176\u5617\u8a66\u89e3\u6c7a\u4e0a\u8ff0\u554f\u984c\uff0c\u4f46\u662f\u6548\u7387\u4ecd\u7121\u6cd5\u8d0f\u904e\u5c08\u9580\u7684\u4e8c\u9032\u4f4d\u7de8\u78bc\uff0c\u4ee5 MessagePack \u70ba\u7bc4\u4f8b\uff1a
\u539f\u59cb JSON \u8cc7\u6599\uff1a
{\n \"userName\": \"Martin\",\n \"favoriteNumber\": 1337,\n \"interests\": [\"daydreaming\", \"hacking\"]\n}\n
\u6211\u5011\u53ef\u4ee5\u5f97\u5230 66 Bytes \u7684\u8cc7\u6599\uff0c\u78ba\u5be6\u6bd4\u539f\u672c 88 Bytes \u597d\uff0c\u4f46\u662f\u548c\u5f85\u6703\u6211\u5011\u53ef\u4ee5\u770b\u5230\u6e1b\u5c11\u5230 32 Bytes \u7684\u65b9\u5f0f\u4ecd\u6709\u5dee\u7570\u3002
\u7531\u65bc\u4ed6\u662f\u5ef6\u4f38 JSON\uff0c\u5929\u751f\u4e0a\u4ecd\u7136\u6c92\u6709\u7db1\u76ee\uff0c\u6240\u4ee5\u6bcf\u500b\u7269\u4ef6\u4ecd\u7136\u9700\u8981\u5132\u5b58\u9375\u7684\u8cc7\u6599\uff08\u4f8b\u5982\uff1auserName
\uff09\u3002
\u4e8c\u9032\u4f4d\u7de8\u78bc\u4e26\u4e0d\u662f\u65b0\u6771\u897f\uff0c\u65e9\u5728 1984 \u5e74\u5c31\u6709\u5354\u5b9a ASN.1 \u95e1\u8ff0\u5982\u4f55\u9032\u884c\u4e8c\u9032\u4f4d\u7de8\u78bc\uff0c\u4ed6\u548c Thrift\u3001Protocol Buffer \u4e00\u6a23\u90fd\u4f7f\u7528 tag ID\u3002\u4e14\u5176\u61c9\u7528\uff08DER\uff09\u5982\u4eca\u4ecd\u88ab\u5927\u91cf\u4f7f\u7528\u65bc X.509\u3002
\u4f46\u662f\u4ed6\u537b\u904e\u65bc\u8907\u96dc\u4e14\u5176\u6587\u4ef6\u4e5f\u8a2d\u8a08\u5f97\u5f88\u8907\u96dc\uff0c\u7531\u6b64\u767c\u5c55\u51fa\u4ee5\u4e0b\u5e7e\u500b\u8f03\u65b0\u7684\u65b9\u5f0f\u3002
\u4e0a\u8ff0\u65b9\u5f0f\u53ef\u4ee5\u964d\u4f4e\u78c1\u789f\u7684\u4f7f\u7528\u91cf\u3001\u9ad8\u6548\u80fd\u7de8\uff08\u89e3\uff09\u78bc\u3001\u6709\u6548\u88fd\u4f5c\u6587\u4ef6\u6a94\uff0c\u4f46\u7f3a\u9ede\u5c31\u662f\u9700\u8981\u89e3\u78bc\u624d\u80fd\u8b93\u4eba\u985e\u8b80\u61c2\u8a0a\u606f\u3002
\u5728\u8cc7\u6599\u6e96\u5099\u8981\u9001\u5230\u8cc7\u6599\u5132\u5009\uff08warehouse\uff09\u6642\uff0c\u4e5f\u9700\u8981\u7de8\u78bc\uff0c\u9019\u6642\u5019\u53ef\u4ee5\u628a\u8cc7\u6599\u8f49\u63db\u6210\u53cb\u5584\u65bc\u884c\u5f0f\u8cc7\u6599\u5eab\uff08column-oriented database\uff09\u7684\u683c\u5f0f\uff0c\u4f8b\u5982 Parquet\u3002
"},{"location":"feedback/designing-data-intensive-applications/foundation-encode/#\u524d\u5f8c\u76f8\u5bb9","title":"\u524d\u5f8c\u76f8\u5bb9","text":"\u5728\u505a\u7de8\u78bc\u6642\u90fd\u9700\u8981\u53bb\u8003\u616e\u524d\u5f8c\u76f8\u5bb9\uff1a
\u7531\u6b64\u53ef\u77e5\uff0cJSON \u9019\u985e\u7de8\u78bc\u65b9\u5f0f\u65b0\u820a\u7248\u672c\u90fd\u53ef\u4ee5\u505a\u89e3\u78bc\uff0c\u53ea\u8981\u5728\u7a0b\u5f0f\u908f\u8f2f\u4e0a\u6ce8\u610f\u4e00\u4e0b\u5c31\u53ef\u4ee5\u4fdd\u6301\u524d\u5f8c\u76f8\u5bb9\u3002
"},{"location":"feedback/designing-data-intensive-applications/foundation-encode/#\u7a0b\u5f0f\u78bc\u7522\u751f\u5668","title":"\u7a0b\u5f0f\u78bc\u7522\u751f\u5668","text":"\u5728\u4f7f\u7528\u9700\u8981\u7de8\u8b6f\u7684\u8a9e\u8a00\uff08Java\u3001C++\uff09\u6642\uff0c\u53ef\u4ee5\u5229\u7528\u7db1\u76ee\u53bb\u7522\u751f\u76f8\u61c9\u7269\u4ef6\u7684\u7a0b\u5f0f\u78bc\uff08code generation\uff09\uff0c\u5e6b\u52a9\u7de8\u8b6f\u6642\u7684\u578b\u5225\u5224\u5b9a\u3002\u4f8b\u5982\u95dc\u65bc\u300c\u4eba\u300d\u7684\u7db1\u76ee\uff0c\u5c31\u53ef\u4ee5\u6839\u64da\u7db1\u76ee\u5efa\u7acb\u5c0d\u61c9\u7684\u7269\u4ef6\uff0c\u4e26\u4e14\u7522\u751f\u5c0d\u61c9\u7684 property\uff0c\u4f8b\u5982\u59d3\u540d\uff08var person = new Person(object);print(person.name);
\uff09\u3002\u4f46\u662f\u5728\u6839\u64da\u8cc7\u6599\u52d5\u614b\u8abf\u6574\u7db1\u76ee\u7684\u72c0\u6cc1\u6642\uff0c\u9019\u6a23\u7684\u6a5f\u5236\u5728\u8a2d\u8a08\u6642\u5c31\u5f88\u9ebb\u7169\u3002
\u76f8\u5c0d\u800c\u8a00\u8173\u672c\u578b\u7684\u8a9e\u8a00\uff08JavaScript\u3001Python\u3001Ruby\u3001PHP\uff09\uff0c\u4e0d\u9700\u8981\u7522\u751f\u7a0b\u5f0f\u78bc\u4f86\u5e6b\u52a9\u7de8\u8b6f
Note
\u96d6\u7136 JSON \u53ef\u4ee5\u7528\u984d\u5916\u5de5\u5177\u8a2d\u5b9a\u7db1\u76ee\uff0c\u4f46\u662f\u4ed6\u628a\u7de8\u89e3\u78bc\u548c\u7db1\u76ee\u7ba1\u7406\u7576\u6210\u5169\u4ef6\u4e8b\uff1a\u7de8\u78bc\u6642\u4e0d\u9700\u8981\u8003\u616e\u7db1\u76ee\u4e00\u6a23\u53ef\u4ee5\u505a \u76f8\u53cd\uff0c\u4e8c\u9032\u4f4d\u7de8\u78bc\u662f\u548c\u7db1\u76ee\u540c\u751f\u7684\uff0c\u6c92\u6709\u7db1\u76ee\u5c31\u7121\u6cd5\u7de8\u78bc
"},{"location":"feedback/designing-data-intensive-applications/foundation-encode/#\u4e8c\u9032\u4f4d\u7de8\u78bc\u7684\u6bd4\u8f03","title":"\u4e8c\u9032\u4f4d\u7de8\u78bc\u7684\u6bd4\u8f03","text":"\u4ee5\u4e0b\u5c31 Apache Thrift\u3001Protocol Buffer \u548c Apache Avro \u4f86\u505a\u4e8c\u9032\u4f4d\u7de8\u78bc\u7684\u6bd4\u8f03\u3002
"},{"location":"feedback/designing-data-intensive-applications/foundation-encode/#apache-thrift","title":"Apache Thrift","text":"Apache Thrift \u6703\u4f7f\u7528\u7db1\u76ee\uff1a
struct Person {\n 1: required string userName,\n 2: optional i64 favoriteNumber,\n 3: optional list<string> interests\n}\n
\u4e26\u6709\u5169\u7a2e\u65b9\u5f0f\u505a\u7de8\u78bc\uff0cBinaryProtocol \u548c CompactProtocol\uff0c\u4f9d\u5e8f\u65b9\u5f0f\u70ba\uff1a
Protocol Buffer \u7684\u7db1\u76ee\u5982\u4e0b\uff1a
message Person {\n required string user_name = 1;\n optional int64 favorite_number = 2;\n repeated string interests = 3;\n}\n
"},{"location":"feedback/designing-data-intensive-applications/foundation-encode/#\u8a3b","title":"\u8a3b","text":"required
\u548c optional
\u5728\u7de8\u78bc\u6642\uff0c\u4e0d\u5f71\u97ff\u7d50\u679c\uff0c\u50c5\u6703\u5728\u505a\u89e3\u78bc\u6642 runtime \u8f38\u51fa\u932f\u8aa4\u3002required
\u6703\u8b93\u820a\u7a0b\u5f0f\u78bc\u8f38\u51fa\u932f\u8aa4\uff0c\u9700\u8981\u7d66\u5b9a\u9810\u8a2d\u503c\u3002int8
\u8f49\u5230 int16
list
\u8cc7\u6599\u578b\u614b\uff0c\u8b93\u4ed6\u5f88\u597d\u5f9e repeated
\u8f49\u5230 optional
\uff0c\u4f46\u5de2\u72c0\u7d50\u69cb\u5c31\u6703\u9700\u8981\u984d\u5916\u529f\u4f86\u9054\u6210\u3002Apache Avro \u7684\u7db1\u76ee\uff1a
record Person {\n string userName;\n union { null, long } favoriteNumber = null;\n array<string> interests;\n}\n
Avro \u662f\u4f5c\u8005\u6709\u8ca2\u737b\u7684\u958b\u6e90\u7de8\u78bc\u65b9\u5f0f
\u9019\u88e1\u591a\u4e86\u4e00\u500b union\uff0c\u9664\u4e86\u660e\u78ba\u6a19\u793a\u54ea\u4e9b\u662f nullable \u4e4b\u5916\uff0c\u5c31\u4e0d\u9700\u8981 required/optional \u4e86\u3002
\u5728\u89e3\u78bc\u6642\uff0c\u8cc7\u6599\u4e00\u7684\u578b\u5225\u548c\u540d\u7a31\u5c31\u662f\u7db1\u76ee\u4e0a\u7b2c\u4e00\u7d44\u8cc7\u6599\u6240\u5c55\u793a\u7684\u578b\u5225\u3002 \u7531\u65bc\u5728\u7de8\u78bc\u5f8c\uff0c\u6c92\u6709\u578b\u5225\u548c ID\uff0c\u6240\u4ee5\u5fc5\u9808\u6709\u5c0d\u61c9\u7684\u7db1\u76ee\u624d\u80fd\u89e3\u78bc\u3002
"},{"location":"feedback/designing-data-intensive-applications/foundation-encode/#\u7d30\u7bc0","title":"\u7d30\u7bc0","text":"Apache Avro \u4e26\u6c92\u6709\u4f7f\u7528 tag ID \u4f86\u8fa8\u8a8d\u6bcf\u500b\u8cc7\u6599\u7684\u4f4d\u7f6e\uff0c\u800c\u662f\u900f\u904e\u7db1\u76ee\u4e0d\u540c\u7248\u672c\u9593\u7684\u8f49\u63db\uff1a
\u56e0\u6b64\u8b80\u53d6\u8cc7\u6599\u6642\uff0c\u9700\u8981\u5148\u78ba\u4fdd\u64b0\u5beb\u8cc7\u6599\u6240\u4f7f\u7528\u7684\u7db1\u76ee\u7248\u672c\u3002
Apache Avro \u4e5f\u5229\u7528 union { null, int }
\u4f86\u7576\u4f5c\u8cc7\u6599\u7684 required/optional\uff0c\u540c\u6642\u7d66\u4e88\u9810\u8a2d\u503c\u4f86\u6eff\u8db3\u5411\u5f8c\uff08\u524d\uff09\u76f8\u5bb9\u3002
\u9664\u6b64\u4e4b\u5916\uff0cApache Avro \u9084\u5141\u8a31\u66f4\u6539\u8cc7\u6599\u7684\u578b\u5225\u548c\u540d\u7a31\uff1a
alias
\u4f86\u6eff\u8db3\u540d\u7a31\u7684\u8f49\u63db\uff0c\u4f46\u53ea\u80fd\u6eff\u8db3\u5411\u5f8c\u76f8\u5bb9\uff08\u820a\u7db1\u76ee\u770b\u4e0d\u61c2\u65b0\u7db1\u76ee\u8abf\u6574\u540d\u7a31\u5f8c\u7684\u8cc7\u6599\uff09\u6839\u64da\u61c9\u7528\u7a0b\u5f0f\u800c\u6709\u5dee\u7570\uff1a
\u628a\u6240\u6709\u7248\u672c\u7684\u7db1\u76ee\u90fd\u5b58\u9032 DB \u53ef\u4ee5\u5e6b\u52a9\u672a\u4f86\u6aa2\u67e5\u548c\u5099\u4efd\u3002
"},{"location":"feedback/designing-data-intensive-applications/foundation-encode/#\u4e0d\u9700\u8981\u4f7f\u7528-tag-id-\u6709\u4ec0\u9ebc\u597d\u8655","title":"\u4e0d\u9700\u8981\u4f7f\u7528 tag ID \u6709\u4ec0\u9ebc\u597d\u8655","text":"\u8cc7\u6599\u8f38\u51fa\u6210\u6a94\u6848\u6642\uff08Hadoop \u67b6\u69cb\u4e0b\u7684\u8cc7\u6599\u5eab\u5e38\u505a\u7684\u4e8b\uff09\uff0c\u6211\u53ef\u4ee5\u5f88\u65b9\u4fbf\u5730\u5f9e\u8cc7\u6599\u5eab\u7684\u7db1\u76ee\u8f49\u63db\u6210 Avro \u7684\u7db1\u76ee\uff0c\u7136\u5f8c\u628a\u6a94\u6848\u64b0\u5beb\u6210\u4e8c\u4f4d\u5143\u3002\u540c\u6a23\u7684\uff0c\u7576\u8cc7\u6599\u5eab\u7684\u7db1\u76ee\u66f4\u65b0\u6642\uff0c\u6211\u5011\u518d\u7522\u751f\u65b0\u7684\u7db1\u76ee\uff0c\u7531\u65bc\u662f\u5c0d\u61c9\u6b04\u4f4d\u540d\u7a31\uff0c\u5c31\u4e0d\u6703\u6709\u885d\u7a81\u4e86\u3002\u4f8b\u5982\uff0c\u65b0\u589e\u4e00\u500b\u6b04\u4f4d\u53eb countryId \u4e26\u540c\u6642\u79fb\u9664\u6b04\u4f4d countryName\uff0c\u518d\u4f9d\u6b64\u8cc7\u6599\u5eab\u7db1\u76ee\u7522\u751f Avro \u7db1\u76ee\u6642\uff0c\u53ef\u4ee5\u9806\u5229\u7684\u7528\u820a\uff08\u65b0\uff09\u7db1\u76ee\u8b80\u65b0\uff08\u820a\uff09\u8cc7\u6599\u3002
\u76f8\u53cd\u7684\uff0c\u7528 Protocol Buffers \u6216 Thrift \u5c31\u9700\u8981\u8b39\u614e\u4f7f\u7528 tag ID \u4f86\u907f\u514d\u4efb\u4f55\u885d\u7a81\u3002\u4ee5\u4e0a\u8ff0\u4f8b\u5b50\u70ba\u4f8b\uff0c\u5c31\u6703\u51fa\u73fe\u76f8\u540c tag ID \u537b\u662f\u4e0d\u540c\u6b04\u4f4d\u7684\u72c0\u6cc1\uff08\u4f8b\u5982\uff0ccountryId \u548c countryName \u90fd\u662f tag 5\uff09\u3002
Protocol Buffers\u3001Thrift \u662f\u70ba\u4e86 RPC \u9019\u985e\u64cd\u4f5c\u800c\u8a2d\u8a08\u7684\u7de8\u78bc\u683c\u5f0f
"},{"location":"feedback/designing-data-intensive-applications/foundation-encode/#\u81ea\u63cf\u8ff0","title":"\u81ea\u63cf\u8ff0","text":"\u5982\u679c\u5728\u8cc7\u6599\u4e2d\u6709\u653e\u7f6e\u7de8\u78bc\u6642\u7684\u7db1\u76ee\uff0c\u6211\u5011\u7a31\u70ba\u5176\u80fd\u5920\u81ea\u63cf\u8ff0\uff08self-describing\uff09\u3002\u82e5\u8cc7\u6599\u80fd\u5920\u81ea\u63cf\u8ff0\uff0c\u4f60\u53ef\u4ee5\u76f4\u63a5\u900f\u904e\u5c0d\u61c9\u7de8\u78bc\u65b9\u5f0f\u7684\u7a0b\u5f0f\u5eab\uff08\u4f8b\u5982 Avro library\uff09\u6253\u958b\u9019\u4efd\u6a94\u6848\uff0c\u4e0d\u9700\u8981\u984d\u5916\u518d\u63d0\u4f9b\u7db1\u76ee\u3002\u540c\u6642\uff0c\u53c8\u4fdd\u8b49\u8cc7\u6599\u4e0d\u6703\u904e\u5927\u3002
\u9019\u5c0d\u65bc\u9ad8\u7dad\u5ea6\u7684\u5206\u6790\u5de5\u5177\uff0c\u5982 Apache Pig\uff0c\u5f88\u6709\u5e6b\u52a9\u3002\u4f7f\u7528\u8005\u76f4\u63a5\u900f\u904e SQL \u8a9e\u6cd5\u5728 Hadoop \u67b6\u69cb\u4e4b\u4e0a\u7684\u8cc7\u6599\u5eab\u9032\u884c\u5206\u6790\uff0c\u4e26\u4e14\u7522\u51fa\u65b0\u7684\u8cc7\u6599\uff0c\u904e\u7a0b\u4e2d\u90fd\u4e0d\u9700\u8981\u8003\u616e\u7db1\u76ee\u7684\u554f\u984c\uff0c\u56e0\u70ba Avro \u6703\u5728\u8cc7\u6599\u7684\u524d\u9762\u5b9a\u7fa9\u7db1\u76ee\u3002
"},{"location":"feedback/designing-data-intensive-applications/foundation-encode/#\u8907\u7fd2\u5dee\u7570","title":"\u8907\u7fd2\u5dee\u7570","text":"Schema-less \u7de8\u78bc\uff08JSON\uff09\u6709\u5176\u512a\u9ede\uff1a
\u7136\u800c\u4e8c\u9032\u4f4d\u7de8\u78bc\u4e5f\u6709\u5176\u597d\u8655\uff1a
\u6211\u5011\u5df2\u7d93\u7406\u89e3\u7de8\u78bc\u662f\u53ef\u4ee5\u900f\u904e\u5176\u5167\u90e8\u6a5f\u5236\uff0c\u53bb\u8b93\u4f7f\u7528\u8a72\u7de8\u78bc\u65b9\u5f0f\u7684\u4eba\u53ef\u4ee5\u4e0d\u9700\u8981\u8003\u616e\u600e\u9ebc\u76f8\u5bb9\u4e0d\u540c\u7248\u672c\u7684\u7db1\u76ee\uff0c\u63a5\u4e0b\u4f86\u900f\u904e\u5be6\u969b\u4f7f\u7528\u5834\u666f\u4f86\u611f\u53d7\u4e00\u4e0b\u5176\u61c9\u7528\u3002
\u61c9\u7528\u7a0b\u5f0f\u628a\u8cc7\u6599\u50b3\u7d66\u8cc7\u6599\u5eab\uff0c\u4e26\u9810\u671f\u672a\u4f86\u8981\u53ef\u4ee5\u62ff\u5230\u6307\u5b9a\u7684\u8cc7\u6599\u3002
\u5fc5\u9808\u5411\u5f8c\u76f8\u5bb9\uff08\u65b0\u7db1\u76ee\u8b80\u820a\u8cc7\u6599\uff09\uff0c\u56e0\u70ba\u662f\u50b3\u7d66\u5176\u4ed6\u4eba\uff08\u5beb\u9032\u78c1\u789f\uff09\u5f8c\uff0c\u672a\u4f86\u7684\u81ea\u5df1\u4f7f\u7528\u65b0\u7db1\u76ee\u505a\u8b80\u53d6\u3002
\u9664\u975e\u4f60\u6bcf\u6b21\u66f4\u52d5\u7db1\u76ee\u90fd\u8981\u628a\u8cc7\u6599\u5eab\u6240\u6709\u8cc7\u6599\u91cd\u65b0\u7de8\u78bc\u4e00\u6b21\uff0c\u5426\u5247\u66f4\u52d5\u7db1\u76ee\u7406\u8ad6\u4e0a\u820a\u8cc7\u6599\u5728\u7de8\u78bc\u4e0a\u4ecd\u662f\u4ee5\u820a\u7684\u7db1\u76ee\u70ba\u6e96\u3002 MySQL \u5c31\u662f\u90a3\u500b\u4f8b\u5916\u3002
\u7576\u5176\u4ed6\u670d\u52d9\u50b3\u9001\u8cc7\u6599\u7d66\u8cc7\u6599\u5eab\u6642\uff0c\u5176\u4ee5\u70ba\u7684\u7db1\u76ee\u5f88\u53ef\u80fd\u662f\u820a\u7684\uff0c\u9019\u6642\u4e5f\u9700\u8981\u5411\u524d\u76f8\u5bb9\uff0c\u9019\u6642\u5c31\u8981\u907f\u514d\u8cc7\u6599\u88ab\u820a\u7a0b\u5f0f\u78bc\u8986\u84cb\u6389\uff1a
\u9084\u6709\u500b\u72c0\u6cc1\u9700\u8981\u6ce8\u610f\uff1a\u7576\u8cc7\u6599\u5eab\u8981\u628a\u8cc7\u6599\u505a\u5099\u4efd\u6216\u8f38\u51fa\u7d66 \u8cc7\u6599\u5009\u5132 \u6642\uff0c\u4e5f\u6703\u9700\u8981\u4e00\u6b21\u6027\u628a\u5927\u8cc7\u6599\u91cd\u65b0\u7de8\u78bc\uff08\u505a ETL\uff09\u3002\u8cc7\u6599\u5eab\u5167\u90e8\u53ef\u80fd\u6703\u6709\u591a\u500b\u7248\u672c\u7684\u7db1\u76ee\u53bb\u505a\u7de8\u78bc\u7684\u8cc7\u6599\uff0c\u800c\u9019\u4e9b\u8cc7\u6599\u65e2\u7136\u90fd\u8981\u532f\u51fa\u53bb\uff0c\u90a3\u5c31\u91cd\u65b0\u7de8\u78bc\u9032\u6700\u65b0\u7248\u672c\u3002
"},{"location":"feedback/designing-data-intensive-applications/foundation-encode/#\u5169\u500b\u670d\u52d9\u5f7c\u6b64\u6e9d\u901a","title":"\u5169\u500b\u670d\u52d9\u5f7c\u6b64\u6e9d\u901a","text":"\u53ef\u80fd\u662f\u670d\u52d9\u9593\uff08\u4e0d\u7ba1\u662f\u4e0d\u662f\u76f8\u540c\u516c\u53f8\uff09\u7684\u6e9d\u901a\uff0c\u4e5f\u53ef\u80fd\u662f\u4f7f\u7528\u8005\uff08\u4f8b\u5982\u700f\u89bd\u5668\u3001\u624b\u6a5f APP\uff09\u548c\u670d\u52d9\u9593\u7684\u6e9d\u901a
\u66b4\u9732\u63a5\u53e3\uff08API\uff09\u7684 REST/GraphQL\uff0c\u9084\u6709\u4f9d\u7167\u898f\u7bc4\uff0c\u5728\u7a0b\u5f0f\u78bc\u4e2d\u5305\u88dd\u8d77\u4f86\u7684 RPC/SOAP\u3002
\u6bd4\u8f03\uff1a
\u7e3d\u7d50\u4f86\u8aaa\uff0cRPC/SOAP \u9069\u5408\u540c\u516c\u53f8\u4e0d\u540c\u670d\u52d9\u9593\u7684\u547c\u53eb\uff0c\u5feb\u901f\u4e14\u524d\u5f8c\u76f8\u5bb9\u3002\u53cd\u4e4b REST/GraphQL \u9069\u5408\u5c0d\u5916\uff0c\u4e0d\u7ba1\u662f\u4f7f\u7528\u8005\uff08\u700f\u89bd\u5668\u3001APP\uff09\u548c\u670d\u52d9\u9593\u7684\u6e9d\u901a\u6216\u8005\u4e0d\u540c\u516c\u53f8\u9593\u7684\u670d\u52d9\u6e9d\u901a\u3002
Info
\u4ee5\u4e0b\u662f\u4e0d\u540c\u7de8\u78bc\u65b9\u5f0f\u5728 RPC \u4e4b\u4e0a\u7684\u4e00\u4e9b\u5be6\u4f5c\uff1a
\u9019\u584a\u8f03\u4e0d\u719f\u6089\uff0c\u56e0\u6b64\u53e6\u5916\u641c\u96c6\u8cc7\u6599\u3002\u975e\u540c\u6b65\u8a0a\u606f\u548c\u540c\u6b65\u8a0a\u606f\u7684\u5dee\u7570\u5728\u65bc
\u975e\u540c\u6b65\u8a0a\u606f\u50b3\u905e\u66f8\u4e2d\u4e3b\u8981\u4ecb\u7d39\u5169\u7a2e\u65b9\u5f0f\uff1a
\u6b64\u7a2e\u65b9\u5f0f\uff0c\u4ecb\u65bc\u7b2c\u4e00\u4e8c\u7a2e\u4e2d\u9593\u3002 \u7b2c\u4e00\u7a2e\u900f\u904e\u8cc7\u6599\u5eab\uff0c\u61c9\u7528\u7a0b\u5f0f\u5b8c\u5168\u8b93\u8cc7\u6599\u5eab\u8655\u7406\u7de8\u78bc\uff1b \u7b2c\u4e8c\u7a2e\u61c9\u7528\u7a0b\u5f0f\u548c\u4f7f\u7528\u8005\uff08\u53ef\u80fd\u662f\u5176\u4ed6\u61c9\u7528\u7a0b\u5f0f\u6216\u700f\u89bd\u5668\u7b49\u7b49\uff09\uff0c\u5247\u662f\u5f7c\u6b64\u5354\u5546\u51fa\u4e00\u8d77\u7528\u7684\u7de8\u78bc\u65b9\u5f0f\u3002
\u76f8\u5c0d\u4f86\u8aaa\uff0c\u975e\u540c\u6b65\u8a0a\u606f\u50b3\u905e\u5247\u662f\u5927\u5bb6\u9810\u8a2d\u4f7f\u7528\u67d0\u7a2e\u7de8\u78bc\uff0c\u4f46\u662f\u50b3\u905e\u662f\u900f\u904e\u7b2c\u4e09\u65b9\u3002
"},{"location":"feedback/designing-data-intensive-applications/foundation-encode/#\u6d88\u606f\u4ee3\u7406","title":"\u6d88\u606f\u4ee3\u7406","text":"\u900f\u904e\u4e00\u500b\u4ee3\u7406\u4eba\uff0c\u5e6b\u6211\u628a\u8a0a\u606f\u50b3\u905e\u7d66\u5176\u4ed6\u6709\u8208\u8da3\u7684\u63a5\u6536\u8005\u3002\u6545\u800c\u6211\u53ea\u8981\u78ba\u4fdd\u8cc7\u6599\u9001\u7d66\u4ee3\u7406\u4eba\u5373\u53ef\uff0c\u5176\u4ed6\u63a5\u6536\u8005\u662f\u5426\u6709\u6536\u5230\u662f\u4ee3\u7406\u4eba\u8981\u505a\u7684\u4e8b\u60c5\u3002
Message Broker Pattern using C#
\u548c\u4ee3\u7406\u4eba\u9593\u7684\u6e9d\u901a\u5176\u7de8\u78bc\u65b9\u5f0f\u548c\u76f4\u63a5\u5169\u500b\u670d\u52d9\u6e9d\u901a\u5f88\u50cf\uff0c\u56e0\u70ba\u4ee3\u7406\u4eba\u4e0d\u6703\u5728\u4e4e\u4f60\u4f7f\u7528\u4ec0\u9ebc\u7de8\u78bc\u65b9\u5f0f\uff0c \u4ed6\u53ea\u662f\u9032\u884c\u8a0a\u606f\u7684\u50b3\u905e\u800c\u5df2\u3002\u4f46\u6709\u6642\u63a5\u6536\u8005\u6703\u628a\u8a0a\u606f\u6d88\u5316\u4e26\u91cd\u65b0\u50b3\u7d66\u4ee3\u7406\u4eba \uff08\u518d\u8b93\u5176\u4ed6\u6709\u8208\u8da3\u7684\u4eba\u63a5\u53d7\u5176\u8f38\u51fa\uff09\uff0c\u6b64\u6642\u5c31\u6709\u53ef\u80fd\u767c\u751f\u4e0a\u8ff0\u63d0\u5230\u7684\u8986\u84cb\u8cc7\u6599\u7684\u554f\u984c\u3002
\u9019\u6bb5\u5230\u4e32\u6d41\u8655\u7406\u6703\u66f4\u8a73\u7d30\u7684\u8a0e\u8ad6\uff0c\u9019\u908a\u50c5\u8aaa\u660e\u5176\u6703\u4f7f\u7528\u5230\u7de8\u78bc\u3002
"},{"location":"feedback/designing-data-intensive-applications/foundation-encode/#\u4e8b\u4ef6\u4e32\u6d41\u5f0f\u67b6\u69cb","title":"\u4e8b\u4ef6\u4e32\u6d41\u5f0f\u67b6\u69cb","text":"\u5176\u548c\u6d88\u606f\u4ee3\u7406\u5f88\u985e\u4f3c\uff0c\u4f46\u662f\u50c5\u63d0\u4f9b\u591a\u5c0d\u4e00\uff08pub/sub\uff09\u7684\u670d\u52d9\u4e26\u4e14\u8f03\u9069\u5408\u8655\u7406\u5927\u91cf\u8a0a\u606f\u3002
Making sense of stream processing
\u4e8b\u4ef6\u67b6\u69cb\u5c0d\u65bc\u8cc7\u6599\u50b3\u905e\u548c\u6574\u500b\u7d44\u7e54\u7684\u8cc7\u6599\u6574\u5408\u4f86\u8aaa\u975e\u5e38\u597d\u7528\uff0c\u6703\u5728\u7b2c\u5341\u4e00\u7ae0\u7684\u6642\u5019\u8a73\u7d30\u63d0\u3002
"},{"location":"feedback/designing-data-intensive-applications/foundation-encode/#\u4f01\u696d\u670d\u52d9\u532f\u6d41\u6392","title":"\u4f01\u696d\u670d\u52d9\u532f\u6d41\u6392","text":"\u4f01\u696d\u670d\u52d9\u532f\u6d41\u6392\u70ba\u8f03\u5927\u578b\u7684\u6d88\u606f\u4ee3\u7406\u8005\uff0c\u8655\u7406\u591a\u5c0d\u591a\u7684\u6e9d\u901a\uff0c\u6703\u8ca0\u8cac\u628a\u50b3\u905e\u4e2d\u7684\u8a0a\u606f\u683c\u5f0f\u7d71\u4e00\u3002 \u4f8b\u5982 XML \u8f49\u6210 JSON\u3002
WIKI
\u4f46\u662f\u6162\u6162\u5f0f\u5fae\uff0c\u56e0\u70ba\u6703\u8d8a\u641e\u8d8a\u8907\u96dc\u3002
"},{"location":"feedback/designing-data-intensive-applications/foundation-encode/#\u5206\u6563\u5f0f\u6f14\u54e1\u6a21\u578b","title":"\u5206\u6563\u5f0f\u6f14\u54e1\u6a21\u578b","text":"\u6f14\u54e1\u6a21\u578b\u662f\u4e00\u7a2e\u7a0b\u5f0f\u8a2d\u8a08\u7684\u54f2\u5b78\uff0c\u5176\u4e3b\u65e8\u662f\u7368\u7acb\u6bcf\u500b\u904b\u884c\u7684\u908f\u8f2f\u548c\u5176\u72c0\u614b\uff0c\u4e26\u628a\u9019\u7368\u7acb\u7684\u55ae\u4f4d\u7a31\u70ba\u6f14\u54e1\uff08Actor\uff09\u3002
\u4f8b\u5982\u73fe\u5728\u6709\u500b\u6f14\u54e1\u6703\u8ca0\u8cac\u8f38\u51fa\u300cHello World\u300d\uff0c\u6211\u5011\u50b3\u905e\u4e00\u500b\u8a0a\u606f\u7d66\u9019\u500b\u6f14\u54e1\uff0c \u544a\u8a34\u4ed6\u6211\u9019\u88e1\u6709\u500b\u8b8a\u6578 3\uff0c\u4f5c\u51fa\u4efb\u4f55\u4f60\u61c9\u8a72\u8981\u505a\u7684\u4e8b\u60c5\u5427\u3002 \u7136\u5f8c\u9019\u500b\u6f14\u54e1\u5c31\u6703\u958b\u59cb\u8f38\u51fa\u300cHello World\u300d\u4e09\u6b21\u3002
\u6f14\u54e1\u6a21\u578b\u7684\u50f9\u503c\u5728\u65bc\u5b83\u9810\u8a2d\u5404\u6f14\u54e1\u5f88\u53ef\u80fd\u767c\u751f\u932f\u8aa4\uff0c\u4e14\u5f7c\u6b64\u4e4b\u9593\u6c92\u6709\u5171\u7528\u4efb\u4f55\u8cc7\u6e90\u3002 \u6240\u4ee5\u5176\u61c9\u7528\u4e0d\u53ea\u5c40\u9650\u65bc\u7a0b\u5f0f\u78bc\u4e4b\u9593\u7684\u8a0a\u606f\u50b3\u905e\uff0c\u4f60\u4e00\u6a23\u53ef\u4ee5\u901a\u904e\u7db2\u969b\u7db2\u8def\u7684\u65b9\u5f0f\u50b3\u905e\uff0c \u5c31\u597d\u50cf API \u4e00\u6a23\uff08\u985e\u4f3c RPC \u60f3\u505a\u7684\u4e8b\uff09\u3002
\u4ee5 Akka \u70ba\u4f8b\u4ee5 Java \u7684\u6f14\u54e1\u6a21\u578b\u6846\u67b6 Akka \u70ba\u4f8b\uff1a
public class HelloWorld extends AbstractBehavior<HelloWorld.Command> {\n\ninterface Command {}\n\npublic enum SayHello implements Command {\n INSTANCE\n}\n\npublic static class ChangeMessage implements Command {\n public final String newMessage;\n\n public ChangeMessage(String newMessage) {\n this.newMessage = newMessage;\n }\n}\n\npublic static Behavior<Command> create() {\n return Behavior.setup(context -> new HelloWorld(context));\n}\n\nprivate String message = \"Hello World\";\n\nprivate HelloWorld(ActorContext<Command> context) {\n super(context);\n}\n\n@Override\npublic Receive<Command> createReceive() {\n return newReceiveBuilder()\n .onMessageEquals(SayHello.INSTANCE, this::onSayHello)\n .onMessage(ChangeMessage.class,this::onMessageChange)\n .build();\n}\n\nprivate Behavior<Command> onSayHello() {\n System.out.println(message);\n return this;\n}\n\nprivate Behavior<Command> onMessageChange(ChangeMessage command) {\n message = command.newMessage;\n return this;\n}\n}\n
\u4e0a\u8ff0\u6f14\u54e1\u5728\u6536\u5230 SayHello.INSTANCE
\u5c31\u6703\u57f7\u884c onSayHello
\uff0c\u6536\u5230 ChangeMessage
\u9019\u4e00\u985e\u5225\u7684\u8a0a\u606f\u6642\u6703\u57f7\u884c onMessageChange
\u3002
\u6e96\u5099\u597d\u6f14\u54e1\uff0c\u5c31\u53ef\u4ee5\u958b\u59cb\u57f7\u884c\u5287\u5834\u5de5\u4f5c\u56c9\uff1a
ActorSystem<HelloWorld.Command> mySystem = ActorSystem.create(HelloWorld.create(), \"MySystem\");\n\n// \u544a\u8a34\u6f14\u54e1 `HelloWorld.SayHello.INSTANCE` \u9019\u5247\u8a0a\u606f\nmySystem.tell(HelloWorld.SayHello.INSTANCE);\nmySystem.tell(HelloWorld.SayHello.INSTANCE);\n// \u544a\u8a34\u6f14\u54e1 `HelloWorld.ChangeMessage` \u9019\u500b\u578b\u5225\u7684\u8a0a\u606f\nmySystem.tell(new HelloWorld.ChangeMessage(\"Hello Actor World!!\"));\nmySystem.tell(HelloWorld.SayHello.INSTANCE);\nmySystem.tell(HelloWorld.SayHello.INSTANCE);\n// \u6700\u5f8c\u8f38\u51fa\uff1a\n// Hello World\n// Hello World\n// Hello Actor World!!\n// Hello Actor World!!\n
Referrer
"},{"location":"feedback/designing-data-intensive-applications/foundation-ft/","title":"\u8655\u7406\u7af6\u8cfd\u60c5\u6cc1","text":"\u5982\u4f55\u5728\u9ad8\u53ef\u7528\u6027\uff08HA\uff09\u548c\u9ad8\u4e00\u81f4\u6027\uff08Consistency\uff09\u4e4b\u9593\u505a\u53d6\u6368\u3002
HackMD \u5831\u544a\u6587\u672c
"},{"location":"feedback/designing-data-intensive-applications/foundation-ft/#\u7af6\u8cfd\u60c5\u6cc1","title":"\u7af6\u8cfd\u60c5\u6cc1","text":"\u6211\u5011\u5148\u4f86\u770b\u770b\u4ec0\u9ebc\u662f\u7af6\u8cfd\u60c5\u6cc1\uff0c\u518d\u8aaa\u660e\u89e3\u6c7a\u8fa6\u6cd5\u548c\u5176\u5e36\u4f86\u7684\u6b0a\u8861\u4e4b\u8a08\u3002
\u5047\u8a2d\u73fe\u5728\u6709\u500b\u61c9\u7528\u7a0b\u5f0f\uff1a\u4fe1\u7bb1\u7cfb\u7d71\u3002\u5982\u679c\u4f7f\u7528\u8005\u6709\u5c1a\u672a\u95b1\u8b80\u7684\u4fe1\u4ef6\u6642\uff0c\u670d\u52d9\u6703\u5728\u61c9\u7528\u7a0b\u5f0f\u7684\u5c0e\u822a\u9801\u9762\u653e\u63d0\u793a\u7d05\u9ede\uff0c\u8aaa\u660e\u9084\u6709\u5e7e\u5c01\u4fe1\u9084\u6c92\u770b\u3002\u6211\u5011\u53ef\u4ee5\u7528\u4ee5\u4e0b SQL \u641c\u5c0b\u8a9e\u6cd5\u9054\u6210\u9019\u4ef6\u4e8b\uff1a
\u53d6\u5f97\u672a\u8b80\u4fe1\u4ef6\u6578\u91cfSELECT COUNT(*)\nFROM emails\nWHERE recipient_id = 2 AND unread_flag = true\n
\u96a8\u8457\u61c9\u7528\u7a0b\u5f0f\u7684\u6210\u9577\uff0c\u4f60\u767c\u73fe\u9019\u6a23\u505a\u6703\u8b93 emails
\u9019\u500b\u8868\u683c\u7684\u5b58\u53d6\u6b21\u6578\u8b8a\u5f97\u592a\u591a\u4e86\uff0c\u65bc\u662f\u5e0c\u671b\u80fd\u628a\u672a\u8b80\u4fe1\u4ef6\u7684\u6578\u91cf\u984d\u5916\u5b58\u53d6\u5728\u5176\u4ed6\u8868\u683c\uff08\u53bb\u6b63\u898f\u5316\u7684\u4e00\u7a2e\u884c\u70ba\uff09\u3002
\u6bcf\u6b21\u65b0\u589e\u4fe1\u4ef6\u4e4b\u5f8c\uff0c\u61c9\u7528\u7a0b\u5f0f\u6703\u518d\u9001\u4e00\u500b\u8cc7\u6599\u5eab\u8acb\u6c42\uff0c\u628a mailboxes
\u8868\u683c\u4e2d\u6b04\u4f4d unread
\u7684\u6578\u5b57\u52a0\u4e00\u3002
-- INSERT INTO emails ..\n-- \u65b0\u589e\u5b8c\u4e4b\u5f8c\uff0c\u518d\u589e\u52a0\u672a\u8b80\u4fe1\u4ef6\u7684\u6578\u91cf\nUPDATE mailboxes\nSET unread = unread + 1\nWHERE recipient_id = 2;\n
\u9019\u6642\uff0c\u554f\u984c\u5c31\u767c\u751f\u4e86\u3002
\u4e0a\u8ff0\u4f8b\u5b50\u662f\u56e0\u70ba\u61c9\u7528\u7a0b\u5f0f\u4e00\u500b\u8acb\u6c42\u5728\u66f4\u65b0\u8cc7\u6599\uff0c\u53e6\u4e00\u500b\u8acb\u6c42\u537b\u540c\u6642\u8b80\u53d6\u8a72\u503c\uff0c\u5f9e\u800c\u89c0\u5bdf\u5230\u5c1a\u672a\u5b8c\u6210\u7684\u72c0\u614b\u3002
\u4ee5\u9019\u500b\u4f8b\u5b50\u800c\u8a00\uff0c\u5c1a\u672a\u5b8c\u6210\u7684\u72c0\u614b\u70ba\uff1aunread
\u9084\u6c92\u589e\u52a0\u3002
\u9019\u7a2e\u5169\u500b\u4eba\u540c\u6642\u8acb\u6c42\u5b58\u53d6\uff08write/read\uff09\u55ae\u4e00\uff08\u6216\u591a\u500b\uff09\u7269\u4ef6\uff0c\u6211\u5011\u5c31\u7a31\u5176\u70ba\u300c\u7af6\u8cfd\u72c0\u6cc1\u300d\u3002\u4e0d\u53ea\u662f\u591a\u500b\u7269\u4ef6\u7684\u5b58\u53d6\uff0c\u6211\u5011\u4f86\u770b\u770b\u91dd\u5c0d\u55ae\u4e00\u7269\u4ef6\u7684\u5b58\u53d6\u6642\u9020\u6210\u7684\u7af6\u8cfd\u72c0\u6cc1\uff1a
\u9664\u4e86\u52a0\u4e00\uff0c\u53ef\u80fd\u9084\u6709 compare-and-set \u9019\u985e\u578b\u7684\u8acb\u6c42\u3002\u4f8b\u5982\uff0c\u5982\u679c\u8a72\u503c\u6578\u91cf\u5927\u65bc\u4e94\uff0c\u6211\u5c31\u6b78\u96f6\uff0c\u4e0d\u7136\u5c31\u52a0\u4e00\u3002
\u91dd\u5c0d\u55ae\u4e00\u503c\u7684\u64cd\u4f5c\u7a31\u4f5c Single-Object Operations\uff1b\u53cd\u4e4b\uff0c\u591a\u500b\u503c\u7684\u64cd\u4f5c\u7a31\u70ba Multi-Object Operations\u3002
\u96d6\u7136\u9019\u88e1\u63d0\u7684\u7af6\u8cfd\u72c0\u6cc1\u4e0d\u7ba1\u662f\u55ae\u6216\u591a\u53f0\u8cc7\u6599\u5eab\uff0c\u90fd\u6703\u767c\u751f\uff0c\u4f46\u662f\u8655\u7406\u5206\u6563\u5f0f\uff08\u591a\u53f0\uff09\u7684\u7af6\u8cfd\u72c0\u6cc1\u6703\u5728\u4e4b\u5f8c\uff08\u5bb9\u932f\u7684\u5206\u6563\u5f0f\u670d\u52d9\uff09\u624d\u8b1b\u3002
\u6211\u5011\u9700\u8981\u8b93\u6bcf\u500b\u8acb\u6c42\u64c1\u6709\u5169\u7a2e\u7279\u6027\uff0c\u4ee5\u89e3\u6c7a\u7af6\u8cfd\u72c0\u6cc1\uff1a
\u907f\u514d\u5225\u7684\u8acb\u6c42\u770b\u5f97\u5230\u4f60\u672a\u5b8c\u6210\u7684\u72c0\u614b\uff0c\u4ee5\u90f5\u4ef6\u70ba\u4f8b\uff0c\u5c31\u662f \u4f7f\u7528\u8005 2 \u8981\u9ebb\u770b\u4e0d\u5230\u4ed6\u6709\u65b0\u589e\u90f5\u4ef6\uff0c\u8981\u9ebb\u6709\u65b0\u7684\u90f5\u4ef6\u4e14\u6578\u91cf\u986f\u793a\u4e5f\u6b63\u78ba\uff0c\u4e0d\u6703\u986f\u793a\u5c1a\u672a\u5b8c\u6210\u7684\u72c0\u614b\u3002\u8981\u9054\u6210\u9694\u96e2\u6027\u53ef\u4ee5\u6709\u5e7e\u7a2e\u505a\u6cd5\uff1a
\u8a73\u7d30\u4ecb\u7d39\u6703\u5728\u4e0b\u9762\u8b1b\u89e3\uff01
"},{"location":"feedback/designing-data-intensive-applications/foundation-ft/#\u5bb9\u932f\u6027","title":"\u5bb9\u932f\u6027","text":"\u7af6\u8cfd\u72c0\u6cc1\u6703\u5f62\u6210\u932f\u8aa4\u7684\u72c0\u614b\uff0c\u7576\u767c\u751f\u932f\u8aa4\u6642\uff0c\u7cfb\u7d71\u8981\u80fd\u6709\u6a5f\u5236\u8655\u7406\u9019\u4e9b\u554f\u984c\uff0c\u800c\u8655\u7406\u932f\u8aa4\u7684\u80fd\u529b\u6211\u5011\u7a31\u5176\u70ba\u5bb9\u932f\u6027\uff08Fault tolerance\uff09\u3002
\u4ee5\u4e0a\u5716\u70ba\u4f8b\uff0c\u7576\u932f\u8aa4\u767c\u751f\u6642\uff0c\u6839\u64da\u61c9\u7528\u7a0b\u5f0f\u7684\u8003\u91cf\u53ef\u80fd\u6709\u4e0d\u540c\u4f5c\u6cd5\uff1a
\u91cd\u8907\u505a\u4e8b
\u7db2\u8def\u4e2d\u65b7\u53ef\u80fd\u767c\u751f\u5728\u4efb\u4f55\u4e00\u6bb5\uff0c\u4e0d\u7ba1\u662f\u9001\u904e\u53bb\u6642\uff0c\u9084\u662f\u56de\u50b3\u56de\u4f86\u6642\u3002\u5982\u679c\u662f\u56de\u50b3\u56de\u4f86\uff0c\u5c31\u4ee3\u8868\u5c0d\u65bc\u8cc7\u6599\u5eab\u4f86\u8aaa\uff0c\u8cc7\u6599\u5df2\u7d93\u6210\u529f\u6dfb\u52a0\u9032\u53bb\u3002\u53ea\u662f\u5728\u901a\u77e5\u61c9\u7528\u7a0b\u5f0f\u4ed6\u6210\u529f\u6642\uff0c\u767c\u751f\u932f\u8aa4\u3002\u9019\u6642\u61c9\u7528\u7a0b\u5f0f\u5982\u679c\u518d\u91cd\u4f86\u4e00\u6b21\uff0c\u5c31\u6703\u8b93\u8cc7\u6599\u88ab\u91cd\u8907\u6dfb\u52a0\u3002
\u6211\u5011\u53ef\u4ee5\u65bc\u8acb\u6c42\u4e2d\u6dfb\u52a0 ID \u4f86\u907f\u514d\u9019\u4ef6\u4e8b\u767c\u751f\uff08\u8cc7\u6599\u5eab\u770b\u5230\u91cd\u8907\u7684 ID \u5c31\u4e0d\u505a\u4e8b\uff09\uff0c\u4e0d\u904e\u66f4\u7d30\u7684\u8a0e\u8ad6\u65bc\u6700\u5f8c\u4e00\u7ae0\u300c\u4f5c\u8005\u671f\u8a31\u300d\u4e2d\u8aaa\u660e\u3002
"},{"location":"feedback/designing-data-intensive-applications/foundation-ft/#\u539f\u5b50\u6027","title":"\u539f\u5b50\u6027","text":"\u4e0a\u9762\u6211\u5011\u63d0\u7684\u5176\u4e2d\u4e00\u7a2e\u505a\u6cd5\uff1a\u91cd\u4f86\u932f\u8aa4\u7684\u8acb\u6c42\uff0c\u5982\u679c\u8acb\u6c42\u7684\u72c0\u614b\u662f\u76f8\u4f9d\u7684\uff0c\u91cd\u4f86\u7684\u6a5f\u5236\u53ef\u80fd\u662f\u975e\u5e38\u8907\u96dc\u7684\uff0c\u9019\u6642\u8b93\u932f\u8aa4\u7684\u8acb\u6c42\u91cd\u4f86\u5f88\u53ef\u80fd\u6703\u5f62\u6210\u932f\u8aa4\u7684\u72c0\u614b\u3002\u800c\u4e14\u9019\u7a2e\u72c0\u6cc1\u6703\u518d\u56e0\u70ba\u4e26\u884c\uff08concurrency\uff09\u548c\u707d\u96e3\u5fa9\u539f\uff08\u4f8b\u5982\u6211\u5011\u524d\u9762\u63d0\u7684 WAL\uff09\u800c\u8b8a\u5f97\u66f4\u70ba\u8907\u96dc\u3002
\u901a\u5e38\u8cc7\u6599\u5eab\u7684\u8a2d\u8a08\u8005\u70ba\u4e86\u907f\u514d\u53bb\u91cd\u4f86\u90e8\u5206\u932f\u8aa4\u7684\u8acb\u6c42\u6642\u6240\u9020\u6210\u7684\u932f\u8aa4\u72c0\u614b\uff0c\u6703\u4f7f\u7528\u539f\u5b50\u6027\uff08atomic\uff09\u3002\u9019\u500b\u8acb\u6c42\u505a\u5230\u4e00\u534a\u6642\uff0c\u5982\u679c\u767c\u751f\u72c0\u6cc1\uff0c\u5c31\u5b8c\u5168\u6368\u68c4\u4e4b\u524d\u505a\u7684\u6240\u6709\u4e8b\u3002
\u6211\u5011\u53ef\u4ee5\u900f\u904e\u628a\u57f7\u884c\u7684\u7d50\u679c\u5b58\u5728 /temp
\u7684\u4f4d\u7f6e\u4e0b\uff0c\u7576\u8acb\u6c42\u5b8c\u6210\u6642\uff0c\u518d\u628a /temp
\u4e0b\u7684\u8cc7\u6599\u6574\u5408\u9032\u8cc7\u6599\u5eab\u4e2d\u3002 \u5982\u679c\u904e\u7a0b\u4e2d\u6709\u932f\uff0c\u5247\u5b8c\u5168\u6e05\u9664 /temp
\u4e0b\u7684\u8cc7\u6599\uff0c\u800c\u4e0d\u6703\u628a\u8cc7\u6599\u5eab\u5f04\u9ad2\u3002
\u4e0d\u662f\u6bcf\u500b\u8cc7\u6599\u5eab\u90fd\u6703\u505a\u91cd\u4f86\u7684\u6a5f\u5236\uff0c \u6709\u4e9b\u8cc7\u6599\u5eab\u70ba\u4e86\u6eff\u8db3\u9ad8\u53ef\u7528\u6027\uff08High Availability\uff09\u7b49\u76ee\u7684\uff0c \u6703\u76e1\u53ef\u80fd\u505a\u81ea\u5df1\u80fd\u505a\u7684\u4e8b\uff08best effort\uff09\u3002
\u4f8b\u5982\u6e05\u695a\u544a\u77e5\u61c9\u7528\u7a0b\u5f0f\u767c\u751f\u4e86\u4ec0\u9ebc\u4e8b\uff0c\u4f8b\u5982\u4e0a\u500b\u4f8b\u5b50\u4e2d\uff0c\u7b2c\u4e8c\u500b\u52d5\u4f5c\uff08\u589e\u52a0\u90f5\u4ef6\u672a\u8b80\u6578\u91cf\uff09\u82e5\u6c92\u5b8c\u6210\uff0c \u5247\u901a\u77e5\u61c9\u7528\u7a0b\u5f0f\u5176\u672a\u5b8c\u6210\uff0c\u4f46\u662f\u7b2c\u4e00\u500b\u52d5\u4f5c\u5df2\u7d93\u6e96\u78ba\u5b8c\u6210\u4e86\u3002\u9019\u6642\u61c9\u7528\u7a0b\u5f0f\u5c31\u8981\u81ea\u5df1\u518d\u91cd\u52a0\u4e00\u6b21\u672a\u8b80\u6578\u91cf\uff0c \u6216\u8005\u5728\u8a2d\u8a08\u61c9\u7528\u7a0b\u5f0f\u6642\u61c9\u8003\u91cf\u9019\u500b\u554f\u984c\u800c\u6e1b\u5c11\u9019\u985e\u7684\u53bb\u6b63\u898f\u5316\u3002
"},{"location":"feedback/designing-data-intensive-applications/foundation-ft/#\u4ea4\u6613\u6a5f\u5236","title":"\u4ea4\u6613\u6a5f\u5236","text":"\u6211\u5011\u4f86\u628a\u4e0a\u9762\u7684\u7279\u6027\u6574\u5408\u8d77\u4f86\u3002\u5982\u679c\u8cc7\u6599\u5eab\u5728\u8655\u7406\u8acb\u6c42\u7684\u6642\u5019\u53ef\u4ee5\u6eff\u8db3\u4e0a\u8ff0\u7279\u6027\u6642\uff0c\u6211\u5011\u7a31\u9019\u4e00\u985e\u8acb\u6c42\u70ba\u4ea4\u6613\uff08transaction\uff09\u3002
\u6839\u64da\u4e0a\u8ff0\u7279\u6027\u88ab\u6eff\u8db3\u7684\u7b49\u7d1a\uff08\u4f8b\u5982\u6700\u9ad8\u7684\u9694\u96e2\u6027\uff1a\u7dda\u6027\u57f7\u884c\uff09\uff0c\u6211\u5011\u6703\u7a31\u8a72\u8cc7\u6599\u5eab\u53ef\u4ee5\u6eff\u8db3\u7279\u5b9a\u7b49\u7d1a\u7684\u8cc7\u6599\u4e00\u81f4\u6027\uff08consistence\uff09\u3002
\u9694\u96e2\u6027\u548c\u539f\u5b50\u6027
\u6709\u4e9b\u4eba\u53ef\u80fd\u6703\u628a\u9694\u96e2\u6027\u548c\u539f\u5b50\u6027\u7576\u6210\u4e00\u4ef6\u4e8b\uff0c\u4f46\u662f\u5be6\u969b\u4ee3\u8868\u7684\u610f\u7fa9\u662f\u4e0d\u540c\u7684\u3002
\u9694\u96e2\u6027\uff1a\u907f\u514d\u5176\u4ed6\u8acb\u6c42\uff08\u751a\u81f3\u7dda\u7a0b\uff09\u770b\u5230\u90e8\u5206\u7684\u7d50\u679c\uff0c\u4ee5\u4e0a\u8ff0\u90f5\u4ef6\u70ba\u4f8b\u5c31\u662f\u672a\u8b80\u90f5\u4ef6\u6578\u91cf\u9084\u6c92\u589e\u52a0\u5c31\u53ef\u4ee5\u8b80\u53d6\u672a\u8b80\u90f5\u4ef6\u3002 \u539f\u5b50\u6027\uff1a\u70ba\u4e86\u9054\u6210\u5bb9\u932f\u800c\u628a\u6240\u6709\u8655\u7406\u5305\u88dd\u6210\u55ae\u4e00\u4e8b\u4ef6\u7684\u8a2d\u8a08\u7406\u5ff5\uff08philosophy\uff09\uff0c\u5176\u4e2d\u4e26\u6c92\u6709\u4e26\u884c\uff08concurrency\uff09\u7684\u6982\u5ff5\u3002
\u539f\u5b50\u6027\u662f\u5f9e atomic \u7ffb\u8b6f\u800c\u4f86\uff0c\u5728\u6b64\u4e5f\u8a31\u7528 abortability \u66f4\u70ba\u6070\u7576\u3002
\u540d\u8a5e\u610f\u7fa9
\u5be6\u969b\u4e0a\uff0c\u5404\u500b\u540d\u8a5e\u7684\u610f\u7fa9\u5728\u6e9d\u901a\u904e\u7a0b\u4e2d\uff0c\u90fd\u5df2\u88ab\u6cdb\u5316\u3002\u5728\u672c\u6587\u7ae0\u4e2d\u91dd\u5c0d\u540d\u500b\u8a5e\u505a\u7684\u89e3\u91cb\u4e26\u4e0d\u9069\u7528\u6240\u6709\u7684\u7522\u54c1\u6587\u4ef6\u3001\u90e8\u843d\u5ba2\u6587\u7ae0\u3001\u66f8\u672c\u3002
\u4f60\u5fc5\u9808\u901a\u904e\u524d\u5f8c\u6587\u5c0d\u7167\u4f86\u627e\u51fa\u5176\u4ee3\u8868\u7684\u610f\u7fa9\uff0c\u4e0d\u5fc5\u57f7\u8457\u65bc\u54ea\u500b\u7528\u6cd5\u624d\u662f\u6700\u70ba\u7cbe\u6e96\u7684\u3002
"},{"location":"feedback/designing-data-intensive-applications/foundation-ft/#\u61c9\u7528","title":"\u61c9\u7528","text":"\u4e0d\u662f\u6bcf\u500b\u61c9\u7528\u7a0b\u5f0f\u90fd\u9700\u8981\u4f7f\u7528\u4ea4\u6613\u6a5f\u5236\uff0c\u96d6\u7136\u4ed6\u80fd\u63d0\u5347\u5bb9\u932f\u6027\u4e26\u9054\u6210\u8cc7\u6599\u7684\u4e00\u81f4\u6027\uff0c\u537b\u6703\u964d\u4f4e\u6548\u80fd\u548c\u53ef\u7528\u6027\u3002
\u6839\u64da\u72c0\u6cc1\u6211\u5011\u53ef\u80fd\u53ef\u4ee5\u900f\u904e\u4ea4\u6613\u4ee5\u5916\u7684\u65b9\u5f0f\u4f86\u9054\u6210\u4e00\u5b9a\u7b49\u7d1a\u7684\u8cc7\u6599\u4e00\u81f4\u6027\u3002
1975 \u5e74\uff0cIBM \u7684 System R \uff08\u7b2c\u4e00\u500b SQL \u8cc7\u6599\u5eab\uff09 \u9996\u958b\u5148\u6cb3\u7684\u4f7f\u7528\u4ea4\u6613\u7684\u6a5f\u5236\u3002\u9019\u4e4b\u5f8c\uff0c\u8a31\u591a\u7684\u95dc\u9023\u5f0f\u8cc7\u6599\u5eab\uff08SQL DB\uff09\u90fd\u4e00\u5b9a\u7a0b\u5ea6\u4e0a\u7684\u652f\u63f4\u76f8\u4f3c\u7684\u7406\u5ff5\u3002
\u4f46\u662f\u5230\u4e86 2010 \u5e74\u5de6\u53f3\uff0cNoSQL \u7684\u7406\u5ff5\u958b\u59cb\u5d1b\u8d77\u3002 \u4ed6\u5011\u63d0\u5021\u7684\u4e0d\u53ea\u662f\u4e0d\u540c\u7684\u8cc7\u6599\u67b6\u69cb\uff0c \u4e5f\u653e\u68c4\u4f7f\u7528\u591a\u503c\uff08multi-object\uff09\u7684\u4ea4\u6613 \uff08\u55ae\u4e00\u503c\u7684\u4ea4\u6613\u5f88\u8f15\u6613\u5c31\u80fd\u9054\u6210\uff0c\u7136\u800c\u591a\u503c\u7684\u4ea4\u6613\u537b\u9700\u8981\u4ed8\u51fa\u9f90\u5927\u7684\u4ee3\u50f9\uff09\uff0c \u4e5f\u7531\u6b64\uff0c\u9054\u6210\u9ad8\u64f4\u589e\u6027\u3001\u9ad8\u53ef\u7528\u6027\u548c\u9ad8\u6548\u80fd\u7684\u8cc7\u6599\u5eab\u3002
ORM \u5c0d\u4ea4\u6613\u7684\u770b\u6cd5
\u5118\u7ba1\u4ea4\u6613\u7684\u50f9\u503c\u5c31\u5728\u65bc\u900f\u904e\u539f\u5b50\u6027\u7576\u4ea4\u6613\u5931\u6557\u6642\uff0c\u4f60\u53ef\u4ee5\u653e\u5fc3\u5730\u91cd\u8dd1\u4e00\u6b21\u4ea4\u6613\uff0cORM\uff08Object-relational mapping\uff09 \u7684\u6846\u67b6\u5728\u8655\u7406\u4ea4\u6613\u6642\uff0c\u901a\u5e38\u4e0d\u6703\u9810\u8a2d retry \u932f\u8aa4\u7684\u4ea4\u6613\u3002
\u56e0\u70ba\u4e26\u4e0d\u662f\u6240\u6709\u5834\u666f\u7684\u90fd\u9069\u5408\u91cd\u505a\u4ea4\u6613\uff1a
\u4e00\u81f4\u6027\u7b49\u7d1a\u5f9e\u4f4e\u5230\u9ad8\uff0c\u5176\u72a7\u7272\u7684\u662f\u6548\u80fd\u3001\u53ef\u7528\u6027\u3001\u64f4\u589e\u6027\u3002
\u70ba\u4e86\u6c7a\u5b9a\u61c9\u7528\u7a0b\u5f0f\u53ef\u4ee5\u9054\u6210\u7684\u4e00\u81f4\u6027\u7b49\u7d1a\uff0c\u6211\u5011\u5c31\u9700\u8981\u4e86\u89e3\u4e0d\u540c\u7b49\u7d1a\u7684\u72c0\u6cc1\u548c\u89e3\u6c7a\u8fa6\u6cd5\u3002\u9019\u88e1\u89e3\u91cb\u7684\u65b9\u5f0f\u662f\u4f7f\u7528\u8f03\u70ba\u751f\u6d3b\u5316\u3001\u7bc4\u4f8b\u6027\u7684\u8aaa\u660e\uff0c\u82e5\u9700\u8981\u66b8\u89e3\u7cbe\u6e96\u7684\u5b9a\u7fa9\uff0c\u53ef\u4ee5\u67e5\u770b\u8ad6\u6587123\u3002
\u6700\u7d42\u4e00\u81f4\u6027\uff08eventual consistence\uff09\u4ee3\u8868\u5728\u78ba\u5b9a\u4f46\u4e0d\u53ef\u9810\u671f\u7684\u672a\u4f86\uff08\u4e0d\u7ba1\u662f\u4eba\u70ba\u4ecb\u5165\u9084\u662f\u7db2\u8def\u4e2d\u65b7\u7684\u5fa9\u539f\uff09\u88e1\uff0c\u8cc7\u6599\u6703\u88ab\u9054\u6210\u4e00\u81f4\u3002 \u9019\u662f\u6700\u5f31\u7684\u4e00\u81f4\u6027\uff0c\u5728\u8003\u616e\u8cc7\u6599\u7684\u4e00\u81f4\u6027\u6642\uff0c\u901a\u5e38\u90fd\u9810\u8a2d\u8cc7\u6599\u5eab\u6709\u9019\u4e00\u985e\u578b\u7684\u4fdd\u8b49\u3002
"},{"location":"feedback/designing-data-intensive-applications/foundation-ft/#\u4f7f\u7528\u63d0\u4ea4\u5f8c\u7684\u8cc7\u6599","title":"\u4f7f\u7528\u63d0\u4ea4\u5f8c\u7684\u8cc7\u6599","text":"\u6240\u8b02\u7684\u300c\u4f7f\u7528\u300d\u6709\u5169\u7a2e\uff1a\u8b80\u53d6\u548c\u5beb\u5165\u3002\u4ee5\u4e0a\u8ff0\u90f5\u4ef6\u70ba\u4f8b\uff0c\u5c31\u662f\u4e00\u7a2e\u300c\u8b80\u672a\u5b8c\u6210\u7684\u8cc7\u6599\u300d\uff08dirty read\uff09\uff0c\u800c\u4e0b\u8ff0\u4f8b\u5b50\u4ee3\u8868\u300c\u8986\u5beb\u672a\u5b8c\u6210\u7684\u8cc7\u6599\u300d\uff08dirty write\uff09\uff1a
\u56e0\u70ba Alice \u548c Bob \u7684\u8cc7\u6599\u5f7c\u6b64\u88ab\u8986\u5beb\u4e86\uff0c\u6240\u4ee5\u5c0e\u81f4\u6700\u7d42\u7684\u72c0\u614b\u7834\u788e\u5316\uff1a\u8cfc\u8cb7\u8005\u662f Bob\uff0c\u767c\u7968\u4e0a\u7684\u6536\u4ef6\u8005\u537b\u662f Alice\u3002
\u6211\u5011\u7a31\u9019\u7a2e\u72c0\u6cc1\u4ee3\u8868\u8cc7\u6599\u5eab\u4e26\u6c92\u6709\u300c\u4f7f\u7528\u63d0\u4ea4\u5f8c\u7684\u8cc7\u6599\u300d\uff08read committed\uff09\u3002\u8981\u9054\u6210\u9019\u7b49\u7d1a\u7684\u4e00\u81f4\u6027\u89e3\u6c7a\u8fa6\u6cd5\u901a\u5e38\u5c31\u662f\u52a0\u9396\uff0c\u5e7e\u4e4e\u6bcf\u500b\u8cc7\u6599\u5eab\u90fd\u6709\u5be6\u4f5c\u672c\u7b49\u7d1a\u3002
\u8cc7\u6599\u907a\u5931\u4e26\u4e0d\u4ee3\u8868\u8907\u5beb\u672a\u5b8c\u6210\u7684\u8cc7\u6599
\u5982\u679c Alice \u548c Bob \u5148\u5f8c\u5b8c\u6210\u8acb\u6c42\uff0c\u4e26\u4e14\u5f7c\u6b64\u50c5\u6709\u4e00\u65b9\u88ab\u8986\u5beb\uff0c\u9019\u6642\u4e26\u4e0d\u9055\u53cd_\u4f7f\u7528\u63d0\u4ea4\u5f8c\u7684\u8cc7\u6599_\u3002\u9019\u53ea\u662f\u4ee3\u8868\u8cc7\u6599\u88ab\u8986\u5beb\u800c\u5df2\uff0c\u8655\u7406\u8cc7\u6599\u8907\u5beb\u7684\u8fa6\u6cd5\u6703\u5728\u8cc7\u6599\u5eab\u8907\u88fd\u4e2d\u63d0\u5230\u3002
"},{"location":"feedback/designing-data-intensive-applications/foundation-ft/#\u8986\u5beb\u672a\u5b8c\u6210\u7684\u8cc7\u6599","title":"\u8986\u5beb\u672a\u5b8c\u6210\u7684\u8cc7\u6599","text":"\u7576\u5beb\u5165\u591a\u7b46\u8cc7\u6599\u6642\uff0c\u9396\u4f4f\u5beb\u904e\u7684\u7269\u4ef6\u3002 \u4ee5\u4e0a\u8ff0\u70ba\u4f8b\uff0c\u7576 Alice \u5c1a\u672a\u5b8c\u6210\u4ea4\u6613\uff08un-commit\uff09\u524d\uff0clistings id=1234
\u7684\u7269\u4ef6\u6703\u88ab\u9396\u4f4f\uff0c\u5373\u4f7f Bob \u60f3\u4fee\u6539\uff0c\u4e5f\u9700\u8981\u7b49 Alice \u5b8c\u6210\u4ea4\u6613\u3002
\u5beb\u5165\u524d\u5148\u6aa2\u67e5
\u82e5\u4f60\u4e0d\u5e0c\u671b Bob \u8986\u5beb\u6389 Alice \u7684\u8cc7\u6599\uff0c\u4f60\u53ef\u4ee5\u5728\u66f4\u65b0\u7684\u641c\u5c0b\u8a9e\u6cd5\u4e2d\u52a0\u4e0a\u6aa2\u67e5\uff0c\u8b93\u9019\u500b\u641c\u5c0b\u8b8a\u6210\u300c\u5148\u6aa2\u67e5\u518d\u5beb\u5165\u300d\uff08compare-and-set\uff09\u3002
sql \"\u5148\u6aa2\u67e5\u6c92\u6709\u8cb7\u5bb6\u518d\u66f4\u65b0\" UPDATE listings SET buyer = 'Bob' WHERE id = 1234 AND buyer = NULL
\u82e5\u5176\u4ed6\u8acb\u6c42\u6b63\u5728\u5beb\u5165\u8cc7\u6599\u6642\uff0c\u6211\u5011\u907f\u514d\u5176\u4ed6\u8acb\u6c42\u4e26\u884c\u8b80\u53d6\u6642\uff0c\u6703\u5927\u91cf\u964d\u4f4e\u6548\u80fd\uff08OLTP \u7684\u7279\u6027\u662f\u5927\u91cf\u8b80\u53d6\u5c11\u91cf\u7570\u52d5\uff09\u3002\u6240\u4ee5\u901a\u5e38\u5728\u5be6\u4f5c\u9396\u7684\u6642\u5019\uff0c\u50c5\u6703\u907f\u514d\u540c\u6642\u5beb\u5165\u3002
\u4f46\u662f\u9019\u6a23\u5c31\u6c92\u8fa6\u6cd5\u9054\u6210\u6211\u5011\u8981\u6c42\u7684\u4e00\u81f4\u6027\u7b49\u7d1a\uff1a\u53ea\u8b80\u5b8c\u6210\u7684\u8cc7\u6599\uff08no dirty read\uff09\u3002\u6211\u5011\u53ef\u4ee5\u8b93\u6b63\u5728\u5beb\u5165\u7684\u8cc7\u6599\u653e\u5728\u8a18\u61b6\u9ad4\u4e2d\uff0c\u9019\u6642\u5176\u4ed6\u8acb\u6c42\u5728\u8b80\u53d6\u6642\uff0c\u5c31\u662f\u8b80\u78c1\u789f\u88e1\u7684\u8cc7\u6599\uff0c\u9019\u6a23\u5c31\u53ef\u4ee5\u907f\u514d\u5176\u4ed6\u8acb\u6c42\u8b80\u53d6\u5230\u9084\u672a\u5b8c\u6210\u7684\u8cc7\u6599\u3002\u7576\u6b63\u5728\u5beb\u5165\u7684\u8cc7\u6599\u5b8c\u6210\u6642\uff0c\u518d\u628a\u505a\u597d\u7684\u8cc7\u6599\u653e\u56de\u78c1\u789f\u4e2d\u3002
\u5df2\u77e5\u7684\u8cc7\u6599\u5eab\u4e2d\uff0c\u50c5\u6709 Microsoft SQL Server \u7576\u8a2d\u5b9a read_committed_snapshot=off
\u6642\u6703\u8b93\u9396\u4f4f\u7684\u7269\u4ef6\u7121\u6cd5\u88ab\u8b80\u53d6\u3002
\u4f7f\u7528\u63d0\u4ea4\u5f8c\u7684\u8cc7\u6599\uff0c\u597d\u50cf\u5df2\u7d93\u5f88\u7b26\u5408\u6211\u5011\u524d\u9762\u5c0d\u65bc\u9694\u96e2\u6027\u7684\u610f\u7fa9\uff1a\u4ea4\u6613\u9593\u4e0d\u6703\u4e92\u76f8\u5f71\u97ff\u3002\u524d\u9762\u63d0\u5230\u7684\u4f8b\u5b50\uff0c\u4e5f\u90fd\u53ef\u4ee5\u9806\u5229\u89e3\u6c7a\uff0c\u4f7f\u7528\u8005\u4e0d\u6703\u518d\u770b\u5230\u6709\u672a\u8b80\u90f5\u4ef6\uff0c\u537b\u6c92\u6709\u589e\u52a0\u672a\u8b80\u90f5\u4ef6\u7684\u6578\u91cf\uff08\u4e0d\u8b80\u672a\u5b8c\u6210\u7684\u8cc7\u6599\uff09\u3002\u7136\u800c\uff1a
\u6709\u500b\u8acb\u6c42\u540c\u6642\u8b80\u53d6\u5230\u4ea4\u6613\u958b\u59cb\u524d\u548c\u7d50\u675f\u5f8c\u7684\u72c0\u614b\uff0c\u9019\u6642\u5c31\u6703\u986f\u793a\u51fa\u72c0\u614b\u7684\u4e0d\u4e00\u81f4\u6027\u3002\u807d\u8d77\u4f86\u597d\u50cf\u9084\u597d\uff0c\u6211\u518d\u91cd\u65b0\u6574\u7406\u5c31\u53ef\u4ee5\u628a\u72c0\u614b\u6062\u5fa9\u539f\u72c0\uff0c\u4f46\u662f\u4f60\u9084\u9700\u8981\u8003\u616e\u4ee5\u4e0b\u72c0\u6cc1\uff1a
\u524d\u9762\u7684\u5716\u63d0\u5230\u7684\u8b80\u53d6\u504f\u659c\uff08read skew\uff09\u5c31\u4ee3\u8868\u9019\u500b\u8b80\u53d6\u52d5\u4f5c\u56e0\u70ba\u4efb\u4f55\u539f\u56e0\uff08\u7db2\u8def\u6392\u968a\u3001\u904b\u884c\u66ab\u505c\u7b49\u7b49\uff09\u88ab\u5ef6\u9072\u4e86\uff0c\u5c0e\u81f4\u5176\u8b80\u53d6\u7684\u8cc7\u6599\u662f\u50be\u659c\u7684\uff08\u72c0\u614b\u4e0d\u4e00\u81f4\u7684\uff09\u3002
\u6211\u5011\u7a31\u9019\u7a2e\u72c0\u6cc1\u6c92\u8fa6\u6cd5\u9054\u6210\u300c\u5feb\u7167\u9694\u96e2\u300d\u4e00\u81f4\u6027\u3002\u8981\u9054\u6210\u9019\u500b\u7b49\u7d1a\u7684\u4e00\u81f4\u6027\uff0c\u901a\u5e38\u6703\u4f7f\u7528\u591a\u7248\u672c\u4e26\u884c\u63a7\u5236\uff08multi-version concurrency control\uff0cMVCC\uff09\uff0c\u9019\u4e5f\u662f\u5f88\u591a\u8cc7\u6599\u5eab\u6703\u9054\u6210\u7684\u7b49\u7d1a\u3002
\u5c08\u6709\u540d\u8a5e
\u6709\u4e9b\u8cc7\u6599\u5eab\u6703\u7a31\u5feb\u7167\u9694\u96e2\u70ba\u53ef\u91cd\u8907\u8b80\u53d6\uff08repeatable read\uff09\u6216\u5e8f\u5217\u5316\uff08serializability\uff09\uff0c\u9019\u662f\u56e0\u70ba\u7576\u521d\u4ee5 System R \u70ba\u57fa\u790e\u5efa\u7acb\u7684 SQL \u5354\u5b9a\u5c31\u662f\u4f7f\u7528\u53ef\u91cd\u8907\u8b80\u53d6\u9019\u500b\u540d\u8a5e\uff0c\u8cc7\u6599\u5eab\u70ba\u4e86\u5ba3\u7a31\u5176\u6eff\u8db3 SQL \u5354\u5b9a\uff0c\u5c31\u6703\u628a\u9019\u500b\u540d\u8a5e\u5beb\u9032\u4ed6\u5011\u7684\u6587\u4ef6\u4e2d\u3002
\u96d6\u7136\u6709\u8ad6\u658745\u7d66\u4e88\u9019\u4e00\u985e\u7684\u4e00\u81f4\u6027\u4e00\u500b\u5b9a\u7fa9\uff0c\u4f46\u662f\u5927\u90e8\u5206\u8cc7\u6599\u5eab\u5728\u5ba3\u7a31\u5176\u64c1\u6709\u53ef\u91cd\u8907\u8b80\u53d6\u7684\u4e00\u81f4\u6027\u6642\u4e26\u672a\u6eff\u8db3\u9019\u500b\u5b9a\u7fa9\u3002\u66f4\u7cdf\u7684\u662f IBM DB2 \u751a\u81f3\u628a\u5e8f\u5217\u5316\u7576\u6210\u5feb\u7167\u9694\u96e2
\u7c21\u55ae\u4f86\u8aaa\uff0c\u591a\u7248\u672c\u4e26\u884c\u63a7\u5236\u5c31\u662f\u66ff\u8cc7\u6599\u5eab\u7684\u72c0\u614b\u5efa\u7acb\u591a\u500b\u7248\u672c\uff0c\u6bcf\u500b\u4ea4\u6613\u6839\u64da\u7576\u4e0b\u64c1\u6709\u7684\u7248\u672c\u865f\uff0c\u9650\u5236\u57f7\u884c\u54ea\u4e9b\u884c\u70ba\uff0c\u9019\u500b\u7248\u672c\u865f\u6211\u5011\u7a31\u5176\u70ba\u4ea4\u6613\u7de8\u865f\uff08transaction ID\uff0ctxid
\uff09\u3002
\u524d\u9762\u6211\u5011\u63d0\u5230\u7684_\u4f7f\u7528\u63d0\u4ea4\u5f8c\u7684\u8cc7\u6599_\u5c31\u662f\u8b93\u8cc7\u6599\u5eab\u64c1\u6709\u5169\u500b\u7248\u672c\uff0c\u4e00\u500b\u662f\u4ea4\u6613\u6b63\u5728\u4fee\u6539\u6642\u7684\u72c0\u614b\uff08un-committed\uff09\u7248\u672c\uff0c\u4e00\u500b\u662f\u4ea4\u6613\u5b8c\u6210\uff08committed\uff09\u5f8c\u7684\u7248\u672c\u3002 \u6240\u6709\u50c5\u4f5c\u8b80\u53d6\u7684\u4ea4\u6613\u53ea\u6703\u4f7f\u7528\u5230\u4ea4\u6613\u5b8c\u6210\u5f8c\u7684\u7248\u672c\uff0c\u800c\u57f7\u884c\u5beb\u5165\u7684\u4ea4\u6613\u5c31\u6703\u81ea\u5df1\u64c1\u6709\u6b63\u5728\u4fee\u6539\u6642\u7684\u7248\u672c\uff08\u901a\u5e38\u5b58\u653e\u65bc\u8a18\u61b6\u9ad4\uff09\u3002
\u7576\u4ea4\u6613\u5728\u505a\u8b80\u53d6\u6642\uff0c\u6703\u6839\u64da\u4e00\u500b\u4e00\u76f4\u589e\u52a0\u7684\u8a08\u6578\u5668\u7d66\u4e88\u5176\u4ea4\u6613\u7de8\u865f\uff08\u4ee5\u4e0a\u5716\u70ba\u4f8b\u5c31\u662f txid=12
\uff09\u3002\u9019\u6642\uff0c\u8cc7\u6599\u5eab\u6703\u5217\u51fa\u76ee\u524d\u6709\u54ea\u4e9b\u6b63\u5728\u57f7\u884c\u7684\u4ea4\u6613\uff0c\u5f85\u6703\u672c\u4ea4\u6613\u5728\u64cd\u4f5c\u6642\uff0c\u6240\u6709\u6b63\u5728\u57f7\u884c\u7684\u4ea4\u6613\u90fd\u6703\u88ab\u62d2\u7d55\u4f7f\u7528\u3002\u540c\u6642\uff0c\u53ea\u80fd\u8b80\u53d6\u6642\uff0c\u5c0f\u65bc\u5176\u64c1\u6709\u7684\u4ea4\u6613\u7de8\u865f\u7684\u8cc7\u6599\uff08\u4ee5\u4e0a\u5716\u70ba\u4f8b\u5c31\u662f txid=13
\u4e0d\u80fd\u88ab\u8b80\u53d6\uff09\u3002
\u5176\u6838\u5fc3\u6982\u5ff5\u5c31\u662f\uff1a\u6240\u6709\u7684\u8b80\u53d6\u90fd\u4e0d\u6703\u5f71\u97ff\u6240\u6709\u7684\u5beb\u5165\uff0c\u53cd\u4e4b\u4ea6\u7136\u3002
\u8ce6\u503c\u7684\u8a08\u6578\u5668\u7576\u5927\u65bc\u4e00\u56fa\u5b9a\u6578\u6642\u662f\u6703\u6b78\u96f6\u91cd\u7b97\u7684\u3002
"},{"location":"feedback/designing-data-intensive-applications/foundation-ft/#\u7d22\u5f15","title":"\u7d22\u5f15","text":"\u524d\u9762\u6211\u5011\u6709\u63d0\u904e\u8cc7\u6599\u5eab\u7684\u7d22\u5f15\u662f\u5982\u4f55\u904b\u4f5c\u7684\uff0c\u4f46\u662f\u5982\u679c_\u591a\u7248\u672c\u4e26\u884c\u63a7\u5236_\u9700\u8981\u88ab\u8003\u616e\u9032\u53bb\u6642\uff0c\u5c31\u9700\u8981\u4e00\u4e9b\u984d\u5916\u7684\u529f\u53bb\u8abf\u6574\u6a5f\u5236\u3002
\u4e00\u500b\u4f5c\u6cd5\u662f\u8b93\u7d22\u5f15\u6307\u5411\u6240\u6709\u7248\u672c\u7684\u8cc7\u6599\uff08\u4e0d\u7ba1\u662f\u9801\u5c0e\u5411\u4e2d\u6307\u5411\u7279\u5b9a\u9801\u6216\u8005\u65e5\u8a8c\u7d50\u69cb\u7684\u6563\u5217\u5c0d\u7167\u8868\u7684\u5730\u5740\uff09\uff0c\u4f46\u662f\u6839\u64da\u4e0d\u540c\u5be6\u4f5c\u65b9\u5f0f\u53ef\u80fd\u6703\u6709\u5f88\u5927\u7684\u6548\u80fd\u5dee\u7570\u3002
CouchDB\u3001Datomic\u3001LMDB \u96d6\u7136\u4e5f\u662f\u4f7f\u7528 B-Tree \u505a\u5132\u5b58\uff0c\u4f46\u662f\u6a5f\u5236\u537b\u662f append-only/copy-on-write\u3002\u7576\u66f4\u65b0\u8cc7\u6599\u6642\uff0c\u4e0d\u53bb\u66f4\u52d5\u820a\u7684\u9801\uff0c\u800c\u662f\u76f4\u63a5\u65b0\u589e\u4e00\u500b\u9801\u4e26\u8b93\u5b83\u53d6\u4ee3\u820a\u9801\u7684\u4f4d\u7f6e\u3002
"},{"location":"feedback/designing-data-intensive-applications/foundation-ft/#\u5beb\u5165\u504f\u659c","title":"\u5beb\u5165\u504f\u659c","text":"\u4e0a\u9762\u63d0\u5230\u7684\u7af6\u8cfd\u72c0\u6cc1\u90fd\u662f\u4e0d\u540c\u4ea4\u6613\u5617\u8a66\u4f7f\u7528\u76f8\u540c\u7684\u7269\u4ef6\uff0c\u4f46\u662f\u7af6\u8cfd\u72c0\u6cc1\u4e5f\u662f\u6703\u767c\u751f\u5728\u7576\u4e0d\u540c\u4ea4\u6613\u540c\u6642\u5beb\u5165\u4e0d\u540c\u7269\u4ef6\u7684\u6642\u5019\u3002
\u6211\u5011\u5148\u5047\u8a2d\u4e00\u500b\u72c0\u6cc1\uff0c\u91ab\u9662\u5728\u665a\u4e0a\u503c\u73ed\u7684\u6642\u5019\u5fc5\u9808\u8981\u81f3\u5c11\u64c1\u6709\u4e00\u500b\u4f4f\u9662\u91ab\u5e2b\uff0c\u4f46\u662f\u4e00\u822c\u60c5\u6cc1\u6703\u8b93\u5169\u500b\u4f4f\u9662\u91ab\u5e2b\u503c\u73ed\uff08\u4e5f\u5c31\u662f\u5141\u8a31\u8b93\u5176\u4e2d\u4e00\u500b\u91ab\u751f\u4f11\u5047\uff09\u3002\u82e5\u4ed6\u5011\u540c\u6642\u5728\u6392\u73ed\u7cfb\u7d71\u4e2d\uff0c\u7533\u8acb\u4f11\u5047\uff0c\u72c0\u6cc1\u5c31\u767c\u751f\u4e86\u3002
\u9019\u6642\uff0c\u7528\u524d\u9762\u7684\u89e3\u6cd5\u4e26\u6c92\u6709\u8fa6\u6cd5\u9054\u6210\u8cc7\u6599\u4e00\u81f4\u6027\uff0c\u56e0\u70ba\u4ed6\u5011\u66f4\u65b0\uff08\u6216\u6ce8\u5165\uff09\u7684\u76ee\u6a19\u662f\u4e0d\u540c\u7684\u3002
"},{"location":"feedback/designing-data-intensive-applications/foundation-ft/#\u5047\u9ad4\u5224\u5b9a","title":"\u5047\u9ad4\u5224\u5b9a","text":"\u91ab\u751f\u503c\u73ed\u7684\u72c0\u6cc1\u9019\u5c31\u662f\u6211\u5011\u5e38\u898b\u7684\u8a02\u7968\u7cfb\u7d71\u88ab\u8d85\u8a02\u4e86\u3002\u53e6\u5916\u4e00\u500b\u7bc4\u4f8b\u4e5f\u5305\u62ec\u9810\u7d04\u7cfb\u7d71\uff1a
\u82e5\u6709\u7a7a\u4f4d\uff0c\u5247\u53ef\u9810\u7d04BEGIN TRANSACTION;\n\nSELECT COUNT(*) FROM bookings -- (1)\nWHERE room_id = 123 AND\nend_time > '2015-01-01 12:00' AND start_time < '2015-01-01 13:00';\n\nINSERT INTO bookings(room_id, start_time, end_time, user_id) -- (2)\nVALUES (123, '2015-01-01 12:00', '2015-01-01 13:00', 666);\n\nCOMMIT;\n
COUNT(\\*) == 0
\uff09\u9019\u4f8b\u5b50\u4e0d\u50cf\u91ab\u751f\u7684\u4f8b\u5b50\uff0c\u56e0\u70ba\u91ab\u751f\u4f8b\u5b50\u662f\u6839\u64da\u5b58\u5728\u7684\u503c\uff08on_call=true
\uff09\u505a\u5224\u65b7\uff1b\u53cd\u904e\u4f86\u8aaa\uff0c\u9810\u7d04\u7cfb\u7d71\u662f\u6839\u64da\u4e0d\u5b58\u5728\u7684\u503c\uff08time IN (start, end)
\uff09\u505a\u5224\u65b7\u3002
\u9019\u7a2e\u4e0d\u5b58\u5728\u7684\u503c\u800c\u9020\u6210\u7684\u5beb\u5165\u504f\u659c\uff0c\u6211\u5011\u7a31\u5176\u70ba\u5047\u9ad4\u5224\u5b9a\uff08phantom\uff09\u3002\u5176\u7279\u5fb5\u662f insert
\u800c\u4e0d\u662f update
\u3002
\u7121\u8ad6\u5982\u4f55\uff0c\u7576\u767c\u751f\u5beb\u5165\u504f\u659c\u6642\u5c31\u8981\u4f7f\u7528\u66f4\u5f37\u7684\u4e00\u81f4\u6027\u7b49\u7d1a\uff1a\u5e8f\u5217\u5316\u3002\u5728\u4ecb\u7d39\u5e8f\u5217\u5316\u4e4b\u524d\uff0c\u6211\u5011\u5148\u4f86\u770b\u770b\u9664\u6b64\u4e4b\u5916\u9084\u6709\u54ea\u4e9b\u65b9\u5f0f\u53ef\u4ee5\u907f\u514d\u7279\u6b8a\u7684\u5beb\u5165\u504f\u659c\u3002
"},{"location":"feedback/designing-data-intensive-applications/foundation-ft/#\u9650\u5236\u72c0\u614b","title":"\u9650\u5236\u72c0\u614b","text":"\u5176\u4e2d\u4e00\u500b\u7c21\u55ae\u7684\u89e3\u6cd5\u5c31\u662f\u7d66\u4e88\u9650\u5236\uff08constraint\uff09\u3002\u4f8b\u5982 SQL \u8cc7\u6599\u5eab\u5e38\u898b\u7684 UNIQUE
\uff0c\u5176\u61c9\u7528\u53ef\u80fd\u662f\u4f7f\u7528\u8005\u5e33\u6236\uff1a
SELECT COUNT(*) -- (1)\nFROM users\nWHERE user_account = 'new_user'\n\nINSERT INTO users(user_id, user_account) -- (2)\nVALUES (123, 'new_user');\n
new_user
COUNT(*) == 0
\uff09\u5982\u679c\u6211\u5011\u66ff user_account
\u6dfb\u52a0\u9650\u5236\uff0c\u8b93\u4ed6\u53ea\u80fd\u55ae\u4e00\u5b58\u5728\uff0c\u5c31\u53ef\u4ee5\u907f\u514d\u540c\u6642\u6709\u5169\u500b\u4f7f\u7528\u8005\u5e33\u6236\u4e00\u6a23\u7684\u7af6\u8cfd\u72c0\u6cc1\u3002
\u4f46\u662f\u4ee5\u91ab\u751f\u503c\u73ed\u70ba\u4f8b\uff0c\u7576\u6d89\u53ca\u5230\u591a\u500b\u7269\u4ef6\u6642\uff0c\u5927\u90e8\u5206\u8cc7\u6599\u5eab\u90fd\u4e0d\u652f\u63f4\u9019\u6a23\u7684\u9650\u5236\u3002\u9664\u4e86 UNIQUE
\u4e4b\u5916\u53ef\u80fd\u9084\u6709\u5916\u9375\uff08foreign key\uff09\u3001\u503c\u7684\u9650\u5236\uff08\u4f8b\u5982\u6b63\u6578\uff09\u7b49\u7b49\u3002
\u4e00\u822c\u4f86\u8aaa\uff0c\u6211\u5011\u90fd\u6703\u7a31\u5e8f\u5217\u5316\uff08serializability\uff09\u70ba\u6700\u5f37\u7684\u9694\u96e2\u6027\u7b49\u7d1a\uff0c\u96d6\u7136\u524d\u9762\u7684\u5716\u6709\u8aaa\u7dda\u6027\u5316\uff08linearability\uff09\u518d\u66f4\u5f37\uff0c\u4f46\u662f\u4ed6\u9700\u8981\u72a7\u7272\u7684\u6771\u897f\u592a\u591a\u4e86\uff0c\u5f88\u5c11\u88ab\u5be6\u73fe\u3002\u5e8f\u5217\u5316\u7684\u5916\u986f\u6a23\u5b50\u5c31\u662f\u96d6\u7136\u591a\u7b46\u4ea4\u6613\u53ef\u80fd\u662f\u4e26\u884c\u8655\u7406\u7684\uff0c\u4f46\u5176\u7d50\u679c\u537b\u662f\u6709\u9806\u5e8f\u6027\u7684\uff08\u5e8f\u5217\u5316\u7684\uff09\u3002
\u7576\u7136\uff0c\u9019\u9ebc\u5f37\u7684\u4e00\u81f4\u6027\u4e5f\u662f\u6703\u9700\u8981\u72a7\u7272\u7684\uff0c\u6839\u64da\u5be6\u4f5c\u65b9\u5f0f\u4e0d\u540c\uff0c\u5176\u9700\u8981\u4ed8\u51fa\u7684\u4ee3\u50f9\u6709\u6240\u4e0d\u540c\u3002
\u8b93\u8cc7\u6599\u904b\u884c\u5728\u55ae\u4e00\u7dda\u7a0b\u4e0b\uff0c\u5c31\u53ef\u4ee5\u8b93\u6240\u6709\u884c\u70ba\u90fd\u6210\u70ba\u5e8f\u5217\u5316\u3002 \u9019\u500b\u60f3\u6cd5\u5f88\u7c21\u55ae\uff0c\u4f46\u662f\u537b\u5728\u5927\u7d04 2007 \u5e74\u6642\u624d\u958b\u59cb\u51fa\u73fe\uff0c \u539f\u56e0\u662f\u56e0\u70ba\u8a18\u61b6\u9ad4\u7684\u50f9\u683c\u4f4e\u5ec9\u548c\u6574\u5408\u5feb\u7167\u9694\u96e2\u8b93\u8b80\u53d6\u7684\u4ea4\u6613\u4e26\u884c\u8655\u7406\u3002
\u70ba\u4ec0\u9ebc\u8a18\u61b6\u9ad4\u7684\u50f9\u683c\u6703\u5f71\u97ff\u80fd\u5426\u4f7f\u7528\u55ae\u4e00\u7dda\u7a0b\uff1f \u9019\u662f\u56e0\u70ba\u8981\u9054\u6210\u55ae\u4e00\u7dda\u7a0b\u7684\u8cc7\u6599\u5eab\u524d\u63d0\u662f\uff0c\u6bcf\u4e00\u500b\u4ea4\u6613\u90fd\u662f\u7c21\u55ae\u800c\u5feb\u901f\u7684\u3002 \u9019\u6a23\u4ea4\u6613\u5f7c\u6b64\u9593\u5c31\u4e0d\u6703\u6709\u904e\u591a\u7684\u5ef6\u9072\u3002\u8981\u9054\u6210\u5feb\u901f\u57f7\u884c\u4ea4\u6613\uff0c\u5c31\u9700\u8981\u628a\u8cc7\u6599\u5eab\u5b58\u9032\u8a18\u61b6\u9ad4\u4e2d\u3002
\u63a5\u4e0b\u4f86\uff0c\u6211\u5011\u4f86\u770b\u770b\u9084\u6709\u54ea\u4e9b\u60c5\u6cc1\u6703\u8b93\u4ea4\u6613\u8b8a\u5f97\u5f88\u6162\uff0c\u4e26\u8aaa\u660e\u5176\u89e3\u6c7a\u8fa6\u6cd5\u3002
"},{"location":"feedback/designing-data-intensive-applications/foundation-ft/#\u5f88\u6162\u7684\u8b80\u53d6","title":"\u5f88\u6162\u7684\u8b80\u53d6","text":"\u5f88\u6162\u7684\u8b80\u53d6\u53ef\u80fd\u6709\u5169\u7a2e\uff1a\u4e00\u7a2e\u662f\u727d\u6d89\u5230\u5927\u91cf\u8cc7\u6599\u7684\u8b80\u53d6\u3001\u4e00\u7a2e\u662f\u8b80\u53d6\u7684\u8cc7\u6599\u4e0d\u5728\u8a18\u61b6\u9ad4\u4e2d\uff0c\u9700\u8981\u5230\u78c1\u789f\u4e2d\u62c9\u53d6\u3002
\u524d\u9762\u6709\u63d0\u904e\u5728\u5beb\u5165\u504f\u659c\u4ee5\u524d\u7684\u4e00\u81f4\u6027\uff0c\u53ef\u4ee5\u900f\u904e\u5feb\u7167\u9694\u96e2\u4f86\u9054\u6210\uff0c \u6240\u4ee5\u8cc7\u6599\u5eab\u5c31\u53ef\u4ee5\u900f\u904e\u5feb\u627e\u9694\u96e2\u4f86\u57f7\u884c\u90a3\u4e9b\u9700\u8981\u5927\u91cf\u8b80\u53d6\u7684\u641c\u5c0b\uff08\u4f8b\u5982\u5206\u6790\u6027\u7684\u641c\u5c0b\uff09\u3002
\u5982\u679c\u8cc7\u6599\u5728\u78c1\u789f\u4e2d\uff0c\u6211\u5011\u53ef\u4ee5\u5148\u9000\u56de\u4ea4\u6613\uff08\u6216\u8005\u8b93\u5176\u4ed6\u4ea4\u6613\u5148\u57f7\u884c\uff09\uff0c \u7b49\u78c1\u789f\u7684\u8cc7\u6599\u88ab\u62c9\u9032\u8a18\u61b6\u9ad4\u4e2d\u518d\u57f7\u884c\u9019\u500b\u4ea4\u6613\u3002
"},{"location":"feedback/designing-data-intensive-applications/foundation-ft/#\u4e92\u52d5\u5f0f\u4ea4\u6613","title":"\u4e92\u52d5\u5f0f\u4ea4\u6613","text":"\u6709\u4e9b\u4ea4\u6613\u662f\u61c9\u7528\u7a0b\u5f0f\u53cd\u8986\u548c\u8cc7\u6599\u5eab\u6e9d\u901a\u9032\u884c\u7684\uff0c\u4f8b\u5982\u5148\u5f9e\u8cc7\u6599\u5eab\u62ff\u53d6\u4e00\u4e9b\u8cc7\u6599\uff0c \u505a\u5224\u65b7\u548c\u904b\u7b97\u4e4b\u5f8c\u518d\u57f7\u884c\u4ea4\u6613\u4e2d\u7684\u4e0b\u4e00\u6b65\u3002 \u9019\u6642\uff0c\u5927\u91cf\u7684\u6642\u9593\u90fd\u88ab\u6d88\u8017\u5728\u7db2\u8def\u6e9d\u901a\u4e0a\u3002 \u70ba\u4e86\u907f\u514d\u9019\u7a2e\u60c5\u6cc1\uff0c\u9019\u7a2e\u5be6\u969b\u5e8f\u5217\u5316\u7684\u8cc7\u6599\u5eab\u901a\u5e38\u53ea\u652f\u63f4\u8caf\u5b58\u7a0b\u5e8f\uff08stored procedure\uff09\u3002
\u6709\u8caf\u5b58\u7a0b\u5e8f\u7684\u8cc7\u6599\u5eab
\u4f46\u662f\u8caf\u5b58\u7a0b\u5e8f\u7684\u7f3a\u9ede\u5c31\u662f\u5f88\u96e3\u9054\u6210\u64f4\u589e\u6027\uff0c\u56e0\u70ba\u4ed6\u7279\u6027\u662f\u55ae\u4e00\u7dda\u7a0b\u53bb\u57f7\u884c\u9019\u4e9b\u4e8b\uff0c \u7576\u8cc7\u6599\u88ab\u653e\u9032\u591a\u53f0\u8cc7\u6599\u5eab\u6642\uff08partitioned\uff09\uff0c\u5c31\u6703\u72a7\u7272\u5f88\u591a\u6548\u80fd\u4f86\u9054\u6210\u9019\u500b\u76ee\u7684\u3002
\u76f8\u53cd\u7684\uff0c\u5982\u679c\u8cc7\u6599\u80fd\u88ab\u5408\u4e4e\u908f\u8f2f\u7684\u653e\u7f6e\u4e0d\u540c\u4f4d\u7f6e\uff08\u6839\u64da\u61c9\u7528\u7a0b\u5f0f\u7684\u5546\u52d9\u908f\u8f2f\uff09\uff0c \u5c31\u53ef\u4ee5\u5728\u4e0d\u540c\u8cc7\u6599\u5eab\u5404\u81ea\u57f7\u884c\u5176\u7bc4\u570d\u5167\u7684\u8cc7\u6599\uff0c\u9054\u6210\u5206\u6563\u5f0f\u7684\u55ae\u4e00\u7dda\u7a0b\u3002
"},{"location":"feedback/designing-data-intensive-applications/foundation-ft/#\u5169\u968e\u6bb5\u9396","title":"\u5169\u968e\u6bb5\u9396","text":"\u5169\u968e\u6bb5\u9396\uff08(Strong Strict) Two-phase locking\uff0c(SS)2PL\uff09\u5c31\u662f\u5728\u4ea4\u6613\u5beb\u5165\u6642\uff0c \u907f\u514d\u5176\u4ed6\u4ea4\u6613\u8b80\u53d6\uff1b\u53cd\u4e4b\u4ea6\u7136\u3002
\u5169\u968e\u6bb5\u9396\u4e2d\u6709\u5169\u7a2e\u9396\uff0c\u4e00\u7a2e\u662f\u5171\u4eab\u9396\uff08shared mode\uff09\u3001\u4e00\u7a2e\u662f\u6392\u4ed6\u9396\uff08exclusive mode\uff09\u3002 \u7576\u4ea4\u6613\u5728\u8b80\u53d6\u8cc7\u6599\u6642\uff0c\u6703\u7372\u5f97\u8a72\u8cc7\u6599\u7684\u5171\u4eab\u9396\uff1b\u53cd\u4e4b\uff0c\u7576\u4ea4\u6613\u5728\u7de8\u8f2f\u6642\uff0c\u6703\u7372\u5f97\u8a72\u8cc7\u6599\u7684\u6392\u4ed6\u9396\u3002 \u6392\u4ed6\u9396\u8981\u7b49\u6240\u6709\u8a72\u8cc7\u6599\u7684\u5171\u4eab\u9396\u88ab\u91cb\u653e\uff0c\u76f8\u53cd\u7684\uff0c\u7372\u5f97\u5171\u4eab\u9396\u7684\u524d\u63d0\u5c31\u662f\u8a72\u8cc7\u6599\u4e26\u6c92\u6709\u6392\u4ed6\u9396\u3002
\u5169\u968e\u6bb5\u7684\u968e\u6bb5\u4ee3\u8868\u5f9e\u9650\u5236\u5176\u4ed6\u4ea4\u6613\u5beb\u5165\u540c\u7269\u4ef6\u7684\u968e\u6bb5\u63d0\u5347\u5230\u9650\u5236\u63d0\u4ed6\u4ea4\u6613\u8b80\u53d6\u540c\u7269\u4ef6\u7684\u7b2c\u4e8c\u500b\u968e\u6bb5\u3002
"},{"location":"feedback/designing-data-intensive-applications/foundation-ft/#\u9396\u7684\u5047\u9ad4\u5224\u5b9a","title":"\u9396\u7684\u5047\u9ad4\u5224\u5b9a","text":"\u524d\u9762\u7684\u9810\u7d04\u554f\u984c\u4e2d\uff0c\u6211\u5011\u53ef\u80fd\u9762\u81e8\u7684\u662f\u5beb\u5165\u6642\u7684\u5224\u65b7\u6a5f\u5236\u53d7\u5230\u5c1a\u672a\u5b58\u5728\u7684\u8cc7\u6599\u5f71\u97ff\uff08\u5373\u6240\u8b02\u7684\u5047\u9ad4\u5224\u5b9a\uff09\u3002 \u9019\u6642\u5f8c\u7684\u6a5f\u5236\u5c31\u9700\u8981\u91dd\u5c0d\u6574\u9ad4\u7684\u8868\u683c\u6216\u7279\u5b9a\u689d\u4ef6\u7684\u8cc7\u6599\u505a\u9396\u5b9a\u3002
\u900f\u904e\u689d\u4ef6\uff08\u4ee5\u4e0a\u8ff0\u70ba\u4f8b\uff0c\u5c31\u662f room=1234
\uff09\u53bb\u9650\u5236\u8cc7\u6599\u7684\u9396\u6211\u5011\u7a31\u70ba\u9810\u5224\u9396\uff08predicate lock\uff09\uff1b \u9396\u5b9a\u6574\u9ad4\u7684\u8868\u683c\uff08table\uff09\u6216\u662f\u90e8\u5206\u7684\u7d22\u5f15\u4f4d\u7f6e\uff0c\u6211\u5011\u7a31\u5176\u70ba\u7d22\u5f15\u7bc4\u570d\u9396\uff08index-range lock\uff09\u3002
\u82e5\u5169\u968e\u6bb5\u9396\u80fd\u6eff\u8db3\u5047\u9ad4\u5224\u5b9a\uff0c\u6211\u5011\u5c31\u80fd\u7a31\u5176\u70ba\u5e8f\u5217\u5316\u7684\u8cc7\u6599\u4e00\u81f4\u6027\u3002
\u7269\u5316\u885d\u7a81
\u82e5\u8a72\u8cc7\u6599\u5c1a\u672a\u5b58\u5728\uff0c \u4f60\u9664\u4e86\u9396\u5b9a\u6574\u9ad4\u7684\u8868\u683c\u4e5f\u53ef\u4ee5\u900f\u904e\u7269\u5316\u885d\u7a81\uff08materializing conflicts\uff09 \u4f86\u7269\u5316\u90e8\u5206\u7279\u5fb5\u4ee5\u9054\u6210\u90e8\u4efd\u7684\u9396\u5b9a\u3002
\u4ee5\u524d\u9762\u7684\u9810\u7d04\u7cfb\u7d71\u70ba\u4f8b\uff0c\u4f60\u53ef\u4ee5\u984d\u5916\u5efa\u7acb\u4e00\u500b\u8868\u683c\uff0c\u4e26\u5728\u5176\u4e2d\u653e\u5165\u6bcf\u5341\u4e94\u5206\u9418\u7684\u6642\u9593\u5340\u9593\uff0c \u6240\u4ee5\u8a72\u8868\u6703\u6709 2000-01-01 00:00:00
\u30012000-01-01 00:15:00
\u7b49\u7b49\u7684\u503c\u3002 \u7576\u4f60\u5728\u505a\u6703\u8b70\u5ba4\u6709\u7121\u9810\u7d04\u6642\uff0c\u53ef\u4ee5\u9396\u5b9a\u8a72\u9810\u7d04\u6642\u6bb5\u7684\u503c\uff0c\u907f\u514d\u88ab\u8b80\u53d6\uff0c \u9019\u6642\u5c31\u53ef\u4ee5\u9054\u5230\u9396\u5b9a\u90e8\u5206\u503c\u7684\u6548\u679c\uff0c\u4e5f\u5c31\u662f\u8b93\u5047\u9ad4\u8b8a\u6210\u5be6\u9ad4\u3002
\u7136\u800c\u9019\u500b\u65b9\u6cd5\u537b\u6703\u8b93\u4f60\u7684\u61c9\u7528\u7a0b\u5f0f\u8b8a\u5f97\u5f88\u9ad2\uff08\u5728\u61c9\u7528\u7a0b\u5f0f\u7684\u7a0b\u5f0f\u78bc\u4e2d\u5beb\u5165\u8cc7\u6599\u5eab\u7684\u4e26\u884c\u63a7\u5236\u908f\u8f2f\uff09\uff0c \u9664\u6b64\u4e4b\u5916\u9019\u500b\u505a\u6cd5\u6839\u64da\u5be6\u4f5c\u5834\u666f\u5f88\u53ef\u80fd\u8b8a\u5f97\u5f88\u56f0\u96e3\uff0c\u6240\u4ee5\u61c9\u8a72\u5c07\u5176\u8996\u70ba\u6700\u5f8c\u624b\u6bb5\u3002
"},{"location":"feedback/designing-data-intensive-applications/foundation-ft/#\u4f4e\u843d\u7684\u6548\u80fd","title":"\u4f4e\u843d\u7684\u6548\u80fd","text":"\u4e0d\u53ea\u662f\u56e0\u70ba\u8cc7\u6599\u5eab\u5e38\u5e38\u8981\u52a0\u9396\u3001\u89e3\u9396\uff0c\u7576\u8cc7\u6599\u88ab\u9396\u5b9a\u6642\uff0c\u5176\u4ed6\u4ea4\u6613\u5c31\u7121\u6cd5\u5b58\u53d6\u8a72\u8cc7\u6599\uff0c \u9019\u5927\u5927\u7684\u964d\u4f4e\u8cc7\u6599\u5eab\u7684\u6548\u80fd\u3002 \u6240\u4ee5\u5373\u4f7f\u5169\u968e\u6bb5\u9396\u5f9e 1980 \u5de6\u53f3\u5c31\u5df2\u7d93\u5b58\u5728\uff0c\u4ecd\u7136\u8b93\u8a31\u591a\u8cc7\u6599\u5eab\u5728\u8a2d\u8a08\u8cc7\u6599\u5eab\u6642\uff0c\u4e0d\u6703\u8003\u616e\u5e8f\u5217\u5316\u7684\u4e00\u81f4\u6027\u3002
\u7576\u4ea4\u6613\u548c\u4ea4\u6613\u9593\u56e0\u70ba\u9396\u7684\u95dc\u4fc2\u88ab\u4e92\u76f8\u9650\u5236\u4f4f\u4e86\uff0c\u4f8b\u5982\uff1a \u4ea4\u6613 1 \u91dd\u5c0d\u8cc7\u6599 a \u9032\u884c\u6392\u4ed6\u9396\uff0c \u4ea4\u6613 2 \u91dd\u5c0d\u8cc7\u6599 b \u9032\u884c\u6392\u4ed6\u9396\uff0c\u4e4b\u5f8c\u4ea4\u6613 2 \u8981\u8b80\u53d6\u8cc7\u6599 a\uff0c \u4ea4\u6613 1 \u8981\u8b80\u53d6\u8cc7\u6599 b\uff0c \u9019\u6642\u5169\u500b\u4ea4\u6613\u6703\u56e0\u70ba\u6392\u4ed6\u9396\uff0c\u800c\u88ab\u8feb\u9032\u5165\u6c38\u4e45\u7684\u7b49\u5f85\uff0c\u9019\u7a2e\u72c0\u6cc1\u7a31\u70ba\u9589\u9396\uff08deadlock\uff09\u3002
\u8cc7\u6599\u5eab\u5728\u5be6\u4f5c\u5169\u968e\u6bb5\u9396\u6642\uff0c\u9084\u8981\u5be6\u4f5c\u5075\u5074\u9589\u9396\u4e26\u91cb\u653e\u5176\u4e2d\u4e00\u500b\u4ea4\u6613\uff0c \u9019\u6642\u56e0\u70ba\u5176\u4e2d\u4e00\u500b\u4ea4\u6613\u5fc5\u9808\u900f\u904e\u61c9\u7528\u7a0b\u5f0f\u91cd\u65b0\u767c\u9001\uff0c\u8b93\u8cc7\u6599\u5eab\u5de5\u4f5c\u53c8\u9032\u4e00\u6b65\u7684\u63d0\u5347\u3002
"},{"location":"feedback/designing-data-intensive-applications/foundation-ft/#\u5e8f\u5217\u5316\u5feb\u7167","title":"\u5e8f\u5217\u5316\u5feb\u7167","text":"\u5e8f\u5217\u5316\u5feb\u7167\uff08Serializable Snapshot Isolation\uff0cSSI\uff09\u65bc 2008 \u5e74\u7684\u4e00\u7bc7 \u8ad6\u6587\u4e2d\u63d0\u51fa\uff0c \u76f8\u8f03\u65bc\u5169\u968e\u6bb5\u9396\u7684\u7406\u5ff5\uff1a \u7121\u8ad6\u6709\u6c92\u6709\u7af6\u8cfd\u72c0\u6cc1\uff0c\u6211\u8b93\u8cc7\u6599\u907f\u514d\u88ab\u95b1\u8b80\u5c31\u53ef\u4ee5\u907f\u514d\u53ef\u80fd\u7684\u7af6\u8cfd\u72c0\u6cc1\uff0c \u5e8f\u5217\u5316\u5feb\u7167\u7684\u7406\u5ff5\u662f\uff1a\u6211\u4e00\u6a23\u8b93\u4ea4\u6613\u540c\u6642\u9032\u884c\uff0c\u4f46\u662f\u7576\u767c\u73fe\u5f7c\u6b64\u6709\u885d\u7a81\u6642\uff0c\u653e\u68c4\u5f8c\u9762\u7684\u4ea4\u6613\u3002
\u9019\u7a2e\u900f\u904e\u5224\u65b7\u6c7a\u5b9a\u662f\u5426\u6709\u7af6\u8cfd\u72c0\u6cc1\u7684\u65b9\u5f0f\u5728\u65e9\u671f\u5c31\u6709\u51fa\u73fe\uff0c \u4f46\u662f\u7f3a\u9ede\u5c31\u662f\u7576\u6709\u5927\u91cf\u4ea4\u6613\u540c\u6642\u5b58\u53d6\u76f8\u540c\u7684\u7269\u4ef6\uff0c\u5c31\u5f88\u53ef\u80fd\u9020\u6210\u5927\u91cf\u7684\u4ea4\u6613\u88ab\u62d2\u7d55\uff0c \u5f9e\u800c\u9032\u4e00\u6b65\u63d0\u5347\u8cc7\u6599\u5eab\u7684\u8ca0\u8f09\uff08\u56e0\u70ba\u88ab\u653e\u68c4\u7684\u4ea4\u6613\u5f88\u53ef\u80fd\u9084\u6703\u88ab\u91cd\u505a\uff09\u3002 \u76f8\u5c0d\u800c\u8a00\uff0c\u9019\u7a2e\u65b9\u5f0f\u5c31\u5f88\u9069\u5408\u4ea4\u6613\u5b58\u53d6\u7684\u662f\u8f03\u70ba\u7a00\u758f\u7684\u8cc7\u6599\uff0c \u6216\u8005\u4ea4\u6613\u7de8\u8f2f\u8cc7\u6599\u6642\u662f\u4e0d\u5728\u4e4e\u9806\u5e8f\u7684\uff08\u4f8b\u5982 count=count+1
\uff09\u3002
\u5e8f\u5217\u5316\u5feb\u7167\u548c\u65e9\u671f\u5224\u65b7\u662f\u5426\u6709\u7af6\u8cfd\u72c0\u6cc1\u7684\u6f14\u7b97\u6cd5\u7684\u4e3b\u8981\u5dee\u7570\u5728\u65bc\uff0c\u5e8f\u5217\u5316\u5feb\u7167\u662f\u57fa\u65bc\u5feb\u7167\u9694\u96e2\u7684\u6a5f\u5236\u800c\u5efa\u7acb\u7684\u3002
\u4ee5\u4e0b\u5c31\u6839\u64da\u5e8f\u5217\u5316\u5feb\u7167\u5728\u4e0d\u540c\u7684\u7af6\u8cfd\u72c0\u6cc1\u767c\u751f\u6642\uff0c\u4ed6\u6240\u8655\u7406\u7684\u65b9\u5f0f\u8a0e\u8ad6\u4e4b\u3002
"},{"location":"feedback/designing-data-intensive-applications/foundation-ft/#\u5224\u65b7\u662f\u5426\u8b80\u5230\u820a\u8cc7\u6599","title":"\u5224\u65b7\u662f\u5426\u8b80\u5230\u820a\u8cc7\u6599","text":"\u6211\u5011\u53ef\u4ee5\u900f\u904e\u9694\u96e2\u5feb\u7167\u7684\u591a\u7248\u672c\u4e26\u884c\u63a7\u5236\u4f86\u5224\u65b7\u4ea4\u6613\u662f\u5426\u4f7f\u7528\u5230\u820a\u7684\u8cc7\u6599\uff1a \u7576\u63d0\u4ea4\u6642\uff0c\u5176\u4f7f\u7528\u7684\u8cc7\u6599\u7248\u672c\u5df2\u7d93\u88ab\u66f4\u65b0\u4e86\u3002
\u5982\u679c \u4ea4\u6613 43 \u7b2c\u4e8c\u500b\u641c\u5c0b\u4e0d\u662f\u6703\u7570\u52d5\u8cc7\u6599\u7684\u641c\u5c0b\uff08\u4e5f\u5c31\u662f \u4ea4\u6613 43 \u50c5\u662f\u505a\u8b80\u53d6\u7684\u4ea4\u6613\uff09\u6642\uff0c \u5c31\u4e0d\u9700\u8981\u9000\u56de\u8a72\u4ea4\u6613\uff0c\u56e0\u70ba\u5e8f\u5217\u5316\u5feb\u7167\u907f\u514d\u7684\u53ea\u662f\u5beb\u5165\u504f\u659c\uff0c\u5728\u6eff\u8db3\u8b80\u53d6\u504f\u659c\u7684\u60c5\u6cc1\u4e0b\uff0c\u9019\u7b46\u4ea4\u6613\u662f\u4e0d\u9700\u8981\u88ab\u9000\u56de\u7684\u3002
"},{"location":"feedback/designing-data-intensive-applications/foundation-ft/#\u5224\u65b7\u5beb\u5165\u5f8c\u662f\u5426\u5f71\u97ff\u5176\u4ed6\u4eba","title":"\u5224\u65b7\u5beb\u5165\u5f8c\u662f\u5426\u5f71\u97ff\u5176\u4ed6\u4eba","text":"\u5728\u5169\u968e\u6bb5\u9396\u7684\u6642\u5019\u6709\u63d0\u5230\u7d22\u5f15\u7bc4\u570d\u9396\uff0c\u4f46\u662f\u9019\u88e1\u7684\u9396\u4e26\u4e0d\u6703\u9650\u5236\u5176\u4ed6\u4eba\u8b80\u53d6\uff0c \u50c5\u662f\u7d00\u9304\u54ea\u4e9b\u4ea4\u6613\u4f7f\u7528\u5230\u9019\u4e9b\u8cc7\u6599\uff0c\u4ee5\u5229\u4e4b\u5f8c\u5224\u65b7\u662f\u5426\u53d7\u5f71\u97ff\u3002
"},{"location":"feedback/designing-data-intensive-applications/foundation-ft/#\u6548\u80fd\u548c\u64f4\u589e\u6027","title":"\u6548\u80fd\u548c\u64f4\u589e\u6027","text":"\u6211\u5011\u524d\u9762\u63d0\u5230\u5be6\u969b\u5e8f\u5217\u5316\u548c\u5169\u968e\u6bb5\u9396\u5206\u5225\u6709\u4f4e\u64f4\u589e\u6027\u548c\u4f4e\u6548\u7387\u6027\u7684\u7f3a\u9ede\uff0c\u7136\u800c\u5e8f\u5217\u5316\u5feb\u7167\u537b\u4fee\u6b63\u4e86\u9019\u4e9b\u7f3a\u9ede\uff0c\u9032\u800c\u53ef\u80fd\u6210\u70ba\u672a\u4f86\u5be6\u4f5c\u5e8f\u5217\u5316\u4e00\u81f4\u6027\u6642\u7684\u6a19\u6e96\u505a\u6cd5\u3002
\u5e8f\u5217\u5316\u5feb\u7167\u7684\u6548\u80fd\u53d7\u5230\u4e00\u4e9b\u5be6\u4f5c\u7d30\u7bc0\u5f71\u97ff\uff0c\u6211\u5011\u5728\u8a18\u9304\u4ea4\u6613\u7684\u904e\u7a0b\u6642\uff08\u4ee5\u5229\u4e4b\u5f8c\u5224\u65b7\u5176\u4ed6\u4ea4\u6613\u662f\u5426\u6703\u53d7\u5f71\u97ff\uff09\uff0c\u5176\u7d30\u7bc0\u7a0b\u5ea6\u6703\u9700\u8981\u505a\u4e00\u4e9b\u6b0a\u8861\uff1a
\u81f3\u65bc\u64f4\u589e\u6027\uff0c\u7576\u4f7f\u7528\u5e8f\u5217\u5316\u5feb\u7167\u6642\u56e0\u70ba\u4efb\u4e00\u4ea4\u6613\u90fd\u4e0d\u6703\u5f71\u97ff\u5176\u4ed6\u4ea4\u6613\u540c\u6642\u9032\u884c\uff0c\u50c5\u5728\u4ea4\u6613\u7d50\u675f\u5f8c\u9032\u884c\u5224\u65b7\u662f\u5426\u6709\u885d\u7a81\uff0c\u6240\u4ee5\u4ed6\u53ef\u4ee5\u5f88\u8f15\u6613\u5730\u9054\u6210\u64f4\u589e\u6027\u7684\u9700\u6c42\u3002FoundationDB
"},{"location":"feedback/designing-data-intensive-applications/foundation-ft/#\u5176\u4ed6\u8981\u6ce8\u610f\u7684\u5730\u65b9","title":"\u5176\u4ed6\u8981\u6ce8\u610f\u7684\u5730\u65b9","text":"\u4f60\u5f88\u96e3\u4e00\u773c\u770b\u51fa\u9019\u500b\u61c9\u7528\u7a0b\u5f0f\u6216\u8005\u7a0b\u5f0f\u78bc\u6703\u9762\u81e8\u7af6\u8cfd\u72c0\u6cc1\uff0c\u6216\u8005\u78ba\u5b9a\u7576\u8cc7\u6599\u5eab\u9054\u6210\u7279\u5b9a\u7b49\u7d1a\u7684\u4e00\u81f4\u6027\u6642\uff0c\u8a72\u61c9\u7528\u7a0b\u5f0f\u6216\u7a0b\u5f0f\u78bc\u5c31\u53ef\u4ee5\u5b89\u5168\u5730\u88ab\u57f7\u884c\u3002\u6240\u4ee5\u6211\u5011\u9664\u4e86\u61c9\u76e1\u53ef\u80fd\u601d\u8003\u6240\u6709\u80fd\u767c\u751f\u7684\u72c0\u6cc1\uff0c\u9084\u8981\u505a\u597d\u5145\u5206\u7684\u6e2c\u8a66\u4f86\u6eff\u8db3\u9019\u4e9b\u72c0\u6cc1\uff08\u96d6\u7136\u5be6\u73fe\u9019\u4e9b\u6e2c\u8a66\u662f\u56f0\u96e3\u7684\uff09\u3002
\u5373\u4f7f\u8cc7\u6599\u5eab\u5ba3\u7a31\u4ed6\u80fd\u9054\u6210\u67d0\u4e9b\u6548\u679c\uff0c\u5927\u90e8\u5206\u60c5\u6cc1\u4f60\u4ecd\u9700\u8981\u5728\u4f7f\u7528\u524d\u505a\u597d\u6e2c\u8a66\uff0c\u56e0\u70ba\u4f60\u7684\u60c5\u6cc1\u5f88\u53ef\u80fd\u4e0d\u662f\u8cc7\u6599\u5eab\u8a2d\u8a08\u8005\u5728\u958b\u767c\u6642\u8003\u616e\u7684\u72c0\u6cc1\u3002 \u907a\u61be\u7684\u662f\uff0c\u4e26\u4e0d\u662f\u6240\u6709\u8cc7\u6599\u5eab\u8a2d\u8a08\u8005\u90fd\u6e05\u695a\u66b8\u89e3\u9019\u4e9b\u4e00\u81f4\u6027\u7684\u7b49\u7d1a\u5340\u5206\u300267
\u6211\u5011\u8a72\u600e\u9ebc\u8003\u616e\u4ea4\u6613\u6a5f\u5236
\u4f7f\u7528\u4ea4\u6613\u6a5f\u5236\u4f86\u4fdd\u6301\u8cc7\u6599\u7684\u4e00\u81f4\u6027\u6703\u5e36\u4f86\u6548\u80fd\u7684\u5f71\u97ff\u3002\u8207\u5176\u8003\u616e\u6548\u80fd\u800c\u62d2\u7d55\u4f7f\u7528\uff0c\u4e0d\u5982\u5728\u8a2d\u8a08\u61c9\u7528\u7a0b\u5f0f\u6642\u907f\u514d\u300c\u904e\u5ea6\u300d\u4f7f\u7528\u4ea4\u6613\u6a5f\u5236\u3002
\u9019\u6642\uff0c\u5c0d\u61c9\u7528\u7a0b\u5f0f\u8a2d\u8a08\u8005\u4f86\u8aaa\uff0c\u5c31\u80fd\u5927\u91cf\u964d\u4f4e\u6642\u5e38\u8981\u8003\u616e\u7af6\u8cfd\u72c0\u6cc1\u6240\u6d88\u8017\u7684\u5de5\u6642\u548c\u932f\u8aa4\u3002
\u2014\u2014 Spanner\uff1aGoogle \u7684\u5168\u7403\u5206\u6563\u5f0f\u8cc7\u6599\u5eab\uff082012\uff09
"},{"location":"feedback/designing-data-intensive-applications/foundation-ft/#\u4fee\u5fa9\u5beb\u5165\u885d\u7a81","title":"\u4fee\u5fa9\u5beb\u5165\u885d\u7a81","text":"\u4e0d\u8ad6\u54ea\u4e00\u7a2e\u4e00\u81f4\u6027\uff08\u5c31\u7b97\u662f\u5b8c\u5168\u7dda\u6027\uff09\u90fd\u6703\u9020\u6210\u8cc7\u6599\u7684\u8907\u5beb\uff08\u5728\u4e0d\u9000\u56de\u4ea4\u6613\u7684\u524d\u63d0\u4e0b\uff09\uff0c \u6709\u4e00\u500b\u7814\u7a76\u9818\u57df\u5c31\u662f\u5728\u5c08\u9580\u8a0e\u8ad6\u600e\u9ebc\u6574\u5408\u9019\u4e9b\u885d\u7a81\u3002\u4f8b\u5982\u540c\u6642\u4fee\u6539\u7dad\u57fa\u767e\u79d1\u7684\u8cc7\u8a0a\uff0c \u5169\u500b\u4eba\u5982\u679c\u90fd\u6539\u540c\u4e00\u500b\u6bb5\u843d\uff0c\u7b2c\u4e8c\u500b\u63d0\u4ea4\u7684\u5f88\u53ef\u80fd\u5c31\u6703\u628a\u7b2c\u4e00\u500b\u63d0\u4ea4\u7684\u66f4\u6539\u8986\u84cb\u6389\u3002
\u9019\u72c0\u6cc1\u5c24\u5176\u5bb9\u6613\u767c\u751f\u5728\u591a\u53f0\u8cc7\u6599\u5eab\u7684\u53e2\u96c6\u4e4b\u4e0b\uff0c\u7d30\u7bc0\u6211\u5011\u5c31\u7559\u5230\u8cc7\u6599\u5eab\u8907\u88fd\uff08replicated\uff09\u518d\u4f86\u8a0e\u8ad6\u3002 \u4e0d\u904e\u9019\u88e1\u63d0\u4e00\u4e0b\uff0c\u5728\u4e00\u4e9b\u7c21\u55ae\u7684\u8cc7\u6599\u578b\u5225\u662f\u53ef\u4ee5\u9054\u5230\u6574\u5408\u591a\u500b\u4fee\u6539\u7684\uff0c\u4f8b\u5982\uff1a
\u4f60\u7684\u8cc7\u6599\u5eab\u8981\u5be6\u4f5c\u54ea\u4e9b\u6771\u897f\uff0c\u624d\u80fd\u907f\u514d\u54ea\u4e9b\u72c0\u6cc1\u3002\u5be6\u969b\u4e0a\uff0c\u8cc7\u6599\u5eab\u5728\u5be6\u4f5c\u6642\u662f\u6703\u628a\u5404\u7a2e\u6f14\u7b97\u6cd5\u6574\u5408\u518d\u4e00\u8d77\u7684\uff01
Methods Dirty-read Dirty-write Read Skew Write Skew \u8a3b \u4e0d\u80fd\u540c\u6642\u5beb\u5165\u7684\u9396 X O X X - \u63d0\u4ea4\u5f8c\u518d\u63a8\u9032\u8cc7\u6599\u5eab O X X X - MVCC / DCC / OCC \u25b3 \u25b3 O X - \u5be6\u969b\u5e8f\u5217\u5316 O O O O \u8017\u6642\u7684\u4ea4\u6613\u6703\u7279\u6b8a\u8655\u7406 2PL \u25b3 O \u25b3 O - SSI \u25b3 \u25b3 O O -/\u25b3 \u4ee3\u8868\u96d6\u7136\u53ef\u4ee5\u505a\u5230\u907f\u514d\u8a72\u7af6\u8cfd\u72c0\u6cc1\uff0c\u4f46\u901a\u5e38\u6703\u7528\u66f4\u7c21\u55ae\u7684\u65b9\u5f0f\u53bb\u505a\uff0c\u4f8b\u5982 dirty-write \u6703\u7528\u9396\u4f86\u505a\u3002 \u4e0a\u9762\u7684\u8868\u683c\u662f\u6211\u81ea\u5df1\u6d88\u5316\u5f8c\u5f97\u51fa\u7684\u7d50\u8ad6\uff0c\u6709\u932f\u6b61\u8fce\u7cfe\u6b63\uff01
https://www.microsoft.com/en-us/research/wp-content/uploads/2016/02/tr-95-51.pdf \u21a9
http://pmg.csail.mit.edu/papers/adya-phd.pdf \u21a9
http://arxiv.org/pdf/1302.0309.pdf \u21a9
http://pmg.csail.mit.edu/papers/adya-phd.pdf \u21a9
http://arxiv.org/pdf/1302.0309.pdf \u21a9
https://www.microsoft.com/en-us/research/wp-content/uploads/2016/02/tr-95-51.pdf \u21a9
http://arxiv.org/pdf/1302.0309.pdf \u21a9
\u5982\u4f55\u5efa\u7acb\u4e00\u500b\u53ef\u4f9b\u5feb\u901f\u641c\u5c0b\u7684\u8cc7\u6599\u5eab\u3002
HackMD \u5831\u544a\u6587\u672c
\u4e0a\u4e00\u6b21\u63d0\u5230\u4e86\u5728\u61c9\u7528\u7a0b\u5f0f\u4e2d\uff0c\u4e0d\u540c\u7684\u5546\u52d9\u908f\u8f2f\u6703\u628a\u8cc7\u6599\u8f49\u63db\u6210\u4e0d\u540c\u7684\u8cc7\u6599\u6a21\u578b\u3002
\u9019\u6b21\u6211\u5011\u6703\u8a0e\u8ad6\u8cc7\u6599\u5eab\u5982\u4f55\u900f\u904e\u7d22\u5f15\u5feb\u901f\u5f9e\u6a94\u6848\u4e2d\u627e\u5230\u6307\u5b9a\u7684\u8cc7\u6599\uff0c\u4f8b\u5982\u73fe\u5728\u6709\u4e00\u842c\u7b46\u4f7f\u7528\u8005\u8cc7\u6599\uff0c \u6211\u60f3\u8981\u5feb\u901f\u627e\u5230\u4f7f\u7528\u8005 123\uff0c\u4e0d\u9700\u8981\u904d\u6b77 10000 \u7b46\u8cc7\u6599\uff0c\u53ef\u80fd\u627e\u500b\u4e09\u4e94\u6b21\u5c31\u627e\u5230\u4e86\u3002
\u5728\u958b\u59cb\u8b1b Index \u524d\uff0c\u6211\u5011\u53ef\u4ee5\u5148\u770b\u4e00\u4e0b\u4e00\u500b\u55ae\u7d14\u7528 bash
\u5efa\u7acb\u7684\u8cc7\u6599\u5eab\uff0c\u4e26\u767c\u73fe\u5176\u5b58\u5728\u7684\u554f\u984c\uff1a
db_set () {\n echo \"$1,$2\" >> database\n}\n\ndb_get () {\n grep \"^$1,\" database | sed -e \"s/^$1,//\" | tail -n 1\n}\n
\u53ef\u4ee5\u770b\u5230\u9019\u500b\u8cc7\u6599\u5eab\u5728\u5beb\u5165\u6642\uff0c\u64c1\u6709\u8d85\u9ad8\u6548\u80fd\uff0c\u751a\u81f3\u53ef\u4ee5\u8aaa\u4e0d\u6703\u518d\u6709\u6bd4\u4ed6\u66f4\u6709\u6548\u7387\uff08\u8edf\u9ad4\u9762\uff09\u7684\u5132\u5b58\u65b9\u5f0f\u4e86\u3002 \u9019\u7a2e\u5132\u5b58\u65b9\u5f0f\u7a31\u70ba log
\uff0c\u9644\u52a0\uff08append\uff09\u6587\u5b57\u81f3\u6a94\u6848\u4e2d\u3002\u9019\u7a2e\u65b9\u5f0f\u4e0d\u6703\u8003\u616e\u4e4b\u524d\u6709\u6c92\u6709\u5132\u5b58\u904e\u8a72\u8cc7\u6599\uff0c \u800c\u662f\u76f4\u63a5\u65b0\u589e\u81f3\u6a94\u6848\u5c3e\u8655\u3002\u6240\u4ee5\u4e26\u4e0d\u6703\u6e05\u9664\u6b77\u53f2\u7d00\u9304\u3002
Info
\u9019\u500b\u65b9\u5f0f\u4e26\u672a\u8003\u616e\u8a31\u591a\u554f\u984c\uff0c\u4f8b\u5982\uff1a\u591a\u5de5\u8655\u7406\u3001\u6e05\u9664\u6b77\u53f2\u7d00\u9304\u3001\u5bb9\u932f\u3001\u8cc7\u6599\u6bc0\u640d
\u7136\u800c\uff0c\u7576\u4ed6\u8b80\u53d6\u6642\uff0c\u537b\u9700\u8981\u628a\u6240\u6709\u6587\u4ef6\u90fd\u8b80\u904e\u4e00\u904d\u3002\u7576\u8cc7\u6599\u9577\u5169\u500d\u6642\uff0c\u53ef\u4ee5\u9810\u671f\u4ed6\u9700\u8981\u57f7\u884c\u7684\u6642\u9593\u4e5f\u6703\u63d0\u5347\u81f3\u5169\u500d\u4ee5\u4e0a\u3002 \u70ba\u4e86\u89e3\u6c7a\u9019\u554f\u984c\uff0cIndex \u51fa\u73fe\u4e86\u3002
"},{"location":"feedback/designing-data-intensive-applications/foundation-index/#\u7d22\u5f15\u662f\u4ec0\u9ebc","title":"\u7d22\u5f15\u662f\u4ec0\u9ebc","text":"\u7d22\u5f15\uff08Index\uff09\u901a\u5e38\u662f\u5728\u4e3b\u8981\u8cc7\u6599\u4e0b\u984d\u5916\u5efa\u7acb\u7684 metadata\uff0c\u4e26\u7576\u6709\u8cc7\u6599\u9700\u8981\u300c\u5beb\u5165\u300d\u6642\uff0c\u66f4\u65b0\u9019\u4efd metadata\u3002
\u7531\u6b64\u53ef\u77e5\uff0c\u5728\u63d0\u5347\u300c\u8b80\u53d6\u300d\u6548\u80fd\u7684\u540c\u6642\uff0c\u4fbf\u9700\u8981\u72a7\u7272\u90e8\u5206\u300c\u5beb\u5165\u300d\u6548\u80fd\u3002
Info
\u5de5\u5177\u7684\u9078\u64c7\u5e38\u5e38\u90fd\u662f\u5728\u505a\u6b0a\u8861\uff0c\u82e5\u60c5\u5883\u9700\u8981\u9ad8\u6548\u80fd\u7684\u8b80\u53d6\uff0c\u90a3\u6216\u8a31\u5c31\u61c9\u8a72\u8003\u616e\u6dfb\u52a0 index\u3002
\u4ee5\u4e0b\u7684\u7d22\u5f15\u90fd\u4ee3\u8868 key-value \u4e2d\u7684 key \u6216\u8005\u8aaa RMDBS \u4e2d\u7684\u4e3b\u7d22\u5f15\uff08primary index\uff09
\u5927\u5bb6\u53ef\u80fd\u5f88\u5e38\u4f7f\u7528\u5230\u7d22\u5f15\uff0c\u4f8b\u5982\uff1a user \u8868\u683c\u4e2d\u5e74\u7d00\u5c0f\u65bc 30 \u6b72\u4e14\u6708\u6536\u5165\u5927\u65bc 500 \u584a\u7684 user\u3002 \u6211\u5011\u8a2d\u8a08\u4e86\u5169\u500b\u7d22\u5f15\u5206\u5225\u662f\u5e74\u9f61\u548c\u6536\u5165\uff0c\u4f46
\u7d22\u5f15\u7684\u610f\u7fa9\u901a\u5e38\u662f\u8b93\u641c\u5c0b\u7684\u6b21\u6578\u5f9e n
\uff08\u8cc7\u6599\u7e3d\u6578\uff0c\u4f8b\u5982\u4e00\u767e\u842c\uff09\u8b8a\u6210 ln(n)
\uff08\u641c\u5c0b\u6b21\u6578\uff0c\u4f8b\u5982\u4e09\u6b21\uff09\uff0c \u5728\u627e\u5230\u7279\u5b9a\u7684\u8cc7\u6599\uff08\u7fa4\uff09\u4e4b\u5f8c\u4fbf\u7121\u6cd5\u4f7f\u7528 index\uff0c\u56e0\u70ba index \u8868\u683c\u7684\u5efa\u7acb\u90fd\u662f\u4ee5\u5168\u90e8\u8cc7\u6599\u70ba\u57fa\u790e\u3002
Info
\u7576\u7136\uff0c\u6709\u4e9b\u6a39\u72c0\u7d50\u69cb\uff08R-Tree\uff09\u5141\u8a31\u591a\u4f4d\u5143\u7684\u641c\u5c0b\uff0c\u4e0b\u9762\u6703\u505a\u4ecb\u7d39\u3002
[1,5,10]\n [1,3,5] [6,8,10]\n[1,2,3] [4,5] [6,7,8] [9,10]\n
\u4f8b\u5982\u4e0a\u8ff0\uff0c\u627e\u5230 1~3 \u4e4b\u5f8c\uff0c\u82e5\u9700\u8981\u5728\u505a filter\uff0c\u5247\u9700\u8981\u904d\u6b77\u8cc7\u6599\u624d\u80fd\u9054\u5230\u76ee\u7684\u3002
"},{"location":"feedback/designing-data-intensive-applications/foundation-index/#\u6563\u5217\u5f0f\u7d22\u5f15","title":"\u6563\u5217\u5f0f\u7d22\u5f15","text":"\u4ee5 in-memory \u7684\u65b9\u5f0f\u7d00\u9304 key \u4f4d\u7f6e\uff1a
key offset 1 411 42 3931,{\"a\":\"b\"}\n2,{\"c\":\"d\"}\n...\n42,{\"e\":\"f\"}\n1,{\"g\":\"h\"}\n
\u6bcf\u6b21\u66f4\u65b0\u6216\u65b0\u589e key-value \u6642\uff0c\u540c\u6642\u66f4\u65b0\u8a72 hash index\u3002
"},{"location":"feedback/designing-data-intensive-applications/foundation-index/#\u554f\u984c","title":"\u554f\u984c","text":"\u7576\u6a94\u6848\u9054\u5230\u4e00\u5b9a\u5927\u5c0f\u6642\uff1a
Info
\u6b64\u884c\u70ba\u662f\u5728\u80cc\u666f\u57f7\u884c\uff0c\u82e5\u57f7\u884c\u5230\u4e00\u534a\u6709\u8b80\u5beb\u7684\u8acb\u6c42\uff0c\u6703\u7e7c\u7e8c\u4f7f\u7528\u820a\u7684 segment\uff0c \u6700\u5f8c\u58d3\u7e2e\u6574\u5408\u5b8c\u7562\u5f8c\u624d\u4f7f\u7528\u65b0\u7684 segment\uff0c\u4e26\u628a\u820a\u7684 segment \u522a\u9664\u3002
\u641c\u5c0b\u6642\uff0c\u82e5\u5728 segment 1 \u4e2d\u7684 hash index \u627e\u4e0d\u5230\u8a72 key\uff0c\u5c31\u5f80\u4e0b\u4e00\u500b segment \u627e\u3002
"},{"location":"feedback/designing-data-intensive-applications/foundation-index/#\u7f3a\u9ede","title":"\u7f3a\u9ede","text":"animal
\u70ba\u958b\u982d\u7684\u9375\u503c\u6578\u91cf\u3002\u8a72\u67b6\u69cb\u539f\u5148\u7a31 Log-Structured Merge-Tree\uff08LSM-Tree\uff09\uff0c \u5f8c\u4fee\u6b63\u90e8\u5206\u884c\u70ba\u5f8c\u65bc \u8ad6\u6587\u4e2d\uff0c \u91cd\u65b0\u547d\u540d\u70ba\u6392\u5e8f\u5b57\u4e32\u8868\uff08 Sorted String Tables\uff0cSSTables\uff09\u3002
\u5982\u540c\u4e0a\u8ff0\u7684 Hash index\uff0c\u6703\u628a index \u5206\u6210\u597d\u5e7e\u500b segment \u6a94\u6848\u3002 SSTable \u5728\u5206\u6210\u4e0d\u540c segment \u7684\u540c\u6642\uff0c\u6703\u78ba\u4fdd\u6bcf\u500b segment \u7684 key \u662f\u7368\u7acb\uff08non-overlapping\uff09\u4e14\u6392\u5e8f\uff08sorted\uff09\u7684\u3002 \u9019\u6a23\u80fd\u78ba\u4fdd\u4ee5\u4e0b\u7279\u6027\uff1a
\u5728\u505a merge \u7684\u904e\u7a0b\uff0c\u53ef\u4ee5\u975e\u5e38\u6709\u6548\u7387\u4e14\u7701\u7a7a\u9593\uff1a
\u5132\u5b58 index \u6642\uff0c\u4e0d\u518d\u9700\u8981\u628a\u6bcf\u500b key \u90fd\u5b58\u8d77\u4f86\uff0c\u56e0\u70ba\u662f\u6392\u5e8f\u904e\u5f8c\u7684\uff0c\u5b58\u7279\u5b9a\u5e7e\u500b key \u518d\u5f9e\u4e2d\u9593\u627e\u5c31\u597d\uff1a | key | offset | | --- | ------ | | 1 | 0 | | 42 | 393 |
\u7576\u6211\u8981\u627e key 30
\u7684\u8cc7\u6599\u6642\uff0c\u53ea\u9700\u8981\u627e 0 \u5230 393 \u5373\u53ef\u3002
\u56e0\u70ba\u5132\u5b58\u7684 index \u662f\u758f\u6563\uff08sparse\uff09\u7684\uff0c\u6240\u4ee5\u5728 key \u548c key \u4e4b\u9593\u7684\u8cc7\u6599\u53ef\u4ee5\u9032\u884c\u58d3\u7e2e\uff1a \u4ee5\u4e0a\u8ff0\u7684\u8868\u683c\u70ba\u4f8b\uff0ckey 1
\u5230 key 42
\u4e4b\u9593\u7684\u8cc7\u6599\u9032\u884c\u58d3\u7e2e\uff08compress\uff09\u3002
\u7531\u4e0a\u8ff0\u7684\u4e00\u4e9b\u7279\u6027\uff0c\u53ef\u4ee5\u7e3d\u7d50 SSTables \u5728\u5be6\u4f5c\u4e0a\u7684\u7b56\u7565\u5982\u4e0b\uff1a
\u7576\u6a5f\u5668\u58de\u6389\u6642\uff0cin-memory \u7684\u8cc7\u6599\u5c31\u6703\u907a\u5931\uff1f
\u6bcf\u6b21\u65b0\u7684\u5beb\u5165\u9700\u6c42\uff0c\u90fd\u5373\u6642 append \u5230\u4e00\u500b\u7279\u6b8a\u6a94\u6848\u4e2d\uff0c\u4e14\u4e0d\u9700\u6392\u5e8f\uff0c \u6b64\u6a94\u6848\u6bcf\u6b21 in-memory \u88ab\u6e05\u7a7a\u6642\uff0c\u90fd\u6703\u8ddf\u8457\u6e05\u7a7a\u3002\u6b64\u6a94\u6848\u7684\u529f\u80fd\u53ea\u7528\u4f86\u7576\u6a5f\u5668\u91cd\u555f\u6642\uff0c \u91cd\u65b0\u653e\u9032 in-memory \u7684\u6a39\u72c0\u7d50\u69cb\u3002
"},{"location":"feedback/designing-data-intensive-applications/foundation-index/#sstable-\u61c9\u7528","title":"SSTable \u61c9\u7528","text":"Info
\u96d6\u7136 Lucene \u662f\u63d0\u4f9b\u5168\u6587\u6aa2\u7d22\u7684\u5f15\u64ce\uff0c\u5168\u6587\u6aa2\u7d22\u6bd4\u8d77 key-value \u7684\u6aa2\u7d22\u8981\u66f4\u70ba\u8907\u96dc\uff0c \u4f46\u5176\u908f\u8f2f\u985e\u4f3c\uff1a\u4ee5 search words \u4f5c\u70ba key\uff0c\u6587\u7ae0\u7684 ID \u4f5c\u70ba value\u3002
"},{"location":"feedback/designing-data-intensive-applications/foundation-index/#\u88dc\u5145","title":"\u88dc\u5145","text":"\u66f8\u4e2d\u63d0\u51fa\u5169\u7a2e\u65b9\u5f0f\uff0c\u6709\u8208\u8da3\u53ef\u4ee5\u5230\u9019\u88e1\u67e5\u770b\u66f4\u591a\u7b56\u7565\u3002
\u66f4\u591a\u8a73\u60c5\u53ef\u4ee5\u53c3\u8003 LevelDB \u7684\u5be6\u4f5c\u6587\u4ef6\u3002
"},{"location":"feedback/designing-data-intensive-applications/foundation-index/#b-tree","title":"B-Tree","text":"1970 \u5e74\u5c31\u8a2d\u8a08\u51fa\u7684\u6f14\u7b97\u6cd5\uff0c\u4e26\u88ab\u61c9\u7528\u65bc\u8cc7\u6599\u5eab\u4e2d\u3002\u800c\u9019\u4e5f\u662f\u8fd1\u4ee3\u8cc7\u6599\u5eab\u5728\u505a Index \u6642\u6700\u5e38\u4f7f\u7528\u7684\u6f14\u7b97\u6cd5\u3002
\u4e0a\u8ff0\u63d0\u5230\u7684\u65b9\u6cd5\u4e26\u4e0d\u6703\u53bb\u66f4\u65b0\u820a\u6709\u8cc7\u6599\uff0c\u53cd\u4e4b B-Tree \u5247\u6703\u53bb\u66f4\u65b0\u3002 \u4e5f\u5c31\u662f\u4ed6\u4e0d\u9700\u8981\u505a\u58d3\u7e2e\u548c\u6574\u5408\u7684\u52d5\u4f5c
\u628a\u8cc7\u6599\u5340\u5206\u6210\u591a\u500b\u5c0f\u584a\uff08blocks/page\uff09
ref \u6578\u91cf\u4ee3\u8868 branching factor\uff0c\u4ee5\u4e0a\u5716\u70ba\u4f8b\u5373\u662f 6\uff0c\u901a\u5e38\u6578\u91cf\u70ba\u6578\u767e\u3002 \u6bcf\u584a 4 KB\uff0cbranching factor 500\uff0c\u5171 4 \u5c64\uff0c\u53ef\u4ee5\u5b58 256 TB \u7684\u8cc7\u6599\u91cf
\u65b0\u589e\u6216\u7de8\u8f2f\u8cc7\u8a0a\u6642\uff0c\u76f4\u63a5\u53bb\u5230\u8a72 val
\u66f4\u65b0\u5373\u53ef\u3002 \u7576\u8d85\u904e branching factor \u7684\u5927\u5c0f\u6642\uff0c\u5c31\u6703\u5c0d\u534a\u62c6\u958b\u5f80\u4e0b\u4e00\u5c64\u653e\uff1a
\u7531\u4e0a\u8ff0\u4e5f\u5f88\u6e05\u695a\u53ef\u4ee5\u77e5\u9053\uff0c\u76f8\u6bd4\u65bc Log-Structure \u7684\u65b9\u5f0f\uff0cwrite \u7684\u6548\u7387\u6703\u8f03\u4f4e\u3002
"},{"location":"feedback/designing-data-intensive-applications/foundation-index/#\u5982\u4f55\u589e\u52a0\u7a69\u5b9a\u5ea6","title":"\u5982\u4f55\u589e\u52a0\u7a69\u5b9a\u5ea6","text":"\u7c21\u800c\u8a00\u4e4b\uff0c\u591a\u4e00\u7a2e\u52d5\u4f5c\uff0c\u591a\u4e00\u5c64\u8003\u616e
1970 \u5e74\u5230\u73fe\u5728\uff0c\u4e5f\u505a\u4e86\u5f88\u591a\u512a\u5316\uff1a
\u8cc7\u6599\u5eab\u6548\u80fd\u548c\u61c9\u7528\u7a0b\u5f0f\u7684\u985e\u578b\u6709\u975e\u5e38\u5bc6\u5207\u7684\u95dc\u4fc2\uff0c\u6240\u4ee5\u5217\u51fa\u4e00\u4e9b\u9ede\u53ef\u4ee5\u505a\u53c3\u8003\uff1a
\u7d30\u7bc0\uff1a
\u5f88\u591a\u60c5\u6cc1\u6211\u5011\u6703\u9700\u8981\u589e\u52a0\u9664\u4e86\u4e3b\u8981\u7d22\u5f15\u5916\u7684\u7d22\u5f15\uff0c\u6211\u5011\u7a31\u5176\u70ba \u6b21\u7d1a\u7d22\u5f15 \uff08secondary indexes\uff09\u3002 \u800c\u9019\u985e\u7684 index \u4e0d\u4e00\u5b9a\u9700\u8981 unique\uff0c\u4f8b\u5982\u4e0a\u8ff0\u4f8b\u5b50\u4e2d\u7684\u5e74\u9f61\u6216\u6708\u6536\u5165\u3002
\u9019\u7a2e\u60c5\u6cc1\u6709\u5169\u7a2e\u65b9\u5f0f\u53ef\u4ee5\u89e3\u6c7a\u53ef\u91cd\u8907\u6027\u7684\u7d22\u5f15\u3002
[user-1, user-10]
1_09123-*user data*
\u9664\u6b64\u4e4b\u5916\uff0c\u907f\u514d\u540c\u6b65\u7684\u56f0\u96e3\uff0c\u90fd\u4e0d\u6703\u628a\u5b8c\u6574\u8cc7\u6599\u653e\u5728\u591a\u500b index \u7684 tree \u4e2d\uff0c\u800c\u662f\u5b58\u9032
\u6240\u8b02\u7684\u5806\u7a4d\u6a94\uff08heap file\uff09\u5c31\u662f\u5b58\u653e\u591a\u500b\u76f8\u540c \u6b21\u7d1a\u7d22\u5f15 \u7684\u8cc7\u6599\u7684\u6a94\u6848\u3002
\u9019\u65b9\u6cd5\u4f7f\u7528\u8d77\u4f86\u5f88\u55ae\u7d14\uff0c\u56e0\u70ba\u7576\u6a94\u6848\u6709\u591a\u500b\u8cc7\u6599\u3002 \u4f8b\u5982\u4e0a\u8ff0\u4e2d\u7684 [user-1, user-10]
\uff0c\u5c31\u76f4\u63a5\u4ee5\u4e0b\u5217\u7684\u65b9\u5f0f\u505a\u5132\u5b58
# ID,Name,Year,Salary\n1,John,20,500\n10,Marry,20,550\n
\u800c \u4e3b\u7d22\u5f15 \u7684\u6a39\u72c0\u7d50\u69cb\u4e5f\u662f\u5132\u5b58 \u5806\u7a4d\u6a94 \u7684\u4f4d\u7f6e\u8cc7\u8a0a\u3002\u4f8b\u5982 user-10 \u7684 value \u53ef\u80fd\u5c31\u662f file1-40\uff08\u7b2c 40 \u500b byte \u958b\u59cb\u7b97\u8d77\uff09\u3002\u4f46\u662f\u7576\u8cc7\u6599\u66f4\u65b0\u6642\uff0c\u5c31\u9700\u8981
\u7fa4\u805a\u5f0f\u7d22\u5f15\uff08clustered index\uff09\u985e\u4f3c\u65bc \u4e3b\u7d22\u5f15 \uff0c\u5176\u610f\u7fa9\u4ee3\u8868\u5b58\u653e\u8cc7\u6599\u7684\u7d22\u5f15\u3002 \u7576\u900f\u904e \u6b21\u7d1a\u7d22\u5f15 \u627e\u5230\u7279\u5b9a\u8cc7\u6599\u7684\u7fa4\u805a\u5f0f\u7d22\u5f15\u6642\uff0c\u518d\u5229\u7528\u5176\u627e\u5230\u8cc7\u6599\u3002
\u4ee5 MySQL \u7684 InnoDB \u4f86\u8aaa\uff0c\u6bcf\u500b \u4e3b\u7d22\u5f15 \u5c31\u662f \u7fa4\u805a\u5f0f\u7d22\u5f15\u3002
\u4f46\u662f\u9019\u7a2e\u65b9\u5f0f\u6703\u9700\u8981\uff1a
\u6709\u4e9b\u5be6\u4f5c\uff0c\u6703\u5728 \u6b21\u7d1a\u7d22\u5f15 \u7684\u5730\u65b9\u5b58\u4e9b\u8cc7\u6599\uff08\u7a31\u5176\u70ba covering index\uff09\uff0c\u6709\u4e9b\u5be6\u4f5c\u53ea\u628a\u8cc7\u6599\u5b58\u5728 clustered index\u3002
cover \u4ee3\u8868\u7684\u610f\u601d\u5c31\u662f\uff0c\u96d6\u50c5\u5132\u5b58\u90e8\u5206\u7684\u8907\u5beb\u8cc7\u6599\uff0c\u4ed6\u537b\u53ef\u4ee5 cover \u4e00\u4e9b\u641c\u5c0b\u7d50\u679c\u3002 \u4f46\u662f covering index \u4e5f\u9700\u8981\u82b1\u4e00\u4e9b\u529f\u53bb\u7dad\u6301\u8cc7\u6599\u7684\u4e00\u81f4\u6027\u3002
"},{"location":"feedback/designing-data-intensive-applications/foundation-index/#\u591a\u6b04\u4f4d\u7d22\u5f15","title":"\u591a\u6b04\u4f4d\u7d22\u5f15","text":"\u4e0a\u8ff0\u6709\u63d0\u5230\u6bcf\u6b21 query \u53ea\u6703\u53c3\u8003\u4e00\u500b \u7d22\u5f15 \u3002\u4f46\u662f\u591a\u500b \u7d22\u5f15 \u53bb\u505a\u7be9\u9078\u6703\u5927\u5927\u52a0\u901f\u641c\u5c0b\u7684\u901f\u5ea6\uff0c\u8a72\u600e\u9ebc\u8fa6\uff1f
\u4f8b\u5982\uff1a\u6211\u8981\u641c\u5c0b\u7d93\u7def\u5ea6\u5728 51.5151
122.122122
\u7684\u5546\u5e97\u3002\u82e5\u662f\u4f7f\u7528\u55ae\u4e00\u628a\u7def\u5ea6\u4f5c \u7d22\u5f15 \uff0c \u5247\u53ef\u80fd\u641c\u5c0b\u5230\u6240\u6709\u7d93\u5ea6\u5728 -180~180
\u7bc4\u570d\u5167\u7684\u8cc7\u8a0a\uff0c\u641e\u5f97\u6709 \u7d22\u5f15 \u8ddf\u6c92 \u7d22\u5f15 \u4e00\u6a23\u3002
\u7c21\u55ae\u7684\u65b9\u5f0f\u662f\u4f7f\u7528 concatenated index\uff0c\u4e5f\u5c31\u662f\u628a\u5169\u500b \u7d22\u5f15 \u6574\u5408\u518d\u4e00\u8d77\u3002 \u4f8b\u5982\uff0c\u9700\u8981\u641c\u5c0b\u59d3\u548c\u540d\u4e00\u6a23\u7684\u4f7f\u7528\u8005\uff0c\u641c\u5c0b\u59d3\u548c\u540d\u7684 concatenated index\uff1a\u738b
\u5c0f\u660e
\uff0c \u4f46\u662f\u7576\u641c\u5c0b\u689d\u4ef6\u6539\u6210\u5c0f\u660e
\u738b
\uff1f
\u6bd4\u8d77 concatenated index\uff0c\u66f4\u5e38\u4f7f\u7528\u7684\u65b9\u5f0f\u662f\u91cd\u65b0\u8a2d\u8a08\u4e00\u500b\u5132\u5b58 index \u7684\u6a39\u72c0\u7d50\u69cb\uff1a R-Tree\u3002
\u5176\u4ed6\u53ef\u80fd\u9700\u8981\u591a\u7dad\u5ea6\u7684 \u7d22\u5f15 \u5834\u666f\u6709\uff1a
\u6709\u6642\u8981\u641c\u5c0b\u7684 \u7d22\u5f15 \u662f\u6587\u5b57\uff0c\u800c\u9019\u4e32\u6587\u5b57\u53c8\u662f\u4eba\u985e\u8a9e\u8a00\uff0c\u9019\u6642\u5728\u505a\u641c\u5c0b\u6642\u5c31\u53ef\u80fd\u9700\u8981\u8003\u616e\uff1a
\u5982\u540c \u6392\u5e8f\u5b57\u4e32\u8868 \u6703\u5229\u7528\u7a00\u758f\u7684\u9375\uff08sparse keys\uff09\u53bb\u6e1b\u5c11 Index \u7684\u5132\u5b58\u91cf\uff0c Lucene \u7684\u5168\u6587\u6aa2\u7d22\u8cc7\u6599\u5eab\u4e5f\u6703\u628a\u5b57\u8a5e\u7684\u90e8\u5206\u5b57\u5143\u4f5c\u70ba\u7a00\u758f\u7684\u9375 \uff08\u985e\u4f3c trie \u6a39\u72c0\u7d50\u69cb\uff091\uff0c\u52a0\u901f\u6a21\u7cca\u641c\u5c0b\uff08fuzzy search\uff09\u3002
\u5176\u4ed6\u985e\u578b\u7684 \u6a21\u7cca\u7d22\u5f15 \uff08fuzzy index\uff09\u7684\u6f14\u7b97\u6cd5\u53ef\u80fd\u70ba\u6587\u7ae0\u5206\u985e\u3001\u6a5f\u5668\u5b78\u7fd2\u7b49\u3002
"},{"location":"feedback/designing-data-intensive-applications/foundation-index/#\u5167\u5b58\u8cc7\u6599\u5eab","title":"\u5167\u5b58\u8cc7\u6599\u5eab","text":"\u628a\u8cc7\u6599\u5b58\u9032\u6a94\u6848\uff08filesystem\uff09\u548c\u628a\u8cc7\u6599\u90fd\u5b58\u9032\u5167\u5b58\u8a18\u61b6\u9ad4\uff08RAM\uff09\u6bd4\uff0c\u6709\u5169\u500b\u597d\u8655
\u4f46\u662f\u70ba\u4e86\u89e3\u6c7a filesystem \u5728\u8b80\u5beb\u7684\u6548\u7387\u5e73\u8861\uff0c\u767c\u5c55\u4e86\u5f88\u591a\u6a5f\u5236\uff1aIndex\u3001File \u5927\u5c0f\u548c\u6578\u91cf\u7b49\u7b49\u3002
\u8fd1\u4f86 RAM \u8d8a\u4f86\u8d8a\u4fbf\u5b9c\uff0c\u4e14\u82e5\u8cc7\u6599\u5eab\u4e26\u4e0d\u9700\u8981\u5132\u5b58\u5927\u578b\u8cc7\u6599\uff0c \u9019\u6642\u4fbf\u767c\u5c55\u51fa\u5167\u5b58\u8cc7\u6599\u5eab\uff08in-memory database\uff09\uff0c\u5176\u7a2e\u985e\u5927\u81f4\u5206\u5169\u7a2e\uff1a
\u5167\u5b58\u8cc7\u6599\u5eab\u4e0d\u50c5\u50c5\u56e0\u70ba\u8b80\u53d6\u6642\u4e0d\u63a5\u89f8 filesystem\uff0c\u5176\u5132\u5b58\u7684\u6a94\u6848\u683c\u5f0f\u5df2\u7d93\u7d93\u904e\u89e3\u6790\uff08parse\uff09\uff0c \u964d\u4f4e\u4e86\u89e3\u6790\u6240\u9700\u6d88\u8017\u7684\u6548\u80fd\u3002\u9019\u540c\u6642\u4e5f\u8b93\u5167\u5b58\u8cc7\u6599\u5eab\u5141\u8a31\u66f4\u591a\u7a2e\u985e\u7684\u5132\u5b58\uff0c\u4f8b\u5982\u4f47\u5217\uff08queue\uff09\u6216\u53e2\u96c6\uff08set\uff09\u3002
\u9664\u6b64\u4e4b\u5916\uff0c\u8fd1\u4f86\u4e5f\u6709\u9700\u591a\u7814\u7a76\uff0c\u8b93\u5167\u5b58\u8cc7\u6599\u5eab\u4e0d\u518d\u53d7\u9650\u65bc\u5167\u5b58\u8a18\u61b6\u9ad4\u7684\u5927\u5c0f\uff0c\u7576\u5927\u5c0f\u8d85\u51fa\u5176\u8ca0\u8377\u6642\uff0c \u8cc7\u6599\u5eab\u6703\u628a\u6700\u4e45\u6c92\u5b58\u53d6\u7684\u8cc7\u6599\u653e\u9032 filesystem \u4e2d\uff0c\u985e\u4f3c OS \u5728\u64cd\u4f5c\u5927\u578b\u8cc7\u6599\u6642\u7684\u505a\u6cd5\uff0c \u7136\u800c\u537b\u66f4\u70ba\u7cbe\u6e96\uff0c\u800c\u975e\u4e00\u6b21\u50c5\u80fd\u63a7\u5236\u4e00\u7d44\u8a18\u61b6\u9ad4\u5340\u584a\u3002
http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.16.652 \u21a9
\u958b\u767c\u61c9\u7528\u7a0b\u5f0f\u6642\uff0c\u6211\u5011\u6240\u9078\u64c7\u7684\u8cc7\u6599\u6a21\u578b\u7a2e\u985e\uff0c\u6c7a\u5b9a\u6211\u5011\u5982\u4f55\u770b\u5f85\u554f\u984c\u3002
HackMD \u5831\u544a
\u5927\u81f4\u4e0a\u6211\u5011\u5c08\u6ce8\u65bc\u4ee5\u4e0b\u56db\u7a2e\u6a21\u578b\uff0c\u6587\u672b\u6703\u5728\u63d0\u5230\u5176\u4ed6\u6a21\u578b\u3002
\u4e00\u958b\u59cb\u8cc7\u6599\u5132\u5b58\u50c5\u4ee5 Hierarchical Tree \u7684\u5f62\u5f0f\u5132\u5b58\u8cc7\u6599\uff0c \u4f46\u662f\u7576\u9700\u8981\u8003\u616e\u5230\u591a\u5c0d\u591a\uff08many-to-many\uff09\u7684\u95dc\u4fc2\u6642\uff0c\u5c31\u958b\u59cb\u51fa\u73fe\u56f0\u5883\u3002
\u800c\u5f8c\uff0c\u7576\u95dc\u806f\u5f0f\u6a21\u578b\u4e0d\u518d\u6eff\u8db3\u9700\u6c42\uff0c\u4f8b\u5982\uff1a\u8cc7\u6599\u683c\u5f0f\u4e0d\u60f3\u8981\u591a\u505a\u4e00\u5c64\u8f49\u63db\u3001\u7121\u6cd5\u5feb\u901f\u505a scaling \u7b49\u7b49\u6642\uff0c\u4fbf\u76f8\u7e7c\u767c\u5c55\u51fa\u5176\u4ed6\u6a21\u578b\u3002
"},{"location":"feedback/designing-data-intensive-applications/foundation-model/#\u95dc\u4fc2","title":"\u95dc\u4fc2","text":"\u8cc7\u6599\u548c\u8cc7\u6599\u4e4b\u9593\u7684\u95dc\u4fc2\uff0c\u6703\u6c7a\u5b9a\u4f60\u61c9\u8a72\u7528\u54ea\u7a2e\u6a21\u578b\u3002\u6240\u4ee5\u6211\u5011\u5148\u4f86\u68b3\u7406\u4e00\u4e0b\u8cc7\u6599\u5eab\u4e2d\u6703\u6709\u7684\u95dc\u4fc2\u5427\uff01
"},{"location":"feedback/designing-data-intensive-applications/foundation-model/#\u4e00\u5c0d\u591a","title":"\u4e00\u5c0d\u591a","text":"\u9019\u7a2e\u72c0\u6cc1\u5176\u5be6\u5f88\u9069\u5408\u968e\u5c64\u5f0f\u6a39\u72c0\u7d50\u69cb\u548c\u6587\u4ef6\u5f0f\u6a21\u578b\u3002
"},{"location":"feedback/designing-data-intensive-applications/foundation-model/#\u591a\u5c0d\u4e00\u591a","title":"\u591a\u5c0d\u4e00\uff08\u591a\uff09","text":"\u300c\u591a\u5c0d\u4e00\u300d\u548c\u300c\u591a\u5c0d\u591a\u300d\u5f88\u50cf\uff0c\u82e5\u8cbc\u6587\u53ea\u770b\u4e00\u500b\uff0c\u5c31\u662f\u300c\u591a\u5c0d\u4e00\u300d\u3002
\u968e\u5c64\u5f0f\u6a39\u72c0\u7d50\u69cb\u548c\u6587\u4ef6\u5f0f\u7d50\u69cb\u5728\u9019\u7a2e\u72c0\u6cc1\u4e0b\u96e3\u4ee5\u5132\u5b58\uff0c\u4e14\u96e3\u4ee5 query\u3002\u5be6\u969b\u5c31\u6703\u9700\u8981\u4f7f\u7528\u8ff4\u5708\u4f86\u64b0\u5beb\u3002
"},{"location":"feedback/designing-data-intensive-applications/foundation-model/#\u968e\u5c64\u5f0f\u6a39\u72c0\u7d50\u69cb","title":"\u968e\u5c64\u5f0f\u6a39\u72c0\u7d50\u69cb","text":"Conference on Data System Language(CODASYL)\u662f\u65e9\u671f\u767c\u5c55\u7684\u968e\u5c64\u5f0f\u6a39\u72c0\u7d50\u69cb\u641c\u5c0b\u8a9e\u8a00\u3002
\u6bcf\u500b\u8a3b\u518a\u8005\u7576\u4f5c\u4e00\u500b\u6a39\uff0c\u8a3b\u518a\u8005\u6703\u6709\u5e74\u7d00\u548c\u8077\u696d\u3002\u4e0b\u5217\u7a0b\u5f0f\u78bc\u7684\u76ee\u7684\u662f\u627e\u5230\u300c\u5e74\u8f15\u7684\u8a3b\u518a\u8005\u7684\u8077\u696d\u300d\u3002
MOVE 'ACCOUNTANT' TO TITLE IN JOB.\nFIND FIRST JOB USING TITLE.\n IF NOT-FOUND GO TO EXIT.\n FIND FIRST EMP WITHIN ASSIGN.\n IF END-OF-SET GO TO 0.\n GET EMP.\n IF EMP.BIRTHYR I 1950 GO TO N.\n FIND OWNER WITHIN WORKS-IN.\n GET DEPT.\n ...\n FIND NEXT EMP WITHIN ASSIGN.\n GO TO M.\n FIND NEXT JOB USING TITLE.\n GO TO L.\nEXIT.\n
Quote
RH Katz.: \"Decompiling CODASYL DML into Relational Queries.\", 1982
\u7531\u6b64\u53ef\u4ee5\u770b\u51fa\uff0c\u968e\u5c64\u5f0f\u6a39\u72c0\u7d50\u69cb\u5728\u505a\u9019\u7a2e\u8ca0\u8cac\u7684\u95dc\u806f\u6027\u7684\u641c\u5c0b\uff0c\u5e38\u5e38\u611b\u83ab\u80fd\u52a9\u3002
"},{"location":"feedback/designing-data-intensive-applications/foundation-model/#\u95dc\u806f\u5f0f\u6a21\u578b","title":"\u95dc\u806f\u5f0f\u6a21\u578b","text":"Edgar Codd \u5728 1970 \u7684 A Relational Model of Data for Large Shared Data Banks\u8ad6\u6587\u4e2d\u63d0\u5230\uff0c\u95dc\u806f\u5f0f\u6a21\u578b\u7684\u5b9a\u7fa9\uff1a
\u56e0\u70ba\u95dc\u4fc2\u88ab\u62bd\u51fa\u4f86\u4e86\uff0c\u4e0d\u518d\u6709\u8907\u96dc\u7684\u8def\u5f91\u9700\u8981\u53bb\u63a2\u7d22\u3002\u53cd\u4e4b\uff0c\u56e0\u70ba\u8cc7\u6599\u90fd\u88ab\u5b58\u653e\u5728\u540c\u4e00\u95dc\u4fc2\u4e0b\uff0c\u7be9\u9078\uff08WHERE
\uff09\u548c\u8abf\u6574\u9806\u5e8f\uff08SORT BY
\uff09\u5c31\u8b8a\u5f97\u5f88\u55ae\u7d14\u3002
\u9664\u6b64\u4e4b\u5916\uff0c\u900f\u904e\u806f\u5408\uff08JOIN
\uff09\u53ef\u4ee5\u628a\u4e0d\u540c\u7684\u95dc\u4fc2\u6574\u5408\u5728\u4e00\u8d77\u3002\u9664\u4e86\u89e3\u6c7a\u591a\u5c0d\u591a\u7684\u95dc\u4fc2\u4e4b\u5916\uff0c\u4e5f\u53ef\u4ee5\u907f\u514d\u61c9\u7528\u7a0b\u5f0f\u53bb\u8003\u616e\u4e00\u81f4\u6027\uff08consistency\uff09\u3002\u4f8b\u5982\uff1a
\u6bcf\u500b\u4f7f\u7528\u8005\u5c0d\u61c9\u4e00\u500b\u4ed6\u73fe\u5728\u7684\u8077\u7a31\uff0c\u5728\u95dc\u806f\u5f0f\u4e2d\u662f\u900f\u904e\u4e0d\u540c\u95dc\u4fc2\uff08table\uff09\u7684 ID \u53bb\u505a\u9023\u7d50\uff0c\u6240\u4ee5\u8077\u7a31\u6539\u8b8a\u53ea\u9700\u8981\u8abf\u6574\u8077\u7a31\u7684\u95dc\u4fc2\u88e1\u7684\u6587\u5b57\u5c31\u53ef\u4ee5\u6539\u8b8a\u6240\u6709\u548c\u5176\u5c0d\u61c9\u7684\u4f7f\u7528\u8005\u8077\u7a31\u3002
"},{"location":"feedback/designing-data-intensive-applications/foundation-model/#\u67e5\u8a62\u6700\u4f73\u5316\u5668","title":"\u67e5\u8a62\u6700\u4f73\u5316\u5668","text":"\u6211\u5011\u524d\u9762\u770b\u5230\u968e\u5c64\u5f0f\u7684\u6a39\u72c0\u7d50\u69cb\u5728\u505a\u641c\u5c0b\u6642\uff0c\u662f\u6bcf\u4e00\u500b\u9700\u6c42\u90fd\u8981\u8a2d\u8a08\u4e00\u500b\u908f\u8f2f\uff0c\u7136\u800c\u95dc\u806f\u5f0f\u537b\u4e0d\u540c\u3002
SQL \u662f\u95dc\u806f\u5f0f\u6a21\u578b\u5728\u505a\u641c\u5c0b\u8a9e\u8a00\u6642\u7684\u4e00\u7a2e\u5354\u5b9a\u3002SQL \u5728\u63a8\u51fa\u6642\u6709\u500b\u5275\u65b0\u601d\u8003\uff1a\u900f\u904e\u4e00\u500b\u6cdb\u7528\u7684\u6700\u4f73\u5316\u5668\uff0c\u8b93\u4f60\u53ef\u4ee5\u7528\u62bd\u8c61\u7684\u65b9\u5f0f\u53bb\u67e5\u8a62\uff0c\u800c\u975e\u6bcf\u6b21\u641c\u5c0b\u90fd\u8981\u8a2d\u8a08\u4e00\u7a2e\u3002\u62bd\u8c61\u5316\u7684\u65b9\u5f0f\u548c\u547d\u4ee4\u5f0f\u6bd4\u8f03\u7d30\u7684\u6bd4\u8f03\u5f85\u6703\u6703\u5728\u67e5\u8a62\u8a9e\u8a00\u4e2d\u8a0e\u8ad6\u3002
\u9019\u88e1\u91cd\u9ede\u662f\uff0c\u900f\u904e\u67e5\u8a62\u6700\u4f73\u5316\u5668\uff0c\u5de5\u7a0b\u5e2b\u4e0d\u518d\u9700\u8981\u6839\u64da\u5404\u500b\u67e5\u8a62\uff08\u67e5\u6587\u7ae0\u3001\u67e5\u7559\u8a00\uff09\uff0c\u53bb\u8a2d\u5b9a\u7368\u7acb\u7684\u641c\u5c0b\u6a5f\u5236\uff0c\u50cf\u4e0a\u9762\u7684\u6a39\u72c0\u7d50\u69cb\u90a3\u822c\u3002
\u7d50\u8ad6\u5c31\u662f\u6bd4\u8d77\u8b93\u5927\u5bb6\u5728\u5404\u81ea\u7684\u8acb\u6c42\u4e2d\uff0c\u8a2d\u8a08\u4e00\u500b\u641c\u5c0b\u6a5f\u5236\uff0c\u4e0d\u5982\u82b1\u5f88\u591a\u5fc3\u529b\u53bb\u5efa\u7acb\u4e00\u500b\u6cdb\u7528\u7684\u641c\u5c0b\u5de5\u5177\u3002\u800c\u6b77\u53f2\u8b49\u660e\u9019\u500b\u65b9\u5411\u662f\u5927\u5bb6\u8f03\u80fd\u63a5\u53d7\u7684\u3002
"},{"location":"feedback/designing-data-intensive-applications/foundation-model/#\u6587\u4ef6\u5f0f\u6a21\u578b","title":"\u6587\u4ef6\u5f0f\u6a21\u578b","text":"\u9019\u6a23\u770b\u8d77\u4f86\uff0c\u6587\u4ef6\u5f0f\u6a21\u578b\u597d\u50cf\u53c8\u5982\u540c\u6a39\u72c0\u7d50\u69cb\u8cc7\u6599\u90a3\u822c\uff0c\u6709\u4e00\u4e9b\u67e5\u8a62\u4e0a\u7684\u5148\u5929\u7f3a\u5931\uff0c\u4ed6\u8d70\u56de\u982d\u8def\u4e86\u55ce\uff1f
\u78ba\u5be6\u4ed6\u5728\u591a\u5c0d\u591a\u6216\u591a\u5c0d\u4e00\u500b\u95dc\u4fc2\u4e2d\u4ecd\u7136\u4e0d\u50cf\u95dc\u806f\u5f0f\u6a21\u578b\u90a3\u9ebc\u65b9\u4fbf\uff0c\u5373\u4f7f\u73fe\u5728\u6709\u4e9b\u6280\u8853\u5e6b\u52a9\u4ed6\u8b93\u4e0d\u540c\u6587\u4ef6\u505a\u806f\u5408\uff0c\u4f8b\u5982\u900f\u904e\u6587\u4ef6\u53c3\u8003\uff08document reference\uff09\u3002
\u4f46\u662f\uff0c\u56e0\u70ba\u4ed6\u5728\u8655\u7406\u4e00\u5c0d\u591a\u7684\u95dc\u4fc2\u6642\u975e\u5e38\u55ae\u7d14\uff0c\u4e0d\u6703\u50cf\u95dc\u806f\u5f0f\u4e00\u6a23\u6709\u5404\u7a2e join \u548c group\uff0c\u8b93\u4ed6\u5728\u5206\u6563\u5f0f\u7684\u8cc7\u6599\u5eab\u4e0b\u975e\u5e38\u597d\u505a\uff0c\u9019\u6703\u5728\u6211\u5011\u5f8c\u9762\u505a\u8907\u88fd\uff08replication\uff09\u548c\u5206\u5340\uff08partition\uff09\u6642\u548c\u8003\u616e\u7af6\u8cfd\u72c0\u6cc1\u6642\u66f4\u80fd\u9ad4\u6703\u5230\u3002
\u9664\u6b64\u4e4b\u5916\uff0c\u9084\u6709\u7db1\u76ee\u4e5f\u4e0d\u592a\u4e00\u6a23\u3002
"},{"location":"feedback/designing-data-intensive-applications/foundation-model/#\u7db1\u76eeschema","title":"\u7db1\u76ee\uff08schema\uff09","text":"\u6211\u5011\u76f4\u63a5\u4f86\u770b\u770b\u5be6\u969b\u5728\u53d6\u5f97\u300c\u4f7f\u7528\u8005 ID 123 \u7684\u7b2c\u4e09\u500b\u5de5\u4f5c\u7d93\u6b77\u300d\u7684\u8cc7\u6599\u6642\u4e0d\u540c\u6a21\u578b\u7684\u641c\u5c0b\u65b9\u5f0f\u3002
\u95dc\u806f\u5f0f\u6a21\u578b
SELECT experience FROM experience_relation WHERE use_id=123 AND index=3\n
\u6587\u4ef6\u5f0f\u6a21\u578b
db.get(\"users.123.experiences.3\");\n
\u5169\u7a2e\u4e0d\u540c\u7684\u53d6\u5f97\u65b9\u5f0f\uff0c\u5c31\u53ef\u4ee5\u611f\u53d7\u5230\u6587\u4ef6\u5f0f\u548c\u95dc\u806f\u5f0f\u8cc7\u6599\u5eab\u7684\u5132\u5b58\u65b9\u5f0f\u5dee\u7570\u3002
\u95dc\u806f\u5f0f\u6a21\u578b\u9700\u8981\u95dc\u4fc2\u4e2d\u6240\u6709\u7684\u7d44\u5408\uff08row\uff09\u90fd\u8981\u6709 user_id \u548c index\u3002\u6240\u4ee5\u7576\u4f60\u65b0\u589e\u6b04\u4f4d\u7684\u6642\u5019\uff0c\u6240\u6709\u820a\u7684\u7d44\u5408\u90fd\u6703\u9700\u8981\u66f4\u65b0\u4ed6\u7684\u503c\u4f86\u4fdd\u6301\u683c\u5f0f\u7684\u4e00\u81f4\u6027\u3002\u96d6\u7136\u5927\u90e8\u5206\u8cc7\u6599\u5eab\u90fd\u6703\u8b93\u9019\u6a5f\u5236\u505a\u6bd4\u8f03\u8edf\u6027\u7684\u9650\u5236\uff0c\u4f8b\u5982\u9810\u8a2d\u6240\u6709\u820a\u7684\u8cc7\u6599\u70ba null \u6642\uff0c\u4e0d\u6703\u5f37\u5236\u8b93\u8cc7\u6599\u91cd\u6d17\u4e00\u904d\uff08MySQL \u9664\u5916\uff09\u3002
\u6587\u4ef6\u5f0f\u6a21\u578b\u5247\u662f\u6240\u6709\u8cc7\u6599\u683c\u5f0f\u4e0d\u5fc5\u4e00\u81f4\uff0c\u50c5\u5728\u6211\u8b80\u53d6\u7684\u6642\u5019\u6211\u9810\u8a2d\u4ed6\u61c9\u8a72\u8981\u6709\u503c\u3002
\u6240\u4ee5\u7e3d\u7d50\u95dc\u806f\u5f0f\u6a21\u578b\u6703\u5728\u5beb\u5165\u7684\u6642\u5019\u5c31\u8981\u6c42\u8cc7\u6599\u4fdd\u6709\u4e00\u5b9a\u683c\u5f0f\uff0c\u6211\u5011\u7a31\u70ba schema-on-write\u3002
\u53cd\u4e4b\u6587\u4ef6\u5f0f\u6a21\u578b\uff0c\u5728\u8b80\u53d6\u6642\uff0c\u61c9\u7528\u7a0b\u5f0f\u6703\u9810\u8a2d\u4ed6\u6709\u67d0\u4e9b\u8cc7\u6599\u3002\u8981\u6ce8\u610f\uff0c\u6587\u4ef6\u5f0f\u6a21\u578b\u4e26\u975e\u6c92\u6709\u7db1\u76ee\uff0c\u800c\u662f\u9019\u500b\u7db1\u76ee\u8f03\u70ba\u96b1\u6666\uff0c\u662f\u61c9\u7528\u7a0b\u5f0f\u5728\u8b80\u53d6\u8cc7\u6599\u6642\u53bb\u5b9a\u7fa9\u7684\uff0c\u6211\u5011\u7a31\u70ba schema-on-read\u3002
\u9664\u6b64\u4e4b\u5916\uff0c\u7576\u7db1\u76ee\u66f4\u65b0\u7684\u6642\u5019\uff0c\u7b2c\u4e00\u7a2e\u9664\u4e86\u5728\u61c9\u7528\u7a0b\u5f0f\u505a\u8abf\u6574\u5916\u4e5f\u6703\u9700\u8981\u5728\u8cc7\u6599\u5eab\u505a\u624b\u8173\uff0c\u7b2c\u4e8c\u7a2e\u50c5\u9700\u5728\u61c9\u7528\u7a0b\u5f0f\u505a\u624b\u8173\u3002
\u6709\u4ec0\u9ebc\u5dee\u5225\uff1f
\u9019\u6bb5\u7d30\u7bc0\u6703\u5728\u7de8\u78bc\u548c\u9032\u7a0b\u505a\u66f4\u6df1\u7684\u8a0e\u8ad6
"},{"location":"feedback/designing-data-intensive-applications/foundation-model/#\u9664\u6b64\u4e4b\u5916","title":"\u9664\u6b64\u4e4b\u5916","text":"\u95dc\u806f\u5f0f\u8cc7\u6599\u5eab\u548c\u6587\u4ef6\u5f0f\u8cc7\u6599\u5eab\u7684\u6bd4\u8f03\u9664\u4e86\u4e0a\u8ff0\u63d0\u5230\u7684\uff0c\u9084\u6709
\u8cc7\u6599\u5c40\u90e8\u6027\u662f\u4ec0\u9ebc\uff1f\u5982\u679c\u4f60\u7684\u61c9\u7528\u7a0b\u5f0f\u9700\u8981\u62ff\u5b8c\u6574\u8cc7\u6599\u4f86\u505a\u904b\u7b97\uff0c\u4f8b\u5982\uff1a\u4f60\u8981\u505a\u9ede\u9910\u7684\u7cfb\u7d71\uff0c\u4f60\u6703\u9700\u8981\u628a\u8a2d\u8a08\u597d\u7684\u83dc\u55ae\u62ff\u4f86\u6e32\u67d3\u51fa\u9ede\u9910\u9801\u9762\u3002\u76f8\u5c0d\u95dc\u806f\u5f0f\u8cc7\u6599\u5eab\u9700\u8981\u5404\u7a2e\u806f\u5408\uff08join\uff09\u548c\u53d6\u5f97\u4e0d\u540c table \u7684\u8cc7\u6599\uff0c\u6587\u4ef6\u5f0f\u8cc7\u6599\u53ea\u8981\u62ff\u4e00\u6b21\u5c31\u53ef\u4ee5\u3002\u9019\u5c31\u662f\u8cc7\u6599\u5c40\u90e8\u6027\uff0c\u5b8c\u6574\u7684\u8cc7\u6599\u5728\u672c\u5730\u4f4d\u7f6e\u5c31\u53ef\u4ee5\u53d6\u5f97\uff0c\u4e0d\u9700\u8981\u518d\u53bb\u548c\u5176\u4ed6\u4f4d\u7f6e\u62ff\u3002
\u518d\u4f86\uff0c\u95dc\u806f\u5f0f\u8cc7\u6599\u5eab\u901a\u5e38\u90fd\u9700\u8981\u61c9\u7528\u7a0b\u5f0f\u53bb\u8f49\u63db\u8cc7\u6599\u7684\u683c\u5f0f\u3002\u56e0\u70ba\u4f60\u5f9e\u8cc7\u6599\u5eab\u62ff\u5230\u7684\u53ea\u6703\u662f k-v \u7684\u7d44\u5408\uff0c\u800c\u4e00\u822c\u7a0b\u5f0f\u78bc\u4f7f\u7528\u7684\u90fd\u662f class \u6216\u662f map/array \u7b49\u7b49\u3002\u9019\u908a\u4e5f\u53ef\u4ee5\u770b\u5230\u6587\u4ef6\u5f0f\u6a21\u578b\u7684\u512a\u52e2\u3002
\u7b2c\u4e09\u9ede\u662f\u601d\u60f3\u8f49\u63db\uff0c\u5982\u679c\u4ee5\u524d\u7528\u95dc\u806f\u5f0f\u8cc7\u6599\u5eab\u7528\u7684\u5f88\u7fd2\u6163\uff0c\u6587\u4ef6\u5f0f\u8cc7\u6599\u5eab\u6703\u5c11\u4e86\u4e00\u4e9b\u591a\u5c0d\u591a\u7684\u9023\u7d50\u3002\u9019\u5728\u8a2d\u8a08\u61c9\u7528\u7a0b\u5f0f\u7684\u6642\u5019\u9700\u8981\u8003\u616e\uff0c\u9019\u662f\u6211\u6839\u64da\u5be6\u52d9\u7d93\u9a57\u5f97\u51fa\u7684\u611f\u60f3\u3002\u4f8b\u5982 Firestore \u662f\u9069\u7528\u5728\u651c\u5e36\u578b\u88dd\u7f6e\uff08mobile device\uff09\u7684\u6587\u4ef6\u5f0f\u8cc7\u6599\u5eab\u3002\u4ed6\u70ba\u4e86\u8b93\u4e0d\u540c\u7684\u88dd\u7f6e\u3001\u61c9\u7528\u7a0b\u5f0f\u540c\u6b65\u8cc7\u6599\uff0c\u8a2d\u8a08\u6210\u6587\u4ef6\u5f0f\u8cc7\u6599\u5eab\u6703\u8b93\u4ed6\u597d\u7528\u5f88\u591a\uff0c\u4f46\u4e5f\u5c11\u4e86\u95dc\u806f\u5f0f\u8cc7\u6599\u5eab\u53ef\u4ee5\u7684\u4e00\u4e9b\u7279\u6027\u3002
"},{"location":"feedback/designing-data-intensive-applications/foundation-model/#\u6536\u6582","title":"\u6536\u6582","text":"\u96a8\u8457\u6642\u9593\u6f14\u9032\uff0c\u5169\u500b\u6a21\u578b\u76f8\u4f3c\u6027\u5176\u5be6\u8d8a\u4f86\u8d8a\u50cf\uff1a
\u524d\u9762\u6211\u5011\u6709\u63d0\u5230\u8cc7\u6599\u7684\u95dc\u4fc2\u6703\u6c7a\u5b9a\u4f7f\u7528\u7684\u6a21\u578b\u3002
\u7576\u8cc7\u6599\u6709\u5f88\u591a\u4e00\u5c0d\u591a\u7684\u95dc\u4fc2\u6642\uff0c\u6587\u4ef6\u5f0f\u6a21\u578b\u5c31\u5f88\u9069\u5408\u3002\u53cd\u4e4b\uff0c\u7c21\u55ae\u7684\u591a\u5c0d\u591a\uff0c\u95dc\u806f\u5f0f\u8cc7\u6599\u5eab\u5c31\u53ef\u4ee5\u8f15\u6613\u4e0a\u624b\u3002
\u4f46\u662f\u7576\u8cc7\u6599\u6709\u5927\u91cf\u591a\u5c0d\u591a\u7684\u95dc\u4fc2\u6642\uff0c\u5c31\u9700\u8981\u8003\u616e\u5176\u4ed6\u7684\u65b9\u5f0f\u3002
"},{"location":"feedback/designing-data-intensive-applications/foundation-model/#\u591a\u5c0d\u591a","title":"\u591a\u5c0d\u591a","text":"\u591a\u5c0d\u591a\u7684\u95dc\u4fc2\u53ef\u88ab\u767c\u73fe\u65bc\uff1a
\u96d6\u7136\u4f8b\u5b50\u90fd\u662f\u540c\u503c\u6027\u8cc7\u6599\u7684\u61c9\u7528\uff0c\u4f46\u662f\u5be6\u969b\u4e0a\uff0c\u6bcf\u500b\u7bc0\u9ede\u53ef\u4ee5\u4e0d\u662f\u540c\u503c\u6027\u7684\u8cc7\u6599\u3002\u4f8b\u5982 Facebook \u7684\u5716\u50cf\u5f0f\u6a21\u578b\u6703\u628a\u4f7f\u7528\u8005\u7684\u4e8b\u4ef6\u3001\u4f4d\u7f6e\u3001\u6253\u5361\u3001\u7559\u8a00\u7b49\u7b49\u7576\u6210\u7bc0\u9ede\uff0c\u4e26\u5b58\u6210\u4e00\u5f35\u5927\u8868\u3002
\u4ee5\u66f8\u4e2d\u7bc4\u4f8b\u4f86\u505a\u8b1b\u89e3\uff0c\u7bc0\u9ede\u53ef\u4ee5\u662f\u4eba\u6216\u662f\u4f4d\u7f6e\uff0c\u4e26\u975e\u540c\u503c\u6027\u7684\u8cc7\u6599\u3002
\u9019\u908a\u4e5f\u53ef\u4ee5\u6ce8\u610f\u5230\u56e0\u70ba\u6bcf\u500b\u570b\u5bb6\u5c0d\u65bc\u5730\u5340\u7684\u5206\u754c\u6709\u4e0d\u540c\u540d\u7a31\uff0c\u6cd5\u570b\u7684 departement \u548c\u82f1\u570b\u7684 country\uff0c\u96d6\u7136\u5728\u9019\u5f35\u8868\u4e2d\u5c64\u7d1a\u4e00\u6a23\uff0c\u4f46\u662f\u610f\u7fa9\u53ef\u80fd\u4e0d\u4e00\u6a23\u3002\u4f60\u53ef\u4ee5\u60f3\u50cf\u5982\u679c\u662f\u505a\u6210\u95dc\u806f\u5f0f\u8cc7\u6599\u5eab\uff0c\u5730\u5340\u7684\u8868\u5c31\u6703\u9700\u8981\u6709\u5f88\u591a\u6b04\u4f4d\u3002
\u518d\u4f86\u770b\u7dda\uff0c\u6bcf\u500b\u7dda\u56e0\u70ba\u4ee3\u8868\u8457\u9ede\u548c\u9ede\u7684\u95dc\u4fc2\uff0c\u6240\u4ee5\u53ef\u4ee5\u6709\u4e0d\u540c\u610f\u7fa9\u3002
\u9019\u88e1\u6709\u5e7e\u9ede\u8981\u6ce8\u610f\uff1a
\u9019\u6a23\u505a\u9664\u4e86\u53ef\u4ee5\u4fdd\u6301\u8cc7\u6599\u5eab\u7d50\u69cb\u7684\u4e7e\u6de8\uff0c\u4e0d\u9700\u8981\u4e00\u76f4\u8abf\u6574\u7db1\u76ee\u5916\uff0c\u4e5f\u8ce6\u4e88\u5716\u50cf\u5f0f\u6a21\u578b\u5f88\u5927\u7684\u5f48\u6027\uff0c\u4f8b\u5982\uff1a
\u6211\u5011\u5c0d\u5716\u50cf\u5f0f\u6a21\u578b\u6709\u500b\u6982\u5ff5\u4e4b\u5f8c\uff0c\u5c31\u4f86\u770b\u770b\u4ed6\u6709\u54ea\u4e9b\u5be6\u4f5c\u3002
"},{"location":"feedback/designing-data-intensive-applications/foundation-model/#\u5716\u50cf\u5f0f\u6a21\u578b\u7a2e\u985e","title":"\u5716\u50cf\u5f0f\u6a21\u578b\u7a2e\u985e","text":"\u6211\u5011\u6703\u4f86\u4ecb\u7d39\u4e00\u4e0b\u5716\u50cf\u5f0f\u6a21\u578b\u7684\u5169\u7a2e\u7d50\u69cb
\u5c6c\u6027\u5716\u6a21\u578b\uff08property graphs model\uff09
\u4e09\u5143\u7d44\u6a21\u578b\uff08triple-stores model\uff09
\u4f46\u662f\u9019\u5169\u7a2e\u6771\u897f\u5176\u5be6\u5927\u540c\u5c0f\u7570\uff0c\u6211\u5011\u5f85\u6703\u4ecb\u7d39\u7684\u6642\u5019\u53ef\u80fd\u6703\u6bd4\u8f03\u6709\u611f\u3002
"},{"location":"feedback/designing-data-intensive-applications/foundation-model/#\u5c6c\u6027\u5716\u6a21\u578b","title":"\u5c6c\u6027\u5716\u6a21\u578b","text":"\u6bcf\u500b\u9ede\u548c\u7dda\u6703\u6709\u5f88\u591a\u5c6c\u6027\uff1a
\u9019\u6a23\u770b\u53ef\u80fd\u6c92\u6642\u9ebc\u611f\u89ba\uff0c\u5982\u679c\u4f7f\u7528\u95dc\u806f\u5f0f\u8cc7\u6599\u5eab\uff0c\u53ef\u80fd\u5c31\u6703\u9577\u6210\u9019\u500b\u6a23\u5b50\uff1a
CREATE TABLE vertices (\n vertex_id integer PRIMARY KEY,\n vertex_type text,\n properties json\n)\nCREATE TABLE edges (\n edge_id integer PRIMARY KEY,\n tail_vertex integer REFERENCES vertices (vertex_id),\n head_vertex integer REFERENCES vertices (vertex_id),\n label text,\n properties json\n)\n
\u4ee5 Neo4j \u9019\u500b\u8cc7\u6599\u5eab\u70ba\u4f8b\uff0c\u5efa\u7acb\u4e0a\u9762\u7684\u5716\u50cf\u5f0f\u6a21\u578b\u95dc\u4fc2\u7db2\u7d61\u9700\u8981\u4e0b\u4ee5\u4e0b\u8a9e\u6cd5\uff1a
CREATE\n /* vertices */\n (NAmerica:Location {name:'North America', type:'continent'}),\n ( USA:Location {name:'United States', type:'country' }),\n ( Idaho:Location {name:'Idaho', type:'state' }),\n ( Lucy:Person {name:'Lucy'}),\n /* edges */\n (Idaho) -[:WITHIN]-> (USA) -[:WITHIN]-> (NAmerica),\n (Lucy) -[:BORN_IN]-> (Idaho)\n
\u503c\u5f97\u6ce8\u610f\u7684\u662f\uff0c\u56e0\u70ba\u5716\u50cf\u5f0f\u8cc7\u6599\u5eab\u5df2\u7d93\u5e6b\u4f60\u9810\u8a2d\u597d\u7db1\u76ee\u8981\u9577\u7684\u6a23\u5b50\uff0c\u6240\u4ee5\u4e0d\u9700\u8981\u8a2d\u5b9a\uff0c\u6211\u5011\u76f4\u63a5\u770b\u6dfb\u52a0\u8cc7\u6599\u6642\u6703\u8981\u8dd1\u7684\u7a0b\u5f0f\u78bc\u3002
\u73fe\u5728\u82e5\u8981\u627e\u300c\u6240\u6709\u5f9e\u7f8e\u570b\u79fb\u6c11\u5230\u6b50\u6d32\u7684\u4eba\u7684\u540d\u5b57\u300d\u9019\u8cc7\u6599\u5c31\u53ef\u4ee5\u4e0b\u76f8\u95dc query\uff1a
MATCH\n (Person) -[:BORN_IN]-> () -[:WITHIN*0..]-> (us:Location {name:'United States'}),\n (Person) -[:LIVES_IN]-> () -[:WITHIN*0..]-> (en:Location {name:'Europe'}),\nRETURN Person.name\n
\u9019\u500b\u8072\u660e\u5f0f\u8a9e\u8a00\u8b93\u67e5\u8a62\u900f\u904e\u8f03\u70ba\u9ad8\u5c64\u6b21\u7684\u908f\u8f2f\u53bb\u57f7\u884c\uff0c\u6211\u5011\u4e0d\u5fc5\u5728\u610f\u5be6\u4f5c\u7d30\u7bc0\uff0c\u4f8b\u5982\u8a72\u5f9e\u4eba\u53bb\u4f9d\u5e8f\u627e\u4e0b\u53bb\u9084\u662f\u5f9e\u6700\u4e0a\u5c64\u7684\u5730\u5340\u5f80\u4e0b\u627e\u51fa\u751f\u65bc\u6b64\u7684\u4eba\u3002
\u9664\u6b64\u4e4b\u5916\uff0c\u6bd4\u8f03\u8907\u96dc\u7684\u8a9e\u6cd5\u9084\u6709\u300c\u63a8\u85a6\u4f7f\u7528\u8005\u9910\u5ef3\uff1a\u6709\u54ea\u500b\u4eba\u7684\u670b\u53cb\u6709\u5728\u6c92\u53bb\u904e\u7684\u9910\u5ef3\u6253\u5361\uff1f\u300d\u3002
"},{"location":"feedback/designing-data-intensive-applications/foundation-model/#\u4e09\u5143\u7d44\u6a21\u578b","title":"\u4e09\u5143\u7d44\u6a21\u578b","text":"\u548c\u5c6c\u6027\u5716\u6a21\u578b\u5927\u540c\u5c0f\u7570\uff0c\u4ed6\u662f\u4ee5 (subject,predicate,object)
\u65b9\u5f0f\u53bb\u5efa\u7acb\u7684\u3002\u5176\u4ee3\u8868\u7684\u610f\u7fa9\u5206\u5225\u662f\uff1a\u4e3b\u8a5e\u3001\u8853\u8a9e\u3001\u53d7\u8a5e\u3002
\u6211\u5011\u4f86\u770b\u770b\u5efa\u7acb\u6642\u7684\u8a9e\u6cd5\uff1a
@prefix : <urn:example:>. (1)\n_:lucy a :Person; :name \"Lucy\"; :bornIn _:idaho.\n_:idaho a :Location; :name \"Idaho\"; :type \"state\"; :within _:usa\n_:usa a :Loaction; :name \"United States\"; :type \"country\"; :within _:namerica.\n_:namerica a :Location; :name \"North America\"; :type \"continent\".\n
\u4e0a\u9762\u7684\u8868\u9054\u683c\u5f0f\u662f Turtle \u683c\u5f0f\u3002
\u6211\u5011\u4f86\u770b\u770b\u4f7f\u7528 SPARQL \u641c\u5c0b\u6642\u7684\u8a9e\u6cd5\uff1a
PREFIX : <urn:example:>\nSELECT ?personName WHERE {\n ?person :name ?personName.\n ?person :bornIn / :within* / :name \"United States\".\n ?person :livesIn / :within* / :name \"Europe\".\n}\n
SPARQL\uff08sparkle\uff09\uff0c\u53ef\u4ee5\u5230\u9ad8\u96c4\u5e02\u8cc7\u6599\u5e73\u53f0\u73a9\u73a9\u770b
\u7531\u6b64\u6211\u5011\u5c31\u53ef\u4ee5\u4e86\u89e3\u5716\u50cf\u5f0f\u6a21\u578b\u6982\u5ff5\u4e0d\u96e3\uff0c\u5176\u5be6\u53ea\u662f\u56e0\u70ba\u61c9\u7528\u9700\u6c42\u7684\u4e0d\u540c\uff0c\u53bb\u5efa\u7acb\u4e0d\u540c\u7684\u5132\u5b58\u65b9\u5f0f\u3002\u770b\u5b8c\u4e86\u9019\u4e9b\u6a21\u578b\uff0c\u6211\u5011\u5c31\u4f86\u770b\u770b\u67e5\u8a62\u8a9e\u8a00\u3002
"},{"location":"feedback/designing-data-intensive-applications/foundation-model/#\u67e5\u8a62\u8a9e\u8a00","title":"\u67e5\u8a62\u8a9e\u8a00","text":"\u67e5\u8a62\u8a9e\u8a00\uff08query language\uff09\u9019\u88e1\u4ecb\u7d39\u4e09\u7a2e\uff1a
\u524d\u9762\u5728\u5716\u50cf\u5f0f\u6a21\u578b\u770b\u5230\u5f88\u591a\u8072\u660e\u5f0f\u67e5\u8a62\u8a9e\u8a00\uff0c\u4ed6\u7684\u6982\u5ff5\u5c31\u662f\u628a\u641c\u5c0b\u6642\u7684\u62bd\u8c61\u7a0b\u5ea6\u62c9\u9ad8\uff0c\u4e0d\u5fc5\u8b93\u958b\u767c\u4eba\u54e1\u53bb\u4e86\u89e3\u6216\u9078\u64c7\u5be6\u4f5c\u65b9\u5f0f\u3002
\u76f8\u5c0d\u800c\u8a00\uff0c\u9084\u6709\u547d\u4ee4\u5f0f\u8a9e\u8a00\u548c\u908f\u8f2f\u5f0f\u8a9e\u8a00\uff0c\u6211\u5011\u4e0b\u9762\u5c07\u4ee5\u7a0b\u5f0f\u78bc\u70ba\u7bc4\u4f8b\u3002
"},{"location":"feedback/designing-data-intensive-applications/foundation-model/#\u8072\u660e\u5f0f","title":"\u8072\u660e\u5f0f","text":"\u4ee5 JavaScript \u70ba\u4f8b\uff0c\u8072\u660e\u5f0f\u53ef\u80fd\u5982\u4e0b\uff1a
return animals.filter((animal) => animal.family === \"Sharks\");\n
\u4f60\u4e0d\u9700\u8981\u8003\u616e\u600e\u9ebc\u505a\u8ff4\u5708\uff0c\u4e5f\u4e0d\u9700\u8981\u8003\u616e\u600e\u9ebc\u6536\u96c6\u7be9\u9078\u5f8c\u7684\u8cc7\u6599\uff0c\u4e0d\u7ba1\u4ed6\u662f\u4e0d\u662f\u6703\u5206\u6563\u65bc\u4e0d\u540c\u7dda\u7a0b\u7b49\u7b49\u3002
\u5c0d\u61c9\u65bc SQL
SELECT * FROM animals WHERE family = 'Sharks'\n
"},{"location":"feedback/designing-data-intensive-applications/foundation-model/#\u547d\u4ee4\u5f0f","title":"\u547d\u4ee4\u5f0f","text":"\u4ee5 JavaScript \u70ba\u4f8b\uff0c\u547d\u4ee4\u5f0f\u53ef\u80fd\u5982\u4e0b\uff1a
function getSharks(animals) {\n var sharks = [];\n for (var i = 0; i < animals.length; i++) {\n if (animals[i].family === \"Sharks\") {\n sharks.push(animals[i]);\n }\n }\n return sharks;\n}\n
\u4f60\u547d\u4ee4\u7a0b\u5f0f\u8a9e\u8a00\u53bb\u600e\u9ebc\u8dd1\u6240\u6709\u8cc7\u6599\uff0c\u7136\u5f8c\u4e5f\u95e1\u660e\u9700\u8981\u4ee5\u4f55\u7a2e\u65b9\u5f0f\u505a\u7d50\u679c\u3002
"},{"location":"feedback/designing-data-intensive-applications/foundation-model/#\u8072\u660e\u5f0f\u597d\u8655","title":"\u8072\u660e\u5f0f\u597d\u8655","text":"\u6211\u5011\u4ee5\u300c\u6d77\u6d0b\u751f\u7269\u5b78\u5bb6\u6bcf\u6708\u89c0\u5bdf\u5230\u7684\u9bca\u9b5a\u6578\u300d\u4f86\u505a\u8a0e\u8ad6\u3002
db.observations.mapReduce(\n // (1)\n function map() {\n var year = this.observationTimestamp.getFullYear();\n var month = this.observationTimestamp.getMonth() + 1;\n emit(year + \"-\" + month, this.numAnimals);\n },\n // (2)\n function reduce(key, values) {\n return Array.sum(values);\n },\n {\n query: { family: \"Sharks\" }, // (3)\n out: \"monthlySharkReport\",\n }\n);\n
\u4e0a\u8868\u662f MongoDB MapReduce \u7684\u64f4\u5145\u5957\u4ef6\u7684\u898f\u5247\u3002MapReduce \u4e4b\u5f8c\u5728\u6279\u6b21\u8655\u7406\u6703\u8b1b\u3002
\u4e8b\u5be6\u4e0a\uff0c\u4e0a\u8ff0\u7684\u4f8b\u5b50\u4e2d\uff0c\u662f\u4ecb\u65bc\u547d\u4ee4\u5f0f\u548c\u8072\u660e\u5f0f\u4e4b\u9593\uff0c\u4f8b\u5982\u7b2c 11 \u884c\u5c31\u662f\u8072\u660e\u5f0f\u7684\u65b9\u5f0f\u53bb\u7be9\u9078\u7a2e\u985e\u70ba\u9bca\u9b5a\u7684\u52d5\u7269\u3002
\u4e00\u958b\u59cb\u770b\uff0c\u53ef\u80fd\u6703\u770b\u4e0d\u592a\u51fa\u4f86\u547d\u4ee4\u5f0f\u7684\u597d\u8655\u3002\u4f46\u662f\uff1a
Prolog\uff08Programming in Logic\uff09\u5c31\u662f\u900f\u904e\u908f\u8f2f\u7684\u65b9\u5f0f\u53bb\u5beb\u7a0b\u5f0f\u78bc\u3002\u4e0d\u50cf\u5176\u4ed6\u985e\u578b\u7684\u8a9e\u8a00\u6bd4\u8f03\u50cf\u662f\u547d\u4ee4\u5f0f\u7684\u65b9\u5f0f\u53bb\u64b0\u5beb\u3002\u7136\u800c\uff0c\u65e9\u5728 1970 \u5e74\u4ee3\u908f\u8f2f\u5f0f\u7684\u8a9e\u8a00\u5c31\u5df2\u7d93\u767c\u5c55\u4e86\u3002\u65e9\u671f\u5728\u7814\u7a76\u6642\uff0c\u9019\u7a2e\u908f\u8f2f\u5f0f\u7684\u8a9e\u8a00\u76f8\u5c0d\u65bc\u547d\u4ee4\u5f0f\u66f4\u5bb9\u6613\u8b93\u4eba\u7406\u89e3\u3002
\u6211\u5011\u4ee5 Prolog \u7684\u4e00\u500b\u4f7f\u7528\u60c5\u5883\u300c\u767c\u751f\u4e00\u5834\u547d\u6848\uff0c\u8acb\u900f\u904e\u4e92\u65a5\u7684\u8b49\u8a5e\u627e\u51fa\u8ab0\u5728\u8aaa\u8b0a\u300d\u70ba\u4f8b\uff1a
\u4e0a\u8ff0\u72c0\u6cc1\u53ef\u4ee5\u900f\u904e\u4e0b\u9762\u7684\u8a9e\u6cd5\u6210\u529f\u627e\u5230\u8ab0\u5728\u8aaa\u8b0a\uff1a
% \u5b9a\u7fa9\u8b49\u8a5e\ntestimony(a, friend(b)). % (1)\ntestimony(a, enemy(c)).\ntestimony(b, out_of_town(b)).\ntestimony(b, stranger(b)).\ntestimony(c, in_town(c)).\ntestimony(c, in_town(a)).\ntestimony(c, in_town(b)).\n\n% \u5ba3\u544a\u4ec0\u9ebc\u662f\u885d\u7a81\u7684\ninconsistent(friend(X), enemy(X)).\ninconsistent(friend(X), stranger(X)).\ninconsistent(enemy(X), stranger(X)).\ninconsistent(out_of_town(X), in_town(X)).\n\n% \u627e\u51fa\u8aaa\u8b0a\u8005\nlier(L) :-\n member(L, [a, b, c]), % \u5f9e a, b, c \u4e2d\u62c9\u51fa\u4e00\u500b\u4eba\u53eb L(lier)\n select(L, [a, b, c], Witness), % \u5269\u4e0b\u7684\u4eba\u7b97\u9032\u8b49\u4eba\n consistent(Witness). % \u8b49\u4eba\u7684\u8b49\u8a5e\u662f\u5408\u7406\u7684\n\n% \u7fa4\u7d44\u4e2d\u5927\u5bb6\u8b49\u8a5e\u90fd\u662f\u5408\u7406\u7684\nconsistent(W) :-\n \\+ inconsistent_testimony(W).\n\n% \u7fa4\u7d44\u4e2d\u6709\u4eba\u6709\u885d\u7a81\u7684\u8b49\u8a5e\ninconsistent_testimony(W) :-\n member(X, W), % \u5f9e\u7fa4\u7d44\u4e2d\u6311\u51fa X \u548c Y\n member(Y, W),\n X \\= Y, % X \u548c Y \u4e0d\u540c\u4eba\n testimony(X, XT), % \u62ff\u51fa X \u7684\u5176\u4e2d\u4e00\u500b\u8b49\u8a5e\n testimony(Y, YT), % \u62ff\u51fa Y \u7684\u5176\u4e2d\u4e00\u500b\u8b49\u8a5e\n inconsistent(XT, YT). % \u4ed6\u5011\u662f\u885d\u7a81\u7684\n
testimony(a, knew(b)).\ntestimony(a, knew(c)).\ntestimony(a, innocent(a)).\ntestimony(b, out_of_town(b)).\ntestimony(b, stranger(b)).\ntestimony(c, innocent(c)).\ntestimony(c, in_town(a)).\ntestimony(c, in_town(b)).\n
\u76f8\u5c0d\u65bc\u5e38\u898b\u7684\u547d\u4ee4\u5f0f\u8a9e\u8a00\uff0c\u901a\u5e38\u5f88\u96e3\u505a\u51fa\u9019\u985e\u7684\u8868\u73fe\uff0c\u56e0\u70ba\u6211\u5011\u6703\u628a\u908f\u8f2f\u653e\u5728\u8166\u4e2d\uff0c\u4e26\u628a\u5be6\u4f5c\u5beb\u6210\u8a9e\u8a00\u3002\u5176\u6982\u5ff5\u548c\u908f\u8f2f\u5f0f\u8a9e\u8a00\u6b63\u76f8\u53cd\u3002
Datalog
Datalog \u662f Prolog\uff08Programming in Logic\uff09\u4e0b\u7684\u96c6\u5408\u3002\u5c31\u50cf SQL \u662f\u4e00\u7a2e\u898f\u7bc4\u4e00\u6a23\uff0cDatalog \u4e5f\u662f\u4e00\u7a2e\u8ecc\u7bc4\uff0c\u6709\u4e0d\u540c\u7684\u641c\u5c0b\u8a9e\u8a00\u53bb\u5be6\u8e10\u5b83\u3002\u4f8b\u5982 Cascalog
\u3002
within_recursive(Location, Name) :- name(Location, Name). /* (1) */\n\nwithin_recursive(Location, Name) :- within(Location, BiggerLoc),\n within_recursive(BiggerLoc, Name).\n\nmigrated(Name, BornIn, LivingIn) :- name(Person, Name),\n born_in(Person, BornLoc),\n within_recursive(BornLoc, BornIn),\n lives_in(Person, LivingLoc),\n within_recursive(LivingLoc, LivingIn).\n\n?- migrated(Who, 'United States', 'Europe').\n/* Who = 'Lucy'. */\n
within
\u5c31\u53d6\u540d\u7a31\u3002Datalog \u5ba3\u544a\u6c92\u6709\u9806\u5e8f\uff0c\u548c Prolog \u76f8\u53cd\u3002
"},{"location":"feedback/designing-data-intensive-applications/foundation-model/#\u7e3d\u7d50","title":"\u7e3d\u7d50","text":"\u9019\u7ae0\u8a0e\u8ad6\u4e86\u4e00\u4e9b\u6a21\u578b\uff0c\u4f46\u662f\u4e26\u672a\u6df1\u5165\u63a2\u8a0e\u5176\u5167\u90e8\u904b\u4f5c\u65b9\u5f0f\u3002\u4e8b\u5be6\u4e0a\uff0c\u8981\u6df1\u5165\u4e86\u89e3\u4e00\u500b\u6a21\u578b\u662f\u9700\u8981\u5927\u91cf\u6642\u9593\u548c\u7cbe\u795e\u7684\uff0c\u4f46\u662f\u5c0d\u65bc\u4e0d\u540c\u6a21\u578b\u6709\u4e9b\u521d\u6b65\u548c\u6982\u5ff5\u6027\u7684\u4e86\u89e3\uff0c\u53ef\u4ee5\u5e6b\u52a9\u4f60\u5728\u9078\u64c7\u6642\u52a0\u5165\u4e00\u4e9b\u53c3\u8003\u3002
\u4e0b\u4e00\u7ae0\u6211\u5011\u5c07\u8a0e\u8ad6\u5be6\u4f5c\u8cc7\u6599\u5eab\u6642\uff0c\u9700\u8981\u8003\u616e\u7684\u4e0d\u540c\u53d6\u6368\u3002
\u88dc\u5145\uff1a
\u7c21\u8981\u8aaa\u660e
\u672c\u8a5e\u5f59\u8868\u50c5\u7c21\u8981\u8aaa\u660e\u5404\u500b\u8a5e\u4ee3\u8868\u610f\u7fa9\uff0c\u8a73\u7d30\u8cc7\u8a0a\u8207\u61c9\u5834\u666f\u7b49\u7b49\u8acb\u770b\u5176\u5c0d\u61c9\u7684\u7ae0\u7bc0\u3002
"},{"location":"feedback/designing-data-intensive-applications/glossary/#\u7570\u6b65","title":"\u7570\u6b65","text":"asynchronous
\u547c\u53eb\u5de5\u4f5c\u5f8c\u7e7c\u7e8c\u57f7\u884c\u5176\u4ed6\u5de5\u4f5c\uff0c\u800c\u4e0d\u7b49\u5f85\u5176\u5b8c\u6210\uff08\u4f8b\u5982\u7db2\u8def\u8acb\u6c42\uff09\u3002\u975e\u540c\u6b65\u5de5\u4f5c\u4e0d\u6703\u5047\u8a2d\u5176\u9700\u8981\u5b8c\u6210\u7684\u6642\u9593\u3002
\u53cd\u7fa9\uff1a\u540c\u6b65
"},{"location":"feedback/designing-data-intensive-applications/glossary/#\u539f\u5b50\u6027","title":"\u539f\u5b50\u6027","text":"atomic
back-pressure
\u63a5\u6536\u65b9\u63a5\u6536\u8cc7\u6599\u901f\u5ea6\u8f03\u6162\u6642\uff0c\u5f37\u5236\u964d\u4f4e\u50b3\u9001\u65b9\u7684\u8cc7\u6599\u50b3\u9001\u901f\u5ea6\uff0c\u4e5f\u7a31\u70ba\u6d41\u63a7\u5236\u3002
"},{"location":"feedback/designing-data-intensive-applications/glossary/#\u6279\u6b21\u8655\u7406","title":"\u6279\u6b21\u8655\u7406","text":"batch process
\u4e00\u7a2e\u8a08\u7b97\u65b9\u5f0f\uff0c\u5b83\u5c07\u4e00\u4e9b\u56fa\u5b9a\u7684\uff08\u91cf\u901a\u5e38\u5f88\u5927\uff09\u8cc7\u6599\u4f5c\u70ba\u8f38\u5165\uff0c\u7d93\u904e\u4e00\u4e9b\u8a08\u7b97\u5f8c\u628a\u65b0\u7684\u8cc7\u6599\u4f5c\u70ba\u8f38\u51fa\u3002\u904e\u7a0b\u4e2d\u4e26\u4e0d\u6703\u4fee\u6539\u8f38\u5165\u7684\u8cc7\u6599\u6e90\u3002
"},{"location":"feedback/designing-data-intensive-applications/glossary/#\u908a\u754c","title":"\u908a\u754c","text":"bounded
\u6709\u4e00\u4e9b\u5df2\u77e5\u7684\u4e0a\u9650\u6216\u5927\u5c0f\u3002\u4f8b\u5982\uff0c\u7db2\u8def\u5ef6\u9072\u60c5\u6cc1\u548c\u53e2\u96c6\u5927\u5c0f\u3002
\u53cd\u7fa9\uff1a\u7121\u908a\u754c
"},{"location":"feedback/designing-data-intensive-applications/glossary/#\u62dc\u5360\u5ead\u932f\u8aa4","title":"\u62dc\u5360\u5ead\u932f\u8aa4","text":"Byzantine fault
\u8868\u73fe\u7570\u5e38\u7684\u7bc0\u9ede\uff0c\u9019\u7a2e\u7570\u5e38\u53ef\u80fd\u4ee5\u4efb\u610f\u65b9\u5f0f\u51fa\u73fe\uff0c\u4f8b\u5982\u5411\u5176\u4ed6\u7bc0\u9ede\u767c\u9001\u77db\u76fe\u6216\u60e1\u610f\u8a0a\u606f\u3002
"},{"location":"feedback/designing-data-intensive-applications/glossary/#\u5feb\u53d6","title":"\u5feb\u53d6","text":"cache
\u4e00\u7a2e\u67b6\u69cb\u4e2d\u7684\u5143\u4ef6\uff0c\u900f\u904e\u5132\u5b58\u6700\u8fd1\u4f7f\u7528\u904e\u7684\u8cc7\u6599\uff0c\u52a0\u5feb\u672a\u4f86\u5c0d\u76f8\u540c\u8cc7\u6599\u7684\u8b80\u53d6\u901f\u5ea6\u3002\u56e0\u70ba\u5feb\u53d6\u4e2d\u901a\u5e38\u5b58\u653e\u90e8\u5206\u8cc7\u6599\uff0c\u6240\u4ee5\u5982\u679c\u5feb\u53d6\u4e2d\u7f3a\u5c11\u67d0\u4e9b\u8cc7\u6599\uff0c\u5247\u5fc5\u9808\u5f9e\u67d0\u4e9b\u5e95\u5c64\u8f03\u6162\u7684\u8cc7\u6599\u5132\u5b58\u7cfb\u7d71\u4e2d\uff0c\u7372\u53d6\u5b8c\u6574\u7684\u8cc7\u6599\u526f\u672c\u3002
"},{"location":"feedback/designing-data-intensive-applications/glossary/#cap","title":"CAP","text":"CAP theorem
\u4e00\u500b\u88ab\u5ee3\u6cdb\u8aa4\u89e3\u7684\u7406\u8ad6\u7d50\u679c\uff0c\u5728\u5be6\u8e10\u4e2d\u662f\u6c92\u6709\u7528\u7684\u3002
"},{"location":"feedback/designing-data-intensive-applications/glossary/#\u56e0\u679c\u95dc\u4fc2","title":"\u56e0\u679c\u95dc\u4fc2","text":"causality
\u4e8b\u4ef6\u4e4b\u9593\u7684\u4f9d\u8cf4\u95dc\u4fc2\uff0c\u7576\u4e00\u4ef6\u4e8b\u767c\u751f\u5728\u53e6\u4e00\u4ef6\u4e8b\u60c5\u4e4b\u524d\u3002\u4f8b\u5982\uff0c\u5f8c\u9762\u7684\u4e8b\u4ef6\u662f\u5c0d\u65e9\u671f\u4e8b\u4ef6\u7684\u56de\u61c9\uff0c\u6216\u8005\u4f9d\u8cf4\u65bc\u66f4\u65e9\u7684\u4e8b\u4ef6\uff0c\u6216\u8005\u61c9\u8a72\u6839\u64da\u5148\u524d\u7684\u4e8b\u4ef6\u4f86\u7406\u89e3\u3002
"},{"location":"feedback/designing-data-intensive-applications/glossary/#\u5171\u8b58","title":"\u5171\u8b58","text":"consensus
\u5206\u6563\u5f0f\u7cfb\u7d71\u7684\u4e00\u500b\u57fa\u672c\u554f\u984c\uff1a\u8a72\u600e\u9ebc\u8b93\u5e7e\u500b\u7bc0\u9ede\u540c\u610f\u67d0\u4e9b\u7d50\u679c\uff08\u4f8b\u5982\uff0c\u54ea\u500b\u7bc0\u9ede\u61c9\u8a72\u662f\u8cc7\u6599\u5eab\u53e2\u96c6\u7684\u9818\u5c0e\u8005\uff09\u3002\u554f\u984c\u6bd4\u4e4d\u770b\u8d77\u4f86\u8981\u56f0\u96e3\u5f97\u591a\u3002
"},{"location":"feedback/designing-data-intensive-applications/glossary/#\u8cc7\u6599\u5009\u5132","title":"\u8cc7\u6599\u5009\u5132","text":"data warehouse
\u4e00\u7a2e\u8cc7\u6599\u5eab\uff0c\u5176\u4e2d\u7684\u8cc7\u6599\u4f86\u81ea\uff08\u900f\u904e ETL\uff09 OLTP \u8cc7\u6599\u5eab\u4e14\u8cc7\u6599\u5009\u5132\u4e2d\u7684\u8cc7\u6599\u901a\u5e38\u5df2\u7d93\u88ab\u6574\u5408\u4e26\u6e96\u5099\u7528\u65bc\u5206\u6790\u76ee\u7684\u3002
"},{"location":"feedback/designing-data-intensive-applications/glossary/#\u8072\u660e\u5f0f","title":"\u8072\u660e\u5f0f","text":"declarative
\u8072\u660e\u67d0\u4e9b\u9700\u8981\u5f97\u5230\u7684\u8cc7\u6599\u6216\u5c6c\u6027\uff0c\u4f46\u4e0d\u77e5\u9053\u5982\u4f55\u5be6\u73fe\u5b83\u7684\u78ba\u5207\u6b65\u9a5f\u3002\u67e5\u8a62\u6700\u4f73\u5316\u5668\uff08query optimizer\uff09\u6703\u900f\u904e\u8072\u660e\u6027\u7684\u67e5\u8a62\u6c7a\u5b9a\u5982\u4f55\u6700\u597d\u5730\u57f7\u884c\u5b83\u3002
"},{"location":"feedback/designing-data-intensive-applications/glossary/#\u53bb\u6b63\u898f\u5316","title":"\u53bb\u6b63\u898f\u5316","text":"denormalize
\u70ba\u4e86\u52a0\u901f\u8b80\u53d6\uff0c\u5728\u8cc7\u6599\u5eab\u4e2d\u5f15\u5165\u4e00\u4e9b\u5197\u9918\u6216\u91cd\u8907\u8cc7\u6599\uff0c\u901a\u5e38\u63a1\u7528\u5feb\u53d6\u6216\u7d22\u5f15\u7684\u5f62\u5f0f\u3002\u53bb\u6b63\u898f\u5316\u7684\u503c\u662f\u4e00\u7a2e\u9810\u5148\u8a08\u7b97\u7684\u67e5\u8a62\u7d50\u679c\uff0c\u50cf\u7269\u5316\u8996\u5716\u3002
\u53cd\u7fa9\uff1a\u6b63\u898f\u5316
"},{"location":"feedback/designing-data-intensive-applications/glossary/#\u884d\u751f\u8cc7\u6599","title":"\u884d\u751f\u8cc7\u6599","text":"derived data
\u4e00\u7a2e\u8cc7\u6599\uff0c\u900f\u904e\u53ef\u91cd\u8907\u57f7\u884c\u7684\u904b\u7b97\u628a\u539f\u59cb\u8cc7\u6599\u5c08\u6210\u884d\u751f\u8cc7\u6599\u3002\u5fc5\u8981\u6642\uff0c\u4f60\u53ef\u4ee5\u57f7\u884c\u8a72\u904b\u7b97\u4e26\u518d\u6b21\u5efa\u7acb\u884d\u751f\u8cc7\u6599\u3002\u884d\u751f\u8cc7\u6599\u901a\u5e38\u7528\u65bc\u63d0\u9ad8\u7279\u5b9a\u8cc7\u6599\u7684\u8b80\u53d6\u901f\u5ea6\u3002\u5e38\u898b\u7684\u884d\u751f\u8cc7\u6599\u6709\u7d22\u5f15\u3001\u5feb\u53d6\u548c\u7269\u5316\u8996\u5716\u3002
"},{"location":"feedback/designing-data-intensive-applications/glossary/#\u78ba\u5b9a\u6027","title":"\u78ba\u5b9a\u6027","text":"deterministic
\u63cf\u8ff0\u4e00\u500b\u51fd\u5f0f\uff0c\u5982\u679c\u7d66\u5b83\u76f8\u540c\u7684\u8f38\u5165\uff0c\u5247\u7e3d\u662f\u7522\u751f\u76f8\u540c\u7684\u8f38\u51fa\u3002\u9019\u610f\u5473\u8457\u5b83\u4e0d\u80fd\u4f9d\u8cf4\u65bc\u96a8\u6a5f\u6578\u5b57\u3001\u6642\u9593\u3001\u7db2\u8def\u901a\u8a0a\u6216\u5176\u4ed6\u4e0d\u53ef\u9810\u6e2c\u7684\u4e8b\u60c5\u3002
"},{"location":"feedback/designing-data-intensive-applications/glossary/#\u5206\u6563\u5f0f\u7cfb\u7d71","title":"\u5206\u6563\u5f0f\u7cfb\u7d71","text":"distributed
\u8b93\u670d\u52d9\u900f\u904e\u591a\u500b\u7bc0\u9ede\u57f7\u884c\uff0c\u4e26\u4ee5\u7db2\u8def\u9023\u7dda\u4f86\u4f5c\u70ba\u6e9d\u901a\u65b9\u5f0f\uff0c\u7576\u90e8\u5206\u7bc0\u9ede\u6545\u969c\u6642\u5177\u6709\u5bb9\u932f\u6027\uff08\u7cfb\u7d71\u7684\u4e00\u90e8\u5206\u767c\u751f\u6545\u969c\u6642\uff0c\u5176\u4ed6\u90e8\u5206\u4ecd\u53ef\u4ee5\u6b63\u5e38\u5de5\u4f5c\uff09\u3002\u901a\u5e38\u60c5\u6cc1\u4e0b\uff0c\u8edf\u9ad4\u7121\u9700\u77ad\u89e3\u6545\u969c\u76f8\u95dc\u7684\u78ba\u5207\u60c5\u6cc1\u3002
"},{"location":"feedback/designing-data-intensive-applications/glossary/#\u6301\u7e8c\u6027","title":"\u6301\u7e8c\u6027","text":"durable
\u4ee5\u67d0\u7a2e\u65b9\u5f0f\u5132\u5b58\u8cc7\u6599\uff0c\u5373\u4f7f\u767c\u751f\u5404\u7a2e\u6545\u969c\uff0c\u4e5f\u4e0d\u6703\u4e1f\u5931\u8cc7\u6599\u3002
"},{"location":"feedback/designing-data-intensive-applications/glossary/#etl","title":"ETL","text":"Extract-Transform-Load
\u8403\u53d6\u3001\u8b8a\u63db\u53ca\u8f09\u5165\uff0c\u5f9e\u6e90\u8cc7\u6599\u5eab\u4e2d\u63d0\u53d6\u8cc7\u6599\uff0c\u5c07\u5176\u8f49\u63db\u70ba\u66f4\u9069\u5408\u5206\u6790\u67e5\u8a62\u7684\u5f62\u5f0f\uff0c\u4e26\u5c07\u5176\u8f09\u5165\u5230\u8cc7\u6599\u5009\u5132\u6216\u6279\u6b21\u8655\u7406\u7cfb\u7d71\u4e2d\u7684\u904e\u7a0b\u3002
"},{"location":"feedback/designing-data-intensive-applications/glossary/#\u6545\u969c\u5207\u63db","title":"\u6545\u969c\u5207\u63db","text":"failover
\u5728\u5177\u6709\u55ae\u4e00\u9818\u5c0e\u8005\u7684\u7cfb\u7d71\u4e2d\uff0c\u6545\u969c\u5207\u63db\u662f\u5c07\u9818\u5c0e\u89d2\u8272\u5f9e\u4e00\u500b\u7bc0\u9ede\u8f49\u79fb\u5230\u53e6\u4e00\u500b\u7bc0\u9ede\u7684\u904e\u7a0b\u3002
"},{"location":"feedback/designing-data-intensive-applications/glossary/#\u5bb9\u932f","title":"\u5bb9\u932f","text":"fault-tolerant
\u5982\u679c\u51fa\u73fe\u554f\u984c\uff08\u4f8b\u5982\uff0c\u6a5f\u5668\u5d29\u6f70\u6216\u7db2\u8def\u9023\u7dda\u5931\u6557\uff09\uff0c\u53ef\u4ee5\u81ea\u52d5\u6062\u5fa9\u3002
"},{"location":"feedback/designing-data-intensive-applications/glossary/#\u6d41\u63a7\u5236","title":"\u6d41\u63a7\u5236","text":"flow control
\u63a5\u6536\u65b9\u63a5\u6536\u8cc7\u6599\u901f\u5ea6\u8f03\u6162\u6642\uff0c\u5f37\u5236\u964d\u4f4e\u50b3\u9001\u65b9\u7684\u8cc7\u6599\u50b3\u9001\u901f\u5ea6\uff0c\u4e5f\u7a31\u70ba\u53cd\u58d3\u3002
"},{"location":"feedback/designing-data-intensive-applications/glossary/#\u96a8\u52d5\u8005","title":"\u96a8\u52d5\u8005","text":"follower, secondary, slave, read replica, hot standby
\u4e00\u7a2e\u8cc7\u6599\u526f\u672c\uff0c\u50c5\u8655\u7406\u9818\u5c0e\u8005\u767c\u51fa\u7684\u8cc7\u6599\u8b8a\u66f4\uff0c\u4e0d\u76f4\u63a5\u63a5\u53d7\u4f86\u81ea\u5ba2\u6236\u7aef\u7684\u4efb\u4f55\u5beb\u5165\u3002
"},{"location":"feedback/designing-data-intensive-applications/glossary/#\u5168\u6587\u6aa2\u7d22","title":"\u5168\u6587\u6aa2\u7d22","text":"full-text search
\u900f\u904e\u4efb\u610f\u95dc\u9375\u5b57\u4f86\u641c\u5c0b\u6587\u5b57\uff0c\u901a\u5e38\u5177\u6709\u9644\u52a0\u7279\u5fb5\uff0c\u4f8b\u5982\u5339\u914d\u985e\u4f3c\u7684\u62fc\u5beb\u8a5e\u6216\u540c\u7fa9\u8a5e\u3002\u5168\u6587\u7d22\u5f15\u662f\u4e00\u7a2e\u652f\u63f4\u9019\u7a2e\u67e5\u8a62\u7684\u6b21\u7d1a\u7d22\u5f15\u3002
"},{"location":"feedback/designing-data-intensive-applications/glossary/#\u5716\u50cf\u5f0f\u6a21\u578b","title":"\u5716\u50cf\u5f0f\u6a21\u578b","text":"graph model
\u4e00\u7a2e\u8cc7\u6599\u7d50\u69cb\uff0c\u7531\u9ede\uff08vertices\uff0c\u53ef\u4ee5\u6307\u5411\u7684\u6771\u897f\uff0c\u4e5f\u7a31\u70ba nodes \u6216 entities\uff09\u548c\u908a\uff08\u5f9e\u4e00\u500b\u9ede\u5230\u53e6\u4e00\u500b\u9802\u9ede\u7684\u9023\u7dda\uff0c\u4e5f\u7a31\u70ba relationships \u6216 arcs\uff09\u7d44\u6210\u3002
"},{"location":"feedback/designing-data-intensive-applications/glossary/#\u96dc\u6e4a","title":"\u96dc\u6e4a","text":"hash
\u5c07\u8f38\u5165\u8f49\u63db\u70ba\u770b\u8d77\u4f86\u50cf\u96a8\u6a5f\u6578\u503c\u7684\u51fd\u5f0f\u3002\u76f8\u540c\u7684\u8f38\u5165\u6703\u8f49\u63db\u70ba\u76f8\u540c\u7684\u6578\u503c\uff0c\u4e0d\u540c\u7684\u8f38\u5165\u4e00\u822c\u6703\u8f49\u63db\u70ba\u4e0d\u540c\u7684\u6578\u503c\uff0c\u4e5f\u53ef\u80fd\u8f49\u63db\u70ba\u76f8\u540c\u6578\u503c\uff08\u4e5f\u88ab\u7a31\u70ba\u885d\u7a81 collision\uff09\u3002
"},{"location":"feedback/designing-data-intensive-applications/glossary/#\u7368\u7acb\u7684","title":"\u7368\u7acb\u7684","text":"idempotent
\u7528\u65bc\u63cf\u8ff0\u4e00\u7a2e\u64cd\u4f5c\u53ef\u4ee5\u5b89\u5168\u5730\u91cd\u8a66\u57f7\u884c\uff08\u985e\u4f3c\u65bc\u78ba\u5b9a\u6027\uff09\uff0c\u5373\u57f7\u884c\u591a\u6b21\u7684\u6548\u679c\u548c\u57f7\u884c\u4e00\u6b21\u7684\u6548\u679c\u76f8\u540c\u3002
"},{"location":"feedback/designing-data-intensive-applications/glossary/#\u7d22\u5f15","title":"\u7d22\u5f15","text":"index
\u4e00\u7a2e\u8cc7\u6599\u7d50\u69cb\u3002\u900f\u904e\u7d22\u5f15\uff0c\u4f60\u53ef\u4ee5\u6839\u64da\u7279\u5b9a\u6b04\u4f4d\u7684\u503c\uff0c\u5728\u6240\u6709\u8cc7\u6599\u8a18\u9304\u4e2d\u9032\u884c\u9ad8\u6548\u6aa2\u7d22\u3002
"},{"location":"feedback/designing-data-intensive-applications/glossary/#\u9694\u96e2\u6027","title":"\u9694\u96e2\u6027","text":"isolation
\u5728\u4ea4\u6613\u4e0a\u4e0b\u6587\u4e2d\uff0c\u7528\u65bc\u63cf\u8ff0\u4e26\u884c\u57f7\u884c\u4ea4\u6613\u7684\u4e92\u76f8\u5e72\u64fe\u7a0b\u5ea6\u3002\u5e8f\u5217\u5316\u9694\u96e2\u6027\u5177\u6709\u6700\u5f37\u7684\u9694\u96e2\u6027\uff0c\u4e0d\u904e\u5176\u5b83\u7a0b\u5ea6\u7684\u9694\u96e2\u4e5f\u901a\u5e38\u88ab\u4f7f\u7528\u3002
"},{"location":"feedback/designing-data-intensive-applications/glossary/#\u806f\u5408","title":"\u806f\u5408","text":"join, document reference, edge
\u5f59\u96c6\u6709\u5171\u540c\u9ede\u7684\u8a18\u9304\u3002\u5728\u4e00\u500b\u8a18\u9304\u8207\u53e6\u4e00\u500b\u8a18\u9304\u6709\u95dc\uff08\u5916\u4f86\u9375\uff0c\u6587\u4ef6\u5f0f\u6a21\u578b\u4e2d\u7684 document reference\uff0c\u5716\u50cf\u5f0f\u6a21\u578b\u7684\u908a edge\uff09\u7684\u60c5\u6cc1\u4e0b\u6700\u5e38\u7528\uff0c\u67e5\u8a62\u9700\u8981\u7372\u53d6\u53c3\u8003\u6240\u6307\u5411\u7684\u8a18\u9304\u3002
"},{"location":"feedback/designing-data-intensive-applications/glossary/#\u9818\u5c0e\u8005","title":"\u9818\u5c0e\u8005","text":"leader, master
\u7576\u8cc7\u6599\u6216\u670d\u52d9\u88ab\u8907\u5236\u5230\u591a\u500b\u7bc0\u9ede\u6642\uff0c\u7531\u9818\u5c0e\u8005\u5206\u767c\u5df2\u6388\u6b0a\u8b8a\u66f4\u7684\u8cc7\u6599\u526f\u672c\u3002\u9818\u5c0e\u8005\u53ef\u4ee5\u900f\u904e\u67d0\u4e9b\u5354\u8b70\u9078\u8209\u7522\u751f\uff0c\u4e5f\u53ef\u4ee5\u7531\u7ba1\u7406\u8005\u624b\u52d5\u9078\u64c7\u3002
"},{"location":"feedback/designing-data-intensive-applications/glossary/#\u7dda\u6027\u5316","title":"\u7dda\u6027\u5316","text":"linearizable
\u8868\u73fe\u70ba\u7cfb\u7d71\u4e2d\u53ea\u6709\u4e00\u4efd\u900f\u904e\u539f\u5b50\u64cd\u4f5c\u66f4\u65b0\u7684\u8cc7\u6599\u526f\u672c\u3002
"},{"location":"feedback/designing-data-intensive-applications/glossary/#\u5c40\u90e8\u6027","title":"\u5c40\u90e8\u6027","text":"locality
\u4e00\u7a2e\u6548\u80fd\u6700\u4f73\u5316\u65b9\u5f0f\uff0c\u5982\u679c\u7d93\u5e38\u5728\u76f8\u540c\u7684\u6642\u9593\u8acb\u6c42\u4e00\u4e9b\u96e2\u6563\u8cc7\u6599\uff0c\u628a\u9019\u4e9b\u8cc7\u6599\u653e\u5230\u4e00\u500b\u4f4d\u7f6e\u3002
"},{"location":"feedback/designing-data-intensive-applications/glossary/#\u9396","title":"\u9396","text":"lock
\u4e00\u7a2e\u4fdd\u8b49\u53ea\u6709\u4e00\u500b\u7dda\u7a0b\u3001\u7bc0\u9ede\u6216\u4ea4\u6613\u53ef\u4ee5\u8a2a\u554f\u7684\u6a5f\u5236\uff0c\u5982\u679c\u5176\u5b83\u7dda\u7a0b\u3001\u7bc0\u9ede\u6216\u4ea4\u6613\u60f3\u8a2a\u554f\u76f8\u540c\u5143\u7d20\uff0c\u5247\u5fc5\u9808\u7b49\u5f85\u9396\u88ab\u91cb\u653e\u3002
"},{"location":"feedback/designing-data-intensive-applications/glossary/#\u65e5\u8a8c","title":"\u65e5\u8a8c","text":"log
\u65e5\u8a8c\u662f\u4e00\u500b\u53ea\u80fd\u4ee5\u8ffd\u52a0\u65b9\u5f0f\u5beb\u5165\u7684\u6a94\u6848\uff0c\u7528\u65bc\u5b58\u653e\u8cc7\u6599\u3002\u9810\u5beb\u5f0f\u65e5\u8a8c\uff08WAL\uff09\u7528\u65bc\u5728\u8cc7\u6599\u5eab\u5d29\u6f70\u6642\u6062\u5fa9\u8cc7\u6599\uff1b\u7d50\u69cb\u5316\u65e5\u8a8c\uff08log-structured\uff09\u4f7f\u7528\u65e5\u8a8c\u4f5c\u70ba\u5b83\u7684\u4e3b\u8981\u5132\u5b58\u683c\u5f0f\uff1b\u8907\u88fd\u578b\u65e5\u8a8c\uff08replication log\uff09\u7528\u65bc\u628a\u5beb\u5165\u5f9e\u9818\u5c0e\u8005\u8907\u88fd\u5230\u96a8\u52d5\u8005\uff1b\u4e8b\u4ef6\u6027\u65e5\u8a8c\uff08event log\uff09\u53ef\u4ee5\u4ee3\u8868\u4e00\u7a2e\u8cc7\u6599\u4e32\u6d41\u5f62\u5f0f\u3002
"},{"location":"feedback/designing-data-intensive-applications/glossary/#\u7269\u5316","title":"\u7269\u5316","text":"materialize
\u9810\u5148\u8a08\u7b97\u4e26\u5beb\u51fa\u7d50\u679c\uff0c\u800c\u4e0d\u662f\u5728\u8acb\u6c42\u6642\u8a08\u7b97\u3002
"},{"location":"feedback/designing-data-intensive-applications/glossary/#\u7bc0\u9ede","title":"\u7bc0\u9ede","text":"node
\u4e00\u500b\u57f7\u884c\u4e2d\u7684\u7a0b\u5e8f\u7684\u55ae\u4f4d\uff0c\u900f\u904e\u7db2\u8def\u8207\u5176\u4ed6\u7bc0\u9ede\u901a\u8a0a\u4ee5\u5b8c\u6210\u67d0\u9805\u4efb\u52d9\u3002
"},{"location":"feedback/designing-data-intensive-applications/glossary/#\u6b63\u898f\u5316","title":"\u6b63\u898f\u5316","text":"normalized
\u4ee5\u6c92\u6709\u5197\u9918\u6216\u91cd\u8907\u7684\u65b9\u5f0f\u9032\u884c\u7d50\u69cb\u5316\u3002 \u5728\u6b63\u898f\u5283\u8cc7\u6599\u5eab\u4e2d\uff0c\u7576\u67d0\u4e9b\u8cc7\u6599\u767c\u751f\u8b8a\u5316\u6642\uff0c\u4f60\u53ea\u9700\u8981\u5728\u4e00\u500b\u5730\u65b9\u9032\u884c\u66f4\u6539\uff0c\u800c\u4e0d\u662f\u5728\u8a31\u591a\u4e0d\u540c\u7684\u5730\u65b9\u8907\u88fd\u5f88\u591a\u6b21\u3002
\u53cd\u7fa9\uff1a\u53bb\u6b63\u898f\u5316
"},{"location":"feedback/designing-data-intensive-applications/glossary/#olap","title":"OLAP","text":"Online Analytic Processing
\u7dda\u4e0a\u5206\u6790\u8655\u7406\u3002\u5176\u7279\u5fb5\u70ba\u805a\u5408\u5927\u91cf\u7684\u8cc7\u6599\uff0c\u4f8b\u5982\uff0c\u8a08\u6578\uff0c\u7e3d\u548c\uff0c\u5e73\u5747\u3002
"},{"location":"feedback/designing-data-intensive-applications/glossary/#oltp","title":"OLTP","text":"Online Transaction Processing
\u7dda\u4e0a\u7570\u52d5\u8655\u7406\u3002\u5176\u6a21\u5f0f\u70ba\u5feb\u901f\u67e5\u8a62\uff0c\u8b80\u53d6\u6216\u5beb\u5165\u5c11\u91cf\u6216\u7279\u5b9a\u7684\u8cc7\u6599\uff0c\u9019\u4e9b\u8cc7\u6599\u901a\u5e38\u900f\u904e\u9375\u7d22\u5f15\u3002
"},{"location":"feedback/designing-data-intensive-applications/glossary/#\u5206\u5340","title":"\u5206\u5340","text":"partitioning, sharding
\u5c07\u55ae\u6a5f\u4e0a\u7684\u5927\u578b\u8cc7\u6599\u96c6\u6216\u8a08\u7b97\u7d50\u679c\u62c6\u5206\u70ba\u8f03\u5c0f\u90e8\u5206\uff0c\u4e26\u5c07\u5176\u5206\u4f48\u5230\u591a\u81fa\u6a5f\u5668\u4e0a\u3002
"},{"location":"feedback/designing-data-intensive-applications/glossary/#\u767e\u5206\u4f4d","title":"\u767e\u5206\u4f4d","text":"percentile
\u900f\u904e\u8a08\u7b97\u6709\u591a\u5c11\u503c\u9ad8\u65bc\u6216\u4f4e\u65bc\u67d0\u500b\u95be\u503c\u4f86\u8861\u91cf\u503c\u5206\u4f48\u7684\u65b9\u6cd5\u3002
\u4f8b\u5982\uff0c\u67d0\u500b\u6642\u9593\u6bb5\u7684\u7b2c 95 \u500b\u767e\u5206\u4f4d\u97ff\u61c9\u6642\u9593\u662f\u6642\u9593 t\uff0c\u5247\u8a72\u6642\u9593\u6bb5\u4e2d\uff0c95%\u7684\u8acb\u6c42\u5b8c\u6210\u6642\u9593\u5c0f\u65bc t\uff0c5%\u7684\u8acb\u6c42\u5b8c\u6210\u6642\u9593\u8981\u6bd4 t \u9577\u3002
"},{"location":"feedback/designing-data-intensive-applications/glossary/#\u4e3b\u7d22\u5f15","title":"\u4e3b\u7d22\u5f15","text":"primary index
\u552f\u4e00\u6a19\u8b58\u8a18\u9304\u7684\u503c \u901a\u5e38\u662f\u6578\u5b57\u6216\u5b57\u4e32 \u3002\u5728\u8a31\u591a\u61c9\u7528\u7a0b\u5f0f\u4e2d\uff0c\u4e3b\u9375\u7531\u7cfb\u7d71\u5728\u5efa\u7acb\u8cc7\u6599\u6642\u751f\u6210\uff08\u4f8b\u5982\uff0c\u6309\u9806\u5e8f\u6216\u96a8\u6a5f\uff09\u3002\u5b83\u5011\u901a\u5e38\u4e0d\u7531\u4f7f\u7528\u8005\u8a2d\u5b9a\u3002
"},{"location":"feedback/designing-data-intensive-applications/glossary/#\u6cd5\u5b9a\u4eba\u6578","title":"\u6cd5\u5b9a\u4eba\u6578","text":"quorum
\u5728\u64cd\u4f5c\u5b8c\u6210\u4e4b\u524d\uff0c\u9700\u8981\u5c0d\u64cd\u4f5c\u9032\u884c\u6295\u7968\u7684\u6700\u5c11\u7bc0\u9ede\u6578\u91cf\u3002
"},{"location":"feedback/designing-data-intensive-applications/glossary/#\u518d\u5e73\u8861","title":"\u518d\u5e73\u8861","text":"rebalance
\u5c07\u8cc7\u6599\u6216\u670d\u52d9\u5f9e\u4e00\u500b\u7bc0\u9ede\u79fb\u52d5\u5230\u53e6\u4e00\u500b\u7bc0\u9ede\u4ee5\u5be6\u73fe\u8ca0\u8f09\u5747\u8861\u3002
"},{"location":"feedback/designing-data-intensive-applications/glossary/#\u8907\u88fd","title":"\u8907\u88fd","text":"replication
\u5728\u5e7e\u500b\u7bc0\u9ede\uff08\u6216\u7a31 replica\uff09\u4e0a\u4fdd\u7559\u76f8\u540c\u8cc7\u6599\u7684\u526f\u672c\uff0c\u4ee5\u4fbf\u5728\u67d0\u4e9b\u7bc0\u9ede\u7121\u6cd5\u8a2a\u554f\u6642\uff0c\u8cc7\u6599\u4ecd\u53ef\u8a2a\u554f\u3002
"},{"location":"feedback/designing-data-intensive-applications/glossary/#\u7db1\u76ee","title":"\u7db1\u76ee","text":"schema
\u4e00\u4e9b\u8cc7\u6599\u7d50\u69cb\u7684\u63cf\u8ff0\uff0c\u5305\u62ec\u5176\u6b04\u4f4d\u548c\u8cc7\u6599\u578b\u5225\u3002\u53ef\u4ee5\u5728\u8cc7\u6599\u4e0d\u540c\u7684\u751f\u547d\u9031\u671f\u6642\u6aa2\u67e5\u8a72\u8cc7\u6599\u662f\u5426\u7b26\u5408\u8a72\u7db1\u76ee\uff0c\u4e14\u8a72\u7db1\u76ee\u53ef\u80fd\u5df2\u7d93\u96a8\u6642\u9593\u6709\u6240\u8b8a\u5316\u4e86\u3002
"},{"location":"feedback/designing-data-intensive-applications/glossary/#\u6b21\u7d1a\u7d22\u5f15","title":"\u6b21\u7d1a\u7d22\u5f15","text":"secondary index
\u8207\u8cc7\u6599\u4e00\u8d77\u7dad\u8b77\u7684\u9644\u52a0\u8cc7\u6599\u7d50\u69cb\uff0c\u4f7f\u4f60\u53ef\u4ee5\u9ad8\u6548\u5730\u641c\u5c0b\u8207\u67d0\u7a2e\u689d\u4ef6\u76f8\u5339\u914d\u7684\u8a18\u9304\u3002
"},{"location":"feedback/designing-data-intensive-applications/glossary/#\u5e8f\u5217\u5316","title":"\u5e8f\u5217\u5316","text":"serializable
\u4fdd\u8b49\u591a\u500b\u4f75\u767c\u4ea4\u6613\u540c\u6642\u57f7\u884c\u6642\uff0c\u5b83\u5011\u7684\u884c\u70ba\u8207\u6309\u9806\u5e8f\u9010\u500b\u57f7\u884c\u4ea4\u6613\u76f8\u540c\u3002
"},{"location":"feedback/designing-data-intensive-applications/glossary/#\u7121\u5171\u4eab","title":"\u7121\u5171\u4eab","text":"shared-nothing
\u8207\u5171\u4eab\u8a18\u61b6\u9ad4\u6216\u5171\u4eab\u78c1\u789f\u67b6\u69cb\u76f8\u6bd4\uff0c\u7368\u7acb\u7bc0\u9ede \u6bcf\u500b\u7bc0\u9ede\u90fd\u6709\u81ea\u5df1\u7684 CPU\uff0c\u8a18\u61b6\u9ad4\u548c\u78c1\u789f\u4e26\u900f\u904e\u7db2\u8def\u6e9d\u901a\u3002
"},{"location":"feedback/designing-data-intensive-applications/glossary/#\u504f\u659c","title":"\u504f\u659c","text":"skew
split brain
\u5169\u500b\u7bc0\u9ede\u540c\u6642\u8a8d\u70ba\u81ea\u5df1\u662f\u9818\u5c0e\u8005\u7684\u60c5\u6cc1\uff0c\u9019\u7a2e\u60c5\u6cc1\u53ef\u80fd\u9055\u53cd\u670d\u52d9\u6240\u80fd\u63d0\u4f9b\u7684\u4fdd\u8b49\u3002
"},{"location":"feedback/designing-data-intensive-applications/glossary/#\u8caf\u5b58\u7a0b\u5e8f","title":"\u8caf\u5b58\u7a0b\u5e8f","text":"stored procedure
\u4e00\u7a2e\u628a\u4ea4\u6613\u908f\u8f2f\u9032\u884c\u7de8\u78bc\u5f8c\u653e\u9032\u8cc7\u6599\u5eab\u4e2d\uff0c\u5b83\u53ef\u4ee5\u5b8c\u5168\u5728\u8cc7\u6599\u5eab\u4e0a\u57f7\u884c\uff0c\u4ea4\u6613\u57f7\u884c\u671f\u9593\u7121\u9700\u8207\u5ba2\u6236\u7aef\u901a\u8a0a\u3002
"},{"location":"feedback/designing-data-intensive-applications/glossary/#\u4e32\u6d41\u8655\u7406","title":"\u4e32\u6d41\u8655\u7406","text":"stream process
\u4e00\u7a2e\u4e00\u76f4\u4fdd\u6301\u8a08\u7b97\u7684\u8655\u7406\u65b9\u5f0f\u3002\u53ef\u4ee5\u6301\u7e8c\u63a5\u6536\u4e8b\u4ef6\u6d41\u4f5c\u70ba\u8f38\u5165\uff0c\u4e26\u5f97\u51fa\u4e00\u4e9b\u8f38\u51fa\u3002
"},{"location":"feedback/designing-data-intensive-applications/glossary/#\u540c\u6b65","title":"\u540c\u6b65","text":"synchronous
\u547c\u53eb\u5de5\u4f5c\u5f8c\u7b49\u5f85\u5176\u5b8c\u6210\u518d\u7e7c\u7e8c\u57f7\u884c\u5176\u4ed6\u5de5\u4f5c\u3002
\u53cd\u7fa9\uff1a\u7570\u6b65
"},{"location":"feedback/designing-data-intensive-applications/glossary/#\u539f\u59cb\u7cfb\u7d71","title":"\u539f\u59cb\u7cfb\u7d71","text":"system of record, source of truth
\u4e00\u7a2e\u7cfb\u7d71\u5132\u5b58\u6700\u539f\u59cb\u7684\u8cc7\u6599\uff08\u901a\u5e38\u4ee3\u8868\u8a72\u8cc7\u6599\u6700\u5177\u6b0a\u5a01\u6216\u8005\u6700\u771f\u5be6\uff09\u3002\u9996\u5148\u5728\u9019\u88e1\u5132\u5b58\u8cc7\u6599\u5f8c\uff0c\u5176\u4ed6\u8cc7\u6599\u5eab\u4fbf\u53ef\u4ee5\u5f9e\u4e2d\u8a08\u7b97\u51fa\u884d\u751f\u8cc7\u6599\u3002
"},{"location":"feedback/designing-data-intensive-applications/glossary/#\u8d85\u6642","title":"\u8d85\u6642","text":"timeout
\u6aa2\u6e2c\u6545\u969c\u7684\u6700\u7c21\u55ae\u65b9\u6cd5\u4e4b\u4e00\uff0c\u5373\u5728\u4e00\u6bb5\u6642\u9593\u5167\u89c0\u5bdf\u662f\u5426\u5f97\u5230\u56de\u61c9\u3002\u4f46\u662f\u4e0d\u53ef\u80fd\u77e5\u9053\u8d85\u6642\u7684\u539f\u56e0\uff08\u53ef\u80fd\u662f\u9060\u7aef\u7bc0\u9ede\u7684\u554f\u984c\u6216\u8005\u7db2\u8def\u6e9d\u901a\u6642\u7684\u554f\u984c\uff09\u3002
"},{"location":"feedback/designing-data-intensive-applications/glossary/#\u5168\u5e8f","title":"\u5168\u5e8f","text":"total order
\u4e00\u7a2e\u6bd4\u8f03\u4ea4\u6613\u7684\u65b9\u6cd5\uff08\u4f8b\u5982\u6642\u9593\u6233\uff09\uff0c\u53ef\u4ee5\u8b93\u4f60\u7e3d\u662f\u8aaa\u51fa\u5169\u4ef6\u4e8b\u4e2d\u54ea\u4e00\u4ef6\u8f03\u65e9\u767c\u751f\uff0c\u54ea\u4ef6\u8f03\u665a\u767c\u751f\u3002\u7136\u800c\u6709\u4e9b\u6771\u897f\u662f\u4e0d\u80fd\u6bd4\u8f03\u5176\u5148\u5f8c\u7684\uff0c\u9019\u6642\u7a31\u5176\u70ba\u70ba\u504f\u5e8f\uff08partial order\uff09\u3002
"},{"location":"feedback/designing-data-intensive-applications/glossary/#\u4ea4\u6613","title":"\u4ea4\u6613","text":"transaction
\u70ba\u4e86\u7c21\u5316\u5bb9\u932f\uff08fault tolerance\uff09\u548c\u4e26\u884c\uff08concurrency\uff09\u554f\u984c\uff0c\u5c07\u5e7e\u500b\u8b80\u5beb\u64cd\u4f5c\u5206\u7d44\u5230\u4e00\u500b\u908f\u8f2f\u55ae\u5143\u4e2d\u3002
"},{"location":"feedback/designing-data-intensive-applications/glossary/#\u5169\u968e\u6bb5\u63d0\u4ea4","title":"\u5169\u968e\u6bb5\u63d0\u4ea4","text":"2PC, two-phase commit
\u4e00\u7a2e\u78ba\u4fdd\u591a\u500b\u7bc0\u9ede\u5168\u90e8\u63d0\u4ea4\u6216\u5168\u90e8\u4e2d\u6b62\u4ea4\u6613\u7684\u6f14\u7b97\u6cd5\u3002
"},{"location":"feedback/designing-data-intensive-applications/glossary/#\u5169\u968e\u6bb5\u9396","title":"\u5169\u968e\u6bb5\u9396","text":"2PL, two-phase locking
\u4e00\u7a2e\u7528\u65bc\u5be6\u73fe\u5e8f\u5217\u5316\u9694\u96e2\u7684\u6f14\u7b97\u6cd5\uff0c\u8a72\u6f14\u7b97\u6cd5\u6703\u8ce6\u4e88\u9396\u65bc\u4ea4\u6613\u4e2d\u6240\u6709\u63a5\u89f8\u5230\u7684\u8cc7\u6599\uff0c\u76f4\u5230\u4ea4\u6613\u7d50\u675f\u3002
"},{"location":"feedback/designing-data-intensive-applications/glossary/#\u7121\u908a\u754c","title":"\u7121\u908a\u754c","text":"unbounded
\u6c92\u6709\u4efb\u4f55\u5df2\u77e5\u7684\u4e0a\u9650\u6216\u5927\u5c0f\u3002\u53cd\u7fa9\u8a5e\u662f\u908a\u754c bounded \u3002
\u53cd\u7fa9\uff1a\u908a\u754c
"},{"location":"feedback/distributed-systems-with-node.js/","title":"Distributed Systems with Node.js","text":"\u53c3\u8003\u66f8\u7c4d \u4f7f\u7528 Repo Distributed-Systems-with-Node.js evan361425/distributed-node"},{"location":"feedback/distributed-systems-with-node.js/#\u8aaa\u660e","title":"\u8aaa\u660e","text":"\u50b3\u7d71\u4e0a\uff0c\u61c9\u7528\u7a0b\u5f0f\u7686\u70ba\u540c\u4e00\u5305\u7a0b\u5f0f\u78bc\u4e2d\uff0c\u9019\u6642\u6703\u9020\u6210\u4ec0\u9ebc\u554f\u984c\uff1f
\u6574\u9ad4\u4f86\u8aaa\uff0c\u9019\u6a23\u7684\u505a\u6cd5\u6210\u672c\u592a\u9ad8\u4e86\u3002
\u5206\u6563\u5f0f\u7cfb\u7d71\uff0c\u5373\u662f\u628a\u4e00\u500b\u5927\u578b\u61c9\u7528\u7a0b\u5f0f\uff0c\u62c6\u6210\u5e7e\u500b\u5c0f\u7684\u670d\u52d9\u3002 \u9019\u6642\u4ecd\u6703\u9047\u5230\u50b3\u7d71\u505a\u6cd5\u4e0d\u6703\u9047\u5230\u7684\u554f\u984c\uff1a
\u4e4b\u5f8c\u6703\u4f7f\u7528\u7684\u7bc4\u4f8b\u67b6\u69cb\u82e5\u7121\u8aaa\u660e\u5247\u70ba\uff1a
\u8b1b\u89e3\u9806\u5e8f\uff1a
\uff08\u5f8c\u9762\u7684\u300c\u554f\u984c x\u300d\u4ee3\u8868\u5617\u8a66\u89e3\u6c7a\u7684\u554f\u984c\uff09
\u4e0a\u4e00\u4efd\u5831\u544a\u8aaa\u660e Container \u7684\u50f9\u503c\u548c\u5efa\u69cb\u908f\u8f2f\u3002\u800c Docker \u4e0d\u50c5\u4f5c\u70ba\u5305\u88dd\u61c9\u7528\u7a0b\u5f0f\u7684\u5de5\u5177\uff0c\u4e5f\u5e6b\u6211\u5011\u7ba1\u7406 Container\u3002
\u4f46\u662f\u4ecd\u6709\u4e00\u4e9b\u72c0\u6cc1\u9700\u8981\u89e3\u6c7a\uff1a
\u9019\u6642\u4fbf\u9700\u8981\u4e00\u500b\u8abf\u5ea6\u5bb9\u5668\uff08Container\uff09\u7684\u5de5\u5177\u3002
"},{"location":"feedback/distributed-systems-with-node.js/container-orchestration-and-misc/#kubernetes","title":"Kubernetes","text":"Kubernetes \u53ef\u4ee5\u89e3\u6c7a\u4e0a\u8ff0\u63d0\u5230\u7684\u554f\u984c\u3002\u63a5\u4e0b\u4f86\u6703\u5148\u7c21\u55ae\u4ecb\u7d39\u5176\u4e2d\u5404\u540d\u8a5e\u4ee3\u8868\u7684\u610f\u7fa9\uff0c\u7136\u5f8c\u518d\u5be6\u4f5c\uff0c\u9019\u6a23\u5c0d\u65bc\u5be6\u4f5c\u6642\u64cd\u4f5c\u7684\u5404\u500b\u6307\u4ee4\u5c31\u6703\u6bd4\u8f03\u6709\u611f\u3002
"},{"location":"feedback/distributed-systems-with-node.js/container-orchestration-and-misc/#\u55ae\u4f4d","title":"\u55ae\u4f4d","text":"\u4ee5\u4e0b\u5c07\u9010\u4e00\u4ecb\u7d39 Kubernetes \u7684\u57fa\u672c\u55ae\u4f4d\u3002
\u7ba1\u7406\u5bb9\u5668\u5316\u7684\u61c9\u7528\u7a0b\u5f0f\uff0c\u9664\u4e86 Docker \u5916\uff0c\u4e0a\u4e00\u4efd\u5831\u544a\u63d0\u5230\u7684 rkt \u4e5f\u662f\u5141\u8a31\u7684\u61c9\u7528\u7a0b\u5f0f\u3002
"},{"location":"feedback/distributed-systems-with-node.js/container-orchestration-and-misc/#volume","title":"Volume","text":"\u548c Host \u7684 filesystem \u505a\u9023\u63a5\u7684\u670d\u52d9\uff0c\u5c0d Container \u63d0\u4f9b\u8cc7\u6599\u5b58\u53d6\u7684\u5730\u65b9\u3002
"},{"location":"feedback/distributed-systems-with-node.js/container-orchestration-and-misc/#pod","title":"Pod","text":"\u7528\u4f86\u5305\u88dd Container \u548c Volume \u7684\u55ae\u4f4d\uff0c\u4e00\u500b Pod \u6703\u88ab\u5206\u914d\u5230\u4e00\u500b IP\u3002\u82e5 Pod \u4e2d\u542b\u6709\u591a\u7684 Container \u7684\u8a71\uff0c\u5404\u500b Container \u6703\u5171\u7528\u8a72\u7d44 IP\u3002
\u6709\u4e0a\u8ff0\u4e09\u500b\u55ae\u4f4d\u53ef\u4ee5\u756b\u51fa\u4e00\u500b\u5716\uff1a
"},{"location":"feedback/distributed-systems-with-node.js/container-orchestration-and-misc/#node","title":"Node","text":"\u5982\u540c Docker \u7ba1\u7406 Container \u4e00\u822c\uff0cNode \u5c31\u662f\u7ba1\u7406 Pod \u7684\u55ae\u4f4d\u3002 \u4e00\u500b Node \u5e95\u4e0b\u9700\u8981\u4e00\u4e9b\u8f14\u52a9\u5de5\u5177\u4f86\u5e6b\u52a9\u7ba1\u7406\u5404\u500b Pod \u548c Container\uff1a
\u7528\u4f86\u7ba1\u7406 Node\uff0c\u4e26\u5c0d\u5916\u958b\u653e API\uff0c\u63d0\u4f9b\u9014\u5f91\u53bb\u64cd\u4f5c\u5404\u500b Node\u3002 \u5982\uff1a\u958b\u767c\u8005\u53ef\u4ee5\u901a\u904e kubectl
\u900f\u904e Master \u53bb\u64cd\u4f5c\u5404\u500b Node\u3002 \uff08\u985e\u4f3c\u65bc Docker CLI
\u900f\u904e Daemon
\u53bb\u64cd\u4f5c\u5404\u500b Container
\uff09
\u4e00\u7d44\u7531 Master \u548c\u591a\u500b Node \u7d44\u6210\u7684\u7fa4\u7d44\u3002
"},{"location":"feedback/distributed-systems-with-node.js/container-orchestration-and-misc/#\u5b8c\u6574\u6982\u7565\u5716","title":"\u5b8c\u6574\u6982\u7565\u5716","text":""},{"location":"feedback/distributed-systems-with-node.js/container-orchestration-and-misc/#\u6982\u5ff5","title":"\u6982\u5ff5","text":"\u6bcf\u6b21\u547c\u53eb Master \u505a\u4e8b\u60c5\uff0c\u4e8b\u5be6\u4e0a\u5c31\u662f\u6307\u5b9a\u4e00\u500b Cluster \u61c9\u8a72\u6709\u7684\u72c0\u614b\uff0c\u5982\uff1a
\u6211\u5e0c\u671b\u67d0\u67d0 Node \u88e1\u9762\u6709 10 \u500b\u7248\u672c 2 \u7684 Pod\u3002
\u6b64\u6642 Kubernetes \u5c31\u6703\u91dd\u5c0d\u8a72\u72c0\u614b\u958b\u59cb\u505a\u4e8b\uff0c\u4e0d\u7ba1\u662f\u964d\u4f4e\u3001\u5347\u9ad8\u6578\u91cf\u6216\u5347\u964d\u7248\u672c\u7684\u64cd\u4f5c\u90fd\u662f\u7531 Kubernetes \u53bb\u57f7\u884c\u3002
\u6b64\u8655\u5305\u62ec\u57f7\u884c\u908f\u8f2f\uff0c\u4f8b\u5982\u9810\u671f 10 \u500b Pod\uff0c\u73fe\u6709 4 \u500b\uff0c\u9700\u589e\u52a0 6 \u500b\uff0c\u6b64\u8655\u7684 6 \u500b\u5c31\u662f Kubernetes \u81ea\u884c\u53bb\u8a08\u7b97\u51fa\u7684\u6578\u5b57\u3002
\u63a5\u4e0b\u4f86\u6703\u4ecb\u7d39\u5e7e\u500b\u5728\u672c\u6b21\u5be6\u4f5c\u6703\u61c9\u7528\u5230\u7684\u89c0\u5ff5\u3002
\u7528\u4f86\u8868\u9054\u90e8\u7f72\u6642\u6b32\u9054\u6210\u7684\u72c0\u614b\uff0c\u901a\u5e38\u662f\u6700\u5e38\u63a5\u89f8\u7684\u5de5\u5177\u3002
\u72c0\u614b\u53ef\u80fd\u5305\u62ec\u6578\u91cf\u3001\u7248\u672c\u7b49\u3002
"},{"location":"feedback/distributed-systems-with-node.js/container-orchestration-and-misc/#selector","title":"Selector","text":"\u7528\u4f86\u6307\u5b9a\u7279\u5b9a Pod \u7684\u689d\u4ef6\uff0c\u4f8b\u5982\uff1a\u6709\u9ad8\u904b\u7b97\u9700\u6c42\u7684\u5c31\u6703\u8981\u6c42\u6709 machine:physical
\u9019\u500b Label \u7684 Pod\u3002
\u7528\u4f86\u5e6b Node \u548c Pod \u8cbc\u6a19\u7c64\uff0c\u4ee5 Node.js \u70ba\u4f8b\uff1a
platform:node
playform-version:v14
machine:physical
kernel:3.16
app:web-api
app:recipe-api
Label \u4e0d\u5fc5\u552f\u4e00\uff0c\u4f60\u53ef\u4ee5\u91cd\u8907\u8a2d\u5b9a\u4e00\u6a23\u7684 key\uff0c\u5982\uff1aplatform:node
\u3001platform:alpine
Kubernetes \u6703\u6e2c\u8a66\u73fe\u6709\u74b0\u5883\uff08\u5982 CPU/Memory\uff09\u662f\u5426\u9069\u5408\u6dfb\u52a0 Pod\u3002\u82e5\u7121\uff0c\u5247\u7b49\u5f85\u3002
\u9810\u8a2d\u505a Scheduling \u7684\u5de5\u5177\u70ba kube-scheduler\u3002
"},{"location":"feedback/distributed-systems-with-node.js/container-orchestration-and-misc/#controller","title":"Controller","text":"\u7528\u4f86\u63a7\u5236 Kubernetes \u5404\u7a2e\u72c0\u614b\u7684\u63a7\u5236\u5668\uff0c\u901a\u5e38\u958b\u767c\u8005\u4e0d\u6703\u76f4\u63a5\u63a5\u89f8\u3002
"},{"location":"feedback/distributed-systems-with-node.js/container-orchestration-and-misc/#replicaset","title":"ReplicaSet","text":"\u9664\u4e86 ReplicaSet \u5916\uff0c\u6839\u64da\u9700\u6c42\u9084\u6709\u5176\u4ed6\u7a2e\u985e\u7684\u7fa4\u7d44\uff0c\u5982\uff1a
Stateful \u7684\u61c9\u7528\u7a0b\u5f0f\u5728\u9019\u5e7e\u6b21\u5831\u544a\u90fd\u4e0d\u6703\u8a0e\u8ad6\uff0c\u56e0\u70ba\u5c0d\u65bc\u9700\u8981\u5132\u5b58\u72c0\u614b\u7684\u61c9\u7528\u7a0b\u5f0f\uff0c\u5176\u5efa\u69cb\u3001\u90e8\u7f72\u7684\u7b56\u7565\u662f\u53e6\u4e00\u9805\u9818\u57df\u3002
"},{"location":"feedback/distributed-systems-with-node.js/container-orchestration-and-misc/#probe","title":"Probe","text":"\u7528\u4f86\u505a Health Check\u3002
\u5982\u540c Docker \u6703\u6c7a\u5b9a\u54ea\u4e00\u500b Container \u6709\u5c0d\u5916\u7684 port \u4e00\u6a23\uff0cService \u4e5f\u6703\u5229\u7528 Selector \u6c7a\u5b9a\u54ea\u4e00\u500b Pod \u662f\u53ef\u4ee5\u5c0d\u5916\u7684\u3002 \u985e\u4f3c\u65bc reverse-proxy \u822c\uff0c\u6c7a\u5b9a\u5916\u90e8\u54ea\u4e9b\u8acb\u6c42\u53ef\u4ee5\u9001\u9032 Pod \u88cf\u9762\u3002
\u5728\u524d\u5e7e\u6b21\u5831\u544a\u4e2d\u5e38\u5e38\u63d0\u5230 service\uff0c\u5176\u4ee3\u8868\u7684\u610f\u7fa9\u662f\u670d\u52d9\u6216\u61c9\u7528\u7a0b\u5f0f\uff0c\u6709\u5225\u65bc\u6b64\u8655\u63d0\u5230\u7684 Service
"},{"location":"feedback/distributed-systems-with-node.js/container-orchestration-and-misc/#ingress","title":"Ingress","text":"\u7ba1\u7406 Cluster \u5916\u90e8\u7684\u8acb\u6c42\u3002
"},{"location":"feedback/distributed-systems-with-node.js/container-orchestration-and-misc/#alternatives","title":"Alternatives","text":"\u7531\u4e0a\u8ff0\u53ef\u77e5\uff0cKubernetes \u64c1\u6709\u975e\u5e38\u8c50\u5bcc\u7684\u529f\u80fd\uff0c\u4e26\u4e14\u53ef\u4ee5\u900f\u904e\u591a\u7a2e\u65b9\u5f0f\u9054\u6210\u540c\u4e00\u500b\u76ee\u7684\uff08\u4f8b\u5982 dev/stg \u7684\u74b0\u5883\u5206\u5272\uff09\u3002\u9019\u88e1\u4e5f\u4e26\u672a\u5b8c\u5168\u6db5\u84cb Kubernetes \u7684\u6982\u5ff5\uff08\u4f8b\u5982\u4ee5 etcd \u505a\u5132\u5b58\u7684\u6f14\u7b97\u6cd5\uff09
Apache Mesos \u548c Apache Marathon \u7684\u7d44\u5408\u80fd\u9054\u5230\u985e\u4f3c Kubernetes \u7684\u529f\u80fd\u3002 Docker Swarm \u662f Docker \u539f\u751f\u7684\u5bb9\u5668\u5316\u8abf\u5ea6\u5de5\u5177\uff0c\u4f46 Docker \u5df2\u7d93\u6368\u68c4\u4e26\u6539\u63a1\u548c Kubernetes \u7684\u517c\u5bb9\u4e86\u3002
"},{"location":"feedback/distributed-systems-with-node.js/container-orchestration-and-misc/#minikube","title":"minikube","text":"\u70ba\u4e86\u7c21\u5316\u5be6\u4f5c\u4e0a\u9700\u8981\u505a\u7684\u8a2d\u5b9a\uff0c\u672c\u6b21\u5be6\u4f5c\u6703\u900f\u904e minikube \u4f86\u64cd\u4f5c\u3002minikube \u662f\u4e00\u500b\u7c21\u5316\u7248\u7684 Kubernetes\uff0c\u4ed6\u6e1b\u5c11\u5f88\u591a\u529f\u80fd\u7684\u8a2d\u5b9a\uff0c\u8b93\u4f7f\u7528\u8005\u53ef\u4ee5\u5feb\u901f\u958b\u59cb\u5be6\u4f5c\uff0c\u4e26\u4e14\u628a Master/Node \u878d\u5408\u518d\u4e00\u8d77\u3002
kubectl version --client
brew install kubernetes-cli
minikube version
brew install minikube
$ minikube start\n\ud83d\ude04 minikube v1.20.0 on Darwin 11.4\n\ud83c\udf89 minikube 1.22.0 is available! Download it: https://github.com/kubernetes/minikube/releases/tag/v1.22.0\n\u2728 Using the hyperkit driver based on existing profile\n\ud83d\udca1 To disable this notice, run: 'minikube config set WantUpdateNotification false'\n\n\ud83d\udc4d Starting control plane node minikube in cluster minikube\n\ud83d\udd04 Restarting existing hyperkit VM for \"minikube\" ...\n\ud83d\udc33 Preparing Kubernetes v1.20.2 on Docker 20.10.6 ...\n\ud83d\udd0e Verifying Kubernetes components...\n \u25aa Using image k8s.gcr.io/ingress-nginx/controller:v0.44.0\n \u25aa Using image kubernetesui/dashboard:v2.1.0\n \u25aa Using image docker.io/jettech/kube-webhook-certgen:v1.5.1\n \u25aa Using image kubernetesui/metrics-scraper:v1.0.4\n \u25aa Using image gcr.io/k8s-minikube/storage-provisioner:v5\n \u25aa Using image docker.io/jettech/kube-webhook-certgen:v1.5.1\n\ud83d\udd0e Verifying ingress addon...\n\ud83c\udf1f Enabled addons: storage-provisioner, default-storageclass, ingress, dashboard\n\ud83c\udfc4 Done! kubectl is now configured to use \"minikube\" cluster and \"default\" namespace by default\n
$ kubectl get pods\nNo resources found in default namespace.\n
\u56e0\u70ba\u9810\u8a2d\u4f7f\u7528 default
namespace
$ kubectl get namespace\nNAME STATUS AGE\ndefault Active 48d\ningress-nginx Active 48d\nkube-node-lease Active 48d\nkube-public Active 48d\nkube-system Active 48d\nkubernetes-dashboard Active 48d\n
$ kubectl get pods --namespace=kube-system\nNAME READY STATUS RESTARTS AGE\ncoredns-74ff55c5b-sq5jt 1/1 Running 1 48d\netcd-minikube 1/1 Running 1 48d\nkube-apiserver-minikube 1/1 Running 1 48d\nkube-controller-manager-minikube 1/1 Running 1 48d\nkube-proxy-vslx5 1/1 Running 1 48d\nkube-scheduler-minikube 1/1 Running 1 48d\nstorage-provisioner 1/1 Running 2 48d\n
$ kubectl get nodes\nNAME STATUS ROLES AGE VERSION\nminikube Ready control-plane,master 48d v1.20.2\n
docker ps
\u518d\u5957\u7528 minikube \u7684 Docker daemon eval $(minikube -p minikube docker-env)
$ minikube -p minikube docker-env\nexport DOCKER_TLS_VERIFY=\"1\"\nexport DOCKER_HOST=\"tcp://192.168.64.2:2376\"\nexport DOCKER_CERT_PATH=\"/Users/evan.lu/.minikube/certs\"\nexport MINIKUBE_ACTIVE_DOCKERD=\"minikube\"\n\n# To point your shell to minikube's docker-daemon, run:\n# eval $(minikube -p minikube docker-env)\n
\u518d\u4e00\u6b21\u547c\u53eb docker ps
$ docker ps\nCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES\nc3a17f71f9f9 435df390f367 \"/usr/bin/dumb-init \u2026\" 35 minutes ago Up 35 minutes k8s_controller_ingress-nginx-controller-5d88495688-ljjlx_ingress-nginx_44335178-30e5-4dc5-a481-7980627f281d_1\n825f8d008c8f 86262685d9ab \"/metrics-sidecar\" 35 minutes ago Up 35 minutes k8s_dashboard-metrics-scraper_dashboard-metrics-scraper-f6647bd8c-zbbkd_kubernetes-dashboard_13929488-084b-407c-9339-1b6b7b7feb2d_1\n8258d336d0d1 6e38f40d628d \"/storage-provisioner\" 35 minutes ago Up 35 minutes k8s_storage-provisioner_storage-provisioner_kube-system_182b3e9c-2cd2-429f-aa0f-3103f916f32a_2\n9edd75250040 9a07b5b4bfac \"/dashboard --insecu\u2026\" 35 minutes ago Up 35 minutes k8s_kubernetes-dashboard_kubernetes-dashboard-968bcb79-4l99k_kubernetes-dashboard_5cfcc5ce-7fb2-4304-baa1-6bf491e71469_1\nc53e01b79ee7 k8s.gcr.io/pause:3.2 \"/pause\" 35 minutes ago Up 35 minutes 0.0.0.0:80->80/tcp, :::80->80/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp k8s_POD_ingress-nginx-controller-5d88495688-ljjlx_ingress-nginx_44335178-30e5-4dc5-a481-7980627f281d_1\n72d0bf46751a k8s.gcr.io/pause:3.2 \"/pause\" 35 minutes ago Up 35 minutes k8s_POD_storage-provisioner_kube-system_182b3e9c-2cd2-429f-aa0f-3103f916f32a_1\nb5ef7f9450a2 43154ddb57a8 \"/usr/local/bin/kube\u2026\" 35 minutes ago Up 35 minutes k8s_kube-proxy_kube-proxy-vslx5_kube-system_e9319a11-d048-41ed-8cb1-92a0a17d67b5_1\n0cb200215df8 bfe3a36ebd25 \"/coredns -conf /etc\u2026\" 35 minutes ago Up 35 minutes k8s_coredns_coredns-74ff55c5b-sq5jt_kube-system_8f238e64-e20d-4899-8a46-96d783fa8250_1\n7ffd1a33f25c k8s.gcr.io/pause:3.2 \"/pause\" 35 minutes ago Up 35 minutes k8s_POD_dashboard-metrics-scraper-f6647bd8c-zbbkd_kubernetes-dashboard_13929488-084b-407c-9339-1b6b7b7feb2d_1\nb589a1d27625 k8s.gcr.io/pause:3.2 \"/pause\" 35 minutes ago Up 35 minutes k8s_POD_kubernetes-dashboard-968bcb79-4l99k_kubernetes-dashboard_5cfcc5ce-7fb2-4304-baa1-6bf491e71469_1\n809d46696a2e k8s.gcr.io/pause:3.2 \"/pause\" 35 minutes ago Up 35 minutes k8s_POD_kube-proxy-vslx5_kube-system_e9319a11-d048-41ed-8cb1-92a0a17d67b5_1\na6e5be9a3bb9 k8s.gcr.io/pause:3.2 \"/pause\" 35 minutes ago Up 35 minutes k8s_POD_coredns-74ff55c5b-sq5jt_kube-system_8f238e64-e20d-4899-8a46-96d783fa8250_1\n41d81fb8bbd9 0369cf4303ff \"etcd --advertise-cl\u2026\" 35 minutes ago Up 35 minutes k8s_etcd_etcd-minikube_kube-system_cf26ec9554c6f440822285b6ff9668f3_1\nc7a6eca2d3f9 ed2c44fbdd78 \"kube-scheduler --au\u2026\" 35 minutes ago Up 35 minutes k8s_kube-scheduler_kube-scheduler-minikube_kube-system_6b4a0ee8b3d15a1c2e47c15d32e6eb0d_1\n3e9a5a9df7da a27166429d98 \"kube-controller-man\u2026\" 35 minutes ago Up 35 minutes k8s_kube-controller-manager_kube-controller-manager-minikube_kube-system_474c55dfb64741cc485e46b6bb9f2dc0_1\ndcbf747b8975 a8c2fdb8bf76 \"kube-apiserver --ad\u2026\" 35 minutes ago Up 35 minutes k8s_kube-apiserver_kube-apiserver-minikube_kube-system_0a7845e36bfd593e2ff9a027038089d3_1\nac54b241757d k8s.gcr.io/pause:3.2 \"/pause\" 35 minutes ago Up 35 minutes k8s_POD_kube-scheduler-minikube_kube-system_6b4a0ee8b3d15a1c2e47c15d32e6eb0d_1\n6a91f7f8e57c k8s.gcr.io/pause:3.2 \"/pause\" 35 minutes ago Up 35 minutes k8s_POD_kube-controller-manager-minikube_kube-system_474c55dfb64741cc485e46b6bb9f2dc0_1\n495996cf491c k8s.gcr.io/pause:3.2 \"/pause\" 35 minutes ago Up 35 minutes k8s_POD_kube-apiserver-minikube_kube-system_0a7845e36bfd593e2ff9a027038089d3_1\n6ea9c36a7ff8 k8s.gcr.io/pause:3.2 \"/pause\" 35 minutes ago Up 35 minutes k8s_POD_etcd-minikube_kube-system_cf26ec9554c6f440822285b6ff9668f3_1\n
"},{"location":"feedback/distributed-systems-with-node.js/container-orchestration-and-misc/#dashboard","title":"Dashboard","text":"\u6709\u4e00\u500b UI \u4ecb\u9762\u6703\u8b93\u4f60\u5c0d Kubernetes \u66f4\u4e86\u89e3
$ minikube dashboard\n\ud83e\udd14 Verifying dashboard health ...\n\ud83d\ude80 Launching proxy ...\n\ud83e\udd14 Verifying proxy health ...\n\ud83c\udf89 Opening http://127.0.0.1:56616/api/v1/namespaces/kubernetes-dashboard/services/http:kubernetes-dashboard:/proxy/ in your default browser...\n
minikube \u5f88\u9069\u5408\u7528\u4f86\u505a local \u7aef\u6e2c\u8a66\u6216\u6559\u5b78\uff0c\u4f46\u662f\u5c0d\u65bc\u7dda\u4e0a\u74b0\u5883\uff0c\u4ecd\u5efa\u8b70\u76f4\u63a5\u5b89\u88dd Kubernetes\u3002
"},{"location":"feedback/distributed-systems-with-node.js/container-orchestration-and-misc/#\u90e8\u7f72\u61c9\u7528\u7a0b\u5f0f","title":"\u90e8\u7f72\u61c9\u7528\u7a0b\u5f0f","text":"\u76ee\u6a19\uff1a
\u958b\u59cb\u90e8\u7f72\u61c9\u7528\u7a0b\u5f0f\u4e4b\u524d\uff0c\u5148\u628a\u61c9\u7528\u7a0b\u5f0f\u7528 image \u5305\u88dd\u597d\u3002
"},{"location":"feedback/distributed-systems-with-node.js/container-orchestration-and-misc/#\u61c9\u7528\u7a0b\u5f0f","title":"\u61c9\u7528\u7a0b\u5f0f","text":"\u5fc5\u9808\u4f7f\u7528 minikube \u7684 Docker \u5efa\u7f6e image\u3002
eval $(minikube -p minikube docker-env)\ndocker build . -t recipe-api:latest\n
"},{"location":"feedback/distributed-systems-with-node.js/container-orchestration-and-misc/#\u90e8\u7f72","title":"\u90e8\u7f72","text":"\u5206\u5225\u90e8\u7f72\u61c9\u7528\u7a0b\u5f0f\u548c Service
"},{"location":"feedback/distributed-systems-with-node.js/container-orchestration-and-misc/#\u61c9\u7528\u7a0b\u5f0f_1","title":"\u61c9\u7528\u7a0b\u5f0f","text":"tldrH4sIAAAAAAAACs1c245a2RH9lRHPbLTvF79NFCXxSzTKRMrDZB721UbBTYduzyUj/3vWPnRzjtuGLqBbPpYsQVMcqMXadVlV8MfiJn6oizeLv9dfv/vzNn/8UG/uF8tFW2/q3+JN2eCxm4+bzXJRHh9888diXfAM/AGGX3/6L3V3t97eLN4IszLLxW18V+/6E/uNwwWGO4cr/IB73wncz+/Xm/L2ptTf8PTl4u59vN0/2amqg5CeRRE4095IJo03LKukKm9Zc2EOFycZLxf3v9/2F9/VfB9v3m0m7+cfkz/dxh38ejt500/e5O123ZH5SXu/lJr/jLe9/h+u8pP0emkU7u+29/F+gITjwfvfO7B/LPJ2s93hqmkT838Wj89a3H2Imw3uru/+st5sKl63xc1dxYcQ79536Hfx126dY7+M+LRcbGKqGzyyeLj5w8Mb4oAf/3+GiVe+2VoUE6k2pqMrjDdrGefK5ZaVMaId4CMZvwx88nP4lLJT+OzSiFnAJ6IMThXNXBSGaWsEUzx5ZkJ0VRVfWhMH+EjGB/ju62/3I3L/3N87DZoaQTNBgnP+KUjDRd8s3t6829W7u8WLo4YYse2vjz/s1rf9HfdX/H6zfofXX3xYlx47PnXgisjwmDMndWKaO8+49Y7FIKzVgCLkMSaQjK8BTk+AcxYfr9LuCHT/qum7H+vul/Xwkt8KPqNk0jInlqvNTGuvmMIJZC0qZTQvUhV3gI9kTIaPB2+tFYLlEIYPozCJsMlkyi7Ehj96eyIWOrnUxh4H9983P2zLN0S2GOUKL4H55iTTtWnGcykIeTYX0WNe1GO2oxhfEBAvwHgaMI1d6mm+cWYZwiziJcmxR3SJKDyg+263/Xg7IvvXh7unD745F7XhybgiHqeeKxJJfn75D6STOQYXq5csc6OZVqkyURxnUdoiUhRWpzE9kYzJYSLrKLPLgaWCwK1TkUylbFhN0klug+UyHQ8Tlvt5hwlVc8gyWCZcDKgktWdKwr2SVY3cNMFdOiBLMr4gTFyAsfy8RJhpmPAGby7UjIPiUWgqVOyqec6Ujl4VbiIKzrEqpRiTeVt9xImsnFkVgamyjqlYLVNWNxmb0imf4K3Tet681QhQOrvGiu/uSe6YDIhZKtico3Y8Rn5AlmR8AW8vwHjCWyf9XHlLOpCP6BJP7zXpzZ172qfpjZgPSMHtddIbiUePcBNJdw3cgp/L0inexDhGOpSvg7cqwvjk0bZmOzSwmQkRGqu61hRzTMWMwYNkfE3TJiZx11i+BHpH4i7C0Pq2zqBtq1q14HCGGq+oaGs0qAJNYIKX5KziRdUxr5GMX0iseiK3GK9nKbdYWR2AkKwirDDdnAAkKTDoAPhLMhU9wgE/kjGZgEqYLHRqjIti0YzgQijvG2s6lIpIXq3Tx+sCL+XSen+Sn9+6NGhKQmcxhXmLFkX7CJWlIP7E5kuINQsZ1QFckvEF5LwA5gl3vbBL6+QcS4PaTDW8okXkHqfZ+4o4zxPjqrXcoD3XOna+JGMydZFYpNU1sOqcwkGA9K1iMSzwlEwJ+KT4CfXaiflT10hTdKqGOct7DcKRaxrk1cB5sjLGymsY5TCK8QXUvQBm+QTmeVI3pRSRshUzA2AW8qtsUbCYEFQdeFrymPZJxnQVIalSnYkM+i+u5kov2qD8Vq+Uix7SSgynVYS5U1c6K6pOlmVvwBqvUP8lpHoJN5sw0rc0DmBIxpcICefDPKGu5Xyu1K1VcZEc6k+cQtTUsQNmI+OOa1RRVVifx6hLMSZTN2qJUrfhQjn3DClRfhQuWDMxxVagEcYTQoIOdvbUzZlDoHWOQcGsXf+UGAdivKVARLgeDf6P3S7F+ALqXgDzk2J3ptR1CY11gfodowIlTW/xRPEsNRelka6INlKXZEymLpoL1HES1ZwuELaRFdnQmCr8E8YKjkHwceoqTLfnTt3WpE8KLWlzKiLgccN45QplZsoNur2Mdoy6JOMLqHsBzBPqKjfbWpdUxB90AlrFf5Uuo89tEaa6DLGPJHVEr6PLkCrPiVxOKVOvwtueW9dO8SY2P6Qy/nXwJpVLh8RHq62uwtufKsbsM3gTK3ZS7fk6eJNy/CPexILgGrwlP1VBPIc3scwkFUyvgzcpMR1kNloWuwrvk2nvObyJtREpy78O3roYG6rEqQoCL200JkEBmq/TzQBZJI84ypok4wPecbfb/jri/f3D3WfwniySWemWWJZ8SO5PYE71pgw33g9bocNC5t193I37oPt7QGN/5cnB4cs+HMnx5k94bPHmfvex9oat337sx3D78MxJgSlWBhuBYRXc0wvgHeH2+ubd4BmSQ0xSWdYU8puWBjMqINdvGe+LxDJZWHR9Y/qi6bNXnRCPr1wAEiuQbVitqHm7G5AYvB4u8YD2p29UdjXpUnQBYzrX9wv7aqHS2NZsHhOjBB4juIxFLcX4ShpNyi6LcRiGhPOiERqVTiN7mkZWZZw01EpZBCQURDtsHyK1SETuVK1B/PPn0AiD2E4jP1caca6byglbSthWRYARDYWVDojvKrjSROR+9JNkfCWNJktaVoYVzr4PL0yilbyYRnw5THlPECjbkEvAKYsJ5ZM2mInyKkClhFrcuqR9MucQSCwlnyt5akU96DVnnqeHIbaIGLWnopzgwSQVxtaPZHwleSatiA5uZfuRly/LHmlXyl7BH4WEdppB2AbJaeghogRQJThkMlRbGd2nSNrkeE4IEmqFjkGYlTNzpVGyBvswrbLoNYochXVJJVGbRZ9yUUY4bDuMjlKMr6TRZJPGcYcI5OaUyjQSq10q+xyPHJogHqBd8IIqWCNmo3bklTlXTVACnRG0FjKPpFohqwu/krPlUeQSfNAOva3CwakW4lJCE5V8lFo6H10eRVSS8ZU8mnTqOqil0WJWPFIrj+zyLI+wdYQltYTmn1vkMYCDpewkmC3R2CyFTeIcHolVEEtEpfnySCcnhbKcSdGbLhwiJiWWvhtOk0kZrdhk1EEyvpJH4fMOzaCOnQmHZA8KvaxWpzkUsgODgmeVZ8ggSUHaqNANGnry4GrWhdszctoKIm8vq91cKZRcLhUKAwScDBk59804GwoTMukcdLQmjF9UJBlfRyE1XVZEEIdoCy3hZVmkhx7r8spImucikbIp6oqiyAqkfS0grApso6JQMlXzBtXMtzMi0b47kzOujEwoJgS0WVYIOJyRqbiBxhkVmi2hlMXzxlUXivGVNJqmD3xeKiytci9LI+dXVlxBI7D7GRoV53RUWeKAGY+hiC5MFq9xt2XDA0RMHek0QvQDLGHG+Qw6eG4WEqeJGf5izxiRBiKZak6XaIN3fvxiEMn4ShZNv5eCKCQ6i144pWnei5srWPRsWWRF3yNvCNMK0yioiwhGLWAk5YVxtpaUijgrGGmxnHN1raHyYOccsyxp+qTOdWVdomBGcWgLerJQRj9JxleyaKpbK+SyzqLXLos+p0Asmrs+fUqpOkwRVILAirsqoIPXIXsuhk6dVkmZoZCSp18SQ0/T9RIMpHv7Wx1GSQUDAYHpBqRJhfqznlNIQW/rhZSdK+tc6JPJAhGt9PI6GLRpCoPIIqzwirfqxLhETzK+knUTmdtxBcrNSubu72b4RJ+rpHD+tMGgFJPFYSAATReZnMXiW9AGSw36jGlJVwUcUuB8CykZIZvlkDDgaxh7Z7jKoSNhAAIUtMhgybjuTjK+kkYTmRubGXOjkRUrhNfnaWSFxNwa4xGrUXdqJzB0g1rQB8OuSg21N5whVSq+svOmUWim6ewsq6WntRowAOkNLQ8S431MIKUdlQGS8VW/ADKRuw3KZhx88xUKHXbx/vux3t1/sz28TwfqDB8naV47UoZg/MWJbLvth7fnTNG3b8/43aD9gdx/xXUg9DizeTzJZY3DedN/20TYYdOCMFscNy0Ixsddpk589y4Tf+vnfJdJ07DD8hTF+LjL1Onk3mXiF3LPd5k0vjlMVCnGx12mztT2LhN/YuOEy5gk8ZX6itOkWcOhTKMYH3eaOgHaO038JvAJp3sfifrmS6dJwvihI6IYH3eaOq54cJr2bdITTuv+SVv9pdMkDe6w7ksxPvFJE4XRl3LaqH6kv/JJk+TrQ96nGJ9IVsSBwos5/fUwRhLJHl0mGR93mapc7l0m7iCecJkH+Cy+kqApks4hQVOMTyRoos6295m453oqdPcoJvyXTpNEjMPUlGJ8gttEWehSbj/2Qs+ymySjHCRRivFLOU3cID//QJNa/kPgphgfd5kqxDxUn7QvKZxK0fIIuUkN6niiCcbHnabKBttzvvt+ymmsIWEQ+tTpodPq3eKP6AGP/+bqXd3gi0q1vC0w+Wlo8z/U3RDSD7IOBs9AYD8m/N92+2HfJ9eyvn8QAPrvwg47+3d39b6/1JM7/weEPuoeXFYAAA==\n
\u4f7f\u7528\u8a2d\u5b9a\u6a94\u4f86\u90e8\u7f72\u61c9\u7528\u7a0b\u5f0f\u3002
\u9019\u88e1\u4e0d\u7d30\u8b1b\u8a2d\u5b9a\u6a94\u5404\u884c\u610f\u7fa9\uff0c\u50c5\u6982\u8ff0\u3002 web-deployment\u3001recipe-deployment
\u5957\u7528\u81f3 minikube\uff1a
kubectl apply -f minikube/recipe-deployment.yml\n
\u9019\u6642\u53ef\u4ee5\u770b\u770b\u662f\u5426\u90fd\u555f\u52d5\u6210\u529f
$ kubectl get deployment\nNAME READY UP-TO-DATE AVAILABLE AGE\nrecipe-api 5/5 5 5 19h\nweb-api 3/3 3 3 18h\n
"},{"location":"feedback/distributed-systems-with-node.js/container-orchestration-and-misc/#service_1","title":"Service","text":"\u4f7f\u7528\u8a2d\u5b9a\u6a94\u4f86\u90e8\u7f72 Service\u3002
\u5728 web-service \u4e2d\u4e00\u540c\u8a2d\u5b9a Ingress\u3002 web-service\u3001recipe-service
host1
\u5f15\u5230 Service A
\u6216 /api/v1
\u5f15\u5230 Service B
\u5957\u7528\u81f3 minikube\uff1a
kubectl apply -f minikube/recipe-service.yml\n
"},{"location":"feedback/distributed-systems-with-node.js/container-orchestration-and-misc/#\u6e2c\u8a66","title":"\u6e2c\u8a66","text":"\u53d6\u5f97 Cluster Ingress address
$ kubectl get ingress\nNAME CLASS HOSTS ADDRESS PORTS AGE\nweb-api-ingress <none> example.org 192.168.64.2 80 96s\n
curl -H \"Host: example.org\" http://192.168.64.2\n
"},{"location":"feedback/distributed-systems-with-node.js/container-orchestration-and-misc/#\u6838\u5fc3\u50f9\u503c","title":"\u6838\u5fc3\u50f9\u503c","text":"\u4e0a\u8ff0\u7bc4\u4f8b\u53ef\u4ee5\u900f\u904e docker-compose \u9054\u6210\uff0c\u4f46\u662f Kubernetes \u4e0d\u50c5\u5982\u6b64\u3002
"},{"location":"feedback/distributed-systems-with-node.js/container-orchestration-and-misc/#\u7248\u672c","title":"\u7248\u672c","text":"\u7576\u6709\u65b0\u7248\u672c\u7684\u61c9\u7528\u7a0b\u5f0f\u9700\u8981\u90e8\u7f72\u6642\uff0cKubernetes \u6703\u5148\u628a\u65b0\u7248\u672c\u7684 Pod \u555f\u8d77\u4f86\uff0c\u7b49\u820a\u7248\u672c\u7684 Pod \u8655\u7406\u5b8c\u8acb\u6c42\u6642\uff0c\u53d6\u4ee3\u4e4b\u3002
\u5148\u628a\u8a2d\u5b9a\u6a94 web-deployment.yml
\u5c0d Container \u7684\u7248\u672c\u8abf\u6574\u81f3 v2
\uff0c\u518d\u5957\u7528\u65b0\u7684\u8a2d\u5b9a\u6a94\u5230 minikube\u3002
--record=true
\u53ef\u4ee5\u8a18\u9304\u672c\u6b21\u6307\u4ee4\u5230 revision\uff0c\u5e6b\u52a9\u672a\u4f86\u9000\u7248\u78ba\u8a8d\u7248\u672c
kubectl apply -f minikube/web-deployment.yml --record=true\n
Kubernetes \u8db3\u5920\u8070\u660e\u53bb\u5224\u65b7\u4f60\u6539\u52d5\u4e86\u54ea\u88e1\uff0c\u7136\u5f8c\u4f5c\u51fa\u8abf\u6574\u3002
\u73fe\u5728\u4f86\u770b\u770b\u90e8\u7f72\u7684\u904e\u7a0b\u5427\u3002
-w
\u53ef\u4ee5\u7528\u4f86\u76e3\u63a7\u72c0\u6cc1\uff0c-l
\u7be9\u9078\u7279\u5b9a label \u7684 Pod
$ kubectl get pods -w -l app=web-api\nNAME READY STATUS RESTARTS AGE\nweb-api-769dc9c8b7-5824q 1/1 Running 0 19h\nweb-api-769dc9c8b7-6x9bc 1/1 Terminating 0 19h\nweb-api-769dc9c8b7-hk2dp 1/1 Running 0 19h\nweb-api-d85b66d56-pkrv5 1/1 Running 0 3s\nweb-api-d85b66d56-bgw55 1/1 Running 0 2s\nweb-api-769dc9c8b7-hk2dp 1/1 Terminating 0 19h\nweb-api-d85b66d56-6qsp4 0/1 Pending 0 0s\nweb-api-d85b66d56-6qsp4 0/1 ContainerCreating 0 0s\nweb-api-d85b66d56-6qsp4 1/1 Running 0 2s\nweb-api-769dc9c8b7-5824q 1/1 Terminating 0 19h\n
\u4f60\u4e5f\u53ef\u4ee5\u770b\u770b\u6709\u904e\u54ea\u4e9b\u8cc7\u6e90\u3002
$ kubectl get rs -l app=web-api\nNAME DESIRED CURRENT READY AGE\nweb-api-769dc9c8b7 0 0 0 20h\nweb-api-d85b66d56 3 3 3 6m34s\n
\u9000\u7248\u6642\uff0c\u5148\u78ba\u8a8d\u7248\u672c\u865f\u78bc\uff1a
$ kubectl rollout history deployment.v1.apps/web-api\nREVISION CHANGE-CAUSE\n1 <none>\n2 kubectl apply --filename=web-api-deployment.yml --record=true\n
\u9000\u7248\uff1a
$ kubectl rollout undo deployment.v1.apps/web-api \\\n --to-revision=1\n
"},{"location":"feedback/distributed-systems-with-node.js/container-orchestration-and-misc/#scaling","title":"Scaling","text":"\u624b\u52d5\u589e\u9577\u5230\u5341\u500b
$ kubectl scale deployment.apps/recipe-api --replicas=10\ndeployment.apps/recipe-api scaled\n$ kubectl get deployment\nNAME READY UP-TO-DATE AVAILABLE AGE\nrecipe-api 5/10 10 5 1m\nweb-api 3/3 3 3 1m\n
\u9664\u4e86\u900f\u904e\u6307\u4ee4\u589e\u6e1b Pod \u6578\u91cf\uff0c\u4e5f\u53ef\u4ee5\u6539\u52d5 Deployment \u6a94\uff0c\u518d\u5f15\u5165\u3002
\u5728 scaling \u7684\u904e\u7a0b\u4e2d\uff0cKubernetes \u6703\u78ba\u5b9a\u53ef\u4ee5\u88ab\u5f15\u7528\u624d\u5f15\u7528\uff0c\u79fb\u9664\u6642\u4ea6\u540c\u3002
\u9019\u88e1\u7684 scaling \u662f\u52d5\u614b\u8abf\u6574\u7684\uff0c\u800c docker-compose \u662f\u7576\u521d\u8a2d\u5b9a\u7684\u6578\u91cf\u5f8c\u505a\u555f\u52d5\uff0c\u4e26\u975e scaling\u3002
\u9664\u4e86\u624b\u52d5\u589e\u9577\u6e1b\u5c11\uff0cKubernetes \u4e5f\u53ef\u4ee5\u81ea\u52d5\u5316\uff1a
Kubernetes \u9084\u6709\u5f88\u591a\u529f\u80fd\uff0c\u6211\u81ea\u5df1\u4e5f\u624d\u525b\u958b\u59cb\u6478\u7d22\uff0c\u5e0c\u671b\u672a\u4f86\u6709\u4eba\u80fd\u6df1\u5165\u77ad\u89e3\u4e26\u548c\u5927\u5bb6\u5206\u4eab\uff01
"},{"location":"feedback/distributed-systems-with-node.js/container-orchestration-and-misc/#misc","title":"Misc","text":"\u4e0a\u8ff0\u9019\u4e9b\u5728\u672c\u66f8\u4e2d\u90fd\u6709\u8a0e\u8ad6\u5230\uff0c\u500b\u4eba\u89ba\u5f97\u4e5f\u5f88\u6709\u8da3\uff0c\u6709\u8208\u8da3\u7684\u4eba\u90fd\u53ef\u4ee5\u770b\u770b\u3002
"},{"location":"feedback/distributed-systems-with-node.js/container/","title":"Container","text":""},{"location":"feedback/distributed-systems-with-node.js/container/#\u670d\u52d9\u5f9e\u4e00\u500b\u8b8a\u591a\u500b","title":"\u670d\u52d9\u5f9e\u4e00\u500b\u8b8a\u591a\u500b","text":"\u554f\u984c\u5f80\u5f80\u5c31\u767c\u751f\u5728\u7576\u670d\u52d9\u5f9e\u4e00\u500b\u8b8a\u6210\u591a\u500b\u6642\u3002
"},{"location":"feedback/distributed-systems-with-node.js/container/#protocol","title":"Protocol","text":"JSON - \u7576\u4f60\u53ea\u6709\u4e00\u500b API Endpoint\uff0c\u8db3\u77e3\u3002
\u4f46\u662f\u7576\u4f60\u6709\u8d8a\u4f86\u8d8a\u591a Endpoint \u751a\u81f3\u540c\u4e00\u6642\u9593\u9700\u8981\u5404\u500b Endpoint \u7684\u8cc7\u6e90...
GraphQL - \u53ea\u9700\u8981\u5c0d\u61c9\u4e00\u500b\u7aef\u9ede\uff0c\u5c31\u53ef\u4ee5\u7372\u5f97\u591a\u500b API \u7684\u8cc7\u8a0a\u4e14\u53ef\u4ee5\u81ea\u884c\u7d44\u7e54\u67e5\u8a62\u5167\u5bb9
\u4f46\u662f API \u7684\u884c\u70ba\u8d8a\u4f86\u8d8a\u8907\u96dc\uff0c\u727d\u6d89\u5230\u591a\u7a2e\u908f\u8f2f...
gRPC - \u53ea\u9700\u8981\u5c08\u5fc3\u64b0\u5beb\u7a0b\u5f0f\u908f\u8f2f\uff0c\u76f8\u95dc\u7684 HTTP client \u7686\u5df2\u7d93\u8655\u7406\u5b8c\u3002
"},{"location":"feedback/distributed-systems-with-node.js/container/#sla-and-load-test","title":"SLA and Load Test","text":"\u600e\u9ebc\u78ba\u4fdd\u7522\u54c1\u5728\u7d93\u904e\u591a\u6b21\u50b3\u8f38\u5f8c\u4ecd\u80fd\u7dad\u6301\u53ef\u9810\u671f\u7684\u4fdd\u8b49
\u7576\u7522\u54c1\u8d8a\u4f86\u8d8a\u591a\uff0c\u600e\u9ebc\u5feb\u901f\u7cbe\u6e96\u7684\u7372\u53d6\u61c9\u7528\u3001\u670d\u52d9\u3001\u8a2d\u5099\u7684\u8cc7\u8a0a\u3002
\u6709\u5f88\u591a\u7a2e\u65b9\u6cd5\u53ef\u4ee5\u63d0\u5347\u670d\u52d9\u7684\u6578\u91cf\uff0c\u5404\u7a2e\u65b9\u5f0f\u90fd\u9700\u6b0a\u8861\uff1a
Container \u5305\u62ec Image\u3001Port Mapping\u3001Volume Mappings Volume \u5c31\u662f\u7ba1\u7406 Container \u7aef\u548c Host \u7aef\u7684 filesystem
"},{"location":"feedback/distributed-systems-with-node.js/container/#docker","title":"Docker","text":"Docker \u662f\u4e00\u500b\u7ba1\u7406\u3001\u5efa\u7f6e Container \u7684\u5de5\u5177\uff0c\u5176\u4e3b\u8981\u6709\u4e09\u500b\u5de5\u5177\uff1a
Docker Desktop Docker \u662f\u57f7\u884c\u5728 Linux \u4e4b\u4e0a\u7684\u5de5\u5177\uff0c\u82e5\u6a5f\u5668\u4e0d\u662f Linux\uff0c\u5c31\u6703\u9700\u8981 Docker Desktop\u3002 \u5176\u4e0d\u50c5\u53ef\u4ee5\u5efa\u7acb VM \u4f86\u6a21\u64ec Linux \u74b0\u5883\uff0c\u4e5f\u63d0\u4f9b\u5176\u4ed6\u597d\u7528\u529f\u80fd\uff0c\u5982 UI \u548c Kubernetes \u7684\u6574\u5408\u3002
"},{"location":"feedback/distributed-systems-with-node.js/container/#docker-image","title":"Docker Image","text":"\u628a\u61c9\u7528\u7a0b\u5f0f\u5305\u88dd\u6210 Image \u518d\u4f9d\u6b64\u5efa\u7acb Container\u3002 \u61c9\u7528\u7a0b\u5f0f\u5927\u90e8\u5206\u90fd\u9700\u8981\u5efa\u7acb\u5728\u7279\u5b9a\u74b0\u5883\u4e4b\u4e0a\uff0c\u4ee5 Node.js \u7684\u61c9\u7528\u7a0b\u5f0f\u70ba\u4f8b\uff1a
\u6bcf\u500b\u74b0\u5883\u90fd\u7a31\u70ba\u4e00\u7d44 stage\uff0c\u5982 Linux
\u3001Node.js
\u548c Application
\u3002 \u6bcf\u500b stage \u4e2d\u6703\u6709\u5f88\u591a\u5c64 layer\uff0c\u5206\u5225\u4ee3\u8868\u5efa\u7acb\u904e\u7a0b\u7684\u4e00\u500b\u6b65\u9a5f\u3002
\u4ee5 Node.js \u4e26\u5305\u88dd\u5728 Alpine \u4e4b\u4e0a\u7684 Image \u70ba\u4f8b\uff1a
$ docker pull node:lts-alpine\nc9b1b535fdd9: Pull complete\n750cdd924064: Downloading [==> ] 2.485MB/34.53MB\n2078ab7cf9df: Download complete\n02f523899354: Download complete\n
# Layer Size 1 ADD file ... in /... 2.69 MB 2 CMD [\\\"/bin/sh\\\"] 0 B 3 ENV NODE_VERSION=14.17.3 0 B 4 /bin/sh -c addgroup -g 1000 ... 34.53 MB 5 ENV YARN_VERSION=1.22.5 0 B 6 /bin/sh -c apk add --no-cache ... 2.14 MB 7 COPY file ... in /usr/... 281 B 8 ENTRYPOINT [\\\"docker-entrypoint.sh\\\"] 0 B 9 CMD [\"node\"] 0 B /Image \u5927\u5c0f\u70ba 39.35 MB\uff0c\u9023\u7d50
\u6709\u6539\u8b8a filesystem \u7684\u6b65\u9a5f\uff08\u6703\u6539\u8b8a Image \u5927\u5c0f\uff09\uff0c\u624d\u6703\u5217\u51fa\u4f86\u3002
SHA \u503c\u8a08\u7b97\u65b9\u5f0f\u662f\u4e0a\u4e00\u500b SHA \u503c\u52a0\u4e0a\u73fe\u884c\u7684\u6307\u4ee4\u7d44\u51fa\u4f86\u7684\u3002
\u82e5\u6539\u70ba Debian\uff08\u9810\u8a2d\u503c\uff09\u5247\u70ba\uff1a
$ docker pull node:lts\n199ebcd83264: Pull complete\nddbb155879c0: Pull complete\nc194bbaa3d8b: Pull complete\n6154ac87d7f3: Pull complete\n0c283e88ced7: Pull complete\ndba101298560: Pull complete\n1d8bfd4e555f: Downloading [=====> ] 7.56MB/33.38MB\n757e41ffbdcc: Download complete\n6e055c4b8721: Download complete\n
# Layer Size 1 ADD file ... in ... 43.28 MB 2 CMD [\"bash\"] 0 B 3 /bin/sh -c set -eux; apt-get ... 10.77 MB 4 /bin/sh -c set -ex; if ... 4.14 MB 5 /bin/sh -c apt-get update && ... 47.46 MB 6 /bin/sh -c set -ex; apt-get ... 204.5 MB 7 /bin/sh -c groupadd --gid 1000 ... 4.09 KB 8 ENV NODE_VERSION=14.17.3 0 B 9 /bin/sh -c ARCH= && dpkgArch=\"$(dpkg ... 33.38 MB 10 ENV YARN_VERSION=1.22.5 0 B 11 /bin/sh -c set -ex ... 2.23 MB 12 COPY file ... in ... 295 B 13 ENTRYPOINT [\\\"docker-entrypoint.sh\\\"] 0 B 14 CMD [\"node\"] 0 B /Image \u5927\u5c0f\u70ba 345.75 MB\uff0c\u9023\u7d50\u3002
Container \u90e8\u7f72\u5be6\u4f5c\u4e0a\u4ecd\u5efa\u8b70\u4ee5\u8f03\u5c0f\u7684 Image \u70ba\u57fa\u5e95\uff0c\u9664\u4e86\u52a0\u901f\u90e8\u7f72\u6d41\u7a0b\u5916\uff0c\u8f03\u5c0f\u7684\u6a94\u6848\u9762\u7a4d\u7406\u8ad6\u4e0a\u4e5f\u80fd\u964d\u4f4e\u88ab\u653b\u64ca\u7684\u6a5f\u6703\u3002
"},{"location":"feedback/distributed-systems-with-node.js/container/#\u5be6\u4f5c","title":"\u5be6\u4f5c","text":"\u76f8\u4fe1\u4e86\u89e3 Image \u88fd\u4f5c\u539f\u7406\u5f8c\uff0c\u5c0d\u65bc\u5be6\u4f5c\u5c31\u4e0d\u6703\u6709\u592a\u5927\u554f\u984c\uff0c\u9019\u88e1\u6709\u5be6\u4f5c\u76f8\u95dc\u7684\u6587\u4ef6\uff0c\u6709\u8208\u8da3\u53ef\u4ee5\u53bb\u67e5\u770b
\u900f\u904e Docker CLI \u53ef\u4ee5\u548c Container \u4e92\u52d5\uff0c\u9664\u4e86\u8b93\u6211\u5011\u4e86\u89e3\u5176\u5167\u90e8\u904b\u4f5c\u904e\u7a0b\uff0c\u4e5f\u53ef\u4ee5\u5e6b\u52a9\u6211\u5011 Debug\u3002
"},{"location":"feedback/distributed-systems-with-node.js/container/#\u9032\u5165-container","title":"\u9032\u5165 Container","text":"docker run -it ubuntu /bin/bash\n
-i
\u4ee3\u8868\u8981\u4ee5\u4e92\u52d5\u6a21\u5f0f\u9032\u5165 Container-t
\u4ee3\u8868\u662f\u4ee5 TTY session \u9032\u5165\uff0c\u548c -i
\u6574\u5408\u70ba -it
bash
\u9032\u5165\u5f8c\uff0c\u5373\u53ef\u900f\u904e ps -e
\u8f38\u51fa\u6240\u6709 process\u3002
$ ps -e\nPID TTY TIME CMD\n 1 pts/0 00:00:00 bash\n 10 pts/0 00:00:00 ps\n
bash \u4f5c\u70ba\u521d\u59cb\u884c\u70ba\uff0c\u5fc5\u9808\u5728 PID 1\u3002
\u7531\u6b64\u53ef\u770b\u51fa\uff0cContainer \u7684\u884c\u70ba\u76f8\u7576\u55ae\u7d14\uff0c\u4e0d\u50cf\u5be6\u969b\u4f7f\u7528\u7684\u96fb\u8166\uff0c\u6703\u6709\u5404\u7a2e\u670d\u52d9\u5728\u80cc\u666f\u904b\u4f5c\u3002
"},{"location":"feedback/distributed-systems-with-node.js/container/#\u5c0d-container-\u5167\u90e8\u4e0b\u9054\u6307\u4ee4","title":"\u5c0d Container \u5167\u90e8\u4e0b\u9054\u6307\u4ee4","text":"docker exec ubuntu /bin/ls /var
$ curl -o index.html http://example.org\n$ docker run --rm -p 8080:80 \\\n -v $PWD:/usr/share/nginx/html nginx\n
-p
\u5373\u70ba\u524d\u9762\u63d0\u5230\u7684 port-mappings -v
\u5373\u70ba volume-mappings\uff08filesystem\uff09
\u73fe\u5728\u5df2\u7d93\u8f03\u5c11\u5176\u4ed6\u7ba1\u7406 Container \u7684\u7522\u54c1\uff1a
\u591a\u500b\u670d\u52d9\u8981\u600e\u9ebc\u900f\u904e Docker \u5efa\u7acb\uff1f\u6709\u5e7e\u500b\u65b9\u6cd5\uff1a
docker run exmaple/server1
docker run exmaple/server2
\u591a\u6b21 docker run exmaple/server
\u53bb\u5efa\u7acb\u4e0d\u540c\u7684\u61c9\u7528\u7a0b\u5f0f\u6703\u96e3\u7ba1\u7406\u4e14\u5bb9\u6613\u51fa\u932f\u3002
\u6709\u6642\u76f8\u4f3c\u7684\u61c9\u7528\u7a0b\u5f0f\u53ef\u4ee5\u5305\u88dd\u6210\u540c\u4e00\u500b Image\uff0c\u5982\u4e0a\u4e00\u6b21\u5831\u544a\u63d0\u5230\u7684 ELK
\uff0c\u4f46\u662f \u5206\u6563\u5f0f\u7cfb\u7d71\u4e0a \u4e0d\u540c\u7684\u61c9\u7528\u7a0b\u5f0f\u82e5\u5305\u88dd\u6210\u540c\u4e00\u500b Image \u6703\u8b93\u670d\u52d9\u7684\u7368\u7acb\u6027\u6d88\u5931\u3002
docker-compose \u4fbf\u662f\u7528\u4f86\u89e3\u6c7a\u9019\u4e00\u554f\u984c\u7684\u65b9\u6848\u3002
\u4ee5\u4e0a\u4e00\u4efd Tracing \u4e2d\u7684 Zipkin \u70ba\u4f8b\uff1a
\u5c31\u53ef\u4ee5\u4f9d\u6b64\u5efa\u7acb docker-compose.yaml\uff1a
version: \"3.7\"\nservices:\n zipkin:\n image: openzipkin/zipkin-slim:2.19\n ports:\n - 9411:9411\n recipe-api:\n build:\n context: ./recipe-api\n dockerfile: Dockerfile-zipkin\n ports:\n - 4000:4000\n environment:\n ZIPKIN: zipkin:9411\n depends_on:\n - zipkin\n web-api:\n build:\n context: ./web-api\n dockerfile: Dockerfile-zipkin\n ports:\n - 3000:3000\n environment:\n TARGET: recipe-api:4000\n ZIPKIN: zipkin:9411\n depends_on:\n - zipkin\n - recipe-api\n
"},{"location":"feedback/distributed-systems-with-node.js/container/#docker-registry","title":"Docker Registry","text":"Docker Hub \u63d0\u4f9b\u5b58\u653e Image \u7a7a\u9593\uff0c\u4f46\u5c0d\u65bc\u79c1\u4eba\u7a7a\u9593\u7684\u5b58\u653e\u6578\u91cf\u6709\u9650\u5236\u3002 \u53ef\u4ee5\u6839\u64da\u9810\u7b97\uff0c\u8003\u616e\u5176\u4ed6 Docker Registry\uff0c\u4f8b\u5982\uff1a
\u9019\u6b21\u5206\u4eab\u7701\u7565
\u61c9\u7528\u7a0b\u5f0f\u662f\u9700\u8981\u7dad\u904b\u7684\uff0c\u5206\u6563\u5f0f\u7cfb\u7d71\u7684\u7dad\u904b\u548c\u50b3\u7d71\u4e0a\u6709\u4ec0\u9ebc\u5dee\u7570\u5462\uff1f
\u672c\u7ae0\u6703\u4f9d\u5e8f\u4ecb\u7d39 Log\u3001Tracing\u3001Metric\u3001Alert \u548c Health Check\u3002
"},{"location":"feedback/distributed-systems-with-node.js/observability/#log","title":"Log","text":"\u5728\u672c\u5730\u7aef\u6e2c\u8a66\u6642\uff0c\u6642\u5e38\u7528 console.log
\u6216 print
\u9019\u985e\u51fd\u793a\u4f86\u78ba\u8a8d\u8acb\u6c42\u5728\u57f7\u884c\u904e\u7a0b\u4e2d\u6c92\u6709\u767c\u751f\u4ec0\u9ebc\u610f\u6599\u4e4b\u5916\u7684\u4e8b\u3002
\u82e5\u5728\u7dda\u4e0a\u90e8\u7f72\u5f8c\uff0c\u6211\u8981\u600e\u9ebc\u5f9e\u9060\u5728\u4ed6\u65b9\u7684 server \u4e2d\u53d6\u5f97\u76f8\u95dc\u8a0a\u606f\uff1f
\u4e0b\u9762\u6703\u4ecb\u7d39 ELK\uff08Elasticsearch
, Logstash
, and Kibana
\uff09\u600e\u9ebc\u8b93\u4f60\u62ff\u5230 server \u7684 log \u8cc7\u8a0a\u3002
\u82e5\u4e00\u500b\u8acb\u6c42\u6b77\u7a0b\u6703\u7d93\u904e\u591a\u9805\u670d\u52d9\uff0c\u6211\u8981\u600e\u9ebc\u5340\u5206\u4e0d\u540c\u7684\u8acb\u6c42\uff1f
\u4f8b\u5982\uff1a\u767c\u73fe A \u670d\u52d9\u5728\u548c B \u670d\u52d9\u8acb\u6c42\u8cc7\u6599\u6642\uff0c\u5f97\u5230\u932f\u8aa4\u8cc7\u6599\u3002 \u65bc\u662f\u63a5\u8457\u67e5\u770b B \u670d\u52d9\u7684 log\uff0c\u7136\u800c\u540c\u4e00\u6642\u9593\u537b\u6709\u5f88\u591a\u8acb\u6c42\uff0c\u832b\u832b\u5927\u6d77\u5982\u4f55\u5c0b\uff1f
\u6b64\u6642\u5c31\u53ef\u4ee5\u4f7f\u7528 Tracing \u7684\u6a5f\u5236\uff0c\u7bc4\u4f8b\u4e2d\u6703\u4f7f\u7528 Zipkin\u3002
request ID
\u4ee3\u8868\u5404\u500b\u8acb\u6c42\u7684 ID\uff0c\u5fc5\u9808\u662f\u4e0d\u80fd\u91cd\u8907\u7684\u5b57\u4e32\u3002
\u9664\u4e86\u91dd\u5c0d\u55ae\u4e00\u8acb\u6c42\u7684\u6d41\u7a0b\u6aa2\u95b1\uff0c\u82e5\u6211\u8981\u505a\u7d71\u8a08\u5462\uff1f
\u4f8b\u5982\uff1a\u6a5f\u5668\u7684 CPU \u4f7f\u7528\u7387\u3001\u56de\u61c9 4xx/5xx \u7684\u6bd4\u7387\u3001API \u4f7f\u7528\u5206\u4f48
\u9019\u4e00\u985e\u9700\u8981\u7d2f\u7a4d\u7684\u8cc7\u6599\uff0c\u6211\u5011\u4fbf\u7a31\u5176\u70ba Metric\uff0c\u7bc4\u4f8b\u4e2d\u6703\u4f7f\u7528 Graphite\uff0cStatsD \u548c Grafana\u3002
"},{"location":"feedback/distributed-systems-with-node.js/observability/#alert","title":"Alert","text":"\u6709\u4e86 Metric\uff0c\u6211\u5011\u4fbf\u53ef\u4ee5\u8a2d\u5b9a\u4e9b\u95a5\u503c\uff0c\u4f86\u901a\u77e5\u958b\u767c\u4eba\u54e1\u4ee5\u53ca\u65e9\u5f97\u77e5\u670d\u52d9\u7684\u72c0\u614b\u3002
\u4f8b\u5982 5xx \u6bd4\u7387\u8d85\u904e 3% \u6642\uff0c\u63d0\u51fa\u8b66\u544a\u901a\u77e5
\u7bc4\u4f8b\u4e2d\u6703\u4f7f\u7528 Grafana\u3002
"},{"location":"feedback/distributed-systems-with-node.js/observability/#health-check","title":"Health Check","text":"\u82e5\u670d\u52d9\u7684\u4f9d\u8cf4\uff08\u4f8b\u5982 DB\uff09\u9023\u7dda\u65b7\u6389\u6216\u751a\u81f3\u670d\u52d9\u672c\u8eab\u65b7\u7dda\u6642\uff0c\u6211\u5011\u80fd\u5426\u53ca\u65e9\u77e5\u9053\uff1f\u540c\u6642\u81ea\u52d5\u91cd\u65b0\u5efa\u7acb\u9023\u7dda\uff0c\u6216\u751a\u81f3\u91cd\u65b0\u555f\u52d5\u8a72\u670d\u52d9\u3002
\u7bc4\u4f8b\u4e2d\u6703\u4f7f\u7528 HAProxy
"},{"location":"feedback/distributed-systems-with-node.js/observability/#\u6bd4\u8f03","title":"\u6bd4\u8f03","text":"\u7a2e\u985e \u591a\u670d\u52d9\u624d\u6709\u610f\u7fa9 \u529f\u80fd \u6240\u5c6c\uff08\u6982\u7565\uff09 Log X Debug Dev Tracing O Debug Dev-Ops Metric X \u7d71\u8a08 Ops Alert X \u5206\u6790 Dev-Ops SE"},{"location":"feedback/distributed-systems-with-node.js/observability/#\u5be6\u4f5c","title":"\u5be6\u4f5c","text":"\u63a5\u4e0b\u4f86\u9032\u5165\u4e00\u7cfb\u5217\u5be6\u4f5c\u3002
"},{"location":"feedback/distributed-systems-with-node.js/observability/#log_1","title":"Log","text":"ELK
\u662f Elastic \u958b\u767c\u7684\u958b\u6e90\u7522\u54c1\uff0c\u5176\u958b\u767c\u7684\u4e0d\u50c5\u50c5\u662f ELK
\u9019\u4e09\u9805\u7522\u54c1\u3002
\u672c\u7bc4\u4f8b\u50c5\u6703\u8a0e\u8ad6 ELK
\u4ee3\u8868\u7684 Elasticsearch\u3001Logstash\u3001Kibana \u9019\u4e09\u500b\uff0c\u5176\u4e2d\u5404\u7522\u54c1\u5b9a\u4f4d\u548c\u529f\u80fd\u5982\u4e0b\u3002
\u4e00\u7a2e\u8cc7\u6599\u5eab\uff0c\u4e26\u5c0d\u5916\u63d0\u4f9b API\uff0c\u6703\u9ad8\u6548\u7684\u641c\u5c0b\u76f8\u95dc\u8cc7\u8a0a\u3002\u4e26\u4e14\u6709\u5176\u6a19\u6e96\u7684 query \u8a9e\u6cd5\u3002
Elasticsearch is fast. Really, really fast.
Elasticsearch \u64c1\u6709\u5f88\u591a\u529f\u80fd\uff0c\u672c\u6b21\u50c5\u6703\u793a\u7bc4\u5e7e\u7a2e\uff0c\u82e5\u9700\u8981\u66f4\u591a\u8cc7\u8a0a\uff0c\u8a73\u898b\u3002
"},{"location":"feedback/distributed-systems-with-node.js/observability/#logstash","title":"Logstash","text":"Elasticsearch \u662f\u4e00\u7a2e\u8cc7\u6599\u5eab\uff0c\u4f46\u662f\u5132\u5b58\u7684\u8cc7\u6599\u9700\u8981\u6709\u4eba\u7d66\u4ed6\uff0c\u9019\u4fbf\u662f Logstash \u7684\u529f\u80fd\u3002\u8ca0\u8cac\u628a\u6536\u5230\u7684\u8cc7\u6599\u6574\u5408\u9001\u7d66 Elasticsearch\u3002
\u9001\u4ec0\u9ebc\u8cc7\u6599\u662f\u7531\u61c9\u7528\u7a0b\u5f0f\u65b9\u6c7a\u5b9a\u7684\uff0c\u53ef\u4ee5\u662f log file\u3001HTTP \u7b49\u3002 \u672c\u7bc4\u4f8b\u662f\u900f\u904e HTTP on UDP \u4f86\u50b3\u9001\u3002
"},{"location":"feedback/distributed-systems-with-node.js/observability/#kibana","title":"Kibana","text":"Elasticsearch \u662f\u4e00\u7a2e\u8cc7\u6599\u5eab\uff0c\u4f46\u662f\u4e26\u672a\u63d0\u4f9b UI \u4ecb\u9762\uff0c\u9019\u6642 Kibana \u5c31\u662f\u628a API \u8f49\u6210\u53ef\u8b93\u4eba\u900f\u904e\u7db2\u9801\u7684\u65b9\u5f0f\u4f86\u64cd\u4f5c\u3002
"},{"location":"feedback/distributed-systems-with-node.js/observability/#\u7bc4\u4f8b\u7a0b\u5f0f\u78bc","title":"\u7bc4\u4f8b\u7a0b\u5f0f\u78bc","text":"web-api
\u5c0d\u4f7f\u7528\u4f86\u8aaa\uff0c\u4e0d\u9700\u8981\u53bb\u8003\u616e\u50b3\u9001\u5230 Logstash \u7684\u908f\u8f2f
logger.info(\n {\n path: req.url,\n method: req.method,\n ip: req.ip,\n ua: req.headers[\"user-agent\"] || null,\n },\n \"request-incoming\"\n);\n
\u7121\u8ad6\u7528\u4ec0\u9ebc\u683c\u5f0f\u64b0\u5beb log\uff0c\u7d71\u4e00\u5c31\u597d\u3002
\u521d\u59cb\u5316 logger
const client = dgram.createSocket(\"udp4\");\nconst stream = {\n write: (msg: string) => {\n client.send(msg, LS_PORT, LS_HOST);\n },\n};\nconst logger = pino({ level: \"trace\" }, stream);\n
"},{"location":"feedback/distributed-systems-with-node.js/observability/#alternative","title":"Alternative","text":"\u5176\u67b6\u69cb\u6703\u548c Log \u5f88\u50cf\uff0cElasticsearch \u4e5f\u5305\u542b\u9019\u985e\u7684 query \u8a9e\u6cd5\u3002 \u5176\u91cd\u9ede\u5dee\u7570\u4fbf\u662f\u5728 log \u8655\u7406\u5c0d\u8c61\u70ba\u55ae\u4e00\u8acb\u6c42\uff0c\u800c metrics \u8655\u7406\u7684\u662f\u670d\u52d9\u5728\u7d2f\u7a4d\u6d41\u91cf\u6216\u6642\u9593\u5f8c\u7684\u72c0\u614b\uff0c\u5982\u4e0a\u6240\u8ff0\u3002
\u7bc4\u4f8b\u4e2d\u6703\u4f7f\u7528\u7684\u662f Grafana
\u3001Graphite
\u548c StatsD
\u3002
\u548c log \u975e\u5e38\u76f8\u4f3c\uff0c\u9019\u88e1\u5c31\u4e0d\u8d05\u8ff0\u5176\u610f\u7fa9\u3002
"},{"location":"feedback/distributed-systems-with-node.js/observability/#\u7a0b\u5f0f\u78bc","title":"\u7a0b\u5f0f\u78bc","text":"web-api
\u521d\u59cb\u5316 client
const client = new StatsDClient({\n host: \"localhost\",\n port: 8125,\n prefix: \"web-api\",\n});\n
\u7d71\u8a08\u8acb\u6c42\u6642\u9593\u548c\u6b21\u6578
const begin = new Date();\n\nawait got(`http://${TARGET}/recipes/42`);\n\nclient.timing(\"outbound.recipe-api.request-time\", begin);\nclient.increment(\"outbound.recipe-api.request-count\");\n
\u7d71\u8a08\u7cfb\u7d71\u8cc7\u6e90
setInterval(() => {\n client.gauge(\"server.conn\", server.connections);\n\n const m = process.memoryUsage();\n client.gauge(\"server.memory.used\", m.heapUsed);\n client.gauge(\"server.memory.total\", m.heapTotal);\n\n const h = v8.getHeapStatistics();\n client.gauge(\"server.heap.size\", h.used_heap_size);\n client.gauge(\"server.heap.limit\", h.heap_size_limit);\n\n // try to mock memory heap\n fs.readdir(__dirname, (err, list) => {\n if (err) return;\n client.gauge(\"server.descriptors\", list.length);\n });\n}, 10_000);\n
\u7bc4\u4f8b\u4e2d\uff0c\u628a\u8a18\u61b6\u9ad4\u7b49\u76f8\u95dc\u8cc7\u8a0a\u653e\u5728\u61c9\u7528\u7a0b\u5f0f\u4e2d\u3002 \u5be6\u969b\u4e0a\uff0c\u70ba\u4e86\u907f\u514d\u61c9\u7528\u7a0b\u5f0f\u65b7\u7dda\uff0c\u5c0e\u81f4\u6536\u96c6\u4e0d\u5230\u670d\u52d9\u7684\u8cc7\u8a0a\uff0c\u9019\u985e\u7684\u8cc7\u6599\u6536\u96c6\u61c9\u5728\u670d\u52d9\u5916\u4f7f\u7528\u3002
"},{"location":"feedback/distributed-systems-with-node.js/observability/#alternative_1","title":"Alternative","text":"Graphite
-> Prometheus, InfluxDBStatsD
-> cAdvisor, MetricBeat\u5728\u5206\u6563\u5f0f\u7cfb\u7d71\u4e2d\uff0c\u591a\u500b\u670d\u52d9\u9593\u7684\u6e9d\u901a\u6216\u8acb\u6c42\u90fd\u53ef\u80fd\u5728\u904e\u7a0b\u4e2d\u5f97\u5230\u975e\u9810\u671f\u7684\u7d50\u679c\uff0c\u70ba\u4e86\u80fd\u5feb\u901f\u627e\u5230\u554f\u984c\u9ede\uff0c\u9700\u8981\u8fa8\u5225\u540c\u4e00\u652f\u8acb\u6c42\u5728\u5404\u500b\u670d\u52d9\u4e2d\u7684\u4f4d\u7f6e\u3002
\u900f\u904e\u5efa\u7acb request ID \u4f86\u8fa8\u5225\u540c\u4e00\u652f\u8acb\u6c42\u5728\u591a\u500b\u670d\u52d9\u4e2d\u7684\u4f4d\u7f6e\u3002
\u7522\u51fa\u7bc4\u4f8b\uff1a
web-api \u6703\u50b3\u9001 task1
\u3001fetch
\u548c task2
\uff0crecipe-api \u6703\u50b3\u9001 recipe
web-api
const tracer = new Tracer({\n ctxImpl,\n recorder,\n localServiceName: \"web-api\",\n sampler: new sampler.CountingSampler(1),\n});\n
\u7d00\u9304\u8acb\u6c42\u958b\u59cb\u6642\u548c\u7d50\u675f\u6642
app.use(expressMiddleware({ tracer }));\n
\u7d00\u9304\u9700\u8981\u57f7\u884c 100ms \u7684\u4efb\u52d9
await tracer.local<Promise<void>>(\n 'do_some_task',\n () => new Promise((resolve) => setTimeout(resolve, 100)),\n);\n
\u4f7f\u7528\u5305\u88dd\u5f8c\u7684 got
\u4f86\u53bb\u8acb\u6c42\uff0c\u5728\u4f7f\u7528\u6642\u4e0d\u9700\u8981\u8003\u616e\u5176 tracing \u908f\u8f2f\u3002
await instance(`http://${TARGET}/recipes/42`).json();\n
const instance = got.extend({\n hooks: {\n init: [(opts) => (opts._zipkin.parentId = tracer.id)],\n beforeRequest: [\n (opts) => {\n // ...\n },\n ],\n afterResponse: [\n (res) => {\n // ...\n },\n ],\n beforeError: [\n (err) => {\n // ...\n return err;\n },\n ],\n },\n});\n
recipe-api
"},{"location":"feedback/distributed-systems-with-node.js/observability/#alert_1","title":"Alert","text":"Demo in production
"},{"location":"feedback/distributed-systems-with-node.js/observability/#health-check_1","title":"Health Check","text":"\u9019\u5927\u90e8\u5206\u6703\u548c Alert \u4e00\u8d77\u5be6\u4f5c\uff0c\u76ee\u7684\u662f\u6301\u7e8c\u6253\u7279\u5b9a route \u53bb\u5f97\u77e5\u670d\u52d9\u73fe\u6709\u72c0\u6cc1\u3002
\u4f46\u73fe\u6709\u72c0\u6cc1\u6703\u6709\u4e9b\u6a21\u7cca\u5730\u5e36\uff0c\u4f8b\u5982\uff1a
\u6709\u7522\u54c1\u4f7f\u7528 cache \u53bb\u9054\u5230 SLA\u3002\u7576 cache \u5931\u53bb\u904b\u4f5c\uff0c\u5c0d\u61c9\u7528\u7a0b\u5f0f\u4f86\u8aaa\u4ecd\u80fd\u904b\u884c\u3002\u4f46\u6574\u9ad4\u6548\u7387\u6703\u964d\u4f4e\uff0c\u9032\u800c\u63d0\u9ad8 Latency\uff0c\u9019\u6642\u670d\u52d9\u7684\u72c0\u614b\u7b97\u662f\u5065\u5eb7\u9084\u662f\u4e0d\u5065\u5eb7\uff1f
\u9019\u7a2e\u6a21\u7cca\u5730\u5e36\u88ab\u7a31\u4f5c degraded
\uff0c\u81f3\u65bc\u8a72\u600e\u9ebc\u8655\u7406\uff0c\u5c31\u548c\u5546\u52d9\u908f\u8f2f\u7684\u5be6\u4f5c\u6709\u95dc\u4e86\u3002
\u7bc4\u4f8b\u4e2d\uff0c\u6703\u7528 r-proxy \u505a health check \u4e14\u61c9\u7528\u7a0b\u5f0f\u7d81\u5728\u4e00\u8d77\u3002 \u4f46\u5be6\u4f5c\u4e0a\uff0c\u4ecd\u5efa\u8b70\u8b93\u61c9\u7528\u7a0b\u5f0f\u5916\u7684\u7522\u54c1\u6216\u751a\u81f3\u5916\u55ae\u4f4d\u7684\u7522\u54c1\u53bb\u505a health check\u3002 \u4f8b\u5982\uff1aPagerDuty\u3001Nagios\u3001Pingdom\u3002 \u9664\u4e86 r-proxy\uff0c\u5c08\u505a health check \u7684\u958b\u6e90\u8edf\u9ad4\u6709\uff1aCabot\u3002
HAProxy \u7684\u8a2d\u5b9a\u9ee8
# ...\n\nbackend web-api\n option httpchk GET /health\n server web-api-1 localhost:3001 check\n server web-api-2 localhost:3002 check\n
web-api
app.get(\"/health\", (_req, res) => {\n return res.send(\"OK\");\n});\n
"},{"location":"feedback/distributed-systems-with-node.js/protocol/","title":"Protocol","text":"\u5206\u6563\u5f0f\u7cfb\u7d71\u4e2d\uff0c\u5f88\u91cd\u8981\u7684\u4e00\u584a\u662f\u300c\u4e0d\u540c\u7684\u670d\u52d9\u9593\uff0c\u5f7c\u6b64\u7684\u6e9d\u901a\u65b9\u5f0f\u662f\u4ec0\u9ebc\uff1f\u300d \u6bd4\u8d77\u64b0\u5beb\u5b8c\u6574\u53c8\u6e05\u695a\u7684 API \u6587\u4ef6\uff0c\u6709\u6c92\u6709\u4ec0\u9ebc\u597d\u65b9\u6cd5\u53ef\u4ee5\u8b93\u670d\u52d9\u548c\u670d\u52d9\u4e4b\u9593\u540c\u6b65 API\uff1f
\u4ee5\u4e0b\u8a0e\u8ad6\u7686\u5047\u8a2d\uff1a\u6e9d\u901a\u662f\u900f\u904e\u7db2\u8def\uff0c\u4e14\u4ee5 HTTP \u5354\u5b9a\u70ba\u57fa\u790e\u3002
"},{"location":"feedback/distributed-systems-with-node.js/protocol/#osi-open-systems-interconnection","title":"OSI (Open Systems Interconnection)","text":"POST / HTTP/1.1\nHost: www.example.com\nContent-Type: application/json\nContent-Length: 15\n\n{\"name\":\"evan.lu\"}\n
\u7a7a\u884c\u5f8c\u7684\u4e0b\u4e00\u884c\u5373\u70ba\u4ee3\u8868\u672c\u6b21\u8acb\u6c42\u7684 body\uff0c\u7bc4\u4f8b\u4e2d\u7684 body \u662f\u5e38\u898b\u7684 JSON
\u683c\u5f0f\u3002
\u7531\u6b64\uff0c\u53ef\u4ee5\u60f3\u50cf JSON
\u683c\u5f0f\u662f\u5728\u61c9\u7528\u5c64\u4e4b\u4e0a\u7684\u7b2c\u516b\u5c64\u3002
\u55ae\u7d14\u900f\u904e JSON
\u50b3\u905e\u6709\u4ec0\u9ebc\u7f3a\u9ede\uff1f
\u70ba\u4e86\u89e3\u6c7a\u4e0a\u8ff0\u554f\u984c\uff0c\u5c31\u6703\u6709\u5176\u4ed6 protocol \u9700\u8981\u88ab\u5f15\u5165\u3002
\u4e0d\u904e\u9664\u4e86\u7528\u5176\u4ed6\u5354\u5b9a\uff0c\u4e5f\u6709\u4e00\u4e9b\u65b9\u5f0f\u53ef\u4ee5\u8212\u7de9\uff08\u964d\u4f4e\uff09\u4e0a\u8ff0\u767c\u751f\u7684\u554f\u984c\uff0c\u5982\uff1a
\u4e0a\u8ff0\u50c5\u662f\u5236\u5b9a\u4e00\u4e9b\u898f\u7bc4\uff0c\u8b93\u4f7f\u7528\u8005\u5728\u95b1\u8b80\u76f8\u95dc API \u6587\u4ef6\u6642\uff0c\u80fd\u8f03\u5feb\u9032\u5165\u72c0\u6cc1\u3002
"},{"location":"feedback/distributed-systems-with-node.js/protocol/#graphql","title":"GraphQL","text":"GraphQL \u8b93\u4f7f\u7528\u8005\u5728\u8ddf\u670d\u52d9\u8981\u53d6\u8cc7\u6599\u7684\u6642\u5019\u80fd\u6307\u5b9a\u7279\u5b9a\u8cc7\u6599\uff0c\u9019\u6709\u5e7e\u500b\u597d\u8655\uff1a
\u9019\u4e5f\u8b93 GraphQL \u901a\u5e38\u6210\u70ba facade services\uff0c\u4e5f\u5c31\u662f\u5728\u773e\u591a\u670d\u52d9\u4e2d\u7684\u9996\u500b\u63a5\u89f8\u9ede\uff0c\u4e26\u4f5c\u70ba\u5c0d\u5916\u6e9d\u901a\u7684\u552f\u4e00\u6e20\u9053\u3002
GraphQL \u4e26\u4e0d\u9650\u5b9a\u5728\u8981 HTTP \u4e0a\u57f7\u884c\uff0c\u4e5f\u80fd\u57f7\u884c\u5982 TCP \u7b49\u5354\u5b9a\u4e4b\u4e0a\u3002
\u96d6\u7136\u8acb\u6c42\u6642\u9001\u51fa\u7684\u662f\u985e\u4f3c Query \u7684\u8a9e\u6cd5\uff0c\u4f46 Response \u4e26\u7121\u6307\u5b9a\uff0c\u53ea\u8981\u80fd\u4ee3\u8868\u5176\u968e\u5c64\u5f0f\u7684\u7d50\u679c\u5c31\u884c\uff0c\u5982 JSON
\u3002
type RecipeRoot {\n recipe(id: ID): Recipe\n pid: Int\n}\ntype Recipe {\n id: ID!\n name: String!\n steps: String\n ingredients: [Ingredient]!\n}\ntype Ingredient {\n id: ID!\n name: String!\n quantity: String\n}\n
\u9019\u4efd\u6a94\u6848\u662f\u53ef\u4ee5\u5c0d\u5916\u516c\u958b\u7684\uff0c\u5e6b\u52a9\u4f7f\u7528\u8005\u4f9d\u6b64\u64b0\u5beb\u7a0b\u5f0f\uff0c\u985e\u4f3c\u4e0a\u8ff0\u63d0\u5230\u7684 OpenAPI\u3002
"},{"location":"feedback/distributed-systems-with-node.js/protocol/#\u8acb\u6c42","title":"\u8acb\u6c42","text":"\u9019\u6642\uff0c\u6211\u5011\u53ef\u4ee5\u4f9d\u7167\u4e0a\u8ff0\u7684\u898f\u7bc4\u9001\u51fa\u8acb\u6c42\uff1a
{\n pid\n}\n
{\n \"data\": {\n \"pid\": 9372\n }\n}\n
{\n recipe(id: 42) {\n name\n ingredients {\n name\n quantity\n }\n }\n}\n
{\n \"data\": {\n \"recipe\": {\n \"name\": \"Chicken Tikka Masala\",\n \"ingredients\": [\n { \"name\": \"Chicken\", \"quantity\": \"1 lb\" },\n { \"name\": \"Sauce\", \"quantity\": \"2 cups\" }\n ]\n }\n }\n}\n
"},{"location":"feedback/distributed-systems-with-node.js/protocol/#code-demo","title":"Code Demo","text":"\u4e0b\u5217\u5247\u662f\u4ee5 Node.js \u70ba\u57fa\u790e\u7684\u7bc4\u4f8b\uff1a
// \u50c5\u5c55\u793a\u8acb\u6c42\u7684\u7bc4\u4f8b\uff0c\u9019\u88e1\u7684 `kitchenSink` \u662f\u81ea\u5b9a\u7fa9\u540d\u7a31\uff0c\u65b9\u4fbf debug \u7528\u7684\nconst query = `query kitchenSink ($id:ID) {\n recipe(id: $id) {\n id name\n ingredients {\n name quantity\n }\n }\n pid\n}`;\nconst variables = { id: \"42\" };\n\nreturn got(`http://${TARGET}/graphql`, {\n method: \"POST\",\n json: { query, variables },\n});\n
import {\n GraphQLID,\n GraphQLInt,\n GraphQLObjectType,\n GraphQLSchema,\n} from \"graphql\";\n\n// \u50c5\u5c55\u793a RecipeRoot \u7684\u5efa\u7f6e\u65b9\u5f0f\nconst recipeRoot = new GraphQLObjectType({\n name: \"RecipeRoot\",\n fields: {\n pid: {\n type: GraphQLInt,\n resolve: resolvers.RecipeRoot.pid,\n },\n recipe: {\n type: recipeQuery,\n args: { id: { type: GraphQLID } },\n resolve: resolvers.RecipeRoot.recipe,\n },\n },\n});\nreturn new GraphQLSchema({ query: rootQuery });\n
"},{"location":"feedback/distributed-systems-with-node.js/protocol/#live-demo","title":"Live Demo","text":"http://localhost:4000/graphql
"},{"location":"feedback/distributed-systems-with-node.js/protocol/#grpc","title":"gRPC","text":"\u50cf\u662f REST \u6216 GraphQL \u90fd\u662f\u5efa\u7acb\u5728\u8cc7\u6599\u4e4b\u4e0a\uff0c\u800c\u900f\u904e CRUD \u7684\u65b9\u5f0f\u53bb\u57f7\u884c\u884c\u70ba\uff0c\u9019\u88e1\u5c31\u53ef\u4ee5\u6ce8\u610f\u5230\u5176\u9650\u5236\uff1a
\u5927\u91cf\u7684\u540d\u8a5e\uff0c\u800c\u50c5\u6709\u5c11\u91cf\u7684\u52d5\u8a5e
\u8209\u4f8b\uff1a \u82e5\u6709\u4e00\u500b API endpoint \u662f\u7528\u4f86\u5efa\u7acb\u767c\u7968\uff0c\u4eca\u6b32\u65b0\u589e\u4e00\u9644\u5e36\u689d\u4ef6\uff1a\u662f\u5426\u540c\u6642\u5bc4\u9001\u4fe1\u7bb1\u901a\u77e5\u3002 \u6709\u4ec0\u9ebc\u6a23\u7684\u65b9\u5f0f\uff1f
need_send_email
\uff1a \u8b93\u8a72 endpoint \u8d8a\u4f86\u8d8a\u8907\u96dcRemote Procedure Call
\u5c31\u662f\u4f86\u89e3\u6c7a\u6b64\u4e8b\u7684\uff01
gRPC \u70ba Google \u5efa\u7acb\u7684 RPC \u6a19\u6e96
gRPC \u9810\u8a2d\u5373\u975e\u4f7f\u7528 JSON \u683c\u5f0f\u9032\u884c\u8cc7\u8a0a\u7684\u50b3\u905e\uff0c\u800c\u662f\u4ee5 Protocol Buffers
\uff08ProtoBufs\uff09\u7684\u65b9\u5f0f\u9032\u884c\u50b3\u905e\u3002
\u6709\u5e7e\u500b\u689d\u4ef6\uff1a
.proto
\uff0c\u4e14\u9700\u8981\u8b93 client \u64c1\u6709\u3002int32
\uff0cint64
\uff0cfloat
\uff0cdouble
\u7b49\u7b49\u3002\u9019\u4e9b\u689d\u4ef6\u6709\u5e7e\u500b\u597d\u8655\uff1a
{\"id\":42} v.s. 42\n
v1 \u9700\u8981 arg1 arg2\nv2 \u9700\u8981 arg1 arg2 arg3\n\u82e5 client \u50c5\u62ff\u5230 v1 \u7684 proto\uff0c\u7a0b\u5f0f\u4e0a\u6703\u81ea\u52d5\u5ffd\u7565 arg2 \u5f8c\u7684\u53c3\u6578\n
"},{"location":"feedback/distributed-systems-with-node.js/protocol/#code-demo_1","title":"Code Demo","text":"syntax = \"proto3\";\npackage recipe;\nservice RecipeService {\n rpc GetRecipe(RecipeRequest) returns (Recipe) {}\n rpc GetMetaData(Empty) returns (Meta) {}\n}\nmessage Recipe {\n int32 id = 1;\n string name = 2;\n string steps = 3;\n repeated Ingredient ingredients = 4;\n}\nmessage Ingredient {\n int32 id = 1;\n string name = 2;\n string quantity = 3;\n}\nmessage RecipeRequest {\n int32 id = 1;\n}\nmessage Meta {\n int32 pid = 2;\n}\nmessage Empty {}\n
import { loadPackageDefinition, Server } from \"@grpc/grpc-js\";\nimport { loadSync } from \"@grpc/proto-loader\";\n\n// \u8b80\u53d6 proto \u6a94\nconst def = loadSync(__dirname + \"/grpc.proto\");\nconst proto = loadPackageDefinition(def);\n\n// \u5efa\u7acb\u8655\u7406\u908f\u8f2f\n// handlers = ...;\nconst server = new Server();\nserver.addService(proto.recipe.RecipeService.service, handlers);\n\n// \u5efa\u7acb\u5c0d\u5916\u9023\u7dda\n// credentials = ...; for https\nconst cb = () => server.start();\nserver.bindAsync(`${HOST}:${PORT}`, credentials, cb);\n\n// \u5efa\u7acb handlers\nconst handlers = {\n GetMetaData: (_call, cb) => {\n cb(null, {\n // error = null\n pid: process.pid,\n });\n },\n GetRecipe: (call, cb) => ({}), // if (call.request.id === 42)\n};\n
import { loadPackageDefinition } from \"@grpc/grpc-js\";\nimport { loadSync } from \"@grpc/proto-loader\";\n\n// \u8b80\u53d6 proto \u6a94\nconst def = loadSync(__dirname + \"/grpc.proto\");\nconst proto = loadPackageDefinition(def);\n\n// credentials = ...; for https\nconst client = new proto.recipe.RecipeService(TARGET, credentials);\n\nclient.getMetaData({}, cb);\nclient.getRecipe({ id: 42 }, cb);\n
"},{"location":"feedback/distributed-systems-with-node.js/protocol/#live-demo_1","title":"Live Demo","text":"http://localhost:3001
"},{"location":"feedback/distributed-systems-with-node.js/protocol/#alternatives","title":"Alternatives","text":"\u9664\u4e86 gRPC \u9084\u6709\u4ec0\u9ebc\u985e\u4f3c\u7684\u6771\u897f\uff1f
ProtoBufs
MessagePack
\u96d6\u7136\u540c\u70ba binary representation of hierarchical object data\uff0c\u4f46
.proto
\uff09\u53bb\u63cf\u8ff0gRPC
\u95dc\u65bc gRPC \u63a8\u85a6\u7684\u6587\u7ae0\uff1a
\u7522\u54c1\u90fd\u9700\u8981\u5411\u4f7f\u7528\u8005\u5c55\u793a\u90e8\u5206\u7684\u627f\u8afe\uff0c\u4f8b\u5982\uff1a
\u9019\u985e\u4fdd\u8b49\uff0c\u7a31\u70ba SLA\uff08Service Level Agreement\uff09\u3002
SLA \u901a\u5e38\u7531\u591a\u500b SLO\uff08Service Level Objective\uff09\u7d44\u6210\uff0c\u4f8b\u5982\uff1a \u4e00\u4efd SLA \u63d0\u4f9b \u5feb\u901f\u4e14\u5b89\u5168\u7684\u652f\u4ed8\u91d1\u9322
\uff0c\u5176\u4e2d\u7684 \u4fdd\u8b49\u4e0d\u6703\u91cd\u8907\u6263\u6b3e
\u5373\u70ba SLO
SLI\uff08Service Level Indicator\uff09\u5373\u662f SLO \u7684\u6307\u6a19\uff0c\u4f8b\u5982 \u76ee\u6a19\u5728 100ms \u5167\u56de\u61c9\uff0c\u5be6\u969b\u6e2c\u8a66\u70ba\u5e73\u5747\u65bc 80ms \u5167\u56de\u61c9
\u597d\u7684\u670d\u52d9 SLO / SLI
\u9700\u5927\u65bc\u7b49\u65bc 1
\u3002
\u82e5\u8981\u6c42\u5728\u4e00\u500b\u670d\u52d9\u6709\u7279\u5b9a\u7684 SLO\uff0c\u5c31\u5fc5\u9808\u540c\u6642\u8a08\u7b97\u8a72\u670d\u52d9\u4e2d\u6240\u6709\u6703\u4f7f\u7528\u7684\u5b50\u670d\u52d9\u7684 SLO\u3002
\u6709\u6642\u5019\uff0c\u7522\u54c1\u904e\u65bc\u8907\u96dc\u6c92\u8fa6\u6cd5\u7522\u51fa\u5b8c\u6574\u7684\u6d41\u7a0b\u5716\uff0c\u4e8b\u5be6\u7684\u7c21\u5316\u6216\u589e\u52a0 Tracing \u90fd\u53ef\u4ee5\u5e6b\u52a9\u7522\u51fa\u3002
"},{"location":"feedback/distributed-systems-with-node.js/sla-and-load-testing/#load-test","title":"Load Test","text":"Load Test \u76ee\u7684\u5373\u662f\u8a08\u7b97\u51fa SLI\u3002
Load Test \u548c Stress Test \u5dee\u5728\u54ea\u88e1\uff1f
Latency \u4ee3\u8868\u5f9e\u4e8b\u4ef6\u89f8\u767c
\u5230\u4e8b\u4ef6\u56de\u61c9
\u7684\u6642\u9593\u5dee\uff0c\u6b64\u8655\u4e26\u4e0d\u5305\u542b\u932f\u8aa4\u56de\u61c9\u7684\u72c0\u6cc1\u3002
\u4ee5\u4e0b\u7bc4\u4f8b\uff0c\u90fd\u5c07\u4ee5 Latency \u70ba SLO\uff0c\u4e26\u8a08\u7b97\u4e4b\u3002
"},{"location":"feedback/distributed-systems-with-node.js/sla-and-load-testing/#baseline","title":"Baseline","text":"\u6e2c\u8a66\u91cd\u8981\u7684\u4e00\u9ede\u662f\u8981\u6709\u4e00\u500b\u57fa\u6e96\u9ede\uff0c\u4e00\u500b\u7522\u54c1\u53ef\u4ee5\u6709\u591a\u7a2e Baseline
\u4f8b\u5982\uff1a
\u4e0d\u540c\u7684 Baseline \u6703\u6709\u81ea\u5df1\u7684\u610f\u7fa9\uff0c\u6839\u64da\u9700\u6c42\u5236\u5b9a\u51fa\u7406\u60f3\u7684 Baseline\u3002
"},{"location":"feedback/distributed-systems-with-node.js/sla-and-load-testing/#\u7bc4\u4f8b","title":"\u7bc4\u4f8b","text":"\u4ee5 Node.js \u9019\u8a9e\u8a00\u6240\u80fd\u505a\u51fa\u6700\u55ae\u7d14\u7684 server \u70ba Baseline\uff1a
require(\"http\")\n .createServer((req, res) => res.end(\"ok\"))\n .listen(80, () => null);\n
\u4f9d\u6b64\u89c0\u5bdf\u51fa\uff0c\u5728\u7d71\u4e00\u6a5f\u5668\u898f\u683c\u4e0b\u4efb\u4f55\u8981\u6c42\u5728 Node.js \u9019\u8a9e\u8a00\u6709\u8d85\u8d8a\u5176 Latency \u90fd\u662f\u6c92\u610f\u7fa9\u7684\u3002
\u5728\u8ffd\u6c42\u66f4\u597d\u7684 Latency \u6642\uff0c\u6216\u8a31\u8a72\u8003\u616e\u5176\u4ed6\u8a9e\u8a00\uff0c\u5982 C++ \u6216 Rust\u3002 \u4f46\u6b64\u6642\u4fbf\u9700\u8981\u6b0a\u8861\u5176\u4ed6\u8003\u91cf\uff0c\u5982\uff1a\u6703\u4f7f\u7528\u8a72\u8a9e\u8a00\u7684\u4eba\u6578\uff0c\u793e\u7fa4\u767c\u5c55\u7a0b\u5ea6\u7b49\u7b49\u3002
"},{"location":"feedback/distributed-systems-with-node.js/sla-and-load-testing/#latency","title":"Latency","text":"Stat 2.5% 50% 97.5% 99% Avg Stdev Max Latency 0ms 0ms 0ms 0ms 0.01ms 0.08ms 9.45ms Req/Sec 42,751 39,039 36,703 29,487 38,884.14 1,748.17 29,477\u5176\u4e2d\u7684 29487 \u500b\u6bcf\u79d2\u8acb\u6c42\u91cf
\u5373\u662f TP99\uff08Top Percentile\uff09\u4e0b\u7684\u57fa\u6e96\u9ede\u3002
\u6709\u6642\u6703\u8a8d\u70ba 1% \u662f\u6975\u7aef\u503c\uff0c\u61c9\u8a72\u5ffd\u7565\u3002\u7136\u800c\u5728\u7db2\u8def\u4e16\u754c\u4e2d\uff0c\u4e00\u500b\u4f7f\u7528\u8005\u5e38\u5e38\u6703\u9700\u8981\u91dd\u5c0d\u4e00\u500b\u7db2\u9801\u505a\u51fa\u5f88\u591a\u8acb\u6c42\u3002\u82e5\u4ee5\u4e00\u500b\u9801\u9762\u9700\u8981 40 \u500b\u8cc7\u6e90\u4f86\u8a08\u7b97\uff0c\u5728\u8dd1\u7b2c\u4e94\u500b\u9801\u9762\u4e4b\u5f8c\uff0c\u6709\u8fd1\u4e4e 0.003 % \u7684\u6a5f\u7387\u4f7f\u7528\u8005 \u4e0d\u6703 \u89f8\u767c\u5230 95% \u7684\u72c0\u6cc1\u3002 How NOT to Measure Latency
"},{"location":"feedback/distributed-systems-with-node.js/sla-and-load-testing/#\u4f7f\u7528-reverse-proxy---haproxy","title":"\u4f7f\u7528 Reverse Proxy - HAProxy","text":"Percentile With Proxy Without 99.9% 1ms 1ms 99.99% 2ms 2ms 99.999% 5ms 3ms\u5f97\u5230 19967 \u500b\u6bcf\u79d2\u8acb\u6c42\u91cf
\uff0c\u76f8\u6bd4\u65bc\u57fa\u6e96\u9ede 29487
\uff0c\u770b\u5f97\u51fa\u5728\u6700\u55ae\u7d14\u7684\u61c9\u7528\u7a0b\u5f0f\u4e0b\u589e\u52a0 r-proxy \u6703\u8b93\u61c9\u7528\u7a0b\u5f0f\u8b8a\u6162\u3002
\u4f46\u82e5\u8003\u616e\u771f\u6b63\u7684\u61c9\u7528\u7a0b\u5f0f\uff0c\u5047\u5982\u56de\u61c9\u6642\u9593\u70ba 100ms\uff0c\u4f7f\u7528 r-proxy \u96d6\u6703\u589e\u52a0\u56de\u61c9\u6642\u9593\uff0c\u537b\u50c5\u50c5\u589e\u52a0 1~2ms\uff0c\u6574\u9ad4\u6548\u76ca\u9084\u662f\u5927\u65bc\u5176\u6d88\u8017\u7684\u6548\u80fd\u3002
"},{"location":"feedback/distributed-systems-with-node.js/sla-and-load-testing/#\u82e5\u8003\u616e-http-compression","title":"\u82e5\u8003\u616e HTTP Compression","text":"\u4e0a\u8ff0\u4f8b\u5b50\u50c5\u8003\u616e\u6700\u57fa\u790e\u7684\u6846\u67b6\u6548\u80fd\uff0c\u82e5\u70ba\u4e86\u58d3\u7e2e\u7db2\u8def\u6d41\u91cf
\u4e0a\u4e00\u4efd\u5831\u544a\u8a0e\u8ad6\u5404\u7a2e\u670d\u52d9\u9593\u7684\u6e9d\u901a\u65b9\u5f0f\uff1a
\u7a76\u7adf\u54ea\u4e00\u9805\u662f\u771f\u6b63\u6709\u6548\u7387\u7684\uff1f
"},{"location":"feedback/distributed-systems-with-node.js/sla-and-load-testing/#\u7d50\u679c","title":"\u7d50\u679c","text":"Percentile JSON GraphQL gRPC 99% 10ms 13ms 24ms 99.9% 18ms 22ms 32ms 99.99% 26ms 36ms 82ms 99.999% 48ms 67ms 82ms"},{"location":"feedback/distributed-systems-with-node.js/sla-and-load-testing/#\u8a0e\u8ad6","title":"\u8a0e\u8ad6","text":"\u6211\u5011\u77e5\u9053 GraphQL \u7684\u50f9\u503c\u5728\u65bc\u53ef\u4ee5\u5728\u4e00\u500b request \u4e2d\u53d6\u5f97\u6240\u6709\u8a0a\u606f\uff0c\u4e14\u4e0d\u9700\u8981\u91dd\u5c0d\u6bcf\u500b\u5834\u666f\u5c0d\u5916\u958b\u51fa\u4e00\u500b endpoint\u3002
\u6709\u6642\u70ba\u4e86\u8ffd\u6c42\u958b\u767c\u6548\u7387\uff0c\u800c\u6703\u6368\u68c4\u90e8\u5206\u7522\u54c1\u6548\u7387\uff0c\u9019\u6642\u4fbf\u8981\u6b0a\u8861\u7522\u54c1\u7684\u7279\u6027\u8f03\u504f\u5411\u65bc\u54ea\u908a\u3002
\u9664\u6b64\u4e4b\u5916 JSON \u7684\u89e3\u6790\u5728 v8 engine \u4e2d\uff0c\u6548\u7387\u5df2\u7d93\u88ab\u6975\u81f4\u7684\u58d3\u7e2e\u4e86\uff0c\u6240\u4ee5\u76f8\u5c0d\u800c\u8a00\uff0c\u5229\u7528 Buffer \u505a binary \u89e3\u6790\u7684 gRPC \u5728\u6548\u80fd\u4e0a\u5c31\u77ee\u4e86\u4e00\u622a\u3002\u7531\u65bc\u5176\u7279\u6027\uff0c\u8b93\u4ed6\u5728 C++ \u9019\u985e\u7de8\u8b6f\u904e\u7684\u7a0b\u5f0f\u78bc\u4e2d\u6709\u8f03\u9ad8\u7684\u6548\u80fd\uff0c\u800c\u4e0d\u984d\u5916\u8655\u7406 GC \u9019\u985e\u4e8b\u4ef6\u3002
"},{"location":"feedback/distributed-systems-with-node.js/sla-and-load-testing/#\u7d50\u8ad6","title":"\u7d50\u8ad6","text":"\u82e5\u5e0c\u671b\u7522\u54c1\u80fd\u5728 50ms \u5167\u56de\u61c9\u8acb\u6c42\uff0c\u4e26\u5f97\u51fa\u7dda\u4e0a\u74b0\u5883\u9ad8\u5cf0\u7d04\u6bcf\u79d2 20 \uff08\u6216\u6bcf\u5206 1200 \u6216\u6bcf\u6642 72000\uff09\u500b\u8acb\u6c42\u3002
\u555f\u7528\u4e00\u500b Docker container \u6642\uff0c\u5982\u8981\u5728 TP99 \u5167\u56de\u61c9 50ms \u4ee5\u4e0b\uff0c\u50c5\u80fd\u63a5\u53d7\u6bcf\u79d2 6 \u500b\u8acb\u6c42\u3002
\u518d\u589e\u52a0\u4e00\u500b Docker container\uff0c\u6b64\u6642\u80fd\u63a5\u53d7\u6bcf\u79d2 10 \u500b\uff0c\u4f9d\u5e8f\u5f80\u4e0b\u52a0\u3002 \u6700\u7d42\u5f97\u5230 4 \u500b container \u70ba\u5408\u7406\u6578\u91cf\u3002
"},{"location":"feedback/distributed-systems-with-node.js/sla-and-load-testing/#\u5de5\u5177","title":"\u5de5\u5177","text":"\u4e0a\u8ff0\u6240\u6709\u6e2c\u8a66\uff0c\u7686\u662f\u4f7f\u7528 autocannon \u9019\u8edf\u9ad4\u6e2c\u8a66\uff0c\u76f8\u95dc\u4ee3\u78bc\u6a21\u5f0f\u7686\u70ba\uff1a
autocannon -d 60 -c 10 -l http://localhost:3000\n
\u5176\u610f\u7fa9\u5728\u65bc\uff1a\u5efa\u7acb 10 \u500b\u9023\u7dda\uff08-c
\uff09\uff0c\u4e26\u6301\u7e8c\uff08-d
\uff0960 \u79d2\uff0c\u4e26\u5c55\u793a\u8a73\u76e1\u7684\u7d50\u679c\uff08-l
\uff09\uff0c\u9810\u8a2d\u6bcf\u500b\u9023\u7dda\u6bcf\u79d2\u6253 1 \u6b21\u8acb\u6c42\uff08-p
\uff09
\u5c0d\u65bc\u8a72\u4f7f\u7528\u4f55\u7a2e\u5de5\u5177\uff0c\u5176\u5be6\u4e0d\u7121\u7279\u5225\u8981\u6c42\uff0c\u4f46\u662f\u5c0d\u65bc\u5982\u4f55\u89e3\u8b80\u7d50\u679c\uff0c\u4ecd\u63a8\u85a6 How NOT to Measure Latency \u9019\u90e8\u5f71\u7247
\u82e5\u662f\u591a\u9805\u670d\u52d9\u5408\u8a08\u7684 latency\uff08\u6216\u751a\u81f3\u5168\u516c\u53f8\uff09\uff0c\u9019\u6642\u4f7f\u7528\u540c\u4e00\u7a2e\u5de5\u5177\u5c31\u986f\u5f97\u91cd\u8981\u4e86\u3002
"},{"location":"feedback/distributed-systems-with-node.js/sla-and-load-testing/#\u5fae\u5be6\u4f5c","title":"\u5fae\u5be6\u4f5c","text":"auth
"},{"location":"feedback/future-of-fusion-energy/","title":"\u5c55\u671b\u6838\u878d\u5408","text":"IMF 2017 \u5e74\u7684\u7d71\u8a08\u986f\u793a\u5168\u7403\u6709 154 \u500b\u958b\u767c\u4e2d\u7d93\u6fdf\u9ad4\u548c 39 \u500b\u5df2\u958b\u767c\u7d93\u6fdf\u9ad4\uff0c\u6211\u5011\u53ef\u4ee5\u5728\u5df2\u958b\u767c\u570b\u5bb6\u7684\u80fd\u6e90\u6d88\u8017\u89c0\u5bdf\u5230\u6b63\u9010\u6f38\u7a69\u5b9a\u751a\u81f3\u958b\u59cb\u6e1b\u5c11\uff0c\u76f8\u5c0d\u800c\u8a00\u90a3\u4e9b\u958b\u767c\u4e2d\u7684\u570b\u5bb6\u9700\u8981\u7684\u80fd\u6e90\u5247\u662f\u9010\u5e74\u589e\u9577\u3002
\u9010\u5e74\u5404\u570b\u6bcf\u4eba\u80fd\u91cf\u6d88\u8cbb\u529b \u9010\u5e74\u5404\u570b\u6bcf\u5e74\u80fd\u91cf\u6d88\u8cbb\u529b\u7684\u8b8a\u52d5\u7387/\u958b\u767c\u4e2d\u570b\u5bb6\u6709\u4e2d\u570b\u548c\u8d8a\u5357\uff0c\u5df2\u958b\u767c\u7684\u6709\u5fb7\u570b\u3001\u7f8e\u570b\u548c\u53f0\u7063\uff0c\u8a73\u898b\u76f8\u95dc\u7684\u4e92\u52d5\u9023\u7d50
\u9019\u4ee3\u8868\u82e5\u5df2\u958b\u767c\u570b\u5bb6\u5728\u4e0d\u6e1b\u5c11\uff08\u4e5f\u4e0d\u589e\u52a0\uff09\u8017\u80fd\u7684\u60c5\u6cc1\u4e0b\uff0c\u4eba\u985e\u6240\u9700\u7684\u80fd\u6e90\u4ecd\u6703\u8d8a\u4f86\u8d8a\u591a\uff0c\u7562\u7adf\u5df2\u958b\u767c\u570b\u5bb6\u662f\u6c92\u6709\u7acb\u5834\u53bb\u963b\u6b62\u90a3\u4e9b\u958b\u767c\u4e2d\u570b\u5bb6\u53bb\u63d0\u5347\u958b\u767c\u7a0b\u5ea6\uff0c\u4f46\u662f\u9019\u4e0d\u4ee3\u8868\u6211\u5011\u4e0d\u80fd\u63d0\u4f9b\u5e6b\u52a9\u3002
\u4ee5\u5f80\u70ba\u4e86\u5feb\u901f\u958b\u767c\uff0c\u5e7e\u4e4e\u7121\u7bc0\u5236\u7684\u4f7f\u7528\u80fd\u6e90\uff0c\u800c\u9019\u884c\u70ba\u5f88\u986f\u7136\u5730\u9020\u6210\u4e86\u67d0\u4e9b\u554f\u984c\uff0c\u6211\u5011\u53ef\u4ee5\u907f\u514d\u8b93\u5927\u5bb6\u8d70\u540c\u6a23\u7684\u834a\u68d8\u8def\u3002\u4ecb\u7d39\u9019\u672c\u66f8\u4e0d\u50c5\u50c5\u662f\u70ba\u4e86\u66b8\u89e3\u6838\u878d\u5408\u767c\u5c55\u7684\u9032\u7a0b\u548c\u672a\u4f86\u5c55\u671b\uff0c\u66f4\u662f\u56e0\u70ba\u5176\u4e2d\u91dd\u5c0d\u518d\u751f\u80fd\u6e90\u7684\u7a2e\u7a2e\u5206\u6790\uff0c\u8b93\u6211\u5011\u660e\u767d\u5176\u5be6\u6211\u5011\u53ef\u4ee5\u505a\u51fa\u5f88\u591a\u9078\u64c7\uff0c\u4f86\u5584\u5f85\u9019\u500b\u4e58\u8f09\u8457\u6211\u5011\u7684\u6bcd\u89aa\u3002\u6b63\u56e0\u70ba\u6211\u5011\u53bb\u5b78\u7fd2\uff0c\u6240\u4ee5\u624d\u6709\u6a5f\u6703\u505a\u51fa\u65b0\u7684\u9078\u64c7\u3002
\u6211\u5011\u6709\u54ea\u4e9b\u9078\u64c7
\u6211\u80fd\u60f3\u5230\u6700\u8b93\u4eba\u6709\u52d5\u529b\u53bb\u57f7\u884c\u7684\u5c31\u662f\u6295\u8cc7\u3002\u56e0\u70ba\u6e05\u695a\u73fe\u5728\u4e16\u754c\u518d\u751f\u80fd\u6e90\u767c\u5c55\u9032\u7a0b\uff0c\u6211\u5011\u53ef\u4ee5\u66f4\u6709\u4fe1\u5fc3\u7684\u95dc\u6ce8\u90a3\u4e9b\u6b63\u8d70\u5728\u524d\u7aef\u7684\u7522\u696d\uff0c\u4f8b\u5982\u4eca\u5e74\uff082022\uff09\u7684\u65b0\u805e\uff1a\u82ac\u862d\u516c\u53f8\u8a2d\u8a08\u51fa\u5546\u7528\u6c99\u96fb\u6c60\u3002\u53e6\u5916\u6211\u5011\u9084\u53ef\u4ee5\u505a\u4ec0\u9ebc\uff1f\u81fa\u7063\u76ee\u524d\u5c0d\u65bc\u516c\u53f8\u751a\u81f3\u5bb6\u5ead\u7528\u7684\u592a\u967d\u80fd\u96fb\u677f\u5927\u529b\u88dc\u52a9\uff0c\u5982\u679c\u4f60\u66b8\u89e3\u592a\u967d\u80fd\u7684\u4e00\u4e9b\u512a\u9ede\u3001\u7f3a\u9ede\u548c\u89e3\u6c7a\u8fa6\u6cd5\uff0c\u4e5f\u8a31\u4f60\u66f4\u6a02\u610f\u53bb\u505a\u9019\u500b\u5617\u8a66\u3002
\u6709\u4e00\u6b21\u56de\u5bb6\uff0c\u770b\u5230\u5abd\u5abd\u628a\u6d17\u8863\u6a5f\u6d17\u5b8c\u7684\u6c34\u6536\u96c6\u8d77\u4f86\uff0c\u4e26\u7528\u9019\u500b\u6c34\u53bb\u62d6\u64e6\u5730\u3002\u6211\u60f3\uff0c\u5c0d\u65bc\u53cb\u5584\u74b0\u5883\u7684\u505a\u6cd5\u53ef\u4ee5\u6709\u5f88\u591a\u7a2e\uff0c\u5f80\u5f80\u9019\u4e9b\u505a\u6cd5\u90fd\u662f\u4e00\u4e9b\u751f\u6d3b\u4e2d\u7684\u5c0f\u5730\u65b9\uff0c\u800c\u4e4b\u6240\u4ee5\u4f60\u80fd\u6ce8\u610f\u5230\u9019\u4e9b\u5c0f\u5730\u65b9\u4e26\u4e0d\u662f\u56e0\u70ba\u4f60\u662f\u500b\u74b0\u4fdd\u76f8\u95dc\u9818\u57df\u7684\u7814\u7a76\u4eba\u54e1\uff0c\u800c\u662f\u56e0\u70ba\u4f60\u628a\u5225\u4eba\u653e\u5728\u5fc3\u4e0a\u3002\u5982\u679c\u5e73\u5e38\u751f\u6d3b\u90fd\u662f\u770b\u96fb\u8996\u3001\u5403\u7f8e\u98df\uff0c\u60f3\u7684\u4e8b\u60c5\u505a\u7684\u4e8b\u60c5\u90fd\u53ea\u662f\u70ba\u4e86\u81ea\u5df1\uff0c\u9019\u6a23\u548c\u4ed6\u8ac7\u74b0\u4fdd\uff0c\u771f\u7684\u5c31\u5982\u5c0d\u725b\u5f48\u7434\u822c\u3002\u5f9e\u300c\u591a\u505a\u4e00\u4e9b\u4e8b\u300d\u4e2d\u7684\u505a\u597d\u5eda\u9918\u56de\u6536\u3001\u8cfc\u8cb7\u53cb\u5584\u74b0\u5883\u7684\u8fb2\u7522\u54c1\uff08\u8a3b\u4e00\uff09\u7b49\uff0c\u5230\u300c\u5c11\u505a\u4e00\u4e9b\u4e8b\u300d\u4e2d\u7684\u6e1b\u5c11\u51b7\u6c23\u4f7f\u7528\u3001\u6e1b\u5c11\u71b1\u6c34\u7684\u4f7f\u7528\u7b49\uff0c\u9019\u4e9b\u90fd\u662f\u53ef\u4ee5\u505a\u7684\u65b9\u5f0f\uff0c\u4f46\u4e5f\u5c31\u53ea\u662f\u8868\u9762\u7684\u73fe\u8c61\u3002
\u771f\u6b63\u6709\u50f9\u503c\u7684\u662f\u6211\u5011\u5167\u5728\u7684\u521d\u5fc3\uff0c\u5982\u679c\u6211\u5011\u80fd\u540c\u7406\u4ed6\u4eba\u751a\u81f3\u6574\u500b\u5927\u81ea\u7136\uff0c\u505a\u8d77\u9019\u4e9b\u4e8b\u5c31\u6703\u66f4\u7d14\u7cb9\u4e14\u6301\u4e45\u3002\u4f8b\u5982\u8003\u616e\u5230\u5439\u51b7\u6c23\u5176\u5be6\u53ea\u662f\u628a\u71b1\u6c23\u9001\u5f80\u5916\u9762\uff0c\u8b93\u5728\u5916\u9762\u7684\u6240\u6709\u4eba\u5171\u540c\u627f\u64d4\u4f60\u6240\u6392\u51fa\u7684\u71b1\uff0c\u6216\u8005\u4e0d\u505a\u5eda\u9918\u56de\u6536\u5176\u5be6\u6703\u964d\u4f4e\u5783\u573e\u711a\u5316\u7210\u7684\u4f7f\u7528\u58fd\u547d\u9032\u800c\u589e\u52a0\u63a9\u57cb\u5783\u573e\u7684\u91cf\uff08\u8a3b\u4e8c\uff09\u3002\u554f\u984c\u597d\u50cf\u56de\u5230\u4e86\u300c\u6211\u5011\u8981\u600e\u9ebc\u540c\u7406\u4ed6\u4eba\u300d\u9019\u7a2e\u539f\u59cb\u5230\u96e3\u4ee5\u56de\u7b54\u7684\u554f\u984c\u3002\u6211\u60f3\u6700\u597d\u7684\u65b9\u5f0f\u5c31\u662f\u5b78\u7fd2\u4e26\u89c0\u5bdf\u90a3\u4e9b\u771f\u6b63\u505a\u5230\u7684\u4eba\uff0c\u4f8b\u5982\u900f\u904e\u56db\u66f8\uff08\u6216 \u8056\u7d93\u3001\u4f5b\u7d93\u3001\u53e4\u862d\u7d93\uff09\u5b78\u7fd2\u5b54\u5b50\uff08\u6216 \u8036\u8607\u3001\u4f5b\u9640\u3001\u7a46\u7f55\u9ed8\u5fb7\uff09\u7684\u751f\u6d3b\u65b9\u5f0f\u3002
\u8a3b\u4e00\uff1a\u770b\u8d77\u4f86\u53cb\u5584\u8015\u4f5c\u597d\u50cf\u548c\u74b0\u4fdd\u6c92\u95dc\u4fc2\uff0c\u4f46\u5982\u679c\u4f60\u628a\u6642\u9593\u8ef8\u62c9\u9577\u3001\u5730\u57df\u62c9\u5ee3\uff0c\u53cb\u5584\u8015\u4f5c\u5176\u5be6\u64c1\u6709\u975e\u5e38\u9ad8\u7684\u7d93\u6fdf\u6548\u76ca\uff0c\u4ed6\u80fd\u6e1b\u5c11\u5f88\u591a\u4e0d\u5fc5\u8981\u7684\u640d\u8017\uff0c\u9032\u800c\u6e1b\u5c11\u5c0d\u5730\u7403\u7684\u8ca0\u64d4\u3002
\u8a3b\u4e8c\uff1a\u6211\u5011\u53ef\u4ee5\u901a\u904e\u96a8\u888b\u5fb5\u6536\u4f86\u63d0\u9ad8\u56de\u6536\u7387\uff0c\u96d6\u7136\u9019\u9700\u8981\u63d0\u9ad8\u6c11\u773e\u7684\u8a8d\u77e5\u548c\u653f\u5e9c\u7684\u6295\u8cc7\u6210\u672c\u624d\u53ef\u80fd\u5be6\u73fe\u3002
\u81fa\u7063\u7684\u518d\u751f\u80fd\u6e90\u81fa\u7063\u8fd1\u5e74\u4f86\u5927\u529b\u63d0\u5021\u518d\u751f\u80fd\u6e90\uff0c\u5df2\u7d93\u770b\u5230\u6bcf\u5e74\u6b63\u4ee5\u8d85\u904e\u5169\u6210\u7684\u901f\u5ea6\u6210\u9577\uff0c\u4f46\u662f\u592a\u967d\u80fd\u3001\u98a8\u529b\u767c\u96fb\u5c6c\u65bc\u9593\u6b47\u6027\u767c\u96fb\uff0c\u6709\u4ec0\u9ebc\u597d\u89e3\u6cd5\u4f86\u8655\u7406\u90a3\u4e9b\u6c92\u592a\u967d\u548c\u98a8\u7684\u6642\u5019\u5462\uff1f
"},{"location":"feedback/future-of-fusion-energy/energy/","title":"\u80fd\u6e90","text":"\u80fd\u6e90\uff0c\u6bcf\u65e5\u6240\u9700\uff0c\u5118\u7ba1\u5982\u6b64\uff0c\u6211\u5011\u66b8\u89e3\u80fd\u6e90\u7684\u8d77\u6e90\u55ce\uff1f\u6211\u5011\u5e38\u63d0\u7684\u518d\u751f\u80fd\u6e90\uff08renewable energy\uff09\u6307\u7684\u662f\u54ea\u4e9b\u80fd\u6e90\u5462\uff1f
\u672c\u7bc7\u7684\u5b8c\u6574\u8aaa\u660e\uff0c\u53ef\u4ee5\u8a73\u95b1 Sustainable Energy - without the host air\u3002
\u4eba\u985e\u88fd\u9020\u96fb\u529b\u7684\u65b9\u5f0f\u57fa\u672c\u4e0a\u5c31\u662f\u52a0\u71b1\u6c34\u4f86\u8f49\u52d5\u6e26\u8f2a\u4e26\u9032\u800c\u900f\u904e\u96fb\u78c1\u53cd\u61c9\u7522\u96fb\uff0c\u9019\u4e4b\u4e2d\u7684\u4f8b\u5916\u5c31\u662f\u592a\u967d\u80fd\u7684\u5149\u96fb\u53cd\u61c9\u3002
"},{"location":"feedback/future-of-fusion-energy/energy/#\u7a2e\u985e","title":"\u7a2e\u985e","text":"\u5927\u7206\u70b8\u4e4b\u5f8c\u7684\u5341\u5206\u9418\uff0c\u5b87\u5b99\u958b\u59cb\u51b7\u537b\uff0c\u5927\u91cf\u81ea\u7531\u7684\u8cea\u5b50\u3001\u4e2d\u5b50\u3001\u96fb\u5b50\u958b\u59cb\u51b7\u975c\u4e0b\u4f86\uff0c\u4e26\u7d44\u5408\u6210\u4e00\u4e9b\u7c21\u55ae\u7684\u539f\u5b50\u3002\u9019\u4e9b\u539f\u5b50\u4e2d 90% \u662f\u6c2b\u800c\u5269\u4e0b\u7684\u662f\u6c26\u3002\u5728\u9019\u4e9b\u539f\u5b50\u9054\u6210\u4e00\u5b9a\u7684\u6578\u91cf\u5f8c\uff0c\u5c31\u6703\u5f62\u6210\u96f2\u72c0\u7684\u539f\u5b50\u7fa4\uff0c\u5728\u9019\u539f\u5b50\u7fa4\u4e2d\uff0c\u4e3b\u8981\u6709\u5169\u7a2e\u80fd\u91cf\u5f71\u97ff\u8457\u4ed6\u5011\u3002\u7b2c\u4e00\u500b\u662f\u6838\u878d\u5408\uff0c\u7576\u5169\u500b\u8f15\u7684\u539f\u5b50\u6574\u5408\u6210\u4e00\u500b\u8f03\u91cd\u7684\u539f\u5b50\u7684\u6642\u5019\uff0c\u6211\u5011\u7a31\u5176\u904e\u7a0b\u70ba\u6838\u878d\u5408\uff0c\u9019\u500b\u904e\u7a0b\u6703\u4f34\u96a8\u8457\u5927\u91cf\u7684\u80fd\u91cf\u7684\u91cb\u51fa\uff0c\u800c\u9019\u500b\u80fd\u91cf\u6703\u8f49\u5316\u6210\u65b0\u7684\u539f\u5b50\u7684\u52d5\u80fd\uff0c\u52a0\u901f\u5176\u904b\u52d5\u3002\u7b2c\u4e8c\u500b\u662f\u91cd\u529b\uff0c\u7576\u5169\u500b\u539f\u5b50\u8655\u65bc\u5e7e\u8fd1\u771f\u7a7a\u7684\u74b0\u5883\u4e4b\u4e0b\uff0c\u74b0\u5883\u7684\u6469\u64e6\u529b\u8da8\u8fd1\u65bc\u96f6\u6642\uff0c\u5c31\u6703\u8b93\u9019\u5169\u500b\u539f\u5b50\u900f\u904e\u91cd\u529b\u4e92\u76f8\u9760\u8fd1\u548c\u78b0\u649e\uff0c\u800c\u9019\u78b0\u649e\u5c31\u662f\u9020\u6210\u539f\u5b50\u7fa4\u5e73\u5747\u6eab\u5ea6\u9010\u6f38\u4e0a\u5347\u7684\u4e3b\u56e0\u3002
Gravity is the spark that enabled everything.
\u503c\u5f97\u6ce8\u610f\u7684\u662f\uff0c\u5728\u539f\u5b50\u7fa4\u4e4b\u521d\uff0c\u6838\u878d\u5408\u767c\u751f\u7684\u6a5f\u7387\u5fae\u4e4e\u5176\u5fae\u3002\u9019\u662f\u56e0\u70ba\u7576\u5169\u500b\u539f\u5b50\u5728\u4e0d\u5920\u9ad8\u7684\u6eab\u5ea6\u4e0b\u76f8\u649e\uff0c\u53ea\u6703\u9020\u6210\u7269\u7406\u6027\u4e0a\u7684\u78b0\u649e\uff0c\u800c\u8981\u6709\u53ef\u89c0\u7684\u6a5f\u7387\u80fd\u9054\u6210\u6838\u878d\u5408\u53cd\u61c9\u7684\u689d\u4ef6\u74b0\u5883\u64c1\u6709\u7d04 10,000,000 \u5ea6\u3002\u63db\u53e5\u8a71\u8aaa\uff0c\u91cd\u529b\u5728\u5b87\u5b99\u4e4b\u521d\uff0c\u4e3b\u5bb0\u8457\u80fd\u91cf\u7684\u7522\u751f\u3002\u96a8\u8457\u8d85\u5927\u91cf\u7684\u539f\u5b50\u5f7c\u6b64\u78b0\u649e\uff0c\u5c31\u6703\u5f62\u6210\u9069\u5408\u6838\u878d\u5408\u53cd\u61c9\u7684\u74b0\u5883\uff0c\u9019\u6642\u5c31\u6703\u8b93\u6838\u878d\u5408\u9020\u6210\u7684\u52d5\u529b\u548c\u91cd\u529b\u7684\u5f15\u529b\u76f8\u4e92\u5e73\u8861\uff0c\u5f62\u6210\u661f\u661f\uff0c\u6216\u8005\u8aaa\u592a\u967d\u3002\u7576\u6838\u878d\u5408\u7684\u539f\u6599\u88ab\u7528\u5b8c\u4e86\u4e4b\u5f8c\uff0c\u91cd\u529b\u537b\u4ecd\u7136\u5b58\u5728\u65bc\u661f\u661f\u4e2d\u5c31\u6703\u5c0e\u81f4\u7269\u9ad4\u7684\u5d29\u584c\u6700\u5f8c\u9020\u6210\u8d85\u65b0\u661f\uff08supernova\uff0c\u53ef\u80fd\u6301\u7e8c\u5e7e\u500b\u6708\uff09\uff0c\u4e26\u91cb\u51fa\u5927\u91cf\u7684\u80fd\u91cf\u3002\u7531\u65bc\u9019\u80fd\u91cf\u5be6\u5728\u904e\u65bc\u5de8\u5927\uff08\u751a\u81f3\u53ef\u80fd\u548c\u661f\u661f\u4e00\u751f\u91cb\u653e\u7684\u80fd\u91cf\u76f8\u7576\uff09\uff0c\u5c07\u6703\u9032\u4e00\u6b65\u7684\u7d44\u6210\u5b87\u5b99\u4e2d\u66f4\u91cd\u66f4\u5927\u7684\u539f\u5b50\uff0c\u9019\u4e9b\u8f03\u91cd\u7684\u539f\u5b50\u98c4\u6563\u5728\u5b87\u5b99\u4e2d\u53ef\u80fd\u53c8\u6703\u548c\u6c2b\u3001\u6c26\u7d44\u6210\u661f\u96f2\uff08nebula\uff09\u3002
\u6709\u4e9b\u661f\u7403\u4e0d\u5920\u5927\uff0c\u5c0e\u81f4\u91cd\u529b\u7121\u6cd5\u751f\u6210\u8db3\u5920\u7684\u71b1\u91cf\u8b93\u539f\u5b50\u9032\u884c\u6838\u878d\u5408\uff0c\u4f46\u662f\u53c8\u56e0\u70ba\u8db3\u5920\u9760\u8fd1\u661f\u661f\uff08\u6216\u8005\u8aaa\u592a\u967d\uff09\uff0c\u5f9e\u800c\u8b93\u6c2b\u3001\u6c26\u9019\u4e9b\u5c0f\u539f\u5b50\u7372\u5f97\u8db3\u5920\u7684\u71b1\u91cf\uff08\u52d5\u80fd\uff09\u4e26\u9038\u51fa\u661f\u7403\u3002\u7d93\u904e\u4e00\u6bb5\u6642\u9593\u5f8c\uff0c\u8f03\u5927\u7684\u539f\u5b50\uff08\u4f8b\u5982\u78b3\u3001\u9435\uff09\u5c31\u6703\u5728\u9019\u500b\u661f\u7403\u4e2d\u4f54\u6709\u5f88\u5927\u7684\u6bd4\u4f8b\uff0c\u540c\u6642\u53c8\u6709\u8db3\u5920\u7684\u6c2b\u4ee5\u4e0d\u540c\u578b\u614b\uff08\u4f8b\u5982\u6c34\uff09\u4fdd\u7559\u5728\u661f\u7403\u4e2d\uff0c\u5f9e\u800c\u751f\u6210\u5f62\u5f62\u8272\u8272\u7684\u74b0\u5883\uff0c\u4f8b\u5982\u5730\u7403\u3002
\u57fa\u790e\u80fd\u6e90\u7531\u4e0a\u8ff0\u53ef\u77e5\u5305\u542b\uff1a
\u5176\u4ed6\u80fd\u6e90\u4fbf\u90fd\u662f\u5f9e\u9019\u4e9b\u57fa\u790e\u80fd\u6e90\u5ef6\u4f38\u800c\u6210\uff0c\u4f8b\u5982
\u9019\u4e9b\u5ef6\u4f38\u80fd\u6e90\uff0c\u56e0\u70ba\u71b5\u7684\u63d0\u9ad8\uff0c\u9032\u800c\u964d\u4f4e\u6574\u9ad4\u7684\u80fd\u91cf\u8f49\u63db\u6548\u80fd\uff0c\u6240\u4ee5\u55ae\u5c31\u9019\u9ede\u4f86\u8aaa\uff0c\u57fa\u790e\u80fd\u6e90\u66f4\u80fd\u63d0\u4f9b\u512a\u8cea\u7684\u80fd\u91cf\u3002
\u71b5
\u8d8a\u662f\u6df7\u4e82\u7684\u7cfb\u7d71\uff0c\u64c1\u6709\u8d8a\u9ad8\u7684\u71b5\u3002\u4e00\u500b\u7368\u7acb\u7684\u7cfb\u7d71\u4e2d\uff0c\u5176\u5167\u90e8\u7684\u71b5\u6703\u96a8\u8457\u6642\u9593\u4e0a\u5347\uff0c\u63db\u53e5\u8a71\u8aaa\uff0c\u6240\u6709\u4e8b\u7269\u90fd\u50be\u5411\u65bc\u8d70\u5411\u6df7\u4e82\u3002\u7576\u6211\u5011\u5728\u6d88\u8017\u80fd\u91cf\u7684\u6642\u5019\uff0c\u5176\u5be6\u5c31\u662f\u88fd\u9020\u71b5\uff0c\u6240\u4ee5\u90a3\u4e9b\u64c1\u6709\u5f88\u4f4e\u7684\u71b5\u7684\u80fd\u91cf\uff08\u4f8b\u5982\uff0c\u96fb\u529b\uff09\uff0c\u5c31\u6703\u5f88\u597d\u7528\uff0c\u56e0\u70ba\u6211\u5011\u53ef\u4ee5\u5f88\u8f15\u6613\u5730\u900f\u904e\u5b83\uff0c\u7522\u751f\u60f3\u8981\u7684\u6df7\u4e82\u72c0\u614b\u3002
"},{"location":"feedback/future-of-fusion-energy/energy/#\u4eba\u985e\u80fd\u6e90\u7684\u6d88\u8cbb\u529b","title":"\u4eba\u985e\u80fd\u6e90\u7684\u6d88\u8cbb\u529b","text":"\u4eba\u985e\u4e00\u5e74\u6703\u4f7f\u7528\u591a\u5c11\u80fd\u91cf\uff1f\\(18 TW\\)\uff0c\u5305\u542b\u767c\u96fb\uff08\u7d04 \\(6 TW\\)\uff09\u3001\u904b\u8f38\u3001\u52a0\u71b1\u3001\u7269\u7406\u6027\u767c\u71b1\u8017\u640d\u3002\u7136\u800c\u9019\u662f 2018\uff08\u6210\u66f8\u5e74\u4efd\uff09\u7684\u8cc7\u6599\uff0c\u6240\u4ee5\u6642\u81f3\u4eca\u65e5\uff0c\u53ef\u80fd\u6703\u6709\u6240\u5dee\u7570\u3002\u70ba\u4ec0\u9ebc\uff1f\u9019\u662f\u56e0\u70ba\u4eba\u985e\u7684\u8017\u80fd\u6703\u96a8\u8457\u6642\u9593\u905e\u589e\uff0c\u5118\u7ba1\u8d8a\u4f86\u8d8a\u7bc0\u80fd\u7684\u7522\u54c1\u548c\u904b\u8f38\u65b9\u5f0f\u6b63\u4e0d\u65b7\u51fa\u73fe\uff0c\u958b\u767c\u4e2d\u570b\u5bb6\u4ecd\u9700\u8981\u5927\u91cf\u80fd\u91cf\u4f86\u5b8c\u6210\u570b\u57fa\u7684\u958b\u767c\uff0c\u800c\u958b\u767c\u4e2d\u570b\u5bb6\u548c\u5df2\u958b\u767c\u570b\u5bb6\u7684\u6bd4\u4f8b\u7d04\u70ba 10 \u6bd4 1\u3002
\u4ec0\u9ebc\u662f Watts\uff1f\u74e6\u7279\uff08Watts, W\uff09\u662f\u529f\u7387\uff08power\uff09\u7684\u55ae\u4f4d\uff0c\u4e5f\u5c31\u662f\u6bcf\u79d2\u8017\u640d\u80fd\u91cf\uff08energy\uff09\u7684\u91cf\uff0c\u5f0f\u5b50\u5982\u4e0b \\(1W=1J/S\\)\uff0c\u5176\u4e2d\u7684\u7126\u8033\uff08Joules, J\uff09\u5c31\u662f\u80fd\u91cf\u7684\u55ae\u4f4d\u3002\u8209\u4f8b\u4f86\u8aaa\uff0c\u4e00\u516c\u65a4\u7684\u78b3\u64c1\u6709\u7684\u80fd\u91cf\u662f \\(30 MJ\\)\uff0c\u5982\u679c\u4ed6\u53ef\u4ee5\u7dad\u6301 50 \u5206\u9418\u7684\u71c3\u71d2\u72c0\u614b\uff0c\u5c31\u4ee3\u8868\u9019 3000 \u79d2\u4e2d\uff0c\u9019\u516c\u65a4\u7684\u78b3\u63d0\u4f9b\u4e86 10,000 \u74e6\uff08\u6216\u8005 10 \u74e9\uff09\u7684\u529f\u7387\u3002\u5982\u679c\u4e00\u500b\u767d\u71be\u71c8\u6ce1\u9700\u8981 100 \u74e6\u4f86\u7dad\u6301\u9583\u8000\uff0c\u4e00\u516c\u65a4\u7684\u78b3\u5c31\u53ef\u4ee5\u7dad\u6301\u8a72\u71c8\u6ce1 3000 \u79d2\u7684\u9583\u8000\uff08\u56e0\u70ba 10,000 > 100 \u6240\u4ee5\u529f\u7387\u8db3\u5920\u652f\u6490\u71c8\u6ce1\u6240\u9700\uff0c\u4f46\u56e0\u70ba\u78b3\u53ea\u80fd\u71c3\u71d2 3000 \u79d2\uff0c\u6240\u4ee5\u7e3d\u5171\u53ea\u80fd\u7dad\u6301 3000 \u79d2\uff09\u3002
\u4eba\u985e\u4f7f\u7528\u7684\u80fd\u91cf\u4e2d\uff0c\u5404\u7a2e\u767c\u96fb\u65b9\u5f0f\u53c8\u5206\u5225\u4f54\u4e86\u591a\u5c11\uff1f
"},{"location":"feedback/future-of-fusion-energy/energy/#\u6838\u878d\u5408","title":"\u6838\u878d\u5408","text":"\u76ee\u524d\u4eba\u985e\u6bd4\u8f03\u53ef\u884c\u7684\u65b9\u5f0f\u6709\u5169\u7a2e\uff0c\u800c\u9019\u5169\u7a2e\u90fd\u662f\u5229\u7528\u6c2b\u7684\u540c\u4f4d\u7d20\u7684\u78b0\u649e\u4e26\u6539\u8b8a\u5176\u8cea\u5b50\u548c\u4e2d\u5b50\u7684\u7d44\u5408\uff0c\u7522\u751f\u80fd\u91cf\uff08\u56e0\u70ba\u300c\u5f37\u529b\u300d\u88ab\u62c6\u89e3\u800c\u7522\u80fd\uff09\uff1a
\u6c18\u662f\u76f8\u5c0d\u5e38\u898b\u7684\u540c\u4f4d\u7d20\uff0c\u4f54\u5b87\u5b99\u4e2d\u6c2b\u7684\u542b\u91cf\u7684\u516d\u5343\u56db\u767e\u5206\u4e4b\u4e00\uff0c\u63db\u53e5\u8a71\u8aaa\uff0c\u4f60\u5728\u4efb\u4e00\u676f\u6c34\u4e2d\u90fd\u770b\u5f97\u5230\u6c18\u3002\u76f8\u5c0d\u800c\u8a00\u6c1a\u7684\u542b\u91cf\u8f03\u5c11\uff08\u9019\u662f\u56e0\u70ba\u4ed6\u7684\u534a\u9031\u671f\u53ea\u6709\u7d04 12 \u5e74\uff09\uff0c\u6240\u4ee5\u901a\u5e38\u90fd\u662f\u4eba\u5de5\u7522\u751f\u7684\u3002\u7522\u751f\u7684\u65b9\u5f0f\u662f\u900f\u904e\u92f0\u548c\u4e00\u500b\u81ea\u7531\u4e2d\u5b50\u7684\u78b0\u649e\u3002
\u540c\u4f4d\u7d20\u540c\u4f4d\u7d20\u4ee3\u8868\u64c1\u6709\u76f8\u540c\u7684\u8cea\u5b50\u6578\uff0c\u4f46\u662f\u4e2d\u5b50\u6578\u4e0d\u540c\uff0c\u4f8b\u5982\u4e00\u500b\u539f\u5b50\u6838\u64c1\u6709\u4e00\u500b\u8cea\u5b50\u5c31\u7a31\u5176\u70ba\u6c2b\uff0c\u5982\u679c\u6c92\u6709\u4e2d\u5b50\u5c31\u662f\u6c2b\u7684\u4e3b\u8981\u8868\u73fe\u5f62\u5f0f\uff0c\u5982\u679c\u6709\u4e00\u500b\u4e2d\u5b50\u5c31\u7a31\u5176\u70ba\u6c18\uff0c\u6709\u5169\u500b\u5c31\u7a31\u5176\u70ba\u6c1a\u3002
\u6838\u878d\u5408\u7684\u771f\u6b63\u9b45\u529b\u5728\u65bc\u5b83\u7684\u9ad8\u6bd4\u80fd\uff0c\u4e5f\u5c31\u662f\u6bcf\u55ae\u4f4d\u8cea\u91cf\u6240\u5177\u6709\u7684\u80fd\u91cf\u3002\u8209\u4f8b\u4f86\u8aaa\uff0c\u71c3\u71d2\u77f3\u6cb9\u662f\u900f\u904e\u6539\u8b8a\u96fb\u5b50\u7684\u5206\u4f48\u548c\u901f\u5ea6\uff08\u5316\u5b78\u80fd\uff09\u4f86\u7522\u80fd\uff0c\u76f8\u5c0d\u800c\u8a00\uff0c\u6838\u878d\u5408\u662f\u900f\u904e\u6539\u8b8a\u4e2d\u5b50\u548c\u8cea\u5b50\u7684\u5206\u4f48\u4f86\u7522\u80fd\uff0c\u6838\u878d\u5408\u548c\u71c3\u71d2\u77f3\u6cb9\u4f7f\u7528\u76f8\u540c\u8cea\u91cf\u7684\u539f\u6599\uff0c\u80fd\u7522\u751f\u7684\u80fd\u91cf\u537b\u76f8\u5dee\u767e\u842c\u500d\u3002\u63db\u53e5\u8a71\u8aaa\uff0c\u4e00\u516c\u65a4\u7684\u78b3\u53ef\u80fd\u53ef\u4ee5\u5e6b\u4f60\u716e\u4e00\u9813\u665a\u9910\u4f46\u662f\u4e00\u516c\u65a4\u7684\u6838\u878d\u5408\u539f\u6599\u537b\u53ef\u4ee5\u7d66\u4e88\u4e00\u767e\u500b\u4eba\u4e00\u751f\u6240\u9700\u7684\u80fd\u91cf\u3002\u518d\u8209\u500b\u4f8b\u5b50\uff0c\u73fe\u5728\u4f60\u624b\u908a\u7684\u624b\u6a5f\u96fb\u6c60\u64c1\u6709\u7684\u92f0\uff08\u7528\u4f86\u7522\u6c1a\uff09\u548c\u4f60\u8eab\u9ad4\u4e2d\u7684\u6c18\uff08\u7d04\u5e7e\u8336\u5319\uff09\u5c31\u5920\u8b93\u4f60\u4f7f\u7528\u8d85\u904e\u5341\u5e74\u7684\u80fd\u91cf\u3002
\u4f46\u662f\u6211\u5011\u6709\u9019\u9ebc\u591a\u7684\u6838\u878d\u5408\u539f\u6599\u55ce\uff1f\u4ee5\u9700\u8981\u7522\u6c1a\u7684\u92f0\u4f86\u8aaa\uff0c\u6839\u64da2022 \u5e74\u7f8e\u570b\u5730\u8cea\u8abf\u67e5\u5c40\u6240\u4f30\u8a08\u7684\uff0c\u5730\u7403\u4e0a\u7684\u92f0\u7d04\u9084\u6709 2800 \u842c\u9813\uff0c\u9019\u5920\u7dad\u6301\u4eba\u985e\u7684\u8017\u80fd\uff08\\(18 TW\\)\uff09\u7d04\u4e00\u842c\u5e74\uff0c\u9664\u6b64\u4e4b\u5916\u6bcf\u516c\u5347\u7684\u6d77\u6c34\u5c31\u6703\u6709 \\(180\\mu g\\) \u7684\u92f0\u96e2\u5b50\uff0c\u63db\u7b97\u8d77\u4f86\u7d04\u6709 2000 \u5104\u5678\u7684\u92f0\u5728\u6d77\u6d0b\u4e2d\u3002\u5982\u679c\u662f\u6c18\u7684\u8a71\uff0c\u56e0\u70ba\u4ed6\u662f\u7a69\u5b9a\u7684\u540c\u4f4d\u7d20\uff0c\u6240\u4ee5\u5728\u5927\u81ea\u7136\u4e2d\u7684\u542b\u91cf\u7b97\u9ad8\u4e5f\u5c31\u4e0d\u5fc5\u64d4\u5fc3\u539f\u6599\u4e0d\u8db3\u7684\u72c0\u6cc1\uff0c\u53e6\u5916\u7531\u65bc\u6c18\u5728\u5316\u5b78\u4e0a\u7684\u529f\u80fd\u548c\u6c2b\u5dee\u4e0d\u591a\uff0c\u6240\u4ee5\u6211\u5011\u5f88\u53ef\u80fd\u53ef\u4ee5\u628a\u4ed6\u5f9e\u81ea\u7136\u754c\u4e2d\u5b8c\u5168\u8403\u53d6\u51fa\u4f86\uff0c\u800c\u4e0d\u5fc5\u64d4\u5fc3\u5176\u53ef\u80fd\u6703\u5c0d\u74b0\u5883\u9020\u6210\u7684\u5f71\u97ff\u3002
"},{"location":"feedback/future-of-fusion-energy/energy/#\u6838\u5206\u88c2","title":"\u6838\u5206\u88c2","text":"\u76ee\u524d\u6838\u5206\u88c2\u5728\u5168\u4eba\u985e\u7522\u80fd\uff08\u4e0d\u542b\u904b\u8f38\u548c\u71c3\u71d2\uff09\u7684\u6bd4\u4f8b\u4e2d\u7d04\u4f54 10%\u3002\u6838\u5206\u88c2\u7684\u7522\u80fd\u65b9\u5f0f\u662f\u900f\u904e\u628a\u4e00\u500b\u5927\u7684\u539f\u5b50\uff08\u901a\u5e38\u662f\u923e\u2014235\uff09\u6253\u6210\u5169\u500b\u5c0f\u7684\u539f\u5b50\u5f8c\uff0c\u5176\u7522\u751f\u7684\u80fd\u91cf\u5c31\u53ef\u4ee5\u7528\u4f86\u52a0\u71b1\u6c34\uff0c\u4e26\u4f9d\u6b64\u5e36\u52d5\u6e26\u8f2a\u8f49\u52d5\u7522\u751f\u96fb\u80fd\u3002\u4f46\u771f\u6b63\u8b93\u6838\u5206\u88c2\u548c\u6838\u878d\u5408\u5728\u5546\u696d\u61c9\u7528\u4e0a\u6709\u9019\u9ebc\u5927\u7684\u5dee\u7570\u5728\u65bc\u6838\u5206\u88c2\u5f88\u5bb9\u6613\u5c31\u53ef\u4ee5\u767c\u751f\u537b\u5f88\u96e3\u505c\u6b62\uff0c\u800c\u6838\u878d\u5408\u5f88\u96e3\u767c\u751f\u537b\u53ef\u4ee5\u8f15\u6613\u4e2d\u65b7\u3002
Fusion energy generation is difficult to start, but easy to stop.
Fission energy generation is easy to start, but difficult to stop.
\u7576\u923e\u2014235\u88ab\u4e2d\u5b50\u64ca\u4e2d\u4e26\u9032\u884c\u6838\u5206\u88c2\u5f8c\u6703\u7522\u751f\u5169\u500b\u5c0f\u7684\u539f\u5b50\u52a0\u4e0a\u4e09\u500b\u5e36\u8457\u52d5\u80fd\u7684\u81ea\u7531\u4e2d\u5b50\uff0c\u70ba\u4e86\u8b93\u6838\u5206\u88c2\u7a69\u5b9a\u7684\u7522\u80fd\uff0c\u6703\u8b93\uff08\u6a5f\u7387\u4e0a\u5e73\u5747\u4f86\u8aaa\uff09\u5176\u4e2d\u4e00\u500b\u4e2d\u5b50\u518d\u53bb\u6253\u5176\u4ed6\u7684\u923e\u2014235\uff0c\u9019\u5c31\u662f\u6240\u8b02\u7684\u9023\u9396\u53cd\u61c9\u3002\u9019\u500b\u6a5f\u7387\u4e0a\u7684\u4e00\u500b\u4e2d\u5b50\u5176\u5be6\u662f\u81f3\u95dc\u91cd\u8981\u7684\uff0c\u5982\u679c\u4f60\u5e73\u5747\u8b93 1.01 \u500b\u4e2d\u5b50\u53bb\u63a5\u8457\u57f7\u884c\u6838\u5206\u88c2\uff0c\u5c31\u6703\u8b93\u6574\u500b\u9023\u9396\u53cd\u61c9\u5feb\u5230\u4f86\u4e0d\u53ca\u963b\u6b62\uff0c\u4e26\u9020\u6210\u6eab\u5ea6\u5feb\u901f\u63d0\u5347\uff0c\u8259\u5167\u58d3\u529b\u904e\u9ad8\u800c\u7206\u70b8\uff0c\u9019\u6642\u5c31\u9700\u8981\u4e00\u4e9b\u6a5f\u5236\u4f86\u964d\u4f4e\u4e2d\u5b50\u53bb\u64ca\u4e2d\u923e\u2014235\u7684\u6a5f\u7387\uff0c\u4f8b\u5982\u628a\u4e2d\u5b50\u7684\u80fd\u91cf\u63d0\u9ad8\uff0c\u8b93\u4ed6\u5feb\u5230\u5f88\u96e3\u649e\u5230\u923e\u2014235\u3002
\u6838\u5206\u88c2\u9084\u6709\u4ec0\u9ebc\u554f\u984c\u9700\u8981\u89e3\u6c7a\uff1f\u7576\u923e\u2014235\u88ab\u5206\u88c2\u6642\uff0c\u53ef\u80fd\u6703\u7522\u751f\u4e0d\u540c\u7684\u5c0f\u539f\u5b50\uff0c\u4f8b\u5982\u939d\uff0c\u96d6\u7136\u7522\u751f\u7684\u5c0f\u539f\u5b50\u7684\u52d5\u80fd\u53ef\u4ee5\u5feb\u901f\u88ab\u8f49\u6210\u71b1\u80fd\uff08\u6469\u64e6\u529b\uff09\uff0c\u4f46\u662f\u9019\u4e9b\u5c0f\u539f\u5b50\u672c\u8eab\u53ef\u80fd\u662f\u4e0d\u7a69\u5b9a\u7684\uff0c\u4e26\u4e14\u6703\u96a8\u8457\u6642\u9593\u6162\u6162\u91cb\u653e\u9019\u4e9b\u80fd\u91cf\uff0c\u4f8b\u5982\u96fb\u5b50\u88ab\u91cb\u653e\uff0c\u9020\u6210\u9ad8\u80fd\u96fb\u78c1\u6ce2\u7684\u5916\u6d29\u3002\u6240\u4ee5\u7576\u4e00\u500b\u6838\u5206\u88c2\u53cd\u61c9\u7210\u88ab\u4e2d\u65b7\u5f8c\u7684\u4e00\u5c0f\u6642\uff0c\u4ed6\u4ecd\u6703\u6301\u7e8c\u91cb\u653e\u7d04 1% \u7684\u71b1\u80fd\uff0c\u770b\u8d77\u4f86\u597d\u50cf\u5f88\u5c0f\uff0c\u4f46\u9019 1% \u7684\u71b1\u91cf\u5c31\u662f\u9020\u6210\u4e09\u54e9\u5cf6\u548c\u798f\u5cf6\u96fb\u5ee0\u4e2d\u53cd\u61c9\u7210\u88ab\u7194\u6bc0\u7684\u539f\u56e0\u3002\u5c31\u7b97\u904e\u4e86\u5e7e\u5929\uff0c\u923e\u2014235\u88ab\u5206\u88c2\u5f8c\u7684\u7522\u7269\uff0c\u6839\u64da\u4e0d\u540c\u7684\u539f\u5b50\u53ef\u80fd\u6703\u6301\u7e8c\u91cb\u653e\u9019\u7a2e\u80fd\u91cf\u81f3\u6578\u767e\u842c\u5e74\u5f8c\uff0c\u8209\u4f8b\u4f86\u8aaa\u939d\u5e73\u5747\u6bcf\u4e09\u5341\u842c\u5e74\uff08\u534a\u9031\u671f\uff09\u6703\u91cb\u653e\u51fa\u5169\u500b\u9ad8\u80fd\u96fb\u5b50\uff0c\u800c\u4eba\u9ad4\u82e5\u5438\u6536\u4e86\u9019\u4e9b\u80fd\u91cf\uff0c\u5c31\u6703\u5f71\u97ff\u9020\u6210\u8eab\u9ad4\u4e0a\u7684\u5371\u5bb3\uff0c\u6240\u4ee5\u6211\u5011\u9700\u8981\u500b\u65b9\u6cd5\u4f86\u5b58\u653e\u9019\u4e9b\u7269\u8cea\u81f3\u767e\u842c\u5e74\u3002
\u6700\u5f8c\u6211\u5011\u4f86\u770b\u770b\u6838\u5206\u88c2\u7684\u539f\u6599\u72c0\u6cc1\u3002\u901a\u5e38\u9069\u5408\u505a\u6838\u5206\u88c2\u7684\u539f\u5b50\u5c31\u662f\u90a3\u4e9b\u6700\u91cd\u7684\u539f\u5b50\uff0c\u4f8b\u5982\u923e\u3002\u800c\u923e\u2014235\u6703\u88ab\u9019\u9ebc\u5ee3\u6cdb\u5730\u61c9\u7528\u5c31\u662f\u56e0\u70ba\u4ed6\u53ea\u9700\u8981\u4e00\u500b\u6162\u4e2d\u5b50\u53bb\u649e\u64ca\u5c31\u53ef\u4ee5\u4fc3\u767c\u6838\u5206\u88c2\uff0c\u53e6\u5916\u4e00\u500b\u540c\u4f4d\u7d20\u923e\u2014238\u5c31\u9700\u8981\u5169\u500b\u4e2d\u5b50\u968e\u6bb5\u5f0f\u7684\u649e\u64ca\u624d\u80fd\u5b8c\u6210\u6838\u5206\u88c2\uff1a\u7b2c\u4e00\u6b21\u662f\u628a\u923e\u2014238\u8f49\u6210\u923e\u2014239\u7b2c\u4e8c\u6b21\u624d\u662f\u4fc3\u767c\u6838\u5206\u88c2\uff0c\u9019\u7a31\u70ba\u6ecb\u751f\u53cd\u61c9\uff08breeding reaction\uff09\u3002\u6240\u4ee5\u5728\u5206\u6790\u539f\u6599\u6642\uff0c\u5c31\u9700\u8981\u8003\u616e\u9019\u5169\u7a2e\u5143\u7d20\u3002\u7d04\u6709\u4e00\u5343\u842c\u9813\u7684 \u88ab\u767c\u73fe\u4e14\u53ef\u88ab\u6316\u6398 \u923e\uff08\u5be6\u969b\u542b\u91cf\u53ef\u80fd\u542b\u6709\u7d04 1000 \u500d\u4ee5\u4e0a\uff09 \uff0c\u4f46\u662f\u923e\u2014235\u53ea\u4f54\u5176\u4e2d\u7684 1%\uff0c\u6240\u4ee5\u6211\u5011\u53ef\u4ee5\u5b8c\u5168\u900f\u904e\u923e\u2014235\u7684\u6838\u5206\u88c2\u6eff\u8db3\u4eba\u985e\u6240\u9700\u7d04\u4e00\u767e\u5e74\uff0c\u9664\u6b64\u4e4b\u5916\u923e\u4e5f\u53ef\u4ee5\u5f9e\u6d77\u6d0b\u4e2d\u8403\u53d6\u51fa\u4f86\uff0c\u82e5\u5b8c\u5168\u53d6\u7528\u5c07\u53ef\u6eff\u8db3\u4e00\u842c\u5e74\u7684\u923e\u2014235\u7684\u6838\u5206\u88c2\u3002\u5982\u679c\u4f7f\u7528\u7684\u662f\u923e\u2014238\uff0c\u5c31\u6703\u662f\u525b\u525b\u6578\u91cf\u7684\u4e00\u767e\u500d\uff0c\u56e0\u70ba\u923e\u2014238\u4f54\u6bd4\u7d04\u662f\u923e\u2014235\u7684\u4e00\u767e\u500d\u3002\u7531\u65bc\u923e\u2014235\u64c1\u6709\u5f88\u9ad8\u7684\u6bd4\u80fd\uff0c\u5176\u7522\u80fd\u7684\u6210\u672c\u7d04\u662f\u5168\u7403\u7522\u80fd\u5e73\u5747\u7684\u6210\u672c\u7684 10% \u800c\u5df2\u3002\u7576\u900f\u904e\u6d77\u6d0b\u8403\u53d6\u923e\u7684\u6210\u672c\uff08\u76ee\u524d\u4ecd\u662f\u958b\u653e\u7814\u7a76\uff09\u5c07\u6703\u662f\u5f9e\u9678\u5730\u8403\u53d6\u7684\u4e09\u500d\uff0c\u5373\u4f7f\u5982\u6b64\uff0c\u5176\u6210\u672c\u4e5f\u53ea\u6703\u4f86\u5230 20%\u3002\u7e3d\u7684\u4f86\u8aaa\uff0c\u6838\u5206\u88c2\u9084\u662f\u80fd\u6eff\u8db3\u6211\u5011\u4eba\u985e\u5c0d\u80fd\u91cf\u7684\u9700\u6c42\uff0c\u5c24\u5176\u662f\u5982\u679c\u6ecb\u751f\u53cd\u61c9\u7684\u7814\u7a76\u8da8\u65bc\u6210\u719f\uff0c\u5c0d\u65bc\u923e\u7684\u8981\u6c42\u5c31\u6703\u964d\u4f4e\u3002
"},{"location":"feedback/future-of-fusion-energy/energy/#\u5730\u71b1","title":"\u5730\u71b1","text":"\u5730\u71b1\u7684\u5f62\u6210\u662f\u7531\u65bc\u91cd\u529b\u548c\u5927\u539f\u5b50\u7684\u653e\u5c04\u8207\u8870\u8b8a\uff0c\u91cd\u529b\u8b93\u5927\u91cf\u7684\u7269\u8cea\u76f8\u4e92\u78b0\u649e\u6469\u64e6\u5f62\u6210\u71b1\uff0c\u800c\u5927\u539f\u5b50\u5247\u4f86\u81ea\u65bc\u4e45\u9060\u4ee5\u524d\u5b87\u5b99\u4e2d\u7684\u8d85\u65b0\u661f\u3002\u82e5\u8981\u4f7f\u7528\u5730\u71b1\uff0c\u6211\u5011\u901a\u5e38\u6703\u6316\u500b\u5e7e\u516c\u91cc\u6df1\u7684\u4e95\u4e26\u900f\u904e\u5176\u4e2d\u7684\u71b1\u80fd\uff0840 \u516c\u91cc\u6df1\u7684\u5730\u8868\u7d04\u6709 600 \u5ea6\uff09\u4f86\u904b\u8f49\u84b8\u6c7d\u6e26\u8f2a\uff0c\u7136\u800c\u5730\u7403\u7684\u71b1\u50b3\u5c0e\u5be6\u5728\u592a\u6162\uff08\u7d04\u6bcf\u5e73\u65b9\u516c\u5c3a 0.03 \u74e6\u7279\uff09\uff0c\u7576\u6211\u5011\u628a\u4e95\u908a\u7684\u5730\u71b1\u90fd\u62ff\u53bb\u767c\u96fb\u5f8c\uff0c\u9010\u6f38\u51b7\u537b\u7684\u5ca9\u77f3\u8981\u518d\u6b21\u9054\u5230\u4e00\u5b9a\u7684\u71b1\u5ea6\u6642\u5c31\u8981\u7d93\u904e\u5f88\u9577\u7684\u6642\u9593\u3002
\u6839\u64da\u4f30\u8a08\uff0c\u5730\u71b1\u8db3\u5920\u652f\u6301\u6211\u5011\u4eba\u985e\u7684\u8017\u80fd\uff0c\u4e14\u5c07\u6301\u7e8c\u6563\u767c\u80fd\u91cf\u81f3\u4e00\u767e\u5104\u5e74\u5f8c\uff0c\u4f46\u662f\u4e0d\u53ea\u662f\u50b3\u71b1\u901f\u5ea6\u6162\uff0c\u5730\u7403\u6709\u4e03\u6210\u7684\u9762\u7a4d\u90fd\u88ab\u6d77\u6d0b\u8986\u84cb\uff0c\u9019\u4e5f\u5c07\u6210\u70ba\u5730\u71b1\u767c\u96fb\u7684\u4e00\u5927\u56f0\u5883\u3002\u5118\u7ba1\u6709\u4e9b\u5730\u65b9\uff08\u4f8b\u5982\u51b0\u5cf6\uff09\u7684\u5730\u71b1\u5c31\u5728\u5730\u8868\u9644\u8fd1\u5f88\u9069\u5408\u767c\u96fb\uff0c\u4f46\u662f\u82e5\u8981\u628a\u9019\u898f\u6a21\u9069\u7528\u5230\u5168\u4eba\u985e\u662f\u975e\u5e38\u56f0\u96e3\u7684\u3002
"},{"location":"feedback/future-of-fusion-energy/energy/#\u592a\u967d\u80fd","title":"\u592a\u967d\u80fd","text":"\u592a\u967d\u80fd\u900f\u904e\u592a\u967d\u5728\u8868\u9762\u57f7\u884c\u7684\u6838\u878d\u5408\u767c\u71b1\u4e26\u91cb\u653e\u80fd\u91cf\uff0c\u9019\u88e1\u7684\u6838\u878d\u5408\u7684\u4e3b\u8981\u539f\u6599\u4e0d\u662f\u4f7f\u7528\u6c2b\u7684\u540c\u4f4d\u7d20\uff0c\u800c\u662f\u4f7f\u7528\u6c2b\u672c\u8eab\u3002\u96d6\u7136\u8981\u8b93\u5169\u500b\u6c2b\u76f8\u649e\u5f62\u6210\u6838\u878d\u5408\u7684\u6a5f\u7387\u53ea\u6709 \\(10^{30}\\) \u5206\u4e4b\u4e00\uff0c\u4f46\u5982\u679c\u592a\u967d\u64c1\u6709\u8d85\u591a\u4e14\u8d85\u5bc6\u96c6\u7684\u6c2b\u6c23\u6642\uff0c\u9019\u7a2e\u6838\u878d\u5408\u5c31\u6709\u53ef\u80fd\u767c\u751f\uff0c\u800c\u6838\u878d\u5408\u7522\u751f\u7684\u52d5\u80fd\u6700\u7d42\u5c31\u6210\u70ba\u91cb\u653e\u81f3\u5b87\u5b99\u4e2d\u7684\u80fd\u91cf\u3002
\u70ba\u4ec0\u9ebc\u6c2b\u2014\u6c2b\u6838\u878d\u5408\u7684\u6a5f\u7387\u9019\u9ebc\u4f4e\u5118\u7ba1\u592a\u967d\u7684\u71b1\u5ea6\u4e0d\u8db3\u4ee5\u7a81\u7834\u5eab\u502b\u58c1\u58d8\uff08\u5169\u500b\u8cea\u5b50\u76f8\u65a5\u7684\u529b\u91cf\uff09\uff0c\u5169\u500b\u8cea\u5b50\u76f8\u649e\u6642\u4ecd\u53ef\u80fd\u56e0\u70ba\u91cf\u5b50\u7a7f\u96a7\u6548\u61c9\uff08\u6a5f\u7387\u6027\u7684\u63d0\u5347\u91cf\u5b50\u7684\u52d5\u80fd\uff0c\u7d04 \\(10^{20}\\) \u5206\u4e4b\u4e00\uff09\u878d\u5408\u6210\u6c26\u20142\uff08\u5169\u500b\u8cea\u5b50\u6c92\u6709\u4e2d\u5b50\uff0c\u800c\u975e\u5982\u4e00\u822c\u578b\u614b\u7684\u6c26\u20134\uff09\uff0c\u9019\u6642\u53c8\u8981\u900f\u904e\u5f31\u4f5c\u7528\u529b\u628a\u8cea\u5b50\u8f49\u5473\u6210\u4e2d\u5b50\uff0c\u9019\u6642\u5c31\u5f62\u6210\u6c18\uff0c\u4e5f\u5c31\u5b8c\u6210\u521d\u6b65\u7684\u6838\u878d\u5408\uff08\u5f8c\u7e8c\u9084\u6709\u6c18\u2014\u6c2b\u7684\u6838\u878d\u5408\u4e26\u751f\u6210\u6c26\u20143\uff0c\u548c\u6c26\u20143\u9593\u7684\u6838\u878d\u5408\u6700\u7d42\u8f49\u8b8a\u6210\u6c26\uff09\u3002
\u503c\u5f97\u6ce8\u610f\u7684\u662f\uff0c\u5728\u91cf\u5b50\u7a7f\u96a7\u6548\u61c9\u88ab\u767c\u73fe\u4e4b\u524d\uff0c\u592a\u967d\u7a76\u7adf\u5982\u4f55\u9032\u884c\u6838\u878d\u5408\u7684\u662f\u5728\u5929\u6587\u5b78\u4e0a\u4e00\u500b\u5f88\u5927\u7684\u8b0e\u5718\u3002
\u5730\u7403\u6bcf\u5e74\u5f9e\u592a\u967d\u4e2d\u7372\u5f97\u7684\u80fd\u91cf\u7d04\u70ba\u4eba\u985e\u6240\u9700\u7684 5000 \u500d\uff0c\u4e5f\u5c31\u76f8\u7576\u65bc\u6bcf\u5e73\u65b9\u516c\u5c3a 200 \u74e6\u7279\uff0c\u9019\u5176\u5be6\u6eff\u5408\u7406\u7684\uff0c\u56e0\u70ba\u4e00\u500b\u4e00\u767e\u74e6\u7684\u71c8\u6ce1\u80fd\u5982\u540c\u592a\u967d\u822c\u7167\u4eae\u7d04\u4e00\u5e73\u65b9\u516c\u5c3a\u7684\u5730\u65b9\u3002\u63db\u53e5\u8a71\u8aaa\uff0c\u6211\u5011\u53ea\u9700\u5f9e\u4e2d\u4f7f\u7528\u4e0d\u5230\u767e\u5206\u4e4b\u4e00\u7684\u80fd\u91cf\u5c31\u53ef\u4ee5\u6eff\u8db3\u4eba\u985e\u751f\u6d3b\u6240\u9700\uff0c\u66f4\u91cd\u8981\u7684\u662f\u6211\u5011\u53ef\u4ee5\u9078\u64c7\u8a72\u4f7f\u7528\u54ea\u500b\u5730\u65b9\u7684\u592a\u967d\u80fd\uff0c\u9019\u6a23\u5c31\u4e0d\u6703\u8b93\u90a3\u4e9b\u672c\u4f86\u5c31\u5f88\u5c11\u967d\u5149\u7684\u5730\u65b9\uff0c\u8b8a\u5f97\u66f4\u5c11\u967d\u5149\u3002\u4f46\u662f\u592a\u967d\u80fd\u4e5f\u9700\u8981\u514b\u670d\u4e00\u4e9b\u56f0\u96e3\uff0c\u592a\u967d\u80fd\u7684\u6bcf\u55ae\u4f4d\u80fd\u91cf\u6240\u9700\u7684\u91d1\u9322\u4ecd\u662f\u76ee\u524d\u6700\u8cb4\u7684\u80fd\u6e90\u4e4b\u4e00\uff1b\u592a\u967d\u80fd\u662f\u6703\u4e2d\u65b7\u7684\uff0c\u6bcf\u5929\u7684\u665a\u4e0a\uff0c\u6bcf\u5e74\u7684\u51ac\u5929\u90fd\u6703\u964d\u4f4e\u592a\u967d\u80fd\u7684\u7e3d\u91cf\uff1b\u592a\u967d\u80fd\u7684\u78b3\u6392\u653e\u91cf\u96d6\u662f\u77f3\u6cb9\u767c\u96fb\u7684\u5341\u5206\u4e4b\u4e00\u500d\u4f46\u4e5f\u662f\u6838\u5206\u88c2\u7684\u4e09\u500d\u3001\u98a8\u529b\u767c\u96fb\u7684\u56db\u500d\uff0c\u5118\u7ba1\u5176\u4e2d\u7684\u78b3\u6392\u653e\u5927\u90e8\u5206\u90fd\u4f86\u81ea\u65bc\u751f\u7522\u904e\u7a0b\uff0c\u800c\u975e\u767c\u96fb\u672c\u8eab\u3002
"},{"location":"feedback/future-of-fusion-energy/energy/#\u6f6e\u6c50","title":"\u6f6e\u6c50","text":"\u6f6e\u6c50\u4ee3\u8868\u7684\u662f\u5730\u7403\u81ea\u8f49\u548c\u6708\u7403\u91cd\u529b\u9593\u7684\u727d\u5f15\u9020\u6210\u7684\u80fd\u91cf\u91cb\u653e\uff0c\u8981\u66b8\u89e3\u9019\u4e2d\u9593\u7684\u80fd\u91cf\u8f49\u63db\u6a5f\u5236\uff0c\u5fc5\u9808\u8981\u5148\u66b8\u89e3\u6708\u7403\u91cd\u529b\u5c0d\u5730\u7403\u9020\u6210\u7684\u5f71\u97ff\u3002\u6708\u7403\u6703\u900f\u904e\u91cd\u529b\u628a\u9760\u8fd1\u5b83\u7684\u90a3\u4e00\u5074\u6d77\u6d0b\u62c9\u9ad8\uff0c\u800c\u53e6\u5916\u4e00\u5074\u53c8\u6703\u56e0\u70ba\u9060\u96e2\u6708\u7403\uff0c\u6240\u4ee5\u91cd\u529b\u9020\u6210\u7684\u62c9\u529b\u6703\u88ab\u6e1b\u5c11\u800c\u5347\u9ad8\u6d77\u5e73\u9762\u3002\u6700\u7d42\u5730\u7403\u7684\u6d77\u6d0b\u578b\u614b\u5c31\u6703\u8b8a\u6210\u50cf\u662f\u6a62\u5713\u5f62\u7684\u6a23\u5b50\u3002\u4f46\u662f\u6708\u7403\u516c\u8f49\u7684\u901f\u5ea6\u7d04\u662f 30 \u5929\uff0c\u800c\u5730\u7403\u81ea\u8f49\u537b\u662f\u5b83\u7684\u4e09\u5341\u500d\uff0c\u6240\u4ee5\u9019\u500b\u6a62\u5713\u5f62\u7684\u6d77\u6d0b\u6703\u56e0\u70ba\u5730\u7403\u81ea\u8f49\u548c\u5176\u9020\u6210\u7684\u6469\u64e6\u529b\u800c\u7a0d\u5fae\u8d70\u5f97\u6bd4\u6708\u7403\u5feb\u4e00\u4e9b\u3002\u9032\u4e00\u6b65\u7684\u8aaa\uff0c\u5730\u7403\u81ea\u8f49\u7684\u901f\u5ea6\u6703\u88ab\u6708\u7403\u62c9\u6162\uff0c\u800c\u6708\u7403\u516c\u8f49\u7684\u901f\u5ea6\u5247\u53cd\u904e\u4f86\u88ab\u62c9\u9ad8\u4e86\uff0c\u9019\u4e5f\u9020\u6210\u6708\u7403\u516c\u8f49\u7684\u8ddd\u96e2\u8d8a\u4f86\u8d8a\u9ad8\uff08\u5728\u76f8\u540c\u7684\u9031\u671f\u4e0b\uff0c\u901f\u5ea6\u8d8a\u5feb\u4ee3\u8868\u5176\u904b\u52d5\u7684\u8def\u5f91\u8d8a\u9577\uff0c\u6240\u4ee5\u516c\u8f49\u7684\u8ddd\u96e2\u4e5f\u8d8a\u9060\uff09\u3002\u7136\u800c\u9019\u7a2e\u80fd\u91cf\u6d88\u8017\u4f9d\u7167\u76ee\u524d\u7684\u79d1\u6280\u6211\u5011\u662f\u6c92\u8fa6\u6cd5\u8f49\u5316\u7684\uff0c\u76f8\u5c0d\u7684\uff0c\u6211\u5011\u80fd\u8655\u7406\u7684\u5c31\u53ea\u6709\u6d77\u6d0b\u5728\u88ab\u62c9\u5f80\u524d\u6642\u6240\u6d88\u8017\u7684\u6469\u64e6\u529b\u3002
\u9019\u500b\u6d88\u8017\u7684\u80fd\u91cf\u6709\u591a\u5c11\uff1f\u5728 70 \u5e74\u4ee3\u7684\u963f\u6ce2\u7f85\u8a08\u756b\u4e2d\uff0c\u592a\u7a7a\u4eba\u5df2\u6210\u529f\u5728\u6708\u7403\u4e0a\u653e\u7f6e\u93e1\u5b50\uff0c\u900f\u904e\u9019\u500b\u93e1\u5b50\uff0c\u6211\u5011\u53ef\u4ee5\u7528\u96f7\u5c04\u53bb\u6253\u5230\u9019\u93e1\u5b50\u7136\u5f8c\u8a08\u7b97\u5176\u4f86\u56de\u7684\u6642\u9593\u5dee\uff08\u5229\u7528\u7cbe\u6e96\u7684\u539f\u5b50\u9418\uff09\uff0c\u4f9d\u6b64\u5c31\u53ef\u4ee5\u8a08\u7b97\u51fa\u6708\u7403\u6b63\u4ee5\u6bcf\u5e74\u56db\u516c\u5206\u7684\u8ddd\u96e2\u9060\u96e2\u5730\u7403\uff0c\u7136\u5f8c\u5730\u7403\u4e5f\u6b63\u4ee5\u6bcf\u4e00\u767e\u5e74\u589e\u52a0\u5169\u6beb\u79d2\u7684\u65e5\u7167\u6642\u9593\u5728\u964d\u4f4e\u81ea\u8f49\u901f\u5ea6\uff0c\u7136\u5f8c\u6839\u64da\u89d2\u52d5\u91cf\u5b88\u6046\uff0c\u6211\u5011\u53ef\u4ee5\u77e5\u9053\u9019\u500b\u80fd\u91cf\u5dee\u5c31\u662f\u76f8\u5c0d\u61c9\u7684\u80fd\u91cf\u8017\u640d\uff0c\u5927\u7d04\u662f\u4eba\u985e\u4e00\u5e74\u6240\u9700\u80fd\u91cf\u7684 10%\u3002\u9019\u7a2e\u80fd\u91cf\u901a\u5e38\u88ab\u8f49\u5316\u6210\u6d77\u6d0b\u7684\u6c34\u6d41\u548c\u6f29\u6e26\uff0c\u6240\u4ee5\u53d6\u5f97\u9019\u80fd\u91cf\u7684\u65b9\u5f0f\u57fa\u672c\u4e0a\u548c\u6c34\u529b\u767c\u96fb\u5f88\u50cf\uff0c\u6211\u5011\u53ef\u4ee5\u5efa\u6c34\u58e9\u6216\u8005\u5ddd\u6d41\u5f0f\u767c\u96fb\u6a5f\u4f86\u6355\u6349\u9019\u4e9b\u80fd\u91cf\u3002
\u96d6\u7136\u73fe\u5728\u4e26\u6c92\u6709\u5f88\u591a\u6f6e\u6c50\u76f8\u95dc\u7684\u767c\u96fb\u6a5f\uff0c\u4f46\u9019\u65b9\u6cd5\u537b\u6709\u4e00\u4e9b\u512a\u52e2\u3002\u7b2c\u4e00\uff0c\u56e0\u70ba\u958b\u767c\u7684\u5c11\u6240\u4ee5\u6709\u5f88\u591a\u7a7a\u7f6e\u7684\u7a7a\u9593\u7b49\u5f85\u958b\u767c\uff1b\u7b2c\u4e8c\uff0c\u56e0\u70ba\u6c34\u529b\u767c\u96fb\u76f8\u95dc\u7684\u6280\u8853\u5f88\u6210\u719f\uff0c\u6240\u4ee5\u4e26\u4e0d\u6703\u9020\u6210\u7814\u767c\u4e0a\u7684\u8017\u6642\u548c\u8017\u6750\uff1b\u7b2c\u4e09\uff0c\u56e0\u70ba\u653e\u65bc\u6c34\u9762\u4e0b\uff0c\u6240\u4ee5\u4e0d\u6703\u5e72\u64fe\u5230\u73fe\u6709\u4eba\u985e\u7684\u5c45\u4f4f\u74b0\u5883\uff0c\u5118\u7ba1\u76f8\u95dc\u7684\u74b0\u8a55\u4ecd\u9700\u8981\u9032\u884c\uff1b\u6700\u5f8c\uff0c\u4e0d\u50cf\u592a\u967d\u80fd\u548c\u98a8\u529b\u767c\u96fb\u90a3\u6a23\u662f\u9593\u6b47\u6027\u7684\uff0c\u5176\u53ef\u4ee5\u7a69\u5b9a\u4e14\u9577\u671f\u7684\u63d0\u4f9b\u80fd\u91cf\u3002
"},{"location":"feedback/future-of-fusion-energy/energy/#\u98a8\u529b","title":"\u98a8\u529b","text":"\u98a8\u7684\u4f86\u6e90\u5728\u65bc\u6eab\u5dee\uff0c\u800c\u6eab\u5ea6\u7522\u751f\u65bc\u592a\u967d\u80fd\uff0c\u6240\u4ee5\u98a8\u529b\u53ef\u4ee5\u8aaa\u662f\u592a\u967d\u80fd\u7684\u7522\u7269\uff0c\u9019\u6642\u5982\u679c\u6211\u5011\u8981\u7b97\u5730\u7403\u4e0a\u98a8\u529b\u7684\u7e3d\u80fd\u6e90\u91cf\uff0c\u5c31\u9700\u8981\u7b97\u592a\u967d\u8f49\u6210\u98a8\u529b\u6642\u6240\u9700\u7684\u8017\u640d\u3002\u71b1\u529b\u5b78\u4e2d\uff0c\u6709\u500b\u6709\u8da3\u7684\u516c\u5f0f\uff1a\\(\\eta \\leq 1 - \\frac{T_{C}}{T_{H}}\\)\uff0c\u5176\u4e2d \\(\\eta\\) \u5c31\u4ee3\u8868\u71b1\u80fd\u8f49\u63db\u6210\u52d5\u80fd\u7684\u6548\u7387\uff0c\u800c \\(T_{C}\\) \u662f\u76f8\u5c0d\u4f4e\u6eab\u7684\u7d55\u5c0d\u6eab\u5ea6\uff0c \\(T_{H}\\) \u662f\u76f8\u5c0d\u9ad8\u6eab\u7684\u7d55\u5c0d\u6eab\u5ea6\u3002\u4ee5\u73fe\u884c\u5c08\u696d\u7684\u84b8\u6c7d\u767c\u96fb\u5ee0\u4f86\u8aaa\u76f8\u5c0d\u9ad8\u6eab\u7684\u6eab\u5ea6\u7d04\u70ba \\(400^\\circ C\\)\uff08\u7d04 \\(670^\\circ K\\)\uff09\uff0c\u5176\u548c\u5ba4\u6eab\uff08\u7d04 \\(300^\\circ K\\)\uff09\u7684\u6eab\u5dee\u53ef\u4ee5\u8b93\u4ed6\u7dad\u6301\u5728 40% \u7684\u7522\u80fd\u6548\u7387\u3002\u5f88\u986f\u7136\u7684\uff0c\u5730\u7403\u4e26\u4e0d\u662f\u70ba\u4e86\u6709\u6548\u7387\u5730\u628a\u71b1\u80fd\u8f49\u63db\u6210\u52d5\u80fd\u800c\u88ab\u8a2d\u8a08\u7684\uff0c\u5357\u5317\u6975\u548c\u8d64\u9053\u7684\u6eab\u5dee\u53ea\u6709\u7d04 \\(60^\\circ C\\)\uff0c\u4e5f\u5c31\u662f\u8f49\u63db\u6548\u7387\u6700\u9ad8\u53ea\u6709 5%\uff0c\u8003\u616e\u5230\u79d1\u6c0f\u529b\u6703\u63d0\u4f9b\u98a8\u6771\u897f\u5411\u7684\u52d5\u80fd\uff0c\u6240\u4ee5\u5730\u7403\u7684\u98a8\u4e26\u4e0d\u662f\u4e00\u8def\u5f9e\u5169\u6975\u79fb\u52d5\u5230\u8d64\u9053\uff0c\u800c\u662f\u88ab\u5207\u5206\u6210\u4e09\u6bb5\u7684\u74b0\u6d41\uff0c\u5176\u5be6\u969b\u7684\u6548\u7387\u53ef\u80fd\u53ea\u6709 1%\uff08\u6839\u64da\u76f8\u95dc\u7684\u6c23\u5019\u79d1\u5b78\u8ad6\u6587\uff09\u3002
\u5982\u540c\u6211\u5011\u5728\u592a\u967d\u80fd\u4e2d\u63d0\u5230\u7684\uff0c\u5373\u4f7f\u53ea\u6709\u592a\u967d\u80fd\u7684 1% \u4e5f\u8db3\u4ee5\u652f\u6490\u4eba\u985e\u6240\u9700\u80fd\u91cf\u7684 50 \u500d\uff0c\u554f\u984c\u662f\u5730\u7403\u7684\u98a8\u529b\u4e0d\u50cf\u592a\u967d\u80fd\u9019\u9ebc\u96c6\u4e2d\uff0c\u98a8\u529b\u662f\u6563\u843d\u5728\u5f9e\u5730\u9762\u5230\u5c0d\u6d41\u5c64\u4e4b\u9593\u7684\u5341\u516c\u91cc\u9593\uff0c\u9019\u8b93\u98a8\u529b\u80fd\u63d0\u4f9b\u7684\u80fd\u91cf\u53c8\u66f4\u5c11\u4e86\u3002\u503c\u5f97\u6176\u5e78\u7684\u662f\uff0c\u98a8\u529b\u5f88\u597d\u88ab\u6536\u96c6\u4e14\u4eba\u985e\u5728\u6578\u5343\u5e74\u524d\u5c31\u5df2\u7d93\u958b\u59cb\u6536\u96c6\u4e86\uff0c\u5118\u7ba1\u5982\u6b64\uff0c\u98a8\u529b\u767c\u96fb\u6a5f\uff08\u9ad8\u7d04 100 \u516c\u5c3a\uff0c\u4e5f\u5c31\u662f 10 \u516c\u91cc\u5916\u4ecd\u80fd\u88ab\u6e05\u695a\u770b\u898b\uff09\u5be6\u52d9\u4e0a\u4ecd\u53d7\u9650\u65bc\u5148\u5929\u7684\u689d\u4ef6\u3002\u8209\u4f8b\u4f86\u8aaa\uff0c\u4e00\u53f0\u98a8\u529b\u767c\u96fb\u6a5f\u80fd\u7522\u51fa\u7d04 \\(1MW\\)\uff08\u96d6\u7136\u5728\u6b64\u63d0\u5230\u7684\u6548\u7387\u662f \\(2.75MW\\)\uff0c\u4f46\u8003\u616e\u820a\u7684\u6a5f\u578b\u800c\u5e73\u5747\u5176\u6548\u80fd\u7684\u8a71\uff09\u7684\u80fd\u91cf\uff0c\u4ee5\u7f8e\u570b\u4e00\u5e74\u6240\u9700\u7684 \\(3.1TW\\)\uff0c\u5982\u679c\u70ba\u4e86\u8981\u7522\u751f\u9019\u500b\u80fd\u91cf\u800c\u5e73\u5747\u6563\u843d\u5728\u7f8e\u570b\u5404\u8655\u7684\u8a71\uff0c\u4f60\u5728\u4efb\u4f55\u4e00\u500b\u5730\u65b9\u5c31\u80fd\u770b\u5230\u6709\u7d04 30 \u500b\u98a8\u529b\u767c\u96fb\u6a5f\u5728\u9644\u8fd1\uff0c\u5982\u679c\u96c6\u4e2d\u5728\u540c\u4e00\u8655\u7684\u8a71\u5c31\u9700\u8981\u4f54\u7528\u7f8e\u570b\u7d04\u5341\u5206\u4e4b\u4e00\u7684\u9762\u7a4d\u3002
\u98a8\u529b\u548c\u592a\u967d\u80fd\u4e00\u6a23\u662f\u65b7\u65b7\u7e8c\u7e8c\u7684\uff0c\u4e0d\u904e\u503c\u5f97\u6ce8\u610f\u7684\u662f\uff0c\u98a8\u5728\u51ac\u5929\u6703\u6bd4\u590f\u5929\u66f4\u5f37\uff0c\u9019\u662f\u56e0\u70ba\u8d64\u9053\u5728\u51ac\u5929\u4ecd\u80fd\u4fdd\u6301\u76f8\u4f3c\u7684\u6eab\u5ea6\uff0c\u4f46\u9760\u8fd1\u5169\u6975\u7684\u5730\u65b9\u537b\u6703\u986f\u8457\u7684\u4e0b\u964d\uff0c\u9019\u5c0e\u81f4\u6eab\u5dee\u53ef\u4ee5\u9032\u4e00\u6b65\u7684\u63d0\u5347\u3002\u9019\u548c\u592a\u967d\u80fd\u6b63\u597d\u76f8\u53cd\uff0c\u5c31\u53ef\u4ee5\u9054\u5230\u76f8\u4e92\u88dc\u8db3\u7684\u6548\u679c\uff0c\u4f46\u662f\u7e3d\u800c\u8a00\u4e4b\uff0c\u6211\u5011\u7121\u6cd5\u5b8c\u5168\u4f9d\u9760\u98a8\u529b\u767c\u96fb\u4f86\u6eff\u8db3\u6211\u5011\u4eba\u985e\u6240\u9700\u7684\u6240\u6709\u80fd\u6e90\u3002
"},{"location":"feedback/future-of-fusion-energy/energy/#\u751f\u8cea\u80fd","title":"\u751f\u8cea\u80fd","text":"\u690d\u7269\u6703\u5132\u5b58\u592a\u967d\u80fd\uff0c\u53ea\u662f\u6703\u7528\u91a3\u985e\uff08\\(CH_2O\\)\uff0c\u4f8b\u5982\u8461\u8404\u7cd6\u662f \\(C_6H_{12}O_6\\)\uff09\u7684\u65b9\u5f0f\u5132\u5b58\u3002\u9019\u4e4b\u4e2d\u7684\u6a5f\u5236\u7a31\u70ba\u5149\u5408\u4f5c\u7528\uff0c\u5229\u7528\u967d\u5149\u7684\u80fd\u91cf\u628a\u5f9e\u6839\u90e8\u5438\u6536\u7684\u6c34\u5206\uff08\\(H_2O\\)\uff0c\u6975\u5c11\u91cf\u7684\u6c34\u53ef\u4ee5\u900f\u904e\u8449\u5b50\u5438\u6536\uff09\u548c\u7a7a\u6c23\u4e2d\u7684\u4e8c\u6c27\u5316\u78b3\uff08\\(CO_2\\)\uff09\u6253\u6563\u6210\u70ba\u6c27\u6c23\uff08\\(O_2\\)\uff09\u548c\u91a3\u985e\u3002\u800c\u6240\u8b02\u7684\u751f\u8cea\u80fd\uff0c\u5c31\u662f\u5229\u7528\u7531\u592a\u6a23\u80fd\u8f49\u5316\u800c\u6210\u7684\u91a3\u985e\uff08\u6216\u5176\u4ed6\u7269\u8cea\uff0c\u4f8b\u5982\u7532\u9187\u3001\u77f3\u6cb9\uff09\u4f86\u767c\u80fd\u3002
\u690d\u7269\u7684\u5f62\u9ad4\u4e26\u975e\u4f9d\u9760\u5927\u5730\u800c\u751f\u5728\u5149\u5408\u4f5c\u7528\u4e2d\uff0c\u91a3\u985e\u7684\u6c27\u662f\u5f9e\u4e8c\u6c27\u5316\u78b3\u4f86\u7684\u800c\u4e0d\u662f\u6c34\uff0c\u6240\u4ee5\u5efa\u69cb\u51fa\u690d\u7269\u7684\u990a\u5206\uff08\u63db\u53e5\u8a71\u8aaa\uff0c\u78b3\u548c\u6c27\uff09\u5e7e\u4e4e\u90fd\u662f\u5f9e\u7a7a\u6c23\u4e2d\u4f86\u7684\uff0c\u6240\u4ee5\u6211\u5011\u5e38\u8a8d\u70ba\u690d\u7269\u4e4b\u6240\u4ee5\u9577\u9019\u9ebc\u9ad8\u5927\u662f\u4f9d\u9760\u5927\u5730\u800c\u751f\u6709\u9ede\u8a9e\u610f\u4e0a\u7684\u932f\u8aa4\u3002
\u8981\u5f15\u767c\u5149\u5408\u4f5c\u7528\uff0c\u9700\u8981\u592a\u967d\u5149\u4e2d\u7684 1% \u7684\u80fd\u91cf\uff0c\u554f\u984c\u662f\u7576\u9019\u7a2e\u80fd\u91cf\u518d\u8f49\u5316\u6210\u96fb\u80fd\uff08\u4f8b\u5982\u84b8\u6c23\u767c\u96fb\u6a5f\uff09\u6642\u9700\u8981\u518d\u8017\u8cbb\u81f3\u5c11\u4e00\u534a\u7684\u80fd\u91cf\uff08\u4e5f\u5c31\u662f\u592a\u967d\u5149\u4e2d\u7684 0.5%\uff09\uff0c\u9019\u6642\u8981\u63d0\u4f9b\u7d66\u6240\u6709\u4eba\u985e\u7684\u80fd\u91cf\u6642\u5c31\u9700\u8981 20% \u975e\u51b0\u9762\u7684\u9678\u5730\u3002\u4f46\u9019\u88e1\u4e26\u6c92\u6709\u8003\u616e\u5230\u690d\u7269\u7684\u7a2e\u690d\u3001\u6210\u9577\u3001\u6536\u5272\u3001\u904b\u9001\u6240\u8017\u8cbb\u7684\u80fd\u91cf\uff0c\u6240\u4ee5\u4fdd\u5b88\u4e00\u9ede\u4f30\u8a08\u53ea\u6703\u6709\u7d04 0.1% \u7684\u592a\u967d\u5149\u88ab\u4fdd\u7559\uff0c\u9019\u6642\u6211\u5011\u5c31\u9700\u8981\u6240\u6709\u5730\u9762\u4f86\u7a2e\u690d\u690d\u7269\u4e26\u4e14\u71c3\u71d2\u9019\u4e9b\u690d\u7269\u4ee5\u8f49\u63db\u6210\u80fd\u91cf\u3002
\u6211\u5011\u4e0d\u592a\u53ef\u80fd\u900f\u904e\u751f\u8cea\u80fd\u4f86\u6eff\u8db3\u4eba\u985e\u6240\u9700\u7684\u80fd\u91cf\uff0c\u9664\u975e\u672a\u4f86\u53ef\u4ee5\u5728\u6d77\u4e0a\u7a2e\u690d\u7269\uff08\u4e0d\u8003\u616e\u751f\u614b\u8b8a\u7570\u9020\u6210\u7684\u5f71\u97ff\uff09\uff0c\u4f46\u662f\u6beb\u7121\u7591\u554f\u7684\uff0c\u6211\u5011\u53ef\u4ee5\u5229\u7528\u4e00\u4e9b\u4eba\u985e\u6d3b\u52d5\u6240\u7522\u751f\u7684\u5ee2\u6599\uff08\u4f8b\u5982\u5eda\u9918\uff09\u4f86\u7522\u751f\u751f\u7269\u80fd\u91cf\uff0c\u4e26\u4f9d\u6b64\u4f86\u907f\u514d\u80fd\u91cf\u7684\u6d6a\u8cbb\u3002
"},{"location":"feedback/future-of-fusion-energy/energy/#\u5316\u77f3\u71c3\u6599","title":"\u5316\u77f3\u71c3\u6599","text":"\u5316\u77f3\u71c3\u6599\u662f\u900f\u904e\u524d\u8ff0\u7684\u751f\u8cea\u80fd\uff08\u4e3b\u8981\u662f\u6d77\u6d0b\u4e2d\u7684\u6d6e\u6e38\u751f\u7269\u800c\u975e\u9678\u5730\u690d\u7269\uff09\uff0c\u4ee5\u7de9\u6162\u7684\u65b9\u5f0f\u8f49\u5316\u800c\u6210\u3002\u4e00\u822c\u4f86\u8aaa\uff0c\u690d\u7269\u6b7b\u4ea1\u5f8c\u9700\u8981\u900f\u904e\u4e00\u4e9b\u5fae\u751f\u7269\u4f86\u5206\u89e3\u5b83\uff0c\u4f46\u9019\u4e9b\u904e\u7a0b\u662f\u9700\u8981\u5728\u6709\u6c27\u6c23\u7684\u74b0\u5883\u4e0b\u7684\uff0c\u5982\u679c\u6c92\u6709\u6c27\u6c23\uff08\u4f8b\u5982\u6d77\u6d0b\u5e95\u5c64\u548c\u6cbc\u6fa4\uff09\uff0c\u5c31\u9700\u8981\u4e00\u4e9b\u5b8c\u5168\u4e0d\u4e00\u6a23\u7684\u65b9\u5f0f\u4f86\u5206\u89e3\u9019\u4e9b\u690d\u7269\u3002\u8209\u4f8b\u4f86\u8aaa\uff0c\u7164\uff08coal\uff09\u5c31\u662f\u4e00\u7a2e\u5316\u77f3\u71c3\u6599\uff0c\u5b83\u5c31\u662f\u690d\u7269\u900f\u904e\u7de9\u6162\u5730\u53ad\u6c27\u53cd\u61c9\u8f49\u5316\u6210\u6ce5\u70ad\uff08peat\uff09\u5f8c\uff08\u9019\u6642\u7684\u80fd\u91cf\u5bc6\u5ea6\u548c\u4e00\u822c\u7684\u751f\u8cea\u80fd\u5dee\u4e0d\u591a\uff09\uff0c\u5728\u5730\u5e95\u6df1\u8655\u7d93\u904e\u5730\u8cea\u904b\u52d5\u7684\u9ad8\u58d3\u8f49\u5316\u6210\u8910\u7164\uff08lignite\uff09\u7136\u5f8c\u624d\u8b8a\u6210\u7164\uff08\u77f3\u6cb9\u7684\u7522\u751f\u4e5f\u985e\u4f3c\uff09\uff0c\u63db\u53e5\u8a71\u8aaa\u5316\u77f3\u71c3\u6599\u662f\u592a\u967d\u80fd\u548c\u5730\u8cea\u904b\u52d5\u9019\u5169\u8005\u7684\u539f\u59cb\u80fd\u91cf\u7d44\u6210\u7684\u3002
\u5316\u77f3\u71c3\u6599\u5920\u4eba\u985e\u4f7f\u7528\u55ce\uff1f\u554f\u984c\u7684\u6838\u5fc3\u5c31\u6703\u8b8a\u6210\uff0c\u5982\u679c\u6211\u5011\u6d88\u8017\u5b83\u7684\u901f\u5ea6\u6162\u65bc\u5176\u751f\u6210\u7684\u901f\u5ea6\uff0c\u5c31\u53ef\u4ee5\u4f7f\u7528\uff0c\u4e00\u822c\u516c\u8a8d\u6211\u5011\u9084\u53ef\u4ee5\u518d\u4f7f\u7528\u5316\u77f3\u71c3\u6599\u7d04\u6578\u767e\u5e74\uff0c\u4f46\u662f\u9019\u4e9b\u5316\u77f3\u71c3\u6599\u537b\u662f\u900f\u904e\u7d04\u6578\u767e\u842c\u5e74\u5f62\u6210\u7684\uff0c\u4e5f\u5c31\u662f\u5982\u679c\u6211\u5011\u628a\u76ee\u524d\u6d88\u8017\u7684\u901f\u5ea6\u518d\u6162\u500b\u4e00\u767e\u500d\u5c31\u53ef\u4ee5\u628a\u5316\u77f3\u71c3\u6599\u7576\u6210\u9577\u671f\u6709\u6548\u7684\u8cc7\u6e90\u3002\u901f\u5ea6\u662f\u500b\u91cd\u8981\u7684\u56e0\u7d20\uff0c\u4ee5\u6c23\u5019\u8b8a\u9077\u70ba\u4f8b\uff0c\u6d77\u6d0b\u73fe\u5728\u7684\u78b3\u542b\u91cf\u662f\u958b\u59cb\u4f7f\u7528\u5316\u77f3\u71c3\u6599\u524d\u7684\u4e8c\u5341\u4e94\u500d\uff0c\u5df2\u7d93\u8655\u65bc\u98fd\u548c\u7684\u968e\u6bb5\u4e86\uff0c\u4f46\u554f\u984c\u4e26\u4e0d\u662f\u6211\u5011\u91cb\u653e\u70ad\u7684\u91cf\uff0c\u800c\u662f\u6211\u5011\u91cb\u653e\u70ad\u7684\u901f\u5ea6\u3002\u6d77\u6d0b\u9700\u8981\u6578\u5343\u5e74\u4f86\u6df7\u5408\u5e95\u5c64\u7684\u6c34\u548c\u8868\u5c64\u7684\u6c34\uff0c\u6240\u4ee5\u6211\u5011\u5728\u9019\u4e00\u767e\u5e74\u6240\u91cb\u653e\u7684\u78b3\u5176\u5be6\u53ea\u878d\u9032\u6d77\u6d0b\u7684\u4e00\u5c0f\u6bb5\u8868\u5c64\u4e2d\u3002\u5982\u679c\u6211\u5011\u628a\u71c3\u71d2\u5316\u77f3\u71c3\u6599\u7684\u901f\u5ea6\u6162\u4e0b\u7d04\u4e00\u767e\u500d\u6642\uff0c\u5c31\u80fd\u8b93\u5730\u7403\u6709\u80fd\u529b\u8655\u7406\u9019\u4e9b\u91cb\u653e\u7684\u78b3\u3002
\u6211\u5011\u518d\u4f86\u8ac7\u8ac7\u5176\u91cb\u653e\u51fa\u7684\u78b3\u3002\u73fe\u5728\u7164\uff08\u56db\u6210\uff09\u548c\u77f3\u5316\u6c23\u9ad4\uff08\u5169\u6210\uff09\u4ecd\u662f\u4e16\u754c\u767c\u96fb\u7684\u4e3b\u8981\u65b9\u5f0f\uff0c\u70ba\u4e86\u964d\u4f4e\u5176\u91cb\u653e\u7684\u78b3\uff0c\u6211\u5011\u53ef\u4ee5\u900f\u904e \u78b3\u6355\u6349 \u4f86\u5728\u9019\u4e9b\u78b3\u91cb\u653e\u4e4b\u524d\u6355\u6349\u8d77\u4f86\uff0c\u5176\u6355\u6349\u7387\u7d04\u70ba 85%\u3002\u554f\u984c\u662f\u78b3\u6355\u6349\u7684\u7d93\u6fdf\u50f9\u503c\u548c\u6355\u6349\u5230\u7684\u78b3\u7684\u5132\u5b58\u65b9\u5f0f\uff0c\u73fe\u5728\u6700\u5e38\u4f7f\u7528\u7684\u78b3\u5132\u5b58\u65b9\u5f0f\u662f\u628a\u5176\u57cb\u9032\u571f\u88e1\uff0c\u6211\u5011\u9084\u4e0d\u6e05\u695a\u9019\u4e9b\u78b3\uff08\u6216\u8005\u8aaa\u4e8c\u6c27\u5316\u78b3\uff09\u591a\u4e45\u6703\u91cb\u653e\u5230\u5927\u6c23\u4e2d\uff0c\u4e00\u822c\u8a8d\u70ba\u662f\u4e00\u767e\u4e94\u5341\u5e74\u3002\u7576\u6642\u5019\u5230\u4e86\uff0c\u9019\u4e9b\u78b3\u4ecd\u7136\u662f\u6211\u5011\u9700\u8981\u8655\u7406\u7684\u554f\u984c\u3002\u518d\u52a0\u4e0a\u4e00\u4e9b\u6c92\u6709\u78b3\u6355\u6349\u7684\u80fd\u91cf\u6d88\u8017\uff08\u4e0d\u662f\u7528\u4f86\u767c\u96fb\uff0c\u4f8b\u5982\u6c7d\u8eca\u548c\u5de5\u5ee0\uff09\uff0c\u5c31\u6703\u76f4\u63a5\u91cb\u653e\u81f3\u5927\u6c23\u4e2d\uff0c\u6211\u5011\u4ecd\u8feb\u5207\u9700\u8981\u4e00\u4e9b\u65b0\u7684\u7522\u80fd\u65b9\u5f0f\u3002
"},{"location":"feedback/future-of-fusion-energy/energy/#\u6c34\u529b","title":"\u6c34\u529b","text":"\u6d77\u6d0b\u6216\u6e56\u6cca\u4e2d\u7684\u6c34\u5728\u7d93\u904e\u592a\u967d\u80fd\u7167\u5c04\u5f8c\uff0c\u5176\u4e2d\u7684\u6c34\u5206\u5b50\u5c31\u6709\u8f03\u9ad8\u7684\u6a5f\u7387\uff08\u8b1b\u4eba\u8a71\u5c31\u662f\u6eab\u5ea6\u8b8a\u9ad8\uff09\u6399\u812b\u8868\u9762\u5f35\u529b\u4e26\u84b8\u6563\u9032\u5927\u6c23\u4e2d\uff0c\u7531\u65bc\u5927\u6c23\uff08\u5927\u90e8\u5206\u662f \\(N_2\\) \u548c \\(O_2\\)\uff09\u6bd4\u6c34\u5206\u5b50\uff08\\(H_2O\\)\uff09\u9084\u91cd\uff0c\u6240\u4ee5\u6c34\u5206\u5b50\u6703\u5feb\u901f\u4e0a\u5347\u3002\u96a8\u8457\u4e0a\u5347\u904e\u7a0b\uff0c\u6eab\u5ea6\u6f38\u6f38\u964d\u4f4e\uff0c\u6c34\u5206\u5b50\u7684\u904b\u52d5\u901f\u5ea6\u964d\u4f4e\u5f8c\u5c31\u5f88\u53ef\u80fd\u548c\u5176\u4ed6\u6c34\u5206\u5b50\u805a\u96c6\u5728\u4e00\u8d77\uff0c\u7576\u8d8a\u4f86\u8d8a\u591a\u6c34\u5206\u5b50\u805a\u96c6\u8d77\u4f86\u5c31\u5f62\u6210\u6c34\u6ef4\uff0c\u4e26\u805a\u773e\u6210\u70ba\u4e00\u6735\u96f2\u3002\u9019\u500b\u96f2\u6703\u56e0\u70ba\u4e0a\u5347\u6c23\u6d41\u6301\u7e8c\u7684\u4fdd\u6301\u5728\u9ad8\u7a7a\uff0c\u7576\u96f2\u5be6\u5728\u592a\u91cd\u6216\u8005\u4e0a\u5347\u6c23\u6d41\u964d\u4f4e\uff0c\u5c31\u6703\u964d\u96e8\u3002\u843d\u4e0b\u7684\u96e8\u5c31\u6703\u56e0\u70ba\u91cd\u529b\uff0c\u800c\u5bcc\u542b\u80fd\u91cf\u3002
\u4eba\u985e\u4e00\u5e74\u5e73\u5747\u53ef\u4ee5\u7372\u5f97\u7d04\u4e00\u516c\u5c3a\u7684\u6c34\u91cf\uff0c\u628a\u6c34\u5206\u5b50\u7684\u5bc6\u5ea6\u3001\u7e3d\u6c34\u91cf\u3001\u96f2\u6735\u7684\u9ad8\u5ea6\u3001\u91cd\u529b\u7684\u5f37\u5ea6\u6574\u5408\u5728\u4e00\u8d77\u6240\u7b97\u51fa\u7684\u80fd\u91cf\u78ba\u5be6\u8db3\u5920\u652f\u6490\u4eba\u985e\u80fd\u91cf\u7684\u6d88\u8017\uff0c\u4f46\u662f\u8d85\u904e\u4e00\u534a\u7684\u6c34\u6703\u88ab\u5730\u8868\u5438\u6536\u6216\u8005\u91cd\u65b0\u84b8\u6563\u9032\u7a7a\u6c23\u4e2d\uff0c\u6240\u4ee5\u6211\u5011\u5be6\u969b\u53ef\u4ee5\u4f7f\u7528\u7684\u80fd\u91cf\u6a02\u89c0\u5730\u4f30\u8a08\u53ea\u6709\u5176\u4e2d\u7684\u4e09\u6210\u80fd\u91cf\u3002\u6700\u5e38\u898b\u5132\u5b58\u6c34\u7684\u4f4d\u80fd\u7684\u65b9\u5f0f\u662f\u5efa\u7acb\u6c34\u58e9\u3002\u4f46\u662f\u5728\u6e1b\u5c11\u74b0\u5883\u7684\u8feb\u5bb3\u4e0b\uff0c\u6211\u5011\u8f03\u53ef\u80fd\u5229\u7528\u5ddd\u6d41\u5f0f\u767c\u96fb\uff0c\u4e0d\u5132\u5b58\u6c34\uff0c\u800c\u662f\u53ea\u53d6\u5f97\u6c34\u7684\u52d5\u91cf\u3002\u5728\u9019\u500b\u524d\u63d0\u4e14\u6a02\u89c0\u7684\u8a55\u4f30\u4e0b\u66ff\u6240\u6709\u7684\u6cb3\u6d41\u88dd\u4e0a\u5ddd\u6d41\u5f0f\u767c\u96fb\u6a5f\u53ef\u4ee5\u5f97\u5230\u7d04\u4e00\u6210\u7684\u80fd\u91cf\u3002
"},{"location":"feedback/future-of-fusion-energy/energy/#\u6d77\u6d6a","title":"\u6d77\u6d6a","text":"\u6d77\u6d6a\u662f\u98a8\u5728\u6d77\u6d0b\u8868\u9762\u7684\u6469\u64e6\u529b\u4fc3\u6210\u7684\uff0c\u7531\u6b64\u53ef\u77e5\u5176\u80fd\u91cf\u7d93\u904e\u591a\u6b21\u8f49\u63db\u5f8c\u5df2\u7d93\u4e0d\u591a\u3002\u8981\u8a08\u7b97\u6d77\u6d6a\u80fd\u5e36\u4f86\u7684\u80fd\u91cf\uff0c\u6211\u5011\u9700\u8981\u5e7e\u500b\u53c3\u6578\uff1a\u6d77\u5cb8\u7dda\u9577\u5ea6\uff08\\(10^5 km\\)\uff09\u3001\u6d77\u6d6a\u901f\u5ea6(\\(10 \\frac{m}{s}\\))\u3001\u6d77\u6d6a\u9ad8\u5ea6\uff08\\(1m\\)\uff09\u3001\u6d77\u7684\u5bc6\u5ea6\u3001\u91cd\u529b\uff0c\u6a02\u89c0\u5730\u7b97\u51fa\u7e3d\u80fd\u91cf\u7d04\u662f\u98a8\u529b\u7684\u4e94\u767e\u500d\u5206\u4e4b\u4e00\u4e5f\u5c31\u662f\u4eba\u985e\u6240\u9700\u7684\u5341\u5206\u4e4b\u4e00\u3002
\u76ee\u524d\u4eba\u985e\u4f7f\u7528\u6d77\u6d6a\u4e26\u4e0d\u6210\u719f\uff0c\u4f8b\u5982 Pelamis \u5c31\u662f\u5728\u6d77\u5cb8\u908a\u88fd\u4f5c\u4e00\u689d\u9577\u9577\u7684\u6d6e\u6a19\uff0c\u7576\u6d6e\u6a19\u6f02\u8d77\uff0c\u5c31\u6703\u5e36\u52d5\u6d77\u4e0b\u7684\u5713\u67f1\u9ad4\u52d5\u529b\u6a5f\u4e26\u7522\u80fd\uff0c\u9019\u7a2e\u7522\u80fd\u65b9\u5f0f\u53ef\u4ee5\u5e6b\u52a9\u4e00\u4e9b\u96e2\u5cf6\u81ea\u4e3b\u7684\u7522\u80fd\uff0c\u4f46\u662f\u4ecd\u7121\u6cd5\u5e6b\u52a9\u5927\u90e8\u5206\u4eba\u985e\u89e3\u6c7a\u80fd\u6e90\u554f\u984c\u3002
"},{"location":"feedback/future-of-fusion-energy/energy/#\u9593\u6b47\u6027\u80fd\u6e90","title":"\u9593\u6b47\u6027\u80fd\u6e90","text":"\u4e0a\u8ff0\u63d0\u5230\u7684\u592a\u967d\u80fd\u548c\u98a8\u529b\u96d6\u7136\u5f88\u6709\u6f5b\u529b\u6210\u70ba\u597d\u7684\u80fd\u6e90\u66ff\u4ee3\uff0c\u4f46\u90fd\u6703\u56e0\u70ba\u65e5\u591c\u3001\u5b63\u7bc0\u800c\u6709\u6240\u8b8a\u5316\u3002\u5982\u679c\u6211\u5011\u53ef\u4ee5\u5728\u9019\u4e4b\u4e2d\u627e\u5230\u4e00\u500b\u6709\u6548\u7387\u7684\u65b9\u5f0f\u89e3\u6c7a\u9019\u554f\u984c\uff0c\u7121\u7591\u6703\u7d66\u518d\u751f\u80fd\u6e90\u7684\u9032\u7a0b\u63d0\u4f9b\u4e00\u80a1\u63a8\u529b\u3002\u76ee\u524d\u6211\u5011\u4ecd\u6c92\u8fa6\u6cd5\u6709\u6548\u7684\u5132\u5b58\u5927\u91cf\u80fd\u6e90\uff0c\u6240\u4ee5\u4e00\u822c\u4f86\u8aaa\u767c\u96fb\u5ee0\u6703\u5206\u5225\u626e\u6f14\u5169\u7a2e\u89d2\u8272\uff0c\u4e00\u500b\u662f\u63d0\u4f9b\u7a69\u5b9a\u7684\u80fd\u91cf\uff08\u4f8b\u5982\u7164\u70ad\u548c\u6838\u80fd\uff09\uff0c\u4e00\u500b\u662f\u80fd\u5920\u5feb\u901f\u4f46\u8f03\u5c11\u91cf\u5730\u63d0\u4f9b\u80fd\u91cf\uff08\u4f8b\u5982\u5929\u7136\u74e6\u65af\u548c\u6c34\u58e9\uff09\uff0c\u5982\u679c\u8981\u8b93\u518d\u751f\u80fd\u6e90\u84ec\u52c3\u767c\u5c55\uff0c\u6211\u5011\u52e2\u5fc5\u9700\u8981\u500b\u65b9\u6cd5\u4f86\u900f\u904e\u518d\u751f\u80fd\u6e90\u505a\u5230\u9019\u5169\u500b\u7a2e\u985e\u7684\u9700\u6c42\u3002
\u4e0d\u5c0f\u5fc3\u88fd\u9020\u51fa\u591a\u7684\u80fd\u91cf\u600e\u9ebc\u8fa6\uff1f\u4ee5\u6b50\u6d32\u70ba\u4f8b\uff0c\u4ed6\u5011\u6709\u5efa\u7acb\u6b50\u76df\u96fb\u7db2\uff0c\u7576\u570b\u5bb6\u751f\u7522\u591a\u9918\u7684\u80fd\u91cf\u6642\uff0c\u5c31\u6703\u628a\u9019\u4e9b\u80fd\u91cf\u91cb\u653e\u9032\u96fb\u7db2\u4e2d\u7d66\u5176\u4ed6\u570b\u5bb6\u3002\u76f8\u53cd\u7684\uff0c\u7576\u88fd\u9020\u7684\u80fd\u91cf\u4e0d\u5920\u6642\uff0c\u5c31\u6703\u4f7f\u7528\u96fb\u7db2\u4e2d\u7684\u96fb\u4e26\u4ed8\u8cbb\u7d66\u76f8\u95dc\u7684\u570b\u5bb6\u3002
\u6211\u5011\u53ef\u4ee5\u900f\u904e Agora Electricity Data \u4f86\u627e\u5fb7\u570b\u7684\u76f8\u95dc\u7684\u80fd\u6e90\u6d88\u8017\u6bd4\u4f8b\uff0c\u4e26\u4f9d\u6b64\u4f86\u5206\u6790\u8a0e\u8ad6\u3002\u800c\u4e4b\u6240\u4ee5\u9078\u64c7\u5fb7\u570b\u662f\u56e0\u70ba\u4ed6\u5011\u5df2\u7d93\u958b\u59cb\u82b1\u8cbb\u5927\u91cf\u6642\u9593\u548c\u7d93\u8cbb\u53bb\u7814\u7a76\u518d\u751f\u80fd\u6e90\uff0c\u6240\u4ee5\u5f88\u9069\u5408\u7576\u4f5c\u7814\u7a76\u524d\u7de3\u6a19\u7684\u3002
\u53ef\u4ee5\u770b\u5230\u592a\u967d\u80fd\uff08\u9ec3\u8272\uff09\u662f\u500b\u4f4e\u5bb9\u91cf\u56e0\u7d20\u7684\u80fd\u91cf\u6e90\uff0c\u6bcf\u5230\u4e86\u665a\u4e0a\u5c31\u6703\u8b93\u767c\u96fb\u91cf\u964d\u81f3\u96f6\uff0c\u9019\u662f\u53ef\u9810\u671f\u4f46\u7121\u53ef\u907f\u514d\u7684\u3002 \u6211\u5011\u53ef\u80fd\u53ef\u4ee5\u900f\u904e\u96fb\u91cf\u5132\u5b58\uff0c\u4f86\u8b93\u767d\u5929\u7684\u96fb\u4f9b\u7d66\u665a\u4e0a\uff0c\u4e0d\u904e\u5132\u80fd\u76f8\u95dc\u7d30\u7bc0\u8a0e\u8ad6\u7559\u5230\u4e0b\u4e00\u6bb5\u843d\uff1b \u9664\u6b64\u4e4b\u5916\u67d0\u5e7e\u5929\u592a\u967d\u80fd\u7684\u767c\u96fb\u91cf\u76f8\u5c0d\u4f86\u8aaa\u8f03\u4f4e\uff0c\u53ef\u80fd\u662f\u56e0\u70ba\u4e0b\u96e8\u3001\u9670\u5929\u3001\u9727\u973e\uff0c\u9019\u7a2e\u72c0\u6cc1\u5c31\u5f88\u8f03\u96e3\u9810\u6e2c\u4f46\u662f\u537b\u6709\u5176\u4ed6\u65b9\u5f0f\u53ef\u4ee5\u8655\u7406\u3002 \u4f8b\u5982\u628a\u592a\u967d\u80fd\u767c\u96fb\u7e3d\u91cf\u63d0\u9ad8\u5230\u6240\u9700\u7684\u5169\u500d\uff0c\u7576\u767c\u751f\u9670\u5929\u6642\u6548\u7387\u6e1b\u534a\uff0c\u4ecd\u53ef\u4ee5\u63d0\u4f9b\u6211\u5011\u6240\u9700\uff1b \u6216\u8005\u6211\u5011\u53ef\u4ee5\u5206\u6563\u592a\u967d\u767c\u96fb\u7ad9\uff0c\u56e0\u70ba\u5f88\u53ef\u80fd\u9019\u88e1\u662f\u9670\u5929\u4f46\u53e6\u5916\u4e00\u908a\u662f\u5927\u592a\u967d\uff0c\u9019\u6642\u5c31\u53ef\u4ee5\u900f\u904e\u96fb\u7db2\u628a\u591a\u9918\u7684\u96fb\u8f38\u9001\u7d66\u9670\u5929\u7684\u5730\u5340\uff1b \u6700\u5f8c\u6211\u5011\u53ef\u4ee5\u8981\u6c42\u9670\u5929\u7684\u6642\u5019\u8b93\u8017\u96fb\u91cf\u964d\u4f4e\uff08\u4f8b\u5982\u95dc\u6389\u51b7\u6c23\uff09\u3002
\u76f8\u5c0d\u65bc\u592a\u967d\u80fd\uff0c\u98a8\u529b\u767c\u96fb\uff08\u85cd\u8272\uff09\u6bd4\u8f03\u4e0d\u6703\u53d7\u65e5\u591c\u7684\u5f71\u97ff\u3002 \u98a8\u529b\u767c\u96fb\u96d6\u7136\u662f\u500b\u76f8\u5c0d\u8f03\u9ad8\u7684\u5bb9\u91cf\u56e0\u7d20\u80fd\u6e90\uff0c\u4f46\u662f\u5176\u537b\u5f88\u96e3\u9810\u6e2c\u5176\u9ad8\u4f4e\u5cf0\u3002 \u6211\u5011\u53ef\u80fd\u53ef\u4ee5\u5229\u7528\u98a8\u529b\u8f03\u4e0d\u53d7\u65e5\u591c\u7684\u5f71\u97ff\u800c\u628a\u5b83\u7576\u6210\u592a\u967d\u80fd\u7684\u591c\u665a\u5099\u7528\u65b9\u6848\uff0c\u9019\u7a2e\u505a\u6cd5\u5176\u5be6\u76f8\u8f03\u65bc\u5132\u5b58\u96fb\u80fd\u81f3\u591c\u665a\u66f4\u6709\u6548\u7387\uff0c\u9019\u500b\u5dee\u7570\u5728\u5f85\u6703\u6211\u5011\u628a\u5c3a\u5ea6\u653e\u5230\u4e00\u6574\u5e74\u6703\u66f4\u660e\u986f\u3002
\u4ec0\u9ebc\u662f\u5bb9\u91cf\u56e0\u7d20\u5bb9\u91cf\u56e0\u7d20\uff08capacity factor\uff09\u4ee3\u8868\u4e00\u500b\u6642\u9593\u5340\u9593\u4e2d\u5be6\u969b\u767c\u96fb\u91cf\u548c\u7406\u8ad6\u767c\u96fb\u91cf\u7684\u6bd4\u4f8b\uff0c\u4ee5 2010 \u5e74\u5e15\u6d1b\u97cb\u5fb7\u767c\u96fb\u7ad9\uff08\u6838\u5206\u88c2\u767c\u96fb\u7ad9\uff09\u70ba\u4f8b\uff0c\u5176\u6bcf\u5c0f\u6642\u70ba 3,942 MW \u800c\u8a72\u5e74\u5ea6\u7e3d\u767c\u96fb\u91cf\u70ba 31,200,000 MWh\uff0c\u63db\u7b97\u6210\u5bb9\u91cf\u56e0\u7d20\u5247\u70ba \\(\\frac{31,200,000\\; MW\\cdot h}{\\left (365\\; days\\right )\\times \\left (24 \\; hours/day \\right )\\times \\left (3942\\; MW\\right )}=0.904=90.4\\%\\)\u3002 \u53cd\u904e\u4f86\u8aaa\u592a\u967d\u80fd\u767c\u96fb\u53d7\u9650\u65bc\u767d\u5929\u6642\u9593\u548c\u5929\u6c23\uff0c\u5176\u5bb9\u91cf\u56e0\u7d20\u901a\u5e38\u6703\u8f03\u4f4e\uff0c\u4ee5 Agua Caliente Solar Project \u70ba\u4f8b\uff0c\u5176\u5c0d\u5916\u5ba3\u7a31\u6bcf\u5c0f\u6642\u53ef\u767c\u96fb 290 MW\uff0c\u800c\u5e74\u5ea6\u767c\u96fb\u7e3d\u91cf\u70ba 740,000 MWh \u63db\u7b97\u4e0b\u4f86\u7d04\u70ba 29.1%\u3002
\u4e5f\u5c31\u662f\u8aaa\uff0c\u5982\u679c\u8981\u8b93\u592a\u967d\u80fd\u767c\u96fb\u7ad9\u9054\u5230\u548c\u6838\u5206\u88c2\u767c\u96fb\u7ad9\u76f8\u540c\u7684\u767c\u96fb\u7e3d\u91cf\uff0c\u6211\u5011\u5c31\u9700\u8981\u63d0\u5347\u592a\u967d\u80fd\u6bcf\u5c0f\u6642\u767c\u96fb\u91cf\u81f3\u6838\u5206\u88c2\u6bcf\u5c0f\u6642\u767c\u96fb\u91cf\u7684\u4e09\u500d\uff0c\u4ee5 Agua Caliente Solar Project \u70ba\u4f8b\u5c31\u662f\u6bcf\u5c0f\u6642\u7684\u7522\u80fd\u8981\u5f9e\u539f\u672c\u7684 290 MW \u63d0\u5347\u81f3\u7d04 12,000 MW\u3002
\u5728\u5fb7\u570b\uff0c\u592a\u967d\u80fd\u7684\u767c\u96fb\u91cf\u5230\u4e86\u51ac\u5929\u6703\u662f\u590f\u5929\u7684\u516d\u5206\u4e4b\u4e00\u500d\uff0c\u5176\u5c0d\u61c9\u65b9\u5f0f\u5176\u5be6\u548c\u9670\u5929\u7684\u8655\u7406\u65b9\u5f0f\u5f88\u50cf\uff0c\u53ea\u662f\u91cf\u5c3a\u9700\u8981\u653e\u5927\u4e00\u4e9b\u3002 \u4f8b\u5982\u6211\u5011\u9700\u8981\u5b89\u88dd\u592a\u967d\u80fd\u767c\u96fb\u7ad9\u5230\u590f\u5929\u6240\u9700\u7684\u516d\u500d\uff0c\u5982\u679c\u52a0\u4e0a\u8655\u7406\u9670\u5929\uff0c\u5c31\u662f\u5341\u4e8c\u500d\u7684\u91cf\uff1b \u53e6\u5916\u6211\u5011\u53ef\u80fd\u53ef\u4ee5\u5efa\u7acb\u4e00\u500b\u5357\u5317\u534a\u7403\u7684\u8f38\u96fb\u7dda\uff0c\u7576\u5317\u534a\u7403\u9032\u5165\u51ac\u5929\u4e4b\u5f8c\uff0c\u5c31\u5229\u7528\u5357\u534a\u7403\u7684\u592a\u967d\u4f86\u628a\u767c\u96fb\u9001\u5f80\u5317\u534a\u7403\uff1b \u6700\u5f8c\u5c31\u5982\u524d\u9762\u63d0\u5230\u7684\uff0c\u98a8\u529b\u548c\u592a\u967d\u80fd\u76f8\u53cd\uff0c\u51ac\u5929\u7684\u98a8\u529b\u6bd4\u590f\u5929\u7684\u5f37\u7d04\u4e09\u500d \uff08\u5982\u540c\u6211\u5011\u5728\u98a8\u529b\u63d0\u5230\u7684\uff0c\u51ac\u5929\u8d64\u9053\u548c\u8d64\u9053\u4ee5\u5916\u7684\u6eab\u5dee\u8f03\u9ad8\uff09\uff0c \u9019\u6642\u6211\u5011\u53ef\u4ee5\u8b93\u5169\u8005\u7684\u767c\u96fb\u5f62\u6210\u4e92\u88dc\u3002
\u6700\u5f8c\u6211\u5011\u7d71\u6574\u51fa\u56db\u7a2e\u65b9\u5f0f\u4f86\u89e3\u6c7a\u9593\u6b47\u6027\u80fd\u6e90\u7684\u554f\u984c\uff1a
\u7576\u7136\u5982\u540c\u8a31\u591a\u4e8b\u60c5\u4e00\u6a23\uff0c\u6700\u597d\u7684\u505a\u6cd5\u901a\u5e38\u4f86\u81ea\u65bc\u6574\u5408\u773e\u591a\u53ef\u884c\u4f5c\u6cd5\u3002
"},{"location":"feedback/future-of-fusion-energy/energy/#\u5132\u80fd\u7cfb\u7d71","title":"\u5132\u80fd\u7cfb\u7d71","text":"\u4ee5\u5fb7\u570b\u70ba\u4f8b\uff0c\u5118\u7ba1\u98a8\u529b\u548c\u592a\u967d\u80fd\u4e4b\u9593\u6709\u5f7c\u6b64\u4e92\u88dc\u7684\u95dc\u4fc2\uff0c\u7136\u800c\u6839\u64da\u4f30\u8a08\u6211\u5011\u4ecd\u9700\u8981\u6bcf\u5929\u5132\u5b58 25~30% \u7684\u80fd\u91cf\u4f86\u4f9b\u61c9\u591c\u665a\u7684\u4f4e\u5cf0\u671f\uff0c 5~10% \u7684\u80fd\u91cf\u4f86\u4f9b\u61c9\u51ac\u5929\u7684\u4f4e\u5cf0\u671f\uff0c\u800c\u9019\u500b\u4f30\u8a08\u7d50\u679c\u4e5f\u540c\u6a23\u9069\u7528\u65bc\u7f8e\u570b\u3002
2021 \u5e74\u4e2d\u570b\u80fd\u6e90\u5c40\u7684\u5132\u80fd\u7522\u696d\u767d\u76ae\u66f8\uff0c\u81fa\u7063\u7684\u653f\u6cbb\u7acb\u5834\u5e38\u5e38\u6703\u8b93\u5927\u5bb6\u5ffd\u8996\u4e2d\u570b\u7684\u512a\u9ede\uff0c\u503c\u5f97\u6ce8\u610f\u7684\u662f\u5132\u80fd\u7522\u696d\u4e2d\u4f7f\u7528\u7387\u6700\u9ad8\u7684\u5206\u5225\u662f\u4e2d\u570b\u3001\u7f8e\u570b\u3001\u6b50\u6d32\u3001\u5357\u97d3\u548c\u65e5\u672c\u3002
\u6700\u5e38\u88ab\u4f7f\u7528\u7684\u5132\u96fb\u6a5f\u5236\u662f\u5229\u7528\u6c34\u4f4d\u5dee\uff0c\u4e5f\u5c31\u662f\u7576\u88fd\u9020\u591a\u9918\u7684\u96fb\u80fd\u6642\uff0c\u900f\u904e\u99ac\u9054\u628a\u4e0b\u6e38\u6c34\u5eab\u7684\u6c34\u9001\u5f80\u4e0a\u6e38\u6c34\u5eab\uff0c\u9019\u6642\u96fb\u80fd\u5c31\u6703\u88ab\u8f49\u63db\u6210\u91cd\u529b\u4f4d\u80fd\u5dee\uff0c\u9019\u65b9\u5f0f\u7684\u6574\u9ad4\u80fd\u91cf\u8f49\u63db\u7387\u70ba\u76f8\u7576\u9ad8\u7684 75%\u3002 \u7136\u800c\u5373\u4f7f\u6211\u5011\u628a\u5730\u7403\u4e0a\u6240\u6709\u6cb3\u6d41\u548c\u6e56\u6cca\u7684\u6c34\u90fd\u5f80\u4e0a\u62ac\u6607 30 \u516c\u5c3a\u4f86\u5132\u5b58\u4f4d\u80fd\u5dee1\uff0c\u4e5f\u4e0d\u8db3\u4ee5\u6eff\u8db3\u4eba\u985e\u4e00\u5e74\u6240\u9700\u7684 5%\uff0c\u9019\u4e5f\u56de\u61c9\u4e86\u6211\u5011\u524d\u9762\u8aaa\u6c34\u529b\u50c5\u80fd\u4f9b\u61c9\u7d04\u4eba\u985e\u6240\u9700\u7684 10%\u3002 \u56e0\u6b64\u5728\u5927\u90e8\u5206\u5730\u7406\u74b0\u5883\u4e2d\u6c34\u529b\u6c92\u8fa6\u6cd5\u6eff\u8db3\u6211\u5011\u5132\u80fd\u7684\u9700\u6c42\u3002
\u6211\u5011\u4e5f\u53ef\u4ee5\u900f\u904e\u71b1\u80fd\u4f86\u5132\u5b58\u80fd\u91cf\uff0c\u628a\u591a\u9918\u7684\u96fb\u80fd\u7528\u4f86\u52a0\u71b1\u5730\u5e95\u7d04\u4e94\u516c\u5c3a\u7684\u5ca9\u77f3\u5c64\u5230\u7d04 \\(50^\\circ C\\)\u3002 \u7531\u65bc\u5ca9\u77f3\u7684\u4f4e\u5c0e\u71b1\u6027\uff0c\u6211\u5011\u767c\u73fe\u4e00\u7acb\u65b9\u516c\u5c3a\u7684\u5ca9\u77f3\u53ef\u4ee5\u5132\u5b58\u7d04 \\(10^8J\\) \u7684\u80fd\u91cf\uff0c\u63db\u53e5\u8a71\u8aaa\uff0c\u6211\u5011\u53ea\u9700\u8981 0.1% \u7684\u9678\u584a\u9762\u7a4d\u5c31\u80fd\u5132\u5b58 5% \u4eba\u985e\u4e00\u5e74\u7684\u80fd\u91cf\u3002 \u4f46\u662f\uff0c\u900f\u904e\u71b1\u80fd\u88fd\u9020\u96fb\u529b\u7684\u80fd\u91cf\u8f49\u63db\u7387\u6703\u53d7\u5230\u6eab\u5ea6\u5dee\u7684\u5f71\u97ff\uff0c\u4e5f\u5c31\u662f\u9019\u65b9\u6cd5\u7684\u80fd\u91cf\u8f49\u63db\u7387\u4e26\u4e0d\u9ad8\uff0c\u5e78\u904b\u7684\u662f\u6211\u5011\u4e0d\u9700\u8981\u628a\u5b83\u8f49\u70ba\u96fb\u80fd\uff0c\u6211\u5011\u53ef\u4ee5\u76f4\u63a5\u4f7f\u7528\u9019\u500b\u71b1\u80fd\u4f86\u5e6b\u6211\u5011\u5ea6\u904e\u5bd2\u51b7\u7684\u51ac\u5929\uff08\u51ac\u5929\u4fdd\u6eab\u6240\u9700\u7684\u80fd\u91cf\u7d04\u4f54\u5168\u4eba\u985e\u8017\u80fd\u7684 10%\uff09\uff0c\u540c\u6a23\u7684\u65b9\u5f0f\u4e5f\u9069\u7528\u65bc\u5132\u5b58\u51b7\u6c23\u7136\u5f8c\u628a\u5b83\u653e\u5230\u590f\u5929\u4f86\u4f7f\u7528\u3002
\u71b1\u5132\u5b58\u7cfb\u7d71\u9019\u500b\u6771\u897f\u6211\u4e0a\u7db2\u67e5\u5230\u5f88\u591a\u6848\u4f8b\uff0c\u4f8b\u5982\u5fb7\u570b\u67cf\u6797\u570b\u6703\u5927\u6a13\u3001\u52a0\u62ff\u5927\u5fb7\u96f7\u514b\u793e\u5340\u7bc0\u7701\u4e86 97% \u6240\u9700\u7684\u4f9b\u6696\u80fd\u6e90\u548c\u82ac\u862d\u516c\u53f8\u8a2d\u8a08\u51fa\u5546\u7528\u6c99\u71b1\u5132\u5b58\u88dd\u7f6e\u3002\u9664\u6b64\u4e4b\u5916\uff0c\u7531\u65bc\u70cf\u4fc4\u6230\u722d\u5c0e\u81f4\u5929\u7136\u6c23\u4f9b\u61c9\u4e0d\u7a69\uff0c\u5967\u5730\u5229\u65bc 2023 \u5e74\u7981\u6b62\u65b0\u5efa\u5929\u7136\u6c23\u4f9b\u6696\u7cfb\u7d71\uff0c\u4e26\u9010\u6b65\u5b8c\u5168\u6c70\u63db\u4e4b\u7b49\u6b63\u6e96\u5099\u958b\u59cb\u7684\u8a08\u756b\u3002
\u53e6\u5916\u4e00\u7a2e\u503c\u5f97\u6ce8\u610f\u7684\u89e3\u6c7a\u65b9\u6848\u662f\u92f0\u96e2\u5b50\u96fb\u6c602\uff0c\u9019\u500b\u8fd1\u5e7e\u5e74\u53d6\u5f97\u8a31\u591a\u91cd\u8981\u7a81\u7834\u7684\u6280\u8853\u3002\u92f0\u96e2\u5b50\u96fb\u6c60\u7684\u512a\u52e2\u4e0d\u53ea\u662f\u9ad8\u96fb\u80fd\u56de\u6536\u7387\uff08\u5927\u7d04\u70ba 80~90%\uff09\u9084\u6709\u4ed6\u7684\u4f4e\u6210\u672c\u3002 \u4ee5 2022 \u5e74\u7279\u65af\u62c9 PowerWall \u7684\u96f6\u552e\u50f9 7500$ \u70ba\u4f8b\uff0c\u53ef\u4ee5\u5132\u5b58 \\(13.5\\; kWh\\) \u7684\u80fd\u91cf\u4e26\u4fdd\u8b49\u904b\u4f5c\u5341\u5e74\uff0c\u5047\u8a2d\u6bcf\u5929\u90fd\u56de\u5145\u4e00\u6b21\u5c31\u53ef\u4ee5\u5132\u5b58\u7d04 \\(3650 \\times 13.5=49,275\\; kWh\\) \u7684\u96fb\u91cf\uff0c\u4e5f\u5c31\u662f\u6bcf kWh \u7d04 0.15$\uff08\u7d04 4 \u584a\u53f0\u5e63\uff09\uff0c\u9019\u5e7e\u4e4e\u548c\u767c\u96fb\u7684\u6210\u672c\u76f8\u540c\uff0c\u5728\u9019\u6a23\u5212\u7b97\u7684\u50f9\u683c\u4e0b\u5f88\u591a\u5546\u696d\u548c\u5bb6\u5ead\u5f0f\u7684\u5132\u80fd\u6a5f\u5236\u90fd\u9078\u64c7\u4f7f\u7528\u9019\u7a2e\u65b9\u5f0f\uff0c\u96d6\u7136\u770b\u8d77\u4f86\u662f\u500b\u7c21\u55ae\u7684\u904b\u7b97\uff0c\u4f46\u9019\u7d50\u679c\u548c\u76f8\u95dc\u7d30\u90e8\u904b\u7b97\u5f97\u51fa\u7684\u592a\u967d\u80fd\u65e5\u591c\u5132\u80fd\u6210\u672c\u76f8\u5dee\u4e0d\u591a\u3002 \u4f46\u662f\u92f0\u96e2\u5b50\u96fb\u6c60\u6709\u500b\u5927\u7f3a\u9ede\uff0c\u5c31\u662f\u4ed6\u53ea\u9069\u5408\u5c0f\u7bc4\u570d\u548c\u77ed\u671f\u7684\u5132\u80fd\uff0c\u6211\u5011\u6c92\u8fa6\u6cd5\u8b93\u6bcf\u500b\u5bb6\u5ead\u90fd\u653e\u4e00\u500b\u92f0\u96e2\u5b50\u96fb\u6c60\u4e5f\u6c92\u8fa6\u6cd5\u5229\u7528\u5b83\u5132\u5b58\u590f\u5929\u7684\u80fd\u91cf\u4ee5\u5229\u51ac\u5929\u4f7f\u7528\u3002
\u4e0d\u80fd\u9069\u7528\u65bc\u5168\u7403\u7684\u539f\u56e0\u662f\u92f0\u5728\u571f\u5730\u7684\u5b58\u91cf\u4f30\u8a08\u53ea\u6709 2800 \u842c\u9813\uff0c\u5982\u679c\u4ee5 1 \u514b\u7684\u92f0\u80fd\u5132\u5b58 4000 \u7126\u8033\u7684\u80fd\u91cf\u4f86\u770b\uff0c\u6211\u5011\u9700\u8981\u7d04 60 \u5104\u5678\u7684\u92f0\uff0c\u5118\u7ba1\u6d77\u6d0b\u4e2d\u6709 2000 \u5104\u5678\u7684\u92f0\uff0c\u4f46\u662f\u6211\u5011\u53ea\u80fd\u8403\u53d6\u6d77\u6d0b\u8868\u5c64\u7684\u91cf\uff0c\u4e4b\u5f8c\u5c31\u8981\u7b49\u4e00\u5343\u5e74\u4f86\u8b93\u5e95\u5c64\u7684\u6d77\u6c34\u6df7\u5408\u4e0a\u4f86\u3002 \u9664\u6b64\u4e4b\u5916\u900f\u904e\u6d77\u6d0b\u8403\u53d6\u92f0\u662f\u500b\u5c1a\u672a\u6210\u719f\u7684\u9818\u57df\uff0c\u6545\u800c\u5c07\u6beb\u7121\u7591\u554f\u5730\u63d0\u9ad8\u92f0\u96e2\u5b50\u96fb\u6c60\u7684\u6210\u672c\u3002 \u4e4b\u6240\u4ee5\u4e0d\u80fd\u9069\u7528\u65bc\u9577\u6642\u9593\u7684\u5132\u5b58\u5247\u662f\u56e0\u70ba\u5176\u5148\u5929\u7684\u53ea\u80fd\u5b58\u6d3b\u7d04\u5341\u5e74\uff0c\u7576\u8d85\u904e\u9019\u500b\u5e74\u4efd\u6642\uff0c\u5c31\u6703\u5927\u5927\u7684\u964d\u4f4e\u5176\u80fd\u5132\u5b58\u7684\u96fb\u91cf\uff0c\u5982\u679c\u6211\u5011\u4e00\u5e74\u53ea\u7528\u4e00\u6b21\u96fb\u6c60\uff0c\u4e0a\u8ff0\u6240\u8a08\u7b97\u7684\u6210\u672c\u5c07\u6703\u9700\u8981\u4e58\u4ee5 365 \u500d\uff0c\u5f88\u986f\u7136\u5730\u5c07\u4e0d\u7b26\u5408\u6210\u672c\u3002
\u5176\u4ed6\u53ef\u80fd\u7684\u65b9\u5f0f\u4f8b\u5982\u7194\u9e7d\uff08Molten Salt\uff09\u53ef\u4ee5\u628a\u71b1\u80fd\u4fdd\u5b58\u5728\u7269\u8cea\u7684\u6db2\u5316\u72c0\u614b\u4e2d\uff0c\u4f46\u53ea\u9069\u5408\u5927\u578b\u767c\u96fb\u5ee0\u4e14\u6210\u672c\u6bd4\u4e0a\u8ff0\u7684\u6210\u672c\u9ad8\u6578\u500d\uff1b \u58d3\u7e2e\u7a7a\u6c23\uff08CAES\uff09\u81f3\u6db2\u9ad4\u5f8c\u518d\u8b93\u5176\u8f49\u6210\u6c23\u9ad4\u6642\u5c31\u53ef\u4ee5\u5229\u7528\u98a8\u529b\u767c\u96fb\uff0c\u4f46\u662f\u6548\u80fd\u8f49\u63db\u7387\u5f88\u4f4e\uff1b \u8d85\u96fb\u5bb9\uff08Super-capacitor\uff09\u4e5f\u662f\u4e00\u7a2e\u5132\u5b58\u96fb\u80fd\u7684\u65b9\u5f0f\uff0c\u4f46\u662f\u4e5f\u662f\u6548\u7387\u904e\u4f4e\uff1b \u98db\u8f2a\uff08flywheels\uff09\u900f\u904e\u7dad\u6301\u52d5\u80fd\u4f86\u5132\u5b58\u80fd\u91cf\uff0c\u5b83\u53ef\u80fd\u5f88\u9069\u5408\u4f7f\u7528\u5728\u6c7d\u8eca\u4e0a\uff0c\u7576\u715e\u8eca\u6642\uff0c\u8b93\u8a72\u52d5\u80fd\u900f\u904e\u98db\u8f2a\u4fdd\u5b58\u8d77\u4f86\uff0c\u8d77\u6b65\u5f8c\u91cb\u653e\u51fa\u4f86\uff0c\u4f46\u662f\u82e5\u7528\u65bc\u96fb\u80fd\u5247\u662f\u8655\u65bc\u7814\u7a76\u968e\u6bb5\u4e5f\u5c31\u662f\u6703\u6709\u5f88\u9ad8\u7684\u6210\u672c\u3002
"},{"location":"feedback/future-of-fusion-energy/energy/#\u9700\u6c42\u63a7\u7ba1","title":"\u9700\u6c42\u63a7\u7ba1","text":"\u9700\u6c42\u63a7\u7ba1\u8b93\u6a5f\u5668\u6216\u8a2d\u5099\u5728\u96fb\u529b\u7522\u80fd\u8f03\u4f4e\u7684\u6642\u5019\u6e1b\u5c11\u6240\u9700\u7684\u96fb\u91cf\uff0c\u6709\u4e9b\u8a2d\u5099\u751a\u81f3\u4e0d\u4ecb\u610f\u77ed\u6642\u9593\uff08\u6578\u5c0f\u6642\uff09\u7684\u505c\u96fb\uff0c\u4f8b\u5982\u51b7\u6c23\u3001\u6c34\u6ce5\u78be\u78e8\u6a5f\u3001\u6d77\u6c34\u6de1\u5316\u7cfb\u7d71\u3002 \u6211\u5011\u901a\u5e38\u53ef\u4ee5\u85c9\u7531\u63d0\u9ad8\u4f4e\u7522\u80fd\u6642\u671f\u7684\u6bcf\u55ae\u4f4d\u80fd\u6e90\u7684\u50f9\u9322\u4f86\u8a98\u4f7f\u4f01\u696d\u6216\u5bb6\u5ead\u4f86\u6e1b\u5c11\u80fd\u91cf\u7684\u4f7f\u7528\u3002 \u524d\u9762\u6240\u63d0\u7684\u5132\u80fd\u7cfb\u7d71\u5176\u5be6\u5c31\u662f\u9700\u6c42\u63a7\u7ba1\u7684\u4e00\u7a2e\u5be6\u8e10\uff0c\u900f\u904e\u628a\u9ad8\u5cf0\u6642\u7684\u80fd\u91cf\u5132\u5b58\u8d77\u4f86\uff0c\u5728\u4f4e\u5cf0\u6642\u4e0d\u9760\u5916\u754c\uff0c\u800c\u662f\u4f7f\u7528\u5167\u5b58\u7684\u80fd\u91cf\u4f86\u904b\u4f5c\u3002
\u76ee\u524d\u5728\u9700\u6c42\u63a7\u7ba1\u7684\u6a5f\u5236\u4e0a\uff0c\u5927\u90e8\u5206\u4ecd\u662f\u50c5\u5141\u8a31\u77ed\u6642\u9593\u7684\u505c\u96fb\uff0c\u5982\u4f55\u9069\u61c9\u51ac\u5929\u6216\u96e8\u5b63\u9019\u7a2e\u9577\u9054\u6578\u5929\u751a\u81f3\u6578\u6708\u7684\u4f4e\u7522\u80fd\uff08\u4f8b\u5982\u592a\u967d\u80fd\uff09\u6642\u671f\uff0c\u4ecd\u662f\u4e00\u5927\u6311\u6230\u3002
"},{"location":"feedback/future-of-fusion-energy/energy/#\u8de8\u5340\u57df\u96fb\u7db2","title":"\u8de8\u5340\u57df\u96fb\u7db2","text":"\u8de8\u5340\u57df\u96fb\u7db2\u5176\u5be6\u6eff\u76f4\u89c0\u7684\uff0c\u6211\u53ef\u4ee5\u628a\u6492\u54c8\u62c9\u6c99\u6f20\u7684\u592a\u967d\u80fd\u8f38\u9001\u81f3\u6b50\u6d32\u6216\u975e\u6d32\u5404\u5730\uff08\u4f8b\u5982 DESERTEC\uff09\uff0c\u751a\u81f3\u7576\u5317\u534a\u7403\u9032\u5165\u51ac\u5929\u6642\uff0c\u5c31\u628a\u5357\u534a\u7403\u7684\u96fb\u80fd\u8f38\u9001\u81f3\u5317\u534a\u7403\uff08\u900f\u904e\u9ad8\u58d3\u76f4\u6d41\u4f86\u8f38\u9001\uff09\u3002
\u9ad8\u58d3\u76f4\u6d41\u7684\u5be6\u8e10\u4e0d\u50c5\u662f DESERTEC \u6709\u5728\u7528\uff0c\u5728\u4e2d\u570b\uff0c\u4e5f\u5df2\u7d93\u958b\u59cb\u5927\u91cf\u90e8\u7f72\uff0c\u8a73\u898b\u4e2d\u570b\u570b\u5bb6\u96fb\u7db2\u3002
\u70ba\u4ec0\u9ebc\u4e0d\u5728\u9644\u8fd1\u5efa\u7acb\u96fb\u7db2\u5c31\u597d\uff1f
\u9644\u8fd1\u7684\u5929\u6c23\u901a\u5e38\u90fd\u4e00\u6a23\uff0c\u4ee5\u98a8\u529b\u767c\u96fb\u70ba\u4f8b\u3002\u5f85\u88dc\u5716\uff0cMaybe from wind Europe.
\u5118\u7ba1\u8de8\u5340\u57df\u96fb\u7db2\u770b\u4f3c\u662f\u89e3\u6c7a\u9593\u6b47\u6027\u80fd\u6e90\u554f\u984c\u4e2d\u6700\u80fd\u88ab\u5be6\u8e10\u7684\u90e8\u5206\u505a\u6cd5\uff08\u4ee5\u592a\u967d\u80fd\u4f86\u8aaa\uff0c\u4ed6\u4ecd\u6c92\u8fa6\u6cd5\u8655\u7406\u767d\u5929\u665a\u4e0a\u7684\u5dee\u7570\uff09\uff0c\u4f46\u4ed6\u4e5f\u662f\u6700\u6709\u653f\u6cbb\u969c\u7919\u7684\u505a\u6cd5\u3002 \u751f\u7522\u80fd\u6e90\u7684\u6210\u672c\u662f\u6240\u6709\u5df2\u958b\u767c\u570b\u5bb6\u4e2d\u6700\u5927\u7684\u6295\u8cc7\u4e4b\u4e00\uff08\u4ee5\u81fa\u7063\u70ba\u4f8b\uff0c\u653f\u5e9c 110 \u5e74\u6b72\u51fa\u70ba 2 \u5146\u5de6\u53f3\uff0c\u4f46\u662f\u81fa\u96fb\u5728\u8a72\u5e74\u5ea6\u7d04\u82b1\u4e86 7000 \u5104\u4f86\u751f\u7522\u96fb\u80fd\uff09\uff0c\u64f4\u589e\u96fb\u7db2\u4ee3\u8868\u9700\u8981\u6295\u8cc7\u5927\u91cf\u91d1\u9322\u5728\u570b\u5916\u4e26\u58d3\u7e2e\u570b\u5167\u751f\u7522\u96fb\u80fd\u7684\u9810\u7b97\uff0c\u9664\u6b64\u4e4b\u5916\u9084\u6703\u8b93\u81ea\u5df1\u9ad8\u5ea6\u4f9d\u8cf4\u65bc\u5176\u4ed6\u570b\u5bb6\u7684\u653f\u6cbb\u7a69\u5b9a\u5ea6\u3002 \u63db\u53e5\u8a71\u8aaa\uff0c\u4efb\u4f55\u96fb\u7dda\u7d93\u904e\u7684\u570b\u5bb6\u90fd\u6709\u80fd\u529b\u8b93\u4f60\u7684\u570b\u5bb6\u96fb\u529b\u4e2d\u65b7\uff0c\u4e26\u4e14\u9084\u53ef\u4ee5\u662f\u9577\u671f\u7684\u4e2d\u65b7\u3002 \u5176\u4ed6\u65b9\u6848\u5982\u6c34\u4e0b\u96fb\u7e9c\uff0c\u5176\u6210\u672c\u4ecd\u9ad8\u5230\u6c92\u6709\u8db3\u5920\u7684\u7d93\u6fdf\u6548\u76ca\u3002
"},{"location":"feedback/future-of-fusion-energy/energy/#\u7d50\u8a9e","title":"\u7d50\u8a9e","text":"\u4e00\u822c\u4f86\u8aaa\uff0c\u4e0a\u8ff0\u63d0\u5230\u7684\u80fd\u6e90\u9664\u4e86\u6838\u80fd\u548c\u77f3\u5316\u71c3\u6599\u90fd\u5c6c\u65bc\u518d\u751f\u80fd\u6e90\uff0c\u6216\u8005\u8aaa\u53ef\u4ee5\u8db3\u91cf\u5730\u88dc\u5145\uff08\u88dc\u5145\u7684\u901f\u5ea6\u5927\u65bc\u6d88\u8017\uff09\u7684\u80fd\u6e90\u90fd\u5c6c\u65bc\u518d\u751f\u80fd\u6e90\u3002\u4f46\u662f\u6211\u5011\u4e5f\u8a0e\u8ad6\u5230\u4e86\u4e26\u4e0d\u662f\u6bcf\u500b\u518d\u751f\u80fd\u6e90\u90fd\u8db3\u5920\u6211\u5011\u4f7f\u7528\uff0c\u4f8b\u5982\u6c34\u529b\uff0c\u5c31\u7b97\u6211\u5011\u63a5\u4e0b\u4f86\u628a\u5168\u4e16\u754c\u7684\u6c34\u529b\u767c\u96fb\u5ee0\u90fd\u62ff\u4f86\u6301\u7e8c\u767c\u96fb\u4e94\u5341\u5104\u5e74\uff0c\u4ed6\u6240\u7522\u751f\u7684\u80fd\u91cf\u90fd\u62b5\u4e0d\u904e\u76ee\u524d\u9810\u4f30\u7684\u6240\u6709\u77f3\u6cb9\u80fd\u7522\u751f\u7684\u80fd\u91cf\u3002\u9664\u6b64\u4e4b\u5916\uff0c\u4e26\u4e0d\u662f\u8aaa\u518d\u751f\u80fd\u6e90\u5c31\u6703\u5c0d\u74b0\u5883\u6bd4\u8f03\u53cb\u5584\uff0c\u4f8b\u5982\u592a\u967d\u80fd\uff0c\u5373\u4f7f\u592a\u967d\u80fd\u96fb\u677f\u672a\u4f86 20 \u5e74\u8b93\u5b83\u7a69\u5b9a\u767c\u96fb\uff0c\u5b83\u5728\u5de5\u5ee0\u88fd\u9020\u6642\u6240\u7522\u751f\u7684\u4e8c\u6c27\u5316\u78b3\u4ecd\u662f\u6838\u80fd\u6bcf\u55ae\u4f4d\u80fd\u91cf\u6240\u7522\u751f\u7684\u4e8c\u6c27\u5316\u78b3\u7684\u4e09\u500d\u3002
\u7576\u6211\u5011\u5728\u9078\u64c7\u4f7f\u7528\u7684\u80fd\u6e90\u6642\uff0c\u6211\u5011\u9700\u8981\u8003\u616e\u7684\u4e0d\u50c5\u662f\u4ed6\u662f\u5426\u5c6c\u65bc\u300c\u518d\u751f\u80fd\u6e90\u300d\uff0c\u5728\u4e0a\u8ff0\u8a0e\u8ad6\u4e2d\u4e5f\u63d0\u5230\u5f88\u591a\u80fd\u6e90\u7684\u512a\u52a3\u52e2\uff0c\u9019\u4e9b\u90fd\u662f\u5728\u9078\u64c7\u6642\u53ef\u4ee5\u653e\u5230\u6aaf\u9762\u4e0a\u8b93\u5927\u5bb6\u53bb\u8003\u616e\u7684\u9762\u5411\u3002
\u6211\u5011\u6839\u64da\u4e0a\u5716\u5404\u500b\u80fd\u6e90\u7684\u860a\u542b\u91cf\uff0c\u52a0\u4e0a\u524d\u9762\u63d0\u5230\u53ef\u80fd\u7684\u53ef\u884c\u64f7\u53d6\u65b9\u5f0f\uff0c\u6211\u5011\u53ef\u4ee5\u5f97\u51fa\u4e0b\u8868\u7684\u7e3d\u7d50\u3002
\u7a2e\u985e \u53ef\u6301\u7e8c\u591a\u4e45 \u9593\u6b47\u6027\u80fd\u6e90 D-T \u6838\u878d\u5408 1 \u5104\u5e74 \u5426 D-D \u6838\u878d\u5408 100 \u5104\u5e74 \u5426 \u923e\u2014235 \u6838\u5206\u88c2\uff08\u9678\u5730\uff09 100 \u5e74 \u5426 \u923e\u2014238 \u6838\u5206\u88c2\uff08\u9678\u5730\uff09 1 \u842c\u5e74 \u5426 \u923e\u2014235 \u6838\u5206\u88c2\uff08\u6d77\u6d0b\uff09 1 \u842c\u5e74 \u5426 \u923e\u2014238 \u6838\u5206\u88c2\uff08\u6d77\u6d0b\uff09 100 \u842c\u5e74 \u5426 \u77f3\u5316\u71c3\u6599 100 \u5e74 \u5426\u975e\u518d\u751f\u80fd\u6e90\u7684\u6bd4\u8f03
\u7a2e\u985e \u4f54\u4eba\u985e\u8017\u80fd\u6bd4 \u9593\u6b47\u6027\u80fd\u6e90 \u5730\u71b1 0.1 \u5426 \u592a\u967d\u80fd 100 \u9031\u671f\u6027 \u98a8\u529b 1 \u662f \u751f\u8cea\u80fd 0.1 \u5426 \u7de9\u6162\u5730\u4f7f\u7528\u77f3\u5316\u71c3\u6599 0.000001 \u5426 \u6c34\u529b 0.1 \u901a\u5e38\u4e0d\u662f \u6f6e\u6c50 0.01 \u4e5f\u8a31 \u6d77\u6d6a 0.01 \u662f\u518d\u751f\u80fd\u6e90\u7684\u6bd4\u8f03
\u4f9d\u7167\u9019\u4e9b\u8cc7\u8a0a\uff0c\u6211\u5011\u53ef\u4ee5\u5f97\u51fa\u672a\u4f86\u4eba\u985e\u80fd\u6e90\u767c\u5c55\u7684\u4e3b\u8981\u4e09\u500b\u9762\u5411\uff1a
\u7576\u62ac\u5347\u7684\u8d8a\u9ad8\uff0c\u6240\u5132\u5b58\u7684\u80fd\u91cf\u8d8a\u5927\uff0c\u628a 1 \u516c\u5678\u7684\u6c34\u62ac\u5347 10 \u516c\u5c3a\u9700\u8981\u7684\u80fd\u91cf\u548c\u628a 0.01 \u516c\u5678\u7684\u6c34\u62ac\u5347 1000 \u516c\u5c3a\u3002\u00a0\u21a9
\u92f0\u96fb\u6c60\u662f\u4e00\u6b21\u6027\u96fb\u6c60\uff0c\u76f8\u5c0d\u800c\u8a00\u7684\u92f0\u96e2\u5b50\u96fb\u6c60\u5247\u662f\u53ef\u5145\u96fb\u96fb\u6c60\u3002\u00a0\u21a9
\u6838\u529b\u5728\u5169\u500b\u8cea\u5b50\u76f8\u8ddd 1fm \uff08\u98db\u7c73\uff0c\u7b49\u65bc \\(10^{-15}\\) \u7c73\uff09\u4e0b\u6703\u6210\u70ba\u675f\u7e1b\u9019\u5169\u500b\u8cea\u5b50\u7684\u529b\u91cf\uff0c\u4f46\u5728\u8ddd\u96e2\u5c0f\u65bc 0.7fm \u6642\u537b\u6703\u6210\u70ba\u65a5\u529b\uff0c\u6545\u800c\u5f62\u5851\u4e00\u500b\u539f\u5b50\u6838\u61c9\u8a72\u6709\u7684\u7269\u7406\u5c3a\u5bf8\u3002\u503c\u5f97\u6ce8\u610f\u7684\u662f\uff0c\u4e00\u500b\u8cea\u5b50\u6216\u4e2d\u5b50\u7684\u534a\u5f91\u5927\u7d04\u662f 0.85fm \u5de6\u53f3\uff0c\u6545\u800c\u53ef\u4ee5\u6839\u64da\u5176\u64c1\u6709\u7684\u8cea\u5b50\u548c\u539f\u5b50\u6578\u91cf\u4f86\u63a8\u8ad6\u4e00\u500b\u539f\u5b50\u6838\u7684\u5927\u81f4\u5927\u5c0f\u3002\u76f8\u5c0d\u800c\u8a00\uff0c\u4e00\u500b\u539f\u5b50\u7684\u5927\u5c0f\u537b\u662f\u4ee5\u57c3\uff08\u7b49\u65bc \\(10^{-10}\\) \u7c73\uff09\u70ba\u55ae\u4f4d\uff0c\u6545\u800c\u53ef\u4ee5\u5ffd\u7565\u539f\u5b50\u6838\u5916\u90e8\u7684\u96fb\u5b50\u5c0d\u5176\u7684\u96fb\u78c1\u529b\u3002
\u6838\u529b\u662f\u4e00\u7a2e\u5f37\u4f5c\u7528\u529b\uff08strong force\uff09\u4e0b\u7684\u7522\u7269\u3002\u5f37\u4f5c\u7528\u529b\u5728\u7d04 0.8fm \u8ddd\u96e2\u4e0b\u6703\u7528\u4f86\u675f\u7e1b\u8cea\u5b50\u5167\u7684\u57ae\u514b\u7fa4\uff0c\u4e26\u56e0\u800c\u6574\u5408\u6210\u4e00\u500b\u8cea\u5b50\u6216\u4e2d\u5b50\uff08\u9019\u5169\u8005\u90fd\u662f\u4e00\u7a2e\u91cd\u5b50\uff0c\u4e09\u500b\u57ae\u514b\u7d44\u6210\u7684\u500b\u9ad4\u90fd\u53eb\u505a\u91cd\u5b50\uff09\u3002\u8cea\u5b50\u4e2d\u7684\u57ae\u514b\u548c\u57ae\u514b\u4e4b\u9593\u662f\u900f\u904e\u50b3\u905e\u81a0\u5b50\u4f86\u7dad\u6301\u5f37\u4f5c\u7528\u529b\uff0c\u800c\u6210\u7fa4\u7684\u57ae\u514b\u6703\u76f8\u4e92\u62b5\u92b7\u5f7c\u6b64\u4e4b\u9593\u56e0\u70ba\u81a0\u5b50\u800c\u751f\u6210\u7684\u5f35\u529b\uff0c\u6545\u800c\u5f62\u6210\u7a69\u5b9a\u7684\u4f5c\u7528\u529b\u3002\u4f46\u6709\u6642\u76f8\u6d88\u7684\u81a0\u5b50\u6703\u6709\u6b98\u9918\u7684\u91cf\u8dd1\u51fa\u91cd\u5b50\uff08residual strong force\uff09\uff0c\u4e26\u548c\u5176\u4ed6\u91cd\u5b50\u5f62\u6210\u4e00\u7a2e\u985e\u4f3c\u65bc\u5f37\u4f5c\u7528\u529b\u7684\u80fd\u91cf\uff0c\u9019\u5c31\u662f\u6240\u8b02\u7684\u6838\u529b\uff08\u53ef\u4ee5\u900f\u904e\u8cbb\u66fc\u5716\u4f86\u66b8\u89e3\u9019\u4e4b\u9593\u7684\u81a0\u5b50\u4ea4\u6d41\u72c0\u6cc1\uff09\u3002\u9019\u4e5f\u89e3\u91cb\u70ba\u4ec0\u9ebc\u5f37\u529b\u660e\u660e\u6703\u96a8\u8457\u8ddd\u96e2\u7684\u589e\u52a0\u800c\u8b8a\u5f37\uff0c\u4f46\u6838\u529b\u537b\u4e0d\u6703\u3002\u9019\u540c\u6642\u4e5f\u9020\u6210\u5728\u81ea\u7136\u754c\u4e2d\u5927\u7684\u539f\u5b50\uff08\u6bd4\u925b\u9084\u91cd\u7684\u539f\u5b50\uff09\u90fd\u662f\u4e0d\u7a69\u5b9a\u7684\uff0c\u56e0\u70ba\u539f\u5b50\u6838\u7684\u5927\u5c0f\u88ab\u62c9\u5927\u4e86\uff0c\u6838\u529b\u964d\u4f4e\u5f97\u5f88\u5feb\u4f46\u96fb\u78c1\u529b\u537b\u4e0d\u5f88\u6162\uff0c\u6545\u800c\u5176\u4e2d\u7684\u6838\u529b\u7121\u6cd5\u7a69\u5b9a\u652f\u6490\u539f\u5b50\u6838\u3002
eV
\u96fb\u5b50\u4f0f\u7279\uff08Electron Volt\uff09\u662f\u6307\u4e00\u5eab\u502b\u7684\u96fb\u5b50\u5728\u771f\u7a7a\u4e2d\u7d93\u904e\u4e00\u4f0f\u7279\u7684\u96fb\u4f4d\u5dee\u5f8c\u5f97\u5230\u7684\u52d5\u80fd\u3002\u524d\u9762\u63d0\u5230\u7684\u7126\u8033\u5728\u539f\u5b50\u91cf\u7d1a\u7684\u5834\u57df\u6703\u986f\u5f97\u904e\u5927\uff0c\u4f8b\u5982\u6838\u5206\u88c2\u9700\u8981\u7d66\u4e88\u4e2d\u5b50\u7684\u80fd\u91cf\u7d04\u70ba \\(10^{-13}\\) \u7126\u8033\uff0c\u4f46\u662f\u63db\u9001\u6210\u96fb\u5b50\u4f0f\u7279\u5247\u7d04\u70ba \\(10^{6}\\) eV\uff0c\u5c0d\u61c9\u800c\u8a00\uff0c\u4e00\u96fb\u5b50\u4f0f\u7279\u7d04\u70ba \\(1.6\\times 10^{-19}\\) \u7126\u8033\u3002
\u4e0d\u53ea\u662f\u80fd\u91cf\uff0c\u900f\u904e\u8cea\u80fd\u516c\u5f0f\u548c\u6ce2\u8332\u66fc\u5e38\u6578\uff0c\u6211\u5011\u53ef\u4ee5\u628a\u8cea\u91cf\u548c\u6eab\u5ea6\u7684\u55ae\u4f4d\u5206\u5225\u8f49\u63db\u6210\u96fb\u5b50\u4f0f\u7279\uff0c1eV \u7d04\u70ba \\(1.8\\times 10^{-36}\\) kg \u548c \\(10^{4}\\) K\u3002\u4e4b\u6240\u4ee5\u6eab\u5ea6\u53ef\u4ee5\u8f49\u63db\u6210\u80fd\u91cf\uff0c\u5c31\u662f\u56e0\u70ba\u6eab\u5ea6\u4e0a\u5347\u5f8c\uff0c\u539f\u5b50\u7684\u52d5\u80fd\u6703\u4ee5\u9418\u578b\u5206\u4f48\u7684\u539f\u5247\u4e0b\uff0c\u63d0\u9ad8\u5e73\u5747\u7684\u52d5\u80fd\uff0c\u53cd\u904e\u4f86\u8aaa\uff0c\u7576\u6709\u4e86\u74b0\u5883\u4e2d\u5206\u5b50\u7684\u5e73\u5747\u52d5\u80fd\uff0c\u5c31\u53ef\u4ee5\u63db\u6210\u6eab\u5ea6\u3002
"},{"location":"feedback/physics/","title":"\u91cf\u5b50\u7684\u4e16\u754c","text":"TBD
\u76ee\u524d\u89c0\u6e2c\u5230\u7684\u5b87\u5b99\u4e2d\u6709\u6578\u5343\u5104\u9846\u661f\u661f\uff0c\u4e14\u6211\u5011\u731c\u60f3\u6574\u500b\u5b87\u5b99\u53ef\u80fd\u5df2\u6709\u4e00\u767e\u591a\u5104\u5e74\u7684\u58fd\u547d\u3002 \u55ae\u55ae\u5728\u592a\u967d\u7cfb\u4e2d\uff0c\u5c31\u6709\u6578\u767e\u842c\u9846\u6f02\u6d41\u5de8\u77f3\u8db3\u4ee5\u6bc0\u6ec5\u5730\u7403\u3002 \u9019\u4e9b\u767c\u73fe\uff0c\u90fd\u662f\u5929\u6587\u5b78\u5bb6\u3001\u5b87\u822a\u54e1\u3001\u7269\u7406\u5b78\u5bb6\u7b49\u7b49\u773e\u591a\u9818\u57df\u7684\u4eba\u5011\u4e00\u8d77\u642d\u5efa\u51fa\u4f86\u7684\u3002 \u554f\u984c\u662f\uff0c\u6211\u5011\u600e\u9ebc\u77e5\u9053\u9019\u4e9b\u6771\u897f\u7684\uff1f
\u5929\u6587\u5b78\u6709\u4ec0\u9ebc\u7528\uff1f\u9019\u662f\u6709\u4e00\u6b21\u5728\u5bb6\u770b\u96fb\u8996\u6642\uff0c\u6211\u5abd\u554f\u6211\u7684\u554f\u984c\uff0c\u6211\u60f3\u9019\u4e5f\u662f\u5f88\u591a\u4eba\u5fc3\u4e2d\u90fd\u6709\u7684\u554f\u984c\u3002 \u5176\u5be6\u79d1\u5b78\u7a81\u7834\u548c\u65e5\u5e38\u79d1\u6280\u606f\u606f\u76f8\u95dc\uff0c\u4f8b\u5982\uff1a
\u8072\u660e\uff1a\u672c\u7bc7\u662f\u4ee5\u5fc3\u5f97\u5f62\u5f0f\u64b0\u5beb\uff0c\u53d7\u60e0\u65bc\u6210\u529f\u5927\u5b78\u7684\u5929\u6587\u5b78\u5be6\u9a57\u5ba4\u548c\u611b\u4e01\u5821\u5927\u5b78\u7684\u8ab2\u7a0b AstroTech\u3002
"},{"location":"feedback/physics/astronomy/#\u6f14\u9032","title":"\u6f14\u9032","text":"\u6211\u5011\u7e3d\u662f\u80fd\u5f9e\u6b77\u53f2\u4e2d\u5b78\u5230\u4e00\u4e9b\u6771\u897f\uff0c\u56e0\u6b64\u5728\u958b\u59cb\u8ac7\u65b0\u6771\u897f\u4e4b\u524d\uff0c\u5148\u4f86\u7c21\u55ae\u56de\u9867\u4e00\u4e0b\u6574\u500b\u5929\u6587\u5b78\u7684\u516d\u500b\u91cd\u8981\u6f14\u9032\uff1a
\u5728\u89c0\u6e2c\u5929\u6587\u5b78\u4e0a\uff0c\u6211\u5011\u4e5f\u6709\u5f88\u591a\u56f0\u96e3\u9700\u8981\u9762\u5c0d\uff1a
\u5728 Milky Way \u958b\u653e\u7684\u5730\u5716\u4e2d\u6211\u5011\u53ef\u4ee5\u770b\u5230\u5b83\u5982\u4f55\u900f\u904e\u591a\u5f35\u7167\u7247\uff0c\u6574\u5408\u6210\u4e00\u500b\u5927\u7684\u5716\u7247\u3002 \u4e3b\u756b\u9762\u7684\u5716\u50cf\u53ea\u662f \u53f3\u4e0a\u89d2\u5927\u5730\u5716 \u4e2d\u7684\u5176\u4e2d\u4e00\u584a\uff0c \u800c\u9019\u500b\u5927\u5730\u5716\u53c8\u53ea\u662f\u5929\u7a7a\u4e2d\u7684\u4e00\u5c0f\u584a\u800c\u5df2\uff0c\u5982\u4e0b\u5716\u6240\u793a\u3002
\u800c\u9019\u4e00\u5f35\u5f35\u6e05\u6670\u7684\u5f71\u50cf\u53ef\u80fd\u662f\u5f9e\u5730\u7403\u4e5f\u53ef\u80fd\u662f\u5f9e\u5b87\u5b99\u4e2d\u62cd\u651d\u51fa\u4f86\u7684\u7167\u7247\uff0c\u70ba\u4e86\u5f97\u5230\u597d\u7684\u7167\u7247\uff0c\u6211\u5011\u81f3\u5c11\u8981\u6709\u9019\u4e9b\u8981\u6c42\uff1a
\u70ba\u4e86\u6536\u96c6\u66f4\u591a\u5149\u7dda\uff0c\u6211\u5011\u6703\u628a\u671b\u9060\u93e1\u505a\u5f97\u66f4\u5927\uff0c\u5176\u4e2d\u53c8\u5206\u6210\u5169\u7a2e\u671b\u9060\u93e1\u53cd\u5c04\u548c\u6298\u5c04\uff1a
\u4e00\u822c\u4f86\u8aaa\uff0c\u5728\u5927\u578b\u7684\u671b\u9060\u93e1\u4e2d\u6211\u5011\u90fd\u4f7f\u7528\u53cd\u5c04\u7684\u65b9\u5f0f\u3002 \u56e0\u70ba\u5982\u679c\u7528\u6298\u5c04\uff0c\u70ba\u4e86\u8b93\u6210\u50cf\u7d50\u679c\u8b8a\u66f4\u5927\uff0c \u6211\u5011\u9700\u8981\u8b93\u7126\u8ddd\u66f4\u9577\uff08\u6240\u4ee5\u4f60\u5728\u4e2d\u4e16\u7d00\u770b\u5230\u7684\u671b\u9060\u93e1\u4e2d\u90fd\u6703\u5f88\u9577\uff09\uff0c \u9032\u800c\u5c0e\u81f4\u4e2d\u9593\u7684\u900f\u93e1\u8b8a\u5f97\u5f88\u539a\u3002
\u7136\u800c\u53cd\u5c04\u671b\u9060\u93e1\u9020\u50f9\u4e0d\u83f2\uff0c\u5169\u500d\u5927\u7684\u671b\u9060\u93e1\u5176\u6210\u672c\u6703\u56e0\u70ba\u5de5\u7a0b\u7b49\u7b49\u56e0\u7d20\u4e0a\u5347\u5230\u7d04\u516b\u500d\u5de6\u53f3\uff08\u4e09\u6b21\u65b9\u6210\u9577\uff09\u3002
\u7e3d\u800c\u8a00\u4e4b\uff0c\u8981\u6536\u96c6\u5fae\u5f31\u7684\u5149\u9ad4\u6642\uff0c\u9700\u8981\u66f4\u5927\u7684\uff08\u53cd\u5c04\uff09\u671b\u9060\u93e1\u3002
"},{"location":"feedback/physics/astronomy/#\u92b3\u5229\u5ea6","title":"\u92b3\u5229\u5ea6","text":"\u6703\u964d\u4f4e\u92b3\u5229\u5ea6\u7684\u539f\u56e0\u5927\u81f4\u6709\u4e09\u500b\uff1a
\u7e5e\u5c04\u662f\u5149\u7dda\u5929\u751f\u7684\u7279\u6027\uff0c\u5404\u500b\u89d2\u5ea6\u9032\u4f86\u7684\u5149\u7dda\u6703\u5e72\u64fe\u6700\u7d42\u7684\u6210\u50cf\u3002
Wikimedia Commons under the CCA license.
\u6839\u64da\u7269\u7406\u7279\u6027\uff0c\u7126\u8ddd\u8d8a\u77ed\u7684\u671b\u9060\u93e1\uff0c\u9019\u7a2e\u6548\u61c9\u5c0d\u6210\u50cf\u7684\u5f71\u97ff\u6703\u8d8a\u56b4\u91cd\u3002 \u4ee5\u4eba\u7684\u773c\u775b\u70ba\u4f8b\uff0c\u7e5e\u5c04\u7684\u5e72\u64fe\u6703\u8b93\u4eba\u773c\u89c0\u5bdf\u5929\u9ad4\u7684\u6975\u9650\u9054\u5230\u7d04 25 \u5f27\u79d2\u3002
"},{"location":"feedback/physics/astronomy/#\u5927\u6c23\u5e72\u64fe","title":"\u5927\u6c23\u5e72\u64fe","text":"\u5149\u7dda\u5728\u9032\u5165\u5730\u8868\u524d\u5c31\u6703\u56e0\u70ba\u5927\u6c23\u7684\u5e72\u64fe\u800c\u6643\u52d5\uff1a
Wikimedia Commons under the CCA license.
\u9019\u6548\u679c\u5728\u8d8a\u9760\u8fd1\u5730\u8868\u8d8a\u56b4\u91cd\uff0c\u901a\u5e38\u9ad8\u5c71\u4e0a\u7684\u5e72\u64fe\u7a0b\u5ea6\u7d04\u70ba 1 \u5f27\u79d2\u3002\u6709\u5169\u7a2e\u65b9\u5f0f\u89e3\u6c7a\uff1a
\u6bcf\u500b\u671b\u9060\u93e1\u8a2d\u8a08\u6642\uff0c\u6703\u70ba\u4e86\u5404\u7a2e\u56e0\u7d20\u53bb\u59a5\u5354\u92b3\u5229\u5ea6\u3002 \u4f8b\u5982\u4eba\u7684\u773c\u775b\u5c31\u6703\u53d7\u5230\u7403\u9762\u76f8\u5dee\u7684\u5f71\u97ff\u3002
\u53c8\u4f8b\u5982\u54c8\u4f2f\u671b\u773c\u93e1\u767c\u5c04\u5230\u592a\u7a7a\u4e4b\u521d\uff0c\u4ed6\u7684\u93e1\u5b50\u548c\u7406\u8ad6\u4e0a\u6709\u5927\u7d04 1 \u6beb\u7c73\u7684\u5dee\u8ddd\uff0c\u9032\u800c\u9020\u6210\u6210\u50cf\u7684\u8aa4\u5dee\uff0c \u8a73\u898b\u592a\u7a7a\u4efb\u52d9\u7de8\u865f STS-61 \u7684\u884c\u52d5\u3002
Wikimedia Commons under the CCA license.
\u6700\u8fd1\uff082022\uff09\uff0c\u97cb\u4f2f\u671b\u9060\u93e1\u5c31\u53d7\u5230\u8edf\u9ad4\u7684\u969c\u7919\uff0c\u7121\u6cd5\u6b63\u5e38\u904b\u4f5c\u3002
"},{"location":"feedback/physics/astronomy/#\u6ce2\u9577","title":"\u6ce2\u9577","text":"\u900f\u904e \u8d6b\u7f85\u5716\uff08H-R diagram\uff09\u6211\u5011\u53ef\u4ee5\u900f\u904e\u4eae\u5ea6\u548c\u984f\u8272\u5340\u5206\u4e0d\u540c\u661f\u9ad4\u3002 X \u8ef8\u7531\u5de6\u81f3\u53f3\u70ba\u85cd\u81f3\u7d05\uff1bY \u8ef8\u7531\u4e0b\u81f3\u4e0a\u70ba\u6697\u81f3\u4eae\uff0c \u5176\u4e2d\u592a\u967d\u4f4d\u65bc\u4e2d\u9593\u504f\u5de6\u7684\u4f4d\u7f6e\uff08Luminosity = 1, Temperature = 5778K\uff09\u3002
Wikimedia Commons under the CCA license.
\u4f46\u554f\u984c\u662f\u6211\u5011\u600e\u9ebc\u53d6\u5f97\u8a72\u661f\u9ad4\u7684\u984f\u8272\u5462\uff1f \u5728\u6210\u50cf\u524d\uff0c\u6211\u5011\u5728 CCD \u524d\u9762\u88dd\u4e0a\u6ffe\u6ce2\u5668\uff08\u985e\u4f3c\u900f\u660e\u8272\u7d19\uff09\uff0c \u53ea\u8b93\u7279\u5b9a\u984f\u8272\u7684\u5149\u53ef\u4ee5\u6253\u9032\u611f\u6e2c\u5668\uff0c\u9019\u6a23\u5c31\u53ef\u4ee5\u6536\u96c6\u5230\u7279\u5b9a\u984f\u8272\u7684\u6210\u50cf\uff08\u4f8b\u5982\u85cd\u8272\uff09\u3002
\u53cd\u8986\u9019\u7a2e\u904e\u7a0b\uff0c\u5c31\u80fd\u53d6\u5f97\u8a72\u661f\u9ad4\u4e0d\u540c\u984f\u8272\u7684\u5149\u4eae\u7a0b\u5ea6\u3002 \u6700\u5f8c\u6574\u5408\u4e26\u6bd4\u8f03\u9019\u500b\u661f\u9ad4\u7684\u4e0d\u540c\u984f\u8272\uff08\u901a\u5e38\u662f\u85cd\u3001\u7d05\u3001\u9ec3\uff09\u7684\u6bd4\u4f8b\uff0c \u4f86\u5f97\u77e5\u8a72\u661f\u9ad4\u7684\u984f\u8272\u3001\u6eab\u5ea6\u7b49\u7269\u7406\u6027\u8cea\uff0c\u8a73\u898b\u5149\u8b5c\u5716\u3002
"},{"location":"feedback/physics/astronomy/#\u592a\u7a7a\u671b\u9060\u93e1","title":"\u592a\u7a7a\u671b\u9060\u93e1","text":"\u5982\u679c\u6211\u5011\u60f3\u8981\u4e86\u89e3\u661f\u9ad4\u7684\u66f4\u591a\u7d30\u7bc0\uff0c\u6211\u5011\u5c31\u53ea\u80fd\u4e0a\u592a\u7a7a\u5efa\u7acb\u671b\u9060\u93e1\u3002 \u5f88\u591a\u5de5\u4f5c\u5982\u679c\u5728\u5730\u4e0a\u505a\uff0c\u6703\u5f88\u7c21\u55ae\uff0c\u53ef\u662f\u4e00\u65e6\u5230\u4e86\u592a\u7a7a\uff0c\u5c31\u9700\u8981\u8655\u7406\u4e00\u4e9b\u68d8\u624b\u554f\u984c\uff1a
\u6211\u5011\u9700\u8981\u5f88\u591a\u8a2d\u65bd\u624d\u80fd\u767c\u5c04\u592a\u7a7a\u8239\uff1a \u63a7\u5236\u4e2d\u5fc3\u3001\u6e2c\u8a66\u6a5f\u69cb\u3001\u8edf\u786c\u9ad4\u7b49\u7b49\u3002 \u6700\u91cd\u8981\u7684\u662f\uff0c\u9019\u4e9b\u6771\u897f\u7531\u65bc\u7dad\u904b\u5efa\u8a2d\u6210\u672c\u6975\u9ad8\uff0c\u90fd\u6703\u9700\u8981\u653f\u5e9c\u652f\u6301\uff0c \u63db\u53e5\u8a71\u8aaa\uff0c\u4f60\u6703\u53d7\u5230\u56b4\u683c\u7684\u9810\u7b97\u76e3\u7763\u3002
"},{"location":"feedback/physics/astronomy/#\u80fd\u91cf","title":"\u80fd\u91cf","text":"\u5728\u5916\u592a\u7a7a\u4f60\u6c92\u6709\u96fb\u6e90\u7dda\u53ef\u4ee5\u63a5\uff0c\u4f60\u9700\u8981\u81ea\u7522\u80fd\u6e90\u3002 \u901a\u5e38\u662f\u4f7f\u7528\u5f88\u5927\u7684\u592a\u967d\u80fd\u677f\u4f86\u6355\u6349\u592a\u967d\u80fd\uff0c\u5f88\u5927\u7684\u592a\u967d\u80fd\u677f\u4ee3\u8868\u5c07\u9762\u81e8\u5230\u4e0d\u540c\u7684\u5de5\u7a0b\u6280\u8853\u548c\u77e5\u8b58\u3002
"},{"location":"feedback/physics/astronomy/#\u7a69\u5b9a","title":"\u7a69\u5b9a","text":"\u82e5\u9700\u8981\u592a\u7a7a\u671b\u9060\u93e1\u7cbe\u6e96\u63a2\u6e2c\u67d0\u500b\u661f\u9ad4\uff0c\u52e2\u5fc5\u9700\u8981\u7a69\u5b9a\u5730\u5c0d\u6e96\u76ee\u6a19\uff0c\u6709\u5e7e\u7a2e\u65b9\u5f0f\uff1a
\u70ba\u4e86\u5c0d\u6e96\u67d0\u500b\u76ee\u6a19\uff0c\u6211\u5011\u9700\u8981\u8b93\u671b\u9060\u93e1\u77e5\u9053\u81ea\u5df1\u5728\u54ea\u88e1\uff0c\u4e26\u627e\u51fa\u8a72\u76ee\u6a19\u7684\u65b9\u5411\uff1a
\u5730\u78c1\u6703\u628a\u592a\u967d\u78c1\u66b4\u532f\u96c6\u5728\u8303\u827e\u502b\u8f3b\u5c04\u5e36\uff08Van Allen radiation belt\uff09\u4e0a\uff0c \u6240\u4ee5\u9700\u8981\u8b93\u592a\u7a7a\u8239\u79fb\u52d5\u5230\u8a72\u8f3b\u5c04\u5e36\u4e4b\u5916\u7684\u5730\u65b9\u3002
\u5728\u5916\u592a\u7a7a\u6709\u7121\u7167\u5c04\u5230\u592a\u967d\uff0c\u6703\u8b93\u6eab\u5ea6\u5dee\u8ddd\u5f88\u5927\u3002 \u70ba\u4e86\u7dad\u6301\u671b\u9060\u93e1\u7684\u7a69\u5b9a\uff0c\u6211\u5011\u6703\u9700\u8981\u906e\u967d\u677f\uff0c \u4f8b\u5982\u97cb\u4f2f\u671b\u9060\u93e1\u7528\u4e86\u4e00\u500b\u7db2\u7403\u5834\u5927\u5c0f\u7684\u906e\u967d\u677f
\u9019\u88e1\u6709\u4e00\u500b\u8981\u6ce8\u610f\u7684\u5c0f\u77e5\u8b58\uff1a\u62c9\u683c\u6717\u65e5\u9ede\u3002 \u5f88\u591a\u592a\u7a7a\u8a2d\u5099\u90fd\u6703\u8eb2\u5728\u5730\u7403\u5c0d\u61c9\u592a\u967d\u7684\u6b63\u5f8c\u65b9\uff0c\u4e26\u5229\u7528\u5730\u7403\u4f86\u906e\u967d\uff0c \u9019\u500b\u4f4d\u7f6e\u7a31\u70ba\u62c9\u683c\u6717\u65e5\u9ede \uff08\u4e8b\u5be6\u4e0a\u6709\u56db\u500b\u4e0d\u540c\u529f\u80fd\u7684\u9ede\uff0c\u4f8b\u5982\u5728\u5730\u7403\u548c\u592a\u967d\u7684\u4e2d\u9593\u7684\u9ede\uff0c\u80fd\u8b93\u8a2d\u65bd\u8655\u65bc\u5169\u7a2e\u91cd\u529b\u7684\u5e73\u8861\u9ede\uff09\u3002
"},{"location":"feedback/physics/astronomy/#\u788e\u77f3","title":"\u788e\u77f3","text":"\u592a\u7a7a\u4e2d\u7684\u7269\u9ad4\u5e7e\u4e4e\u6c92\u6709\u7a7a\u6c23\u963b\u529b\uff0c\u6240\u4ee5\u53ef\u80fd\u6703\u4ee5\u6bcf\u79d2\u6578\u5341\u516c\u91cc\u7684\u901f\u5ea6\u671d\u671b\u9060\u93e1\u649e\u64ca\u3002
Wikimedia Commons under the CCA license.
\u9019\u985e\u65b0\u805e\u5f88\u591a\uff0c\u4f8b\u5982\uff1a
\u592a\u7a7a\u671b\u9060\u93e1\u6c92\u8fa6\u6cd5\u4f7f\u7528 Wi-Fi\uff0c\u4f46\u53ef\u4ee5\u900f\u904e\u96fb\u78c1\u675f\u6253\u51fa\u4e8c\u9032\u4f4d\u8cc7\u6599\u3002 \u70ba\u4e86\u7dad\u6301\u50b3\u8f38\u7684\u7a69\u5b9a\u6027\uff0c\u6703\u8b93\u671b\u9060\u93e1\u5f85\u5728\u96e2\u5730\u7403\u9060\u4e00\u9ede\u7684\u5730\u65b9\uff0c\u9019\u6a23\u7e5e\u5730\u9031\u671f\u624d\u6703\u9577\uff0c \u63db\u53e5\u8a71\u8aaa\uff0c\u624d\u80fd\u5f85\u5728\u540c\u4e00\u500b\u5730\u65b9\u4e45\u4e00\u9ede\uff0c\u8b93\u8cc7\u6599\u50b3\u8f38\u7a69\u5b9a\u4e00\u9ede\u3002
\u6211\u5011\u4e5f\u53ef\u4ee5\u628a\u671b\u9060\u93e1\u904b\u884c\u5230 \u5730\u7403\u975c\u6b62\u8ecc\u9053\uff08Geostationary orbit\uff09\uff0c\u5728\u90a3\u88e1\u548c\u5730\u7403\u81ea\u8f49\u540c\u6b65\uff0c \u5c31\u53ef\u4ee5\u5f85\u5728\u76f8\u5c0d\u65bc\u5730\u8868\u4e0d\u6703\u79fb\u52d5\u7684\u4f4d\u7f6e\u9054\u5230\u7a69\u5b9a\u7684\u8cc7\u6599\u50b3\u8f38\u3002
"},{"location":"feedback/physics/astronomy/#\u592a\u7a7a\u671b\u9060\u93e1\u7684\u512a\u7f3a\u9ede","title":"\u592a\u7a7a\u671b\u9060\u93e1\u7684\u512a\u7f3a\u9ede","text":"\u7e3d\u800c\u8a00\u4e4b\uff0c\u70ba\u4e86\u89e3\u6c7a\u4e0a\u8ff0\u554f\u984c\uff0c\u505a\u4e00\u500b\u592a\u7a7a\u671b\u9060\u93e1\u6703\u9700\u8981\u5f88\u591a\u5f88\u591a\u5f88\u591a\u5f88\u591a\u7684\u9322\u3002
\u9019\u9084\u4e0d\u7b97\u4e0a\u90a3\u4e9b\u6602\u8cb4\u53c8\u8017\u6642\u7684\u7dad\u4fee\u4efb\u52d9\u3002
Wikimedia Commons under the CCA license.
\u96d6\u7136\u592a\u7a7a\u671b\u9060\u93e1\u6602\u8cb4\uff0c\u537b\u53ef\u4ee5\u907f\u514d\u4ee5\u4e0b\u7684\u5f71\u97ff\uff1a
\u53f3\u908a\u7684\u5716\u53ef\u4ee5\u770b\u5230\uff1a
\u63a5\u8457\u770b\u5de6\u908a\u7684\u5716\uff1a
\u5728\u4e0a\u4e00\u6bb5\u4e2d\uff0c\u4ecb\u7d39\u4e86 \u8d6b\u7f85\u5716 \u4e2d\u661f\u9ad4\u7684\u5206\u4f48\uff0c \u4f60\u6703\u6ce8\u610f\u5230\u5176\u6709\u4e00\u500b\u4e3b\u8981\u5206\u4f48\u5e36\u5f9e\u53f3\u4e0b\u81f3\u5de6\u4e0a\uff0c\u6211\u5011\u7a31\u5176\u70ba \u4e3b\u5e8f\u5e36\uff08Major sequence\uff09\u3002 \u9019\u4ee3\u8868\u5927\u90e8\u5206\u661f\u661f\u5728\u8d8a\u63a5\u8fd1\u85cd\u8272\uff08\u8d8a\u71b1\uff09\u5b83\u7684\u767c\u5149\u7a0b\u5ea6\u6703\u8d8a\u9ad8\uff0c\u70ba\u4ec0\u9ebc\uff1f
\u56e0\u70ba\u8d8a\u4eae\u7684\u661f\u661f\uff0c\u5b83\u6703\u71c3\u71d2\u8d8a\u591a\u7684\u71c3\u6599\uff08\u6838\u878d\u5408\u4e2d\u7684\u6c2b\u539f\u5b50\uff09\uff0c\u5176\u80fd\u9020\u6210\u7684\u6eab\u5ea6\u4e5f\u5c31\u8d8a\u9ad8\u3002 \u4f46\u662f\u70ba\u4ec0\u9ebc\u71c3\u71d2\u4e2d\u7684\u661f\u661f\u4e0d\u6703\u7206\u70b8\u5462\uff1f
\u9019\u662f\u56e0\u70ba\u661f\u9ad4\u4e0d\u53ea\u5728\u627f\u53d7\u71c3\u71d2\u6240\u9020\u6210\u7684\u5411\u5916\u58d3\u529b\uff0c\u540c\u6642\u4e5f\u9762\u5c0d\u8457\u91cd\u529b\u7684\u58d3\u7e2e\u3002 \u5728\u9019\u5169\u500b\u529b\u91cf\u7684\u5e73\u8861\u4e0b\uff0c\u661f\u661f\u7684\u5927\u5c0f\u5c31\u80fd\u5920\u7dad\u6301\u8457\uff0c\u4f8b\u5982\u73fe\u5728\u6211\u5011\u770b\u5230\u7684\u592a\u967d\u3002
\u6211\u5011\u900f\u904e\u89c0\u5bdf\u6838\u878d\u5408\u7684\u7522\u54c1\uff1a\u5fae\u4e2d\u5b50\uff0c\u4f86\u9a57\u8b49\u6211\u5011\u7684\u731c\u60f3\u3002
\u5728 \u4e3b\u5e8f\u5e36 \u4e4b\u4e0a\uff0c\u4e5f\u6709\u4e00\u7fa4\u5206\u5e03\u8f03\u70ba\u5bc6\u96c6\u7684\u5340\u57df\uff0c \u6211\u5011\u7a31\u5176\u70ba\u5de8\u661f\u5206\u652f\uff08Giant branch\uff09\uff0c\u5c31\u662f\u5e38\u807d\u5230\u7684\u7d05\u5de8\u661f\u7684\u6240\u5728\u4f4d\u7f6e\u3002
\u7d05\u5de8\u661f\u7684\u6210\u56e0\u662f\u661f\u661f\u7684\u71c3\u71d2\u539f\u6599\uff08\u6838\u878d\u5408\u4e2d\u7684\u6c2b\u539f\u5b50\uff09\u7528\u76e1\u5f8c\uff0c\u91cd\u529b\u6703\u6253\u8d0f\u9019\u5834\u62c9\u92f8\u6230\uff0c \u4e26\u958b\u59cb\u6536\u7e2e\u661f\u9ad4\u5167\u90e8\u3002 \u7576\u6536\u7e2e\u5230\u4e00\u5b9a\u7a0b\u5ea6\u5f8c\uff0c\u7531\u65bc\u5176\u6975\u9ad8\u6eab\u9ad8\u58d3\uff0c\u5e36\u52d5\u5468\u570d\u7684\u7269\u8cea\u9032\u884c\u65b0\u4e00\u6ce2\u7684\u6838\u878d\u5408\u53cd\u61c9 \uff08\u82e5\u661f\u9ad4\u904e\u65bc\u9f90\u5927\uff0c\u6536\u7e2e\u901f\u5ea6\u5feb\u5230\u4e0d\u8db3\u4ee5\u7522\u751f\u8db3\u5920\u7684\u529b\u5c0d\u6297\uff0c\u5c31\u6703\u5f62\u6210\u9ed1\u6d1e\uff09\u3002 \u9019\u500b\u53cd\u61c9\u6703\u52a0\u901f\u661f\u9ad4\u7684\u71c3\u71d2\uff0c\u6700\u5f8c\u958b\u59cb\u7a81\u7834\u91cd\u529b\u7684\u5e73\u8861\u5411\u5916\u64f4\u5f35\uff0c \u5f62\u6210\u7d05\u5de8\u661f\uff0c\u9019\u4e5f\u662f\u4e94\u5341\u5104\u5e74\u5f8c\uff0c\u6211\u5011\u7684\u592a\u967d\u53ef\u80fd\u6703\u9762\u81e8\u7684\u72c0\u614b\u3002
\u7d05\u5de8\u661f\u5728\u7206\u70b8\u524d\u5f8c\uff0c\u6703\u56e0\u70ba\u6975\u5ea6\u7684\u9ad8\u6eab\u548c\u9ad8\u58d3\uff0c\u751f\u6210\u8a31\u591a\u91cd\u7684\u5143\u7d20\uff0c\u5305\u62ec\u78b3\u3001\u6c27\u548c\u91d1\u5c6c\u3002 \u6700\u5f8c\u5674\u5c04\u51fa\u7684\u6c23\u9ad4\u548c\u7269\u8cea\uff0c\u53c8\u6703\u56e0\u70ba\u91cd\u529b\u548c\u96fb\u78c1\u529b\u5438\u5f15\uff0c\u6700\u7d42\u91cd\u65b0\u751f\u6210\u4e00\u500b\u65b0\u7684\u661f\u9ad4\u3002
\u54c8\u4f2f\u671b\u9060\u93e1\u62cd\u7684 Crab Nebula\u3002
\u54c8\u4f2f\u671b\u9060\u93e1\u62cd\u7684 Hourglass Nebula\u3002
Wikimedia Commons under the CCA license.
"},{"location":"feedback/physics/astronomy/#\u9ed1\u6d1e","title":"\u9ed1\u6d1e","text":"\u6709\u4e86\u661f\u9ad4\u7684\u77e5\u8b58\u548c\u592a\u7a7a\u671b\u9060\u93e1\u7684\u5efa\u9020\uff0c\u6211\u5011\u7d42\u65bc\u53ef\u4ee5\u8aaa\u660e\u5982\u4f55\u8a08\u7b97\u9ed1\u6d1e\u7684\u57fa\u672c\u8cc7\u6599\u4e86\u3002
\u7576\u661f\u9ad4\u904e\u65bc\u9f90\u5927\uff0c\u5176\u56e0\u70ba\u91cd\u529b\u800c\u6536\u7e2e\u7684\u529b\u5927\u5230\u6c92\u6709\u4efb\u4f55\u529b\u80fd\u6709\u6548\u5c0d\u6297\u5176\u5b58\u5728\u6642\uff0c\u5c31\u6703\u5f62\u6210\u9ed1\u6d1e\u3002 \u9ed1\u6d1e\u5f62\u6210\u6642\uff0c\u5b83\u7684\u91cd\u529b\u6703\u5927\u5230\u5f71\u97ff\u4efb\u4f55\u9760\u8fd1\u4ed6\u7684\u7269\u9ad4\uff0c \u7576\u661f\u9ad4\u7d93\u904e\u9ed1\u6d1e\u4e26\u88ab\u5438\u5f15\u6642\uff08\u6709\u500b\u81e8\u754c\u9ede\uff09\uff0c\u8a72\u661f\u9ad4\u6703\u958b\u59cb\u88ab\u6495\u626f\u7834\u58de\uff08\u6f6e\u6c50\u7834\u58de\u4e8b\u4ef6\uff0ctidal disruption event\uff0cTDE\uff09\u3002 \u88ab\u6495\u626f\u51fa\u4f86\u7684\u7269\u8cea\u6703\u958b\u59cb\u7e5e\u8457\u9ed1\u6d1e\u8f49\uff0c\u8d8a\u7e5e\u8d8a\u5feb\uff0c\u6eab\u5ea6\u4e5f\u8ddf\u8457\u8d8a\u4f86\u8d8a\u9ad8\uff0c \u9019\u6642\uff0c\u5176\u91cb\u653e\u7684\u9ad8\u80fd\u96fb\u78c1\u6ce2\uff08\u4f8b\u5982 X\u5c04\u7dda\uff09\u5c31\u53ef\u4ee5\u88ab\u6355\u6349\uff0c\u9032\u800c\u89c0\u5bdf\u51fa\u9ed1\u6d1e\u7684\u5b58\u5728\u3002
\u6211\u5011\u5c31\u4f86\u8a66\u8457\u63a8\u7b97\u4e00\u4e0b \u5929\u9d5d\u5ea7X-1 \u9019\u500b\u6700\u5148\u88ab\u8a8d\u70ba\u662f\u9ed1\u6d1e\u7684\u661f\u9ad4\u7684\u91cd\u91cf\u548c\u5927\u5c0f\u5427\uff01
\u9996\u5148\u6211\u5011\u770b\u4e00\u4e0b\u5b83\u7684\u8cea\u91cf\u3002
\u6211\u5011\u53ef\u4ee5\u900f\u904e\u7e5e\u884c\u9ed1\u6d1e\u7684\u4e00\u500b\u85cd\u5de8\u661f\u4f86\u7c21\u55ae\u8a08\u7b97\u725b\u9813\u529b\u5b78\u4e26\u53d6\u5f97\u9ed1\u6d1e\u7684\u8cea\u91cf\u3002
\u5047\u8a2d\u9ed1\u6d1e\uff08\u8cea\u91cf \\(M\\)\uff09\u548c\u85cd\u5de8\u661f\uff08\u8cea\u91cf \\(m\\)\uff09\u6703\u56e0\u70ba\u91cd\u529b\u800c\u5f7c\u6b64\u5438\u5f15\uff0c\u5176\u529b\u6703\u7528\u4f86\u7576\u4f5c\u7e5e\u884c\u7684\u89d2\u901f\u5ea6\uff08v\uff09\uff1a
\\[\\begin{align*} F &= \\frac{GMm}{r^2} \\\\ &= \\frac{mv^2}{r} \\end{align*}\\]\u53e6\u5916\u6211\u5011\u4e5f\u77e5\u9053\u89d2\u901f\u5ea6\u7684\u8a08\u7b97\u516c\u5f0f\u70ba\uff1a
\\[\\begin{align*} v = \\frac{2\\pi r}{t} \\end{align*}\\]\u6574\u5408\u4e0a\u8ff0\u5169\u500b\u5f0f\u5b50\uff0c\u5c31\u53ef\u4ee5\u5f97\u5230\u8a72\u9ed1\u6d1e\u7684\u8cea\u91cf\u516c\u5f0f\uff1a
\\[\\begin{align*} M = \\frac{v^3t}{2\\pi G} \\end{align*}\\]\u628a\u5e38\u6578\u5e36\u9032\u53bb\u7b97\u5f8c\uff0c\u9ed1\u6d1e\u8cea\u91cf\u7d04\u70ba 16 \u500d\u7684\u592a\u967d\u8cea\u91cf\u3002 \u63a5\u8457\u6211\u5011\u4f86\u63a8\u7b97\u4e00\u4e0b\u5b83\u7684\u9ad4\u7a4d\u4e0a\u9650\u3002
\u7531\u65bc\u6211\u5011\u89c0\u5bdf\u5230\u90a3\u4e9b\u88ab\u9ed1\u6d1e\u6495\u626f\u51fa\u4f86\u7684\u7269\u8cea\u6240\u767c\u5c04\u51fa\u7684 X\u5c04\u7dda \u7684\u5f37\u5ea6\u6bcf\u79d2\u6703\u8b8a\u52d5\u7d04\u4e00\u767e\u6b21 \uff08\u4e00\u4e0b\u8b8a\u5f37\u4e00\u4e0b\u8b8a\u5f31\uff0c\u6bcf\u79d2\u91cd\u8907\u8457\u9019\u500b\u898f\u5f8b\u4e00\u767e\u6b21\uff09\uff0c \u9019\u5c31\u4ee3\u8868\u5468\u570d\u7684\u7269\u9ad4\u7e5e\u884c\u6642\u9593\u7d04\u70ba\u767e\u5206\u4e4b\u4e00\u79d2\u3002
\u5047\u8a2d\u5468\u570d\u7269\u9ad4\u7e5e\u884c\u901f\u5ea6\u7d04\u70ba\u5149\u901f\uff08\\(3 \\times 10^8m\\)\uff09\uff0c\u53ef\u5f97\u7e5e\u884c\u5468\u9577\u70ba\uff1a
\\[\\begin{align*} r &= vt \\\\ &= 3\\times 10^{8} \\times \\frac{1}{100} \\\\ &= 3\\times 10^{6}m \\\\ &= 3\\times 10^{3}km \\end{align*}\\]\u63db\u53e5\u8a71\u8aaa\uff0c\u5929\u9d5d\u5ea7X-1 \u5728\u50c5\u50c5\u7684 3000 \u516c\u91cc\u5167\u5c31\u88dd\u8457 16 \u9846\u592a\u967d\u7684\u8cea\u91cf\u3002
\u7576\u7269\u9ad4\u592a\u5927\uff0c\u4e14\u901f\u5ea6\u592a\u5feb\u6642\uff0c\u6211\u5011\u5c31\u9700\u8981\u72f9\u7fa9\u548c\u5ee3\u7fa9\u76f8\u5c0d\u8ad6\u4f86\u8a08\u7b97\u66f4\u7cbe\u6e96\u7684\u7d50\u679c\uff0c\u4f46\u9019\u908a\u5ffd\u7565\u3002 \u540c\u6a23\u7684\uff0c\u96d9\u661f\u904b\u884c\u7684\u8a08\u7b97\u4e5f\u6703\u6bd4\u4e0a\u8ff0\u7684\u9084\u8981\u8907\u96dc\u5f88\u591a\uff0c\u9019\u908a\u4e5f\u5ffd\u7565\u3002
\u4e4b\u6240\u4ee5\u6709\u8fa6\u6cd5\u5f97\u5230\u9019\u500b\u7d50\u679c\uff0c\u90fd\u662f\u56e0\u70ba\u6211\u5011\u6210\u529f\u5728\u5916\u592a\u7a7a\u88dd\u8a2d\u4e86\u671b\u9060\u93e1\uff0c\u4e26\u89c0\u5bdf X\u5c04\u7dda \u7684\u8b8a\u5316\u3002
"},{"location":"feedback/physics/astronomy/#\u611f\u6e2c\u5668","title":"\u611f\u6e2c\u5668","text":"\u611f\u6e2c\u5668\u66ff\u6211\u5011\u505a\u56db\u4ef6\u4e8b\uff1a
\u4ee5\u54c8\u4f2f\u8d85\u6df1\u7a7a\u8996\u5834\uff08Hubble eXtreme Deep Field, HXDF\uff09\u70ba\u4f8b\uff0c \u5b83\u4e4b\u6240\u4ee5\u80fd\u611f\u6e2c\u5b87\u5b99\u4e2d\uff08\u5c0d\u6211\u5011\u4f86\u8aaa\uff09\u6700\u6697\u6700\u9060\u7684\u661f\u7cfb\uff0c\u5c31\u662f\u7ad9\u5728\u539f\u5730\u66dd\u5149\u4e86 23 \u5929\u3002
Wikimedia Commons under the CCA license.
\u6642\u5149\u6a5f\u5668
\u7531\u65bc\u5149\u7dda\u50b3\u905e\u901f\u5ea6\u7684\u9650\u5236\uff0c\u6211\u5011\u770b\u5230\u90a3\u4e9b\u6700\u9060\u7684\u661f\u9ad4\uff0c\u5176\u5be6\u662f\u8a72\u661f\u9ad4\u65e9\u5e74\u7684\u6a23\u5b50\u3002
\u4f8b\u5982\u76ee\u524d\uff082022\uff09\u53ef\u89c0\u6e2c\u6700\u9060\u7684\u661f\u9ad4\u662f GN-z11\uff0c \u5b83\u8ddd\u96e2\u5730\u7403 134 \u5104\u5149\u5e74\uff0c \u63db\u53e5\u8a71\u8aaa\uff0c\u89c0\u5bdf\u5b83\u5c31\u53ef\u4ee5\u89c0\u5bdf\u51fa\u5927\u7206\u70b8\u56db\u5104\u5e74\u5f8c\u661f\u9ad4\u7684\u6a23\u5b50\u3002
\u6211\u5011\u5229\u7528\u9019\u7a2e\u7279\u6027\u4f86\u91d0\u6e05\u5b87\u5b99\u521d\u671f\u7684\u6a21\u6a23\u3002
"},{"location":"feedback/physics/astronomy/#ccd","title":"CCD","text":"1980 \u5e74\u4ee3\u767c\u660e\u7684 CCD \u548c\u50b3\u7d71\u7684\u611f\u5149\u5100\u5668\u6700\u4e3b\u8981\u7684\u4e0d\u540c\u5728\u65bc\u6578\u4f4d\u5316\u3002 \u9664\u6b64\u4e4b\u5916\uff0c\u5b83\u4ea6\u6709\u5f37\u5927\u7684\u611f\u5149\u80fd\u529b\u3002 \u4f8b\u5982\uff0c \u50b3\u7d71\u7684\u611f\u5149\u5e79\u677f\u80fd\u8655\u7406\u7d04 1% \u63a5\u6536\u5230\u7684\u5149\u7dda\uff0c \u4f46 CCD \u537b\u53ef\u4ee5\u8655\u7406\u5230 80%\u3002
"},{"location":"feedback/physics/astronomy/#\u4ed6\u600e\u9ebc\u904b\u4f5c\u7684","title":"\u4ed6\u600e\u9ebc\u904b\u4f5c\u7684\uff1f","text":"\u5149\u7dda\u7684\u80fd\u91cf\u548c\u5176\u983b\u7387\uff08\u6ce2\u9577\uff09\u6709\u95dc\uff0c\u8d8a\u9ad8\u983b\u7684\u5149\uff0c\u80fd\u91cf\u8d8a\u5f37\u3002 \u7576\u5149\u7dda\u64c1\u6709\u8db3\u5920\u9ad8\u7684\u80fd\u91cf\u6642\uff0c\u5c31\u53ef\u80fd\u8b93\u539f\u5b50\u88e1\u7684\u96fb\u5b50\u9032\u884c\u80fd\u91cf\u8e8d\u9077\u3002 \u96fb\u5b50\u9032\u884c\u80fd\u91cf\u8e8d\u9077\u5f8c\uff0c\u5c31\u6709\u53ef\u80fd\u5728\u5176\u4ed6\u9760\u8fd1\u7684\u539f\u5b50\u9032\u884c\u9077\u79fb\uff0c\u5982\u4e0b\u5716\u6240\u793a\u3002
\u80fd\u8b93\u7279\u5b9a\u7269\u8cea\u7684\u96fb\u5b50\u8e8d\u9077\u5230\u53ef\u4ee5\u50b3\u5c0e\u7684\u7a0b\u5ea6\u6642 \uff08\u8a72\u81e8\u754c\u9ede\u7a31\u70ba\u5c0e\u5e36\uff09\uff0c \u5c31\u53ef\u4ee5\u4f9d\u6b64\u4f86\u5224\u65b7\u8a72\u5149\u7dda\u7684\u983b\u7387\u3002 \u7576\u6301\u7e8c\u7167\u5c04\u96fb\u78c1\u6ce2\uff0c\u4e26\u7d2f\u7a4d\u8db3\u5920\u7684\u96fb\u5b50\u6642\uff0c \u5c31\u53ef\u4ee5\u628a\u9019\u4e9b\u96fb\u5b50\u6536\u96c6\u4e26\u8a08\u7b97\u6578\u91cf\uff0c\u6700\u7d42\u4f9d\u6b64\u4f86\u5224\u65b7\u5149\u7dda\u7684\u5f37\u5f31\u3002
\u64c1\u6709\u9019\u7a2e\u7279\u6027\u7684\u7269\u8cea\u9996\u9078\u5c31\u662f\u77fd\uff0c\u56e0\u70ba\u5b83\u5f88\u4fbf\u5b9c\u53c8\u5f88\u597d\u5370\u5237\u51fa\u96fb\u8def\u3002 \u4e5f\u56e0\u70ba\u5b83\u7684\u4fbf\u5229\u6027\uff0c\u6240\u4ee5\u64c1\u6709\u5f88\u591a\u65b9\u9762\u7684\u61c9\u7528\uff0c\u4e5f\u9032\u4e00\u6b65\u8b93\u66f4\u591a\u4eba\uff08\u975e\u5929\u6587\u5b78\u4e0a\uff09\u9032\u884c\u4e0d\u540c\u7684\u5be6\u9a57\u8207\u5617\u8a66\u3002 \u8d8a\u591a\u7684\u95dc\u6ce8\u5c31\u53c8\u9032\u4e00\u6b65\u7684\u63d0\u5347\u8a72\u7269\u8cea\u7684\u826f\u7387\u548c\u529f\u80fd\uff0c\u4e5f\u5c31\u91cd\u65b0\u56de\u994b\u7d66\u5929\u6587\u5b78\u7684\u9032\u5c55\u3002 \u9019\u4e5f\u56de\u5230\u6700\u4e00\u958b\u59cb\u7684\u554f\u984c\uff1a\u5929\u6587\u5b78\u6709\u4ec0\u9ebc\u7528\uff1f
"},{"location":"feedback/physics/astronomy/#\u8981\u600e\u9ebc\u6536\u96c6\u96fb\u5b50","title":"\u8981\u600e\u9ebc\u6536\u96c6\u96fb\u5b50\uff1f","text":"CCD \u662f\u7528 MOS \uff08Metal\u2013Oxide\u2013Semiconductor\uff09\u4f86\u6536\u96c6\u96fb\u5b50\u3002 \u5229\u7528\u5916\u90e8\u96fb\u58d3\uff08Metal\uff09\u8b93\u534a\u5c0e\u9ad4\uff08Semiconductor\uff09\u4e2d\u7684\u96fb\u5b50\u671d\u8457\u7279\u5b9a\u65b9\u5411\u524d\u9032\uff0c \u6700\u7d42\u6703\u6709\u500b\u7d55\u7de3\u9ad4\uff08Oxide\uff09\u64cb\u4f4f\u96fb\u5b50\uff0c\u4e26\u56f0\u4f4f\u4ed6\u3002
CCD \u4e2d\u7684\u6bcf\u4e00\u500b\u4f4d\u5143\u90fd\u662f\u4e00\u7d44 MOS\uff0c\u800c\u4e00\u500b\u4f4d\u5143\u7d04\u70ba \\(15\\mu m\\)\uff0c \u6240\u4ee5 6x6 \\(cm\\) \u7684 CCD \u5c31\u6709 4000x4000 \u500b\u4f4d\u5143\uff08\\(6cm / 15\\mu m = 4000\\)\uff09\u3002
"},{"location":"feedback/physics/astronomy/#\u8981\u600e\u9ebc\u8a08\u7b97\u96fb\u5b50","title":"\u8981\u600e\u9ebc\u8a08\u7b97\u96fb\u5b50\uff1f","text":"CCD \u6709\u5169\u7a2e\u4e3b\u6d41\u65b9\u5f0f\u4f86\u8a08\u7b97\u6536\u96c6\u5230\u7684\u96fb\u5b50\u6578\u91cf\uff0c \u4e00\u7a2e\u7a31\u70ba CMOS \u6216 Active Pixel Sensors \u7684\u65b9\u6cd5\u3002 \u5feb\u901f\u4f46\u6703\u6709\u96dc\u8a0a\uff0c\u9069\u5408\u7528\u5728\u4e00\u822c\u76f8\u6a5f\u3002
\u53e6\u4e00\u7a2e\u5247\u662f\u9069\u5408\u7528\u5728\u671b\u9060\u93e1\u4e0a\uff0c\u7a31\u70ba Charge Coupling \u7684\u65b9\u6cd5\u3002 \u900f\u904e\u5faa\u5e8f\uff08\u4ee5 6 \\(cm\\) \u7684 CCD \u4f86\u8aaa\uff0c\u6703\u6709\u56db\u5343\u5c64\uff09\u91cb\u653e\u96fb\u58d3\uff0c \u628a\u96fb\u5b50\u6162\u6162\u7d2f\u7a4d\u4e26\u7d71\u8a08\uff0c\u9019\u65b9\u6cd5\u6162\uff086x6 \\(cm\\) \u7684 CCD \u9700\u8981\u7d04\u4e09\u5341\u79d2\u4f86\u5224\u8b80\uff09\u4f46\u662f\u7cbe\u6e96\u3002
"},{"location":"feedback/physics/astronomy/#\u7d05\u5916\u7dda\u611f\u6e2c","title":"\u7d05\u5916\u7dda\u611f\u6e2c","text":"\u7406\u89e3 CCD \u9019\u985e\u611f\u5149\u8a2d\u5099\u5f8c\uff0c\u6211\u5011\u5c31\u53ef\u4ee5\u958b\u59cb\u8a0e\u8ad6\uff0c\u8981\u600e\u9ebc\u300c\u62cd\u651d\u300d\u53ef\u898b\u5149\u4e4b\u5916\u7684\u5149\u6e90\uff0c\u4f8b\u5982\u7d05\u5916\u7dda\u3002
\u4efb\u4f55\u6771\u897f\u53ea\u8981\u6709\u6eab\u5ea6\u5c31\u6703\u767c\u5c04\u7d05\u5916\u7dda\uff0c\u4f8b\u5982\u51b0\u584a\u3001\u88ab\u5fae\u5875\u5305\u88f9\u7684\u7269\u9ad4\u3001\u5b87\u5b99\u908a\u7de3\u7684\u7269\u9ad4\u3002 \u7136\u800c\u7d05\u5916\u7dda\u56e0\u70ba\u592a\u4f4e\u983b\uff0c\u6240\u4ee5\u5176\u651c\u5e36\u7684\u80fd\u91cf\u4e0d\u8db3\u4ee5\u8b93\u77fd\u9032\u5165\u5c0e\u5e36\uff0c \u4e5f\u56e0\u6b64\u6211\u5011\u9700\u8981\u5229\u7528\u5176\u4ed6\u7269\u8cea\u4f86\u88fd\u4f5c\u611f\u5149\u8a2d\u5099\uff0c\u4f8b\u5982 CMT\u3002
\u7279\u6b8a\u5149\u6e90\u7684\u611f\u6e2c\u8a2d\u5099\u9700\u8981\u5927\u91cf\u8cc7\u91d1
\u6bcf\u7a2e\u4e0d\u4e00\u6a23\u983b\u7387\u7684\u96fb\u78c1\u6ce2\uff0c\u5f88\u53ef\u80fd\u5c31\u6703\u9700\u8981\u7528\u4e0d\u4e00\u6a23\u7684\u6750\u8cea\u4f86\u611f\u6e2c\uff0c \u800c\u9019\u4e9b\u6750\u8cea\u4e0d\u6703\u50cf\u77fd\u9019\u9ebc\u901a\u7528\uff0c\u9019\u9ebc\u4fbf\u5b9c\u3002 \u6240\u4ee5\u901a\u5e38\u9019\u7a2e\u611f\u6e2c\u5668\u90fd\u6703\u53c8\u6602\u8cb4\u53c8\u7cbe\u5bc6\u4e14\u53ef\u80fd\u5168\u7403\u5c31\u53ea\u6709\u6578\u500b\u5718\u968a\u5728\u505a\u7814\u7a76\u800c\u5df2\u3002
"},{"location":"feedback/physics/astronomy/#\u7d05\u5916\u7dda\u611f\u6e2c\u7684\u61c9\u7528","title":"\u7d05\u5916\u7dda\u611f\u6e2c\u7684\u61c9\u7528","text":"\u6709\u4e86\u7d05\u5916\u7dda\uff0c\u6211\u5011\u9664\u4e86\u53ef\u4ee5\u770b\u5230\u7279\u6b8a\u661f\u9ad4\u4e4b\u5916\uff0c\u9084\u53ef\u4ee5\u7528\u4f86\u89c0\u5bdf\u8a72\u661f\u9ad4\u662f\u5426\u6b63\u5728\u9060\u96e2\u3002
Sky at Night Magazine
\u56e0\u70ba \u90fd\u535c\u52d2\u6548\u61c9 \u548c \u5927\u7206\u70b8\u7406\u8ad6\uff0c\u6211\u5011\u77e5\u9053\u8d8a\u63a5\u8fd1\u5b87\u5b99\u908a\u7de3\u7684\u661f\u9ad4\uff0c\u9060\u96e2\u6211\u5011\u7684\u901f\u5ea6\u8d8a\u5feb\u3002 \u4e5f\u56e0\u6b64\uff0c\u900f\u904e\u7d05\u79fb\u73fe\u8c61\u548c\u7d05\u5916\u7dda\u611f\u6e2c\u7d50\u679c\uff0c\u6211\u5011\u53ef\u4ee5\u77e5\u9053\u9019\u500b\u661f\u9ad4\u9060\u96e2\u6211\u5011\u7684\u901f\u5ea6\uff0c\u4e26\u63db\u7b97\u5176\u548c\u6211\u5011\u7684\u8ddd\u96e2\u3002
Early star-forming galaxies and the re-ionization of the Universe
\u4ee5\u4e0a\u5716\u54c8\u4f2f\u8d85\u6df1\u7a7a\u8996\u5834\u4e2d\u7684\u5176\u4e2d\u4e00\u500b\u661f\u7cfb\u70ba\u4f8b\uff0c\u6211\u5011\u53ea\u80fd\u900f\u904e\u7d05\u5916\u7dda\u53bb\u611f\u6e2c\u90a3\u4e9b\u9059\u9060\u7684\u661f\u7cfb\u3002 \u4e0a\u5716\u89c0\u6e2c\u7684\u661f\u7cfb\u662f\u76ee\u524d\u5df2\u77e5\u6700\u9060\u6700\u53e4\u8001\u7684\u661f\u7cfb\u4e4b\u4e00\uff0c\u8ddd\u96e2\u5730\u7403\u7d04 130 \u5104\u5149\u5e74\uff0c \u900f\u904e\u89c0\u6e2c\u5b83\uff0c\u80fd\u5920\u5e6b\u52a9\u6211\u5011\u7406\u89e3\u5b87\u5b99\u6210\u5f62\u4e4b\u521d\u7684\u6a23\u5b50\u3002
"},{"location":"feedback/physics/astronomy/#\u611f\u6e2c\u5668\u7684\u5176\u4ed6\u8b70\u984c","title":"\u611f\u6e2c\u5668\u7684\u5176\u4ed6\u8b70\u984c","text":"\u611f\u6e2c\u5668\u9700\u8981\u6ce8\u610f\u6eab\u5ea6\uff0c\u6211\u5011\u53ef\u4ee5\u628a\u611f\u6e2c\u5668\u653e\u5728\u51b7\u537b\u6db2\uff0c\u4f8b\u5982\u6db2\u614b\u6c26\u4e2d\u3002
\u9019\u662f\u56e0\u70ba\u7269\u9ad4\u53ea\u8981\u6709\u6eab\u5ea6\u5c31\u6703\u767c\u5c04\u96fb\u78c1\u6ce2\uff08\u9060\u7d05\u5916\u7dda\uff09\uff0c \u6240\u4ee5\u9700\u8981\u8b93\u611f\u6e2c\u5c0d\u8c61\u4e4b\u5916\u7684\u74b0\u5883\u76e1\u91cf\u51b7\u537b\uff0c\u5426\u5247\u6703\u5f71\u97ff\u6210\u50cf\uff0c\u5373\u6240\u8b02\u7684\u71b1\u5e72\u64fe\u3002
\u9664\u6b64\u4e4b\u5916\uff0c\u6eab\u5ea6\u4ee3\u8868\u96fb\u5b50\u672c\u8eab\u5c31\u5e36\u6709\u4e00\u5b9a\u7684\u80fd\u91cf\uff08\u52d5\u80fd\u52a0\u4e0a\u5167\u80fd\uff09\uff0c \u800c\u6bcf\u6b21\u96fb\u5b50\u548c\u7269\u9ad4\u7684\u78b0\u649e\u6216\u6643\u52d5\u90fd\u53ef\u80fd\u8b93\u5b83\u7a81\u7834\u5c0e\u5e36\uff0c\u4e26\u5f71\u97ff\u6210\u50cf\u3002
\u9664\u4e86 CCD\uff0c\u8fd1\u671f\u4e5f\u6709\u7814\u7a76\u5176\u4ed6\u985e\u578b\u7684\u611f\u6e2c\u5668\uff0c\u4f8b\u5982 KIDS\uff08Kinetic Inductance Detection System\uff09\u3002 \u9084\u6709\u5f9e\u6295\u5f71\u6a5f\u6280\u8853\u5ef6\u4f38\u7684\u6578\u4f4d\u5149\u8655\u7406\uff08Digital Micro Mirrors\uff09\u6280\u8853\u3002
"},{"location":"feedback/physics/astronomy/#\u96fb\u8166","title":"\u96fb\u8166","text":"\u96a8\u8457\u4eba\u5011\u53ef\u4ee5\u89c0\u6e2c\u7684\u661f\u9ad4\u8d8a\u4f86\u8d8a\u591a\uff0c \u6211\u5011\u9700\u8981\u7684\u662f\u4e00\u500b\u53ef\u4ee5 \u5132\u5b58 \u5927\u91cf\u7d00\u9304\u7684\u6a5f\u5236\u4e14\u53ef\u4ee5\u9032\u884c\u7e41\u96dc\u4e14\u7cbe\u5bc6\u7684 \u8a08\u7b97\u3002 \u96fb\u8166\u5728 1950 \u5e74\u4ee3\u4e4b\u5f8c\uff0c\u9010\u6f38\u5728\u5929\u6587\u5b78\u4e2d\u4f54\u6709\u975e\u5e38\u91cd\u8981\u7684\u4e00\u584a\uff0c\u5176\u512a\u52e2\u6709\uff1a
\u671b\u9060\u93e1\u7684\u6821\u6e96
\u6211\u5011\u5728\u5927\u6c23\u5e72\u64fe\u6709\u63d0\u5230\u5929\u9ad4\u7684\u5149\u7dda\u9032\u5165\u5730\u7403\u524d\u6703\u6643\u52d5\u3002
CANARY's Laser Launch
\u900f\u904e\u6253\u51fa\u7684\u96f7\u5c04\uff0c\u8a08\u7b97\u7576\u524d\u5927\u6c23\u5c0d\u5149\u7dda\u7684\u5f71\u97ff\u7a0b\u5ea6\uff0c \u518d\u53cd\u63a8\u56de\u661f\u9ad4\u7684\u89c0\u6e2c\uff0c\u4e26\u9032\u884c\u671b\u9060\u93e1\u7684\u79fb\u52d5\u548c\u6210\u50cf\u7684\u4fee\u6b63\u3002
"},{"location":"feedback/physics/astronomy/#\u5132\u5b58\u548c\u8a08\u7b97\u80fd\u529b","title":"\u5132\u5b58\u548c\u8a08\u7b97\u80fd\u529b","text":"\u6211\u5011\u4f86\u770b\u770b\u4e00\u822c\u5929\u6587\u5b78\u5e38\u898b\u7684\u61c9\u7528\u4e0b\uff0c\u9700\u8981\u591a\u5c11\u5132\u5b58\u548c\u8a08\u7b97\u7684\u80fd\u529b\u3002
"},{"location":"feedback/physics/astronomy/#\u5132\u5b58\u80fd\u529b","title":"\u5132\u5b58\u80fd\u529b","text":"CCD \u4e2d\u6bcf\u500b\u4f4d\u5143\uff08MOS\uff09\u53ef\u4ee5\u5132\u5b58 2 bytes\uff0816 bits\uff09\u7684\u8cc7\u8a0a\uff0c \u5982\u679c\u4ee5\u4e00\u6392\u6709 4000 \u500b\u4f4d\u5143\u4f86\u8a08\u7b97\uff0c \u6bcf\u5f35 CCD \u51fa\u4f86\u7684\u5f71\u50cf\u5c31\u6703\u6709 32 MB \u7684\u5927\u5c0f\u3002
\u6211\u5011\u518d\u4ee5\u4e00\u500b\u671b\u9060\u93e1\u6709\u591a\u500b CCD \u4f86\u8003\u616e\uff0c\u6240\u4ee5\u4e00\u5f35\u5929\u6587\u7167\u7247\u7d04\u9700\u8981\u6578 GB \u4f86\u5132\u5b58\u3002
\u9019\u6a23\u8981\u7167\u51fa\u4e00\u500b\u5b8c\u6574\u7684\u5b87\u5b99\uff08\\(360^{\\circ}\\)\uff09\u9700\u8981\u591a\u5c11\u5f35\u7167\u7247\uff1f \u5982\u679c\u4ee5\u4e00\u5f35\u7167\u7247\u5927\u7d04\u6703\u7167\u5230 \\(0.3^{\\circ}\\) \u7684\u592a\u7a7a\u70ba\u4f8b\uff0c\u6211\u5011\u9700\u8981\u7d04 10 TB \u7684\u7a7a\u9593\u5132\u5b58\u4e00\u591c\u7684\u592a\u7a7a\u3002
\u96a8\u8457\u7d00\u9304\u7684\u5929\u6578\u589e\u52a0\uff08\u4f8b\u5982\u8a08\u7b97\u51fa\u9695\u77f3\uff09\u5132\u5b58\u7684\u7a7a\u9593\u5c07\u6703\u8d8a\u4f86\u8d8a\u5927\u3002
"},{"location":"feedback/physics/astronomy/#\u8a08\u7b97\u80fd\u529b","title":"\u8a08\u7b97\u80fd\u529b","text":"\u6709\u4e86\u96fb\u8166\uff0c\u6211\u5011\u5c31\u53ef\u4ee5\u6a21\u64ec\u5b87\u5b99\u6210\u5f62\u4e4b\u521d\uff0c\u5404\u7a2e\u7269\u9ad4\u4ea4\u4e92\u5f71\u97ff\u4e0b\u7684\u767c\u5c55\u3002
\u5047\u8a2d\u6211\u5011\u6709\u4e00\u767e\u842c\u500b\u7269\u9ad4\uff08\\(10^6\\)\uff09\uff0c\u5c31\u6703\u9700\u8981 \\((10^6)^2 = 10^{12}\\) \u6b21\u8a08\u7b97\uff0c \u7576\u6578\u91cf\u9054\u5230\u6578\u5104\u500b\uff0c\u5c07\u8b93\u96fb\u8166\u8a08\u7b97\u6642\u9593\u62c9\u9577\u5230\u5931\u53bb\u610f\u7fa9\u3002 \u800c\u4e14\u9019\u9084\u53ea\u662f\u4e00\u77ac\u9593\u7684\u4e92\u52d5\uff0c\u5982\u679c\u8981\u7d00\u9304\u4e00\u767e\u6b65\u751a\u81f3\u6578\u5104\u6b65\uff0c\u9019\u500b\u6642\u9593\u5c07\u6703\u62c9\u5f97\u66f4\u9577\u3002
\u6240\u4ee5\u6211\u5011\u53ea\u80fd\u53d6\u5927\u7d04\u7684\u7d50\u679c\uff0c\u4e5f\u5c31\u662f\u53ea\u8a08\u7b97\u8f03\u6709\u5f71\u97ff\u529b\u7684\u4e92\u52d5\u3002 \u901a\u5e38\u6703\u8b93\u8a08\u7b97\u6642\u9593\u8b8a\u6210 \\(n\\log n\\) \u9019\u7a2e\u7b49\u7d1a\u7684\u6210\u9577\u3002
\u7e3d\u7684\u4f86\u8aaa\uff0c\u5927\u91cf\u7684\u5132\u5b58\u548c\u9ad8\u901f\u7684\u904b\u7b97\u7684\u9700\u6c42\uff0c \u8b93\u5929\u6587\u5b78\u5bb6\u901a\u5e38\u6703\u4f7f\u7528\u8cc7\u6599\u4e2d\u5fc3\u4f86\u6eff\u8db3\u9700\u6c42\u3002
\u900f\u904e\u9060\u7aef\u53bb\u6aa2\u8996\u3001\u8a08\u7b97\u9700\u8981\u7684\u8cc7\u8a0a\u548c\u7d50\u679c\uff0c\u5c31\u53ef\u4ee5\u907f\u514d\u8cc7\u6599\u88ab\u7121\u610f\u7fa9\u7684\u50b3\u8f38\u3002 \u800c\u76f8\u95dc\u7684\u5354\u5b9a\uff08\u5982\u4f55\u4f7f\u7528\u3001\u5132\u5b58\u7b49\u7b49\uff09\u4e5f\u5df2\u7d93\u5728\u88fd\u4f5c\u4e2d\uff0c\u4f8b\u5982 IVOA\u3002
"},{"location":"feedback/physics/astronomy/#\u8a08\u7b97\u51fa\u9695\u77f3","title":"\u8a08\u7b97\u51fa\u9695\u77f3","text":"NASA Approaching Asteroid
\u6bcf\u5929\u6211\u5011\u4f7f\u7528\u671b\u9060\u93e1\u89c0\u6e2c\u592a\u7a7a\uff0c\u4e26\u628a\u7d50\u679c\u6578\u4f4d\u5316\u5b58\u9032\u96fb\u8166\u91cc\u3002 \u5728\u9019\u4e9b\u6d77\u91cf\u7684\u8cc7\u6599\u88e1\uff0c\u6211\u5011\u8981\u600e\u9ebc\u627e\u51fa\u90a3\u4e9b\u6b63\u5728\u671d\u8457\u6211\u5011\u524d\u9032\u7684\u661f\u9ad4\uff0c\u4e26\u9810\u6e2c\u5176\u649e\u4e0a\u5730\u7403\u7684\u53ef\u80fd\u6027\u5462\uff1f
\u6211\u5011\u6bcf\u665a\u6703\u7d00\u9304\u5404\u500b\u661f\u9ad4\u7684\u4f4d\u7f6e\uff0c\u4e26\u78ba\u8a8d\u5176\u79fb\u52d5\u9031\u671f\u548c\u79fb\u52d5\u65b9\u5411\uff0c\u4f8b\u5982\u5b83\u662f\u7e5e\u8457\u592a\u967d\u8f49\u9084\u662f\u671d\u8457\u5730\u7403\u8d70\u3002 \u800c\u9019\u4e9b\u8cc7\u6599\u5c31\u662f\u900f\u904e\u8a08\u7b97\u8a72\u661f\u9ad4\u7684\u79fb\u52d5\u901f\u5ea6\u548c\u8ddd\u96e2\u9060\u8fd1\u6240\u5f97\u4e4b\u3002
\\[\\begin{align} v &= d/t \\nonumber \\\\ &= 2\\pi r/t \\label{vr} \\end{align}\\]\u842c\u6709\u5f15\u529b\u7576\u4f5c\u904b\u8f49\u7684\u5411\u5fc3\u529b\u7684\u8a71\uff0c\u53ef\u4ee5\u5f97\u5230\uff1a
\\[\\begin{align*} GMm /r^{2} = mv^2/ r \\\\ \\Rightarrow v^2 = GM /r \\end{align*}\\]\u6700\u5f8c\u5c31\u53ef\u4ee5\u6574\u5408\u524d\u9762\u7684\u516c\u5f0f\u5f97\u5230\u7e5e\u884c\u534a\u5f91\uff1a
\\[\\begin{align*} v^2 = GM/r = (2\\pi r/t)^2 \\end{align*}\\] \\[\\begin{align*} r^3 = \\frac{GMt^2}{4\\pi ^2} \\end{align*}\\]\u6700\u5f8c\u518d\u5f97\u51fa\u7e5e\u884c\u901f\u5ea6\uff08\\(v\\)\uff09\u3002
"},{"location":"feedback/physics/astronomy/#\u5149\u8b5c\u5716","title":"\u5149\u8b5c\u5716","text":"\u900f\u904e\u5149\u8b5c\u5716\u6211\u5011\u53ef\u4ee5\u5f97\u5230\u5f97\u5230\u5f88\u591a\u8cc7\u8a0a\uff0c \u9664\u6b21\u4e4b\u5916\u672c\u7ae0\u4e5f\u6703\u8a0e\u8ad6\u600e\u9ebc\u7372\u5f97\u5149\u8b5c\u5716\u548c\u5229\u7528\u5176\u63a8\u4f30\u5b87\u5b99\u7684\u6697\u7269\u8cea\u3001\u6697\u80fd\u91cf\u7684\u7d44\u6210\u6bd4\u4f8b\u3002
"},{"location":"feedback/physics/astronomy/#\u5149\u8b5c\u5716\u7684\u61c9\u7528","title":"\u5149\u8b5c\u5716\u7684\u61c9\u7528","text":"\u53ef\u4ee5\u5229\u7528\u5149\u8b5c\u5716\u7372\u5f97\uff1a
\u611f\u6e2c\u7684\u96fb\u78c1\u6ce2\u983b\u7387\u8d8a\u9ad8\uff0c\u6eab\u5ea6\u8d8a\u9ad8\u3002 \u63db\u53e5\u8a71\u8aaa\uff0c\u5448\u73fe\u85cd\u8272\u7684\u661f\u9ad4\u7684\u7684\u6eab\u5ea6\u6703\u6bd4\u7d05\u8272\u9ad8\uff0c\u7136\u5f8c\u7d71\u8a08\u5404\u500b\u661f\u9ad4\u7684\u6eab\u5ea6\u5f8c\u5c31\u53ef\u4ee5\u756b\u51fa \u8d6b\u7f85\u5716\u3002
\u984f\u8272\u7684\u5149\u8b5c\u5716\u7372\u5f97\u65b9\u6cd5\u5728\u524d\u9762\u7684\u6ce2\u9577\u6709\u63d0\u5230\uff08\u5728 CCD \u524d\u9762\u64fa\u4e0a\u8272\u7d19\uff09\u3002
"},{"location":"feedback/physics/astronomy/#\u7d44\u6210","title":"\u7d44\u6210","text":"\u56e0\u70ba\u4e0d\u540c\u7269\u8cea\u6703\u5438\u6536\u4e0d\u540c\u983b\u7387\u7684\u5149\uff08\u505a\u70ba\u96fb\u5b50\u7684\u80fd\u968e\u8df3\u8e8d\uff09\uff0c \u6240\u4ee5\u5149\u8b5c\u907a\u6f0f\u7684\u5730\u65b9\u5c31\u662f\u7d44\u6210\u7684\u7269\u8cea\uff08\u4f46\u4e5f\u53ef\u80fd\u88ab\u5927\u6c23\u5c64\u7684\u7269\u8cea\u5438\u6536\uff0c\u9700\u8981\u7be9\u9078\u4e00\u4e0b\uff09\u3002
Wikimedia Commons under the CCA license.
\u53cd\u904e\u4f86\u8aac\uff0c\u4e5f\u6709\u53ef\u80fd\u662f\u900f\u904e\u7279\u5b9a\u7269\u8cea\u91cb\u653e\u7684\u96fb\u78c1\u6ce2\uff0c\u4f86\u7d44\u6210\u5149\u8b5c\u5716\u3002 \u4f8b\u5982\u661f\u96f2\uff0c\u4ed6\u7684\u5149\u8b5c\u5c31\u662f\u900f\u904e\u539f\u5b50\u91cb\u653e\u80fd\u968e
HIFI Cht3. HIFI Scientific Capabilities and Performance
"},{"location":"feedback/physics/astronomy/#\u901f\u5ea6","title":"\u901f\u5ea6","text":"Nitrogen II emission line measured galaxy M87.
\u4e0a\u5716\u7684\u4e0a\u534a\u90e8\u6211\u5011\u53ef\u4ee5\u770b\u5230\uff0c \u5de6\u908a\u662f\u9ad8\u983b\uff08\u900f\u904e \u90fd\u535c\u52d2\u6548\u61c9\uff0c\u53ef\u4ee5\u77e5\u9053\u9019\u5074\u6b63\u9760\u8fd1\u6211\u5011\uff09\u3001 \u53f3\u908a\u662f\u4f4e\u983b\uff08\u9060\u96e2\uff09\u6240\u4ee5\u77e5\u9053\u8a72\u661f\u7cfb\u6b63\u5728\u4ee5\u9006\u6642\u91dd\u7684\u65b9\u5411\u65cb\u8f49\u3002 \u7136\u5f8c\u518d\u900f\u904e\u524d\u8ff0\u6e2c\u91cf\u9ed1\u6d1e\u8cea\u91cf\u7684\u624b\u6cd5\uff0c \u7d50\u679c\u767c\u73fe\u6574\u500b\u661f\u7cfb\u7684\u8cea\u91cf\u5927\u65bc\u661f\u7cfb\u4e2d\u661f\u661f\u7e3d\u548c\u7684\u8cea\u91cf\u548c\uff0c\u6240\u4ee5\u4f30\u8a08\u4e2d\u9593\u6709\u500b\u8cea\u91cf\u5f88\u5927\u7684\u9ed1\u6d1e\u3002
"},{"location":"feedback/physics/astronomy/#\u5149\u8b5c\u5716\u7684\u89c0\u6e2c\u65b9\u6cd5","title":"\u5149\u8b5c\u5716\u7684\u89c0\u6e2c\u65b9\u6cd5","text":"\u65e9\u671f\u725b\u9813\u4f7f\u7528\u4e09\u89d2\u7a1c\u93e1\uff08prism\uff09\u89c0\u6e2c\u5149\u7684\u53ef\u898b\u5149\u5149\u8b5c\uff0c \u4f46\u5728\u73fe\u4ee3\u5929\u6587\u5b78\u4e2d\u662f\u4f7f\u7528\u7e5e\u5c04\u5149\u67f5\uff08Diffraction grating\uff09\u4f86\u7372\u5f97\u5404\u7a2e\u983b\u7387\u7684\u5149\u3002
Diffraction Grating
\u900f\u904e\u591a\u500b\u5149\u67f5\uff08grating\uff09\u628a\u7279\u5b9a\u6ce2\u9577\u7684\u96fb\u78c1\u6ce2\u805a\u5408\u5728\u67d0\u8655\uff08\u60f3\u50cf\u4e00\u4e0b CD \u76e4\u4e0a\u4e0d\u540c\u89d2\u5ea6\u5c31\u6703\u770b\u5230\u4e0d\u540c\u984f\u8272\uff09\uff0c \u6211\u5011\u5c31\u53ef\u4ee5\u5728\u7279\u5b9a\u4f4d\u7f6e\u4e2d\u653e\u7f6e CCD\uff0c\u4e26\u64f7\u53d6\u60f3\u8981\u7684\u96fb\u78c1\u6ce2\u3002
\u5b8c\u6574\u7684 \u651d\u8b5c\u5100 \u5c31\u6703\u662f\uff1a
\u671b\u9060\u93e1\u662f\u6703\u79fb\u52d5\u7684\uff0c\u6bcf\u6b21\u79fb\u52d5\u8981\u5c0d\u6e96\u7279\u5b9a\u96fb\u78c1\u6ce2\u7684\u805a\u5408\u8655\u662f\u6709\u5de5\u7a0b\u56f0\u96e3\u7684\uff0c \u89e3\u6cd5\u5927\u81f4\u662f\u900f\u904e\u5149\u7e96\uff08optical fibres\uff09\u628a\u671b\u9060\u93e1\u7372\u5f97\u7684\u5149\u6e90\u5c0e\u5411\u76f8\u540c\u8655\uff0c\u6e1b\u5c11\u611f\u5149\u8a2d\u5099\u7684\u79fb\u52d5\u3002
\u9700\u8981\u8b93\u671b\u9060\u93e1\u7684\u5468\u570d\u8db3\u5920\u51b7\uff0c\u907f\u514d\u7d05\u5916\u7dda\u7684\u5e72\u64fe\u3002
\u6536\u96c6\u5230\u7684\u5149\uff0c\u56e0\u70ba\u88ab\u6253\u6563\u4e86\uff0c\u6240\u4ee5\u4ed6\u7684\u5f37\u5ea6\u6703\u66f4\u4f4e\uff0c\u9700\u8981\u82b1\u66f4\u9577\u7684\u6642\u9593\uff08\u6578\u5341\u500d\uff09\u4f86\u66dd\u5149\u3002 \u56e0\u70ba\u8017\u6642\u9577\uff0c\u6240\u4ee5\u6703\u5728\u6bcf\u4e00\u6b21\u7684\u89c0\u6e2c\u9031\u671f\u4e2d\uff0c\u540c\u6642\u89c0\u5bdf\u591a\u500b\u7269\u9ad4\u7684\u5149\u8b5c\u3002 \u8981\u505a\u5230\u9019\u6a23\uff0c\u5c31\u9700\u5229\u7528\u5149\u7e96\u628a\u5404\u500b\u661f\u9ad4\u7684\u5149\u6e90\u90fd\u79fb\u81f3\u76f8\u540c\u7684\u9663\u5217\u4e2d\uff0c\u4e26\u540c\u6642\u89c0\u5bdf\u4ed6\u5011\uff0c\u5982\u4e0b\u6240\u793a\u3002
Andy Lawrence \u7d44\u5408\u591a\u5f35 AAT \u7684\u7167\u7247\u800c\u6210\u3002
"},{"location":"feedback/physics/astronomy/#\u6697\u80fd\u91cf","title":"\u6697\u80fd\u91cf","text":"\u5982\u540c\u524d\u9762\u63d0\u5230\u7684\u7d05\u5de8\u661f\uff0c\u91cd\u529b\u6703\u628a\u661f\u9ad4\u5411\u5167\u58d3\u7e2e\uff0c\u6838\u878d\u5408\u7684\u80fd\u91cf\u518d\u628a\u661f\u9ad4\u5411\u5916\u6490\u8d77\uff0c\u5f62\u6210\u7a69\u5b9a\u7684\u661f\u9ad4\u5f62\u72c0\u3002
\u6574\u500b\u5b87\u5b99\u4e8b\u5be6\u4e0a\u5c31\u662f\u5982\u6b64\uff0c\u53ea\u662f\u5411\u5916\u7684\u529b\u91cf\uff08\u6697\u80fd\u91cf\uff0c\u7d04\u4f54 70%\uff09\u5927\u65bc\u5411\u5167\u58d3\u7e2e\uff08\u6697\u7269\u8cea\uff0c\u7d04\u4f54 25%\uff09\uff0c \u6240\u4ee5\u6211\u5011\u624d\u89c0\u5bdf\u5230\u5b87\u5b99\u6b63\u5728\u64f4\u5f35\u7684\u73fe\u8c61\u3002
\u5047\u8aaa
\u4e0a\u8ff0\u7684\u53ea\u662f\u4e00\u7a2e\u666e\u904d\u7684\u8aaa\u6cd5\uff0c\u7576\u4f60\u53ef\u4ee5\u63d0\u51fa\u4e00\u500b\u7406\u8ad6\uff0c\u4e26\u6eff\u8db3\u89c0\u5bdf\u5230\u7684\u73fe\u8c61\uff0c\u9019\u6642\u9019\u500b\u7406\u8ad6\u5c31\u53ef\u80fd\u88ab\u5927\u5bb6\u63a5\u53d7\u3002
\u4f46\u662f\uff0c\u88ab\u63a5\u53d7\u4e0d\u4ee3\u8868\u5b83\u5c31\u662f\u4e8b\u5be6\uff0c\u904e\u4e86\u4e09\u5341\u5e74\uff0c\u6211\u5011\u53ef\u80fd\u5c31\u6703\u5efa\u69cb\u51fa\u4e00\u500b\u5b8c\u5168\u4e0d\u4e00\u6a23\u7684\u5b87\u5b99\u89c0\u3002
\u554f\u984c\u662f\uff0c\u600e\u9ebc\u89c0\u5bdf\u51fa\u5b87\u5b99\u6b63\u5728\u64f4\u5f35\u7684\uff1f
\u900f\u904e \u90fd\u535c\u52d2\u6548\u61c9\uff0c\u6211\u5011\u53ea\u8981\u77e5\u9053\u7269\u9ad4\u767c\u51fa\u7684\u983b\u7387\u6f38\u6f38\u63d0\u9ad8\uff0c\u5c31\u53ef\u4ee5\u77e5\u9053\u5b83\u6b63\u5728\u9060\u96e2\uff0c \u4f46\u6211\u5011\u4e0d\u53ef\u80fd\u89c0\u5bdf\u6578\u5341\u842c\u5e74\u4f86\u8b49\u660e\u5b83\u7684\u8b8a\u5316\u3002 \u6240\u4ee5\u6211\u5011\u9700\u8981\u4e00\u7a2e\u661f\u9ad4\uff0c\u4e0d\u7ba1\u662f\u5728\u54ea\u908a\u751f\u6210\uff0c\u4ed6\u7684\u4eae\u5ea6\u90fd\u8981\u4e00\u6a23\uff08standard candle\uff09\uff0c 1a \u985e\u8d85\u65b0\u661f \u5c31\u662f\u9019\u6a23\u4e00\u7a2e\u661f\u9ad4\u3002
The Gobbling Dwarf that Exploded
\u56e0\u70ba\u767d\u77ee\u661f\u5438\u6536\u65c1\u908a\u6046\u661f\u91cb\u653e\u7684\u7269\u8cea\u5f8c\u5f15\u767c\u7684 1a \u985e\u8d85\u65b0\u661f\u7206\u70b8\uff0c \u5176\u7206\u70b8\u6642\u7684\u8cea\u91cf\u90fd\u5dee\u4e0d\u591a\u662f 1.4 \u500d\u7684\u592a\u967d\u8cea\u91cf\uff0c\u6240\u4ee5\u4ed6\u5011\u91cb\u653e\u7684\u80fd\u91cf\u548c\u4eae\u5ea6\u4e5f\u90fd\u5dee\u4e0d\u591a\u3002
\u7531\u6b64\u89c0\u5bdf\u4e0d\u540c\u7684 1a \u985e\u8d85\u65b0\u661f\uff0c\u5c31\u53ef\u4ee5\u77e5\u9053\u8d8a\u6697\uff08\u9060\uff09\u7684 1a \u985e\u8d85\u65b0\u661f \u5176\u983b\u7387\u8d8a\u4f4e\uff0c \u4ee3\u8868\u5b87\u5b99\u7684\u908a\u7de3\u6b63\u66f4\u5feb\u901f\u5730\u9060\u96e2\u6211\u5011\u3002
"},{"location":"feedback/physics/astronomy/#\u6bd4\u4f8b\u7684\u63a8\u4f30","title":"\u6bd4\u4f8b\u7684\u63a8\u4f30","text":"Improved cosmological constraints from a joint analysis of the SDSS-II and SNLS supernova samples
\u900f\u904e\u4e0a\u8ff0\u89c0\u5bdf\u5230\u7684\u4e8b\u5be6\uff08\u5b87\u5b99\u6b63\u5728\u64f4\u5f35\uff09\uff0c \u8ad6\u6587\u4e2d\u5c31\u6307\u51fa\u5b87\u5b99\u7d44\u6210\u7684\u6bd4\u4f8b\u70ba 70% \u7684\u6697\u80fd\u91cf\u300125% \u7684\u6697\u7269\u8cea\u548c 5% \u7684\u5df2\u77e5\u7269\u8cea\u3002
"},{"location":"feedback/physics/astronomy/#\u7e3d\u7d50","title":"\u7e3d\u7d50","text":"\u6211\u5011\u7c21\u55ae\u5e36\u5230\u5929\u6587\u5b78\u7684\u6f14\u9032\uff0c\u4e26\u7d30\u8ac7\u4e00\u822c\u671b\u9060\u93e1\u548c\u592a\u7a7a\u671b\u9060\u93e1\u7684\u6311\u6230\u548c\u8a2d\u8a08\u539f\u5247\u3002 \u5e36\u5230\u4e86\u4e00\u4e9b\u661f\u9ad4\uff08\u7d05\u5de8\u661f\uff09\u548c\u9ed1\u6d1e\u7684\u7c21\u55ae\u904b\u7b97\uff0c \u4e26\u900f\u904e\u8d8a\u4f86\u8d8a\u512a\u826f\u7684\u611f\u6e2c\u5668\u3001\u96fb\u8166\u3001\u5149\u8b5c\u7684\u77e5\u8b58\u4f86\u9032\u4e00\u6b65\u8abf\u6574\u6211\u5011\u5c0d\u5b87\u5b99\u7684\u60f3\u50cf\u3002
\u6709\u4e86\u9019\u4e9b\u77e5\u8b58\uff0c \u7576\u4f60\u5728\u6b23\u8cde\u97cb\u4f2f\u671b\u9060\u93e1\u6240\u62cd\u651d\u7684\u7167\u7247\u548c\u7406\u89e3\u5176\u904b\u4f5c\u539f\u7406\u6642\uff0c \u662f\u4e0d\u662f\u66f4\u6709\u611f\u5462\uff01
\u5176\u4ed6\u6709\u8da3\u9023\u7d50\uff1a
\u6700\u8fd1\u5728\u770b\u6838\u878d\u5408\u672a\u4f86\u5c55\u671b\u9019\u672c\u66f8\u6642\uff0c\u6162\u6162\u63a5\u89f8\u4e00\u4e9b\u5fae\u89c0\u91cf\u5b50\u7684\u7269\u7406\u884c\u70ba\u548c\u7279\u6027\uff0c\u5728\u7406\u89e3\u7684\u904e\u7a0b\u4e2d\u5c31\u6703\u958b\u59cb\u63a5\u89f8\u5230\u4e00\u4e9b\u57fa\u65bc \u72f9\u7fa9\u76f8\u5c0d\u8ad6\uff08special relativity\uff09\u5efa\u7acb\u7684\u4e16\u754c\uff0c\u4e5f\u56e0\u6b64\u624d\u958b\u59cb\u672c\u7bc7\u7684\u64b0\u5beb\u3002 \u6211\u89ba\u5f97\u9019\u4e5f\u7b97\u662f\u6eff\u597d\u7684\u5b78\u7fd2\u52d5\u529b\u5427\uff0c\u5148\u63a5\u89f8\u7d50\u679c\u548c\u61c9\u7528\u624d\u53bb\u63a5\u89f8\u539f\u7406\u6642\uff0c\u611f\u89f8\u6703\u66f4\u6df1\u3002
"},{"location":"feedback/physics/special-relativity/#\u80cc\u666f","title":"\u80cc\u666f","text":"\u5728\u7406\u89e3\u72f9\u7fa9\u76f8\u5c0d\u8ad6\u7684\u904e\u7a0b\u7576\u4e2d\uff0c\u6211\u8a8d\u70ba\u6709\u5169\u500b\u5f88\u91cd\u8981\u7684\u89c0\u9ede\u9700\u8981\u91d0\u6e05\uff1a
\u6642\u9593\u548c\u7a7a\u9593\u660e\u660e\u662f\u4e0d\u540c\u7684\u55ae\u4f4d\uff08\u4e00\u500b\u662f\u79d2\u53e6\u4e00\u500b\u662f\u516c\u5c3a\uff09\uff0c\u6211\u5011\u8981\u600e\u9ebc\u628a\u5b83\u7576\u6210\u540c\u4e00\u500b\u5834\u57df\u5462\uff1f\u5176\u5be6\u9019\u7a2e\u72c0\u6cc1\u5728\u7269\u7406\u7684\u4e16\u754c\u4e0a\u4e26\u4e0d\u5c11\u898b\uff0c\u9019\u6642\u5019\u901a\u5e38\u90fd\u6703\u300c\u5275\u9020\u300d\u4e00\u500b\u5e38\u6578\u8ca0\u8cac\u8f49\u63db\u9019\u5169\u8005\u7684\u55ae\u4f4d\u3002\u5728\u8b1b\u9019\u500b\u5e38\u6578\u662f\u4ec0\u9ebc\u4e4b\u524d\uff0c\u6211\u5011\u5148\u4f86\u770b\u770b\u73fe\u5728\u7684\u7269\u7406\u5b78\u4e2d\u6709\u54ea\u4e9b\u5e38\u898b\u7684\u5e38\u6578\u5427\uff01
\u5b89\u57f9\u5b9a\u5f8b\uff08\u6216\u8005\u7a31\u99ac\u514b\u58eb\u5a01\u2014\u5b89\u57f9\u5b9a\u5f8b\uff09\u4e2d\u96fb\u6d41\u7684\u8b8a\u5316\u53ef\u4ee5\u7522\u751f\u78c1\u5834\uff0c\u96fb\u5834\u548c\u78c1\u5834\u7684\u8f49\u63db\u5c31\u9700\u8981\u4e00\u500b\u300c\u78c1\u5e38\u6578 \\(\\mu_0\\)\u300d\u3002 \u6c92\u932f\uff0c\u5728\u7406\u89e3 \u6642\u7a7a \u9019\u500b\u6982\u5ff5\u7684\u6642\u5019\uff0c\u96fb\u78c1\u529b\u662f\u4e00\u500b\u5f88\u597d\u7684\u8f14\u52a9\uff0c\u96fb\u529b\u548c\u78c1\u529b\u5c31\u662f\u7576\u6211\u5011\u7528\u4e0d\u540c\u89d2\u5ea6\u53bb\u770b\u96fb\u78c1\u529b\u9019\u500b\u6771\u897f\u6642\uff0c\u6240\u5206\u5225\u8868\u73fe\u7684\u73fe\u8c61\u3002 \uff08\u9084\u8a18\u5f97\u4ee5\u524d\u5927\u5b78\u6559\u6388\u5c0d\u99ac\u514b\u58eb\u5a01\u7684\u8b9a\u5606\uff0c\u81f3\u4eca\u4ecd\u8b93\u6211\u5370\u8c61\u6df1\u523b\uff09
\u91cf\u5b50\u529b\u5b78\u4e2d\u4e5f\u6709\u4e00\u500b\u5f88\u5e38\u898b\u4e14\u5f88\u91cd\u8981\u7684\u5e38\u6578\u300c\u666e\u6717\u514b\u5e38\u6578 \\(h\\)\u300d\uff08\u9084\u8a18\u5f97\u9ed1\u9ad4\u8f3b\u5c04\u7684\u7d2b\u5916\u707d\u8b8a\u554f\u984c\u55ce\uff1f\uff09\u3002 \u7576\u6211\u5011\u60f3\u77e5\u9053\u4e00\u500b\u96fb\u78c1\u6ce2\uff08\u6216\u8005\u8aaa\u5149\uff0c\u5176\u5be6\u5149\u5c31\u662f\u4e00\u7a2e\u96fb\u78c1\u6ce2\uff0c\u90fd\u662f\u900f\u904e\u50b3\u905e\u5149\u5b50\u4f86\u9054\u6210\u6e9d\u901a\uff09\u6709\u591a\u5c11\u80fd\u91cf\uff0c\u5c31\u53ef\u4ee5\u900f\u904e\u9019\u500b\u5e38\u6578\u4f86\u8f49\u63db\u983b\u7387\u548c\u80fd\u91cf\u3002
\u5230\u4e86\u9019\u88e1\uff0c\u5927\u5bb6\u53ef\u80fd\u5df2\u7d93\u731c\u5230\u9019\u500b\u5e38\u6578\u4e86\uff0c\u90a3\u5c31\u662f\u300c\u5149\u901f \\(c\\)\u300d\u3002\u4e0d\u904e\u8207\u5176\u8aaa\u9019\u500b\u5e38\u6578\u662f\u5149\u901f\uff0c\u6211\u89ba\u5f97\u5728\u7406\u89e3 \u6642\u7a7a \u9019\u500b\u5834\u57df\u7684\u904e\u7a0b\u4e2d\u628a \\(c\\) \u7576\u6210\u6642\u9593\u548c\u7a7a\u9593\u7684\u8f49\u63db\u5e38\u6578\u66f4\u70ba\u6070\u7576\u3002 \u63db\u53e5\u8a71\u8aaa\uff0c\u5149\u4e4b\u6240\u4ee5\u5728\u771f\u7a7a\u4e2d\u80fd\u9054\u5230\u300c\u5149\u901f\u300d\u5c31\u662f\u56e0\u70ba\u4ed6\u53d7\u9650\u65bc\u9019\u500b\u5e38\u6578\uff0c\u6240\u4ee5\u505a\u500b\u7c97\u6dfa\u7684\u6bd4\u55bb\uff0c\u4e26\u4e0d\u662f\u56e0\u70ba\u5149\u5728\u771f\u7a7a\u4e2d\u7684\u901f\u5ea6\u6210\u5c31\u9019\u500b\u5e38\u6578\uff0c\u800c\u662f\u9019\u500b\u5e38\u6578\u6210\u5c31\u5149\u5728\u771f\u7a7a\u4e2d\u7684\u901f\u5ea6\u3002
\u56de\u5230\u7b2c\u4e8c\u9ede\u89c0\u5ff5\uff0c\u6240\u6709\u4f60\u5728\u975c\u6b62\u6642\u7a7a\u4e2d\u89c0\u6e2c\u5230\u7684\u7269\u7406\u6027\u8cea\uff0c\u90fd\u6703\u5b8c\u5168\u76f8\u540c\u65bc\u5728\u4ee5\u56fa\u5b9a\u901f\u5ea6\u79fb\u52d5\u7684\u5ea7\u6a19\u7cfb\u4e2d\u89c0\u6e2c\u5230\u7684\u7269\u7406\u6027\u8cea\u3002 \u9019\u4e5f\u4ee3\u8868\u4f60\u7121\u6cd5\u5340\u5206\u4e00\u500b\u5ea7\u6a19\u7cfb\u662f\u975c\u6b62\u7684\u9084\u662f\u6163\u6027\u79fb\u52d5\u7684\uff08\u901a\u4fd7\u7684\u4f8b\u5b50\u5c31\u662f\u4f60\u7121\u6cd5\u5340\u5206\u662f\u9ce5\u98db\u904e\u4f60\u773c\u524d\u9084\u662f\u4f60\u6b63\u5feb\u901f\u5730\u5728\u9ce5\u65c1\u908a\u79fb\u52d5\uff09\u3002... \u9019\u7a2e\u89c0\u5ff5\u5728\u7406\u89e3\u72f9\u7fa9\u76f8\u5c0d\u8ad6\u7684\u6642\u5019\u5c24\u5176\u91cd\u8981\uff0c\u800c\u9019\u4e5f\u662f\u76f8\u5c0d\u8ad6\u4e4b\u6240\u4ee5\u540d\u70ba\u300c\u76f8\u5c0d\u300d\u8ad6\u7684\u539f\u56e0\u5427\uff01
\u4e00\u500b\u6b63\u5e38\u7684\u6210\u5e74\u4eba\u5f9e\u4e0d\u53bb\u601d\u8003\u7a7a\u9593\u548c\u6642\u9593\u7684\u554f\u984c\u2014\u2014\u9019\u4e9b\u90fd\u662f\u4ed6\u5c0f\u6642\u5019\u5c31\u60f3\u5230\u7684\uff1b\u4f46\u6211\u7684\u667a\u529b\u767c\u80b2\u9072\u7de9\uff0c\u56e0\u6b64\u9577\u5927\u5f8c\u624d\u958b\u59cb\u601d\u8003\u7a7a\u9593\u548c\u6642\u9593\u3002
\u2014 \u611b\u56e0\u65af\u5766
"},{"location":"feedback/physics/special-relativity/#\u5ee3\u7fa9\u76f8\u5c0d\u8ad6","title":"\u5ee3\u7fa9\u76f8\u5c0d\u8ad6","text":"\u72f9\u7fa9\u76f8\u5c0d\u8ad6\u900f\u904e\u6642\u7a7a\uff0c\u91cd\u65b0\u5b9a\u7fa9\u4e86\u53e4\u5178\u7684\u529b\u5b78\uff0c\u4e0d\u53ea\u662f\u901f\u5ea6\u3001\u52d5\u91cf\u3001\u89d2\u52d5\u91cf\uff0c\u4e5f\u5305\u62ec\u52a0\u901f\u5ea6\u3002 \u76f8\u5c0d\u800c\u8a00\uff0c\u5ee3\u7fa9\u76f8\u5c0d\u8ad6\uff08general relativity\uff09\u5247\u662f\u628a\u9019\u4e9b\u6982\u5ff5\u5ef6\u4f38\u51fa\u4f86\u5230\u5176\u4ed6\u5834\u57df\uff0c\u4f8b\u5982\u91cd\u529b\u3002
\u72f9\u7fa9\u76f8\u5c0d\u8ad6\u4e2d\u7684\u52a0\u901f\u5ea6\u7531\u65bc\u5730\u7403\u7684\u6642\u7a7a\u5f4e\u66f2\u4e26\u4e0d\u660e\u986f\uff0c\u6240\u4ee5\u4e00\u822c\u5728\u5be6\u52d9\u4e0a\u7684\u8a08\u7b97\u50c5\u8003\u616e\u72f9\u7fa9\u76f8\u5c0d\u8ad6\u662f\u5408\u7406\u7684\uff0c\u4f46\u4ee5\u56b4\u8b39\u7684\u8a08\u7b97\u4f86\u8aaa\uff0c\u6211\u5011\u4ecd\u9700\u8981\u900f\u904e\u5ee3\u7fa9\u76f8\u5c0d\u8ad6\uff08\u91cd\u529b\u5834\uff09\u4f86\u8a08\u7b97\u52a0\u901f\u5ea6\u3002
It helps in analyzing gravitation to consider a situation where gravity is mocked up by acceleration. Focus attention on a region so far from any attracting matter, and so free of disturbance, that spacetime there can be consider to be flat and to have Lorentz geometry. .... When spacetime is flat, move however one will, special relativity can handle the job.
\u2014 Misner, Thorne, Wheeler: GRAVITATION Ch. 6.1 Accelerated Observers can be Analyzed Using Special Relativity
"},{"location":"feedback/physics/special-relativity/#\u6642\u7a7a\u8b8a\u5316\u91cf","title":"\u6642\u7a7a\u8b8a\u5316\u91cf","text":""},{"location":"feedback/physics/special-relativity/#\u7a7a\u9593\u8b8a\u5316\u91cf","title":"\u7a7a\u9593\u8b8a\u5316\u91cf","text":""},{"location":"feedback/physics/special-relativity/#\u6642\u9593\u8b8a\u5316\u91cf","title":"\u6642\u9593\u8b8a\u5316\u91cf","text":""},{"location":"feedback/physics/special-relativity/#\u7b1b\u5361\u723e\u5ea7\u6a19\u7cfb","title":"\u7b1b\u5361\u723e\u5ea7\u6a19\u7cfb","text":"\u4e4b\u6240\u4ee5\u5728\u9019\u500b\u6a19\u984c\u5b9a\u70ba\u7b1b\u5361\u723e\u5ea7\u6a19\u7cfb\uff0c\u662f\u56e0\u70ba\u6211\u60f3\u7d00\u5ff5\u4e00\u4e0b\u9019\u500b\u7aae\u76e1\u5047\u60f3\u7684\u6578\u5b78\u5bb6\u3002 \u96d6\u7136\u6211\u5011\u73fe\u5728\u53ef\u4ee5\u975e\u5e38\u81ea\u7136\u7684\u4f7f\u7528\u9019\u500b\u5750\u6a19\u7cfb\uff0c\u4f46\u628a\u4e00\u7dad\u7684\u89c0\u5ff5\u5ef6\u4f38\u5230\u4e86\u4e8c\u7dad\u548c\u4e09\u7dad\u7684\u9019\u7a2e\u505a\u6cd5\uff0c\u5176\u5be6\u4ed4\u7d30\u601d\u8003\u4e4b\u5f8c\u6703\u767c\u73fe\u9019\u662f\u500b\u975e\u5e38\u4e86\u4e0d\u8d77\u7684\u7a81\u7834\u3002 \u4e26\u4f9d\u6b64\u4f5c\u70ba\u5ef6\u4f38\uff0c\u6211\u5011\u5c07\u628a\u6642\u7a7a\u7684\u89c0\u5ff5\u5ef6\u4f38\u5230\u5ea7\u6a19\u7cfb\uff0c\u4e26\u4f9d\u6b64\u4f86\u8a0e\u8ad6\u9019\u4e4b\u4e2d\u7684\u89c0\u5ff5\u3002
"},{"location":"feedback/physics/special-relativity/#\u52de\u4f96\u8332\u8b8a\u63db","title":"\u52de\u4f96\u8332\u8b8a\u63db","text":""},{"location":"feedback/physics/special-relativity/#\u529b\u5b78\u7684\u9032\u5316","title":"\u529b\u5b78\u7684\u9032\u5316","text":""},{"location":"feedback/physics/special-relativity/#\u56db\u7dad\u901f\u5ea6","title":"\u56db\u7dad\u901f\u5ea6","text":""},{"location":"feedback/physics/special-relativity/#\u8cea\u80fd\u7b49\u50f9","title":"\u8cea\u80fd\u7b49\u50f9","text":""},{"location":"feedback/physics/special-relativity/#\u66f4\u591a\u5730\u5ef6\u4f38","title":"\u66f4\u591a\u5730\u5ef6\u4f38","text":""},{"location":"feedback/physics/special-relativity/#\u7d50\u8ad6","title":"\u7d50\u8ad6","text":"\u7b2c\u4e94\u7dad\u5ea6\uff1a\u53ef\u80fd\u6027
"},{"location":"feedback/site-reliability-workbook/","title":"\u7db2\u7ad9\u53ef\u9760\u6027\u7684\u5de5\u4f5c\u624b\u518a","text":"The Site Reliability Workbook, Practical Ways to Implement SRE
\u7522\u54c1\u958b\u767c\u5718\u968a \u548c \u7dad\u904b\u5718\u968a \u5f7c\u6b64\u4e4b\u9593\u662f\u6709\u9d3b\u6e9d\u7684\uff0c \u5169\u8005\u5728\u8a2d\u8a08\u67b6\u69cb\u4e0a\u4e5f\u6703\u56e0\u70ba\u7acb\u5834\u4e0d\u540c\u800c\u6709\u4e0d\u540c\u898b\u89e3\u3002
\u6839\u64da\u7d93\u9a57\uff0cGoogle \u8a8d\u70ba\u6700\u91cd\u8981\u7684\u529f\u80fd\u662f\u53ef\u7528\u6027\uff0c\u800c\u9019\u500b\u529f\u80fd\u904d\u53ca\u6240\u6709\u7dda\u4e0a\u7522\u54c1\u3002 \u300c\u529f\u80fd\u300d\u50b3\u7d71\u4e0a\u88ab\u8a8d\u70ba\u662f\u7522\u54c1\u958b\u767c\u5718\u968a\u8ca0\u8cac\uff0c\u800c\u300c\u53ef\u7528\u6027\u300d\u50b3\u7d71\u4e0a\u88ab\u8a8d\u70ba\u662f\u7dad\u904b\u5718\u968a\u8ca0\u8cac\uff0c \u900f\u904e\u628a\u53ef\u7528\u6027\u8b8a\u6210\u7522\u54c1\u529f\u80fd\u7684\u8a8d\u77e5\uff0c\u5f4c\u5e73\u5169\u8005\u4e4b\u9593\u7684\u9d3b\u6e9d\u3002 \u5728\u8a2d\u8a08\u4e4b\u521d\u7f3a\u4e4f\u53ef\u7528\u6027\u7684\u8003\u91cf\u76f8\u7576\u65bc\u7528\u66f4\u9ad8\u7684\u71df\u904b\u6210\u672c\u53bb\u8a2d\u8a08\u66f4\u5c11\u7684\u529f\u80fd\uff0c \u76f8\u53cd\u7684\uff0c\u8003\u91cf\u53ef\u7528\u6027\u4e0b\u6301\u7e8c\u8a2d\u8a08\u3001\u8fed\u4ee3\u7522\u54c1\uff0c\u6700\u7d42\u900f\u904e\u4f4e\u71df\u904b\u6210\u672c\u9054\u5230\u7a69\u5065\u4e14\u53ef\u64f4\u5145\u7684\u7522\u54c1\uff0c \u9019\u7a2e\u8a2d\u8a08\u65b9\u5f0f\uff0c\u7a31\u70ba \u975e\u62bd\u8c61\u5927\u578b\u7cfb\u7d71\u8a2d\u8a08\uff08Non-Abstract Large System Design\uff09\u3002
SRE\uff08Site Reliability Engineering\uff09\u5c31\u662f\u5169\u5718\u968a\u7684\u6a4b\u6a11\uff0c\u4e5f\u662f\u5be6\u8e10\u975e\u62bd\u8c61\u5927\u578b\u7cfb\u7d71\u8a2d\u8a08\u7684\u57fa\u790e\u3002 SRE \u4e0d\u4e00\u5b9a\u662f\u4e00\u500b\u5718\u968a\uff0c\u4e5f\u53ef\u4ee5\u662f\u4e00\u7a2e\u6df1\u5165\u5728\u958b\u767c\u5718\u968a\u548c\u7dad\u904b\u5718\u968a\u7684\u6587\u5316\u3002
\u4ec0\u9ebc\u6587\u5316\uff1f\u4ee5\u4e0b\u5c07\u5f9e\u5404\u500b\u9762\u5411\u53bb\u63a2\u8a0e\uff1a
\u5c0d\u6211\u4f86\u8aaa\u7dad\u904b\u662f\u56f0\u96e3\u7684\uff0c\u4f46\u662f\u5fc5\u9808\u8981\u5148\u91d0\u6e05\u4ec0\u9ebc\u662f\u7dad\u904b\u3002
\u7dad\u6301\u904b\u4f5c\uff0c\u4e0d\u50c5\u50c5\u662f\u529f\u80fd\u51fa\u932f\u4e86\u4fee\u4fee\u88dc\u88dc\uff0c\u6216\u8005\u4f9d\u8cf4\u5957\u4ef6\u7248\u672c\u66f4\u65b0\uff0c \u66f4\u591a\u7684\u662f\u4f60\u8981\u53bb\u9762\u5c0d\u5f88\u591a\u96e3\u4ee5\u6289\u64c7\u7684\u9078\u64c7\uff0c\u4f8b\u5982\uff1a
\u9019\u4e9b\u90fd\u662f\u9700\u8981\u82b1\u6642\u9593\uff0c\u975c\u4e0b\u4f86\u597d\u597d\u601d\u8003\uff0c\u6478\u7d22\u53ef\u80fd\u7684\u539f\u56e0\u548c\u65b9\u6848\uff0c\u548c\u5404\u500b\u5718\u968a\u6e9d\u901a\u66b8\u89e3\uff0c \u6700\u7d42\u7684\u624b\u6bb5\u751a\u81f3\u53ea\u662f\u500b\u59a5\u5354\u65b9\u6848\uff0c\u9019\u4e9b\u90fd\u518d\u518d\u8003\u9a57\u7dad\u904b\u4eba\u54e1\u7684\u667a\u6167\u548c\u7d93\u9a57\u3002
\u771f\u6b63\u6709\u6548\u7684\u5de5\u4f5c\u65b9\u5f0f\uff0c\u4e0d\u662f\u9435\u4eba\u4e09\u9805\u6216\u99ac\u62c9\u677e\uff0c\u6bd4\u8ab0\u5805\u6301\u7684\u6642\u9593\u9577\uff0c\u800c\u662f\u77ed\u8dd1\uff0c\u7576\u6a5f\u6703\u4f86\u81e8\u7684\u6642\u5019\u885d\u523a\uff0c\u5e73\u6642\u6ce8\u610f\u8eab\u9ad4\u5065\u5eb7\u548c\u4f11\u606f\u3002
\u2014 Naval Ravikant
"},{"location":"feedback/site-reliability-workbook/canary-release/","title":"\u91d1\u7d72\u96c0\u90e8\u7f72","text":"\u8a31\u591a\u5de5\u5177\u53ef\u4ee5\u5e6b\u52a9\u4f60\u5efa\u7acb\u91d1\u7d72\u96c0\u90e8\u7f72\uff0c\u4f46\u6700\u7d42\u9084\u662f\u8981\u6839\u64da\u9700\u6c42\u548c\u7cfb\u7d71\u74b0\u5883\u4f86\u5efa\u7acb\u4f60\u7684\u6e2c\u8a66\u7b56\u7565\uff0c \u9019\u985e\u7684\u9700\u6c42\u88ab\u7a31\u4e4b\u70ba\u90e8\u5c6c\u5de5\u7a0b\u3002
"},{"location":"feedback/site-reliability-workbook/configuration-best-practice/","title":"\u8a2d\u5b9a\u6a94\u7684\u6700\u4f73\u5be6\u8e10","text":"\u8a2d\u5b9a\u6a94\u6703\u7570\u52d5\u7684\u6642\u9593\u9ede\u901a\u5e38\u6709\u5169\u500b\uff0c\u4e00\u500b\u662f\u4f60\u5728\u5efa\u7acb\u670d\u52d9\u4e4b\u521d\uff0c\u4e00\u500b\u662f\u5728\u7dca\u6025\u60c5\u6cc1\u9700\u8981\u8abf\u6574\u670d\u52d9\u884c\u70ba\u3002
\u6bcf\u4e00\u6b21\u7570\u52d5\u8a2d\u5b9a\u6a94\u90fd\u662f\u4e00\u500b\u98a8\u96aa\uff0c\u70ba\u4e86\u8b93\u5c0d\u65bc\u670d\u52d9\u4e0d\u719f\u6089\u7684\u4eba\u80fd\u5920\u5feb\u901f\u7406\u89e3\u8a2d\u5b9a\u6a94\u7684\u610f\u7fa9\uff0c \u9700\u8981\u5728\u8a2d\u8a08\u8a2d\u5b9a\u6a94\u7684\u6642\u5019\uff0c\u628a\u53ef\u8b80\u6027\u548c\u5b89\u5168\u6027\u7b49\u5404\u500b\u9762\u5411\u8003\u616e\u9032\u53bb\u3002
\u6587\u4e2d\u4ecb\u7d39\u5f88\u591a\u9762\u5411\u7684\u5efa\u8b70\u3001\u5be6\u969b\u7bc4\u4f8b\u9084\u6709\u63a8\u85a6\u8a2d\u5b9a\u8a9e\u8a00\u4f86\u6e1b\u5c11\u52de\u52d5\u529b\u3002
"},{"location":"feedback/site-reliability-workbook/data-pipelines/","title":"\u8cc7\u6599\u7ba1\u7dda\u8a2d\u8a08","text":"\u8cc7\u6599\u7ba1\u7dda\u6703\u628a\u90a3\u4e9b\u8d85\u5927\u91cf\u5931\u5e8f\u7684\u8cc7\u6599\uff08\u4f8b\u5982\u4f7f\u7528\u8005\u64cd\u4f5c\u6b77\u7a0b\u3001\u61c9\u7528\u65e5\u8a8c\u7b49\u7b49\uff09\u6574\u5408\u6210\u7d50\u69cb\u5316\u3001\u6392\u5e8f\u7684\u8cc7\u6599\u3002
\u901a\u5e38\u8cc7\u6599\u7ba1\u7dda\u7684\u8a2d\u8a08\u6703\u6839\u64da\u5546\u52d9\u9700\u6c42\u53bb\u8a2d\u8a08\uff0c\u4e5f\u5c31\u662f\u9019\u500b\u516c\u53f8\u7684\u67b6\u69cb\u53ef\u80fd\u5f88\u96e3\u5957\u9032\u53e6\u4e00\u9593\u516c\u53f8\u3002 \u4f46\u662f\u8a2d\u8a08\u7684\u6a21\u5f0f\u548c\u4e00\u4e9b\u6700\u4f73\u5be6\u4f5c\u7684\u6307\u5357\u4ecd\u80fd\u5728\u958b\u767c\u968e\u6bb5\u88ab\u5957\u7528\u9032\u4f86\u3002 \u9664\u6b64\u4e4b\u5916\uff0c\u81ea\u52d5\u5316\u7684\u5de5\u5177\u5728\u67d0\u4e9b\u5834\u666f\u4e5f\u662f\u5fc5\u8981\u7684\u3002
"},{"location":"feedback/site-reliability-workbook/incident-response/","title":"\u707d\u96e3\u7ba1\u7406","text":"\u707d\u96e3\u7ba1\u7406\u548c\u707d\u96e3\u8655\u7406\u7684\u5dee\u7570\u5728\u65bc\uff1a \u8655\u7406\u707d\u96e3\u4ee3\u8868\u6e1b\u8f15\u885d\u64ca\u6216\uff08\u4e14\uff09\u628a\u670d\u52d9\u6062\u5fa9\u5230\u4ee5\u524d\u7684\u72c0\u614b\uff0c\u901a\u5e38\u4ee3\u8868\u7684\u662f\u4e8b\u767c\u6642\u7684\u6025\u6551\u65b9\u6848\uff1b \u800c\u707d\u96e3\u7ba1\u7406\u4ee3\u8868\u4ee5\u6709\u6548\u7684\u65b9\u5f0f\u5354\u8abf\u5718\u968a\u7684\u5de5\u4f5c\uff0c\u4e26\u78ba\u4fdd\u6e9d\u901a\uff08\u5305\u542b\u5c0d\u5916\uff09\u7ba1\u9053\u7684\u66a2\u901a\u3002
\u5f88\u591a\u4e8b\u60c5\u90fd\u6703\u6709\u610f\u5916\u4e8b\u4ef6\u767c\u751f\uff0c\u4e0d\u7ba1\u662f \u68ee\u6797\u91ce\u706b\u3001 \u706b\u8eca\u7ffb\u8986\u3001 \u98df\u54c1\u885b\u751f\u65b0\u805e\u7b49\u7b49\u3002 \u5728\u9762\u5c0d\u7dca\u6025\u4e8b\u4ef6\u6642\uff0c\u6700\u597d\u7684\u8655\u7406\u8fa6\u6cd5\u5c31\u662f\u4e8b\u524d\u7df4\u7fd2\u4e26\u898f\u5283\u597d\u6709\u7cfb\u7d71\u7684\u6307\u5357\u3002 \u5373\u4f7f\u767c\u751f\u4e86\u6c92\u9047\u904e\u7684\u72c0\u6cc1\uff0c\u900f\u904e \u63d0\u524d\u7684\u5206\u5de5 \u548c \u5de5\u4f5c\u7684\u7d50\u69cb\u5316\uff0c \u5c07\u6703\u8b93\u8655\u7406\u4eba\u54e1\u6709\u500b\u4f9d\u8a17\u4e26\u8f03\u70ba\u51b7\u975c\u9762\u5c0d\u3002
"},{"location":"feedback/site-reliability-workbook/incident-response/#\u5206\u5de5","title":"\u5206\u5de5","text":"\u5206\u5de5\u57fa\u672c\u4e0a\u5206\u70ba\u5169\u5927\u90e8\u5206\uff1a\u6e9d\u901a \u548c \u8655\u7406\u3002 \u900f\u904e\u4e3b\u8981\u6307\u63ee\u5b98\uff08Incident Commander, IC\uff09\u3001 \u6e9d\u901a\u9818\u5c0e\uff08Communications Lead, CL\uff09\u548c\u8655\u7406\u9818\u5c0e\uff08Operations Lead, Ops Lead, OL\uff09\uff0c \u628a\u76f8\u95dc\u5de5\u4f5c\u5283\u5206\u597d\u3002
IC \u7684\u5de5\u4f5c\u4fdd\u62ec\uff1a
\u5982\u679c\u4e8b\u4ef6\u5920\u5927\uff0cIC \u53ef\u80fd\u6703\u628a\u6e9d\u901a\u7684\u4efb\u52d9\u6307\u6d3e\u7d66\u4e00\u500b CL\uff0c\u9664\u6b64\u4e4b\u5916\uff0c\u4ed6\u53ef\u80fd\u9084\u6703\u6709\u9019\u4e9b\u8077\u8cac\uff1a
OL \u5247\u662f\u5c08\u6ce8\u5728\uff1a
Google Home\uff08\u4ee5\u4e0b\u7c21\u7a31 GH\uff09\u662f\u4e00\u500b\u667a\u80fd\u7ba1\u5bb6\uff0c\u7576\u4f60\u9700\u8981\u8acb\u4ed6\u8655\u7406\u4e8b\u60c5\u6642\uff0c\u4f8b\u5982\u6253\u958b\u5ba2\u5ef3\u96fb\u71c8\uff0c \u9700\u8981\u5148\u89f8\u767c\u95dc\u9375\u5b57\uff08hotword\uff09\uff0c\u4f8b\u5982 OK Google\u3002 \u6bcf\u500b\u4eba\u5728\u8aaa\u9019\u500b\u95dc\u9375\u5b57\u6642\uff0c\u53ef\u80fd\u7684\u8a9e\u8abf\u548c\u53e3\u6c23\u90fd\u4e0d\u4e00\u6a23\uff0c\u6545\u800c\u4f7f\u7528\u8005\u9700\u8981\u63d0\u4f9b\u8a13\u7df4\u7d20\u6750\u4f86\u5e6b\u52a9\u8fa8\u8b58\u3002 \u9019\u500b\u7d20\u6750\u6703\u88ab\u5b58\u653e\u5728\u96f2\u7aef\uff0c\u4f46\u662f\u8a13\u7df4\u7d50\u679c\u7684\u53c3\u6578\u6703\u653e\u5728\u5ba2\u6236\u7684\u88dd\u7f6e\u4e0a\uff0c \u6545\u800c GH \u6703\u9700\u8981\u5b9a\u671f\u53bb\u548c server \u53d6\u5f97\u8a13\u7df4\u7d50\u679c\u3002
\u5728\u4e00\u6b21\u7248\u672c\u66f4\u65b0\uff08v1.88\uff09\u4e2d\uff0c\u88e1\u9762\u6709\u4e00\u500b\u932f\u8aa4\u6703\u5c0e\u81f4 GH \u53bb\u8ddf server \u8981\u7684\u6b21\u6578\u8b8a\u6210\u4e00\u822c\u7684 50 \u500d\u3002 \u5728 5 \u6708 22 \u865f\u79ae\u62dc\u4e00\u4e2d\uff0c \u4e00\u500b\u5f85\u547d\u5c0f\u7d44\u6210\u70ba Jasper \u89c0\u5bdf\u5230\u6bcf\u79d2\u5b58\u53d6\u91cf\uff08queries per second, QPS\uff09\u8b8a\u9ad8\u4e86\uff0c \u6545\u800c\u66ab\u505c\u65b0\u7248\u672c\u7684\u63a8\u5ee3\uff0c\u8b93\u4ed6\u505c\u5728 25% \u7684\u63a8\u5ee3\u6bd4\u4f8b\uff08\u4e5f\u5c31\u662f\u7dda\u4e0a\u6709\u56db\u5206\u4e4b\u4e00\u7684\u7528\u6236\u4f7f\u7528\u65b0\u7248\u672c\uff09\u3002 Jasper \u958b\u7968\u8ffd\u8e64\u9019\u500b\u7570\u5e38\u72c0\u614b\uff0c\u4e26\u5099\u8a3b\u77ed\u6642\u9593\u7684\u5b58\u53d6\u91cf\u4f86\u5230\u4e00\u822c\u60c5\u6cc1\u7684 50 \u500d\u3002
\u958b\u767c\u8005 Melinda \u628a\u9019\u500b\u554f\u984c\u9023\u7d50\u5230\u4e4b\u524d\u7684\u67d0\u4e00\u5f35\u820a\u7684\u7968\uff0c \u9019\u500b\u820a\u7684\u7968\u662f\u5728\u8aaa\u660e GH \u6bcf\u6b21\u5237\u65b0\u767b\u5165\u72c0\u614b\u90fd\u6703\u4e0d\u88ab\u9810\u671f\u7684\u53bb\u5b58\u53d6\u4e00\u6b21\u95dc\u9375\u5b57\u7684\u8a13\u7df4\u7d50\u679c\uff0c \u800c\u9019\u500b\u932f\u8aa4\u9810\u671f\u6703\u5728\u9019\u6b21\u7248\u672c\u66f4\u65b0\uff08v1.88\uff09\u4e2d\u88ab\u89e3\u6c7a\uff0c \u6240\u4ee5\u6700\u7d42\u8a8d\u70ba\u9019\u500b\u7570\u5e38\u6d41\u91cf\u61c9\u8a72\u6703\u662f\u66ab\u6642\u6027\u7684\u554f\u984c\uff0c\u6240\u4ee5\u628a\u6d41\u91cf\u9650\u5236\u62c9\u5927\uff0c\u4e26\u63d0\u9ad8\u63a8\u5ee3\u7a0b\u5ea6\u3002
\u7576\u670d\u52d9\u5728 5 \u6708 31 \u865f\u79ae\u62dc\u4e09\u88ab\u63a8\u5ee3\u5230 50% \u6642\uff0c\u4ed6\u5011\u767c\u73fe\u9019\u554f\u984c\u7684\u6839\u56e0\u4e26\u4e0d\u662f\u9810\u671f\u7684\u820a\u932f\u8aa4\uff0c \u56e0\u70ba\u63d0\u9ad8\u63a8\u5ee3\u7a0b\u5ea6\u61c9\u8a72\u8b93\u9019\u500b\u6d41\u91cf\u4e0b\u964d\uff0c\u4f46\u662f\u537b\u4e0a\u5347\u4e86\u3002 \u540c\u4e00\u5929\uff0c\u5ba2\u670d\u958b\u59cb\u6536\u5230\u4e00\u4e9b\u56de\u5831\uff0c\u8aaa\u660e GH \u5728\u555f\u52d5\u6642\u6536\u5230\u932f\u8aa4\u8a0a\u606f\uff0c \u800c\u9019\u500b\u932f\u8aa4\u8a0a\u606f\u7d93\u904e\u958b\u767c\u5718\u968a\u78ba\u8a8d\u6b63\u662f\u89f8\u767c\u9650\u6d41\u5c0e\u81f4\u7684\u932f\u8aa4\u72c0\u614b\u3002 \u4ed6\u5011\u518d\u4e00\u6b21\u7684\u628a\u6d41\u91cf\u9650\u5236\u62c9\u5927\uff0c\u7d13\u7de9\u4e86\u932f\u8aa4\u767c\u751f\uff0c\u4e26\u9032\u4e00\u6b65\u8ffd\u8e64\u9019\u500b\u932f\u8aa4\u539f\u56e0\u3002 \u96d6\u7136\u9019\u500b\u932f\u8aa4\u662f\u5f8c\u7aef\u958b\u767c\u770b\u5230\u7684\u932f\u8aa4\uff0c\u4f46\u662f\u56e0\u70ba\u9019\u662f\u524d\u7aef\u958b\u767c\u88fd\u9020\u7684\u932f\u8aa4\uff0c \u6240\u4ee5\u5728\u8ffd\u8e64\u521d\u671f\u671d\u8457\u7684\u65b9\u5411\u5b8c\u5168\u662f\u932f\u8aa4\u7684\uff0c\u4e5f\u52a0\u4e0a\u9019\u500b\u932f\u8aa4\u4e26\u6c92\u6709\u88ab\u63d0\u9ad8\u7b49\u7d1a\u5230\u4e8b\u4ef6\uff08incident\uff09\uff0c \u6240\u4ee5\u524d\u5f8c\u7aef\u958b\u767c\u8005\u7684\u6e9d\u901a\u4ecd\u6709\u9650\u3002
\u958b\u767c\u8457\u958b\u59cb\u5617\u8a66\u5728\u65b0\u7248\u672c\u4e2d\u52a0\u4e0a\u4e00\u4e9b\u65e5\u8a8c\uff0c\u4f86\u5e6b\u52a9\u6392\u67e5\u554f\u984c\uff0c\u4f46\u662f\u56e0\u70ba\u6d41\u91cf\u9650\u5236\u958b\u5927\u7684\u95dc\u4fc2\uff0c \u6c92\u6709\u4efb\u4f55\u4f7f\u7528\u8005\u56de\u5831\u9650\u6d41\u7684\u932f\u8aa4\u72c0\u614b\uff0c\u6545\u800c\u6c7a\u5b9a\u9032\u4e00\u6b65\u63d0\u9ad8\u63a8\u5ee3\u5ea6\u3002 \u7576\u4ed6\u5011\u5728 6 \u6708 3 \u865f\u79ae\u62dc\u516d\u628a\u63a8\u5ee3\u5ea6\u63d0\u9ad8\u5230 100% \u6642\uff0c\u5ba2\u670d\u958b\u59cb\u6536\u5230\u90e8\u5206\u7684\u932f\u8aa4\u56de\u5831\uff0c \u5118\u7ba1\u6536\u5230\u932f\u8aa4\u56de\u5831\uff0c\u56e0\u70ba\u5728\u9031\u672b\uff0c\u958b\u767c\u5718\u968a\u4ecd\u6c92\u6709\u628a\u9019\u932f\u8aa4\u63d0\u5347\u5230\u4e8b\u4ef6\uff0c \u4e26\u4f9d\u7167\u6b63\u5e38\u8655\u7406\u932f\u8aa4\u7684\u6d41\u7a0b\uff0c\u5728\u958b\u7968\u8ffd\u8e64\u7cfb\u7d71\u8a0e\u8ad6\u548c\u8655\u7406\u3002
\u5230\u4e86\u9694\u5929\u9031\u65e5\uff0c\u7531\u65bc\u932f\u8aa4\u56de\u5831\u6301\u7e8c\u4e0a\u5347\uff0c\u958b\u767c\u5718\u968a\u7d42\u65bc\u628a\u9019\u500b\u932f\u8aa4\u63d0\u5347\u5230\u6700\u9ad8\u5c64\u7d1a\uff0c \u7531\u65bc\u932f\u8aa4\u7387\u4e0a\u5347\uff0c\u5f85\u547d\u5c0f\u7d44\u8acb\u6c42 SRE \u5718\u968a\u628a\u7bc0\u9ede\u6578\u62c9\u5927\uff08\u63d0\u5347\u8ca0\u8f09\u80fd\u529b\uff09\u4e26\u5c07\u6d41\u91cf\u5c0e\u5f15\u5230\u65b0\u7684\u7bc0\u9ede\uff0c \u4f46\u56e0\u70ba\u662f\u9650\u6d41\u932f\u8aa4\uff0c\u6240\u4ee5\u5373\u4f7f\u62c9\u9ad8\u8ca0\u8f09\uff0c\u65b0\u7684\u7bc0\u9ede\u4ecd\u6703\u62d2\u7d55\u8655\u7406\u9ad8\u4f75\u767c\u7684\u55ae\u4e00\u4f7f\u7528\u8005\u8acb\u6c42\uff0c \u6545\u800c\u628a\u554f\u984c\u66f4\u805a\u7126\u5728\u9650\u6d41\u7684\u539f\u56e0\u4e0a\u9762\u3002 \u6700\u7d42\u5c08\u6848\u7ba1\u7406\u54e1\u518d\u4e00\u6b21\u8acb\u6c42\u63d0\u9ad8\u9650\u6d41\u5f8c\uff0c\u554f\u984c\u88ab\u8212\u7de9\uff0c\u540c\u6642\u958b\u767c\u8005\u4e5f\u5728\u96c6\u4e2d\u6e9d\u901a\u7684\u60c5\u6cc1\u4e0b\u66b8\u89e3\u5f7c\u6b64\u72c0\u6cc1\uff0c \u4e26\u9032\u4e00\u6b65\u6392\u67e5\u51fa\u6839\u56e0\u3002
"},{"location":"feedback/site-reliability-workbook/incident-response/#google-home-\u4e8b\u4ef6\u7684\u4e8b\u5f8c\u5206\u6790","title":"Google Home \u4e8b\u4ef6\u7684\u4e8b\u5f8c\u5206\u6790","text":"\u56e0\u70ba\u958b\u767c\u8005\u5728\u9031\u672b\u4ecd\u81f4\u529b\u65bc\u8655\u7406\u9019\u500b\u554f\u984c\uff0c\u6240\u4ee5\u5373\u4f7f\u5728\u9031\u672b\uff0c\u9019\u554f\u984c\u4ecd\u88ab\u89e3\u6c7a\u4e86\uff0c \u4f46\u9019\u4e26\u4e0d\u662f\u4e00\u500b\u597d\u7684\u8655\u7406\u554f\u984c\u65b9\u5f0f\uff0c\u56e0\u70ba\u6700\u7d42\u6211\u5011\u90fd\u5e0c\u671b\u516c\u53f8\u6210\u70ba\u4e00\u500b\u80fd\u66ff\u54e1\u5de5\u5e73\u8861\u5de5\u4f5c\u548c\u751f\u6d3b\u7684\u5730\u65b9\u3002
\u7b2c\u4e00\u500b\uff0c\u4e0d\u8981\u5728\u9031\u672b\u628a\u63a8\u5ee3\u7a0b\u5ea6\u62c9\u9ad8\u3002 \u518d\u4f86\uff0c\u8655\u7406\u554f\u984c\u7b2c\u4e00\u6b65\u901a\u5e38\u90fd\u662f\u907f\u514d\u932f\u8aa4\u7e7c\u7e8c\u64f4\u6563\uff0c \u7576\u932f\u8aa4\u72c0\u6cc1\u88ab\u7d13\u7de9\u6642\uff0c\u61c9\u8a72\u8981\u5c08\u6ce8\u65bc\u6392\u67e5\u554f\u984c\u7684\u6839\u56e0\uff0c\u800c\u4e0d\u662f\u7e7c\u7e8c\u63a8\u5ee3\u65b0\u7248\u672c\u3002 \u6700\u5f8c\uff0c\u7576\u554f\u984c\u6392\u67e5\u4e0d\u6e05\u6642\uff0c\u61c9\u8a72\u5c07\u932f\u8aa4\u63d0\u5347\u5230\u4e8b\u4ef6\uff0c\u4e26\u53ec\u96c6\u76f8\u95dc\u4eba\u58eb\u4e00\u8d77\u4f86\u8655\u7406\uff0c\u9019\u6a23\u53ef\u4ee5\u907f\u514d\uff1a
\u96c6\u4e2d\u5316\u7684\u8a0e\u8ad6\u662f\u89e3\u6c7a\u4e8b\u4ef6\u7684\u6838\u5fc3\uff0c\u4f8b\u5982\u53ec\u96c6\u4e00\u7fa4\u4eba\u5750\u5728\u4e00\u500b\u6703\u8b70\u5ba4\u6216\u8005\u4e00\u5834\u7dda\u4e0a\u6703\u8b70\uff0c\u4e26\u5373\u6642\u7684\u8a0e\u8ad6\u548c\u9762\u5c0d\u3002
"},{"location":"feedback/site-reliability-workbook/incident-response/#\u5148\u53ef\u7528\u518d\u627e\u6839\u56e0","title":"\u5148\u53ef\u7528\u518d\u627e\u6839\u56e0","text":"Kubernetes \u662f\u4e00\u500b\u5bb9\u5668\u7ba1\u7406\u670d\u52d9\uff0cGoogle \u6709\u5728\u96f2\u7aef\u4e0a\u63d0\u4f9b\u8a17\u7ba1\u670d\u52d9\uff0c\u7a31\u5176\u70ba Google Kubernetes Engine, GKE\u3002 GKE \u5728\u555f\u52d5\u4e4b\u521d\u6703\u5148\u53bb\u7372\u5f97\u670d\u52d9\u9700\u8981\u7684\u93e1\u50cf\u6a94\uff0c\u4f8b\u5982\u7ba1\u7406\u5bb9\u5668\u9700\u8981\u7684\u6392\u7a0b\u5668\u3001\u8ca0\u8f09\u5e73\u8861\u5668\u7b49\u7b49\u3002 \u4f46\u56e0\u70ba Kubernetes \u662f\u4e00\u500b\u958b\u6e90\u670d\u52d9\uff0c\u6240\u4ee5\u6709\u4e9b\u65b0\u7684\u4f9d\u8cf4\u6703\u5728\u7248\u672c\u66f4\u65b0\u6216\u7279\u5b9a\u60c5\u6cc1\u4e0b\u88ab\u65b0\u589e\u9032\u4f86\u3002
\u65e9\u4e0a 6:41 \u6642\uff0cZara \u958b\u59cb\u6ce8\u610f\u5230 Europe-West \u5340\u57df\u555f\u52d5 GKE \u670d\u52d9\u7684\u932f\u8aa4\u7387\u904e\u9ad8\u7684\u544a\u8b66\uff0c \u4e26\u5728 7:06 \u958b\u59cb\u5ba3\u544a\u4e8b\u4ef6\uff0c\u8eab\u70ba\u5ba3\u544a\u4e8b\u4ef6\u8005\uff0cZara \u5c31\u8b8a\u6210\u4e86\u9810\u8a2d\u7684\u4e8b\u4ef6\u6307\u63ee\u5b98\u3002 Zara \u628a\u76f8\u95dc\u60c5\u6cc1\u544a\u8a34\u7d66 Rohit \u4e26\u6307\u6d3e\u5176\u8ca0\u8cac\u5c0d\u5916\uff08GKE \u7684\u4f7f\u7528\u8005\uff09\u6e9d\u901a\u7684\u7a97\u53e3\uff0c Rohit \u5247\u5728 7:24 \u958b\u59cb\u544a\u77e5\u7576\u5730\u5340\u57df\u7684\u5ba2\u6236\u76ee\u524d\u7121\u6cd5\u555f\u52d5\u670d\u52d9\uff0c\u4f46\u662f\u73fe\u6709\u7684\u670d\u52d9\u4ecd\u7136\u53ef\u4ee5\u904b\u884c\u3002
\u5728 8:20 \u524d\uff0c\u5718\u968a\u767c\u73fe\u9019\u6a23\u4e00\u500b log\uff1a
error: failed to run Kubelet: cannot create certificate signing request: Post\nhttps://192.0.2.53/apis/certificates.k8s.io/v1beta1/certificatesigningrequests\n
\u5718\u968a\u958b\u59cb\u5617\u8a66\u9a57\u8b49\u6191\u8b49\u7684\u76f8\u95dc\u64cd\u4f5c\uff0c\u5404\u81ea\u7368\u7acb\u6642\u90fd\u80fd\u904b\u4f5c\uff0c\u4f46\u662f\u7576\u628a\u670d\u52d9\u6574\u5408\u5728\u4e00\u8d77\u6642\uff0c\u5c31\u662f\u6703\u932f\u3002 Zara \u65bc\u662f\u628a\u8655\u7406\u9032\u5ea6\u6574\u7406\u8d77\u4f86\uff0c\u4e26\u5728 8:22 \u958b\u59cb\u5411\u76f8\u95dc\u6e9d\u901a\u7cfb\u7d71\u901a\u5831\uff0c\u8acb\u6c42\u5927\u5bb6\u7684\u5354\u52a9\u3002 \u5230\u4e86 8:45 \u8cc7\u6df1 SRE Il-Seong \u958b\u59cb\u9032\u73ed\uff0c\u4ed6\u9996\u5148\u78ba\u8a8d\u4e86\u7576\u65e5\u66f4\u65b0\u548c\u544a\u8b66\u4e4b\u9593\u7684\u95dc\u4fc2\uff0c \u5728\u78ba\u8a8d\u4e86\u5169\u8005\u4e4b\u9593\u7121\u95dc\u4fc2\u4e4b\u5f8c\uff0c\u958b\u59cb\u628a\u76f8\u95dc\u8cc7\u8a0a\u6574\u5408\u9032\u53ef\u4ee5\u5171\u7de8\u7684\u6587\u4ef6\u4e2d\uff0c\u4e26\u5efa\u8b70 Zara \u8b93\u57fa\u790e\u8a2d\u65bd\u3001 \u96f2\u7aef\u7db2\u8def\u548c\u8a08\u7b97\u8cc7\u6e90\u7684\u76f8\u95dc\u5718\u968a\u90fd\u52a0\u9032\u4e8b\u4ef6\u8655\u7406\u5718\u968a\u4e2d\uff0c\u4e26\u9010\u4e00\u6392\u9664\u3002
\u96a8\u8457\u4e8b\u4ef6\u767c\u751f\u5f97\u8d8a\u4f86\u8d8a\u4e45\uff0c\u9032\u5165\u652f\u63f4\u7684\u5718\u968a\u8d8a\u4f86\u8d8a\u591a\uff0c\u6e9d\u901a\u958b\u59cb\u8b8a\u6210\u4e00\u500b\u6311\u6230\u3002 \u9019\u500b\u4e8b\u4ef6\u7684\u6307\u63ee\u5b98\u4e5f\u5728 10:00 \u6642\u5f9e Zara \u8f49\u79fb\u5230\u8cc7\u6df1\u7684 Il-Seong\uff0c \u65bc\u662f Il-Seong \u958b\u59cb\u628a\u4e8b\u4ef6\u7684\u7d93\u904e\u548c\u554f\u984c\u90fd\u6574\u7406\u548c\u7d50\u69cb\u5316\u3002 Zara \u5247\u5728\u6b64\u6642\u6210\u70ba\u8655\u7406\u9818\u5c0e\uff08OL\uff09\uff0c\u6e9d\u901a\u9818\u5c0e\uff08CL\uff09\u5247\u6307\u6d3e\u7d66 Herais\uff0c \u4e26\u5728\u7576\u4e0b\u5bc4\u9001\u300c\u5168\u9ad4\u52d5\u54e1\u300d\u7684\u4fe1\u7bb1\u7d66\u6240\u6709 GKE \u76f8\u95dc\u7684\u5de5\u7a0b\u3002
\u4e8b\u4ef6\u5230\u6b64\u6642\u6709\u4e86\u4e00\u4e9b\u6e05\u6670\u7684\u5fb5\u72c0\uff1a
\u5728\u6536\u5230\u5168\u9ad4\u52d5\u54e1\u7684\u901a\u77e5\u5f8c\uff0c\u6709\u4e00\u500b GKE \u8cc7\u5b89\u5718\u968a\u540c\u4ec1 Puanani \u52a0\u5165\u6392\u67e5\uff0c \u4e26\u6ce8\u610f\u5230\u6191\u8b49\u7c3d\u767c\u8005\u6c92\u8fa6\u6cd5\u555f\u52d5\u8d77\u4f86\u3002 \u6bcf\u6b21\u5f9e\u5916\u90e8\u5bb9\u5668\u8a3b\u518a\u5546\uff08DockerHub\uff09\u62c9\u53d6\u7684\u93e1\u50cf\u6a94\u90fd\u662f\u88ab\u7834\u58de\u7684\uff0c \u4e26\u6709\u5176\u4ed6\u540c\u4ec1\u8b49\u5be6\u9019\u72c0\u6cc1\u53ea\u5728\u6b50\u6d32\u767c\u751f\u3002 \u9019\u6642\uff0c\u6642\u9593\u662f 9:56\uff0c\u4e8b\u4ef6\u5df2\u7d93\u767c\u751f\u4e86\u4e09\u500b\u5c0f\u6642\u3002
\u9019\u6642\u6307\u63ee\u5b98 Il-Seong \u958b\u59cb\u5206\u6d3e\u5169\u500b\u4e26\u884c\u8655\u7406\u65b9\u5f0f\u7d66\u4e0d\u540c\u5de5\u7a0b\uff0c\u4e00\u500b\u662f\u4fee\u5fa9 DockerHub \u7684\u93e1\u50cf\u6a94\uff0c \u4e00\u500b\u662f\u91cd\u65b0\u8a2d\u5b9a\u53e2\u96c6\u8b93\u4ed6\u5f9e\u81ea\u5df1\u7ba1\u7406\u7684\u5bb9\u5668\u8a3b\u518a\u5546\uff08GCR\uff09\u62c9\u53d6\u93e1\u50cf\u6a94\u3002
\u7b2c\u4e00\u500b\u9078\u9805\u7684\u56f0\u96e3\u5728\u65bc\u9019\u662f\u5916\u90e8\u670d\u52d9\u63d0\u4f9b\u5546\uff0c\u8981\u5373\u6642\u7684\u6539\u52d5\u662f\u6709\u5929\u751f\u7684\u56f0\u96e3\u7684\u3002 \u7b2c\u4e8c\u500b\u9078\u9805\u4ee3\u8868\u8457\u9700\u8981\u91cd\u65b0\u7de8\u8b6f\u57f7\u884c\u6a94\uff0c\u9019\u500b\u904e\u7a0b\u5fc5\u9808\u8017\u8cbb\u4e00\u500b\u5c0f\u6642\u3002 \u5230\u4e86 10:59\uff0c\u7576\u5718\u968a\u5b8c\u6210\u4e86 90% \u7684\u7de8\u8b6f\u6642\uff0c\u4ed6\u5011\u767c\u73fe\u5176\u4ed6\u8a2d\u5b9a\u6c92\u6709\u6539\u5230 GCR\uff0c\u65bc\u662f\u91cd\u65b0\u7de8\u8b6f\u3002 \u9019\u6642\uff0c\u6709\u500b\u5de5\u7a0b Tugay \u60f3\u5230\u4e00\u500b\u7d55\u5999\u7684\u65b9\u6cd5\uff1a\u6211\u5011\u53bb hook \u5f9e DockerHub \u62c9\u53d6\u93e1\u50cf\u6a94\u7684\u8acb\u6c42\uff0c \u4e26\u5728\u56de\u61c9\u4e2d\u653e\u4e0a\u6b63\u78ba\u7684\u93e1\u50cf\u6a94\uff0c\u800c GCR \u672c\u4f86\u5c31\u6709\u8a2d\u8a08\u597d\u9019\u500b\u529f\u80fd\u4e86\uff01
\u5728\u548c GCR \u5de5\u7a0b\u78ba\u8a8d\u597d\u4e4b\u5f8c\uff0c\u4ed6\u5011\u5728\u6bcf\u6b21\u62c9\u53d6\u6642\u52a0\u4e0a\u4e00\u500b\u9078\u9805\uff1a --registry-mirror=https://mirror.gcr.io
\uff0c \u9019\u6642\uff0c11:29\uff0c\u4ed6\u5011\u6ce8\u610f\u5230\uff0c\u62c9\u53d6\u93e1\u50cf\u6a94\u7684\u904e\u7a0b\u672c\u4f86\u5c31\u6709\u9019\u500b\u9078\u9805\u4e86\uff01 \u63db\u53e5\u8a71\u8aaa\uff0c\u6709\u554f\u984c\u7684\u93e1\u50cf\u6a94\u5728 GCR\uff01 \u5230\u4e86 11:59 \u4ed6\u5011\u4fee\u5fa9\u4e86 GCR \u4e0a\u932f\u8aa4\u7684\u93e1\u50cf\u6a94\uff0c\u4e26\u4e14\u5728 12:11 \u56de\u5831\u6240\u6709\u5efa\u7acb\u53e2\u96c6\u7684\u72c0\u6cc1\u90fd\u5df2\u4e0d\u5728\u4e86\u3002 \u6b64\u6642\uff0c\u9019\u500b\u5b58\u5728 6 \u500b\u5c0f\u6642\u53c8 40 \u5206\u9418\u7684\u4e8b\u4ef6\u7d42\u65bc\u88ab\u56de\u5831\u70ba\u8655\u7406\u5b8c\u7562\uff0c\u5f8c\u7e8c\u5728\u4e8b\u4ef6\u5831\u544a\u4e2d\uff0c 6 \u500b\u5718\u968a\u300141 \u500b\u7368\u7acb\u4eba\u54e1\u51fa\u73fe\u5728\u9019\u500b 26000 \u5831\u544a\u4e2d\uff0c\u4e26\u4e14\u5728\u5831\u544a\u4e2d\u63d0\u5230 28 \u500b\u4e8b\u4ef6\u884c\u70ba\u9ede\u3002
GKE on-call \u6210\u54e1 Zara \u5feb\u901f\u767c\u73fe\u554f\u984c\u4e26\u4e14\u6307\u6d3e\u8ca0\u8cac\u9867\u5ba2\u6e9d\u901a\u7684\u89d2\u8272\uff0c\u8b93\u5927\u5bb6\u80fd\u5feb\u901f\u610f\u8b58\u5230\u554f\u984c\u7684\u56b4\u91cd\u6027\u3002
GKE \u9019\u500b\u670d\u52d9\u672c\u8eab\u64c1\u6709\u904e\u9ad8\u7684\u8907\u96dc\u6027\u548c\u4f9d\u8cf4\u6027\uff0c\u4e26\u4e14\u8f38\u51fa\u7684\u65e5\u8a8c\u4e26\u4e0d\u8db3\u4ee5\u5feb\u901f\u627e\u5230\u554f\u984c\u7665\u7d50\u9ede\uff0c \u4e26\u4e14\u82b1\u4e86\u5f88\u9577\u7684\u6642\u9593\u5728\u4e0d\u662f\u554f\u984c\u7684 DockerHub \u4e0a\u9762\u3002 \u4e8b\u4ef6\u767c\u751f\u4e4b\u521d\uff0c\u6307\u63ee\u5b98\u4e26\u672a\u53ca\u65e9\u64b0\u5beb\u7d50\u69cb\u5316\u7684\u4e8b\u4ef6\u56de\u5831\u6587\u4ef6\uff0c\u9019\u500b\u6587\u4ef6\u53ef\u4ee5\u8b93\u5f8c\u7e8c\u5354\u52a9\u7684\u4eba\u5feb\u901f\u9032\u5165\u72c0\u6cc1\uff0c \u4e26\u4e14\u80fd\u5920\u8b93\u5f88\u591a\u8a0e\u8ad6\u51fa\u4f86\u7684\u89e3\u6cd5\uff0c\u907a\u5fd8\u5728\u6fc0\u70c8\u8a0e\u8ad6\u4e4b\u4e2d\u3002 Zara \u5728\u6307\u63ee\u4e8b\u4ef6\u8655\u7406\u6642\uff0c \u61c9\u8a72\u66f4\u597d\u7684\u7d71\u6574\u591a\u500b\u5de5\u7a0b\u5e2b\uff0c\u4e0d\u8981\u8b93\u5176\u5404\u81ea\u5fd9\u5404\u81ea\u7684\uff0c\u9020\u6210\u904e\u591a\u7684\u91cd\u529f\u548c\u6e9d\u901a\u58c1\u58d8\u3002
\u6700\u5f8c\uff0c\u8655\u7406\u4e8b\u4ef6\u6709\u500b\u5927\u539f\u5247\uff1a\u5148\u60f3\u8fa6\u6cd5\u8b93\u5176\u53ef\u4ee5\u904b\u4f5c\uff0c\u518d\u63a5\u8457\u627e\u6839\u56e0\u3002 \u7576 GKE \u767c\u751f\u72c0\u6cc1\u6642\uff0c\u5de5\u7a0b\u53ef\u4ee5\u5148\u9000\u7248\u5230\u4e0a\u4e00\u6b21\u7684\u7248\u672c\uff0c \u6216\u8005\u7576\u72c0\u6cc1\u662f\u767c\u751f\u5728\u5c40\u90e8\u5730\u5340\u6642\uff0c\u53ef\u4ee5\u8abf\u6574\u8ca0\u8f09\u5e73\u8861\u5668\u5230\u5176\u4ed6\u5340\u57df\uff0c\u8b93\u4f7f\u7528\u8005\u4ecd\u80fd\u6b63\u5e38\u5efa\u7acb\u53e2\u96c6\u3002 \u662f\u7684\uff0c\u7576\u767c\u751f\u4efb\u4f55\u7570\u52d5\u6642\uff0c\u90fd\u6709\u53ef\u80fd\u8b93\u72c0\u6cc1\u66f4\u7cdf\uff0c\u4f46\u662f\u9019\u4e9b\u8655\u7406\u65b9\u6cd5\u90fd\u53ef\u4ee5\u5feb\u901f\u5730\u88ab\u57f7\u884c\uff0c \u800c\u4e0d\u662f\u516d\u500b\u5c0f\u6642\u5f8c\u624d\u80fd\u751f\u6548\u3002
\u56de\u5230\u4e8b\u4ef6\u767c\u751f\u6642\uff0c\u65e9\u4e0a 7:00 \u767c\u73fe\u4f7f\u7528\u8005\u88ab\u5f71\u97ff\u300110:00 \u767c\u73fe\u58de\u6389\u7684\u93e1\u50cf\u6a94\u3001 11:00 \u958b\u59cb\u7de8\u8b6f\u8abf\u6574\u8a2d\u5b9a\u5f8c\u7684\u57f7\u884c\u6a94\u300112:00 \u4fee\u5fa9 GCR \u640d\u58de\u7684\u93e1\u50cf\u6a94\u3002 \u6211\u5011\u5176\u5be6\u53ef\u4ee5\u5728 10:00 \u767c\u73fe\u75c7\u72c0\u6642\uff0c\u5c31\u5feb\u901f\u628a\u6240\u6709\u93e1\u50cf\u6a94\u90fd\u5fa9\u539f\u5230\u53ef\u4ee5\u6b63\u5e38\u904b\u4f5c\u6642\u7684\u7248\u672c\uff0c \u800c\u4e0d\u662f\u63a8\u4e00\u500b\u65b0\u7684\u7248\u672c\u3002
\u4ee5\u9019\u500b\u60c5\u6cc1\u70ba\u4f8b\uff0c\u5176\u5be6\u53ef\u4ee5\u5728\u4e8b\u4ef6\u767c\u751f\u524d\uff0c\u5c31\u6e96\u5099\u597d\u76f8\u95dc\u6025\u6551\u8a2d\u65bd\uff0c\u4f8b\u5982\u5feb\u901f\u5fa9\u539f\u7248\u672c\u3001\u6d41\u91cf\u5c0e\u5f15\u7b49\u7b49\u3002 \u5efa\u7acb\u6025\u6551\u8a2d\u65bd\u6700\u597d\u7684\u6642\u6a5f\u5c31\u662f\u5728\u4e8b\u4ef6\u767c\u751f\u524d\uff0c \u800c\u6025\u6551\u8a2d\u65bd\u7684\u9700\u6c42\u901a\u5e38\u53ef\u4ee5\u5728\u5404\u500b\u4e8b\u5f8c\u6790\u8aa4\u7684\u6587\u4ef6\u4e2d\u627e\u5230\u4e00\u4e9b\u86db\u7d72\u99ac\u8de1\u3002 \u518d\u5f37\u8abf\u4e00\u6b21\uff0c\u5728\u8655\u7406\u4e8b\u4ef6\u6642\uff0c\u61c9\u8a72\u512a\u5148\u8003\u616e\u6025\u6551\u63aa\u65bd\uff1a\u5148\u60f3\u8fa6\u6cd5\u8b93\u5176\u53ef\u4ee5\u904b\u4f5c\uff0c\u518d\u63a5\u8457\u627e\u6839\u56e0\u3002 \u63db\u53e5\u8a71\u8aaa\uff0c\u4e8b\u4ef6\u8655\u7406\u7684\u6d41\u7a0b\u901a\u5e38\u662f\uff1a
\u96fb\u7db2\u4e8b\u4ef6\u901a\u5e38\u4ee3\u8868\u7a81\u7136\u65b7\u96fb\uff0c\u4f8b\u5982\u96fb\u64ca\u3001\u751f\u7269\u4fb5\u5bb3\u7b49\u7b49\uff0c\u70ba\u4e86\u9810\u9632\u670d\u52d9\u7684\u5931\u80fd\uff0c\u901a\u5e38\u6703\u52a0\u4e0a\u4e00\u4e9b\u4fdd\u96aa\uff0c \u4e0d\u65b7\u96fb\u7cfb\u7d71\uff08uninterruptible power supply, UPS\uff09\u5c31\u662f\u70ba\u6b64\u800c\u751f\u7684\u3002 \u5728\u65b7\u96fb\u4e4b\u5f8c\uff0c\u81ea\u4e3b\u5f0f\u767c\u96fb\u6a5f\u904b\u4f5c\u4e4b\u524d\uff0c\u6703\u6709\u500b\u7a7a\u7a97\u671f\uff0c\u4e0d\u65b7\u96fb\u7cfb\u7d71\u6703\u5728\u9019\u6bb5\u6642\u9593\u652f\u63f4\u8db3\u5920\u7684\u96fb\u529b\u3002 Google \u5728\u6bd4\u5229\u6642\u7684\u8cc7\u6599\u4e2d\u5fc3\u5c31\u6709\u9019\u6a23\u7684\u7cfb\u7d71\u3002
2015 \u5e74\u6642\uff0c\u8a72\u8cc7\u6599\u4e2d\u5fc3\u56e0\u70ba\u96fb\u64ca\u5c0e\u81f4\u505c\u96fb\uff0c\u4e0d\u65b7\u96fb\u7cfb\u7d71\u9019\u6642\u958b\u59cb\u63a5\u624b\u96fb\u529b\u7684\u8f38\u51fa\uff0c \u4f46\u662f\u63a5\u4e0b\u4f86\u7684\u5169\u5206\u9418\u5167\uff0c\u53c8\u4f86\u4e86\u4e09\u6b21\u96fb\u64ca\uff08\u542b\u7b2c\u4e00\u6b21\u7e3d\u5171\u56db\u6b21\uff09\u3002 \u5373\u4f7f\u5982\u6b64\uff0c\u904b\u7b97\u670d\u52d9\uff08Google Compute Engine, GCE\uff09\u7684\u4e0d\u65b7\u96fb\u7cfb\u7d71\u537b\u4ecd\u6b63\u5e38\u904b\u4f5c\uff0c \u4f46\u7b2c\u4e09\u548c\u7b2c\u56db\u6b21\u7684\u96fb\u64ca\u537b\u5c0e\u81f4\u78c1\u789f\uff08disk\uff09\u7684\u4e0d\u65b7\u96fb\u7cfb\u7d71\u7684\u5931\u80fd\uff0c\u4e26\u8b93\u78c1\u789f\u505c\u6b62\u904b\u4f5c\u3002 \u78c1\u789f\u7684\u505c\u6b62\u904b\u4f5c\uff0c\u958b\u59cb\u8b93 GCE \u4e0a\u7684\u865b\u64ec\u6a5f\uff08virtual machine, VM\uff09\u51fa\u73fe\u8b80\u5beb\u7684\u932f\u8aa4\u3002
GCE \u7684 SRE \u5de5\u7a0b\u628a\u8cc7\u8a0a\u50b3\u9054\u7d66\u8ca0\u8cac\u78c1\u789f\u7684 SRE \u5de5\u7a0b\uff0c\u4e26\u8b93\u8ca0\u8cac\u78c1\u789f\u7684 SRE \u6210\u70ba\u672c\u6b21\u4e8b\u4ef6\u7684\u6307\u63ee\u5b98\uff0c \u56e0\u70ba\u5176\u64c1\u6709\u91dd\u5c0d\u78c1\u789f\u548c\u4e3b\u6a5f\u4e4b\u9593\u7684\u72c0\u6cc1\u6700\u6e05\u6670\u7684\u6982\u89c0\uff0c\u4e26\u7e3d\u7d50\u4e86\u4e8b\u4ef6\u72c0\u6cc1\uff1a
\u63db\u53e5\u8a71\u8aaa\uff0c\u8655\u7406\u4eba\u54e1\u5c31\u6709\u5e7e\u9805\u5de5\u4f5c\u8981\u8655\u7406\uff1a\u628a\u52d5\u529b\u8f38\u51fa\u5f9e\u4e0d\u65b7\u96fb\u7cfb\u7d71\u548c\u81ea\u4e3b\u767c\u96fb\u6a5f\u5207\u56de\u96fb\u7db2\u63d0\u4f9b\u7684\u96fb\u529b\uff1b \u91cd\u555f\u6240\u6709\u76ee\u524d\u6c92\u6709\u4efb\u4f55 VM \u7684\u4e3b\u6a5f\uff1b\u628a VM \u642c\u9032\u90a3\u4e9b\u5df2\u7d93\u91cd\u555f\u904e\u7684\u4e3b\u6a5f\u3002 \u524d\u9762\u5169\u9805\u5de5\u4f5c\u5df2\u7d93\u6f14\u7df4\u3001\u5be6\u969b\u767c\u751f\u904e\u5f88\u591a\u6b21\uff0c\u4e5f\u6709\u5b8c\u6574\u7684\u6587\u4ef6\u53c3\u8003\uff0c\u4f46\u662f\u7b2c\u4e09\u9805\u537b\u662f\u9996\u6b21\u767c\u751f\u7684\u3002 \u70ba\u6b64\uff0c\u6307\u63ee\u5b98\u6307\u6d3e\u5c08\u9580\u4e00\u500b\u5718\u968a\u53bb\u8a0e\u8ad6\u3001\u5be6\u4f5c\u9019\u500b\u5de5\u9805\uff0c\u4e26\u4e14\u5373\u6642\u76e3\u63a7\u5176\u904b\u4f5c\u72c0\u614b\u3002 \u4e26\u4e14\u5728\u4e8b\u767c\u7576\u4e0b\uff0c\u6307\u6d3e\u53e6\u4e00\u500b\u5c0f\u7d44\u5efa\u69cb\u76f8\u95dc\u5de5\u5177\uff0c\u8b93\u5718\u968a\u53ef\u4ee5\u5feb\u901f\u800c\u6e96\u78ba\u5f97\u57f7\u884c\u642c\u9077\u4f5c\u696d\u3002
"},{"location":"feedback/site-reliability-workbook/incident-response/#\u96fb\u64ca\u5c0e\u81f4\u78c1\u789f\u5931\u80fd\u7684\u4e8b\u5f8c\u5206\u6790","title":"\u96fb\u64ca\u5c0e\u81f4\u78c1\u789f\u5931\u80fd\u7684\u4e8b\u5f8c\u5206\u6790","text":"\u6307\u63ee\u5b98\u5f88\u6709\u7d93\u9a57\u7684\u628a\u8f03\u591a\u7684\u8cc7\u6e90\u653e\u5728\u4e8b\u767c\u7576\u4e0b\u6700\u68d8\u624b\u7684\u554f\u984c\uff0c\u5176\u9918\u7684\u5e38\u898b\u554f\u984c\u5247\u6307\u6d3e\u76f8\u95dc\u5718\u968a\uff0c \u4e26\u8b93\u5176\u5b9a\u6642\u5b9a\u9ede\u56de\u5831\u5f8c\uff0c\u5c31\u95dc\u6ce8\u5728\u642c\u9077 VM \u7684\u5de5\u4f5c\u4e0a\u3002 \u4e5f\u56e0\u70ba\u642c\u9077 VM \u662f\u9700\u8981 GCE\uff08\u77e5\u9053\u76ee\u524d\u5404\u500b VM \u7684\u72c0\u6cc1\uff09\u548c\u78c1\u789f\u5718\u968a\uff08\u77e5\u9053\u76ee\u524d\u4e3b\u6a5f\u72c0\u6cc1\uff09\u4e4b\u9593\u7684\u6e9d\u901a\uff0c \u6240\u4ee5\u6307\u6d3e\u7684\u5718\u968a\u9700\u8981\u78ba\u4fdd\u80fd\u5728\u9019\u5169\u8005\u4e4b\u4e2d\u9032\u884c\u6709\u6548\u6e9d\u901a\u7684\u3002
"},{"location":"feedback/site-reliability-workbook/incident-response/#\u6e9d\u901a","title":"\u6e9d\u901a","text":"PagerDuty \u662f\u4e00\u500b\u63d0\u4f9b\u4e8b\u4ef6\u8655\u7406\u5e73\u53f0\u7684 SaaS \u670d\u52d9\u5546\uff0c \u5b83\u4e5f\u5728\u5176\u5b98\u7db2\u63d0\u4f9b\u5f88\u591a\u4e8b\u4ef6\u8655\u7406\u7684\u7d20\u6750\u3002
PagerDuty \u65e9\u671f\u53ea\u6709\u4e00\u500b\u6307\u63ee\u5b98\u4e26\u8ca0\u8cac\u5168\u516c\u53f8\u7684\u670d\u52d9\uff0c \u96a8\u8457\u516c\u53f8\u6210\u9577\u5230\u64c1\u6709\u6578\u5341\u500b\u5718\u968a\u6642\uff0c\u4ed6\u5011\u7684\u4e8b\u4ef6\u8655\u7406\u7684\u6a5f\u5236\u4e5f\u8ddf\u8457\u8abf\u6574\u3002 \u4e8b\u5be6\u4e0a\uff0c\u6bcf\u9694\u6578\u6708\uff0c\u4ed6\u5011\u5c31\u6703\u5be9\u8996\u81ea\u5df1\u7684\u4e8b\u4ef6\u8655\u7406\u6a5f\u5236\uff0c\u78ba\u4fdd\u9019\u500b\u6d41\u7a0b\u662f\u6709\u660e\u78ba\u76ee\u7684\u6027\u4e14\u8ddf\u96a8\u8457\u5546\u52d9\u908f\u8f2f\u7684\u3002 \u4f8b\u5982\u4f7f\u7528\u8005\u7121\u6cd5\u767b\u5165\u548c\u7121\u6cd5\u8a3b\u518a\u7684\u8655\u7406\u65b9\u5f0f\u3002
\u4e00\u822c\u4f86\u8aaa\uff0c\u5c0f\u578b\u4e8b\u4ef6\u662f\u4e00\u500b\u5f85\u547d\u5de5\u7a0b\u5c31\u80fd\u8655\u7406\u7684\uff0c\u4f46\u662f\u7576\u51fa\u73fe\u91cd\u5927\u4e8b\u4ef6\u6642\uff0c\u5f80\u5f80\u9700\u8981\u591a\u4eba\u8655\u7406\uff0c \u6211\u5011\u4e0d\u8a72\u8b93\u4e00\u500b\u5f85\u547d\u7684\u5de5\u7a0b\u7368\u81ea\u9762\u5c0d\u9ad8\u58d3\u7684\u60c5\u6cc1\uff0c\u7dca\u6025\u60c5\u6cc1\u7684\u6e9d\u901a\u5728\u9019\u4e4b\u4e2d\u626e\u6f14\u91cd\u8981\u7684\u89d2\u8272\u3002 \u6709\u5e7e\u500b\u65b9\u6cd5\u53ef\u4ee5\u5e6b\u52a9\u5718\u968a\u7684\u6e9d\u901a\uff1a
\u53e6\u5916\u9700\u8981\u6ce8\u610f\u7684\u662f\uff0c\u9577\u6642\u9593\u7684\u707d\u96e3\u8655\u7406\u662f\u9700\u8981\u4eba\u54e1\u8f2a\u66ff\u7684\uff0c \u4f8b\u5982 PagerDuty 2017 \u5e74\u5728\u534a\u591c\u767c\u751f\u9577\u9054\u5341\u5c0f\u6642\u5931\u80fd\u7684\u4e8b\u4ef6\u3002 \u4ed6\u5011\u6bcf\u56db\u500b\u5c0f\u6642\u5c31\u8f2a\u66ff\u4e00\u6b21\u8655\u7406\u4e8b\u4ef6\u7684\u4eba\u54e1\uff0c\u9019\u6a23\u9664\u4e86\u8b93\u4eba\u54e1\u5f97\u5230\u5145\u5206\u4f11\u606f\u4e4b\u5916\uff0c \u4e5f\u53ef\u4ee5\u78ba\u4fdd\u4e8b\u4ef6\u88ab\u5b8c\u6574\u7d00\u9304\uff08\u5426\u5247\u5982\u4f55\u505a\u4ea4\u63a5\uff1f\uff09\u4ee5\u53ca\u8b93\u63a5\u624b\u7684\u4eba\u54e1\u63d0\u51fa\u4e00\u4e9b\u65b0\u7684\u60f3\u6cd5\u3002
"},{"location":"feedback/site-reliability-workbook/incident-response/#\u6846\u67b6","title":"\u6846\u67b6","text":"\u5efa\u7acb\u4e00\u500b\u901a\u7528\u6846\u67b6\u9664\u4e86\u5e6b\u52a9\u6e9d\u901a\u4e4b\u5916\uff0c\u4e5f\u53ef\u4ee5\u627e\u5230\u54ea\u4e9b\u90e8\u5206\u5c0d\u516c\u53f8\u4f86\u8aaa\u662f\u6700\u91cd\u8981\u7684\uff0c\u4f8b\u5982\uff1a
\u6846\u67b6\u7684\u50f9\u503c\u4e5f\u5728\u65bc\u5b83\u63d0\u4f9b\u4e86 \u7406\u8ad6\u4e0a\u7684\u4e8b\u4ef6\u8655\u7406\u65b9\u5f0f\uff0c Google \u767c\u73fe\u5982\u679c\u53ef\u4ee5\u628a\u7406\u8ad6\u548c\u5be6\u52d9\u72c0\u6cc1\u548c\u8655\u7406\u65b9\u5f0f\u9032\u884c\u9023\u7d50\uff0c\u65b0\u9032\u4eba\u54e1\u6703\u66f4\u5bb9\u6613\u9032\u5165\u72c0\u6cc1\u3002 \u9664\u6b64\u4e4b\u5916\uff0c\u5be6\u52d9\u7684\u64cd\u4f5c\u7df4\u7fd2\u3001\u6b77\u4f86\u4e8b\u4ef6\u7684\u5b78\u7fd2\u3001\u4e8b\u5f8c\u5206\u6790\u8655\u7406\u65b9\u5f0f\u7684\u597d\u58de\u5728\u5b78\u7fd2\u904e\u7a0b\u4e2d\u4ecd\u662f\u975e\u5e38\u91cd\u8981\u7684\u4e00\u584a\u3002
\u6c7a\u5b9a\u597d\u6e9d\u901a\u7ba1\u9053\uff0c\u4e0d\u7ba1\u662f Line\u3001Teams \u6216\u7dda\u4e0a\u6703\u8b70\uff0c\u53ea\u8981\u5927\u5bb6\u719f\u6089\u5c31\u597d\u3002 \u6c92\u6709\u4eba\u5e0c\u671b\u5728\u4e8b\u767c\u7576\u4e0b\u9084\u8981\u6c7a\u5b9a\u7528\u4ec0\u9ebc\u4f5c\u6e9d\u901a\u3002 \u9664\u6b64\u4e4b\u5916\uff0c\u4f60\u4e5f\u9700\u8981\u628a\u76f8\u95dc\u670d\u52d9\u7684\u8655\u7406\u4eba\u54e1\u90fd\u5217\u597d\u3002 \u9084\u8a18\u5f97\u5148\u53ef\u7528\u518d\u627e\u6839\u56e0\u4e2d\uff0cGoogle \u4eba\u54e1\u767c\u9001\u4e86\u4e00\u500b\u300c\u5168\u9ad4\u52d5\u54e1\u300d\u7684\u4fe1\u4ef6\u55ce\uff1f \u9019\u5c01\u4fe1\u7684\u524d\u63d0\u5c31\u662f\u5df2\u7d93\u6e96\u5099\u597d\u6240\u6709\u670d\u52d9\u7684\u806f\u7d61\u4eba\u54e1\u3002
\u7e3d\u800c\u8a00\u4e4b\uff0c\u4e8b\u4ef6\u8655\u7406\u6846\u67b6\u91cd\u9ede\u5c31\u662f\uff1a\u660e\u78ba\u6e9d\u901a\u7ba1\u9053\u3001\u8ab0\u8a72\u63a5\u6536\u5230\u8a0a\u606f\u3001\u4e8b\u4ef6\u767c\u751f\u6642\u8ab0\u8981\u8ca0\u8cac\u4ec0\u9ebc\u3002
"},{"location":"feedback/site-reliability-workbook/incident-response/#\u7e3d\u7d50","title":"\u7e3d\u7d50","text":"\u7df4\u7fd2\uff0c\u7df4\u7fd2\uff0c\u9084\u662f\u7df4\u7fd2\u3002 \u8a66\u8457\u81ea\u52d5\u5316\u6a21\u64ec\u4e8b\u4ef6\u767c\u751f\uff0c\u900f\u904e chaos monkey\u3001\u6b77\u53f2\u4e8b\u4ef6\uff0c\u90fd\u662f\u597d\u7684\u65b9\u6cd5\u3002 Google \u6703\u57f7\u884c\u516c\u53f8\u5c64\u7d1a\u7684\u4e8b\u4ef6\u7df4\u7fd2\uff08\u7a31\u70ba Disaster Recovery Testing, or DiRT\uff09\uff0c \u90fd\u662f\u518d\u518d\u7684\u5f37\u8abf\u7df4\u7fd2\u7684\u91cd\u8981\u6027\u3002
\u8655\u7406\u4e8b\u4ef6\u6642\u63a5\u89f8\u5230\u7684\u4eba\u8d8a\u591a\uff0c\u4ee3\u8868\u4e8b\u4ef6\u7684\u7b49\u7d1a\u8d8a\u9ad8\uff0c\u8a66\u8457\u5efa\u7acb\u7d50\u69cb\u5316\u8a0a\u606f\uff0c\u5e6b\u52a9\u5927\u5bb6\u5feb\u901f\u9032\u5165\u72c0\u6cc1\u3002 \u7576\u7136\uff0c\u9019\u4e9b\u6771\u897f\u4e00\u5b9a\u90fd\u662f\u4e8b\u4ef6\u767c\u751f\u524d\u5c31\u6e96\u5099\u597d\u4e14\u7d93\u904e\u5be6\u969b\u4f7f\u7528\u7df4\u7fd2\u7684\uff0c \u9019\u4e9b\u7df4\u7fd2\u90fd\u6703\u5e6b\u52a9\u6211\u5011\u5efa\u7acb\u808c\u8089\u8a18\u61b6\uff0c\u907f\u514d\u5728\u8166\u888b\u7a7a\u767d\u7684\u60c5\u6cc1\u4e0b\uff0c\u8b93\u6642\u9593\u767d\u767d\u6d41\u5931\u3002
DiRT \u6240\u62ab\u9732\u7684\u4e00\u4e9b\u554f\u984c\u5728 Google \u958b\u59cb\u5be6\u65bd DiRT \u5728\u4e00\u4e9b\u5c0f\u7cfb\u7d71\u4e0a\u4e4b\u5f8c\uff0c\u4ed6\u5011\u5617\u8a66\u628a\u6e2c\u8a66\u653e\u5230\u66f4\u5927\u898f\u6a21\uff1a\u516c\u53f8\u5c64\u7d1a\u3002
\u4ed6\u5011\u5617\u8a66\u8b93\u4e00\u500b\u5340\u57df\u7684\u8fa6\u516c\u5ba4\u548c\u8cc7\u6599\u4e2d\u5fc3\u6574\u500b\u65b7\u7db2\u548c\u505c\u96fb\uff0c\u6a21\u64ec\u5927\u5730\u9707\u7684\u60c5\u6cc1\u3002 \u7406\u60f3\u4e0a\u7576\u7136\u6703\u6709\u500b\u5099\u63f4\u63a5\u624b\u9019\u4e9b\u5931\u80fd\u7684\u670d\u52d9\uff0c\u4f46\u537b\u767c\u73fe\u4e00\u4e9b\u610f\u60f3\u4e0d\u5230\u7684\u72c0\u6cc1\uff0c\u4f8b\u5982\uff1a
\u63db\u53e5\u8a71\u8aaa\uff0c\u4e0d\u53ea\u662f\u5c0d\u5916\u670d\u52d9\uff0c\u4e00\u4e9b\u7528\u65bc\u751f\u7522\u3001\u5167\u90e8\u7cfb\u7d71\uff0c \u5305\u62ec\u4eba\u529b\u8cc7\u6e90\u3001\u8ca1\u52d9\u3001\u8cc7\u5b89\u548c\u5404\u7a2e\u8a2d\u65bd\u90fd\u9700\u8981\u88ab\u6e2c\u8a66\u3002
\u9664\u6b64\u4e4b\u5916\uff0c\u65e9\u671f\u6e2c\u8a66\uff0c\u53ea\u6709\u4e00\u500b\u4eba\u5728\u832b\u832b\u6587\u4ef6\u4e2d\u6210\u529f\u627e\u5230\u7dca\u6025\u6642\u7684\u901a\u8a0a\u8fa6\u6cd5\uff08\u6253\u7279\u6b8a\u96fb\u8a71\uff09\uff0c \u96a8\u8457\u4e4b\u5f8c\u7684\u7df4\u7fd2\uff0c\u8d85\u904e 100 \u500b\u4eba\u80fd\u5920\u627e\u5230\u9019\u500b\u6587\u4ef6\uff0c\u4f46\u662f\u537b\u767c\u73fe\u9019\u500b\u901a\u8a0a\u65b9\u6cd5\u6700\u591a\u53ea\u80fd\u5bb9\u7d0d 40 \u4eba\u3002 \u4e26\u4e14\u7576\u6709\u4eba\u628a\u8a72\u96fb\u8a71\u8a2d\u5b9a\u70ba\u5f85\u6a5f\u72c0\u614b\u6642\uff0c\u6703\u5c0e\u81f4\u96fb\u8a71\u4e2d\u7684\u5927\u5bb6\u88ab\u8feb\u4eab\u53d7\u512a\u7f8e\u7684\u5f85\u6a5f\u97f3\u6a02\uff0c \u6545\u800c\u9700\u8981\u8a2d\u8a08\u51fa\u628a\u4eba\u8e22\u8d70\u7684\u529f\u80fd\u3002
\u6700\u5f8c\u4e00\u500b\u6709\u8da3\u4f8b\u5b50\u662f\uff0c\u5728\u6a21\u64ec\u9577\u671f\u505c\u96fb\u6642\uff0c\u70ba\u4e86\u6eff\u8db3\u767c\u96fb\u6a5f\u7684\u4f9b\u96fb\uff0c\u9700\u8981\u7533\u8acb\u8cfc\u8cb7\u5927\u91cf\u67f4\u6cb9\u71c3\u6599\u3002 \u9019\u500b\u7533\u8acb\u8d70\u7684\u662f\u7dca\u6025\u652f\u51fa\u6d41\u7a0b\uff0c\u4f46\u7531\u65bc\u627e\u4e0d\u5230\u9019\u500b\u7dca\u6025\u652f\u51fa\u7684\u76f8\u95dc\u6587\u4ef6\uff0c\u6700\u7d42\u8a72\u6e2c\u8a66\u7684\u53c3\u8207\u8005\u5011\uff0c \u627e\u5230\u4e00\u500b\u8c6a\u6c23\u842c\u5343\u7684\u540c\u4e8b\u9858\u610f\u628a\u81ea\u5df1\u7684\u4fe1\u7528\u5361\u4ea4\u51fa\u4f86\uff0c\u4e26\u5237\u4e0a\u516d\u4f4d\u6578\u7684\u8cbb\u7528\u3002 \u6211\u5011\u90fd\u77e5\u9053\u5efa\u7acb\u670d\u52d9\u9700\u8981\u64b0\u5beb\u6587\u6a94\u8b93\u4eba\u4f7f\u7528\uff0c\u4f46\u662f\u6211\u5011\u8981\u600e\u9ebc\u77e5\u9053\u9019\u4efd\u6587\u6a94\u582a\u4e0d\u582a\u7528\uff1f \u552f\u4e00\u7684\u65b9\u6cd5\u5c31\u662f\u901a\u904e\u6e2c\u8a66\u548c\u7df4\u7fd2\u3002
\u7576\u7136\uff0c\u4e00\u500b\u516c\u53f8\u6587\u5316\u5728\u9019\u4e4b\u4e2d\u626e\u6f14\u5f88\u91cd\u8981\u7684\u89d2\u8272\uff0c\u9858\u610f\u63a5\u53d7\u5931\u6557\u4e26\u5c07\u5176\u4f5c\u70ba\u5b78\u7fd2\u624b\u6bb5\u7684\u7d44\u7e54\uff0c \u5c0d\u65bc\u4f7f\u5718\u968a\u767c\u73fe\u548c\u89e3\u6c7a\u7cfb\u7d71\u6027\u554f\u984c\uff0c\u8d77\u5230\u4e00\u500b\u5f88\u5927\u7684\u4f5c\u7528\u3002 \u6700\u5f8c\u63d0\u9192\u4e00\u4e0b\uff0c\u4e00\u500b\u96c6\u4e2d\u914d\u7f6e\u7684\u6307\u63ee\u4e2d\u5fc3\u80fd\u5920\u4e86\u89e3\u548c\u76e3\u63a7\u4efb\u4f55\u6642\u5019\u6b63\u5728\u9032\u884c\u7684\u6240\u6709\u6e2c\u8a66\uff0c \u9019\u4f7f\u5f97 DiRT \u6210\u70ba\u4e00\u500b\u66f4\u5b89\u5168\u7684\u6e2c\u8a66\u74b0\u5883\u3002 \u7576\u767c\u751f\u7121\u6cd5\u9810\u6599\u7684\u60c5\u6cc1\u6642\uff0c \u6307\u63ee\u4e2d\u5fc3\u7684\u5718\u968a\uff08\u4e3b\u8981\u7531\u5404\u500b\u9818\u57df\u7684\u6280\u8853\u5c08\u5bb6\u7d44\u6210\uff09\u6703\u4ecb\u5165\u6062\u5fa9\u6e2c\u8a66\u6216\u4fee\u5fa9\u554f\u984c\u3002
"},{"location":"feedback/site-reliability-workbook/managing-load/","title":"\u8ca0\u8f09\u7ba1\u7406","text":"\u901a\u5e38\u4e00\u500b\u5927\u578b\u670d\u52d9\u7684\u8ca0\u8f09\u7ba1\u7406\u6a5f\u5236\u5305\u542b\u4ee5\u4e0b\u4e09\u7a2e\u65b9\u5f0f\uff1a \u8ca0\u8f09\u5e73\u8861\uff08load balancing\uff09\u3001\u8ca0\u8f09\u524a\u6e1b\uff08load shedding\uff09\u548c\u81ea\u52d5\u589e\u6e1b\uff08auto scaling\uff09\u3002 \u4f46\u662f\u9019\u4e9b\u6a5f\u5236\u90fd\u9700\u8981\u540c\u6b65\u5f7c\u6b64\u7684\u72c0\u614b\uff0c\u5426\u5247\u5f88\u53ef\u80fd\u5728\u67d0\u4e9b\u6642\u5019\u9020\u6210\u932f\u8aa4\u8a2d\u7f6e\uff0c\u4e26\u7834\u58de\u53ef\u7528\u6027\u3002
\u5728\u5343\u5947\u767e\u602a\u7684\u7dda\u4e0a\u72c0\u6cc1\u4e2d\uff0c\u672c\u7ae0\u7bc0\u63d0\u4f9b\u4e00\u4e9b\u5efa\u8b70\u4f86\u9075\u5faa\u3002
\u8ca0\u8f09\u5e73\u8861\u7684\u57fa\u790e
\u5728 SRE \u4e2d\uff0c\u900f\u904e\u5169\u7a2e\u8ca0\u8f09\u5e73\u8861\u7684\u4e0d\u540c\u89d2\u5ea6\u5207\u5165\uff0c\u8b93\u5927\u5bb6\u7406\u89e3\u76f8\u95dc\u8a2d\u8a08\u4e0a\u7684\u56f0\u5883\u548c\u5e38\u898b\u89e3\u6cd5\u3002
\u9996\u5148\u6211\u5011\u900f\u904e Google \u96f2\u7aef\u7684\u8ca0\u8f09\u5e73\u8861\u6a5f\u5236\uff08Google Cloud Load Balancing, GCLB\uff09\uff0c \u4f86\u63d0\u4f9b\u5e7e\u500b\u5efa\u8b70\u7684\u67b6\u69cb\u7576\u4f5c\u53c3\u8003\u3002
\u5f9e\u4f7f\u7528\u8005\u7684\u8acb\u6c42\u9001\u51fa\uff0c\u5230\u6700\u7d42\u5230\u9054\u63d0\u4f9b\u670d\u52d9\u7684\u7bc0\u9ede\uff0c\u4e2d\u9593\u7684\u6bcf\u4e00\u500b\u74b0\u7bc0\u7684\u8ca0\u8f09\u7ba1\u7406\uff0c\u90fd\u503c\u5f97\u63a2\u8a0e\u3002 \u8981\u5747\u8861\u4f7f\u7528\u8005\u9001\u51fa\u7684\u8acb\u6c42\uff0c\u6700\u65b9\u4fbf\u7684\u5c31\u662f\u4f7f\u7528 DNS\u3002 DNS \u900f\u904e\u4f7f\u7528\u8005\u7684 IP \u7d66\u4e88\u6700\u9069\u7576\u7684\u8cc7\u6599\u4e2d\u5fc3 IP\uff0c\u4f86\u9054\u5230\u8ca0\u8f09\u7684\u5206\u6563\u3002 \u4f46\u662f\u4f7f\u7528\u8005\u6703\u5feb\u53d6 IP\uff0c\u5982\u679c\u8cc7\u6599\u4e2d\u5fc3\u5931\u80fd\u6642\uff0c\u8981\u5982\u4f55\u8b93\u4f7f\u7528\u8005\u91cd\u65b0\u8acb\u6c42\u65b0\u7684 IP\uff0c \u800c\u4e0d\u662f\u7b49\u5230\u671f\u9650\u5230\u671f\u624d\u53bb\u91cd\u65b0\u8acb\u6c42\uff1f
\u9019\u4e9b\u90fd\u662f\u5be6\u4f5c\u4e0a\u7684\u56f0\u96e3\uff0c\u6240\u4ee5 GCLB \u63a1\u7528 anycast \u7684\u6a5f\u5236\u3002 \u4e0d\u540c\u65bc unicast \u7684\u8def\u7531\u65b9\u5f0f\u53ea\u6703\u9ede\u5c0d\u9ede\u7684\u50b3\u8f38\uff0c anycast \u5728\u8def\u7531\u904e\u7a0b\u4e2d\uff0c\u8def\u7531\u5668\u6703\u5224\u65b7\u6700\u8fd1\u7684\u8cc7\u6599\u4e2d\u5fc3\uff0c\u4e26\u9001\u5f80\u6307\u5b9a\u4f4d\u7f6e\u3002
\u8def\u7531\u5668\u600e\u9ebc\u77e5\u9053\u6709\u54ea\u4e9b\u8cc7\u6599\u4e2d\u5fc3
\u6bcf\u500b\u8cc7\u6599\u4e2d\u5fc3\u6703\u4f7f\u7528 BGP \u4f86\u767c\u9001\u81ea\u5df1\u7684\u8cc7\u8a0a\u7d66\u7db2\u8def\u4e16\u754c\u3002 \u800c\u7576\u4f7f\u7528\u8005\u900f\u904e\u7db2\u8def\u670d\u52d9\u63d0\u4f9b\u8005\uff08ISP\uff09\u767c\u9001\u5c01\u5305\u6642\uff0cISP \u6703\u5229\u7528 BGP \u7684\u8cc7\u8a0a\uff0c \u5e6b\u52a9\u4f7f\u7528\u8005\u7684\u5c01\u5305\u50b3\u5230\u6700\u9069\u5408\u7684\u8cc7\u6599\u4e2d\u5fc3\u3002
\u4f46\u9019\u4ecd\u6703\u6709\u5e7e\u500b\u554f\u984c\uff1a
\u63a5\u8457\uff0c\u6211\u5011\u5c31\u4f86\u4ecb\u7d39\u4e00\u4e0b GCLB \u7684\u67b6\u69cb\uff0c\u7136\u5f8c\u95e1\u8ff0\u4ed6\u5982\u4f55\u89e3\u6c7a\u9019\u4e9b\u554f\u984c\u3002
"},{"location":"feedback/site-reliability-workbook/managing-load/#gclb-\u7684\u67b6\u69cb","title":"GCLB \u7684\u67b6\u69cb","text":"\u7576\u5c01\u5305\u9001\u5230\u8cc7\u6599\u4e2d\u5fc3\u7684\u8def\u7531\u5668\u6642\uff0c\u5176\u9996\u5148\u63a5\u89f8\u7684\u4e0b\u6e38\u662f Maglev\uff1b \u5c0d Maglev \u4f86\u8aaa\uff0c\u4e0b\u6e38\u662f Google Front End\uff08GFE\uff09\uff0c\u800c\u5c0d GFE \u4f86\u8aaa\uff0c\u5176\u4e0b\u6e38\u5c31\u662f\u771f\u6b63\u7684\u670d\u52d9\u7bc0\u9ede\uff0c \u53ef\u80fd\u662f Kubernetes \u7684 ingress \u4e5f\u53ef\u80fd\u53ea\u662f\u55ae\u7d14\u7684 Nginx\u3002
---\ntitle: GCLB \u7684\u67b6\u69cb\n---\nflowchart TB\n u[User] --10.0.0.1--> i((ISP))\n subgraph \"Data Center 1\"\n direction TB\n u1[router] --> lb1[Load balancers: Maglev]\n p1[HTTP Reverse Proxies: GFE]\n end\n subgraph \"Data Center 2\"\n direction TB\n u2[router] --> lb2[Load balancers: Maglev]\n lb2 --> p2[HTTP Reverse Proxies: GFE]\n p2 --> svc[Services]\n end\n i --10.0.0.1--> u1\n i --10.0.0.1--> u2\n lb1 -.Stabilized anycast.-> lb2\n
\u5982\u679c Maglev \u767c\u73fe\u5c01\u5305\u7684\u76ee\u7684\u5730\uff08\u670d\u52d9\u7684 VIP\uff09\u662f\u5176\u4ed6\u8cc7\u6599\u4e2d\u5fc3\uff0c\u5b83\u5c31\u6703\u628a\u5c01\u5305\u9001\u7d66\u8a72\u53e2\u96c6\u3002 \u5982\u4e0a\u5716\u7684 Stabilized anycast
\u3002\u4f9d\u6b64\uff0c\u5c31\u53ef\u4ee5\u89e3\u6c7a \u4f7f\u7528\u8005\u7684\u76ee\u6a19\u8cc7\u6599\u4e2d\u5fc3\u5728\u9023\u7dda\u904e\u7a0b\u4e2d\u53ef\u80fd\u6703\u88ab\u6539\u8b8a \u7684\u554f\u984c
\u4ec0\u9ebc\u662f Maglev
\u66f4\u591a Maglev \u8aaa\u660e\uff0c\u8acb\u53c3\u8003\u6b64\u7bc7\u3002
\u4f8b\u5982\u5b83\u662f\u900f\u904e VIP matching \u627e\u5230\u5c01\u5305\u662f\u5426\u70ba\u5176\u4ed6\u8cc7\u6599\u4e2d\u5fc3\u3002
Maglev \u4e0b\u7684 GFE \u901a\u5e38\u5c31\u6703\u662f TCP \u548c TLS \u9023\u7dda\u7684\u8655\u7406\u4f4d\u7f6e\u3002\u9664\u6b64\u4e4b\u5916\uff0c\u4ed6\u4e5f\u6703\uff1a
\u56de\u5230\u524d\u9762\u63d0\u7684\u53e6\u4e00\u500b\u554f\u984c \u55ae\u4e00\u7684\u8cc7\u6599\u4e2d\u5fc3\u4ecd\u53ef\u80fd\u88ab\u9644\u8fd1\u7684\u4f7f\u7528\u8005\u6c96\u57ae\u3002 \u7576\u53e2\u96c6\u5167\u670d\u52d9\u5931\u80fd\u6216\u8ca0\u8377\u9ad8\u6642\uff0cMaglev \u53c8\u6216\u8005 GFE \u8981\u600e\u9ebc\u628a\u6d41\u91cf\u5206\u6563\u5230\u5176\u4ed6\u53e2\u96c6\u5462\uff1f \u4ed6\u5011\u9760\u7684\u662f Global Software Load Balancer\uff08GSLB\uff09\u7684\u5354\u8abf\u3002
flowchart TB\n m1[Maglev]\n m2[Maglev]\n gslb[GSLB]\n g1[GFE]\n g2[GFE]\n bs1[Backend Service]\n bs2[BackendService]\n m1 -.-gslb-.- g1\n m2 -.-gslb-.- g2\n m1 --> g1\n m2 --> g2\n g1 --> bs1\n g2 -.- bs2\n g2 --> bs1\n
GSLB \u6703\u63a7\u5236\u5c0d GFE \u7684\u9023\u7dda\u548c\u9001\u5f80\u670d\u52d9\u7684\u8acb\u6c42\u5206\u4f48\uff1a
\u4e5f\u5c31\u662f\u8aaa\uff0cGSLB \u662f\u4e00\u7a2e\u628a Maglev \u548c GFE \u806f\u7e6b\u5728\u4e00\u8d77\u7684\u81a0\u6c34\uff0c \u8b93 Maglev \u53ef\u4ee5\u627e\u5230\u6700\u9760\u8fd1\u4e14\u5065\u5eb7\u7684 GFE\uff1b \u4e5f\u8b93 GFE \u80fd\u5920\u627e\u5230\u6700\u9760\u8fd1\u4e14\u5065\u5eb7\u7684\u670d\u52d9\u7fa4\u7d44\u3002
\u900f\u904e\u9019\u4e9b\u63aa\u65bd\uff0c\u8b93\u6574\u500b GCLB \u6210\u70ba\u4e00\u500b\u4f4e\u5ef6\u9072\u3001\u9ad8\u53ef\u7528\u7684\u670d\u52d9\uff0c\u4e26\u4e14\u89e3\u6c7a\u4e86 anycast \u7684\u5169\u500b\u554f\u984c\u3002
"},{"location":"feedback/site-reliability-workbook/managing-load/#gclb-\u7684\u5ef6\u4f38","title":"GCLB \u7684\u5ef6\u4f38","text":"Google \u900f\u904e\u628a Maglev \u548c GFE \u5927\u91cf\u7f6e\u65bc\u5404\u500b\u8cc7\u6599\u4e2d\u5fc3\uff0c \u4f86\u76e1\u53ef\u80fd\u6e1b\u5c11\u4f7f\u7528\u8005\u548c\u670d\u52d9\u7684\u591a\u6b21 TCP/TLS \u4f86\u56de\u4ea4\u63e1\u3002 \u7576\u4f7f\u7528\u8005\u548c GFE \u5b8c\u6210\u9023\u7dda\u5f8c\uff0c\u4ed6\u6703\u4f7f\u7528\u548c\u4e0a\u6e38\u5efa\u7acb\u597d\u7684\u5b89\u5168\u9023\u7dda\u4f86\u9032\u884c\u8acb\u6c42\uff0c\u9032\u4e00\u6b65\u964d\u4f4e\u5ef6\u9072\u3002
GCLB \u63d0\u4f9b SLA 99.99% \u7684\u9ad8\u53ef\u7528\u6027\uff0c\u4e26\u4e14\u63d0\u4f9b\u5f88\u591a\u670d\u52d9\u4f86\u8b93\u4f7f\u7528\u8005\u9032\u4e00\u6b65\u63d0\u9ad8\u53ef\u7528\u6027\u3002 \u4f8b\u5982\u9810\u8a2d\u6703\u8b93\u4f7f\u7528\u8005\u900f\u904e\u91d1\u7d72\u96c0\u90e8\u7f72\uff0c\u6bcf\u6b21\u90e8\u7f72\u65b0\u7248\u672c\u7684\u61c9\u7528\u7a0b\u5f0f\u6642\uff0c \u90fd\u53ef\u4ee5\u4e8b\u5148\u653e\u51fa\u5148\u884c\u7248\u4f86\u9032\u884c\u6e2c\u8a66\uff0c\u907f\u514d\u4e00\u6b21\u6027\u90e8\u7f72\u9020\u6210\u7684\u6bc0\u6ec5\u6027\u707d\u96e3\u3002
"},{"location":"feedback/site-reliability-workbook/managing-load/#\u6848\u4f8b\u7814\u7a76pok\u00e9mon-go","title":"\u6848\u4f8b\u7814\u7a76\uff1aPok\u00e9mon GO","text":"\u900f\u904e\u767c\u751f\u707d\u96e3\u7684\u6848\u4f8b\uff0c\u4f86\u4e86\u89e3\u5230 GCLB \u7684\u9ad8\u5f48\u6027\u548c\u9ad8\u53ef\u7528\u6027\u3002
Pok\u00e9mon GO \u662f\u4e00\u6b3e\u7531 Niantic \u548c\u5bf6\u53ef\u5922\u516c\u53f8\u5408\u4f5c\u958b\u767c\u7684\u64f4\u589e\u5be6\u5883\u904a\u6232\uff0c \u4ed6\u5011\u7684\u904a\u6232\u65b9\u5f0f\u662f\u9700\u8981\u5168\u4e16\u754c\u5404\u5730\u73a9\u5bb6\u5728\u7576\u5730\u7684\u5be6\u666f\u4e2d\u9032\u884c\u9ad8\u5ea6\u4e92\u52d5\uff0c\u4f8b\u5982\u62ff\u53d6\u8cc7\u6e90\u548c\u6355\u6349\u89d2\u8272\uff0c \u9019\u4ee3\u8868\u4ed6\u5011\u9700\u8981 \u5373\u6642\u66f4\u65b0\u904a\u6232\u72c0\u614b \u7d66\u9644\u8fd1\u6240\u6709\u7684\u73a9\u5bb6\u3002
\u5728\u904a\u6232\u767c\u5e03\u524d\uff0c\u4ed6\u5011\u4f7f\u7528\u4f30\u8a08\u6700\u5927\u6d41\u91cf\u7684 5 \u500d\u53bb\u9032\u884c\u6d41\u91cf\u58d3\u529b\u6e2c\u8a66\uff0c \u4f46\u662f\u7576\u4ed6\u5011\u5be6\u969b\u767c\u5e03\u4e4b\u5f8c\uff0c\u6d41\u91cf\u4f86\u5230\u4e86\u7576\u521d\u4f30\u8a08\u7684 50 \u500d\uff0c \u9019\u6a23\u7684\u6d41\u91cf\u66b4\u6f32\u52e2\u5fc5\u8003\u9a57\u4ed6\u5011\u5e7e\u4e4e\u6240\u6709\u7684\u6280\u8853\u5806\u68e7\u7684\u627f\u8f09\u80fd\u529b\u3002 \u9019\u6a23\u7684\u8003\u9a57\u4e5f\u5305\u62ec GCP\uff0c\u5728\u904a\u6232\u6b63\u5f0f\u767c\u4f48\u5f8c\u7684\u5169\u5929\uff0c\u8a72\u904a\u6232\u5df2\u7d93\u662f GCLB \u670d\u52d9\u4e2d\uff0c\u6700\u5927\u7684\u4f7f\u7528\u8005\u4e86\uff0c \u800c\u4e14\u8f15\u9b06\u5730\u8d0f\u904e\u5176\u4ed6\u524d\u5341\u7684 GCLB \u4f7f\u7528\u8005\u3002
\u4e00\u958b\u59cb\uff0c\u4ed6\u5011\u53ea\u6709\u900f\u904e Maglev \u4f86\u8ca0\u8f09\u6d41\u91cf\u3002 \u7576 Maglev \u6536\u5230\u5c01\u5305\u5f8c\uff0c\u5c31\u6703\u76f4\u63a5\u50b3\u7d66\u61c9\u7528\u7a0b\u5f0f\u7684\u8ca0\u8f09\u5747\u8861\u5668 Nginx\uff0c\u4e26\u5728\u90a3\u88e1\u5b8c\u6210 TCP/TLS \u7684\u9023\u7dda\uff0c \u9032\u4e00\u6b65\u7de9\u885d HTTP \u8acb\u6c42\uff0c\u7b49\u5f85\u767c\u9001\u7d66\u5f8c\u7aef\u670d\u52d9\u3002 \u9019\u6703\u6709\u5e7e\u500b\u554f\u984c\uff1a
\u7531\u65bc\u53d7\u5230 SYN flood \u7684\u653b\u64ca\uff0c\u4fc3\u4f7f\u4ed6\u5011\u958b\u59cb\u4f7f\u7528 Maglev \u52a0\u4e0a GFE \u7684\u7d44\u5408\u3002 \u7576\u5728\u6d41\u91cf\u4f4e\u5cf0\u6642\u5b8c\u6210\u8f49\u578b\u5f8c\uff0c\u4ed6\u5011\u537b\u5728\u6d41\u91cf\u9ad8\u5cf0\u6642\u5f97\u5230\u4e86\u5148\u524d\u9ad8\u5cf0 2 \u500d\u7684\u6d41\u91cf\uff0c \u9019\u5c0e\u81f4\u61c9\u7528\u7a0b\u5f0f\u7684 Nginx \u5b8c\u5168\u4f86\u4e0d\u53ca\u8655\u7406\u9023\u7dda\uff0c\u9032\u4e00\u6b65\u62d6\u57ae\u4e86\u5f8c\u9762\u6574\u500b\u670d\u52d9\u7684\u8655\u7406\u3002 \u6700\u7d42\u5c0e\u81f4\u5f8c\u7aef\u670d\u52d9\u7684\u7de9\u6162\uff08\u4e26\u975e\u5931\u80fd\uff09\u8b93\u5f88\u591a\u8acb\u6c42\u90fd\u5728 Nginx \u4e2d\u8d85\u6642\uff0c\u800c\u4f7f\u7528\u8005\u5728\u6536\u5230\u8d85\u6642\u7684\u56de\u8986\u6642\uff0c \u6703\u76f4\u63a5\u91cd\u65b0\u5617\u8a66\u8a72\u8acb\u6c42\uff0c\u52a0\u5287\u4e86\u6574\u500b\u707d\u96e3\u7684\u767c\u751f\u3002
\u540c\u6642\uff0c\u5168\u4e16\u754c\u7684 GCLB \u7684\u5bb9\u7a4d\u4e5f\u5728\u9019\u6642\u4e0b\u964d\u5230\u4e00\u534a\u3002 \u9019\u662f\u7531\u65bc Pok\u00e9mon GO \u7684\u61c9\u7528\u7a0b\u5f0f\u7576\u8acb\u6c42\u5931\u6557\u6642\uff0c\u6703\u99ac\u4e0a\u9032\u884c\u91cd\u50b3\uff0c\u63a5\u8457\u7b49\u5f85\u56fa\u5b9a\u6642\u9593\u5f8c\uff0c\u518d\u6b21\u91cd\u50b3\u3002 \u5982\u679c\u6b64\u6642 Nginx \u91cd\u555f\uff0c\u77ac\u9593\u6240\u6709\u9023\u7dda\u65b7\u6389\u53c8\u6703\u99ac\u4e0a\u88ab\u4f7f\u7528\u8005\u91cd\u50b3\uff0c\u8b93\u8acb\u6c42\u5728\u4e00\u77ac\u9593\u98c6\u9ad8\u5230\u4e4b\u524d\u9ad8\u5cf0\u7684 20 \u500d\u3002
\u9019\u6642 Google \u91dd\u5c0d GFE \u63a1\u53d6\u4e86\u5e7e\u500b\u7dca\u6025\u63aa\u65bd\uff1a
\u9019\u4ef6\u4e8b\u8b93 GFE \u7684\u6548\u80fd\u8a55\u4f30\u4e2d\uff0c\u66f4\u91cd\u8996\u7576\u5f8c\u7aef\u7de9\u6162\u6642\u7684\u8655\u7406\u72c0\u6cc1\u3002 \u800c\u5c0d Pok\u00e9mon GO \u7684\u958b\u767c\u8005\u4f86\u8aaa\uff0c\u4ed6\u5011\u4f7f\u7528\u8abf\u6574\u4e86\u91cd\u50b3\u7684\u6a5f\u5236 \uff08\u589e\u52a0 jitter\uff09\uff0c \u4ee5\u53ca\u66f4\u6709\u7d93\u9a57\u7684\u8655\u7406\u5982\u4f55\u61c9\u4ed8\u9ad8\u6d41\u91cf\u3002
"},{"location":"feedback/site-reliability-workbook/managing-load/#\u8ca0\u8f09\u7ba1\u7406\u7684\u624b\u6bb5","title":"\u8ca0\u8f09\u7ba1\u7406\u7684\u624b\u6bb5","text":"\u8ca0\u8f09\u5e73\u8861\u3001\u8ca0\u8f09\u524a\u6e1b \u548c \u81ea\u52d5\u589e\u6e1b \u5c31\u662f\u6211\u5011\u5728\u505a\u8ca0\u8f09\u7ba1\u7406\u6642\u9700\u8981\u62ff\u634f\u3001\u6b0a\u8861\u7684\u4e09\u5927\u5de5\u5177\u3002
\u8ca0\u8f09\u5e73\u8861\u6703\u5206\u914d\u6d41\u91cf\u3001\u8ca0\u8f09\u524a\u6e1b\u6703\u628a\u7121\u6cd5\u8655\u7406\u7684\u6d41\u91cf\u63d0\u65e9\u6368\u68c4\uff0c\u90fd\u5f88\u597d\u7406\u89e3\uff0c \u9019\u88e1\u5c31\u7279\u5225\u4ecb\u7d39\u81ea\u52d5\u589e\u6e1b\u9019\u500b\u5de5\u5177\u3002
\u900f\u904e\u81ea\u52d5\u589e\u9577\u6a5f\u5236\uff0c\u4f86\u589e\u52a0\u670d\u52d9\u7684\u901a\u91cf\uff0c\u907f\u514d\u9ad8\u5cf0\u9020\u6210\u7684\u7de9\u6162\uff1b \u900f\u904e\u81ea\u52d5\u7e2e\u6e1b\u6a5f\u5236\uff0c\u4f86\u589e\u52a0\u8cc7\u6e90\u7684\u4f7f\u7528\u7387\uff0c\u907f\u514d\u8cc7\u6e90\u7684\u6d6a\u8cbb\u3002
\u4ee5\u4e0b\u662f\u7c21\u8ff0\u81ea\u52d5\u589e\u6e1b\u7684\u6700\u4f73\u5be6\u8e10\u3001\u5e38\u898b\u932f\u8aa4\u914d\u7f6e\u4ee5\u53ca\u73fe\u968e\u6bb5\u7684\u9650\u5236\uff1a
\u6700\u5f8c\uff0c\u4e0a\u9762\u63d0\u7684\u624b\u6bb5\u61c9\u8a72\u540c\u6642\u88ab\u8003\u616e\u9032\u53bb\uff0c \u4e5f\u5c31\u662f\u8aaa\uff0c\u8acb\u5617\u8a66\u7528\u591a\u7a2e\u7b56\u7565\u53bb\u7ba1\u7406\u8ca0\u8f09\u3002 \u4f8b\u5982\uff1a
\u5047\u8a2d\u6709\u500b\u7dda\u4e0a\u5546\u57ce\u70ba\u4e86\u9ad8\u53ef\u7528\u6027\uff0c\u5728\u4e09\u500b\u5340\u57df\u5efa\u7f6e\u4e86\u5404\u81ea\u7684\u670d\u52d9\u53e2\u96c6\uff0c\u5728\u9019\u4e9b\u53e2\u96c6\u524d\u9762\u88dd\u4e86\u4e00\u500b\u8ca0\u8f09\u5e73\u8861\u5668\u3002
\u4ed6\u5011\u7684\u8ca0\u8f09\u5e73\u8861\u4e0d\u662f\u6839\u64da\u8acb\u6c42\u53bb\u5206\u914d\uff0c\u800c\u662f\u6839\u64da\u4e0b\u6e38\u53e2\u96c6\u7684 CPU \u4f7f\u7528\u7387\u3002 \u82e5\u6bcf\u500b\u8acb\u6c42\u4f7f\u7528\u7684 CPU \u8d8a\u4f4e\uff0c\u5c07\u6703\u5206\u914d\u7d66\u9019\u500b\u53e2\u96c6\u8d8a\u591a\u7684\u8acb\u6c42\u3002 \u4f8b\u5982 \u5340\u57dfA \u6bcf\u79d2\u9001\u4e86 10 \u500b\u8acb\u6c42\u4e4b\u5f8c\uff0cCPU \u589e\u52a0\u4e86 5%\uff0c\u4e26\u4e14\u95a5\u503c\u8a2d\u5728 CPU \u4f7f\u7528\u7387\u9054\u5230 80% \u5f8c\u5c31\u4e0d\u80fd\u518d\u7d66\u3002 \u9019\u4ee3\u8868\u8ca0\u8f09\u5e73\u8861\u5668\u53ef\u4ee5\u767c\u9001\u6bcf\u79d2 160\uff08\\(80/5*10\\)\uff09\u500b\u8acb\u6c42\u7d66\u5b83\u3002 \u800c \u5340\u57dfB \u6bcf\u79d2\u9001\u4e86 10 \u500b\u8acb\u6c42\u5f8c\uff0cCPU \u589e\u52a0\u5230 8%\uff0c\u9019\u6642\u5c31\u53ea\u6703\u7d66\u4ed6 RPS 100 \u7684\u91cf\u3002
\u65e9\u4e0a 10:46 \u6642\u56e0\u70ba\u6298\u6263\uff0c\u4f7f\u7528\u8005\u589e\u52a0\uff0cRPS \u5f9e\u5e38\u614b\u7684 90 \u62c9\u9ad8\u5230 120\uff0c\u9019\u6642\u6b63\u597d\u662f 11:00\u3002 \u7531\u65bc\u6b64\u6642 \u5340\u57dfA \u7684\u8acb\u6c42\u6bd4\u8f03\u591a\uff0c\u5c0e\u81f4\u4ed6\u7387\u5148\u7a81\u7834 CPU \u4f7f\u7528\u7684\u81e8\u754c\u9ede\uff08\u4f8b\u5982\u524d\u8ff0\u7684 80%\uff09\uff0c \u9032\u800c\u5c0e\u81f4\u670d\u52d9\u7684\u8ca0\u8f09\u524a\u6e1b\u89f8\u767c\u3002
\u5340\u57dfA \u7684\u670d\u52d9\u70ba\u4e86\u907f\u514d\u50b7\u5bb3\u64f4\u5927\uff0c\u800c\u63d0\u65e9\u56de\u61c9\u8acb\u6c42\uff0c\u4e26\u4e14\u8b93\u932f\u8aa4\u7387\u62c9\u9ad8\u3002 \u4f46\u7531\u65bc\u9019\u500b\u932f\u8aa4\u8b93\u8acb\u6c42\u5f88\u5feb\u5c31\u56de\u61c9\uff0c\u5c0e\u81f4\u670d\u52d9\u8655\u7406\u8acb\u6c42\u7684 CPU \u4f7f\u7528\u7387\u5f88\u4f4e\u3002 \u6700\u7d42\u8ca0\u8f09\u5e73\u8861\u5668\u958b\u59cb\u628a\u5927\u91cf\u8acb\u6c42\u9001\u904e\u53bb\uff0c\u5c0e\u81f4\u72c0\u6cc1\u8d8a\u4f86\u8d8a\u7cdf\u3002
\u9019\u500b\u6848\u4f8b\u5c31\u4f7f\u5178\u578b\u7684\u8ca0\u8f09\u5e73\u8861\u548c\u8ca0\u8f09\u524a\u6e1b\u5f7c\u6b64\u4e4b\u9593\u5354\u4f5c\u5931\u6557\u3002
"},{"location":"feedback/site-reliability-workbook/managing-load/#\u624b\u6bb5\u843d\u5be6\u7684\u5efa\u8b70","title":"\u624b\u6bb5\u843d\u5be6\u7684\u5efa\u8b70","text":"\u4ee5\u4e0b\u662f Google \u63d0\u51fa\u7684\u4e00\u4e9b\u5efa\u8b70\uff1a
\u8ca0\u8f09\u524a\u6e1b \u4e5f\u8981\u5efa\u7acb\u5728\u61c9\u7528\u908f\u8f2f\u4e4b\u4e0a\uff0c\u4f8b\u5982\u8acb\u6c42\u7aef\u91dd\u5c0d\u7c21\u55ae\u800c\u5927\u91cf\u7684\u8acb\u6c42\u7d66\u4e88\u8f03\u77ed\u7684\u6642\u9593\u9650\u5236\u3001\u670d\u52d9\u7aef\u8981\u5118\u65e9\u7d42\u6b62\u88ab\u4e2d\u65b7\u7684\u8acb\u6c42\u3002 \u63db\u53e5\u8a71\u8aaa\uff0c\u670d\u52d9\u7aef\u63d0\u4f9b\u7684\u63a5\u53e3\u6587\u4ef6\uff08API \u6587\u4ef6\uff0c\u4f8b\u5982 OpenAPI\uff09\u5c31\u61c9\u8a72\u8981\u63d0\u4f9b\u9650\u6642\u7684\u5efa\u8b70\uff0c \u4f8b\u5982\u9019\u500b API \u61c9\u9650\u6642 3 \u79d2\uff0c\u5176\u4ed6\u7684\u9650\u6642 15 \u79d2\u7b49\u7b49\u3002
"},{"location":"feedback/site-reliability-workbook/managing-load/#\u7e3d\u7d50","title":"\u7e3d\u7d50","text":"\u8ca0\u8f09\u7ba1\u7406\u624b\u6bb5\u5f88\u597d\u7528\uff0c\u4f46\u662f\u5982\u679c\u4ed6\u5011\u6c92\u6709\u88ab\u5c0f\u5fc3\u8a2d\u5b9a\uff0c\u5f88\u5bb9\u6613\u9020\u6210\u5927\u898f\u6a21\u7684\u707d\u96e3\u3002 \u9664\u6b64\u4e4b\u5916\uff0c\u5982\u679c\u591a\u500b\u8ca0\u8f09\u7ba1\u7406\u624b\u6bb5\u6c92\u6709\u540c\u6b65\u5f7c\u6b64\u4e4b\u9593\u7684\u72c0\u614b\uff0c\u5c31\u5bb9\u6613\u5931\u53bb\u4ed6\u5011\u539f\u672c\u7684\u50f9\u503c\u3002 \u4f8b\u5982 Pok\u00e9mon GO \u6848\u4f8b\u4e2d\u7684\u4f7f\u7528\u8005\u5feb\u901f\u91cd\u8a66\u8acb\u6c42\u3001\u55ae\u4e00\u4e0a\u6e38\u7684\u7de9\u6162\u6703\u62d6\u57ae\u8ca0\u8f09\u5e73\u8861\uff0c\u6700\u7d42\u53ef\u80fd\u5c0e\u81f4\u5927\u898f\u6a21\u7684\u5931\u80fd\u3002
"},{"location":"feedback/site-reliability-workbook/nalsd/","title":"\u975e\u62bd\u8c61\u5927\u578b\u7cfb\u7d71\u8a2d\u8a08","text":"\u975e\u62bd\u8c61\u5927\u578b\u7cfb\u7d71\u8a2d\u8a08\uff08Non Abstract Large System Design, NALSD\uff09\u7684\u76ee\u7684\u5728\u65bc\u8b93\u958b\u767c\u8005\u8a2d\u8a08\u7cfb\u7d71\u67b6\u69cb\u6642\uff0c \u6709\u500b\u4f9d\u64da\u5efa\u7acb\u7a69\u5065\u800c\u53c8\u9ad8\u64f4\u5145\u7684\u7cfb\u7d71\u3002
\u672c\u6587\u5148\u900f\u904e\u5b9a\u7fa9\u554f\u984c\uff0c\u6536\u96c6\u9700\u6c42\u4e26\u53cd\u8986\u5be9\u8996\u3001\u5faa\u5e8f\u6539\u5584\u67b6\u69cb\u7684\u8a2d\u8a08\uff0c\u6700\u7d42\u5f97\u5230\u4e00\u500b\u53ef\u9760\u7684\u7cfb\u7d71\u8a2d\u8a08\u89e3\u65b9\u3002 \u76ee\u6a19\u662f\u8b93\u958b\u767c\u8005\u80fd\u8a2d\u8a08\u51fa\u4e00\u500b\u5728\u521d\u671f\u4fbf\u64c1\u6709\u9ad8\u7a69\u5065\u6027\u4e14\u540c\u6642\u64c1\u6709\u672a\u4f86\u8abf\u6574\u7684\u74b0\u5883\uff0c \u800c\u9019\u500b\u904e\u7a0b\uff0c\u5c31\u662f\u628a\u62bd\u8c61\u7684\u9700\u6c42\uff0c\u964d\u6210\u5be6\u969b\u53ef\u88ab\u4f30\u91cf\u7684\u5be6\u8e10\u3002 \u9019\u4e9b\u5be6\u8e10\u5305\u62ec\uff1a
\u9019\u4e9b\u5be6\u8e10\u8b93 SRE \u6709\u80fd\u529b\u5728\u9762\u5c0d\u7cfb\u7d71\u8a2d\u8a08\u6642\uff0c \u601d\u8003\u7cfb\u7d71\u7684\u64f4\u5145\u6027\u548c\u53ef\u80fd\u7684\u74f6\u9838\uff0c\u4e26\u5c08\u6ce8\u5728\u9019\u4e9b\u9ede\u4e0a\u3002 \u5728\u63a5\u4e0b\u4f86\u7684\u7df4\u7fd2\u4e2d\uff0c\u6bcf\u4e00\u6b21\u8a2d\u8a08\u7684\u8fed\u4ee3\uff0c\u90fd\u53ef\u4ee5\u53cd\u8986\u554f\u81ea\u5df1\u9019\u56db\u500b\u554f\u984c\uff1a
\u7df4\u7fd2\u7684\u76ee\u7684
\u6240\u6709\u7684\u7cfb\u7d71\u6700\u7d42\u90fd\u8981\u5be6\u969b\u8dd1\u5728\u771f\u5be6\u7684\u8cc7\u6599\u4e2d\u5fc3\u548c\u771f\u5be6\u7684\u8a2d\u5099\u4e0a\uff0c \u6211\u5011\u9700\u8981\u53cd\u8986\u7df4\u7fd2\u5c07\u767d\u677f\u4e0a\u7684\u67b6\u69cb\u5716\uff0c\u8f49\u5316\u6210\u5be6\u969b\u8981\u4f7f\u7528\u7684\u8a2d\u5099\u6578\u91cf\u7b49\u7b49\u3002 \u807d\u8d77\u4f86\u5f88\u7463\u788e\uff0c\u4f46\u662f\u4e0d\u53bb\u7df4\u7fd2\u548c\u898f\u5283\uff0c\u7576\u6211\u5011\u5be6\u969b\u4e0a\u7dda\u6642\uff0c\u53ef\u80fd\u6703\u4ed8\u51fa\u66f4\u6158\u75db\u7684\u4ee3\u50f9\u3002
\u7df4\u7fd2\u4e2d\u7684\u5047\u8a2d\u548c\u63a8\u4f30\u6703\u6bd4\u6700\u7d42\u5be6\u969b\u7d50\u679c\u91cd\u8981\u3002 \u65e9\u671f\u7684\u5047\u8a2d\u6703\u5f88\u5927\u7a0b\u5ea6\u5f71\u97ff\u6700\u7d42\u7684\u6210\u679c\uff0c\u4f46\u662f\u5728 NALSD \u4e2d\uff0c \u6211\u5011\u4e26\u4e0d\u662f\u8981\u7df4\u7fd2\u51fa\u5b8c\u7f8e\u7684\u5047\u8a2d\uff0c\u800c\u662f\u5728\u591a\u500b\u4e0d\u5b8c\u7f8e\u4f46\u662f\u5408\u7406\u7684\u5047\u8a2d\u4e2d\u5c0e\u51fa\u4e00\u500b\u66f4\u597d\u88ab\u8a6e\u91cb\u7684\u7d50\u679c
"},{"location":"feedback/site-reliability-workbook/nalsd/#\u7df4\u7fd2\u6d41\u7a0b","title":"\u7df4\u7fd2\u6d41\u7a0b","text":"\u958b\u59cb\u524d\uff0c\u5148\u7c21\u8ff0\u4e00\u4e0b\u6d41\u7a0b\u3002 \u6211\u5011\u5c07\u4f7f\u7528\u53cd\u8986\u8fed\u4ee3\u7684\u65b9\u5f0f\u53bb\u8a2d\u8a08\u7cfb\u7d71\uff0c\u6bcf\u6b21\u8fed\u4ee3\u90fd\u6703\u5b9a\u7fa9\u51fa\u76f8\u95dc\u7684\u8a2d\u8a08\u4e26\u627e\u51fa\u5b83\u7684\u512a\u52e2\u548c\u5f31\u9ede\u3002 \u800c\u6bcf\u6b21\u8fed\u4ee3\u7684\u5206\u6790\uff0c\u90fd\u6703\u5e6b\u52a9\u6211\u5011\u627e\u51fa\u512a\u9ede\u5728\u4e0b\u4e00\u6b21\u7684\u8fed\u4ee3\u4e2d\u8a2d\u8a08\u51fa\u66f4\u597d\u7684\u7cfb\u7d71\u3002 \u5728\u521d\u59cb\u968e\u6bb5\u6211\u5011\u6703\u6839\u64da\u4ee5\u4e0b\u5169\u500b\u554f\u984c\u4f86\u8a2d\u8a08\u7cfb\u7d71\uff1a
\u63a5\u8457\u6211\u5011\u6703\u53bb\u601d\u8003\u91dd\u5c0d\u521d\u59cb\u8a2d\u8a08\u7684\u64f4\u5145\u6027\uff0c\u9019\u6642\u5c31\u6703\u518d\u53bb\u56de\u61c9\u4ee5\u4e0b\u4e09\u500b\u554f\u984c\uff1a
\u96d6\u7136\u9019\u88e1\u5217\u51fa\u9806\u5e8f\uff0c\u4f46\u5be6\u969b\u7df4\u7fd2\u6642\u9019\u4e9b\u554f\u984c\u53ef\u80fd\u662f\u53cd\u8986\u8a70\u554f\u7684\u3002 \u4f8b\u5982\u5728\u521d\u59cb\u968e\u6bb5\uff0c\u6211\u5011\u53ef\u80fd\u5c31\u6703\u5148\u8003\u616e\u5b83\u7684\u53ef\u64f4\u5145\u6027\u3002 \u5982\u679c\u9019\u500b\u8a2d\u8a08\u5728\u5f8c\u9762\u7684\u554f\u984c\u7121\u6cd5\u5f97\u5230\u597d\u7684\u56de\u7b54\uff0c\u6211\u5011\u5c31\u6703\u4fee\u6b63\u6216\u66ff\u63db\u67d0\u500b\u7d44\u4ef6\uff0c\u63a5\u8457\u91cd\u982d\u958b\u59cb\u3002
"},{"location":"feedback/site-reliability-workbook/nalsd/#\u7df4\u7fd2adwords","title":"\u7df4\u7fd2\uff1aAdWords","text":"AdWords \u662f Google \u4e00\u9805\u7522\u54c1\uff0c\u7528\u4f86\u5728\u4f7f\u7528\u8005\u900f\u904e Google \u641c\u5c0b\u6642\uff0c\u63a8\u51fa\u7d14\u6587\u5b57\u7684\u5ee3\u544a\u3002 \u9019\u6b21\u7df4\u7fd2\uff0c\u662f\u8981\u8a2d\u8a08\u51fa\u4e00\u500b\u7cfb\u7d71\uff0c\u53ef\u4ee5\u89c0\u6e2c\u4e26\u56de\u5831\u6b63\u78ba\u7684 click-through rate \uff08CTR\uff0c\u4f7f\u7528\u8005\u9ede\u64ca\u5ee3\u544a\u6b21\u6578 \u9664\u4ee5 \u5ee3\u544a\u63a8\u64ad\u6578\uff09\u3002
\u5c0d\u65bc\u4f7f\u7528\u8005\u4f86\u8aaa\uff0c\u6703\u60f3\u8981\u77e5\u9053\u63a8\u64ad\u7684\u5ee3\u544a\u662f \u56e0\u70ba\u54ea\u4e9b\u95dc\u9375\u5b57\u88ab\u6295\u653e\u5ee3\u544a \u4ee5\u53ca \u54ea\u4e9b\u95dc\u9375\u5b57\u8b93\u5ee3\u544a\u66f4\u5bb9\u6613\u88ab\u9ede\u64ca\uff0c \u9032\u800c\u53bb\u6539\u8b8a\u5ee3\u544a\u95dc\u9375\u5b57\u7684\u7d44\u5408\u7136\u5f8c\u8abf\u6574\u5ee3\u544a\u50f9\u9322\u3002 \u9019\u4e9b\u8cc7\u8a0a\u4e5f\u5c31\u662f\u9700\u8981\u7d44\u5408 \u95dc\u9375\u5b57\u5c0d\u5ee3\u544a\u6295\u653e\u7387 \u4ee5\u53ca \u95dc\u9375\u5b57\u5c0d\u5ee3\u544a\u9ede\u64ca\u7387\u3002
"},{"location":"feedback/site-reliability-workbook/nalsd/#\u5b9a\u7fa9\u9700\u6c42\u7684-slo","title":"\u5b9a\u7fa9\u9700\u6c42\u7684 SLO","text":"\u9996\u5148\u6211\u5011\u7ad9\u5728\u4f7f\u7528\u8005\u7684\u89d2\u5ea6\u53bb\u601d\u8003\uff0c\u5c0d\u6211\u5011\u4f86\u8aaa\u6700\u95dc\u5fc3\u7684\u662f\u4ec0\u9ebc\uff1f \u5047\u8a2d\u6700\u95dc\u5fc3\u7684\u662f \u9762\u677f\u4e2d\u7684\u8acb\u6c42\u662f\u5426\u5feb\u901f \u4ee5\u53ca \u8cc7\u6599\u662f\u5426\u5373\u6642\uff0c\u7531\u6b64\u8a02\u5b9a\u51fa SLO\uff1a
\u7cfb\u7d71\u4e2d\u5df2\u7d93\u5b58\u5728\u6a5f\u5236\u628a\u4f7f\u7528\u8005\u7684\u6bcf\u500b \u641c\u5c0b \u548c \u5ee3\u544a\u9ede\u64ca \u8a18\u9304\u4e0b\u4f86\uff0c\u4ee5\u4e0b\u662f\u9019\u4e9b\u65e5\u8a8c\u7684\u5167\u5bb9\uff1a
\u540d\u7a31 \u8b8a\u6578\u540d\u7a31 \u578b\u5225 \u4f54\u4f4d\uff08bytes\uff09 \u6642\u9593time
64-bit integer 8 ID query_id
64-bit integer 8 ADs ad_ids
array of 64-bit integers 8~24\uff08\u6bcf\u6b21\u641c\u5c0b\u6700\u591a\u653e 3 \u500b\u5ee3\u544a\uff09 \u95dc\u9375\u5b57 search_terms
array of char \u2248500 \u5143\u8cc7\u6599 metadata
array of char 500~1000\uff08\u4f7f\u7528\u8a9e\u8a00\u3001\u54ea\u53f0\u6a5f\u5668\u670d\u52d9\u7684\u7b49\u7b49\uff09 \u641c\u5c0b\u7684\u65e5\u8a8c\u5167\u5bb9
\u540d\u7a31 \u8b8a\u6578\u540d\u7a31 \u578b\u5225 \u4f54\u4f4d\uff08bytes\uff09 \u6642\u9593time
64-bit integer 8 ID query_id
64-bit integer 8 AD ad_id
64-bit integers 8 \u5ee3\u544a\u9ede\u64ca\u7684\u65e5\u8a8c\u5167\u5bb9
\u70ba\u4ec0\u9ebc\u4e0d\u628a search_term \u653e\u9032\u5ee3\u544a\u9ede\u64ca\u7684\u65e5\u8a8c\u5982\u679c\u6211\u5011\u76f4\u63a5\u628a search_term
\u653e\u9032\u5ee3\u544a\u9ede\u64ca\u7684\u65e5\u8a8c\u4e2d\uff0c \u6211\u5011\u5c31\u53ef\u4ee5\u76f4\u63a5\u900f\u904e\u8a72\u65e5\u8a8c\u627e\u5230\u6211\u5011\u60f3\u8981\u7684\u6307\u6a19 \u95dc\u9375\u5b57\u5c0d\u5ee3\u544a\u9ede\u64ca\u7387\u3002
\u4f46\u73fe\u5be6\u662f\u9019\u4e9b\u9ede\u64ca\u7d00\u9304\u662f\u900f\u904e HTTP URL \u50b3\u905e\uff0c\u63db\u53e5\u8a71\u8aaa\u9019\u500b URL \u662f\u6709\u9577\u5ea6\u9650\u5236\u7684\uff0c \u9664\u6b64\u4e4b\u5916\uff0cGoogle \u9700\u8981\u63d0\u4f9b\u7684\u6307\u6a19\u4e0d\u53ea\u662f CTR\uff0c\u70ba\u4e86\u8cc7\u6e90\u4f7f\u7528\u7387\u548c\u8cc7\u6599\u4e00\u81f4\u6027\u7684\u8003\u91cf\uff0c \u4e0d\u6703\u628a search_term
\u5230\u8655\u4e1f\u3002
\u5047\u8a2d\uff1a
\u6211\u5011\u91dd\u5c0d\u4e09\u7a2e\u67b6\u69cb\u8a0e\u8ad6\uff1a
\u554f\u984c\uff1a\u9019\u500b\u8a2d\u8a08\u53ef\u80fd\u55ce\uff1f
\u5982\u679c\u628a\u8cc7\u6599\u653e\u9032 MySQL \u88e1\u9762\uff0c\u6211\u5011\u53ef\u4ee5\u900f\u904e\u4ee5\u4e0b\u7684 SQL \u627e\u51fa\u300c\u67d0\u500b\u5ee3\u544a\uff0c\u91dd\u5c0d\u67d0\u500b\u95dc\u9375\u5b57\u7684\u9ede\u64ca\u7387\u300d\u3002
-- \u628a Query Log \u5206\u6210\uff1aquery_ads\u3001query_terms \u548c query_metadata \u4e09\u500b\u8cc7\u6599\u8868\u3002\nSELECT a.search_term, a.click_count / b.query_count\nFROM (\n SELECT COUNT(*) AS click_count\n FROM click_history AS c\n LEFT JOIN query_terms AS q ON q.query_id = c.query_id AND q.search_term = ?\n WHERE c.ad_id = ?\n) a,\n(\n SELECT COUNT(*) AS query_count\n FROM query_ads AS a\n INNER JOIN query_terms AS t ON t.query_id = q.query_id AND t.search_term = ?\n WHERE a.ad_id = ?\n) b\nWHERE a.search_term = b.search_term\n
\u554f\u984c\uff1a\u9019\u65b9\u6cd5\u53ef\u4ee5\u5728\u6709\u9650\u7684\u8a2d\u5099\u6578\u91cf\u3001\u6642\u9593\u548c\u91d1\u9322\u5167\u9054\u6210\u55ce\uff1f
\u70ba\u4e86\u653e\u9032\u9019\u4e9b\u8cc7\u6599\uff0c\u6211\u5011\u9700\u8981\u591a\u5927\u7684\u8cc7\u6599\u5eab\uff1f \u6839\u64da\u524d\u9762\u4f30\u8a08\u7684\u91cf\uff0c\u8a08\u7b97\u4e00\u4e0b 1 \u5929\u7684\u641c\u5c0b\u65e5\u8a8c\u5927\u5c0f\u7d04\u70ba 86.4TB\uff1a
\\[\\begin{flalign} \\left( 5 \\times 10^5 \\mathrm{\\ queries/second} \\right) \\times \\left( 2 \\times 10^3 \\mathrm{\\ bytes} \\right) \\times \\left( 8.64 \\times 10^4 \\mathrm{\\ seconds/day} \\right) \\\\ =86.4 \\mathrm{\\ TB/day} \\end{flalign}\\]\u4fdd\u5b88\u4f30\u8a08\u9700\u8981\u7d04 100TB \u5bb9\u91cf\uff0c\u5047\u8a2d\u6211\u5011\u4f7f\u7528 4TB \u7684 HDD\uff08\u786c\u789f\uff09\uff0c\u800c\u6bcf\u500b\u786c\u789f\u53c8\u53d7\u9650\u65bc 200 IOPS\uff0c \u7136\u5f8c\u6839\u64da\u524d\u9762\u7684 MySQL\uff0c\u6211\u5011\u9700\u8981\u628a\u8cc7\u6599\u5b58\u9032 4 \u500b\u8cc7\u6599\u8868\uff0c\u6b64\u6642\u6211\u5011\u5c31\u6703\u9700\u8981\u7d04 10,000 \u500b\u786c\u789f\uff1a
\\[\\begin{align*} \\left( 5 \\times 10^5 \\mathrm{\\ queries/second} \\right) \\times \\left( 4 \\mathrm{\\ IO/query} \\right) / \\left( 200 \\mathrm{\\ IOPS/disk} \\right) \\\\ = 1 \\times 10^4 \\mathrm{\\ disks} \\end{align*}\\]\u55ae\u7d14\u7684\u8a08\u7b97\u9ede\u64ca\u7387\uff0c\u641c\u5c0b\u65e5\u8a8c\u5c31\u4f7f\u7528 10,000 \u500b\u786c\u789f\uff0c \u70ba\u4e86\u4e0d\u56e0 IOPS \u800c\u53bb\u9078\u64c7\u5927\u91cf\u786c\u9ad4\uff0c\u6211\u5011\u6c7a\u5b9a\u76f4\u63a5\u8a55\u4f30\u4e00\u4e0b RAM \u7684\u53ef\u884c\u6027\uff0c\u800c\u653e\u68c4\u5176\u4ed6\u5132\u5b58\u985e\u578b\uff0c\u4f8b\u5982 SSD\u3002 \u5047\u8a2d\u4e00\u53f0 16C/64G/1G\uff0816 core CPU\u300164 GB RAM\u30011G \u7db2\u8def\u901a\u91cf\uff09\u7684\u96fb\u8166\uff0c\u6211\u5011\u5c31\u6703\u9700\u8981 1563 \u53f0\u96fb\u8166\uff1a
\\[\\begin{align*} \\left\\lceil \\left( 100 \\mathrm{\\ TB} \\right) / \\left( 64 \\mathrm{\\ GB\\ RAM/machine} \\right) \\right\\rceil \\\\ = 1,563 \\mathrm{\\ machines} \\end{align*}\\]\u9019\u9ebc\u591a\u53f0\u7684 MySQL \u53e2\u96c6\uff0c\u9084\u53ea\u662f\u8a08\u7b97\u9ede\u64ca\u7387\u800c\u5df2\uff0c\u5176\u4e2d\u9084\u8981\u8003\u91cf\u8cc7\u6e90\u7684\u5099\u63f4\u3001\u5197\u4f59\uff0c\u986f\u7136\u4e0d\u592a\u5be6\u969b\u3002
"},{"location":"feedback/site-reliability-workbook/nalsd/#mapreduce","title":"MapReduce","text":"Tip
\u5728\u95b1\u8b80\u4e0b\u6587\u524d\uff0c\u5efa\u8b70\u5148\u7406\u89e3\u4ec0\u9ebc\u662f MapReduce\u3002
\u554f\u984c\uff1a\u9019\u500b\u8a2d\u8a08\u53ef\u80fd\u55ce\uff1f
\u628a\u641c\u5c0b\u65e5\u8a8c\u548c\u9ede\u64ca\u65e5\u8a8c\u7684 ad_id
\u5256\u6790\uff08map\uff09\u51fa\u4f86\uff0c\u4e4b\u5f8c \u5408\u4f75\uff08reduce\uff09\u9032\u6bcf\u500b search_term
\u7684\u9ede\u64ca\u6b21\u6578\u3002 \u96d6\u7136 MapReduce \u53ef\u4ee5\u8f15\u6613\u505a\u5230\u5206\u6563\u5f0f\u7684\u8a08\u7b97\uff0c\u7576\u9700\u8981\u66f4\u591a\u8a2d\u5099\u6642\u4e5f\u53ef\u4ee5\u8f15\u6613\u88dc\u4e0a\uff0c\u4f46\u662f\u6211\u5011\u9084\u8981\u8003\u91cf\u6211\u5011\u7684 SLO\u3002
99.9% \u7684 CTR \u8cc7\u8a0a\u90fd\u8981\u986f\u793a 5 \u5206\u9418\u5167\u7684\u8cc7\u6599\u3002
\u70ba\u4e86\u6eff\u8db3\u5373\u6642\u8cc7\u6599\u7684\u9700\u6c42\uff0c\u6211\u5011\u5fc5\u9808\u8981\u628a\u6279\u6b21\u8655\u7406\u7684\u7d1a\u8ddd\u8b8a\u5f97\u5f88\u5c0f\uff0c\u4f8b\u5982\uff0c\u6bcf\u5206\u9418\u6279\u6b21\u8a08\u7b97\u4e00\u6b21\u3002 \u4f46\u662f\u5728\u9032\u884c\u5408\u4f75\u8a08\u7b97\u6642\uff0c\u5982\u679c\u76f8\u540c\u641c\u5c0b\u548c\u9ede\u64ca\u7684\u65e5\u8a8c\u4e26\u6c92\u6709\u653e\u5728\u540c\u4e00\u500b\u6279\u6b21\u88e1 \uff08\u641c\u5c0b\u548c\u5ee3\u544a\u9ede\u64ca\u6839\u64da\u4f7f\u7528\u8005\u7684\u884c\u70ba\uff0c\u53ef\u80fd\u6c92\u8fa6\u6cd5\u5728\u4e00\u5206\u9418\u5167\u5b8c\u6210\uff09\uff0c \u5c31\u6c92\u8fa6\u6cd5\u7d44\u51fa search_term
\u548c\u9ede\u64ca\u6b21\u6578\u3002
\u5982\u679c\u8981\u8655\u7406\u9019\u7a2e\u8de8\u6279\u6b21\u7684\u904b\u7b97\u5c0d\u65bc MapReduce \u4f86\u8aaa\u5f88\u8017\u8cc7\u6e90\uff0c\u540c\u6642\u4e5f\u4e0d\u662f\u4ed6\u539f\u751f\u9069\u5408\u8655\u7406\u7684\u4e8b\u60c5\u3002 \u9762\u5c0d\u9019\u500b\u56f0\u5883\uff0c\u6211\u5011\u9078\u64c7\u5f80\u5176\u4ed6\u53ef\u80fd\u7684\u67b6\u69cb\u4f86\u8a0e\u8ad6\u3002
"},{"location":"feedback/site-reliability-workbook/nalsd/#logjoiner","title":"LogJoiner","text":"\u554f\u984c\uff1a\u9019\u500b\u8a2d\u8a08\u53ef\u80fd\u55ce\uff1f
\u6bd4\u8d77\u8b93\u641c\u5c0b\u65e5\u8a8c\u5b58\u9032 MySQL\uff0c \u6211\u5011\u4f7f\u7528 BigTable \u6216\u6392\u5e8f\u5b57\u4e32\u8868\uff0c \u9019\u7a2e\u597d\u505a\u5206\u5340\u7684\u8cc7\u6599\u5eab\uff0c \u7136\u5f8c\u8b93\u4ed6\u6839\u64da\u7279\u5b9a\u6b04\u4f4d\u505a\u7d22\u5f15\u5f8c\uff0c\u63a5\u8457\u55ae\u7d14\u5beb\u5165\u5373\u53ef\uff0c\u4e0d\u9700\u652f\u63f4 SQL \u7684\u8de8\u7bc0\u9ede\u641c\u5c0b\u3002
---\ntitle: LogJoiner \u67b6\u69cb\n---\nflowchart TD\n ql[Query Logs] --All querylog records-->qm[(QueryMapkey: ad_id,search_termvalue: query_ids)]\n ql --All querylog records-->qs[(QueryStorekey: query_idvalue: QueryLog record)]\n cl[Click Logs]--All click logrecords-->lj([LogJoiner])\n lj<--Look upquery_id-->qs\n lj --> cm[(CLickMapkey: ad_id,search_termvalue: query_ids)]\n
QueryStore
LogJoiner
ClickMap
QueryMap
NALSD \u662f\u4e00\u500b\u8a2d\u8a08\u7cfb\u7d71\u6642\u53cd\u8986\u8fed\u4ee3\u7684\u904e\u7a0b\uff0c\u9996\u5148\u628a\u67b6\u69cb\u62c6\u6210\u5c0d\u61c9\u7684\u908f\u8f2f\u5143\u4ef6\uff0c\u4e26\u60f3\u50cf\u5176\u7f6e\u5165\u7dda\u4e0a\u74b0\u5883\u7684\u8cc7\u6e90\u9700\u6c42\u3002 \u5728\u9019\u4e4b\u4e2d SLO \u7684\u8a02\u5b9a\u8b8a\u5f97\u5c24\u70ba\u91cd\u8981\uff0c\u56e0\u70ba SLO \u6703\u9a45\u52d5\u67b6\u69cb\u8a2d\u8a08\u7684\u9032\u5316\uff0c\u4e26\u5728\u8a2d\u8a08\u904e\u7a0b\u4e2d\u4e0d\u6703\u8ff7\u822a\u3002
\u4e4b\u6240\u4ee5\u8aaa\u53cd\u8986\u8fed\u4ee3\uff0c\u5c31\u662f\u5728\u8a2d\u8a08\u904e\u7a0b\u4e2d\u6bcf\u4e00\u6b21\u7d50\u675f\u90fd\u8981\u53cd\u8986\u554f\u81ea\u5df1\u9084\u80fd\u66f4\u597d\u55ce\uff1f \u8b93\u8a2d\u8a08\u8005\u9664\u4e86\u80fd\u4f9d\u64da SLO \u9019\u500b\u6e96\u7e69\u4e4b\u5916\uff0c\u9084\u80fd\u900f\u904e\u524d\u4e00\u6b21\u7684\u67b6\u69cb\u6216\u524d\u5e7e\u6b21\u7684\u67b6\u69cb\uff0c\u6700\u7d42\u7522\u51fa\u66f4\u597d\u7684\u67b6\u69cb\u3002
\u6839\u64da Google \u7684\u7d93\u9a57\uff0c\u628a\u62bd\u8c61\u7684\u9700\u6c42\u8f49\u5316\u6210\u5be6\u969b\u7684\u8cc7\u6e90\uff0c \u4f8b\u5982 CPU\u3001\u8a18\u61b6\u9ad4\u3001Network throughput \u7b49\u7b49\uff0c \u5c0d\u65bc\u67b6\u69cb\u6700\u7d42\u7684\u7a69\u5b9a\u6027\u975e\u5e38\u91cd\u8981\u3002
"},{"location":"feedback/site-reliability-workbook/on-call/","title":"\u5f85\u547d\u5c0f\u7d44","text":"SRE \u7684\u5f85\u547d\uff08on-call\uff09\u548c\u50b3\u7d71\u7684\u5f85\u547d\u5dee\u7570\u5728\u65bc\uff0c\u6bd4\u8d77\u5c08\u6ce8\u65bc\u91cd\u8907\u6027\u7684\u52de\u52d5\uff0c\u4f8b\u5982\u76e3\u807d\u932f\u8aa4\u4e8b\u4ef6\u3001\u5b9a\u671f\u67e5\u770b\u9762\u677f\u7b49\u7b49\uff0c \u4ed6\u5011\u66f4\u5c08\u6ce8\u65bc\u5b9a\u7fa9\u9069\u7576\u7684\u95a5\u503c\uff0c\u512a\u5316\u958b\u767c\u6d41\u7a0b\u548c\u7cfb\u7d71\u3002
\u5f85\u547d\u5c0d\u7dda\u4e0a\u670d\u52d9\u7684\u7dad\u904b\u975e\u5e38\u91cd\u8981\uff0c\u4e14\u901a\u5e38\u662f\u500b\u9ad8\u7dca\u5f35\u6027\u7684\u5de5\u4f5c\uff0c\u4e0d\u7ba1\u662f\u5c0d\u500b\u4eba\u6216\u8005\u5718\u968a\u3002 \u4e5f\u56e0\u6b21\u8a2d\u8a08\u4e00\u500b\u7cfb\u7d71\u5316\u7684\u5f85\u547d\u6a5f\u5236\u662f\u5f85\u547d\u4eba\u54e1\u3001\u5f85\u547d\u5c0f\u7d44\u3001\u5168\u516c\u53f8\u90fd\u9700\u8981\u5171\u540c\u5546\u8a0e\u7684\u8b70\u984c\u3002
\u5982\u679c\u4f60\u5e38\u5e38\u6536\u5230\u4e00\u4e9b\u7121\u95dc\u7dca\u8981\u7684\u544a\u8b66\uff0c\u6211\u5011\u5efa\u8b70\u4f60\u9000\u5f8c\u4e00\u6b65\u5f9e\u66f4\u9ad8\u7684\u89d2\u5ea6\u53bb\u89c0\u5bdf\u6574\u500b\u60c5\u6cc1\u3002 \u4e26\u4e14\u5617\u8a66\u548c\u5176\u4ed6\u5925\u4f34\u6216 SRE \u5718\u968a\u4ea4\u63db\u610f\u898b\u3002
\u7dca\u6025\u60c5\u6cc1\u7684\u7dad\u904b\u9700\u8981\u4f9d\u9760 \u5e73\u5e38\u7df4\u7fd2\u5e36\u4f86\u7684\u808c\u8089\u8a18\u61b6 \u548c \u5b8c\u6574\u6587\u4ef6\u5e6b\u52a9\u6df7\u4e82\u72c0\u6cc1\u7684\u6307\u5f15\uff0c\u9019\u88e1\u6709\u5e7e\u500b\u9805\u76ee\u9700\u8981\u719f\u6089\uff1a
\u8981\u719f\u6089\u9019\u4e9b\u9805\u76ee\uff0c\u5c31\u5fc5\u9808\u8981\u505a\u7dda\u4e0a\u707d\u96e3\u6f14\u7df4\uff0c\u5982\u4f55\u88fd\u9020\u707d\u96e3\uff0c\u9700\u8981\u5927\u5bb6\u5947\u767c\u7570\u60f3\u3002 \u6bcf\u6b21\u57f7\u884c on-call \u7df4\u7fd2\u6642\uff0c\u53ef\u4ee5\u8f2a\u6d41\u7576\u4e3b\u5e2d\uff0c\u5305\u62ec\u707d\u96e3\u7684\u88fd\u9020\u3001\u544a\u8b66\u548c\u884c\u52d5\u3002
\u6700\u5f8c\uff0c\u975e\u5e38\u91cd\u8981\u7684\u4e00\u9ede\u662f\uff0c\u9019\u4e9b\u7d93\u9a57\u8981\u600e\u9ebc\u50b3\u627f\uff0c\u4e00\u4efd\u597d\u7684\u6587\u4ef6\uff1f\u4e00\u500b\u597d\u7684\u641c\u5c0b\u5e73\u53f0\uff1f
\u628a\u4e8b\u4ef6\u5206\u985e\uff1a
\u9019\u9ebc\u505a\u7684\u76ee\u7684\u662f\u628a on-call \u5f9e\u4e00\u4e9b\u65e5\u5e38\u7dad\u904b\u8cc7\u8a0a\u4e2d\u62c9\u51fa\u4f86\uff0c\u53ea\u5c08\u6ce8\u5728\u7dca\u6025\u4e8b\u4ef6\u3002
\u7576\u6709\u4e86 SLO\uff0c\u6211\u5011\u5c31\u53ef\u4ee5\u6bcf\u6708\u9032\u884c\u516c\u958b\u7684\u670d\u52d9\u5065\u5eb7\u5f59\u5831\uff0c\u5305\u62ec\u4e8b\u4ef6\u8655\u7406\u3001\u932f\u8aa4\u9810\u7b97\u7b49\u7b49\uff0c \u8b93\u90a3\u4e9b\u80a1\u6771\u80fd\u5920\u77e5\u9053\u516c\u53f8\u7684\u670d\u52d9\u5065\u5eb7\u72c0\u6cc1\u3002 \u9019\u7a2e\u6703\u8b70\u4e0d\u53ea\u80fd\u5920\u50b3\u9054 SLO \u7684\u91cd\u8981\u6027\uff0c\u4e5f\u8b93\u958b\u767c\u8005\u6709\u500b\u6642\u9593\u6aa2\u8996\u81ea\u5df1\u7684\u670d\u52d9\u3002
\u6bcf\u6b21\u9019\u4e9b\u7d93\u9a57\uff0c\u90fd\u6703\u8b93\u958b\u767c\u5718\u968a\u6709\u66f4\u5bb9\u6613\u8df3\u51fa\u300c\u4e8b\u4ef6\u5206\u985e\u3001\u6839\u56e0\u5206\u6790\u3001\u4e8b\u5f8c\u6790\u8aa4\u300d\u7684\u5faa\u74b0\u3002 \u4e26\u9032\u800c\u5f37\u5316\u548c\u8abf\u6574\u7522\u54c1\u958b\u767c\u6642\u7684\u6e96\u5247\uff0c\u6700\u91cd\u6539\u5584 on-call \u5718\u968a\u7684\u5de5\u4f5c\u54c1\u8cea\u3002
PagerDuty \u8aaa\u660e\u4ec0\u9ebc\u662f on-call
"},{"location":"feedback/site-reliability-workbook/postmortem-culture/","title":"\u4e8b\u5f8c\u6790\u8aa4\u6587\u5316","text":"\u5728\u672c\u66f8\u63cf\u8ff0\u4e2d\uff0c\u4e8b\u5f8c\u6790\u8aa4\u662f\u4e00\u500b\u5728 Google \u4e2d\u975e\u5e38\u91cd\u8981\u7684\u6587\u5316\uff08\u4e8b\u5f8c\u6790\u8aa4\u4e26\u4e0d\u662f\u4ec0\u9ebc\u65b0\u79d1\u6280\uff0c\u800c\u662f\u6587\u5316\uff09\u3002 \u5176\u6838\u5fc3\u7684\u6982\u5ff5\u662f\uff1a\u6790\u8aa4\u904e\u7a0b\u4e2d\u4e0d\u8981\u5e36\u8457\u8cac\u5099\u3002 \u597d\u7684\u4e8b\u5f8c\u6790\u8aa4\u6587\u5316\uff0c\u6703\u8b93\u5931\u8aa4\u6e1b\u5c11\uff0c\u5de5\u4f5c\u66f4\u9ad8\u6548\u548c\u5feb\u6a02\uff0c\u4e26\u6e1b\u5c11\u91cd\u8907\u6027\u932f\u8aa4\uff0c\u52a0\u5feb\u932f\u8aa4\u6062\u5fa9\u3002 \u800c\u672c\u7bc7\u7684\u91cd\u9ede\u5247\u662f\u8981\u50b3\u9054\u4e00\u500b\u8a0a\u606f\uff1a\u63a8\u5ee3\u4e8b\u5f8c\u6790\u8aa4\u6587\u5316\u662f\u53ef\u884c\u7684\uff01
\u4ee5\u4e0b\u6587\u7ae0\u5c07\u5206\u70ba\u4e09\u5927\u584a\uff1a
\u96d6\u7136 Google \u5927\u90e8\u5206\u7684\u4f3a\u670d\u5668\u90fd\u4f4d\u65bc\u81ea\u5df1\u7ba1\u7406\u7684\u8cc7\u6599\u4e2d\u5fc3\uff0c\u4f46\u4ecd\u6703\u5728\u4e00\u4e9b\u5730\u5340\u4f7f\u7528\u79df\u501f\u7684\u8cc7\u6599\u4e2d\u5fc3\uff0c \u4f7f\u7528\u8a17\u7ba1\u670d\u52d9\uff08Colocation centre\uff09\u5efa\u7acb\u5feb\u53d6\uff08cache\uff09\u548c\u4ee3\u7406\u5668\uff08proxy\uff09\uff0c \u800c\u9019\u985e\u7684\u6a5f\u5668\u5728 Google \u5167\u90e8\uff0c\u7a31\u5176\u70ba \u885b\u661f\uff08satellites\uff09\u3002
Google \u5c0d\u65bc\u7dad\u904b\u8a2d\u5099\u7684\u904b\u884c\uff0c\u5927\u90e8\u5206\u90fd\u662f\u4f9d\u9760\u81ea\u52d5\u5316\u7684\uff0c \u5305\u62ec\u65b0\u6a5f\u5668\u7684\u8edf\u9ad4\u5b89\u88dd\u3001\u9000\u5f79\u3001\u7248\u672c\u5347\u7d1a\u3001\u6d41\u91cf\u6d29\u6d41\uff08drain\uff09\u7b49\u7b49\u3002 \u5176\u4e2d\u9000\u5f79\u6642\u7684\u81ea\u52d5\u5316\u7a31\u5176\u70ba \u78c1\u789f\u62b9\u9664\uff08dsikerase\uff09\uff0c \u4e00\u65e6\u6a5f\u5668\u88ab\u62b9\u9664\uff0c\u5132\u5b58\u7684\u6240\u6709\u8cc7\u6599\u5c07\u7121\u6cd5\u518d\u88ab\u7372\u53d6\u3002 \u800c\u9019\u7aef\u81ea\u52d5\u5316\u7684\u908f\u8f2f\u5927\u81f4\u5982\u4e0b\uff1a
// \u5f97\u5230\u6307\u5b9a\u8cc7\u6599\u4e2d\u5fc3\uff08satellite\uff09\u7684\u6240\u6709\u5728\u7dda\u6a5f\u5668\nconst machines = getActiveMachinesFrom(satellite);\n\n// \u900f\u904e `filter` \u628a\u8a72\u6307\u5b9a\u8cc7\u6599\u4e2d\u5fc3\u7684\u6a5f\u5668\uff08\u800c\u975e\u6240\u6709\u8cc7\u6599\u4e2d\u5fc3\u7684\u6240\u6709\u6a5f\u5668\uff09\u9032\u884c\u9000\u5f79\nsendToDecom({\n candidates: getAllActiveMachines(),\n filter: machines,\n});\n
\u7576\u7dad\u904b\u4eba\u54e1\u9032\u884c\u65e5\u5e38\u7684\u9000\u5f79\u5de5\u4f5c\u6642\uff0c\u81ea\u52d5\u5316\u57f7\u884c\u7d50\u679c\u5f97\u77e5\u6709\u932f\uff08\u7136\u800c\u5be6\u969b\u4e0a\u537b\u5df2\u7d93\u6b63\u78ba\u9032\u884c\u9000\u5f79\uff09\uff0c \u9019\u6642\u7dad\u904b\u4eba\u54e1\u70ba\u4e86\u9664\u932f\uff0c\u518d\u4e00\u6b21\u7684\u57f7\u884c\u9019\u500b\u81ea\u52d5\u5316\u8173\u672c\uff1a
// \u56e0\u70ba\u4e0a\u4e00\u6b21\u628a\u6240\u6709\u6a5f\u5668\u90fd\u9000\u5f79\u4e86\uff0c\u6240\u4ee5\u9019\u88e1\u6703\u5f97\u5230\u7a7a\u7684\u9663\u5217\nconst machines = getActiveMachinesFrom(satellite);\n\n// `filter` \u6536\u5230\u7a7a\u9663\u5217\u5f8c\uff0c\u6703\u76f4\u63a5\u9078\u7528\u6240\u6709\u7684 `candidates` \u800c\u975e\u7a7a\u9663\u5217\nsendToDecom({\n candidates: getAllActiveMachines(),\n filter: machines,\n});\n
\u7531\u65bc filter
\u662f\u7a7a\u9663\u5217\uff0c\u5168\u4e16\u754c\u6240\u6709\u885b\u661f\u5167\u53d7\u8a17\u7ba1\u7684\u6a5f\u5668\u90fd\u88ab\u9032\u884c\u78c1\u789f\u62b9\u9664\uff0c \u56e0\u70ba\u885b\u661f\u5167\u7684\u6a5f\u5668\u88ab\u5224\u5b9a\u70ba\u5931\u80fd\uff0c\u5168\u4e16\u754c\u6240\u6709\u7684\u6d41\u91cf\u90fd\u88ab\u5c0e\u6d41\u9032 Google \u81ea\u5df1\u7dad\u8b77\u7684\u8cc7\u6599\u4e2d\u5fc3\u3002
\u5e78\u8667\u7576\u521d\u7684\u5bb9\u91cf\u898f\u5283\u8b93 Google \u6709\u80fd\u529b\u627f\u8f09\u9019\u4e9b\u6d41\u91cf\uff0c \u9019\u6b21\u7684\u4e8b\u4ef6\u96d6\u7136\u8017\u6642\u4e86\u5169\u5929\u624d\u628a\u6240\u6709\u8cc7\u6599\u4e2d\u5fc3\u7684\u4f3a\u670d\u5668\u6062\u5fa9\u6b63\u5e38\uff0c\u4f46\u53ea\u9020\u6210\u4e9b\u5fae\u7684\u6f5b\u6642\uff08latency\uff09\u4e0a\u5347\u3002 \u4e26\u4e14\u5728\u4e8b\u5f8c\u6578\u9031\u9032\u884c\u5065\u5168\u7684\u76e3\u63a7\u548c\u5efa\u7acb\u963b\u65b7\u5668\uff0c \u4e26\u78ba\u4fdd\u8a72\u81ea\u52d5\u5316\u6d41\u7a0b\u662f\u51aa\u7b49\u7684\uff08idempotent\uff0c\u91cd\u8907\u57f7\u884c\u4e0d\u6703\u4e92\u76f8\u5f71\u97ff\uff09\u3002 \u4e09\u5e74\u5f8c\uff0c\u985e\u4f3c\u7684\u4e8b\u4ef6\u5c0e\u81f4\u90e8\u5206\u885b\u661f\u7684\u4f3a\u670d\u5668\u5931\u80fd\uff0c \u800c\u4e09\u5e74\u524d\u7684\u6574\u6cbb\u624b\u6bb5\u5927\u5927\u964d\u4f4e\u4e86\u8a72\u4e8b\u4ef6\u7684\u7206\u70b8\u534a\u5f91\u548c\u6062\u5fa9\u6642\u9593\u3002
\u63a5\u4e0b\u4f86\uff0c\u6211\u5011\u5c31\u4f86\u64b0\u5beb\u770b\u770b\u9019\u6b21\u4e8b\u4ef6\u7684\u4e8b\u5f8c\u6790\u8aa4\u6587\u4ef6\uff0c\u4e26\u6bd4\u8f03\u5169\u500b\u4e0d\u540c\u6587\u4ef6\u7684\u5dee\u7570\u3002
"},{"location":"feedback/site-reliability-workbook/postmortem-culture/#\u58de\u7684\u4e8b\u5f8c\u6790\u8aa4\u6587\u4ef6","title":"\u58de\u7684\u4e8b\u5f8c\u6790\u8aa4\u6587\u4ef6","text":"\u7121\u3002
"},{"location":"feedback/site-reliability-workbook/postmortem-culture/#\u5f71\u97ff","title":"\u5f71\u97ff","text":"\u53e2\u96c6\u7684\u81ea\u52d5\u5316\u64cd\u4f5c\u4e0d\u662f\u51aa\u7b49\u7684\u3002 \u7a0b\u5f0f\u78bc\u672c\u8eab\u6709\u907f\u514d\u90e8\u5206\u6a5f\u5236\u91cd\u65b0\u57f7\u884c\u7684\u9650\u5236\uff0c\u4f46\u662f\u7121\u6cd5\u963b\u6b62\u4f7f\u7528\u8005\u91cd\u8907\u57f7\u884c\u7a0b\u5f0f\u672c\u8eab\u3002 \u8352\u5510\u7684\u662f\u6c92\u6709\u4efb\u4f55\u6587\u4ef6\u8aaa\u660e\u9019\u500b\u9677\u9631\uff0c\u5c0e\u81f4\u5718\u968a\u6210\u54e1\u5927\u90e8\u5206\u90fd\u4efb\u4f55\u91cd\u8907\u57f7\u884c\u662f\u53ef\u88ab\u63a5\u53d7\u7684\u3002
\u9019\u4fbf\u662f\u5728\u57f7\u884c\u65e5\u5e38\u9000\u5f79\u6642\uff0c\u767c\u751f\u7684\u932f\u8aa4\u539f\u56e0\u3002 \u6211\u5011\u6b63\u6e96\u5099\u628a\u6a5f\u5668\u9032\u884c\u66ff\u63db\u6642\uff0c\u738b\u56db@ \u5b8c\u5168\u5ffd\u7565\u4e86\u4e0a\u4e00\u6b21\u64cd\u4f5c\u5df2\u7d93\u6b63\u78ba\u57f7\u884c\uff0c \u56e0\u70ba\u4ed6\u7684\u4e0d\u5c0f\u5fc3\u5c0e\u81f4\u9032\u4e00\u6b65\u89f8\u767c\u8a72\u9677\u9631\u3002
"},{"location":"feedback/site-reliability-workbook/postmortem-culture/#\u5fa9\u539f\u64cd\u4f5c","title":"\u5fa9\u539f\u64cd\u4f5c","text":"\u7121\u3002
"},{"location":"feedback/site-reliability-workbook/postmortem-culture/#\u5b78\u5230\u4e86\u4ec0\u9ebc","title":"\u5b78\u5230\u4e86\u4ec0\u9ebc","text":"\u7121\u3002
"},{"location":"feedback/site-reliability-workbook/postmortem-culture/#\u70ba\u4ec0\u9ebc\u9019\u4efd\u6587\u4ef6\u5beb\u5f97\u7cdf","title":"\u70ba\u4ec0\u9ebc\u9019\u4efd\u6587\u4ef6\u5beb\u5f97\u7cdf","text":"\u707d\u96e3\u7684\u50f9\u503c\u5728\u65bc\u597d\u7684\u4e8b\u5f8c\u6790\u8aa4\uff0c\u6b63\u56e0\u5982\u6b64\uff0c\u6211\u5011\u82b1\u6642\u9593\u53bb\u64b0\u5beb\u9019\u4efd\u6587\u4ef6\uff0c\u5c07\u8b8a\u5f97\u81f3\u95dc\u91cd\u8981\u3002 \u95b1\u8b80\u8005\u5728\u770b\u9019\u4efd\u6587\u4ef6\u6642\uff0c\u61c9\u8a72\u8981\u6e05\u695a\u4e8b\u4ef6\u7684\u8108\u7d61\uff0c\u66f4\u91cd\u8981\u7684\u662f\u80fd\u5f9e\u4e8b\u4ef6\u4e2d\u5b78\u5230\u4e9b\u4ec0\u9ebc\u3002
\u63a5\u4e0b\u4f86\u6211\u5011\u5206\u6790\u4e00\u4e0b\u70ba\u4ec0\u9ebc\u4e0a\u4e00\u4efd\u6587\u4ef6\u5beb\u5f97\u5f88\u721b\u3002
"},{"location":"feedback/site-reliability-workbook/postmortem-culture/#\u80cc\u666f\u63cf\u8ff0\u7684\u5331\u4e4f","title":"\u80cc\u666f\u63cf\u8ff0\u7684\u5331\u4e4f","text":"\u672c\u6b21\u4e8b\u4ef6\u6709\u5e7e\u500b\u5c08\u6709\u540d\u8a5e\uff0c \u4f8b\u5982 \u885b\u661f \u4ee3\u8868\u7528\u4f86\u8655\u7406\u908a\u7de3\u904b\u7b97\u7684\u6a5f\u5668\u3001\u78c1\u789f\u62b9\u9664 \u4ee3\u8868\u81ea\u52d5\u5316\u904b\u884c\u7684\u8173\u672c\u3002 \u5982\u679c\u4f60\u9700\u8981\u63d0\u4f9b\u4e00\u4e9b\u80cc\u666f\u77e5\u8b58\uff0c\u8acb\u984d\u5916\u589e\u52a0\u4e00\u4e9b\u6bb5\u843d\u4f86\u8aaa\u660e\uff0c\u4f8b\u5982\u300c\u8a5e\u5f59\u8868\u300d\u6216\u300c\u80cc\u666f\u77e5\u8b58\u300d\u3002
\u4e00\u500b\u7f3a\u4e4f\u6e05\u695a\u6982\u7d61\u7684\u6587\u4ef6\uff0c\u4e0d\u53ea\u6703\u8b93\u4eba\u770b\u4e0d\u61c2\uff0c \u751a\u81f3\u6703\u8b93\u4eba\u9078\u64c7\u5ffd\u7565\u9019\u4efd\u6587\u4ef6\uff0c\u9032\u800c\u628a\u80fd\u5f9e\u4e8b\u4ef6\u5b78\u5230\u7684\u6771\u897f\u76f4\u63a5\u6b78\u96f6\u3002
"},{"location":"feedback/site-reliability-workbook/postmortem-culture/#\u95dc\u9375\u7d30\u7bc0\u7684\u5ffd\u7565","title":"\u95dc\u9375\u7d30\u7bc0\u7684\u5ffd\u7565","text":"\u5f88\u591a\u6bb5\u843d\u53ea\u6709\u9ad8\u5c64\u6b21\u7684\u6982\u89c0\uff0c\u7f3a\u4e4f\u91cd\u8981\u7684\u7d30\u7bc0\uff0c\u4f8b\u5982\uff1a
\u72c0\u6cc1\u7e3d\u7d50\u4e2d\uff0c\u6211\u5011\u7121\u6cd5\u5f9e\u9019\u4efd\u6587\u4ef6\u5f97\u77e5\u4e8b\u4ef6\u7684\u5f71\u97ff\u7bc4\u570d\uff0c\u5982\u679c\u5f71\u97ff\u7bc4\u570d\u662f\u591a\u500b\u7522\u54c1\uff0c\u8acb\u660e\u78ba\u7d66\u51fa\u76f8\u95dc\u7684\u6578\u503c\u3002 \u9019\u4efd\u6587\u4ef6\u4e2d\u53ea\u6709\u6301\u7e8c\u6642\u9593\u662f\u6578\u5b57\uff0c\u5982\u679c\u6c92\u6709\u76f8\u95dc\u6578\u503c\uff0c\u8acb\u76e1\u91cf\u7d66\u51fa\u500b\u4f30\u8a08\uff0c \u7562\u7adf \u6c92\u6709\u6b63\u78ba\u7684\u7206\u70b8\u534a\u5f91\uff0c\u5c31\u7121\u6cd5\u6b63\u78ba\u8a55\u4f30\u662f\u5426\u4fee\u5fa9\u5b8c\u6210\u3002
\u6839\u56e0\u548c\u89f8\u767c\u9ede\u662f\u4e8b\u5f8c\u6790\u8aa4\u6587\u4ef6\u4e2d\u975e\u5e38\u91cd\u8981\u7684\u4e00\u9ede\u3002 \u5728\u9019\u4efd\u6587\u4ef6\u4e2d\uff0c\u53ea\u6709\u770b\u5230\u4e00\u5c0f\u6bb5\u843d\uff0c\u7f3a\u4e4f\u8db3\u5920\u7d30\u7bc0\u8b93\u4eba\u80fd\u5920\u6709\u6a5f\u6703\u601d\u8003\u5176\u4e2d\u7684\u6539\u9032\u9ede\u3002
\u6211\u5011\u901a\u5e38\u80fd\u5728\u5fa9\u539f\u64cd\u4f5c\u6bb5\u843d\u4e2d\u627e\u5230\u767c\u751f\u4e86\u4ec0\u9ebc\uff0c\u600e\u9ebc\u88ab\u7de9\u89e3\u4ee5\u53ca\u4f7f\u7528\u8005\u662f\u600e\u9ebc\u88ab\u5f71\u97ff\u7684\uff0c \u7136\u800c\u9019\u4efd\u6587\u4ef6\u537b\u5b8c\u5168\u7a7a\u767d\u3002
"},{"location":"feedback/site-reliability-workbook/postmortem-culture/#\u5f8c\u7e8c\u512a\u5316\u7684\u8ca7\u4e4f","title":"\u5f8c\u7e8c\u512a\u5316\u7684\u8ca7\u4e4f","text":"\u5f8c\u7e8c\u512a\u5316\uff08Action Items, AIs\uff09\u6709\u5e7e\u500b\u9762\u5411\u53bb\u8a55\u65b7\u4ed6\u7684\u597d\u58de\uff0c\u4f8b\u5982\uff1a
\u8b93\u6211\u5011\u5047\u8a2d\u672a\u4f86\u53c3\u8207\u7dad\u904b\u672c\u670d\u52d9\u7684\u4eba\u54e1\uff0c\u90fd\u548c\u4e8b\u4ef6\u4e2d\u7684\u6211\u5011\u4e00\u6a23\u611a\u8822\u3002
\u2014 Dan Milstein\uff0cPost-Mortems at HubSpot: What I Learned From 250 Whys - \u6bcf\u500b\u512a\u5316\u90fd\u662f\u76f8\u540c\u7684\u512a\u5148\u7a0b\u5ea6\uff0c\u6703\u8b93\u9019\u500b\u6b04\u4f4d\u5931\u53bb\u610f\u7fa9\u3002
\u5c0d\u5ba2\u6236\u4f86\u8aaa\uff0c\u4e00\u500b\u6c92\u6709\u5f8c\u7e8c\u512a\u5316\u7684\u4e8b\u5f8c\u6790\u8aa4\u6587\u4ef6\uff0c\u7b49\u65bc\u6c92\u6709\u6587\u4ef6\uff0c\u6240\u4ee5\u4efb\u4f55\u4e00\u500b\u6703\u5f71\u97ff\u5ba2\u6236\u7684\u4e8b\u4ef6\uff0c \u90fd\u61c9\u8a72\u8981\u6709\u81f3\u5c11\u4e00\u500b\u512a\u5148\u7a0b\u5ea6\u70ba\u70ba 0 \u6216 1 \u7684\u6539\u5584\u9805\u76ee\u3002 - \u52c1\u91cf\u907f\u514d\u4f7f\u7528\u300c\u8b93\u4ed6\u66f4\u597d\u300d\u3001\u300c\u512a\u5316\u300d\u7b49\u6cdb\u5316\u7684\u8a5e\u5f59\uff0c\u6703\u8b93\u4eba\u7121\u6cd5\u5206\u6790\u8a72\u512a\u5316\u7684\u5b8c\u6210\u5ea6\u3002 - \u5982\u679c\u6c92\u6709\u7968\u53bb\u8ffd\u8e64\u76f8\u95dc\u512a\u5316\uff0c\u9019\u4e9b\u6539\u5584\u90fd\u5f88\u5bb9\u6613\u88ab\u907a\u5fd8\u3002
\u660e\u78ba\u8aaa\u660e\u4f55\u4eba\u5728\u4f55\u6642\u4f55\u5730\u72af\u932f\u770b\u8d77\u4f86\u662f\u500b\u5408\u7406\u7684\u64b0\u5beb\u6587\u4ef6\u65b9\u5f0f\uff0c\u4f46\u662f\u9019\u6703\u8b93\u9019\u4e9b\u4eba\u66f4\u5bb3\u6015\u72af\u932f\uff0c \u9032\u800c\u9078\u64c7\u63a9\u84cb\u932f\u8aa4\uff0c\u6700\u5f8c\u8b93\u65bc\u672c\u6b21\u4e8b\u4ef6\u7684\u6839\u56e0\u6216\u89f8\u767c\u9ede\u88ab\u932f\u8aa4\u89e3\u91cb\u3002 \u5e38\u898b\u7684\u7bc4\u4f8b\u53ef\u80fd\u662f\uff1a
\u4f8b\u5982\uff1a\u4e0d\u6562\u7f6e\u4fe1\u3001\u5f88\u8352\u5510\u5730\u3002
\u4e8b\u5f8c\u6790\u8aa4\u6587\u5316\u662f\u4e00\u500b\u4e8b\u5be6\u5c0e\u5411\u7684\u6587\u4ef6\uff0c\u4e5f\u7576\u7136\u5141\u8a31\u500b\u4eba\u7684\u8a55\u8ad6\u548c\u8cea\u7591\uff0c \u5b83\u61c9\u7576\u662f\u63d0\u4f9b\u4e00\u500b\u7a7a\u9593\u8b93\u591a\u4eba\u591a\u89d2\u5ea6\u4e14\u4e92\u76f8\u5c0a\u91cd\u5730\u53bb\u8a0e\u8ad6\u672c\u6b21\u4e8b\u4ef6\u3002 \u4f46\u662f\u904e\u591a\u7684\u60c5\u7dd2\u8a00\u8ad6\u6703\u5f71\u97ff\u5176\u4ed6\u4eba\u9032\u4f86\u53c3\u8207\u7684\u610f\u9858\uff0c\u597d\u7684\u65b9\u6cd5\u61c9\u7576\u662f\u4ee5\u8cc7\u6599\u70ba\u4f50\u8b49\u53bb\u95e1\u8ff0\u76f8\u95dc\u8ad6\u9ede\u3002
"},{"location":"feedback/site-reliability-workbook/postmortem-culture/#\u4e8b\u9805\u7684\u6b78\u5c6c\u4eba\u54e1","title":"\u4e8b\u9805\u7684\u6b78\u5c6c\u4eba\u54e1","text":"\u9019\u500b\u4e8b\u5f8c\u6790\u8aa4\u6587\u4ef6\u627e\u4e0d\u5230\u61c9\u8a72\u7531\u54ea\u500b\u4eba\u8ca0\u8cac\u64b0\u5beb\u3001\u8ffd\u8e64\u4ee5\u53ca\u56de\u7b54\u5176\u4ed6\u4eba\u7684\u7591\u554f\uff0c \u800c\u662f\u63d0\u4f9b\u4e86\u56db\u500b\u4eba\u7684\u540d\u5b57\uff0c\u8b93\u5927\u5bb6\u53bb\u731c\u3002
\u5f8c\u7e8c\u512a\u5316\u9805\u76ee\u7f3a\u4e4f\u660e\u78ba\u7684\u8ca0\u8cac\u4eba\uff0c\u9019\u6703\u8b93\u9019\u4e9b\u6539\u5584\u5f88\u96e3\u9032\u884c\u5f8c\u7e8c\u8ffd\u8e64\u3002
"},{"location":"feedback/site-reliability-workbook/postmortem-culture/#\u6587\u4ef6\u7684\u95b1\u8b80\u4eba\u54e1","title":"\u6587\u4ef6\u7684\u95b1\u8b80\u4eba\u54e1","text":"\u5728\u9019\u4efd\u6587\u4ef6\u4e2d\uff0c\u53ea\u5141\u8a31\u5718\u968a\u5167\u90e8\u4eba\u54e1\u67e5\u770b\uff0cGoogle \u5efa\u8b70\u4e8b\u5f8c\u6790\u8aa4\u6587\u4ef6\u662f\u5141\u8a31\u516c\u53f8\u5167\u90e8\u6240\u6709\u4eba\u54e1\u67e5\u770b\u7684\u3002 \u56e0\u70ba\u4e8b\u5f8c\u6790\u8aa4\u6587\u4ef6\u7684\u50f9\u503c\u5c31\u662f\u8b93\u8d8a\u591a\u4eba\u5f9e\u4e2d\u5b78\u5230\u8d8a\u591a\u4e8b\u60c5\u8d8a\u597d\u3002 \u66f4\u6709\u751a\u8005\uff0c\u4e5f\u53ef\u4ee5\u628a\u9019\u4efd\u6587\u4ef6\u516c\u4f48\u7d66\u516c\u53f8\u5916\u90e8\u4eba\u54e1\u67e5\u770b\uff0c \u56e0\u70ba\u4e00\u500b\u88ab\u59a5\u5584\u64b0\u5beb\u4e14\u8aa0\u5be6\u7684\u6587\u4ef6\u4e5f\u662f\u4e00\u500b\u6062\u5fa9\u5927\u5bb6\u5c0d\u516c\u53f8\u4fe1\u4efb\u7684\u597d\u65b9\u6cd5\u3002
"},{"location":"feedback/site-reliability-workbook/postmortem-culture/#\u6587\u4ef6\u767c\u5e03\u7684\u5ef6\u5b95","title":"\u6587\u4ef6\u767c\u5e03\u7684\u5ef6\u5b95","text":"\u9019\u4efd\u6587\u4ef6\u7684\u767c\u5e03\u5df2\u7d93\u662f\u4e8b\u4ef6\u767c\u751f\u5f8c\u7684\u597d\u5e7e\u500b\u6708\u4e86\uff0c\u5718\u968a\u6210\u54e1\u5c0d\u65bc\u672c\u6b21\u4e8b\u4ef6\u7684\u8a18\u61b6\u5df2\u7d93\u6a21\u7cca\uff0c \u5f88\u53ef\u80fd\u5728\u64b0\u5beb\u4e0a\u51fa\u73fe\u7455\u75b5\u3002
"},{"location":"feedback/site-reliability-workbook/postmortem-culture/#\u597d\u7684\u4e8b\u5f8c\u6790\u8aa4\u6587\u4ef6","title":"\u597d\u7684\u4e8b\u5f8c\u6790\u8aa4\u6587\u4ef6","text":"\u63a5\u4e0b\u4f86\u7684\u7bc4\u4f8b\u662f\u5be6\u969b\u4e0a\u5b58\u5728\u7684\u6587\u4ef6\uff0c\u96d6\u7136\u6703\u628a\u4e00\u4e9b\u654f\u611f\u8cc7\u6599\u85cf\u8d77\u4f86\uff0c\u4f46\u8db3\u4ee5\u6aa2\u9a57\u4f55\u70ba\u597d\u7684\u4e8b\u5f8c\u6790\u8aa4\u6587\u4ef6\u3002
satellite-a12bcd34 \u670d\u52d9\u592a\u591a\u5931\u6557 HTTP \u8acb\u6c42
\u5982\u679c\u4f60\u4e0d\u719f\u6089 Google \u524d\u7aef\u6d41\u91cf\u7684\u670d\u52d9\u65b9\u5f0f\u548c\u5176\u5e95\u5c64\u7684\u81ea\u52d5\u5316\u6a5f\u5236\uff0c\u8acb\u5148\u53c3\u95b1\u8a5e\u5f59\u8868\u3002
"},{"location":"feedback/site-reliability-workbook/postmortem-culture/#\u5f71\u97ff_1","title":"\u5f71\u97ff","text":"\u4ee5\u4e0b\u5c07\u8aaa\u660e\u5404\u500b\u9762\u5411\u7684\u5f71\u97ff\u3002
"},{"location":"feedback/site-reliability-workbook/postmortem-culture/#\u4f7f\u7528\u8005\u5f71\u97ff","title":"\u4f7f\u7528\u8005\u5f71\u97ff","text":"\u6709\u90e8\u5206\u5ee3\u544a\u6c92\u6709\u88ab\u6295\u653e\uff0c\u5be6\u969b\u6536\u76ca\u5f71\u97ff\u76ee\u524d\u4e0d\u53ef\u77e5\uff1a
\u67d0\u500b\u9023\u7d50\u5c0e\u5411\u4e8b\u4ef6\u8ffd\u8e64\u7cfb\u7d71\u3002
"},{"location":"feedback/site-reliability-workbook/postmortem-culture/#\u6839\u56e0\u548c\u89f8\u767c\u9ede_1","title":"\u6839\u56e0\u548c\u89f8\u767c\u9ede","text":"\u9577\u671f\u5b58\u5728\u65bc\u57f7\u884c\u9a57\u8b49\u6a5f\u5236\u7684\u932f\u8aa4\uff0c\u5c0e\u81f4\u7de8\u865f a12bcd34
\u7684\u8a2d\u5099\u5728\u9000\u5f79\u904e\u7a0b\u51fa\u932f\uff0c \u9019\u500b\u932f\u8aa4\u8b93\u9000\u5f79\u6a5f\u5236\u4e0d\u518d\u53d7\u9650\u65bc\u6307\u5b9a\u8a2d\u5099\uff0c\u800c\u662f\u6240\u6709\u7684\u885b\u661f\u8a2d\u5099\u3002 \u81f3\u6b64\uff0c\u5728\u4eba\u5de5\u4ecb\u5165\u66ab\u505c\u81ea\u52d5\u5316\u6a5f\u5236\u524d\uff0c\u73fe\u6709\u5927\u90e8\u5206\u7684\u885b\u661f\u8a2d\u5099\u90fd\u88ab\u57f7\u884c\u4e86\u9000\u5f79\uff0c\u4e26\u9032\u884c\u78c1\u789f\u62b9\u9664\u3002
\u6d41\u91cf\u5718\u968a\u63d0\u4f9b\u4e86 ReleaseSatelliteMachines
\u9019\u500b API\uff0c\u4ed6\u6703\u9032\u884c\u4e09\u500b\u968e\u6bb5\u7684\u64cd\u4f5c\uff1a
a12bcd34
\u88e1\u6709\u4e00\u500b rack123
\u6a5f\u6ac3\uff1brack123
\u5c0d\u61c9\u65bc machine1
\u3001machine2
\u7b49\u7b49\uff1b\u56e0\u70ba\u7f3a\u5c11\u6aa2\u67e5\uff0c\u6240\u4ee5\u9019\u500b\u64cd\u4f5c\u4e26\u4e0d\u662f\u51aa\u7b49\u7684\u3002 \u5982\u679c\u6709\u4e00\u500b\u6a5f\u6ac3\u5df2\u7d93\u5728\u4e0a\u6b21\u64cd\u4f5c\u9032\u884c\u78c1\u789f\u62b9\u9664\uff0c\u7b2c\u4e8c\u9805\u64cd\u4f5c\u5f97\u5230\u7684\u6a5f\u5668\u5c31\u6703\u8b8a\u6210\u7a7a\u9663\u5217\u3002 \u7576\u7a7a\u9663\u5217\u50b3\u9032\u7b2c\u4e09\u9805\u64cd\u4f5c\u6642\uff0c\u5c31\u6703\u8b8a\u6210\u628a\u6240\u6709\u6a5f\u5668\u9032\u884c\u78c1\u789f\u62b9\u9664\u3002
\u9019\u500b\u5371\u96aa\u7684\u7a0b\u5f0f\u908f\u8f2f\u5df2\u7d93\u5b58\u5728\u4e00\u6bb5\u6642\u9593\u4e86\uff0c\u4f46\u662f\u56e0\u70ba\u5718\u968a\u5728\u57f7\u884c\u5b8c\u4e00\u6b21\u64cd\u4f5c\u5f8c\uff0c \u6703\u5728 UI \u4e0a\u986f\u793a run once \u9019\u500b\u901a\u77e5\uff0c\u4ee3\u8868\u4ed6\u5df2\u7d93\u6210\u529f\u88ab\u57f7\u884c\uff0c\u4e0d\u9700\u8981\u518d\u57f7\u884c\u4e86\u3002 \u4f46\u9019\u500b run once \u4e26\u6c92\u6709\u544a\u77e5\u4f7f\u7528\u8005\uff0c\u7576\u4f60\u518d\u57f7\u884c\u4e00\u6b21\uff0c\u6703\u767c\u751f\u4ec0\u9ebc\u4e8b\uff0c \u9019\u4e5f\u9032\u4e00\u6b65\u8b93\u53e2\u96c6\u91cd\u555f\u5718\u968a\u5728\u624b\u52d5\u89f8\u767c\u7b2c\u4e8c\u6b21\u9000\u5f79\u64cd\u4f5c\u6642\uff0c\u89f8\u767c\u4e86\u9019\u500b\u932f\u8aa4\u3002
"},{"location":"feedback/site-reliability-workbook/postmortem-culture/#\u6642\u9593\u7dda\u548c\u5fa9\u539f\u64cd\u4f5c","title":"\u6642\u9593\u7dda\u548c\u5fa9\u539f\u64cd\u4f5c","text":"\u6642\u9593\u7dda\u548c\u64cd\u4f5c\u5728\u9019\u88e1\u88ab\u96b1\u85cf\u4e86\uff0c\u4f46\u5be6\u969b\u7684\u6587\u4ef6\u4e2d\u9019\u500b\u8cc7\u8a0a\u662f\u4e00\u5b9a\u6703\u6709\u7684\u3002
"},{"location":"feedback/site-reliability-workbook/postmortem-culture/#\u5b78\u5230\u4e86\u4ec0\u9ebc_1","title":"\u5b78\u5230\u4e86\u4ec0\u9ebc","text":""},{"location":"feedback/site-reliability-workbook/postmortem-culture/#\u6211\u5011\u505a\u5c0d\u4e86","title":"\u6211\u5011\u505a\u5c0d\u4e86","text":"\u95dc\u65bc\u5931\u80fd\u7684\u90e8\u5206\uff1a
\u95dc\u65bc\u5fa9\u539f\u7684\u90e8\u5206\uff1a
\u7531\u65bc\u672c\u4e8b\u4ef6\u7684\u5ee3\u6cdb\u5f71\u97ff\uff0c\u6211\u5011\u5c07\u512a\u5316\u62c6\u5206\u6210\u4e94\u500b\u9762\u5411\uff1a
\u9810\u9632\u548c\u98a8\u96aa\u7684\u6559\u80b2
\u512a\u5316\u5167\u5bb9 \u7a2e\u985e \u512a\u5148\u5ea6 \u6240\u5c6c\u4eba\u54e1 \u7968\u865f \u78ba\u4fdd\u5f9e\u6838\u5fc3\u5c0d\u5916\u7684\u6d41\u91cf\u4e0d\u6703\u904e\u8f09 \u5fa9\u539f P2 \u8607\u516d@ BUG129 \u78ba\u4fdd\u9000\u5f79\u6d41\u7a0b\u7684\u554f\u984c\u88ab\u8a3b\u8a18\u5728\u7dca\u6025\u505c\u6a5f\u6587\u4ef6\u548c\u707d\u96e3\u5347\u7d1a\u806f\u7e6b\u6587\u4ef6\u4e2d \u7de9\u89e3 P2 \u674e\u4e8c@ BUG130 \u65b0\u589e\u4e00\u500b\u7d05\u8272\u6309\u9215\u4f86\u4e2d\u65b7\u505c\u6a5f\u6d41\u7a0b \u7de9\u89e3 P0 \u694a\u4e00@ BUG131\u7dca\u6025\u72c0\u6cc1\u548c\u56de\u61c9
\u512a\u5316\u5167\u5bb9 \u7a2e\u985e \u512a\u5148\u5ea6 \u6240\u5c6c\u4eba\u54e1 \u7968\u865f \u76e3\u63a7\u76ee\u6a19\u7684\u5b89\u5168\u6027\u6aa2\u67e5\u8981\u62d2\u7d55\u90a3\u4e9b\u7121\u6cd5\u56de\u6eaf\u7684\u7570\u52d5 \u7de9\u89e3 P2 \u738b\u56db@ BUG132 \u7576\u8d85\u904e xx% \u7684\u6a5f\u5668\u88ab\u4e0b\u7dda\uff0c\u767c\u51fa\u544a\u8b66\u3002\u6a5f\u5668\u7684\u9000\u5f79\u904e\u7a0b\u5f9e 16:38 \u6301\u7e8c\u5230 17:10 \u5075\u6e2c P1 \u8607\u516d@ BUG133\u76e3\u63a7\u548c\u544a\u8b66
\u512a\u5316\u5167\u5bb9 \u7a2e\u985e \u512a\u5148\u5ea6 \u6240\u5c6c\u4eba\u54e1 \u7968\u865f \u900f\u904e HTTPS \u4f7f\u7528 iPXE \u4f86\u63d0\u5347\u91cd\u65b0\u5b89\u88dd\u7684\u6548\u7387\u548c\u901f\u5ea6 \u7de9\u89e3 P2 \u738b\u56db@ BUG134\u908a\u7de3\u904b\u7b97\u7684\u4f9b\u7d66
\u512a\u5316\u5167\u5bb9 \u7a2e\u985e \u512a\u5148\u5ea6 \u6240\u5c6c\u4eba\u54e1 \u7968\u865f \u900f\u904e\u65e2\u6709\u5de5\u5177\u5be9\u95b1\u7ba1\u7406\u7cfb\u7d71\u7684\u7a0b\u5f0f\u78bc \u5fa9\u539f P2 \u8607\u516d@ BUG135 \u5b89\u6392 DiRT \u6e2c\u8a66\uff1a\u78c1\u789f\u62b9\u9664\u5f8c\u5fa9\u539f\u6a5f\u5668\uff1bYouTube \u7684 CDN \u4e5f\u505a\u540c\u6a23\u7684\u4e8b \u7de9\u89e3 P2 \u8a31\u4e03@ BUG136\u96dc\u9805
"},{"location":"feedback/site-reliability-workbook/postmortem-culture/#\u8a5e\u5f59\u8868_1","title":"\u8a5e\u5f59\u8868","text":""},{"location":"feedback/site-reliability-workbook/postmortem-culture/#admin-server","title":"Admin Server","text":"\u4e00\u53f0 RPC \u7684\u7ba1\u7406\u670d\u52d9\uff0c\u5141\u8a31\u81ea\u52d5\u5316\u6a5f\u5236\u91dd\u5c0d GFE \u57f7\u884c\u4e00\u4e9b\u7dad\u904b\u884c\u70ba\u3002\u6700\u5e38\u898b\u7684\u64cd\u4f5c\u5c31\u662f\u555f\u52d5\u6216\u95dc\u9589\u7bc0\u9ede\u3002
"},{"location":"feedback/site-reliability-workbook/postmortem-culture/#autoreplacer","title":"Autoreplacer","text":"\u81ea\u52d5\u66ff\u63db\u6a5f\u5236\u662f\u7528\u4f86\u7ba1\u7406\u6a5f\u5668\u7684\u670d\u52d9\uff0c\u5b83\u5141\u8a31\u900f\u904e\u64cd\u4f5c\u4f86\u8a2d\u5b9a\u6a5f\u5668\u3001\u8cc7\u6599\u79fb\u8f49\u3001\u6a5f\u5668\u91cd\u555f\u7b49\u64cd\u4f5c\u3002
"},{"location":"feedback/site-reliability-workbook/postmortem-culture/#\u9000\u5f79","title":"\u9000\u5f79","text":"\u9000\u5f79\u6a5f\u5668\u662f\u4e00\u500b\u727d\u6d89\u5230\u8a31\u591a\u5718\u968a\u7684\u6d41\u7a0b\u3002
"},{"location":"feedback/site-reliability-workbook/postmortem-culture/#\u78c1\u789f\u62b9\u9664","title":"\u78c1\u789f\u62b9\u9664","text":"\u4e00\u500b\u6703\u95dc\u4fc2\u5230\u8edf\u786c\u9ad4\u7684\u884c\u70ba\uff0c\u7528\u4f86\u8b93\u786c\u9ad4\u8a2d\u5099\u5728\u9000\u51fa Google \u7684\u8cc7\u6599\u4e2d\u5fc3\u524d\uff0c\u9032\u884c\u5b89\u5168\u7684\u62b9\u9664\u3002 \u78c1\u789f\u62b9\u9664\u662f\u9000\u5f79\u6d41\u7a0b\u4e2d\u7684\u4e00\u74b0\u3002
"},{"location":"feedback/site-reliability-workbook/postmortem-culture/#gfegoogle-front-end","title":"GFE(Google Front End)","text":"\u524d\u7aef\u57fa\u790e\u8a2d\u65bd\u57f7\uff0c\u5728\u6d41\u91cf\u9032\u5230 Google \u6838\u5fc3\u7684\u8cc7\u6599\u4e2d\u5fc3\u524d\uff0c\u8ca0\u8cac\u63a5\u6536\u6d41\u91cf\u6216\u908a\u7de3\u7684\u8a2d\u5099\u7fa4\u3002
"},{"location":"feedback/site-reliability-workbook/postmortem-culture/#imagincident-management-at-google","title":"IMAG(Incident Management At Google)","text":"\u4e00\u500b\u5617\u8a66\u5efa\u7acb\u6a19\u6e96\u5316\u548c\u4e00\u81f4\u6027\u65b9\u6cd5\u4f86\u8655\u7406\u6240\u6709\u4e8b\u4ef6\u7684\u5c08\u6848\uff0c\u5f9e\u7cfb\u7d71\u5931\u80fd\u5230\u5929\u7136\u707d\u5bb3\uff0c\u4e26\u6574\u5408\u76f8\u95dc\u6709\u76ca\u7684\u56de\u61c9\u3002
"},{"location":"feedback/site-reliability-workbook/postmortem-culture/#mdbmachine-database","title":"MDB(Machine Database)","text":"\u4e00\u500b\u7d0d\u7ba1\u6240\u6709\u6a5f\u5668\u72c0\u614b\u7684\u8cc7\u6599\u5eab\u3002
"},{"location":"feedback/site-reliability-workbook/postmortem-culture/#omgoutage-management-at-google","title":"OMG(Outage Management at Google)","text":"\u4e00\u500b\u63d0\u4f9b\u4e8b\u4ef6\u7ba1\u7406\u548c\u5100\u8868\u677f\u7684\u5de5\u5177\uff0c\u7528\u4f86\u96c6\u4e2d\u8ffd\u8e64\u548c\u7ba1\u7406\u6240\u6709\u6b63\u5728\u8655\u7406\u7684\u4e8b\u4ef6\u3002
"},{"location":"feedback/site-reliability-workbook/postmortem-culture/#\u885b\u661f\u7cfb\u7d71","title":"\u885b\u661f\u7cfb\u7d71","text":"\u5c0f\u4e14\u4fbf\u5b9c\u7684\u6a5f\u5668\u7fa4\uff0c\u7528\u4f86\u670d\u52d9\u975e\u5f71\u7247\u7684\u5916\u90e8\u6216\u908a\u7de3\u7684\u7db2\u8def\u6d41\u91cf\u3002 \u5e7e\u4e4e\u6240\u6709\u7684\u7dda\u4e0a\u57fa\u790e\u8a2d\u65bd\u90fd\u53ef\u4ee5\u4e0d\u4f9d\u8cf4\u4ed6\u800c\u9032\u884c\u904b\u4f5c\u3002 YouTube \u7684\u5f71\u7247\u6d41\u91cf\u4e0d\u662f\u53d7\u5230\u4ed6\u670d\u52d9\u7684\uff0c\u800c\u662f\u53e6\u5916\u6709\u500b\u5c08\u9580\u7684 CDN \u4f86\u8655\u7406\uff0c\u4e5f\u56e0\u6b64\u4e0d\u53d7\u672c\u6b21\u4e8b\u4ef6\u5f71\u97ff\u3002
"},{"location":"feedback/site-reliability-workbook/postmortem-culture/#\u9644\u4ef6","title":"\u9644\u4ef6","text":"\u70ba\u4ec0\u9ebc ReleaseSatelliteMachines
\u4e0d\u662f\u51aa\u7b49\u7684\uff1f
\u96b1\u85cf\u76f8\u95dc\u56de\u7b54
\u7576 Admin Server \u57f7\u884c\u7684\u64cd\u4f5c\u662f\u91dd\u5c0d\u6240\u6709\u885b\u661f\u8a2d\u5099\u6642\uff0c\u6703\u767c\u751f\u4ec0\u9ebc\u4e8b\uff1f
\u96b1\u85cf\u76f8\u95dc\u56de\u7b54
\u7576\u767c\u751f\u707d\u5bb3\u6642\uff0c\u5be6\u969b\u4e0a\u932f\u8aa4\u7684 QPS \u662f\u591a\u5c11\uff1f
\u96b1\u85cf\u76f8\u95dc\u56de\u7b54
IRC \u7684\u65e5\u8a8c
\u96b1\u85cf\u76f8\u95dc\u56de\u7b54
"},{"location":"feedback/site-reliability-workbook/postmortem-culture/#\u5716\u8868","title":"\u5716\u8868","text":"\u66f4\u512a\u7684\u6f5b\u6642 \u2014 \u885b\u661f\u7cfb\u7d71\u5be6\u969b\u70ba\u6211\u5011\u505a\u4e86\u4ec0\u9ebc\uff1f
\u6839\u64da\u6b64\u6b21\u4e8b\u4ef6\uff0c\u5728\u9760\u8fd1\u6838\u5fc3\u8cc7\u6599\u4e2d\u5fc3\u7684\u5730\u5340\uff0c\u885b\u661f\u7cfb\u7d71\u964d\u4f4e\u4e86 xx \u6beb\u79d2\u7684\u6f5b\u6642\uff1b \u5728\u8ddd\u96e2\u8f03\u9060\u7684\u5730\u5340\uff0c\u5247\u964d\u4f4e\u4e86 xx \u6beb\u79d2\u7684\u6f5b\u6642\u3002
\u96b1\u85cf\u7684\u5716\u7247
\u6838\u5fc3\u548c\u908a\u7de3\u627f\u8f09\u7684\u91cf
\u4e0b\u5716\u4e2d\u5f88\u597d\u7684\u5c55\u793a\u4e86\u91cd\u5efa\u7684\u904e\u7a0b\u3002 \u908a\u7de3\u91cd\u65b0\u6062\u5fa9\u5230\u627f\u8f09 50% \u7684\u91cf\uff0c\u82b1\u4e86 36 \u500b\u5c0f\u6642\uff1b\u56de\u5230\u6b63\u5e38\u6c34\u4f4d\u53c8\u518d\u984d\u5916\u82b1\u4e86\u7d04 12 \u500b\u5c0f\u6642\u3002
\u6d41\u91cf\u8f49\u79fb\u5230\u6838\u5fc3\u6642\u7684\u5c01\u5305\u72c0\u6cc1
\u5716\u7247\u4e2d\uff0c\u6839\u64da\u4e0d\u540c\u5730\u5340\u986f\u793a\u6389\u5c01\u5305\u7684\u7d2f\u9032\u6bd4\u4f8b\u3002
\u7576\u4e8b\u4ef6\u767c\u751f\u5f8c\uff0c\u9664\u4e86\u4e00\u4e9b\u77ed\u66ab\u7684\u9ad8\u5cf0\uff0c\u6574\u9ad4\u4f86\u8aaa\u6389\u5305\u7684\u9ad8\u5cf0\u843d\u5728\u7576\u908a\u7de3\u904b\u7b97\u5b8c\u5168\u5931\u80fd\u7684\u6642\u5019\u3002
\u96b1\u85cf\u7684\u5716\u7247
\u4eba\u5de5\u548c\u81ea\u52d5\u5316\u5fa9\u539f\u6bd4\u4f8b
\u96b1\u85cf\u7684\u5716\u7247\uff0c\u8aaa\u660e\u4eba\u5de5\u548c\u81ea\u52d5\u5316\u5fa9\u539f\u7684\u6bd4\u4f8b
"},{"location":"feedback/site-reliability-workbook/postmortem-culture/#\u70ba\u4ec0\u9ebc\u9019\u4efd\u6587\u4ef6\u5beb\u5f97\u597d","title":"\u70ba\u4ec0\u9ebc\u9019\u4efd\u6587\u4ef6\u5beb\u5f97\u597d","text":"\u4e00\u4efd\u597d\u7684\u4e8b\u5f8c\u6790\u8aa4\u6587\u4ef6\u8981\u80fd\u5feb\u901f\u3001\u7cbe\u6e96\u3001\u548c\u5584\u7684\u3002
"},{"location":"feedback/site-reliability-workbook/postmortem-culture/#\u6e05\u6670\u7684\u6bb5\u843d","title":"\u6e05\u6670\u7684\u6bb5\u843d","text":"\u5404\u500b\u6bb5\u843d\u7684\u5167\u5bb9\u5206\u6bb5\u6e05\u695a\u800c\u5bcc\u542b\u7d30\u7bc0\uff0c\u4f8b\u5982\uff1a
\u6587\u4ef6\u5c08\u6ce8\u5728\u7cfb\u7d71\u8a2d\u8a08\u7684\u4e0d\u5b8c\u5584\uff0c\u800c\u975e\u4eba\u70ba\u64cd\u4f5c\u7684\u5931\u8aa4\uff1a
\u4e26\u975e\u5c08\u6ce8\u5728\u7279\u5b9a\u5718\u968a\u7684\u6539\u5584\uff0c\u800c\u662f\u900f\u904e\u591a\u7684\u670d\u52d9\u7684\u89d2\u5ea6\u4f86\u601d\u8003\uff1a
\u6587\u4ef6\u64b0\u5beb\u7684\u8d8a\u65e9\uff0c\u8d8a\u7cbe\u6e96\uff0c\u9019\u662f\u56e0\u70ba\u4eba\u5011\u7684\u8a18\u61b6\u66f4\u9bae\u6d3b\u3002 \u9664\u6b64\u4e4b\u5916\uff0c\u7576\u4e8b\u4ef6\u767c\u751f\u5f8c\uff0c\u6240\u6709\u53d7\u5f71\u97ff\u7684\u5de5\u7a0b\u3001\u4e3b\u7ba1\u3001\u6295\u8cc7\u8005\uff0c \u90fd\u6703\u60f3\u8981\u78ba\u4fdd\u4e8b\u4ef6\u771f\u7684\u88ab\u89e3\u6c7a\u4e86\uff0c\u5426\u5247\u96a8\u8457\u6642\u9593\u63a8\u9032\uff0c\u4ed6\u5011\u6703\u5c0d\u4f60\u7684\u7522\u54c1\u6709\u4e00\u4e9b\u5404\u81ea\u7684\u60f3\u50cf\u548c\u4e0d\u4fe1\u4efb\u3002
\u9019\u7bc7\u4e8b\u5f8c\u6790\u8aa4\u6587\u4ef6\u5728\u4e8b\u4ef6\u767c\u751f\u5f8c\u7684\u4e0d\u5230\u4e00\u500b\u79ae\u62dc\uff0c\u5c31\u5b8c\u6210\u4e86\u3002
"},{"location":"feedback/site-reliability-workbook/postmortem-culture/#\u7cbe\u6e96\u7684\u63cf\u8ff0","title":"\u7cbe\u6e96\u7684\u63cf\u8ff0","text":"\u9019\u662f\u4e00\u500b\u5927\u578b\u4e8b\u4ef6\uff0c\u7406\u8ad6\u4e0a\u6703\u6709\u5f88\u591a\u7684\u8cc7\u6599\uff1a\u539f\u59cb\u8cc7\u6599\u3001\u7cfb\u7d71\u65e5\u8a8c\u8a18\u9304\u3001\u4eba\u54e1\u901a\u8a0a\u7d00\u9304\u7b49\u7b49\u3002 \u9019\u7bc7\u6587\u4ef6\u900f\u904e\u7e3d\u7d50\u3001\u5716\u7247\u3001\u548c\u9023\u7d50\u4f86\u8b93 \u5197\u8d05\u6027 \u548c \u53ef\u8b80\u6027 \u4e4b\u9593\u9054\u5230\u5e73\u8861\u3002
"},{"location":"feedback/site-reliability-workbook/postmortem-culture/#\u5be6\u969b\u5c0e\u5165\u7684\u6ce8\u610f\u4e8b\u9805","title":"\u5be6\u969b\u5c0e\u5165\u7684\u6ce8\u610f\u4e8b\u9805","text":"\u7406\u60f3\u4e0a\uff0c\u9ad8\u968e\u9818\u5c0e\u6703\u4fc3\u9032\u4e8b\u5f8c\u6790\u8aa4\u7684\u767c\u5c55\uff0c\u9019\u88e1\u5217\u51fa\u4e00\u4e9b\u6ce8\u610f\u4e8b\u9805\uff1a
\u4f8b\u5982\uff1a
\u4f60\u662f\u500b\u4e3b\u7ba1\uff0c\u70ba\u4ec0\u9ebc\u6c92\u6709\u78ba\u4fdd\u5927\u5bb6\u90fd\u5b8c\u6210\u5fa9\u539f\u8a2d\u5099\u7684\u64cd\u4f5c\u8a13\u7df4\uff1f
\u53ef\u4ee5\u8abf\u6574\u6210
\u4e5f\u8a31\u53ef\u4ee5\u5728\u9032\u5165\u5f85\u547d\u5c0f\u7d44\u524d\uff0c\u5148\u8981\u6c42\u9019\u4e9b\u4eba\u54e1\u5b8c\u6210\u9019\u9805\u8a13\u7df4\uff0c \u6216\u8005\u5728\u72c0\u6cc1\u6301\u7e8c\u6642\uff0c\u9f13\u52f5\u5f85\u547d\u5c0f\u7d44\u628a\u4e8b\u614b\u5347\u7d1a\uff0c\u8b93\u66f4\u591a\u4eba\u9032\u4f86\u95dc\u6ce8\u9019\u4ef6\u4e8b\uff0c \u7562\u7adf\u6211\u5011\u95dc\u5fc3\u7684\u4e0d\u662f\u4e8b\u4ef6\u7684\u7b49\u7d1a\u6216\u591a\u5be1\uff0c\u800c\u662f\u4f7f\u7528\u8005\u7121\u6cd5\u64cd\u4f5c\u7cfb\u7d71\u7684\u611f\u53d7\u3002
"},{"location":"feedback/site-reliability-workbook/postmortem-culture/#\u734e\u52f5\u4e8b\u5f8c\u6790\u8aa4\u7684\u7522\u51fa","title":"\u734e\u52f5\u4e8b\u5f8c\u6790\u8aa4\u7684\u7522\u51fa","text":"\u63a8\u529b\u3001\u62c9\u529b\uff0c\u597d\u7684\u734e\u52f5\u6703\u8b93\u9019\u6587\u5316\u66f4\u5bb9\u6613\u63a8\u5ee3\uff0c\u4ee5\u4e0b\u662f\u53ef\u4ee5\u734e\u52f5\u7684\u884c\u70ba\uff1a
\u53ef\u4ee5\u9032\u884c\u7684\u734e\u52f5\u53ef\u80fd\u6709\uff1a
\u9019\u4e5f\u662f\u4e00\u7a2e\u9593\u63a5\u7684\u734e\u52f5\uff0c\u6709\u4e00\u4e9b\u505a\u6cd5\u53ef\u4ee5\u53c3\u8003\uff1a
\u7576\u4f01\u696d\u5728\u5be6\u65bd\u9019\u500b\u6587\u5316\u6642\uff0c\u5f88\u53ef\u80fd\u6703\u5931\u6557\u6216\u8b8a\u8cea\uff0c\u800c\u9019\u500b\u539f\u56e0\u6709\u6642\u662f\u5f88\u5fae\u5999\u7684\uff0c\u53ef\u80fd\u7684\u5fb5\u72c0\u6709\uff1a
\u96d6\u7136\u4e0d\u53ef\u80fd\u5b8c\u5168\u81ea\u52d5\u5316\uff0c\u4f46\u662f\u9019\u4e9b\u5de5\u5177\u80fd\u8b93\u6587\u4ef6\u52a0\u901f\u4e14\u7cbe\u6e96\u3002
\u4ee5\u4e0b\u5217\u51fa\u4e00\u4e9b\u6709\u7528\u5de5\u5177\uff1a
\u6b77\u7a0b\u5927\u81f4\u662f\uff1a \u5f9e\u5c0f\u7684\u5c08\u6848\u958b\u59cb\uff1b \u900f\u904e\u5de5\u5177\u548c\u6a21\u677f\u4f86\u5beb\u597d\u5831\u544a\uff1b \u78ba\u5be6\u4f9d\u64da\u5831\u544a\u4f86\u505a\u5be6\u8e10\u548c\u4fee\u6b63\uff1b \u6700\u5f8c\u9f13\u52f5\u4e14\u516c\u958b\u628a\u9019\u4e9b\u5831\u544a\u5206\u4eab\u7d66\u5927\u5bb6\u3002
\u76f8\u95dc\u5e73\u53f0\u7684\u5efa\u7f6e\u52e2\u5728\u5fc5\u884c\uff0c\u4f46\u662f\u9700\u8981\u4e00\u4e9b\u597d\u7684\u7bc4\u4f8b\u3001\u6a21\u677f\u3001\u81ea\u52d5\u5316\u5de5\u5177\u4f8b\u5982 GPT \u4f86\u52a0\u901f\u64b0\u5beb\u548c\u7cbe\u6e96\u5b9a\u4f4d\uff0c \u66f4\u91cd\u8981\u7684\u662f\u5ef6\u4f38\u512a\u5316\u9805\u76ee\u3002
"},{"location":"feedback/site-reliability-workbook/simplicity/","title":"\u7c21\u5316\u7cfb\u7d71","text":"\u7cfb\u7d71\u96a8\u8457\u6642\u9593\u767c\u5c55\uff0c\u5c07\u6703\u8b8a\u5f97\u8d8a\u4f86\u8d8a\u8907\u96dc\u3002\u628a\u7cfb\u7d71\u7c21\u5316\u5c07\u6703\u8b8a\u6210\u4e00\u500b\u9577\u671f\u4e14\u6301\u7e8c\u7684\u884c\u52d5\u3002
\u7c21\u5316\u904e\u7a0b\u57fa\u672c\u4e0a\u5305\u542b\uff1a\u8fa8\u8b58\u3001\u9810\u9632\u548c\u8655\u7406\u3002 \u800c\u53c8\u5206\u70ba\u597d\u5e7e\u500b\u9762\u5411\uff1a\u8edf\u9ad4\u8a2d\u8a08\u3001\u7cfb\u7d71\u67b6\u69cb\u3001\u8a2d\u5b9a\u3001\u958b\u767c\u6d41\u7a0b\u7b49\u7b49\u5404\u7a2e\u5730\u65b9\u3002
\u65e9\u671f\u7684\u7c21\u5316\u6703\u5927\u5927\u964d\u4f4e\u6210\u672c\uff0c\u5617\u8a66\u5728\u6bcf\u6b21\u5b8c\u6210\u90e8\u5206\u8a2d\u8a08\u6642\uff0c\u591a\u82b1\u4e00\u9ede\u5fc3\u601d\u53bb\u601d\u8003\u53ef\u80fd\u7684\u7c21\u5316\u65b9\u5f0f\u3002 \u66f4\u6709\u751a\u8005\uff0c\u628a\u9577\u671f\u7684\u7c21\u5316\u7d93\u9a57\u6dec\u7149\u6210\u4e00\u500b\u6a19\u6e96\u6d41\u7a0b\u4e26\u5728\u6a19\u6e96\u4e2d\u8ce6\u4e88\u4e00\u5b9a\u7a0b\u5ea6\u7684\u5f48\u6027\u3002
"},{"location":"feedback/site-reliability-workbook/toil/","title":"\u52de\u52d5\u529b","text":"\u901a\u5e38\u516c\u53f8\u9577\u5230\u4e00\u5b9a\u7a0b\u5ea6\uff0c\u5f88\u53ef\u80fd\u6703\u82b1\u5f88\u591a\u6642\u9593\u5728\u52de\u52d5\u529b\u7684\u4ed8\u51fa\uff0c\u4f8b\u5982\u4eba\u5de5\u624b\u52d5\u7684\u6d41\u7a0b\u7b49\u7b49\u3002
\u5728\u6e1b\u5c11\u9019\u4e9b\u52de\u52d5\u529b\u7684\u904e\u7a0b\u662f\u500b\u6709\u8da3\u800c\u8271\u96e3\u7684\u554f\u984c\uff0c\u5927\u81f4\u5206\u6210\u4e09\u6bb5\uff1a
\u6bcf\u9694\u4e00\u6bb5\u6642\u9593\uff0c\u5c31\u6703\u60f3\u628a\u9019\u671f\u9593\u7684\u6536\u7a6b\u7e3d\u7d50\uff0c\u91cb\u653e\u8a18\u61b6\u9ad4\u5230\u786c\u789f\u88e1\uff0c\u8b93\u8a18\u61b6\u9ad4\u53ef\u4ee5\u64c1\u6709\u66f4\u591a\u7a7a\u9593\u3002
"},{"location":"review/2022-ai/","title":"2022 AI \u56de\u9867","text":"\u4eca\u5929\uff0812/17\uff09\u56de\u9867 2022 \u5e74\uff0c\u767c\u73fe\u6709\u5f88\u591a AI \u7684\u7a81\u7834\uff0c\u8b93\u6211\u5099\u53d7\u611f\u52d5\uff01 \u4ee5\u4e0b\u5c31\u4f86\u76e4\u9ede\u4e00\u4e0b\u5e7e\u500b\u6211\u89ba\u5f97\u5f88\u53b2\u5bb3\u7684\u7522\u54c1\u3002
Yahoo!
\u4eca\u5e74\u6700\u5f8c\u4e00\u500b\u6708\uff0cOpenAI \u63a8\u51fa\u4e86 ChatGPT\uff0c\u9019\u6b21\u63a8\u51fa\u5b8c\u5168\u985b\u8986\u4e86\u6211\u5c0d AI \u7684\u60f3\u50cf\u3002 \u5176\u5e36\u7d66\u6211\u7684\u9707\u64bc\uff0c\u66f4\u751a\u7576\u521d AlphaGo \u4e0b\u570d\u68cb\uff0c\u800c\u4e14\u6b63\u662f\u56e0\u70ba\u5b83\uff0c\u6211\u624d\u6709\u64b0\u5beb\u9019\u7bc7\u6587\u7ae0\u7684\u52d5\u529b\u3002
\u5176\u76ee\u7684\u4e3b\u8981\u662f\u7406\u89e3\u524d\u5f8c\u6587\u7684\u8a9e\u610f\uff0c\u7d66\u51fa\u9069\u7576\u7684\u56de\u61c9\uff0c\u800c\u4ed6\u505a\u5230\u4e86\u3002
\u6211\u5011\u628a\u5404\u81ea\u624b\u4e0a\u6240\u6709\u7684 NLP\uff08\u81ea\u7136\u8a9e\u8a00\u8655\u7406\uff09\u4efb\u52d9\u90fd\u6e2c\u4e86\u4e00\u904d\uff0c \u5305\u62ec\u81ea\u7136\u8a9e\u8a00\u7406\u89e3\u3001\u5c0d\u8a71\u72c0\u614b\u8ffd\u8e64\u3001\u56de\u8986\u751f\u6210\u3001\u5c0d\u8a71\u6458\u8981\u3001\u8868\u683c\u554f\u7b54\u3001\u6587\u6a94\u554f\u7b54\u3001\u4fe1\u606f\u62bd\u53d6\u3001\u60c5\u611f\u5206\u6790\u3001\u8a69\u8a5e\u6b4c\u66f2\u5275\u9020\u3001\u7ffb\u8b6f...\u7b49\u5e7e\u5341\u500b\u4efb\u52d9\uff0c \u6548\u679c\u90fd\u975e\u5e38\u7684\u597d\u3002
...
\u4e0d\u9700\u8981 in-context learning\uff0c\u958b\u7bb1\u6e96\u78ba\u7387\u9054\u5230 90%+\uff0c\u5e7e\u4e4e\u9054\u5230\u53ef\u4ee5\u5c0d\u5916\u7522\u54c1\u5316\u8ca9\u552e\u3002
\u4f86\u81ea\u6797\u5ef7\u6069\uff08\u81ea\u7136\u8a9e\u8a00\u7814\u7a76\u8005\uff09\u7684\u81c9\u66f8
ChatGPT \u80fd\u505a\u5230\u7684\u4e8b\u60c5\u592a\u591a\u4e86\uff0c\u4ee5\u4e0b\u5e7e\u500b\u6709\u8da3\u6848\u4f8b\uff1a
\u7576\u7136\uff0c\u7db2\u53cb\u5275\u610f\uff08\u8ddf\u6642\u9593\uff09\u7121\u9650\uff0c\u671f\u5f85\u672a\u4f86\u80fd\u8b93\u4ed6\u6709\u66f4\u53b2\u5bb3\u7684\u61c9\u7528\uff01 \u53e6\u5916\u5982\u679c\u4f60\u5c0d\u5167\u90e8\u904b\u4f5c\u6709\u8208\u8da3\uff0c\u53ef\u4ee5\u53c3\u8003\u674e\u5b8f\u6bc5\u8001\u5e2b\u7684\u5f71\u7247
"},{"location":"review/2022-ai/#stable-diffusion","title":"Stable Diffusion","text":"metaphysic
AI \u7e6a\u5716\u7121\u7591\u5728\u4eca\u5e74\u5927\u653e\u7570\u5f69\uff0c\u4e0d\u53ea\u662f Stable Diffusion\uff0c \u9084\u6709 OpenAI \u7684 DALL-E\u3002\u96a8\u8457\u767c\u5c55\uff0c\u7db2\u8def\u4e5f\u51fa\u73fe\u8d8a\u4f86\u8d8a\u591a\u5947\u8019\u61c9\u7528\uff0c\u4f8b\u5982\u5716\u7247\u52d5\u6f2b\u5316\u7b49\u7b49\u3002
\u4f46\u662f\u5176\u5167\u5728\u7684\u6f14\u7b97\u6cd5\u64f4\u6563\u6a21\u5f0f\uff08Diffusion Model\uff09\u4e5f\u4e0d\u53ea\u662f\u5728\u7e6a\u5716\u6709\u6240\u61c9\u7528\u3002 \u50cf\u662f\u6709\u4eba\u628a\u5b83\u5ef6\u4f38\u5230\u86cb\u767d\u8cea\u9810\u6e2c\uff0c\u9054\u6210\u8f15\u91cf\u800c\u53c8\u6709\u6e96\u78ba\u5ea6\u7684\u6a21\u578b\u3002
"},{"location":"review/2022-ai/#alphafold-2","title":"AlphaFold 2","text":"\u9019\u500b\u5176\u5be6\u662f 2020 \u63a8\u51fa\u7684 AI\uff0c\u4f46\u96a8\u8457\u767c\u5c55\uff0c\u4eca\u5e74\u4e0d\u53ea\u662f\u64f4\u5145\u4e86\u8cc7\u6599\u5eab\uff0c\u4e5f\u770b\u5230\u5176\u5be6\u969b\u7684\u61c9\u7528\u4e86\u3002
\u86cb\u767d\u8cea\u7684\u7d44\u6210\u4e26\u4e0d\u8907\u96dc\uff0c\u7531 21 \u7a2e\u5df2\u77e5\u6c28\u57fa\u9178\u69cb\u6210\uff0c\u4f46\u771f\u6b63\u56f0\u96e3\u7684\u662f\u5176\u5efa\u69cb\u65b9\u5f0f\u7684\u6392\u5217\u548c\u7d44\u5408\u53ef\u4ee5\u975e\u5e38\u8907\u96dc\u3002 \u7136\u800c DeepMind \u7684 AlphaFold 2 \u537b\u505a\u5230\u4e86\u9ad8\u65bc 90% \u7684\u9810\u6e2c\u6e96\u78ba\u5ea6\uff08\u7b2c\u4e8c\u540d\u4e0d\u5230 60%\uff09\u3002
\u79d1\u6280\u65b0\u5831
\u9019\u88e1\u8981\u6ce8\u610f\u7684\u662f\uff0cAlphaFold \u505a\u7684\u4e8b\u60c5\u662f \u9810\u6e2c\u3002 \u63db\u53e5\u8a71\u8aaa\uff0c\u5982\u679c\u6211\u5011\u8981\u9a57\u8b49\u9019\u500b\u9810\u6e2c\uff0c\u65b9\u5f0f\u4ecd\u7136\u662f\u4f7f\u7528\u50b3\u7d71\u7684 X \u5c04\u7dda\u3001\u6838\u78c1\u5171\u632f\u6216\u51b7\u51cd\u96fb\u93e1\u7b49\u3002 \u4f46\u662f\u9019\u500b\u904e\u7a0b\u662f\u66e0\u6642\u5ee2\u65e5\u7684\uff0c\u901a\u5e38\u9700\u8981\u6578\u6708\u5230\u6578\u5e74\u7684\u6642\u9593\u3002
\u5728 2022 \u5e74\uff0cAlphaFold \u9810\u6e2c\u51fa\u4e86\u53ef\u80fd\u662f\u9020\u6210\u6f38\u51cd\u4eba\u7684\u86cb\u767d\u8cea \u6838\u5b54\u8907\u5408\u9ad4 \u7684\u6a23\u5b50\uff0c\u800c\u9019\u500b\u554f\u984c\uff0c\u79d1\u5b78\u5bb6\u5df2\u7d93\u5617\u8a66\u4e86\u9577\u9054\u6578\u5341\u5e74\u3002
\u79d1\u6280\u65b0\u5831
\u6709\u4e86\u86cb\u767d\u8cea\u7684\u69cb\u9020\uff0c\u6211\u5011\u5c31\u53ef\u4ee5\u4f9d\u6b64\u767c\u5c55\u76f8\u5c0d\u61c9\u7684\u85e5\u7269\u548c\u6cbb\u7642\u65b9\u6cd5\uff0c\u6240\u4ee5\u86cb\u767d\u8cea\u69cb\u9020\u9810\u6e2c\u624d\u6703\u9019\u9ebc\u91cd\u8981\u3002
"},{"location":"review/2022-ai/#fusion","title":"Fusion","text":"\u6838\u878d\u5408\u9700\u8981\u6975\u5ea6\u9ad8\u6eab\u548c\u9ad8\u58d3\u624d\u6709\u53ef\u89c0\u7684\u6a5f\u7387\u767c\u751f\u3002 \u8981\u6210\u5c31\u9019\u6a23\u7684\u74b0\u5883\u4e0d\u96e3\uff0c\u4f46\u554f\u984c\u662f\uff0c\u8981\u600e\u9ebc\u7dad\u6301\u9019\u500b\u6eab\u5ea6\uff1f
\u6703\u9020\u6210\u7cfb\u7d71\u6eab\u5ea6\u964d\u4f4e\u662f\u56e0\u70ba\u5167\u90e8\u539f\u5b50\u548c\u5916\u90e8\u539f\u5b50\u9032\u884c\u78b0\u649e\u628a\u80fd\u91cf\uff08\u52d5\u80fd\uff09\u8f49\u79fb\u5230\u5916\u90e8\u7cfb\u7d71\u3002 \u70ba\u4e86\u6e1b\u5c11\u9019\u4ef6\u4e8b\u60c5\u7684\u767c\u751f\uff0c\u6211\u5011\u9700\u8981\u8b93\u539f\u5b50\u7167\u8457\u5713\u5708\uff08tokmok\uff09\u8ff4\u8f49\uff08\u7576\u7136\u9084\u6709\u4e00\u4e9b\u7e31\u8ef8\u7684\u529b\u4f86\u964d\u4f4e\u78c1\u529b\u7684\u4ea4\u932f\u5f71\u97ff\uff0c \u8a73\u898b\uff09\u3002
DeepMind \u767c\u5c55\u4e86\u4e00\u7a2e AI \u6f14\u7b97\u6cd5\uff0c\u7528\u96f7\u5c04\u4f86\u5354\u52a9\u7cfb\u7d71\u7dad\u6301\u80fd\u91cf\uff0c\u63db\u53e5\u8a71\u8aaa\uff0c\u7dad\u6301\u71b1\u80fd\u3002
\u5728 2022/12\uff0c\u7f8e\u570b\u570b\u5bb6\u9ede\u706b\u8a2d\u65bd\u767c\u8868\u5df2\u7d93\u6210\u529f\u9054\u6210\u8f38\u51fa\u80fd\u91cf\u5927\u65bc\u8f38\u5165\u80fd\u91cf\u3002 \u96d6\u8aaa\u5f88\u591a\u5a92\u9ad4\u5ba3\u7a31\u6838\u878d\u5408\u7684\u6642\u4ee3\u4f86\u81e8\uff0c\u4f46\u5176\u5be6\u570b\u5bb6\u9ede\u706b\u8a2d\u65bd\u4e26\u4e0d\u662f\u6838\u878d\u5408\u767c\u96fb\u5ee0\u3002 \u76f8\u8f03\u65bc\u6838\u878d\u5408\u767c\u96fb\u5834\uff0c\u4ed6\u4e0d\u6703\u8655\u7406\u6c1a\u7684\u8f3b\u5c04\u548c\u9038\u51fa\uff08\u6838\u878d\u5408\u662f\u9700\u8981\u6c18\u548c\u6c1a\u548c\u4e00\u4e9b\u91d1\u5c6c\u624d\u80fd\u6709\u6548\u9054\u6210\uff09\u3002
2024 \u76f8\u95dc\u8ad6\u6587\u63a8\u51fa
\u5728 2024 \u5e74 2 \u6708\u6642\uff0c \u76f8\u95dc\u55ae\u4f4d\u63a8\u51fa\u4e86\u53d7\u4e94\u4f4d\u540c\u5115\u5be9\u8996\u7684\u8ad6\u6587\uff0c \u5176\u4e2d\u8aaa\u660e\u4e86\u5982\u4f55\u9054\u6210\u300c\u9ede\u706b\u300d\u3002
\u9019\u548c\u6211\u4e0a\u9762\u8b1b\u5230\u7684\u6258\u99ac\u514b\uff08tokmok\uff09\u5713\u74b0\u6c92\u6709\u95dc\u4fc2\uff0c\u5b83\u662f\u8b93\u96f7\u5c04\u6253\u9032\u947d\u77f3\u5916\u6bbc\u7684\u5c0f\u81a0\u56ca\uff0c \u4e26\u7d00\u9304\u5167\u7206\u7684\u80fd\u91cf\uff0c\u9054\u6210\u9ede\u706b\u3002
Here\u2019s how scientists reached nuclear fusion \u2018ignition\u2019 for the first time
\u9019\u7a2e\u65b9\u5f0f\u6709\u500b\u6700\u5927\u7684\u7f3a\u9ede\uff1a\u8981\u600e\u9ebc\u5229\u7528\u7372\u5f97\u7684\u80fd\u91cf\uff1f\u56e0\u70ba\u7206\u70b8\u7684\u80fd\u529b\u662f\u5f88\u96e3\u88ab\u5229\u7528\u7684\u3002 \u4f46\u662f\u7121\u8ad6\u5982\u4f55\uff0c\u300c\u9ede\u706b\u300d\u7684\u6210\u5c31\u4ecd\u7136\u9f13\u821e\u4e86\u8a31\u591a\u6295\u8cc7\u8005\u548c\u7814\u7a76\u54e1\u3002
"},{"location":"review/2022-ai/#cicero","title":"CICERO","text":"Meta \u958b\u767c\u7684 CICERO \u5728\u4e00\u6b3e\u9b25\u667a\u9b25\u5fc3\u6a5f\u7684\u904a\u6232 Diplomacy \u4e2d\u9032\u5165\u524d 10% \u7684\u6392\u540d\u4e2d\u3002
Source from CICERO blog post
\u4e4b\u524d\u770b\u5230\u9019\u500b\u4e3b\u984c\u7684\u6642\u5019\u6709\u770b\u5230\u4e00\u6bb5\u7c21\u55ae\u7684\u5f71\u7247\u8aaa\u660e\uff0c\u73fe\u5728\u627e\u4e0d\u5230\u4e86\uff01 \u4f46\u662f... \u6211\u61f7\u7591 ChatGPT \u73a9\u5f97\u6703\u6bd4\u4ed6\u597d\u3002
\u4e4b\u6240\u4ee5\u653e\u9032\u9019\u500b AI\uff0c\u4e5f\u7b97\u662f\u6211\u500b\u4eba\u5c0d\u65bc\u672a\u4f86 AI \u80fd\u73a9\u661f\u6d77\u6216\u4e16\u7d00\u5e1d\u570b\u7684\u4e00\u500b\u5c0f\u5c0f\u61a7\u61ac\u5427\uff01
"},{"location":"review/2022-ai/#ithaca","title":"Ithaca","text":"DeepMind \u5728\u4e09\u6708\u958b\u767c\u4e86 Ithaca\uff0c\u5176\u7528\u9014\u5728\u5224\u8b80\u53e4\u5e0c\u81d8\u6587\u672c\u7684\u5167\u5bb9\u3002
\u548c\u4eba\u985e\u6b77\u53f2\u5b78\u5bb6\u7684 25% \u9810\u6e2c\u7387\uff0cIthaca \u9054\u5230\u4e86 62% \u7684\u6e96\u78ba\u7387\u3002 \u4f46\u662f Ithaca \u4e26\u4e0d\u662f\u8981\u53d6\u4ee3\u4eba\u985e\uff0c\u76f8\u53cd\u7684\uff0c\u4ed6\u662f\u7528\u4f86\u5354\u52a9\u4eba\u985e\u3002 \u5728\u4eba\u985e\u548c Ithaca \u4e00\u8d77\u5224\u8b80\u7684\u60c5\u6cc1\u4e0b\uff0c\u4ed6\u9054\u5230\u4e86\u9ad8\u9054 72% \u7684\u6e96\u78ba\u7387\u3002
"},{"location":"review/2022-ai/#\u7d50\u8a9e","title":"\u7d50\u8a9e","text":"\u5728\u6700\u5f8c\u4ecb\u7d39\u7684 Ithaca\uff0c\u6211\u5011\u4e5f\u53ef\u4ee5\u770b\u5230\u96d6\u7136\u6709\u4e9b\u4eba\u6703\u64d4\u5fc3\u6a5f\u5668\u5c07\u53d6\u4ee3\u6211\u5011\u7684\u5de5\u4f5c\uff0c \u4f46\u5176\u5be6\u6a5f\u5668\u5b78\u7fd2\u7684\u771f\u6b63\u50f9\u503c\u662f\u7528\u4f86\u5354\u52a9\u4eba\u985e\uff0c\u8b93\u6211\u5011\u80fd\u66f4\u5feb\u901f\u7684\u5b8c\u6210\u5de5\u4f5c\u3002
\u5c31\u50cf\u4eca\u5e74\u82f1\u570b\u958b\u59cb\u63a8\u884c\u7684\u4e00\u9031\u5de5\u4f5c\u56db\u5929\u4e00\u6a23\uff0c \u5982\u679c AI \u80fd\u5e6b\u52a9\u5927\u5bb6\uff08\u5df2\u7d93\u78ba\u78ba\u5be6\u5be6\u6709\u5e6b\u52a9\u4e86\ud83d\ude02\uff09\u5728\u66f4\u77ed\u7684\u6642\u9593\u5167\u9054\u5230\u76f8\u540c\u7522\u80fd\uff0c \u9019\u6642\u6211\u5011\u5c0d\u65bc AI\uff0c\u61c9\u8a72\u62b1\u6301\u7684\u5fc3\u614b\u6703\u662f\uff1a\u6211\u5c07\u5982\u4f55\uff08\u7406\u89e3\u548c\uff09\u61c9\u7528\u5b83\uff1f
"},{"location":"review/2023/","title":"2023 \u56de\u9867","text":"\u5e74\u672b\u4e86\uff0c\u60f3\u5beb\u4e00\u4e9b\u4eca\u5e74\u7684\u56de\u9867\uff0c\u4e3b\u984c\u5927\u81f4\u662f
The best science images of 2023, Nature
\u4f86\u6e90
\u53c3\u7167\u7684\u5a92\u9ad4\u4e3b\u8981\u6709\u81ea\u7136\u96dc\u8a8c\u3001 ScienceNews\u3001 \u660e\u65e5\u79d1\u5b78\u3001 \u516c\u8996 \u7b49\u7b49\u3002
"},{"location":"review/2023/#\u74b0\u5883","title":"\u74b0\u5883","text":"\u4eca\u5e74\u6700\u91cd\u8981\u7684\u4e8b\u60c5\uff0c\u6211\u8a8d\u70ba\u662f\u74b0\u5883\u3002 2023 \u662f\u6709\u7d00\u9304\u4ee5\u4f86\uff0c\u6700\u71b1\u7684\u4e00\u5e74\u3002
Climate heat hottest year record, ScienceNews
\u4eca\u5e74\u5e73\u5747\u6c23\u6eab\u6bd4 1850 \u5e74\u5230 1900 \u5e74\u7684\u5e73\u5747\u6c23\u6eab\u9ad8\u51fa \\({1.3}^\\circ C\\)\uff0c \u9664\u4e86\u6210\u70ba\u6b77\u53f2\u65b0\u9ad8\uff0c \u66f4\u662f\u5373\u5c07\u9054\u5230\u4e0d\u53ef\u9006\u7684 \\({1.5}^\\circ C\\)\uff0c \u5176\u4e2d\u5341\u4e00\u6708\u751a\u81f3\u7a81\u7834 \\({2}^\\circ C\\)\uff0c \u4e14\u9023\u7e8c\u4e00\u767e\u591a\u5929\u8d85\u904e \\({1.5}^\\circ C\\)\u3002
Our World in Data
\u9ad8\u6eab\u5c0e\u81f4\u4e86\u5927\u91cf\u7684\u706b\u707d\uff0c\u9032\u800c\u5c0e\u81f4\u672c\u5e74\u6700\u5dee\u7684\u7a7a\u6c23\u54c1\u8cea\uff0c \u4e0d\u904e\u7814\u7a76\u767c\u73fe\uff0c\u6c23\u6eb6\u81a0\u5176\u5be6\u6709\u52a9\u65bc\u53cd\u5c04\u592a\u967d\u5149\u548c\u52a0\u901f\u6c23\u6eab\u7684\u964d\u4f4e\uff0c \u63db\u53e5\u8a71\u8aaa\uff0c\u96d6\u7136\u706b\u707d\u983b\u7e41\uff0c\u4f46\u662f\u4e26\u6c92\u6709\u56b4\u91cd\u5730\u5f71\u97ff\u5730\u7403\u6696\u5316\uff0c \u53cd\u904e\u4f86\u8aaa\uff0c\u6de8\u5316\u57ce\u5e02\u6703\u56e0\u70ba\u6c23\u6eb6\u81a0\u7684\u6e1b\u5c11\u800c\u52a0\u901f\u6696\u5316\u3002
\u53e6\u5916\u503c\u5f97\u6ce8\u610f\u7684\u662f\uff0c\u5e7e\u5341\u5e74\u4f86\u91ce\u706b\u9020\u6210\u7684\u78b3\u6392\u4e00\u76f4\u5728\u6e1b\u5c11\uff0c \u4e3b\u56e0\u662f\u68ee\u6797\u780d\u4f10\u5c0e\u81f4\u68ee\u6797\u5730\u5340\u7684\u964d\u4f4e\uff0c \u4f46\u76f8\u95dc\u7684\u78b3\u6392\u898f\u7bc4\u9810\u671f\u672a\u4f86\u4ecd\u6703\u88ab\u5efa\u7f6e\u3002
Our World in Data
\u6696\u5316\u5c0e\u81f4\u51b0\u7dda\u9000\u7e2e\uff0c\u6d77\u5e73\u9762\u4e5f\u96a8\u8457\u878d\u51b0\u4e0a\u5347\u3002
Charctic Interactive Sea Ice Graph, NSIDC
\u9ad8\u6eab\u52a0\u901f\u96ea\u87f9\u65b0\u9673\u4ee3\u8b1d\uff0c \u5c0e\u81f4\u5927\u91cf\u96ea\u87f9\u6b7b\u4ea1\uff1b \u73ca\u745a\u7901\u56e0\u71b1\u6b7b\u4ea1\uff1b \u4f4d\u65bc\u5df4\u897f\u7684\u6975\u7aef\u4e7e\u65f1\u5c0e\u81f4\u4e9e\u99ac\u905c\u6cb3\u8c5a\u7684\u6b7b\u4ea1\uff1b \u9996\u6b21\u8b49\u660e\u51fa\u6c23\u5019\u6696\u5316\u6703\u76f4\u63a5\u5f71\u97ff\u5317\u6975\u718a\u7684\u751f\u5b58\uff1b \u868a\u5b50\u5f9e\u71b1\u5e36\u5730\u5340\u6f38\u6f38\u9077\u79fb\u5230\u4e2d\u9ad8\u7def\u5ea6\uff0c\u8b93\u90e8\u5206\u570b\u5bb6\u9762\u81e8\u524d\u6240\u672a\u898b\u7684\u5371\u6a5f\uff1b \u6975\u7aef\u6c23\u5019\u5c0e\u81f4 4310 \u842c\u5b69\u7ae5\u6d41\u96e2\u5931\u6240\uff1b \u4f46\u4eba\u5011\u537b\u66f4\u50be\u5411\u5c45\u4f4f\u65bc\u5728\u6d77\u5e73\u9762\u4e0a\u5347\u6642\u98a8\u96aa\u66f4\u9ad8\u7684\u5730\u5340 \uff08\u4f8b\u5982\uff0c\u6cbf\u5cb8\u5730\u5340\uff09\uff0c\u9019\u63d0\u9ad8\u4e86\u672a\u4f86\u8655\u7406\u707d\u5bb3\u7684\u6210\u672c\u3002
\u81ea\u7136\u96dc\u8a8c\u7684\u6587\u7ae0\u4e2d\u8aaa\u660e\u4e86\uff0c \u4eba\u9ad4\u600e\u9ebc\u8655\u7406\u71b1\u3001\u6703\u5e36\u4f86\u54ea\u4e9b\u5f71\u97ff\uff0c\u6700\u91cd\u8981\u7684\u662f\u8981\u600e\u9ebc\u505a\u597d\u9632\u6cbb\u907f\u514d\u71b1\u50b7\u5bb3\uff1b \u4e5f\u5728\u9019\u7bc7\u6587\u7ae0 \u5b8c\u6574\u7684\u8aaa\u660e\u6c23\u5019\u8b8a\u9077\u7684\u9032\u5c55\uff0c \u5c55\u793a\u4eba\u985e\u9700\u8981\u65bc\u4ec0\u9ebc\u6642\u5019\u964d\u5230\u591a\u5c11\u7a0b\u5ea6\u7684\u4e8c\u6c27\u5316\u78b3\u6392\u653e\u91cf\uff0c \u4ee5\u53ca\u653f\u7b56\u7684\u7d93\u8cbb\u5206\u4f48\u3001\u4f7f\u7528\u80fd\u6e90\u6bd4\u4f8b\u3001\u570b\u5bb6\u9032\u5c55\u7b49\u7b49\u3002
"},{"location":"review/2023/#\u898f\u7bc4","title":"\u898f\u7bc4","text":"COP28 \u5728 2023 \u5e74\u5e95\u5c55\u958b\uff0c\u76f8\u95dc\u898f\u7bc4\u7684\u7c3d\u8a02\u4e5f\u727d\u52d5\u8457\u4e16\u754c\u672a\u4f86\u8d70\u5411\u3002 \u9664\u6b64\u4e4b\u5916\uff0c\u4e5f\u6709\u4e00\u4e9b\u8ad6\u6587\u8a0e\u8ad6\u76f8\u95dc\u5c55\u671b\uff0c\u4f8b\u5982 \u8655\u7406\u5851\u81a0\u7684\u9032\u5ea6\u5be6\u5728\u592a\u7de9\u6162\uff0c \u9810\u671f\u65bc 2024 \u7c3d\u8a02\u76f8\u95dc\u898f\u7bc4\u4f86\u52a0\u901f\u8655\u7406\u3001 \u56e0\u61c9\u7da0\u80fd\u767c\u5c55\u53bb\u91cd\u65b0\u8abf\u6574\u96fb\u7db2\u7684\u8a2d\u8a08
COP28 \u7684\u5167\u5bb9\u4e5f\u8010\u4eba\u5c0b\u5473\uff0c \u9ad8\u5ea6\u958b\u767c\u570b\u5bb6\u9996\u6b21\u9858\u610f\u652f\u4ed8\u91d1\u9322 \u5e6b\u52a9\u56e0\u5176\u78b3\u6392\u800c\u53d7\u5f71\u97ff\u7684\u4f4e\u5ea6\u958b\u767c\u570b\u5bb6\uff0c\u5118\u7ba1\u91d1\u984d\u6709\u9650\u4e14\u300c\u53d7\u5f71\u97ff\u300d\u7684\u5b9a\u7fa9\u4ecd\u7136\u56f0\u96e3\uff1b \u4e5f\u9996\u6b21\u88ab\u63d0\u53ca\u5230\u964d\u4f4e\u98df\u7269\u7684\u958b\u767c\uff0c\u4f8b\u5982\u8089\u98df\u7684\u6e1b\u5c11\uff1b \u4e5f\u9996\u6b21\u8003\u616e\u7a7a\u8abf\u7684\u78b3\u6392\u3002
\u6838\u96fb\u548c\u518d\u751f\u80fd\u6e90\u7684\u4f7f\u7528\uff0c\u88ab\u8981\u6c42\u63d0\u9ad83\u500d\u3002 \u81f3\u65bc\u53f0\u7063\uff0c\u5118\u7ba1\u7da0\u80fd\u7684\u6210\u9577\u901f\u5ea6\u5f88\u5feb\uff0c\u4f46\u5176\u65bc\u7e3d\u767c\u96fb\u91cf\u7684\u4f54\u6bd4\u4ecd\u4f4e\uff0c \u5e0c\u671b 2030 \u53ef\u4ee5\u8b93\u7da0\u80fd\u4f54\u6bd4\u9054\u5230 3 \u6210\u3002
\u5118\u7ba1\u90e8\u5206\u4f5c\u6cd5\u4ecd\u5728\u8349\u64ec\u4e14\u62bd\u8c61\uff0c\u4f46\u4e5f\u53ef\u4ee5\u770b\u5230\u5df2\u7d93\u6709\u5f88\u591a\u6210\u679c\uff0c \u4f8b\u5982\u6fb3\u6d32\u4eca\u5e74\u9054\u5230\u8ca0\u96fb\u50f9\u3001 \u4e2d\u570b\u5efa\u69cb\u5168\u570b\u6700\u5927\u55ae\u9ad4\u5149\u4f0f\u6cbb\u6c99\u7684\u5de5\u7a0b\u3002
2015 \u5e74\u7684\u5df4\u9ece\u5354\u5b9a\u4e5f\u9996\u6b21\u65bc\u4eca\u5e74\u91dd\u5c0d\u5404\u570b\u9032\u5c55\u9032\u884c\u76e4\u9ede\uff0c \u4f46\u76f8\u95dc\u653f\u5e9c\u7684\u653f\u7b56\u537b\u4ecd\u9010\u6b65\u589e\u52a0\u78b3\u6392\u3002
Global Climate Agreements: Successes and Failures, CFR
\u96d6\u7136\u6b63\u8996\u4e86\u5f88\u591a\u554f\u984c\uff0c\u4f46\u662f\u74b0\u4fdd\u4ecd\u662f\u4e00\u689d\u6f2b\u6f2b\u9577\u8def\uff0c\u6700\u5f8c\u5f15\u7528\u4e00\u6bb5\u8a71\u4f86\u7e3d\u7d50\uff1a
\u5316\u77f3\u71c3\u6599\u7684\u6c70\u9664\u4e0d\u662f\u8981\u6216\u4e0d\u8981\uff0c\u800c\u662f\u4f55\u6642\u3002
\u2014 the science is clear \u2014 fossil fuels must go, Natuer
"},{"location":"review/2023/#\u751f\u7269","title":"\u751f\u7269","text":"\u751f\u7269\u4e00\u76f4\u662f\u6211\u611f\u8208\u8da3\u7684\u4e3b\u984c\uff0c \u4e86\u89e3\u7269\u7a2e\u7684\u4fdd\u80b2\u3001\u751f\u7269\u7684\u6a5f\u5236\u3001\u91ab\u7642\u548c\u57fa\u56e0\u7684\u4f5c\u7528\u662f\u4e00\u689d\u5145\u6eff\u8457\u6a02\u8da3\u7684\u9053\u8def\u3002
The Funniest Wild Animals In Photos, Forbes
\u6211\u5011\u5148\u4f86\u95dc\u5fc3\u4e00\u4e0b\u4eca\u5e74\u91dd\u5c0d\u4eba\u985e\u7684\u767c\u73fe\u5427\uff01
The inside of a rat\u2019s eye won the 2023 Nikon Small World photo contest, ScienceNews
\u63a5\u4e0b\u4f86\u662f\u975e\u4eba\u7684\u751f\u7269\u7814\u7a76\u3002
\u7d93\u904e60\u5e74\u7684\u52aa\u529b \u79d1\u5b78\u5bb6\u767c\u73fe\u7f55\u898b\u4e14\u300c\u6703\u4e0b\u86cb\u7684\u54fa\u4e73\u52d5\u7269\u300d\uff0c \u660e\u65e5\u79d1\u5b78
\u4ee5\u4e0b\u662f\u4fdd\u80b2\u548c\u751f\u7269\u6a5f\u5236\u3002
\u91ab\u5b78\u7a81\u7834\u7684\u734e\u9805\u5f88\u591a\uff0c\u56e0\u70ba\u9019\u662f\u5f88\u5be6\u969b\u7684\u79d1\u5b78\u767c\u660e\u6216\u7a81\u7834\u3002
\u524d\u9762\u5217\u8209\u4e00\u4e9b\u6211\u89ba\u5f97\u6709\u610f\u601d\u7684\u7a81\u7834\uff0c\u7576\u7136\u4e5f\u6709\u4e00\u4e9b\u5c08\u696d\u7de8\u8f2f\u7684\u7cbe\u9078\uff0c \u4e0d\u904e\u6211\u8a8d\u70ba\u6700\u6709\u8da3\u7684\u662f\uff1a\u6e1b\u80a5\u85e5\u7269 GPL-1\u3002 ScienceNews \u4e5f\u8aaa\u660e\u70ba\u4ec0\u9ebc\u6e1b\u80a5\u85e5\u5728\u4eca\u5e74\u7684\u76db\u884c\u3002
"},{"location":"review/2023/#\u6578\u4f4d","title":"\u6578\u4f4d","text":"ChatGPT and science: the AI system was a force in 2023 \u2014 for good and bad, Nature
Nature \u9996\u5ea6\u628a\u975e\u4eba\u5217\u9032\u5e74\u5ea6\u5341\u5927\u512a\u79c0\u79d1\u5b78\u5bb6\u4e2d\uff0c \u9019\u500b\u975e\u4eba\u5c31\u662f ChatGPT\u3002 \u4e26\u5217\u51fa\u4e86\u4e94\u500b\u5c0d\u7814\u7a76\u6709\u7528\u7684 AI \u5de5\u5177\uff1a
\u9019\u4e9b\u5de5\u5177\u53ef\u80fd\u4e5f\u9020\u6210\u8ad6\u6587\u7684\u6c3e\u6feb\uff0c \u4f8b\u5982\u4eca\u5e74\u8ad6\u6587\u88ab\u9000\u7a3f\u7684\u6578\u91cf\u8d85\u904e\u4e00\u842c\u4ef6\uff0c\u9054\u5230\u6b77\u5e74\u6700\u9ad8\u5cf0\u3002 \u9019\u4e9b\u72c0\u6cc1\u4e5f\u9032\u4e00\u6b65\u9020\u6210\u4eba\u5011\u5c0d AI \u5de5\u5177\u7684\u96b1\u6182\uff0c \u4f8b\u5982\u4eca\u5e74\u53c3\u8207\u570b\u6703\u8cea\u8a62\u7684 OpenAI \u57f7\u884c\u9577\u3001 \u6b50\u76df\u958b\u59cb\u5efa\u7f6e\u76f8\u95dc\u898f\u7bc4\u548c \u4e00\u4e9b\u8a0e\u8ad6\u4e2d\u7684\u5b89\u5168\u7db2\uff0c \u4e0d\u904e\u4e5f\u4e0d\u662f\u6bcf\u500b\u5c08\u5bb6\u90fd\u540c\u610f\uff0c \u4f8b\u5982 Meta \u7684\u4eba\u5de5\u667a\u6167\u9996\u5e2d\u79d1\u5b78\u5bb6\uff0c \u800c\u5c08\u5bb6\u7684\u770b\u6cd5\u5206\u88c2\u589e\u52a0\u4e86\u653f\u7b56\u5236\u5b9a\u7684\u56f0\u96e3\u3002
\u9019\u53c8\u6703\u5e36\u5230\u4e00\u500b\u4e00\u76f4\u4ee5\u4f86\u90fd\u5b58\u5728\u7684\u8b70\u984c\uff0cAI \u6709\u610f\u8b58\u55ce\uff1f\u4ed6\u6703\u812b\u96e2\u4eba\u985e\u7684\u63a7\u5236\u55ce\uff1f \u9577\u671f\u7814\u7a76\u547d\u984c\u7684\u6559\u6388\u4e5f\u5217\u51fa\u6e05\u55ae\u4f86\u63d0\u4f9b\u6211\u5011\u6307\u6a19\u4f86\u9a57\u8b49\u9019\u4ef6\u4e8b\u3002
ChatGPT \u5e36\u4f86\u7684 AI \u6f6e\u6d41\u6b63\u5f71\u97ff\u8457\u4e16\u754c\uff0c \u4e26\u4e14\u6c92\u6709\u8da8\u7de9\u7684\u8de1\u8c61\uff0c\u9019\u908a\u7c21\u55ae\u63d0\u5e7e\u500b\u500b\u4eba\u8a8d\u70ba\u7279\u6b8a\u7684\u5f71\u97ff\uff0c\u4f46\u662f\u8981\u77e5\u9053\u9019\u771f\u7684\u53ea\u662f\u51b0\u5c71\u4e00\u89d2\u3002
\u4e0d\u904e\u9ad8\u904b\u7b97\uff0c\u4ee3\u8868\u8457\u9ad8\u8017\u96fb\u9ad8\u78b3\u8db3\u8de1\uff0c \u9664\u6b64\u4e4b\u5916\u6108\u4f86\u6108\u73cd\u8cb4\u7684\u6c34\u8cc7\u6e90\uff0c\u4ea6\u662f\u8cc7\u6599\u4e2d\u5fc3\u7684\u4e3b\u8981\u8017\u6750\uff0c \u4e5f\u56e0\u6b64\uff0c\u4e2d\u570b\u6210\u70ba\u4e16\u754c\u4e0a\u7b2c\u4e00\u500b\u628a\u5546\u696d\u6578\u64da\u4e2d\u5fc3\u4e1f\u5165\u6d77\u4e2d\u7684\u570b\u5bb6\u3002
AI \u4e5f\u6709\u4e00\u4e9b\u7f3a\u9ede\u3002 \u81ea\u7136\u96dc\u8a8c\u5217\u51fa\u4e86\u4e00\u4e9b\u4ee5 AI \u767c\u5c55\u79d1\u5b78\u7684\u6ce8\u610f\u4e8b\u9805\uff0c \u5916\u570b\u4e5f\u6709\u4e00\u5bb6\u9ad8\u7d1a\u8d85\u5546\u64a4\u9664\u6548\u7387\u904e\u4f4e\u7684\u81ea\u52d5\u7d50\u5e33\u529f\u80fd\u3002
"},{"location":"review/2023/#\u901a\u8a0a\u6c7d\u8eca\u6a5f\u5668\u4eba","title":"\u901a\u8a0a\u3001\u6c7d\u8eca\u3001\u6a5f\u5668\u4eba","text":"\u6210\u719f\u7684\u901a\u8a0a\u6280\u8853\uff0c\u9032\u4e00\u6b65\u9020\u5c31\u4e86\u73fe\u4ee3\u793e\u6703\u4e2d\u767c\u9054\u7684\u7db2\u969b\u7db2\u8def\u3002
\u4e00\u7bc7\u6709\u8da3\u7684\u6975\u5ba2\u516c\u5712\u6587\u7ae0\uff0c\u8aaa\u660e\u6a5f\u5668\u4eba\u662f\u4e0b\u4e00\u500b\u5283\u6642\u4ee3\u7522\u54c1\uff0c \u611b\u8303\u5152\u4e5f\u6709\u4e00\u7bc7\u91dd\u5c0d\u6c7d\u8eca\u4f5c\u696d\u7cfb\u7d71\u7684\u8a0e\u8ad6\u548c\u672a\u4f86\u5c55\u671b\u3002
\u9019\u4e9b\u7121\u8072\u7684\u8b8a\u9769\uff0c\u90fd\u662f\u4e00\u584a\u4e00\u584a\u7a4d\u6728\uff0c\u8b93\u6a5f\u5668\u5b78\u7fd2\u7684\u61c9\u7528\uff0c \u9010\u6f38\u5806\u9ad8\u5230\u8b93\u4eba\u96e3\u4ee5\u9810\u6e2c\u7684\u6a21\u7cca\u672a\u4f86\uff0c\u6211\u60f3\u9019\u4e5f\u662f\u79d1\u6280\u9032\u6b65\u7684\u9b45\u529b\u5427\u3002
"},{"location":"review/2023/#\u79d1\u6280","title":"\u79d1\u6280","text":"India\u2019s Moon mission: four things Chandrayaan-3 has taught scientists
ScienceNews \u7684\u5e74\u5ea6\u6458\u8981 \u548c\u5e74\u5ea6\u5341\u5927\u9752\u5e74\u79d1\u5b78\u5bb6\uff0c \u7576\u7136\u81ea\u7136\u96dc\u8a8c\u4e5f\u6709\u76f8\u95dc\u7cbe\u9078\uff0c \u4ee5\u4e0b\u5217\u51fa\u6211\u8a8d\u70ba\u4eca\u5e74\u91cd\u8981\u6216\u6709\u8da3\u7684\u79d1\u5b78\u8b70\u984c\u3002
\u5370\u5ea6\u6210\u529f\u767b\u5165\u6708\u7403\u5357\u6975 \uff08ScienceNews\u3001 Nature\uff09\uff0c \u800c\u4e14\u4ed6\u5011\u9084\u628a\u4e0b\u4e00\u968e\u6bb5\u7684\u7a81\u7834\u8a02\u5728\u63a2\u7d22\u592a\u967d\u3002
\u5728\u9019\u6b21\u63a2\u7d22\u4e2d\uff0c\u6210\u529f\u627e\u5230\u6708\u7403\u7684\u6c27\u548c\u786b\uff0c \u8a72\u63a2\u7d22\u4efb\u52d9\u4e5f\u5728\u62b5\u9054\u5f8c\u4e0d\u4e45\u5b8c\u6210\u4efb\u52d9\u958b\u59cb\u9032\u5165\u4f11\u7720\u671f\uff0c \u7b49\u5f85\u4e0b\u4e00\u671f\u7684\u6708\u7403\u4efb\u52d9\u5c07\u4e4b\u5e36\u56de\u3002
\u65e9\u5728 1969 \u5e74\uff0c\u4eba\u985e\u5c31\u9996\u6b21\u767b\u4e0a\u6708\u7403\u4e86\uff0c\u4f46\u662f\u70ba\u4ec0\u9ebc\u4eba\u985e\u63a2\u7d22\u6708\u7403\u7684\u9032\u5c55\u6703\u9019\u9ebc\u7de9\u6162\u5462\uff1f \u56e0\u70ba\u9019\u7a2e\u63a2\u7d22\u4efb\u52d9\u7684\u5931\u6557\u7387\u9ad8\u9054 50%\uff0c \u5728\u6295\u8cc7\u6210\u672c\u548c\u98a8\u96aa\u5982\u6b64\u9ad8\u7684\u60c5\u6cc1\u4e0b\uff0c\u52e2\u5fc5\u6703\u9762\u81e8\u8457\u5f88\u591a\u6311\u6230\u3002 \u7576\u7136\uff0c\u5404\u570b\u4e5f\u4fe1\u8a93\u65e6\u65e6\u5730\u60f3\u8981\u6210\u70ba\u4e0b\u4e00\u500b\u7a81\u7834\u7684\u570b\u5bb6\uff0c \u5176\u4e2d\u65e5\u672c\u9084\u4ee5\u73a9\u5177\u70ba\u767c\u60f3 \uff0c\u8a2d\u8a08\u51fa\u76f8\u95dc\u7684\u592a\u7a7a\u651d\u5f71\u6a5f\u5668\u4eba\u3002
\u65e5\u672c\u592a\u7a7a\u8239\u5df2\u7d93\u8457\u9678
\u65bc 2024 \u5e74\u8457\u9678\uff0c\u4f46\u662f\u8dcc\u5012\u4e86\ud83d\ude02
Japan\u2019s successful Moon landing was the most precise ever
The Year\u2019s Most Spectacular Photos from the James Webb Telescope, Time
\u96a8\u8457\u53bb\u5e74\u5049\u4f2f\u671b\u9060\u93e1\uff08\u7167\u7247\u96c6\uff09\u7684\u767c\u9001\uff0c \u8d8a\u4f86\u8d8a\u591a\u65e9\u671f\u7684\u731c\u6e2c\u90fd\u5df2\u7d93\u5931\u6e96\uff0c \u5b87\u5b99\u4e2d\u6709\u67d0\u4e9b\u6771\u897f\u9700\u8981\u91cd\u65b0\u958b\u59cb\u601d\u8003\u4e86\uff0c \u4e2d\u570b\u4e5f\u5728\u4eca\u5e74\u555f\u7528\u6700\u65b0\u7684\u5929\u6587\u671b\u9060\u93e1\u5929\u773c\uff0c \u548c\u5168\u4e16\u754c\u6700\u5927\u7684\u592a\u967d\u5c04\u96fb\u6210\u50cf\u671b\u9060\u93e1\u3002
These incredible images are the first from dark-energy telescope Euclid, Nature
\u4ee5\u4e0b\u662f\u4e00\u4e9b\u5b87\u5b99\u76f8\u95dc\u7684\u8b70\u984c\u548c\u767c\u73fe\uff1a
\u5361\u6b7b\u7684\u87ba\u7d72\u5df2\u7d93\u89e3\u958b
\u5df2\u7d93\u65bc 2024 2\u6708\u89e3\u958b\uff0c\u5b8c\u6574\u53d6\u5f97\u88e1\u9762 121.6 \u514b\u7684\u5167\u5bb9\u7269\uff08\u96d6\u7136\u5176\u4e2d\u7d04 60 \u514b\u5728\u5148\u524d\u5df2\u7d93\u5012\u51fa\uff09\u3002
NASA\u2019s OSIRIS-REx nabbed over 120 grams of space rocks from asteroid Bennu
"},{"location":"review/2023/#\u91cf\u5b50","title":"\u91cf\u5b50","text":"Nobel Prize in Physics 2023
\u672a\u4f86\u7684\u79d1\u6280\u65b9\u5411\u91cf\u5b50\u6280\u8853\u7121\u7591\u662f\u91cd\u4e2d\u4e4b\u91cd\uff0c \u4e14\u5927\u5b78\u6b63\u9010\u6f38\u628a\u76f8\u95dc\u4eba\u624d\u532f\u5165\u5230\u4f01\u696d\u4e2d\u3002
\u4e00\u500b\u6280\u8853\u5982\u679c\u53ea\u9650\u7e2e\u5728\u5c08\u696d\u7684\u535a\u58eb\u751f\u4e0a\uff0c\u4ed6\u5c07\u4e0d\u53ef\u80fd\u6210\u529f\u3002
\u2014 \u65bc IBM \u5de5\u4f5c\u7684\u91cf\u5b50\u7269\u7406\u5b78\u5bb6 Olivia Lanes
\u91cf\u5b50\u6280\u8853\u90fd\u662f\u7de9\u6162\u800c\u5805\u5be6\u7684\uff0c\u5728\u8b80\u76f8\u95dc\u6559\u79d1\u66f8\u6642\uff0c\u6ce8\u610f\u5230\u96a8\u8457\u65e9\u671f\u7684\u7206\u767c\u5f0f\u767c\u73fe\uff08\u6a19\u6e96\u6a21\u5f0f\u4e2d\u7684\u5404\u500b\u5143\u7d20\uff09\uff0c \u73fe\u4ee3\u7684\u91cf\u5b50\u7406\u8ad6\u90fd\u958b\u59cb\u601d\u8003\u5176\u5167\u90e8\u672c\u8cea\u548c\u4ea4\u4e92\u7684\u5f71\u97ff\uff0c\u9019\u4e9b\u7406\u8ad6\u4e5f\u8b8a\u5f97\u975e\u5e38\u62bd\u8c61\u548c\u56f0\u96e3\u3002 \u5728\u95b1\u8b80\u76f8\u95dc\u65b0\u805e\u6642\uff0c\u5176\u5be6\u5f88\u591a\u5167\u5bb9\u770b\u5f97\u4e0d\u662f\u5f88\u61c2\uff0c \u4f46\u662f\u4ecd\u76e1\u91cf\u6574\u7406\u51fa\u4e00\u4e9b\u6709\u8da3\u6216\u91cd\u8981\u7684\u7a81\u7834\uff0c\u5617\u8a66\u5728\u56f0\u96e3\u8207\u52d9\u5be6\u4e2d\u9593\u53d6\u5f97\u5e73\u8861\u3002
\u7da0\u80fd\u7684\u767c\u5c55\u5f71\u97ff\u8457\u5730\u7403\u7684\u6c23\u5019\u767c\u5c55\uff0c\u770b\u8457\u8d8a\u4f86\u8d8a\u591a\u76f8\u95dc\u7684\u7814\u7a76\u548c\u843d\u5730\uff0c\u8457\u5be6\u8b93\u4eba\u611f\u52d5\u3002
\u80fd\u6e90\u958b\u767c\u76f8\u95dc\uff1a
\u90fd\u5e02\u8a2d\u8a08\u76f8\u95dc\uff1a
Israel-Hamas War: Timeline and key developments
\u9019\u6bb5\u843d\u5c08\u6ce8\u65bc\u5217\u51fa\u8a8d\u70ba\u91cd\u8981\u7684\u6c11\u751f\u6539\u8b8a\u548c\u4e8b\u4ef6\u3002
\u6700\u5f8c\u8ac7\u4e00\u4e0b\u958b\u6e90\u793e\u7fa4\u7684\u52d5\u76ea\u3002 RedHat \u7684\u9589\u6e90\u653f\u7b56\uff0c \u8b93\u4ee5\u524d\u8f9b\u82e6\u8ca2\u737b\u65bc\u6b64\u7684\u958b\u767c\u8005\u611f\u5230\u88ab\u80cc\u53db\u3002
\u5e73\u53f0\u662f\u9019\u6a23\u6d88\u4ea1\u7684\uff1a \u9996\u5148\uff0c\u4ed6\u5011\u5c0d\u4f7f\u7528\u8005\u6709\u7528\uff1b \u7136\u5f8c\u4ed6\u5011\u5229\u7528\u514d\u8cbb\u5ba2\u6236\u4f86\u70ba\u4ed6\u5011\u4ed8\u8cbb\u5ba2\u6236\u63d0\u4f9b\u66f4\u597d\u7684\u670d\u52d9\uff1b \u6700\u5f8c\uff0c\u4ed6\u5011\u5229\u7528\u9019\u4e9b\u4ed8\u8cbb\u5ba2\uff0c\u70ba\u81ea\u5df1\u63d0\u4f9b\u66f4\u591a\u5229\u76ca\u3002
\u7136\u5f8c\uff0c\u4ed6\u5011\u5c31\u6b7b\u4e86\u3002
\u2014 I'm Done RedHat Enterprise Linux
\u4e0d\u53ea\u5982\u6b64 HashiCorp \u4e5f\u662f\u5982\u6b64\uff0c \u628a\u65d7\u4e0b\u7522\u54c1\u7684\u958b\u6e90\u5408\u7d04\u8f49\u6210\u8f03\u70ba\u9589\u6e90\u7684\u5408\u7d04\uff0c\u4ee5\u6b64\u4f86\u907f\u514d\u6709\u4eba\u900f\u904e\u6563\u4f48\u5176\u8edf\u9ad4\u5230\u96f2\u7aef\u8cfa\u9322\u3002 \u962e\u4e00\u5cf0\u900f\u904e ElasticSearch \u7684\u6210\u529f\uff0c \u63d0\u51fa\u958b\u6e90\u8edf\u9ad4\u4e5f\u53ef\u4ee5\u540c\u6642\u63a8\u51fa\u4f01\u696d\u7248\u672c\uff0c \u4ee5\u6b64\u4f86\u8cfa\u9322\u3002
\u4e0d\u904e\u503c\u5f97\u6ce8\u610f\u7684\u662f\uff0c\u6709\u4eba\u516c\u958b Google \u5167\u90e8\u7684\u6587\u4ef6\uff0c \u95e1\u8ff0\u958b\u6e90\u793e\u7fa4\u624d\u662f AI \u7684\u89e3\u65b9\uff0c \u9019\u662f\u56e0\u70ba\u958b\u6e90\u8edf\u9ad4\u6709\u4e00\u500b\u5f37\u5927\u7684\u512a\u52e2\uff1a\u53ef\u4ee5\u5feb\u901f\u64f4\u589e\u4f7f\u7528\u8005\u4eba\u6578\u3002 \u793e\u7fa4\u4e0a\u7528\u7684\u4eba\u8d8a\u591a\uff0c\u5927\u5bb6\u8d8a\u80fd\u7fd2\u6163\u5b83\u7684\u4f7f\u7528\u65b9\u5f0f\uff0c\u4e5f\u5c31\u8d8a\u53ef\u4ee5\u5728\u76f8\u95dc\u9818\u57df\u4e0a\u5236\u5b9a\u5229\u65bc\u516c\u53f8\u7684\u767c\u5c55\u7b56\u7565\u3002
"},{"location":"review/2023/#\u8a00\u8ad6","title":"\u8a00\u8ad6","text":"\u4ee5\u4e0b\u653e\u4e00\u4e9b\u89ba\u5f97\u611f\u52d5\u6216\u6709\u8da3\u7684\u6587\u7ae0\uff0c\u7b97\u662f\u4e00\u500b\u4e0d\u77e5\u9053\u8a72\u653e\u54ea\u88e1\u7684\u5408\u96c6\u3002
\u7e3d\u7d50\u4f86\u8aaa\uff0c2023 \u5e74\u662f\u500b\u5f88\u71b1\u7684\u4e00\u5e74\uff0c\u770b\u5f97\u51fa\u4eba\u5011\u6b63\u52aa\u529b\u5730\u7cfe\u6b63\u904e\u53bb\u7684\u5171\u696d\u3002 \u751f\u7269\u4e0a\u6211\u8a8d\u70ba\u6700\u71b1\u7684\u4e3b\u984c\u4ecd\u7136\u662f\u57fa\u56e0\u5de5\u7a0b\uff0c\u81f3\u65bc\u6578\u4f4d\u7684\u7576\u7d05\u8b70\u984c\u6beb\u7121\u7591\u554f\u7684\u662f AGI \u548c\u900f\u904e\u5176\u767c\u5c55\u51fa\u7684\u7814\u7a76\u3002 \u79d1\u6280\u65b9\u9762\uff0c\u5370\u5ea6\u518d\u4e00\u6b21\u8e8d\u4e0a\u570b\u969b\uff0c\u8b93\u5927\u5bb6\u770b\u5230\u4ed6\u5011\u7684\u79d1\u6280\u529b\uff0c\u6210\u70ba\u7b2c\u4e00\u500b\u767b\u4e0a\u6708\u7403\u5357\u6975\u7684\u570b\u5bb6\u3002
\u53e6\u5916\u8ac7\u4e00\u4e0b\u81ea\u5df1\u5c0d\u9019\u7bc7\u7684\u770b\u6cd5\uff0c\u4eca\u5e74\u9996\u6b21\u900f\u904e\u4e00\u5e74\u4f86\u6536\u96c6\u7684\u7d20\u6750\u6574\u5408\u6210\u4e00\u7bc7\u6587\u7ae0\uff0c \u500b\u4eba\u8a8d\u70ba\u5167\u5bb9\u5f88\u96dc\u4e82\uff0c\u6703\u9700\u8981\u518d\u60f3\u4e00\u4e0b\u600e\u9ebc\u505a\u53ef\u4ee5\u5e6b\u52a9\u81ea\u5df1\u66f4\u597d\u7684\u6574\u7406\u4e00\u6574\u5e74\u7684\u65b0\u77e5\u3002 Martin Kleppmann \u7684 2023 year in review\uff0c \u6211\u5c31\u89ba\u5f97\u4e0d\u932f\uff0c\u6587\u4e2d\u8ac7\u8ac7\u81ea\u5df1\u63a8\u5ee3\u7684\u6280\u8853\u3001\u5de5\u4f5c\u969b\u9047\u3001\u5bb6\u5ead\u751f\u6d3b\u7b49\u7b49\uff0c \u4f46\u662f\u6211\u500b\u4eba\u53c8\u4e0d\u592a\u60f3\u628a\u79c1\u751f\u6d3b\u516c\u8af8\u65bc\u4e16\u3002
\u9664\u6b64\u4e4b\u5916\uff0c\u4e5f\u6709\u4e00\u500b\u5009\u5132\u6574\u7406\u4e86\u7db2\u4e0a\u7684 2023 \u56de\u9867\uff0c \u53ef\u4ee5\u53c3\u8003\uff0c\u4f46\u600e\u9ebc\u505a\u66f4\u597d\u5462\uff1f\u518d\u60f3\u4e00\u4e0b\u3002
"}]} \ No newline at end of file +{"config":{"lang":["en"],"separator":"[\\s\\u200b\\u3000\\-\u3001\u3002\uff0c\uff0e\uff1f\uff01\uff1b]+","pipeline":["stemmer"]},"docs":[{"location":"","title":"\u81ea\u6211\u4ecb\u7d39","text":"\u4f60\u597d\uff0c\u6211\u53eb\u5442\u5b78\u6d32\u3002\u6211\u5728 104 \u8cc7\u8a0a\u79d1\u6280\u5de5\u4f5c\uff0c\u6b61\u8fce\u767c PR \u505a\u4efb\u4f55\u4fee\u6539\u3002
\u9019\u500b\u7db2\u7ad9\u65b9\u4fbf\u6211\u505a\u8cc7\u8a0a\u7684\u6574\u7406\uff0c \u4e5f\u53ef\u4ee5\u767c\u4e00\u4e9b issues \u4f86\u7576\u4f5c\u5099\u5fd8\u9304\u3002
\u4e0d\u53ea\u662f\u65b0\u589e\u6587\u7ae0\uff0c\u4e5f\u5305\u542b\u4fee\u6539\u820a\u7684\u6587\u7ae0\u3002
{{ blog_content }}
"},{"location":"#\u5fc3\u5f97","title":"\u5fc3\u5f97","text":"Release It!\uff0c\u71b1\u9580\u7684\u7dad\u904b\u66f8\u7c4d\u7684\u76f8\u95dc\u5fc3\u5f97\u548c\u6574\u7406\uff0c\u5e36\u4f60\u4e86\u89e3\u7dad\u904b\u6703\u9047\u5230\u7684\u554f\u984c\u3001\u89e3\u6c7a\u65b9\u6cd5\u3001\u67b6\u69cb\u8a2d\u8a08\u3001\u5fc3\u614b\u8abf\u6574\u7b49\u7b49\u3002
"},{"location":"#\u56de\u9867","title":"\u56de\u9867","text":"2023 \u5e74\u7684\u56de\u9867\u6587\uff0c\u5305\u542b\u74b0\u5883\u3001\u751f\u7269\u3001\u6578\u4f4d\u3001\u79d1\u6280\u548c\u4eba\u6587\u3002
"},{"location":"#\u5c08\u6848","title":"\u5c08\u6848","text":"\u540d\u7a31 \u7248\u672c \u7c21\u4ecb POS \u7cfb\u7d71 Privacy Policy SpotlightAnt \u96c6\u4e2d\u6ce8\u610f\u5c0f\u5de5\u5177 Lua \u958b\u767c\u5de5\u5177 \u57f7\u884c\u6e2c\u8a66\u548c\u98a8\u683c\u6aa2\u67e5 JOSE JWT/JWE/JWS/JWK \u7684\u5305\u88dd\u4ee5\u4e0b\u662f\u4e00\u4e9b\u958b\u6e90\u5c08\u6848
"},{"location":"awesome/","title":"AWESOME","text":""},{"location":"awesome/cb/","title":"\u6f2b\u756b\u63a8\u85a6","text":"\u4e00\u76f4\u60f3\u8457\u8981\u628a\u81ea\u5df1\u559c\u6b61\u7684\u6f2b\u756b\u6574\u7406\u8d77\u4f86\uff0c\u4e26\u5beb\u4e0a\u4e00\u4e9b\u7c21\u55ae\u7684\u5fc3\u5f97\uff0c \u672a\u4f86\u7684\u81ea\u5df1\u5982\u679c\u770b\u5230\u9019\u4e9b\u5fc3\u5f97\u5c07\u6703\u662f\u500b\u5f88\u6709\u8da3\u7684\u72c0\u6cc1\u5427 \ud83d\ude02\u3002 \u7576\u7136\uff0c\u5c0d\u65bc\u8a55\u8ad6\u9019\u4e9b\u5fc3\u8840\u7d50\u6676\u6211\u7d55\u5c0d\u662f\u6c92\u6709\u8cc7\u683c\u7684\uff0c \u80fd\u8b93\u6211\u539a\u8457\u81c9\u76ae\u5beb\u4e0b\u9019\u4e9b\u8a55\u8ad6\u7684\u53ea\u80fd\u662f\u56e0\u70ba\u5beb\u9019\u4e9b\u8a55\u8ad6\u6642\u662f\u771f\u5fc3\u800c\u56b4\u8085\u7684\uff0c \u5982\u679c\u54ea\u4e00\u5929\u6211\u610f\u8b58\u5230\u81ea\u5df1\u6b63\u5728\u80e1\u8b05\u9b3c\u626f\u6642\uff0c\u5e0c\u671b\u6709\u4eba\u6216\u81ea\u5df1\u80fd\u53ca\u6642\u767c\u73fe\u4e26\u63d0\u9192\u81ea\u5df1\u8a72\u597d\u597d\u51b7\u975c\u4e0b\u4f86\u3002
\u9019\u4efd\u63a8\u85a6\u6e05\u55ae\u53ef\u80fd\u4e0d\u6703\u6709\u90a3\u4e9b\u300c\u7d93\u5178\u300d\u4e4b\u4f5c\uff0c\u4f8b\u5982\u602a\u91ab\u9ed1\u5091\u514b\u3001\u591a\u62c9A\u5922\u7b49\u7b49\u3002 \u4e26\u4e0d\u662f\u56e0\u70ba\u9019\u4e9b\u4f5c\u54c1\u4e0d\u597d\u770b\uff0c\u800c\u662f\u57fa\u65bc\u5c0f\u6642\u5019\u90fd\u662f\u900f\u904e\u5361\u901a\uff08\u52d5\u756b\uff09\u4f86\u8a8d\u8b58\u9019\u4e9b\u4f5c\u54c1\uff0c \u8b93\u6211\u5c0d\u65bc\u8981\u7528\u6f2b\u756b\u7684\u89d2\u5ea6\u4f86\u770b\u9019\u4e9b\u4f5c\u54c1\u6642\u7adf\u6709\u4e9b\u5f46\u626d\uff0c\u4e5f\u8a31\u4ed6\u5011\u5728\u6211\u5fc3\u4e2d\u4e26\u4e0d\u6b78\u985e\u65bc\u6f2b\u756b\u5427\u3002
\u5728\u63a5\u4e0b\u4f86\u7684\u6599\u8868\u4e2d\uff0c\u7b2c\u4e00\u5c64\u6703\u5217\u51fa\u4f5c\u8005\u7b2c\u4e8c\u5c64\u518d\u5217\u51fa\u4f5c\u54c1\uff0c\u5982\u679c\u4f5c\u54c1\u662f\u4ee5\u539f\u4f5c\uff08\u901a\u5e38\u662f\u5c0f\u8aaa\uff09\u70ba\u57fa\u790e\u7684\uff0c \u5c31\u6703\u5728\u4f5c\u54c1\u540d\u5f8c\u9762\u52a0\u4e0a\u539f\u4f5c\u4f5c\u8005\uff0c\u4f8b\u5982\u300c\u4e95\u4e0a\u96c4\u5f65\u2014\u6d6a\u4eba\u528d\u5ba2 + \u5409\u5ddd\u82f1\u6cbb\u300d\u3002 \u7b2c\u4e09\u5c64\u4ee3\u8868\u5176\u4f5c\u54c1\u662f\u4e0a\u4e00\u5c64\u4f5c\u54c1\u7684\u5ef6\u4f38\u4f5c\u54c1\uff0c\u4f8b\u5982\u300c\u8acb\u53eb\u6211\u82f1\u96c4\u2014\u516c\u5f0f\u5408\u96c6\u300d
\u6700\u559c\u6b61\u7684\u4f5c\u8005\uff1a
\u6f2b\u756b\u5217\u8868\uff1a
\u9019\u88e1\u662f\u96a8\u7b46\uff0c\u7d00\u9304\u5404\u7a2e\u6771\u897f\u3002\u6709\u932f\u6b61\u8fce\u4f86\u4fee\u6b63\u3002
"},{"location":"essay/#\u6700\u8fd1\u7684\u7570\u52d5","title":"\u6700\u8fd1\u7684\u7570\u52d5","text":"\u4e0d\u53ea\u662f\u65b0\u589e\u6587\u7ae0\uff0c\u4e5f\u5305\u542b\u4fee\u6539\u820a\u7684\u6587\u7ae0\u3002
{{ blog_content essay }}
"},{"location":"essay/devex-in-action/","title":"\u958b\u767c\u9ad4\u9a57\u7684\u6539\u9032","text":"\u6458\u8981
\u672c\u6587\u6458\u9304\u81ea\uff1aDevEx in Action\u3002
\u6587\u4e2d\u95e1\u8ff0\u70ba\u4ec0\u9ebc\u512a\u5316\u958b\u767c\u9ad4\u9a57\u5f88\u91cd\u8981\uff0c\u4e26\u4f9d\u6b64\u4f86\u8a2d\u8a08\u51fa\u4e00\u500b\u512a\u8cea\u7684\u5de5\u4f5c\u74b0\u5883\u3002
\u512a\u5316\u5de5\u7a0b\u958b\u767c\u9ad4\u9a57\uff08\u5047\u8a2d\uff09\u6709\u4e09\u500b\u76ee\u6a19\u8981\u6eff\u8db3\uff1a
\u5728\u512a\u5316\u958b\u767c\u9ad4\u9a57\u4e0a\uff0c\uff08\u5047\u8a2d\uff09\u6709\u4e09\u500b\u6307\u6a19\u53ef\u4ee5\u8003\u616e\uff1a
\u53ea\u6709\u9019\u4e09\u500b\u55ce\uff1f
\u9019\u4e9b\u53ea\u662f\u4f5c\u8005\u63d0\u4f9b\u7684\u6307\u6a19\uff0c\u6839\u64da\u60c5\u5883\u53ef\u4ee5\u81ea\u884c\u8a2d\u8a08\u3002
\u4f46\u662f\u8981\u6ce8\u610f\uff0c\u6839\u64da PLS-SEM\uff08\u5f8c\u9762\u7684\u5206\u6790\u5de5\u5177\uff09\u6700\u4f73\u6307\u5357\uff0c \u6307\u6a19\u6578\u91cf\u8d8a\u9ad8\uff0c\u6a23\u672c\u6578\u8981\u8ddf\u8457\u63d0\u9ad8\u624d\u80fd\u964d\u4f4e\u8aa4\u5dee\u3002
\u7e3d\u7d50\u4f86\u8aaa\uff0c\u5c31\u6703\u6709\u9019\u4e09\u5c0d\u4e09\u7684\u7dda\u5716\uff1a
---\ntitle: \u958b\u767c\u9ad4\u9a57\u7684\u4e09\u500b\u65b9\u5411\n---\nflowchart LR\n p[\u500b\u4eba]\n t[\u5718\u968a]\n o[\u7d44\u7e54]\n fs(\u5fc3\u6d41)\n fl(\u56de\u994b)\n cl(\u8a8d\u77e5\u8ca0\u8377)\n fs --H1a-->p\n fs --H1b-->t\n fs --H1c-->o\n fl --H2a-->p\n fl --H2b-->t\n fl --H2c-->o\n cl --H3a-->p\n cl --H3b-->t\n cl --H3c-->o\n
"},{"location":"essay/devex-in-action/#\u554f\u5377","title":"\u554f\u5377","text":"\u900f\u904e\u554f\u5377\u548c PLS \u7684\u5206\u6790\uff0c \u9996\u5148\u78ba\u4fdd\u554f\u5377\u9805\u76ee\uff08\u524d\u4e09\u9805\uff09\u548c\u76ee\u6a19\uff08\u5fc3\u6d41\u3001\u56de\u994b\u3001\u8a8d\u77e5\u8ca0\u8377\uff09\u6709\u95dc\u4fc2\u4e14\u5408\u7406\uff0c \u63a5\u8457\u627e\u51fa\u5047\u8a2d\uff08x \u5229\u65bc y\uff09\u548c\u9805\u76ee\uff08\u5f8c\u4e09\u9805\uff09\u7684\u95dc\u4fc2\u7a0b\u5ea6\u4e26\u78ba\u8a8d\u5047\u8a2d\u662f\u5426\u5408\u7406\u3002
\u4e0b\u9762\u662f PLS-SEM \u4e2d\u7684\u5916\u986f\u69cb\u5ff5\uff08exogenous construct\uff09\uff0c \u6bcf\u500b\u9805\u76ee\uff08formatively item\uff09\u6703\u5f62\u6210\u5404\u81ea\u7684\u69cb\u5ff5\u3002
\u9805\u76ee \u5e73\u5747\u5f97\u5206 \u6a19\u6e96\u5dee \u8ca0\u8377\u91cf \u5728\u5de5\u6642\u4e2d\uff0c\u6211\u6709\u5927\u91cf\u6642\u9593\u9032\u884c\u5c08\u6ce8\u5730\u958b\u767c1 3.383 0.845 0.826 \u5728\u65e5\u5e38\u5de5\u4f5c\u9031\u4e2d\uff0c\u4f60\u591a\u9577\u88ab\u975e\u9810\u671f\u7684\u5de5\u4f5c\u5e72\u64fe\u6216\u4e2d\u65b72 3.826 1.087 0.557 \u4e00\u822c\u4f86\u8aaa\uff0c\u6211\u7684\u7a0b\u5f0f\u78bc\u5de5\u4f5c\u662f\u5438\u5f15\u4eba\u76841 3.580 0.871 0.796\u5fc3\u6d41\u69cb\u5ff5\uff0c\u7d44\u6210\u4fe1\u5ea6: 0.776\uff0c\u5e73\u5747\u8b8a\u7570\u62bd\u53d6\u91cf: 0.542
\u9805\u76ee \u5e73\u5747\u5f97\u5206 \u6a19\u6e96\u5dee \u8ca0\u8377\u91cf \u9762\u5c0d\u516c\u53f8\u5167\u90e8\u5de5\u7a0b\u7684\u7591\u554f\uff08\u4f8b\u5982\u7a0b\u5f0f\u78bc\u3001\u7cfb\u7d71\u6216\u5546\u52d9\u908f\u8f2f\uff09\uff0c\u591a\u5e38\u6703\u82b1\u8d85\u904e\u5341\u5206\u9418\u4f86\u89e3\u6c7a3 2.799 1.309 0.793 \u591a\u5c11\u6bd4\u4f8b\u7684\u7a0b\u5f0f\u78bc\u5be9\u95b1\uff08code review\uff09\uff0c\u6703\u5728\u56db\u5c0f\u6642\u5167\u5b8c\u62104 2.895 1.412 0.698\u56de\u994b\u69cb\u5ff5\uff0c\u7d44\u6210\u4fe1\u5ea6: 0.715\uff0c\u5e73\u5747\u8b8a\u7570\u62bd\u53d6\u91cf: 0.558
\u9805\u76ee \u5e73\u5747\u5f97\u5206 \u6a19\u6e96\u5dee \u8ca0\u8377\u91cf \u5728\u4f60\u4e3b\u8981\u7684\u5718\u968a\u4e2d\uff0c\u90e8\u7f72\u61c9\u7528\u7684\u5bb9\u6613\u7a0b\u5ea6\u5982\u4f555 3.735 0.858 0.728 \u4f60\u591a\u5e38\u8f15\u6613\u7684\u7406\u89e3\u5de5\u4f5c\u4e2d\u7684\u7a0b\u5f0f\u78bc1 3.827 0.788 0.648 \u4e00\u822c\u4f86\u8aaa\uff0c\u5fc5\u9808\u9075\u5b88\u7684\u5de5\u4f5c\u6d41\u7a0b\u5c0d\u6211\u4f86\u8aaa\u662f\u8f15\u6613\u7406\u89e3\u548c\u64cd\u4f5c\u76841 3.607 0.841 0.759 \u4e00\u822c\u4f86\u8aaa\uff0c\u6211\u64c1\u6709\u7684\u958b\u767c\u5de5\u5177\u662f\u53ef\u4ee5\u76f4\u89c0\u64cd\u4f5c\u76841 3.689 0.854 0.780\u8a8d\u77e5\u8ca0\u8377\u69cb\u5ff5\uff0c\u7d44\u6210\u4fe1\u5ea6: 0.820\uff0c\u5e73\u5747\u8b8a\u7570\u62bd\u53d6\u91cf: 0.534
\u63a5\u8457\u4e0b\u9762\u662f PLS-SEM \u4e2d\u7684\u5f15\u5165\u69cb\u5ff5\uff08endogenous construct\uff09\uff0c \u6bcf\u500b\u9805\u76ee\uff08reflectively item\uff09\u6703\u53cd\u61c9\u5404\u81ea\u7684\u69cb\u5ff5\u3002
\u9805\u76ee \u5e73\u5747\u5f97\u5206 \u6a19\u6e96\u5dee \u8ca0\u8377\u91cf \u5728\u904e\u53bb\u4e00\u500b\u6708\u4e2d\uff0c\u6211\u5b78\u5230\u548c\u6211\u5de5\u4f5c\u76f8\u95dc\u7684\u65b0\u6280\u80fd6 3.922 0.995 0.670 \u5728\u904e\u53bb\u4e00\u500b\u6708\u4e2d\uff0c\u6211\u611f\u5230\u5f88\u6709\u751f\u7522\u529b6 3.680 0.990 0.816 \u5728\u904e\u53bb\u4e00\u500b\u6708\u4e2d\uff0c\u6211\u5728\u5de5\u4f5c\u4e2d\u6709\u5275\u9020\u529b\u7684\u8868\u73fe6 3.635 0.993 0.852\u500b\u4eba\u5f71\u97ff\u69cb\u5ff5\uff0c\u7d44\u6210\u4fe1\u5ea6: 0.825\uff0c\u5e73\u5747\u8b8a\u7570\u62bd\u53d6\u91cf: 0.614
\u9805\u76ee \u5e73\u5747\u5f97\u5206 \u6a19\u6e96\u5dee \u8ca0\u8377\u91cf \u4f60\u6703\u5982\u4f55\u8a55\u6bd4\u5718\u968a\u4e2d\u7684\u7a0b\u5f0f\u78bc\u54c1\u8cea5 3.584 0.865 0.945 \u4f60\u591a\u5e38\u6703\u56e0\u70ba\u6280\u8853\u50b5\u800c\u5f71\u97ff\u4f60\u5b8c\u6210\u65b0\u7684\u5de5\u4f5c\u9805\u76ee1 2.826 0.917 0.653\u5718\u968a\u5f71\u97ff\u69cb\u5ff5\uff0c\u7d44\u6210\u4fe1\u5ea6: 0.790\uff0c\u5e73\u5747\u8b8a\u7570\u62bd\u53d6\u91cf: 0.660
\u9805\u76ee \u5e73\u5747\u5f97\u5206 \u6a19\u6e96\u5dee \u8ca0\u8377\u91cf \u4f60\u591a\u5e38\u67e5\u770b\u5176\u4ed6\u516c\u53f8\u7684\u8077\u7f3a\uff08\u672c\u56de\u7b54\u53ea\u6703\u7528\u4f5c\u7814\u7a76\u7528\u9014\uff097 3.922 1.024 0.607 \u6211\u7684\u516c\u53f8\u652f\u6301\u5275\u610f\u767c\u60f36 3.922 0.999 0.869 \u6211\u7684\u516c\u53f8\u5b8c\u6210\u5b83\u5236\u5b9a\u7684\u76ee\u6a196 3.680 0.828 0.830 \u6211\u7684\u516c\u53f8\u662f\u7372\u5229\u76846 3.635 0.913 0.605\u7d44\u7e54\u5f71\u97ff\u69cb\u5ff5\uff0c\u7d44\u6210\u4fe1\u5ea6: 0.823\uff0c\u5e73\u5747\u8b8a\u7570\u62bd\u53d6\u91cf: 0.545
"},{"location":"essay/devex-in-action/#\u7d50\u679c","title":"\u7d50\u679c","text":"\u900f\u904e\u554f\u5377\u548c PLS-SEM\uff0c\u7d71\u8a08\u4e26\u8a08\u7b97\u5f97\u5230 \u5404\u500b\u6307\u6a19\u5c0d\u5404\u500b\u76ee\u6a19\u7684\u91cd\u8981\u7a0b\u5ea6\uff1a
---\ntitle: \u6307\u6a19\u5c0d\u5404\u76ee\u6a19\u7684\u5f71\u97ff\u7a0b\u5ea6\n---\nflowchart LR\n p[\u500b\u4eba]\n t[\u5718\u968a]\n o[\u7d44\u7e54]\n fs(\u5fc3\u6d41)\n fl(\u56de\u994b)\n cl(\u8a8d\u77e5\u8ca0\u8377)\n fs --0.307-->p\n fs --0.173-->t\n fs --0.167-->o\n fl --NS-->p\n fl --0.141-->t\n fl --NS-->o\n cl --0.254-->p\n cl --0.422-->t\n cl --0.325-->o\n
\u4ee5\u5716\u4e2d\u70ba\u4f8b\uff0c\u300c\u56de\u994b\u300d\u5c31\u53ea\u5c0d\u300c\u5718\u968a\u300d\u6709\u8f03\u7a4d\u6975\u7684\u5f71\u97ff\uff1b \u800c\u300c\u8a8d\u77e5\u8ca0\u8377\u300d\u5247\u662f\u5c0d\u300c\u5718\u968a\u300d\u548c\u300c\u7d44\u7e54\u300d\u6709\u6700\u7a4d\u6975\u7684\u5f71\u97ff\uff1b \u6700\u5f8c\u5247\u662f\u300c\u5fc3\u6d41\u300d\u5c0d\u300c\u500b\u4eba\u300d\u5f71\u97ff\u6700\u9ad8\u3002
"},{"location":"essay/devex-in-action/#\u5fc3\u6d41","title":"\u5fc3\u6d41","text":"\u63d0\u4f9b\u5de5\u7a0b\u4eba\u54e1\u5c08\u6ce8\u7684\u958b\u767c\uff0c\u4e0d\u53ea\u662f\u512a\u5316\u500b\u4eba\u6548\u7387\uff0c\u4e5f\u80fd\u540c\u6642\u512a\u5316\u5718\u968a\u548c\u7d44\u7e54\u3002
\u80fd\u5920\u64c1\u6709\u8db3\u5920\u6642\u9593\u7684\u6c88\u6d78\u958b\u767c\uff0c\u6703\u8b93\u958b\u767c\u8005\u589e\u52a0 50% \u7684\u751f\u7522\u6548\u7387\u3002 \u96d6\u7136\u5728\u591a\u4eba\u958b\u767c\u7684\u60c5\u6cc1\u4e0b\uff0c\u5f88\u96e3\u6e96\u78ba\u8b93\u6bcf\u500b\u4eba\u90fd\u80fd\u6c88\u6d78\u958b\u767c\uff0c \u4f46\u537b\u662f\u4e00\u500b\u53ef\u4ee5\u52aa\u529b\u7684\u76ee\u6a19\uff0c\u4e0d\u7ba1\u662f\u74b0\u5883\u4e0a\uff08\u5b89\u975c\u7684\u7a7a\u9593\uff09\u9084\u662f\u5718\u968a\u5354\u4f5c\u65b9\u5f0f\u4e0a\uff08\u6e1b\u5c11\u6703\u8b70\uff09\u3002
\u91dd\u5c0d\u6709\u8208\u8da3\u7684\u4e8b\u7269\u9032\u884c\u5de5\u7a0b\u958b\u767c\u6703\u589e\u52a0 30% \u7684\u751f\u7522\u6548\u7387\u3002 \u900f\u904e\u5718\u968a\u5167\u7684\u5de5\u4f5c\u4e92\u63db\u6216\u751a\u81f3\u7d44\u7e54\u5167\u90e8\u591a\u5718\u968a\u7684\u5de5\u4f5c\u4e92\u63db\uff0c\u53ef\u4ee5\u8b93\u958b\u767c\u8005\u6709\u6a5f\u6703\u9ad4\u9a57\u4e0d\u540c\u958b\u767c\u74b0\u5883\u3002 \u4e5f\u53ef\u4ee5\u900f\u904e\u9ed1\u5ba2\u677e\u4f86\u8b93\u958b\u767c\u8005\u6709\u6a5f\u6703\u5b78\u7fd2\u548c\u6311\u6230\u3002
"},{"location":"essay/devex-in-action/#\u56de\u994b","title":"\u56de\u994b","text":"\u597d\u7684\u56de\u994b\u50c5\u80fd\u512a\u5316\u5718\u968a\u7684\u6548\u80fd\u3002
\u64c1\u6709\u5feb\u901f\u7684\u4ee3\u78bc\u5be9\u95b1\u6703\u63d0\u9ad8\u7522\u54c1 20% \u7684\u5275\u65b0\uff0c\u5feb\u901f\u7684\u4ee3\u78bc\u5be9\u95b1\u6703\u52a0\u5feb\u5718\u968a\u8d70\u4e0b\u4e00\u6b65\u7684\u901f\u5ea6\u3002
\u5feb\u901f\u56de\u61c9\u5167\u90e8\u958b\u767c\u554f\u984c\u4e5f\u6703\u964d\u4f4e 50% \u7684\u6280\u8853\u50b5\u767c\u751f\u7387\uff0c \u5b83\u9700\u8981\u8b93\u4ee3\u78bc\u6587\u4ef6\u5316\uff0c\u540c\u6642\u8981\u653e\u5728\u4e00\u500b\u53ef\u4f9b\u5feb\u901f\u67e5\u95b1\u7684\u5730\u65b9\uff0c\u4e26\u63d0\u51fa\u6700\u4f73\u5be6\u4f5c\u7684\u6307\u5357\u3002
"},{"location":"essay/devex-in-action/#\u8a8d\u77e5\u8ca0\u8377","title":"\u8a8d\u77e5\u8ca0\u8377","text":"\u82e5\u958b\u767c\u8005\u80fd\u5920\u9ad8\u5ea6\u719f\u6089\u8655\u7406\u7684\u7a0b\u5f0f\u78bc\uff0c\u80fd\u5920\u63d0\u9ad8 42% \u7684\u958b\u767c\u6548\u7387\u3002 \u4e00\u4e9b\u5de5\u5177\u548c\u6703\u8b70\u53ef\u4ee5\u5e6b\u52a9\u8de8\u5718\u968a\u6216\u5718\u968a\u5167\u7684\u7a0b\u5f0f\u78bc\u8a8d\u77e5\u7a0b\u5ea6\u3002
\u958b\u767c\u8005\u5982\u679c\u8a8d\u70ba\u4ed6\u5011\u4f7f\u7528\u7684\u5de5\u5177\u6216\u5de5\u4f5c\u6d41\u7a0b\u662f\u76f4\u89c0\u7684\uff0c\u5c07\u6703\u63d0\u5347 50% \u7684\u5275\u65b0\u3002 \u53cd\u4e4b\uff0c\u5247\u4e0d\u50c5\u662f\u6e1b\u4f4e\u6548\u7387\uff0c\u66f4\u53ef\u80fd\u964d\u4f4e\u7559\u4efb\u7684\u610f\u9858\uff0c \u63db\u53e5\u8a71\u8aaa\uff0c\u9019\u6703\u5f71\u97ff\u500b\u4eba\u3001\u5718\u968a\u548c\u7d44\u7e54\u7684\u54c1\u8cea\u3002
"},{"location":"essay/devex-in-action/#\u7e3d\u7d50","title":"\u7e3d\u7d50","text":"\u7e3d\u7d50\u4f86\u8aaa\uff0c\u964d\u4f4e\u958b\u767c\u7684\u8a8d\u77e5\u8ca0\u8377\u5c0d\u65bc\u500b\u4eba\u3001\u5718\u9ad4\u548c\u7d44\u7e54\u662f\u6700\u6709\u6548\u7684\u3002
\u4f46\u662f\u9019\u908a\u7684\u7cbe\u83ef\u5728\u65bc \u7528\u6578\u64da\u5c55\u793a\uff0c\u63db\u53e5\u8a71\u8aaa\uff0c\u6211\u5011\u53ef\u4ee5\u77e5\u9053\u5982\u4f55\u8861\u91cf\u6539\u8b8a\u3002 \u4f8b\u5982\u516c\u53f8\u958b\u59cb\u8a2d\u8a08\u4e00\u500b\u5de5\u5177\u52a0\u901f\u958b\u767c\uff0c\u9019\u6a23\u7684\u512a\u5316\u5982\u679c\u53ef\u4ee5\u900f\u904e\u6578\u5b57\u77e5\u9053\u67d0\u65b9\u9762\u63d0\u5347 40%\uff0c\u67d0\u65b9\u9762\u964d\u4f4e 10%\uff0c \u5c31\u53ef\u4ee5\u77e5\u9053\u9019\u5de5\u5177\u7684\u512a\u52e2\u548c\u52a3\u52e2\uff0c\u9032\u4e00\u6b65\u6539\u5584\u3002
\u9019\u6a23\u7684\u6a5f\u5236\u4e0d\u7ba1\u662f\u516c\u53f8\u76ee\u524d\u5c0d\u65bc\u512a\u5316\u958b\u767c\u9ad4\u9a57\u662f\u525b\u8d77\u6b65\u9084\u662f\u6b63\u5728\u8def\u4e0a\uff0c\u90fd\u80fd\u6709\u6a5f\u5236\u8861\u91cf\u548c\u8a2d\u5b9a\u76ee\u6a19\u3002
1=\u5f9e\u4e0d\u30012=\u9bae\u5c11\u30013=\u5076\u723e\u30014=\u7d93\u5e38\u30015=\u5e7e\u4e4e\u00a0\u21a9\u21a9\u21a9\u21a9\u21a9\u21a9
1=\u6578\u500b\u5c0f\u6642\u4e00\u6b21\u30012=\u6bcf\u65e5\u81f3\u5c11\u4e00\u6b21\u30013=\u6bcf\u5169\u5929\u81f3\u5c11\u4e00\u6b21\u30014=\u6bcf\u9031\u81f3\u5c11\u4e00\u6b21\u30015=\u6bcf\u5468\u5c0f\u65bc\u4e00\u6b21\u00a0\u21a9
1=\u6bcf\u5169\u5929\u81f3\u5c11\u4e00\u6b21\u30012=\u6bcf\u5468\u81f3\u5c11\u4e00\u6b21\u30013=\u6bcf\u5169\u5468\u81f3\u5c11\u4e00\u6b21\u30014=\u6bcf\u6708\u81f3\u5c11\u4e00\u6b21\u30015=\u6bcf\u6708\u5c0f\u65bc\u4e00\u6b21\u00a0\u21a9
1=0-20%\u30012=21-40%\u30013=41-60%\u30014=61-80%\u30015=81-100%\u00a0\u21a9
1=\u975e\u5e38\u7cdf\u30012=\u7cdf\u7cd5\u30013=\u53ef\u63a5\u53d7\u30014=\u597d\u30015=\u975e\u5e38\u597d\u00a0\u21a9\u21a9
1=\u975e\u5e38\u4e0d\u540c\u610f\u30012=\u4e0d\u540c\u610f\u30013=\u7121\u6cd5\u6c7a\u5b9a\u30014=\u540c\u610f\u30015=\u975e\u5e38\u540c\u610f\u00a0\u21a9\u21a9\u21a9\u21a9\u21a9\u21a9
1=\u6bcf\u65e5\u30012=\u6bcf\u9031\u30013=\u6bcf\u6708\u30014=\u6bcf\u6578\u6708\u30015=\u5f9e\u4e0d\u00a0\u21a9
GPL \u548c AGPL \u4e0d\u7ba1\u662f\u5565\u7248\u672c\u90fd\u8981\u6c42\u76f4\u63a5\u5f15\u7528\u8a72\u7a0b\u5f0f\u5eab\u7684\u5c08\u6848\u8981\u516c\u958b\uff08\u5118\u7ba1\u6709\u4e9b\u4eba\u53cd\u5c0d\uff09\u3002
If you are not directly linking against the GPL'd library, then your software should not need to be licensed as GPL.
Reference
\u4f46\u662f LGPL \u6216 GPL with classpath exception \u53ef\u4ee5\u5141\u8a31\u5f15\u7528\u5957\u4ef6\uff0c\u4f46\u662f\u4e0d\u5141\u8a31\u76f4\u63a5\u8907\u88fd\u8cbc\u4e0a\u9032\u7a0b\u5f0f\u78bc\u4e2d\u3002
There are less permissive licenses like the LGPL and the GPL with classpath exception that allow the code to be linked by any other code (so in Java terms, you can have dependencies with those licenses), but not embedded (or, more likely copy-pasted).
Reference
\u4e0b\u8868\u662f\u4e0d\u540c\u8a31\u53ef\u9593\u7684\u6bd4\u8f03\u3002
The easiest way to check all your npm dependency
\u5728\u591a\u500b Repo \u4e2d\u627e\u5230\u76f8\u4f9d\u5957\u4ef6\u662f\u5426\u6709\u4f7f\u7528 GPL \u7684\u7b56\u7565\u6703\u662f\uff1a
\u7528\u4e86\u54ea\u4e9b script \u627e\u8cc7\u6599\u3002
"},{"location":"essay/gpl-check/#npm","title":"NPM","text":"# data/derived/package.json.deps.txt has package name in second column, same as composer\n$ awk '{print $2}' data/derived/package.json.deps.txt \\\n | sort -u \\\n | xargs -P 8 -I{} bash -c 'curl \"https://registry.npmjs.org/{}/latest\" -s \\\n | jq -r '\"'\"'select(.name != null) | [.name, .license|tostring] | @tsv'\"'\"' \\\n | tee -a data/derived/package.json.deps.license.txt'\n
"},{"location":"essay/gpl-check/#composer","title":"Composer","text":"$ awk '{print $2}' data/derived/composer.json.deps.txt \\\n # \u907f\u514d\u7279\u5b9a vendor \u7684\u5957\u4ef6\n | grep -v '^104' \\\n # \u907f\u514d\u975e\u5957\u4ef6\u7684\u76f8\u4f9d\uff0c\u4f8b\u5982 php\n | grep '\\/' \\\n | sort -u \\\n | xargs -P 8 -I{} bash -c '\n curl \"https://repo.packagist.org/p2/$1.json\" -s \\\n | jq -r \".packages[] | to_entries | .[].value | select(.name != null) | [.name, .license|tostring] | @tsv\" \\\n | sed \"s/\\\",\\\"/\\\\t/g\" | sed \"s/\\\\[\\\"//\" | sed \"s/\\\"\\\\]//\" \\\n | tee -a data/derived/composer.json.deps.license.txt' - {}\n
"},{"location":"essay/gpl-check/#maven","title":"Maven","text":"Maven \u9700\u8981\u7684\u6b65\u9a5f\u6709\u9ede\u591a\uff0c\u5148\u53d6\u6700\u65b0\u7248\u672c\u518d\u53d6\u8a72\u7248\u672c\u7684 POM \u6a94\uff0c\u4ee5\u4e0b\u4ee5 org.springframework.boot
\u7684 spring-boot-starter-data-jpa
\u70ba\u4f8b\u3002
scripts/parse-pom.js \u8a73\u898b\u65bc\u6b64
$ base='https://repo1.maven.org/maven2'\n# \u4e0d\u662f `.` \u505a\u5340\u9694\u800c\u662f `/`\n$ project='org/springframework/boot'\n$ app='pring-boot-starter-data-jpa'\n# \u53d6\u5f97\u6307\u5b9a\u5957\u4ef6\u6700\u65b0\u7248\u672c\n$ curl -s \"$base/$project/$app/maven-metadata.xml\" \\\n | grep '<latest>' \\\n # \u79fb\u9664 <latest>2.7.1</latest> \u7684 tag\n | cut -c 13- | rev | cut -c 10- | rev\n2.7.1\n\n# \u53d6\u8a72\u7248\u672c\u7684 POM \u6a94\n$ curl \"$base/$project/$app/2.7.1/$app-2.7.1.pom\" \\\n | node scripts/parse-pom.js\norg.springframework.boot pring-boot-starter-data-jpa Apache-License-Version-2.0\n
\u4f9d\u7167\u4e0a\u9762\u7684\u908f\u8f2f\uff0c\u5c31\u53ef\u4ee5\u4f7f\u7528\u4e0b\u9762\u7684 script\uff1a
build.gradle
\u548c pom.xml
\u5dee\u4e0d\u591a\uff0c\u53ea\u6709\u7b2c\u4e00\u6b65\u7684\u7be9\u9078\u9700\u8981\u8abf\u4e00\u4e0b\uff0c pom.xml
\u53ea\u9700\u8981\u7be9\u9078 dep
\u5c31\u53ef\u4ee5
.
5. \u628a\u7d50\u679c\u4ee5 /
\u9023\u7d50$ file='data/derived/build.gradle.deps'\n$ filter='NF >= 4'\n$ filter=\"$filter && \\$2 ~ /.*dependency.*/\"\n$ filter=\"$filter && \\$3 !~ /(104|jar|androidx|com\\.cac\\.)/\"\n$ filter=\"$filter && \\$3 ~ /\\./\"\n$ awk \"$filter {print \\$3 \\\"/\\\" \\$4}\" \"$file.txt\" | \\\n sed 's/\\./\\//g' | \\\n sort -u > \"$file.trimmed.txt\"\n\n$ cat data/derived/build.gradle.deps.trimmed.txt | \\\n xargs -P 8 -I{} bash -c '\n curl -s \"$base/$1/maven-metadata.xml\" \\\n | grep \"<latest>\" \\\n | cut -c 13- | rev | cut -c 10- | rev \\\n | awk \"{print \\\"$1 \\\" \\$1}\" >> \"$file.latest.txt\"' - {}\n\n$ cat \"$file.latest.txt\" | \\\n awk '{print $1 \"/\" $2 \" \" $1 \"-\" $2 \".pom\"}' | \\\n sed 's/ .*\\//\\//g' | \\\n xargs -P 8 -I{} bash -c '\n curl \"$base/$1\" -s \\\n | node scripts/parse-pom.js \\\n >> \"$file.license.txt\"' - {}\n
"},{"location":"essay/gpl-check/#\u7d50\u679c","title":"\u7d50\u679c","text":"\u67e5\u627e\u7d50\u679c
"},{"location":"essay/gpl-check/#npm_1","title":"NPM","text":"build.gradle
\u548c pom.xml
\u90fd\u8981\u8dd1\u5b8c\u3002
Nginx using calendar versioning, and it release stable version every 2 years.
If you are wondering what changes between 1.18 and 1.20 then you can see all changes in 1.19. The reason 1.22 has additional version (1.22.1) is because CVE (CVE-2022-41741, CVE-2022-41742)
Message prefix \ud83d\udc41\ufe0f is change that I think it is important.
You can grep the messages by raw changes: by-versions or by structured: by-module/by-protocols/others.
"},{"location":"essay/nginx-changelog/#global","title":"Global","text":"Security:
resolver
directive was used, allowing an attacker who is able to forge UDP packets from the DNS server to cause worker process crash or, potentially, arbitrary code execution (CVE-2021-23017). 1.21.0Feature:
min_free
parameter of the proxy_cache_path
, fastcgi_cache_path
, scgi_cache_path
, and uwsgi_cache_path
directives. Thanks to Adam Bambuch. 1.19.1userid_flags
directive. 1.19.3proxy_cookie_flags
directive. 1.19.3proxy_cookie_flags
directive can now contain variables. 1.19.8$connection_time
variable. 1.19.10keepalive_time
directive. 1.19.10Bugfix:
negative size buf in writer
alerts might appear in logs if a memcached server returned a malformed response. 1.19.1large_client_header_buffers
sizes were used in different virtual servers. 1.19.2[crit] cache file ... has too long header
messages might appear in logs if caching was used and the backend returned responses with the Vary
header line. 1.19.3stale-if-error
cache control extension was erroneously applied if backend returned a response with status code 500, 502, 503, 504, 403, 404, or 429. 1.19.3upstream sent frame for closed stream
errors might occur when working with gRPC backends. 1.19.5GET http://example.com?args HTTP/1.0
. 1.19.6no live upstreams
errors if a server
inside upstream
block was marked as down
. 1.19.6add_trailer
directive. 1.19.7return
directive was used with the image_filter
or xslt_stylesheet
directives. 1.19.7zero size buf in output
alerts might appear in logs if an upstream server returned an incorrect response during unbuffered proxying; the bug had appeared in 1.19.1. 1.19.7auth_delay
or limit_req
delay, or when working with backends. 1.19.9\"
, <
, >
, \\
, ^
, ``,
{,
|, and
}` characters when proxying with changed URI. 1.21.1info
level instead of error
; the bug had appeared in 1.21.1. 1.21.4$content_length
variable when using chunked transfer encoding. 1.21.4Connection: keep-alive
header line in responses during graceful shutdown of old worker processes. 1.21.6EPOLLEXCLUSIVE
on Linux client connections were unevenly distributed among worker processes. 1.21.6Change:
keepalive_requests
directive was changed to 1000. 1.19.10Host
request header line. 1.21.1Content-Length
and Transfer-Encoding
header lines are present in the request. 1.21.1Transfer-Encoding
header line. 1.21.2sendfile_max_chunk
directive was changed to 2 megabytes. 1.21.4Workaround:
[crit] SSL_write() failed
messages might appear in logs when using OpenSSL 1.1.1. 1.19.3gzip filter failed to use preallocated memory
alerts appeared in logs when using zlib-ng. 1.19.10Grouped by modules.
Bugfix:
mp4_start_key_frame
directive in the ngx_http_mp4_module. Thanks to Tracey Jaquith. 1.21.4Feature:
fastopen
parameter of the listen
directive in the stream module. Thanks to Anbang Wen. 1.21.0SSL_sendfile()
when using OpenSSL 3.0. 1.21.4ssl_alpn
directive in the stream module. 1.21.4proxy_half_close
directive in the stream module. 1.21.4Feature:
proxy_smtp_auth
directive in mail proxy. 1.19.4proxy_protocol
parameter of the listen
directive, the proxy_protocol
and set_real_ip_from
directives in mail proxy. 1.19.8max_errors
directive in the mail proxy module. 1.21.0Bugfix:
Grouped by protocols.
"},{"location":"essay/nginx-changelog/#ssl","title":"SSL","text":"Feature:
ssl_reject_handshake
directive. 1.19.4ssl_conf_command
, proxy_ssl_conf_command
, grpc_ssl_conf_command
, and uwsgi_ssl_conf_command
directives. 1.19.4proxy_ssl_certificate
, proxy_ssl_certificate_key
grpc_ssl_certificate
, grpc_ssl_certificate_key
, uwsgi_ssl_certificate
, and uwsgi_ssl_certificate_key
directives. 1.21.0Auth-SSL-Protocol
and Auth-SSL-Cipher
header lines are now passed to the mail proxy authentication server. Thanks to Rob Mueller. 1.21.2$ssl_alpn_protocol
variable. 1.21.4$ssl_curve
variable. 1.21.5Bugfix:
ssl_ocsp
directive. 1.19.1SSL_shutdown() failed (SSL: ... bad write retry)
messages might appear in logs. 1.19.2ssl_ocsp
directive was used. 1.19.2SSL_shutdown() failed (SSL: ... bad write retry)
messages might appear in logs; the bug had appeared in 1.19.2. 1.19.3@SECLEVEL=N
in the ssl_ciphers
directive. 1.21.2ssl_session_ticket_key
when using TLSv1.3. 1.21.6Change:
Bugfix:
upstream sent frame for closed stream
errors might occur when working with gRPC backends. 1.19.5Feature
Bugfix:
resolver
directive was not specified. 1.19.0upstream sent response body larger than indicated content length
errors might occur when working with gRPC backends; the bug had appeared in 1.19.1. 1.19.9Bugfix:
error_page
directive. 1.19.3keepalive_timeout 0
; the bug had appeared in 1.19.7. 1.19.8Content-Length
header line was not present in the request. 1.21.2aio_write
directive. 1.21.4sendfile
and aio
directives. 1.21.5Change:
lingering_close
, lingering_time
, and lingering_timeout
directives now work when using HTTP/2. 1.19.1http2_max_field_size
and http2_max_header_size
directives have been removed, the large_client_header_buffers
directive should be used instead. 1.19.7http2_recv_timeout
, http2_idle_timeout
, and http2_max_requests
directives have been removed, the keepalive_timeout
and keepalive_requests
directives should be used instead. 1.19.7Bugfix:
zero size buf in output
alerts might appear in logs if a FastCGI server returned an incorrect response; the bug had appeared in 1.19.1. 1.19.2Change:
from 1.19.0 to 1.22.1(stable)
"},{"location":"essay/nginx-changelog/#1216","title":"1.21.6","text":"\ud83d\udcc6 25 Jan 2022
\ud83d\udcc6 28 Dec 2021
\ud83d\udcc6 02 Nov 2021
\ud83d\udcc6 07 Sep 2021
\ud83d\udcc6 31 Aug 2021
\ud83d\udcc6 06 Jul 2021
\ud83d\udcc6 25 May 2021
\ud83d\udcc6 13 Apr 2021
\ud83d\udcc6 30 Mar 2021
\ud83d\udcc6 09 Mar 2021
\ud83d\udcc6 16 Feb 2021
\ud83d\udcc6 15 Dec 2020
\ud83d\udcc6 24 Nov 2020
\ud83d\udcc6 27 Oct 2020
\ud83d\udcc6 29 Sep 2020
\ud83d\udcc6 11 Aug 2020
\ud83d\udcc6 07 Jul 2020
\ud83d\udcc6 26 May 2020
Node.js v14 \u7248\u5c07\u65bc 2023-04-30 \u8d77\u4e0d\u518d\u652f\u63f4\uff08EOL\uff09\uff0c \u800c v16 \u7248\u5c07\u65bc 2023-09-11 \u904e\u671f\uff0c \u7531\u65bc\u6642\u9593\u76f8\u5dee\u4e0d\u5927\uff0c\u52e2\u5fc5\u6703\u6709\u8a31\u591a\u4eba\u5f9e v14 \u76f4\u63a5\u5347\u5230 v18\uff082025-04-30\uff09\u3002
\u9019\u88e1\u6703\u5217\u51fa\u4e00\u4e9b\u9700\u8981\u6ce8\u610f\u7684\u9ede\u3002
\u9084\u6709\u5176\u4ed6\u5730\u65b9\u4e5f\u6709\u6458\u8981\u6574\u7406\u55ce\u7576\u7136\u6709\uff0c\u4f60\u9664\u4e86\u76f4\u63a5\u5403\u751f\u9b5a\u7247\uff1a
\u4e5f\u53ef\u4ee5\u5403\u5176\u4ed6\u4eba\u716e\u904e\u7684\uff1a
v14 \u5230 v18 \u652f\u63f4\u7684\u5354\u5b9a\u5f9e ES2019 \u5347\u5230 ES2023\uff0c \u4f46\u8981\u6ce8\u610f v14 \u4e26\u4e0d\u662f\u6bcf\u500b ES2019 \u4ee5\u4e0a\u7684\u529f\u80fd\u90fd\u4e0d\u652f\u63f4\uff0c \u4f8b\u5982 v14 \u652f\u63f4 private class method\uff0c\u4f46\u9019\u537b\u662f ES2022 \u624d\u958b\u59cb\u652f\u63f4\u7684 API\uff1a
class MyClass {\n #myPrivateField = 'this is private';\n}\n
\u8a73\u7d30\u7684\u5c0d\u7167\uff0c\u4f60\u53ef\u4ee5\u5230 node.green \u67e5\u770b\u3002
"},{"location":"essay/node-changelog-14-18/#v8","title":"V8","text":"Node.js \u6bcf\u6b21\u5347\u7248\u90fd\u6703\u66f4\u65b0 V8 \u7684\u7248\u672c\uff0c \u6240\u6709\u7248\u672c\u7684\u66f4\u65b0\u90fd\u53ef\u4ee5\u5230 Chrome road-map \u67e5\u770b\u3002 v14 \u4f7f\u7528\u7684\u7248\u672c\u662f 8.6\uff0c\u800c v18 \u5247\u662f 10.1\u3002
\u6240\u8b02 V8 10.1 \u7248\u672c\uff0c \u5c31\u662f\u5c0d\u61c9 Chrome 101 \u7248\uff0c\u8a73\u898b V8 version numbering scheme\u3002
V8 \u7684\u5347\u7248\u5927\u81f4\u5dee\u7570\u5728\u65bc\u5c0d ES \u7684\u9069\u61c9\u548c\u6548\u80fd\u7684\u8abf\u6821\u3002 \u5982\u679c\u4f60\u60f3\u8981\u77e5\u9053 V8 \u65b0\u589e\u6216\u8abf\u6574\u4e86\u54ea\u4e9b API \u4f60\u53ef\u4ee5\u900f\u904e\uff1a
git log branch-heads/A.B..branch-heads/X.Y include/v8\\*.h\n
\u4f86\u67e5\u770b\uff0c\u8a73\u898b api-changes\u3002
"},{"location":"essay/node-changelog-14-18/#typescript","title":"TypeScript","text":"TypeScript \u7684\u8a2d\u5b9a\u4e5f\u6703\u56e0\u70ba Node.js \u5347\u7248\u800c\u6709\u6539\u8b8a\uff0c\u5efa\u8b70\u53ef\u4ee5\u53c3\u8003\u5b98\u65b9\u63a8\u85a6\u7684\u8a2d\u5b9a\u6a94\uff1a
v14 \u4f7f\u7528\u7684 openssl \u7248\u672c\u662f v1.1.1\uff0c\u4f46\u662f v18 \u4f7f\u7528\u7684 openssl \u662f v3.0\uff0c \u76f8\u95dc\u5dee\u7570\u53ef\u4ee5\u770b openssl migration_guide\u3002
\u5c0d\u65bc\u7db2\u8def\u670d\u52d9\u4f86\u8aaa\uff0c\u6700\u9700\u8981\u6ce8\u610f\u7684\u61c9\u8a72\u662f TLS \u76f8\u95dc\u7684\u5dee\u7570\u3002 \u5728 v3.0 \u4e2d\uff0c\u9810\u8a2d\u6703\u62d2\u7d55 server \u4f7f\u7528\u4e0d\u5b89\u5168\u7684 renegotiation \u6a5f\u5236\uff0c \u8a73\u898b RFC-5736 TLS Renegotiation Extension\u3002 \u6211\u5011\u53ef\u4ee5\u900f\u904e openssl
\u7684\u6307\u4ee4\u6aa2\u67e5\u4f60\u7684\u670d\u52d9\u662f\u5426\u7b26\u5408\u9019\u500b\u5354\u5b9a\uff1a
$ openssl s_client -connect legacy-server.example.com:443\nCONNECTED(00000005)\n8056015BF87F0000:error:0A000152:SSL routines:final_renegotiate:unsafe legacy renegotiation disabled:ssl/statem/extensions.c:893:\n---\nno peer certificate available\n---\nNo client certificate CA names sent\n---\nSSL handshake has read 53 bytes and written 338 bytes\nVerification: OK\n---\nNew, (NONE), Cipher is (NONE)\nSecure Renegotiation IS NOT supported\nCompression: NONE\nExpansion: NONE\nNo ALPN negotiated\nSSL-Session:\n Protocol : TLSv1.2\n Cipher : 0000\n Session-ID: \n Session-ID-ctx: \n Master-Key: \n PSK identity: None\n PSK identity hint: None\n SRP username: None\n Start Time: 1681355997\n Timeout : 7200 (sec)\n Verify return code: 0 (ok)\n Extended master secret: no\n---\n
\u53ef\u4ee5\u6ce8\u610f\u5230 Secure Renegotiation IS NOT supported
\u9019\u500b\u8a0a\u606f\uff0c \u4ee3\u8868\u9019\u500b\u670d\u52d9\u4f7f\u7528\u4e0d\u5b89\u5168\u9023\u7dda\uff0c\u6240\u4ee5\u8acb\u6c42\u65b9\u62d2\u7d55\u9019\u6b21\u9023\u7dda\u3002 \u4e5f\u56e0\u6b64\u5982\u679c\u4f60\u7684\u74b0\u5883\u9084\u5728\u4f7f\u7528\u820a\u7248\u7684 TLS \u5be6\u4f5c\u6a5f\u5236\uff0c\u5c31\u9700\u8981\u66f4\u65b0\u6216\u8a2d\u5b9a\u3002
\u5982\u679c\u4f60\u900f\u904e tcpdump \u7684\u624b\u6bb5\u4f86\u53d6\u5f97\u5c01\u5305\u8cc7\u8a0a\u6642\uff0c \u4f60\u53ef\u4ee5\u5728 server hello \u7684\u5c01\u5305\u4e2d\uff0c\u770b\u5230\u4ed6\u7f3a\u5c11\u8a72 extension \u7684\u8cc7\u8a0a\u3002
Extension: renegotiation_info (len=1)\nType: renegotiation_info (65281)\nLength: 1\nRenegotiation Info extension\n Renegotiation info extension length: 0\n
\u5982\u679c\u74b0\u5883\u5f88\u96e3\u6539\u8b8a\uff0c\u53ef\u4ee5\u76f4\u63a5\u5728 HTTP client \u4e0a\u505a\u8abf\u6574\uff1a
import { constants } from 'node:crypto'\naxios.create({\n httpsAgent: new https.Agent({\n secureOptions: constants.SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION,\n }),\n});\n
\u4e5f\u53ef\u4ee5\u5728\u555f\u52d5\u7684\u6642\u5019\u9935\u7d66 OpenSSL \u8a2d\u5b9a\u6a94\uff1a
nodejs_conf = openssl_init\n\n[openssl_init]\nssl_conf = ssl_sect\n\n[ssl_sect]\nsystem_default = system_default_sect\n\n[system_default_sect]\nOptions = UnsafeLegacyRenegotiation\n
\u7136\u5f8c\u555f\u52d5 Node.js\uff1a
# \u4e5f\u53ef\u4ee5\u900f\u904e\u74b0\u5883\u8b8a\u6578 OPENSSL_CONF\uff0c\u4f46\u662f\u4e0b\u9762\u512a\u5148\u6b0a\u8f03\u9ad8\u3002\nnode --openssl-config=openssl.conf\n
"},{"location":"essay/node-changelog-14-18/#\u904e\u6642\u529f\u80fd","title":"\u904e\u6642\u529f\u80fd","text":"\u5b8c\u6574\u904e\u6642\uff08deprecated\uff09\u529f\u80fd\u7684\u5217\u8868\u53ef\u4ee5\u53c3\u7167\u5b98\u65b9\u6587\u4ef6\u3002 \u4f46\u8981\u6ce8\u610f\u9019\u500b\u6587\u4ef6\u5305\u542b\u6b77\u4f86\u6240\u6709\u904e\u6642\u529f\u80fd\uff0c\u81f3\u65bc v14 \u5230 v18 \u4e4b\u9593\u904e\u6642\u7684\u529f\u80fd\uff0c \u53ef\u4ee5\u900f\u904e\u6bd4\u5c0d v14 \u7684\u904e\u6642\u529f\u80fd\uff0c \u627e\u51fa\u90a3\u4e9b\u591a\u51fa\u4f86\u7684\u904e\u6642\u529f\u80fd\u5c31\u662f\u5f8c\u9762\u624d\u65b0\u589e\u7684\u3002
\u4f8b\u5982\uff1aDEP0153 dns.lookup
and dnsPromises.lookup
options type coercion\u3002
\u9019\u88e1\u5217\u51fa\u503c\u5f97\u6ce8\u610f\u7684\u9ede\uff1a
request.abort()
\u7684\u68c4\u7528\uff0c \u5efa\u8b70\u6539\u6210 request.destroy()
\u9019\u88e1\u6574\u7406\u4e00\u4e9b\u6709\u8da3\u7684\u65b0\u529f\u80fd\uff1a
import { setTimeout } from 'timers/promises';\nasync function run() {\n await setTimeout(5000);\n}\n
headersTimeout
\uff1a\u8b80\u53d6 HTTP Header \u8d85\u904e 60 \u79d2\u5f8c\u6703\u4e2d\u65b7\u9023\u7ddarequestTimeout
\uff1a\u8655\u7406 HTTP \u8acb\u6c42\u8d85\u904e 5 \u5206\u9418\u5f8c\u6703\u4e2d\u65b7\u9023\u7dda\u4e0b\u9762\u662f\u4e00\u4e9b\u6709\u8da3\u4f46\u9084\u5728\u958b\u767c\u968e\u6bb5\u7684\u529f\u80fd\uff1a
const myInit = {\n method: \"GET\",\n headers: {\n Accept: \"image/jpeg\",\n },\n mode: \"cors\",\n cache: \"default\",\n};\n\nfetch(new Request(\"flowers.jpg\"), myInit)\n
import test from 'node:test';\nimport assert from 'assert';\n\ntest('synchronous passing test', (t) => {\n // This test passes because it does not throw an exception.\n assert.strictEqual(1, 1);\n});\n
\u9019\u6b21\u5347\u7248\uff0c\u5e7e\u4e4e\u662f\u7121\u75db\u5347\u7248\u3002 \u4e5f\u56e0\u70ba\u5e73\u5e38\u6709\u5728\u7528\u975c\u614b\u898f\u5247\u548c\u55ae\u5143\u6e2c\u8a66\u4f86\u9a57\u8b49\uff0c\u6240\u4ee5\u5347\u7248\u7684\u6642\u5019\u4e5f\u8f03\u6709\u4fe1\u5fc3\u3002 \u5c31\u653e\u5fc3\u7d66\u5b83\u5347\u4e0a\u53bb\u5427\uff01
"},{"location":"essay/pls-sem/","title":"PLS-SEM\uff1a\u91cf\u5316\u62bd\u8c61\u6307\u6a19","text":"PLS-SEM \u662f\u4e00\u7a2e\u9a57\u8b49\u5047\u8a2d\u3001\u6578\u64da\u5316\u6982\u5ff5\u7684\u5de5\u5177\uff0c\u672c\u7bc7\u5c07\u89e3\u91cb\u5176\u4e2d\u7684\u610f\u7fa9\u548c\u7528\u6cd5\u3002
\u53c3\u7167
\u672c\u7bc7\u53c3\u7167 \u300cPartial Least Squares Structural Equation Modeling (PLS-SEM) Using R: A Workbook\u300d\u3002
\u4f5c\u8005\uff1aJoseph F. Hair Jr., G. Tomas M. Hult, Christian M. Ringle, Marko Sarstedt, Nicholas P. Danks, Soumya Ray
"},{"location":"essay/pls-sem/#\u7d50\u69cb\u8aaa\u660e","title":"\u7d50\u69cb\u8aaa\u660e","text":"\u5de6\u53f3\u5169\u908a\u5404\u6709\u4e00\u500b\u6a21\u578b\uff0c\u7a31\u4f5c \u6e2c\u91cf\u6a21\u578b\uff08measurement model\uff09\uff0c \u6bcf\u500b\u6a21\u578b\u7531\u69cb\u9762\uff08Y1
\u5230 Y4
\uff0cconstruct\uff09\u548c\u8b8a\u6578\uff08x1
\u5230 x10
\uff0cvariable\uff09\u7d44\u6210\u3002 \u4e2d\u9593\u7684\u6a21\u578b\u5247\u7a31\u4f5c \u7d50\u69cb\u6a21\u578b\uff08structural model\uff09\u3002
x1
\u5230 x10
\u90fd\u662f\u4e00\u7a2e\u6307\u6a19\u8b8a\u6578\uff08\u6216\u6f5b\u5728\u8b8a\u6578\u3001\u9805\u76ee\uff0cindicator variable, indicator, latent variable, item\uff09\uff1a
x1
\u5230 x6
\uff09\u7a31\u70ba\u5f62\u6210\u6027\u6307\u6a19 \uff08\u6216\u5916\u751f\u6f5b\u5728\u8b8a\u6578\uff0cformative indicator, exogenous latent variable\uff09\uff1bx7
\u5230 x9
\uff09\u7a31\u70ba\u53cd\u6620\u6027\u6307\u6a19 \uff08\u6216\u5167\u751f\u6f5b\u5728\u8b8a\u6578\uff0creflective indicator, endogenous latent variable\uff09\u3002\u7531\u4e0a\u95dc\u4fc2\u800c\u5f97\u7684\u5de6\u908a\u6a21\u578b\u5c31\u662f \u5f62\u6210\u6027\u6e2c\u91cf\u6a21\u578b\uff08formative measurement model\uff09\u3001 \u53f3\u908a\u5247\u662f \u53cd\u6620\u6027\u6e2c\u91cf\u6a21\u578b\uff08reflective measurement model\uff09\u3002
\u5f62\u6210\u6027\u6e2c\u91cf\u6a21\u578b\u4e2d\u69cb\u9762\u548c\u8b8a\u6578\u90fd\u6703\u88ab\u7528\u4f86\u89e3\u91cb\uff0c\u4f8b\u5982 x1
\u5230 x3
\u7528\u4f86\u89e3\u91cb Y1
\u3001Y1
\u7528\u4f86\u89e3\u91cb Y2
\uff1b \u53cd\u4e4b\uff0c\u53cd\u6620\u6027\u6e2c\u91cf\u6a21\u578b\u4ea6\u5982\u662f\u3002\u800c\u76f8\u5c0d
\u7576\u69cb\u9762\u6216\u8b8a\u6578\u9700\u8981\u548c\u5176\u4ed6\u9805\u76ee\u5171\u8b8a\u6642\uff0c\u5c31\u6703\u6709\u8aa4\u5dee\uff08error terms\uff0ce7
\u5230 e9
\u548c z3
\u5230 z4
\uff09\uff0c \u9019\u662f\u56e0\u70ba\u5728\u5617\u8a66\u300c\u8a08\u7b97\u300d\uff08\u6216\u5171\u8b8a\uff09\u6642\uff0c\u5fc5\u7136\u6703\u56e0\u70ba\u591a\u7b46\u6578\u64da\u9593\u7684\u5dee\u7570\u800c\u7522\u751f\u8aa4\u5dee\u3002 \u800c\u5f62\u6210\u6027\u6e2c\u91cf\u6a21\u578b\u56e0\u70ba\u662f\u7528\u4f86\u89e3\u91cb\u69cb\u9762\uff0c\u6240\u4ee5\u6700\u7d42\u7522\u751f\u7684\u662f\u5404\u500b\u8b8a\u6578\u89e3\u91cb\u69cb\u9762\u6642\u7684\u91cd\u8981\u6027\u3002 \u63db\u53e5\u8a71\u8aaa\uff0c\u5f62\u6210\u6027\u6e2c\u91cf\u6a21\u578b\u7684\u8b8a\u6578\u5f7c\u6b64\u662f\u7368\u7acb\u7684\u6240\u4ee5\u4e0d\u6703\u7522\u751f\u8aa4\u5dee\uff0c \u800c\u53cd\u6620\u6027\u6e2c\u91cf\u6a21\u578b\u7684\u8b8a\u6578\u5f7c\u6b64\u662f\u76f8\u4f9d\u7684\u6240\u4ee5\u6703\u7522\u751f\u8aa4\u5dee\u3002
\u6700\u5f8c Y4
\u56e0\u70ba\u53ea\u6709\u4e00\u500b\u6307\u6a19\u6240\u4ee5\u6307\u6a19\u548c\u69cb\u9762\u7684\u95dc\u4fc2\u4e26\u975e\u55ae\u5411\u7684\uff0c\u800c\u662f\u540c\u6642\u7528\u4f86\u300c\u89e3\u91cb\u300d\u548c\u300c\u8a08\u7b97\u300d\u3002
\u6e2c\u91cf\u7406\u8ad6\uff08measurement variable\uff09\u5c31\u662f\u91dd\u5c0d\u300c\u5982\u4f55\u8a08\u7b97\u51fa\u8b8a\u6578\u548c\u69cb\u9762\u300d\u800c\u767c\u5c55\u7684\u7406\u8ad6\u3002
\u7576\u5047\u8a2d\u5efa\u7acb\u6642\uff0c\u7a76\u7adf\u8981\u4f7f\u7528\u53cd\u6620\u6027\u6216\u5f62\u6210\u6027\u69cb\u9762\uff0c\u9084\u6709\u8981\u4f7f\u7528\u591a\u500b\u6216\u55ae\u500b\u8b8a\u6578\u6642\uff0c\u662f\u5efa\u7acb\u6a21\u578b\u6642\u7684\u57fa\u790e\u3002 \u63db\u53e5\u8a71\u8aaa\uff0c\u69cb\u9762\u7684\u9806\u5e8f\u548c\u4f4d\u7f6e\u662f\u4f9d\u8cf4\u65bc\u5047\u8a2d\u6216\u8005\u7814\u7a76\u54e1\u7684\u7d93\u9a57\u548c\u77e5\u8b58\u3002
"},{"location":"essay/pls-sem/#\u6bd4\u8f03-cb-sem","title":"\u6bd4\u8f03 CB-SEM","text":"\u4f86\u6e90\u9019\u6bb5\u63d0\u5230\u4e86\u5f88\u591a\u300c\u7814\u7a76\u8868\u660e\u300d\uff0c\u9084\u6709\u9810\u8a2d\u6027\u8a00\u8ad6\uff0c\u4f8b\u5982\u300c\u8a31\u591a\u4f86\u6e90\u90fd\u6703\u5c0e\u81f4\u8a08\u91cf\u4e0d\u78ba\u5b9a\u6027\u300d\uff0c \u5efa\u8b70\u53c3\u7167\u8ad6\u6587\u4e2d 1.3 \u7ae0\u300cPLS-SEM and CB-SEM\u300d\u7684\u76f8\u95dc\u9023\u7d50\u3002
\u611f\u60f3
\u500b\u4eba\u8a8d\u70ba\u9019\u6bb5\u662f\u9019\u7bc7\u6587\u7ae0\u7684\u91cd\u9ede\uff0cPLS-SEM \u6709\u5f88\u591a\u5de5\u5177\u53ef\u4ee5\u5be6\u73fe\uff0c\u7db2\u8def\u4e0a\u4e5f\u6709\u5f88\u591a\u5982\u4f55\u64cd\u4f5c\u7684\u8aaa\u660e\uff0c \u4f46\u662f\u5176\u6838\u5fc3\u7684\u50f9\u503c\u4ee3\u8868\u8457\u4ec0\u9ebc\uff1f
\u9019\u4e5f\u662f\u672c\u6bb5\u843d\u5617\u8a66\u8aaa\u660e\u7684\u6771\u897f\u3002
PLS-SEM \u548c CB-SEM \u4e4b\u9593\u7684\u4e00\u500b\u95dc\u9375\u6982\u5ff5\u5dee\u7570\u5728\u65bc\u6bcf\u7a2e\u65b9\u6cd5\u8655\u7406\u6a21\u578b\u4e2d\u6f5b\u5728\u8b8a\u6578\u7684\u65b9\u5f0f\u3002
CB-SEM \u4ee3\u8868\u4e86\u4e00\u7a2e\u57fa\u65bc\u5171\u540c\u56e0\u5b50\u7684 SEM \u65b9\u6cd5\uff0c\u5176\u5c07\u69cb\u9762\u8996\u70ba\u89e3\u91cb\u76f8\u95dc\u6307\u6a19\u4e4b\u9593\u5171\u8b8a\u7684\u5171\u540c\u56e0\u5b50\u3002 \u9019\u7a2e\u65b9\u6cd5\u8207\u53cd\u6620\u6027\u6e2c\u91cf\u6a21\u578b\u7684\u7406\u5ff5\u4e00\u81f4\uff0c\u63db\u53e5\u8a71\u8aaa\uff0c\u6307\u6a19\u53ca\u5176\u5171\u8b8a\u88ab\u8996\u70ba\u69cb\u9762\u7684\u8868\u73fe\u5f62\u5f0f\u3002 \u539f\u5247\u4e0a\uff0cCB-SEM \u4e5f\u53ef\u4ee5\u8a2d\u8a08\u6210\u5f62\u6210\u6027\u6e2c\u91cf\u6a21\u578b\uff0c\u7136\u800c\uff0c\u8981\u9054\u6210\u9019\u500b\u76ee\u7684\uff0c\u9700\u8981\u65bd\u52a0\u7279\u5b9a\u9650\u5236\u3002 \u5982\u5b78\u8005\u6240\u6307\u51fa\u7684\uff1a\u300c\u9019\u4e9b\u9650\u5236\u901a\u5e38\u8207\u7406\u8ad6\u8003\u91cf\u76f8\u77db\u76fe\uff0c\u56e0\u6b64\u6703\u5f15\u767c\u51fa\u4e00\u500b\u554f\u984c\uff1a\u6a21\u578b\u8a2d\u8a08\u662f\u5426\u61c9\u8a72\u5f15\u5c0e\u5047\u8a2d\u6216\u7406\u8ad6\uff0c\u53cd\u4e4b\u4ea6\u7136\u300d\u3002
\u53e6\u4e00\u65b9\u9762\uff0cPLS-SEM \u611f\u8208\u8da3\u7684\u5047\u8a2d\u53ef\u4ee5\u4f5c\u70ba\u7d44\u5408\u9032\u884c\u6e2c\u91cf\uff0c\u9019\u5c31\u662f\u70ba\u4ec0\u9ebc PLS \u88ab\u8a8d\u70ba\u662f\u4e00\u7a2e\u57fa\u65bc\u7d44\u5408\u7684 SEM \u65b9\u6cd5\u3002 \u5728 PLS-SEM \u4e2d\uff0c\u6a21\u578b\u4f30\u8a08\u662f\u4ee5\u7dda\u6027\u7d44\u5408\u65b9\u5f0f\u6574\u5408\u6307\u6a19\u4e26\u4f9d\u6b64\u6e2c\u91cf\u6a21\u578b\uff0c \u9019\u4e9b\u7d44\u5408\u7684\u6307\u647d\u662f\u5c0d\u69cb\u9762\u7684\u5b8c\u6574\u4ee3\u8868\uff0c\u56e0\u6b64\u6210\u70ba\u4e86\u5047\u8a2d\u7684\u6709\u6548\u4ee3\u7406\u3002 \u57fa\u65bc\u7d44\u5408\u7684\u65b9\u6cd5\u8207\u5f62\u6210\u6027\u6e2c\u91cf\u7684\u6e2c\u91cf\u7406\u5ff5\u4e00\u81f4\uff0c\u4f46\u9019\u4e26\u4e0d\u610f\u5473\u8457 PLS-SEM \u50c5\u80fd\u5920\u4f30\u8a08\u5f62\u6210\u7684\u69cb\u9762\u3002 \u539f\u56e0\u5728\u65bc\u4f30\u8a08\u89c0\u9ede\uff08\u5373\u5f62\u6210\u7d44\u5408\u4ee5\u4ee3\u8868\u6982\u5ff5\uff09\u4e0d\u61c9\u8207\u6e2c\u91cf\u7406\u8ad6\u89c0\u9ede\uff08\u5373\u6307\u5b9a\u6a21\u578b\u70ba\u53cd\u6620\u6027\u6216\u5f62\u6210\u6027\uff09\u6df7\u6dc6\u3002
\u7531\u6b64\u53ef\u77e5\uff0cPLS \u91cb\u653e\u4e86 CB-SEM \u7684\u5f37\u5047\u8a2d\uff0c\u5373\u6240\u6709\u6307\u6a19\u96c6\u4e4b\u9593\u7684\u5171\u8b8a\u7531\u4e00\u500b\u5171\u540c\u56e0\u5b50\u89e3\u91cb\u3002 \u540c\u6642\uff0c\u4f7f\u7528\u6307\u6a19\u7684\u52a0\u6b0a\u7d44\u5408\u6709\u52a9\u65bc\u8003\u616e\u6e2c\u91cf\u8aa4\u5dee\uff0c \u56e0\u6b64\u4f7f\u5f97 PLS-SEM \u6bd4\u4f7f\u7528\u7e3d\u5206\u7684\u591a\u5143\u8ff4\u6b78\uff08multiple regression using sum scores\uff09\u66f4\u512a\u8d8a\uff0c\u5176\u4e2d\u6bcf\u500b\u6307\u6a19\u90fd\u88ab\u7b49\u540c\u52a0\u6b0a\u3002
\u503c\u5f97\u6ce8\u610f\u7684\u662f\uff0cPLS-SEM \u7522\u751f\u7684\u7d44\u5408\u4e26\u4e0d\u88ab\u5047\u5b9a\u70ba\u8207\u5b83\u5011\u6240\u4ee3\u8868\u7684\u7406\u8ad6\u6982\u5ff5\u76f8\u540c\uff0c\u5b83\u5011\u88ab\u660e\u78ba\u5730\u8996\u70ba\u8fd1\u4f3c\u503c\u3002 \u56e0\u6b64\uff0c\u4e00\u4e9b\u5b78\u8005\u8a8d\u70ba CB-SEM \u662f\u4e00\u7a2e\u66f4\u76f4\u63a5\u548c\u7cbe\u78ba\u7684\u65b9\u6cd5\u4f86\u5be6\u8b49\u6e2c\u91cf\u7406\u8ad6\u6982\u5ff5\uff0c\u800c PLS-SEM \u5247\u63d0\u4f9b\u4e86\u8fd1\u4f3c\u503c\u3002 \u7136\u800c\uff0c\u5176\u4ed6\u5b78\u8005\u537b\u4e0d\u8a8d\u540c\uff0c\u56e0\u70ba\u5728 CB-SEM \u4e2d\u884d\u751f\u7684\u5171\u540c\u56e0\u5b50\u4e5f\u4e0d\u4e00\u5b9a\u7b49\u540c\u65bc\u7814\u7a76\u7684\u7406\u8ad6\u6982\u5ff5\uff0c \u7814\u7a76\u4e5f\u8868\u660e\uff0c\u5171\u540c\u56e0\u5b50\u6a21\u578b\u53ef\u80fd\u5b58\u5728\u76f8\u7576\u5927\u7684\u8a08\u91cf\u4e0d\u78ba\u5b9a\u6027\uff08metrological uncertainty\uff09\u3002
\u8a08\u91cf\u4e0d\u78ba\u5b9a\u6027\u662f\u6307\u53ef\u4ee5\u6b78\u56e0\u65bc\u88ab\u6e2c\u91cf\u7684\u5c0d\u8c61\u6216\u6982\u5ff5\u7684\u6e2c\u91cf\u503c\u7684\u5206\u6563\u7a0b\u5ea6\u3002 \u8a31\u591a\u4f86\u6e90\u90fd\u6703\u5c0e\u81f4\u8a08\u91cf\u4e0d\u78ba\u5b9a\u6027\uff0c\u5982\u5b9a\u7fa9\u6027\u7684\u4e0d\u78ba\u5b9a\u6216\u8207\u8a2d\u8a08\u6e2c\u91cf\u5c3a\u5ea6\u6642\u7684\u9650\u5236\uff0c\u9019\u9060\u9060\u8d85\u51fa\u4e86 CB-SEM \u5206\u6790\u6240\u7522\u751f\u7684\u7c21\u55ae\u6a19\u6e96\u8aa4\u5dee\u3002 \u56e0\u6b64\uff0c\u4e0d\u78ba\u5b9a\u6027\u662f\u9a57\u8b49\u6e2c\u91cf\u5408\u6cd5\u6027\u7684\u5a01\u8105\uff0c\u5c0d\u7814\u7a76\u7d50\u679c\u7684\u53ef\u91cd\u8907\u6027\u7522\u751f\u4e0d\u826f\u5f71\u97ff\u3002
\u96d6\u7136\u4e0d\u78ba\u5b9a\u6027\u4e5f\u9069\u7528\u65bc\u57fa\u65bc\u7d44\u5408\u7684SEM\uff0c\u4f46\u7814\u7a76\u4eba\u54e1\u5728 CB-SEM \u5206\u6790\u4e2d\u8655\u7406\u6a21\u578b\u7684\u65b9\u5f0f\u901a\u5e38\u6703\u5c0e\u81f4\u4e0d\u78ba\u5b9a\u6027\u660e\u986f\u589e\u52a0\u3002 \u66f4\u78ba\u5207\u5730\u8aaa\uff0c\u70ba\u4e86\u6539\u5584\u6a21\u578b\u9069\u914d\u5ea6\uff0c\u7814\u7a76\u4eba\u54e1\u901a\u5e38\u6703\u6e1b\u5c11\u6bcf\u500b\u69cb\u9762\u7684\u6307\u6a19\u6578\u91cf\uff0c\u9019\u53cd\u904e\u4f86\u6703\u589e\u52a0\u4e0d\u78ba\u5b9a\u6027\u3002
\u9019\u4e9b\u554f\u984c\u4e0d\u4e00\u5b9a\u610f\u5473\u8457\u7d44\u5408\u6a21\u578b\u66f4\u512a\u8d8a\uff0c \u4f46\u5b83\u5011\u5c0d\u65bc\u67d0\u4e9b\u7814\u7a76\u4eba\u54e1\u8a8d\u70ba CB-SEM \u5728\u8861\u91cf\u4e0d\u53ef\u89c0\u5bdf\u6982\u5ff5\u6642\u80fd\u5920\u5efa\u69cb\u51fa\u6a19\u6e96\u7684\u5047\u8a2d\uff0c\u63d0\u51fa\u4e86\u76f8\u7576\u5927\u7684\u8cea\u7591\u3002 \u4e8b\u5be6\u4e0a\uff0c\u5404\u500b\u79d1\u5b78\u9818\u57df\u7684\u7814\u7a76\u4eba\u54e1\u9010\u6f38\u610f\u8b58\u5230\uff0c\u5171\u540c\u56e0\u5b50\u53ef\u80fd\u4e26\u4e0d\u7e3d\u662f\u8861\u91cf\u6982\u5ff5\u7684\u6b63\u78ba\u65b9\u6cd5\u3002 \u540c\u6a23\u5730\uff0c\u7814\u7a76\u8868\u660e\uff0c\u4f7f\u7528\u7e3d\u5206\u53ef\u4ee5\u986f\u8457\u589e\u52a0\u8a08\u91cf\u4e0d\u78ba\u5b9a\u5ea6\uff0c\u9019\u5c0d\u9019\u7a2e\u6e2c\u91cf\u65b9\u6cd5\u63d0\u51fa\u4e86\u8cea\u7591\u3002
\u9664\u4e86\u5728\u6e2c\u91cf\u54f2\u5b78\u4e0a\u7684\u5dee\u7570\u4e4b\u5916\uff0c\u6f5b\u5728\u8b8a\u6578\u7684\u4e0d\u540c\u8655\u7406\uff0c\u66f4\u5177\u9ad4\u5730\u8aaa\uff0c\u69cb\u9762\u5206\u6578\u7684\u53ef\u7528\u6027\u4e5f\u5c0d\u65b9\u6cd5\u7684\u61c9\u7528\u7bc4\u570d\u7522\u751f\u4e86\u5f8c\u679c\u3002 \u5177\u9ad4\u800c\u8a00\uff0c\u5728 CB-SEM \u6846\u67b6\u5167\u4f30\u8a08\u6f5b\u5728\u8b8a\u6578\u5206\u6578\u662f\u53ef\u80fd\u7684\uff0c\u4f46\u9019\u4e9b\u4f30\u8a08\u5206\u6578\u4e26\u4e0d\u662f\u552f\u4e00\u7684\u3002 \u4e5f\u5c31\u662f\u8aaa\uff0c\u53ef\u80fd\u6709\u7121\u9650\u591a\u7a2e\u4e0d\u540c\u7684\u6f5b\u5728\u8b8a\u6578\u5206\u6578\u96c6\u5408\uff0c\u5b83\u5011\u540c\u6a23\u9069\u7528\u65bc\u6a21\u578b\u3002 \u9019\u7a2e\u56e0\u7d20\uff08\u5206\u6578\uff09\u7684\u4e0d\u78ba\u5b9a\u6027\u7684\u4e00\u500b\u95dc\u9375\u7d50\u679c\u662f\uff0c\u5171\u540c\u56e0\u5b50\u8207\u6a21\u578b\u4e4b\u5916\u7684\u4efb\u4f55\u8b8a\u6578\u4e4b\u9593\u7684\u76f8\u95dc\u6027\u672c\u8eab\u5c31\u662f\u4e0d\u78ba\u5b9a\u7684\u3002 \u56e0\u6b64\uff0c\u9019\u7a2e\u9650\u5236\u4f7f\u5f97 CB-SEM \u975e\u5e38\u4e0d\u9069\u5408\u65bc\u9810\u6e2c\u3002
\u76f8\u53cd\uff0cPLS-SEM\u7684\u4e00\u500b\u4e3b\u8981\u512a\u52e2\u662f\uff0c\u4e00\u65e6\u5efa\u7acb\u4e86\u6307\u6a19\u6b0a\u91cd\uff0c\u5b83\u7e3d\u662f\u70ba\u6bcf\u500b\u7d44\u5408\u751f\u6210\u55ae\u4e00\u7279\u5b9a\u7684\uff08\u5373\u78ba\u5b9a\u7684\uff09\u5206\u6578\u3002 \u9019\u4e9b\u78ba\u5b9a\u7684\u5206\u6578\u662f\u88ab\u6e2c\u91cf\u7684\u7406\u8ad6\u7684\u4ee3\u7406\uff0c\u5c31\u50cf\u5171\u540c\u56e0\u5b50\u662f CB-SEM \u4e2d\u6982\u5ff5\u7684\u4ee3\u7406\u4e00\u6a23\u3002
\u4ec0\u9ebc\u662f\u300c\u4e0d\u78ba\u5b9a\u6027\u300d\u7576\u6578\u503c\u6bcf\u6b21\u8a08\u7b97\u7d50\u679c\u90fd\u4e0d\u4e00\u6a23\u6642\uff0c\u7a31\u70ba\u4e0d\u78ba\u5b9a\u6027\uff08indeterminancy\uff09\uff0c\u53cd\u4e4b\u5247\u7a31\u70ba\u78ba\u5b9a\u6027\uff08determinancy\uff09\u3002
\u5229\u7528\u9019\u4e9b\u4ee3\u7406\u4f5c\u70ba\u8f38\u5165\uff0cPLS-SEM \u4f7f\u7528\u6700\u5c0f\u5e73\u65b9\u8ff4\u6b78\uff08least squares regression\uff09\u7684\u65b9\u6cd5\uff0c \u76ee\u6a19\u662f\u6700\u5c0f\u5316\u5167\u751f\u69cb\u9762\u7684\u8aa4\u5dee\u9805\uff08\u5373\u6b98\u5dee\u65b9\u5dee\uff09\u3002 \u7c21\u800c\u8a00\u4e4b\uff0cPLS-SEM \u901a\u904e\u4f30\u8a08\u4fc2\u6578\uff08\u5373\u6a21\u578b\u4e2d\u7684\u8def\u5f91\u95dc\u4fc2\uff09\u7684\u65b9\u6cd5\uff0c\u65e8\u5728\u6700\u5927\u5316\u5167\u751f\u69cb\u9762\uff08\u5373\u7406\u8ad6\u7684\u76ee\u6a19\uff09\u7684 \\(R^2\\) \u503c\u3002 \u9019\u500b\u7279\u6027\u5be6\u73fe\u4e86 PLS-SEM \u7684\uff08\u6a23\u672c\u5167\uff09\u9810\u6e2c\u76ee\u6a19\uff0c\u56e0\u6b64\u7576\u7814\u7a76\u76ee\u6a19\u662f\u7406\u8ad6\u767c\u5c55\u548c\u89e3\u91cb\u8b8a\u7570\uff08\u69cb\u9762\u7684\u9810\u6e2c\uff09\u6642\uff0cPLS-SEM \u662f\u9996\u9078\u65b9\u6cd5\u3002 \u56e0\u6b64\uff0cPLS-SEM \u4e5f\u88ab\u8a8d\u70ba\u662f\u4e00\u7a2e\u57fa\u65bc\u8b8a\u7570\u7684 SEM \u65b9\u6cd5\u3002 \u5177\u9ad4\u800c\u8a00\uff0cPLS-SEM \u65b9\u6cd5\u7684\u908f\u8f2f\u662f\u4f7f\u7528\u6240\u6709\u6307\u6a19\u7684\u8b8a\u7570\u4f86\u4f30\u8a08\u6a21\u578b\u95dc\u4fc2\uff0c\u7279\u5225\u6ce8\u91cd\u5c0d\u4f9d\u8cf4\u8b8a\u6578 \uff08\u4f8b\u5982\u9019\u7bc7\uff09 \u7684\u9810\u6e2c\u3002
\u76f8\u6bd4\u4e4b\u4e0b\uff0cCB-SEM \u5c07\u7e3d\u8b8a\u7570\u62c6\u5206\u70ba\u4e09\u7a2e\u985e\u578b\uff1a\u5171\u540c\u3001\u552f\u4e00\u548c\u8aa4\u5dee\u8b8a\u7570\u3002 \u4f46\u50c5\u5229\u7528\u5171\u540c\u8b8a\u7570\uff08\u5373\u8207\u540c\u4e00\u6a21\u578b\u4e2d\u5176\u4ed6\u6307\u6a19\u5171\u4eab\u7684\u8b8a\u7570\uff09\u9032\u884c\u6a21\u578b\u4f30\u8a08\u3002 \u4e5f\u5c31\u662f\u8aaa\uff0cCB-SEM \u50c5\u89e3\u91cb\u6e2c\u91cf\u548c\u7d50\u69cb\u6a21\u578b\u6307\u6a19\u4e4b\u9593\u7684\u5354\u8b8a\uff0c\u4e26\u4e0d\u5c08\u6ce8\u65bc\u9810\u6e2c\u69cb\u9762\u7684\u4f9d\u8cf4\u8b8a\u6578\u3002
PLS \u8ff4\u6b78PLS-SEM \u8207\u53e6\u4e00\u7a2e\u6d41\u884c\u7684\u591a\u8b8a\u91cf\u6578\u64da\u5206\u6790\u6280\u8853\uff0cPLS \u8ff4\u6b78\uff0c\u76f8\u4f3c\u4f46\u4e26\u4e0d\u76f8\u7b49\u3002 PLS \u8ff4\u6b78\u662f\u4e00\u7a2e\u57fa\u65bc\u8ff4\u6b78\u7684\u65b9\u6cd5\uff0c\u5b83\u63a2\u7d22\u591a\u500b\u81ea\u8b8a\u6578\u8207\u55ae\u500b\u6216\u591a\u500b\u56e0\u8b8a\u6578\u4e4b\u9593\u7684\u7dda\u6027\u95dc\u4fc2\u3002 \u7136\u800c\uff0cPLS \u8ff4\u6b78\u8207\u5e38\u898f\u8ff4\u6b78\u6709\u6240\u4e0d\u540c\uff0c\u56e0\u70ba\u5728\u958b\u767c\u8ff4\u6b78\u6a21\u578b\u6642\uff0c\u8a72\u65b9\u6cd5\u900f\u904e\u4e3b\u8981\u7684\u591a\u81ea\u8b8a\u6578\u7d44\u5408\u5206\u6790\u4e2d\u63a8\u5c0e\u51fa\u7d44\u5408\u56e0\u5b50\u3002 \u800c PLS-SEM \u4f9d\u8cf4\u65bc\u9810\u5148\u6307\u5b9a\u7684\u69cb\u9762\u8207\u69cb\u9762\u548c\u69cb\u9762\u8207\u8b8a\u6578\u4e4b\u9593\u7684\u95dc\u4fc2\u7db2\u7d61\u3002
\u4e0b\u8868\u6bd4\u8f03\u4e86 PLS-SEM \u548c CB-SEM \u4e4b\u9593\u7684\u4e3b\u8981\u5dee\u7570\uff1a
\u7279\u5fb5 PLS-SEM CB-SEM \u54f2\u5b78 \u57fa\u65bc\u7d44\u5408 \u57fa\u65bc\u5171\u540c\u56e0\u5b50 \u6e2c\u91cf\u6a21\u578b \u69cb\u9762\u5206\u6578\u88ab\u8996\u70ba\u8fd1\u4f3c\u503c \u69cb\u9762\u88ab\u8996\u70ba\u5171\u540c\u56e0\u5b50 \u6a21\u578b\u4f30\u8a08 \u6700\u5c0f\u5e73\u65b9\u8ff4\u6b78 \u6700\u5927\u6982\u4f3c\u4f30\u8a08 \u5206\u6790\u65b9\u6cd5 \u8b8a\u7570\u91cf\u5206\u6790 \u5171\u8b8a\u91cf\u5206\u6790 \u8cc7\u6599\u985e\u578b \u7121\u5206\u4f48\u8981\u6c42 \u5e38\u614b\u5206\u4f48 \u7406\u8ad6\u767c\u5c55 \u5c0d\u8b8a\u7570\u7684\u89e3\u91cb\u548c\u9810\u6e2c \u5c0d\u65bc\u6f5b\u5728\u6982\u5ff5\u7684\u7cbe\u78ba\u6e2c\u91cf \u7406\u8ad6\u65b9\u5411 \u61c9\u7528\u65bc\u9810\u6e2c\u548c\u7406\u8ad6\u767c\u5c55 \u4e3b\u8981\u7528\u65bc\u6e2c\u91cf\u6a21\u578b\u7684\u9a57\u8b49\u548c\u7cbe\u78ba\u6e2c\u91cf \u8b8a\u7570\u89e3\u91cb \u91cd\u8996\u5c0d\u5167\u751f\u69cb\u9020\u7684\u8b8a\u7570\u7684\u89e3\u91cb \u8f03\u5c11\u95dc\u6ce8\u89e3\u91cb\u8b8a\u7570\uff0c\u66f4\u591a\u95dc\u6ce8\u6a21\u578b\u7684\u9069\u914d\u548c\u7d50\u69cb\u65b9\u7a0b\u5f0f\u6a21\u578b \u6a21\u578b\u8907\u96dc\u5ea6 \u5c0d\u65bc\u8907\u96dc\u6a21\u578b\u63d0\u4f9b\u8f03\u5f37\u7684\u9069\u7528\u6027 \u5728\u8907\u96dc\u6a21\u578b\u4e2d\u53ef\u80fd\u6703\u5c0e\u81f4\u8a08\u7b97\u4e0a\u7684\u6311\u6230"},{"location":"essay/pls-sem/#\u6ce8\u610f\u4e8b\u9805","title":"\u6ce8\u610f\u4e8b\u9805","text":"\u8a2d\u8a08 PLS-SEM \u6a21\u578b\u6642\u4e3b\u8981\u6709\u56db\u500b\u65b9\u5411\u7684\u8003\u91cf\uff1a
\u9078\u7528\u548c\u6536\u96c6\u539f\u59cb\u8cc7\u6599\u6642\uff0c\u8981\u6ce8\u610f\u4ec0\u9ebc\u3002
\u7d71\u8a08\u5b78\u4e0a\u901a\u5e38\u6703\u95dc\u6ce8\u4e00\u500b\u8b8a\u6578\u6216\u6307\u6a19\u7684\u6e2c\u91cf\u5c3a\u5ea6\uff08levels of measurement\uff09\u662f\u591a\u5c11\uff0c \u9019\u4e4b\u4e2d\u901a\u5e38\u6703\u6709\u56db\u500b\u7a2e\u985e\uff1a
\u91dd\u5c0d\u5047\u8a2d\u9032\u884c\u6a21\u578b\u7684\u5efa\u7f6e\u6642\uff0c\u8981\u6ce8\u610f\u4ec0\u9ebc\u3002
\u9032\u884c\u6f14\u7b97\u6cd5\u7684\u8a2d\u8a08\u548c\u6548\u7387\u8abf\u6821\u6642\uff0c\u8981\u6ce8\u610f\u4ec0\u9ebc\u3002
\u91dd\u5c0d\u7d50\u679c\u9032\u884c\u8a55\u4f30\u6642\uff0c\u6709\u4ec0\u9ebc\u6307\u6a19\u53ef\u4ee5\u6ce8\u610f\u7684\uff1a
\u5f88\u591a\u5f88\u96dc\uff0c\u6211\u5011\u63a5\u4e0b\u4f86\u6839\u64da\u5404\u6a21\u578b\u9069\u7528\u7684\u8a55\u4f30\u4f86\u8a0e\u8ad6\u3002
"},{"location":"essay/pls-sem/#\u53cd\u6620\u6027\u6e2c\u91cf\u6a21\u578b\u7684\u8a55\u4f30","title":"\u53cd\u6620\u6027\u6e2c\u91cf\u6a21\u578b\u7684\u8a55\u4f30","text":"\u4f9d\u5e8f\u9032\u884c\u56db\u7a2e\u8a55\u4f30\uff1a
\u6307\u6a19\u4fe1\u5ea6\u53ef\u4ee5\u900f\u904e\u6307\u6a19\u8ca0\u8f09\uff08indicator loading\uff09\u7684\u5e73\u65b9\u4f86\u7b97\u51fa\uff0c \u6307\u6a19\u8ca0\u8f09\u4ee3\u8868\u8457\u6307\u6a19\u548c\u69cb\u9762\u7684\u8b8a\u7570\u6578\u76f8\u95dc\u6027\uff1a
\\[\\begin{aligned} \\lambda = \\frac{\\text{Cov}(Y, \\eta)}{\\sqrt{\\text{Var}(\\eta)}} \\end{aligned}\\]\u5176\u4e2d \\(\\text{Cov}(Y, \\eta)\\) \u4ee3\u8868\u6307\u6a19\u548c\u6307\u6a19\u8b8a\u6578\u7684\u5171\u8b8a\u6578\u3001\\(\\text{Var}(\\eta)\\) \u4ee3\u8868\u6307\u6a19\u8b8a\u6578\u7684\u8b8a\u7570\u6578\u3002 \u4e00\u822c\u4f86\u8aaa\uff0c\u90fd\u6703\u671f\u671b\u6307\u6a19\u8ca0\u8f09\u9ad8\u65bc 0.708\uff0c\u9019\u6a23\u6307\u6a19\u4fe1\u5ea6\uff08\u5e73\u65b9\u5f8c\u7684\u7d50\u679c\uff09\u5c31\u6703\u56e0\u6b64\u5927\u65bc 0.5\u3002 \u90a3\u904e\u4f4e\u7684\u6307\u6a19\u8ca0\u8f09\u8a72\u600e\u9ebc\u8fa6\uff1f
\u5982\u679c\u5c0f\u65bc 0.4 \u7684\u6307\u6a19\uff0c\u56e0\u70ba\u76f8\u95dc\u6027\u592a\u4f4e\uff0c\u53ef\u4ee5\u79fb\u9664\u3002 \u4f46\u662f\u5982\u679c\u5927\u65bc 0.4 \u5c0f\u65bc 0.7\uff0c\u5c31\u5efa\u8b70\u53ea\u6709\u5728\u522a\u9664\u5f8c\u53ef\u4ee5\u63d0\u9ad8\u5167\u90e8\u4e00\u81f4\u6027\u4fe1\u5ea6\u6216\u6536\u6582\u7a69\u5b9a\u5ea6\u63d0\u9ad8\u5230\u4e00\u5b9a\u95a5\u503c\u5f8c\uff0c\u624d\u80fd\u522a\u9664\u3002 \u4e5f\u56e0\u70ba\u5176\u689d\u4ef6\u4e0b\uff0c\u4f4e\u4fe1\u5ea6\u7684\u6307\u6a19\u901a\u5e38\u4ecd\u88ab\u4fdd\u7559\u8457\u3002
"},{"location":"essay/pls-sem/#\u5167\u90e8\u4e00\u81f4\u6027\u4fe1\u5ea6","title":"\u5167\u90e8\u4e00\u81f4\u6027\u4fe1\u5ea6","text":""},{"location":"essay/questionnaire-principal/","title":"\u554f\u5377\u8a2d\u8a08\u6307\u5357","text":""},{"location":"essay/questionnaire-principal/#\u984c\u9805\u8a2d\u8a08\u7684\u539f\u5247","title":"\u984c\u9805\u8a2d\u8a08\u7684\u539f\u5247","text":"\u4e00\u984c\u591a\u554f
"},{"location":"essay/questionnaire-principal/#\u674e\u7279\u514b\u91cf\u5c3a","title":"\u674e\u7279\u514b\u91cf\u5c3a","text":"\u554f\u5377\u8cc7\u6599\u5eab
"},{"location":"essay/questionnaire-principal/#\u554f\u984c\u7684\u985e\u578b","title":"\u554f\u984c\u7684\u985e\u578b","text":"\u4f60\u6709\u591a\u5927\u7684\u610f\u9858\u5c07\u7522\u54c1\u63a8\u85a6\u7d66\u89aa\u670b\u597d\u53cb\uff1f
0~10 \u5206\uff1a
\u8ddf\u81ea\u5df1\u8cfd\u8dd1
"},{"location":"essay/questionnaire-principal/#\u6ce8\u610f","title":"\u6ce8\u610f","text":"\u6700\u95dc\u5fc3\u7684\u8b70\u984c\uff0c\u53ef\u80fd\u9700\u8981\u8cbb\u529b\u601d\u8003
\u5e0c\u671b\u586b\u7b54\u8005\u9032\u4e00\u6b65\u63a1\u53d6\u7684\u884c\u52d5
\u8996\u76ee\u7684\u800c\u5b9a\uff0c\u62bd\u734e\u3001\u79ae\u54c1\u53ef\u6709\u6548\u63d0\u5347\u586b\u7b54\u8005\u610f\u9858\u3002
\u5229\u7528 spreadsheet
\u3001excel
\u7b49\u5de5\u5177\u505a\u8349\u7a3f\uff0c\u65b9\u4fbf\u8a18\u9304\u4fee\u6539\u904e\u7a0b\u548c\u505a\u7559\u8a00\u3002
\u628a\u6b77\u4f86\u7684\u984c\u76ee\u3001\u9078\u9805\u5404\u4e00\u9801\uff0c\u65b9\u4fbf\u8a2d\u8a08\u65b0\u7684\u554f\u5377
"},{"location":"essay/questionnaire-principal/#\u6587\u6848","title":"\u6587\u6848","text":"\u6587\u6848\u5beb\u4f5c\uff0c\u6309\u7167\u65cf\u7fa4\u6027\u8cea\u8abf\u6574\u3002
"},{"location":"essay/questionnaire-principal/#\u554f\u5377\u5206\u6790","title":"\u554f\u5377\u5206\u6790","text":"\u5efa\u7acb container \u524d\uff0c\u9700\u8981\u5148\u5efa\u7acb image\uff0c\u7136\u800c\u9019\u6b65\u9a5f\u6703\u548c\u61c9\u7528\u7a0b\u5f0f\u7684\u9700\u6c42\u800c\u6709\u5f88\u5927\u7684\u4e0d\u540c\uff0c\u5728\u6b64\u8b39\u6982\u7565\u4ecb\u7d39\u4ee5 Node.js \u70ba\u80cc\u666f\u7684\u61c9\u7528\u7a0b\u5f0f\u3002
\u88fd\u4f5c image \u5206\u70ba\u4e09\u500b\u6b65\u9a5f\uff1a
\u4ee5 Node.js \u70ba\u4f8b\uff0c\u5247\u662f npm i
\u6216\u66f4\u7cbe\u7c21\u7684 npm ci --only=production
\u3002 \u5176\u4ed6\u5982\uff1a
composer install --no-dev --optimize-autoloader
pip install
bundle install --clean --without dev
Dockerfile \u662f Docker \u7528\u4f86\u5efa\u7acb image \u7684\u6307\u4ee4\u8868\uff0c\u985e\u4f3c Makefile\u3002 \u4ee5\u4e0b\u70ba Node.js \u5efa\u7acb\u76f8\u4f9d\u5957\u4ef6\u7684\u6307\u4ee4\u8868\uff1a
FROM node:lts-alpine AS deps\n\n# Change current folder to /srv\nWORKDIR /srv\nCOPY package*.json ./\nRUN npm ci --only=production\n
\u4e0a\u8ff0\u6bcf\u4e00\u884c\u90fd\u4ee3\u8868\u4e00\u500b Layer\uff0c\u800c\u6bcf\u4e00\u6b21\u547c\u53eb FROM
\uff0c\u5373\u4ee3\u8868\u5efa\u7acb\u4e00\u7d44 Stage\u3002
\u5728 Docker \u7684 Best Practice \u4e2d\u6703\u5efa\u8b70\u4f7f\u7528\u8d8a\u5c11 command \u8d8a\u597d\u5c31\u662f\u907f\u514d\u904e\u5927\u7684 layer
"},{"location":"essay/architecture/made-container/#\u6e96\u5099\u597d\u57f7\u884c\u61c9\u7528\u7a0b\u5f0f\u7684\u74b0\u5883","title":"\u6e96\u5099\u597d\u57f7\u884c\u61c9\u7528\u7a0b\u5f0f\u7684\u74b0\u5883","text":"\u5728\u57f7\u884c\u74b0\u5883\u4e2d\uff0c\u4e0d\u9700\u8981\u4e00\u4e9b Node.js \u7684\u7279\u5b9a\u529f\u80fd\uff0c\u5982 npm
\u3002
FROM node:lts-slim AS release\n
\u9664\u6b64\u4e4b\u5916\u4e5f\u53ef\u4ee5\u5728 Alpine \u74b0\u5883\u4e0b\u5efa\u7acb\u6975\u7c21\u7684 Node.js\uff0c\u8a73\u898b\u5be6\u4f5c\u7684\u7a0b\u5f0f\u78bc\u3002
\u6982\u5ff5\u5c31\u662f\u4e0b\u8f09 curl
\uff08Alpine \u7121 curl
\uff09\u518d\u4e0b\u8f09 Node.js \u5f8c\u522a\u9664\u4e0d\u5fc5\u8981\u6a94\u6848
\u66f4\u5b8c\u6574\u5167\u5bb9\u8a73\u898b Node.js \u63d0\u4f9b\u7684\u5efa\u7acb image \u7684\u6700\u4f73\u505a\u6cd5\u6307\u5f15
\u518d\u4f86\u5c31\u5269\u628a\u525b\u525b\u5728 deps
\u74b0\u5883\u4e2d\u5efa\u7acb\u7684\u76f8\u4f9d\u5957\u4ef6\u62c9\u904e\u4f86\uff1a
COPY --from=deps /srv/node_modules ./node_modules\nCOPY . .\n
\u8b66\u544a\uff1aCOPY . .
\u4ee3\u8868\u6703\u628a\u73fe\u5728\u672c\u5730\u7aef\u8cc7\u6599\u593e\u4e2d\u7684\u6240\u6709\u6a94\u6848\u8907\u88fd\u6b64 image \u4e2d\u3002 \u70ba\u4e86\u907f\u514d\u4e0d\u5fc5\u8981\u6a94\u6848\u88ab\u8907\u88fd\uff0c\u53ef\u65bc .dockerignore
\u4e2d\u8a2d\u5b9a
.dockerignore \u7bc4\u4f8b\uff1a
node_modules\nnpm-debug.log\nDockerfile\n.git\n.gitignore\n.eslintrc\n
"},{"location":"essay/architecture/made-container/#\u57f7\u884c\u61c9\u7528\u7a0b\u5f0f","title":"\u57f7\u884c\u61c9\u7528\u7a0b\u5f0f","text":"\u518d\u4f86\u5c31\u5269\u6e96\u5099\u8a2d\u5b9a\u6a94\u548c\u57f7\u884c\u7a0b\u5f0f\u4e86\uff1a
EXPOSE 1337\nENV HOST 0.0.0.0\nENV PORT 1337\nCMD [ \"node\", \"server.js\"\n
"},{"location":"essay/architecture/made-container/#\u5305\u88dd\u6210-container","title":"\u5305\u88dd\u6210 Container","text":"docker build -t example/server:v0.0.1 .\n
\u9019\u6642\u5c31\u53ef\u4ee5\u770b\u5230\u5404\u500b layer \u88ab\u57f7\u884c\u7684\u904e\u7a0b\u3002
Sending build context to Docker daemon 155.6kB\nStep 1/11 : FROM node:lts-alpine AS deps\n ---> 532fd65ecacd\n... TRUNCATED ...\nStep 11/11 : CMD [ \"node\", \"server.js\" ]\n ---> Running in d7bde6cfc4dc\nRemoving intermediate container d7bde6cfc4dc\n ---> a99750d85d81\nSuccessfully built a99750d85d81\n
"},{"location":"essay/architecture/made-container/#\u66f4\u65b0","title":"\u66f4\u65b0","text":"Docker Image \u5728\u5efa\u7acb\u6642\uff0c\u6703\u900f\u904e SHA \u503c\u9032\u884c\u66ab\u5b58\uff0c\u6240\u4ee5\u7576\u6709\u90e8\u5206\u6539\u52d5\u7684\u6642\u5019\u5c31\u4e0d\u9700\u8981\u5168\u90e8\u91cd\u65b0\u5efa\u7acb\u3002
SHA \u503c\u8a08\u7b97\u65b9\u5f0f\u662f\u4e0a\u4e00\u500b SHA \u503c\u52a0\u4e0a\u73fe\u884c\u7684\u6307\u4ee4\u7d44\u51fa\u4f86\u7684\u3002
\u4e5f\u5c31\u662f\u8aaa\uff0c\u82e5\u6539\u52d5\u7684\u50c5\u6709\u61c9\u7528\u7a0b\u5f0f\u7684\u7a0b\u5f0f\u78bc\uff0c\u5982 server.js
\uff0c\u5728\u91cd\u5efa image \u6642\u5c31\u50c5\u9700\u8981\u57f7\u884c COPY . .
\u4ee5\u5f8c\u7684\u4ee3\u78bc\u3002
\u76f8\u5c0d\u7684\uff0c\u7576 package.json \u6539\u8b8a\u6642\uff08\u5982 dependency \u589e\u52a0\uff09\u5c31\u9700\u8981\u5f9e deps
\u9019\u5c64 stage \u958b\u59cb\u5efa\u7acb\u8d77\u3002
\u900f\u904e docker history example/server:v0.0.1
\u53ef\u4ee5\u89c0\u770b\u5176\u5efa\u7acb\u6642\u7684\u8a18\u61b6\u9ad4\u7528\u91cf\u3002
v0.0.1
\u4ee3\u8868\u521d\u59cb\u7248\u672cv0.0.2
\u4ee3\u8868\u4fee\u6b63 server.js
v0.0.3
\u4ee3\u8868\u65b0\u589e\u5957\u4ef6\u672c\u8cc7\u6599\u4f86\u6e90\u65bc NIST 800-32 Ct.3
\u53ef\u80fd\u9700\u8981\u6e9d\u901a\u7684\u539f\u56e0\uff1a
certificate policy \u5b9a\u7fa9\u7c3d\u8b49\u7684\u653f\u7b56\uff0c\u4f8b\u5982\u8a72\u7528\u4ec0\u9ebc\u91d1\u9470\u7a2e\u985e\u3001\u9577\u5ea6\u3002\u80fd\u505a\u5230\u6aa2\u67e5\u7684\u6b65\u9a5f\uff0c\u5be6\u52d9\u4e0a\u50c5\u6709\u7c3d\u767c\u6642\u4f5c\u6aa2\u67e5\uff0c\u7136\u5f8c\u518d\u628a\u8cc7\u8a0a\u653e\u5728\u7c3d\u8b49\u4e0a\u3002
correctly configuring root certificate stores is a critical step in key management.
X.509 \u6703\u653e
\u9a57\u8b49\u904e\u7a0b
\u9a57\u8b49\u904e\u7a0b\u4e2d\u7684\u6bcf\u4e00\u6bb5\u90fd\u9700\u8981\u78ba\u8a8d\uff08path validation\uff09\uff1a
\u7c3d\u8b49\u7684\u72c0\u614b\u5c55\u793a\uff08\u7c3d\u8b49\u6c92\u88ab\u64a4\u92b7\uff09\u65b9\u5f0f\u6709\u5169\u7a2e\uff1a
\u82e5\u4e00\u958b\u59cb\u662f\u4f7f\u7528 key establishment \u505a\u7c3d\u8b49\uff0c\u8981\u53ef\u4ee5\u505a\u91d1\u9470\u7684\u56de\u5fa9\u3002
"},{"location":"essay/architecture/pki-checklist/#procurement-guidance","title":"Procurement Guidance","text":"\u6311\u9078 CA \u7522\u54c1\u7684 check list\u3002
"},{"location":"essay/architecture/pki-checklist/#cara-software-and-hardware","title":"CA/RA Software and Hardware","text":"\u7ba1\u7406\u8005\u61c9\u78ba\u4fdd\u4f7f\u7528\u7aef\u7684\u4eba\u63a5\u53d7\u5fc5\u8981\u8a13\u7df4\u548c\u516c\u53f8\u5b89\u5168\u653f\u7b56\u88ab\u57f7\u884c\u3002
"},{"location":"essay/architecture/pki-checklist/#certificate-issuance","title":"Certificate Issuance","text":"For federal agencies, detailed configuration guidance for OCSP responders is specified in Draft Guidance for OCSP Responders in the U.S. Federal PKI.17
\u5c0d\u65bc\u548c PKI \u7533\u8acb\u6b0a\u8b49\u7684\u4f7f\u7528\u8005\uff1a
Docker Desktop \u5728\u7279\u5b9a\u689d\u4ef6\u4e0b\u8981\u9322\u4e86\uff0c\u8a72\u7528\u4ec0\u9ebc\u53d6\u4ee3\uff1f
\u73fe\u6709\u5de5\u5177\uff1a
colima start --runtime containerd
\u4f86\u8abf\u6574\uff09\uff0c\u8b93\u4f60\u53ef\u4ee5\u5feb\u901f\u5efa\u7f6e\u74b0\u5883\u3002lima
, nerdctl
\uff09\u6574\u5408\u8d77\u4f86\u4e26\u63d0\u4f9b\u6307\u4ee4\u4ecb\u9762\u95dc\u65bc\u4ec0\u9ebc\u662f container runtime/engine \u6709\u4e00\u7bc7\u8d85\u6e05\u695a\u7684\u6587\u7ae0 A breakdown of container runtimes for Kubernetes and Docker\u3002
\u672c\u7bc7\u4ee5\u4e0b\u5167\u5bb9\u5c07\u4e0d\u518d\u9069\u7528
\u7531\u65bc\u8a31\u591a\u5de5\u5177\u5df2\u7d93\u958b\u6e90\uff08\u958b\u7bc7\u90a3\u6bb5\uff09\uff0c\u4f60\u4e0d\u9700\u8981\u9019\u9ebc\u8271\u96e3\u7684\u81ea\u5df1\u555f\u4e00\u500b VM \u4f86\u505a\u4e8b\uff0c\u6240\u4ee5\u9019\u7bc7\u6587\u7ae0\u4e0b\u9762\u4f60\u61c9\u8a72\u4e0d\u9700\u8981\u770b\u4e86\ud83d\ude02
\u2014 2022/11/28
\u4f60\u81ea\u5df1\u5efa\u7acb\u4e00\u500b VM\uff08Linux based\uff09\u53bb\u652f\u6490 Docker\uff0c\u9019\u4e5f\u662f\u672c\u7bc7\u7684\u91cd\u9ede\u3002
\u70ba\u4ec0\u9ebc\u8981 Docker \u8981\u7528 VM\uff1f
"},{"location":"essay/architecture/replace-docker-desktop/#\u79fb\u9664-docker-desktop","title":"\u79fb\u9664 Docker Desktop","text":"$ brew install docker\n# Optional: docker-compose\n$ brew install docker-compose\n
"},{"location":"essay/architecture/replace-docker-desktop/#\u6e96\u5099\u5de5\u5177","title":"\u6e96\u5099\u5de5\u5177","text":"brew install vagrant\nbrew install virtualbox\n
"},{"location":"essay/architecture/replace-docker-desktop/#provision","title":"Provision","text":"\u5efa\u7acb Vagrantfile\uff1a
# encoding: utf-8\n# -*- mode: ruby -*-\n# vi: set ft=ruby :\nVAGRANTFILE_API_VERSION = \"2\"\n\nVagrant.configure('2') do |config|\n # ubuntu 14.x\n # config.vm.box = 'ubuntu/trusty64'\n # ubuntu 16.x\n config.vm.box = 'ubuntu/xenial64'\n # ubuntu 18.x\n # config.vm.box = 'ubuntu/bionic64'\n # ubuntu 20.x\n # config.vm.box = 'ubuntu/focal64'\n\n # Optional: hostmanager\n config.hostmanager.enabled = true\n config.hostmanager.manage_host = true\n config.hostmanager.manage_guest = true\n config.hostmanager.include_offline = true\n config.vm.hostname = 'docker.local'\n\n # \u4efb\u4e00 IP \u5373\u53ef\n # \u672c\u6a5f\u8981\u9023\u7d50\u5230\u6b64 Docker \u9700\u8981\u5148\u6307\u5b9a\u4f4d\u7f6e\n # export DOCKER_HOST=tcp://192.168.66.4:2375\n # \u6216\u8005\u900f\u904e hostmanager \u6307\u5b9a\u7684 host name\n # export DOCKER_HOST=tcp://docker.local:2375\n # \u4f46\u662f\u9019\u6703\u9700\u8981\u66f4\u591a\u6642\u9593\u53bb\u8b93\u6a5f\u5668\u53bb\u8fa8\u8a8d IP\n config.vm.network 'private_network', ip: '192.168.66.4'\n\n # guest \u4ee3\u8868 VM port\uff0chost \u4ee3\u8868\u672c\u6a5f port\n config.vm.network 'forwarded_port', guest: 2375, host: 2375, id: 'dockerd'\n # \u4f7f\u7528 ID \u65b9\u4fbf\u8a18\u61b6\n config.vm.network 'forwarded_port', guest: 80, host: 80, id: 'http'\n # Protocol \u6709\u9700\u8981\uff0c\u8981\u6539\n config.vm.network 'forwarded_port', guest: 2000, host: 2000, id: 'xray', protocol: 'udp'\n\n config.vm.provision \"docker\"\n config.vm.provision 'shell', path: 'provision.sh'\nend\n
\u5efa\u7acb provision.sh
# Configure Docker to listen on a TCP socket\n# https://stackoverflow.com/a/42204921/12089368\n# https://dev.to/dhwaneetbhatt/run-docker-without-docker-desktop-on-macos-306h\nmkdir /etc/systemd/system/docker.service.d\n\necho '[Service]\nExecStart=\nExecStart=/usr/bin/dockerd --containerd=/run/containerd/containerd.sock' > /etc/systemd/system/docker.service.d/docker.conf\n\necho '{\n \"hosts\": [\"fd://\", \"tcp://0.0.0.0:2375\"]\n}' > /etc/docker/daemon.json\n\n# Reload configuration\nsystemctl daemon-reload\nsystemctl restart docker.service\n
"},{"location":"essay/architecture/replace-docker-desktop/#go","title":"Go","text":"\u5efa\u7acb VM
# Build VM + provision\n$ vagrant up\n# play with VM\n$ vagrant ssh\n# \u66f4\u65b0 IP \u8a2d\u5b9a\n$ vagrant reload\n
\u8a2d\u5b9a Docker Daemon \u8def\u5f91
# IP \u6216\u662f Host \u8a73\u898b\u4e0a\u9762\u7684 Vagrantfile\n$ export DOCKER_HOST=tcp://192.168.66.4:2375\n
\u958b\u59cb\u4f7f\u7528 Docker\uff01
"},{"location":"essay/architecture/tcp-socket-loss-after-dhcp/","title":"TCP socket \u9023\u7dda\u88ab\u6e05\u9664\u7684\u932f\u8aa4\u6392\u67e5","text":"\u670d\u52d9\u662f\u653e\u5728 Ubuntu 18 \u7684 Docker \u4e4b\u4e2d\uff0c\u5b83\u6703\u5728\u555f\u52d5\u4e4b\u521d\u548c Redis \u9032\u884c\u9023\u7dda\uff0c \u4f46\u662f\u9019\u9023\u7dda\u6703\u5728\u4e00\u6bb5\u6642\u9593\u4e4b\u5f8c\uff0c\u83ab\u540d\u5931\u6548\uff1a\u5c0d\u670d\u52d9\u4f86\u8aaa\u9023\u7dda\u9084\u5728\uff0c\u4f46\u662f\u5c0d Redis \u4f86\u8aaa\u537b\u4e0d\u5728\u3002
\u672c\u6587\u5c07\u662f\u64b0\u5beb\u9019\u500b\u72c0\u6cc1\u7684\u6392\u67e5\u904e\u7a0b\u3002
"},{"location":"essay/architecture/tcp-socket-loss-after-dhcp/#\u600e\u9ebc\u78ba\u8a8d\u9023\u7dda\u72c0\u6cc1","title":"\u600e\u9ebc\u78ba\u8a8d\u9023\u7dda\u72c0\u6cc1","text":"\u6211\u5011\u5728\u4e09\u500b\u5730\u65b9\u9032\u884c\u9023\u7dda\u72c0\u6cc1\u7684\u6aa2\u67e5\uff0c\u5206\u5225\u662f Redis\u3001Ubuntu\uff08Host\uff09\u548c\u627f\u8f09\u670d\u52d9\u7684\u5bb9\u5668\uff08Container\uff09\u3002
/\u6211\u5011\u4f7f\u7528 netstat\uff0c \u4f46\u4e5f\u53ef\u4ee5\u4f7f\u7528\u66f4\u73fe\u4ee3\u7684 ss\u3002
$ netstat -tn | grep ESTABLISHED\ntcp 0 0 172.0.0.1:53558 172.0.0.2:6379 ESTABLISHED\ntcp 0 0 172.0.0.1:37672 172.0.0.2:6379 ESTABLISHED\n
\u4e0a\u8ff0\u7bc4\u4f8b\u662f\u5217\u51fa\u5728 Host \u4e0a\u548c Redis\uff08port 6379\uff09\u5efa\u7acb\u7684\u9023\u7dda\u3002 \u540c\u6a23\u7684\u6307\u4ee4\u53ef\u4ee5\u5728\u5bb9\u5668\u5167\u90e8\u548c Redis \u4e0a\u770b\u5230\uff0c\u53ea\u662f Redis \u7684 grep
\u5c31\u6703\u6539\u6210 LISTEN
\u7576\u9023\u7dda\u5efa\u7acb\u4e4b\u5f8c\u7684\u4e00\u6bb5\u6642\u9593\u5f8c\uff08\u7d04\u4e94\u5230\u4e09\u5341\u5206\u9418\uff0c\u4e0d\u56fa\u5b9a\uff0c\u4f46\u4e0d\u6703\u8d85\u904e\u4e09\u5341\u5206\u9418\uff09\uff0c Redis \u5c31\u6703\u6536\u5230 TCP RST
\uff0c\u7136\u5f8c\u628a\u9023\u7dda\u95dc\u6389\uff1a
\u5728\u6642\u9593 14:28:29.395914\uff08\u5c01\u5305\u7de8\u865f 2886\uff09\u6642\uff0cclient \u548c Redis \u5efa\u7acb\u5b8c\u6210\u9023\u7dda\uff0c \u5728 14:28:29.443402\uff08\u5c01\u5305\u7de8\u865f 2919\uff09\u6642\uff0c\u5b8c\u6210\u4e00\u7cfb\u5217 Redis \u5546\u52d9\u908f\u8f2f\u7684\u4f7f\u7528\u3002 \u904e\u4e86\u7d04\u4e94\u5206\u9418\uff0cRedis \u56de\u61c9 TCP Keep-Alive\uff08\u50c5\u6709\u6a19\u982d\u7684\u5c01\u5305\uff0c\u7de8\u865f 3855\uff09\uff0c \u4f46\u9019\u662f\u9810\u671f\u7684\u5c01\u5305\uff0c\u56e0\u70ba\u6211\u5011\u5728 Redis \u8a2d\u5b9a\u4e86 300 \u79d2\u7684 TCP Keep-Alive\u3002
\u4f46\u4ee4\u4eba\u7591\u60d1\u7684\u662f\uff0cclient \u537b\u5728\u4e0b\u4e00\u500b\u5c01\u5305\uff08\u7de8\u865f 3856\uff09\u56de\u61c9 TCP RST
\u3002
\u7576\u6211\u5011\u900f\u904e\u4e0a\u8ff0\u65b9\u6cd5\u78ba\u8a8d\u9023\u7dda\u72c0\u6cc1\u6642\uff0c \u4e0d\u7ba1\u5f9e Host \u9084\u662f Container \u7684\u89d2\u5ea6\u4f86\u770b\uff0c\u9023\u7dda\u90fd\u9084\u5728\u3002 \u6240\u4ee5\uff0c\u9019\u500b TCP RST
\uff0c\u7a76\u7adf\u662f\u8ab0\u767c\u7684\uff1f
\u5c31\u7d50\u8ad6\u4f86\u8aaa\uff0c\u9019\u500b\u662f\u932f\u8aa4\u65b9\u5411\uff0c\u4e0d\u904e\u5728\u9019\u88e1\u8a18\u9304\u4e00\u4e0b\u3002
Ubuntu \u57fa\u672c\u90fd\u6703\u88dd\u4e0a systemd \u53bb\u7ba1\u7406\u5f88\u591a\u7cfb\u7d71\u670d\u52d9\uff0c\u5176\u4e2d\u4e00\u500b\u5c31\u662f system-network\u3002 \u76f8\u95dc\u7684 issue\uff08docker0 interface keeps losing IPv4 ipaddress\uff09 \u8868\u73fe\u4e86\u5f88\u985e\u4f3c\u7684\u7279\u5fb5\uff0c\u6545\u800c\u958b\u59cb\u671d\u8457\u65b9\u5411\u8ffd\u3002 \u4f46\u662f\u5728\u6a5f\u5668\u4e0a\u900f\u904e networkctl list
\u5217\u51fa\u7684\u8cc7\u6599\u537b\u4e0d\u7b26\u5408 issue \u4e0a\u7684\u8aaa\u660e\uff1a
$ networkctl list\nIDX LINK TYPE OPERATIONAL SETUP\n 1 lo loopback carrier unmanaged\n 2 ens3 ether routable configured\n 3 ens4 ether off unmanaged\n 4 docker0 ether no-carrier unmanaged\n942 br-788fecf403ed ether routable unmanaged\n944 veth6af5546 ether degraded unmanaged\n\n6 links listed.\n
\u7531\u4e0a\u53ef\u77e5\uff0cdocker \u76f8\u95dc\u7684 link\uff08docker0
\u3001br-*
\u548c veth*
\uff09\u90fd\u4e0d\u662f\u900f\u904e system-network \u53bb\u7ba1\u7406\u4e86\u3002
\u5176\u4e2d\u7684 degraded \u4ee3\u8868\u8a72 link \u6c92\u6709 public IP\uff0c\u56e0\u70ba\u662f\u865b\u64ec\u4ecb\u9762\uff0c\u6240\u4ee5\u9019\u6a23\u662f\u6b63\u5e38\u7684\u3002
"},{"location":"essay/architecture/tcp-socket-loss-after-dhcp/#\u91cd\u65b0\u601d\u8003\u884c\u70ba\u8868\u73fe","title":"\u91cd\u65b0\u601d\u8003\u884c\u70ba\u8868\u73fe","text":"\u6211\u5011\u77e5\u9053 Host \u8a8d\u70ba\u4ed6\u7684\u7684\u9023\u7dda\u9084\u5728\uff0c\u6240\u4ee5\u6709\u500b\u61c9\u7528\u5728 netstat \u611f\u77e5\u5230\u8b8a\u5316\u4e4b\u524d\u5c31\u62d2\u7d55\u6389\u5c01\u5305\u4e86\uff0c \u6240\u4ee5\u6211\u5011\u5fc5\u9808\u53bb\u4e86\u89e3 netstat \u7684\u904b\u4f5c\u6d41\u7a0b\u3002
\u63a8\u85a6\u4f7f\u7528 ssss
\u662f\u88ab\u8a8d\u70ba\u61c9\u8a72\u53d6\u4ee3 netstat \u7684\u5de5\u5177\u3002
the netstat command has been deprecated in favor of the faster, more human-readable ss command.
\u4e8b\u5be6\u4e0a\uff0c\u5f88\u591a\u5de5\u5177\u5df2\u7d93\u88ab\u8a8d\u70ba\u662f\u904e\u6642\u7684\uff0c\u4ee5 Linux foundation \u4e2d\u63a8\u85a6\u7684 networking \u5de5\u5177\u70ba\u4f8b\uff1a
program obsoleted by arp ip neigh ifconfig ip addr ipmaddr ip maddr iptunnel ip tunnel route ip route nameif ifrename mii-tool ethtoolss
\u662f\u900f\u904e socket_diag \u53bb\u53d6\u5f97 OS's kernel \u7684\u9023\u7dda\u8cc7\u8a0a\uff0c\u5305\u62ec\uff1a
netstat \u662f\u900f\u904e /proc
\u7684\u8cc7\u6599\u593e\u4f86\u53d6\u5f97\u73fe\u6709\u7684\u9023\u7dda\u8cc7\u8a0a\uff0c \u63db\u53e5\u8a71\u8aaa\uff0c\u5c0d netstat \u4f86\u8aaa\uff0c\u9023\u7dda\u8cc7\u8a0a\u5176\u5be6\u662f user-space \u800c\u975e kernel space\uff1a
\u4e0a\u9762\u9019\u5f35\u5716\u5f88\u8907\u96dc\uff0c\u4f46\u662f\u65e2\u7136\u5fb5\u72c0\u662f TCP RST
\u90a3\u6211\u5011\u5c31\u5c08\u6ce8\u65bc layer3 \u7684\u6d41\u7a0b\u3002 \u5728\u9032\u5230 user-space \u4e4b\u524d\uff0c\u6703\u6709\u4e09\u5927\u584a\uff1a
mangle \u548c filter \u90fd\u662f iptables \u7b49\u9632\u706b\u7246\u670d\u52d9\u6703\u8ddf OS \u8a3b\u518a Hooks \u4f86\u9054\u6210\uff0c \u5728 Linux \u4e2d\uff0c\u5be6\u8e10\u9019\u500b Hook \u7684\u5c31\u662f Netfilter\u3002 \u5728\u96f2\u539f\u751f\u74b0\u5883\u7684 Cilium \u5247\u662f\u900f\u904e Linux \u4e2d\u7684 eBPF \u5be6\u8e10\u3002
NAT \u5247\u662f\u7528\u4f86\u4fee\u6b63 IP \u4f86\u9054\u5230\u6e9d\u901a\uff0c\u7d93\u5178\u7684\u7528\u6cd5\u5c31\u662f\u628a \u672c\u5730 IP \u8f49\u6210\u5916\u90e8 IP\u3002
\u90a3 pre-routing \u7684 conntrack \u662f\u4ec0\u9ebc\u5462\uff1f
"},{"location":"essay/architecture/tcp-socket-loss-after-dhcp/#smoking-gun-2---conntrack","title":"Smoking gun 2 - conntrack","text":"conntrack\uff08connection tracking\uff09\u88ab\u8a2d\u8a08\u4f86\u8ffd\u8e64\u5354\u5b9a\u7684\u6d41\u7a0b\u72c0\u614b\uff0c \u9019\u88e1\u7684\u6d41\u7a0b\u4e5f\u53ef\u7a31\u70ba\u9023\u7dda\u72c0\u614b\uff0c\u4f46\u8981\u6ce8\u610f\u9019\u500b\u300c\u9023\u7dda\u300d\u4e26\u4e0d\u662f L4 \u610f\u7fa9\u4e0a\u7684\u9023\u7dda\uff0c \u6700\u660e\u986f\u7684\u7279\u5fb5\u5c31\u662f conntrack \u4ecd\u6703\u53bb\u8ffd\u8e64 UDP\u3001ICMP \u9019\u985e\u975e\u300c\u9023\u7dda\u300d\u7684\u5354\u5b9a\u3002
\u4ec0\u9ebc\u662f\u6d41\u7a0b\u72c0\u614b\uff1f\u8209\u500b\u4f8b\u5b50\uff0c\u7576\u4f60\u6536\u5230 TCP ACK
\uff0c\u4f60\u53ef\u4ee5\u77e5\u9053\u76ee\u524d\u9019\u500b\u5c01\u5305\u76ee\u7684\u662f\u4ec0\u9ebc\u55ce\uff1f
\u5728\u4e0d\u77e5\u9053\u73fe\u5728\u6d41\u7a0b\u7684\u72c0\u614b\u4e0b\uff0c\u4f60\u600e\u9ebc\u8fa8\u5225\u9019\u500b ACK
\u662f\u5e36\u6709\u60e1\u610f\u7684 ACK
\u9084\u662f\u6b63\u5e38\u7684 ACK
\uff1f
\u900f\u904e\u5728\u6240\u6709 port \u4e0a\u9762\u767c\u9001 ACK \u6211\u53ef\u4ee5\u78ba\u4fdd\u76ee\u524d\u8a72\u7bc0\u9ede\u958b\u901a\u4e86\u54ea\u4e9b port\uff08\u5305\u542b\u90a3\u4e9b client port\uff09\uff0c \u5982\u679c port \u88ab\u958b\u901a\uff0c\u6211\u5c31\u6703\u6536\u5230 TCP RST\uff0c\u53cd\u4e4b\u5247\u6703\u6c92\u6709\u4efb\u4f55\u56de\u61c9\u3002
\u5982\u679c\u6211\u60f3\u8981\u8b93\u9019\u985e\u7684\u5c01\u5305\u90fd\u4e0d\u7d66\u4efb\u4f55\u56de\u61c9\uff0c\u6211\u5c31\u9700\u8981\u8b93 conntrack \u6709\u80fd\u529b\u8fa8\u5225\u54ea\u500b ACK \u662f\u6b63\u78ba\u7684 ACK\u3002
\u70ba\u4e86\u8a18\u9304\u9019\u4e9b\u6d41\u7a0b\uff0c\u4f60\u53ef\u4ee5\u60f3\u50cf conntrack \u6703\u8ffd\u8e64\u81f3\u5c11\u516d\u7a2e\u7684\u8cc7\u6599\uff1a
$ conntrack -L\nudp 17 29 src=172.0.0.1 dst=172.0.0.3 sport=138 dport=138 [UNREPLIED] src=172.0.0.3 dst=172.0.0.1 sport=138 dport=138 mark=0 use=1\ntcp 6 110 TIME_WAIT src=172.0.0.1 dst=172.0.0.4 sport=40286 dport=80 src=172.0.0.4 dst=172.0.0.1 sport=80 dport=40286 [ASSURED] mark=0 use=1\n
\u5206\u6790\u4e00\u4e0b\u8f38\u51fa\uff1a
UNREPLIED
\u4ee3\u8868\u9019\u500b UDP\u300c\u9023\u7dda\u300d\u6c92\u6709\u6536\u5230\u56de\u8986\uff0c\u9019\u662f UDP \u7279\u6709\u7684\u72c0\u614b\uff1b\u5728\u7b2c\u4e8c\u884c\u4e2d\uff0cTCP \u9023\u7dda\u6700\u5f8c\u9032\u5165 ASSURED
\u72c0\u614b\uff0c \u4ee3\u8868\u9019\u500b\u9023\u7dda\u5df2\u7d93\u5efa\u7acb\u8d77\u4f86\u4e0d\u6703\u88ab\u56e0\u70ba\u5012\u6578\u8a08\u6642\u800c\u88ab\u56de\u6536\uff0c\u4f46\u662f\u5b83\u4ecd\u6703\u5728 TCP \u7d50\u675f\u9023\u7dda\u5f8c\u88ab\u56de\u6536\u3002
\u9810\u8a2d\u53ef\u4ee5\u8a18\u9304 256K \u500b\u6d41\u7a0b\u8cc7\u8a0a\uff0c\u4f60\u53ef\u4ee5\u900f\u904e cat /proc/sys/net/nf_conntrack_max
\u4f86\u78ba\u8a8d\u3002
\u5982\u679c\u4f60\u60f3\u77e5\u9053\u4e0d\u540c\u5354\u5b9a\u5f97\u5230\u7684\u72c0\u614b\u6709\u54ea\u4e9b\uff0c\u53ef\u4ee5\u53c3\u8003\u9019\u7bc7 blog\u3002
conntrack \u7684\u6559\u5b78\u8cc7\u6e90conntrack \u5f88\u8907\u96dc\uff0c\u5149\u662f\u7406\u89e3\u9019\u500b\u5957\u4ef6\u5b58\u5728\u76ee\u7684\u5c31\u9700\u8981\u4e00\u4e9b\u6642\u9593\uff0c\u5e95\u5c64\u5be6\u4f5c\u66f4\u662f\u8907\u96dc\u3002 \u7db2\u8def\u4e0a\u6709\u627e\u5230\u4e00\u4e9b\u6559\u7a0b\uff1a
Fedora Magazine \u95dc\u65bc conntrack \u7684\u4ecb\u7d39\uff1a
\u6709\u500b cloudflare blog \u8aaa\u660e\u9019\u4ef6\u4e8b\uff0c\u7c21\u55ae\u4f86\u8aaa\uff0c\u53ef\u80fd\u6703\u628a\u65b0\u7684\u5c01\u5305\u4e1f\u68c4\u4e26\u6368\u68c4 conntrack \u8868\u683c\u4e2d\u90a3\u4e9b\u975e ASSURED
\u7684\u9023\u7dda\u3002
\u5982\u540c\u524d\u9762\u63d0\u5230\u7684\u300cTCP ACK Scan\u300d\uff0c \u5982\u679c conntrack \u6536\u5230\u6c92\u6709\u8a3b\u518a\u7684 TCP ACK
\uff0c\u9810\u8a2d\u6703\u56de\u61c9 TCP RST
\u3002
\u9019\u548c\u6211\u5011\u89c0\u5bdf\u5230\u7684\u884c\u7232\u8868\u73fe\u4e00\u6a23\uff0c\u4f46\u6211\u5011\u7684\u9023\u7dda\u8868\u88ab\u91cd\u7f6e\u4e86\u55ce\uff1f
"},{"location":"essay/architecture/tcp-socket-loss-after-dhcp/#\u9023\u7dda\u8868\u88ab\u91cd\u7f6e\u4e86\u55ce","title":"\u9023\u7dda\u8868\u88ab\u91cd\u7f6e\u4e86\u55ce","text":"\u56e0\u70ba\u8868\u5fb5\u662f\u4e00\u6a23\u7684\uff0c\u670d\u52d9\u611f\u77e5\u4e0d\u5230 TCP Keep-Alive\uff0c\u4f46\u662f\u537b\u900f\u904e tcpdump \u89c0\u5bdf\u5230 TCP RST
\uff0c \u6240\u4ee5\u6211\u5011\u958b\u59cb\u61f7\u7591\u662f\u4e0d\u662f conntrack \u7684\u554f\u984c\uff0c\u9806\u8457\u9019\u6a23\u7684\u601d\u7dad\uff0c\u5617\u8a66\u5c0b\u627e\u8b49\u64da\u3002
$ conntrack -L | grep 6379 | grep -n ESTABLISHED | wc -l\nconntrack v1.4.4 (conntrack-tools): 171 flow entries have been shown.\n25\n
\u9019\u500b\u6307\u4ee4\u544a\u8a34\u6211\u5011\uff0c\u73fe\u5728\u548c Redis\uff08port 6379\uff09\u7684\u9023\u7dda\u6709 25 \u689d\uff0c \u63a5\u8457\u5b9a\u671f\u53bb\u6aa2\u67e5\u9019\u500b\u6307\u4ee4\u7684\u7d50\u679c\uff0c\u5c31\u6703\u767c\u73fe\u4e00\u6bb5\u6642\u9593\u4e4b\u5f8c\uff0c\u5b83\u88ab\u6e05\u7a7a\u4e86\uff1a
$ watch -c 'conntrack -L | grep 6379 | grep -n ESTABLISHED | wc -l'\nconntrack v1.4.4 (conntrack-tools): 90 flow entries have been shown.\n0\n
\u900f\u904e syslog \u4e5f\u53ef\u4ee5\u8ffd\u67e5\u5230\u7576 conntrack \u986f\u793a\u70ba 0 \u7684\u6642\u5019\uff0c\u6709\u9019\u6a23\u76f8\u95dc\u7684\u7d00\u9304\uff1a
$ tail -f /var/log/syslog | grep DHCP\nJul 4 10:52:38 my-host systemd-networkd[913]: ens3: DHCP lease lost\nJul 4 10:52:38 my-host systemd-networkd[913]: ens3: DHCPv4 address 172.1.0.1/20 via 172.1.0.2\n
\u53ef\u4ee5\u770b\u5230\u7576 conntrack \u88ab\u6e05\u7a7a\u6642\uff08conntrack -L
\u70ba\u96f6\uff09\uff0cDHCP Server \u7684\u8acb\u6c42\u88ab\u4e86\u9001\u9032\u4f86\uff0c \u9019\u7a2e\u5de7\u5408\uff0c\u8db3\u4ee5\u8b93\u6211\u5011\u7e7c\u7e8c\u6df1\u5165\u8ffd\u8e64\u3002\u4e5f\u9032\u4e00\u6b65\u767c\u73fe\u4e00\u4e9b\u76f8\u95dc issue\uff1a
\u4e5f\u6ce8\u610f\u5230 systemd.networkd \u5728\u7ba1\u7406\u9023\u7dda\u7684\u6642\u5019\uff0c\u53ef\u80fd\u6703\u5c0a\u91cd DHCP \u7684\u8acb\u6c42\u4e26\u91cd\u65b0\u7d81\u5b9a\u672c\u5730\u4f4d\u7f6e\uff1a
KeepConfiguration
Takes a boolean or one of \"static\", \"dhcp-on-stop\", \"dhcp\". When \"static\", systemd-networkd will not drop static addresses and routes on starting up process. When set to \"dhcp-on-stop\", systemd-networkd will not drop addresses and routes on stopping the daemon. When \"dhcp\", the addresses and routes provided by a DHCP server will never be dropped even if the DHCP lease expires. This is contrary to the DHCP specification, but may be the best choice if, e.g., the root filesystem relies on this connection. The setting \"dhcp\" implies \"dhcp-on-stop\", and \"yes\" implies \"dhcp\" and \"static\". Defaults to \"dhcp-on-stop\" when systemd-networkd is running in initrd, \"yes\" when the root filesystem is a network filesystem, and \"no\" otherwise.
\u4e0d\u904e\u4e0d\u7ba1\u539f\u56e0\u662f\u4ec0\u9ebc\uff0c\u6700\u7d42\u6211\u5011\u7684\u89e3\u6cd5\u662f\u5728 DHCP Server \u4e2d\u7d81\u5b9a\u975c\u614b IP\uff0c \u907f\u514d\u6bcf\u9694\u4e09\u5341\u5206\u9418\u91cd\u65b0\u8a2d\u5b9a\u4e00\u6b21 IP\u3002
"},{"location":"essay/architecture/tcp-socket-loss-after-dhcp/#\u54ea\u88e1\u53ef\u4ee5\u52a0\u901f","title":"\u54ea\u88e1\u53ef\u4ee5\u52a0\u901f","text":"\u5728\u8655\u7406\u9019\u554f\u984c\u7684\u6642\u5019\u5176\u5be6\u82b1\u4e86\u5f88\u591a\u6642\u9593\uff0c\u4e3b\u8981\u662f\u56e0\u70ba\u5c0d Linux \u5e95\u5c64\u8655\u7406\u9023\u7dda\u7684\u4e0d\u6e05\u695a\u3002 \u91cd\u65b0\u9806\u4e00\u4e0b\u6392\u67e5\u7684\u8108\u7d61\uff1a
ACK
\u5c01\u5305\uff1aACK
\u5c01\u5305\uff1bACK
\u5c01\u5305\uff0c\u4e26\u4e14\u63a5\u8457\u56de\u61c9 RST
\u5c01\u5305\uff1bRST
\uff0c\u4e26\u4e14\u91cb\u653e\u76f8\u95dc\u8cc7\u6e90\u3002\u5176\u5be6\u6392\u67e5\u904e\u7a0b\u5f88\u91cd\u8981\u7684\u4e00\u9ede\u662f log\uff0c\u4f46\u537b\u5e38\u5e38\u88ab\u5ffd\u7565\uff0c \u6211\u5011\u61c9\u8a72\u5728 TCP Dump \u7684\u904e\u7a0b\uff0c\u4e00\u8d77\u53bb\u76e3\u807d Log \u7684\u8f38\u51fa\u3002
\u65e2\u7136\u6392\u67e5\u51fa\u662f client \u7684\u554f\u984c\uff0c\u6211\u5011\u4e5f\u53ef\u4ee5\u8a66\u8457\u5728\u76f8\u540c\u74b0\u5883\u7684\u5176\u4ed6\u7bc0\u9ede\u770b\u770b\u662f\u5426\u6709\u9023\u7dda\u932f\u8aa4\u554f\u984c\u3002 \u6700\u5f8c\u5c31\u662f\u96d6\u7136\u975e\u7cfb\u7d71\u7ba1\u7406\u8005\u5e73\u5e38\u4e0d\u61c9\u8a72\u5728\u7dda\u4e0a\u74b0\u5883\u4e2d\u64cd\u4f5c\u76f8\u95dc\u7bc0\u9ede\uff0c\u4f46\u662f\u7576\u9032\u5165\u6392\u67e5\u7684\u6d41\u7a0b\u6642\uff0c \u9700\u8981\u76e1\u5feb\u8b93\u76f8\u95dc\u4eba\u54e1\u6709\u6b0a\u9650\u53ef\u4ee5\u9032\u5230\u7bc0\u9ede\u9032\u884c\u5404\u7a2e\u5be6\u9a57\uff0c\u5426\u5247\u6bcf\u6b21\u505a\u64cd\u4f5c\u90fd\u9700\u8981\u5927\u5bb6\u7d04\u6642\u9593\uff0c\u7c21\u76f4\u66e0\u65e5\u8cbb\u6642\u3002
\u6700\u5f8c\uff0c\u9019\u6bb5\u7684\u6392\u67e5\u5f88\u5927\u7a0b\u5ea6\u662f\u540c\u4e8b Angus \u505a\u7684\uff0c\u5728\u9019\u908a\u50c5\u4f5c\u7c21\u55ae\u7d00\u9304\uff0c \u82e5\u672a\u4f86\u6709\u4efb\u4f55\u4eba\u56e0\u70ba\u9019\u7bc7\u6587\u7ae0\u5f97\u5230\u5e6b\u52a9\uff0c\u50c5\u4ee5\u6b64\u8868\u9054\u5c0d Angus \u7684\u611f\u8b1d\u3002
"},{"location":"essay/architecture/tomcat-max-packet-size/","title":"Tomcat \u7684 max_packet_size","text":"Tomcat \u4e2d\uff0c\u82e5 HTTP \u8868\u982d\u904e\u5927\uff0c\u6703\u56de\u61c9 413\u3002\u4f46\u662f\u6839\u64da MDN 413 \u4ee3\u8868 Payload Too Large\uff0c\u4e5f\u5c31\u662f HTTP Body \u904e\u5927\uff0c\u70ba\u4ec0\u9ebc\u6703\u6709\u9019\u5dee\u7570\uff1f
\u70ba\u4e86\u907f\u514d Header \u904e\u5927\uff0c\u6211\u5011\u4e0d\u662f\u61c9\u8a72\u8a2d\u7f6e maxHttpHeaderSize \u55ce\uff1f\u70ba\u4ec0\u9ebc\u6703\u9700\u8981\u8a2d\u7f6e packetSize \u9019\u548c Header \u770b\u8d77\u4f86\u6c92\u4ec0\u9ebc\u95dc\u4fc2\u7684\u8a2d\u7f6e\u5462\uff1f
Tomcat \u662f\u4e00\u500b\u63d0\u4f9b Web \u5bb9\u5668\u7684\u7522\u54c1\uff0c\u5118\u7ba1\u672c\u8eab\u63d0\u4f9b web-server \u7684\u529f\u80fd\uff0c\u4f46\u662f\u5927\u90e8\u5206\u60c5\u6cc1\u4ecd\u548c\u7b2c\u4e09\u65b9\u7684 web-server \u505a\u4e32\u63a5\u3002
"},{"location":"essay/architecture/tomcat-max-packet-size/#web-server","title":"web server","text":"\u4e0d\u540c\u7684 Server \u6703\u9700\u8981\u4f7f\u7528\u4e0d\u540c\u7684 connector \u4f86\u548c Tomcat \u505a\u6e9d\u901a\u3002
\u4ee5\u4e0a\u8ff0\u9806\u5e8f\u4f86\u8aaa\uff0c\u5404\u81ea\u5206\u5225\u9700\u8981
\u4f86\u628a HTTP \u8acb\u6c42\u50b3\u9001\u7d66 Tomcat\u3002
"},{"location":"essay/architecture/tomcat-max-packet-size/#worker","title":"worker","text":"\u5c0d\u61c9 web server \u4f86\u8aaa\uff0c\u5be6\u969b\u8655\u7406\u76f8\u95dc HTTP \u8acb\u6c42\u7684\u670d\u52d9\uff0c\u7a31\u70ba worker\uff08backend\uff09\u3002
\u96d6\u7136\u672c\u6587\u8b39\u505a Tomcat \u7684\u4ecb\u7d39\uff0c\u5be6\u969b\u4ecd\u6709\uff1a
\u7d9c\u4e0a\u8ff0\u6240\u8aaa\uff0c\u6211\u5011\u53ef\u4ee5\u6574\u7406\u51fa\u4ee5\u4e0b\u95dc\u4fc2\uff1a
\u4e0a\u95dc\u4fc2\u5716\u770b\u5230 Web Server \u548c Worker \u7684\u6e9d\u901a\u662f\u900f\u904e AJP\uff08Apache JServ Protocol\uff09\u9019\u5354\u5b9a\u6240\u5f62\u6210\u7684\u3002
HTTP Connector \u7684\u8a2d\u7f6e\u8aaa\u660e\u3002 AJP Connector \u7684\u8a2d\u7f6e\u8aaa\u660e\u3002
"},{"location":"essay/architecture/tomcat-max-packet-size/#ajp","title":"AJP","text":"\u56de\u5230\u4e00\u958b\u59cb\u7684\u554f\u984c\uff0c\u70ba\u4ec0\u9ebc HTTP Header \u904e\u5927\uff0cTomcat \u8981\u56de 413\uff1f\u6839\u64da AJP \u4e2d Request Packet Structure \u7684\u8aaa\u660e\uff0c\u4ed6\u6703\u628a HTTP Header \u548c\u4e00\u4e9b\u8cc7\u8a0a\u6574\u5408\u9032\u4e8c\u9032\u4f4d\u7684\u7de8\u78bc\u8cc7\u6599\u4e2d\uff0c\u4e26\u50b3\u9001\u7d66 Worker\u3002
\u4ee5\u4e0a\u8ff0\u72c0\u6cc1\u4f86\u8003\u616e\uff0c\u5c0d Worker \u4f86\u8aaa\uff0c\u4ed6\u6536\u5230\u7684 HTTP Request \u4e2d\u7684 Header \u4e0d\u55ae\u55ae\u53ea\u662f Header\uff0c\u800c\u662f\u5728\u4ed6\u5011\u4e16\u754c\u4e2d\u7684 packet\u3002\u5c01\u5305\u904e\u5927\uff0c\u5c31\u56de 413\uff0c\u807d\u8d77\u4f86\u5f88\u5408\u7406...
\u6700\u5f8c\u5c31\u662f\u70ba\u4ec0\u9ebc\u8981\u8a2d\u7f6e maxHttpHeaderSize
\u548c packetSize
\uff1f\u539f\u4f86 maxHttpHeaderSize
\u662f\u7528\u4f86\u7d66 HTTP Connector \u7684\u8a2d\u7f6e\uff0c\u800c packetSize
\u662f\u7528\u4f86\u7d66 AJP Connector \u7684\u3002
\u820a\u6709\u7cfb\u7d71\uff08Legacy system\uff09\u5c0d\u8a31\u591a\u958b\u767c\u8005\u4f86\u8aaa\uff0c\u662f\u5834\u60e1\u5922\u3002 \u5b83\u901a\u5e38\u6709\u5e7e\u500b\u7279\u9ede\uff1a
\u7531\u65bc\u4ed6\u7684\u7a69\u5b9a\uff0c\u5c0e\u81f4\u6c92\u5fc5\u8981\u53bb\u6539\uff0c\u7531\u65bc\u4ed6\u7684\u76e4\u6839\u932f\u7bc0\uff0c\u5c0e\u81f4\u8981\u53bb\u6539\u5f88\u56f0\u96e3\u3002 \u9032\u800c\u5f15\u8d77\u5b83\u8b8a\u6210\u820a\u6709\u7cfb\u7d71\uff1a\u4f7f\u7528\u820a\u7684\u904b\u884c\u7cfb\u7d71\u3001\u820a\u7684\u8a9e\u8a00\u7248\u672c\u3001\u820a\u7684\u76f8\u4f9d\u5957\u4ef6\u7b49\u7b49\u3002
\u5728\u8655\u7406\u820a\u6709\u7cfb\u7d71\u6642\uff0c\u9019\u88e1\u5217\u51fa\u4e94\u500b\u5de5\u6cd5\uff1a
\u548c\u4e94\u500b\u5fc3\u6cd5\uff1a
\u9019\u4e9b\u5de5\u6cd5\u4e26\u4e0d\u50c5\u50c5\u53ea\u662f\u7368\u7acb\u7684\u65b9\u6cd5\uff0c\u66f4\u6709\u751a\u8005\uff0c\u5b83\u5011\u53ef\u80fd\u662f\u4e00\u7cfb\u5217\u8655\u7406\u820a\u6709\u7cfb\u7d71\u7684\u6b65\u9a5f\uff1a
"},{"location":"essay/code/handle-legacy-system/#\u64f1\u7f6e","title":"\u64f1\u7f6e","text":"\u4e00\u500b\u6700\u7701\u529b\u7684\u65b9\u6cd5\uff0c\u64f1\u7f6e\u3002
\u4f60\u8a55\u4f30\u904e\u6539\u8b8a\u5e36\u4f86\u7684\u6210\u672c\u548c\u98a8\u96aa\uff0c\u65bc\u662f\u767c\u73fe\u7dad\u6301\u73fe\u72c0\u5c31\u662f\u6700\u597d\u7684\u8fa6\u6cd5\u3002 \u901a\u5e38\u8a0e\u8ad6\u904e\u7a0b\u4e2d\u6703\u4f34\u96a8\u8457\u672a\u4f86\u53ef\u80fd\u53ef\u884c\u7684\u65b9\u5411\uff0c\u53ea\u662f\u7576\u4e0b\u6b20\u7f3a\u67d0\u4e9b\u689d\u4ef6\u6216\u74b0\u5883\u3002
"},{"location":"essay/code/handle-legacy-system/#\u5305\u88dd","title":"\u5305\u88dd","text":"\u900f\u904e\u61c9\u7528\u7a0b\u5f0f\u8a2d\u8a08\u4ecb\u9762\uff08Application Programming Interface, API\uff09 \u4f60\u53ef\u4ee5\u628a\u820a\u6709\u7cfb\u7d71\u5305\u88dd\u8d77\u4f86\u3002
\u900f\u904e\u65b0\u7684\u8a9e\u8a00\u3001\u5957\u4ef6\u3001\u670d\u52d9\u5305\u88dd\u820a\u6709\u7cfb\u7d71\uff0c\u9019\u7a2e\u624b\u6cd5\u7a31\u70ba Strangler Pattern \u2013 Martin Fowler \u6216 Encasement Strategy \u2013 Dr. Robert L. Read\u3002 \u5728\u9019\u904e\u7a0b\u4e2d\uff0c\u4f60\u65e2\u80fd\u78ba\u4fdd\u670d\u52d9\u4e0d\u6703\u6709\u76f8\u5bb9\u6027\u554f\u984c\uff0c\u4e5f\u80fd\u589e\u52a0\u4e00\u9ede\u53ef\u4ee5\u63a7\u5236\u7684\u9762\u7a4d\u3002
"},{"location":"essay/code/handle-legacy-system/#\u64f4\u5145","title":"\u64f4\u5145","text":"\u65e2\u7136\u8981\u6539\u8b8a\u5f88\u96e3\uff0c\u90a3\u5c31\u50c5\u50c5\u64f4\u5145\uff08augmentation\uff09\u4ed6\u7684\u529f\u80fd\uff0c\u76e1\u53ef\u80fd\u53bb\u512a\u5316\u800c\u4e0d\u662f\u7570\u52d5\u5546\u52d9\u908f\u8f2f\u3002
\u9019\u7a2e\u624b\u6cd5\u901a\u5e38\u6703\u548c\u5305\u88dd\u4f75\u884c\u4f7f\u7528\u3002
"},{"location":"essay/code/handle-legacy-system/#\u66ff\u63db\u64a4\u9664","title":"\u66ff\u63db\u3001\u64a4\u9664","text":"\u9019\u7a2e\u624b\u6cd5\u5f88\u76f4\u89c0\uff0c\u66ff\u63db\uff08replacement\uff09\u90e8\u5206\u529f\u80fd\u6216\u8005\u76f4\u63a5\u64a4\u9664\uff08retirement\uff09\u820a\u6709\u7cfb\u7d71\u3002
\u5148\u5f9e\u7c21\u55ae\u6216\u6025\u8feb\u7684\u529f\u80fd\u6162\u6162\u6539\uff0c\u505a\u4e00\u4e9b\u90e8\u5206\u7684\u66ff\u63db\u3002 \u6216\u8005\u76f4\u63a5\u5f9e\u982d\u91cd\u5beb\uff0c\u4e26\u628a\u7dda\u4e0a\u7684\u8f38\u5165\u8f38\u51fa\u90fd\u4fdd\u7559\u4e0b\u4f86\uff0c\u7136\u5f8c\u9a57\u8b49\u65b0\u7684\u7cfb\u7d71\u4e26\u4e0d\u6703\u6709\u4efb\u4f55\u7834\u58de\u3002
"},{"location":"essay/code/handle-legacy-system/#\u8a17\u7ba1","title":"\u8a17\u7ba1","text":"\u820a\u6709\u7cfb\u7d71\u4e4b\u6240\u4ee5\u96e3\u4ee5\u6539\u52d5\uff0c\u6709\u5f88\u5927\u4e00\u90e8\u4efd\u7684\u539f\u56e0\u5728\u65bc\u5b83\u548c\u5176\u4ed6\u7cfb\u7d71\u7684\u96b1\u6666\u95dc\u4fc2\u3002
\u7576\u4f60\u8abf\u6574\u5b8c\u820a\u6709\u7cfb\u7d71\u6216\u76f4\u63a5\u64a4\u9664\uff0c\u537b\u7a81\u7136\u6709\u4e00\u500b\u5718\u968a\u544a\u8a34\u4f60\uff1a\u300c\u62b1\u6b49\u6211\u7684\u7cfb\u7d71\u56e0\u70ba\u4f60\u7684\u6539\u52d5\u58de\u4e86\u3002\u300d \u65e2\u7136\u6539\u52d5\u820a\u6709\u7cfb\u7d71\u662f\u5171\u8b58\uff0c\u4e26\u4e14\u5df2\u7d93\u958b\u59cb\u57f7\u884c\u4e86\uff0c\u5728\u5176\u4ed6\u5718\u968a\u56e0\u70ba\u6642\u7a0b\u6216\u5176\u4ed6\u5c08\u6848\u95dc\u4fc2\u7121\u6cd5\u914d\u5408\u6539\u52d5\u6642 \uff08\u5373\u4f7f\u4f60\u5df2\u7d93\u76e1\u53ef\u80fd\u6eff\u8db3\u4e26\u76f8\u5bb9\u5927\u90e8\u5206\u60c5\u5883\u4e86\uff09\uff0c \u4f60\u53ef\u4ee5\u628a\u820a\u6709\u7cfb\u7d71\u7684\u7ba1\u7406\u6b0a\uff08ownership\uff09\u8a17\u7ba1\uff08custodian\uff09\u7d66\u53e6\u4e00\u500b\u9700\u8981\u5b83\u7684\u5718\u968a\u3002
"},{"location":"essay/code/handle-legacy-system/#\u5de5\u6cd5\u7684\u6574\u5408","title":"\u5de5\u6cd5\u7684\u6574\u5408","text":"\u4e0a\u9762\u63d0\u5230\u7684\u9019\u4e9b\u65b9\u6cd5\u5176\u5be6\u4e5f\u53ef\u4ee5\u6574\u5408\u6210\u4e00\u6574\u5957\u7684\u6539\u52d5\u6b65\u9a5f\uff1a
\u5b78\u4e86\u5de5\u6cd5\u6f0f\u4e86\u5fc3\u6cd5\uff0c\u5c31\u597d\u50cf\u5f97\u5176\u5f62\u800c\u4e0d\u5f97\u5176\u795e\u3002
"},{"location":"essay/code/handle-legacy-system/#\u5b9a\u7fa9\u57fa\u6e96","title":"\u5b9a\u7fa9\u57fa\u6e96","text":"\u66ff\u820a\u6709\u7cfb\u7d71\u589e\u52a0\u89c0\u6e2c\u6027\uff08observability\uff09\uff0c\u4e26\u4e14\u5efa\u7acb\u820a\u6709\u7cfb\u7d71\u7684\u57fa\u6e96\uff0c\u4f8b\u5982 HTTP 5xx \u72c0\u614b\u7684\u56de\u61c9\u6bd4\u4f8b\u3002 \u6bcf\u6b21\u6539\u5584\u6642\uff0c\u78ba\u4fdd\u9019\u500b\u57fa\u6e96\u6c92\u6709\u88ab\u7a81\u7834\u3002
"},{"location":"essay/code/handle-legacy-system/#\u5efa\u7acb\u8a08\u756b","title":"\u5efa\u7acb\u8a08\u756b","text":"\u5efa\u7acb\u672a\u4f86\u53ef\u80fd\u7684\u767c\u5c55\u8def\u5f91\uff0c\u4e26\u6301\u7e8c\u8ffd\u8e64\u9032\u5ea6\u662f\u5426\u9054\u6a19\u3002 \u6e96\u7e69\u5b9a\u51fa\u4f86\uff0c\u5c07\u6703\u5e6b\u52a9\u4f60\u8d70\u5f97\u66f4\u9060\u66f4\u4e45\u3002
\u5b9a\u7fa9\u51fa\u6700\u7d42\u63a8\u51fa\u7684\u6642\u9650\uff0c\u901a\u5e38\u7576\u4f60\u8a02\u51fa\u4e00\u500b\u65e5\u671f\uff0c\u5927\u5bb6\u5c31\u6703\u628a\u4ed6\u91d8\u5728\u65e5\u66c6\u4e0a\u3002
"},{"location":"essay/code/handle-legacy-system/#\u5c0b\u627e\u9818\u5c0e","title":"\u5c0b\u627e\u9818\u5c0e","text":"\u7576\u7dda\u4e0a\u51fa\u73fe\u554f\u984c\u6642\uff0c\u9019\u500b\u4eba\u6703\u662f\u5c0d\u5916\u7684\u7a97\u53e3\uff0c\u4e26\u4e14\u64c1\u6709\u6574\u500b\u5c08\u6848\u7684\u8996\u89d2\u3002 \u540c\u6642\uff0c\u4ed6\u6703\u78ba\u4fdd\u5de5\u6642\u7684\u512a\u5148\u7a0b\u5ea6\u88ab\u6eff\u8db3\uff0c\u5c08\u6ce8\u5728\u7576\u4e0b\u61c9\u8a72\u88ab\u89e3\u6c7a\u7684\u4e8b\u60c5\u3002
"},{"location":"essay/code/handle-legacy-system/#\u78ba\u4fdd\u6e9d\u901a","title":"\u78ba\u4fdd\u6e9d\u901a","text":"\u5916\u90e8\u55ae\u4f4d\u5f88\u53ef\u80fd\u6703\u7121\u6cd5\u7406\u89e3\u70ba\u4ec0\u9ebc\u597d\u597d\u5730\u8981\u53bb\u6539\u820a\u6709\u7cfb\u7d71\uff0c \u78ba\u4fdd\u548c\u5176\u4ed6\u4eba\u7684\u6e9d\u901a\uff0c\u4e26\u4e14\u8b93\u4ed6\u4eba\u7406\u89e3\u6539\u52d5\u820a\u6709\u7cfb\u7d71\u7684\u5fc5\u8981\u6027\u3002
\u6700\u91cd\u8981\u7684\u662f\u8b93\u4ed6\u5011\u77e5\u9053\uff0c\u7576\u51fa\u73fe\u554f\u984c\u6642\uff0c\u8a72\u53bb\u627e\u8ab0\uff0c\u600e\u9ebc\u89e3\u6c7a\uff1f
"},{"location":"essay/code/handle-legacy-system/#\u8fed\u4ee3\u66f4\u65b0","title":"\u8fed\u4ee3\u66f4\u65b0","text":"\u5148\u91dd\u5c0d\u5c0f\u7bc4\u570d\u7684\u7570\u52d5\u53bb\u4fee\u6539\u3001\u512a\u5316\u3002 \u7576\u6574\u500b\u4e0a\u7dda\u6d41\u7a0b\u662f\u66a2\u901a\u4e14\u719f\u6089\u7684\uff0c\u518d\u4f86\u9010\u6b65\u4e00\u6bb5\u4e00\u6bb5\u7684\u8abf\u6574\u3002
"},{"location":"essay/code/handle-legacy-system/#\u7e3d\u7d50","title":"\u7e3d\u7d50","text":"\u820a\u6709\u7cfb\u7d71\u662f\u9700\u8981\u8de8\u55ae\u4f4d\u4e4b\u9593\u7684\u52aa\u529b\uff0c\u5728\u8655\u7406\u7684\u904e\u7a0b\u5f88\u6709\u53ef\u80fd\u662f\u66e0\u65e5\u8cbb\u6642\u7684\u3002 \u5c0d\u4ed6\u62b1\u6709\u8010\u5fc3\u4e26\u5c0b\u6c42\u5fc3\u7406\u4e0a\u7684\u8a8d\u540c\u548c\u652f\u6301\u3002\u6700\u5f8c\uff0c\u795d\u4f60\u597d\u904b\uff01
"},{"location":"essay/code/node.js-best-practice/","title":"Node.js \u6700\u4f73\u5be6\u4f5c","text":"Referrer from express.js best practice.
In most cases, these are still useful in different frameworks or applications.
"},{"location":"essay/code/node.js-best-practice/#do-in-code","title":"Do In Code","text":"const callback = async () => {\n console.log(\"do another thing\");\n throw new Error(\"foo\");\n console.log(\"do more thing\");\n};\n\nconst method = async () => {\n console.log(\"do first thing\");\n callback();\n console.log(\"do second thing\");\n};\n\nconst main = async () => {\n try {\n method();\n } catch (err) {\n console.log(\"fire try-catch!\");\n }\n\n console.log(\"finish project!\");\n};\n
"},{"location":"essay/code/node.js-best-practice/#result","title":"Result","text":"do first thing\ndo another thing\ndo second thing\nfinish project!\nUnhandledPromiseRejectionWarning: Error: foo\n... (error stack)\n
"},{"location":"essay/code/node.js-best-practice/#why","title":"why?","text":"callback
invoked some time later after method
(do another thing
).do second thing
).finish project!
).env.NODE_ENV='production';
https://wiki.debian.org/systemd/ \u21a9
http://upstart.ubuntu.com/ \u21a9
https://nodejs.org/docs/latest/api/cluster.html \u21a9
https://docs.strongloop.com/display/SLC/Clustering \u21a9
Varnish https://www.varnish-cache.org/ \u21a9
Nginx https://serversforhackers.com/nginx-caching/ \u21a9
Nginx https://serversforhackers.com/nginx-caching/ \u21a9
HAProxy http://www.haproxy.org/ \u21a9
EACCES
(Permission denied): An attempt was made to access a file in a way forbidden by its file access permissions.EADDRINUSE
(Address already in use): An attempt to bind a server (net
, http
, or https
) to a local address failed due to another server on the local system already occupying that address.EPERM
(Operation not permitted): An attempt was made to perform an operation that requires elevated privileges.EEXIST
(File exists): An existing file was the target of an operation that required that the target not exist.EISDIR
(Is a directory): An operation expected a file, but the given pathname was a directory.EMFILE
(Too many open files in system): Maximum number of file descriptors allowable on the system has been reached, and requests for another descriptor cannot be fulfilled until at least one has been closed. This is encountered when opening many files at once in parallel, especially on systems (in particular, macOS) where there is a low file descriptor limit for processes. To remedy a low limit, run ulimit -n 2048
in the same shell that will run the Node.js process.ENOENT
(No such file or directory): Commonly raised by fs
operations to indicate that a component of the specified pathname does not exist. No entity (file or directory) could be found by the given path.ENOTDIR
(Not a directory): A component of the given pathname existed, but was not a directory as expected. Commonly raised by fs.readdir
.ENOTEMPTY
(Directory not empty): A directory with entries was the target of an operation that requires an empty directory, usually fs.unlink
.\u7c21\u4ecb\u7269\u4ef6\u5c0e\u5411\u7684\u540d\u8a5e\uff0c\u4ee5 TypeScript \u70ba\u4f8b\u3002
"},{"location":"essay/code/object-oriented-terms/#\u7a2e\u985e","title":"\u7a2e\u985e","text":"\u4ecb\u7d39\u5404\u7a2e\u4f60\u6703\u770b\u5230\u7684\u540d\u8a5e\u3002
"},{"location":"essay/code/object-oriented-terms/#\u985e\u5225","title":"\u985e\u5225","text":"Class\uff0c\u985e\u5225\uff0c\u4e00\u7a2e\u53ef\u4ee5\u6574\u5408\u908f\u8f2f\u548c\u72c0\u614b\u7684\u55ae\u4f4d\uff0c\u4f8b\u5982\uff1a
// \u985e\u5225\u540d\u7a31\uff0c\u8cb4\u8cd3\u72d7\nclass Poodle {\n // \u975c\u614b\u516c\u958b\u5c6c\u6027\uff0c\u6b63\u5e38\u7684\u8cb4\u8cd3\u72d7\u7684\u817f\u6578\n public static legs = 4;\n\n // \u516c\u958b\u5c6c\u6027\uff0c\u9019\u500b\u8cb4\u8cd3\u72d7\u7684\u817f\u6578\n public legs: number;\n\n // \u79c1\u6709\u5c6c\u6027\uff0c\u9019\u500b\u8cb4\u8cd3\u72d7\u7684\u80fd\u91cf\n private energy: number;\n\n // \u5efa\u69cb\u5b50\n constructor(legs = Poodle.legs, energy = 10) {\n this.legs = legs;\n this.energy = energy;\n }\n\n // \u516c\u958b\u51fd\u5f0f\uff0c\u8cb4\u8cd3\u72d7\u547c\u53eb\n public shout(): string {\n this.shoutCost();\n return 'woof';\n }\n\n // \u516c\u958b\u51fd\u5f0f\uff0c\u9019\u96bb\u8cb4\u8cd3\u72d7\u53d7\u50b7\u4e86\u55ce\n public isInjured() {\n return Poodle.legs > this.legs;\n }\n\n // \u516c\u958b\u51fd\u5f0f\uff0c\u9019\u96bb\u8cb4\u8cd3\u72d7\u662f\u4e0d\u662f\u7d2f\u4e86\n public isTired(): boolean {\n return this.energy < 5;\n }\n\n // \u79c1\u6709\u51fd\u5f0f\uff0c\u7576\u53eb\u4e86\u4e4b\u5f8c\u6703\u6d88\u8017\u7684\u6771\u897f\n private shoutCost(): void {\n this.energy -= 3;\n }\n}\n
\u63a5\u8457\u4f60\u53ef\u4ee5\u9019\u6a23\u64cd\u4f5c\uff1a
// \u5efa\u69cb\u5be6\u4f8b\uff0c\u5e38\u8aaa new \u4e00\u500b instnace\nconst poodle = new Poodle(3);\n// \u4f7f\u7528\u516c\u958b\u51fd\u5f0f\nconsole.log(`Is injured? ${poodle.isInjured()}`);\nconsole.log(`Shout: ${poodle.shout()}`);\nconsole.log(`Is tired? ${poodle.isTired()}`);\nconsole.log(`Shout: ${poodle.shout()}`);\nconsole.log(`Is tired? ${poodle.isTired()}`);\n// \u4f7f\u7528\u516c\u958b\u5c6c\u6027\nconsole.log(`Legs should have: ${Poodle.legs}, but get ${poodle.legs}`);\n// \u4ee5\u4e0b\u64cd\u4f5c\u6703\u51fa\u932f\npoodle.energy;\npoodle.shoutCost();\n
\u6709\u5e7e\u9ede\u540d\u8a5e\uff1a
\u628a\u985e\u5225\u62bd\u8c61\u5316\uff0c\u4f8b\u5982\uff1a
abstract class Dog {\n public static legs = 4;\n\n public legs: number;\n\n // \u6ce8\u610f\u9019\u88e1\u5f9e private \u6539\u6210 protected\n protected energy: number;\n\n constructor(legs = Dog.legs, energy = 10) {\n this.legs = legs;\n this.energy = energy;\n }\n\n public shout(): string {\n this.shoutCost();\n return 'woof';\n }\n\n public isInjured(): boolean {\n return Dog.legs > this.legs;\n }\n\n // \u6ce8\u610f\u9019\u88e1\u5f9e private \u6539\u6210 protected\n // \u9664\u6b64\u4e4b\u5916\uff0c\u628a\u9019\u500b\u51fd\u793a\u62bd\u8c61\u5316\uff0cabstract\n protected abstract shoutCost(): void;\n}\n\n// \u8cb4\u8cd3\u72ac\nclass Poodle extends Dog {\n protected shoutCost(): void {\n this.energy -= 3;\n }\n}\n\n// \u9b25\u725b\u72ac\nclass Bulldog extends Dog {\n // \u5446\u5446\u7684\u72d7\u7a2e\uff0c\u568e\u53eb\u6703\u6d88\u8017\u66f4\u591a\u9ad4\u529b\n protected shoutCost(): void {\n this.energy -= 4;\n }\n}\n
\u9019\u88e1\u6709\u5e7e\u500b\u65b0\u7684\u540d\u8a5e\uff1a
Poodle
\u6216 Bulldog
\u90fd\u53bb\u7e7c\u627f\u62bd\u8c61\u985e\u5225 Dog
\u4f46\u662f\u62bd\u8c61\u985e\u5225\u4e0d\u80fd\u5efa\u69cb\uff1a
// \u6703\u51fa\u932f\nconst dog = new Dog();\n
"},{"location":"essay/code/object-oriented-terms/#\u4ecb\u9762","title":"\u4ecb\u9762","text":"\u9664\u4e86\u62bd\u8c61\u985e\u5225\uff0c\u4f60\u4e5f\u53ef\u4ee5\u7528\u4ecb\u9762\uff08interface\uff09\u4f86\u628a\u62bd\u8c61\u7a0b\u5ea6\u62c9\u9ad8\uff1a
interface Animal {\n legs: number;\n\n isInjured(): boolean;\n}\n\n// \u6ce8\u610f\u9019\u88e1\u662f\u7528 implements \u4e0d\u662f extends\nabstract class Dog implements Animal {}\n
\u4ecb\u9762\u4e00\u6a23\u4e0d\u80fd\u5efa\u69cb\uff1a
// \u6703\u51fa\u932f\nconst animal = new Animal();\n
\u9019\u88e1\u518d\u5f37\u8abf\u4e00\u4e0b\u4ecb\u9762\u672c\u8eab\u6c92\u6709\u5be6\u4f5c\uff0c\u4ecb\u9762\u53ea\u662f\u544a\u8a34\u5927\u5bb6\uff1a\u6211\u6709\u9019\u500b\u51fd\u5f0f\uff0c\u4f46\u5176\u4ed6\u4eba\u600e\u9ebc\u5be6\u4f5c\u7684\u6211\u4e0d\u77e5\u9053\u3002\u4ee5\u4e0a\u9762\u7684\u4ecb\u9762\u70ba\u4f8b\uff0c\u6240\u6709 Animal
\u90fd\u53ef\u4ee5\u6709 isInjured
\u9019\u500b\u51fd\u793a\uff0c\u4e26\u4e14\u4ed6\u56de\u50b3\u7684\u503c\u5fc5\u9808\u662f boolean
\u3002
\u4e5f\u56e0\u6b64\u985e\u5225\u5fc5\u9808\u53bb\u300c\u5be6\u4f5c\u300d\u9019\u500b\u4ecb\u9762\uff0c\u4ee5\u4e0a\u9762\u7684\u62bd\u8c61\u985e\u5225 Dog
\u70ba\u4f8b\uff0c\u4ed6\u5c31\u5be6\u4f5c\u4e86\u9019\u500b\u51fd\u793a\uff1a
abstract class Dog implements Animal {\n public isInjured(): boolean {\n // \u9019\u88e1\u7684\u7a0b\u5f0f\u78bc\uff0c\u7a31\u70ba\u5be6\u4f5c\n return Dog.legs > this.legs;\n }\n}\n
"},{"location":"essay/code/object-oriented-terms/#\u6bd4\u8f03\u4e00\u4e0b","title":"\u6bd4\u8f03\u4e00\u4e0b","text":"\u70ba\u4ec0\u9ebc\u8981\u62c9\u9ad8\u62bd\u8c61\u7a0b\u5ea6\uff1f
\u60f3\u50cf\u4e00\u4e0b\u670b\u53cb\u6253\u96fb\u8a71\u7d66\u4f60\uff0c\u554f\u4f60\u5728\u5e79\u561b\uff0c\u4f60\u53ef\u4ee5\u6709\u5169\u7a2e\u9078\u64c7\uff1a
\u5f9e\u4f8b\u5b50\u53ef\u4ee5\u4e86\u89e3\u5230\uff0c\u62bd\u8c61\u7684\u76ee\u7684\u662f\u70ba\u4e86\u6e9d\u901a\uff0c\u7576\u7269\u4ef6\u548c\u7269\u4ef6\u4e4b\u9593\u6e9d\u901a\u5bb9\u6613\u4e86\u4e4b\u5f8c\uff0c\u624d\u6709\u53ef\u80fd\u628a\u6574\u9ad4\u7684\u67b6\u69cb\u5beb\u7684\u55ae\u7d14\u7c21\u55ae\uff0c\u4f8b\u5982\uff1a
// \u6aa2\u67e5\u73fe\u5728\u7684\u74b0\u5883\u662f\u4e0d\u662f\u512a\u826f\u7684\nfunction isGoodEnv(animals: Animal[]): boolean {\n // \u627e\u51fa\u75b2\u5026\u7684\u52d5\u7269\n const tiredAnimals = animals.filter((animal) => animal.isTired());\n // \u5982\u679c\u75b2\u5026\u7684\u52d5\u7269\u5c0f\u65bc\u7e3d\u9ad4\u7684\u4e09\u6210\uff0c\u5c31\u662f\u597d\u7684\u74b0\u5883\n return tiredAnimals.length / animals.length < 0.3;\n}\n
\u9664\u6b64\u4e4b\u5916\uff0c\u62bd\u8c61\u4e4b\u5f8c\uff0c\u5c31\u53ef\u4ee5\u5ef6\u4f38\u5f88\u591a\u8a2d\u8a08\u6a21\u5f0f\uff08Design Patterns\uff09\u3002
"},{"location":"essay/code/object-oriented-terms/#\u6574\u5408\u4e00\u4e0b","title":"\u6574\u5408\u4e00\u4e0b","text":"\u96d6\u7136\u4ecb\u9762\u548c\u62bd\u8c61\u985e\u5225\u4e0d\u80fd\u5efa\u69cb\uff0c\u4f46\u662f\u4ed6\u53ef\u4ee5\u88ab\u7528\u4f5c\u578b\u5225\uff08type\uff09\u3002
// \u6311\u9017\u52d5\u7269\uff0c\u6703\u89f8\u6cd5\u5b83\u543c\u53eb\nfunction influriate(animal: Animal) {\n return animal.shout();\n}\n\nconst poodle = new Poodle();\nconsole.log(influriate(poodle));\n
"},{"location":"essay/web/certificate-transparency/","title":"Certificate Transparency","text":"\u56e0\u70ba CA (Certificate Authorities)\u7c3d\u51fa\u4f86\u7684\u7c3d\u8b49\uff08Certificate\uff09\u53ef\u80fd\u4e0d\u88ab\u4fe1\u4efb\uff08\u932f\u8aa4\u8a2d\u5b9a\u3001\u88ab\u653b\u64ca\u3001\u516c\u53f8\u5012\u9589\u7b49\u7b49\uff09\uff0c\u6240\u4ee5\u9700\u8981\u8b93\u6bcf\u500b CA \u53bb\u628a\u7c3d\u767c\u51fa\u4f86\u7684\u6191\u8b49\u8a18\u9304\u5728\u4e00\u500b\u516c\u958b\u7684\u5730\u65b9\uff08\u6216\u8005\u7a31\u5176\u70ba\u65e5\u8a8c\uff0clog\uff09\u8b93\u5927\u5bb6\u5be9\u6838\u3002
\u9019\u500b\u516c\u958b\u7684\u65e5\u8a8c\u7a31\u4f5c\u7c3d\u8b49\u900f\u660e\u5316\uff08Certificate Transparency\uff0cCT\uff09\uff0c\u5176\u8981\u80fd\uff1a
\u7576\u5be9\u6838\u767c\u73fe\u6709\u554f\u984c\u6642\uff0c\u5c31\u53ef\u4ee5\u900f\u904e\u65e2\u6709\u6a5f\u5236\u64a4\u92b7\u8a72\u6191\u8b49\uff08OCSP1\u3001CRL\u3001CRLSet \u7b49\u7b49\uff09\u3002\u5c31\u4e0d\u6703\u518d\u50cf\u4e4b\u524d\u90a3\u6a23\uff0c\u767c\u73fe\u554f\u984c\u6642\uff0c\u5df2\u7d93\u662f\u597d\u5e7e\u5929\u4e4b\u5f8c\u4e86\u3002
"},{"location":"essay/web/certificate-transparency/#referrer","title":"Referrer","text":"\u5efa\u8b70\u4e0d\u8981\u4f7f\u7528 OCSP\uff0c\u53ef\u4ee5\u770b Referrer \u4e2d\u7684\u9023\u7d50\u3002\u00a0\u21a9
HTTP\uff08HyperText Transfer Protocol\uff09\u8d85\u6587\u672c\u50b3\u8f38\u5354\u5b9a\u7684\u8aaa\u660e\u548c\u6ce8\u610f\u4e8b\u9805\u3002
"},{"location":"essay/web/http/#osi-\u4e2d\u626e\u6f14\u7684\u89d2\u8272","title":"OSI \u4e2d\u626e\u6f14\u7684\u89d2\u8272","text":"\u50b3\u8f38\u5c64\uff08Transport Layer\uff09\u4e4b\u4e0a\uff0c\u901a\u5e38\u5305\u8fa6\u6703\u8b70\u5c64\u3001\u8868\u73fe\u5c64\u3001\u61c9\u7528\u5c64\uff0c \u4f46\u5728\u7b2c\u4e09\u7248\uff08HTTP/3\uff09\u4e4b\u5f8c\uff0c\u9023\u50b3\u8f38\u5c64\u4e5f\u4e00\u8d77\u5305\u9032\u53bb\u4e86\uff0c \u8a73\u898b QUIC \u5b98\u7db2\u548c\u5be6\u969b\u5c01\u5305\u5167\u5bb9\u3002
HTTP \u5efa\u7acb\u5728 TCP \u4e4b\u4e0a\uff0c\u96d6\u7136 TCP \u53ef\u4ee5\u78ba\u4fdd\u9023\u7dda\u7684\u7a69\u5b9a\uff0c \u4f46\u662f\u6211\u5011\u9700\u8981\u66f4\u9ad8\u5c64\u6b21\u7684\u6703\u8a71\uff08Session\uff09\u548c\u8a2d\u5b9a\u6a5f\u5236\uff0c\u4f8b\u5982\uff1a \u9019\u6b21\u8acb\u6c42\u7684\u4eba\uff0c\u662f\u4e0d\u662f\u4e00\u500b\u6708\u524d\u767b\u5165\u7684\u90a3\u500b\u4f7f\u7528\u8005\u3002 \u9019\u7a2e\u9a57\u8b49\u908f\u8f2f\uff0c\u5728\u4efb\u4f55\u50b3\u8f38\u5c64\u5354\u5b9a\u90fd\u7121\u6cd5\u8fa6\u5230\uff0c\u56e0\u70ba\u9019\u5df2\u7d93\u727d\u6d89\u5230\u300c\u61c9\u7528\u908f\u8f2f\u300d\u4e86\u3002
\u5f9e\u4e0a\u9762\u4e5f\u53ef\u4ee5\u5f97\u77e5\uff0cHTTP \u5176\u5be6\u5c31\u662f\u4e00\u7a2e\u91dd\u5c0d\u61c9\u7528\u7a0b\u5f0f\u908f\u8f2f\u7684\u5354\u5b9a\uff0c \u6240\u8b02\u7684\u8d85\u6587\u672c\uff08Hypertext\uff09\u5c31\u662f\u4e0d\u518d\u50cf\u5e95\u5c64\u5354\u5b9a\u90a3\u6a23\uff0c \u900f\u904e\u4f4d\u5143\uff08bit\uff09\u53bb\u505a\u4e00\u4e9b\u53c3\u6578\u8a2d\u5b9a\uff0c\u4f8b\u5982 TCP \u9078\u9805\uff0c \u800c\u662f\u900f\u904e\u7d14\u6587\u5b57\u4f86\u63a7\u5236\u53c3\u6578\uff0c \u4f8b\u5982 HTTP \u7528 HSTS \u53bb\u5354\u8abf\u8acb\u6c42\u65b9\uff08\u901a\u5e38\u662f\u700f\u89bd\u5668\uff09\u61c9\u8a72\u7528\u54ea\u500b\u7248\u672c\u7684\u5354\u5b9a\u3002
\u6574\u500b\u5354\u5b9a\u975e\u5e38\u55ae\u7d14\u7684\u5206\u6210\u4e09\u500b\u5340\u584a\uff1a\u5354\u5b9a\u8cc7\u8a0a\uff0c\u53c3\u6578\u8a2d\u5b9a\uff0c\u6e9d\u901a\u5167\u5bb9\u3002 \u4e26\u5206\u5225\u7528 CRLF \u9019\u500b\u63db\u884c\u7b26\u865f\uff0c \u4f86\u6a19\u793a\u9019\u4e09\u500b\u5340\u584a\u7684\u4f4d\u7f6e\u3002
"},{"location":"essay/web/http/#\u5354\u5b9a\u8cc7\u8a0a","title":"\u5354\u5b9a\u8cc7\u8a0a","text":"\u9019\u662f\u8acb\u6c42\u6216\u56de\u61c9\u7684\u7b2c\u4e00\u884c\u3002
\u5982\u679c\u662f\u8acb\u6c42\u65b9\uff0c\u5167\u5bb9\u5c31\u5305\u62ec\u4f60\u7528\u4e86\u4ec0\u9ebc\u7248\u672c\u7684 HTTP\uff0c \u4f60\u91dd\u5c0d\u61c9\u7528\u7a0b\u5f0f\u7684\u54ea\u500b\u5730\u65b9\uff08HTTP Path\uff09\uff0c \u505a\u4ec0\u9ebc\u6a23\u7684\u8acb\u6c42\uff08HTTP Method\uff09\uff0c\u4f8b\u5982\uff1a
GET /hello HTTP/2\n...\u63a5\u4e0b\u4f86\u662f\u53c3\u6578\u8a2d\u5b9a...\n
\u5c31\u662f\u4f7f\u7528 GET
\u65b9\u6cd5\u5230\u61c9\u7528\u7a0b\u5f0f\u7684 /hello
\u9019\u500b\u4f4d\u7f6e\u53bb\u505a HTTP/2 \u7684\u8acb\u6c42\u3002
\u5982\u679c\u662f\u56de\u61c9\uff0c \u5247\u662f\u6703\u6709\u7248\u672c\u548c\u56de\u61c9\u7684\u72c0\u614b\uff08HTTP Status\uff09\uff0c\u4f8b\u5982\uff1a
HTTP/2 200\n...\u63a5\u4e0b\u4f86\u662f\u53c3\u6578\u8a2d\u5b9a...\n
\u5c31\u662f\u56de\u61c9 200 \u9019\u500b\u7de8\u865f\uff0c \u5728 RFC-9110 \u4e2d\uff0c 200 \u9019\u500b\u7de8\u865f\u4ee3\u8868 OK
\u3002
\u8b93\u9019\u500b\u5354\u5b9a\u64c1\u6709\u975e\u5e38\u591a\u7709\u89d2\u7684\u5730\u65b9\u5c31\u662f\u53c3\u6578\u8a2d\u5b9a\uff0c \u4f4d\u7f6e\u5728\u8acb\u6c42\uff08\u6216\u56de\u61c9\uff09\u7684\u7b2c\u4e8c\u884c\u5230\u4e0b\u4e00\u500b\u7a7a\u884c\uff1a
GET / HTTP/2\nheader1: value\nheader2: value\n\npayload\n
\u4e0a\u8ff0\u7bc4\u4f8b\u53ef\u4ee5\u770b\u5230\u6a19\u982d\uff08Header\uff09\u7e3d\u5171\u6709\u5169\u500b\uff0c \u9019\u662f\u56e0\u70ba\u7b2c\u4e8c\u884c\u5230\u4e0b\u4e00\u500b\u7a7a\u884c\u4e4b\u9593\u7e3d\u5171\u6709\u5169\u884c\u3002
\u6a19\u982d\u7684\u683c\u5f0f\u5f88\u55ae\u7d14\uff0c\u884c\u9996\u5230\u5192\u865f\u4e4b\u524d\u70ba\u9375\uff08key\uff09\uff0c\u5927\u5c0f\u5beb\u6c92\u5dee\uff0c\u4e0d\u53ef\u4ee5\u6709\u7a7a\u683c\uff1b \u5192\u865f\u5f8c\u70ba\u503c\uff08value\uff09\uff0c\u5927\u5c0f\u5beb\u6709\u5dee\uff0c\u9700\u8981\u5ffd\u7565\u524d\u9762\u7684\u7a7a\u683c\u3002
\u7531\u6b64\u8a95\u751f\u6975\u5176\u8907\u96dc\u7684\u61c9\u7528\u8a2d\u5b9a\u74b0\u5883\u3002 \u8eab\u70ba\u4f7f\u7528\u8005\u901a\u5e38\u4f60\u4e0d\u7528\u592a\u64d4\u5fc3\u9019\u4ef6\u4e8b\u60c5\uff0c\u56e0\u70ba\u5049\u5927\u7684\u700f\u89bd\u5668\u548c\u76f8\u95dc\u898f\u7bc4\uff0c\u4f8b\u5982 W3C\u3001 IANA \u548c\u5f88\u53d7\u516c\u4fe1\u7684 MDN \u7b49\u7b49\uff0c \u90fd\u5e6b\u4f60\u7ba1\u7406\u597d\u4e86\uff0c\u4f46\u662f\u8eab\u70ba\u61c9\u7528\u7a0b\u5f0f\u7684\u958b\u767c\u8005\uff0c\u4f60\u53ef\u80fd\u5c31\u8981\u958b\u59cb\u982d\u5927\u4e86\u3002
"},{"location":"essay/web/http/#\u6e9d\u901a\u5167\u5bb9","title":"\u6e9d\u901a\u5167\u5bb9","text":"\u5728\u7b2c\u4e00\u500b\u7a7a\u884c\u4e4b\u5f8c\u7684\u6587\u5b57\uff0c\u901a\u5e38\u5b58\u653e\u61c9\u7528\u7a0b\u5f0f\u908f\u8f2f\u7684\u5167\u5bb9\uff0c\u4f8b\u5982\uff1a
POST /give-me-ticket HTTP/2\nheader1: value\nheader2: value\n\n\u6211\u7684\u540d\u5b57\u662f\u5442\u5b78\u6d32\uff0c\u5e6b\u6211\u8a02\u6a5f\u7968\u3002\n
\u81f3\u65bc\u5b58\u653e\u7684\u5167\u5bb9\u8981\u7528\u4ec0\u9ebc\u683c\u5f0f\uff0c \u5c31\u53ef\u4ee5\u6839\u64da\u61c9\u7528\u7a0b\u5f0f\u81ea\u5df1\u53bb\u9078\u64c7\u4e86\u3002
"},{"location":"essay/web/http/#\u6a19\u982d\u53c3\u6578\u8a2d\u5b9a","title":"\u6a19\u982d\uff1a\u53c3\u6578\u8a2d\u5b9a","text":""},{"location":"essay/web/http/#\u7dad\u904b\u8981\u6ce8\u610f\u7684\u6a19\u982d","title":"\u7dad\u904b\u8981\u6ce8\u610f\u7684\u6a19\u982d","text":""},{"location":"essay/web/http/#access-control-max-age","title":"Access-Control-Max-Age","text":"MDN
\u5b83\u662f\u7528\u4f86\u8655\u7406 Preflight \u8acb\u6c42\u7684\u5feb\u53d6\u3002
"},{"location":"essay/web/http/#\u8cc7\u5b89\u8981\u6ce8\u610f\u7684\u6a19\u982d","title":"\u8cc7\u5b89\u8981\u6ce8\u610f\u7684\u6a19\u982d","text":""},{"location":"essay/web/http/#x-forwarded-for","title":"X-Forwarded-For","text":"\u628a\u8acb\u6c42\u65b9\u7684 IP \u50b3\u905e\u4e0b\u53bb\uff0c\u4f46\u662f\u5728\u958b\u653e\u7db2\u8def\u4e0b\uff0c\u662f\u53ef\u4ee5\u88ab\u7be1\u6539\uff0c\u8981\u5c0f\u5fc3\u4f7f\u7528\u3002
"},{"location":"essay/web/http/#meta","title":"Meta","text":"set the cookie
"},{"location":"essay/web/http/#content-encoding","title":"Content-Encoding","text":"\u907f\u514d CRLF Injection
"},{"location":"essay/web/http/#connection","title":"Connection","text":"\u5982\u679c\u8acb\u6c42\u6709\u9019\u500b Header\uff0c\u670d\u52d9\u65b9\u5728\u56de\u61c9\u5f8c\uff0c\u5c31\u6703\u4e3b\u52d5\u95dc\u9589\u9023\u7dda\u3002 \u95dc\u9589\u9023\u7dda\u7684\u90a3\u65b9\u662f\u8981\u8ca0\u64d4\u8f03\u5927\u7684 TCP \u958b\u92b7\uff0c\u4e26\u8caf\u5b58 TCP TIME_WAIT
\u7684\u9023\u7dda\u3002
\u7528\u4f86\u6a19\u8a8c\u8cc7\u6e90\u7684\u7248\u672c\uff0c\u53ef\u4ee5\u4f7f\u7528\u9019\u500b\u589e\u52a0\u5feb\u53d6\u6a5f\u5236\uff0c\u4f8b\u5982\uff1a
sequenceDiagram\n participant c as Client\n participant s as Server\n c ->> s: Request content\n s ->> c: Content with eTag: `abc`\n c ->> s: Update content if-match: `abc`\n c ->> s: Request content if-none-match: `abc`\n
Server \u6536\u5230 if-match
\u5f8c\u5c31\u53ef\u4ee5\u6aa2\u67e5\u662f\u5426\u6709\u7af6\u8cfd\u554f\u984c\uff08\u540c\u6642\u6709\u5169\u500b\u4eba\u66f4\u65b0\u8a72 content\uff09\uff0c \u6216\u8005\u4e5f\u53ef\u4ee5\u900f\u904e if-none-match
\u6aa2\u67e5\u662f\u5426\u70ba\u820a\u7248\u7684 content \u7136\u5f8c\u5c31\u56de\u50b3 304\uff08Not Modified\uff09\uff0c \u907f\u514d\u7db2\u8def\u8cc7\u6e90\u7684\u8017\u7528\u3002
\u8a2d\u5b9a public max-age=0 must-revalidate
\u4ee3\u8868\uff1a
\u5e6b\u6211\u5feb\u53d6\u9019\u6771\u897f\uff0c\u4f46\u662f\u99ac\u4e0a\u8b93\u4ed6\u904e\u671f\uff0c\u4e26\u91cd\u65b0\u548c\u6211\u9a57\u8b49\u9019\u6771\u897f\u7684
More Aggressive Cache Header
"},{"location":"essay/web/http/#\u4e0d\u540c\u7248\u672c\u7684\u5dee\u7570","title":"\u4e0d\u540c\u7248\u672c\u7684\u5dee\u7570","text":"\u76ee\u524d HTTP \u4e3b\u6d41\u4e0a\u5171\u6709\u4e09\u7a2e\u7248\u672c\uff1a1.1\u30012 \u548c 3\u3002 \u6574\u500b\u516c\u958b\u7db2\u8def\u74b0\u5883\u4e2d\uff0cHTTP/3 \u7684\u4f7f\u7528\u7387\u5728 2024/06 \u6642\uff0c\u5df2\u7d93\u4f86\u5230 30%\uff0c \u4f46\u662f Cloudflare \u7684\u6587\u7ae0\u6307\u51fa\uff0c \u5927\u90e8\u5206\u4f7f\u7528 HTTP/3 \u7684\u5834\u666f\u662f\u5728\u700f\u89bd\u5668\u548c\u670d\u52d9\u7684\u6e9d\u901a\u3002 \u5982\u679c\u662f API \u5f62\u5f0f\uff0c\u5247\u4e3b\u8981\u9084\u662f HTTP/1.1\uff0c \u9019\u4e5f\u8aaa\u660e\u4efb\u4f55\u4e00\u500b\u65b0\u5354\u5b9a\u7684\u63a8\u5ee3\u90fd\u9700\u8981\u6f2b\u9577\u7684\u9069\u61c9\u671f\u3002
"},{"location":"essay/web/http/#\u4e00\u4e9b\u5e38\u898b\u7684\u554f\u984c","title":"\u4e00\u4e9b\u5e38\u898b\u7684\u554f\u984c","text":"\u6211\u7684\u61c9\u7528\u7a0b\u5f0f\u662f\u7528 HTTP \u6e9d\u901a\u55ce
\u9019\u5176\u5be6\u662f\u500b\u5f88\u5fae\u5999\u7684\u554f\u984c\uff0c\u901a\u5e38\u4f86\u8aaa\uff0c\u4f60\u7684\u61c9\u7528\u7a0b\u5f0f\u9075\u5b88\u4e86\u90e8\u5206 HTTP \u5354\u5b9a\u3002
HTTP \u76f8\u95dc\u7684 RFC \u975e\u5e38\u975e\u5e38\u591a\uff0c\u5149\u662f\u7248\u672c\u5c31\u6709\u56db\u500b\uff1a1.0/1.1/2.0/3.0\uff0c \u5176\u4e2d\u4f60\u4f7f\u7528\u7684\u5957\u4ef6\u53ef\u80fd\u4e5f\u6c92\u6709\u5be6\u4f5c 1xx \u7684\u56de\u61c9\u7de8\u865f\uff08\u524d\u9762\u7684\u7bc4\u4f8b\u662f 200\uff09\uff0c \u4f8b\u5982 101 Switching Protocol\uff0c \u6709\u6642\u9019\u500b\u7de8\u865f\u4e5f\u88ab\u7528\u4f86\u5207\u63db\u5230 WebSocket\u3002
\u518d\u4f8b\u5982\uff0cHTTP 2.0 \u62d2\u7d55\u5be6\u4f5c Transfer-Encoding\uff0c \u4f60\u7684 HTTP \u5957\u4ef6\u6709\u6b63\u78ba\u5be6\u4f5c\u55ce\uff1f \u7576\u7248\u672c\u70ba HTTP 1.1 \u6642\uff0c\u53c8\u6709\u6b63\u78ba\u5be6\u4f5c\u5176\u548c Content-Encoding \u7684\u5dee\u7570\u55ce\uff1f
"},{"location":"essay/web/maglev/","title":"Maglev","text":"\u672c\u7bc7\u91dd\u5c0d 2016 \u5e74\u7684\u8ad6\u6587 Maglev: A Fast and Reliable Software Network Load Balancer \u9032\u884c\u8aaa\u660e\u3002
"},{"location":"essay/web/maglev/#\u6982\u8ff0","title":"\u6982\u8ff0","text":"Maglev \u662f\u500b\u8edf\u9ad4 L4 \u8ca0\u8f09\u5747\u8861\u5668\uff08Load Balancer, LB\uff09\uff0c\u4ed6\u88ab\u5efa\u69cb\u5728\u4e00\u822c\u7684 Linux \u6a5f\u5668\u4e0a\uff0c \u6240\u4ee5\u53ef\u4ee5\u5f88\u5927\u5730\u7bc0\u7701\u7dad\u8b77\u786c\u9ad4\u8a2d\u5099\u7684\u6210\u672c\uff08\u4eba\u529b\u3001\u5c08\u696d\u7b49\u7b49\uff09\u3002 \u9664\u6b64\u4e4b\u5916\uff0c\u4ed6\u4e0d\u50cf\u786c\u9ad4\u8a2d\u5099\u90a3\u6a23\u901a\u5e38\u90fd\u662f active-standby\uff0c \u800c\u662f\u6bcf\u53f0\u8a2d\u5099\u90fd\u80fd\u6709\u6548\u5730\u8655\u7406\u5c01\u5305\uff0c\u8f15\u6613\u9054\u5230\u6c34\u5e73\u64f4\u5c55\u3002 \u5728\u4f7f\u7528 8 core\u3001128 GiB \u548c 10 Gbps NIC (Network Interface Card) \u7684\u7576\u4ee3\uff082016\uff09\u786c\u9ad4\u4e0b\uff0c \u6bcf\u53f0\u8a2d\u5099\u9054\u5230\u7d04 12 Mpps \u7684\u8655\u7406\u80fd\u529b\u3002 \u5c0d\u61c9\u5230 Google \u7576\u6642\u6bcf\u500b\u53e2\u96c6\u6703\u9700\u8981\u8655\u7406 10Gbps \u7684\u6d41\u91cf\uff0c \u9019\u76f8\u7576\u65bc 813Kpps \u7684 1500-byte IP \u5c01\u5305\u3001\u6216\u8005 9.06 Mpps \u7684 100-byte IP \u5c01\u5305\u3002
\u70ba\u4ec0\u9ebc\u786c\u9ad4\u8a2d\u5099\u901a\u5e38\u90fd\u662f active-standby\u8aaa\u5230 L4 \u8ca0\u8f09\u5747\u8861\u5668\uff0c\u52e2\u5fc5\u6703\u63d0\u4f9b TCP \u7684\u8ca0\u8f09\uff0c\u7136\u800c TCP \u70ba\u4e86\u505a\u5230\u9023\u7dda\u7684\u6548\u679c\uff0c \u9700\u8981\u7d00\u9304\u7368\u81ea\u8655\u7406\u6240\u6709\u7684\u5c01\u5305\uff08\u70ba\u4e86\u505a\u8a08\u6578\uff09\u3002
\u5982\u679c\u6709\u5169\u53f0 LB\uff0c\u5c01\u5305\u5206\u6563\u958b\u4f86\u5c31\u6703\u51fa\u932f\u3002
\u7db2\u8def\u5728\u50b3\u8f38\u6642\uff0c\u5be6\u969b\u7684\u908f\u8f2f\u6703\u88ab\u5c01\u88dd\u597d\u5e7e\u5c64\uff0c\u9019\u5c31\u662f OSI \u5206\u5c64\u7684\u6982\u5ff5\u3002 \u7576 Maglev \u524d\u9762\u7684 \u8def\u7531\u5668\uff08router\uff09\u6536\u5230\u5c01\u5305\u7684\u6642\u5019\uff0c\u6703\u900f\u904e ECMP \u6c7a\u5b9a\u8a72\u5206\u6d3e\u5c01\u5305\u7d66\u54ea\u500b Maglev\u3002 \u6b64\u6642\uff0cMaglev \u6839\u64da L3 \u548c L4 \u7684\u8cc7\u8a0a\u7d44\u6210\u4e00\u500b\u7d44\u5408\uff0c\u7a31\u70ba 5-tuple1\uff0c \u4e5f\u5c31\u662f\uff1a\u4f86\u6e90 IP\u3001\u76ee\u7684 IP\u3001\u4f86\u6e90\u961c\u3001\u76ee\u7684\u961c\u3001\u5354\u5b9a\u985e\u5225\u3002 \u900f\u904e\u9019\u500b\u7d44\u5408\uff0c\u8a08\u7b97 consistent hashing \u4f86\u6307\u5b9a\u6700\u7d42\u670d\u52d9\u53e2\u96c6\u88e1\u7684\u7279\u5b9a\u7bc0\u9ede\u3002
\u63db\u53e5\u8a71\u8aaa\uff0cMaglev \u6c92\u6709\u771f\u6b63\u8655\u7406 L4 \u7684\u9023\u7dda\u554f\u984c\uff0c\u800c\u662f\u900f\u904e\u78ba\u4fdd\u7279\u5b9a\u6d41\uff08flow\uff09\u7684\u5c01\u5305\u6d41\u5165\u7279\u5b9a\u7684\u7bc0\u9ede\u3002
\u9019\u4e9b\u5c31\u662f Maglev \u7684\u62bd\u8c61\u7d50\u69cb\uff0c\u8aaa\u8d77\u4f86\u7c21\u55ae\uff0c\u4f46\u662f\u8ad6\u6587\u5167\u4ecb\u7d39\u7684\u4e00\u4e9b\u5be6\u4f5c\uff0c\u505a\u8d77\u4f86\u537b\u4e26\u4e0d\u7c21\u55ae\u3002
"},{"location":"essay/web/maglev/#\u80cc\u666f\u77e5\u8b58","title":"\u80cc\u666f\u77e5\u8b58","text":"\u5728\u958b\u59cb\u8b1b\u7d30\u7bc0\u524d\uff0c\u5148\u7c21\u55ae\u88dc\u8db3\u4e00\u4e0b\u80cc\u666f\u77e5\u8b58\u3002
"},{"location":"essay/web/maglev/#ecmp","title":"ECMP","text":"Equal-cost multi-path routing (ECMP) \u662f\u4e00\u7a2e\u8def\u7531\u6f14\u7b97\u6cd5\uff0c\u6211\u5011\u4f86\u900f\u904e\u5be6\u969b\u6848\u4f8b\u4e86\u89e3\u4ed6\u5427\uff01
\u5047\u8a2d\u6709\u4e00\u500b\u8def\u7531\u5668 (R) \u9023\u63a5\u5230\u4e09\u53f0\u4f3a\u670d\u5668 (S1, S2, S3) \u548c\u4e00\u53f0\u5ba2\u6236\u7aef\u6a5f\u5668 (C)\u3002 \u5f9e R \u5230\u9054\u4f3a\u670d\u5668\u6709\u5169\u500b\u7b49\u50f9\u6210\u672c\u7684\u8def\u5f91\uff0c\u8def\u5f91 1 (R -> \u4ecb\u9762 1) \u548c\u8def\u5f91 2 (R -> \u4ecb\u9762 2)\u3002 ECMP \u7684\u5c01\u5305\u6d41\u52d5\u5982\u4e0b\uff1a
\u73fe\u5728\uff0c\u60f3\u50cf\u5ba2\u6236\u7aef C \u5411\u4f3a\u670d\u5668 S1 \u767c\u9001\u53e6\u4e00\u500b\u5c01\u5305\u3002ECMP \u5c07\u518d\u6b21\u6839\u64da\u96dc\u6e4a\u7b97\u6cd5\u8a08\u7b97\u8def\u5f91\u3002 \u6709\u5169\u7a2e\u53ef\u80fd\u6027\uff1a
ECMP \u7684\u512a\u9ede\uff1a
\u9700\u8981\u8003\u616e\u7684\u4e8b\u9805\uff1a
\u7136\u800c Maglev \u900f\u904e\u4e00\u4e9b\u624b\u6bb5\uff0c\u4f86\u907f\u514d\u9023\u7dda\u7684\u4e2d\u65b7\u3002
"},{"location":"essay/web/maglev/#bgp","title":"BGP","text":"Border Gateway Protocol (BGP)\uff0c\u865f\u7a31\u6700\u8907\u96dc\u548c\u91cd\u8981\u7684\u8def\u7531\u5354\u5b9a\u4e4b\u4e00\uff0c\u4e3b\u8981\u76ee\u7684\u6709\u5e7e\u500b\uff1a
Linux \u5728\u8655\u7406\u5c01\u5305\u7684\u6642\u5019\u662f\u8907\u96dc\u7684\uff0c \u9019\u662f\u56e0\u70ba\u4ed6\u9700\u8981\u8655\u7406\u5f88\u591a L3/L4 \u7684\u5be6\u4f5c\u908f\u8f2f\u3002 \u800c\u5728 Maglev \u5be6\u4f5c\u4e2d\uff0c\u5247\u662f\u4f7f\u7528 Linux kernel bypass \u9019\u500b\u6a21\u7d44\uff0c\u900f\u904e\u5ba2\u88fd\u5316\u9054\u5230\u9ad8\u6548\u6027\u3002
"},{"location":"essay/web/maglev/#\u5be6\u4f5c\u7d30\u7bc0","title":"\u5be6\u4f5c\u7d30\u7bc0","text":""},{"location":"essay/web/maglev/#\u670d\u52d9\u767c\u73fe","title":"\u670d\u52d9\u767c\u73fe","text":"\u6ce8\u5165\u8a2d\u5b9a\u4e4b\u5f8c\uff0c\u900f\u904e Config Manager \u5206\u767c\u6240\u6709\u4e0a\u6e38\u7684\u8a2d\u5b9a\uff0c \u5305\u542b\u4e0a\u6e38\u670d\u52d9\u5404\u500b\u7bc0\u9ede\u7684\u5be6\u9ad4 IP \u548c\u4ee3\u8868\u670d\u52d9\u7684 VIP\u3002 \u540c\u6642\u6703\u6709\u500b Health Checker \u6aa2\u67e5\u4e0a\u6e38\uff0c\u4e26\u6c7a\u5b9a\u54ea\u4e9b\u4e0a\u6e38\u53ef\u4ee5\u63a5\u6536\u5c01\u5305\u3002
Maglev \u4e5f\u6703\u900f\u904e\u6ce8\u5165\u7684\u8a2d\u5b9a\uff0c\u628a\u76f8\u95dc\u7684 VIP \u85c9\u7531 BGP\uff08\u5716\u4e0a\u7684 VIP Announcer\uff09\u505a\u8def\u7531\u4f48\u9054\u3002
\u7531\u65bc\u5206\u6563\u5f0f\u7684\u67b6\u69cb\uff0c\u5169\u53f0 Maglev \u6709\u53ef\u80fd\u6703\u6709\u77ed\u66ab\u7684\u6642\u9593\uff0c\u540c\u6642\u64c1\u6709\u4e0d\u540c\u7684\u8a2d\u5b9a\uff0c \u9019\u6642\u900f\u904e ECMP \u548c consistent hashing \u6a5f\u5236\uff0c\u4f9d\u7167\u76f8\u540c\u7684 5-tuple \u4ecd\u7136\u53ef\u4ee5\u9078\u64c7\u5230\u76f8\u540c\u7684\u4e0a\u6e38\u3002
However, consistent hashing will make connection flaps between Maglevs with similar backend pools mostly succeed even during these very short windows.
"},{"location":"essay/web/maglev/#forwarder","title":"Forwarder","text":"Forwarder \u900f\u904e NIC \u6536\u5230\u5c01\u5305\u4e4b\u5f8c\uff0cMaglev \u6703\u9078\u64c7\u51fa\u7279\u5b9a\u7684\u4e0a\u6e38\uff0c \u7136\u5f8c\u628a\u76f8\u95dc\u5c01\u5305\u9032\u884c\u5305\u88dd\uff08encapsulation\uff09\u5f8c\uff0c\u50b3\u905e\u7d66\u8a72\u4e0a\u6e38\u3002
\u4e00\u958b\u59cb\u8b93\u6bcf\u500b\u5c01\u5305\u900f\u904e 5-tuple \u9078\u64c7 receiving queues \u6709\u5169\u500b\u597d\u8655\uff1a
\u4f46\u662f\u7576\u7279\u5b9a queue \u585e\u6eff\u6642\uff0c\u5c31\u6703\u958b\u59cb\u4f7f\u7528 round-robin \u7684\u9078\u64c7\u6f14\u7b97\u6cd5\uff0c\u907f\u514d\u5c01\u5305\u4e00\u76f4\u6392\u4e0d\u5230\u968a\u3002
\u4ee5\u4e0b\u662f backend selection \u7684\u908f\u8f2f\uff1a
flowchart TD\n packet[Poll from receiving queue] --> vip{Lookup VIP}\n vip --hit-->tuple[Calc 5-tuple]\n vip --miss--> drop[Drop]\n tuple --> backend{Lookup conn table}\n backend --hit--> enc[Encapsulate]\n backend --miss--> hash{Consistent Hashing}\n hash --select--> insert[Insert to table]\n insert --> enc\n hash --empty-->drop\n enc --> trans[Transmission Queue]\n
\u4e4b\u6240\u4ee5\u4e0d\u4f7f\u7528 steering \u7684 5 tuple \u662f\u70ba\u4e86\u907f\u514d\u8de8 thread \u4e4b\u9593\u7684\u885d\u7a81\uff0c \u6bcf\u500b thread \u7dad\u8b77\u81ea\u5df1\u7684 connection table \u4e5f\u662f\u540c\u6a23\u7684\u539f\u56e0\u3002
\u53e6\u5916\u7576\u4e0a\u6e38\u6c92\u6709\u4efb\u4f55\u53ef\u7528\u7684\u7bc0\u9ede\u6642\uff0cconsistent hashing \u5c31\u6703\u5f97\u5230 empty
\u7136\u5f8c drop \u6389\u76f8\u95dc\u5c01\u5305\u3002
\u7531\u65bc Maglev \u7684\u5176\u4e2d\u4e00\u500b\u7279\u8272\u662f\u53ef\u4ee5\u5728 Linux \u6a5f\u5668\u4e2d\u9032\u884c\u90e8\u7f72\uff0c \u6240\u4ee5\u9700\u8981\u900f\u904e bypass Linux kernel \u4f86\u907f\u514d\u4e2d\u9593\u7684\u7121\u8b02\u6d88\u8017\u3002 \u70ba\u4e86\u8b93\u5c01\u5305\u5728 steering \u548c muxing \u7b49\u6a21\u7d44\u4e4b\u9593\u50b3\u905e\u6642\uff0c\u4e0d\u8981\u7528\u8907\u88fd\uff0c\u4ed6\u5011\u90fd\u662f\u4f7f\u7528\u6307\u6a19\u9032\u884c\u8655\u7406\uff0c \u540c\u6642\uff0c\u70ba\u4e86\u9650\u5236\u670d\u52d9\u7684\u8a18\u61b6\u9ad4\u4f7f\u7528\uff0c\u5c31\u9700\u8981\u5efa\u7acb\u4e00\u500b packet pool \u4f86\u9650\u5236\u670d\u52d9\u7684\u8cc7\u6e90\u4f7f\u7528\u3002
\u5728 Maglev \u555f\u52d5\u6642\uff0c\u6703\u53bb\u8981\u4e00\u5b9a\u5927\u5c0f\u7684 packet pool \u53bb\u5132\u5b58\u5c01\u5305\uff0c \u9664\u6b64\u4e4b\u5916\uff0csteering \u548c muxing \u6a21\u7d44\u4e5f\u6703\u5206\u5225\u8981\u5230\u4e00\u5b9a\u5927\u5c0f\u7684 ring queue \u4f86\u5132\u5b58\u5c01\u5305\u7684\u6307\u6a19\u3002 \u800c\u9019\u5169\u500b\u6a21\u7d44\uff0c\u5404\u81ea\u53c8\u5728 ring queue \u4e0a\u653e\u4e86\u4e09\u7a2e\u4e0d\u540c\u610f\u7fa9\u7684\u63a2\u91dd\uff1a
\u9019\u88e1\u6bcf\u500b\u63a2\u91dd\u5728\u8655\u7406\u76f8\u61c9\u7684\u4efb\u52d9\u5f8c\uff0c\u5c31\u6703\u52a0 1\uff0c\u63db\u53e5\u8a71\u8aaa\uff0c\u9019\u4e9b\u63a2\u91dd\u6703\u4e92\u76f8\u8ffd\u8d95\u4ed6\u5011\u4e0b\u500b\u4efb\u52d9\u7684\u63a2\u91dd\u3002
\u512a\u5316\u8abf\u6574
\u70ba\u4e86\u8ffd\u6c42\u6548\u7387\uff0c\u6bcf\u500b\u63a2\u91dd\u90fd\u662f\u6279\u6b21\u8655\u7406\u4efb\u52d9\uff0c\u6240\u4ee5\u63a2\u91dd\u53ef\u80fd\u6703\u4e00\u6b21\u52a0\u8d85\u904e 1\u3002
\u70ba\u4e86\u9054\u5230\u9019\u500b\u6279\u6b21\u8655\u7406\uff0c\u5169\u500b\u6a21\u7d44\u6703\u5728\u7b49\u5230\u5c01\u5305\u9054\u5230\u4e00\u5b9a\u5927\u5c0f\u5f8c\uff0c \u6216\u8005\u7b49\u5230\u8d85\u904e \\(50\\mu s\\) \u5f8c\uff0c\u624d\u53bb\u8655\u7406\uff0c\u9019\u5c31\u6703\u640d\u5931\u4e00\u5b9a\u7684\u6f5b\u6642\u3002
\u524d\u9762\u63d0\u5230\u7684 forwarder \u7684\u6bcf\u500b thread \u5728\u8655\u7406\u4e00\u500b\u5c01\u5305\u4e0a\uff0c\u6703\u82b1\u5230\u7d04 350ns\uff0c \u5728\u9019\u6a23\u7684\u80cc\u666f\u4e0b\uff0c\u4f4e\u6d41\u91cf\u6642\u671f\u53ef\u80fd\u6703\u8b93\u5c01\u5305\u8655\u7406\u901f\u5ea6\u8b8a\u6162\uff0c\u53ef\u80fd\u7684\u505a\u6cd5\u5c31\u662f\u52d5\u614b\u8abf\u6574\u9019\u500b\u6279\u6b21\u5927\u5c0f\u3002
\u9019\u88e1\u4e5f\u4e00\u8d77\u8a08\u7b97\u4e00\u4e0b Maglev \u7406\u8ad6\u4e0a\u7684\u6975\u9650\u503c\uff0c\u5047\u8a2d packet pool \u5b58\u653e\u6700\u591a 3000 \u500b\u5c01\u5305 \uff08\u5047\u8a2d\u4e00\u500b\u5c01\u5305\u5927\u5c0f\u70ba 1500-byte\uff0c\u5c31\u6703\u9700\u8981 4.5 MB \u7684\u8a18\u61b6\u9ad4\uff09\uff0c \u7136\u5f8c\u5047\u8a2d\u6574\u500b forwarder \u53ef\u4ee5\u8655\u7406 10 Mpps \u7684\u91cf\uff0c \u4e5f\u5c31\u662f\u8aaa\u4ed6\u9700\u8981\u4f7f\u7528 \\(3000\\text{p} / 10^7\\text{pps} = 0.0003\\text{s}\\) \u79d2\u4f86\u5b8c\u5168\u8655\u7406\u9019\u4e9b\u5c01\u5305\u3002 \u9019\u4ee3\u8868 Maglev \u6703\u9020\u6210\u7279\u5b9a\u5c01\u5305\u6700\u9ad8 \\(300\\mu s\\) \u7684\u5ef6\u9072\u3002
"},{"location":"essay/web/maglev/#consistent-hashing","title":"Consistent Hashing","text":"\u524d\u9762\u6709\u63d0\u5230 ECMP \u6703\u900f\u904e\u96dc\u6e4a\u4f86\u9078\u64c7\u4e0a\u6e38\uff0c\u7406\u8ad6\u4e0a\u7576 Maglev \u53e2\u96c6\u6578\u91cf\u6c92\u8b8a\uff0c \u76f8\u540c\u8acb\u6c42\u90fd\u6703\u88ab\u9078\u64c7\u5230\u540c\u4e00\u500b Maglev \u4e0a\u3002 \u4f46\u9019\u500b\u5047\u8a2d\u6703\u96a8\u8457\u7dad\u904b\u65e5\u5e38\u800c\u88ab\u6253\u7834\uff0c\u4f8b\u5982\u65b0\u589e\u3001\u6e1b\u5c11\u6a5f\u5668\u3002 \u4e5f\u56e0\u6b64\uff0c\u5728\u9019\u908a\u7684 consistent hashing \u5c31\u5f88\u91cd\u8981\uff0c \u56e0\u70ba\u4e0d\u540c\u7684 Maglev \u6703\u6839\u64da\u76f8\u540c\u7684 hash \u7d50\u679c\uff0c\u800c\u53bb\u9078\u64c7\u76f8\u540c\u7684\u4e0a\u6e38\u3002
\u908a\u969b\u72c0\u6cc1
\u7576\u5728 Maglev \u7bc0\u9ede\u65b0\u589e\u6e1b\u5c11\u6642\uff08ECMP \u91cd\u7b97\u6642\uff09\uff0c\u5982\u679c\u540c\u6642\u53bb\u66f4\u65b0 Maglev \u7684\u8a2d\u5b9a\u6a94\uff0c \u5c31\u5f88\u53ef\u80fd\u6703\u9047\u5230\u524d\u9762\u63d0\u5230\u7684\u908a\u969b\u72c0\u6cc1\uff0c\u5c0e\u81f4\u9023\u7dda\u932f\u4f4d\uff08connection flaps\uff09\u3002
\u65e9\u5728 1990s Rendezvous \u5c31\u63d0\u51fa\u7b2c\u4e00\u500b consistent hashing \u7684\u6a5f\u5236\uff0c \u60f3\u50cf\u4e00\u4e0b\u5982\u679c\u7528 mod \u4f86\u505a\u4e0a\u6e38\u7684\u6311\u9078\uff0c\u5047\u8a2d\u7e3d\u5171\u6709 5 \u500b\u4e0a\u6e38\u7bc0\u9ede\uff0c \u6839\u64da 5-tuple \u53bb\u505a\u4e00\u500b hash \u7136\u5f8c\u7528 mod 5
\u7684\u7d50\u679c\uff0c\u4f86\u5e73\u5747\u5206\u914d\u7d66\u9019 5 \u500b\u7bc0\u9ede\u3002 \u4f46\u662f\u5982\u679c\u670d\u52d9\u5f9e 5 \u500b\u7bc0\u9ede\u8b8a\u6210 6 \u500b\uff0c\u5c31\u6703\u8b93\u5e7e\u4e4e\u6240\u6709\u9023\u7dda\u90fd\u88ab\u91cd\u65b0\u5206\u914d\uff0c \u4f8b\u5982 10 mod 5
\u5f9e 0 \u8b8a\u6210 4\u3002 consistent hashing \u5c31\u662f\u5728\u89e3\u6c7a\u9019\u500b\u554f\u984c\u3002
\u9019\u88e1\u63d0\u4e00\u4e0b\u65e9\u524d\u7684\u6f14\u7b97\u6cd5\u5957\u7528\u5728 Maglev \u4e0a\u6703\u6709\u7684\u4e00\u4e9b\u72c0\u6cc1\uff1a
\u63db\u53e5\u8a71\u8aaa\uff0c\u5728\u72a7\u7272\u7b2c 2 \u9ede\u7684\u60c5\u6cc1\u4e0b\uff0c\u6211\u5011\u53ef\u4ee5\u5617\u8a66\u6539\u5584\u7b2c 1 \u9ede\u3002
\u4ec0\u9ebc\u662f\u300c\u8868\u300d
\u9019\u88e1\u7684\u8868\u5728\u5c55\u793a\u6f14\u7b97\u6cd5\u7d30\u7bc0\u6642\u5c31\u6703\u770b\u5230\uff0c\u6982\u5ff5\u5c31\u662f consistent hashing \u6703\u5efa\u7acb\u4e00\u500b\u8868\uff0c \u4ee5\u9054\u5230\u7a69\u5b9a\u6563\u5217\u7684\u76ee\u7684\u3002
\u6bcf\u6b21\u8868\u91cd\u5efa\uff0c\u5c31\u6709\u53ef\u80fd\u5c0e\u81f4\u76f8\u540c\u7684 5-tuple \u5c0d\u61c9\u5230\u4e0d\u540c\u4e0a\u6e38\u3002
"},{"location":"essay/web/maglev/#maglev-\u7684-consistent-hashing","title":"Maglev \u7684 Consistent Hashing","text":"\u5047\u8a2d\u6211\u5011\u6709\u500b\u8868\u5927\u5c0f\u70ba \\(M\\)\u3001\u4e0a\u6e38\u6578\u91cf\u70ba \\(N\\)\uff0c \u4e26\u9078\u5b9a\u5169\u500b hash \u51fd\u5f0f\uff0ch1
\u3001h2
\uff0c \u7136\u5f8c\u4f9d\u6b64\u627e\u51fa\u6bcf\u500b\u4e0a\u6e38\u7684 offset
\u548c skip
\uff1a
\u6700\u5f8c\u5c31\u53ef\u4ee5\u5efa\u7acb\u51fa\u5c0d\u7167\u8868\uff1a
\\[\\begin{aligned} \\mathit{permutation}_{ij} = (\\mathit{offset}_i + j \\times \\mathit{skip}_i) \\mod M \\qquad \\forall \\quad i \\in N , j \\in M \\end{aligned}\\]\u4f46\u9019\u88e1\u8981\u8a18\u5f97\u628a M \u8a2d\u70ba\u8cea\u6578\uff0c\u5426\u5247\u5728\u7528 skip
\u904d\u6b77 permutation
\u5c31\u6703\u8df3\u4e0d\u51fa\u5faa\u74b0\u3002
\u6700\u5f8c\u6839\u64da\u4e0a\u8ff0\u7684\u6f14\u7b97\u6cd5\u5f97\u51fa\u4e00\u500b\u9577\u5ea6\u70ba M \u7684\u6563\u5217\u8868 entry
\u3002
\u5047\u8a2d\u6709 3 \u500b\u4e0a\u6e38\uff0c\u8868\u5927\u5c0f\u70ba 7\uff0c\u4e14 3 \u500b\u4e0a\u904a\u7684 offset
\u548c skip
\u5206\u5225\u662f\uff1a (3, 4)
\u3001(0, 2)
\u548c (3, 1)
\uff0c\u5f97\u51fa permutation
\u8868\u5982\u4e0b\uff1a
j
i=0
i=1
i=2
0 3 0 3 1 0 2 4 2 4 4 5 3 1 6 6 4 5 1 0 5 2 3 1 6 6 5 2 \u5728\u524d\u9762\u7684\u6f14\u7b97\u6cd5\u4e2d\uff0c\u6211\u5011\u5c55\u793a\u5728\u7b2c 5 \u884c\u7684 while loop \u4e00\u6b65\u4e00\u6b65\u63a8\u6f14\u4e0b\u7684\u60c5\u6cc1\uff08\u5047\u8a2d B0 \u4ee3\u8868 i=0
\u7684\u4e0a\u6e38\uff09\uff1a
\u5728\u4e0a\u8ff0\u63a8\u6f14\u4e0b\uff0c\u53ef\u4ee5\u5f97\u51fa entry
\uff1a
\u7576 B1 \u9019\u500b\u4e0a\u6e38\u4e0b\u7dda\u4e4b\u5f8c\uff0c\u91cd\u65b0\u63a8\u6f14\uff1a
Step B0 B2 1 3 3, 4 2 0 5 3 4, 1 6 4 5, 2 -\u5f97\u51fa\u7684\u65b0 entry
\uff0c\u4e26\u9032\u884c\u6bd4\u8f03\uff1a
\u53ef\u4ee5\u770b\u5230\u5927\u90e8\u5206\u7684 hash \u4ecd\u5728\u539f\u672c\u4f4d\u7f6e\uff0c\u4f46\u662f\u90e8\u5206\u4ecd\u6703\u6709\u8b8a\u66f4\uff0c\u4f8b\u5982 j=6
\u3002 \u5f9e\u4ee5\u4e0a\u7bc4\u4f8b\u53ef\u4ee5\u77e5\u9053\u9019\u662f\u4e00\u7d44\u4e0a\u6e38\uff0c\u5982\u679c\u4f60\u6709\u5f88\u591a\u500b\u670d\u52d9\uff0c\u6bcf\u500b\u670d\u52d9\u90fd\u6709\u81ea\u5df1\u7684\u4e00\u7fa4\u4e0a\u6e38\uff0c \u9019\u6642\u5c31\u6703\u9700\u8981\u5efa\u7f6e\u76f8\u61c9\u6578\u91cf\u7684\u8868\uff0c\u6240\u4ee5\u8868\u7684\u5927\u5c0f\uff0c\u5c0d\u65bc\u670d\u52d9\u7684\u8cc7\u6e90\u7528\u91cf\u5c31\u662f\u4e00\u9805\u91cd\u8981\u8b70\u984c\u3002
\u9664\u4e86\u900f\u904e\u767d\u7bb1\uff08\u4ee5 HTTP \u65b9\u5f0f\u66b4\u9732\u6307\u6a19\uff09\u548c\u9ed1\u7bb1\uff08\u63a2\u91dd\uff09\u53bb\u5b9a\u671f\u76e3\u63a7\u5916\uff0cMaglev \u4e5f\u6709\u4e00\u4e9b\u9664\u932f\u624b\u6bb5\u3002
\u7531\u65bc\u5f9e router \u8d70\u5230 Maglev \u518d\u8d70\u5230\u4e0a\u6e38\u7bc0\u9ede\u7684\u8def\u5f91\u5f88\u591a\u7a2e\uff0c\u6709\u6642\u70ba\u4e86\u9664\u932f\uff0c \u6703\u9700\u8981\u4e00\u500b\u65b9\u6cd5\u77e5\u9053 Maglev \u5230\u5e95\u628a\u9019\u500b\u5c01\u5305\u9001\u7d66\u8ab0\u3002 \u958b\u767c\u5718\u968a\u8b93 Maglev \u53ef\u4ee5\u8fa8\u8b58\u7279\u5b9a L3 \u548c L4 \u7684\u8868\u982d\uff0c\u7576\u6536\u5230\u9019\u500b\u8868\u982d\uff0c \u5c31\u6703\u628a\u9019\u6b21\u7684\u8def\u7531\u6b77\u7a0b\u7b49\u7b49\u7528\u4f86\u9664\u932f\u7684\u8cc7\u8a0a\u767c\u9001\u5230\u7279\u5b9a\u7684 IP \u4e2d\u3002
\u958b\u767c\u8005\u986f\u7136\u5f88\u611b\u9019\u500b\u9664\u932f\u5de5\u5177\uff1a
This tool is extremely helpful in debugging production issues, especially when there is more than one Maglev machine on the path, as happens in the case of fragment redirection.
"},{"location":"essay/web/maglev/#\u6e2c\u8a66","title":"\u6e2c\u8a66","text":"\u6536\u96c6\u6b50\u6d32\u53e2\u96c6\u4e2d\uff0c458 \u500b\u4e0a\u6e38\uff08\u5305\u62ec Google Search\uff09\u7684 connections per second (cps) \u5f8c\uff0c \u4ed6\u5011\u8a08\u7b97\u51fa\u5176\u6574\u9ad4\u7684 cps \u5e73\u5747\u503c\u548c\u6a19\u6e96\u5dee\uff0c\u6a19\u6e96\u5dee\u90fd\u843d\u5728 6%~7%\u3002 \u5f9e\u5e73\u5747\u503c\uff08\u85cd\u7dda\uff09\u4e2d\u4e5f\u53ef\u4ee5\u770b\u51fa\u9ad8\u4f4e\u5c01\u548c\u4f5c\u606f\u7684\u95dc\u4fc2\uff08\u6642\u9593\u8ef8\u4e26\u975e\u7576\u5730\u6642\u9593\uff09\u3002
\u9ec3\u8272\u7dda\u5247\u4ee3\u8868\u662f\u5426\u904e\u5ea6\u5efa\u7f6e\u6a5f\u5668\uff0c\u5728\u6d41\u91cf\u9ad8\u5cf0\u6642\u5927\u7d04\u843d\u5728 9 \u6210\u7684\u8ca0\u8f09\u80fd\u529b\uff0c \u4e5f\u5c31\u662f\u8aac\uff0c\u5047\u8a2d\u670d\u52d9\u53ef\u4ee5\u6700\u9ad8\u627f\u8f09 10 rps \u7684\u6d41\u91cf\uff0c\u5be6\u969b\u6d41\u91cf\u5247\u843d\u5728 9 rps\u3002 \u96e2\u5cf0\u6642\u56e0\u70ba\u6d41\u91cf\u4f4e\u672c\u8eab\u5c31\u5f88\u8f03\u96e3\u6293\u8cc7\u6e90\uff0c\u6240\u4ee5\u5c31\u5bb9\u6613\u6709\u904e\u5ea6\u5efa\u7f6e\u7684\u554f\u984c\uff0c\u4f46\u662f\u4e5f\u843d\u5728 7.5 \u6210\u5de6\u53f3\u3002
\u9019\u9805\u6307\u6a19\u4ee3\u8868\u8457 Maglev \u662f\u5426\u6b63\u78ba\u7684\u5747\u8861\u8ca0\u8f09\uff0c\u56e0\u70ba\u8d8a\u4e0d\u5747\u8861\u7684\u8d8a\u5bb9\u6613\u9020\u6210\u904e\u5ea6\u5efa\u7f6e\u3002
SYN
\u7684\u5c01\u5305\u4ee3\u8868\u8457\u7b2c\u4e00\u6b21\u901a\u904e Maglev\uff0c\u6240\u4ee5\u6703\u9700\u8981\u8a08\u7b97 consistent hashing \u4f86\u5c0b\u627e\u4e0a\u6e38\uff1b non-SYN
\u5247\u662f\u4ee3\u8868\u9023\u7dda\u5efa\u7acb\u5f8c\u7684\u5c01\u5305\uff0c\u56e0\u70ba\u4e0d\u7528\u8a08\u7b97 consistent hashing \u6240\u4ee5\u901a\u91cf\u8f03\u9ad8\uff1b \u6700\u5f8c\u5247\u662f\u6975\u7aef\u7684 5-tuple\uff0c\u5b8c\u5168\u76f8\u540c\u7684\u4f86\u6e90\u548c\u76ee\u7684\uff0c\u7528\u4f86\u6e2c\u8a66\u7406\u8ad6\u4e0a\u7684\u6700\u9ad8\u901a\u91cf\u3002
\u7576 thread \u6578\u62c9\u9ad8\u5230 6 \u548c 7 \u7684\u6642\u5019\uff0c\u5c31\u53ef\u4ee5\u770b\u5230\u74f6\u9838\u4e0d\u662f\u7b97\u529b\uff0c\u800c\u662f\u5728\u65bc NIC\u3002 \u7576 NIC \u70ba 40 Gbps \u6642\uff0c\u5c31\u53ef\u4ee5\u9806\u5229\u4e0a\u53bb\uff0c\u4f46\u662f\u518d\u4e0a\u53bb\u7684\u74f6\u9838\u53c8\u8b8a\u6210\u4e86 steering \u6a21\u7d44\uff0c \u6240\u4ee5\u9019\u4e5f\u662f\u672a\u4f86\u53ef\u4ee5\u512a\u5316\u7684\u65b9\u5411\u3002
\u900f\u904e Maglev \u7684 consistent hashing \u6f14\u7b97\u6cd5\uff0c \u53ea\u9700\u8981 65537 \u7684\u8868 2\uff0c\u4e0d\u9700\u8981 65537 \u9019\u9ebc\u5927\u7684\u8868\uff0c\u5c31\u53ef\u4ee5\u8b93\u8ca0\u8f09\u9054\u5230\u8db3\u5920\u5747\u8861\u3002
\u4e0a\u5716\u7684\u5be6\u9a57\u662f\u8a2d\u5b9a 1000 \u500b\u4e0a\u6e38\uff0c\u4e26\u5c0d\u61c9\u5169\u7a2e\u4e0d\u540c\u5927\u5c0f\u7684\u8868\u548c\u4e09\u500b\u4e0d\u540c\u7684\u6f14\u7b97\u6cd5\uff0c \u7e31\u8ef8\u4ee3\u8868\u6bcf\u500b\u4e0a\u6e38\u5728\u9019\u5f35\u8868\u51fa\u73fe\u7684\u6bd4\u4f8b\uff0c\u63db\u53e5\u8a71\u8aaa\uff0c\u6bcf\u500b\u4e0a\u6e38\u5206\u914d\u5230 0.001 \u7684\u8868\u5c31\u662f\u5b8c\u7f8e\u7684\u5747\u8861\u8ca0\u8f09\u3002 \u53ef\u4ee5\u770b\u5230\u9664\u4e86 Maglev \u7684\u6f14\u7b97\u6cd5\u4e4b\u5916\uff0c\u5269\u4e0b\u5169\u500b\u90fd\u5bb9\u6613\u6703\u6709\u4e0d\u5747\u8861\u8ca0\u8f09\u7684\u72c0\u6cc1\u3002
\u7531\u65bc Karger \u6f14\u7b97\u6cd5\u548c Rendezvous \u6f14\u7b97\u6cd5\u90fd\u4e0d\u6703\u56e0\u70ba\u4e0a\u6e38\u8b8a\u52d5\uff0c\u800c\u6539\u8b8a\u5176\u5c0d\u61c9\u4f4d\u7f6e\uff0c \u6240\u4ee5\u4e0a\u5716\u53ea\u6709\u5c55\u793a Maglev \u5c0d\u65bc\u4e0a\u6e38\u8b8a\u52d5\u7684\u8ca0\u8377\u80fd\u529b\u3002 \u96a8\u8457\u4e00\u5b9a\u6bd4\u4f8b\u7684\u4e0a\u6e38\u5931\u80fd\uff08\u6a6b\u8ef8\uff09\uff0c\u53ef\u4ee5\u770b\u5230\u9019\u5f35\u8868\u7684\u932f\u4f4d\u6bd4\u4f8b\u6703\u4e0a\u5347\uff0c\u800c\u8868\u8d8a\u5927\uff0c\u8d8a\u80fd\u5bb9\u932f\u3002
\u5373\u4f7f\u5982\u6b64\uff0cMaglev \u9810\u8a2d\u7684\u8868\u5927\u5c0f\u4ecd\u7136\u662f 65537\uff0c\u9019\u662f\u56e0\u70ba 65537 \u5927\u5c0f\u7684\u8868\u91cd\u5efa\u9700\u8981\u7d04 1.8ms\uff0c \u800c 655373 \u7684\u8868\u5247\u9700\u8981 22.9ms\uff0c\u9019\u662f\u56e0\u70ba\u4e00\u6b21\u6027\u5927\u91cf\u4e0a\u6e38\u5931\u80fd\u7684\u60c5\u6cc1\u4e0d\u591a\uff0c \u72a7\u7272\u7684\u6578\u5341\u6beb\u79d2\u5c31\u986f\u5f97\u4e0d\u5920\u5212\u7b97\u3002
"},{"location":"essay/web/maglev/#\u5ef6\u4f38","title":"\u5ef6\u4f38","text":"\u4ee5\u4e0b\u662f\u4e00\u4e9b\u5be6\u52d9\u4e0a\u6703\u9047\u5230\u7684\u554f\u984c\u548c\u76f8\u95dc\u64f4\u5c55\u7684\u61c9\u7528\u3002
"},{"location":"essay/web/maglev/#vip-matching","title":"VIP Matching","text":"Google \u6709\u5f88\u591a\u53e2\u96c6\uff0c\u4e26\u4e14\u6703\u66ff\u5404\u500b\u53e2\u96c6\u5206\u985e\uff08classes\uff09\uff0c\u8d8a\u5927\u7684\u53e2\u96c6\u5176\u5167\u90e8\u64c1\u6709\u7684 IP \u5c31\u8d8a\u591a\uff0c \u63db\u53e5\u8a71\u8aaa\uff0c\u5b83\u7684 IP \u524d\u7db4\u6703\u66f4\u77ed\uff0c\u4f8b\u5982 121.113.17.0/20
\u5c31\u6bd4 74.125.137.0/24
\u9084\u8981\u5927\u3002
\u7576\u4e0a\u6e38\u767c\u751f\u707d\u96e3\u7684\u6642\u5019\uff0cMaglev \u6703\u9700\u8981\u628a\u6d41\u91cf\u8f49\u79fb\u5230\u4e0d\u540c\u7684\u53e2\u96c6\u4e0a\u6e38\u4e2d\uff0c \u9019\u6642\uff0c\u5b83\u5011\u5c31\u9700\u8981\u500b\u65b9\u6cd5\u77e5\u9053\u5404\u500b\u53e2\u96c6\u7684\u4e0a\u6e38 VIP\u3002 \u6bd4\u8d77\u900f\u904e\u8a2d\u5b9a\u7b49\u65b9\u5f0f\u8b93\u5404\u500b Maglev \u8a8d\u51fa\u5c0d\u65b9\u4f86\uff0c\u958b\u767c\u5718\u968a\u63d0\u51fa\u53e6\u4e00\u500b\u65b9\u5f0f\u4f86\u89e3\u6c7a\u3002
\u6211\u5011\u8b93\u4e0d\u540c\u53e2\u96c6\uff0c\u4f46\u662f\u76f8\u540c\u4e0a\u6e38\u7684 BP \u90fd\u6703\u64c1\u6709\u76f8\u540c\u300c\u5f8c\u7db4\u300d\u7684 VIP\u3002 \u9019\u6642\uff0c\u5982\u679c\u6211\u5011\u9650\u5236 Maglev \u53ea\u80fd\u628a\u6d41\u91cf\u8f49\u5c0e\u5230\u76f8\u540c\u7b49\u7d1a\u7684\u53e2\u96c6\uff0c \u5c31\u53ef\u4ee5\u4e0d\u9700\u8981\u77e5\u9053\u5c0d\u65b9\u4e0a\u6e38 VIP \u7684\u72c0\u6cc1\u4e0b\uff0c\u55ae\u7d14\u628a\u5c01\u5305\u524d\u7db4\u6539\u6210\u5c0d\u61c9\u7684\u53e2\u96c6\uff0c \u5c31\u53ef\u4ee5\u9806\u5229\u8f49\u5c0e\u3002
\u4ee5\u4e0a\u5716\u70ba\u4f8b\uff0c173.194.71.1
\u7684 Service 1
\u88ab\u8f49\u5c0e\u70ba 173.194.72.1
\u7684\u76f8\u540c\u670d\u52d9\u3002
\u5728 IP \u4e2d\uff0c\u6709\u4e00\u500b\u6280\u8853\u7a31\u70ba IP \u5206\u7247 (IP fragmentation)\uff0c \u5b83\u7684\u76ee\u7684\u662f\u6700\u5927\u5316\u5c01\u5305\u6548\u7387\uff0c\u4f8b\u5982\u5927\u8cc7\u6599\u7684\u50b3\u8f38\u3002 \u8a72\u5354\u5b9a\u53ea\u6703\u8b93\u7b2c\u4e00\u500b\u5c01\u5305\u64c1\u6709 L4 \u7684\u6a19\u982d\uff0c\u63db\u53e5\u8a71\u8aaa\uff0c\u524d\u9762\u63d0\u5230\u7684 5-tuple \u56e0\u70ba\u6c92\u6709 port \u7684\u8cc7\u8a0a\uff0c \u6240\u4ee5\u8a08\u7b97\u51fa\u7684 5-tuple \u6703\u5931\u6e96\uff0c\u5c0e\u81f4\u9001\u5230\u4e0d\u540c\u7684\u4e0a\u6e38\u3002
Maglev \u6703\u5148\u900f\u904e 3-tuple\uff08\u4f86\u6e90 IP\u3001\u76ee\u7684 IP\u3001\u5354\u5b9a\u985e\u5225\uff09\uff0c \u6c7a\u5b9a\u8a72\u5c01\u5305\u8981\u8b93 Maglev \u53e2\u96c6\u4e2d\u7684\u54ea\u500b Maglev\uff08\u900f\u904e\u8a2d\u5b9a\u8b93\u5b83\u5011\u8a8d\u8b58\u5c0d\u65b9\uff09\u8655\u7406\u3002 \u7576\u78ba\u4fdd\u540c\u500b\u6d41\u7684\u5c01\u5305\u90fd\u9032\u5230\u540c\u500b Maglev \u5f8c\uff0c\u5c31\u53ef\u4ee5\u5728\u5176\u5167\u90e8\u6c7a\u5b9a\u4e0a\u6e38\u8981\u8d70\u54ea\u4e00\u500b\u7bc0\u9ede\uff0c\u5176\u6f14\u7b97\u6cd5\u5982\u4e0b\uff1a
\u5982\u679c\u5f8c\u7e8c\u5c01\u5305\u6bd4\u7b2c\u4e00\u500b\u5c01\u5305\u65e9\u5230\uff0c\u5c31\u6703\u5feb\u53d6\u7b49\u5230\u7b2c\u4e00\u500b\u5c01\u5305\u62b5\u9054\uff0c\u6216\u8005\u904e\u671f\u3002 \u7531\u65bc\u9650\u5236\u53ef\u4ee5\u4f7f\u7528 fragmentation \u7684\u670d\u52d9\uff0c\u6240\u4ee5\u9019\u500b\u8868\u4e0d\u9700\u8981\u591a\u5927\u7684\u8cc7\u6e90\u5c31\u80fd\u8655\u7406\u3002
"},{"location":"essay/web/maglev/#sharding","title":"Sharding","text":"\u6587\u4e2d\u6709\u63d0\u5230 Maglev \u7406\u8ad6\u4e0a\u662f\u53ef\u4ee5\u505a sharding \u7684\uff0c\u4f46\u662f\u4e26\u6c92\u6709\u592a\u591a\u7d30\u7bc0\uff0c \u6211\u8a8d\u70ba\u9019\u500b\u984c\u76ee\u6eff\u9069\u5408\u7576\u4f5c\u56de\u5bb6\u4f5c\u696d\u7684\uff0c\u53ef\u4ee5\u62ff\u4f86\u81ea\u5df1\u60f3\u60f3\u8a72\u600e\u9ebc\u5be6\u4f5c\u6bd4\u8f03\u597d\uff0c\u5c31\u4e0d\u5728\u9019\u908a\u95e1\u8ff0\u4e86\uff01
"},{"location":"essay/web/maglev/#\u7e3d\u7d50","title":"\u7e3d\u7d50","text":"\u548c\u786c\u9ad4\u8ca0\u8f09\u5747\u8861\u5668\u76f8\uff0cMaglev \u53ef\u4ee5\u505a\u5230\u6c34\u5e73\u64f4\u5c55\uff0c\u901a\u904e\u4e00\u4e9b\u5de7\u5999\u7684\u8a2d\u8a08\u4e5f\u80fd\u6709\u6548\u7dad\u6301\u9577\u9023\u7dda\u3002 \u5e02\u9762\u4e0a\u5176\u5be6\u4e5f\u6709\u4e00\u4e9b\u8edf\u9ad4\u8ca0\u8f09\u5747\u8861\u5668\u5982 Microsoft Ananta \uff0c\u4f46\u662f\u4e26\u6c92\u6709\u91dd\u5c0d kernel \u7684\u9ad8\u6548\u4f7f\u7528\u548c\u4e0a\u6e38\u7bc0\u9ede\u7570\u52d5\u7684\u72c0\u6cc1\u4f86\u512a\u5316\u3002 \u5176\u4ed6\u5982 NGINX \u7684\u901a\u7528\u578b\u8ca0\u8f09\u5747\u8861\u5668\uff0c\u96d6\u7136\u53ef\u4ee5\u642d\u914d ECMP \u7684\u8def\u7531\u5668\u548c consistent hashing \u7684\u5916\u639b\uff0c \u4f46\u662f\u70ba\u4e86\u6eff\u8db3\u66f4\u591a\u7684\u5ba2\u88fd\u5316\u548c\u4fbf\u5229\u6027\uff0c\u72a7\u7272\u90e8\u5206\u6548\u80fd\u3002
\u5176\u4ed6\u8edf\u9ad4\u512a\u5316\u7d30\u7bc0\u7684\u53c3\u8003\u653e\u5728\u4e0b\u9762\uff0c\u6709\u8208\u8da3\u518d\u770b\u5427\uff01 \u4e0d\u904e\u770b\u5230 Maglev \u7c21\u55ae\u7684\u8a2d\u8a08\uff0c\u8b93\u6211\u60f3\u5230\u540c\u4e8b\u7684\u4e00\u53e5\u8a71\uff0c\u5c31\u4ee5\u6b64\u53e5\u8a71\u505a\u70ba\u7d50\u5c3e\uff1a
\u5206\u6563\u5f0f\u7684\u554f\u984c\u662f\u500b\u5f88\u597d\u7406\u89e3\u7684\u554f\u984c\uff0c\u4e5f\u5f88\u76f4\u89c0\uff0c\u4f46\u662f\u70ba\u4ec0\u9ebc\u89e3\u6c7a\u9019\u500b\u554f\u984c\u7684\u65b9\u5f0f\u90fd\u9019\u9ebc\u8907\u96dc\uff1f
\u5be6\u4f5c\u7d30\u7bc0\u53c3\u8003Smith et al 3 \u5efa\u8b70\u6e1b\u5c11\u8edf\u4e2d\u65b7\u548c\u7269\u4ef6\u8907\u88fd\u4f86\u589e\u52a0\u61c9\u7528\u7a0b\u5f0f\u7684\u901a\u91cf\u3002 Mogul et al 4 \u958b\u767c polling-based \u7684\u65b9\u5f0f\u4f86\u907f\u514d\u9396\u7684\u4e2d\u65b7\u3002 Edwards et al 5 \u63d0\u51fa\u4f7f\u7528 userspace \u7684\u7db2\u8def\u4f86\u505a\u9694\u96e2\u3002 Marinos et al 6 \u986f\u793a\u4f7f\u7528\u7279\u5b9a userspace \u7db2\u8def\u5806\u68e7\u548c kernel bypass \u53ef\u4ee5\u5927\u5e45\u63d0\u9ad8\u901a\u91cf\u3002 Hanford et al 7 \u5efa\u8b70\u628a\u5206\u6563\u7684\u5c01\u5305\u653e\u5728\u4e0d\u540c CPU \u8655\u7406\uff0c\u63d0\u9ad8\u5feb\u53d6\u547d\u4e2d\u7387\u3002 CuckooSwitch 8 \u662f\u500b\u9ad8\u6821\u7684\u8edf\u9ad4 L2 \u4ea4\u63db\u5668\uff0c\u5176\u4e2d\u4e00\u500b\u7279\u8272\u5c31\u662f\u6279\u6b21\u548c\u9810\u7d04\u5f0f\u7684\u6240\u53d6\u8a18\u61b6\u9ad4\u3002 RouteBricks 9 \u89e3\u91cb\u5982\u4f55\u6709\u6548\u7684\u5229\u7528\u5e73\u884c\u904b\u7b97\u4f86\u8655\u7406\u4e0d\u540c\u7684\u5c01\u5305\u3002
... \u5982\u540c\u5176\u4ed6\u6280\u8853\uff0c\u7576 Maglev \u555f\u52d5\u6642\u5b83\u6703\u52ab\u6301\u6574\u500b NIC\uff0c\u4e26\u4f7f\u7528 TAP \u4ecb\u9762\u4f86\u628a\u5c01\u5305\u91cd\u65b0\u50b3\u905e\u7d66 NIC\u3002
\u53c3\u95b1\u7b2c\u4e09\u6bb5\uff0cForwarder Design and Implementation\u3002\u00a0\u21a9
\u9019\u6578\u5b57\u6c92\u6709\u4efb\u4f55\u610f\u7fa9\uff0c\u53ea\u662f\u9078\u4e86\u4e00\u500b\u5920\u5927\u7684\u8cea\u6578\u505a\u5be6\u9a57\u3002\u00a0\u21a9
J. Smith and C. Traw. Giving applications access to gb/s networking. Network, IEEE, 7(4):44\u201352, 1993.\u00a0\u21a9
J. C. Mogul and K. K. Ramakrishnan. Eliminating receive livelock in an interrupt-driven kernel. In Proceedings of USENIX ATC, 1996.\u00a0\u21a9
A. Edwards and S. Muir. Experiences implementing a high performance tcp in user-space. In Proceedings of SIGCOMM, 1995.\u00a0\u21a9
I. Marinos, R. N. Watson, and M. Handley. Network stack specialization for performance. In Proceedings of SIGCOMM, 2014.\u00a0\u21a9
N. Hanford, V. Ahuja, M. Balman, M. K. Farrens, D. Ghosal, E. Pouyoul, and B. Tierney. Characterizing the impact of endsystem affinities on the end-to-end performance of high-speed flows. In Proceedings of NDM, 2013.\u00a0\u21a9
D. Zhou, B. Fan, H. Lim, M. Kaminsky, and D. G. Andersen. Scalable, high performance ethernet forwarding with cuckooswitch. In Proceedings of CoNEXT, 2013.\u00a0\u21a9
M. Dobrescu, N. Egi, K. Argyraki, B.-G. Chun, K. Fall, G. Iannaccone, A. Knies, M. Manesh, and S. Ratnasamy. Routebricks: Exploiting parallelism to scale software routers. In Proceedings of SOSP, 2009.\u00a0\u21a9
Written By Harris Andrea, original post
\u672a\u4f86\u60f3\u7ffb\u8b6f\u9019\u7bc7\u6587\u7ae0\uff0c\u4e26\u671f\u671b\u8b80\u904e\u5176\u4e2d\u5e7e\u672c\uff0c\u5148\u653e\u8457\u3002
I have read tens of books (both in ebook format and also hard copy textbooks) in my networking professional career over the last 18 years.
In fact, all of my preparation for my Cisco and other IT certifications was based on book studying (in addition to hands-on practice of course).
Personally, I believe that having a hard copy book in your hands and reading it from start to finish by taking written notes along the way, is one of the best ways to memorize and learn the material.
In this article I will list and review some of the best books on computer networking for both beginners and expert professionals.
The field of TCP/IP networking is evolving with new technological advancements and, in my opinion, it currently undergoes a transition from purely hardware to more software-based networks.
For the reason above I have also included books in the list (see towards the end) that focus on next generation networks, SDN, and automation/programmability.
When I first wrote this article, I intentionally didn\u2019t include any books related to Cisco certifications because that time was a transitional period for Cisco exams and certifications.
After the dust has settled, there are now some great Cisco books worth mentioning for professionals looking to earn Cisco certifications, so I have included some recommended options in the list.
You will find mostly some great books which teach both the fundamentals and more advanced concepts in computer networking that will surely be very valuable for professionals.
Let\u2019s get started:
"},{"location":"essay/web/network-books/#computer-networking-a-top-down-approach","title":"Computer Networking: A Top-Down Approach","text":"Computer Networking: A Top-Down Approach (6th Edition)
This book is organized into the network layers of Internet Protocol Stack which is the base of all computer networking (together with the OSI model), therefore it offers a very good structure and learning experience.
Written by two University professors (James Kurose and Keith Ross), the book is mostly suited for beginners and for university students in computer science or engineering majors.
Even if people who don\u2019t have any knowledge about networking will find the book easily accessible and comprehensible.
Although currently there is a newer 7th Edition of this book, its much higher price tag compared to the 6th Edition is not worth the extra money.
Also, the newer edition does not include that much extra material so I would recommend the cheaper 6th Edition just to save you some money. Although it is an older book, you will still learn the fundamentals of networking which is the basis for more practical material.
As I said above, the book is called \u201cTop-Down Approach\u201d because it starts at the Application layer of the Internet Protocol Stack (top layer) and works its way down to the Physical layer (bottom layer) of the stack. The other layers examined include Transport, Network and Link layers.
The above structure makes sense a lot in the pedagogical perspective since the whole computer networking functionality is based on this protocol layered structure.
Most useful for:
To summarize, I belief this book is a great choice for beginners or university students to acquire a comprehensive knowledge in computer networking fundamentals.
"},{"location":"essay/web/network-books/#network-warrior","title":"Network Warrior","text":"Network Warrior (2nd Edition)
Unlike the previous book above, \u201cNetwork Warrior\u201d book is much more practical and the examples described in the book are taken from real world networks and from the experience of the author.
The practical examples and configuration samples you will find in the book are taken from actual Cisco networking equipment so the book will be very helpful to Cisco network administrators that are actually working in the field and want to get the job done.
Some of the topics covered in the book include:
Most useful for:
To summarize, this book is great as a practical reference for professionals already working with Cisco networks. Although it is an old book, most of the concepts, configurations and technologies are still valid to this date.
"},{"location":"essay/web/network-books/#routing-tcpip-volume-i","title":"Routing TCP/IP, Volume I","text":"Routing TCP/IP, Volume i (2nd Edition)
This book is published by Cisco press and is one of the best-selling textbooks providing deep understanding of IP routing protocols.
It is geared towards more advanced professionals and is focused on Interior Routing protocols (IGPs) for both IPv4 and IPv6.
It is considered as the defacto standard for all network engineers who already have experience with Cisco IOS routers and who want to prepare for the CCIE Routing certification.
Most useful for:
If you are a Cisco networking engineer working mostly with Layer 3 routing devices, this book is the bible of Layer 3 IP communications. Please note that the book covers only Interior Gateway Protocols (IGPs). If you want to learn also BGP, please see the next book below.
"},{"location":"essay/web/network-books/#routing-tcpip-volume-ii","title":"Routing TCP/IP, Volume II","text":"Routing TCP/IP, Volume II (2nd Edition)
This is a continuation of the previous book above and covers exterior routing protocols (such as BGP) and also more advanced IP routing concepts.
In fact, it covers many concepts required for taking the CCIE exam and offers expert-level instruction on network design, deployment, support etc for managing complex networks.
The book is heavy weight on BGP, such as BGP and routing policies, scaling BGP, multi-protocol BGP etc. Other topics include NAT44, NAT64, multicast protocols etc.
The author (Jeff Doyle) is a CCIE veteran with vast experience in IP design and networking and is considered one of the best authors in Cisco press books.
Most useful for:
Advanced routing engineers who want to prepare for CCIE or want to learn everything about BGP (e.g people working in ISPs or big corporations). This book is 1100+ pages and is considered the bible of Exterior Routing and BGP design in networks.
"},{"location":"essay/web/network-books/#networking-all-in-one-for-dummies","title":"Networking All-in-One For Dummies","text":"Networking All-in-One For Dummies
This is one of the most recent (8th edition at the time of this writing) and updated textbooks in this list about computer networking that covers a wide range of topics for both beginners and for seasoned professionals.
This 1000+ pages book is one of the cheapest options in this list which provides so much value compared to its price.
The book is structured in 10 mini-books and covers a lot of recent and up-to-date technologies such as Cloud services (Amazon, Azure etc), Windows 10, Linux, Windows Server 2019, Office 365, general networking topics, virtualization, routing, switching, wireless, security etc.
It is one of the most thorough and all-in-one books out there and I recommend it as a great reference for any professional.
Most useful for:
For beginners who want to get an overall understanding of multiple topics in networking. Also, for experienced professionals who want to have a reference book for their job.
It is not focused only on core networking concepts (like routing etc) as the previous books, but covers also general IT systems and networking for Windows environments, Linux etc.
"},{"location":"essay/web/network-books/#cisco-networking-all-in-one-for-dummies","title":"Cisco Networking All-in-One For Dummies","text":"Cisco Networking All-in-One For Dummies
If you bought the other \u201cFor Dummies\u201d book above, then \u201cCisco Networking All-in-One For Dummies\u201d is a nice complementary option for professionals that started managing or supporting Cisco networking technologies.
This book is practical and technical in nature and offers actual Cisco configuration commands and examples that you can implement and use in your network.
Similar to the previous book above, the content is split into 6 mini books with each one divided into chapters and sections.
Each one of these chapters and sections focuses on a specific task/knowledge. Therefore, you can easily navigate the book back and forth according to the task or feature that you want to investigate or implement.
The 6 minibooks cover the following topics/themes:
Most useful for:
For professionals that support, manage and design networks running over Cisco infrastructure (routers, switches, wireless, firewalls etc).
"},{"location":"essay/web/network-books/#comptia-network-certification-all-in-one-exam-guide","title":"CompTIA Network+ Certification All-in-One Exam Guide","text":"CompTIA Network+ Certification All-in-One Exam Guide (8th Edition for Exam N10-008)
This is the only vendor-neutral certification related book in this list. I have included it here because CompTIA exams teach concepts that are universal and are not specific/bound to a certain vendor only.
The book is for the latest Network+ (Exam N10-008) and covers topics in general networking, cabling basics, ethernet networks, TCP/IP basics, routing, wireless networks, virtualization and cloud computing, network security, network management and monitoring etc.
The author (Mike Meyers) is the leading authority in writing CompTIA exam books and has authored several best sellers in this field.
Most useful for:
Mostly for people who want to study and prepare for the CompTIA Network+ exam. Even if you don\u2019t want to take the exam, this book will be really valuable for beginners who want to acquire extensive knowledge around computer networking in a vendor-neutral approach.
"},{"location":"essay/web/network-books/#the-complete-guide-to-lan-switching-technology","title":"The Complete Guide to LAN Switching Technology","text":"The Complete Guide to LAN Switching Technology (2nd Edition)
Ethernet switches are the backbone of any LAN network. You also find them everywhere and in every corporate network.
As a networking professional you must learn LAN switching technology and this book will help you with that endeavor.
The book focuses strictly on LAN switching and covers in-depth all related concepts and topics such as foundations of LAN switches, advanced LAN concepts, loop prevention, VLAN concepts, multicast, security in LANs etc.
Although this book is old, the fundamentals of LAN switching technologies do not change much over the years, so the book is still relevant in today\u2019s LAN networks.
Most useful for:
You will benefit most from this book if you already have a few years experience in networking and LAN management. The book goes in-depth about switching technologies so you must have some prior experience.
Mostly suitable for network designers, professionals managing and operating corporate LAN switch infrastructure or Value-added Resellers of networking equipment.
"},{"location":"essay/web/network-books/#network-programmability-and-automation","title":"Network Programmability and Automation","text":"Network Programmability and Automation: Skills for the Next-Generation Network Engineer
As I have mentioned at the beginning of this article, the book list I have compiled here includes also textbooks that look at the future of networking.
The \u201cNetwork Programmability and Automation\u201d book from O\u2019REILLY Media is one of these books that teaches a next-generation concept for network engineers.
This concept is about automating the management and operation of hardware-based networks using software tools, programming, Application Programming Interfaces (API) etc.
The book covers topics such as Python (used to create useful scripts to automate networking tasks), Linux, IT automation tools such as Ansible, SDN concepts, working with Network APIs, Integration concepts etc.
Keep in mind here that the new Cisco certification exams after their 2020 updates, include a lot of programmability and automation topics. This is another reason that modern network engineers must shift their mindset into more software-based concepts and automation.
Most useful for:
If you are a hard-core traditional network engineer already managing and monitoring your infrastructure with the CLI, this book will help you make the shift to a more efficient and more productive management and operation.
If you fall into the group above, you don\u2019t need any previous knowledge in software development or programming.
"},{"location":"essay/web/network-books/#software-defined-networks-a-comprehensive-approach","title":"Software Defined Networks: A Comprehensive Approach","text":"Software Defined Networks: A Comprehensive Approach
Continuing our reviews of books about next-generation concepts, this book deals with the SDN Model (Software Defined Networking) which seems to be the new era in computer networks.
The book includes the history of SDN, how software was used to forward and route packets in networks, how an enterprise will benefit from SDN or not, how SDN works, the OpenFlow specification, SDN in data centers, SDN applications, NETCONF and much more.
If you are a network designer or architect, this book will help you understand and explain to top-management the benefits or risks of integrating the SDN model in your existing network environment.
Most useful for:
The book offers a very good overall understanding of SDN concepts and OpenFlow which will help professionals who are already experienced in IP networks to acquire an overall knowledge of SDN.
"},{"location":"essay/web/network-books/#ccna-200-301-official-cert-guide-library","title":"CCNA 200-301 Official Cert Guide Library","text":"CCNA 200-301 Official Cert Guide Library
As mentioned at the very beginning of this article, I decided to include also books related to vendor-specific exams.
Since most of the people visiting this website are Cisco professionals or people interested to pass Cisco exams, I couldn\u2019t ignore one of the most popular and useful networking certification which is Cisco CCNA.
The theory and knowledge required for the newest CCNA 200-301 exam is covered fully in this comprehensive library which actually includes two books:
Instead of paying double the money to buy the two books above separately, you can buy this value-priced Package Library.
Most useful for:
This is a Cisco-approved self-study resource for people preparing for the Cisco CCNA 200-301 exam. Along the way in studying these books, you will learn key fundamental networking concepts which will be helpful in your whole career as network engineer.
Please note that this library is very detailed and can be overwhelming for total beginners in networking.
"},{"location":"essay/web/network-books/#ccna-200-301-practical-lab-guide-with-packet-tracer-labs","title":"CCNA 200-301 Practical Lab Guide With Packet Tracer Labs","text":"Guide link
Last but not least is my own Practical Lab Guide which comes as PDF electronic Lab Book and includes also 42 downloadable Packet Tracer labs based on the official CCNA 200-301 Cisco exam blueprint.
I admit that the above Lab Book alone will not help you pass the exam by itself. It is however a great companion resource with practical labs which should be used together with other material such as the Cisco Cert Library mentioned above.
If you want an affordable Lab preparation guide for the practical aspects of the CCNA exam, then my Lab Guide Book here will be very helpful, even for people that just want a refreshing in fundamental practical Cisco networking concepts.
"},{"location":"essay/web/network-books/#final-words","title":"Final Words","text":"Of course, the book list above is not a comprehensive list of every computer networking book out there.
However, I have tried to collect and present the best ones in my opinion that will help most beginners just starting out in networking and also experts that want to advance their knowledge and skills even further.
To summarize, here are my book suggestions categorized according to your experience and knowledge level.
"},{"location":"essay/web/network-books/#best-books-for-beginners","title":"Best Books for Beginners","text":"Please let me know in the comments below if you have other book suggestions that you liked so that everyone will benefit from your own personal experience.
"},{"location":"essay/web/network-details/","title":"\u7db2\u8def\u50b3\u4e86\u4ec0\u9ebc","text":"\u4e59\u592a\u7db2\uff08Ethernet\uff09\u548c\u5176\u4e4b\u4e0a\u7684\u7db2\u8def\u5354\u5b9a\uff08Internet Protocol, IP\uff09\u50b3\u4e86\u4ec0\u9ebc\uff1f
\u5176\u4ed6\u9084\u6709\u4ec0\u9ebc\uff1f
\u90fd\u662f 1 \u548c 0 \u7684\u4ea4\u66ff\u4f86\u4ee3\u8868\u6709\u8a0a\u6846\u8981\u50b3\u9001\u9032\u4f86\u4e86\u3002
10101010 10101010 10101010 10101010 10101010 10101010 10101010 10101011\n
"},{"location":"essay/web/network-details/#\u8868\u982d\u8cc7\u8a0a","title":"\u8868\u982d\u8cc7\u8a0a","text":"1501
\u4ee3\u8868\u8a0a\u6846\u9577\u5ea6\u53cd\u4e4b\u5927\u65bc 1535
\u5247\u662f\u4ee3\u8868\u7a2e\u985e1500
\u662f Ethernet 802.3 \u7684\u6700\u5927\u50b3\u8f38\u55ae\u4f4d\uff08MTU\uff09\uff0c\u4f46\u662f\u82e5\u4f7f\u7528\u5176\u4ed6\u5354\u5b9a\u5247\u662f\u6539\u70ba\u586b\u5beb 1535
\u4ee5\u4e0a\uff08\u4e0d\u542b\uff09\u7684\u503c\u3002
\u56e0\u70ba 1536
\u4ee5\u5341\u516d\u9032\u4f4d\u8868\u9054\u662f 0x600
\u6240\u4ee5\u4ee5\u6b64\u70ba\u8d77\u59cb\uff0c\u5354\u5b9a\u7a2e\u985e\u7684\u9078\u64c7\u6709\u9019\u4e9b\u3002
\u9019\u6a23\u5176\u4ed6\u5354\u5b9a\u7684\u9577\u5ea6\u8981\u600e\u9ebc\u8a08\u7b97\uff1f\u53ef\u4ee5\u901a\u904e\u524d\u9762\u63d0\u7684 \u8a0a\u6846\u9593\u9694 \u6216 \u6aa2\u6838\u548c \u4f86\u78ba\u8a8d\u3002\u4f46\u6709\u4e9b\u7279\u6b8a\u5354\u5b9a\u4ecd\u9700\u8981\u6307\u5b9a\u9577\u5ea6\u3002
"},{"location":"essay/web/network-details/#\u6aa2\u6838\u548c","title":"\u6aa2\u6838\u548c","text":"\u9700\u8981\u900f\u904e\u6aa2\u6838\u548c\u4f86\u67e5\u9a57\u672c\u8a0a\u6846\u662f\u5426\u53d7\u5230\u5e72\u64fe\u800c\u6709\u932f\u8aa4\u8a0a\u606f\uff0c\u9019\u985e\u6aa2\u6838\u548c\u5728\u6b64\u7684\u540d\u7a31\u53eb\u505a\u6846\u6aa2\u67e5\u9806\u5e8f\uff08Frame check sequence, FCS\uff09\u3002
\u4e59\u592a\u7db2\u4f7f\u7528\u7684\u6aa2\u6838\u548c\u662f CRC\uff0c\u5176\u900f\u904e\u591a\u9805\u5f0f\u76f8\u9664\u5f97\u5230\u7684\u5546\u7684\u4e00\u4e9b\u7279\u6027\u6eff\u8db3\u9ad8\u932f\u8aa4\u6aa2\u67e5\u7387\uff0c\u4e5f\u5c31\u662f\u56db\u500b\u4f4d\u5143\u7d44\u5c31\u80fd\u6aa2\u67e5\u591a\u500b\u4f4d\u5143\u7d44\u7684\u8cc7\u8a0a\uff08\u9664\u4e86\u6536\u767c\u5668\u76f8\u95dc\u4e4b\u5916\u7684\u8a0a\u606f\u90fd\u542b\uff09\u3002
"},{"location":"essay/web/network-details/#\u7db2\u8def\u5354\u5b9a","title":"\u7db2\u8def\u5354\u5b9a","text":"Wiki \u90fd\u8b1b\u5f97\u5f88\u8a73\u7d30\uff0c\u4e0d\u8d05\u8ff0\u4e86\uff0c\u4e3b\u8981\u6709\u5206\u5169\u500b\u7248\u672c\uff1a
\u9019\u908a\u63d0\u4e00\u4e0b IPv6 \u6709\u5e7e\u9ede\u8981\u6ce8\u610f\uff1a
\u670d\u52d9\u54c1\u8cea\u63a7\u5236
\u7576\u7db2\u8def\u58c5\u585e\uff08congestion\uff09\u7684\u6642\u5019\uff0c\u9700\u8981\u5148\u8655\u7406\u7b49\u7d1a\u6bd4\u8f03\u9ad8\u7684\uff08\u901a\u4fe1\u985e\u5225\uff09\u6216\u8005\u900f\u904e\u53cd\u58d3\uff08back-pressure\uff09\u7b49\u6a5f\u5236\uff08\u670d\u52d9\u54c1\u8cea\u63a7\u5236\uff09\u4f86\u6709\u6548\u8655\u7406\u9ad8\u6d41\u91cf\u3002
\u9ad8\u6d41\u91cf\u6642\u6703\u56b4\u91cd\u5f71\u97ff\u65e2\u6709\u7684\u670d\u52d9\u80fd\u529b\uff0c\u597d\u7684\u670d\u52d9\u54c1\u8cea\u63a7\u5236\u6703\u8b93\u66f2\u7dda\u8d70\u5411 Desirable \u90a3\u689d\u3002
"},{"location":"essay/web/network-details/#\u6d41\u7a0b","title":"\u6d41\u7a0b","text":"\u4e86\u89e3\u4e59\u592a\u7db2\u548c\u7db2\u8def\u5354\u5b9a\u7684\u8cc7\u6599\u5167\u5bb9\u4e4b\u5f8c\uff0c\u6211\u5011\u4f86\u770b\u770b\u5be6\u969b\u600e\u9ebc\u8dd1\u7684\uff1f
NIC Architecture
\u7db2\u5361\uff08Network Interface Card, NIC, Network Adaptor\uff09\u662f\u5916\u63a5\u6216\u5167\u5d4c\u9032\u96fb\u8166\uff08\u6216\u8def\u7531\u5668\u6216\u4ea4\u63db\u5668\uff09\u88e1\u7684\u96fb\u8def\u3002\u7576\u7db2\u8def\u7dda\u50b3\u9001\u9032\u4f86\u8a0a\u865f\u6642\uff0c\u6536\u767c\u5668\uff08PHY\uff09\u5c31\u6703\u958b\u59cb\u8655\u7406\u8a0a\u865f\uff0c\u78ba\u8a8d\u6709\u8a0a\u6846\u4e4b\u5f8c\uff0c\u5148\u505a\u6aa2\u6838\u548c\u7684\u67e5\u9a57\u3002
\u56e0\u70ba CRC \u53ef\u4ee5\u76f4\u63a5\u505a\u4e8c\u9032\u4f4d\u7684\u904b\u7b97\u5f97\u51fa\uff0c\u6240\u4ee5\u5728\u96fb\u8def\u4e0a\u5c31\u6703\u76f8\u5c0d\u55ae\u7d14\u3002\u6aa2\u67e5\u5b8c\u4e4b\u5f8c\u5c31\u6703\u958b\u59cb\u900f\u904e header-parsing
\u505a\u6a19\u982d\u8cc7\u8a0a\u7684\u6aa2\u67e5\uff0c\u5305\u542b MAC \u76ee\u7684\u5730\u7aef\u7684\u78ba\u8a8d\u3001\u4e59\u592a\u7a2e\u985e\u548c\u8a0a\u6846\u9577\u5ea6\u3002\u6700\u5f8c\u5f97\u5230\u7684\u8cc7\u6599\uff08\u4e5f\u5c31\u662f\u7db2\u8def\u5c64\u7684 IP \u8cc7\u8a0a\uff09\u6703\u5f80\u4e3b\u6a5f\u9001\u3002
\u8cc7\u6599\u9023\u7d50\u5c64\u7684\u6392\u968a
\u53ef\u4ee5\u6ce8\u610f\u5230\u7db2\u5361\u6703\u900f\u904e Scheduling \u548c Queueing \u7684\u65b9\u5f0f\u4f86\u6392\u968a\u6d88\u5316\u591a\u7b46\u8cc7\u8a0a\u3002
"},{"location":"essay/web/network-details/#\u5f80\u4e0a\u9001\u7684\u6d41\u7a0b","title":"\u5f80\u4e0a\u9001\u7684\u6d41\u7a0b","text":"\u9019\u88e1\u7684\u300c\u4e0a\u300d\u5176\u5be6\u5c31\u662f OSI \u968e\u5c64\u7684\u6982\u5ff5\u3002
IP Processing RX
\u7576\u8cc7\u6599\u88ab\u9001\u4e0a\u4f86\u4e4b\u5f8c\u6703\u505a\u4e00\u4e9b\u4f4d\u7f6e\u89e3\u6790\u5354\u5b9a\uff08Address Resolver Protocol, ARP\uff09\u7684\u8655\u7406\u3002\u53e6\u5916 IP \u5728\u5f80\u4e0b\u9001\u7684\u6642\u5019\u9664\u4e86\u6aa2\u67e5 ARP \u4e4b\u5916\u4e5f\u6703\u6aa2\u67e5\u662f\u5426\u9700\u8981\u56de\u9001\uff08loopback\uff09\u3002
\u6aa2\u67e5 IP \u5c01\u5305\u9806\u5e8f\u6703\u662f\uff1a
\u7ffb\u8b6f\u90fd\u6839\u64da\u300c\u96d9\u8a9e\u8a5e\u5f59\u3001\u5b78\u8853\u540d\u8a5e\u66a8\u8fad\u66f8\u8cc7\u8a0a\u7db2\u300d\u5b9a\u7fa9\u3002\u00a0\u21a9
\u6982\u7565\u5716\u8b1b\u8ff0\u7db2\u8def\u7684\u50b3\u8f38\u6d41\u7a0b\u3002\u5be6\u969b\u4e0a\u50b3\u4e86\u4ec0\u9ebc\u548c\u4e00\u4e9b\u5e95\u5c64\u5143\u4ef6\u904b\u4f5c\u539f\u7406\u8acb\u770b\u300c\u7db2\u8def\u50b3\u4e86\u4ec0\u9ebc\u300d
"},{"location":"essay/web/network-routing/#\u6982\u7565\u5716","title":"\u6982\u7565\u5716","text":"\u5716\u4e2d\u4e0a\u534a\u90e8\u662f\u5728\u8b1b\u7db2\u8def\u50b3\u8f38\u904e\u7a0b\uff0c\u4e0b\u534a\u90e8\u662f\u4e00\u4e9b\u4ecb\u7d39\u3002
\u5de6\u53f3\u5169\u908a\u90fd\u6709 Socket API\uff0c\u5373\u662f BSD Socket\uff0c\u4ed6\u662f\u4e00\u500b\u88ab\u5305\u88dd\u7684\u7a0b\u5f0f\u5eab\u3002\u7576\u958b\u767c\u8005\u8981\u9032\u884c HTTP \u6e9d\u901a\u6642\u5c31\u6703\u900f\u904e Socket API \u4f86\u5efa\u7acb\u9023\u7dda\uff0c\u4e26\u9078\u5b9a\u60f3\u8981\u7684\u50b3\u8f38\u5c64\u5354\u5b9a\u9032\u884c\u6e9d\u901a\u3002
\u4ee5 HTTP \u70ba\u4f8b\uff0c\u5927\u90e8\u5206\u60c5\u6cc1\u90fd\u662f\u4f7f\u7528 TCP\uff08\u9023\u7d50\u4e2d\u6709\u9644\u4f7f\u7528 API \u7684\u7a0b\u5f0f\u78bc\uff09\uff0c\u4e4b\u5f8c Socket API \u5c31\u6703\u5728\u7a0b\u5f0f\u5eab\u5167\u90e8\u628a\u76f8\u95dc\u8cc7\u6599\u62c6\u5c64\u4e00\u500b\u500b\u7247\u6bb5\uff08segment\uff09\u4e26\u6dfb\u52a0\u4e00\u4e9b TCP \u7684\u8cc7\u8a0a\u3002\u5305\u88dd\u5b8c\u4e4b\u5f8c\uff0c\u5c31\u6703\u518d\u5305\u88dd\u6210\u5c01\u5305\uff08packet\uff09\u3002
\u7576\u5305\u88dd\u6210\u4e00\u500b\u500b\u7684\u5c01\u5305\u4e4b\u5f8c\uff0c\u6703\u4e1f\u7d66 \u7db2\u5361 \u4f86\u8655\u7406\u6210\u4e00\u500b\u500b\u7684\u8a0a\u6846\u4e26\u900f\u904e\u6536\u767c\u5668\u548c\u7db2\u8def\u7dda\uff08\u4e5f\u53ef\u80fd\u662f Wi-Fi \u7b49\u7b49\uff0c\u8a73\u898b\u7db2\u8def\u50b3\u4e86\u4ec0\u9ebc\uff09\u50b3\u905e\u5230\u7db2\u969b\u7db2\u8def\u3002
"},{"location":"essay/web/network-routing/#\u7db2\u969b\u7db2\u8def","title":"\u7db2\u969b\u7db2\u8def","text":"\u7db2\u969b\u7db2\u8def\u4e2d\u85cd\u8272\u5708\u5708\u4ee3\u8868\u8def\u7531\u5668\uff0c\u7da0\u8272\u9577\u65b9\u9ad4\u4ee3\u8868\u4ea4\u63db\u5668\uff0c\u50b3\u8f38\u5230\u8def\u7531\u5668\u524d\u53ef\u80fd\u6703\u7d93\u904e\u591a\u53f0\u4ea4\u63db\u5668\uff0c\u800c\u8def\u7531\u5668\u4e2d\u5176\u5be6\u4e5f\u6709\u4ea4\u63db\u5668\u7684\u529f\u80fd\uff08\u542b\u6709 MAC \u503c\uff09\u3002
\u8def\u7531\u5668\u548c\u8def\u7531\u5668\u4e4b\u9593\uff08\u4e2d\u9593\u53ef\u80fd\u593e\u96dc\u4ea4\u63db\u5668\uff09\u7684\u6e9d\u901a\u975e\u5e38\u975e\u5e38\u8907\u96dc\uff08\u6839\u64da Xiaobo Zhou \u7684\u8aaa\u6cd5\uff0c\u662f OSI \u968e\u5c64\u88e1\u6700\u8907\u96dc\u7684\u5c64\u7d1a\uff09\uff0c\u88e1\u9762\u5305\u62ec\u6700\u4f73\u8def\u5f91\u641c\u5c0b\u3001\u6392\u968a\u7684\u7b56\u7565\u3001\u7de9\u885d\u7684\u7ba1\u7406\u7b49\u7b49\u3002\u4e0d\u904e\u6211\u5011\u9019\u88e1\u5c31\u55ae\u7d14\u5047\u8a2d\u8def\u7531\u5668\u77e5\u9053\u8981\u628a\u8a0a\u865f\u9001\u7d66\u8ab0\u3002
\u50b3\u4e00\u50b3\u6700\u5f8c\u5c31\u6703\u4ea4\u5230\u76ee\u7684\u7aef\uff0c\u76ee\u7684\u7aef\u518d\u628a\u76f8\u95dc\u8cc7\u8a0a\u53cd\u8b6f\u5230\u61c9\u7528\u5c64\u7d1a\u7684\u8cc7\u8a0a\u3002
"},{"location":"essay/web/network-routing/#\u5404\u5c64\u6709\u54ea\u4e9b\u670d\u52d9","title":"\u5404\u5c64\u6709\u54ea\u4e9b\u670d\u52d9","text":"\u5716\u7684\u5de6\u4e0b\u89d2\u6709\u7c21\u4ecb\u4e00\u4e9b\u6211\u81ea\u5df1\u77e5\u9053\u7684\u670d\u52d9\u548c\u5354\u5b9a\u3002
\u4ee5\u50b3\u8f38\u5c64\u70ba\u4f8b\uff0c\u5728\u5230\u4f60\u7684\u61c9\u7528\u7a0b\u5f0f\u4e4b\u524d\u6703\u6709\u8ca0\u8f09\u5e73\u8861\u5668\u3001\u4ee3\u7406\u4f3a\u670d\u5668\u7b49\u7b49\u3002\u4ed6\u8ca0\u8cac\u7684\u5354\u5b9a\u6709 TCP\u3001UDP \u548c ICMP \u7b49\u7b49\u3002\u9019\u88e1\u63d0\u4e00\u4e0b ICMP \u5c0d\u61c9\u5230 Socket API \u5176\u5be6\u662f\u6c92\u6709\u5305\u88dd\u7684\uff0c\u800c\u662f\u4f7f\u7528 Raw Socket \u63a5\u53e3\u3002ICMP \u7684\u7528\u9014\u662f\u6aa2\u67e5\u76ee\u7684\u7aef\u7684\u7db2\u8def\u5c64\u670d\u52d9\u72c0\u614b\uff0c\u6700\u6709\u540d\u7684\u5be6\u4f5c\u5c31\u662f ping\uff08\u9001 ping \u904e\u53bb\u8981 pong \u56de\u4f86\uff09\u3002
\u5728\u8cc7\u6599\u9023\u7d50\u5c64\u4e2d\u53ef\u80fd\u9084\u6709 ATM\uff08Asynchronous Transfer Mode\uff09\uff0c\u4ed6\u7570\u65bc\u4e59\u592a\u7db2\u7684\u7121\u9023\u63a5\u5f0f\u901a\u8a0a\uff08connection-less\uff09\uff0c\u6703\u5728\u4ea4\u63db\u5668\u9593\u5efa\u7acb\u9023\u7dda\uff0c\u4e5f\u5c31\u662f\u7576\u9023\u7dda\u88ab\u4e2d\u65b7\u6642\uff08\u6c92\u6709\u56de\u61c9\uff09\u6703\u8981\u6c42\u4f86\u6e90\u7aef\u91cd\u65b0\u5efa\u7acb\u5176\u4ed6\u8def\u5f91\u7684\u9023\u7dda\uff0c\u9019\u6a23\u53ef\u4ee5\u78ba\u4fdd\u9023\u7dda\u7684\u54c1\u8cea\u548c\u9650\u7e2e\u7db2\u8def\u5ef6\u9072\u7684\u6700\u5927\u503c\uff0c\u4f46\u662f\u6703\u964d\u4f4e\u983b\u5bec\u7684\u4f7f\u7528\u7387\u3002
"},{"location":"essay/web/ntp/","title":"NTP","text":"Network Time Protocol \u8aaa\u660e\u5982\u4f55\u8b93\u5404\u65b9\u88dd\u7f6e\u53ef\u4ee5\u548c\u4e2d\u592e\u7684 NTP Server \u9032\u884c\u6821\u6642\u7684\u5de5\u4f5c\u3002
"},{"location":"essay/web/ntp/#\u904b\u4f5c\u539f\u7406","title":"\u904b\u4f5c\u539f\u7406","text":"NTP \u662f\u900f\u904e\u8a08\u7b97\u4f86\u56de\u7684\u6642\u9593\u5dee\u4f86\u5f97\u77e5\u7bc0\u9ede\u548c\u4e2d\u539f\u6a19\u6e96\u6642\u9593\u7684\u5dee\u7570\uff0c \u8981\u6ce8\u610f\u7684\u662f NTP \u5728\u6821\u6642\u7684\u6642\u5019\u662f\u4e00\u6b21\u52d5\u4e00\u9ede\u7136\u5f8c\u9010\u6f38\u9760\u8fd1\u5230\u6b63\u78ba\u6642\u9593\uff08\u6bcf\u79d2 0.5ms\uff09\u3002
\u4f46\u662f\u6703\u6709\u4e9b\u554f\u984c\uff1a
\u53e6\u5916 NTP \u662f\u57fa\u65bc\u961c\u53e3 123 \u7684 UDP \u9032\u884c\u50b3\u8f38\u3002
"},{"location":"essay/web/ntp/#\u6f14\u9032","title":"\u6f14\u9032","text":"Version Year RFC Desc. v0 1981 RFC 958 NTP \u6982\u5ff5\u9996\u6b21\u63d0\u51fa\uff0c\u5b9a\u7fa9\u6e96\u78ba\u5ea6\u3001\u9810\u4f30\u53ef\u80fd\u7684\u8aa4\u5dee\u548c\u76f8\u5c0d\u6642\u9418\u7684\u7279\u6027 v1 1988 RFC 1059 \u63d0\u51fa\u5be6\u4f5c\u898f\u5247\u3001\u76f8\u95dc\u6f14\u7b97\u6cd5\u548c client-server \u8207 peer-to-peer \u7684\u6a21\u5f0f v2 1989 RFC 1119 \u63d0\u4f9b\u9a57\u8b49\u548c\u63a7\u5236\u8a0a\u606f v3 1992 RFC 1305 \u6821\u6642\u6a5f\u5236\u3001\u4e0a\u6e38\u6642\u9418\u7684\u9078\u64c7\u548c\u904e\u6ffe\u6f14\u7b97\u6cd5\u4e26\u652f\u63f4\u5ee3\u64ad\u6642\u9593\u8cc7\u8a0a\uff0c\u88ab\u5ee3\u6cdb\u4f7f\u7528\u7684\u7248\u672c v4 2010 RFC 5905 \u652f\u63f4 IPv6 \u548c\u63d0\u4f9b\u52a0\u5bc6\u548c\u9a57\u8b49\u624b\u6bb5\u4f86\u5f37\u5316\u5b89\u5168\u6027NTP \u6f14\u9032
\u53c3\u8003 Info-Finder\u3002
"},{"location":"essay/web/ntp/#\u958f\u79d2","title":"\u958f\u79d2","text":"\u7531\u65bc UTC \u6642\u9593\u900f\u904e\u539f\u5b50\u9418\u505a\u8a08\u7b97\uff0c\u4ee5\u6b64\u53ef\u4ee5\u7cbe\u6e96\u5f97\u51fa\u904e\u4e86\u591a\u5c11\u6642\u9593\uff0c\u4f46\u662f\u548c\u4e00\u822c\u4f7f\u7528\u7684\u66c6\u6cd5\u6703\u6709\u6240\u885d\u7a81\u3002
\u885d\u7a81\u5c31\u4f86\u81ea\u65bc\u4e00\u822c\u66c6\u6cd5\u662f\u900f\u904e\u89c0\u6e2c\u592a\u967d\u4f86\u8a2d\u8a08\u51fa\u4e00\u6574\u5e74\u6709 365.25 \u5929\u3002\u4f46\u5be6\u969b\u5730\u7403\u81ea\u8f49\u548c\u516c\u8f49\u7684\u9031\u671f\u662f\u6709\u4e9b\u5fae\u8b8a\u5316\u7684\uff0c\u4e5f\u5c31\u662f\uff0c\u900f\u904e\u539f\u5b50\u9418\u8a08\u7b97\u7684\u6642\u9593\u6703\u548c\u66c6\u6cd5\u6642\u9593\u6703\u6709\u4e0d\u898f\u5247\u7684\u5dee\u7570\u3002
\u4e0d\u898f\u5247\u6027
\u5730\u7403\u81ea\u8f49\u901f\u5ea6\u6e1b\u6162\u7684\u4e3b\u8981\u539f\u56e0\u662f\u6f6e\u6c50\u6469\u64e6\uff0c \u50c5\u6b64\u4e00\u9805\u5c31\u5c07\u4f7f\u4e00\u5929\u6bcf\u4e16\u7d00\u5ef6\u9577 2.3ms\u3002 \u5176\u4ed6\u4fc3\u6210\u56e0\u7d20\u5305\u62ec\u5730\u7403\u5730\u6bbc\u76f8\u5c0d\u65bc\u5176\u6838\u5fc3\u7684\u904b\u52d5\uff0c \u5730\u51fd\u5c0d\u6d41\u7684\u8b8a\u5316\uff0c\u4ee5\u53ca\u5c0e\u81f4\u5de8\u5927\u8cea\u91cf\u518d\u5206\u914d\u7684\u4efb\u4f55\u5176\u4ed6\u4e8b\u4ef6\u6216\u904e\u7a0b\u3002
\u9019\u4e9b\u904e\u7a0b\u6539\u8b8a\u4e86\u5730\u7403\u7684\u6163\u6027\u77e9\uff0c\u7531\u65bc\u89d2\u52d5\u91cf\u5b88\u6046\u800c\u5f71\u97ff\u4e86\u81ea\u8f49\u901f\u7387\u3002 \u5176\u4e2d\u4e00\u4e9b\u91cd\u5206\u914d\u6703\u63d0\u9ad8\u5730\u7403\u7684\u81ea\u8f49\u901f\u5ea6\uff0c\u7e2e\u77ed\u592a\u967d\u65e5\uff0c\u4e26\u5c0d\u6297\u6f6e\u6c50\u6469\u64e6\u3002 \u4f8b\u5982\uff0c\u51b0\u6cb3\u53cd\u5f48\u5c07\u592a\u967d\u65e5\u7e2e\u77ed\u4e86 0.6ms / \u4e16\u7d00\uff0c 2004 \u5e74\u767c\u751f\u5728\u5370\u5ea6\u6d0b\u7684\u5730\u9707\u548c\u6d77\u562f\u88ab\u8a8d\u70ba\u7e2e\u77ed\u4e86 2.68 \u5fae\u79d2\u3002
\u70ba\u4e86\u6d88\u5f4c\u9019\u9805\u5dee\u7570\uff0c\u958f\u79d2\u88ab\u8a2d\u8a08\u51fa\u4f86\u4e86\u3002
\u958f\u79d2\u53ef\u52a0\u53ef\u6e1b
\u958f\u79d2\u6703\u88ab\u52a0\u9032\u539f\u5b50\u9418\u7b97\u51fa\u7684 UTC \u6642\u9593\uff0c\u7406\u8ad6\u4e0a\u53ef\u4ee5\u662f\u589e\u52a0\u6216\u6e1b\u5c11\u3002 \u4f46\u6b77\u53f2\u4e0a\uff08\u81ea\u5f9e 1972 \u5e74\u4ee5\u5f8c\uff09\u53ea\u589e\u52a0\u904e\u958f\u79d2\u3002
"},{"location":"essay/web/ntp/#\u62b9\u9ed1\u5728\u958f\u79d2\u9644\u8fd1\u7684\u6642\u9593","title":"\u62b9\u9ed1\u5728\u958f\u79d2\u9644\u8fd1\u7684\u6642\u9593","text":"\u300c\u62b9\u9ed1\u5728\u958f\u79d2\u9644\u8fd1\u7684\u6642\u9593\u300d\u662f\u7dad\u57fa\u767e\u79d1\u7684\u7ffb\u8b6f\uff0c\u82f1\u6587\u70ba leap smear\u3002\u9019\u662f Google \u63d0\u51fa\u7684\u6280\u8853\uff0c\u4e3b\u8981\u70ba\u4e86\u907f\u514d\u4f7f\u7528\u50b3\u7d71\u65b9\u5f0f\u6703\u9020\u6210\u7684\u7cfb\u7d71\u932f\u8aa4\u3002
\u50b3\u7d71\u65b9\u5f0f\u662f\u5728 0 \u9ede\u524d\u7684\u90a3\u4e00\u79d2\u591a\u7b49\u5f85\u4e00\u79d2\uff0c\u4e5f\u5c31\u662f\u90a3\u4e00\u79d2\u6703\u9700\u8981\u5169\u79d2\u7684\u6642\u9593\u4f86\u5b8c\u6210\uff0c\u9019\u500b\u6a5f\u5236\u6703\u5728\u8a31\u591a\u7684\u5730\u65b9\u51fa\u73fe\u932f\u8aa4\u5224\u5b9a\uff0c\u5c24\u5176\u662f\u4f9d\u8cf4\u6642\u9593\u7684\u7cfb\u7d71\uff0c\u751a\u81f3\u5f71\u97ff\u61c9\u7528\u7a0b\u5f0f\u7684\u5224\u65b7\u3002Leap smear \u5c31\u662f\u628a\u9019\u4e00\u79d2\u96a8\u6a5f\u5206\u6563\u7d66\u7576\u5929\u7684\u6bcf\u4e00\u79d2\uff0c\u8b93\u88ab\u5206\u914d\u5230\u7684\u79d2\u8981\u8dd1\u4e45\u4e00\u9ede\u9ede\uff0c\u8b93\u7cfb\u7d71\u5e7e\u4e4e\u611f\u53d7\u4e0d\u5230\u4eca\u5929\u591a\u4e86\u4e00\u79d2\u3002
"},{"location":"essay/web/ntp/#\u5ee2\u9664","title":"\u5ee2\u9664","text":"\u6700\u8fd1\uff082022/08\uff09\u6709\u807d\u5230\u8981\u5ee2\u9664\u958f\u79d2\u7684\u98a8\u8072\uff0c\u4f8b\u5982 Meta\uff08\u4ee5\u524d\u7a31 Facebook\uff09\u5de5\u7a0b\u5728 It\u2019s time to leave the leap second in the past \u63d0\u5230\u7684\uff0c\u672a\u4f86\u7684\u4e00\u5343\u5e74\uff08millennium\uff09\u82e5\u5ffd\u7565\u958f\u79d2\u7684\u5f71\u97ff\uff0c\u4ecd\u7136\u80fd\u5e73\u8861\u96fb\u8166\u6642\u9593\u548c\u66c6\u6cd5\u6642\u9593\u7684\u5dee\u7570\u800c\u5ffd\u7565\u5176\u5e36\u4f86\u7684\u5f71\u97ff\uff0c\u81f3\u5c11\u6a5f\u7387\u4e0a\u4f86\u8aaa\u662f\u5982\u6b64\u3002
\u5df2\u7d93\u7d93\u904e\u6c7a\u8b70\uff082022/11/18\uff09\u78ba\u5b9a\u5ee2\u9664\u958f\u79d2\u4e86\uff0c\u4e26\u5c07\u65bc 2035 \u5e74\u5f8c\u958b\u59cb\u5be6\u65bd\u3002 \u539f\u56e0\u662f\u76ee\u524d\u5730\u7403\u81ea\u8f49\u6b63\u52a0\u901f\u4e2d\uff08\u6bcf\u5929\u7684\u79d2\u6578\u5c07\u6e1b\u5c11\uff0c\u5118\u7ba1\u7406\u8ad6\u4e0a\u61c9\u8a72\u53d7\u5230\u6708\u7403\u5f15\u529b\u800c\u6e1b\u6162\uff09\uff0c\u6240\u4ee5\u9577\u9060\u4f86\u770b\uff0c\u6b77\u4f86\u53ea\u589e\u52a0\u904e\u7684\u958f\u79d2\u5c07\u6703\u88ab\u5e73\u8861\u3002
"},{"location":"essay/web/ntp/#referrer","title":"Referrer","text":"Idempotent
\u51aa\u7b49\u7684\uff0c\u91cd\u8907\u57f7\u884c\u5f8c\u7d50\u679c\u4ecd\u76f8\u540c\uff0c\u4f8b\u5982\u91cd\u8907\u522a\u9664\uff08delete\uff09\u76f8\u540c\u7684\u8cc7\u6e90\uff0c\u4e26\u4e0d\u6703\u9020\u6210\u984d\u5916\u7684\u5f71\u97ff\u3002
Destructive\uff1a
\u7834\u58de\u6027\u7684\uff0c\u57f7\u884c\u5f8c\u6703\u53ef\u80fd\u6703\u9020\u6210\u8cc7\u6599\u7684\u7121\u6cd5\u5fa9\u539f\uff0c\u4e4b\u6240\u4ee5 POST \u4e0d\u662f\uff0c\u662f\u56e0\u70ba POST \u901a\u5e38\u88ab\u7528\u4f86\u5efa\u7acb\u8cc7\u6599\uff0c \u800c\u4e0d\u662f\u4fee\u6539\u8cc7\u6599\u3002
PUT \u53ef\u80fd\u70ba user.name = 'Evan'
\uff0c \u4e5f\u53ef\u80fd\u70ba user.access_count += 1
\uff0c \u6545\u4e26\u4e0d\u662f\u6bcf\u500b\u64cd\u4f5c\u90fd\u662f idempotent\u3002
\u82e5\u70ba destructive\uff0c\u53ef\u4f7f\u7528 ETag
\u548c If-Match
\u7684 HTTP \u8868\u982d\u4f86\u78ba\u8a8d\u662f\u5426\u91cd\u8907\u4fee\u6539\u3002
CAS
\u5c31\u5982\u540c Memcached/Redis \u7684 CAS\uff08compare and set\uff09\u3002
"},{"location":"essay/web/retry-strategy/#circuit-breaker-pattern","title":"Circuit Breaker Pattern","text":"\u591a\u4e45 retry \u4e00\u6b21\uff1f
\u5728\u4e0a\u8ff0\u7684\u60c5\u6cc1\u4e0b\uff0cexponential backoff \u5c31\u662f\u696d\u754c\u7684 retry \u6a19\u6e96\uff0c\u4f8b\u5982\uff1a
\u82e5\u540c\u6642\u6709\u8a31\u591a instance \u8981 retry connection\uff0c\u53ef\u80fd\u6703\u5c0e\u81f4\u540c\u6642\u9593\u904e\u591a\u7684 request \u9032\u5165 server \u4e2d\u3002
\u5982\u4e0a\u5716\u6240\u793a\uff0c\u9019\u72c0\u6cc1\u5c31\u53eb thundering herd\uff0c\u6240\u6709\u8acb\u6c42\u56e0\u70ba\u56de\u50b3\uff0c\u90fd\u64e0\u5728\u4e00\u8d77\u767c\u9001\u3002
\u76f8\u95dc\u5be6\u969b\u6848\u4f8b
\u5728 Google \u5206\u4eab\u7684 Pok\u00e9mon GO \u4e8b\u4ef6\u4e2d\uff0c \u5c31\u662f\u9019\u500b\u72c0\u6cc1\u7684\u5beb\u7167\u3002
\u9019\u6642\u5728\u5404\u500b instance \u4e2d\u589e\u52a0 \u00b110% \u5167\u7684\u4e82\u6578\u6703\u5e73\u5747\u5206\u6563\u9019\u4e9b\u8acb\u6c42\u3002\u9019\u7a2e\u505a\u6cd5\u5c31\u53eb\u505a jitter\uff1a
function retryWaitSeconds(retryCount) {\n const time = SCHEDULE_WAIT_SECONDS[retryCount] || DEFAULT_WAIT_SECONDS;\n // return 0.9~1.1 time\n return Math.random() * (time * 0.2) + time * 0.9;\n}\n
\u6216\u662f\u589e\u52a0 offset\uff1a
const PERIOD = 60_000;\nconst OFFSET = Math.random() * PERIOD;\nsetTimeout(() => {\n // 0~60 seconds\n setInterval(() => retry(), PERIOD);\n}, OFFSET);\n
"},{"location":"essay/web/tcp/","title":"TCP","text":"Transmission Control Protocol \u50b3\u8f38\u63a7\u5236\u5354\u5b9a\u7684\u4f5c\u7528\u8aaa\u660e\u548c\u7dad\u904b\u5fc3\u5f97\u3002
"},{"location":"essay/web/tcp/#osi-\u4e2d\u626e\u6f14\u7684\u89d2\u8272","title":"OSI \u4e2d\u626e\u6f14\u7684\u89d2\u8272","text":"Network \u4e4b\u4e0a\uff0cApplication \u4e4b\u4e0b\u3002
Network \u4e2d\u7684 IP \u662f\u4e00\u7a2e\u4e0d\u8003\u616e\u9023\u7dda\u7684\u5354\u5b9a\uff0c\u4ed6\u53ea\u9700\u8981\u8ca0\u8cac\u628a\u5c01\u5305\u8def\u7531\u7d66\u6307\u5b9a\u7684\u76ee\u7684\u5730\u3002\u5728\u6b64\u4e4b\u4e0a\u7684 TCP \u5247\u6703\u900f\u904e\u985e\u4f3c\u65bc HTTP session \u7684\u6a5f\u5236\uff0c\u53cd\u5fa9\u78ba\u8a8d\u6bb5\uff08segment\uff09\u88e1\u7684\u8a0a\u865f\u548c\u7de8\u865f\u4f86\u78ba\u4fdd\u5169\u7aef\u7684\u9023\u7dda\u3002
\u63db\u53e5\u8a71\u8aaa\uff0cTCP \u662f\u88ab\u8a2d\u8a08\u6210\u96d9\u5411\uff08bidirectional\uff09\u3001\u5e8f\u5217\u6027\uff08ordered\uff09\u548c\u53ef\u9760\uff08reliable\uff09\u7684\u8cc7\u6599\u50b3\u8f38\u5354\u5b9a\u3002
\u912d\u4e2d\u52dd
TCP \u6703\u900f\u904e\u4e0a\u8ff0\u5404\u7a2e\u7de8\u865f\u548c\u6a19\u8a18\u4f86\u5b8c\u6210\u9023\u7dda\u6240\u9700\u7684\u6e9d\u901a\u3002 \u7576\u5efa\u7acb\u9023\u7dda\uff08\u4e09\u6b21\u63e1\u624b\uff09\u5f8c\uff0c\u96d9\u65b9\u5c31\u4e0d\u5b58\u5728\u76e3\u807d\u65b9\u548c\u767c\u8d77\u65b9\u3002 \u5169\u8005\u7686\u53ef\u4ee5\u505a\u76e3\u807d\u548c\u9001\u8a0a\u606f\uff0c\u540c\u6642\u96d9\u65b9\u4e5f\u90fd\u53ef\u4ee5\u8981\u6c42\u4e2d\u65b7\u9023\u7dda\uff0c \u4e26\u4e14\u96d9\u65b9\u90fd\u8981\u540c\u610f\u95dc\u9589\u9023\u7dda\uff0c\u6b64\u6642\u9023\u7dda\u624d\u80fd\u512a\u96c5\u800c\u5b8c\u6574\u7684\u95dc\u9589\u9023\u7dda\uff08\u56db\u6b21\u63ee\u624b\uff09\u3002 \u5176\u5b8c\u6574\u751f\u547d\u7684\u7a0b\u5982\u4e0b\uff1a
\u5efa\u7acb\u9023\u7dda\uff1a
\u95dc\u9589\u9023\u7dda\uff1a
TIME_WAIT
)\u3002\u5404\u500b\u6a19\u8a18\uff08flag\uff09\u4ee3\u8868\u7684\u610f\u7fa9\u5728\u4e0b\u6bb5\u5c55\u793a\u3002
"},{"location":"essay/web/tcp/#tcp-\u4fe1\u865f","title":"TCP \u4fe1\u865f","text":"\u4e0d\u540c\u7684 TCP \u4fe1\u865f\u4ee3\u8868\u9019\u500b TCP \u6bb5\uff08segment\uff09\u7684\u610f\u7fa9\u662f\u4ec0\u9ebc\uff0c \u4ee5\u4e0b\u4f9d\u7167\u8a72\u4fe1\u865f\u5728\u5c01\u5305\u7684\u4f4d\u7f6e\u9806\u5e8f\u4f86\u6392\u5217\uff1a
0.0.0.0:port
\uff1b\u912d\u4e2d\u52dd
\u5f7c\u6b64\u6703\u5728\u4e09\u6b21\u63e1\u624b\u4e2d\u78ba\u8a8d\u63a5\u4e0b\u4f86\u7684 SEQ
\u865f\u78bc\uff0c\u540c\u6642\u4e92\u76f8\u78ba\u8a8d\u95dc\u4fc2\uff1a
\u4e3b\u52d5\u95dc\u9589\uff08Active Close\uff09\u7684\u90a3\u65b9\u53ef\u4ee5\u6839\u64da\u9700\u6c42\u95dc\u9589\u9023\u7dda\uff0c \u4f46\u662f\u5c0d\u88ab\u52d5\u95dc\u9589\uff08Passive Close\uff09\u7684\u90a3\u65b9\u4f86\u8aaa\uff0c\u50b3\u9001\u7684\u8cc7\u6599\u53ef\u80fd\u9084\u6c92\u5b8c\u6210\uff0c \u9019\u6642\u5c31\u9700\u8981\u7b49\u61c9\u7528\u5c64\u8cc7\u6599\u90fd\u9001\u51fa\u53bb\u4e4b\u5f8c\uff0c\u624d\u6703\u518d\u4e00\u6b21\u505a\u95dc\u9589\u7684\u52d5\u4f5c\u3002
\u6240\u4ee5\u6d41\u7a0b\u5927\u81f4\u5982\u4e0b\uff1a
FIN
\uff0c\u4e26\u9032\u5165 FIN_WAIT1
\u72c0\u614b\uff1bACK
\uff1bFIN
\uff1bFIN_WAIT1
\u6642\uff0c\u5982\u679c\u6536\u5230 FIN
\u5c31\u9032\u5165 Closing
\u72c0\u614b\u6e96\u5099\u76f4\u63a5\u9032\u5165 TIME_WAIT
\uff1bFIN_WAIT1
\u6642\uff0c\u5982\u679c\u6536\u5230 ACK
\u5c31\u9032\u5165 FIN_WAIT2
\u72c0\u614b\uff0c\u7b49\u5f85\u6536\u5230 FIN
\u5c31\u76f4\u63a5\u9032\u5165 TIME_WAIT
\uff1bFIN_WAIT1
\u6642\uff0c\u5982\u679c\u6536\u5230 FIN+ACK
\u5c31\u9032\u5165 TIME_WAIT
\uff1bTIME_WAIT
\u72c0\u614b\uff0c\u7b49\u5230\u8d85\u904e\u5169\u6b21 MSL\uff08Maximum Segment Lifetime\uff09\u7684\u6642\u9593\u5f8c\uff0c\u95dc\u9589\u9023\u7dda\u3002\u9019\u6642\u4f60\u5c31\u6703\u6ce8\u610f\u5230\u4e00\u4ef6\u4e8b\uff0c\u8eab\u70ba\u4e3b\u52d5\u95dc\u9589\u7684\u90a3\u65b9\uff0c\u662f\u9700\u8981\u4ed8\u51fa\u4ee3\u50f9\u7684\u3002 \u4ed6\u9700\u8981\u9032\u5165\u7b49\u5f85\u5c0d\u65b9\u95dc\u9589\u7684\u72c0\u614b\uff08FIN WAIT 1
\u6216 FIN WAIT 2
\uff09\uff0c\u7136\u5f8c\u9084\u8981\u518d\u5f85\u5728 TIME_WAIT
\u4f86\u907f\u514d\u961c\u7684\u8907\u7528\u3002 \u76f8\u8f03\u800c\u8a00\uff0c\u88ab\u52d5\u90a3\u65b9\u5c31\u53ea\u8981\u78ba\u8a8d\u95dc\u9589\u5f8c\uff0c\u5c31\u53ef\u4ee5\u701f\u7051\u8aaa\u518d\u898b\u4e86\u3002
\u4e4b\u6240\u4ee5\u8981\u9032\u5165 TIME_WAIT
\u9019\u500b\u72c0\u614b\u662f\u56e0\u70ba\u5982\u679c\u76f4\u63a5\u4f7f\u7528\u9019\u500b\u4f86\u6e90\u57e0\uff0c \u4e0b\u6b21\u7684\u9023\u7dda\u5f88\u53ef\u80fd\u6703\u6536\u5230\u4e0a\u6b21\u9023\u7dda\u7684\u91cd\u9001\uff08Retransmission\uff09\u8cc7\u8a0a\u3002
TCP \u9078\u9805\uff08TCP Option\uff09\u5927\u90e8\u5206\u90fd\u662f\u5728\u63e1\u624b\u968e\u6bb5\u78ba\u8a8d\u7684\uff0c \u8a73\u898b\uff0c\u9019\u88e1\u5217\u8209\u5e7e\u500b\uff1a
Kernel options \u53ef\u4ee5\u53c3\u8003 sysctl-explorer\uff0c \u66f4\u591a\u8aaa\u660e\u5c07\u5728\u6307\u6a19\u4e2d\u5c55\u793a\u3002
"},{"location":"essay/web/tcp/#\u7bc4\u4f8b","title":"\u7bc4\u4f8b","text":"\u4ee5\u9023\u7dda\u5230 google.com \u4e2d\u7522\u751f\u7684\u591a\u500b\u5c01\u5305\u505a\u8aaa\u660e\u3002
\u5982\u679c\u662f HTTP/3 \u5c31\u4e0d\u662f TCP \u4e86\uff0c\u5230\u6642\u8981\u770b\u770b\u7528\u4ec0\u9ebc\u7db2\u7ad9\u6bd4\u8f03\u597d\u3002
tcpdump -i <interface> port <port> -w - -U | tee /tmp/evan.pcap | tcpdump -r -\n
"},{"location":"essay/web/tcp/#\u5efa\u7acb\u9023\u7dda\u968e\u6bb5","title":"\u5efa\u7acb\u9023\u7dda\u968e\u6bb5","text":"MSS(Maximum TCP Segment Size) v.s. MTU(Maximum Transmission Unit):
MTU = MSS + 40 (IP header + TCP header)\n
"},{"location":"essay/web/tcp/#sequence-number","title":"SEQuence number","text":"TBD
"},{"location":"essay/web/tcp/#acknowledge-number","title":"ACKnowledge number","text":"TBD
"},{"location":"essay/web/tcp/#options","title":"Options","text":"TBD
"},{"location":"essay/web/tcp/#\u6307\u6a19","title":"\u6307\u6a19","text":"\u6307\u6a19\u540d\u7a31\u90fd\u6709\u524d\u7db4\uff1anode_netstat_TcpExt_
\u3002
\u4f86\u6e90
\u672c\u5217\u8868\u793a\u4f7f\u7528 Node Exporter \u63d0\u4f9b\u7684\u6307\u6a19\u3002
\u4f60\u53ef\u4ee5\u900f\u904e\u4ee5\u4e0b\u6307\u4ee4\u4f86\u53d6\u5f97\u5404\u500b\u6307\u6a19\u7684\u4e0a\u5347\u5e45\u5ea6\uff1a
increase(label_replace({__name__=~\"node_netstat_Tcp.*\"}, \"na\", \"$1\", \"__name__\", \"node_netstat_Tcp(.+)\")[5m:1m])\n
\u540d\u7a31 \u539f\u7406 \u8aaa\u660e ArpFilter Basic \u63a5\u6536\u5230 ARP \u5c01\u5305\u6642\uff0c\u62ff\u5230\u672a\u77e5\u7684 entry \u6642 EmbryonicRsts Basic SYN_RECV
\u6642\u6536\u5230\u4e0d\u5408\u7406\u7684\u5c01\u5305\uff0c\u4e26\u56de\u50b3 RST
ListenDrops Basic LISTEN
\u56e0\u4efb\u4f55\u539f\u56e0\u5efa\u7acb\u9023\u7dda\u5931\u6557\uff0c\u5927\u65bc\u7b49\u65bc ListenOverflows TCPTimeouts Basic \u7b2c\u4e00\u6b21\u767c\u751f RTO \u6216 SYN-ACK \u8d85\u6642 TW Basic TIME_WAIT
\u6578\u91cf TCPTimeWaitOverflow Basic TIME_WAIT
\u6578\u91cf\u592a\u591a\u4e86 TWKilled Basic TIME_WAIT
\u5728\u672a\u9054\u6642\u9650\u6642\uff0c\u5f37\u5236\u56de\u6536\u7684\u6578\u91cf TWRecycled Basic TIME_WAIT
\u88ab\u56de\u6536\u7684\u6578\u91cf TCPAbortFailed Basic \u7a0b\u5f0f\u767c\u751f\u932f\u8aa4\u6642\uff0c\u5f37\u5236\u95dc\u9589\u9023\u7dda TCPAbortOnClose Basic \u5728\u9032\u5165 FIN_WAIT_1
\u6216 FIN_WAIT_2
\u6642\uff0c\u5f37\u5236\u95dc\u9589\u9023\u7dda TCPAbortOnData Basic \u5728\u9023\u7dda\u9084\u6709\u8cc7\u6599\u6642\uff0c\u5f37\u5236\u95dc\u9589\u9023\u7dda TCPAbortOnMemory Basic \u8cc7\u6e90\u8d85\u904e\u9650\u5236\u6642\uff0c\u5f37\u5236\u95dc\u9589\u9023\u7dda TCPAbortOnTimeout Basic RTO/probe/keepalive timer \u9054\u5230\u6700\u9ad8\u4e0a\u9650\u6642\uff0c\u5f37\u5236\u95dc\u9589\u9023\u7dda TCPSynRetrans Basic \u91cd\u65b0\u5617\u8a66\u9001\u51fa SYN
TCPRetransFail Basic \u91cd\u65b0\u5617\u8a66\u9001\u51fa SYN
\u537b\u4ecd\u5931\u6557\uff1f TCPKeepAlive Basic Keep-Alive \u6b21\u6578 TCPFastRetrans Fast Retransmission \u6536\u5230\u65b0\u7684 ACK
\uff0c\u820a\u7684\u9084\u6c92\u6536\u5230\u5c31\u76f4\u63a5 retrans TCPSlowStartRetrans Delayed ACK Delayed ACK \u958b\u59cb\u555f\u7528 DelayedACKLocked Delayed ACK Timer \u88ab\u672c\u6a5f lock \u4f4f\u800c\u7121\u6cd5\u6b63\u78ba\u767c\u9001 ACK
DelayedACKLost Delayed ACK \u9001\u51fa\u7684 ACK
\u88ab\u8a8d\u70ba\u4e0d\u5408\u6cd5 DelayedACKs Delayed ACK \u9001\u51fa Delayed ACK \u6b21\u6578 ListenOverflows Backlog LISTEN
\u6210\u529f\u5b8c\u6210\u63e1\u624b\u5f8c\uff0c\u6e96\u5099\u79fb\u4ea4\u9023\u7dda\u6642\u767c\u73fe queue \u6eff\u4e86 TCPBacklogCoalesce Backlog TCPBacklogDrop Backlog \u9032\u5165\u4f47\u5217\u6642\u5931\u6557 PAWSActive PAWS SYN_SENT
\u5f8c\u7684 ACK
\u6aa2\u67e5 PAWS \u5931\u6557 PAWSPassive PAWS SYN_RECV
\u5f8c\u7684 ACK
\u6aa2\u67e5 PAWS \u5931\u6557 PAWSEstab PAWS \u9023\u7dda\u5efa\u7acb\u5f8c PAWS \u6aa2\u67e5\u5931\u6557 TCPTSReorder PAWS Timestamp \u4e82\u5e8f\u4e86 TCPDSACKIgnoredNoUndo Selective ACK \u6536\u5230\u975e\u6cd5 D-SACK \u6642\uff0c\u8a71\u53e5\u8a71\u8aaa\uff0cSACK \u4e2d\u7684\u5e8f\u865f\u592a\u820a TCPDSACKIgnoredOld Selective ACK \u6536\u5230\u975e\u6cd5 D-SACK \u6642\uff0c\u8a71\u53e5\u8a71\u8aaa\uff0cSACK \u4e2d\u7684\u5e8f\u865f\u592a\u820a TCPDSACKOfoRecv Selective ACK \u672c\u6a5f\u767c\u9001\u7684\u820a\u5c01\u5305\u9084\u6c92\u9001\u5230\uff0c\u65b0\u7684\u5c01\u5305\u5df2\u7d93\u9001\u53bb\u4e86 TCPDSACKOfoSent Selective ACK \u672c\u6a5f\u820a\u7684\u5c01\u5305\u9084\u6c92\u6536\u5230\uff0c\u65b0\u7684\u5c01\u5305\u5df2\u7d93\u4f86\u4e86 TCPDSACKOldSent Selective ACK \u5c0d\u65b9\u50b3\u672c\u6a5f\u5df2\u7d93\u770b\u904e\u7684\u5c01\u5305\uff0c\u63db\u53e5\u8a71\u8aaa\uff0c\u5c0d\u65b9\u6536\u4e0d\u5230\u672c\u6a5f\u7684 ACK
TCPDSACKRecv Selective ACK \u5c0d\u65b9\u6536\u5230\u672c\u6a5f\u7684\u5c01\u5305\u91cd\u50b3\uff0c\u63db\u53e5\u8a71\u8aaa\uff0c\u672c\u6a5f\u6536\u4e0d\u5230\u5c0d\u65b9\u7684 ACK
TCPDSACKUndo Selective ACK TCPLostRetransmit Selective ACK \u9001\u904e\u53bb\u7684\u5c01\u5305\u6c92\u6709\u5f97\u5230\u76f8\u61c9\u7684 SACK TCPSACKDiscard Selective ACK \u6536\u5230\u975e\u6cd5 SACK \u6642\uff0c\u8a71\u53e5\u8a71\u8aaa\uff0cSACK \u4e2d\u7684\u5e8f\u865f\u592a\u820a TCPSACKReneging Selective ACK \u672c\u6a5f\u5df2\u7d93\u4e1f\u6389\u4e86\u4e4b\u524d\u63a5\u6536\u7684\u6578\u64da\uff0c\u672c\u6a5f\u98df\u8a00\u4e86 TCPSACKReorder Selective ACK \u672c\u6a5f\u6536\u4e0d\u5230\u5c0d\u65b9\u5c01\u5305\uff0c\u958b\u59cb\u7b49\u5f85\u820a\u8cc7\u6599 TCPSackRecovery Selective ACK \u672c\u6a5f\u9001\u4e0d\u51fa\u53bb\u5c01\u5305\uff0c\u958b\u59cb\u6574\u7406\u5c01\u5305\u9806\u5e8f TCPSackFailures Selective ACK RTO \u767c\u751f\uff0c\u4e0d\u518d\u91cd\u50b3\u5c0d\u65b9\u6c92\u63a5\u6536\u5230\u7684\u5c01\u5305 TCPSackRecoveryFail Selective ACK RTO \u767c\u751f\uff0c\u4e0d\u518d\u91cd\u6574\u63a5\u6536\u7684\u5c01\u5305\u9806\u5e8f TCPSackShifted Selective ACK Linux \u6210\u529f\u6574\u7406\u9806\u5e8f TCPSackShiftFallback Selective ACK Linux \u6574\u7406\u9806\u5e8f\u5931\u6557 TCPSackMerged Selective ACK \u5f97\u5230\u4e82\u5e8f\u8cc7\u6599\u5f8c\uff0c\u9032\u884c\u6574\u4f75\u6210\u529f TCPRenoFailures \u5728\u4e0d\u555f\u7528 SACK \u7684\u72c0\u614b TCPRenoRecovery \u5728\u4e0d\u555f\u7528 SACK \u7684\u72c0\u614b TCPRenoRecoveryFail \u5728\u4e0d\u555f\u7528 SACK \u7684\u72c0\u614b TCPRenoReorder \u5728\u4e0d\u555f\u7528 SACK \u7684\u72c0\u614b TCPDeferAcceptDrop Defer Accept Defer accept \u7684\u9023\u7dda\u88ab\u4e1f\u68c4 TCPFastOpenActive Fast Open \u767c\u9001\u65b9\u6210\u529f\u5efa\u7acb TCPFastOpenActiveFail Fast Open \u767c\u9001\u65b9\u5efa\u7acb\u5931\u6557 TCPFastOpenBlackhole Fast Open \u907f\u514d firewall \u963b\u64cb\u5c0e\u81f4\u5931\u80fd\u7684\u6a5f\u5236\u88ab\u89f8\u767c TCPFastOpenCookieReqd Fast Open Server \u56de\u61c9 Cookie Required TCPFastOpenListenOverflow Fast Open \u63a5\u6536\u65b9\u9023\u7dda\u4f47\u5217\u6eff\u6ea2 TCPFastOpenPassive Fast Open \u63a5\u6536\u65b9\u7372\u5f97\u65b0\u9023\u7dda TCPFastOpenPassiveAltKey Fast Open \u63a5\u6536\u65b9\u7372\u5f97\u65b0\u9023\u7dda\u4e14 cookie \u6709\u6548 TCPFastOpenPassiveFail Fast Open \u63a5\u6536\u65b9\u5617\u8a66\u5efa\u7acb\u9023\u7dda\u5931\u6557 TCPFromZeroWindowAdv Zero Window TCPToZeroWindowAdv Zero Window TCPWantZeroWindowAdv Zero Window TCPZeroWindowDrop Zero Window SyncookiesFailed SYN Cookies \u9a57\u8b49\u5931\u6557 SyncookiesRecv SYN Cookies \u6536\u5230\u6709 cookie \u7684 SYN SyncookiesSent SYN Cookies \u9001\u51fa\u6709 cookie \u7684 SYN TCPAutoCorking CORK \u6eff\u4e86\u6216\u6642\u9593\u5230\u4e86\uff0c\u76f4\u63a5\u9001\u51fa TCPRcvCoalesce Coalescing \u6536\u5230\u6574\u4f75\u7684\u5c01\u5305 TCPAbortOnLinger Linger \u9032\u5165 FIN_WAIT_2
\u6642\uff0c\u5f37\u5236\u95dc\u9589\u9023\u7dda TCPChallengeACK TCPSYNChallenge TCPACKSkippedChallenge TCPOFODrop TCPOFOMerge TCPOFOQueue TCPMTUPFail TCPMTUPSuccess PruneCalled OfoPruned RcvPruned BusyPollRxPackets IPReversePathFilter LockDroppedIcmps ICMP ICMP \u5c01\u5305\u672c\u61c9\u88ab\u4e1f\u68c4\uff0c\u4f46\u56e0\u70ba\u662f\u672c\u6a5f\u7684\u8acb\u6c42\uff0c\u6240\u4ee5\u88ab handle \u4e86 OutOfWindowIcmps ICMP \u5728\u5df2\u6709\u7684\u9023\u7dda\u4e2d\u5075\u6e2c\u51fa\u932f\u8aa4\u72c0\u614b PFMemallocDrop TCPACKSkippedFinWait2 TCPACKSkippedPAWS TCPACKSkippedSeq TCPACKSkippedSynRecv TCPACKSkippedTimeWait TCPAckCompressed TCPPureAcks TCPFullUndo TCPPartialUndo TCPLossUndo TCPDelivered TCPDeliveredCE TCPHPAcks TCPHPHits TCPHystartDelayCwnd TCPHystartDelayDetect TCPHystartTrainCwnd TCPHystartTrainDetect TCPLossFailures TCPLossProbeRecovery TCPLossProbes TCPMemoryPressures TCPMemoryPressuresChrono TCPMinTTLDrop Basic \u5c01\u5305\u7684 TTL \u904e\u5c0f\uff0c\u63db\u53e5\u8a71\u8aaa\uff0c\u50b3\u4e86\u592a\u4e45\u6216\u592a\u9060 TCPOrigDataSent TCPRcvCollapsed TCPRcvQDrop TCPReqQFullDoCookies TCPReqQFullDrop TCPSpuriousRTOs TCPSpuriousRtxHostQueues TCPWinProbe TCPWqueueTooBig TCPMD5Failure TCPMD5NotFound TCPMD5Unexpected \u76f8\u95dc\u8aaa\u660e\u53ef\u4ee5\u53c3\u8003\uff1a
\u9023\u7dda\u5efa\u7acb\u5f8c\u6703\u88ab\u5132\u5b58\u5728\u4e00\u500b\u4f47\u5217\u4e2d\uff0c\u9019\u500b\u4f47\u5217\u7a31\u70ba backlog\u3002 Linux \u7684\u5be6\u4f5c\u662f\u628a \u4e09\u6b21\u63e1\u624b\u968e\u6bb5 \u548c \u9023\u7dda\u5efa\u7acb\u5b8c\u6210 \u5206\u5225\u653e\u5728\u4e0d\u540c\u7684\u4f47\u5217\u3002
\u8a73\u898b Linux man page listen\uff0c \u4ee5\u53ca How TCP backlog works in Linux\u3002
"},{"location":"essay/web/tcp/#linger","title":"Linger","text":"Linux \u900f\u904e SO_LINGER
\u4f86\u555f\u7528\uff0c\u900f\u904e RST
\u4f86\u95dc\u9589\u9023\u7dda\u3002 \u9019\u6642\u53ef\u80fd\u6703\u9047\u5230\u7de9\u885d\u5340\u9084\u6709\u8cc7\u6599\u6642\uff0c\u88ab\u8feb\u4e2d\u65b7\u3002
\u6709\u5169\u7a2e\u968e\u6bb5\uff0c\u9019\u908a\u4e0d\u8d05\u8ff0\u3002
"},{"location":"essay/web/tcp/#defer-accept","title":"Defer Accept","text":"Linux \u900f\u904e TCP_DEFER_ACCEPT
\u4f86\u555f\u7528\uff0c\u53ea\u5728\u6536\u5230\u8cc7\u6599\u5f8c\u624d\u628a\u8a72\u9023\u7dda\u8a8d\u5b9a\u70ba\u6210\u529f\u3002
\u672c\u4f86\u5982\u679c\u9001\u51fa\u7684\u5c01\u5305\u5728 RTO
\u5167\u6c92\u6709\u6536\u5230 ACK\uff0c\u5247\u6703\u91cd\u65b0\u767c\u9001\uff08retransmission\uff09\uff0c \u4f46\u662f\u5982\u679c\u767c\u9001\u65b9\u6536\u5230\u5927\u65bc\u6700\u4f4e\u7684 ACK \u865f\u78bc\u6642\uff0c\u5c31\u6703\u76f4\u63a5\u56de\u50b3\u820a\u7684\u5c01\u5305\uff0c\u4e00\u7a2e\u5feb\u901f\u56de\u50b3\u7684\u6a5f\u5236\u3002
\u7576\u63a5\u53d7\u65b9\u7684\u7de9\u5b58\u6eff\u6ea2\u4e86\uff0c\u4ee3\u8868\u63a5\u53d7\u65b9\u5be6\u5728\u904e\u65bc\u5fd9\u788c\uff0c\u6d88\u5316\u4e0d\u5b8c\u5bc4\u904e\u4f86\u7684\u5c01\u5305\u3002
Full window \u5247\u4ee3\u8868\u767c\u9001\u65b9\u9700\u8981\u7b49\u5f85\u5c0d\u65b9\u7684 ACK
\u4ee5\u63a5\u8457\u767c\u9001\u66f4\u591a\u8cc7\u8a0a\uff0c\u63db\u53e5\u8a71\u8aaa\uff0c\u5c0d\u65b9\u4e00\u76f4\u6c92\u6709\u56de ACK
\u7d66\u6211\uff0c \u6211\u4e0d\u6562\u9001\u66f4\u591a\u5c01\u5305\u7d66\u4ed6\u3002
\u7528\u4f86\u6e1b\u5c11\u7db2\u8def\u8ca0\u8377\u7684\uff0c\u7b49\u5230\u6642\u6a5f\u7d14\u719f\u5f8c\u4e00\u6b21\u6027\u9001\u51fa\u591a\u500b\u5c01\u5305\uff0c\u6642\u6a5f\u5305\u62ec\uff1a
MSS=MTU \u2013 40
\uff09ACK
\u900f\u904e TCP_NODELAY=1
\u4f86\u55ae\u7368\u70ba\u7279\u5b9a socket \u95dc\u9589\u672c\u529f\u80fd\u3002
\u5982\u679c\u642d\u914d Delayed ACK \u53ef\u80fd\u6703\u9020\u6210\u6211\u5728\u7b49\u4f60\u7684 ACK
\u518d\u7e7c\u7e8c\u9001\u5c01\u5305\uff0c\u800c\u4f60\u5728\u7b49\u6211\u7684 ACK
\u624d\u6703\u7e7c\u7e8c\u9001\u5c01\u5305\u3002
\u548c Coalescing \u76f8\u4f3c\uff0c\u7b49\u5230\u7de9\u885d\u586b\u6eff\u4e86\u624d\u628a\u8cc7\u6599\u9001\u51fa\uff0c \u9019\u500b\u529f\u80fd\u9069\u7528\u65bc\u6709\u591a\u500b\u5206\u6bb5\u7684\u5340\u584a\u8981\u9001\u51fa\uff0c\u4f8b\u5982 HTTP Header \u548c HTTP Body\u3002
\u548c Coalescing \u7684\u5dee\u7570\u4e3b\u8981\u5728\u65bc\uff1a
ACK
\u900f\u904e TCP_CORK=1
\u4f86\u55ae\u7368\u70ba\u7279\u5b9a socket \u958b\u555f\u672c\u529f\u80fd\u3002
\u7528\u4f86\u6e1b\u5c11\u7db2\u8def\u8ca0\u8377\u7684\uff0c\u4e0d\u7528\u6bcf\u6b21\u6536\u5230\u5c01\u5305\u90fd\u56de ACK\uff0c\u800c\u662f\uff1a
Linux \u900f\u904e TCP_QUICKACK=1
\u4f86\u95dc\u9589\u672c\u529f\u80fd\u3002
\u5982\u679c\u642d\u914d Coalescing \u53ef\u80fd\u6703\u9020\u6210\u6211\u5728\u7b49\u4f60\u7684 ACK
\u518d\u7e7c\u7e8c\u9001\u5c01\u5305\uff0c\u800c\u4f60\u5728\u7b49\u6211\u7684 ACK
\u624d\u6703\u7e7c\u7e8c\u9001\u5c01\u5305\u3002
\u7528\u4f86\u907f\u514d\u91cd\u8907\u50b3\u9001\u7684\u6a5f\u5236\uff0c\u53ef\u4ee5\u6307\u5b9a\u7279\u5b9a\u5c01\u5305\u91cd\u50b3\uff0c\u800c\u4e0d\u7528\u4e00\u76f4\u7b49\u5f85\u6700\u820a\u7684\u90a3\u500b\u91cd\u50b3\u3002
"},{"location":"essay/web/tcp/#duplicated","title":"Duplicated","text":"\u900f\u904e SACK \u4f86\u544a\u77e5\u5c0d\u65b9\u6211\u6536\u5230\u4e86\u91cd\u8907\u7684\u5c01\u5305\uff0c\u4f8b\u5982\uff1a
\u6216\u8005\u544a\u77e5\u820a\u7684\u5c01\u5305\u9084\u6c92\u6536\u5230\uff0c\u65b0\u7684\u5c01\u5305\u5df2\u7d93\u4f86\u4e86\uff08Out-of-order, OFO\uff09\uff0c\u4f8b\u5982\uff1a
"},{"location":"essay/web/tcp/#syn-cookies","title":"SYN Cookies","text":"\u63a5\u6536\u65b9\u5728\u6536\u5230 SYN
\u6642\uff0c\u56de\u50b3\u4e00\u500b cookie\uff0c \u4e26\u7b49\u5230\u4e0b\u6b21\u6536\u5230\u76f8\u61c9 cookie \u7684 ACK
\u5f8c\u624d\u958b\u59cb\u5206\u914d\u8a18\u61b6\u9ad4\u7d66\u9019\u500b\u9023\u7dda\u3002 \u9019\u6a23\u53ef\u4ee5\u907f\u514d\u5927\u91cf SYN
\u50b3\u5165\u6642\uff0c\u6bcf\u500b\u90fd\u5206\u914d\u76f8\u61c9\u9023\u7dda\u7684\u8a18\u61b6\u9ad4\u6642\uff0c\u5c0e\u81f4\u7684\u670d\u52d9\u5fd9\u788c\u3002
\u4e00\u958b\u59cb\u5c0f\u5c01\u5305\u7684\u5ef6\u9072\uff0c\u53ef\u80fd\u6703\u9020\u6210\u5c01\u5305\u9806\u5e8f\u7684\u8aa4\u5224\uff0c\u8a73\u898b SYN cookies ate my dog\u3002
"},{"location":"essay/web/tcp/#paws","title":"PAWS","text":"PAWS(Protection Against Wrapping Sequence)\uff0c\u662f\u7528\u4f86\u907f\u514d SEQ
\u6ea2\u4f4d\u9020\u6210\u7684\u5224\u65b7\u932f\u8aa4\u3002 \u5be6\u4f5c\u4e0a\u6703\u4f7f\u7528\u6642\u9593\u6233\u8a18\u4f86\u9a57\u8b49\u4e4b\u3002
\u6bcf\u500b TCP \u5c01\u5305\u90fd\u6703\u6709\u500b SEQ
\u865f\u78bc\u4f86\u4ee3\u8868\u4e4b\uff0c\u5982\u679c\u6536\u5230\u820a\u7684 SEQ
\u865f\u78bc\u5c31\u4ee3\u8868\u9019\u662f\u4e4b\u524d\u91cd\u50b3\u7684\u5c01\u5305\uff0c\u9700\u8981\u6368\u68c4\u4e4b\uff0c\u5982\u4e0b\u5716\u6240\u793a\u3002
---\ntitle: TCP Sequence Number\n---\nsequenceDiagram\n Client-->Server: Initialize SEQ as 100\n Client->>+Server: Length 33, SEQ-100\n Client-->>Network: Length 33, SEQ-100\n Server->>-Client: ACK-133\n Client->>+Server: Length 44, SEQ 133\n Server->>-Client: ACK-177\n Network->>Server: Length 33, SEQ-100\n Note right of Server: \u26a0\ufe0fDrop!\n
Tip
\u521d\u59cb\u5316\u7684 SEQ
\u662f\u96a8\u6a5f\u7522\u751f\u7684\uff0c\u907f\u514d\u88ab\u731c\u5230\uff0c\u505a\u51fa\u507d\u9020\u5c01\u5305\u7684\u653b\u64ca\u3002
SEQ \u662f\u4e00\u500b \\(2^32\\) \u7684\u503c\uff0c\u6700\u5927\u7684\u503c\u7d04\u70ba 43 \u5104\uff0c\u63db\u53e5\u8a71\u8aaa\u4e00\u689d\u9023\u7dda\u5982\u679c\u50b3\u9001\u4e86 4GB \u7684\u8cc7\u6599\uff0c\u5c31\u6703\u9047\u5230\u6ea2\u4f4d\uff0c\u7136\u5f8c\u5c31\u6703\u4e1f\u68c4\u8a72\u5c01\u5305\u3002 \u4e0d\u7ba1\u9019\u500b\u9023\u7dda\u662f\u9577\u9023\u7dda\u9084\u662f\u77ed\u6642\u9593\u5927\u91cf\u8cc7\u6599\u50b3\u905e\u3002
---\ntitle: TCP Sequence Number Overflow\n---\nsequenceDiagram\n Client-->Server: Initialize SEQ as 1G\n Client->>+Server: Length 1G, SEQ-1G\n Client->>+Server: Length 1G, SEQ-2G\n Client->>+Server: Length 1G, SEQ-3G\n Client->>+Server: Length 1G, SEQ-4G\n Client->>+Server: Length 1G, SEQ-1G(Overflow)\n Note right of Server: \u26a0\ufe0fDrop!\n
\u65bc\u662f\u5c31\u958b\u59cb\u4f7f\u7528\u6642\u9593\u6233\u8a18\uff08Timestamp, TS\uff09\u5728\u6bcf\u500b\u5c01\u5305\u4e0a\uff0c\u9019\u6a23\u5373\u6642\u50b3\u5927\u91cf\u7684\u8cc7\u6599\uff0c\u4ecd\u4e0d\u6703\u56e0\u70ba\u6ea2\u4f4d\u800c\u62d2\u7d55\u5c01\u5305\u3002
---\ntitle: TCP Sequence Number Overflow\n---\nsequenceDiagram\n Client-->Server: Initialize SEQ as 1G\n Client->>+Server: Length 1G, SEQ-1G, TS-1\n Client->>+Server: Length 1G, SEQ-2G, TS-2\n Client->>+Server: Length 1G, SEQ-3G, TS-3\n Client->>+Server: Length 1G, SEQ-4G, TS-4\n Client->>+Server: Length 1G, SEQ-1G(Overflow), TS-5\n Note right of Server: OK, TS-5 > TS-4\n
\u8981\u6ce8\u610f\u7684\u662f\u6642\u9593\u6233\u8a18\u7684\u521d\u59cb\u503c\u4e5f\u662f\u96a8\u6a5f\u7522\u751f\u7684\u3002
"},{"location":"essay/web/tcp/#\u554f\u984c_3","title":"\u554f\u984c","text":"Client-A \u7684\u8acb\u6c42\u901a\u904e SNAT \u88ab\u8f49\u767c\u5230 Server\uff0c\u4e26\u4ee5\u6642\u9593\u6233\u8a18 TS-A \u8a2a\u554f\u4e26\u7d50\u675f\u9023\u7dda\u3002 Client-B \u7684\u8acb\u6c42\u5728\u9001\u51fa\u8acb\u6c42\u6642\u5982\u679c\u4e5f\u56e0\u70ba SNAT \u88ab\u4f7f\u7528\u5230\u76f8\u540c\u7684 Port\uff0c\u6b64\u6642 Client-B \u53ef\u80fd\u6703\u56e0\u70ba\u6642\u9593\u6233\u8a18\u4e0d\u540c\u800c\u88ab\u62d2\u7d55\u3002
"},{"location":"essay/web/tcp/#forward-rto","title":"Forward RTO","text":"\u900f\u904e\u5728\u4e00\u6bb5\u6642\u9593\u5167\u7b49\u5f85\u7576\u4e0b\u5169\u500b ACK
\u5c01\u5305\uff0c\u4e26\u767c\u73fe\u5927\u65bc\u91cd\u50b3\u7684\u5c01\u5305\uff0c\u9019\u4ee3\u8868\u9019\u662f\u865b\u5047\u91cd\u50b3\u3002 \u5f9e\u800c\u9054\u5230\u907f\u514d\u55ae\u7d14\u7db2\u8def\u5ef6\u9072\u5c0e\u81f4\u7684\u932f\u8aa4\u91cd\u9001\u3002
\u63a5\u6536\u65b9\u548c\u767c\u9001\u65b9\u540c\u6642\u7d00\u9304 cookie\uff0c\u4e26\u5728\u4e0b\u6b21\u9023\u7dda\u6642\u5ffd\u7565\u63e1\u624b\u968e\u6bb5\u3002
"},{"location":"essay/web/tcp/#congestion-control","title":"Congestion Control","text":"\u907f\u514d\u5c01\u5305\u58c5\u585e\uff0cTCP \u63d0\u4f9b\u5e7e\u7a2e\u6f14\u7b97\u6cd5\uff1a
\u63d0\u4f9b\u7684\u6307\u6a19\uff1aTBD
"},{"location":"essay/web/tcp/#\u7279\u6b8a","title":"\u7279\u6b8a","text":"\u4e00\u4e9b\u5728\u6307\u6a19\u4e0a\u770b\u4e0d\u5230\u7684\u529f\u80fd\u3002
"},{"location":"essay/web/tcp/#ecn","title":"ECN","text":"\u4f7f\u7528\u986f\u5f0f\u64c1\u585e\u901a\u77e5\uff08Explicit Congestion Notification, ECN\uff09\u53ef\u4ee5\u6e2c\u91cf\u64c1\u585e\u7684\u7a0b\u5ea6\u3002
"},{"location":"essay/web/tcp/#\u6709\u7528\u6307\u4ee4","title":"\u6709\u7528\u6307\u4ee4","text":"\u67e5\u770b\u70ba\u4ec0\u9ebc kernel reject \u5c01\u5305\uff08\u6bb5\uff09\uff1a
$ netstat -s | grep reject\n416177 passive connections rejected because of time stamp\n 13 packets rejects in established connections because of timestamp\n
\u67e5\u770b\u5c01\u5305 kernel \u8a2d\u5b9a\uff1a
$ sysctl -ae | grep 'net\\.ipv4\\.tcp_'\nnet.ipv4.tcp_abort_on_overflow = 0\n...\n
"},{"location":"essay/web/tcp/#bsd-socket-api","title":"BSD Socket API","text":"TCP \u5728 Berkeley Socket \u4e4b\u4e0a\u7684\u6d41\u7a0b\u3002
Socket \u70ba\u5305\u88dd\u5e95\u5c64\u904b\u4f5c\u7684 API\uff0c\u5305\u62ec Data Link Layer \u548c Network Layer\u3002
\u540d\u7a31 \u529f\u80fd Socket \u5efa\u7acb Socket \u4f86\u76e3\u807d\uff08listen\uff09\u9023\u7dda Bind \u7d81\u5b9a address \u548c port\uff0c\u53ef\u8a2d\u5b9a IP \u906e\u7f69 Listen \u76e3\u807d TCP \u9023\u7dda\u548c\u9650\u5236\u9023\u7dda\u6578\uff0cUDP \u4e0d\u9700\u8981\u547c\u53eb\u672c\u51fd\u5f0f Accept \u8ff4\u5708\u53bb\u63a5\u53d7\u9023\u7dda\uff0c\u4e26\u9032\u884c\u5f8c\u7e8c\u7684\u4ea4\u63e1\u884c\u70ba\u5404\u6d41\u7a0b\u7c21\u4ecb
\u5be6\u4f5c\u7bc4\u4f8b\u7d81\u5b9a port \u548c\u4f4d\u7f6e\uff08IPv4\uff09\u5f8c\u5efa\u7acb\u9023\u7dda\uff1a
bzero((char *)&server, sizeof(struct sockaddr_in));\nserver.sin_family = AF_INET;\nserver.sin_port = htons(port);\nserver.sin_addr.s_addr = htonl(INADDR_ANY);\nif (bind(sd, (struct sockaddr *)&server, sizeof(server)) == -1) {\n fprintf(stderr, \"Can't bind name to socket\\n\");\n exit(1);\n}\n
listen(sd, 5); // (1)\n\nwhile (1) {\n client_len = sizeof(client);\n new_sd = accept(sd, (struct sockaddr *)&client, &client_len); // (2)\n if (new_sd == -1) {\n fprintf(stderr, \"Can't accept client\\n\");\n exit(1);\n }\n // ...\n}\n
new_sd
\u53bb\u8b80\u5beb\u8cc7\u6599\uff0csd
\u5247\u7e7c\u7e8c\u76e3\u807d\u9023\u7dda\u8acb\u6c42\u3002\u907a\u5931\uff1a\u5f88\u53ef\u80fd\u5be6\u969b\u6709\u9001\u5230\u6307\u5b9a\u4f4d\u7f6e\uff0c\u4f46\u662f\u56e0\u70ba\u50b3\u8f38\u904e\u7a0b\u8a0a\u865f\u88ab\u5e72\u64fe\u4e86\uff0c\u5c0e\u81f4\u6aa2\u9a57\u548c\u7684\u6aa2\u67e5\u5931\u6557\u3002
\u91cd\u8907\u5bc4\u9001\uff1a\u5efa\u7acb\u5728\u907a\u5931\u4e4b\u4e0a\u7684\u554f\u984c\uff0c\u7576\u76ee\u7684\u5730\u6536\u5230\u4e26\u56de\u50b3 ACK
\u6642\uff0c\u767c\u9001\u65b9\u5f88\u53ef\u80fd\u6c92\u6536\u5230\u9019\u500b\u8a0a\u865f\uff0c\u5c31\u8aa4\u4ee5\u70ba\u6c92\u9001\u6210\u529f\uff0c\u5c31\u518d\u9001\u4e00\u6b21\u3002
\u5931\u5e8f\uff1a\u539f\u672c\u662f\u7167 1,2,3,... \u7684\u9806\u5e8f\u9001\u51fa\u53bb\uff0c\u6536\u5230\u537b\u5f88\u53ef\u80fd\u662f 3,1,4,...\uff0c\u9019\u53ef\u80fd\u662f\u56e0\u7232\u58c5\u585e\u6216\u7db2\u8def\u5ef6\u9072\u9020\u6210\u7684\uff0c\u751a\u81f3\u53ef\u80fd\u6bcf\u500b\u5c01\u5305\u8def\u7531\u8def\u5f91\u4e0d\u540c\uff08IP \u7684\u5354\u5b9a\u6703\u6c7a\u5b9a\u9019\u4e00\u7cfb\u5217\u7684\u5c01\u5305\u600e\u9ebc\u9001\uff09
\u7576 TCP \u9023\u7dda\u88ab\u958b\u6eff\u4e86\uff0c\u6703\u767c\u751f\u4ec0\u9ebc\u4e8b\uff1f\u9700\u8981\u5148\u5b9a\u7fa9\u88ab\u958b\u6eff\u4e86\u662f\u4ec0\u9ebc\u610f\u601d\uff0c\u662f\u90e8\u5206\u9032\u5165 TIME_WAIT
\u72c0\u614b\u55ce\uff0c\u9084\u662f\u6240\u6709\u90fd\u662f Active \u7684\u72c0\u614b\uff1f
\u5982\u679c\u662f TIME_WAIT
\u7684\u72c0\u6cc1\u53ef\u4ee5\u8003\u616e\u95dc\u9589 TIME_WAIT
\u7684\u9023\u7dda\u3002
\u82e5\u90fd\u662f Active \u7684\u72c0\u614b\uff0c\u4e14\u8cc7\u6e90\u7684\u5141\u8a31\u4e0b\u5247\u53ef\u4ee5\u8003\u616e\u7528 Virtual IP \u5efa\u7acb\u66f4\u591a\u9023\u7dda\uff0c\u56e0\u70ba TCP \u7684\u6bcf\u500b\u9023\u7dda\u90fd\u662f\u4ee5 IP \u548c Port \u70ba\u4e00\u500b\u7d44\u5408\u3002\u8a73\u898b The Road to 2 Million Websocket Connections in Phoenix\u3002
\u5982\u4f55\u95dc\u9589 TIME_WAIT \u72c0\u614b\u7684\u9023\u7dda\uff1f\u4f60\u53ef\u4ee5\u8ce6\u4e88\u8a72\u9023\u7dda\u4e00\u500b\u9078\u9805\uff1aSO_REUSEADDR
\uff0c\u5728 Linux \u4e2d\uff0c\u4f60\u4e5f\u53ef\u4ee5\u8abf\u6574 TCP_TW_REUSE
\u6216 TCP_TW_RECYCLE
\uff1a
This socket option tells the kernel that even if this port is busy (in the TIME_WAIT state), go ahead and reuse it anyway. If it is busy, but with another state, you will still get an address already in use error. It is useful if your server has been shut down, and then restarted right away while sockets are still active on its port. You should be aware that if any unexpected data comes in, it may confuse your server, but while this is possible, it is not likely.
\u6216\u8005\u8abf\u6574 Maximum Segment Lifetime(MSL)\uff1a
# \u770b\u4e00\u4e0b\u73fe\u5728\u72c0\u614b\n$ sysctl net.ipv4.tcp_fin_timeout\n# VI \u6539\n$ vi /proc/sys/net/ipv4/tcp_fin_timeout\n# Hot reload\n$ sysctl -p /etc/sysctl.conf\n
\u4ec0\u9ebc\u662f TCP Timeout\uff1f \u5c31\u662f\u61c9\u7528\u5c64\u7684\u67d0\u4e9b HTTP Client \u5957\u4ef6\u6703\u5beb\u7684 Connection Timeout\uff0c\u901a\u5e38\u7cfb\u7d71\u5c64\u7684\u9810\u8a2d\u70ba\u5341\u5206\u9418\u3002
\u73fe\u5728\u6709\u4e00\u500b\u72c0\u6cc1\uff1a
\u7576\u7136\u4e0d\u80fd\u4e00\u6982\u800c\u8ad6\uff0c\u4e0d\u904e\u6709\u9047\u904e\u9019\u500b\u7d93\u9a57\u3002\u90a3\u6b21\u7684\u539f\u56e0\u662f\u56e0\u70ba\u4e0b\u6e38\u7684\u670d\u52d9\u7cfb\u7d71\u5c64\u9023\u7dda\u6578\u88ab\u5403\u6eff\u4e86\uff0c\u4f46\u662f\u8cc7\u6e90\u4f7f\u7528\u7387\u4ecd\u5728\u6b63\u5e38\u7684\u6c34\u5e73\u3002
\u56e0\u70ba\u7cfb\u7d71\u5c64\u9023\u7dda\u88ab\u5403\u6eff\u4e86\uff0c\u6240\u4ee5\u958b\u59cb\u9020\u6210\u670d\u52d9\u9700\u8981\u82b1\u5f88\u591a\u6642\u9593\u624d\u80fd\u5efa\u7acb\u9023\u7dda\uff08\u7b49\u5f85\u5176\u4ed6\u9023\u7dda\u88ab\u95dc\u9589\uff09\uff0c\u540c\u6642\u4e0b\u6e38\u670d\u52d9\u6703\u56e0\u70ba TCP \u5929\u751f\u7684\u6a5f\u5236\u958b\u59cb\u53cd\u58d3\uff08back-pressure\uff09\uff0c\u5728\u4e0a\u6e38\u4ecd\u6703\u6709\u4e00\u5b9a\u7684\u7db2\u8def\u983b\u5bec\u8017\u7528\u7387\u3002
\u9019\u6642\u7684\u89e3\u6c7a\u8fa6\u6cd5\u9664\u4e86\u524d\u9762\u300c\u7576 TCP \u9023\u7dda\u88ab\u958b\u6eff\u4e86\uff0c\u6703\u767c\u751f\u4ec0\u9ebc\u4e8b\uff1f\u300d\u7684\u89e3\u6c7a\u4e4b\u9053\u4e4b\u5916\uff0c\u6709\u5e7e\u500b\u61c9\u7528\u5c64\u9762\u7684\u8655\u7406\u6a5f\u5236\uff1a
RFC-9293 - TCP\uff0c\u53d6\u4ee3\u904e\u6642\u7684 RFC-793, 879, 1011, 1122, 2873, 6093, 6429, 6528, and 6691 RFC-2018 - SACK \u8aaa\u660e RFC-7323 - TCP Options: Window Scale, Timestamp
\u4e4b\u524d\u6709\u770b\u5230\u4e00\u500b RFC\uff08\u5fd8\u8a18\u7de8\u865f\uff09\u8aaa\u660e\u68c4\u7528 TCP Timestamp\uff0c\u56e0\u70ba\u5b83\u4f54\u7528\u5f88\u591a\u7a7a\u9593\uff0c\u6545\u63a8\u85a6\u5176\u4ed6\u505a\u6cd5\uff0c\u5305\u62ec\u4f7f\u7528 TLS\u3002
"},{"location":"essay/web/url-structure/","title":"URL \u9577\u4ec0\u9ebc\u6a23\u5b50","text":"URL: scheme://host:port/path
http
, https
subdomain.domain.tld
com
com.tw
io
github.io
http
default 80
https
default 443
/path?query_key=query_value#fragment
https://example.com:443
is same origin to https://example.com
http://eample.com:443
is different origin to http://example.com
(why? http
default port
is 80)http://api.example.com
is same site of http://auth.example.com
schemeful-same-site
consider scheme on site
Sec-Fetch-Site
([time=April, 2020]) can know where request came fromsame-site
same-origin
cross-site
none
What is Origin?
"},{"location":"essay/web-security/cross-origin-resources-sharing/#\u6b77\u53f2","title":"\u6b77\u53f2","text":"\u70ba\u4e86\u4fdd\u8b77\u4f7f\u7528\u8005\u7684\u96b1\u79c1\u548c\u88ab\u8981\u6c42\u7684\u7db2\u7ad9\u96b1\u79c1\u3002
"},{"location":"essay/web-security/cross-origin-resources-sharing/#\u5716\u8868\u8aaa\u660e","title":"\u5716\u8868\u8aaa\u660e","text":"http://example.com
\u7684\u7db2\u7ad9\u3002http://image.com
\uff09\u8981\u6a94\u6848\uff08\u5716\u7247\uff0cCSS \u6a94...\uff09\u3002http://example.com
http://example.com | http://other.com
*
\u593e\u96dc\u7684\u6771\u897f\u5e38\u5e38\u5c31\u662f\u4f7f\u7528\u8005\u7684\u96b1\u79c1\u3002
"},{"location":"essay/web-security/cross-origin-resources-sharing/#\u653b\u64ca","title":"\u653b\u64ca","text":"\u82e5\u5141\u8a31\u6240\u6709\u7684\u8981\u6c42\uff0c\u653b\u64ca\u8005\u53ef\u4ee5\u5728\u81ea\u5df1\u7db2\u7ad9\uff08devil.com
\uff09\u8981\u6c42\u4e00\u500b\u5728\u88ab\u653b\u64ca\u7db2\u7ad9\uff08example.com
\uff09\u4e2d\u7684\u6703\u54e1\u5c08\u5c6c\u5716\u7247\uff0c\u4e26\u900f\u904e\u5716\u7247\u6216\u5176\u4ed6\u4e92\u52d5\u65b9\u5f0f\u8981\u5230\u6703\u54e1\u500b\u4eba\u53ef\u8fa8\u8b58\u7684\u8cc7\u6599\u6216\u751a\u81f3 cookie
\u7684\u503c\u3002
very new feature!!
CORP
\u548c CORS
Cross-Origin-Resource-Policy
- same-origin
- same-site
- cross-origin
Cross-Origin-Embedder-Policy
- require-corp
GET /api/v2/shops/{shop_name}/revenue_data.json HTTP/1.1\n...\n
\u653b\u64ca\u8005\u53ea\u8981\u66f4\u6539 shop_name
\u5c31\u53ef\u4ee5\u5b58\u53d6\u4ed6\u4eba\u7684\u8cc7\u6599\u3002
\u5982\u679c API \u5728\u8655\u7406\u8eab\u4efd\u8a8d\u8b49\u6642\uff0c\u6c92\u6709\u9069\u7576\u4fdd\u8b77\uff0c\u5982\uff1aCAPTCHA
\u3001\u901f\u5ea6\u9650\u5236
\u3001\u9396 IP
\u7b49\u3002
\u653b\u64ca\u8005\u53ef\u4ee5\u904b\u7528\u4f7f\u7528\u8005\u5e33\u865f\u3001\u5bc6\u78bc\u7d44\u5408\u5217\u8868\u53cd\u8986\u5617\u8a66\u4f86\u53d6\u5f97\u6b0a\u9650\uff0c \u5c31\u53ef\u4ee5\u5f97\u5230\u6b63\u78ba\u7684\u7d44\u5408\u3002
"},{"location":"essay/web-security/owasp-api-top10/#excessive-data-exposure","title":"Excessive Data Exposure","text":"\u65b0\u9032\u4fdd\u5168
\u53ea\u80fd\u5b58\u53d6\u9650\u5236\u7684\u76e3\u63a7
\u3002
GET /api/v2/camera/ids HTTP/1.1\n...\n
\u56de\u50b3\u7684\u537b\u662f\u5168\u90e8\u7684\u76e3\u63a7
\uff0c\u7136\u5f8c\u518d\u5728 APP \u4f5c\u904e\u6ffe\u548c\u9650\u5236\u3002
\u963b\u65b7\u670d\u52d9\u653b\u64ca (DoS)
GET /api/v2/users?page=1&size=100 HTTP/1.1\n...\n
size
\u5f9e 100
\u8abf\u6574\u6210 2,000,000
\u3002
\u53ef\u4ee5\u5b58\u53d6\u672a\u7d93\u6388\u6b0a\u7684\u529f\u80fd
POST /api/admin/v2/invites HTTP/1.1\n\n...\n\n{\"email\"\uff1a\"hugo@malicious.com\"}\n
\u6ce8\u610f\u548c Object \u4e4b\u9593\u7684\u5dee\u7570
"},{"location":"essay/web-security/owasp-api-top10/#mass-assignment","title":"Mass Assignment","text":"\u6bd4\u8f03\u4e0b\u5217\u5169\u6bb5\u7a0b\u5f0f\u78bc\u7684\u5dee\u7570\u3002
const user = new User(req.body);\nuser.update();\n
const data = req.body;\nconst user = new User({ name: data.name, age: data.age });\nuser.update();\n
\u82e5\u4f7f\u7528\u8005\u6253\u5165\u4ee5\u4e0b API \u5c1a\u7121\u5f71\u97ff\u3002
PUT /api/v2/user/data HTTP/1.1\n\n...\n\n{\"name\"\uff1a\"john\",\"age\"\uff1a24}\n
\u4f46\u6539\u6210\u4ee5\u4e0b\u8cc7\u8a0a\uff0c\u5247\u6703\u7d66\u4e88\u932f\u8aa4\u6b0a\u9650\u3002
PUT /api/v2/user/data HTTP/1.1\n\n...\n\n{\"name\"\uff1a\"john\",\"age\"\uff1a24,\"money\"\uff1a999999}\n
"},{"location":"essay/web-security/owasp-api-top10/#security-misconfiguration","title":"Security Misconfiguration","text":"\u5982\u679c\u8cc7\u6599\u5eab\u7ba1\u7406\u7cfb\u7d71\u4f7f\u7528\u7684\u662f\u9810\u8a2d\u914d\u7f6e
\u800c\u5176\u5728\u9ed8\u8a8d\u60c5\u6cc1\u4e0b\u6703\u89e3\u9664\u8eab\u4efd\u8a8d\u8b49...
"},{"location":"essay/web-security/owasp-api-top10/#injection","title":"Injection","text":"POST /api/v2/auth/login HTTP/1.1\n\n...\n\n{\"account\"\uff1a\"some-account' OR 1 --\", \"password\": \"dont-care\"}\n
\u5728\u8cc7\u6599\u5eab\u4e2d\u6703\u5982\u4ee5\u4e0b\u57f7\u884c\uff1a
SELECT * FROM user\nWHERE account='some-account' OR 1 --' AND password='dont-care'\nLIMIT 1\n
"},{"location":"essay/web-security/owasp-api-top10/#improper-assets-management","title":"Improper Assets Management","text":"v2
\u628a Lack of Resources & Rate Limiting \u7684\u554f\u984c\u4fee\u597d\u4e86
GET /api/v2/users?page=1&size=100 HTTP/1.1\n...\n
\u4f46\u662f v1
\u5462\uff1f\u6709\u6b63\u78ba\u4fee\u6b63\u6216\u91cd\u65b0\u5c0e\u5165\uff08redirect\uff09\u5230 v2
\u55ce
\u6e2c\u8a66\u74b0\u5883\u7684 DB \u6709\u6c92\u6709\u548c\u6b63\u5f0f\u74b0\u5883\u4e92\u76f8\u5f71\u97ff\uff1f
"},{"location":"essay/web-security/owasp-api-top10/#insufficient-logging--monitoring","title":"Insufficient Logging & Monitoring","text":"\u597d\u7684 Log \u548c\u8b66\u544a\u7cfb\u7d71\uff0c\u6703\u8b93\u7ba1\u7406\u54e1\u6709\u80fd\u529b\u7576\u4e0b\u5c0d\u653b\u64ca\u505a\u8655\u7406\u3002
"},{"location":"essay/web-security/owasp-authentication-best-practice/","title":"OWASP \u9a57\u8b49\u6a5f\u5236\u6700\u4f73\u6307\u5357","text":""},{"location":"essay/web-security/owasp-authentication-best-practice/#passsword","title":"Passsword","text":"Referer: https://github.com/OWASP/owasp-mstg/blob/master/Document/0x04e-Testing-Authentication-and-Session-Management.md#testing-best-practices-for-passwords-mstg-auth-5-and-mstg-auth-6
Referer: https://github.com/OWASP/owasp-mstg/blob/master/Document/0x04e-Testing-Authentication-and-Session-Management.md#session-management-best-practices
jti
\uff08JWT ID\uff09KeyChain
\u6216 KeyStore
alg
\u53ef\u63a5\u53d7 none
exp
\u8981\u6ce8\u610fimplicit grant
\uff0ccode grant
\u8981\u4e00\u6b21\u6027\u4e14\u77ed\u6642scope
\u5982\u8ad6\u4f55\u7a2e\u72c0\u6cc1\uff0c\u4f60\u90fd\u61c9\u8a72\u9a57\u8b49\u8acb\u6c42\u662f\u5426\u4f86\u81ea\u4e0d\u540c\u88dd\u7f6e\u3002\u56e0\u6b64\uff0c\u8981\u80fd\u78ba\u8a8d\u4f60\u7684\u7a0b\u5f0f\u771f\u7684\u88ab\u88dd\u5728\u6b63\u78ba\u7684\u88dd\u7f6e\u4e0a\u3002
iOS\uff1a
In iOS, a developer can use identifierForVendor
, which is related to the bundle ID: the moment you change a bundle ID, the method will return a different value. When the app is ran for the first time, make sure you store the value returned by identifierForVendor
to the KeyChain, so that changes to it can be detected at an early stage.
Android\uff1a
In Android, the developer can use Settings.Secure.ANDROID_ID
till Android 8.0 (API level 26) to identify an application instance. Note that starting at Android 8.0 (API level 26), ANDROID_ID
is no longer a device unique ID. Instead, it becomes scoped by the combination of app signing key, user and device. So validating ANDROID_ID
for device blocking could be tricky for these Android versions. Because if an app changes its signing key, the ANDROID_ID
will change and it won't be able to recognize old users devices. Therefore, it's better to store the ANDROID_ID
encrypted and privately in a private a shared preferences file using a randomly generated key from the AndroidKeyStore
and preferably AES_GCM encryption. The moment the app signature changes, the application can check for a delta and register the new ANDROID_ID
. The moment this new ID changes without a new application signing key, it should indicate that something else is wrong.
\u9664\u6b64\u4e4b\u5916\uff0c\u5728\u4e00\u958b\u59cb\u7684\u88dd\u7f6e\u7d81\u5b9a\u4e0a\uff0c\u53ef\u4ee5\u900f\u904e\u7c3d\u767c\u8acb\u6c42\uff0c\u4f86\u63d0\u9ad8\u5b89\u5168\u6027\u3002
Next, the device binding can be extended by signing requests with a key stored in the Keychain
for iOS and in the KeyStore
in Android can reassure strong device binding.
\u4f60\u4e5f\u53ef\u4ee5\u9a57\u8b49 IP
\u3001\u5730\u7406\u4f4d\u7f6e
\u548c\u6642\u9593\u8ecc\u8de1
\u3002
\u4f8b\u5982\u628a\u6a5f\u654f\u8cc7\u6599\u5b58\u9032 local storage \u800c\u4e0d\u662f\u539f\u751f\u7684\u52a0\u5bc6\u5132\u5b58\u7a7a\u9593\uff1a
Keychain
Keystore
\u8acb\u53c3\u7167\u5404\u5e73\u53f0\u7684\u6700\u4f73\u505a\u6cd5\uff01\uff01
"},{"location":"essay/web-security/owasp-mobile-risk-top10/#\u4e0d\u5b89\u5168\u7684\u8cc7\u6599\u5132\u5b58insecure-data-storage","title":"\u4e0d\u5b89\u5168\u7684\u8cc7\u6599\u5132\u5b58\uff08Insecure Data Storage\uff09","text":"\u53ef\u80fd\u7684\u5132\u5b58\u7a7a\u9593\uff1a
\u9810\u9632\uff1a
iGoat\u7684\u6559\u5b78\u5f71\u7247\u3002
"},{"location":"essay/web-security/owasp-mobile-risk-top10/#\u50b3\u8f38\u5c64\u4fdd\u8b77\u4e0d\u8db3insecure-communication","title":"\u50b3\u8f38\u5c64\u4fdd\u8b77\u4e0d\u8db3\uff08Insecure Communication\uff09","text":"\u50b3\u8f38\u5a92\u4ecb\u53ef\u5305\u542b\uff1a
\u6700\u4f73\u505a\u6cd5\uff1a
SMS
\u3001MMS
\u50b3\u51fa\u53bbGET /api/some-method?rule=user HTTP/1.1\n
\u53ef\u4ee5\u8f15\u6613\u6539\u6210 rule=admin
\u8acb\u7528 Server \u7aef\u7684\u8cc7\u6599\u4f86\u6388\u6b0a\u4f7f\u7528\u8005
"},{"location":"essay/web-security/owasp-mobile-risk-top10/#\u4f60\u7684-app-\u5beb\u5f97\u4e0d\u597dpoor-code-quality","title":"\u4f60\u7684 APP \u5beb\u5f97\u4e0d\u597d\uff08Poor Code Quality\uff09","text":"\u6cdb\u6307\u6240\u6709\u5728 Client \u7aef\u7684\u767c\u751f\u7684\u554f\u984c
\u9810\u9632\uff1a
buffer overflow
\u548c memory leak
\u662f\u9ad8\u98a8\u96aa\u7684\u5b89\u5168\u6027\u554f\u984cinclude <stdio.h>\n\n int main(int argc, char **argv)\n {\n char buf[8]; // buffer for eight characters\n gets(buf); // \u4f7f\u7528\u8005\u8f38\u5165\uff0c\u9019\u5f88\u5371\u96aa\uff01\n printf(\"%s\\n\", buf); // print out data stored in buf\n return 0; // 0 as return value\n }\n
"},{"location":"essay/web-security/owasp-mobile-risk-top10/#\u4f60\u7684\u7a0b\u5f0f\u78bc\u88ab\u653e\u5230\u975e\u6b63\u5e38\u74b0\u5883\u4e86code-tampering","title":"\u4f60\u7684\u7a0b\u5f0f\u78bc\u88ab\u653e\u5230\u975e\u6b63\u5e38\u74b0\u5883\u4e86\uff08Code Tampering\uff09","text":"\u4e00\u822c\u4f86\u8aaa\uff0c\u6240\u6709 APP \u90fd\u6703\u6709\u9019\u554f\u984c \u4f46\u662f\u5982\u679c APP \u5927\u90e8\u5206\u908f\u8f2f\u90fd\u5728\u9a57\u8b49\u5f8c\u6216 Server \u7aef\u7684\u8f38\u51fa\uff0c\u5247\u6b64\u985e\u5b89\u5168\u6027\u8b70\u984c\u53ef\u5ffd\u7565
\u8f03\u9700\u8981\u6ce8\u610f\u7684\u7522\u696d\uff1a\u624b\u904a\u3001\u5de5\u5177\u7a0b\u5f0f
\u9700\u53c3\u7167\u5404\u5e73\u53f0\u7684\u6700\u4f73\u4f5c\u6cd5\u4f86\u9810\u9632\u3002
"},{"location":"essay/web-security/owasp-mobile-risk-top10/#\u9006\u5411\u5de5\u7a0breverse-engineering","title":"\u9006\u5411\u5de5\u7a0b\uff08Reverse Engineering\uff09","text":"\u6709\u5de5\u5177\u53ef\u9810\u9632\uff08IDA Pro\u3001Hopper\uff09\uff0c\u4e5f\u6709\u5f88\u591a\u5de5\u5177\u53ef\u5e6b\u52a9\u9006\u5411\u5de5\u7a0b\uff0c\u6311\u4e00\u4e0b
\u6e1b\u5c11\u4e00\u500b Function \u7684\u5de5\u4f5c\uff0c\u8b93\u9006\u5411\u5f8c\u7684\u7a0b\u5f0f\u78bc\u4e0d\u5bb9\u6613\u95b1\u8b80
"},{"location":"essay/web-security/owasp-mobile-risk-top10/#\u53ef\u5f71\u97ff\u7a0b\u5f0f\u904b\u884c\u7684\u6a5f\u5236extraneous-functionality","title":"\u53ef\u5f71\u97ff\u7a0b\u5f0f\u904b\u884c\u7684\u6a5f\u5236\uff08Extraneous Functionality\uff09","text":"\u653b\u64ca\u8005\u53ef\u4ee5\u628a APP \u57f7\u884c\u5728 local \u7aef\uff0c\u7136\u5f8c\u6539\u8a2d\u5b9a\u6a94\u6216\u89c0\u5bdf log\u3002
debug
\u7684 log\u5f8c\u7aef\u9700\u8981\u6ce8\u610f\u53ef\u80fd\u906d\u53d7\u7684\u653b\u64ca\uff1a
\u57fa\u672c\u89c0\u5ff5\uff1a
\u4f7f\u7528\u56b4\u8b39\u7684\u8eab\u5206\u9a57\u8b49\u8207\u6388\u6b0a\uff08\u4f8b\u5982\uff1a\u96d9\u56e0\u7d20\u8a8d\u8b49\uff09
"},{"location":"essay/web-security/owasp-mobile-risk-top10/#\u4e0d\u9069\u7576\u7684-session-\u8655\u7406improper-session-handling","title":"\u4e0d\u9069\u7576\u7684 Session \u8655\u7406\uff08Improper Session Handling\uff09","text":"\u5047\u8a2d Skype \u61c9\u7528\u7a0b\u5f0f\u5177\u6709 HTML
\u6216 Script Injection
\u5f31\u9ede\uff0c\u653b\u64ca\u8005\u53ea\u8981\u4e8b\u5148\u628a\u5177\u6709\u60e1\u610f\u9023\u7d50\u7684 iframe
\u5beb\u5165\u67d0\u500b\u7279\u5b9a\u7db2\u9801\uff1a
<iframe src=\"skype:17031234567?call\"></iframe>\n
\u4e00\u4f46\u53ef\u651c\u5f0f\u884c\u52d5\u88dd\u7f6e\u7684\u700f\u89bd\u5668\u8b80\u53d6\u5230\u6b64 iframe
\u7a0b\u5f0f\u78bc\u6642\uff0cSkype \u61c9\u7528\u7a0b\u5f0f\u5c07\u7121\u9700\u4f7f\u7528\u8005\u6388\u6b0a\uff0c\u81ea\u52d5\u958b\u59cb\u64ad\u865f\u7d66\u6307\u5b9a\u7684\u96fb\u8a71\u865f\u78bc\u3002
Cross Site Rrequest Foriegn
"},{"location":"essay/web-security/owasp-mobile-risk-top10/#\u5c01\u88dd\u6a94\u6848\u4fdd\u8b77\u4e0d\u8db3--\u7f3a\u5c11\u4e8c\u9032\u4f4d\u4fdd\u8b77lack-of-binary-protections","title":"\u5c01\u88dd\u6a94\u6848\u4fdd\u8b77\u4e0d\u8db3 / \u7f3a\u5c11\u4e8c\u9032\u4f4d\u4fdd\u8b77\uff08Lack of Binary Protections\uff09","text":"Binary \u4fdd\u8b77\u53ef\u78ba\u4fdd\u653b\u64ca\u8005\u7121\u6cd5\u900f\u904e\u9006\u5411\u5de5\u7a0b\u7372\u5f97\u60a8\u7684 App
\u8cc7\u6599\u61c9\u907f\u514d\u81ea\u52d5\u5132\u5b58\u65bc\u53ef\u651c\u5f0f\u884c\u52d5\u88dd\u7f6e\u5167
\u61c9\u7528\u7a0b\u5f0f\u539f\u59cb\u78bc\u4e2d\uff0c\u628a\u8f38\u5165\u6216\u8f38\u51fa\u7684\u76f8\u95dc\u53c3\u6578\u76f4\u63a5\u5beb\u5165\u5728\u7a0b\u5f0f\u78bc\u7576\u4e2d
"},{"location":"feedback/","title":"\u5fc3\u5f97","text":"\u9019\u88e1\u4f5c\u70ba\u6211\u7684\u5fc3\u5f97\u7d00\u9304\uff0c\u8b80\u5b8c\u4f46\u662f\u89ba\u5f97\u4e0d\u9700\u8981\u5beb\u5fc3\u5f97\u5c31\u4e0d\u5217\u5728\u9019\u4e86\u3002
\u66f8\u540d \u72c0\u614b \u8a55\u50f9 \u4f5c\u8005 \u51fa\u7248\u65e5\u671f Implementation Patterns \u8b80\u5b8c \u2605\u2605\u2605\u2605\u2605 Kent Beck 2007-10 Distributed Systems with Node.js \u5b8c\u6210 \u2605\u2605\u2606\u2606\u2606 Thomas Hunter 2020-11 Designing Data-intensive Applications \u5b8c\u6210 \u2605\u2605\u2605\u2605\u2605 Martin Kleppmann 2017-03 Future Of Fusion Energy \u5beb\u4f5c \u2605\u2605\u2605\u2605\u2606 Jason Parisi, Paperback 2018-12 Release It! \u5b8c\u6210 \u2605\u2605\u2605\u2606\u2606 Michael T. Nygard 2018-01 Adaptive Concurrency \u5b8c\u6210 \u5fc3\u5f97 2022-07 The Site Reliability Workbook \u5beb\u4f5c \u2605\u2605\u2605\u2605\u2605 Google \u91dd\u5c0d\u7dad\u904b\u7684\u5be6\u4f5c\u6574\u7406 2018-09"},{"location":"feedback/#\u6700\u8fd1\u7684\u7570\u52d5","title":"\u6700\u8fd1\u7684\u7570\u52d5","text":"\u4e0d\u53ea\u662f\u65b0\u589e\u6587\u7ae0\uff0c\u4e5f\u5305\u542b\u4fee\u6539\u820a\u7684\u6587\u7ae0\u3002
{{ blog_content feedback }}
"},{"location":"feedback/#\u60f3\u8b80","title":"\u60f3\u8b80","text":"\u8b80\u5b8c\u66f8\uff0c\u4f46\u662f\u9084\u6c92\u958b\u59cb\u5beb\u5fc3\u5f97\u3002
\u958b\u59cb\u5beb\u4f5c\uff08\u53ef\u80fd\u8b80\u5b8c\u4e5f\u53ef\u80fd\u9084\u6c92\u8b80\u5b8c\uff09\u3002
\u8b80\u5b8c\u4e14\u5beb\u5b8c\u5fc3\u5f97\u3002
\u9019\u4efd\u5fc3\u5f97\u5168\u90e8\u6b78\u529f\u65bc\u9019\u90e8\u5f71\u7247\u548c\u9019\u7bc7\u90e8\u843d\u683c\u6587\u7ae0\u3002\u56e0\u70ba\u9019\u4efd\u5fc3\u5f97\u5c07\u6703\u65bc 104 TOL \u4e2d\u767c\u8868\uff0c\u6240\u4ee5\u5c07\u6703\u4ee5\u7c21\u5831\u7684\u6a23\u5b50\u9032\u884c\u64b0\u5beb\u3002
\u8a3b1\uff1a\u76f8\u95dc PPT \u53ea\u80fd\u88ab 104 \u7684\u54e1\u5de5\u67e5\u770b\uff0c\u4f46\u672c\u7bc7\u4ee5\u6db5\u84cb\u5168\u90e8\u7684\u5167\u5bb9\u3002
\u8a3b2\uff1a\u76f8\u95dc\u7a0b\u5f0f\u78bc\u5be6\u4f5c\u5728 GitHub \u4e0a\u3002
"},{"location":"feedback/adaptive-concurrency/#\u524d\u8a00","title":"\u524d\u8a00","text":"\u5728\u4eca\u65e5\uff082022\u5e74\uff09\uff0c\u8a31\u591a\u4eba\u5c0d\u65bc\u9069\u61c9\u6027\u4e26\u884c\u8655\u7406\uff08Adaptive Concurrency\uff09\u662f\u964c\u751f\u7684\uff0c\u4f46\u5be6\u969b\u4e0a\u5b83\u81ea 1988 \u5e74\u4fbf\u5df2\u5b58\u5728\u65bc\u6211\u5011\u5f88\u5e38\u4f7f\u7528\u7684\u5354\u5b9a TCP \u7576\u4e2d\u3002\u4ed6\u5728\u9019\u4e4b\u4e2d\u626e\u6f14\u4e86\u4ec0\u9ebc\u89d2\u8272\uff0c\u53c8\u70ba\u4ec0\u9ebc\u6703\u91cd\u65b0\u6d6e\u51fa\u6c34\u9762\u4f86\u8b93\u6211\u5011\u91cd\u65b0\u601d\u8003\u5b83\u7684\u50f9\u503c\u5462\uff1f
\u5728\u958b\u59cb\u524d\uff0c\u6211\u60f3\u5148\u4ee5\u9280\u884c\u4f5c\u70ba\u601d\u8003\u7bc4\u4f8b\uff0c\u5176\u5be6\u9019\u4e26\u4e0d\u662f\u5076\u7136\uff0c\u5728\u5f8c\u9762\u63d0\u5230\u7684\u5229\u7279\u723e\u6cd5\u5247\u4e2d\u5c31\u6703\u8b93\u5927\u5bb6\u77e5\u9053\u70ba\u4ec0\u9ebc\u8981\u4ee5\u9280\u884c\u4f5c\u70ba\u7bc4\u4f8b\u3002
"},{"location":"feedback/adaptive-concurrency/#\u9280\u884c\u7684\u4e26\u884c\u8655\u7406","title":"\u9280\u884c\u7684\u4e26\u884c\u8655\u7406","text":"\u4f60\u73fe\u5728\u7d93\u71df\u8457\u4e00\u5bb6\u9280\u884c\uff0c\u4f60\u96c7\u7528\u4e86\u4e00\u4e9b\u884c\u54e1\uff0c\u800c\u4f60\u8eab\u70ba\u71b1\u60c5\u7684\u7d93\u71df\u8005\uff0c\u6703\u7ad9\u5728\u9867\u5ba2\u548c\u884c\u54e1\u4e2d\u9593\uff0c\u5e6b\u5fd9\u63a5\u5f85\u3001\u5957\u8fd1\u4e4e\u548c\u5f15\u5c0e\u9867\u5ba2\u81f3\u6307\u5b9a\u884c\u54e1\u3002\u5728\u5be6\u969b\u71df\u696d\u524d\uff0c\u6211\u5011\u5c0d\u65bc\u5206\u884c\u5167\u7684\u6c23\u6c1b\u60f3\u50cf\u53ef\u80fd\u5982\u4e0b\uff1a
\u5feb\u6a02\u7684\u9280\u884c\u751f\u6d3b\u6301\u7e8c\u4e0d\u9577\uff0c\u4e8b\u5be6\u4e0a\u5728\u958b\u5f35\u5f8c\u4e0d\u4e45\u4f60\u5c31\u9762\u81e8\u4e86\u4e00\u4e9b\u72c0\u6cc1\uff1a
\u7576\u9019\u4e9b\u554f\u984c\u6c92\u6709\u89e3\u6c7a\uff0c\u6216\u8457\u9023\u7e8c\u6578\u5929\u767c\u751f\u9019\u7a2e\u72c0\u6cc1\uff0c\u4f60\u7684\u9280\u884c\u5c31\u6703\u958b\u59cb\u53d7\u5230\u9867\u5ba2\u7684\u6279\u8a55\u3002\u800c\u9019\u7a2e\u540d\u8b7d\u50b7\u5bb3\u901a\u5e38\u9700\u8981\u6578\u500d\u7684\u6642\u9593\u548c\u91d1\u9322\u4f86\u89e3\u6c7a\u3002
"},{"location":"feedback/adaptive-concurrency/#\u8d85\u7d1a\u4fdd\u9463\u840a\u7279\u5229\u7c73\u7279","title":"\u8d85\u7d1a\u4fdd\u9463\uff0c\u840a\u7279\u5229\u7c73\u7279","text":"\u70ba\u4e86\u89e3\u6c7a\u9019\u554f\u984c\uff0c\u4f60\u8acb\u4e86\u4e00\u4f4d\u8d85\u7d1a\u4fdd\u9463\uff0c\u840a\u7279\u5229\u7c73\u7279\uff08Rate Limit\uff09\u3002\u4ed6\u6703\u900f\u904e\u9650\u5236\u55ae\u4e00\u9867\u5ba2\u7684\u4f7f\u7528\u7e3d\u91cf\u4f86\u6e1b\u5c11\u90a3\u4e9b\u56e0\u70ba\u7279\u5b9a\u4eba\u58eb\u5c0e\u81f4\u7684\u670d\u52d9\u54c1\u8cea\u4e0b\u964d\u3002\u63db\u53e5\u8a71\u8aaa\uff0c\u5982\u679c\u6709\u4eba\u4e00\u5929\u4f86 30 \u6b21\uff0c\u6bcf\u6b21\u90fd\u662f\u9700\u8981\u8655\u7406 30 \u5206\u9418\u7684\u696d\u52d9\uff0c\u90a3\u4f60\u5f88\u53ef\u80fd\u6703\u8acb\u840a\u7279\u5229\u7c73\u7279\u51fa\u4f86\uff0c\u4e26\u9650\u5236\u8a72\u9867\u5ba2\u7684\u6b21\u6578\uff0c\u907f\u514d\u5176\u4ed6\u9867\u5ba2\u4e0d\u80fd\u6b63\u5e38\u8655\u7406\u4ed6\u5011\u7684\u696d\u52d9\u3002
\u4f46\u662f\u56de\u60f3\u4e00\u4e0b\u6211\u5011\u6700\u4e00\u958b\u59cb\u7684\u554f\u984c\uff0c\u51b7\u6c23\u58de\u6389\u3001\u884c\u54e1\u8acb\u5047\u3001\u696d\u52d9\u91cf\u5408\u7406\u5730\u5927\u589e\uff0c\u9019\u4e9b\u597d\u50cf\u90fd\u4e0d\u662f\u4e00\u500b\u4fdd\u9463\u80fd\u5920\u89e3\u6c7a\u7684\u3002\u4e8b\u5be6\u4e0a\u4e5f\u6c92\u6709\u4efb\u4f55\u4e00\u5bb6\u9280\u884c\u6703\u7528\u9019\u7a2e\u65b9\u5f0f\u4f86\u8655\u7406\u9867\u5ba2\u7b49\u592a\u4e45\u7684\u554f\u984c\u3002\u4f60\u60f3\u50cf\u4e00\u4e0b\uff0c\u6bcf\u6b21\u9032\u53bb\u9280\u884c\u8655\u7406\u696d\u52d9\uff0c\u5c31\u6709\u500b\u4fdd\u9463\u5728\u65c1\u908a\u8a08\u6642\u6aa2\u67e5\uff0c\u7576\u8d85\u904e\u4e00\u79d2\u9418\u5f8c\u5c31\u628a\u4f60\u5f37\u5236\u8e22\u51fa\uff0c\u9019\u7a2e\u53ef\u80fd\u8b93\u6b63\u5e38\u64cd\u4f5c\u7684\u9867\u5ba2\u8b8a\u5f97\u60f1\u706b\u7684\u884c\u70ba\uff0c\u61c9\u8a72\u662f\u5728\u53ef\u9810\u898b\u7684\u672a\u4f86\u4e2d\u90fd\u4e0d\u6703\u51fa\u73fe\u7684\u653f\u7b56\u3002
\u807d\u8d77\u4f86\u5f88\u53ef\u7b11\uff0c\u4f46\u9019\u537b\u5be6\u4f5c\u5728\u6211\u5011\u5f88\u591a\u7684\u7db2\u8def\u670d\u52d9\u4e2d\u3002
"},{"location":"feedback/adaptive-concurrency/#api-management","title":"API Management","text":"\u73fe\u5728\u6211\u5011\u628a\u5834\u666f\u56de\u5230\u7db2\u8def\u670d\u52d9\u4e2d\uff0c\u9019\u88e1\u6709\u500b\u5f88\u597d\u7684\u4f8b\u5b50\uff0cAPI Management\uff08APIM\uff09\u3002\u5b83\u7684\u5b9a\u4f4d\u662f\u627f\u63a5\u5404\u500b\u5f8c\u53f0\u670d\u52d9\u7684\u4e2d\u7e7c\u7ad9\uff0c\u8209\u4f8b\u4f86\u8aaa\u524d\u7aef\u4f7f\u7528\u8005\u5728\u4ed6\u7684\u96fb\u8166\u6309\u4e0b\u8868\u683c\u9001\u51fa\u6642\uff0c\u5f88\u53ef\u80fd\u5c31\u6703\u5148\u7d93\u904e APIM \u518d\u5230\u8655\u7406\u9019\u500b\u8868\u683c\u5546\u52d9\u908f\u8f2f\u7684\u670d\u52d9\u7bc0\u9ede\u4e2d\u3002
\u9019\u500b APIM \u4e0d\u53ea\u662f\u6703\u628a\u6d41\u91cf\u5c0e\u5230\u6307\u5b9a\u7684\u670d\u52d9\u4e2d\uff0c\u4ed6\u4e5f\u9700\u8981\u5e6b\u6211\u5011\u6aa2\u67e5\u4f7f\u7528\u8005\u8eab\u4efd\u3001\u60e1\u610f\u8acb\u6c42\u548c\u9650\u5236\u6d41\u91cf\u3002\u9019\u500b\u89d2\u8272\u6709\u6c92\u6709\u807d\u8d77\u4f86\u50cf\u662f\u5728\u9280\u884c\u4f8b\u5b50\u4e2d\u7684\u4f60\uff1f\u4f60\u7684\u5de5\u4f5c\u5c31\u662f\u6aa2\u67e5\u9867\u5ba2\u8eab\u4efd\u3001\u78ba\u8a8d\u662f\u5426\u60e1\u610f\u3001\u78ba\u8a8d\u521d\u6b65\u9700\u6c42\u5f8c\u518d\u5c0e\u6d41\u5230\u6307\u5b9a\u884c\u54e1\u3002\u63a5\u4e0b\u4f86\u6211\u5011\u770b\u770b APIM \u5373\u5c07\u9762\u81e8\u7684\u4e00\u4e9b\u6311\u6230\uff1a
\u7576\u67d0\u500b\u670d\u52d9\u7684\u8acb\u6c42\u7a81\u7136\u589e\u52a0\uff0c\u6211\u5011\u53ef\u4ee5\u900f\u904e\u9650\u6d41\u6a5f\u5236\uff08Rate Limit\uff0c\u6c92\u932f\u5c31\u662f\u8d85\u7d1a\u4fdd\u9463 \u840a\u7279\u5229\u7c73\u7279\uff09\u4f86\u907f\u514d\u4e0a\u6e38\u548c APIM \u672c\u8eab\u7684\u670d\u52d9\u964d\u8f09\uff0c\u9032\u800c\u5f15\u767c\u5168\u670d\u52d9\u7684\u964d\u8f09\u3002\u5176\u908f\u8f2f\u5927\u81f4\u662f\u7576\u67d0\u500b\u670d\u52d9\u6216\u4f7f\u7528\u8005\u6bcf\u5206\u9418\u7684\u8acb\u6c42\u6578\u8d85\u904e\u4e0a\u9650\uff0c\u5c31\u62d2\u7d55\u63a5\u4e0b\u4f86\u7684\u6240\u6709\u8acb\u6c42\u3002
\u7576\u8acb\u6c42\u7684\u7e3d\u91cf\u7a81\u7136\u589e\u52a0\u6642\uff0c\u6211\u5011\u53ef\u4ee5\u900f\u904e\u81ea\u52d5\u589e\u9577\uff08auto scaling\uff09\u7684\u6a5f\u5236\uff0c\u589e\u52a0 APIM \u7684\u7bc0\u9ede\u6578\u91cf\u3002\u4f46\u662f\u7576\u8acb\u6c42\u589e\u9577\u7684\u901f\u5ea6\u904e\u5feb\u5c31\u53ef\u80fd\u6703\u4f86\u4e0d\u53ca\u589e\u52a0 APIM \u7684\u7bc0\u9ede\u6578\uff0c\u4f8b\u5982\u58de\u6389\u7684\u670d\u52d9\u91cd\u555f\u77ac\u9593\u3002\u5c31\u7b97 APIM \u6709\u81ea\u52d5\u589e\u9577\u7684\u6a5f\u5236\uff0c\u4f46\u5982\u679c\u4e0a\u6e38\u670d\u52d9\u6c92\u6709\u9019\u500b\u6a5f\u5236\uff0c\u5c0d\u65bc\u4e0a\u6e38\u4f86\u8aaa\u7a81\u7136\u589e\u52a0\u7684\u8acb\u6c42\u4ecd\u7136\u6703\u5c0d\u670d\u52d9\u9020\u6210\u50b7\u5bb3\u3002
\u6700\u5f8c\uff0c\u7576\u4e0a\u6e38\u670d\u52d9\u964d\u8f09\u6642\uff0c\u73fe\u6709\u7684\u9650\u6d41\u6a5f\u5236\u6c92\u8fa6\u6cd5\u5feb\u901f\u53cd\u61c9\u9019\u500b\u670d\u52d9\u7684\u5065\u5eb7\u72c0\u6cc1\uff0c\u6b64\u6642\u7684\u9650\u6d41\u5c31\u5982\u540c\u865b\u8a2d\u3002\u8209\u4f8b\u4f86\u8aaa\uff0c\u672c\u4f86\u670d\u52d9\u6bcf\u79d2\u53ef\u4ee5\u63a5\u53d7 100 \u500b\u8acb\u6c42\uff0c\u56e0\u6b64\u5728 APIM \u4e2d\u7684\u8a2d\u5b9a\u4fbf\u9650\u5236\u6bcf\u79d2\u6700\u591a 100 \u500b\u8acb\u6c42\u9001\u904e\u53bb\uff0c\u4f46\u662f\u56e0\u70ba\u670d\u52d9\u958b\u59cb\u964d\u8f09\u4e86\uff08\u4f8b\u5982\u6b63\u5728\u505a\u5783\u573e\u56de\u6536\uff09\uff0c\u6b64\u6642\u5b83\u53ea\u80fd\u627f\u8f09 50 \u500b\u8acb\u6c42\uff0c\u4f46 APIM \u6c92\u8fa6\u6cd5\u611f\u77e5\u5230\u9019\u4ef6\u4e8b\u3002\u6240\u4ee5 APIM \u5c31\u628a\u8d85\u904e 50 \u500b\u8acb\u6c42\u5f80\u4e0a\u6e38\u9001\uff0c\u9020\u6210\u670d\u52d9\u7bc0\u9ede\u8ca0\u8f09\u904e\u91cd\uff0c\u76f4\u63a5\u4e2d\u65b7\u7a0b\u5e8f\u3002
APIM \u4e4b\u6240\u4ee5\u7a31\u70ba API Management\uff0c\u5c31\u662f\u56e0\u70ba\u6211\u5011\u671f\u671b\u4ed6\u80fd\u505a\u5230\u7ba1\u7406 API \u7684\u529f\u80fd\uff0c\u4e0d\u50c5\u50c5\u662f\u8981\u505a\u5230\u9a57\u8b49\u6388\u6b0a\u548c\u5c0e\u6d41\u7684\u529f\u80fd\u3002\u5b83\u4e5f\u8981\u80fd\u907f\u514d\u7d66\u4e88\u4e0a\u6e38\u670d\u52d9\u904e\u591a\u7684\u8acb\u6c42\u5c0e\u81f4\u5176\u670d\u52d9\u5d29\u6f70\uff0c\u5426\u5247\u5c31\u61c9\u8a72\u7a31\u5176\u70ba Auth Proxy \u800c\u975e Management\u3002
"},{"location":"feedback/adaptive-concurrency/#\u8ca0\u8f09\u6e2c\u8a66","title":"\u8ca0\u8f09\u6e2c\u8a66","text":"\u6240\u4ee5\u554f\u984c\u56de\u5230\uff1a\u6211\u8981\u600e\u9ebc\u77e5\u9053\u4e00\u500b\u670d\u52d9\u6bcf\u79d2\u80fd\u627f\u8f09\u7684\u91cf\uff1f\u9019\u500b\u554f\u984c\u807d\u8d77\u4f86\u5f88\u7c21\u55ae\uff0c\u5176\u5be6\u5f88\u8907\u96dc\u3002\u9996\u5148\u6211\u5011\u9700\u8981\u505a\u4e00\u500b\u8ca0\u8f09\u6e2c\u8a66\u78ba\u8a8d\u8a72\u670d\u52d9\u80fd\u627f\u64d4\u7684\u8ca0\u8f09\u3002\u4f46\u662f\u9019\u500b\u6e2c\u8a66\u74b0\u5883\u9700\u8981\u76e1\u53ef\u80fd\u7684\u6e1b\u5c11\u548c\u7dda\u4e0a\u74b0\u5883\u7684\u5dee\u7570\uff0c\u4f8b\u5982\u672c\u5730\u7aef\u5e38\u99d0\u7a0b\u5e8f\uff08daemon\uff09\u7684\u5dee\u7570\u3001\u61c9\u7528\u7a0b\u5f0f\u7684\u8a2d\u5b9a\u5dee\u7570\u3001\u7db2\u8def\u74b0\u5883\u7684\u5dee\u7570\u3002\u518d\u4f86\u9084\u6709\uff0c\u6e2c\u8a66\u6642\u662f\u5728\u540c\u4e00\u53f0\u96fb\u8166\u9084\u662f\u62ff\u591a\u53f0\u96fb\u8166\u4e00\u8d77\u767c\u9001\u4e26\u884c\u8acb\u6c42\uff1f\uff0c\u9019\u4e9b\u8acb\u6c42\u7684\u9023\u7dda\u662f\u5426\u9700\u8981 keep alive \uff1f\u6bcf\u500b\u8acb\u6c42\u7684\u916c\u8f09\uff08payload\uff09\u90fd\u8981\u6709\u5dee\u7570\u55ce\uff1f\u6700\u5f8c\u662f\u61c9\u7528\u7a0b\u5f0f\u672c\u8eab\u8981\u6e2c\u54ea\u4e9b\u529f\u80fd\uff1f\u6709\u4e9b\u529f\u80fd\u6703\u9700\u8981\u8dd1\u7d04 10 \u79d2\uff0c\u6709\u4e9b\u537b\u662f\u55ae\u7d14\u7684\u8acb\u6c42\u6545\u50c5\u9700 30 \u6beb\u79d2\u5c31\u6703\u56de\u61c9\uff0c\u9019\u4ee3\u8868\u4e0d\u540c\u7684\u529f\u80fd\u6709\u4e0d\u540c\u80fd\u627f\u8f09\u7684\u91cf\u3002
\u5728\u6e2c\u8a66\u6642\u4e5f\u9700\u8981\u6ce8\u610f\u4e26\u884c\u8acb\u6c42\u6578\u4e0a\u5347\u6642\uff0c\u670d\u52d9\u7684\u901a\u91cf\u4e26\u4e0d\u6703\u7dad\u6301\u5728\u6700\u9ad8\u6c34\u5e73\uff0c\u800c\u662f\u6703\u958b\u59cb\u9032\u5165\u9000\u5316\u671f\uff08degradation\uff09\uff0c\u9019\u6642\u6211\u5011\u8981\u627e\u7684\u300c\u670d\u52d9\u6bcf\u79d2\u80fd\u627f\u8f09\u7684\u91cf\u300d\u5c31\u6703\u662f\u5728\u9019\u500b\u66f2\u7dda\u7684\u6700\u9ad8\u9ede\u3002\u6240\u4ee5\u5728\u6e2c\u8a66\u6642\u4e0d\u80fd\u4e00\u6627\u7684\u589e\u52a0\u4e26\u884c\u8acb\u6c42\u7684\u6578\u91cf\u7136\u5f8c\u8a08\u7b97\u6f5b\u4f0f\uff08latency\uff09\uff0c\u800c\u662f\u8981\u8a08\u7b97\u901a\u91cf\u548c\u4e26\u884c\u8acb\u6c42\u6578\u7684\u5e73\u9762\u5716\uff0c\u4e26\u540c\u6642\u8a08\u7b97\u51fa\u9019\u500b\u670d\u52d9\u7684\u5bb9\u91cf\uff0c\u624d\u80fd\u5f97\u51fa\u9ad8\u8acb\u6c42\u91cf\u6642\u670d\u52d9\u6240\u8868\u73fe\u7684\u884c\u70ba\u3002
\u5bb9\u91cf\u548c\u901a\u91cf\u662f\u4ec0\u9ebc\uff1f\u5bb9\u91cf\uff08capacity\uff09\u548c\u901a\u91cf\uff08throughput\uff09\u5e38\u5e38\u88ab\u641e\u6df7\uff0c\u4f46\u9019\u5169\u8005\u662f\u5b8c\u5168\u4e0d\u540c\u7684\u6771\u897f\u3002\u5bb9\u91cf\u662f\u6c92\u6709\u6642\u9593\u6982\u5ff5\u7684\uff0c\u4ee3\u8868\u4e00\u500b\u670d\u52d9\u80fd\u627f\u8f09\u7684\u7e3d\u91cf\uff0c\u901a\u91cf\u662f\u6709\u6642\u9593\u6982\u5ff5\u7684\uff0c\u4ee3\u8868\u4e00\u500b\u670d\u52d9\u6bcf\u79d2\u80fd\u8655\u7406\u8acb\u6c42\u7684\u91cf\u3002
\u8209\u4f8b\u4f86\u8aaa\uff0c\u5047\u8a2d\u4e00\u500b\u670d\u52d9\u7684\u5bb9\u91cf\u662f \\(200\\; req\\)\uff0c\u901a\u91cf\u662f \\(100\\; req/s\\)\uff0c\u7576\u6bcf\u79d2\u6709 50 \u500b\u8acb\u6c42\u6253\u9032\u9019\u500b\u670d\u52d9\uff0c\u6beb\u7121\u7591\u554f\u9019\u670d\u52d9\u53ef\u4ee5\u627f\u8f09\u9019\u500b\u91cf\uff0c\u56e0\u70ba\u6839\u64da\u5176\u901a\u91cf\u6211\u5011\u77e5\u9053\u5b83\u6bcf\u79d2\u53ef\u4ee5\u8655\u7406 100 \u500b\u8acb\u6c42\uff0c\u6240\u4ee5\u5373\u4f7f\u73fe\u5728\u6bcf\u79d2\u6709 100 \u500b\u8acb\u6c42\uff0c\u4ed6\u4e5f\u8981\u80fd\u8655\u7406\u3002\u554f\u984c\u662f\u7576\u73fe\u5728\u6bcf\u79d2\u6709 150 \u500b\u8acb\u6c42\u6642\uff0c\u9019\u500b\u670d\u52d9\u6703\u6709\u4ec0\u9ebc\u6a23\u7684\u884c\u70ba\u6a21\u5f0f\uff1f\u9996\u5148\u4e00\u958b\u59cb\u6703\u6709 150 \u500b\u8acb\u6c42\u9001\u9032\u670d\u52d9\u88e1\uff0c\u9019\u500b\u670d\u52d9\u90fd\u80fd\u63a5\u53d7\u9019\u4e9b\u8acb\u6c42\uff0c\u56e0\u70ba\u4ed6\u7684\u5bb9\u91cf\u662f 200\uff0c\u4f46\u662f\u56e0\u70ba\u901a\u91cf\u662f 100\uff0c\u6240\u4ee5\u7b2c\u4e00\u79d2\u904e\u5f8c\u53ea\u80fd\u6d88\u5316\u6389\u5176\u4e2d\u7684 100 \u500b\u8acb\u6c42\uff0c\u5b83\u809a\u5b50\u88e1\u4ecd\u7136\u6709 50 \u500b\u8acb\u6c42\u672a\u6d88\u5316\u3002\u9019\u6642\u4f86\u5230\u4e0b\u4e00\u79d2\uff08\u7b2c\u4e8c\u79d2\uff09\uff0c\u56e0\u70ba\u53c8\u6709 150 \u500b\u8acb\u6c42\u8fd1\u4f86\uff0c\u6240\u4ee5\u809a\u5b50\u88e1\u7e3d\u8a08\u6709 200 \u500b\u8acb\u6c42\uff0c\u9019\u4e5f\u53ef\u4ee5\u88ab\u63a5\u53d7\uff0c\u56e0\u70ba\u5bb9\u91cf\u662f 200\uff0c\u7d93\u904e\u4e00\u79d2\u6d88\u5316\u5f8c\uff0c\u73fe\u5728\u809a\u5b50\u88e1\u5269\u4e0b 100 \u500b\u8acb\u6c42\u3002\u7576\u53c8\u4f86\u5230\u4e0b\u4e00\u79d2\uff08\u7b2c\u4e09\u79d2\uff09\u6642\uff0c\u5c31\u6703\u6709 250 \u500b\u8acb\u6c42\uff0c\u9019\u6642\u670d\u52d9\u56e0\u70ba\u5bb9\u91cf\u4e0d\u5920\u800c\u62d2\u7d55\u591a\u51fa\u4f86\u7684 50 \u500b\u8acb\u6c42\u3002
\u9019\u6a23\u5bb9\u91cf\u5927\u6709\u4ec0\u9ebc\u597d\u8655\uff1f\u56e0\u70ba\u8acb\u6c42\u7684\u6578\u91cf\u662f\u4e0d\u7a69\u7684\uff0c\u53ef\u80fd\u6bcf\u79d2 10 \u500b\u4e5f\u53ef\u80fd\u7a81\u7136\u6bcf\u79d2 150 \u500b\uff0c\u6240\u4ee5\u9ad8\u5bb9\u91cf\u4ee3\u8868\u4ed6\u80fd\u5bb9\u8a31\u9019\u4e9b\u5dee\u7570\uff0c\u4f46\u662f\u771f\u6b63\u8655\u7406\u8acb\u6c42\u7684\u6548\u7387\u9084\u662f\u8981\u770b\u901a\u91cf\u3002
"},{"location":"feedback/adaptive-concurrency/#\u58c5\u585e\u63a7\u5236","title":"\u58c5\u585e\u63a7\u5236","text":"\u8ca0\u8f09\u6e2c\u8a66\u807d\u8d77\u4f86\u8981\u6ce8\u610f\u5f88\u591a\u7709\u7709\u89d2\u89d2\uff0c\u9019\u6a23\u6211\u5011\u6709\u6c92\u6709\u4e00\u500b\u81ea\u52d5\u5316\u7684\u6a5f\u5236\u5462\uff1f\u9019\u6642\u5c31\u6703\u63d0\u5230\u81ea\u52d5\u5316\u8655\u7406\u58c5\u585e\u7684\u63a7\u5236\u7cfb\u7d71\uff0c\u6216\u8005\u7a31\u58c5\u585e\u63a7\u5236\uff08congestion avoidance control\uff09\u3002\u76f8\u95dc\u8ad6\u6587\u59cb\u65bc 1988 \u5e74\uff0c\u800c\u6700\u4e00\u958b\u59cb\u61c9\u7528\u7684\u5730\u65b9\u5c31\u5982\u524d\u8a00\u6240\u8ff0\uff0c\u662f\u5728 TCP \u5354\u5b9a\u4e2d\u3002
\u96a8\u8457\u8a72\u63a7\u5236\u6f14\u7b97\u6cd5\u7684\u512a\u52e2\u986f\u73fe\u51fa\u4f86\uff0c\u958b\u59cb\u51fa\u73fe\u4e00\u4e9b\u76f8\u95dc\u7684\u512a\u5316\u548c\u8a2d\u8a08\uff0c\u4f8b\u5982 1995 \u5e74\u7684 Vegas\u30012002 \u5e74\u7684 AIMD-FC\u30012004 \u5e74\u7684 BIC \u7b49\u7b49\u5404\u7a2e\u6f14\u7b97\u6cd5\u3002\u7136\u800c\u9019\u6a23\u4e00\u500b\u7a31\u4e0d\u4e0a\u6700\u65b0\u7684\u9818\u57df\u70ba\u4ec0\u9ebc\u53c8\u91cd\u65b0\u6d6e\u51fa\u6c34\u9762\u4e86\u5462\uff1f\u9019\u662f\u56e0\u70ba\u9019\u500b\u6771\u897f\u53ef\u4ee5\u5f88\u597d\u7684\u89e3\u6c7a\u6211\u5011\u4e0a\u9762\u63d0\u5230 APIM \u7684\u8acb\u6c42\u7ba1\u7406\u554f\u984c\u3002
\u6709\u54ea\u4e9b\u4ee3\u7406\u4f3a\u670d\u5668\u5df2\u7d93\u9810\u8a2d\u652f\u63f4\u96cd\u585e\u63a7\u5236\u4e86\u5462\uff1f\u4e26\u4e0d\u662f\u6bcf\u500b\u4ee3\u7406\u4f3a\u670d\u5668\uff08proxy\uff09\u90fd\u9810\u8a2d\u652f\u63f4\uff0c\u4f8b\u5982 Nginx\uff08community version\uff09\u3001HAProxy \u9810\u8a2d\u90fd\u6c92\u6709\u652f\u63f4\uff0c\u9700\u8981\u984d\u5916\u88dd\u4e00\u4e9b\u5916\u639b\uff0c\u4f8b\u5982 Nginx \u9700\u8981\u5b89\u88dd lua \u7684\u5916\u639b\u5f8c\u4f7f\u7528\u76f8\u95dc\u7684\u5957\u4ef6\uff0c\u9019\u4e5f\u662f\u672c\u7bc7\u7684\u4e3b\u8981\u5be6\u4f5c\u3002\u76f8\u5c0d\u800c\u8a00\u8f03\u65b0\u7684 Envoy \u548c Vector\uff08\u96d6\u7136\u4ed6\u4e0d\u662f\u4ee3\u7406\u4f3a\u670d\u5668\uff0c\u4f46\u662f\u5728\u8cc7\u6599\u57fa\u790e\u8a2d\u65bd\u4e2d\u626e\u6f14\u8457\u985e\u4f3c\u7684\u89d2\u8272\uff09\u90fd\u6709\u652f\u63f4\u3002
\u51fa\u4e4e\u610f\u6599\u5730\uff0c\u4e0a\u9762\u63d0\u5230\u7684\u5f88\u591a\u6f14\u7b97\u6cd5\uff0c\u548c\u8ca0\u8f09\u6e2c\u8a66\u7684\u7709\u7709\u89d2\u89d2\u7adf\u80fd\u900f\u904e\u4e00\u500b\u7c21\u55ae\u516c\u5f0f\u6b78\u7d0d\u8d77\u4f86\uff01\u9019\u500b\u516c\u5f0f\u5c31\u662f 1954 \u5e74\u5229\u7279\u723e\u63d0\u51fa\u7684\u5229\u7279\u723e\u6cd5\u5247\u3002
... This relationship is covered very nicely with Little's Law Netflix - concurrency-limit
"},{"location":"feedback/adaptive-concurrency/#\u5229\u7279\u723e\u6cd5\u5247","title":"\u5229\u7279\u723e\u6cd5\u5247","text":"\u5229\u7279\u723e\u6cd5\u5247\uff08Little's law\uff09\u65bc 1954 \u5e74\u5229\u7279\u723e\u63d0\u51fa\u3002\u6211\u5011\u56de\u5230\u4e00\u958b\u59cb\u9280\u884c\u7684\u4f8b\u5b50\uff0c\u5982\u679c\u6211\u73fe\u5728\u60f3\u8981\u8a2d\u8a08\u9280\u884c\u7684\u6905\u5b50\u6578\u91cf\u6216\u8005\u5927\u5ef3\u63d0\u4f9b\u4eba\u7b49\u5f85\u7684\u7a7a\u9593\u5927\u5c0f\u6642\uff0c\u5c31\u8981\u601d\u8003\u300c\u9280\u884c\u5e73\u5747\u6703\u6709\u5e7e\u500b\u9867\u5ba2\u5728\u88e1\u9762\u300d\u9019\u500b\u554f\u984c\uff0c\u9019\u6642\u5c31\u53ef\u4ee5\u4f7f\u7528\u5229\u7279\u723e\u900f\u904e\u7cbe\u5999\u7684\u63a8\u5c0e\u5f97\u51fa\u7684\u9019\u500b\u6cd5\u5247\u3002\u5047\u8a2d\u9280\u884c\u6bcf\u5c0f\u6642\u5e73\u5747\u9032\u4f86\u7684\u4eba\u6578\u6709 30 \u500b\u4eba\uff08\\(30\\; p/hr\\)\uff09\u800c\u6bcf\u500b\u4eba\u7b49\u5f85\u52a0\u8655\u7406\u696d\u52d9\u7684\u5e73\u5747\u6642\u9593\u662f 6 \u5206\u9418\uff08\u4e5f\u5c31\u662f 0.1 \u500b\u5c0f\u6642\uff0c\\(0.1\\; hr\\)\uff09\u9019\u6a23\u6211\u5011\u5c31\u53ef\u4ee5\u7b97\u51fa\u5e73\u5747\u7684\u9867\u5ba2\u4eba\u6578\u70ba \\(30\\; p/hr \\times 0.1\\; hr = 3\\; p\\)\uff0c\u4e09\u500b\u4eba\u3002\u6240\u4ee5\u6211\u5011\u53ea\u9700\u8981\u6e96\u5099\u4e09\u5f35\u6905\u5b50\u5c31\u53ef\u4ee5\u8b93\u5728\u9280\u884c\u7684\u4eba\u90fd\u80fd\u5f97\u5230\u4f4d\u5b50\u5750\uff08\u81f3\u5c11\u6a5f\u7387\u4e0a\u4f86\u8aaa\u662f\u9019\u6a23\uff09\u3002
\u6211\u5011\u518d\u770b\u770b\u4e00\u500b\u4f8b\u5b50\uff0c\u5009\u5132\u4e2d\u5fc3\u60f3\u8981\u77e5\u9053\u300c\u5009\u5eab\u8981\u591a\u5927\u4f86\u5b58\u653e\u9019\u4e9b\u8ca8\u54c1\u300d\uff0c\u6240\u4ee5\u4ed6\u958b\u59cb\u8a08\u7b97\u6bcf\u5929\u5e73\u5747\u9001\u9032\u4f86\u7684\u8ca8\u54c1\u6578\u548c\u6bcf\u4ef6\u8ca8\u7269\u5e73\u5747\u8981\u653e\u591a\u4e45\u624d\u6703\u88ab\u9001\u51fa\uff0c\u4e26\u5f97\u51fa\u6709\u6bcf\u5929\u6709 100 \u4ef6\u8ca8\u54c1\u9032\u4f86\u4e14\u6bcf\u4ef6\u8ca8\u54c1\u8981\u5b58\u653e\u4e09\u5929\u624d\u6703\u88ab\u9001\u51fa\uff0c\u9019\u6642\u6211\u5011\u5c31\u77e5\u9053\u9019\u500b\u5009\u5eab\u8981\u53ef\u4ee5\u653e 300 \u4ef6\u8ca8\u54c1\u624d\u5920\u5927\u3002\u9019\u500b\u8a08\u7b97\u4ee3\u8868\u4e86\u4ec0\u9ebc\uff1f\u5373\u4f7f\u5728\u8a08\u7b97\u9019\u500b\u975e\u5e38\u62bd\u8c61\u7684\u7d50\u679c\u300c\u6211\u9700\u8981\u591a\u5927\u7684\u5009\u5eab\u300d\u6642\uff0c\u6211\u50c5\u50c5\u9700\u8981\u5169\u500b\u53c3\u6578\u5c31\u53ef\u4ee5\u5b8c\u6210\u8a08\u7b97\uff0c\u4e26\u4e14\u4e0d\u53d7\u5230\u8ca8\u6d41\u7a0b\u5206\u914d\u3001\u670d\u52d9\u5206\u914d\u3001\u670d\u52d9\u9806\u5e8f\uff0c\u6216\u4efb\u4f55\u5176\u4ed6\u56e0\u7d20\u5f71\u97ff\uff0c\u53b2\u5bb3\u5427\uff1f
"},{"location":"feedback/adaptive-concurrency/#\u7db2\u8def\u670d\u52d9\u7684\u5229\u7279\u723e\u6cd5\u5247","title":"\u7db2\u8def\u670d\u52d9\u7684\u5229\u7279\u723e\u6cd5\u5247","text":"\u6211\u5011\u628a\u4f8b\u5b50\u653e\u56de\u7db2\u8def\u670d\u52d9\u4e2d\uff0c\u7576\u6211\u5011\u60f3\u77e5\u9053\u9019\u500b\u670d\u52d9\u80fd\u4e0d\u80fd\u8655\u7406\u9019\u500b\u8acb\u6c42\u91cf\uff0c\u6211\u5011\u5c31\u53ef\u4ee5\u958b\u59cb\u5957\u7528\u5229\u7279\u723e\u6cd5\u5247\u3002
\\(L\\) \u4ee3\u8868\u5e73\u5747\u8acb\u6c42\u91cf\uff0c\\(\\lambda\\) \u4ee3\u8868\u8acb\u6c42\u7387\uff0c\\(W\\) \u4ee3\u8868\u57f7\u884c\u6642\u9593\u3002
\u6c92\u8fa6\u6cd5\u60f3\u50cf\uff1f\u6c92\u95dc\u4fc2\uff0c\u6211\u5011\u4f86\u5be6\u4f5c\u3002
\u8acb\u5148\u5230 playground-adaptive-concurrency\uff0c\u7167\u8457 README \u64cd\u4f5c\uff0c\u628a\u670d\u52d9\u555f\u52d5\u8d77\u4f86\u3002
"},{"location":"feedback/adaptive-concurrency/#\u5be6\u4f5c\u4e00","title":"\u5be6\u4f5c\u4e00","text":"\u6bcf\u79d2 15 \u500b\u8acb\u6c42\u4e14\u6bcf\u500b\u8acb\u6c42 500 \u6beb\u79d2\u5f8c\u57f7\u884c\u5b8c\u6210\u3002
node src/client.js --wait 500 --rate 15 --duration 120 --port 8080\n
\u5716\u7684\u4e0a\u534a\u90e8\u662f\u8acb\u6c42\u7684\u6578\u91cf\u5206\u4f48\uff0c\u7531\u65bc\u6bcf\u79d2\u9418\u6703\u6709 15 \u500b\u8acb\u6c42\uff0c\u6240\u4ee5\u7e3d\u91cf\u6703\u7dad\u6301\u5728 15 \u500b\u3002\u6b63\u5728\u8655\u7406\uff08in-flight\uff09\u7684\u8acb\u6c42\u6703\u4e00\u76f4\u7dad\u6301\u5728 10 \u500b\uff08\u6839\u64da\u8a2d\u5b9a\uff0c\u4e00\u500b server \u6700\u591a\u53ea\u80fd\u540c\u6642\u8655\u7406 10 \u500b\u8acb\u6c42\uff09\uff0c\u800c pending \u7684\u6578\u91cf\u6703\u7dad\u6301\u5728 5 \u500b\u3002\u6703\u770b\u5230 pending \u7684\u6578\u91cf\u6296\u52d5\u662f\u56e0\u70ba\u5728\u505a metrics \u7684\u6642\u5019\u662f\u6bcf 0.5 \u79d2\u8f38\u51fa\u4e00\u6b21\uff0c\u6709\u6642\u904e\u4e86 0.5 \u79d2\u5f8c\u6240\u6709\u7684\u8acb\u6c42\u90fd\u8655\u7406\u5b8c\u4e86\uff08\u56e0\u70ba\u6709 jitter\uff09\uff0c\u6240\u4ee5\u5c31\u6703\u986f\u793a\u8b8a\u52d5\u7684 pending \u6578\u91cf\u3002\u5716\u4e2d\u7684\u5de6\u4e0b\u89d2\u4ee3\u8868 server \u6bcf\u79d2\u8655\u7406\u7684\u8acb\u6c42\u6578\u91cf\uff0c\u4e5f\u5c31\u662f\u901a\u91cf\uff08throughput\uff09\u3002\u53f3\u4e0b\u89d2\u662f\u5e73\u5747\u7684\u6f5b\u6642\uff0c10 \u500b\u8acb\u6c42\u9700\u8017\u6642 500ms\uff0c5 \u500b\u8acb\u6c42\u9700\u8017\u6642 1000ms\uff0c\u6545\u800c \\(\\left ( 10 \\times 500 + 5 \\times 1000 \\right )/15 \\approx 667\\; ms\\)\u3002
\u7528\u62fc\u5716\u7684\u65b9\u5f0f\u4f86\u5448\u73fe\u8acb\u6c42\u7684\u72c0\u614b\u5c31\u6703\u5982\u4e0b\u5716\uff1a
\u9019\u500b\u7d50\u679c\u61c9\u8a72\u662f\u53ef\u4ee5\u60f3\u50cf\u7684\uff0c\u4f46\u662f\u4e0b\u4e00\u500b\u5be6\u4f5c\u5462\uff1f
"},{"location":"feedback/adaptive-concurrency/#\u5be6\u4f5c\u4e8c","title":"\u5be6\u4f5c\u4e8c","text":"\u6bcf\u79d2 15 \u500b\u8acb\u6c42\u4e14\u6bcf\u500b\u8acb\u6c42 600 \u6beb\u79d2\u5f8c\u57f7\u884c\u5b8c\u6210\u3002
node src/client.js --wait 600 --rate 15 --duration 120 --port 8080\n
\u5728\u958b\u59cb\u524d\uff0c\u4f60\u53ef\u4ee5\u8a66\u8457\u56de\u7b54\u9019\u500b\u554f\u984c\uff1a\u73fe\u5728\u61c9\u7528\u7a0b\u5f0f\u80fd\u670d\u52d9\u9019\u500b\u91cf\u7684\u8acb\u6c42\u55ce\uff1f
\u8ddf\u4f60\u60f3\u7684\u4e00\u6a23\u55ce\uff1f\u5373\u4f7f\u8acb\u6c42\u4f86\u5230 600 \u6beb\u79d2\uff0c\u9019\u500b\u670d\u52d9\u4e5f\u80fd\u8655\u7406\uff01\u9019\u807d\u8d77\u4f86\u6709\u9ede\u9055\u53cd\u76f4\u89ba\uff0c\u56e0\u70ba\u591a\u51fa\u4f86\u7684 100 \u6beb\u79d2\u597d\u50cf\u6703\u9010\u6f38\u7d2f\u7a4d\uff0c\u6700\u5f8c\u5c0e\u81f4\u670d\u52d9\u4f86\u4e0d\u53ca\u8655\u7406\u3002\u4f46\u5176\u5be6\u6211\u5011\u7167\u4e0a\u9762\u628a\u8acb\u6c42\u7528\u62fc\u5716\u7684\u65b9\u5f0f\u756b\u51fa\u4f86\u5c31\u80fd\u77e5\u9053\u5be6\u969b\u600e\u9ebc\u904b\u4f5c\u7684\u3002
\u7531\u4e0a\u5716\u5c31\u53ef\u4ee5\u77e5\u9053\u96a8\u8457\u6642\u9593\u9032\u884c\uff0c\u8acb\u6c42\u8655\u7406\u7684\u6a21\u5f0f\u5c31\u6703\u4e00\u76f4\u5faa\u74b0\u4e0b\u53bb\uff0c\u7559\u4e0b\u4e2d\u9593 200 ms\uff08\\(2000 - 600 \\times 3 = 200\\; ms\\)\uff09\u7684\u7a7a\u767d\u3002
\u9019\u6a23\u6bcf\u6b21\u6211\u5728\u7b97\u670d\u52d9\u80fd\u8655\u7406\u7684\u91cf\u90fd\u9700\u8981\u756b\u9019\u500b\u62fc\u5716\u55ce\uff1f\u4e0d\u8981\u5fd8\u4e86\uff0c\u6211\u5011\u9084\u6709\u5229\u7279\u723e\u6cd5\u5247\uff01\u7576\u6211\u5011\u628a\u6578\u503c\u5e36\u9032\u516c\u5f0f\u88e1\u5c31\u6703\u767c\u73fe\u751f\u547d\u7684\u7f8e\u597d\uff01\\(L = \\lambda \\times W = 15\\; req/s \\times 0.6\\; s = 9\\; req\\)\uff0c\u6240\u4ee5\u5982\u679c\u6211\u5011\u7684\u61c9\u7528\u7a0b\u5f0f\u64c1\u6709\u5927\u65bc 9 \u7684\u5bb9\u91cf\uff08capacity\uff09\uff0c\u6211\u5c31\u80fd\u8655\u7406\u9019\u500b\u6f5b\u6642\uff08latency\uff09\u7684\u8acb\u6c42\u3002\u5404\u4f4d\u4e5f\u53ef\u4ee5\u8a66\u8457\u7b97\u4e00\u4e0b\u53f3\u4e0b\u89d2\u7684\u300cServer latency\u300d\u70ba\u4ec0\u9ebc\u6703\u7dad\u6301\u5728 0.88 \u79d2\u5de6\u53f3\u3002
"},{"location":"feedback/adaptive-concurrency/#\u5be6\u4f5c\u4e09","title":"\u5be6\u4f5c\u4e09","text":"\u6bcf\u79d2 15 \u500b\u8acb\u6c42\u4e14\u6bcf\u500b\u8acb\u6c42 700 \u6beb\u79d2\u5f8c\u57f7\u884c\u5b8c\u6210\u3002
node src/client.js --wait 700 --rate 15 --duration 120 --port 8080\n
\u6211\u5011\u5728\u958b\u59cb\u524d\u5c31\u53ef\u4ee5\u8a66\u8457\u7528\u5229\u7279\u723e\u6cd5\u5247\u7b97\u4e00\u4e0b\u9019\u6a23\u670d\u52d9\u80fd\u4e0d\u80fd\u627f\u8f09\uff0c\u8981\u6ce8\u610f server \u53ea\u80fd\u627f\u8f09 10 \u500b\u8acb\u6c42\u7684\u91cf\uff0c\u63db\u53e5\u8a71\u8aaa\u4ed6\u7684\u5bb9\u91cf\u53ea\u6709 10\uff0c\u7576\u8acb\u6c42\u6578\u8d85\u904e 10 \u5c31\u6703\u8b93\u8acb\u6c42 pending\u3002
\\(15 \\times 0.7 = 11.5\\; req\\)\uff0c\u7531\u6b64\u53ef\u77e5\u56e0\u70ba\u4ed6\u8d85\u904e\u670d\u52d9\u7684\u5bb9\u91cf\uff0c\u6240\u4ee5\u5c31\u6703\u958b\u59cb\u8b93\u8acb\u6c42\u5ef6\u5b95\uff08pending\uff09\uff0c\u4e26\u7b49\u5f85\u6709\u80fd\u529b\u6642\u518d\u505a\u904b\u7b97\uff0c\u6700\u5f8c Nginx \u7b49\u592a\u4e45\uff0c\u51fa\u73fe timeout \u7684\u8acb\u6c42\uff0c\u4e26\u56de\u61c9 504\u3002
\u9019\u88e1\u7684\u5716\u5c31\u9700\u8981\u597d\u597d\u89e3\u91cb\u4e00\u4e0b\u4e86\uff0c\u9996\u5148\u770b\u4e0a\u9762 server \u7684\u8655\u7406\u72c0\u6cc1\uff0c\u56e0\u70ba\u9084\u6c92\u8655\u7406\u597d\u4e0a\u4e00\u79d2\u7684\u8acb\u6c42\uff0c\u53c8\u63a5\u8457\u4f86\u4e86\u4e0b\u4e00\u79d2\u7684\u8acb\u6c42\uff0c\u6240\u4ee5 pending \u7684\u8acb\u6c42\u6578\u5c31\u6703\u958b\u59cb\u7121\u6b62\u5883\u7684\u7d2f\u7a4d\u3002\u5728\u5de6\u4e0b\u89d2\u7684 client \u7684\u89d2\u5ea6\uff0c\u5c31\u6703\u767c\u73fe\u7576\u5230\u4e86 10:15:50
HTTP 200 \u7684\u8acb\u6c42\u958b\u59cb\u6e1b\u5c11\uff0c\u53d6\u800c\u4ee3\u4e4b\u7684\u662f Nginx \u56de\u7684 504 Timeout\uff0c\u4e14\u9019\u500b\u904e\u7a0b\u662f\u6f38\u9032\u7684\u3002\u9019\u662f\u56e0\u70ba\u5728\u904e\u7a0b\u4e2d\u4ecd\u7136\u6709\u8acb\u6c42\u5728 4 \u79d2\u5167\u56de\u61c9\u8acb\u6c42\uff08pending \u8f49\u5230 in-flight \u4e26\u82b1 0.7 \u79d2\u8655\u7406\u5b8c\u6210\uff09\uff0c\u4f46\u662f\u7576\u8d85\u904e\u81e8\u754c\u9ede\u6642\uff0c\u4e5f\u5c31\u662f\u6240\u6709\u8acb\u6c42\u90fd\u9700\u8981\u57f7\u884c\u8d85\u904e 4 \u79d2\u6642\uff0cclient \u5c31\u6703\u6536\u5230\u6240\u6709\u7684\u8acb\u6c42\u7686\u70ba 504\uff0c\u540c\u4e00\u6642\u9593\u6211\u5011\u53ef\u4ee5\u770b\u53f3\u4e0b\u89d2\u7684\u5716\u4f86\u9a57\u8b49\u5e73\u5747\u6f5b\u6642\u6b63\u9010\u6b65\u5f80 4 \u79d2\u9760\u8fd1\u3002\u7576\u5230\u4e86 10:17:05
\u6642\uff0c\u6211\u5011\u518d\u56de\u5230 server \u7684\u89d2\u5ea6\uff0c\u56e0\u70ba\u5169\u5206\u9418\uff08120 \u79d2\uff09\u904e\u53bb\u4e86\uff0cclient \u4e0d\u518d\u9001\u8acb\u6c42\u904e\u4f86\u6642\uff0c\u4ed6\u5c31\u80fd\u9010\u6b65\u628a\u809a\u5b50\u4e2d\u7684\u8acb\u6c42\u6d88\u5316\u4e0b\u4f86\uff0c\u56e0\u800c pending \u7684\u8acb\u6c42\u6578\u958b\u59cb\u9a5f\u964d\u3002
\u63a5\u8457\u6211\u5011\u4f86\u7b97\u4e00\u4e0b\u5de6\u4e0b\u89d2\u4e2d\u6de1\u85cd\u8272\u7684\u7dda\uff08HTTP 200 \u6bcf\u79d2\u7684\u8acb\u6c42\u6578\u4e26\u6bcf\u5341\u79d2\u5e73\u5747\u4e00\u6b21\uff09\uff0cserver \u7684\u901a\u91cf\u5728\u9ad8\u5cf0\u6642\u5e73\u5747\u4f86\u8aaa\u662f\u591a\u5c11\uff08\u4e5f\u5c31\u662f 10:15:10
\u5230 10:15:45
\u4e4b\u9593\uff09\uff1f\u9019\u6642\u5c31\u662f\u628a\u5229\u7279\u723e\u6cd5\u5247\u63db\u4e00\u4e0b\uff1a\\(\\lambda = L / W = 10 / 0.7 \\approx 14.3\\)\uff0c\u53cd\u904e\u4f86\u8aaa\uff0c\u5982\u679c\u6211\u8981\u6c42\u9019\u500b\u670d\u52d9\u8981\u80fd\u6bcf\u79d2\u8655\u7406 15 \u500b\u8acb\u6c42\uff0c\u9019\u6642\u9700\u8981\u8b93\u6bcf\u500b\u8acb\u6c42\u58d3\u5728\u5e7e\u79d2\u5167\u5b8c\u6210\uff1f\\(W = L / \\lambda = 10 / 15 \\approx 0.67\\)\uff0c\u4e5f\u5c31\u662f\u5982\u679c\u8acb\u6c42\u5728 0.67 \u79d2\u5167\u5b8c\u6210\uff0c\u4ed6\u5c31\u4e0d\u6703\u8b93\u8acb\u6c42\u958b\u59cb\u96cd\u585e\u4e26\u5806\u7a4d\uff0c\u611f\u53d7\u5230\u5229\u7279\u723e\u6cd5\u5247\u7684\u65b9\u4fbf\u4e86\u55ce\uff01
\u6709\u4e86\u5229\u7279\u723e\u6cd5\u5247\uff0c\u7576\u6211\u5011\u628a\u300c\u5e73\u5747\u8acb\u6c42\u91cf\u300d\u8a2d\u70ba\u63a7\u5236\u8b8a\u56e0\uff08\u4ee5\u4e0a\u9762\u5be6\u4f5c\u70ba\u4f8b\u5c31\u662f 10\uff09\uff0c\u6211\u5011\u5c31\u53ef\u4ee5\u77e5\u9053\u7576\u6f5b\u6642\uff08latency\uff09\u4e0a\u5347\uff0c\u670d\u52d9\u7684\u901a\u91cf\uff08throughput\uff09\u5c31\u6703\u964d\u4f4e\u3002\u6545\u800c\u8eab\u70ba APIM\uff0c\u6211\u5011\u5c31\u53ef\u4ee5\u964d\u4f4e\u8acb\u6c42\u5c0e\u6d41\u5230\u8a72\u670d\u52d9\u7684\u91cf\uff0c\u4f86\u907f\u514d\u670d\u52d9\u6301\u7e8c\u5730\u963b\u585e\u672a\u80fd\u8655\u7406\u7684\u8acb\u6c42\u3002
\u4f46\u554f\u984c\u662f\uff0c\u6211\u5011\u5f88\u53ef\u80fd\u4e0d\u77e5\u9053\u4e0a\u6e38\u670d\u52d9\u9650\u5236\u8acb\u6c42\u7684\u91cf\uff0c\u9019\u6642\u6211\u5011\u5c31\u53ea\u80fd\u900f\u904e\u89c0\u6e2c\u6f5b\u6642\u4f86\u81ea\u52d5\u4fee\u6b63\u670d\u52d9\u80fd\u6536\u5230\u7684\u8acb\u6c42\u91cf\u3002\u9019\u500b\u7cbe\u795e\uff0c\u5c31\u662f Additive-Increase/Multiplicative-Decrease\uff08AIMD\uff09\u5728\u505a\u7684\u4e8b\u3002
\u7576\u6f5b\u6642\u7a69\u5b9a\u6642\uff0c\u9010\u6b65\u589e\u52a0\uff08Additive-Increase\uff09\u8acb\u6c42\u7684\u9650\u5236\u6578\uff0c\u7576\u6f5b\u6642\u904e\u9ad8\u6642\uff0c\u5c31\u58d3\u4f4e\u8acb\u6c42\u6578\uff08Multiplicative-Decrease\uff09\uff0c\u8b93\u4e0a\u6e38\u670d\u52d9\u6709\u6642\u9593\u80fd\u8655\u7406\u73fe\u6709\u7684\u8acb\u6c42\u3002\u807d\u8d77\u4f86\u6c92\u4ec0\u9ebc\u7528\uff1f\u6211\u5011\u4f86 DEMO \u770b\u770b\u5427\uff01
AIMD \u5be6\u4f5c\u7d30\u7bc0\u8a73\u898b\u76f8\u95dc\u7a0b\u5f0f\u78bc\u3002
"},{"location":"feedback/adaptive-concurrency/#\u5be6\u4f5c-aimd","title":"\u5be6\u4f5c AIMD","text":"node src/client.js --wait 700 --rate 15 --duration 120 --port 8081\n
\u73fe\u5728\u4f60\u5c31\u53ef\u4ee5\u770b\u5230\u5c0d\u4e0a\u6e38\u670d\u52d9\u4f86\u8aaa\u5f88\u660e\u986f\u7684\u5dee\u7570\u4e86\uff0c\u4ed6\u4e0d\u518d\u6703\u6709\u4e0d\u65b7\u4e0a\u5347\u7684 pending \u8acb\u6c42\uff0c\u800c\u662f\u5728\u4e00\u500b\u6301\u7e8c\u7a69\u5b9a\u7684\u6c34\u5e73\u4e2d\u3002\u9019\u662f\u56e0\u70ba\u5728\u5be6\u4f5c AIMD \u7684 proxy \u4e2d\uff0c\u5b83\u958b\u59cb\u7d00\u9304\u670d\u52d9\u53ef\u4ee5\u627f\u8f09\u7684\u91cf\uff0c\u4e26\u62d2\u7d55\u90a3\u4e9b\u8d85\u51fa\u9650\u5236\u7684\u8acb\u6c42\u3002\u4ee5\u5de6\u4e0b\u89d2\u7684\u5716\u4f86\u8aaa\uff0c\u56e0\u70ba proxy \u521d\u59cb\u7684\u9650\u5236\u662f\u5341\u500b\u8acb\u6c42\uff0c\u6240\u4ee5\u4e00\u958b\u59cb\u6703\u6709\u4e00\u500b\u5c0f\u5c71\u4e18\uff0c\u7576\u4ed6\u958b\u59cb\u9010\u6b65\u589e\u52a0\uff08Additive-Increase\uff09\u8acb\u6c42\u7684\u9650\u5236\u6578\u6642\uff0c\u9019\u500b\u7d05\u8272\u5c0f\u5c71\u4e18\u5c31\u958b\u59cb\u4e0b\u964d\uff0c\u6700\u5f8c\u4f86\u5230\u4e00\u500b\u5e73\u7a69\u7684\u6c34\u5e73\u7dda\u4e2d\u3002\u5c0d\u65bc\u4e0a\u6e38\u670d\u52d9\u4f86\u8aaa\uff0c\u4ed6\u7684\u901a\u91cf\uff08throughput\uff09\u4ecd\u7136\u7dad\u6301\u8457\u7d04 \\(14.3 req/s\\) \u5de6\u53f3\uff0c\u4f46\u91cd\u9ede\u662f\u4ed6\u4e0d\u518d\u7d2f\u7a4d\u90a3\u4e9b\u7121\u6cd5\u6d88\u5316\u7684\u8acb\u6c42\uff0c\u800c\u662f\u900f\u904e proxy \u76f4\u63a5\u62d2\u7d55\u9019\u4e9b\u8acb\u6c42\u3002
\u6211\u5011\u518d\u4f86\u770b\u770b\u53e6\u5916\u4e00\u500b\u5be6\u4f5c\uff0c\u9019\u6b21\u5be6\u4f5c\u662f\u8b93\u4e0a\u6e38\u670d\u52d9\u7684\u6f5b\u6642\u5f9e 600ms \u5347\u5230 700ms \u518d\u5347\u5230 1000ms\u3002
# \u4f7f server \u9810\u8a2d\u7b49\u5f85 600ms\ncurl localhost:8000/set-wait/600\n# --wait = 0 \u4ee3\u8868\u4f7f\u7528 server \u9810\u8a2d\u7684 waiting time\nnode src/client.js --wait 0 --rate 15 --duration 0 --port 8081\n# \u9010\u6b65\u589e\u52a0\ncurl localhost:8000/set-wait/700\ncurl localhost:8000/set-wait/1000\n
\u5728 11:06:30
\u4ee5\u524d\uff0c\u884c\u70ba\u90fd\u548c\u524d\u9762\u5dee\u4e0d\u591a\uff0c\u503c\u5f97\u6ce8\u610f\u7684\u662f\uff0c\u7576\u6f5b\u6642\u4f86\u5230 1000ms \u6642\uff0c\u53ef\u4ee5\u770b\u5230 proxy \u958b\u59cb\u81ea\u52d5\u964d\u4f4e\u8acb\u6c42\u6578\uff0c\u958b\u59cb\u62d2\u7d55\u591a\u51fa\u7684 5 \u500b\u8acb\u6c42\u3002\u9019\u88e1\u91cd\u9ede\u662f\u4e0a\u5716\u7684\u8acb\u6c42\u6578\uff0c\u4ed6\u7684\u66f2\u7dda\u5f88\u5178\u578b\u7684\u53cd\u61c9\u4e86 AIMD \u7684\u589e\u5e45\uff1a\u9010\u6b65\u4e0a\u5347\uff0c\u5feb\u901f\u9661\u843d\u3002\u9019\u4e00\u5207\u90fd\u4e0d\u9700\u8981\u8abf\u6574\u61c9\u7528\u7a0b\u5f0f\uff0c\u53ea\u662f\u5728 proxy \u4e2d\u52a0\u4e0a\u4e00\u4e9b\u5c0f\u7a0b\u5f0f\uff0c\u5c31\u53ef\u4ee5\u5927\u5927\u7684\u964d\u4f4e\u4e0a\u6e38\u670d\u52d9\u627f\u8f09\u904e\u591a\u7684\u8acb\u6c42\u767c\u751f\u7684\u6a5f\u6703\u3002
\u63a5\u4e0b\u4f86\u6211\u5011\u5c31\u4f86\u6bd4\u8f03\u4e00\u4e0b\u9650\u6d41\u6a5f\u5236\u548c\u9069\u61c9\u6027\u4e26\u884c\u8655\u7406\uff08AIMD \u5c31\u662f\u4e00\u7a2e\u5be6\u4f5c\uff09\u3002
"},{"location":"feedback/adaptive-concurrency/#\u5229\u7528\u7387\u7684\u6bd4\u8f03","title":"\u5229\u7528\u7387\u7684\u6bd4\u8f03","text":"\u6240\u8b02\u7684\u5229\u7528\u7387\uff0c\u5c31\u662f\u670d\u52d9\u88ab\u5b8c\u6574\u5730\u4f7f\u7528\u7684\u6bd4\u4f8b\u3002\u8209\u4f8b\u4f86\u8aaa\uff0c\u5982\u679c\u4e00\u500b\u670d\u52d9\u64c1\u6709 100 \u7684\u901a\u91cf\uff0c\u4f46\u662f\u70ba\u4e86\u907f\u514d\u5404\u500b\u4f7f\u7528\u8005\uff08client\uff09\u6436\u4f54\u8cc7\u6e90\uff0c\u6240\u4ee5\u9650\u5236 \u4f7f\u7528\u8005A \u6bcf\u79d2\u53ea\u80fd\u6253 15 \u500b\u8acb\u6c42\uff0c\u4f7f\u7528\u8005B \u6bcf\u79d2\u53ea\u80fd\u6253 40 \u500b\u8acb\u6c42\uff0c\u800c\u9019\u4e9b\u4f7f\u7528\u8005\u7684\u8acb\u6c42\u7e3d\u9650\u5236\u6703\u5c0f\u65bc\u7b49\u65bc 100\uff0c\u9019\u662f\u56e0\u70ba\u907f\u514d\u7576\u6bcf\u500b\u670d\u52d9\u90fd\u540c\u6642\u4f7f\u7528\u6700\u9ad8\u4e0a\u9650\uff0c\u5c31\u5f88\u53ef\u80fd\u8b93\u9019\u500b APIM \u4e2d\u65b7\u7a0b\u5e8f\u3002\u4f46\u662f\u7576\u9019\u500b\u670d\u52d9\u524d\u9762\u639b\u8f09\u4e86\u9069\u61c9\u6027\u4e26\u884c\u8655\u7406\u7684\u6a5f\u5236\uff0c\u5c31\u53ef\u4ee5\u5b89\u5fc3\u8b93 \u4f7f\u7528\u8005A \u548c \u4f7f\u7528\u8005B \u90fd\u64c1\u6709\u6bcf\u79d2 80 \u500b\u8acb\u6c42\u7684\u9650\u5236\uff0c\u5373\u4f7f\u4ed6\u5011\u5408\u8a08\u8d77\u4f86\u662f 160 \u4e5f\u5c31\u662f\u5927\u65bc\u80fd\u8ca0\u8377\u7684\u6bcf\u79d2 100 \u500b\u8acb\u6c42\u3002
\u9019\u6709\u4ec0\u9ebc\u512a\u52e2\uff1f\u7b2c\u4e00\u500b\u5c31\u662f\u670d\u52d9\u7684\u8cc7\u6e90\u80fd\u88ab\u6709\u6548\u5229\u7528\uff0c\u7b2c\u4e8c\u500b\u5c31\u662f\u7576\u8acb\u6c42\u7684\u91cf\u589e\u52a0\u6642\uff0c\u4f7f\u7528\u8005\u6bd4\u8f03\u4e0d\u6703\u8e29\u5230\u9650\u5236\u800c\u88ab\u62d2\u7d55\uff08\u901a\u5e38\u9650\u6d41\u7684\u9650\u5236\u662f\u6709\u6642\u6548\u7684\uff0c\u4f8b\u5982\u4e0d\u518d\u63a5\u53d7\u9019\u500b\u4f7f\u7528\u8005\u6216\u670d\u52d9\u63a5\u4e0b\u4f86 5 \u5206\u9418\u7684\u8acb\u6c42\uff09\u3002
\u6211\u5011\u4f86\u5be6\u4f5c\u770b\u770b\u5427\uff01
# \u5206\u5225\u5728\u5169\u500b\u7d42\u7aef\u8f38\u5165\u5176\u4e2d\u4e00\u500b\u6307\u4ee4\nnode src/client.js --wait 700 --rate 10 --duration 120 --name A --port 8081\nnode src/client.js --wait 700 --rate 10 --duration 120 --name B --port 8081\n
\u6211\u5011\u53ef\u4ee5\u770b\u5230\u5de6\u4e0b\u7684 \u4f7f\u7528\u8005A \u548c\u53f3\u4e0b\u7684 \u4f7f\u7528\u8005 B \u90fd\u53ef\u4ee5\u5f97\u5230 HTTP 200 \u7684\u56de\u61c9\uff0c\u4e14\u5169\u8005\u7684\u7e3d\u901a\u91cf\uff08\u5de6\u4e0a\u89d2\uff09\u4ecd\u7136\u662f\u55ae\u4e00\u4f7f\u7528\u8005\u7684 14.3\u3002\u5982\u679c\u6709\u8208\u8da3\uff0c\u53ef\u4ee5\u6e2c\u8a66\u4e00\u4e0b\u57f7\u884c\u9019\u4e9b client \u7684\u5148\u5f8c\u9806\u5e8f\u662f\u5426\u6703\u5c0d\u7372\u5f97 504 \u7684\u6bd4\u4f8b\u6709\u6240\u5f71\u97ff\uff0c\u9019\u500b\u8b70\u984c\u6211\u5011\u7559\u5230\u5ef6\u4f38\u518d\u63d0\u4e00\u4e0b\u3002
"},{"location":"feedback/adaptive-concurrency/#\u53ef\u64f4\u5c55\u6027\u7684\u6bd4\u8f03","title":"\u53ef\u64f4\u5c55\u6027\u7684\u6bd4\u8f03","text":"\u96a8\u8457\u61c9\u7528\u7a0b\u5f0f\u7684\u6210\u9577\uff0c\u6211\u5011\u52e2\u5fc5\u6703\u9762\u81e8\u53ef\u64f4\u5c55\u6027\u7684\u6311\u6230\u3002\u9650\u6d41\u6a5f\u5236\u5f88\u96e3\u505a\u5230\u53ef\u64f4\u5c55\u6027\uff0c\u4e8b\u5be6\u4e0a\u4ed6\u8981\u9762\u81e8\u7684\u662f\u5206\u6563\u5f0f\u7cfb\u7d71\u6700\u56f0\u96e3\u7684\u554f\u984c\u2014\u2014\u72c0\u614b\u6a5f\u7684\u5206\u6563\u5f0f\u8655\u7406\u3002\u56e0\u70ba\u8981\u505a\u9650\u6d41\uff0c\u52e2\u5fc5\u9700\u8981\u5132\u5b58\u5404\u500b\u4f7f\u7528\u8005\u7684\u4f7f\u7528\u7d00\u9304\uff0c\u4f8b\u5982\u7d00\u9304\u5176\u4e94\u5206\u9418\u5167\u7684\u8acb\u6c42\u6578\u3002\u53ef\u80fd\u7684\u505a\u6cd5\u6709\uff1a
\u628a\u64f4\u5c55\u6027\u7684\u554f\u984c\u653e\u5230\u9069\u61c9\u6027\u4e26\u884c\u8655\u7406\u6703\u767c\u751f\u4ec0\u9ebc\u4e8b\uff1f\u6211\u5011\u4f86\u5be6\u4f5c\u770b\u770b\u5427\uff01
# \u5206\u5225\u5728\u5169\u500b\u7d42\u7aef\u8f38\u5165\u5176\u4e2d\u4e00\u500b\u6307\u4ee4\nnode src/client.js --wait 700 --rate 10 --duration 0 --port 8081\nnode src/client.js --wait 700 --rate 10 --duration 0 --port 8082\n
\u6211\u5011\u53ef\u4ee5\u770b\u5230\u9019\u5be6\u4f5c\u4e2d\u6709\u5169\u500b proxy\uff0cProxyA \u7684 port \u662f 8081\u3001ProxyB \u7684 port \u662f 8082\u3002\u7576\u5169\u500b proxy \u5404\u81ea\u63a5\u6536\u5341\u500b\u8acb\u6c42\u6642\uff0c\u4ed6\u5011\u6703\u81ea\u5df1\u6839\u64da\u4e0a\u6e38\u7684\u6f5b\u6642\u627e\u51fa\u6700\u9069\u7576\u7684\u8acb\u6c42\u9650\u5236\uff0c\u6240\u4ee5\u5c0d\u65bc\u4e0a\u6e38\u670d\u52d9\u4f86\u8aaa\uff0c\u5be6\u969b\u901a\u91cf\u4ecd\u7136\u7dad\u6301 \\(14.3 req/s\\) \u5de6\u53f3\u3002\u9019\u6642\u4f60\u5b8c\u5168\u4e0d\u9700\u8981\u8003\u616e\u64f4\u5c55\u6027\u7684\u554f\u984c\uff0c\u56e0\u70ba\u9019\u4e9b proxy \u6703\u81ea\u52d5\u627e\u51fa\u6700\u9069\u7576\u7684\u9650\u5236\uff0c\u53ea\u662f\u4f60\u4e0d\u80fd\u7d66\u4e88\u904e\u9ad8\u7684\u901a\u91cf\u6700\u4f4e\u9650\u5236\uff0c\u56e0\u70ba\u7576\u6d41\u91cf\u5206\u6563\u5230\u591a\u500b proxy \u6642\uff0c\u5404\u81ea proxy \u7684\u901a\u91cf\u53ef\u80fd\u6703\u5f88\u4f4e\uff0c\u8a2d\u5b9a\u904e\u9ad8\u7684\u6700\u4f4e\u9650\u5236\u5c07\u6703\u7834\u58de\u9810\u671f\u7684\u884c\u70ba\u3002
"},{"location":"feedback/adaptive-concurrency/#\u7e3d\u7d50","title":"\u7e3d\u7d50","text":"\u6211\u5011\u770b\u5230\u4e86\u9069\u61c9\u6027\u4e26\u884c\u8655\u7406\u53ef\u4ee5\u5e6b\u52a9\u6211\u5011\u6392\u89e3\u4e0a\u6e38\u670d\u52d9\u7684\u904e\u8f09\uff0c\u6211\u5011\u751a\u81f3\u4e0d\u9700\u8981\u77e5\u9053\u4e0a\u6e38\u670d\u52d9\u7684\u901a\u91cf\u6216\u5bb9\u91cf\uff0c\u900f\u904e\u6301\u7e8c\u89c0\u6e2c\u7684\u6f5b\u6642\u4f86\u8abf\u6574\u61c9\u8a72\u9001\u5f80\u4e0a\u6e38\u7684\u8acb\u6c42\u6578\u3002\u6700\u5f8c\u518d\u4f86\u554f\u500b\u554f\u984c\uff0c\u53e4\u8001\u7684\u8a13\u8a00\u4e2d\uff0c\u6709\u5f97\u5fc5\u6709\u5931\uff0c\u5728\u9019\u88e1\u5931\u6e96\u4e86\u55ce\uff1f\u807d\u8d77\u4f86\u4ed6\u597d\u50cf\u53ef\u4ee5\u5b8c\u5168\u53d6\u4ee3\u9650\u6d41\u6a5f\u5236\uff1f\u9019\u662f\u56e0\u70ba\u9650\u6d41\u6a5f\u5236\u548c\u9069\u61c9\u6027\u4e26\u884c\u8655\u7406\u5206\u5225\u8981\u89e3\u6c7a\u7684\u554f\u984c\u4e0d\u540c\uff0c\u56de\u5230\u6211\u5011\u6700\u4e00\u958b\u59cb\u7684\u4f8b\u5b50\uff0c\u4fdd\u9463\u4e26\u4e0d\u662f\u4e00\u500b\u7121\u80fd\u7684\u8077\u696d\uff0c\u53ea\u662f\u4ed6\u5011\u80fd\u8655\u7406\u7684\u4e8b\u60c5\u548c\u696d\u52d9\u8655\u7406\u6642\u9593\u88ab\u62c9\u9577\u9019\u5169\u8005\u4e4b\u9593\u7684\u95dc\u806f\u6027\u4e26\u4e0d\u9ad8\u3002\u9650\u6d41\u6a5f\u5236\u5728\u9762\u5c0d\u60e1\u610f\uff08\u7121\u610f\uff09\u7684\u8acb\u6c42\u7684\u7834\u58de\u662f\u53ef\u4ee5\u5f88\u597d\u7684\u9632\u7bc4\u7684\uff0c\u900f\u904e IP\u3001UA \u751a\u81f3 Header \u4f86\u8fa8\u5225\u4f7f\u7528\u8005\u4e26\u7d66\u4e88\u9650\u5236\u3002
\u5728\u9069\u61c9\u6027\u4e26\u884c\u8655\u7406\u4e2d\uff0c\u300c\u6709\u5f97\u5fc5\u6709\u5931\u300d\u662f\u9069\u7528\u5728\u5be6\u4f5c\u7684\u6f14\u7b97\u6cd5\u4e0a\uff0c\u4f8b\u5982\u4e0a\u8ff0\u7684 AIMD\u3002
"},{"location":"feedback/adaptive-concurrency/#\u5ef6\u4f38","title":"\u5ef6\u4f38","text":"\u5176\u5be6\u9084\u6709\u5f88\u591a\u5ef6\u4f38\u53ef\u4ee5\u8abf\u6574\u548c\u512a\u5316\uff0c\u9019\u88e1\u5217\u8209\u5e7e\u500b\uff1a
\u9664\u4e86\u9019\u4e9b\u554f\u984c\uff0c\u5982\u679c\u4f60\u5c0d\u65bc\u5982\u4f55\u589e\u52a0\u7db2\u8def\u670d\u52d9\u7684\u7a69\u5b9a\u5ea6\uff0c\u6700\u597d\u7684\u8fa6\u6cd5\u9084\u662f\u8b80\u66f8\uff0c\u56e0\u70ba\u66f8\u88e1\u7684\u5167\u5bb9\u90fd\u6703\u6bd4\u8f03\u7cfb\u7d71\u6027\u7684\u8b1b\u89e3\uff0c\u63a8\u85a6\u7684\u66f8\u6709 Google \u5167\u90e8\u5de5\u7a0b\u5e2b\u5beb\u7684 Site Reliability Engineering\u3002
"},{"location":"feedback/maintenace-experience/","title":"\u7dad\u904b\u4e0a\u7684\u4e00\u4e9b\u5fc3\u5f97","text":"\u7dad\u904b\u7684\u6838\u5fc3\u601d\u60f3\u662f\u8981\u7406\u89e3\u4f60\u7684\u7522\u54c1\uff0c\u4e26\u4f9d\u64da\u5f97\u5230\u7684\u6578\u64da\u4f5c\u51fa\u6c7a\u7b56\u3002
\u6240\u8b02\u7684\u300c\u7406\u89e3\u7522\u54c1\u300d\u5c31\u5e36\u4ee3\u8868\u900f\u660e\u5316\uff0clog/metric/trace
log \u53c8\u5206\u4e09\u7a2e\uff1atext log\u3001introspection log\uff08eg. exception stack\uff09 \u548c structure log\u3002
\u5c0d\u65bc SLO \u4f86\u8aaa structure log \u548c metrics \u624d\u662f\u91cd\u9ede\u3002
\u5c0d\u65bc\u8981\u627e\u670d\u52d9\u5931\u80fd\u7684\u554f\u984c\uff0ctrace \u548c introspection log \u6703\u662f\u91cd\u9ede\u3002
Metrics \u53ef\u80fd\u4e5f\u5305\u542b\u9019\u53f0\u4e3b\u6a5f\u4e0a\u6b21\u90e8\u7f72\u6642\u9593\uff08program version tag\uff09\u3002
SLO \u53ef\u80fd\u662f\u670d\u52d9\u6700\u4e45\u5931\u80fd\u4e09\u5341\u5206\u9418\uff0cSLI \u6703\u544a\u8a34\u4f60\u4e0d\u540c\u9762\u5411\u7684\u6307\u6a19\uff0c\u5e6b\u52a9\u4f60\u627e\u5230\u554f\u984c\u3002
trace \u8981\u653e tcp \u9023\u7dda\u6642\u9593\uff0c\u53ef\u4ee5\u5e6b\u52a9\u4f60\u5feb\u901f\u91d0\u6e05\u9023\u7dda\u901f\u5ea6\u6162\u7684\u539f\u56e0\u3002
trace \u8ddf metrics \u5dee\u5728\u54ea\uff1f
\u4ec0\u9ebc\u90fd\u62c9\uff0c\u4f8b\u5982 agent connections \u5f9e\u96f2\u5230\u5730\u5f8c\u8b8a\u9ad8\uff0c agent log \u770b\u5230 latency \u62c9\u9ad8\uff0c\u5c0d\u61c9\u8abf\u6574\uff0c\u4f46\u662f\u9084\u6c92\u505a
\u7167\u9867\u597d\u4f60\u7684 monitor \u670d\u52d9\uff1a
statsd
, Prometheus
Prometheus
, InfluxDB
(long term)Grafana
, Viceroy
Alertmanager
metrics \u6ce8\u610f\u56db\u5927\u6307\u6a19\uff1a
\u600e\u9ebc\u76e3\u63a7\u670d\u52d9\uff1f\u5047\u8a2d\u4f60\u7684 SLO \u8a02\u5b9a 30 \u5929\u6700\u9ad8 0.1% \u7684\u932f\u8aa4\u7387\uff1a
\u89e3\u6cd5\u662f\uff1a\u6539\u6210\u76e3\u63a7 burn rate\uff0c\u9019\u500b\u932f\u8aa4\u7387\u6703\u591a\u5feb\u6d88\u8017\u6389\u4f60\u7684 error budget\uff1a
\u4f4e\u6d41\u91cf\u7684\u89e3\u6cd5\uff1a
\u6709\u6642\u592a\u5bec\u9b06\u7684 SLO \u6703\u8b93\u9810\u671f\u7684\u544a\u8b66\u5931\u9748\u3002 \u4f8b\u5982\uff0cSLO \u6bcf\u6708 90% \u4ee5\u4e0a\u7684\u53ef\u7528\u6027\uff0c\u76e3\u63a7\u8a2d\u5b9a\u6bcf\u5c0f\u6642 > 2% \u7684\u932f\u8aa4\u7387\u5c07\u4e0d\u53ef\u80fd\u88ab\u89f8\u767c\uff1a
\\[\\begin{align} 720*2\\% = 14.4 rate >= 14.4* (1-90\\%) = 1.4 \\end{align}\\]\u8981\u8b93\u932f\u8aa4\u7684\u8acb\u6c42\u5927\u65bc\u8acb\u6c42\u7e3d\u6578\u7684 1.4 \u500d\uff0c\u986f\u7136\u662f\u4e0d\u53ef\u80fd\u7684\u3002
\u5982\u679c\u4f60\u6709\u5f88\u591a\u670d\u52d9\uff08\u5fae\u670d\u52d9\uff09\uff0c\u4e0d\u8981\u6bcf\u500b\u90fd\u52a0\u4e0a\u7368\u7acb\u7684 SLO\uff0c\u800c\u662f\u628a\u5b83\u5206\u985e\u597d\u4e26\u5957\u7528\u5176\u61c9\u6709\u7684 SLO\u3002 \u4f8b\u5982\uff1a
Request class Availability Latency @ 90%a Latency @ 99%CRITICAL
99.99% 100 ms 200 ms HIGH_FAST
99.9% 100 ms 200 ms HIGH_SLOW
99.9% 1,000 ms 5,000 ms LOW
99% None None NO_SLO
None None None \u4f46\u662f\u8981\u505a\u9019\u4e9b\u6771\u897f\uff0c\u4f60\u5c31\u6703\u767c\u73fe\uff0c\u6211\u7684\u6642\u9593\u90fd\u88ab\u529f\u80fd\u958b\u767c\u4f54\u6eff\uff01\u9019\u6642\u5019\u600e\u9ebc\u8fa6\uff1f
\u9019\u5c31\u5c0d\u5230\u300c\u6211\u9700\u8981\u82b1\u591a\u5c11\u6642\u9593\u5728\u7dad\u904b\u4e0a\u300d
\u518d\u5e36\u5230 error budge\uff0c\u4e26\u4f9d\u6b64\u5c0e\u5230\u300c\u4f9d\u64da\u5f97\u5230\u7684\u6578\u64da\u505a\u51fa\u6c7a\u7b56\u300d\u3002
\u518d\u4f9d\u6b64\u5c0e\u5230\u516c\u53f8\u67b6\u69cb\uff0cDevOps v.s. SRE
\u5229\u7528 THD \u505a\u4e00\u500b\u7bc4\u4f8b\u3002
\u516c\u53f8\u6709\u500b\u6848\u4f8b\uff0cJava \u904e GSLB \u7684\u9023\u7dda\u6c60\u5728 GSLB \u7684\u9023\u7dda\u8868\u88ab reset\uff0c\u5c0e\u81f4\u6240\u6709 db \u9023\u7dda\u5931\u80fd\u3002
"},{"location":"feedback/release-it/","title":"Release It","text":"\u9019\u672c\u66f8\u5617\u8a66\u628a\u4e00\u500b\u975e\u5e38\u8907\u96dc\u7684\u6771\u897f\uff0c\u7cfb\u7d71\u5316\u5730\u95e1\u8ff0\u51fa\u4f86\uff0c\u90a3\u5c31\u662f\uff1a\u7dad\u904b\u3002
"},{"location":"feedback/release-it/#\u524d\u8a00","title":"\u524d\u8a00","text":"\u7dad\u904b\u662f \u7dad\u6301\u904b\u4f5c \u7684\u7c21\u5beb\uff0c\u807d\u8d77\u4f86\u6bd4\u8d77\u5beb\u4e9b\u670d\u52d9\u7684\u65b0\u529f\u80fd\u66f4\u7c21\u55ae\uff0c \u4f46\u9019\u4e0d\u53ea\u8981\u6c42\u5c0d\u81ea\u5df1\u7684\u670d\u52d9\u66b8\u89e3\uff0c \u4e5f\u9700\u8981\u5c0d\u5f9e\u5e95\u5c64\u7684\u786c\u9ad4\u6a5f\u5668\u5230\u4e0a\u5c64\u7684\u8edf\u9ad4\u61c9\u7528\u4e2d\u9593\u6240\u6709\u7cfb\u7d71\u7684\u884c\u7232\u548c\u4e4b\u9593\u7684\u95dc\u4fc2\u90fd\u8981\u66b8\u89e3\u3002
\u7576\u6d41\u91cf\u4e0a\u5347\uff0c\u6216\u8005\u7bc0\u9ede\u8d8a\u4f86\u8d8a\u591a\uff0c\u4f60\u4e0d\u53ea\u9700\u8981\u55ae\u9ede\u7684\u66b8\u89e3\uff0c\u66f4\u9700\u8981\u5168\u9762\u6027\u7684\u53bb\u5be9\u8996\u670d\u52d9\u7684\u67b6\u69cb\u3002
\u95dc\u65bc\u4e8c\u9019\u500b\u6578\u5b57
\u300c\u4e8c\u300d\u9019\u500b\u6578\u5b57\u5728\u7db2\u8def\u670d\u52d9\u4e2d\u662f\u500b\u6709\u8da3\u7684\u6578\u5b57\uff0c \u56e0\u70ba\u5be6\u969b\u4e0a\u6211\u5011\u901a\u5e38\u6703\u8655\u7406\u7684\u6578\u91cf\u7d1a\u53ea\u6709\u4e09\u500b\uff1a \u96f6\u500b\u3001\u4e00\u500b\u548c\u591a\u500b\u3002
\u6240\u4ee5\u7576\u4f60\u6709\u4e00\u500b\u4ee5\u4e0a\u7684\u670d\u52d9\u6642\uff0c\u4f60\u9700\u8981\u8655\u7406\u7684\u6771\u897f\u5c31\u6703\u8b8a\u5f88\u591a\u3002
\u9664\u6b64\u4e4b\u5916\uff0c\u4e4b\u6240\u4ee5\u8b93\u7dad\u904b\u9019\u9ebc\u56f0\u96e3\u7684\u539f\u56e0\u4e5f\u5728\u65bc\u6bcf\u500b\u4f01\u696d\u751a\u81f3\u5230\u6bcf\u500b\u61c9\u7528\uff0c \u4ed6\u9700\u8981\u9762\u81e8\u7684\u7dad\u904b\u56f0\u96e3\u53ef\u80fd\u90fd\u4e0d\u4e00\u6a23\uff0c\u4f60\u5f88\u96e3\u627e\u5230\u4e00\u672c\u66f8\u4e00\u53e5\u8a71\uff0c\u5c31\u53ef\u4ee5\u89e3\u6c7a\u4f60\u7684\u554f\u984c\u3002
\u6700\u5f8c\uff0c\u7dad\u904b\u9084\u6709\u4e00\u500b\u7279\u8272\uff1a\u4f60\u627e\u4e0d\u5230\u6b63\u78ba\u7b54\u6848\uff0c\u4f60\u901a\u5e38\u90fd\u5728\u4e00\u4e9b\u6b0a\u8861\u4e2d\u505a\u9078\u64c7\u3002 \u5728\u5beb\u9019\u4efd\u5fc3\u5f97\u7684\u6642\u5019\uff0c\u6211\u4e5f\u5728\u601d\u8003\u8981\u600e\u9ebc\u628a\u9019\u9ebc\u62bd\u8c61\u7684\u6771\u897f\u5beb\u597d\uff0c \u9019\u4e3b\u8981\u9084\u662f\u56e0\u70ba\u6211\u5e0c\u671b\u81ea\u5df1\u5beb\u7684\u5fc3\u5f97\uff0c\u4e0d\u6b62\u662f\u7ffb\u8b6f\uff0c\u66f4\u662f\u4e00\u7a2e\u65b0\u7684\u8a6e\u91cb\u3002
\u9019\u4efd\u5fc3\u5f97\u4e3b\u8981\u5206\u6210\u4e09\u6bb5\uff08\u96d6\u7136\u66f8\u4e2d\u662f\u56db\u6bb5\uff09\uff1a
\u66f8\u4e2d\u5beb\u5f97\u6709\u8072\u6709\u8272\uff0c\u4f46\u5728\u9019\u88e1\u5c31\u50c5\u4ee5\u689d\u5217\u5f0f\u7684\u65b9\u5f0f\u64b0\u5beb\uff0c\u5e6b\u52a9\u5feb\u901f\u5be9\u8996\u548c\u56de\u61b6\u3002
\u5176\u4e2d\u6bcf\u500b\u554f\u984c\u90fd\u6709\u5e7e\u500b\u5c0d\u61c9\u7684\u89e3\u6cd5\uff0c\u53ef\u80fd\u662f\u66f8\u4e2d\u5beb\u7684\u4e5f\u53ef\u80fd\u662f\u81ea\u5df1\u7684\u7d93\u9a57\u548c\u60f3\u6cd5\u3002
\u6bcf\u4e00\u500b\u6848\u4f8b\u90fd\u6703\u6709\u500b\u5f15\u7528\uff0c\u4ee3\u8868\u9019\u500b\u6848\u4f8b\u7684\u51fa\u8655\u548c\u9801\u6578\uff08\u6ce8\u610f\uff0c\u9801\u6578\u5c0d\u61c9\u7684\u662f Release it! \u7b2c\u4e8c\u7248\uff09\u3002
"},{"location":"feedback/release-it/#tcp-\u985e\u578b","title":"TCP \u985e\u578b","text":"TCP \u5c0e\u81f4\u7684\u5931\u80fd\u3002
"},{"location":"feedback/release-it/#\u672a\u6b63\u78ba\u95dc\u9589\u9023\u7dda","title":"\u672a\u6b63\u78ba\u95dc\u9589\u9023\u7dda","text":"\u8acb\u6c42\u65b9\u900f\u904e VIP \u548c\u670d\u52d9\u7aef\u5efa\u7acb\u9023\u7dda\uff0c\u670d\u52d9\u7aef\u505a\u4e86 HA \u4e4b\u5f8c\uff0cTCP \u9023\u7dda\u4fbf\u81ea\u7136\u88ab\u68c4\u7528\u3002 \u4f46\u662f\u5c0d\u65bc\u8acb\u6c42\u65b9\uff0c\u56e0\u70ba VIP \u6c92\u6709\u8b8a\uff0c\u6240\u4ee5\u4ecd\u7136\u8a8d\u70ba\u9019\u689d\u9023\u7dda\u5b58\u5728\uff0c \u7136\u800c\u61c9\u7528\u7a0b\u5f0f\u537b\u5728\u9023\u7dda\u767c\u751f\u932f\u8aa4\u6642\u672a\u8655\u7406\u9019\u500b\u4f8b\u5916\u72c0\u6cc1\uff0c \u5c0e\u81f4\u7121\u6cd5\u6b63\u78ba\u95dc\u9589\u9023\u7dda\uff0c\u9032\u800c\u9023\u7dda\u6c60\u4e2d\u7684\u6240\u6709\u9023\u7dda\u90fd\u88ab\u8feb\u505c\u64fa\u3002
Case study, postmortem - p14
\u4f60\u53ef\u4ee5\uff1a
\u9019\u901a\u5e38\u51fa\u73fe\u5728 Java \u9019\u985e\u591a\u7dda\u7a0b\u4e14\u9700\u8981\u91cd\u8907\u5229\u7528\u9023\u7dda\u7684\u7a0b\u5f0f\uff0c \u6545\u800c\u5728 PHP\uff08\u5feb\u901f\u751f\u6ec5\u7684\u5b50\u7a0b\u5e8f\uff09 \u6216 Node.js\uff08\u55ae\u7dda\u7a0b\uff0clibuv\uff09 \u4f60\u5f88\u5c11\u6703\u770b\u5230\u9023\u7dda\u6c60\u7684\u5be6\u4f5c\u3002
\u4e0a\u9762\u8aaa\u6c92\u6709\u6b63\u78ba\u95dc\u9589\u9023\u7dda\u7684\u7a0b\u5f0f\u78bc\u5728\u9019\uff1a
Connection conn = null;\nStatement stmt = null;\ntry {\n // \u5982\u679c\u9023\u7dda\u6c60\u6c92\u6709\u9023\u7dda\u53ef\u7528\uff0c\u5c31\u6703\u5728\u9019\u908a\u7b49\u5f85\u3002\n // \u7136\u5f8c\u4f60\u901a\u5e38\u6703\u770b\u5230 HTTP 500 \u6216 Timeout \u7279\u5225\u9ad8\uff0c\n // \u4f46\u662f\u4f7f\u7528\u7684 CPU/Mem \u537b\u5f88\u4f4e\n conn = connectionPool.getConnection();\n stmt = conn.createStatement();\n // Do the things\n} finally {\n if (stmt != null) {\n stmt.close();\n }\n if (conn != null) {\n conn.close();\n }\n}\n
\u6709\u770b\u5230\u554f\u984c\u55ce\uff1f\u4e8b\u5be6\u4e0a\uff0c\u5f88\u591a\u6559\u79d1\u66f8\u4e0a\u90fd\u662f\u5efa\u8b70\u9019\u6a23\u5beb\u3002 \u4f46\u662f\u5982\u679c\u4f60\u6709\u6ce8\u610f\u904e JDBC \u7684\u6587\u4ef6\uff08\u61c9\u8a72\u6703\u548c\u5f88\u591a IDE \u6574\u5408\uff09\uff0c\u5c31\u6703\u767c\u73fe stmt.close()
\u9019\u500b\u51fd\u793a\u662f\u6703\u4e1f Exception \u7684\uff01
\u548c\u8cc7\u6599\u5eab\u5df2\u7d93\u5efa\u7acb\u597d\u9023\u7dda\uff0c\u5728\u50b3\u8f38\u8cc7\u6599\u6642\uff0c\u56e0\u70ba\u9632\u706b\u7246\u7684 session table \u91cd\u7f6e\uff0c \u5c0e\u81f4\u539f\u6709\u7684\u9023\u7dda\u5c01\u5305\u90fd\u88ab\u4e1f\u68c4\uff08\u6ce8\u610f\uff0c\u4e0d\u662f\u62d2\u7d55\uff09\uff0c \u9032\u800c\u8b93\u670d\u52d9\u548c\u8acb\u6c42\u7aef\u90fd\u8a8d\u70ba\u9023\u7dda\u4ecd\u5b58\u5728\uff0c\u5be6\u969b\u537b\u7121\u6cd5\u9032\u884c\u4efb\u4f55\u6e9d\u901a\u3002 \u6240\u4ee5\u5728\u7bc0\u9ede\u4e0a\u6703\u770b\u5230\u5f88\u9ad8\u7684 TCP Retransmission\u3002
Integration Points, The 5 A.M. Problem - p38
\u4f60\u53ef\u4ee5\uff1a
\u884c\u70ba\u5806\u7a4d\u5c0e\u81f4\u7684\u5931\u80fd\u3002
"},{"location":"feedback/release-it/#\u6301\u7e8c\u904b\u4f5c\u4e0b\u7684\u7d2f\u7a4d","title":"\u6301\u7e8c\u904b\u4f5c\u4e0b\u7684\u7d2f\u7a4d","text":"\u5728\u9ad8\u53ef\u7528\u6027\u4e0b\u7684\u591a\u500b\u7bc0\u9ede\uff0c\u7576\u670d\u52d9\u6709\u8457 \u6703\u96a8\u8457\u6d41\u91cf\u4e0a\u5347\u800c\u8b8a\u660e\u986f\u7684\u932f\u8aa4 \u6642\uff08\u4f8b\u5982\u8a18\u61b6\u9ad4\u5806\u7a4d\uff09\uff0c \u55ae\u4e00\u7bc0\u9ede\u7684\u5931\u80fd\u6703\u52a0\u901f\u5176\u4ed6\u7bc0\u9ede\u7684\u5931\u80fd\u3002 \u4f8b\u5982\uff0c\u539f\u672c\u6709\u4e09\u500b\u7bc0\u9ede\uff0c\u6bcf\u500b\u7bc0\u9ede\u5206\u914d\u4e09\u5206\u4e4b\u4e00\u7684\u6d41\u91cf\uff0c \u7576\u5176\u4e2d\u4e00\u53f0\u56e0\u70ba\u8a18\u61b6\u9ad4\u5806\u7a4d\uff0c\u5c0e\u81f4\u5931\u80fd\u6642\u6703\u52a0\u901f\u5269\u4e0b\u5169\u53f0\u7684\u6d88\u4ea1\u3002
\u5728\u672a\u7372\u5f97\u6539\u5584\u524d\uff08\u901a\u5e38\u8a18\u61b6\u9ad4\u5806\u7a4d\u7684\u932f\u8aa4\u4e26\u4e0d\u5bb9\u6613\u6539\u5584\uff09\uff0c \u53ef\u80fd\u9700\u8981\u5b9a\u671f\u53bb\u91cd\u555f\u670d\u52d9\uff0c\u6216\u8005\u4eba\u5de5\u7684\u4ecb\u5165\u3002
Chain Reactions, Searching... - p48
\u4f60\u53ef\u4ee5\uff1a
\u670d\u52d9\u7aef\u4e26\u672a\u544a\u77e5\u8acb\u6c42\u7684\u932f\u8aa4\u662f\u66ab\u6642\u6027\uff08\u4f8b\u5982\u9396\u6b7b\uff09\u9084\u662f\u6c38\u4e45\u6027\uff08\u4f8b\u5982\u8f38\u5165\u683c\u5f0f\u932f\u8aa4\uff09\uff0c \u6240\u4ee5\u8acb\u6c42\u7aef\u53cd\u8986\u91cd\u65b0\u767c\u9001\uff0c\u52a0\u901f\u96d9\u65b9\u7684\u6d88\u4ea1\u3002
Cascading Failures - p50
\u4f60\u53ef\u4ee5\uff1a
\u524d\u7aef\u4f7f\u7528\u8005\u932f\u8aa4\u8a2d\u7f6e\u7684\u4ee3\u7406\u8005 \uff08\u4f8b\u5982 Chrome \u7684\u512a\u5316\u8a2d\u5b9a\uff09 \u6703\u53cd\u8986\u767c\u9001\u8acb\u6c42\uff0c \u4e26\u4e14\u9019\u4e9b\u8acb\u6c42\u4e0d\u6703\u53bb\u7d00\u9304 session ID\uff0c\u5c0e\u81f4\u53cd\u8986\u5efa\u7f6e\u7121\u610f\u7fa9\u7684 session\uff0c\u52a0\u91cd\u670d\u52d9\u8ca0\u64d4\u3002
Unwanted Users - p57
\u4f60\u53ef\u4ee5\uff1a
\u9ad8\u8ca0\u8f09\u5c0e\u81f4\u65b7\u8def\u5668\u65b7\u96fb\uff0c\u9032\u800c\u8b93\u6240\u6709\u4e3b\u6a5f\u95dc\u6a5f\u3002 \u7576\u8981\u91cd\u65b0\u555f\u52d5\u6a5f\u5668\u6642\uff0c\u6bcf\u53f0\u4e3b\u6a5f\u5728\u91cd\u958b\u6a5f\u7684\u904e\u7a0b\u4e2d\u8acb\u6c42\u6bd4\u5e73\u6642\u66f4\u591a\u7684\u96fb\u6d41\uff0c\u5c0e\u81f4\u65b7\u8def\u5668\u53cd\u8986\u8df3\u96fb\u3002
Dogpile - p79
\u4f60\u53ef\u4ee5\uff1a
\u932f\u8aa4\u914d\u7f6e\u901a\u5e38\u662f\u670d\u52d9\u5931\u80fd\u7684\u5927\u90e8\u5206\u539f\u56e0\u3002
"},{"location":"feedback/release-it/#\u81ea\u52d5\u5316\u7684\u66b4\u885d","title":"\u81ea\u52d5\u5316\u7684\u66b4\u885d","text":"\u5957\u4ef6\u7ba1\u7406\u5de5\u5177\u5728\u670d\u52d9\u5347\u7248\u904e\u7a0b\u628a\u9810\u671f\u88ab\u95dc\u6389\u7684 auto-scaler \u6a5f\u5236\u555f\u52d5\uff0c \u5c0e\u81f4 auto-scaler \u56e0\u70ba\u904e\u6642\u7684\u932f\u8aa4\u72c0\u614b\uff0c\u8a8d\u70ba\u61c9\u8a72\u95dc\u9589\u5927\u90e8\u5206\u7bc0\u9ede\u3002
Outage Amplification - p80
\u4f60\u53ef\u4ee5\uff1a
\u8cc7\u6599\u5eab\u4e2d\u7684\u8cc7\u6599\u672c\u4f86\u662f metadata\uff0c\u4e26\u4e0d\u9810\u671f\u4ed6\u6703\u6709\u5927\u91cf\u8cc7\u6599\u3002 \u4f46\u610f\u5916\u5c31\u767c\u751f\u5728\u9019\u4e9b\u7406\u6240\u7576\u7136\u7684\u4e8b\u60c5\u4e0a\uff0c\u61c9\u7528\u7a0b\u5f0f\u8655\u7406\u6642\u6c92\u6709\u4f7f\u7528 pagination\uff0c \u5927\u91cf\u7684\u8cc7\u6599\u5403\u5149\u7bc0\u9ede\u6240\u6709\u7684\u8a18\u61b6\u9ad4\uff0c\u4e26\u5c0e\u81f4\u5931\u80fd\u3002
Unbounded Result Sets - p87
\u4f60\u53ef\u4ee5\uff1a
\u7576\u7269\u4ef6\u904b\u7b97\u932f\u8aa4\u6642\uff0c\u9700\u8981\u4e1f\u51fa\u932f\u8aa4\uff0c\u800c\u975e\u7e7c\u7e8c\u8b93\u8a72\u7269\u4ef6\u63a5\u8457\u9032\u884c\u5f8c\u7e8c\u5de5\u4f5c\u5f8c\u518d\u4e1f\u932f\u3002
We Got the Fax\u2013\u2013It's All Black, p107
\u4f60\u53ef\u4ee5\uff1a
\u7576\u5176\u4e2d\u4e00\u500b\u5916\u90e8\u4f9d\u8cf4\u80fd\u8655\u7406\u7684\u91cf\u8b8a\u5f88\u4f4e\u6642\uff0c\u5c0e\u81f4\u5176\u4ed6\u670d\u52d9\u5b8c\u5168\u5931\u80fd\u3002 \u9019\u662f\u56e0\u70ba\u9023\u7dda\u6c60\u7684\u9023\u7dda\u662f\u5171\u7528\u7684\uff0c\u5176\u5916\u986f\u7279\u5fb5\u5305\u62ec\uff1a\u983b\u5bec\u5f88\u9ad8\u3001\u6f5b\u6642\u5f88\u9577\u3001\u8cc7\u6e90\uff08CPU/Mem\uff09\u4f7f\u7528\u7387\u4f4e\u3002
\u4f60\u53ef\u4ee5\uff1a
Trampled by Your Own Customers, p277
\u65e9\u671f\u958b\u767c\u901a\u5e38\u662f\u4e00\u5e74\u56db\u5230\u4e94\u6b21\u66f4\u65b0\uff0c\u6bcf\u4e00\u6b21\u66f4\u65b0\u90fd\u6703\u662f\u4e00\u5927\u5305\uff0c \u4f5c\u8005\u4e5f\u5206\u4eab\u5176\u4e2d\u4e00\u6b21\u6848\u4f8b\uff0c\u4e00\u500b\u9577\u9054\u4e00\u5e74\u591a\u7684\u958b\u767c\u3002
\u9019\u6b21\u66f4\u65b0\u4e3b\u8981\u662f\u5728\u91cd\u69cb\u6574\u500b\u7dda\u4e0a\u8cfc\u7269\u7db2\u7ad9\uff0c\u4e26\u63d0\u4f9b\u4e00\u4e9b\u500b\u4eba\u5316\u9996\u9801\u3002
\u90a3\u6642\u7684\u6280\u8853\u53ea\u6709\u4f3a\u670d\u5668\u5074\u6e32\u67d3\uff08server side render\uff09\uff0c \u4e14\u670d\u52d9\u662f\u4ee5\u55ae\u77f3\uff08monolithic\uff09\u7db2\u7ad9\u5448\u73fe\u3002 \u986f\u7136\u5927\u5bb6\u90fd\u662f\u6709\u7d93\u9a57\u7684\u4eba\uff0c\u5373\u4f7f\u958b\u767c\u5b8c\u3001\u8a2d\u7f6e\u597d\u7dda\u4e0a\u74b0\u5883\uff0c\u4ecd\u9810\u5148\u505a\u4e86\u5f88\u591a\u8ca0\u8f09\u6e2c\u8a66\u3001QA \u9a57\u8b49\u7b49\u7b49\u3002
\u95dc\u65bc\u55ae\u77f3\u5f0f\u7684\u7db2\u7ad9\u65e9\u671f\u5728\u958b\u767c\u7684\u6642\u5019\uff0c\u901a\u5e38\u8b93\u4e00\u500b\u670d\u52d9\u8ca0\u8cac\u5168\u90e8\u7684\u529f\u80fd\uff0c \u5305\u62ec\u767b\u5165\u8a3b\u518a\u3001\u7522\u54c1\u5217\u8868\u3001\u8cfc\u7269\u8eca\u3001\u91d1\u6d41\u7b49\u7b49\u3002 \u96d6\u7136\u65b9\u4fbf\u7ba1\u7406\uff0c\u4f46\u7dad\u904b\u4e0a\u537b\u6703\u51fa\u73fe\u5f88\u591a\u554f\u984c\uff0c\u9019\u88e1\u5c31\u4e0d\u5217\u8209\u4e86\u3002
\u73fe\u5728\u5927\u591a\u90fd\u662f\u5206\u6563\u5f0f\u7684\u5fae\u670d\u52d9\uff0c\u4f46\u4ecd\u53ef\u80fd\u6703\u900f\u904e\u4e00\u4e9b\u7a0b\u5f0f\u4e0a\u7684\u624b\u6cd5\uff08\u4f8b\u5982\uff0c service-weaver\uff09 \u8b93\u773e\u591a\u7684\u5fae\u670d\u52d9\u4fdd\u6709\u55ae\u77f3\u7684\u4fbf\u5229\u6027\uff0c\u540c\u6642\u53c8\u6709\u5fae\u670d\u52d9\u7684\u9ad8\u53ef\u9760\u6027\u3002
\u53e6\u5916\uff0c\u4f60\u53ef\u80fd\u6703\u4ee5\u70ba\u55ae\u77f3\u5f0f\u7684\u7db2\u7ad9\u6703\u8b93\u524d\u5f8c\u7aef\u66f4\u6709\u6548\u7684\u4e32\u63a5\uff0c\u4f46\u6839\u64da\u5eb7\u5a01\u5b9a\u5f8b\uff0c \u524d\u5f8c\u7aef\u7684\u4e32\u63a5\u6548\u7387\u53d7\u5236\u65bc\u516c\u53f8\u5167\u90e8\u6e9d\u901a\u7684\u983b\u7387\u548c\u7ba1\u9053\u800c\u975e\u4f7f\u7528\u4e0a\u7684\u6280\u8853\u548c\u5de5\u5177\u3002 \u63db\u53e5\u8a71\u8aaa\uff0c\u4e0d\u7ba1\u662f\u524d\u5f8c\u7aef\u5206\u96e2\u3001\u55ae\u77f3\u5f0f\uff0c \u5982\u679c\u516c\u53f8\u74b0\u5883\u4e0a\u8b93\u9019\u5169\u500b\u5718\u968a\u5206\u96e2\u800c\u9bae\u5c11\u4ea4\u6d41\uff0c \u4f60\u4ecd\u53ef\u80fd\u9762\u81e8\u524d\u5f8c\u7aef\u4e32\u63a5\u56f0\u96e3\u7684\u7a98\u5883\u3002
\u4ed6\u5011\u7684\u8ca0\u8f09\u6e2c\u8a66\u5f88\u56b4\u8b39\uff08\u81f3\u5c11\u5c31\u6211\u500b\u4eba\u4f86\u8aaa\uff0c\u6c92\u770b\u904e\u9019\u9ebc\u56b4\u8b39\u7684\u8ca0\u8f09\u6e2c\u8a66\uff09\uff0c \u4f7f\u7528\u5be6\u969b\u4f7f\u7528\u8005\u6703\u7528\u7684\u6a5f\u5668\uff08Windows \u800c\u975e Linux\uff09\uff0c\u4e14\u6a5f\u5668\u4eba\u6703\u9ede\u64ca\u9801\u9762\uff0c \u4e26\u6a21\u64ec\u4f7f\u7528\u8005\u6ed1\u52d5\u9801\u9762\uff0c\u9ede\u64ca\u7522\u54c1\u7d30\u7bc0\u7b49\u7b49\uff0c \u4e26\u5728\u6578\u500b\uff08\u7570\u6b65\u4e14\u4f7f\u7528\u4e0d\u540c\u9023\u7dda\uff09\u4f7f\u7528\u8005\u4e2d\u6311\u51fa\u5e7e\u500b\u771f\u7684\u6703\u8d70\u91d1\u6d41\u3001\u8cfc\u8cb7\u7269\u54c1\u7684\u6d41\u7a0b\u3002
\u6e2c\u8a66\u7684\u91cf\u662f\u540c\u6642\u6709 1,200 \u500b\u4f7f\u7528\u8005\u5728\u4f7f\u7528\uff0c \u7576\u7136\u9019\u4e9b\u6d41\u91cf\uff0c\u90fd\u4f86\u6e90\u65bc\u771f\u5be6\u7684\u7dda\u4e0a\u7d71\u8a08\u6578\u64da\uff08\u9019\u9084\u662f\u6de1\u5b63\u7684\u6642\u5019\uff0c\u5f88\u986f\u7136\u5b83\u662f\u500b\u5927\u7db2\u7ad9\uff09\u3002
\u7136\u5f8c\u5728\u6e2c\u8a66\u7684\u6642\u5019\uff0c\u58d3\u529b\u6e2c\u8a66\u8b93\u670d\u52d9\u6574\u500b\u5931\u80fd\uff0c\u5404\u500b\u7bc0\u9ede\u56e0\u70ba\u9ad8\u8ca0\u8f09\uff0c\u88ab\u8feb\u4e2d\u65b7\u3002
\u9019\u662f\u597d\u4e8b\uff0c\u56e0\u70ba\u81f3\u5c11\u4ed6\u5011\u4e0d\u662f\u5728\u7dda\u4e0a\u7684\u74b0\u5883\u4e0b\u958b\u59cb\u4fee\u932f\u548c\u627e\u51fa\u6709\u554f\u984c\u7684\u4f9d\u8cf4\u548c\u670d\u52d9\u3002 \u7d93\u904e\u4e09\u500b\u6708\uff0c\u53cd\u8986\u7684\u8abf\u6574\uff0c\u4e26\u61c9\u7528\u4e00\u4e9b\u7d55\u5999\u7684\u62db\u5f0f\u6210\u529f\u628a\u8ca0\u8f09\u6490\u9ad8\uff0c \u4e26\u5141\u8a31\u627f\u53d7\u7576\u521d\u6e2c\u8a66\u7684\u5341\u500d\uff0c12,000 \u500b\u4f7f\u7528\u8005\u7684\u91cf\u3002 \u662f\u6642\u5019\u8fce\u4f86\u4e0a\u7dda\u4e86\uff01
\u4e5d\u9ede\u4e0a\u7dda\uff0c\u900f\u904e\u5f8c\u53f0\u76e3\u63a7\uff0c\u670d\u52d9\u5728\u4e5d\u9ede\u4e94\u5206\u6642\u7684 session \u91cf\u9054\u5230 10,000\uff1b \u4e5d\u9ede\u5341\u5206\u6642\uff0c\u9054\u5230 50,000\uff1b \u4e5d\u9ede\u4e09\u5341\u5206\u6642\uff0c\u9054\u5230 250,000\uff0c\u4e26\u8b93\u6574\u500b\u670d\u52d9\u5931\u80fd\u4e86\u3002
\u767c\u751f\u4e86\u4ec0\u9ebc\u4e8b\uff1f
\u5373\u4f7f\u9019\u9ebc\u56b4\u8b39\uff0c\u73fe\u5be6\u7684\u60c5\u6cc1\u537b\u6c38\u9060\u6709\u4f60\u60f3\u4e0d\u5230\u7684\u72c0\u6cc1\u767c\u751f\uff1a
\u6211\u8a8d\u70ba\u4e8b\u4ef6\u4e3b\u8981\u6b78\u56e0\u65bc\u5e7e\u9ede\uff1a
\u505a\u4e00\u53f0 server \u548c client\uff0c\u4ed6\u6703\u6a21\u64ec\u4e00\u4e9b\u5e95\u5c64\uff08\u7db2\u8def\u9023\u7dda\u4e0a\uff09\u904b\u4f5c\u7684\u7570\u5e38\u884c\u70ba\uff1a
RST
\u6216\u5176\u4ed6\u53ef\u80fd\uff1bSYN
\u6216 ACK
\u7684\u8a0a\u865f\uff1bACK
\uff0c\u5c0e\u81f4\u4e00\u76f4\u91cd\u65b0\u767c\u9001\uff08retransmission\uff09\uff1b\u7136\u5f8c\u78ba\u4fdd\u904e\u53bb\u7684\u9023\u7dda\u662f\u80fd\u627f\u53d7\u6216\u81f3\u5c11\u4e0d\u6703\u8b93\u9019\u4e9b\u932f\u8aa4\u7684\u9023\u7dda\u5f71\u97ff\u5176\u4ed6\u9023\u7dda\u3002
"},{"location":"feedback/release-it/#\u904b\u884c\u74b0\u5883","title":"\u904b\u884c\u74b0\u5883","text":"\u7576\u7dda\u4e0a\u554f\u984c\u51fa\u932f\u6642\uff0c\u6709\u6642\u4e0d\u662f\u5728\u61c9\u7528\u7a0b\u5f0f\u4e2d\u52a0\u4e0a\u65e5\u8a8c\uff08log\uff09\u5c31\u80fd\u627e\u5230\u7684\uff0c \u4f60\u53ef\u80fd\u6703\u9700\u8981\u9032\u5230\u6a5f\u5668\u4e2d\u9032\u884c\u8a3a\u65b7\u3002 \u53ef\u4ee5\u8a3a\u65b7\u7684\u524d\u63d0\u662f\uff1a\u4f60\u8981\u5c0d\u4f60\u7684\u61c9\u7528\u7a0b\u5f0f\u548c\u5176\u904b\u884c\u74b0\u5883\u6709\u8db3\u5920\u7684\u77ad\u89e3\uff0c\u4ee5\u4e0b\u5206\u5e7e\u500b\u9762\u5411\uff1a
\u76f8\u95dc\u7684\u57fa\u790e\u77e5\u8b58\u548c\u6ce8\u610f\u4e8b\u9805\uff0c \u4e3b\u8981\u5206\u5169\u985e\uff0c\u7db2\u8def\u548c\u96fb\u8166\uff08\u6216\u7a31\u904b\u884c\u63a7\u5236\u3001\u7bc0\u9ede\uff09\uff1a
\u8981\u91d0\u6e05\u6574\u500b\u7db2\u8def\u7684\u904b\u884c\uff0c\u77ed\u77ed\u5e7e\u884c\u5b57\u4e0d\u592a\u53ef\u80fd\uff0c \u6211\u5efa\u8b70\u5c31\u4e00\u9ede\u4e00\u9ede\u5438\u6536\uff0c\u914d\u4e0a\u4e00\u4e9b\u5be6\u52d9\u7d93\u9a57\u6703\u8b93\u4f60\u66f4\u6709\u611f\u3002
\u4e00\u822c\u4f86\u8aaa\uff0c\u6703\u900f\u904e\u7db2\u8def\u53bb\u8d70\u5230\u6307\u5b9a\u7684\u7bc0\u9ede\uff0c\u5176\u4e2d\u8fa8\u8b58\u7bc0\u9ede\u7684\u65b9\u5f0f\u6709\u5169\u7a2e\uff1a
hostname
\u7372\u5f97\u3002\u5169\u8005\u5408\u5728\u4e00\u8d77\u7a31\u70ba \u5b8c\u6574\u7db2\u57df\u540d\u7a31\uff08Fully Qualified Domain Name, FQDN\uff09\u3002 \u63db\u53e5\u8a71\u8aaa\uff0c\u4e00\u53f0\u6a5f\u5668\u53ef\u4ee5\u6709\u5f88\u591a\u500b domain/FQDN\uff0c\u800c\u4e14 Hostname \u53ef\u80fd\u6703\u548c domain \u4e0d\u4e00\u6a23\u3002
\u9664\u6b64\u4e4b\u5916\uff0c\u5728\u958b\u767c\u74b0\u5883\u4e2d NIC \u53ef\u80fd\u6709\u591a\u500b\uff0c\u4f8b\u5982\uff1a
$ ifconfig \nlo0: <loopback>\ngif0: <tunnel for ipv4,6>\nstf0: <tunnel for ipv4,6>\nap1: <access-point mostly for WiFi>\nen0: <ethernet>\nen*: <more ethernet>\nawdl0: <apple wireless direct link for somthing like AirDrop>\nbridge0: <for virtual>\nllw0: <low-latency WLAN>\nutun0: <tunnel for VPN>\nutun*: <more tunnel>\n
\u4f46\u5728\u7dda\u4e0a\u74b0\u5883\u53ef\u80fd\u5c31\u53ea\u6703\u6709\u4e00\u500b\u662f\u7d66\u61c9\u7528\u7a0b\u5f0f\u9023\u7dda\u7528\u3001\u4e00\u500b\u662f\u7d66\u5f8c\u53f0\u7ba1\u7406\u6216\u8cc7\u6599\u5099\u4efd\u7528\uff0c \u9019\u5169\u500b\u63a5\u53e3\u53ef\u80fd\u5404\u81ea\u6709\u7368\u7acb\u7684 IP\uff08\u9019\u6642\u5f88\u53ef\u80fd\u5c31\u5c0d\u61c9\u5230\u4e0d\u540c\u7684 domain\uff09\u3002 \u4e5f\u53ef\u80fd\u662f\u4e00\u500b\u61c9\u7528\u7a0b\u5f0f\u5169\u500b NIC \u4f46\u90fd\u662f\u76f8\u540c\u7684 IP\uff0c \u9019\u6642\u4f7f\u7528\u7684\u6280\u8853\u7a31\u70ba\u642d\u63a5\uff08bonding/teaming\uff09\uff0c\u76ee\u7684\u662f\u5206\u6524\u51fa\u53bb\u7684\u6d41\u91cf\u3002 \u4e5f\u56e0\u70ba\u9019\u6a23\uff0c\u6709\u6642\u5728\u5efa\u7acb\u61c9\u7528\u7a0b\u5f0f\u7684\u6642\u5019\u6211\u5011\u4e0d\u80fd\u7d81\u5b9a\u6240\u6709\u7684 NIC\uff080.0.0.0:8080
\uff09 \u800c\u662f\u8981\u6307\u5b9a domain \u6216 IP\uff08app.example.com:8080
\u6216 172.168.1.2
\uff09\u3002
\u5206\u70ba\u4e09\u985e\uff1a\u5be6\u9ad4\u6a5f\uff08physical host\uff09\u3001 \u865b\u64ec\u6a5f\uff08virtual machine, VM\uff09\u3001 \u5bb9\u5668\uff08container\uff09\uff0c \u6700\u5f8c\u6703\u5728\u4ecb\u7d39\u4e00\u4e9b\u96f2\u7aef\u74b0\u5883\u7684\u6ce8\u610f\u4e8b\u9805\u3002
"},{"location":"feedback/release-it/#\u5be6\u9ad4\u6a5f","title":"\u5be6\u9ad4\u6a5f","text":"\u4e00\u822c\u4f86\u8aaa\u548c\u958b\u767c\u74b0\u5883\u4e26\u4e0d\u6703\u76f8\u5dee\u592a\u591a\uff0c\u90fd\u662f\u591a\u6838\u5fc3\u3001x86\u300164 \u4f4d\u5143\u3001\u76f8\u4f3c\u7684\u6642\u9418\u6676\u7247\u3002 \u4e3b\u8981\u5dee\u7570\u53ef\u80fd\u5728\u65bc\u8cc7\u6599\u4e2d\u5fc3\u7684\u4e3b\u6a5f\u5132\u5b58\u7a7a\u9593\u901a\u5e38\u4e0d\u6703\u592a\u5927\uff0c\u4ed6\u901a\u5e38\u6703\u900f\u904e NAS \u6216 SAN \u4f86\u64f4\u5145\u3002 \u9019\u662f\u70ba\u4e86\u8b93\u55ae\u53f0\u6a5f\u5668\u7684\u6210\u672c\u964d\u4f4e\uff0c\u8b93\u6c34\u5e73\u64f4\u5c55\u53ef\u4ee5\u7bc0\u7701\u5730\u88ab\u9054\u6210\u3002
\u9664\u6b64\u4e4b\u5916\uff0c\u5982\u679c\u6709\u7279\u6b8a\u61c9\u7528\u9700\u8981\u4f7f\u7528\u5230 GPU \u6216\u9ad8 RAM\uff08\u4f8b\u5982\u6a5f\u5668\u5b78\u7fd2\u3001\u5716\u5f62\u904b\u7b97\uff09 \u624d\u6703\u984d\u5916\u8ce6\u4e88\u8a72\u61c9\u7528\u7279\u6b8a\u6a5f\u5668\u3002
"},{"location":"feedback/release-it/#\u865b\u64ec\u6a5f","title":"\u865b\u64ec\u6a5f","text":"\u73fe\u5728\u7684\u7db2\u8def\u61c9\u7528\u7bc0\u9ede\u6beb\u7121\u7591\u554f\u662f\u4ee5\u865b\u64ec\u6a5f\u4f5c\u70ba\u4e3b\u5c0e\uff0c\u96d6\u7136\u72a7\u7272\u4e86\u4e00\u4e9b\u8cc7\u6e90\u90fd\u662f\u537b\u63db\u4f86\u4e86\u5f88\u5927\u7684\u7ba1\u7406\u65b9\u4fbf\u3002 \u4f46\u662f\u865b\u64ec\u6a5f\u9084\u662f\u6709\u4e9b\u554f\u984c\uff0c\u4f8b\u5982\u5b83\u7684\u6548\u80fd\u662f\u96e3\u9810\u671f\u7684\uff0c\u9019\u88e1\u5305\u62ec CPU\u3001\u8a18\u61b6\u9ad4\u3001\u7db2\u8def\u3002 \u9019\u662f\u56e0\u70ba\u639b\u8f09\u865b\u64ec\u6a5f\u7684\u4e3b\u6a5f\uff08host\uff09\uff0c\u6703\u70ba\u4e86\u8cc7\u6e90\u8abf\u5ea6\u800c\u66ab\u505c\u9019\u4e9b\u865b\u64ec\u6a5f\u7684\u904b\u4f5c\u3002
\u9019\u807d\u8d77\u4f86\u53ef\u4ee5\u88ab\u63a5\u53d7\uff0c\u56e0\u70ba\u7db2\u8def\u61c9\u7528\u7684\u6f5b\u6642\u4e00\u76f4\u90fd\u662f\u96e3\u4ee5\u9810\u671f\u7684\uff0c \u4f46\u5982\u679c\u90a3\u4e9b\u88ab\u8feb\u66ab\u505c\u7684\u7bc0\u9ede\u662f\u91cd\u8981\u7684\u670d\u52d9\uff0c\u7206\u70b8\u534a\u5f91\u53ef\u80fd\u5c31\u6703\u5f88\u5927\u4e86\u3002 \u4f8b\u5982\u7ba1\u7406\u53e2\u96c6\u7684\u7bc0\u9ede\uff0c\u5982 auto-scaling\u3001\u670d\u52d9\u767c\u73fe\u6216\u5171\u8b58\u6f14\u7b97\u3002
\u9664\u6b64\u4e4b\u5916\uff0c\u6642\u9418\u7684\u504f\u79fb\u5728\u9019\u500b\u74b0\u5883\u4e0b\uff0c\u7522\u751f\u4e86\u66f4\u5927\u7684\u8b8a\u6578\u3002 \u865b\u64ec\u6a5f\u6703\u70ba\u4e86\u548c\u4e3b\u6a5f\u5c0d\u9f4a\u6642\u9418\u800c\u5f37\u5236\u8abf\u6574\u6642\u9418\uff0c \u5c0d\u61c9\u7528\u4f86\u8aaa\uff0c\u6642\u9593\u5c31\u53ef\u80fd\u6703\u4e82\u8df3\uff08\u6703\u5f80\u524d\u4e5f\u6703\u5f80\u5f8c\uff09\uff0c\u5982\u679c\u61c9\u7528\u662f\u5c0d\u6642\u9593\u654f\u611f\u7684\uff0c\u5c31\u9700\u8981\u6ce8\u610f\u3002
"},{"location":"feedback/release-it/#\u5bb9\u5668","title":"\u5bb9\u5668","text":"\u5bb9\u5668\u901a\u5e38\u662f\u958b\u767c\u8005\u9700\u8981\u53bb\u8a2d\u8a08\u548c\u8abf\u6574\u7684\u904b\u884c\u63a7\u5236\uff0c\u76f8\u5c0d\u800c\u8a00\u865b\u64ec\u6a5f\u5247\u662f\u7cfb\u7d71\u7ba1\u7406\u54e1\u9700\u8981\u53bb\u8655\u7406\u7684\u3002 \u5bb9\u5668\u5f88\u50cf\u5728\u96f2\u7aef\u4e0a\u7ba1\u7406\u865b\u64ec\u6a5f\uff0c\u4f60\u4e0d\u6703\u9810\u671f\u4ed6\u7684 IP \u6046\u4e45\u4e0d\u8b8a\u4e5f\u4e0d\u6703\u628a\u91cd\u8981\u7684\u8cc7\u6599\u653e\u9032\u5176\u6a94\u6848\u7cfb\u7d71\u4e2d\uff0c \u56e0\u70ba\u5b83\u901a\u5e38\u662f\u77ed\u66ab\u5b58\u5728\u7684\u3002
\u5bb9\u5668\u6e1b\u5c11\u4e86\u958b\u767c\u74b0\u5883\u548c\u7dda\u4e0a\u74b0\u5883\u7684\u5dee\u7570\uff0c\u4f46\u4ed6\u4ecd\u6709\u4e00\u4e9b\u56f0\u5883\uff0c\u7136\u800c\u96a8\u8457\u5176\u767c\u5c55\uff0c\u9019\u4e9b\u56f0\u5883\u5df2\u7d93\u4e00\u4e00\u88ab\u89e3\u6c7a\u4e86\u3002 \u4e0d\u904e\u5728\u4f7f\u7528\u4e0a\u4ecd\u9700\u8981\u6ce8\u610f\u4e00\u4e9b\u4e8b\u60c5\uff1a
\u4f60\u6703\u9700\u8981\u4e00\u4e9b\u6642\u9593\u53bb\u9069\u61c9\u5bb9\u5668\u7684\u9664\u932f\u3002
\u5bb9\u5668\u7684\u56f0\u5883\u7db2\u8def\u5728\u5bb9\u5668\u4e16\u754c\u662f\u8907\u96dc\u7684\uff0c\u56e0\u70ba\u4f60\u53ef\u80fd\u4e0d\u6703\u5728 host \u4e0a\u66b4\u9732\u4ed6\u7684\u7db2\u8def\u57e0\uff0c \u4f46\u537b\u9700\u8981\u8b93\u4ed6\u6709\u80fd\u529b\u5c0d\u5916\u9023\u7dda\uff08\u63db\u53e5\u8a71\u8aaa\uff0c\u53ea\u51fa\u4e0d\u9032\uff09\u3002 \u6211\u5011\u901a\u5e38\u6703\u4f7f\u7528 VLAN\uff08\u6216\u8005\u8aaa\uff0coverlay network\uff09\u53bb\u6a4b\u63a5\u9019\u500b\u9023\u7dda\uff0c\u4e26\u7528\u8edf\u9ad4\u4ea4\u63db\u5668\u53bb\u4ea4\u63db\u5c01\u5305\u3002
\u9664\u6b64\u4e4b\u5916\uff0c\u5bb9\u5668\u901a\u5e38\u662f\u5c0f\u800c\u591a\u7684\uff0c\u6240\u4ee5\u4f60\u6703\u9700\u8981\u4e00\u500b\u81ea\u52d5\u5316\u7684\u7ba1\u7406\u7cfb\u7d71\uff08\u6216\u8005\u8aaa\uff0ccontrol plane\uff09\u3002
"},{"location":"feedback/release-it/#\u96f2\u7aef","title":"\u96f2\u7aef","text":"\u96d6\u7136\u4f60\u9700\u8981\u82b1\u4e9b\u6642\u9593\u642c\u9077\u61c9\u7528\u5230\u96f2\u7aef\u4e0a\uff0c\u4f46\u662f\u96f2\u7aef\u74b0\u5883\u63d0\u4f9b\u5f88\u591a\u512a\u52e2\uff0c \u6700\u4e3b\u8981\u7684\u5c31\u662f\u53ef\u7528\u6027\uff08\u9069\u5408\u505a auto-scaling\uff09\u548c\u4f4e\u6210\u672c\u3002\u4f46\u662f\u5728\u96f2\u7aef\u9700\u8981\u6ce8\u610f\uff1a
\u96f2\u7aef\u4e0a\u7684\u5bb9\u5668\u540c\u6642\u9762\u81e8\u8457 \u5bb9\u5668 \u548c \u96f2\u7aef\u4e0a\u7684\u865b\u64ec\u6a5f \u6703\u6709\u7684\u56f0\u5883\u3002 \u4f46\u662f\u96a8\u8457\u96f2\u7aef\u670d\u52d9\u7684\u6210\u719f\uff0c\u9019\u4e9b\u56f0\u96e3\u5176\u5be6\u90fd\u4e0d\u662f\u56f0\u96e3\uff0c\u53ea\u662f\u6703\u9700\u8981\u4f60\u82b1\u9ede\u6642\u9593\u53bb\u7814\u7a76\u548c\u7d2f\u7a4d\u7dad\u904b\u7d93\u9a57\u3002
"},{"location":"feedback/release-it/#\u55ae\u4e00\u7bc0\u9ede","title":"\u55ae\u4e00\u7bc0\u9ede","text":"\u55ae\u4e00\u7bc0\u9ede\u96d6\u7136\u53ea\u662f\u4e00\u500b\u9f90\u5927\u670d\u52d9\u7684\u57fa\u77f3\uff0c\u4f46\u662f\u5efa\u69cb\u826f\u597d\u7684\u7bc0\u9ede\uff0c\u6703\u5e6b\u52a9\u4f60\u5728\u5f8c\u7e8c\u7dad\u904b\u5927\u578b\u670d\u52d9\u7701\u4e0b\u5f88\u591a\u529f\u592b\u3002 \u800c\u6240\u8b02\u7684\u826f\u597d\u7bc0\u9ede\u7684\u8a2d\u8a08\uff0c\u901a\u5e38\u662f\u5728\u958b\u767c\u521d\u671f\u5c31\u8003\u616e\u9032\u53bb\uff0c\u5305\u62ec\u5f8c\u9762\u63d0\u7684\u670d\u52d9\u7684\u900f\u660e\u5316\u3002
\u90e8\u7f72\u548c\u8a2d\u5b9a\u7e3d\u7d50\u5e7e\u9ede\u6ce8\u610f\uff1a
\u76e3\u63a7\u7e3d\u7d50\u5e7e\u9ede\u6ce8\u610f\uff1a
/var/logs
\uff09\uff0c\u5bb9\u5668\u7684\u8a71\u55ae\u7d14\u8f38\u51fa\u5230 stdout
\u5c31\u53ef\u4ee5\u3002error
\u5c64\u7d1a\u7684\u65e5\u8a8c\u5e38\u614b\u51fa\u73fe\uff08\u4f8b\u5982\u4f7f\u7528\u8005\u8f38\u5165\u683c\u5f0f\u932f\u8aa4\u4e0d\u61c9\u70ba error
\uff09\u3002\u96a8\u8457\u6d41\u91cf\u8b8a\u591a\u6216\u70ba\u4e86\u9ad8\u53ef\u7528\u6027\uff08High Availability, HA\uff09\uff0c\u4e00\u500b\u670d\u52d9\u958b\u59cb\u5f9e\u55ae\u4e00\u7bc0\u9ede\u6210\u9577\u70ba\u4e00\u500b\u53e2\u96c6\u3002 \u9019\u6642\u6211\u5011\u770b\u5f85\u670d\u52d9\u5c31\u4e0d\u662f\u5f9e\u7bc0\u9ede\u7684\u89d2\u5ea6\u53bb\u770b\uff0c \u800c\u662f\u4e00\u500b\u7531\u670d\u52d9\u767c\u73fe\uff08service discovery\uff09\u3001\u8ca0\u8f09\u5e73\u8861\uff08load balance\uff09\u7d44\u6210\u7684\u53e2\u96c6\u3002
\u9019\u985e\u5de5\u5177\u5f88\u591a\uff0c\u5f9e\u50b3\u7d71\u7684\u55ae\u4e00\u8077\u8cac\u7684 ZooKeeper\u3001Consul\u3001Nginx\uff0c \u5230\u73fe\u5728\u5168\u90e8\u6574\u5408\u7684 Kubernetes\uff08\u6216\u6709\u9ede\u904e\u6642\u4f46\u5176\u5be6\u624d\u51fa\u751f\u5341\u5e7e\u5e74\u7684 Mesos\uff09\u3002 \u6211\u5011\u5728\u4f7f\u7528\u9019\u4e9b\u5de5\u5177\u7684\u6642\u5019\uff0c \u8981\u8003\u91cf\u5f9e\u516c\u53f8\u7684\u898f\u6a21\u3001\u670d\u52d9\u7684\u67b6\u69cb\u5230\u9019\u4e9b\u5de5\u5177\u672c\u8eab\u7684\u8fed\u4ee3\u6027\u548c\u52d5\u614b\uff08\u81ea\u52d5\u5316\uff09\u6027\uff0c \u4e5f\u5c31\u662f\u8aaa\u9019\u5de5\u5177\u662f\u5426\u65b9\u4fbf\u88ab\u66ff\u63db\u548c\u5347\u7d1a\u3002
\u9019\u88e1\u6211\u5011\u6703\u8ac7\u4e09\u7a2e\u985e\u578b\u7684\u8ca0\u8f09\u5e73\u8861\u65b9\u5f0f\uff0cDNS\u3001GSLB \u548c\u55ae\u7d14\u7684 LB\u3002 \u63a5\u8457\u518d\u8ac7\u5230\u76f8\u61c9\u7684 \u8cc7\u6e90\u7ba1\u7406 \u548c \u7db2\u8def\u8a2d\u5b9a \u7684\u6ce8\u610f\u4e8b\u9805\u3002
"},{"location":"feedback/release-it/#dns","title":"DNS","text":"\u53ea\u6709\u4eba\u624d\u80fd\u6c7a\u5b9a\u73fe\u5728\u9019\u500b\u670d\u52d9\u8981\u7528\u4ec0\u9ebc\u9818\u57df\u540d\u7a31\uff08domain name\uff09\uff0c\u800c\u9019\u500b\u540d\u7a31\u901a\u5e38\u662f\u4e0d\u6703\u6539\u8b8a\u7684\u3002 \u7576\u9019\u500b\u57df\u540d\u88ab\u6c7a\u5b9a\u4e86\uff0c\u5c31\u53ef\u4ee5\u8a3b\u518a\u9032 DNS \u4e2d\u3002 \u9019\u88e1\u8981\u6ce8\u610f\u7684\u662f\u7db2\u57df\u540d\u7a31\u53ef\u4ee5\u662f\u552f\u4e00\uff0c\u4f46\u662f\u76ee\u7684\u5730\u4f4d\u7f6e\u53ef\u80fd\u662f\u5206\u6563\u5728\u4e16\u754c\u5404\u5730\u3002
\u4f46\u662f\u5c0d\u65bc\u670d\u52d9\u63d0\u4f9b\u8005\u4f86\u8aaa\uff0c\u5373\u4f7f\u9001\u51fa\u591a\u500b IP \u4f4d\u7f6e\uff0c\u6700\u7d42\u5ba2\u6236\u9078\u64c7\u8981\u4f7f\u7528\u54ea\u500b IP\uff0c\u662f\u5ba2\u6236\u6c7a\u5b9a\u7684\u3002 \u5b83\u53ef\u80fd\u662f\u50b3\u7d71\u7684\u5faa\u74b0\u6bd4\u5c0d\uff08round robin\uff09\uff0c\u6216\u8005\u4f9d\u7167\u700f\u89bd\u5668\u7684\u908f\u8f2f\u53bb\u5224\u65b7\uff0c \u9019\u6642\u8981\u5229\u7528\u9019\u500b\u6a5f\u5236\u53bb\u505a\u5230\u5f48\u6027\u7684\u8ca0\u8f09\u5e73\u8861\uff0c\u5c31\u4e0d\u592a\u5be6\u969b\u4e86\uff0c\u56e0\u70ba\u63a7\u5236\u6b0a\u4e0d\u5728\u4f60\u8eab\u4e0a\u3002
\u95dc\u65bc DNS \u7684\u5f48\u6027
\u9019\u88e1\u6240\u8aaa\u7684\u5f48\u6027\uff0c\u662f\u6307\u7576\u670d\u52d9\u964d\u8f09\u751a\u81f3\u5931\u80fd\u4e86\uff0c\u5c31\u9700\u8981\u907f\u514d\u5ba2\u6236\u518d\u9001\u8acb\u6c42\u904e\u4f86\u3002 \u9019\u6642\uff0c\u5f48\u6027\u4e14\u5feb\u901f\u7684\u963b\u6b62\u6bcf\u500b DNS \u767c\u9001\u9019\u500b\u5931\u80fd\u7684 IP \u662f\u56f0\u96e3\u7684\u3002 \u56e0\u70ba DNS \u7684\u904b\u4f5c\u662f\u8907\u96dc \uff08\u53ef\u4ee5\u8aaa\u662f\u7db2\u8def\u4e16\u754c\u4e2d\u6700\u8907\u96dc\u7684\u4e00\u584a\uff0c \u60f3\u60f3\u90a3\u4e9b\u8def\u7531\u7684\u5354\u5b9a\uff0cRIP\u3001EIGRP\u3001OSPF\u3001BGP\uff09 \u4e14\u591a\u500b DNS server \u4e26\u4e0d\u662f\u7531\u4e00\u500b\u7d71\u4e00\u7684\u55ae\u4f4d\u7ba1\u7406\u7684\uff0c\u5728\u8a2d\u5b9a\u4e0a\u5f88\u53ef\u80fd\u51fa\u73fe\u5206\u6b67\u3002
"},{"location":"feedback/release-it/#gslb","title":"GSLB","text":"\u5c0d\u65bc\u9019\u7a2e\u4e0d\u540c\u5730\u5340\u7684\u8ca0\u8f09\u5e73\u8861\uff0c\u66f4\u5e38\u898b\u7684\u662f\u63d0\u4f9b\u591a\u500b GSLB\u3002 GSLB \u53ef\u4ee5\u505a\u5230\u6aa2\u67e5\u4e0b\u6e38\u7684\u5065\u5eb7\u72c0\u6cc1\u3001\u5f48\u6027\u5206\u914d\u6d41\u91cf\u5230\u4e0d\u540c\u7bc0\u9ede\uff0c \u6700\u91cd\u8981\u7684\u662f\u5b83\u901a\u5e38\u6b78\u4f60\u6240\u7ba1\uff0c\u6240\u4ee5\u4f60\u53ef\u4ee5\u5feb\u901f\u5c0d\u5b83\u9032\u884c\u4efb\u4f55\u8a2d\u5b9a \uff08\u7576\u7136\uff0c\u8a2d\u5b9a\u932f\u4e86\u5c31\u6703\u6b7b\u5f88\u5feb\uff09\u3002
\u5982\u679c\u4f60\u6709\u591a\u500b GSLB\uff08\u591a\u500b\u8cc7\u6599\u4e2d\u5fc3\uff09\uff0c\u4f60\u5fc3\u88e1\u8981\u6709\u500b\u5e95\uff1a \u4e26\u4e0d\u662f\u6bcf\u6b21\u8acb\u6c42\uff0c\u5ba2\u6236\u90fd\u6703\u4e56\u4e56\u7167\u8457\u524d\u6b21\u7684 GSLB \u9032\u4f86\u3002
"},{"location":"feedback/release-it/#\u8ca0\u8f09\u5e73\u8861\u5668","title":"\u8ca0\u8f09\u5e73\u8861\u5668","text":"\u9019\u5176\u5be6\u548c GSLB \u7684\u5de5\u4f5c\u8077\u8cac\u5f88\u50cf\uff0c\u53ea\u662f GSLB \u901a\u5e38\u662f\u4efb\u4f55\u5916\u90e8\u7684\u4eba\u90fd\u9023\u5f97\u5230\uff0c \u4f46\u662f\u9019\u88e1\u7684\u8ca0\u8f09\u5e73\u8861\u5668\u662f\u6307\u67d0\u670d\u52d9\uff08\u6216\u591a\u500b\u670d\u52d9\uff09\u524d\u9762\u7684\u5e73\u8861\u5668\uff0c \u901a\u5e38\u6703\u88ab\u653e\u9032\u79c1\u6709\u7684\u7db2\u8def\u74b0\u5883\u4e2d\uff0c\u4e26\u7b49\u5f85 GSLB \u628a\u6d41\u91cf\u5c0e\u6d41\u9032\u4f86\u3002
\u5982\u679c\u9019\u500b\u5e73\u8861\u5668\u662f\u8ca0\u8cac\u591a\u500b\u670d\u52d9\u7684\uff0c\u4ed6\u5c31\u6703\u6709\u5f88\u591a VIP(s)\uff0c\u7136\u5f8c\u6bcf\u500b IP \u5c0d\u61c9\u4e00\u500b\u670d\u52d9\uff08\u591a\u7bc0\u9ede\uff09\u3002
\u8ca0\u8f09\u5e73\u8861\u5668\u5176\u5be6\u548c GSLB \u4e00\u6a23\u90fd\u9700\u8981\u8a2d\u5b9a\uff1a
\u5c0d\u65bc\u5e73\u8861\u5668\u4f86\u8aaa\uff0c\u4e0d\u518d\u662f\u4ee5\u4e3b\u6a5f\u540d\u7a31\uff08hostname\uff09\u4f86\u505a\u641c\u5c0b\u540d\u7a31\uff0c\u800c\u662f\u4ee5\u5916\u90e8\u7db2\u5740 \uff08\u4e5f\u5c31\u662f domain\uff0c\u5176\u5be6\u672c\u4f86\u5c31\u662f\u9019\u6a23\uff0c\u53ea\u662f\u9019\u908a\u518d\u5f37\u8abf\u4e00\u6b21 hostname \u8ddf domain \u7684\u5dee\u7570\uff09\u3002
\u9664\u6b64\u4e4b\u5916\uff0c\u6709\u6642\u4ed6\u4e0d\u662f\u7528\u4f86\u505a\u300c\u8ca0\u8f09\u5e73\u8861\u300d\u800c\u662f\u670d\u52d9\u5f15\u5c0e\uff0c \u4f8b\u5982 HTTP \u8def\u5f91\u70ba /login
\u8d70\u9019\u3001/profile
\u8d70\u90a3\u3002
\u6d41\u91cf\u589e\u9577\u53ef\u80fd\u6703\u8017\u76e1\u7cfb\u7d71\u7684\u8cc7\u6e90\uff0c\u4ee5\u7db2\u8def\u70ba\u4f8b\uff0c\u6709\u5e7e\u9ede\u8981\u6ce8\u610f\uff1a
TIME_WAIT
\u72c0\u614b\uff09\u3002listen
socket \u7684\u4f47\u5217\uff0c \u53ea\u6709\u6210\u529f\u5efa\u7acb\u9023\u7dda\u7684 socket \u624d\u6703\u958b\u59cb\u79fb\u4ea4\u7d66\u61c9\u7528\u7a0b\u5f0f\u7aef\uff0c \u6240\u4ee5\u4f60\u53ef\u80fd\u6703\u6709\u5f88\u591a\u6b63\u5728\u4f47\u5217\u7684\u9023\u7dda\u3002\u7576\u4e0a\u8ff0\u884c\u70ba\u8e29\u5230\u9650\u5236\uff0c\u5c31\u6703\u958b\u59cb\u62d2\u7d55\u9032\u4f86\u7684\u8acb\u6c42\uff0c \u9032\u800c\u4fc3\u767c\u8acb\u6c42\u7aef\u91cd\u65b0\u5617\u8a66\u9023\u7dda\u6216\u91cd\u65b0\u767c\u9001\u8cc7\u6599\u7684\u6a5f\u5236\uff0c \u52a0\u91cd\u670d\u52d9\u7684\u8ca0\u64d4\u3002 \u9664\u6b64\u4e4b\u5916\uff0c\u4e00\u500b\u9023\u7dda\u6703\u6b77\u7d93\u5f88\u591a\u968e\u6bb5\u7684\u8655\u7406\uff0c\u9019\u6642\u5982\u679c\u61c9\u7528\u5c64\u7aef\u7684\u670d\u52d9\u5df2\u7d93\u6eff\u8f09\u4e86\uff0c \u6211\u5011\u7576\u7136\u6703\u5e0c\u671b\u8acb\u6c42\u5728\u5f88\u65e9\u7684\u968e\u6bb5\u5c31\u88ab\u56de\u62d2\u3002
\u4e00\u500b\u5065\u5168\u7684\u8ca0\u8f09\u5e73\u8861\u5668\uff0c\u5c31\u5f88\u9069\u5408\u5728\u6700\u4e00\u958b\u59cb\u5c31\u62d2\u7d55\u8acb\u6c42\uff0c\u6e1b\u8f15\u670d\u52d9\u7684\u8ca0\u64d4\u3002 \u9019\u6642\uff0c\u61c9\u7528\u7a0b\u5f0f\u7684\u5065\u5eb7\u6aa2\u67e5\u5c31\u5f88\u91cd\u8981\u4e86\uff0c \u8b93\u61c9\u7528\u7a0b\u5f0f\u63d0\u4f9b\u5b8c\u6574\u7684\u8cc7\u8a0a\uff0c\u9032\u800c\u8b93\u8ca0\u8f09\u5e73\u8861\u5668\u6709\u80fd\u529b\u5224\u65b7\u4e1f\u9032\u53bb\u7684\u91cf\u3002
\u9664\u6b64\u4e4b\u5916\uff0c\u4e5f\u53ef\u4ee5\u4f7f\u7528\u4e00\u4e9b\u9069\u61c9\u6027\u4e26\u884c\u8655\u7406\u7684\u6a5f\u5236\uff0c \u7136\u5f8c\u9019\u500b\u56de\u61c9\u53ef\u4ee5\u662f\u55ae\u7d14\u7684 HTTP 503 Service Unavailable\u3002
"},{"location":"feedback/release-it/#\u7db2\u8def\u76f8\u95dc\u7684\u6ce8\u610f\u4e8b\u9805","title":"\u7db2\u8def\u76f8\u95dc\u7684\u6ce8\u610f\u4e8b\u9805","text":"\u9019\u88e1\u6709\u5e7e\u500b\u9762\u5411\u53ef\u4ee5\u8003\u616e\uff1a
\u53e2\u96c6\u7ba1\u7406\u4e26\u4e0d\u662f\u4e00\u500b\u7c21\u55ae\u7684\u516c\u5f0f\uff0c\u628a\u6578\u5b57\u4ee3\u9032\u53bb\u5c31\u53ef\u4ee5\u5f97\u5230\u7d50\u679c\u3002 \u6211\u5011\u9700\u8981\u8003\u91cf\u81ea\u5df1\u7684\u9700\u6c42\u548c\u74b0\u5883\uff08\u8fed\u4ee3\u7387\u3001\u5373\u6642\u6027\u3001\u7dad\u904b\u6027\uff09\uff0c\u4f86\u6c7a\u5b9a\u6211\u5011\u9700\u8981\u88dc\u8db3\u54ea\u500b\u9762\u5411\u7684\u4e0d\u8db3\u3002
\u53e2\u96c6\u7ba1\u7406\u5de5\u5177\u662f\u7528\u4f86\u6e1b\u8f15\u4eba\u985e\u8ca0\u64d4\uff0c \u6240\u4ee5\u7576\u4e00\u500b\u4eba\u985e\u56e0\u70ba\u932f\u8aa4\u64cd\u4f5c\u5c0e\u81f4\u53e2\u96c6\u5931\u80fd\uff0c \u6211\u5011\u61c9\u8a72\u6b78\u548e\u65bc\u5de5\u5177\u7684\u5075\u932f\u6027\u548c\u7ba1\u7406\u6027\u7684\u5931\u80fd\u3002 \u4f46\u9019\u4e5f\u56de\u61c9\u5230\u53e2\u96c6\u7ba1\u7406\u4e26\u4e0d\u662f\u9b54\u6cd5\uff0c \u4ed6\u4ecd\u7136\u662f\u4e00\u884c\u4e00\u884c\u7684\u7a0b\u5f0f\u78bc\uff0c \u6240\u4ee5\u5728\u770b\u5230\u4e00\u4e9b\u6587\u7ae0\u6216\u65b0\u805e\u5728\u63a8\u5ee3\u67d0\u500b\u7ba1\u7406\u5de5\u5177\uff08\u4f8b\u5982 K8s\uff09\u6642\uff0c \u61c9\u9996\u5148\u601d\u8003\u9019\u5de5\u5177\u662f\u5426\u7b26\u5408\u9700\u6c42\uff0c \u5efa\u7f6e\u3001\u7dad\u904b\u3001\u62c6\u9664\uff08\u5de5\u5177\u4e00\u5b9a\u6703\u6709\u8fed\u4ee3\uff09\u7684\u6210\u672c\u548c\u5176\u5e36\u4f86\u7684\u6548\u76ca\u3002
AWS \u7684\u5931\u80fd\u6848\u4f8bAWS 2017 \u5e74\u767c\u751f\u7684 S3 \u5931\u80fd\u4e8b\u4ef6\uff0c \u5176\u4e2d\u7684\u5c4d\u6aa2\u5831\u544a\u53ef\u4ee5\u770b\u5230\uff1a
\u4e00\u4f4d\u6388\u6b0a\u7684\u7ba1\u7406\u8005\u6839\u64da\u6307\u5357\u9032\u884c\u64cd\u4f5c\uff0c\u5728\u57f7\u884c\u4e00\u500b\u95dc\u9589\u55ae\u4e00\u7bc0\u9ede\u7684\u6307\u4ee4\u6642\uff0c \u56e0\u70ba\u6307\u4ee4\u7684\u932f\u8aa4\uff0c\u5c0e\u81f4\u95dc\u9589\u4e86\u5927\u90e8\u5206\u7684\u7bc0\u9ede\u3002
\u5728\u6b64\u6211\u5011\u53ef\u4ee5\u53cd\u601d\u5e7e\u4ef6\u4e8b\u60c5\uff1a
\u6211\u5011\u6703\u5148\u91d0\u6e05\u300c\u53e2\u96c6\u7ba1\u7406\u548c\u88ab\u7ba1\u7406\u7684\u670d\u52d9\u300d\u4e4b\u9593\u7684\u95dc\u4fc2\uff0c \u63a5\u8457\u8a66\u8457\u8b93\u300c\u670d\u52d9\u900f\u660e\u5316\u300d\u4e5f\u5c31\u662f\u5229\u65bc\u7ba1\u7406\u3002 \u7576\u670d\u52d9\u9700\u8981\u7684\u7bc0\u9ede\u6578\u8d8a\u4f86\u8d8a\u591a\u6642\uff0c \u9700\u8981\u4e00\u4e9b\u300c\u5099\u7f6e\u548c\u90e8\u7f72\u300d\u7684\u81ea\u52d5\u5316\u5de5\u5177\u5354\u52a9\u7ba1\u7406\uff0c \u6700\u5f8c\u6709\u4e9b\u670d\u52d9\u4e0d\u9069\u5408\u5feb\u901f\u91cd\u555f\uff0c\u9700\u8981\u4e00\u500b\u300c\u63a7\u5236\u7ba1\u7406\u7684\u4ecb\u9762\u300d\u3002
"},{"location":"feedback/release-it/#\u5e73\u81fa\u548c\u4f7f\u7528\u8005\u7684\u95dc\u4fc2","title":"\u5e73\u81fa\u548c\u4f7f\u7528\u8005\u7684\u95dc\u4fc2","text":"\u6211\u5011\u9996\u5148\u5206\u5225\u4ee5 \u76e3\u63a7\u7cfb\u7d71 \u548c \u8cc7\u6599\u5eab \u4f86\u6aa2\u8996\u4e00\u4e0b\u73fe\u5728\u7684\u8edf\u9ad4\u74b0\u5883\u4e2d \u5e73\u53f0\u5efa\u7f6e\u8005\u548c\u958b\u767c\u4eba\u54e1\u4e4b\u9593\u7684\u95dc\u4fc2\u3002
\u73fe\u5728\u6709\u5f88\u591a\u958b\u6e90\u7684\u76e3\u63a7\u7cfb\u7d71\uff0c\u7576\u4f60\u628a\u5e73\u53f0\u5efa\u7f6e\uff08\u53ef\u80fd\u662f\u7cfb\u7d71\u5de5\u7a0b\u5e2b\uff09\u8d77\u4f86\u4e4b\u5f8c\uff0c\u662f\u600e\u9ebc\u8b93\u958b\u767c\u4eba\u54e1\u4f7f\u7528\u7684\uff1f \u65e9\u671f\u53ef\u80fd\u662f\u958b\u767c\u4eba\u54e1\u586b\u55ae\u5b50\uff0c\u8acb\u76f8\u95dc\u4eba\u54e1\u505a\u597d\u61c9\u7528\u7a0b\u5f0f\u7684\u76e3\u63a7\u3002 \u4f46\u96a8\u8457\u767c\u5c55\uff08DevOps\uff09\uff0c\u958b\u767c\u8005\u4e5f\u6162\u6162\u958b\u59cb\u50be\u5411\u81ea\u5df1\u8a2d\u5b9a\u548c\u8abf\u6574\u76f8\u95dc\u76e3\u63a7\u3002 \u9019\u6709\u9ede\u50cf\u662f\u5beb\u7a0b\u5f0f\u6642\u7684\u4ecb\u9762\uff08interface\uff09\uff0c \u5efa\u7f6e\u4eba\u54e1\u505a\u597d\u4e00\u500b\u5f48\u6027\u5f88\u9ad8\u7684\u5e73\u53f0\u5f8c\uff0c\u8b93\u958b\u767c\u4eba\u54e1\u586b\u597d\u81ea\u5df1\u7684\u5be6\u4f5c\u3002
\u9019\u4ee3\u8868\u4e4b\u4e2d\u7684\u8cac\u4efb\u79fb\u8f49\u4e86\uff0c\u5e73\u53f0\u5efa\u7f6e\u4eba\u54e1\u5c08\u6ce8\u65bc\u591a\u6a23\u5316\u3001\u7a69\u5b9a\u548c\u6709\u6548\u7387\u7684\u5e73\u53f0\uff0c \u958b\u767c\u4eba\u54e1\u5c08\u6ce8\u65bc\u61c9\u7528\u908f\u8f2f\uff0c\u8abf\u6574\u6c34\u4f4d\u3001\u793a\u8b66\u95a5\u503c\u3001 \u670d\u52d9\u6307\u6a19\uff08SLA\uff09\u7b49\u7b49\u3002
\u540c\u6a23\u7684\u72c0\u6cc1\u767c\u751f\u5728\u8cc7\u6599\u5eab\u4e2d\uff0c DBA\uff08Database Architecture\uff09\u7684\u5de5\u4f5c\u61c9\u8a72\u662f\u5efa\u7acb\u4e00\u500b\u9ad8\u6548\u7387\u548c\u7a69\u5b9a\u7684\u8cc7\u6599\u5eab\u3002 \u4f46\u662f\u65e9\u671f RDBMS \u7684\u7cfb\u7d71\u4e0b\uff0c\u61c9\u7528\u7a0b\u5f0f\u7684\u8a2d\u8a08\u908f\u8f2f\u6703\u5927\u5927\u5f71\u97ff\u8cc7\u6599\u5eab\u7684\u7a69\u5b9a\u5ea6\uff0c \u6162\u6162\u7684 DBA \u5c31\u8b8a\u6210 DBA(Database Administrator)\uff0c\u958b\u59cb\u8981\u7ba1\u7406\u61c9\u7528\u7a0b\u5f0f\u7684\u8cc7\u6599\u5eab\u908f\u8f2f\u3002
\u9019\u4e5f\u662f NoSQL \u904b\u52d5\u7684\u80cc\u666f\u56e0\u7d20\u4e4b\u4e00\uff0c\u5617\u8a66\u8981\u628a\u8cc7\u6599\u5eab\u7ba1\u7406\u548c\u61c9\u7528\u908f\u8f2f\u62bd\u96e2\u3002
\u9019\u4e9b\u6b77\u53f2\u77e5\u8b58\uff0c\u90fd\u53ef\u4ee5\u5e6b\u52a9\u6211\u5011\u66b8\u89e3\uff0c\u4e00\u500b\u53e2\u96c6\u7ba1\u7406\u5de5\u5177\u61c9\u8a72\u8981\u9577\u6210\u4ec0\u9ebc\u6a23\u5b50\uff0c \u6211\u5011\u4e0d\u4eff\u628a K8s \u5957\u7528\u5728\u9019\u500b\u95dc\u4fc2\u4e4b\u4e2d\uff0c\u7136\u5f8c\u601d\u8003\u4e00\u4e0b\u5b83\u73fe\u5728\u7684\u6a23\u5b50\u662f\u4e00\u500b\u7406\u60f3\u7684\u6a23\u5b50\u55ce\uff1f
\u600e\u9ebc\u77e5\u9053\u73fe\u884c\u5de5\u5177\u4e0d\u9069\u5408\uff1f
\u4f5c\u8005\u63d0\u4f9b\u4e00\u500b\u601d\u8003\u9ede\uff1a
\u5982\u679c\u4f60\u767c\u73fe\u4f60\u7684\u5de5\u4f5c\u662f\u6bcf\u5929\uff08\u6216\u6bcf\u9694\u5e7e\u5929\uff09\u90fd\u6709\u500b\u56fa\u5b9a\u4e8b\u60c5\u8981\u505a\uff0c\u4f8b\u5982\u91cd\u555f\u670d\u52d9\u3002 \u9019\u5c31\u662f\u4e00\u500b\u5f88\u5f37\u7684\u8ad6\u9ede\u8aaa\u660e\u73fe\u884c\u7684\u5de5\u5177\u5df2\u7d93\u4e0d\u9069\u5408\u4f7f\u7528\u4e86\u3002
"},{"location":"feedback/release-it/#\u670d\u52d9\u7684\u900f\u660e\u5316","title":"\u670d\u52d9\u7684\u900f\u660e\u5316","text":"\u8981\u600e\u9ebc\u77e5\u9053\u4f60\u7684\u670d\u52d9\u6216\u7bc0\u9ede\u73fe\u5728\u7684\u5065\u5eb7\u72c0\u6cc1\u600e\u9ebc\u6a23\u4e86\uff1f \u900f\u660e\u5316\u4f60\u7684\u670d\u52d9\u3002
\u76e3\u63a7\u7cfb\u7d71\u767e\u767e\u7a2e\uff0c\u65e9\u671f\u6bcf\u7a2e\u985e\u578b\u7684\u76e3\u63a7\u90fd\u9700\u8981\u4ed8\u4e0a\u5927\u7b46\u9214\u7968\u4f86\u8cfc\u8cb7\u4f01\u696d\u7684\u670d\u52d9\uff0c \u4f46\u73fe\u5728\u958b\u6e90\u670d\u52d9\u904d\u5730\u958b\u82b1\uff0c\u6211\u5011\u9078\u64c7\u7684\u57fa\u6e96\u662f\u4ec0\u9ebc\uff1f
\u4ee5\u9019\u4e9b\u70ba\u51fa\u767c\u9ede\uff0c\u627e\u5230\u90a3\u4e9b\u61c9\u7528\u7a0b\u5f0f\u9700\u8981\u6ce8\u610f\u7684\u5730\u65b9\uff0c\u4f8b\u5982\uff1a
\u4f9d\u7167\u9019\u4e9b\u6771\u897f\uff0c\u5c31\u53ef\u4ee5\u53bb\u8a2d\u8a08\u6211\u8a72\u6536\u96c6\u54ea\u4e9b\u65e5\u8a8c\u3001\u6307\u6a19\u548c\u793a\u8b66\u3002 \u540c\u6642\u9084\u8981\u8003\u91cf\u5404\u7a2e\u6210\u672c\uff0c\u5305\u62ec\uff1a\u958b\u767c\u3001\u5efa\u7f6e\u3001\u57fa\u790e\u8a2d\u65bd\u3001\u7dad\u904b\u548c\u6548\u7387\uff08\u8a2d\u5b9a\u512a\u5316\uff09\u3002 \u9019\u4e9b\u90fd\u662f\u4ee5\u76ee\u6a19\uff08\u8cfa\u9322\u3001\u7701\u9322\uff0c\u597d\u7528\u3001\u7a69\u5b9a\uff09\u70ba\u601d\u8003\u9ede\uff0c\u56de\u6263\u5230\u505a\u6cd5\uff0c \u800c\u975e\u5f9e\u6280\u8853\u5c64\u9762\u70ba\u7acb\u8db3\u9ede\u3002
\u53e6\u5916\u5728\u9078\u64c7\u670d\u52d9\u4e2d\u54ea\u4e9b\u8cc7\u8a0a\u8981\u66b4\u9732\u6642\uff0c\u901a\u5e38\u662f\u6240\u6709\u6771\u897f\u90fd\u66b4\u9732\u51fa\u4f86\uff0c \u5be6\u969b\u5728\u505a\u7dad\u904b\u7684\u6642\u5019\uff0c\u7576\u767c\u751f\u60f3\u8981\u7684\u8cc7\u8a0a\u6c92\u6709\u66b4\u9732\u6642\uff0c \u5c31\u53ea\u80fd\u770b\u5230\u5169\u500b\u5de5\u7a0b\u5e2b\u76f8\u8996\u800c\u7b11\uff0c\u5169\u624b\u4e00\u6524\u3002
\u62fc\u5716\u9084\u7f3a\u4e86\u54ea\u4e00\u584a
\u5c31\u50cf\u5c1a\u672a\u51fa\u73fe\u7684\u6574\u5408\u8cc7\u6599\u7684\u670d\u52d9\u4e00\u6a23\uff0c \u5c0d\u65bc\u61c9\u7528\u7a0b\u5f0f\u4f86\u8aaa\uff0c\u6211\u5011\u9084\u662f\u75db\u82e6\u65bc\u6574\u5408\u6240\u6709\u9a57\u8b49\u6388\u6b0a\u7cfb\u7d71\u548c\u76e3\u63a7\u4ecb\u9762\u3002
"},{"location":"feedback/release-it/#\u670d\u52d9\u7684\u591a\u9762\u5411","title":"\u670d\u52d9\u7684\u591a\u9762\u5411","text":"\u8981\u6ce8\u610f\u6bcf\u500b\u5718\u968a\u60f3\u8981\u770b\u7684\u6771\u897f\u53ef\u80fd\u4e0d\u4e00\u6a23\uff1a
\u8eab\u70ba\u4e00\u500b\u76e3\u63a7\u7cfb\u7d71\u8981\u600e\u9ebc\u6eff\u8db3\u9019\u4e9b\u6771\u897f\uff1f \u4f60\u53ef\u4ee5\u4f7f\u7528\u4e32\u6d41\u8655\u7406\u3002
"},{"location":"feedback/release-it/#\u53ef\u80fd\u91cd\u8981\u7684\u8cc7\u8a0a","title":"\u53ef\u80fd\u91cd\u8981\u7684\u8cc7\u8a0a","text":"\u9019\u88e1\u7279\u5225\u5217\u51fa\u4e00\u4e9b\u91cd\u8981\u7684\u8cc7\u8a0a\u4e26\u505a\u7c21\u55ae\u7684\u5206\u985e\uff1a
\u9019\u4e9b\u8cc7\u8a0a\u901a\u5e38\u90fd\u6703\u642d\u914d\u6642\u9593\u8ef8\uff08\u4f8b\u5982\uff0c\u8fd1\u5169\u500b\u5c0f\u6642\u7684\u72c0\u614b\uff09\u548c\u95a5\u503c\uff08\u8d85\u904e 80% \u5c31\u958b\u59cb\u901a\u77e5\u7ba1\u7406\u8005\uff09\u4f86\u670d\u7528\u3002
"},{"location":"feedback/release-it/#\u5099\u7f6e\u548c\u90e8\u7f72","title":"\u5099\u7f6e\u548c\u90e8\u7f72","text":"\u96a8\u8457\u61c9\u7528\u7a0b\u5f0f\u6216\u8005\u7bc0\u9ede\u6578\u91cf\u7684\u589e\u52a0\uff0c\u9700\u8981\u8b93\u6bcf\u6b21\u66f4\u65b0\u6216\u7570\u52d5\u53ef\u4ee5\u5feb\u901f\u3001\u4fbf\u6377\u3002
\u5728\u670d\u52d9\u5099\u7f6e\uff08provision\uff09\u6642\u671f\uff0c\u4f60\u901a\u5e38\u6703\u6709\u63a8\uff08push\uff09\u6216\u8005\u62c9\uff08pull\uff09\u9019\u5169\u7a2e\u6a21\u5f0f\u3002
\u300c\u63a8\u300d\u6703\u662f\u4e00\u500b\u4e2d\u592e\u670d\u52d9\uff0c\u628a\u8cc7\u8a0a\uff08\u7d44\u614b\u8a2d\u5b9a\u3001\u93e1\u50cf\u6a94\u3001\u57f7\u884c\u6a94\u7b49\u7b49\uff09\u9001\u5230\u6307\u5b9a\u7bc0\u9ede\u6216\u670d\u52d9\u4e2d\uff0c \u9019\u7a2e\u505a\u6cd5\u6bd4\u8f03\u55ae\u7d14\uff0c\u53ef\u4ee5\u900f\u904e SSH \u7b49\u6a5f\u5236\u5feb\u901f\u9054\u6210\u9a57\u8b49\u6388\u6b0a\u884c\u70ba\u3002
\u300c\u62c9\u300d\u5247\u662f\u8b93\u5404\u500b\u7bc0\u9ede\u53bb\u62c9\u53d6\u6307\u5b9a\u4f4d\u7f6e\u7684\u8cc7\u8a0a\uff0c\u9019\u901a\u5e38\u5c0d\u65bc\u5feb\u901f\u751f\u6ec5\u7684\u74b0\u5883\uff08\u4f8b\u5982\u5bb9\u5668\u5316\uff09\u5f88\u9069\u5408\uff0c \u5c0d\u65bc\u64f4\u589e\u6027\uff08scalability\uff09\u4e5f\u6709\u5f88\u597d\u7684\u8f14\u52a9\u3002 \u4f46\u7f3a\u9ede\u5c31\u662f\u9700\u8981\u8a2d\u8a08\u597d\u9a57\u8b49\u6388\u6b0a\u7684\u6a5f\u5236\u3002
\u9664\u4e86\u65e9\u671f\u975c\u614b\u8a2d\u5b9a\uff08\u4f8b\u5982 env file\uff09\uff0c \u4f60\u53ef\u4ee5\u900f\u904e\u63d0\u4f9b\u7d44\u614b\u8a2d\u5b9a\u7684\u670d\u52d9\uff08\u901a\u5e38\u662f ZooKeeper \u6216 etcd\uff09\u4f86\u9054\u5230\u52d5\u614b\u8a2d\u5b9a\u3002 \u5728\u9019\u4e4b\u4e2d\uff0c\u9700\u8981\u6ce8\u610f\u5e7e\u500b\u8981\u9ede\uff1a
\u9664\u6b64\u4e4b\u5916\uff0c\u5728\u5099\u7f6e\u6642\u901a\u5e38\u6703\u5e0c\u671b\u74b0\u5883\u662f\u4e7e\u6de8\u7684\uff0c\u53ef\u91cd\u8907\u518d\u73fe\u7684\u3002 \u4f8b\u5982\uff1a\u7576\u5f9e\u65b0\u7248\u672c\uff08v2\uff09\u76f4\u63a5\u9000\u7248\uff08v1\uff09\u6642\uff0c\u5176\u7d50\u679c\u8981\u548c\u7576\u521d\u5347\u5230\u820a\u7248\u6642\u4e00\u6a23\uff08v1\uff09\uff0c \u53ef\u80fd\u53ef\u4ee5\u900f\u904e Lock \u6a94\u6216\u6aa2\u67e5 sha\uff08\u6216 eTag \u7b49\u7b49\uff09\u503c\u3002
\u6aa2\u67e5 eTag \u5931\u6557\u7684\u6848\u4f8b\u5206\u4eab\u6709\u78b0\u904e\u4e00\u500b\u6848\u4f8b\uff0c\u5c31\u662f\u958b\u767c\u8005\u6bcf\u6b21\u5347\u7248\uff0c\u6703\u8986\u5beb\u820a\u7248\u7684\u5099\u7f6e\u6a94\uff08\u4f8b\u5982\u58d3\u7e2e\u6a94\uff09\u3002
\u9019\u5c0e\u81f4\u4eca\u5929\u65b0\u7248\u672c\u51fa\u554f\u984c\u8981\u9000\u7248\u6642\uff0c \u7a0b\u5f0f\u767c\u73fe\u820a\u7248\u672c eTag \u5c0d\u61c9\u7684\u58d3\u7e2e\u6a94\uff08latest.zip
\uff09\u5df2\u7d93\u6539\u8b8a\u4e86\uff0c \u5c0e\u81f4\u9000\u7248\u5931\u6557\uff0c\u9700\u8981\u8b93\u61c9\u7528\u7a0b\u5f0f\u91cd\u65b0\u6253\u5305\u4e00\u6b21\u518d\u90e8\u7f72\uff0c\u9020\u6210\u5931\u80fd\u6642\u9593\u62c9\u9577\u3002
\u6709\u6642\u5019\u670d\u52d9\u6c92\u8fa6\u6cd5\u5feb\u901f\u555f\u52d5\uff0c \u4f8b\u5982\u670d\u52d9\u555f\u52d5\u6642\u9700\u8981\u5f9e\u5feb\u53d6\u6696\u6a5f\u3001 \u555f\u52d5\u524d\u9700\u8981\u5148\u5efa\u7f6e\u7a0b\u5f0f\u78bc\u7684\u865b\u64ec\u6a5f\uff08\u4f8b\u5982 JVM\uff09\u3001 \u670d\u52d9\u4f4f\u5728\u865b\u64ec\u6a5f\u4e0a\uff08\u4f8b\u5982 AWS EC2\uff09\u7b49\u7b49\u3002
\u9019\u6642\uff0c\u4f60\u9700\u8981\u4e00\u500b\u65b9\u5f0f\u53ef\u4ee5\u5728\u5916\u90e8\u5f71\u97ff\u61c9\u7528\u7a0b\u5f0f\uff0c\u800c\u4e0d\u9700\u8981\u91cd\u65b0\u555f\u52d5\u670d\u52d9\u3002 \u53ef\u80fd\u53ef\u4ee5\u5373\u6642\u63a7\u5236\u7684\u884c\u70ba\u6709\uff1a
\u4f46\u662f\u4e0d\u8981\u5728\u9019\u88e1\u53bb\u66b4\u9732 \u300c\u6539\u52d5\u8cc7\u6599\u5eab\u7684\u7db1\u76ee\u300d\u6216 \u300c\u6e05\u9664\u5feb\u53d6\u300d\u7684\u63a5\u53e3\uff0c \u56e0\u70ba\u9019\u7a2e\u5373\u6642\u8abf\u52d5\u5927\u91cf\u6301\u7e8c\u6027\u72c0\u614b\u7684\u884c\u70ba\uff0c\u901a\u5e38\u90fd\u6703\u9020\u6210\u4e00\u4e9b\u610f\u60f3\u4e0d\u5230\u7684\u908a\u969b\u72c0\u6cc1\u3002
\u9084\u6709\u500b\u554f\u984c\u662f\u9019\u500b\u63a5\u53e3\u8981\u600e\u9ebc\u66b4\u9732\uff1f \u901a\u5e38\u6703\u9078\u64c7\u6253\u958b\u4e00\u500b HTTP \u7aef\u53e3\uff0c\u900f\u904e\u6253 HTTP API \u4f86\u9054\u6210\u76ee\u7684\u3002 \u4f46\u5982\u679c\u670d\u52d9\u7684\u7bc0\u9ede\u6709\u4e94\u767e\u500b\uff0c\u96e3\u9053\u8981\u5c0d\u4e94\u767e\u500b\u7bc0\u9ede\u6253 HTTP \u8acb\u6c42\u55ce\uff1f
\u9019\u6642\u6211\u5011\u53ef\u4ee5\u4f7f\u7528\u4e8b\u4ef6\u4f47\u5217\u6a5f\u5236\uff0c\u8b93\u9019\u4e94\u767e\u500b\u7bc0\u9ede\u53bb\u76e3\u807d\u67d0\u500b\u4e8b\u4ef6\uff0c \u7136\u5f8c\u7ba1\u7406\u4eba\u54e1\u767c\u51fa\u9019\u500b\u4e8b\u4ef6\uff0c\u8b93\u6bcf\u500b\u7bc0\u9ede\u4e00\u6279\u4e00\u6279\uff08\u4e00\u6b21\u6027\u8b93\u5927\u5bb6\u505a\u4e8b\u6703\u589e\u52a0\u5927\u91cf\u8ca0\u8377\uff09\u7684\u53bb\u8655\u7406\u9019\u500b\u4e8b\u4ef6\u3002
\u6709\u6642\u5927\u5bb6\u6703\u5beb\u4e00\u500b GUI \u8b93\u5927\u5bb6\u53ef\u4ee5\u8f15\u9b06\u64cd\u4f5c\uff0c\u807d\u8d77\u4f86\u597d\u50cf\u5f88\u5408\u7406\uff0c \u4f46\u662f\u9019\u500b\u4ecb\u9762\u53ea\u80fd\u63d0\u4f9b\u7c21\u55ae\u800c\u9ad8\u5c64\u6b21\u7684\u64cd\u4f5c\uff0c \u4f8b\u5982\u8b93\u5be9\u6838\u8005\u540c\u610f\u9019\u6b21\u81ea\u52d5\u5316\u7684\u64cd\u4f5c\uff08\u4f8b\u5982 autoscaling\uff09\u7b49\u7b49\u3002 \u5426\u5247\u4efb\u4f55\u7d30\u90e8\u7684\u884c\u70ba\u90fd\u5141\u8a31\u8b93\u4eba\u53bb\u64cd\u4f5c\uff0c\u800c\u975e\u4f7f\u7528\u56fa\u5b9a\u8173\u672c\uff0c\u9019\u7121\u7591\u662f\u589e\u52a0\u5931\u8aa4\u7684\u98a8\u96aa\u3002
"},{"location":"feedback/release-it/#\u9069\u61c9\u529b","title":"\u9069\u61c9\u529b","text":"\u6642\u9593\u5728\u8d70\uff0c\u9069\u61c9\u74b0\u5883\u8b8a\u5316\u7684\u80fd\u529b\u662f\u5fc5\u4e0d\u53ef\u5c11\u7684\u3002 \u8981\u8b93\u670d\u52d9\u6709\u9069\u61c9\u529b\uff0c\u512a\u826f\u7684\u67b6\u69cb\u662f\u5fc5\u7136\u7684\uff0c\u5176\u4e2d\u53c8\u5206\u6210\u4e09\u500b\u9762\u5411\uff1a
\u66f8\u4e2d\u5404\u500b\u4f8b\u5b50\u90fd\u6703\u95e1\u660e\u4e00\u4e9b\u72c0\u6cc1\u548c\u8a0e\u8ad6\uff0c\u9019\u88e1\u4ee5\u689d\u5217\u5f0f\u7684\u65b9\u5f0f\u5217\u51fa\uff1a
SRE \u548c DevOps \u7684\u5dee\u7570
\u8a73\u7d30\u53ef\u4ee5\u53c3\u8003 Site Reliable Workbook \u7684\u7b2c\u4e8c\u7ae0 How SRE Relates to DevOps
"},{"location":"feedback/release-it/#\u670d\u52d9\u5c64\u7d1a\u7684\u67b6\u69cb","title":"\u670d\u52d9\u5c64\u7d1a\u7684\u67b6\u69cb","text":"\u5f37\u8abf\u4e09\u7a2e\u5065\u5eb7\u7684\u670d\u52d9\u67b6\u69cb\uff1a
\u9019\u6bb5\u53ef\u4ee5\u53c3\u8003\uff1aDesign Data-Intensive Application\uff0c \u88e1\u9762\u5c31\u6703\u8ac7\u5f97\u5f88\u8a73\u7d30\u3002
\u4e3b\u8981\u6982\u5ff5\u662f\u8981\u628a\u8cc7\u6599\u7d50\u69cb\u548c\u908f\u8f2f\u62bd\u96e2\uff0c \u4f8b\u5982\u4e0d\u8981\u50b3 user ID\uff0c\u800c\u662f\u50b3 URN\uff0c \u9019\u8981\u4e0b\u6e38\u6216\u5176\u4ed6\u670d\u52d9\u5728\u4f7f\u7528\u7684\u6642\u5019\uff0c\u624d\u4e0d\u6703\u56e0\u70ba\u4e0d\u540c\u908f\u8f2f\uff0c\u800c\u8b93\u8cc7\u6599\u7d50\u69cb\u8f49\u4f86\u8f49\u53bb\u3002 \u5176\u5be6 AWS \u5728\u9019\u584a\u5c31\u73a9\u5f97\u5f88\u597d\uff0c\u4ed6\u6bcf\u500b\u670d\u52d9\u90fd\u662f\u4e00\u500b ARN \u800c\u4e0d\u662f ID\u3002
"},{"location":"feedback/release-it/#\u7d50\u8a9e","title":"\u7d50\u8a9e","text":"\u7e3d\u7684\u4f86\u8aaa\uff0c\u96a8\u8457\u5404\u5927\u4f01\u696d\u9010\u6f38\u7d2f\u7a4d\u4e00\u4e9b\u7dad\u904b\u9700\u8981\u6ce8\u610f\u7684\u4e8b\u9805\uff0c \u5373\u4f7f\u9019\u4e9b\u77e5\u8b58\u5929\u751f\u5c31\u6703\u96f6\u96f6\u6563\u6563\u7684\uff0c \u4f46\u81f3\u5c11\u4e5f\u6709\u4e86\u4e00\u4e9b\u7cfb\u7d71\u5316\u7684\u8a8d\u8b58\u3002
\u5982\u679c\u672a\u4f86\u8981\u66f4\u8fd1\u4e00\u6b65\u7684\u6df1\u5316\uff0c\u53ef\u4ee5\u53c3\u8003 Google SRE \u9019\u500b\u7db2\u7ad9\uff0c \u88e1\u9762\u8b1b\u4e86\u975e\u5e38\u591a\u985e\u4f3c\u7684\u6771\u897f\uff0c \u4f46\u4ed6\u8457\u91cd\u5728\u5efa\u7acb SLO\uff0c \u4e26\u4ee5\u6b64\u4f5c\u70ba\u6c7a\u7b56\u7684\u57fa\u790e\uff0c\u9019\u4e5f\u662f\u4e0b\u4e00\u4efd\u5fc3\u5f97\u60f3\u5beb\u7684\u5167\u5bb9\u3002
"},{"location":"feedback/release-it/#\u5b57\u8a5e\u89e3\u91cb","title":"\u5b57\u8a5e\u89e3\u91cb","text":"\u95dc\u65bc\u865b\u64ec IP\uff08VIP\uff09Virtual IP\uff1b\u865b\u64ec IP \u4f4d\u7f6e\uff0c\u6703\u9700\u8981\u6709\u500b\u670d\u52d9\u7ba1\u7406 VIP \u5c0d\u61c9\u771f\u5be6 IP \u7684\u8868\u683c\u3002 \u5728 Linux \u4e2d\uff0c\u901a\u5e38\u662f conntrack\uff08Netfilter\uff09\u3002
\u4ec0\u9ebc\u662f conntrack\uff1f
\u6709\u72c0\u614b\u9632\u706b\u7246\uff08stateful firewall\uff09\u662f\u76f8\u5c0d\u65bc\u65e9\u671f\u7684\u7121\u72c0\u614b\u9632\u706b\u7246\uff08stateless firewall\uff09\u800c\u8a00\u7684\uff1a \u65e9\u671f\u9632\u706b\u7246\u53ea\u80fd drop syn to port 443
\u6216\u8005 allow syn to port 80
\u9019\u7a2e\u975e\u5e38\u7c21\u55ae\u7684\u898f\u5247\uff0c \u6c92\u6709 flow \u7684\u6982\u5ff5\uff0c \u56e0\u6b64\u7121\u6cd5\u5be6\u73fe\u8af8\u5982\u300c\u5982\u679c\u9019\u500b ack \u4e4b\u524d\u5df2\u7d93\u6709 syn\uff0c \u5c31 allow\uff0c\u5426\u5247 drop\u300d\u9019\u6a23\u7684\u898f\u5247\uff0c \u4f7f\u7528\u975e\u5e38\u53d7\u9650\u3002
\u986f\u7136\uff0c\u8981\u5be6\u73fe\u6709\u72c0\u614b\u9632\u706b\u7246\uff0c\u5c31\u5fc5\u9808\u7d00\u9304 flow \u548c\u72c0\u614b\uff0c\u9019\u6b63\u662f conntrack \u505a\u7684\u4e8b\u60c5\u3002
\u865b\u64ec IP \u901a\u5e38\u6709\u5e7e\u500b\u529f\u80fd\uff1a
\u7531\u65bc\u529f\u80fd\u5f88\u591a\uff0c\u9700\u8981\u6ce8\u610f\u4e0a\u4e0b\u6587\u4e2d\u5176\u4ee3\u8868\u7684\u610f\u7fa9\u3002
"},{"location":"feedback/designing-data-intensive-applications/","title":"Designing Data-Intensive Applications","text":"2020 5 \u6708\u5df2\u92b7\u552e 100,000 \u672c\uff0c\u4e14\u662f 2019 \u5e74 O\u2019Reilly \u6240\u6709\u4f5c\u54c1\u92b7\u91cf\u7b2c\u4e8c\u540d\u7684\u4f5c\u54c1\uff08\u7b2c\u4e00\u540d\u662f\u6a5f\u5668\u5b78\u7fd2\u7684\uff09\u3002
Martin Kleppmann
Table of contents
\u8eab\u70ba\u4e00\u500b\u61c9\u7528\u7a0b\u5f0f\u958b\u767c\u8005\uff0c\u6211\u8a72\u5982\u4f55\u770b\u5f85\u672c\u66f8
\u5982\u679c\u4f60\u80fd\u5920\u4e86\u89e3\u8cc7\u6599\u5eab\u7684\u5167\u90e8\u904b\u4f5c\u65b9\u5f0f\uff0c\u4f60\u5c31\u80fd\u6709\u4e00\u500b\u8f03\u958b\u95ca\u7684\u8996\u91ce\u53bb\u770b\u5f85\u54ea\u7a2e\u5de5\u5177\u6216\u662f\u54ea\u4e9b\u8a2d\u5b9a\u662f\u6700\u9069\u5408\u4f60\u7684\u61c9\u7528\u7a0b\u5f0f\u3002 \u96d6\u7136\u672c\u66f8\u4e0d\u6703\u6709\u4efb\u4f55\u7522\u54c1\u7684\u7d30\u7bc0\u4ecb\u7d39\uff0c\u537b\u6703\u8b93\u4f60\u5728\u770b\u8cc7\u6599\u5eab\u6587\u4ef6\u6642\uff0c\u66b8\u89e3\u4e0d\u540c\u540d\u8a5e\u5176\u80cc\u5f8c\u53ef\u80fd\u4ee3\u8868\u7684\u512a\u52a3\u52e2\u3002
As an application developer you\u2019re armed with this knowledge about the internals of storage engines, you are in a much better position to know which tool is best suited for your particular application. If you need to adjust a database\u2019s tuning parameters, this understanding allows you to imagine what effect a higher or a lower value may have. Although this chapter couldn\u2019t make you an expert in tuning any one particular storage engine, it has hopefully equipped you with enough vocabulary and ideas that you can make sense of the documentation for the database of your choice.
\u8cc7\u6599\u7684\u91cd\u8981\u6027
2021 AWS Summit \u63d0\u5230\uff1a\u7d71\u4e00\u8cc7\u6599\u4ee5\u767c\u63ee\u5176\u50f9\u503c\uff0c\u6210\u70ba\u8cc7\u6599\u9a45\u52d5\u578b\u4f01\u696d\uff0c\u5176\u7279\u8272\uff1a
\u5206\u6210\u4e09\u5927\u584a\uff1a
\u5c0d\u61c9\u66f8\u4e2d\u7684 Data Models and Query Languages\uff0c\u5c55\u793a\u5404\u7a2e\u8cc7\u6599\u6a21\u578b2\u548c\u6bd4\u8f03\u3002
\u4eba\u969b\u95dc\u4fc2
\u5047\u8a2d\u6709 \\(N\\) \u500b\u9ede\uff0c\u9ede\u548c\u9ede\u7684\u9023\u7d50\u5c31\u6703\u6709 \\(\\frac{N^2-N}{2}\\) \u500b\u3002
\u8a66\u60f3\u6709\u767e\u842c\u500b\u793e\u4ea4\u5a92\u9ad4\u7684\u7528\u6236\uff0c\u82e5\u8981\u4f7f\u7528 MySQL \u5efa\u7acb\u4e00\u500b\u5f7c\u6b64\u4e4b\u9593\u8a8d\u8b58\u8207\u5426\u7684\u4eba\u969b\u7db2\u7d61\u6703\u9700\u8981\u591a\u5c11 entry\uff1f\u9019\u6642\u5019\u6709\u6c92\u6709\u9664\u4e86 Relational Model \u4e4b\u5916\u7684\u9078\u64c7\uff1f
\u5c0d\u61c9\u66f8\u4e2d Storage and Retrieval \u7684\u524d\u534a\u6bb5\uff0c\u5982\u4f55\u52a0\u901f\u8cc7\u6599\u7684\u8b80\u53d6\u3002
\u96d9\u7d22\u5f15
MySQL \u6bcf\u6b21\u4e0b query \u53ea\u6703\u9075\u5f9e\u5176\u4e2d\u4e00\u500b index\uff0c\u70ba\u4ec0\u9ebc\uff1f\u82e5\u8981\u505a\u591a\u500b\u7d22\u5f15\uff0c\u9700\u8981\u72a7\u7272\u4ec0\u9ebc\uff1f
\u6709\u4e9b\u60c5\u6cc1\u5fc5\u9808\u8981\u96d9\u7d22\u5f15\uff0c\u4f8b\u5982\uff1a\u5730\u7406\u4f4d\u7f6e\u4e2d\u7684\u7d93\u7def\u5ea6\uff0c\u53ea\u641c\u5c0b\u7d93\u5ea6\u7684\u8a71\u6548\u80fd\u7684\u63d0\u5347\u6709\u9650\u3002
\u5c0d\u61c9\u66f8\u4e2d Storage and Retrieval \u7684\u5f8c\u534a\u6bb5\uff0c\u5982\u4f55\u5340\u5206\u7dda\u4e0a\u548c\u5f8c\u53f0\u7684\u8cc7\u6e90\u3002
\u6578\u64da\u5206\u6790
\u5982\u679c\u6211\u5011\u8981\u5206\u6790\u7dda\u4e0a\u4f7f\u7528\u8005\u7684\u8cc7\u6599\uff0c\u5982\u4f55\u907f\u9762\u548c\u7dda\u4e0a\u4f7f\u7528\u8005\u6436\u6548\u80fd\uff1f
\u5c0d\u61c9\u66f8\u4e2d\u7684 Encoding and Evolution\uff0c\u8cc7\u6599\u5eab\u7684\u7de8\u78bc\u6700\u4f73\u5316\u548c\u524d\u5f8c\u76f8\u5bb9\u3002
\u820a\u7248\u7de8\u78bc\u5982\u4f55\u8b80\u65b0\u7248\u8cc7\u6599
\u8ffd\u6c42\u8cc7\u6599\u9ad4\u7a4d\u7684\u6975\u81f4\u58d3\u7e2e\uff0c\u7ba1\u7406\uff08Maintainable\uff09\u4e5f\u5f88\u91cd\u8981\u3002\u82e5\u8cc7\u6599\u5eab\u540c\u6642\u5b58\u5728\u65b0\u7248\u548c\u820a\u7248\u7684\u8cc7\u6599\uff0c\u5982\u4f55\u907f\u514d\u7de8\u78bc\u5931\u6548\uff1f
\u5c0d\u61c9\u66f8\u4e2d\u7684 Transaction\uff0c\u5982\u4f55\u907f\u514d\u7af6\u8cfd\u60c5\u6cc1\uff08race condition\uff09\u5e36\u4f86\u7684\u932f\u8aa4\u72c0\u614b\u3002
\u8a02\u7968\u554f\u984c
\u5169\u500b\u7528\u6236\u540c\u4e00\u6642\u9593\u8a02\u8cfc\u9650\u91cf\u7968\u7a2e\u4e14\u76ee\u524d\u50c5\u5269\u4e00\u5f35\uff0c\u61c9\u7528\u7a0b\u5f0f\u5229\u7528 Read-Decision-Write \u7684\u6a5f\u5236\uff0c\u6703\u8b93\u5169\u4eba\u540c\u6642\u8a02\u8cfc\u6210\u529f\u3002\u8a72\u600e\u9ebc\u907f\u514d\uff1f
\u5c0d\u61c9\u66f8\u4e2d\u7684 Replication\uff0c\u5982\u4f55\u52d5\u614b\u8907\u88fd\u8cc7\u6599\u5230\u591a\u53f0\u8cc7\u6599\u5eab\u4e2d\uff0c\u4ee5\u9054\u6210\uff1a
\u8907\u88fd\u5ef6\u9072
\u7576\u6a5f\u5668\u5728\u505a\u8907\u88fd\u7684\u6642\u5019\uff0c\u82e5\u662f \u6a5f\u5668A \u5b8c\u6210\u8907\u88fd\u800c \u6a5f\u5668B \u9084\u6c92\uff0c\u4f7f\u7528\u8005\u91cd\u65b0\u8f09\u5165\u9801\u9762\u53ef\u80fd\u6703\u6709\u4e0d\u540c\u7684\u7d50\u679c\u3002
\u751a\u81f3\u5728\u8907\u88fd\u5230 \u6a5f\u5668B \u7684\u6642\u5019\u7db2\u8def\u4e2d\u65b7\uff0c\u8a72\u600e\u9ebc\u9054\u6210\u4e00\u81f4\u6027\uff1f
\u5c0d\u61c9\u66f8\u4e2d\u7684 Partition\uff0c\u5982\u4f55\u52d5\u614b\u5206\u5340\u8cc7\u6599\u5230\u591a\u53f0\u8cc7\u6599\u5eab\u4e2d\uff0c\u4ee5\u907f\u514d\u55ae\u53f0\u6a5f\u5668\u7121\u6cd5\u8ca0\u8377\u904e\u5927\u7684\u8cc7\u6599\u91cf\uff08\u4e26\u975e\u6d41\u91cf\uff09\u3002
\u5e73\u5747\u5206\u914d
\u4ee5 user ID \u4f5c\u70ba\u5206\u5340\u7684\u9375\u503c\u70ba\u4f8b\u3002\u7576\u793e\u4ea4\u8edf\u9ad4\u4e2d\u7684\u4e00\u4f4d\u540d\u4eba\u767c\u6587\u6642\uff0c\u7279\u5b9a\u5206\u5340\u6703\u6709\u4e0d\u5c0d\u7a31\u7684\u5927\u6d41\u91cf\uff0c\u5982\u4f55\u907f\u514d\u3002
\u5c0d\u61c9\u66f8\u4e2d\u7684 The Trouble with Distributed Systems\uff0c\u5728\u5206\u6563\u5f0f\u8cc7\u6599\u5eab\u4e0b\uff0c\u4f60\u6703\u9762\u81e8\u7684\u72c0\u6cc13\u548c\u61c9\u5982\u4f55\u770b\u5f85\u3002
Debug
\u5728\u627e\u5c0b\u932f\u8aa4\u7684\u6642\u5019\uff0c\u6211\u5011\u6703\u5148\u5047\u8a2d\u57fa\u790e\u670d\u52d9\u662f\u6b63\u78ba\u56de\u61c9\u7684\u3002 \u4e26\u5728\u6b64\u5047\u8a2d\u4e4b\u4e0a\u958b\u59cb\u627e\u932f\uff0c\u7576\u9019\u500b\u932f\u8aa4\u7528\u4e86\u5169\u5929\uff08\u5f88\u96e3\u91cd\u73fe\uff09\u53bb\u627e\uff0c \u4f60\u53ef\u80fd\u5c31\u9700\u8981\u958b\u59cb\u8cea\u7591\u6700\u4e00\u958b\u59cb\u7684\u5047\u8a2d\u4e86\u3002\u9019\u5c31\u662f\u672c\u7ae0\u5617\u8a66\u8b93\u5927\u5bb6\u53bb\u611f\u53d7\u7684\uff0c \u540c\u6642\u4e5f\u8a66\u8457\u8aaa\u660e\u5171\u8b58\u7684\u91cd\u8981\u6027\u548c\u50f9\u503c\u3002
\u5c0d\u61c9\u66f8\u4e2d\u7684 Consistency and Consensus\uff0c\u5229\u7528 \u5171\u8b58 \u9054\u6210\u4e00\u81f4\u60274\u548c\u5bb9\u932f\u7684\u670d\u52d9\u3002
\u89c0\u5ff5
\u5171\u8b58\u6f14\u7b97\u6cd5\u5df2\u7d93\u767c\u5c55\u5e7e\u5341\u5e74\u4e86\uff0c\u4ecd\u7136\u6709\u8a31\u591a\u5f85\u7814\u7a76\u7684\u5730\u65b9\uff0c\u4f46\u662f\u5b83\u7684\u50f9\u503c\u662f\u4ec0\u9ebc\uff1f
\u4ee5\u6a5f\u5668\u5b78\u7fd2\u4f86\u8aaa\uff0c\u8b93\u5176\u767c\u5c55\u84ec\u52c3\u7684\u50f9\u503c\u5728\u65bc\u7528\u6a5f\u5668\u505a\u9810\u6e2c\u3001\u5206\u6790\u548c\u9078\u64c7\uff0c\u90a3\u5171\u8b58\u6f14\u7b97\u6cd5\u5462\uff1f
\u672c\u66f8\u7684\u91cd\u9ede\u4e00\u76f4\u90fd\u4e0d\u662f\u5c0d\u6f14\u7b97\u6cd5\u548c\u5de5\u5177\u505a\u7d30\u7bc0\u8a0e\u8ad6\uff0c \u4e0d\u7ba1\u662f\u4f7f\u7528 Raft\u3001Paxos \u7b49\u7b49\u7684\u5171\u8b58\u6f14\u7b97\u6cd5\uff0c \u4ed6\u5011\u90fd\u662f\u5617\u8a66\u5728\u5206\u6563\u5f0f\u7cfb\u7d71\u7684\u74b0\u5883\u63d0\u5230\u7684\u5404\u7a2e\u554f\u984c\u4e4b\u4e0a\uff0c \u5efa\u7acb\u4e00\u500b\u64c1\u6709\u548c\u591a\u53f0\u6a5f\u5668\u5354\u5546\u4e26\u9054\u6210\u5bb9\u932f\u80fd\u529b\u9ad8\u7684\u6f14\u7b97\u6cd5\uff0c\u800c\u53c8\u6709\u54ea\u4e9b\u72c0\u6cc1\u662f\u53ef\u4ee5\u505a\u6b0a\u8861\u7684\uff1f
\u524d\u9762\u90fd\u5728\u8b1b\u91dd\u5c0d\u55ae\u4e00\u61c9\u7528\u7a0b\u5f0f\u7684\u8cc7\u6599\u5eab\uff0c\u73fe\u5728\u8a66\u8457\u628a\u628a\u93e1\u982d\u62c9\u9060\u3002\u73fe\u5728\u4f86\u770b\u770b\u4e0d\u540c\u61c9\u7528\u7a0b\u5f0f\u4e4b\u9593\u7684\u4ea4\u6d41\u3001\u884d\u4f38\u548c\u6574\u5408\u3002
\u5feb\u53d6
\u6700\u76f4\u89c0\u7684\u884d\u751f\u8cc7\u6599\uff08Derived Data\uff09\u5c31\u662f\u5feb\u53d6\uff0c\u6211\u5f9e\u8cc7\u6599\u5eab\u88e1\u62c9\u51fa\u4e00\u4e9b\u8cc7\u6599\u653e\u9032\u5feb\u53d6\uff0c\u52a0\u901f\u61c9\u7528\u7a0b\u5f0f\u9032\u7a0b\u3002
"},{"location":"feedback/designing-data-intensive-applications/#\u6279\u6b21\u8655\u7406","title":"\u6279\u6b21\u8655\u7406","text":"\u5c0d\u61c9\u66f8\u4e2d\u7684 Batch Processing\uff0c\u8a0e\u8ad6\u6279\u6b21\u8655\u7406\u7684\u7406\u5ff5\u548c\u50f9\u503c\u3002
\u6392\u7a0b\u5de5\u4f5c
\u6279\u6b21\u8655\u7406\uff08batch job\uff09\u548c\u6392\u7a0b\u5de5\u4f5c\uff08cron job\uff09\u662f\u5169\u4ef6\u4e8b\u60c5\u3002
\u6392\u7a0b\u6253 API \u505a search-index\u3001\u63a8\u85a6\u7cfb\u7d71\u548c\u5206\u6790\u7b49\u7b49\uff0c\u7136\u5f8c\u518d\u628a\u7d50\u679c\u7522\u51fa\u5728\u8cc7\u6599\u5eab\u4e2d\u3002\u5982\u679c\u7a0b\u5f0f\u78bc\u5beb\u932f\u4e86\uff0c\u5c0e\u81f4\u7dda\u4e0a\u8cc7\u6599\u5eab\u5d29\u58de\uff0c\u8a72\u600e\u9ebc\u9000\u7248\u5230\u820a\u8cc7\u6599\uff1f
\u6982\u5ff5
HDFS \u6982\u5ff5\u5f88\u55ae\u7d14\uff0c\u5206\u6563\u5f0f\u7684\u8cc7\u6599\u7cfb\u7d71\u3002\u4f46\u662f\u70ba\u4ec0\u9ebc\u8fd1\u5341\u5e7e\u5e74\u4f86\u624d\u958b\u59cb\u666e\u904d\uff1f
Hadoop \u4e4b\u4e0a\uff0c\u884d\u4f38\u5f88\u591a\u7522\u54c1\uff0c\u70ba\u4ec0\u9ebc\uff1f
\u5c0d\u61c9\u66f8\u4e2d\u7684 Stream Processing\uff0c\u5982\u4f55\u628a\u5373\u6642\u8cc7\u6599\u8f49\u63db\u6210\u4e8b\u4ef6\u4e26\u8655\u7406\u3002
\u6309\u8b9a\u6578
\u81c9\u66f8\u4e2d\uff0c\u6211\u5011\u53ef\u4ee5\u770b\u5230\u6bcf\u500b\u8cbc\u6587\u7684\u6309\u8b9a\u6578\u548c\u90e8\u5206\u6309\u8b9a\u4eba\u7684\u540d\u5b57\u3002
\u5c0d\u61c9\u66f8\u4e2d\u7684 The Future of Data Systems\uff0c\u6574\u5408\u524d\u9762\u7684\u5167\u5bb9\uff0c\u4e26\u505a\u51fa\u4e00\u500b\u5f37\u5065\u7684\u61c9\u7528\u7a0b\u5f0f\u3002
"},{"location":"feedback/designing-data-intensive-applications/#\u8cab\u7a7f\u672c\u66f8\u7684\u76ee\u7684","title":"\u8cab\u7a7f\u672c\u66f8\u7684\u76ee\u7684","text":"\u4e00\u500b\u61c9\u7528\u7a0b\u5f0f\u9700\u8981\u6eff\u8db3\u8a31\u591a\u9700\u6c42\u624d\u80fd\u63d0\u4f9b\u7279\u5b9a\u670d\u52d9\u3002
\u7576\u670d\u52d9\u767c\u751f\u72c0\u6cc1\u6642\uff0c\u4ecd\u7136\u80fd\u6b63\u78ba\u904b\u884c\u3002\u72c0\u6cc1\u53ef\u80fd\u70ba
\u5bb9\u932f\u80fd\u529b\uff08Fault-tolerance\uff09\u4ee3\u8868\u4ed6\u80fd\u63a5\u53d7\u7279\u5b9a\u72c0\u6cc1\u7684\u767c\u751f\uff0c\u4e26\u8b93\u4f7f\u7528\u8005\u4e0d\u6703\u53d7\u6b64\u5f71\u97ff\u3002
"},{"location":"feedback/designing-data-intensive-applications/#\u53ef\u5ef6\u5c55\u6027","title":"\u53ef\u5ef6\u5c55\u6027","text":"\u53ef\u5ef6\u5c55\u6027\u4ee3\u8868\u5373\u4f7f\u6d41\u91cf\u589e\u52a0\uff0c\u8868\u73fe\u4ecd\u662f\u6b63\u5e38\u7684\u3002\u5728\u8a0e\u8ad6\u5ef6\u5c55\u6027\u524d\uff0c\u9700\u5b9a\u7fa9_\u6d41\u91cf_\uff08load\uff09\u548c_\u8868\u73fe\u80fd\u529b_\uff08performance quantitatively\uff09\u3002
\u4ee5 Twitter \u7684\u500b\u4eba\u9996\u9801\u70ba\u4f8b\uff0c\u5229\u7528\u56de\u61c9\u6642\u9593\u7684\u767e\u5206\u4f4d\u6578\uff08percentiles\uff09\u4ee3\u8868\u8868\u73fe\u80fd\u529b\uff0c\u6bcf\u500b\u767c\u5e03\u8005\u7684\u5beb\u5165\u548c\u8ffd\u96a8\u8005\u7684\u8b80\u53d6\u9996\u9801\u4f5c\u70ba\u6d41\u91cf\u3002\u5373\u4f7f\u6d41\u91cf\u589e\u52a0\uff0c\u56de\u61c9\u6642\u9593\u7684\u767e\u5206\u4f4d\u6578\u4ecd\u4f4e\u65bc\u7279\u5b9a\u6c34\u5e73\u3002
\u5728\u4e00\u500b\u53ef\u64f4\u5145\u7684\u7cfb\u7d71\uff0c\u6211\u5011\u53ef\u4ee5\u589e\u52a0\u6a5f\u5668\u7684\u91cf\uff08processing capacity\uff09\u4f86\u7dad\u6301\u53ef\u9760\u7684\u8868\u73fe\u80fd\u529b\u3002
"},{"location":"feedback/designing-data-intensive-applications/#\u53ef\u7dad\u8b77\u6027","title":"\u53ef\u7dad\u8b77\u6027","text":"\u53ef\u7dad\u8b77\u6027\u6709\u5f88\u591a\u9762\u5411\uff0c\u57fa\u672c\u4e0a\u4f86\u8aaa\uff0c\u5c31\u662f\u70ba\u4e86\u8b93\u5de5\u7a0b\u5e2b\u548c\u904b\u7dad\u5de5\u7a0b\u5e2b\u6e96\u6642\u3002\u8b93\u7cfb\u7d71\u4fdd\u6301\u62bd\u8c61\u5316\uff08\u628a\u7dad\u5ea6\u63d0\u9ad8\uff09\u53ef\u4ee5\u964d\u4f4e\u7cfb\u7d71\u7684\u8907\u96dc\u6027\uff0c\u4e26\u4e14\u8b93\u5176\u66f4\u5bb9\u6613\u4fee\u6539\u548c\u9069\u61c9\u65b0\u7684\u529f\u80fd\u3002
\u597d\u7684\u64cd\u4f5c\u6027\uff08operability\uff09\u4ee3\u8868\u80fd\u89c0\u5bdf\u5230\u7cfb\u7d71\u5167\u90e8\u904b\u4f5c\u72c0\u614b\u548c\u5065\u5eb7\u6aa2\u67e5\uff0c\u4e26\u4e14\u64c1\u6709\u9ad8\u6548\u7684\u65b9\u5f0f\u53bb\u7ba1\u7406\u3002
"},{"location":"feedback/designing-data-intensive-applications/#\u7d50\u8ad6","title":"\u7d50\u8ad6","text":"\u901a\u5e38\u4f86\u8aaa\u4e0d\u6703\u6709\u4e00\u500b\u8fa6\u6cd5\u53ef\u4ee5\u7c21\u55ae\u4e14\u5b8c\u6574\u7684\u8b93\u61c9\u7528\u7a0b\u5f0f\u53ef\u9760\u3001\u597d\u5ef6\u5c55\u548c\u7dad\u8b77\u3002\u7136\u800c\uff0c\u90fd\u6703\u6709\u67d0\u7a2e\u6a21\u5f0f\u6216\u5de5\u5177\u5e6b\u52a9\u6211\u5011\u4e00\u500b\u4e00\u500b\u89e3\u6c7a\u9019\u4e9b\u554f\u984c\u3002
\u7ae0\u7bc0\u5f15\u7528\u6578\uff0c\u5728\u6211\u8b80\u66f8\u7684\u7d93\u9a57\u4e2d\uff0c\u53ef\u4ee5\u628a\u9019\u500b\u7576\u4f5c\u7ae0\u7bc0\u7684\u96e3\u6613\u5ea6\u4f86\u505a\u5224\u65b7\u3002\u00a0\u21a9
\u672c\u66f8\u7684\u4e2d\u6587\u7ffb\u8b6f\u90fd\u4f86\u81ea\u570b\u5bb6\u6559\u80b2\u7814\u7a76\u9662\u2014\u96d9\u8a9e\u8a5e\u5f59\u3001\u5b78\u8853\u540d\u8a5e\u66a8\u8fad\u66f8\u8cc7\u8a0a\u7db2\u3002\u00a0\u21a9
\u5728\u4e0d\u8003\u616e\u62dc\u5360\u5ead\u932f\u8aa4\u4e0b\u3002\u00a0\u21a9
\u8981\u6ce8\u610f\u9019\u88e1\u7684\u4e00\u81f4\u6027\u548c\u7af6\u8cfd\u60c5\u6cc1\u4e2d\u7684 Consistency \u662f\u4e0d\u4e00\u6a23\u7684\u3002\u5171\u8b58\u6f14\u7b97\u6cd5\u4e2d\u7684 Consistency\uff0c\u4ee3\u8868\u5728\u65bc\u5206\u6563\u5f0f\u7cfb\u7d71\u4e0b\u5982\u4f55\u8b93\u591a\u500b\u8907\u88fd\uff08Replication\uff09\u7684\u72c0\u614b\u9054\u6210\u4e00\u81f4\u6027\uff0c\u5f8c\u8005\u5728\u65bc\u7368\u7acb\u4e0d\u540c\u7684\u7570\u52d5\uff08transaction\uff09\u4e26\u907f\u514d\u5176\u4ea4\u4e92\u5f71\u97ff\u800c\u7dad\u6301\u4e00\u81f4\u6027\u3002\u00a0\u21a9
\u5982\u4f55\u5229\u7528\u5206\u6563\u5f0f\u6a94\u6848\u7cfb\u7d71\u5b8c\u6210\u6279\u6b21\u8cc7\u6599\u7684\u8a08\u7b97\u3002
HackMD \u5831\u544a\u6587\u672c
\u6211\u5011\u63d0\u4e86\u55ae\u53f0\u8cc7\u6599\u5eab\u5982\u4f55\u5728\u6548\u7387\u548c\u4e00\u81f4\u6027\u627e\u5230\u5e73\u8861\u9ede\uff0c\u9019\u9ede\u96a8\u8457\u6f14\u9032\u8d8a\u4f86\u8d8a\u80fd\u88ab\u5927\u5bb6\u63a5\u53d7\uff0c \u4f46\u662f\u4e00\u53f0\u8cc7\u6599\u5eab\u4e0d\u53ef\u80fd\u5e6b\u6211\u5011\u628a\u6240\u6709\u4e8b\u60c5\u90fd\u505a\u597d\u3002 \u4f8b\u5982\u8cc7\u6599\u5927\u5230\u5fc5\u9808\u591a\u500b\u7bc0\u9ede\u53bb\u8655\u7406\u3001\u9700\u8981\u9ad8\u53ef\u7528\u6027\u7b49\u7b49\uff0c\u6211\u5011\u958b\u59cb\u9700\u8981\u4f7f\u7528\u5206\u6563\u5f0f\u7684\u8cc7\u6599\u5eab\u3002
\u7136\u800c\u5206\u6563\u5f0f\u7684\u8cc7\u6599\u5eab\u6703\u6253\u7834\u55ae\u53f0\u8cc7\u6599\u5eab\u7684\u5e73\u8861\uff0c\u6211\u5011\u4ecd\u7136\u53ef\u4ee5\u900f\u904e\u5171\u8b58\u6f14\u7b97\u6cd5\u30012(3)PL \u7b49\u7b49\u7dad\u6301\u4e00\u81f4\u6027\uff0c \u4f46\u9019\u6642\u6548\u7387\u5c31\u6703\u964d\u4f4e\u3002 \u4e14\u9019\u4e9b\u6f14\u7b97\u6cd5\u7684\u5be6\u4f5c\u901a\u5e38\u90fd\u9700\u8981\u975e\u5e38\u8b39\u614e\u7684\u6e2c\u8a66\u548c\u601d\u8003\uff0c\u5426\u5247\u4efb\u4f55\u908a\u969b\u60c5\u6cc1\u90fd\u53ef\u80fd\u7834\u58de\u6389\u9810\u671f\u7684\u4e00\u81f4\u6027\u4fdd\u8b49\u548c\u9ad8\u53ef\u7528\u6027\u3002
\u6709\u6c92\u6709\u65e2\u80fd\u64c1\u6709\u9ad8\u4e00\u81f4\u6027\u53c8\u64c1\u6709\u9ad8\u53ef\u7528\u6027\u7136\u5f8c\u53c8\u80fd\u57f7\u884c\u8907\u96dc\u7684\u641c\u5c0b\uff08\u4f8b\u5982\u95dc\u806f\u5f0f\u8cc7\u6599\u5eab\u7684 SQL\uff09\u7684\u65b9\u6848\uff1f
\u6709\uff0c\u4f46\u662f\u958b\u59cb\u524d\u6211\u5011\u9700\u8981\u4ecb\u7d39\u4e00\u4e9b\u300c\u884d\u751f\u8cc7\u6599\u300d\u7684\u5de5\u5177\u3002
"},{"location":"feedback/designing-data-intensive-applications/derived-batch/#\u7c21\u4ecb","title":"\u7c21\u4ecb","text":"\u4e4b\u524d\u8b1b\u7684\u8cc7\u6599\u5eab\u90fd\u662f\u5047\u8a2d\u61c9\u7528\u7a0b\u5f0f\u4f7f\u7528\u7684\u55ae\u7a2e\u8cc7\u6599\u5eab\uff0c\u4e0d\u7ba1\u662f\u55ae\u53f0\u9084\u662f\u5206\u6563\u5f0f\u7684\u3002 \u4f46\u5be6\u969b\u4e0a\u61c9\u7528\u7a0b\u5f0f\u662f\u66f4\u8907\u96dc\u7684\uff0c\u4ed6\u6703\u6709\u5feb\u53d6\u3001\u641c\u5c0b\u7d22\u5f15\u3001\u76e3\u63a7\u7b49\u7b49\u4e0d\u540c\u7684\u8cc7\u6599\u7cfb\u7d71\uff0c \u9019\u6b21\u8981\u4ecb\u7d39\u7684\u5c31\u662f\u5176\u4e2d\u4e00\u7a2e\u8cc7\u6599\u7cfb\u7d71\uff1a\u6279\u6b21\u8655\u7406\u3002
\u7ba1\u7406\u548c\u61c9\u7528\u7684\u91cd\u8981\u6027
\u5c0d\u61c9\u7528\u7a0b\u5f0f\u4f86\u8aaa\u5982\u4f55\u6574\u5408\u4e0d\u540c\u8cc7\u6599\u7cfb\u7d71\u548c\u5982\u4f55\u4f7f\u7528\u55ae\u4e00\u8cc7\u6599\u7cfb\u7d71\u662f\u4e00\u6a23\u91cd\u8981\u7684\uff01
"},{"location":"feedback/designing-data-intensive-applications/derived-batch/#\u985e\u5225\u4ecb\u7d39","title":"\u985e\u5225\u4ecb\u7d39","text":"\u6211\u5011\u5148\u4f86\u4ecb\u7d39\u300c\u8cc7\u6599\u300d\u662f\u4ec0\u9ebc\uff1f\u4e00\u822c\u6211\u5011\u6703\u628a\u8cc7\u6599\u5206\u5169\u7a2e\uff1a
\u884d\u751f\u8cc7\u6599\u7684\u751f\u6210\u901a\u5e38\u53d6\u6c7a\u65bc\u61c9\u7528\u7a0b\u5f0f\u7684\u985e\u578b\uff0c\u4f8b\u5982\u793e\u7fa4\u8edf\u9ad4\u6703\u63a8\u85a6\u53ef\u80fd\u8a8d\u8b58\u7684\u4f7f\u7528\u8005\u4e26\u5feb\u53d6\u6709\u8208\u8da3\u7684\u63a8\u6587\uff0c \u4ee5\u52a0\u901f\u8b80\u53d6\u7684\u901f\u5ea6\u3002\u4efb\u4f55\u8cc7\u6599\u7cfb\u7d71\u53ea\u662f\u4e00\u7a2e\u5de5\u5177\uff0c\u6839\u64da\u5546\u52d9\u908f\u8f2f\u9078\u64c7\u5de5\u5177\u7684\u4f7f\u7528\u65b9\u5f0f\u662f\u958b\u767c\u8005\u5fc5\u9808\u8981\u8655\u7406\u7684\u4e8b\u60c5\u3002 \u5c0d\u61c9\u7528\u7a0b\u5f0f\u800c\u8a00\uff0c\u4f7f\u7528\u884d\u751f\u8cc7\u6599\u4e00\u5b9a\u6703\u8b93\u7a0b\u5f0f\u8b8a\u5f97\u66f4\u8907\u96dc\uff0c \u8a72\u600e\u9ebc\u628a\u884d\u751f\u8cc7\u6599\u548c\u539f\u59cb\u8cc7\u6599\u5207\u5206\u6e05\u695a\uff08\u4e0d\u53ea\u662f\u61c9\u7528\u9762\uff0c\u800c\u662f\u7ba1\u7406\u9762\uff09\u662f\u4e00\u4ef6\u91cd\u8981\u7684\u4e8b\u3002
\u985e\u578b \u6a21\u5f0f \u6642\u9593 \u6ce8\u91cd \u670d\u52d9\u8655\u7406 \u8acb\u6c42\u3001\u56de\u61c9 \u77ed \u9ad8\u53ef\u7528\u3001\u4f4e\u6f5b\u6642 \u6279\u6b21\u8655\u7406 \u8acb\u6c42 \u9577 \u901a\u91cf\uff08throughput\uff09 \u4e32\u6d41\u8655\u7406 \u6d88\u5316\u3001\u7522\u51fa \u7121 \u8ca0\u8f09\u7cfb\u7d71\u985e\u5225\u7684\u6bd4\u8f03
\u57fa\u672c\u4e0a\u7cfb\u7d71\u53ef\u4ee5\u5206\u4e09\u7a2e\uff1a
\u900f\u904e\u9019\u4e9b\u7570\u65bc\u524d\u9762\u6211\u5011\u6240\u63d0\u904e\u7684\u8cc7\u6599\u5eab\u7684\u8cc7\u6599\u7cfb\u7d71\uff0c\u6211\u5011\u5c31\u53ef\u4ee5\u5efa\u69cb\u51fa\u4e00\u500b\u53ef\u9760\uff08\u9ad8\u53ef\u7528\u3001\u4f4e\u6f5b\u6642\uff09\u3001\u9ad8\u5ef6\u5c55\u548c\u6613\u65bc\u7ba1\u7406\u7684\u5927\u67b6\u69cb\u3002
"},{"location":"feedback/designing-data-intensive-applications/derived-batch/#\u7bc4\u570d\u5230\u54ea\u88e1","title":"\u7bc4\u570d\u5230\u54ea\u88e1","text":"\u6211\u5011\u6703\u4ecb\u7d39\u6279\u6b21\u8655\u7406\u4e2d\u7684 MapReduce \u4f86\u5e6b\u52a9\u6211\u5011\u4e86\u89e3\u6279\u6b21\u8655\u7406\u5728\u505a\u4ec0\u9ebc\u3002 \u96d6\u7136\u4ed6\u5df2\u7d93\u904e\u6642\u4e86\uff0c \u4f46\u662f\u4ed6\u7c21\u55ae\u660e\u77ad\u7684\u904b\u4f5c\u65b9\u5f0f\u80fd\u5920\u8b93\u6211\u5011\u5f88\u8f15\u6613\u66b8\u89e3\u6279\u6b21\u8655\u7406\u7684\u6982\u5ff5\u3002
\u7576\u7136\uff0c\u5728\u9019\u4e4b\u4e0a\u7684\u5176\u4ed6\u985e\u578b\u7684\u5de5\u5177\u548c\u6846\u67b6\u4e5f\u6703\u7c21\u55ae\u4ecb\u7d39\u4e00\u4e0b\u3002
\u6279\u6b21\u8655\u7406\u7684\u6b77\u53f2
\u4f55\u6a02\u79ae\u5728 1890 \u5e74\u7684\u4eba\u53e3\u666e\u67e5\u6240\u4f7f\u7528\u7684\u6253\u5b54\u5361\u7247\u88fd\u8868\u6a5f \u5c31\u662f\u4f7f\u7528\u6a5f\u68b0\u5f0f\u7684\u65b9\u5f0f\u805a\u5408\u4eba\u53e3\u7684\u8cc7\u6599\uff08\u5e74\u9f61\u3001\u4eba\u7a2e\u7b49\u7b49\uff09\u3002 \u9019\u7a2e\u5229\u7528\u6253\u5b54\u5361\u628a\u591a\u500b\u7bc0\u9ede\u7684\u8cc7\u6599\u6574\u5408\u5728\u4e00\u8d77\u7684\u65b9\u5f0f\u548c\u73fe\u4ee3\u7684 MapReduce \u65b9\u5f0f\u5341\u5206\u76f8\u4f3c\u3002
\u5c31\u50cf\u6211\u5011\u5728\u7db2\u969b\u7db2\u8def\u7684\u9032\u7a0b\u4e0a\u770b\u5230\u7684\u4e00\u6a23\uff0c \u6b77\u53f2\u7e3d\u662f\u5728\u91cd\u8907\u3002
"},{"location":"feedback/designing-data-intensive-applications/derived-batch/#unix","title":"Unix","text":"\u6211\u5011\u6703\u5148\u900f\u904e GNU Coreutils \u4e86\u89e3 Unix \u958b\u767c\u54f2\u5b78\uff0c\u4e26\u5982\u4f55\u63a8\u5ee3\u5230 MapReduce\u3002
\u6211\u5011\u900f\u904e\u65e5\u8a8c\u6a94\u6848\uff0c\u5617\u8a66\u627e\u51fa\u4e00\u4e9b\u6709\u7528\u7684\u8cc7\u8a0a\uff1a
"},{"location":"feedback/designing-data-intensive-applications/derived-batch/#\u67e5\u770b\u4e00\u4e0b\u8cc7\u6599\u683c\u5f0f","title":"\u67e5\u770b\u4e00\u4e0b\u8cc7\u6599\u683c\u5f0f","text":"$ head -n 5 11-30.log\n2 2021-11-30T08:42:26.728Z 2021-11-30T08:42:27.587Z 858.817257 400\n3 2021-11-30T08:42:26.729Z 2021-11-30T08:42:27.590Z 860.616378 400\n4 2021-11-30T08:42:26.729Z 2021-11-30T08:42:27.591Z 861.390112 400\n1 2021-11-30T08:42:26.726Z 2021-11-30T08:42:27.592Z 865.229151 400\n2 2021-11-30T08:42:27.588Z 2021-11-30T08:42:27.596Z 7.301911 400\n
\u4e0a\u9762\u7684\u6a94\u6848\u6bcf\u6b04\u7684\u503c\u5206\u5225\u662f connection ID
\u3001start time
\u3001end time
\u3001latency
\u3001HTTP status code
\u3002
# \u627e\u6700\u4f4e\u6f5b\u6642\n$ cat 11-30.log | awk '{print $4}' | sort -n | head -n 5\n
"},{"location":"feedback/designing-data-intensive-applications/derived-batch/#\u67e5\u770b\u6f5b\u6642\u4ee5\u6beb\u79d2\u70ba\u55ae\u4f4d\u7684\u5206\u4f48","title":"\u67e5\u770b\u6f5b\u6642\u4ee5\u6beb\u79d2\u70ba\u55ae\u4f4d\u7684\u5206\u4f48","text":"# \u900f\u904e less \u4f86\u6aa2\u67e5\u8f38\u51fa\u7684\u683c\u5f0f\uff0c\u7b49\u78ba\u8a8d\u6c92\u554f\u984c\u5f8c\u518d\u63a5\u8457\u57f7\u884c\u5f8c\u7e8c\u6b65\u9a5f\uff0c\u907f\u514d\u8017\u6642\u7684\u8a08\u7b97\u91cd\u65b0\u57f7\u884c\u3002\n$ cat 11-30.log | awk '{printf \"%.0f\\n\", $4}' | less\n# \u6703\u767c\u73fe\u662f\u9577\u5c3e\u5206\u4f48\n$ cat 11-30.log | awk '{printf \"%.0f\\n\", $4}' | sort | uniq -c | sort -n -k2 | head -n 20\n
\u76f8\u95dc\u5c0f\u6284\u53ef\u4ee5\u53c3\u8003 the-art-of-command-line
"},{"location":"feedback/designing-data-intensive-applications/derived-batch/#\u6709\u54ea\u4e9b\u54f2\u5b78\u5728\u5176\u4e2d","title":"\u6709\u54ea\u4e9b\u54f2\u5b78\u5728\u5176\u4e2d","text":"\u525b\u525b\u6211\u5011\u900f\u904e sort
\u3001uniq
\u3001awk
\u3001sed
\u7b49\u7b49\u7684\u5de5\u5177\u5b8c\u6210\u4e00\u7cfb\u5217\u8907\u96dc\u7684\u904b\u7b97\u3002GNU Coreutils \u7684\u7406\u5ff5\u4fbf\u662f\u900f\u904e\u55ae\u4e00\u4ecb\u9762\u8b93\u6bcf\u500b\u7368\u7acb\u7684\u5c0f\u5de5\u5177\u5f7c\u6b64\u6e9d\u901a\uff0c\u800c\u9019\u4e9b\u5c0f\u5de5\u5177\u90fd\u80fd\u505a\u597d\u81ea\u5df1\u7684\u4e8b\uff0c\u4ee5\u4e0b\u662f GNU Coreutils \u5728\u8a2d\u8a08\u6642\u57fa\u65bc\u7684\u7406\u5ff5\uff1a
\u4ec0\u9ebc\u662f\u6bcf\u500b\u5de5\u5177\u505a\u597d\u81ea\u5df1\u7684\u4e8b\uff1f\u8209\u4f8b\u4f86\u8aaa\uff0csort
\u6703\u628a\u5927\u8cc7\u6599\u5206\u6210\u5c0f\u4efd\u5c0f\u4efd\u6392\u5e8f\u597d\u7684\u8cc7\u6599\uff0c \u518d\u628a\u9019\u4e9b\u8cc7\u6599\u6574\u5408\u5728\u4e00\u8d77\u3002\u5176\u4e2d\u6bcf\u4efd\u8cc7\u6599\u90fd\u662f\u900f\u904e\u4e0d\u540c CPU \u4e26\u884c\u8655\u7406\u7684\uff0c \u8b93\u6574\u9ad4\u6548\u7387\u63d0\u9ad8\u5230\u5e7e\u4e4e\u6c92\u6709\u4e00\u500b\u7a0b\u5f0f\u8a9e\u8a00\u5167\u5efa\u7684\u6392\u5e8f\u6f14\u7b97\u6cd5\u80fd\u548c\u4ed6\u4e26\u8ad6\u7684\u3002
\u5148\u4eba\u7684\u667a\u6167
\u6709\u6c92\u6709\u5f88\u50cf\u6211\u5011\u6700\u8fd1\u7684\u654f\u6377\u958b\u767c\uff1f
"},{"location":"feedback/designing-data-intensive-applications/derived-batch/#\u5927\u81f4\u6d41\u7a0b\u662f\u4ec0\u9ebc","title":"\u5927\u81f4\u6d41\u7a0b\u662f\u4ec0\u9ebc","text":"\u4ed6\u7528\u4ec0\u9ebc\u55ae\u4e00\u4ecb\u9762\u4f86\u6e9d\u901a\u4e26\u9054\u6210 \u8f38\u5165=\u8f38\u51fa\uff1f\u6a94\u6848\u3002 \u4e0d\u540c\u7a0b\u5e8f\u900f\u904e\u50b3\u905e\u5f7c\u6b64\u7684\u6a94\u6848\u63cf\u8ff0\u7b26\uff08file descriptor\uff09\u4f86\u544a\u77e5\u5c0d\u65b9\u81ea\u5df1\u7684\u6a94\u6848\u4f4d\u7f6e\uff0c \u7a0b\u5e8f\u518d\u524d\u5f80\u8a72\u6a94\u6848\u8b80\u53d6\u8cc7\u6599\u3002\u4e00\u822c\u4f86\u8aaa\uff0c\u6a94\u6848\u63cf\u8ff0\u7b26\u6709\u4e09\u7a2e
\u7576\u4ed6\u62ff\u5230\u6a94\u6848\u63cf\u8ff0\u7b26\u6642\uff0c\u4e0a\u4e00\u500b\u7a0b\u5e8f\u5c31\u6703\u4e32\u6d41\u8f38\u51fa\u9032\u4f86\uff0c\u4e26\u8b93\u4e0b\u4e00\u500b\u7a0b\u5e8f\u4f7f\u7528\u3002 \u5982\u679c\u904b\u7b97\u5fc5\u9808\u7b49\u5230\u5168\u90e8\u7b97\u5b8c\u7121\u6cd5\u900f\u904e\u4e32\u6d41\u50b3\u905e\u7684\u5373\u6642\u8cc7\u6599\uff08\u4f8b\u5982\u6392\u5e8f\uff09\uff0c\u9019\u6642\u5c31\u6703\u4e00\u6b21\u6027\u5beb\u5165\u3002
Linux \u5167\u6240\u6709\u6771\u897f\u90fd\u662f\u6a94\u6848
\u4e8b\u5be6\u4e0a\uff0cLinux \u7cfb\u5217\u7684\u4f5c\u696d\u7cfb\u7d71\u5728\u5e95\u5c64\u4e2d\u4e0d\u540c\u7a0b\u5e8f\u9593\u7684\u6e9d\u901a\u90fd\u662f\u6a94\u6848\u3002
\u4f8b\u5982\u8033\u6a5f\u900f\u904e /dev/audio
\u4e0b\u7684\u6a94\u6848\u63cf\u8ff0\u7b26\u4f86\u4f5c\u70ba\u8f38\u5165\u8f38\u51fa\u3001\u672c\u5730\u7aef\u7684\u7db2\u8def\u6e9d\u901a\u5247\u662f\u900f\u904e /dev/lp0
\u4e0b\u7684\u6a94\u6848\u63cf\u8ff0\u7b26\u4f86\u8a18\u9304\u76f8\u95dc\u8cc7\u8a0a\u7b49\u7b49\u3002
\u6240\u4ee5\u6211\u5011\u524d\u9762\u770b\u5230\u7684 |
\u5176\u5be6\u5c31\u662f\u4e0a\u4e00\u500b\u7a0b\u5e8f\u50b3\u905e\u81ea\u5df1\u7684\u6a94\u6848\u63cf\u8ff0\u7b26\u7d66\u4e0b\u4e00\u500b\u6a94\u6848\uff0c\u4e5f\u5c31\u662f\u6240\u8b02\u7684\u7ba1\u7dda\uff08pipeline\uff09\u3002 \u8b80\u53d6\u6a94\u6848\u6642\u518d\u628a ANSII \u7de8\u78bc\u65b9\u5f0f\u7684 \\n
\uff080x0A
\uff09\u4f5c\u70ba\u5b9a\u754c\u7b26\uff08delimiter\uff09\u3002\u4f9d\u6b64\uff0c\u6240\u8b02\u300c\u4e00\u7b46\u300d\u8cc7\u6599\u5c31\u51fa\u4f86\u4e86\u3002
\u9019\u662f\u975e\u5e38\u53b2\u5bb3\u7684\uff01\u4ed6\u8b93\u8655\u7406\u5b8c\u5168\u4e0d\u540c\u6771\u897f\u7684\u5de5\u5177\u5f7c\u6b64\u80fd\u9019\u9ebc\u826f\u597d\u7684\u6e9d\u901a\uff0c \u60f3\u60f3\u6211\u5011\u7684\u8cc7\u6599\u5eab\u5373\u4f7f\u90fd\u662f\u95dc\u806f\u5f0f\uff08\u6216\u6587\u4ef6\u5f0f\u6216\u5716\u50cf\u5f0f\uff09\uff0c\u5982\u679c\u8981\u5f9e \u8cc7\u6599\u5eab A \u8f49\u79fb\u5230 \u8cc7\u6599\u5eab B \u662f\u591a\u9ebb\u7169\u7684\u4e8b\u3002
\u5b9a\u754c\u7b26
\u96d6\u7136\u66f4\u6b63\u78ba\u7684\u5b9a\u754c\u7b26\u662f 0x0E
\uff0c\u56e0\u70ba\u9019\u5c31\u662f\u4ed6\u88ab\u8a2d\u8a08\u51fa\u4f86\u7684\u539f\u56e0\u3002
\u4e0d\u904e\u6700\u7d42\u9078\u64c7\u7684 \\n
\u4e5f\u8a31\u5c31\u662f\u5728\u4eba\u985e\u7684\u53ef\u8b80\u6027\u548c\u6a5f\u5668\u7684\u53ef\u8b80\u6027\u9593\u7684\u5e73\u8861\u5427\u3002
HTTP \u900f\u904e URL \u4f86\u6307\u5b9a\u76ee\u7684\u7aef\uff08\u4e0d\u53ea\u662f domain\uff0c\u4e5f\u5305\u62ec path\u3001segment \u548c query\uff09\uff0c \u800c\u9019\u500b\u65b9\u5f0f\u8b93\u7db2\u969b\u7db2\u8def\u7684\u6240\u6709 HTTP \u7684\u6e9d\u901a\u53ef\u4ee5\u81ea\u7531\u5207\u63db\uff0c \u9019\u5c31\u597d\u50cf\u7ba1\u7dda\u529f\u80fd\u4e00\u6a23\uff0c\u6240\u4ee5\u5de5\u5177\uff08\u7db2\u7ad9\uff09\u5f7c\u6b64\u9593\u7684\u6e9d\u901a\u90fd\u662f\u901a\u904e\u50b3\u9001\u6a94\u6848\u63cf\u8ff0\u7b26\uff08URL\uff09\u3002
\u4f46\u662f\u5728\u65e9\u671f\u7684 BBS \u6240\u4f7f\u7528\u7684\u7db2\u8def\u5354\u5b9a\u4e3b\u8981\u662f BNU/UUCP \u6216\u662f Fidonet \u901a\u8a0a\u5354\u5b9a\uff0c \u4f7f\u7528\u8005\u7aef\u900f\u904e\u64a5\u63a5\u8edf\u9ad4\u901a\u904e\u6578\u64da\u6a5f\u64a5\u53eb\u8a72 BBS \u7ad9\u53f0\u7684\u96fb\u8a71\u865f\u78bc\u4f86\u9023\u63a5\u9032\u7ad9\uff0c \u9019\u5c31\u4ee3\u8868\u7576\u9700\u8981\u8f49\u5230\u5225\u7684\u7ad9\u53f0\u6642\uff0c\u6211\u5011\u9700\u8981\u9000\u51fa\u73fe\u6709\u7ad9\u53f0\uff0c\u8f38\u5165\u76ee\u6a19\u7ad9\u53f0\u7684\u96fb\u8a71\u865f\u78bc\uff0c \u518d\u8f38\u5165\u7d30\u90e8\u7684\u4f4d\u7f6e\uff08\u4ee5 URL \u70ba\u4f8b\u5c31\u662f path + segment + query\uff09\uff0c \u9019\u5c31\u8b93\u4e0d\u540c\u7db2\u7ad9\u7684\u6e9d\u901a\u8b8a\u5f97\u975e\u5e38\u56f0\u96e3\u3002
"},{"location":"feedback/designing-data-intensive-applications/derived-batch/#\u6bd4\u8f03","title":"\u6bd4\u8f03","text":"\u548c\u5176\u4ed6\u7a0b\u5f0f\u6709\u4ec0\u9ebc\u5dee\uff1f
function getLatencyDistribution(filename) {\n const stream = readFileLineByLine(filename);\n const counter = {};\n\n for (const line of stream) {\n const latency = line.split(\" \")[3];\n const latencyInt = parseInt(latency, 10);\n counter[latencyInt] = (counter[latencyInt] || 0) + 1;\n }\n\n return Object.entries(counter)\n .map((entry) => ({ latency: entry[0], count: entry[1] }))\n .sort((a, b) => a.latency - b.latency);\n}\n
JavaScript \u5beb\u51fa\u4f86\u7684\u51fd\u5f0f\u4e00\u6a23\u53ef\u4ee5\u5b8c\u6210\u5de5\u4f5c\uff0c\u4f46\u662f\u7576\u6211\u9700\u8981\u8abf\u6574\u7522\u51fa\uff0c\u4f8b\u5982\u4ee5\u6578\u91cf\u4f86\u6392\u5e8f\u800c\u975e\u4ee5\u5ef6\u9072\u4f86\u6392\u5e8f\uff0c \u5c31\u8981\u9032\u53bb\u7a0b\u5f0f\u78bc\u88e1\u9762\u66b8\u89e3\u6574\u500b\u7d50\u69cb\u518d\u505a\u8abf\u6574\u3002\u76f8\u5c0d\u800c\u8a00 GNU Coreutils \u5c31\u5f88\u55ae\u7d14\u4e86\u3002
\u9664\u6b64\u4e4b\u5916\uff0c\u6211\u5011\u53ef\u4ee5\u770b\u5230 JS \u7a0b\u5f0f\u78bc\u88e1\u9762\u4ed6\u7684 counter
\u662f\u4f7f\u7528\u8a18\u61b6\u9ad4\u4f86\u8a18\u9304\u9019\u4e9b\u6578\u91cf\uff0c \u4f46\u662f\u5982\u679c\u7576\u7c92\u5ea6\u8abf\u5230\u5f88\u7d30\u7684\u5fae\u79d2\u7b49\u7d1a\u6642\u5c31\u5f88\u53ef\u80fd\u51fa\u73fe\u8a18\u61b6\u9ad4\u4e0d\u5920\u7684\u72c0\u6cc1\uff0c \u76f8\u6bd4\u8f03\u800c\u8a00 sort
\u548c uniq
\u7684\u7d44\u5408\uff0c \u56e0\u70ba\u662f\u4f7f\u7528\u6a94\u6848\u7cfb\u7d71\u505a\u7d00\u9304\uff08\u548c\u5c11\u91cf\u7684\u8a18\u61b6\u9ad4\uff09\u5c31\u53ef\u4ee5\u907f\u514d\u9019\u4ef6\u4e8b\u7684\u767c\u751f\u3002
sort \u548c uniq \u4e0d\u90a3\u9ebc\u4f9d\u8cf4\u65bc\u8a18\u61b6\u9ad4
uniq
\u7684\u505a\u6cd5\u662f\u53ea\u627e\u524d\u5f8c\u6587\u662f\u5426\u6709\u76f8\u540c\u7684\u5b57\u4f86\u505a\u8a18\u6578\uff0c\u9019\u6a23\u5c31\u53ef\u4ee5\u907f\u514d\u5168\u6587\u6aa2\u7d22\u3002 \u6240\u4ee5\u6211\u5011\u624d\u9700\u8981\u5728 uniq
\u4e4b\u524d\u5148 sort
\u3002
\u800c sort
\u6703\u628a\u6a94\u6848\u62c6\u6210\u4e00\u5c0f\u584a\u4e00\u5c0f\u584a\uff08\u6279\u6b21\u8655\u7406\u7684\u6982\u5ff5\uff01\uff09\uff0c\u7136\u5f8c\u5404\u81ea\u6392\u5e8f\u518d\u6574\u5408\u5728\u4e00\u8d77\uff0c \u5c31\u597d\u50cf\u6211\u5011\u524d\u9762\u770b\u5230\u7684\u6392\u5e8f\u5b57\u4e32\u8868\u3002
GNU Coreutils \u7684\u597d\u8655\u4e0d\u50c5\u50c5\u662f\u65b9\u4fbf\u4e14\u6709\u6548\uff0c\u4ed6\u4e5f\u53ef\u4ee5\u900f\u904e\u81ea\u5df1\u5beb\u5de5\u5177\u63d0\u9ad8\u5f48\u6027\u5ea6\u3002
\u900f\u904e Python \u5beb\u81ea\u5df1\u7684\u7a0b\u5e8f myProcessimport os # (1)\n\nr, w = os.pipe()\nfr = os.fdopen(r, \"r\", 1)\nfw = os.fdopen(w, \"w\")\n\nwhile fr.readable():\n output = myProcess(fr.read())\n fw.write(output)\n
pip install -e $LIB_FOLDER
\u4f86\u7522\u751f\u81ea\u5df1\u7684\u5de5\u5177\u4e86\u3002\u7576\u7136 GNU Coreutils \u9084\u662f\u6709\u4e9b\u7f3a\u9ede\u7684\uff1a
{print $4}
\u4ee3\u8868\u7684\u662f\u6f5b\u6642\u3002curl
\u662f\u7528\u4f86\u547c\u53eb HTTP \u8acb\u6c42\u7684\u5de5\u5177\uff0cHTTP \u8acb\u6c42\u7684\u8f38\u5165\u6709\u5f88\u591a\u7a2e\uff1a \u8cc7\u6599\uff08body\uff09\u3001\u6a19\u982d\uff08header\uff09\u3001\u9a57\u8b49\u8cc7\u8a0a\u3001\u662f\u5426\u4f7f\u7528 proxy \u7b49\u7b49\u3002\u6700\u5f8c\u518d\u63d0\u4e00\u4e0b GNU Coreutils \u7684\u91cd\u9ede\uff1a\u9ad8\u5bb9\u932f\u6027\u3002
\u4efb\u4f55\u8f38\u5165\u7684\u6a94\u6848\u53ea\u505a\u8b80\u53d6\uff0c\u4e26\u8f38\u51fa\u65bc\u5176\u4ed6\u6a94\u6848\uff08\u6216\u87a2\u5e55\uff09\uff0c\u4f60\u4e0d\u7528\u64d4\u5fc3\u8f38\u5165\u5728\u50b3\u5165\u9019\u500b\u5de5\u5177\u4e4b\u5f8c\u6703\u53d7\u5230\u640d\u58de\u3002 \u9019\u4e5f\u4ee3\u8868\u4f60\u53ef\u4ee5\u53cd\u8986\u5617\u8a66\u8abf\u6574\u5de5\u5177\u7684\u4f7f\u7528\uff0c\u6216\u8005\u7576\u6709\u4efb\u4f55\u554f\u984c\u6642\u91cd\u65b0\u5617\u8a66\u4e0d\u540c\u65b9\u5f0f\uff0c \u9019\u662f\u4e00\u500b\u975e\u5e38\u91cd\u8981\u7684\u529f\u80fd\uff0c\u6211\u5011\u4e5f\u6703\u5728\u5f8c\u9762\u518d\u4e00\u6b21\u770b\u5230\u9019\u7a2e\u6a5f\u5236\u7684\u597d\u8655\u3002
"},{"location":"feedback/designing-data-intensive-applications/derived-batch/#hadoop","title":"Hadoop","text":"\u6211\u5011\u4e86\u89e3\u4e86 Unix \u7684\u54f2\u5b78\u7684\u597d\u8655\u5f88\u591a\uff0c\u4f46\u662f\u6709\u6c92\u6709\u8fa6\u6cd5\u8f49\u79fb\u5230\u5206\u6563\u5f0f\u7684\u7cfb\u7d71\u5462\uff1f
\u5206\u6563\u5f0f \u55ae\u53f0 Hadoop Unix HDFS \u7ba1\u7dda MapReduce \u5728\u9019\u4e4b\u4e0a\u7684\u6846\u67b6\u5206\u6563\u5f0f\u7684 Unix \u5c31\u662f Hadoop
Hadoop \u5c31\u662f\u5206\u6563\u5f0f\u7684\u4e00\u500b\u5927 Unix \u7cfb\u7d71\u3002\u800c\u9019\u4e4b\u4e2d Hadoop Distributed File System(HDFS) \u5c31\u662f GNU Coreutils \u4f7f\u7528\u7684\u7ba1\u7dda\u3002
\u800c\u6211\u5011\u6703\u4ecb\u7d39\u7684 MapReduce \u5c31\u662f\u9019\u4e4b\u4e0a\u7684\u5176\u4e2d\u4e00\u7a2e\u6846\u67b6\u3002
"},{"location":"feedback/designing-data-intensive-applications/derived-batch/#hdfs","title":"HDFS","text":"HDFS \u662f\u958b\u6e90\u8edf\u9ad4\uff0c\u4ed6\u6709\u5f88\u591a\u5176\u4ed6\u76f8\u4f3c\u7684\u7522\u54c1\uff0c\u4f46\u5927\u81f4\u4e0a\u7684\u908f\u8f2f\u662f\u4e00\u6a23\u7684\uff1a\u900f\u904e\u7121\u5171\u4eab\u67b6\u69cb\u5efa\u69cb\u51fa\u591a\u53f0\u7bc0\u9ede\u4ea4\u63db\u8cc7\u6599\u7684\u6a5f\u5236
\u5728\u4ecb\u7d39 MapReduce \u4e4b\u524d\u6211\u5011\u5148\u770b\u770b\u61c9\u7528
\u4f8b\u5982 Lucene/Solr \u5c31\u662f\u900f\u904e MapReduce \u5728\u5206\u6563\u5f0f\u8cc7\u6599\u7cfb\u7d71\u4e2d\u7522\u751f\u7d22\u5f15\uff08Index\uff09\u3002
\u5168\u6587\u7d22\u5f15\u7684\u5efa\u7acb\u65b9\u5f0f\u662f\u900f\u904e\u4ee5\u540d\u8a5e\u548c\u6587\u7ae0\u7de8\u865f\u505a key-value pair\u3002 \u8209\u4f8b\u4f86\u8aaa\uff0c\u860b\u679c: 1,6
\u4ee3\u8868\u6709 \u860b\u679c
\u55ae\u8a5e\u7684\u6587\u7ae0\u6709 1,6
\u3002 \u7576\u7136\u5be6\u969b\u53ef\u80fd\u66f4\u8907\u96dc\u5305\u62ec\u6a21\u7cca\u7d22\u5f15\u3001\u540c\u7fa9\u8a5e\u3001\u932f\u5b57\u641c\u5c0b\u7b49\u7b49\u4e0d\u904e\u5148\u4ee5\u6b64\u70ba\u57fa\u790e\u4f86\u8a0e\u8ad6\u3002
\u7576\u4f7f\u7528 MapReduce \u6642\uff0c\u5c31\u6703\u8b8a\u5f97\u5f88\u55ae\u7d14\uff1a\u628a\u6240\u6709\u6587\u7ae0\u5206\u5340\u5230\u4e0d\u540c\u6a5f\u5668\uff0c \u8b93\u5404\u81ea\u53bb\u5256\u6790\u51fa\u55ae\u8a5e\uff08map\uff09\uff0c\u6700\u5f8c\u5408\u4f75\uff08reduce\uff09\u6210\u4e0a\u8ff0\u7684\u9375\u503c\u7d44\u3002 \u4f60\u53ef\u80fd\u53ef\u4ee5\u5beb\u5e7e\u500b\u5de5\u5177\u53bb\u505a\u4e0d\u540c\u7684\u4e8b\uff0c\u4f8b\u5982\u6709\u4e00\u500b\u5de5\u5177\u662f\u628a\u6587\u7ae0\u62c6\u6210\u55ae\u5b57\uff0c \u4e00\u500b\u5de5\u5177\u662f\u628a\u55ae\u5b57\u505a\u7d71\u8a08\uff0c\u4e0d\u904e\u6bcf\u500b\u5de5\u5177\u90fd\u662f\u4e00\u7d44 MapReduce\u3002
\u9019\u5c31\u50cf\u662f\u4e00\u500b\u9ed1\u76d2\u5b50\uff0c\u6587\u7ae0\u9032\u4f86\u7d22\u5f15\u51fa\u53bb\uff0c\u900f\u904e\u53e6\u4e00\u7a2e\u9762\u8c8c\u5be9\u8996\u8cc7\u6599\u3002 \u7136\u5f8c\u7576\u6587\u7ae0\u6709\u7570\u52d5\u6642\uff0c \u5c31\u91cd\u65b0\u518d\u8dd1\u4e00\u6b21\u5c31\u53ef\u4ee5\u4e86\uff08\u70ba\u4e86\u7bc0\u7701\u8a08\u7b97\u8cc7\u6e90\uff0c\u9019\u90e8\u5206\u662f\u53ef\u4ee5\u88ab\u512a\u5316\u7684\uff0c\u4f8b\u5982\u53ea\u8dd1\u5fc5\u8981\u7684\u8cc7\u6e90\uff09\uff0c\u975e\u5e38\u55ae\u7d14\u3002
\u5f9e\u4e0a\u4f8b\u4f86\u770b\u5c0d\u65bc Map \u548c Reduce \u7684\u5de5\u4f5c\u5c31\u76f8\u5c0d\u55ae\u7d14\u4e86\u3002
\u7576 Mapper \u628a\u4e8b\u60c5\u90fd\u505a\u5b8c\u4e86\u4e4b\u5f8c\uff0c\u6703\u901a\u77e5\u4e2d\u592e\u4e26\u8b93\u4e2d\u592e\u901a\u77e5 Reducer\uff0c\u9019\u6642 Reducer \u6703\u958b\u59cb\u8ddf Mapper \u8981\u8cc7\u6599\u3002 Reducer \u9019\u4e00\u7cfb\u5217\u8981\u8cc7\u6599\u3001\u628a\u5f97\u5230\u7684\u8cc7\u6599\u6392\u5e8f\u5c31\u53eb\u505a shuffle
\uff08\u9019\u548c\u6211\u5011\u5e38\u898b\u7684\u96a8\u6a5f\u6027\u4e0d\u592a\u4e00\u6a23\uff0c\u9700\u6ce8\u610f\u907f\u514d\u641e\u6df7\uff09\u3002
\u4e00\u7d44 Mapper \u52a0 Reducer \u7a31\u70ba\u4e00\u500b \u7a0b\u5e8f\u3002\u800c\u6bcf\u500b\u7a0b\u5e8f\u8f38\u51fa\u7684\u7d50\u679c\u90fd\u6703\u4e1f\u9032 HDFS \u4e2d\u3002
\u8981\u6ce8\u610f\u7684\u662f\uff0c\u6bcf\u6b21 Mapper \u7684\u8f38\u51fa\u90fd\u6703\u505a\u5230\u6392\u5e8f\u7684\u52d5\u4f5c\uff08\u5c31\u50cf\u6211\u5011\u524d\u9762 Unix \u4f8b\u5b50\u4e2d\u7684 sort
\uff09\uff0c \u4e26\u628a\u6392\u5e8f\u5f8c\u7684\u7d50\u679c\u91cd\u65b0\u5206\u914d\u7d66\u4e0d\u540c\u7bc0\u9ede\u7684 Reducer\u3002
\u5c31\u50cf Unix \u90a3\u6a23\uff0c\u55ae\u4e00\u500b\u7a0b\u5e8f\u53ef\u4ee5\u505a\u7684\u4e8b\u60c5\u6709\u9650\uff0c\u4f46\u662f\u900f\u904e\u7d44\u5408\u591a\u500b\u7a0b\u5e8f\u5c31\u53ef\u4ee5\u5275\u9020\u51fa\u9ad8\u6548\u53c8\u5feb\u901f\u8fed\u4ee3\u7684\u61c9\u7528\u3002 \u9019\u4e00\u6574\u4e32\u7684\u7a0b\u5e8f\u7a31\u70ba\u5de5\u4f5c\u6d41\u7a0b\uff08workflow\uff09
\u7136\u800c MapReduce \u4e0d\u50cf Unix \u90a3\u6a23\u53ef\u4ee5\u50b3\u905e\u6a94\u6848\u63cf\u8ff0\u7b26\uff0c \u4ed6\u662f\u900f\u904e\u8f38\u51fa\u5230\u6307\u5b9a\u8cc7\u6599\u593e\u5f8c\u8b93\u4e0b\u4e00\u500b\u7a0b\u5e8f\u53d6\u5f97\u8a72\u8cc7\u6599\u593e\u4e0b\u7684\u8cc7\u6599\u4f5c\u70ba\u8f38\u5165\u4f86\u50b3\u905e\u5176\u8f38\u51fa\uff0c \u9019\u662f\u6709\u597d\u6709\u58de\u7684\u5f85\u6703\u6211\u5011\u518d\u4e00\u8d77\u3002
\u96a8\u8457\u5de5\u4f5c\u6d41\u7a0b\u8d8a\u4f86\u8d8a\u8907\u96dc\uff0c\u6703\u9700\u8981\u4e00\u500b\u597d\u7684\u7ba1\u7406\u7cfb\u7d71\u5e6b\u5fd9\u76e3\u7763\u9019\u4e9b\u7a0b\u5e8f\u3002 \u9019\u6642\u985e\u4f3c Airflow \u7684\u5de5\u4f5c\u6d41\u7a0b\u7ba1\u7406\u4eba\uff08workflow schedular\uff09\u5c31\u51fa\u73fe\u4e86\u3002
"},{"location":"feedback/designing-data-intensive-applications/derived-batch/#\u806f\u5408","title":"\u806f\u5408","text":"\u5f88\u591a\u6642\u5019\u6211\u5011\u4e0d\u6703\u53ea\u770b\u4e00\u500b\u6a94\u6848\uff0c\u6211\u5011\u53ef\u80fd\u6703\u591a\u500b\u6a94\u6848\u540c\u6642\u4f7f\u7528\uff0c \u5c31\u597d\u50cf\u95dc\u806f\u5f0f\u8cc7\u6599\u5eab\u7684\u806f\u5408\uff08Join\uff09\u548c\u7fa4\u7d44\uff08Group\uff09\u3002\u4f46\u662f\u5728 MapReduce \u4e2d\u8981\u600e\u9ebc\u5be6\u4f5c\uff1f
\u5716\u4e0a\u7684\u7bc4\u4f8b\u662f\u627e\u51fa\u300c\u62dc\u8a2a\u900f\u5b9a\u8def\u5f91\uff08path\uff09\u7684\u4eba\u7684\u5e74\u9f61\u300d\uff0c \u6240\u4ee5\u5c31\u9700\u8981\u628a\u4f7f\u7528\u8005\u7684\u6d3b\u52d5\u548c\u4f7f\u7528\u8005\u7684\u8cc7\u8a0a\u505a\u806f\u5408\u3002 \u9019\u6642\u6211\u5011\u53ef\u80fd\u5f97\u51fa\u7684\u7d50\u679c\u5c31\u6703\u662f\uff1a\u300c\u62dc\u8a2a\u8def\u5f91 /x \u7684\u4eba\u7684\u51fa\u751f\u5e74\u4efd\u70ba 1989 \u7684\u4eba\u6578\u662f x \u4eba\u300d\uff1a
\u62dc\u8a2a\u8def\u5f91 /x \u7684\u4eba\u7684\u51fa\u751f\u5e74\u4efd\u70ba 1989 \u7684\u4eba\u6578\u662f 5 \u4eba/x 1989 5\n/x 1990 6\n/y 1991 3\n...\n
\u9019\u88e1\u5c31\u53ef\u4ee5\u770b\u51fa\u806f\u5408\u548c\u7fa4\u7d44\u5728 MapReduce \u4e2d\u5176\u5be6\u662f\u975e\u5e38\u50cf\u7684\u3002 \u4ed6\u5011\u90fd\u662f\u5f9e Mapper \u4e2d\u5f97\u5230\u67d0\u4e9b\u6392\u5e8f\u4e14\u6574\u5408\u5728\u4e00\u8d77\u7684\u8cc7\u6599\u4e4b\u5f8c\uff0c\u505a\u4e00\u4e9b\u8a08\u7b97\u3002
\u540d\u8a5e
\u56e0\u70ba\u9019\u88e1\u7684\u806f\u5408\u662f\u5728\u8f38\u51fa Mapper \u4e26\u6392\u5e8f\u524d\u505a\u7684\uff0c\u6240\u4ee5\u9019\u7a2e\u806f\u5408\u65b9\u5f0f\u53eb\u505a sort-merge joins\uff0c \u4e5f\u56e0\u70ba\u771f\u6b63\u5f97\u5230\u806f\u5408\u7684\u8cc7\u6599\u662f\u5728 Reducer\uff0c\u6240\u4ee5\u4e5f\u53eb\u505a reduce-side joins\u3002
"},{"location":"feedback/designing-data-intensive-applications/derived-batch/#\u5982\u4f55\u8655\u7406\u71b1\u9ede\u504f\u659c","title":"\u5982\u4f55\u8655\u7406\u71b1\u9ede\u504f\u659c\uff1f","text":"\u5c31\u50cf\u6211\u5011\u5728\u5206\u6563\u5f0f\u8cc7\u6599\u5eab\u7684\u5206\u5340\u88e1\u770b\u5230\u7684\uff0c\u5982\u679c\u4f7f\u7528\u8005\u662f\u540d\u4eba\uff0c \u9019\u4e00\u6a23\u6703\u6709\u71b1\u9ede\u7684\u554f\u984c\uff0c\u6211\u5011\u6709\u5e7e\u7a2e\u505a\u6cd5\uff1a
user1 year30 /url/x
\u8b8a\u6210 123 user1 year30 /url/x
\u597d\u8b93\u4ed6\u53ef\u4ee5\u88ab\u6253\u4e82\u3002 \u7576\u6574\u5408\u597d\u4e4b\u5f8c\uff0c\u518d\u900f\u904e user1
\u6574\u5408\u8d77\u4f86\u3002\u6211\u5011\u4e5f\u53ef\u4ee5\u5728 Mapper \u9019\u908a\u505a\u806f\u5408\uff0c\u9019\u6642\u9019\u7a2e\u806f\u5408\u5c31\u53eb\u505a map-side join\u3002
Map-side join \u7684\u8f38\u51fa\u548c\u4e0d\u505a\u806f\u5408\u7684\u8f38\u51fa\u5dee\u4e0d\u591a\uff0c\u76f8\u5c0d\u800c\u8a00 Reduce-side join \u7684\u8f38\u5165\u6703\u53d7\u9650\u65bc\u4f60\u8981\u505a\u806f\u5408\u7684\u9375\u3002 \u4f46\u662f Map-side join \u537b\u53d7\u9650\u65bc\u806f\u5408\u8868\u7684\u6a23\u5b50\uff0c Hive \u7684 metastore \u548c Hadoop \u7684 HCatalog \u5c31\u662f\u7528\u4f86\u8a18\u9304\u9019\u4e9b\u806f\u5408\u8868\u7684\u7279\u6027\u3002
\u6211\u5011\u5be6\u969b\u5728\u4f7f\u7528\u7684\u6642\u5019\uff0c\u5176\u5be6\u5f88\u96e3\u53bb\u9078\u64c7\u61c9\u8a72\u8981\u7528\u4ec0\u9ebc\u806f\u5408\u65b9\u5f0f\uff0c \u6240\u4ee5\u9019\u6642\u5019\u5c31\u51fa\u5148\u9ad8\u7dad\u5ea6\u7684\u5de5\u5177\uff08\u5982 Pig\u3001Hive \u7b49\u7b49\uff0c\u9019\u908a\u6211\u5011\u5f85\u6703\u4e5f\u6703\u5728\u63d0\u5230\uff09\uff0c \u5728\u5e95\u5c64\u5e6b\u6211\u5011\u81ea\u52d5\u53bb\u9078\u64c7\u9019\u4e9b\u6771\u897f\u3002
"},{"location":"feedback/designing-data-intensive-applications/derived-batch/#vs-mpp","title":"v.s. MPP","text":"\u9084\u8a18\u5f97\u4e4b\u524d\u5728\u8a0e\u8ad6\u5206\u5340\u7684\u6642\u5019\u6709\u63d0\u5230 Massive Parallel Processing(MPP) \u55ce\uff1f \u4ed6\u662f\u900f\u904e\u5206\u5340\u8b93\u4e0d\u540c\u7bc0\u9ede\u7684\u8cc7\u6599\u5eab\u8655\u7406\u5404\u81ea\u64c1\u6709\u7684\u8cc7\u6599\u3002\u6211\u5011\u4e0b\u9762\u5c31\u4f86\u770b\u770b\u5169\u8005\u9593\u7684\u5dee\u7570\u5427\u3002
"},{"location":"feedback/designing-data-intensive-applications/derived-batch/#\u8cc7\u6599\u7d50\u69cb","title":"\u8cc7\u6599\u7d50\u69cb","text":"\u6279\u6b21\u8655\u7406\u7684\u8cc7\u6599\u662f\u751f\u7684\uff08Raw\uff09\uff0c\u76f8\u5c0d\u65bc MPP \u662f\u7d50\u69cb\u5316\u7684\uff08schema\uff09
\u4e0a\u9762\u63d0\u5230\u7684\u300c\u751f\u300d\u4ee3\u8868\u4ed6\u4e0d\u9700\u8981\u5148\u4ed4\u7d30\u800c\u8b39\u614e\u5730\u628a\u8cc7\u6599\u7d50\u69cb\u5316\u5c31\u53ef\u4ee5\u76f4\u63a5\u5132\u5b58\uff0c \u7576\u672a\u4f86\u9700\u8981\u8f49\u6210\u4efb\u4f55\u5546\u52d9\u908f\u8f2f\u7684\u7d50\u69cb\u90fd\u53ef\u4ee5\uff0c\u9019\u4e5f\u662f\u6240\u8b02\u7684\u58fd\u53f8\u7406\u8ad6\uff08Sushi\uff09\uff1a \u751f\u7684\u6bd4\u719f\u7684\u597d\u5403\u3002\u9019\u4e4b\u4e2d\u7684\u61c9\u7528\u6709\u4e9b\u4eba\u6703\u7a31\u70ba\u8cc7\u6599\u6e56\uff08Data lake\uff09\u6216\u4f01\u696d\u8cc7\u6599\u5009\u5132\uff08enterprise data hub\uff09\u3002
\u7576\u8cc7\u6599\u53ef\u4ee5\u8f15\u6613\u8f49\u6210\u4efb\u610f\u683c\u5f0f\u6642\uff0c\u8de8\u55ae\u4f4d\u7684\u5408\u4f5c\u5c31\u80fd\u8f15\u6613\u9054\u6210\uff0c \u4f8b\u5982 \u5718\u968a A \u60f3\u8981\u62ff \u5718\u968a B \u7684\u8cc7\u6599\u6642\uff0c\u4ed6\u4e0d\u9700\u8981\u95b1\u8b80\u7e41\u7463\u7684\u6587\u4ef6\u7b49\u7b49\uff0c \u53ef\u4ee5\u76f4\u63a5\u62ff\u539f\u59cb\u8cc7\u6599\u505a\u4efb\u4f55\u8f49\u63db\u52a0\u901f\u5275\u65b0\u7684\u958b\u767c\u3002
\u4e5f\u56e0\u6b64 Hadoop \u5e38\u5e38\u88ab\u61c9\u7528\u65bc ETL \u4e4b\u4e2d\uff0c\u7576\u4efb\u4f55\u7dda\u4e0a\u8cc7\u6599\u66f4\u65b0\u6642\uff0c \u6211\u53ef\u4ee5\u5148\u628a\u539f\u59cb\u8cc7\u6599\u5b58\u9032 HDFS\uff0c\u518d\u5229\u7528 MapReduce \u8f49\u6210\u9700\u8981\u7684 \u8cc7\u6599\u5009\u5132 \u683c\u5f0f\u4e26\u7f6e\u5165\u5176\u4e2d\u3002
"},{"location":"feedback/designing-data-intensive-applications/derived-batch/#\u5bb9\u932f\u6027","title":"\u5bb9\u932f\u6027","text":"\u6279\u6b21\u8655\u7406\u53ef\u4ee5\u505a\u5230 roll back\u3002
\u6279\u6b21\u8655\u7406\u9069\u5408\u6a5f\u5668\u5b78\u7fd2\u3001\u63a8\u85a6\u7cfb\u7d71\u7b49\u7b49\uff0c\u9019\u4e9b\u61c9\u7528\u7684\u7522\u51fa\u901a\u5e38\u90fd\u4ee3\u8868\u8457\uff1a \u6211\u5229\u7528\u539f\u59cb\u8cc7\u6599\uff08SOT\uff09\u7522\u51fa\u4e00\u7d44\u65b0\u7684\u884d\u751f\u8cc7\u6599\uff08Derived data\uff09\uff0c \u4f8b\u5982\uff0c\u4f7f\u7528\u8005\u7de8\u865f\u548c\u63a8\u85a6\u7522\u54c1\u7de8\u865f\u7684\u9375\u503c\u7d44\u3002\u7522\u51fa\u7684\u8cc7\u6599\u5c31\u53ef\u4ee5\u653e\u5728\u4efb\u4e00\u53f0\u7bc0\u9ede\u7684\u8cc7\u6599\u7cfb\u7d71\u4e2d\uff0c\u4e26\u900f\u904e\u8cc7\u6599\u5eab\u8b80\u53d6\u8a72\u8cc7\u6599\u63d0\u4f9b\u641c\u5c0b\u3002 \u9019\u904e\u7a0b\u4e5f\u4ee3\u8868\u4efb\u4f55\u4e00\u7d44\u65b0\u7684\u7522\u51fa\u5982\u679c\u6709\u4efb\u4f55\u932f\u8aa4\uff0c\u90fd\u53ef\u4ee5\u5f88\u5feb\u901f\u7684\u5207\u63db\u5230\u820a\u7248\u672c\uff0c\u5c31\u597d\u50cf\u61c9\u7528\u7a0b\u5f0f\u7684 roll back \u6a5f\u5236\u3002
\u53ef\u4ee5\u62ff\u9019\u4e9b\u6a94\u6848\u63d0\u4f9b\u641c\u5c0b\u7684\u8cc7\u6599\u5eab\u53ef\u80fd\u6709\uff1a
\u9019\u6a23\u5bb9\u932f\u7684\u6a5f\u5236\u7570\u65bc\u4ee5\u524d MPP\uff0c\u7576\u4f60\u66f4\u65b0\u8cc7\u6599\u4e4b\u5f8c\u901a\u5e38\u4ee3\u8868\u8457\u8cc7\u6599\u5eab\u7684\u8cc7\u6599\u78ba\u5be6\u88ab\u7570\u52d5\u4e86\u3002
"},{"location":"feedback/designing-data-intensive-applications/derived-batch/#\u91cd\u4f86\u7684\u6a5f\u5236","title":"\u91cd\u4f86\u7684\u6a5f\u5236","text":"\u7531\u65bc\u6bcf\u6b21\u57f7\u884c\u7a0b\u5e8f\u5f8c\uff0c\u90fd\u6703\u628a\u8f38\u51fa\u4e1f\u9032 HDFS\uff0c\u9019\u6a23\u5c31\u53ef\u4ee5\u78ba\u4fdd\u5728\u4e0b\u4e00\u6b21\u7684\u7a0b\u5e8f\u57f7\u884c\u4e2d\u65b7\u4e4b\u5f8c\uff0c \u53ef\u4ee5\u5229\u7528\u5df2\u7d93\u5728\u78c1\u789f\u4e2d\u7684\u8cc7\u6599\u76f4\u63a5\u91cd\u8907\u904b\u884c\u8a72\u7a0b\u5e8f\u3002 \u9019\u65b9\u5f0f\u7570\u65bc MPP \u6703\u76f4\u63a5\u6368\u68c4\uff08abort\uff09\u8a72\u8acb\u6c42\u6216\u8005\u5168\u90e8\u91cd\u505a\uff08\u9084\u8a18\u5f97\u539f\u5b50\u6027\u55ce\uff1f\uff09\u3002
\u4f46\u554f\u984c\u662f\uff0c\u6709\u9700\u8981\u505a\u5230\u9019\u9ebc\u5bb9\u932f\u55ce\uff1f\u96fb\u8166\u4e0d\u662f\u4e0d\u5e38\u58de\u6389\u55ce\uff1f
\u56e0\u70ba\u6279\u6b21\u8655\u7406\u7684\u91cd\u8981\u6027\u901a\u5e38\u4f4e\u65bc\u8655\u7406\u7dda\u4e0a\u8acb\u6c42\u7684\u6a5f\u5668\uff0c\u8655\u7406\u7dda\u4e0a\u8acb\u6c42\u7684\u7bc0\u9ede\u5c0d\u65bc\u9ad8\u53ef\u7528\u6027\u7684\u8981\u6c42\u975e\u5e38\u9ad8\uff0c \u9019\u6642\u5728\u5171\u7528\u8cc7\u6e90\u7684\u74b0\u5883\u4e0b\uff08\u4f8b\u5982\u96f2\u7aef\u53ef\u80fd\u90fd\u662f\u5728\u540c\u4e00\u500b\u5be6\u9ad4\u4e0d\u540c VM\uff09\u6703\u628a\u6279\u6b21\u8655\u7406\u7684\u7a0b\u5e8f\u91cd\u8981\u6027\uff08priority\uff09\u8abf\u4f4e\uff0c \u7576\u5176\u4ed6\u91cd\u8981\u6027\u9ad8\u7684\u7a0b\u5e8f\u9700\u8981\u8cc7\u6e90\uff08CPU/\u8a18\u61b6\u9ad4\uff09\u6642\uff0c\u6279\u6b21\u8655\u7406\u5c31\u5f88\u53ef\u80fd\u88ab\u4e2d\u65b7\u3002
\u4ee5 Google \u7684\u7d71\u8a08\u4f86\u8aaa\uff0c \u6bcf\u500b\u5c0f\u6642\u6709 5% \u7684\u6a5f\u7387\u6703\u56e0\u70ba\u5176\u4ed6\u7a0b\u5e8f\u7684\u95dc\u4fc2\u5c0e\u81f4\u7a0b\u5e8f\u91cd\u8dd1\u3002
\u6240\u4ee5\u5728 MapReduce \u4e2d\uff0c\u6bcf\u500b\u7a0b\u5e8f\u7d50\u675f\u90fd\u628a\u7d50\u679c\u4e1f\u9032 HDFS \u807d\u8d77\u4f86\u5c31\u5408\u7406\u591a\u4e86\uff0c \u56e0\u70ba\u6bcf\u4e00\u500b\u5de5\u4f5c\u6d41\u53ef\u80fd\u8dd1\u4e00\u6b21\u90fd\u597d\u5e7e\u5c0f\u6642\uff0c\u82e5\u4e2d\u65b7\u6642\u4e0d\u80fd\u6b63\u78ba\u91cd\u8907\u4e0a\u4e00\u500b\u7a0b\u5e8f\u5c31\u6703\u5f88\u6d6a\u8cbb\u8cc7\u6e90\u3002
"},{"location":"feedback/designing-data-intensive-applications/derived-batch/#\u5c0f\u7bc0","title":"\u5c0f\u7bc0","text":"\u9762\u5411 \u6279\u6b21\u8655\u7406 MPP \u8cc7\u6599 \u751f/\u539f\u59cb \u7d50\u69cb\u5316 \u7522\u51fa \u884d\u751f\u8cc7\u6599 \u5831\u8868 \u5fa9\u539f \u8f15\u6613 \u8f03\u96e3 \u5f48\u6027 \u9ad8 \u4f4e \u76f4\u89c0 \u4f4e \u9ad8 \u5bb9\u932f \u5bb9\u6613 \u539f\u5b50\u6027MPP \u548c MapReduce \u7684\u5dee\u7570
\u6211\u5011\u6574\u7406\u4e00\u4e0b\u5169\u8005\u5dee\u7570\uff1a
\u4e0a\u9762\u7684\u6bd4\u8f03\u5176\u5be6\u76f8\u5c0d\u65e9\u671f\uff0c\u5f85\u6703\u5728\u4ecb\u7d39\u8cc7\u6599\u6d41\u5f15\u64ce\uff08dataflow engine\uff09\u6642\uff0c \u6211\u5011\u6703\u518d\u505a\u4e00\u6b21\u6bd4\u8f03\uff0c\u9019\u6642\u5019\u6703\u767c\u73fe\u96a8\u8457\u6f14\u9032\uff0c \u6279\u6b21\u7a0b\u5f0f\u548c MPP \u5176\u5be6\u6b63\u4e92\u76f8\u5b78\u7fd2\u8457\u5f7c\u6b64\u7684\u512a\u9ede\uff08\u5c31\u597d\u50cf CISC/RISC \u7684\u95dc\u4fc2\uff09\u3002
"},{"location":"feedback/designing-data-intensive-applications/derived-batch/#vs-unix","title":"v.s. Unix","text":"\u518d\u4f86\u6bd4\u8f03\u4e00\u4e0b MapReduce \u548c\u4e00\u958b\u59cb\u8a0e\u8ad6\u7684 Unix \u5427\uff01
\u76f8\u6027\u6027\uff1a
\u4e0d\u78ba\u5b9a\u6027
\u6709\u6642\u8a08\u7b97\u4e0d\u662f\u78ba\u5b9a\u6027\u7684\uff08deterministic\uff09\uff0c \u4e5f\u5c31\u662f\u76f8\u540c\u7684\u8f38\u5165\u6703\u7522\u751f\u4e0d\u540c\u7684\u8f38\u51fa\uff08\u53ef\u80fd\u4f9d\u8cf4\u65bc\u5916\u90e8\u8cc7\u6e90\u6216\u96a8\u6a5f\u72c0\u614b\uff09\uff0c \u9019\u6642\u5c31\u5f88\u96e3\u4fdd\u8b49\u5bb9\u932f\u6027\uff08\u7121\u6cd5\u8f15\u6613\u91cd\u8a66\uff09\u4e86\u3002
\u5dee\u7570\u6027\uff1a
{print $4}
\uff0c\u800c\u662f {print $latency}
\u70ba\u4e86\u89e3\u6c7a\u4e0a\u8ff0 MapReduce \u7684\u7f3a\u9ede\uff0c\u65b0\u578b\u614b\u7684\u6846\u67b6\u5c31\u51fa\u73fe\u4e86\uff1aSpark, Tez, Flink\u3002
\u7570\u65bc MapReduce \u8b93\u6bcf\u4e00\u500b\u5b50\u7a0b\u5e8f\u5f7c\u6b64\u7368\u7acb\uff0c\u6700\u5f8c\u518d\u6574\u5408\u4e00\u8d77\uff0c \u4ed6\u5011\u6703\u628a\u5168\u90e8\u7684\u7a0b\u5e8f\u7576\u6210\u55ae\u4e00\u500b\u5de5\u4f5c\uff08job\uff09\uff0c\u9019\u7a2e\u6a21\u5f0f\u7a31\u5176\u70ba\u8cc7\u6599\u6d41\u5f15\u64ce\uff08dataflow engine\uff09\u3002 \u55ae\u4e00\u5de5\u4f5c\u4e2d\u6703\u6709\u591a\u500b\u904b\u7b97\u5b50\uff08operator\uff09\u5c31\u50cf MapReduce \u7684\u55ae\u4e00\u7a0b\u5e8f\u4e00\u6a23\uff0c \u53ea\u662f\u4e0d\u540c\u7684\u904b\u7b97\u5b50\u4e4b\u9593\u7684\u6e9d\u901a\u6709\u5e7e\u7a2e\u6a21\u5f0f\uff1a
\u56de\u61b6\u4e00\u4e0b\u6279\u6b21\u8655\u7406\u7684\u610f\u7fa9
\u8a18\u5f97\u524d\u9762\u63d0\u7684\uff1a\u6279\u6b21\u8655\u7406\u5c31\u662f\u628a\u8cc7\u6599\u5206\u6210\u4e00\u584a\u4e00\u584a\u4e1f\u7d66\u4e0d\u540c\u7bc0\u9ede\u8655\u7406\u3002 \u4e5f\u5c31\u662f\u6bcf\u500b\u904b\u7b97\u5b50\uff08\u7a0b\u5f0f\u78bc\uff09\u6703\u6ce8\u5165\u9032\u5404\u500b\u7bc0\u9ede\uff0c\u4e26\u5206\u914d\u76f8\u5c0d\u61c9\u7684\u8cc7\u6599\u5206\u5340\u8b93\u4ed6\u904b\u7b97\u3002
"},{"location":"feedback/designing-data-intensive-applications/derived-batch/#vs-mapreduce","title":"v.s. MapReduce","text":"\u9019\u4e9b\u6846\u67b6\u548c MapReduce \u5dee\u7570\u9020\u6210\u7684\u5f71\u97ff\u6709\uff1a
\u904b\u7b97\u5b50\u9593\u7684\u8cc7\u6599\u4e0d\u6703\u4e1f\u9032 HDFS \u5c31\u4ee3\u8868\u7576\u6709\u7bc0\u9ede\u5931\u80fd\u6642\uff0c\u9700\u8981\u77e5\u9053\u8a72\u8cc7\u6599\u5206\u5340\u662f\u54ea\u4e9b\u8cc7\u6599\uff0c \u9019\u5c31\u9700\u8981\u4e00\u500b\u4e2d\u592e\u7ba1\u7406\u7cfb\u7d71\u3002 \u4f8b\u5982 Spark \u4f7f\u7528 Resilint Distributed Dataset(RDD)\u3001Flink \u5b9a\u671f\u8a2d\u7f6e\u6aa2\u67e5\u9ede\uff08checkpoint\uff09\u3002
\u900f\u904e\u77ad\u89e3\u904b\u7b97\u5b50\u4e4b\u9593\u7684\u95dc\u4fc2\uff08\u9084\u8a18\u5f97\u524d\u9762\u63d0\u7684\u4e09\u7a2e\u95dc\u4fc2\u55ce\uff1f\uff09\u5c31\u53ef\u4ee5\u6c7a\u5b9a\u4e0a\u4e00\u52d5\u7684\u7a0b\u5e8f\u8f38\u51fa\u5f9e\u54ea\u908a\u62ff\u3002
"},{"location":"feedback/designing-data-intensive-applications/derived-batch/#\u5176\u4ed6\u5ef6\u4f38","title":"\u5176\u4ed6\u5ef6\u4f38","text":"\u56e0\u70ba\u6279\u6b21\u904b\u7b97\u5728\u5206\u6563\u5f0f\u7cfb\u7d71\u7684\u767c\u5c55\u8da8\u65bc\u6210\u719f\uff0c\u958b\u767c\u8005\u958b\u59cb\u95dc\u6ce8\u5f88\u591a\u5176\u4ed6\u8b70\u984c\uff1a
less
\u4e00\u6a23\uff0c\u53ef\u4ee5\u770b\u5230\u90e8\u5206\u7684\u904b\u7b97\u7d50\u679c\u800c\u4e0d\u662f\u5168\u90e8\u8dd1\u5b8cMPP \u548c\u8cc7\u6599\u6d41\u5f15\u64ce\u7684\u5dee\u7570
\u8cc7\u6599\u6d41\u5f15\u64ce\u548c MPP \u6b63\u4e92\u76f8\u5b78\u7fd2\uff1a
\u6279\u6b21\u8655\u7406\u4e0d\u662f\u6392\u7a0b\u6253 API\uff0c\u800c\u662f\u628a\u8cc7\u6599\u5206\u6210\u4e00\u5c0f\u584a\u4e00\u5c0f\u584a\uff0c\u8b93\u591a\u500b\u7121\u5171\u4eab\u7684\u7bc0\u9ede\u5e73\u884c\u904b\u7b97\u3002
\u672c\u6b21\u5206\u4eab\u7684\u9806\u5e8f\u5927\u81f4\u5982\u4e0b\uff1a
\u5f9e\u9019\u4e4b\u4e2d\u4e5f\u80fd\u770b\u51fa\u6574\u500b\u6279\u6b21\u8655\u7406\u7684\u767c\u5c55\u908f\u8f2f\u548c\u80cc\u5f8c\u63a8\u52d5\u4ed6\u53d7\u5230\u5927\u5bb6\u95dc\u6ce8\u7684\u539f\u56e0\u3002 \u4e0d\u904e\u4e0a\u9762\u63d0\u5230\u7684\u300c\u8cc7\u6599\u300d\u90fd\u5047\u8a2d\u4ed6\u662f\u6709\u9650\u7684\uff0c\u4f8b\u5982\u4f7f\u7528\u8005\u53ef\u80fd\u5c31\u4e94\u767e\u842c\u7b46\u3001\u4f7f\u7528\u8005\u6d3b\u52d5\u7684\u8cc7\u6599\u5c31 50TB \u7b49\u7b49\uff0c \u7136\u800c\u73fe\u5be6\u751f\u6d3b\u7684\u8cc7\u6599\u662f\u6301\u7e8c\u4e0d\u65b7\u7684\uff0c\u4f8b\u5982\u4f7f\u7528\u8005\u6d3b\u52d5\u7684\u8cc7\u6599\u6bcf\u5206\u6bcf\u79d2\u90fd\u5728\u589e\u52a0\uff0c \u9019\u6a23\u6211\u5011\u5728\u7b97\u6392\u5e8f\u7684\u7d50\u679c\u5c31\u6703\u6709\u5dee\u7570\uff0c\u8a72\u600e\u9ebc\u8655\u7406\uff1f
\u9019\u5c31\u6703\u9700\u8981\u7528\u5230\u4e0b\u4e00\u7ae0\u7684\u4e32\u6d41\u8655\u7406\u3002
"},{"location":"feedback/designing-data-intensive-applications/derived-stream/","title":"\u884d\u751f\u8cc7\u6599\u2014\u4e32\u6d41\u8655\u7406","text":"\u8cc7\u6599\u96a8\u6642\u90fd\u5728\u7522\u751f\uff0c\u900f\u904e\u4e32\u6d41\u8655\u7406\u7b97\u51fa\u6700\u5373\u6642\u7684\u7d50\u679c\u3002
HackMD \u5831\u544a\u6587\u672c
"},{"location":"feedback/designing-data-intensive-applications/derived-stream/#\u4e32\u6d41","title":"\u4e32\u6d41","text":"\u4e32\u6d41\uff08stream\uff09\u4ee3\u8868\u8005\u8cc7\u6599\u662f\u9023\u7e8c\u6027\u7684\u800c\u975e\u4e00\u6b21\u6027\u7684\u50b3\u905e\u3002
Stream v.s. Read/Write
\u4e00\u958b\u59cb\u63a5\u89f8\u7db2\u8def\u61c9\u7528\u7a0b\u5f0f\u6642\uff0c \u6211\u5c0d\u65bc\u4e00\u4e9b\u6a94\u6848\uff08\u6216\u7db2\u8def\uff09\u7684\u8f38\u5165\u8f38\u51fa\u51fd\u5f0f \uff08\u4f8b\u5982 PHP \u548c JS\uff09\u7528 stream \u5f88\u4e0d\u89e3\uff0c \u70ba\u4ec0\u9ebc\u4e0d\u7528 read/write \u5c31\u597d\uff0c\u5e79\u561b\u641e\u500b\u65b0\u540d\u8a5e\u3002
\u5176\u5be6\u7528 stream \u66f4\u80fd\u8868\u73fe\u51fa\uff1a\u8cc7\u6599\u662f\u4e00\u9ede\u4e00\u9ede\u50b3\u904e\u53bb\uff0c\u800c\u975e\u4e00\u6b21\u6027\u9001\u51fa\u3002 \u4f7f\u7528 stream \u9019\u500b\u540d\u8a5e\u80fd\u5e6b\u52a9\u6211\u5011\u66f4\u4e86\u89e3\u5176\u5167\u90e8\u5be6\u4f5c\u7684\u5167\u5bb9\u3002\u904e\u53bb\u7684\u7591\u554f\u7e3d\u5728\u4e0d\u7d93\u610f\u9593\u5f97\u5230\u89e3\u7b54\u3002
"},{"location":"feedback/designing-data-intensive-applications/derived-stream/#\u72c0\u614b\u7684\u6210\u5f62","title":"\u72c0\u614b\u7684\u6210\u5f62","text":"\u60f3\u50cf\u4e00\u4e0b\u9280\u884c\u662f\u600e\u9ebc\u5b58\u8cc7\u6599\u7684\uff1f
\u7576\u4f60\u5e33\u6236\u6709\u554f\u984c\u6253\u53bb\u7d66\u9280\u884c\u6642\uff0c\u4ed6\u5011\u4e0d\u6703\u544a\u8a34\u4f60\u6839\u64da\u6211\u5011\u5728\u8cc7\u6599\u5eab\u7684\u8868\u683c\u4e2d\uff0c\u4f60\u73fe\u5728\u7684\u5e33\u6236\u5c31\u662f 300 \u584a\uff0c \u6240\u4ee5\u6c92\u932f\u4f60\u7684\u5e33\u6236\u76ee\u524d\u5c31\u662f 300 \u584a\uff0c\u76f8\u53cd\u7684\u4ed6\u5011\u6703\u544a\u8a34\u4f60\u4f60\u5728\u67d0\u4e00\u5929\u8cb7\u4e86\u4ec0\u9ebc\u6771\u897f\u82b1\u4e86\u591a\u5c11\u9322\uff0c \u5e33\u6236\u5f9e\u591a\u5c11\u9322\u8b8a\u5230\u591a\u5c11\u9322\u3002\u9019\u7a2e\u65b9\u5f0f\u4e26\u975e\u5f9e\u96fb\u8166\u6642\u4ee3\u624d\u958b\u59cb\uff0c\u800c\u662f\u5728\u5f88\u4e45\u4ee5\u524d\u91d1\u878d\u696d\u5c31\u662f\u9019\u9ebc\u505a\u7684\uff0c \u4ee5\u524d\u5ba2\u670d\u54e1\u624b\u4e0a\u53ef\u80fd\u6703\u62ff\u8457\u4e00\u672c\u5e33\u55ae\uff0c\u4e0a\u9762\u4e0d\u6703\u53ea\u6709\u4e00\u500b\u6578\u5b57\uff0c\u800c\u662f\u4e00\u9023\u4e32\u4e0d\u540c\u6642\u9593\u7684\u7570\u52d5\uff08\u5373\u4f7f\u8a72\u7570\u52d5\u672c\u8eab\u662f\u932f\u7684\uff09\u3002 \u4ed6\u5011\u6703\u5f9e\u4e2d\u544a\u8a34\u4f60\u4e0a\u4e00\u6b21\u4ea4\u6613\u5728\u4ec0\u9ebc\u6642\u5019\uff0c\u5e33\u6236\u5f9e\u591a\u5c11\u9322\u8b8a\u5230\u591a\u5c11\u9322\uff0c\u7136\u5f8c\u518d\u4f9d\u5e8f\u5f80\u4e0a\u8ffd\u554f\u984c\u51fa\u5728\u54ea\u88e1\u3002
\u9019\u7a2e\u5132\u5b58\u7684\u65b9\u5f0f\u4e0d\u662f\u5132\u5b58\u8cc7\u6599\u6700\u7d42\u7684\u72c0\u614b\uff0c\u800c\u662f\u5132\u5b58\u53ef\u4ee5\u8b8a\u6210\u73fe\u5728\u72c0\u614b\u7684\u6240\u6709\u300c\u6b77\u53f2\u7d00\u9304\u300d\u3002 \u9019\u7a2e\u7d00\u9304\u4e00\u822c\u7a31\u70ba\u4e8b\u4ef6\u3002\u800c\u4e00\u9023\u4e32\u7684\u4e8b\u4ef6\u5c31\u662f\u672c\u6b21\u8981\u8a0e\u8ad6\u7684\u4e32\u6d41\u3002
"},{"location":"feedback/designing-data-intensive-applications/derived-stream/#\u4e8b\u4ef6\u662f\u4e0d\u8b8a\u7684","title":"\u4e8b\u4ef6\u662f\u4e0d\u8b8a\u7684","text":"\u6240\u6709\u7684\u72c0\u614b\u90fd\u662f\u4e8b\u4ef6\u7684\u7d2f\u7a4d\uff0c\u6211\u5011\u5e38\u4f7f\u7528\u7684\u8cc7\u6599\u5eab\u5c31\u662f\u5132\u5b58\u9019\u4e9b\u7d2f\u7a4d\u4e8b\u4ef6\u5f8c\u7684\u300c\u72c0\u614b\u300d\uff08\u70ba\u4e86\u63d0\u9ad8\u8b80\u53d6\u7684\u6548\u7387\uff09\u3002
\u4e0d\u8ad6\u4f7f\u7528\u8005\u662f\u5426\u771f\u7684\u505a\u4e86\u54ea\u4e9b\u6539\u8b8a\uff08\u5ea7\u4f4d\u53ef\u80fd\u56e0\u70ba\u6eff\u4e86\u8a02\u7968\u5931\u6557\u6216\u8005\u8cfc\u7269\u8eca\u7684\u5546\u54c1\u589e\u52a0\u5f8c\u53c8\u88ab\u79fb\u9664\uff09\uff0c \u9019\u4e9b\u4e8b\u4ef6\u4e00\u65e6\u7522\u751f\u90fd\u7121\u6cd5\u88ab\u7570\u52d5\uff08\u5118\u7ba1\u53ef\u80fd\u56e0\u70ba\u96b1\u79c1\u7b49\u539f\u56e0\u88ab\u8feb\u79fb\u9664\uff0c\u4f46\u54f2\u5b78\u4e0a\u4fdd\u6301\u4e0d\u8b8a\uff09\uff0c \u76f8\u5c0d\u800c\u8a00\u300c\u72c0\u614b\u300d\u537b\u662f\u5e38\u5e38\u88ab\u6539\u8b8a\u7684\uff0c\u4f46\u9019\u5169\u8005\u662f\u76f8\u8f14\u76f8\u6210\u7684\uff1a\u6211\u5011\u900f\u904e\u4e8b\u4ef6\u7522\u751f\u72c0\u614b\uff0c\u518d\u5f9e\u72c0\u614b\u7522\u751f\u4e8b\u4ef6\u3002
\u5f88\u591a\u8cc7\u6599\u5eab\u61c9\u7528\uff08\u4f8b\u5982 MVCC\uff09\u6216\u8005\u61c9\u7528\u7a0b\u5f0f\uff08\u4f8b\u5982 Git\uff09\u80cc\u5f8c\u90fd\u6709\u9019\u500b\u6982\u5ff5\u3002
"},{"location":"feedback/designing-data-intensive-applications/derived-stream/#\u8cc7\u6599\u5eab\u7684\u61c9\u7528","title":"\u8cc7\u6599\u5eab\u7684\u61c9\u7528","text":"\u6211\u5011\u4f86\u7c21\u55ae\u63d0\u4e00\u4e0b\u5728\u8cc7\u6599\u5eab\u4e2d\u4f7f\u7528\u4e32\u6d41\u8655\u7406\u7684\u6a5f\u5236\u3002
\u8cc7\u6599\u5eab\u7684\u5beb\u5165\u5c31\u662f\u4e8b\u4ef6\uff0c\u60f3\u60f3\u55ae\u4e00\u9818\u8896\u7684\u8907\u88fd\uff0c\u7576\u9818\u8896\u6536\u5230\u5beb\u5165\u8acb\u6c42\u6642\u6703\u628a\u8acb\u6c42\u4e1f\u9032\u8907\u88fd\u65e5\u8a8c\u4e2d\uff0c \u7136\u5f8c\u5404\u500b\u8ffd\u96a8\u8005\u6703\u8ffd\u8e64\u9019\u4e9b\u8907\u88fd\u65e5\u8a8c\u4e26\u6839\u64da\u5176\u4e2d\u7684\u5167\u5bb9\u7570\u52d5\u8cc7\u6599\u5eab\u7684\u8cc7\u6599\uff0c\u9019\u4e9b\u8acb\u6c42\u5c31\u662f\u6240\u8b02\u7684\u300c\u4e8b\u4ef6\u300d\u3002
\u6211\u5011\u4e5f\u6709\u5728\u5168\u57df\u9806\u5e8f\u5ee3\u64ad\u63d0\u5230\u6709\u4e00\u7fa4\u5354\u8abf\u8005\u6703\u628a\u5168\u57df\u9806\u5e8f\u544a\u77e5\u7d66\u5404\u500b\u7bc0\u9ede\uff0c\u9054\u6210\u6b63\u78ba\u7684\u56e0\u679c\u95dc\u4fc2\uff0c \u9019\u5176\u4e2d\u7684\u300c\u9806\u5e8f\u300d\u5c31\u662f\u4e00\u7a2e\u4e8b\u4ef6\uff0c\u4e26\u50b3\u905e\u7d66\u5404\u500b\u7bc0\u9ede\u3002
"},{"location":"feedback/designing-data-intensive-applications/derived-stream/#\u548c\u6279\u6b21\u7684\u5dee\u7570","title":"\u548c\u6279\u6b21\u7684\u5dee\u7570","text":"\u5f9e\u4e0a\u9762\u7684\u4f8b\u5b50\u4e2d\u53ef\u4ee5\u770b\u5230\uff0c\u6211\u5011\u6709\u4e86\u4e8b\u4ef6\u5c31\u6703\u6709\u7372\u5f97\u8a72\u4e8b\u4ef6\u7684\u89d2\u8272\u548c\u7522\u751f\u8a72\u4e8b\u4ef6\u7684\u89d2\u8272\uff0c \u9019\u4e9b\u89d2\u8272\u5206\u5225\u7a31\u70ba \u8ffd\u8e64\u8005\uff08consumer, subscriber, recipient\uff09\u548c \u767c\u5e03\u8005\uff08publisher, sender, producer\uff09\u3002
\u5c31\u597d\u50cf\u5728\u6279\u6b21\u8655\u7406\u4e2d\u6709\u4e00\u500b\u5de5\u4f5c\u6d41\u6216\u7a0b\u5e8f\u6703\u628a\u7d50\u679c\u8f38\u51fa\u6210\u4e00\u4efd\u6a94\u6848\uff0c \u63a5\u4e0b\u4f86\u5c31\u53ef\u4ee5\u8b93\u5176\u4ed6\u6279\u6b21\u7a0b\u5e8f\u628a\u9019\u4efd\u6a94\u6848\u7576\u6210\u8f38\u5165\uff08\u6216\u806f\u5408\u8868\uff09\u9032\u884c\u4e0b\u4e00\u500b\u5de5\u4f5c\u6d41\u6216\u7a0b\u5e8f\u3002 \u5c0d\u61c9\u65bc\u4e32\u6d41\u8655\u7406\u7684\u767c\u5e03\u8005\u548c\u8ffd\u8e64\u8005\u662f\u4e00\u6a23\u7684\uff0c\u800c\u9019\u4efd\u300c\u6a94\u6848\u300d\u5728\u4e32\u6d41\u8655\u7406\u4e2d\u4ee3\u8868\u8457\u4e00\u9023\u4e32\u7684\u4e8b\u4ef6\uff0c \u4e5f\u5c31\u662f \u4e32\u6d41 \u6216 \u4e3b\u984c\uff08stream, topic\uff09\u3002
trigger \u4e5f\u662f\u4e32\u6d41\u8655\u7406
\u95dc\u806f\u5f0f\u8cc7\u6599\u5eab\u6709 trigger
\u9019\u7a2e\u985e\u4f3c\u529f\u80fd\uff0c\u4f46\u662f\u9019\u6703\u8b93\u55ae\u53f0\u8cc7\u6599\u5eab\u8b8a\u5f88\u8907\u96dc\uff0c \u5f71\u97ff\u5176\u4ed6\u61c9\u8a72\u505a\u7684\u4e8b\u60c5\u7684\u6548\u7387\uff0c \u4e14 trigger
\u80fd\u505a\u7684\u4e8b\u4e5f\u5f88\u6709\u9650\u3002
\u6211\u5011\u901a\u5e38\u53ef\u4ee5\u8b93\u8ffd\u8e64\u8005\u5b9a\u671f\u53bb\u548c\u767c\u5e03\u8005\u8981\u8cc7\u6599\uff0c\u9019\u6a23\u4e5f\u80fd\u9054\u6210\u6240\u8b02\u7684\u5373\u6642\u8cc7\u6599\u66f4\u65b0\uff0c \u4f46\u662f\u9019\u6703\u8b93\u554f\u984c\u63d0\u5347\u5230\u6211\u8a72\u591a\u4e45\u548c\u767c\u5e03\u8005\u8981\u8cc7\u6599\uff1f \u800c\u9019\u554f\u984c\u5e38\u5e38\u6c92\u6709\u4e00\u500b\u597d\u7b54\u6848\uff0c\u540c\u6642\u7576\u8ffd\u8e64\u8005\u8b8a\u591a\u7684\u6642\u5019\uff0c\u767c\u5e03\u8005\u6703\u8b8a\u5f97\u5f88\u5fd9\uff0c\u9019\u901a\u5e38\u4e0d\u662f\u500b\u597d\u65b9\u6cd5\u3002
"},{"location":"feedback/designing-data-intensive-applications/derived-stream/#\u5bb9\u932f","title":"\u5bb9\u932f","text":"\u7576\u8ffd\u8e64\u8005\u4e0d\u80fd\u6b63\u5e38\u904b\u4f5c\u6642\u6709\u53ef\u80fd\u662f\u56e0\u70ba\uff1a
\u5fc5\u8981\u6027
\u6709\u4e9b\u61c9\u7528\u5141\u8a31\u8cc7\u6599\u6709\u4e00\u9ede\u932f\uff08\u4f8b\u5982 metric \u6f0f\u6389\u4e00\u5169\u5206\u9418\u7684\u8cc7\u8a0a\u662f\u53ef\u88ab\u63a5\u53d7\u7684\uff09\uff0c\u5c31\u4e0d\u9700\u8981\u56b4\u8b39\u7684\u5bb9\u932f\u3002
"},{"location":"feedback/designing-data-intensive-applications/derived-stream/#\u5982\u4f55\u50b3\u9001\u4e8b\u4ef6","title":"\u5982\u4f55\u50b3\u9001\u4e8b\u4ef6","text":"\u8ffd\u8e64\u8005\u548c\u767c\u5e03\u8005\u7684\u95dc\u4fc2\u6703\u5f71\u97ff\u4e8b\u4ef6\u662f\u600e\u9ebc\u50b3\u905e\u7684\uff0c\u53ef\u80fd\u7684\u95dc\u4fc2\u6709\uff1a
\u767c\u5e03\u8005\u76f4\u63a5\u628a\u4e8b\u4ef6\u9001\u7d66\u8ffd\u8e64\u8005\uff0c\u6709\u5e7e\u500b\u7279\u9ede
\u76f8\u95dc\u8edf\u9ad4\u6709\uff1a
\u767c\u5e03\u8005\u628a\u4e8b\u4ef6\u9001\u5230\u4e2d\u4ecb\u8005\uff08broker, queue\uff09
\u9019\u6642\u6211\u5011\u6703\u628a\u9ad8\u53ef\u7528\u6027\u5f9e \u767c\u5e03\u8005 \u79fb\u8f49\u5230 \u4e2d\u4ecb\u8005 \u672c\u8eab\uff0c \u8ffd\u8e64\u8005\u4e0d\u518d\u95dc\u5fc3\u767c\u5e03\u8005\u7684\u5b58\u6d3b\u72c0\u614b\u3002\u9019\u4e5f\u53ef\u4ee5\u964d\u4f4e\u767c\u5e03\u8005\u7684\u8907\u96dc\u6027\uff0c \u56e0\u70ba\u767c\u5e03\u8005\u901a\u5e38\u90fd\u662f\u4e00\u4e9b\u5546\u52d9\u908f\u8f2f\u7684\u61c9\u7528\u7a0b\u5f0f\u3002
\u7576\u8ffd\u8e64\u8005\u5931\u80fd\u6642\u53ef\u4ee5\u900f\u904e\u548c\u8ffd\u8e64\u8005\u5b9a\u671f\u7684\u61c9\u7b54\uff08acknowledgment\uff09\u5f97\u77e5\u3002 \u7576\u6536\u5230\u61c9\u7b54\u78ba\u4fdd\u8ffd\u8e64\u8005\u5df2\u7d93\u8655\u7406\u5b8c\u4e8b\u4ef6\u5f8c\u5c31\u522a\u9664\u8a72\u4e8b\u4ef6\uff0c\u53cd\u4e4b\u5247\u53cd\u8986\u50b3\u905e\u76f4\u5230\u5b8c\u6210\u3002
\u76f8\u95dc\u8edf\u9ad4\u6709\u5f88\u591a
\u5206\u5de5\u5408\u4f5c
\u5c31\u50cf\u6211\u5011\u4e0d\u6703\u5728\u61c9\u7528\u7a0b\u5f0f\u4e2d\u5beb\u8cc7\u6599\u5132\u5b58\u7684\u908f\u8f2f\uff0c\u800c\u662f\u628a\u9019\u90e8\u5206\u9700\u8981\u8003\u616e\u7684\u5404\u7a2e\u554f\u984c\u4e1f\u7d66\u8cc7\u6599\u5eab\uff0c \u6211\u5011\u4e00\u6a23\u6703\u628a\u767c\u5e03\u8005\u9700\u8981\u6ce8\u610f\u5230\u7684\u5404\u7a2e\u4e8b\u60c5\u4e1f\u7d66\u4e2d\u4ecb\u8005\u8655\u7406\u3002
"},{"location":"feedback/designing-data-intensive-applications/derived-stream/#\u548c\u8cc7\u6599\u5eab\u6709\u4ec0\u9ebc\u5dee","title":"\u548c\u8cc7\u6599\u5eab\u6709\u4ec0\u9ebc\u5dee\uff1f","text":"DELETE TABLE ...
\uff09\u6642\u624d\u522a\u9664\u767c\u5e03\u8005\u548c\u8ffd\u8e64\u8005\u5728\u8655\u7406\u4e8b\u4ef6\u7684\u6642\u6a5f\u662f \u7570\u6b65 \u7684\uff0c\u4e5f\u5c31\u662f\u767c\u5e03\u8005\u4e0d\u6703\u7b49\u5230\u8ffd\u8e64\u8005\u8655\u7406\u5b8c\u4e8b\u60c5\u5f8c\u624d\u7d50\u675f\u7a0b\u5e8f\uff0c \u76f8\u8f03\u65bc\u548c\u8cc7\u6599\u5eab\u7684\u6e9d\u901a\u901a\u5e38\u662f \u540c\u6b65 \u7684\u3002
\u6709\u53ef\u80fd\u7bc0\u9ede\u5df2\u7d93\u5b8c\u6210\u4e8b\u4ef6\u4f46\u662f\u56de\u50b3\u8a0a\u606f\u6642\u7db2\u8def\u51fa\u73fe\u554f\u984c\uff0c\u6b64\u6642\u53ef\u4ee5\u900f\u904e 2PC \u9019\u985e\u6a5f\u5236\u9632\u7bc4\u3002
"},{"location":"feedback/designing-data-intensive-applications/derived-stream/#\u591a\u500b\u8ffd\u8e64\u8005","title":"\u591a\u500b\u8ffd\u8e64\u8005","text":"\u4e8b\u4ef6\u7684\u50b3\u905e\u5206\u6210\u5169\u7a2e\uff0c\u8981\u9ebb\u70ba\u4e86\u964d\u4f4e\u6f5b\u6642\u800c\u900f\u904e \u8ca0\u8f09\u5e73\u8861 \u7684\u6a5f\u5236\u50b3\u905e\u7d66\u591a\u500b\u8ffd\u8e64\u8005\uff0c \u8981\u9ebb\u70ba\u4e86\u8b93\u8ffd\u8e64\u8005\u53ef\u4ee5\u9ad8\u53ef\u7528\u800c\u4f7f\u7528\u6247\u51fa\uff08fan-out\uff09\u6a5f\u5236\u3002 \u9019\u5169\u8005\u7684\u95dc\u4fc2\u6709\u9ede\u50cf\u662f\u5206\u5340\u548c\u8907\u88fd\u7684\u6982\u5ff5\u3002
\u4f46\u662f\u8981\u6ce8\u610f\u5982\u679c\u4f7f\u7528\u8ca0\u8f09\u5e73\u8861\u6642\uff0c\u5c31\u53ef\u80fd\u9020\u6210\u8655\u7406\u4e8b\u4ef6\u6642\u7684\u5931\u5e8f\uff0c\u6240\u4ee5\u5efa\u8b70\u4f7f\u7528\u8ca0\u8f09\u5e73\u8861\u6642\u7528\u4f86\u8655\u7406\u9806\u5e8f\u4e0d\u91cd\u8981\u7684\u4e3b\u984c\u3002
"},{"location":"feedback/designing-data-intensive-applications/derived-stream/#\u6c92\u8fa6\u6cd5\u5fa9\u7528","title":"\u6c92\u8fa6\u6cd5\u5fa9\u7528","text":"\u6279\u6b21\u8655\u7406\u6709\u5fa9\u7528\u6027\uff1a\u6211\u53ef\u4ee5\u57f7\u884c\u4efb\u610f\u6b21\u8a08\u7b97\u90fd\u4e0d\u7528\u64d4\u5fc3\u8cc7\u6599\u7684\u640d\u58de\uff08\u56e0\u70ba\u4e0d\u7570\u52d5\u8f38\u5165\uff09\u3002 \u7576\u6211\u6d88\u5316\u5b8c\u4e00\u500b\u4e8b\u4ef6\u5f8c\uff0c\u4e2d\u4ecb\u8005\u5c31\u6703\u628a\u8cc7\u6599\u522a\u9664\uff0c\u9019\u6642\u60f3\u518d\u91cd\u65b0\u7b97\u4e00\u6b21\u5c31\u6c92\u8fa6\u6cd5\u4e86\u3002 \u9019\u4e5f\u9020\u6210\u7576\u6709\u65b0\u7684\u8ffd\u8e64\u8005\u9032\u4f86\u6642\u4e0d\u80fd\u770b\u5230\u4ee5\u524d\u7684\u6771\u897f\u3002
"},{"location":"feedback/designing-data-intensive-applications/derived-stream/#\u65e5\u8a8c\u578b\u4e2d\u4ecb\u8005","title":"\u65e5\u8a8c\u578b\u4e2d\u4ecb\u8005","text":"\u56e0\u70ba\u7121\u6cd5\u5fa9\u7528\uff0c\u65b0\u578b\u614b\u7684\u4e2d\u4ecb\u8005\u5c31\u8a95\u751f\u4e86\uff1a\u65e5\u8a8c\u578b\u4e2d\u4ecb\u8005\uff0c\u53ef\u80fd\u7684\u8edf\u9ad4\u6709\uff1a
\u9084\u8a18\u5f97 GNU Coreutils \u55ce\uff1f\u5176\u4e2d\u6709\u500b tail
\u7684\u51fd\u5f0f\uff0c \u4ed6\u5141\u8a31\u4f60\u67e5\u770b\u8cc7\u6599\u7684\u5c3e\u90e8\uff0c\u7576\u52a0\u4e0a -f
\u6642\uff0c\u5c31\u53ef\u4ee5\u6301\u7e8c\u8ffd\u8e64\uff0c \u9019\u6982\u5ff5\u548c\u65e5\u8a8c\u578b\u4e2d\u4ecb\u8005\u5f88\u50cf\uff1a\u4f60\u53ef\u4ee5\u6301\u7e8c\u8ffd\u8e64\u8a72\u4e3b\u984c\uff0c\u4f46\u662f\u8cc7\u6599\u4e0d\u6703\u88ab\u522a\u9664\u3002 \u6240\u4ee5\u6240\u6709\u65b0\u4f86\u7684\u8ffd\u8e64\u8005\u90fd\u53ef\u4ee5\u5f9e\u65b0\u958b\u59cb\u8655\u7406\u4e8b\u4ef6\u3002
\u4e8b\u5be6\u4e0a\u65e5\u8a8c\u578b\u4e2d\u4ecb\u8005\u5c31\u662f\u9019\u6a23\u8655\u7406\u7684\uff0c\u6bcf\u6b21\u4e8b\u4ef6\u9032\u4f86\u5c31\u5148\u4e1f\u9032\u65e5\u8a8c\u4e2d\u7136\u5f8c\u518d\u50b3\u7d66\u8ffd\u8e64\u8005\u3002 \u7576\u8ffd\u8e64\u8005\u8981\u4f7f\u7528\u4e8b\u4ef6\u6642\uff0c\u4ed6\u53ef\u4ee5\u4efb\u610f\u8655\u7406\u800c\u4e0d\u9700\u64d4\u5fc3\u4e8b\u4ef6\u4e4b\u5f8c\u6703\u88ab\u92b7\u6bc0\uff0c\u9019\u6a23\u7684\u5bb9\u932f\u6a5f\u5236\u5c31\u597d\u50cf\u6279\u6b21\u8655\u7406\u4e00\u6a23\u3002
\u56e0\u70ba\u8ffd\u8e64\u8005\u548c\u4e8b\u4ef6\u7684\u95dc\u4fc2\u89e3\u8026\u4e86\uff0c\u6240\u4ee5\u9700\u8981\u6ce8\u610f\u7684\u6771\u897f\u6e1b\u5c11\u4e86\u3002 \u50b3\u7d71\u7684\u4e2d\u4ecb\u8005\u6703\u7b49\u5230\u6240\u6709\u8ffd\u8e64\u8005\u90fd\u6536\u5230\u4e8b\u4ef6\u624d\u522a\u9664\u8a72\u4e8b\u4ef6\uff0c \u5982\u679c\u8ffd\u8e64\u8005\u5931\u80fd\uff08\u6216\u4e0b\u7dda\uff09\u4e86\u5c31\u9700\u8981\u8b39\u614e\u7684\u8a2d\u5b9a\u907f\u514d\u4e2d\u4ecb\u8005\u70ba\u4e86\u5bb9\u932f\u8caf\u5b58\u904e\u591a\u4e8b\u4ef6\u9032\u8a18\u61b6\u9ad4\uff0c \u9019\u6642\u65e5\u8a8c\u578b\u4e2d\u4ecb\u8005\u5c31\u53ef\u4ee5\u8d77\u5230\u5f88\u597d\u7684\u7dad\u904b\u512a\u52e2\u3002
"},{"location":"feedback/designing-data-intensive-applications/derived-stream/#\u4fdd\u5b58\u591a\u4e45","title":"\u4fdd\u5b58\u591a\u4e45\uff1f","text":"\u5c31\u50cf\u6392\u5e8f\u5b57\u4e32\u8868\u4e00\u6a23\uff0c\u65e5\u8a8c\u662f\u6709\u6700\u5927\u9650\u5236\u7684\uff0c \u7576\u4e00\u672c\u65e5\u8a8c\u9054\u5230\u8a72\u503c\u6642\uff0c\u5247\u91cd\u65b0\u958b\u4e00\u672c\u65e5\u8a8c\u4e26\u9644\u52a0\u4e8b\u4ef6\u4e0a\u53bb\u3002 \u4e26\u4f9d\u64da\u8a2d\u5b9a\u9650\u5236\u6700\u591a\u65e5\u8a8c\u6578\uff0c\u7576\u8d85\u904e\u6642\u5c31\u522a\u9664\u6700\u820a\u7684\u65e5\u8a8c\uff0c\u9019\u5c31\u4ee3\u8868\u5982\u679c\u4e00\u500b\u8ffd\u8e64\u8005\u843d\u5f8c\u592a\u591a\uff0c \u4ed6\u6709\u53ef\u80fd\u907a\u6f0f\u90a3\u4e9b\u904e\u4e45\u7684\u8cc7\u8a0a\u3002
\u4f46\u662f\u4e00\u822c\u5be6\u969b\u4f7f\u7528\u901a\u5e38\u90fd\u6703\u8caf\u5b58\u5927\u7d04\u6578\u5929\u81f3\u6578\u79ae\u62dc\u7684\u8cc7\u6599\uff08\u4ee5 6TB \u7684\u5bb9\u91cf\u4f86\u7b97\uff09\uff0c \u5728\u9019\u6bb5\u6642\u9593\uff0c\u8b93\u7dad\u904b\u4eba\u54e1\u91cd\u555f\u8ffd\u8e64\u8005\u662f\u8db3\u5920\u7684\u3002 \u4f60\u4e5f\u53ef\u4ee5\u900f\u904e\u4e00\u4e9b\u8b66\u5831\u7cfb\u7d71\u5e6b\u52a9\u4f60\u8ffd\u8e64\u9019\u4e9b\u843d\u5f8c\u7684\u9032\u5ea6\u3002
"},{"location":"feedback/designing-data-intensive-applications/derived-stream/#\u512a\u52e2","title":"\u512a\u52e2","text":"\u6f5b\u6642\u662f\u7a69\u5b9a\u7684\uff0c\u56e0\u70ba\u50b3\u7d71\u7684\u4e2d\u4ecb\u8005\u6703\u628a\u8cc7\u6599\u5b58\u9032\u8a18\u61b6\u9ad4\uff0c\u7576\u4e00\u76f4\u6709\u4e8b\u4ef6\u6c92\u88ab\u6d88\u5316\u5c0e\u81f4\u8a18\u61b6\u9ad4\u4e0d\u5920\u4e86\u5c31\u6703\u843d\u6a94\uff0c \u6240\u4ee5\u4e2d\u4ecb\u8005\u8655\u7406\u4e8b\u4ef6\u7684\u6f5b\u6642\u5c31\u5f88\u5927\u4e00\u90e8\u4efd\u53d7\u5230\u73fe\u6709\u4e8b\u4ef6\u7684\u91cf\u5f71\u97ff\uff1b \u76f8\u5c0d\u800c\u8a00\u65e5\u8a8c\u578b\u7684\u4e2d\u4ecb\u8005\u5c31\u53ef\u4ee5\u505a\u5230\u8f03\u7a69\u5b9a\u7684\u6f5b\u6642\uff0c\u56e0\u70ba\u90fd\u662f\u628a\u4e8b\u4ef6\u9644\u52a0\u9032\u65e5\u8a8c\u4e2d\u3002
\u4e0d\u518d\u9700\u8981\u5b9a\u671f\u63a5\u6536\u61c9\u7b54\u4f86\u78ba\u8a8d\u662f\u5426\u63a5\u6536\u5230\u4e8b\u4ef6\uff0c\u800c\u662f\u5b9a\u671f\u5132\u5b58 \u504f\u79fb\u91cf\uff0c \u7576\u8ffd\u8e64\u8005\u5931\u80fd\u4e26\u5fa9\u539f\u6642\u5c31\u53ef\u4ee5\u5f9e\u4e0a\u6b21\u5132\u5b58\u7684\u504f\u79fb\u91cf\u4f86\u91cd\u65b0\u50b3\u9001\u4e8b\u4ef6\u3002
\u56e0\u70ba\u4e0a\u8ff0\u6a5f\u5236\uff08\u4e0d\u9700\u8981\u78ba\u8a8d\u662f\u5426\u6536\u5230\uff09\u8b93\u4ed6\u53ef\u4ee5\u9032\u884c\u6279\u6b21\u7684\u50b3\u9001\u800c\u4e0d\u9700\u8981\u4e00\u500b\u4e00\u500b\u50b3\u9001\uff0c \u518d\u52a0\u4e0a\u9023\u7dda\u7684\u7ba1\u7dda\u6a5f\u5236\uff0c\u63d0\u5347\u4ed6\u7684\u901a\u91cf\u3002\u5982\u679c\u662f\u50b3\u7d71\u4e2d\u4ecb\u8005\uff0c \u56e0\u70ba\u9700\u8981\u540c\u6642\u548c\u591a\u500b\u8ffd\u8e64\u8005\u78ba\u8a8d\u662f\u5426\u57f7\u884c\u904e\u8a72\u4e8b\u4ef6\uff08\u82e5\u90fd\u6709\u57f7\u884c\u5c31\u522a\u9664\u8a72\u4e8b\u4ef6\uff09\uff0c \u6240\u4ee5\u7121\u6cd5\u50cf\u9019\u6a23\u6279\u6b21\u8655\u7406\u3002 \u9019\u4e5f\u89e3\u9664\u4e86\u591a\u500b\u8ffd\u8e64\u8005\u4e4b\u524d\u96b1\u6666\u7684\u95dc\u4fc2\uff0c\u7576\u6211\u5011\u8981\u65b0\u589e\u4e00\u500b\u8ffd\u8e64\u8005\u5230\u7dda\u4e0a\u7684\u50b3\u7d71\u4e2d\u4ecb\u8005\u4e2d\uff0c\u5c31\u9700\u8981\u5be9\u614e\u7684\u8003\u616e\u3002
"},{"location":"feedback/designing-data-intensive-applications/derived-stream/#\u751f\u614b","title":"\u751f\u614b","text":"\u5206\u5340\u4e4b\u5f8c\u5c31\u53ef\u4ee5\u907f\u514d\u4e2d\u4ecb\u8005\u7684\u55ae\u4e00\u7bc0\u9ede\u904e\u5ea6\u64cd\u52de\uff0c\u4f7f\u7528\u8907\u88fd\u8b93\u591a\u500b\u7bc0\u9ede\u64c1\u6709\u8cc7\u6599\u5247\u53ef\u4ee5\u63d0\u9ad8\u53ef\u7528\u6027\u3002 \u81f3\u65bc\u524d\u9762\u63d0\u7684 \u504f\u79fb\u91cf\uff0c\u5728\u5206\u5340\u4e4b\u5f8c\u4e00\u6a23\u53ef\u4ee5\u5728\u5404\u500b\u5206\u5340\u4e2d\u8a18\u9304\u504f\u79fb\u91cf\u3002
\u7576\u70ba\u4e86\u964d\u4f4e\u8ffd\u8e64\u8005\u7684\u8ca0\u8f09\u4f7f\u7528\u8f2a\u6d41\u50b3\u905e\u4e8b\u4ef6\u7684\u6a5f\u5236\uff08\u524d\u9762\u7684 load-balance\uff09\u6642\uff0c \u6211\u5011\u53ef\u4ee5\u900f\u904e\u4e0d\u540c\u8ffd\u8e64\u8005\u8ffd\u8e64\u4e0d\u540c\u5206\u5340\u4f86\u9054\u6210\uff08\u5982\u679c\u7528\u50b3\u7d71\u4e2d\u4ecb\u8005\u7684\u65b9\u5f0f\u5c31\u6703\u9047\u5230\u4e82\u5e8f\u7684\u554f\u984c\uff09\uff0c \u4f46\u662f\u9019\u6703\u8b93\u8ffd\u8e64\u8005\u7684\u6578\u91cf\u53d7\u9650\u65bc\u5206\u5340\u6578\u91cf\u3002 \u9664\u6b64\u4e4b\u5916\uff0c\u7576\u6709\u4e00\u500b\u7bc0\u9ede\u57f7\u884c\u7de9\u6162\u6642\u5c31\u6703\u8b93\u4e2d\u4ecb\u8005\u7b49\u5f85\u5206\u5340\u4e2d\u5f8c\u7e8c\u7684\u4e8b\u4ef6\u88ab\u50b3\u9001\u51fa\u53bb \uff08\u50b3\u7d71\u7684\u4e2d\u4ecb\u8005\u53ef\u4ee5\u4ea4\u66ff\u50b3\u905e\u7d66\u4e0d\u540c\u8ffd\u8e64\u8005\uff0c\u96d6\u7136\u9019\u4e5f\u662f\u9020\u6210\u4e82\u5e8f\u7684\u539f\u56e0\uff09\uff0c \u6839\u64da\u61c9\u7528\u7a0b\u5f0f\u7684\u4e0d\u540c\u9019\u53ef\u80fd\u662f\u4e0d\u88ab\u63a5\u53d7\u7684\u3002
\u7e3d\u800c\u8a00\u4e4b\uff0c\u65e5\u8a8c\u578b\u4e2d\u4ecb\u8005\u9069\u5408\u9ad8\u901a\u91cf\u4f4e\u904b\u7b97\uff1b\u53cd\u4e4b\uff0c\u50b3\u7d71\u4e2d\u4ecb\u8005\u9069\u5408\u4f4e\u901a\u91cf\u9ad8\u904b\u7b97\u4e14\u9806\u5e8f\u4e26\u4e0d\u91cd\u8981\u7684\u8cc7\u6599\u6a21\u5f0f\u3002
"},{"location":"feedback/designing-data-intensive-applications/derived-stream/#\u539f\u53e4\u6642\u4ee3\u7684\u4e8b\u4ef6","title":"\u539f\u53e4\u6642\u4ee3\u7684\u4e8b\u4ef6","text":"\u7576\u4e8b\u4ef6\u8d8a\u4f86\u8d8a\u591a\u7684\u6642\u5019\uff0c\u6211\u5011\u53ef\u4ee5\u900f\u904e \u5feb\u7167\u6a5f\u5236 \u4f86\u907f\u514d\u6bcf\u6b21\u8cc7\u6599\u91cd\u5efa\u90fd\u8981\u5f9e\u539f\u53e4\u6642\u4ee3\u958b\u59cb\uff0c\u800c\u662f\u5f9e\u6700\u5f8c\u4e00\u6b21\u7684\u5feb\u7167\u5efa\u7acb\u3002
\u9664\u4e86\u5feb\u7167\u9019\u65b9\u6cd5\u4e4b\u5916\uff0c\u6211\u5011\u53ef\u4ee5\u904b\u7528\u5728\u6392\u5e8f\u5b57\u4e32\u8868\u4e2d\u5b78\u5230\u7684\uff0c \u5b9a\u671f\u5728\u80cc\u666f\u4e2d\u628a\u65e5\u8a8c\u58d3\u7e2e\u8d77\u4f86\uff08\u65e5\u8a8c\u7dca\u58d3\uff0clog compaction\uff09\uff0c\u4f8b\u5982\u5c0d\u540c\u4e00\u500b\u503c\u5f97\u7570\u52d5\u53ea\u4fdd\u7559\u6700\u65b0\u7684\uff1a
\u5982\u679c key \u90fd\u4e00\u6a23\uff0c\u5c31\u7559\u6700\u65b0\u7684\u5c31\u597dkey=123, value=321\nkey=123, value=456\n# \u4ee5\u4e0a\u90fd\u522a\u9664\nkey=123, value=789\n
\u81f3\u65bc\u8981\u7528\u54ea\u7a2e\u65b9\u5f0f\u5247\u6839\u64da\u8cc7\u6599\u7684\u7279\u5fb5\uff0c\u82e5\u8cc7\u6599\u7570\u52d5\uff08update\uff09\u983b\u7e41\uff0c \u5982\u679c\u4f7f\u7528 \u65e5\u8a8c\u7dca\u58d3 \u6703\u8b93\u80cc\u666f\u57f7\u884c\u904e\u591a\u7684\u7dca\u58d3\u5c0e\u81f4\u58d3\u8feb\u57f7\u884c\u901f\u5ea6\u3002 \u76f8\u5c0d\u800c\u8a00\uff0c\u82e5\u8cc7\u6599\u672c\u8eab\u5927\u90e8\u5206\u90fd\u662f\u65b0\u589e\uff0c\u9019\u6a23\u5c31\u5f88\u9069\u5408\u4f7f\u7528 \u65e5\u8a8c\u7dca\u58d3\u3002
"},{"location":"feedback/designing-data-intensive-applications/derived-stream/#\u522a\u9664\u4e8b\u4ef6","title":"\u522a\u9664\u4e8b\u4ef6","text":"\u4e8b\u4ef6\u6709\u6642\u9762\u81e8\u5fc5\u9808\u522a\u9664\u7684\u72c0\u6cc1\uff0c\u4f8b\u5982\u516c\u53f8\u653f\u7b56\u3001\u96b1\u79c1\u6b0a\u3001\u5b89\u5168\u6027\u7b49\u7b49\uff0c \u9019\u6642\u5c31\u6703\u767c\u73fe\u522a\u9664\u4e8b\u4ef6\u5176\u5be6\u5f88\u56f0\u96e3\u3002\u4f60\u6709\u5f88\u591a\u8ffd\u8e64\u8005\uff0c\u4e0d\u7ba1\u5728\u786c\u9ad4\u6216\u8edf\u9ad4\u4e0a\u53c8\u6709\u5f88\u591a\u5099\u4efd\u6a5f\u5236\uff0c \u5230\u5f8c\u9762\u4f60\u6703\u767c\u73fe\u522a\u9664\u8cc7\u6599\u4e0d\u4ee3\u8868\u8b93\u8cc7\u6599\u4e0d\u898b\uff0c\u800c\u662f\u8b93\u8cc7\u6599\u66f4\u96e3\u88ab\u627e\u5230\u3002
"},{"location":"feedback/designing-data-intensive-applications/derived-stream/#\u540c\u6b65\u554f\u984c","title":"\u540c\u6b65\u554f\u984c","text":"\u6211\u5011\u8aaa\u660e\u4e86\u4e32\u6d41\u662f\u4ec0\u9ebc\uff0c\u4e5f\u8aaa\u660e\u8a72\u600e\u9ebc\u50b3\u905e\u4e8b\u4ef6\uff0c\u4f46\u9084\u6c92\u8aaa\u4e32\u6d41\u6703\u9020\u6210\u7684\u4e00\u4e9b\u554f\u984c\u3002
\u73fe\u5be6\u751f\u6d3b\u4e2d\u61c9\u7528\u7a0b\u5f0f\u6703\u6709\u591a\u7a2e\u8cc7\u6599\u7cfb\u7d71\uff0c\u4e3b\u8981\u7684\u8cc7\u6599\u5eab\u8ca0\u8cac OLTP\u3001\u7528\u4f86\u52a0\u901f\u8b80\u53d6\u7684\u5feb\u53d6\u3001\u7528\u4f86\u63d0\u4f9b\u4f7f\u7528\u8005\u641c\u5c0b\u7684\u5168\u6587\u6aa2\u7d22\u7b49\u7b49\u3002 \u4f46\u662f\u5982\u679c\u8cc7\u6599\u5eab\u66f4\u65b0\u7684\u6642\u5019\uff0c\u6211\u8981\u600e\u9ebc\u8b93\u9019\u4e9b\u884d\u751f\u8cc7\u6599\u4e5f\u8ddf\u8457\u66f4\u65b0\uff1f \u4f60\u53ef\u80fd\u89ba\u5f97\u900f\u904e\u61c9\u7528\u7a0b\u5f0f\u6216\u4e3b\u8981\u8cc7\u6599\u5eab\u4f86\u66f4\u65b0\u5c31\u53ef\u4ee5\uff0c\u4f46\u662f\u6703\u6709\u7af6\u8cfd\u72c0\u6cc1\uff0c\u5982\u4e0a\u5716\u3002
\u9019\u7a2e\u4e26\u884c\u8655\u7406\u7684\u554f\u984c\u6211\u5011\u5728\u8ac7\u8655\u7406\u7af6\u8cfd\u72c0\u6cc1\u6642\u5c31\u63d0\u904e\u5f88\u591a\uff0c \u7576\u727d\u6d89\u5230\u7570\u8cea\u7684\u61c9\u7528\u7a0b\u5f0f\uff08\u8cc7\u6599\u5eab\u548c\u5feb\u53d6\u548c\u5168\u6587\u6aa2\u7d22\uff09\u9593\u7684\u540c\u6b65\u6642\u5c31\u66f4\u56f0\u96e3\u3002
"},{"location":"feedback/designing-data-intensive-applications/derived-stream/#\u900f\u904e\u65e5\u8a8c\u89e3\u6c7a","title":"\u900f\u904e\u65e5\u8a8c\u89e3\u6c7a","text":"\u4e32\u6d41\u8655\u7406\u53ef\u4ee5\u600e\u9ebc\u89e3\u6c7a\u9019\u554f\u984c\uff1f
\u6bcf\u6b21\u8cc7\u6599\u5eab\u7570\u52d5\u6642\uff0c\u90fd\u6703\u66f4\u65b0 WAL \u6216\u908f\u8f2f\u65e5\u8a8c\uff0c \u554f\u984c\u662f\u9019\u4e9b\u8cc7\u8a0a\u901a\u5e38\u90fd\u662f\u50c5\u9650\u65bc\u76f8\u540c\u7684\u8cc7\u6599\u5eab\u53e2\u96c6\u4e2d\uff0c\u6211\u5011\u6c92\u8fa6\u6cd5\u900f\u904e API \u7b49\u516c\u958b\u4ecb\u9762\u5f97\u5230\u9019\u4e9b\u8cc7\u6599\uff0c \u4f46\u5982\u679c\u53ef\u4ee5\u5462\uff1f
CDC\uff08Change data capture\uff09\u5c31\u662f\u9019\u6a23\u7684\u4e00\u500b\u6982\u5ff5\u3002
\u548c\u524d\u9762\u63d0\u7684\u4e00\u4e9b ETL \u5f88\u50cf\uff0c \u4f46\u662f\u5dee\u7570\u5728\u65bc\u9019\u88e1\u662f\u900f\u904e WAL\u3001\u908f\u8f2f\u65e5\u8a8c \u4e26\u4e32\u6d41\u51fa\u8cc7\u6599\u800c\u975e\u6279\u6b21\u3002 \u9019\u6642\u5716\u4e0a\u7684\u5168\u6587\u7d22\u5f15\u6216\u8cc7\u6599\u5009\u5132\u5c31\u8b8a\u6210\u6240\u8b02\u7684\u300c\u884d\u751f\u8cc7\u6599\u7cfb\u7d71\u300d\u3002 \u9664\u6b64\u4e4b\u5916\uff0c\u5982\u679c\u900f\u904e WAL\u3001\u908f\u8f2f\u65e5\u8a8c \u4e32\u6d41\u9019\u4e9b\u8b8a\u5316\uff0c \u5c31\u4e0d\u7528\u64d4\u5fc3\u9806\u5e8f\u7684\u554f\u984c\uff08\u76f8\u8f03\u65bc\u5728\u8cc7\u6599\u5eab\u524d\u505a\u6536\u96c6\uff09\uff0c\u56e0\u70ba\u4ed6\u5df2\u7d93\u5728\u65e5\u8a8c\u4e2d\u505a\u597d\u9806\u5e8f\u7684\u6392\u5b9a\u4e86\u3002
\u4f46\u662f\u56e0\u70ba CDC \u662f\u7570\u6b65\u7684\uff08\u8cc7\u6599\u5eab\u4e0d\u6703\u7b49\u5230\u78ba\u8a8d\u63a5\u6536\u65b9\u78ba\u5be6\u6536\u5230\u624d\u7e7c\u7e8c\u505a\u4e8b\uff09 \u6240\u4ee5\u6240\u6709\u53ef\u80fd\u767c\u751f\u65bc\u8907\u88fd\u5ef6\u9072\u7684\u72c0\u6cc1\u90fd\u53ef\u80fd\u767c\u751f\u3002
"},{"location":"feedback/designing-data-intensive-applications/derived-stream/#\u5de5\u5177","title":"\u5de5\u5177","text":"\u6709\u4e9b\u8cc7\u6599\u5eab\u7684\u5916\u639b\u5de5\u5177\u5141\u8a31 CDC
\u6709\u4e9b\u751a\u81f3\u652f\u63f4\u7576\u7279\u5b9a\u503c\u88ab\u7570\u52d5\u6642\u8f38\u51fa\u4e8b\u4ef6\uff1a
CREATE TABLE products EXPORT TO TARGET offsiteprod\n ON INSERT, UPDATE, DELETE\n [ ... ];\n
"},{"location":"feedback/designing-data-intensive-applications/derived-stream/#\u4e8b\u4ef6\u4f86\u6e90","title":"\u4e8b\u4ef6\u4f86\u6e90","text":"\u4e8b\u4ef6\u4f86\u6e90 CDC \u62bd\u8c61 \u8cc7\u6599 \u54f2\u5b78 \u5de5\u5177 \u5feb\u7167 \u58d3\u7dca \u6bd4\u8f03\u4e8b\u4ef6\u4f86\u6e90\u548c CDC
\u4e8b\u4ef6\u4f86\u6e90\uff08Event Sourcing\uff0cDomain-Driven Design \u793e\u7fa4\u7684\u7528\u8a5e\uff09\u548c CDC \u5f88\u50cf\uff0c \u90fd\u662f\u50b3\u905e\u4e8b\u4ef6\u7d66\u9700\u8981\u4f7f\u7528\u7684\u4eba\uff0c\u4f46\u662f\u4e0d\u50cf CDC \u662f\u76e3\u807d\u6bcf\u6b21\u8cc7\u6599\u5eab\u5beb\u5165\u8acb\u6c42\uff08\u5728\u65e5\u8a8c\u5c64\u7d1a\u4e2d\uff09 \u4e26\u628a\u8a72\u8cc7\u8a0a\u8f49\u6210\u901a\u7528\u7684\u683c\u5f0f\u7d66\u5916\u90e8\u8ffd\u8e64\u8005\uff0c\u4e8b\u4ef6\u4f86\u6e90\u66f4\u50be\u5411\u65bc\u628a\u4e8b\u4ef6\u4ee5\u62bd\u8c61\u7684\u65b9\u5f0f\u5448\u73fe\u3002
\u4f8b\u5982\u7576\u5b78\u751f\u5728\u7db2\u9801\u4e0a\u9ede\u64ca\u9000\u51fa\u9078\u4fee\u8ab2\u7a0b\u6642\uff0c\u4e8b\u4ef6\u4f86\u6e90\u7684\u8a2d\u8a08\u5c31\u6703\u7d00\u9304\u8a72\u4e8b\u4ef6\u300c\u5b78\u751f A \u9000\u51fa \u8ab2\u7a0b B\u300d\uff0c \u9019\u6642\u53ef\u80fd\u6703\u6709\u4e00\u500b\u61c9\u7528\u7a0b\u5f0f\u76e3\u807d\u4e8b\u4ef6\u4e26\u57f7\u884c\u79fb\u9664 \u5b78\u751f A \u7684\u500b\u4eba\u8ab2\u7a0b\u8cc7\u8a0a\u548c\u5b78\u5206\u7d71\u8a08\uff0c \u6709\u4e00\u500b\u61c9\u7528\u7a0b\u5f0f\u76e3\u807d\u4e8b\u4ef6\u4e26\u8b93\u6b63\u5728\u6392\u968a\u9078\u4fee \u8ab2\u7a0b B \u7684 \u5b78\u751f B \u6210\u529f\u9078\u4fee\u8a72\u8ab2\u7a0b\u3002
\u4e0a\u8ff0\u7528\u6cd5\u53ef\u80fd\u540c\u6a23\u7528\u65bc CDC \u53ea\u662f\u4e0d\u90a3\u9ebc\u62bd\u8c61\uff0c\u4f8b\u5982\uff1aid=A;class=null
\u3002 \u9664\u6b64\u4e4b\u5916\uff0c\u9019\u5169\u500b\u51fa\u767c\u9ede\u4e26\u4e0d\u4e00\u6a23\uff0cCDC \u76ee\u7684\u5728\u65bc\u958b\u653e\u8cc7\u6599\u5eab\u5167\u90e8\u7684\u7570\u52d5\u8cc7\u6599\uff0c\u4e14\u8cc7\u8a0a\u53ef\u80fd\u5f88\u7d30\uff1b \u53cd\u4e4b\u4e8b\u4ef6\u4f86\u6e90\u662f\u4e00\u7a2e\u54f2\u5b78\uff0c \u50be\u5411\u65bc\u628a\u8cc7\u6599\u62bd\u8c61\u5316\u4e26\u8b93\u4efb\u4e00\u7a2e\u76ee\u7684\uff08Domain-Driver \u7684\u7531\u4f86\uff09\u7684\u61c9\u7528\u7a0b\u5f0f\u53bb\u57f7\u884c\u4ed6\u8a72\u505a\u7684\u4e8b\u3002
\u7531\u6b64\uff0cCDC \u901a\u5e38\u53ef\u4ee5\u505a\u5230\u58d3\u7dca\u65e5\u8a8c\uff08\u9650\u5236\u76f8\u540c key \u7684\u7570\u52d5\u7684\u65e5\u8a8c\u6578\u91cf\uff09\uff0c \u4f46\u662f\u4e8b\u4ef6\u4f86\u6e90\u50be\u5411\u65bc\u5efa\u7acb\u5feb\u7167\uff08\u96d6\u7136\u6839\u64da\u5176\u54f2\u5b78\u4e0d\u61c9\u8a72\u5efa\u7acb\u5feb\u7167\uff0c\u56e0\u70ba\u6240\u6709\u5feb\u7167\u90fd\u662f\u57fa\u65bc\u67d0\u7a2e\u300c\u908f\u8f2f\u300d\u800c\u975e\u539f\u59cb\u8cc7\u6599\u672c\u8eab\uff09\u3002
\u8a72\u4e0d\u8a72\u4f7f\u7528 CDC \u505a Event sourcing\uff1f
StackOverflow \u6709\u4eba\u63d0\u51fa\u9019\u6a23\u7684\u554f\u984c\uff0c\u500b\u4eba\u8a8d\u70ba\u6eff\u6709\u8da3\u7684\u3002
"},{"location":"feedback/designing-data-intensive-applications/derived-stream/#\u91cd\u65b0\u8868\u9054\u8cc7\u6599\u9762\u8c8c","title":"\u91cd\u65b0\u8868\u9054\u8cc7\u6599\u9762\u8c8c","text":"\u900f\u904e\u5168\u90e8\u7684\u4e8b\u4ef6\uff0c\u6211\u53ef\u4ee5\u91cd\u65b0\u5efa\u69cb\u4e00\u500b\u65b0\u7684\u8996\u91ce\uff0c\u5c31\u597d\u50cf\u6279\u6b21\u8655\u7406\u4e00\u6a23\u3002 \u6839\u64da\u4f60\u7684\u5546\u52d9\u908f\u8f2f\u548c\u9700\u6c42\uff0c\u4e0d\u518d\u9700\u8981\u900f\u904e\u8907\u96dc\u7684\u524d\u5f8c\u76f8\u5bb9\u7684\u6a5f\u5236\u4f86\u66f4\u65b0\u4f60\u7684\u7db1\u76ee\uff0c\u800c\u662f\u5b8c\u5168\u91cd\u65b0\u5efa\u7acb\u8d77\u65b0\u7684\u8cc7\u6599\u9762\u8c8c\u3002
\u4f8b\u5982 Druid \u900f\u904e Apache Kafka\uff08\u65e5\u8a8c\u578b\u4e2d\u4ecb\u8005\uff09\u8caf\u5b58\u7684\u4e8b\u4ef6\uff0c \u53ef\u4ee5\u6839\u64da\u9700\u6c42\u5ba2\u5236\u8cc7\u6599\u9762\u8c8c\u3002 \u9019\u7a2e\u6839\u64da\u9700\u6c42\u5efa\u7acb\u9762\u8c8c\u7684\u6982\u5ff5\u7a31\u70ba Command Query Responsibility Segregation(CQRS)\u3002
"},{"location":"feedback/designing-data-intensive-applications/derived-stream/#\u662f\u5426\u6b63\u898f\u5316\u4e0d\u518d\u6709\u610f\u7fa9","title":"\u662f\u5426\u6b63\u898f\u5316\u4e0d\u518d\u6709\u610f\u7fa9","text":"\u5982\u679c\u6709\u5c0d\u8cc7\u6599\u5eab\u8f03\u719f\u7684\uff0c\u53ef\u80fd\u5c31\u77e5\u9053\u5e38\u5e38\u6703\u5728\u8981\u4e0d\u8981\u6b63\u898f\u5316\uff08normalization\uff09\u6642\u505a\u5f88\u591a\u722d\u8faf\u8a0e\u8ad6\uff0c \u4f46\u662f\u5982\u679c\u900f\u904e\u9019\u65b9\u6cd5\uff0c\u8981\u4e0d\u8981\u6b63\u898f\u5316\u5c31\u986f\u5f97\u6c92\u90a3\u9ebc\u6709\u610f\u7fa9\u4e86\uff0c\u56e0\u70ba\u6240\u6709\u8cc7\u6599\u90fd\u662f\u53bb\u6b63\u898f\u5316\uff0c \u4f46\u53c8\u900f\u904e\u8ffd\u8e64\u6a5f\u5236\uff08fan-out\uff09\u7dad\u6301\u6b63\u898f\u5316\u3002
\u6b63\u898f\u5316\u548c\u53bb\u6b63\u898f\u5316
\u901a\u5e38\u53bb\u6b63\u898f\u5316\u7684\u7528\u610f\u5728\u52a0\u901f\u8b80\u53d6\u901f\u5ea6\uff0c\u6b63\u898f\u5316\u7684\u7528\u610f\u5728\u6e1b\u5c11\u5beb\u5165\u6642\u7684\u8907\u96dc\u5ea6\u3002 \u7db2\u8def\u4e0a\u6709\u5f88\u591a\u8cc7\u6599\u5eab\u8a72\u4e0d\u8a72\u6b63\u898f\u5316\u7684\u722d\u8ad6\uff0c\u4e0d\u904e\u6211\u500b\u4eba\u662f\u50be\u5411\u65bc\u53bb\u6b63\u898f\u5316\u3002
"},{"location":"feedback/designing-data-intensive-applications/derived-stream/#\u540c\u6b65\u591a\u8655\u7570\u52d5\u7684\u8cc7\u6599","title":"\u540c\u6b65\u591a\u8655\u7570\u52d5\u7684\u8cc7\u6599","text":"\u524d\u9762\u63d0\u5230\u5982\u679c\u4e00\u500b\u5beb\u5165\u8acb\u6c42\u6703\u540c\u6642\u7570\u52d5\u5f88\u591a\u8cc7\u6599\uff08\u4f8b\u5982\u591a\u500b\u95dc\u806f\u5f0f\u7684\u8868\uff09\u6642\uff0c \u9019\u6642\u5728\u505a\u4e00\u81f4\u6027\u548c\u539f\u5b50\u6027\u5c31\u6703\u76f8\u5c0d\u8907\u96dc\uff0c\u4f46\u662f\u5982\u679c\u900f\u904e\u4e8b\u4ef6\u4f86\u6e90\u7684\u65b9\u5f0f\uff0c \u591a\u500b\u8cc7\u6599\u7684\u7570\u52d5\uff08\u4f8b\u5982\u524d\u9762\u63d0\u7684\u5b78\u751f\u9000\u9078\u8ab2\u7a0b\uff09\u5728\u62bd\u8c61\u5c64\u9762\u4e0a\u5176\u5be6\u53ea\u662f\u4e00\u500b\u4e8b\u4ef6\uff0c\u4e5f\u5c31\u662f\u9644\u52a0\u4e00\u884c\u8cc7\u6599\u5230\u65e5\u8a8c\u4e2d\u3002
\u9019\u6a23\u505a\u4e00\u81f4\u6027\u548c\u539f\u5b50\u6027\u5c31\u5f88\u55ae\u7d14\u4e86\uff0c\u8b93\u4e0d\u540c\u8ffd\u8e64\u8005\u8655\u7406\u4e0d\u540c\u8868\u7684\u8a08\u7b97\u5c31\u53ef\u4ee5\u8f15\u6613\u9054\u5230\u539f\u5b50\u6027\uff0c \u7136\u5f8c\u591a\u500b\u76f8\u540c\u4e26\u884c\u4e8b\u4ef6\u56e0\u70ba\u662f\u55ae\u4e00\u4e8b\u4ef6\u6240\u4ee5\u4e0d\u6703\u6709\u591a\u500b\u7570\u52d5\u76f8\u4e92\u4ea4\u53c9\uff0c \u5c31\u5f88\u8f15\u6613\u53ef\u4ee5\u9054\u6210\u4e00\u81f4\u6027\uff08\u4f46\u662f\u6703\u6709\u548c\u8907\u88fd\u5ef6\u9072\u4e00\u6a23\u7684\u554f\u984c\uff0c\u4e5f\u5c31\u662f\u50c5\u80fd\u9054\u6210\u6700\u7d42\u4e00\u81f4\u6027\uff09\u3002
"},{"location":"feedback/designing-data-intensive-applications/derived-stream/#\u4e32\u6d41\u8655\u7406","title":"\u4e32\u6d41\u8655\u7406","text":"\u4e32\u6d41\u8655\u7406\u548c\u6279\u6b21\u8655\u7406\u7406\u5ff5\u4e00\u6a23\uff1a\u6bcf\u500b\u7a0b\u5e8f\uff08job, operator\uff09\u505a\u81ea\u5df1\u7684\u4e8b\uff0c \u900f\u904e\u591a\u500b\u7a0b\u5e8f\u7684\u5354\u4f5c\u88fd\u4f5c\u51fa\u8907\u96dc\u7684\u61c9\u7528\u3002\u524d\u9762\u8b1b\u7684\u90fd\u662f\u55ae\u4e00\u8655\u7406\u65b9\u5f0f\uff0c \u4f8b\u5982\u5feb\u53d6\uff0c\u6211\u5011\u9084\u6c92\u63d0\u5230\u50cf\u6279\u6b21\u8655\u7406\u90a3\u6a23\u53ef\u4ee5\u591a\u500b\u7a0b\u5e8f\u50b3\u905e\u7684\u6a5f\u5236\uff0c\u9084\u6709\u9019\u4e4b\u4e2d\u6703\u9047\u5230\u7684\u4e00\u4e9b\u554f\u984c\u3002
\u9069\u7528\u65bc\u6279\u6b21\u8655\u7406\u7684 \u5206\u5340 \u548c \u5e73\u884c\u8655\u7406 \u5728\u4e32\u6d41\u8655\u7406\u4e2d\u90fd\u662f\u4e00\u6a23\u7684\u6a5f\u5236\uff0c \u5dee\u5225\u5728\u65bc\u6279\u6b21\u8655\u7406\u662f\u8655\u7406\u4e00\u6bb5\u8cc7\u6599\uff0c\u4e5f\u5c31\u662f\u9019\u500b\u8cc7\u6599\u5927\u5c0f\u662f\u53d7\u9650\u7684\uff0c \u7576\u904b\u7b97\u5230\u4e00\u534a\u7684\u6642\u5019\u7bc0\u9ede\u5931\u80fd\u6642\u5c31\u53ef\u4ee5\u91cd\u65b0\u904b\u7b97\uff0c\u4f46\u662f\u5728\u4e32\u6d41\u8655\u7406\u6642\u8cc7\u6599\u662f\u7121\u9650\u7684\u3002 \u4e00\u500b\u904b\u884c\u4e86\u597d\u5e7e\u500b\u6708\u7684\u7d50\u679c\uff0c\u6211\u5011\u4e0d\u53ef\u80fd\u8aaa\u91cd\u7b97\u5c31\u91cd\u7b97\uff0c\u5fc5\u9808\u8981\u6709\u65b9\u5f0f\u8655\u7406\u3002
"},{"location":"feedback/designing-data-intensive-applications/derived-stream/#\u54ea\u4e9b\u61c9\u7528","title":"\u54ea\u4e9b\u61c9\u7528","text":"\u300c\u5efa\u7acb\u65b0\u89c0\u9ede\u300d\u524d\u9762\u6709\u63d0\u904e\uff0c\u9019\u88e1\u5c31\u653e\u5728\u4e00\u8d77\u56de\u9867\u4e00\u4e0b\u3002 \u524d\u9762\u5169\u500b\u901a\u5e38\u662f\u9700\u8981\u5728\u7279\u5b9a\u7bc4\u570d\u5167\u7684\u8cc7\u6599\uff0c\u4f46\u662f\u5efa\u7acb\u65b0\u89c0\u9ede\u901a\u5e38\u9700\u8981\u5f9e\u539f\u53e4\u6642\u4ee3\u7684\u8cc7\u6599\u624d\u80fd\u5efa\u7acb\u6b63\u78ba\u7684\u89c0\u9ede\u3002
"},{"location":"feedback/designing-data-intensive-applications/derived-stream/#\u8907\u5408\u4e8b\u4ef6\u8655\u7406","title":"\u8907\u5408\u4e8b\u4ef6\u8655\u7406","text":"\u8907\u5408\u4e8b\u4ef6\u8655\u7406\uff08CEP\uff09\u5f88\u50cf Regular Expression\uff0cCEP \u5c31\u662f\u4e00\u7a2e\u7be9\u9078\u7279\u5b9a\u4e8b\u4ef6\u7684\u5de5\u5177\uff0c \u81ea 1990 \u767c\u5c55\u81f3\u4eca\uff0c\u6709\u50cf SQL \u90a3\u6a23\u62bd\u8c61\u7684\u8a9e\u6cd5 \uff08\u5982 CEL\uff09 \u4e5f\u6709 GUI \u5de5\u5177\u3002
example in CELselect *\nfrom MeasurementCreated e\nwhere getNumber(e, \"c8y_Temperature.T.value\") > 100\n
\u4e0d\u50cf\u5176\u4ed6\u8cc7\u6599\u5eab\u628a\u8cc7\u6599\u5b58\u8d77\u4f86\uff0c\u7136\u5f8c\u8b93\u5916\u90e8\u8f38\u5165\u641c\u5c0b\u8a9e\u6cd5\u9032\u4f86\uff08\u8cc7\u6599\u662f\u4e3b\u3001\u641c\u5c0b\u662f\u5ba2\uff09\uff0c CEP \u6703\u8b93\u8a9e\u6cd5\u5b58\u9032\u7bc0\u9ede\u4e2d\uff0c\u7136\u5f8c\u8b93\u8cc7\u6599\u8f38\u5165\u9032\u7bc0\u9ede\uff08\u641c\u5c0b\u662f\u4e3b\u3001\u8cc7\u6599\u662f\u5ba2\uff09\u3002 \u6709\u6642\u8b93\u6bcf\u500b\u8cc7\u6599\u90fd\u904e\u9019\u500b\u641c\u5c0b\u6703\u964d\u4f4e\u6574\u9ad4\u7684\u901f\u5ea6\uff0c\u6240\u4ee5\u6709\u6642\u5019\u6703\u5148\u7d93\u904e \u7d22\u5f15 \u518d\u8dd1\u7be9\u9078\uff0c \u4f8b\u5982 Elasticsearch \u7684 percolate\u3002
\u53ef\u80fd\u7684\u61c9\u7528\u6709\uff1a
\u53ef\u80fd\u7684\u8edf\u9ad4\u6709\uff1a
\u4e0d\u50cf CEP \u9019\u7a2e\u7be9\u9078\u7279\u5b9a\u4e8b\u4ef6\u7684\uff0c\u61c9\u7528\u4e5f\u53ef\u80fd\u662f\u5728\u7279\u5b9a\u5340\u9593\u5167\u6574\u5408\u591a\u500b\u4e8b\u4ef6\u4e26\u8f38\u51fa\u6210\u9700\u8981\u7684\u7d50\u679c\u3002
\u9019\u88e1\u9700\u8981\u6ce8\u610f\u7684\u662f\u8981\u600e\u9ebc\u8a02\u5b9a\u7279\u5b9a\u5340\u9593\uff1f\u9019\u500b\u6211\u5011\u6703\u5728\u5f8c\u9762\u63d0\u4e32\u6d41\u8655\u7406\u7684\u554f\u984c\u6642\u8a0e\u8ad6\u3002
\u53ef\u80fd\u7684\u8edf\u9ad4\u6709\uff1a
\u4e32\u6d41\u8655\u7406\u7b97\u51fa\u7684\u503c\u4e0d\u662f\u6e96\u78ba\u7684
\u6709\u6642\u5019\u70ba\u4e86\u6e1b\u5c11\u904b\u7b97\u6216\u5132\u5b58\u8cc7\u6e90\u6703\u900f\u904e\u4e00\u4e9b\u6a5f\u7387\u904b\u7b97 \uff08\u4f8b\u5982\u57fa\u6578\u4f30\u8a08\uff09 \u5c0e\u81f4\u8f38\u51fa\u7684\u7d50\u679c\u548c\u771f\u5be6\u7d50\u679c\u6709\u4e9b\u5fae\u5dee\u7570\uff0c\u4e0d\u904e\u9019\u4e26\u4e0d\u662f\u56e0\u70ba\u4e32\u6d41\u8655\u7406\u5929\u751f\u7684\u74b0\u5883\uff0c\u800c\u662f\u72a7\u7272\u6e96\u78ba\u6027\u63db\u53d6\u6548\u80fd\uff0c \u9019\u4e5f\u53ef\u80fd\u662f\u5f88\u591a\u4eba\u6703\u8a8d\u70ba\u4e32\u6d41\u8655\u7406\u7684\u7d50\u679c\u901a\u5e38\u4e0d\u6e96\u7684\u8b2c\u8aa4\u4f86\u6e90\u3002
"},{"location":"feedback/designing-data-intensive-applications/derived-stream/#\u6709\u54ea\u4e9b\u554f\u984c","title":"\u6709\u54ea\u4e9b\u554f\u984c","text":"\u4e3b\u8981\u6709\u5169\u500b\uff1a\u6642\u9593 \u548c \u806f\u5408\u3002
"},{"location":"feedback/designing-data-intensive-applications/derived-stream/#\u8a72\u9078\u54ea\u500b\u6642\u9593","title":"\u8a72\u9078\u54ea\u500b\u6642\u9593\uff1f","text":"\u5982\u679c\u4f7f\u7528\u7a0b\u5e8f\u57f7\u884c\u7576\u4e0b\u7684\u6642\u9593\u5c31\u6703\u56e0\u70ba\u50b3\u905e\u5ef6\u9072\u800c\u51fa\u73fe\u8aa4\u5dee\uff0c \u53cd\u904e\u4f86\u8aaa\u6709\u6642\u5f9e\u4f7f\u7528\u8005\u9001\u4f86\u7684\u4e8b\u4ef6\u548c\u6e96\u78ba\u4e8b\u4ef6\u767c\u751f\u7684\u6642\u9593\u5dee\u5f88\u591a\uff0c \u4f8b\u5982\u624b\u6a5f\u9023\u5230 Wifi \u5f8c\u624d\u6703\u628a\u4e8b\u4ef6\u9001\u7d66\u4f3a\u670d\u5668\u3002 \u4f46\u662f\u5982\u679c\u4f7f\u7528\u4f7f\u7528\u8005\u88dd\u7f6e\u7576\u4e0b\u7684\u6642\u9593\uff0c\u5c31\u5f88\u5bb9\u6613\u53d7\u5230\u4f7f\u7528\u8005\u624b\u52d5\u6539\u6642\u9593\u9020\u6210\u7684\u8aa4\u5dee\uff0c \u6240\u4ee5\u9078\u64c7\u54ea\u500b\u6642\u9593\u662f\u9700\u8981\u6839\u64da\u61c9\u7528\u7a0b\u5f0f\u53bb\u8a0e\u8ad6\u7684\u3002
\u4e0d\u904e\u4e0a\u8ff0\u72c0\u6cc1\u901a\u5e38\u6703\u6709\u5176\u4ed6\u89e3\u6cd5\uff1a\u7d00\u9304\u4e09\u500b\u6642\u9593\uff0c\u5206\u5225\u662f\u4e8b\u4ef6\u767c\u751f\u6642\u88dd\u7f6e\u7576\u4e0b\u7684\u6642\u9593\uff0c \u4e8b\u4ef6\u9001\u51fa\u6642\u88dd\u7f6e\u7576\u4e0b\u7684\u6642\u9593\uff0c\u5f8c\u7aef\u4f3a\u670d\u5668\u6536\u5230\u4e8b\u4ef6\u7576\u4e0b\u7684\u6642\u9593\u3002 \u900f\u904e\u4f3a\u670d\u5668\u7684\u6642\u9593\u548c\u4e8b\u4ef6\u9001\u51fa\u7684\u6642\u9593\u4f86\u8a08\u7b97\u88dd\u7f6e\u548c\u4f3a\u670d\u5668\u7684\u6642\u9593\u5dee\uff0c\u5f97\u77e5\u4e8b\u4ef6\u767c\u751f\u6642\u7684\u771f\u6b63\u6642\u9593\u3002
"},{"location":"feedback/designing-data-intensive-applications/derived-stream/#\u6642\u9593\u7a97","title":"\u6642\u9593\u7a97","text":"\u5728\u9078\u64c7\u6642\u9593\u7a97\u7684\u5be6\u4f5c\u524d\u6211\u5011\u9700\u8981\u9078\u6642\u8ddd\uff08\u6bcf\u4e94\u5206\u9418\u7d71\u8a08\u4e00\u6b21\u9084\u662f\u6bcf\u5206\u9418\uff09\uff0c\u4f46\u7121\u8ad6\u54ea\u4e2d\u5be6\u4f5c\u90fd\u6703\u6709\u843d\u5f8c\u4e8b\u4ef6\u7684\u60c5\u6cc1\uff0c \u4f8b\u5982\u7d71\u8a08\u6bcf\u5206\u9418\u7684\u8acb\u6c42\u6578\u6642\u6211\u8a72\u600e\u9ebc\u6c7a\u5b9a\u9019\u5206\u9418\uff08\u4f8b\u5982 09:30 \u7684\u9019\u5206\u9418\uff09\u7684\u7d71\u8a08\u5df2\u7d93\u7d50\u675f\u4e86\uff1f \u6709\u53ef\u80fd\u8acb\u6c42\u767c\u751f\u5728 09:30.999\uff0c\u4f46\u662f\u9001\u904e\u4f86\u6642\u5df2\u7d93 09:31.1\uff0c\u9019\u6642\u9019\u500b\u8acb\u6c42\u5c31\u88ab\u653e\u5728 31 \u5206\u800c\u5931\u53bb\u6e96\u5ea6\u3002 \u9019\u6642\u6211\u5011\u53ef\u4ee5 \u5ffd\u7565 \u6216\u8005 \u767c\u5e03\u4fee\u6b63\uff08\u901a\u5e38\u9700\u8981\u8b93\u7a0b\u5e8f\u7d00\u9304\u4e0a\u4e00\u500b\u503c\uff09\u3002
\u6709\u5e7e\u7a2e\u6642\u9593\u7a97\uff1a
0930-0935
\u30010935~0940
\u3001...\u30020930~0937
\u30010936~0943
\u3001...\u30020930~0935
\u4e2d\u6700\u65e9\u7684\u4e8b\u4ef6\u662f 09:31:11
\u6700\u665a\u7684\u662f 09:34:44
\u9019\u6642\u7a97\u683c\u5c31\u662f 09:31:11~09:34:44
\u3002\u6279\u6b21\u8655\u7406\u5c31\u6709\u5728\u8655\u7406\u806f\u5408\u4e86\uff0c\u4f46\u662f\u4e32\u6d41\u8655\u7406\u7684\u8cc7\u6599\u662f\u6301\u7e8c\u4e0d\u65b7\u7684\uff0c\u5728\u9762\u5c0d\u806f\u5408\uff08join\uff09\u6642\u5c31\u9700\u8981\u66f4\u8b39\u614e\u7684\u65b9\u6cd5\u4f86\u8655\u7406\u3002
"},{"location":"feedback/designing-data-intensive-applications/derived-stream/#\u5169\u7d44\u4e3b\u984c","title":"\u5169\u7d44\u4e3b\u984c","text":"\u5ee3\u544a\u9ede\u64ca\u6642\u5dee\uff1a\\(\u9ede\u64ca\u6642\u9593 - \u63a8\u64ad\u6642\u9593\\)
\u60f3\u50cf\u4e00\u4e0b\u5ee3\u544a\u9ede\u64ca\u6642\u5dee\u7684\u8a08\u7b97\uff1a\\(\u9ede\u64ca\u6642\u9593 - \u63a8\u64ad\u6642\u9593\\)\uff0c \u900f\u904e\u4e00\u4e9b session \u6a5f\u5236\uff08\u4f8b\u5982 cookie\uff09\u6211\u5011\u77e5\u9053\u9019\u5169\u500b\u4e8b\u4ef6\u4f86\u6e90\u65bc\u540c\u4e00\u500b\u4f7f\u7528\u8005\u5c31\u53ef\u4ee5\u505a\u9019\u6a23\u7684\u8a08\u7b97\uff0c \u9019\u6642\u8ffd\u8e64\u8005\u5c31\u9700\u8981\u540c\u6642\u8ffd\u8e64\u9019\u5169\u500b\u4e3b\u984c\uff0c\u4e26\u8a18\u9304\u5176\u4e2d\u4e00\u500b\u4e3b\u984c\uff08\u4ee5\u672c\u4f8b\u4f86\u8aaa\u5c31\u662f \u9ede\u64ca\u4e8b\u4ef6\uff09\uff0c \u7576 \u63a8\u64ad\u6642\u9593 \u6709\u548c\u5132\u5b58\u7684 \u9ede\u64ca\u4e8b\u4ef6 \u6709\u76f8\u540c\u7684\u4f7f\u7528\u8005\u7de8\u865f\u5c31\u53ef\u4ee5\u8f38\u51fa\u5ee3\u544a\u9ede\u64ca\u6642\u5dee\u9019\u500b\u4e8b\u4ef6\u3002 \u7576\u7136\u5132\u5b58\u7684\u91cf\u662f\u9700\u8981\u9650\u5236\u7684\uff0c\u4f8b\u5982\u50c5\u8a18\u9304\u4e00\u5c0f\u6642\u5167\u3002
"},{"location":"feedback/designing-data-intensive-applications/derived-stream/#\u52d5\u614b\u8868\u548c\u4e3b\u984c","title":"\u52d5\u614b\u8868\u548c\u4e3b\u984c","text":"\u4f7f\u7528\u8005\u884c\u70ba\uff1a\u4f7f\u7528\u8005\u884c\u70ba \u806f\u5408 \u4f7f\u7528\u8005\u8cc7\u8a0a
\u5728\u6279\u6b21\u8655\u7406\u4e2d\uff0c\u4f7f\u7528\u8005\u8cc7\u8a0a \u53ea\u9700\u8981\u8003\u616e\u958b\u59cb\u8a08\u7b97\u6642\u7684\u90a3\u4e00\u77ac\u9593\u5373\u53ef\uff0c \u56e0\u70ba \u4f7f\u7528\u8005\u884c\u70ba \u7684\u8cc7\u6599\u4e5f\u53ea\u6709\u90a3\u77ac\u9593\u7684\u8cc7\u8a0a\u3002 \u4f46\u662f\u5728\u4e32\u6d41\u8655\u7406\u4e2d \u4f7f\u7528\u8005\u884c\u70ba \u662f\u5373\u6642\u7684\u8cc7\u6599\uff0c\u4f8b\u5982\u65e9\u4e0a \u4f7f\u7528\u8005 123 \u7dbd\u865f\u53eb\u300c\u5c0f\u660e\u300d\uff0c \u5230\u4e86\u4e0b\u5348\u537b\u6539\u6210\u300c\u5927\u660e\u300d\uff0c\u6240\u4ee5\u9019\u500b\u8981\u806f\u5408\u7684\u8868\uff08\u4f7f\u7528\u8005\u8cc7\u8a0a\uff09\u662f \u52d5\u614b\u8868\uff0c\u6703\u96a8\u8457\u6642\u9593\u7570\u52d5\uff0c \u800c\u52d5\u614b\u8868\u7684\u7531\u4f86\u5c31\u662f\u524d\u9762\u63d0\u7684 CDC\u3002
\u9019\u6709\u9ede\u50cf\u662f\u524d\u9762\u7684\u8ffd\u8e64\u5169\u500b\u4e3b\u984c\uff0c\u53ea\u662f\u5176\u4e2d\u4e00\u500b\u4e3b\u984c\u9700\u8981\u6574\u5408\u6210\u300c\u72c0\u614b\u300d
"},{"location":"feedback/designing-data-intensive-applications/derived-stream/#\u52d5\u614b\u8868\u548c\u52d5\u614b\u8868","title":"\u52d5\u614b\u8868\u548c\u52d5\u614b\u8868","text":"Twitter\uff1a\u670b\u53cb\u767c\u6587 \u806f\u5408 \u4f7f\u7528\u8005\u4e3b\u9801
\u5982\u679c\u6bcf\u6b21\u4f7f\u7528\u8005\u5237\u65b0\u4e3b\u9801\u90fd\u900f\u904e\u50b3\u7d71\u95dc\u806f\u5f0f\u8cc7\u6599\u5eab\u53bb\u806f\u5408\u6703\u5927\u5927\u5f71\u97ff\u6548\u80fd\uff0c\u9019\u6642\u5c31\u53ef\u4ee5\u8003\u616e\u4f7f\u7528\u4e32\u6d41\u8655\u7406\u3002 \u505a\u6cd5\u5c31\u6703\u662f\u7576\u670b\u53cb\u767c\u6587\u6642\uff0c\u66f4\u65b0\u6240\u6709\u8ffd\u8e64\u4ed6\u7684\u4eba\u7684\u4e3b\u9801\u8cc7\u8a0a\uff0c\u7136\u5f8c\u518d\u8b93\u5916\u90e8\u61c9\u7528\u7a0b\u5f0f\u53bb\u53d6\u5f97\u9019\u500b\u7a0b\u5e8f\u8f38\u51fa\u7684\u4e3b\u9801\u8cc7\u8a0a\u3002 \u9019\u500b\u7a0b\u5e8f\u5c31\u9700\u8981\u900f\u904e\u5169\u500b\u4e3b\u984c\uff08\u5206\u5225\u662f \u670b\u53cb\u767c\u6587 \u548c \u4f7f\u7528\u8005\u4e3b\u9801\uff09\u7d00\u9304\u5169\u500b\u300c\u72c0\u614b\u300d\u3002
"},{"location":"feedback/designing-data-intensive-applications/derived-stream/#\u806f\u5408\u6642\u8cc7\u6599\u5df2\u7d93\u904e\u671f","title":"\u806f\u5408\u6642\u8cc7\u6599\u5df2\u7d93\u904e\u671f\uff1f","text":"\u6709\u6642\u5019\u5728\u806f\u5408\u7684\u6642\u5019\u8cc7\u6599\u5df2\u7d93\u904e\u671f\uff0c\u4f8b\u5982\u8cfc\u7269\u5546\u57ce\u5728\u7d50\u5e33\u6642\u6703\u52a0\u4e0a\u570b\u5bb6\u7684\u7a05\u7387\uff0c \u800c\u9019\u500b\u7a05\u7387\u662f\u7d50\u5e33\u77ac\u9593\uff08\u6216\u8005\u8aaa\u7576\u5929\uff09\u7684\u7a05\u7387\uff0c\u5982\u679c\u904e\u4e86\u5e7e\u5929\u67d0\u570b\u7684\u7a05\u7387\u66f4\u65b0\u6642\uff0c \u5728\u5f8c\u53f0\u7d71\u8a08\u90a3\u4e00\u5929\u7684\u71df\u6536\u6642\u5c31\u6703\u6709\u932f\uff0c \u6240\u4ee5\u9019\u7a2e\u6703\u8b8a\u52d5\u7684\u503c\uff08slowly changing dimension, SCD\uff09\u5c31\u4e0d\u80fd\u76f4\u63a5\u6539 key-value \u7684\u503c\uff0c \u800c\u662f\u8981\u518d\u6ce8\u5165\u4e00\u500b\u65b0\u7684\u7d00\u9304\u4e26\u8ce6\u4e88\u65b0\u7684\u7de8\u865f\u907f\u514d\u8cc7\u8a0a\u907a\u5931\uff0c\u4f8b\u5982\uff1a
\u6ce8\u5165\u65b0\u7684\u503c\u800c\u975e\u7570\u52d5\u820a\u503c-- \u4e0d\u61c9\u7528 UPDATE\uff1a\n-- UPDATE dim_tax\n-- SET tax=15\n-- WHERE country = 'Taiwan'\nINSERT dim_tax (country, tax, date) VALUES\n('Taiwan', 10, '2000-01-01'),\n('Taiwan', 15, '2009-01-01');\n
"},{"location":"feedback/designing-data-intensive-applications/derived-stream/#\u4e32\u6d41\u8655\u7406\u7684\u5bb9\u932f","title":"\u4e32\u6d41\u8655\u7406\u7684\u5bb9\u932f","text":"\u4e3b\u8981\u6982\u5ff5\u90fd\u662f\u5982\u4f55\u505a\u5230 \u539f\u5b50\u6027\u3002
\u6279\u6b21\u8655\u7406\u7684\u5bb9\u932f\u662f\u900f\u904e\u6bcf\u6b21\u7d50\u679c\u8f38\u51fa\u5230 HDFS \u4e2d\uff0c\u5728\u4e0b\u6b21\u904b\u7b97\u6642\u91cd\u65b0\u62ff\u4e0a\u4e00\u500b\u7a0b\u5e8f\u7684\u7d50\u679c\u5c31\u53ef\u4ee5\u4e86\uff0c \u800c\u4e0d\u9700\u8981\u5168\u90e8\u91cd\u7b97\uff0c\u4f46\u662f\u4e32\u6d41\u8655\u7406\u5462\uff1f
Apache Spark \u4f7f\u7528 Microbatching \u7684\u65b9\u5f0f\uff0c\u4e5f\u5c31\u662f\u628a\u4e32\u6d41\u8655\u7406\u7576\u6210\u5c0f\u7684\u6279\u6b21\u8655\u7406\uff0c \u6240\u4ee5\u6bcf\u6b21\u5c0f\u7684\u6279\u6b21\u8655\u7406\u505a\u5b8c\u90fd\u53ef\u4ee5\u5beb\u4e00\u4e9b\u5099\u4efd\u6a94\u6848\u3002\u4f46\u9019\u4e5f\u4ee3\u8868\u6642\u9593\u7a97\u5929\u751f\u5c31\u53ea\u80fd\u4f7f\u7528 \u7ffb\u8f49\u6642\u9593\u7a97\u3002 \u76f8\u5c0d\u800c\u8a00 Apache Flink \u900f\u904e\u5b9a\u671f\u5efa\u7acb\u6aa2\u67e5\u9ede\u7684\u6a5f\u5236\uff0c\u96d6\u7136\u548c Microbatching \u5f88\u50cf\uff0c \u4f46\u662f\u4e0d\u53d7\u9650\u9078\u64c7\u7684\u6642\u9593\u7a97\u3002
\u9084\u6709\u4e00\u500b\u91cd\u9ede\u662f\u8981\u8b93\u904b\u7b97\u662f\u51aa\u7b49\u7684\uff08idempotent\uff09\uff0c\u4e5f\u5c31\u662f\u6bcf\u6b21\u904b\u7b97\u76f8\u540c\u4e8b\u4ef6\u7684\u7d50\u679c\u90fd\u8981\u4e00\u6a23\uff0c \u9019\u5c31\u4ee3\u8868\u904b\u7b97\u4e2d\u4e0d\u80fd\u593e\u5e36\u6642\u9593\u6216\u96a8\u6a5f\u6027\uff0c\u9019\u6642\u5c31\u8981\u8b93\u4e8b\u4ef6\u4e2d\u593e\u5e36\u9019\u4e9b\u503c\u3002 \u5c31\u7b97\u6c92\u8fa6\u6cd5\u907f\u514d\uff08\u4f8b\u5982 x=x+1
\uff09\u6211\u5011\u4e5f\u53ef\u4ee5\u7d00\u9304\u4e8b\u4ef6\u7684\u7de8\u865f\uff08\u4ee5\u65e5\u8a8c\u578b\u4e2d\u4ecb\u8005\u70ba\u4f8b\u5c31\u662f\u504f\u79fb\u91cf\uff09\u4f86\u907f\u514d\u91cd\u65b0\u904b\u7b97\u3002
\u81f3\u65bc\u91cd\u5efa\u72c0\u614b\u524d\u9762\u5c31\u6709\u63d0\u4e86\uff0c\u9700\u8981\u6709\u6a5f\u5236\u907f\u514d\u5f9e\u958b\u5929\u95e2\u5730\u7684\u6642\u5019\u91cd\u4f86\uff0c \u900f\u904e\u58d3\u7dca\u65e5\u8a8c\u3001 \u5efa\u7acb\u984d\u5916\u5099\u4efd\u4e3b\u984c\u3001 \u5feb\u7167\u9032 HDFS\u3001\u591a\u5e7e\u500b\u505a\u4e00\u6a23\u4e8b\u7684\u8ffd\u8e64\u8005\u7b49\u7b49\u3002
\u8b93\u975e\u51aa\u7b49\u8a08\u7b97\u8b8a\u6210\u51aa\u7b49
\u6709\u4e00\u4e9b\u8ad6\u6587\u5728\u8a0e\u8ad6\u5982\u4f55\u8b93\u975e\u51aa\u7b49\u8a08\u7b97\u8b8a\u6210\u51aa\u7b49\u3002
"},{"location":"feedback/designing-data-intensive-applications/derived-stream/#\u7d50\u8ad6","title":"\u7d50\u8ad6","text":"\u4e8b\u4ef6\u4f86\u6e90\u7684\u6982\u5ff5\u8cab\u7a7f\u672c\u7ae0\u7bc0\uff0c\u900f\u904e\u548c\u4ee5\u5f80\u300c\u7dad\u6301\u72c0\u614b\u300d\u7684\u6982\u5ff5\u4e0d\u540c\uff0c\u4e8b\u4ef6\u4f86\u6e90\u8ce6\u4e88\u8cc7\u6599\u6210\u70ba\u4e00\u7a2e\u300c\u9762\u76f8\u300d\u3002 \u5c0d\u65bc\u4e8b\u4ef6\u7b49\u7b49\u6a5f\u5236\u60f3\u8981\u6df1\u5165\uff0c \u63a8\u85a6\u6b64\u6587\u7ae0\u3002
"},{"location":"feedback/designing-data-intensive-applications/distributed-env/","title":"\u5206\u6563\u5f0f\u7cfb\u7d71\u7684\u74b0\u5883","text":"\u672c\u7ae0\u6703\u8a0e\u8ad6\u7db2\u8def\u3001\u6642\u9418\u3001\u57f7\u884c\u7dd2\u662f\u5982\u4f55\u5f71\u97ff \u5206\u6563\u5f0f\u7cfb\u7d71 \u7684\u3002
HackMD \u5831\u544a
\u6211\u5011\u6709\u63d0\u904e\u5206\u6563\u5f0f\u7684\u7cfb\u7d71\u6703\u8b93\u55ae\u4e00\u8cc7\u6599\u5eab\u4e2d\u4ea4\u6613\u6a5f\u5236\u6240\u80fd\u63d0\u4f9b\u7684\u4e00\u81f4\u6027\u5931\u53bb\u539f\u6709\u7684\u4fdd\u8b49\u3002\u70ba\u4e86\u8b93\u61c9\u7528\u7a0b\u5f0f\u958b\u767c\u4eba\u54e1\u5728\u5206\u6563\u5f0f\u6216\u8005\u55ae\u53f0\u7684\u8cc7\u6599\u5eab\u90fd\u4e0d\u6703\u6709\u592a\u5927\u7684\u4f7f\u7528\u5dee\u7570\uff0c\u6211\u5011\u9700\u8981\u500b\u65b9\u6cd5\u89e3\u6c7a\u9019\u554f\u984c\u3002
\u4e0d\u904e\u5728\u8a0e\u8ad6\u5982\u4f55\u89e3\u6c7a\u9019\u554f\u984c\u4e4b\u524d\uff0c\u6211\u5011\u9700\u8981\u5148\u4f86\u8a0e\u8ad6\u4e00\u4e0b\u5206\u6563\u5f0f\u7684\u74b0\u5883\u9762\u81e8\u4e86\u54ea\u4e9b\u56f0\u5883\uff0c\u4e26\u8b93\u6211\u5011\u5c0d\u65bc\u6574\u9ad4\u74b0\u5883\u6709\u500b\u521d\u6b65\u7684\u6982\u5ff5\u3002
\u55ae\u53f0\uff08HPC\uff09 \u5206\u6563\u5f0f \u5168\u932f or \u6b63\u5e38 \u90e8\u5206\u932f\u4e14\u4e0d\u6b63\u5e38\u904b\u4f5c \u4e0d\u5bb9\u6613\u51fa\u932f \u5bb9\u6613\u51fa\u932f offline online\u2014\u4e0d\u5141\u8a31\u505c\u6a5f \u7dda\u8def\u6e9d\u901a \u7db2\u8def\u6e9d\u901a checkpoint retry\u6bd4\u8f03\u55ae\u53f0\u6a5f\u5668\u548c\u5206\u6563\u5f0f\u7cfb\u7d71\u7684\u5dee\u7570
\u55ae\u53f0\u9ad8\u6548\u80fd\u6a5f\u5668\uff08High-Performance Computer, HPC\uff09\u56e0\u70ba\u767c\u751f\u932f\u8aa4\u6642\u901a\u5e38\u662f\u975e\u5e38\u8907\u96dc\u7684\uff0c\u53ef\u80fd\u727d\u6d89\u5230\u786c\u9ad4\u3001\u97cc\u9ad4\u3001\u4f5c\u696d\u7cfb\u7d71\u7b49\u7b49\uff0c\u70ba\u4e86\u8b93\u767c\u751f\u932f\u8aa4\u6642\u4f7f\u7528\u8005\u4ecd\u7136\u53ef\u4ee5\u57f7\u884c\u5176\u4ed6\u5de5\u4f5c\uff0c\u57f7\u884c\u5de5\u4f5c\u7684\u7d50\u679c\u901a\u5e38\u662f\u8981\u9ebb\u6210\u529f\uff08\u5f97\u5230\u9810\u671f\u7684\u7d50\u679c\uff09\u8981\u9ebb\u5931\u6557\uff08\u57f7\u884c\u7dd2\u76f4\u63a5\u4e2d\u65b7\uff09\u3002
\u60f3\u50cf\u4e00\u4e0b\u4f60\u5728\u64cd\u4f5c\u81ea\u5df1\u7684\u7b46\u96fb\u4e26\u57f7\u884c\u64cd\u4f5c\uff08\u767b\u5165\u8996\u7a97\u3001\u6253\u958b\u7c21\u5831\uff09\u6642\uff0c\u901a\u5e38\u662f\u8981\u9ebb\u986f\u793a\u57f7\u884c\u6210\u529f\u8981\u9ebb\u5c31\u662f\u597d\u50cf\u6c92\u767c\u751f\u904e\u4efb\u4f55\u4e8b\u4e00\u6a23\uff0c\u76f4\u63a5\u4e2d\u65b7\u7a0b\u5e8f\u3002\u9664\u6b64\u4e4b\u5916\uff0c\u7576\u767c\u751f\u56b4\u91cd\u554f\u984c\u6642\u4f5c\u696d\u7cfb\u7d71\u5f88\u53ef\u80fd\u6703\u8b93\u7cfb\u7d71\u91cd\u65b0\u555f\u52d5\uff08\u85cd\u87a2\u5e55\u3001kernal panic \u7b49\u7b49\uff09\uff0c\u800c\u91cd\u65b0\u555f\u52d5\u4e4b\u5f8c\u539f\u672c\u7684\u554f\u984c\u5c31\u795e\u5947\u5730\u6d88\u5931\u4e86\u3002
\u76f8\u5c0d\u4f86\u8aaa\uff0c\u5206\u6563\u5f0f\u7cfb\u7d71\u5c0d\u65bc\u5916\u90e8\u89c0\u5bdf\u8005\u800c\u8a00\uff0c\u7576\u767c\u751f\u554f\u984c\u6642\u6703\u51fa\u73fe\u4e0d\u9810\u671f\u7684\u7d50\u679c\uff0c\u4f8b\u5982\u660e\u660e\u986f\u793a\u57f7\u884c\u5931\u6557\uff0c\u5be6\u969b\u537b\u57f7\u884c\u6210\u529f\u3002\u800c\u4e14\u660e\u660e\u6c92\u505a\u4efb\u4f55\u6539\u8b8a\uff0c\u91cd\u65b0\u57f7\u884c\u7b2c\u4e8c\u6b21\u4e4b\u5f8c\uff0c\u53c8\u5f9e\u5931\u6557\u8b8a\u6210\u6210\u529f\u4e86\u3002\u60f3\u60f3\u6211\u5011\u5728\u7dad\u904b\u6642\u9047\u4e0a\u7684\u90a3\u4e9b\u602a\u4e8b\uff01
\u63a5\u4e0b\u4f86\u6211\u5011\u5c31\u6703\u4f86\u8aaa\u660e\u4e00\u4e0b\uff0c\u5206\u6563\u5f0f\u7cfb\u7d71\u5230\u5e95\u8655\u65bc\u4ec0\u9ebc\u6a23\u7684\u74b0\u5883\u8b93\u4ed6\u9019\u9ebc\u7570\u65bc\u55ae\u53f0\u6a5f\u5668\u3002
\u4e0d\u5bb9\u6613\u51fa\u932f\u901a\u5e38\u4ee3\u8868\u7576\u767c\u751f\u932f\u8aa4\u7684\u6642\u5019\uff0c\u6211\u5011\u5f88\u53ef\u80fd\u662f\u7121\u80fd\u70ba\u529b\u7684\u3002
\u9019\u88e1\u7684\u932f\u8aa4\u90fd\u4e0d\u8003\u616e\u62dc\u5360\u5ead\u932f\u8aa4\u3002
"},{"location":"feedback/designing-data-intensive-applications/distributed-env/#\u7c21\u4ecb","title":"\u7c21\u4ecb","text":"\u5206\u6563\u5f0f\u7cfb\u7d71\u96d6\u7136\u5728\u76f8\u540c\u6210\u672c\u4e0b\u53ef\u4ee5\u8ca0\u8377\u66f4\u591a\u7684\u8acb\u6c42\uff0c\u4e5f\u80fd\u907f\u514d\u904e\u591a\u7684\u4efb\u4e00\u7bc0\u9ede\u7684\u4e2d\u65b7\u5c0e\u81f4\u670d\u52d9\u4e2d\u65b7\u3002
\u6211\u5011\u90fd\u77e5\u9053\u5206\u6563\u5f0f\u7cfb\u7d71\u7684\u74b0\u5883\u6bd4\u55ae\u53f0\u6a5f\u5668\u7684\u74b0\u5883\u66f4\u4e0d\u7a69\u5b9a\uff0c\u5982\u5716\u4e0a\u6240\u793a\uff0c\u4ed6\u4e0d\u50c5\u9700\u8981\u9762\u5c0d\u57f7\u884c\u7dd2\u7684\u554f\u984c\uff0c\u66f4\u9700\u8981\u9762\u5c0d\u7db2\u969b\u7db2\u8def\u548c\u4e0d\u540c\u6642\u9418\u7684\u554f\u984c\u3002
\u9019\u6642\u6211\u5011\u8981\u554f\u554f\u81ea\u5df1\uff0c\u70ba\u4ec0\u9ebc\uff1f\u70ba\u4ec0\u9ebc\u660e\u660e\u5728\u66f4\u4e0d\u7a69\u5b9a\u7684\u74b0\u5883\u4e4b\u4e2d\uff0c\u537b\u80fd\u5efa\u7acb\u66f4\u9ad8\u53ef\u7528\u548c\u66f4\u6709\u6548\u7387\u7684\u7cfb\u7d71\uff1f
\u9019\u662f\u56e0\u70ba\u9019\u4e9b\u5354\u5b9a\u6216\u8005\u670d\u52d9\u90fd\u662f\u5efa\u7acb\u5728\u6bcf\u4e00\u5b50\u5c64\uff08service, in OSI\uff09\u7684\u62bd\u8c61\u7dad\u5ea6\u4e4b\u4e0a\u3002
\u4e00\u500b HTTP \u8acb\u6c42\u662f\u5efa\u7acb\u5728
\u6bcf\u4e00\u5c64\u7684\u62bd\u8c61\u7dad\u5ea6\uff0c\u8b93\u4f60\u5728\u548c\u5b50\u5c64\u6e9d\u901a\u6642\u90fd\u5b8c\u5168\u4e0d\u9700\u8981\u8003\u616e\u66f4\u4e0b\u5c64\u7684\u6a5f\u5236\uff0c\u800c\u6700\u7d42\u62ff\u5230\u7684\u61c9\u7528\u7a0b\u5f0f\u8cc7\u8a0a\u5e7e\u4e4e\u53ef\u4ee5\u8aaa\u662f\u6c92\u6709\u4efb\u4f55\u932f\u8aa4\u7684\u8cc7\u8a0a\u3002\u7576\u7136\uff0c\u4f60\u4e5f\u53ef\u4ee5\u5728\u61c9\u7528\u7a0b\u5f0f\u4e2d\uff0c\u518d\u505a\u4e00\u6b21\u6392\u932f\u7684\u884c\u70ba\uff0c\u4f8b\u5982\u7576\u8d85\u904e\u4e00\u5b9a\u6642\u9593\u6c92\u56de\u61c9\u6642\uff0c\u91cd\u65b0\u8acb\u6c42\u4e00\u6b21\u3002
\u597d\u7528\u8cc7\u6e90
\u5c0d\u65bc\u7db2\u969b\u7db2\u8def\u7684\u904b\u4f5c\uff0c\u5efa\u8b70\u53ef\u4ee5\u4e0a Computer Communication \u9019\u4e00\u7cfb\u5217\u7684\u8ab2\u7a0b\u3002
\u5982\u679c\u662f\u8981\u55ae\u55ae\u4e86\u89e3 OSI \u4e0d\u540c\u5c64\u7684\u610f\u7fa9\u548c\u6e9d\u901a\u7684\u6982\u7565\u57fa\u790e\u4ecb\u7d39\uff0c\u53ef\u4ee5\u4e0a\u7cfb\u5217\u8ab2\u7a0b\u7684\u7b2c\u4e00\u5802\u8ab2 Fundamentals of Network Communication
\u6642\u9418\u548c\u57f7\u884c\u7dd2\u7684\u72c0\u6cc1\u4e5f\u662f\u4e00\u6a23\u7684\uff01\u6211\u5011\u5f85\u6703\u518d\u7d30\u8ac7\uff0c\u5148\u7e7c\u7e8c\u6df1\u5165\u4e00\u4e0b\u7db2\u969b\u7db2\u8def\u7684\u554f\u984c\u3002
"},{"location":"feedback/designing-data-intensive-applications/distributed-env/#\u7db2\u969b\u7db2\u8def","title":"\u7db2\u969b\u7db2\u8def","text":"\u9806\u5e8f\u6703\u4f9d\u5e8f\u5982\u4e0a\uff0c\u4f46\u662f\u7576\u4f86\u5230\u300c\u8981\u600e\u9ebc\u77e5\u9053\u7db2\u8def\u9047\u5230\u54ea\u4e9b\u554f\u984c\u300d\u6642\uff0c\u6703\u767c\u73fe\u7d50\u679c\u5c31\u662f\u6211\u5011\u6c92\u8fa6\u6cd5\u77e5\u9053\u767c\u751f\u4ec0\u9ebc\u4e8b\u3002
\u65e2\u7136\u7121\u6cd5\u77e5\u9053\u7db2\u8def\u9047\u5230\u54ea\u4e9b\u554f\u984c\uff0c\u6211\u5011\u8981\u600e\u9ebc\u5224\u5b9a\u7279\u5b9a\u7bc0\u9ede\u9023\u4e0d\u4e0a\u4e86\uff1f
\u901a\u5e38\u662f\u7528\u903e\u6642\u6a5f\u5236\uff08Timeout\uff09\uff0c\u4f46\u662f\u70ba\u4ec0\u9ebc\u7db2\u8def\u5ef6\u9072\u662f\u7121\u754c\u7684\uff08unbounded\uff09\uff1f
\u6211\u6709\u5beb\u4e86\u7bc7\u7db2\u8def\u600e\u9ebc\u50b3\u548c\u7db2\u8def\u50b3\u4e86\u4ec0\u9ebc\uff0c\u6709\u8208\u8da3\u4e86\u89e3\u66f4\u7d30\u7684\u90fd\u53ef\u4ee5\u67e5\u770b\u3002
"},{"location":"feedback/designing-data-intensive-applications/distributed-env/#\u6709\u54ea\u4e9b\u554f\u984c","title":"\u6709\u54ea\u4e9b\u554f\u984c","text":"\u5169\u500b\u65b9\u5411\uff1a
\u505c\u96fb\u3001\u5730\u5c64\u4e0b\u9677\u3001\u559d\u9189\u7684\u5361\u8eca\u53f8\u6a5f\u7b49\u7b49\u3002
\u5716\u7247\u63d0\u4f9b\u65bc\u6b64\u6587\u7ae0
Coda Hale \u7684\u7d93\u9a57\u8ac7
In my limited experience I\u2019ve dealt with long-lived network partitions in a single data center (DC), PDU failures, switch failures, accidental power cycles of whole racks, whole-DC backbone failures, whole-DC power failures, and a hypoglycemic driver smashing his Ford pickup truck into a DC\u2019s HVAC system. And I\u2019m not even an ops guy.
"},{"location":"feedback/designing-data-intensive-applications/distributed-env/#\u932f\u8aa4\u8a2d\u5b9a","title":"\u932f\u8aa4\u8a2d\u5b9a","text":"\u9019\u500b\u61c9\u8a72\u662f\u4e3b\u6d41\u3002
\u55ae\u7d14\u8edf\u9ad4\u9762\u6709 bug\uff1a
\u5982\u679c\u60f3\u4e86\u89e3\u66f4\u591a\u53ef\u80fd\u6703\u6709\u7684\u554f\u984c\uff0c\u53ef\u4ee5\u67e5\u95b1\uff1a
\u8981\u600e\u9ebc\u77e5\u9053\u7db2\u8def\u9047\u5230\u54ea\u4e9b\u554f\u984c\uff1f
\u7db2\u969b\u7db2\u8def\u7684\u554f\u984c\u767c\u751f\u5728\u4efb\u4f55\u5730\u65b9\uff0c\u904e\u53bb\u6216\u56de\u4f86\u7684\u8def\u4e0a\u3002\u800c\u554f\u984c\u53ef\u80fd\u662f\u5ef6\u9072\u3001\u932f\u8aa4\u3001\u907a\u5931\u3002
\u4f60\u6c92\u6709\u8fa6\u6cd5\u900f\u904e\u55ae\u4e00\u4e00\u500b\u932f\u8aa4\u8acb\u6c42\u77e5\u9053\u662f\u54ea\u7a2e\u539f\u56e0\u9020\u6210\u9019\u500b\u932f\u8aa4\u8acb\u6c42\u3002
\u65e2\u7136\u7121\u6cd5\u77e5\u9053\u7db2\u8def\u9047\u5230\u54ea\u4e9b\u554f\u984c\uff0c\u6211\u5011\u8981\u600e\u9ebc\u5224\u5b9a\u7279\u5b9a\u7bc0\u9ede\u9023\u4e0d\u4e0a\u4e86\uff1f
"},{"location":"feedback/designing-data-intensive-applications/distributed-env/#\u5982\u4f55\u5224\u5b9a\u7bc0\u9ede\u4e0b\u7dda\u4e86","title":"\u5982\u4f55\u5224\u5b9a\u7bc0\u9ede\u4e0b\u7dda\u4e86","text":"\u6709\u4e00\u4e9b\u65b9\u6cd5
FIN
\u6216 RST
\u5c0d\u61c9\u7528\u7a0b\u5f0f\u4f86\u8aaa\uff0c\u80fd\u505a\u7684\u6709\u9650\uff0c\u56e0\u6b64\u901a\u5e38\u90fd\u6703\u4f7f\u7528\u903e\u6642\u6a5f\u5236\uff0c\u4f46\u662f\u9700\u8981\u4f7f\u7528\u903e\u6642\u7684\u539f\u56e0\u662f\u4ec0\u9ebc\uff1f
\u56e0\u70ba\u6211\u5011\u4e0d\u77e5\u9053\u7db2\u8def\u4ed6\u6700\u9577\u6703\u591a\u4e45\u56de\u61c9\u3002\u4f8b\u5982\uff0c\u5982\u679c\u6211\u77e5\u9053\u7db2\u8def\u6700\u4e45\u6700\u4e45\u4e00\u5b9a\u6703\u5728\u5341\u79d2\u5167\u56de\u6211\uff1a\u4ed6\u627e\u4e0d\u5230\u76ee\u6a19\u7bc0\u9ede\uff0c\u9019\u6a23\u6211\u5c31\u4e0d\u9700\u8981\u903e\u6642\u6a5f\u5236\u4e86\u3002
\u9019\u6a23\u53e6\u4e00\u500b\u554f\u984c\u5c31\u4f86\u4e86\uff1a\u70ba\u4ec0\u9ebc\u7db2\u8def\u5ef6\u9072\u662f\u7121\u754c\u7684\uff08unbounded\uff09\uff1f
"},{"location":"feedback/designing-data-intensive-applications/distributed-env/#\u70ba\u4ec0\u9ebc\u7db2\u8def\u5ef6\u9072\u662f\u7121\u754c\u7684","title":"\u70ba\u4ec0\u9ebc\u7db2\u8def\u5ef6\u9072\u662f\u7121\u754c\u7684","text":"\u7db2\u8def\u5c01\u5305\u662f\u9700\u8981\u6392\u968a\u7684\uff0c\u96d9\u5411\u90fd\u9700\u8981\uff0c\u6392\u968a\u539f\u56e0\u53ef\u80fd\u70ba\uff1a
Packet Switching Networks Algorithms \u548c Stop Rate Limiting
\u4f46\u662f\u6709\u6c92\u6709\u6a5f\u5236\u662f\u4e0d\u9700\u8981\u6392\u968a\u7684\uff1f\u60f3\u60f3\u624b\u6a5f\uff0c\u5b83\u5728\u5f88\u4e45\u4ee5\u524d\u5c31\u51fa\u73fe\u4e86\uff0c\u800c\u4e14\u901a\u8a71\u662f\u975e\u5e38\u7a69\u5b9a\u7684\uff0c\u4ed6\u7528\u4e86\u4ec0\u9ebc\u65b9\u5f0f\uff1f
\u9019\u88e1\u4e0d\u6703\u8ac7\u592a\u591a\uff0c\u4f46\u662f\u9019\u500b\u8cc7\u8a0a\u7684\u95dc\u9375\u5b57\u662f\uff1a\u96fb\u8def\u4ea4\u63db\uff08circuit switching\uff09 v.s. \u5c01\u5305\u4ea4\u63db\uff08packet switching\uff09
\u800c\u4e4b\u6240\u4ee5\u7db2\u8def\u6700\u7d42\u9078\u64c7\u5c01\u5305\u4ea4\u63db\uff0c\u662f\u56e0\u70ba\u6210\u672c\u548c\u6548\u76ca\u7684\u6b0a\u8861\u8003\u91cf\u3002
\u82e5\u6709\u8208\u8da3\u53ef\u4ee5\u5c55\u958b\u4f86\u770b\u624b\u6a5f\u901a\u8a71\u6703\u9700\u8981\u5efa\u7acb\u9023\u7dda\uff0c\u4e26\u5728\u9019\u6b21\u9023\u7dda\u4e2d\u4f54\u7528\u56fa\u5b9a\u983b\u5bec\uff0c\u7531\u65bc\u5176\u4ed6\u624b\u6a5f\u4e0d\u6703\u518d\u4f86\u6436\u9019\u983b\u5bec\uff0c\u6240\u4ee5\u53ef\u4ee5\u78ba\u4fdd\u4ed6\u7684\u7a69\u5b9a\u3002
\u624b\u6a5f\u63a1\u7528\u7684\u5c31\u662f\u7dda\u8def\u4ea4\u63db\uff0c\u5373\u4f7f\u6c92\u6709\u8a0a\u865f\u8981\u50b3\u905e\u4e5f\u6703\u4f54\u7528\u983b\u5bec\uff0c\u7576\u9700\u8981\u5927\u91cf\u8cc7\u8a0a\u50b3\u9001\u7684\u6642\u5019\u53c8\u53d7\u9650\u65bc\u4f54\u7528\u7684\u56fa\u5b9a\u983b\u5bec\uff0c\u786c\u9ad4\u4f7f\u7528\u7387\u6574\u9ad4\u8f03\u4f4e\u3002
\u76f8\u5c0d\u800c\u8a00\uff0c\u63a1\u7528\u5c01\u5305\u4ea4\u63db\u7684\u8def\u7531\u5668\u5728\u5de5\u4f5c\u6642\u53ea\u9700\u628a\u5f97\u5230\u7684\u5c01\u5305\u5f80\u5f8c\u9001\uff0c\u4e0d\u7528\u7dad\u6301\u9023\u7dda\u3002\u9664\u4e86\u53ef\u4ee5\u907f\u514d\u8def\u7531\u5668\u88ab\u7279\u5b9a\u9023\u7dda\u5361\u4f4d\u4e4b\u5916\uff0c\u4e5f\u80fd\u8b93\u8def\u7531\u5668\u5c08\u6ce8\u65bc\u8f49\u9001\u5c01\u5305\u800c\u975e\u7dad\u6301\u9023\u7dda\u3002
\u4e0a\u9762\u6bd4\u8f03\u7684\u662f\u884c\u52d5\u901a\u8a0a\u548c\u7bc0\u9ede\u7684\u901a\u8a0a\uff0c\u82e5\u53ea\u8003\u616e\u7bc0\u9ede\u7684\u901a\u8a0a\u5247\u6703\u628a\u5c01\u5305\u4ea4\u63db\u548c\u7dda\u8def\u4ea4\u63db\u5206\u5225\u7a31\u70ba Datagram subnet \u548c Virtual-circut subnet\uff0c\u5176\u6bd4\u8f03\u70ba\uff1a
issue Datagram virtual-circuit circuit setup Not needed required State information Routers do not hold state information about connections Each VC requires router table space per connection Routing Each packet is routed independently Route choosen when VC is set up; all packets follow it Effect of router failures None, except for packets lost during the crash All VCs that passed through the failed router are terminated Quality of services Difficult Easy if enough resources can be allocated in advance for each VC Congestion control Difficult Easy if enough resources can be allocated in advance for each VC Implement Internet Protocal, IP Asynchronous Transfer Mode, ATM\u5c01\u5305\u4ea4\u63db\u548c\u7dda\u8def\u4ea4\u63db\u7684\u6bd4\u8f03
\u5176\u5be6\u9084\u6709\u5f88\u591a\u8b70\u984c\u4f86\u512a\u5316\u4f60\u7684\u7db2\u8def\u901f\u5ea6\u751a\u81f3\u9650\u7e2e\u7db2\u8def\u5ef6\u9072\u6700\u5927\u503c\uff0c\u5305\u62ec\u6700\u4f73\u8def\u5f91\u641c\u5c0b\u3001\u6392\u968a\u7684\u7b56\u7565\u3001\u7de9\u885d\u7684\u7ba1\u7406\u7b49\u7b49\u3002
"},{"location":"feedback/designing-data-intensive-applications/distributed-env/#\u6642\u9418","title":"\u6642\u9418","text":"\u6642\u9418\u7684\u6e96\u78ba\u6027\u5c0d\u5206\u6563\u5f0f\u7cfb\u7d71\u91cd\u8981\u55ce\uff1f
\u5728\u8a0e\u8ad6\u9019\u4e4b\u524d\uff0c\u6211\u5011\u5148\u4f86\u8ac7\u8ac7\u4ec0\u9ebc\u662f\u300c\u6642\u9418\u300d\uff1f
"},{"location":"feedback/designing-data-intensive-applications/distributed-env/#\u5169\u7a2e\u6642\u9418","title":"\u5169\u7a2e\u6642\u9418","text":"\u7576\u6211\u5011\u5728\u8ac7\u8ad6\u6642\u9418\u7684\u6642\u5019\uff0c\u53ef\u80fd\u7684\u6642\u9418\u6709\u5169\u7a2e\u3002
\u7576\u65e5\u6642\u9418\u6703\u56de\u61c9\u7576\u4e0b\u7684\u6642\u9593\uff0c\u4f8b\u5982\u4e0b\u5348\u4e09\u9ede\u56db\u5341\u5206\u5341\u4e94\u79d2\u3002\u76f8\u5c0d\u800c\u8a00\uff0c\u908f\u8f2f\u6642\u9418\u7684\u503c\u4e26\u6c92\u6709\u771f\u6b63\u610f\u7fa9\uff0c\u5176\u50f9\u503c\u5728\u65bc\u5169\u500b\u503c\u9593\u7684\u5dee\u4ee3\u8868\u7684\u662f\u7cbe\u6e96\u7684\u6642\u9593\u5dee\uff0c\u4f8b\u5982\u7b2c\u4e00\u500b\u503c\u548c\u7b2c\u4e8c\u500b\u503c\u5dee\u4e94\u767e\u5948\u79d2\uff08\u6839\u64da\u8a2d\u5b9a\u5dee\u503c\u53ef\u80fd\u70ba 500 \u6216\u8005 0.5\uff09\u3002
\u908f\u8f2f\u6642\u9593\u6e96\u78ba\u6027\u6703\u53d7\u591a\u6838\u5fc3\u5f71\u97ff\uff0c\u6bcf\u500b CPU \u53ef\u80fd\u6709\u4e0d\u540c\u7684\u503c\uff0c\u4f46\u662f\u4f5c\u696d\u7cfb\u7d71\u6703\u76e1\u91cf\u8b93\u4f60\u7684\u57f7\u884c\u7dd2\u6bcf\u6b21\u5b58\u53d6\u90fd\u4f7f\u7528\u540c\u4e00\u500b CPU \u7684\u503c\u3002
"},{"location":"feedback/designing-data-intensive-applications/distributed-env/#\u76f8\u95dc\u7a0b\u5f0f\u78bc","title":"\u76f8\u95dc\u7a0b\u5f0f\u78bc","text":"\u4e0d\u540c\u7a0b\u5f0f\u78bc\u4e5f\u6703\u91dd\u5c0d\u9019\u5169\u7a2e\u6642\u9593\u63d0\u51fa\u4e0d\u540c API\u3002
\u5728\u8b1b\u5230\u7576\u65e5\u6642\u9418\u7684\u6e96\u78ba\u6027\u6642\uff0c\u5c31\u5fc5\u9808\u8ac7\u5230\u4ed6\u5982\u4f55\u6821\u6642\u7684\u3002Network Time Protocol\uff08NTP\uff09\u4fbf\u662f\u7528\u4f86\u6821\u6642\u7684\u53e4\u8001\u5354\u5b9a\u3002
\u6211\u5011\u6703\u5148\u8ac7\u6240\u8b02\u7684\u300c\u6642\u9593\u300d\u662f\u600e\u9ebc\u4f86\u7684\uff0c\u518d\u4f86\u8ac7\u8ac7\u600e\u9ebc\u6821\u6642\u3002
"},{"location":"feedback/designing-data-intensive-applications/distributed-env/#\u7576\u65e5\u6642\u9418\u662f\u600e\u9ebc\u4f86\u7684","title":"\u7576\u65e5\u6642\u9418\u662f\u600e\u9ebc\u4f86\u7684","text":"\u77f3\u82f1\u9707\u76ea\u5668\uff08Crystal Oscillator, CSO, XO\uff09\u662f\u7528\u4f86\u8a08\u7b97\u73fe\u5728\u6642\u9593\u7684\u96fb\u5b50\u5143\u4ef6\uff0c\u4ed6\u662f\u6709\u8aa4\u5dee\u7684\u3002\u6839\u64da Google \u8abf\u67e5\u5167\u90e8\u8cc7\u6599\u4e2d\u5fc3\uff0c\u5e73\u5747\u6bcf\u53f0\u6a5f\u5668\u6703\u6709 200 ppm \u7684\u8aa4\u5dee\uff0c\u4e5f\u5c31\u662f\u6bcf\u5929 17 \u79d2\u7684\u8aa4\u5dee\u3002
\u4f5c\u696d\u7cfb\u7d71\u900f\u904e\u548c CPU \u7684\u6e9d\u901a\u7372\u5f97\u5176\u8cc7\u8a0a\uff1a
# \u8a2d\u5b9a ah \u7684\u503c\u70ba 44, 0x2c\nmov ah 2ch\n# interupt \u81f3 OS\uff0833, 0x21\uff09\uff0cOS \u5f97\u77e5 ah \u7684\u503c\u70ba 44 \u4ee3\u8868\u8981\u53d6\u5f97\u6642\u9593\u8a0a\u606f\nint 21h\n
"},{"location":"feedback/designing-data-intensive-applications/distributed-env/#ntp-\u904b\u4f5c\u539f\u7406","title":"NTP \u904b\u4f5c\u539f\u7406","text":"NTP \u662f\u900f\u904e\u8a08\u7b97\u4f86\u56de\u7684\u6642\u9593\u5dee\u4f86\u5f97\u77e5\u7bc0\u9ede\u548c\u4e2d\u539f\u6a19\u6e96\u6642\u9593\u7684\u5dee\u7570\uff0c\u8981\u6ce8\u610f\u7684\u662f NTP \u5728\u6821\u6642\u7684\u6642\u5019\u662f\u4e00\u6b21\u52d5\u4e00\u9ede\u7136\u5f8c\u9010\u6f38\u9760\u8fd1\u5230\u6b63\u78ba\u6642\u9593\u3002
\u4f46\u662f\u6703\u6709\u4e9b\u554f\u984c\uff1a
\u9664\u4e86 NTP \u4e4b\u5916\uff0c\u9084\u6709\u54ea\u4e9b\u6821\u6642\u65b9\u5f0f\uff1a
\u9019\u4e9b\u7684\u6210\u672c\u90fd\u5f88\u9ad8\uff0c\u4e14\u9700\u8981\u5c08\u696d\u4eba\u54e1\u4f86\u7dad\u904b\u3002
"},{"location":"feedback/designing-data-intensive-applications/distributed-env/#\u7cbe\u6e96\u6642\u9593\u91cd\u8981\u55ce","title":"\u7cbe\u6e96\u6642\u9593\u91cd\u8981\u55ce\uff1f","text":"note: \u6211\u5011\u77e5\u9053\u4e86\u7bc0\u9ede\u6642\u9593\u662f\u4e0d\u6e96\u7684\uff0c\u4f46\u662f\u56de\u5230\u4e00\u958b\u59cb\uff0c\u7cbe\u6e96\u7684\u6642\u9593\u662f\u91cd\u8981\u7684\u55ce\uff1f
\u9664\u4e86\u5716\u4e0a\u770b\u5230\u7684\u554f\u984c\uff0c\u524d\u9762\u6211\u5011\u5728\u8b1b\u8655\u7406\u7af6\u8cfd\u72c0\u6cc1\u7684\u6642\u5019\u6709\u63d0\u5230 \u5feb\u7167\u9694\u96e2\uff0c\u4ed6\u662f\u5229\u7528\u81ea\u52d5\u589e\u52a0\u7684\u7248\u672c\u4f86\u9054\u6210\u4e00\u81f4\u6027\uff0c\u4f46\u5982\u679c\u662f\u5206\u6563\u5f0f\u8cc7\u6599\u5eab\uff0c\u4e0d\u540c\u7684\u7bc0\u9ede\u5c31\u9700\u8981\u4e00\u500b\u5927\u5bb6\u90fd\u6709\u300c\u5171\u8b58\u300d\u7684\u7248\u672c\u7cfb\u7d71\u3002
\u9019\u6642\u7cbe\u6e96\u7684\u6642\u9593\u5c31\u53ef\u4ee5\u88ab\u4f7f\u7528\u4e86\u3002
"},{"location":"feedback/designing-data-intensive-applications/distributed-env/#\u6642\u9593\u4fe1\u4efb\u5340\u9593","title":"\u6642\u9593\u4fe1\u4efb\u5340\u9593","text":"\u8981\u600e\u9ebc\u7372\u5f97\u7cbe\u6e96\u7684\u6642\u9593\uff1f\u5982\u679c\u662f\u900f\u904e\u7db2\u969b\u7db2\u8def\u50b3\u905e\u6642\u9593\uff0c\u8981\u7372\u5f97\u6700\u7cbe\u6e96\u7684\u6642\u9593\u78ba\u5be6\u6709\u5148\u5929\u4e0a\u7684\u96e3\u5ea6\uff0c\u4f46\u662f\u6211\u5011\u53ef\u4ee5\u5728\u63a7\u5236\u7684\u7db2\u8def\u72c0\u6cc1\u4e2d\uff0c\u7d66\u4e88\u4e00\u5b9a\u4fe1\u4efb\u7a0b\u5ea6\u7684\u6642\u9593\u5340\u9593\uff0c\u4f8b\u5982\uff1a
$ curl https://what-time-is-it\n{\n \"confidence\": 95.123,\n \"start\": \"10:00:00.000\",\n \"end\": \"10:00:00.100\"\n}\n
\u9019\u6a23\u7684\u65b9\u5f0f\u7570\u65bc\u5728\u7a0b\u5f0f\u8a9e\u8a00\u4e2d\u8981\u7372\u5f97\u6642\u9593\uff08\u4f8b\u5982 Date.now
\uff09\u90fd\u662f\u76f4\u63a5\u7d66\u4e88\u6642\u9593\u5b9a\u503c\u800c\u4e0d\u6703\u900f\u904e\u4fe1\u4efb\u5340\u9593\u7684\u65b9\u5f0f\u3002
Google Spanner \u5c31\u662f\u4e00\u7a2e\u8cc7\u6599\u53e2\u96c6\u5617\u8a66\u900f\u904e\u89e3\u6c7a\u6642\u9418\u554f\u984c\u4f86\u5f97\u5230\u9ad8\u4e00\u81f4\u6027\u4e14\u9ad8\u53ef\u7528\u6027\u3002
Info
\u53ef\u7121\u9650\u64f4\u5145\u4e26\u5177\u5099\u4e00\u81f4\u6027\u7684\u96f2\u7aef\u539f\u751f\u670d\u52d9\uff0c\u53ef\u7528\u6027\u9ad8\u9054 99.999%\u3002\uff08\\(\\dfrac{60*24*365}{100,000}=5.256\\)\uff0c\u4e5f\u5c31\u662f\u4fdd\u8b49\u6bcf\u5e74\u50c5\u6709\u4e94\u5206\u9418\u7684\u7121\u6cd5\u670d\u52d9\u6642\u9593\uff09
\u4e0b\u9762\u662f\u4e00\u4e9b Google Spanner \u7684\u767d\u76ae\u66f8\uff0c\u90fd\u4e0d\u96e3\u4f46\u662f\u6eff\u6709\u8da3\u7684\uff1a
\u7f3a\u9ede\u7576\u7136\u662f\u53ea\u80fd\u5728 Google \u96f2\u7aef\u5be6\u8e10\uff08\u9700\u8981\u597d\u7684\u8a2d\u5099\u52a0\u4e0a\u7dad\u904b\u4eba\u54e1\uff09\u3002
"},{"location":"feedback/designing-data-intensive-applications/distributed-env/#\u76e3\u63a7\u7cfb\u7d71","title":"\u76e3\u63a7\u7cfb\u7d71","text":"\u597d\u7684\u76e3\u63a7\u7cfb\u7d71\u8b93\u4f60\u5728\u6709\u72c0\u6cc1\u6642\u5373\u6642\u77e5\u9053\u73fe\u5728\u7bc0\u9ede\u7684\u6642\u9593\u72c0\u6cc1\uff0c\u4f46\u662f\u9019\u6771\u897f\u6bd4\u8f03\u5c11\u53bb\u95dc\u6ce8\u3002
\u88ab\u5ef6\u5b95\u4e86\u4ee3\u8868\u8acb\u6c42\u53ef\u80fd\u6703\u903e\u6642\uff0c\u4f46\u662f\u9019\u53c8\u5982\u4f55\uff1f\u61c9\u7528\u7a0b\u5f0f\u5982\u679c\u8003\u616e Timeout \u7684\u6a5f\u5236\u7b49\u7b49\uff0c\u9019\u4e0d\u5c31\u89e3\u6c7a\u4e86\uff1f
"},{"location":"feedback/designing-data-intensive-applications/distributed-env/#\u6703\u9020\u6210\u4ec0\u9ebc\u554f\u984c","title":"\u6703\u9020\u6210\u4ec0\u9ebc\u554f\u984c\uff1f","text":"server.on(\"request\", async (req) => {\n // \u9818\u8896\u624d\u6703\u6709\u9396\n const lock = await getLeaderLock();\n\n if (lock.isMine()) {\n // \u6709\u6642\u9650\u4ee5\u5229\u91cd\u9078\u9818\u8896\n await lock.renewIfNeeded();\n } else if (req.willModifiy()) {\n // \u6536\u5230\u5beb\u5165\u8acb\u6c42\u6642\u8f49\u9001\u7d66\u9818\u8896\n return transferToLeader(req);\n }\n\n return handler(req);\n});\n
\u4e0a\u8ff0\u7684\u7a0b\u5f0f\u78bc\u662f\u7528\u5728_\u55ae\u4e00\u9818\u8896_\u7684\u8cc7\u6599\u53e2\u96c6\uff0c\u7576_\u8ffd\u96a8\u8005_\u6536\u5230\u5beb\u5165\u8acb\u6c42\u6642\u6703\u8f49\u9001\u7d66\u9818\u8896\u3002\u800c\u5224\u5b9a\u662f\u5426\u70ba\u9818\u8896\u5247\u662f\u900f\u904e\u9396\uff0c\u5982\u679c\u8a72\u8cc7\u6599\u5eab\u53ef\u4ee5\u62ff\u5230\u9396\u5247\u4ee3\u8868\u4ed6\u70ba\u9818\u8896\uff0c\u4e26\u4e14\u70ba\u4e86\u8b93\u9818\u8896\u5931\u80fd\u6642\u53ef\u4ee5\u8f49\u79fb\u6b0a\u529b\uff0c\u9019\u500b\u9396\u662f\u6709\u6642\u9650\u7684\u3002
\u72c0\u6cc1\u4f86\u4e86\uff1a\u5982\u679c\u5728\u57f7\u884c handler
\u6642\uff0c\u57f7\u884c\u7dd2\u88ab\u5ef6\u5b95\u8d85\u904e\u6642\u9650\u4e86\uff0c\u6703\u767c\u751f\u4ec0\u9ebc\u4e8b\uff1f
\u9019\u500b\u9818\u8896\u4ecd\u7136\u8a8d\u70ba\u81ea\u5df1\u662f\u9818\u8896\uff0c\u540c\u6642\u8cc7\u6599\u53e2\u96c6\u53c8\u6709\u53e6\u4e00\u500b\u9818\u8896\uff0c\u9019\u5c31\u6703\u9020\u6210\u524d\u9762\u63d0\u7684_\u5fa9\u6b0a_\uff08split brain\uff09\u554f\u984c\u3002
\u7c21\u800c\u8a00\u4e4b\uff0c\u57f7\u884c\u7dd2\u7570\u5e38\u7684\u5ef6\u5b95\u53ef\u80fd\u6703\u8b93\u6240\u6709\u7684\u6aa2\u67e5\u6a5f\u5236\u90fd\u5931\u6548\u3002
"},{"location":"feedback/designing-data-intensive-applications/distributed-env/#\u53ef\u80fd\u6709\u54ea\u4e9b\u539f\u56e0","title":"\u53ef\u80fd\u6709\u54ea\u4e9b\u539f\u56e0","text":"\u524d\u9762\u63d0\u5230\u7684\u53ef\u80fd\u6703\u6709\u7684\u554f\u984c\uff0c\u6211\u5011\u53ef\u4ee5\u900f\u904e Fencing token \u9019\u500b\u6a5f\u5236\u4f86\u907f\u514d\uff0c\u4e0d\u904e\u9019\u88e1\u8981\u6ce8\u610f\u7684\u662f Client \u548c Storage \u90fd\u6703\u9700\u8981\u5b58\u53d6\u9019\u500b\u7ba1\u7406\u9396\u7684\u670d\u52d9\uff0c\u6703\u589e\u52a0\u6574\u9ad4\u67b6\u69cb\u7684\u8907\u96dc\u5ea6\u3002
"},{"location":"feedback/designing-data-intensive-applications/distributed-env/#\u7e3d\u7d50","title":"\u7e3d\u7d50","text":"\u5206\u6563\u5f0f\u7cfb\u7d71\u7684\u4e0d\u7a69\u5b9a\u8b93\u6211\u5011\u9762\u81e8\u4e00\u81f4\u6027\u548c\u53ef\u7528\u6027\u7684\u9078\u64c7\uff0c\u800c\u5176\u89e3\u6c7a\u8fa6\u6cd5\u6709\uff1a
\u600e\u9ebc\u5728 \u5206\u6563\u5f0f\u7cfb\u7d71 \u4e2d\u5efa\u7acb\u5bb9\u932f\u7684\u8cc7\u6599\u5eab\u53e2\u96c6\u3002
HackMD \u5831\u544a
"},{"location":"feedback/designing-data-intensive-applications/distributed-ft/#\u7c21\u4ecb","title":"\u7c21\u4ecb","text":"\u6211\u5011\u5f9e\u8655\u7406\u7af6\u8cfd\u72c0\u6cc1\u6642\u5c31\u63d0\u8d77\uff1a\u5206\u6563\u5f0f\u8cc7\u6599\u5eab\u6c92\u8fa6\u6cd5\u6709\u6548\u5bb9\u932f\u3002 \u9019\u6b21\uff0c\u6211\u5011\u7d42\u65bc\u8981\u4f86\u8ac7\u8ac7\u5206\u6563\u5f0f\u8cc7\u6599\u5eab\u8981\u600e\u9ebc\u5bb9\u932f\u4e86\uff01\u6211\u5011\u5148\u4f86\u8ac7\u8ac7\u55ae\u53f0\u6a5f\u5668\u7684\u5bb9\u932f\u6a5f\u5236\uff0c\u518d\u4f86\u5e36\u51fa\u5206\u6563\u5f0f\u7cfb\u7d71\u7684\u5bb9\u932f\u6a5f\u5236\u3002
\u5c0d\u61c9\u7528\u7a0b\u5f0f\u958b\u767c\u4eba\u54e1\u4f86\u8aaa\uff0c\u4ed6\u53ef\u4ee5\u5f88\u7c21\u55ae\u7684\u5728\u7570\u52d5\u524d\u544a\u77e5\u8cc7\u6599\u5eab\u6211\u8981\u4f7f\u7528\u300c\u4ea4\u6613\u300d\u7684\u6a5f\u5236\uff0c \u4ee5\u6b64\u4f86\u6eff\u8db3\u8cc7\u6599\u7684\u4e00\u81f4\u6027\u548c\u5bb9\u932f\u6027\u3002\u4f46\u662f\u6211\u5011\u524d\u9762\u63d0\u4e86\u300c\u8907\u88fd\u5ef6\u9072\u300d\u5f88\u8f15\u6613\u5c31\u53ef\u4ee5\u7834\u58de\u9019\u4e00\u7cfb\u5217\u7684\u4fdd\u8b49\u3002 \u540c\u6642\uff0c\u6211\u5011\u4e5f\u8981\u554f\u554f\u81ea\u5df1\uff0c \u5982\u4f55\u8b93\u958b\u767c\u4eba\u54e1\u4f7f\u7528\u548c\u300c\u4ea4\u6613\u300d\u76f8\u4f3c\u7684\u65b9\u5f0f\u4f86\u8b93\u958b\u767c\u4eba\u54e1\u4e0d\u9700\u8981\u5728\u5beb\u7a0b\u5f0f\u7684\u6642\u5019\u9084\u8981\u601d\u8003\u5206\u6563\u5f0f\u53e2\u96c6\u6703\u6709\u7684\u908a\u969b\u72c0\u6cc1\uff1f
\u90a3\u5206\u6563\u5f0f\u8cc7\u6599\u5eab\u53c8\u8a72\u505a\u4ec0\u9ebc\uff1f\u5728\u958b\u59cb\u524d\uff0c\u6211\u5011\u5148\u524d\u60c5\u63d0\u8981\u4e00\u4e0b\u3002
"},{"location":"feedback/designing-data-intensive-applications/distributed-ft/#\u74b0\u5883","title":"\u74b0\u5883","text":"\u4e0a\u6b21\u63d0\u4e86\u5206\u6563\u5f0f\u74b0\u5883\u7684\u56f0\u5883\uff0c\u544a\u8a34\u6211\u5011\u54ea\u4e9b\u8def\u662f\u4e0d\u80fd\u8d70\u7684\u3002
\u57f7\u884c\u7dd2\u5ef6\u5b95
\u5373\u4f7f\u55ae\u53f0\u6a5f\u5668\u4e5f\u6703\u53d7\u5230\u57f7\u884c\u5e8f\u7684\u5ef6\u5b95\uff0c\u4f46\u662f\u55ae\u53f0\u6a5f\u5668\u7684\u5ef6\u5b95\u4ee3\u8868\u6240\u6709\u7a0b\u5e8f\u90fd\u6703\u88ab\u5ef6\u5b95\uff0c \u6240\u4ee5\u4ed6\u4e26\u4e0d\u6703\u8a8d\u77e5\u5230\u81ea\u5df1\u88ab\u5ef6\u5b95\u4e86\uff08\u9664\u975e\u6aa2\u67e5\u6642\u9593\uff09\u3002
\u4f46\u662f\u5230\u4e86\u5206\u6563\u5f0f\u7cfb\u7d71\u6642\uff0c\u57f7\u884c\u5e8f\u7684\u5ef6\u5b95\u5c31\u4ee3\u8868\u6709\u4e00\u7bc0\u9ede\u7a81\u7136\u7121\u6cd5\u904b\u4f5c\uff0c\u9019\u6642\u5176\u4ed6\u7bc0\u9ede\u4ecd\u80fd\u6b63\u5e38\u904b\u4f5c\u3002 \u9694\u4e86\u4e09\u5341\u79d2\u4e4b\u5f8c\uff0c\u8a72\u7bc0\u9ede\u6062\u5fa9\u6b63\u5e38\u4e86\uff0c\u9019\u6642\u5c31\u53ef\u80fd\u9020\u6210\u4e0d\u540c\u7bc0\u9ede\u7684\u932f\u8aa4\u8a8d\u77e5\uff0c\u4f8b\u5982\u8907\u6b0a\uff08split brain\uff09\u3002
"},{"location":"feedback/designing-data-intensive-applications/distributed-ft/#\u66ab\u6642\u7684\u932f\u8aa4\u72c0\u614b\u6703\u6210\u70ba\u6c38\u4e45","title":"\u66ab\u6642\u7684\u932f\u8aa4\u72c0\u614b\u6703\u6210\u70ba\u6c38\u4e45","text":"\u6211\u5011\u6709\u63d0\u5230\u5f88\u591a NoSQL \u5ba3\u7a31\u6700\u7d42\u4e00\u81f4\u6027\u662f\u5fc5\u7136\u7684\uff0c\u7136\u800c\u6700\u7d42\u4e00\u81f4\u6027\u96d6\u7136\u53ef\u4ee5\u8b93\u72c0\u614b\u9054\u5230\u6700\u7d42\u7684\u4e00\u81f4\u6027\uff0c \u4f46\u662f\u7576\u4f60\u5f9e\uff08\u66ab\u6642\u7684\uff09\u932f\u8aa4\u72c0\u614b\u4f5c\u51fa\u4efb\u4f55\u5224\u65b7\u4e26\u57f7\u884c\u7570\u52d5\u6642\uff0c\u76f8\u5c0d\u61c9\u7684\u932f\u8aa4\u7570\u52d5\u5c31\u6210\u70ba\u300c\u6b63\u78ba\u7684\u300d\u7570\u52d5\uff0c \u4e26\u6c38\u4e45\u7684\u5f71\u97ff\u8cc7\u6599\u5eab\u7684\u72c0\u614b\u3002
\u4f8b\u5982\u5e33\u865f\u8a3b\u518a\u6642\uff0c\u6aa2\u67e5\u5e33\u865f\u662f\u5426\u8a3b\u518a\u904e\uff1a\u56e0\u70ba\u61c9\u7528\u7a0b\u5f0f\u5f9e\u8cc7\u6599\u5eab\u5f97\u5230\u7684\u8cc7\u8a0a\u662f\u5e33\u865f\u6c92\u88ab\u8a3b\u518a\u904e\uff0c\u6240\u4ee5\u5141\u8a31\u8a3b\u518a\uff0c \u9019\u6642\u5c31\u6703\u8b93\u9019\u7a2e\u66ab\u6642\u7684\u932f\u8aa4\u72c0\u614b\u6210\u70ba\u6c38\u4e45\u7684\u932f\u8aa4\u72c0\u614b\u3002
\u56e0\u7232\u9019\u7570\u65bc\u4e00\u822c\u7684\u958b\u767c\u74b0\u5883\uff08\u901a\u5e38\u6211\u5011\u5b58\u53d6\u7a0b\u5f0f\u78bc\u4e2d\u7684\u8b8a\u6578\u6642\uff0c\u90fd\u671f\u671b\u5f97\u5230\u7684\u503c\u662f\u6700\u65b0\u7684\u72c0\u614b\uff09\uff0c \u6240\u4ee5\u9019\u6703\u589e\u52a0\u61c9\u7528\u7a0b\u5f0f\u958b\u767c\u7684\u8ca0\u64d4\uff0c\u6bcf\u6b64\u8a2d\u8a08\u6642\u90fd\u8981\u4ed4\u7d30\u8a2d\u60f3\u5404\u7a2e\u72c0\u6cc1\u3002\u800c\u4e14\u9019\u7a2e\u6771\u897f\u5f88\u96e3\u5f97\u5230\u4fdd\u8b49\uff1a\u6211\u9019\u6a23\u505a\u5c31\u4e00\u5b9a\u6c92\u932f\u3002
"},{"location":"feedback/designing-data-intensive-applications/distributed-ft/#\u4e00\u81f4\u6027\u548c\u6548\u80fd\u7684\u6b0a\u8861","title":"\u4e00\u81f4\u6027\u548c\u6548\u80fd\u7684\u6b0a\u8861","text":"\u7576\u6211\u5011\u8b93\u5206\u6563\u5f0f\u8cc7\u6599\u5eab\u64c1\u6709\u9ad8\u4e00\u81f4\u6027\uff0c\u5c31\u6703\u72a7\u7272\u9ad8\u53ef\u7528\u6027\u548c\u9ad8\u6548\u80fd\uff0c\u6240\u4ee5\u5728\u958b\u59cb\u8b1b\u5206\u6563\u5f0f\u7684\u5bb9\u932f\u7cfb\u7d71\u524d\uff0c \u9700\u8981\u5148\u6709\u500b\u8a8d\u77e5\uff1a \u6211\u4e0d\u4e00\u5b9a\u9700\u8981\u9ad8\u4e00\u81f4\u6027 \u3002
\u5728\u884d\u751f\u8cc7\u6599\u7684\u7cfb\u5217\u4e2d\uff08\u672c\u7cfb\u5217\u53eb\u505a\u5206\u6563\u5f0f\u7cfb\u7d71\uff09\uff0c\u6211\u5011\u6703\u63d0\u4e00\u500b\u8cc7\u6599\u5eab\u53e2\u96c6\u7684\u67b6\u69cb\uff0c \u9019\u500b\u67b6\u69cb\u5c31\u662f\u8a66\u8457\u9b06\u5f1b\u9019\u500b\u6b0a\u8861\uff1a\u540c\u6642\u64c1\u6709\u9ad8\u4e00\u81f4\u6027\u548c\u9ad8\u53ef\u7528\u6027\u3002
"},{"location":"feedback/designing-data-intensive-applications/distributed-ft/#\u4ec0\u9ebc\u662f\u4e00\u81f4\u6027","title":"\u4ec0\u9ebc\u662f\u4e00\u81f4\u6027\uff1f","text":"\u6700\u5f8c\uff0c\u6211\u5011\u91cd\u65b0\u78ba\u8a8d\u4e00\u4e0b\u540d\u8a5e\u7684\u5b9a\u7fa9\u3002
\u9019\u7ae0\u6703\u8ac7\u4e3b\u8981\u4e09\u4ef6\u4e8b\uff0c \u7dda\u6027\u7cfb\u7d71 \u3001 \u56e0\u679c\u95dc\u4fc2 \u548c \u5171\u8b58 \u3002
"},{"location":"feedback/designing-data-intensive-applications/distributed-ft/#\u7dda\u6027\u7cfb\u7d71","title":"\u7dda\u6027\u7cfb\u7d71","text":"\u8655\u7406\u6a5f\u5236\u5176\u5be6\u5c31\u662f\u8b93\u53e2\u96c6\u57f7\u884c\u5f97\u50cf\u662f\u7dda\u6027\u7cfb\u7d71\uff0c\u800c\u5148\u524d\u7684\u55ae\u4e00\u9818\u8896\u8907\u88fd\u65b9\u5f0f\u5176\u5be6\u5c31\u5f88\u50cf\u9019\u500b\u6771\u897f\u3002
\u554f\u984c\u662f\uff0c\u55ae\u4e00\u9818\u8896\u7684\u9818\u8896\u5f9e\u4f55\u800c\u4f86\uff1f\u5982\u679c\u9818\u8896\u662f\u5f9e\u7ba1\u7406\u8005\uff08\u4eba\u985e\uff09\u6c7a\u5b9a\u7684\u8a71\u5c31\u4ee3\u8868\u9700\u8981 24 \u5c0f\u6642\u8f2a\u73ed\u4f86\u76e3\u63a7\u9019\u500b\u9818\u8896\u7684\u5065\u5eb7\u72c0\u614b\uff0c \u7136\u800c\u6211\u5011\u53ef\u80fd\u50c5\u80fd\u900f\u904e\u7db2\u8def\u7684\u76e3\u63a7\u7cfb\u7d71\u53bb\u6aa2\u67e5\uff0c\u56e0\u70ba\u57fa\u65bc\u7db2\u8def\u9019\u76e3\u63a7\u7cfb\u7d71\u5f88\u53ef\u80fd\u662f\u4e0d\u7a69\u5b9a\u7684\u3002 \u5982\u679c\u6211\u5011\u8981\u81ea\u52d5\u5316\uff0c\u90a3\u5c31\u4e00\u6a23\u9700\u8981\u5171\u8b58\u6f14\u7b97\u6cd5\u3002
\u4ed6\u6709\u4e9b\u53ef\u80fd\u7684\u540d\u8a5e\uff0c\u4f46\u4e3b\u8981\u9084\u662f\u8981\u770b\u6587\u7ae0\u7684\u524d\u5f8c\u6587\uff1a
\u6eff\u8db3\u9d3f\u820d\u7406\u8ad6\u4e26\u4e0d\u4ee3\u8868\u7b26\u5408\u7dda\u6027\u7cfb\u7d71\uff0c\u4ed6\u4e0d\u80fd\u4fdd\u8b49\u53e2\u96c6\u7684\u72c0\u614b\u4e00\u81f4\uff0c\u5c31\u7b97\u4f60\u6eff\u8db3\u6700\u597d\u7684\u72c0\u6cc1\uff1a \u4e09\u53f0\u90fd\u7570\u52d5\u6210\u529f\uff0c\u4f60\u4ecd\u7136\u6703\u767c\u751f\u72c0\u614b\u932f\u8aa4\u7684\u554f\u984c\uff0c\u5982\u5716\u4e0a\u6240\u793a\u3002
"},{"location":"feedback/designing-data-intensive-applications/distributed-ft/#\u8a0e\u8ad6\u7dda\u6027\u7cfb\u7d71","title":"\u8a0e\u8ad6\u7dda\u6027\u7cfb\u7d71","text":"\u7dda\u6027\u7cfb\u7d71\u662f\u9ad8\u6210\u672c\u7684\u800c\u4e14\u5f88\u53ef\u80fd\u662f\u4e0d\u80fd\u5bb9\u932f\u7684\uff08\u60f3\u60f3\u55ae\u4e00\u9818\u8896\uff0c\u7576\u9818\u8896\u5931\u80fd\u6642\u5f88\u591a\u4e8b\u90fd\u53ef\u80fd\u51fa\u932f\uff09\uff0c \u4f46\u662f\u7dda\u6027\u7cfb\u7d71\u537b\u53ef\u4ee5\u5f88\u7c21\u55ae\u7684\u5e6b\u52a9\u6211\u5011\u7406\u89e3\u5171\u8b58\u6f14\u7b97\u6cd5\u8981\u505a\u7684\u4e8b\u3002
"},{"location":"feedback/designing-data-intensive-applications/distributed-ft/#\u56e0\u679c\u95dc\u4fc2","title":"\u56e0\u679c\u95dc\u4fc2","text":"\u56e0\u679c\u95dc\u4fc2\u4e0d\u662f\u7dda\u6027\u7cfb\u7d71\uff0c\u4f46\u662f\u4ed6\u548c\u7dda\u6027\u7cfb\u7d71\u5dee\u5728\u54ea\uff1f\u5728\u56e0\u679c\u95dc\u4fc2\u7684\u7cfb\u7d71\u4e2d\uff0c \u6211\u5011\u4e0d\u6703\u8aaa \u7570\u52d5 A \u65e9\u65bc \u7570\u52d5 B\uff0c\u800c\u662f\u8aaa \u7570\u52d5 B \u4f9d\u8cf4\u65bc \u7570\u52d5 A\u3002 \u9019\u6a23\u7684\u95dc\u4fc2\u7570\u65bc\u7dda\u6027\u7cfb\u7d71\u3002\u6211\u5011\u4f86\u770b\u770b\u4ee5\u4e0b\u4f8b\u5b50\uff1a
\u5728\u55ae\u53f0\u8cc7\u6599\u5eab\u4e2d\u6709\u53ef\u80fd\u767c\u751f\u5716\u4e0a\u53f3\u908a\u7684\u4e26\u884c\u7570\u52d5\u8acb\u6c42\u7684\u6a21\u5f0f\uff0c\u9019\u6642\u5c31\u6703\u51fa\u73fe\u72c0\u6cc1\u3002 \u6211\u5011\u4e4b\u524d\u63d0\u8aaa\u900f\u904e\u5feb\u7167\u9694\u96e2\uff0c\u8ce6\u4e88\u6bcf\u500b\u8acb\u6c42\u7576\u4e0b\u7684\u7248\u672c\uff0c\u8b93\u4ed6\u53ea\u5141\u8a31\u53d6\u5f97\u7576\u4e0b\u7248\u672c\u7684\u8cc7\u8a0a\u3002 \u800c\u9019\u4e2d\u9593\u7684\u8ce6\u4e88\u9806\u5e8f\u5c31\u662f\u5e6b\u52a9\u6211\u5011\u5f97\u5230\u56e0\u679c\u95dc\u4fc2\u3002
\u76f8\u5c0d\u800c\u8a00\uff0c\u7dda\u6027\u7cfb\u7d71\u4e2d\u53f3\u4e0a\u65b9\u7684 Read A
\u5c31\u6703\u51fa\u73fe\u5728\u4e0b\u9762\u7684\u8acb\u6c42\u4e4b\u524d\u3002 \u4e5f\u5c31\u662f\u56e0\u679c\u95dc\u4fc2\u4e26\u4e0d\u6703\u963b\u6b62\u4e26\u884c\u7684\u8acb\u6c42\uff0c\u4f46\u662f\u4ed6\u6703\u5e6b\u52a9\u6211\u5011\u91d0\u6e05\u8acb\u6c42\u548c\u8acb\u6c42\u4e4b\u9593\u7684\u95dc\u4fc2\u4e5f\u56e0\u6b64\u56e0\u679c\u95dc\u4fc2\u4e26\u4e0d\u5f37\u65bc\u7dda\u6027\u95dc\u4fc2\u3002
\u56e0\u679c\u95dc\u4fc2\u6703\u8ce6\u4e88\u5168\u57df\u9806\u5e8f\u55ce\uff1f\u56e0\u679c\u95dc\u4fc2\u4e26\u4e0d\u662f\u5168\u57df\u9806\u5e8f\uff0c \u4ed6\u53ef\u80fd\u5728\u5169\u500b\u7bc0\u9ede\u9593\u5f97\u5230\u4e00\u500b\u4e00\u6a23\u7684\u7248\u672c\uff0c\u4f8b\u5982 \u7bc0\u9ede A \u5f97\u5230\u7248\u672c 123\uff0c\u7bc0\u9ede B \u4e5f\u5f97\u5230\u7248\u672c 123\u3002
\u4f46\u662f\u9019\u4e26\u4e0d\u6703\u9020\u6210\u554f\u984c\uff0c\u56e0\u70ba\u53ea\u6709\u76f8\u4f9d\u7684\u8acb\u6c42\u624d\u6709\u8ce6\u4e88\u9806\u5e8f\u7684\u5fc5\u8981\u3002 \u82e5\u5169\u500b\u8acb\u6c42\u6c92\u6709\u95dc\u4fc2\uff0c\u90a3\u9ebc\u7d66\u4e88\u4ed6\u5011\u76f8\u540c\u7684\u6578\u5b57\u4e5f\u6c92\u4ec0\u9ebc\u95dc\u4fc2\u3002 \u60f3\u60f3\u73fe\u5728\u5357\u6975\u6b63\u6709\u4e00\u9663\u98a8\u5439\u8d77\uff0c\u6211\u5011\u4e0d\u6703\u8aaa\u6211\u5148\u52d5\u5357\u6975\u7684\u98a8\u624d\u52d5\u7684\uff0c\u56e0\u70ba\u9019\u6bd4\u8f03\u6c92\u6709\u610f\u7fa9\u3002
"},{"location":"feedback/designing-data-intensive-applications/distributed-ft/#\u53ef\u4ee5\u5be6\u4f5c\u55ce","title":"\u53ef\u4ee5\u5be6\u4f5c\u55ce","text":"\u7576\u8981\u7570\u52d5\u67d0\u500b\u503c\u6642\uff0c\u6211\u5011\u9700\u8981\u7d00\u9304\uff1a\u662f\u5426\u9019\u500b\u65b0\u7684\u7570\u52d5\u4f86\u81ea\u65bc\u5148\u524d\u7684\u72c0\u614b\u3002 \u6240\u4ee5\u6211\u5011\u9700\u8981\u4e00\u500b\u985e\u4f3c \u7248\u672c\u5411\u91cf \u7684\u6771\u897f\u3002\u7576\u8981\u505a\u7570\u52d5\u6642\uff0c\u61c9\u7528\u7a0b\u5f0f\u9700\u8981\u50b3\u7d66\u8cc7\u6599\u5eab\u7576\u521d\u4ed6\u5728\u8b80\u53d6\u6642\u7684\u7248\u672c\uff0c \u8cc7\u6599\u5eab\u5c31\u53ef\u4ee5\u900f\u904e\u7248\u672c\u78ba\u5b9a\u9019\u500b\u5148\u524d\u8b80\u53d6\u7684\u8cc7\u6599\u662f\u5426\u5df2\u7d93\u904e\u6642\uff08stale\uff09\u3002 \u8209\u4f8b\u4f86\u8aaa\uff0c\u8cc7\u6599\u5eab\u64c1\u6709\u7248\u672c\u4e00\u7684\u72c0\u614b\uff0c\u7576\u88ab\u8acb\u6c42\u8981\u7570\u52d5\u5230\u7248\u672c\u4e09\u6642\uff0c \u9700\u8981\u7b49\u5f85\u7248\u672c\u4e8c\u7684\u7570\u52d5\u88ab\u57f7\u884c\uff08\u985e\u4f3c\u65bc\u5e8f\u5217\u5316\u5feb\u7167\u9694\u96e2\u4e2d\uff0c\u8cc7\u6599\u5eab\u900f\u904e\u4e86\u89e3\u67d0\u4e9b\u7570\u52d5\u8acb\u6c42\u4e4b\u9593\u7684\u56e0\u679c\u95dc\u4fc2\u4f86\u4e26\u514d\u767c\u751f\u8cc7\u6599\u4e0d\u4e00\u81f4\uff09\u3002
\u76ee\u524d\uff0c\u8ce6\u4e88\u9806\u5e8f\u662f\u7dda\u6027\u7cfb\u7d71\u4e4b\u5916\u6700\u5f37\u7684\u4e00\u81f4\u6027\uff0c \u4e26\u4e14\u53ef\u4ee5\u7dad\u6301\u6548\u80fd\u548c\u53ef\u7528\u6027\u3002 \u4f46\u4ecd\u662f\u958b\u653e\u7814\u7a76\uff0c\u4e26\u672a\u6295\u5165\u7dda\u4e0a\u74b0\u5883\u4e14\u6709\u4e9b\u554f\u984c\u9700\u8981\u8655\u7406 \uff08\u4f8b\u5982\u82e5\u8981\u6c42\u6bcf\u500b\u8cc7\u6599\u90fd\u7d00\u9304\u56e0\u679c\u95dc\u4fc2\uff0c\u9019\u500b\u91cf\u6703\u5f88\u5927\u800c\u4e14\u4e0d\u7b26\u5408 OLTP \u7684\u6a21\u5f0f\uff1a\u5927\u91cf\u8b80\u53d6\u5c0f\u91cf\u7570\u52d5\uff09\uff1a
\u4e00\u4e9b\u8cc7\u6599\u5eab\u5617\u8a66\u5728\u6eff\u8db3\u56e0\u679c\u95dc\u4fc2\u6642\uff0c\u7d66\u4e88\u6548\u80fd\u548c\u53ef\u7528\u6027
\u6211\u5011\u770b\u5230\u900f\u904e\u7d00\u9304\u5927\u91cf\u7684\u7248\u672c\u4f86\u4fdd\u6301\u56e0\u679c\u95dc\u4fc2\uff0c\u4f46\u662f\u5be6\u969b\u61c9\u7528\u7a0b\u5f0f\u57fa\u672c\u4e0a\u90fd\u662f\u62c9\u53d6\u5f88\u591a\u8cc7\u6599\u800c\u7570\u52d5\u4e00\u90e8\u4efd\u8cc7\u6599\uff0c\u9019\u6a23\u7248\u672c\u7684\u8cc7\u8a0a\u6703\u5f88\u9f90\u5927\u800c\u5931\u6e96\u3002
\u4e5f\u8a31\u6211\u5011\u53ef\u4ee5\u66ff\u6bcf\u4e00\u500b\u7570\u52d5\u90fd\u52a0\u4e0a\u7248\u672c\uff08\u4e5f\u5c31\u662f\u5168\u57df\u7684\u9806\u5e8f\uff09\uff0c \u53ea\u8981\u6bcf\u500b\u53e2\u96c6\u5167\u7684\u8cc7\u6599\u5eab\u9075\u5faa\u8457\u9019\u500b\u7248\u672c\u53bb\u57f7\u884c\uff0c\u5c31\u80fd\u78ba\u4fdd\u4ed6\u7684\u56e0\u679c\u95dc\u4fc2\u3002 \u9019\u5c31\u597d\u50cf\u55ae\u4e00\u9818\u8896\u7684\u8cc7\u6599\u53e2\u96c6\u90fd\u6703\u9075\u5b88\u9818\u8896\u7684\u7570\u52d5\u9806\u5e8f\uff0c\u6211\u5011\u73fe\u5728\u628a\u9019\u500b\u6982\u5ff5\u5957\u7528\u5728\u591a\u9818\u8896/\u7121\u9818\u8896\u7684\u53e2\u96c6\u4e0a\u3002
"},{"location":"feedback/designing-data-intensive-applications/distributed-ft/#\u6709\u54ea\u4e9b\u932f\u8aa4\u7684\u65b9\u5f0f","title":"\u6709\u54ea\u4e9b\u932f\u8aa4\u7684\u65b9\u5f0f","text":"\u9019\u4e9b\u90fd\u4e0d\u662f\u5168\u57df\u7684\u9806\u5e8f\u3002
"},{"location":"feedback/designing-data-intensive-applications/distributed-ft/#lamport-\u6642\u9593\u6233\u8a18","title":"Lamport \u6642\u9593\u6233\u8a18","text":"Lamport \u5728\u65e9\u671f\u660e\u78ba\u8a02\u7acb\u4e86\u300c\u56e0\u679c\u95dc\u4fc2\u300d\u548c\u300c\u5168\u57df\u9806\u5e8f\u300d\u5728\u5206\u6563\u5f0f\u7cfb\u7d71\u7684\u91cd\u8981\u6027\u3002 \u4ed6\u65bc 1978 \u5e74\u7684 \u8ad6\u6587 \u662f\u76ee\u524d\u5206\u6563\u5f0f\u7cfb\u7d71\u76f8\u95dc\u8ad6\u6587\u4e2d\u6700\u591a\u5f15\u7528\u6b21\u6578\u7684\u8ad6\u6587\u4e4b\u4e00\u3002
\u4e0d\u904e\u9019\u500b\u65b9\u5f0f\u5728\u5efa\u7acb\u4f7f\u7528\u8005\u5e33\u865f\u9019\u500b\u5834\u666f\u4e26\u4e0d\u600e\u9ebc\u9069\u7528\uff08\u4e5f\u5c31\u662f\u8aaa\u4ed6\u4e26\u4e0d\u662f\u5168\u57df\u9806\u5e8f\uff09\u3002
Lamport \u6642\u9593\u6233\u8a18\uff08\u5e8f\u5217\u5316\u6642\u9593\u6233\u8a18\uff09\u904b\u4f5c\u539f\u7406\u662f\u6bcf\u500b\u7bc0\u9ede\u548c\u6bcf\u500b\u8acb\u6c42\u8005\u505a\u4efb\u4f55\u8acb\u6c42\u6642\u90fd\u6703\u651c\u5e36\u6700\u5927\u7684\u8a08\u6578\uff0c \u7576\u7bc0\u9ede\u9047\u5230\u6bd4\u81ea\u5df1\u7684\u8a08\u6578\u9084\u9ad8\u7684\u503c\u6642\uff0c\u5247\u66f4\u65b0\u81ea\u5df1\u7684\u8a08\u6578\uff0c\u4ee5\u6b64\u4f86\u78ba\u4fdd\u5168\u57df\u7684\u9806\u5e8f\u3002
\u4f46\u662f\u5982\u679c\u5169\u500b\u4e26\u884c\u7684\u8acb\u6c42\u5206\u5225\u5728\u4e0d\u540c\u7bc0\u9ede\u505a\u4f7f\u7528\u8005\u7684\u8a3b\u518a\uff08\u5c31\u6703\u50cf c=6
\u6642\u90a3\u500b\u6a23\u5b50\uff09\uff0c \u5404\u7bc0\u9ede\u4e0d\u77e5\u9053\u5c0d\u65b9\u76ee\u524d\u6b63\u5728\u8655\u7406\u4f7f\u7528\u8005\u7684\u8a3b\u518a\uff0c\u6240\u4ee5\u9019\u500b\u5168\u57df\u9806\u5e8f\u4e26\u6c92\u8fa6\u6cd5\u5e6b\u52a9\u6211\u5011\u907f\u514d\u8a3b\u518a\u5169\u500b\u91cd\u8907\u7684\u4f7f\u7528\u8005\u3002
\u8981\u8b93 \u5e8f\u5217\u5316\u6642\u9593\u6233\u8a18 \u6210\u529f\u907f\u514d\u91cd\u8907\uff0c\u5c31\u9700\u8981\u5728\u7bc0\u9ede\u8655\u7406\u7570\u52d5\u8acb\u6c42\u6642\u53bb\u548c\u5176\u4ed6\u7bc0\u9ede\u78ba\u8a8d\uff1a \u6211\u6b63\u8981\u57f7\u884c\u300c\u8a08\u6578\u70ba\u516d\u300d\u7684\u7570\u52d5\uff0c\u8acb\u4f60\u7684\u8a08\u6578\u52a0\u4e00\u3002 \u7576\u5176\u4ed6\u7bc0\u9ede\u518d\u57f7\u884c\u76f8\u540c\u7684\u7570\u52d5\uff08\u4f8b\u5982\u8a3b\u518a\u540c\u4e00\u500b\u4f7f\u7528\u8005\u5e33\u865f\uff09\u6642\uff0c \u56e0\u70ba\u4ed6\u7684\u8a08\u6578\u662f\u4e03\uff0c\u800c\u4ed6\u53c8\u77e5\u9053\u8a08\u6578\u516d\u7684\u7570\u52d5\u6b63\u5728\u57f7\u884c\u76f8\u4f3c\u7684\u8acb\u6c42\uff0c\u65bc\u662f\u4ed6\u5c31\u62d2\u7d55\u57f7\u884c\u8a08\u6578\u4e03\u7684\u7570\u52d5\u3002
\u548c\u7248\u672c\u5411\u91cf\u7684\u5dee\u7570
\u5e8f\u5217\u5316\u6642\u9593\u6233\u8a18\uff08vector clock\uff09\u5bb9\u6613\u548c \u7248\u672c\u5411\u91cf \uff08version vector\uff09\u6df7\u6dc6\u3002
\u6211\u5011\u4e86\u89e3\u56e0\u679c\u95dc\u4fc2\u5728\u5206\u6563\u5f0f\u7cfb\u7d71\u7684\u91cd\u8981\uff0c \u4e5f\u63d0\u4e86\u4e00\u4e9b\u53ef\u4ee5\u5e6b\u52a9\u6211\u5011\u5f97\u5230\u56e0\u679c\u95dc\u4fc2\u7684\u65b9\u5f0f\u800c\u5168\u57df\u9806\u5e8f\u5ee3\u64ad\uff08total order broadcast\uff09\u5c31\u662f\u5176\u4e00\u3002
\u525b\u525b\u6211\u5011\u63d0\u5230\u7bc0\u9ede\u901a\u77e5\u5927\u5bb6\uff1a \u6211\u6b63\u8981\u57f7\u884c\u300c\u8a08\u6578\u70ba\u516d\u300d\u7684\u7570\u52d5\uff0c\u8acb\u4f60\u7684\u8a08\u6578\u52a0\u4e00\u3002 \u9019\u500b\u505a\u6cd5\u5c31\u53eb\u5168\u57df\u9806\u5e8f\u5ee3\u64ad\u3002\u901a\u5e38\u90fd\u662f\u7b2c\u4e09\u65b9\u7ba1\u7406\u9019\u500b\u9806\u5e8f\uff0c\u4f8b\u5982 ZooKeeper\u3001etcd\u3002
ZooKeeper \u4e0d\u662f\u5728\u505a\u5171\u8b58\u6f14\u7b97\u6cd5\u55ce\uff1f
\u6709\u8ad6\u6587\u8b49\u660e\u5168\u57df\u9806\u5e8f\u5ee3\u64ad\u548c\u5171\u8b58\u6f14\u7b97\u6cd5\u662f\u4e00\u6a23\u7684\uff0c \u5f85\u6703\u6211\u5011\u63d0\u5171\u8b58\u6f14\u7b97\u6cd5\u7684\u6642\u5019\u6703\u518d\u56de\u5230\u9019\u4e3b\u984c\u3002
"},{"location":"feedback/designing-data-intensive-applications/distributed-ft/#\u63d0\u4f9b\u54ea\u4e9b\u4fdd\u8b49","title":"\u63d0\u4f9b\u54ea\u4e9b\u4fdd\u8b49","text":"\u5168\u57df\u9806\u5e8f\u5ee3\u64ad\u4fdd\u8b49\u5169\u4ef6\u4e8b\u60c5\uff1a
\u5206\u6563\u5f0f\u8cc7\u6599\u5eab\u5728\u505a\u8907\u88fd\u7684\u6642\u5019\uff0c\u82e5\u80fd\u4fdd\u6301\u76f8\u540c\u9806\u5e8f\u9032\u884c\u8907\u88fd\uff0c\u90a3\u8cc7\u6599\u5eab\u5c07\u64c1\u6709\u6700\u6b63\u78ba\u7684\u8cc7\u6599\uff0c \u6211\u5011\u53ef\u4ee5\u628a\u4ed6\u60f3\u50cf\u6210 append-only \u7684\u65e5\u8a8c\u3002\u4ed6\u4e5f\u80fd\u6eff\u8db3\u6211\u5011\u4e4b\u524d\u63d0\u904e\u5f88\u5f37\u7684\u4e00\u81f4\u6027\uff1a \u5e8f\u5217\u5316\u4e00\u81f4\u6027\uff0c\u56e0\u70ba\u7570\u52d5\u90fd\u88ab\u7167\u8457\u9806\u5e8f\u57f7\u884c\u4e86\u3002
\u9019\u807d\u8d77\u4f86\u5f88\u50cf\u55ae\u4e00\u9818\u8896\u5728\u505a\u7684\u4e8b\u60c5\uff0c\u4f46\u662f\u8b93\u55ae\u4e00\u9818\u8896\u4e0d\u88ab\u63a1\u7528\u7684\u539f\u56e0\u662f\u7576\u8acb\u6c42\u7684\u91cf\u8d85\u904e\u4e00\u53f0\u6a5f\u5668\u80fd\u8ca0\u8377\u7684\u6642\u5019\u8a72\u600e\u9ebc\u8fa6\uff1f \u7576\u9818\u8896\u5931\u80fd\u6642\u8a72\u600e\u9ebc\u8fa6\uff1f
"},{"location":"feedback/designing-data-intensive-applications/distributed-ft/#\u570d\u6b04\u9396","title":"\u570d\u6b04\u9396","text":"\u4ed6\u4e5f\u80fd\u7528\u4f86\u88ab\u5be6\u8e10\u65bc\u570d\u6b04\u9396\uff08fencing token\uff09\u4e2d\u7684\u905e\u589e\u7de8\u865f\u3002
"},{"location":"feedback/designing-data-intensive-applications/distributed-ft/#\u548c\u7dda\u6027\u7cfb\u7d71\u7684\u95dc\u4fc2","title":"\u548c\u7dda\u6027\u7cfb\u7d71\u7684\u95dc\u4fc2","text":"\u7dda\u6027\u7cfb\u7d71\u6bd4\u5168\u57df\u9806\u5e8f\u5ee3\u64ad\u66f4\u70ba\u56b4\u8b39\uff0c\u5168\u57df\u9806\u5e8f\u5ee3\u64ad\u78ba\u4fdd\u7570\u52d5\u57f7\u884c\u7684\u9806\u5e8f\uff0c\u4f46\u537b\u4e0d\u4fdd\u8b49\u7570\u52d5\u9001\u904e\u53bb\u7684\u9806\u5e8f\u3002 \u9664\u6b64\u4e4b\u5916\uff0c\u7dda\u6027\u7cfb\u7d71\u8981\u6c42\u8b80\u53d6\u5230\u7684\u503c\u5c31\u662f\u6700\u65b0\u72c0\u614b\uff0c\u7136\u800c\u5168\u57df\u9806\u5e8f\u5ee3\u64ad\u901a\u5e38\u4e0d\u6703\u9650\u5236\u8b80\u53d6\u7684\u9806\u5e8f\u3002 \u4f46\u662f\u7dda\u6027\u7cfb\u7d71\u662f\u53ef\u4ee5\u5efa\u7acb\u5728\u5168\u57df\u9806\u5e8f\u5ee3\u64ad\u4e4b\u4e0a\u7684\u3002
Info
\u7dda\u6027\u7cfb\u7d71\u6bd4\u5168\u57df\u9806\u5e8f\u5ee3\u64ad\u66f4\u6613\u5be6\u4f5c\u51fa\u4f86\u3002
\u600e\u9ebc\u9054\u6210\uff1f
\u60f3\u50cf\u4e4b\u524d\u6211\u5011\u5728\u8a0e\u8ad6\u7af6\u8cfd\u72c0\u6cc1\u6642\u7684\u4f4f\u9662\u91ab\u751f\u7533\u8acb\u4f11\u5047\uff1a \u4f11\u5047\u7684\u908f\u8f2f\u662f\u5148\u53d6\u5f97\u76ee\u524d\u503c\u73ed\u4f4f\u9662\u91ab\u751f\u4eba\u6578\uff0c\u4e26\u65bc\u61c9\u7528\u7a0b\u5f0f\u4e2d\u6aa2\u67e5\u6578\u91cf\u662f\u5426\u5927\u65bc\u4e00\uff0c\u82e5\u5927\u65bc\u5247\u5141\u8a31\u4f11\u5047\uff0c\u53cd\u4e4b\u5247\u62d2\u7d55\u3002
\u540c\u4e00\u6642\u9593\u5169\u500b\u91ab\u751f\u8acb\u6c42\u4f11\u5047\uff0c\u5c31\u6703\u9020\u6210\u5169\u500b\u91ab\u5e2b\u90fd\u4f11\u5047\u6210\u529f\u3002 \u600e\u9ebc\u4f9d\u4e0a\u8ff0\u4f8b\u5b50\uff08\u60f3\u7c21\u55ae\u4e00\u9ede\u5c31\u662f\u8a3b\u518a\u5e33\u865f\u7684\u4f8b\u5b50\uff09\u5b8c\u6210\u5206\u6563\u5f0f\u7684\u4e00\u81f4\u6027\uff08\u7dda\u6027\u7cfb\u7d71\uff09\uff1f
id1
idn
id1
\u548c idn
\u9593\u6240\u6709\u8acb\u6c42\u90fd\u88ab\u57f7\u884c\uff08id(n-1)
\u5f88\u53ef\u80fd\u6703\u6bd4 idn
\u665a\u4f86\uff09idn
\uff0c\u4e26\u518d\u9644\u52a0\u81f3\u62bd\u8c61\u65e5\u8a8c\u4e2d\u82e5\u8981\u8b93\u8b80\u53d6\u7684\u8acb\u6c42\u9054\u6210\u7dda\u6027\u7cfb\u7d71\uff0c\u53ef\u4ee5\u6709\u5e7e\u7a2e\u505a\u6cd5\uff1a
\u53cd\u904e\u4f86\u8aaa\uff0c\u5168\u57df\u9806\u5e8f\u5ee3\u64ad\u4e5f\u53ef\u4ee5\u900f\u904e\u7dda\u6027\u7cfb\u7d71\u9054\u6210\uff0c\u4e0d\u904e\u9019\u88e1\u5c31\u4e0d\u8d05\u8ff0\u4e86\u3002
"},{"location":"feedback/designing-data-intensive-applications/distributed-ft/#\u56de\u9867\u4e00\u4e0b","title":"\u56de\u9867\u4e00\u4e0b","text":"\u6211\u5011\u518d\u56de\u982d\u6bd4\u8f03\u4e00\u4e0b \u5168\u57df\u9806\u5e8f\u5ee3\u64ad \u548c \u5e8f\u5217\u5316\u6642\u9593\u6233\u8a18\uff0c \u5168\u57df\u9806\u5e8f\u5ee3\u64ad\u4e0b\u7684\u7bc0\u9ede\u6703\u76e3\u807d\u9019\u500b\u5ee3\u64ad\uff0c\u4e26\u78ba\u4fdd\u7167\u8457\u9806\u5e8f\u57f7\u884c\u7570\u52d5\u3002 \u5e8f\u5217\u5316\u6642\u9593\u6233\u8a18\u5c31\u662f\u8b93\u5404\u7bc0\u9ede\u5f97\u5230\u4e00\u500b\u5171\u6709\u7684\u5e8f\u5217\u5316\u6233\u8a18\uff0c\u4f46\u662f\u4e0d\u4fdd\u8b49\u4e26\u884c\u8acb\u6c42\u4e4b\u9593\u7684\u885d\u7a81\uff0c \u56e0\u70ba\u4e26\u884c\u7684\u8acb\u6c42\u4e26\u6c92\u6709\u76f8\u4f9d\u6027\u3002
\u524d\u9762\u6211\u5011\u6709\u63d0\u5168\u57df\u9806\u5e8f\u5ee3\u64ad\u5c31\u662f\u5728\u5be6\u8e10\u5171\u8b58\u6f14\u7b97\u6cd5\uff0c\u6211\u5011\u4e5f\u77e5\u9053\u5168\u57df\u9806\u5e8f\u5ee3\u64ad\u548c\u7dda\u6027\u7cfb\u7d71\u662f\u53ef\u4ee5\u76f8\u4e92\u5be6\u8e10\u51fa\u4f86\u7684\u3002 \u4e5f\u5c31\u662f\u4e00\u500b\u5206\u6563\u5f0f\u7cfb\u7d71\u82e5\u80fd\u5be6\u8e10\u7dda\u6027\u7684 increment-and-get\uff08\u7528\u4f86\u905e\u589e\u300c\u9806\u5e8f\u300d\uff09\uff0c\u5c31\u80fd\u5be6\u8e10\u51fa\u5168\u57df\u9806\u5e8f\u5ee3\u64ad\u3002
\u6709\u8ad6\u6587\u5728\u8b1b\u9019\u4e09\u4ef6\u4e8b\uff1a \u5168\u57df\u9806\u5e8f\u5ee3\u64ad\u3001\u5206\u6563\u5f0f\u7cfb\u7d71\u4e0b\u7dda\u6027 increment-and-get\u3001\u5171\u8b58\u6f14\u7b97\u6cd5\uff0c\u90fd\u662f\u5728\u8655\u7406\u4e00\u6a23\u7684\u4e8b\uff0c \u5982\u679c\u6211\u5011\u6709\u4e00\u500b\u6f14\u7b97\u6cd5\u80fd\u89e3\u6c7a\u4efb\u4e00\u6a23\uff0c\u5c31\u80fd\u4e00\u540c\u89e3\u6c7a\u6240\u6709\u554f\u984c\u3002
"},{"location":"feedback/designing-data-intensive-applications/distributed-ft/#\u5171\u8b58\u6f14\u7b97\u6cd5","title":"\u5171\u8b58\u6f14\u7b97\u6cd5","text":"\u5728\u958b\u59cb\u8b1b\u5171\u8b58\u6f14\u7b97\u6cd5\u4e4b\u524d\uff0c\u6211\u5011\u82b1\u4e86\u5f88\u591a\u6642\u9593\u53bb\u91d0\u6e05\u5f88\u591a\u4e8b\u60c5\u7684\u95dc\u4fc2\uff08\u7dda\u6027\u7cfb\u7d71\u3001\u56e0\u679c\u95dc\u4fc2\u3001\u5168\u57df\u9806\u5e8f\u5ee3\u64ad\uff09 \u548c\u7406\u89e3\u4e00\u4e9b\u80cc\u666f\u77e5\u8b58\uff08\u7db2\u8def\u3001\u6642\u9418\u3001\u8cc7\u6599\u5eab\u7b49\u7b49\uff09\u3002
\u9019\u4e5f\u662f\u70ba\u4ec0\u9ebc\u5171\u8b58\u6f14\u7b97\u6cd5\u9019\u9ebc\u96e3\u7684\u539f\u56e0\uff0c\u4e26\u4e0d\u662f\u56e0\u70ba\u4ed6\u7684\u5be6\u4f5c\u5f88\u56f0\u96e3\uff0c \u800c\u662f\u4ed6\u9700\u8981\u6709\u5f88\u591a\u80cc\u666f\u77e5\u8b58\u624d\u80fd\u8b93\u6211\u5011\u5c0d\u65bc\u4ed6\u8981\u8655\u7406\u7684\u6771\u897f\u6709\u6240\u6982\u5ff5\u3002
\u5171\u8b58\u6f14\u7b97\u6cd5\u7684\u6982\u5ff5\u5f88\u55ae\u7d14\uff1a\u8b93\u5404\u500b\u7bc0\u9ede\u540c\u610f\u67d0\u4e00\u500b\u7d50\u679c\u3002\u4f46\u662f\u82e5\u5c0d\u9019\u4e9b\u80cc\u666f\u77e5\u8b58\u4e0d\u4e86\u89e3\uff0c \u6703\u8b93\u4f60\u932f\u8aa4\u7684\u5be6\u4f5c\uff08coding\uff09\u9019\u4e9b\u6f14\u7b97\u6cd5\u3002
"},{"location":"feedback/designing-data-intensive-applications/distributed-ft/#\u61c9\u7528","title":"\u61c9\u7528","text":"\u5be6\u4f5c\u4e3b\u8981\u6709\u5169\u7a2e\uff0c2PC \u548c\u5171\u8b58\u6f14\u7b97\u6cd5\u3002
"},{"location":"feedback/designing-data-intensive-applications/distributed-ft/#2pc","title":"2PC","text":"2PC \u53ef\u4ee5\u8aaa\u662f\u4e00\u7a2e\u5171\u8b58\u6f14\u7b97\u6cd5\uff0c\u4f46\u662f\u4e00\u822c\u4e0d\u6703\u7a31\u5b83\u70ba\u5171\u8b58\u6f14\u7b97\u6cd5\uff0c \u800c\u76f4\u63a5\u7a31\u5176\u70ba 2PC\uff0c\u56e0\u70ba\u4ed6\u4e0d\u6eff\u8db3\u4e00\u4e9b\u7279\u6027\u3002
\u5927\u90e8\u5206\u95dc\u806f\u5f0f\u8cc7\u6599\u53e2\u96c6\u90fd\u6709\u5be6\u4f5c 2PC\u3002
\u4ee5\u55ae\u4e00\u7bc0\u9ede\u7684\u8cc7\u6599\u5eab\u70ba\u4f8b\uff0c\u7576\u8acb\u6c42\u9032\u4f86\u6642\u4e0d\u6703\u99ac\u4e0a\u7570\u52d5\u8cc7\u6599\uff0c\u800c\u662f\u5148\u5beb\u9032\u65e5\u8a8c\uff08WAL\uff09\u4e2d\uff0c \u4e4b\u5f8c\u518d\u57f7\u884c\u9019\u6b21\u7570\u52d5\u3002\u9019\u9ebc\u505a\u7684\u597d\u8655\u662f\u53ef\u4ee5\u907f\u514d\u57f7\u884c\u5230\u4e00\u534a\u6a5f\u5668\u91cd\u958b\u6a5f\u6642\u53ef\u4ee5\u5fa9\u539f\u3002
\u7576\u72c0\u6cc1\u8b8a\u6210\u5206\u6563\u5f0f\u7cfb\u7d71\u6642\u4e5f\u662f\u4e00\u6a23\u3002\u6709\u4e00\u500b\u5354\u8abf\u8005\uff08coordinator\uff09\u767c\u9001\u7570\u52d5\u8acb\u6c42\uff0c \u78ba\u4fdd\u7570\u52d5\u88ab\u6536\u5230\uff08prepare\uff0cphase 1\uff09\u4e4b\u5f8c\u5c31\u6703\u9032\u884c\u63d0\u4ea4\uff08commit\uff0cphase 2\uff09\u3002
\u6709\u9ede\u50cf\u7d50\u5a5a\u6642\uff0c\u7267\u5e2b\u554f\u592b\u59bb\u662f\u5426\u540c\u610f\u6642\u96d9\u65b9\u56de\u7b54\uff1a\u6211\u9858\u610f\uff08prepare\uff09\uff0c\u4e4b\u5f8c\u7267\u5e2b\u5c31\u6703\u540c\u610f\u9019\u5834\u5a5a\u79ae\uff08commit\uff09\u3002
\u9664\u4e86\u7b2c\u4e8c\u968e\u6bb5\u4e4b\u5916\uff0c\u4efb\u4f55\u4e00\u6bb5\u767c\u751f\u610f\u5916\u6642\uff0c\u5354\u8abf\u8005\u90fd\u53ef\u4ee5\u653e\u68c4\u672c\u6b21\u7570\u52d5\u3002\u4f46\u662f\u7576\u4e8b\u60c5\u9032\u884c\u5230\u7b2c\u4e8c\u968e\u6bb5\u6642 \uff08\u4e5f\u5c31\u662f\u5927\u5bb6\u90fd\u540c\u610f\u9019\u6b21\u7570\u52d5\u6642\uff09\u6240\u6709\u7bc0\u9ede\u90fd\u5fc5\u9808\u5b8c\u6210\u9019\u6b21\u7570\u52d5\uff0c\u4e0d\u8ad6\u767c\u751f\u4ec0\u9ebc\u4e8b\u3002 \u5c0d\u65bc\u7bc0\u9ede\u7684\u89d2\u5ea6\u4f86\u8aaa\uff0c\u7576\u4ed6\u5728\u7b2c\u4e00\u968e\u6bb5\u56de\u7b54\uff1a\u6e96\u5099\u597d\u4e86\u6642\uff0c\u4ed6\u5c31\u5fc5\u9808\u7b49\u5230\u5354\u8abf\u8005\u7684\u56de\u61c9\uff0c\u4e0d\u7ba1\u662f\u653e\u68c4\u6216\u63d0\u4ea4\u3002
\u7e3d\u7d50\u4e00\u4e0b\u505a\u6cd5\uff1a
\u4e0a\u8ff0\u63d0\u5230\u7684\u300c\u6c7a\u5b9a\u300d\u4ee3\u8868\u4e00\u65e6\u5404\u7bc0\u9ede\u6216\u5354\u8abf\u8005\u6c7a\u5b9a\u4e86\u6bcf\u500b\u7d50\u8ad6\uff08\u63d0\u4ea4\u6216\u8005\u653e\u68c4\uff09\u5c31\u4e0d\u80fd\u518d\u66f4\u6539\u3002
"},{"location":"feedback/designing-data-intensive-applications/distributed-ft/#\u7576\u5b83\u767c\u751f\u610f\u5916\u6642","title":"\u7576\u5b83\u767c\u751f\u610f\u5916\u6642","text":"\u7576\u767c\u751f\u610f\u5916\u6642\uff0c\u4e0d\u8ad6\u5354\u8abf\u8005\u6216\u8457\u7bc0\u9ede\u90fd\u5fc5\u9808\u505c\u6b62\u904b\u4f5c\u76f4\u5230\u78ba\u8a8d\u63a5\u6536\u5230\u300c\u653e\u68c4\u300d\u6216\u300c\u63d0\u4ea4\u300d\u3002 \u9019\u5c31\u8b93\u5206\u6563\u5f0f\u7cfb\u7d71\u7684\u9ad8\u53ef\u7528\u6027\u548c\u6548\u80fd\u5b8c\u5168\u5931\u80fd\u3002
3PC \u76f8\u8f03\u65bc 2PC \u5247\u4e0d\u6703\u8b93\u7bc0\u9ede\u6216\u5354\u8abf\u8005\u505c\u6b62\u904b\u4f5c\uff0c\u4f46\u662f\u9700\u8981\u4e00\u500b\u670d\u52d9\u5075\u6e2c\u7cfb\u7d71\uff0c\u544a\u8a34\u5354\u8abf\u8005\u73fe\u5728\u54ea\u500b\u7bc0\u9ede\u505c\u6b62\u904b\u4f5c\u4e86\uff0c \u4f46\u662f\u670d\u52d9\u5075\u6e2c\u7cfb\u7d71\u7121\u6cd5\u5b8c\u7f8e\u5075\u6e2c\u932f\u8aa4\uff08\u4f8b\u5982\u4ed6\u5c0d\u7bc0\u9ede\u7684\u7db2\u8def\u4e2d\u65b7\u4e86\uff0c\u4f46\u662f\u7bc0\u9ede\u548c\u7bc0\u9ede\u4ecd\u53ef\u4ee5\u6b63\u5e38\u6e9d\u901a\uff09\u5c0e\u81f4\u9019\u500b\u7cfb\u7d71\u5931\u9748\uff0c \u6240\u4ee5\u5373\u4f7f 2PC \u6703\u6709\u5354\u8abf\u8005\u5931\u80fd\u6642\u7684\u72c0\u6cc1\u9700\u8981\u8655\u7406\uff0c\u4f46\u4ecd\u6709\u5f88\u591a\u8cc7\u6599\u5eab\u53e2\u96c6\u5be6\u4f5c\u4ed6\u3002
"},{"location":"feedback/designing-data-intensive-applications/distributed-ft/#\u5354\u8abf\u8005\u8b8a\u6210\u8cc7\u6599\u53e2\u96c6\u7684\u4e00\u74b0","title":"\u5354\u8abf\u8005\u8b8a\u6210\u8cc7\u6599\u53e2\u96c6\u7684\u4e00\u74b0","text":"\u5982\u679c\u63d0\u4ea4\u904e\u7a0b\u4e2d\u6709\u4e00\u90e8\u4efd\u8cc7\u6599\u5eab\u6c92\u6709\u6210\u529f\u9001\u51fa\u63d0\u4ea4\u8a0a\u606f\uff0c\u9019\u4e9b\u8cc7\u6599\u5eab\u5c31\u6703\u505c\u6b62\u6240\u6709\u76f8\u95dc\u8cc7\u6599\u7684\u7570\u52d5\uff08\u6216\u751a\u81f3\u6574\u500b\u8cc7\u6599\u5eab\u505c\u6b62\u7570\u52d5\uff09\u3002 \u70ba\u4ec0\u9ebc\u8981\u9019\u9ebc\u786c\uff1f\u9019\u5c31\u662f\u6703\u4e86\u9054\u6210\u4e00\u81f4\u6027\u7684\u72a7\u7272\uff0c\u5982\u679c\u8cc7\u6599\u5eab\u6e96\u5099\u597d\u4e86\u4f46\u5c1a\u672a\u9032\u884c\u63d0\u4ea4\u800c\u5141\u8a31\u5176\u4ed6\u7570\u52d5\u6642\uff0c \u5c31\u6703\u8b93\u591a\u53f0\u8cc7\u6599\u5eab\u7684\u72c0\u614b\u7121\u6cd5\u9054\u6210\u4e00\u81f4\u3002
\u9019\u6642\u5c31\u6703\u767c\u73fe\u5176\u5be6\u5354\u8abf\u8005\u662f\u8cc7\u6599\u5eab\u53e2\u96c6\u7684\u4e00\u74b0\uff0c\u7576\u5354\u8abf\u8005\u4e2d\u6b62\u6642\uff0c\u5c0d\u8cc7\u6599\u5eab\u53e2\u96c6\u4f86\u8aaa\u662f\u4e00\u500b\u5f88\u91cd\u5927\u7684\u50b7\u5bb3\uff0c \u9019\u4e5f\u964d\u4f4e\u4e86\u6211\u5011\u9810\u671f\u7684\u9ad8\u53ef\u7528\u6027\u3002\u4f46\u662f\u5927\u90e8\u5206\u5354\u8abf\u8005\u7684\u5be6\u4f5c\u90fd\u4e0d\u652f\u63f4\u9ad8\u53ef\u7528\u6027\uff08\u591a\u7bc0\u9ede\uff09\u3002
\u6709\u6642\u5354\u8abf\u8005\u6703\u88ab\u5be6\u4f5c\u65bc\u61c9\u7528\u7a0b\u5f0f\u4e2d\uff08\u900f\u904e SDK \u7b49\u7b49\uff09\uff0c\u9019\u4e5f\u8b93\u61c9\u7528\u7a0b\u5f0f\u5f9e\u539f\u672c\u7684\u7121\u72c0\u614b\u8b8a\u6210\u6709\u72c0\u614b\u3002 \u9019\u7a2e\u932f\u8aa4\u8a8d\u77e5\u6703\u9020\u6210\u5f88\u591a\u7dad\u904b\u4e0a\u7684\u610f\u5916\uff0c\u4f8b\u5982\u6c92\u6709\u6b63\u78ba Auto Scaling \u7b49\u7b49\u3002
\u6709\u6642\u5354\u8abf\u8005\u7684\u8cc7\u6599\uff08\u7570\u52d5\u662f\u5426\u63d0\u4ea4\u7684\u7d50\u8ad6\uff09\u907a\u5931\u4e86\uff0c\u6216\u8005\u56e0\u4efb\u4f55\u72c0\u6cc1\u5c0e\u81f4\u5354\u8abf\u8005\u9577\u6642\u9593\u7121\u6cd5\u904b\u4f5c\uff0c \u8cc7\u6599\u5eab\u4e2d\u901a\u5e38\u90fd\u6703\u6709\u500b API\uff08heuristic decision\uff09\u5141\u8a31\u4e0d\u900f\u904e\u5354\u8abf\u8005\u76f4\u63a5\u544a\u77e5\u8cc7\u6599\u5eab\u662f\u5426\u8981\u63d0\u4ea4\uff0c \u9019\u5c31\u662f\u7528\u4f86\u907f\u514d\u9019\u500b\u72c0\u6cc1\u7684\u767c\u751f\u3002\u4f46\u662f\u8cc7\u6599\u5eab\u662f\u5426\u8981\u63d0\u4ea4\u662f\u9700\u8981\u5230\u5404\u500b\u7bc0\u9ede\u78ba\u8a8d\u5404\u81ea\u7684\u904b\u4f5c\u72c0\u614b\u4f86\u6c7a\u5b9a\u7684\uff0c \u4e0d\u9019\u9ebc\u505a\u7684\u597d\u5f88\u53ef\u80fd\u6703\u6709\u4e00\u4e9b\u8cc7\u6599\u5eab\u662f\u300c\u63d0\u4ea4\u300d\u800c\u4e00\u4e9b\u662f\u300c\u653e\u68c4\u300d\u3002
"},{"location":"feedback/designing-data-intensive-applications/distributed-ft/#xa","title":"XA","text":"XA\uff08eXtended Architecture\uff09\u662f\u4e00\u7a2e\u4ecb\u9762\uff0c\u9019\u500b\u4ecb\u9762\u8b93 2PC \u5141\u8a31\u5728\u7570\u8cea\u7684\u61c9\u7528\u7a0b\u5f0f\u9593\u64c1\u6709\u76f8\u540c\u7684\u69cb\u901a\u6a4b\u6a11\u3002 \u4f8b\u5982\u8cc7\u6599\u5eab\u548c\u5bc4\u9001\u90f5\u4ef6\u7684\u61c9\u7528\u7a0b\u5f0f\u3002
"},{"location":"feedback/designing-data-intensive-applications/distributed-ft/#\u5e38\u898b\u7684\u5171\u8b58\u6f14\u7b97\u6cd5","title":"\u5e38\u898b\u7684\u5171\u8b58\u6f14\u7b97\u6cd5","text":"\u4e00\u822c\u6211\u5011\u5728\u63d0\u5171\u8b58\u6f14\u7b97\u6cd5\u6642\uff0c\u90fd\u662f\u6307\u4e0a\u8ff0\u9019\u5e7e\u7a2e\uff0c\u4ed6\u5011\u90fd\u6703\u6709\u4e00\u4e9b\u7279\u6027\u7570\u65bc 2PC\uff0c\u6211\u5011\u5f85\u6703\u5c31\u6703\u8ac7\u3002
\u4e0d\u904e\u9019\u88e1\u8981\u8b1b\u7684\u662f\u9019\u4e9b\u5171\u8b58\u6f14\u7b97\u6cd5\u90fd\u6703\u5f97\u5230\u4e00\u500b\u7d50\u8ad6\uff1a \u591a\u6578\u6c7a\u624d\u80fd\u4fdd\u8b49\u5171\u8b58\u3002\u4e5f\u5c31\u662f\u4e94\u500b\u7bc0\u9ede\u4e2d\uff0c\u9700\u8981\u6709\u4e09\u500b\u7bc0\u9ede\u540c\u4e00\u9019\u500b\u7d50\u679c\u3002
\u6709\u4eba\u505a\u4e86\u4e00\u4e9b\u6bd4\u8f03\u3002
\u4e0d\u50c5\u662f\u5be6\u4f5c\uff0c\u8981\u4f7f\u7528\u9019\u4e9b\u5171\u8b58\u6f14\u7b97\u6cd5\u63d0\u4f9b\u8005\u672c\u8eab\u5c31\u4e0d\u5bb9\u6613\u4e86\uff0c \u6240\u4ee5\u6709\u985e\u4f3c Apache Curator \u900f\u904e\u9ad8\u7dad\u5ea6\u7684\u985e\u5225\u4f86\u5e6b\u52a9\u958b\u767c\u8005\u4f7f\u7528 Apache ZooKeeper\u3002
"},{"location":"feedback/designing-data-intensive-applications/distributed-ft/#\u7279\u6027","title":"\u7279\u6027","text":"\u9019\u4e9b\u5171\u8b58\u6f14\u7b97\u6cd5\u9700\u8981\u6eff\u8db3\u4e0a\u8ff0\u56db\u500b\u689d\u4ef6\u3002
2PC \u5c31\u662f\u6c92\u6709\u5bb9\u932f\u6027\uff0c\u5354\u8abf\u8005\u4e0d\u80fd\u5931\u80fd\u3002\u524d\u9762\u6211\u5011\u8b1b\u7684\u591a\u6578\u6c7a\u4e5f\u4ee3\u8868\u4efb\u4e00\u5171\u8b58\u6f14\u7b97\u6cd5\u7684\u524d\u63d0\u90fd\u662f\u50c5\u6709\u5c11\u65bc\u534a\u6578\u7684\u7bc0\u9ede\u5931\u80fd\u3002
\u4e16\u4ee3\u6578
\u9019\u4e9b\u5171\u8b58\u6f14\u7b97\u6cd5\u5176\u5be6\u5167\u90e8\u6a5f\u5236\u548c 2PC \u5f88\u50cf\uff0c\u4f60\u53ef\u4ee5\u628a\u6bcf\u500b\u7bc0\u9ede\u90fd\u7576\u6210\u5354\u8abf\u8005\uff0c\u4ed6\u5011\u53ef\u4ee5\u63d0\u6848\u3001\u6c7a\u5b9a\u7b49\u7b49\u3002
\u9019\u500b\u6982\u5ff5\u7a31\u70ba \u4e16\u4ee3\u6578\uff08epoch number, ballot number, view number, term number\uff09\uff0c \u4e5f\u5c31\u662f\u78ba\u4fdd\u6bcf\u4e00\u6b21\u5171\u8b58\u90fd\u6709\u4e00\u7d44\uff08\u591a\u500b\uff09\u5354\u8abf\u8005\uff0c\u800c\u5169\u6b21\u5171\u8b58\u7684\u5354\u8abf\u8005\u662f\u7368\u7acb\u6216\u4e0d\u4e00\u6a23\u7684\u3002
"},{"location":"feedback/designing-data-intensive-applications/distributed-ft/#\u61c9\u7528_1","title":"\u61c9\u7528","text":"ZooKeeper/etcd/.. \u548c\u4e00\u822c\u7684\u8cc7\u6599\u5eab\u4e0d\u592a\u4e00\u6a23\uff0c\u4ed6\u5011\u4e0d\u662f\u7528\u4f86\u5132\u5b58\u7dda\u4e0a\u7570\u52d5\u8cc7\u6599\u7684\u8cc7\u6599\u5eab\uff0c\u76f8\u53cd\u7684\uff0c \u901a\u5e38\u4ed6\u5011\u80fd\u5132\u5b58\u7684\u91cf\u90fd\u5f88\u5c0f\uff08\u8db3\u5920\u88ab\u653e\u9032\u8a18\u61b6\u9ad4\u88e1\u9762\uff09\u800c\u9019\u500b\u5c0f\u578b\u8cc7\u6599\u5eab\u53e2\u96c6\u4e5f\u901a\u5e38\u4e0d\u6703\u592a\u591a\u7bc0\u9ede\uff083~5 \u500b\uff09\uff0c \u907f\u514d\u5171\u8b58\u7684\u904e\u7a0b\u592a\u8017\u6642\u3002
\u901a\u5e38\u4ed6\u5132\u5b58\u7684\u8cc7\u6599\u6703\u662f\uff1a \u7bc0\u9ede 10.1.1.23
\u662f\u5206\u5340 7 \u7684\u9818\u8896 \uff0c\u9019\u7a2e\u4e0d\u5bb9\u6613\u8b8a\u52d5\u4f46\u537b\u662f\u5f88\u91cd\u8981\u7684\u8cc7\u6599\u3002 \u6240\u4ee5 ZooKeeper/etcd/.. \u7684\u8cc7\u6599\u53e2\u96c6\u5f88\u53ef\u80fd\u6703\u7528\u4f86\u670d\u52d9\u4e00\u7d44\u6bd4\u4ed6\u5011\u9084\u8981\u5927\u5f88\u591a\u7684\u53e2\u96c6\uff08\u4f8b\u5982\u4e0a\u767e\u500b\u8cc7\u6599\u5eab\u7bc0\u9ede\uff09
\u5168\u57df\u9806\u5e8f\u5ee3\u64ad\u5c31\u662f\u4e00\u76f4\u91cd\u8907\u57f7\u884c\u5171\u8b58\u6f14\u7b97\u6cd5\uff0c\u78ba\u4fdd\u6bcf\u500b\u7bc0\u9ede\u90fd\u80fd\u6309\u7167\u76f8\u540c\u9806\u5e8f\u53bb\u57f7\u884c\u7570\u52d5\u8acb\u6c42\u3002
\u56e0\u70ba\u6bcf\u6b21\u7570\u52d5\u8acb\u6c42\u90fd\u9700\u8981\u540c\u6b65\u78ba\u8a8d\u5404\u7bc0\u9ede\u7684\u6c7a\u5b9a\uff0c\u6240\u4ee5\u6548\u80fd\u4e0d\u6703\u597d\uff0c \u9664\u6b64\u4e4b\u5916\u7576\u7db2\u8def\u4e0d\u7a69\u5b9a\u6642\uff08\u591a\u500b\u8cc7\u6599\u4e2d\u5fc3\u5206\u6563\u5728\u4e0d\u540c\u5834\u57df\uff09\u5c31\u5f88\u5bb9\u6613\u8b93\u6574\u500b\u5171\u8b58\u7fa4\u7d44\u4e00\u76f4\u5728\u91cd\u65b0\u9078\u64c7\u65b0\u7684\u9818\u8896\u3002
\u53e6\u5916\uff0c\u5171\u8b58\u662f\u9700\u8981\u591a\u6578\u6c7a\u7684\uff0c\u7576\u6709\u65b0\u7684\u7bc0\u9ede\u9032\u4f86\u9019\u500b\u7fa4\u7d44\uff0c\u591a\u6578\u6c7a\u7684\u6578\u91cf\u5c31\u6703\u88ab\u6539\u8b8a\u3002 \u9019\u7a2e\u52d5\u614b\u7fa4\u7d44\uff08dynamic membership\uff09\u4e5f\u662f\u4e00\u500b\u9700\u8981\u88ab\u89e3\u6c7a\u7684\u554f\u984c\uff08\u958b\u653e\u7814\u7a76\uff09\u3002
\u6548\u80fd\u554f\u984c\u548c\u56fa\u5b9a\u7bc0\u9ede\u554f\u984c\u8b93\u5f88\u591a\u8cc7\u6599\u53e2\u96c6\u9078\u64c7\u4e0d\u4f7f\u7528\u5171\u8b58\u6f14\u7b97\u6cd5\u3002 \u9664\u6b64\u4e4b\u5916\uff0c\u901a\u5e38\u6211\u5011\u6703\u5728\u8cc7\u6599\u5eab\u53e2\u96c6\u4e4b\u5916\u5efa\u7acb\u4e00\u500b\u5171\u8b58\u6f14\u7b97\u6cd5\u7fa4\u7d44\uff0c \u9019\u7a2e\u7cfb\u7d71\u5916\u7684\u67b6\u69cb\uff0c\u5f88\u53ef\u80fd\u6703\u8b93\u6574\u9ad4\u67b6\u69cb\u8b8a\u5f97\u8907\u96dc\u3002
"},{"location":"feedback/designing-data-intensive-applications/distributed-ft/#\u7e3d\u7d50","title":"\u7e3d\u7d50","text":"\u6211\u5011\u66b8\u89e3\u4e86\u5206\u6563\u5f0f\u8cc7\u6599\u5eab\u9762\u81e8\u4ec0\u9ebc\u72c0\u6cc1\uff08\u7db2\u8def\u5ef6\u9072\u7b49\u7b49\uff09\uff0c\u4e26\u4e14\u9806\u8457\u601d\u8def\u5f80\u4e0b\u8d70\uff0c \u77e5\u9053\u8981\u89e3\u6c7a\u9019\u500b\u554f\u984c\u5176\u5be6\u5c31\u662f\u9700\u8981\u4e00\u500b\u7dda\u6027\u57f7\u884c\u7570\u52d5\u7684\u7cfb\u7d71\u3002
\u96d6\u7136\u7dda\u6027\u7cfb\u7d71\u80fd\u5f88\u597d\u7684\u5e6b\u52a9\u6211\u5011\u7406\u89e3\u8a72\u5982\u4f55\u8655\u7406\u5206\u6563\u5f0f\u7cfb\u7d71\u7684\u5171\u8b58\uff0c\u4f46\u662f\u7dda\u6027\u7cfb\u7d71\u662f\u5f88\u8017\u6210\u672c\u7684\uff0c \u6211\u5011\u9000\u800c\u6c42\u5176\u6b21\uff0c\u6539\u63a1\u8ce6\u4e88\u56e0\u679c\u95dc\u4fc2\u9019\u689d\u8def\u3002
\u8ce6\u4e88\u56e0\u679c\u95dc\u4fc2\u5c31\u662f\u8981\u66ff\u6bcf\u4e00\u7d44\u7570\u52d5\u8acb\u6c42\u52a0\u4e0a\u4ed6\u7684\u4f86\u6e90\uff0c\u5e6b\u52a9\u8cc7\u6599\u5eab\u6c7a\u5b9a\u9019\u500b\u8acb\u6c42\u8a72\u4e0d\u8a72\u57f7\u884c\u3002 \u4ed6\u4e0d\u50cf\u7dda\u6027\u7cfb\u7d71\u8981\u6c42\u6240\u6709\u7de8\u865f\u90fd\u662f\u7368\u7acb\u7684\uff0c\u5c31\u50cf\u7248\u672c\u63a7\u5236\u7684\u5716\u4e00\u6a23\uff0c\u6211\u5011\u53ef\u4ee5\u6709\u591a\u500b\u5206\u652f\u4ee3\u8868\u4e26\u884c\u8acb\u6c42\uff0c \u6700\u5f8c\u518d\u5408\u4f75\u8d77\u4f86\uff0c\u7576\u5408\u4f75\u932f\u8aa4\u6642\uff0c\u5c31\u653e\u68c4\uff08\u6216\u5617\u8a66\u4fee\u5fa9\u4e26\u518d\u767c\u51fa\u4e00\u500b\u5206\u652f\uff09\u90a3\u4e9b\u5c0f\u5206\u652f\u3002
\u6211\u5011\u63d0\u5230\u4e86\u5168\u57df\u9806\u5e8f\u5ee3\u64ad\u7684\u5be6\u8e10\u548c\u5176\u8207\u5171\u8b58\u6f14\u7b97\u6cd5\u7684\u95dc\u4fc2\u3002 \u800c\u5171\u8b58\u6f14\u7b97\u6cd5\u5176\u5be6\u5c31\u662f\u8b93\u5206\u6563\u5f0f\u7cfb\u7d71\u8b8a\u6210\u4e00\u500b \u5e8f\u5217\u5316\u72c0\u614b\u6a5f
\u9019\u7ae0\u5176\u5be6\u7d71\u5408\u4e86\u524d\u9762\u6240\u6709\u5206\u6563\u5f0f\u8cc7\u6599\u5eab\u7684\u5167\u5bb9\u3002 \u6211\u5011\u5148\u524d\u5feb\u901f\u5e36\u904e\u4e86\u8907\u88fd\u5ef6\u9072\u4f46\u6c92\u6709\u63d0\u5230\u7576\u5206\u5340\u8981\u505a\u5168\u57df\u985e\u578b\u7684\u641c\u5c0b\uff08\u4f8b\u5982\u5e73\u5747\u4f7f\u7528\u8005\u5e74\u9f61\uff09\u6642\u4ed6\u53ef\u80fd\u6703\u9047\u5230\u7684\u7af6\u8cfd\u72c0\u6cc1\u3002 \u5728\u9019\u4e00\u7ae0\u90fd\u91cd\u65b0\u6253\u958b\u5e03\u5e55\u8b93\u6211\u5011\u4e00\u8667\u88e1\u9762\u5be6\u969b\u6703\u9762\u81e8\u7684\u72c0\u6cc1\u548c\u89e3\u6cd5\u3002
\u9019\u7ae0\u96d6\u7136\u4e0d\u50cf\u524d\u9762\u5728\u8b1b \u8cc7\u6599\u5009\u5132 \u7684\u6642\u5019\u90a3\u9ebc\u591a\u6578\u5b78\u7684\u611f\u89ba\uff0c \u4f46\u662f\u537b\u662f\u6700\u96e3\u7684\u4e00\u90e8\u4efd\uff0c\u56e0\u70ba\u4f60\u8981\u628a\u524d\u9762\u6240\u5b78\u5230\u7684\u6240\u6709\u6771\u897f\u6574\u5408\u5728\u4e00\u8d77\u53bb\u601d\u8003\u3002\u55ae\u53f0\u8cc7\u6599\u5eab\u4ed6\u9762\u81e8\u4e86\u4ec0\u9ebc\u554f\u984c\uff1f \u4ed6\u900f\u904e\u4ec0\u9ebc\u65b9\u5f0f\u89e3\u6c7a\uff1f \u7576\u89e3\u6c7a\u5b8c\u4e4b\u5f8c\uff0c\u653e\u5728\u5206\u6563\u5f0f\u8cc7\u6599\u8cc7\u6599\u5eab\u6642\u70ba\u4ec0\u9ebc\u6703\u5931\u9748\uff1f \u5206\u6563\u5f0f\u8cc7\u6599\u5eab\u53c8\u900f\u904e\u4ec0\u9ebc\u6a23\u62bd\u8c61\u7a0b\u5ea6\u7684\u89d2\u5ea6\u53bb\u89e3\u6c7a\u9019\u4ef6\u4e8b\uff1f
\u770b\u5b8c\u9019\u6b21\u5206\u4eab\u4e4b\u5f8c\uff0c\u4f60\u6703\u767c\u73fe\u5176\u5be6\u5927\u90e8\u5206\u6587\u5b57\u9084\u662f\u8457\u91cd\u5728\u7406\u89e3\u4e0a\u8ff0\u7684\u554f\u984c\uff0c \u800c\u4e0d\u662f\u5be6\u969b\u5c55\u793a\u6216\u8aaa\u660e\u67d0\u67d0\u6f14\u7b97\u6cd5\u7684\u5be6\u4f5c\u548c\u908f\u8f2f \uff08\u7406\u89e3\u5b8c\u67d0\u67d0\u6f14\u7b97\u6cd5\u7684\u5be6\u4f5c\u4e4b\u5f8c\uff0c\u9694\u5e7e\u500b\u6708\u4e4b\u5f8c\u5f88\u53ef\u80fd\u5c31\u6703\u5fd8\u8a18\u5be6\u969b\u5167\u5bb9\uff0c \u7562\u7adf\u4f60\u9700\u8981\u53cd\u8986\u7406\u89e3\u7dad\u904b\u9019\u4e9b\u5be6\u4f5c\u7684\u6a5f\u6703\u771f\u7684\u5f88\u5c11\uff0c\u5728\u9650\u5236\u5b78\u7fd2\u6642\u9593\u7684\u60c5\u6cc1\u4e0b\uff0c \u6211\u66f4\u50be\u5411\u65bc\u7406\u89e3\u5728\u89e3\u6c7a\u554f\u984c\u6642\u5176\u80cc\u5f8c\u7684\u62bd\u8c61\u5c64\u9762\uff09\uff0c \u56e0\u70ba\u7576\u4f60\u770b\u5b8c\u5be6\u4f5c\u4e4b\u5f8c\uff0c\u4f60\u53ef\u80fd\u6703\u6709\u500b\u7d50\u8ad6\uff1a\u5594\u5594\u5594\uff0c\u5171\u8b58\u6f14\u7b97\u6cd5\u662f\u8b93\u4e00\u7fa4\u7bc0\u9ede\u5f97\u5230\u4e00\u500b\u5171\u8b58\uff0c\u90a3\u7136\u5f8c\u5462\uff1f \uff0c\u6211\u500b\u4eba\u8a8d\u70ba\u6bd4\u8f03\u96e3\u7684\u90e8\u5206\u662f\u53bb\u7406\u89e3\u6240\u8b02\u300c\u56e0\u679c\u95dc\u4fc2\u300d\u5728\u5206\u6563\u5f0f\u7cfb\u7d71\u7684\u91cd\u8981\u6027\uff0c \u4e5f\u5c31\u662f\u5168\u57df\u9806\u5e8f\u5ee3\u64ad\u5982\u4f55\u5e6b\u52a9\u6211\u5011\u907f\u514d\u5206\u6563\u5f0f\u7cfb\u7d71\u7684\u908a\u969b\u72c0\u6cc1\u3002
\u4e00\u53e5\u8a71\u6982\u62ec\u9019\u7ae0
\u5206\u6563\u5f0f\u7cfb\u7d71\u7684\u5bb9\u932f\u5c31\u662f\u900f\u904e\u5168\u57df\u9806\u5e8f\u4f86\u7dad\u6301\u56e0\u679c\u95dc\u4fc2\u3002
"},{"location":"feedback/designing-data-intensive-applications/distributed-partition/","title":"\u5206\u6563\u5f0f\u8cc7\u6599\u5eab\u2014\u5206\u5340","text":"\u5206\u6563\u8cc7\u6599\u548c\u904b\u7b97\uff0c\u4f7f\u5176\u5e7e\u4e4e\u7121\u9650\u5236\u5730\u6210\u9577\u3002
HackMD \u5831\u544a\u6587\u672c
\u6211\u5011\u524d\u9762\u4ecb\u7d39\u904e\u5206\u6563\u5f0f\u8cc7\u6599\u5eab\u7684\u8907\u88fd\uff0c\u4e5f\u63d0\u904e\u8907\u88fd\u548c\u5206\u5340\u5169\u8005\u662f\u53ef\u4ee5\u7368\u7acb\u5340\u5206\u7684\u3002 \u4e00\u822c\u4f86\u8aaa\u4efb\u4e00\u8907\u88fd\u7684\u6f14\u7b97\u6cd5\u53ef\u4ee5\u642d\u914d\u4efb\u4e00\u5206\u5340\u7684\u6f14\u7b97\u6cd5\u3002
\u5206\u5340\u5e6b\u52a9\u6211\u5011\u628a\u5f88\u5927\u7684\u8cc7\u6599\u5eab\u62c6\u6210\u4e00\u500b\u4e00\u500b\u5c0f\u5c0f\u7684\u8cc7\u6599\u5eab\u3002\u4f60\u53ef\u4ee5\u628a\u9019\u4e9b\u5c0f\u8cc7\u6599\u5eab\u7576\u6210\u7368\u7acb\u7684\u8cc7\u6599\u5eab\u3002 \u7576\u6709\u91dd\u5c0d\u4ed6\u7684\u8cc7\u6599\u7684\u641c\u5c0b\u9032\u4f86\u4e86\uff0c\u4ed6\u5c31\u53ef\u4ee5\u7167\u8457\u55ae\u4e00\u8cc7\u6599\u5eab\u7684\u904b\u4f5c\u65b9\u5f0f\u57f7\u884c\u3002
\u8907\u88fd\u662f\u628a\u8cc7\u6599\u5eab\u5f9e\u4e00\u500b\u589e\u52a0\u5230\u591a\u500b\uff0c\u4f46\u662f\u5206\u5340\u662f\u628a\u8cc7\u6599\u5eab\u5f9e\u4e00\u500b\u62c6\u6210\u591a\u500b\u3002
\u9019\u5169\u500b\u6771\u897f\u8981\u6ce8\u610f\u7684\u6771\u897f\u90fd\u4e0d\u592a\u4e00\u6a23\uff0c\u8907\u88fd\u8981\u6ce8\u610f\u7684\u662f\u8981\u600e\u9ebc\u7dad\u6301\u5169\u500b\u8cc7\u6599\u5eab\u7684\u8cc7\u6599\u4e00\u81f4\u6027\uff0c\u4e26\u8655\u7406\u591a\u500b\u8cc7\u6599\u5eab\u4e0d\u540c\u5beb\u5165\u7684\u885d\u7a81\u3002 \u53cd\u4e4b\uff0c\u5206\u5340\u5247\u662f\u6ce8\u91cd\u5169\u500b\u8cc7\u6599\u5eab\u7684\u4e92\u52d5\u3002\u8cc7\u6599\u8981\u6d41\u9032\u54ea\u500b\u8cc7\u6599\u5eab\uff1f\u8981\u600e\u9ebc\u57f7\u884c\u5206\u6790\u985e\u578b\uff08OLAP\uff09\u7684\u641c\u5c0b\uff1f \u5728\u6b0a\u8861\u4e0a\uff0c\u8907\u88fd\u9700\u8981\u8003\u616e\u4e00\u81f4\u6027\u548c\u6548\u80fd\u7684\u6bd4\u4f8b\uff1b\u5206\u5340\u5247\u9700\u8981\u8003\u616e\u4e0d\u540c\u5340\u7684\u5e73\u8861\u548c\u8cc7\u6599\u7684\u9023\u7e8c\u6027\u3002
\u4ec0\u9ebc\u662f\u4e0d\u540c\u5340\u7684\u5e73\u8861\u548c\u8cc7\u6599\u7684\u9023\u7e8c\u6027\uff1f
\u8209\u4f8b\u4f86\u8aaa\uff0c\u8cfc\u7269\u8a18\u9304\u7684\u8cc7\u6599\u96a8\u6a5f\u5206\u4f48\u53ef\u4ee5\u8b93\u4ed6\u5f88\u9ad8\u5e73\u8861\u6027\uff0c\u4f46\u662f\u7576\u8981\u53d6\u5f97\u524d\u5341\u7b46\u7d00\u9304\u6642\u5c31\u53ef\u80fd\u9700\u8981\u904d\u6b77\u8cc7\u6599\u5eab\uff1b \u53cd\u4e4b\u7167\u9806\u5e8f\u5132\u5b58\u53ef\u4ee5\u8b93\u8cc7\u6599\u64c1\u6709\u9ad8\u9023\u7e8c\u6027\u3002\u4f46\u662f\u56e0\u70ba\u4f7f\u7528\u8005\u5728\u641c\u5c0b\u8cfc\u7269\u8a18\u9304\u6642\u5e7e\u4e4e\u53ea\u6703\u627e\u6700\u8fd1\u7684\u8cc7\u6599\uff0c \u6240\u4ee5\u6703\u8b93\u5927\u90e8\u5206\u7684\u641c\u5c0b\u843d\u5728\u64c1\u6709\u8f03\u65b0\u8cc7\u6599\u7684\u8cc7\u6599\u5eab\u3002 \u7d50\u8ad6\uff1a\u9ad8\u5e73\u8861\u53ef\u4ee5\u8b93\u6bcf\u53f0\u8cc7\u6599\u5eab\u90fd\u6709\u4e8b\u505a\uff1b\u9ad8\u9023\u7e8c\u53ef\u4ee5\u8b93\u641c\u5c0b\u8b8a\u55ae\u7d14
\u8907\u88fd\u7684\u8d95\u5de5\u548c\u5206\u5340\u7684\u5e73\u8861\u90fd\u662f\u7528\u5728\u7576\u8cc7\u6599\u5eab\u91cd\u555f\u6216\u65b0\u589e\u8cc7\u6599\u5eab\u6642\u7684\u884c\u70ba\u3002
\u5206\u5340\u5f9e 1980 \u5e74\u4ee3\u5c31\u958b\u59cb\u767c\u5c55\uff0c\u76f4\u5230 2010 \u5e74\u5de6\u53f3 NoSQL \u7684\u610f\u8b58\u5d1b\u8d77\uff0c \u958b\u59cb\u8003\u616e\u66f4\u6613\u64f4\u589e\u7684\u67b6\u69cb\uff0c\u53c8\u518d\u4e00\u6b21\u8b93\u5927\u5bb6\u95dc\u6ce8\u9019\u4e3b\u984c\u3002 \u9664\u4e86 NoSQL\uff0cHadoop \u67b6\u69cb\u7684 \u8cc7\u6599\u5009\u5132 \u4e5f\u9700\u8981\u6709\u5206\u5340\u7684\u6982\u5ff5\uff0c \u9019\u88e1\u63d0\u5230\u7684\u6771\u897f\u5230\u6642\u5019\u90fd\u6703\u5728\u4ecb\u7d39 Hadoop \u7684\u6642\u5019\u7528\u5230\u3002
\u5206\u5340\u7684\u6982\u5ff5\u4e0d\u7ba1\u662f OLTP \u6216\u8005 OLAP \u90fd\u6703\u9700\u8981\u7528\u5230\u3002
\u5206\u5340\u7684\u82f1\u6587\u540d\u8a5e\u5f88\u591a\uff1apartition, shard, region, tablet, vnode, vBucket
"},{"location":"feedback/designing-data-intensive-applications/distributed-partition/#\u4e09\u5927\u554f\u984c","title":"\u4e09\u5927\u554f\u984c","text":"\u4e0b\u9762\u4f9d\u6b21\u8a0e\u8ad6\u3002
"},{"location":"feedback/designing-data-intensive-applications/distributed-partition/#\u5206\u5340","title":"\u5206\u5340","text":"\u7576\u8cc7\u6599\u9032\u4f86\uff0c\u6211\u8981\u8b93\u4ed6\u53bb\u54ea\u4e00\u5340\uff1f
"},{"location":"feedback/designing-data-intensive-applications/distributed-partition/#\u8209\u500b\u4f8b\u5b50","title":"\u8209\u500b\u4f8b\u5b50","text":"\u4eba\u529b\u9280\u884c\u767b\u5165\u9700\u8981\u4f7f\u7528\u8eab\u5206\u8b49\u5b57\u865f\uff0c\u4eca\u5929\u6211\u5011\u8981\u8b93\u4f7f\u7528\u8005\u8cc7\u6599\u5728\u591a\u500b\u8cc7\u6599\u5eab\u9032\u884c\u5206\u5340\uff0c\u4e26\u4f9d\u64da\u8eab\u5206\u8b49\u5b57\u865f\u6c7a\u5b9a\u54ea\u500b\u4f7f\u7528\u8005\u8fd1\u54ea\u500b\u5206\u5340\u3002
\u9ad8\u5e73\u8861\u53ef\u4ee5\u8b93\u6bcf\u53f0\u8cc7\u6599\u5eab\u90fd\u6709\u4e8b\u505a\uff1b\u9ad8\u9023\u7e8c\u53ef\u4ee5\u8b93\u641c\u5c0b\u8b8a\u55ae\u7d14
"},{"location":"feedback/designing-data-intensive-applications/distributed-partition/#\u6574\u7406\u4e00\u4e0b","title":"\u6574\u7406\u4e00\u4e0b","text":"\u6211\u5011\u628a\u4e0a\u9762\u7684\u4f8b\u5b50\u6574\u7406\u4e00\u4e0b\uff0c\u5c31\u6703\u767c\u73fe\u5169\u8457\u6a21\u5f0f\uff1a\u4e00\u7a2e\u662f\u7167\u8457\u9806\u5e8f\u6392\uff0c\u4e00\u7a2e\u662f\u96a8\u6a5f\u4e82\u6578\u7167\u9806\u5e8f\u6392\u3002
\u7167\u9806\u5e8f\u6392\u5c31\u6703\u5bb9\u6613\u88fd\u9020\u71b1\u9ede\uff08hot spot\uff09\uff0c\u9020\u6210\u4e00\u53f0\u8cc7\u6599\u5eab\u5f88\u5fd9\u5f88\u5fd9\uff0c\u5176\u4ed6\u7684\u5c31\u9592\u9592\u6c92\u4e8b\u505a\u3002 \u9664\u6b64\u4e4b\u5916\uff0c\u9019\u65b9\u5f0f\u4e5f\u9700\u8981\u8b93\u61c9\u7528\u7a0b\u5f0f\u8a2d\u8a08\u4eba\u54e1\u8003\u616e\u908a\u754c\u8981\u5982\u4f55\u5236\u5b9a\u3002
\u4ee5\u8eab\u5206\u8b49\u5b57\u865f\u70ba\u4f8b\uff0c\u82e5\u6211\u5011\u6309\u7167\u7b2c\u4e00\u500b\u82f1\u6587\u5b57\u70ba\u5206\u5340\u9375\uff0c\u6211\u5011\u53ef\u80fd\u662f A \uff5e B \u4e00\u7d44\uff0cC \uff5e F \u4e00\u7d44\uff0cG \uff5e K \u4e00\u7d44\u7b49\u7b49\u3002 \u9019\u9ebc\u505a\u7684\u539f\u56e0\u662f\u4e0d\u540c\u57ce\u5e02\u7684\u4eba\u7684\u6578\u91cf\u4e0d\u540c\uff0c\u6240\u4ee5\u5e73\u5747\u5206\u914d\u6703\u9020\u6210\u8ca0\u8f09\u504f\u659c\u3002
\u6700\u5f8c_\u96dc\u6e4a_\uff08hash\uff09\u7684\u65b9\u5f0f\u5927\u90e8\u5206\u8cc7\u6599\u5eab\u90fd\u7528\u6b64\u65b9\u5f0f\u505a\u5206\u5340\u3002\u4f46\u662f\u4ed6\u6703\u8b93\u7bc4\u570d\u641c\u5c0b\u7684\u6548\u80fd\u4f4e\u843d\uff0c \u6240\u4ee5\u6709\u4e9b\u8cc7\u6599\u5eab\u751a\u81f3\u4e0d\u5141\u8a31\u5206\u5340\u9375\u7684\u7bc4\u570d\u641c\u5c0b\uff0c \u4f8b\u5982 Riak\u3001 Couchbase \u548c Voldemort\uff0c MongoDB \u5247\u662f\u6703\u76f4\u63a5\u5c0d\u6240\u6709\u8cc7\u6599\u5eab\u641c\u5c0b\u3002
Info\u9019\u88e1\u8a0e\u8ad6\u7684\u90fd\u5148\u5047\u8a2d\u8cc7\u6599\u4e0d\u6703\u589e\u52a0\uff0c\u4e0d\u9700\u8981\u8003\u616e\u5e73\u8861\u554f\u984c\u3002
"},{"location":"feedback/designing-data-intensive-applications/distributed-partition/#\u71b1\u9ede","title":"\u71b1\u9ede","text":"\u5982\u679c\u7279\u5b9a\u7684\u503c\u672c\u4f86\u5c31\u5f88\u5e38\u88ab\u8acb\u6c42\uff0c\u4e0d\u7ba1\u7528\u54ea\u7a2e\u65b9\u5f0f\u90fd\u6703\u9020\u6210\u71b1\u9ede\uff08\u540c\u4e00\u500b\u503c\u7d93\u904e\u96dc\u6e4a\u5f8c\u9084\u662f\u9577\u4e00\u6a23\uff09\u3002 \u4f8b\u5982\u793e\u7fa4\u8edf\u9ad4\u4e0a\u7684\u540d\u4eba\uff0c\u6bcf\u6b21\u767c\u6587\u4f9d\u7167\u4ed6\u7684\u4f7f\u7528\u8005 ID\uff08\u6216\u767c\u6587 ID\uff09\uff0c\u6d41\u91cf\u90fd\u6703\u88ab\u5c0e\u9032\u8a72\u5206\u5340\u7684\u6a5f\u5668\u3002
\u4f60\u53ef\u4ee5\u900f\u904e\u4eba\u5de5\u65b9\u5f0f\u5beb\u6b7b\u9032\u7279\u6b8a\u7684\u5217\u8868\uff0c\u6bcf\u6b21\u8a72\u5217\u8868\u88e1\u7684\u4eba\u767c\u6587\uff0c\u5c31\u52a0\u4e0a\u4e00\u4e9b\u96a8\u6a5f\u7684\u503c\u5728\u6587\u7ae0 ID \u524d\u9762\uff08\u4e5f\u5c31\u662f\u4e00\u500b\u6587\u7ae0\u6703\u6709\u591a\u500b ID\uff09\uff0c\u5e6b\u52a9\u5206\u6563\u6d41\u91cf\u3002
\u4f8b\u5982\uff1aTwitter 3% \u7684\u6a5f\u5668\u5c08\u9580\u66ff Justin Bieber \u670d\u52d9
Info
\u7576\u7136\uff0c\u9019\u65b9\u6cd5\u9700\u8981\u505a\u5de5\u53bb\u7ba1\u7406\uff08bookkeeping\uff09\u9019\u4e9b ID\u3002\u7136\u5f8c\u6bcf\u6b21\u5b8c\u6574\u7684\u8b80\u53d6\u5c31\u6703\u9700\u8981\u5206\u6563\u641c\u5c0b\u5230\u591a\u500b\u8cc7\u6599\u5eab\u4e2d\u3002
\u8cc7\u6599\u5eab\u81ea\u52d5\u5e73\u8861\u71b1\u9ede\u4ecd\u662f\u958b\u653e\u7814\u7a76\uff01
"},{"location":"feedback/designing-data-intensive-applications/distributed-partition/#\u8def\u7531","title":"\u8def\u7531","text":"\u7576\u8acb\u6c42\u9032\u4f86\uff0c\u6211\u600e\u9ebc\u77e5\u9053\u8a72\u8cc7\u6599\u5728\u54ea\u88e1\uff1f
\u4e09\u7a2e\u65b9\u5f0f\uff0c\u8b93\u8cc7\u6599\u5eab\u53bb\u8def\u7531\u3001\u900f\u904e\u4e2d\u9593\u4eba\u3001\u8acb\u6c42\u4eba\u81ea\u5df1\u5224\u65b7\u3002\u9019\u4e09\u7a2e\u65b9\u5f0f\u90fd\u4e0d\u96e3\u7406\u89e3\uff0c\u6709\u9ede\u50cf\u662f\u5fae\u670d\u52d9\u4e0b\uff0c \u6211\u8981\u600e\u9ebc\u77e5\u9053\u5c0d\u65b9\u670d\u52d9\u7684 IP \u7684\u6982\u5ff5\uff0c\u4e5f\u5c31\u662f_\u670d\u52d9\u767c\u73fe_\uff08service discovery\uff09\u3002
\u670d\u52d9\u767c\u73fe
\u6709\u5f88\u591a\u516c\u53f8\u5167\u90e8\u767c\u5c55\u81ea\u5df1\u7684_\u670d\u52d9\u767c\u73fe_\u7cfb\u7d71\uff0c \u4e26\u628a\u5b83\u958b\u6e90\u51fa\u4f86\u3002
\u56f0\u96e3\u7684\u554f\u984c\u662f\uff1a\u8981\u600e\u9ebc\u77e5\u9053\u8cc7\u6599\u5728\u8ab0\u8eab\u4e0a\uff1f \u5c24\u5176\u7576\u8cc7\u6599\u5eab\u7684\u8cc7\u6599\u4e00\u76f4\u900f\u904e_\u5e73\u8861_\u91cd\u65b0\u5206\u914d\uff0c\u77e5\u9053\u5373\u6642\u7684\u8cc7\u6599\u4f4d\u7f6e\u5c31\u6703\u8b8a\u5f97\u5f88\u8907\u96dc\u4e86\u3002
"},{"location":"feedback/designing-data-intensive-applications/distributed-partition/#\u7b2c\u4e09\u65b9\u5e6b\u5fd9\u7ba1","title":"\u7b2c\u4e09\u65b9\u5e6b\u5fd9\u7ba1","text":"\u8981\u600e\u9ebc\u77e5\u9053\u8cc7\u6599\u5728\u8ab0\u8eab\u4e0a\uff1f\u7b2c\u4e00\u500b\u65b9\u5f0f\u662f\u6709\u4e00\u500b\u7b2c\u4e09\u65b9\uff08\u5716\u4e2d\u7684\u4f8b\u5b50\u662f\u4f7f\u7528 ZooKeeper\uff09\u53bb\u7d00\u9304\u9019\u4e9b\u8cc7\u6599\u3002
\u807d\u8d77\u4f86\u597d\u50cf\u4e0d\u96e3\uff0c\u5c31\u662f\u518d\u958b\u4e00\u500b\u8cc7\u6599\u5eab\u53bb\u653e\u9019\u4e9b\u8cc7\u6599\uff0c\u4f46\u662f\u5f8c\u9762\u6211\u5011\u6703\u63d0\uff1a \u7576\u6211\u5011\u9700\u8981 \u5206\u6563\u5f0f\u7cfb\u7d71 \u53bb\u5c0d\u67d0\u7a2e\u72c0\u614b\u9054\u6210\u4e00\u500b \u5171\u8b58\uff0c\u662f\u975e\u5e38\u56f0\u96e3\u7684\uff0c\u5f88\u591a\u908a\u969b\u60c5\u6cc1\u6703\u51fa\u73fe\u3002 \u628a\u8a72\u6f14\u7b97\u6cd5\u5be6\u4f5c\u51fa\u4f86\u540c\u6642\u4e5f\u6703\u9700\u8981\u6ce8\u610f\u5f88\u591a\u5c0f\u7d30\u7bc0\uff08\u6709\u9ede\u50cf\u662f\u5bc6\u78bc\u5b78\u4e0a\u7684\u5be6\u4f5c\uff09\uff0c \u900f\u904e\u4e00\u500b\u958b\u6e90\u4e14\u88ab\u5927\u91cf\u4f7f\u7528\u7684\u8edf\u9ad4\uff08\u4f8b\u5982 ZooKeeper\uff09\u4f86\u5c08\u7cbe\u65bc\u9054\u6210\u9019\u4ef6\u4e8b\u662f\u76f8\u5c0d\u5b89\u5168\u7684\u3002
\u7576\u76f8\u95dc\u8cc7\u6599\u88ab\u653e\u5728\u7b2c\u4e09\u65b9\u4e4b\u5f8c\uff0c\u4e0a\u9762\u63d0\u5230\u7684\u4e09\u500b\u65b9\u6cd5\u7684\u4e09\u500b\u5c0d\u8c61\uff1a\u8cc7\u6599\u5eab\u3001\u4e2d\u9593\u4eba\u3001\u8acb\u6c42\u4eba\uff0c \u5c31\u53ef\u4ee5\u53bb\u76e3\u63a7\u9019\u500b\u7b2c\u4e09\u65b9\u7684\u8cc7\u6599\u4e26\u6c7a\u5b9a\u8acb\u6c42\u8a72\u9001\u7d66\u54ea\u500b\u5206\u5340\u3002
\u54ea\u4e9b\u8cc7\u6599\u5eab\u6709\u5be6\u4f5c\u9019\u6771\u897f
\u8cc7\u6599\u5eab\u900f\u904e\u5354\u5b9a\uff08Gossip protocol\uff09\u5f7c\u6b64\u544a\u77e5\u5c0d\u65b9\u76ee\u524d\u8cc7\u6599\u5eab\u7684\u72c0\u614b\uff0c\u4e26\u8b93\u4f7f\u7528\u8a72\u8cc7\u6599\u7684\u8acb\u6c42\u9001\u904e\u53bb\u7d66\u8a72\u8cc7\u6599\u5eab\u3002
\u9019\u65b9\u5f0f\u96d6\u7136\u6703\u589e\u52a0\u8cc7\u6599\u5eab\u8981\u505a\u7684\u4e8b\u60c5\uff0c\u4f46\u662f\u8b93\u5176\u4e0d\u518d\u9700\u8981\u7b2c\u4e09\u65b9\u5354\u52a9\u3002
Cassandra \u548c Riak \u90fd\u662f\u4f7f\u7528\u9019\u65b9\u5f0f\u3002
"},{"location":"feedback/designing-data-intensive-applications/distributed-partition/#\u4e0d\u8981\u81ea\u52d5\u5316\u5e73\u8861","title":"\u4e0d\u8981\u81ea\u52d5\u5316\u5e73\u8861","text":"\u6211\u5011\u524d\u9762\u63d0\u5230\u56f0\u96e3\u7684\u662f\u7576\u8cc7\u6599\u5eab\u7684\u8cc7\u6599\u4e00\u76f4\u900f\u904e\u81ea\u52d5\u5316\u7684_\u5e73\u8861_\u91cd\u65b0\u5206\u914d\uff0c\u5f88\u96e3\u5373\u6642\u5171\u8b58\u6027\u7684\u77e5\u9053\u8cc7\u6599\u4f4d\u7f6e\u3002 \u65e2\u7136\u9019\u6a23\uff0c\u6bcf\u6b21\u5e73\u8861\u90fd\u900f\u904e\u4eba\u5de5\u7684\u65b9\u4f86\u53bb\u505a\uff0c\u4e26\u8a2d\u5b9a\u597d\u6bcf\u53f0\u8cc7\u6599\u5eab\u7684\u8cc7\u6599\u7bc4\u570d\uff0c\u9019\u6a23\u4e8b\u60c5\u5c31\u7c21\u55ae\u4e86 \ud83d\ude00\u3002
Couchbase \u5c31\u662f\u7528\u9019\u65b9\u5f0f\uff0c \u7576 cluster node \u88ab\u66f4\u65b0\u7684\u6642\u5019\uff0c\u5c31\u7d00\u9304\u9019\u4e9b\u5206\u5340\u7684 metadata\u3002
"},{"location":"feedback/designing-data-intensive-applications/distributed-partition/#\u5e73\u8861","title":"\u5e73\u8861","text":"\u91cd\u65b0\u5206\u914d\u8cc7\u6599\u7684\u6642\u5019\u5230\u4e86\u3002
\u8cc7\u6599\u6703\u8d8a\u9577\u8d8a\u5927\uff0c\u9700\u8981\u6709\u65b0\u7684\u8cc7\u6599\u5eab\u5206\u64d4\u5de5\u4f5c\u3002 \u9664\u6b64\u4e4b\u5916\uff0c\u7576\u8cc7\u6599\u5eab\u6e1b\u5c11\uff08\u58de\u6389\u6216\u8a2d\u5b9a\uff09\u4e86\uff0c\u4e5f\u53ef\u80fd\u9700\u8981\u91cd\u65b0\u5206\u914d\u8cc7\u6599\u3002
\u901a\u5e38\u8cc7\u6599\u5eab\u58de\u6389\u6642\u6703\u4f7f\u7528\u8d95\u5de5\uff0c\u800c\u4e0d\u662f\u91cd\u65b0\u5e73\u8861\uff0c\u907f\u514d\u7121\u8b02\u7684\u5e73\u8861\u3002
"},{"location":"feedback/designing-data-intensive-applications/distributed-partition/#\u57fa\u672c\u9700\u6c42","title":"\u57fa\u672c\u9700\u6c42","text":"\u9019\u88e1\u7684\u524d\u63d0\u662f\u6211\u5011\u5df2\u7d93\u6c7a\u5b9a\u597d\u8981\u7528\u4ec0\u9ebc\u65b9\u5f0f\u5206\u5340\uff08\u7bc4\u570d\u5206\u5340\u6216\u8005\u96dc\u6e4a\u5206\u5340\uff09
\u9019\u4e9b\u90fd\u662f\u80cc\u666f\u57f7\u884c\uff0c\u7576\u78ba\u8a8d\u5206\u914d\u5b8c\u4e4b\u5f8c\u518d\u628a\u6d41\u91cf\u5c0e\u904e\u53bb\u3002
"},{"location":"feedback/designing-data-intensive-applications/distributed-partition/#\u81ea\u52d5\u5316\u6216\u624b\u52d5","title":"\u81ea\u52d5\u5316\u6216\u624b\u52d5","text":"\u5e73\u8861\u662f\u8017\u6642\u8017\u5de5\u7684\u884c\u70ba\uff0c\u8981\u8b39\u614e\u7684\u4f7f\u7528\u81ea\u52d5\u5316\uff0c\u6c92\u7528\u597d\u751a\u81f3\u6703\u5c0e\u81f4\u9023\u9396\u53cd\u61c9\uff1a \u56e0\u7bc0\u9ede\u5fd9\u788c\u65bc OLTP \u548c\u5e73\u8861\u5206\u5340\u5c0e\u81f4\u88ab\u5224\u5b9a\u7121\u6cd5\u6b63\u5e38\u904b\u4f5c\u7684\u7bc0\u9ede\uff0c \u6700\u7d42\u88ab\u8feb\u9000\u51fa\u6642\u53c8\u56e0\u70ba\u9700\u8981\u8abf\u6574\u5206\u5340\u5c0e\u81f4\u9032\u4e00\u6b65\u7684\u63d0\u5347\u5176\u4ed6\u7bc0\u9ede\u7684\u5de5\u4f5c\u91cf\u3002
\u524d\u9762\u6211\u5011\u5728\u63d0\u5982\u4f55\u8def\u7531\u7684\u6642\u5019\u5c31\u6709\u8b1b\u5230\u4e00\u500b\u65b9\u6cd5\uff1a\u4e0d\u8981\u81ea\u52d5\u5316\u5e73\u8861\uff0c\u5c31\u662f\u5efa\u7acb\u5728\u624b\u52d5\u5e73\u8861\u662f\u53ef\u88ab\u63a5\u53d7\u7684\u9019\u500b\u524d\u63d0\u3002
Couchbase\u3001Riak\u3001Voldemort \u6703\u81ea\u52d5\u5316\u5e73\u8861\uff0c\u4f46\u662f\u4e0d\u6703\u57f7\u884c\u9019\u500b\u5e73\u8861\uff0c\u800c\u662f\u4ea4\u7531\u7dad\u904b\u4eba\u54e1\u4f86\u6309\u4e0b\u300c\u78ba\u8a8d\u300d\u7684\u6309\u9215\u3002
"},{"location":"feedback/designing-data-intensive-applications/distributed-partition/#\u5176\u4ed6","title":"\u5176\u4ed6","text":"Parallel Database Systems
\u7c21\u55ae\u4f86\u8aaa\u5c31\u662f\u8b93\u5404\u8cc7\u6599\u5eab\u505a\u5b83\u80fd\u505a\u7684\u4e8b\uff0c\u6700\u5f8c\u518d\u4f86\u6574\u5408\u8cc7\u6599\u3002
\u9019\u6771\u897f\u6703\u5f88\u8907\u96dc\uff0c\u6211\u5011\u6703\u7d71\u4e00\u5728\u6279\u6b21\u8655\u7406\u8a0e\u8ad6\uff0c\u4e0d\u904e\u9019\u88e1\u4e5f\u80fd\u611f\u53d7\u5230\u6240\u8b02\u7684\u6279\u6b21\u8655\u7406\uff08batch processing\uff09\u548c\u6392\u7a0b\u8655\u7406\uff08cron-job\uff09\u7684\u5dee\u7570\u3002
\u4ee5\u4e0b\u662f MPP \u4e0d\u540c\u5be6\u4f5c\u65b9\u5f0f\u7684\u8cc7\u6599\u5eab\u5206\u985e\uff1a
Category Example Systems in this Category Classic Aster nCluster, DB2 Parallel Edition, Gamma, Greenplum, Netezza, SQL Server Parallel Data Warehouse, Teradata Columnar Amazon RedShift, C-Store, Infobright, MonetDB, ParAccel, Sybase IQ, Vec- torWise, Vertica MapReduce Cascading, Clydesdale, Google MapReduce, Hadoop, HadoopDB, Hadoop++, Hive, JAQL, Pig Dataflow Dremel, Dryad, Hyracks, Nephele, Pregel, SCOPE, Shark, Spark/Massively Parallel Databases and MapReduce Systems
"},{"location":"feedback/designing-data-intensive-applications/distributed-partition/#\u6b21\u7d22\u5f15","title":"\u6b21\u7d22\u5f15","text":"\u6b21\u7d22\u5f15\u5f88\u597d\u7528\uff0c\u4f46\u662f\u9055\u80cc\u4e86\u5206\u5340\u5929\u751f\u7684\u74b0\u5883\uff0c\u6211\u5011\u6709\u54ea\u4e9b\u9078\u64c7\u5462\uff1f
\u672c\u5730\u7d22\u5f15\u6709\u6642\u5019\u4e5f\u53eb document index\uff1b \u5168\u57df\u7d22\u5f15\u6709\u6642\u5019\u4e5f\u53eb term index\u3002
"},{"location":"feedback/designing-data-intensive-applications/distributed-partition/#\u672c\u5730\u7d22\u5f15","title":"\u672c\u5730\u7d22\u5f15","text":"\u9019\u65b9\u5f0f\u5f88\u55ae\u7d14\uff0c\u5c31\u662f\u6211\u5728\u6211\u80fd\u8655\u7406\u7684\u5730\u65b9\u505a\u597d\u6b21\u7d22\u5f15\u3002
\u4f46\u662f\u7576\u6211\u5011\u8981\u900f\u904e\u6b21\u7d22\u5f15\u641c\u5c0b\u7684\u6642\u5019\uff08\u4ee5\u5716\u4e0a\u70ba\u4f8b\u5c31\u662f\u641c\u5c0b\u300c\u7d05\u8272\u7684\u8eca\u300d\uff09\uff0c\u9700\u8981\u5168\u90e8\u7684\u8cc7\u6599\u5eab\u90fd\u641c\u5c0b\u4e00\u904d\u3002
Info
\u6240\u4ee5\uff0c\u6709\u6642\u5019\u900f\u904e\u6b21\u7d22\u5f15\u7684\u641c\u5c0b\u6703\u53eb\u505a scatter/gather\u3002
\u4f60\u53ef\u80fd\u53ef\u4ee5\u5728\u4e00\u958b\u59cb\u505a\u5206\u5340\u7684\u6642\u5019\uff0c\u5c0d\u4e3b\u9375\u505a\u4e00\u4e9b\u8655\u7406\uff0c\u4f8b\u5982\u7d05\u8272\u7684\u8eca\u524d\u7db4\u52a0\u500b r
\uff0c \u4f46\u662f\u9019\u6a23\u53ef\u80fd\u6703\u9020\u6210_\u71b1\u9ede_\uff0c\u6216\u8005\u6703\u9055\u80cc\u8cc7\u6599\u5eab\u63d0\u4f9b\u7684\u4e00\u4e9b\u5929\u751f\u9650\u5236\uff08constrant\uff09\uff0c\u4f8b\u5982\u81ea\u52d5\u589e\u52a0\u7684 ID\u3002
Example
MongoDB Riak\u3001Cassandra\u3001Elasticsearch\u3001SolrCloud\u3001VoltDB \u90fd\u4f7f\u7528\u9019\u65b9\u5f0f\u3002
"},{"location":"feedback/designing-data-intensive-applications/distributed-partition/#\u5168\u57df\u7d22\u5f15","title":"\u5168\u57df\u7d22\u5f15","text":"\u53e6\u5916\u66ff\u6b21\u7d1a\u7d22\u5f15\u589e\u52a0\u5206\u5340\u908f\u8f2f\uff08\u4ee5\u5716\u4e0a\u70ba\u4f8b\u5c31\u662f\u7d05\u8272\u8eca\u7684 ID \u6703\u9032\u5230_\u5206\u5340 1_\uff09
\u9019\u6642\u6211\u5011\u53ea\u9700\u8981\u6839\u64da\u9019\u500b\u8cc7\u6599\uff0c\u53bb\u627e\u9700\u8981\u7684\u7bc0\u9ede\u5c31\u597d\uff0c\u96d6\u7136\u53ef\u80fd\u9700\u8981\u8de8\u7bc0\u9ede\u53bb\u627e\uff0c\u4f46\u4e0d\u662f\u5168\u90e8\u90fd\u627e\u904e\u4e00\u904d\u3002
\u4f46\u662f\u9019\u6703\u589e\u52a0\u5beb\u5165\u6642\u7684\u6548\u80fd\uff0c\u56e0\u70ba\u662f\u5728\u5beb\u5165\uff0c\u6240\u4ee5\u5c31\u5f88\u53ef\u80fd\u6703\u767c\u751f\u7af6\u8cfd\u72c0\u6cc1\uff0c\u9700\u8981\u5206\u6563\u5f0f\u7684\u4ea4\u6613\uff08\u4e5f\u5c31\u662f \u5171\u8b58 \uff09\u3002
Example
Riak\u3001Oracle data warehous\u3001Amazon DynamoDB \u90fd\u6709\u984d\u5916\u63d0\u4f9b\u9019\u9078\u9805\u3002
\u9019\u7a2e\u5efa\u7acb\u984d\u5916\u7684\u8cc7\u8a0a\u5e6b\u52a9\u6211\u5011\u67e5\u627e\uff0c\u5176\u5be6\u662f\u4e00\u500b\u5f88\u6709\u8da3\u7684\u984c\u6750\uff0c\u6211\u5011\u6703\u5728\u6700\u5f8c\u4e00\u7ae0\u7684\u6642\u5019\uff0c\u900f\u904e\u6211\u5011\u5b78\u5230\u7684\u6240\u6709\u5de5\u5177\uff0c\u518d\u4f86\u8a0e\u8ad6\u8981\u600e\u9ebc\u6709\u6548\u89e3\u9019\u554f\u984c\u3002
"},{"location":"feedback/designing-data-intensive-applications/distributed-partition/#\u8907\u88fd\u5ef6\u9072","title":"\u8907\u88fd\u5ef6\u9072","text":"\u8cc7\u6599\u5eab\u9593\u7684\u8cc7\u6599\u53ea\u56e0\u70ba\u5ef6\u9072\u800c\u5c0e\u81f4\u4e0d\u4e00\u81f4\u3002
\u4e0d\u53ea\u662f\u8907\u88fd\u6703\u5ef6\u9072\u3001\u7576\u57f7\u884c\u591a\u5206\u5340\u7684\u8acb\u6c42\u6642\uff0c\u4e5f\u6703\u6709\u5ef6\u9072\u3002
\u4e0d\u904e\u9019\u88e1\u6211\u5011\u53ea\u6703\u8a0e\u8ad6\u5728\u591a\u8cc7\u6599\u5eab\u56e0\u70ba\u5ef6\u9072\u5c0e\u81f4\u7684\u8cc7\u6599\u4e0d\u4e00\u81f4\u3002 \u800c\u4e14\u50c5\u8ac7\u5230\u300c\u5ef6\u9072\u300d\uff0c\u4e0d\u6703\u8ac7\u5230\u4efb\u4f55\u8cc7\u6599\u5eab\u7121\u6cd5\u56de\u61c9\u6216\u7db2\u8def\u4e2d\u65b7\u5c0e\u81f4\u7684\u4e0d\u4e00\u81f4\uff0c\u56e0\u70ba\u9019\u9700\u8981 \u5171\u8b58\u6f14\u7b97\u6cd5 \u4f86\u5e6b\u6211\u5011\u8655\u7406\u3002
\u4ee5\u4e0b\u5716\u70ba\u4f8b\uff0c\u5c31\u662f\u9001\u7d66 Follower2 \u7684\u8cc7\u6599\u88ab\u4e2d\u65b7\u4e86\uff0c\u6211\u8981\u600e\u9ebc\u5fa9\u539f Follower1 \u7684\u8cc7\u6599\uff1f
"},{"location":"feedback/designing-data-intensive-applications/distributed-partition/#\u8b80\u4f60\u5beb\u7684\u8cc7\u6599","title":"\u8b80\u4f60\u5beb\u7684\u8cc7\u6599","text":"\u56e0\u70ba\u8907\u88fd\u5ef6\u9072\u5c0e\u81f4\u7121\u6cd5\u6b63\u78ba\u300c\u8b80\u4f60\u5beb\u7684\u8cc7\u6599\uff08read-your-own-write\uff09\u300d\u3002\u9019\u6642\u6211\u5011\u53ef\u4ee5\u5728\u7279\u5b9a\u60c5\u6cc1\u4e0b\u5229\u7528\u61c9\u7528\u7a0b\u5f0f\u7684\u908f\u8f2f\u907f\u514d\uff1a
\u5982\u679c\u8cc7\u6599\u5eab\u6709\u505a\u5206\u5340\uff0c\u56e0\u70ba\u4e0d\u540c\u5206\u5340\u6709\u4e0d\u540c Leader\uff0c\u53ef\u4ee5\u8212\u7de9\u9019\u72c0\u6cc1\u3002
"},{"location":"feedback/designing-data-intensive-applications/distributed-partition/#\u55ae\u8abf\u8b80\u53d6","title":"\u55ae\u8abf\u8b80\u53d6","text":"\u55ae\u8abf\u8b80\u53d6\uff08monotonic-read\uff09\u53ef\u4ee5\u907f\u514d\u4f7f\u7528\u8005\u7b2c\u4e8c\u6b21\u8acb\u6c42\u770b\u5230\u7684\u8cc7\u6599\u72c0\u614b\u662f\u7b2c\u4e00\u6b21\u8acb\u6c42\u7684\u820a\u8cc7\u6599\u3002
\u6211\u5011\u53ef\u4ee5\u5f37\u5236\u4f7f\u7528\u8005\u9019\u6b21 session \u53ea\u80fd\u770b\u5230\u540c\u4e00\u53f0 replica \u7684\u8cc7\u6599\u3002\u4f46\u662f replica \u4e0d\u80fd\u670d\u52d9\u6642\uff0c\u4ecd\u6703\u6709\u9019\u72c0\u6cc1\u767c\u751f\u3002
"},{"location":"feedback/designing-data-intensive-applications/distributed-partition/#\u9806\u5e8f\u4e00\u81f4\u8b80\u53d6","title":"\u9806\u5e8f\u4e00\u81f4\u8b80\u53d6","text":"\u9806\u5e8f\u4e00\u81f4\u8b80\u53d6\uff08consistent prefix read\uff09\u548c\u524d\u9762\u55ae\u8abf\u8b80\u53d6\u5f88\u50cf\uff0c\u53ea\u662f\u662f\u7279\u6307\u5206\u5340\u6642\u767c\u751f\u7684\u9806\u5e8f\u6df7\u4e82\u3002
\u6211\u5011\u53ef\u4ee5\u900f\u904e\u4e0a\u6b21\u63d0\u7684\u7248\u672c\u5411\u91cf\u4f86\u907f\u514d\u9019\u4ef6\u4e8b\uff0c\u4f46\u662f\u9700\u8981\u6709\u65b9\u6cd5\u7ba1\u7406\u9019\u4e9b\u7248\u672c\u3002
\u5206\u6563\u5f0f\u8cc7\u6599\u5eab\u53ea\u80fd\u4fdd\u6301\u6700\u7d42\u4e00\u81f4\u6027\uff1f
\u9019\u6a23\u807d\u8d77\u4f86\u5373\u4f7f\u6211\u5011\u5728\u55ae\u53f0\u8cc7\u6599\u80fd\u4fdd\u6301\u5f88\u5f37\u7684\u4e00\u81f4\u6027\uff0c\u5728\u5206\u6563\u5f0f\u8cc7\u6599\u5eab\u4e0b\uff0c\u5c31\u56de\u5230\u6700\u5f31\u7684\u4e00\u81f4\u6027\uff1a \u6700\u7d42\u4e00\u81f4\u6027\uff08eventually consistency\uff09\u55ce\uff1f
\u662f\u6709\u65b9\u6cd5\u53ef\u4ee5\u9054\u6210\u66f4\u5f37\u7684\u4e00\u81f4\u6027\uff0c\u4f46\u662f\u4f60\u6703\u770b\u5230\u5f88\u591a\u8cc7\u6599\u5eab\u6587\u4ef6\u90fd\u8aaa\uff0c\u7576\u4f7f\u7528\u8cc7\u6599\u53e2\u96c6\u7684\u6642\u5019\uff0c \u6211\u5011\u53ea\u63d0\u4f9b\u6700\u7d42\u4e00\u81f4\u6027\uff0c\u9019\u662f\u56e0\u70ba\u9054\u6210\u66f4\u5f37\u7684\u4e00\u81f4\u6027\u5e38\u5e38\u6703\u5e36\u4f86\u5f88\u591a\u6548\u80fd\u548c\u9ad8\u4e00\u81f4\u6027\u7684\u72a7\u7272\u3002
\u6211\u5011\u4e5f\u6703\u5728\u6700\u5f8c\u4e00\u7ae0\u8a0e\u8ad6\u9664\u4e86\u5206\u6563\u5f0f\u7684\u4ea4\u6613\uff08\u5171\u8b58\u6f14\u7b97\u6cd5\uff09\u4e4b\u5916\uff0c\u6211\u5011\u9084\u6709\u4ec0\u9ebc\u597d\u65b9\u6cd5\u53ef\u4ee5\u4e0d\u72a7\u7272\u9ad8\u53ef\u7528\u6027\u5462\uff1f
"},{"location":"feedback/designing-data-intensive-applications/distributed-partition/#\u7e3d\u7d50","title":"\u7e3d\u7d50","text":"\u5206\u5340\u7684\u6982\u5ff5\u5f88\u591a\u90fd\u6703\u91cd\u898b\u65bc_\u6279\u6b21\u8655\u7406_\u4e2d\uff0c\u5230\u6642\u6703\u518d\u628a\u9019\u4e3b\u984c\u91cd\u65b0\u6293\u51fa\u4f86\u8a0e\u8ad6\u3002
"},{"location":"feedback/designing-data-intensive-applications/distributed-replication/","title":"\u5206\u6563\u5f0f\u8cc7\u6599\u5eab\u2014\u8907\u88fd","text":"\u70ba\u4e86\u8b93\u8cc7\u6599\u5eab\u5099\u4efd\u3001\u9ad8\u53ef\u7528\u6027\u3001\u4f4e\u6f5b\u6642\u3002
HackMD \u5831\u544a
"},{"location":"feedback/designing-data-intensive-applications/distributed-replication/#\u70ba\u4ec0\u9ebc","title":"\u70ba\u4ec0\u9ebc","text":"\u70ba\u4ec0\u9ebc\u8981\u8b93\u8cc7\u6599\u5eab\u9032\u884c\u8907\u88fd\uff1f\u4e3b\u8981\u662f\u4e09\u500b\u539f\u56e0\uff1a
\u55ae\u53f0\u6a5f\u5668\u5176\u5be6\u5728\u5176\u6210\u9577\u904e\u7a0b\u4e5f\u662f\u6709\u4e00\u6a23\u7684\u554f\u984c\u3002
\u9019\u6b21\u8ac7\u7684\u8cc7\u6599\u5eab\u9593\u7684\u8907\u88fd\u90fd\u662f\u5efa\u7acb\u5728\u7121\u5171\u4eab\u67b6\u69cb\u4e4b\u4e0a\uff0c\u4e5f\u5c31\u662f\u5169\u53f0\u6a5f\u5668\u662f\u5f7c\u6b64\u7368\u7acb\u7684\uff1a\u4e00\u53f0\u6a5f\u5668\u88ab\u71d2\u5f97\u7cbe\u5149\u4e4b\u5f8c\uff0c\u53e6\u4e00\u53f0\u6a5f\u5668\u4ecd\u80fd\u6b63\u5e38\u904b\u884c\u3002
\u4f46\u662f\u4ed6\u5011\u4ecd\u7136\u5171\u4eab\u67d0\u7a2e\u5354\u5b9a\uff0c\u4f8b\u5982\u6e9d\u901a\u65b9\u5f0f\u90fd\u662f\u900f\u904e\u7db2\u969b\u7db2\u8def\u6216\u8005\u90fd\u662f\u5728\u540c\u4e00\u500b\u6a5f\u623f\u4f7f\u7528\u540c\u4e00\u500b\u96fb\u529b\u4f86\u6e90\u3002
\u6703\u63a1\u7528\u7121\u5171\u4eab\u67b6\u69cb\u7684\u539f\u56e0\u5c31\u662f\u56e0\u70ba\u5e7e\u4e4e\u6c92\u6709\u9650\u5236\u7684\u64f4\u589e\u6027\u548c\u5176\u5e36\u4f86\u7684\u6210\u672c\u50c5\u50c5\u53ea\u662f\u7dda\u6027\u6210\u9577\u800c\u5df2\u3002
"},{"location":"feedback/designing-data-intensive-applications/distributed-replication/#\u5206\u6563\u5f0f\u8cc7\u6599\u5eab","title":"\u5206\u6563\u5f0f\u8cc7\u6599\u5eab","text":"\u5206\u6563\u5f0f\u8cc7\u6599\u5eab\uff0c\u5c31\u662f\u591a\u53f0\u8cc7\u6599\u5eab\u9032\u884c\u5c0d\u8cc7\u6599\u7684\u8655\u7406\u3002
\u8981\u8b93\u591a\u53f0\u8cc7\u6599\u5eab\u5408\u4f5c\u5b8c\u6210\u61c9\u7528\u7a0b\u5f0f\u7684\u6307\u4ee4\uff0c\u5c31\u9700\u8981\u5171\u540c\u9075\u5b88\u67d0\u4e00\u500b\u8655\u7406\u6a5f\u5236\u3002\u9019\u6a5f\u5236\u53ef\u80fd\u662f
Info
\u56e0\u70ba\u8cc7\u6599\u662f\u6301\u7e8c\u8b8a\u52d5\u7684 (OLTP)\uff0c\u6240\u4ee5\u96e3\u3002
\u5176\u4e2d\u5728\u505a\u5206\u6563\u5f0f\u8cc7\u6599\u5eab\u7684\u6642\u5019\uff0c\u4e3b\u8981\u6703\u9700\u8981\u8655\u7406\u5169\u500b\u6771\u897f\uff1a
\u8907\u88fd\u9700\u8981\u505a\u540c\u6b65\uff0c\u800c\u5176\u4e2d\u7684\u53d6\u6368\u5c31\u597d\u50cf\u524d\u9762\u5728\u8a0e\u8ad6\u7af6\u8cfd\u554f\u984c\u6642\u8cc7\u6599\u4e00\u81f4\u6027\u7684\u53d6\u6368\uff0c\u8981\u6c42\u8d8a\u9ad8\u7684\u540c\u6b65\u7387\u5c31\u6703\u9762\u81e8\u8f03\u4f4e\u7684\u6548\u80fd\u3002\u7136\u800c\u5f85\u6703\u6211\u5011\u53ef\u4ee5\u770b\u5230\uff0c\u900f\u904e\u5354\u8abf\u8005\uff0c\u5728\u8cc7\u6599\u6eff\u8db3\u7279\u5b9a\u689d\u4ef6\u4e0b\uff0c\u53ef\u4ee5\u505a\u5230\u5169\u5168\u5176\u7f8e\uff1f
\u5206\u5340\u6703\u628a\u8cc7\u6599\u653e\u5728\u4e0d\u540c\u7684\u8cc7\u6599\u5eab\uff0c\u4f8b\u5982\uff1a\u4f7f\u7528\u8005 1-50 \u653e\u5728 \u8cc7\u6599\u5eab 1\uff0c\u4f7f\u7528\u8005 51-100 \u653e\u5728 \u8cc7\u6599\u5eab 2\u3002\u5176\u6ce8\u91cd\u7684\u662f\u5982\u4f55\u505a\u5230\u7d22\u5f15\u3001\u8cc7\u6599\u91cf\u7684\u5e73\u8861\u548c\u5f7c\u6b64\u9593\u7684\u5354\u4f5c\u3002
\u9019\u88e1\u8981\u6ce8\u610f\u7684\u662f\u5169\u8005\u6240\u4f7f\u7528\u7684\u6f14\u7b97\u6cd5\u662f\u53ef\u4ee5\u7368\u7acb\u5340\u5206\u7684\u3002\u4e00\u822c\u4f86\u8aaa\u4efb\u4e00\u8907\u88fd\u7684\u6f14\u7b97\u6cd5\u53ef\u4ee5\u642d\u914d\u4efb\u4e00\u5206\u5340\u7684\u6f14\u7b97\u6cd5\u3002
"},{"location":"feedback/designing-data-intensive-applications/distributed-replication/#\u6982\u7565\u5716","title":"\u6982\u7565\u5716","text":"\u8907\u88fd\u548c\u5206\u5340\u901a\u5e38\u662f\u540c\u6642\u5b58\u5728\u7684\uff0c\u6240\u4ee5\u6211\u5011\u6703\u540c\u6642\u5229\u7528\u8907\u88fd\u548c\u5206\u5340\uff0c\u9054\u6210\u5206\u6563\u5f0f\u8cc7\u6599\u5eab\u3002\u4ed6\u5011\u5169\u500b\u65b9\u5f0f\u5206\u5225\u8981\u8655\u7406\u7684\u6771\u897f\u90fd\u4e0d\u592a\u4e00\u6a23\uff1a
\u4e0d\u904e\u6211\u5011\u9019\u6b21\u6703\u5148\u4ecb\u7d39\u8907\u88fd\uff0c\u4e4b\u5f8c\u518d\u4ecb\u7d39\u5206\u5340\u3002\u6240\u4ee5\u4ee5\u4e0b\u7684\u8a0e\u8ad6\u90fd\u662f\u5047\u8a2d\u73fe\u6709\u7684\u8cc7\u6599\u91cf\u53ef\u4ee5\u7528\u4e00\u53f0\u6a5f\u5668\u4f86\u5bb9\u7d0d\u3002
"},{"location":"feedback/designing-data-intensive-applications/distributed-replication/#\u600e\u9ebc\u8907\u88fd","title":"\u600e\u9ebc\u8907\u88fd\uff1f","text":"\u4e2d\u6587 \u7d71\u4e00 \u5176\u4ed6 \u55ae\u4e00\u9818\u8896 leader/follower master/slave(standby), active/passive, primary/secondary \u591a\u9818\u8896 multi-leader master/master, active/active \u7121\u9818\u8896 leaderless dynamo-style\u4e09\u7a2e\u65b9\u6cd5\u5c0d\u61c9\u524d\u9762\u63d0\u7684\uff1a\u9818\u8896\u3001\u5404\u81ea\u70ba\u653f\u3001\u5354\u8abf\u8005\u3002\u4ee5\u4e0b\u90fd\u6703\u7d71\u4e00\u8aaa\u6cd5\u70ba\u55ae\u4e00\u9818\u8896\u3001\u591a\u9818\u8896\u3001\u7121\u9818\u8896\u3002
"},{"location":"feedback/designing-data-intensive-applications/distributed-replication/#\u4e09\u7a2e\u65b9\u5f0f\u7684\u6bd4\u8f03","title":"\u4e09\u7a2e\u65b9\u5f0f\u7684\u6bd4\u8f03","text":"\u9019\u4e09\u7a2e\u65b9\u5f0f\u90fd\u6709\u5176\u5e36\u4f86\u7684\u7f3a\u9ede\u548c\u512a\u9ede\uff0c\u63a5\u4e0b\u4f86\u6211\u5011\u5c31\u662f\u8981\u4f86\u8ac7\u8ac7\u5404\u81ea\u9700\u8981\u8003\u616e\u7684\u6b0a\u8861\u3002
\u7136\u800c\uff0c\u4e0d\u8ad6\u4efb\u4f55\u4e00\u7a2e\u8907\u88fd\u65b9\u5f0f\u90fd\u8981\u9762\u5c0d\u8d95\u5de5\u548c\u540c\u6b65\u5ef6\u9072\u3002
\u8d95\u5de5\uff08catch up\uff09\u5c31\u662f\u7576\u8cc7\u6599\u5eab\u505c\u6b62\u904b\u4f5c\u6642\uff08\u7528\u4f86\u7dad\u4fee\u6216\u610f\u5916\u7684\u58de\u6389\uff09\uff0c\u5982\u4f55\u8b93\u8cc7\u6599\u8ddf\u4e0a\uff08\u4e0d\u7ba1\u662f\u5f9e\u820a\u7684\u72c0\u614b\u6216\u8005\u5f9e\u5b8c\u5168\u7a7a\u767d\u7684\u72c0\u614b\uff09\u6700\u65b0\u7684\u72c0\u614b\u3002\u5176\u4f5c\u6cd5\uff1a
\u81f3\u65bc\u5ef6\u9072\uff0c\u6211\u5011\u6703\u7d71\u4e00\u5728\u4e0b\u4e00\u7ae0\u7684\u5206\u5340\u8a0e\u8ad6\u3002
\u96d6\u7136\u7121\u9818\u8896\u6c92\u6709\u628a\u540c\u7570\u6b65\u653e\u9032\u53bb\uff0c\u4f46\u5be6\u969b\u4e0a\uff0c\u4ed6\u4e5f\u662f\u9700\u8981\u88ab\u8003\u616e\u7684\uff0c\u53ea\u662f\u5927\u90e8\u5206\u8cc7\u6599\u5eab\u5be6\u4f5c\u90fd\u662f\u540c\u6642\u5b58\u5728\uff0c\u7570\u65bc\u6709\u9818\u8896\u6642\u7684\u8907\u88fd\u5927\u90e8\u5206\u90fd\u662f\u7d14\u7570\u6b65\u3002
"},{"location":"feedback/designing-data-intensive-applications/distributed-replication/#\u55ae\u4e00\u9818\u8896","title":"\u55ae\u4e00\u9818\u8896","text":"\u55ae\u4e00\u9818\u8896\u5c31\u662f\u4e00\u53f0\u8cc7\u6599\u5eab\uff08leader\uff09\u8ca0\u8cac\u5beb\u5165\u8cc7\u6599\uff0c\u5269\u4e0b\u7684\u8cc7\u6599\u5eab\uff08follower\uff09\u8ca0\u8cac\u540c\u6b65\u8cc7\u6599\u4e26\u63d0\u4f9b\u4f7f\u7528\u8005\u8b80\u53d6\u8cc7\u6599\u3002
\u4e0a\u5716\u4e2d\u7684 Replication streams \u5373\u662f\u5728\u9818\u8896\u5f97\u5230\u8cc7\u6599\u5f8c\uff0c\u628a\u76f8\u95dc\u8cc7\u8a0a\u50b3\u905e\u7d66\u8ffd\u96a8\u8005\uff0c \u81f3\u65bc\u300c\u76f8\u95dc\u8cc7\u8a0a\u300d\u662f\u4ec0\u9ebc\uff0c\u5f8c\u9762\u6703\u63d0\u3002
\u63a5\u4e0b\u4f86\u6211\u5011\u5c31\u4f86\u770b\u770b\u55ae\u4e00\u9818\u8896\u6709\u54ea\u4e9b\u6b0a\u8861\u3002
\u9806\u5e8f\u6703\u662f\uff1a
\u524d\u9762\u63d0\u7684\u8d95\u5de5\u554f\u984c\uff0c\u9019\u908a\u8a0e\u8ad6\u4e09\u7a2e\u72c0\u6cc1\u3002\u5206\u5225\u662f
\u57fa\u672c\u4e0a\u4e0d\u7ba1\u54ea\u7a2e\u8907\u88fd\u65b9\u5f0f\uff08\u55ae\u4e00\u9818\u8896\u3001\u591a\u9818\u8896\u3001\u7121\u9818\u8896\uff09\u90fd\u662f\u9019\u6a23\u7684\u9806\u5e8f\u3002\u82e5\u6709\u9818\u8896\u5247\u628a\u9818\u8896\u7684\u8cc7\u6599\u8907\u88fd\u5230\u8ffd\u96a8\u8005\u8eab\u4e0a\uff0c\u53cd\u4e4b\u5247\u6311\u4e00\u500b\u6700\u65b0\u7684\u8cc7\u6599\u5eab\u8907\u88fd\u3002
\u7531\u65bc\u8cc7\u6599\u662f\u4e00\u76f4\u6301\u7e8c\u7684\uff08OLTP\uff09\uff0c\u7576\u8907\u88fd\u904e\u53bb\u5f8c\uff0c\u9700\u8981\u6709\u6a5f\u5236\u8b93\u4ed6\u628a\u6700\u65b0\u8cc7\u6599\u88dc\u4e0a\u3002
\u6a5f\u5236\u5927\u81f4\u5982\u4e0b\uff1a
\u548c\u524d\u9762\u7684\u5f88\u50cf\uff0c\u5c31\u662f\u57f7\u884c\u5f8c\u9762\u5169\u52d5\uff1a\u88dc\u4e0a\u6700\u65b0\u8cc7\u6599\u3001\u6649\u5347\u8ffd\u96a8\u8005\u3002
"},{"location":"feedback/designing-data-intensive-applications/distributed-replication/#\u9818\u8896\u91cd\u555f","title":"\u9818\u8896\u91cd\u555f","text":"\u7576\u9818\u8896\u5931\u80fd\u6642\uff0c\u6211\u5011\u9700\u8981\u57f7\u884c \u6545\u969c\u5207\u63db\uff08failover\uff09\u7684\u52d5\u4f5c\u3002\u5176\u9806\u5e8f\u5982\u4e0b\uff1a
\u4ee5\u4e0b\u662f GitHub \u9047\u5230\u9818\u8896\u91cd\u555f\u5f8c\uff0c\u6368\u68c4\u5c1a\u672a\u540c\u6b65\u7684\u8cc7\u6599\u6240\u9020\u6210\u7684\u72c0\u6cc1
\u5176\u4e3b\u8981\u539f\u56e0\u662f\u56e0\u70ba\u4e3b\u9375\u6709\u905e\u589e\u7684\u6a21\u5f0f\uff0c\u4f46\u662f\u8cc7\u6599\u5eab\u91cd\u555f\u5f8c\uff0c\u5176\u905e\u589e\u5f8c\u7684\u8cc7\u6599\u907a\u5931\u4e86\uff0c\u5c0e\u81f4\u8cc7\u6599\u4e0d\u540c\u6b65\u3002
"},{"location":"feedback/designing-data-intensive-applications/distributed-replication/#\u540c\u7570\u6b65","title":"\u540c\u7570\u6b65","text":"\u540c\u7570\u6b65\u662f\u9700\u8981\u505a\u6b0a\u8861\u7684\u3002
\u5b8c\u5168\u7684\u540c\u6b65\u6703\u8b93\u6f5b\u6642\u8b8a\u5f97\u5f88\u4e0d\u7a69\uff0c\u540c\u6642\u55ae\u53f0\u8cc7\u6599\u5eab\u82e5\u58de\u6389\u4e86\uff0c\u5c31\u6703\u5c0e\u81f4\u5168\u90e8\u8cc7\u6599\u7121\u6cd5\u5beb\u5165\uff0c\u9019\u5c31\u9055\u80cc\u4e86\u7576\u521d\u5efa\u7acb\u591a\u53f0\u8cc7\u6599\u5eab\u4ee5\u63d0\u5347\u53ef\u7528\u6027\u7684\u539f\u5247\u3002
\u5b8c\u5168\u7684\u7570\u6b65\u53c8\u6703\u8b93\u8cc7\u6599\u7684\u4e00\u81f4\u6027\u8b8a\u5f97\u5f88\u4e0d\u7a69\uff0c\u9019\u4e5f\u6703\u7834\u58de\u6211\u5011\u4e0a\u4e00\u6b21\u8a0e\u8ad6\u7684\u55ae\u53f0\u8cc7\u6599\u5eab\u8f9b\u82e6\u5efa\u7acb\u7684\u4e00\u81f4\u6027\uff0c\u8b93\u524d\u9762\u63d0\u5230\u7684\u7af6\u8cfd\u72c0\u6cc1\u90fd\u53ef\u80fd\u767c\u751f\u3002
\u6709\u4e9b\u8cc7\u6599\u5eab\u7684\u505a\u6cd5\u662f\u53d6\u5176\u5e73\u8861\u4f7f\u7528\u534a\u540c\u6b65\uff08semi-synchronous\uff09\uff0c\u5982\u5716\u4e0a\u6240\u793a\u3002\u4e0d\u904e\u5927\u90e8\u5206\u55ae\u4e00\u9818\u8896\u7684\u8cc7\u6599\u53e2\u96c6\u90fd\u63a1\u7528\u5b8c\u5168\u7684\u7570\u6b65\uff0c\u4ee5\u8ffd\u6c42\u9ad8\u53ef\u7528\u6027\u3002
"},{"location":"feedback/designing-data-intensive-applications/distributed-replication/#\u8907\u88fd\u65e5\u8a8c","title":"\u8907\u88fd\u65e5\u8a8c","text":"\u524d\u9762\u63d0\u4e86\u5f88\u591a\u9818\u8896\u628a\u8cc7\u6599\u8f49\u5230\u8ffd\u96a8\u8005\u6642\u6703\u9047\u5230\u7684\u554f\u984c\u548c\u6b0a\u8861\u3002\u4f46\u662f\u90fd\u6c92\u63d0\u4ed6\u600e\u9ebc\u628a\u8cc7\u6599\u8f49\u5230\u8ffd\u96a8\u8005\u7684\u3002\u57fa\u672c\u4e0a\u6709\u4e09\u7a2e\uff1a
NOW()
\u3001RAND()
\u3001AUTO_INCR()
\u7b49\u7b49\u3002WHERE <some condition>
\uff0c\u5247\u6703\u8981\u6c42\u6240\u6709\u8cc7\u6599\u5eab\u72c0\u614b\u90fd\u662f\u4e00\u81f4\u7684\uff0c\u5426\u5247\u5f88\u5bb9\u6613\u56e0\u70ba\u72c0\u614b\u4e0d\u4e00\u81f4\u5c0e\u81f4\u57f7\u884c\u7d50\u679c\u4e0d\u4e00\u6a23\u3002UPDATE users SET age = age + 10 WHERE age < 10
\u5247\u53ef\u80fd\u50b3\u905e\u66f4\u65b0\u7684\u4f7f\u7528\u8005 ID \u548c\u5176\u66f4\u65b0\u5f8c\u7684\u8cc7\u6599\u3002\u4f7f\u7528\u9019\u65b9\u5f0f\u7684\u6709 MySQL \u7684 binlog\u3002\u9664\u6b64\u4e4b\u5916\uff0c\u4ed6\u4e5f\u65b9\u4fbf\u900f\u904e ETL \u7b49\u65b9\u5f0f\u88fd\u4f5c\u5176\u4ed6 \u884d\u751f\u8cc7\u6599 \u3002\u56e0\u70ba\u55ae\u4e00\u8cc7\u6599\u4e2d\u5fc3\uff08data center\uff09\u8cc7\u6599\u5eab\u5f7c\u6b64\u4e4b\u9593\u4e0d\u6703\u76f8\u8ddd\u592a\u9060\uff0c\u6240\u4ee5\u9069\u5408\u9019\u7a2e\u65b9\u5f0f\u3002\u4f46\u662f\u5982\u679c\u6709\u4efb\u4e00\u53f0\u5728\u76f8\u8ddd\u9059\u9060\u7684\u5730\u65b9\uff0c\u5247\u6703\u8b93\u9019\u500b\u8cc7\u6599\u5eab\u53e2\u96c6\u7684\u540c\u6b65\u6027\u8b8a\u5f97\u5f88\u4e0d\u7a69\u5b9a\u3002
\u7531\u65bc\u8cc7\u6599\u90fd\u662f\u5f9e\u9818\u8896\u5beb\u5165\uff0c\u6240\u4ee5\u524d\u9762\u63d0\u7684\u55ae\u4e00\u8cc7\u6599\u5eab\u4e0b\u7684\u4ea4\u6613\u6a5f\u5236\u53ef\u4ee5\u904b\u884c\u7684\u5f88\u9806\u5229\u3002\u4f46\u662f\u4ecd\u6709\u8cc7\u6599\u53e2\u96c6\u5167\u7684\u591a\u8cc7\u6599\u5eab\u4e00\u81f4\u6027\u554f\u984c\u3002
"},{"location":"feedback/designing-data-intensive-applications/distributed-replication/#\u591a\u9818\u8896","title":"\u591a\u9818\u8896","text":"\u5982\u679c\u55ae\u4e00\u9818\u8896\u5931\u80fd\uff0c\u6703\u6709\u4e00\u6bb5\u6642\u9593\u4e0d\u80fd\u904b\u884c\uff0c\u76f4\u89ba\u4e0a\u5c31\u662f\u8b93\u9818\u8896\u8b8a\u6210\u591a\u500b\u3002\u4f46\u662f\u5be6\u969b\u4e0a\uff0c\u5f88\u5c11\u8cc7\u6599\u5eab\u63a1\u7528\u9019\u65b9\u5f0f\uff0c\u56e0\u70ba\u4ed6\u6703\u5e36\u4f86\u5f88\u591a\u885d\u7a81\u548c\u932f\u8aa4\u3002
\u5982\u679c\u4f60\u7684\u74b0\u5883\u53ea\u6709\u4e00\u500b\u8cc7\u6599\u4e2d\u5fc3\uff0c\u90a3\u53ef\u80fd\u5c31\u4e0d\u9700\u8981\u9019\u9ebc\u8907\u96dc\u7684\u6a5f\u5236\uff0c\u76f8\u5c0d\u800c\u8a00\u7576\u6709\u591a\u500b\u8cc7\u6599\u4e2d\u5fc3\u6642\uff0c\u6211\u5011\u5c31\u53ef\u4ee5\u7528\u9019\u65b9\u5f0f\uff0c\u4f46\u662f\u8acb\u5c0f\u5fc3\u4f7f\u7528\u3002
\u6709\u4e9b\u8cc7\u6599\u5eab\u9810\u8a2d\u652f\u63f4\u591a\u9818\u8896\u7684\u53e2\u96c6\uff0c\u6709\u4e9b\u9700\u8981\u5916\u90e8\u5de5\u5177\u652f\u63f4\uff0c\u4f8b\u5982 MySQL \u7684 Tungsten Replicator\u3001PostgreSQL \u7684 BDR\u3001Oracle \u7684 GoldenGate
\u524d\u9762\u5df2\u7d93\u8a0e\u8ad6\u5b8c\u6709\u9818\u8896\u6642\u9700\u8981\u6ce8\u610f\u7684_\u8907\u88fd\u65e5\u8a8c_\u548c_\u540c\u7570\u6b65_\u3002\u63a5\u4e0b\u4f86\u6703\u8457\u91cd\u5728\u591a\u9818\u8896\u9700\u8981\u6ce8\u610f\u7684\u8655\u7406\u885d\u7a81\u548c\u68b3\u7406\u56e0\u679c\u3002
\u9806\u5e8f\u6703\u662f\uff1a
\u5728\u6548\u80fd\u4e0a\uff0c\u4e0d\u53ea\u662f\u5beb\u5165\u7684\u8cc7\u6599\u5eab\u8b8a\u591a\uff0c\u53ef\u4ee5\u5206\u64d4\uff0c\u66f4\u91cd\u8981\u7684\u662f\u53ef\u4ee5\u653e\u7f6e\u5728\u591a\u500b\u8cc7\u6599\u4e2d\u5fc3\uff0c\u9019\u6642\u5c31\u53ef\u4ee5\u6839\u64da\u4f7f\u7528\u8005\u628a\u8acb\u6c42\u9001\u5230\u6bd4\u8f03\u8fd1\u7684\u8cc7\u6599\u4e2d\u5fc3\u3002
\u5728\u5bb9\u932f\u4e0a\uff0c\u56e0\u70ba\u653e\u5728\u591a\u53f0\u8cc7\u6599\u4e2d\u5fc3\uff0c\u4efb\u4e00\u500b\u8cc7\u6599\u4e2d\u5fc3\u7684\u57fa\u790e\u8a2d\u65bd\u640d\u5bb3\u4e26\u4e0d\u6703\u9020\u6210\u5168\u9762\u6027\u7684\u505c\u64fa\u3002\u4e5f\u53ef\u4ee5\u907f\u514d\u55ae\u4e00\u9818\u8896\u56e0\u70ba\u9818\u8896\u5931\u80fd\u5c0e\u81f4\u670d\u52d9\u7d42\u6b62\u7684\u72c0\u6cc1\uff0c\u56e0\u70ba\u5176\u4ed6\u9818\u8896\u6703\u5e6b\u5fd9\u5206\u64d4\u8acb\u6c42\uff0c\u4e26\u7b49\u5f85\u5931\u80fd\u9818\u8896\u88ab\u66ff\u63db\u3002
"},{"location":"feedback/designing-data-intensive-applications/distributed-replication/#\u591a\u9818\u8896\u7684\u58de\u8655","title":"\u591a\u9818\u8896\u7684\u58de\u8655","text":"\u4ed6\u6703\u7834\u58de\u5f88\u591a\u8cc7\u6599\u5eab\u539f\u6709\u7684\u529f\u80fd\uff0c\u4f8b\u5982\uff0c\u81ea\u52d5\u589e\u52a0\u7684 ID\u3001\u8cc7\u6599\u9650\u5236\uff08constraints\uff09\u7b49\u7b49\u3002\u9664\u6b64\u4e4b\u5916\uff0c\u7576\u591a\u53f0\u8cc7\u6599\u5eab\u540c\u6642\u5beb\u5165\u6642\u52e2\u5fc5\u5c31\u9700\u8981\u8655\u7406\u5169\u500b\u5beb\u5165\u7684\u885d\u7a81\u3002\u5c31\u50cf\u524d\u9762\u63d0\u7684\uff0c\u6709\u6642\u5019\u885d\u7a81\u4e0d\u90a3\u9ebc\u660e\u986f\uff0c\u4f8b\u5982\u8a02\u7968\u554f\u984c\u3002
"},{"location":"feedback/designing-data-intensive-applications/distributed-replication/#\u591a\u9818\u8896\u5176\u5be6\u5f88\u5e38\u767c\u751f","title":"\u591a\u9818\u8896\u5176\u5be6\u5f88\u5e38\u767c\u751f","text":"\u4f8b\u5982\u624b\u6a5f\u4e2d\u7684\u65e5\u66c6\u61c9\u7528\u7a0b\u5f0f\uff0c\u4f60\u7684\u624b\u6a5f\u5373\u4f7f\u6c92\u6709\u7db2\u8def\uff0c\u4ecd\u8981\u53ef\u4ee5\u7d00\u9304\u884c\u7a0b\u65bc\u65e5\u66c6\u4e2d\uff0c\u4e26\u4e14\u5728\u91cd\u65b0\u4e0a\u7dda\u4e4b\u5f8c\uff0c\u548c\u8cc7\u6599\u5eab\u7684\u8cc7\u6599\u6574\u5408\u518d\u4e00\u8d77\u3002\u4f46\u662f\u6574\u5408\u7684\u8cc7\u6599\u53ef\u80fd\u6703\u56e0\u70ba\u4f60\u540c\u4e00\u6642\u9593\u53c8\u5728\u5176\u4ed6\u88dd\u7f6e\uff08\u4f8b\u5982\u7b46\u96fb\uff09\u66f4\u65b0\u8cc7\u6599\u5c0e\u81f4\u6709\u885d\u7a81\u3002
\u9019\u60c5\u6cc1\u5c31\u597d\u50cf\u591a\u9818\u8896\u7684\u8cc7\u6599\u53e2\u96c6\uff0c\u9019\u6642\u540c\u6b65\u7684\u5ef6\u9072\u53ef\u80fd\u5c31\u4e0d\u662f\u597d\u5e7e\u79d2\u800c\u662f\u597d\u5e7e\u5929\u3002CouchDB \u5c31\u662f\u5c08\u9580\u8a2d\u8a08\u8655\u7406\u9019\u7a2e\u72c0\u6cc1\u7684\u8cc7\u6599\u5eab\u3002
\u7b2c\u4e8c\u7a2e\u72c0\u6cc1\u5c31\u662f\u7de8\u8f2f\u7dda\u4e0a\u6587\u4ef6\uff0c\u4f8b\u5982 Google Doc/HackMD\u3002\u76f4\u5f97\u6ce8\u610f\u7684\u662f\uff0c\u7576\u6211\u5011\u5728\u7de8\u8f2f\u6642\uff0c\u901a\u5e38\u8a72\u7dda\u4e0a\u6587\u4ef6\u6703\u6a19\u793a\u54ea\u500b\u4eba\u6b63\u5728\u54ea\u500b\u5730\u65b9\u7de8\u8f2f\uff0c\u9019\u9ebc\u505a\u5176\u5be6\u5c31\u80fd\u5927\u5927\u964d\u4f4e\u540c\u6642\u7de8\u8f2f\u76f8\u540c\u5730\u65b9\u9020\u6210\u7684\u885d\u7a81\u3002
"},{"location":"feedback/designing-data-intensive-applications/distributed-replication/#\u62d3\u64b2","title":"\u62d3\u64b2","text":"\u7576\u9818\u8896\u8d85\u904e\u5169\u500b\u7684\u6642\u5019\uff0c\u5f7c\u6b64\u9593\u6e9d\u901a\u7684\u8def\u5f91\u5c31\u6703\u6709\u5f88\u591a\u7a2e\uff0c\u4e0a\u9762\u63d0\u7684\u662f\u5e38\u898b\u7684\u4e09\u7a2e\u3002
MySQL \u9810\u8a2d\u50c5\u652f\u63f4\u74b0\u72c0\u62d3\u64b2\uff0c\u800c\u74b0\u72c0\u62d3\u64b2\u548c\u661f\u72c0\uff08\u6216\u7a31\u6a39\u72c0\uff09\u62d3\u64b2\u6703\u8ce6\u4e88\u6bcf\u500b\u7bc0\u9ede\u4e00\u500b ID\uff0c\u4e26\u5728\u8907\u88fd\u904e\u7a0b\u4e2d\uff0c\u5728\u8907\u88fd\u65e5\u8a8c\u4e2d\u52a0\u4e0a\u5404\u81ea\u7684 ID\uff0c\u7528\u4f86\u4ee3\u8868\u4ed6\u5df2\u7d93\u8dd1\u904e\u9019\u500b\u8cc7\u6599\u3002\u907f\u514d\u8a72\u8cc7\u6599\u4e00\u76f4\u88ab\u4e1f\u9032\u8907\u88fd\u7684\u8f2a\u8ff4\u4e2d\u3002
\u4e0d\u904e\u74b0\u72c0\u62d3\u64b2\u548c\u661f\u72c0\u62d3\u64b2\u90fd\u6703\u6709\u500b\u7f3a\u9ede\u5c31\u662f\u7576\u5176\u4e2d\u4e00\u500b\u62d3\u64b2\u65b7\u7dda\u4e86\uff0c\u5f88\u53ef\u80fd\u6703\u5c0e\u81f4\u8907\u88fd\u7684\u9023\u7d50\u4e2d\u65b7\uff0c\u7136\u5f8c\u5927\u5bb6\u5fc5\u9808\u7b49\u4ed6\u5fa9\u539f\u3002
\u6700\u5e38\u898b\u7684\u662f\u7b2c\u4e09\u7a2e\uff0call-to-all\u3002\u4e0d\u904e\u4ed6\u5bb9\u6613\u6703\u9700\u8981\u68b3\u7406\u56e0\u679c\uff0c\u6211\u5011\u5f85\u6703\u518d\u4f86\u770b\u9019\u554f\u984c\u3002
\u4e0d\u904e\u91cd\u9ede\u662f\u524d\u9762\u63d0\u7684\u554f\u984c\u90fd\u662f\u53ef\u4ee5\u88ab\u8655\u7406\u7684\uff0c\u4f46\u662f\u8eab\u70ba\u61c9\u7528\u7a0b\u5f0f\u958b\u767c\u4eba\u54e1\uff0c\u6211\u5011\u9700\u8981\u5728\u8a72\u8cc7\u6599\u5eab\u6587\u4ef6\u4e2d\u67e5\u627e\u76f8\u95dc\u8aaa\u660e\uff0c\u7136\u5f8c\u660e\u78ba\u77e5\u9053\u6c92\u6709\u9019\u4e9b\u8655\u7406\u6a5f\u5236\u6642\uff0c\u6211\u5011\u6703\u9047\u5230\u54ea\u4e9b\u554f\u984c\u3002\u4e26\u5be6\u969b\u505a\u904e\u4e00\u4e9b\u6e2c\u8a66\u78ba\u4fdd\u9019\u4e9b\u4fdd\u8b49\u662f\u7b26\u5408\u6211\u5011\u9810\u671f\u7684\u3002
"},{"location":"feedback/designing-data-intensive-applications/distributed-replication/#\u55ae\u4e00\u9818\u8896\u4e5f\u6709\u62d3\u64b2","title":"\u55ae\u4e00\u9818\u8896\u4e5f\u6709\u62d3\u64b2","text":"\u9664\u4e86\u591a\u9818\u8896\u4e4b\u5916\uff0c\u55ae\u4e00\u9818\u8896\u4e5f\u662f\u6709\u62d3\u64b2\u7684\u3002\u4ee5\u5716\u70ba\u4f8b\u5c31\u662f Replication Chain\uff08RC\uff09\u3002
"},{"location":"feedback/designing-data-intensive-applications/distributed-replication/#\u8655\u7406\u885d\u7a81","title":"\u8655\u7406\u885d\u7a81","text":"\u6211\u5011\u4e00\u76f4\u6709\u63d0\u5230\u591a\u9818\u8896\u9700\u8981\u8655\u7406\u885d\u7a81\uff0c\u73fe\u5728\u6211\u5011\u5c31\u4f86\u770b\u770b\u600e\u9ebc\u8655\u7406\u885d\u7a81\u3002
\u4e0a\u8ff0\u65b9\u5f0f\u90fd\u7b97\u65b0\u7684\u65b9\u5f0f\uff0c\u4e26\u4e14\u73fe\u6709\u7684\u8cc7\u6599\u5eab\u901a\u5e38\u5c0d\u65bc\u885d\u7a81\u4e26\u6c92\u6709\u5f88\u597d\u7684\u652f\u63f4\uff0c\u4e00\u6a23\uff0c\u7d30\u770b\u6587\u4ef6\uff0c\u4e26\u505a\u6e2c\u8a66\u3002
\u4f8b\u5982\u4e9e\u99ac\u905c\u4ee5\u524d\u5728\u8655\u7406\u8cfc\u7269\u8eca\u7684\u885d\u7a81\u6642\uff0c\u4ed6\u5011\u8003\u616e\u4e86\u6dfb\u52a0\u7522\u54c1\u6642\u7684\u885d\u7a81\uff0c\u537b\u6c92\u6709\u8003\u616e\u522a\u9664\u6642\u7684\u885d\u7a81\uff0c\u5c0e\u81f4\u660e\u660e\u522a\u9664\u7684\u7522\u54c1\uff0c\u5237\u65b0\u9801\u9762\u5f8c\u53c8\u51fa\u73fe\u5728\u8cfc\u7269\u8eca\u4e4b\u4e2d\u3002
"},{"location":"feedback/designing-data-intensive-applications/distributed-replication/#\u68b3\u7406\u56e0\u679c","title":"\u68b3\u7406\u56e0\u679c","text":"\u56e0\u679c\u6df7\u4e82\u4e26\u4e0d\u662f\u885d\u7a81\uff0c\u4ee5\u4e0a\u5716\u70ba\u4f8b\uff0c\u5169\u500b\u8acb\u6c42\u4e26\u4e0d\u662f\u4e26\u884c\u8655\u7406\uff0c\u800c\u662f\u6709\u76f8\u4f9d\u95dc\u4fc2\u7684\uff0c\u9019\u6642\u9020\u6210\u932f\u8aa4\u7684\u4fbf\u662f\u885d\u7a81\u7684\u6df7\u4e82\u3002
\u6211\u5011\u53ef\u4ee5\u6709\u7684\u505a\u6cd5\u5c31\u662f\u66ff\u5404\u500b\u8acb\u6c42\u6dfb\u52a0 ID\uff0c\u4e5f\u5c31\u662f\u7248\u672c\u5411\u91cf\u3002
"},{"location":"feedback/designing-data-intensive-applications/distributed-replication/#\u7248\u672c\u5411\u91cf","title":"\u7248\u672c\u5411\u91cf","text":"\u70ba\u4e86\u8b93\u4e8b\u60c5\u8b8a\u7c21\u55ae\uff0c\u6211\u5011\u5148\u60f3\u50cf\u53ea\u6709\u4e00\u500b\u8cc7\u6599\u5eab\uff0c\u4e86\u89e3\u539f\u7406\u5f8c\uff0c\u518d\u64f4\u5c55\u5230\u591a\u53f0\u8cc7\u6599\u5eab\u6642\u5c31\u4e0d\u96e3\u4e86\u3002
[milk]
\uff0c\u5b9a\u5176\u70ba\u7248\u672c\u4e00[eggs]
\uff0c\u5f97\u5230\u7248\u672c\u4e00\u7684\u8cc7\u6599 [milk]
\uff0c\u4e26\u5728\u61c9\u7528\u7a0b\u5f0f\u4e2d\u6574\u5408\u5169\u8005\u6210\u70ba [eggs, milk]
[milk, flour]
\uff0c\u5f97\u5230\u7248\u672c\u4e8c\u7684\u8cc7\u6599 [eggs]
\uff0c\u4e26\u5728\u61c9\u7528\u7a0b\u5f0f\u4e2d\u6574\u5408\u5169\u8005\u6210\u70ba [milk, flour, eggs]
[eggs, milk, ham]
\u5f97\u5230\u7248\u672c\u4e09\u7684\u8cc7\u6599 [milk, flour]
\uff0c\u4e26\u6574\u5408\u6210 [eggs, milk, ham, flour]
[milk, flour, eggs, bacon, ham]
\u900f\u904e\u8ce6\u4e88\u5404\u500b\u5beb\u5165\u8acb\u6c42\u4e00\u500b\u7248\u672c\uff0c\u4e26\u5728\u6bcf\u6b21\u9001\u51fa\u8acb\u6c42\u6642\uff0c\u593e\u5e36\u73fe\u6709\u7684\u7248\u672c\uff0c\u4f86\u8b93\u61c9\u7528\u7a0b\u5f0f\u6574\u4f75\uff08\u6216\u8a2d\u7f6e\u8cc7\u6599\u5eab\u8b93\u4ed6\u81ea\u5df1\u6574\u4f75\uff09\u3002\u9019\u4e0d\u50c5\u53ef\u4ee5\u8655\u7406\u885d\u7a81\uff0c\u7576\u767c\u751f\u56e0\u679c\u6df7\u4e82\u6642\uff0c\u6211\u5011\u4e5f\u53ef\u4ee5\u900f\u904e\u7248\u672c\u53bb\u6574\u5408\u885d\u7a81\u3002
\u73fe\u5728\u628a\u8cc7\u6599\u5eab\u64f4\u589e\u5230\u591a\u7248\u672c\uff0c\u9019\u6642\u5c31\u6703\u5f97\u5230\u7248\u672c\u5411\u91cf\uff08version vector\uff09\uff0c\u800c\u975e\u55ae\u4e00\u7248\u672c\u3002
Info
\u7248\u672c\u5411\u91cf\u548c\u6642\u9418\u5411\u91cf\uff08vector clocks\uff09\u662f\u5169\u7a2e\u4e0d\u540c\u7684\u6771\u897f\uff0c\u6642\u9418\u5411\u91cf\u662f\u7528\u4f86\u8b93 \u5206\u6563\u5f0f\u7cfb\u7d71 \u7372\u5f97\u4e00\u500b\u7d71\u4e00\u7684\u905e\u589e\u9806\u5e8f\u3002\u4e4b\u5f8c\u6703\u518d\u8a73\u7d30\u4ecb\u7d39\uff0c\u82e5\u6709\u8208\u8da3\u53ef\u4ee5\u770b\u4e00\u4e0b\u6587\u7ae0\u3002
"},{"location":"feedback/designing-data-intensive-applications/distributed-replication/#\u7121\u9818\u8896","title":"\u7121\u9818\u8896","text":"\u524d\u9762\u5169\u7a2e\u65b9\u5f0f\u90fd\u662f\u8b93\u4f7f\u7528\u8005\u9001\u51fa\u8acb\u6c42\u5230\u7279\u5b9a\u8cc7\u6599\u5eab\uff0c\u4f46\u662f\u7121\u9818\u8896\u7684\u65b9\u5f0f\u662f\u8b93\u4f7f\u7528\u8005\uff08\u900f\u904e\u5354\u8abf\u8005\uff09\u9001\u8acb\u6c42\u5230\u5168\u90e8\uff08\u6216\u5927\u90e8\u5206\uff09\u7684\u8cc7\u6599\u5eab\u3002
\u5176\u5be6\u7121\u9818\u8896\u7684\u6982\u5ff5\u4e26\u4e0d\u65b0\uff0c\u4f46\u662f\u9019\u6982\u5ff5\u5728\u65e9\u671f\u7684\u6548\u7528\u4e26\u4e0d\u660e\u986f\uff0c\u5c24\u5176\u7576\u6642\u4e00\u53f0\u95dc\u9023\u5f0f\u8cc7\u6599\u5eab\u5c31\u53ef\u4ee5\u505a\u5230\u5f88\u591a\u4e8b\u60c5\u7684\u6642\u5019\u3002\u96a8\u8457 Amazon \u958b\u59cb\u63a8\u51fa Dynamo \u7cfb\u7d71\u6642\uff0c\u6709\u8d8a\u4f86\u8d8a\u591a\u8cc7\u6599\u5eab\u4e5f\u652f\u63f4\u9019\u985e\u65b9\u5f0f\u7684\u8907\u88fd\u3002
\u652f\u63f4\u7684\u8cc7\u6599\u5eab\u6709
\u6709\u4e9b\u8cc7\u6599\u5eab\u53e2\u96c6\u5167\u6703\u63d0\u4f9b\u5354\u8abf\u8005\u8ca0\u8cac\u9001\u9019\u4e9b\u8acb\u6c42\u5230\u5404\u500b\u8cc7\u6599\u5eab\uff0c\u6709\u4e9b\u5247\u662f\u8b93\u4f7f\u7528\u8005\u76f4\u63a5\u547c\u53eb\uff08\u900f\u904e SDK \u7b49\u65b9\u5f0f\uff09\u3002
\u548c\u591a\u9818\u8896\u4e00\u6a23\uff0c\u7121\u9818\u8896\u56e0\u70ba\u6bcf\u500b\u8cc7\u6599\u5eab\u7bc0\u9ede\u90fd\u6703\u505a\u5beb\u5165\u7684\u52d5\u4f5c\uff0c\u6240\u4ee5\u5f88\u53ef\u80fd\u6703\u9020\u6210\u5169\u500b\u8cc7\u6599\u5eab\u7684\u72c0\u614b\u4e0d\u4e00\u81f4\uff0c\u4f8b\u5982\u8cc7\u6599\u5eab 1 \u5148\u5beb A \u518d\u5beb B\uff0c\u8cc7\u6599\u5eab 2 \u5148\u5beb B \u518d\u5beb A\u3002
\u9019\u6642\u5c31\u9700\u8981\u8655\u7406\u5169\u500b\u8cc7\u6599\u5eab\u9593\u7684\u885d\u7a81\uff0c\u9084\u8981\u68b3\u7406\u76f8\u95dc\u56e0\u679c\u3002\u4e0d\u904e\u5927\u81f4\u908f\u8f2f\u662f\u5dee\u4e0d\u591a\u7684\u3002
\u4e3b\u8981\u5dee\u5225\u5728\u65bc\u7121\u9818\u8896\u4ed6\u9700\u8981\u5728\u5404\u500b\u8cc7\u6599\u5eab\u9593\u5b9a\u671f\u6574\u4f75\uff0c\u6240\u4ee5\u9019\u6bb5\u7684\u9806\u5e8f\u6703\u662f
\u540c\u6642\u5beb\u5165\u591a\u500b\u8cc7\u6599\u5eab\u5f8c\uff0c\u5982\u679c\u5176\u4e2d\u5e7e\u500b\u8cc7\u6599\u5eab\u56e0\u70ba\u4efb\u4f55\u539f\u56e0\uff08\u7db2\u8def\u5ef6\u9072\u3001\u8cc7\u6599\u5eab\u91cd\u555f\uff09\u7121\u6cd5\u9001\u51fa\u6210\u529f\uff0c\u5c31\u6703\u5c0e\u81f4\u904b\u884c\u7d42\u6b62\u3002\u70ba\u4e86\u7dad\u6301\u9ad8\u53ef\u7528\u6027\u548c\u8cc7\u6599\u7684\u4e00\u81f4\u6027\uff0c\u6211\u5011\u8981\u600e\u9ebc\u9078\u64c7\u5141\u8a31\u5931\u6557\u7684\u8acb\u6c42\u6578\u91cf\uff1f
\u4ee5\u5716\u7247\u70ba\u4f8b\uff0c\u4e94\u500b\u8cc7\u6599\u5eab\uff0c\u6211\u53ea\u8981\u6210\u529f\u5beb\u5165\u548c\u8b80\u53d6\u5404\u4e09\u500b\u8cc7\u6599\u5eab\uff0c\u5c31\u80fd\u78ba\u4fdd\u62ff\u5230\u6700\u65b0\u7684\u8cc7\u6599\u56de\u50b3\u7d66\u4f7f\u7528\u8005\u3002
\u4e5f\u5c31\u662f \\(w+r>n\\)\uff0c\u9019\u88e1\u7684 \\(n\\) \u4ee3\u8868\u8cc7\u6599\u5eab\u7e3d\u6578\u3002
\u4e0d\u904e\u6709\u4e9b\u908a\u969b\u60c5\u6cc1\u6703\u8b93\u9019\u7a2e\u4fdd\u91cd\u5931\u6548\uff1a
\u9019\u7406\u8ad6\u82f1\u6587\u7a31\u70ba qourum\uff0c\u6709\u4e9b\u4eba\u6703\u7ffb\u8b6f\u70ba\u6cd5\u5b9a\u4eba\u6578\uff0c\u4f46\u662f\u6cd5\u5b9a\u4eba\u6578\u9019\u540d\u8a5e\u662f\u7528\u5728\u6cd5\u5f8b\u9818\u57df\u7684\u3002\u4e8b\u5be6\u4e0a\uff0c\u9019\u500b\u7406\u8ad6\u662f\u57fa\u65bc\u9d3f\u5de2\u539f\u7406\u3002\u4e5f\u5c31\u662f\u7576\u6211\u6709\u5341\u96bb\u9d3f\u5b50\uff0c\u4e5d\u500b\u9d3f\u5de2\uff0c\u6211\u5c31\u80fd\u4fdd\u8b49\u6709\u4e00\u500b\u9d3f\u5de2\u6709\u5169\u96bb\u4ee5\u4e0a\u7684\u9d3f\u5b50\u3002
\u6709\u4e9b\u8cc7\u6599\u5eab\u70ba\u4e86\u9ad8\u53ef\u7528\u6027\uff0c\u4e0d\u6703\u6eff\u8db3\u9d3f\u5de2\u539f\u7406\uff0c\u4f8b\u5982\u5728\u4e94\u500b\u8cc7\u6599\u5eab\u4e2d\u50c5\u6210\u529f\u9001\u7d66\u5169\u500b\u8cc7\u6599\u5eab\u5c31\u5b8c\u6210\u8a72\u6b21\u8acb\u6c42\u3002
\u9664\u6b64\u4e4b\u5916\uff0c\u6709\u4e9b\u8cc7\u6599\u5eab\u7576\u767c\u73fe\u6c92\u8fa6\u6cd5\u6eff\u8db3\u9810\u5b9a\u7684\u6578\u91cf\u6642\uff0c\u6703\u628a\u8acb\u6c42\u9001\u5230\u539f\u672c \\(n\\) \u4e4b\u5916\u7684\u8cc7\u6599\u5eab\uff08\u6216\u8005\u653e\u9032\u5354\u8abf\u8005\u672c\u8eab\uff09\uff0c\u9019\u7a2e\u6211\u5011\u7a31\u70ba\u7a00\u8584\u7684\u9d3f\u5de2\uff08sloppy quorum\uff09\u3002\u7576\u539f\u672c\u7121\u6cd5\u9001\u51fa\u7684\u8cc7\u6599\u5eab\u6062\u5fa9\u539f\u72c0\u4e4b\u5f8c\uff0c\u518d\u8b93\u9019\u4e9b\u5099\u63f4\u7684\u8cc7\u6599\u5eab\u628a\u8cc7\u6599\u9001\u56de\u7d66\u9019\u4e9b\u8cc7\u6599\u5eab\uff0c\u9019\u904e\u7a0b\u7a31\u70ba\u63d0\u793a\u79fb\u4ea4\uff08hinted handoff\uff09\u3002
\u7576\u8cc7\u6599\u53e2\u96c6\u8d8a\u4f86\u8d8a\u5927\uff0c\u4f60\u8981\u9001\u51fa\u7684\u8acb\u6c42\u5f88\u591a\uff0c\u9019\u4ee3\u8868\u8d8a\u4f86\u8d8a\u5bb9\u6613\u51fa\u73fe\u7121\u6cd5\u6b63\u78ba\u9001\u51fa\u7684\u72c0\u6cc1\uff0c\u9019\u6642\u8cc7\u6599\u5eab\u6703\u8d8a\u4f86\u8d8a\u96e3\u7dad\u6301\u4e00\u81f4\u6027\u3002\u6240\u4ee5\u9700\u8981\u6709\u4e00\u500b\u65b9\u6cd5\u4f86\u8655\u7406\u9019\u4ef6\u4e8b\uff0c\u6211\u5011\u4e0b\u9762\u5c31\u662f\u5728\u8a0e\u8ad6\u9019\u4ef6\u4e8b\u3002
"},{"location":"feedback/designing-data-intensive-applications/distributed-replication/#\u7dad\u6301\u8cc7\u6599\u5eab\u7684\u4e00\u81f4\u6027","title":"\u7dad\u6301\u8cc7\u6599\u5eab\u7684\u4e00\u81f4\u6027","text":"\u7576\u4e0d\u80fd\u5beb\u5165\u7684\u8cc7\u6599\u5eab\u9694\u4e86\u4e00\u6bb5\u6642\u9593\u6062\u5fa9\u539f\u72c0\u4e86\uff0c\u6211\u5011\u6703\u5728\u4e0b\u6b21\u8b80\u53d6\u7684\u6642\u5019\uff0c\u628a\u9019\u500b\u8cc7\u6599\u5eab\u7684\u8cc7\u6599\u5408\u6210\u5230\u6700\u65b0\u7684\u8cc7\u6599\u3002\u9019\u500b\u52d5\u4f5c\u6211\u5011\u7a31\u70ba\u8b80\u53d6\u6642\u5fa9\u539f\uff08read repair\uff09\u3002
\u4f46\u662f\u9019\u4ee3\u8868\uff0c\u5982\u679c\u8cc7\u6599\u6c92\u88ab\u8b80\u53d6\uff0c\u4ed6\u6c38\u9060\u4e0d\u6703\u539f\u6301\u6700\u65b0\u8cc7\u6599\uff0c\u8a72\u600e\u9ebc\u80cc\u666f\u8655\u7406\uff1f
"},{"location":"feedback/designing-data-intensive-applications/distributed-replication/#\u5b9a\u671f\u6574\u4f75","title":"\u5b9a\u671f\u6574\u4f75","text":"dynamo-style \u8cc7\u6599\u5eab\u6703\u4f7f\u7528\u53cd\u71b5\uff08anti-entropy process\uff09\u5b9a\u671f\u8b93\u5169\u500b\u8cc7\u6599\u5eab\u7684\u8cc7\u6599\u9054\u6210\u4e00\u81f4\u6027\u3002\u900f\u904e Merkle tree\uff0c\u53ef\u4ee5\u5feb\u901f\u627e\u5230\u5169\u500b\u8cc7\u6599\u5eab\u9593\u7684\u5dee\u7570\uff0c\u4e26\u50b3\u905e\u5f7c\u6b64\u7684\u5dee\u7570\u4f86\u9054\u6210\u540c\u6b65\u3002
\u4e0d\u904e\u4e26\u4e0d\u662f\u6240\u6709\u8cc7\u6599\u5eab\u6709\u5be6\u4f5c\u9019\u500b\u884c\u70ba\uff08\u4f8b\u5982 Voldemort\uff09\uff0c\u9664\u6b64\u4e4b\u5916\u53cd\u71b5\u4e26\u4e0d\u4fdd\u4f4f\u8cc7\u6599\u5beb\u5165\u7684\u9806\u5e8f\uff0c\u6240\u4ee5\u5f88\u53ef\u80fd\u6703\u9020\u6210\u8cc7\u6599\u7684\u885d\u7a81\u3002
"},{"location":"feedback/designing-data-intensive-applications/distributed-replication/#\u7121\u9818\u8896\u7684\u512a\u7f3a\u9ede","title":"\u7121\u9818\u8896\u7684\u512a\u7f3a\u9ede","text":"\u56e0\u70ba\u6709\u9d3f\u5de2\u539f\u7406\uff0c\u53ef\u4ee5\u4fdd\u8b49\u8cc7\u6599\u7684\u4e00\u81f4\u6027\uff0c\u4e26\u5141\u8a31\u90e8\u5206\u7684\u7570\u6b65\u4f86\u9054\u6210\u9ad8\u53ef\u7528\u6027\u3002
\u9664\u6b64\u4e4b\u5916\uff0c\u56e0\u70ba\u9d3f\u5de2\u539f\u7406\u8b93\u4ed6\u4e0d\u9700\u8981\u5f37\u5236\u7b49\u5230\u6240\u6709\u8acb\u6c42\u9001\u51fa\u6210\u529f\uff0c\u6240\u4ee5\u8cc7\u6599\u5eab\u53ef\u4ee5\u900f\u904e\u7570\u6b65\u7684\u65b9\u5f0f\u628a\u8acb\u6c42\u9001\u5230\u5225\u7684\u8cc7\u6599\u4e2d\u5fc3\u3002
\u7136\u800c\u5beb\u5165\u7684\u8acb\u6c42\u5f88\u53ef\u80fd\u6703\u5728\u6eff\u8db3\u4e00\u81f4\u6027\u7684\u904e\u7a0b\u4e2d\u5c0e\u81f4\u9806\u5e8f\u88ab\u91cd\u7f6e\uff0c\u9019\u5c31\u4ee3\u8868\u8cc7\u6599\u4e0d\u80fd\u904e\u65bc\u8907\u96dc\uff08dyanmo-style \u7684\u8cc7\u6599\u540c\u5e38\u90fd\u662f k-v pair\uff09\uff0c\u624d\u80fd\u8b93\u5373\u4f7f\u8cc7\u6599\u5beb\u5165\u9806\u5e8f\u88ab\u6253\u4e82\uff0c\u4ecd\u80fd\u6709\u6548\u904b\u4f5c\u3002
"},{"location":"feedback/designing-data-intensive-applications/distributed-replication/#\u5176\u4ed6","title":"\u5176\u4ed6","text":"\u7576\u591a\u500b\u8cc7\u6599\u5eab\u9032\u884c\u8907\u88fd\u6642\uff0c\u80af\u5b9a\u6703\u51fa\u73fe\u5ef6\u9072\u5c0e\u81f4\u8cc7\u6599\u7684\u4e0d\u4e00\u81f4\u3002\u5c31\u597d\u50cf\u6211\u5011\u4e0a\u6b21\u63d0\u7684\u7af6\u8cfd\u72c0\u6cc1\u4e00\u6a23\uff0c\u6709\u54ea\u4e9b\u72c0\u6cc1\u8ddf\u54ea\u4e9b\u8655\u7406\u4e0a\uff1f\u8907\u88fd\u5ef6\u9072\u6211\u5011\u6703\u5728\u4e0b\u4e00\u6b21\u7684\u5206\u5340\u8a0e\u8ad6\uff01
\u9664\u6b64\u4e4b\u5916\uff0c\u6709\u4e9b\u8cc7\u6599\u5eab\u6703\u63d0\u4f9b\u63a5\u53e3\uff0c\u8b93\u7dad\u904b\u4eba\u54e1\u77e5\u9053\u73fe\u5728\u8cc7\u6599\u5eab\u7684\u4e00\u81f4\u6027\u72c0\u6cc1\u3002\u901a\u5e38\u9818\u8896\u985e\u578b\u7684\u8907\u88fd\u65b9\u5f0f\u5f88\u597d\u505a\uff0c\u900f\u904e\u9818\u8896\u548c\u8ddf\u96a8\u8005\u90fd\u6bd4\u8f03\u4f86\u627e\u51fa\u5dee\u7570\u3002\u4f46\u662f\u5728\u7121\u9818\u8896\u7684\u5206\u6563\u5f0f\u8cc7\u6599\u5eab\u4e2d\uff0c\u56e0\u70ba\u8cc7\u6599\u7684\u5beb\u5165\u662f\u975e\u9806\u5e8f\u6027\u7684\uff0c\u505a\u6cd5\u5c31\u6703\u6eff\u56f0\u96e3\u7684\u3002\u9019\u9818\u57df\u4ecd\u5728\u7814\u7a76\u4e2d\uff0c\u800c\u4e14\u5be6\u4f5c\u7684\u6bd4\u4f8b\u8f03\u4f4e\u3002
\u5927\u90e8\u5206\u7dad\u904b\u6a5f\u5668\u7684\u6210\u672c\u90fd\u662f\u5728\u96fb\u91cf\u4e0a\uff0c\u82e5\u6709\u4e00\u500b\u4e0d\u9700\u8981\u50b3\u9001\u5927\u91cf\u8cc7\u6599\u4e14\u50b3\u9001\u7684\u983b\u7387\u4e0d\u9ad8\u7684\u6f14\u7b97\u6cd5\uff0c\u5c31\u53ef\u4ee5\u7701\u5f88\u591a\u9322\uff01
"},{"location":"feedback/designing-data-intensive-applications/distributed-replication/#\u7e3d\u7d50","title":"\u7e3d\u7d50","text":"\u6211\u5011\u958b\u982d\u8ac7\u4e86\u5206\u6563\u5f0f\u8cc7\u6599\u5eab\u7684\u597d\u8655\u3002\u4e26\u5340\u5206\u4e86\u5169\u7a2e\u8655\u7406\u65b9\u5f0f\u2014\u8907\u88fd\u3001\u5206\u5340\u3002\u9019\u6b21\u96c6\u4e2d\u8a0e\u8ad6\u5982\u4f55\u505a\u5230\u591a\u8cc7\u6599\u5eab\u7684\u8907\u88fd\u3002
\u5404\u500b\u8907\u88fd\u65b9\u5f0f\u5f7c\u6b64\u90fd\u6709\u6b0a\u8861\uff0c\u5982\u679c\u4f60\u7684\u8cc7\u6599\u4e26\u4e0d\u8907\u96dc\uff0c\u5c31\u53ef\u4ee5\u8003\u616e\u4f7f\u7528\u7121\u9818\u8896\u7684\u65b9\u5f0f\u3002\u5982\u679c\u4f60\u53ea\u9700\u8981\u5728\u55ae\u4e00\u8cc7\u6599\u4e2d\u5fc3\u5efa\u7acb\u8cc7\u6599\u53e2\u96c6\uff0c\u5c31\u53ef\u4ee5\u8003\u616e\u55ae\u4e00\u9818\u8896\u7684\u8907\u88fd\u65b9\u5f0f\u3002
Network Attached Storage(NAS)\u00a0\u21a9
Storage Area Network(SAN)\u00a0\u21a9
\u56de\u9867\u4e00\u4e0b\u8cc7\u6599\u5eab\u548c\u884d\u751f\u8cc7\u6599\u6700\u5f8c\u518d\u6574\u5408\u8d77\u4f86\u3002
HackMD \u5831\u544a\u6587\u672c
"},{"location":"feedback/designing-data-intensive-applications/farewell/#\u7e3d\u7d50","title":"\u7e3d\u7d50","text":"\u9019\u88e1\u6211\u5011\u7e3d\u7d50\u4e00\u4e0b\u8cc7\u6599\u5eab\u76f8\u95dc\u77e5\u8b58\uff0c\u5305\u62ec\u5206\u6563\u5f0f\u8cc7\u6599\u5eab\u548c\u884d\u751f\u8cc7\u6599\u7cfb\u7d71\u3002
"},{"location":"feedback/designing-data-intensive-applications/farewell/#\u8cc7\u6599\u5eab\u57fa\u790e","title":"\u8cc7\u6599\u5eab\u57fa\u790e","text":"\u6839\u64da\u5546\u52d9\u908f\u8f2f\u9078\u64c7\u8cc7\u6599\u6a21\u578b\uff0c\u53ef\u80fd\u6709 \u95dc\u806f\u5f0f\u3001\u6587\u4ef6\u5f0f\u3001\u5716\u50cf\u5f0f \u7b49\u7b49\uff0c\u5176\u4ed6\u4e0d\u5e38\u898b\u7684\u6a21\u578b\u5c31\u6703\u6839\u64da\u7279\u6b8a\u9700\u6c42\u8a2d\u8a08\uff0c\u4f8b\u5982\u57fa\u56e0\u8cc7\u6599\u5eab\u3002
\u6839\u64da\u4e0d\u540c\u8cc7\u6599\u6a21\u578b\u6703\u4f7f\u7528\u4e0d\u540c\u641c\u5c0b\u8a9e\u8a00\uff0c \u5e38\u898b\u7684 SQL \u662f \u5ba3\u544a\u5f0f\uff08\u5ba3\u544a\u8981\u4ec0\u9ebc\u62bd\u8c61\u7684\u7d50\u679c\uff09\u7684\u8a9e\u8a00\uff0c \u5176\u4ed6\u9084\u6709\u50cf\u7a0b\u5f0f\u78bc\u4e00\u6a23\u64c1\u6709\u9ad8\u5f48\u6027\u7684 \u547d\u547d\u5f0f\uff08\u4e00\u6b65\u4e00\u6b65\u547d\u4ee4\u8cc7\u6599\u5eab\u505a\u4ec0\u9ebc\u4e8b \u8ddf\u4e0d\u5e38\u898b\u4f46\u662f\u5728\u7279\u6b8a\u60c5\u6cc1\u975e\u5e38\u597d\u7528\u7684 \u908f\u8f2f\u5f0f\uff08\u4e0d\u5beb\u884c\u70ba\u800c\u662f\u5beb\u908f\u8f2f\uff09\u3002
\u908f\u8f2f\u5f0f\u7684\u4f7f\u7528\u5834\u666f
\u5728\u5716\u50cf\u5f0f\u8cc7\u6599\u5eab\u4e2d\u641c\u5c0b\u300c\u51fa\u751f\u5728\u53f0\u5317\u4f46\u662f\u642c\u53bb\u53f0\u5357\u7684\u4f7f\u7528\u8005\u300d\uff0c \u6211\u5011\u53ef\u4ee5\u900f\u904e\u544a\u8a34\u8cc7\u6599\u5eab\u300c\u4ec0\u9ebc\u662f\u4f4f\u5728\u53f0\u5317\u300d \uff08\u544a\u77e5\u908f\u8f2f\u800c\u975e\u547d\u4ee4\uff0cedge=born
\u4e0d\u7b49\u65bc if (edge=born) return true;
\uff09 \u9084\u6709\u300c\u4ec0\u9ebc\u662f\u642c\u53bb\u53f0\u5357\u300d\uff08edge=migration, node=Tainan
\uff09\u8b93\u8cc7\u6599\u5eab\u53ef\u4ee5\u627e\u5230\u6211\u5011\u60f3\u8981\u7684\u8cc7\u6599\u3002
\u70ba\u4ec0\u9ebc\u4e0a\u8ff0\u4f8b\u5b50\u6703\u4f7f\u7528 \u5716\u50cf\u5f0f \u548c \u908f\u8f2f\u5f0f \u641c\u5c0b\uff1f
\u7531\u65bc\u5730\u7406\u95dc\u4fc2\u4e0d\u80fd\u7c21\u55ae\u7528 \u95dc\u806f\u5f0f \u8cc7\u6599\u5eab\u8868\u793a \uff08\u4f8b\u5982 \u67d0\u5730 \u5305\u542b\u65bc \u67d0\u5e02 \u7b49\u7b49\uff0c\u9019\u7a2e\u95dc\u4fc2\u5728 \u95dc\u806f\u5f0f \u4e2d\u6703\u8b93\u8cc7\u6599\u5bb9\u6613\u5197\u9577\uff09\uff0c \u6240\u4ee5\u7528\u5716\u50cf\u5f0f\u3002\u800c \u5716\u50cf\u5f0f \u7684\u641c\u5c0b\u53c8\u5e38\u5e38\u6709\u5546\u52d9\u908f\u8f2f\u5728\u5176\u4e2d\uff0c\u6240\u4ee5\u505a\u6210 \u5ba3\u544a\u5f0f \u6c92\u90a3\u9ebc\u65b9\u4fbf\u3002
\u63a5\u8457\u6211\u5011\u628a\u7126\u9ede\u5f9e\u61c9\u7528\u7a0b\u5f0f\u653e\u5230\u8cc7\u6599\u5eab\u4e2d\uff0c\u7576\u8cc7\u6599\u5eab\u8981\u5f9e\u6a94\u6848\u7cfb\u7d71\u4e2d\u62ff\u8cc7\u6599\u6642\uff0c \u4ed6\u600e\u9ebc\u8fa6\u5230\u5feb\u901f\u5728\u832b\u832b\u8cc7\u6599\u6d77\u4e2d\u627e\u5230\u6307\u5b9a\u8cc7\u6599\u7684\uff1f\u900f\u904e\u7d22\u5f15\u3002 \u6211\u5011\u5148\u5f9e \u6563\u5217\u5f0f\u7d22\u5f15 \u4e86\u89e3\u5982\u4f55\u900f\u904e key-value \u7d44\u5408\u5efa\u69cb\u5f37\u5927\u7684\u8a18\u61b6\u9ad4\u7d22\u5f15\uff0c \u4f9d\u6b64\u5ef6\u4f38\u7684 \u6392\u5e8f\u5b57\u4e32\u8868 \u5247\u662f\u5229\u7528\u9644\u52a0\u9032\u65e5\u8a8c\u7684\u65b9\u5f0f\u628a\u8cc7\u6599\u5b58\u9032\u6a94\u6848\u7cfb\u7d71\u3002 \u5229\u7528\u786c\u9ad4\u5929\u751f\u9069\u5408\u9644\u52a0\u7684\u7279\u6027\u548c\u80cc\u666f\u57f7\u884c\u7684\u7dca\u58d3\uff08compaction\uff09\uff0c \u4fdd\u6301\u6392\u5e8f\u4e14\u7dca\u5bc6\u7684\u65e5\u8a8c\u53ef\u4ee5\u8b93\u4ed6\u540c\u6642\u9069\u5408\u5beb\u5165\u548c\u8b80\u53d6\u3002\u6700\u5f8c\u518d\u63d0\u5e38\u898b\u7684 b-tree \u548c\u5176\u8207\u6392\u5e8f\u5b57\u4e32\u8868\u7684\u6bd4\u8f03\u3002
\u4e86\u89e3\u8cc7\u6599\u5eab\u600e\u9ebc\u5feb\u901f\u62ff\u53d6\u6307\u5b9a\u8cc7\u6599\u4e4b\u5f8c\uff0c\u6211\u5011\u4f86\u770b\u770b\u53e6\u4e00\u7a2e\u7d22\u5f15\uff0c\u884c\u5f0f\u7d22\u5f15\u3002 \u6709\u4e9b\u641c\u5c0b\u4e0d\u662f\u6307\u5b9a\u8cc7\u6599\uff0c\u800c\u662f\u7bc4\u570d\u8cc7\u6599\uff0c\u4f8b\u5982\u9019\u500b\u6708\u7684\u8a3b\u518a\u8005\u6578\u91cf\uff0c\u9019\u7a2e\u641c\u5c0b\u6211\u5011\u7a31\u70ba OLAP\u3002 \u9019\u6bb5\u6211\u5011\u63d0\u4e86\u5f88\u591a\u8cc7\u6599\u5eab\u600e\u9ebc\u548c\u5e95\u5c64 OS \u548c\u786c\u9ad4\u6e9d\u901a\uff0c\u4e26\u512a\u5316\u9019\u4e00\u7cfb\u5217\u7684\u904e\u7a0b\u3002
\u4e86\u89e3\u61c9\u7528\u7a0b\u5f0f\u548c\u8cc7\u6599\u5eab\u7684\u904b\u4f5c\u57fa\u790e\u4e4b\u5f8c\uff0c\u6211\u5011\u518d\u4f86\u770b\u770b\u8cc7\u6599\u5eab\u600e\u9ebc\u548c\u61c9\u7528\u7a0b\u5f0f\u6216\u672c\u5730\u4e3b\u6a5f\u6e9d\u901a\uff1a \u7de8\u78bc\u3002\u5e38\u898b\u7684 JSON/CSV/XML \u4e0d\u592a\u9069\u5408\u7528\u4f86\u505a\u8cc7\u6599\u5eab\u7684\u7de8\u78bc\uff0c \u56e0\u70ba\u6548\u7387\u4f4e\u843d\u3001\u8cc7\u6599\u80a5\u5927\u548c\u4e0d\u6613\u6f14\u9032\u3002 \u96a8\u8457\u61c9\u7528\u7a0b\u5f0f\u7684\u908f\u8f2f\u6539\u8b8a\uff0c\u8cc7\u6599\u5eab\u7684\u7db1\u76ee\u6703\u88ab\u6539\u8b8a\uff0c\u9019\u4e4b\u4e2d\u7684\u7de8\u78bc\u9700\u8981\u9069\u61c9\u6f14\u9032\u3002 \u9019\u4e4b\u4e2d\u63d0\u4e86\u5e7e\u500b\u6709\u8da3\u7684\u7de8\u78bc\uff0c\u503c\u5f97\u6ce8\u610f\u7684\u662f Apache Avro \u5982\u4f55\u9069\u61c9\u6f14\u9032\u548c\u7121\u7db1\u76ee\u7684\u67b6\u69cb\u3002
"},{"location":"feedback/designing-data-intensive-applications/farewell/#\u5bb9\u932f\u6a5f\u5236","title":"\u5bb9\u932f\u6a5f\u5236","text":"\u4e26\u884c\u7684\u8acb\u6c42\u6703\u8b93\u8cc7\u6599\u5eab\u72c0\u614b\u51fa\u932f\uff0c\u4f8b\u5982\u540c\u6642\u6709\u4eba\u8a02\u7968\u3002\u5728\u55ae\u53f0\u8cc7\u6599\u5eab\u4e2d\uff0c \u8070\u660e\u7684\u958b\u6cd5\u8005\u5617\u8a66\u628a\u53ef\u80fd\u767c\u751f\u7684\u554f\u984c\u90fd\u900f\u904e\u4ea4\u6613\u6a5f\u5236\u4f86\u907f\u514d\u3002 \u4ea4\u6613\u6a5f\u5236\u63d0\u4f9b\u5169\u9805\u4fdd\u8b49\uff1a
\u8981\u6ce8\u610f\u7684\u662f\u53ea\u6709\u9694\u96e2\u6027\u80fd\u907f\u514d\u7af6\u8cfd\u72c0\u6cc1\uff0c\u81f3\u65bc\u539f\u5b50\u6027\u53ea\u662f\u63d0\u4f9b\u8cc7\u6599\u5eab\u5bb9\u932f\u7684\u6a5f\u5236\u4e5f\u5c31\u662f\u767c\u751f\u4efb\u4f55\u554f\u984c\u90fd\u4e0d\u6703\u628a\u554f\u984c\u6b98\u7559\u5728\u72c0\u614b\u4e2d\uff0c\u800c\u662f\u56de\u5230\u6700\u4e00\u958b\u59cb\u6b63\u5e38\u7684\u72c0\u614b\u3002
"},{"location":"feedback/designing-data-intensive-applications/farewell/#\u9694\u96e2\u6027\u7684\u7b49\u7d1a","title":"\u9694\u96e2\u6027\u7684\u7b49\u7d1a","text":"\u9694\u96e2\u6027\uff08isolation\uff09\u7684\u4e16\u754c\u975e\u5e38\u8907\u96dc\uff0c\u4e0d\u53ea\u662f\u56e0\u70ba\u5be6\u4f5c\u6642\u9700\u8981\u6ce8\u610f\u7684\u7709\u7709\u89d2\u89d2\u66f4\u662f\u56e0\u70ba\u5e02\u9762\u4e0a\u6709\u975e\u5e38\u975e\u5e38\u591a\u7684\u8cc7\u6599\u5eab\uff0c\u800c\u6bcf\u500b\u8cc7\u6599\u5eab\u5c0d\u65bc\u9694\u96e2\u6027\u7684\u5b9a\u7fa9\u90fd\u4e0d\u592a\u4e00\u6a23\u3002\u8d8a\u5f37\u7684\u9694\u96e2\u6027\u901a\u5e38\u4ee3\u8868\u8cc7\u6599\u5eab\u64c1\u6709\u8d8a\u5f37\u7684\u4e00\u81f4\u6027\uff08consistency\uff09\uff1a
\u4f7f\u7528\u63d0\u4ea4\u5f8c\u7684\u8cc7\u6599\uff08no-dirty-read + no-dirty-write\uff09\uff1a\u4e00\u822c\u4f86\u8aaa\u662f\u9694\u96e2\u6027\u4e2d\u6700\u5f31\u7684\uff0c\u900f\u904e\u52a0\u9396\uff08\u53ea\u52a0\u5beb\u5165\u7684\uff09\u8b93\u5169\u500b\u4ea4\u6613\u9593\u4e0d\u6703\u4e92\u76f8\u5f71\u97ff\uff0c\u4e26\u5728\u63d0\u4ea4\u4ea4\u6613\u5f8c\u624d\u6574\u5408\u9032\u8cc7\u6599\u5eab\u907f\u514d\u4ea4\u6613\u9593\u770b\u5230\u5f7c\u6b64\u5c1a\u672a\u63d0\u4ea4\u7684\u72c0\u614b\u3002
\u5feb\u7167\u9694\u96e2\uff1a\u7576 \u4ea4\u6613A
\u958b\u59cb\u57f7\u884c\u5f8c\uff0c\u4ea4\u6613B
\u5b8c\u6210\u63d0\u4ea4\uff0c\u9032\u800c\u5f71\u97ff \u4ea4\u6613A
\u7684\u5224\u65b7\uff08\u56e0\u70ba \u4ea4\u6613B
\u5b8c\u6210\u63d0\u4ea4\u6703\u8b93\u65b0\u7684\u72c0\u614b\u901a\u904e \u4f7f\u7528\u63d0\u4ea4\u5f8c\u7684\u8cc7\u6599 \u7684\u6aa2\u67e5\uff09\uff0c\u9019\u6642\u53ef\u4ee5\u4f7f\u7528 MVCC\uff0c\u66ff\u6bcf\u500b\u4ea4\u6613\u958b\u59cb\u7576\u4e0b\u5efa\u7acb\u8cc7\u6599\u7248\u672c\uff0c\u907f\u514d\u8b80\u5230\u932f\u8aa4\u72c0\u614b
\u5e8f\u5217\u5316\u9694\u96e2\uff1a\u6709\u4e9b\u8cc7\u6599\u5eab\u900f\u904e\u55ae\u4e00\u57f7\u884c\u5e8f\uff08\u4f8b\u5982 Redis\uff09\u4f86\u9054\u6210\u5e8f\u5217\u5316\u7684\u4e00\u81f4\u6027\uff0c\u4f46\u662f\u5176\u4ed6\u4f7f\u7528\u6a94\u6848\u7cfb\u7d71\u7684\u8cc7\u6599\u5eab\u7121\u6cd5\u7528\u9019\u7a2e\u65b9\u5f0f\uff0c\u5426\u5247\u6548\u80fd\u6703\u56b4\u91cd\u53d7\u5230\u786c\u789f\u8b80\u53d6\u7684\u5f71\u97ff\uff0c2PL \u900f\u904e\u8b93\u8b80\u53d6\u7684\u8acb\u6c42\u4e5f\u52a0\u4e0a\u9396\u4f86\u63d0\u4f9b\u5e8f\u5217\u5316\u9694\u96e2\uff0c\u4f46\u662f OLTP \u7684\u8acb\u6c42\u5927\u90e8\u5206\u90fd\u662f\u8b80\u53d6\u8acb\u6c42\uff0c\u6240\u4ee5\u9019\u65b9\u6cd5\u6703\u56b4\u91cd\u5f71\u97ff\u6548\u80fd\u3002\u5feb\u7167\u5e8f\u5217\u5316\u9694\u96e2\uff08SSI\uff09\u53ef\u4ee5\u4fdd\u8b49\u6548\u7387\u53c8\u80fd\u63d0\u4f9b\u9694\u96e2\u6027\uff0c\u4f46\u662f\u65b9\u6cd5\u8f03\u65b0\uff0c\u5f85\u6642\u9593\u7684\u8003\u9a57\u8b93\u9019\u6f14\u7b97\u6cd5\u8f03\u7a69\u5b9a\u3002
"},{"location":"feedback/designing-data-intensive-applications/farewell/#\u5206\u6563\u5f0f\u8cc7\u6599\u5eab","title":"\u5206\u6563\u5f0f\u8cc7\u6599\u5eab","text":"\u96a8\u8457\u8cc7\u6599\u548c\u6d41\u91cf\u7684\u6210\u9577\uff0c\u6211\u5011\u9700\u8981\u5206\u5340\u548c\u8907\u88fd\u7684\u5e6b\u5fd9\u3002
\u8907\u88fd\u5e6b\u52a9\u6211\u5011\u63d0\u9ad8\u6574\u500b\u7cfb\u7d71\u7684\u53ef\u7528\u6027\uff0c\u7576\u4e00\u53f0\u8cc7\u6599\u5eab\u56e0\u70ba\u4efb\u4f55\u539f\u56e0\u7121\u6cd5\u56de\u61c9\u8acb\u6c42\u6642\uff0c\u5176\u4ed6\u8cc7\u6599\u5eab\u5c31\u53ef\u4ee5\u5e6b\u5fd9\u3002\u540c\u6642\u900f\u904e\u628a\u6d41\u91cf\u5e73\u5747\u5206\u914d\u65bc\u5404\u500b\u8907\u88fd\u4e2d\uff0c\u5c31\u80fd\u9054\u5230\u975e\u5e38\u6709\u6548\u7684\u8ca0\u8f09\u5e73\u8861\u3002\u4f46\u662f\u56e0\u70ba\u4e0d\u540c\u8cc7\u6599\u5eab\u53ef\u80fd\u4e0d\u662f\u5b8c\u5168\u4e00\u6a23\u7684\u6240\u4ee5\u6703\u6709\u72c0\u614b\u4e0d\u4e00\u81f4\u7684\u72c0\u6cc1\u3002\u8d8a\u662f\u8981\u6c42\u4e0d\u540c\u8cc7\u6599\u5eab\u7684\u72c0\u614b\u4e00\u81f4\u6027\uff0c\u901a\u5e38\u5c31\u6703\u72a7\u7272\u8907\u88fd\u7684\u6548\u80fd\u3002
\u5206\u5340\u5e6b\u52a9\u6211\u5011\u8212\u89e3\u8cc7\u6599\u8d8a\u9577\u8d8a\u5927\uff0c\u55ae\u53f0\u7bc0\u9ede\u7121\u6cd5\u8ca0\u8377\u7684\u72c0\u6cc1\uff0c\u540c\u6642\u5728\u90e8\u5206\u72c0\u6cc1\u4e0b\uff0c\u4e5f\u80fd\u505a\u5230\u8ca0\u8f09\u5e73\u8861\u7684\u6548\u679c\uff0c\u7576\u8cc7\u6599\u5eab\u8655\u7406\u6307\u5b9a\u8cc7\u6599\uff08\u4f8b\u5982\u4f7f\u7528\u8005 1234 \u7684\u8cc7\u8a0a\uff09\u7684\u8acb\u6c42\u6642\uff0c\u5c31\u53ef\u4ee5\u628a\u8acb\u6c42\u9001\u5230\u64c1\u6709\u8a72\u8cc7\u6599\u7684\u5206\u5340\uff0c\u4f46\u662f\u5982\u679c\u8655\u7406\u7684\u8acb\u6c42\u9700\u8981\u591a\u500b\u5206\u5340\u7684\u8cc7\u6599\uff08\u4f8b\u5982\u4f7f\u7528\u8005\u7684\u5e73\u5747\u5e74\u9f61\uff09\u6642\uff0c\u5c31\u6703\u63d0\u9ad8\u56de\u61c9\u6642\u9593\u548c\u932f\u8aa4\u767c\u751f\u7684\u6a5f\u7387\u3002\u6240\u4ee5\u5206\u5340\u6703\u9762\u81e8\u8cc7\u6599\u9023\u7e8c\u6027\u548c\u8cc7\u6599\u5206\u5340\u5e73\u8861\u7684\u6b0a\u8861\uff0c\u8d8a\u9ad8\u7684\u9023\u7e8c\u6027\u4ee3\u8868\u53ef\u4ee5\u505a\u5230\u8d8a\u597d\u7684\u7bc4\u570d\u641c\u5c0b\uff0c\u8d8a\u9ad8\u7684\u5e73\u8861\uff08\u8cc7\u6599\u5e73\u5747\u6253\u6563\u5230\u5206\u5340\uff09\u4ee3\u8868\u80fd\u505a\u5230\u8d8a\u597d\u7684\u8ca0\u8f09\u5e73\u8861\u3002
"},{"location":"feedback/designing-data-intensive-applications/farewell/#\u8907\u88fd","title":"\u8907\u88fd","text":"\u8981\u505a\u5230\u8907\u88fd\u4e3b\u8981\u6709\u4e09\u7a2e\u65b9\u5f0f\uff1a
\u55ae\u4e00\u9818\u8896\u56e0\u70ba\u9ad8\u5ea6\u4f9d\u8cf4\u552f\u4e00\u7684\u9818\u8896\uff0c\u7576\u9818\u8896\u5931\u80fd\u6642\u91cd\u9078\u9818\u8896\u7684\u6a5f\u5236\u5fc5\u9808\u8981\u8b39\u614e\u8a2d\u8a08\u5426\u5247\u5bb9\u6613\u9020\u6210\u8907\u6b0a\uff08split brain\uff09\u7684\u554f\u984c\uff0c\u9664\u6b64\u4e4b\u5916\u56e0\u70ba\u53d7\u9650\u65bc\u55ae\u4e00\u9818\u8896\u7684\u5730\u7406\u4f4d\u7f6e\uff0c\u4e0d\u597d\u505a\u5230\u591a\u8cc7\u6599\u4e2d\u5fc3\u7684\u7d50\u69cb\u3002\u55ae\u4e00\u9818\u8896\u6700\u5927\u512a\u52e2\u5728\u65bc\u6240\u6709\u7570\u52d5\u90fd\u5728\u9818\u8896\u5b8c\u6210\uff0c\u4e0d\u6703\u6709\u5169\u500b\u7570\u52d5\u885d\u7a81\u7684\u72c0\u6cc1\u3002
\u591a\u9818\u8896\u56e0\u70ba\u5141\u8a31\u591a\u500b\u7bc0\u9ede\u57f7\u884c\u7570\u52d5\uff0c\u7576\u7570\u52d5\u9593\u9020\u6210\u885d\u7a81\u5c31\u9700\u8981\u900f\u904e\u4e00\u4e9b\u6f14\u7b97\u6cd5\u89e3\u885d\u7a81\uff0c\u9019\u8b93\u591a\u9818\u8896\u7684\u53e2\u96c6\u8f03\u5c11\u88ab\u5be6\u73fe\u3002
\u7121\u9818\u8896\u548c\u76f4\u89c0\u4e0a\u5f88\u597d\u7406\u89e3\u7684\u9818\u8896\u985e\u578b\u53e2\u96c6\u4e0d\u540c\uff0c\u4e14\u662f\u8fd1\u5e7e\u5e74\u624d\u53c8\u91cd\u65b0\u53d7\u5230\u95dc\u6ce8\u7684\u8907\u88fd\u65b9\u5f0f\u3002\u900f\u904e\u61c9\u7528\u7a0b\u5f0f\u548c\u8cc7\u6599\u5eab\u4e2d\u9593\u7684\u5354\u8abf\u8005\uff08\u5354\u8abf\u8005\u662f\u7121\u72c0\u614b\uff0c\u6240\u4ee5\u53ef\u4ee5\u50cf\u61c9\u7528\u7a0b\u5f0f\u822c\u5f88\u5bb9\u6613\u9054\u5230\u9ad8\u53ef\u7528\uff09\u4f86\u5e6b\u52a9\u8acb\u6c42\u9001\u5230\u6240\u6709\u8cc7\u6599\u5eab\u3002\u900f\u904e \u9d3f\u5de2\u539f\u7406 \u53ef\u4ee5\u4fdd\u8b49\u8cc7\u6599\u7684\u4e00\u81f4\u6027\uff0c\u4e26\u5141\u8a31\u90e8\u5206\u7684\u7570\u6b65\u4f86\u9054\u6210\u9ad8\u53ef\u7528\u6027\u3002\u3002\u7576\u6709\u7bc0\u9ede\u6c92\u6536\u5230\u8acb\u6c42\u6642\uff08\u56e0\u70ba\u662f\u4f7f\u7528\u7570\u6b65\u7684\u65b9\u5f0f\uff0c\u6240\u4ee5\u6c92\u8fa6\u6cd5\u4fdd\u8b49\u7bc0\u9ede\u6536\u5230\u8cc7\u6599\uff09\u5c31\u900f\u904e\u80cc\u666f\u5b9a\u671f\u6574\u4f75\uff08anti-entropy process\uff09\u548c\u8b80\u53d6\u6642\u5fa9\u539f\uff08read repair\uff09\u4f86\u7dad\u6301\u4e00\u81f4\u6027\u3002
"},{"location":"feedback/designing-data-intensive-applications/farewell/#\u8907\u88fd\u65e5\u8a8c","title":"\u8907\u88fd\u65e5\u8a8c","text":"\u5728\u9818\u8896\u985e\u578b\u7684\u8cc7\u6599\u53e2\u96c6\u4e2d\uff0c \u900f\u904e\u5728\u8cc7\u6599\u5eab\u9593\u50b3\u905e \u8907\u88fd\u65e5\u8a8c \u4f86\u9054\u6210\u4e00\u81f4\u6027\u3002 \u4e3b\u8981\u662f\u4f7f\u7528\u908f\u8f2f\u65e5\u8a8c\uff0c\u56e0\u70ba\u4ed6\u4ecb\u65bc\u8a9e\u6cd5\u65e5\u8a8c\u548c WAL \u4e2d\u9593\uff0c \u4e0d\u6703\u904e\u65bc\u62bd\u8c61\u5c0e\u81f4\u5be6\u969b\u8cc7\u6599\u6703\u7522\u751f\u5dee\u7570\uff08\u4f8b\u5982 UPDATE user 1234 updated_at = now()
\uff09\uff0c MySQL \u7684 binlog \u548c PostgreSQL \u7684 logical-decoding \u5c31\u662f\u9019\u7a2e\u6771\u897f\u3002
\u5728\u591a\u500b\u7bc0\u9ede\u8981\u9054\u6210\u4e00\u81f4\u6027\u6703\u6709\u5982\u4e0a\u5716\u7684\u4e09\u7a2e\u65b9\u5f0f\uff0c\u503c\u5f97\u6ce8\u610f\u7684\u662f\u7121\u8ad6\u662f\u54ea\u4e00\u7a2e\uff0c\u76ee\u524d\u7684\u7814\u7a76\u90fd\u6703\u56de\u6b78\u5230\u55ae\u4e00\u7bc0\u9ede\u7684\u901a\u91cf\u4f86\u9054\u6210\u5168\u57df\u9806\u5e8f\u5ee3\u64ad\uff0c\u4e5f\u5c31\u662f\u6548\u80fd\u6703\u53d7\u5230\u55ae\u4e00\u7bc0\u9ede\u7684\u5929\u82b1\u677f\u9650\u5236\u3002
\u5171\u8b58\u6f14\u7b97\u6cd5\u7684\u9ad8\u53ef\u7528\u548c\u8ca0\u8f09\u5e73\u8861
\u5171\u8b58\u6f14\u7b97\u6cd5\u8b93\u591a\u500b\u7bc0\u9ede\u5171\u540c\u64c1\u6709\u4e00\u500b\u5168\u57df\u9806\u5e8f\uff0c\u4e26\u63d0\u4f9b\u7d66\u5916\u90e8\u4f7f\u7528\u8005\u4f86\u5e6b\u52a9\u9054\u6210\u7dda\u6027\u6216\u5e8f\u5217\u5316\u7684\u57f7\u884c\u5e8f\u3002
\u7136\u800c\u5171\u8b58\u6f14\u7b97\u6cd5\u6c92\u8fa6\u6cd5\u505a\u5230\u8ca0\u8f09\u5e73\u8861\uff0c\u5168\u90e8\u7bc0\u9ede\u90fd\u8981\u53c3\u8207\u65b0\u7684\u9806\u5e8f\u7684\u9078\u8209\uff0c\u900f\u904e\u53ea\u9700\u8981\u591a\u6578\uff08\u591a\u6578\u6c7a\uff09\u7bc0\u9ede\u7684\u5b58\u6d3b\u4f86\u4fdd\u8b49\u53ef\u7528\u6027\u3002\u4e0d\u904e\u6211\u5011\u53ef\u4ee5\u900f\u904e\u8b80\u5beb\u5206\u96e2\u4f86\u5e6b\u52a9\u964d\u4f4e\u9078\u8209\u4eba\u7684\u8ca0\u64d4\uff0c\u4f8b\u5982 Paxos \u7684 Learner \u7bc0\u9ede\u3002
"},{"location":"feedback/designing-data-intensive-applications/farewell/#\u884d\u751f\u8cc7\u6599\u7cfb\u7d71","title":"\u884d\u751f\u8cc7\u6599\u7cfb\u7d71","text":"\u5728\u4ecb\u7d39\u8cc7\u6599\u5eab\u7684\u6642\u5019\uff0c\u6211\u5011\u63d0\u5230\u4e86\u5f88\u591a\u7a2e\u61c9\u7528\uff0c\u90fd\u662f\u900f\u904e\u539f\u59cb\u8cc7\u6599\u91cd\u65b0\u8f49\u8b6f\u6210\u53e6\u4e00\u7a2e\u9762\u8c8c\u8b93\u5176\u4ed6\u61c9\u7528\u7a0b\u5f0f\u8b80\u53d6\uff0c\u4e0d\u7ba1\u662f\u6b21\u7d22\u5f15\u9084\u662f\u5feb\u53d6\u7b49\u7b49\u3002\u5728\u9019\u4e4b\u4e2d\uff0c\u6709\u4e00\u7a2e\u8a08\u7b97\u65b9\u5f0f\u7a31\u70ba\u6279\u6b21\u8655\u7406\uff0c\u4ed6\u7684\u54f2\u5b78\u5728\u65bc\u4e0d\u7570\u52d5\u8cc7\u6599\u4f86\u6e90\uff0c\u76f4\u63a5\u628a\u60f3\u8981\u7684\u7d50\u679c\u7b97\u51fa\u4f86\u653e\u5230\u6a94\u6848\u7cfb\u7d71\uff0c\u518d\u8b93\u5176\u4ed6\u7a0b\u5e8f\u8a08\u7b97\u5176\u4ed6\u7d50\u679c\u3002
\u9019\u6a23\u7684\u54f2\u5b78\u548c\u6211\u5011\u5728 Linux \u4e0a\u7684 GNU Coreutils \u5de5\u5177\u975e\u5e38\u76f8\u50cf\uff0c\u900f\u904e\u4e0d\u7570\u52d5\u8cc7\u6599\u6e90\u4f86\u6eff\u8db3\u51aa\u7b49\u7684\uff08idempotent\uff09\u3002\u53ea\u662f\u9019\u88e1\u7684\u6279\u6b21\u8655\u7406\u4e0d\u518d\u53ea\u662f\u55ae\u4e00\u7bc0\u9ede\u800c\u662f\u5206\u6563\u5f0f\u7684\uff0c\u5176\u4e2d\u7684 Unix \u7684\u6a94\u6848\u63cf\u8ff0\u7b26\u5c0d\u61c9\u5230\u5206\u6563\u5f0f\u7cfb\u7d71\u5c31\u662f HDFS\uff0c\u800c Coreutils \u5c31\u662f MapReduce/Spark/Flink \u7b49\u6846\u67b6\u63d0\u4f9b\u7684\u7a0b\u5f0f\u5eab\u6216\u8005\u81ea\u5df1\u5ba2\u5236\u7684\u5546\u52d9\u908f\u8f2f\u3002
\u6279\u6b21\u8655\u7406\u900f\u904e\u5206\u6563\u5f0f\u904b\u7b97\u548c\u4e0d\u7570\u52d5\u4f86\u6e90\u6240\u5f62\u6210\u7684\u5bb9\u932f\u6027\uff0c\u5728\u5f88\u591a\u5834\u666f\u4e2d\u90fd\u80fd\u6709\u8ca2\u737b\uff0c\u4f8b\u5982\u55ae\u53f0\u7bc0\u9ede\u4f60\u9664\u4e86\u53ef\u4ee5\u8dd1\u7dda\u4e0a\u670d\u52d9\uff0c\u900f\u904e\u8ce6\u4e88\u6279\u6b21\u8655\u7406\u7684\u7a0b\u5e8f\u8f03\u4f4e\u7684\u512a\u5148\u7a0b\u5ea6\u8b93\u6a5f\u5668\u5728\u4f4e\u6d41\u91cf\u6642\u4ecd\u80fd\u4fdd\u6301\u4e00\u5b9a\u7684\u904b\u7b97\u91cf\u3002
\u4e32\u6d41\u8655\u7406\u548c\u6279\u6b21\u8655\u7406\u5f88\u50cf\uff0c\u90fd\u662f\u7528\u65bc\u7522\u751f\u884d\u751f\u8cc7\u6599\u3002\u4f46\u662f\u4e32\u6d41\u8655\u7406\u5f88\u91cd\u8981\u7684\u4e00\u9ede\u662f\u5132\u5b58\u7684\u4e0d\u518d\u662f\u300c\u72c0\u614b\u300d\u800c\u662f\u5f62\u6210\u72c0\u614b\u7684\u300c\u4e8b\u4ef6\u300d\u3002
\u9019\u9ede\u548c\u8cc7\u6599\u5eab\u6709\u5f88\u5927\u7684\u5dee\u5225\uff0c\u524d\u9762\u63d0\u7684\u8cc7\u6599\u5eab\u90fd\u900f\u904e\u958b\u767c\u8005\u5c0d\u65bc\u5546\u52d9\u908f\u8f2f\u53bb\u8a2d\u8a08\u7db1\u76ee\uff0c\u8b93\u8cc7\u6599\u5eab\u5132\u5b58\u7b26\u5408\u9700\u6c42\u7684\u72c0\u614b\u3002\u4f46\u662f\u61c9\u7528\u7a0b\u5f0f\u662f\u6703\u6210\u9577\u7684\uff0c\u7576\u73fe\u6709\u7684\u7db1\u76ee\u4e0d\u5920\u652f\u63f4\u65b0\u7684\u61c9\u7528\u6642\uff0c\u52e2\u5fc5\u5c31\u6703\u6709\u7570\u52d5\uff0c\u9019\u6642\u65b0\u7684\u72c0\u614b\u5f88\u53ef\u80fd\u5c31\u9700\u8981\u7b49\u5f85\u4f7f\u7528\u8005\u53bb\u8f38\u5165\uff0c\u6216\u8005\u900f\u904e\u80cc\u666f\u904b\u7b97\u628a\u8cc7\u6599\u88dc\u9032\u53bb\uff0c\u4e0d\u8ad6\u54ea\u4e00\u7a2e\u90fd\u4e0d\u662f\u5f88\u597d\u7684\u65b9\u6cd5\uff0c\u5c24\u5176\u4e0d\u5c0f\u5fc3\u6539\u932f\u4e86\u6771\u897f\u8981\u5fa9\u539f\u6642\u5c31\u66f4\u56f0\u96e3\u4e86\u3002
\u900f\u904e\u5132\u5b58\u539f\u59cb\u7684\u4e8b\u4ef6\uff0c\u7576\u6211\u6709\u9700\u8981\u65b0\u7684\u7db1\u76ee\u6642\uff0c\u6211\u5c31\u53ef\u4ee5\u900f\u904e\u6b77\u53f2\u7684\u4e8b\u4ef6\u91cd\u65b0\u5f62\u5851\u51fa\u5168\u65b0\u7684\u72c0\u614b\u3002\u9664\u6b64\u4e4b\u5916\uff0c\u7576\u767c\u73fe\u73fe\u6709\u72c0\u614b\u6709\u932f\u6642\uff0c\u6211\u53ef\u4ee5\u900f\u904e\u6b77\u53f2\u4e8b\u4ef6\u91cd\u65b0\u8a08\u7b97\u72c0\u614b\u4e26\u6aa2\u67e5\u54ea\u4e00\u500b\u4e8b\u4ef6\u5c0e\u81f4\u72c0\u614b\u7570\u5e38\u3002
CDC\uff08Change Data Capture\uff09\u5c31\u662f\u8cc7\u6599\u5eab\u628a\u6bcf\u6b21\u7684\u7570\u52d5\u8f38\u51fa\u6210\u4e8b\u4ef6\u3002
"},{"location":"feedback/designing-data-intensive-applications/farewell/#\u6574\u5408","title":"\u6574\u5408","text":"\u63a5\u4e0b\u4f86\u5c31\u8981\u8ac7\u8ac7\u600e\u9ebc\u505a\u5230\u4e00\u500b\u53ef\u4ee5\u6eff\u8db3\u9ad8\u5bb9\u932f\u3001\u9ad8\u53ef\u7528\u548c\u9ad8\u8907\u96dc\u5ea6\u7684\u67b6\u69cb\u3002
"},{"location":"feedback/designing-data-intensive-applications/farewell/#\u70ba\u4ec0\u9ebc\u8981\u6574\u5408","title":"\u70ba\u4ec0\u9ebc\u8981\u6574\u5408","text":"\u6211\u5011\u5f9e\u524d\u9762\u5df2\u7d93\u77e5\u9053\u9078\u64c7\u4e0d\u540c\u8cc7\u6599\u5eab\uff08\u4f8b\u5982\u9078\u64c7 MySQL v.s. Redis\uff09\u5176\u5be6\u5c31\u662f\u5728\u4e0d\u540c\u9762\u5411\u4f5c\u6b0a\u8861\uff0c\u8209\u4f8b\u4f86\u8aaa\uff1a
\u6bcf\u500b\u8cc7\u6599\u5eab\u6703\u52aa\u529b\u5ba3\u7a31\u5176\u512a\u52e2\uff0c\u4f46\u662f\u901a\u904e\u524d\u5e7e\u7ae0\u7684\u5b78\u7fd2\uff0c\u6211\u5011\u61c9\u8a72\u5177\u5099\u4e86\u80fd\u7528\u5bec\u95ca\u7684\u8996\u91ce\u53bb\u67e5\u770b\u9019\u4e9b\u6587\u4ef6\uff0c\u6211\u5011\u80fd\u5728\u5167\u5fc3\u56de\u7b54\u81ea\u5df1\uff1a\u7576\u4ed6\u63d0\u4f9b\u9019\u9805\u512a\u52e2\u6642\u72a7\u7272\u4e86\u4ec0\u9ebc\uff1f
\u6b63\u56e0\u70ba\u6c92\u6709\u4e00\u500b\u5de5\u5177\u80fd\u5920\u61c9\u4ed8\u5404\u7a2e\u72c0\u6cc1\uff0c\u6211\u5011\u7121\u53ef\u907f\u514d\u5730\u8981\u6574\u5408\u9019\u4e9b\u4e0d\u540c\u7528\u9014\u7684\u8cc7\u6599\u7cfb\u7d71\u3002\u4f46\u662f\u8a72\u600e\u9ebc\u6574\u5408\uff1f\u5e38\u898b\u7684\u505a\u6cd5\u5c31\u662f\u900f\u904e\u61c9\u7528\u7a0b\u5f0f\u6574\u5408\uff1a
\u7576\u61c9\u7528\u7a0b\u5f0f\u958b\u59cb\u6574\u5408\u4e86\uff0c\u4f60\u5c31\u9700\u8981\u4e00\u500b\u6e05\u695a\u7684\u6982\u89c0\u77e5\u9053\u8cc7\u6599\u4ee5\u4f55\u7a2e\u683c\u5f0f\u5f9e\u54ea\u908a\u8f38\u5165\uff0c \u53c8\u4ee5\u4f55\u7a2e\u683c\u5f0f\u6703\u8f38\u51fa\u5230\u4f55\u8655\uff0c\u9019\u4e9b\u90fd\u4e0d\u662f\u5bb9\u6613\u7684\u4e8b\u60c5\uff0c\u7121\u95dc\u4f60\u662f\u4e0d\u662f\u5de5\u7a0b\u5e2b\u3002 \u9664\u6b64\u4e4b\u5916\u900f\u904e\u61c9\u7528\u7a0b\u5f0f\u5f88\u5bb9\u6613\u5c31\u6703\u9047\u5230\u908a\u969b\u72c0\u6cc1\uff0c\u56e0\u70ba\u6211\u5011\u6c92\u8fa6\u6cd5\u6709\u6548\u7684\u5728\u958b\u767c\u7576\u4e0b\u4e86\u89e3\u5404\u7a2e\u53ef\u80fd\u7684\u72c0\u6cc1\uff0c \u4f8b\u5982\u5feb\u53d6\u9020\u6210\u7684\u72c0\u614b\u4e0d\u4e00\u81f4\u3002
\u5982\u679c\u6c92\u6709\u4e00\u500b\u6e05\u695a\u7684\u6982\u89c0\u6703\u767c\u751f\u4ec0\u9ebc\u4e8b\uff1f\u4ee5\u5168\u6587\u7d22\u5f15\u70ba\u4f8b\uff1a
\u5982\u679c\u5168\u6587\u7d22\u5f15\u539f\u672c\u900f\u904e\u8cc7\u6599\u5eab\u7684 CDC \u4f86\u7372\u5f97\u8cc7\u6599\uff0c\u4e26\u4f9d\u6b64\u4fdd\u8b49\u5176\u548c\u8cc7\u6599\u5eab\u7684\u72c0\u614b\u4e00\u81f4\u6027\uff0c\u4f46\u662f\u5982\u679c\u4eca\u5929\u6709\u500b\u61c9\u7528\u7a0b\u5f0f\u4e0d\u77e5\u9053\u9019\u500b\u72c0\u6cc1\uff0c\u518d\u984d\u5916\u88dc\u4e0a\u4e00\u4e9b\u8f38\u5165\u7d66\u641c\u5c0b\u7d22\u5f15\uff0c\u9019\u6642\u5c31\u6703\u51fa\u60f3\u5169\u8005\u72c0\u614b\u4e0d\u4e00\u81f4\u7684\u72c0\u6cc1\u3002
\u9019\u7a2e\u60c5\u6cc1\u6703\u96a8\u8457\u67b6\u69cb\u8907\u96dc\u7684\u63d0\u5347\u8b8a\u5f97\u8d8a\u4f86\u8d8a\u96b1\u6666\u3002
"},{"location":"feedback/designing-data-intensive-applications/farewell/#\u600e\u9ebc\u6709\u6548\u6574\u5408","title":"\u600e\u9ebc\u6709\u6548\u6574\u5408","text":"\u5176\u5be6\u4e0a\u9762\u9019\u500b\u72c0\u6cc1\u4ee3\u8868\u8457\u597d\u7684\u61c9\u7528\u7a0b\u5f0f\u67b6\u69cb\u5c31\u662f\u5728\u89e3\u6c7a\uff1a\u600e\u9ebc\u6709\u6548\u6574\u5408\u7570\u8cea\u9593\u7684\u72c0\u614b\uff1f
\u5206\u6563\u5f0f\u4ea4\u6613\u67b6\u69cb\uff08\u4f8b\u5982 XA\uff09\uff1a\u4ed6\u80fd\u8b93\u7570\u8cea\u9593\u7684\u61c9\u7528\u4fdd\u6301\u7dda\u6027\u95dc\u4fc2\uff0c\u4e5f\u5c31\u662f\u8b80\u5230\u7684\u8cc7\u8a0a\u5c31\u662f\u6700\u65b0\u7684\u8cc7\u8a0a\u3002
XA \u7684\u7f3a\u9ede\u5c31\u662f\u4f4e\u6548\u80fd\u4f4e\u53ef\u7528\u6027\uff0c\u53e6\u4e00\u7a2e\u65b9\u5f0f\u662f\u900f\u904e\u4e8b\u4ef6\u4f86\u6e90\uff0c\u5229\u7528\u4e8b\u4ef6\u662f\u51aa\u7b49\u7684\uff08idempotent\uff09\u548c\u6c7a\u5b9a\u6027\u7684\uff08deterministic\uff09\u4f86\u4fdd\u6301\u4e00\u81f4\uff0c\u4e5f\u5c31\u662f\u6bcf\u6b21\u57f7\u884c\u76f8\u540c\u7684\u4e8b\u4ef6\u90fd\u6703\u5f97\u5230\u76f8\u540c\u7684\u7d50\u679c\uff0c\u4f46\u662f\u6703\u6709\u300c\u8907\u88fd\u5ef6\u9072\u300d\u7684\u554f\u984c\uff08\u7570\u65bc\u7dda\u6027\u95dc\u4fc2\uff09\u3002
\u51aa\u7b49 v.s. \u6c7a\u5b9a\u6027
\u51aa\u7b49 \u4ee3\u8868\u91cd\u8907\u57f7\u884c\u8a72\u884c\u70ba\u6642\u4e0d\u6703\u9020\u6210\u984d\u5916\u7684\u5f71\u97ff\uff0c\u4f8b\u5982\u522a\u9664\u6a94\u6848\uff0c\u7576\u4f60\u91cd\u8907\u522a\u9664\u8a72\u6a94\u6848\u6642\uff0c\u4e0d\u6703\u6709\u5176\u4ed6\u5f71\u97ff\u3002 \u6c7a\u5b9a\u6027 \u4ee3\u8868\u6bcf\u6b21\u8f38\u5165\u90fd\u6703\u6709\u76f8\u540c\u7684\u8f38\u51fa\uff0c\u4f8b\u5982\u7d71\u8a08\u6307\u5b9a\u5b57\u4e32\u9577\u5ea6\uff0c\u4e0d\u6703\u7b2c\u4e8c\u6b21\u5f97\u5230\u7684\u7b54\u6848\u548c\u7b2c\u4e00\u6b21\u4e0d\u4e00\u6a23\uff0c\u540c\u6642\u4e0d\u6703\u6709\u5176\u4ed6\u5916\u90e8\u5f71\u97ff\uff0c\u4f8b\u5982\u958b\u65b0\u6a94\u6848\u3002
\u6c7a\u5b9a\u6027 \u7684\u8981\u6c42\u6bd4 \u51aa\u7b49 \u9ad8\u3002\u5dee\u7570\u8a73\u898b\u65bc\u6b64
\u6839\u64da\u4f60\u7684\u61c9\u7528\u7a0b\u5f0f\u548c\u74b0\u5883\u7684\u8981\u6c42\uff0c\u9078\u64c7\u4e0d\u540c\u7684\u65b9\u5f0f\uff1a
\u7576\u4f4e\u6548\u7387\u548c\u4f4e\u5bb9\u932f\u4e0d\u80fd\u88ab\u5bb9\u5fcd\uff0c\u4e8b\u4ef6\u4f86\u6e90\u5c31\u8b8a\u6210\u552f\u4e00\u7684\u9078\u64c7\u4e86\u3002\u63a5\u4e0b\u4f86\u8a0e\u8ad6\u7684\u91cd\u9ede\u5c31\u662f\uff1a\u4e8b\u4ef6\u4f86\u6e90\u600e\u9ebc\u6574\u5408\u7570\u8cea\u61c9\u7528\uff1f\u63d0\u4f9b\u4e86\u54ea\u4e9b\u597d\u58de\u8655\uff1f\u6709\u6c92\u6709\u9664\u4e86\u6700\u7d42\u4e00\u81f4\u6027\u4e4b\u5916\u7684\u9078\u64c7\uff1f
Google Sheet \u7684\u9ad8\u5ea6\u76f8\u4f3c
\u4e8b\u4ef6\u4f86\u6e90\u7684\u67b6\u69cb\u548c Google Sheet \u5f88\u50cf\uff0c\u7576\u539f\u59cb\u8cc7\u6599\u6539\u8b8a\uff0c\u5916\u9762\u7684\u7a0b\u5f0f\u6703\u81ea\u52d5\u611f\u77e5\u4e26\u4fee\u6b63\u7522\u51fa\u7684\u503c\u3002
"},{"location":"feedback/designing-data-intensive-applications/farewell/#\u4e8b\u4ef6\u4f86\u6e90","title":"\u4e8b\u4ef6\u4f86\u6e90","text":"\u900f\u904e\u4e8b\u4ef6\u4f86\u6e90\u5929\u751f \u7570\u6b65 \u7684\u8655\u7406\u65b9\u5f0f\uff0c\u8b93\u5169\u500b\u7570\u8cea\u61c9\u7528\u53ef\u4ee5\u5f7c\u6b64\u7368\u7acb\u4e0d\u518d\u4f9d\u8cf4\u5f7c\u6b64\uff08\u8f38\u51fa\u4e8b\u4ef6\u6642\u4e0d\u7528\u7b49\u5230\u56de\u61c9\uff09\u9054\u5230\u9ad8\u5bb9\u932f\u548c\u9ad8\u6548\u7387\u3002
\u9664\u6b64\u4e4b\u5916\uff0c\u524d\u9762\u5728\u6279\u6b21\u8655\u7406\u4e2d\u63d0\u7684 \u6c7a\u5b9a\u6027 \u4e5f\u80fd\u63d0\u5347\u5bb9\u932f\u6027\uff0c\u8209\u4f8b\u4f86\u8aaa\uff0c\u6279\u6b21\u8655\u7406\u4e2d\u5982\u679c\u8a08\u7b97\u904e\u7a0b\u4e2d\u51fa\u932f\uff08\u7db2\u8def\u4e2d\u65b7\u7b49\u7b49\uff09\u5c31\u91cd\u65b0\u62ff\u8f38\u5165\u505a\u4e00\u6b21\u8a08\u7b97\uff0c\u800c\u9019\u8a08\u7b97\u4e0d\u6703\u56e0\u70ba\u7b2c\u4e8c\u6b21\u904b\u7b97\u800c\u6709\u4e0d\u540c\u8f38\u51fa\u3002\u6c7a\u5b9a\u6027\u4e0d\u50c5\u65b9\u4fbf\u5bb9\u932f\u4e5f\u6709\u5229\u65bc\u5e6b\u52a9\u6211\u5011\u6574\u5408\u7570\u8cea\u9593\u7684\u61c9\u7528\uff0c\u4f8b\u5982\u6211\u5011\u5c31\u53ef\u4ee5\u900f\u904e\u78ba\u4fdd\u8cc7\u6599\u5eab\u7684 CDC \u662f\u6c7a\u5b9a\u6027\u4e4b\u5f8c\uff0c\u8ffd\u8e64\u8005\u7684\u5931\u80fd\u90fd\u53ef\u4ee5\u900f\u904e\u91cd\u65b0\u8a08\u7b97\u4f86\u6eff\u8db3\u9700\u8981\u7684\u8cc7\u6599\u9762\u5411\u3002
\u524d\u9762\u8cc7\u6599\u5eab\u900f\u904e\u539f\u5b50\u6027\u8b93\u8a08\u7b97\u53ef\u4ee5\u6368\u68c4\u8a08\u7b97\u5f8c\u91cd\u65b0\u57f7\u884c\u8a08\u7b97\uff0c\u4f46\u662f\u7576\u4f7f\u7528\u524d\u9762\u63d0\u7684\u300c\u51aa\u7b49\u300d\u548c\u300c\u6c7a\u5b9a\u6027\u300d\u6642\uff0c\u5c31\u9700\u8981\u61c9\u7528\u7a0b\u5f0f\u81ea\u5df1\u53bb\u6ce8\u610f\u9019\u4e9b\u4e8b\u4ef6\u662f\u5426\u6709\u8a72\u7279\u6027\uff0c\u53e6\u5916\u9084\u6709\u4e0d\u540c\u4e8b\u4ef6\u9593\u7684\u300c\u56e0\u679c\u300d\u4e5f\u9700\u8981\u76e1\u91cf\u7368\u7acb\u3002\u4e00\u822c\u4f86\u8aaa\u61c9\u7528\u7a0b\u5f0f\u6709\u5e7e\u7a2e\u9078\u64c7\uff1a
\u56e0\u679c\u7684\u96b1\u6666\u6027
\u6709\u6642\u5169\u500b\u4e8b\u4ef6\u7684\u56e0\u679c\u662f\u5f88\u96b1\u6666\u7684\u4f8b\u5982\u5206\u624b\u5f8c\u7684\u60c5\u4fb6\u5728\u793e\u4ea4\u8edf\u9ad4\u4e92\u76f8\u5c01\u9396\uff0c\u5176\u4e2d\u4e00\u500b\u4eba\u5728\u5206\u624b\u5f8c\u767c\u8cbc\u6587\u5927\u7206\u6599\uff0c\u9019\u4e4b\u4e2d\u7684\u5169\u500b\u4e8b\u4ef6\u300c\u5c01\u9396\u300d\u548c\u300c\u767c\u6587\u300d\u5176\u5be6\u662f\u6709\u56e0\u679c\u7684\u3002
"},{"location":"feedback/designing-data-intensive-applications/farewell/#\u770b\u770b\u4f8b\u5b50","title":"\u770b\u770b\u4f8b\u5b50","text":"\u6211\u5011\u4ee5\u6b21\u7d22\u5f15\u70ba\u4f8b\uff0c\u5982\u679c\u5728\u5206\u6563\u5f0f\u7684\u8cc7\u6599\u5eab\u4e2d\u8981\u7dad\u6301\u6b21\u7d22\u5f15\uff0c \u6211\u5011\u6703\u9700\u8981\u5728\u5404\u500b\u5206\u5340\u4e2d\u540c\u6b65\u9019\u4e9b\u8cc7\u6599\uff08\u7121\u8ad6\u662f\u672c\u5730\u7d22\u5f15\u6216\u8005\u5168\u57df\u7d22\u5f15\uff09\uff0c\u4f46\u662f\u9019\u6703\u589e\u52a0\u5beb\u5165\u8cc7\u6599\u6642\u7684\u5de5\u4f5c\u3002
\u5982\u679c\u628a\u9019\u6a23\u7684\u6b21\u7d22\u5f15\u900f\u904e\u4e8b\u4ef6\u4f86\u6e90\u7684\u6a5f\u5236\u8b93\u5176\u4ed6\u61c9\u7528\u53bb\u7dad\u6301\u9019\u500b\u65b0\u7684\u8cc7\u6599\u5eab\u9762\u5411\uff0c \u9019\u6642\u5c31\u4e0d\u9700\u8981\u72a7\u7272\u5beb\u5165\u6216\u8b80\u53d6\u7684\u6548\u80fd\u4e86\uff0c\u4e5f\u56e0\u70ba\u9019\u6a23\u8b93\u8cc7\u6599\u5eab\u64c1\u6709\u66f4\u9ad8\u7684\u53ef\u7528\u6027\u3002
\u518d\u8209\u4e00\u500b\u7db1\u76ee\u6f14\u9032\u7684\u4f8b\u5b50\uff0c\u5728\u8a0e\u8ad6\u7db1\u76ee\u6642\uff0c \u6211\u5011\u8ac7\u4e86\u5f88\u591a\u6a5f\u5236\u5e6b\u52a9\u7dad\u904b\u9019\u500b\u6703\u96a8\u8457\u61c9\u7528\u7a0b\u5f0f\u6210\u9577\u4e00\u76f4\u6539\u8b8a\u7684\u6771\u897f\u3002 \u4f46\u662f\u900f\u904e\u4e8b\u4ef6\u4f86\u6e90\uff0c\u6211\u5011\u751a\u81f3\u53ef\u4ee5\u5efa\u7acb\u5169\u500b\u5b8c\u5168\u4e0d\u540c\u7db1\u76ee\u7684\u8cc7\u6599\u5eab\uff0c \u518d\u900f\u904e A/B \u6e2c\u8a66\u5c0e\u6d41\u7279\u5b9a\u4f7f\u7528\u8005\u5230\u65b0\u7684\u7db1\u76ee\u4e0a\uff0c\u904b\u884c\u4e00\u9663\u5b50\u4e4b\u5f8c\u78ba\u4fdd\u8cc7\u6599\u6c92\u6709\u7570\u5e38\u5c31\u53ef\u4ee5\u5b8c\u6574\u5207\u63db\u3002
"},{"location":"feedback/designing-data-intensive-applications/farewell/#\u7368\u7acb\u5beb\u5165\u548c\u6574\u5408\u8b80\u53d6","title":"\u7368\u7acb\u5beb\u5165\u548c\u6574\u5408\u8b80\u53d6","text":"\u900f\u904e\u9019\u4e9b\u4f8b\u5b50\u6211\u5011\u5c31\u6703\u767c\u73fe\uff0c\u6574\u5408\u7570\u8cea\u9593\u7684\u61c9\u7528\u5176\u5be6\u5c31\u662f\u628a\u539f\u672c\u55ae\u4e00\u8cc7\u6599\u5eab\u505a\u7684\u4e8b\u5206\u7d66\u5176\u4ed6\u61c9\u7528\u53bb\u505a\u3002\u4e5f\u5c31\u662f\u8b93\u8cc7\u6599\u5eab\u5167\u90e8\u904b\u4f5c\u539f\u4f86\u5206\u6563\u7d66\u5404\u500b\u7368\u7acb\u7684\u61c9\u7528\u7a0b\u5f0f\u53e2\u96c6\uff0c\u5c31\u597d\u50cf\u73fe\u5728\u5e38\u7528\u7684\u5fae\u670d\u52d9\uff08micro service\uff09\uff0c\u4e5f\u6709\u4eba\u7a31\u5176\u70ba database-inside-out\uff08\u628a\u8cc7\u6599\u5eab\u88e1\u7684\u908f\u8f2f\u62ff\u51fa\u4f86\uff09\u3002\u9019\u9ebc\u505a\u5c31\u6703\u8b93\u5404\u500b\u670d\u52d9\u64c1\u6709\u9ad8\u53ef\u7528\u6027\uff0c\u540c\u6642\u53c8\u80fd\u900f\u904e\u4e8b\u4ef6\u6a5f\u5236\u6eff\u8db3\u5f7c\u6b64\u7684\u4e00\u81f4\u6027\u3002
\u9019\u6642\u9664\u4e86\u5beb\u5165\uff0c\u6211\u5011\u4e5f\u8981\u8003\u616e\u5982\u4f55\u900f\u904e\u55ae\u4e00\u4ecb\u9762\u8b80\u53d6\u9019\u4e9b\u7570\u8cea\u7684\u8cc7\u6599\uff0c\u4f8b\u5982 PostgreSQL \u7684 foreign data wrapper \u5c31\u7b26\u5408\u9019\u7a2e\u9700\u6c42\uff0c\u6709\u9ede\u50cf\u662f MPP \u88e1\u9762\u4ed6\u5728\u591a\u500b\u5206\u5340\u57f7\u884c\u6574\u5408\u641c\u5c0b\u3002
\u7136\u800c\u6574\u5408\u9019\u4e9b\u4e0d\u540c\u7684\u61c9\u7528\u6642\uff0c\u6211\u5011\u6703\u9700\u8981\u4ed4\u7d30\u7684\u601d\u8003\u7576\u67d0\u7bc0\u9ede\u5931\u80fd\u6642\uff0c\u6703\u767c\u751f\u4ec0\u9ebc\u4e8b\uff1f\u7136\u5f8c\u6574\u5408\u6642\u4e4b\u9593\u7684\u670d\u52d9\u767c\u73fe\u8981\u600e\u9ebc\u505a\uff1f\u8b93\u61c9\u7528\u7a0b\u5f0f\u4e0d\u9700\u8003\u616e\u8eab\u70ba\u8ffd\u8e64\u8005\u9700\u8981\u6ce8\u610f\u7684\u4e8b\u60c5\u7684\u62bd\u8c61\u4ecb\u9762\u7b49\u7b49\u90fd\u662f\u8981\u4ed4\u7d30\u601d\u8003\u7684\u554f\u984c\u3002\u76ee\u524d\u5e02\u9762\u4e0a\u4e26\u6c92\u6709\u91dd\u5c0d\u9019\u4e9b\u7d50\u69cb\u7684\u670d\u52d9\u51fa\u73fe\uff0c\u4f46\u662f\u6709\u76f8\u95dc\u7684\u7814\u7a76\uff0c\u4f8b\u5982 differential dataflow\u3002
\u4e0a\u9762\u5169\u5f35\u5716\u4f86\u6e90\u662f Samza \u5831\u544a\u7c21\u5831\uff0c\u5206\u5225\u662f 54 \u9801\u548c 57 \u9801\u3002
"},{"location":"feedback/designing-data-intensive-applications/farewell/#\u600e\u9ebc\u505a\u5230\u9ad8\u4e00\u81f4\u6027","title":"\u600e\u9ebc\u505a\u5230\u9ad8\u4e00\u81f4\u6027","text":"\u600e\u9ebc\u505a\u5230\u9ad8\u4e00\u81f4\u6027\uff1f\u6574\u7406\u51fa\u4e09\u500b\u65b9\u6cd5\uff0c\u4f9d\u6b21\u8a0e\u8ad6\u4e4b\u3002
"},{"location":"feedback/designing-data-intensive-applications/farewell/#\u628a\u4f7f\u7528\u8005\u7d0d\u9032\u53e2\u96c6","title":"\u628a\u4f7f\u7528\u8005\u7d0d\u9032\u53e2\u96c6","text":"\u4e00\u822c\u7684\u7db2\u8def\u61c9\u7528\u90fd\u6703\u7b49\u5f85\u4f7f\u7528\u8005\u900f\u904e\u700f\u89bd\u53bb\u6216\u8005\u624b\u6a5f\u61c9\u7528\u9001\u51fa\u8acb\u6c42\u5f8c\u5f97\u5230\u56de\u61c9\uff0c\u9019\u6642\u5982\u679c\u5f8c\u7aef\u670d\u52d9\u7684\u72c0\u614b\u662f\u900f\u904e\u4e8b\u4ef6\u4f86\u6e90\u6642\uff0c\u6211\u5011\u662f\u53ef\u80fd\u6703\u5f97\u5230\u4e0d\u662f\u6700\u5373\u6642\u7684\u8cc7\u6599\u3002\u4f46\u662f\u73fe\u5728\u7684\u6280\u8853\u8b93\u6211\u5011\u4e0d\u5fc5\u518d\u7b49\u4f7f\u7528\u8005\u4e3b\u52d5\u53bb\u91cd\u65b0\u6574\u7406\u6216\u8005\u767c\u9001\u8acb\u6c42\u4f86\u5f97\u5230\u6700\u65b0\u8cc7\u6599\uff0c\u6211\u5011\u4e5f\u53ef\u4ee5\u900f\u904e\u5f8c\u7aef\u4e3b\u52d5\u767c\u9001\u65b0\u8cc7\u6599\u7d66\u4f7f\u7528\u8005\u3002
\u82e5\u4e0d\u518d\u628a\u4f7f\u7528\u8005\u7576\u6210\u670d\u52d9\u5916\u7684\u7aef\u9ede\u800c\u662f\u670d\u52d9\u5167\u7684\u7aef\u9ede\uff0c\u6211\u5011\u5c31\u53ef\u4ee5\u900f\u904e\u5148\u524d\u5728\u65e5\u8a8c\u578b\u4e2d\u4ecb\u8005\u63d0\u5230\u7684 \u504f\u79fb\u91cf \u4f86\u8a18\u9304\u6bcf\u500b\u7dda\u4e0a\u4f7f\u7528\u8005\u7576\u4e0b\u4ed6\u8ddd\u96e2\u6700\u65b0\u72c0\u614b\u591a\u9060\u3002\u7576\u6709\u4efb\u4f55\u65b0\u4e8b\u4ef6\u5c31\u767c\u9001\u7d66\u4f7f\u7528\u8005\uff0c\u9019\u6a23\u5c0d\u4f7f\u7528\u8005\u4f86\u8aaa\u5c31\u80fd\u5f97\u5230\u6700\u77ed\u66ab\u7684\u72c0\u614b\u4e0d\u4e00\u81f4\uff0c\u9019\u6a23\u53c8\u4f55\u5617\u4e0d\u662f\u6211\u5011\u4e00\u958b\u59cb\u6700\u671f\u671b\u7684\u55ce\uff1f
\u4f46\u662f\u9019\u500b\u6771\u897f\u7684\u56f0\u96e3\u9ede\u5728\u65bc\uff0c\u6211\u5011\u592a\u7fd2\u6163\u8acb\u6c42\uff0f\u56de\u61c9\u9019\u7a2e\u6a21\u5f0f\uff0c\u6240\u4ee5\u4e0d\u53ea\u662f\u61c9\u7528\u7a0b\u5f0f\uff0f\u76f8\u95dc\u5957\u4ef6\u9700\u8981\u6709\u65b0\u7684\u4ecb\u9762\uff0c\u958b\u767c\u4eba\u54e1\u4e5f\u9700\u8981\u5728\u9019\u7a2e\u65b0\u578b\u614b\u7684\u67b6\u69cb\u4e2d\u53d6\u5f97\u601d\u60f3\u4e0a\u7684\u6539\u9032\u3002
"},{"location":"feedback/designing-data-intensive-applications/farewell/#\u9ede\u5c0d\u9ede\u7684\u9632\u8b77","title":"\u9ede\u5c0d\u9ede\u7684\u9632\u8b77","text":"TCP \u548c HTTP \u7684\u95dc\u4fc2\u5c31\u597d\u50cf\u8cc7\u6599\u5eab\u548c\u61c9\u7528\u7a0b\u5f0f\u7684\u95dc\u4fc2\u3002TCP \u63d0\u4f9b\u5f88\u591a\u7684\u5bb9\u932f\u6a5f\u5236\uff1a\u907f\u514d\u5c01\u5305\u91cd\u8907\u5bc4\u9001\uff0f\u63a5\u6536\u3001\u7576\u4e00\u90e8\u4efd\u7684\u5c01\u5305\u907a\u5931\u6642\u6368\u68c4\u8acb\u6c42\u3001Timeout \u7b49\u7b49\uff0c\u4f46\u662f\u61c9\u7528\u7a0b\u5f0f\u9084\u662f\u5f97\u505a\u4e00\u4e9b\u5bb9\u932f\u6a5f\u5236\uff1aRetry\u3001Timeout \u7b49\u7b49\u3002
\u9019\u7a2e\u61c9\u7528\u7a0b\u5f0f\u5169\u7aef\u7684\u5bb9\u932f\u7a31\u70ba\u9ede\u5c0d\u9ede\u7684\u9632\u8b77\u6a5f\u5236\u3002
TCP \u5c31\u597d\u50cf\u8cc7\u6599\u5eab\u4e00\u6a23\uff0c\u63d0\u4f9b\u4e86\u5f88\u591a\u4fdd\u8b77\u6a5f\u5236\uff1a\u4ea4\u6613\u3001WAL \u7b49\u7b49\uff0c\u4f46\u662f\u5c0d\u65bc\u61c9\u7528\u7a0b\u5f0f\u4f86\u8aaa\uff0c\u9084\u662f\u5f97\u505a\u4e00\u5b9a\u7684\u5bb9\u932f\u6a5f\u5236\u3002\u8209\u4f8b\u4f86\u8aaa\uff1a
\u7576\u91cd\u8907\u5bc4\u9001\u8acb\u6c42\u6642\uff0c\u4ea4\u6613\u6a5f\u5236\u7121\u6cd5\u907f\u514d\u91cd\u8907\u7684\u904b\u7b97BEGIN TRANSACTION;\nUPDATE accounts SET balance = balance + 21 WHERE account_id = 1234;\nUPDATE accounts SET balance = balance - 21 WHERE account_id = 4321;\nCOMMIT\n
\u4ee5\u4e0a\u8ff0\u7684\u7a0b\u5f0f\u78bc\u70ba\u4f8b\uff0c\u5373\u4f7f\u7528\u8a72\u65b9\u5f0f\u5305\u88dd\u8acb\u6c42\uff0c\u9084\u662f\u6703\u9047\u5230\u4f60\u932f\u8aa4\u91cd\u8907\u5bc4\u9001\u8acb\u6c42\uff08\u4f8b\u5982\u4f7f\u7528\u8005\u6309\u4e86\u5169\u6b21\u6309\u9215\uff09\u5c0e\u81f4\u7684\u72c0\u614b\u932f\u8aa4\u3002
\u5efa\u7acb\u552f\u4e00\u7684 request_id \u4f86\u907f\u514d\u91cd\u8907\u57f7\u884cALTER TABLE requests ADD UNIQUE (request_id);\n\nBEGIN TRANSACTION;\n\nINSERT INTO requests (request_id, from_account, to_account, amount) VALUES ('some-unique-id', 4321, 1234, 21)\n\nUPDATE accounts SET balance = balance + 21 WHERE account_id = 1234;\nUPDATE accounts SET balance = balance - 21 WHERE account_id = 4321;\nCOMMIT\n
\u5982\u679c\u8981\u907f\u514d\u9019\u72c0\u6cc1\uff0c\u4f60\u53ef\u4ee5\u900f\u904e\u6dfb\u52a0\u7de8\u865f\uff08\u53ef\u80fd\u662f\u6240\u6709\u8cc7\u8a0a\u7684\u96dc\u6e4a\uff09\u5230\u8acb\u6c42\u4e2d\uff0c\u4e26\u4f7f\u7528\u8cc7\u6599\u5eab\u7684 Unique Constraint \u4f86\u907f\u514d\u3002
\u4f46\u662f\u4e0a\u8ff0\u6a5f\u5236\u5230\u4e86\u5206\u6563\u5f0f\u6642\u5c31\u4ee3\u8868\u4f60\u53ea\u80fd\u5728\u55ae\u4e00\u9818\u8896\u7684\u53e2\u96c6\u6709\u6548\uff0c\u56e0\u70ba\u591a\u9818\u8896\u5c31\u53ef\u80fd\u767c\u751f\u5169\u500b\u8acb\u6c42\u9001\u5230\u4e0d\u540c\u9818\u8896\u53bb\u8655\u7406\uff0c\u90a3\u9019\u6a23\u591a\u9818\u8896\u8a72\u600e\u9ebc\u8fa6\u5462\uff1f
\u9664\u4e86\u8907\u88fd\u4e4b\u5916\uff08\u4e5f\u5c31\u662f\u4e0d\u7ba1\u4f7f\u7528\u54ea\u7a2e\u8907\u88fd\u65b9\u5f0f\uff09\uff0c\u5982\u679c\u53e2\u96c6\u6709\u4f7f\u7528\u5206\u5340\uff0c\u9019\u6642\u5c31\u53ef\u80fd\u5169\u500b\u5e33\u865f\u7684\u8acb\u6c42 ID \u5728\u4e0d\u540c\u5206\u5340\u5c31\u6703\u8b93\u9019\u500b\u4ea4\u6613\u5be6\u4f5c\u8b8a\u5f97\u5f88\u8907\u96dc\uff08\u56e0\u70ba\u9700\u8981\u8de8\u5206\u5340\u78ba\u4fdd Unique Constraint\uff09\uff0c\u9019\u6642\u5c31\u4ee3\u8868\u4f60\u9700\u8981\u5168\u57df\u9806\u5e8f\u5ee3\u64ad\u4f86\u907f\u514d\u908a\u969b\u72c0\u6cc1\u3002
"},{"location":"feedback/designing-data-intensive-applications/farewell/#\u4e8b\u4ef6\u4f86\u6e90\u7684\u9ede\u5c0d\u9ede\u9632\u8b77","title":"\u4e8b\u4ef6\u4f86\u6e90\u7684\u9ede\u5c0d\u9ede\u9632\u8b77","text":"\u4ee5\u4f7f\u7528\u8005\u8a3b\u518a\u5e33\u865f\u70ba\u4f8b\uff0c\u61c9\u7528\u7a0b\u5f0f\u5e0c\u671b\u4f7f\u7528\u8005\u53ea\u6703\u7533\u8acb\u540c\u4e00\u500b\u5e33\u865f\u540d\u7a31\u3002\u6211\u5011\u53ef\u4ee5\u5229\u7528\u65e5\u8a8c\u578b\u4e2d\u4ecb\u8005\u548c\u4e00\u7d44\u8ffd\u8e64\u8005\uff0c\u4e26\u900f\u904e\u4e2d\u4ecb\u8005\u7684\u5206\u5340\u6a5f\u5236\uff0c\u628a\u4e0d\u540c\u5e33\u865f\uff08\u53ef\u80fd\u52a0\u500b\u96dc\u6e4a\uff09\u7684\u7533\u8acb\u4e8b\u4ef6\u653e\u5728\u4e0d\u540c\u7684\u5206\u5340\uff0c\u8b93\u8ffd\u8e64\u8005\u8ffd\u8e64\u9019\u4e9b\u4e8b\u4ef6\u4e26\u7dad\u6301\u72c0\u614b\uff0c\u518d\u628a\u7533\u8acb\u4e8b\u4ef6\u7684\u6210\u529f\u8207\u5426\u8f38\u51fa\u6210\u53e6\u4e00\u500b\u4e3b\u984c\uff0c\u9019\u6a23\u5c31\u53ef\u4ee5\u505a\u5230\u64f4\u5c55\u6027\u53c8\u80fd\u4fdd\u6301\u4e00\u81f4\u6027\u3002
\u6574\u7406\u4e00\u4e0b\u900f\u904e\u4e8b\u4ef6\u4f86\u6e90\u505a\u9ad8\u4e00\u81f4\u6027\u7684\u908f\u8f2f\u548c\u9806\u5e8f\uff1a
\u76e3\u63a7\u6a5f\u5236\u53ef\u4ee5\u5e6b\u52a9\u4e86\u89e3\u8cc7\u6599\u53e2\u96c6\u7684\u5065\u5eb7\uff08\u4e00\u81f4\u6027\uff09\u7a0b\u5ea6\uff0c\u9019\u7a2e\u76e3\u63a7\u6280\u8853\u4e00\u76f4\u5f88\u8ca7\u810a\uff0c\u4f46\u662f\u5982\u679c\u6709\u4e86\u9019\u500b\u6771\u897f\uff0c\u53ef\u4ee5\u8b93\u6211\u5011\u5c0d\u65bc\u76ee\u524d\u64c1\u6709\u7684\u8cc7\u6599\u72c0\u6cc1\u6709\u8db3\u5920\u7684\u4fe1\u5fc3\u548c\u8aaa\u670d\u529b\u3002
\u5982\u679c\u4f7f\u7528\u4e8b\u4ef6\u4f86\u6e90\uff0c\u5728\u767c\u73fe\u53e2\u96c6\u6709\u5065\u5eb7\u7a0b\u5ea6\u4f4e\u843d\u7684\u5f37\u6cc1\u6642\uff0c\u5c31\u53ef\u4ee5\u5f9e\u539f\u59cb\uff08\u6216\u5feb\u7167\uff09\u72c0\u614b\u5229\u7528\u6b77\u53f2\u4e8b\u4ef6\u91cd\u65b0\u5efa\u7acb\u72c0\u614b\u4f86\u6eff\u8db3\u4e00\u81f4\u6027\u3002
\u7c3d\u8b49\u900f\u660e\u5316
\u7c3d\u8b49\u900f\u660e\u5316\uff08Certificate Transparency\uff09 \u662f\u4e00\u7a2e\u8b93\u6191\u8b49\u6a5f\u69cb\uff08CA\uff09\u53ef\u4ee5\u516c\u958b\u5176\u7c3d\u767c\u7684\u6191\u8b49\u7684\u6a5f\u5236\uff0c\u900f\u904e\u65e5\u8a8c\u5f62\u5f0f\u53ea\u9644\u52a0\u6bcf\u6b21\u65b0\u7c3d\u7684\u6191\u8b49\u3002 \u4e00\u5e74\u53ef\u7c3d\u767c\u7684\u6191\u8b49\u53ef\u80fd\u5e7e\u5341\u5104\u500b\uff0c\u8981\u600e\u9ebc\u505a\u5230\u6bcf\u6b21\u65b0\u589e\u6191\u8b49\u81ea\u52d5\u91cd\u65b0\u7522\u51fa\u9019\u500b\u65e5\u8a8c\u7684\u7c3d\u540d\uff1f
\u5982\u679c\u53ef\u4ee5\u505a\u5230\uff0c\u90a3\u9ebc\u9019\u9ede\u662f\u4e0d\u662f\u5c31\u53ef\u4ee5\u900f\u904e\u66ff\u5169\u500b\u8cc7\u6599\u5eab\u7522\u51fa\u5404\u81ea\u7684\u96dc\u6e4a\u503c\uff0c\u4e26\u7528\u4f86\u6aa2\u67e5\u5169\u500b\u8cc7\u6599\u5eab\u7684\u72c0\u614b\u662f\u5426\u4e00\u81f4\uff1f
\u800c\u9019\u500b\u6771\u897f\u662f\u4e0d\u662f\u5c31\u662f\u76e3\u63a7\u6a5f\u5236\uff1f
"},{"location":"feedback/designing-data-intensive-applications/farewell/#\u9ad8\u4e00\u81f4\u6027\u91cd\u8981\u55ce","title":"\u9ad8\u4e00\u81f4\u6027\u91cd\u8981\u55ce","text":"\u5c0d\u65bc\u5916\u90e8\u89c0\u5bdf\u8005\u4f86\u8aaa\uff0c\u7576\u4ed6\u9001\u51fa\u8acb\u6c42\u5f8c\u53e6\u5916\u4e00\u500b\u88dd\u7f6e\u53ef\u80fd\u770b\u4e0d\u5230\u525b\u525b\u7684\u7570\u52d5\uff0c\u4f46\u662f\u6211\u5011\u5728\u5927\u90e8\u5206\u60c5\u6cc1\u90fd\u4e0d\u9700\u8981\u9019\u9ebc\u56b4\u8b39\u7684\u4e00\u81f4\u6027\uff0c\u901a\u5e38\u6211\u5011\u5728\u610f\u7684\u662f\u7570\u52d5\u7684\u6b63\u78ba\u6027\uff0c\u53ea\u8981\u6700\u7d42\u7d50\u679c\u662f\u6b63\u78ba\uff0c\u8b93\u4f7f\u7528\u8005\u7b49\u500b\u5e7e\u5206\u9418\u53c8\u4f55\u4eff\uff0c\u4f8b\u5982\uff0c\u4fe1\u7528\u5361\u4ea4\u6613\u3001\u8a02\u7968\u3001\u7db2\u8cfc\u7b49\u7b49\u3002\u6211\u5011\u4e5f\u53ef\u4ee5\u900f\u904e\u4e00\u4e9b\u524d\u7aef\u63d0\u793a\u4f86\u8aaa\u660e\u72c0\u614b\u53ef\u80fd\u4e0d\u662f\u6700\u5373\u6642\u6216\u8005\u5148\u986f\u793a\u7d50\u679c\u518d\u901a\u77e5\u662f\u5426\u6b63\u78ba\u7570\u52d5\u3002
\u4ee5\u6e1b\u5c11\u9053\u6b49\u70ba\u6700\u7d42\u76ee\u7684\u7684\u8a71
\u4f60\u4e5f\u53ef\u4ee5\u9019\u6a23\u60f3\uff1a\u9ad8\u4e00\u81f4\u6027\u907f\u514d\u6211\u5011\u56e0\u70ba\u932f\u8aa4\u72c0\u614b\u8981\u5411\u4f7f\u7528\u8005\u9053\u6b49\u7684\u6a5f\u6703\uff0c\u4f46\u662f\u537b\u63d0\u9ad8\u4e86\u56e0\u70ba\u964d\u4f4e\u6548\u80fd\u3001\u53ef\u7528\u6027\u6240\u9700\u8981\u5411\u4f7f\u7528\u8005\u9053\u6b49\u7684\u6a5f\u6703\u3002\u65e2\u7136\u5982\u6b64\uff0c\u4f55\u4e0d\u6700\u4e00\u958b\u59cb\u5c31\u6e96\u5099\u597d\u9053\u6b49\u7684\u6a5f\u5236\u4e26\u4f7f\u7528\u9019\u7a2e\u9ad8\u53ef\u7528\u4e14\u9ad8\u5bb9\u932f\u7684\u6a5f\u5236\uff0c\u4e26\u5728\u767c\u751f\u932f\u8aa4\u72c0\u614b\u6642\u624b\u52d5\u4fee\u5fa9\u3002
"},{"location":"feedback/designing-data-intensive-applications/farewell/#\u5176\u4ed6\u6771\u897f","title":"\u5176\u4ed6\u6771\u897f","text":"\u8b1b\u4e86\u9019\u9ebc\u591a\u4e0d\u662f\u8981\u5426\u5b9a\u5f37\u4e00\u81f4\u6027\u7684\u8cc7\u6599\u53e2\u96c6\uff0c\u800c\u662f\u628a\u8996\u91ce\u62d3\u5bec\uff0c\u628a\u9019\u4e9b\u8cc7\u6599\u5eab\u7576\u6210\u5168\u516c\u53f8\u8cc7\u6599\u7cfb\u7d71\u7684\u4e00\u5c0f\u90e8\u5206\u5de5\u5177\uff0c\u800c\u9019\u5de5\u5177\u53ea\u662f\u884d\u751f\u8cc7\u6599\u7684\u4e00\u74b0\u4e26\u9069\u7528\u65bc\u90a3\u4e9b\u9700\u8981\u975e\u5e38\u56b4\u8b39\u8655\u7406\u8cc7\u6599\u7684\u61c9\u7528\u7a0b\u5f0f\u3002
\u76ee\u524d\u5e02\u9762\u4e0a\u5df2\u7d93\u6709\u8abf\u5ea6\u5bb9\u5668\u5316\u7684\u61c9\u7528\u7a0b\u5f0f\u7684\u5de5\u5177\uff0c\u4f8b\u5982 Kubernetes\uff0c\u9019\u8b93\u958b\u767c\u8005\u80fd\u5c0d\u65bc\u90e8\u7f72\u74b0\u5883\u64c1\u6709\u66f4\u9ad8\u7684\u63a7\u5236\u80fd\u529b\u3002\u4f46\u662f\u9019\u50c5\u9650\u65bc\u81ea\u5df1\u7684\u61c9\u7528\u7a0b\u5f0f\uff0c\u7576\u8de8\u5718\u968a\u9700\u8981\u4ea4\u63db\u8cc7\u6599\u6642\uff0c\u6211\u5011\u4ecd\u7136\u9700\u8981\u4f7f\u7528\u65e2\u6709\u7684\u6a5f\u5236\uff1a\u67e5\u770b\u6587\u4ef6\u3002
\u6709\u6c92\u6709\u4e00\u500b\u516c\u958b\u7684\u5730\u65b9\u8b93\u6211\u5011\u76f4\u63a5\u67e5\u770b\u9019\u4e9b\u8cc7\u6599\uff1f\u900f\u904e\u4e00\u500b\u6982\u89c0\u7684\u8cc7\u6599\u6d41\u5716\uff0c\u6211\u5011\u53ef\u4ee5\u5feb\u901f\u77e5\u9053\u54ea\u4e9b\u8cc7\u6599\u5c6c\u65bc\u54ea\u4e9b\u5718\u968a\uff0c\u9019\u4e9b\u8cc7\u6599\u53c8\u6709\u54ea\u4e9b\u61c9\u7528\u7a0b\u5f0f\u4f7f\u7528\uff0c\u800c\u9019\u500b\u6982\u7565\u5716\u5c31\u662f\u900f\u904e\u4e2d\u592e\u7684\u4e8b\u4ef6\u7ba1\u7406\u8005\u6216\u8005\u300c\u4e8b\u4ef6\u8abf\u5ea6\u5de5\u5177\u300d\u53bb\u5efa\u7acb\u3002
"},{"location":"feedback/designing-data-intensive-applications/foundation-dw/","title":"\u8cc7\u6599\u5009\u5132","text":"\u5982\u4f55\u5efa\u7acb\u4e00\u500b\u53ef\u4f9b\u5feb\u901f\u5206\u6790\u7684\u8cc7\u6599\u5eab\u3002\u4f8b\u5982\uff1a
HackMD \u5831\u544a\u6587\u672c
"},{"location":"feedback/designing-data-intensive-applications/foundation-dw/#\u4ec0\u9ebc\u662f-oltpolap-\u548c-dwh","title":"\u4ec0\u9ebc\u662f OLTP\u3001OLAP \u548c DWH","text":"\u4e00\u822c\u4f86\u8aaa\uff0c\u8cc7\u6599\u5eab\u5c0d\u65bc\u670d\u52d9\u4f7f\u7528\u8005\u4f86\u8aaa\uff0c\u5373\u662f\u5728\u4e00\u7fa4\u8cc7\u6599\u4e2d\u627e\u51fa\u7279\u5b9a\u8cc7\u6599\uff0c\u505a\u8b80\u5beb\u7684\u52d5\u4f5c\u3002 \u9019\u7a2e\u64cd\u4f5c\uff0c\u7a31\u70ba \u7dda\u4e0a\u7570\u52d5\u8655\u7406 \uff08online transaction processing, OLTP \uff09\u3002
\u65e9\u671f\u8cc7\u6599\u5eab\u7684\u64cd\u4f5c\u5e7e\u4e4e\u662f\u5546\u52d9\u4ea4\u6613\uff0c\u6240\u4ee5\u4fdd\u7559\u820a\u7a31\u300c\u4ea4\u6613\u300d\uff08transaction\uff09\u3002
\u7136\u800c\uff0c\u96a8\u8457\u8cc7\u6599\u7684\u589e\u52a0\uff0c\u958b\u59cb\u9700\u8981\u5c0d\u8cc7\u6599\u5eab\u505a\u4e00\u4e9b\u5206\u6790\u3002\u5e6b\u52a9\u670d\u52d9\u7ba1\u7406\u8005\u53bb\u505a\u4e00\u4e9b\u7279\u5b9a\u7684\u6c7a\u7b56\uff0c\u4f8b\u5982\uff1a
\u9019\u4e00\u985e\u7684\u884c\u70ba\uff0c\u5e38\u5e38\u9700\u8981\u91dd\u5c0d\u6240\u6709\u7684\u8cc7\u6599\u505a\u8b80\u53d6\uff0c\u800c\u4e0d\u9700\u8981\u5beb\u5165\u3002\u6211\u5011\u7a31\u4e4b\u70ba \u7dda\u4e0a\u5206\u6790\u8655\u7406 \uff08online analytic processing\uff0c OLAP\uff09\u3002
\u91dd\u5c0d\u9019\u7a2e\u548c OLTP \u7684\u64cd\u4f5c\u6709\u5f88\u5927\u5dee\u7570\u7684\u8cc7\u6599\uff0c\u800c\u53bb\u505a\u8a2d\u8a08\u7684\u8cc7\u6599\u5eab\uff0c\u6211\u5011\u7a31\u4e4b\u70ba \u8cc7\u6599\u5132\u5009\uff08Data Warehouse\uff0cDWH\uff09\u3002
\u6709\u6642\u5019\u4e26\u4e0d\u662f\u90a3\u9ebc\u6e05\u695a\u5c31\u53ef\u4ee5\u5340\u5206 OLTP \u548c OLAP\uff0c\u4f46\u662f\u4ecd\u6709\u4e00\u4e9b\u4e3b\u8981\u7684\u5dee\u7570\uff1a
\u5c6c\u6027 \u7dda\u4e0a\u7570\u52d5\u8655\u7406 \u7dda\u4e0a\u5206\u6790\u8655\u7406 \u4e3b\u8981\u7684\u8b80\u53d6\u6a21\u5f0f \u5c0f\u91cf\u8cc7\u6599\uff0c\u4e14\u900f\u904e\u9375\u7be9\u9078 \u805a\u5408\uff08aggregate\uff09\u5927\u91cf\u8cc7\u6599 \u4e3b\u8981\u7684\u5beb\u5165\u6a21\u5f0f \u4f4e\u6f5b\u6642\uff08latency\uff09\uff0c\u4e14\u96a8\u6a5f\u5beb\u5165 \u4e00\u6b21\u6027\u5927\u91cf\u5beb\u5165\uff0c\u6216\u900f\u904e\u4e8b\u4ef6\u6d41\u5165 \u4e3b\u8981\u4f7f\u7528\u65bc \u900f\u904e\u7db2\u8def\u6e9d\u901a\u7684\u670d\u52d9\u4f7f\u7528\u8005 \u5167\u90e8\u5206\u6790\u5e2b\uff0c\u5e6b\u52a9\u6c7a\u7b56 \u8cc7\u6599\u4ee3\u8868\u4ec0\u9ebc \u6700\u65b0\u72c0\u614b \u4e8b\u4ef6\u7684\u6b77\u53f2\u7d00\u9304 \u8cc7\u6599\u5eab\u5927\u5c0f GB~TB TB~PB"},{"location":"feedback/designing-data-intensive-applications/foundation-dw/#\u6bd4\u8f03","title":"\u6bd4\u8f03","text":"OLTP \u985e\u578b\u8cc7\u6599\u5eab\u901a\u5e38\u662f\u670d\u52d9\u4f7f\u7528\u8005\u76f4\u63a5\u63a5\u89f8\u7684\u3002 \u9019\u4ee3\u8868\u5927\u91cf\u7684\u8acb\u6c42\u6703\u88ab\u9700\u8981\u8655\u7406\uff0c\u70ba\u4e86\u8655\u7406\u9019\u985e\u9700\u6c42\uff0c\u8acb\u6c42\u901a\u5e38\u53ea\u6703\u63a5\u89f8\u8cc7\u6599\u5eab\u4e2d\u4e00\u90e8\u4efd\u8cc7\u6599\u3002 \u61c9\u7528\u7a0b\u5f0f\u53ef\u80fd\u6703\u900f\u904e\u7d22\u5f15\uff08index\uff09\u4f86\u52a0\u901f\u641c\u5c0b\u3002 \u9019\u985e\u7684\u8cc7\u6599\u5eab\u901a\u5e38\u6ce8\u91cd\u5f9e\u78c1\u789f\u4e2d\u627e\u5c0b\u7684\u901f\u5ea6 \uff08seek time\uff0c \u627e\u5c0b\u7279\u5b9a\u8cc7\u6599\u4f4d\u7f6e\u7684\u901f\u5ea6\uff09\u3002
OLAP \u985e\u578b\u8cc7\u6599\u5eab\u8f03\u5c11\u88ab\u77e5\u9053\uff0c\u56e0\u70ba\u9019\u985e\u578b\u8cc7\u6599\u5eab\u662f\u7528\u4f86\u505a\u5206\u6790\uff0c\u800c\u975e\u8b93\u670d\u52d9\u4f7f\u7528\u8005\u76f4\u63a5\u5b58\u53d6\u3002 \u96d6\u7136\u8acb\u6c42\u91cf\u6bd4 OLTP \u4f4e\uff0c\u4f46\u662f\u6bcf\u6b21\u8acb\u6c42\u53ef\u80fd\u90fd\u9700\u8981\u904d\u6b77\u8cc7\u6599\u5eab\u4f86\u53d6\u5f97\u7279\u5b9a\u5206\u6790\u7d50\u679c\u3002 \u9019\u985e\u7684\u8cc7\u6599\u5eab\u901a\u5e38\u6ce8\u91cd\u65bc\u78c1\u789f\u4e2d\u7684\u983b\u5bec \uff08bandwidth\uff0c\u8b80\u53d6\u5927\u91cf\u8cc7\u6599\u7684\u901f\u5ea6\uff09\u3002
"},{"location":"feedback/designing-data-intensive-applications/foundation-dw/#\u8cc7\u6599\u5009\u5132_1","title":"\u8cc7\u6599\u5009\u5132","text":"\u5c0d\u65bc\u516c\u53f8\u4f86\u8aaa\u53ef\u80fd\u6703\u6709\u5f88\u591a\u8cc7\u6599\u5eab\u53bb\u6eff\u8db3\u5404\u500b\u55ae\u4f4d\u7684\u9700\u6c42\u3002\u9019\u4e9b\u8cc7\u6599\u5eab\u5f88\u53ef\u80fd\u5f7c\u6b64\u662f\u5404\u81ea\u7368\u7acb\u7684\uff0c\u4f46\u537b\u90fd\u662f\u5728\u66ff\u540c\u4e00\u7fa4\u4f7f\u7528\u8005\u5728\u670d\u52d9\u3002\u4f8b\u5982\uff1a\u4eba\u529b\u9280\u884c\u7684
\u9664\u6b64\u4e4b\u5916\uff0c\u9019\u4e9b\u8cc7\u6599\u5eab\u70ba\u4e86\u6eff\u8db3 OLTP \u4f4e\u6f5b\u6642\u6027\uff0c \u7576\u4f60\u8981\u4e0b\u6307\u4ee4\u53bb\u641c\u96c6\u5168\u57df\u7684\u8cc7\u8a0a\u6642\uff0c\u4f60\u5f88\u53ef\u80fd\u6703\u88ab DBA \u62d2\u7d55\u3002 \u70ba\u4e86\u540c\u6642\u6eff\u8db3\u7dda\u4e0a\u4f7f\u7528\u8005\u9ad8\u6548\u7387\u7684\u904b\u4f5c\u548c\u5206\u6790\u5e2b\u7684\u6578\u64da\u722c\u53d6\uff0c \u9019\u6642 \u8cc7\u6599\u5132\u5009\uff08Data Warehouse\uff0cDWH\uff09\u4fbf\u51fa\u73fe\u4e86\u3002
\u5176\u7279\u6027\u6703\u628a\u6240\u6709\u4e0d\u540c\u670d\u52d9\u7684\u8cc7\u6599\uff0c \u5b9a\u6642\uff08periodic data dump\uff09\u6216\u6301\u7e8c\uff08continuous stream of updates\uff09\u5f9e\u8cc7\u6599\u5eab\u4e2d\u64f7\u53d6\u8cc7\u6599\u3002 \u4e26\u5b58\u5165\u9069\u5408\u5206\u6790\u7684\u7db1\u76ee\uff08schema\uff09\uff0c\u505a\u4e00\u4e9b\u91cd\u8907\u8cc7\u6599\u7684\u6e05\u7406\u7b49\u7b49\u3002 \u9019\u4e00\u7cfb\u5217\u7684\u884c\u70ba\u7a31\u4f5c\u8403\u53d6\u3001\u8b8a\u63db\u53ca\u8f09\u5165\uff08Extract\u2013Transform\u2013Load\uff0c ETL\uff09\u3002
\u6211\u5011\u4e4b\u524d\u5b78\u5230\u7684\u7d22\u5f15\u6f14\u7b97\u6cd5\uff0c\u4e26\u4e0d\u9069\u5408\u9019\u985e\u5206\u6790\u6027\u7684\u884c\u70ba\u3002 \u6240\u4ee5\u96d6\u7136\u5927\u90e8\u5206 DW \u90fd\u662f\u95dc\u806f\u5f0f\u8cc7\u6599\u5eab\uff0c \u5176\u5167\u90e8\u904b\u7b97\u908f\u8f2f\u537b\u548c\u5e38\u898b\u7684 OLTP \u95dc\u806f\u5f0f\u8cc7\u6599\u5eab\u4e0d\u540c\u3002\u76ee\u524d\u4e5f\u8d8a\u4f86\u8d8a\u591a\u8cc7\u6599\u5eab\u91dd\u5c0d\u4e0d\u540c\u5834\u57df\u505a\u7279\u5b9a\u7684\u512a\u5316\uff0c \u4e5f\u5c31\u662f\u5f88\u5c11\u6703\u770b\u5230\u4e00\u500b\u8cc7\u6599\u5eab\u540c\u6642\u6eff\u8db3 OLTP \u548c OLAP\u3002
Dedicated\uff0c\u737b\u8eab\u7684\u3002\u73fe\u5728\u5f88\u591a\u7522\u54c1\u90fd\u662f\u57fa\u65bc\u672c\u7406\u5ff5\u53bb\u63d0\u4f9b\u670d\u52d9\uff0c\u5c08\u5fc3\u505a\u4e00\u4ef6\u4e8b\uff0c\u800c\u4e14\u628a\u5b83\u505a\u597d\u3002 \u5fae\u670d\u52d9\u4e5f\u662f\u9019\u7a2e\u6982\u5ff5\u3002
"},{"location":"feedback/designing-data-intensive-applications/foundation-dw/#\u4e00\u4e9b-dw-\u8cc7\u6599\u5eab","title":"\u4e00\u4e9b DW \u8cc7\u6599\u5eab","text":"\u8cc7\u6599\u5009\u5132 \u53ef\u80fd\u7684\u7db1\u76ee\uff08schema\uff09\u8a2d\u8a08\u6709\u5169\u7a2e\uff1a
\u4ee5\u66f8\u4e2d\u7bc4\u4f8b\u505a\u4ecb\u7d39\uff1a
\u5728\u7d30\u770b\u9019\u4e9b\u8cc7\u6599\u4ee3\u8868\u7684\u610f\u7fa9\u4e4b\u524d\uff0c\u5148\u6ce8\u610f\u5230\u8868\uff08table\uff09\u7684\u524d\u7db4\u8a5e\u6709\u5169\u7a2e\uff1a
dim
\u5c0d\u8cc7\u6599\u63d0\u4f9b\u7dad\u5ea6\uff08dimension\uff09\u7684\u8868fact
\u5c55\u793a\u6240\u6709\u72c0\u614b\u7684\u8868\uff0c\u4e8b\u5be6\u8868\u4ee5\u4e0a\u8ff0\u5716\u7247\u70ba\u4f8b\u5b50\uff0c\u7522\u54c1\u3001\u5546\u5e97\u3001\u9867\u5ba2\u3001\u65e5\u671f\u3001\u63a8\u5ee3\u6d3b\u52d5\u7b49\u7b49\u5c31\u662f\u63d0\u9ad8\u4e8b\u5be6\u8868\u7dad\u5ea6\u7684\u8cc7\u6599\u5eab\u3002\u800c fact_sales
\u5c31\u662f\u92b7\u552e\u76f8\u95dc\u7684\u4e8b\u5be6\u8868\uff0c\u6216\u8005\u8aaa\u8a72\u8868\u7d00\u9304\u4e86\u6240\u6709\u92b7\u552e\u76f8\u95dc\u7684\u884c\u70ba\uff08\u4e8b\u4ef6\uff09\u3002
\u5118\u7ba1\u6709\u4e9b\u662f\u5c0d\u7167\u5176\u4ed6\u8868\u7684\u5916\u5340\u9375\uff08foreign key\uff09\uff0c\u4f46\u4ecd\u6709\u5f88\u591a\u6b04\u4f4d\u662f\u76f8\u95dc\u884c\u70ba\uff08\u4e8b\u4ef6\uff09\u7684\u5c6c\u6027\uff0c \u4f8b\u5982\uff1a\u8a72\u300c\u9867\u5ba2\u300d\u65bc\u8a72\u300c\u5546\u5e97\u300d\u8cfc\u8cb7\u8a72\u300c\u7522\u54c1\u300d\u7684\u6578\u91cf\u3001\u539f\u50f9\u3001\u552e\u50f9\u7b49\u7b49\u3002 \u7531\u6b64\u53ef\u77e5\uff0c\u82e5\u63d0\u4f9b\u7d30\u7bc0\u4fe1\u606f\uff0c\u8a72\u8868\u683c\u5c07\u6703\u6709\u975e\u5e38\u591a\u7684\u6b04\u4f4d\uff0c \u6216\u8005\u8aaa\u5c6c\u6027\uff08property\uff09\uff0c\u751a\u81f3\u53ef\u80fd\u5230\u6578\u767e\u7a2e\u5c6c\u6027\u3002
"},{"location":"feedback/designing-data-intensive-applications/foundation-dw/#\u96ea\u82b1\u7db1\u76ee","title":"\u96ea\u82b1\u7db1\u76ee","text":"\u985e\u4f3c\u65bc\u661f\u72c0\u7db1\u76ee\uff0c\u53ea\u662f\u4ed6\u7684\u7dad\u5ea6\u8868\u53ef\u80fd\u6703\u6709\u5f88\u591a\u5c64\uff0c\u4f8b\u5982\uff1a\u300c\u7522\u54c1\u8868\u300d\u53c8\u6703\u6709\u5916\u5340\u9375\u9023\u5230\u300c\u54c1\u724c\u8868\u300d\u548c\u300c\u7a2e\u985e\u8868\u300d\u3002
"},{"location":"feedback/designing-data-intensive-applications/foundation-dw/#\u6bd4\u8f03_1","title":"\u6bd4\u8f03","text":"\u5927\u90e8\u5206\u8cc7\u6599\u5eab\u9078\u64c7\u4f7f\u7528\u661f\u72c0\u7db1\u76ee\uff0c\u56e0\u70ba\u5176
\u5728\u4e00\u822c OLAP \u4e2d\uff0c\u53ea\u6703\u8b80\u53d6\u90e8\u5206\u6b04\u4f4d\uff0c\u4ee5\u4e0a\u8ff0\u8868\u683c\u70ba\u4f8b\uff1a\u5728\u5047\u65e5\u8cfc\u8cb7\u7279\u5b9a\u7a2e\u985e\u7684\u6578\u91cf\uff1a
SELECT\n dim_date.weekday, dim_product.category,\n SUM(fact_sales.quantity) AS quantity_sold\nFROM fact_sales\n JOIN dim_date ON fact_sales.date_key = dim_date.date_key\n JOIN dim_product ON fact_sales.product_sk = dim_product.product_sk\nWHERE\n dim_date.year = 2013 AND\n dim_product.category IN ('Fresh fruit', 'Candy')\nGROUP BY\n dim_date.weekday, dim_product.category;\n
\u7531\u6b64\u4f8b\u53ef\u77e5\uff0c\u5728\u8a72\u7279\u6027\u4e0b\uff0c\u82e5\u6bcf\u6b21\u64cd\u4f5c\u50c5\u62ff\u53d6\u90e8\u5206\u8cc7\u6599\u505a\u904b\u7b97\uff0c \u662f\u5426\u6709\u5fc5\u8981\u505a\u529f\u8b93\u5176\u4ed6\u6b04\u4f4d\u7684\u8cc7\u6599\u4e00\u8d77\u5f9e\u78c1\u789f\uff08disk\uff09\u4e2d\u8b80\u53d6\u51fa\u4f86\uff1f
\u5c24\u5176\u662f\u5728\u8cc7\u6599\u91cf\u6709\u597d\u5e7e PB\uff0c\u800c\u6bcf\u4e00\u884c\u53ef\u80fd\u6709\u597d\u5e7e\u767e\u500b\u5c6c\u6027\u6642\uff0c\u9019\u985e\u300c\u5c0f\u7f3a\u9ede\u300d\u5c07\u6703\u88ab\u653e\u5927\u3002
\u884c\u5f0f\u8cc7\u6599\u5eab\uff08column-oriented storage\uff09\u7684\u6982\u5ff5\u5c31\u662f\u7531\u6b64\u800c\u751f\uff0c \u6211\u4e0d\u4ee5\u6bcf\u5217\uff08row\uff09\u70ba\u55ae\u4f4d\u505a\u5132\u5b58\uff0c\u800c\u662f\u6539\u70ba\u6bcf\u884c\u70ba\u55ae\u4f4d\u3002 \u9019\u6a23\u5728\u8b80\u53d6\u6642\uff0c\u5c31\u53ea\u9700\u8981\u8b80\u53d6\u5c11\u90e8\u5206\u7684\u8cc7\u6599\u3002
\u4e26\u975e\u53ea\u6709\u95dc\u806f\u5f0f\u8cc7\u6599\u5eab\u9069\u5408\u505a\u884c\u5f0f\u8cc7\u6599\u5eab\uff0c\u50c5\u50c5\u56e0\u70ba\u95dc\u806f\u5f0f\u8cc7\u6599\u5eab\u5728\u8b1b\u89e3\u4e0a\u662f\u6700\u597d\u7406\u89e3\u7684\u3002 Parquet \u5c31\u662f\u4e00\u500b\u4ee5 Google's Dremel paper \u70ba\u57fa\u790e\u7684\u6587\u4ef6\u5f0f\u8cc7\u6599\u5eab\u3002
\u9019\u540c\u6642\u4e5f\u4ee3\u8868\uff0c\u6bcf\u4e00\u884c\u90fd\u9700\u8981\u64c1\u6709\u76f8\u540c\u7684\u9806\u5e8f\u548c\u6578\u91cf\uff0c\u800c\u9019\u689d\u4ef6\u5728 OLAP \u662f\u7b26\u5408\u7684\uff0c\u56e0\u70ba\u5176\u4e0d\u6703\u522a\u9664\u4efb\u4e00\u884c\u8cc7\u6599\u3002
"},{"location":"feedback/designing-data-intensive-applications/foundation-dw/#\u58d3\u7e2e","title":"\u58d3\u7e2e","text":"\u597d\u7684\u8cc7\u6599\u58d3\u7e2e\uff0c\u53ef\u4ee5\u964d\u4f4e\u5728\u8b80\u53d6\u6d77\u91cf\u8cc7\u6599\u7684\u6642\u9593\uff0c\u800c OLAP \u9084\u6709\u500b\u7279\u6027\uff0c\u5c31\u662f\u300c\u884c\u300d\u53ef\u80fd\u7684\u503c\u662f\u6709\u9650\u7684\u3002\u4f8b\u5982\uff1a\u7522\u54c1\u6578\u91cf\u53ef\u80fd\u53ea\u6709\u6578\u842c\u6216\u6578\u5341\u842c\u500b\uff0c\u4f46\u662f\u8a02\u55ae\u537b\u53ef\u80fd\u6bcf\u5e74\u6709\u597d\u5e7e\u5104\u7b46\u3002
\u56e0\u6b64\uff0c\u4ee5\u64cd\u4f5c\u70ba\u884c\uff0c\u7522\u54c1\u7de8\u865f\u70ba\u884c\uff08\u7570\u65bc\u8cc7\u6599\u5eab\u6bcf\u7b46\u8a02\u55ae\u90fd\u4ee5\u5217\u5b58\u5728\uff0c\u800c\u7522\u54c1\u7de8\u865f\u662f\u4e00\u7a2e\u6b04\u4f4d\uff09\uff0c\u53ef\u5f97\u4e0b\u8868\uff1a
\u7522\u54c1\u7de8\u865f \u8a02\u55ae 1 \u8a02\u55ae 2 \u8a02\u55ae 3 ... 1 1 0 1 ... 2 0 1 0 ... 3 0 0 0 ... ... - - - ...\u5176\u610f\u7fa9\u4ee3\u8868\uff1a
\u8a02\u55ae 1
\u8cfc\u8cb7 \u7522\u54c1 1
\u8a02\u55ae 2
\u8cfc\u8cb7 \u7522\u54c1 2
\u8a02\u55ae 3
\u8cfc\u8cb7 \u7522\u54c1 1
\u6b64\u6642\u4e26\u4e0d\u80fd\u58d3\u7e2e\u8cc7\u6599\uff0c\u4e8b\u5be6\u4e0a\uff0c\u4ed6\u53ea\u662f\u628a\u5404\u64cd\u4f5c\u7684\u5404\u7522\u54c1\u7de8\u865f\uff0c\u5c55\u958b\u6210\u4e8c\u9032\u4f4d\u800c\u5df2\u3002 \u4e5f\u5c31\u662f\uff0c\u4f4d\u5143\u6620\u5c04\uff08bitmap encoding\uff09\u3002 \u7136\u800c\uff0c\u56e0\u70ba OLAP \u7684\u7279\u6027\u8b93\u6bcf\u884c\u6709\u591a\u500b\u70ba 0 \u7684\u6b04\u4f4d\uff0c \u6b64\u6642\u5c31\u53ef\u4ee5\u900f\u904e\u57f7\u884c\u9577\u5ea6\u7de8\u78bc\uff08run-length encoded\uff09\u9032\u884c\u58d3\u7e2e\u3002
\u800c\u5c55\u958b\u6210\u4e8c\u9032\u4f4d\u7684\u683c\u5f0f\uff0c\u4e0d\u6b62\u5229\u65bc\u58d3\u7e2e\uff0c\u5728\u8a08\u7b97\u6642\uff0c\u4e5f\u53ef\u4ee5\u55ae\u7d14\u900f\u904e OR AND \u53bb\u505a\u8a08\u7b97\u3002\u4f8b\u5982\uff1a
WHERE product_sk IN (30, 68, 69)\n
\u6211\u5011\u8b80\u53d6\u7522\u54c1\u7684\u4f4d\u5143\u6620\u5c04\u8868\u4e2d\u7684\u7b2c 30
\uff0c68
\u548c 69
\u5217\uff0c \u7136\u5f8c\u62ff\u51fa\u4e09\u6bb5\u4f4d\u5143\u5411\u91cf\uff08bit vector\uff09\u505a\u4f4d\u5143\u9593\u7684 OR \u904b\u7b97\u3002
WHERE product_sk = 31 AND store_sk = 3\n
\u6211\u5011\u8b80\u53d6\u4f4d\u7522\u54c1\u7684\u5143\u6620\u5c04\u8868\u4e2d\u7684\u7b2c 31
\u5217\uff0c\u7136\u5f8c\u8b80\u53d6\u5546\u5e97\u7684\u5143\u6620\u5c04\u8868\u4e2d\u7684\u7b2c 3
\u5217\u505a\u4f4d\u5143\u9593\u7684 AND \u904b\u7b97\u3002
\u9019\u985e\u64cd\u4f5c\u4e4b\u6240\u4ee5\u53ef\u4ee5\u904b\u4f5c\uff0c\u5c31\u662f\u56e0\u70ba\u6211\u5011\u540c\u6b65\u6240\u6709\u884c\u7684\u6578\u91cf\u548c\u9806\u5e8f\u3002 \u4e5f\u5c31\u662f\u6bcf\u5217\u90fd\u64c1\u6709\u6240\u6709\u6b04\u4f4d\uff08\u6bcf\u500b\u8a02\u55ae\u90fd\u6709\u7522\u54c1\u7de8\u865f\u3001\u5546\u5e97\u7de8\u865f\u7b49\u7b49\uff09\u3002
\u82e5\u9700\u8981\u67e5\u770b\u66f4\u591a\u58d3\u7e2e\u7684\u6f14\u7b97\u6cd5\uff0c \u53ef\u4ee5\u67e5\u770b The Design and Implementation of Modern Column-Oriented Database Systems. Ct4-2\u3002
Column Family \u548c Column Oriented \u662f\u4e0d\u540c\u7684\u6982\u5ff5\uff0c \u5176\u88ab\u61c9\u7528\u65bc\u57fa\u65bc Bigtable \u67b6\u69cb\u7684\u8cc7\u6599\u5eab Cassandra \u548c HBase \u4e2d\u3002
\u5176\u539f\u7406\u662f\u628a\u6240\u6709\u884c\uff08\u7bc0\u9ede\uff09\u6574\u5408\u6210\u4e00\u500b\u55ae\u4f4d\uff0c\u5c31\u50cf\u662f\u628a\u6bcf\u500b\u6587\u4ef6\u7576\u6210\u95dc\u806f\u5f0f\u8cc7\u6599\u5eab\u7684\u8868\uff08table\uff09\uff0c \u4e26\u4e14\u4e0d\u6703\u5c0d\u9019\u55ae\u4f4d\u9032\u884c\u5217\u58d3\u7e2e\uff08column compression\uff09\uff0c \u56e0\u6b64\u8a72\u6a21\u578b\u4ecd\u4e3b\u8981\u662f\u4ee5\u5217\u5f0f\u8cc7\u6599\u5eab\uff08row-oriented\uff09\u70ba\u4e3b\u3002
"},{"location":"feedback/designing-data-intensive-applications/foundation-dw/#\u786c\u9ad4\u9762\u512a\u5316","title":"\u786c\u9ad4\u9762\u512a\u5316","text":"\u7576\u9032\u884c\u904b\u7b97\u548c\u5206\u6790\u6642\uff0c\u7cfb\u7d71\u5fc5\u9808\u5f9e\u786c\u9ad4\u78c1\u789f\uff08disk\uff09\u4e2d\u8b80\u53d6\u8cc7\u6599\u4e26\u5b58\u9032\u8a18\u61b6\u9ad4\uff08memory\uff09\u4e2d\u3002 \u9664\u4e86\u9019\u4e00\u6bb5\u7684\u983b\u5bec\u9700\u8981\u8003\u91cf\u5916\uff0c\u9084\u9700\u8981\u8003\u91cf\u8a18\u61b6\u9ad4\u9032\u5165 CPU \u5feb\u53d6\u4e2d\u7684\u983b\u5bec\u3002 \u5728\u57f7\u884c\u9019\u4e9b\u884c\u70ba\u7684\u8a0a\u865f\u6642\uff0c \u70ba\u4e86\u512a\u5316 \u6307\u4ee4\u7ba1\u7dda\u5316\uff08Instruction pipeline\uff09\u76e1\u53ef\u80fd\u907f\u514d_\u5feb\u53d6\u5c64\u7d1a\u7684\u8aa4\u5224_\uff08branch mis-predictions\uff09\uff0c \u4e26\u4f7f\u7528\u73fe\u4ee3 CPU \u4e2d\u7684 SIMD\uff08single-instruction-multi-data\uff09 \u6307\u4ee4\u3002
\u55ae\u4f4d Latency \u7b2c\u4e00\u5c64\u5feb\u53d6 1 ns \u7b2c\u4e8c\u5c64\u5feb\u53d6 4 ns \u7b2c\u4e09\u5c64\u5feb\u53d6 40 ns \u2191 \u4e3b\u8a18\u61b6\u9ad4\uff08DDR\uff09 80 ns \u2191 \u8b80\u53d6\u78c1\u789f 80 us \u2191/Intel - Memory Performance in a Nutshell
\u9664\u4e86\u76e1\u53ef\u80fd\u6e1b\u5c11\u62c9\u53d6\u7684\u8cc7\u6599\uff0c\u6bcf\u6b21\u62c9\u53d6\u6642\u4e5f\u9808\u6709\u6548\u7684\u914d\u5408 CPU \u7684\u9031\u671f\u3002 \u4f8b\u5982\uff0c\u641c\u5c0b\u5f15\u64ce\u6703\u628a\u58d3\u7e2e\u5f8c\u7684\u884c\u5f0f\u8cc7\u6599\u5206\u6210\u597d\u5e7e\u6bb5\uff08chunk\uff09\uff0c \u4e26\u6301\u7e8c\u4e14\u7dca\u5bc6\u5730\uff08\u4e5f\u5c31\u662f\u904e\u7a0b\u4e2d\u4e0d\u547c\u53eb\u4efb\u4f55\u51fd\u793a\uff0c\u907f\u514d function call/jump\uff09\u653e\u9032 CPU \u7b2c\u4e00\u5c64\u5feb\u53d6\u4e2d\u3002 \u9664\u6b64\u4e4b\u5916\u6bcf\u4e00\u6bb5\uff08chunk\uff09\u5f7c\u6b64\u9593\u90fd\u53ef\u4ee5\u76f4\u63a5\u4f7f\u7528\u96fb\u6676\u9ad4\u53bb\u57f7\u884c AND \u6216 OR \u7b49\u908f\u8f2f\u904b\u7b97\u3002
\u9019\u4e00\u7cfb\u5217\u7684\u6280\u5de7\u7a31\u70ba\u5411\u91cf\u8655\u7406\uff08vectorized processing\uff09\uff0c\u4e8b\u5be6\u4e0a\u9019\u5c31\u662f SIMD \u9019\u985e\u6307\u4ee4\u5728\u505a\u7684\u4e8b\u3002
"},{"location":"feedback/designing-data-intensive-applications/foundation-dw/#\u6392\u5e8f","title":"\u6392\u5e8f","text":"\u628a\u8cc7\u6599\u7d93\u904e\u6392\u5e8f\u5f8c\u518d\u5132\u5b58\u9664\u4e86\u52a0\u901f\u641c\u5c0b\u4e5f\u53ef\u4ee5\u900f\u904e\u9577\u5ea6\u7de8\u78bc\uff08run-length encoded\uff09\u4f7f\u58d3\u7e2e\u66f4\u7dca\u5bc6\u3002\u4f8b\u5982 00001000100
\u6392\u5e8f\u5f8c\u8b8a\u6210 1,2,0,9
\uff081 \u6709 2 \u500b\uff0c0 \u6709 9 \u500b\uff09\u3002
\u53ef\u4ee5\u900f\u904e\u4e4b\u524d\u63d0\u904e\u7684 \u6392\u5e8f\u5b57\u4e32\u8868 \u4f86\u505a\u6392\u5e8f\u3002 SSTables \u5206\u6210\u78c1\u789f\u4e0a\u7684\u8cc7\u6599\u548c\u8a18\u61b6\u9ad4\u4e2d\u7684\u8cc7\u6599\uff0c\u8a18\u61b6\u9ad4\u7684\u8cc7\u6599\u65b9\u4fbf\u505a\u6392\u5e8f\u548c\u63d2\u5165\u3002 \u7576\u8a18\u61b6\u9ad4\u9054\u5230\u4e00\u5b9a\u5927\u5c0f\u5f8c\uff0c\u5beb\u5165\u78c1\u789f\u4e2d\u3002\u800c\u78c1\u789f\u4e2d\u7684\u6a94\u6848\u6bcf\u884c\u53c8\u88ab\u5206\u6210\u597d\u5e7e\u6bb5\uff0c\u65b9\u4fbf\u505a\u8cc7\u6599\u7684\u67e5\u627e\u548c\u63d2\u5165\u3002 Vertica \u7684\u8cc7\u6599\u5eab\u4fbf\u662f\u4f9d\u6b64\u65b9\u5f0f\u3002
\u9700\u8981\u6ce8\u610f\u7684\u662f\uff0c\u96d6\u7136\u662f\u628a\u6bcf\u884c\u4f5c\u70ba\u5132\u5b58\u55ae\u4f4d\uff0c\u5728\u6392\u5e8f\u6642\u4ecd\u8981\u8b93\u6240\u6709\u884c\u7684\u5404\u5217\u8cc7\u6599\u4fdd\u6301\u76f8\u540c\u9806\u5e8f\u3002
\u6211\u5011\u4ee5\u524d\u9762\u4f8b\u5b50\u63d0\u5230\u96f6\u552e\u696d\u70ba\u4f8b\uff1a
\u82e5\u767c\u73fe\u5e38\u5e38\u4f7f\u7528\u65e5\u671f\u55ae\u4f4d\u505a\u641c\u5c0b\uff0c\u5982\u6bcf\u6708\u7684\u8cfc\u8cb7\u7522\u54c1\u7e3d\u6578\uff0c\u5247\u53ef\u4ee5\u4f7f\u7528 date_key
\u4f86\u505a\u6392\u5e8f\u3002 \u4e5f\u53ef\u4ee5\u518d\u65b0\u589e\u4e00\u500b\u884c\u4f86\u6392\u5e8f\u3002 \u4f8b\u5982\uff0c\u4f7f\u7528\u7522\u54c1\u7de8\u865f\u984d\u5916\u505a\u4e00\u7d44\u6392\u5e8f\u7684\u8cc7\u6599\uff0c\u9019\u6a23\u8cc7\u6599\u5c31\u6703\u4ee5\u65e5\u671f\u6392\u5e8f\uff0c\u8b93\u8cc7\u6599\u5eab\u5feb\u901f\u627e\u5230\u6307\u5b9a\u65e5\u671f\u3002 \u540c\u6642\u53c8\u518d\u4f7f\u7528\u7522\u54c1\u7de8\u865f\u6392\u5e8f\uff0c\u9019\u6642\u5e6b\u52a9\u5206\u6790\u5e2b\u5feb\u901f\u5224\u65b7\u54ea\u5929\u6709\u54ea\u4e9b\u7522\u54c1\u71b1\u8ce3\u3002
\u6392\u5e8f\u7684\u884c\u7a2e\u8d8a\u591a\uff0c\u5176\u80fd\u5f37\u5316\u7684\u58d3\u7e2e\u91cf\u548c\u641c\u5c0b\u901f\u5ea6\u5c31\u8d8a\u5c11\u3002
\u70ba\u4e86\u907f\u514d\u7b2c\u4e8c\u3001\u4e09\u7d44\u6392\u5e8f\u5f71\u97ff\u8f03\u5c11\uff0c\u9019\u6642\u5c31\u767c\u5c55\u51fa\u65b0\u7684\u5c0f\u6280\u5de7\uff0c\u4f8b\u5982 Vertica \u7684\u8cc7\u6599\u5eab\uff1a
\u53cd\u6b63\u8cc7\u6599\u90fd\u8981\u505a\u5099\u4efd\u548c HA \u800c\u628a\u8cc7\u6599\u8907\u88fd\u5230\u5404\u6a5f\u5668\uff0c\u4f60\u5c31\u53ef\u4ee5\u628a\u5404\u6a5f\u5668\u7684\u8cc7\u6599\u505a\u4e0d\u540c\u65b9\u5f0f\u53bb\u5132\u5b58\u3002 \u4f8b\u5982\u8cc7\u6599\u5eab A \u4ee5\u65e5\u671f\u4f5c\u70ba sort key
\uff0c\u8cc7\u6599\u5eab B \u4ee5\u7522\u54c1\u4f5c\u70ba sort key
\u3002
\u53ef\u4ee5\u60f3\u50cf\u5176\u548c\u5217\u5f0f\u8cc7\u6599\u5eab\u7684\u591a\u7d22\u5f15\u7684\u5dee\u7570\u3002\u5217\u5f0f\u8cc7\u6599\u5eab\u5728\u591a\u7d22\u5f15\u4e2d\uff0c\u5e38\u5e38\u6703\u5728\u7d22\u5f15\u4e2d\u5132\u5b58\u6a94\u6848\u7684\u4f86\u6e90\uff0c \u4f8b\u5982 heap file \u7b49\u7b49\u3002 \u800c\u884c\u5f0f\u8cc7\u6599\u5eab\u5247\u662f\u6839\u64da\u7279\u5b9a\u6392\u5e8f\u65b9\u5f0f\u76f4\u63a5\u5132\u5b58\u8a72\u8cc7\u6599\u3002
"},{"location":"feedback/designing-data-intensive-applications/foundation-dw/#\u66ab\u5b58\u805a\u5408","title":"\u66ab\u5b58\u805a\u5408","text":"\u641c\u5c0b\u6642\uff0c\u5e38\u5e38\u6703\u7528\u5230\u805a\u5408\uff08aggregation\uff09\u8cc7\u6599\uff0c\u4f8b\u5982\u7e3d\u6578\uff08sum\uff09\u3001\u5e73\u5747\uff08avg\uff09\u7b49\u7b49\u3002 \u800c\u9019\u985e\u64cd\u4f5c\u5e38\u5e38\u90fd\u9700\u8981\u904d\u6b77\u8cc7\u6599\u5eab\uff0c\u65e2\u7136\u9019\u4e9b\u8cc7\u6599\u5f88\u8017\u6642\u53c8\u9700\u8981\u5e38\u5e38\u7528\u5230\uff0c\u5c31\u66ab\u5b58\u4ed6\u5427\u3002 \u9019\u985e\u66ab\u5b58\u5f8c\u7684\u805a\u5408\u8cc7\u6599\uff0c\u7a31\u70ba\u7269\u5316\u805a\u5408\uff08materialized aggregates\uff09\uff0c \u800c\u5c55\u793a\u9019\u985e\u8cc7\u6599\u7684\u5716\u6216\u8868\uff08table\uff09\u7a31\u70ba\u7269\u5316\u8996\u5716\uff08materialized view\uff09\u3002
\u7269\u5316\u8996\u5716\u548c\u95dc\u806f\u5f0f\u8cc7\u6599\u5eab\u5e38\u898b\u7684\u6a19\u6e96\u8996\u5716\uff08standard/virtual view\uff09\u6709\u6240\u5dee\u7570\uff0c \u6a19\u6e96\u8996\u5716\u53ea\u662f\u628a\u67e5\u8a62\u8a18\u9304\u6574\u5408\u5728\u4e00\u8d77\uff0c\u7576\u88ab\u4f7f\u7528\u6642\uff0c\u4ecd\u7136\u6703\u57f7\u884c\u5176\u4e2d\u4e00\u7cfb\u5217\u7684\u67e5\u8a62\u3002
\u53cd\u4e4b\uff0c\u7269\u5316\u8996\u5716\u662f\u76f4\u63a5\u628a\u641c\u5c0b\u7d50\u679c\u5132\u5b58\u8d77\u4f86\uff0c\u4e5f\u5c31\u662f\u4e00\u4efd\u53bb\u6b63\u898f\u5316\uff08de-normalized\uff0c \u76f8\u540c\u8cc7\u6599\u653e\u5728\u591a\u500b\u5730\u65b9\uff0c\u63d0\u9ad8\u8cc7\u6599\u540c\u6b65\u7684\u56f0\u96e3\uff09\u7684\u8cc7\u6599
\u5716\u4e2d\u5c55\u793a\uff0c\u4e8c\u7dad\u8cc7\u6599\u5728\u505a\u7269\u5316\u6574\u5408\u6642\u7684\u65b9\u5f0f\u3002\u6bcf\u4e00\u500b\u55ae\u5143\uff08cell\uff09\u5132\u5b58\u67d0\u4e00\u5929\u7684\u67d0\u4e00\u500b\u7522\u54c1\u92b7\u552e\u7e3d\u984d\uff0c \u5217\u5c3e\u5132\u5b58\u67d0\u4e00\u5929\u7684\u6240\u6709\u7522\u54c1\u92b7\u552e\u7e3d\u984d\uff0c\u884c\u5c3e\u5132\u5b58\u67d0\u4e00\u7522\u54c1\u7684\u6240\u6709\u92b7\u552e\u7e3d\u984d\u3002 \u9664\u6b64\u4e4b\u5916\uff0c\u8cc7\u6599\u66f4\u53ef\u80fd\u88ab\u9032\u884c\u591a\u7dad\u5ea6\u7684\u5132\u5b58\uff0c\u4f8b\u5982\u8cfc\u7269\u8005\u7684\u5e74\u9f61\u7b49\u7b49\u3002
\u7dad\u8b77\u7269\u5316\u8996\u5716\u662f\u6703\u964d\u4f4e\u5beb\u5165\u6642\u7684\u6548\u80fd\u7684\uff0c\u6240\u4ee5\u5728 OLTP \u7684\u8cc7\u6599\u5eab\u4e2d\u5f88\u5c11\u6703\u770b\u5230\u5176\u5b58\u5728\u3002
\u4e00\u822c\u7684 \u8cc7\u6599\u5009\u5132 \u90fd\u6703\u76e1\u53ef\u80fd\u7684\u4fdd\u5b58\u539f\u59cb\u8cc7\u6599\uff08\u58fd\u53f8\u7b56\u7565\uff09\uff0c\u7576\u5728\u641c\u5c0b\u6642\uff0c\u5982\u679c\u9700\u8981\u52a0\u901f\u67d0\u4e9b\u7d50\u679c\uff0c\u518d\u4f7f\u7528\u9019\u4e9b\u52a0\u901f\u624b\u6cd5\u3002
"},{"location":"feedback/designing-data-intensive-applications/foundation-encode/","title":"\u7de8\u78bc\u548c\u9032\u7a0b","text":"\u61c9\u7528\u7a0b\u5f0f\u7121\u53ef\u907f\u514d\u5730\u9700\u8981\u6f14\u9032\uff0c\u5728\u6539\u8b8a\u61c9\u7528\u7a0b\u5f0f\u7684\u540c\u6642\uff0c\u901a\u5e38\u4e5f\u6703\u9700\u8981\u8abf\u6574\u8cc7\u6599\u7684\u7d50\u69cb\u3002\u5982\u4f55\u8b93\u61c9\u7528\u7a0b\u5f0f\u5728\u4f7f\u7528\u8cc7\u6599\u6642\u4fdd\u6301\u524d\u5f8c\u76f8\u5bb9\uff1f
\u8cc7\u6599\u5728\u505a\u5132\u5b58\u6216\u8f38\u51fa\u7684\u6642\u5019\u662f\u9700\u8981\u7de8\u78bc\uff08encoding\uff09\u7684\uff0c\u9664\u4e86\u53ef\u4ee5\u5e6b\u52a9\u58d3\u7e2e\u8cc7\u6599\u91cf\u3001\u52a0\u901f\u6548\u80fd\u5916\uff0c \u597d\u7684\u7de8\u78bc\u65b9\u5f0f\u4e5f\u80fd\u63d0\u4f9b\u826f\u597d\u7684\u524d\u5f8c\u76f8\u5bb9\u3002
HackMD \u5831\u544a\u6587\u672c
"},{"location":"feedback/designing-data-intensive-applications/foundation-encode/#\u7de8\u78bc","title":"\u7de8\u78bc","text":"\u7576\u4f60\u628a\u8cc7\u6599\u5b58\u9032\u8a18\u61b6\u9ad4\u4e2d\uff0c\u53ef\u4ee5\u900f\u904e\u5404\u7a2e\u8cc7\u6599\u578b\u5225\u53bb\u5c0d\u8cc7\u6599\u9032\u884c\u64cd\u4f5c\uff0c\u4f8b\u5982\u9663\u5217\u3001\u7269\u4ef6\u7b49\u7b49\u3002\u7136\u800c\u7576\u628a\u8cc7\u6599\u5b58\u9032\u78c1\u789f\uff08filesystem\uff09\u4e2d\u6216\u8005\u900f\u904e\u7db2\u8def\u50b3\u9001\u7d66\u5176\u4ed6\u670d\u52d9\u6642\uff0c\u5c31\u9700\u8981\u4ee5\u7de8\u78bc\u5f8c\u7684\u8cc7\u6599\uff08\u4f8b\u5982 JSON \u683c\u5f0f\uff09\u4f86\u5132\u5b58\u6216\u8f38\u51fa\u3002
"},{"location":"feedback/designing-data-intensive-applications/foundation-encode/#\u7a0b\u5f0f\u78bc\u5167\u5efa","title":"\u7a0b\u5f0f\u78bc\u5167\u5efa","text":"\u6211\u5011\u90fd\u6703\u900f\u904e\u7a0b\u5f0f\u8a9e\u8a00\u4f86\u548c\u8a18\u61b6\u9ad4\u6e9d\u901a\uff0c\u4e0d\u540c\u7a0b\u5f0f\u8a9e\u8a00\u9810\u8a2d\u5c31\u6709\u4e9b\u7de8\u78bc\u65b9\u5f0f\uff0cJava\uff1ajava.io.Serializable
\u3001Ruby\uff1aMarshal
\u3001Python\uff1apickle
\uff0c\u7136\u800c
JSON\u3001XML\u3001CSV\uff0c\u9019\u4e9b\u683c\u5f0f\u90fd\u5f88\u5e38\u898b\uff0c\u4e0d\u9700\u8981\u7db1\u76ee\u5c31\u80fd\u89e3\u78bc\u3002\u7136\u800c
\u7136\u800c\u9019\u4e9b\u4ecd\u662f\u4e3b\u8981\u7684\u7de8\u78bc\u65b9\u5f0f\uff0c\u4e5f\u56e0\u70ba\u5927\u5bb6\u5f88\u7fd2\u6163\u9019\u4e9b\u65b9\u5f0f\u7684\u7de8\u78bc\uff0c\u5c0e\u81f4\u66f4\u6709\u6548\u548c\u66f4\u65b9\u4fbf\u7ba1\u7406\u7684\u7de8\u78bc\u65b9\u5f0f\u5f88\u96e3\u5438\u5f15\u5230\u5927\u5bb6\u7684\u76ee\u5149\u3002
"},{"location":"feedback/designing-data-intensive-applications/foundation-encode/#\u4e8c\u9032\u4f4d-json","title":"\u4e8c\u9032\u4f4d JSON","text":"\u6709\u4e9b\u683c\u5f0f\u662f\u4ee5 JSON \u70ba\u57fa\u790e\u505a\u6f14\u5316\u7684\uff0c\u5176\u5617\u8a66\u89e3\u6c7a\u4e0a\u8ff0\u554f\u984c\uff0c\u4f46\u662f\u6548\u7387\u4ecd\u7121\u6cd5\u8d0f\u904e\u5c08\u9580\u7684\u4e8c\u9032\u4f4d\u7de8\u78bc\uff0c\u4ee5 MessagePack \u70ba\u7bc4\u4f8b\uff1a
\u539f\u59cb JSON \u8cc7\u6599\uff1a
{\n \"userName\": \"Martin\",\n \"favoriteNumber\": 1337,\n \"interests\": [\"daydreaming\", \"hacking\"]\n}\n
\u6211\u5011\u53ef\u4ee5\u5f97\u5230 66 Bytes \u7684\u8cc7\u6599\uff0c\u78ba\u5be6\u6bd4\u539f\u672c 88 Bytes \u597d\uff0c\u4f46\u662f\u548c\u5f85\u6703\u6211\u5011\u53ef\u4ee5\u770b\u5230\u6e1b\u5c11\u5230 32 Bytes \u7684\u65b9\u5f0f\u4ecd\u6709\u5dee\u7570\u3002
\u7531\u65bc\u4ed6\u662f\u5ef6\u4f38 JSON\uff0c\u5929\u751f\u4e0a\u4ecd\u7136\u6c92\u6709\u7db1\u76ee\uff0c\u6240\u4ee5\u6bcf\u500b\u7269\u4ef6\u4ecd\u7136\u9700\u8981\u5132\u5b58\u9375\u7684\u8cc7\u6599\uff08\u4f8b\u5982\uff1auserName
\uff09\u3002
\u4e8c\u9032\u4f4d\u7de8\u78bc\u4e26\u4e0d\u662f\u65b0\u6771\u897f\uff0c\u65e9\u5728 1984 \u5e74\u5c31\u6709\u5354\u5b9a ASN.1 \u95e1\u8ff0\u5982\u4f55\u9032\u884c\u4e8c\u9032\u4f4d\u7de8\u78bc\uff0c\u4ed6\u548c Thrift\u3001Protocol Buffer \u4e00\u6a23\u90fd\u4f7f\u7528 tag ID\u3002\u4e14\u5176\u61c9\u7528\uff08DER\uff09\u5982\u4eca\u4ecd\u88ab\u5927\u91cf\u4f7f\u7528\u65bc X.509\u3002
\u4f46\u662f\u4ed6\u537b\u904e\u65bc\u8907\u96dc\u4e14\u5176\u6587\u4ef6\u4e5f\u8a2d\u8a08\u5f97\u5f88\u8907\u96dc\uff0c\u7531\u6b64\u767c\u5c55\u51fa\u4ee5\u4e0b\u5e7e\u500b\u8f03\u65b0\u7684\u65b9\u5f0f\u3002
\u4e0a\u8ff0\u65b9\u5f0f\u53ef\u4ee5\u964d\u4f4e\u78c1\u789f\u7684\u4f7f\u7528\u91cf\u3001\u9ad8\u6548\u80fd\u7de8\uff08\u89e3\uff09\u78bc\u3001\u6709\u6548\u88fd\u4f5c\u6587\u4ef6\u6a94\uff0c\u4f46\u7f3a\u9ede\u5c31\u662f\u9700\u8981\u89e3\u78bc\u624d\u80fd\u8b93\u4eba\u985e\u8b80\u61c2\u8a0a\u606f\u3002
\u5728\u8cc7\u6599\u6e96\u5099\u8981\u9001\u5230\u8cc7\u6599\u5132\u5009\uff08warehouse\uff09\u6642\uff0c\u4e5f\u9700\u8981\u7de8\u78bc\uff0c\u9019\u6642\u5019\u53ef\u4ee5\u628a\u8cc7\u6599\u8f49\u63db\u6210\u53cb\u5584\u65bc\u884c\u5f0f\u8cc7\u6599\u5eab\uff08column-oriented database\uff09\u7684\u683c\u5f0f\uff0c\u4f8b\u5982 Parquet\u3002
"},{"location":"feedback/designing-data-intensive-applications/foundation-encode/#\u524d\u5f8c\u76f8\u5bb9","title":"\u524d\u5f8c\u76f8\u5bb9","text":"\u5728\u505a\u7de8\u78bc\u6642\u90fd\u9700\u8981\u53bb\u8003\u616e\u524d\u5f8c\u76f8\u5bb9\uff1a
\u7531\u6b64\u53ef\u77e5\uff0cJSON \u9019\u985e\u7de8\u78bc\u65b9\u5f0f\u65b0\u820a\u7248\u672c\u90fd\u53ef\u4ee5\u505a\u89e3\u78bc\uff0c\u53ea\u8981\u5728\u7a0b\u5f0f\u908f\u8f2f\u4e0a\u6ce8\u610f\u4e00\u4e0b\u5c31\u53ef\u4ee5\u4fdd\u6301\u524d\u5f8c\u76f8\u5bb9\u3002
"},{"location":"feedback/designing-data-intensive-applications/foundation-encode/#\u7a0b\u5f0f\u78bc\u7522\u751f\u5668","title":"\u7a0b\u5f0f\u78bc\u7522\u751f\u5668","text":"\u5728\u4f7f\u7528\u9700\u8981\u7de8\u8b6f\u7684\u8a9e\u8a00\uff08Java\u3001C++\uff09\u6642\uff0c\u53ef\u4ee5\u5229\u7528\u7db1\u76ee\u53bb\u7522\u751f\u76f8\u61c9\u7269\u4ef6\u7684\u7a0b\u5f0f\u78bc\uff08code generation\uff09\uff0c\u5e6b\u52a9\u7de8\u8b6f\u6642\u7684\u578b\u5225\u5224\u5b9a\u3002\u4f8b\u5982\u95dc\u65bc\u300c\u4eba\u300d\u7684\u7db1\u76ee\uff0c\u5c31\u53ef\u4ee5\u6839\u64da\u7db1\u76ee\u5efa\u7acb\u5c0d\u61c9\u7684\u7269\u4ef6\uff0c\u4e26\u4e14\u7522\u751f\u5c0d\u61c9\u7684 property\uff0c\u4f8b\u5982\u59d3\u540d\uff08var person = new Person(object);print(person.name);
\uff09\u3002\u4f46\u662f\u5728\u6839\u64da\u8cc7\u6599\u52d5\u614b\u8abf\u6574\u7db1\u76ee\u7684\u72c0\u6cc1\u6642\uff0c\u9019\u6a23\u7684\u6a5f\u5236\u5728\u8a2d\u8a08\u6642\u5c31\u5f88\u9ebb\u7169\u3002
\u76f8\u5c0d\u800c\u8a00\u8173\u672c\u578b\u7684\u8a9e\u8a00\uff08JavaScript\u3001Python\u3001Ruby\u3001PHP\uff09\uff0c\u4e0d\u9700\u8981\u7522\u751f\u7a0b\u5f0f\u78bc\u4f86\u5e6b\u52a9\u7de8\u8b6f
Note
\u96d6\u7136 JSON \u53ef\u4ee5\u7528\u984d\u5916\u5de5\u5177\u8a2d\u5b9a\u7db1\u76ee\uff0c\u4f46\u662f\u4ed6\u628a\u7de8\u89e3\u78bc\u548c\u7db1\u76ee\u7ba1\u7406\u7576\u6210\u5169\u4ef6\u4e8b\uff1a\u7de8\u78bc\u6642\u4e0d\u9700\u8981\u8003\u616e\u7db1\u76ee\u4e00\u6a23\u53ef\u4ee5\u505a \u76f8\u53cd\uff0c\u4e8c\u9032\u4f4d\u7de8\u78bc\u662f\u548c\u7db1\u76ee\u540c\u751f\u7684\uff0c\u6c92\u6709\u7db1\u76ee\u5c31\u7121\u6cd5\u7de8\u78bc
"},{"location":"feedback/designing-data-intensive-applications/foundation-encode/#\u4e8c\u9032\u4f4d\u7de8\u78bc\u7684\u6bd4\u8f03","title":"\u4e8c\u9032\u4f4d\u7de8\u78bc\u7684\u6bd4\u8f03","text":"\u4ee5\u4e0b\u5c31 Apache Thrift\u3001Protocol Buffer \u548c Apache Avro \u4f86\u505a\u4e8c\u9032\u4f4d\u7de8\u78bc\u7684\u6bd4\u8f03\u3002
"},{"location":"feedback/designing-data-intensive-applications/foundation-encode/#apache-thrift","title":"Apache Thrift","text":"Apache Thrift \u6703\u4f7f\u7528\u7db1\u76ee\uff1a
struct Person {\n 1: required string userName,\n 2: optional i64 favoriteNumber,\n 3: optional list<string> interests\n}\n
\u4e26\u6709\u5169\u7a2e\u65b9\u5f0f\u505a\u7de8\u78bc\uff0cBinaryProtocol \u548c CompactProtocol\uff0c\u4f9d\u5e8f\u65b9\u5f0f\u70ba\uff1a
Protocol Buffer \u7684\u7db1\u76ee\u5982\u4e0b\uff1a
message Person {\n required string user_name = 1;\n optional int64 favorite_number = 2;\n repeated string interests = 3;\n}\n
"},{"location":"feedback/designing-data-intensive-applications/foundation-encode/#\u8a3b","title":"\u8a3b","text":"required
\u548c optional
\u5728\u7de8\u78bc\u6642\uff0c\u4e0d\u5f71\u97ff\u7d50\u679c\uff0c\u50c5\u6703\u5728\u505a\u89e3\u78bc\u6642 runtime \u8f38\u51fa\u932f\u8aa4\u3002required
\u6703\u8b93\u820a\u7a0b\u5f0f\u78bc\u8f38\u51fa\u932f\u8aa4\uff0c\u9700\u8981\u7d66\u5b9a\u9810\u8a2d\u503c\u3002int8
\u8f49\u5230 int16
list
\u8cc7\u6599\u578b\u614b\uff0c\u8b93\u4ed6\u5f88\u597d\u5f9e repeated
\u8f49\u5230 optional
\uff0c\u4f46\u5de2\u72c0\u7d50\u69cb\u5c31\u6703\u9700\u8981\u984d\u5916\u529f\u4f86\u9054\u6210\u3002Apache Avro \u7684\u7db1\u76ee\uff1a
record Person {\n string userName;\n union { null, long } favoriteNumber = null;\n array<string> interests;\n}\n
Avro \u662f\u4f5c\u8005\u6709\u8ca2\u737b\u7684\u958b\u6e90\u7de8\u78bc\u65b9\u5f0f
\u9019\u88e1\u591a\u4e86\u4e00\u500b union\uff0c\u9664\u4e86\u660e\u78ba\u6a19\u793a\u54ea\u4e9b\u662f nullable \u4e4b\u5916\uff0c\u5c31\u4e0d\u9700\u8981 required/optional \u4e86\u3002
\u5728\u89e3\u78bc\u6642\uff0c\u8cc7\u6599\u4e00\u7684\u578b\u5225\u548c\u540d\u7a31\u5c31\u662f\u7db1\u76ee\u4e0a\u7b2c\u4e00\u7d44\u8cc7\u6599\u6240\u5c55\u793a\u7684\u578b\u5225\u3002 \u7531\u65bc\u5728\u7de8\u78bc\u5f8c\uff0c\u6c92\u6709\u578b\u5225\u548c ID\uff0c\u6240\u4ee5\u5fc5\u9808\u6709\u5c0d\u61c9\u7684\u7db1\u76ee\u624d\u80fd\u89e3\u78bc\u3002
"},{"location":"feedback/designing-data-intensive-applications/foundation-encode/#\u7d30\u7bc0","title":"\u7d30\u7bc0","text":"Apache Avro \u4e26\u6c92\u6709\u4f7f\u7528 tag ID \u4f86\u8fa8\u8a8d\u6bcf\u500b\u8cc7\u6599\u7684\u4f4d\u7f6e\uff0c\u800c\u662f\u900f\u904e\u7db1\u76ee\u4e0d\u540c\u7248\u672c\u9593\u7684\u8f49\u63db\uff1a
\u56e0\u6b64\u8b80\u53d6\u8cc7\u6599\u6642\uff0c\u9700\u8981\u5148\u78ba\u4fdd\u64b0\u5beb\u8cc7\u6599\u6240\u4f7f\u7528\u7684\u7db1\u76ee\u7248\u672c\u3002
Apache Avro \u4e5f\u5229\u7528 union { null, int }
\u4f86\u7576\u4f5c\u8cc7\u6599\u7684 required/optional\uff0c\u540c\u6642\u7d66\u4e88\u9810\u8a2d\u503c\u4f86\u6eff\u8db3\u5411\u5f8c\uff08\u524d\uff09\u76f8\u5bb9\u3002
\u9664\u6b64\u4e4b\u5916\uff0cApache Avro \u9084\u5141\u8a31\u66f4\u6539\u8cc7\u6599\u7684\u578b\u5225\u548c\u540d\u7a31\uff1a
alias
\u4f86\u6eff\u8db3\u540d\u7a31\u7684\u8f49\u63db\uff0c\u4f46\u53ea\u80fd\u6eff\u8db3\u5411\u5f8c\u76f8\u5bb9\uff08\u820a\u7db1\u76ee\u770b\u4e0d\u61c2\u65b0\u7db1\u76ee\u8abf\u6574\u540d\u7a31\u5f8c\u7684\u8cc7\u6599\uff09\u6839\u64da\u61c9\u7528\u7a0b\u5f0f\u800c\u6709\u5dee\u7570\uff1a
\u628a\u6240\u6709\u7248\u672c\u7684\u7db1\u76ee\u90fd\u5b58\u9032 DB \u53ef\u4ee5\u5e6b\u52a9\u672a\u4f86\u6aa2\u67e5\u548c\u5099\u4efd\u3002
"},{"location":"feedback/designing-data-intensive-applications/foundation-encode/#\u4e0d\u9700\u8981\u4f7f\u7528-tag-id-\u6709\u4ec0\u9ebc\u597d\u8655","title":"\u4e0d\u9700\u8981\u4f7f\u7528 tag ID \u6709\u4ec0\u9ebc\u597d\u8655","text":"\u8cc7\u6599\u8f38\u51fa\u6210\u6a94\u6848\u6642\uff08Hadoop \u67b6\u69cb\u4e0b\u7684\u8cc7\u6599\u5eab\u5e38\u505a\u7684\u4e8b\uff09\uff0c\u6211\u53ef\u4ee5\u5f88\u65b9\u4fbf\u5730\u5f9e\u8cc7\u6599\u5eab\u7684\u7db1\u76ee\u8f49\u63db\u6210 Avro \u7684\u7db1\u76ee\uff0c\u7136\u5f8c\u628a\u6a94\u6848\u64b0\u5beb\u6210\u4e8c\u4f4d\u5143\u3002\u540c\u6a23\u7684\uff0c\u7576\u8cc7\u6599\u5eab\u7684\u7db1\u76ee\u66f4\u65b0\u6642\uff0c\u6211\u5011\u518d\u7522\u751f\u65b0\u7684\u7db1\u76ee\uff0c\u7531\u65bc\u662f\u5c0d\u61c9\u6b04\u4f4d\u540d\u7a31\uff0c\u5c31\u4e0d\u6703\u6709\u885d\u7a81\u4e86\u3002\u4f8b\u5982\uff0c\u65b0\u589e\u4e00\u500b\u6b04\u4f4d\u53eb countryId \u4e26\u540c\u6642\u79fb\u9664\u6b04\u4f4d countryName\uff0c\u518d\u4f9d\u6b64\u8cc7\u6599\u5eab\u7db1\u76ee\u7522\u751f Avro \u7db1\u76ee\u6642\uff0c\u53ef\u4ee5\u9806\u5229\u7684\u7528\u820a\uff08\u65b0\uff09\u7db1\u76ee\u8b80\u65b0\uff08\u820a\uff09\u8cc7\u6599\u3002
\u76f8\u53cd\u7684\uff0c\u7528 Protocol Buffers \u6216 Thrift \u5c31\u9700\u8981\u8b39\u614e\u4f7f\u7528 tag ID \u4f86\u907f\u514d\u4efb\u4f55\u885d\u7a81\u3002\u4ee5\u4e0a\u8ff0\u4f8b\u5b50\u70ba\u4f8b\uff0c\u5c31\u6703\u51fa\u73fe\u76f8\u540c tag ID \u537b\u662f\u4e0d\u540c\u6b04\u4f4d\u7684\u72c0\u6cc1\uff08\u4f8b\u5982\uff0ccountryId \u548c countryName \u90fd\u662f tag 5\uff09\u3002
Protocol Buffers\u3001Thrift \u662f\u70ba\u4e86 RPC \u9019\u985e\u64cd\u4f5c\u800c\u8a2d\u8a08\u7684\u7de8\u78bc\u683c\u5f0f
"},{"location":"feedback/designing-data-intensive-applications/foundation-encode/#\u81ea\u63cf\u8ff0","title":"\u81ea\u63cf\u8ff0","text":"\u5982\u679c\u5728\u8cc7\u6599\u4e2d\u6709\u653e\u7f6e\u7de8\u78bc\u6642\u7684\u7db1\u76ee\uff0c\u6211\u5011\u7a31\u70ba\u5176\u80fd\u5920\u81ea\u63cf\u8ff0\uff08self-describing\uff09\u3002\u82e5\u8cc7\u6599\u80fd\u5920\u81ea\u63cf\u8ff0\uff0c\u4f60\u53ef\u4ee5\u76f4\u63a5\u900f\u904e\u5c0d\u61c9\u7de8\u78bc\u65b9\u5f0f\u7684\u7a0b\u5f0f\u5eab\uff08\u4f8b\u5982 Avro library\uff09\u6253\u958b\u9019\u4efd\u6a94\u6848\uff0c\u4e0d\u9700\u8981\u984d\u5916\u518d\u63d0\u4f9b\u7db1\u76ee\u3002\u540c\u6642\uff0c\u53c8\u4fdd\u8b49\u8cc7\u6599\u4e0d\u6703\u904e\u5927\u3002
\u9019\u5c0d\u65bc\u9ad8\u7dad\u5ea6\u7684\u5206\u6790\u5de5\u5177\uff0c\u5982 Apache Pig\uff0c\u5f88\u6709\u5e6b\u52a9\u3002\u4f7f\u7528\u8005\u76f4\u63a5\u900f\u904e SQL \u8a9e\u6cd5\u5728 Hadoop \u67b6\u69cb\u4e4b\u4e0a\u7684\u8cc7\u6599\u5eab\u9032\u884c\u5206\u6790\uff0c\u4e26\u4e14\u7522\u51fa\u65b0\u7684\u8cc7\u6599\uff0c\u904e\u7a0b\u4e2d\u90fd\u4e0d\u9700\u8981\u8003\u616e\u7db1\u76ee\u7684\u554f\u984c\uff0c\u56e0\u70ba Avro \u6703\u5728\u8cc7\u6599\u7684\u524d\u9762\u5b9a\u7fa9\u7db1\u76ee\u3002
"},{"location":"feedback/designing-data-intensive-applications/foundation-encode/#\u8907\u7fd2\u5dee\u7570","title":"\u8907\u7fd2\u5dee\u7570","text":"Schema-less \u7de8\u78bc\uff08JSON\uff09\u6709\u5176\u512a\u9ede\uff1a
\u7136\u800c\u4e8c\u9032\u4f4d\u7de8\u78bc\u4e5f\u6709\u5176\u597d\u8655\uff1a
\u6211\u5011\u5df2\u7d93\u7406\u89e3\u7de8\u78bc\u662f\u53ef\u4ee5\u900f\u904e\u5176\u5167\u90e8\u6a5f\u5236\uff0c\u53bb\u8b93\u4f7f\u7528\u8a72\u7de8\u78bc\u65b9\u5f0f\u7684\u4eba\u53ef\u4ee5\u4e0d\u9700\u8981\u8003\u616e\u600e\u9ebc\u76f8\u5bb9\u4e0d\u540c\u7248\u672c\u7684\u7db1\u76ee\uff0c\u63a5\u4e0b\u4f86\u900f\u904e\u5be6\u969b\u4f7f\u7528\u5834\u666f\u4f86\u611f\u53d7\u4e00\u4e0b\u5176\u61c9\u7528\u3002
\u61c9\u7528\u7a0b\u5f0f\u628a\u8cc7\u6599\u50b3\u7d66\u8cc7\u6599\u5eab\uff0c\u4e26\u9810\u671f\u672a\u4f86\u8981\u53ef\u4ee5\u62ff\u5230\u6307\u5b9a\u7684\u8cc7\u6599\u3002
\u5fc5\u9808\u5411\u5f8c\u76f8\u5bb9\uff08\u65b0\u7db1\u76ee\u8b80\u820a\u8cc7\u6599\uff09\uff0c\u56e0\u70ba\u662f\u50b3\u7d66\u5176\u4ed6\u4eba\uff08\u5beb\u9032\u78c1\u789f\uff09\u5f8c\uff0c\u672a\u4f86\u7684\u81ea\u5df1\u4f7f\u7528\u65b0\u7db1\u76ee\u505a\u8b80\u53d6\u3002
\u9664\u975e\u4f60\u6bcf\u6b21\u66f4\u52d5\u7db1\u76ee\u90fd\u8981\u628a\u8cc7\u6599\u5eab\u6240\u6709\u8cc7\u6599\u91cd\u65b0\u7de8\u78bc\u4e00\u6b21\uff0c\u5426\u5247\u66f4\u52d5\u7db1\u76ee\u7406\u8ad6\u4e0a\u820a\u8cc7\u6599\u5728\u7de8\u78bc\u4e0a\u4ecd\u662f\u4ee5\u820a\u7684\u7db1\u76ee\u70ba\u6e96\u3002 MySQL \u5c31\u662f\u90a3\u500b\u4f8b\u5916\u3002
\u7576\u5176\u4ed6\u670d\u52d9\u50b3\u9001\u8cc7\u6599\u7d66\u8cc7\u6599\u5eab\u6642\uff0c\u5176\u4ee5\u70ba\u7684\u7db1\u76ee\u5f88\u53ef\u80fd\u662f\u820a\u7684\uff0c\u9019\u6642\u4e5f\u9700\u8981\u5411\u524d\u76f8\u5bb9\uff0c\u9019\u6642\u5c31\u8981\u907f\u514d\u8cc7\u6599\u88ab\u820a\u7a0b\u5f0f\u78bc\u8986\u84cb\u6389\uff1a
\u9084\u6709\u500b\u72c0\u6cc1\u9700\u8981\u6ce8\u610f\uff1a\u7576\u8cc7\u6599\u5eab\u8981\u628a\u8cc7\u6599\u505a\u5099\u4efd\u6216\u8f38\u51fa\u7d66 \u8cc7\u6599\u5009\u5132 \u6642\uff0c\u4e5f\u6703\u9700\u8981\u4e00\u6b21\u6027\u628a\u5927\u8cc7\u6599\u91cd\u65b0\u7de8\u78bc\uff08\u505a ETL\uff09\u3002\u8cc7\u6599\u5eab\u5167\u90e8\u53ef\u80fd\u6703\u6709\u591a\u500b\u7248\u672c\u7684\u7db1\u76ee\u53bb\u505a\u7de8\u78bc\u7684\u8cc7\u6599\uff0c\u800c\u9019\u4e9b\u8cc7\u6599\u65e2\u7136\u90fd\u8981\u532f\u51fa\u53bb\uff0c\u90a3\u5c31\u91cd\u65b0\u7de8\u78bc\u9032\u6700\u65b0\u7248\u672c\u3002
"},{"location":"feedback/designing-data-intensive-applications/foundation-encode/#\u5169\u500b\u670d\u52d9\u5f7c\u6b64\u6e9d\u901a","title":"\u5169\u500b\u670d\u52d9\u5f7c\u6b64\u6e9d\u901a","text":"\u53ef\u80fd\u662f\u670d\u52d9\u9593\uff08\u4e0d\u7ba1\u662f\u4e0d\u662f\u76f8\u540c\u516c\u53f8\uff09\u7684\u6e9d\u901a\uff0c\u4e5f\u53ef\u80fd\u662f\u4f7f\u7528\u8005\uff08\u4f8b\u5982\u700f\u89bd\u5668\u3001\u624b\u6a5f APP\uff09\u548c\u670d\u52d9\u9593\u7684\u6e9d\u901a
\u66b4\u9732\u63a5\u53e3\uff08API\uff09\u7684 REST/GraphQL\uff0c\u9084\u6709\u4f9d\u7167\u898f\u7bc4\uff0c\u5728\u7a0b\u5f0f\u78bc\u4e2d\u5305\u88dd\u8d77\u4f86\u7684 RPC/SOAP\u3002
\u6bd4\u8f03\uff1a
\u7e3d\u7d50\u4f86\u8aaa\uff0cRPC/SOAP \u9069\u5408\u540c\u516c\u53f8\u4e0d\u540c\u670d\u52d9\u9593\u7684\u547c\u53eb\uff0c\u5feb\u901f\u4e14\u524d\u5f8c\u76f8\u5bb9\u3002\u53cd\u4e4b REST/GraphQL \u9069\u5408\u5c0d\u5916\uff0c\u4e0d\u7ba1\u662f\u4f7f\u7528\u8005\uff08\u700f\u89bd\u5668\u3001APP\uff09\u548c\u670d\u52d9\u9593\u7684\u6e9d\u901a\u6216\u8005\u4e0d\u540c\u516c\u53f8\u9593\u7684\u670d\u52d9\u6e9d\u901a\u3002
Info
\u4ee5\u4e0b\u662f\u4e0d\u540c\u7de8\u78bc\u65b9\u5f0f\u5728 RPC \u4e4b\u4e0a\u7684\u4e00\u4e9b\u5be6\u4f5c\uff1a
\u9019\u584a\u8f03\u4e0d\u719f\u6089\uff0c\u56e0\u6b64\u53e6\u5916\u641c\u96c6\u8cc7\u6599\u3002\u975e\u540c\u6b65\u8a0a\u606f\u548c\u540c\u6b65\u8a0a\u606f\u7684\u5dee\u7570\u5728\u65bc
\u975e\u540c\u6b65\u8a0a\u606f\u50b3\u905e\u66f8\u4e2d\u4e3b\u8981\u4ecb\u7d39\u5169\u7a2e\u65b9\u5f0f\uff1a
\u6b64\u7a2e\u65b9\u5f0f\uff0c\u4ecb\u65bc\u7b2c\u4e00\u4e8c\u7a2e\u4e2d\u9593\u3002 \u7b2c\u4e00\u7a2e\u900f\u904e\u8cc7\u6599\u5eab\uff0c\u61c9\u7528\u7a0b\u5f0f\u5b8c\u5168\u8b93\u8cc7\u6599\u5eab\u8655\u7406\u7de8\u78bc\uff1b \u7b2c\u4e8c\u7a2e\u61c9\u7528\u7a0b\u5f0f\u548c\u4f7f\u7528\u8005\uff08\u53ef\u80fd\u662f\u5176\u4ed6\u61c9\u7528\u7a0b\u5f0f\u6216\u700f\u89bd\u5668\u7b49\u7b49\uff09\uff0c\u5247\u662f\u5f7c\u6b64\u5354\u5546\u51fa\u4e00\u8d77\u7528\u7684\u7de8\u78bc\u65b9\u5f0f\u3002
\u76f8\u5c0d\u4f86\u8aaa\uff0c\u975e\u540c\u6b65\u8a0a\u606f\u50b3\u905e\u5247\u662f\u5927\u5bb6\u9810\u8a2d\u4f7f\u7528\u67d0\u7a2e\u7de8\u78bc\uff0c\u4f46\u662f\u50b3\u905e\u662f\u900f\u904e\u7b2c\u4e09\u65b9\u3002
"},{"location":"feedback/designing-data-intensive-applications/foundation-encode/#\u6d88\u606f\u4ee3\u7406","title":"\u6d88\u606f\u4ee3\u7406","text":"\u900f\u904e\u4e00\u500b\u4ee3\u7406\u4eba\uff0c\u5e6b\u6211\u628a\u8a0a\u606f\u50b3\u905e\u7d66\u5176\u4ed6\u6709\u8208\u8da3\u7684\u63a5\u6536\u8005\u3002\u6545\u800c\u6211\u53ea\u8981\u78ba\u4fdd\u8cc7\u6599\u9001\u7d66\u4ee3\u7406\u4eba\u5373\u53ef\uff0c\u5176\u4ed6\u63a5\u6536\u8005\u662f\u5426\u6709\u6536\u5230\u662f\u4ee3\u7406\u4eba\u8981\u505a\u7684\u4e8b\u60c5\u3002
Message Broker Pattern using C#
\u548c\u4ee3\u7406\u4eba\u9593\u7684\u6e9d\u901a\u5176\u7de8\u78bc\u65b9\u5f0f\u548c\u76f4\u63a5\u5169\u500b\u670d\u52d9\u6e9d\u901a\u5f88\u50cf\uff0c\u56e0\u70ba\u4ee3\u7406\u4eba\u4e0d\u6703\u5728\u4e4e\u4f60\u4f7f\u7528\u4ec0\u9ebc\u7de8\u78bc\u65b9\u5f0f\uff0c \u4ed6\u53ea\u662f\u9032\u884c\u8a0a\u606f\u7684\u50b3\u905e\u800c\u5df2\u3002\u4f46\u6709\u6642\u63a5\u6536\u8005\u6703\u628a\u8a0a\u606f\u6d88\u5316\u4e26\u91cd\u65b0\u50b3\u7d66\u4ee3\u7406\u4eba \uff08\u518d\u8b93\u5176\u4ed6\u6709\u8208\u8da3\u7684\u4eba\u63a5\u53d7\u5176\u8f38\u51fa\uff09\uff0c\u6b64\u6642\u5c31\u6709\u53ef\u80fd\u767c\u751f\u4e0a\u8ff0\u63d0\u5230\u7684\u8986\u84cb\u8cc7\u6599\u7684\u554f\u984c\u3002
\u9019\u6bb5\u5230\u4e32\u6d41\u8655\u7406\u6703\u66f4\u8a73\u7d30\u7684\u8a0e\u8ad6\uff0c\u9019\u908a\u50c5\u8aaa\u660e\u5176\u6703\u4f7f\u7528\u5230\u7de8\u78bc\u3002
"},{"location":"feedback/designing-data-intensive-applications/foundation-encode/#\u4e8b\u4ef6\u4e32\u6d41\u5f0f\u67b6\u69cb","title":"\u4e8b\u4ef6\u4e32\u6d41\u5f0f\u67b6\u69cb","text":"\u5176\u548c\u6d88\u606f\u4ee3\u7406\u5f88\u985e\u4f3c\uff0c\u4f46\u662f\u50c5\u63d0\u4f9b\u591a\u5c0d\u4e00\uff08pub/sub\uff09\u7684\u670d\u52d9\u4e26\u4e14\u8f03\u9069\u5408\u8655\u7406\u5927\u91cf\u8a0a\u606f\u3002
Making sense of stream processing
\u4e8b\u4ef6\u67b6\u69cb\u5c0d\u65bc\u8cc7\u6599\u50b3\u905e\u548c\u6574\u500b\u7d44\u7e54\u7684\u8cc7\u6599\u6574\u5408\u4f86\u8aaa\u975e\u5e38\u597d\u7528\uff0c\u6703\u5728\u7b2c\u5341\u4e00\u7ae0\u7684\u6642\u5019\u8a73\u7d30\u63d0\u3002
"},{"location":"feedback/designing-data-intensive-applications/foundation-encode/#\u4f01\u696d\u670d\u52d9\u532f\u6d41\u6392","title":"\u4f01\u696d\u670d\u52d9\u532f\u6d41\u6392","text":"\u4f01\u696d\u670d\u52d9\u532f\u6d41\u6392\u70ba\u8f03\u5927\u578b\u7684\u6d88\u606f\u4ee3\u7406\u8005\uff0c\u8655\u7406\u591a\u5c0d\u591a\u7684\u6e9d\u901a\uff0c\u6703\u8ca0\u8cac\u628a\u50b3\u905e\u4e2d\u7684\u8a0a\u606f\u683c\u5f0f\u7d71\u4e00\u3002 \u4f8b\u5982 XML \u8f49\u6210 JSON\u3002
WIKI
\u4f46\u662f\u6162\u6162\u5f0f\u5fae\uff0c\u56e0\u70ba\u6703\u8d8a\u641e\u8d8a\u8907\u96dc\u3002
"},{"location":"feedback/designing-data-intensive-applications/foundation-encode/#\u5206\u6563\u5f0f\u6f14\u54e1\u6a21\u578b","title":"\u5206\u6563\u5f0f\u6f14\u54e1\u6a21\u578b","text":"\u6f14\u54e1\u6a21\u578b\u662f\u4e00\u7a2e\u7a0b\u5f0f\u8a2d\u8a08\u7684\u54f2\u5b78\uff0c\u5176\u4e3b\u65e8\u662f\u7368\u7acb\u6bcf\u500b\u904b\u884c\u7684\u908f\u8f2f\u548c\u5176\u72c0\u614b\uff0c\u4e26\u628a\u9019\u7368\u7acb\u7684\u55ae\u4f4d\u7a31\u70ba\u6f14\u54e1\uff08Actor\uff09\u3002
\u4f8b\u5982\u73fe\u5728\u6709\u500b\u6f14\u54e1\u6703\u8ca0\u8cac\u8f38\u51fa\u300cHello World\u300d\uff0c\u6211\u5011\u50b3\u905e\u4e00\u500b\u8a0a\u606f\u7d66\u9019\u500b\u6f14\u54e1\uff0c \u544a\u8a34\u4ed6\u6211\u9019\u88e1\u6709\u500b\u8b8a\u6578 3\uff0c\u4f5c\u51fa\u4efb\u4f55\u4f60\u61c9\u8a72\u8981\u505a\u7684\u4e8b\u60c5\u5427\u3002 \u7136\u5f8c\u9019\u500b\u6f14\u54e1\u5c31\u6703\u958b\u59cb\u8f38\u51fa\u300cHello World\u300d\u4e09\u6b21\u3002
\u6f14\u54e1\u6a21\u578b\u7684\u50f9\u503c\u5728\u65bc\u5b83\u9810\u8a2d\u5404\u6f14\u54e1\u5f88\u53ef\u80fd\u767c\u751f\u932f\u8aa4\uff0c\u4e14\u5f7c\u6b64\u4e4b\u9593\u6c92\u6709\u5171\u7528\u4efb\u4f55\u8cc7\u6e90\u3002 \u6240\u4ee5\u5176\u61c9\u7528\u4e0d\u53ea\u5c40\u9650\u65bc\u7a0b\u5f0f\u78bc\u4e4b\u9593\u7684\u8a0a\u606f\u50b3\u905e\uff0c\u4f60\u4e00\u6a23\u53ef\u4ee5\u901a\u904e\u7db2\u969b\u7db2\u8def\u7684\u65b9\u5f0f\u50b3\u905e\uff0c \u5c31\u597d\u50cf API \u4e00\u6a23\uff08\u985e\u4f3c RPC \u60f3\u505a\u7684\u4e8b\uff09\u3002
\u4ee5 Akka \u70ba\u4f8b\u4ee5 Java \u7684\u6f14\u54e1\u6a21\u578b\u6846\u67b6 Akka \u70ba\u4f8b\uff1a
public class HelloWorld extends AbstractBehavior<HelloWorld.Command> {\n\ninterface Command {}\n\npublic enum SayHello implements Command {\n INSTANCE\n}\n\npublic static class ChangeMessage implements Command {\n public final String newMessage;\n\n public ChangeMessage(String newMessage) {\n this.newMessage = newMessage;\n }\n}\n\npublic static Behavior<Command> create() {\n return Behavior.setup(context -> new HelloWorld(context));\n}\n\nprivate String message = \"Hello World\";\n\nprivate HelloWorld(ActorContext<Command> context) {\n super(context);\n}\n\n@Override\npublic Receive<Command> createReceive() {\n return newReceiveBuilder()\n .onMessageEquals(SayHello.INSTANCE, this::onSayHello)\n .onMessage(ChangeMessage.class,this::onMessageChange)\n .build();\n}\n\nprivate Behavior<Command> onSayHello() {\n System.out.println(message);\n return this;\n}\n\nprivate Behavior<Command> onMessageChange(ChangeMessage command) {\n message = command.newMessage;\n return this;\n}\n}\n
\u4e0a\u8ff0\u6f14\u54e1\u5728\u6536\u5230 SayHello.INSTANCE
\u5c31\u6703\u57f7\u884c onSayHello
\uff0c\u6536\u5230 ChangeMessage
\u9019\u4e00\u985e\u5225\u7684\u8a0a\u606f\u6642\u6703\u57f7\u884c onMessageChange
\u3002
\u6e96\u5099\u597d\u6f14\u54e1\uff0c\u5c31\u53ef\u4ee5\u958b\u59cb\u57f7\u884c\u5287\u5834\u5de5\u4f5c\u56c9\uff1a
ActorSystem<HelloWorld.Command> mySystem = ActorSystem.create(HelloWorld.create(), \"MySystem\");\n\n// \u544a\u8a34\u6f14\u54e1 `HelloWorld.SayHello.INSTANCE` \u9019\u5247\u8a0a\u606f\nmySystem.tell(HelloWorld.SayHello.INSTANCE);\nmySystem.tell(HelloWorld.SayHello.INSTANCE);\n// \u544a\u8a34\u6f14\u54e1 `HelloWorld.ChangeMessage` \u9019\u500b\u578b\u5225\u7684\u8a0a\u606f\nmySystem.tell(new HelloWorld.ChangeMessage(\"Hello Actor World!!\"));\nmySystem.tell(HelloWorld.SayHello.INSTANCE);\nmySystem.tell(HelloWorld.SayHello.INSTANCE);\n// \u6700\u5f8c\u8f38\u51fa\uff1a\n// Hello World\n// Hello World\n// Hello Actor World!!\n// Hello Actor World!!\n
Referrer
"},{"location":"feedback/designing-data-intensive-applications/foundation-ft/","title":"\u8655\u7406\u7af6\u8cfd\u60c5\u6cc1","text":"\u5982\u4f55\u5728\u9ad8\u53ef\u7528\u6027\uff08HA\uff09\u548c\u9ad8\u4e00\u81f4\u6027\uff08Consistency\uff09\u4e4b\u9593\u505a\u53d6\u6368\u3002
HackMD \u5831\u544a\u6587\u672c
"},{"location":"feedback/designing-data-intensive-applications/foundation-ft/#\u7af6\u8cfd\u60c5\u6cc1","title":"\u7af6\u8cfd\u60c5\u6cc1","text":"\u6211\u5011\u5148\u4f86\u770b\u770b\u4ec0\u9ebc\u662f\u7af6\u8cfd\u60c5\u6cc1\uff0c\u518d\u8aaa\u660e\u89e3\u6c7a\u8fa6\u6cd5\u548c\u5176\u5e36\u4f86\u7684\u6b0a\u8861\u4e4b\u8a08\u3002
\u5047\u8a2d\u73fe\u5728\u6709\u500b\u61c9\u7528\u7a0b\u5f0f\uff1a\u4fe1\u7bb1\u7cfb\u7d71\u3002\u5982\u679c\u4f7f\u7528\u8005\u6709\u5c1a\u672a\u95b1\u8b80\u7684\u4fe1\u4ef6\u6642\uff0c\u670d\u52d9\u6703\u5728\u61c9\u7528\u7a0b\u5f0f\u7684\u5c0e\u822a\u9801\u9762\u653e\u63d0\u793a\u7d05\u9ede\uff0c\u8aaa\u660e\u9084\u6709\u5e7e\u5c01\u4fe1\u9084\u6c92\u770b\u3002\u6211\u5011\u53ef\u4ee5\u7528\u4ee5\u4e0b SQL \u641c\u5c0b\u8a9e\u6cd5\u9054\u6210\u9019\u4ef6\u4e8b\uff1a
\u53d6\u5f97\u672a\u8b80\u4fe1\u4ef6\u6578\u91cfSELECT COUNT(*)\nFROM emails\nWHERE recipient_id = 2 AND unread_flag = true\n
\u96a8\u8457\u61c9\u7528\u7a0b\u5f0f\u7684\u6210\u9577\uff0c\u4f60\u767c\u73fe\u9019\u6a23\u505a\u6703\u8b93 emails
\u9019\u500b\u8868\u683c\u7684\u5b58\u53d6\u6b21\u6578\u8b8a\u5f97\u592a\u591a\u4e86\uff0c\u65bc\u662f\u5e0c\u671b\u80fd\u628a\u672a\u8b80\u4fe1\u4ef6\u7684\u6578\u91cf\u984d\u5916\u5b58\u53d6\u5728\u5176\u4ed6\u8868\u683c\uff08\u53bb\u6b63\u898f\u5316\u7684\u4e00\u7a2e\u884c\u70ba\uff09\u3002
\u6bcf\u6b21\u65b0\u589e\u4fe1\u4ef6\u4e4b\u5f8c\uff0c\u61c9\u7528\u7a0b\u5f0f\u6703\u518d\u9001\u4e00\u500b\u8cc7\u6599\u5eab\u8acb\u6c42\uff0c\u628a mailboxes
\u8868\u683c\u4e2d\u6b04\u4f4d unread
\u7684\u6578\u5b57\u52a0\u4e00\u3002
-- INSERT INTO emails ..\n-- \u65b0\u589e\u5b8c\u4e4b\u5f8c\uff0c\u518d\u589e\u52a0\u672a\u8b80\u4fe1\u4ef6\u7684\u6578\u91cf\nUPDATE mailboxes\nSET unread = unread + 1\nWHERE recipient_id = 2;\n
\u9019\u6642\uff0c\u554f\u984c\u5c31\u767c\u751f\u4e86\u3002
\u4e0a\u8ff0\u4f8b\u5b50\u662f\u56e0\u70ba\u61c9\u7528\u7a0b\u5f0f\u4e00\u500b\u8acb\u6c42\u5728\u66f4\u65b0\u8cc7\u6599\uff0c\u53e6\u4e00\u500b\u8acb\u6c42\u537b\u540c\u6642\u8b80\u53d6\u8a72\u503c\uff0c\u5f9e\u800c\u89c0\u5bdf\u5230\u5c1a\u672a\u5b8c\u6210\u7684\u72c0\u614b\u3002
\u4ee5\u9019\u500b\u4f8b\u5b50\u800c\u8a00\uff0c\u5c1a\u672a\u5b8c\u6210\u7684\u72c0\u614b\u70ba\uff1aunread
\u9084\u6c92\u589e\u52a0\u3002
\u9019\u7a2e\u5169\u500b\u4eba\u540c\u6642\u8acb\u6c42\u5b58\u53d6\uff08write/read\uff09\u55ae\u4e00\uff08\u6216\u591a\u500b\uff09\u7269\u4ef6\uff0c\u6211\u5011\u5c31\u7a31\u5176\u70ba\u300c\u7af6\u8cfd\u72c0\u6cc1\u300d\u3002\u4e0d\u53ea\u662f\u591a\u500b\u7269\u4ef6\u7684\u5b58\u53d6\uff0c\u6211\u5011\u4f86\u770b\u770b\u91dd\u5c0d\u55ae\u4e00\u7269\u4ef6\u7684\u5b58\u53d6\u6642\u9020\u6210\u7684\u7af6\u8cfd\u72c0\u6cc1\uff1a
\u9664\u4e86\u52a0\u4e00\uff0c\u53ef\u80fd\u9084\u6709 compare-and-set \u9019\u985e\u578b\u7684\u8acb\u6c42\u3002\u4f8b\u5982\uff0c\u5982\u679c\u8a72\u503c\u6578\u91cf\u5927\u65bc\u4e94\uff0c\u6211\u5c31\u6b78\u96f6\uff0c\u4e0d\u7136\u5c31\u52a0\u4e00\u3002
\u91dd\u5c0d\u55ae\u4e00\u503c\u7684\u64cd\u4f5c\u7a31\u4f5c Single-Object Operations\uff1b\u53cd\u4e4b\uff0c\u591a\u500b\u503c\u7684\u64cd\u4f5c\u7a31\u70ba Multi-Object Operations\u3002
\u96d6\u7136\u9019\u88e1\u63d0\u7684\u7af6\u8cfd\u72c0\u6cc1\u4e0d\u7ba1\u662f\u55ae\u6216\u591a\u53f0\u8cc7\u6599\u5eab\uff0c\u90fd\u6703\u767c\u751f\uff0c\u4f46\u662f\u8655\u7406\u5206\u6563\u5f0f\uff08\u591a\u53f0\uff09\u7684\u7af6\u8cfd\u72c0\u6cc1\u6703\u5728\u4e4b\u5f8c\uff08\u5bb9\u932f\u7684\u5206\u6563\u5f0f\u670d\u52d9\uff09\u624d\u8b1b\u3002
\u6211\u5011\u9700\u8981\u8b93\u6bcf\u500b\u8acb\u6c42\u64c1\u6709\u5169\u7a2e\u7279\u6027\uff0c\u4ee5\u89e3\u6c7a\u7af6\u8cfd\u72c0\u6cc1\uff1a
\u907f\u514d\u5225\u7684\u8acb\u6c42\u770b\u5f97\u5230\u4f60\u672a\u5b8c\u6210\u7684\u72c0\u614b\uff0c\u4ee5\u90f5\u4ef6\u70ba\u4f8b\uff0c\u5c31\u662f \u4f7f\u7528\u8005 2 \u8981\u9ebb\u770b\u4e0d\u5230\u4ed6\u6709\u65b0\u589e\u90f5\u4ef6\uff0c\u8981\u9ebb\u6709\u65b0\u7684\u90f5\u4ef6\u4e14\u6578\u91cf\u986f\u793a\u4e5f\u6b63\u78ba\uff0c\u4e0d\u6703\u986f\u793a\u5c1a\u672a\u5b8c\u6210\u7684\u72c0\u614b\u3002\u8981\u9054\u6210\u9694\u96e2\u6027\u53ef\u4ee5\u6709\u5e7e\u7a2e\u505a\u6cd5\uff1a
\u8a73\u7d30\u4ecb\u7d39\u6703\u5728\u4e0b\u9762\u8b1b\u89e3\uff01
"},{"location":"feedback/designing-data-intensive-applications/foundation-ft/#\u5bb9\u932f\u6027","title":"\u5bb9\u932f\u6027","text":"\u7af6\u8cfd\u72c0\u6cc1\u6703\u5f62\u6210\u932f\u8aa4\u7684\u72c0\u614b\uff0c\u7576\u767c\u751f\u932f\u8aa4\u6642\uff0c\u7cfb\u7d71\u8981\u80fd\u6709\u6a5f\u5236\u8655\u7406\u9019\u4e9b\u554f\u984c\uff0c\u800c\u8655\u7406\u932f\u8aa4\u7684\u80fd\u529b\u6211\u5011\u7a31\u5176\u70ba\u5bb9\u932f\u6027\uff08Fault tolerance\uff09\u3002
\u4ee5\u4e0a\u5716\u70ba\u4f8b\uff0c\u7576\u932f\u8aa4\u767c\u751f\u6642\uff0c\u6839\u64da\u61c9\u7528\u7a0b\u5f0f\u7684\u8003\u91cf\u53ef\u80fd\u6709\u4e0d\u540c\u4f5c\u6cd5\uff1a
\u91cd\u8907\u505a\u4e8b
\u7db2\u8def\u4e2d\u65b7\u53ef\u80fd\u767c\u751f\u5728\u4efb\u4f55\u4e00\u6bb5\uff0c\u4e0d\u7ba1\u662f\u9001\u904e\u53bb\u6642\uff0c\u9084\u662f\u56de\u50b3\u56de\u4f86\u6642\u3002\u5982\u679c\u662f\u56de\u50b3\u56de\u4f86\uff0c\u5c31\u4ee3\u8868\u5c0d\u65bc\u8cc7\u6599\u5eab\u4f86\u8aaa\uff0c\u8cc7\u6599\u5df2\u7d93\u6210\u529f\u6dfb\u52a0\u9032\u53bb\u3002\u53ea\u662f\u5728\u901a\u77e5\u61c9\u7528\u7a0b\u5f0f\u4ed6\u6210\u529f\u6642\uff0c\u767c\u751f\u932f\u8aa4\u3002\u9019\u6642\u61c9\u7528\u7a0b\u5f0f\u5982\u679c\u518d\u91cd\u4f86\u4e00\u6b21\uff0c\u5c31\u6703\u8b93\u8cc7\u6599\u88ab\u91cd\u8907\u6dfb\u52a0\u3002
\u6211\u5011\u53ef\u4ee5\u65bc\u8acb\u6c42\u4e2d\u6dfb\u52a0 ID \u4f86\u907f\u514d\u9019\u4ef6\u4e8b\u767c\u751f\uff08\u8cc7\u6599\u5eab\u770b\u5230\u91cd\u8907\u7684 ID \u5c31\u4e0d\u505a\u4e8b\uff09\uff0c\u4e0d\u904e\u66f4\u7d30\u7684\u8a0e\u8ad6\u65bc\u6700\u5f8c\u4e00\u7ae0\u300c\u4f5c\u8005\u671f\u8a31\u300d\u4e2d\u8aaa\u660e\u3002
"},{"location":"feedback/designing-data-intensive-applications/foundation-ft/#\u539f\u5b50\u6027","title":"\u539f\u5b50\u6027","text":"\u4e0a\u9762\u6211\u5011\u63d0\u7684\u5176\u4e2d\u4e00\u7a2e\u505a\u6cd5\uff1a\u91cd\u4f86\u932f\u8aa4\u7684\u8acb\u6c42\uff0c\u5982\u679c\u8acb\u6c42\u7684\u72c0\u614b\u662f\u76f8\u4f9d\u7684\uff0c\u91cd\u4f86\u7684\u6a5f\u5236\u53ef\u80fd\u662f\u975e\u5e38\u8907\u96dc\u7684\uff0c\u9019\u6642\u8b93\u932f\u8aa4\u7684\u8acb\u6c42\u91cd\u4f86\u5f88\u53ef\u80fd\u6703\u5f62\u6210\u932f\u8aa4\u7684\u72c0\u614b\u3002\u800c\u4e14\u9019\u7a2e\u72c0\u6cc1\u6703\u518d\u56e0\u70ba\u4e26\u884c\uff08concurrency\uff09\u548c\u707d\u96e3\u5fa9\u539f\uff08\u4f8b\u5982\u6211\u5011\u524d\u9762\u63d0\u7684 WAL\uff09\u800c\u8b8a\u5f97\u66f4\u70ba\u8907\u96dc\u3002
\u901a\u5e38\u8cc7\u6599\u5eab\u7684\u8a2d\u8a08\u8005\u70ba\u4e86\u907f\u514d\u53bb\u91cd\u4f86\u90e8\u5206\u932f\u8aa4\u7684\u8acb\u6c42\u6642\u6240\u9020\u6210\u7684\u932f\u8aa4\u72c0\u614b\uff0c\u6703\u4f7f\u7528\u539f\u5b50\u6027\uff08atomic\uff09\u3002\u9019\u500b\u8acb\u6c42\u505a\u5230\u4e00\u534a\u6642\uff0c\u5982\u679c\u767c\u751f\u72c0\u6cc1\uff0c\u5c31\u5b8c\u5168\u6368\u68c4\u4e4b\u524d\u505a\u7684\u6240\u6709\u4e8b\u3002
\u6211\u5011\u53ef\u4ee5\u900f\u904e\u628a\u57f7\u884c\u7684\u7d50\u679c\u5b58\u5728 /temp
\u7684\u4f4d\u7f6e\u4e0b\uff0c\u7576\u8acb\u6c42\u5b8c\u6210\u6642\uff0c\u518d\u628a /temp
\u4e0b\u7684\u8cc7\u6599\u6574\u5408\u9032\u8cc7\u6599\u5eab\u4e2d\u3002 \u5982\u679c\u904e\u7a0b\u4e2d\u6709\u932f\uff0c\u5247\u5b8c\u5168\u6e05\u9664 /temp
\u4e0b\u7684\u8cc7\u6599\uff0c\u800c\u4e0d\u6703\u628a\u8cc7\u6599\u5eab\u5f04\u9ad2\u3002
\u4e0d\u662f\u6bcf\u500b\u8cc7\u6599\u5eab\u90fd\u6703\u505a\u91cd\u4f86\u7684\u6a5f\u5236\uff0c \u6709\u4e9b\u8cc7\u6599\u5eab\u70ba\u4e86\u6eff\u8db3\u9ad8\u53ef\u7528\u6027\uff08High Availability\uff09\u7b49\u76ee\u7684\uff0c \u6703\u76e1\u53ef\u80fd\u505a\u81ea\u5df1\u80fd\u505a\u7684\u4e8b\uff08best effort\uff09\u3002
\u4f8b\u5982\u6e05\u695a\u544a\u77e5\u61c9\u7528\u7a0b\u5f0f\u767c\u751f\u4e86\u4ec0\u9ebc\u4e8b\uff0c\u4f8b\u5982\u4e0a\u500b\u4f8b\u5b50\u4e2d\uff0c\u7b2c\u4e8c\u500b\u52d5\u4f5c\uff08\u589e\u52a0\u90f5\u4ef6\u672a\u8b80\u6578\u91cf\uff09\u82e5\u6c92\u5b8c\u6210\uff0c \u5247\u901a\u77e5\u61c9\u7528\u7a0b\u5f0f\u5176\u672a\u5b8c\u6210\uff0c\u4f46\u662f\u7b2c\u4e00\u500b\u52d5\u4f5c\u5df2\u7d93\u6e96\u78ba\u5b8c\u6210\u4e86\u3002\u9019\u6642\u61c9\u7528\u7a0b\u5f0f\u5c31\u8981\u81ea\u5df1\u518d\u91cd\u52a0\u4e00\u6b21\u672a\u8b80\u6578\u91cf\uff0c \u6216\u8005\u5728\u8a2d\u8a08\u61c9\u7528\u7a0b\u5f0f\u6642\u61c9\u8003\u91cf\u9019\u500b\u554f\u984c\u800c\u6e1b\u5c11\u9019\u985e\u7684\u53bb\u6b63\u898f\u5316\u3002
"},{"location":"feedback/designing-data-intensive-applications/foundation-ft/#\u4ea4\u6613\u6a5f\u5236","title":"\u4ea4\u6613\u6a5f\u5236","text":"\u6211\u5011\u4f86\u628a\u4e0a\u9762\u7684\u7279\u6027\u6574\u5408\u8d77\u4f86\u3002\u5982\u679c\u8cc7\u6599\u5eab\u5728\u8655\u7406\u8acb\u6c42\u7684\u6642\u5019\u53ef\u4ee5\u6eff\u8db3\u4e0a\u8ff0\u7279\u6027\u6642\uff0c\u6211\u5011\u7a31\u9019\u4e00\u985e\u8acb\u6c42\u70ba\u4ea4\u6613\uff08transaction\uff09\u3002
\u6839\u64da\u4e0a\u8ff0\u7279\u6027\u88ab\u6eff\u8db3\u7684\u7b49\u7d1a\uff08\u4f8b\u5982\u6700\u9ad8\u7684\u9694\u96e2\u6027\uff1a\u7dda\u6027\u57f7\u884c\uff09\uff0c\u6211\u5011\u6703\u7a31\u8a72\u8cc7\u6599\u5eab\u53ef\u4ee5\u6eff\u8db3\u7279\u5b9a\u7b49\u7d1a\u7684\u8cc7\u6599\u4e00\u81f4\u6027\uff08consistence\uff09\u3002
\u9694\u96e2\u6027\u548c\u539f\u5b50\u6027
\u6709\u4e9b\u4eba\u53ef\u80fd\u6703\u628a\u9694\u96e2\u6027\u548c\u539f\u5b50\u6027\u7576\u6210\u4e00\u4ef6\u4e8b\uff0c\u4f46\u662f\u5be6\u969b\u4ee3\u8868\u7684\u610f\u7fa9\u662f\u4e0d\u540c\u7684\u3002
\u9694\u96e2\u6027\uff1a\u907f\u514d\u5176\u4ed6\u8acb\u6c42\uff08\u751a\u81f3\u7dda\u7a0b\uff09\u770b\u5230\u90e8\u5206\u7684\u7d50\u679c\uff0c\u4ee5\u4e0a\u8ff0\u90f5\u4ef6\u70ba\u4f8b\u5c31\u662f\u672a\u8b80\u90f5\u4ef6\u6578\u91cf\u9084\u6c92\u589e\u52a0\u5c31\u53ef\u4ee5\u8b80\u53d6\u672a\u8b80\u90f5\u4ef6\u3002 \u539f\u5b50\u6027\uff1a\u70ba\u4e86\u9054\u6210\u5bb9\u932f\u800c\u628a\u6240\u6709\u8655\u7406\u5305\u88dd\u6210\u55ae\u4e00\u4e8b\u4ef6\u7684\u8a2d\u8a08\u7406\u5ff5\uff08philosophy\uff09\uff0c\u5176\u4e2d\u4e26\u6c92\u6709\u4e26\u884c\uff08concurrency\uff09\u7684\u6982\u5ff5\u3002
\u539f\u5b50\u6027\u662f\u5f9e atomic \u7ffb\u8b6f\u800c\u4f86\uff0c\u5728\u6b64\u4e5f\u8a31\u7528 abortability \u66f4\u70ba\u6070\u7576\u3002
\u540d\u8a5e\u610f\u7fa9
\u5be6\u969b\u4e0a\uff0c\u5404\u500b\u540d\u8a5e\u7684\u610f\u7fa9\u5728\u6e9d\u901a\u904e\u7a0b\u4e2d\uff0c\u90fd\u5df2\u88ab\u6cdb\u5316\u3002\u5728\u672c\u6587\u7ae0\u4e2d\u91dd\u5c0d\u540d\u500b\u8a5e\u505a\u7684\u89e3\u91cb\u4e26\u4e0d\u9069\u7528\u6240\u6709\u7684\u7522\u54c1\u6587\u4ef6\u3001\u90e8\u843d\u5ba2\u6587\u7ae0\u3001\u66f8\u672c\u3002
\u4f60\u5fc5\u9808\u901a\u904e\u524d\u5f8c\u6587\u5c0d\u7167\u4f86\u627e\u51fa\u5176\u4ee3\u8868\u7684\u610f\u7fa9\uff0c\u4e0d\u5fc5\u57f7\u8457\u65bc\u54ea\u500b\u7528\u6cd5\u624d\u662f\u6700\u70ba\u7cbe\u6e96\u7684\u3002
"},{"location":"feedback/designing-data-intensive-applications/foundation-ft/#\u61c9\u7528","title":"\u61c9\u7528","text":"\u4e0d\u662f\u6bcf\u500b\u61c9\u7528\u7a0b\u5f0f\u90fd\u9700\u8981\u4f7f\u7528\u4ea4\u6613\u6a5f\u5236\uff0c\u96d6\u7136\u4ed6\u80fd\u63d0\u5347\u5bb9\u932f\u6027\u4e26\u9054\u6210\u8cc7\u6599\u7684\u4e00\u81f4\u6027\uff0c\u537b\u6703\u964d\u4f4e\u6548\u80fd\u548c\u53ef\u7528\u6027\u3002
\u6839\u64da\u72c0\u6cc1\u6211\u5011\u53ef\u80fd\u53ef\u4ee5\u900f\u904e\u4ea4\u6613\u4ee5\u5916\u7684\u65b9\u5f0f\u4f86\u9054\u6210\u4e00\u5b9a\u7b49\u7d1a\u7684\u8cc7\u6599\u4e00\u81f4\u6027\u3002
1975 \u5e74\uff0cIBM \u7684 System R \uff08\u7b2c\u4e00\u500b SQL \u8cc7\u6599\u5eab\uff09 \u9996\u958b\u5148\u6cb3\u7684\u4f7f\u7528\u4ea4\u6613\u7684\u6a5f\u5236\u3002\u9019\u4e4b\u5f8c\uff0c\u8a31\u591a\u7684\u95dc\u9023\u5f0f\u8cc7\u6599\u5eab\uff08SQL DB\uff09\u90fd\u4e00\u5b9a\u7a0b\u5ea6\u4e0a\u7684\u652f\u63f4\u76f8\u4f3c\u7684\u7406\u5ff5\u3002
\u4f46\u662f\u5230\u4e86 2010 \u5e74\u5de6\u53f3\uff0cNoSQL \u7684\u7406\u5ff5\u958b\u59cb\u5d1b\u8d77\u3002 \u4ed6\u5011\u63d0\u5021\u7684\u4e0d\u53ea\u662f\u4e0d\u540c\u7684\u8cc7\u6599\u67b6\u69cb\uff0c \u4e5f\u653e\u68c4\u4f7f\u7528\u591a\u503c\uff08multi-object\uff09\u7684\u4ea4\u6613 \uff08\u55ae\u4e00\u503c\u7684\u4ea4\u6613\u5f88\u8f15\u6613\u5c31\u80fd\u9054\u6210\uff0c\u7136\u800c\u591a\u503c\u7684\u4ea4\u6613\u537b\u9700\u8981\u4ed8\u51fa\u9f90\u5927\u7684\u4ee3\u50f9\uff09\uff0c \u4e5f\u7531\u6b64\uff0c\u9054\u6210\u9ad8\u64f4\u589e\u6027\u3001\u9ad8\u53ef\u7528\u6027\u548c\u9ad8\u6548\u80fd\u7684\u8cc7\u6599\u5eab\u3002
ORM \u5c0d\u4ea4\u6613\u7684\u770b\u6cd5
\u5118\u7ba1\u4ea4\u6613\u7684\u50f9\u503c\u5c31\u5728\u65bc\u900f\u904e\u539f\u5b50\u6027\u7576\u4ea4\u6613\u5931\u6557\u6642\uff0c\u4f60\u53ef\u4ee5\u653e\u5fc3\u5730\u91cd\u8dd1\u4e00\u6b21\u4ea4\u6613\uff0cORM\uff08Object-relational mapping\uff09 \u7684\u6846\u67b6\u5728\u8655\u7406\u4ea4\u6613\u6642\uff0c\u901a\u5e38\u4e0d\u6703\u9810\u8a2d retry \u932f\u8aa4\u7684\u4ea4\u6613\u3002
\u56e0\u70ba\u4e26\u4e0d\u662f\u6240\u6709\u5834\u666f\u7684\u90fd\u9069\u5408\u91cd\u505a\u4ea4\u6613\uff1a
\u4e00\u81f4\u6027\u7b49\u7d1a\u5f9e\u4f4e\u5230\u9ad8\uff0c\u5176\u72a7\u7272\u7684\u662f\u6548\u80fd\u3001\u53ef\u7528\u6027\u3001\u64f4\u589e\u6027\u3002
\u70ba\u4e86\u6c7a\u5b9a\u61c9\u7528\u7a0b\u5f0f\u53ef\u4ee5\u9054\u6210\u7684\u4e00\u81f4\u6027\u7b49\u7d1a\uff0c\u6211\u5011\u5c31\u9700\u8981\u4e86\u89e3\u4e0d\u540c\u7b49\u7d1a\u7684\u72c0\u6cc1\u548c\u89e3\u6c7a\u8fa6\u6cd5\u3002\u9019\u88e1\u89e3\u91cb\u7684\u65b9\u5f0f\u662f\u4f7f\u7528\u8f03\u70ba\u751f\u6d3b\u5316\u3001\u7bc4\u4f8b\u6027\u7684\u8aaa\u660e\uff0c\u82e5\u9700\u8981\u66b8\u89e3\u7cbe\u6e96\u7684\u5b9a\u7fa9\uff0c\u53ef\u4ee5\u67e5\u770b\u8ad6\u6587123\u3002
\u6700\u7d42\u4e00\u81f4\u6027\uff08eventual consistence\uff09\u4ee3\u8868\u5728\u78ba\u5b9a\u4f46\u4e0d\u53ef\u9810\u671f\u7684\u672a\u4f86\uff08\u4e0d\u7ba1\u662f\u4eba\u70ba\u4ecb\u5165\u9084\u662f\u7db2\u8def\u4e2d\u65b7\u7684\u5fa9\u539f\uff09\u88e1\uff0c\u8cc7\u6599\u6703\u88ab\u9054\u6210\u4e00\u81f4\u3002 \u9019\u662f\u6700\u5f31\u7684\u4e00\u81f4\u6027\uff0c\u5728\u8003\u616e\u8cc7\u6599\u7684\u4e00\u81f4\u6027\u6642\uff0c\u901a\u5e38\u90fd\u9810\u8a2d\u8cc7\u6599\u5eab\u6709\u9019\u4e00\u985e\u578b\u7684\u4fdd\u8b49\u3002
"},{"location":"feedback/designing-data-intensive-applications/foundation-ft/#\u4f7f\u7528\u63d0\u4ea4\u5f8c\u7684\u8cc7\u6599","title":"\u4f7f\u7528\u63d0\u4ea4\u5f8c\u7684\u8cc7\u6599","text":"\u6240\u8b02\u7684\u300c\u4f7f\u7528\u300d\u6709\u5169\u7a2e\uff1a\u8b80\u53d6\u548c\u5beb\u5165\u3002\u4ee5\u4e0a\u8ff0\u90f5\u4ef6\u70ba\u4f8b\uff0c\u5c31\u662f\u4e00\u7a2e\u300c\u8b80\u672a\u5b8c\u6210\u7684\u8cc7\u6599\u300d\uff08dirty read\uff09\uff0c\u800c\u4e0b\u8ff0\u4f8b\u5b50\u4ee3\u8868\u300c\u8986\u5beb\u672a\u5b8c\u6210\u7684\u8cc7\u6599\u300d\uff08dirty write\uff09\uff1a
\u56e0\u70ba Alice \u548c Bob \u7684\u8cc7\u6599\u5f7c\u6b64\u88ab\u8986\u5beb\u4e86\uff0c\u6240\u4ee5\u5c0e\u81f4\u6700\u7d42\u7684\u72c0\u614b\u7834\u788e\u5316\uff1a\u8cfc\u8cb7\u8005\u662f Bob\uff0c\u767c\u7968\u4e0a\u7684\u6536\u4ef6\u8005\u537b\u662f Alice\u3002
\u6211\u5011\u7a31\u9019\u7a2e\u72c0\u6cc1\u4ee3\u8868\u8cc7\u6599\u5eab\u4e26\u6c92\u6709\u300c\u4f7f\u7528\u63d0\u4ea4\u5f8c\u7684\u8cc7\u6599\u300d\uff08read committed\uff09\u3002\u8981\u9054\u6210\u9019\u7b49\u7d1a\u7684\u4e00\u81f4\u6027\u89e3\u6c7a\u8fa6\u6cd5\u901a\u5e38\u5c31\u662f\u52a0\u9396\uff0c\u5e7e\u4e4e\u6bcf\u500b\u8cc7\u6599\u5eab\u90fd\u6709\u5be6\u4f5c\u672c\u7b49\u7d1a\u3002
\u8cc7\u6599\u907a\u5931\u4e26\u4e0d\u4ee3\u8868\u8907\u5beb\u672a\u5b8c\u6210\u7684\u8cc7\u6599
\u5982\u679c Alice \u548c Bob \u5148\u5f8c\u5b8c\u6210\u8acb\u6c42\uff0c\u4e26\u4e14\u5f7c\u6b64\u50c5\u6709\u4e00\u65b9\u88ab\u8986\u5beb\uff0c\u9019\u6642\u4e26\u4e0d\u9055\u53cd_\u4f7f\u7528\u63d0\u4ea4\u5f8c\u7684\u8cc7\u6599_\u3002\u9019\u53ea\u662f\u4ee3\u8868\u8cc7\u6599\u88ab\u8986\u5beb\u800c\u5df2\uff0c\u8655\u7406\u8cc7\u6599\u8907\u5beb\u7684\u8fa6\u6cd5\u6703\u5728\u8cc7\u6599\u5eab\u8907\u88fd\u4e2d\u63d0\u5230\u3002
"},{"location":"feedback/designing-data-intensive-applications/foundation-ft/#\u8986\u5beb\u672a\u5b8c\u6210\u7684\u8cc7\u6599","title":"\u8986\u5beb\u672a\u5b8c\u6210\u7684\u8cc7\u6599","text":"\u7576\u5beb\u5165\u591a\u7b46\u8cc7\u6599\u6642\uff0c\u9396\u4f4f\u5beb\u904e\u7684\u7269\u4ef6\u3002 \u4ee5\u4e0a\u8ff0\u70ba\u4f8b\uff0c\u7576 Alice \u5c1a\u672a\u5b8c\u6210\u4ea4\u6613\uff08un-commit\uff09\u524d\uff0clistings id=1234
\u7684\u7269\u4ef6\u6703\u88ab\u9396\u4f4f\uff0c\u5373\u4f7f Bob \u60f3\u4fee\u6539\uff0c\u4e5f\u9700\u8981\u7b49 Alice \u5b8c\u6210\u4ea4\u6613\u3002
\u5beb\u5165\u524d\u5148\u6aa2\u67e5
\u82e5\u4f60\u4e0d\u5e0c\u671b Bob \u8986\u5beb\u6389 Alice \u7684\u8cc7\u6599\uff0c\u4f60\u53ef\u4ee5\u5728\u66f4\u65b0\u7684\u641c\u5c0b\u8a9e\u6cd5\u4e2d\u52a0\u4e0a\u6aa2\u67e5\uff0c\u8b93\u9019\u500b\u641c\u5c0b\u8b8a\u6210\u300c\u5148\u6aa2\u67e5\u518d\u5beb\u5165\u300d\uff08compare-and-set\uff09\u3002
sql \"\u5148\u6aa2\u67e5\u6c92\u6709\u8cb7\u5bb6\u518d\u66f4\u65b0\" UPDATE listings SET buyer = 'Bob' WHERE id = 1234 AND buyer = NULL
\u82e5\u5176\u4ed6\u8acb\u6c42\u6b63\u5728\u5beb\u5165\u8cc7\u6599\u6642\uff0c\u6211\u5011\u907f\u514d\u5176\u4ed6\u8acb\u6c42\u4e26\u884c\u8b80\u53d6\u6642\uff0c\u6703\u5927\u91cf\u964d\u4f4e\u6548\u80fd\uff08OLTP \u7684\u7279\u6027\u662f\u5927\u91cf\u8b80\u53d6\u5c11\u91cf\u7570\u52d5\uff09\u3002\u6240\u4ee5\u901a\u5e38\u5728\u5be6\u4f5c\u9396\u7684\u6642\u5019\uff0c\u50c5\u6703\u907f\u514d\u540c\u6642\u5beb\u5165\u3002
\u4f46\u662f\u9019\u6a23\u5c31\u6c92\u8fa6\u6cd5\u9054\u6210\u6211\u5011\u8981\u6c42\u7684\u4e00\u81f4\u6027\u7b49\u7d1a\uff1a\u53ea\u8b80\u5b8c\u6210\u7684\u8cc7\u6599\uff08no dirty read\uff09\u3002\u6211\u5011\u53ef\u4ee5\u8b93\u6b63\u5728\u5beb\u5165\u7684\u8cc7\u6599\u653e\u5728\u8a18\u61b6\u9ad4\u4e2d\uff0c\u9019\u6642\u5176\u4ed6\u8acb\u6c42\u5728\u8b80\u53d6\u6642\uff0c\u5c31\u662f\u8b80\u78c1\u789f\u88e1\u7684\u8cc7\u6599\uff0c\u9019\u6a23\u5c31\u53ef\u4ee5\u907f\u514d\u5176\u4ed6\u8acb\u6c42\u8b80\u53d6\u5230\u9084\u672a\u5b8c\u6210\u7684\u8cc7\u6599\u3002\u7576\u6b63\u5728\u5beb\u5165\u7684\u8cc7\u6599\u5b8c\u6210\u6642\uff0c\u518d\u628a\u505a\u597d\u7684\u8cc7\u6599\u653e\u56de\u78c1\u789f\u4e2d\u3002
\u5df2\u77e5\u7684\u8cc7\u6599\u5eab\u4e2d\uff0c\u50c5\u6709 Microsoft SQL Server \u7576\u8a2d\u5b9a read_committed_snapshot=off
\u6642\u6703\u8b93\u9396\u4f4f\u7684\u7269\u4ef6\u7121\u6cd5\u88ab\u8b80\u53d6\u3002
\u4f7f\u7528\u63d0\u4ea4\u5f8c\u7684\u8cc7\u6599\uff0c\u597d\u50cf\u5df2\u7d93\u5f88\u7b26\u5408\u6211\u5011\u524d\u9762\u5c0d\u65bc\u9694\u96e2\u6027\u7684\u610f\u7fa9\uff1a\u4ea4\u6613\u9593\u4e0d\u6703\u4e92\u76f8\u5f71\u97ff\u3002\u524d\u9762\u63d0\u5230\u7684\u4f8b\u5b50\uff0c\u4e5f\u90fd\u53ef\u4ee5\u9806\u5229\u89e3\u6c7a\uff0c\u4f7f\u7528\u8005\u4e0d\u6703\u518d\u770b\u5230\u6709\u672a\u8b80\u90f5\u4ef6\uff0c\u537b\u6c92\u6709\u589e\u52a0\u672a\u8b80\u90f5\u4ef6\u7684\u6578\u91cf\uff08\u4e0d\u8b80\u672a\u5b8c\u6210\u7684\u8cc7\u6599\uff09\u3002\u7136\u800c\uff1a
\u6709\u500b\u8acb\u6c42\u540c\u6642\u8b80\u53d6\u5230\u4ea4\u6613\u958b\u59cb\u524d\u548c\u7d50\u675f\u5f8c\u7684\u72c0\u614b\uff0c\u9019\u6642\u5c31\u6703\u986f\u793a\u51fa\u72c0\u614b\u7684\u4e0d\u4e00\u81f4\u6027\u3002\u807d\u8d77\u4f86\u597d\u50cf\u9084\u597d\uff0c\u6211\u518d\u91cd\u65b0\u6574\u7406\u5c31\u53ef\u4ee5\u628a\u72c0\u614b\u6062\u5fa9\u539f\u72c0\uff0c\u4f46\u662f\u4f60\u9084\u9700\u8981\u8003\u616e\u4ee5\u4e0b\u72c0\u6cc1\uff1a
\u524d\u9762\u7684\u5716\u63d0\u5230\u7684\u8b80\u53d6\u504f\u659c\uff08read skew\uff09\u5c31\u4ee3\u8868\u9019\u500b\u8b80\u53d6\u52d5\u4f5c\u56e0\u70ba\u4efb\u4f55\u539f\u56e0\uff08\u7db2\u8def\u6392\u968a\u3001\u904b\u884c\u66ab\u505c\u7b49\u7b49\uff09\u88ab\u5ef6\u9072\u4e86\uff0c\u5c0e\u81f4\u5176\u8b80\u53d6\u7684\u8cc7\u6599\u662f\u50be\u659c\u7684\uff08\u72c0\u614b\u4e0d\u4e00\u81f4\u7684\uff09\u3002
\u6211\u5011\u7a31\u9019\u7a2e\u72c0\u6cc1\u6c92\u8fa6\u6cd5\u9054\u6210\u300c\u5feb\u7167\u9694\u96e2\u300d\u4e00\u81f4\u6027\u3002\u8981\u9054\u6210\u9019\u500b\u7b49\u7d1a\u7684\u4e00\u81f4\u6027\uff0c\u901a\u5e38\u6703\u4f7f\u7528\u591a\u7248\u672c\u4e26\u884c\u63a7\u5236\uff08multi-version concurrency control\uff0cMVCC\uff09\uff0c\u9019\u4e5f\u662f\u5f88\u591a\u8cc7\u6599\u5eab\u6703\u9054\u6210\u7684\u7b49\u7d1a\u3002
\u5c08\u6709\u540d\u8a5e
\u6709\u4e9b\u8cc7\u6599\u5eab\u6703\u7a31\u5feb\u7167\u9694\u96e2\u70ba\u53ef\u91cd\u8907\u8b80\u53d6\uff08repeatable read\uff09\u6216\u5e8f\u5217\u5316\uff08serializability\uff09\uff0c\u9019\u662f\u56e0\u70ba\u7576\u521d\u4ee5 System R \u70ba\u57fa\u790e\u5efa\u7acb\u7684 SQL \u5354\u5b9a\u5c31\u662f\u4f7f\u7528\u53ef\u91cd\u8907\u8b80\u53d6\u9019\u500b\u540d\u8a5e\uff0c\u8cc7\u6599\u5eab\u70ba\u4e86\u5ba3\u7a31\u5176\u6eff\u8db3 SQL \u5354\u5b9a\uff0c\u5c31\u6703\u628a\u9019\u500b\u540d\u8a5e\u5beb\u9032\u4ed6\u5011\u7684\u6587\u4ef6\u4e2d\u3002
\u96d6\u7136\u6709\u8ad6\u658745\u7d66\u4e88\u9019\u4e00\u985e\u7684\u4e00\u81f4\u6027\u4e00\u500b\u5b9a\u7fa9\uff0c\u4f46\u662f\u5927\u90e8\u5206\u8cc7\u6599\u5eab\u5728\u5ba3\u7a31\u5176\u64c1\u6709\u53ef\u91cd\u8907\u8b80\u53d6\u7684\u4e00\u81f4\u6027\u6642\u4e26\u672a\u6eff\u8db3\u9019\u500b\u5b9a\u7fa9\u3002\u66f4\u7cdf\u7684\u662f IBM DB2 \u751a\u81f3\u628a\u5e8f\u5217\u5316\u7576\u6210\u5feb\u7167\u9694\u96e2
\u7c21\u55ae\u4f86\u8aaa\uff0c\u591a\u7248\u672c\u4e26\u884c\u63a7\u5236\u5c31\u662f\u66ff\u8cc7\u6599\u5eab\u7684\u72c0\u614b\u5efa\u7acb\u591a\u500b\u7248\u672c\uff0c\u6bcf\u500b\u4ea4\u6613\u6839\u64da\u7576\u4e0b\u64c1\u6709\u7684\u7248\u672c\u865f\uff0c\u9650\u5236\u57f7\u884c\u54ea\u4e9b\u884c\u70ba\uff0c\u9019\u500b\u7248\u672c\u865f\u6211\u5011\u7a31\u5176\u70ba\u4ea4\u6613\u7de8\u865f\uff08transaction ID\uff0ctxid
\uff09\u3002
\u524d\u9762\u6211\u5011\u63d0\u5230\u7684_\u4f7f\u7528\u63d0\u4ea4\u5f8c\u7684\u8cc7\u6599_\u5c31\u662f\u8b93\u8cc7\u6599\u5eab\u64c1\u6709\u5169\u500b\u7248\u672c\uff0c\u4e00\u500b\u662f\u4ea4\u6613\u6b63\u5728\u4fee\u6539\u6642\u7684\u72c0\u614b\uff08un-committed\uff09\u7248\u672c\uff0c\u4e00\u500b\u662f\u4ea4\u6613\u5b8c\u6210\uff08committed\uff09\u5f8c\u7684\u7248\u672c\u3002 \u6240\u6709\u50c5\u4f5c\u8b80\u53d6\u7684\u4ea4\u6613\u53ea\u6703\u4f7f\u7528\u5230\u4ea4\u6613\u5b8c\u6210\u5f8c\u7684\u7248\u672c\uff0c\u800c\u57f7\u884c\u5beb\u5165\u7684\u4ea4\u6613\u5c31\u6703\u81ea\u5df1\u64c1\u6709\u6b63\u5728\u4fee\u6539\u6642\u7684\u7248\u672c\uff08\u901a\u5e38\u5b58\u653e\u65bc\u8a18\u61b6\u9ad4\uff09\u3002
\u7576\u4ea4\u6613\u5728\u505a\u8b80\u53d6\u6642\uff0c\u6703\u6839\u64da\u4e00\u500b\u4e00\u76f4\u589e\u52a0\u7684\u8a08\u6578\u5668\u7d66\u4e88\u5176\u4ea4\u6613\u7de8\u865f\uff08\u4ee5\u4e0a\u5716\u70ba\u4f8b\u5c31\u662f txid=12
\uff09\u3002\u9019\u6642\uff0c\u8cc7\u6599\u5eab\u6703\u5217\u51fa\u76ee\u524d\u6709\u54ea\u4e9b\u6b63\u5728\u57f7\u884c\u7684\u4ea4\u6613\uff0c\u5f85\u6703\u672c\u4ea4\u6613\u5728\u64cd\u4f5c\u6642\uff0c\u6240\u6709\u6b63\u5728\u57f7\u884c\u7684\u4ea4\u6613\u90fd\u6703\u88ab\u62d2\u7d55\u4f7f\u7528\u3002\u540c\u6642\uff0c\u53ea\u80fd\u8b80\u53d6\u6642\uff0c\u5c0f\u65bc\u5176\u64c1\u6709\u7684\u4ea4\u6613\u7de8\u865f\u7684\u8cc7\u6599\uff08\u4ee5\u4e0a\u5716\u70ba\u4f8b\u5c31\u662f txid=13
\u4e0d\u80fd\u88ab\u8b80\u53d6\uff09\u3002
\u5176\u6838\u5fc3\u6982\u5ff5\u5c31\u662f\uff1a\u6240\u6709\u7684\u8b80\u53d6\u90fd\u4e0d\u6703\u5f71\u97ff\u6240\u6709\u7684\u5beb\u5165\uff0c\u53cd\u4e4b\u4ea6\u7136\u3002
\u8ce6\u503c\u7684\u8a08\u6578\u5668\u7576\u5927\u65bc\u4e00\u56fa\u5b9a\u6578\u6642\u662f\u6703\u6b78\u96f6\u91cd\u7b97\u7684\u3002
"},{"location":"feedback/designing-data-intensive-applications/foundation-ft/#\u7d22\u5f15","title":"\u7d22\u5f15","text":"\u524d\u9762\u6211\u5011\u6709\u63d0\u904e\u8cc7\u6599\u5eab\u7684\u7d22\u5f15\u662f\u5982\u4f55\u904b\u4f5c\u7684\uff0c\u4f46\u662f\u5982\u679c_\u591a\u7248\u672c\u4e26\u884c\u63a7\u5236_\u9700\u8981\u88ab\u8003\u616e\u9032\u53bb\u6642\uff0c\u5c31\u9700\u8981\u4e00\u4e9b\u984d\u5916\u7684\u529f\u53bb\u8abf\u6574\u6a5f\u5236\u3002
\u4e00\u500b\u4f5c\u6cd5\u662f\u8b93\u7d22\u5f15\u6307\u5411\u6240\u6709\u7248\u672c\u7684\u8cc7\u6599\uff08\u4e0d\u7ba1\u662f\u9801\u5c0e\u5411\u4e2d\u6307\u5411\u7279\u5b9a\u9801\u6216\u8005\u65e5\u8a8c\u7d50\u69cb\u7684\u6563\u5217\u5c0d\u7167\u8868\u7684\u5730\u5740\uff09\uff0c\u4f46\u662f\u6839\u64da\u4e0d\u540c\u5be6\u4f5c\u65b9\u5f0f\u53ef\u80fd\u6703\u6709\u5f88\u5927\u7684\u6548\u80fd\u5dee\u7570\u3002
CouchDB\u3001Datomic\u3001LMDB \u96d6\u7136\u4e5f\u662f\u4f7f\u7528 B-Tree \u505a\u5132\u5b58\uff0c\u4f46\u662f\u6a5f\u5236\u537b\u662f append-only/copy-on-write\u3002\u7576\u66f4\u65b0\u8cc7\u6599\u6642\uff0c\u4e0d\u53bb\u66f4\u52d5\u820a\u7684\u9801\uff0c\u800c\u662f\u76f4\u63a5\u65b0\u589e\u4e00\u500b\u9801\u4e26\u8b93\u5b83\u53d6\u4ee3\u820a\u9801\u7684\u4f4d\u7f6e\u3002
"},{"location":"feedback/designing-data-intensive-applications/foundation-ft/#\u5beb\u5165\u504f\u659c","title":"\u5beb\u5165\u504f\u659c","text":"\u4e0a\u9762\u63d0\u5230\u7684\u7af6\u8cfd\u72c0\u6cc1\u90fd\u662f\u4e0d\u540c\u4ea4\u6613\u5617\u8a66\u4f7f\u7528\u76f8\u540c\u7684\u7269\u4ef6\uff0c\u4f46\u662f\u7af6\u8cfd\u72c0\u6cc1\u4e5f\u662f\u6703\u767c\u751f\u5728\u7576\u4e0d\u540c\u4ea4\u6613\u540c\u6642\u5beb\u5165\u4e0d\u540c\u7269\u4ef6\u7684\u6642\u5019\u3002
\u6211\u5011\u5148\u5047\u8a2d\u4e00\u500b\u72c0\u6cc1\uff0c\u91ab\u9662\u5728\u665a\u4e0a\u503c\u73ed\u7684\u6642\u5019\u5fc5\u9808\u8981\u81f3\u5c11\u64c1\u6709\u4e00\u500b\u4f4f\u9662\u91ab\u5e2b\uff0c\u4f46\u662f\u4e00\u822c\u60c5\u6cc1\u6703\u8b93\u5169\u500b\u4f4f\u9662\u91ab\u5e2b\u503c\u73ed\uff08\u4e5f\u5c31\u662f\u5141\u8a31\u8b93\u5176\u4e2d\u4e00\u500b\u91ab\u751f\u4f11\u5047\uff09\u3002\u82e5\u4ed6\u5011\u540c\u6642\u5728\u6392\u73ed\u7cfb\u7d71\u4e2d\uff0c\u7533\u8acb\u4f11\u5047\uff0c\u72c0\u6cc1\u5c31\u767c\u751f\u4e86\u3002
\u9019\u6642\uff0c\u7528\u524d\u9762\u7684\u89e3\u6cd5\u4e26\u6c92\u6709\u8fa6\u6cd5\u9054\u6210\u8cc7\u6599\u4e00\u81f4\u6027\uff0c\u56e0\u70ba\u4ed6\u5011\u66f4\u65b0\uff08\u6216\u6ce8\u5165\uff09\u7684\u76ee\u6a19\u662f\u4e0d\u540c\u7684\u3002
"},{"location":"feedback/designing-data-intensive-applications/foundation-ft/#\u5047\u9ad4\u5224\u5b9a","title":"\u5047\u9ad4\u5224\u5b9a","text":"\u91ab\u751f\u503c\u73ed\u7684\u72c0\u6cc1\u9019\u5c31\u662f\u6211\u5011\u5e38\u898b\u7684\u8a02\u7968\u7cfb\u7d71\u88ab\u8d85\u8a02\u4e86\u3002\u53e6\u5916\u4e00\u500b\u7bc4\u4f8b\u4e5f\u5305\u62ec\u9810\u7d04\u7cfb\u7d71\uff1a
\u82e5\u6709\u7a7a\u4f4d\uff0c\u5247\u53ef\u9810\u7d04BEGIN TRANSACTION;\n\nSELECT COUNT(*) FROM bookings -- (1)\nWHERE room_id = 123 AND\nend_time > '2015-01-01 12:00' AND start_time < '2015-01-01 13:00';\n\nINSERT INTO bookings(room_id, start_time, end_time, user_id) -- (2)\nVALUES (123, '2015-01-01 12:00', '2015-01-01 13:00', 666);\n\nCOMMIT;\n
COUNT(\\*) == 0
\uff09\u9019\u4f8b\u5b50\u4e0d\u50cf\u91ab\u751f\u7684\u4f8b\u5b50\uff0c\u56e0\u70ba\u91ab\u751f\u4f8b\u5b50\u662f\u6839\u64da\u5b58\u5728\u7684\u503c\uff08on_call=true
\uff09\u505a\u5224\u65b7\uff1b\u53cd\u904e\u4f86\u8aaa\uff0c\u9810\u7d04\u7cfb\u7d71\u662f\u6839\u64da\u4e0d\u5b58\u5728\u7684\u503c\uff08time IN (start, end)
\uff09\u505a\u5224\u65b7\u3002
\u9019\u7a2e\u4e0d\u5b58\u5728\u7684\u503c\u800c\u9020\u6210\u7684\u5beb\u5165\u504f\u659c\uff0c\u6211\u5011\u7a31\u5176\u70ba\u5047\u9ad4\u5224\u5b9a\uff08phantom\uff09\u3002\u5176\u7279\u5fb5\u662f insert
\u800c\u4e0d\u662f update
\u3002
\u7121\u8ad6\u5982\u4f55\uff0c\u7576\u767c\u751f\u5beb\u5165\u504f\u659c\u6642\u5c31\u8981\u4f7f\u7528\u66f4\u5f37\u7684\u4e00\u81f4\u6027\u7b49\u7d1a\uff1a\u5e8f\u5217\u5316\u3002\u5728\u4ecb\u7d39\u5e8f\u5217\u5316\u4e4b\u524d\uff0c\u6211\u5011\u5148\u4f86\u770b\u770b\u9664\u6b64\u4e4b\u5916\u9084\u6709\u54ea\u4e9b\u65b9\u5f0f\u53ef\u4ee5\u907f\u514d\u7279\u6b8a\u7684\u5beb\u5165\u504f\u659c\u3002
"},{"location":"feedback/designing-data-intensive-applications/foundation-ft/#\u9650\u5236\u72c0\u614b","title":"\u9650\u5236\u72c0\u614b","text":"\u5176\u4e2d\u4e00\u500b\u7c21\u55ae\u7684\u89e3\u6cd5\u5c31\u662f\u7d66\u4e88\u9650\u5236\uff08constraint\uff09\u3002\u4f8b\u5982 SQL \u8cc7\u6599\u5eab\u5e38\u898b\u7684 UNIQUE
\uff0c\u5176\u61c9\u7528\u53ef\u80fd\u662f\u4f7f\u7528\u8005\u5e33\u6236\uff1a
SELECT COUNT(*) -- (1)\nFROM users\nWHERE user_account = 'new_user'\n\nINSERT INTO users(user_id, user_account) -- (2)\nVALUES (123, 'new_user');\n
new_user
COUNT(*) == 0
\uff09\u5982\u679c\u6211\u5011\u66ff user_account
\u6dfb\u52a0\u9650\u5236\uff0c\u8b93\u4ed6\u53ea\u80fd\u55ae\u4e00\u5b58\u5728\uff0c\u5c31\u53ef\u4ee5\u907f\u514d\u540c\u6642\u6709\u5169\u500b\u4f7f\u7528\u8005\u5e33\u6236\u4e00\u6a23\u7684\u7af6\u8cfd\u72c0\u6cc1\u3002
\u4f46\u662f\u4ee5\u91ab\u751f\u503c\u73ed\u70ba\u4f8b\uff0c\u7576\u6d89\u53ca\u5230\u591a\u500b\u7269\u4ef6\u6642\uff0c\u5927\u90e8\u5206\u8cc7\u6599\u5eab\u90fd\u4e0d\u652f\u63f4\u9019\u6a23\u7684\u9650\u5236\u3002\u9664\u4e86 UNIQUE
\u4e4b\u5916\u53ef\u80fd\u9084\u6709\u5916\u9375\uff08foreign key\uff09\u3001\u503c\u7684\u9650\u5236\uff08\u4f8b\u5982\u6b63\u6578\uff09\u7b49\u7b49\u3002
\u4e00\u822c\u4f86\u8aaa\uff0c\u6211\u5011\u90fd\u6703\u7a31\u5e8f\u5217\u5316\uff08serializability\uff09\u70ba\u6700\u5f37\u7684\u9694\u96e2\u6027\u7b49\u7d1a\uff0c\u96d6\u7136\u524d\u9762\u7684\u5716\u6709\u8aaa\u7dda\u6027\u5316\uff08linearability\uff09\u518d\u66f4\u5f37\uff0c\u4f46\u662f\u4ed6\u9700\u8981\u72a7\u7272\u7684\u6771\u897f\u592a\u591a\u4e86\uff0c\u5f88\u5c11\u88ab\u5be6\u73fe\u3002\u5e8f\u5217\u5316\u7684\u5916\u986f\u6a23\u5b50\u5c31\u662f\u96d6\u7136\u591a\u7b46\u4ea4\u6613\u53ef\u80fd\u662f\u4e26\u884c\u8655\u7406\u7684\uff0c\u4f46\u5176\u7d50\u679c\u537b\u662f\u6709\u9806\u5e8f\u6027\u7684\uff08\u5e8f\u5217\u5316\u7684\uff09\u3002
\u7576\u7136\uff0c\u9019\u9ebc\u5f37\u7684\u4e00\u81f4\u6027\u4e5f\u662f\u6703\u9700\u8981\u72a7\u7272\u7684\uff0c\u6839\u64da\u5be6\u4f5c\u65b9\u5f0f\u4e0d\u540c\uff0c\u5176\u9700\u8981\u4ed8\u51fa\u7684\u4ee3\u50f9\u6709\u6240\u4e0d\u540c\u3002
\u8b93\u8cc7\u6599\u904b\u884c\u5728\u55ae\u4e00\u7dda\u7a0b\u4e0b\uff0c\u5c31\u53ef\u4ee5\u8b93\u6240\u6709\u884c\u70ba\u90fd\u6210\u70ba\u5e8f\u5217\u5316\u3002 \u9019\u500b\u60f3\u6cd5\u5f88\u7c21\u55ae\uff0c\u4f46\u662f\u537b\u5728\u5927\u7d04 2007 \u5e74\u6642\u624d\u958b\u59cb\u51fa\u73fe\uff0c \u539f\u56e0\u662f\u56e0\u70ba\u8a18\u61b6\u9ad4\u7684\u50f9\u683c\u4f4e\u5ec9\u548c\u6574\u5408\u5feb\u7167\u9694\u96e2\u8b93\u8b80\u53d6\u7684\u4ea4\u6613\u4e26\u884c\u8655\u7406\u3002
\u70ba\u4ec0\u9ebc\u8a18\u61b6\u9ad4\u7684\u50f9\u683c\u6703\u5f71\u97ff\u80fd\u5426\u4f7f\u7528\u55ae\u4e00\u7dda\u7a0b\uff1f \u9019\u662f\u56e0\u70ba\u8981\u9054\u6210\u55ae\u4e00\u7dda\u7a0b\u7684\u8cc7\u6599\u5eab\u524d\u63d0\u662f\uff0c\u6bcf\u4e00\u500b\u4ea4\u6613\u90fd\u662f\u7c21\u55ae\u800c\u5feb\u901f\u7684\u3002 \u9019\u6a23\u4ea4\u6613\u5f7c\u6b64\u9593\u5c31\u4e0d\u6703\u6709\u904e\u591a\u7684\u5ef6\u9072\u3002\u8981\u9054\u6210\u5feb\u901f\u57f7\u884c\u4ea4\u6613\uff0c\u5c31\u9700\u8981\u628a\u8cc7\u6599\u5eab\u5b58\u9032\u8a18\u61b6\u9ad4\u4e2d\u3002
\u63a5\u4e0b\u4f86\uff0c\u6211\u5011\u4f86\u770b\u770b\u9084\u6709\u54ea\u4e9b\u60c5\u6cc1\u6703\u8b93\u4ea4\u6613\u8b8a\u5f97\u5f88\u6162\uff0c\u4e26\u8aaa\u660e\u5176\u89e3\u6c7a\u8fa6\u6cd5\u3002
"},{"location":"feedback/designing-data-intensive-applications/foundation-ft/#\u5f88\u6162\u7684\u8b80\u53d6","title":"\u5f88\u6162\u7684\u8b80\u53d6","text":"\u5f88\u6162\u7684\u8b80\u53d6\u53ef\u80fd\u6709\u5169\u7a2e\uff1a\u4e00\u7a2e\u662f\u727d\u6d89\u5230\u5927\u91cf\u8cc7\u6599\u7684\u8b80\u53d6\u3001\u4e00\u7a2e\u662f\u8b80\u53d6\u7684\u8cc7\u6599\u4e0d\u5728\u8a18\u61b6\u9ad4\u4e2d\uff0c\u9700\u8981\u5230\u78c1\u789f\u4e2d\u62c9\u53d6\u3002
\u524d\u9762\u6709\u63d0\u904e\u5728\u5beb\u5165\u504f\u659c\u4ee5\u524d\u7684\u4e00\u81f4\u6027\uff0c\u53ef\u4ee5\u900f\u904e\u5feb\u7167\u9694\u96e2\u4f86\u9054\u6210\uff0c \u6240\u4ee5\u8cc7\u6599\u5eab\u5c31\u53ef\u4ee5\u900f\u904e\u5feb\u627e\u9694\u96e2\u4f86\u57f7\u884c\u90a3\u4e9b\u9700\u8981\u5927\u91cf\u8b80\u53d6\u7684\u641c\u5c0b\uff08\u4f8b\u5982\u5206\u6790\u6027\u7684\u641c\u5c0b\uff09\u3002
\u5982\u679c\u8cc7\u6599\u5728\u78c1\u789f\u4e2d\uff0c\u6211\u5011\u53ef\u4ee5\u5148\u9000\u56de\u4ea4\u6613\uff08\u6216\u8005\u8b93\u5176\u4ed6\u4ea4\u6613\u5148\u57f7\u884c\uff09\uff0c \u7b49\u78c1\u789f\u7684\u8cc7\u6599\u88ab\u62c9\u9032\u8a18\u61b6\u9ad4\u4e2d\u518d\u57f7\u884c\u9019\u500b\u4ea4\u6613\u3002
"},{"location":"feedback/designing-data-intensive-applications/foundation-ft/#\u4e92\u52d5\u5f0f\u4ea4\u6613","title":"\u4e92\u52d5\u5f0f\u4ea4\u6613","text":"\u6709\u4e9b\u4ea4\u6613\u662f\u61c9\u7528\u7a0b\u5f0f\u53cd\u8986\u548c\u8cc7\u6599\u5eab\u6e9d\u901a\u9032\u884c\u7684\uff0c\u4f8b\u5982\u5148\u5f9e\u8cc7\u6599\u5eab\u62ff\u53d6\u4e00\u4e9b\u8cc7\u6599\uff0c \u505a\u5224\u65b7\u548c\u904b\u7b97\u4e4b\u5f8c\u518d\u57f7\u884c\u4ea4\u6613\u4e2d\u7684\u4e0b\u4e00\u6b65\u3002 \u9019\u6642\uff0c\u5927\u91cf\u7684\u6642\u9593\u90fd\u88ab\u6d88\u8017\u5728\u7db2\u8def\u6e9d\u901a\u4e0a\u3002 \u70ba\u4e86\u907f\u514d\u9019\u7a2e\u60c5\u6cc1\uff0c\u9019\u7a2e\u5be6\u969b\u5e8f\u5217\u5316\u7684\u8cc7\u6599\u5eab\u901a\u5e38\u53ea\u652f\u63f4\u8caf\u5b58\u7a0b\u5e8f\uff08stored procedure\uff09\u3002
\u6709\u8caf\u5b58\u7a0b\u5e8f\u7684\u8cc7\u6599\u5eab
\u4f46\u662f\u8caf\u5b58\u7a0b\u5e8f\u7684\u7f3a\u9ede\u5c31\u662f\u5f88\u96e3\u9054\u6210\u64f4\u589e\u6027\uff0c\u56e0\u70ba\u4ed6\u7279\u6027\u662f\u55ae\u4e00\u7dda\u7a0b\u53bb\u57f7\u884c\u9019\u4e9b\u4e8b\uff0c \u7576\u8cc7\u6599\u88ab\u653e\u9032\u591a\u53f0\u8cc7\u6599\u5eab\u6642\uff08partitioned\uff09\uff0c\u5c31\u6703\u72a7\u7272\u5f88\u591a\u6548\u80fd\u4f86\u9054\u6210\u9019\u500b\u76ee\u7684\u3002
\u76f8\u53cd\u7684\uff0c\u5982\u679c\u8cc7\u6599\u80fd\u88ab\u5408\u4e4e\u908f\u8f2f\u7684\u653e\u7f6e\u4e0d\u540c\u4f4d\u7f6e\uff08\u6839\u64da\u61c9\u7528\u7a0b\u5f0f\u7684\u5546\u52d9\u908f\u8f2f\uff09\uff0c \u5c31\u53ef\u4ee5\u5728\u4e0d\u540c\u8cc7\u6599\u5eab\u5404\u81ea\u57f7\u884c\u5176\u7bc4\u570d\u5167\u7684\u8cc7\u6599\uff0c\u9054\u6210\u5206\u6563\u5f0f\u7684\u55ae\u4e00\u7dda\u7a0b\u3002
"},{"location":"feedback/designing-data-intensive-applications/foundation-ft/#\u5169\u968e\u6bb5\u9396","title":"\u5169\u968e\u6bb5\u9396","text":"\u5169\u968e\u6bb5\u9396\uff08(Strong Strict) Two-phase locking\uff0c(SS)2PL\uff09\u5c31\u662f\u5728\u4ea4\u6613\u5beb\u5165\u6642\uff0c \u907f\u514d\u5176\u4ed6\u4ea4\u6613\u8b80\u53d6\uff1b\u53cd\u4e4b\u4ea6\u7136\u3002
\u5169\u968e\u6bb5\u9396\u4e2d\u6709\u5169\u7a2e\u9396\uff0c\u4e00\u7a2e\u662f\u5171\u4eab\u9396\uff08shared mode\uff09\u3001\u4e00\u7a2e\u662f\u6392\u4ed6\u9396\uff08exclusive mode\uff09\u3002 \u7576\u4ea4\u6613\u5728\u8b80\u53d6\u8cc7\u6599\u6642\uff0c\u6703\u7372\u5f97\u8a72\u8cc7\u6599\u7684\u5171\u4eab\u9396\uff1b\u53cd\u4e4b\uff0c\u7576\u4ea4\u6613\u5728\u7de8\u8f2f\u6642\uff0c\u6703\u7372\u5f97\u8a72\u8cc7\u6599\u7684\u6392\u4ed6\u9396\u3002 \u6392\u4ed6\u9396\u8981\u7b49\u6240\u6709\u8a72\u8cc7\u6599\u7684\u5171\u4eab\u9396\u88ab\u91cb\u653e\uff0c\u76f8\u53cd\u7684\uff0c\u7372\u5f97\u5171\u4eab\u9396\u7684\u524d\u63d0\u5c31\u662f\u8a72\u8cc7\u6599\u4e26\u6c92\u6709\u6392\u4ed6\u9396\u3002
\u5169\u968e\u6bb5\u7684\u968e\u6bb5\u4ee3\u8868\u5f9e\u9650\u5236\u5176\u4ed6\u4ea4\u6613\u5beb\u5165\u540c\u7269\u4ef6\u7684\u968e\u6bb5\u63d0\u5347\u5230\u9650\u5236\u63d0\u4ed6\u4ea4\u6613\u8b80\u53d6\u540c\u7269\u4ef6\u7684\u7b2c\u4e8c\u500b\u968e\u6bb5\u3002
"},{"location":"feedback/designing-data-intensive-applications/foundation-ft/#\u9396\u7684\u5047\u9ad4\u5224\u5b9a","title":"\u9396\u7684\u5047\u9ad4\u5224\u5b9a","text":"\u524d\u9762\u7684\u9810\u7d04\u554f\u984c\u4e2d\uff0c\u6211\u5011\u53ef\u80fd\u9762\u81e8\u7684\u662f\u5beb\u5165\u6642\u7684\u5224\u65b7\u6a5f\u5236\u53d7\u5230\u5c1a\u672a\u5b58\u5728\u7684\u8cc7\u6599\u5f71\u97ff\uff08\u5373\u6240\u8b02\u7684\u5047\u9ad4\u5224\u5b9a\uff09\u3002 \u9019\u6642\u5f8c\u7684\u6a5f\u5236\u5c31\u9700\u8981\u91dd\u5c0d\u6574\u9ad4\u7684\u8868\u683c\u6216\u7279\u5b9a\u689d\u4ef6\u7684\u8cc7\u6599\u505a\u9396\u5b9a\u3002
\u900f\u904e\u689d\u4ef6\uff08\u4ee5\u4e0a\u8ff0\u70ba\u4f8b\uff0c\u5c31\u662f room=1234
\uff09\u53bb\u9650\u5236\u8cc7\u6599\u7684\u9396\u6211\u5011\u7a31\u70ba\u9810\u5224\u9396\uff08predicate lock\uff09\uff1b \u9396\u5b9a\u6574\u9ad4\u7684\u8868\u683c\uff08table\uff09\u6216\u662f\u90e8\u5206\u7684\u7d22\u5f15\u4f4d\u7f6e\uff0c\u6211\u5011\u7a31\u5176\u70ba\u7d22\u5f15\u7bc4\u570d\u9396\uff08index-range lock\uff09\u3002
\u82e5\u5169\u968e\u6bb5\u9396\u80fd\u6eff\u8db3\u5047\u9ad4\u5224\u5b9a\uff0c\u6211\u5011\u5c31\u80fd\u7a31\u5176\u70ba\u5e8f\u5217\u5316\u7684\u8cc7\u6599\u4e00\u81f4\u6027\u3002
\u7269\u5316\u885d\u7a81
\u82e5\u8a72\u8cc7\u6599\u5c1a\u672a\u5b58\u5728\uff0c \u4f60\u9664\u4e86\u9396\u5b9a\u6574\u9ad4\u7684\u8868\u683c\u4e5f\u53ef\u4ee5\u900f\u904e\u7269\u5316\u885d\u7a81\uff08materializing conflicts\uff09 \u4f86\u7269\u5316\u90e8\u5206\u7279\u5fb5\u4ee5\u9054\u6210\u90e8\u4efd\u7684\u9396\u5b9a\u3002
\u4ee5\u524d\u9762\u7684\u9810\u7d04\u7cfb\u7d71\u70ba\u4f8b\uff0c\u4f60\u53ef\u4ee5\u984d\u5916\u5efa\u7acb\u4e00\u500b\u8868\u683c\uff0c\u4e26\u5728\u5176\u4e2d\u653e\u5165\u6bcf\u5341\u4e94\u5206\u9418\u7684\u6642\u9593\u5340\u9593\uff0c \u6240\u4ee5\u8a72\u8868\u6703\u6709 2000-01-01 00:00:00
\u30012000-01-01 00:15:00
\u7b49\u7b49\u7684\u503c\u3002 \u7576\u4f60\u5728\u505a\u6703\u8b70\u5ba4\u6709\u7121\u9810\u7d04\u6642\uff0c\u53ef\u4ee5\u9396\u5b9a\u8a72\u9810\u7d04\u6642\u6bb5\u7684\u503c\uff0c\u907f\u514d\u88ab\u8b80\u53d6\uff0c \u9019\u6642\u5c31\u53ef\u4ee5\u9054\u5230\u9396\u5b9a\u90e8\u5206\u503c\u7684\u6548\u679c\uff0c\u4e5f\u5c31\u662f\u8b93\u5047\u9ad4\u8b8a\u6210\u5be6\u9ad4\u3002
\u7136\u800c\u9019\u500b\u65b9\u6cd5\u537b\u6703\u8b93\u4f60\u7684\u61c9\u7528\u7a0b\u5f0f\u8b8a\u5f97\u5f88\u9ad2\uff08\u5728\u61c9\u7528\u7a0b\u5f0f\u7684\u7a0b\u5f0f\u78bc\u4e2d\u5beb\u5165\u8cc7\u6599\u5eab\u7684\u4e26\u884c\u63a7\u5236\u908f\u8f2f\uff09\uff0c \u9664\u6b64\u4e4b\u5916\u9019\u500b\u505a\u6cd5\u6839\u64da\u5be6\u4f5c\u5834\u666f\u5f88\u53ef\u80fd\u8b8a\u5f97\u5f88\u56f0\u96e3\uff0c\u6240\u4ee5\u61c9\u8a72\u5c07\u5176\u8996\u70ba\u6700\u5f8c\u624b\u6bb5\u3002
"},{"location":"feedback/designing-data-intensive-applications/foundation-ft/#\u4f4e\u843d\u7684\u6548\u80fd","title":"\u4f4e\u843d\u7684\u6548\u80fd","text":"\u4e0d\u53ea\u662f\u56e0\u70ba\u8cc7\u6599\u5eab\u5e38\u5e38\u8981\u52a0\u9396\u3001\u89e3\u9396\uff0c\u7576\u8cc7\u6599\u88ab\u9396\u5b9a\u6642\uff0c\u5176\u4ed6\u4ea4\u6613\u5c31\u7121\u6cd5\u5b58\u53d6\u8a72\u8cc7\u6599\uff0c \u9019\u5927\u5927\u7684\u964d\u4f4e\u8cc7\u6599\u5eab\u7684\u6548\u80fd\u3002 \u6240\u4ee5\u5373\u4f7f\u5169\u968e\u6bb5\u9396\u5f9e 1980 \u5de6\u53f3\u5c31\u5df2\u7d93\u5b58\u5728\uff0c\u4ecd\u7136\u8b93\u8a31\u591a\u8cc7\u6599\u5eab\u5728\u8a2d\u8a08\u8cc7\u6599\u5eab\u6642\uff0c\u4e0d\u6703\u8003\u616e\u5e8f\u5217\u5316\u7684\u4e00\u81f4\u6027\u3002
\u7576\u4ea4\u6613\u548c\u4ea4\u6613\u9593\u56e0\u70ba\u9396\u7684\u95dc\u4fc2\u88ab\u4e92\u76f8\u9650\u5236\u4f4f\u4e86\uff0c\u4f8b\u5982\uff1a \u4ea4\u6613 1 \u91dd\u5c0d\u8cc7\u6599 a \u9032\u884c\u6392\u4ed6\u9396\uff0c \u4ea4\u6613 2 \u91dd\u5c0d\u8cc7\u6599 b \u9032\u884c\u6392\u4ed6\u9396\uff0c\u4e4b\u5f8c\u4ea4\u6613 2 \u8981\u8b80\u53d6\u8cc7\u6599 a\uff0c \u4ea4\u6613 1 \u8981\u8b80\u53d6\u8cc7\u6599 b\uff0c \u9019\u6642\u5169\u500b\u4ea4\u6613\u6703\u56e0\u70ba\u6392\u4ed6\u9396\uff0c\u800c\u88ab\u8feb\u9032\u5165\u6c38\u4e45\u7684\u7b49\u5f85\uff0c\u9019\u7a2e\u72c0\u6cc1\u7a31\u70ba\u9589\u9396\uff08deadlock\uff09\u3002
\u8cc7\u6599\u5eab\u5728\u5be6\u4f5c\u5169\u968e\u6bb5\u9396\u6642\uff0c\u9084\u8981\u5be6\u4f5c\u5075\u5074\u9589\u9396\u4e26\u91cb\u653e\u5176\u4e2d\u4e00\u500b\u4ea4\u6613\uff0c \u9019\u6642\u56e0\u70ba\u5176\u4e2d\u4e00\u500b\u4ea4\u6613\u5fc5\u9808\u900f\u904e\u61c9\u7528\u7a0b\u5f0f\u91cd\u65b0\u767c\u9001\uff0c\u8b93\u8cc7\u6599\u5eab\u5de5\u4f5c\u53c8\u9032\u4e00\u6b65\u7684\u63d0\u5347\u3002
"},{"location":"feedback/designing-data-intensive-applications/foundation-ft/#\u5e8f\u5217\u5316\u5feb\u7167","title":"\u5e8f\u5217\u5316\u5feb\u7167","text":"\u5e8f\u5217\u5316\u5feb\u7167\uff08Serializable Snapshot Isolation\uff0cSSI\uff09\u65bc 2008 \u5e74\u7684\u4e00\u7bc7 \u8ad6\u6587\u4e2d\u63d0\u51fa\uff0c \u76f8\u8f03\u65bc\u5169\u968e\u6bb5\u9396\u7684\u7406\u5ff5\uff1a \u7121\u8ad6\u6709\u6c92\u6709\u7af6\u8cfd\u72c0\u6cc1\uff0c\u6211\u8b93\u8cc7\u6599\u907f\u514d\u88ab\u95b1\u8b80\u5c31\u53ef\u4ee5\u907f\u514d\u53ef\u80fd\u7684\u7af6\u8cfd\u72c0\u6cc1\uff0c \u5e8f\u5217\u5316\u5feb\u7167\u7684\u7406\u5ff5\u662f\uff1a\u6211\u4e00\u6a23\u8b93\u4ea4\u6613\u540c\u6642\u9032\u884c\uff0c\u4f46\u662f\u7576\u767c\u73fe\u5f7c\u6b64\u6709\u885d\u7a81\u6642\uff0c\u653e\u68c4\u5f8c\u9762\u7684\u4ea4\u6613\u3002
\u9019\u7a2e\u900f\u904e\u5224\u65b7\u6c7a\u5b9a\u662f\u5426\u6709\u7af6\u8cfd\u72c0\u6cc1\u7684\u65b9\u5f0f\u5728\u65e9\u671f\u5c31\u6709\u51fa\u73fe\uff0c \u4f46\u662f\u7f3a\u9ede\u5c31\u662f\u7576\u6709\u5927\u91cf\u4ea4\u6613\u540c\u6642\u5b58\u53d6\u76f8\u540c\u7684\u7269\u4ef6\uff0c\u5c31\u5f88\u53ef\u80fd\u9020\u6210\u5927\u91cf\u7684\u4ea4\u6613\u88ab\u62d2\u7d55\uff0c \u5f9e\u800c\u9032\u4e00\u6b65\u63d0\u5347\u8cc7\u6599\u5eab\u7684\u8ca0\u8f09\uff08\u56e0\u70ba\u88ab\u653e\u68c4\u7684\u4ea4\u6613\u5f88\u53ef\u80fd\u9084\u6703\u88ab\u91cd\u505a\uff09\u3002 \u76f8\u5c0d\u800c\u8a00\uff0c\u9019\u7a2e\u65b9\u5f0f\u5c31\u5f88\u9069\u5408\u4ea4\u6613\u5b58\u53d6\u7684\u662f\u8f03\u70ba\u7a00\u758f\u7684\u8cc7\u6599\uff0c \u6216\u8005\u4ea4\u6613\u7de8\u8f2f\u8cc7\u6599\u6642\u662f\u4e0d\u5728\u4e4e\u9806\u5e8f\u7684\uff08\u4f8b\u5982 count=count+1
\uff09\u3002
\u5e8f\u5217\u5316\u5feb\u7167\u548c\u65e9\u671f\u5224\u65b7\u662f\u5426\u6709\u7af6\u8cfd\u72c0\u6cc1\u7684\u6f14\u7b97\u6cd5\u7684\u4e3b\u8981\u5dee\u7570\u5728\u65bc\uff0c\u5e8f\u5217\u5316\u5feb\u7167\u662f\u57fa\u65bc\u5feb\u7167\u9694\u96e2\u7684\u6a5f\u5236\u800c\u5efa\u7acb\u7684\u3002
\u4ee5\u4e0b\u5c31\u6839\u64da\u5e8f\u5217\u5316\u5feb\u7167\u5728\u4e0d\u540c\u7684\u7af6\u8cfd\u72c0\u6cc1\u767c\u751f\u6642\uff0c\u4ed6\u6240\u8655\u7406\u7684\u65b9\u5f0f\u8a0e\u8ad6\u4e4b\u3002
"},{"location":"feedback/designing-data-intensive-applications/foundation-ft/#\u5224\u65b7\u662f\u5426\u8b80\u5230\u820a\u8cc7\u6599","title":"\u5224\u65b7\u662f\u5426\u8b80\u5230\u820a\u8cc7\u6599","text":"\u6211\u5011\u53ef\u4ee5\u900f\u904e\u9694\u96e2\u5feb\u7167\u7684\u591a\u7248\u672c\u4e26\u884c\u63a7\u5236\u4f86\u5224\u65b7\u4ea4\u6613\u662f\u5426\u4f7f\u7528\u5230\u820a\u7684\u8cc7\u6599\uff1a \u7576\u63d0\u4ea4\u6642\uff0c\u5176\u4f7f\u7528\u7684\u8cc7\u6599\u7248\u672c\u5df2\u7d93\u88ab\u66f4\u65b0\u4e86\u3002
\u5982\u679c \u4ea4\u6613 43 \u7b2c\u4e8c\u500b\u641c\u5c0b\u4e0d\u662f\u6703\u7570\u52d5\u8cc7\u6599\u7684\u641c\u5c0b\uff08\u4e5f\u5c31\u662f \u4ea4\u6613 43 \u50c5\u662f\u505a\u8b80\u53d6\u7684\u4ea4\u6613\uff09\u6642\uff0c \u5c31\u4e0d\u9700\u8981\u9000\u56de\u8a72\u4ea4\u6613\uff0c\u56e0\u70ba\u5e8f\u5217\u5316\u5feb\u7167\u907f\u514d\u7684\u53ea\u662f\u5beb\u5165\u504f\u659c\uff0c\u5728\u6eff\u8db3\u8b80\u53d6\u504f\u659c\u7684\u60c5\u6cc1\u4e0b\uff0c\u9019\u7b46\u4ea4\u6613\u662f\u4e0d\u9700\u8981\u88ab\u9000\u56de\u7684\u3002
"},{"location":"feedback/designing-data-intensive-applications/foundation-ft/#\u5224\u65b7\u5beb\u5165\u5f8c\u662f\u5426\u5f71\u97ff\u5176\u4ed6\u4eba","title":"\u5224\u65b7\u5beb\u5165\u5f8c\u662f\u5426\u5f71\u97ff\u5176\u4ed6\u4eba","text":"\u5728\u5169\u968e\u6bb5\u9396\u7684\u6642\u5019\u6709\u63d0\u5230\u7d22\u5f15\u7bc4\u570d\u9396\uff0c\u4f46\u662f\u9019\u88e1\u7684\u9396\u4e26\u4e0d\u6703\u9650\u5236\u5176\u4ed6\u4eba\u8b80\u53d6\uff0c \u50c5\u662f\u7d00\u9304\u54ea\u4e9b\u4ea4\u6613\u4f7f\u7528\u5230\u9019\u4e9b\u8cc7\u6599\uff0c\u4ee5\u5229\u4e4b\u5f8c\u5224\u65b7\u662f\u5426\u53d7\u5f71\u97ff\u3002
"},{"location":"feedback/designing-data-intensive-applications/foundation-ft/#\u6548\u80fd\u548c\u64f4\u589e\u6027","title":"\u6548\u80fd\u548c\u64f4\u589e\u6027","text":"\u6211\u5011\u524d\u9762\u63d0\u5230\u5be6\u969b\u5e8f\u5217\u5316\u548c\u5169\u968e\u6bb5\u9396\u5206\u5225\u6709\u4f4e\u64f4\u589e\u6027\u548c\u4f4e\u6548\u7387\u6027\u7684\u7f3a\u9ede\uff0c\u7136\u800c\u5e8f\u5217\u5316\u5feb\u7167\u537b\u4fee\u6b63\u4e86\u9019\u4e9b\u7f3a\u9ede\uff0c\u9032\u800c\u53ef\u80fd\u6210\u70ba\u672a\u4f86\u5be6\u4f5c\u5e8f\u5217\u5316\u4e00\u81f4\u6027\u6642\u7684\u6a19\u6e96\u505a\u6cd5\u3002
\u5e8f\u5217\u5316\u5feb\u7167\u7684\u6548\u80fd\u53d7\u5230\u4e00\u4e9b\u5be6\u4f5c\u7d30\u7bc0\u5f71\u97ff\uff0c\u6211\u5011\u5728\u8a18\u9304\u4ea4\u6613\u7684\u904e\u7a0b\u6642\uff08\u4ee5\u5229\u4e4b\u5f8c\u5224\u65b7\u5176\u4ed6\u4ea4\u6613\u662f\u5426\u6703\u53d7\u5f71\u97ff\uff09\uff0c\u5176\u7d30\u7bc0\u7a0b\u5ea6\u6703\u9700\u8981\u505a\u4e00\u4e9b\u6b0a\u8861\uff1a
\u81f3\u65bc\u64f4\u589e\u6027\uff0c\u7576\u4f7f\u7528\u5e8f\u5217\u5316\u5feb\u7167\u6642\u56e0\u70ba\u4efb\u4e00\u4ea4\u6613\u90fd\u4e0d\u6703\u5f71\u97ff\u5176\u4ed6\u4ea4\u6613\u540c\u6642\u9032\u884c\uff0c\u50c5\u5728\u4ea4\u6613\u7d50\u675f\u5f8c\u9032\u884c\u5224\u65b7\u662f\u5426\u6709\u885d\u7a81\uff0c\u6240\u4ee5\u4ed6\u53ef\u4ee5\u5f88\u8f15\u6613\u5730\u9054\u6210\u64f4\u589e\u6027\u7684\u9700\u6c42\u3002FoundationDB
"},{"location":"feedback/designing-data-intensive-applications/foundation-ft/#\u5176\u4ed6\u8981\u6ce8\u610f\u7684\u5730\u65b9","title":"\u5176\u4ed6\u8981\u6ce8\u610f\u7684\u5730\u65b9","text":"\u4f60\u5f88\u96e3\u4e00\u773c\u770b\u51fa\u9019\u500b\u61c9\u7528\u7a0b\u5f0f\u6216\u8005\u7a0b\u5f0f\u78bc\u6703\u9762\u81e8\u7af6\u8cfd\u72c0\u6cc1\uff0c\u6216\u8005\u78ba\u5b9a\u7576\u8cc7\u6599\u5eab\u9054\u6210\u7279\u5b9a\u7b49\u7d1a\u7684\u4e00\u81f4\u6027\u6642\uff0c\u8a72\u61c9\u7528\u7a0b\u5f0f\u6216\u7a0b\u5f0f\u78bc\u5c31\u53ef\u4ee5\u5b89\u5168\u5730\u88ab\u57f7\u884c\u3002\u6240\u4ee5\u6211\u5011\u9664\u4e86\u61c9\u76e1\u53ef\u80fd\u601d\u8003\u6240\u6709\u80fd\u767c\u751f\u7684\u72c0\u6cc1\uff0c\u9084\u8981\u505a\u597d\u5145\u5206\u7684\u6e2c\u8a66\u4f86\u6eff\u8db3\u9019\u4e9b\u72c0\u6cc1\uff08\u96d6\u7136\u5be6\u73fe\u9019\u4e9b\u6e2c\u8a66\u662f\u56f0\u96e3\u7684\uff09\u3002
\u5373\u4f7f\u8cc7\u6599\u5eab\u5ba3\u7a31\u4ed6\u80fd\u9054\u6210\u67d0\u4e9b\u6548\u679c\uff0c\u5927\u90e8\u5206\u60c5\u6cc1\u4f60\u4ecd\u9700\u8981\u5728\u4f7f\u7528\u524d\u505a\u597d\u6e2c\u8a66\uff0c\u56e0\u70ba\u4f60\u7684\u60c5\u6cc1\u5f88\u53ef\u80fd\u4e0d\u662f\u8cc7\u6599\u5eab\u8a2d\u8a08\u8005\u5728\u958b\u767c\u6642\u8003\u616e\u7684\u72c0\u6cc1\u3002 \u907a\u61be\u7684\u662f\uff0c\u4e26\u4e0d\u662f\u6240\u6709\u8cc7\u6599\u5eab\u8a2d\u8a08\u8005\u90fd\u6e05\u695a\u66b8\u89e3\u9019\u4e9b\u4e00\u81f4\u6027\u7684\u7b49\u7d1a\u5340\u5206\u300267
\u6211\u5011\u8a72\u600e\u9ebc\u8003\u616e\u4ea4\u6613\u6a5f\u5236
\u4f7f\u7528\u4ea4\u6613\u6a5f\u5236\u4f86\u4fdd\u6301\u8cc7\u6599\u7684\u4e00\u81f4\u6027\u6703\u5e36\u4f86\u6548\u80fd\u7684\u5f71\u97ff\u3002\u8207\u5176\u8003\u616e\u6548\u80fd\u800c\u62d2\u7d55\u4f7f\u7528\uff0c\u4e0d\u5982\u5728\u8a2d\u8a08\u61c9\u7528\u7a0b\u5f0f\u6642\u907f\u514d\u300c\u904e\u5ea6\u300d\u4f7f\u7528\u4ea4\u6613\u6a5f\u5236\u3002
\u9019\u6642\uff0c\u5c0d\u61c9\u7528\u7a0b\u5f0f\u8a2d\u8a08\u8005\u4f86\u8aaa\uff0c\u5c31\u80fd\u5927\u91cf\u964d\u4f4e\u6642\u5e38\u8981\u8003\u616e\u7af6\u8cfd\u72c0\u6cc1\u6240\u6d88\u8017\u7684\u5de5\u6642\u548c\u932f\u8aa4\u3002
\u2014\u2014 Spanner\uff1aGoogle \u7684\u5168\u7403\u5206\u6563\u5f0f\u8cc7\u6599\u5eab\uff082012\uff09
"},{"location":"feedback/designing-data-intensive-applications/foundation-ft/#\u4fee\u5fa9\u5beb\u5165\u885d\u7a81","title":"\u4fee\u5fa9\u5beb\u5165\u885d\u7a81","text":"\u4e0d\u8ad6\u54ea\u4e00\u7a2e\u4e00\u81f4\u6027\uff08\u5c31\u7b97\u662f\u5b8c\u5168\u7dda\u6027\uff09\u90fd\u6703\u9020\u6210\u8cc7\u6599\u7684\u8907\u5beb\uff08\u5728\u4e0d\u9000\u56de\u4ea4\u6613\u7684\u524d\u63d0\u4e0b\uff09\uff0c \u6709\u4e00\u500b\u7814\u7a76\u9818\u57df\u5c31\u662f\u5728\u5c08\u9580\u8a0e\u8ad6\u600e\u9ebc\u6574\u5408\u9019\u4e9b\u885d\u7a81\u3002\u4f8b\u5982\u540c\u6642\u4fee\u6539\u7dad\u57fa\u767e\u79d1\u7684\u8cc7\u8a0a\uff0c \u5169\u500b\u4eba\u5982\u679c\u90fd\u6539\u540c\u4e00\u500b\u6bb5\u843d\uff0c\u7b2c\u4e8c\u500b\u63d0\u4ea4\u7684\u5f88\u53ef\u80fd\u5c31\u6703\u628a\u7b2c\u4e00\u500b\u63d0\u4ea4\u7684\u66f4\u6539\u8986\u84cb\u6389\u3002
\u9019\u72c0\u6cc1\u5c24\u5176\u5bb9\u6613\u767c\u751f\u5728\u591a\u53f0\u8cc7\u6599\u5eab\u7684\u53e2\u96c6\u4e4b\u4e0b\uff0c\u7d30\u7bc0\u6211\u5011\u5c31\u7559\u5230\u8cc7\u6599\u5eab\u8907\u88fd\uff08replicated\uff09\u518d\u4f86\u8a0e\u8ad6\u3002 \u4e0d\u904e\u9019\u88e1\u63d0\u4e00\u4e0b\uff0c\u5728\u4e00\u4e9b\u7c21\u55ae\u7684\u8cc7\u6599\u578b\u5225\u662f\u53ef\u4ee5\u9054\u5230\u6574\u5408\u591a\u500b\u4fee\u6539\u7684\uff0c\u4f8b\u5982\uff1a
\u4f60\u7684\u8cc7\u6599\u5eab\u8981\u5be6\u4f5c\u54ea\u4e9b\u6771\u897f\uff0c\u624d\u80fd\u907f\u514d\u54ea\u4e9b\u72c0\u6cc1\u3002\u5be6\u969b\u4e0a\uff0c\u8cc7\u6599\u5eab\u5728\u5be6\u4f5c\u6642\u662f\u6703\u628a\u5404\u7a2e\u6f14\u7b97\u6cd5\u6574\u5408\u518d\u4e00\u8d77\u7684\uff01
Methods Dirty-read Dirty-write Read Skew Write Skew \u8a3b \u4e0d\u80fd\u540c\u6642\u5beb\u5165\u7684\u9396 X O X X - \u63d0\u4ea4\u5f8c\u518d\u63a8\u9032\u8cc7\u6599\u5eab O X X X - MVCC / DCC / OCC \u25b3 \u25b3 O X - \u5be6\u969b\u5e8f\u5217\u5316 O O O O \u8017\u6642\u7684\u4ea4\u6613\u6703\u7279\u6b8a\u8655\u7406 2PL \u25b3 O \u25b3 O - SSI \u25b3 \u25b3 O O -/\u25b3 \u4ee3\u8868\u96d6\u7136\u53ef\u4ee5\u505a\u5230\u907f\u514d\u8a72\u7af6\u8cfd\u72c0\u6cc1\uff0c\u4f46\u901a\u5e38\u6703\u7528\u66f4\u7c21\u55ae\u7684\u65b9\u5f0f\u53bb\u505a\uff0c\u4f8b\u5982 dirty-write \u6703\u7528\u9396\u4f86\u505a\u3002 \u4e0a\u9762\u7684\u8868\u683c\u662f\u6211\u81ea\u5df1\u6d88\u5316\u5f8c\u5f97\u51fa\u7684\u7d50\u8ad6\uff0c\u6709\u932f\u6b61\u8fce\u7cfe\u6b63\uff01
https://www.microsoft.com/en-us/research/wp-content/uploads/2016/02/tr-95-51.pdf \u21a9
http://pmg.csail.mit.edu/papers/adya-phd.pdf \u21a9
http://arxiv.org/pdf/1302.0309.pdf \u21a9
http://pmg.csail.mit.edu/papers/adya-phd.pdf \u21a9
http://arxiv.org/pdf/1302.0309.pdf \u21a9
https://www.microsoft.com/en-us/research/wp-content/uploads/2016/02/tr-95-51.pdf \u21a9
http://arxiv.org/pdf/1302.0309.pdf \u21a9
\u5982\u4f55\u5efa\u7acb\u4e00\u500b\u53ef\u4f9b\u5feb\u901f\u641c\u5c0b\u7684\u8cc7\u6599\u5eab\u3002
HackMD \u5831\u544a\u6587\u672c
\u4e0a\u4e00\u6b21\u63d0\u5230\u4e86\u5728\u61c9\u7528\u7a0b\u5f0f\u4e2d\uff0c\u4e0d\u540c\u7684\u5546\u52d9\u908f\u8f2f\u6703\u628a\u8cc7\u6599\u8f49\u63db\u6210\u4e0d\u540c\u7684\u8cc7\u6599\u6a21\u578b\u3002
\u9019\u6b21\u6211\u5011\u6703\u8a0e\u8ad6\u8cc7\u6599\u5eab\u5982\u4f55\u900f\u904e\u7d22\u5f15\u5feb\u901f\u5f9e\u6a94\u6848\u4e2d\u627e\u5230\u6307\u5b9a\u7684\u8cc7\u6599\uff0c\u4f8b\u5982\u73fe\u5728\u6709\u4e00\u842c\u7b46\u4f7f\u7528\u8005\u8cc7\u6599\uff0c \u6211\u60f3\u8981\u5feb\u901f\u627e\u5230\u4f7f\u7528\u8005 123\uff0c\u4e0d\u9700\u8981\u904d\u6b77 10000 \u7b46\u8cc7\u6599\uff0c\u53ef\u80fd\u627e\u500b\u4e09\u4e94\u6b21\u5c31\u627e\u5230\u4e86\u3002
\u5728\u958b\u59cb\u8b1b Index \u524d\uff0c\u6211\u5011\u53ef\u4ee5\u5148\u770b\u4e00\u4e0b\u4e00\u500b\u55ae\u7d14\u7528 bash
\u5efa\u7acb\u7684\u8cc7\u6599\u5eab\uff0c\u4e26\u767c\u73fe\u5176\u5b58\u5728\u7684\u554f\u984c\uff1a
db_set () {\n echo \"$1,$2\" >> database\n}\n\ndb_get () {\n grep \"^$1,\" database | sed -e \"s/^$1,//\" | tail -n 1\n}\n
\u53ef\u4ee5\u770b\u5230\u9019\u500b\u8cc7\u6599\u5eab\u5728\u5beb\u5165\u6642\uff0c\u64c1\u6709\u8d85\u9ad8\u6548\u80fd\uff0c\u751a\u81f3\u53ef\u4ee5\u8aaa\u4e0d\u6703\u518d\u6709\u6bd4\u4ed6\u66f4\u6709\u6548\u7387\uff08\u8edf\u9ad4\u9762\uff09\u7684\u5132\u5b58\u65b9\u5f0f\u4e86\u3002 \u9019\u7a2e\u5132\u5b58\u65b9\u5f0f\u7a31\u70ba log
\uff0c\u9644\u52a0\uff08append\uff09\u6587\u5b57\u81f3\u6a94\u6848\u4e2d\u3002\u9019\u7a2e\u65b9\u5f0f\u4e0d\u6703\u8003\u616e\u4e4b\u524d\u6709\u6c92\u6709\u5132\u5b58\u904e\u8a72\u8cc7\u6599\uff0c \u800c\u662f\u76f4\u63a5\u65b0\u589e\u81f3\u6a94\u6848\u5c3e\u8655\u3002\u6240\u4ee5\u4e26\u4e0d\u6703\u6e05\u9664\u6b77\u53f2\u7d00\u9304\u3002
Info
\u9019\u500b\u65b9\u5f0f\u4e26\u672a\u8003\u616e\u8a31\u591a\u554f\u984c\uff0c\u4f8b\u5982\uff1a\u591a\u5de5\u8655\u7406\u3001\u6e05\u9664\u6b77\u53f2\u7d00\u9304\u3001\u5bb9\u932f\u3001\u8cc7\u6599\u6bc0\u640d
\u7136\u800c\uff0c\u7576\u4ed6\u8b80\u53d6\u6642\uff0c\u537b\u9700\u8981\u628a\u6240\u6709\u6587\u4ef6\u90fd\u8b80\u904e\u4e00\u904d\u3002\u7576\u8cc7\u6599\u9577\u5169\u500d\u6642\uff0c\u53ef\u4ee5\u9810\u671f\u4ed6\u9700\u8981\u57f7\u884c\u7684\u6642\u9593\u4e5f\u6703\u63d0\u5347\u81f3\u5169\u500d\u4ee5\u4e0a\u3002 \u70ba\u4e86\u89e3\u6c7a\u9019\u554f\u984c\uff0cIndex \u51fa\u73fe\u4e86\u3002
"},{"location":"feedback/designing-data-intensive-applications/foundation-index/#\u7d22\u5f15\u662f\u4ec0\u9ebc","title":"\u7d22\u5f15\u662f\u4ec0\u9ebc","text":"\u7d22\u5f15\uff08Index\uff09\u901a\u5e38\u662f\u5728\u4e3b\u8981\u8cc7\u6599\u4e0b\u984d\u5916\u5efa\u7acb\u7684 metadata\uff0c\u4e26\u7576\u6709\u8cc7\u6599\u9700\u8981\u300c\u5beb\u5165\u300d\u6642\uff0c\u66f4\u65b0\u9019\u4efd metadata\u3002
\u7531\u6b64\u53ef\u77e5\uff0c\u5728\u63d0\u5347\u300c\u8b80\u53d6\u300d\u6548\u80fd\u7684\u540c\u6642\uff0c\u4fbf\u9700\u8981\u72a7\u7272\u90e8\u5206\u300c\u5beb\u5165\u300d\u6548\u80fd\u3002
Info
\u5de5\u5177\u7684\u9078\u64c7\u5e38\u5e38\u90fd\u662f\u5728\u505a\u6b0a\u8861\uff0c\u82e5\u60c5\u5883\u9700\u8981\u9ad8\u6548\u80fd\u7684\u8b80\u53d6\uff0c\u90a3\u6216\u8a31\u5c31\u61c9\u8a72\u8003\u616e\u6dfb\u52a0 index\u3002
\u4ee5\u4e0b\u7684\u7d22\u5f15\u90fd\u4ee3\u8868 key-value \u4e2d\u7684 key \u6216\u8005\u8aaa RMDBS \u4e2d\u7684\u4e3b\u7d22\u5f15\uff08primary index\uff09
\u5927\u5bb6\u53ef\u80fd\u5f88\u5e38\u4f7f\u7528\u5230\u7d22\u5f15\uff0c\u4f8b\u5982\uff1a user \u8868\u683c\u4e2d\u5e74\u7d00\u5c0f\u65bc 30 \u6b72\u4e14\u6708\u6536\u5165\u5927\u65bc 500 \u584a\u7684 user\u3002 \u6211\u5011\u8a2d\u8a08\u4e86\u5169\u500b\u7d22\u5f15\u5206\u5225\u662f\u5e74\u9f61\u548c\u6536\u5165\uff0c\u4f46
\u7d22\u5f15\u7684\u610f\u7fa9\u901a\u5e38\u662f\u8b93\u641c\u5c0b\u7684\u6b21\u6578\u5f9e n
\uff08\u8cc7\u6599\u7e3d\u6578\uff0c\u4f8b\u5982\u4e00\u767e\u842c\uff09\u8b8a\u6210 ln(n)
\uff08\u641c\u5c0b\u6b21\u6578\uff0c\u4f8b\u5982\u4e09\u6b21\uff09\uff0c \u5728\u627e\u5230\u7279\u5b9a\u7684\u8cc7\u6599\uff08\u7fa4\uff09\u4e4b\u5f8c\u4fbf\u7121\u6cd5\u4f7f\u7528 index\uff0c\u56e0\u70ba index \u8868\u683c\u7684\u5efa\u7acb\u90fd\u662f\u4ee5\u5168\u90e8\u8cc7\u6599\u70ba\u57fa\u790e\u3002
Info
\u7576\u7136\uff0c\u6709\u4e9b\u6a39\u72c0\u7d50\u69cb\uff08R-Tree\uff09\u5141\u8a31\u591a\u4f4d\u5143\u7684\u641c\u5c0b\uff0c\u4e0b\u9762\u6703\u505a\u4ecb\u7d39\u3002
[1,5,10]\n [1,3,5] [6,8,10]\n[1,2,3] [4,5] [6,7,8] [9,10]\n
\u4f8b\u5982\u4e0a\u8ff0\uff0c\u627e\u5230 1~3 \u4e4b\u5f8c\uff0c\u82e5\u9700\u8981\u5728\u505a filter\uff0c\u5247\u9700\u8981\u904d\u6b77\u8cc7\u6599\u624d\u80fd\u9054\u5230\u76ee\u7684\u3002
"},{"location":"feedback/designing-data-intensive-applications/foundation-index/#\u6563\u5217\u5f0f\u7d22\u5f15","title":"\u6563\u5217\u5f0f\u7d22\u5f15","text":"\u4ee5 in-memory \u7684\u65b9\u5f0f\u7d00\u9304 key \u4f4d\u7f6e\uff1a
key offset 1 411 42 3931,{\"a\":\"b\"}\n2,{\"c\":\"d\"}\n...\n42,{\"e\":\"f\"}\n1,{\"g\":\"h\"}\n
\u6bcf\u6b21\u66f4\u65b0\u6216\u65b0\u589e key-value \u6642\uff0c\u540c\u6642\u66f4\u65b0\u8a72 hash index\u3002
"},{"location":"feedback/designing-data-intensive-applications/foundation-index/#\u554f\u984c","title":"\u554f\u984c","text":"\u7576\u6a94\u6848\u9054\u5230\u4e00\u5b9a\u5927\u5c0f\u6642\uff1a
Info
\u6b64\u884c\u70ba\u662f\u5728\u80cc\u666f\u57f7\u884c\uff0c\u82e5\u57f7\u884c\u5230\u4e00\u534a\u6709\u8b80\u5beb\u7684\u8acb\u6c42\uff0c\u6703\u7e7c\u7e8c\u4f7f\u7528\u820a\u7684 segment\uff0c \u6700\u5f8c\u58d3\u7e2e\u6574\u5408\u5b8c\u7562\u5f8c\u624d\u4f7f\u7528\u65b0\u7684 segment\uff0c\u4e26\u628a\u820a\u7684 segment \u522a\u9664\u3002
\u641c\u5c0b\u6642\uff0c\u82e5\u5728 segment 1 \u4e2d\u7684 hash index \u627e\u4e0d\u5230\u8a72 key\uff0c\u5c31\u5f80\u4e0b\u4e00\u500b segment \u627e\u3002
"},{"location":"feedback/designing-data-intensive-applications/foundation-index/#\u7f3a\u9ede","title":"\u7f3a\u9ede","text":"animal
\u70ba\u958b\u982d\u7684\u9375\u503c\u6578\u91cf\u3002\u8a72\u67b6\u69cb\u539f\u5148\u7a31 Log-Structured Merge-Tree\uff08LSM-Tree\uff09\uff0c \u5f8c\u4fee\u6b63\u90e8\u5206\u884c\u70ba\u5f8c\u65bc \u8ad6\u6587\u4e2d\uff0c \u91cd\u65b0\u547d\u540d\u70ba\u6392\u5e8f\u5b57\u4e32\u8868\uff08 Sorted String Tables\uff0cSSTables\uff09\u3002
\u5982\u540c\u4e0a\u8ff0\u7684 Hash index\uff0c\u6703\u628a index \u5206\u6210\u597d\u5e7e\u500b segment \u6a94\u6848\u3002 SSTable \u5728\u5206\u6210\u4e0d\u540c segment \u7684\u540c\u6642\uff0c\u6703\u78ba\u4fdd\u6bcf\u500b segment \u7684 key \u662f\u7368\u7acb\uff08non-overlapping\uff09\u4e14\u6392\u5e8f\uff08sorted\uff09\u7684\u3002 \u9019\u6a23\u80fd\u78ba\u4fdd\u4ee5\u4e0b\u7279\u6027\uff1a
\u5728\u505a merge \u7684\u904e\u7a0b\uff0c\u53ef\u4ee5\u975e\u5e38\u6709\u6548\u7387\u4e14\u7701\u7a7a\u9593\uff1a
\u5132\u5b58 index \u6642\uff0c\u4e0d\u518d\u9700\u8981\u628a\u6bcf\u500b key \u90fd\u5b58\u8d77\u4f86\uff0c\u56e0\u70ba\u662f\u6392\u5e8f\u904e\u5f8c\u7684\uff0c\u5b58\u7279\u5b9a\u5e7e\u500b key \u518d\u5f9e\u4e2d\u9593\u627e\u5c31\u597d\uff1a | key | offset | | --- | ------ | | 1 | 0 | | 42 | 393 |
\u7576\u6211\u8981\u627e key 30
\u7684\u8cc7\u6599\u6642\uff0c\u53ea\u9700\u8981\u627e 0 \u5230 393 \u5373\u53ef\u3002
\u56e0\u70ba\u5132\u5b58\u7684 index \u662f\u758f\u6563\uff08sparse\uff09\u7684\uff0c\u6240\u4ee5\u5728 key \u548c key \u4e4b\u9593\u7684\u8cc7\u6599\u53ef\u4ee5\u9032\u884c\u58d3\u7e2e\uff1a \u4ee5\u4e0a\u8ff0\u7684\u8868\u683c\u70ba\u4f8b\uff0ckey 1
\u5230 key 42
\u4e4b\u9593\u7684\u8cc7\u6599\u9032\u884c\u58d3\u7e2e\uff08compress\uff09\u3002
\u7531\u4e0a\u8ff0\u7684\u4e00\u4e9b\u7279\u6027\uff0c\u53ef\u4ee5\u7e3d\u7d50 SSTables \u5728\u5be6\u4f5c\u4e0a\u7684\u7b56\u7565\u5982\u4e0b\uff1a
\u7576\u6a5f\u5668\u58de\u6389\u6642\uff0cin-memory \u7684\u8cc7\u6599\u5c31\u6703\u907a\u5931\uff1f
\u6bcf\u6b21\u65b0\u7684\u5beb\u5165\u9700\u6c42\uff0c\u90fd\u5373\u6642 append \u5230\u4e00\u500b\u7279\u6b8a\u6a94\u6848\u4e2d\uff0c\u4e14\u4e0d\u9700\u6392\u5e8f\uff0c \u6b64\u6a94\u6848\u6bcf\u6b21 in-memory \u88ab\u6e05\u7a7a\u6642\uff0c\u90fd\u6703\u8ddf\u8457\u6e05\u7a7a\u3002\u6b64\u6a94\u6848\u7684\u529f\u80fd\u53ea\u7528\u4f86\u7576\u6a5f\u5668\u91cd\u555f\u6642\uff0c \u91cd\u65b0\u653e\u9032 in-memory \u7684\u6a39\u72c0\u7d50\u69cb\u3002
"},{"location":"feedback/designing-data-intensive-applications/foundation-index/#sstable-\u61c9\u7528","title":"SSTable \u61c9\u7528","text":"Info
\u96d6\u7136 Lucene \u662f\u63d0\u4f9b\u5168\u6587\u6aa2\u7d22\u7684\u5f15\u64ce\uff0c\u5168\u6587\u6aa2\u7d22\u6bd4\u8d77 key-value \u7684\u6aa2\u7d22\u8981\u66f4\u70ba\u8907\u96dc\uff0c \u4f46\u5176\u908f\u8f2f\u985e\u4f3c\uff1a\u4ee5 search words \u4f5c\u70ba key\uff0c\u6587\u7ae0\u7684 ID \u4f5c\u70ba value\u3002
"},{"location":"feedback/designing-data-intensive-applications/foundation-index/#\u88dc\u5145","title":"\u88dc\u5145","text":"\u66f8\u4e2d\u63d0\u51fa\u5169\u7a2e\u65b9\u5f0f\uff0c\u6709\u8208\u8da3\u53ef\u4ee5\u5230\u9019\u88e1\u67e5\u770b\u66f4\u591a\u7b56\u7565\u3002
\u66f4\u591a\u8a73\u60c5\u53ef\u4ee5\u53c3\u8003 LevelDB \u7684\u5be6\u4f5c\u6587\u4ef6\u3002
"},{"location":"feedback/designing-data-intensive-applications/foundation-index/#b-tree","title":"B-Tree","text":"1970 \u5e74\u5c31\u8a2d\u8a08\u51fa\u7684\u6f14\u7b97\u6cd5\uff0c\u4e26\u88ab\u61c9\u7528\u65bc\u8cc7\u6599\u5eab\u4e2d\u3002\u800c\u9019\u4e5f\u662f\u8fd1\u4ee3\u8cc7\u6599\u5eab\u5728\u505a Index \u6642\u6700\u5e38\u4f7f\u7528\u7684\u6f14\u7b97\u6cd5\u3002
\u4e0a\u8ff0\u63d0\u5230\u7684\u65b9\u6cd5\u4e26\u4e0d\u6703\u53bb\u66f4\u65b0\u820a\u6709\u8cc7\u6599\uff0c\u53cd\u4e4b B-Tree \u5247\u6703\u53bb\u66f4\u65b0\u3002 \u4e5f\u5c31\u662f\u4ed6\u4e0d\u9700\u8981\u505a\u58d3\u7e2e\u548c\u6574\u5408\u7684\u52d5\u4f5c
\u628a\u8cc7\u6599\u5340\u5206\u6210\u591a\u500b\u5c0f\u584a\uff08blocks/page\uff09
ref \u6578\u91cf\u4ee3\u8868 branching factor\uff0c\u4ee5\u4e0a\u5716\u70ba\u4f8b\u5373\u662f 6\uff0c\u901a\u5e38\u6578\u91cf\u70ba\u6578\u767e\u3002 \u6bcf\u584a 4 KB\uff0cbranching factor 500\uff0c\u5171 4 \u5c64\uff0c\u53ef\u4ee5\u5b58 256 TB \u7684\u8cc7\u6599\u91cf
\u65b0\u589e\u6216\u7de8\u8f2f\u8cc7\u8a0a\u6642\uff0c\u76f4\u63a5\u53bb\u5230\u8a72 val
\u66f4\u65b0\u5373\u53ef\u3002 \u7576\u8d85\u904e branching factor \u7684\u5927\u5c0f\u6642\uff0c\u5c31\u6703\u5c0d\u534a\u62c6\u958b\u5f80\u4e0b\u4e00\u5c64\u653e\uff1a
\u7531\u4e0a\u8ff0\u4e5f\u5f88\u6e05\u695a\u53ef\u4ee5\u77e5\u9053\uff0c\u76f8\u6bd4\u65bc Log-Structure \u7684\u65b9\u5f0f\uff0cwrite \u7684\u6548\u7387\u6703\u8f03\u4f4e\u3002
"},{"location":"feedback/designing-data-intensive-applications/foundation-index/#\u5982\u4f55\u589e\u52a0\u7a69\u5b9a\u5ea6","title":"\u5982\u4f55\u589e\u52a0\u7a69\u5b9a\u5ea6","text":"\u7c21\u800c\u8a00\u4e4b\uff0c\u591a\u4e00\u7a2e\u52d5\u4f5c\uff0c\u591a\u4e00\u5c64\u8003\u616e
1970 \u5e74\u5230\u73fe\u5728\uff0c\u4e5f\u505a\u4e86\u5f88\u591a\u512a\u5316\uff1a
\u8cc7\u6599\u5eab\u6548\u80fd\u548c\u61c9\u7528\u7a0b\u5f0f\u7684\u985e\u578b\u6709\u975e\u5e38\u5bc6\u5207\u7684\u95dc\u4fc2\uff0c\u6240\u4ee5\u5217\u51fa\u4e00\u4e9b\u9ede\u53ef\u4ee5\u505a\u53c3\u8003\uff1a
\u7d30\u7bc0\uff1a
\u5f88\u591a\u60c5\u6cc1\u6211\u5011\u6703\u9700\u8981\u589e\u52a0\u9664\u4e86\u4e3b\u8981\u7d22\u5f15\u5916\u7684\u7d22\u5f15\uff0c\u6211\u5011\u7a31\u5176\u70ba \u6b21\u7d1a\u7d22\u5f15 \uff08secondary indexes\uff09\u3002 \u800c\u9019\u985e\u7684 index \u4e0d\u4e00\u5b9a\u9700\u8981 unique\uff0c\u4f8b\u5982\u4e0a\u8ff0\u4f8b\u5b50\u4e2d\u7684\u5e74\u9f61\u6216\u6708\u6536\u5165\u3002
\u9019\u7a2e\u60c5\u6cc1\u6709\u5169\u7a2e\u65b9\u5f0f\u53ef\u4ee5\u89e3\u6c7a\u53ef\u91cd\u8907\u6027\u7684\u7d22\u5f15\u3002
[user-1, user-10]
1_09123-*user data*
\u9664\u6b64\u4e4b\u5916\uff0c\u907f\u514d\u540c\u6b65\u7684\u56f0\u96e3\uff0c\u90fd\u4e0d\u6703\u628a\u5b8c\u6574\u8cc7\u6599\u653e\u5728\u591a\u500b index \u7684 tree \u4e2d\uff0c\u800c\u662f\u5b58\u9032
\u6240\u8b02\u7684\u5806\u7a4d\u6a94\uff08heap file\uff09\u5c31\u662f\u5b58\u653e\u591a\u500b\u76f8\u540c \u6b21\u7d1a\u7d22\u5f15 \u7684\u8cc7\u6599\u7684\u6a94\u6848\u3002
\u9019\u65b9\u6cd5\u4f7f\u7528\u8d77\u4f86\u5f88\u55ae\u7d14\uff0c\u56e0\u70ba\u7576\u6a94\u6848\u6709\u591a\u500b\u8cc7\u6599\u3002 \u4f8b\u5982\u4e0a\u8ff0\u4e2d\u7684 [user-1, user-10]
\uff0c\u5c31\u76f4\u63a5\u4ee5\u4e0b\u5217\u7684\u65b9\u5f0f\u505a\u5132\u5b58
# ID,Name,Year,Salary\n1,John,20,500\n10,Marry,20,550\n
\u800c \u4e3b\u7d22\u5f15 \u7684\u6a39\u72c0\u7d50\u69cb\u4e5f\u662f\u5132\u5b58 \u5806\u7a4d\u6a94 \u7684\u4f4d\u7f6e\u8cc7\u8a0a\u3002\u4f8b\u5982 user-10 \u7684 value \u53ef\u80fd\u5c31\u662f file1-40\uff08\u7b2c 40 \u500b byte \u958b\u59cb\u7b97\u8d77\uff09\u3002\u4f46\u662f\u7576\u8cc7\u6599\u66f4\u65b0\u6642\uff0c\u5c31\u9700\u8981
\u7fa4\u805a\u5f0f\u7d22\u5f15\uff08clustered index\uff09\u985e\u4f3c\u65bc \u4e3b\u7d22\u5f15 \uff0c\u5176\u610f\u7fa9\u4ee3\u8868\u5b58\u653e\u8cc7\u6599\u7684\u7d22\u5f15\u3002 \u7576\u900f\u904e \u6b21\u7d1a\u7d22\u5f15 \u627e\u5230\u7279\u5b9a\u8cc7\u6599\u7684\u7fa4\u805a\u5f0f\u7d22\u5f15\u6642\uff0c\u518d\u5229\u7528\u5176\u627e\u5230\u8cc7\u6599\u3002
\u4ee5 MySQL \u7684 InnoDB \u4f86\u8aaa\uff0c\u6bcf\u500b \u4e3b\u7d22\u5f15 \u5c31\u662f \u7fa4\u805a\u5f0f\u7d22\u5f15\u3002
\u4f46\u662f\u9019\u7a2e\u65b9\u5f0f\u6703\u9700\u8981\uff1a
\u6709\u4e9b\u5be6\u4f5c\uff0c\u6703\u5728 \u6b21\u7d1a\u7d22\u5f15 \u7684\u5730\u65b9\u5b58\u4e9b\u8cc7\u6599\uff08\u7a31\u5176\u70ba covering index\uff09\uff0c\u6709\u4e9b\u5be6\u4f5c\u53ea\u628a\u8cc7\u6599\u5b58\u5728 clustered index\u3002
cover \u4ee3\u8868\u7684\u610f\u601d\u5c31\u662f\uff0c\u96d6\u50c5\u5132\u5b58\u90e8\u5206\u7684\u8907\u5beb\u8cc7\u6599\uff0c\u4ed6\u537b\u53ef\u4ee5 cover \u4e00\u4e9b\u641c\u5c0b\u7d50\u679c\u3002 \u4f46\u662f covering index \u4e5f\u9700\u8981\u82b1\u4e00\u4e9b\u529f\u53bb\u7dad\u6301\u8cc7\u6599\u7684\u4e00\u81f4\u6027\u3002
"},{"location":"feedback/designing-data-intensive-applications/foundation-index/#\u591a\u6b04\u4f4d\u7d22\u5f15","title":"\u591a\u6b04\u4f4d\u7d22\u5f15","text":"\u4e0a\u8ff0\u6709\u63d0\u5230\u6bcf\u6b21 query \u53ea\u6703\u53c3\u8003\u4e00\u500b \u7d22\u5f15 \u3002\u4f46\u662f\u591a\u500b \u7d22\u5f15 \u53bb\u505a\u7be9\u9078\u6703\u5927\u5927\u52a0\u901f\u641c\u5c0b\u7684\u901f\u5ea6\uff0c\u8a72\u600e\u9ebc\u8fa6\uff1f
\u4f8b\u5982\uff1a\u6211\u8981\u641c\u5c0b\u7d93\u7def\u5ea6\u5728 51.5151
122.122122
\u7684\u5546\u5e97\u3002\u82e5\u662f\u4f7f\u7528\u55ae\u4e00\u628a\u7def\u5ea6\u4f5c \u7d22\u5f15 \uff0c \u5247\u53ef\u80fd\u641c\u5c0b\u5230\u6240\u6709\u7d93\u5ea6\u5728 -180~180
\u7bc4\u570d\u5167\u7684\u8cc7\u8a0a\uff0c\u641e\u5f97\u6709 \u7d22\u5f15 \u8ddf\u6c92 \u7d22\u5f15 \u4e00\u6a23\u3002
\u7c21\u55ae\u7684\u65b9\u5f0f\u662f\u4f7f\u7528 concatenated index\uff0c\u4e5f\u5c31\u662f\u628a\u5169\u500b \u7d22\u5f15 \u6574\u5408\u518d\u4e00\u8d77\u3002 \u4f8b\u5982\uff0c\u9700\u8981\u641c\u5c0b\u59d3\u548c\u540d\u4e00\u6a23\u7684\u4f7f\u7528\u8005\uff0c\u641c\u5c0b\u59d3\u548c\u540d\u7684 concatenated index\uff1a\u738b
\u5c0f\u660e
\uff0c \u4f46\u662f\u7576\u641c\u5c0b\u689d\u4ef6\u6539\u6210\u5c0f\u660e
\u738b
\uff1f
\u6bd4\u8d77 concatenated index\uff0c\u66f4\u5e38\u4f7f\u7528\u7684\u65b9\u5f0f\u662f\u91cd\u65b0\u8a2d\u8a08\u4e00\u500b\u5132\u5b58 index \u7684\u6a39\u72c0\u7d50\u69cb\uff1a R-Tree\u3002
\u5176\u4ed6\u53ef\u80fd\u9700\u8981\u591a\u7dad\u5ea6\u7684 \u7d22\u5f15 \u5834\u666f\u6709\uff1a
\u6709\u6642\u8981\u641c\u5c0b\u7684 \u7d22\u5f15 \u662f\u6587\u5b57\uff0c\u800c\u9019\u4e32\u6587\u5b57\u53c8\u662f\u4eba\u985e\u8a9e\u8a00\uff0c\u9019\u6642\u5728\u505a\u641c\u5c0b\u6642\u5c31\u53ef\u80fd\u9700\u8981\u8003\u616e\uff1a
\u5982\u540c \u6392\u5e8f\u5b57\u4e32\u8868 \u6703\u5229\u7528\u7a00\u758f\u7684\u9375\uff08sparse keys\uff09\u53bb\u6e1b\u5c11 Index \u7684\u5132\u5b58\u91cf\uff0c Lucene \u7684\u5168\u6587\u6aa2\u7d22\u8cc7\u6599\u5eab\u4e5f\u6703\u628a\u5b57\u8a5e\u7684\u90e8\u5206\u5b57\u5143\u4f5c\u70ba\u7a00\u758f\u7684\u9375 \uff08\u985e\u4f3c trie \u6a39\u72c0\u7d50\u69cb\uff091\uff0c\u52a0\u901f\u6a21\u7cca\u641c\u5c0b\uff08fuzzy search\uff09\u3002
\u5176\u4ed6\u985e\u578b\u7684 \u6a21\u7cca\u7d22\u5f15 \uff08fuzzy index\uff09\u7684\u6f14\u7b97\u6cd5\u53ef\u80fd\u70ba\u6587\u7ae0\u5206\u985e\u3001\u6a5f\u5668\u5b78\u7fd2\u7b49\u3002
"},{"location":"feedback/designing-data-intensive-applications/foundation-index/#\u5167\u5b58\u8cc7\u6599\u5eab","title":"\u5167\u5b58\u8cc7\u6599\u5eab","text":"\u628a\u8cc7\u6599\u5b58\u9032\u6a94\u6848\uff08filesystem\uff09\u548c\u628a\u8cc7\u6599\u90fd\u5b58\u9032\u5167\u5b58\u8a18\u61b6\u9ad4\uff08RAM\uff09\u6bd4\uff0c\u6709\u5169\u500b\u597d\u8655
\u4f46\u662f\u70ba\u4e86\u89e3\u6c7a filesystem \u5728\u8b80\u5beb\u7684\u6548\u7387\u5e73\u8861\uff0c\u767c\u5c55\u4e86\u5f88\u591a\u6a5f\u5236\uff1aIndex\u3001File \u5927\u5c0f\u548c\u6578\u91cf\u7b49\u7b49\u3002
\u8fd1\u4f86 RAM \u8d8a\u4f86\u8d8a\u4fbf\u5b9c\uff0c\u4e14\u82e5\u8cc7\u6599\u5eab\u4e26\u4e0d\u9700\u8981\u5132\u5b58\u5927\u578b\u8cc7\u6599\uff0c \u9019\u6642\u4fbf\u767c\u5c55\u51fa\u5167\u5b58\u8cc7\u6599\u5eab\uff08in-memory database\uff09\uff0c\u5176\u7a2e\u985e\u5927\u81f4\u5206\u5169\u7a2e\uff1a
\u5167\u5b58\u8cc7\u6599\u5eab\u4e0d\u50c5\u50c5\u56e0\u70ba\u8b80\u53d6\u6642\u4e0d\u63a5\u89f8 filesystem\uff0c\u5176\u5132\u5b58\u7684\u6a94\u6848\u683c\u5f0f\u5df2\u7d93\u7d93\u904e\u89e3\u6790\uff08parse\uff09\uff0c \u964d\u4f4e\u4e86\u89e3\u6790\u6240\u9700\u6d88\u8017\u7684\u6548\u80fd\u3002\u9019\u540c\u6642\u4e5f\u8b93\u5167\u5b58\u8cc7\u6599\u5eab\u5141\u8a31\u66f4\u591a\u7a2e\u985e\u7684\u5132\u5b58\uff0c\u4f8b\u5982\u4f47\u5217\uff08queue\uff09\u6216\u53e2\u96c6\uff08set\uff09\u3002
\u9664\u6b64\u4e4b\u5916\uff0c\u8fd1\u4f86\u4e5f\u6709\u9700\u591a\u7814\u7a76\uff0c\u8b93\u5167\u5b58\u8cc7\u6599\u5eab\u4e0d\u518d\u53d7\u9650\u65bc\u5167\u5b58\u8a18\u61b6\u9ad4\u7684\u5927\u5c0f\uff0c\u7576\u5927\u5c0f\u8d85\u51fa\u5176\u8ca0\u8377\u6642\uff0c \u8cc7\u6599\u5eab\u6703\u628a\u6700\u4e45\u6c92\u5b58\u53d6\u7684\u8cc7\u6599\u653e\u9032 filesystem \u4e2d\uff0c\u985e\u4f3c OS \u5728\u64cd\u4f5c\u5927\u578b\u8cc7\u6599\u6642\u7684\u505a\u6cd5\uff0c \u7136\u800c\u537b\u66f4\u70ba\u7cbe\u6e96\uff0c\u800c\u975e\u4e00\u6b21\u50c5\u80fd\u63a7\u5236\u4e00\u7d44\u8a18\u61b6\u9ad4\u5340\u584a\u3002
http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.16.652 \u21a9
\u958b\u767c\u61c9\u7528\u7a0b\u5f0f\u6642\uff0c\u6211\u5011\u6240\u9078\u64c7\u7684\u8cc7\u6599\u6a21\u578b\u7a2e\u985e\uff0c\u6c7a\u5b9a\u6211\u5011\u5982\u4f55\u770b\u5f85\u554f\u984c\u3002
HackMD \u5831\u544a
\u5927\u81f4\u4e0a\u6211\u5011\u5c08\u6ce8\u65bc\u4ee5\u4e0b\u56db\u7a2e\u6a21\u578b\uff0c\u6587\u672b\u6703\u5728\u63d0\u5230\u5176\u4ed6\u6a21\u578b\u3002
\u4e00\u958b\u59cb\u8cc7\u6599\u5132\u5b58\u50c5\u4ee5 Hierarchical Tree \u7684\u5f62\u5f0f\u5132\u5b58\u8cc7\u6599\uff0c \u4f46\u662f\u7576\u9700\u8981\u8003\u616e\u5230\u591a\u5c0d\u591a\uff08many-to-many\uff09\u7684\u95dc\u4fc2\u6642\uff0c\u5c31\u958b\u59cb\u51fa\u73fe\u56f0\u5883\u3002
\u800c\u5f8c\uff0c\u7576\u95dc\u806f\u5f0f\u6a21\u578b\u4e0d\u518d\u6eff\u8db3\u9700\u6c42\uff0c\u4f8b\u5982\uff1a\u8cc7\u6599\u683c\u5f0f\u4e0d\u60f3\u8981\u591a\u505a\u4e00\u5c64\u8f49\u63db\u3001\u7121\u6cd5\u5feb\u901f\u505a scaling \u7b49\u7b49\u6642\uff0c\u4fbf\u76f8\u7e7c\u767c\u5c55\u51fa\u5176\u4ed6\u6a21\u578b\u3002
"},{"location":"feedback/designing-data-intensive-applications/foundation-model/#\u95dc\u4fc2","title":"\u95dc\u4fc2","text":"\u8cc7\u6599\u548c\u8cc7\u6599\u4e4b\u9593\u7684\u95dc\u4fc2\uff0c\u6703\u6c7a\u5b9a\u4f60\u61c9\u8a72\u7528\u54ea\u7a2e\u6a21\u578b\u3002\u6240\u4ee5\u6211\u5011\u5148\u4f86\u68b3\u7406\u4e00\u4e0b\u8cc7\u6599\u5eab\u4e2d\u6703\u6709\u7684\u95dc\u4fc2\u5427\uff01
"},{"location":"feedback/designing-data-intensive-applications/foundation-model/#\u4e00\u5c0d\u591a","title":"\u4e00\u5c0d\u591a","text":"\u9019\u7a2e\u72c0\u6cc1\u5176\u5be6\u5f88\u9069\u5408\u968e\u5c64\u5f0f\u6a39\u72c0\u7d50\u69cb\u548c\u6587\u4ef6\u5f0f\u6a21\u578b\u3002
"},{"location":"feedback/designing-data-intensive-applications/foundation-model/#\u591a\u5c0d\u4e00\u591a","title":"\u591a\u5c0d\u4e00\uff08\u591a\uff09","text":"\u300c\u591a\u5c0d\u4e00\u300d\u548c\u300c\u591a\u5c0d\u591a\u300d\u5f88\u50cf\uff0c\u82e5\u8cbc\u6587\u53ea\u770b\u4e00\u500b\uff0c\u5c31\u662f\u300c\u591a\u5c0d\u4e00\u300d\u3002
\u968e\u5c64\u5f0f\u6a39\u72c0\u7d50\u69cb\u548c\u6587\u4ef6\u5f0f\u7d50\u69cb\u5728\u9019\u7a2e\u72c0\u6cc1\u4e0b\u96e3\u4ee5\u5132\u5b58\uff0c\u4e14\u96e3\u4ee5 query\u3002\u5be6\u969b\u5c31\u6703\u9700\u8981\u4f7f\u7528\u8ff4\u5708\u4f86\u64b0\u5beb\u3002
"},{"location":"feedback/designing-data-intensive-applications/foundation-model/#\u968e\u5c64\u5f0f\u6a39\u72c0\u7d50\u69cb","title":"\u968e\u5c64\u5f0f\u6a39\u72c0\u7d50\u69cb","text":"Conference on Data System Language(CODASYL)\u662f\u65e9\u671f\u767c\u5c55\u7684\u968e\u5c64\u5f0f\u6a39\u72c0\u7d50\u69cb\u641c\u5c0b\u8a9e\u8a00\u3002
\u6bcf\u500b\u8a3b\u518a\u8005\u7576\u4f5c\u4e00\u500b\u6a39\uff0c\u8a3b\u518a\u8005\u6703\u6709\u5e74\u7d00\u548c\u8077\u696d\u3002\u4e0b\u5217\u7a0b\u5f0f\u78bc\u7684\u76ee\u7684\u662f\u627e\u5230\u300c\u5e74\u8f15\u7684\u8a3b\u518a\u8005\u7684\u8077\u696d\u300d\u3002
MOVE 'ACCOUNTANT' TO TITLE IN JOB.\nFIND FIRST JOB USING TITLE.\n IF NOT-FOUND GO TO EXIT.\n FIND FIRST EMP WITHIN ASSIGN.\n IF END-OF-SET GO TO 0.\n GET EMP.\n IF EMP.BIRTHYR I 1950 GO TO N.\n FIND OWNER WITHIN WORKS-IN.\n GET DEPT.\n ...\n FIND NEXT EMP WITHIN ASSIGN.\n GO TO M.\n FIND NEXT JOB USING TITLE.\n GO TO L.\nEXIT.\n
Quote
RH Katz.: \"Decompiling CODASYL DML into Relational Queries.\", 1982
\u7531\u6b64\u53ef\u4ee5\u770b\u51fa\uff0c\u968e\u5c64\u5f0f\u6a39\u72c0\u7d50\u69cb\u5728\u505a\u9019\u7a2e\u8ca0\u8cac\u7684\u95dc\u806f\u6027\u7684\u641c\u5c0b\uff0c\u5e38\u5e38\u611b\u83ab\u80fd\u52a9\u3002
"},{"location":"feedback/designing-data-intensive-applications/foundation-model/#\u95dc\u806f\u5f0f\u6a21\u578b","title":"\u95dc\u806f\u5f0f\u6a21\u578b","text":"Edgar Codd \u5728 1970 \u7684 A Relational Model of Data for Large Shared Data Banks\u8ad6\u6587\u4e2d\u63d0\u5230\uff0c\u95dc\u806f\u5f0f\u6a21\u578b\u7684\u5b9a\u7fa9\uff1a
\u56e0\u70ba\u95dc\u4fc2\u88ab\u62bd\u51fa\u4f86\u4e86\uff0c\u4e0d\u518d\u6709\u8907\u96dc\u7684\u8def\u5f91\u9700\u8981\u53bb\u63a2\u7d22\u3002\u53cd\u4e4b\uff0c\u56e0\u70ba\u8cc7\u6599\u90fd\u88ab\u5b58\u653e\u5728\u540c\u4e00\u95dc\u4fc2\u4e0b\uff0c\u7be9\u9078\uff08WHERE
\uff09\u548c\u8abf\u6574\u9806\u5e8f\uff08SORT BY
\uff09\u5c31\u8b8a\u5f97\u5f88\u55ae\u7d14\u3002
\u9664\u6b64\u4e4b\u5916\uff0c\u900f\u904e\u806f\u5408\uff08JOIN
\uff09\u53ef\u4ee5\u628a\u4e0d\u540c\u7684\u95dc\u4fc2\u6574\u5408\u5728\u4e00\u8d77\u3002\u9664\u4e86\u89e3\u6c7a\u591a\u5c0d\u591a\u7684\u95dc\u4fc2\u4e4b\u5916\uff0c\u4e5f\u53ef\u4ee5\u907f\u514d\u61c9\u7528\u7a0b\u5f0f\u53bb\u8003\u616e\u4e00\u81f4\u6027\uff08consistency\uff09\u3002\u4f8b\u5982\uff1a
\u6bcf\u500b\u4f7f\u7528\u8005\u5c0d\u61c9\u4e00\u500b\u4ed6\u73fe\u5728\u7684\u8077\u7a31\uff0c\u5728\u95dc\u806f\u5f0f\u4e2d\u662f\u900f\u904e\u4e0d\u540c\u95dc\u4fc2\uff08table\uff09\u7684 ID \u53bb\u505a\u9023\u7d50\uff0c\u6240\u4ee5\u8077\u7a31\u6539\u8b8a\u53ea\u9700\u8981\u8abf\u6574\u8077\u7a31\u7684\u95dc\u4fc2\u88e1\u7684\u6587\u5b57\u5c31\u53ef\u4ee5\u6539\u8b8a\u6240\u6709\u548c\u5176\u5c0d\u61c9\u7684\u4f7f\u7528\u8005\u8077\u7a31\u3002
"},{"location":"feedback/designing-data-intensive-applications/foundation-model/#\u67e5\u8a62\u6700\u4f73\u5316\u5668","title":"\u67e5\u8a62\u6700\u4f73\u5316\u5668","text":"\u6211\u5011\u524d\u9762\u770b\u5230\u968e\u5c64\u5f0f\u7684\u6a39\u72c0\u7d50\u69cb\u5728\u505a\u641c\u5c0b\u6642\uff0c\u662f\u6bcf\u4e00\u500b\u9700\u6c42\u90fd\u8981\u8a2d\u8a08\u4e00\u500b\u908f\u8f2f\uff0c\u7136\u800c\u95dc\u806f\u5f0f\u537b\u4e0d\u540c\u3002
SQL \u662f\u95dc\u806f\u5f0f\u6a21\u578b\u5728\u505a\u641c\u5c0b\u8a9e\u8a00\u6642\u7684\u4e00\u7a2e\u5354\u5b9a\u3002SQL \u5728\u63a8\u51fa\u6642\u6709\u500b\u5275\u65b0\u601d\u8003\uff1a\u900f\u904e\u4e00\u500b\u6cdb\u7528\u7684\u6700\u4f73\u5316\u5668\uff0c\u8b93\u4f60\u53ef\u4ee5\u7528\u62bd\u8c61\u7684\u65b9\u5f0f\u53bb\u67e5\u8a62\uff0c\u800c\u975e\u6bcf\u6b21\u641c\u5c0b\u90fd\u8981\u8a2d\u8a08\u4e00\u7a2e\u3002\u62bd\u8c61\u5316\u7684\u65b9\u5f0f\u548c\u547d\u4ee4\u5f0f\u6bd4\u8f03\u7d30\u7684\u6bd4\u8f03\u5f85\u6703\u6703\u5728\u67e5\u8a62\u8a9e\u8a00\u4e2d\u8a0e\u8ad6\u3002
\u9019\u88e1\u91cd\u9ede\u662f\uff0c\u900f\u904e\u67e5\u8a62\u6700\u4f73\u5316\u5668\uff0c\u5de5\u7a0b\u5e2b\u4e0d\u518d\u9700\u8981\u6839\u64da\u5404\u500b\u67e5\u8a62\uff08\u67e5\u6587\u7ae0\u3001\u67e5\u7559\u8a00\uff09\uff0c\u53bb\u8a2d\u5b9a\u7368\u7acb\u7684\u641c\u5c0b\u6a5f\u5236\uff0c\u50cf\u4e0a\u9762\u7684\u6a39\u72c0\u7d50\u69cb\u90a3\u822c\u3002
\u7d50\u8ad6\u5c31\u662f\u6bd4\u8d77\u8b93\u5927\u5bb6\u5728\u5404\u81ea\u7684\u8acb\u6c42\u4e2d\uff0c\u8a2d\u8a08\u4e00\u500b\u641c\u5c0b\u6a5f\u5236\uff0c\u4e0d\u5982\u82b1\u5f88\u591a\u5fc3\u529b\u53bb\u5efa\u7acb\u4e00\u500b\u6cdb\u7528\u7684\u641c\u5c0b\u5de5\u5177\u3002\u800c\u6b77\u53f2\u8b49\u660e\u9019\u500b\u65b9\u5411\u662f\u5927\u5bb6\u8f03\u80fd\u63a5\u53d7\u7684\u3002
"},{"location":"feedback/designing-data-intensive-applications/foundation-model/#\u6587\u4ef6\u5f0f\u6a21\u578b","title":"\u6587\u4ef6\u5f0f\u6a21\u578b","text":"\u9019\u6a23\u770b\u8d77\u4f86\uff0c\u6587\u4ef6\u5f0f\u6a21\u578b\u597d\u50cf\u53c8\u5982\u540c\u6a39\u72c0\u7d50\u69cb\u8cc7\u6599\u90a3\u822c\uff0c\u6709\u4e00\u4e9b\u67e5\u8a62\u4e0a\u7684\u5148\u5929\u7f3a\u5931\uff0c\u4ed6\u8d70\u56de\u982d\u8def\u4e86\u55ce\uff1f
\u78ba\u5be6\u4ed6\u5728\u591a\u5c0d\u591a\u6216\u591a\u5c0d\u4e00\u500b\u95dc\u4fc2\u4e2d\u4ecd\u7136\u4e0d\u50cf\u95dc\u806f\u5f0f\u6a21\u578b\u90a3\u9ebc\u65b9\u4fbf\uff0c\u5373\u4f7f\u73fe\u5728\u6709\u4e9b\u6280\u8853\u5e6b\u52a9\u4ed6\u8b93\u4e0d\u540c\u6587\u4ef6\u505a\u806f\u5408\uff0c\u4f8b\u5982\u900f\u904e\u6587\u4ef6\u53c3\u8003\uff08document reference\uff09\u3002
\u4f46\u662f\uff0c\u56e0\u70ba\u4ed6\u5728\u8655\u7406\u4e00\u5c0d\u591a\u7684\u95dc\u4fc2\u6642\u975e\u5e38\u55ae\u7d14\uff0c\u4e0d\u6703\u50cf\u95dc\u806f\u5f0f\u4e00\u6a23\u6709\u5404\u7a2e join \u548c group\uff0c\u8b93\u4ed6\u5728\u5206\u6563\u5f0f\u7684\u8cc7\u6599\u5eab\u4e0b\u975e\u5e38\u597d\u505a\uff0c\u9019\u6703\u5728\u6211\u5011\u5f8c\u9762\u505a\u8907\u88fd\uff08replication\uff09\u548c\u5206\u5340\uff08partition\uff09\u6642\u548c\u8003\u616e\u7af6\u8cfd\u72c0\u6cc1\u6642\u66f4\u80fd\u9ad4\u6703\u5230\u3002
\u9664\u6b64\u4e4b\u5916\uff0c\u9084\u6709\u7db1\u76ee\u4e5f\u4e0d\u592a\u4e00\u6a23\u3002
"},{"location":"feedback/designing-data-intensive-applications/foundation-model/#\u7db1\u76eeschema","title":"\u7db1\u76ee\uff08schema\uff09","text":"\u6211\u5011\u76f4\u63a5\u4f86\u770b\u770b\u5be6\u969b\u5728\u53d6\u5f97\u300c\u4f7f\u7528\u8005 ID 123 \u7684\u7b2c\u4e09\u500b\u5de5\u4f5c\u7d93\u6b77\u300d\u7684\u8cc7\u6599\u6642\u4e0d\u540c\u6a21\u578b\u7684\u641c\u5c0b\u65b9\u5f0f\u3002
\u95dc\u806f\u5f0f\u6a21\u578b
SELECT experience FROM experience_relation WHERE use_id=123 AND index=3\n
\u6587\u4ef6\u5f0f\u6a21\u578b
db.get(\"users.123.experiences.3\");\n
\u5169\u7a2e\u4e0d\u540c\u7684\u53d6\u5f97\u65b9\u5f0f\uff0c\u5c31\u53ef\u4ee5\u611f\u53d7\u5230\u6587\u4ef6\u5f0f\u548c\u95dc\u806f\u5f0f\u8cc7\u6599\u5eab\u7684\u5132\u5b58\u65b9\u5f0f\u5dee\u7570\u3002
\u95dc\u806f\u5f0f\u6a21\u578b\u9700\u8981\u95dc\u4fc2\u4e2d\u6240\u6709\u7684\u7d44\u5408\uff08row\uff09\u90fd\u8981\u6709 user_id \u548c index\u3002\u6240\u4ee5\u7576\u4f60\u65b0\u589e\u6b04\u4f4d\u7684\u6642\u5019\uff0c\u6240\u6709\u820a\u7684\u7d44\u5408\u90fd\u6703\u9700\u8981\u66f4\u65b0\u4ed6\u7684\u503c\u4f86\u4fdd\u6301\u683c\u5f0f\u7684\u4e00\u81f4\u6027\u3002\u96d6\u7136\u5927\u90e8\u5206\u8cc7\u6599\u5eab\u90fd\u6703\u8b93\u9019\u6a5f\u5236\u505a\u6bd4\u8f03\u8edf\u6027\u7684\u9650\u5236\uff0c\u4f8b\u5982\u9810\u8a2d\u6240\u6709\u820a\u7684\u8cc7\u6599\u70ba null \u6642\uff0c\u4e0d\u6703\u5f37\u5236\u8b93\u8cc7\u6599\u91cd\u6d17\u4e00\u904d\uff08MySQL \u9664\u5916\uff09\u3002
\u6587\u4ef6\u5f0f\u6a21\u578b\u5247\u662f\u6240\u6709\u8cc7\u6599\u683c\u5f0f\u4e0d\u5fc5\u4e00\u81f4\uff0c\u50c5\u5728\u6211\u8b80\u53d6\u7684\u6642\u5019\u6211\u9810\u8a2d\u4ed6\u61c9\u8a72\u8981\u6709\u503c\u3002
\u6240\u4ee5\u7e3d\u7d50\u95dc\u806f\u5f0f\u6a21\u578b\u6703\u5728\u5beb\u5165\u7684\u6642\u5019\u5c31\u8981\u6c42\u8cc7\u6599\u4fdd\u6709\u4e00\u5b9a\u683c\u5f0f\uff0c\u6211\u5011\u7a31\u70ba schema-on-write\u3002
\u53cd\u4e4b\u6587\u4ef6\u5f0f\u6a21\u578b\uff0c\u5728\u8b80\u53d6\u6642\uff0c\u61c9\u7528\u7a0b\u5f0f\u6703\u9810\u8a2d\u4ed6\u6709\u67d0\u4e9b\u8cc7\u6599\u3002\u8981\u6ce8\u610f\uff0c\u6587\u4ef6\u5f0f\u6a21\u578b\u4e26\u975e\u6c92\u6709\u7db1\u76ee\uff0c\u800c\u662f\u9019\u500b\u7db1\u76ee\u8f03\u70ba\u96b1\u6666\uff0c\u662f\u61c9\u7528\u7a0b\u5f0f\u5728\u8b80\u53d6\u8cc7\u6599\u6642\u53bb\u5b9a\u7fa9\u7684\uff0c\u6211\u5011\u7a31\u70ba schema-on-read\u3002
\u9664\u6b64\u4e4b\u5916\uff0c\u7576\u7db1\u76ee\u66f4\u65b0\u7684\u6642\u5019\uff0c\u7b2c\u4e00\u7a2e\u9664\u4e86\u5728\u61c9\u7528\u7a0b\u5f0f\u505a\u8abf\u6574\u5916\u4e5f\u6703\u9700\u8981\u5728\u8cc7\u6599\u5eab\u505a\u624b\u8173\uff0c\u7b2c\u4e8c\u7a2e\u50c5\u9700\u5728\u61c9\u7528\u7a0b\u5f0f\u505a\u624b\u8173\u3002
\u6709\u4ec0\u9ebc\u5dee\u5225\uff1f
\u9019\u6bb5\u7d30\u7bc0\u6703\u5728\u7de8\u78bc\u548c\u9032\u7a0b\u505a\u66f4\u6df1\u7684\u8a0e\u8ad6
"},{"location":"feedback/designing-data-intensive-applications/foundation-model/#\u9664\u6b64\u4e4b\u5916","title":"\u9664\u6b64\u4e4b\u5916","text":"\u95dc\u806f\u5f0f\u8cc7\u6599\u5eab\u548c\u6587\u4ef6\u5f0f\u8cc7\u6599\u5eab\u7684\u6bd4\u8f03\u9664\u4e86\u4e0a\u8ff0\u63d0\u5230\u7684\uff0c\u9084\u6709
\u8cc7\u6599\u5c40\u90e8\u6027\u662f\u4ec0\u9ebc\uff1f\u5982\u679c\u4f60\u7684\u61c9\u7528\u7a0b\u5f0f\u9700\u8981\u62ff\u5b8c\u6574\u8cc7\u6599\u4f86\u505a\u904b\u7b97\uff0c\u4f8b\u5982\uff1a\u4f60\u8981\u505a\u9ede\u9910\u7684\u7cfb\u7d71\uff0c\u4f60\u6703\u9700\u8981\u628a\u8a2d\u8a08\u597d\u7684\u83dc\u55ae\u62ff\u4f86\u6e32\u67d3\u51fa\u9ede\u9910\u9801\u9762\u3002\u76f8\u5c0d\u95dc\u806f\u5f0f\u8cc7\u6599\u5eab\u9700\u8981\u5404\u7a2e\u806f\u5408\uff08join\uff09\u548c\u53d6\u5f97\u4e0d\u540c table \u7684\u8cc7\u6599\uff0c\u6587\u4ef6\u5f0f\u8cc7\u6599\u53ea\u8981\u62ff\u4e00\u6b21\u5c31\u53ef\u4ee5\u3002\u9019\u5c31\u662f\u8cc7\u6599\u5c40\u90e8\u6027\uff0c\u5b8c\u6574\u7684\u8cc7\u6599\u5728\u672c\u5730\u4f4d\u7f6e\u5c31\u53ef\u4ee5\u53d6\u5f97\uff0c\u4e0d\u9700\u8981\u518d\u53bb\u548c\u5176\u4ed6\u4f4d\u7f6e\u62ff\u3002
\u518d\u4f86\uff0c\u95dc\u806f\u5f0f\u8cc7\u6599\u5eab\u901a\u5e38\u90fd\u9700\u8981\u61c9\u7528\u7a0b\u5f0f\u53bb\u8f49\u63db\u8cc7\u6599\u7684\u683c\u5f0f\u3002\u56e0\u70ba\u4f60\u5f9e\u8cc7\u6599\u5eab\u62ff\u5230\u7684\u53ea\u6703\u662f k-v \u7684\u7d44\u5408\uff0c\u800c\u4e00\u822c\u7a0b\u5f0f\u78bc\u4f7f\u7528\u7684\u90fd\u662f class \u6216\u662f map/array \u7b49\u7b49\u3002\u9019\u908a\u4e5f\u53ef\u4ee5\u770b\u5230\u6587\u4ef6\u5f0f\u6a21\u578b\u7684\u512a\u52e2\u3002
\u7b2c\u4e09\u9ede\u662f\u601d\u60f3\u8f49\u63db\uff0c\u5982\u679c\u4ee5\u524d\u7528\u95dc\u806f\u5f0f\u8cc7\u6599\u5eab\u7528\u7684\u5f88\u7fd2\u6163\uff0c\u6587\u4ef6\u5f0f\u8cc7\u6599\u5eab\u6703\u5c11\u4e86\u4e00\u4e9b\u591a\u5c0d\u591a\u7684\u9023\u7d50\u3002\u9019\u5728\u8a2d\u8a08\u61c9\u7528\u7a0b\u5f0f\u7684\u6642\u5019\u9700\u8981\u8003\u616e\uff0c\u9019\u662f\u6211\u6839\u64da\u5be6\u52d9\u7d93\u9a57\u5f97\u51fa\u7684\u611f\u60f3\u3002\u4f8b\u5982 Firestore \u662f\u9069\u7528\u5728\u651c\u5e36\u578b\u88dd\u7f6e\uff08mobile device\uff09\u7684\u6587\u4ef6\u5f0f\u8cc7\u6599\u5eab\u3002\u4ed6\u70ba\u4e86\u8b93\u4e0d\u540c\u7684\u88dd\u7f6e\u3001\u61c9\u7528\u7a0b\u5f0f\u540c\u6b65\u8cc7\u6599\uff0c\u8a2d\u8a08\u6210\u6587\u4ef6\u5f0f\u8cc7\u6599\u5eab\u6703\u8b93\u4ed6\u597d\u7528\u5f88\u591a\uff0c\u4f46\u4e5f\u5c11\u4e86\u95dc\u806f\u5f0f\u8cc7\u6599\u5eab\u53ef\u4ee5\u7684\u4e00\u4e9b\u7279\u6027\u3002
"},{"location":"feedback/designing-data-intensive-applications/foundation-model/#\u6536\u6582","title":"\u6536\u6582","text":"\u96a8\u8457\u6642\u9593\u6f14\u9032\uff0c\u5169\u500b\u6a21\u578b\u76f8\u4f3c\u6027\u5176\u5be6\u8d8a\u4f86\u8d8a\u50cf\uff1a
\u524d\u9762\u6211\u5011\u6709\u63d0\u5230\u8cc7\u6599\u7684\u95dc\u4fc2\u6703\u6c7a\u5b9a\u4f7f\u7528\u7684\u6a21\u578b\u3002
\u7576\u8cc7\u6599\u6709\u5f88\u591a\u4e00\u5c0d\u591a\u7684\u95dc\u4fc2\u6642\uff0c\u6587\u4ef6\u5f0f\u6a21\u578b\u5c31\u5f88\u9069\u5408\u3002\u53cd\u4e4b\uff0c\u7c21\u55ae\u7684\u591a\u5c0d\u591a\uff0c\u95dc\u806f\u5f0f\u8cc7\u6599\u5eab\u5c31\u53ef\u4ee5\u8f15\u6613\u4e0a\u624b\u3002
\u4f46\u662f\u7576\u8cc7\u6599\u6709\u5927\u91cf\u591a\u5c0d\u591a\u7684\u95dc\u4fc2\u6642\uff0c\u5c31\u9700\u8981\u8003\u616e\u5176\u4ed6\u7684\u65b9\u5f0f\u3002
"},{"location":"feedback/designing-data-intensive-applications/foundation-model/#\u591a\u5c0d\u591a","title":"\u591a\u5c0d\u591a","text":"\u591a\u5c0d\u591a\u7684\u95dc\u4fc2\u53ef\u88ab\u767c\u73fe\u65bc\uff1a
\u96d6\u7136\u4f8b\u5b50\u90fd\u662f\u540c\u503c\u6027\u8cc7\u6599\u7684\u61c9\u7528\uff0c\u4f46\u662f\u5be6\u969b\u4e0a\uff0c\u6bcf\u500b\u7bc0\u9ede\u53ef\u4ee5\u4e0d\u662f\u540c\u503c\u6027\u7684\u8cc7\u6599\u3002\u4f8b\u5982 Facebook \u7684\u5716\u50cf\u5f0f\u6a21\u578b\u6703\u628a\u4f7f\u7528\u8005\u7684\u4e8b\u4ef6\u3001\u4f4d\u7f6e\u3001\u6253\u5361\u3001\u7559\u8a00\u7b49\u7b49\u7576\u6210\u7bc0\u9ede\uff0c\u4e26\u5b58\u6210\u4e00\u5f35\u5927\u8868\u3002
\u4ee5\u66f8\u4e2d\u7bc4\u4f8b\u4f86\u505a\u8b1b\u89e3\uff0c\u7bc0\u9ede\u53ef\u4ee5\u662f\u4eba\u6216\u662f\u4f4d\u7f6e\uff0c\u4e26\u975e\u540c\u503c\u6027\u7684\u8cc7\u6599\u3002
\u9019\u908a\u4e5f\u53ef\u4ee5\u6ce8\u610f\u5230\u56e0\u70ba\u6bcf\u500b\u570b\u5bb6\u5c0d\u65bc\u5730\u5340\u7684\u5206\u754c\u6709\u4e0d\u540c\u540d\u7a31\uff0c\u6cd5\u570b\u7684 departement \u548c\u82f1\u570b\u7684 country\uff0c\u96d6\u7136\u5728\u9019\u5f35\u8868\u4e2d\u5c64\u7d1a\u4e00\u6a23\uff0c\u4f46\u662f\u610f\u7fa9\u53ef\u80fd\u4e0d\u4e00\u6a23\u3002\u4f60\u53ef\u4ee5\u60f3\u50cf\u5982\u679c\u662f\u505a\u6210\u95dc\u806f\u5f0f\u8cc7\u6599\u5eab\uff0c\u5730\u5340\u7684\u8868\u5c31\u6703\u9700\u8981\u6709\u5f88\u591a\u6b04\u4f4d\u3002
\u518d\u4f86\u770b\u7dda\uff0c\u6bcf\u500b\u7dda\u56e0\u70ba\u4ee3\u8868\u8457\u9ede\u548c\u9ede\u7684\u95dc\u4fc2\uff0c\u6240\u4ee5\u53ef\u4ee5\u6709\u4e0d\u540c\u610f\u7fa9\u3002
\u9019\u88e1\u6709\u5e7e\u9ede\u8981\u6ce8\u610f\uff1a
\u9019\u6a23\u505a\u9664\u4e86\u53ef\u4ee5\u4fdd\u6301\u8cc7\u6599\u5eab\u7d50\u69cb\u7684\u4e7e\u6de8\uff0c\u4e0d\u9700\u8981\u4e00\u76f4\u8abf\u6574\u7db1\u76ee\u5916\uff0c\u4e5f\u8ce6\u4e88\u5716\u50cf\u5f0f\u6a21\u578b\u5f88\u5927\u7684\u5f48\u6027\uff0c\u4f8b\u5982\uff1a
\u6211\u5011\u5c0d\u5716\u50cf\u5f0f\u6a21\u578b\u6709\u500b\u6982\u5ff5\u4e4b\u5f8c\uff0c\u5c31\u4f86\u770b\u770b\u4ed6\u6709\u54ea\u4e9b\u5be6\u4f5c\u3002
"},{"location":"feedback/designing-data-intensive-applications/foundation-model/#\u5716\u50cf\u5f0f\u6a21\u578b\u7a2e\u985e","title":"\u5716\u50cf\u5f0f\u6a21\u578b\u7a2e\u985e","text":"\u6211\u5011\u6703\u4f86\u4ecb\u7d39\u4e00\u4e0b\u5716\u50cf\u5f0f\u6a21\u578b\u7684\u5169\u7a2e\u7d50\u69cb
\u5c6c\u6027\u5716\u6a21\u578b\uff08property graphs model\uff09
\u4e09\u5143\u7d44\u6a21\u578b\uff08triple-stores model\uff09
\u4f46\u662f\u9019\u5169\u7a2e\u6771\u897f\u5176\u5be6\u5927\u540c\u5c0f\u7570\uff0c\u6211\u5011\u5f85\u6703\u4ecb\u7d39\u7684\u6642\u5019\u53ef\u80fd\u6703\u6bd4\u8f03\u6709\u611f\u3002
"},{"location":"feedback/designing-data-intensive-applications/foundation-model/#\u5c6c\u6027\u5716\u6a21\u578b","title":"\u5c6c\u6027\u5716\u6a21\u578b","text":"\u6bcf\u500b\u9ede\u548c\u7dda\u6703\u6709\u5f88\u591a\u5c6c\u6027\uff1a
\u9019\u6a23\u770b\u53ef\u80fd\u6c92\u6642\u9ebc\u611f\u89ba\uff0c\u5982\u679c\u4f7f\u7528\u95dc\u806f\u5f0f\u8cc7\u6599\u5eab\uff0c\u53ef\u80fd\u5c31\u6703\u9577\u6210\u9019\u500b\u6a23\u5b50\uff1a
CREATE TABLE vertices (\n vertex_id integer PRIMARY KEY,\n vertex_type text,\n properties json\n)\nCREATE TABLE edges (\n edge_id integer PRIMARY KEY,\n tail_vertex integer REFERENCES vertices (vertex_id),\n head_vertex integer REFERENCES vertices (vertex_id),\n label text,\n properties json\n)\n
\u4ee5 Neo4j \u9019\u500b\u8cc7\u6599\u5eab\u70ba\u4f8b\uff0c\u5efa\u7acb\u4e0a\u9762\u7684\u5716\u50cf\u5f0f\u6a21\u578b\u95dc\u4fc2\u7db2\u7d61\u9700\u8981\u4e0b\u4ee5\u4e0b\u8a9e\u6cd5\uff1a
CREATE\n /* vertices */\n (NAmerica:Location {name:'North America', type:'continent'}),\n ( USA:Location {name:'United States', type:'country' }),\n ( Idaho:Location {name:'Idaho', type:'state' }),\n ( Lucy:Person {name:'Lucy'}),\n /* edges */\n (Idaho) -[:WITHIN]-> (USA) -[:WITHIN]-> (NAmerica),\n (Lucy) -[:BORN_IN]-> (Idaho)\n
\u503c\u5f97\u6ce8\u610f\u7684\u662f\uff0c\u56e0\u70ba\u5716\u50cf\u5f0f\u8cc7\u6599\u5eab\u5df2\u7d93\u5e6b\u4f60\u9810\u8a2d\u597d\u7db1\u76ee\u8981\u9577\u7684\u6a23\u5b50\uff0c\u6240\u4ee5\u4e0d\u9700\u8981\u8a2d\u5b9a\uff0c\u6211\u5011\u76f4\u63a5\u770b\u6dfb\u52a0\u8cc7\u6599\u6642\u6703\u8981\u8dd1\u7684\u7a0b\u5f0f\u78bc\u3002
\u73fe\u5728\u82e5\u8981\u627e\u300c\u6240\u6709\u5f9e\u7f8e\u570b\u79fb\u6c11\u5230\u6b50\u6d32\u7684\u4eba\u7684\u540d\u5b57\u300d\u9019\u8cc7\u6599\u5c31\u53ef\u4ee5\u4e0b\u76f8\u95dc query\uff1a
MATCH\n (Person) -[:BORN_IN]-> () -[:WITHIN*0..]-> (us:Location {name:'United States'}),\n (Person) -[:LIVES_IN]-> () -[:WITHIN*0..]-> (en:Location {name:'Europe'}),\nRETURN Person.name\n
\u9019\u500b\u8072\u660e\u5f0f\u8a9e\u8a00\u8b93\u67e5\u8a62\u900f\u904e\u8f03\u70ba\u9ad8\u5c64\u6b21\u7684\u908f\u8f2f\u53bb\u57f7\u884c\uff0c\u6211\u5011\u4e0d\u5fc5\u5728\u610f\u5be6\u4f5c\u7d30\u7bc0\uff0c\u4f8b\u5982\u8a72\u5f9e\u4eba\u53bb\u4f9d\u5e8f\u627e\u4e0b\u53bb\u9084\u662f\u5f9e\u6700\u4e0a\u5c64\u7684\u5730\u5340\u5f80\u4e0b\u627e\u51fa\u751f\u65bc\u6b64\u7684\u4eba\u3002
\u9664\u6b64\u4e4b\u5916\uff0c\u6bd4\u8f03\u8907\u96dc\u7684\u8a9e\u6cd5\u9084\u6709\u300c\u63a8\u85a6\u4f7f\u7528\u8005\u9910\u5ef3\uff1a\u6709\u54ea\u500b\u4eba\u7684\u670b\u53cb\u6709\u5728\u6c92\u53bb\u904e\u7684\u9910\u5ef3\u6253\u5361\uff1f\u300d\u3002
"},{"location":"feedback/designing-data-intensive-applications/foundation-model/#\u4e09\u5143\u7d44\u6a21\u578b","title":"\u4e09\u5143\u7d44\u6a21\u578b","text":"\u548c\u5c6c\u6027\u5716\u6a21\u578b\u5927\u540c\u5c0f\u7570\uff0c\u4ed6\u662f\u4ee5 (subject,predicate,object)
\u65b9\u5f0f\u53bb\u5efa\u7acb\u7684\u3002\u5176\u4ee3\u8868\u7684\u610f\u7fa9\u5206\u5225\u662f\uff1a\u4e3b\u8a5e\u3001\u8853\u8a9e\u3001\u53d7\u8a5e\u3002
\u6211\u5011\u4f86\u770b\u770b\u5efa\u7acb\u6642\u7684\u8a9e\u6cd5\uff1a
@prefix : <urn:example:>. (1)\n_:lucy a :Person; :name \"Lucy\"; :bornIn _:idaho.\n_:idaho a :Location; :name \"Idaho\"; :type \"state\"; :within _:usa\n_:usa a :Loaction; :name \"United States\"; :type \"country\"; :within _:namerica.\n_:namerica a :Location; :name \"North America\"; :type \"continent\".\n
\u4e0a\u9762\u7684\u8868\u9054\u683c\u5f0f\u662f Turtle \u683c\u5f0f\u3002
\u6211\u5011\u4f86\u770b\u770b\u4f7f\u7528 SPARQL \u641c\u5c0b\u6642\u7684\u8a9e\u6cd5\uff1a
PREFIX : <urn:example:>\nSELECT ?personName WHERE {\n ?person :name ?personName.\n ?person :bornIn / :within* / :name \"United States\".\n ?person :livesIn / :within* / :name \"Europe\".\n}\n
SPARQL\uff08sparkle\uff09\uff0c\u53ef\u4ee5\u5230\u9ad8\u96c4\u5e02\u8cc7\u6599\u5e73\u53f0\u73a9\u73a9\u770b
\u7531\u6b64\u6211\u5011\u5c31\u53ef\u4ee5\u4e86\u89e3\u5716\u50cf\u5f0f\u6a21\u578b\u6982\u5ff5\u4e0d\u96e3\uff0c\u5176\u5be6\u53ea\u662f\u56e0\u70ba\u61c9\u7528\u9700\u6c42\u7684\u4e0d\u540c\uff0c\u53bb\u5efa\u7acb\u4e0d\u540c\u7684\u5132\u5b58\u65b9\u5f0f\u3002\u770b\u5b8c\u4e86\u9019\u4e9b\u6a21\u578b\uff0c\u6211\u5011\u5c31\u4f86\u770b\u770b\u67e5\u8a62\u8a9e\u8a00\u3002
"},{"location":"feedback/designing-data-intensive-applications/foundation-model/#\u67e5\u8a62\u8a9e\u8a00","title":"\u67e5\u8a62\u8a9e\u8a00","text":"\u67e5\u8a62\u8a9e\u8a00\uff08query language\uff09\u9019\u88e1\u4ecb\u7d39\u4e09\u7a2e\uff1a
\u524d\u9762\u5728\u5716\u50cf\u5f0f\u6a21\u578b\u770b\u5230\u5f88\u591a\u8072\u660e\u5f0f\u67e5\u8a62\u8a9e\u8a00\uff0c\u4ed6\u7684\u6982\u5ff5\u5c31\u662f\u628a\u641c\u5c0b\u6642\u7684\u62bd\u8c61\u7a0b\u5ea6\u62c9\u9ad8\uff0c\u4e0d\u5fc5\u8b93\u958b\u767c\u4eba\u54e1\u53bb\u4e86\u89e3\u6216\u9078\u64c7\u5be6\u4f5c\u65b9\u5f0f\u3002
\u76f8\u5c0d\u800c\u8a00\uff0c\u9084\u6709\u547d\u4ee4\u5f0f\u8a9e\u8a00\u548c\u908f\u8f2f\u5f0f\u8a9e\u8a00\uff0c\u6211\u5011\u4e0b\u9762\u5c07\u4ee5\u7a0b\u5f0f\u78bc\u70ba\u7bc4\u4f8b\u3002
"},{"location":"feedback/designing-data-intensive-applications/foundation-model/#\u8072\u660e\u5f0f","title":"\u8072\u660e\u5f0f","text":"\u4ee5 JavaScript \u70ba\u4f8b\uff0c\u8072\u660e\u5f0f\u53ef\u80fd\u5982\u4e0b\uff1a
return animals.filter((animal) => animal.family === \"Sharks\");\n
\u4f60\u4e0d\u9700\u8981\u8003\u616e\u600e\u9ebc\u505a\u8ff4\u5708\uff0c\u4e5f\u4e0d\u9700\u8981\u8003\u616e\u600e\u9ebc\u6536\u96c6\u7be9\u9078\u5f8c\u7684\u8cc7\u6599\uff0c\u4e0d\u7ba1\u4ed6\u662f\u4e0d\u662f\u6703\u5206\u6563\u65bc\u4e0d\u540c\u7dda\u7a0b\u7b49\u7b49\u3002
\u5c0d\u61c9\u65bc SQL
SELECT * FROM animals WHERE family = 'Sharks'\n
"},{"location":"feedback/designing-data-intensive-applications/foundation-model/#\u547d\u4ee4\u5f0f","title":"\u547d\u4ee4\u5f0f","text":"\u4ee5 JavaScript \u70ba\u4f8b\uff0c\u547d\u4ee4\u5f0f\u53ef\u80fd\u5982\u4e0b\uff1a
function getSharks(animals) {\n var sharks = [];\n for (var i = 0; i < animals.length; i++) {\n if (animals[i].family === \"Sharks\") {\n sharks.push(animals[i]);\n }\n }\n return sharks;\n}\n
\u4f60\u547d\u4ee4\u7a0b\u5f0f\u8a9e\u8a00\u53bb\u600e\u9ebc\u8dd1\u6240\u6709\u8cc7\u6599\uff0c\u7136\u5f8c\u4e5f\u95e1\u660e\u9700\u8981\u4ee5\u4f55\u7a2e\u65b9\u5f0f\u505a\u7d50\u679c\u3002
"},{"location":"feedback/designing-data-intensive-applications/foundation-model/#\u8072\u660e\u5f0f\u597d\u8655","title":"\u8072\u660e\u5f0f\u597d\u8655","text":"\u6211\u5011\u4ee5\u300c\u6d77\u6d0b\u751f\u7269\u5b78\u5bb6\u6bcf\u6708\u89c0\u5bdf\u5230\u7684\u9bca\u9b5a\u6578\u300d\u4f86\u505a\u8a0e\u8ad6\u3002
db.observations.mapReduce(\n // (1)\n function map() {\n var year = this.observationTimestamp.getFullYear();\n var month = this.observationTimestamp.getMonth() + 1;\n emit(year + \"-\" + month, this.numAnimals);\n },\n // (2)\n function reduce(key, values) {\n return Array.sum(values);\n },\n {\n query: { family: \"Sharks\" }, // (3)\n out: \"monthlySharkReport\",\n }\n);\n
\u4e0a\u8868\u662f MongoDB MapReduce \u7684\u64f4\u5145\u5957\u4ef6\u7684\u898f\u5247\u3002MapReduce \u4e4b\u5f8c\u5728\u6279\u6b21\u8655\u7406\u6703\u8b1b\u3002
\u4e8b\u5be6\u4e0a\uff0c\u4e0a\u8ff0\u7684\u4f8b\u5b50\u4e2d\uff0c\u662f\u4ecb\u65bc\u547d\u4ee4\u5f0f\u548c\u8072\u660e\u5f0f\u4e4b\u9593\uff0c\u4f8b\u5982\u7b2c 11 \u884c\u5c31\u662f\u8072\u660e\u5f0f\u7684\u65b9\u5f0f\u53bb\u7be9\u9078\u7a2e\u985e\u70ba\u9bca\u9b5a\u7684\u52d5\u7269\u3002
\u4e00\u958b\u59cb\u770b\uff0c\u53ef\u80fd\u6703\u770b\u4e0d\u592a\u51fa\u4f86\u547d\u4ee4\u5f0f\u7684\u597d\u8655\u3002\u4f46\u662f\uff1a
Prolog\uff08Programming in Logic\uff09\u5c31\u662f\u900f\u904e\u908f\u8f2f\u7684\u65b9\u5f0f\u53bb\u5beb\u7a0b\u5f0f\u78bc\u3002\u4e0d\u50cf\u5176\u4ed6\u985e\u578b\u7684\u8a9e\u8a00\u6bd4\u8f03\u50cf\u662f\u547d\u4ee4\u5f0f\u7684\u65b9\u5f0f\u53bb\u64b0\u5beb\u3002\u7136\u800c\uff0c\u65e9\u5728 1970 \u5e74\u4ee3\u908f\u8f2f\u5f0f\u7684\u8a9e\u8a00\u5c31\u5df2\u7d93\u767c\u5c55\u4e86\u3002\u65e9\u671f\u5728\u7814\u7a76\u6642\uff0c\u9019\u7a2e\u908f\u8f2f\u5f0f\u7684\u8a9e\u8a00\u76f8\u5c0d\u65bc\u547d\u4ee4\u5f0f\u66f4\u5bb9\u6613\u8b93\u4eba\u7406\u89e3\u3002
\u6211\u5011\u4ee5 Prolog \u7684\u4e00\u500b\u4f7f\u7528\u60c5\u5883\u300c\u767c\u751f\u4e00\u5834\u547d\u6848\uff0c\u8acb\u900f\u904e\u4e92\u65a5\u7684\u8b49\u8a5e\u627e\u51fa\u8ab0\u5728\u8aaa\u8b0a\u300d\u70ba\u4f8b\uff1a
\u4e0a\u8ff0\u72c0\u6cc1\u53ef\u4ee5\u900f\u904e\u4e0b\u9762\u7684\u8a9e\u6cd5\u6210\u529f\u627e\u5230\u8ab0\u5728\u8aaa\u8b0a\uff1a
% \u5b9a\u7fa9\u8b49\u8a5e\ntestimony(a, friend(b)). % (1)\ntestimony(a, enemy(c)).\ntestimony(b, out_of_town(b)).\ntestimony(b, stranger(b)).\ntestimony(c, in_town(c)).\ntestimony(c, in_town(a)).\ntestimony(c, in_town(b)).\n\n% \u5ba3\u544a\u4ec0\u9ebc\u662f\u885d\u7a81\u7684\ninconsistent(friend(X), enemy(X)).\ninconsistent(friend(X), stranger(X)).\ninconsistent(enemy(X), stranger(X)).\ninconsistent(out_of_town(X), in_town(X)).\n\n% \u627e\u51fa\u8aaa\u8b0a\u8005\nlier(L) :-\n member(L, [a, b, c]), % \u5f9e a, b, c \u4e2d\u62c9\u51fa\u4e00\u500b\u4eba\u53eb L(lier)\n select(L, [a, b, c], Witness), % \u5269\u4e0b\u7684\u4eba\u7b97\u9032\u8b49\u4eba\n consistent(Witness). % \u8b49\u4eba\u7684\u8b49\u8a5e\u662f\u5408\u7406\u7684\n\n% \u7fa4\u7d44\u4e2d\u5927\u5bb6\u8b49\u8a5e\u90fd\u662f\u5408\u7406\u7684\nconsistent(W) :-\n \\+ inconsistent_testimony(W).\n\n% \u7fa4\u7d44\u4e2d\u6709\u4eba\u6709\u885d\u7a81\u7684\u8b49\u8a5e\ninconsistent_testimony(W) :-\n member(X, W), % \u5f9e\u7fa4\u7d44\u4e2d\u6311\u51fa X \u548c Y\n member(Y, W),\n X \\= Y, % X \u548c Y \u4e0d\u540c\u4eba\n testimony(X, XT), % \u62ff\u51fa X \u7684\u5176\u4e2d\u4e00\u500b\u8b49\u8a5e\n testimony(Y, YT), % \u62ff\u51fa Y \u7684\u5176\u4e2d\u4e00\u500b\u8b49\u8a5e\n inconsistent(XT, YT). % \u4ed6\u5011\u662f\u885d\u7a81\u7684\n
testimony(a, knew(b)).\ntestimony(a, knew(c)).\ntestimony(a, innocent(a)).\ntestimony(b, out_of_town(b)).\ntestimony(b, stranger(b)).\ntestimony(c, innocent(c)).\ntestimony(c, in_town(a)).\ntestimony(c, in_town(b)).\n
\u76f8\u5c0d\u65bc\u5e38\u898b\u7684\u547d\u4ee4\u5f0f\u8a9e\u8a00\uff0c\u901a\u5e38\u5f88\u96e3\u505a\u51fa\u9019\u985e\u7684\u8868\u73fe\uff0c\u56e0\u70ba\u6211\u5011\u6703\u628a\u908f\u8f2f\u653e\u5728\u8166\u4e2d\uff0c\u4e26\u628a\u5be6\u4f5c\u5beb\u6210\u8a9e\u8a00\u3002\u5176\u6982\u5ff5\u548c\u908f\u8f2f\u5f0f\u8a9e\u8a00\u6b63\u76f8\u53cd\u3002
Datalog
Datalog \u662f Prolog\uff08Programming in Logic\uff09\u4e0b\u7684\u96c6\u5408\u3002\u5c31\u50cf SQL \u662f\u4e00\u7a2e\u898f\u7bc4\u4e00\u6a23\uff0cDatalog \u4e5f\u662f\u4e00\u7a2e\u8ecc\u7bc4\uff0c\u6709\u4e0d\u540c\u7684\u641c\u5c0b\u8a9e\u8a00\u53bb\u5be6\u8e10\u5b83\u3002\u4f8b\u5982 Cascalog
\u3002
within_recursive(Location, Name) :- name(Location, Name). /* (1) */\n\nwithin_recursive(Location, Name) :- within(Location, BiggerLoc),\n within_recursive(BiggerLoc, Name).\n\nmigrated(Name, BornIn, LivingIn) :- name(Person, Name),\n born_in(Person, BornLoc),\n within_recursive(BornLoc, BornIn),\n lives_in(Person, LivingLoc),\n within_recursive(LivingLoc, LivingIn).\n\n?- migrated(Who, 'United States', 'Europe').\n/* Who = 'Lucy'. */\n
within
\u5c31\u53d6\u540d\u7a31\u3002Datalog \u5ba3\u544a\u6c92\u6709\u9806\u5e8f\uff0c\u548c Prolog \u76f8\u53cd\u3002
"},{"location":"feedback/designing-data-intensive-applications/foundation-model/#\u7e3d\u7d50","title":"\u7e3d\u7d50","text":"\u9019\u7ae0\u8a0e\u8ad6\u4e86\u4e00\u4e9b\u6a21\u578b\uff0c\u4f46\u662f\u4e26\u672a\u6df1\u5165\u63a2\u8a0e\u5176\u5167\u90e8\u904b\u4f5c\u65b9\u5f0f\u3002\u4e8b\u5be6\u4e0a\uff0c\u8981\u6df1\u5165\u4e86\u89e3\u4e00\u500b\u6a21\u578b\u662f\u9700\u8981\u5927\u91cf\u6642\u9593\u548c\u7cbe\u795e\u7684\uff0c\u4f46\u662f\u5c0d\u65bc\u4e0d\u540c\u6a21\u578b\u6709\u4e9b\u521d\u6b65\u548c\u6982\u5ff5\u6027\u7684\u4e86\u89e3\uff0c\u53ef\u4ee5\u5e6b\u52a9\u4f60\u5728\u9078\u64c7\u6642\u52a0\u5165\u4e00\u4e9b\u53c3\u8003\u3002
\u4e0b\u4e00\u7ae0\u6211\u5011\u5c07\u8a0e\u8ad6\u5be6\u4f5c\u8cc7\u6599\u5eab\u6642\uff0c\u9700\u8981\u8003\u616e\u7684\u4e0d\u540c\u53d6\u6368\u3002
\u88dc\u5145\uff1a
\u7c21\u8981\u8aaa\u660e
\u672c\u8a5e\u5f59\u8868\u50c5\u7c21\u8981\u8aaa\u660e\u5404\u500b\u8a5e\u4ee3\u8868\u610f\u7fa9\uff0c\u8a73\u7d30\u8cc7\u8a0a\u8207\u61c9\u5834\u666f\u7b49\u7b49\u8acb\u770b\u5176\u5c0d\u61c9\u7684\u7ae0\u7bc0\u3002
"},{"location":"feedback/designing-data-intensive-applications/glossary/#\u7570\u6b65","title":"\u7570\u6b65","text":"asynchronous
\u547c\u53eb\u5de5\u4f5c\u5f8c\u7e7c\u7e8c\u57f7\u884c\u5176\u4ed6\u5de5\u4f5c\uff0c\u800c\u4e0d\u7b49\u5f85\u5176\u5b8c\u6210\uff08\u4f8b\u5982\u7db2\u8def\u8acb\u6c42\uff09\u3002\u975e\u540c\u6b65\u5de5\u4f5c\u4e0d\u6703\u5047\u8a2d\u5176\u9700\u8981\u5b8c\u6210\u7684\u6642\u9593\u3002
\u53cd\u7fa9\uff1a\u540c\u6b65
"},{"location":"feedback/designing-data-intensive-applications/glossary/#\u539f\u5b50\u6027","title":"\u539f\u5b50\u6027","text":"atomic
back-pressure
\u63a5\u6536\u65b9\u63a5\u6536\u8cc7\u6599\u901f\u5ea6\u8f03\u6162\u6642\uff0c\u5f37\u5236\u964d\u4f4e\u50b3\u9001\u65b9\u7684\u8cc7\u6599\u50b3\u9001\u901f\u5ea6\uff0c\u4e5f\u7a31\u70ba\u6d41\u63a7\u5236\u3002
"},{"location":"feedback/designing-data-intensive-applications/glossary/#\u6279\u6b21\u8655\u7406","title":"\u6279\u6b21\u8655\u7406","text":"batch process
\u4e00\u7a2e\u8a08\u7b97\u65b9\u5f0f\uff0c\u5b83\u5c07\u4e00\u4e9b\u56fa\u5b9a\u7684\uff08\u91cf\u901a\u5e38\u5f88\u5927\uff09\u8cc7\u6599\u4f5c\u70ba\u8f38\u5165\uff0c\u7d93\u904e\u4e00\u4e9b\u8a08\u7b97\u5f8c\u628a\u65b0\u7684\u8cc7\u6599\u4f5c\u70ba\u8f38\u51fa\u3002\u904e\u7a0b\u4e2d\u4e26\u4e0d\u6703\u4fee\u6539\u8f38\u5165\u7684\u8cc7\u6599\u6e90\u3002
"},{"location":"feedback/designing-data-intensive-applications/glossary/#\u908a\u754c","title":"\u908a\u754c","text":"bounded
\u6709\u4e00\u4e9b\u5df2\u77e5\u7684\u4e0a\u9650\u6216\u5927\u5c0f\u3002\u4f8b\u5982\uff0c\u7db2\u8def\u5ef6\u9072\u60c5\u6cc1\u548c\u53e2\u96c6\u5927\u5c0f\u3002
\u53cd\u7fa9\uff1a\u7121\u908a\u754c
"},{"location":"feedback/designing-data-intensive-applications/glossary/#\u62dc\u5360\u5ead\u932f\u8aa4","title":"\u62dc\u5360\u5ead\u932f\u8aa4","text":"Byzantine fault
\u8868\u73fe\u7570\u5e38\u7684\u7bc0\u9ede\uff0c\u9019\u7a2e\u7570\u5e38\u53ef\u80fd\u4ee5\u4efb\u610f\u65b9\u5f0f\u51fa\u73fe\uff0c\u4f8b\u5982\u5411\u5176\u4ed6\u7bc0\u9ede\u767c\u9001\u77db\u76fe\u6216\u60e1\u610f\u8a0a\u606f\u3002
"},{"location":"feedback/designing-data-intensive-applications/glossary/#\u5feb\u53d6","title":"\u5feb\u53d6","text":"cache
\u4e00\u7a2e\u67b6\u69cb\u4e2d\u7684\u5143\u4ef6\uff0c\u900f\u904e\u5132\u5b58\u6700\u8fd1\u4f7f\u7528\u904e\u7684\u8cc7\u6599\uff0c\u52a0\u5feb\u672a\u4f86\u5c0d\u76f8\u540c\u8cc7\u6599\u7684\u8b80\u53d6\u901f\u5ea6\u3002\u56e0\u70ba\u5feb\u53d6\u4e2d\u901a\u5e38\u5b58\u653e\u90e8\u5206\u8cc7\u6599\uff0c\u6240\u4ee5\u5982\u679c\u5feb\u53d6\u4e2d\u7f3a\u5c11\u67d0\u4e9b\u8cc7\u6599\uff0c\u5247\u5fc5\u9808\u5f9e\u67d0\u4e9b\u5e95\u5c64\u8f03\u6162\u7684\u8cc7\u6599\u5132\u5b58\u7cfb\u7d71\u4e2d\uff0c\u7372\u53d6\u5b8c\u6574\u7684\u8cc7\u6599\u526f\u672c\u3002
"},{"location":"feedback/designing-data-intensive-applications/glossary/#cap","title":"CAP","text":"CAP theorem
\u4e00\u500b\u88ab\u5ee3\u6cdb\u8aa4\u89e3\u7684\u7406\u8ad6\u7d50\u679c\uff0c\u5728\u5be6\u8e10\u4e2d\u662f\u6c92\u6709\u7528\u7684\u3002
"},{"location":"feedback/designing-data-intensive-applications/glossary/#\u56e0\u679c\u95dc\u4fc2","title":"\u56e0\u679c\u95dc\u4fc2","text":"causality
\u4e8b\u4ef6\u4e4b\u9593\u7684\u4f9d\u8cf4\u95dc\u4fc2\uff0c\u7576\u4e00\u4ef6\u4e8b\u767c\u751f\u5728\u53e6\u4e00\u4ef6\u4e8b\u60c5\u4e4b\u524d\u3002\u4f8b\u5982\uff0c\u5f8c\u9762\u7684\u4e8b\u4ef6\u662f\u5c0d\u65e9\u671f\u4e8b\u4ef6\u7684\u56de\u61c9\uff0c\u6216\u8005\u4f9d\u8cf4\u65bc\u66f4\u65e9\u7684\u4e8b\u4ef6\uff0c\u6216\u8005\u61c9\u8a72\u6839\u64da\u5148\u524d\u7684\u4e8b\u4ef6\u4f86\u7406\u89e3\u3002
"},{"location":"feedback/designing-data-intensive-applications/glossary/#\u5171\u8b58","title":"\u5171\u8b58","text":"consensus
\u5206\u6563\u5f0f\u7cfb\u7d71\u7684\u4e00\u500b\u57fa\u672c\u554f\u984c\uff1a\u8a72\u600e\u9ebc\u8b93\u5e7e\u500b\u7bc0\u9ede\u540c\u610f\u67d0\u4e9b\u7d50\u679c\uff08\u4f8b\u5982\uff0c\u54ea\u500b\u7bc0\u9ede\u61c9\u8a72\u662f\u8cc7\u6599\u5eab\u53e2\u96c6\u7684\u9818\u5c0e\u8005\uff09\u3002\u554f\u984c\u6bd4\u4e4d\u770b\u8d77\u4f86\u8981\u56f0\u96e3\u5f97\u591a\u3002
"},{"location":"feedback/designing-data-intensive-applications/glossary/#\u8cc7\u6599\u5009\u5132","title":"\u8cc7\u6599\u5009\u5132","text":"data warehouse
\u4e00\u7a2e\u8cc7\u6599\u5eab\uff0c\u5176\u4e2d\u7684\u8cc7\u6599\u4f86\u81ea\uff08\u900f\u904e ETL\uff09 OLTP \u8cc7\u6599\u5eab\u4e14\u8cc7\u6599\u5009\u5132\u4e2d\u7684\u8cc7\u6599\u901a\u5e38\u5df2\u7d93\u88ab\u6574\u5408\u4e26\u6e96\u5099\u7528\u65bc\u5206\u6790\u76ee\u7684\u3002
"},{"location":"feedback/designing-data-intensive-applications/glossary/#\u8072\u660e\u5f0f","title":"\u8072\u660e\u5f0f","text":"declarative
\u8072\u660e\u67d0\u4e9b\u9700\u8981\u5f97\u5230\u7684\u8cc7\u6599\u6216\u5c6c\u6027\uff0c\u4f46\u4e0d\u77e5\u9053\u5982\u4f55\u5be6\u73fe\u5b83\u7684\u78ba\u5207\u6b65\u9a5f\u3002\u67e5\u8a62\u6700\u4f73\u5316\u5668\uff08query optimizer\uff09\u6703\u900f\u904e\u8072\u660e\u6027\u7684\u67e5\u8a62\u6c7a\u5b9a\u5982\u4f55\u6700\u597d\u5730\u57f7\u884c\u5b83\u3002
"},{"location":"feedback/designing-data-intensive-applications/glossary/#\u53bb\u6b63\u898f\u5316","title":"\u53bb\u6b63\u898f\u5316","text":"denormalize
\u70ba\u4e86\u52a0\u901f\u8b80\u53d6\uff0c\u5728\u8cc7\u6599\u5eab\u4e2d\u5f15\u5165\u4e00\u4e9b\u5197\u9918\u6216\u91cd\u8907\u8cc7\u6599\uff0c\u901a\u5e38\u63a1\u7528\u5feb\u53d6\u6216\u7d22\u5f15\u7684\u5f62\u5f0f\u3002\u53bb\u6b63\u898f\u5316\u7684\u503c\u662f\u4e00\u7a2e\u9810\u5148\u8a08\u7b97\u7684\u67e5\u8a62\u7d50\u679c\uff0c\u50cf\u7269\u5316\u8996\u5716\u3002
\u53cd\u7fa9\uff1a\u6b63\u898f\u5316
"},{"location":"feedback/designing-data-intensive-applications/glossary/#\u884d\u751f\u8cc7\u6599","title":"\u884d\u751f\u8cc7\u6599","text":"derived data
\u4e00\u7a2e\u8cc7\u6599\uff0c\u900f\u904e\u53ef\u91cd\u8907\u57f7\u884c\u7684\u904b\u7b97\u628a\u539f\u59cb\u8cc7\u6599\u5c08\u6210\u884d\u751f\u8cc7\u6599\u3002\u5fc5\u8981\u6642\uff0c\u4f60\u53ef\u4ee5\u57f7\u884c\u8a72\u904b\u7b97\u4e26\u518d\u6b21\u5efa\u7acb\u884d\u751f\u8cc7\u6599\u3002\u884d\u751f\u8cc7\u6599\u901a\u5e38\u7528\u65bc\u63d0\u9ad8\u7279\u5b9a\u8cc7\u6599\u7684\u8b80\u53d6\u901f\u5ea6\u3002\u5e38\u898b\u7684\u884d\u751f\u8cc7\u6599\u6709\u7d22\u5f15\u3001\u5feb\u53d6\u548c\u7269\u5316\u8996\u5716\u3002
"},{"location":"feedback/designing-data-intensive-applications/glossary/#\u78ba\u5b9a\u6027","title":"\u78ba\u5b9a\u6027","text":"deterministic
\u63cf\u8ff0\u4e00\u500b\u51fd\u5f0f\uff0c\u5982\u679c\u7d66\u5b83\u76f8\u540c\u7684\u8f38\u5165\uff0c\u5247\u7e3d\u662f\u7522\u751f\u76f8\u540c\u7684\u8f38\u51fa\u3002\u9019\u610f\u5473\u8457\u5b83\u4e0d\u80fd\u4f9d\u8cf4\u65bc\u96a8\u6a5f\u6578\u5b57\u3001\u6642\u9593\u3001\u7db2\u8def\u901a\u8a0a\u6216\u5176\u4ed6\u4e0d\u53ef\u9810\u6e2c\u7684\u4e8b\u60c5\u3002
"},{"location":"feedback/designing-data-intensive-applications/glossary/#\u5206\u6563\u5f0f\u7cfb\u7d71","title":"\u5206\u6563\u5f0f\u7cfb\u7d71","text":"distributed
\u8b93\u670d\u52d9\u900f\u904e\u591a\u500b\u7bc0\u9ede\u57f7\u884c\uff0c\u4e26\u4ee5\u7db2\u8def\u9023\u7dda\u4f86\u4f5c\u70ba\u6e9d\u901a\u65b9\u5f0f\uff0c\u7576\u90e8\u5206\u7bc0\u9ede\u6545\u969c\u6642\u5177\u6709\u5bb9\u932f\u6027\uff08\u7cfb\u7d71\u7684\u4e00\u90e8\u5206\u767c\u751f\u6545\u969c\u6642\uff0c\u5176\u4ed6\u90e8\u5206\u4ecd\u53ef\u4ee5\u6b63\u5e38\u5de5\u4f5c\uff09\u3002\u901a\u5e38\u60c5\u6cc1\u4e0b\uff0c\u8edf\u9ad4\u7121\u9700\u77ad\u89e3\u6545\u969c\u76f8\u95dc\u7684\u78ba\u5207\u60c5\u6cc1\u3002
"},{"location":"feedback/designing-data-intensive-applications/glossary/#\u6301\u7e8c\u6027","title":"\u6301\u7e8c\u6027","text":"durable
\u4ee5\u67d0\u7a2e\u65b9\u5f0f\u5132\u5b58\u8cc7\u6599\uff0c\u5373\u4f7f\u767c\u751f\u5404\u7a2e\u6545\u969c\uff0c\u4e5f\u4e0d\u6703\u4e1f\u5931\u8cc7\u6599\u3002
"},{"location":"feedback/designing-data-intensive-applications/glossary/#etl","title":"ETL","text":"Extract-Transform-Load
\u8403\u53d6\u3001\u8b8a\u63db\u53ca\u8f09\u5165\uff0c\u5f9e\u6e90\u8cc7\u6599\u5eab\u4e2d\u63d0\u53d6\u8cc7\u6599\uff0c\u5c07\u5176\u8f49\u63db\u70ba\u66f4\u9069\u5408\u5206\u6790\u67e5\u8a62\u7684\u5f62\u5f0f\uff0c\u4e26\u5c07\u5176\u8f09\u5165\u5230\u8cc7\u6599\u5009\u5132\u6216\u6279\u6b21\u8655\u7406\u7cfb\u7d71\u4e2d\u7684\u904e\u7a0b\u3002
"},{"location":"feedback/designing-data-intensive-applications/glossary/#\u6545\u969c\u5207\u63db","title":"\u6545\u969c\u5207\u63db","text":"failover
\u5728\u5177\u6709\u55ae\u4e00\u9818\u5c0e\u8005\u7684\u7cfb\u7d71\u4e2d\uff0c\u6545\u969c\u5207\u63db\u662f\u5c07\u9818\u5c0e\u89d2\u8272\u5f9e\u4e00\u500b\u7bc0\u9ede\u8f49\u79fb\u5230\u53e6\u4e00\u500b\u7bc0\u9ede\u7684\u904e\u7a0b\u3002
"},{"location":"feedback/designing-data-intensive-applications/glossary/#\u5bb9\u932f","title":"\u5bb9\u932f","text":"fault-tolerant
\u5982\u679c\u51fa\u73fe\u554f\u984c\uff08\u4f8b\u5982\uff0c\u6a5f\u5668\u5d29\u6f70\u6216\u7db2\u8def\u9023\u7dda\u5931\u6557\uff09\uff0c\u53ef\u4ee5\u81ea\u52d5\u6062\u5fa9\u3002
"},{"location":"feedback/designing-data-intensive-applications/glossary/#\u6d41\u63a7\u5236","title":"\u6d41\u63a7\u5236","text":"flow control
\u63a5\u6536\u65b9\u63a5\u6536\u8cc7\u6599\u901f\u5ea6\u8f03\u6162\u6642\uff0c\u5f37\u5236\u964d\u4f4e\u50b3\u9001\u65b9\u7684\u8cc7\u6599\u50b3\u9001\u901f\u5ea6\uff0c\u4e5f\u7a31\u70ba\u53cd\u58d3\u3002
"},{"location":"feedback/designing-data-intensive-applications/glossary/#\u96a8\u52d5\u8005","title":"\u96a8\u52d5\u8005","text":"follower, secondary, slave, read replica, hot standby
\u4e00\u7a2e\u8cc7\u6599\u526f\u672c\uff0c\u50c5\u8655\u7406\u9818\u5c0e\u8005\u767c\u51fa\u7684\u8cc7\u6599\u8b8a\u66f4\uff0c\u4e0d\u76f4\u63a5\u63a5\u53d7\u4f86\u81ea\u5ba2\u6236\u7aef\u7684\u4efb\u4f55\u5beb\u5165\u3002
"},{"location":"feedback/designing-data-intensive-applications/glossary/#\u5168\u6587\u6aa2\u7d22","title":"\u5168\u6587\u6aa2\u7d22","text":"full-text search
\u900f\u904e\u4efb\u610f\u95dc\u9375\u5b57\u4f86\u641c\u5c0b\u6587\u5b57\uff0c\u901a\u5e38\u5177\u6709\u9644\u52a0\u7279\u5fb5\uff0c\u4f8b\u5982\u5339\u914d\u985e\u4f3c\u7684\u62fc\u5beb\u8a5e\u6216\u540c\u7fa9\u8a5e\u3002\u5168\u6587\u7d22\u5f15\u662f\u4e00\u7a2e\u652f\u63f4\u9019\u7a2e\u67e5\u8a62\u7684\u6b21\u7d1a\u7d22\u5f15\u3002
"},{"location":"feedback/designing-data-intensive-applications/glossary/#\u5716\u50cf\u5f0f\u6a21\u578b","title":"\u5716\u50cf\u5f0f\u6a21\u578b","text":"graph model
\u4e00\u7a2e\u8cc7\u6599\u7d50\u69cb\uff0c\u7531\u9ede\uff08vertices\uff0c\u53ef\u4ee5\u6307\u5411\u7684\u6771\u897f\uff0c\u4e5f\u7a31\u70ba nodes \u6216 entities\uff09\u548c\u908a\uff08\u5f9e\u4e00\u500b\u9ede\u5230\u53e6\u4e00\u500b\u9802\u9ede\u7684\u9023\u7dda\uff0c\u4e5f\u7a31\u70ba relationships \u6216 arcs\uff09\u7d44\u6210\u3002
"},{"location":"feedback/designing-data-intensive-applications/glossary/#\u96dc\u6e4a","title":"\u96dc\u6e4a","text":"hash
\u5c07\u8f38\u5165\u8f49\u63db\u70ba\u770b\u8d77\u4f86\u50cf\u96a8\u6a5f\u6578\u503c\u7684\u51fd\u5f0f\u3002\u76f8\u540c\u7684\u8f38\u5165\u6703\u8f49\u63db\u70ba\u76f8\u540c\u7684\u6578\u503c\uff0c\u4e0d\u540c\u7684\u8f38\u5165\u4e00\u822c\u6703\u8f49\u63db\u70ba\u4e0d\u540c\u7684\u6578\u503c\uff0c\u4e5f\u53ef\u80fd\u8f49\u63db\u70ba\u76f8\u540c\u6578\u503c\uff08\u4e5f\u88ab\u7a31\u70ba\u885d\u7a81 collision\uff09\u3002
"},{"location":"feedback/designing-data-intensive-applications/glossary/#\u7368\u7acb\u7684","title":"\u7368\u7acb\u7684","text":"idempotent
\u7528\u65bc\u63cf\u8ff0\u4e00\u7a2e\u64cd\u4f5c\u53ef\u4ee5\u5b89\u5168\u5730\u91cd\u8a66\u57f7\u884c\uff08\u985e\u4f3c\u65bc\u78ba\u5b9a\u6027\uff09\uff0c\u5373\u57f7\u884c\u591a\u6b21\u7684\u6548\u679c\u548c\u57f7\u884c\u4e00\u6b21\u7684\u6548\u679c\u76f8\u540c\u3002
"},{"location":"feedback/designing-data-intensive-applications/glossary/#\u7d22\u5f15","title":"\u7d22\u5f15","text":"index
\u4e00\u7a2e\u8cc7\u6599\u7d50\u69cb\u3002\u900f\u904e\u7d22\u5f15\uff0c\u4f60\u53ef\u4ee5\u6839\u64da\u7279\u5b9a\u6b04\u4f4d\u7684\u503c\uff0c\u5728\u6240\u6709\u8cc7\u6599\u8a18\u9304\u4e2d\u9032\u884c\u9ad8\u6548\u6aa2\u7d22\u3002
"},{"location":"feedback/designing-data-intensive-applications/glossary/#\u9694\u96e2\u6027","title":"\u9694\u96e2\u6027","text":"isolation
\u5728\u4ea4\u6613\u4e0a\u4e0b\u6587\u4e2d\uff0c\u7528\u65bc\u63cf\u8ff0\u4e26\u884c\u57f7\u884c\u4ea4\u6613\u7684\u4e92\u76f8\u5e72\u64fe\u7a0b\u5ea6\u3002\u5e8f\u5217\u5316\u9694\u96e2\u6027\u5177\u6709\u6700\u5f37\u7684\u9694\u96e2\u6027\uff0c\u4e0d\u904e\u5176\u5b83\u7a0b\u5ea6\u7684\u9694\u96e2\u4e5f\u901a\u5e38\u88ab\u4f7f\u7528\u3002
"},{"location":"feedback/designing-data-intensive-applications/glossary/#\u806f\u5408","title":"\u806f\u5408","text":"join, document reference, edge
\u5f59\u96c6\u6709\u5171\u540c\u9ede\u7684\u8a18\u9304\u3002\u5728\u4e00\u500b\u8a18\u9304\u8207\u53e6\u4e00\u500b\u8a18\u9304\u6709\u95dc\uff08\u5916\u4f86\u9375\uff0c\u6587\u4ef6\u5f0f\u6a21\u578b\u4e2d\u7684 document reference\uff0c\u5716\u50cf\u5f0f\u6a21\u578b\u7684\u908a edge\uff09\u7684\u60c5\u6cc1\u4e0b\u6700\u5e38\u7528\uff0c\u67e5\u8a62\u9700\u8981\u7372\u53d6\u53c3\u8003\u6240\u6307\u5411\u7684\u8a18\u9304\u3002
"},{"location":"feedback/designing-data-intensive-applications/glossary/#\u9818\u5c0e\u8005","title":"\u9818\u5c0e\u8005","text":"leader, master
\u7576\u8cc7\u6599\u6216\u670d\u52d9\u88ab\u8907\u5236\u5230\u591a\u500b\u7bc0\u9ede\u6642\uff0c\u7531\u9818\u5c0e\u8005\u5206\u767c\u5df2\u6388\u6b0a\u8b8a\u66f4\u7684\u8cc7\u6599\u526f\u672c\u3002\u9818\u5c0e\u8005\u53ef\u4ee5\u900f\u904e\u67d0\u4e9b\u5354\u8b70\u9078\u8209\u7522\u751f\uff0c\u4e5f\u53ef\u4ee5\u7531\u7ba1\u7406\u8005\u624b\u52d5\u9078\u64c7\u3002
"},{"location":"feedback/designing-data-intensive-applications/glossary/#\u7dda\u6027\u5316","title":"\u7dda\u6027\u5316","text":"linearizable
\u8868\u73fe\u70ba\u7cfb\u7d71\u4e2d\u53ea\u6709\u4e00\u4efd\u900f\u904e\u539f\u5b50\u64cd\u4f5c\u66f4\u65b0\u7684\u8cc7\u6599\u526f\u672c\u3002
"},{"location":"feedback/designing-data-intensive-applications/glossary/#\u5c40\u90e8\u6027","title":"\u5c40\u90e8\u6027","text":"locality
\u4e00\u7a2e\u6548\u80fd\u6700\u4f73\u5316\u65b9\u5f0f\uff0c\u5982\u679c\u7d93\u5e38\u5728\u76f8\u540c\u7684\u6642\u9593\u8acb\u6c42\u4e00\u4e9b\u96e2\u6563\u8cc7\u6599\uff0c\u628a\u9019\u4e9b\u8cc7\u6599\u653e\u5230\u4e00\u500b\u4f4d\u7f6e\u3002
"},{"location":"feedback/designing-data-intensive-applications/glossary/#\u9396","title":"\u9396","text":"lock
\u4e00\u7a2e\u4fdd\u8b49\u53ea\u6709\u4e00\u500b\u7dda\u7a0b\u3001\u7bc0\u9ede\u6216\u4ea4\u6613\u53ef\u4ee5\u8a2a\u554f\u7684\u6a5f\u5236\uff0c\u5982\u679c\u5176\u5b83\u7dda\u7a0b\u3001\u7bc0\u9ede\u6216\u4ea4\u6613\u60f3\u8a2a\u554f\u76f8\u540c\u5143\u7d20\uff0c\u5247\u5fc5\u9808\u7b49\u5f85\u9396\u88ab\u91cb\u653e\u3002
"},{"location":"feedback/designing-data-intensive-applications/glossary/#\u65e5\u8a8c","title":"\u65e5\u8a8c","text":"log
\u65e5\u8a8c\u662f\u4e00\u500b\u53ea\u80fd\u4ee5\u8ffd\u52a0\u65b9\u5f0f\u5beb\u5165\u7684\u6a94\u6848\uff0c\u7528\u65bc\u5b58\u653e\u8cc7\u6599\u3002\u9810\u5beb\u5f0f\u65e5\u8a8c\uff08WAL\uff09\u7528\u65bc\u5728\u8cc7\u6599\u5eab\u5d29\u6f70\u6642\u6062\u5fa9\u8cc7\u6599\uff1b\u7d50\u69cb\u5316\u65e5\u8a8c\uff08log-structured\uff09\u4f7f\u7528\u65e5\u8a8c\u4f5c\u70ba\u5b83\u7684\u4e3b\u8981\u5132\u5b58\u683c\u5f0f\uff1b\u8907\u88fd\u578b\u65e5\u8a8c\uff08replication log\uff09\u7528\u65bc\u628a\u5beb\u5165\u5f9e\u9818\u5c0e\u8005\u8907\u88fd\u5230\u96a8\u52d5\u8005\uff1b\u4e8b\u4ef6\u6027\u65e5\u8a8c\uff08event log\uff09\u53ef\u4ee5\u4ee3\u8868\u4e00\u7a2e\u8cc7\u6599\u4e32\u6d41\u5f62\u5f0f\u3002
"},{"location":"feedback/designing-data-intensive-applications/glossary/#\u7269\u5316","title":"\u7269\u5316","text":"materialize
\u9810\u5148\u8a08\u7b97\u4e26\u5beb\u51fa\u7d50\u679c\uff0c\u800c\u4e0d\u662f\u5728\u8acb\u6c42\u6642\u8a08\u7b97\u3002
"},{"location":"feedback/designing-data-intensive-applications/glossary/#\u7bc0\u9ede","title":"\u7bc0\u9ede","text":"node
\u4e00\u500b\u57f7\u884c\u4e2d\u7684\u7a0b\u5e8f\u7684\u55ae\u4f4d\uff0c\u900f\u904e\u7db2\u8def\u8207\u5176\u4ed6\u7bc0\u9ede\u901a\u8a0a\u4ee5\u5b8c\u6210\u67d0\u9805\u4efb\u52d9\u3002
"},{"location":"feedback/designing-data-intensive-applications/glossary/#\u6b63\u898f\u5316","title":"\u6b63\u898f\u5316","text":"normalized
\u4ee5\u6c92\u6709\u5197\u9918\u6216\u91cd\u8907\u7684\u65b9\u5f0f\u9032\u884c\u7d50\u69cb\u5316\u3002 \u5728\u6b63\u898f\u5283\u8cc7\u6599\u5eab\u4e2d\uff0c\u7576\u67d0\u4e9b\u8cc7\u6599\u767c\u751f\u8b8a\u5316\u6642\uff0c\u4f60\u53ea\u9700\u8981\u5728\u4e00\u500b\u5730\u65b9\u9032\u884c\u66f4\u6539\uff0c\u800c\u4e0d\u662f\u5728\u8a31\u591a\u4e0d\u540c\u7684\u5730\u65b9\u8907\u88fd\u5f88\u591a\u6b21\u3002
\u53cd\u7fa9\uff1a\u53bb\u6b63\u898f\u5316
"},{"location":"feedback/designing-data-intensive-applications/glossary/#olap","title":"OLAP","text":"Online Analytic Processing
\u7dda\u4e0a\u5206\u6790\u8655\u7406\u3002\u5176\u7279\u5fb5\u70ba\u805a\u5408\u5927\u91cf\u7684\u8cc7\u6599\uff0c\u4f8b\u5982\uff0c\u8a08\u6578\uff0c\u7e3d\u548c\uff0c\u5e73\u5747\u3002
"},{"location":"feedback/designing-data-intensive-applications/glossary/#oltp","title":"OLTP","text":"Online Transaction Processing
\u7dda\u4e0a\u7570\u52d5\u8655\u7406\u3002\u5176\u6a21\u5f0f\u70ba\u5feb\u901f\u67e5\u8a62\uff0c\u8b80\u53d6\u6216\u5beb\u5165\u5c11\u91cf\u6216\u7279\u5b9a\u7684\u8cc7\u6599\uff0c\u9019\u4e9b\u8cc7\u6599\u901a\u5e38\u900f\u904e\u9375\u7d22\u5f15\u3002
"},{"location":"feedback/designing-data-intensive-applications/glossary/#\u5206\u5340","title":"\u5206\u5340","text":"partitioning, sharding
\u5c07\u55ae\u6a5f\u4e0a\u7684\u5927\u578b\u8cc7\u6599\u96c6\u6216\u8a08\u7b97\u7d50\u679c\u62c6\u5206\u70ba\u8f03\u5c0f\u90e8\u5206\uff0c\u4e26\u5c07\u5176\u5206\u4f48\u5230\u591a\u81fa\u6a5f\u5668\u4e0a\u3002
"},{"location":"feedback/designing-data-intensive-applications/glossary/#\u767e\u5206\u4f4d","title":"\u767e\u5206\u4f4d","text":"percentile
\u900f\u904e\u8a08\u7b97\u6709\u591a\u5c11\u503c\u9ad8\u65bc\u6216\u4f4e\u65bc\u67d0\u500b\u95be\u503c\u4f86\u8861\u91cf\u503c\u5206\u4f48\u7684\u65b9\u6cd5\u3002
\u4f8b\u5982\uff0c\u67d0\u500b\u6642\u9593\u6bb5\u7684\u7b2c 95 \u500b\u767e\u5206\u4f4d\u97ff\u61c9\u6642\u9593\u662f\u6642\u9593 t\uff0c\u5247\u8a72\u6642\u9593\u6bb5\u4e2d\uff0c95%\u7684\u8acb\u6c42\u5b8c\u6210\u6642\u9593\u5c0f\u65bc t\uff0c5%\u7684\u8acb\u6c42\u5b8c\u6210\u6642\u9593\u8981\u6bd4 t \u9577\u3002
"},{"location":"feedback/designing-data-intensive-applications/glossary/#\u4e3b\u7d22\u5f15","title":"\u4e3b\u7d22\u5f15","text":"primary index
\u552f\u4e00\u6a19\u8b58\u8a18\u9304\u7684\u503c \u901a\u5e38\u662f\u6578\u5b57\u6216\u5b57\u4e32 \u3002\u5728\u8a31\u591a\u61c9\u7528\u7a0b\u5f0f\u4e2d\uff0c\u4e3b\u9375\u7531\u7cfb\u7d71\u5728\u5efa\u7acb\u8cc7\u6599\u6642\u751f\u6210\uff08\u4f8b\u5982\uff0c\u6309\u9806\u5e8f\u6216\u96a8\u6a5f\uff09\u3002\u5b83\u5011\u901a\u5e38\u4e0d\u7531\u4f7f\u7528\u8005\u8a2d\u5b9a\u3002
"},{"location":"feedback/designing-data-intensive-applications/glossary/#\u6cd5\u5b9a\u4eba\u6578","title":"\u6cd5\u5b9a\u4eba\u6578","text":"quorum
\u5728\u64cd\u4f5c\u5b8c\u6210\u4e4b\u524d\uff0c\u9700\u8981\u5c0d\u64cd\u4f5c\u9032\u884c\u6295\u7968\u7684\u6700\u5c11\u7bc0\u9ede\u6578\u91cf\u3002
"},{"location":"feedback/designing-data-intensive-applications/glossary/#\u518d\u5e73\u8861","title":"\u518d\u5e73\u8861","text":"rebalance
\u5c07\u8cc7\u6599\u6216\u670d\u52d9\u5f9e\u4e00\u500b\u7bc0\u9ede\u79fb\u52d5\u5230\u53e6\u4e00\u500b\u7bc0\u9ede\u4ee5\u5be6\u73fe\u8ca0\u8f09\u5747\u8861\u3002
"},{"location":"feedback/designing-data-intensive-applications/glossary/#\u8907\u88fd","title":"\u8907\u88fd","text":"replication
\u5728\u5e7e\u500b\u7bc0\u9ede\uff08\u6216\u7a31 replica\uff09\u4e0a\u4fdd\u7559\u76f8\u540c\u8cc7\u6599\u7684\u526f\u672c\uff0c\u4ee5\u4fbf\u5728\u67d0\u4e9b\u7bc0\u9ede\u7121\u6cd5\u8a2a\u554f\u6642\uff0c\u8cc7\u6599\u4ecd\u53ef\u8a2a\u554f\u3002
"},{"location":"feedback/designing-data-intensive-applications/glossary/#\u7db1\u76ee","title":"\u7db1\u76ee","text":"schema
\u4e00\u4e9b\u8cc7\u6599\u7d50\u69cb\u7684\u63cf\u8ff0\uff0c\u5305\u62ec\u5176\u6b04\u4f4d\u548c\u8cc7\u6599\u578b\u5225\u3002\u53ef\u4ee5\u5728\u8cc7\u6599\u4e0d\u540c\u7684\u751f\u547d\u9031\u671f\u6642\u6aa2\u67e5\u8a72\u8cc7\u6599\u662f\u5426\u7b26\u5408\u8a72\u7db1\u76ee\uff0c\u4e14\u8a72\u7db1\u76ee\u53ef\u80fd\u5df2\u7d93\u96a8\u6642\u9593\u6709\u6240\u8b8a\u5316\u4e86\u3002
"},{"location":"feedback/designing-data-intensive-applications/glossary/#\u6b21\u7d1a\u7d22\u5f15","title":"\u6b21\u7d1a\u7d22\u5f15","text":"secondary index
\u8207\u8cc7\u6599\u4e00\u8d77\u7dad\u8b77\u7684\u9644\u52a0\u8cc7\u6599\u7d50\u69cb\uff0c\u4f7f\u4f60\u53ef\u4ee5\u9ad8\u6548\u5730\u641c\u5c0b\u8207\u67d0\u7a2e\u689d\u4ef6\u76f8\u5339\u914d\u7684\u8a18\u9304\u3002
"},{"location":"feedback/designing-data-intensive-applications/glossary/#\u5e8f\u5217\u5316","title":"\u5e8f\u5217\u5316","text":"serializable
\u4fdd\u8b49\u591a\u500b\u4f75\u767c\u4ea4\u6613\u540c\u6642\u57f7\u884c\u6642\uff0c\u5b83\u5011\u7684\u884c\u70ba\u8207\u6309\u9806\u5e8f\u9010\u500b\u57f7\u884c\u4ea4\u6613\u76f8\u540c\u3002
"},{"location":"feedback/designing-data-intensive-applications/glossary/#\u7121\u5171\u4eab","title":"\u7121\u5171\u4eab","text":"shared-nothing
\u8207\u5171\u4eab\u8a18\u61b6\u9ad4\u6216\u5171\u4eab\u78c1\u789f\u67b6\u69cb\u76f8\u6bd4\uff0c\u7368\u7acb\u7bc0\u9ede \u6bcf\u500b\u7bc0\u9ede\u90fd\u6709\u81ea\u5df1\u7684 CPU\uff0c\u8a18\u61b6\u9ad4\u548c\u78c1\u789f\u4e26\u900f\u904e\u7db2\u8def\u6e9d\u901a\u3002
"},{"location":"feedback/designing-data-intensive-applications/glossary/#\u504f\u659c","title":"\u504f\u659c","text":"skew
split brain
\u5169\u500b\u7bc0\u9ede\u540c\u6642\u8a8d\u70ba\u81ea\u5df1\u662f\u9818\u5c0e\u8005\u7684\u60c5\u6cc1\uff0c\u9019\u7a2e\u60c5\u6cc1\u53ef\u80fd\u9055\u53cd\u670d\u52d9\u6240\u80fd\u63d0\u4f9b\u7684\u4fdd\u8b49\u3002
"},{"location":"feedback/designing-data-intensive-applications/glossary/#\u8caf\u5b58\u7a0b\u5e8f","title":"\u8caf\u5b58\u7a0b\u5e8f","text":"stored procedure
\u4e00\u7a2e\u628a\u4ea4\u6613\u908f\u8f2f\u9032\u884c\u7de8\u78bc\u5f8c\u653e\u9032\u8cc7\u6599\u5eab\u4e2d\uff0c\u5b83\u53ef\u4ee5\u5b8c\u5168\u5728\u8cc7\u6599\u5eab\u4e0a\u57f7\u884c\uff0c\u4ea4\u6613\u57f7\u884c\u671f\u9593\u7121\u9700\u8207\u5ba2\u6236\u7aef\u901a\u8a0a\u3002
"},{"location":"feedback/designing-data-intensive-applications/glossary/#\u4e32\u6d41\u8655\u7406","title":"\u4e32\u6d41\u8655\u7406","text":"stream process
\u4e00\u7a2e\u4e00\u76f4\u4fdd\u6301\u8a08\u7b97\u7684\u8655\u7406\u65b9\u5f0f\u3002\u53ef\u4ee5\u6301\u7e8c\u63a5\u6536\u4e8b\u4ef6\u6d41\u4f5c\u70ba\u8f38\u5165\uff0c\u4e26\u5f97\u51fa\u4e00\u4e9b\u8f38\u51fa\u3002
"},{"location":"feedback/designing-data-intensive-applications/glossary/#\u540c\u6b65","title":"\u540c\u6b65","text":"synchronous
\u547c\u53eb\u5de5\u4f5c\u5f8c\u7b49\u5f85\u5176\u5b8c\u6210\u518d\u7e7c\u7e8c\u57f7\u884c\u5176\u4ed6\u5de5\u4f5c\u3002
\u53cd\u7fa9\uff1a\u7570\u6b65
"},{"location":"feedback/designing-data-intensive-applications/glossary/#\u539f\u59cb\u7cfb\u7d71","title":"\u539f\u59cb\u7cfb\u7d71","text":"system of record, source of truth
\u4e00\u7a2e\u7cfb\u7d71\u5132\u5b58\u6700\u539f\u59cb\u7684\u8cc7\u6599\uff08\u901a\u5e38\u4ee3\u8868\u8a72\u8cc7\u6599\u6700\u5177\u6b0a\u5a01\u6216\u8005\u6700\u771f\u5be6\uff09\u3002\u9996\u5148\u5728\u9019\u88e1\u5132\u5b58\u8cc7\u6599\u5f8c\uff0c\u5176\u4ed6\u8cc7\u6599\u5eab\u4fbf\u53ef\u4ee5\u5f9e\u4e2d\u8a08\u7b97\u51fa\u884d\u751f\u8cc7\u6599\u3002
"},{"location":"feedback/designing-data-intensive-applications/glossary/#\u8d85\u6642","title":"\u8d85\u6642","text":"timeout
\u6aa2\u6e2c\u6545\u969c\u7684\u6700\u7c21\u55ae\u65b9\u6cd5\u4e4b\u4e00\uff0c\u5373\u5728\u4e00\u6bb5\u6642\u9593\u5167\u89c0\u5bdf\u662f\u5426\u5f97\u5230\u56de\u61c9\u3002\u4f46\u662f\u4e0d\u53ef\u80fd\u77e5\u9053\u8d85\u6642\u7684\u539f\u56e0\uff08\u53ef\u80fd\u662f\u9060\u7aef\u7bc0\u9ede\u7684\u554f\u984c\u6216\u8005\u7db2\u8def\u6e9d\u901a\u6642\u7684\u554f\u984c\uff09\u3002
"},{"location":"feedback/designing-data-intensive-applications/glossary/#\u5168\u5e8f","title":"\u5168\u5e8f","text":"total order
\u4e00\u7a2e\u6bd4\u8f03\u4ea4\u6613\u7684\u65b9\u6cd5\uff08\u4f8b\u5982\u6642\u9593\u6233\uff09\uff0c\u53ef\u4ee5\u8b93\u4f60\u7e3d\u662f\u8aaa\u51fa\u5169\u4ef6\u4e8b\u4e2d\u54ea\u4e00\u4ef6\u8f03\u65e9\u767c\u751f\uff0c\u54ea\u4ef6\u8f03\u665a\u767c\u751f\u3002\u7136\u800c\u6709\u4e9b\u6771\u897f\u662f\u4e0d\u80fd\u6bd4\u8f03\u5176\u5148\u5f8c\u7684\uff0c\u9019\u6642\u7a31\u5176\u70ba\u70ba\u504f\u5e8f\uff08partial order\uff09\u3002
"},{"location":"feedback/designing-data-intensive-applications/glossary/#\u4ea4\u6613","title":"\u4ea4\u6613","text":"transaction
\u70ba\u4e86\u7c21\u5316\u5bb9\u932f\uff08fault tolerance\uff09\u548c\u4e26\u884c\uff08concurrency\uff09\u554f\u984c\uff0c\u5c07\u5e7e\u500b\u8b80\u5beb\u64cd\u4f5c\u5206\u7d44\u5230\u4e00\u500b\u908f\u8f2f\u55ae\u5143\u4e2d\u3002
"},{"location":"feedback/designing-data-intensive-applications/glossary/#\u5169\u968e\u6bb5\u63d0\u4ea4","title":"\u5169\u968e\u6bb5\u63d0\u4ea4","text":"2PC, two-phase commit
\u4e00\u7a2e\u78ba\u4fdd\u591a\u500b\u7bc0\u9ede\u5168\u90e8\u63d0\u4ea4\u6216\u5168\u90e8\u4e2d\u6b62\u4ea4\u6613\u7684\u6f14\u7b97\u6cd5\u3002
"},{"location":"feedback/designing-data-intensive-applications/glossary/#\u5169\u968e\u6bb5\u9396","title":"\u5169\u968e\u6bb5\u9396","text":"2PL, two-phase locking
\u4e00\u7a2e\u7528\u65bc\u5be6\u73fe\u5e8f\u5217\u5316\u9694\u96e2\u7684\u6f14\u7b97\u6cd5\uff0c\u8a72\u6f14\u7b97\u6cd5\u6703\u8ce6\u4e88\u9396\u65bc\u4ea4\u6613\u4e2d\u6240\u6709\u63a5\u89f8\u5230\u7684\u8cc7\u6599\uff0c\u76f4\u5230\u4ea4\u6613\u7d50\u675f\u3002
"},{"location":"feedback/designing-data-intensive-applications/glossary/#\u7121\u908a\u754c","title":"\u7121\u908a\u754c","text":"unbounded
\u6c92\u6709\u4efb\u4f55\u5df2\u77e5\u7684\u4e0a\u9650\u6216\u5927\u5c0f\u3002\u53cd\u7fa9\u8a5e\u662f\u908a\u754c bounded \u3002
\u53cd\u7fa9\uff1a\u908a\u754c
"},{"location":"feedback/distributed-systems-with-node.js/","title":"Distributed Systems with Node.js","text":"\u53c3\u8003\u66f8\u7c4d \u4f7f\u7528 Repo Distributed-Systems-with-Node.js evan361425/distributed-node"},{"location":"feedback/distributed-systems-with-node.js/#\u8aaa\u660e","title":"\u8aaa\u660e","text":"\u50b3\u7d71\u4e0a\uff0c\u61c9\u7528\u7a0b\u5f0f\u7686\u70ba\u540c\u4e00\u5305\u7a0b\u5f0f\u78bc\u4e2d\uff0c\u9019\u6642\u6703\u9020\u6210\u4ec0\u9ebc\u554f\u984c\uff1f
\u6574\u9ad4\u4f86\u8aaa\uff0c\u9019\u6a23\u7684\u505a\u6cd5\u6210\u672c\u592a\u9ad8\u4e86\u3002
\u5206\u6563\u5f0f\u7cfb\u7d71\uff0c\u5373\u662f\u628a\u4e00\u500b\u5927\u578b\u61c9\u7528\u7a0b\u5f0f\uff0c\u62c6\u6210\u5e7e\u500b\u5c0f\u7684\u670d\u52d9\u3002 \u9019\u6642\u4ecd\u6703\u9047\u5230\u50b3\u7d71\u505a\u6cd5\u4e0d\u6703\u9047\u5230\u7684\u554f\u984c\uff1a
\u4e4b\u5f8c\u6703\u4f7f\u7528\u7684\u7bc4\u4f8b\u67b6\u69cb\u82e5\u7121\u8aaa\u660e\u5247\u70ba\uff1a
\u8b1b\u89e3\u9806\u5e8f\uff1a
\uff08\u5f8c\u9762\u7684\u300c\u554f\u984c x\u300d\u4ee3\u8868\u5617\u8a66\u89e3\u6c7a\u7684\u554f\u984c\uff09
\u4e0a\u4e00\u4efd\u5831\u544a\u8aaa\u660e Container \u7684\u50f9\u503c\u548c\u5efa\u69cb\u908f\u8f2f\u3002\u800c Docker \u4e0d\u50c5\u4f5c\u70ba\u5305\u88dd\u61c9\u7528\u7a0b\u5f0f\u7684\u5de5\u5177\uff0c\u4e5f\u5e6b\u6211\u5011\u7ba1\u7406 Container\u3002
\u4f46\u662f\u4ecd\u6709\u4e00\u4e9b\u72c0\u6cc1\u9700\u8981\u89e3\u6c7a\uff1a
\u9019\u6642\u4fbf\u9700\u8981\u4e00\u500b\u8abf\u5ea6\u5bb9\u5668\uff08Container\uff09\u7684\u5de5\u5177\u3002
"},{"location":"feedback/distributed-systems-with-node.js/container-orchestration-and-misc/#kubernetes","title":"Kubernetes","text":"Kubernetes \u53ef\u4ee5\u89e3\u6c7a\u4e0a\u8ff0\u63d0\u5230\u7684\u554f\u984c\u3002\u63a5\u4e0b\u4f86\u6703\u5148\u7c21\u55ae\u4ecb\u7d39\u5176\u4e2d\u5404\u540d\u8a5e\u4ee3\u8868\u7684\u610f\u7fa9\uff0c\u7136\u5f8c\u518d\u5be6\u4f5c\uff0c\u9019\u6a23\u5c0d\u65bc\u5be6\u4f5c\u6642\u64cd\u4f5c\u7684\u5404\u500b\u6307\u4ee4\u5c31\u6703\u6bd4\u8f03\u6709\u611f\u3002
"},{"location":"feedback/distributed-systems-with-node.js/container-orchestration-and-misc/#\u55ae\u4f4d","title":"\u55ae\u4f4d","text":"\u4ee5\u4e0b\u5c07\u9010\u4e00\u4ecb\u7d39 Kubernetes \u7684\u57fa\u672c\u55ae\u4f4d\u3002
\u7ba1\u7406\u5bb9\u5668\u5316\u7684\u61c9\u7528\u7a0b\u5f0f\uff0c\u9664\u4e86 Docker \u5916\uff0c\u4e0a\u4e00\u4efd\u5831\u544a\u63d0\u5230\u7684 rkt \u4e5f\u662f\u5141\u8a31\u7684\u61c9\u7528\u7a0b\u5f0f\u3002
"},{"location":"feedback/distributed-systems-with-node.js/container-orchestration-and-misc/#volume","title":"Volume","text":"\u548c Host \u7684 filesystem \u505a\u9023\u63a5\u7684\u670d\u52d9\uff0c\u5c0d Container \u63d0\u4f9b\u8cc7\u6599\u5b58\u53d6\u7684\u5730\u65b9\u3002
"},{"location":"feedback/distributed-systems-with-node.js/container-orchestration-and-misc/#pod","title":"Pod","text":"\u7528\u4f86\u5305\u88dd Container \u548c Volume \u7684\u55ae\u4f4d\uff0c\u4e00\u500b Pod \u6703\u88ab\u5206\u914d\u5230\u4e00\u500b IP\u3002\u82e5 Pod \u4e2d\u542b\u6709\u591a\u7684 Container \u7684\u8a71\uff0c\u5404\u500b Container \u6703\u5171\u7528\u8a72\u7d44 IP\u3002
\u6709\u4e0a\u8ff0\u4e09\u500b\u55ae\u4f4d\u53ef\u4ee5\u756b\u51fa\u4e00\u500b\u5716\uff1a
"},{"location":"feedback/distributed-systems-with-node.js/container-orchestration-and-misc/#node","title":"Node","text":"\u5982\u540c Docker \u7ba1\u7406 Container \u4e00\u822c\uff0cNode \u5c31\u662f\u7ba1\u7406 Pod \u7684\u55ae\u4f4d\u3002 \u4e00\u500b Node \u5e95\u4e0b\u9700\u8981\u4e00\u4e9b\u8f14\u52a9\u5de5\u5177\u4f86\u5e6b\u52a9\u7ba1\u7406\u5404\u500b Pod \u548c Container\uff1a
\u7528\u4f86\u7ba1\u7406 Node\uff0c\u4e26\u5c0d\u5916\u958b\u653e API\uff0c\u63d0\u4f9b\u9014\u5f91\u53bb\u64cd\u4f5c\u5404\u500b Node\u3002 \u5982\uff1a\u958b\u767c\u8005\u53ef\u4ee5\u901a\u904e kubectl
\u900f\u904e Master \u53bb\u64cd\u4f5c\u5404\u500b Node\u3002 \uff08\u985e\u4f3c\u65bc Docker CLI
\u900f\u904e Daemon
\u53bb\u64cd\u4f5c\u5404\u500b Container
\uff09
\u4e00\u7d44\u7531 Master \u548c\u591a\u500b Node \u7d44\u6210\u7684\u7fa4\u7d44\u3002
"},{"location":"feedback/distributed-systems-with-node.js/container-orchestration-and-misc/#\u5b8c\u6574\u6982\u7565\u5716","title":"\u5b8c\u6574\u6982\u7565\u5716","text":""},{"location":"feedback/distributed-systems-with-node.js/container-orchestration-and-misc/#\u6982\u5ff5","title":"\u6982\u5ff5","text":"\u6bcf\u6b21\u547c\u53eb Master \u505a\u4e8b\u60c5\uff0c\u4e8b\u5be6\u4e0a\u5c31\u662f\u6307\u5b9a\u4e00\u500b Cluster \u61c9\u8a72\u6709\u7684\u72c0\u614b\uff0c\u5982\uff1a
\u6211\u5e0c\u671b\u67d0\u67d0 Node \u88e1\u9762\u6709 10 \u500b\u7248\u672c 2 \u7684 Pod\u3002
\u6b64\u6642 Kubernetes \u5c31\u6703\u91dd\u5c0d\u8a72\u72c0\u614b\u958b\u59cb\u505a\u4e8b\uff0c\u4e0d\u7ba1\u662f\u964d\u4f4e\u3001\u5347\u9ad8\u6578\u91cf\u6216\u5347\u964d\u7248\u672c\u7684\u64cd\u4f5c\u90fd\u662f\u7531 Kubernetes \u53bb\u57f7\u884c\u3002
\u6b64\u8655\u5305\u62ec\u57f7\u884c\u908f\u8f2f\uff0c\u4f8b\u5982\u9810\u671f 10 \u500b Pod\uff0c\u73fe\u6709 4 \u500b\uff0c\u9700\u589e\u52a0 6 \u500b\uff0c\u6b64\u8655\u7684 6 \u500b\u5c31\u662f Kubernetes \u81ea\u884c\u53bb\u8a08\u7b97\u51fa\u7684\u6578\u5b57\u3002
\u63a5\u4e0b\u4f86\u6703\u4ecb\u7d39\u5e7e\u500b\u5728\u672c\u6b21\u5be6\u4f5c\u6703\u61c9\u7528\u5230\u7684\u89c0\u5ff5\u3002
\u7528\u4f86\u8868\u9054\u90e8\u7f72\u6642\u6b32\u9054\u6210\u7684\u72c0\u614b\uff0c\u901a\u5e38\u662f\u6700\u5e38\u63a5\u89f8\u7684\u5de5\u5177\u3002
\u72c0\u614b\u53ef\u80fd\u5305\u62ec\u6578\u91cf\u3001\u7248\u672c\u7b49\u3002
"},{"location":"feedback/distributed-systems-with-node.js/container-orchestration-and-misc/#selector","title":"Selector","text":"\u7528\u4f86\u6307\u5b9a\u7279\u5b9a Pod \u7684\u689d\u4ef6\uff0c\u4f8b\u5982\uff1a\u6709\u9ad8\u904b\u7b97\u9700\u6c42\u7684\u5c31\u6703\u8981\u6c42\u6709 machine:physical
\u9019\u500b Label \u7684 Pod\u3002
\u7528\u4f86\u5e6b Node \u548c Pod \u8cbc\u6a19\u7c64\uff0c\u4ee5 Node.js \u70ba\u4f8b\uff1a
platform:node
playform-version:v14
machine:physical
kernel:3.16
app:web-api
app:recipe-api
Label \u4e0d\u5fc5\u552f\u4e00\uff0c\u4f60\u53ef\u4ee5\u91cd\u8907\u8a2d\u5b9a\u4e00\u6a23\u7684 key\uff0c\u5982\uff1aplatform:node
\u3001platform:alpine
Kubernetes \u6703\u6e2c\u8a66\u73fe\u6709\u74b0\u5883\uff08\u5982 CPU/Memory\uff09\u662f\u5426\u9069\u5408\u6dfb\u52a0 Pod\u3002\u82e5\u7121\uff0c\u5247\u7b49\u5f85\u3002
\u9810\u8a2d\u505a Scheduling \u7684\u5de5\u5177\u70ba kube-scheduler\u3002
"},{"location":"feedback/distributed-systems-with-node.js/container-orchestration-and-misc/#controller","title":"Controller","text":"\u7528\u4f86\u63a7\u5236 Kubernetes \u5404\u7a2e\u72c0\u614b\u7684\u63a7\u5236\u5668\uff0c\u901a\u5e38\u958b\u767c\u8005\u4e0d\u6703\u76f4\u63a5\u63a5\u89f8\u3002
"},{"location":"feedback/distributed-systems-with-node.js/container-orchestration-and-misc/#replicaset","title":"ReplicaSet","text":"\u9664\u4e86 ReplicaSet \u5916\uff0c\u6839\u64da\u9700\u6c42\u9084\u6709\u5176\u4ed6\u7a2e\u985e\u7684\u7fa4\u7d44\uff0c\u5982\uff1a
Stateful \u7684\u61c9\u7528\u7a0b\u5f0f\u5728\u9019\u5e7e\u6b21\u5831\u544a\u90fd\u4e0d\u6703\u8a0e\u8ad6\uff0c\u56e0\u70ba\u5c0d\u65bc\u9700\u8981\u5132\u5b58\u72c0\u614b\u7684\u61c9\u7528\u7a0b\u5f0f\uff0c\u5176\u5efa\u69cb\u3001\u90e8\u7f72\u7684\u7b56\u7565\u662f\u53e6\u4e00\u9805\u9818\u57df\u3002
"},{"location":"feedback/distributed-systems-with-node.js/container-orchestration-and-misc/#probe","title":"Probe","text":"\u7528\u4f86\u505a Health Check\u3002
\u5982\u540c Docker \u6703\u6c7a\u5b9a\u54ea\u4e00\u500b Container \u6709\u5c0d\u5916\u7684 port \u4e00\u6a23\uff0cService \u4e5f\u6703\u5229\u7528 Selector \u6c7a\u5b9a\u54ea\u4e00\u500b Pod \u662f\u53ef\u4ee5\u5c0d\u5916\u7684\u3002 \u985e\u4f3c\u65bc reverse-proxy \u822c\uff0c\u6c7a\u5b9a\u5916\u90e8\u54ea\u4e9b\u8acb\u6c42\u53ef\u4ee5\u9001\u9032 Pod \u88cf\u9762\u3002
\u5728\u524d\u5e7e\u6b21\u5831\u544a\u4e2d\u5e38\u5e38\u63d0\u5230 service\uff0c\u5176\u4ee3\u8868\u7684\u610f\u7fa9\u662f\u670d\u52d9\u6216\u61c9\u7528\u7a0b\u5f0f\uff0c\u6709\u5225\u65bc\u6b64\u8655\u63d0\u5230\u7684 Service
"},{"location":"feedback/distributed-systems-with-node.js/container-orchestration-and-misc/#ingress","title":"Ingress","text":"\u7ba1\u7406 Cluster \u5916\u90e8\u7684\u8acb\u6c42\u3002
"},{"location":"feedback/distributed-systems-with-node.js/container-orchestration-and-misc/#alternatives","title":"Alternatives","text":"\u7531\u4e0a\u8ff0\u53ef\u77e5\uff0cKubernetes \u64c1\u6709\u975e\u5e38\u8c50\u5bcc\u7684\u529f\u80fd\uff0c\u4e26\u4e14\u53ef\u4ee5\u900f\u904e\u591a\u7a2e\u65b9\u5f0f\u9054\u6210\u540c\u4e00\u500b\u76ee\u7684\uff08\u4f8b\u5982 dev/stg \u7684\u74b0\u5883\u5206\u5272\uff09\u3002\u9019\u88e1\u4e5f\u4e26\u672a\u5b8c\u5168\u6db5\u84cb Kubernetes \u7684\u6982\u5ff5\uff08\u4f8b\u5982\u4ee5 etcd \u505a\u5132\u5b58\u7684\u6f14\u7b97\u6cd5\uff09
Apache Mesos \u548c Apache Marathon \u7684\u7d44\u5408\u80fd\u9054\u5230\u985e\u4f3c Kubernetes \u7684\u529f\u80fd\u3002 Docker Swarm \u662f Docker \u539f\u751f\u7684\u5bb9\u5668\u5316\u8abf\u5ea6\u5de5\u5177\uff0c\u4f46 Docker \u5df2\u7d93\u6368\u68c4\u4e26\u6539\u63a1\u548c Kubernetes \u7684\u517c\u5bb9\u4e86\u3002
"},{"location":"feedback/distributed-systems-with-node.js/container-orchestration-and-misc/#minikube","title":"minikube","text":"\u70ba\u4e86\u7c21\u5316\u5be6\u4f5c\u4e0a\u9700\u8981\u505a\u7684\u8a2d\u5b9a\uff0c\u672c\u6b21\u5be6\u4f5c\u6703\u900f\u904e minikube \u4f86\u64cd\u4f5c\u3002minikube \u662f\u4e00\u500b\u7c21\u5316\u7248\u7684 Kubernetes\uff0c\u4ed6\u6e1b\u5c11\u5f88\u591a\u529f\u80fd\u7684\u8a2d\u5b9a\uff0c\u8b93\u4f7f\u7528\u8005\u53ef\u4ee5\u5feb\u901f\u958b\u59cb\u5be6\u4f5c\uff0c\u4e26\u4e14\u628a Master/Node \u878d\u5408\u518d\u4e00\u8d77\u3002
kubectl version --client
brew install kubernetes-cli
minikube version
brew install minikube
$ minikube start\n\ud83d\ude04 minikube v1.20.0 on Darwin 11.4\n\ud83c\udf89 minikube 1.22.0 is available! Download it: https://github.com/kubernetes/minikube/releases/tag/v1.22.0\n\u2728 Using the hyperkit driver based on existing profile\n\ud83d\udca1 To disable this notice, run: 'minikube config set WantUpdateNotification false'\n\n\ud83d\udc4d Starting control plane node minikube in cluster minikube\n\ud83d\udd04 Restarting existing hyperkit VM for \"minikube\" ...\n\ud83d\udc33 Preparing Kubernetes v1.20.2 on Docker 20.10.6 ...\n\ud83d\udd0e Verifying Kubernetes components...\n \u25aa Using image k8s.gcr.io/ingress-nginx/controller:v0.44.0\n \u25aa Using image kubernetesui/dashboard:v2.1.0\n \u25aa Using image docker.io/jettech/kube-webhook-certgen:v1.5.1\n \u25aa Using image kubernetesui/metrics-scraper:v1.0.4\n \u25aa Using image gcr.io/k8s-minikube/storage-provisioner:v5\n \u25aa Using image docker.io/jettech/kube-webhook-certgen:v1.5.1\n\ud83d\udd0e Verifying ingress addon...\n\ud83c\udf1f Enabled addons: storage-provisioner, default-storageclass, ingress, dashboard\n\ud83c\udfc4 Done! kubectl is now configured to use \"minikube\" cluster and \"default\" namespace by default\n
$ kubectl get pods\nNo resources found in default namespace.\n
\u56e0\u70ba\u9810\u8a2d\u4f7f\u7528 default
namespace
$ kubectl get namespace\nNAME STATUS AGE\ndefault Active 48d\ningress-nginx Active 48d\nkube-node-lease Active 48d\nkube-public Active 48d\nkube-system Active 48d\nkubernetes-dashboard Active 48d\n
$ kubectl get pods --namespace=kube-system\nNAME READY STATUS RESTARTS AGE\ncoredns-74ff55c5b-sq5jt 1/1 Running 1 48d\netcd-minikube 1/1 Running 1 48d\nkube-apiserver-minikube 1/1 Running 1 48d\nkube-controller-manager-minikube 1/1 Running 1 48d\nkube-proxy-vslx5 1/1 Running 1 48d\nkube-scheduler-minikube 1/1 Running 1 48d\nstorage-provisioner 1/1 Running 2 48d\n
$ kubectl get nodes\nNAME STATUS ROLES AGE VERSION\nminikube Ready control-plane,master 48d v1.20.2\n
docker ps
\u518d\u5957\u7528 minikube \u7684 Docker daemon eval $(minikube -p minikube docker-env)
$ minikube -p minikube docker-env\nexport DOCKER_TLS_VERIFY=\"1\"\nexport DOCKER_HOST=\"tcp://192.168.64.2:2376\"\nexport DOCKER_CERT_PATH=\"/Users/evan.lu/.minikube/certs\"\nexport MINIKUBE_ACTIVE_DOCKERD=\"minikube\"\n\n# To point your shell to minikube's docker-daemon, run:\n# eval $(minikube -p minikube docker-env)\n
\u518d\u4e00\u6b21\u547c\u53eb docker ps
$ docker ps\nCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES\nc3a17f71f9f9 435df390f367 \"/usr/bin/dumb-init \u2026\" 35 minutes ago Up 35 minutes k8s_controller_ingress-nginx-controller-5d88495688-ljjlx_ingress-nginx_44335178-30e5-4dc5-a481-7980627f281d_1\n825f8d008c8f 86262685d9ab \"/metrics-sidecar\" 35 minutes ago Up 35 minutes k8s_dashboard-metrics-scraper_dashboard-metrics-scraper-f6647bd8c-zbbkd_kubernetes-dashboard_13929488-084b-407c-9339-1b6b7b7feb2d_1\n8258d336d0d1 6e38f40d628d \"/storage-provisioner\" 35 minutes ago Up 35 minutes k8s_storage-provisioner_storage-provisioner_kube-system_182b3e9c-2cd2-429f-aa0f-3103f916f32a_2\n9edd75250040 9a07b5b4bfac \"/dashboard --insecu\u2026\" 35 minutes ago Up 35 minutes k8s_kubernetes-dashboard_kubernetes-dashboard-968bcb79-4l99k_kubernetes-dashboard_5cfcc5ce-7fb2-4304-baa1-6bf491e71469_1\nc53e01b79ee7 k8s.gcr.io/pause:3.2 \"/pause\" 35 minutes ago Up 35 minutes 0.0.0.0:80->80/tcp, :::80->80/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp k8s_POD_ingress-nginx-controller-5d88495688-ljjlx_ingress-nginx_44335178-30e5-4dc5-a481-7980627f281d_1\n72d0bf46751a k8s.gcr.io/pause:3.2 \"/pause\" 35 minutes ago Up 35 minutes k8s_POD_storage-provisioner_kube-system_182b3e9c-2cd2-429f-aa0f-3103f916f32a_1\nb5ef7f9450a2 43154ddb57a8 \"/usr/local/bin/kube\u2026\" 35 minutes ago Up 35 minutes k8s_kube-proxy_kube-proxy-vslx5_kube-system_e9319a11-d048-41ed-8cb1-92a0a17d67b5_1\n0cb200215df8 bfe3a36ebd25 \"/coredns -conf /etc\u2026\" 35 minutes ago Up 35 minutes k8s_coredns_coredns-74ff55c5b-sq5jt_kube-system_8f238e64-e20d-4899-8a46-96d783fa8250_1\n7ffd1a33f25c k8s.gcr.io/pause:3.2 \"/pause\" 35 minutes ago Up 35 minutes k8s_POD_dashboard-metrics-scraper-f6647bd8c-zbbkd_kubernetes-dashboard_13929488-084b-407c-9339-1b6b7b7feb2d_1\nb589a1d27625 k8s.gcr.io/pause:3.2 \"/pause\" 35 minutes ago Up 35 minutes k8s_POD_kubernetes-dashboard-968bcb79-4l99k_kubernetes-dashboard_5cfcc5ce-7fb2-4304-baa1-6bf491e71469_1\n809d46696a2e k8s.gcr.io/pause:3.2 \"/pause\" 35 minutes ago Up 35 minutes k8s_POD_kube-proxy-vslx5_kube-system_e9319a11-d048-41ed-8cb1-92a0a17d67b5_1\na6e5be9a3bb9 k8s.gcr.io/pause:3.2 \"/pause\" 35 minutes ago Up 35 minutes k8s_POD_coredns-74ff55c5b-sq5jt_kube-system_8f238e64-e20d-4899-8a46-96d783fa8250_1\n41d81fb8bbd9 0369cf4303ff \"etcd --advertise-cl\u2026\" 35 minutes ago Up 35 minutes k8s_etcd_etcd-minikube_kube-system_cf26ec9554c6f440822285b6ff9668f3_1\nc7a6eca2d3f9 ed2c44fbdd78 \"kube-scheduler --au\u2026\" 35 minutes ago Up 35 minutes k8s_kube-scheduler_kube-scheduler-minikube_kube-system_6b4a0ee8b3d15a1c2e47c15d32e6eb0d_1\n3e9a5a9df7da a27166429d98 \"kube-controller-man\u2026\" 35 minutes ago Up 35 minutes k8s_kube-controller-manager_kube-controller-manager-minikube_kube-system_474c55dfb64741cc485e46b6bb9f2dc0_1\ndcbf747b8975 a8c2fdb8bf76 \"kube-apiserver --ad\u2026\" 35 minutes ago Up 35 minutes k8s_kube-apiserver_kube-apiserver-minikube_kube-system_0a7845e36bfd593e2ff9a027038089d3_1\nac54b241757d k8s.gcr.io/pause:3.2 \"/pause\" 35 minutes ago Up 35 minutes k8s_POD_kube-scheduler-minikube_kube-system_6b4a0ee8b3d15a1c2e47c15d32e6eb0d_1\n6a91f7f8e57c k8s.gcr.io/pause:3.2 \"/pause\" 35 minutes ago Up 35 minutes k8s_POD_kube-controller-manager-minikube_kube-system_474c55dfb64741cc485e46b6bb9f2dc0_1\n495996cf491c k8s.gcr.io/pause:3.2 \"/pause\" 35 minutes ago Up 35 minutes k8s_POD_kube-apiserver-minikube_kube-system_0a7845e36bfd593e2ff9a027038089d3_1\n6ea9c36a7ff8 k8s.gcr.io/pause:3.2 \"/pause\" 35 minutes ago Up 35 minutes k8s_POD_etcd-minikube_kube-system_cf26ec9554c6f440822285b6ff9668f3_1\n
"},{"location":"feedback/distributed-systems-with-node.js/container-orchestration-and-misc/#dashboard","title":"Dashboard","text":"\u6709\u4e00\u500b UI \u4ecb\u9762\u6703\u8b93\u4f60\u5c0d Kubernetes \u66f4\u4e86\u89e3
$ minikube dashboard\n\ud83e\udd14 Verifying dashboard health ...\n\ud83d\ude80 Launching proxy ...\n\ud83e\udd14 Verifying proxy health ...\n\ud83c\udf89 Opening http://127.0.0.1:56616/api/v1/namespaces/kubernetes-dashboard/services/http:kubernetes-dashboard:/proxy/ in your default browser...\n
minikube \u5f88\u9069\u5408\u7528\u4f86\u505a local \u7aef\u6e2c\u8a66\u6216\u6559\u5b78\uff0c\u4f46\u662f\u5c0d\u65bc\u7dda\u4e0a\u74b0\u5883\uff0c\u4ecd\u5efa\u8b70\u76f4\u63a5\u5b89\u88dd Kubernetes\u3002
"},{"location":"feedback/distributed-systems-with-node.js/container-orchestration-and-misc/#\u90e8\u7f72\u61c9\u7528\u7a0b\u5f0f","title":"\u90e8\u7f72\u61c9\u7528\u7a0b\u5f0f","text":"\u76ee\u6a19\uff1a
\u958b\u59cb\u90e8\u7f72\u61c9\u7528\u7a0b\u5f0f\u4e4b\u524d\uff0c\u5148\u628a\u61c9\u7528\u7a0b\u5f0f\u7528 image \u5305\u88dd\u597d\u3002
"},{"location":"feedback/distributed-systems-with-node.js/container-orchestration-and-misc/#\u61c9\u7528\u7a0b\u5f0f","title":"\u61c9\u7528\u7a0b\u5f0f","text":"\u5fc5\u9808\u4f7f\u7528 minikube \u7684 Docker \u5efa\u7f6e image\u3002
eval $(minikube -p minikube docker-env)\ndocker build . -t recipe-api:latest\n
"},{"location":"feedback/distributed-systems-with-node.js/container-orchestration-and-misc/#\u90e8\u7f72","title":"\u90e8\u7f72","text":"\u5206\u5225\u90e8\u7f72\u61c9\u7528\u7a0b\u5f0f\u548c Service
"},{"location":"feedback/distributed-systems-with-node.js/container-orchestration-and-misc/#\u61c9\u7528\u7a0b\u5f0f_1","title":"\u61c9\u7528\u7a0b\u5f0f","text":"tldrH4sIAAAAAAAACs1c245a2RH9lRHPbLTvF79NFCXxSzTKRMrDZB721UbBTYduzyUj/3vWPnRzjtuGLqBbPpYsQVMcqMXadVlV8MfiJn6oizeLv9dfv/vzNn/8UG/uF8tFW2/q3+JN2eCxm4+bzXJRHh9888diXfAM/AGGX3/6L3V3t97eLN4IszLLxW18V+/6E/uNwwWGO4cr/IB73wncz+/Xm/L2ptTf8PTl4u59vN0/2amqg5CeRRE4095IJo03LKukKm9Zc2EOFycZLxf3v9/2F9/VfB9v3m0m7+cfkz/dxh38ejt500/e5O123ZH5SXu/lJr/jLe9/h+u8pP0emkU7u+29/F+gITjwfvfO7B/LPJ2s93hqmkT838Wj89a3H2Imw3uru/+st5sKl63xc1dxYcQ79536Hfx126dY7+M+LRcbGKqGzyyeLj5w8Mb4oAf/3+GiVe+2VoUE6k2pqMrjDdrGefK5ZaVMaId4CMZvwx88nP4lLJT+OzSiFnAJ6IMThXNXBSGaWsEUzx5ZkJ0VRVfWhMH+EjGB/ju62/3I3L/3N87DZoaQTNBgnP+KUjDRd8s3t6829W7u8WLo4YYse2vjz/s1rf9HfdX/H6zfofXX3xYlx47PnXgisjwmDMndWKaO8+49Y7FIKzVgCLkMSaQjK8BTk+AcxYfr9LuCHT/qum7H+vul/Xwkt8KPqNk0jInlqvNTGuvmMIJZC0qZTQvUhV3gI9kTIaPB2+tFYLlEIYPozCJsMlkyi7Ehj96eyIWOrnUxh4H9983P2zLN0S2GOUKL4H55iTTtWnGcykIeTYX0WNe1GO2oxhfEBAvwHgaMI1d6mm+cWYZwiziJcmxR3SJKDyg+263/Xg7IvvXh7unD745F7XhybgiHqeeKxJJfn75D6STOQYXq5csc6OZVqkyURxnUdoiUhRWpzE9kYzJYSLrKLPLgaWCwK1TkUylbFhN0klug+UyHQ8Tlvt5hwlVc8gyWCZcDKgktWdKwr2SVY3cNMFdOiBLMr4gTFyAsfy8RJhpmPAGby7UjIPiUWgqVOyqec6Ujl4VbiIKzrEqpRiTeVt9xImsnFkVgamyjqlYLVNWNxmb0imf4K3Tet681QhQOrvGiu/uSe6YDIhZKtico3Y8Rn5AlmR8AW8vwHjCWyf9XHlLOpCP6BJP7zXpzZ172qfpjZgPSMHtddIbiUePcBNJdw3cgp/L0inexDhGOpSvg7cqwvjk0bZmOzSwmQkRGqu61hRzTMWMwYNkfE3TJiZx11i+BHpH4i7C0Pq2zqBtq1q14HCGGq+oaGs0qAJNYIKX5KziRdUxr5GMX0iseiK3GK9nKbdYWR2AkKwirDDdnAAkKTDoAPhLMhU9wgE/kjGZgEqYLHRqjIti0YzgQijvG2s6lIpIXq3Tx+sCL+XSen+Sn9+6NGhKQmcxhXmLFkX7CJWlIP7E5kuINQsZ1QFckvEF5LwA5gl3vbBL6+QcS4PaTDW8okXkHqfZ+4o4zxPjqrXcoD3XOna+JGMydZFYpNU1sOqcwkGA9K1iMSzwlEwJ+KT4CfXaiflT10hTdKqGOct7DcKRaxrk1cB5sjLGymsY5TCK8QXUvQBm+QTmeVI3pRSRshUzA2AW8qtsUbCYEFQdeFrymPZJxnQVIalSnYkM+i+u5kov2qD8Vq+Uix7SSgynVYS5U1c6K6pOlmVvwBqvUP8lpHoJN5sw0rc0DmBIxpcICefDPKGu5Xyu1K1VcZEc6k+cQtTUsQNmI+OOa1RRVVifx6hLMSZTN2qJUrfhQjn3DClRfhQuWDMxxVagEcYTQoIOdvbUzZlDoHWOQcGsXf+UGAdivKVARLgeDf6P3S7F+ALqXgDzk2J3ptR1CY11gfodowIlTW/xRPEsNRelka6INlKXZEymLpoL1HES1ZwuELaRFdnQmCr8E8YKjkHwceoqTLfnTt3WpE8KLWlzKiLgccN45QplZsoNur2Mdoy6JOMLqHsBzBPqKjfbWpdUxB90AlrFf5Uuo89tEaa6DLGPJHVEr6PLkCrPiVxOKVOvwtueW9dO8SY2P6Qy/nXwJpVLh8RHq62uwtufKsbsM3gTK3ZS7fk6eJNy/CPexILgGrwlP1VBPIc3scwkFUyvgzcpMR1kNloWuwrvk2nvObyJtREpy78O3roYG6rEqQoCL200JkEBmq/TzQBZJI84ypok4wPecbfb/jri/f3D3WfwniySWemWWJZ8SO5PYE71pgw33g9bocNC5t193I37oPt7QGN/5cnB4cs+HMnx5k94bPHmfvex9oat337sx3D78MxJgSlWBhuBYRXc0wvgHeH2+ubd4BmSQ0xSWdYU8puWBjMqINdvGe+LxDJZWHR9Y/qi6bNXnRCPr1wAEiuQbVitqHm7G5AYvB4u8YD2p29UdjXpUnQBYzrX9wv7aqHS2NZsHhOjBB4juIxFLcX4ShpNyi6LcRiGhPOiERqVTiN7mkZWZZw01EpZBCQURDtsHyK1SETuVK1B/PPn0AiD2E4jP1caca6byglbSthWRYARDYWVDojvKrjSROR+9JNkfCWNJktaVoYVzr4PL0yilbyYRnw5THlPECjbkEvAKYsJ5ZM2mInyKkClhFrcuqR9MucQSCwlnyt5akU96DVnnqeHIbaIGLWnopzgwSQVxtaPZHwleSatiA5uZfuRly/LHmlXyl7BH4WEdppB2AbJaeghogRQJThkMlRbGd2nSNrkeE4IEmqFjkGYlTNzpVGyBvswrbLoNYochXVJJVGbRZ9yUUY4bDuMjlKMr6TRZJPGcYcI5OaUyjQSq10q+xyPHJogHqBd8IIqWCNmo3bklTlXTVACnRG0FjKPpFohqwu/krPlUeQSfNAOva3CwakW4lJCE5V8lFo6H10eRVSS8ZU8mnTqOqil0WJWPFIrj+zyLI+wdYQltYTmn1vkMYCDpewkmC3R2CyFTeIcHolVEEtEpfnySCcnhbKcSdGbLhwiJiWWvhtOk0kZrdhk1EEyvpJH4fMOzaCOnQmHZA8KvaxWpzkUsgODgmeVZ8ggSUHaqNANGnry4GrWhdszctoKIm8vq91cKZRcLhUKAwScDBk59804GwoTMukcdLQmjF9UJBlfRyE1XVZEEIdoCy3hZVmkhx7r8spImucikbIp6oqiyAqkfS0grApso6JQMlXzBtXMtzMi0b47kzOujEwoJgS0WVYIOJyRqbiBxhkVmi2hlMXzxlUXivGVNJqmD3xeKiytci9LI+dXVlxBI7D7GRoV53RUWeKAGY+hiC5MFq9xt2XDA0RMHek0QvQDLGHG+Qw6eG4WEqeJGf5izxiRBiKZak6XaIN3fvxiEMn4ShZNv5eCKCQ6i144pWnei5srWPRsWWRF3yNvCNMK0yioiwhGLWAk5YVxtpaUijgrGGmxnHN1raHyYOccsyxp+qTOdWVdomBGcWgLerJQRj9JxleyaKpbK+SyzqLXLos+p0Asmrs+fUqpOkwRVILAirsqoIPXIXsuhk6dVkmZoZCSp18SQ0/T9RIMpHv7Wx1GSQUDAYHpBqRJhfqznlNIQW/rhZSdK+tc6JPJAhGt9PI6GLRpCoPIIqzwirfqxLhETzK+knUTmdtxBcrNSubu72b4RJ+rpHD+tMGgFJPFYSAATReZnMXiW9AGSw36jGlJVwUcUuB8CykZIZvlkDDgaxh7Z7jKoSNhAAIUtMhgybjuTjK+kkYTmRubGXOjkRUrhNfnaWSFxNwa4xGrUXdqJzB0g1rQB8OuSg21N5whVSq+svOmUWim6ewsq6WntRowAOkNLQ8S431MIKUdlQGS8VW/ADKRuw3KZhx88xUKHXbx/vux3t1/sz28TwfqDB8naV47UoZg/MWJbLvth7fnTNG3b8/43aD9gdx/xXUg9DizeTzJZY3DedN/20TYYdOCMFscNy0Ixsddpk589y4Tf+vnfJdJ07DD8hTF+LjL1Onk3mXiF3LPd5k0vjlMVCnGx12mztT2LhN/YuOEy5gk8ZX6itOkWcOhTKMYH3eaOgHaO038JvAJp3sfifrmS6dJwvihI6IYH3eaOq54cJr2bdITTuv+SVv9pdMkDe6w7ksxPvFJE4XRl3LaqH6kv/JJk+TrQ96nGJ9IVsSBwos5/fUwRhLJHl0mGR93mapc7l0m7iCecJkH+Cy+kqApks4hQVOMTyRoos6295m453oqdPcoJvyXTpNEjMPUlGJ8gttEWehSbj/2Qs+ymySjHCRRivFLOU3cID//QJNa/kPgphgfd5kqxDxUn7QvKZxK0fIIuUkN6niiCcbHnabKBttzvvt+ymmsIWEQ+tTpodPq3eKP6AGP/+bqXd3gi0q1vC0w+Wlo8z/U3RDSD7IOBs9AYD8m/N92+2HfJ9eyvn8QAPrvwg47+3d39b6/1JM7/weEPuoeXFYAAA==\n
\u4f7f\u7528\u8a2d\u5b9a\u6a94\u4f86\u90e8\u7f72\u61c9\u7528\u7a0b\u5f0f\u3002
\u9019\u88e1\u4e0d\u7d30\u8b1b\u8a2d\u5b9a\u6a94\u5404\u884c\u610f\u7fa9\uff0c\u50c5\u6982\u8ff0\u3002 web-deployment\u3001recipe-deployment
\u5957\u7528\u81f3 minikube\uff1a
kubectl apply -f minikube/recipe-deployment.yml\n
\u9019\u6642\u53ef\u4ee5\u770b\u770b\u662f\u5426\u90fd\u555f\u52d5\u6210\u529f
$ kubectl get deployment\nNAME READY UP-TO-DATE AVAILABLE AGE\nrecipe-api 5/5 5 5 19h\nweb-api 3/3 3 3 18h\n
"},{"location":"feedback/distributed-systems-with-node.js/container-orchestration-and-misc/#service_1","title":"Service","text":"\u4f7f\u7528\u8a2d\u5b9a\u6a94\u4f86\u90e8\u7f72 Service\u3002
\u5728 web-service \u4e2d\u4e00\u540c\u8a2d\u5b9a Ingress\u3002 web-service\u3001recipe-service
host1
\u5f15\u5230 Service A
\u6216 /api/v1
\u5f15\u5230 Service B
\u5957\u7528\u81f3 minikube\uff1a
kubectl apply -f minikube/recipe-service.yml\n
"},{"location":"feedback/distributed-systems-with-node.js/container-orchestration-and-misc/#\u6e2c\u8a66","title":"\u6e2c\u8a66","text":"\u53d6\u5f97 Cluster Ingress address
$ kubectl get ingress\nNAME CLASS HOSTS ADDRESS PORTS AGE\nweb-api-ingress <none> example.org 192.168.64.2 80 96s\n
curl -H \"Host: example.org\" http://192.168.64.2\n
"},{"location":"feedback/distributed-systems-with-node.js/container-orchestration-and-misc/#\u6838\u5fc3\u50f9\u503c","title":"\u6838\u5fc3\u50f9\u503c","text":"\u4e0a\u8ff0\u7bc4\u4f8b\u53ef\u4ee5\u900f\u904e docker-compose \u9054\u6210\uff0c\u4f46\u662f Kubernetes \u4e0d\u50c5\u5982\u6b64\u3002
"},{"location":"feedback/distributed-systems-with-node.js/container-orchestration-and-misc/#\u7248\u672c","title":"\u7248\u672c","text":"\u7576\u6709\u65b0\u7248\u672c\u7684\u61c9\u7528\u7a0b\u5f0f\u9700\u8981\u90e8\u7f72\u6642\uff0cKubernetes \u6703\u5148\u628a\u65b0\u7248\u672c\u7684 Pod \u555f\u8d77\u4f86\uff0c\u7b49\u820a\u7248\u672c\u7684 Pod \u8655\u7406\u5b8c\u8acb\u6c42\u6642\uff0c\u53d6\u4ee3\u4e4b\u3002
\u5148\u628a\u8a2d\u5b9a\u6a94 web-deployment.yml
\u5c0d Container \u7684\u7248\u672c\u8abf\u6574\u81f3 v2
\uff0c\u518d\u5957\u7528\u65b0\u7684\u8a2d\u5b9a\u6a94\u5230 minikube\u3002
--record=true
\u53ef\u4ee5\u8a18\u9304\u672c\u6b21\u6307\u4ee4\u5230 revision\uff0c\u5e6b\u52a9\u672a\u4f86\u9000\u7248\u78ba\u8a8d\u7248\u672c
kubectl apply -f minikube/web-deployment.yml --record=true\n
Kubernetes \u8db3\u5920\u8070\u660e\u53bb\u5224\u65b7\u4f60\u6539\u52d5\u4e86\u54ea\u88e1\uff0c\u7136\u5f8c\u4f5c\u51fa\u8abf\u6574\u3002
\u73fe\u5728\u4f86\u770b\u770b\u90e8\u7f72\u7684\u904e\u7a0b\u5427\u3002
-w
\u53ef\u4ee5\u7528\u4f86\u76e3\u63a7\u72c0\u6cc1\uff0c-l
\u7be9\u9078\u7279\u5b9a label \u7684 Pod
$ kubectl get pods -w -l app=web-api\nNAME READY STATUS RESTARTS AGE\nweb-api-769dc9c8b7-5824q 1/1 Running 0 19h\nweb-api-769dc9c8b7-6x9bc 1/1 Terminating 0 19h\nweb-api-769dc9c8b7-hk2dp 1/1 Running 0 19h\nweb-api-d85b66d56-pkrv5 1/1 Running 0 3s\nweb-api-d85b66d56-bgw55 1/1 Running 0 2s\nweb-api-769dc9c8b7-hk2dp 1/1 Terminating 0 19h\nweb-api-d85b66d56-6qsp4 0/1 Pending 0 0s\nweb-api-d85b66d56-6qsp4 0/1 ContainerCreating 0 0s\nweb-api-d85b66d56-6qsp4 1/1 Running 0 2s\nweb-api-769dc9c8b7-5824q 1/1 Terminating 0 19h\n
\u4f60\u4e5f\u53ef\u4ee5\u770b\u770b\u6709\u904e\u54ea\u4e9b\u8cc7\u6e90\u3002
$ kubectl get rs -l app=web-api\nNAME DESIRED CURRENT READY AGE\nweb-api-769dc9c8b7 0 0 0 20h\nweb-api-d85b66d56 3 3 3 6m34s\n
\u9000\u7248\u6642\uff0c\u5148\u78ba\u8a8d\u7248\u672c\u865f\u78bc\uff1a
$ kubectl rollout history deployment.v1.apps/web-api\nREVISION CHANGE-CAUSE\n1 <none>\n2 kubectl apply --filename=web-api-deployment.yml --record=true\n
\u9000\u7248\uff1a
$ kubectl rollout undo deployment.v1.apps/web-api \\\n --to-revision=1\n
"},{"location":"feedback/distributed-systems-with-node.js/container-orchestration-and-misc/#scaling","title":"Scaling","text":"\u624b\u52d5\u589e\u9577\u5230\u5341\u500b
$ kubectl scale deployment.apps/recipe-api --replicas=10\ndeployment.apps/recipe-api scaled\n$ kubectl get deployment\nNAME READY UP-TO-DATE AVAILABLE AGE\nrecipe-api 5/10 10 5 1m\nweb-api 3/3 3 3 1m\n
\u9664\u4e86\u900f\u904e\u6307\u4ee4\u589e\u6e1b Pod \u6578\u91cf\uff0c\u4e5f\u53ef\u4ee5\u6539\u52d5 Deployment \u6a94\uff0c\u518d\u5f15\u5165\u3002
\u5728 scaling \u7684\u904e\u7a0b\u4e2d\uff0cKubernetes \u6703\u78ba\u5b9a\u53ef\u4ee5\u88ab\u5f15\u7528\u624d\u5f15\u7528\uff0c\u79fb\u9664\u6642\u4ea6\u540c\u3002
\u9019\u88e1\u7684 scaling \u662f\u52d5\u614b\u8abf\u6574\u7684\uff0c\u800c docker-compose \u662f\u7576\u521d\u8a2d\u5b9a\u7684\u6578\u91cf\u5f8c\u505a\u555f\u52d5\uff0c\u4e26\u975e scaling\u3002
\u9664\u4e86\u624b\u52d5\u589e\u9577\u6e1b\u5c11\uff0cKubernetes \u4e5f\u53ef\u4ee5\u81ea\u52d5\u5316\uff1a
Kubernetes \u9084\u6709\u5f88\u591a\u529f\u80fd\uff0c\u6211\u81ea\u5df1\u4e5f\u624d\u525b\u958b\u59cb\u6478\u7d22\uff0c\u5e0c\u671b\u672a\u4f86\u6709\u4eba\u80fd\u6df1\u5165\u77ad\u89e3\u4e26\u548c\u5927\u5bb6\u5206\u4eab\uff01
"},{"location":"feedback/distributed-systems-with-node.js/container-orchestration-and-misc/#misc","title":"Misc","text":"\u4e0a\u8ff0\u9019\u4e9b\u5728\u672c\u66f8\u4e2d\u90fd\u6709\u8a0e\u8ad6\u5230\uff0c\u500b\u4eba\u89ba\u5f97\u4e5f\u5f88\u6709\u8da3\uff0c\u6709\u8208\u8da3\u7684\u4eba\u90fd\u53ef\u4ee5\u770b\u770b\u3002
"},{"location":"feedback/distributed-systems-with-node.js/container/","title":"Container","text":""},{"location":"feedback/distributed-systems-with-node.js/container/#\u670d\u52d9\u5f9e\u4e00\u500b\u8b8a\u591a\u500b","title":"\u670d\u52d9\u5f9e\u4e00\u500b\u8b8a\u591a\u500b","text":"\u554f\u984c\u5f80\u5f80\u5c31\u767c\u751f\u5728\u7576\u670d\u52d9\u5f9e\u4e00\u500b\u8b8a\u6210\u591a\u500b\u6642\u3002
"},{"location":"feedback/distributed-systems-with-node.js/container/#protocol","title":"Protocol","text":"JSON - \u7576\u4f60\u53ea\u6709\u4e00\u500b API Endpoint\uff0c\u8db3\u77e3\u3002
\u4f46\u662f\u7576\u4f60\u6709\u8d8a\u4f86\u8d8a\u591a Endpoint \u751a\u81f3\u540c\u4e00\u6642\u9593\u9700\u8981\u5404\u500b Endpoint \u7684\u8cc7\u6e90...
GraphQL - \u53ea\u9700\u8981\u5c0d\u61c9\u4e00\u500b\u7aef\u9ede\uff0c\u5c31\u53ef\u4ee5\u7372\u5f97\u591a\u500b API \u7684\u8cc7\u8a0a\u4e14\u53ef\u4ee5\u81ea\u884c\u7d44\u7e54\u67e5\u8a62\u5167\u5bb9
\u4f46\u662f API \u7684\u884c\u70ba\u8d8a\u4f86\u8d8a\u8907\u96dc\uff0c\u727d\u6d89\u5230\u591a\u7a2e\u908f\u8f2f...
gRPC - \u53ea\u9700\u8981\u5c08\u5fc3\u64b0\u5beb\u7a0b\u5f0f\u908f\u8f2f\uff0c\u76f8\u95dc\u7684 HTTP client \u7686\u5df2\u7d93\u8655\u7406\u5b8c\u3002
"},{"location":"feedback/distributed-systems-with-node.js/container/#sla-and-load-test","title":"SLA and Load Test","text":"\u600e\u9ebc\u78ba\u4fdd\u7522\u54c1\u5728\u7d93\u904e\u591a\u6b21\u50b3\u8f38\u5f8c\u4ecd\u80fd\u7dad\u6301\u53ef\u9810\u671f\u7684\u4fdd\u8b49
\u7576\u7522\u54c1\u8d8a\u4f86\u8d8a\u591a\uff0c\u600e\u9ebc\u5feb\u901f\u7cbe\u6e96\u7684\u7372\u53d6\u61c9\u7528\u3001\u670d\u52d9\u3001\u8a2d\u5099\u7684\u8cc7\u8a0a\u3002
\u6709\u5f88\u591a\u7a2e\u65b9\u6cd5\u53ef\u4ee5\u63d0\u5347\u670d\u52d9\u7684\u6578\u91cf\uff0c\u5404\u7a2e\u65b9\u5f0f\u90fd\u9700\u6b0a\u8861\uff1a
Container \u5305\u62ec Image\u3001Port Mapping\u3001Volume Mappings Volume \u5c31\u662f\u7ba1\u7406 Container \u7aef\u548c Host \u7aef\u7684 filesystem
"},{"location":"feedback/distributed-systems-with-node.js/container/#docker","title":"Docker","text":"Docker \u662f\u4e00\u500b\u7ba1\u7406\u3001\u5efa\u7f6e Container \u7684\u5de5\u5177\uff0c\u5176\u4e3b\u8981\u6709\u4e09\u500b\u5de5\u5177\uff1a
Docker Desktop Docker \u662f\u57f7\u884c\u5728 Linux \u4e4b\u4e0a\u7684\u5de5\u5177\uff0c\u82e5\u6a5f\u5668\u4e0d\u662f Linux\uff0c\u5c31\u6703\u9700\u8981 Docker Desktop\u3002 \u5176\u4e0d\u50c5\u53ef\u4ee5\u5efa\u7acb VM \u4f86\u6a21\u64ec Linux \u74b0\u5883\uff0c\u4e5f\u63d0\u4f9b\u5176\u4ed6\u597d\u7528\u529f\u80fd\uff0c\u5982 UI \u548c Kubernetes \u7684\u6574\u5408\u3002
"},{"location":"feedback/distributed-systems-with-node.js/container/#docker-image","title":"Docker Image","text":"\u628a\u61c9\u7528\u7a0b\u5f0f\u5305\u88dd\u6210 Image \u518d\u4f9d\u6b64\u5efa\u7acb Container\u3002 \u61c9\u7528\u7a0b\u5f0f\u5927\u90e8\u5206\u90fd\u9700\u8981\u5efa\u7acb\u5728\u7279\u5b9a\u74b0\u5883\u4e4b\u4e0a\uff0c\u4ee5 Node.js \u7684\u61c9\u7528\u7a0b\u5f0f\u70ba\u4f8b\uff1a
\u6bcf\u500b\u74b0\u5883\u90fd\u7a31\u70ba\u4e00\u7d44 stage\uff0c\u5982 Linux
\u3001Node.js
\u548c Application
\u3002 \u6bcf\u500b stage \u4e2d\u6703\u6709\u5f88\u591a\u5c64 layer\uff0c\u5206\u5225\u4ee3\u8868\u5efa\u7acb\u904e\u7a0b\u7684\u4e00\u500b\u6b65\u9a5f\u3002
\u4ee5 Node.js \u4e26\u5305\u88dd\u5728 Alpine \u4e4b\u4e0a\u7684 Image \u70ba\u4f8b\uff1a
$ docker pull node:lts-alpine\nc9b1b535fdd9: Pull complete\n750cdd924064: Downloading [==> ] 2.485MB/34.53MB\n2078ab7cf9df: Download complete\n02f523899354: Download complete\n
# Layer Size 1 ADD file ... in /... 2.69 MB 2 CMD [\\\"/bin/sh\\\"] 0 B 3 ENV NODE_VERSION=14.17.3 0 B 4 /bin/sh -c addgroup -g 1000 ... 34.53 MB 5 ENV YARN_VERSION=1.22.5 0 B 6 /bin/sh -c apk add --no-cache ... 2.14 MB 7 COPY file ... in /usr/... 281 B 8 ENTRYPOINT [\\\"docker-entrypoint.sh\\\"] 0 B 9 CMD [\"node\"] 0 B /Image \u5927\u5c0f\u70ba 39.35 MB\uff0c\u9023\u7d50
\u6709\u6539\u8b8a filesystem \u7684\u6b65\u9a5f\uff08\u6703\u6539\u8b8a Image \u5927\u5c0f\uff09\uff0c\u624d\u6703\u5217\u51fa\u4f86\u3002
SHA \u503c\u8a08\u7b97\u65b9\u5f0f\u662f\u4e0a\u4e00\u500b SHA \u503c\u52a0\u4e0a\u73fe\u884c\u7684\u6307\u4ee4\u7d44\u51fa\u4f86\u7684\u3002
\u82e5\u6539\u70ba Debian\uff08\u9810\u8a2d\u503c\uff09\u5247\u70ba\uff1a
$ docker pull node:lts\n199ebcd83264: Pull complete\nddbb155879c0: Pull complete\nc194bbaa3d8b: Pull complete\n6154ac87d7f3: Pull complete\n0c283e88ced7: Pull complete\ndba101298560: Pull complete\n1d8bfd4e555f: Downloading [=====> ] 7.56MB/33.38MB\n757e41ffbdcc: Download complete\n6e055c4b8721: Download complete\n
# Layer Size 1 ADD file ... in ... 43.28 MB 2 CMD [\"bash\"] 0 B 3 /bin/sh -c set -eux; apt-get ... 10.77 MB 4 /bin/sh -c set -ex; if ... 4.14 MB 5 /bin/sh -c apt-get update && ... 47.46 MB 6 /bin/sh -c set -ex; apt-get ... 204.5 MB 7 /bin/sh -c groupadd --gid 1000 ... 4.09 KB 8 ENV NODE_VERSION=14.17.3 0 B 9 /bin/sh -c ARCH= && dpkgArch=\"$(dpkg ... 33.38 MB 10 ENV YARN_VERSION=1.22.5 0 B 11 /bin/sh -c set -ex ... 2.23 MB 12 COPY file ... in ... 295 B 13 ENTRYPOINT [\\\"docker-entrypoint.sh\\\"] 0 B 14 CMD [\"node\"] 0 B /Image \u5927\u5c0f\u70ba 345.75 MB\uff0c\u9023\u7d50\u3002
Container \u90e8\u7f72\u5be6\u4f5c\u4e0a\u4ecd\u5efa\u8b70\u4ee5\u8f03\u5c0f\u7684 Image \u70ba\u57fa\u5e95\uff0c\u9664\u4e86\u52a0\u901f\u90e8\u7f72\u6d41\u7a0b\u5916\uff0c\u8f03\u5c0f\u7684\u6a94\u6848\u9762\u7a4d\u7406\u8ad6\u4e0a\u4e5f\u80fd\u964d\u4f4e\u88ab\u653b\u64ca\u7684\u6a5f\u6703\u3002
"},{"location":"feedback/distributed-systems-with-node.js/container/#\u5be6\u4f5c","title":"\u5be6\u4f5c","text":"\u76f8\u4fe1\u4e86\u89e3 Image \u88fd\u4f5c\u539f\u7406\u5f8c\uff0c\u5c0d\u65bc\u5be6\u4f5c\u5c31\u4e0d\u6703\u6709\u592a\u5927\u554f\u984c\uff0c\u9019\u88e1\u6709\u5be6\u4f5c\u76f8\u95dc\u7684\u6587\u4ef6\uff0c\u6709\u8208\u8da3\u53ef\u4ee5\u53bb\u67e5\u770b
\u900f\u904e Docker CLI \u53ef\u4ee5\u548c Container \u4e92\u52d5\uff0c\u9664\u4e86\u8b93\u6211\u5011\u4e86\u89e3\u5176\u5167\u90e8\u904b\u4f5c\u904e\u7a0b\uff0c\u4e5f\u53ef\u4ee5\u5e6b\u52a9\u6211\u5011 Debug\u3002
"},{"location":"feedback/distributed-systems-with-node.js/container/#\u9032\u5165-container","title":"\u9032\u5165 Container","text":"docker run -it ubuntu /bin/bash\n
-i
\u4ee3\u8868\u8981\u4ee5\u4e92\u52d5\u6a21\u5f0f\u9032\u5165 Container-t
\u4ee3\u8868\u662f\u4ee5 TTY session \u9032\u5165\uff0c\u548c -i
\u6574\u5408\u70ba -it
bash
\u9032\u5165\u5f8c\uff0c\u5373\u53ef\u900f\u904e ps -e
\u8f38\u51fa\u6240\u6709 process\u3002
$ ps -e\nPID TTY TIME CMD\n 1 pts/0 00:00:00 bash\n 10 pts/0 00:00:00 ps\n
bash \u4f5c\u70ba\u521d\u59cb\u884c\u70ba\uff0c\u5fc5\u9808\u5728 PID 1\u3002
\u7531\u6b64\u53ef\u770b\u51fa\uff0cContainer \u7684\u884c\u70ba\u76f8\u7576\u55ae\u7d14\uff0c\u4e0d\u50cf\u5be6\u969b\u4f7f\u7528\u7684\u96fb\u8166\uff0c\u6703\u6709\u5404\u7a2e\u670d\u52d9\u5728\u80cc\u666f\u904b\u4f5c\u3002
"},{"location":"feedback/distributed-systems-with-node.js/container/#\u5c0d-container-\u5167\u90e8\u4e0b\u9054\u6307\u4ee4","title":"\u5c0d Container \u5167\u90e8\u4e0b\u9054\u6307\u4ee4","text":"docker exec ubuntu /bin/ls /var
$ curl -o index.html http://example.org\n$ docker run --rm -p 8080:80 \\\n -v $PWD:/usr/share/nginx/html nginx\n
-p
\u5373\u70ba\u524d\u9762\u63d0\u5230\u7684 port-mappings -v
\u5373\u70ba volume-mappings\uff08filesystem\uff09
\u73fe\u5728\u5df2\u7d93\u8f03\u5c11\u5176\u4ed6\u7ba1\u7406 Container \u7684\u7522\u54c1\uff1a
\u591a\u500b\u670d\u52d9\u8981\u600e\u9ebc\u900f\u904e Docker \u5efa\u7acb\uff1f\u6709\u5e7e\u500b\u65b9\u6cd5\uff1a
docker run exmaple/server1
docker run exmaple/server2
\u591a\u6b21 docker run exmaple/server
\u53bb\u5efa\u7acb\u4e0d\u540c\u7684\u61c9\u7528\u7a0b\u5f0f\u6703\u96e3\u7ba1\u7406\u4e14\u5bb9\u6613\u51fa\u932f\u3002
\u6709\u6642\u76f8\u4f3c\u7684\u61c9\u7528\u7a0b\u5f0f\u53ef\u4ee5\u5305\u88dd\u6210\u540c\u4e00\u500b Image\uff0c\u5982\u4e0a\u4e00\u6b21\u5831\u544a\u63d0\u5230\u7684 ELK
\uff0c\u4f46\u662f \u5206\u6563\u5f0f\u7cfb\u7d71\u4e0a \u4e0d\u540c\u7684\u61c9\u7528\u7a0b\u5f0f\u82e5\u5305\u88dd\u6210\u540c\u4e00\u500b Image \u6703\u8b93\u670d\u52d9\u7684\u7368\u7acb\u6027\u6d88\u5931\u3002
docker-compose \u4fbf\u662f\u7528\u4f86\u89e3\u6c7a\u9019\u4e00\u554f\u984c\u7684\u65b9\u6848\u3002
\u4ee5\u4e0a\u4e00\u4efd Tracing \u4e2d\u7684 Zipkin \u70ba\u4f8b\uff1a
\u5c31\u53ef\u4ee5\u4f9d\u6b64\u5efa\u7acb docker-compose.yaml\uff1a
version: \"3.7\"\nservices:\n zipkin:\n image: openzipkin/zipkin-slim:2.19\n ports:\n - 9411:9411\n recipe-api:\n build:\n context: ./recipe-api\n dockerfile: Dockerfile-zipkin\n ports:\n - 4000:4000\n environment:\n ZIPKIN: zipkin:9411\n depends_on:\n - zipkin\n web-api:\n build:\n context: ./web-api\n dockerfile: Dockerfile-zipkin\n ports:\n - 3000:3000\n environment:\n TARGET: recipe-api:4000\n ZIPKIN: zipkin:9411\n depends_on:\n - zipkin\n - recipe-api\n
"},{"location":"feedback/distributed-systems-with-node.js/container/#docker-registry","title":"Docker Registry","text":"Docker Hub \u63d0\u4f9b\u5b58\u653e Image \u7a7a\u9593\uff0c\u4f46\u5c0d\u65bc\u79c1\u4eba\u7a7a\u9593\u7684\u5b58\u653e\u6578\u91cf\u6709\u9650\u5236\u3002 \u53ef\u4ee5\u6839\u64da\u9810\u7b97\uff0c\u8003\u616e\u5176\u4ed6 Docker Registry\uff0c\u4f8b\u5982\uff1a
\u9019\u6b21\u5206\u4eab\u7701\u7565
\u61c9\u7528\u7a0b\u5f0f\u662f\u9700\u8981\u7dad\u904b\u7684\uff0c\u5206\u6563\u5f0f\u7cfb\u7d71\u7684\u7dad\u904b\u548c\u50b3\u7d71\u4e0a\u6709\u4ec0\u9ebc\u5dee\u7570\u5462\uff1f
\u672c\u7ae0\u6703\u4f9d\u5e8f\u4ecb\u7d39 Log\u3001Tracing\u3001Metric\u3001Alert \u548c Health Check\u3002
"},{"location":"feedback/distributed-systems-with-node.js/observability/#log","title":"Log","text":"\u5728\u672c\u5730\u7aef\u6e2c\u8a66\u6642\uff0c\u6642\u5e38\u7528 console.log
\u6216 print
\u9019\u985e\u51fd\u793a\u4f86\u78ba\u8a8d\u8acb\u6c42\u5728\u57f7\u884c\u904e\u7a0b\u4e2d\u6c92\u6709\u767c\u751f\u4ec0\u9ebc\u610f\u6599\u4e4b\u5916\u7684\u4e8b\u3002
\u82e5\u5728\u7dda\u4e0a\u90e8\u7f72\u5f8c\uff0c\u6211\u8981\u600e\u9ebc\u5f9e\u9060\u5728\u4ed6\u65b9\u7684 server \u4e2d\u53d6\u5f97\u76f8\u95dc\u8a0a\u606f\uff1f
\u4e0b\u9762\u6703\u4ecb\u7d39 ELK\uff08Elasticsearch
, Logstash
, and Kibana
\uff09\u600e\u9ebc\u8b93\u4f60\u62ff\u5230 server \u7684 log \u8cc7\u8a0a\u3002
\u82e5\u4e00\u500b\u8acb\u6c42\u6b77\u7a0b\u6703\u7d93\u904e\u591a\u9805\u670d\u52d9\uff0c\u6211\u8981\u600e\u9ebc\u5340\u5206\u4e0d\u540c\u7684\u8acb\u6c42\uff1f
\u4f8b\u5982\uff1a\u767c\u73fe A \u670d\u52d9\u5728\u548c B \u670d\u52d9\u8acb\u6c42\u8cc7\u6599\u6642\uff0c\u5f97\u5230\u932f\u8aa4\u8cc7\u6599\u3002 \u65bc\u662f\u63a5\u8457\u67e5\u770b B \u670d\u52d9\u7684 log\uff0c\u7136\u800c\u540c\u4e00\u6642\u9593\u537b\u6709\u5f88\u591a\u8acb\u6c42\uff0c\u832b\u832b\u5927\u6d77\u5982\u4f55\u5c0b\uff1f
\u6b64\u6642\u5c31\u53ef\u4ee5\u4f7f\u7528 Tracing \u7684\u6a5f\u5236\uff0c\u7bc4\u4f8b\u4e2d\u6703\u4f7f\u7528 Zipkin\u3002
request ID
\u4ee3\u8868\u5404\u500b\u8acb\u6c42\u7684 ID\uff0c\u5fc5\u9808\u662f\u4e0d\u80fd\u91cd\u8907\u7684\u5b57\u4e32\u3002
\u9664\u4e86\u91dd\u5c0d\u55ae\u4e00\u8acb\u6c42\u7684\u6d41\u7a0b\u6aa2\u95b1\uff0c\u82e5\u6211\u8981\u505a\u7d71\u8a08\u5462\uff1f
\u4f8b\u5982\uff1a\u6a5f\u5668\u7684 CPU \u4f7f\u7528\u7387\u3001\u56de\u61c9 4xx/5xx \u7684\u6bd4\u7387\u3001API \u4f7f\u7528\u5206\u4f48
\u9019\u4e00\u985e\u9700\u8981\u7d2f\u7a4d\u7684\u8cc7\u6599\uff0c\u6211\u5011\u4fbf\u7a31\u5176\u70ba Metric\uff0c\u7bc4\u4f8b\u4e2d\u6703\u4f7f\u7528 Graphite\uff0cStatsD \u548c Grafana\u3002
"},{"location":"feedback/distributed-systems-with-node.js/observability/#alert","title":"Alert","text":"\u6709\u4e86 Metric\uff0c\u6211\u5011\u4fbf\u53ef\u4ee5\u8a2d\u5b9a\u4e9b\u95a5\u503c\uff0c\u4f86\u901a\u77e5\u958b\u767c\u4eba\u54e1\u4ee5\u53ca\u65e9\u5f97\u77e5\u670d\u52d9\u7684\u72c0\u614b\u3002
\u4f8b\u5982 5xx \u6bd4\u7387\u8d85\u904e 3% \u6642\uff0c\u63d0\u51fa\u8b66\u544a\u901a\u77e5
\u7bc4\u4f8b\u4e2d\u6703\u4f7f\u7528 Grafana\u3002
"},{"location":"feedback/distributed-systems-with-node.js/observability/#health-check","title":"Health Check","text":"\u82e5\u670d\u52d9\u7684\u4f9d\u8cf4\uff08\u4f8b\u5982 DB\uff09\u9023\u7dda\u65b7\u6389\u6216\u751a\u81f3\u670d\u52d9\u672c\u8eab\u65b7\u7dda\u6642\uff0c\u6211\u5011\u80fd\u5426\u53ca\u65e9\u77e5\u9053\uff1f\u540c\u6642\u81ea\u52d5\u91cd\u65b0\u5efa\u7acb\u9023\u7dda\uff0c\u6216\u751a\u81f3\u91cd\u65b0\u555f\u52d5\u8a72\u670d\u52d9\u3002
\u7bc4\u4f8b\u4e2d\u6703\u4f7f\u7528 HAProxy
"},{"location":"feedback/distributed-systems-with-node.js/observability/#\u6bd4\u8f03","title":"\u6bd4\u8f03","text":"\u7a2e\u985e \u591a\u670d\u52d9\u624d\u6709\u610f\u7fa9 \u529f\u80fd \u6240\u5c6c\uff08\u6982\u7565\uff09 Log X Debug Dev Tracing O Debug Dev-Ops Metric X \u7d71\u8a08 Ops Alert X \u5206\u6790 Dev-Ops SE"},{"location":"feedback/distributed-systems-with-node.js/observability/#\u5be6\u4f5c","title":"\u5be6\u4f5c","text":"\u63a5\u4e0b\u4f86\u9032\u5165\u4e00\u7cfb\u5217\u5be6\u4f5c\u3002
"},{"location":"feedback/distributed-systems-with-node.js/observability/#log_1","title":"Log","text":"ELK
\u662f Elastic \u958b\u767c\u7684\u958b\u6e90\u7522\u54c1\uff0c\u5176\u958b\u767c\u7684\u4e0d\u50c5\u50c5\u662f ELK
\u9019\u4e09\u9805\u7522\u54c1\u3002
\u672c\u7bc4\u4f8b\u50c5\u6703\u8a0e\u8ad6 ELK
\u4ee3\u8868\u7684 Elasticsearch\u3001Logstash\u3001Kibana \u9019\u4e09\u500b\uff0c\u5176\u4e2d\u5404\u7522\u54c1\u5b9a\u4f4d\u548c\u529f\u80fd\u5982\u4e0b\u3002
\u4e00\u7a2e\u8cc7\u6599\u5eab\uff0c\u4e26\u5c0d\u5916\u63d0\u4f9b API\uff0c\u6703\u9ad8\u6548\u7684\u641c\u5c0b\u76f8\u95dc\u8cc7\u8a0a\u3002\u4e26\u4e14\u6709\u5176\u6a19\u6e96\u7684 query \u8a9e\u6cd5\u3002
Elasticsearch is fast. Really, really fast.
Elasticsearch \u64c1\u6709\u5f88\u591a\u529f\u80fd\uff0c\u672c\u6b21\u50c5\u6703\u793a\u7bc4\u5e7e\u7a2e\uff0c\u82e5\u9700\u8981\u66f4\u591a\u8cc7\u8a0a\uff0c\u8a73\u898b\u3002
"},{"location":"feedback/distributed-systems-with-node.js/observability/#logstash","title":"Logstash","text":"Elasticsearch \u662f\u4e00\u7a2e\u8cc7\u6599\u5eab\uff0c\u4f46\u662f\u5132\u5b58\u7684\u8cc7\u6599\u9700\u8981\u6709\u4eba\u7d66\u4ed6\uff0c\u9019\u4fbf\u662f Logstash \u7684\u529f\u80fd\u3002\u8ca0\u8cac\u628a\u6536\u5230\u7684\u8cc7\u6599\u6574\u5408\u9001\u7d66 Elasticsearch\u3002
\u9001\u4ec0\u9ebc\u8cc7\u6599\u662f\u7531\u61c9\u7528\u7a0b\u5f0f\u65b9\u6c7a\u5b9a\u7684\uff0c\u53ef\u4ee5\u662f log file\u3001HTTP \u7b49\u3002 \u672c\u7bc4\u4f8b\u662f\u900f\u904e HTTP on UDP \u4f86\u50b3\u9001\u3002
"},{"location":"feedback/distributed-systems-with-node.js/observability/#kibana","title":"Kibana","text":"Elasticsearch \u662f\u4e00\u7a2e\u8cc7\u6599\u5eab\uff0c\u4f46\u662f\u4e26\u672a\u63d0\u4f9b UI \u4ecb\u9762\uff0c\u9019\u6642 Kibana \u5c31\u662f\u628a API \u8f49\u6210\u53ef\u8b93\u4eba\u900f\u904e\u7db2\u9801\u7684\u65b9\u5f0f\u4f86\u64cd\u4f5c\u3002
"},{"location":"feedback/distributed-systems-with-node.js/observability/#\u7bc4\u4f8b\u7a0b\u5f0f\u78bc","title":"\u7bc4\u4f8b\u7a0b\u5f0f\u78bc","text":"web-api
\u5c0d\u4f7f\u7528\u4f86\u8aaa\uff0c\u4e0d\u9700\u8981\u53bb\u8003\u616e\u50b3\u9001\u5230 Logstash \u7684\u908f\u8f2f
logger.info(\n {\n path: req.url,\n method: req.method,\n ip: req.ip,\n ua: req.headers[\"user-agent\"] || null,\n },\n \"request-incoming\"\n);\n
\u7121\u8ad6\u7528\u4ec0\u9ebc\u683c\u5f0f\u64b0\u5beb log\uff0c\u7d71\u4e00\u5c31\u597d\u3002
\u521d\u59cb\u5316 logger
const client = dgram.createSocket(\"udp4\");\nconst stream = {\n write: (msg: string) => {\n client.send(msg, LS_PORT, LS_HOST);\n },\n};\nconst logger = pino({ level: \"trace\" }, stream);\n
"},{"location":"feedback/distributed-systems-with-node.js/observability/#alternative","title":"Alternative","text":"\u5176\u67b6\u69cb\u6703\u548c Log \u5f88\u50cf\uff0cElasticsearch \u4e5f\u5305\u542b\u9019\u985e\u7684 query \u8a9e\u6cd5\u3002 \u5176\u91cd\u9ede\u5dee\u7570\u4fbf\u662f\u5728 log \u8655\u7406\u5c0d\u8c61\u70ba\u55ae\u4e00\u8acb\u6c42\uff0c\u800c metrics \u8655\u7406\u7684\u662f\u670d\u52d9\u5728\u7d2f\u7a4d\u6d41\u91cf\u6216\u6642\u9593\u5f8c\u7684\u72c0\u614b\uff0c\u5982\u4e0a\u6240\u8ff0\u3002
\u7bc4\u4f8b\u4e2d\u6703\u4f7f\u7528\u7684\u662f Grafana
\u3001Graphite
\u548c StatsD
\u3002
\u548c log \u975e\u5e38\u76f8\u4f3c\uff0c\u9019\u88e1\u5c31\u4e0d\u8d05\u8ff0\u5176\u610f\u7fa9\u3002
"},{"location":"feedback/distributed-systems-with-node.js/observability/#\u7a0b\u5f0f\u78bc","title":"\u7a0b\u5f0f\u78bc","text":"web-api
\u521d\u59cb\u5316 client
const client = new StatsDClient({\n host: \"localhost\",\n port: 8125,\n prefix: \"web-api\",\n});\n
\u7d71\u8a08\u8acb\u6c42\u6642\u9593\u548c\u6b21\u6578
const begin = new Date();\n\nawait got(`http://${TARGET}/recipes/42`);\n\nclient.timing(\"outbound.recipe-api.request-time\", begin);\nclient.increment(\"outbound.recipe-api.request-count\");\n
\u7d71\u8a08\u7cfb\u7d71\u8cc7\u6e90
setInterval(() => {\n client.gauge(\"server.conn\", server.connections);\n\n const m = process.memoryUsage();\n client.gauge(\"server.memory.used\", m.heapUsed);\n client.gauge(\"server.memory.total\", m.heapTotal);\n\n const h = v8.getHeapStatistics();\n client.gauge(\"server.heap.size\", h.used_heap_size);\n client.gauge(\"server.heap.limit\", h.heap_size_limit);\n\n // try to mock memory heap\n fs.readdir(__dirname, (err, list) => {\n if (err) return;\n client.gauge(\"server.descriptors\", list.length);\n });\n}, 10_000);\n
\u7bc4\u4f8b\u4e2d\uff0c\u628a\u8a18\u61b6\u9ad4\u7b49\u76f8\u95dc\u8cc7\u8a0a\u653e\u5728\u61c9\u7528\u7a0b\u5f0f\u4e2d\u3002 \u5be6\u969b\u4e0a\uff0c\u70ba\u4e86\u907f\u514d\u61c9\u7528\u7a0b\u5f0f\u65b7\u7dda\uff0c\u5c0e\u81f4\u6536\u96c6\u4e0d\u5230\u670d\u52d9\u7684\u8cc7\u8a0a\uff0c\u9019\u985e\u7684\u8cc7\u6599\u6536\u96c6\u61c9\u5728\u670d\u52d9\u5916\u4f7f\u7528\u3002
"},{"location":"feedback/distributed-systems-with-node.js/observability/#alternative_1","title":"Alternative","text":"Graphite
-> Prometheus, InfluxDBStatsD
-> cAdvisor, MetricBeat\u5728\u5206\u6563\u5f0f\u7cfb\u7d71\u4e2d\uff0c\u591a\u500b\u670d\u52d9\u9593\u7684\u6e9d\u901a\u6216\u8acb\u6c42\u90fd\u53ef\u80fd\u5728\u904e\u7a0b\u4e2d\u5f97\u5230\u975e\u9810\u671f\u7684\u7d50\u679c\uff0c\u70ba\u4e86\u80fd\u5feb\u901f\u627e\u5230\u554f\u984c\u9ede\uff0c\u9700\u8981\u8fa8\u5225\u540c\u4e00\u652f\u8acb\u6c42\u5728\u5404\u500b\u670d\u52d9\u4e2d\u7684\u4f4d\u7f6e\u3002
\u900f\u904e\u5efa\u7acb request ID \u4f86\u8fa8\u5225\u540c\u4e00\u652f\u8acb\u6c42\u5728\u591a\u500b\u670d\u52d9\u4e2d\u7684\u4f4d\u7f6e\u3002
\u7522\u51fa\u7bc4\u4f8b\uff1a
web-api \u6703\u50b3\u9001 task1
\u3001fetch
\u548c task2
\uff0crecipe-api \u6703\u50b3\u9001 recipe
web-api
const tracer = new Tracer({\n ctxImpl,\n recorder,\n localServiceName: \"web-api\",\n sampler: new sampler.CountingSampler(1),\n});\n
\u7d00\u9304\u8acb\u6c42\u958b\u59cb\u6642\u548c\u7d50\u675f\u6642
app.use(expressMiddleware({ tracer }));\n
\u7d00\u9304\u9700\u8981\u57f7\u884c 100ms \u7684\u4efb\u52d9
await tracer.local<Promise<void>>(\n 'do_some_task',\n () => new Promise((resolve) => setTimeout(resolve, 100)),\n);\n
\u4f7f\u7528\u5305\u88dd\u5f8c\u7684 got
\u4f86\u53bb\u8acb\u6c42\uff0c\u5728\u4f7f\u7528\u6642\u4e0d\u9700\u8981\u8003\u616e\u5176 tracing \u908f\u8f2f\u3002
await instance(`http://${TARGET}/recipes/42`).json();\n
const instance = got.extend({\n hooks: {\n init: [(opts) => (opts._zipkin.parentId = tracer.id)],\n beforeRequest: [\n (opts) => {\n // ...\n },\n ],\n afterResponse: [\n (res) => {\n // ...\n },\n ],\n beforeError: [\n (err) => {\n // ...\n return err;\n },\n ],\n },\n});\n
recipe-api
"},{"location":"feedback/distributed-systems-with-node.js/observability/#alert_1","title":"Alert","text":"Demo in production
"},{"location":"feedback/distributed-systems-with-node.js/observability/#health-check_1","title":"Health Check","text":"\u9019\u5927\u90e8\u5206\u6703\u548c Alert \u4e00\u8d77\u5be6\u4f5c\uff0c\u76ee\u7684\u662f\u6301\u7e8c\u6253\u7279\u5b9a route \u53bb\u5f97\u77e5\u670d\u52d9\u73fe\u6709\u72c0\u6cc1\u3002
\u4f46\u73fe\u6709\u72c0\u6cc1\u6703\u6709\u4e9b\u6a21\u7cca\u5730\u5e36\uff0c\u4f8b\u5982\uff1a
\u6709\u7522\u54c1\u4f7f\u7528 cache \u53bb\u9054\u5230 SLA\u3002\u7576 cache \u5931\u53bb\u904b\u4f5c\uff0c\u5c0d\u61c9\u7528\u7a0b\u5f0f\u4f86\u8aaa\u4ecd\u80fd\u904b\u884c\u3002\u4f46\u6574\u9ad4\u6548\u7387\u6703\u964d\u4f4e\uff0c\u9032\u800c\u63d0\u9ad8 Latency\uff0c\u9019\u6642\u670d\u52d9\u7684\u72c0\u614b\u7b97\u662f\u5065\u5eb7\u9084\u662f\u4e0d\u5065\u5eb7\uff1f
\u9019\u7a2e\u6a21\u7cca\u5730\u5e36\u88ab\u7a31\u4f5c degraded
\uff0c\u81f3\u65bc\u8a72\u600e\u9ebc\u8655\u7406\uff0c\u5c31\u548c\u5546\u52d9\u908f\u8f2f\u7684\u5be6\u4f5c\u6709\u95dc\u4e86\u3002
\u7bc4\u4f8b\u4e2d\uff0c\u6703\u7528 r-proxy \u505a health check \u4e14\u61c9\u7528\u7a0b\u5f0f\u7d81\u5728\u4e00\u8d77\u3002 \u4f46\u5be6\u4f5c\u4e0a\uff0c\u4ecd\u5efa\u8b70\u8b93\u61c9\u7528\u7a0b\u5f0f\u5916\u7684\u7522\u54c1\u6216\u751a\u81f3\u5916\u55ae\u4f4d\u7684\u7522\u54c1\u53bb\u505a health check\u3002 \u4f8b\u5982\uff1aPagerDuty\u3001Nagios\u3001Pingdom\u3002 \u9664\u4e86 r-proxy\uff0c\u5c08\u505a health check \u7684\u958b\u6e90\u8edf\u9ad4\u6709\uff1aCabot\u3002
HAProxy \u7684\u8a2d\u5b9a\u9ee8
# ...\n\nbackend web-api\n option httpchk GET /health\n server web-api-1 localhost:3001 check\n server web-api-2 localhost:3002 check\n
web-api
app.get(\"/health\", (_req, res) => {\n return res.send(\"OK\");\n});\n
"},{"location":"feedback/distributed-systems-with-node.js/protocol/","title":"Protocol","text":"\u5206\u6563\u5f0f\u7cfb\u7d71\u4e2d\uff0c\u5f88\u91cd\u8981\u7684\u4e00\u584a\u662f\u300c\u4e0d\u540c\u7684\u670d\u52d9\u9593\uff0c\u5f7c\u6b64\u7684\u6e9d\u901a\u65b9\u5f0f\u662f\u4ec0\u9ebc\uff1f\u300d \u6bd4\u8d77\u64b0\u5beb\u5b8c\u6574\u53c8\u6e05\u695a\u7684 API \u6587\u4ef6\uff0c\u6709\u6c92\u6709\u4ec0\u9ebc\u597d\u65b9\u6cd5\u53ef\u4ee5\u8b93\u670d\u52d9\u548c\u670d\u52d9\u4e4b\u9593\u540c\u6b65 API\uff1f
\u4ee5\u4e0b\u8a0e\u8ad6\u7686\u5047\u8a2d\uff1a\u6e9d\u901a\u662f\u900f\u904e\u7db2\u8def\uff0c\u4e14\u4ee5 HTTP \u5354\u5b9a\u70ba\u57fa\u790e\u3002
"},{"location":"feedback/distributed-systems-with-node.js/protocol/#osi-open-systems-interconnection","title":"OSI (Open Systems Interconnection)","text":"POST / HTTP/1.1\nHost: www.example.com\nContent-Type: application/json\nContent-Length: 15\n\n{\"name\":\"evan.lu\"}\n
\u7a7a\u884c\u5f8c\u7684\u4e0b\u4e00\u884c\u5373\u70ba\u4ee3\u8868\u672c\u6b21\u8acb\u6c42\u7684 body\uff0c\u7bc4\u4f8b\u4e2d\u7684 body \u662f\u5e38\u898b\u7684 JSON
\u683c\u5f0f\u3002
\u7531\u6b64\uff0c\u53ef\u4ee5\u60f3\u50cf JSON
\u683c\u5f0f\u662f\u5728\u61c9\u7528\u5c64\u4e4b\u4e0a\u7684\u7b2c\u516b\u5c64\u3002
\u55ae\u7d14\u900f\u904e JSON
\u50b3\u905e\u6709\u4ec0\u9ebc\u7f3a\u9ede\uff1f
\u70ba\u4e86\u89e3\u6c7a\u4e0a\u8ff0\u554f\u984c\uff0c\u5c31\u6703\u6709\u5176\u4ed6 protocol \u9700\u8981\u88ab\u5f15\u5165\u3002
\u4e0d\u904e\u9664\u4e86\u7528\u5176\u4ed6\u5354\u5b9a\uff0c\u4e5f\u6709\u4e00\u4e9b\u65b9\u5f0f\u53ef\u4ee5\u8212\u7de9\uff08\u964d\u4f4e\uff09\u4e0a\u8ff0\u767c\u751f\u7684\u554f\u984c\uff0c\u5982\uff1a
\u4e0a\u8ff0\u50c5\u662f\u5236\u5b9a\u4e00\u4e9b\u898f\u7bc4\uff0c\u8b93\u4f7f\u7528\u8005\u5728\u95b1\u8b80\u76f8\u95dc API \u6587\u4ef6\u6642\uff0c\u80fd\u8f03\u5feb\u9032\u5165\u72c0\u6cc1\u3002
"},{"location":"feedback/distributed-systems-with-node.js/protocol/#graphql","title":"GraphQL","text":"GraphQL \u8b93\u4f7f\u7528\u8005\u5728\u8ddf\u670d\u52d9\u8981\u53d6\u8cc7\u6599\u7684\u6642\u5019\u80fd\u6307\u5b9a\u7279\u5b9a\u8cc7\u6599\uff0c\u9019\u6709\u5e7e\u500b\u597d\u8655\uff1a
\u9019\u4e5f\u8b93 GraphQL \u901a\u5e38\u6210\u70ba facade services\uff0c\u4e5f\u5c31\u662f\u5728\u773e\u591a\u670d\u52d9\u4e2d\u7684\u9996\u500b\u63a5\u89f8\u9ede\uff0c\u4e26\u4f5c\u70ba\u5c0d\u5916\u6e9d\u901a\u7684\u552f\u4e00\u6e20\u9053\u3002
GraphQL \u4e26\u4e0d\u9650\u5b9a\u5728\u8981 HTTP \u4e0a\u57f7\u884c\uff0c\u4e5f\u80fd\u57f7\u884c\u5982 TCP \u7b49\u5354\u5b9a\u4e4b\u4e0a\u3002
\u96d6\u7136\u8acb\u6c42\u6642\u9001\u51fa\u7684\u662f\u985e\u4f3c Query \u7684\u8a9e\u6cd5\uff0c\u4f46 Response \u4e26\u7121\u6307\u5b9a\uff0c\u53ea\u8981\u80fd\u4ee3\u8868\u5176\u968e\u5c64\u5f0f\u7684\u7d50\u679c\u5c31\u884c\uff0c\u5982 JSON
\u3002
type RecipeRoot {\n recipe(id: ID): Recipe\n pid: Int\n}\ntype Recipe {\n id: ID!\n name: String!\n steps: String\n ingredients: [Ingredient]!\n}\ntype Ingredient {\n id: ID!\n name: String!\n quantity: String\n}\n
\u9019\u4efd\u6a94\u6848\u662f\u53ef\u4ee5\u5c0d\u5916\u516c\u958b\u7684\uff0c\u5e6b\u52a9\u4f7f\u7528\u8005\u4f9d\u6b64\u64b0\u5beb\u7a0b\u5f0f\uff0c\u985e\u4f3c\u4e0a\u8ff0\u63d0\u5230\u7684 OpenAPI\u3002
"},{"location":"feedback/distributed-systems-with-node.js/protocol/#\u8acb\u6c42","title":"\u8acb\u6c42","text":"\u9019\u6642\uff0c\u6211\u5011\u53ef\u4ee5\u4f9d\u7167\u4e0a\u8ff0\u7684\u898f\u7bc4\u9001\u51fa\u8acb\u6c42\uff1a
{\n pid\n}\n
{\n \"data\": {\n \"pid\": 9372\n }\n}\n
{\n recipe(id: 42) {\n name\n ingredients {\n name\n quantity\n }\n }\n}\n
{\n \"data\": {\n \"recipe\": {\n \"name\": \"Chicken Tikka Masala\",\n \"ingredients\": [\n { \"name\": \"Chicken\", \"quantity\": \"1 lb\" },\n { \"name\": \"Sauce\", \"quantity\": \"2 cups\" }\n ]\n }\n }\n}\n
"},{"location":"feedback/distributed-systems-with-node.js/protocol/#code-demo","title":"Code Demo","text":"\u4e0b\u5217\u5247\u662f\u4ee5 Node.js \u70ba\u57fa\u790e\u7684\u7bc4\u4f8b\uff1a
// \u50c5\u5c55\u793a\u8acb\u6c42\u7684\u7bc4\u4f8b\uff0c\u9019\u88e1\u7684 `kitchenSink` \u662f\u81ea\u5b9a\u7fa9\u540d\u7a31\uff0c\u65b9\u4fbf debug \u7528\u7684\nconst query = `query kitchenSink ($id:ID) {\n recipe(id: $id) {\n id name\n ingredients {\n name quantity\n }\n }\n pid\n}`;\nconst variables = { id: \"42\" };\n\nreturn got(`http://${TARGET}/graphql`, {\n method: \"POST\",\n json: { query, variables },\n});\n
import {\n GraphQLID,\n GraphQLInt,\n GraphQLObjectType,\n GraphQLSchema,\n} from \"graphql\";\n\n// \u50c5\u5c55\u793a RecipeRoot \u7684\u5efa\u7f6e\u65b9\u5f0f\nconst recipeRoot = new GraphQLObjectType({\n name: \"RecipeRoot\",\n fields: {\n pid: {\n type: GraphQLInt,\n resolve: resolvers.RecipeRoot.pid,\n },\n recipe: {\n type: recipeQuery,\n args: { id: { type: GraphQLID } },\n resolve: resolvers.RecipeRoot.recipe,\n },\n },\n});\nreturn new GraphQLSchema({ query: rootQuery });\n
"},{"location":"feedback/distributed-systems-with-node.js/protocol/#live-demo","title":"Live Demo","text":"http://localhost:4000/graphql
"},{"location":"feedback/distributed-systems-with-node.js/protocol/#grpc","title":"gRPC","text":"\u50cf\u662f REST \u6216 GraphQL \u90fd\u662f\u5efa\u7acb\u5728\u8cc7\u6599\u4e4b\u4e0a\uff0c\u800c\u900f\u904e CRUD \u7684\u65b9\u5f0f\u53bb\u57f7\u884c\u884c\u70ba\uff0c\u9019\u88e1\u5c31\u53ef\u4ee5\u6ce8\u610f\u5230\u5176\u9650\u5236\uff1a
\u5927\u91cf\u7684\u540d\u8a5e\uff0c\u800c\u50c5\u6709\u5c11\u91cf\u7684\u52d5\u8a5e
\u8209\u4f8b\uff1a \u82e5\u6709\u4e00\u500b API endpoint \u662f\u7528\u4f86\u5efa\u7acb\u767c\u7968\uff0c\u4eca\u6b32\u65b0\u589e\u4e00\u9644\u5e36\u689d\u4ef6\uff1a\u662f\u5426\u540c\u6642\u5bc4\u9001\u4fe1\u7bb1\u901a\u77e5\u3002 \u6709\u4ec0\u9ebc\u6a23\u7684\u65b9\u5f0f\uff1f
need_send_email
\uff1a \u8b93\u8a72 endpoint \u8d8a\u4f86\u8d8a\u8907\u96dcRemote Procedure Call
\u5c31\u662f\u4f86\u89e3\u6c7a\u6b64\u4e8b\u7684\uff01
gRPC \u70ba Google \u5efa\u7acb\u7684 RPC \u6a19\u6e96
gRPC \u9810\u8a2d\u5373\u975e\u4f7f\u7528 JSON \u683c\u5f0f\u9032\u884c\u8cc7\u8a0a\u7684\u50b3\u905e\uff0c\u800c\u662f\u4ee5 Protocol Buffers
\uff08ProtoBufs\uff09\u7684\u65b9\u5f0f\u9032\u884c\u50b3\u905e\u3002
\u6709\u5e7e\u500b\u689d\u4ef6\uff1a
.proto
\uff0c\u4e14\u9700\u8981\u8b93 client \u64c1\u6709\u3002int32
\uff0cint64
\uff0cfloat
\uff0cdouble
\u7b49\u7b49\u3002\u9019\u4e9b\u689d\u4ef6\u6709\u5e7e\u500b\u597d\u8655\uff1a
{\"id\":42} v.s. 42\n
v1 \u9700\u8981 arg1 arg2\nv2 \u9700\u8981 arg1 arg2 arg3\n\u82e5 client \u50c5\u62ff\u5230 v1 \u7684 proto\uff0c\u7a0b\u5f0f\u4e0a\u6703\u81ea\u52d5\u5ffd\u7565 arg2 \u5f8c\u7684\u53c3\u6578\n
"},{"location":"feedback/distributed-systems-with-node.js/protocol/#code-demo_1","title":"Code Demo","text":"syntax = \"proto3\";\npackage recipe;\nservice RecipeService {\n rpc GetRecipe(RecipeRequest) returns (Recipe) {}\n rpc GetMetaData(Empty) returns (Meta) {}\n}\nmessage Recipe {\n int32 id = 1;\n string name = 2;\n string steps = 3;\n repeated Ingredient ingredients = 4;\n}\nmessage Ingredient {\n int32 id = 1;\n string name = 2;\n string quantity = 3;\n}\nmessage RecipeRequest {\n int32 id = 1;\n}\nmessage Meta {\n int32 pid = 2;\n}\nmessage Empty {}\n
import { loadPackageDefinition, Server } from \"@grpc/grpc-js\";\nimport { loadSync } from \"@grpc/proto-loader\";\n\n// \u8b80\u53d6 proto \u6a94\nconst def = loadSync(__dirname + \"/grpc.proto\");\nconst proto = loadPackageDefinition(def);\n\n// \u5efa\u7acb\u8655\u7406\u908f\u8f2f\n// handlers = ...;\nconst server = new Server();\nserver.addService(proto.recipe.RecipeService.service, handlers);\n\n// \u5efa\u7acb\u5c0d\u5916\u9023\u7dda\n// credentials = ...; for https\nconst cb = () => server.start();\nserver.bindAsync(`${HOST}:${PORT}`, credentials, cb);\n\n// \u5efa\u7acb handlers\nconst handlers = {\n GetMetaData: (_call, cb) => {\n cb(null, {\n // error = null\n pid: process.pid,\n });\n },\n GetRecipe: (call, cb) => ({}), // if (call.request.id === 42)\n};\n
import { loadPackageDefinition } from \"@grpc/grpc-js\";\nimport { loadSync } from \"@grpc/proto-loader\";\n\n// \u8b80\u53d6 proto \u6a94\nconst def = loadSync(__dirname + \"/grpc.proto\");\nconst proto = loadPackageDefinition(def);\n\n// credentials = ...; for https\nconst client = new proto.recipe.RecipeService(TARGET, credentials);\n\nclient.getMetaData({}, cb);\nclient.getRecipe({ id: 42 }, cb);\n
"},{"location":"feedback/distributed-systems-with-node.js/protocol/#live-demo_1","title":"Live Demo","text":"http://localhost:3001
"},{"location":"feedback/distributed-systems-with-node.js/protocol/#alternatives","title":"Alternatives","text":"\u9664\u4e86 gRPC \u9084\u6709\u4ec0\u9ebc\u985e\u4f3c\u7684\u6771\u897f\uff1f
ProtoBufs
MessagePack
\u96d6\u7136\u540c\u70ba binary representation of hierarchical object data\uff0c\u4f46
.proto
\uff09\u53bb\u63cf\u8ff0gRPC
\u95dc\u65bc gRPC \u63a8\u85a6\u7684\u6587\u7ae0\uff1a
\u7522\u54c1\u90fd\u9700\u8981\u5411\u4f7f\u7528\u8005\u5c55\u793a\u90e8\u5206\u7684\u627f\u8afe\uff0c\u4f8b\u5982\uff1a
\u9019\u985e\u4fdd\u8b49\uff0c\u7a31\u70ba SLA\uff08Service Level Agreement\uff09\u3002
SLA \u901a\u5e38\u7531\u591a\u500b SLO\uff08Service Level Objective\uff09\u7d44\u6210\uff0c\u4f8b\u5982\uff1a \u4e00\u4efd SLA \u63d0\u4f9b \u5feb\u901f\u4e14\u5b89\u5168\u7684\u652f\u4ed8\u91d1\u9322
\uff0c\u5176\u4e2d\u7684 \u4fdd\u8b49\u4e0d\u6703\u91cd\u8907\u6263\u6b3e
\u5373\u70ba SLO
SLI\uff08Service Level Indicator\uff09\u5373\u662f SLO \u7684\u6307\u6a19\uff0c\u4f8b\u5982 \u76ee\u6a19\u5728 100ms \u5167\u56de\u61c9\uff0c\u5be6\u969b\u6e2c\u8a66\u70ba\u5e73\u5747\u65bc 80ms \u5167\u56de\u61c9
\u597d\u7684\u670d\u52d9 SLO / SLI
\u9700\u5927\u65bc\u7b49\u65bc 1
\u3002
\u82e5\u8981\u6c42\u5728\u4e00\u500b\u670d\u52d9\u6709\u7279\u5b9a\u7684 SLO\uff0c\u5c31\u5fc5\u9808\u540c\u6642\u8a08\u7b97\u8a72\u670d\u52d9\u4e2d\u6240\u6709\u6703\u4f7f\u7528\u7684\u5b50\u670d\u52d9\u7684 SLO\u3002
\u6709\u6642\u5019\uff0c\u7522\u54c1\u904e\u65bc\u8907\u96dc\u6c92\u8fa6\u6cd5\u7522\u51fa\u5b8c\u6574\u7684\u6d41\u7a0b\u5716\uff0c\u4e8b\u5be6\u7684\u7c21\u5316\u6216\u589e\u52a0 Tracing \u90fd\u53ef\u4ee5\u5e6b\u52a9\u7522\u51fa\u3002
"},{"location":"feedback/distributed-systems-with-node.js/sla-and-load-testing/#load-test","title":"Load Test","text":"Load Test \u76ee\u7684\u5373\u662f\u8a08\u7b97\u51fa SLI\u3002
Load Test \u548c Stress Test \u5dee\u5728\u54ea\u88e1\uff1f
Latency \u4ee3\u8868\u5f9e\u4e8b\u4ef6\u89f8\u767c
\u5230\u4e8b\u4ef6\u56de\u61c9
\u7684\u6642\u9593\u5dee\uff0c\u6b64\u8655\u4e26\u4e0d\u5305\u542b\u932f\u8aa4\u56de\u61c9\u7684\u72c0\u6cc1\u3002
\u4ee5\u4e0b\u7bc4\u4f8b\uff0c\u90fd\u5c07\u4ee5 Latency \u70ba SLO\uff0c\u4e26\u8a08\u7b97\u4e4b\u3002
"},{"location":"feedback/distributed-systems-with-node.js/sla-and-load-testing/#baseline","title":"Baseline","text":"\u6e2c\u8a66\u91cd\u8981\u7684\u4e00\u9ede\u662f\u8981\u6709\u4e00\u500b\u57fa\u6e96\u9ede\uff0c\u4e00\u500b\u7522\u54c1\u53ef\u4ee5\u6709\u591a\u7a2e Baseline
\u4f8b\u5982\uff1a
\u4e0d\u540c\u7684 Baseline \u6703\u6709\u81ea\u5df1\u7684\u610f\u7fa9\uff0c\u6839\u64da\u9700\u6c42\u5236\u5b9a\u51fa\u7406\u60f3\u7684 Baseline\u3002
"},{"location":"feedback/distributed-systems-with-node.js/sla-and-load-testing/#\u7bc4\u4f8b","title":"\u7bc4\u4f8b","text":"\u4ee5 Node.js \u9019\u8a9e\u8a00\u6240\u80fd\u505a\u51fa\u6700\u55ae\u7d14\u7684 server \u70ba Baseline\uff1a
require(\"http\")\n .createServer((req, res) => res.end(\"ok\"))\n .listen(80, () => null);\n
\u4f9d\u6b64\u89c0\u5bdf\u51fa\uff0c\u5728\u7d71\u4e00\u6a5f\u5668\u898f\u683c\u4e0b\u4efb\u4f55\u8981\u6c42\u5728 Node.js \u9019\u8a9e\u8a00\u6709\u8d85\u8d8a\u5176 Latency \u90fd\u662f\u6c92\u610f\u7fa9\u7684\u3002
\u5728\u8ffd\u6c42\u66f4\u597d\u7684 Latency \u6642\uff0c\u6216\u8a31\u8a72\u8003\u616e\u5176\u4ed6\u8a9e\u8a00\uff0c\u5982 C++ \u6216 Rust\u3002 \u4f46\u6b64\u6642\u4fbf\u9700\u8981\u6b0a\u8861\u5176\u4ed6\u8003\u91cf\uff0c\u5982\uff1a\u6703\u4f7f\u7528\u8a72\u8a9e\u8a00\u7684\u4eba\u6578\uff0c\u793e\u7fa4\u767c\u5c55\u7a0b\u5ea6\u7b49\u7b49\u3002
"},{"location":"feedback/distributed-systems-with-node.js/sla-and-load-testing/#latency","title":"Latency","text":"Stat 2.5% 50% 97.5% 99% Avg Stdev Max Latency 0ms 0ms 0ms 0ms 0.01ms 0.08ms 9.45ms Req/Sec 42,751 39,039 36,703 29,487 38,884.14 1,748.17 29,477\u5176\u4e2d\u7684 29487 \u500b\u6bcf\u79d2\u8acb\u6c42\u91cf
\u5373\u662f TP99\uff08Top Percentile\uff09\u4e0b\u7684\u57fa\u6e96\u9ede\u3002
\u6709\u6642\u6703\u8a8d\u70ba 1% \u662f\u6975\u7aef\u503c\uff0c\u61c9\u8a72\u5ffd\u7565\u3002\u7136\u800c\u5728\u7db2\u8def\u4e16\u754c\u4e2d\uff0c\u4e00\u500b\u4f7f\u7528\u8005\u5e38\u5e38\u6703\u9700\u8981\u91dd\u5c0d\u4e00\u500b\u7db2\u9801\u505a\u51fa\u5f88\u591a\u8acb\u6c42\u3002\u82e5\u4ee5\u4e00\u500b\u9801\u9762\u9700\u8981 40 \u500b\u8cc7\u6e90\u4f86\u8a08\u7b97\uff0c\u5728\u8dd1\u7b2c\u4e94\u500b\u9801\u9762\u4e4b\u5f8c\uff0c\u6709\u8fd1\u4e4e 0.003 % \u7684\u6a5f\u7387\u4f7f\u7528\u8005 \u4e0d\u6703 \u89f8\u767c\u5230 95% \u7684\u72c0\u6cc1\u3002 How NOT to Measure Latency
"},{"location":"feedback/distributed-systems-with-node.js/sla-and-load-testing/#\u4f7f\u7528-reverse-proxy---haproxy","title":"\u4f7f\u7528 Reverse Proxy - HAProxy","text":"Percentile With Proxy Without 99.9% 1ms 1ms 99.99% 2ms 2ms 99.999% 5ms 3ms\u5f97\u5230 19967 \u500b\u6bcf\u79d2\u8acb\u6c42\u91cf
\uff0c\u76f8\u6bd4\u65bc\u57fa\u6e96\u9ede 29487
\uff0c\u770b\u5f97\u51fa\u5728\u6700\u55ae\u7d14\u7684\u61c9\u7528\u7a0b\u5f0f\u4e0b\u589e\u52a0 r-proxy \u6703\u8b93\u61c9\u7528\u7a0b\u5f0f\u8b8a\u6162\u3002
\u4f46\u82e5\u8003\u616e\u771f\u6b63\u7684\u61c9\u7528\u7a0b\u5f0f\uff0c\u5047\u5982\u56de\u61c9\u6642\u9593\u70ba 100ms\uff0c\u4f7f\u7528 r-proxy \u96d6\u6703\u589e\u52a0\u56de\u61c9\u6642\u9593\uff0c\u537b\u50c5\u50c5\u589e\u52a0 1~2ms\uff0c\u6574\u9ad4\u6548\u76ca\u9084\u662f\u5927\u65bc\u5176\u6d88\u8017\u7684\u6548\u80fd\u3002
"},{"location":"feedback/distributed-systems-with-node.js/sla-and-load-testing/#\u82e5\u8003\u616e-http-compression","title":"\u82e5\u8003\u616e HTTP Compression","text":"\u4e0a\u8ff0\u4f8b\u5b50\u50c5\u8003\u616e\u6700\u57fa\u790e\u7684\u6846\u67b6\u6548\u80fd\uff0c\u82e5\u70ba\u4e86\u58d3\u7e2e\u7db2\u8def\u6d41\u91cf
\u4e0a\u4e00\u4efd\u5831\u544a\u8a0e\u8ad6\u5404\u7a2e\u670d\u52d9\u9593\u7684\u6e9d\u901a\u65b9\u5f0f\uff1a
\u7a76\u7adf\u54ea\u4e00\u9805\u662f\u771f\u6b63\u6709\u6548\u7387\u7684\uff1f
"},{"location":"feedback/distributed-systems-with-node.js/sla-and-load-testing/#\u7d50\u679c","title":"\u7d50\u679c","text":"Percentile JSON GraphQL gRPC 99% 10ms 13ms 24ms 99.9% 18ms 22ms 32ms 99.99% 26ms 36ms 82ms 99.999% 48ms 67ms 82ms"},{"location":"feedback/distributed-systems-with-node.js/sla-and-load-testing/#\u8a0e\u8ad6","title":"\u8a0e\u8ad6","text":"\u6211\u5011\u77e5\u9053 GraphQL \u7684\u50f9\u503c\u5728\u65bc\u53ef\u4ee5\u5728\u4e00\u500b request \u4e2d\u53d6\u5f97\u6240\u6709\u8a0a\u606f\uff0c\u4e14\u4e0d\u9700\u8981\u91dd\u5c0d\u6bcf\u500b\u5834\u666f\u5c0d\u5916\u958b\u51fa\u4e00\u500b endpoint\u3002
\u6709\u6642\u70ba\u4e86\u8ffd\u6c42\u958b\u767c\u6548\u7387\uff0c\u800c\u6703\u6368\u68c4\u90e8\u5206\u7522\u54c1\u6548\u7387\uff0c\u9019\u6642\u4fbf\u8981\u6b0a\u8861\u7522\u54c1\u7684\u7279\u6027\u8f03\u504f\u5411\u65bc\u54ea\u908a\u3002
\u9664\u6b64\u4e4b\u5916 JSON \u7684\u89e3\u6790\u5728 v8 engine \u4e2d\uff0c\u6548\u7387\u5df2\u7d93\u88ab\u6975\u81f4\u7684\u58d3\u7e2e\u4e86\uff0c\u6240\u4ee5\u76f8\u5c0d\u800c\u8a00\uff0c\u5229\u7528 Buffer \u505a binary \u89e3\u6790\u7684 gRPC \u5728\u6548\u80fd\u4e0a\u5c31\u77ee\u4e86\u4e00\u622a\u3002\u7531\u65bc\u5176\u7279\u6027\uff0c\u8b93\u4ed6\u5728 C++ \u9019\u985e\u7de8\u8b6f\u904e\u7684\u7a0b\u5f0f\u78bc\u4e2d\u6709\u8f03\u9ad8\u7684\u6548\u80fd\uff0c\u800c\u4e0d\u984d\u5916\u8655\u7406 GC \u9019\u985e\u4e8b\u4ef6\u3002
"},{"location":"feedback/distributed-systems-with-node.js/sla-and-load-testing/#\u7d50\u8ad6","title":"\u7d50\u8ad6","text":"\u82e5\u5e0c\u671b\u7522\u54c1\u80fd\u5728 50ms \u5167\u56de\u61c9\u8acb\u6c42\uff0c\u4e26\u5f97\u51fa\u7dda\u4e0a\u74b0\u5883\u9ad8\u5cf0\u7d04\u6bcf\u79d2 20 \uff08\u6216\u6bcf\u5206 1200 \u6216\u6bcf\u6642 72000\uff09\u500b\u8acb\u6c42\u3002
\u555f\u7528\u4e00\u500b Docker container \u6642\uff0c\u5982\u8981\u5728 TP99 \u5167\u56de\u61c9 50ms \u4ee5\u4e0b\uff0c\u50c5\u80fd\u63a5\u53d7\u6bcf\u79d2 6 \u500b\u8acb\u6c42\u3002
\u518d\u589e\u52a0\u4e00\u500b Docker container\uff0c\u6b64\u6642\u80fd\u63a5\u53d7\u6bcf\u79d2 10 \u500b\uff0c\u4f9d\u5e8f\u5f80\u4e0b\u52a0\u3002 \u6700\u7d42\u5f97\u5230 4 \u500b container \u70ba\u5408\u7406\u6578\u91cf\u3002
"},{"location":"feedback/distributed-systems-with-node.js/sla-and-load-testing/#\u5de5\u5177","title":"\u5de5\u5177","text":"\u4e0a\u8ff0\u6240\u6709\u6e2c\u8a66\uff0c\u7686\u662f\u4f7f\u7528 autocannon \u9019\u8edf\u9ad4\u6e2c\u8a66\uff0c\u76f8\u95dc\u4ee3\u78bc\u6a21\u5f0f\u7686\u70ba\uff1a
autocannon -d 60 -c 10 -l http://localhost:3000\n
\u5176\u610f\u7fa9\u5728\u65bc\uff1a\u5efa\u7acb 10 \u500b\u9023\u7dda\uff08-c
\uff09\uff0c\u4e26\u6301\u7e8c\uff08-d
\uff0960 \u79d2\uff0c\u4e26\u5c55\u793a\u8a73\u76e1\u7684\u7d50\u679c\uff08-l
\uff09\uff0c\u9810\u8a2d\u6bcf\u500b\u9023\u7dda\u6bcf\u79d2\u6253 1 \u6b21\u8acb\u6c42\uff08-p
\uff09
\u5c0d\u65bc\u8a72\u4f7f\u7528\u4f55\u7a2e\u5de5\u5177\uff0c\u5176\u5be6\u4e0d\u7121\u7279\u5225\u8981\u6c42\uff0c\u4f46\u662f\u5c0d\u65bc\u5982\u4f55\u89e3\u8b80\u7d50\u679c\uff0c\u4ecd\u63a8\u85a6 How NOT to Measure Latency \u9019\u90e8\u5f71\u7247
\u82e5\u662f\u591a\u9805\u670d\u52d9\u5408\u8a08\u7684 latency\uff08\u6216\u751a\u81f3\u5168\u516c\u53f8\uff09\uff0c\u9019\u6642\u4f7f\u7528\u540c\u4e00\u7a2e\u5de5\u5177\u5c31\u986f\u5f97\u91cd\u8981\u4e86\u3002
"},{"location":"feedback/distributed-systems-with-node.js/sla-and-load-testing/#\u5fae\u5be6\u4f5c","title":"\u5fae\u5be6\u4f5c","text":"auth
"},{"location":"feedback/future-of-fusion-energy/","title":"\u5c55\u671b\u6838\u878d\u5408","text":"IMF 2017 \u5e74\u7684\u7d71\u8a08\u986f\u793a\u5168\u7403\u6709 154 \u500b\u958b\u767c\u4e2d\u7d93\u6fdf\u9ad4\u548c 39 \u500b\u5df2\u958b\u767c\u7d93\u6fdf\u9ad4\uff0c\u6211\u5011\u53ef\u4ee5\u5728\u5df2\u958b\u767c\u570b\u5bb6\u7684\u80fd\u6e90\u6d88\u8017\u89c0\u5bdf\u5230\u6b63\u9010\u6f38\u7a69\u5b9a\u751a\u81f3\u958b\u59cb\u6e1b\u5c11\uff0c\u76f8\u5c0d\u800c\u8a00\u90a3\u4e9b\u958b\u767c\u4e2d\u7684\u570b\u5bb6\u9700\u8981\u7684\u80fd\u6e90\u5247\u662f\u9010\u5e74\u589e\u9577\u3002
\u9010\u5e74\u5404\u570b\u6bcf\u4eba\u80fd\u91cf\u6d88\u8cbb\u529b \u9010\u5e74\u5404\u570b\u6bcf\u5e74\u80fd\u91cf\u6d88\u8cbb\u529b\u7684\u8b8a\u52d5\u7387/\u958b\u767c\u4e2d\u570b\u5bb6\u6709\u4e2d\u570b\u548c\u8d8a\u5357\uff0c\u5df2\u958b\u767c\u7684\u6709\u5fb7\u570b\u3001\u7f8e\u570b\u548c\u53f0\u7063\uff0c\u8a73\u898b\u76f8\u95dc\u7684\u4e92\u52d5\u9023\u7d50
\u9019\u4ee3\u8868\u82e5\u5df2\u958b\u767c\u570b\u5bb6\u5728\u4e0d\u6e1b\u5c11\uff08\u4e5f\u4e0d\u589e\u52a0\uff09\u8017\u80fd\u7684\u60c5\u6cc1\u4e0b\uff0c\u4eba\u985e\u6240\u9700\u7684\u80fd\u6e90\u4ecd\u6703\u8d8a\u4f86\u8d8a\u591a\uff0c\u7562\u7adf\u5df2\u958b\u767c\u570b\u5bb6\u662f\u6c92\u6709\u7acb\u5834\u53bb\u963b\u6b62\u90a3\u4e9b\u958b\u767c\u4e2d\u570b\u5bb6\u53bb\u63d0\u5347\u958b\u767c\u7a0b\u5ea6\uff0c\u4f46\u662f\u9019\u4e0d\u4ee3\u8868\u6211\u5011\u4e0d\u80fd\u63d0\u4f9b\u5e6b\u52a9\u3002
\u4ee5\u5f80\u70ba\u4e86\u5feb\u901f\u958b\u767c\uff0c\u5e7e\u4e4e\u7121\u7bc0\u5236\u7684\u4f7f\u7528\u80fd\u6e90\uff0c\u800c\u9019\u884c\u70ba\u5f88\u986f\u7136\u5730\u9020\u6210\u4e86\u67d0\u4e9b\u554f\u984c\uff0c\u6211\u5011\u53ef\u4ee5\u907f\u514d\u8b93\u5927\u5bb6\u8d70\u540c\u6a23\u7684\u834a\u68d8\u8def\u3002\u4ecb\u7d39\u9019\u672c\u66f8\u4e0d\u50c5\u50c5\u662f\u70ba\u4e86\u66b8\u89e3\u6838\u878d\u5408\u767c\u5c55\u7684\u9032\u7a0b\u548c\u672a\u4f86\u5c55\u671b\uff0c\u66f4\u662f\u56e0\u70ba\u5176\u4e2d\u91dd\u5c0d\u518d\u751f\u80fd\u6e90\u7684\u7a2e\u7a2e\u5206\u6790\uff0c\u8b93\u6211\u5011\u660e\u767d\u5176\u5be6\u6211\u5011\u53ef\u4ee5\u505a\u51fa\u5f88\u591a\u9078\u64c7\uff0c\u4f86\u5584\u5f85\u9019\u500b\u4e58\u8f09\u8457\u6211\u5011\u7684\u6bcd\u89aa\u3002\u6b63\u56e0\u70ba\u6211\u5011\u53bb\u5b78\u7fd2\uff0c\u6240\u4ee5\u624d\u6709\u6a5f\u6703\u505a\u51fa\u65b0\u7684\u9078\u64c7\u3002
\u6211\u5011\u6709\u54ea\u4e9b\u9078\u64c7
\u6211\u80fd\u60f3\u5230\u6700\u8b93\u4eba\u6709\u52d5\u529b\u53bb\u57f7\u884c\u7684\u5c31\u662f\u6295\u8cc7\u3002\u56e0\u70ba\u6e05\u695a\u73fe\u5728\u4e16\u754c\u518d\u751f\u80fd\u6e90\u767c\u5c55\u9032\u7a0b\uff0c\u6211\u5011\u53ef\u4ee5\u66f4\u6709\u4fe1\u5fc3\u7684\u95dc\u6ce8\u90a3\u4e9b\u6b63\u8d70\u5728\u524d\u7aef\u7684\u7522\u696d\uff0c\u4f8b\u5982\u4eca\u5e74\uff082022\uff09\u7684\u65b0\u805e\uff1a\u82ac\u862d\u516c\u53f8\u8a2d\u8a08\u51fa\u5546\u7528\u6c99\u96fb\u6c60\u3002\u53e6\u5916\u6211\u5011\u9084\u53ef\u4ee5\u505a\u4ec0\u9ebc\uff1f\u81fa\u7063\u76ee\u524d\u5c0d\u65bc\u516c\u53f8\u751a\u81f3\u5bb6\u5ead\u7528\u7684\u592a\u967d\u80fd\u96fb\u677f\u5927\u529b\u88dc\u52a9\uff0c\u5982\u679c\u4f60\u66b8\u89e3\u592a\u967d\u80fd\u7684\u4e00\u4e9b\u512a\u9ede\u3001\u7f3a\u9ede\u548c\u89e3\u6c7a\u8fa6\u6cd5\uff0c\u4e5f\u8a31\u4f60\u66f4\u6a02\u610f\u53bb\u505a\u9019\u500b\u5617\u8a66\u3002
\u6709\u4e00\u6b21\u56de\u5bb6\uff0c\u770b\u5230\u5abd\u5abd\u628a\u6d17\u8863\u6a5f\u6d17\u5b8c\u7684\u6c34\u6536\u96c6\u8d77\u4f86\uff0c\u4e26\u7528\u9019\u500b\u6c34\u53bb\u62d6\u64e6\u5730\u3002\u6211\u60f3\uff0c\u5c0d\u65bc\u53cb\u5584\u74b0\u5883\u7684\u505a\u6cd5\u53ef\u4ee5\u6709\u5f88\u591a\u7a2e\uff0c\u5f80\u5f80\u9019\u4e9b\u505a\u6cd5\u90fd\u662f\u4e00\u4e9b\u751f\u6d3b\u4e2d\u7684\u5c0f\u5730\u65b9\uff0c\u800c\u4e4b\u6240\u4ee5\u4f60\u80fd\u6ce8\u610f\u5230\u9019\u4e9b\u5c0f\u5730\u65b9\u4e26\u4e0d\u662f\u56e0\u70ba\u4f60\u662f\u500b\u74b0\u4fdd\u76f8\u95dc\u9818\u57df\u7684\u7814\u7a76\u4eba\u54e1\uff0c\u800c\u662f\u56e0\u70ba\u4f60\u628a\u5225\u4eba\u653e\u5728\u5fc3\u4e0a\u3002\u5982\u679c\u5e73\u5e38\u751f\u6d3b\u90fd\u662f\u770b\u96fb\u8996\u3001\u5403\u7f8e\u98df\uff0c\u60f3\u7684\u4e8b\u60c5\u505a\u7684\u4e8b\u60c5\u90fd\u53ea\u662f\u70ba\u4e86\u81ea\u5df1\uff0c\u9019\u6a23\u548c\u4ed6\u8ac7\u74b0\u4fdd\uff0c\u771f\u7684\u5c31\u5982\u5c0d\u725b\u5f48\u7434\u822c\u3002\u5f9e\u300c\u591a\u505a\u4e00\u4e9b\u4e8b\u300d\u4e2d\u7684\u505a\u597d\u5eda\u9918\u56de\u6536\u3001\u8cfc\u8cb7\u53cb\u5584\u74b0\u5883\u7684\u8fb2\u7522\u54c1\uff08\u8a3b\u4e00\uff09\u7b49\uff0c\u5230\u300c\u5c11\u505a\u4e00\u4e9b\u4e8b\u300d\u4e2d\u7684\u6e1b\u5c11\u51b7\u6c23\u4f7f\u7528\u3001\u6e1b\u5c11\u71b1\u6c34\u7684\u4f7f\u7528\u7b49\uff0c\u9019\u4e9b\u90fd\u662f\u53ef\u4ee5\u505a\u7684\u65b9\u5f0f\uff0c\u4f46\u4e5f\u5c31\u53ea\u662f\u8868\u9762\u7684\u73fe\u8c61\u3002
\u771f\u6b63\u6709\u50f9\u503c\u7684\u662f\u6211\u5011\u5167\u5728\u7684\u521d\u5fc3\uff0c\u5982\u679c\u6211\u5011\u80fd\u540c\u7406\u4ed6\u4eba\u751a\u81f3\u6574\u500b\u5927\u81ea\u7136\uff0c\u505a\u8d77\u9019\u4e9b\u4e8b\u5c31\u6703\u66f4\u7d14\u7cb9\u4e14\u6301\u4e45\u3002\u4f8b\u5982\u8003\u616e\u5230\u5439\u51b7\u6c23\u5176\u5be6\u53ea\u662f\u628a\u71b1\u6c23\u9001\u5f80\u5916\u9762\uff0c\u8b93\u5728\u5916\u9762\u7684\u6240\u6709\u4eba\u5171\u540c\u627f\u64d4\u4f60\u6240\u6392\u51fa\u7684\u71b1\uff0c\u6216\u8005\u4e0d\u505a\u5eda\u9918\u56de\u6536\u5176\u5be6\u6703\u964d\u4f4e\u5783\u573e\u711a\u5316\u7210\u7684\u4f7f\u7528\u58fd\u547d\u9032\u800c\u589e\u52a0\u63a9\u57cb\u5783\u573e\u7684\u91cf\uff08\u8a3b\u4e8c\uff09\u3002\u554f\u984c\u597d\u50cf\u56de\u5230\u4e86\u300c\u6211\u5011\u8981\u600e\u9ebc\u540c\u7406\u4ed6\u4eba\u300d\u9019\u7a2e\u539f\u59cb\u5230\u96e3\u4ee5\u56de\u7b54\u7684\u554f\u984c\u3002\u6211\u60f3\u6700\u597d\u7684\u65b9\u5f0f\u5c31\u662f\u5b78\u7fd2\u4e26\u89c0\u5bdf\u90a3\u4e9b\u771f\u6b63\u505a\u5230\u7684\u4eba\uff0c\u4f8b\u5982\u900f\u904e\u56db\u66f8\uff08\u6216 \u8056\u7d93\u3001\u4f5b\u7d93\u3001\u53e4\u862d\u7d93\uff09\u5b78\u7fd2\u5b54\u5b50\uff08\u6216 \u8036\u8607\u3001\u4f5b\u9640\u3001\u7a46\u7f55\u9ed8\u5fb7\uff09\u7684\u751f\u6d3b\u65b9\u5f0f\u3002
\u8a3b\u4e00\uff1a\u770b\u8d77\u4f86\u53cb\u5584\u8015\u4f5c\u597d\u50cf\u548c\u74b0\u4fdd\u6c92\u95dc\u4fc2\uff0c\u4f46\u5982\u679c\u4f60\u628a\u6642\u9593\u8ef8\u62c9\u9577\u3001\u5730\u57df\u62c9\u5ee3\uff0c\u53cb\u5584\u8015\u4f5c\u5176\u5be6\u64c1\u6709\u975e\u5e38\u9ad8\u7684\u7d93\u6fdf\u6548\u76ca\uff0c\u4ed6\u80fd\u6e1b\u5c11\u5f88\u591a\u4e0d\u5fc5\u8981\u7684\u640d\u8017\uff0c\u9032\u800c\u6e1b\u5c11\u5c0d\u5730\u7403\u7684\u8ca0\u64d4\u3002
\u8a3b\u4e8c\uff1a\u6211\u5011\u53ef\u4ee5\u901a\u904e\u96a8\u888b\u5fb5\u6536\u4f86\u63d0\u9ad8\u56de\u6536\u7387\uff0c\u96d6\u7136\u9019\u9700\u8981\u63d0\u9ad8\u6c11\u773e\u7684\u8a8d\u77e5\u548c\u653f\u5e9c\u7684\u6295\u8cc7\u6210\u672c\u624d\u53ef\u80fd\u5be6\u73fe\u3002
\u81fa\u7063\u7684\u518d\u751f\u80fd\u6e90\u81fa\u7063\u8fd1\u5e74\u4f86\u5927\u529b\u63d0\u5021\u518d\u751f\u80fd\u6e90\uff0c\u5df2\u7d93\u770b\u5230\u6bcf\u5e74\u6b63\u4ee5\u8d85\u904e\u5169\u6210\u7684\u901f\u5ea6\u6210\u9577\uff0c\u4f46\u662f\u592a\u967d\u80fd\u3001\u98a8\u529b\u767c\u96fb\u5c6c\u65bc\u9593\u6b47\u6027\u767c\u96fb\uff0c\u6709\u4ec0\u9ebc\u597d\u89e3\u6cd5\u4f86\u8655\u7406\u90a3\u4e9b\u6c92\u592a\u967d\u548c\u98a8\u7684\u6642\u5019\u5462\uff1f
"},{"location":"feedback/future-of-fusion-energy/energy/","title":"\u80fd\u6e90","text":"\u80fd\u6e90\uff0c\u6bcf\u65e5\u6240\u9700\uff0c\u5118\u7ba1\u5982\u6b64\uff0c\u6211\u5011\u66b8\u89e3\u80fd\u6e90\u7684\u8d77\u6e90\u55ce\uff1f\u6211\u5011\u5e38\u63d0\u7684\u518d\u751f\u80fd\u6e90\uff08renewable energy\uff09\u6307\u7684\u662f\u54ea\u4e9b\u80fd\u6e90\u5462\uff1f
\u672c\u7bc7\u7684\u5b8c\u6574\u8aaa\u660e\uff0c\u53ef\u4ee5\u8a73\u95b1 Sustainable Energy - without the host air\u3002
\u4eba\u985e\u88fd\u9020\u96fb\u529b\u7684\u65b9\u5f0f\u57fa\u672c\u4e0a\u5c31\u662f\u52a0\u71b1\u6c34\u4f86\u8f49\u52d5\u6e26\u8f2a\u4e26\u9032\u800c\u900f\u904e\u96fb\u78c1\u53cd\u61c9\u7522\u96fb\uff0c\u9019\u4e4b\u4e2d\u7684\u4f8b\u5916\u5c31\u662f\u592a\u967d\u80fd\u7684\u5149\u96fb\u53cd\u61c9\u3002
"},{"location":"feedback/future-of-fusion-energy/energy/#\u7a2e\u985e","title":"\u7a2e\u985e","text":"\u5927\u7206\u70b8\u4e4b\u5f8c\u7684\u5341\u5206\u9418\uff0c\u5b87\u5b99\u958b\u59cb\u51b7\u537b\uff0c\u5927\u91cf\u81ea\u7531\u7684\u8cea\u5b50\u3001\u4e2d\u5b50\u3001\u96fb\u5b50\u958b\u59cb\u51b7\u975c\u4e0b\u4f86\uff0c\u4e26\u7d44\u5408\u6210\u4e00\u4e9b\u7c21\u55ae\u7684\u539f\u5b50\u3002\u9019\u4e9b\u539f\u5b50\u4e2d 90% \u662f\u6c2b\u800c\u5269\u4e0b\u7684\u662f\u6c26\u3002\u5728\u9019\u4e9b\u539f\u5b50\u9054\u6210\u4e00\u5b9a\u7684\u6578\u91cf\u5f8c\uff0c\u5c31\u6703\u5f62\u6210\u96f2\u72c0\u7684\u539f\u5b50\u7fa4\uff0c\u5728\u9019\u539f\u5b50\u7fa4\u4e2d\uff0c\u4e3b\u8981\u6709\u5169\u7a2e\u80fd\u91cf\u5f71\u97ff\u8457\u4ed6\u5011\u3002\u7b2c\u4e00\u500b\u662f\u6838\u878d\u5408\uff0c\u7576\u5169\u500b\u8f15\u7684\u539f\u5b50\u6574\u5408\u6210\u4e00\u500b\u8f03\u91cd\u7684\u539f\u5b50\u7684\u6642\u5019\uff0c\u6211\u5011\u7a31\u5176\u904e\u7a0b\u70ba\u6838\u878d\u5408\uff0c\u9019\u500b\u904e\u7a0b\u6703\u4f34\u96a8\u8457\u5927\u91cf\u7684\u80fd\u91cf\u7684\u91cb\u51fa\uff0c\u800c\u9019\u500b\u80fd\u91cf\u6703\u8f49\u5316\u6210\u65b0\u7684\u539f\u5b50\u7684\u52d5\u80fd\uff0c\u52a0\u901f\u5176\u904b\u52d5\u3002\u7b2c\u4e8c\u500b\u662f\u91cd\u529b\uff0c\u7576\u5169\u500b\u539f\u5b50\u8655\u65bc\u5e7e\u8fd1\u771f\u7a7a\u7684\u74b0\u5883\u4e4b\u4e0b\uff0c\u74b0\u5883\u7684\u6469\u64e6\u529b\u8da8\u8fd1\u65bc\u96f6\u6642\uff0c\u5c31\u6703\u8b93\u9019\u5169\u500b\u539f\u5b50\u900f\u904e\u91cd\u529b\u4e92\u76f8\u9760\u8fd1\u548c\u78b0\u649e\uff0c\u800c\u9019\u78b0\u649e\u5c31\u662f\u9020\u6210\u539f\u5b50\u7fa4\u5e73\u5747\u6eab\u5ea6\u9010\u6f38\u4e0a\u5347\u7684\u4e3b\u56e0\u3002
Gravity is the spark that enabled everything.
\u503c\u5f97\u6ce8\u610f\u7684\u662f\uff0c\u5728\u539f\u5b50\u7fa4\u4e4b\u521d\uff0c\u6838\u878d\u5408\u767c\u751f\u7684\u6a5f\u7387\u5fae\u4e4e\u5176\u5fae\u3002\u9019\u662f\u56e0\u70ba\u7576\u5169\u500b\u539f\u5b50\u5728\u4e0d\u5920\u9ad8\u7684\u6eab\u5ea6\u4e0b\u76f8\u649e\uff0c\u53ea\u6703\u9020\u6210\u7269\u7406\u6027\u4e0a\u7684\u78b0\u649e\uff0c\u800c\u8981\u6709\u53ef\u89c0\u7684\u6a5f\u7387\u80fd\u9054\u6210\u6838\u878d\u5408\u53cd\u61c9\u7684\u689d\u4ef6\u74b0\u5883\u64c1\u6709\u7d04 10,000,000 \u5ea6\u3002\u63db\u53e5\u8a71\u8aaa\uff0c\u91cd\u529b\u5728\u5b87\u5b99\u4e4b\u521d\uff0c\u4e3b\u5bb0\u8457\u80fd\u91cf\u7684\u7522\u751f\u3002\u96a8\u8457\u8d85\u5927\u91cf\u7684\u539f\u5b50\u5f7c\u6b64\u78b0\u649e\uff0c\u5c31\u6703\u5f62\u6210\u9069\u5408\u6838\u878d\u5408\u53cd\u61c9\u7684\u74b0\u5883\uff0c\u9019\u6642\u5c31\u6703\u8b93\u6838\u878d\u5408\u9020\u6210\u7684\u52d5\u529b\u548c\u91cd\u529b\u7684\u5f15\u529b\u76f8\u4e92\u5e73\u8861\uff0c\u5f62\u6210\u661f\u661f\uff0c\u6216\u8005\u8aaa\u592a\u967d\u3002\u7576\u6838\u878d\u5408\u7684\u539f\u6599\u88ab\u7528\u5b8c\u4e86\u4e4b\u5f8c\uff0c\u91cd\u529b\u537b\u4ecd\u7136\u5b58\u5728\u65bc\u661f\u661f\u4e2d\u5c31\u6703\u5c0e\u81f4\u7269\u9ad4\u7684\u5d29\u584c\u6700\u5f8c\u9020\u6210\u8d85\u65b0\u661f\uff08supernova\uff0c\u53ef\u80fd\u6301\u7e8c\u5e7e\u500b\u6708\uff09\uff0c\u4e26\u91cb\u51fa\u5927\u91cf\u7684\u80fd\u91cf\u3002\u7531\u65bc\u9019\u80fd\u91cf\u5be6\u5728\u904e\u65bc\u5de8\u5927\uff08\u751a\u81f3\u53ef\u80fd\u548c\u661f\u661f\u4e00\u751f\u91cb\u653e\u7684\u80fd\u91cf\u76f8\u7576\uff09\uff0c\u5c07\u6703\u9032\u4e00\u6b65\u7684\u7d44\u6210\u5b87\u5b99\u4e2d\u66f4\u91cd\u66f4\u5927\u7684\u539f\u5b50\uff0c\u9019\u4e9b\u8f03\u91cd\u7684\u539f\u5b50\u98c4\u6563\u5728\u5b87\u5b99\u4e2d\u53ef\u80fd\u53c8\u6703\u548c\u6c2b\u3001\u6c26\u7d44\u6210\u661f\u96f2\uff08nebula\uff09\u3002
\u6709\u4e9b\u661f\u7403\u4e0d\u5920\u5927\uff0c\u5c0e\u81f4\u91cd\u529b\u7121\u6cd5\u751f\u6210\u8db3\u5920\u7684\u71b1\u91cf\u8b93\u539f\u5b50\u9032\u884c\u6838\u878d\u5408\uff0c\u4f46\u662f\u53c8\u56e0\u70ba\u8db3\u5920\u9760\u8fd1\u661f\u661f\uff08\u6216\u8005\u8aaa\u592a\u967d\uff09\uff0c\u5f9e\u800c\u8b93\u6c2b\u3001\u6c26\u9019\u4e9b\u5c0f\u539f\u5b50\u7372\u5f97\u8db3\u5920\u7684\u71b1\u91cf\uff08\u52d5\u80fd\uff09\u4e26\u9038\u51fa\u661f\u7403\u3002\u7d93\u904e\u4e00\u6bb5\u6642\u9593\u5f8c\uff0c\u8f03\u5927\u7684\u539f\u5b50\uff08\u4f8b\u5982\u78b3\u3001\u9435\uff09\u5c31\u6703\u5728\u9019\u500b\u661f\u7403\u4e2d\u4f54\u6709\u5f88\u5927\u7684\u6bd4\u4f8b\uff0c\u540c\u6642\u53c8\u6709\u8db3\u5920\u7684\u6c2b\u4ee5\u4e0d\u540c\u578b\u614b\uff08\u4f8b\u5982\u6c34\uff09\u4fdd\u7559\u5728\u661f\u7403\u4e2d\uff0c\u5f9e\u800c\u751f\u6210\u5f62\u5f62\u8272\u8272\u7684\u74b0\u5883\uff0c\u4f8b\u5982\u5730\u7403\u3002
\u57fa\u790e\u80fd\u6e90\u7531\u4e0a\u8ff0\u53ef\u77e5\u5305\u542b\uff1a
\u5176\u4ed6\u80fd\u6e90\u4fbf\u90fd\u662f\u5f9e\u9019\u4e9b\u57fa\u790e\u80fd\u6e90\u5ef6\u4f38\u800c\u6210\uff0c\u4f8b\u5982
\u9019\u4e9b\u5ef6\u4f38\u80fd\u6e90\uff0c\u56e0\u70ba\u71b5\u7684\u63d0\u9ad8\uff0c\u9032\u800c\u964d\u4f4e\u6574\u9ad4\u7684\u80fd\u91cf\u8f49\u63db\u6548\u80fd\uff0c\u6240\u4ee5\u55ae\u5c31\u9019\u9ede\u4f86\u8aaa\uff0c\u57fa\u790e\u80fd\u6e90\u66f4\u80fd\u63d0\u4f9b\u512a\u8cea\u7684\u80fd\u91cf\u3002
\u71b5
\u8d8a\u662f\u6df7\u4e82\u7684\u7cfb\u7d71\uff0c\u64c1\u6709\u8d8a\u9ad8\u7684\u71b5\u3002\u4e00\u500b\u7368\u7acb\u7684\u7cfb\u7d71\u4e2d\uff0c\u5176\u5167\u90e8\u7684\u71b5\u6703\u96a8\u8457\u6642\u9593\u4e0a\u5347\uff0c\u63db\u53e5\u8a71\u8aaa\uff0c\u6240\u6709\u4e8b\u7269\u90fd\u50be\u5411\u65bc\u8d70\u5411\u6df7\u4e82\u3002\u7576\u6211\u5011\u5728\u6d88\u8017\u80fd\u91cf\u7684\u6642\u5019\uff0c\u5176\u5be6\u5c31\u662f\u88fd\u9020\u71b5\uff0c\u6240\u4ee5\u90a3\u4e9b\u64c1\u6709\u5f88\u4f4e\u7684\u71b5\u7684\u80fd\u91cf\uff08\u4f8b\u5982\uff0c\u96fb\u529b\uff09\uff0c\u5c31\u6703\u5f88\u597d\u7528\uff0c\u56e0\u70ba\u6211\u5011\u53ef\u4ee5\u5f88\u8f15\u6613\u5730\u900f\u904e\u5b83\uff0c\u7522\u751f\u60f3\u8981\u7684\u6df7\u4e82\u72c0\u614b\u3002
"},{"location":"feedback/future-of-fusion-energy/energy/#\u4eba\u985e\u80fd\u6e90\u7684\u6d88\u8cbb\u529b","title":"\u4eba\u985e\u80fd\u6e90\u7684\u6d88\u8cbb\u529b","text":"\u4eba\u985e\u4e00\u5e74\u6703\u4f7f\u7528\u591a\u5c11\u80fd\u91cf\uff1f\\(18 TW\\)\uff0c\u5305\u542b\u767c\u96fb\uff08\u7d04 \\(6 TW\\)\uff09\u3001\u904b\u8f38\u3001\u52a0\u71b1\u3001\u7269\u7406\u6027\u767c\u71b1\u8017\u640d\u3002\u7136\u800c\u9019\u662f 2018\uff08\u6210\u66f8\u5e74\u4efd\uff09\u7684\u8cc7\u6599\uff0c\u6240\u4ee5\u6642\u81f3\u4eca\u65e5\uff0c\u53ef\u80fd\u6703\u6709\u6240\u5dee\u7570\u3002\u70ba\u4ec0\u9ebc\uff1f\u9019\u662f\u56e0\u70ba\u4eba\u985e\u7684\u8017\u80fd\u6703\u96a8\u8457\u6642\u9593\u905e\u589e\uff0c\u5118\u7ba1\u8d8a\u4f86\u8d8a\u7bc0\u80fd\u7684\u7522\u54c1\u548c\u904b\u8f38\u65b9\u5f0f\u6b63\u4e0d\u65b7\u51fa\u73fe\uff0c\u958b\u767c\u4e2d\u570b\u5bb6\u4ecd\u9700\u8981\u5927\u91cf\u80fd\u91cf\u4f86\u5b8c\u6210\u570b\u57fa\u7684\u958b\u767c\uff0c\u800c\u958b\u767c\u4e2d\u570b\u5bb6\u548c\u5df2\u958b\u767c\u570b\u5bb6\u7684\u6bd4\u4f8b\u7d04\u70ba 10 \u6bd4 1\u3002
\u4ec0\u9ebc\u662f Watts\uff1f\u74e6\u7279\uff08Watts, W\uff09\u662f\u529f\u7387\uff08power\uff09\u7684\u55ae\u4f4d\uff0c\u4e5f\u5c31\u662f\u6bcf\u79d2\u8017\u640d\u80fd\u91cf\uff08energy\uff09\u7684\u91cf\uff0c\u5f0f\u5b50\u5982\u4e0b \\(1W=1J/S\\)\uff0c\u5176\u4e2d\u7684\u7126\u8033\uff08Joules, J\uff09\u5c31\u662f\u80fd\u91cf\u7684\u55ae\u4f4d\u3002\u8209\u4f8b\u4f86\u8aaa\uff0c\u4e00\u516c\u65a4\u7684\u78b3\u64c1\u6709\u7684\u80fd\u91cf\u662f \\(30 MJ\\)\uff0c\u5982\u679c\u4ed6\u53ef\u4ee5\u7dad\u6301 50 \u5206\u9418\u7684\u71c3\u71d2\u72c0\u614b\uff0c\u5c31\u4ee3\u8868\u9019 3000 \u79d2\u4e2d\uff0c\u9019\u516c\u65a4\u7684\u78b3\u63d0\u4f9b\u4e86 10,000 \u74e6\uff08\u6216\u8005 10 \u74e9\uff09\u7684\u529f\u7387\u3002\u5982\u679c\u4e00\u500b\u767d\u71be\u71c8\u6ce1\u9700\u8981 100 \u74e6\u4f86\u7dad\u6301\u9583\u8000\uff0c\u4e00\u516c\u65a4\u7684\u78b3\u5c31\u53ef\u4ee5\u7dad\u6301\u8a72\u71c8\u6ce1 3000 \u79d2\u7684\u9583\u8000\uff08\u56e0\u70ba 10,000 > 100 \u6240\u4ee5\u529f\u7387\u8db3\u5920\u652f\u6490\u71c8\u6ce1\u6240\u9700\uff0c\u4f46\u56e0\u70ba\u78b3\u53ea\u80fd\u71c3\u71d2 3000 \u79d2\uff0c\u6240\u4ee5\u7e3d\u5171\u53ea\u80fd\u7dad\u6301 3000 \u79d2\uff09\u3002
\u4eba\u985e\u4f7f\u7528\u7684\u80fd\u91cf\u4e2d\uff0c\u5404\u7a2e\u767c\u96fb\u65b9\u5f0f\u53c8\u5206\u5225\u4f54\u4e86\u591a\u5c11\uff1f
"},{"location":"feedback/future-of-fusion-energy/energy/#\u6838\u878d\u5408","title":"\u6838\u878d\u5408","text":"\u76ee\u524d\u4eba\u985e\u6bd4\u8f03\u53ef\u884c\u7684\u65b9\u5f0f\u6709\u5169\u7a2e\uff0c\u800c\u9019\u5169\u7a2e\u90fd\u662f\u5229\u7528\u6c2b\u7684\u540c\u4f4d\u7d20\u7684\u78b0\u649e\u4e26\u6539\u8b8a\u5176\u8cea\u5b50\u548c\u4e2d\u5b50\u7684\u7d44\u5408\uff0c\u7522\u751f\u80fd\u91cf\uff08\u56e0\u70ba\u300c\u5f37\u529b\u300d\u88ab\u62c6\u89e3\u800c\u7522\u80fd\uff09\uff1a
\u6c18\u662f\u76f8\u5c0d\u5e38\u898b\u7684\u540c\u4f4d\u7d20\uff0c\u4f54\u5b87\u5b99\u4e2d\u6c2b\u7684\u542b\u91cf\u7684\u516d\u5343\u56db\u767e\u5206\u4e4b\u4e00\uff0c\u63db\u53e5\u8a71\u8aaa\uff0c\u4f60\u5728\u4efb\u4e00\u676f\u6c34\u4e2d\u90fd\u770b\u5f97\u5230\u6c18\u3002\u76f8\u5c0d\u800c\u8a00\u6c1a\u7684\u542b\u91cf\u8f03\u5c11\uff08\u9019\u662f\u56e0\u70ba\u4ed6\u7684\u534a\u9031\u671f\u53ea\u6709\u7d04 12 \u5e74\uff09\uff0c\u6240\u4ee5\u901a\u5e38\u90fd\u662f\u4eba\u5de5\u7522\u751f\u7684\u3002\u7522\u751f\u7684\u65b9\u5f0f\u662f\u900f\u904e\u92f0\u548c\u4e00\u500b\u81ea\u7531\u4e2d\u5b50\u7684\u78b0\u649e\u3002
\u540c\u4f4d\u7d20\u540c\u4f4d\u7d20\u4ee3\u8868\u64c1\u6709\u76f8\u540c\u7684\u8cea\u5b50\u6578\uff0c\u4f46\u662f\u4e2d\u5b50\u6578\u4e0d\u540c\uff0c\u4f8b\u5982\u4e00\u500b\u539f\u5b50\u6838\u64c1\u6709\u4e00\u500b\u8cea\u5b50\u5c31\u7a31\u5176\u70ba\u6c2b\uff0c\u5982\u679c\u6c92\u6709\u4e2d\u5b50\u5c31\u662f\u6c2b\u7684\u4e3b\u8981\u8868\u73fe\u5f62\u5f0f\uff0c\u5982\u679c\u6709\u4e00\u500b\u4e2d\u5b50\u5c31\u7a31\u5176\u70ba\u6c18\uff0c\u6709\u5169\u500b\u5c31\u7a31\u5176\u70ba\u6c1a\u3002
\u6838\u878d\u5408\u7684\u771f\u6b63\u9b45\u529b\u5728\u65bc\u5b83\u7684\u9ad8\u6bd4\u80fd\uff0c\u4e5f\u5c31\u662f\u6bcf\u55ae\u4f4d\u8cea\u91cf\u6240\u5177\u6709\u7684\u80fd\u91cf\u3002\u8209\u4f8b\u4f86\u8aaa\uff0c\u71c3\u71d2\u77f3\u6cb9\u662f\u900f\u904e\u6539\u8b8a\u96fb\u5b50\u7684\u5206\u4f48\u548c\u901f\u5ea6\uff08\u5316\u5b78\u80fd\uff09\u4f86\u7522\u80fd\uff0c\u76f8\u5c0d\u800c\u8a00\uff0c\u6838\u878d\u5408\u662f\u900f\u904e\u6539\u8b8a\u4e2d\u5b50\u548c\u8cea\u5b50\u7684\u5206\u4f48\u4f86\u7522\u80fd\uff0c\u6838\u878d\u5408\u548c\u71c3\u71d2\u77f3\u6cb9\u4f7f\u7528\u76f8\u540c\u8cea\u91cf\u7684\u539f\u6599\uff0c\u80fd\u7522\u751f\u7684\u80fd\u91cf\u537b\u76f8\u5dee\u767e\u842c\u500d\u3002\u63db\u53e5\u8a71\u8aaa\uff0c\u4e00\u516c\u65a4\u7684\u78b3\u53ef\u80fd\u53ef\u4ee5\u5e6b\u4f60\u716e\u4e00\u9813\u665a\u9910\u4f46\u662f\u4e00\u516c\u65a4\u7684\u6838\u878d\u5408\u539f\u6599\u537b\u53ef\u4ee5\u7d66\u4e88\u4e00\u767e\u500b\u4eba\u4e00\u751f\u6240\u9700\u7684\u80fd\u91cf\u3002\u518d\u8209\u500b\u4f8b\u5b50\uff0c\u73fe\u5728\u4f60\u624b\u908a\u7684\u624b\u6a5f\u96fb\u6c60\u64c1\u6709\u7684\u92f0\uff08\u7528\u4f86\u7522\u6c1a\uff09\u548c\u4f60\u8eab\u9ad4\u4e2d\u7684\u6c18\uff08\u7d04\u5e7e\u8336\u5319\uff09\u5c31\u5920\u8b93\u4f60\u4f7f\u7528\u8d85\u904e\u5341\u5e74\u7684\u80fd\u91cf\u3002
\u4f46\u662f\u6211\u5011\u6709\u9019\u9ebc\u591a\u7684\u6838\u878d\u5408\u539f\u6599\u55ce\uff1f\u4ee5\u9700\u8981\u7522\u6c1a\u7684\u92f0\u4f86\u8aaa\uff0c\u6839\u64da2022 \u5e74\u7f8e\u570b\u5730\u8cea\u8abf\u67e5\u5c40\u6240\u4f30\u8a08\u7684\uff0c\u5730\u7403\u4e0a\u7684\u92f0\u7d04\u9084\u6709 2800 \u842c\u9813\uff0c\u9019\u5920\u7dad\u6301\u4eba\u985e\u7684\u8017\u80fd\uff08\\(18 TW\\)\uff09\u7d04\u4e00\u842c\u5e74\uff0c\u9664\u6b64\u4e4b\u5916\u6bcf\u516c\u5347\u7684\u6d77\u6c34\u5c31\u6703\u6709 \\(180\\mu g\\) \u7684\u92f0\u96e2\u5b50\uff0c\u63db\u7b97\u8d77\u4f86\u7d04\u6709 2000 \u5104\u5678\u7684\u92f0\u5728\u6d77\u6d0b\u4e2d\u3002\u5982\u679c\u662f\u6c18\u7684\u8a71\uff0c\u56e0\u70ba\u4ed6\u662f\u7a69\u5b9a\u7684\u540c\u4f4d\u7d20\uff0c\u6240\u4ee5\u5728\u5927\u81ea\u7136\u4e2d\u7684\u542b\u91cf\u7b97\u9ad8\u4e5f\u5c31\u4e0d\u5fc5\u64d4\u5fc3\u539f\u6599\u4e0d\u8db3\u7684\u72c0\u6cc1\uff0c\u53e6\u5916\u7531\u65bc\u6c18\u5728\u5316\u5b78\u4e0a\u7684\u529f\u80fd\u548c\u6c2b\u5dee\u4e0d\u591a\uff0c\u6240\u4ee5\u6211\u5011\u5f88\u53ef\u80fd\u53ef\u4ee5\u628a\u4ed6\u5f9e\u81ea\u7136\u754c\u4e2d\u5b8c\u5168\u8403\u53d6\u51fa\u4f86\uff0c\u800c\u4e0d\u5fc5\u64d4\u5fc3\u5176\u53ef\u80fd\u6703\u5c0d\u74b0\u5883\u9020\u6210\u7684\u5f71\u97ff\u3002
"},{"location":"feedback/future-of-fusion-energy/energy/#\u6838\u5206\u88c2","title":"\u6838\u5206\u88c2","text":"\u76ee\u524d\u6838\u5206\u88c2\u5728\u5168\u4eba\u985e\u7522\u80fd\uff08\u4e0d\u542b\u904b\u8f38\u548c\u71c3\u71d2\uff09\u7684\u6bd4\u4f8b\u4e2d\u7d04\u4f54 10%\u3002\u6838\u5206\u88c2\u7684\u7522\u80fd\u65b9\u5f0f\u662f\u900f\u904e\u628a\u4e00\u500b\u5927\u7684\u539f\u5b50\uff08\u901a\u5e38\u662f\u923e\u2014235\uff09\u6253\u6210\u5169\u500b\u5c0f\u7684\u539f\u5b50\u5f8c\uff0c\u5176\u7522\u751f\u7684\u80fd\u91cf\u5c31\u53ef\u4ee5\u7528\u4f86\u52a0\u71b1\u6c34\uff0c\u4e26\u4f9d\u6b64\u5e36\u52d5\u6e26\u8f2a\u8f49\u52d5\u7522\u751f\u96fb\u80fd\u3002\u4f46\u771f\u6b63\u8b93\u6838\u5206\u88c2\u548c\u6838\u878d\u5408\u5728\u5546\u696d\u61c9\u7528\u4e0a\u6709\u9019\u9ebc\u5927\u7684\u5dee\u7570\u5728\u65bc\u6838\u5206\u88c2\u5f88\u5bb9\u6613\u5c31\u53ef\u4ee5\u767c\u751f\u537b\u5f88\u96e3\u505c\u6b62\uff0c\u800c\u6838\u878d\u5408\u5f88\u96e3\u767c\u751f\u537b\u53ef\u4ee5\u8f15\u6613\u4e2d\u65b7\u3002
Fusion energy generation is difficult to start, but easy to stop.
Fission energy generation is easy to start, but difficult to stop.
\u7576\u923e\u2014235\u88ab\u4e2d\u5b50\u64ca\u4e2d\u4e26\u9032\u884c\u6838\u5206\u88c2\u5f8c\u6703\u7522\u751f\u5169\u500b\u5c0f\u7684\u539f\u5b50\u52a0\u4e0a\u4e09\u500b\u5e36\u8457\u52d5\u80fd\u7684\u81ea\u7531\u4e2d\u5b50\uff0c\u70ba\u4e86\u8b93\u6838\u5206\u88c2\u7a69\u5b9a\u7684\u7522\u80fd\uff0c\u6703\u8b93\uff08\u6a5f\u7387\u4e0a\u5e73\u5747\u4f86\u8aaa\uff09\u5176\u4e2d\u4e00\u500b\u4e2d\u5b50\u518d\u53bb\u6253\u5176\u4ed6\u7684\u923e\u2014235\uff0c\u9019\u5c31\u662f\u6240\u8b02\u7684\u9023\u9396\u53cd\u61c9\u3002\u9019\u500b\u6a5f\u7387\u4e0a\u7684\u4e00\u500b\u4e2d\u5b50\u5176\u5be6\u662f\u81f3\u95dc\u91cd\u8981\u7684\uff0c\u5982\u679c\u4f60\u5e73\u5747\u8b93 1.01 \u500b\u4e2d\u5b50\u53bb\u63a5\u8457\u57f7\u884c\u6838\u5206\u88c2\uff0c\u5c31\u6703\u8b93\u6574\u500b\u9023\u9396\u53cd\u61c9\u5feb\u5230\u4f86\u4e0d\u53ca\u963b\u6b62\uff0c\u4e26\u9020\u6210\u6eab\u5ea6\u5feb\u901f\u63d0\u5347\uff0c\u8259\u5167\u58d3\u529b\u904e\u9ad8\u800c\u7206\u70b8\uff0c\u9019\u6642\u5c31\u9700\u8981\u4e00\u4e9b\u6a5f\u5236\u4f86\u964d\u4f4e\u4e2d\u5b50\u53bb\u64ca\u4e2d\u923e\u2014235\u7684\u6a5f\u7387\uff0c\u4f8b\u5982\u628a\u4e2d\u5b50\u7684\u80fd\u91cf\u63d0\u9ad8\uff0c\u8b93\u4ed6\u5feb\u5230\u5f88\u96e3\u649e\u5230\u923e\u2014235\u3002
\u6838\u5206\u88c2\u9084\u6709\u4ec0\u9ebc\u554f\u984c\u9700\u8981\u89e3\u6c7a\uff1f\u7576\u923e\u2014235\u88ab\u5206\u88c2\u6642\uff0c\u53ef\u80fd\u6703\u7522\u751f\u4e0d\u540c\u7684\u5c0f\u539f\u5b50\uff0c\u4f8b\u5982\u939d\uff0c\u96d6\u7136\u7522\u751f\u7684\u5c0f\u539f\u5b50\u7684\u52d5\u80fd\u53ef\u4ee5\u5feb\u901f\u88ab\u8f49\u6210\u71b1\u80fd\uff08\u6469\u64e6\u529b\uff09\uff0c\u4f46\u662f\u9019\u4e9b\u5c0f\u539f\u5b50\u672c\u8eab\u53ef\u80fd\u662f\u4e0d\u7a69\u5b9a\u7684\uff0c\u4e26\u4e14\u6703\u96a8\u8457\u6642\u9593\u6162\u6162\u91cb\u653e\u9019\u4e9b\u80fd\u91cf\uff0c\u4f8b\u5982\u96fb\u5b50\u88ab\u91cb\u653e\uff0c\u9020\u6210\u9ad8\u80fd\u96fb\u78c1\u6ce2\u7684\u5916\u6d29\u3002\u6240\u4ee5\u7576\u4e00\u500b\u6838\u5206\u88c2\u53cd\u61c9\u7210\u88ab\u4e2d\u65b7\u5f8c\u7684\u4e00\u5c0f\u6642\uff0c\u4ed6\u4ecd\u6703\u6301\u7e8c\u91cb\u653e\u7d04 1% \u7684\u71b1\u80fd\uff0c\u770b\u8d77\u4f86\u597d\u50cf\u5f88\u5c0f\uff0c\u4f46\u9019 1% \u7684\u71b1\u91cf\u5c31\u662f\u9020\u6210\u4e09\u54e9\u5cf6\u548c\u798f\u5cf6\u96fb\u5ee0\u4e2d\u53cd\u61c9\u7210\u88ab\u7194\u6bc0\u7684\u539f\u56e0\u3002\u5c31\u7b97\u904e\u4e86\u5e7e\u5929\uff0c\u923e\u2014235\u88ab\u5206\u88c2\u5f8c\u7684\u7522\u7269\uff0c\u6839\u64da\u4e0d\u540c\u7684\u539f\u5b50\u53ef\u80fd\u6703\u6301\u7e8c\u91cb\u653e\u9019\u7a2e\u80fd\u91cf\u81f3\u6578\u767e\u842c\u5e74\u5f8c\uff0c\u8209\u4f8b\u4f86\u8aaa\u939d\u5e73\u5747\u6bcf\u4e09\u5341\u842c\u5e74\uff08\u534a\u9031\u671f\uff09\u6703\u91cb\u653e\u51fa\u5169\u500b\u9ad8\u80fd\u96fb\u5b50\uff0c\u800c\u4eba\u9ad4\u82e5\u5438\u6536\u4e86\u9019\u4e9b\u80fd\u91cf\uff0c\u5c31\u6703\u5f71\u97ff\u9020\u6210\u8eab\u9ad4\u4e0a\u7684\u5371\u5bb3\uff0c\u6240\u4ee5\u6211\u5011\u9700\u8981\u500b\u65b9\u6cd5\u4f86\u5b58\u653e\u9019\u4e9b\u7269\u8cea\u81f3\u767e\u842c\u5e74\u3002
\u6700\u5f8c\u6211\u5011\u4f86\u770b\u770b\u6838\u5206\u88c2\u7684\u539f\u6599\u72c0\u6cc1\u3002\u901a\u5e38\u9069\u5408\u505a\u6838\u5206\u88c2\u7684\u539f\u5b50\u5c31\u662f\u90a3\u4e9b\u6700\u91cd\u7684\u539f\u5b50\uff0c\u4f8b\u5982\u923e\u3002\u800c\u923e\u2014235\u6703\u88ab\u9019\u9ebc\u5ee3\u6cdb\u5730\u61c9\u7528\u5c31\u662f\u56e0\u70ba\u4ed6\u53ea\u9700\u8981\u4e00\u500b\u6162\u4e2d\u5b50\u53bb\u649e\u64ca\u5c31\u53ef\u4ee5\u4fc3\u767c\u6838\u5206\u88c2\uff0c\u53e6\u5916\u4e00\u500b\u540c\u4f4d\u7d20\u923e\u2014238\u5c31\u9700\u8981\u5169\u500b\u4e2d\u5b50\u968e\u6bb5\u5f0f\u7684\u649e\u64ca\u624d\u80fd\u5b8c\u6210\u6838\u5206\u88c2\uff1a\u7b2c\u4e00\u6b21\u662f\u628a\u923e\u2014238\u8f49\u6210\u923e\u2014239\u7b2c\u4e8c\u6b21\u624d\u662f\u4fc3\u767c\u6838\u5206\u88c2\uff0c\u9019\u7a31\u70ba\u6ecb\u751f\u53cd\u61c9\uff08breeding reaction\uff09\u3002\u6240\u4ee5\u5728\u5206\u6790\u539f\u6599\u6642\uff0c\u5c31\u9700\u8981\u8003\u616e\u9019\u5169\u7a2e\u5143\u7d20\u3002\u7d04\u6709\u4e00\u5343\u842c\u9813\u7684 \u88ab\u767c\u73fe\u4e14\u53ef\u88ab\u6316\u6398 \u923e\uff08\u5be6\u969b\u542b\u91cf\u53ef\u80fd\u542b\u6709\u7d04 1000 \u500d\u4ee5\u4e0a\uff09 \uff0c\u4f46\u662f\u923e\u2014235\u53ea\u4f54\u5176\u4e2d\u7684 1%\uff0c\u6240\u4ee5\u6211\u5011\u53ef\u4ee5\u5b8c\u5168\u900f\u904e\u923e\u2014235\u7684\u6838\u5206\u88c2\u6eff\u8db3\u4eba\u985e\u6240\u9700\u7d04\u4e00\u767e\u5e74\uff0c\u9664\u6b64\u4e4b\u5916\u923e\u4e5f\u53ef\u4ee5\u5f9e\u6d77\u6d0b\u4e2d\u8403\u53d6\u51fa\u4f86\uff0c\u82e5\u5b8c\u5168\u53d6\u7528\u5c07\u53ef\u6eff\u8db3\u4e00\u842c\u5e74\u7684\u923e\u2014235\u7684\u6838\u5206\u88c2\u3002\u5982\u679c\u4f7f\u7528\u7684\u662f\u923e\u2014238\uff0c\u5c31\u6703\u662f\u525b\u525b\u6578\u91cf\u7684\u4e00\u767e\u500d\uff0c\u56e0\u70ba\u923e\u2014238\u4f54\u6bd4\u7d04\u662f\u923e\u2014235\u7684\u4e00\u767e\u500d\u3002\u7531\u65bc\u923e\u2014235\u64c1\u6709\u5f88\u9ad8\u7684\u6bd4\u80fd\uff0c\u5176\u7522\u80fd\u7684\u6210\u672c\u7d04\u662f\u5168\u7403\u7522\u80fd\u5e73\u5747\u7684\u6210\u672c\u7684 10% \u800c\u5df2\u3002\u7576\u900f\u904e\u6d77\u6d0b\u8403\u53d6\u923e\u7684\u6210\u672c\uff08\u76ee\u524d\u4ecd\u662f\u958b\u653e\u7814\u7a76\uff09\u5c07\u6703\u662f\u5f9e\u9678\u5730\u8403\u53d6\u7684\u4e09\u500d\uff0c\u5373\u4f7f\u5982\u6b64\uff0c\u5176\u6210\u672c\u4e5f\u53ea\u6703\u4f86\u5230 20%\u3002\u7e3d\u7684\u4f86\u8aaa\uff0c\u6838\u5206\u88c2\u9084\u662f\u80fd\u6eff\u8db3\u6211\u5011\u4eba\u985e\u5c0d\u80fd\u91cf\u7684\u9700\u6c42\uff0c\u5c24\u5176\u662f\u5982\u679c\u6ecb\u751f\u53cd\u61c9\u7684\u7814\u7a76\u8da8\u65bc\u6210\u719f\uff0c\u5c0d\u65bc\u923e\u7684\u8981\u6c42\u5c31\u6703\u964d\u4f4e\u3002
"},{"location":"feedback/future-of-fusion-energy/energy/#\u5730\u71b1","title":"\u5730\u71b1","text":"\u5730\u71b1\u7684\u5f62\u6210\u662f\u7531\u65bc\u91cd\u529b\u548c\u5927\u539f\u5b50\u7684\u653e\u5c04\u8207\u8870\u8b8a\uff0c\u91cd\u529b\u8b93\u5927\u91cf\u7684\u7269\u8cea\u76f8\u4e92\u78b0\u649e\u6469\u64e6\u5f62\u6210\u71b1\uff0c\u800c\u5927\u539f\u5b50\u5247\u4f86\u81ea\u65bc\u4e45\u9060\u4ee5\u524d\u5b87\u5b99\u4e2d\u7684\u8d85\u65b0\u661f\u3002\u82e5\u8981\u4f7f\u7528\u5730\u71b1\uff0c\u6211\u5011\u901a\u5e38\u6703\u6316\u500b\u5e7e\u516c\u91cc\u6df1\u7684\u4e95\u4e26\u900f\u904e\u5176\u4e2d\u7684\u71b1\u80fd\uff0840 \u516c\u91cc\u6df1\u7684\u5730\u8868\u7d04\u6709 600 \u5ea6\uff09\u4f86\u904b\u8f49\u84b8\u6c7d\u6e26\u8f2a\uff0c\u7136\u800c\u5730\u7403\u7684\u71b1\u50b3\u5c0e\u5be6\u5728\u592a\u6162\uff08\u7d04\u6bcf\u5e73\u65b9\u516c\u5c3a 0.03 \u74e6\u7279\uff09\uff0c\u7576\u6211\u5011\u628a\u4e95\u908a\u7684\u5730\u71b1\u90fd\u62ff\u53bb\u767c\u96fb\u5f8c\uff0c\u9010\u6f38\u51b7\u537b\u7684\u5ca9\u77f3\u8981\u518d\u6b21\u9054\u5230\u4e00\u5b9a\u7684\u71b1\u5ea6\u6642\u5c31\u8981\u7d93\u904e\u5f88\u9577\u7684\u6642\u9593\u3002
\u6839\u64da\u4f30\u8a08\uff0c\u5730\u71b1\u8db3\u5920\u652f\u6301\u6211\u5011\u4eba\u985e\u7684\u8017\u80fd\uff0c\u4e14\u5c07\u6301\u7e8c\u6563\u767c\u80fd\u91cf\u81f3\u4e00\u767e\u5104\u5e74\u5f8c\uff0c\u4f46\u662f\u4e0d\u53ea\u662f\u50b3\u71b1\u901f\u5ea6\u6162\uff0c\u5730\u7403\u6709\u4e03\u6210\u7684\u9762\u7a4d\u90fd\u88ab\u6d77\u6d0b\u8986\u84cb\uff0c\u9019\u4e5f\u5c07\u6210\u70ba\u5730\u71b1\u767c\u96fb\u7684\u4e00\u5927\u56f0\u5883\u3002\u5118\u7ba1\u6709\u4e9b\u5730\u65b9\uff08\u4f8b\u5982\u51b0\u5cf6\uff09\u7684\u5730\u71b1\u5c31\u5728\u5730\u8868\u9644\u8fd1\u5f88\u9069\u5408\u767c\u96fb\uff0c\u4f46\u662f\u82e5\u8981\u628a\u9019\u898f\u6a21\u9069\u7528\u5230\u5168\u4eba\u985e\u662f\u975e\u5e38\u56f0\u96e3\u7684\u3002
"},{"location":"feedback/future-of-fusion-energy/energy/#\u592a\u967d\u80fd","title":"\u592a\u967d\u80fd","text":"\u592a\u967d\u80fd\u900f\u904e\u592a\u967d\u5728\u8868\u9762\u57f7\u884c\u7684\u6838\u878d\u5408\u767c\u71b1\u4e26\u91cb\u653e\u80fd\u91cf\uff0c\u9019\u88e1\u7684\u6838\u878d\u5408\u7684\u4e3b\u8981\u539f\u6599\u4e0d\u662f\u4f7f\u7528\u6c2b\u7684\u540c\u4f4d\u7d20\uff0c\u800c\u662f\u4f7f\u7528\u6c2b\u672c\u8eab\u3002\u96d6\u7136\u8981\u8b93\u5169\u500b\u6c2b\u76f8\u649e\u5f62\u6210\u6838\u878d\u5408\u7684\u6a5f\u7387\u53ea\u6709 \\(10^{30}\\) \u5206\u4e4b\u4e00\uff0c\u4f46\u5982\u679c\u592a\u967d\u64c1\u6709\u8d85\u591a\u4e14\u8d85\u5bc6\u96c6\u7684\u6c2b\u6c23\u6642\uff0c\u9019\u7a2e\u6838\u878d\u5408\u5c31\u6709\u53ef\u80fd\u767c\u751f\uff0c\u800c\u6838\u878d\u5408\u7522\u751f\u7684\u52d5\u80fd\u6700\u7d42\u5c31\u6210\u70ba\u91cb\u653e\u81f3\u5b87\u5b99\u4e2d\u7684\u80fd\u91cf\u3002
\u70ba\u4ec0\u9ebc\u6c2b\u2014\u6c2b\u6838\u878d\u5408\u7684\u6a5f\u7387\u9019\u9ebc\u4f4e\u5118\u7ba1\u592a\u967d\u7684\u71b1\u5ea6\u4e0d\u8db3\u4ee5\u7a81\u7834\u5eab\u502b\u58c1\u58d8\uff08\u5169\u500b\u8cea\u5b50\u76f8\u65a5\u7684\u529b\u91cf\uff09\uff0c\u5169\u500b\u8cea\u5b50\u76f8\u649e\u6642\u4ecd\u53ef\u80fd\u56e0\u70ba\u91cf\u5b50\u7a7f\u96a7\u6548\u61c9\uff08\u6a5f\u7387\u6027\u7684\u63d0\u5347\u91cf\u5b50\u7684\u52d5\u80fd\uff0c\u7d04 \\(10^{20}\\) \u5206\u4e4b\u4e00\uff09\u878d\u5408\u6210\u6c26\u20142\uff08\u5169\u500b\u8cea\u5b50\u6c92\u6709\u4e2d\u5b50\uff0c\u800c\u975e\u5982\u4e00\u822c\u578b\u614b\u7684\u6c26\u20134\uff09\uff0c\u9019\u6642\u53c8\u8981\u900f\u904e\u5f31\u4f5c\u7528\u529b\u628a\u8cea\u5b50\u8f49\u5473\u6210\u4e2d\u5b50\uff0c\u9019\u6642\u5c31\u5f62\u6210\u6c18\uff0c\u4e5f\u5c31\u5b8c\u6210\u521d\u6b65\u7684\u6838\u878d\u5408\uff08\u5f8c\u7e8c\u9084\u6709\u6c18\u2014\u6c2b\u7684\u6838\u878d\u5408\u4e26\u751f\u6210\u6c26\u20143\uff0c\u548c\u6c26\u20143\u9593\u7684\u6838\u878d\u5408\u6700\u7d42\u8f49\u8b8a\u6210\u6c26\uff09\u3002
\u503c\u5f97\u6ce8\u610f\u7684\u662f\uff0c\u5728\u91cf\u5b50\u7a7f\u96a7\u6548\u61c9\u88ab\u767c\u73fe\u4e4b\u524d\uff0c\u592a\u967d\u7a76\u7adf\u5982\u4f55\u9032\u884c\u6838\u878d\u5408\u7684\u662f\u5728\u5929\u6587\u5b78\u4e0a\u4e00\u500b\u5f88\u5927\u7684\u8b0e\u5718\u3002
\u5730\u7403\u6bcf\u5e74\u5f9e\u592a\u967d\u4e2d\u7372\u5f97\u7684\u80fd\u91cf\u7d04\u70ba\u4eba\u985e\u6240\u9700\u7684 5000 \u500d\uff0c\u4e5f\u5c31\u76f8\u7576\u65bc\u6bcf\u5e73\u65b9\u516c\u5c3a 200 \u74e6\u7279\uff0c\u9019\u5176\u5be6\u6eff\u5408\u7406\u7684\uff0c\u56e0\u70ba\u4e00\u500b\u4e00\u767e\u74e6\u7684\u71c8\u6ce1\u80fd\u5982\u540c\u592a\u967d\u822c\u7167\u4eae\u7d04\u4e00\u5e73\u65b9\u516c\u5c3a\u7684\u5730\u65b9\u3002\u63db\u53e5\u8a71\u8aaa\uff0c\u6211\u5011\u53ea\u9700\u5f9e\u4e2d\u4f7f\u7528\u4e0d\u5230\u767e\u5206\u4e4b\u4e00\u7684\u80fd\u91cf\u5c31\u53ef\u4ee5\u6eff\u8db3\u4eba\u985e\u751f\u6d3b\u6240\u9700\uff0c\u66f4\u91cd\u8981\u7684\u662f\u6211\u5011\u53ef\u4ee5\u9078\u64c7\u8a72\u4f7f\u7528\u54ea\u500b\u5730\u65b9\u7684\u592a\u967d\u80fd\uff0c\u9019\u6a23\u5c31\u4e0d\u6703\u8b93\u90a3\u4e9b\u672c\u4f86\u5c31\u5f88\u5c11\u967d\u5149\u7684\u5730\u65b9\uff0c\u8b8a\u5f97\u66f4\u5c11\u967d\u5149\u3002\u4f46\u662f\u592a\u967d\u80fd\u4e5f\u9700\u8981\u514b\u670d\u4e00\u4e9b\u56f0\u96e3\uff0c\u592a\u967d\u80fd\u7684\u6bcf\u55ae\u4f4d\u80fd\u91cf\u6240\u9700\u7684\u91d1\u9322\u4ecd\u662f\u76ee\u524d\u6700\u8cb4\u7684\u80fd\u6e90\u4e4b\u4e00\uff1b\u592a\u967d\u80fd\u662f\u6703\u4e2d\u65b7\u7684\uff0c\u6bcf\u5929\u7684\u665a\u4e0a\uff0c\u6bcf\u5e74\u7684\u51ac\u5929\u90fd\u6703\u964d\u4f4e\u592a\u967d\u80fd\u7684\u7e3d\u91cf\uff1b\u592a\u967d\u80fd\u7684\u78b3\u6392\u653e\u91cf\u96d6\u662f\u77f3\u6cb9\u767c\u96fb\u7684\u5341\u5206\u4e4b\u4e00\u500d\u4f46\u4e5f\u662f\u6838\u5206\u88c2\u7684\u4e09\u500d\u3001\u98a8\u529b\u767c\u96fb\u7684\u56db\u500d\uff0c\u5118\u7ba1\u5176\u4e2d\u7684\u78b3\u6392\u653e\u5927\u90e8\u5206\u90fd\u4f86\u81ea\u65bc\u751f\u7522\u904e\u7a0b\uff0c\u800c\u975e\u767c\u96fb\u672c\u8eab\u3002
"},{"location":"feedback/future-of-fusion-energy/energy/#\u6f6e\u6c50","title":"\u6f6e\u6c50","text":"\u6f6e\u6c50\u4ee3\u8868\u7684\u662f\u5730\u7403\u81ea\u8f49\u548c\u6708\u7403\u91cd\u529b\u9593\u7684\u727d\u5f15\u9020\u6210\u7684\u80fd\u91cf\u91cb\u653e\uff0c\u8981\u66b8\u89e3\u9019\u4e2d\u9593\u7684\u80fd\u91cf\u8f49\u63db\u6a5f\u5236\uff0c\u5fc5\u9808\u8981\u5148\u66b8\u89e3\u6708\u7403\u91cd\u529b\u5c0d\u5730\u7403\u9020\u6210\u7684\u5f71\u97ff\u3002\u6708\u7403\u6703\u900f\u904e\u91cd\u529b\u628a\u9760\u8fd1\u5b83\u7684\u90a3\u4e00\u5074\u6d77\u6d0b\u62c9\u9ad8\uff0c\u800c\u53e6\u5916\u4e00\u5074\u53c8\u6703\u56e0\u70ba\u9060\u96e2\u6708\u7403\uff0c\u6240\u4ee5\u91cd\u529b\u9020\u6210\u7684\u62c9\u529b\u6703\u88ab\u6e1b\u5c11\u800c\u5347\u9ad8\u6d77\u5e73\u9762\u3002\u6700\u7d42\u5730\u7403\u7684\u6d77\u6d0b\u578b\u614b\u5c31\u6703\u8b8a\u6210\u50cf\u662f\u6a62\u5713\u5f62\u7684\u6a23\u5b50\u3002\u4f46\u662f\u6708\u7403\u516c\u8f49\u7684\u901f\u5ea6\u7d04\u662f 30 \u5929\uff0c\u800c\u5730\u7403\u81ea\u8f49\u537b\u662f\u5b83\u7684\u4e09\u5341\u500d\uff0c\u6240\u4ee5\u9019\u500b\u6a62\u5713\u5f62\u7684\u6d77\u6d0b\u6703\u56e0\u70ba\u5730\u7403\u81ea\u8f49\u548c\u5176\u9020\u6210\u7684\u6469\u64e6\u529b\u800c\u7a0d\u5fae\u8d70\u5f97\u6bd4\u6708\u7403\u5feb\u4e00\u4e9b\u3002\u9032\u4e00\u6b65\u7684\u8aaa\uff0c\u5730\u7403\u81ea\u8f49\u7684\u901f\u5ea6\u6703\u88ab\u6708\u7403\u62c9\u6162\uff0c\u800c\u6708\u7403\u516c\u8f49\u7684\u901f\u5ea6\u5247\u53cd\u904e\u4f86\u88ab\u62c9\u9ad8\u4e86\uff0c\u9019\u4e5f\u9020\u6210\u6708\u7403\u516c\u8f49\u7684\u8ddd\u96e2\u8d8a\u4f86\u8d8a\u9ad8\uff08\u5728\u76f8\u540c\u7684\u9031\u671f\u4e0b\uff0c\u901f\u5ea6\u8d8a\u5feb\u4ee3\u8868\u5176\u904b\u52d5\u7684\u8def\u5f91\u8d8a\u9577\uff0c\u6240\u4ee5\u516c\u8f49\u7684\u8ddd\u96e2\u4e5f\u8d8a\u9060\uff09\u3002\u7136\u800c\u9019\u7a2e\u80fd\u91cf\u6d88\u8017\u4f9d\u7167\u76ee\u524d\u7684\u79d1\u6280\u6211\u5011\u662f\u6c92\u8fa6\u6cd5\u8f49\u5316\u7684\uff0c\u76f8\u5c0d\u7684\uff0c\u6211\u5011\u80fd\u8655\u7406\u7684\u5c31\u53ea\u6709\u6d77\u6d0b\u5728\u88ab\u62c9\u5f80\u524d\u6642\u6240\u6d88\u8017\u7684\u6469\u64e6\u529b\u3002
\u9019\u500b\u6d88\u8017\u7684\u80fd\u91cf\u6709\u591a\u5c11\uff1f\u5728 70 \u5e74\u4ee3\u7684\u963f\u6ce2\u7f85\u8a08\u756b\u4e2d\uff0c\u592a\u7a7a\u4eba\u5df2\u6210\u529f\u5728\u6708\u7403\u4e0a\u653e\u7f6e\u93e1\u5b50\uff0c\u900f\u904e\u9019\u500b\u93e1\u5b50\uff0c\u6211\u5011\u53ef\u4ee5\u7528\u96f7\u5c04\u53bb\u6253\u5230\u9019\u93e1\u5b50\u7136\u5f8c\u8a08\u7b97\u5176\u4f86\u56de\u7684\u6642\u9593\u5dee\uff08\u5229\u7528\u7cbe\u6e96\u7684\u539f\u5b50\u9418\uff09\uff0c\u4f9d\u6b64\u5c31\u53ef\u4ee5\u8a08\u7b97\u51fa\u6708\u7403\u6b63\u4ee5\u6bcf\u5e74\u56db\u516c\u5206\u7684\u8ddd\u96e2\u9060\u96e2\u5730\u7403\uff0c\u7136\u5f8c\u5730\u7403\u4e5f\u6b63\u4ee5\u6bcf\u4e00\u767e\u5e74\u589e\u52a0\u5169\u6beb\u79d2\u7684\u65e5\u7167\u6642\u9593\u5728\u964d\u4f4e\u81ea\u8f49\u901f\u5ea6\uff0c\u7136\u5f8c\u6839\u64da\u89d2\u52d5\u91cf\u5b88\u6046\uff0c\u6211\u5011\u53ef\u4ee5\u77e5\u9053\u9019\u500b\u80fd\u91cf\u5dee\u5c31\u662f\u76f8\u5c0d\u61c9\u7684\u80fd\u91cf\u8017\u640d\uff0c\u5927\u7d04\u662f\u4eba\u985e\u4e00\u5e74\u6240\u9700\u80fd\u91cf\u7684 10%\u3002\u9019\u7a2e\u80fd\u91cf\u901a\u5e38\u88ab\u8f49\u5316\u6210\u6d77\u6d0b\u7684\u6c34\u6d41\u548c\u6f29\u6e26\uff0c\u6240\u4ee5\u53d6\u5f97\u9019\u80fd\u91cf\u7684\u65b9\u5f0f\u57fa\u672c\u4e0a\u548c\u6c34\u529b\u767c\u96fb\u5f88\u50cf\uff0c\u6211\u5011\u53ef\u4ee5\u5efa\u6c34\u58e9\u6216\u8005\u5ddd\u6d41\u5f0f\u767c\u96fb\u6a5f\u4f86\u6355\u6349\u9019\u4e9b\u80fd\u91cf\u3002
\u96d6\u7136\u73fe\u5728\u4e26\u6c92\u6709\u5f88\u591a\u6f6e\u6c50\u76f8\u95dc\u7684\u767c\u96fb\u6a5f\uff0c\u4f46\u9019\u65b9\u6cd5\u537b\u6709\u4e00\u4e9b\u512a\u52e2\u3002\u7b2c\u4e00\uff0c\u56e0\u70ba\u958b\u767c\u7684\u5c11\u6240\u4ee5\u6709\u5f88\u591a\u7a7a\u7f6e\u7684\u7a7a\u9593\u7b49\u5f85\u958b\u767c\uff1b\u7b2c\u4e8c\uff0c\u56e0\u70ba\u6c34\u529b\u767c\u96fb\u76f8\u95dc\u7684\u6280\u8853\u5f88\u6210\u719f\uff0c\u6240\u4ee5\u4e26\u4e0d\u6703\u9020\u6210\u7814\u767c\u4e0a\u7684\u8017\u6642\u548c\u8017\u6750\uff1b\u7b2c\u4e09\uff0c\u56e0\u70ba\u653e\u65bc\u6c34\u9762\u4e0b\uff0c\u6240\u4ee5\u4e0d\u6703\u5e72\u64fe\u5230\u73fe\u6709\u4eba\u985e\u7684\u5c45\u4f4f\u74b0\u5883\uff0c\u5118\u7ba1\u76f8\u95dc\u7684\u74b0\u8a55\u4ecd\u9700\u8981\u9032\u884c\uff1b\u6700\u5f8c\uff0c\u4e0d\u50cf\u592a\u967d\u80fd\u548c\u98a8\u529b\u767c\u96fb\u90a3\u6a23\u662f\u9593\u6b47\u6027\u7684\uff0c\u5176\u53ef\u4ee5\u7a69\u5b9a\u4e14\u9577\u671f\u7684\u63d0\u4f9b\u80fd\u91cf\u3002
"},{"location":"feedback/future-of-fusion-energy/energy/#\u98a8\u529b","title":"\u98a8\u529b","text":"\u98a8\u7684\u4f86\u6e90\u5728\u65bc\u6eab\u5dee\uff0c\u800c\u6eab\u5ea6\u7522\u751f\u65bc\u592a\u967d\u80fd\uff0c\u6240\u4ee5\u98a8\u529b\u53ef\u4ee5\u8aaa\u662f\u592a\u967d\u80fd\u7684\u7522\u7269\uff0c\u9019\u6642\u5982\u679c\u6211\u5011\u8981\u7b97\u5730\u7403\u4e0a\u98a8\u529b\u7684\u7e3d\u80fd\u6e90\u91cf\uff0c\u5c31\u9700\u8981\u7b97\u592a\u967d\u8f49\u6210\u98a8\u529b\u6642\u6240\u9700\u7684\u8017\u640d\u3002\u71b1\u529b\u5b78\u4e2d\uff0c\u6709\u500b\u6709\u8da3\u7684\u516c\u5f0f\uff1a\\(\\eta \\leq 1 - \\frac{T_{C}}{T_{H}}\\)\uff0c\u5176\u4e2d \\(\\eta\\) \u5c31\u4ee3\u8868\u71b1\u80fd\u8f49\u63db\u6210\u52d5\u80fd\u7684\u6548\u7387\uff0c\u800c \\(T_{C}\\) \u662f\u76f8\u5c0d\u4f4e\u6eab\u7684\u7d55\u5c0d\u6eab\u5ea6\uff0c \\(T_{H}\\) \u662f\u76f8\u5c0d\u9ad8\u6eab\u7684\u7d55\u5c0d\u6eab\u5ea6\u3002\u4ee5\u73fe\u884c\u5c08\u696d\u7684\u84b8\u6c7d\u767c\u96fb\u5ee0\u4f86\u8aaa\u76f8\u5c0d\u9ad8\u6eab\u7684\u6eab\u5ea6\u7d04\u70ba \\(400^\\circ C\\)\uff08\u7d04 \\(670^\\circ K\\)\uff09\uff0c\u5176\u548c\u5ba4\u6eab\uff08\u7d04 \\(300^\\circ K\\)\uff09\u7684\u6eab\u5dee\u53ef\u4ee5\u8b93\u4ed6\u7dad\u6301\u5728 40% \u7684\u7522\u80fd\u6548\u7387\u3002\u5f88\u986f\u7136\u7684\uff0c\u5730\u7403\u4e26\u4e0d\u662f\u70ba\u4e86\u6709\u6548\u7387\u5730\u628a\u71b1\u80fd\u8f49\u63db\u6210\u52d5\u80fd\u800c\u88ab\u8a2d\u8a08\u7684\uff0c\u5357\u5317\u6975\u548c\u8d64\u9053\u7684\u6eab\u5dee\u53ea\u6709\u7d04 \\(60^\\circ C\\)\uff0c\u4e5f\u5c31\u662f\u8f49\u63db\u6548\u7387\u6700\u9ad8\u53ea\u6709 5%\uff0c\u8003\u616e\u5230\u79d1\u6c0f\u529b\u6703\u63d0\u4f9b\u98a8\u6771\u897f\u5411\u7684\u52d5\u80fd\uff0c\u6240\u4ee5\u5730\u7403\u7684\u98a8\u4e26\u4e0d\u662f\u4e00\u8def\u5f9e\u5169\u6975\u79fb\u52d5\u5230\u8d64\u9053\uff0c\u800c\u662f\u88ab\u5207\u5206\u6210\u4e09\u6bb5\u7684\u74b0\u6d41\uff0c\u5176\u5be6\u969b\u7684\u6548\u7387\u53ef\u80fd\u53ea\u6709 1%\uff08\u6839\u64da\u76f8\u95dc\u7684\u6c23\u5019\u79d1\u5b78\u8ad6\u6587\uff09\u3002
\u5982\u540c\u6211\u5011\u5728\u592a\u967d\u80fd\u4e2d\u63d0\u5230\u7684\uff0c\u5373\u4f7f\u53ea\u6709\u592a\u967d\u80fd\u7684 1% \u4e5f\u8db3\u4ee5\u652f\u6490\u4eba\u985e\u6240\u9700\u80fd\u91cf\u7684 50 \u500d\uff0c\u554f\u984c\u662f\u5730\u7403\u7684\u98a8\u529b\u4e0d\u50cf\u592a\u967d\u80fd\u9019\u9ebc\u96c6\u4e2d\uff0c\u98a8\u529b\u662f\u6563\u843d\u5728\u5f9e\u5730\u9762\u5230\u5c0d\u6d41\u5c64\u4e4b\u9593\u7684\u5341\u516c\u91cc\u9593\uff0c\u9019\u8b93\u98a8\u529b\u80fd\u63d0\u4f9b\u7684\u80fd\u91cf\u53c8\u66f4\u5c11\u4e86\u3002\u503c\u5f97\u6176\u5e78\u7684\u662f\uff0c\u98a8\u529b\u5f88\u597d\u88ab\u6536\u96c6\u4e14\u4eba\u985e\u5728\u6578\u5343\u5e74\u524d\u5c31\u5df2\u7d93\u958b\u59cb\u6536\u96c6\u4e86\uff0c\u5118\u7ba1\u5982\u6b64\uff0c\u98a8\u529b\u767c\u96fb\u6a5f\uff08\u9ad8\u7d04 100 \u516c\u5c3a\uff0c\u4e5f\u5c31\u662f 10 \u516c\u91cc\u5916\u4ecd\u80fd\u88ab\u6e05\u695a\u770b\u898b\uff09\u5be6\u52d9\u4e0a\u4ecd\u53d7\u9650\u65bc\u5148\u5929\u7684\u689d\u4ef6\u3002\u8209\u4f8b\u4f86\u8aaa\uff0c\u4e00\u53f0\u98a8\u529b\u767c\u96fb\u6a5f\u80fd\u7522\u51fa\u7d04 \\(1MW\\)\uff08\u96d6\u7136\u5728\u6b64\u63d0\u5230\u7684\u6548\u7387\u662f \\(2.75MW\\)\uff0c\u4f46\u8003\u616e\u820a\u7684\u6a5f\u578b\u800c\u5e73\u5747\u5176\u6548\u80fd\u7684\u8a71\uff09\u7684\u80fd\u91cf\uff0c\u4ee5\u7f8e\u570b\u4e00\u5e74\u6240\u9700\u7684 \\(3.1TW\\)\uff0c\u5982\u679c\u70ba\u4e86\u8981\u7522\u751f\u9019\u500b\u80fd\u91cf\u800c\u5e73\u5747\u6563\u843d\u5728\u7f8e\u570b\u5404\u8655\u7684\u8a71\uff0c\u4f60\u5728\u4efb\u4f55\u4e00\u500b\u5730\u65b9\u5c31\u80fd\u770b\u5230\u6709\u7d04 30 \u500b\u98a8\u529b\u767c\u96fb\u6a5f\u5728\u9644\u8fd1\uff0c\u5982\u679c\u96c6\u4e2d\u5728\u540c\u4e00\u8655\u7684\u8a71\u5c31\u9700\u8981\u4f54\u7528\u7f8e\u570b\u7d04\u5341\u5206\u4e4b\u4e00\u7684\u9762\u7a4d\u3002
\u98a8\u529b\u548c\u592a\u967d\u80fd\u4e00\u6a23\u662f\u65b7\u65b7\u7e8c\u7e8c\u7684\uff0c\u4e0d\u904e\u503c\u5f97\u6ce8\u610f\u7684\u662f\uff0c\u98a8\u5728\u51ac\u5929\u6703\u6bd4\u590f\u5929\u66f4\u5f37\uff0c\u9019\u662f\u56e0\u70ba\u8d64\u9053\u5728\u51ac\u5929\u4ecd\u80fd\u4fdd\u6301\u76f8\u4f3c\u7684\u6eab\u5ea6\uff0c\u4f46\u9760\u8fd1\u5169\u6975\u7684\u5730\u65b9\u537b\u6703\u986f\u8457\u7684\u4e0b\u964d\uff0c\u9019\u5c0e\u81f4\u6eab\u5dee\u53ef\u4ee5\u9032\u4e00\u6b65\u7684\u63d0\u5347\u3002\u9019\u548c\u592a\u967d\u80fd\u6b63\u597d\u76f8\u53cd\uff0c\u5c31\u53ef\u4ee5\u9054\u5230\u76f8\u4e92\u88dc\u8db3\u7684\u6548\u679c\uff0c\u4f46\u662f\u7e3d\u800c\u8a00\u4e4b\uff0c\u6211\u5011\u7121\u6cd5\u5b8c\u5168\u4f9d\u9760\u98a8\u529b\u767c\u96fb\u4f86\u6eff\u8db3\u6211\u5011\u4eba\u985e\u6240\u9700\u7684\u6240\u6709\u80fd\u6e90\u3002
"},{"location":"feedback/future-of-fusion-energy/energy/#\u751f\u8cea\u80fd","title":"\u751f\u8cea\u80fd","text":"\u690d\u7269\u6703\u5132\u5b58\u592a\u967d\u80fd\uff0c\u53ea\u662f\u6703\u7528\u91a3\u985e\uff08\\(CH_2O\\)\uff0c\u4f8b\u5982\u8461\u8404\u7cd6\u662f \\(C_6H_{12}O_6\\)\uff09\u7684\u65b9\u5f0f\u5132\u5b58\u3002\u9019\u4e4b\u4e2d\u7684\u6a5f\u5236\u7a31\u70ba\u5149\u5408\u4f5c\u7528\uff0c\u5229\u7528\u967d\u5149\u7684\u80fd\u91cf\u628a\u5f9e\u6839\u90e8\u5438\u6536\u7684\u6c34\u5206\uff08\\(H_2O\\)\uff0c\u6975\u5c11\u91cf\u7684\u6c34\u53ef\u4ee5\u900f\u904e\u8449\u5b50\u5438\u6536\uff09\u548c\u7a7a\u6c23\u4e2d\u7684\u4e8c\u6c27\u5316\u78b3\uff08\\(CO_2\\)\uff09\u6253\u6563\u6210\u70ba\u6c27\u6c23\uff08\\(O_2\\)\uff09\u548c\u91a3\u985e\u3002\u800c\u6240\u8b02\u7684\u751f\u8cea\u80fd\uff0c\u5c31\u662f\u5229\u7528\u7531\u592a\u6a23\u80fd\u8f49\u5316\u800c\u6210\u7684\u91a3\u985e\uff08\u6216\u5176\u4ed6\u7269\u8cea\uff0c\u4f8b\u5982\u7532\u9187\u3001\u77f3\u6cb9\uff09\u4f86\u767c\u80fd\u3002
\u690d\u7269\u7684\u5f62\u9ad4\u4e26\u975e\u4f9d\u9760\u5927\u5730\u800c\u751f\u5728\u5149\u5408\u4f5c\u7528\u4e2d\uff0c\u91a3\u985e\u7684\u6c27\u662f\u5f9e\u4e8c\u6c27\u5316\u78b3\u4f86\u7684\u800c\u4e0d\u662f\u6c34\uff0c\u6240\u4ee5\u5efa\u69cb\u51fa\u690d\u7269\u7684\u990a\u5206\uff08\u63db\u53e5\u8a71\u8aaa\uff0c\u78b3\u548c\u6c27\uff09\u5e7e\u4e4e\u90fd\u662f\u5f9e\u7a7a\u6c23\u4e2d\u4f86\u7684\uff0c\u6240\u4ee5\u6211\u5011\u5e38\u8a8d\u70ba\u690d\u7269\u4e4b\u6240\u4ee5\u9577\u9019\u9ebc\u9ad8\u5927\u662f\u4f9d\u9760\u5927\u5730\u800c\u751f\u6709\u9ede\u8a9e\u610f\u4e0a\u7684\u932f\u8aa4\u3002
\u8981\u5f15\u767c\u5149\u5408\u4f5c\u7528\uff0c\u9700\u8981\u592a\u967d\u5149\u4e2d\u7684 1% \u7684\u80fd\u91cf\uff0c\u554f\u984c\u662f\u7576\u9019\u7a2e\u80fd\u91cf\u518d\u8f49\u5316\u6210\u96fb\u80fd\uff08\u4f8b\u5982\u84b8\u6c23\u767c\u96fb\u6a5f\uff09\u6642\u9700\u8981\u518d\u8017\u8cbb\u81f3\u5c11\u4e00\u534a\u7684\u80fd\u91cf\uff08\u4e5f\u5c31\u662f\u592a\u967d\u5149\u4e2d\u7684 0.5%\uff09\uff0c\u9019\u6642\u8981\u63d0\u4f9b\u7d66\u6240\u6709\u4eba\u985e\u7684\u80fd\u91cf\u6642\u5c31\u9700\u8981 20% \u975e\u51b0\u9762\u7684\u9678\u5730\u3002\u4f46\u9019\u88e1\u4e26\u6c92\u6709\u8003\u616e\u5230\u690d\u7269\u7684\u7a2e\u690d\u3001\u6210\u9577\u3001\u6536\u5272\u3001\u904b\u9001\u6240\u8017\u8cbb\u7684\u80fd\u91cf\uff0c\u6240\u4ee5\u4fdd\u5b88\u4e00\u9ede\u4f30\u8a08\u53ea\u6703\u6709\u7d04 0.1% \u7684\u592a\u967d\u5149\u88ab\u4fdd\u7559\uff0c\u9019\u6642\u6211\u5011\u5c31\u9700\u8981\u6240\u6709\u5730\u9762\u4f86\u7a2e\u690d\u690d\u7269\u4e26\u4e14\u71c3\u71d2\u9019\u4e9b\u690d\u7269\u4ee5\u8f49\u63db\u6210\u80fd\u91cf\u3002
\u6211\u5011\u4e0d\u592a\u53ef\u80fd\u900f\u904e\u751f\u8cea\u80fd\u4f86\u6eff\u8db3\u4eba\u985e\u6240\u9700\u7684\u80fd\u91cf\uff0c\u9664\u975e\u672a\u4f86\u53ef\u4ee5\u5728\u6d77\u4e0a\u7a2e\u690d\u7269\uff08\u4e0d\u8003\u616e\u751f\u614b\u8b8a\u7570\u9020\u6210\u7684\u5f71\u97ff\uff09\uff0c\u4f46\u662f\u6beb\u7121\u7591\u554f\u7684\uff0c\u6211\u5011\u53ef\u4ee5\u5229\u7528\u4e00\u4e9b\u4eba\u985e\u6d3b\u52d5\u6240\u7522\u751f\u7684\u5ee2\u6599\uff08\u4f8b\u5982\u5eda\u9918\uff09\u4f86\u7522\u751f\u751f\u7269\u80fd\u91cf\uff0c\u4e26\u4f9d\u6b64\u4f86\u907f\u514d\u80fd\u91cf\u7684\u6d6a\u8cbb\u3002
"},{"location":"feedback/future-of-fusion-energy/energy/#\u5316\u77f3\u71c3\u6599","title":"\u5316\u77f3\u71c3\u6599","text":"\u5316\u77f3\u71c3\u6599\u662f\u900f\u904e\u524d\u8ff0\u7684\u751f\u8cea\u80fd\uff08\u4e3b\u8981\u662f\u6d77\u6d0b\u4e2d\u7684\u6d6e\u6e38\u751f\u7269\u800c\u975e\u9678\u5730\u690d\u7269\uff09\uff0c\u4ee5\u7de9\u6162\u7684\u65b9\u5f0f\u8f49\u5316\u800c\u6210\u3002\u4e00\u822c\u4f86\u8aaa\uff0c\u690d\u7269\u6b7b\u4ea1\u5f8c\u9700\u8981\u900f\u904e\u4e00\u4e9b\u5fae\u751f\u7269\u4f86\u5206\u89e3\u5b83\uff0c\u4f46\u9019\u4e9b\u904e\u7a0b\u662f\u9700\u8981\u5728\u6709\u6c27\u6c23\u7684\u74b0\u5883\u4e0b\u7684\uff0c\u5982\u679c\u6c92\u6709\u6c27\u6c23\uff08\u4f8b\u5982\u6d77\u6d0b\u5e95\u5c64\u548c\u6cbc\u6fa4\uff09\uff0c\u5c31\u9700\u8981\u4e00\u4e9b\u5b8c\u5168\u4e0d\u4e00\u6a23\u7684\u65b9\u5f0f\u4f86\u5206\u89e3\u9019\u4e9b\u690d\u7269\u3002\u8209\u4f8b\u4f86\u8aaa\uff0c\u7164\uff08coal\uff09\u5c31\u662f\u4e00\u7a2e\u5316\u77f3\u71c3\u6599\uff0c\u5b83\u5c31\u662f\u690d\u7269\u900f\u904e\u7de9\u6162\u5730\u53ad\u6c27\u53cd\u61c9\u8f49\u5316\u6210\u6ce5\u70ad\uff08peat\uff09\u5f8c\uff08\u9019\u6642\u7684\u80fd\u91cf\u5bc6\u5ea6\u548c\u4e00\u822c\u7684\u751f\u8cea\u80fd\u5dee\u4e0d\u591a\uff09\uff0c\u5728\u5730\u5e95\u6df1\u8655\u7d93\u904e\u5730\u8cea\u904b\u52d5\u7684\u9ad8\u58d3\u8f49\u5316\u6210\u8910\u7164\uff08lignite\uff09\u7136\u5f8c\u624d\u8b8a\u6210\u7164\uff08\u77f3\u6cb9\u7684\u7522\u751f\u4e5f\u985e\u4f3c\uff09\uff0c\u63db\u53e5\u8a71\u8aaa\u5316\u77f3\u71c3\u6599\u662f\u592a\u967d\u80fd\u548c\u5730\u8cea\u904b\u52d5\u9019\u5169\u8005\u7684\u539f\u59cb\u80fd\u91cf\u7d44\u6210\u7684\u3002
\u5316\u77f3\u71c3\u6599\u5920\u4eba\u985e\u4f7f\u7528\u55ce\uff1f\u554f\u984c\u7684\u6838\u5fc3\u5c31\u6703\u8b8a\u6210\uff0c\u5982\u679c\u6211\u5011\u6d88\u8017\u5b83\u7684\u901f\u5ea6\u6162\u65bc\u5176\u751f\u6210\u7684\u901f\u5ea6\uff0c\u5c31\u53ef\u4ee5\u4f7f\u7528\uff0c\u4e00\u822c\u516c\u8a8d\u6211\u5011\u9084\u53ef\u4ee5\u518d\u4f7f\u7528\u5316\u77f3\u71c3\u6599\u7d04\u6578\u767e\u5e74\uff0c\u4f46\u662f\u9019\u4e9b\u5316\u77f3\u71c3\u6599\u537b\u662f\u900f\u904e\u7d04\u6578\u767e\u842c\u5e74\u5f62\u6210\u7684\uff0c\u4e5f\u5c31\u662f\u5982\u679c\u6211\u5011\u628a\u76ee\u524d\u6d88\u8017\u7684\u901f\u5ea6\u518d\u6162\u500b\u4e00\u767e\u500d\u5c31\u53ef\u4ee5\u628a\u5316\u77f3\u71c3\u6599\u7576\u6210\u9577\u671f\u6709\u6548\u7684\u8cc7\u6e90\u3002\u901f\u5ea6\u662f\u500b\u91cd\u8981\u7684\u56e0\u7d20\uff0c\u4ee5\u6c23\u5019\u8b8a\u9077\u70ba\u4f8b\uff0c\u6d77\u6d0b\u73fe\u5728\u7684\u78b3\u542b\u91cf\u662f\u958b\u59cb\u4f7f\u7528\u5316\u77f3\u71c3\u6599\u524d\u7684\u4e8c\u5341\u4e94\u500d\uff0c\u5df2\u7d93\u8655\u65bc\u98fd\u548c\u7684\u968e\u6bb5\u4e86\uff0c\u4f46\u554f\u984c\u4e26\u4e0d\u662f\u6211\u5011\u91cb\u653e\u70ad\u7684\u91cf\uff0c\u800c\u662f\u6211\u5011\u91cb\u653e\u70ad\u7684\u901f\u5ea6\u3002\u6d77\u6d0b\u9700\u8981\u6578\u5343\u5e74\u4f86\u6df7\u5408\u5e95\u5c64\u7684\u6c34\u548c\u8868\u5c64\u7684\u6c34\uff0c\u6240\u4ee5\u6211\u5011\u5728\u9019\u4e00\u767e\u5e74\u6240\u91cb\u653e\u7684\u78b3\u5176\u5be6\u53ea\u878d\u9032\u6d77\u6d0b\u7684\u4e00\u5c0f\u6bb5\u8868\u5c64\u4e2d\u3002\u5982\u679c\u6211\u5011\u628a\u71c3\u71d2\u5316\u77f3\u71c3\u6599\u7684\u901f\u5ea6\u6162\u4e0b\u7d04\u4e00\u767e\u500d\u6642\uff0c\u5c31\u80fd\u8b93\u5730\u7403\u6709\u80fd\u529b\u8655\u7406\u9019\u4e9b\u91cb\u653e\u7684\u78b3\u3002
\u6211\u5011\u518d\u4f86\u8ac7\u8ac7\u5176\u91cb\u653e\u51fa\u7684\u78b3\u3002\u73fe\u5728\u7164\uff08\u56db\u6210\uff09\u548c\u77f3\u5316\u6c23\u9ad4\uff08\u5169\u6210\uff09\u4ecd\u662f\u4e16\u754c\u767c\u96fb\u7684\u4e3b\u8981\u65b9\u5f0f\uff0c\u70ba\u4e86\u964d\u4f4e\u5176\u91cb\u653e\u7684\u78b3\uff0c\u6211\u5011\u53ef\u4ee5\u900f\u904e \u78b3\u6355\u6349 \u4f86\u5728\u9019\u4e9b\u78b3\u91cb\u653e\u4e4b\u524d\u6355\u6349\u8d77\u4f86\uff0c\u5176\u6355\u6349\u7387\u7d04\u70ba 85%\u3002\u554f\u984c\u662f\u78b3\u6355\u6349\u7684\u7d93\u6fdf\u50f9\u503c\u548c\u6355\u6349\u5230\u7684\u78b3\u7684\u5132\u5b58\u65b9\u5f0f\uff0c\u73fe\u5728\u6700\u5e38\u4f7f\u7528\u7684\u78b3\u5132\u5b58\u65b9\u5f0f\u662f\u628a\u5176\u57cb\u9032\u571f\u88e1\uff0c\u6211\u5011\u9084\u4e0d\u6e05\u695a\u9019\u4e9b\u78b3\uff08\u6216\u8005\u8aaa\u4e8c\u6c27\u5316\u78b3\uff09\u591a\u4e45\u6703\u91cb\u653e\u5230\u5927\u6c23\u4e2d\uff0c\u4e00\u822c\u8a8d\u70ba\u662f\u4e00\u767e\u4e94\u5341\u5e74\u3002\u7576\u6642\u5019\u5230\u4e86\uff0c\u9019\u4e9b\u78b3\u4ecd\u7136\u662f\u6211\u5011\u9700\u8981\u8655\u7406\u7684\u554f\u984c\u3002\u518d\u52a0\u4e0a\u4e00\u4e9b\u6c92\u6709\u78b3\u6355\u6349\u7684\u80fd\u91cf\u6d88\u8017\uff08\u4e0d\u662f\u7528\u4f86\u767c\u96fb\uff0c\u4f8b\u5982\u6c7d\u8eca\u548c\u5de5\u5ee0\uff09\uff0c\u5c31\u6703\u76f4\u63a5\u91cb\u653e\u81f3\u5927\u6c23\u4e2d\uff0c\u6211\u5011\u4ecd\u8feb\u5207\u9700\u8981\u4e00\u4e9b\u65b0\u7684\u7522\u80fd\u65b9\u5f0f\u3002
"},{"location":"feedback/future-of-fusion-energy/energy/#\u6c34\u529b","title":"\u6c34\u529b","text":"\u6d77\u6d0b\u6216\u6e56\u6cca\u4e2d\u7684\u6c34\u5728\u7d93\u904e\u592a\u967d\u80fd\u7167\u5c04\u5f8c\uff0c\u5176\u4e2d\u7684\u6c34\u5206\u5b50\u5c31\u6709\u8f03\u9ad8\u7684\u6a5f\u7387\uff08\u8b1b\u4eba\u8a71\u5c31\u662f\u6eab\u5ea6\u8b8a\u9ad8\uff09\u6399\u812b\u8868\u9762\u5f35\u529b\u4e26\u84b8\u6563\u9032\u5927\u6c23\u4e2d\uff0c\u7531\u65bc\u5927\u6c23\uff08\u5927\u90e8\u5206\u662f \\(N_2\\) \u548c \\(O_2\\)\uff09\u6bd4\u6c34\u5206\u5b50\uff08\\(H_2O\\)\uff09\u9084\u91cd\uff0c\u6240\u4ee5\u6c34\u5206\u5b50\u6703\u5feb\u901f\u4e0a\u5347\u3002\u96a8\u8457\u4e0a\u5347\u904e\u7a0b\uff0c\u6eab\u5ea6\u6f38\u6f38\u964d\u4f4e\uff0c\u6c34\u5206\u5b50\u7684\u904b\u52d5\u901f\u5ea6\u964d\u4f4e\u5f8c\u5c31\u5f88\u53ef\u80fd\u548c\u5176\u4ed6\u6c34\u5206\u5b50\u805a\u96c6\u5728\u4e00\u8d77\uff0c\u7576\u8d8a\u4f86\u8d8a\u591a\u6c34\u5206\u5b50\u805a\u96c6\u8d77\u4f86\u5c31\u5f62\u6210\u6c34\u6ef4\uff0c\u4e26\u805a\u773e\u6210\u70ba\u4e00\u6735\u96f2\u3002\u9019\u500b\u96f2\u6703\u56e0\u70ba\u4e0a\u5347\u6c23\u6d41\u6301\u7e8c\u7684\u4fdd\u6301\u5728\u9ad8\u7a7a\uff0c\u7576\u96f2\u5be6\u5728\u592a\u91cd\u6216\u8005\u4e0a\u5347\u6c23\u6d41\u964d\u4f4e\uff0c\u5c31\u6703\u964d\u96e8\u3002\u843d\u4e0b\u7684\u96e8\u5c31\u6703\u56e0\u70ba\u91cd\u529b\uff0c\u800c\u5bcc\u542b\u80fd\u91cf\u3002
\u4eba\u985e\u4e00\u5e74\u5e73\u5747\u53ef\u4ee5\u7372\u5f97\u7d04\u4e00\u516c\u5c3a\u7684\u6c34\u91cf\uff0c\u628a\u6c34\u5206\u5b50\u7684\u5bc6\u5ea6\u3001\u7e3d\u6c34\u91cf\u3001\u96f2\u6735\u7684\u9ad8\u5ea6\u3001\u91cd\u529b\u7684\u5f37\u5ea6\u6574\u5408\u5728\u4e00\u8d77\u6240\u7b97\u51fa\u7684\u80fd\u91cf\u78ba\u5be6\u8db3\u5920\u652f\u6490\u4eba\u985e\u80fd\u91cf\u7684\u6d88\u8017\uff0c\u4f46\u662f\u8d85\u904e\u4e00\u534a\u7684\u6c34\u6703\u88ab\u5730\u8868\u5438\u6536\u6216\u8005\u91cd\u65b0\u84b8\u6563\u9032\u7a7a\u6c23\u4e2d\uff0c\u6240\u4ee5\u6211\u5011\u5be6\u969b\u53ef\u4ee5\u4f7f\u7528\u7684\u80fd\u91cf\u6a02\u89c0\u5730\u4f30\u8a08\u53ea\u6709\u5176\u4e2d\u7684\u4e09\u6210\u80fd\u91cf\u3002\u6700\u5e38\u898b\u5132\u5b58\u6c34\u7684\u4f4d\u80fd\u7684\u65b9\u5f0f\u662f\u5efa\u7acb\u6c34\u58e9\u3002\u4f46\u662f\u5728\u6e1b\u5c11\u74b0\u5883\u7684\u8feb\u5bb3\u4e0b\uff0c\u6211\u5011\u8f03\u53ef\u80fd\u5229\u7528\u5ddd\u6d41\u5f0f\u767c\u96fb\uff0c\u4e0d\u5132\u5b58\u6c34\uff0c\u800c\u662f\u53ea\u53d6\u5f97\u6c34\u7684\u52d5\u91cf\u3002\u5728\u9019\u500b\u524d\u63d0\u4e14\u6a02\u89c0\u7684\u8a55\u4f30\u4e0b\u66ff\u6240\u6709\u7684\u6cb3\u6d41\u88dd\u4e0a\u5ddd\u6d41\u5f0f\u767c\u96fb\u6a5f\u53ef\u4ee5\u5f97\u5230\u7d04\u4e00\u6210\u7684\u80fd\u91cf\u3002
"},{"location":"feedback/future-of-fusion-energy/energy/#\u6d77\u6d6a","title":"\u6d77\u6d6a","text":"\u6d77\u6d6a\u662f\u98a8\u5728\u6d77\u6d0b\u8868\u9762\u7684\u6469\u64e6\u529b\u4fc3\u6210\u7684\uff0c\u7531\u6b64\u53ef\u77e5\u5176\u80fd\u91cf\u7d93\u904e\u591a\u6b21\u8f49\u63db\u5f8c\u5df2\u7d93\u4e0d\u591a\u3002\u8981\u8a08\u7b97\u6d77\u6d6a\u80fd\u5e36\u4f86\u7684\u80fd\u91cf\uff0c\u6211\u5011\u9700\u8981\u5e7e\u500b\u53c3\u6578\uff1a\u6d77\u5cb8\u7dda\u9577\u5ea6\uff08\\(10^5 km\\)\uff09\u3001\u6d77\u6d6a\u901f\u5ea6(\\(10 \\frac{m}{s}\\))\u3001\u6d77\u6d6a\u9ad8\u5ea6\uff08\\(1m\\)\uff09\u3001\u6d77\u7684\u5bc6\u5ea6\u3001\u91cd\u529b\uff0c\u6a02\u89c0\u5730\u7b97\u51fa\u7e3d\u80fd\u91cf\u7d04\u662f\u98a8\u529b\u7684\u4e94\u767e\u500d\u5206\u4e4b\u4e00\u4e5f\u5c31\u662f\u4eba\u985e\u6240\u9700\u7684\u5341\u5206\u4e4b\u4e00\u3002
\u76ee\u524d\u4eba\u985e\u4f7f\u7528\u6d77\u6d6a\u4e26\u4e0d\u6210\u719f\uff0c\u4f8b\u5982 Pelamis \u5c31\u662f\u5728\u6d77\u5cb8\u908a\u88fd\u4f5c\u4e00\u689d\u9577\u9577\u7684\u6d6e\u6a19\uff0c\u7576\u6d6e\u6a19\u6f02\u8d77\uff0c\u5c31\u6703\u5e36\u52d5\u6d77\u4e0b\u7684\u5713\u67f1\u9ad4\u52d5\u529b\u6a5f\u4e26\u7522\u80fd\uff0c\u9019\u7a2e\u7522\u80fd\u65b9\u5f0f\u53ef\u4ee5\u5e6b\u52a9\u4e00\u4e9b\u96e2\u5cf6\u81ea\u4e3b\u7684\u7522\u80fd\uff0c\u4f46\u662f\u4ecd\u7121\u6cd5\u5e6b\u52a9\u5927\u90e8\u5206\u4eba\u985e\u89e3\u6c7a\u80fd\u6e90\u554f\u984c\u3002
"},{"location":"feedback/future-of-fusion-energy/energy/#\u9593\u6b47\u6027\u80fd\u6e90","title":"\u9593\u6b47\u6027\u80fd\u6e90","text":"\u4e0a\u8ff0\u63d0\u5230\u7684\u592a\u967d\u80fd\u548c\u98a8\u529b\u96d6\u7136\u5f88\u6709\u6f5b\u529b\u6210\u70ba\u597d\u7684\u80fd\u6e90\u66ff\u4ee3\uff0c\u4f46\u90fd\u6703\u56e0\u70ba\u65e5\u591c\u3001\u5b63\u7bc0\u800c\u6709\u6240\u8b8a\u5316\u3002\u5982\u679c\u6211\u5011\u53ef\u4ee5\u5728\u9019\u4e4b\u4e2d\u627e\u5230\u4e00\u500b\u6709\u6548\u7387\u7684\u65b9\u5f0f\u89e3\u6c7a\u9019\u554f\u984c\uff0c\u7121\u7591\u6703\u7d66\u518d\u751f\u80fd\u6e90\u7684\u9032\u7a0b\u63d0\u4f9b\u4e00\u80a1\u63a8\u529b\u3002\u76ee\u524d\u6211\u5011\u4ecd\u6c92\u8fa6\u6cd5\u6709\u6548\u7684\u5132\u5b58\u5927\u91cf\u80fd\u6e90\uff0c\u6240\u4ee5\u4e00\u822c\u4f86\u8aaa\u767c\u96fb\u5ee0\u6703\u5206\u5225\u626e\u6f14\u5169\u7a2e\u89d2\u8272\uff0c\u4e00\u500b\u662f\u63d0\u4f9b\u7a69\u5b9a\u7684\u80fd\u91cf\uff08\u4f8b\u5982\u7164\u70ad\u548c\u6838\u80fd\uff09\uff0c\u4e00\u500b\u662f\u80fd\u5920\u5feb\u901f\u4f46\u8f03\u5c11\u91cf\u5730\u63d0\u4f9b\u80fd\u91cf\uff08\u4f8b\u5982\u5929\u7136\u74e6\u65af\u548c\u6c34\u58e9\uff09\uff0c\u5982\u679c\u8981\u8b93\u518d\u751f\u80fd\u6e90\u84ec\u52c3\u767c\u5c55\uff0c\u6211\u5011\u52e2\u5fc5\u9700\u8981\u500b\u65b9\u6cd5\u4f86\u900f\u904e\u518d\u751f\u80fd\u6e90\u505a\u5230\u9019\u5169\u500b\u7a2e\u985e\u7684\u9700\u6c42\u3002
\u4e0d\u5c0f\u5fc3\u88fd\u9020\u51fa\u591a\u7684\u80fd\u91cf\u600e\u9ebc\u8fa6\uff1f\u4ee5\u6b50\u6d32\u70ba\u4f8b\uff0c\u4ed6\u5011\u6709\u5efa\u7acb\u6b50\u76df\u96fb\u7db2\uff0c\u7576\u570b\u5bb6\u751f\u7522\u591a\u9918\u7684\u80fd\u91cf\u6642\uff0c\u5c31\u6703\u628a\u9019\u4e9b\u80fd\u91cf\u91cb\u653e\u9032\u96fb\u7db2\u4e2d\u7d66\u5176\u4ed6\u570b\u5bb6\u3002\u76f8\u53cd\u7684\uff0c\u7576\u88fd\u9020\u7684\u80fd\u91cf\u4e0d\u5920\u6642\uff0c\u5c31\u6703\u4f7f\u7528\u96fb\u7db2\u4e2d\u7684\u96fb\u4e26\u4ed8\u8cbb\u7d66\u76f8\u95dc\u7684\u570b\u5bb6\u3002
\u6211\u5011\u53ef\u4ee5\u900f\u904e Agora Electricity Data \u4f86\u627e\u5fb7\u570b\u7684\u76f8\u95dc\u7684\u80fd\u6e90\u6d88\u8017\u6bd4\u4f8b\uff0c\u4e26\u4f9d\u6b64\u4f86\u5206\u6790\u8a0e\u8ad6\u3002\u800c\u4e4b\u6240\u4ee5\u9078\u64c7\u5fb7\u570b\u662f\u56e0\u70ba\u4ed6\u5011\u5df2\u7d93\u958b\u59cb\u82b1\u8cbb\u5927\u91cf\u6642\u9593\u548c\u7d93\u8cbb\u53bb\u7814\u7a76\u518d\u751f\u80fd\u6e90\uff0c\u6240\u4ee5\u5f88\u9069\u5408\u7576\u4f5c\u7814\u7a76\u524d\u7de3\u6a19\u7684\u3002
\u53ef\u4ee5\u770b\u5230\u592a\u967d\u80fd\uff08\u9ec3\u8272\uff09\u662f\u500b\u4f4e\u5bb9\u91cf\u56e0\u7d20\u7684\u80fd\u91cf\u6e90\uff0c\u6bcf\u5230\u4e86\u665a\u4e0a\u5c31\u6703\u8b93\u767c\u96fb\u91cf\u964d\u81f3\u96f6\uff0c\u9019\u662f\u53ef\u9810\u671f\u4f46\u7121\u53ef\u907f\u514d\u7684\u3002 \u6211\u5011\u53ef\u80fd\u53ef\u4ee5\u900f\u904e\u96fb\u91cf\u5132\u5b58\uff0c\u4f86\u8b93\u767d\u5929\u7684\u96fb\u4f9b\u7d66\u665a\u4e0a\uff0c\u4e0d\u904e\u5132\u80fd\u76f8\u95dc\u7d30\u7bc0\u8a0e\u8ad6\u7559\u5230\u4e0b\u4e00\u6bb5\u843d\uff1b \u9664\u6b64\u4e4b\u5916\u67d0\u5e7e\u5929\u592a\u967d\u80fd\u7684\u767c\u96fb\u91cf\u76f8\u5c0d\u4f86\u8aaa\u8f03\u4f4e\uff0c\u53ef\u80fd\u662f\u56e0\u70ba\u4e0b\u96e8\u3001\u9670\u5929\u3001\u9727\u973e\uff0c\u9019\u7a2e\u72c0\u6cc1\u5c31\u5f88\u8f03\u96e3\u9810\u6e2c\u4f46\u662f\u537b\u6709\u5176\u4ed6\u65b9\u5f0f\u53ef\u4ee5\u8655\u7406\u3002 \u4f8b\u5982\u628a\u592a\u967d\u80fd\u767c\u96fb\u7e3d\u91cf\u63d0\u9ad8\u5230\u6240\u9700\u7684\u5169\u500d\uff0c\u7576\u767c\u751f\u9670\u5929\u6642\u6548\u7387\u6e1b\u534a\uff0c\u4ecd\u53ef\u4ee5\u63d0\u4f9b\u6211\u5011\u6240\u9700\uff1b \u6216\u8005\u6211\u5011\u53ef\u4ee5\u5206\u6563\u592a\u967d\u767c\u96fb\u7ad9\uff0c\u56e0\u70ba\u5f88\u53ef\u80fd\u9019\u88e1\u662f\u9670\u5929\u4f46\u53e6\u5916\u4e00\u908a\u662f\u5927\u592a\u967d\uff0c\u9019\u6642\u5c31\u53ef\u4ee5\u900f\u904e\u96fb\u7db2\u628a\u591a\u9918\u7684\u96fb\u8f38\u9001\u7d66\u9670\u5929\u7684\u5730\u5340\uff1b \u6700\u5f8c\u6211\u5011\u53ef\u4ee5\u8981\u6c42\u9670\u5929\u7684\u6642\u5019\u8b93\u8017\u96fb\u91cf\u964d\u4f4e\uff08\u4f8b\u5982\u95dc\u6389\u51b7\u6c23\uff09\u3002
\u76f8\u5c0d\u65bc\u592a\u967d\u80fd\uff0c\u98a8\u529b\u767c\u96fb\uff08\u85cd\u8272\uff09\u6bd4\u8f03\u4e0d\u6703\u53d7\u65e5\u591c\u7684\u5f71\u97ff\u3002 \u98a8\u529b\u767c\u96fb\u96d6\u7136\u662f\u500b\u76f8\u5c0d\u8f03\u9ad8\u7684\u5bb9\u91cf\u56e0\u7d20\u80fd\u6e90\uff0c\u4f46\u662f\u5176\u537b\u5f88\u96e3\u9810\u6e2c\u5176\u9ad8\u4f4e\u5cf0\u3002 \u6211\u5011\u53ef\u80fd\u53ef\u4ee5\u5229\u7528\u98a8\u529b\u8f03\u4e0d\u53d7\u65e5\u591c\u7684\u5f71\u97ff\u800c\u628a\u5b83\u7576\u6210\u592a\u967d\u80fd\u7684\u591c\u665a\u5099\u7528\u65b9\u6848\uff0c\u9019\u7a2e\u505a\u6cd5\u5176\u5be6\u76f8\u8f03\u65bc\u5132\u5b58\u96fb\u80fd\u81f3\u591c\u665a\u66f4\u6709\u6548\u7387\uff0c\u9019\u500b\u5dee\u7570\u5728\u5f85\u6703\u6211\u5011\u628a\u5c3a\u5ea6\u653e\u5230\u4e00\u6574\u5e74\u6703\u66f4\u660e\u986f\u3002
\u4ec0\u9ebc\u662f\u5bb9\u91cf\u56e0\u7d20\u5bb9\u91cf\u56e0\u7d20\uff08capacity factor\uff09\u4ee3\u8868\u4e00\u500b\u6642\u9593\u5340\u9593\u4e2d\u5be6\u969b\u767c\u96fb\u91cf\u548c\u7406\u8ad6\u767c\u96fb\u91cf\u7684\u6bd4\u4f8b\uff0c\u4ee5 2010 \u5e74\u5e15\u6d1b\u97cb\u5fb7\u767c\u96fb\u7ad9\uff08\u6838\u5206\u88c2\u767c\u96fb\u7ad9\uff09\u70ba\u4f8b\uff0c\u5176\u6bcf\u5c0f\u6642\u70ba 3,942 MW \u800c\u8a72\u5e74\u5ea6\u7e3d\u767c\u96fb\u91cf\u70ba 31,200,000 MWh\uff0c\u63db\u7b97\u6210\u5bb9\u91cf\u56e0\u7d20\u5247\u70ba \\(\\frac{31,200,000\\; MW\\cdot h}{\\left (365\\; days\\right )\\times \\left (24 \\; hours/day \\right )\\times \\left (3942\\; MW\\right )}=0.904=90.4\\%\\)\u3002 \u53cd\u904e\u4f86\u8aaa\u592a\u967d\u80fd\u767c\u96fb\u53d7\u9650\u65bc\u767d\u5929\u6642\u9593\u548c\u5929\u6c23\uff0c\u5176\u5bb9\u91cf\u56e0\u7d20\u901a\u5e38\u6703\u8f03\u4f4e\uff0c\u4ee5 Agua Caliente Solar Project \u70ba\u4f8b\uff0c\u5176\u5c0d\u5916\u5ba3\u7a31\u6bcf\u5c0f\u6642\u53ef\u767c\u96fb 290 MW\uff0c\u800c\u5e74\u5ea6\u767c\u96fb\u7e3d\u91cf\u70ba 740,000 MWh \u63db\u7b97\u4e0b\u4f86\u7d04\u70ba 29.1%\u3002
\u4e5f\u5c31\u662f\u8aaa\uff0c\u5982\u679c\u8981\u8b93\u592a\u967d\u80fd\u767c\u96fb\u7ad9\u9054\u5230\u548c\u6838\u5206\u88c2\u767c\u96fb\u7ad9\u76f8\u540c\u7684\u767c\u96fb\u7e3d\u91cf\uff0c\u6211\u5011\u5c31\u9700\u8981\u63d0\u5347\u592a\u967d\u80fd\u6bcf\u5c0f\u6642\u767c\u96fb\u91cf\u81f3\u6838\u5206\u88c2\u6bcf\u5c0f\u6642\u767c\u96fb\u91cf\u7684\u4e09\u500d\uff0c\u4ee5 Agua Caliente Solar Project \u70ba\u4f8b\u5c31\u662f\u6bcf\u5c0f\u6642\u7684\u7522\u80fd\u8981\u5f9e\u539f\u672c\u7684 290 MW \u63d0\u5347\u81f3\u7d04 12,000 MW\u3002
\u5728\u5fb7\u570b\uff0c\u592a\u967d\u80fd\u7684\u767c\u96fb\u91cf\u5230\u4e86\u51ac\u5929\u6703\u662f\u590f\u5929\u7684\u516d\u5206\u4e4b\u4e00\u500d\uff0c\u5176\u5c0d\u61c9\u65b9\u5f0f\u5176\u5be6\u548c\u9670\u5929\u7684\u8655\u7406\u65b9\u5f0f\u5f88\u50cf\uff0c\u53ea\u662f\u91cf\u5c3a\u9700\u8981\u653e\u5927\u4e00\u4e9b\u3002 \u4f8b\u5982\u6211\u5011\u9700\u8981\u5b89\u88dd\u592a\u967d\u80fd\u767c\u96fb\u7ad9\u5230\u590f\u5929\u6240\u9700\u7684\u516d\u500d\uff0c\u5982\u679c\u52a0\u4e0a\u8655\u7406\u9670\u5929\uff0c\u5c31\u662f\u5341\u4e8c\u500d\u7684\u91cf\uff1b \u53e6\u5916\u6211\u5011\u53ef\u80fd\u53ef\u4ee5\u5efa\u7acb\u4e00\u500b\u5357\u5317\u534a\u7403\u7684\u8f38\u96fb\u7dda\uff0c\u7576\u5317\u534a\u7403\u9032\u5165\u51ac\u5929\u4e4b\u5f8c\uff0c\u5c31\u5229\u7528\u5357\u534a\u7403\u7684\u592a\u967d\u4f86\u628a\u767c\u96fb\u9001\u5f80\u5317\u534a\u7403\uff1b \u6700\u5f8c\u5c31\u5982\u524d\u9762\u63d0\u5230\u7684\uff0c\u98a8\u529b\u548c\u592a\u967d\u80fd\u76f8\u53cd\uff0c\u51ac\u5929\u7684\u98a8\u529b\u6bd4\u590f\u5929\u7684\u5f37\u7d04\u4e09\u500d \uff08\u5982\u540c\u6211\u5011\u5728\u98a8\u529b\u63d0\u5230\u7684\uff0c\u51ac\u5929\u8d64\u9053\u548c\u8d64\u9053\u4ee5\u5916\u7684\u6eab\u5dee\u8f03\u9ad8\uff09\uff0c \u9019\u6642\u6211\u5011\u53ef\u4ee5\u8b93\u5169\u8005\u7684\u767c\u96fb\u5f62\u6210\u4e92\u88dc\u3002
\u6700\u5f8c\u6211\u5011\u7d71\u6574\u51fa\u56db\u7a2e\u65b9\u5f0f\u4f86\u89e3\u6c7a\u9593\u6b47\u6027\u80fd\u6e90\u7684\u554f\u984c\uff1a
\u7576\u7136\u5982\u540c\u8a31\u591a\u4e8b\u60c5\u4e00\u6a23\uff0c\u6700\u597d\u7684\u505a\u6cd5\u901a\u5e38\u4f86\u81ea\u65bc\u6574\u5408\u773e\u591a\u53ef\u884c\u4f5c\u6cd5\u3002
"},{"location":"feedback/future-of-fusion-energy/energy/#\u5132\u80fd\u7cfb\u7d71","title":"\u5132\u80fd\u7cfb\u7d71","text":"\u4ee5\u5fb7\u570b\u70ba\u4f8b\uff0c\u5118\u7ba1\u98a8\u529b\u548c\u592a\u967d\u80fd\u4e4b\u9593\u6709\u5f7c\u6b64\u4e92\u88dc\u7684\u95dc\u4fc2\uff0c\u7136\u800c\u6839\u64da\u4f30\u8a08\u6211\u5011\u4ecd\u9700\u8981\u6bcf\u5929\u5132\u5b58 25~30% \u7684\u80fd\u91cf\u4f86\u4f9b\u61c9\u591c\u665a\u7684\u4f4e\u5cf0\u671f\uff0c 5~10% \u7684\u80fd\u91cf\u4f86\u4f9b\u61c9\u51ac\u5929\u7684\u4f4e\u5cf0\u671f\uff0c\u800c\u9019\u500b\u4f30\u8a08\u7d50\u679c\u4e5f\u540c\u6a23\u9069\u7528\u65bc\u7f8e\u570b\u3002
2021 \u5e74\u4e2d\u570b\u80fd\u6e90\u5c40\u7684\u5132\u80fd\u7522\u696d\u767d\u76ae\u66f8\uff0c\u81fa\u7063\u7684\u653f\u6cbb\u7acb\u5834\u5e38\u5e38\u6703\u8b93\u5927\u5bb6\u5ffd\u8996\u4e2d\u570b\u7684\u512a\u9ede\uff0c\u503c\u5f97\u6ce8\u610f\u7684\u662f\u5132\u80fd\u7522\u696d\u4e2d\u4f7f\u7528\u7387\u6700\u9ad8\u7684\u5206\u5225\u662f\u4e2d\u570b\u3001\u7f8e\u570b\u3001\u6b50\u6d32\u3001\u5357\u97d3\u548c\u65e5\u672c\u3002
\u6700\u5e38\u88ab\u4f7f\u7528\u7684\u5132\u96fb\u6a5f\u5236\u662f\u5229\u7528\u6c34\u4f4d\u5dee\uff0c\u4e5f\u5c31\u662f\u7576\u88fd\u9020\u591a\u9918\u7684\u96fb\u80fd\u6642\uff0c\u900f\u904e\u99ac\u9054\u628a\u4e0b\u6e38\u6c34\u5eab\u7684\u6c34\u9001\u5f80\u4e0a\u6e38\u6c34\u5eab\uff0c\u9019\u6642\u96fb\u80fd\u5c31\u6703\u88ab\u8f49\u63db\u6210\u91cd\u529b\u4f4d\u80fd\u5dee\uff0c\u9019\u65b9\u5f0f\u7684\u6574\u9ad4\u80fd\u91cf\u8f49\u63db\u7387\u70ba\u76f8\u7576\u9ad8\u7684 75%\u3002 \u7136\u800c\u5373\u4f7f\u6211\u5011\u628a\u5730\u7403\u4e0a\u6240\u6709\u6cb3\u6d41\u548c\u6e56\u6cca\u7684\u6c34\u90fd\u5f80\u4e0a\u62ac\u6607 30 \u516c\u5c3a\u4f86\u5132\u5b58\u4f4d\u80fd\u5dee1\uff0c\u4e5f\u4e0d\u8db3\u4ee5\u6eff\u8db3\u4eba\u985e\u4e00\u5e74\u6240\u9700\u7684 5%\uff0c\u9019\u4e5f\u56de\u61c9\u4e86\u6211\u5011\u524d\u9762\u8aaa\u6c34\u529b\u50c5\u80fd\u4f9b\u61c9\u7d04\u4eba\u985e\u6240\u9700\u7684 10%\u3002 \u56e0\u6b64\u5728\u5927\u90e8\u5206\u5730\u7406\u74b0\u5883\u4e2d\u6c34\u529b\u6c92\u8fa6\u6cd5\u6eff\u8db3\u6211\u5011\u5132\u80fd\u7684\u9700\u6c42\u3002
\u6211\u5011\u4e5f\u53ef\u4ee5\u900f\u904e\u71b1\u80fd\u4f86\u5132\u5b58\u80fd\u91cf\uff0c\u628a\u591a\u9918\u7684\u96fb\u80fd\u7528\u4f86\u52a0\u71b1\u5730\u5e95\u7d04\u4e94\u516c\u5c3a\u7684\u5ca9\u77f3\u5c64\u5230\u7d04 \\(50^\\circ C\\)\u3002 \u7531\u65bc\u5ca9\u77f3\u7684\u4f4e\u5c0e\u71b1\u6027\uff0c\u6211\u5011\u767c\u73fe\u4e00\u7acb\u65b9\u516c\u5c3a\u7684\u5ca9\u77f3\u53ef\u4ee5\u5132\u5b58\u7d04 \\(10^8J\\) \u7684\u80fd\u91cf\uff0c\u63db\u53e5\u8a71\u8aaa\uff0c\u6211\u5011\u53ea\u9700\u8981 0.1% \u7684\u9678\u584a\u9762\u7a4d\u5c31\u80fd\u5132\u5b58 5% \u4eba\u985e\u4e00\u5e74\u7684\u80fd\u91cf\u3002 \u4f46\u662f\uff0c\u900f\u904e\u71b1\u80fd\u88fd\u9020\u96fb\u529b\u7684\u80fd\u91cf\u8f49\u63db\u7387\u6703\u53d7\u5230\u6eab\u5ea6\u5dee\u7684\u5f71\u97ff\uff0c\u4e5f\u5c31\u662f\u9019\u65b9\u6cd5\u7684\u80fd\u91cf\u8f49\u63db\u7387\u4e26\u4e0d\u9ad8\uff0c\u5e78\u904b\u7684\u662f\u6211\u5011\u4e0d\u9700\u8981\u628a\u5b83\u8f49\u70ba\u96fb\u80fd\uff0c\u6211\u5011\u53ef\u4ee5\u76f4\u63a5\u4f7f\u7528\u9019\u500b\u71b1\u80fd\u4f86\u5e6b\u6211\u5011\u5ea6\u904e\u5bd2\u51b7\u7684\u51ac\u5929\uff08\u51ac\u5929\u4fdd\u6eab\u6240\u9700\u7684\u80fd\u91cf\u7d04\u4f54\u5168\u4eba\u985e\u8017\u80fd\u7684 10%\uff09\uff0c\u540c\u6a23\u7684\u65b9\u5f0f\u4e5f\u9069\u7528\u65bc\u5132\u5b58\u51b7\u6c23\u7136\u5f8c\u628a\u5b83\u653e\u5230\u590f\u5929\u4f86\u4f7f\u7528\u3002
\u71b1\u5132\u5b58\u7cfb\u7d71\u9019\u500b\u6771\u897f\u6211\u4e0a\u7db2\u67e5\u5230\u5f88\u591a\u6848\u4f8b\uff0c\u4f8b\u5982\u5fb7\u570b\u67cf\u6797\u570b\u6703\u5927\u6a13\u3001\u52a0\u62ff\u5927\u5fb7\u96f7\u514b\u793e\u5340\u7bc0\u7701\u4e86 97% \u6240\u9700\u7684\u4f9b\u6696\u80fd\u6e90\u548c\u82ac\u862d\u516c\u53f8\u8a2d\u8a08\u51fa\u5546\u7528\u6c99\u71b1\u5132\u5b58\u88dd\u7f6e\u3002\u9664\u6b64\u4e4b\u5916\uff0c\u7531\u65bc\u70cf\u4fc4\u6230\u722d\u5c0e\u81f4\u5929\u7136\u6c23\u4f9b\u61c9\u4e0d\u7a69\uff0c\u5967\u5730\u5229\u65bc 2023 \u5e74\u7981\u6b62\u65b0\u5efa\u5929\u7136\u6c23\u4f9b\u6696\u7cfb\u7d71\uff0c\u4e26\u9010\u6b65\u5b8c\u5168\u6c70\u63db\u4e4b\u7b49\u6b63\u6e96\u5099\u958b\u59cb\u7684\u8a08\u756b\u3002
\u53e6\u5916\u4e00\u7a2e\u503c\u5f97\u6ce8\u610f\u7684\u89e3\u6c7a\u65b9\u6848\u662f\u92f0\u96e2\u5b50\u96fb\u6c602\uff0c\u9019\u500b\u8fd1\u5e7e\u5e74\u53d6\u5f97\u8a31\u591a\u91cd\u8981\u7a81\u7834\u7684\u6280\u8853\u3002\u92f0\u96e2\u5b50\u96fb\u6c60\u7684\u512a\u52e2\u4e0d\u53ea\u662f\u9ad8\u96fb\u80fd\u56de\u6536\u7387\uff08\u5927\u7d04\u70ba 80~90%\uff09\u9084\u6709\u4ed6\u7684\u4f4e\u6210\u672c\u3002 \u4ee5 2022 \u5e74\u7279\u65af\u62c9 PowerWall \u7684\u96f6\u552e\u50f9 7500$ \u70ba\u4f8b\uff0c\u53ef\u4ee5\u5132\u5b58 \\(13.5\\; kWh\\) \u7684\u80fd\u91cf\u4e26\u4fdd\u8b49\u904b\u4f5c\u5341\u5e74\uff0c\u5047\u8a2d\u6bcf\u5929\u90fd\u56de\u5145\u4e00\u6b21\u5c31\u53ef\u4ee5\u5132\u5b58\u7d04 \\(3650 \\times 13.5=49,275\\; kWh\\) \u7684\u96fb\u91cf\uff0c\u4e5f\u5c31\u662f\u6bcf kWh \u7d04 0.15$\uff08\u7d04 4 \u584a\u53f0\u5e63\uff09\uff0c\u9019\u5e7e\u4e4e\u548c\u767c\u96fb\u7684\u6210\u672c\u76f8\u540c\uff0c\u5728\u9019\u6a23\u5212\u7b97\u7684\u50f9\u683c\u4e0b\u5f88\u591a\u5546\u696d\u548c\u5bb6\u5ead\u5f0f\u7684\u5132\u80fd\u6a5f\u5236\u90fd\u9078\u64c7\u4f7f\u7528\u9019\u7a2e\u65b9\u5f0f\uff0c\u96d6\u7136\u770b\u8d77\u4f86\u662f\u500b\u7c21\u55ae\u7684\u904b\u7b97\uff0c\u4f46\u9019\u7d50\u679c\u548c\u76f8\u95dc\u7d30\u90e8\u904b\u7b97\u5f97\u51fa\u7684\u592a\u967d\u80fd\u65e5\u591c\u5132\u80fd\u6210\u672c\u76f8\u5dee\u4e0d\u591a\u3002 \u4f46\u662f\u92f0\u96e2\u5b50\u96fb\u6c60\u6709\u500b\u5927\u7f3a\u9ede\uff0c\u5c31\u662f\u4ed6\u53ea\u9069\u5408\u5c0f\u7bc4\u570d\u548c\u77ed\u671f\u7684\u5132\u80fd\uff0c\u6211\u5011\u6c92\u8fa6\u6cd5\u8b93\u6bcf\u500b\u5bb6\u5ead\u90fd\u653e\u4e00\u500b\u92f0\u96e2\u5b50\u96fb\u6c60\u4e5f\u6c92\u8fa6\u6cd5\u5229\u7528\u5b83\u5132\u5b58\u590f\u5929\u7684\u80fd\u91cf\u4ee5\u5229\u51ac\u5929\u4f7f\u7528\u3002
\u4e0d\u80fd\u9069\u7528\u65bc\u5168\u7403\u7684\u539f\u56e0\u662f\u92f0\u5728\u571f\u5730\u7684\u5b58\u91cf\u4f30\u8a08\u53ea\u6709 2800 \u842c\u9813\uff0c\u5982\u679c\u4ee5 1 \u514b\u7684\u92f0\u80fd\u5132\u5b58 4000 \u7126\u8033\u7684\u80fd\u91cf\u4f86\u770b\uff0c\u6211\u5011\u9700\u8981\u7d04 60 \u5104\u5678\u7684\u92f0\uff0c\u5118\u7ba1\u6d77\u6d0b\u4e2d\u6709 2000 \u5104\u5678\u7684\u92f0\uff0c\u4f46\u662f\u6211\u5011\u53ea\u80fd\u8403\u53d6\u6d77\u6d0b\u8868\u5c64\u7684\u91cf\uff0c\u4e4b\u5f8c\u5c31\u8981\u7b49\u4e00\u5343\u5e74\u4f86\u8b93\u5e95\u5c64\u7684\u6d77\u6c34\u6df7\u5408\u4e0a\u4f86\u3002 \u9664\u6b64\u4e4b\u5916\u900f\u904e\u6d77\u6d0b\u8403\u53d6\u92f0\u662f\u500b\u5c1a\u672a\u6210\u719f\u7684\u9818\u57df\uff0c\u6545\u800c\u5c07\u6beb\u7121\u7591\u554f\u5730\u63d0\u9ad8\u92f0\u96e2\u5b50\u96fb\u6c60\u7684\u6210\u672c\u3002 \u4e4b\u6240\u4ee5\u4e0d\u80fd\u9069\u7528\u65bc\u9577\u6642\u9593\u7684\u5132\u5b58\u5247\u662f\u56e0\u70ba\u5176\u5148\u5929\u7684\u53ea\u80fd\u5b58\u6d3b\u7d04\u5341\u5e74\uff0c\u7576\u8d85\u904e\u9019\u500b\u5e74\u4efd\u6642\uff0c\u5c31\u6703\u5927\u5927\u7684\u964d\u4f4e\u5176\u80fd\u5132\u5b58\u7684\u96fb\u91cf\uff0c\u5982\u679c\u6211\u5011\u4e00\u5e74\u53ea\u7528\u4e00\u6b21\u96fb\u6c60\uff0c\u4e0a\u8ff0\u6240\u8a08\u7b97\u7684\u6210\u672c\u5c07\u6703\u9700\u8981\u4e58\u4ee5 365 \u500d\uff0c\u5f88\u986f\u7136\u5730\u5c07\u4e0d\u7b26\u5408\u6210\u672c\u3002
\u5176\u4ed6\u53ef\u80fd\u7684\u65b9\u5f0f\u4f8b\u5982\u7194\u9e7d\uff08Molten Salt\uff09\u53ef\u4ee5\u628a\u71b1\u80fd\u4fdd\u5b58\u5728\u7269\u8cea\u7684\u6db2\u5316\u72c0\u614b\u4e2d\uff0c\u4f46\u53ea\u9069\u5408\u5927\u578b\u767c\u96fb\u5ee0\u4e14\u6210\u672c\u6bd4\u4e0a\u8ff0\u7684\u6210\u672c\u9ad8\u6578\u500d\uff1b \u58d3\u7e2e\u7a7a\u6c23\uff08CAES\uff09\u81f3\u6db2\u9ad4\u5f8c\u518d\u8b93\u5176\u8f49\u6210\u6c23\u9ad4\u6642\u5c31\u53ef\u4ee5\u5229\u7528\u98a8\u529b\u767c\u96fb\uff0c\u4f46\u662f\u6548\u80fd\u8f49\u63db\u7387\u5f88\u4f4e\uff1b \u8d85\u96fb\u5bb9\uff08Super-capacitor\uff09\u4e5f\u662f\u4e00\u7a2e\u5132\u5b58\u96fb\u80fd\u7684\u65b9\u5f0f\uff0c\u4f46\u662f\u4e5f\u662f\u6548\u7387\u904e\u4f4e\uff1b \u98db\u8f2a\uff08flywheels\uff09\u900f\u904e\u7dad\u6301\u52d5\u80fd\u4f86\u5132\u5b58\u80fd\u91cf\uff0c\u5b83\u53ef\u80fd\u5f88\u9069\u5408\u4f7f\u7528\u5728\u6c7d\u8eca\u4e0a\uff0c\u7576\u715e\u8eca\u6642\uff0c\u8b93\u8a72\u52d5\u80fd\u900f\u904e\u98db\u8f2a\u4fdd\u5b58\u8d77\u4f86\uff0c\u8d77\u6b65\u5f8c\u91cb\u653e\u51fa\u4f86\uff0c\u4f46\u662f\u82e5\u7528\u65bc\u96fb\u80fd\u5247\u662f\u8655\u65bc\u7814\u7a76\u968e\u6bb5\u4e5f\u5c31\u662f\u6703\u6709\u5f88\u9ad8\u7684\u6210\u672c\u3002
"},{"location":"feedback/future-of-fusion-energy/energy/#\u9700\u6c42\u63a7\u7ba1","title":"\u9700\u6c42\u63a7\u7ba1","text":"\u9700\u6c42\u63a7\u7ba1\u8b93\u6a5f\u5668\u6216\u8a2d\u5099\u5728\u96fb\u529b\u7522\u80fd\u8f03\u4f4e\u7684\u6642\u5019\u6e1b\u5c11\u6240\u9700\u7684\u96fb\u91cf\uff0c\u6709\u4e9b\u8a2d\u5099\u751a\u81f3\u4e0d\u4ecb\u610f\u77ed\u6642\u9593\uff08\u6578\u5c0f\u6642\uff09\u7684\u505c\u96fb\uff0c\u4f8b\u5982\u51b7\u6c23\u3001\u6c34\u6ce5\u78be\u78e8\u6a5f\u3001\u6d77\u6c34\u6de1\u5316\u7cfb\u7d71\u3002 \u6211\u5011\u901a\u5e38\u53ef\u4ee5\u85c9\u7531\u63d0\u9ad8\u4f4e\u7522\u80fd\u6642\u671f\u7684\u6bcf\u55ae\u4f4d\u80fd\u6e90\u7684\u50f9\u9322\u4f86\u8a98\u4f7f\u4f01\u696d\u6216\u5bb6\u5ead\u4f86\u6e1b\u5c11\u80fd\u91cf\u7684\u4f7f\u7528\u3002 \u524d\u9762\u6240\u63d0\u7684\u5132\u80fd\u7cfb\u7d71\u5176\u5be6\u5c31\u662f\u9700\u6c42\u63a7\u7ba1\u7684\u4e00\u7a2e\u5be6\u8e10\uff0c\u900f\u904e\u628a\u9ad8\u5cf0\u6642\u7684\u80fd\u91cf\u5132\u5b58\u8d77\u4f86\uff0c\u5728\u4f4e\u5cf0\u6642\u4e0d\u9760\u5916\u754c\uff0c\u800c\u662f\u4f7f\u7528\u5167\u5b58\u7684\u80fd\u91cf\u4f86\u904b\u4f5c\u3002
\u76ee\u524d\u5728\u9700\u6c42\u63a7\u7ba1\u7684\u6a5f\u5236\u4e0a\uff0c\u5927\u90e8\u5206\u4ecd\u662f\u50c5\u5141\u8a31\u77ed\u6642\u9593\u7684\u505c\u96fb\uff0c\u5982\u4f55\u9069\u61c9\u51ac\u5929\u6216\u96e8\u5b63\u9019\u7a2e\u9577\u9054\u6578\u5929\u751a\u81f3\u6578\u6708\u7684\u4f4e\u7522\u80fd\uff08\u4f8b\u5982\u592a\u967d\u80fd\uff09\u6642\u671f\uff0c\u4ecd\u662f\u4e00\u5927\u6311\u6230\u3002
"},{"location":"feedback/future-of-fusion-energy/energy/#\u8de8\u5340\u57df\u96fb\u7db2","title":"\u8de8\u5340\u57df\u96fb\u7db2","text":"\u8de8\u5340\u57df\u96fb\u7db2\u5176\u5be6\u6eff\u76f4\u89c0\u7684\uff0c\u6211\u53ef\u4ee5\u628a\u6492\u54c8\u62c9\u6c99\u6f20\u7684\u592a\u967d\u80fd\u8f38\u9001\u81f3\u6b50\u6d32\u6216\u975e\u6d32\u5404\u5730\uff08\u4f8b\u5982 DESERTEC\uff09\uff0c\u751a\u81f3\u7576\u5317\u534a\u7403\u9032\u5165\u51ac\u5929\u6642\uff0c\u5c31\u628a\u5357\u534a\u7403\u7684\u96fb\u80fd\u8f38\u9001\u81f3\u5317\u534a\u7403\uff08\u900f\u904e\u9ad8\u58d3\u76f4\u6d41\u4f86\u8f38\u9001\uff09\u3002
\u9ad8\u58d3\u76f4\u6d41\u7684\u5be6\u8e10\u4e0d\u50c5\u662f DESERTEC \u6709\u5728\u7528\uff0c\u5728\u4e2d\u570b\uff0c\u4e5f\u5df2\u7d93\u958b\u59cb\u5927\u91cf\u90e8\u7f72\uff0c\u8a73\u898b\u4e2d\u570b\u570b\u5bb6\u96fb\u7db2\u3002
\u70ba\u4ec0\u9ebc\u4e0d\u5728\u9644\u8fd1\u5efa\u7acb\u96fb\u7db2\u5c31\u597d\uff1f
\u9644\u8fd1\u7684\u5929\u6c23\u901a\u5e38\u90fd\u4e00\u6a23\uff0c\u4ee5\u98a8\u529b\u767c\u96fb\u70ba\u4f8b\u3002\u5f85\u88dc\u5716\uff0cMaybe from wind Europe.
\u5118\u7ba1\u8de8\u5340\u57df\u96fb\u7db2\u770b\u4f3c\u662f\u89e3\u6c7a\u9593\u6b47\u6027\u80fd\u6e90\u554f\u984c\u4e2d\u6700\u80fd\u88ab\u5be6\u8e10\u7684\u90e8\u5206\u505a\u6cd5\uff08\u4ee5\u592a\u967d\u80fd\u4f86\u8aaa\uff0c\u4ed6\u4ecd\u6c92\u8fa6\u6cd5\u8655\u7406\u767d\u5929\u665a\u4e0a\u7684\u5dee\u7570\uff09\uff0c\u4f46\u4ed6\u4e5f\u662f\u6700\u6709\u653f\u6cbb\u969c\u7919\u7684\u505a\u6cd5\u3002 \u751f\u7522\u80fd\u6e90\u7684\u6210\u672c\u662f\u6240\u6709\u5df2\u958b\u767c\u570b\u5bb6\u4e2d\u6700\u5927\u7684\u6295\u8cc7\u4e4b\u4e00\uff08\u4ee5\u81fa\u7063\u70ba\u4f8b\uff0c\u653f\u5e9c 110 \u5e74\u6b72\u51fa\u70ba 2 \u5146\u5de6\u53f3\uff0c\u4f46\u662f\u81fa\u96fb\u5728\u8a72\u5e74\u5ea6\u7d04\u82b1\u4e86 7000 \u5104\u4f86\u751f\u7522\u96fb\u80fd\uff09\uff0c\u64f4\u589e\u96fb\u7db2\u4ee3\u8868\u9700\u8981\u6295\u8cc7\u5927\u91cf\u91d1\u9322\u5728\u570b\u5916\u4e26\u58d3\u7e2e\u570b\u5167\u751f\u7522\u96fb\u80fd\u7684\u9810\u7b97\uff0c\u9664\u6b64\u4e4b\u5916\u9084\u6703\u8b93\u81ea\u5df1\u9ad8\u5ea6\u4f9d\u8cf4\u65bc\u5176\u4ed6\u570b\u5bb6\u7684\u653f\u6cbb\u7a69\u5b9a\u5ea6\u3002 \u63db\u53e5\u8a71\u8aaa\uff0c\u4efb\u4f55\u96fb\u7dda\u7d93\u904e\u7684\u570b\u5bb6\u90fd\u6709\u80fd\u529b\u8b93\u4f60\u7684\u570b\u5bb6\u96fb\u529b\u4e2d\u65b7\uff0c\u4e26\u4e14\u9084\u53ef\u4ee5\u662f\u9577\u671f\u7684\u4e2d\u65b7\u3002 \u5176\u4ed6\u65b9\u6848\u5982\u6c34\u4e0b\u96fb\u7e9c\uff0c\u5176\u6210\u672c\u4ecd\u9ad8\u5230\u6c92\u6709\u8db3\u5920\u7684\u7d93\u6fdf\u6548\u76ca\u3002
"},{"location":"feedback/future-of-fusion-energy/energy/#\u7d50\u8a9e","title":"\u7d50\u8a9e","text":"\u4e00\u822c\u4f86\u8aaa\uff0c\u4e0a\u8ff0\u63d0\u5230\u7684\u80fd\u6e90\u9664\u4e86\u6838\u80fd\u548c\u77f3\u5316\u71c3\u6599\u90fd\u5c6c\u65bc\u518d\u751f\u80fd\u6e90\uff0c\u6216\u8005\u8aaa\u53ef\u4ee5\u8db3\u91cf\u5730\u88dc\u5145\uff08\u88dc\u5145\u7684\u901f\u5ea6\u5927\u65bc\u6d88\u8017\uff09\u7684\u80fd\u6e90\u90fd\u5c6c\u65bc\u518d\u751f\u80fd\u6e90\u3002\u4f46\u662f\u6211\u5011\u4e5f\u8a0e\u8ad6\u5230\u4e86\u4e26\u4e0d\u662f\u6bcf\u500b\u518d\u751f\u80fd\u6e90\u90fd\u8db3\u5920\u6211\u5011\u4f7f\u7528\uff0c\u4f8b\u5982\u6c34\u529b\uff0c\u5c31\u7b97\u6211\u5011\u63a5\u4e0b\u4f86\u628a\u5168\u4e16\u754c\u7684\u6c34\u529b\u767c\u96fb\u5ee0\u90fd\u62ff\u4f86\u6301\u7e8c\u767c\u96fb\u4e94\u5341\u5104\u5e74\uff0c\u4ed6\u6240\u7522\u751f\u7684\u80fd\u91cf\u90fd\u62b5\u4e0d\u904e\u76ee\u524d\u9810\u4f30\u7684\u6240\u6709\u77f3\u6cb9\u80fd\u7522\u751f\u7684\u80fd\u91cf\u3002\u9664\u6b64\u4e4b\u5916\uff0c\u4e26\u4e0d\u662f\u8aaa\u518d\u751f\u80fd\u6e90\u5c31\u6703\u5c0d\u74b0\u5883\u6bd4\u8f03\u53cb\u5584\uff0c\u4f8b\u5982\u592a\u967d\u80fd\uff0c\u5373\u4f7f\u592a\u967d\u80fd\u96fb\u677f\u672a\u4f86 20 \u5e74\u8b93\u5b83\u7a69\u5b9a\u767c\u96fb\uff0c\u5b83\u5728\u5de5\u5ee0\u88fd\u9020\u6642\u6240\u7522\u751f\u7684\u4e8c\u6c27\u5316\u78b3\u4ecd\u662f\u6838\u80fd\u6bcf\u55ae\u4f4d\u80fd\u91cf\u6240\u7522\u751f\u7684\u4e8c\u6c27\u5316\u78b3\u7684\u4e09\u500d\u3002
\u7576\u6211\u5011\u5728\u9078\u64c7\u4f7f\u7528\u7684\u80fd\u6e90\u6642\uff0c\u6211\u5011\u9700\u8981\u8003\u616e\u7684\u4e0d\u50c5\u662f\u4ed6\u662f\u5426\u5c6c\u65bc\u300c\u518d\u751f\u80fd\u6e90\u300d\uff0c\u5728\u4e0a\u8ff0\u8a0e\u8ad6\u4e2d\u4e5f\u63d0\u5230\u5f88\u591a\u80fd\u6e90\u7684\u512a\u52a3\u52e2\uff0c\u9019\u4e9b\u90fd\u662f\u5728\u9078\u64c7\u6642\u53ef\u4ee5\u653e\u5230\u6aaf\u9762\u4e0a\u8b93\u5927\u5bb6\u53bb\u8003\u616e\u7684\u9762\u5411\u3002
\u6211\u5011\u6839\u64da\u4e0a\u5716\u5404\u500b\u80fd\u6e90\u7684\u860a\u542b\u91cf\uff0c\u52a0\u4e0a\u524d\u9762\u63d0\u5230\u53ef\u80fd\u7684\u53ef\u884c\u64f7\u53d6\u65b9\u5f0f\uff0c\u6211\u5011\u53ef\u4ee5\u5f97\u51fa\u4e0b\u8868\u7684\u7e3d\u7d50\u3002
\u7a2e\u985e \u53ef\u6301\u7e8c\u591a\u4e45 \u9593\u6b47\u6027\u80fd\u6e90 D-T \u6838\u878d\u5408 1 \u5104\u5e74 \u5426 D-D \u6838\u878d\u5408 100 \u5104\u5e74 \u5426 \u923e\u2014235 \u6838\u5206\u88c2\uff08\u9678\u5730\uff09 100 \u5e74 \u5426 \u923e\u2014238 \u6838\u5206\u88c2\uff08\u9678\u5730\uff09 1 \u842c\u5e74 \u5426 \u923e\u2014235 \u6838\u5206\u88c2\uff08\u6d77\u6d0b\uff09 1 \u842c\u5e74 \u5426 \u923e\u2014238 \u6838\u5206\u88c2\uff08\u6d77\u6d0b\uff09 100 \u842c\u5e74 \u5426 \u77f3\u5316\u71c3\u6599 100 \u5e74 \u5426\u975e\u518d\u751f\u80fd\u6e90\u7684\u6bd4\u8f03
\u7a2e\u985e \u4f54\u4eba\u985e\u8017\u80fd\u6bd4 \u9593\u6b47\u6027\u80fd\u6e90 \u5730\u71b1 0.1 \u5426 \u592a\u967d\u80fd 100 \u9031\u671f\u6027 \u98a8\u529b 1 \u662f \u751f\u8cea\u80fd 0.1 \u5426 \u7de9\u6162\u5730\u4f7f\u7528\u77f3\u5316\u71c3\u6599 0.000001 \u5426 \u6c34\u529b 0.1 \u901a\u5e38\u4e0d\u662f \u6f6e\u6c50 0.01 \u4e5f\u8a31 \u6d77\u6d6a 0.01 \u662f\u518d\u751f\u80fd\u6e90\u7684\u6bd4\u8f03
\u4f9d\u7167\u9019\u4e9b\u8cc7\u8a0a\uff0c\u6211\u5011\u53ef\u4ee5\u5f97\u51fa\u672a\u4f86\u4eba\u985e\u80fd\u6e90\u767c\u5c55\u7684\u4e3b\u8981\u4e09\u500b\u9762\u5411\uff1a
\u7576\u62ac\u5347\u7684\u8d8a\u9ad8\uff0c\u6240\u5132\u5b58\u7684\u80fd\u91cf\u8d8a\u5927\uff0c\u628a 1 \u516c\u5678\u7684\u6c34\u62ac\u5347 10 \u516c\u5c3a\u9700\u8981\u7684\u80fd\u91cf\u548c\u628a 0.01 \u516c\u5678\u7684\u6c34\u62ac\u5347 1000 \u516c\u5c3a\u3002\u00a0\u21a9
\u92f0\u96fb\u6c60\u662f\u4e00\u6b21\u6027\u96fb\u6c60\uff0c\u76f8\u5c0d\u800c\u8a00\u7684\u92f0\u96e2\u5b50\u96fb\u6c60\u5247\u662f\u53ef\u5145\u96fb\u96fb\u6c60\u3002\u00a0\u21a9
\u6838\u529b\u5728\u5169\u500b\u8cea\u5b50\u76f8\u8ddd 1fm \uff08\u98db\u7c73\uff0c\u7b49\u65bc \\(10^{-15}\\) \u7c73\uff09\u4e0b\u6703\u6210\u70ba\u675f\u7e1b\u9019\u5169\u500b\u8cea\u5b50\u7684\u529b\u91cf\uff0c\u4f46\u5728\u8ddd\u96e2\u5c0f\u65bc 0.7fm \u6642\u537b\u6703\u6210\u70ba\u65a5\u529b\uff0c\u6545\u800c\u5f62\u5851\u4e00\u500b\u539f\u5b50\u6838\u61c9\u8a72\u6709\u7684\u7269\u7406\u5c3a\u5bf8\u3002\u503c\u5f97\u6ce8\u610f\u7684\u662f\uff0c\u4e00\u500b\u8cea\u5b50\u6216\u4e2d\u5b50\u7684\u534a\u5f91\u5927\u7d04\u662f 0.85fm \u5de6\u53f3\uff0c\u6545\u800c\u53ef\u4ee5\u6839\u64da\u5176\u64c1\u6709\u7684\u8cea\u5b50\u548c\u539f\u5b50\u6578\u91cf\u4f86\u63a8\u8ad6\u4e00\u500b\u539f\u5b50\u6838\u7684\u5927\u81f4\u5927\u5c0f\u3002\u76f8\u5c0d\u800c\u8a00\uff0c\u4e00\u500b\u539f\u5b50\u7684\u5927\u5c0f\u537b\u662f\u4ee5\u57c3\uff08\u7b49\u65bc \\(10^{-10}\\) \u7c73\uff09\u70ba\u55ae\u4f4d\uff0c\u6545\u800c\u53ef\u4ee5\u5ffd\u7565\u539f\u5b50\u6838\u5916\u90e8\u7684\u96fb\u5b50\u5c0d\u5176\u7684\u96fb\u78c1\u529b\u3002
\u6838\u529b\u662f\u4e00\u7a2e\u5f37\u4f5c\u7528\u529b\uff08strong force\uff09\u4e0b\u7684\u7522\u7269\u3002\u5f37\u4f5c\u7528\u529b\u5728\u7d04 0.8fm \u8ddd\u96e2\u4e0b\u6703\u7528\u4f86\u675f\u7e1b\u8cea\u5b50\u5167\u7684\u57ae\u514b\u7fa4\uff0c\u4e26\u56e0\u800c\u6574\u5408\u6210\u4e00\u500b\u8cea\u5b50\u6216\u4e2d\u5b50\uff08\u9019\u5169\u8005\u90fd\u662f\u4e00\u7a2e\u91cd\u5b50\uff0c\u4e09\u500b\u57ae\u514b\u7d44\u6210\u7684\u500b\u9ad4\u90fd\u53eb\u505a\u91cd\u5b50\uff09\u3002\u8cea\u5b50\u4e2d\u7684\u57ae\u514b\u548c\u57ae\u514b\u4e4b\u9593\u662f\u900f\u904e\u50b3\u905e\u81a0\u5b50\u4f86\u7dad\u6301\u5f37\u4f5c\u7528\u529b\uff0c\u800c\u6210\u7fa4\u7684\u57ae\u514b\u6703\u76f8\u4e92\u62b5\u92b7\u5f7c\u6b64\u4e4b\u9593\u56e0\u70ba\u81a0\u5b50\u800c\u751f\u6210\u7684\u5f35\u529b\uff0c\u6545\u800c\u5f62\u6210\u7a69\u5b9a\u7684\u4f5c\u7528\u529b\u3002\u4f46\u6709\u6642\u76f8\u6d88\u7684\u81a0\u5b50\u6703\u6709\u6b98\u9918\u7684\u91cf\u8dd1\u51fa\u91cd\u5b50\uff08residual strong force\uff09\uff0c\u4e26\u548c\u5176\u4ed6\u91cd\u5b50\u5f62\u6210\u4e00\u7a2e\u985e\u4f3c\u65bc\u5f37\u4f5c\u7528\u529b\u7684\u80fd\u91cf\uff0c\u9019\u5c31\u662f\u6240\u8b02\u7684\u6838\u529b\uff08\u53ef\u4ee5\u900f\u904e\u8cbb\u66fc\u5716\u4f86\u66b8\u89e3\u9019\u4e4b\u9593\u7684\u81a0\u5b50\u4ea4\u6d41\u72c0\u6cc1\uff09\u3002\u9019\u4e5f\u89e3\u91cb\u70ba\u4ec0\u9ebc\u5f37\u529b\u660e\u660e\u6703\u96a8\u8457\u8ddd\u96e2\u7684\u589e\u52a0\u800c\u8b8a\u5f37\uff0c\u4f46\u6838\u529b\u537b\u4e0d\u6703\u3002\u9019\u540c\u6642\u4e5f\u9020\u6210\u5728\u81ea\u7136\u754c\u4e2d\u5927\u7684\u539f\u5b50\uff08\u6bd4\u925b\u9084\u91cd\u7684\u539f\u5b50\uff09\u90fd\u662f\u4e0d\u7a69\u5b9a\u7684\uff0c\u56e0\u70ba\u539f\u5b50\u6838\u7684\u5927\u5c0f\u88ab\u62c9\u5927\u4e86\uff0c\u6838\u529b\u964d\u4f4e\u5f97\u5f88\u5feb\u4f46\u96fb\u78c1\u529b\u537b\u4e0d\u5f88\u6162\uff0c\u6545\u800c\u5176\u4e2d\u7684\u6838\u529b\u7121\u6cd5\u7a69\u5b9a\u652f\u6490\u539f\u5b50\u6838\u3002
eV
\u96fb\u5b50\u4f0f\u7279\uff08Electron Volt\uff09\u662f\u6307\u4e00\u5eab\u502b\u7684\u96fb\u5b50\u5728\u771f\u7a7a\u4e2d\u7d93\u904e\u4e00\u4f0f\u7279\u7684\u96fb\u4f4d\u5dee\u5f8c\u5f97\u5230\u7684\u52d5\u80fd\u3002\u524d\u9762\u63d0\u5230\u7684\u7126\u8033\u5728\u539f\u5b50\u91cf\u7d1a\u7684\u5834\u57df\u6703\u986f\u5f97\u904e\u5927\uff0c\u4f8b\u5982\u6838\u5206\u88c2\u9700\u8981\u7d66\u4e88\u4e2d\u5b50\u7684\u80fd\u91cf\u7d04\u70ba \\(10^{-13}\\) \u7126\u8033\uff0c\u4f46\u662f\u63db\u9001\u6210\u96fb\u5b50\u4f0f\u7279\u5247\u7d04\u70ba \\(10^{6}\\) eV\uff0c\u5c0d\u61c9\u800c\u8a00\uff0c\u4e00\u96fb\u5b50\u4f0f\u7279\u7d04\u70ba \\(1.6\\times 10^{-19}\\) \u7126\u8033\u3002
\u4e0d\u53ea\u662f\u80fd\u91cf\uff0c\u900f\u904e\u8cea\u80fd\u516c\u5f0f\u548c\u6ce2\u8332\u66fc\u5e38\u6578\uff0c\u6211\u5011\u53ef\u4ee5\u628a\u8cea\u91cf\u548c\u6eab\u5ea6\u7684\u55ae\u4f4d\u5206\u5225\u8f49\u63db\u6210\u96fb\u5b50\u4f0f\u7279\uff0c1eV \u7d04\u70ba \\(1.8\\times 10^{-36}\\) kg \u548c \\(10^{4}\\) K\u3002\u4e4b\u6240\u4ee5\u6eab\u5ea6\u53ef\u4ee5\u8f49\u63db\u6210\u80fd\u91cf\uff0c\u5c31\u662f\u56e0\u70ba\u6eab\u5ea6\u4e0a\u5347\u5f8c\uff0c\u539f\u5b50\u7684\u52d5\u80fd\u6703\u4ee5\u9418\u578b\u5206\u4f48\u7684\u539f\u5247\u4e0b\uff0c\u63d0\u9ad8\u5e73\u5747\u7684\u52d5\u80fd\uff0c\u53cd\u904e\u4f86\u8aaa\uff0c\u7576\u6709\u4e86\u74b0\u5883\u4e2d\u5206\u5b50\u7684\u5e73\u5747\u52d5\u80fd\uff0c\u5c31\u53ef\u4ee5\u63db\u6210\u6eab\u5ea6\u3002
"},{"location":"feedback/physics/","title":"\u91cf\u5b50\u7684\u4e16\u754c","text":"TBD
\u76ee\u524d\u89c0\u6e2c\u5230\u7684\u5b87\u5b99\u4e2d\u6709\u6578\u5343\u5104\u9846\u661f\u661f\uff0c\u4e14\u6211\u5011\u731c\u60f3\u6574\u500b\u5b87\u5b99\u53ef\u80fd\u5df2\u6709\u4e00\u767e\u591a\u5104\u5e74\u7684\u58fd\u547d\u3002 \u55ae\u55ae\u5728\u592a\u967d\u7cfb\u4e2d\uff0c\u5c31\u6709\u6578\u767e\u842c\u9846\u6f02\u6d41\u5de8\u77f3\u8db3\u4ee5\u6bc0\u6ec5\u5730\u7403\u3002 \u9019\u4e9b\u767c\u73fe\uff0c\u90fd\u662f\u5929\u6587\u5b78\u5bb6\u3001\u5b87\u822a\u54e1\u3001\u7269\u7406\u5b78\u5bb6\u7b49\u7b49\u773e\u591a\u9818\u57df\u7684\u4eba\u5011\u4e00\u8d77\u642d\u5efa\u51fa\u4f86\u7684\u3002 \u554f\u984c\u662f\uff0c\u6211\u5011\u600e\u9ebc\u77e5\u9053\u9019\u4e9b\u6771\u897f\u7684\uff1f
\u5929\u6587\u5b78\u6709\u4ec0\u9ebc\u7528\uff1f\u9019\u662f\u6709\u4e00\u6b21\u5728\u5bb6\u770b\u96fb\u8996\u6642\uff0c\u6211\u5abd\u554f\u6211\u7684\u554f\u984c\uff0c\u6211\u60f3\u9019\u4e5f\u662f\u5f88\u591a\u4eba\u5fc3\u4e2d\u90fd\u6709\u7684\u554f\u984c\u3002 \u5176\u5be6\u79d1\u5b78\u7a81\u7834\u548c\u65e5\u5e38\u79d1\u6280\u606f\u606f\u76f8\u95dc\uff0c\u4f8b\u5982\uff1a
\u8072\u660e\uff1a\u672c\u7bc7\u662f\u4ee5\u5fc3\u5f97\u5f62\u5f0f\u64b0\u5beb\uff0c\u53d7\u60e0\u65bc\u6210\u529f\u5927\u5b78\u7684\u5929\u6587\u5b78\u5be6\u9a57\u5ba4\u548c\u611b\u4e01\u5821\u5927\u5b78\u7684\u8ab2\u7a0b AstroTech\u3002
"},{"location":"feedback/physics/astronomy/#\u6f14\u9032","title":"\u6f14\u9032","text":"\u6211\u5011\u7e3d\u662f\u80fd\u5f9e\u6b77\u53f2\u4e2d\u5b78\u5230\u4e00\u4e9b\u6771\u897f\uff0c\u56e0\u6b64\u5728\u958b\u59cb\u8ac7\u65b0\u6771\u897f\u4e4b\u524d\uff0c\u5148\u4f86\u7c21\u55ae\u56de\u9867\u4e00\u4e0b\u6574\u500b\u5929\u6587\u5b78\u7684\u516d\u500b\u91cd\u8981\u6f14\u9032\uff1a
\u5728\u89c0\u6e2c\u5929\u6587\u5b78\u4e0a\uff0c\u6211\u5011\u4e5f\u6709\u5f88\u591a\u56f0\u96e3\u9700\u8981\u9762\u5c0d\uff1a
\u5728 Milky Way \u958b\u653e\u7684\u5730\u5716\u4e2d\u6211\u5011\u53ef\u4ee5\u770b\u5230\u5b83\u5982\u4f55\u900f\u904e\u591a\u5f35\u7167\u7247\uff0c\u6574\u5408\u6210\u4e00\u500b\u5927\u7684\u5716\u7247\u3002 \u4e3b\u756b\u9762\u7684\u5716\u50cf\u53ea\u662f \u53f3\u4e0a\u89d2\u5927\u5730\u5716 \u4e2d\u7684\u5176\u4e2d\u4e00\u584a\uff0c \u800c\u9019\u500b\u5927\u5730\u5716\u53c8\u53ea\u662f\u5929\u7a7a\u4e2d\u7684\u4e00\u5c0f\u584a\u800c\u5df2\uff0c\u5982\u4e0b\u5716\u6240\u793a\u3002
\u800c\u9019\u4e00\u5f35\u5f35\u6e05\u6670\u7684\u5f71\u50cf\u53ef\u80fd\u662f\u5f9e\u5730\u7403\u4e5f\u53ef\u80fd\u662f\u5f9e\u5b87\u5b99\u4e2d\u62cd\u651d\u51fa\u4f86\u7684\u7167\u7247\uff0c\u70ba\u4e86\u5f97\u5230\u597d\u7684\u7167\u7247\uff0c\u6211\u5011\u81f3\u5c11\u8981\u6709\u9019\u4e9b\u8981\u6c42\uff1a
\u70ba\u4e86\u6536\u96c6\u66f4\u591a\u5149\u7dda\uff0c\u6211\u5011\u6703\u628a\u671b\u9060\u93e1\u505a\u5f97\u66f4\u5927\uff0c\u5176\u4e2d\u53c8\u5206\u6210\u5169\u7a2e\u671b\u9060\u93e1\u53cd\u5c04\u548c\u6298\u5c04\uff1a
\u4e00\u822c\u4f86\u8aaa\uff0c\u5728\u5927\u578b\u7684\u671b\u9060\u93e1\u4e2d\u6211\u5011\u90fd\u4f7f\u7528\u53cd\u5c04\u7684\u65b9\u5f0f\u3002 \u56e0\u70ba\u5982\u679c\u7528\u6298\u5c04\uff0c\u70ba\u4e86\u8b93\u6210\u50cf\u7d50\u679c\u8b8a\u66f4\u5927\uff0c \u6211\u5011\u9700\u8981\u8b93\u7126\u8ddd\u66f4\u9577\uff08\u6240\u4ee5\u4f60\u5728\u4e2d\u4e16\u7d00\u770b\u5230\u7684\u671b\u9060\u93e1\u4e2d\u90fd\u6703\u5f88\u9577\uff09\uff0c \u9032\u800c\u5c0e\u81f4\u4e2d\u9593\u7684\u900f\u93e1\u8b8a\u5f97\u5f88\u539a\u3002
\u7136\u800c\u53cd\u5c04\u671b\u9060\u93e1\u9020\u50f9\u4e0d\u83f2\uff0c\u5169\u500d\u5927\u7684\u671b\u9060\u93e1\u5176\u6210\u672c\u6703\u56e0\u70ba\u5de5\u7a0b\u7b49\u7b49\u56e0\u7d20\u4e0a\u5347\u5230\u7d04\u516b\u500d\u5de6\u53f3\uff08\u4e09\u6b21\u65b9\u6210\u9577\uff09\u3002
\u7e3d\u800c\u8a00\u4e4b\uff0c\u8981\u6536\u96c6\u5fae\u5f31\u7684\u5149\u9ad4\u6642\uff0c\u9700\u8981\u66f4\u5927\u7684\uff08\u53cd\u5c04\uff09\u671b\u9060\u93e1\u3002
"},{"location":"feedback/physics/astronomy/#\u92b3\u5229\u5ea6","title":"\u92b3\u5229\u5ea6","text":"\u6703\u964d\u4f4e\u92b3\u5229\u5ea6\u7684\u539f\u56e0\u5927\u81f4\u6709\u4e09\u500b\uff1a
\u7e5e\u5c04\u662f\u5149\u7dda\u5929\u751f\u7684\u7279\u6027\uff0c\u5404\u500b\u89d2\u5ea6\u9032\u4f86\u7684\u5149\u7dda\u6703\u5e72\u64fe\u6700\u7d42\u7684\u6210\u50cf\u3002
Wikimedia Commons under the CCA license.
\u6839\u64da\u7269\u7406\u7279\u6027\uff0c\u7126\u8ddd\u8d8a\u77ed\u7684\u671b\u9060\u93e1\uff0c\u9019\u7a2e\u6548\u61c9\u5c0d\u6210\u50cf\u7684\u5f71\u97ff\u6703\u8d8a\u56b4\u91cd\u3002 \u4ee5\u4eba\u7684\u773c\u775b\u70ba\u4f8b\uff0c\u7e5e\u5c04\u7684\u5e72\u64fe\u6703\u8b93\u4eba\u773c\u89c0\u5bdf\u5929\u9ad4\u7684\u6975\u9650\u9054\u5230\u7d04 25 \u5f27\u79d2\u3002
"},{"location":"feedback/physics/astronomy/#\u5927\u6c23\u5e72\u64fe","title":"\u5927\u6c23\u5e72\u64fe","text":"\u5149\u7dda\u5728\u9032\u5165\u5730\u8868\u524d\u5c31\u6703\u56e0\u70ba\u5927\u6c23\u7684\u5e72\u64fe\u800c\u6643\u52d5\uff1a
Wikimedia Commons under the CCA license.
\u9019\u6548\u679c\u5728\u8d8a\u9760\u8fd1\u5730\u8868\u8d8a\u56b4\u91cd\uff0c\u901a\u5e38\u9ad8\u5c71\u4e0a\u7684\u5e72\u64fe\u7a0b\u5ea6\u7d04\u70ba 1 \u5f27\u79d2\u3002\u6709\u5169\u7a2e\u65b9\u5f0f\u89e3\u6c7a\uff1a
\u6bcf\u500b\u671b\u9060\u93e1\u8a2d\u8a08\u6642\uff0c\u6703\u70ba\u4e86\u5404\u7a2e\u56e0\u7d20\u53bb\u59a5\u5354\u92b3\u5229\u5ea6\u3002 \u4f8b\u5982\u4eba\u7684\u773c\u775b\u5c31\u6703\u53d7\u5230\u7403\u9762\u76f8\u5dee\u7684\u5f71\u97ff\u3002
\u53c8\u4f8b\u5982\u54c8\u4f2f\u671b\u773c\u93e1\u767c\u5c04\u5230\u592a\u7a7a\u4e4b\u521d\uff0c\u4ed6\u7684\u93e1\u5b50\u548c\u7406\u8ad6\u4e0a\u6709\u5927\u7d04 1 \u6beb\u7c73\u7684\u5dee\u8ddd\uff0c\u9032\u800c\u9020\u6210\u6210\u50cf\u7684\u8aa4\u5dee\uff0c \u8a73\u898b\u592a\u7a7a\u4efb\u52d9\u7de8\u865f STS-61 \u7684\u884c\u52d5\u3002
Wikimedia Commons under the CCA license.
\u6700\u8fd1\uff082022\uff09\uff0c\u97cb\u4f2f\u671b\u9060\u93e1\u5c31\u53d7\u5230\u8edf\u9ad4\u7684\u969c\u7919\uff0c\u7121\u6cd5\u6b63\u5e38\u904b\u4f5c\u3002
"},{"location":"feedback/physics/astronomy/#\u6ce2\u9577","title":"\u6ce2\u9577","text":"\u900f\u904e \u8d6b\u7f85\u5716\uff08H-R diagram\uff09\u6211\u5011\u53ef\u4ee5\u900f\u904e\u4eae\u5ea6\u548c\u984f\u8272\u5340\u5206\u4e0d\u540c\u661f\u9ad4\u3002 X \u8ef8\u7531\u5de6\u81f3\u53f3\u70ba\u85cd\u81f3\u7d05\uff1bY \u8ef8\u7531\u4e0b\u81f3\u4e0a\u70ba\u6697\u81f3\u4eae\uff0c \u5176\u4e2d\u592a\u967d\u4f4d\u65bc\u4e2d\u9593\u504f\u5de6\u7684\u4f4d\u7f6e\uff08Luminosity = 1, Temperature = 5778K\uff09\u3002
Wikimedia Commons under the CCA license.
\u4f46\u554f\u984c\u662f\u6211\u5011\u600e\u9ebc\u53d6\u5f97\u8a72\u661f\u9ad4\u7684\u984f\u8272\u5462\uff1f \u5728\u6210\u50cf\u524d\uff0c\u6211\u5011\u5728 CCD \u524d\u9762\u88dd\u4e0a\u6ffe\u6ce2\u5668\uff08\u985e\u4f3c\u900f\u660e\u8272\u7d19\uff09\uff0c \u53ea\u8b93\u7279\u5b9a\u984f\u8272\u7684\u5149\u53ef\u4ee5\u6253\u9032\u611f\u6e2c\u5668\uff0c\u9019\u6a23\u5c31\u53ef\u4ee5\u6536\u96c6\u5230\u7279\u5b9a\u984f\u8272\u7684\u6210\u50cf\uff08\u4f8b\u5982\u85cd\u8272\uff09\u3002
\u53cd\u8986\u9019\u7a2e\u904e\u7a0b\uff0c\u5c31\u80fd\u53d6\u5f97\u8a72\u661f\u9ad4\u4e0d\u540c\u984f\u8272\u7684\u5149\u4eae\u7a0b\u5ea6\u3002 \u6700\u5f8c\u6574\u5408\u4e26\u6bd4\u8f03\u9019\u500b\u661f\u9ad4\u7684\u4e0d\u540c\u984f\u8272\uff08\u901a\u5e38\u662f\u85cd\u3001\u7d05\u3001\u9ec3\uff09\u7684\u6bd4\u4f8b\uff0c \u4f86\u5f97\u77e5\u8a72\u661f\u9ad4\u7684\u984f\u8272\u3001\u6eab\u5ea6\u7b49\u7269\u7406\u6027\u8cea\uff0c\u8a73\u898b\u5149\u8b5c\u5716\u3002
"},{"location":"feedback/physics/astronomy/#\u592a\u7a7a\u671b\u9060\u93e1","title":"\u592a\u7a7a\u671b\u9060\u93e1","text":"\u5982\u679c\u6211\u5011\u60f3\u8981\u4e86\u89e3\u661f\u9ad4\u7684\u66f4\u591a\u7d30\u7bc0\uff0c\u6211\u5011\u5c31\u53ea\u80fd\u4e0a\u592a\u7a7a\u5efa\u7acb\u671b\u9060\u93e1\u3002 \u5f88\u591a\u5de5\u4f5c\u5982\u679c\u5728\u5730\u4e0a\u505a\uff0c\u6703\u5f88\u7c21\u55ae\uff0c\u53ef\u662f\u4e00\u65e6\u5230\u4e86\u592a\u7a7a\uff0c\u5c31\u9700\u8981\u8655\u7406\u4e00\u4e9b\u68d8\u624b\u554f\u984c\uff1a
\u6211\u5011\u9700\u8981\u5f88\u591a\u8a2d\u65bd\u624d\u80fd\u767c\u5c04\u592a\u7a7a\u8239\uff1a \u63a7\u5236\u4e2d\u5fc3\u3001\u6e2c\u8a66\u6a5f\u69cb\u3001\u8edf\u786c\u9ad4\u7b49\u7b49\u3002 \u6700\u91cd\u8981\u7684\u662f\uff0c\u9019\u4e9b\u6771\u897f\u7531\u65bc\u7dad\u904b\u5efa\u8a2d\u6210\u672c\u6975\u9ad8\uff0c\u90fd\u6703\u9700\u8981\u653f\u5e9c\u652f\u6301\uff0c \u63db\u53e5\u8a71\u8aaa\uff0c\u4f60\u6703\u53d7\u5230\u56b4\u683c\u7684\u9810\u7b97\u76e3\u7763\u3002
"},{"location":"feedback/physics/astronomy/#\u80fd\u91cf","title":"\u80fd\u91cf","text":"\u5728\u5916\u592a\u7a7a\u4f60\u6c92\u6709\u96fb\u6e90\u7dda\u53ef\u4ee5\u63a5\uff0c\u4f60\u9700\u8981\u81ea\u7522\u80fd\u6e90\u3002 \u901a\u5e38\u662f\u4f7f\u7528\u5f88\u5927\u7684\u592a\u967d\u80fd\u677f\u4f86\u6355\u6349\u592a\u967d\u80fd\uff0c\u5f88\u5927\u7684\u592a\u967d\u80fd\u677f\u4ee3\u8868\u5c07\u9762\u81e8\u5230\u4e0d\u540c\u7684\u5de5\u7a0b\u6280\u8853\u548c\u77e5\u8b58\u3002
"},{"location":"feedback/physics/astronomy/#\u7a69\u5b9a","title":"\u7a69\u5b9a","text":"\u82e5\u9700\u8981\u592a\u7a7a\u671b\u9060\u93e1\u7cbe\u6e96\u63a2\u6e2c\u67d0\u500b\u661f\u9ad4\uff0c\u52e2\u5fc5\u9700\u8981\u7a69\u5b9a\u5730\u5c0d\u6e96\u76ee\u6a19\uff0c\u6709\u5e7e\u7a2e\u65b9\u5f0f\uff1a
\u70ba\u4e86\u5c0d\u6e96\u67d0\u500b\u76ee\u6a19\uff0c\u6211\u5011\u9700\u8981\u8b93\u671b\u9060\u93e1\u77e5\u9053\u81ea\u5df1\u5728\u54ea\u88e1\uff0c\u4e26\u627e\u51fa\u8a72\u76ee\u6a19\u7684\u65b9\u5411\uff1a
\u5730\u78c1\u6703\u628a\u592a\u967d\u78c1\u66b4\u532f\u96c6\u5728\u8303\u827e\u502b\u8f3b\u5c04\u5e36\uff08Van Allen radiation belt\uff09\u4e0a\uff0c \u6240\u4ee5\u9700\u8981\u8b93\u592a\u7a7a\u8239\u79fb\u52d5\u5230\u8a72\u8f3b\u5c04\u5e36\u4e4b\u5916\u7684\u5730\u65b9\u3002
\u5728\u5916\u592a\u7a7a\u6709\u7121\u7167\u5c04\u5230\u592a\u967d\uff0c\u6703\u8b93\u6eab\u5ea6\u5dee\u8ddd\u5f88\u5927\u3002 \u70ba\u4e86\u7dad\u6301\u671b\u9060\u93e1\u7684\u7a69\u5b9a\uff0c\u6211\u5011\u6703\u9700\u8981\u906e\u967d\u677f\uff0c \u4f8b\u5982\u97cb\u4f2f\u671b\u9060\u93e1\u7528\u4e86\u4e00\u500b\u7db2\u7403\u5834\u5927\u5c0f\u7684\u906e\u967d\u677f
\u9019\u88e1\u6709\u4e00\u500b\u8981\u6ce8\u610f\u7684\u5c0f\u77e5\u8b58\uff1a\u62c9\u683c\u6717\u65e5\u9ede\u3002 \u5f88\u591a\u592a\u7a7a\u8a2d\u5099\u90fd\u6703\u8eb2\u5728\u5730\u7403\u5c0d\u61c9\u592a\u967d\u7684\u6b63\u5f8c\u65b9\uff0c\u4e26\u5229\u7528\u5730\u7403\u4f86\u906e\u967d\uff0c \u9019\u500b\u4f4d\u7f6e\u7a31\u70ba\u62c9\u683c\u6717\u65e5\u9ede \uff08\u4e8b\u5be6\u4e0a\u6709\u56db\u500b\u4e0d\u540c\u529f\u80fd\u7684\u9ede\uff0c\u4f8b\u5982\u5728\u5730\u7403\u548c\u592a\u967d\u7684\u4e2d\u9593\u7684\u9ede\uff0c\u80fd\u8b93\u8a2d\u65bd\u8655\u65bc\u5169\u7a2e\u91cd\u529b\u7684\u5e73\u8861\u9ede\uff09\u3002
"},{"location":"feedback/physics/astronomy/#\u788e\u77f3","title":"\u788e\u77f3","text":"\u592a\u7a7a\u4e2d\u7684\u7269\u9ad4\u5e7e\u4e4e\u6c92\u6709\u7a7a\u6c23\u963b\u529b\uff0c\u6240\u4ee5\u53ef\u80fd\u6703\u4ee5\u6bcf\u79d2\u6578\u5341\u516c\u91cc\u7684\u901f\u5ea6\u671d\u671b\u9060\u93e1\u649e\u64ca\u3002
Wikimedia Commons under the CCA license.
\u9019\u985e\u65b0\u805e\u5f88\u591a\uff0c\u4f8b\u5982\uff1a
\u592a\u7a7a\u671b\u9060\u93e1\u6c92\u8fa6\u6cd5\u4f7f\u7528 Wi-Fi\uff0c\u4f46\u53ef\u4ee5\u900f\u904e\u96fb\u78c1\u675f\u6253\u51fa\u4e8c\u9032\u4f4d\u8cc7\u6599\u3002 \u70ba\u4e86\u7dad\u6301\u50b3\u8f38\u7684\u7a69\u5b9a\u6027\uff0c\u6703\u8b93\u671b\u9060\u93e1\u5f85\u5728\u96e2\u5730\u7403\u9060\u4e00\u9ede\u7684\u5730\u65b9\uff0c\u9019\u6a23\u7e5e\u5730\u9031\u671f\u624d\u6703\u9577\uff0c \u63db\u53e5\u8a71\u8aaa\uff0c\u624d\u80fd\u5f85\u5728\u540c\u4e00\u500b\u5730\u65b9\u4e45\u4e00\u9ede\uff0c\u8b93\u8cc7\u6599\u50b3\u8f38\u7a69\u5b9a\u4e00\u9ede\u3002
\u6211\u5011\u4e5f\u53ef\u4ee5\u628a\u671b\u9060\u93e1\u904b\u884c\u5230 \u5730\u7403\u975c\u6b62\u8ecc\u9053\uff08Geostationary orbit\uff09\uff0c\u5728\u90a3\u88e1\u548c\u5730\u7403\u81ea\u8f49\u540c\u6b65\uff0c \u5c31\u53ef\u4ee5\u5f85\u5728\u76f8\u5c0d\u65bc\u5730\u8868\u4e0d\u6703\u79fb\u52d5\u7684\u4f4d\u7f6e\u9054\u5230\u7a69\u5b9a\u7684\u8cc7\u6599\u50b3\u8f38\u3002
"},{"location":"feedback/physics/astronomy/#\u592a\u7a7a\u671b\u9060\u93e1\u7684\u512a\u7f3a\u9ede","title":"\u592a\u7a7a\u671b\u9060\u93e1\u7684\u512a\u7f3a\u9ede","text":"\u7e3d\u800c\u8a00\u4e4b\uff0c\u70ba\u4e86\u89e3\u6c7a\u4e0a\u8ff0\u554f\u984c\uff0c\u505a\u4e00\u500b\u592a\u7a7a\u671b\u9060\u93e1\u6703\u9700\u8981\u5f88\u591a\u5f88\u591a\u5f88\u591a\u5f88\u591a\u7684\u9322\u3002
\u9019\u9084\u4e0d\u7b97\u4e0a\u90a3\u4e9b\u6602\u8cb4\u53c8\u8017\u6642\u7684\u7dad\u4fee\u4efb\u52d9\u3002
Wikimedia Commons under the CCA license.
\u96d6\u7136\u592a\u7a7a\u671b\u9060\u93e1\u6602\u8cb4\uff0c\u537b\u53ef\u4ee5\u907f\u514d\u4ee5\u4e0b\u7684\u5f71\u97ff\uff1a
\u53f3\u908a\u7684\u5716\u53ef\u4ee5\u770b\u5230\uff1a
\u63a5\u8457\u770b\u5de6\u908a\u7684\u5716\uff1a
\u5728\u4e0a\u4e00\u6bb5\u4e2d\uff0c\u4ecb\u7d39\u4e86 \u8d6b\u7f85\u5716 \u4e2d\u661f\u9ad4\u7684\u5206\u4f48\uff0c \u4f60\u6703\u6ce8\u610f\u5230\u5176\u6709\u4e00\u500b\u4e3b\u8981\u5206\u4f48\u5e36\u5f9e\u53f3\u4e0b\u81f3\u5de6\u4e0a\uff0c\u6211\u5011\u7a31\u5176\u70ba \u4e3b\u5e8f\u5e36\uff08Major sequence\uff09\u3002 \u9019\u4ee3\u8868\u5927\u90e8\u5206\u661f\u661f\u5728\u8d8a\u63a5\u8fd1\u85cd\u8272\uff08\u8d8a\u71b1\uff09\u5b83\u7684\u767c\u5149\u7a0b\u5ea6\u6703\u8d8a\u9ad8\uff0c\u70ba\u4ec0\u9ebc\uff1f
\u56e0\u70ba\u8d8a\u4eae\u7684\u661f\u661f\uff0c\u5b83\u6703\u71c3\u71d2\u8d8a\u591a\u7684\u71c3\u6599\uff08\u6838\u878d\u5408\u4e2d\u7684\u6c2b\u539f\u5b50\uff09\uff0c\u5176\u80fd\u9020\u6210\u7684\u6eab\u5ea6\u4e5f\u5c31\u8d8a\u9ad8\u3002 \u4f46\u662f\u70ba\u4ec0\u9ebc\u71c3\u71d2\u4e2d\u7684\u661f\u661f\u4e0d\u6703\u7206\u70b8\u5462\uff1f
\u9019\u662f\u56e0\u70ba\u661f\u9ad4\u4e0d\u53ea\u5728\u627f\u53d7\u71c3\u71d2\u6240\u9020\u6210\u7684\u5411\u5916\u58d3\u529b\uff0c\u540c\u6642\u4e5f\u9762\u5c0d\u8457\u91cd\u529b\u7684\u58d3\u7e2e\u3002 \u5728\u9019\u5169\u500b\u529b\u91cf\u7684\u5e73\u8861\u4e0b\uff0c\u661f\u661f\u7684\u5927\u5c0f\u5c31\u80fd\u5920\u7dad\u6301\u8457\uff0c\u4f8b\u5982\u73fe\u5728\u6211\u5011\u770b\u5230\u7684\u592a\u967d\u3002
\u6211\u5011\u900f\u904e\u89c0\u5bdf\u6838\u878d\u5408\u7684\u7522\u54c1\uff1a\u5fae\u4e2d\u5b50\uff0c\u4f86\u9a57\u8b49\u6211\u5011\u7684\u731c\u60f3\u3002
\u5728 \u4e3b\u5e8f\u5e36 \u4e4b\u4e0a\uff0c\u4e5f\u6709\u4e00\u7fa4\u5206\u5e03\u8f03\u70ba\u5bc6\u96c6\u7684\u5340\u57df\uff0c \u6211\u5011\u7a31\u5176\u70ba\u5de8\u661f\u5206\u652f\uff08Giant branch\uff09\uff0c\u5c31\u662f\u5e38\u807d\u5230\u7684\u7d05\u5de8\u661f\u7684\u6240\u5728\u4f4d\u7f6e\u3002
\u7d05\u5de8\u661f\u7684\u6210\u56e0\u662f\u661f\u661f\u7684\u71c3\u71d2\u539f\u6599\uff08\u6838\u878d\u5408\u4e2d\u7684\u6c2b\u539f\u5b50\uff09\u7528\u76e1\u5f8c\uff0c\u91cd\u529b\u6703\u6253\u8d0f\u9019\u5834\u62c9\u92f8\u6230\uff0c \u4e26\u958b\u59cb\u6536\u7e2e\u661f\u9ad4\u5167\u90e8\u3002 \u7576\u6536\u7e2e\u5230\u4e00\u5b9a\u7a0b\u5ea6\u5f8c\uff0c\u7531\u65bc\u5176\u6975\u9ad8\u6eab\u9ad8\u58d3\uff0c\u5e36\u52d5\u5468\u570d\u7684\u7269\u8cea\u9032\u884c\u65b0\u4e00\u6ce2\u7684\u6838\u878d\u5408\u53cd\u61c9 \uff08\u82e5\u661f\u9ad4\u904e\u65bc\u9f90\u5927\uff0c\u6536\u7e2e\u901f\u5ea6\u5feb\u5230\u4e0d\u8db3\u4ee5\u7522\u751f\u8db3\u5920\u7684\u529b\u5c0d\u6297\uff0c\u5c31\u6703\u5f62\u6210\u9ed1\u6d1e\uff09\u3002 \u9019\u500b\u53cd\u61c9\u6703\u52a0\u901f\u661f\u9ad4\u7684\u71c3\u71d2\uff0c\u6700\u5f8c\u958b\u59cb\u7a81\u7834\u91cd\u529b\u7684\u5e73\u8861\u5411\u5916\u64f4\u5f35\uff0c \u5f62\u6210\u7d05\u5de8\u661f\uff0c\u9019\u4e5f\u662f\u4e94\u5341\u5104\u5e74\u5f8c\uff0c\u6211\u5011\u7684\u592a\u967d\u53ef\u80fd\u6703\u9762\u81e8\u7684\u72c0\u614b\u3002
\u7d05\u5de8\u661f\u5728\u7206\u70b8\u524d\u5f8c\uff0c\u6703\u56e0\u70ba\u6975\u5ea6\u7684\u9ad8\u6eab\u548c\u9ad8\u58d3\uff0c\u751f\u6210\u8a31\u591a\u91cd\u7684\u5143\u7d20\uff0c\u5305\u62ec\u78b3\u3001\u6c27\u548c\u91d1\u5c6c\u3002 \u6700\u5f8c\u5674\u5c04\u51fa\u7684\u6c23\u9ad4\u548c\u7269\u8cea\uff0c\u53c8\u6703\u56e0\u70ba\u91cd\u529b\u548c\u96fb\u78c1\u529b\u5438\u5f15\uff0c\u6700\u7d42\u91cd\u65b0\u751f\u6210\u4e00\u500b\u65b0\u7684\u661f\u9ad4\u3002
\u54c8\u4f2f\u671b\u9060\u93e1\u62cd\u7684 Crab Nebula\u3002
\u54c8\u4f2f\u671b\u9060\u93e1\u62cd\u7684 Hourglass Nebula\u3002
Wikimedia Commons under the CCA license.
"},{"location":"feedback/physics/astronomy/#\u9ed1\u6d1e","title":"\u9ed1\u6d1e","text":"\u6709\u4e86\u661f\u9ad4\u7684\u77e5\u8b58\u548c\u592a\u7a7a\u671b\u9060\u93e1\u7684\u5efa\u9020\uff0c\u6211\u5011\u7d42\u65bc\u53ef\u4ee5\u8aaa\u660e\u5982\u4f55\u8a08\u7b97\u9ed1\u6d1e\u7684\u57fa\u672c\u8cc7\u6599\u4e86\u3002
\u7576\u661f\u9ad4\u904e\u65bc\u9f90\u5927\uff0c\u5176\u56e0\u70ba\u91cd\u529b\u800c\u6536\u7e2e\u7684\u529b\u5927\u5230\u6c92\u6709\u4efb\u4f55\u529b\u80fd\u6709\u6548\u5c0d\u6297\u5176\u5b58\u5728\u6642\uff0c\u5c31\u6703\u5f62\u6210\u9ed1\u6d1e\u3002 \u9ed1\u6d1e\u5f62\u6210\u6642\uff0c\u5b83\u7684\u91cd\u529b\u6703\u5927\u5230\u5f71\u97ff\u4efb\u4f55\u9760\u8fd1\u4ed6\u7684\u7269\u9ad4\uff0c \u7576\u661f\u9ad4\u7d93\u904e\u9ed1\u6d1e\u4e26\u88ab\u5438\u5f15\u6642\uff08\u6709\u500b\u81e8\u754c\u9ede\uff09\uff0c\u8a72\u661f\u9ad4\u6703\u958b\u59cb\u88ab\u6495\u626f\u7834\u58de\uff08\u6f6e\u6c50\u7834\u58de\u4e8b\u4ef6\uff0ctidal disruption event\uff0cTDE\uff09\u3002 \u88ab\u6495\u626f\u51fa\u4f86\u7684\u7269\u8cea\u6703\u958b\u59cb\u7e5e\u8457\u9ed1\u6d1e\u8f49\uff0c\u8d8a\u7e5e\u8d8a\u5feb\uff0c\u6eab\u5ea6\u4e5f\u8ddf\u8457\u8d8a\u4f86\u8d8a\u9ad8\uff0c \u9019\u6642\uff0c\u5176\u91cb\u653e\u7684\u9ad8\u80fd\u96fb\u78c1\u6ce2\uff08\u4f8b\u5982 X\u5c04\u7dda\uff09\u5c31\u53ef\u4ee5\u88ab\u6355\u6349\uff0c\u9032\u800c\u89c0\u5bdf\u51fa\u9ed1\u6d1e\u7684\u5b58\u5728\u3002
\u6211\u5011\u5c31\u4f86\u8a66\u8457\u63a8\u7b97\u4e00\u4e0b \u5929\u9d5d\u5ea7X-1 \u9019\u500b\u6700\u5148\u88ab\u8a8d\u70ba\u662f\u9ed1\u6d1e\u7684\u661f\u9ad4\u7684\u91cd\u91cf\u548c\u5927\u5c0f\u5427\uff01
\u9996\u5148\u6211\u5011\u770b\u4e00\u4e0b\u5b83\u7684\u8cea\u91cf\u3002
\u6211\u5011\u53ef\u4ee5\u900f\u904e\u7e5e\u884c\u9ed1\u6d1e\u7684\u4e00\u500b\u85cd\u5de8\u661f\u4f86\u7c21\u55ae\u8a08\u7b97\u725b\u9813\u529b\u5b78\u4e26\u53d6\u5f97\u9ed1\u6d1e\u7684\u8cea\u91cf\u3002
\u5047\u8a2d\u9ed1\u6d1e\uff08\u8cea\u91cf \\(M\\)\uff09\u548c\u85cd\u5de8\u661f\uff08\u8cea\u91cf \\(m\\)\uff09\u6703\u56e0\u70ba\u91cd\u529b\u800c\u5f7c\u6b64\u5438\u5f15\uff0c\u5176\u529b\u6703\u7528\u4f86\u7576\u4f5c\u7e5e\u884c\u7684\u89d2\u901f\u5ea6\uff08v\uff09\uff1a
\\[\\begin{align*} F &= \\frac{GMm}{r^2} \\\\ &= \\frac{mv^2}{r} \\end{align*}\\]\u53e6\u5916\u6211\u5011\u4e5f\u77e5\u9053\u89d2\u901f\u5ea6\u7684\u8a08\u7b97\u516c\u5f0f\u70ba\uff1a
\\[\\begin{align*} v = \\frac{2\\pi r}{t} \\end{align*}\\]\u6574\u5408\u4e0a\u8ff0\u5169\u500b\u5f0f\u5b50\uff0c\u5c31\u53ef\u4ee5\u5f97\u5230\u8a72\u9ed1\u6d1e\u7684\u8cea\u91cf\u516c\u5f0f\uff1a
\\[\\begin{align*} M = \\frac{v^3t}{2\\pi G} \\end{align*}\\]\u628a\u5e38\u6578\u5e36\u9032\u53bb\u7b97\u5f8c\uff0c\u9ed1\u6d1e\u8cea\u91cf\u7d04\u70ba 16 \u500d\u7684\u592a\u967d\u8cea\u91cf\u3002 \u63a5\u8457\u6211\u5011\u4f86\u63a8\u7b97\u4e00\u4e0b\u5b83\u7684\u9ad4\u7a4d\u4e0a\u9650\u3002
\u7531\u65bc\u6211\u5011\u89c0\u5bdf\u5230\u90a3\u4e9b\u88ab\u9ed1\u6d1e\u6495\u626f\u51fa\u4f86\u7684\u7269\u8cea\u6240\u767c\u5c04\u51fa\u7684 X\u5c04\u7dda \u7684\u5f37\u5ea6\u6bcf\u79d2\u6703\u8b8a\u52d5\u7d04\u4e00\u767e\u6b21 \uff08\u4e00\u4e0b\u8b8a\u5f37\u4e00\u4e0b\u8b8a\u5f31\uff0c\u6bcf\u79d2\u91cd\u8907\u8457\u9019\u500b\u898f\u5f8b\u4e00\u767e\u6b21\uff09\uff0c \u9019\u5c31\u4ee3\u8868\u5468\u570d\u7684\u7269\u9ad4\u7e5e\u884c\u6642\u9593\u7d04\u70ba\u767e\u5206\u4e4b\u4e00\u79d2\u3002
\u5047\u8a2d\u5468\u570d\u7269\u9ad4\u7e5e\u884c\u901f\u5ea6\u7d04\u70ba\u5149\u901f\uff08\\(3 \\times 10^8m\\)\uff09\uff0c\u53ef\u5f97\u7e5e\u884c\u5468\u9577\u70ba\uff1a
\\[\\begin{align*} r &= vt \\\\ &= 3\\times 10^{8} \\times \\frac{1}{100} \\\\ &= 3\\times 10^{6}m \\\\ &= 3\\times 10^{3}km \\end{align*}\\]\u63db\u53e5\u8a71\u8aaa\uff0c\u5929\u9d5d\u5ea7X-1 \u5728\u50c5\u50c5\u7684 3000 \u516c\u91cc\u5167\u5c31\u88dd\u8457 16 \u9846\u592a\u967d\u7684\u8cea\u91cf\u3002
\u7576\u7269\u9ad4\u592a\u5927\uff0c\u4e14\u901f\u5ea6\u592a\u5feb\u6642\uff0c\u6211\u5011\u5c31\u9700\u8981\u72f9\u7fa9\u548c\u5ee3\u7fa9\u76f8\u5c0d\u8ad6\u4f86\u8a08\u7b97\u66f4\u7cbe\u6e96\u7684\u7d50\u679c\uff0c\u4f46\u9019\u908a\u5ffd\u7565\u3002 \u540c\u6a23\u7684\uff0c\u96d9\u661f\u904b\u884c\u7684\u8a08\u7b97\u4e5f\u6703\u6bd4\u4e0a\u8ff0\u7684\u9084\u8981\u8907\u96dc\u5f88\u591a\uff0c\u9019\u908a\u4e5f\u5ffd\u7565\u3002
\u4e4b\u6240\u4ee5\u6709\u8fa6\u6cd5\u5f97\u5230\u9019\u500b\u7d50\u679c\uff0c\u90fd\u662f\u56e0\u70ba\u6211\u5011\u6210\u529f\u5728\u5916\u592a\u7a7a\u88dd\u8a2d\u4e86\u671b\u9060\u93e1\uff0c\u4e26\u89c0\u5bdf X\u5c04\u7dda \u7684\u8b8a\u5316\u3002
"},{"location":"feedback/physics/astronomy/#\u611f\u6e2c\u5668","title":"\u611f\u6e2c\u5668","text":"\u611f\u6e2c\u5668\u66ff\u6211\u5011\u505a\u56db\u4ef6\u4e8b\uff1a
\u4ee5\u54c8\u4f2f\u8d85\u6df1\u7a7a\u8996\u5834\uff08Hubble eXtreme Deep Field, HXDF\uff09\u70ba\u4f8b\uff0c \u5b83\u4e4b\u6240\u4ee5\u80fd\u611f\u6e2c\u5b87\u5b99\u4e2d\uff08\u5c0d\u6211\u5011\u4f86\u8aaa\uff09\u6700\u6697\u6700\u9060\u7684\u661f\u7cfb\uff0c\u5c31\u662f\u7ad9\u5728\u539f\u5730\u66dd\u5149\u4e86 23 \u5929\u3002
Wikimedia Commons under the CCA license.
\u6642\u5149\u6a5f\u5668
\u7531\u65bc\u5149\u7dda\u50b3\u905e\u901f\u5ea6\u7684\u9650\u5236\uff0c\u6211\u5011\u770b\u5230\u90a3\u4e9b\u6700\u9060\u7684\u661f\u9ad4\uff0c\u5176\u5be6\u662f\u8a72\u661f\u9ad4\u65e9\u5e74\u7684\u6a23\u5b50\u3002
\u4f8b\u5982\u76ee\u524d\uff082022\uff09\u53ef\u89c0\u6e2c\u6700\u9060\u7684\u661f\u9ad4\u662f GN-z11\uff0c \u5b83\u8ddd\u96e2\u5730\u7403 134 \u5104\u5149\u5e74\uff0c \u63db\u53e5\u8a71\u8aaa\uff0c\u89c0\u5bdf\u5b83\u5c31\u53ef\u4ee5\u89c0\u5bdf\u51fa\u5927\u7206\u70b8\u56db\u5104\u5e74\u5f8c\u661f\u9ad4\u7684\u6a23\u5b50\u3002
\u6211\u5011\u5229\u7528\u9019\u7a2e\u7279\u6027\u4f86\u91d0\u6e05\u5b87\u5b99\u521d\u671f\u7684\u6a21\u6a23\u3002
"},{"location":"feedback/physics/astronomy/#ccd","title":"CCD","text":"1980 \u5e74\u4ee3\u767c\u660e\u7684 CCD \u548c\u50b3\u7d71\u7684\u611f\u5149\u5100\u5668\u6700\u4e3b\u8981\u7684\u4e0d\u540c\u5728\u65bc\u6578\u4f4d\u5316\u3002 \u9664\u6b64\u4e4b\u5916\uff0c\u5b83\u4ea6\u6709\u5f37\u5927\u7684\u611f\u5149\u80fd\u529b\u3002 \u4f8b\u5982\uff0c \u50b3\u7d71\u7684\u611f\u5149\u5e79\u677f\u80fd\u8655\u7406\u7d04 1% \u63a5\u6536\u5230\u7684\u5149\u7dda\uff0c \u4f46 CCD \u537b\u53ef\u4ee5\u8655\u7406\u5230 80%\u3002
"},{"location":"feedback/physics/astronomy/#\u4ed6\u600e\u9ebc\u904b\u4f5c\u7684","title":"\u4ed6\u600e\u9ebc\u904b\u4f5c\u7684\uff1f","text":"\u5149\u7dda\u7684\u80fd\u91cf\u548c\u5176\u983b\u7387\uff08\u6ce2\u9577\uff09\u6709\u95dc\uff0c\u8d8a\u9ad8\u983b\u7684\u5149\uff0c\u80fd\u91cf\u8d8a\u5f37\u3002 \u7576\u5149\u7dda\u64c1\u6709\u8db3\u5920\u9ad8\u7684\u80fd\u91cf\u6642\uff0c\u5c31\u53ef\u80fd\u8b93\u539f\u5b50\u88e1\u7684\u96fb\u5b50\u9032\u884c\u80fd\u91cf\u8e8d\u9077\u3002 \u96fb\u5b50\u9032\u884c\u80fd\u91cf\u8e8d\u9077\u5f8c\uff0c\u5c31\u6709\u53ef\u80fd\u5728\u5176\u4ed6\u9760\u8fd1\u7684\u539f\u5b50\u9032\u884c\u9077\u79fb\uff0c\u5982\u4e0b\u5716\u6240\u793a\u3002
\u80fd\u8b93\u7279\u5b9a\u7269\u8cea\u7684\u96fb\u5b50\u8e8d\u9077\u5230\u53ef\u4ee5\u50b3\u5c0e\u7684\u7a0b\u5ea6\u6642 \uff08\u8a72\u81e8\u754c\u9ede\u7a31\u70ba\u5c0e\u5e36\uff09\uff0c \u5c31\u53ef\u4ee5\u4f9d\u6b64\u4f86\u5224\u65b7\u8a72\u5149\u7dda\u7684\u983b\u7387\u3002 \u7576\u6301\u7e8c\u7167\u5c04\u96fb\u78c1\u6ce2\uff0c\u4e26\u7d2f\u7a4d\u8db3\u5920\u7684\u96fb\u5b50\u6642\uff0c \u5c31\u53ef\u4ee5\u628a\u9019\u4e9b\u96fb\u5b50\u6536\u96c6\u4e26\u8a08\u7b97\u6578\u91cf\uff0c\u6700\u7d42\u4f9d\u6b64\u4f86\u5224\u65b7\u5149\u7dda\u7684\u5f37\u5f31\u3002
\u64c1\u6709\u9019\u7a2e\u7279\u6027\u7684\u7269\u8cea\u9996\u9078\u5c31\u662f\u77fd\uff0c\u56e0\u70ba\u5b83\u5f88\u4fbf\u5b9c\u53c8\u5f88\u597d\u5370\u5237\u51fa\u96fb\u8def\u3002 \u4e5f\u56e0\u70ba\u5b83\u7684\u4fbf\u5229\u6027\uff0c\u6240\u4ee5\u64c1\u6709\u5f88\u591a\u65b9\u9762\u7684\u61c9\u7528\uff0c\u4e5f\u9032\u4e00\u6b65\u8b93\u66f4\u591a\u4eba\uff08\u975e\u5929\u6587\u5b78\u4e0a\uff09\u9032\u884c\u4e0d\u540c\u7684\u5be6\u9a57\u8207\u5617\u8a66\u3002 \u8d8a\u591a\u7684\u95dc\u6ce8\u5c31\u53c8\u9032\u4e00\u6b65\u7684\u63d0\u5347\u8a72\u7269\u8cea\u7684\u826f\u7387\u548c\u529f\u80fd\uff0c\u4e5f\u5c31\u91cd\u65b0\u56de\u994b\u7d66\u5929\u6587\u5b78\u7684\u9032\u5c55\u3002 \u9019\u4e5f\u56de\u5230\u6700\u4e00\u958b\u59cb\u7684\u554f\u984c\uff1a\u5929\u6587\u5b78\u6709\u4ec0\u9ebc\u7528\uff1f
"},{"location":"feedback/physics/astronomy/#\u8981\u600e\u9ebc\u6536\u96c6\u96fb\u5b50","title":"\u8981\u600e\u9ebc\u6536\u96c6\u96fb\u5b50\uff1f","text":"CCD \u662f\u7528 MOS \uff08Metal\u2013Oxide\u2013Semiconductor\uff09\u4f86\u6536\u96c6\u96fb\u5b50\u3002 \u5229\u7528\u5916\u90e8\u96fb\u58d3\uff08Metal\uff09\u8b93\u534a\u5c0e\u9ad4\uff08Semiconductor\uff09\u4e2d\u7684\u96fb\u5b50\u671d\u8457\u7279\u5b9a\u65b9\u5411\u524d\u9032\uff0c \u6700\u7d42\u6703\u6709\u500b\u7d55\u7de3\u9ad4\uff08Oxide\uff09\u64cb\u4f4f\u96fb\u5b50\uff0c\u4e26\u56f0\u4f4f\u4ed6\u3002
CCD \u4e2d\u7684\u6bcf\u4e00\u500b\u4f4d\u5143\u90fd\u662f\u4e00\u7d44 MOS\uff0c\u800c\u4e00\u500b\u4f4d\u5143\u7d04\u70ba \\(15\\mu m\\)\uff0c \u6240\u4ee5 6x6 \\(cm\\) \u7684 CCD \u5c31\u6709 4000x4000 \u500b\u4f4d\u5143\uff08\\(6cm / 15\\mu m = 4000\\)\uff09\u3002
"},{"location":"feedback/physics/astronomy/#\u8981\u600e\u9ebc\u8a08\u7b97\u96fb\u5b50","title":"\u8981\u600e\u9ebc\u8a08\u7b97\u96fb\u5b50\uff1f","text":"CCD \u6709\u5169\u7a2e\u4e3b\u6d41\u65b9\u5f0f\u4f86\u8a08\u7b97\u6536\u96c6\u5230\u7684\u96fb\u5b50\u6578\u91cf\uff0c \u4e00\u7a2e\u7a31\u70ba CMOS \u6216 Active Pixel Sensors \u7684\u65b9\u6cd5\u3002 \u5feb\u901f\u4f46\u6703\u6709\u96dc\u8a0a\uff0c\u9069\u5408\u7528\u5728\u4e00\u822c\u76f8\u6a5f\u3002
\u53e6\u4e00\u7a2e\u5247\u662f\u9069\u5408\u7528\u5728\u671b\u9060\u93e1\u4e0a\uff0c\u7a31\u70ba Charge Coupling \u7684\u65b9\u6cd5\u3002 \u900f\u904e\u5faa\u5e8f\uff08\u4ee5 6 \\(cm\\) \u7684 CCD \u4f86\u8aaa\uff0c\u6703\u6709\u56db\u5343\u5c64\uff09\u91cb\u653e\u96fb\u58d3\uff0c \u628a\u96fb\u5b50\u6162\u6162\u7d2f\u7a4d\u4e26\u7d71\u8a08\uff0c\u9019\u65b9\u6cd5\u6162\uff086x6 \\(cm\\) \u7684 CCD \u9700\u8981\u7d04\u4e09\u5341\u79d2\u4f86\u5224\u8b80\uff09\u4f46\u662f\u7cbe\u6e96\u3002
"},{"location":"feedback/physics/astronomy/#\u7d05\u5916\u7dda\u611f\u6e2c","title":"\u7d05\u5916\u7dda\u611f\u6e2c","text":"\u7406\u89e3 CCD \u9019\u985e\u611f\u5149\u8a2d\u5099\u5f8c\uff0c\u6211\u5011\u5c31\u53ef\u4ee5\u958b\u59cb\u8a0e\u8ad6\uff0c\u8981\u600e\u9ebc\u300c\u62cd\u651d\u300d\u53ef\u898b\u5149\u4e4b\u5916\u7684\u5149\u6e90\uff0c\u4f8b\u5982\u7d05\u5916\u7dda\u3002
\u4efb\u4f55\u6771\u897f\u53ea\u8981\u6709\u6eab\u5ea6\u5c31\u6703\u767c\u5c04\u7d05\u5916\u7dda\uff0c\u4f8b\u5982\u51b0\u584a\u3001\u88ab\u5fae\u5875\u5305\u88f9\u7684\u7269\u9ad4\u3001\u5b87\u5b99\u908a\u7de3\u7684\u7269\u9ad4\u3002 \u7136\u800c\u7d05\u5916\u7dda\u56e0\u70ba\u592a\u4f4e\u983b\uff0c\u6240\u4ee5\u5176\u651c\u5e36\u7684\u80fd\u91cf\u4e0d\u8db3\u4ee5\u8b93\u77fd\u9032\u5165\u5c0e\u5e36\uff0c \u4e5f\u56e0\u6b64\u6211\u5011\u9700\u8981\u5229\u7528\u5176\u4ed6\u7269\u8cea\u4f86\u88fd\u4f5c\u611f\u5149\u8a2d\u5099\uff0c\u4f8b\u5982 CMT\u3002
\u7279\u6b8a\u5149\u6e90\u7684\u611f\u6e2c\u8a2d\u5099\u9700\u8981\u5927\u91cf\u8cc7\u91d1
\u6bcf\u7a2e\u4e0d\u4e00\u6a23\u983b\u7387\u7684\u96fb\u78c1\u6ce2\uff0c\u5f88\u53ef\u80fd\u5c31\u6703\u9700\u8981\u7528\u4e0d\u4e00\u6a23\u7684\u6750\u8cea\u4f86\u611f\u6e2c\uff0c \u800c\u9019\u4e9b\u6750\u8cea\u4e0d\u6703\u50cf\u77fd\u9019\u9ebc\u901a\u7528\uff0c\u9019\u9ebc\u4fbf\u5b9c\u3002 \u6240\u4ee5\u901a\u5e38\u9019\u7a2e\u611f\u6e2c\u5668\u90fd\u6703\u53c8\u6602\u8cb4\u53c8\u7cbe\u5bc6\u4e14\u53ef\u80fd\u5168\u7403\u5c31\u53ea\u6709\u6578\u500b\u5718\u968a\u5728\u505a\u7814\u7a76\u800c\u5df2\u3002
"},{"location":"feedback/physics/astronomy/#\u7d05\u5916\u7dda\u611f\u6e2c\u7684\u61c9\u7528","title":"\u7d05\u5916\u7dda\u611f\u6e2c\u7684\u61c9\u7528","text":"\u6709\u4e86\u7d05\u5916\u7dda\uff0c\u6211\u5011\u9664\u4e86\u53ef\u4ee5\u770b\u5230\u7279\u6b8a\u661f\u9ad4\u4e4b\u5916\uff0c\u9084\u53ef\u4ee5\u7528\u4f86\u89c0\u5bdf\u8a72\u661f\u9ad4\u662f\u5426\u6b63\u5728\u9060\u96e2\u3002
Sky at Night Magazine
\u56e0\u70ba \u90fd\u535c\u52d2\u6548\u61c9 \u548c \u5927\u7206\u70b8\u7406\u8ad6\uff0c\u6211\u5011\u77e5\u9053\u8d8a\u63a5\u8fd1\u5b87\u5b99\u908a\u7de3\u7684\u661f\u9ad4\uff0c\u9060\u96e2\u6211\u5011\u7684\u901f\u5ea6\u8d8a\u5feb\u3002 \u4e5f\u56e0\u6b64\uff0c\u900f\u904e\u7d05\u79fb\u73fe\u8c61\u548c\u7d05\u5916\u7dda\u611f\u6e2c\u7d50\u679c\uff0c\u6211\u5011\u53ef\u4ee5\u77e5\u9053\u9019\u500b\u661f\u9ad4\u9060\u96e2\u6211\u5011\u7684\u901f\u5ea6\uff0c\u4e26\u63db\u7b97\u5176\u548c\u6211\u5011\u7684\u8ddd\u96e2\u3002
Early star-forming galaxies and the re-ionization of the Universe
\u4ee5\u4e0a\u5716\u54c8\u4f2f\u8d85\u6df1\u7a7a\u8996\u5834\u4e2d\u7684\u5176\u4e2d\u4e00\u500b\u661f\u7cfb\u70ba\u4f8b\uff0c\u6211\u5011\u53ea\u80fd\u900f\u904e\u7d05\u5916\u7dda\u53bb\u611f\u6e2c\u90a3\u4e9b\u9059\u9060\u7684\u661f\u7cfb\u3002 \u4e0a\u5716\u89c0\u6e2c\u7684\u661f\u7cfb\u662f\u76ee\u524d\u5df2\u77e5\u6700\u9060\u6700\u53e4\u8001\u7684\u661f\u7cfb\u4e4b\u4e00\uff0c\u8ddd\u96e2\u5730\u7403\u7d04 130 \u5104\u5149\u5e74\uff0c \u900f\u904e\u89c0\u6e2c\u5b83\uff0c\u80fd\u5920\u5e6b\u52a9\u6211\u5011\u7406\u89e3\u5b87\u5b99\u6210\u5f62\u4e4b\u521d\u7684\u6a23\u5b50\u3002
"},{"location":"feedback/physics/astronomy/#\u611f\u6e2c\u5668\u7684\u5176\u4ed6\u8b70\u984c","title":"\u611f\u6e2c\u5668\u7684\u5176\u4ed6\u8b70\u984c","text":"\u611f\u6e2c\u5668\u9700\u8981\u6ce8\u610f\u6eab\u5ea6\uff0c\u6211\u5011\u53ef\u4ee5\u628a\u611f\u6e2c\u5668\u653e\u5728\u51b7\u537b\u6db2\uff0c\u4f8b\u5982\u6db2\u614b\u6c26\u4e2d\u3002
\u9019\u662f\u56e0\u70ba\u7269\u9ad4\u53ea\u8981\u6709\u6eab\u5ea6\u5c31\u6703\u767c\u5c04\u96fb\u78c1\u6ce2\uff08\u9060\u7d05\u5916\u7dda\uff09\uff0c \u6240\u4ee5\u9700\u8981\u8b93\u611f\u6e2c\u5c0d\u8c61\u4e4b\u5916\u7684\u74b0\u5883\u76e1\u91cf\u51b7\u537b\uff0c\u5426\u5247\u6703\u5f71\u97ff\u6210\u50cf\uff0c\u5373\u6240\u8b02\u7684\u71b1\u5e72\u64fe\u3002
\u9664\u6b64\u4e4b\u5916\uff0c\u6eab\u5ea6\u4ee3\u8868\u96fb\u5b50\u672c\u8eab\u5c31\u5e36\u6709\u4e00\u5b9a\u7684\u80fd\u91cf\uff08\u52d5\u80fd\u52a0\u4e0a\u5167\u80fd\uff09\uff0c \u800c\u6bcf\u6b21\u96fb\u5b50\u548c\u7269\u9ad4\u7684\u78b0\u649e\u6216\u6643\u52d5\u90fd\u53ef\u80fd\u8b93\u5b83\u7a81\u7834\u5c0e\u5e36\uff0c\u4e26\u5f71\u97ff\u6210\u50cf\u3002
\u9664\u4e86 CCD\uff0c\u8fd1\u671f\u4e5f\u6709\u7814\u7a76\u5176\u4ed6\u985e\u578b\u7684\u611f\u6e2c\u5668\uff0c\u4f8b\u5982 KIDS\uff08Kinetic Inductance Detection System\uff09\u3002 \u9084\u6709\u5f9e\u6295\u5f71\u6a5f\u6280\u8853\u5ef6\u4f38\u7684\u6578\u4f4d\u5149\u8655\u7406\uff08Digital Micro Mirrors\uff09\u6280\u8853\u3002
"},{"location":"feedback/physics/astronomy/#\u96fb\u8166","title":"\u96fb\u8166","text":"\u96a8\u8457\u4eba\u5011\u53ef\u4ee5\u89c0\u6e2c\u7684\u661f\u9ad4\u8d8a\u4f86\u8d8a\u591a\uff0c \u6211\u5011\u9700\u8981\u7684\u662f\u4e00\u500b\u53ef\u4ee5 \u5132\u5b58 \u5927\u91cf\u7d00\u9304\u7684\u6a5f\u5236\u4e14\u53ef\u4ee5\u9032\u884c\u7e41\u96dc\u4e14\u7cbe\u5bc6\u7684 \u8a08\u7b97\u3002 \u96fb\u8166\u5728 1950 \u5e74\u4ee3\u4e4b\u5f8c\uff0c\u9010\u6f38\u5728\u5929\u6587\u5b78\u4e2d\u4f54\u6709\u975e\u5e38\u91cd\u8981\u7684\u4e00\u584a\uff0c\u5176\u512a\u52e2\u6709\uff1a
\u671b\u9060\u93e1\u7684\u6821\u6e96
\u6211\u5011\u5728\u5927\u6c23\u5e72\u64fe\u6709\u63d0\u5230\u5929\u9ad4\u7684\u5149\u7dda\u9032\u5165\u5730\u7403\u524d\u6703\u6643\u52d5\u3002
CANARY's Laser Launch
\u900f\u904e\u6253\u51fa\u7684\u96f7\u5c04\uff0c\u8a08\u7b97\u7576\u524d\u5927\u6c23\u5c0d\u5149\u7dda\u7684\u5f71\u97ff\u7a0b\u5ea6\uff0c \u518d\u53cd\u63a8\u56de\u661f\u9ad4\u7684\u89c0\u6e2c\uff0c\u4e26\u9032\u884c\u671b\u9060\u93e1\u7684\u79fb\u52d5\u548c\u6210\u50cf\u7684\u4fee\u6b63\u3002
"},{"location":"feedback/physics/astronomy/#\u5132\u5b58\u548c\u8a08\u7b97\u80fd\u529b","title":"\u5132\u5b58\u548c\u8a08\u7b97\u80fd\u529b","text":"\u6211\u5011\u4f86\u770b\u770b\u4e00\u822c\u5929\u6587\u5b78\u5e38\u898b\u7684\u61c9\u7528\u4e0b\uff0c\u9700\u8981\u591a\u5c11\u5132\u5b58\u548c\u8a08\u7b97\u7684\u80fd\u529b\u3002
"},{"location":"feedback/physics/astronomy/#\u5132\u5b58\u80fd\u529b","title":"\u5132\u5b58\u80fd\u529b","text":"CCD \u4e2d\u6bcf\u500b\u4f4d\u5143\uff08MOS\uff09\u53ef\u4ee5\u5132\u5b58 2 bytes\uff0816 bits\uff09\u7684\u8cc7\u8a0a\uff0c \u5982\u679c\u4ee5\u4e00\u6392\u6709 4000 \u500b\u4f4d\u5143\u4f86\u8a08\u7b97\uff0c \u6bcf\u5f35 CCD \u51fa\u4f86\u7684\u5f71\u50cf\u5c31\u6703\u6709 32 MB \u7684\u5927\u5c0f\u3002
\u6211\u5011\u518d\u4ee5\u4e00\u500b\u671b\u9060\u93e1\u6709\u591a\u500b CCD \u4f86\u8003\u616e\uff0c\u6240\u4ee5\u4e00\u5f35\u5929\u6587\u7167\u7247\u7d04\u9700\u8981\u6578 GB \u4f86\u5132\u5b58\u3002
\u9019\u6a23\u8981\u7167\u51fa\u4e00\u500b\u5b8c\u6574\u7684\u5b87\u5b99\uff08\\(360^{\\circ}\\)\uff09\u9700\u8981\u591a\u5c11\u5f35\u7167\u7247\uff1f \u5982\u679c\u4ee5\u4e00\u5f35\u7167\u7247\u5927\u7d04\u6703\u7167\u5230 \\(0.3^{\\circ}\\) \u7684\u592a\u7a7a\u70ba\u4f8b\uff0c\u6211\u5011\u9700\u8981\u7d04 10 TB \u7684\u7a7a\u9593\u5132\u5b58\u4e00\u591c\u7684\u592a\u7a7a\u3002
\u96a8\u8457\u7d00\u9304\u7684\u5929\u6578\u589e\u52a0\uff08\u4f8b\u5982\u8a08\u7b97\u51fa\u9695\u77f3\uff09\u5132\u5b58\u7684\u7a7a\u9593\u5c07\u6703\u8d8a\u4f86\u8d8a\u5927\u3002
"},{"location":"feedback/physics/astronomy/#\u8a08\u7b97\u80fd\u529b","title":"\u8a08\u7b97\u80fd\u529b","text":"\u6709\u4e86\u96fb\u8166\uff0c\u6211\u5011\u5c31\u53ef\u4ee5\u6a21\u64ec\u5b87\u5b99\u6210\u5f62\u4e4b\u521d\uff0c\u5404\u7a2e\u7269\u9ad4\u4ea4\u4e92\u5f71\u97ff\u4e0b\u7684\u767c\u5c55\u3002
\u5047\u8a2d\u6211\u5011\u6709\u4e00\u767e\u842c\u500b\u7269\u9ad4\uff08\\(10^6\\)\uff09\uff0c\u5c31\u6703\u9700\u8981 \\((10^6)^2 = 10^{12}\\) \u6b21\u8a08\u7b97\uff0c \u7576\u6578\u91cf\u9054\u5230\u6578\u5104\u500b\uff0c\u5c07\u8b93\u96fb\u8166\u8a08\u7b97\u6642\u9593\u62c9\u9577\u5230\u5931\u53bb\u610f\u7fa9\u3002 \u800c\u4e14\u9019\u9084\u53ea\u662f\u4e00\u77ac\u9593\u7684\u4e92\u52d5\uff0c\u5982\u679c\u8981\u7d00\u9304\u4e00\u767e\u6b65\u751a\u81f3\u6578\u5104\u6b65\uff0c\u9019\u500b\u6642\u9593\u5c07\u6703\u62c9\u5f97\u66f4\u9577\u3002
\u6240\u4ee5\u6211\u5011\u53ea\u80fd\u53d6\u5927\u7d04\u7684\u7d50\u679c\uff0c\u4e5f\u5c31\u662f\u53ea\u8a08\u7b97\u8f03\u6709\u5f71\u97ff\u529b\u7684\u4e92\u52d5\u3002 \u901a\u5e38\u6703\u8b93\u8a08\u7b97\u6642\u9593\u8b8a\u6210 \\(n\\log n\\) \u9019\u7a2e\u7b49\u7d1a\u7684\u6210\u9577\u3002
\u7e3d\u7684\u4f86\u8aaa\uff0c\u5927\u91cf\u7684\u5132\u5b58\u548c\u9ad8\u901f\u7684\u904b\u7b97\u7684\u9700\u6c42\uff0c \u8b93\u5929\u6587\u5b78\u5bb6\u901a\u5e38\u6703\u4f7f\u7528\u8cc7\u6599\u4e2d\u5fc3\u4f86\u6eff\u8db3\u9700\u6c42\u3002
\u900f\u904e\u9060\u7aef\u53bb\u6aa2\u8996\u3001\u8a08\u7b97\u9700\u8981\u7684\u8cc7\u8a0a\u548c\u7d50\u679c\uff0c\u5c31\u53ef\u4ee5\u907f\u514d\u8cc7\u6599\u88ab\u7121\u610f\u7fa9\u7684\u50b3\u8f38\u3002 \u800c\u76f8\u95dc\u7684\u5354\u5b9a\uff08\u5982\u4f55\u4f7f\u7528\u3001\u5132\u5b58\u7b49\u7b49\uff09\u4e5f\u5df2\u7d93\u5728\u88fd\u4f5c\u4e2d\uff0c\u4f8b\u5982 IVOA\u3002
"},{"location":"feedback/physics/astronomy/#\u8a08\u7b97\u51fa\u9695\u77f3","title":"\u8a08\u7b97\u51fa\u9695\u77f3","text":"NASA Approaching Asteroid
\u6bcf\u5929\u6211\u5011\u4f7f\u7528\u671b\u9060\u93e1\u89c0\u6e2c\u592a\u7a7a\uff0c\u4e26\u628a\u7d50\u679c\u6578\u4f4d\u5316\u5b58\u9032\u96fb\u8166\u91cc\u3002 \u5728\u9019\u4e9b\u6d77\u91cf\u7684\u8cc7\u6599\u88e1\uff0c\u6211\u5011\u8981\u600e\u9ebc\u627e\u51fa\u90a3\u4e9b\u6b63\u5728\u671d\u8457\u6211\u5011\u524d\u9032\u7684\u661f\u9ad4\uff0c\u4e26\u9810\u6e2c\u5176\u649e\u4e0a\u5730\u7403\u7684\u53ef\u80fd\u6027\u5462\uff1f
\u6211\u5011\u6bcf\u665a\u6703\u7d00\u9304\u5404\u500b\u661f\u9ad4\u7684\u4f4d\u7f6e\uff0c\u4e26\u78ba\u8a8d\u5176\u79fb\u52d5\u9031\u671f\u548c\u79fb\u52d5\u65b9\u5411\uff0c\u4f8b\u5982\u5b83\u662f\u7e5e\u8457\u592a\u967d\u8f49\u9084\u662f\u671d\u8457\u5730\u7403\u8d70\u3002 \u800c\u9019\u4e9b\u8cc7\u6599\u5c31\u662f\u900f\u904e\u8a08\u7b97\u8a72\u661f\u9ad4\u7684\u79fb\u52d5\u901f\u5ea6\u548c\u8ddd\u96e2\u9060\u8fd1\u6240\u5f97\u4e4b\u3002
\\[\\begin{align} v &= d/t \\nonumber \\\\ &= 2\\pi r/t \\label{vr} \\end{align}\\]\u842c\u6709\u5f15\u529b\u7576\u4f5c\u904b\u8f49\u7684\u5411\u5fc3\u529b\u7684\u8a71\uff0c\u53ef\u4ee5\u5f97\u5230\uff1a
\\[\\begin{align*} GMm /r^{2} = mv^2/ r \\\\ \\Rightarrow v^2 = GM /r \\end{align*}\\]\u6700\u5f8c\u5c31\u53ef\u4ee5\u6574\u5408\u524d\u9762\u7684\u516c\u5f0f\u5f97\u5230\u7e5e\u884c\u534a\u5f91\uff1a
\\[\\begin{align*} v^2 = GM/r = (2\\pi r/t)^2 \\end{align*}\\] \\[\\begin{align*} r^3 = \\frac{GMt^2}{4\\pi ^2} \\end{align*}\\]\u6700\u5f8c\u518d\u5f97\u51fa\u7e5e\u884c\u901f\u5ea6\uff08\\(v\\)\uff09\u3002
"},{"location":"feedback/physics/astronomy/#\u5149\u8b5c\u5716","title":"\u5149\u8b5c\u5716","text":"\u900f\u904e\u5149\u8b5c\u5716\u6211\u5011\u53ef\u4ee5\u5f97\u5230\u5f97\u5230\u5f88\u591a\u8cc7\u8a0a\uff0c \u9664\u6b21\u4e4b\u5916\u672c\u7ae0\u4e5f\u6703\u8a0e\u8ad6\u600e\u9ebc\u7372\u5f97\u5149\u8b5c\u5716\u548c\u5229\u7528\u5176\u63a8\u4f30\u5b87\u5b99\u7684\u6697\u7269\u8cea\u3001\u6697\u80fd\u91cf\u7684\u7d44\u6210\u6bd4\u4f8b\u3002
"},{"location":"feedback/physics/astronomy/#\u5149\u8b5c\u5716\u7684\u61c9\u7528","title":"\u5149\u8b5c\u5716\u7684\u61c9\u7528","text":"\u53ef\u4ee5\u5229\u7528\u5149\u8b5c\u5716\u7372\u5f97\uff1a
\u611f\u6e2c\u7684\u96fb\u78c1\u6ce2\u983b\u7387\u8d8a\u9ad8\uff0c\u6eab\u5ea6\u8d8a\u9ad8\u3002 \u63db\u53e5\u8a71\u8aaa\uff0c\u5448\u73fe\u85cd\u8272\u7684\u661f\u9ad4\u7684\u7684\u6eab\u5ea6\u6703\u6bd4\u7d05\u8272\u9ad8\uff0c\u7136\u5f8c\u7d71\u8a08\u5404\u500b\u661f\u9ad4\u7684\u6eab\u5ea6\u5f8c\u5c31\u53ef\u4ee5\u756b\u51fa \u8d6b\u7f85\u5716\u3002
\u984f\u8272\u7684\u5149\u8b5c\u5716\u7372\u5f97\u65b9\u6cd5\u5728\u524d\u9762\u7684\u6ce2\u9577\u6709\u63d0\u5230\uff08\u5728 CCD \u524d\u9762\u64fa\u4e0a\u8272\u7d19\uff09\u3002
"},{"location":"feedback/physics/astronomy/#\u7d44\u6210","title":"\u7d44\u6210","text":"\u56e0\u70ba\u4e0d\u540c\u7269\u8cea\u6703\u5438\u6536\u4e0d\u540c\u983b\u7387\u7684\u5149\uff08\u505a\u70ba\u96fb\u5b50\u7684\u80fd\u968e\u8df3\u8e8d\uff09\uff0c \u6240\u4ee5\u5149\u8b5c\u907a\u6f0f\u7684\u5730\u65b9\u5c31\u662f\u7d44\u6210\u7684\u7269\u8cea\uff08\u4f46\u4e5f\u53ef\u80fd\u88ab\u5927\u6c23\u5c64\u7684\u7269\u8cea\u5438\u6536\uff0c\u9700\u8981\u7be9\u9078\u4e00\u4e0b\uff09\u3002
Wikimedia Commons under the CCA license.
\u53cd\u904e\u4f86\u8aac\uff0c\u4e5f\u6709\u53ef\u80fd\u662f\u900f\u904e\u7279\u5b9a\u7269\u8cea\u91cb\u653e\u7684\u96fb\u78c1\u6ce2\uff0c\u4f86\u7d44\u6210\u5149\u8b5c\u5716\u3002 \u4f8b\u5982\u661f\u96f2\uff0c\u4ed6\u7684\u5149\u8b5c\u5c31\u662f\u900f\u904e\u539f\u5b50\u91cb\u653e\u80fd\u968e
HIFI Cht3. HIFI Scientific Capabilities and Performance
"},{"location":"feedback/physics/astronomy/#\u901f\u5ea6","title":"\u901f\u5ea6","text":"Nitrogen II emission line measured galaxy M87.
\u4e0a\u5716\u7684\u4e0a\u534a\u90e8\u6211\u5011\u53ef\u4ee5\u770b\u5230\uff0c \u5de6\u908a\u662f\u9ad8\u983b\uff08\u900f\u904e \u90fd\u535c\u52d2\u6548\u61c9\uff0c\u53ef\u4ee5\u77e5\u9053\u9019\u5074\u6b63\u9760\u8fd1\u6211\u5011\uff09\u3001 \u53f3\u908a\u662f\u4f4e\u983b\uff08\u9060\u96e2\uff09\u6240\u4ee5\u77e5\u9053\u8a72\u661f\u7cfb\u6b63\u5728\u4ee5\u9006\u6642\u91dd\u7684\u65b9\u5411\u65cb\u8f49\u3002 \u7136\u5f8c\u518d\u900f\u904e\u524d\u8ff0\u6e2c\u91cf\u9ed1\u6d1e\u8cea\u91cf\u7684\u624b\u6cd5\uff0c \u7d50\u679c\u767c\u73fe\u6574\u500b\u661f\u7cfb\u7684\u8cea\u91cf\u5927\u65bc\u661f\u7cfb\u4e2d\u661f\u661f\u7e3d\u548c\u7684\u8cea\u91cf\u548c\uff0c\u6240\u4ee5\u4f30\u8a08\u4e2d\u9593\u6709\u500b\u8cea\u91cf\u5f88\u5927\u7684\u9ed1\u6d1e\u3002
"},{"location":"feedback/physics/astronomy/#\u5149\u8b5c\u5716\u7684\u89c0\u6e2c\u65b9\u6cd5","title":"\u5149\u8b5c\u5716\u7684\u89c0\u6e2c\u65b9\u6cd5","text":"\u65e9\u671f\u725b\u9813\u4f7f\u7528\u4e09\u89d2\u7a1c\u93e1\uff08prism\uff09\u89c0\u6e2c\u5149\u7684\u53ef\u898b\u5149\u5149\u8b5c\uff0c \u4f46\u5728\u73fe\u4ee3\u5929\u6587\u5b78\u4e2d\u662f\u4f7f\u7528\u7e5e\u5c04\u5149\u67f5\uff08Diffraction grating\uff09\u4f86\u7372\u5f97\u5404\u7a2e\u983b\u7387\u7684\u5149\u3002
Diffraction Grating
\u900f\u904e\u591a\u500b\u5149\u67f5\uff08grating\uff09\u628a\u7279\u5b9a\u6ce2\u9577\u7684\u96fb\u78c1\u6ce2\u805a\u5408\u5728\u67d0\u8655\uff08\u60f3\u50cf\u4e00\u4e0b CD \u76e4\u4e0a\u4e0d\u540c\u89d2\u5ea6\u5c31\u6703\u770b\u5230\u4e0d\u540c\u984f\u8272\uff09\uff0c \u6211\u5011\u5c31\u53ef\u4ee5\u5728\u7279\u5b9a\u4f4d\u7f6e\u4e2d\u653e\u7f6e CCD\uff0c\u4e26\u64f7\u53d6\u60f3\u8981\u7684\u96fb\u78c1\u6ce2\u3002
\u5b8c\u6574\u7684 \u651d\u8b5c\u5100 \u5c31\u6703\u662f\uff1a
\u671b\u9060\u93e1\u662f\u6703\u79fb\u52d5\u7684\uff0c\u6bcf\u6b21\u79fb\u52d5\u8981\u5c0d\u6e96\u7279\u5b9a\u96fb\u78c1\u6ce2\u7684\u805a\u5408\u8655\u662f\u6709\u5de5\u7a0b\u56f0\u96e3\u7684\uff0c \u89e3\u6cd5\u5927\u81f4\u662f\u900f\u904e\u5149\u7e96\uff08optical fibres\uff09\u628a\u671b\u9060\u93e1\u7372\u5f97\u7684\u5149\u6e90\u5c0e\u5411\u76f8\u540c\u8655\uff0c\u6e1b\u5c11\u611f\u5149\u8a2d\u5099\u7684\u79fb\u52d5\u3002
\u9700\u8981\u8b93\u671b\u9060\u93e1\u7684\u5468\u570d\u8db3\u5920\u51b7\uff0c\u907f\u514d\u7d05\u5916\u7dda\u7684\u5e72\u64fe\u3002
\u6536\u96c6\u5230\u7684\u5149\uff0c\u56e0\u70ba\u88ab\u6253\u6563\u4e86\uff0c\u6240\u4ee5\u4ed6\u7684\u5f37\u5ea6\u6703\u66f4\u4f4e\uff0c\u9700\u8981\u82b1\u66f4\u9577\u7684\u6642\u9593\uff08\u6578\u5341\u500d\uff09\u4f86\u66dd\u5149\u3002 \u56e0\u70ba\u8017\u6642\u9577\uff0c\u6240\u4ee5\u6703\u5728\u6bcf\u4e00\u6b21\u7684\u89c0\u6e2c\u9031\u671f\u4e2d\uff0c\u540c\u6642\u89c0\u5bdf\u591a\u500b\u7269\u9ad4\u7684\u5149\u8b5c\u3002 \u8981\u505a\u5230\u9019\u6a23\uff0c\u5c31\u9700\u5229\u7528\u5149\u7e96\u628a\u5404\u500b\u661f\u9ad4\u7684\u5149\u6e90\u90fd\u79fb\u81f3\u76f8\u540c\u7684\u9663\u5217\u4e2d\uff0c\u4e26\u540c\u6642\u89c0\u5bdf\u4ed6\u5011\uff0c\u5982\u4e0b\u6240\u793a\u3002
Andy Lawrence \u7d44\u5408\u591a\u5f35 AAT \u7684\u7167\u7247\u800c\u6210\u3002
"},{"location":"feedback/physics/astronomy/#\u6697\u80fd\u91cf","title":"\u6697\u80fd\u91cf","text":"\u5982\u540c\u524d\u9762\u63d0\u5230\u7684\u7d05\u5de8\u661f\uff0c\u91cd\u529b\u6703\u628a\u661f\u9ad4\u5411\u5167\u58d3\u7e2e\uff0c\u6838\u878d\u5408\u7684\u80fd\u91cf\u518d\u628a\u661f\u9ad4\u5411\u5916\u6490\u8d77\uff0c\u5f62\u6210\u7a69\u5b9a\u7684\u661f\u9ad4\u5f62\u72c0\u3002
\u6574\u500b\u5b87\u5b99\u4e8b\u5be6\u4e0a\u5c31\u662f\u5982\u6b64\uff0c\u53ea\u662f\u5411\u5916\u7684\u529b\u91cf\uff08\u6697\u80fd\u91cf\uff0c\u7d04\u4f54 70%\uff09\u5927\u65bc\u5411\u5167\u58d3\u7e2e\uff08\u6697\u7269\u8cea\uff0c\u7d04\u4f54 25%\uff09\uff0c \u6240\u4ee5\u6211\u5011\u624d\u89c0\u5bdf\u5230\u5b87\u5b99\u6b63\u5728\u64f4\u5f35\u7684\u73fe\u8c61\u3002
\u5047\u8aaa
\u4e0a\u8ff0\u7684\u53ea\u662f\u4e00\u7a2e\u666e\u904d\u7684\u8aaa\u6cd5\uff0c\u7576\u4f60\u53ef\u4ee5\u63d0\u51fa\u4e00\u500b\u7406\u8ad6\uff0c\u4e26\u6eff\u8db3\u89c0\u5bdf\u5230\u7684\u73fe\u8c61\uff0c\u9019\u6642\u9019\u500b\u7406\u8ad6\u5c31\u53ef\u80fd\u88ab\u5927\u5bb6\u63a5\u53d7\u3002
\u4f46\u662f\uff0c\u88ab\u63a5\u53d7\u4e0d\u4ee3\u8868\u5b83\u5c31\u662f\u4e8b\u5be6\uff0c\u904e\u4e86\u4e09\u5341\u5e74\uff0c\u6211\u5011\u53ef\u80fd\u5c31\u6703\u5efa\u69cb\u51fa\u4e00\u500b\u5b8c\u5168\u4e0d\u4e00\u6a23\u7684\u5b87\u5b99\u89c0\u3002
\u554f\u984c\u662f\uff0c\u600e\u9ebc\u89c0\u5bdf\u51fa\u5b87\u5b99\u6b63\u5728\u64f4\u5f35\u7684\uff1f
\u900f\u904e \u90fd\u535c\u52d2\u6548\u61c9\uff0c\u6211\u5011\u53ea\u8981\u77e5\u9053\u7269\u9ad4\u767c\u51fa\u7684\u983b\u7387\u6f38\u6f38\u63d0\u9ad8\uff0c\u5c31\u53ef\u4ee5\u77e5\u9053\u5b83\u6b63\u5728\u9060\u96e2\uff0c \u4f46\u6211\u5011\u4e0d\u53ef\u80fd\u89c0\u5bdf\u6578\u5341\u842c\u5e74\u4f86\u8b49\u660e\u5b83\u7684\u8b8a\u5316\u3002 \u6240\u4ee5\u6211\u5011\u9700\u8981\u4e00\u7a2e\u661f\u9ad4\uff0c\u4e0d\u7ba1\u662f\u5728\u54ea\u908a\u751f\u6210\uff0c\u4ed6\u7684\u4eae\u5ea6\u90fd\u8981\u4e00\u6a23\uff08standard candle\uff09\uff0c 1a \u985e\u8d85\u65b0\u661f \u5c31\u662f\u9019\u6a23\u4e00\u7a2e\u661f\u9ad4\u3002
The Gobbling Dwarf that Exploded
\u56e0\u70ba\u767d\u77ee\u661f\u5438\u6536\u65c1\u908a\u6046\u661f\u91cb\u653e\u7684\u7269\u8cea\u5f8c\u5f15\u767c\u7684 1a \u985e\u8d85\u65b0\u661f\u7206\u70b8\uff0c \u5176\u7206\u70b8\u6642\u7684\u8cea\u91cf\u90fd\u5dee\u4e0d\u591a\u662f 1.4 \u500d\u7684\u592a\u967d\u8cea\u91cf\uff0c\u6240\u4ee5\u4ed6\u5011\u91cb\u653e\u7684\u80fd\u91cf\u548c\u4eae\u5ea6\u4e5f\u90fd\u5dee\u4e0d\u591a\u3002
\u7531\u6b64\u89c0\u5bdf\u4e0d\u540c\u7684 1a \u985e\u8d85\u65b0\u661f\uff0c\u5c31\u53ef\u4ee5\u77e5\u9053\u8d8a\u6697\uff08\u9060\uff09\u7684 1a \u985e\u8d85\u65b0\u661f \u5176\u983b\u7387\u8d8a\u4f4e\uff0c \u4ee3\u8868\u5b87\u5b99\u7684\u908a\u7de3\u6b63\u66f4\u5feb\u901f\u5730\u9060\u96e2\u6211\u5011\u3002
"},{"location":"feedback/physics/astronomy/#\u6bd4\u4f8b\u7684\u63a8\u4f30","title":"\u6bd4\u4f8b\u7684\u63a8\u4f30","text":"Improved cosmological constraints from a joint analysis of the SDSS-II and SNLS supernova samples
\u900f\u904e\u4e0a\u8ff0\u89c0\u5bdf\u5230\u7684\u4e8b\u5be6\uff08\u5b87\u5b99\u6b63\u5728\u64f4\u5f35\uff09\uff0c \u8ad6\u6587\u4e2d\u5c31\u6307\u51fa\u5b87\u5b99\u7d44\u6210\u7684\u6bd4\u4f8b\u70ba 70% \u7684\u6697\u80fd\u91cf\u300125% \u7684\u6697\u7269\u8cea\u548c 5% \u7684\u5df2\u77e5\u7269\u8cea\u3002
"},{"location":"feedback/physics/astronomy/#\u7e3d\u7d50","title":"\u7e3d\u7d50","text":"\u6211\u5011\u7c21\u55ae\u5e36\u5230\u5929\u6587\u5b78\u7684\u6f14\u9032\uff0c\u4e26\u7d30\u8ac7\u4e00\u822c\u671b\u9060\u93e1\u548c\u592a\u7a7a\u671b\u9060\u93e1\u7684\u6311\u6230\u548c\u8a2d\u8a08\u539f\u5247\u3002 \u5e36\u5230\u4e86\u4e00\u4e9b\u661f\u9ad4\uff08\u7d05\u5de8\u661f\uff09\u548c\u9ed1\u6d1e\u7684\u7c21\u55ae\u904b\u7b97\uff0c \u4e26\u900f\u904e\u8d8a\u4f86\u8d8a\u512a\u826f\u7684\u611f\u6e2c\u5668\u3001\u96fb\u8166\u3001\u5149\u8b5c\u7684\u77e5\u8b58\u4f86\u9032\u4e00\u6b65\u8abf\u6574\u6211\u5011\u5c0d\u5b87\u5b99\u7684\u60f3\u50cf\u3002
\u6709\u4e86\u9019\u4e9b\u77e5\u8b58\uff0c \u7576\u4f60\u5728\u6b23\u8cde\u97cb\u4f2f\u671b\u9060\u93e1\u6240\u62cd\u651d\u7684\u7167\u7247\u548c\u7406\u89e3\u5176\u904b\u4f5c\u539f\u7406\u6642\uff0c \u662f\u4e0d\u662f\u66f4\u6709\u611f\u5462\uff01
\u5176\u4ed6\u6709\u8da3\u9023\u7d50\uff1a
\u6700\u8fd1\u5728\u770b\u6838\u878d\u5408\u672a\u4f86\u5c55\u671b\u9019\u672c\u66f8\u6642\uff0c\u6162\u6162\u63a5\u89f8\u4e00\u4e9b\u5fae\u89c0\u91cf\u5b50\u7684\u7269\u7406\u884c\u70ba\u548c\u7279\u6027\uff0c\u5728\u7406\u89e3\u7684\u904e\u7a0b\u4e2d\u5c31\u6703\u958b\u59cb\u63a5\u89f8\u5230\u4e00\u4e9b\u57fa\u65bc \u72f9\u7fa9\u76f8\u5c0d\u8ad6\uff08special relativity\uff09\u5efa\u7acb\u7684\u4e16\u754c\uff0c\u4e5f\u56e0\u6b64\u624d\u958b\u59cb\u672c\u7bc7\u7684\u64b0\u5beb\u3002 \u6211\u89ba\u5f97\u9019\u4e5f\u7b97\u662f\u6eff\u597d\u7684\u5b78\u7fd2\u52d5\u529b\u5427\uff0c\u5148\u63a5\u89f8\u7d50\u679c\u548c\u61c9\u7528\u624d\u53bb\u63a5\u89f8\u539f\u7406\u6642\uff0c\u611f\u89f8\u6703\u66f4\u6df1\u3002
"},{"location":"feedback/physics/special-relativity/#\u80cc\u666f","title":"\u80cc\u666f","text":"\u5728\u7406\u89e3\u72f9\u7fa9\u76f8\u5c0d\u8ad6\u7684\u904e\u7a0b\u7576\u4e2d\uff0c\u6211\u8a8d\u70ba\u6709\u5169\u500b\u5f88\u91cd\u8981\u7684\u89c0\u9ede\u9700\u8981\u91d0\u6e05\uff1a
\u6642\u9593\u548c\u7a7a\u9593\u660e\u660e\u662f\u4e0d\u540c\u7684\u55ae\u4f4d\uff08\u4e00\u500b\u662f\u79d2\u53e6\u4e00\u500b\u662f\u516c\u5c3a\uff09\uff0c\u6211\u5011\u8981\u600e\u9ebc\u628a\u5b83\u7576\u6210\u540c\u4e00\u500b\u5834\u57df\u5462\uff1f\u5176\u5be6\u9019\u7a2e\u72c0\u6cc1\u5728\u7269\u7406\u7684\u4e16\u754c\u4e0a\u4e26\u4e0d\u5c11\u898b\uff0c\u9019\u6642\u5019\u901a\u5e38\u90fd\u6703\u300c\u5275\u9020\u300d\u4e00\u500b\u5e38\u6578\u8ca0\u8cac\u8f49\u63db\u9019\u5169\u8005\u7684\u55ae\u4f4d\u3002\u5728\u8b1b\u9019\u500b\u5e38\u6578\u662f\u4ec0\u9ebc\u4e4b\u524d\uff0c\u6211\u5011\u5148\u4f86\u770b\u770b\u73fe\u5728\u7684\u7269\u7406\u5b78\u4e2d\u6709\u54ea\u4e9b\u5e38\u898b\u7684\u5e38\u6578\u5427\uff01
\u5b89\u57f9\u5b9a\u5f8b\uff08\u6216\u8005\u7a31\u99ac\u514b\u58eb\u5a01\u2014\u5b89\u57f9\u5b9a\u5f8b\uff09\u4e2d\u96fb\u6d41\u7684\u8b8a\u5316\u53ef\u4ee5\u7522\u751f\u78c1\u5834\uff0c\u96fb\u5834\u548c\u78c1\u5834\u7684\u8f49\u63db\u5c31\u9700\u8981\u4e00\u500b\u300c\u78c1\u5e38\u6578 \\(\\mu_0\\)\u300d\u3002 \u6c92\u932f\uff0c\u5728\u7406\u89e3 \u6642\u7a7a \u9019\u500b\u6982\u5ff5\u7684\u6642\u5019\uff0c\u96fb\u78c1\u529b\u662f\u4e00\u500b\u5f88\u597d\u7684\u8f14\u52a9\uff0c\u96fb\u529b\u548c\u78c1\u529b\u5c31\u662f\u7576\u6211\u5011\u7528\u4e0d\u540c\u89d2\u5ea6\u53bb\u770b\u96fb\u78c1\u529b\u9019\u500b\u6771\u897f\u6642\uff0c\u6240\u5206\u5225\u8868\u73fe\u7684\u73fe\u8c61\u3002 \uff08\u9084\u8a18\u5f97\u4ee5\u524d\u5927\u5b78\u6559\u6388\u5c0d\u99ac\u514b\u58eb\u5a01\u7684\u8b9a\u5606\uff0c\u81f3\u4eca\u4ecd\u8b93\u6211\u5370\u8c61\u6df1\u523b\uff09
\u91cf\u5b50\u529b\u5b78\u4e2d\u4e5f\u6709\u4e00\u500b\u5f88\u5e38\u898b\u4e14\u5f88\u91cd\u8981\u7684\u5e38\u6578\u300c\u666e\u6717\u514b\u5e38\u6578 \\(h\\)\u300d\uff08\u9084\u8a18\u5f97\u9ed1\u9ad4\u8f3b\u5c04\u7684\u7d2b\u5916\u707d\u8b8a\u554f\u984c\u55ce\uff1f\uff09\u3002 \u7576\u6211\u5011\u60f3\u77e5\u9053\u4e00\u500b\u96fb\u78c1\u6ce2\uff08\u6216\u8005\u8aaa\u5149\uff0c\u5176\u5be6\u5149\u5c31\u662f\u4e00\u7a2e\u96fb\u78c1\u6ce2\uff0c\u90fd\u662f\u900f\u904e\u50b3\u905e\u5149\u5b50\u4f86\u9054\u6210\u6e9d\u901a\uff09\u6709\u591a\u5c11\u80fd\u91cf\uff0c\u5c31\u53ef\u4ee5\u900f\u904e\u9019\u500b\u5e38\u6578\u4f86\u8f49\u63db\u983b\u7387\u548c\u80fd\u91cf\u3002
\u5230\u4e86\u9019\u88e1\uff0c\u5927\u5bb6\u53ef\u80fd\u5df2\u7d93\u731c\u5230\u9019\u500b\u5e38\u6578\u4e86\uff0c\u90a3\u5c31\u662f\u300c\u5149\u901f \\(c\\)\u300d\u3002\u4e0d\u904e\u8207\u5176\u8aaa\u9019\u500b\u5e38\u6578\u662f\u5149\u901f\uff0c\u6211\u89ba\u5f97\u5728\u7406\u89e3 \u6642\u7a7a \u9019\u500b\u5834\u57df\u7684\u904e\u7a0b\u4e2d\u628a \\(c\\) \u7576\u6210\u6642\u9593\u548c\u7a7a\u9593\u7684\u8f49\u63db\u5e38\u6578\u66f4\u70ba\u6070\u7576\u3002 \u63db\u53e5\u8a71\u8aaa\uff0c\u5149\u4e4b\u6240\u4ee5\u5728\u771f\u7a7a\u4e2d\u80fd\u9054\u5230\u300c\u5149\u901f\u300d\u5c31\u662f\u56e0\u70ba\u4ed6\u53d7\u9650\u65bc\u9019\u500b\u5e38\u6578\uff0c\u6240\u4ee5\u505a\u500b\u7c97\u6dfa\u7684\u6bd4\u55bb\uff0c\u4e26\u4e0d\u662f\u56e0\u70ba\u5149\u5728\u771f\u7a7a\u4e2d\u7684\u901f\u5ea6\u6210\u5c31\u9019\u500b\u5e38\u6578\uff0c\u800c\u662f\u9019\u500b\u5e38\u6578\u6210\u5c31\u5149\u5728\u771f\u7a7a\u4e2d\u7684\u901f\u5ea6\u3002
\u56de\u5230\u7b2c\u4e8c\u9ede\u89c0\u5ff5\uff0c\u6240\u6709\u4f60\u5728\u975c\u6b62\u6642\u7a7a\u4e2d\u89c0\u6e2c\u5230\u7684\u7269\u7406\u6027\u8cea\uff0c\u90fd\u6703\u5b8c\u5168\u76f8\u540c\u65bc\u5728\u4ee5\u56fa\u5b9a\u901f\u5ea6\u79fb\u52d5\u7684\u5ea7\u6a19\u7cfb\u4e2d\u89c0\u6e2c\u5230\u7684\u7269\u7406\u6027\u8cea\u3002 \u9019\u4e5f\u4ee3\u8868\u4f60\u7121\u6cd5\u5340\u5206\u4e00\u500b\u5ea7\u6a19\u7cfb\u662f\u975c\u6b62\u7684\u9084\u662f\u6163\u6027\u79fb\u52d5\u7684\uff08\u901a\u4fd7\u7684\u4f8b\u5b50\u5c31\u662f\u4f60\u7121\u6cd5\u5340\u5206\u662f\u9ce5\u98db\u904e\u4f60\u773c\u524d\u9084\u662f\u4f60\u6b63\u5feb\u901f\u5730\u5728\u9ce5\u65c1\u908a\u79fb\u52d5\uff09\u3002... \u9019\u7a2e\u89c0\u5ff5\u5728\u7406\u89e3\u72f9\u7fa9\u76f8\u5c0d\u8ad6\u7684\u6642\u5019\u5c24\u5176\u91cd\u8981\uff0c\u800c\u9019\u4e5f\u662f\u76f8\u5c0d\u8ad6\u4e4b\u6240\u4ee5\u540d\u70ba\u300c\u76f8\u5c0d\u300d\u8ad6\u7684\u539f\u56e0\u5427\uff01
\u4e00\u500b\u6b63\u5e38\u7684\u6210\u5e74\u4eba\u5f9e\u4e0d\u53bb\u601d\u8003\u7a7a\u9593\u548c\u6642\u9593\u7684\u554f\u984c\u2014\u2014\u9019\u4e9b\u90fd\u662f\u4ed6\u5c0f\u6642\u5019\u5c31\u60f3\u5230\u7684\uff1b\u4f46\u6211\u7684\u667a\u529b\u767c\u80b2\u9072\u7de9\uff0c\u56e0\u6b64\u9577\u5927\u5f8c\u624d\u958b\u59cb\u601d\u8003\u7a7a\u9593\u548c\u6642\u9593\u3002
\u2014 \u611b\u56e0\u65af\u5766
"},{"location":"feedback/physics/special-relativity/#\u5ee3\u7fa9\u76f8\u5c0d\u8ad6","title":"\u5ee3\u7fa9\u76f8\u5c0d\u8ad6","text":"\u72f9\u7fa9\u76f8\u5c0d\u8ad6\u900f\u904e\u6642\u7a7a\uff0c\u91cd\u65b0\u5b9a\u7fa9\u4e86\u53e4\u5178\u7684\u529b\u5b78\uff0c\u4e0d\u53ea\u662f\u901f\u5ea6\u3001\u52d5\u91cf\u3001\u89d2\u52d5\u91cf\uff0c\u4e5f\u5305\u62ec\u52a0\u901f\u5ea6\u3002 \u76f8\u5c0d\u800c\u8a00\uff0c\u5ee3\u7fa9\u76f8\u5c0d\u8ad6\uff08general relativity\uff09\u5247\u662f\u628a\u9019\u4e9b\u6982\u5ff5\u5ef6\u4f38\u51fa\u4f86\u5230\u5176\u4ed6\u5834\u57df\uff0c\u4f8b\u5982\u91cd\u529b\u3002
\u72f9\u7fa9\u76f8\u5c0d\u8ad6\u4e2d\u7684\u52a0\u901f\u5ea6\u7531\u65bc\u5730\u7403\u7684\u6642\u7a7a\u5f4e\u66f2\u4e26\u4e0d\u660e\u986f\uff0c\u6240\u4ee5\u4e00\u822c\u5728\u5be6\u52d9\u4e0a\u7684\u8a08\u7b97\u50c5\u8003\u616e\u72f9\u7fa9\u76f8\u5c0d\u8ad6\u662f\u5408\u7406\u7684\uff0c\u4f46\u4ee5\u56b4\u8b39\u7684\u8a08\u7b97\u4f86\u8aaa\uff0c\u6211\u5011\u4ecd\u9700\u8981\u900f\u904e\u5ee3\u7fa9\u76f8\u5c0d\u8ad6\uff08\u91cd\u529b\u5834\uff09\u4f86\u8a08\u7b97\u52a0\u901f\u5ea6\u3002
It helps in analyzing gravitation to consider a situation where gravity is mocked up by acceleration. Focus attention on a region so far from any attracting matter, and so free of disturbance, that spacetime there can be consider to be flat and to have Lorentz geometry. .... When spacetime is flat, move however one will, special relativity can handle the job.
\u2014 Misner, Thorne, Wheeler: GRAVITATION Ch. 6.1 Accelerated Observers can be Analyzed Using Special Relativity
"},{"location":"feedback/physics/special-relativity/#\u6642\u7a7a\u8b8a\u5316\u91cf","title":"\u6642\u7a7a\u8b8a\u5316\u91cf","text":""},{"location":"feedback/physics/special-relativity/#\u7a7a\u9593\u8b8a\u5316\u91cf","title":"\u7a7a\u9593\u8b8a\u5316\u91cf","text":""},{"location":"feedback/physics/special-relativity/#\u6642\u9593\u8b8a\u5316\u91cf","title":"\u6642\u9593\u8b8a\u5316\u91cf","text":""},{"location":"feedback/physics/special-relativity/#\u7b1b\u5361\u723e\u5ea7\u6a19\u7cfb","title":"\u7b1b\u5361\u723e\u5ea7\u6a19\u7cfb","text":"\u4e4b\u6240\u4ee5\u5728\u9019\u500b\u6a19\u984c\u5b9a\u70ba\u7b1b\u5361\u723e\u5ea7\u6a19\u7cfb\uff0c\u662f\u56e0\u70ba\u6211\u60f3\u7d00\u5ff5\u4e00\u4e0b\u9019\u500b\u7aae\u76e1\u5047\u60f3\u7684\u6578\u5b78\u5bb6\u3002 \u96d6\u7136\u6211\u5011\u73fe\u5728\u53ef\u4ee5\u975e\u5e38\u81ea\u7136\u7684\u4f7f\u7528\u9019\u500b\u5750\u6a19\u7cfb\uff0c\u4f46\u628a\u4e00\u7dad\u7684\u89c0\u5ff5\u5ef6\u4f38\u5230\u4e86\u4e8c\u7dad\u548c\u4e09\u7dad\u7684\u9019\u7a2e\u505a\u6cd5\uff0c\u5176\u5be6\u4ed4\u7d30\u601d\u8003\u4e4b\u5f8c\u6703\u767c\u73fe\u9019\u662f\u500b\u975e\u5e38\u4e86\u4e0d\u8d77\u7684\u7a81\u7834\u3002 \u4e26\u4f9d\u6b64\u4f5c\u70ba\u5ef6\u4f38\uff0c\u6211\u5011\u5c07\u628a\u6642\u7a7a\u7684\u89c0\u5ff5\u5ef6\u4f38\u5230\u5ea7\u6a19\u7cfb\uff0c\u4e26\u4f9d\u6b64\u4f86\u8a0e\u8ad6\u9019\u4e4b\u4e2d\u7684\u89c0\u5ff5\u3002
"},{"location":"feedback/physics/special-relativity/#\u52de\u4f96\u8332\u8b8a\u63db","title":"\u52de\u4f96\u8332\u8b8a\u63db","text":""},{"location":"feedback/physics/special-relativity/#\u529b\u5b78\u7684\u9032\u5316","title":"\u529b\u5b78\u7684\u9032\u5316","text":""},{"location":"feedback/physics/special-relativity/#\u56db\u7dad\u901f\u5ea6","title":"\u56db\u7dad\u901f\u5ea6","text":""},{"location":"feedback/physics/special-relativity/#\u8cea\u80fd\u7b49\u50f9","title":"\u8cea\u80fd\u7b49\u50f9","text":""},{"location":"feedback/physics/special-relativity/#\u66f4\u591a\u5730\u5ef6\u4f38","title":"\u66f4\u591a\u5730\u5ef6\u4f38","text":""},{"location":"feedback/physics/special-relativity/#\u7d50\u8ad6","title":"\u7d50\u8ad6","text":"\u7b2c\u4e94\u7dad\u5ea6\uff1a\u53ef\u80fd\u6027
"},{"location":"feedback/site-reliability-workbook/","title":"\u7db2\u7ad9\u53ef\u9760\u6027\u7684\u5de5\u4f5c\u624b\u518a","text":"The Site Reliability Workbook, Practical Ways to Implement SRE
\u7522\u54c1\u958b\u767c\u5718\u968a \u548c \u7dad\u904b\u5718\u968a \u5f7c\u6b64\u4e4b\u9593\u662f\u6709\u9d3b\u6e9d\u7684\uff0c \u5169\u8005\u5728\u8a2d\u8a08\u67b6\u69cb\u4e0a\u4e5f\u6703\u56e0\u70ba\u7acb\u5834\u4e0d\u540c\u800c\u6709\u4e0d\u540c\u898b\u89e3\u3002
\u6839\u64da\u7d93\u9a57\uff0cGoogle \u8a8d\u70ba\u6700\u91cd\u8981\u7684\u529f\u80fd\u662f\u53ef\u7528\u6027\uff0c\u800c\u9019\u500b\u529f\u80fd\u904d\u53ca\u6240\u6709\u7dda\u4e0a\u7522\u54c1\u3002 \u300c\u529f\u80fd\u300d\u50b3\u7d71\u4e0a\u88ab\u8a8d\u70ba\u662f\u7522\u54c1\u958b\u767c\u5718\u968a\u8ca0\u8cac\uff0c\u800c\u300c\u53ef\u7528\u6027\u300d\u50b3\u7d71\u4e0a\u88ab\u8a8d\u70ba\u662f\u7dad\u904b\u5718\u968a\u8ca0\u8cac\uff0c \u900f\u904e\u628a\u53ef\u7528\u6027\u8b8a\u6210\u7522\u54c1\u529f\u80fd\u7684\u8a8d\u77e5\uff0c\u5f4c\u5e73\u5169\u8005\u4e4b\u9593\u7684\u9d3b\u6e9d\u3002 \u5728\u8a2d\u8a08\u4e4b\u521d\u7f3a\u4e4f\u53ef\u7528\u6027\u7684\u8003\u91cf\u76f8\u7576\u65bc\u7528\u66f4\u9ad8\u7684\u71df\u904b\u6210\u672c\u53bb\u8a2d\u8a08\u66f4\u5c11\u7684\u529f\u80fd\uff0c \u76f8\u53cd\u7684\uff0c\u8003\u91cf\u53ef\u7528\u6027\u4e0b\u6301\u7e8c\u8a2d\u8a08\u3001\u8fed\u4ee3\u7522\u54c1\uff0c\u6700\u7d42\u900f\u904e\u4f4e\u71df\u904b\u6210\u672c\u9054\u5230\u7a69\u5065\u4e14\u53ef\u64f4\u5145\u7684\u7522\u54c1\uff0c \u9019\u7a2e\u8a2d\u8a08\u65b9\u5f0f\uff0c\u7a31\u70ba \u975e\u62bd\u8c61\u5927\u578b\u7cfb\u7d71\u8a2d\u8a08\uff08Non-Abstract Large System Design\uff09\u3002
SRE\uff08Site Reliability Engineering\uff09\u5c31\u662f\u5169\u5718\u968a\u7684\u6a4b\u6a11\uff0c\u4e5f\u662f\u5be6\u8e10\u975e\u62bd\u8c61\u5927\u578b\u7cfb\u7d71\u8a2d\u8a08\u7684\u57fa\u790e\u3002 SRE \u4e0d\u4e00\u5b9a\u662f\u4e00\u500b\u5718\u968a\uff0c\u4e5f\u53ef\u4ee5\u662f\u4e00\u7a2e\u6df1\u5165\u5728\u958b\u767c\u5718\u968a\u548c\u7dad\u904b\u5718\u968a\u7684\u6587\u5316\u3002
\u4ec0\u9ebc\u6587\u5316\uff1f\u4ee5\u4e0b\u5c07\u5f9e\u5404\u500b\u9762\u5411\u53bb\u63a2\u8a0e\uff1a
\u5c0d\u6211\u4f86\u8aaa\u7dad\u904b\u662f\u56f0\u96e3\u7684\uff0c\u4f46\u662f\u5fc5\u9808\u8981\u5148\u91d0\u6e05\u4ec0\u9ebc\u662f\u7dad\u904b\u3002
\u7dad\u6301\u904b\u4f5c\uff0c\u4e0d\u50c5\u50c5\u662f\u529f\u80fd\u51fa\u932f\u4e86\u4fee\u4fee\u88dc\u88dc\uff0c\u6216\u8005\u4f9d\u8cf4\u5957\u4ef6\u7248\u672c\u66f4\u65b0\uff0c \u66f4\u591a\u7684\u662f\u4f60\u8981\u53bb\u9762\u5c0d\u5f88\u591a\u96e3\u4ee5\u6289\u64c7\u7684\u9078\u64c7\uff0c\u4f8b\u5982\uff1a
\u9019\u4e9b\u90fd\u662f\u9700\u8981\u82b1\u6642\u9593\uff0c\u975c\u4e0b\u4f86\u597d\u597d\u601d\u8003\uff0c\u6478\u7d22\u53ef\u80fd\u7684\u539f\u56e0\u548c\u65b9\u6848\uff0c\u548c\u5404\u500b\u5718\u968a\u6e9d\u901a\u66b8\u89e3\uff0c \u6700\u7d42\u7684\u624b\u6bb5\u751a\u81f3\u53ea\u662f\u500b\u59a5\u5354\u65b9\u6848\uff0c\u9019\u4e9b\u90fd\u518d\u518d\u8003\u9a57\u7dad\u904b\u4eba\u54e1\u7684\u667a\u6167\u548c\u7d93\u9a57\u3002
\u771f\u6b63\u6709\u6548\u7684\u5de5\u4f5c\u65b9\u5f0f\uff0c\u4e0d\u662f\u9435\u4eba\u4e09\u9805\u6216\u99ac\u62c9\u677e\uff0c\u6bd4\u8ab0\u5805\u6301\u7684\u6642\u9593\u9577\uff0c\u800c\u662f\u77ed\u8dd1\uff0c\u7576\u6a5f\u6703\u4f86\u81e8\u7684\u6642\u5019\u885d\u523a\uff0c\u5e73\u6642\u6ce8\u610f\u8eab\u9ad4\u5065\u5eb7\u548c\u4f11\u606f\u3002
\u2014 Naval Ravikant
"},{"location":"feedback/site-reliability-workbook/canary-release/","title":"\u91d1\u7d72\u96c0\u90e8\u7f72","text":"\u8a31\u591a\u5de5\u5177\u53ef\u4ee5\u5e6b\u52a9\u4f60\u5efa\u7acb\u91d1\u7d72\u96c0\u90e8\u7f72\uff0c\u4f46\u6700\u7d42\u9084\u662f\u8981\u6839\u64da\u9700\u6c42\u548c\u7cfb\u7d71\u74b0\u5883\u4f86\u5efa\u7acb\u4f60\u7684\u6e2c\u8a66\u7b56\u7565\uff0c \u9019\u985e\u7684\u9700\u6c42\u88ab\u7a31\u4e4b\u70ba\u90e8\u5c6c\u5de5\u7a0b\u3002
"},{"location":"feedback/site-reliability-workbook/configuration-best-practice/","title":"\u8a2d\u5b9a\u6a94\u7684\u6700\u4f73\u5be6\u8e10","text":"\u8a2d\u5b9a\u6a94\u6703\u7570\u52d5\u7684\u6642\u9593\u9ede\u901a\u5e38\u6709\u5169\u500b\uff0c\u4e00\u500b\u662f\u4f60\u5728\u5efa\u7acb\u670d\u52d9\u4e4b\u521d\uff0c\u4e00\u500b\u662f\u5728\u7dca\u6025\u60c5\u6cc1\u9700\u8981\u8abf\u6574\u670d\u52d9\u884c\u70ba\u3002
\u6bcf\u4e00\u6b21\u7570\u52d5\u8a2d\u5b9a\u6a94\u90fd\u662f\u4e00\u500b\u98a8\u96aa\uff0c\u70ba\u4e86\u8b93\u5c0d\u65bc\u670d\u52d9\u4e0d\u719f\u6089\u7684\u4eba\u80fd\u5920\u5feb\u901f\u7406\u89e3\u8a2d\u5b9a\u6a94\u7684\u610f\u7fa9\uff0c \u9700\u8981\u5728\u8a2d\u8a08\u8a2d\u5b9a\u6a94\u7684\u6642\u5019\uff0c\u628a\u53ef\u8b80\u6027\u548c\u5b89\u5168\u6027\u7b49\u5404\u500b\u9762\u5411\u8003\u616e\u9032\u53bb\u3002
\u6587\u4e2d\u4ecb\u7d39\u5f88\u591a\u9762\u5411\u7684\u5efa\u8b70\u3001\u5be6\u969b\u7bc4\u4f8b\u9084\u6709\u63a8\u85a6\u8a2d\u5b9a\u8a9e\u8a00\u4f86\u6e1b\u5c11\u52de\u52d5\u529b\u3002
"},{"location":"feedback/site-reliability-workbook/data-pipelines/","title":"\u8cc7\u6599\u7ba1\u7dda\u8a2d\u8a08","text":"\u8cc7\u6599\u7ba1\u7dda\u6703\u628a\u90a3\u4e9b\u8d85\u5927\u91cf\u5931\u5e8f\u7684\u8cc7\u6599\uff08\u4f8b\u5982\u4f7f\u7528\u8005\u64cd\u4f5c\u6b77\u7a0b\u3001\u61c9\u7528\u65e5\u8a8c\u7b49\u7b49\uff09\u6574\u5408\u6210\u7d50\u69cb\u5316\u3001\u6392\u5e8f\u7684\u8cc7\u6599\u3002
\u901a\u5e38\u8cc7\u6599\u7ba1\u7dda\u7684\u8a2d\u8a08\u6703\u6839\u64da\u5546\u52d9\u9700\u6c42\u53bb\u8a2d\u8a08\uff0c\u4e5f\u5c31\u662f\u9019\u500b\u516c\u53f8\u7684\u67b6\u69cb\u53ef\u80fd\u5f88\u96e3\u5957\u9032\u53e6\u4e00\u9593\u516c\u53f8\u3002 \u4f46\u662f\u8a2d\u8a08\u7684\u6a21\u5f0f\u548c\u4e00\u4e9b\u6700\u4f73\u5be6\u4f5c\u7684\u6307\u5357\u4ecd\u80fd\u5728\u958b\u767c\u968e\u6bb5\u88ab\u5957\u7528\u9032\u4f86\u3002 \u9664\u6b64\u4e4b\u5916\uff0c\u81ea\u52d5\u5316\u7684\u5de5\u5177\u5728\u67d0\u4e9b\u5834\u666f\u4e5f\u662f\u5fc5\u8981\u7684\u3002
"},{"location":"feedback/site-reliability-workbook/incident-response/","title":"\u707d\u96e3\u7ba1\u7406","text":"\u707d\u96e3\u7ba1\u7406\u548c\u707d\u96e3\u8655\u7406\u7684\u5dee\u7570\u5728\u65bc\uff1a \u8655\u7406\u707d\u96e3\u4ee3\u8868\u6e1b\u8f15\u885d\u64ca\u6216\uff08\u4e14\uff09\u628a\u670d\u52d9\u6062\u5fa9\u5230\u4ee5\u524d\u7684\u72c0\u614b\uff0c\u901a\u5e38\u4ee3\u8868\u7684\u662f\u4e8b\u767c\u6642\u7684\u6025\u6551\u65b9\u6848\uff1b \u800c\u707d\u96e3\u7ba1\u7406\u4ee3\u8868\u4ee5\u6709\u6548\u7684\u65b9\u5f0f\u5354\u8abf\u5718\u968a\u7684\u5de5\u4f5c\uff0c\u4e26\u78ba\u4fdd\u6e9d\u901a\uff08\u5305\u542b\u5c0d\u5916\uff09\u7ba1\u9053\u7684\u66a2\u901a\u3002
\u5f88\u591a\u4e8b\u60c5\u90fd\u6703\u6709\u610f\u5916\u4e8b\u4ef6\u767c\u751f\uff0c\u4e0d\u7ba1\u662f \u68ee\u6797\u91ce\u706b\u3001 \u706b\u8eca\u7ffb\u8986\u3001 \u98df\u54c1\u885b\u751f\u65b0\u805e\u7b49\u7b49\u3002 \u5728\u9762\u5c0d\u7dca\u6025\u4e8b\u4ef6\u6642\uff0c\u6700\u597d\u7684\u8655\u7406\u8fa6\u6cd5\u5c31\u662f\u4e8b\u524d\u7df4\u7fd2\u4e26\u898f\u5283\u597d\u6709\u7cfb\u7d71\u7684\u6307\u5357\u3002 \u5373\u4f7f\u767c\u751f\u4e86\u6c92\u9047\u904e\u7684\u72c0\u6cc1\uff0c\u900f\u904e \u63d0\u524d\u7684\u5206\u5de5 \u548c \u5de5\u4f5c\u7684\u7d50\u69cb\u5316\uff0c \u5c07\u6703\u8b93\u8655\u7406\u4eba\u54e1\u6709\u500b\u4f9d\u8a17\u4e26\u8f03\u70ba\u51b7\u975c\u9762\u5c0d\u3002
"},{"location":"feedback/site-reliability-workbook/incident-response/#\u5206\u5de5","title":"\u5206\u5de5","text":"\u5206\u5de5\u57fa\u672c\u4e0a\u5206\u70ba\u5169\u5927\u90e8\u5206\uff1a\u6e9d\u901a \u548c \u8655\u7406\u3002 \u900f\u904e\u4e3b\u8981\u6307\u63ee\u5b98\uff08Incident Commander, IC\uff09\u3001 \u6e9d\u901a\u9818\u5c0e\uff08Communications Lead, CL\uff09\u548c\u8655\u7406\u9818\u5c0e\uff08Operations Lead, Ops Lead, OL\uff09\uff0c \u628a\u76f8\u95dc\u5de5\u4f5c\u5283\u5206\u597d\u3002
IC \u7684\u5de5\u4f5c\u4fdd\u62ec\uff1a
\u5982\u679c\u4e8b\u4ef6\u5920\u5927\uff0cIC \u53ef\u80fd\u6703\u628a\u6e9d\u901a\u7684\u4efb\u52d9\u6307\u6d3e\u7d66\u4e00\u500b CL\uff0c\u9664\u6b64\u4e4b\u5916\uff0c\u4ed6\u53ef\u80fd\u9084\u6703\u6709\u9019\u4e9b\u8077\u8cac\uff1a
OL \u5247\u662f\u5c08\u6ce8\u5728\uff1a
Google Home\uff08\u4ee5\u4e0b\u7c21\u7a31 GH\uff09\u662f\u4e00\u500b\u667a\u80fd\u7ba1\u5bb6\uff0c\u7576\u4f60\u9700\u8981\u8acb\u4ed6\u8655\u7406\u4e8b\u60c5\u6642\uff0c\u4f8b\u5982\u6253\u958b\u5ba2\u5ef3\u96fb\u71c8\uff0c \u9700\u8981\u5148\u89f8\u767c\u95dc\u9375\u5b57\uff08hotword\uff09\uff0c\u4f8b\u5982 OK Google\u3002 \u6bcf\u500b\u4eba\u5728\u8aaa\u9019\u500b\u95dc\u9375\u5b57\u6642\uff0c\u53ef\u80fd\u7684\u8a9e\u8abf\u548c\u53e3\u6c23\u90fd\u4e0d\u4e00\u6a23\uff0c\u6545\u800c\u4f7f\u7528\u8005\u9700\u8981\u63d0\u4f9b\u8a13\u7df4\u7d20\u6750\u4f86\u5e6b\u52a9\u8fa8\u8b58\u3002 \u9019\u500b\u7d20\u6750\u6703\u88ab\u5b58\u653e\u5728\u96f2\u7aef\uff0c\u4f46\u662f\u8a13\u7df4\u7d50\u679c\u7684\u53c3\u6578\u6703\u653e\u5728\u5ba2\u6236\u7684\u88dd\u7f6e\u4e0a\uff0c \u6545\u800c GH \u6703\u9700\u8981\u5b9a\u671f\u53bb\u548c server \u53d6\u5f97\u8a13\u7df4\u7d50\u679c\u3002
\u5728\u4e00\u6b21\u7248\u672c\u66f4\u65b0\uff08v1.88\uff09\u4e2d\uff0c\u88e1\u9762\u6709\u4e00\u500b\u932f\u8aa4\u6703\u5c0e\u81f4 GH \u53bb\u8ddf server \u8981\u7684\u6b21\u6578\u8b8a\u6210\u4e00\u822c\u7684 50 \u500d\u3002 \u5728 5 \u6708 22 \u865f\u79ae\u62dc\u4e00\u4e2d\uff0c \u4e00\u500b\u5f85\u547d\u5c0f\u7d44\u6210\u70ba Jasper \u89c0\u5bdf\u5230\u6bcf\u79d2\u5b58\u53d6\u91cf\uff08queries per second, QPS\uff09\u8b8a\u9ad8\u4e86\uff0c \u6545\u800c\u66ab\u505c\u65b0\u7248\u672c\u7684\u63a8\u5ee3\uff0c\u8b93\u4ed6\u505c\u5728 25% \u7684\u63a8\u5ee3\u6bd4\u4f8b\uff08\u4e5f\u5c31\u662f\u7dda\u4e0a\u6709\u56db\u5206\u4e4b\u4e00\u7684\u7528\u6236\u4f7f\u7528\u65b0\u7248\u672c\uff09\u3002 Jasper \u958b\u7968\u8ffd\u8e64\u9019\u500b\u7570\u5e38\u72c0\u614b\uff0c\u4e26\u5099\u8a3b\u77ed\u6642\u9593\u7684\u5b58\u53d6\u91cf\u4f86\u5230\u4e00\u822c\u60c5\u6cc1\u7684 50 \u500d\u3002
\u958b\u767c\u8005 Melinda \u628a\u9019\u500b\u554f\u984c\u9023\u7d50\u5230\u4e4b\u524d\u7684\u67d0\u4e00\u5f35\u820a\u7684\u7968\uff0c \u9019\u500b\u820a\u7684\u7968\u662f\u5728\u8aaa\u660e GH \u6bcf\u6b21\u5237\u65b0\u767b\u5165\u72c0\u614b\u90fd\u6703\u4e0d\u88ab\u9810\u671f\u7684\u53bb\u5b58\u53d6\u4e00\u6b21\u95dc\u9375\u5b57\u7684\u8a13\u7df4\u7d50\u679c\uff0c \u800c\u9019\u500b\u932f\u8aa4\u9810\u671f\u6703\u5728\u9019\u6b21\u7248\u672c\u66f4\u65b0\uff08v1.88\uff09\u4e2d\u88ab\u89e3\u6c7a\uff0c \u6240\u4ee5\u6700\u7d42\u8a8d\u70ba\u9019\u500b\u7570\u5e38\u6d41\u91cf\u61c9\u8a72\u6703\u662f\u66ab\u6642\u6027\u7684\u554f\u984c\uff0c\u6240\u4ee5\u628a\u6d41\u91cf\u9650\u5236\u62c9\u5927\uff0c\u4e26\u63d0\u9ad8\u63a8\u5ee3\u7a0b\u5ea6\u3002
\u7576\u670d\u52d9\u5728 5 \u6708 31 \u865f\u79ae\u62dc\u4e09\u88ab\u63a8\u5ee3\u5230 50% \u6642\uff0c\u4ed6\u5011\u767c\u73fe\u9019\u554f\u984c\u7684\u6839\u56e0\u4e26\u4e0d\u662f\u9810\u671f\u7684\u820a\u932f\u8aa4\uff0c \u56e0\u70ba\u63d0\u9ad8\u63a8\u5ee3\u7a0b\u5ea6\u61c9\u8a72\u8b93\u9019\u500b\u6d41\u91cf\u4e0b\u964d\uff0c\u4f46\u662f\u537b\u4e0a\u5347\u4e86\u3002 \u540c\u4e00\u5929\uff0c\u5ba2\u670d\u958b\u59cb\u6536\u5230\u4e00\u4e9b\u56de\u5831\uff0c\u8aaa\u660e GH \u5728\u555f\u52d5\u6642\u6536\u5230\u932f\u8aa4\u8a0a\u606f\uff0c \u800c\u9019\u500b\u932f\u8aa4\u8a0a\u606f\u7d93\u904e\u958b\u767c\u5718\u968a\u78ba\u8a8d\u6b63\u662f\u89f8\u767c\u9650\u6d41\u5c0e\u81f4\u7684\u932f\u8aa4\u72c0\u614b\u3002 \u4ed6\u5011\u518d\u4e00\u6b21\u7684\u628a\u6d41\u91cf\u9650\u5236\u62c9\u5927\uff0c\u7d13\u7de9\u4e86\u932f\u8aa4\u767c\u751f\uff0c\u4e26\u9032\u4e00\u6b65\u8ffd\u8e64\u9019\u500b\u932f\u8aa4\u539f\u56e0\u3002 \u96d6\u7136\u9019\u500b\u932f\u8aa4\u662f\u5f8c\u7aef\u958b\u767c\u770b\u5230\u7684\u932f\u8aa4\uff0c\u4f46\u662f\u56e0\u70ba\u9019\u662f\u524d\u7aef\u958b\u767c\u88fd\u9020\u7684\u932f\u8aa4\uff0c \u6240\u4ee5\u5728\u8ffd\u8e64\u521d\u671f\u671d\u8457\u7684\u65b9\u5411\u5b8c\u5168\u662f\u932f\u8aa4\u7684\uff0c\u4e5f\u52a0\u4e0a\u9019\u500b\u932f\u8aa4\u4e26\u6c92\u6709\u88ab\u63d0\u9ad8\u7b49\u7d1a\u5230\u4e8b\u4ef6\uff08incident\uff09\uff0c \u6240\u4ee5\u524d\u5f8c\u7aef\u958b\u767c\u8005\u7684\u6e9d\u901a\u4ecd\u6709\u9650\u3002
\u958b\u767c\u8457\u958b\u59cb\u5617\u8a66\u5728\u65b0\u7248\u672c\u4e2d\u52a0\u4e0a\u4e00\u4e9b\u65e5\u8a8c\uff0c\u4f86\u5e6b\u52a9\u6392\u67e5\u554f\u984c\uff0c\u4f46\u662f\u56e0\u70ba\u6d41\u91cf\u9650\u5236\u958b\u5927\u7684\u95dc\u4fc2\uff0c \u6c92\u6709\u4efb\u4f55\u4f7f\u7528\u8005\u56de\u5831\u9650\u6d41\u7684\u932f\u8aa4\u72c0\u614b\uff0c\u6545\u800c\u6c7a\u5b9a\u9032\u4e00\u6b65\u63d0\u9ad8\u63a8\u5ee3\u5ea6\u3002 \u7576\u4ed6\u5011\u5728 6 \u6708 3 \u865f\u79ae\u62dc\u516d\u628a\u63a8\u5ee3\u5ea6\u63d0\u9ad8\u5230 100% \u6642\uff0c\u5ba2\u670d\u958b\u59cb\u6536\u5230\u90e8\u5206\u7684\u932f\u8aa4\u56de\u5831\uff0c \u5118\u7ba1\u6536\u5230\u932f\u8aa4\u56de\u5831\uff0c\u56e0\u70ba\u5728\u9031\u672b\uff0c\u958b\u767c\u5718\u968a\u4ecd\u6c92\u6709\u628a\u9019\u932f\u8aa4\u63d0\u5347\u5230\u4e8b\u4ef6\uff0c \u4e26\u4f9d\u7167\u6b63\u5e38\u8655\u7406\u932f\u8aa4\u7684\u6d41\u7a0b\uff0c\u5728\u958b\u7968\u8ffd\u8e64\u7cfb\u7d71\u8a0e\u8ad6\u548c\u8655\u7406\u3002
\u5230\u4e86\u9694\u5929\u9031\u65e5\uff0c\u7531\u65bc\u932f\u8aa4\u56de\u5831\u6301\u7e8c\u4e0a\u5347\uff0c\u958b\u767c\u5718\u968a\u7d42\u65bc\u628a\u9019\u500b\u932f\u8aa4\u63d0\u5347\u5230\u6700\u9ad8\u5c64\u7d1a\uff0c \u7531\u65bc\u932f\u8aa4\u7387\u4e0a\u5347\uff0c\u5f85\u547d\u5c0f\u7d44\u8acb\u6c42 SRE \u5718\u968a\u628a\u7bc0\u9ede\u6578\u62c9\u5927\uff08\u63d0\u5347\u8ca0\u8f09\u80fd\u529b\uff09\u4e26\u5c07\u6d41\u91cf\u5c0e\u5f15\u5230\u65b0\u7684\u7bc0\u9ede\uff0c \u4f46\u56e0\u70ba\u662f\u9650\u6d41\u932f\u8aa4\uff0c\u6240\u4ee5\u5373\u4f7f\u62c9\u9ad8\u8ca0\u8f09\uff0c\u65b0\u7684\u7bc0\u9ede\u4ecd\u6703\u62d2\u7d55\u8655\u7406\u9ad8\u4f75\u767c\u7684\u55ae\u4e00\u4f7f\u7528\u8005\u8acb\u6c42\uff0c \u6545\u800c\u628a\u554f\u984c\u66f4\u805a\u7126\u5728\u9650\u6d41\u7684\u539f\u56e0\u4e0a\u9762\u3002 \u6700\u7d42\u5c08\u6848\u7ba1\u7406\u54e1\u518d\u4e00\u6b21\u8acb\u6c42\u63d0\u9ad8\u9650\u6d41\u5f8c\uff0c\u554f\u984c\u88ab\u8212\u7de9\uff0c\u540c\u6642\u958b\u767c\u8005\u4e5f\u5728\u96c6\u4e2d\u6e9d\u901a\u7684\u60c5\u6cc1\u4e0b\u66b8\u89e3\u5f7c\u6b64\u72c0\u6cc1\uff0c \u4e26\u9032\u4e00\u6b65\u6392\u67e5\u51fa\u6839\u56e0\u3002
"},{"location":"feedback/site-reliability-workbook/incident-response/#google-home-\u4e8b\u4ef6\u7684\u4e8b\u5f8c\u5206\u6790","title":"Google Home \u4e8b\u4ef6\u7684\u4e8b\u5f8c\u5206\u6790","text":"\u56e0\u70ba\u958b\u767c\u8005\u5728\u9031\u672b\u4ecd\u81f4\u529b\u65bc\u8655\u7406\u9019\u500b\u554f\u984c\uff0c\u6240\u4ee5\u5373\u4f7f\u5728\u9031\u672b\uff0c\u9019\u554f\u984c\u4ecd\u88ab\u89e3\u6c7a\u4e86\uff0c \u4f46\u9019\u4e26\u4e0d\u662f\u4e00\u500b\u597d\u7684\u8655\u7406\u554f\u984c\u65b9\u5f0f\uff0c\u56e0\u70ba\u6700\u7d42\u6211\u5011\u90fd\u5e0c\u671b\u516c\u53f8\u6210\u70ba\u4e00\u500b\u80fd\u66ff\u54e1\u5de5\u5e73\u8861\u5de5\u4f5c\u548c\u751f\u6d3b\u7684\u5730\u65b9\u3002
\u7b2c\u4e00\u500b\uff0c\u4e0d\u8981\u5728\u9031\u672b\u628a\u63a8\u5ee3\u7a0b\u5ea6\u62c9\u9ad8\u3002 \u518d\u4f86\uff0c\u8655\u7406\u554f\u984c\u7b2c\u4e00\u6b65\u901a\u5e38\u90fd\u662f\u907f\u514d\u932f\u8aa4\u7e7c\u7e8c\u64f4\u6563\uff0c \u7576\u932f\u8aa4\u72c0\u6cc1\u88ab\u7d13\u7de9\u6642\uff0c\u61c9\u8a72\u8981\u5c08\u6ce8\u65bc\u6392\u67e5\u554f\u984c\u7684\u6839\u56e0\uff0c\u800c\u4e0d\u662f\u7e7c\u7e8c\u63a8\u5ee3\u65b0\u7248\u672c\u3002 \u6700\u5f8c\uff0c\u7576\u554f\u984c\u6392\u67e5\u4e0d\u6e05\u6642\uff0c\u61c9\u8a72\u5c07\u932f\u8aa4\u63d0\u5347\u5230\u4e8b\u4ef6\uff0c\u4e26\u53ec\u96c6\u76f8\u95dc\u4eba\u58eb\u4e00\u8d77\u4f86\u8655\u7406\uff0c\u9019\u6a23\u53ef\u4ee5\u907f\u514d\uff1a
\u96c6\u4e2d\u5316\u7684\u8a0e\u8ad6\u662f\u89e3\u6c7a\u4e8b\u4ef6\u7684\u6838\u5fc3\uff0c\u4f8b\u5982\u53ec\u96c6\u4e00\u7fa4\u4eba\u5750\u5728\u4e00\u500b\u6703\u8b70\u5ba4\u6216\u8005\u4e00\u5834\u7dda\u4e0a\u6703\u8b70\uff0c\u4e26\u5373\u6642\u7684\u8a0e\u8ad6\u548c\u9762\u5c0d\u3002
"},{"location":"feedback/site-reliability-workbook/incident-response/#\u5148\u53ef\u7528\u518d\u627e\u6839\u56e0","title":"\u5148\u53ef\u7528\u518d\u627e\u6839\u56e0","text":"Kubernetes \u662f\u4e00\u500b\u5bb9\u5668\u7ba1\u7406\u670d\u52d9\uff0cGoogle \u6709\u5728\u96f2\u7aef\u4e0a\u63d0\u4f9b\u8a17\u7ba1\u670d\u52d9\uff0c\u7a31\u5176\u70ba Google Kubernetes Engine, GKE\u3002 GKE \u5728\u555f\u52d5\u4e4b\u521d\u6703\u5148\u53bb\u7372\u5f97\u670d\u52d9\u9700\u8981\u7684\u93e1\u50cf\u6a94\uff0c\u4f8b\u5982\u7ba1\u7406\u5bb9\u5668\u9700\u8981\u7684\u6392\u7a0b\u5668\u3001\u8ca0\u8f09\u5e73\u8861\u5668\u7b49\u7b49\u3002 \u4f46\u56e0\u70ba Kubernetes \u662f\u4e00\u500b\u958b\u6e90\u670d\u52d9\uff0c\u6240\u4ee5\u6709\u4e9b\u65b0\u7684\u4f9d\u8cf4\u6703\u5728\u7248\u672c\u66f4\u65b0\u6216\u7279\u5b9a\u60c5\u6cc1\u4e0b\u88ab\u65b0\u589e\u9032\u4f86\u3002
\u65e9\u4e0a 6:41 \u6642\uff0cZara \u958b\u59cb\u6ce8\u610f\u5230 Europe-West \u5340\u57df\u555f\u52d5 GKE \u670d\u52d9\u7684\u932f\u8aa4\u7387\u904e\u9ad8\u7684\u544a\u8b66\uff0c \u4e26\u5728 7:06 \u958b\u59cb\u5ba3\u544a\u4e8b\u4ef6\uff0c\u8eab\u70ba\u5ba3\u544a\u4e8b\u4ef6\u8005\uff0cZara \u5c31\u8b8a\u6210\u4e86\u9810\u8a2d\u7684\u4e8b\u4ef6\u6307\u63ee\u5b98\u3002 Zara \u628a\u76f8\u95dc\u60c5\u6cc1\u544a\u8a34\u7d66 Rohit \u4e26\u6307\u6d3e\u5176\u8ca0\u8cac\u5c0d\u5916\uff08GKE \u7684\u4f7f\u7528\u8005\uff09\u6e9d\u901a\u7684\u7a97\u53e3\uff0c Rohit \u5247\u5728 7:24 \u958b\u59cb\u544a\u77e5\u7576\u5730\u5340\u57df\u7684\u5ba2\u6236\u76ee\u524d\u7121\u6cd5\u555f\u52d5\u670d\u52d9\uff0c\u4f46\u662f\u73fe\u6709\u7684\u670d\u52d9\u4ecd\u7136\u53ef\u4ee5\u904b\u884c\u3002
\u5728 8:20 \u524d\uff0c\u5718\u968a\u767c\u73fe\u9019\u6a23\u4e00\u500b log\uff1a
error: failed to run Kubelet: cannot create certificate signing request: Post\nhttps://192.0.2.53/apis/certificates.k8s.io/v1beta1/certificatesigningrequests\n
\u5718\u968a\u958b\u59cb\u5617\u8a66\u9a57\u8b49\u6191\u8b49\u7684\u76f8\u95dc\u64cd\u4f5c\uff0c\u5404\u81ea\u7368\u7acb\u6642\u90fd\u80fd\u904b\u4f5c\uff0c\u4f46\u662f\u7576\u628a\u670d\u52d9\u6574\u5408\u5728\u4e00\u8d77\u6642\uff0c\u5c31\u662f\u6703\u932f\u3002 Zara \u65bc\u662f\u628a\u8655\u7406\u9032\u5ea6\u6574\u7406\u8d77\u4f86\uff0c\u4e26\u5728 8:22 \u958b\u59cb\u5411\u76f8\u95dc\u6e9d\u901a\u7cfb\u7d71\u901a\u5831\uff0c\u8acb\u6c42\u5927\u5bb6\u7684\u5354\u52a9\u3002 \u5230\u4e86 8:45 \u8cc7\u6df1 SRE Il-Seong \u958b\u59cb\u9032\u73ed\uff0c\u4ed6\u9996\u5148\u78ba\u8a8d\u4e86\u7576\u65e5\u66f4\u65b0\u548c\u544a\u8b66\u4e4b\u9593\u7684\u95dc\u4fc2\uff0c \u5728\u78ba\u8a8d\u4e86\u5169\u8005\u4e4b\u9593\u7121\u95dc\u4fc2\u4e4b\u5f8c\uff0c\u958b\u59cb\u628a\u76f8\u95dc\u8cc7\u8a0a\u6574\u5408\u9032\u53ef\u4ee5\u5171\u7de8\u7684\u6587\u4ef6\u4e2d\uff0c\u4e26\u5efa\u8b70 Zara \u8b93\u57fa\u790e\u8a2d\u65bd\u3001 \u96f2\u7aef\u7db2\u8def\u548c\u8a08\u7b97\u8cc7\u6e90\u7684\u76f8\u95dc\u5718\u968a\u90fd\u52a0\u9032\u4e8b\u4ef6\u8655\u7406\u5718\u968a\u4e2d\uff0c\u4e26\u9010\u4e00\u6392\u9664\u3002
\u96a8\u8457\u4e8b\u4ef6\u767c\u751f\u5f97\u8d8a\u4f86\u8d8a\u4e45\uff0c\u9032\u5165\u652f\u63f4\u7684\u5718\u968a\u8d8a\u4f86\u8d8a\u591a\uff0c\u6e9d\u901a\u958b\u59cb\u8b8a\u6210\u4e00\u500b\u6311\u6230\u3002 \u9019\u500b\u4e8b\u4ef6\u7684\u6307\u63ee\u5b98\u4e5f\u5728 10:00 \u6642\u5f9e Zara \u8f49\u79fb\u5230\u8cc7\u6df1\u7684 Il-Seong\uff0c \u65bc\u662f Il-Seong \u958b\u59cb\u628a\u4e8b\u4ef6\u7684\u7d93\u904e\u548c\u554f\u984c\u90fd\u6574\u7406\u548c\u7d50\u69cb\u5316\u3002 Zara \u5247\u5728\u6b64\u6642\u6210\u70ba\u8655\u7406\u9818\u5c0e\uff08OL\uff09\uff0c\u6e9d\u901a\u9818\u5c0e\uff08CL\uff09\u5247\u6307\u6d3e\u7d66 Herais\uff0c \u4e26\u5728\u7576\u4e0b\u5bc4\u9001\u300c\u5168\u9ad4\u52d5\u54e1\u300d\u7684\u4fe1\u7bb1\u7d66\u6240\u6709 GKE \u76f8\u95dc\u7684\u5de5\u7a0b\u3002
\u4e8b\u4ef6\u5230\u6b64\u6642\u6709\u4e86\u4e00\u4e9b\u6e05\u6670\u7684\u5fb5\u72c0\uff1a
\u5728\u6536\u5230\u5168\u9ad4\u52d5\u54e1\u7684\u901a\u77e5\u5f8c\uff0c\u6709\u4e00\u500b GKE \u8cc7\u5b89\u5718\u968a\u540c\u4ec1 Puanani \u52a0\u5165\u6392\u67e5\uff0c \u4e26\u6ce8\u610f\u5230\u6191\u8b49\u7c3d\u767c\u8005\u6c92\u8fa6\u6cd5\u555f\u52d5\u8d77\u4f86\u3002 \u6bcf\u6b21\u5f9e\u5916\u90e8\u5bb9\u5668\u8a3b\u518a\u5546\uff08DockerHub\uff09\u62c9\u53d6\u7684\u93e1\u50cf\u6a94\u90fd\u662f\u88ab\u7834\u58de\u7684\uff0c \u4e26\u6709\u5176\u4ed6\u540c\u4ec1\u8b49\u5be6\u9019\u72c0\u6cc1\u53ea\u5728\u6b50\u6d32\u767c\u751f\u3002 \u9019\u6642\uff0c\u6642\u9593\u662f 9:56\uff0c\u4e8b\u4ef6\u5df2\u7d93\u767c\u751f\u4e86\u4e09\u500b\u5c0f\u6642\u3002
\u9019\u6642\u6307\u63ee\u5b98 Il-Seong \u958b\u59cb\u5206\u6d3e\u5169\u500b\u4e26\u884c\u8655\u7406\u65b9\u5f0f\u7d66\u4e0d\u540c\u5de5\u7a0b\uff0c\u4e00\u500b\u662f\u4fee\u5fa9 DockerHub \u7684\u93e1\u50cf\u6a94\uff0c \u4e00\u500b\u662f\u91cd\u65b0\u8a2d\u5b9a\u53e2\u96c6\u8b93\u4ed6\u5f9e\u81ea\u5df1\u7ba1\u7406\u7684\u5bb9\u5668\u8a3b\u518a\u5546\uff08GCR\uff09\u62c9\u53d6\u93e1\u50cf\u6a94\u3002
\u7b2c\u4e00\u500b\u9078\u9805\u7684\u56f0\u96e3\u5728\u65bc\u9019\u662f\u5916\u90e8\u670d\u52d9\u63d0\u4f9b\u5546\uff0c\u8981\u5373\u6642\u7684\u6539\u52d5\u662f\u6709\u5929\u751f\u7684\u56f0\u96e3\u7684\u3002 \u7b2c\u4e8c\u500b\u9078\u9805\u4ee3\u8868\u8457\u9700\u8981\u91cd\u65b0\u7de8\u8b6f\u57f7\u884c\u6a94\uff0c\u9019\u500b\u904e\u7a0b\u5fc5\u9808\u8017\u8cbb\u4e00\u500b\u5c0f\u6642\u3002 \u5230\u4e86 10:59\uff0c\u7576\u5718\u968a\u5b8c\u6210\u4e86 90% \u7684\u7de8\u8b6f\u6642\uff0c\u4ed6\u5011\u767c\u73fe\u5176\u4ed6\u8a2d\u5b9a\u6c92\u6709\u6539\u5230 GCR\uff0c\u65bc\u662f\u91cd\u65b0\u7de8\u8b6f\u3002 \u9019\u6642\uff0c\u6709\u500b\u5de5\u7a0b Tugay \u60f3\u5230\u4e00\u500b\u7d55\u5999\u7684\u65b9\u6cd5\uff1a\u6211\u5011\u53bb hook \u5f9e DockerHub \u62c9\u53d6\u93e1\u50cf\u6a94\u7684\u8acb\u6c42\uff0c \u4e26\u5728\u56de\u61c9\u4e2d\u653e\u4e0a\u6b63\u78ba\u7684\u93e1\u50cf\u6a94\uff0c\u800c GCR \u672c\u4f86\u5c31\u6709\u8a2d\u8a08\u597d\u9019\u500b\u529f\u80fd\u4e86\uff01
\u5728\u548c GCR \u5de5\u7a0b\u78ba\u8a8d\u597d\u4e4b\u5f8c\uff0c\u4ed6\u5011\u5728\u6bcf\u6b21\u62c9\u53d6\u6642\u52a0\u4e0a\u4e00\u500b\u9078\u9805\uff1a --registry-mirror=https://mirror.gcr.io
\uff0c \u9019\u6642\uff0c11:29\uff0c\u4ed6\u5011\u6ce8\u610f\u5230\uff0c\u62c9\u53d6\u93e1\u50cf\u6a94\u7684\u904e\u7a0b\u672c\u4f86\u5c31\u6709\u9019\u500b\u9078\u9805\u4e86\uff01 \u63db\u53e5\u8a71\u8aaa\uff0c\u6709\u554f\u984c\u7684\u93e1\u50cf\u6a94\u5728 GCR\uff01 \u5230\u4e86 11:59 \u4ed6\u5011\u4fee\u5fa9\u4e86 GCR \u4e0a\u932f\u8aa4\u7684\u93e1\u50cf\u6a94\uff0c\u4e26\u4e14\u5728 12:11 \u56de\u5831\u6240\u6709\u5efa\u7acb\u53e2\u96c6\u7684\u72c0\u6cc1\u90fd\u5df2\u4e0d\u5728\u4e86\u3002 \u6b64\u6642\uff0c\u9019\u500b\u5b58\u5728 6 \u500b\u5c0f\u6642\u53c8 40 \u5206\u9418\u7684\u4e8b\u4ef6\u7d42\u65bc\u88ab\u56de\u5831\u70ba\u8655\u7406\u5b8c\u7562\uff0c\u5f8c\u7e8c\u5728\u4e8b\u4ef6\u5831\u544a\u4e2d\uff0c 6 \u500b\u5718\u968a\u300141 \u500b\u7368\u7acb\u4eba\u54e1\u51fa\u73fe\u5728\u9019\u500b 26000 \u5831\u544a\u4e2d\uff0c\u4e26\u4e14\u5728\u5831\u544a\u4e2d\u63d0\u5230 28 \u500b\u4e8b\u4ef6\u884c\u70ba\u9ede\u3002
GKE on-call \u6210\u54e1 Zara \u5feb\u901f\u767c\u73fe\u554f\u984c\u4e26\u4e14\u6307\u6d3e\u8ca0\u8cac\u9867\u5ba2\u6e9d\u901a\u7684\u89d2\u8272\uff0c\u8b93\u5927\u5bb6\u80fd\u5feb\u901f\u610f\u8b58\u5230\u554f\u984c\u7684\u56b4\u91cd\u6027\u3002
GKE \u9019\u500b\u670d\u52d9\u672c\u8eab\u64c1\u6709\u904e\u9ad8\u7684\u8907\u96dc\u6027\u548c\u4f9d\u8cf4\u6027\uff0c\u4e26\u4e14\u8f38\u51fa\u7684\u65e5\u8a8c\u4e26\u4e0d\u8db3\u4ee5\u5feb\u901f\u627e\u5230\u554f\u984c\u7665\u7d50\u9ede\uff0c \u4e26\u4e14\u82b1\u4e86\u5f88\u9577\u7684\u6642\u9593\u5728\u4e0d\u662f\u554f\u984c\u7684 DockerHub \u4e0a\u9762\u3002 \u4e8b\u4ef6\u767c\u751f\u4e4b\u521d\uff0c\u6307\u63ee\u5b98\u4e26\u672a\u53ca\u65e9\u64b0\u5beb\u7d50\u69cb\u5316\u7684\u4e8b\u4ef6\u56de\u5831\u6587\u4ef6\uff0c\u9019\u500b\u6587\u4ef6\u53ef\u4ee5\u8b93\u5f8c\u7e8c\u5354\u52a9\u7684\u4eba\u5feb\u901f\u9032\u5165\u72c0\u6cc1\uff0c \u4e26\u4e14\u80fd\u5920\u8b93\u5f88\u591a\u8a0e\u8ad6\u51fa\u4f86\u7684\u89e3\u6cd5\uff0c\u907a\u5fd8\u5728\u6fc0\u70c8\u8a0e\u8ad6\u4e4b\u4e2d\u3002 Zara \u5728\u6307\u63ee\u4e8b\u4ef6\u8655\u7406\u6642\uff0c \u61c9\u8a72\u66f4\u597d\u7684\u7d71\u6574\u591a\u500b\u5de5\u7a0b\u5e2b\uff0c\u4e0d\u8981\u8b93\u5176\u5404\u81ea\u5fd9\u5404\u81ea\u7684\uff0c\u9020\u6210\u904e\u591a\u7684\u91cd\u529f\u548c\u6e9d\u901a\u58c1\u58d8\u3002
\u6700\u5f8c\uff0c\u8655\u7406\u4e8b\u4ef6\u6709\u500b\u5927\u539f\u5247\uff1a\u5148\u60f3\u8fa6\u6cd5\u8b93\u5176\u53ef\u4ee5\u904b\u4f5c\uff0c\u518d\u63a5\u8457\u627e\u6839\u56e0\u3002 \u7576 GKE \u767c\u751f\u72c0\u6cc1\u6642\uff0c\u5de5\u7a0b\u53ef\u4ee5\u5148\u9000\u7248\u5230\u4e0a\u4e00\u6b21\u7684\u7248\u672c\uff0c \u6216\u8005\u7576\u72c0\u6cc1\u662f\u767c\u751f\u5728\u5c40\u90e8\u5730\u5340\u6642\uff0c\u53ef\u4ee5\u8abf\u6574\u8ca0\u8f09\u5e73\u8861\u5668\u5230\u5176\u4ed6\u5340\u57df\uff0c\u8b93\u4f7f\u7528\u8005\u4ecd\u80fd\u6b63\u5e38\u5efa\u7acb\u53e2\u96c6\u3002 \u662f\u7684\uff0c\u7576\u767c\u751f\u4efb\u4f55\u7570\u52d5\u6642\uff0c\u90fd\u6709\u53ef\u80fd\u8b93\u72c0\u6cc1\u66f4\u7cdf\uff0c\u4f46\u662f\u9019\u4e9b\u8655\u7406\u65b9\u6cd5\u90fd\u53ef\u4ee5\u5feb\u901f\u5730\u88ab\u57f7\u884c\uff0c \u800c\u4e0d\u662f\u516d\u500b\u5c0f\u6642\u5f8c\u624d\u80fd\u751f\u6548\u3002
\u56de\u5230\u4e8b\u4ef6\u767c\u751f\u6642\uff0c\u65e9\u4e0a 7:00 \u767c\u73fe\u4f7f\u7528\u8005\u88ab\u5f71\u97ff\u300110:00 \u767c\u73fe\u58de\u6389\u7684\u93e1\u50cf\u6a94\u3001 11:00 \u958b\u59cb\u7de8\u8b6f\u8abf\u6574\u8a2d\u5b9a\u5f8c\u7684\u57f7\u884c\u6a94\u300112:00 \u4fee\u5fa9 GCR \u640d\u58de\u7684\u93e1\u50cf\u6a94\u3002 \u6211\u5011\u5176\u5be6\u53ef\u4ee5\u5728 10:00 \u767c\u73fe\u75c7\u72c0\u6642\uff0c\u5c31\u5feb\u901f\u628a\u6240\u6709\u93e1\u50cf\u6a94\u90fd\u5fa9\u539f\u5230\u53ef\u4ee5\u6b63\u5e38\u904b\u4f5c\u6642\u7684\u7248\u672c\uff0c \u800c\u4e0d\u662f\u63a8\u4e00\u500b\u65b0\u7684\u7248\u672c\u3002
\u4ee5\u9019\u500b\u60c5\u6cc1\u70ba\u4f8b\uff0c\u5176\u5be6\u53ef\u4ee5\u5728\u4e8b\u4ef6\u767c\u751f\u524d\uff0c\u5c31\u6e96\u5099\u597d\u76f8\u95dc\u6025\u6551\u8a2d\u65bd\uff0c\u4f8b\u5982\u5feb\u901f\u5fa9\u539f\u7248\u672c\u3001\u6d41\u91cf\u5c0e\u5f15\u7b49\u7b49\u3002 \u5efa\u7acb\u6025\u6551\u8a2d\u65bd\u6700\u597d\u7684\u6642\u6a5f\u5c31\u662f\u5728\u4e8b\u4ef6\u767c\u751f\u524d\uff0c \u800c\u6025\u6551\u8a2d\u65bd\u7684\u9700\u6c42\u901a\u5e38\u53ef\u4ee5\u5728\u5404\u500b\u4e8b\u5f8c\u6790\u8aa4\u7684\u6587\u4ef6\u4e2d\u627e\u5230\u4e00\u4e9b\u86db\u7d72\u99ac\u8de1\u3002 \u518d\u5f37\u8abf\u4e00\u6b21\uff0c\u5728\u8655\u7406\u4e8b\u4ef6\u6642\uff0c\u61c9\u8a72\u512a\u5148\u8003\u616e\u6025\u6551\u63aa\u65bd\uff1a\u5148\u60f3\u8fa6\u6cd5\u8b93\u5176\u53ef\u4ee5\u904b\u4f5c\uff0c\u518d\u63a5\u8457\u627e\u6839\u56e0\u3002 \u63db\u53e5\u8a71\u8aaa\uff0c\u4e8b\u4ef6\u8655\u7406\u7684\u6d41\u7a0b\u901a\u5e38\u662f\uff1a
\u96fb\u7db2\u4e8b\u4ef6\u901a\u5e38\u4ee3\u8868\u7a81\u7136\u65b7\u96fb\uff0c\u4f8b\u5982\u96fb\u64ca\u3001\u751f\u7269\u4fb5\u5bb3\u7b49\u7b49\uff0c\u70ba\u4e86\u9810\u9632\u670d\u52d9\u7684\u5931\u80fd\uff0c\u901a\u5e38\u6703\u52a0\u4e0a\u4e00\u4e9b\u4fdd\u96aa\uff0c \u4e0d\u65b7\u96fb\u7cfb\u7d71\uff08uninterruptible power supply, UPS\uff09\u5c31\u662f\u70ba\u6b64\u800c\u751f\u7684\u3002 \u5728\u65b7\u96fb\u4e4b\u5f8c\uff0c\u81ea\u4e3b\u5f0f\u767c\u96fb\u6a5f\u904b\u4f5c\u4e4b\u524d\uff0c\u6703\u6709\u500b\u7a7a\u7a97\u671f\uff0c\u4e0d\u65b7\u96fb\u7cfb\u7d71\u6703\u5728\u9019\u6bb5\u6642\u9593\u652f\u63f4\u8db3\u5920\u7684\u96fb\u529b\u3002 Google \u5728\u6bd4\u5229\u6642\u7684\u8cc7\u6599\u4e2d\u5fc3\u5c31\u6709\u9019\u6a23\u7684\u7cfb\u7d71\u3002
2015 \u5e74\u6642\uff0c\u8a72\u8cc7\u6599\u4e2d\u5fc3\u56e0\u70ba\u96fb\u64ca\u5c0e\u81f4\u505c\u96fb\uff0c\u4e0d\u65b7\u96fb\u7cfb\u7d71\u9019\u6642\u958b\u59cb\u63a5\u624b\u96fb\u529b\u7684\u8f38\u51fa\uff0c \u4f46\u662f\u63a5\u4e0b\u4f86\u7684\u5169\u5206\u9418\u5167\uff0c\u53c8\u4f86\u4e86\u4e09\u6b21\u96fb\u64ca\uff08\u542b\u7b2c\u4e00\u6b21\u7e3d\u5171\u56db\u6b21\uff09\u3002 \u5373\u4f7f\u5982\u6b64\uff0c\u904b\u7b97\u670d\u52d9\uff08Google Compute Engine, GCE\uff09\u7684\u4e0d\u65b7\u96fb\u7cfb\u7d71\u537b\u4ecd\u6b63\u5e38\u904b\u4f5c\uff0c \u4f46\u7b2c\u4e09\u548c\u7b2c\u56db\u6b21\u7684\u96fb\u64ca\u537b\u5c0e\u81f4\u78c1\u789f\uff08disk\uff09\u7684\u4e0d\u65b7\u96fb\u7cfb\u7d71\u7684\u5931\u80fd\uff0c\u4e26\u8b93\u78c1\u789f\u505c\u6b62\u904b\u4f5c\u3002 \u78c1\u789f\u7684\u505c\u6b62\u904b\u4f5c\uff0c\u958b\u59cb\u8b93 GCE \u4e0a\u7684\u865b\u64ec\u6a5f\uff08virtual machine, VM\uff09\u51fa\u73fe\u8b80\u5beb\u7684\u932f\u8aa4\u3002
GCE \u7684 SRE \u5de5\u7a0b\u628a\u8cc7\u8a0a\u50b3\u9054\u7d66\u8ca0\u8cac\u78c1\u789f\u7684 SRE \u5de5\u7a0b\uff0c\u4e26\u8b93\u8ca0\u8cac\u78c1\u789f\u7684 SRE \u6210\u70ba\u672c\u6b21\u4e8b\u4ef6\u7684\u6307\u63ee\u5b98\uff0c \u56e0\u70ba\u5176\u64c1\u6709\u91dd\u5c0d\u78c1\u789f\u548c\u4e3b\u6a5f\u4e4b\u9593\u7684\u72c0\u6cc1\u6700\u6e05\u6670\u7684\u6982\u89c0\uff0c\u4e26\u7e3d\u7d50\u4e86\u4e8b\u4ef6\u72c0\u6cc1\uff1a
\u63db\u53e5\u8a71\u8aaa\uff0c\u8655\u7406\u4eba\u54e1\u5c31\u6709\u5e7e\u9805\u5de5\u4f5c\u8981\u8655\u7406\uff1a\u628a\u52d5\u529b\u8f38\u51fa\u5f9e\u4e0d\u65b7\u96fb\u7cfb\u7d71\u548c\u81ea\u4e3b\u767c\u96fb\u6a5f\u5207\u56de\u96fb\u7db2\u63d0\u4f9b\u7684\u96fb\u529b\uff1b \u91cd\u555f\u6240\u6709\u76ee\u524d\u6c92\u6709\u4efb\u4f55 VM \u7684\u4e3b\u6a5f\uff1b\u628a VM \u642c\u9032\u90a3\u4e9b\u5df2\u7d93\u91cd\u555f\u904e\u7684\u4e3b\u6a5f\u3002 \u524d\u9762\u5169\u9805\u5de5\u4f5c\u5df2\u7d93\u6f14\u7df4\u3001\u5be6\u969b\u767c\u751f\u904e\u5f88\u591a\u6b21\uff0c\u4e5f\u6709\u5b8c\u6574\u7684\u6587\u4ef6\u53c3\u8003\uff0c\u4f46\u662f\u7b2c\u4e09\u9805\u537b\u662f\u9996\u6b21\u767c\u751f\u7684\u3002 \u70ba\u6b64\uff0c\u6307\u63ee\u5b98\u6307\u6d3e\u5c08\u9580\u4e00\u500b\u5718\u968a\u53bb\u8a0e\u8ad6\u3001\u5be6\u4f5c\u9019\u500b\u5de5\u9805\uff0c\u4e26\u4e14\u5373\u6642\u76e3\u63a7\u5176\u904b\u4f5c\u72c0\u614b\u3002 \u4e26\u4e14\u5728\u4e8b\u767c\u7576\u4e0b\uff0c\u6307\u6d3e\u53e6\u4e00\u500b\u5c0f\u7d44\u5efa\u69cb\u76f8\u95dc\u5de5\u5177\uff0c\u8b93\u5718\u968a\u53ef\u4ee5\u5feb\u901f\u800c\u6e96\u78ba\u5f97\u57f7\u884c\u642c\u9077\u4f5c\u696d\u3002
"},{"location":"feedback/site-reliability-workbook/incident-response/#\u96fb\u64ca\u5c0e\u81f4\u78c1\u789f\u5931\u80fd\u7684\u4e8b\u5f8c\u5206\u6790","title":"\u96fb\u64ca\u5c0e\u81f4\u78c1\u789f\u5931\u80fd\u7684\u4e8b\u5f8c\u5206\u6790","text":"\u6307\u63ee\u5b98\u5f88\u6709\u7d93\u9a57\u7684\u628a\u8f03\u591a\u7684\u8cc7\u6e90\u653e\u5728\u4e8b\u767c\u7576\u4e0b\u6700\u68d8\u624b\u7684\u554f\u984c\uff0c\u5176\u9918\u7684\u5e38\u898b\u554f\u984c\u5247\u6307\u6d3e\u76f8\u95dc\u5718\u968a\uff0c \u4e26\u8b93\u5176\u5b9a\u6642\u5b9a\u9ede\u56de\u5831\u5f8c\uff0c\u5c31\u95dc\u6ce8\u5728\u642c\u9077 VM \u7684\u5de5\u4f5c\u4e0a\u3002 \u4e5f\u56e0\u70ba\u642c\u9077 VM \u662f\u9700\u8981 GCE\uff08\u77e5\u9053\u76ee\u524d\u5404\u500b VM \u7684\u72c0\u6cc1\uff09\u548c\u78c1\u789f\u5718\u968a\uff08\u77e5\u9053\u76ee\u524d\u4e3b\u6a5f\u72c0\u6cc1\uff09\u4e4b\u9593\u7684\u6e9d\u901a\uff0c \u6240\u4ee5\u6307\u6d3e\u7684\u5718\u968a\u9700\u8981\u78ba\u4fdd\u80fd\u5728\u9019\u5169\u8005\u4e4b\u4e2d\u9032\u884c\u6709\u6548\u6e9d\u901a\u7684\u3002
"},{"location":"feedback/site-reliability-workbook/incident-response/#\u6e9d\u901a","title":"\u6e9d\u901a","text":"PagerDuty \u662f\u4e00\u500b\u63d0\u4f9b\u4e8b\u4ef6\u8655\u7406\u5e73\u53f0\u7684 SaaS \u670d\u52d9\u5546\uff0c \u5b83\u4e5f\u5728\u5176\u5b98\u7db2\u63d0\u4f9b\u5f88\u591a\u4e8b\u4ef6\u8655\u7406\u7684\u7d20\u6750\u3002
PagerDuty \u65e9\u671f\u53ea\u6709\u4e00\u500b\u6307\u63ee\u5b98\u4e26\u8ca0\u8cac\u5168\u516c\u53f8\u7684\u670d\u52d9\uff0c \u96a8\u8457\u516c\u53f8\u6210\u9577\u5230\u64c1\u6709\u6578\u5341\u500b\u5718\u968a\u6642\uff0c\u4ed6\u5011\u7684\u4e8b\u4ef6\u8655\u7406\u7684\u6a5f\u5236\u4e5f\u8ddf\u8457\u8abf\u6574\u3002 \u4e8b\u5be6\u4e0a\uff0c\u6bcf\u9694\u6578\u6708\uff0c\u4ed6\u5011\u5c31\u6703\u5be9\u8996\u81ea\u5df1\u7684\u4e8b\u4ef6\u8655\u7406\u6a5f\u5236\uff0c\u78ba\u4fdd\u9019\u500b\u6d41\u7a0b\u662f\u6709\u660e\u78ba\u76ee\u7684\u6027\u4e14\u8ddf\u96a8\u8457\u5546\u52d9\u908f\u8f2f\u7684\u3002 \u4f8b\u5982\u4f7f\u7528\u8005\u7121\u6cd5\u767b\u5165\u548c\u7121\u6cd5\u8a3b\u518a\u7684\u8655\u7406\u65b9\u5f0f\u3002
\u4e00\u822c\u4f86\u8aaa\uff0c\u5c0f\u578b\u4e8b\u4ef6\u662f\u4e00\u500b\u5f85\u547d\u5de5\u7a0b\u5c31\u80fd\u8655\u7406\u7684\uff0c\u4f46\u662f\u7576\u51fa\u73fe\u91cd\u5927\u4e8b\u4ef6\u6642\uff0c\u5f80\u5f80\u9700\u8981\u591a\u4eba\u8655\u7406\uff0c \u6211\u5011\u4e0d\u8a72\u8b93\u4e00\u500b\u5f85\u547d\u7684\u5de5\u7a0b\u7368\u81ea\u9762\u5c0d\u9ad8\u58d3\u7684\u60c5\u6cc1\uff0c\u7dca\u6025\u60c5\u6cc1\u7684\u6e9d\u901a\u5728\u9019\u4e4b\u4e2d\u626e\u6f14\u91cd\u8981\u7684\u89d2\u8272\u3002 \u6709\u5e7e\u500b\u65b9\u6cd5\u53ef\u4ee5\u5e6b\u52a9\u5718\u968a\u7684\u6e9d\u901a\uff1a
\u53e6\u5916\u9700\u8981\u6ce8\u610f\u7684\u662f\uff0c\u9577\u6642\u9593\u7684\u707d\u96e3\u8655\u7406\u662f\u9700\u8981\u4eba\u54e1\u8f2a\u66ff\u7684\uff0c \u4f8b\u5982 PagerDuty 2017 \u5e74\u5728\u534a\u591c\u767c\u751f\u9577\u9054\u5341\u5c0f\u6642\u5931\u80fd\u7684\u4e8b\u4ef6\u3002 \u4ed6\u5011\u6bcf\u56db\u500b\u5c0f\u6642\u5c31\u8f2a\u66ff\u4e00\u6b21\u8655\u7406\u4e8b\u4ef6\u7684\u4eba\u54e1\uff0c\u9019\u6a23\u9664\u4e86\u8b93\u4eba\u54e1\u5f97\u5230\u5145\u5206\u4f11\u606f\u4e4b\u5916\uff0c \u4e5f\u53ef\u4ee5\u78ba\u4fdd\u4e8b\u4ef6\u88ab\u5b8c\u6574\u7d00\u9304\uff08\u5426\u5247\u5982\u4f55\u505a\u4ea4\u63a5\uff1f\uff09\u4ee5\u53ca\u8b93\u63a5\u624b\u7684\u4eba\u54e1\u63d0\u51fa\u4e00\u4e9b\u65b0\u7684\u60f3\u6cd5\u3002
"},{"location":"feedback/site-reliability-workbook/incident-response/#\u6846\u67b6","title":"\u6846\u67b6","text":"\u5efa\u7acb\u4e00\u500b\u901a\u7528\u6846\u67b6\u9664\u4e86\u5e6b\u52a9\u6e9d\u901a\u4e4b\u5916\uff0c\u4e5f\u53ef\u4ee5\u627e\u5230\u54ea\u4e9b\u90e8\u5206\u5c0d\u516c\u53f8\u4f86\u8aaa\u662f\u6700\u91cd\u8981\u7684\uff0c\u4f8b\u5982\uff1a
\u6846\u67b6\u7684\u50f9\u503c\u4e5f\u5728\u65bc\u5b83\u63d0\u4f9b\u4e86 \u7406\u8ad6\u4e0a\u7684\u4e8b\u4ef6\u8655\u7406\u65b9\u5f0f\uff0c Google \u767c\u73fe\u5982\u679c\u53ef\u4ee5\u628a\u7406\u8ad6\u548c\u5be6\u52d9\u72c0\u6cc1\u548c\u8655\u7406\u65b9\u5f0f\u9032\u884c\u9023\u7d50\uff0c\u65b0\u9032\u4eba\u54e1\u6703\u66f4\u5bb9\u6613\u9032\u5165\u72c0\u6cc1\u3002 \u9664\u6b64\u4e4b\u5916\uff0c\u5be6\u52d9\u7684\u64cd\u4f5c\u7df4\u7fd2\u3001\u6b77\u4f86\u4e8b\u4ef6\u7684\u5b78\u7fd2\u3001\u4e8b\u5f8c\u5206\u6790\u8655\u7406\u65b9\u5f0f\u7684\u597d\u58de\u5728\u5b78\u7fd2\u904e\u7a0b\u4e2d\u4ecd\u662f\u975e\u5e38\u91cd\u8981\u7684\u4e00\u584a\u3002
\u6c7a\u5b9a\u597d\u6e9d\u901a\u7ba1\u9053\uff0c\u4e0d\u7ba1\u662f Line\u3001Teams \u6216\u7dda\u4e0a\u6703\u8b70\uff0c\u53ea\u8981\u5927\u5bb6\u719f\u6089\u5c31\u597d\u3002 \u6c92\u6709\u4eba\u5e0c\u671b\u5728\u4e8b\u767c\u7576\u4e0b\u9084\u8981\u6c7a\u5b9a\u7528\u4ec0\u9ebc\u4f5c\u6e9d\u901a\u3002 \u9664\u6b64\u4e4b\u5916\uff0c\u4f60\u4e5f\u9700\u8981\u628a\u76f8\u95dc\u670d\u52d9\u7684\u8655\u7406\u4eba\u54e1\u90fd\u5217\u597d\u3002 \u9084\u8a18\u5f97\u5148\u53ef\u7528\u518d\u627e\u6839\u56e0\u4e2d\uff0cGoogle \u4eba\u54e1\u767c\u9001\u4e86\u4e00\u500b\u300c\u5168\u9ad4\u52d5\u54e1\u300d\u7684\u4fe1\u4ef6\u55ce\uff1f \u9019\u5c01\u4fe1\u7684\u524d\u63d0\u5c31\u662f\u5df2\u7d93\u6e96\u5099\u597d\u6240\u6709\u670d\u52d9\u7684\u806f\u7d61\u4eba\u54e1\u3002
\u7e3d\u800c\u8a00\u4e4b\uff0c\u4e8b\u4ef6\u8655\u7406\u6846\u67b6\u91cd\u9ede\u5c31\u662f\uff1a\u660e\u78ba\u6e9d\u901a\u7ba1\u9053\u3001\u8ab0\u8a72\u63a5\u6536\u5230\u8a0a\u606f\u3001\u4e8b\u4ef6\u767c\u751f\u6642\u8ab0\u8981\u8ca0\u8cac\u4ec0\u9ebc\u3002
"},{"location":"feedback/site-reliability-workbook/incident-response/#\u7e3d\u7d50","title":"\u7e3d\u7d50","text":"\u7df4\u7fd2\uff0c\u7df4\u7fd2\uff0c\u9084\u662f\u7df4\u7fd2\u3002 \u8a66\u8457\u81ea\u52d5\u5316\u6a21\u64ec\u4e8b\u4ef6\u767c\u751f\uff0c\u900f\u904e chaos monkey\u3001\u6b77\u53f2\u4e8b\u4ef6\uff0c\u90fd\u662f\u597d\u7684\u65b9\u6cd5\u3002 Google \u6703\u57f7\u884c\u516c\u53f8\u5c64\u7d1a\u7684\u4e8b\u4ef6\u7df4\u7fd2\uff08\u7a31\u70ba Disaster Recovery Testing, or DiRT\uff09\uff0c \u90fd\u662f\u518d\u518d\u7684\u5f37\u8abf\u7df4\u7fd2\u7684\u91cd\u8981\u6027\u3002
\u8655\u7406\u4e8b\u4ef6\u6642\u63a5\u89f8\u5230\u7684\u4eba\u8d8a\u591a\uff0c\u4ee3\u8868\u4e8b\u4ef6\u7684\u7b49\u7d1a\u8d8a\u9ad8\uff0c\u8a66\u8457\u5efa\u7acb\u7d50\u69cb\u5316\u8a0a\u606f\uff0c\u5e6b\u52a9\u5927\u5bb6\u5feb\u901f\u9032\u5165\u72c0\u6cc1\u3002 \u7576\u7136\uff0c\u9019\u4e9b\u6771\u897f\u4e00\u5b9a\u90fd\u662f\u4e8b\u4ef6\u767c\u751f\u524d\u5c31\u6e96\u5099\u597d\u4e14\u7d93\u904e\u5be6\u969b\u4f7f\u7528\u7df4\u7fd2\u7684\uff0c \u9019\u4e9b\u7df4\u7fd2\u90fd\u6703\u5e6b\u52a9\u6211\u5011\u5efa\u7acb\u808c\u8089\u8a18\u61b6\uff0c\u907f\u514d\u5728\u8166\u888b\u7a7a\u767d\u7684\u60c5\u6cc1\u4e0b\uff0c\u8b93\u6642\u9593\u767d\u767d\u6d41\u5931\u3002
DiRT \u6240\u62ab\u9732\u7684\u4e00\u4e9b\u554f\u984c\u5728 Google \u958b\u59cb\u5be6\u65bd DiRT \u5728\u4e00\u4e9b\u5c0f\u7cfb\u7d71\u4e0a\u4e4b\u5f8c\uff0c\u4ed6\u5011\u5617\u8a66\u628a\u6e2c\u8a66\u653e\u5230\u66f4\u5927\u898f\u6a21\uff1a\u516c\u53f8\u5c64\u7d1a\u3002
\u4ed6\u5011\u5617\u8a66\u8b93\u4e00\u500b\u5340\u57df\u7684\u8fa6\u516c\u5ba4\u548c\u8cc7\u6599\u4e2d\u5fc3\u6574\u500b\u65b7\u7db2\u548c\u505c\u96fb\uff0c\u6a21\u64ec\u5927\u5730\u9707\u7684\u60c5\u6cc1\u3002 \u7406\u60f3\u4e0a\u7576\u7136\u6703\u6709\u500b\u5099\u63f4\u63a5\u624b\u9019\u4e9b\u5931\u80fd\u7684\u670d\u52d9\uff0c\u4f46\u537b\u767c\u73fe\u4e00\u4e9b\u610f\u60f3\u4e0d\u5230\u7684\u72c0\u6cc1\uff0c\u4f8b\u5982\uff1a
\u63db\u53e5\u8a71\u8aaa\uff0c\u4e0d\u53ea\u662f\u5c0d\u5916\u670d\u52d9\uff0c\u4e00\u4e9b\u7528\u65bc\u751f\u7522\u3001\u5167\u90e8\u7cfb\u7d71\uff0c \u5305\u62ec\u4eba\u529b\u8cc7\u6e90\u3001\u8ca1\u52d9\u3001\u8cc7\u5b89\u548c\u5404\u7a2e\u8a2d\u65bd\u90fd\u9700\u8981\u88ab\u6e2c\u8a66\u3002
\u9664\u6b64\u4e4b\u5916\uff0c\u65e9\u671f\u6e2c\u8a66\uff0c\u53ea\u6709\u4e00\u500b\u4eba\u5728\u832b\u832b\u6587\u4ef6\u4e2d\u6210\u529f\u627e\u5230\u7dca\u6025\u6642\u7684\u901a\u8a0a\u8fa6\u6cd5\uff08\u6253\u7279\u6b8a\u96fb\u8a71\uff09\uff0c \u96a8\u8457\u4e4b\u5f8c\u7684\u7df4\u7fd2\uff0c\u8d85\u904e 100 \u500b\u4eba\u80fd\u5920\u627e\u5230\u9019\u500b\u6587\u4ef6\uff0c\u4f46\u662f\u537b\u767c\u73fe\u9019\u500b\u901a\u8a0a\u65b9\u6cd5\u6700\u591a\u53ea\u80fd\u5bb9\u7d0d 40 \u4eba\u3002 \u4e26\u4e14\u7576\u6709\u4eba\u628a\u8a72\u96fb\u8a71\u8a2d\u5b9a\u70ba\u5f85\u6a5f\u72c0\u614b\u6642\uff0c\u6703\u5c0e\u81f4\u96fb\u8a71\u4e2d\u7684\u5927\u5bb6\u88ab\u8feb\u4eab\u53d7\u512a\u7f8e\u7684\u5f85\u6a5f\u97f3\u6a02\uff0c \u6545\u800c\u9700\u8981\u8a2d\u8a08\u51fa\u628a\u4eba\u8e22\u8d70\u7684\u529f\u80fd\u3002
\u6700\u5f8c\u4e00\u500b\u6709\u8da3\u4f8b\u5b50\u662f\uff0c\u5728\u6a21\u64ec\u9577\u671f\u505c\u96fb\u6642\uff0c\u70ba\u4e86\u6eff\u8db3\u767c\u96fb\u6a5f\u7684\u4f9b\u96fb\uff0c\u9700\u8981\u7533\u8acb\u8cfc\u8cb7\u5927\u91cf\u67f4\u6cb9\u71c3\u6599\u3002 \u9019\u500b\u7533\u8acb\u8d70\u7684\u662f\u7dca\u6025\u652f\u51fa\u6d41\u7a0b\uff0c\u4f46\u7531\u65bc\u627e\u4e0d\u5230\u9019\u500b\u7dca\u6025\u652f\u51fa\u7684\u76f8\u95dc\u6587\u4ef6\uff0c\u6700\u7d42\u8a72\u6e2c\u8a66\u7684\u53c3\u8207\u8005\u5011\uff0c \u627e\u5230\u4e00\u500b\u8c6a\u6c23\u842c\u5343\u7684\u540c\u4e8b\u9858\u610f\u628a\u81ea\u5df1\u7684\u4fe1\u7528\u5361\u4ea4\u51fa\u4f86\uff0c\u4e26\u5237\u4e0a\u516d\u4f4d\u6578\u7684\u8cbb\u7528\u3002 \u6211\u5011\u90fd\u77e5\u9053\u5efa\u7acb\u670d\u52d9\u9700\u8981\u64b0\u5beb\u6587\u6a94\u8b93\u4eba\u4f7f\u7528\uff0c\u4f46\u662f\u6211\u5011\u8981\u600e\u9ebc\u77e5\u9053\u9019\u4efd\u6587\u6a94\u582a\u4e0d\u582a\u7528\uff1f \u552f\u4e00\u7684\u65b9\u6cd5\u5c31\u662f\u901a\u904e\u6e2c\u8a66\u548c\u7df4\u7fd2\u3002
\u7576\u7136\uff0c\u4e00\u500b\u516c\u53f8\u6587\u5316\u5728\u9019\u4e4b\u4e2d\u626e\u6f14\u5f88\u91cd\u8981\u7684\u89d2\u8272\uff0c\u9858\u610f\u63a5\u53d7\u5931\u6557\u4e26\u5c07\u5176\u4f5c\u70ba\u5b78\u7fd2\u624b\u6bb5\u7684\u7d44\u7e54\uff0c \u5c0d\u65bc\u4f7f\u5718\u968a\u767c\u73fe\u548c\u89e3\u6c7a\u7cfb\u7d71\u6027\u554f\u984c\uff0c\u8d77\u5230\u4e00\u500b\u5f88\u5927\u7684\u4f5c\u7528\u3002 \u6700\u5f8c\u63d0\u9192\u4e00\u4e0b\uff0c\u4e00\u500b\u96c6\u4e2d\u914d\u7f6e\u7684\u6307\u63ee\u4e2d\u5fc3\u80fd\u5920\u4e86\u89e3\u548c\u76e3\u63a7\u4efb\u4f55\u6642\u5019\u6b63\u5728\u9032\u884c\u7684\u6240\u6709\u6e2c\u8a66\uff0c \u9019\u4f7f\u5f97 DiRT \u6210\u70ba\u4e00\u500b\u66f4\u5b89\u5168\u7684\u6e2c\u8a66\u74b0\u5883\u3002 \u7576\u767c\u751f\u7121\u6cd5\u9810\u6599\u7684\u60c5\u6cc1\u6642\uff0c \u6307\u63ee\u4e2d\u5fc3\u7684\u5718\u968a\uff08\u4e3b\u8981\u7531\u5404\u500b\u9818\u57df\u7684\u6280\u8853\u5c08\u5bb6\u7d44\u6210\uff09\u6703\u4ecb\u5165\u6062\u5fa9\u6e2c\u8a66\u6216\u4fee\u5fa9\u554f\u984c\u3002
"},{"location":"feedback/site-reliability-workbook/managing-load/","title":"\u8ca0\u8f09\u7ba1\u7406","text":"\u901a\u5e38\u4e00\u500b\u5927\u578b\u670d\u52d9\u7684\u8ca0\u8f09\u7ba1\u7406\u6a5f\u5236\u5305\u542b\u4ee5\u4e0b\u4e09\u7a2e\u65b9\u5f0f\uff1a \u8ca0\u8f09\u5e73\u8861\uff08load balancing\uff09\u3001\u8ca0\u8f09\u524a\u6e1b\uff08load shedding\uff09\u548c\u81ea\u52d5\u589e\u6e1b\uff08auto scaling\uff09\u3002 \u4f46\u662f\u9019\u4e9b\u6a5f\u5236\u90fd\u9700\u8981\u540c\u6b65\u5f7c\u6b64\u7684\u72c0\u614b\uff0c\u5426\u5247\u5f88\u53ef\u80fd\u5728\u67d0\u4e9b\u6642\u5019\u9020\u6210\u932f\u8aa4\u8a2d\u7f6e\uff0c\u4e26\u7834\u58de\u53ef\u7528\u6027\u3002
\u5728\u5343\u5947\u767e\u602a\u7684\u7dda\u4e0a\u72c0\u6cc1\u4e2d\uff0c\u672c\u7ae0\u7bc0\u63d0\u4f9b\u4e00\u4e9b\u5efa\u8b70\u4f86\u9075\u5faa\u3002
\u8ca0\u8f09\u5e73\u8861\u7684\u57fa\u790e
\u5728 SRE \u4e2d\uff0c\u900f\u904e\u5169\u7a2e\u8ca0\u8f09\u5e73\u8861\u7684\u4e0d\u540c\u89d2\u5ea6\u5207\u5165\uff0c\u8b93\u5927\u5bb6\u7406\u89e3\u76f8\u95dc\u8a2d\u8a08\u4e0a\u7684\u56f0\u5883\u548c\u5e38\u898b\u89e3\u6cd5\u3002
\u9996\u5148\u6211\u5011\u900f\u904e Google \u96f2\u7aef\u7684\u8ca0\u8f09\u5e73\u8861\u6a5f\u5236\uff08Google Cloud Load Balancing, GCLB\uff09\uff0c \u4f86\u63d0\u4f9b\u5e7e\u500b\u5efa\u8b70\u7684\u67b6\u69cb\u7576\u4f5c\u53c3\u8003\u3002
\u5f9e\u4f7f\u7528\u8005\u7684\u8acb\u6c42\u9001\u51fa\uff0c\u5230\u6700\u7d42\u5230\u9054\u63d0\u4f9b\u670d\u52d9\u7684\u7bc0\u9ede\uff0c\u4e2d\u9593\u7684\u6bcf\u4e00\u500b\u74b0\u7bc0\u7684\u8ca0\u8f09\u7ba1\u7406\uff0c\u90fd\u503c\u5f97\u63a2\u8a0e\u3002 \u8981\u5747\u8861\u4f7f\u7528\u8005\u9001\u51fa\u7684\u8acb\u6c42\uff0c\u6700\u65b9\u4fbf\u7684\u5c31\u662f\u4f7f\u7528 DNS\u3002 DNS \u900f\u904e\u4f7f\u7528\u8005\u7684 IP \u7d66\u4e88\u6700\u9069\u7576\u7684\u8cc7\u6599\u4e2d\u5fc3 IP\uff0c\u4f86\u9054\u5230\u8ca0\u8f09\u7684\u5206\u6563\u3002 \u4f46\u662f\u4f7f\u7528\u8005\u6703\u5feb\u53d6 IP\uff0c\u5982\u679c\u8cc7\u6599\u4e2d\u5fc3\u5931\u80fd\u6642\uff0c\u8981\u5982\u4f55\u8b93\u4f7f\u7528\u8005\u91cd\u65b0\u8acb\u6c42\u65b0\u7684 IP\uff0c \u800c\u4e0d\u662f\u7b49\u5230\u671f\u9650\u5230\u671f\u624d\u53bb\u91cd\u65b0\u8acb\u6c42\uff1f
\u9019\u4e9b\u90fd\u662f\u5be6\u4f5c\u4e0a\u7684\u56f0\u96e3\uff0c\u6240\u4ee5 GCLB \u63a1\u7528 anycast \u7684\u6a5f\u5236\u3002 \u4e0d\u540c\u65bc unicast \u7684\u8def\u7531\u65b9\u5f0f\u53ea\u6703\u9ede\u5c0d\u9ede\u7684\u50b3\u8f38\uff0c anycast \u5728\u8def\u7531\u904e\u7a0b\u4e2d\uff0c\u8def\u7531\u5668\u6703\u5224\u65b7\u6700\u8fd1\u7684\u8cc7\u6599\u4e2d\u5fc3\uff0c\u4e26\u9001\u5f80\u6307\u5b9a\u4f4d\u7f6e\u3002
\u8def\u7531\u5668\u600e\u9ebc\u77e5\u9053\u6709\u54ea\u4e9b\u8cc7\u6599\u4e2d\u5fc3
\u6bcf\u500b\u8cc7\u6599\u4e2d\u5fc3\u6703\u4f7f\u7528 BGP \u4f86\u767c\u9001\u81ea\u5df1\u7684\u8cc7\u8a0a\u7d66\u7db2\u8def\u4e16\u754c\u3002 \u800c\u7576\u4f7f\u7528\u8005\u900f\u904e\u7db2\u8def\u670d\u52d9\u63d0\u4f9b\u8005\uff08ISP\uff09\u767c\u9001\u5c01\u5305\u6642\uff0cISP \u6703\u5229\u7528 BGP \u7684\u8cc7\u8a0a\uff0c \u5e6b\u52a9\u4f7f\u7528\u8005\u7684\u5c01\u5305\u50b3\u5230\u6700\u9069\u5408\u7684\u8cc7\u6599\u4e2d\u5fc3\u3002
\u4f46\u9019\u4ecd\u6703\u6709\u5e7e\u500b\u554f\u984c\uff1a
\u63a5\u8457\uff0c\u6211\u5011\u5c31\u4f86\u4ecb\u7d39\u4e00\u4e0b GCLB \u7684\u67b6\u69cb\uff0c\u7136\u5f8c\u95e1\u8ff0\u4ed6\u5982\u4f55\u89e3\u6c7a\u9019\u4e9b\u554f\u984c\u3002
"},{"location":"feedback/site-reliability-workbook/managing-load/#gclb-\u7684\u67b6\u69cb","title":"GCLB \u7684\u67b6\u69cb","text":"\u7576\u5c01\u5305\u9001\u5230\u8cc7\u6599\u4e2d\u5fc3\u7684\u8def\u7531\u5668\u6642\uff0c\u5176\u9996\u5148\u63a5\u89f8\u7684\u4e0b\u6e38\u662f Maglev\uff1b \u5c0d Maglev \u4f86\u8aaa\uff0c\u4e0b\u6e38\u662f Google Front End\uff08GFE\uff09\uff0c\u800c\u5c0d GFE \u4f86\u8aaa\uff0c\u5176\u4e0b\u6e38\u5c31\u662f\u771f\u6b63\u7684\u670d\u52d9\u7bc0\u9ede\uff0c \u53ef\u80fd\u662f Kubernetes \u7684 ingress \u4e5f\u53ef\u80fd\u53ea\u662f\u55ae\u7d14\u7684 Nginx\u3002
---\ntitle: GCLB \u7684\u67b6\u69cb\n---\nflowchart TB\n u[User] --10.0.0.1--> i((ISP))\n subgraph \"Data Center 1\"\n direction TB\n u1[router] --> lb1[Load balancers: Maglev]\n p1[HTTP Reverse Proxies: GFE]\n end\n subgraph \"Data Center 2\"\n direction TB\n u2[router] --> lb2[Load balancers: Maglev]\n lb2 --> p2[HTTP Reverse Proxies: GFE]\n p2 --> svc[Services]\n end\n i --10.0.0.1--> u1\n i --10.0.0.1--> u2\n lb1 -.Stabilized anycast.-> lb2\n
\u5982\u679c Maglev \u767c\u73fe\u5c01\u5305\u7684\u76ee\u7684\u5730\uff08\u670d\u52d9\u7684 VIP\uff09\u662f\u5176\u4ed6\u8cc7\u6599\u4e2d\u5fc3\uff0c\u5b83\u5c31\u6703\u628a\u5c01\u5305\u9001\u7d66\u8a72\u53e2\u96c6\u3002 \u5982\u4e0a\u5716\u7684 Stabilized anycast
\u3002\u4f9d\u6b64\uff0c\u5c31\u53ef\u4ee5\u89e3\u6c7a \u4f7f\u7528\u8005\u7684\u76ee\u6a19\u8cc7\u6599\u4e2d\u5fc3\u5728\u9023\u7dda\u904e\u7a0b\u4e2d\u53ef\u80fd\u6703\u88ab\u6539\u8b8a \u7684\u554f\u984c
\u4ec0\u9ebc\u662f Maglev
\u66f4\u591a Maglev \u8aaa\u660e\uff0c\u8acb\u53c3\u8003\u6b64\u7bc7\u3002
\u4f8b\u5982\u5b83\u662f\u900f\u904e VIP matching \u627e\u5230\u5c01\u5305\u662f\u5426\u70ba\u5176\u4ed6\u8cc7\u6599\u4e2d\u5fc3\u3002
Maglev \u4e0b\u7684 GFE \u901a\u5e38\u5c31\u6703\u662f TCP \u548c TLS \u9023\u7dda\u7684\u8655\u7406\u4f4d\u7f6e\u3002\u9664\u6b64\u4e4b\u5916\uff0c\u4ed6\u4e5f\u6703\uff1a
\u56de\u5230\u524d\u9762\u63d0\u7684\u53e6\u4e00\u500b\u554f\u984c \u55ae\u4e00\u7684\u8cc7\u6599\u4e2d\u5fc3\u4ecd\u53ef\u80fd\u88ab\u9644\u8fd1\u7684\u4f7f\u7528\u8005\u6c96\u57ae\u3002 \u7576\u53e2\u96c6\u5167\u670d\u52d9\u5931\u80fd\u6216\u8ca0\u8377\u9ad8\u6642\uff0cMaglev \u53c8\u6216\u8005 GFE \u8981\u600e\u9ebc\u628a\u6d41\u91cf\u5206\u6563\u5230\u5176\u4ed6\u53e2\u96c6\u5462\uff1f \u4ed6\u5011\u9760\u7684\u662f Global Software Load Balancer\uff08GSLB\uff09\u7684\u5354\u8abf\u3002
flowchart TB\n m1[Maglev]\n m2[Maglev]\n gslb[GSLB]\n g1[GFE]\n g2[GFE]\n bs1[Backend Service]\n bs2[BackendService]\n m1 -.-gslb-.- g1\n m2 -.-gslb-.- g2\n m1 --> g1\n m2 --> g2\n g1 --> bs1\n g2 -.- bs2\n g2 --> bs1\n
GSLB \u6703\u63a7\u5236\u5c0d GFE \u7684\u9023\u7dda\u548c\u9001\u5f80\u670d\u52d9\u7684\u8acb\u6c42\u5206\u4f48\uff1a
\u4e5f\u5c31\u662f\u8aaa\uff0cGSLB \u662f\u4e00\u7a2e\u628a Maglev \u548c GFE \u806f\u7e6b\u5728\u4e00\u8d77\u7684\u81a0\u6c34\uff0c \u8b93 Maglev \u53ef\u4ee5\u627e\u5230\u6700\u9760\u8fd1\u4e14\u5065\u5eb7\u7684 GFE\uff1b \u4e5f\u8b93 GFE \u80fd\u5920\u627e\u5230\u6700\u9760\u8fd1\u4e14\u5065\u5eb7\u7684\u670d\u52d9\u7fa4\u7d44\u3002
\u900f\u904e\u9019\u4e9b\u63aa\u65bd\uff0c\u8b93\u6574\u500b GCLB \u6210\u70ba\u4e00\u500b\u4f4e\u5ef6\u9072\u3001\u9ad8\u53ef\u7528\u7684\u670d\u52d9\uff0c\u4e26\u4e14\u89e3\u6c7a\u4e86 anycast \u7684\u5169\u500b\u554f\u984c\u3002
"},{"location":"feedback/site-reliability-workbook/managing-load/#gclb-\u7684\u5ef6\u4f38","title":"GCLB \u7684\u5ef6\u4f38","text":"Google \u900f\u904e\u628a Maglev \u548c GFE \u5927\u91cf\u7f6e\u65bc\u5404\u500b\u8cc7\u6599\u4e2d\u5fc3\uff0c \u4f86\u76e1\u53ef\u80fd\u6e1b\u5c11\u4f7f\u7528\u8005\u548c\u670d\u52d9\u7684\u591a\u6b21 TCP/TLS \u4f86\u56de\u4ea4\u63e1\u3002 \u7576\u4f7f\u7528\u8005\u548c GFE \u5b8c\u6210\u9023\u7dda\u5f8c\uff0c\u4ed6\u6703\u4f7f\u7528\u548c\u4e0a\u6e38\u5efa\u7acb\u597d\u7684\u5b89\u5168\u9023\u7dda\u4f86\u9032\u884c\u8acb\u6c42\uff0c\u9032\u4e00\u6b65\u964d\u4f4e\u5ef6\u9072\u3002
GCLB \u63d0\u4f9b SLA 99.99% \u7684\u9ad8\u53ef\u7528\u6027\uff0c\u4e26\u4e14\u63d0\u4f9b\u5f88\u591a\u670d\u52d9\u4f86\u8b93\u4f7f\u7528\u8005\u9032\u4e00\u6b65\u63d0\u9ad8\u53ef\u7528\u6027\u3002 \u4f8b\u5982\u9810\u8a2d\u6703\u8b93\u4f7f\u7528\u8005\u900f\u904e\u91d1\u7d72\u96c0\u90e8\u7f72\uff0c\u6bcf\u6b21\u90e8\u7f72\u65b0\u7248\u672c\u7684\u61c9\u7528\u7a0b\u5f0f\u6642\uff0c \u90fd\u53ef\u4ee5\u4e8b\u5148\u653e\u51fa\u5148\u884c\u7248\u4f86\u9032\u884c\u6e2c\u8a66\uff0c\u907f\u514d\u4e00\u6b21\u6027\u90e8\u7f72\u9020\u6210\u7684\u6bc0\u6ec5\u6027\u707d\u96e3\u3002
"},{"location":"feedback/site-reliability-workbook/managing-load/#\u6848\u4f8b\u7814\u7a76pok\u00e9mon-go","title":"\u6848\u4f8b\u7814\u7a76\uff1aPok\u00e9mon GO","text":"\u900f\u904e\u767c\u751f\u707d\u96e3\u7684\u6848\u4f8b\uff0c\u4f86\u4e86\u89e3\u5230 GCLB \u7684\u9ad8\u5f48\u6027\u548c\u9ad8\u53ef\u7528\u6027\u3002
Pok\u00e9mon GO \u662f\u4e00\u6b3e\u7531 Niantic \u548c\u5bf6\u53ef\u5922\u516c\u53f8\u5408\u4f5c\u958b\u767c\u7684\u64f4\u589e\u5be6\u5883\u904a\u6232\uff0c \u4ed6\u5011\u7684\u904a\u6232\u65b9\u5f0f\u662f\u9700\u8981\u5168\u4e16\u754c\u5404\u5730\u73a9\u5bb6\u5728\u7576\u5730\u7684\u5be6\u666f\u4e2d\u9032\u884c\u9ad8\u5ea6\u4e92\u52d5\uff0c\u4f8b\u5982\u62ff\u53d6\u8cc7\u6e90\u548c\u6355\u6349\u89d2\u8272\uff0c \u9019\u4ee3\u8868\u4ed6\u5011\u9700\u8981 \u5373\u6642\u66f4\u65b0\u904a\u6232\u72c0\u614b \u7d66\u9644\u8fd1\u6240\u6709\u7684\u73a9\u5bb6\u3002
\u5728\u904a\u6232\u767c\u5e03\u524d\uff0c\u4ed6\u5011\u4f7f\u7528\u4f30\u8a08\u6700\u5927\u6d41\u91cf\u7684 5 \u500d\u53bb\u9032\u884c\u6d41\u91cf\u58d3\u529b\u6e2c\u8a66\uff0c \u4f46\u662f\u7576\u4ed6\u5011\u5be6\u969b\u767c\u5e03\u4e4b\u5f8c\uff0c\u6d41\u91cf\u4f86\u5230\u4e86\u7576\u521d\u4f30\u8a08\u7684 50 \u500d\uff0c \u9019\u6a23\u7684\u6d41\u91cf\u66b4\u6f32\u52e2\u5fc5\u8003\u9a57\u4ed6\u5011\u5e7e\u4e4e\u6240\u6709\u7684\u6280\u8853\u5806\u68e7\u7684\u627f\u8f09\u80fd\u529b\u3002 \u9019\u6a23\u7684\u8003\u9a57\u4e5f\u5305\u62ec GCP\uff0c\u5728\u904a\u6232\u6b63\u5f0f\u767c\u4f48\u5f8c\u7684\u5169\u5929\uff0c\u8a72\u904a\u6232\u5df2\u7d93\u662f GCLB \u670d\u52d9\u4e2d\uff0c\u6700\u5927\u7684\u4f7f\u7528\u8005\u4e86\uff0c \u800c\u4e14\u8f15\u9b06\u5730\u8d0f\u904e\u5176\u4ed6\u524d\u5341\u7684 GCLB \u4f7f\u7528\u8005\u3002
\u4e00\u958b\u59cb\uff0c\u4ed6\u5011\u53ea\u6709\u900f\u904e Maglev \u4f86\u8ca0\u8f09\u6d41\u91cf\u3002 \u7576 Maglev \u6536\u5230\u5c01\u5305\u5f8c\uff0c\u5c31\u6703\u76f4\u63a5\u50b3\u7d66\u61c9\u7528\u7a0b\u5f0f\u7684\u8ca0\u8f09\u5747\u8861\u5668 Nginx\uff0c\u4e26\u5728\u90a3\u88e1\u5b8c\u6210 TCP/TLS \u7684\u9023\u7dda\uff0c \u9032\u4e00\u6b65\u7de9\u885d HTTP \u8acb\u6c42\uff0c\u7b49\u5f85\u767c\u9001\u7d66\u5f8c\u7aef\u670d\u52d9\u3002 \u9019\u6703\u6709\u5e7e\u500b\u554f\u984c\uff1a
\u7531\u65bc\u53d7\u5230 SYN flood \u7684\u653b\u64ca\uff0c\u4fc3\u4f7f\u4ed6\u5011\u958b\u59cb\u4f7f\u7528 Maglev \u52a0\u4e0a GFE \u7684\u7d44\u5408\u3002 \u7576\u5728\u6d41\u91cf\u4f4e\u5cf0\u6642\u5b8c\u6210\u8f49\u578b\u5f8c\uff0c\u4ed6\u5011\u537b\u5728\u6d41\u91cf\u9ad8\u5cf0\u6642\u5f97\u5230\u4e86\u5148\u524d\u9ad8\u5cf0 2 \u500d\u7684\u6d41\u91cf\uff0c \u9019\u5c0e\u81f4\u61c9\u7528\u7a0b\u5f0f\u7684 Nginx \u5b8c\u5168\u4f86\u4e0d\u53ca\u8655\u7406\u9023\u7dda\uff0c\u9032\u4e00\u6b65\u62d6\u57ae\u4e86\u5f8c\u9762\u6574\u500b\u670d\u52d9\u7684\u8655\u7406\u3002 \u6700\u7d42\u5c0e\u81f4\u5f8c\u7aef\u670d\u52d9\u7684\u7de9\u6162\uff08\u4e26\u975e\u5931\u80fd\uff09\u8b93\u5f88\u591a\u8acb\u6c42\u90fd\u5728 Nginx \u4e2d\u8d85\u6642\uff0c\u800c\u4f7f\u7528\u8005\u5728\u6536\u5230\u8d85\u6642\u7684\u56de\u8986\u6642\uff0c \u6703\u76f4\u63a5\u91cd\u65b0\u5617\u8a66\u8a72\u8acb\u6c42\uff0c\u52a0\u5287\u4e86\u6574\u500b\u707d\u96e3\u7684\u767c\u751f\u3002
\u540c\u6642\uff0c\u5168\u4e16\u754c\u7684 GCLB \u7684\u5bb9\u7a4d\u4e5f\u5728\u9019\u6642\u4e0b\u964d\u5230\u4e00\u534a\u3002 \u9019\u662f\u7531\u65bc Pok\u00e9mon GO \u7684\u61c9\u7528\u7a0b\u5f0f\u7576\u8acb\u6c42\u5931\u6557\u6642\uff0c\u6703\u99ac\u4e0a\u9032\u884c\u91cd\u50b3\uff0c\u63a5\u8457\u7b49\u5f85\u56fa\u5b9a\u6642\u9593\u5f8c\uff0c\u518d\u6b21\u91cd\u50b3\u3002 \u5982\u679c\u6b64\u6642 Nginx \u91cd\u555f\uff0c\u77ac\u9593\u6240\u6709\u9023\u7dda\u65b7\u6389\u53c8\u6703\u99ac\u4e0a\u88ab\u4f7f\u7528\u8005\u91cd\u50b3\uff0c\u8b93\u8acb\u6c42\u5728\u4e00\u77ac\u9593\u98c6\u9ad8\u5230\u4e4b\u524d\u9ad8\u5cf0\u7684 20 \u500d\u3002
\u9019\u6642 Google \u91dd\u5c0d GFE \u63a1\u53d6\u4e86\u5e7e\u500b\u7dca\u6025\u63aa\u65bd\uff1a
\u9019\u4ef6\u4e8b\u8b93 GFE \u7684\u6548\u80fd\u8a55\u4f30\u4e2d\uff0c\u66f4\u91cd\u8996\u7576\u5f8c\u7aef\u7de9\u6162\u6642\u7684\u8655\u7406\u72c0\u6cc1\u3002 \u800c\u5c0d Pok\u00e9mon GO \u7684\u958b\u767c\u8005\u4f86\u8aaa\uff0c\u4ed6\u5011\u4f7f\u7528\u8abf\u6574\u4e86\u91cd\u50b3\u7684\u6a5f\u5236 \uff08\u589e\u52a0 jitter\uff09\uff0c \u4ee5\u53ca\u66f4\u6709\u7d93\u9a57\u7684\u8655\u7406\u5982\u4f55\u61c9\u4ed8\u9ad8\u6d41\u91cf\u3002
"},{"location":"feedback/site-reliability-workbook/managing-load/#\u8ca0\u8f09\u7ba1\u7406\u7684\u624b\u6bb5","title":"\u8ca0\u8f09\u7ba1\u7406\u7684\u624b\u6bb5","text":"\u8ca0\u8f09\u5e73\u8861\u3001\u8ca0\u8f09\u524a\u6e1b \u548c \u81ea\u52d5\u589e\u6e1b \u5c31\u662f\u6211\u5011\u5728\u505a\u8ca0\u8f09\u7ba1\u7406\u6642\u9700\u8981\u62ff\u634f\u3001\u6b0a\u8861\u7684\u4e09\u5927\u5de5\u5177\u3002
\u8ca0\u8f09\u5e73\u8861\u6703\u5206\u914d\u6d41\u91cf\u3001\u8ca0\u8f09\u524a\u6e1b\u6703\u628a\u7121\u6cd5\u8655\u7406\u7684\u6d41\u91cf\u63d0\u65e9\u6368\u68c4\uff0c\u90fd\u5f88\u597d\u7406\u89e3\uff0c \u9019\u88e1\u5c31\u7279\u5225\u4ecb\u7d39\u81ea\u52d5\u589e\u6e1b\u9019\u500b\u5de5\u5177\u3002
\u900f\u904e\u81ea\u52d5\u589e\u9577\u6a5f\u5236\uff0c\u4f86\u589e\u52a0\u670d\u52d9\u7684\u901a\u91cf\uff0c\u907f\u514d\u9ad8\u5cf0\u9020\u6210\u7684\u7de9\u6162\uff1b \u900f\u904e\u81ea\u52d5\u7e2e\u6e1b\u6a5f\u5236\uff0c\u4f86\u589e\u52a0\u8cc7\u6e90\u7684\u4f7f\u7528\u7387\uff0c\u907f\u514d\u8cc7\u6e90\u7684\u6d6a\u8cbb\u3002
\u4ee5\u4e0b\u662f\u7c21\u8ff0\u81ea\u52d5\u589e\u6e1b\u7684\u6700\u4f73\u5be6\u8e10\u3001\u5e38\u898b\u932f\u8aa4\u914d\u7f6e\u4ee5\u53ca\u73fe\u968e\u6bb5\u7684\u9650\u5236\uff1a
\u6700\u5f8c\uff0c\u4e0a\u9762\u63d0\u7684\u624b\u6bb5\u61c9\u8a72\u540c\u6642\u88ab\u8003\u616e\u9032\u53bb\uff0c \u4e5f\u5c31\u662f\u8aaa\uff0c\u8acb\u5617\u8a66\u7528\u591a\u7a2e\u7b56\u7565\u53bb\u7ba1\u7406\u8ca0\u8f09\u3002 \u4f8b\u5982\uff1a
\u5047\u8a2d\u6709\u500b\u7dda\u4e0a\u5546\u57ce\u70ba\u4e86\u9ad8\u53ef\u7528\u6027\uff0c\u5728\u4e09\u500b\u5340\u57df\u5efa\u7f6e\u4e86\u5404\u81ea\u7684\u670d\u52d9\u53e2\u96c6\uff0c\u5728\u9019\u4e9b\u53e2\u96c6\u524d\u9762\u88dd\u4e86\u4e00\u500b\u8ca0\u8f09\u5e73\u8861\u5668\u3002
\u4ed6\u5011\u7684\u8ca0\u8f09\u5e73\u8861\u4e0d\u662f\u6839\u64da\u8acb\u6c42\u53bb\u5206\u914d\uff0c\u800c\u662f\u6839\u64da\u4e0b\u6e38\u53e2\u96c6\u7684 CPU \u4f7f\u7528\u7387\u3002 \u82e5\u6bcf\u500b\u8acb\u6c42\u4f7f\u7528\u7684 CPU \u8d8a\u4f4e\uff0c\u5c07\u6703\u5206\u914d\u7d66\u9019\u500b\u53e2\u96c6\u8d8a\u591a\u7684\u8acb\u6c42\u3002 \u4f8b\u5982 \u5340\u57dfA \u6bcf\u79d2\u9001\u4e86 10 \u500b\u8acb\u6c42\u4e4b\u5f8c\uff0cCPU \u589e\u52a0\u4e86 5%\uff0c\u4e26\u4e14\u95a5\u503c\u8a2d\u5728 CPU \u4f7f\u7528\u7387\u9054\u5230 80% \u5f8c\u5c31\u4e0d\u80fd\u518d\u7d66\u3002 \u9019\u4ee3\u8868\u8ca0\u8f09\u5e73\u8861\u5668\u53ef\u4ee5\u767c\u9001\u6bcf\u79d2 160\uff08\\(80/5*10\\)\uff09\u500b\u8acb\u6c42\u7d66\u5b83\u3002 \u800c \u5340\u57dfB \u6bcf\u79d2\u9001\u4e86 10 \u500b\u8acb\u6c42\u5f8c\uff0cCPU \u589e\u52a0\u5230 8%\uff0c\u9019\u6642\u5c31\u53ea\u6703\u7d66\u4ed6 RPS 100 \u7684\u91cf\u3002
\u65e9\u4e0a 10:46 \u6642\u56e0\u70ba\u6298\u6263\uff0c\u4f7f\u7528\u8005\u589e\u52a0\uff0cRPS \u5f9e\u5e38\u614b\u7684 90 \u62c9\u9ad8\u5230 120\uff0c\u9019\u6642\u6b63\u597d\u662f 11:00\u3002 \u7531\u65bc\u6b64\u6642 \u5340\u57dfA \u7684\u8acb\u6c42\u6bd4\u8f03\u591a\uff0c\u5c0e\u81f4\u4ed6\u7387\u5148\u7a81\u7834 CPU \u4f7f\u7528\u7684\u81e8\u754c\u9ede\uff08\u4f8b\u5982\u524d\u8ff0\u7684 80%\uff09\uff0c \u9032\u800c\u5c0e\u81f4\u670d\u52d9\u7684\u8ca0\u8f09\u524a\u6e1b\u89f8\u767c\u3002
\u5340\u57dfA \u7684\u670d\u52d9\u70ba\u4e86\u907f\u514d\u50b7\u5bb3\u64f4\u5927\uff0c\u800c\u63d0\u65e9\u56de\u61c9\u8acb\u6c42\uff0c\u4e26\u4e14\u8b93\u932f\u8aa4\u7387\u62c9\u9ad8\u3002 \u4f46\u7531\u65bc\u9019\u500b\u932f\u8aa4\u8b93\u8acb\u6c42\u5f88\u5feb\u5c31\u56de\u61c9\uff0c\u5c0e\u81f4\u670d\u52d9\u8655\u7406\u8acb\u6c42\u7684 CPU \u4f7f\u7528\u7387\u5f88\u4f4e\u3002 \u6700\u7d42\u8ca0\u8f09\u5e73\u8861\u5668\u958b\u59cb\u628a\u5927\u91cf\u8acb\u6c42\u9001\u904e\u53bb\uff0c\u5c0e\u81f4\u72c0\u6cc1\u8d8a\u4f86\u8d8a\u7cdf\u3002
\u9019\u500b\u6848\u4f8b\u5c31\u4f7f\u5178\u578b\u7684\u8ca0\u8f09\u5e73\u8861\u548c\u8ca0\u8f09\u524a\u6e1b\u5f7c\u6b64\u4e4b\u9593\u5354\u4f5c\u5931\u6557\u3002
"},{"location":"feedback/site-reliability-workbook/managing-load/#\u624b\u6bb5\u843d\u5be6\u7684\u5efa\u8b70","title":"\u624b\u6bb5\u843d\u5be6\u7684\u5efa\u8b70","text":"\u4ee5\u4e0b\u662f Google \u63d0\u51fa\u7684\u4e00\u4e9b\u5efa\u8b70\uff1a
\u8ca0\u8f09\u524a\u6e1b \u4e5f\u8981\u5efa\u7acb\u5728\u61c9\u7528\u908f\u8f2f\u4e4b\u4e0a\uff0c\u4f8b\u5982\u8acb\u6c42\u7aef\u91dd\u5c0d\u7c21\u55ae\u800c\u5927\u91cf\u7684\u8acb\u6c42\u7d66\u4e88\u8f03\u77ed\u7684\u6642\u9593\u9650\u5236\u3001\u670d\u52d9\u7aef\u8981\u5118\u65e9\u7d42\u6b62\u88ab\u4e2d\u65b7\u7684\u8acb\u6c42\u3002 \u63db\u53e5\u8a71\u8aaa\uff0c\u670d\u52d9\u7aef\u63d0\u4f9b\u7684\u63a5\u53e3\u6587\u4ef6\uff08API \u6587\u4ef6\uff0c\u4f8b\u5982 OpenAPI\uff09\u5c31\u61c9\u8a72\u8981\u63d0\u4f9b\u9650\u6642\u7684\u5efa\u8b70\uff0c \u4f8b\u5982\u9019\u500b API \u61c9\u9650\u6642 3 \u79d2\uff0c\u5176\u4ed6\u7684\u9650\u6642 15 \u79d2\u7b49\u7b49\u3002
"},{"location":"feedback/site-reliability-workbook/managing-load/#\u7e3d\u7d50","title":"\u7e3d\u7d50","text":"\u8ca0\u8f09\u7ba1\u7406\u624b\u6bb5\u5f88\u597d\u7528\uff0c\u4f46\u662f\u5982\u679c\u4ed6\u5011\u6c92\u6709\u88ab\u5c0f\u5fc3\u8a2d\u5b9a\uff0c\u5f88\u5bb9\u6613\u9020\u6210\u5927\u898f\u6a21\u7684\u707d\u96e3\u3002 \u9664\u6b64\u4e4b\u5916\uff0c\u5982\u679c\u591a\u500b\u8ca0\u8f09\u7ba1\u7406\u624b\u6bb5\u6c92\u6709\u540c\u6b65\u5f7c\u6b64\u4e4b\u9593\u7684\u72c0\u614b\uff0c\u5c31\u5bb9\u6613\u5931\u53bb\u4ed6\u5011\u539f\u672c\u7684\u50f9\u503c\u3002 \u4f8b\u5982 Pok\u00e9mon GO \u6848\u4f8b\u4e2d\u7684\u4f7f\u7528\u8005\u5feb\u901f\u91cd\u8a66\u8acb\u6c42\u3001\u55ae\u4e00\u4e0a\u6e38\u7684\u7de9\u6162\u6703\u62d6\u57ae\u8ca0\u8f09\u5e73\u8861\uff0c\u6700\u7d42\u53ef\u80fd\u5c0e\u81f4\u5927\u898f\u6a21\u7684\u5931\u80fd\u3002
"},{"location":"feedback/site-reliability-workbook/nalsd/","title":"\u975e\u62bd\u8c61\u5927\u578b\u7cfb\u7d71\u8a2d\u8a08","text":"\u975e\u62bd\u8c61\u5927\u578b\u7cfb\u7d71\u8a2d\u8a08\uff08Non Abstract Large System Design, NALSD\uff09\u7684\u76ee\u7684\u5728\u65bc\u8b93\u958b\u767c\u8005\u8a2d\u8a08\u7cfb\u7d71\u67b6\u69cb\u6642\uff0c \u6709\u500b\u4f9d\u64da\u5efa\u7acb\u7a69\u5065\u800c\u53c8\u9ad8\u64f4\u5145\u7684\u7cfb\u7d71\u3002
\u672c\u6587\u5148\u900f\u904e\u5b9a\u7fa9\u554f\u984c\uff0c\u6536\u96c6\u9700\u6c42\u4e26\u53cd\u8986\u5be9\u8996\u3001\u5faa\u5e8f\u6539\u5584\u67b6\u69cb\u7684\u8a2d\u8a08\uff0c\u6700\u7d42\u5f97\u5230\u4e00\u500b\u53ef\u9760\u7684\u7cfb\u7d71\u8a2d\u8a08\u89e3\u65b9\u3002 \u76ee\u6a19\u662f\u8b93\u958b\u767c\u8005\u80fd\u8a2d\u8a08\u51fa\u4e00\u500b\u5728\u521d\u671f\u4fbf\u64c1\u6709\u9ad8\u7a69\u5065\u6027\u4e14\u540c\u6642\u64c1\u6709\u672a\u4f86\u8abf\u6574\u7684\u74b0\u5883\uff0c \u800c\u9019\u500b\u904e\u7a0b\uff0c\u5c31\u662f\u628a\u62bd\u8c61\u7684\u9700\u6c42\uff0c\u964d\u6210\u5be6\u969b\u53ef\u88ab\u4f30\u91cf\u7684\u5be6\u8e10\u3002 \u9019\u4e9b\u5be6\u8e10\u5305\u62ec\uff1a
\u9019\u4e9b\u5be6\u8e10\u8b93 SRE \u6709\u80fd\u529b\u5728\u9762\u5c0d\u7cfb\u7d71\u8a2d\u8a08\u6642\uff0c \u601d\u8003\u7cfb\u7d71\u7684\u64f4\u5145\u6027\u548c\u53ef\u80fd\u7684\u74f6\u9838\uff0c\u4e26\u5c08\u6ce8\u5728\u9019\u4e9b\u9ede\u4e0a\u3002 \u5728\u63a5\u4e0b\u4f86\u7684\u7df4\u7fd2\u4e2d\uff0c\u6bcf\u4e00\u6b21\u8a2d\u8a08\u7684\u8fed\u4ee3\uff0c\u90fd\u53ef\u4ee5\u53cd\u8986\u554f\u81ea\u5df1\u9019\u56db\u500b\u554f\u984c\uff1a
\u7df4\u7fd2\u7684\u76ee\u7684
\u6240\u6709\u7684\u7cfb\u7d71\u6700\u7d42\u90fd\u8981\u5be6\u969b\u8dd1\u5728\u771f\u5be6\u7684\u8cc7\u6599\u4e2d\u5fc3\u548c\u771f\u5be6\u7684\u8a2d\u5099\u4e0a\uff0c \u6211\u5011\u9700\u8981\u53cd\u8986\u7df4\u7fd2\u5c07\u767d\u677f\u4e0a\u7684\u67b6\u69cb\u5716\uff0c\u8f49\u5316\u6210\u5be6\u969b\u8981\u4f7f\u7528\u7684\u8a2d\u5099\u6578\u91cf\u7b49\u7b49\u3002 \u807d\u8d77\u4f86\u5f88\u7463\u788e\uff0c\u4f46\u662f\u4e0d\u53bb\u7df4\u7fd2\u548c\u898f\u5283\uff0c\u7576\u6211\u5011\u5be6\u969b\u4e0a\u7dda\u6642\uff0c\u53ef\u80fd\u6703\u4ed8\u51fa\u66f4\u6158\u75db\u7684\u4ee3\u50f9\u3002
\u7df4\u7fd2\u4e2d\u7684\u5047\u8a2d\u548c\u63a8\u4f30\u6703\u6bd4\u6700\u7d42\u5be6\u969b\u7d50\u679c\u91cd\u8981\u3002 \u65e9\u671f\u7684\u5047\u8a2d\u6703\u5f88\u5927\u7a0b\u5ea6\u5f71\u97ff\u6700\u7d42\u7684\u6210\u679c\uff0c\u4f46\u662f\u5728 NALSD \u4e2d\uff0c \u6211\u5011\u4e26\u4e0d\u662f\u8981\u7df4\u7fd2\u51fa\u5b8c\u7f8e\u7684\u5047\u8a2d\uff0c\u800c\u662f\u5728\u591a\u500b\u4e0d\u5b8c\u7f8e\u4f46\u662f\u5408\u7406\u7684\u5047\u8a2d\u4e2d\u5c0e\u51fa\u4e00\u500b\u66f4\u597d\u88ab\u8a6e\u91cb\u7684\u7d50\u679c
"},{"location":"feedback/site-reliability-workbook/nalsd/#\u7df4\u7fd2\u6d41\u7a0b","title":"\u7df4\u7fd2\u6d41\u7a0b","text":"\u958b\u59cb\u524d\uff0c\u5148\u7c21\u8ff0\u4e00\u4e0b\u6d41\u7a0b\u3002 \u6211\u5011\u5c07\u4f7f\u7528\u53cd\u8986\u8fed\u4ee3\u7684\u65b9\u5f0f\u53bb\u8a2d\u8a08\u7cfb\u7d71\uff0c\u6bcf\u6b21\u8fed\u4ee3\u90fd\u6703\u5b9a\u7fa9\u51fa\u76f8\u95dc\u7684\u8a2d\u8a08\u4e26\u627e\u51fa\u5b83\u7684\u512a\u52e2\u548c\u5f31\u9ede\u3002 \u800c\u6bcf\u6b21\u8fed\u4ee3\u7684\u5206\u6790\uff0c\u90fd\u6703\u5e6b\u52a9\u6211\u5011\u627e\u51fa\u512a\u9ede\u5728\u4e0b\u4e00\u6b21\u7684\u8fed\u4ee3\u4e2d\u8a2d\u8a08\u51fa\u66f4\u597d\u7684\u7cfb\u7d71\u3002 \u5728\u521d\u59cb\u968e\u6bb5\u6211\u5011\u6703\u6839\u64da\u4ee5\u4e0b\u5169\u500b\u554f\u984c\u4f86\u8a2d\u8a08\u7cfb\u7d71\uff1a
\u63a5\u8457\u6211\u5011\u6703\u53bb\u601d\u8003\u91dd\u5c0d\u521d\u59cb\u8a2d\u8a08\u7684\u64f4\u5145\u6027\uff0c\u9019\u6642\u5c31\u6703\u518d\u53bb\u56de\u61c9\u4ee5\u4e0b\u4e09\u500b\u554f\u984c\uff1a
\u96d6\u7136\u9019\u88e1\u5217\u51fa\u9806\u5e8f\uff0c\u4f46\u5be6\u969b\u7df4\u7fd2\u6642\u9019\u4e9b\u554f\u984c\u53ef\u80fd\u662f\u53cd\u8986\u8a70\u554f\u7684\u3002 \u4f8b\u5982\u5728\u521d\u59cb\u968e\u6bb5\uff0c\u6211\u5011\u53ef\u80fd\u5c31\u6703\u5148\u8003\u616e\u5b83\u7684\u53ef\u64f4\u5145\u6027\u3002 \u5982\u679c\u9019\u500b\u8a2d\u8a08\u5728\u5f8c\u9762\u7684\u554f\u984c\u7121\u6cd5\u5f97\u5230\u597d\u7684\u56de\u7b54\uff0c\u6211\u5011\u5c31\u6703\u4fee\u6b63\u6216\u66ff\u63db\u67d0\u500b\u7d44\u4ef6\uff0c\u63a5\u8457\u91cd\u982d\u958b\u59cb\u3002
"},{"location":"feedback/site-reliability-workbook/nalsd/#\u7df4\u7fd2adwords","title":"\u7df4\u7fd2\uff1aAdWords","text":"AdWords \u662f Google \u4e00\u9805\u7522\u54c1\uff0c\u7528\u4f86\u5728\u4f7f\u7528\u8005\u900f\u904e Google \u641c\u5c0b\u6642\uff0c\u63a8\u51fa\u7d14\u6587\u5b57\u7684\u5ee3\u544a\u3002 \u9019\u6b21\u7df4\u7fd2\uff0c\u662f\u8981\u8a2d\u8a08\u51fa\u4e00\u500b\u7cfb\u7d71\uff0c\u53ef\u4ee5\u89c0\u6e2c\u4e26\u56de\u5831\u6b63\u78ba\u7684 click-through rate \uff08CTR\uff0c\u4f7f\u7528\u8005\u9ede\u64ca\u5ee3\u544a\u6b21\u6578 \u9664\u4ee5 \u5ee3\u544a\u63a8\u64ad\u6578\uff09\u3002
\u5c0d\u65bc\u4f7f\u7528\u8005\u4f86\u8aaa\uff0c\u6703\u60f3\u8981\u77e5\u9053\u63a8\u64ad\u7684\u5ee3\u544a\u662f \u56e0\u70ba\u54ea\u4e9b\u95dc\u9375\u5b57\u88ab\u6295\u653e\u5ee3\u544a \u4ee5\u53ca \u54ea\u4e9b\u95dc\u9375\u5b57\u8b93\u5ee3\u544a\u66f4\u5bb9\u6613\u88ab\u9ede\u64ca\uff0c \u9032\u800c\u53bb\u6539\u8b8a\u5ee3\u544a\u95dc\u9375\u5b57\u7684\u7d44\u5408\u7136\u5f8c\u8abf\u6574\u5ee3\u544a\u50f9\u9322\u3002 \u9019\u4e9b\u8cc7\u8a0a\u4e5f\u5c31\u662f\u9700\u8981\u7d44\u5408 \u95dc\u9375\u5b57\u5c0d\u5ee3\u544a\u6295\u653e\u7387 \u4ee5\u53ca \u95dc\u9375\u5b57\u5c0d\u5ee3\u544a\u9ede\u64ca\u7387\u3002
"},{"location":"feedback/site-reliability-workbook/nalsd/#\u5b9a\u7fa9\u9700\u6c42\u7684-slo","title":"\u5b9a\u7fa9\u9700\u6c42\u7684 SLO","text":"\u9996\u5148\u6211\u5011\u7ad9\u5728\u4f7f\u7528\u8005\u7684\u89d2\u5ea6\u53bb\u601d\u8003\uff0c\u5c0d\u6211\u5011\u4f86\u8aaa\u6700\u95dc\u5fc3\u7684\u662f\u4ec0\u9ebc\uff1f \u5047\u8a2d\u6700\u95dc\u5fc3\u7684\u662f \u9762\u677f\u4e2d\u7684\u8acb\u6c42\u662f\u5426\u5feb\u901f \u4ee5\u53ca \u8cc7\u6599\u662f\u5426\u5373\u6642\uff0c\u7531\u6b64\u8a02\u5b9a\u51fa SLO\uff1a
\u7cfb\u7d71\u4e2d\u5df2\u7d93\u5b58\u5728\u6a5f\u5236\u628a\u4f7f\u7528\u8005\u7684\u6bcf\u500b \u641c\u5c0b \u548c \u5ee3\u544a\u9ede\u64ca \u8a18\u9304\u4e0b\u4f86\uff0c\u4ee5\u4e0b\u662f\u9019\u4e9b\u65e5\u8a8c\u7684\u5167\u5bb9\uff1a
\u540d\u7a31 \u8b8a\u6578\u540d\u7a31 \u578b\u5225 \u4f54\u4f4d\uff08bytes\uff09 \u6642\u9593time
64-bit integer 8 ID query_id
64-bit integer 8 ADs ad_ids
array of 64-bit integers 8~24\uff08\u6bcf\u6b21\u641c\u5c0b\u6700\u591a\u653e 3 \u500b\u5ee3\u544a\uff09 \u95dc\u9375\u5b57 search_terms
array of char \u2248500 \u5143\u8cc7\u6599 metadata
array of char 500~1000\uff08\u4f7f\u7528\u8a9e\u8a00\u3001\u54ea\u53f0\u6a5f\u5668\u670d\u52d9\u7684\u7b49\u7b49\uff09 \u641c\u5c0b\u7684\u65e5\u8a8c\u5167\u5bb9
\u540d\u7a31 \u8b8a\u6578\u540d\u7a31 \u578b\u5225 \u4f54\u4f4d\uff08bytes\uff09 \u6642\u9593time
64-bit integer 8 ID query_id
64-bit integer 8 AD ad_id
64-bit integers 8 \u5ee3\u544a\u9ede\u64ca\u7684\u65e5\u8a8c\u5167\u5bb9
\u70ba\u4ec0\u9ebc\u4e0d\u628a search_term \u653e\u9032\u5ee3\u544a\u9ede\u64ca\u7684\u65e5\u8a8c\u5982\u679c\u6211\u5011\u76f4\u63a5\u628a search_term
\u653e\u9032\u5ee3\u544a\u9ede\u64ca\u7684\u65e5\u8a8c\u4e2d\uff0c \u6211\u5011\u5c31\u53ef\u4ee5\u76f4\u63a5\u900f\u904e\u8a72\u65e5\u8a8c\u627e\u5230\u6211\u5011\u60f3\u8981\u7684\u6307\u6a19 \u95dc\u9375\u5b57\u5c0d\u5ee3\u544a\u9ede\u64ca\u7387\u3002
\u4f46\u73fe\u5be6\u662f\u9019\u4e9b\u9ede\u64ca\u7d00\u9304\u662f\u900f\u904e HTTP URL \u50b3\u905e\uff0c\u63db\u53e5\u8a71\u8aaa\u9019\u500b URL \u662f\u6709\u9577\u5ea6\u9650\u5236\u7684\uff0c \u9664\u6b64\u4e4b\u5916\uff0cGoogle \u9700\u8981\u63d0\u4f9b\u7684\u6307\u6a19\u4e0d\u53ea\u662f CTR\uff0c\u70ba\u4e86\u8cc7\u6e90\u4f7f\u7528\u7387\u548c\u8cc7\u6599\u4e00\u81f4\u6027\u7684\u8003\u91cf\uff0c \u4e0d\u6703\u628a search_term
\u5230\u8655\u4e1f\u3002
\u5047\u8a2d\uff1a
\u6211\u5011\u91dd\u5c0d\u4e09\u7a2e\u67b6\u69cb\u8a0e\u8ad6\uff1a
\u554f\u984c\uff1a\u9019\u500b\u8a2d\u8a08\u53ef\u80fd\u55ce\uff1f
\u5982\u679c\u628a\u8cc7\u6599\u653e\u9032 MySQL \u88e1\u9762\uff0c\u6211\u5011\u53ef\u4ee5\u900f\u904e\u4ee5\u4e0b\u7684 SQL \u627e\u51fa\u300c\u67d0\u500b\u5ee3\u544a\uff0c\u91dd\u5c0d\u67d0\u500b\u95dc\u9375\u5b57\u7684\u9ede\u64ca\u7387\u300d\u3002
-- \u628a Query Log \u5206\u6210\uff1aquery_ads\u3001query_terms \u548c query_metadata \u4e09\u500b\u8cc7\u6599\u8868\u3002\nSELECT a.search_term, a.click_count / b.query_count\nFROM (\n SELECT COUNT(*) AS click_count\n FROM click_history AS c\n LEFT JOIN query_terms AS q ON q.query_id = c.query_id AND q.search_term = ?\n WHERE c.ad_id = ?\n) a,\n(\n SELECT COUNT(*) AS query_count\n FROM query_ads AS a\n INNER JOIN query_terms AS t ON t.query_id = q.query_id AND t.search_term = ?\n WHERE a.ad_id = ?\n) b\nWHERE a.search_term = b.search_term\n
\u554f\u984c\uff1a\u9019\u65b9\u6cd5\u53ef\u4ee5\u5728\u6709\u9650\u7684\u8a2d\u5099\u6578\u91cf\u3001\u6642\u9593\u548c\u91d1\u9322\u5167\u9054\u6210\u55ce\uff1f
\u70ba\u4e86\u653e\u9032\u9019\u4e9b\u8cc7\u6599\uff0c\u6211\u5011\u9700\u8981\u591a\u5927\u7684\u8cc7\u6599\u5eab\uff1f \u6839\u64da\u524d\u9762\u4f30\u8a08\u7684\u91cf\uff0c\u8a08\u7b97\u4e00\u4e0b 1 \u5929\u7684\u641c\u5c0b\u65e5\u8a8c\u5927\u5c0f\u7d04\u70ba 86.4TB\uff1a
\\[\\begin{flalign} \\left( 5 \\times 10^5 \\mathrm{\\ queries/second} \\right) \\times \\left( 2 \\times 10^3 \\mathrm{\\ bytes} \\right) \\times \\left( 8.64 \\times 10^4 \\mathrm{\\ seconds/day} \\right) \\\\ =86.4 \\mathrm{\\ TB/day} \\end{flalign}\\]\u4fdd\u5b88\u4f30\u8a08\u9700\u8981\u7d04 100TB \u5bb9\u91cf\uff0c\u5047\u8a2d\u6211\u5011\u4f7f\u7528 4TB \u7684 HDD\uff08\u786c\u789f\uff09\uff0c\u800c\u6bcf\u500b\u786c\u789f\u53c8\u53d7\u9650\u65bc 200 IOPS\uff0c \u7136\u5f8c\u6839\u64da\u524d\u9762\u7684 MySQL\uff0c\u6211\u5011\u9700\u8981\u628a\u8cc7\u6599\u5b58\u9032 4 \u500b\u8cc7\u6599\u8868\uff0c\u6b64\u6642\u6211\u5011\u5c31\u6703\u9700\u8981\u7d04 10,000 \u500b\u786c\u789f\uff1a
\\[\\begin{align*} \\left( 5 \\times 10^5 \\mathrm{\\ queries/second} \\right) \\times \\left( 4 \\mathrm{\\ IO/query} \\right) / \\left( 200 \\mathrm{\\ IOPS/disk} \\right) \\\\ = 1 \\times 10^4 \\mathrm{\\ disks} \\end{align*}\\]\u55ae\u7d14\u7684\u8a08\u7b97\u9ede\u64ca\u7387\uff0c\u641c\u5c0b\u65e5\u8a8c\u5c31\u4f7f\u7528 10,000 \u500b\u786c\u789f\uff0c \u70ba\u4e86\u4e0d\u56e0 IOPS \u800c\u53bb\u9078\u64c7\u5927\u91cf\u786c\u9ad4\uff0c\u6211\u5011\u6c7a\u5b9a\u76f4\u63a5\u8a55\u4f30\u4e00\u4e0b RAM \u7684\u53ef\u884c\u6027\uff0c\u800c\u653e\u68c4\u5176\u4ed6\u5132\u5b58\u985e\u578b\uff0c\u4f8b\u5982 SSD\u3002 \u5047\u8a2d\u4e00\u53f0 16C/64G/1G\uff0816 core CPU\u300164 GB RAM\u30011G \u7db2\u8def\u901a\u91cf\uff09\u7684\u96fb\u8166\uff0c\u6211\u5011\u5c31\u6703\u9700\u8981 1563 \u53f0\u96fb\u8166\uff1a
\\[\\begin{align*} \\left\\lceil \\left( 100 \\mathrm{\\ TB} \\right) / \\left( 64 \\mathrm{\\ GB\\ RAM/machine} \\right) \\right\\rceil \\\\ = 1,563 \\mathrm{\\ machines} \\end{align*}\\]\u9019\u9ebc\u591a\u53f0\u7684 MySQL \u53e2\u96c6\uff0c\u9084\u53ea\u662f\u8a08\u7b97\u9ede\u64ca\u7387\u800c\u5df2\uff0c\u5176\u4e2d\u9084\u8981\u8003\u91cf\u8cc7\u6e90\u7684\u5099\u63f4\u3001\u5197\u4f59\uff0c\u986f\u7136\u4e0d\u592a\u5be6\u969b\u3002
"},{"location":"feedback/site-reliability-workbook/nalsd/#mapreduce","title":"MapReduce","text":"Tip
\u5728\u95b1\u8b80\u4e0b\u6587\u524d\uff0c\u5efa\u8b70\u5148\u7406\u89e3\u4ec0\u9ebc\u662f MapReduce\u3002
\u554f\u984c\uff1a\u9019\u500b\u8a2d\u8a08\u53ef\u80fd\u55ce\uff1f
\u628a\u641c\u5c0b\u65e5\u8a8c\u548c\u9ede\u64ca\u65e5\u8a8c\u7684 ad_id
\u5256\u6790\uff08map\uff09\u51fa\u4f86\uff0c\u4e4b\u5f8c \u5408\u4f75\uff08reduce\uff09\u9032\u6bcf\u500b search_term
\u7684\u9ede\u64ca\u6b21\u6578\u3002 \u96d6\u7136 MapReduce \u53ef\u4ee5\u8f15\u6613\u505a\u5230\u5206\u6563\u5f0f\u7684\u8a08\u7b97\uff0c\u7576\u9700\u8981\u66f4\u591a\u8a2d\u5099\u6642\u4e5f\u53ef\u4ee5\u8f15\u6613\u88dc\u4e0a\uff0c\u4f46\u662f\u6211\u5011\u9084\u8981\u8003\u91cf\u6211\u5011\u7684 SLO\u3002
99.9% \u7684 CTR \u8cc7\u8a0a\u90fd\u8981\u986f\u793a 5 \u5206\u9418\u5167\u7684\u8cc7\u6599\u3002
\u70ba\u4e86\u6eff\u8db3\u5373\u6642\u8cc7\u6599\u7684\u9700\u6c42\uff0c\u6211\u5011\u5fc5\u9808\u8981\u628a\u6279\u6b21\u8655\u7406\u7684\u7d1a\u8ddd\u8b8a\u5f97\u5f88\u5c0f\uff0c\u4f8b\u5982\uff0c\u6bcf\u5206\u9418\u6279\u6b21\u8a08\u7b97\u4e00\u6b21\u3002 \u4f46\u662f\u5728\u9032\u884c\u5408\u4f75\u8a08\u7b97\u6642\uff0c\u5982\u679c\u76f8\u540c\u641c\u5c0b\u548c\u9ede\u64ca\u7684\u65e5\u8a8c\u4e26\u6c92\u6709\u653e\u5728\u540c\u4e00\u500b\u6279\u6b21\u88e1 \uff08\u641c\u5c0b\u548c\u5ee3\u544a\u9ede\u64ca\u6839\u64da\u4f7f\u7528\u8005\u7684\u884c\u70ba\uff0c\u53ef\u80fd\u6c92\u8fa6\u6cd5\u5728\u4e00\u5206\u9418\u5167\u5b8c\u6210\uff09\uff0c \u5c31\u6c92\u8fa6\u6cd5\u7d44\u51fa search_term
\u548c\u9ede\u64ca\u6b21\u6578\u3002
\u5982\u679c\u8981\u8655\u7406\u9019\u7a2e\u8de8\u6279\u6b21\u7684\u904b\u7b97\u5c0d\u65bc MapReduce \u4f86\u8aaa\u5f88\u8017\u8cc7\u6e90\uff0c\u540c\u6642\u4e5f\u4e0d\u662f\u4ed6\u539f\u751f\u9069\u5408\u8655\u7406\u7684\u4e8b\u60c5\u3002 \u9762\u5c0d\u9019\u500b\u56f0\u5883\uff0c\u6211\u5011\u9078\u64c7\u5f80\u5176\u4ed6\u53ef\u80fd\u7684\u67b6\u69cb\u4f86\u8a0e\u8ad6\u3002
"},{"location":"feedback/site-reliability-workbook/nalsd/#logjoiner","title":"LogJoiner","text":"\u554f\u984c\uff1a\u9019\u500b\u8a2d\u8a08\u53ef\u80fd\u55ce\uff1f
\u6bd4\u8d77\u8b93\u641c\u5c0b\u65e5\u8a8c\u5b58\u9032 MySQL\uff0c \u6211\u5011\u4f7f\u7528 BigTable \u6216\u6392\u5e8f\u5b57\u4e32\u8868\uff0c \u9019\u7a2e\u597d\u505a\u5206\u5340\u7684\u8cc7\u6599\u5eab\uff0c \u7136\u5f8c\u8b93\u4ed6\u6839\u64da\u7279\u5b9a\u6b04\u4f4d\u505a\u7d22\u5f15\u5f8c\uff0c\u63a5\u8457\u55ae\u7d14\u5beb\u5165\u5373\u53ef\uff0c\u4e0d\u9700\u652f\u63f4 SQL \u7684\u8de8\u7bc0\u9ede\u641c\u5c0b\u3002
---\ntitle: LogJoiner \u67b6\u69cb\n---\nflowchart TD\n ql[Query Logs] --All querylog records-->qm[(QueryMapkey: ad_id,search_termvalue: query_ids)]\n ql --All querylog records-->qs[(QueryStorekey: query_idvalue: QueryLog record)]\n cl[Click Logs]--All click logrecords-->lj([LogJoiner])\n lj<--Look upquery_id-->qs\n lj --> cm[(CLickMapkey: ad_id,search_termvalue: query_ids)]\n
QueryStore
LogJoiner
ClickMap
QueryMap
NALSD \u662f\u4e00\u500b\u8a2d\u8a08\u7cfb\u7d71\u6642\u53cd\u8986\u8fed\u4ee3\u7684\u904e\u7a0b\uff0c\u9996\u5148\u628a\u67b6\u69cb\u62c6\u6210\u5c0d\u61c9\u7684\u908f\u8f2f\u5143\u4ef6\uff0c\u4e26\u60f3\u50cf\u5176\u7f6e\u5165\u7dda\u4e0a\u74b0\u5883\u7684\u8cc7\u6e90\u9700\u6c42\u3002 \u5728\u9019\u4e4b\u4e2d SLO \u7684\u8a02\u5b9a\u8b8a\u5f97\u5c24\u70ba\u91cd\u8981\uff0c\u56e0\u70ba SLO \u6703\u9a45\u52d5\u67b6\u69cb\u8a2d\u8a08\u7684\u9032\u5316\uff0c\u4e26\u5728\u8a2d\u8a08\u904e\u7a0b\u4e2d\u4e0d\u6703\u8ff7\u822a\u3002
\u4e4b\u6240\u4ee5\u8aaa\u53cd\u8986\u8fed\u4ee3\uff0c\u5c31\u662f\u5728\u8a2d\u8a08\u904e\u7a0b\u4e2d\u6bcf\u4e00\u6b21\u7d50\u675f\u90fd\u8981\u53cd\u8986\u554f\u81ea\u5df1\u9084\u80fd\u66f4\u597d\u55ce\uff1f \u8b93\u8a2d\u8a08\u8005\u9664\u4e86\u80fd\u4f9d\u64da SLO \u9019\u500b\u6e96\u7e69\u4e4b\u5916\uff0c\u9084\u80fd\u900f\u904e\u524d\u4e00\u6b21\u7684\u67b6\u69cb\u6216\u524d\u5e7e\u6b21\u7684\u67b6\u69cb\uff0c\u6700\u7d42\u7522\u51fa\u66f4\u597d\u7684\u67b6\u69cb\u3002
\u6839\u64da Google \u7684\u7d93\u9a57\uff0c\u628a\u62bd\u8c61\u7684\u9700\u6c42\u8f49\u5316\u6210\u5be6\u969b\u7684\u8cc7\u6e90\uff0c \u4f8b\u5982 CPU\u3001\u8a18\u61b6\u9ad4\u3001Network throughput \u7b49\u7b49\uff0c \u5c0d\u65bc\u67b6\u69cb\u6700\u7d42\u7684\u7a69\u5b9a\u6027\u975e\u5e38\u91cd\u8981\u3002
"},{"location":"feedback/site-reliability-workbook/on-call/","title":"\u5f85\u547d\u5c0f\u7d44","text":"SRE \u7684\u5f85\u547d\uff08on-call\uff09\u548c\u50b3\u7d71\u7684\u5f85\u547d\u5dee\u7570\u5728\u65bc\uff0c\u6bd4\u8d77\u5c08\u6ce8\u65bc\u91cd\u8907\u6027\u7684\u52de\u52d5\uff0c\u4f8b\u5982\u76e3\u807d\u932f\u8aa4\u4e8b\u4ef6\u3001\u5b9a\u671f\u67e5\u770b\u9762\u677f\u7b49\u7b49\uff0c \u4ed6\u5011\u66f4\u5c08\u6ce8\u65bc\u5b9a\u7fa9\u9069\u7576\u7684\u95a5\u503c\uff0c\u512a\u5316\u958b\u767c\u6d41\u7a0b\u548c\u7cfb\u7d71\u3002
\u5f85\u547d\u5c0d\u7dda\u4e0a\u670d\u52d9\u7684\u7dad\u904b\u975e\u5e38\u91cd\u8981\uff0c\u4e14\u901a\u5e38\u662f\u500b\u9ad8\u7dca\u5f35\u6027\u7684\u5de5\u4f5c\uff0c\u4e0d\u7ba1\u662f\u5c0d\u500b\u4eba\u6216\u8005\u5718\u968a\u3002 \u4e5f\u56e0\u6b21\u8a2d\u8a08\u4e00\u500b\u7cfb\u7d71\u5316\u7684\u5f85\u547d\u6a5f\u5236\u662f\u5f85\u547d\u4eba\u54e1\u3001\u5f85\u547d\u5c0f\u7d44\u3001\u5168\u516c\u53f8\u90fd\u9700\u8981\u5171\u540c\u5546\u8a0e\u7684\u8b70\u984c\u3002
\u5982\u679c\u4f60\u5e38\u5e38\u6536\u5230\u4e00\u4e9b\u7121\u95dc\u7dca\u8981\u7684\u544a\u8b66\uff0c\u6211\u5011\u5efa\u8b70\u4f60\u9000\u5f8c\u4e00\u6b65\u5f9e\u66f4\u9ad8\u7684\u89d2\u5ea6\u53bb\u89c0\u5bdf\u6574\u500b\u60c5\u6cc1\u3002 \u4e26\u4e14\u5617\u8a66\u548c\u5176\u4ed6\u5925\u4f34\u6216 SRE \u5718\u968a\u4ea4\u63db\u610f\u898b\u3002
\u7dca\u6025\u60c5\u6cc1\u7684\u7dad\u904b\u9700\u8981\u4f9d\u9760 \u5e73\u5e38\u7df4\u7fd2\u5e36\u4f86\u7684\u808c\u8089\u8a18\u61b6 \u548c \u5b8c\u6574\u6587\u4ef6\u5e6b\u52a9\u6df7\u4e82\u72c0\u6cc1\u7684\u6307\u5f15\uff0c\u9019\u88e1\u6709\u5e7e\u500b\u9805\u76ee\u9700\u8981\u719f\u6089\uff1a
\u8981\u719f\u6089\u9019\u4e9b\u9805\u76ee\uff0c\u5c31\u5fc5\u9808\u8981\u505a\u7dda\u4e0a\u707d\u96e3\u6f14\u7df4\uff0c\u5982\u4f55\u88fd\u9020\u707d\u96e3\uff0c\u9700\u8981\u5927\u5bb6\u5947\u767c\u7570\u60f3\u3002 \u6bcf\u6b21\u57f7\u884c on-call \u7df4\u7fd2\u6642\uff0c\u53ef\u4ee5\u8f2a\u6d41\u7576\u4e3b\u5e2d\uff0c\u5305\u62ec\u707d\u96e3\u7684\u88fd\u9020\u3001\u544a\u8b66\u548c\u884c\u52d5\u3002
\u6700\u5f8c\uff0c\u975e\u5e38\u91cd\u8981\u7684\u4e00\u9ede\u662f\uff0c\u9019\u4e9b\u7d93\u9a57\u8981\u600e\u9ebc\u50b3\u627f\uff0c\u4e00\u4efd\u597d\u7684\u6587\u4ef6\uff1f\u4e00\u500b\u597d\u7684\u641c\u5c0b\u5e73\u53f0\uff1f
\u628a\u4e8b\u4ef6\u5206\u985e\uff1a
\u9019\u9ebc\u505a\u7684\u76ee\u7684\u662f\u628a on-call \u5f9e\u4e00\u4e9b\u65e5\u5e38\u7dad\u904b\u8cc7\u8a0a\u4e2d\u62c9\u51fa\u4f86\uff0c\u53ea\u5c08\u6ce8\u5728\u7dca\u6025\u4e8b\u4ef6\u3002
\u7576\u6709\u4e86 SLO\uff0c\u6211\u5011\u5c31\u53ef\u4ee5\u6bcf\u6708\u9032\u884c\u516c\u958b\u7684\u670d\u52d9\u5065\u5eb7\u5f59\u5831\uff0c\u5305\u62ec\u4e8b\u4ef6\u8655\u7406\u3001\u932f\u8aa4\u9810\u7b97\u7b49\u7b49\uff0c \u8b93\u90a3\u4e9b\u80a1\u6771\u80fd\u5920\u77e5\u9053\u516c\u53f8\u7684\u670d\u52d9\u5065\u5eb7\u72c0\u6cc1\u3002 \u9019\u7a2e\u6703\u8b70\u4e0d\u53ea\u80fd\u5920\u50b3\u9054 SLO \u7684\u91cd\u8981\u6027\uff0c\u4e5f\u8b93\u958b\u767c\u8005\u6709\u500b\u6642\u9593\u6aa2\u8996\u81ea\u5df1\u7684\u670d\u52d9\u3002
\u6bcf\u6b21\u9019\u4e9b\u7d93\u9a57\uff0c\u90fd\u6703\u8b93\u958b\u767c\u5718\u968a\u6709\u66f4\u5bb9\u6613\u8df3\u51fa\u300c\u4e8b\u4ef6\u5206\u985e\u3001\u6839\u56e0\u5206\u6790\u3001\u4e8b\u5f8c\u6790\u8aa4\u300d\u7684\u5faa\u74b0\u3002 \u4e26\u9032\u800c\u5f37\u5316\u548c\u8abf\u6574\u7522\u54c1\u958b\u767c\u6642\u7684\u6e96\u5247\uff0c\u6700\u91cd\u6539\u5584 on-call \u5718\u968a\u7684\u5de5\u4f5c\u54c1\u8cea\u3002
PagerDuty \u8aaa\u660e\u4ec0\u9ebc\u662f on-call
"},{"location":"feedback/site-reliability-workbook/postmortem-culture/","title":"\u4e8b\u5f8c\u6790\u8aa4\u6587\u5316","text":"\u5728\u672c\u66f8\u63cf\u8ff0\u4e2d\uff0c\u4e8b\u5f8c\u6790\u8aa4\u662f\u4e00\u500b\u5728 Google \u4e2d\u975e\u5e38\u91cd\u8981\u7684\u6587\u5316\uff08\u4e8b\u5f8c\u6790\u8aa4\u4e26\u4e0d\u662f\u4ec0\u9ebc\u65b0\u79d1\u6280\uff0c\u800c\u662f\u6587\u5316\uff09\u3002 \u5176\u6838\u5fc3\u7684\u6982\u5ff5\u662f\uff1a\u6790\u8aa4\u904e\u7a0b\u4e2d\u4e0d\u8981\u5e36\u8457\u8cac\u5099\u3002 \u597d\u7684\u4e8b\u5f8c\u6790\u8aa4\u6587\u5316\uff0c\u6703\u8b93\u5931\u8aa4\u6e1b\u5c11\uff0c\u5de5\u4f5c\u66f4\u9ad8\u6548\u548c\u5feb\u6a02\uff0c\u4e26\u6e1b\u5c11\u91cd\u8907\u6027\u932f\u8aa4\uff0c\u52a0\u5feb\u932f\u8aa4\u6062\u5fa9\u3002 \u800c\u672c\u7bc7\u7684\u91cd\u9ede\u5247\u662f\u8981\u50b3\u9054\u4e00\u500b\u8a0a\u606f\uff1a\u63a8\u5ee3\u4e8b\u5f8c\u6790\u8aa4\u6587\u5316\u662f\u53ef\u884c\u7684\uff01
\u4ee5\u4e0b\u6587\u7ae0\u5c07\u5206\u70ba\u4e09\u5927\u584a\uff1a
\u96d6\u7136 Google \u5927\u90e8\u5206\u7684\u4f3a\u670d\u5668\u90fd\u4f4d\u65bc\u81ea\u5df1\u7ba1\u7406\u7684\u8cc7\u6599\u4e2d\u5fc3\uff0c\u4f46\u4ecd\u6703\u5728\u4e00\u4e9b\u5730\u5340\u4f7f\u7528\u79df\u501f\u7684\u8cc7\u6599\u4e2d\u5fc3\uff0c \u4f7f\u7528\u8a17\u7ba1\u670d\u52d9\uff08Colocation centre\uff09\u5efa\u7acb\u5feb\u53d6\uff08cache\uff09\u548c\u4ee3\u7406\u5668\uff08proxy\uff09\uff0c \u800c\u9019\u985e\u7684\u6a5f\u5668\u5728 Google \u5167\u90e8\uff0c\u7a31\u5176\u70ba \u885b\u661f\uff08satellites\uff09\u3002
Google \u5c0d\u65bc\u7dad\u904b\u8a2d\u5099\u7684\u904b\u884c\uff0c\u5927\u90e8\u5206\u90fd\u662f\u4f9d\u9760\u81ea\u52d5\u5316\u7684\uff0c \u5305\u62ec\u65b0\u6a5f\u5668\u7684\u8edf\u9ad4\u5b89\u88dd\u3001\u9000\u5f79\u3001\u7248\u672c\u5347\u7d1a\u3001\u6d41\u91cf\u6d29\u6d41\uff08drain\uff09\u7b49\u7b49\u3002 \u5176\u4e2d\u9000\u5f79\u6642\u7684\u81ea\u52d5\u5316\u7a31\u5176\u70ba \u78c1\u789f\u62b9\u9664\uff08dsikerase\uff09\uff0c \u4e00\u65e6\u6a5f\u5668\u88ab\u62b9\u9664\uff0c\u5132\u5b58\u7684\u6240\u6709\u8cc7\u6599\u5c07\u7121\u6cd5\u518d\u88ab\u7372\u53d6\u3002 \u800c\u9019\u7aef\u81ea\u52d5\u5316\u7684\u908f\u8f2f\u5927\u81f4\u5982\u4e0b\uff1a
// \u5f97\u5230\u6307\u5b9a\u8cc7\u6599\u4e2d\u5fc3\uff08satellite\uff09\u7684\u6240\u6709\u5728\u7dda\u6a5f\u5668\nconst machines = getActiveMachinesFrom(satellite);\n\n// \u900f\u904e `filter` \u628a\u8a72\u6307\u5b9a\u8cc7\u6599\u4e2d\u5fc3\u7684\u6a5f\u5668\uff08\u800c\u975e\u6240\u6709\u8cc7\u6599\u4e2d\u5fc3\u7684\u6240\u6709\u6a5f\u5668\uff09\u9032\u884c\u9000\u5f79\nsendToDecom({\n candidates: getAllActiveMachines(),\n filter: machines,\n});\n
\u7576\u7dad\u904b\u4eba\u54e1\u9032\u884c\u65e5\u5e38\u7684\u9000\u5f79\u5de5\u4f5c\u6642\uff0c\u81ea\u52d5\u5316\u57f7\u884c\u7d50\u679c\u5f97\u77e5\u6709\u932f\uff08\u7136\u800c\u5be6\u969b\u4e0a\u537b\u5df2\u7d93\u6b63\u78ba\u9032\u884c\u9000\u5f79\uff09\uff0c \u9019\u6642\u7dad\u904b\u4eba\u54e1\u70ba\u4e86\u9664\u932f\uff0c\u518d\u4e00\u6b21\u7684\u57f7\u884c\u9019\u500b\u81ea\u52d5\u5316\u8173\u672c\uff1a
// \u56e0\u70ba\u4e0a\u4e00\u6b21\u628a\u6240\u6709\u6a5f\u5668\u90fd\u9000\u5f79\u4e86\uff0c\u6240\u4ee5\u9019\u88e1\u6703\u5f97\u5230\u7a7a\u7684\u9663\u5217\nconst machines = getActiveMachinesFrom(satellite);\n\n// `filter` \u6536\u5230\u7a7a\u9663\u5217\u5f8c\uff0c\u6703\u76f4\u63a5\u9078\u7528\u6240\u6709\u7684 `candidates` \u800c\u975e\u7a7a\u9663\u5217\nsendToDecom({\n candidates: getAllActiveMachines(),\n filter: machines,\n});\n
\u7531\u65bc filter
\u662f\u7a7a\u9663\u5217\uff0c\u5168\u4e16\u754c\u6240\u6709\u885b\u661f\u5167\u53d7\u8a17\u7ba1\u7684\u6a5f\u5668\u90fd\u88ab\u9032\u884c\u78c1\u789f\u62b9\u9664\uff0c \u56e0\u70ba\u885b\u661f\u5167\u7684\u6a5f\u5668\u88ab\u5224\u5b9a\u70ba\u5931\u80fd\uff0c\u5168\u4e16\u754c\u6240\u6709\u7684\u6d41\u91cf\u90fd\u88ab\u5c0e\u6d41\u9032 Google \u81ea\u5df1\u7dad\u8b77\u7684\u8cc7\u6599\u4e2d\u5fc3\u3002
\u5e78\u8667\u7576\u521d\u7684\u5bb9\u91cf\u898f\u5283\u8b93 Google \u6709\u80fd\u529b\u627f\u8f09\u9019\u4e9b\u6d41\u91cf\uff0c \u9019\u6b21\u7684\u4e8b\u4ef6\u96d6\u7136\u8017\u6642\u4e86\u5169\u5929\u624d\u628a\u6240\u6709\u8cc7\u6599\u4e2d\u5fc3\u7684\u4f3a\u670d\u5668\u6062\u5fa9\u6b63\u5e38\uff0c\u4f46\u53ea\u9020\u6210\u4e9b\u5fae\u7684\u6f5b\u6642\uff08latency\uff09\u4e0a\u5347\u3002 \u4e26\u4e14\u5728\u4e8b\u5f8c\u6578\u9031\u9032\u884c\u5065\u5168\u7684\u76e3\u63a7\u548c\u5efa\u7acb\u963b\u65b7\u5668\uff0c \u4e26\u78ba\u4fdd\u8a72\u81ea\u52d5\u5316\u6d41\u7a0b\u662f\u51aa\u7b49\u7684\uff08idempotent\uff0c\u91cd\u8907\u57f7\u884c\u4e0d\u6703\u4e92\u76f8\u5f71\u97ff\uff09\u3002 \u4e09\u5e74\u5f8c\uff0c\u985e\u4f3c\u7684\u4e8b\u4ef6\u5c0e\u81f4\u90e8\u5206\u885b\u661f\u7684\u4f3a\u670d\u5668\u5931\u80fd\uff0c \u800c\u4e09\u5e74\u524d\u7684\u6574\u6cbb\u624b\u6bb5\u5927\u5927\u964d\u4f4e\u4e86\u8a72\u4e8b\u4ef6\u7684\u7206\u70b8\u534a\u5f91\u548c\u6062\u5fa9\u6642\u9593\u3002
\u63a5\u4e0b\u4f86\uff0c\u6211\u5011\u5c31\u4f86\u64b0\u5beb\u770b\u770b\u9019\u6b21\u4e8b\u4ef6\u7684\u4e8b\u5f8c\u6790\u8aa4\u6587\u4ef6\uff0c\u4e26\u6bd4\u8f03\u5169\u500b\u4e0d\u540c\u6587\u4ef6\u7684\u5dee\u7570\u3002
"},{"location":"feedback/site-reliability-workbook/postmortem-culture/#\u58de\u7684\u4e8b\u5f8c\u6790\u8aa4\u6587\u4ef6","title":"\u58de\u7684\u4e8b\u5f8c\u6790\u8aa4\u6587\u4ef6","text":"\u7121\u3002
"},{"location":"feedback/site-reliability-workbook/postmortem-culture/#\u5f71\u97ff","title":"\u5f71\u97ff","text":"\u53e2\u96c6\u7684\u81ea\u52d5\u5316\u64cd\u4f5c\u4e0d\u662f\u51aa\u7b49\u7684\u3002 \u7a0b\u5f0f\u78bc\u672c\u8eab\u6709\u907f\u514d\u90e8\u5206\u6a5f\u5236\u91cd\u65b0\u57f7\u884c\u7684\u9650\u5236\uff0c\u4f46\u662f\u7121\u6cd5\u963b\u6b62\u4f7f\u7528\u8005\u91cd\u8907\u57f7\u884c\u7a0b\u5f0f\u672c\u8eab\u3002 \u8352\u5510\u7684\u662f\u6c92\u6709\u4efb\u4f55\u6587\u4ef6\u8aaa\u660e\u9019\u500b\u9677\u9631\uff0c\u5c0e\u81f4\u5718\u968a\u6210\u54e1\u5927\u90e8\u5206\u90fd\u4efb\u4f55\u91cd\u8907\u57f7\u884c\u662f\u53ef\u88ab\u63a5\u53d7\u7684\u3002
\u9019\u4fbf\u662f\u5728\u57f7\u884c\u65e5\u5e38\u9000\u5f79\u6642\uff0c\u767c\u751f\u7684\u932f\u8aa4\u539f\u56e0\u3002 \u6211\u5011\u6b63\u6e96\u5099\u628a\u6a5f\u5668\u9032\u884c\u66ff\u63db\u6642\uff0c\u738b\u56db@ \u5b8c\u5168\u5ffd\u7565\u4e86\u4e0a\u4e00\u6b21\u64cd\u4f5c\u5df2\u7d93\u6b63\u78ba\u57f7\u884c\uff0c \u56e0\u70ba\u4ed6\u7684\u4e0d\u5c0f\u5fc3\u5c0e\u81f4\u9032\u4e00\u6b65\u89f8\u767c\u8a72\u9677\u9631\u3002
"},{"location":"feedback/site-reliability-workbook/postmortem-culture/#\u5fa9\u539f\u64cd\u4f5c","title":"\u5fa9\u539f\u64cd\u4f5c","text":"\u7121\u3002
"},{"location":"feedback/site-reliability-workbook/postmortem-culture/#\u5b78\u5230\u4e86\u4ec0\u9ebc","title":"\u5b78\u5230\u4e86\u4ec0\u9ebc","text":"\u7121\u3002
"},{"location":"feedback/site-reliability-workbook/postmortem-culture/#\u70ba\u4ec0\u9ebc\u9019\u4efd\u6587\u4ef6\u5beb\u5f97\u7cdf","title":"\u70ba\u4ec0\u9ebc\u9019\u4efd\u6587\u4ef6\u5beb\u5f97\u7cdf","text":"\u707d\u96e3\u7684\u50f9\u503c\u5728\u65bc\u597d\u7684\u4e8b\u5f8c\u6790\u8aa4\uff0c\u6b63\u56e0\u5982\u6b64\uff0c\u6211\u5011\u82b1\u6642\u9593\u53bb\u64b0\u5beb\u9019\u4efd\u6587\u4ef6\uff0c\u5c07\u8b8a\u5f97\u81f3\u95dc\u91cd\u8981\u3002 \u95b1\u8b80\u8005\u5728\u770b\u9019\u4efd\u6587\u4ef6\u6642\uff0c\u61c9\u8a72\u8981\u6e05\u695a\u4e8b\u4ef6\u7684\u8108\u7d61\uff0c\u66f4\u91cd\u8981\u7684\u662f\u80fd\u5f9e\u4e8b\u4ef6\u4e2d\u5b78\u5230\u4e9b\u4ec0\u9ebc\u3002
\u63a5\u4e0b\u4f86\u6211\u5011\u5206\u6790\u4e00\u4e0b\u70ba\u4ec0\u9ebc\u4e0a\u4e00\u4efd\u6587\u4ef6\u5beb\u5f97\u5f88\u721b\u3002
"},{"location":"feedback/site-reliability-workbook/postmortem-culture/#\u80cc\u666f\u63cf\u8ff0\u7684\u5331\u4e4f","title":"\u80cc\u666f\u63cf\u8ff0\u7684\u5331\u4e4f","text":"\u672c\u6b21\u4e8b\u4ef6\u6709\u5e7e\u500b\u5c08\u6709\u540d\u8a5e\uff0c \u4f8b\u5982 \u885b\u661f \u4ee3\u8868\u7528\u4f86\u8655\u7406\u908a\u7de3\u904b\u7b97\u7684\u6a5f\u5668\u3001\u78c1\u789f\u62b9\u9664 \u4ee3\u8868\u81ea\u52d5\u5316\u904b\u884c\u7684\u8173\u672c\u3002 \u5982\u679c\u4f60\u9700\u8981\u63d0\u4f9b\u4e00\u4e9b\u80cc\u666f\u77e5\u8b58\uff0c\u8acb\u984d\u5916\u589e\u52a0\u4e00\u4e9b\u6bb5\u843d\u4f86\u8aaa\u660e\uff0c\u4f8b\u5982\u300c\u8a5e\u5f59\u8868\u300d\u6216\u300c\u80cc\u666f\u77e5\u8b58\u300d\u3002
\u4e00\u500b\u7f3a\u4e4f\u6e05\u695a\u6982\u7d61\u7684\u6587\u4ef6\uff0c\u4e0d\u53ea\u6703\u8b93\u4eba\u770b\u4e0d\u61c2\uff0c \u751a\u81f3\u6703\u8b93\u4eba\u9078\u64c7\u5ffd\u7565\u9019\u4efd\u6587\u4ef6\uff0c\u9032\u800c\u628a\u80fd\u5f9e\u4e8b\u4ef6\u5b78\u5230\u7684\u6771\u897f\u76f4\u63a5\u6b78\u96f6\u3002
"},{"location":"feedback/site-reliability-workbook/postmortem-culture/#\u95dc\u9375\u7d30\u7bc0\u7684\u5ffd\u7565","title":"\u95dc\u9375\u7d30\u7bc0\u7684\u5ffd\u7565","text":"\u5f88\u591a\u6bb5\u843d\u53ea\u6709\u9ad8\u5c64\u6b21\u7684\u6982\u89c0\uff0c\u7f3a\u4e4f\u91cd\u8981\u7684\u7d30\u7bc0\uff0c\u4f8b\u5982\uff1a
\u72c0\u6cc1\u7e3d\u7d50\u4e2d\uff0c\u6211\u5011\u7121\u6cd5\u5f9e\u9019\u4efd\u6587\u4ef6\u5f97\u77e5\u4e8b\u4ef6\u7684\u5f71\u97ff\u7bc4\u570d\uff0c\u5982\u679c\u5f71\u97ff\u7bc4\u570d\u662f\u591a\u500b\u7522\u54c1\uff0c\u8acb\u660e\u78ba\u7d66\u51fa\u76f8\u95dc\u7684\u6578\u503c\u3002 \u9019\u4efd\u6587\u4ef6\u4e2d\u53ea\u6709\u6301\u7e8c\u6642\u9593\u662f\u6578\u5b57\uff0c\u5982\u679c\u6c92\u6709\u76f8\u95dc\u6578\u503c\uff0c\u8acb\u76e1\u91cf\u7d66\u51fa\u500b\u4f30\u8a08\uff0c \u7562\u7adf \u6c92\u6709\u6b63\u78ba\u7684\u7206\u70b8\u534a\u5f91\uff0c\u5c31\u7121\u6cd5\u6b63\u78ba\u8a55\u4f30\u662f\u5426\u4fee\u5fa9\u5b8c\u6210\u3002
\u6839\u56e0\u548c\u89f8\u767c\u9ede\u662f\u4e8b\u5f8c\u6790\u8aa4\u6587\u4ef6\u4e2d\u975e\u5e38\u91cd\u8981\u7684\u4e00\u9ede\u3002 \u5728\u9019\u4efd\u6587\u4ef6\u4e2d\uff0c\u53ea\u6709\u770b\u5230\u4e00\u5c0f\u6bb5\u843d\uff0c\u7f3a\u4e4f\u8db3\u5920\u7d30\u7bc0\u8b93\u4eba\u80fd\u5920\u6709\u6a5f\u6703\u601d\u8003\u5176\u4e2d\u7684\u6539\u9032\u9ede\u3002
\u6211\u5011\u901a\u5e38\u80fd\u5728\u5fa9\u539f\u64cd\u4f5c\u6bb5\u843d\u4e2d\u627e\u5230\u767c\u751f\u4e86\u4ec0\u9ebc\uff0c\u600e\u9ebc\u88ab\u7de9\u89e3\u4ee5\u53ca\u4f7f\u7528\u8005\u662f\u600e\u9ebc\u88ab\u5f71\u97ff\u7684\uff0c \u7136\u800c\u9019\u4efd\u6587\u4ef6\u537b\u5b8c\u5168\u7a7a\u767d\u3002
"},{"location":"feedback/site-reliability-workbook/postmortem-culture/#\u5f8c\u7e8c\u512a\u5316\u7684\u8ca7\u4e4f","title":"\u5f8c\u7e8c\u512a\u5316\u7684\u8ca7\u4e4f","text":"\u5f8c\u7e8c\u512a\u5316\uff08Action Items, AIs\uff09\u6709\u5e7e\u500b\u9762\u5411\u53bb\u8a55\u65b7\u4ed6\u7684\u597d\u58de\uff0c\u4f8b\u5982\uff1a
\u8b93\u6211\u5011\u5047\u8a2d\u672a\u4f86\u53c3\u8207\u7dad\u904b\u672c\u670d\u52d9\u7684\u4eba\u54e1\uff0c\u90fd\u548c\u4e8b\u4ef6\u4e2d\u7684\u6211\u5011\u4e00\u6a23\u611a\u8822\u3002
\u2014 Dan Milstein\uff0cPost-Mortems at HubSpot: What I Learned From 250 Whys - \u6bcf\u500b\u512a\u5316\u90fd\u662f\u76f8\u540c\u7684\u512a\u5148\u7a0b\u5ea6\uff0c\u6703\u8b93\u9019\u500b\u6b04\u4f4d\u5931\u53bb\u610f\u7fa9\u3002
\u5c0d\u5ba2\u6236\u4f86\u8aaa\uff0c\u4e00\u500b\u6c92\u6709\u5f8c\u7e8c\u512a\u5316\u7684\u4e8b\u5f8c\u6790\u8aa4\u6587\u4ef6\uff0c\u7b49\u65bc\u6c92\u6709\u6587\u4ef6\uff0c\u6240\u4ee5\u4efb\u4f55\u4e00\u500b\u6703\u5f71\u97ff\u5ba2\u6236\u7684\u4e8b\u4ef6\uff0c \u90fd\u61c9\u8a72\u8981\u6709\u81f3\u5c11\u4e00\u500b\u512a\u5148\u7a0b\u5ea6\u70ba\u70ba 0 \u6216 1 \u7684\u6539\u5584\u9805\u76ee\u3002 - \u52c1\u91cf\u907f\u514d\u4f7f\u7528\u300c\u8b93\u4ed6\u66f4\u597d\u300d\u3001\u300c\u512a\u5316\u300d\u7b49\u6cdb\u5316\u7684\u8a5e\u5f59\uff0c\u6703\u8b93\u4eba\u7121\u6cd5\u5206\u6790\u8a72\u512a\u5316\u7684\u5b8c\u6210\u5ea6\u3002 - \u5982\u679c\u6c92\u6709\u7968\u53bb\u8ffd\u8e64\u76f8\u95dc\u512a\u5316\uff0c\u9019\u4e9b\u6539\u5584\u90fd\u5f88\u5bb9\u6613\u88ab\u907a\u5fd8\u3002
\u660e\u78ba\u8aaa\u660e\u4f55\u4eba\u5728\u4f55\u6642\u4f55\u5730\u72af\u932f\u770b\u8d77\u4f86\u662f\u500b\u5408\u7406\u7684\u64b0\u5beb\u6587\u4ef6\u65b9\u5f0f\uff0c\u4f46\u662f\u9019\u6703\u8b93\u9019\u4e9b\u4eba\u66f4\u5bb3\u6015\u72af\u932f\uff0c \u9032\u800c\u9078\u64c7\u63a9\u84cb\u932f\u8aa4\uff0c\u6700\u5f8c\u8b93\u65bc\u672c\u6b21\u4e8b\u4ef6\u7684\u6839\u56e0\u6216\u89f8\u767c\u9ede\u88ab\u932f\u8aa4\u89e3\u91cb\u3002 \u5e38\u898b\u7684\u7bc4\u4f8b\u53ef\u80fd\u662f\uff1a
\u4f8b\u5982\uff1a\u4e0d\u6562\u7f6e\u4fe1\u3001\u5f88\u8352\u5510\u5730\u3002
\u4e8b\u5f8c\u6790\u8aa4\u6587\u5316\u662f\u4e00\u500b\u4e8b\u5be6\u5c0e\u5411\u7684\u6587\u4ef6\uff0c\u4e5f\u7576\u7136\u5141\u8a31\u500b\u4eba\u7684\u8a55\u8ad6\u548c\u8cea\u7591\uff0c \u5b83\u61c9\u7576\u662f\u63d0\u4f9b\u4e00\u500b\u7a7a\u9593\u8b93\u591a\u4eba\u591a\u89d2\u5ea6\u4e14\u4e92\u76f8\u5c0a\u91cd\u5730\u53bb\u8a0e\u8ad6\u672c\u6b21\u4e8b\u4ef6\u3002 \u4f46\u662f\u904e\u591a\u7684\u60c5\u7dd2\u8a00\u8ad6\u6703\u5f71\u97ff\u5176\u4ed6\u4eba\u9032\u4f86\u53c3\u8207\u7684\u610f\u9858\uff0c\u597d\u7684\u65b9\u6cd5\u61c9\u7576\u662f\u4ee5\u8cc7\u6599\u70ba\u4f50\u8b49\u53bb\u95e1\u8ff0\u76f8\u95dc\u8ad6\u9ede\u3002
"},{"location":"feedback/site-reliability-workbook/postmortem-culture/#\u4e8b\u9805\u7684\u6b78\u5c6c\u4eba\u54e1","title":"\u4e8b\u9805\u7684\u6b78\u5c6c\u4eba\u54e1","text":"\u9019\u500b\u4e8b\u5f8c\u6790\u8aa4\u6587\u4ef6\u627e\u4e0d\u5230\u61c9\u8a72\u7531\u54ea\u500b\u4eba\u8ca0\u8cac\u64b0\u5beb\u3001\u8ffd\u8e64\u4ee5\u53ca\u56de\u7b54\u5176\u4ed6\u4eba\u7684\u7591\u554f\uff0c \u800c\u662f\u63d0\u4f9b\u4e86\u56db\u500b\u4eba\u7684\u540d\u5b57\uff0c\u8b93\u5927\u5bb6\u53bb\u731c\u3002
\u5f8c\u7e8c\u512a\u5316\u9805\u76ee\u7f3a\u4e4f\u660e\u78ba\u7684\u8ca0\u8cac\u4eba\uff0c\u9019\u6703\u8b93\u9019\u4e9b\u6539\u5584\u5f88\u96e3\u9032\u884c\u5f8c\u7e8c\u8ffd\u8e64\u3002
"},{"location":"feedback/site-reliability-workbook/postmortem-culture/#\u6587\u4ef6\u7684\u95b1\u8b80\u4eba\u54e1","title":"\u6587\u4ef6\u7684\u95b1\u8b80\u4eba\u54e1","text":"\u5728\u9019\u4efd\u6587\u4ef6\u4e2d\uff0c\u53ea\u5141\u8a31\u5718\u968a\u5167\u90e8\u4eba\u54e1\u67e5\u770b\uff0cGoogle \u5efa\u8b70\u4e8b\u5f8c\u6790\u8aa4\u6587\u4ef6\u662f\u5141\u8a31\u516c\u53f8\u5167\u90e8\u6240\u6709\u4eba\u54e1\u67e5\u770b\u7684\u3002 \u56e0\u70ba\u4e8b\u5f8c\u6790\u8aa4\u6587\u4ef6\u7684\u50f9\u503c\u5c31\u662f\u8b93\u8d8a\u591a\u4eba\u5f9e\u4e2d\u5b78\u5230\u8d8a\u591a\u4e8b\u60c5\u8d8a\u597d\u3002 \u66f4\u6709\u751a\u8005\uff0c\u4e5f\u53ef\u4ee5\u628a\u9019\u4efd\u6587\u4ef6\u516c\u4f48\u7d66\u516c\u53f8\u5916\u90e8\u4eba\u54e1\u67e5\u770b\uff0c \u56e0\u70ba\u4e00\u500b\u88ab\u59a5\u5584\u64b0\u5beb\u4e14\u8aa0\u5be6\u7684\u6587\u4ef6\u4e5f\u662f\u4e00\u500b\u6062\u5fa9\u5927\u5bb6\u5c0d\u516c\u53f8\u4fe1\u4efb\u7684\u597d\u65b9\u6cd5\u3002
"},{"location":"feedback/site-reliability-workbook/postmortem-culture/#\u6587\u4ef6\u767c\u5e03\u7684\u5ef6\u5b95","title":"\u6587\u4ef6\u767c\u5e03\u7684\u5ef6\u5b95","text":"\u9019\u4efd\u6587\u4ef6\u7684\u767c\u5e03\u5df2\u7d93\u662f\u4e8b\u4ef6\u767c\u751f\u5f8c\u7684\u597d\u5e7e\u500b\u6708\u4e86\uff0c\u5718\u968a\u6210\u54e1\u5c0d\u65bc\u672c\u6b21\u4e8b\u4ef6\u7684\u8a18\u61b6\u5df2\u7d93\u6a21\u7cca\uff0c \u5f88\u53ef\u80fd\u5728\u64b0\u5beb\u4e0a\u51fa\u73fe\u7455\u75b5\u3002
"},{"location":"feedback/site-reliability-workbook/postmortem-culture/#\u597d\u7684\u4e8b\u5f8c\u6790\u8aa4\u6587\u4ef6","title":"\u597d\u7684\u4e8b\u5f8c\u6790\u8aa4\u6587\u4ef6","text":"\u63a5\u4e0b\u4f86\u7684\u7bc4\u4f8b\u662f\u5be6\u969b\u4e0a\u5b58\u5728\u7684\u6587\u4ef6\uff0c\u96d6\u7136\u6703\u628a\u4e00\u4e9b\u654f\u611f\u8cc7\u6599\u85cf\u8d77\u4f86\uff0c\u4f46\u8db3\u4ee5\u6aa2\u9a57\u4f55\u70ba\u597d\u7684\u4e8b\u5f8c\u6790\u8aa4\u6587\u4ef6\u3002
satellite-a12bcd34 \u670d\u52d9\u592a\u591a\u5931\u6557 HTTP \u8acb\u6c42
\u5982\u679c\u4f60\u4e0d\u719f\u6089 Google \u524d\u7aef\u6d41\u91cf\u7684\u670d\u52d9\u65b9\u5f0f\u548c\u5176\u5e95\u5c64\u7684\u81ea\u52d5\u5316\u6a5f\u5236\uff0c\u8acb\u5148\u53c3\u95b1\u8a5e\u5f59\u8868\u3002
"},{"location":"feedback/site-reliability-workbook/postmortem-culture/#\u5f71\u97ff_1","title":"\u5f71\u97ff","text":"\u4ee5\u4e0b\u5c07\u8aaa\u660e\u5404\u500b\u9762\u5411\u7684\u5f71\u97ff\u3002
"},{"location":"feedback/site-reliability-workbook/postmortem-culture/#\u4f7f\u7528\u8005\u5f71\u97ff","title":"\u4f7f\u7528\u8005\u5f71\u97ff","text":"\u6709\u90e8\u5206\u5ee3\u544a\u6c92\u6709\u88ab\u6295\u653e\uff0c\u5be6\u969b\u6536\u76ca\u5f71\u97ff\u76ee\u524d\u4e0d\u53ef\u77e5\uff1a
\u67d0\u500b\u9023\u7d50\u5c0e\u5411\u4e8b\u4ef6\u8ffd\u8e64\u7cfb\u7d71\u3002
"},{"location":"feedback/site-reliability-workbook/postmortem-culture/#\u6839\u56e0\u548c\u89f8\u767c\u9ede_1","title":"\u6839\u56e0\u548c\u89f8\u767c\u9ede","text":"\u9577\u671f\u5b58\u5728\u65bc\u57f7\u884c\u9a57\u8b49\u6a5f\u5236\u7684\u932f\u8aa4\uff0c\u5c0e\u81f4\u7de8\u865f a12bcd34
\u7684\u8a2d\u5099\u5728\u9000\u5f79\u904e\u7a0b\u51fa\u932f\uff0c \u9019\u500b\u932f\u8aa4\u8b93\u9000\u5f79\u6a5f\u5236\u4e0d\u518d\u53d7\u9650\u65bc\u6307\u5b9a\u8a2d\u5099\uff0c\u800c\u662f\u6240\u6709\u7684\u885b\u661f\u8a2d\u5099\u3002 \u81f3\u6b64\uff0c\u5728\u4eba\u5de5\u4ecb\u5165\u66ab\u505c\u81ea\u52d5\u5316\u6a5f\u5236\u524d\uff0c\u73fe\u6709\u5927\u90e8\u5206\u7684\u885b\u661f\u8a2d\u5099\u90fd\u88ab\u57f7\u884c\u4e86\u9000\u5f79\uff0c\u4e26\u9032\u884c\u78c1\u789f\u62b9\u9664\u3002
\u6d41\u91cf\u5718\u968a\u63d0\u4f9b\u4e86 ReleaseSatelliteMachines
\u9019\u500b API\uff0c\u4ed6\u6703\u9032\u884c\u4e09\u500b\u968e\u6bb5\u7684\u64cd\u4f5c\uff1a
a12bcd34
\u88e1\u6709\u4e00\u500b rack123
\u6a5f\u6ac3\uff1brack123
\u5c0d\u61c9\u65bc machine1
\u3001machine2
\u7b49\u7b49\uff1b\u56e0\u70ba\u7f3a\u5c11\u6aa2\u67e5\uff0c\u6240\u4ee5\u9019\u500b\u64cd\u4f5c\u4e26\u4e0d\u662f\u51aa\u7b49\u7684\u3002 \u5982\u679c\u6709\u4e00\u500b\u6a5f\u6ac3\u5df2\u7d93\u5728\u4e0a\u6b21\u64cd\u4f5c\u9032\u884c\u78c1\u789f\u62b9\u9664\uff0c\u7b2c\u4e8c\u9805\u64cd\u4f5c\u5f97\u5230\u7684\u6a5f\u5668\u5c31\u6703\u8b8a\u6210\u7a7a\u9663\u5217\u3002 \u7576\u7a7a\u9663\u5217\u50b3\u9032\u7b2c\u4e09\u9805\u64cd\u4f5c\u6642\uff0c\u5c31\u6703\u8b8a\u6210\u628a\u6240\u6709\u6a5f\u5668\u9032\u884c\u78c1\u789f\u62b9\u9664\u3002
\u9019\u500b\u5371\u96aa\u7684\u7a0b\u5f0f\u908f\u8f2f\u5df2\u7d93\u5b58\u5728\u4e00\u6bb5\u6642\u9593\u4e86\uff0c\u4f46\u662f\u56e0\u70ba\u5718\u968a\u5728\u57f7\u884c\u5b8c\u4e00\u6b21\u64cd\u4f5c\u5f8c\uff0c \u6703\u5728 UI \u4e0a\u986f\u793a run once \u9019\u500b\u901a\u77e5\uff0c\u4ee3\u8868\u4ed6\u5df2\u7d93\u6210\u529f\u88ab\u57f7\u884c\uff0c\u4e0d\u9700\u8981\u518d\u57f7\u884c\u4e86\u3002 \u4f46\u9019\u500b run once \u4e26\u6c92\u6709\u544a\u77e5\u4f7f\u7528\u8005\uff0c\u7576\u4f60\u518d\u57f7\u884c\u4e00\u6b21\uff0c\u6703\u767c\u751f\u4ec0\u9ebc\u4e8b\uff0c \u9019\u4e5f\u9032\u4e00\u6b65\u8b93\u53e2\u96c6\u91cd\u555f\u5718\u968a\u5728\u624b\u52d5\u89f8\u767c\u7b2c\u4e8c\u6b21\u9000\u5f79\u64cd\u4f5c\u6642\uff0c\u89f8\u767c\u4e86\u9019\u500b\u932f\u8aa4\u3002
"},{"location":"feedback/site-reliability-workbook/postmortem-culture/#\u6642\u9593\u7dda\u548c\u5fa9\u539f\u64cd\u4f5c","title":"\u6642\u9593\u7dda\u548c\u5fa9\u539f\u64cd\u4f5c","text":"\u6642\u9593\u7dda\u548c\u64cd\u4f5c\u5728\u9019\u88e1\u88ab\u96b1\u85cf\u4e86\uff0c\u4f46\u5be6\u969b\u7684\u6587\u4ef6\u4e2d\u9019\u500b\u8cc7\u8a0a\u662f\u4e00\u5b9a\u6703\u6709\u7684\u3002
"},{"location":"feedback/site-reliability-workbook/postmortem-culture/#\u5b78\u5230\u4e86\u4ec0\u9ebc_1","title":"\u5b78\u5230\u4e86\u4ec0\u9ebc","text":""},{"location":"feedback/site-reliability-workbook/postmortem-culture/#\u6211\u5011\u505a\u5c0d\u4e86","title":"\u6211\u5011\u505a\u5c0d\u4e86","text":"\u95dc\u65bc\u5931\u80fd\u7684\u90e8\u5206\uff1a
\u95dc\u65bc\u5fa9\u539f\u7684\u90e8\u5206\uff1a
\u7531\u65bc\u672c\u4e8b\u4ef6\u7684\u5ee3\u6cdb\u5f71\u97ff\uff0c\u6211\u5011\u5c07\u512a\u5316\u62c6\u5206\u6210\u4e94\u500b\u9762\u5411\uff1a
\u9810\u9632\u548c\u98a8\u96aa\u7684\u6559\u80b2
\u512a\u5316\u5167\u5bb9 \u7a2e\u985e \u512a\u5148\u5ea6 \u6240\u5c6c\u4eba\u54e1 \u7968\u865f \u78ba\u4fdd\u5f9e\u6838\u5fc3\u5c0d\u5916\u7684\u6d41\u91cf\u4e0d\u6703\u904e\u8f09 \u5fa9\u539f P2 \u8607\u516d@ BUG129 \u78ba\u4fdd\u9000\u5f79\u6d41\u7a0b\u7684\u554f\u984c\u88ab\u8a3b\u8a18\u5728\u7dca\u6025\u505c\u6a5f\u6587\u4ef6\u548c\u707d\u96e3\u5347\u7d1a\u806f\u7e6b\u6587\u4ef6\u4e2d \u7de9\u89e3 P2 \u674e\u4e8c@ BUG130 \u65b0\u589e\u4e00\u500b\u7d05\u8272\u6309\u9215\u4f86\u4e2d\u65b7\u505c\u6a5f\u6d41\u7a0b \u7de9\u89e3 P0 \u694a\u4e00@ BUG131\u7dca\u6025\u72c0\u6cc1\u548c\u56de\u61c9
\u512a\u5316\u5167\u5bb9 \u7a2e\u985e \u512a\u5148\u5ea6 \u6240\u5c6c\u4eba\u54e1 \u7968\u865f \u76e3\u63a7\u76ee\u6a19\u7684\u5b89\u5168\u6027\u6aa2\u67e5\u8981\u62d2\u7d55\u90a3\u4e9b\u7121\u6cd5\u56de\u6eaf\u7684\u7570\u52d5 \u7de9\u89e3 P2 \u738b\u56db@ BUG132 \u7576\u8d85\u904e xx% \u7684\u6a5f\u5668\u88ab\u4e0b\u7dda\uff0c\u767c\u51fa\u544a\u8b66\u3002\u6a5f\u5668\u7684\u9000\u5f79\u904e\u7a0b\u5f9e 16:38 \u6301\u7e8c\u5230 17:10 \u5075\u6e2c P1 \u8607\u516d@ BUG133\u76e3\u63a7\u548c\u544a\u8b66
\u512a\u5316\u5167\u5bb9 \u7a2e\u985e \u512a\u5148\u5ea6 \u6240\u5c6c\u4eba\u54e1 \u7968\u865f \u900f\u904e HTTPS \u4f7f\u7528 iPXE \u4f86\u63d0\u5347\u91cd\u65b0\u5b89\u88dd\u7684\u6548\u7387\u548c\u901f\u5ea6 \u7de9\u89e3 P2 \u738b\u56db@ BUG134\u908a\u7de3\u904b\u7b97\u7684\u4f9b\u7d66
\u512a\u5316\u5167\u5bb9 \u7a2e\u985e \u512a\u5148\u5ea6 \u6240\u5c6c\u4eba\u54e1 \u7968\u865f \u900f\u904e\u65e2\u6709\u5de5\u5177\u5be9\u95b1\u7ba1\u7406\u7cfb\u7d71\u7684\u7a0b\u5f0f\u78bc \u5fa9\u539f P2 \u8607\u516d@ BUG135 \u5b89\u6392 DiRT \u6e2c\u8a66\uff1a\u78c1\u789f\u62b9\u9664\u5f8c\u5fa9\u539f\u6a5f\u5668\uff1bYouTube \u7684 CDN \u4e5f\u505a\u540c\u6a23\u7684\u4e8b \u7de9\u89e3 P2 \u8a31\u4e03@ BUG136\u96dc\u9805
"},{"location":"feedback/site-reliability-workbook/postmortem-culture/#\u8a5e\u5f59\u8868_1","title":"\u8a5e\u5f59\u8868","text":""},{"location":"feedback/site-reliability-workbook/postmortem-culture/#admin-server","title":"Admin Server","text":"\u4e00\u53f0 RPC \u7684\u7ba1\u7406\u670d\u52d9\uff0c\u5141\u8a31\u81ea\u52d5\u5316\u6a5f\u5236\u91dd\u5c0d GFE \u57f7\u884c\u4e00\u4e9b\u7dad\u904b\u884c\u70ba\u3002\u6700\u5e38\u898b\u7684\u64cd\u4f5c\u5c31\u662f\u555f\u52d5\u6216\u95dc\u9589\u7bc0\u9ede\u3002
"},{"location":"feedback/site-reliability-workbook/postmortem-culture/#autoreplacer","title":"Autoreplacer","text":"\u81ea\u52d5\u66ff\u63db\u6a5f\u5236\u662f\u7528\u4f86\u7ba1\u7406\u6a5f\u5668\u7684\u670d\u52d9\uff0c\u5b83\u5141\u8a31\u900f\u904e\u64cd\u4f5c\u4f86\u8a2d\u5b9a\u6a5f\u5668\u3001\u8cc7\u6599\u79fb\u8f49\u3001\u6a5f\u5668\u91cd\u555f\u7b49\u64cd\u4f5c\u3002
"},{"location":"feedback/site-reliability-workbook/postmortem-culture/#\u9000\u5f79","title":"\u9000\u5f79","text":"\u9000\u5f79\u6a5f\u5668\u662f\u4e00\u500b\u727d\u6d89\u5230\u8a31\u591a\u5718\u968a\u7684\u6d41\u7a0b\u3002
"},{"location":"feedback/site-reliability-workbook/postmortem-culture/#\u78c1\u789f\u62b9\u9664","title":"\u78c1\u789f\u62b9\u9664","text":"\u4e00\u500b\u6703\u95dc\u4fc2\u5230\u8edf\u786c\u9ad4\u7684\u884c\u70ba\uff0c\u7528\u4f86\u8b93\u786c\u9ad4\u8a2d\u5099\u5728\u9000\u51fa Google \u7684\u8cc7\u6599\u4e2d\u5fc3\u524d\uff0c\u9032\u884c\u5b89\u5168\u7684\u62b9\u9664\u3002 \u78c1\u789f\u62b9\u9664\u662f\u9000\u5f79\u6d41\u7a0b\u4e2d\u7684\u4e00\u74b0\u3002
"},{"location":"feedback/site-reliability-workbook/postmortem-culture/#gfegoogle-front-end","title":"GFE(Google Front End)","text":"\u524d\u7aef\u57fa\u790e\u8a2d\u65bd\u57f7\uff0c\u5728\u6d41\u91cf\u9032\u5230 Google \u6838\u5fc3\u7684\u8cc7\u6599\u4e2d\u5fc3\u524d\uff0c\u8ca0\u8cac\u63a5\u6536\u6d41\u91cf\u6216\u908a\u7de3\u7684\u8a2d\u5099\u7fa4\u3002
"},{"location":"feedback/site-reliability-workbook/postmortem-culture/#imagincident-management-at-google","title":"IMAG(Incident Management At Google)","text":"\u4e00\u500b\u5617\u8a66\u5efa\u7acb\u6a19\u6e96\u5316\u548c\u4e00\u81f4\u6027\u65b9\u6cd5\u4f86\u8655\u7406\u6240\u6709\u4e8b\u4ef6\u7684\u5c08\u6848\uff0c\u5f9e\u7cfb\u7d71\u5931\u80fd\u5230\u5929\u7136\u707d\u5bb3\uff0c\u4e26\u6574\u5408\u76f8\u95dc\u6709\u76ca\u7684\u56de\u61c9\u3002
"},{"location":"feedback/site-reliability-workbook/postmortem-culture/#mdbmachine-database","title":"MDB(Machine Database)","text":"\u4e00\u500b\u7d0d\u7ba1\u6240\u6709\u6a5f\u5668\u72c0\u614b\u7684\u8cc7\u6599\u5eab\u3002
"},{"location":"feedback/site-reliability-workbook/postmortem-culture/#omgoutage-management-at-google","title":"OMG(Outage Management at Google)","text":"\u4e00\u500b\u63d0\u4f9b\u4e8b\u4ef6\u7ba1\u7406\u548c\u5100\u8868\u677f\u7684\u5de5\u5177\uff0c\u7528\u4f86\u96c6\u4e2d\u8ffd\u8e64\u548c\u7ba1\u7406\u6240\u6709\u6b63\u5728\u8655\u7406\u7684\u4e8b\u4ef6\u3002
"},{"location":"feedback/site-reliability-workbook/postmortem-culture/#\u885b\u661f\u7cfb\u7d71","title":"\u885b\u661f\u7cfb\u7d71","text":"\u5c0f\u4e14\u4fbf\u5b9c\u7684\u6a5f\u5668\u7fa4\uff0c\u7528\u4f86\u670d\u52d9\u975e\u5f71\u7247\u7684\u5916\u90e8\u6216\u908a\u7de3\u7684\u7db2\u8def\u6d41\u91cf\u3002 \u5e7e\u4e4e\u6240\u6709\u7684\u7dda\u4e0a\u57fa\u790e\u8a2d\u65bd\u90fd\u53ef\u4ee5\u4e0d\u4f9d\u8cf4\u4ed6\u800c\u9032\u884c\u904b\u4f5c\u3002 YouTube \u7684\u5f71\u7247\u6d41\u91cf\u4e0d\u662f\u53d7\u5230\u4ed6\u670d\u52d9\u7684\uff0c\u800c\u662f\u53e6\u5916\u6709\u500b\u5c08\u9580\u7684 CDN \u4f86\u8655\u7406\uff0c\u4e5f\u56e0\u6b64\u4e0d\u53d7\u672c\u6b21\u4e8b\u4ef6\u5f71\u97ff\u3002
"},{"location":"feedback/site-reliability-workbook/postmortem-culture/#\u9644\u4ef6","title":"\u9644\u4ef6","text":"\u70ba\u4ec0\u9ebc ReleaseSatelliteMachines
\u4e0d\u662f\u51aa\u7b49\u7684\uff1f
\u96b1\u85cf\u76f8\u95dc\u56de\u7b54
\u7576 Admin Server \u57f7\u884c\u7684\u64cd\u4f5c\u662f\u91dd\u5c0d\u6240\u6709\u885b\u661f\u8a2d\u5099\u6642\uff0c\u6703\u767c\u751f\u4ec0\u9ebc\u4e8b\uff1f
\u96b1\u85cf\u76f8\u95dc\u56de\u7b54
\u7576\u767c\u751f\u707d\u5bb3\u6642\uff0c\u5be6\u969b\u4e0a\u932f\u8aa4\u7684 QPS \u662f\u591a\u5c11\uff1f
\u96b1\u85cf\u76f8\u95dc\u56de\u7b54
IRC \u7684\u65e5\u8a8c
\u96b1\u85cf\u76f8\u95dc\u56de\u7b54
"},{"location":"feedback/site-reliability-workbook/postmortem-culture/#\u5716\u8868","title":"\u5716\u8868","text":"\u66f4\u512a\u7684\u6f5b\u6642 \u2014 \u885b\u661f\u7cfb\u7d71\u5be6\u969b\u70ba\u6211\u5011\u505a\u4e86\u4ec0\u9ebc\uff1f
\u6839\u64da\u6b64\u6b21\u4e8b\u4ef6\uff0c\u5728\u9760\u8fd1\u6838\u5fc3\u8cc7\u6599\u4e2d\u5fc3\u7684\u5730\u5340\uff0c\u885b\u661f\u7cfb\u7d71\u964d\u4f4e\u4e86 xx \u6beb\u79d2\u7684\u6f5b\u6642\uff1b \u5728\u8ddd\u96e2\u8f03\u9060\u7684\u5730\u5340\uff0c\u5247\u964d\u4f4e\u4e86 xx \u6beb\u79d2\u7684\u6f5b\u6642\u3002
\u96b1\u85cf\u7684\u5716\u7247
\u6838\u5fc3\u548c\u908a\u7de3\u627f\u8f09\u7684\u91cf
\u4e0b\u5716\u4e2d\u5f88\u597d\u7684\u5c55\u793a\u4e86\u91cd\u5efa\u7684\u904e\u7a0b\u3002 \u908a\u7de3\u91cd\u65b0\u6062\u5fa9\u5230\u627f\u8f09 50% \u7684\u91cf\uff0c\u82b1\u4e86 36 \u500b\u5c0f\u6642\uff1b\u56de\u5230\u6b63\u5e38\u6c34\u4f4d\u53c8\u518d\u984d\u5916\u82b1\u4e86\u7d04 12 \u500b\u5c0f\u6642\u3002
\u6d41\u91cf\u8f49\u79fb\u5230\u6838\u5fc3\u6642\u7684\u5c01\u5305\u72c0\u6cc1
\u5716\u7247\u4e2d\uff0c\u6839\u64da\u4e0d\u540c\u5730\u5340\u986f\u793a\u6389\u5c01\u5305\u7684\u7d2f\u9032\u6bd4\u4f8b\u3002
\u7576\u4e8b\u4ef6\u767c\u751f\u5f8c\uff0c\u9664\u4e86\u4e00\u4e9b\u77ed\u66ab\u7684\u9ad8\u5cf0\uff0c\u6574\u9ad4\u4f86\u8aaa\u6389\u5305\u7684\u9ad8\u5cf0\u843d\u5728\u7576\u908a\u7de3\u904b\u7b97\u5b8c\u5168\u5931\u80fd\u7684\u6642\u5019\u3002
\u96b1\u85cf\u7684\u5716\u7247
\u4eba\u5de5\u548c\u81ea\u52d5\u5316\u5fa9\u539f\u6bd4\u4f8b
\u96b1\u85cf\u7684\u5716\u7247\uff0c\u8aaa\u660e\u4eba\u5de5\u548c\u81ea\u52d5\u5316\u5fa9\u539f\u7684\u6bd4\u4f8b
"},{"location":"feedback/site-reliability-workbook/postmortem-culture/#\u70ba\u4ec0\u9ebc\u9019\u4efd\u6587\u4ef6\u5beb\u5f97\u597d","title":"\u70ba\u4ec0\u9ebc\u9019\u4efd\u6587\u4ef6\u5beb\u5f97\u597d","text":"\u4e00\u4efd\u597d\u7684\u4e8b\u5f8c\u6790\u8aa4\u6587\u4ef6\u8981\u80fd\u5feb\u901f\u3001\u7cbe\u6e96\u3001\u548c\u5584\u7684\u3002
"},{"location":"feedback/site-reliability-workbook/postmortem-culture/#\u6e05\u6670\u7684\u6bb5\u843d","title":"\u6e05\u6670\u7684\u6bb5\u843d","text":"\u5404\u500b\u6bb5\u843d\u7684\u5167\u5bb9\u5206\u6bb5\u6e05\u695a\u800c\u5bcc\u542b\u7d30\u7bc0\uff0c\u4f8b\u5982\uff1a
\u6587\u4ef6\u5c08\u6ce8\u5728\u7cfb\u7d71\u8a2d\u8a08\u7684\u4e0d\u5b8c\u5584\uff0c\u800c\u975e\u4eba\u70ba\u64cd\u4f5c\u7684\u5931\u8aa4\uff1a
\u4e26\u975e\u5c08\u6ce8\u5728\u7279\u5b9a\u5718\u968a\u7684\u6539\u5584\uff0c\u800c\u662f\u900f\u904e\u591a\u7684\u670d\u52d9\u7684\u89d2\u5ea6\u4f86\u601d\u8003\uff1a
\u6587\u4ef6\u64b0\u5beb\u7684\u8d8a\u65e9\uff0c\u8d8a\u7cbe\u6e96\uff0c\u9019\u662f\u56e0\u70ba\u4eba\u5011\u7684\u8a18\u61b6\u66f4\u9bae\u6d3b\u3002 \u9664\u6b64\u4e4b\u5916\uff0c\u7576\u4e8b\u4ef6\u767c\u751f\u5f8c\uff0c\u6240\u6709\u53d7\u5f71\u97ff\u7684\u5de5\u7a0b\u3001\u4e3b\u7ba1\u3001\u6295\u8cc7\u8005\uff0c \u90fd\u6703\u60f3\u8981\u78ba\u4fdd\u4e8b\u4ef6\u771f\u7684\u88ab\u89e3\u6c7a\u4e86\uff0c\u5426\u5247\u96a8\u8457\u6642\u9593\u63a8\u9032\uff0c\u4ed6\u5011\u6703\u5c0d\u4f60\u7684\u7522\u54c1\u6709\u4e00\u4e9b\u5404\u81ea\u7684\u60f3\u50cf\u548c\u4e0d\u4fe1\u4efb\u3002
\u9019\u7bc7\u4e8b\u5f8c\u6790\u8aa4\u6587\u4ef6\u5728\u4e8b\u4ef6\u767c\u751f\u5f8c\u7684\u4e0d\u5230\u4e00\u500b\u79ae\u62dc\uff0c\u5c31\u5b8c\u6210\u4e86\u3002
"},{"location":"feedback/site-reliability-workbook/postmortem-culture/#\u7cbe\u6e96\u7684\u63cf\u8ff0","title":"\u7cbe\u6e96\u7684\u63cf\u8ff0","text":"\u9019\u662f\u4e00\u500b\u5927\u578b\u4e8b\u4ef6\uff0c\u7406\u8ad6\u4e0a\u6703\u6709\u5f88\u591a\u7684\u8cc7\u6599\uff1a\u539f\u59cb\u8cc7\u6599\u3001\u7cfb\u7d71\u65e5\u8a8c\u8a18\u9304\u3001\u4eba\u54e1\u901a\u8a0a\u7d00\u9304\u7b49\u7b49\u3002 \u9019\u7bc7\u6587\u4ef6\u900f\u904e\u7e3d\u7d50\u3001\u5716\u7247\u3001\u548c\u9023\u7d50\u4f86\u8b93 \u5197\u8d05\u6027 \u548c \u53ef\u8b80\u6027 \u4e4b\u9593\u9054\u5230\u5e73\u8861\u3002
"},{"location":"feedback/site-reliability-workbook/postmortem-culture/#\u5be6\u969b\u5c0e\u5165\u7684\u6ce8\u610f\u4e8b\u9805","title":"\u5be6\u969b\u5c0e\u5165\u7684\u6ce8\u610f\u4e8b\u9805","text":"\u7406\u60f3\u4e0a\uff0c\u9ad8\u968e\u9818\u5c0e\u6703\u4fc3\u9032\u4e8b\u5f8c\u6790\u8aa4\u7684\u767c\u5c55\uff0c\u9019\u88e1\u5217\u51fa\u4e00\u4e9b\u6ce8\u610f\u4e8b\u9805\uff1a
\u4f8b\u5982\uff1a
\u4f60\u662f\u500b\u4e3b\u7ba1\uff0c\u70ba\u4ec0\u9ebc\u6c92\u6709\u78ba\u4fdd\u5927\u5bb6\u90fd\u5b8c\u6210\u5fa9\u539f\u8a2d\u5099\u7684\u64cd\u4f5c\u8a13\u7df4\uff1f
\u53ef\u4ee5\u8abf\u6574\u6210
\u4e5f\u8a31\u53ef\u4ee5\u5728\u9032\u5165\u5f85\u547d\u5c0f\u7d44\u524d\uff0c\u5148\u8981\u6c42\u9019\u4e9b\u4eba\u54e1\u5b8c\u6210\u9019\u9805\u8a13\u7df4\uff0c \u6216\u8005\u5728\u72c0\u6cc1\u6301\u7e8c\u6642\uff0c\u9f13\u52f5\u5f85\u547d\u5c0f\u7d44\u628a\u4e8b\u614b\u5347\u7d1a\uff0c\u8b93\u66f4\u591a\u4eba\u9032\u4f86\u95dc\u6ce8\u9019\u4ef6\u4e8b\uff0c \u7562\u7adf\u6211\u5011\u95dc\u5fc3\u7684\u4e0d\u662f\u4e8b\u4ef6\u7684\u7b49\u7d1a\u6216\u591a\u5be1\uff0c\u800c\u662f\u4f7f\u7528\u8005\u7121\u6cd5\u64cd\u4f5c\u7cfb\u7d71\u7684\u611f\u53d7\u3002
"},{"location":"feedback/site-reliability-workbook/postmortem-culture/#\u734e\u52f5\u4e8b\u5f8c\u6790\u8aa4\u7684\u7522\u51fa","title":"\u734e\u52f5\u4e8b\u5f8c\u6790\u8aa4\u7684\u7522\u51fa","text":"\u63a8\u529b\u3001\u62c9\u529b\uff0c\u597d\u7684\u734e\u52f5\u6703\u8b93\u9019\u6587\u5316\u66f4\u5bb9\u6613\u63a8\u5ee3\uff0c\u4ee5\u4e0b\u662f\u53ef\u4ee5\u734e\u52f5\u7684\u884c\u70ba\uff1a
\u53ef\u4ee5\u9032\u884c\u7684\u734e\u52f5\u53ef\u80fd\u6709\uff1a
\u9019\u4e5f\u662f\u4e00\u7a2e\u9593\u63a5\u7684\u734e\u52f5\uff0c\u6709\u4e00\u4e9b\u505a\u6cd5\u53ef\u4ee5\u53c3\u8003\uff1a
\u7576\u4f01\u696d\u5728\u5be6\u65bd\u9019\u500b\u6587\u5316\u6642\uff0c\u5f88\u53ef\u80fd\u6703\u5931\u6557\u6216\u8b8a\u8cea\uff0c\u800c\u9019\u500b\u539f\u56e0\u6709\u6642\u662f\u5f88\u5fae\u5999\u7684\uff0c\u53ef\u80fd\u7684\u5fb5\u72c0\u6709\uff1a
\u96d6\u7136\u4e0d\u53ef\u80fd\u5b8c\u5168\u81ea\u52d5\u5316\uff0c\u4f46\u662f\u9019\u4e9b\u5de5\u5177\u80fd\u8b93\u6587\u4ef6\u52a0\u901f\u4e14\u7cbe\u6e96\u3002
\u4ee5\u4e0b\u5217\u51fa\u4e00\u4e9b\u6709\u7528\u5de5\u5177\uff1a
\u6b77\u7a0b\u5927\u81f4\u662f\uff1a \u5f9e\u5c0f\u7684\u5c08\u6848\u958b\u59cb\uff1b \u900f\u904e\u5de5\u5177\u548c\u6a21\u677f\u4f86\u5beb\u597d\u5831\u544a\uff1b \u78ba\u5be6\u4f9d\u64da\u5831\u544a\u4f86\u505a\u5be6\u8e10\u548c\u4fee\u6b63\uff1b \u6700\u5f8c\u9f13\u52f5\u4e14\u516c\u958b\u628a\u9019\u4e9b\u5831\u544a\u5206\u4eab\u7d66\u5927\u5bb6\u3002
\u76f8\u95dc\u5e73\u53f0\u7684\u5efa\u7f6e\u52e2\u5728\u5fc5\u884c\uff0c\u4f46\u662f\u9700\u8981\u4e00\u4e9b\u597d\u7684\u7bc4\u4f8b\u3001\u6a21\u677f\u3001\u81ea\u52d5\u5316\u5de5\u5177\u4f8b\u5982 GPT \u4f86\u52a0\u901f\u64b0\u5beb\u548c\u7cbe\u6e96\u5b9a\u4f4d\uff0c \u66f4\u91cd\u8981\u7684\u662f\u5ef6\u4f38\u512a\u5316\u9805\u76ee\u3002
"},{"location":"feedback/site-reliability-workbook/simplicity/","title":"\u7c21\u5316\u7cfb\u7d71","text":"\u7cfb\u7d71\u96a8\u8457\u6642\u9593\u767c\u5c55\uff0c\u5c07\u6703\u8b8a\u5f97\u8d8a\u4f86\u8d8a\u8907\u96dc\u3002\u628a\u7cfb\u7d71\u7c21\u5316\u5c07\u6703\u8b8a\u6210\u4e00\u500b\u9577\u671f\u4e14\u6301\u7e8c\u7684\u884c\u52d5\u3002
\u7c21\u5316\u904e\u7a0b\u57fa\u672c\u4e0a\u5305\u542b\uff1a\u8fa8\u8b58\u3001\u9810\u9632\u548c\u8655\u7406\u3002 \u800c\u53c8\u5206\u70ba\u597d\u5e7e\u500b\u9762\u5411\uff1a\u8edf\u9ad4\u8a2d\u8a08\u3001\u7cfb\u7d71\u67b6\u69cb\u3001\u8a2d\u5b9a\u3001\u958b\u767c\u6d41\u7a0b\u7b49\u7b49\u5404\u7a2e\u5730\u65b9\u3002
\u65e9\u671f\u7684\u7c21\u5316\u6703\u5927\u5927\u964d\u4f4e\u6210\u672c\uff0c\u5617\u8a66\u5728\u6bcf\u6b21\u5b8c\u6210\u90e8\u5206\u8a2d\u8a08\u6642\uff0c\u591a\u82b1\u4e00\u9ede\u5fc3\u601d\u53bb\u601d\u8003\u53ef\u80fd\u7684\u7c21\u5316\u65b9\u5f0f\u3002 \u66f4\u6709\u751a\u8005\uff0c\u628a\u9577\u671f\u7684\u7c21\u5316\u7d93\u9a57\u6dec\u7149\u6210\u4e00\u500b\u6a19\u6e96\u6d41\u7a0b\u4e26\u5728\u6a19\u6e96\u4e2d\u8ce6\u4e88\u4e00\u5b9a\u7a0b\u5ea6\u7684\u5f48\u6027\u3002
"},{"location":"feedback/site-reliability-workbook/toil/","title":"\u52de\u52d5\u529b","text":"\u901a\u5e38\u516c\u53f8\u9577\u5230\u4e00\u5b9a\u7a0b\u5ea6\uff0c\u5f88\u53ef\u80fd\u6703\u82b1\u5f88\u591a\u6642\u9593\u5728\u52de\u52d5\u529b\u7684\u4ed8\u51fa\uff0c\u4f8b\u5982\u4eba\u5de5\u624b\u52d5\u7684\u6d41\u7a0b\u7b49\u7b49\u3002
\u5728\u6e1b\u5c11\u9019\u4e9b\u52de\u52d5\u529b\u7684\u904e\u7a0b\u662f\u500b\u6709\u8da3\u800c\u8271\u96e3\u7684\u554f\u984c\uff0c\u5927\u81f4\u5206\u6210\u4e09\u6bb5\uff1a
\u6bcf\u9694\u4e00\u6bb5\u6642\u9593\uff0c\u5c31\u6703\u60f3\u628a\u9019\u671f\u9593\u7684\u6536\u7a6b\u7e3d\u7d50\uff0c\u91cb\u653e\u8a18\u61b6\u9ad4\u5230\u786c\u789f\u88e1\uff0c\u8b93\u8a18\u61b6\u9ad4\u53ef\u4ee5\u64c1\u6709\u66f4\u591a\u7a7a\u9593\u3002
"},{"location":"review/2022-ai/","title":"2022 AI \u56de\u9867","text":"\u4eca\u5929\uff0812/17\uff09\u56de\u9867 2022 \u5e74\uff0c\u767c\u73fe\u6709\u5f88\u591a AI \u7684\u7a81\u7834\uff0c\u8b93\u6211\u5099\u53d7\u611f\u52d5\uff01 \u4ee5\u4e0b\u5c31\u4f86\u76e4\u9ede\u4e00\u4e0b\u5e7e\u500b\u6211\u89ba\u5f97\u5f88\u53b2\u5bb3\u7684\u7522\u54c1\u3002
Yahoo!
\u4eca\u5e74\u6700\u5f8c\u4e00\u500b\u6708\uff0cOpenAI \u63a8\u51fa\u4e86 ChatGPT\uff0c\u9019\u6b21\u63a8\u51fa\u5b8c\u5168\u985b\u8986\u4e86\u6211\u5c0d AI \u7684\u60f3\u50cf\u3002 \u5176\u5e36\u7d66\u6211\u7684\u9707\u64bc\uff0c\u66f4\u751a\u7576\u521d AlphaGo \u4e0b\u570d\u68cb\uff0c\u800c\u4e14\u6b63\u662f\u56e0\u70ba\u5b83\uff0c\u6211\u624d\u6709\u64b0\u5beb\u9019\u7bc7\u6587\u7ae0\u7684\u52d5\u529b\u3002
\u5176\u76ee\u7684\u4e3b\u8981\u662f\u7406\u89e3\u524d\u5f8c\u6587\u7684\u8a9e\u610f\uff0c\u7d66\u51fa\u9069\u7576\u7684\u56de\u61c9\uff0c\u800c\u4ed6\u505a\u5230\u4e86\u3002
\u6211\u5011\u628a\u5404\u81ea\u624b\u4e0a\u6240\u6709\u7684 NLP\uff08\u81ea\u7136\u8a9e\u8a00\u8655\u7406\uff09\u4efb\u52d9\u90fd\u6e2c\u4e86\u4e00\u904d\uff0c \u5305\u62ec\u81ea\u7136\u8a9e\u8a00\u7406\u89e3\u3001\u5c0d\u8a71\u72c0\u614b\u8ffd\u8e64\u3001\u56de\u8986\u751f\u6210\u3001\u5c0d\u8a71\u6458\u8981\u3001\u8868\u683c\u554f\u7b54\u3001\u6587\u6a94\u554f\u7b54\u3001\u4fe1\u606f\u62bd\u53d6\u3001\u60c5\u611f\u5206\u6790\u3001\u8a69\u8a5e\u6b4c\u66f2\u5275\u9020\u3001\u7ffb\u8b6f...\u7b49\u5e7e\u5341\u500b\u4efb\u52d9\uff0c \u6548\u679c\u90fd\u975e\u5e38\u7684\u597d\u3002
...
\u4e0d\u9700\u8981 in-context learning\uff0c\u958b\u7bb1\u6e96\u78ba\u7387\u9054\u5230 90%+\uff0c\u5e7e\u4e4e\u9054\u5230\u53ef\u4ee5\u5c0d\u5916\u7522\u54c1\u5316\u8ca9\u552e\u3002
\u4f86\u81ea\u6797\u5ef7\u6069\uff08\u81ea\u7136\u8a9e\u8a00\u7814\u7a76\u8005\uff09\u7684\u81c9\u66f8
ChatGPT \u80fd\u505a\u5230\u7684\u4e8b\u60c5\u592a\u591a\u4e86\uff0c\u4ee5\u4e0b\u5e7e\u500b\u6709\u8da3\u6848\u4f8b\uff1a
\u7576\u7136\uff0c\u7db2\u53cb\u5275\u610f\uff08\u8ddf\u6642\u9593\uff09\u7121\u9650\uff0c\u671f\u5f85\u672a\u4f86\u80fd\u8b93\u4ed6\u6709\u66f4\u53b2\u5bb3\u7684\u61c9\u7528\uff01 \u53e6\u5916\u5982\u679c\u4f60\u5c0d\u5167\u90e8\u904b\u4f5c\u6709\u8208\u8da3\uff0c\u53ef\u4ee5\u53c3\u8003\u674e\u5b8f\u6bc5\u8001\u5e2b\u7684\u5f71\u7247
"},{"location":"review/2022-ai/#stable-diffusion","title":"Stable Diffusion","text":"metaphysic
AI \u7e6a\u5716\u7121\u7591\u5728\u4eca\u5e74\u5927\u653e\u7570\u5f69\uff0c\u4e0d\u53ea\u662f Stable Diffusion\uff0c \u9084\u6709 OpenAI \u7684 DALL-E\u3002\u96a8\u8457\u767c\u5c55\uff0c\u7db2\u8def\u4e5f\u51fa\u73fe\u8d8a\u4f86\u8d8a\u591a\u5947\u8019\u61c9\u7528\uff0c\u4f8b\u5982\u5716\u7247\u52d5\u6f2b\u5316\u7b49\u7b49\u3002
\u4f46\u662f\u5176\u5167\u5728\u7684\u6f14\u7b97\u6cd5\u64f4\u6563\u6a21\u5f0f\uff08Diffusion Model\uff09\u4e5f\u4e0d\u53ea\u662f\u5728\u7e6a\u5716\u6709\u6240\u61c9\u7528\u3002 \u50cf\u662f\u6709\u4eba\u628a\u5b83\u5ef6\u4f38\u5230\u86cb\u767d\u8cea\u9810\u6e2c\uff0c\u9054\u6210\u8f15\u91cf\u800c\u53c8\u6709\u6e96\u78ba\u5ea6\u7684\u6a21\u578b\u3002
"},{"location":"review/2022-ai/#alphafold-2","title":"AlphaFold 2","text":"\u9019\u500b\u5176\u5be6\u662f 2020 \u63a8\u51fa\u7684 AI\uff0c\u4f46\u96a8\u8457\u767c\u5c55\uff0c\u4eca\u5e74\u4e0d\u53ea\u662f\u64f4\u5145\u4e86\u8cc7\u6599\u5eab\uff0c\u4e5f\u770b\u5230\u5176\u5be6\u969b\u7684\u61c9\u7528\u4e86\u3002
\u86cb\u767d\u8cea\u7684\u7d44\u6210\u4e26\u4e0d\u8907\u96dc\uff0c\u7531 21 \u7a2e\u5df2\u77e5\u6c28\u57fa\u9178\u69cb\u6210\uff0c\u4f46\u771f\u6b63\u56f0\u96e3\u7684\u662f\u5176\u5efa\u69cb\u65b9\u5f0f\u7684\u6392\u5217\u548c\u7d44\u5408\u53ef\u4ee5\u975e\u5e38\u8907\u96dc\u3002 \u7136\u800c DeepMind \u7684 AlphaFold 2 \u537b\u505a\u5230\u4e86\u9ad8\u65bc 90% \u7684\u9810\u6e2c\u6e96\u78ba\u5ea6\uff08\u7b2c\u4e8c\u540d\u4e0d\u5230 60%\uff09\u3002
\u79d1\u6280\u65b0\u5831
\u9019\u88e1\u8981\u6ce8\u610f\u7684\u662f\uff0cAlphaFold \u505a\u7684\u4e8b\u60c5\u662f \u9810\u6e2c\u3002 \u63db\u53e5\u8a71\u8aaa\uff0c\u5982\u679c\u6211\u5011\u8981\u9a57\u8b49\u9019\u500b\u9810\u6e2c\uff0c\u65b9\u5f0f\u4ecd\u7136\u662f\u4f7f\u7528\u50b3\u7d71\u7684 X \u5c04\u7dda\u3001\u6838\u78c1\u5171\u632f\u6216\u51b7\u51cd\u96fb\u93e1\u7b49\u3002 \u4f46\u662f\u9019\u500b\u904e\u7a0b\u662f\u66e0\u6642\u5ee2\u65e5\u7684\uff0c\u901a\u5e38\u9700\u8981\u6578\u6708\u5230\u6578\u5e74\u7684\u6642\u9593\u3002
\u5728 2022 \u5e74\uff0cAlphaFold \u9810\u6e2c\u51fa\u4e86\u53ef\u80fd\u662f\u9020\u6210\u6f38\u51cd\u4eba\u7684\u86cb\u767d\u8cea \u6838\u5b54\u8907\u5408\u9ad4 \u7684\u6a23\u5b50\uff0c\u800c\u9019\u500b\u554f\u984c\uff0c\u79d1\u5b78\u5bb6\u5df2\u7d93\u5617\u8a66\u4e86\u9577\u9054\u6578\u5341\u5e74\u3002
\u79d1\u6280\u65b0\u5831
\u6709\u4e86\u86cb\u767d\u8cea\u7684\u69cb\u9020\uff0c\u6211\u5011\u5c31\u53ef\u4ee5\u4f9d\u6b64\u767c\u5c55\u76f8\u5c0d\u61c9\u7684\u85e5\u7269\u548c\u6cbb\u7642\u65b9\u6cd5\uff0c\u6240\u4ee5\u86cb\u767d\u8cea\u69cb\u9020\u9810\u6e2c\u624d\u6703\u9019\u9ebc\u91cd\u8981\u3002
"},{"location":"review/2022-ai/#fusion","title":"Fusion","text":"\u6838\u878d\u5408\u9700\u8981\u6975\u5ea6\u9ad8\u6eab\u548c\u9ad8\u58d3\u624d\u6709\u53ef\u89c0\u7684\u6a5f\u7387\u767c\u751f\u3002 \u8981\u6210\u5c31\u9019\u6a23\u7684\u74b0\u5883\u4e0d\u96e3\uff0c\u4f46\u554f\u984c\u662f\uff0c\u8981\u600e\u9ebc\u7dad\u6301\u9019\u500b\u6eab\u5ea6\uff1f
\u6703\u9020\u6210\u7cfb\u7d71\u6eab\u5ea6\u964d\u4f4e\u662f\u56e0\u70ba\u5167\u90e8\u539f\u5b50\u548c\u5916\u90e8\u539f\u5b50\u9032\u884c\u78b0\u649e\u628a\u80fd\u91cf\uff08\u52d5\u80fd\uff09\u8f49\u79fb\u5230\u5916\u90e8\u7cfb\u7d71\u3002 \u70ba\u4e86\u6e1b\u5c11\u9019\u4ef6\u4e8b\u60c5\u7684\u767c\u751f\uff0c\u6211\u5011\u9700\u8981\u8b93\u539f\u5b50\u7167\u8457\u5713\u5708\uff08tokmok\uff09\u8ff4\u8f49\uff08\u7576\u7136\u9084\u6709\u4e00\u4e9b\u7e31\u8ef8\u7684\u529b\u4f86\u964d\u4f4e\u78c1\u529b\u7684\u4ea4\u932f\u5f71\u97ff\uff0c \u8a73\u898b\uff09\u3002
DeepMind \u767c\u5c55\u4e86\u4e00\u7a2e AI \u6f14\u7b97\u6cd5\uff0c\u7528\u96f7\u5c04\u4f86\u5354\u52a9\u7cfb\u7d71\u7dad\u6301\u80fd\u91cf\uff0c\u63db\u53e5\u8a71\u8aaa\uff0c\u7dad\u6301\u71b1\u80fd\u3002
\u5728 2022/12\uff0c\u7f8e\u570b\u570b\u5bb6\u9ede\u706b\u8a2d\u65bd\u767c\u8868\u5df2\u7d93\u6210\u529f\u9054\u6210\u8f38\u51fa\u80fd\u91cf\u5927\u65bc\u8f38\u5165\u80fd\u91cf\u3002 \u96d6\u8aaa\u5f88\u591a\u5a92\u9ad4\u5ba3\u7a31\u6838\u878d\u5408\u7684\u6642\u4ee3\u4f86\u81e8\uff0c\u4f46\u5176\u5be6\u570b\u5bb6\u9ede\u706b\u8a2d\u65bd\u4e26\u4e0d\u662f\u6838\u878d\u5408\u767c\u96fb\u5ee0\u3002 \u76f8\u8f03\u65bc\u6838\u878d\u5408\u767c\u96fb\u5834\uff0c\u4ed6\u4e0d\u6703\u8655\u7406\u6c1a\u7684\u8f3b\u5c04\u548c\u9038\u51fa\uff08\u6838\u878d\u5408\u662f\u9700\u8981\u6c18\u548c\u6c1a\u548c\u4e00\u4e9b\u91d1\u5c6c\u624d\u80fd\u6709\u6548\u9054\u6210\uff09\u3002
2024 \u76f8\u95dc\u8ad6\u6587\u63a8\u51fa
\u5728 2024 \u5e74 2 \u6708\u6642\uff0c \u76f8\u95dc\u55ae\u4f4d\u63a8\u51fa\u4e86\u53d7\u4e94\u4f4d\u540c\u5115\u5be9\u8996\u7684\u8ad6\u6587\uff0c \u5176\u4e2d\u8aaa\u660e\u4e86\u5982\u4f55\u9054\u6210\u300c\u9ede\u706b\u300d\u3002
\u9019\u548c\u6211\u4e0a\u9762\u8b1b\u5230\u7684\u6258\u99ac\u514b\uff08tokmok\uff09\u5713\u74b0\u6c92\u6709\u95dc\u4fc2\uff0c\u5b83\u662f\u8b93\u96f7\u5c04\u6253\u9032\u947d\u77f3\u5916\u6bbc\u7684\u5c0f\u81a0\u56ca\uff0c \u4e26\u7d00\u9304\u5167\u7206\u7684\u80fd\u91cf\uff0c\u9054\u6210\u9ede\u706b\u3002
Here\u2019s how scientists reached nuclear fusion \u2018ignition\u2019 for the first time
\u9019\u7a2e\u65b9\u5f0f\u6709\u500b\u6700\u5927\u7684\u7f3a\u9ede\uff1a\u8981\u600e\u9ebc\u5229\u7528\u7372\u5f97\u7684\u80fd\u91cf\uff1f\u56e0\u70ba\u7206\u70b8\u7684\u80fd\u529b\u662f\u5f88\u96e3\u88ab\u5229\u7528\u7684\u3002 \u4f46\u662f\u7121\u8ad6\u5982\u4f55\uff0c\u300c\u9ede\u706b\u300d\u7684\u6210\u5c31\u4ecd\u7136\u9f13\u821e\u4e86\u8a31\u591a\u6295\u8cc7\u8005\u548c\u7814\u7a76\u54e1\u3002
"},{"location":"review/2022-ai/#cicero","title":"CICERO","text":"Meta \u958b\u767c\u7684 CICERO \u5728\u4e00\u6b3e\u9b25\u667a\u9b25\u5fc3\u6a5f\u7684\u904a\u6232 Diplomacy \u4e2d\u9032\u5165\u524d 10% \u7684\u6392\u540d\u4e2d\u3002
Source from CICERO blog post
\u4e4b\u524d\u770b\u5230\u9019\u500b\u4e3b\u984c\u7684\u6642\u5019\u6709\u770b\u5230\u4e00\u6bb5\u7c21\u55ae\u7684\u5f71\u7247\u8aaa\u660e\uff0c\u73fe\u5728\u627e\u4e0d\u5230\u4e86\uff01 \u4f46\u662f... \u6211\u61f7\u7591 ChatGPT \u73a9\u5f97\u6703\u6bd4\u4ed6\u597d\u3002
\u4e4b\u6240\u4ee5\u653e\u9032\u9019\u500b AI\uff0c\u4e5f\u7b97\u662f\u6211\u500b\u4eba\u5c0d\u65bc\u672a\u4f86 AI \u80fd\u73a9\u661f\u6d77\u6216\u4e16\u7d00\u5e1d\u570b\u7684\u4e00\u500b\u5c0f\u5c0f\u61a7\u61ac\u5427\uff01
"},{"location":"review/2022-ai/#ithaca","title":"Ithaca","text":"DeepMind \u5728\u4e09\u6708\u958b\u767c\u4e86 Ithaca\uff0c\u5176\u7528\u9014\u5728\u5224\u8b80\u53e4\u5e0c\u81d8\u6587\u672c\u7684\u5167\u5bb9\u3002
\u548c\u4eba\u985e\u6b77\u53f2\u5b78\u5bb6\u7684 25% \u9810\u6e2c\u7387\uff0cIthaca \u9054\u5230\u4e86 62% \u7684\u6e96\u78ba\u7387\u3002 \u4f46\u662f Ithaca \u4e26\u4e0d\u662f\u8981\u53d6\u4ee3\u4eba\u985e\uff0c\u76f8\u53cd\u7684\uff0c\u4ed6\u662f\u7528\u4f86\u5354\u52a9\u4eba\u985e\u3002 \u5728\u4eba\u985e\u548c Ithaca \u4e00\u8d77\u5224\u8b80\u7684\u60c5\u6cc1\u4e0b\uff0c\u4ed6\u9054\u5230\u4e86\u9ad8\u9054 72% \u7684\u6e96\u78ba\u7387\u3002
"},{"location":"review/2022-ai/#\u7d50\u8a9e","title":"\u7d50\u8a9e","text":"\u5728\u6700\u5f8c\u4ecb\u7d39\u7684 Ithaca\uff0c\u6211\u5011\u4e5f\u53ef\u4ee5\u770b\u5230\u96d6\u7136\u6709\u4e9b\u4eba\u6703\u64d4\u5fc3\u6a5f\u5668\u5c07\u53d6\u4ee3\u6211\u5011\u7684\u5de5\u4f5c\uff0c \u4f46\u5176\u5be6\u6a5f\u5668\u5b78\u7fd2\u7684\u771f\u6b63\u50f9\u503c\u662f\u7528\u4f86\u5354\u52a9\u4eba\u985e\uff0c\u8b93\u6211\u5011\u80fd\u66f4\u5feb\u901f\u7684\u5b8c\u6210\u5de5\u4f5c\u3002
\u5c31\u50cf\u4eca\u5e74\u82f1\u570b\u958b\u59cb\u63a8\u884c\u7684\u4e00\u9031\u5de5\u4f5c\u56db\u5929\u4e00\u6a23\uff0c \u5982\u679c AI \u80fd\u5e6b\u52a9\u5927\u5bb6\uff08\u5df2\u7d93\u78ba\u78ba\u5be6\u5be6\u6709\u5e6b\u52a9\u4e86\ud83d\ude02\uff09\u5728\u66f4\u77ed\u7684\u6642\u9593\u5167\u9054\u5230\u76f8\u540c\u7522\u80fd\uff0c \u9019\u6642\u6211\u5011\u5c0d\u65bc AI\uff0c\u61c9\u8a72\u62b1\u6301\u7684\u5fc3\u614b\u6703\u662f\uff1a\u6211\u5c07\u5982\u4f55\uff08\u7406\u89e3\u548c\uff09\u61c9\u7528\u5b83\uff1f
"},{"location":"review/2023/","title":"2023 \u56de\u9867","text":"\u5e74\u672b\u4e86\uff0c\u60f3\u5beb\u4e00\u4e9b\u4eca\u5e74\u7684\u56de\u9867\uff0c\u4e3b\u984c\u5927\u81f4\u662f
The best science images of 2023, Nature
\u4f86\u6e90
\u53c3\u7167\u7684\u5a92\u9ad4\u4e3b\u8981\u6709\u81ea\u7136\u96dc\u8a8c\u3001 ScienceNews\u3001 \u660e\u65e5\u79d1\u5b78\u3001 \u516c\u8996 \u7b49\u7b49\u3002
"},{"location":"review/2023/#\u74b0\u5883","title":"\u74b0\u5883","text":"\u4eca\u5e74\u6700\u91cd\u8981\u7684\u4e8b\u60c5\uff0c\u6211\u8a8d\u70ba\u662f\u74b0\u5883\u3002 2023 \u662f\u6709\u7d00\u9304\u4ee5\u4f86\uff0c\u6700\u71b1\u7684\u4e00\u5e74\u3002
Climate heat hottest year record, ScienceNews
\u4eca\u5e74\u5e73\u5747\u6c23\u6eab\u6bd4 1850 \u5e74\u5230 1900 \u5e74\u7684\u5e73\u5747\u6c23\u6eab\u9ad8\u51fa \\({1.3}^\\circ C\\)\uff0c \u9664\u4e86\u6210\u70ba\u6b77\u53f2\u65b0\u9ad8\uff0c \u66f4\u662f\u5373\u5c07\u9054\u5230\u4e0d\u53ef\u9006\u7684 \\({1.5}^\\circ C\\)\uff0c \u5176\u4e2d\u5341\u4e00\u6708\u751a\u81f3\u7a81\u7834 \\({2}^\\circ C\\)\uff0c \u4e14\u9023\u7e8c\u4e00\u767e\u591a\u5929\u8d85\u904e \\({1.5}^\\circ C\\)\u3002
Our World in Data
\u9ad8\u6eab\u5c0e\u81f4\u4e86\u5927\u91cf\u7684\u706b\u707d\uff0c\u9032\u800c\u5c0e\u81f4\u672c\u5e74\u6700\u5dee\u7684\u7a7a\u6c23\u54c1\u8cea\uff0c \u4e0d\u904e\u7814\u7a76\u767c\u73fe\uff0c\u6c23\u6eb6\u81a0\u5176\u5be6\u6709\u52a9\u65bc\u53cd\u5c04\u592a\u967d\u5149\u548c\u52a0\u901f\u6c23\u6eab\u7684\u964d\u4f4e\uff0c \u63db\u53e5\u8a71\u8aaa\uff0c\u96d6\u7136\u706b\u707d\u983b\u7e41\uff0c\u4f46\u662f\u4e26\u6c92\u6709\u56b4\u91cd\u5730\u5f71\u97ff\u5730\u7403\u6696\u5316\uff0c \u53cd\u904e\u4f86\u8aaa\uff0c\u6de8\u5316\u57ce\u5e02\u6703\u56e0\u70ba\u6c23\u6eb6\u81a0\u7684\u6e1b\u5c11\u800c\u52a0\u901f\u6696\u5316\u3002
\u53e6\u5916\u503c\u5f97\u6ce8\u610f\u7684\u662f\uff0c\u5e7e\u5341\u5e74\u4f86\u91ce\u706b\u9020\u6210\u7684\u78b3\u6392\u4e00\u76f4\u5728\u6e1b\u5c11\uff0c \u4e3b\u56e0\u662f\u68ee\u6797\u780d\u4f10\u5c0e\u81f4\u68ee\u6797\u5730\u5340\u7684\u964d\u4f4e\uff0c \u4f46\u76f8\u95dc\u7684\u78b3\u6392\u898f\u7bc4\u9810\u671f\u672a\u4f86\u4ecd\u6703\u88ab\u5efa\u7f6e\u3002
Our World in Data
\u6696\u5316\u5c0e\u81f4\u51b0\u7dda\u9000\u7e2e\uff0c\u6d77\u5e73\u9762\u4e5f\u96a8\u8457\u878d\u51b0\u4e0a\u5347\u3002
Charctic Interactive Sea Ice Graph, NSIDC
\u9ad8\u6eab\u52a0\u901f\u96ea\u87f9\u65b0\u9673\u4ee3\u8b1d\uff0c \u5c0e\u81f4\u5927\u91cf\u96ea\u87f9\u6b7b\u4ea1\uff1b \u73ca\u745a\u7901\u56e0\u71b1\u6b7b\u4ea1\uff1b \u4f4d\u65bc\u5df4\u897f\u7684\u6975\u7aef\u4e7e\u65f1\u5c0e\u81f4\u4e9e\u99ac\u905c\u6cb3\u8c5a\u7684\u6b7b\u4ea1\uff1b \u9996\u6b21\u8b49\u660e\u51fa\u6c23\u5019\u6696\u5316\u6703\u76f4\u63a5\u5f71\u97ff\u5317\u6975\u718a\u7684\u751f\u5b58\uff1b \u868a\u5b50\u5f9e\u71b1\u5e36\u5730\u5340\u6f38\u6f38\u9077\u79fb\u5230\u4e2d\u9ad8\u7def\u5ea6\uff0c\u8b93\u90e8\u5206\u570b\u5bb6\u9762\u81e8\u524d\u6240\u672a\u898b\u7684\u5371\u6a5f\uff1b \u6975\u7aef\u6c23\u5019\u5c0e\u81f4 4310 \u842c\u5b69\u7ae5\u6d41\u96e2\u5931\u6240\uff1b \u4f46\u4eba\u5011\u537b\u66f4\u50be\u5411\u5c45\u4f4f\u65bc\u5728\u6d77\u5e73\u9762\u4e0a\u5347\u6642\u98a8\u96aa\u66f4\u9ad8\u7684\u5730\u5340 \uff08\u4f8b\u5982\uff0c\u6cbf\u5cb8\u5730\u5340\uff09\uff0c\u9019\u63d0\u9ad8\u4e86\u672a\u4f86\u8655\u7406\u707d\u5bb3\u7684\u6210\u672c\u3002
\u81ea\u7136\u96dc\u8a8c\u7684\u6587\u7ae0\u4e2d\u8aaa\u660e\u4e86\uff0c \u4eba\u9ad4\u600e\u9ebc\u8655\u7406\u71b1\u3001\u6703\u5e36\u4f86\u54ea\u4e9b\u5f71\u97ff\uff0c\u6700\u91cd\u8981\u7684\u662f\u8981\u600e\u9ebc\u505a\u597d\u9632\u6cbb\u907f\u514d\u71b1\u50b7\u5bb3\uff1b \u4e5f\u5728\u9019\u7bc7\u6587\u7ae0 \u5b8c\u6574\u7684\u8aaa\u660e\u6c23\u5019\u8b8a\u9077\u7684\u9032\u5c55\uff0c \u5c55\u793a\u4eba\u985e\u9700\u8981\u65bc\u4ec0\u9ebc\u6642\u5019\u964d\u5230\u591a\u5c11\u7a0b\u5ea6\u7684\u4e8c\u6c27\u5316\u78b3\u6392\u653e\u91cf\uff0c \u4ee5\u53ca\u653f\u7b56\u7684\u7d93\u8cbb\u5206\u4f48\u3001\u4f7f\u7528\u80fd\u6e90\u6bd4\u4f8b\u3001\u570b\u5bb6\u9032\u5c55\u7b49\u7b49\u3002
"},{"location":"review/2023/#\u898f\u7bc4","title":"\u898f\u7bc4","text":"COP28 \u5728 2023 \u5e74\u5e95\u5c55\u958b\uff0c\u76f8\u95dc\u898f\u7bc4\u7684\u7c3d\u8a02\u4e5f\u727d\u52d5\u8457\u4e16\u754c\u672a\u4f86\u8d70\u5411\u3002 \u9664\u6b64\u4e4b\u5916\uff0c\u4e5f\u6709\u4e00\u4e9b\u8ad6\u6587\u8a0e\u8ad6\u76f8\u95dc\u5c55\u671b\uff0c\u4f8b\u5982 \u8655\u7406\u5851\u81a0\u7684\u9032\u5ea6\u5be6\u5728\u592a\u7de9\u6162\uff0c \u9810\u671f\u65bc 2024 \u7c3d\u8a02\u76f8\u95dc\u898f\u7bc4\u4f86\u52a0\u901f\u8655\u7406\u3001 \u56e0\u61c9\u7da0\u80fd\u767c\u5c55\u53bb\u91cd\u65b0\u8abf\u6574\u96fb\u7db2\u7684\u8a2d\u8a08
COP28 \u7684\u5167\u5bb9\u4e5f\u8010\u4eba\u5c0b\u5473\uff0c \u9ad8\u5ea6\u958b\u767c\u570b\u5bb6\u9996\u6b21\u9858\u610f\u652f\u4ed8\u91d1\u9322 \u5e6b\u52a9\u56e0\u5176\u78b3\u6392\u800c\u53d7\u5f71\u97ff\u7684\u4f4e\u5ea6\u958b\u767c\u570b\u5bb6\uff0c\u5118\u7ba1\u91d1\u984d\u6709\u9650\u4e14\u300c\u53d7\u5f71\u97ff\u300d\u7684\u5b9a\u7fa9\u4ecd\u7136\u56f0\u96e3\uff1b \u4e5f\u9996\u6b21\u88ab\u63d0\u53ca\u5230\u964d\u4f4e\u98df\u7269\u7684\u958b\u767c\uff0c\u4f8b\u5982\u8089\u98df\u7684\u6e1b\u5c11\uff1b \u4e5f\u9996\u6b21\u8003\u616e\u7a7a\u8abf\u7684\u78b3\u6392\u3002
\u6838\u96fb\u548c\u518d\u751f\u80fd\u6e90\u7684\u4f7f\u7528\uff0c\u88ab\u8981\u6c42\u63d0\u9ad83\u500d\u3002 \u81f3\u65bc\u53f0\u7063\uff0c\u5118\u7ba1\u7da0\u80fd\u7684\u6210\u9577\u901f\u5ea6\u5f88\u5feb\uff0c\u4f46\u5176\u65bc\u7e3d\u767c\u96fb\u91cf\u7684\u4f54\u6bd4\u4ecd\u4f4e\uff0c \u5e0c\u671b 2030 \u53ef\u4ee5\u8b93\u7da0\u80fd\u4f54\u6bd4\u9054\u5230 3 \u6210\u3002
\u5118\u7ba1\u90e8\u5206\u4f5c\u6cd5\u4ecd\u5728\u8349\u64ec\u4e14\u62bd\u8c61\uff0c\u4f46\u4e5f\u53ef\u4ee5\u770b\u5230\u5df2\u7d93\u6709\u5f88\u591a\u6210\u679c\uff0c \u4f8b\u5982\u6fb3\u6d32\u4eca\u5e74\u9054\u5230\u8ca0\u96fb\u50f9\u3001 \u4e2d\u570b\u5efa\u69cb\u5168\u570b\u6700\u5927\u55ae\u9ad4\u5149\u4f0f\u6cbb\u6c99\u7684\u5de5\u7a0b\u3002
2015 \u5e74\u7684\u5df4\u9ece\u5354\u5b9a\u4e5f\u9996\u6b21\u65bc\u4eca\u5e74\u91dd\u5c0d\u5404\u570b\u9032\u5c55\u9032\u884c\u76e4\u9ede\uff0c \u4f46\u76f8\u95dc\u653f\u5e9c\u7684\u653f\u7b56\u537b\u4ecd\u9010\u6b65\u589e\u52a0\u78b3\u6392\u3002
Global Climate Agreements: Successes and Failures, CFR
\u96d6\u7136\u6b63\u8996\u4e86\u5f88\u591a\u554f\u984c\uff0c\u4f46\u662f\u74b0\u4fdd\u4ecd\u662f\u4e00\u689d\u6f2b\u6f2b\u9577\u8def\uff0c\u6700\u5f8c\u5f15\u7528\u4e00\u6bb5\u8a71\u4f86\u7e3d\u7d50\uff1a
\u5316\u77f3\u71c3\u6599\u7684\u6c70\u9664\u4e0d\u662f\u8981\u6216\u4e0d\u8981\uff0c\u800c\u662f\u4f55\u6642\u3002
\u2014 the science is clear \u2014 fossil fuels must go, Natuer
"},{"location":"review/2023/#\u751f\u7269","title":"\u751f\u7269","text":"\u751f\u7269\u4e00\u76f4\u662f\u6211\u611f\u8208\u8da3\u7684\u4e3b\u984c\uff0c \u4e86\u89e3\u7269\u7a2e\u7684\u4fdd\u80b2\u3001\u751f\u7269\u7684\u6a5f\u5236\u3001\u91ab\u7642\u548c\u57fa\u56e0\u7684\u4f5c\u7528\u662f\u4e00\u689d\u5145\u6eff\u8457\u6a02\u8da3\u7684\u9053\u8def\u3002
The Funniest Wild Animals In Photos, Forbes
\u6211\u5011\u5148\u4f86\u95dc\u5fc3\u4e00\u4e0b\u4eca\u5e74\u91dd\u5c0d\u4eba\u985e\u7684\u767c\u73fe\u5427\uff01
The inside of a rat\u2019s eye won the 2023 Nikon Small World photo contest, ScienceNews
\u63a5\u4e0b\u4f86\u662f\u975e\u4eba\u7684\u751f\u7269\u7814\u7a76\u3002
\u7d93\u904e60\u5e74\u7684\u52aa\u529b \u79d1\u5b78\u5bb6\u767c\u73fe\u7f55\u898b\u4e14\u300c\u6703\u4e0b\u86cb\u7684\u54fa\u4e73\u52d5\u7269\u300d\uff0c \u660e\u65e5\u79d1\u5b78
\u4ee5\u4e0b\u662f\u4fdd\u80b2\u548c\u751f\u7269\u6a5f\u5236\u3002
\u91ab\u5b78\u7a81\u7834\u7684\u734e\u9805\u5f88\u591a\uff0c\u56e0\u70ba\u9019\u662f\u5f88\u5be6\u969b\u7684\u79d1\u5b78\u767c\u660e\u6216\u7a81\u7834\u3002
\u524d\u9762\u5217\u8209\u4e00\u4e9b\u6211\u89ba\u5f97\u6709\u610f\u601d\u7684\u7a81\u7834\uff0c\u7576\u7136\u4e5f\u6709\u4e00\u4e9b\u5c08\u696d\u7de8\u8f2f\u7684\u7cbe\u9078\uff0c \u4e0d\u904e\u6211\u8a8d\u70ba\u6700\u6709\u8da3\u7684\u662f\uff1a\u6e1b\u80a5\u85e5\u7269 GPL-1\u3002 ScienceNews \u4e5f\u8aaa\u660e\u70ba\u4ec0\u9ebc\u6e1b\u80a5\u85e5\u5728\u4eca\u5e74\u7684\u76db\u884c\u3002
"},{"location":"review/2023/#\u6578\u4f4d","title":"\u6578\u4f4d","text":"ChatGPT and science: the AI system was a force in 2023 \u2014 for good and bad, Nature
Nature \u9996\u5ea6\u628a\u975e\u4eba\u5217\u9032\u5e74\u5ea6\u5341\u5927\u512a\u79c0\u79d1\u5b78\u5bb6\u4e2d\uff0c \u9019\u500b\u975e\u4eba\u5c31\u662f ChatGPT\u3002 \u4e26\u5217\u51fa\u4e86\u4e94\u500b\u5c0d\u7814\u7a76\u6709\u7528\u7684 AI \u5de5\u5177\uff1a
\u9019\u4e9b\u5de5\u5177\u53ef\u80fd\u4e5f\u9020\u6210\u8ad6\u6587\u7684\u6c3e\u6feb\uff0c \u4f8b\u5982\u4eca\u5e74\u8ad6\u6587\u88ab\u9000\u7a3f\u7684\u6578\u91cf\u8d85\u904e\u4e00\u842c\u4ef6\uff0c\u9054\u5230\u6b77\u5e74\u6700\u9ad8\u5cf0\u3002 \u9019\u4e9b\u72c0\u6cc1\u4e5f\u9032\u4e00\u6b65\u9020\u6210\u4eba\u5011\u5c0d AI \u5de5\u5177\u7684\u96b1\u6182\uff0c \u4f8b\u5982\u4eca\u5e74\u53c3\u8207\u570b\u6703\u8cea\u8a62\u7684 OpenAI \u57f7\u884c\u9577\u3001 \u6b50\u76df\u958b\u59cb\u5efa\u7f6e\u76f8\u95dc\u898f\u7bc4\u548c \u4e00\u4e9b\u8a0e\u8ad6\u4e2d\u7684\u5b89\u5168\u7db2\uff0c \u4e0d\u904e\u4e5f\u4e0d\u662f\u6bcf\u500b\u5c08\u5bb6\u90fd\u540c\u610f\uff0c \u4f8b\u5982 Meta \u7684\u4eba\u5de5\u667a\u6167\u9996\u5e2d\u79d1\u5b78\u5bb6\uff0c \u800c\u5c08\u5bb6\u7684\u770b\u6cd5\u5206\u88c2\u589e\u52a0\u4e86\u653f\u7b56\u5236\u5b9a\u7684\u56f0\u96e3\u3002
\u9019\u53c8\u6703\u5e36\u5230\u4e00\u500b\u4e00\u76f4\u4ee5\u4f86\u90fd\u5b58\u5728\u7684\u8b70\u984c\uff0cAI \u6709\u610f\u8b58\u55ce\uff1f\u4ed6\u6703\u812b\u96e2\u4eba\u985e\u7684\u63a7\u5236\u55ce\uff1f \u9577\u671f\u7814\u7a76\u547d\u984c\u7684\u6559\u6388\u4e5f\u5217\u51fa\u6e05\u55ae\u4f86\u63d0\u4f9b\u6211\u5011\u6307\u6a19\u4f86\u9a57\u8b49\u9019\u4ef6\u4e8b\u3002
ChatGPT \u5e36\u4f86\u7684 AI \u6f6e\u6d41\u6b63\u5f71\u97ff\u8457\u4e16\u754c\uff0c \u4e26\u4e14\u6c92\u6709\u8da8\u7de9\u7684\u8de1\u8c61\uff0c\u9019\u908a\u7c21\u55ae\u63d0\u5e7e\u500b\u500b\u4eba\u8a8d\u70ba\u7279\u6b8a\u7684\u5f71\u97ff\uff0c\u4f46\u662f\u8981\u77e5\u9053\u9019\u771f\u7684\u53ea\u662f\u51b0\u5c71\u4e00\u89d2\u3002
\u4e0d\u904e\u9ad8\u904b\u7b97\uff0c\u4ee3\u8868\u8457\u9ad8\u8017\u96fb\u9ad8\u78b3\u8db3\u8de1\uff0c \u9664\u6b64\u4e4b\u5916\u6108\u4f86\u6108\u73cd\u8cb4\u7684\u6c34\u8cc7\u6e90\uff0c\u4ea6\u662f\u8cc7\u6599\u4e2d\u5fc3\u7684\u4e3b\u8981\u8017\u6750\uff0c \u4e5f\u56e0\u6b64\uff0c\u4e2d\u570b\u6210\u70ba\u4e16\u754c\u4e0a\u7b2c\u4e00\u500b\u628a\u5546\u696d\u6578\u64da\u4e2d\u5fc3\u4e1f\u5165\u6d77\u4e2d\u7684\u570b\u5bb6\u3002
AI \u4e5f\u6709\u4e00\u4e9b\u7f3a\u9ede\u3002 \u81ea\u7136\u96dc\u8a8c\u5217\u51fa\u4e86\u4e00\u4e9b\u4ee5 AI \u767c\u5c55\u79d1\u5b78\u7684\u6ce8\u610f\u4e8b\u9805\uff0c \u5916\u570b\u4e5f\u6709\u4e00\u5bb6\u9ad8\u7d1a\u8d85\u5546\u64a4\u9664\u6548\u7387\u904e\u4f4e\u7684\u81ea\u52d5\u7d50\u5e33\u529f\u80fd\u3002
"},{"location":"review/2023/#\u901a\u8a0a\u6c7d\u8eca\u6a5f\u5668\u4eba","title":"\u901a\u8a0a\u3001\u6c7d\u8eca\u3001\u6a5f\u5668\u4eba","text":"\u6210\u719f\u7684\u901a\u8a0a\u6280\u8853\uff0c\u9032\u4e00\u6b65\u9020\u5c31\u4e86\u73fe\u4ee3\u793e\u6703\u4e2d\u767c\u9054\u7684\u7db2\u969b\u7db2\u8def\u3002
\u4e00\u7bc7\u6709\u8da3\u7684\u6975\u5ba2\u516c\u5712\u6587\u7ae0\uff0c\u8aaa\u660e\u6a5f\u5668\u4eba\u662f\u4e0b\u4e00\u500b\u5283\u6642\u4ee3\u7522\u54c1\uff0c \u611b\u8303\u5152\u4e5f\u6709\u4e00\u7bc7\u91dd\u5c0d\u6c7d\u8eca\u4f5c\u696d\u7cfb\u7d71\u7684\u8a0e\u8ad6\u548c\u672a\u4f86\u5c55\u671b\u3002
\u9019\u4e9b\u7121\u8072\u7684\u8b8a\u9769\uff0c\u90fd\u662f\u4e00\u584a\u4e00\u584a\u7a4d\u6728\uff0c\u8b93\u6a5f\u5668\u5b78\u7fd2\u7684\u61c9\u7528\uff0c \u9010\u6f38\u5806\u9ad8\u5230\u8b93\u4eba\u96e3\u4ee5\u9810\u6e2c\u7684\u6a21\u7cca\u672a\u4f86\uff0c\u6211\u60f3\u9019\u4e5f\u662f\u79d1\u6280\u9032\u6b65\u7684\u9b45\u529b\u5427\u3002
"},{"location":"review/2023/#\u79d1\u6280","title":"\u79d1\u6280","text":"India\u2019s Moon mission: four things Chandrayaan-3 has taught scientists
ScienceNews \u7684\u5e74\u5ea6\u6458\u8981 \u548c\u5e74\u5ea6\u5341\u5927\u9752\u5e74\u79d1\u5b78\u5bb6\uff0c \u7576\u7136\u81ea\u7136\u96dc\u8a8c\u4e5f\u6709\u76f8\u95dc\u7cbe\u9078\uff0c \u4ee5\u4e0b\u5217\u51fa\u6211\u8a8d\u70ba\u4eca\u5e74\u91cd\u8981\u6216\u6709\u8da3\u7684\u79d1\u5b78\u8b70\u984c\u3002
\u5370\u5ea6\u6210\u529f\u767b\u5165\u6708\u7403\u5357\u6975 \uff08ScienceNews\u3001 Nature\uff09\uff0c \u800c\u4e14\u4ed6\u5011\u9084\u628a\u4e0b\u4e00\u968e\u6bb5\u7684\u7a81\u7834\u8a02\u5728\u63a2\u7d22\u592a\u967d\u3002
\u5728\u9019\u6b21\u63a2\u7d22\u4e2d\uff0c\u6210\u529f\u627e\u5230\u6708\u7403\u7684\u6c27\u548c\u786b\uff0c \u8a72\u63a2\u7d22\u4efb\u52d9\u4e5f\u5728\u62b5\u9054\u5f8c\u4e0d\u4e45\u5b8c\u6210\u4efb\u52d9\u958b\u59cb\u9032\u5165\u4f11\u7720\u671f\uff0c \u7b49\u5f85\u4e0b\u4e00\u671f\u7684\u6708\u7403\u4efb\u52d9\u5c07\u4e4b\u5e36\u56de\u3002
\u65e9\u5728 1969 \u5e74\uff0c\u4eba\u985e\u5c31\u9996\u6b21\u767b\u4e0a\u6708\u7403\u4e86\uff0c\u4f46\u662f\u70ba\u4ec0\u9ebc\u4eba\u985e\u63a2\u7d22\u6708\u7403\u7684\u9032\u5c55\u6703\u9019\u9ebc\u7de9\u6162\u5462\uff1f \u56e0\u70ba\u9019\u7a2e\u63a2\u7d22\u4efb\u52d9\u7684\u5931\u6557\u7387\u9ad8\u9054 50%\uff0c \u5728\u6295\u8cc7\u6210\u672c\u548c\u98a8\u96aa\u5982\u6b64\u9ad8\u7684\u60c5\u6cc1\u4e0b\uff0c\u52e2\u5fc5\u6703\u9762\u81e8\u8457\u5f88\u591a\u6311\u6230\u3002 \u7576\u7136\uff0c\u5404\u570b\u4e5f\u4fe1\u8a93\u65e6\u65e6\u5730\u60f3\u8981\u6210\u70ba\u4e0b\u4e00\u500b\u7a81\u7834\u7684\u570b\u5bb6\uff0c \u5176\u4e2d\u65e5\u672c\u9084\u4ee5\u73a9\u5177\u70ba\u767c\u60f3 \uff0c\u8a2d\u8a08\u51fa\u76f8\u95dc\u7684\u592a\u7a7a\u651d\u5f71\u6a5f\u5668\u4eba\u3002
\u65e5\u672c\u592a\u7a7a\u8239\u5df2\u7d93\u8457\u9678
\u65bc 2024 \u5e74\u8457\u9678\uff0c\u4f46\u662f\u8dcc\u5012\u4e86\ud83d\ude02
Japan\u2019s successful Moon landing was the most precise ever
The Year\u2019s Most Spectacular Photos from the James Webb Telescope, Time
\u96a8\u8457\u53bb\u5e74\u5049\u4f2f\u671b\u9060\u93e1\uff08\u7167\u7247\u96c6\uff09\u7684\u767c\u9001\uff0c \u8d8a\u4f86\u8d8a\u591a\u65e9\u671f\u7684\u731c\u6e2c\u90fd\u5df2\u7d93\u5931\u6e96\uff0c \u5b87\u5b99\u4e2d\u6709\u67d0\u4e9b\u6771\u897f\u9700\u8981\u91cd\u65b0\u958b\u59cb\u601d\u8003\u4e86\uff0c \u4e2d\u570b\u4e5f\u5728\u4eca\u5e74\u555f\u7528\u6700\u65b0\u7684\u5929\u6587\u671b\u9060\u93e1\u5929\u773c\uff0c \u548c\u5168\u4e16\u754c\u6700\u5927\u7684\u592a\u967d\u5c04\u96fb\u6210\u50cf\u671b\u9060\u93e1\u3002
These incredible images are the first from dark-energy telescope Euclid, Nature
\u4ee5\u4e0b\u662f\u4e00\u4e9b\u5b87\u5b99\u76f8\u95dc\u7684\u8b70\u984c\u548c\u767c\u73fe\uff1a
\u5361\u6b7b\u7684\u87ba\u7d72\u5df2\u7d93\u89e3\u958b
\u5df2\u7d93\u65bc 2024 2\u6708\u89e3\u958b\uff0c\u5b8c\u6574\u53d6\u5f97\u88e1\u9762 121.6 \u514b\u7684\u5167\u5bb9\u7269\uff08\u96d6\u7136\u5176\u4e2d\u7d04 60 \u514b\u5728\u5148\u524d\u5df2\u7d93\u5012\u51fa\uff09\u3002
NASA\u2019s OSIRIS-REx nabbed over 120 grams of space rocks from asteroid Bennu
"},{"location":"review/2023/#\u91cf\u5b50","title":"\u91cf\u5b50","text":"Nobel Prize in Physics 2023
\u672a\u4f86\u7684\u79d1\u6280\u65b9\u5411\u91cf\u5b50\u6280\u8853\u7121\u7591\u662f\u91cd\u4e2d\u4e4b\u91cd\uff0c \u4e14\u5927\u5b78\u6b63\u9010\u6f38\u628a\u76f8\u95dc\u4eba\u624d\u532f\u5165\u5230\u4f01\u696d\u4e2d\u3002
\u4e00\u500b\u6280\u8853\u5982\u679c\u53ea\u9650\u7e2e\u5728\u5c08\u696d\u7684\u535a\u58eb\u751f\u4e0a\uff0c\u4ed6\u5c07\u4e0d\u53ef\u80fd\u6210\u529f\u3002
\u2014 \u65bc IBM \u5de5\u4f5c\u7684\u91cf\u5b50\u7269\u7406\u5b78\u5bb6 Olivia Lanes
\u91cf\u5b50\u6280\u8853\u90fd\u662f\u7de9\u6162\u800c\u5805\u5be6\u7684\uff0c\u5728\u8b80\u76f8\u95dc\u6559\u79d1\u66f8\u6642\uff0c\u6ce8\u610f\u5230\u96a8\u8457\u65e9\u671f\u7684\u7206\u767c\u5f0f\u767c\u73fe\uff08\u6a19\u6e96\u6a21\u5f0f\u4e2d\u7684\u5404\u500b\u5143\u7d20\uff09\uff0c \u73fe\u4ee3\u7684\u91cf\u5b50\u7406\u8ad6\u90fd\u958b\u59cb\u601d\u8003\u5176\u5167\u90e8\u672c\u8cea\u548c\u4ea4\u4e92\u7684\u5f71\u97ff\uff0c\u9019\u4e9b\u7406\u8ad6\u4e5f\u8b8a\u5f97\u975e\u5e38\u62bd\u8c61\u548c\u56f0\u96e3\u3002 \u5728\u95b1\u8b80\u76f8\u95dc\u65b0\u805e\u6642\uff0c\u5176\u5be6\u5f88\u591a\u5167\u5bb9\u770b\u5f97\u4e0d\u662f\u5f88\u61c2\uff0c \u4f46\u662f\u4ecd\u76e1\u91cf\u6574\u7406\u51fa\u4e00\u4e9b\u6709\u8da3\u6216\u91cd\u8981\u7684\u7a81\u7834\uff0c\u5617\u8a66\u5728\u56f0\u96e3\u8207\u52d9\u5be6\u4e2d\u9593\u53d6\u5f97\u5e73\u8861\u3002
\u7da0\u80fd\u7684\u767c\u5c55\u5f71\u97ff\u8457\u5730\u7403\u7684\u6c23\u5019\u767c\u5c55\uff0c\u770b\u8457\u8d8a\u4f86\u8d8a\u591a\u76f8\u95dc\u7684\u7814\u7a76\u548c\u843d\u5730\uff0c\u8457\u5be6\u8b93\u4eba\u611f\u52d5\u3002
\u80fd\u6e90\u958b\u767c\u76f8\u95dc\uff1a
\u90fd\u5e02\u8a2d\u8a08\u76f8\u95dc\uff1a
Israel-Hamas War: Timeline and key developments
\u9019\u6bb5\u843d\u5c08\u6ce8\u65bc\u5217\u51fa\u8a8d\u70ba\u91cd\u8981\u7684\u6c11\u751f\u6539\u8b8a\u548c\u4e8b\u4ef6\u3002
\u6700\u5f8c\u8ac7\u4e00\u4e0b\u958b\u6e90\u793e\u7fa4\u7684\u52d5\u76ea\u3002 RedHat \u7684\u9589\u6e90\u653f\u7b56\uff0c \u8b93\u4ee5\u524d\u8f9b\u82e6\u8ca2\u737b\u65bc\u6b64\u7684\u958b\u767c\u8005\u611f\u5230\u88ab\u80cc\u53db\u3002
\u5e73\u53f0\u662f\u9019\u6a23\u6d88\u4ea1\u7684\uff1a \u9996\u5148\uff0c\u4ed6\u5011\u5c0d\u4f7f\u7528\u8005\u6709\u7528\uff1b \u7136\u5f8c\u4ed6\u5011\u5229\u7528\u514d\u8cbb\u5ba2\u6236\u4f86\u70ba\u4ed6\u5011\u4ed8\u8cbb\u5ba2\u6236\u63d0\u4f9b\u66f4\u597d\u7684\u670d\u52d9\uff1b \u6700\u5f8c\uff0c\u4ed6\u5011\u5229\u7528\u9019\u4e9b\u4ed8\u8cbb\u5ba2\uff0c\u70ba\u81ea\u5df1\u63d0\u4f9b\u66f4\u591a\u5229\u76ca\u3002
\u7136\u5f8c\uff0c\u4ed6\u5011\u5c31\u6b7b\u4e86\u3002
\u2014 I'm Done RedHat Enterprise Linux
\u4e0d\u53ea\u5982\u6b64 HashiCorp \u4e5f\u662f\u5982\u6b64\uff0c \u628a\u65d7\u4e0b\u7522\u54c1\u7684\u958b\u6e90\u5408\u7d04\u8f49\u6210\u8f03\u70ba\u9589\u6e90\u7684\u5408\u7d04\uff0c\u4ee5\u6b64\u4f86\u907f\u514d\u6709\u4eba\u900f\u904e\u6563\u4f48\u5176\u8edf\u9ad4\u5230\u96f2\u7aef\u8cfa\u9322\u3002 \u962e\u4e00\u5cf0\u900f\u904e ElasticSearch \u7684\u6210\u529f\uff0c \u63d0\u51fa\u958b\u6e90\u8edf\u9ad4\u4e5f\u53ef\u4ee5\u540c\u6642\u63a8\u51fa\u4f01\u696d\u7248\u672c\uff0c \u4ee5\u6b64\u4f86\u8cfa\u9322\u3002
\u4e0d\u904e\u503c\u5f97\u6ce8\u610f\u7684\u662f\uff0c\u6709\u4eba\u516c\u958b Google \u5167\u90e8\u7684\u6587\u4ef6\uff0c \u95e1\u8ff0\u958b\u6e90\u793e\u7fa4\u624d\u662f AI \u7684\u89e3\u65b9\uff0c \u9019\u662f\u56e0\u70ba\u958b\u6e90\u8edf\u9ad4\u6709\u4e00\u500b\u5f37\u5927\u7684\u512a\u52e2\uff1a\u53ef\u4ee5\u5feb\u901f\u64f4\u589e\u4f7f\u7528\u8005\u4eba\u6578\u3002 \u793e\u7fa4\u4e0a\u7528\u7684\u4eba\u8d8a\u591a\uff0c\u5927\u5bb6\u8d8a\u80fd\u7fd2\u6163\u5b83\u7684\u4f7f\u7528\u65b9\u5f0f\uff0c\u4e5f\u5c31\u8d8a\u53ef\u4ee5\u5728\u76f8\u95dc\u9818\u57df\u4e0a\u5236\u5b9a\u5229\u65bc\u516c\u53f8\u7684\u767c\u5c55\u7b56\u7565\u3002
"},{"location":"review/2023/#\u8a00\u8ad6","title":"\u8a00\u8ad6","text":"\u4ee5\u4e0b\u653e\u4e00\u4e9b\u89ba\u5f97\u611f\u52d5\u6216\u6709\u8da3\u7684\u6587\u7ae0\uff0c\u7b97\u662f\u4e00\u500b\u4e0d\u77e5\u9053\u8a72\u653e\u54ea\u88e1\u7684\u5408\u96c6\u3002
\u7e3d\u7d50\u4f86\u8aaa\uff0c2023 \u5e74\u662f\u500b\u5f88\u71b1\u7684\u4e00\u5e74\uff0c\u770b\u5f97\u51fa\u4eba\u5011\u6b63\u52aa\u529b\u5730\u7cfe\u6b63\u904e\u53bb\u7684\u5171\u696d\u3002 \u751f\u7269\u4e0a\u6211\u8a8d\u70ba\u6700\u71b1\u7684\u4e3b\u984c\u4ecd\u7136\u662f\u57fa\u56e0\u5de5\u7a0b\uff0c\u81f3\u65bc\u6578\u4f4d\u7684\u7576\u7d05\u8b70\u984c\u6beb\u7121\u7591\u554f\u7684\u662f AGI \u548c\u900f\u904e\u5176\u767c\u5c55\u51fa\u7684\u7814\u7a76\u3002 \u79d1\u6280\u65b9\u9762\uff0c\u5370\u5ea6\u518d\u4e00\u6b21\u8e8d\u4e0a\u570b\u969b\uff0c\u8b93\u5927\u5bb6\u770b\u5230\u4ed6\u5011\u7684\u79d1\u6280\u529b\uff0c\u6210\u70ba\u7b2c\u4e00\u500b\u767b\u4e0a\u6708\u7403\u5357\u6975\u7684\u570b\u5bb6\u3002
\u53e6\u5916\u8ac7\u4e00\u4e0b\u81ea\u5df1\u5c0d\u9019\u7bc7\u7684\u770b\u6cd5\uff0c\u4eca\u5e74\u9996\u6b21\u900f\u904e\u4e00\u5e74\u4f86\u6536\u96c6\u7684\u7d20\u6750\u6574\u5408\u6210\u4e00\u7bc7\u6587\u7ae0\uff0c \u500b\u4eba\u8a8d\u70ba\u5167\u5bb9\u5f88\u96dc\u4e82\uff0c\u6703\u9700\u8981\u518d\u60f3\u4e00\u4e0b\u600e\u9ebc\u505a\u53ef\u4ee5\u5e6b\u52a9\u81ea\u5df1\u66f4\u597d\u7684\u6574\u7406\u4e00\u6574\u5e74\u7684\u65b0\u77e5\u3002 Martin Kleppmann \u7684 2023 year in review\uff0c \u6211\u5c31\u89ba\u5f97\u4e0d\u932f\uff0c\u6587\u4e2d\u8ac7\u8ac7\u81ea\u5df1\u63a8\u5ee3\u7684\u6280\u8853\u3001\u5de5\u4f5c\u969b\u9047\u3001\u5bb6\u5ead\u751f\u6d3b\u7b49\u7b49\uff0c \u4f46\u662f\u6211\u500b\u4eba\u53c8\u4e0d\u592a\u60f3\u628a\u79c1\u751f\u6d3b\u516c\u8af8\u65bc\u4e16\u3002
\u9664\u6b64\u4e4b\u5916\uff0c\u4e5f\u6709\u4e00\u500b\u5009\u5132\u6574\u7406\u4e86\u7db2\u4e0a\u7684 2023 \u56de\u9867\uff0c \u53ef\u4ee5\u53c3\u8003\uff0c\u4f46\u600e\u9ebc\u505a\u66f4\u597d\u5462\uff1f\u518d\u60f3\u4e00\u4e0b\u3002
"}]} \ No newline at end of file