From 58083289837542f0e29168705726a5f753013971 Mon Sep 17 00:00:00 2001 From: <> Date: Thu, 9 May 2024 02:48:42 +0000 Subject: [PATCH] Deployed 8e834691 with MkDocs version: 1.6.0 --- essay/web/maglev/index.html | 241 ++++++++++++++++++++++++++++++++++-- search/search_index.json | 2 +- sitemap.xml | 158 +++++++++++------------ sitemap.xml.gz | Bin 1023 -> 1022 bytes 4 files changed, 314 insertions(+), 87 deletions(-) diff --git a/essay/web/maglev/index.html b/essay/web/maglev/index.html index a2c91f6e..cb96d184 100644 --- a/essay/web/maglev/index.html +++ b/essay/web/maglev/index.html @@ -1201,7 +1201,7 @@

概述 為什麼硬體設備通常都是 active-standby @@ -1346,17 +1346,244 @@

Consistent HashingForwarder 的機制下,仍會走到同個上游。 + +

換句話說,在犧牲第 2 點的情況下,我們可以嘗試改善第 1 點。

什麼是「表」

這裡的表在展示演算法細節時就會看到,概念就是 consistent hashing 會建立一個表, 以達到穩定散列的目的。

+

每次表重建,就有可能導致相同的 5-tuple 對應到不同上游。

+

Maglev 的 Consistent Hashing

+

假設我們有個表大小為 \(M\)、上游數量為 \(N\), +並選定兩個 hash 函式,h1h2, +然後依此找出每個上游的 offsetskip

+
\[\begin{aligned} +\mathit{offset}_i = h1(\mathit{name}_i) \mod M \qquad +\forall i \in N\\ +\mathit{skip}_i = h2(\mathit{name}_i) \mod (M-1) + 1 \qquad +\forall \quad i \in N\\ +\end{aligned}\]
+

最後就可以建立出對照表:

+
\[\begin{aligned} +\mathit{permutation}_i_j = (\mathit{offset}_i + j \times \mathit{skip}_i) \mod M \qquad +\forall \quad i \in N \quad\textrm{and}\quad j \in M +\end{aligned}\]
+

但這裡要記得把 M 設為質數,否則在用 skip 遍歷 permutation 就會跳不出循環。

Maglev 的 consistent hashing 演算法邏輯。
Maglev 的 consistent hashing 演算法邏輯。

+

最後根據上述的演算法得出一個長度為 M 的散列表 entry

+

範例

+

假設有 3 個上游,表大小為 7,且 3 個上遊的 offsetskip 分別是: +(3, 4)(0, 2)(3, 1),得出 permutation 表如下:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ji=0i=1i=2
0303
1024
2445
3166
4510
5231
6652
+

在前面的演算法中,我們展示在第 5 行的 while loop 一步一步推演下的情況(假設 B0 代表 i=0 的上游):

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepB0B1B2
1303, 4
20, 4, 125
35, 2, 6--
+

在上述推演下,可以得出 entry

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
jBackend
0B1
1B0
2B1
3B0
4B2
5B2
6B0
+

當 B1 這個上游下線之後,重新推演:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepB0B2
133, 4
205
34, 16
45, 2-
+

得出的新 entry,並進行比較:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
jOldNew
0B1B0
1B0B0
2B1B0
3B0B0
4B2B2
5B2B2
6B0B2
+

可以看到大部分的 hash 仍在原本位置,但是部分仍會有變更。

VIP Matching

當上游特定服務失能,透過聰明的 VIP matching 機制,讓他可以去到其他叢集的服務。
當上游特定服務失能,透過聰明的 VIP matching 機制,讓他可以去到其他叢集的服務。

Fragment Handling

@@ -1381,7 +1608,7 @@

Sharding -2024年5月7日 +2024年5月9日 diff --git a/search/search_index.json b/search/search_index.json index d767cf30..881d4c29 100644 --- a/search/search_index.json +++ b/search/search_index.json @@ -1 +1 @@ -{"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\u88e1\u6709\u4e00\u4e9b\u5fc3\u5f97\u8ddf\u96a8\u7b46\u3002

\u9019\u88e1\u65b9\u4fbf\u6211\u505a\u6574\u7406\uff0c\u548c\u505a issues \u4f86\u63d0\u9192\u81ea\u5df1\u5f85\u505a\u4e8b\u9805\u3002

"},{"location":"#\u6700\u65b0\u6587\u7ae0","title":"\u6700\u65b0\u6587\u7ae0","text":"

\u958b\u767c\u9ad4\u9a57\u7684\u6539\u9032\uff0c\u958b\u767c\u9ad4\u9a57\u8981\u512a\u5316\uff0c\u4f46\u662f\u8a72\u600e\u9ebc\u8b93\u4ed6\u7528\u6578\u64da\u8b49\u660e\u662f\u5426\u6709\u6548\uff1f

{384x461}DALL\u00b7E

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":"latest-works/","title":"Latest works","text":"

\u958b\u767c\u9ad4\u9a57\u7684\u6539\u9032\uff0c\u958b\u767c\u9ad4\u9a57\u8981\u512a\u5316\uff0c\u4f46\u662f\u8a72\u600e\u9ebc\u8b93\u4ed6\u7528\u6578\u64da\u8b49\u660e\u662f\u5426\u6709\u6548\uff1f

{384x461}DALL\u00b7E

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":"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

  • \u6d66\u6fa4\u76f4\u6a39
  • \u77f3\u585a\u771f\u4e00
  • \u5bcc\u5805\u7fa9\u535a

\u6f2b\u756b\u5217\u8868\uff1a

  • \u4e09\u8089\u5fc5\u8d77\u00b7\u7259\u9738\u5b50
  • \u62f3\u9858\u963f\u4fee\u7f85
    • \u62f3\u9858\u5967\u7c73\u54c9
  • \u9ebb\u751f\u7fbd\u5442
  • \u4eca\u969b\u4e4b\u570b\u7684\u95d6\u95dc\u8005
    • RESET
  • \u7e6a\u672c\u5948\u592e
  • \u5373\u4f7f\u5982\u6b64\u6211\u9084\u662f\u559c\u6b61\u4f60 + \u5f90\u8b7d\u5ead
  • \u9a37\u52d5\u6642\u7bc0\u7684\u5c11\u5973\u5011\u554a
  • \u8429\u539f\u9ebb\u7f8e
  • \u5973\u5152\u7684\u670b\u53cb
  • \u7de8\u8f2f\u7684\u4e00\u751f
  • \u85e4\u672c\u6a39
  • \u93c8\u92f8\u4eba
  • \u4f50\u4f50\u6728\u4ed6\u63a5\u4e0b\u4e86\u5b50\u5f48
  • \u59b9\u59b9\u7684\u59ca\u59ca
  • \u6200\u611b\u4ee4\u4eba\u76f2\u76ee
  • \u708e\u62f3
  • \u518d\u898b\u4e86\u7e6a\u68a8
  • \u6dfa\u91ce\u4e00\u4e8cO
  • \u665a\u5b89\u5e03\u5e03
  • \u6a02\u8207\u8def
  • \u96f6\u843d
  • \u8679\u4e4b\u539f
  • \u77f3\u585a\u771f\u4e00
  • \u5cb3
  • BLUE GIANT
  • \u82b1\u6fa4\u5065\u543e
  • \u8001\u8655\u7537\u7684\u6625\u5929
  • \u8acb\u53eb\u6211\u82f1\u96c4
    • \u516c\u5f0f\u5408\u96c6
  • \u5730\u4e0b\u5fcd\u8005
  • \u5c71\u672c\u82f1\u592b
  • \u5149\u4eba
  • \u6bba\u624b\u963f\u4e00
  • \u7570\u8b8a\u8005
  • \u7532\u6590\u8c37\u5fcd
  • \u8d85\u667a\u904a\u6232
  • \u65b0\u4fe1\u9577\u516c\u8a18
  • \u6c99\u6751\u5ee3\u660e
  • \u8840\u511f\u91d1
  • \u8ecd\u50b3
  • \u5e03\u8389\u5e0c\u7279\u7684\u665a\u9910
  • \u96fb\u6ce2\u554a\uff0c\u807d\u8457\u5427
  • \u5ca9\u660e\u5747
  • \u96f6\u91cc + \u5ba4\u4e95\u5927\u8cc7
  • \u6b77\u53f2\u4e4b\u773c
  • \u6709\u98a8\u5b50\u5728\u7684\u5e97
  • \u62bc\u898b\u4fee\u9020
  • HAPPINESS
  • \u5fd7\u4e43\u91ac\u7121\u6cd5\u8aaa\u51fa\u81ea\u5df1\u7684\u540d\u5b57
  • \u8840\u4e4b\u8f4d
  • \u6d66\u6fa4\u76f4\u6a39
  • 20 \u4e16\u7d00\u5c11\u5e74
  • MONSTER
  • PLUTO \uff5e\u51a5\u738b\uff5e
  • \u671d\u5287
  • \u6253\u5674\u568f
  • \u6e21\u908a\u6f64
  • \u4e09\u5104\u5143\u4e8b\u4ef6\u5947\u8ac7
  • \u5982\u4ef6
  • \u9ed1\u91d1\u83bd\u592b
  • \u677e\u672c\u525b
  • LOTTA RAIN
  • \u7518\u751c\u4e4b\u6c34
  • \u80b2\u6c5f\u7dbe
  • G \u5f26\u4e0a\u7684\u4f60\u548c\u6211
  • Torch Song Ecology
  • \u5176\u5be6\u4e26\u4e0d\u5728\u4e4e\u4f60
  • \u6708\u4e0b\u795e\u5947\u5bb6\u65cf
  • \u7d14\u6de8\u8106\u5f31\u7684\u5fc3
  • \u67f4\u9580\u6587
  • Age35
  • \u6771\u4eac\u611b\u60c5\u6545\u4e8b
  • \u611b\u60c5\u767d\u76ae\u66f8
  • \u5ca9\u672c\u5948\u7dd2
  • \u91d1\u4e4b\u570b\u6c34\u4e4b\u570b
  • \u6628\u65e5\u5fc3\u6674\u5929
  • \u4f5c\u77f3\u8cb4\u6d69
  • rin
  • \u5800\u5c3e\u7701\u592a
  • \u523b\u523b
  • \u946b\u946b
  • \u76f8\u7530\u88d5
  • 1518
  • \u52c7\u8005\u4e00\u751f\u6b7b\u4e00\u56de
  • \u8352\u5ddd\u5f18
  • \u767e\u59d3\u8cb4\u65cf
  • \u767d\u9280\u4e4b\u5319
  • \u4e9e\u723e\u65af\u862d\u6230\u8a18
  • \u677e\u672c\u76f4\u4e5f
  • \u6ce2\u5947\u5eab\u6d1b
  • \u602a\u7378 8 \u865f
  • \u718a\u5009\u9686\u654f
  • \u5341\u4e8c\u500b\u60f3\u6b7b\u7684\u5c11\u5e74 + \u51b2\u65b9\u4e01
  • \u610f\u5916
  • \u87f2\u5e2b\uff08\u5c4d\u9304\uff09
  • \u5c0f\u6797\u5d07\u4eba
  • \u919c\u86d9\u59d1\u5a18
  • \u91ce\u4eba\u8f49\u751f
  • \u543e\u5ce0\u547c\u4e16\u6674
  • \u9b3c\u6ec5\u4e4b\u5203
  • jellybean
  • \u536f\u771f\u50b3
  • \u4e2d\u6751\u52c7\u5fd7
  • \u516d\u9053\u7684\u60e1\u5973\u5011
  • \u6fa4\u7530\u65b0
  • \u66b4\u529b\u884c\u52d5 + \u6dfa\u4e95\u84ee\u6b21
  • \u65b0\u5ddd\u6b0a\u5175\u885b
  • \u72fc\u4e0d\u6703\u5165\u7720
  • KUJIRA
  • \u842c\u6b72\uff01
  • \u5f18\u677e\u51c9
  • \u919c\u7537\u771f\u6230\u58eb\uff08\u80a5\u5b85\u52c7\u8005\uff09 + \u4e0a\u6708\u30f2\u30b5\u30e0
  • \u76f8\u539f\u5f18\u6cbb
  • \u771f\uff0e\u7570\u7a2e\u683c\u9b25\u5927\u6230
  • \u4e09\u6d66\u8ffd\u513a
  • \u5929\u7a7a\u4fb5\u72af + \u5927\u7fbd\u9686\u5ee3
  • \u829d\u6751\u88d5\u540f
  • \u908a\u7de3\u884c\u52d5 + \u30ad\u30e0\u30e9\u30c0\u30a4\u30b9\u30b1
  • \u6b64\u5143\u548c\u6d25\u4e5f
  • \u7028\u6236\u5167\u6d77
  • \u305f\u304b\u307f\u3061
  • \u767e\u842c\u576a\u8ff7\u5bae\uff08\u767e\u842c\u758a\u8ff7\u5bae\uff09
  • \u9999\u6708\u7f8e\u591c
  • \u5c0f\u66f8\u75f4\u7684\u4e0b\u524b\u4e0a\uff08\u611b\u66f8\u7684\u4e0b\u524b\u4e0a\uff09 + \u9234\u83ef
  • \u4e09\u90e8\u656c
  • \u9b4d\u9b4e\u7684\u6416\u7c43\u66f2
  • \u516b\u6728\u6559\u5ee3
  • \u7375\u9b54\u6230\u8a18\uff08Claymore \u5927\u528d\uff09
  • \u5149\u6c38\u5eb7\u5247
  • \u795e\u79d8\u5de8\u4eba\u963f\u74e6\u65af
  • \u6771\u6751\u660e\u5b50
  • \u6771\u4eac\u767d\u65e5\u5922\u5973
  • \u798f\u5730\u7ffc
  • \u547d\u904b\u8f2a\u8ff4\uff08\u5e7b\u89ba\u518d\u4e00\u6b21\uff09
  • \u85e4\u7530\u548c\u65e5\u90ce
  • \u9b41\u5121\u99ac\u6232\u5718\uff08\u9b54\u5076\u99ac\u6232\u5718\uff09
  • \u7dd2\u57ce\u771f
  • \u8c93\u4e4b\u5bfa\u7684\u77e5\u6069\u59d0
  • \u843d\u5408\u5c1a\u4e4b
  • \u7f6a\u8207\u7f70
  • \u7709\u6708\u554d
  • \u611b\u5728\u96e8\u904e\u5929\u6674\u6642\uff08\u6200\u5982\u96e8\u6b62\uff09
  • \u5bcc\u660e\u4ec1\u65b0
  • \u5947\u5999\u8f15\u72c2\u7684\u5354\u594f\u66f2~\u7570\u5f69\u7684\u516c\u4e3b
  • \u9ad8\u6a4b\u7559\u7f8e\u5b50
  • \u76f8\u805a\u4e00\u523b
  • \u6751\u4e0a\u5d07
  • \u661f\u5b88\u72ac
  • \u4f0a\u52e2\u3068\u3082\u304b
  • \u60e9\u5f79 339 \u5e74
  • \u5967\u6d69\u54c9
  • \u72ac\u820d
  • \u8535\u4eba\u5e78\u660e
  • \u73a9\u5076\u6bba\u4eba\u904a\u6232 + \u30ce\u6751\u512a\u4ecb
  • \u672c\u7530\u771f\u543e
  • \u7834\u58de\u7378
  • \u7551\u512a\u4ee5
  • \u8309\u8389
  • \u9593\u7028\u5143\u6717
  • \u6295\u7968\u6a5f\u5668\u4eba\u5c11\u5973
  • \u6b7b\u4ea1\u9810\u544a
  • \u6dbc\u5ddd\u9234
  • \u904a\u62323\u4eba\u5a18
  • \u304b\u306d\u3082\u3068
  • \u6211\u5152\u5b50\u597d\u50cf\u8f49\u751f\u53bb\u7570\u4e16\u754c
  • \u5bcc\u5805\u7fa9\u535a
  • \u7375\u4eba
  • KAITO
  • \u85cd\u8272\u65d7\u5e5f
  • \u5c0f\u897f\u660e\u65e5\u7fd4
  • \u9858\u4f86\u4e16\u70ba\u4ed6\u4eba
  • \u82e5\u9d3b\u6587\u5316
  • \u5c0b\u8831\u4eba
  • \u4e09\u6d66\u5efa\u592a\u90ce
  • \u70d9\u5370\u6230\u58eb
  • \u8aeb\u5c71\u5275
  • \u9032\u64ca\u7684\u5de8\u4eba
  • \u91d1\u57ce\u5b97\u5e78
  • \u617e\u671b\u5bc4\u751f
  • \u4f50\u85e4\u6d0b\u58fd
  • \u5bc4\u751f\u4eba\u6bcd
  • \u52a0\u85e4\u6587\u5b5d
  • \u7b2c\u4e09\u5343\u5e74\u7684\u795e\u5c0d\u61c9
  • \u516b\u76ee\u8ff7
  • \u901a\u5f80\u590f\u5929\u7684\u96a7\u9053\uff0c\u518d\u898b\u7684\u51fa\u53e3\u5168
  • \u68ee\u9ad8\u5915\u6b21
  • \u9322\u9032\u7403\u5834 + \u8db3\u7acb\u91d1\u592a\u90ce
  • \u8fbb\u667a
  • \u9006\u8f49\u76e3\u7763 GIANT KILLING
  • \u4e95\u4e0a\u96c4\u5f65
  • \u6d6a\u4eba\u528d\u5ba2\uff08\u6d6a\u5ba2\u884c\uff09
  • \u6afb\u4e95\u756b\u9580
  • \u4e9e\u4eba
  • \u5357\u52dd\u4e45
  • \u6bba\u624b\u5bd3\u8a00
  • \u5c71\u5ddd\u76f4\u8f1d
  • MY HOME HERO + \u671d\u57fa\u52dd\u58eb
  • \u6211\u7684\u73fe\u5be6\u662f\u6200\u611b\u904a\u6232 \u5f6d\u6770 + \u308f\u308b\u3044\u304a\u3068\u3053 + \u5948\u6829
  • FLIPFLOPs
  • \u9054\u723e\u6587\u904a\u6232
  • \u4e18\u91ce\u512a
  • \u4e8b\u8207\u9858\u9055\u7684\u4e0d\u6b7b\u5192\u96aa\u8005 + \u4e2d\u66fe\u6839\u30cf\u30a4\u30c5
  • \u83c5\u539f\u656c\u592a
  • \u5bb6\u65cf\u5c0d\u6297\u6bba\u622e\u6703\u6230
  • \u82a5\u898b\u4e0b\u4e0b
  • \u5492\u8853\u56de\u6230
  • \u30cf\u30e0\u7537\u30fb\u85fb
  • \u5730\u7344\u6a21\u5f0f\uff5e\u559c\u6b61\u901f\u901a\u904a\u6232\u7684\u73a9\u5bb6\u5728\u5ee2\u8a2d\u5b9a\u7570\u4e16\u754c + \u9435\u7530\u733f\u5152
  • ONE
  • \u4e00\u62f3\u8d85\u4eba + \u6751\u7530\u96c4\u4ecb
  • \u4f50\u85e4\u771f\u901a
  • \u9019\u500b\u4e16\u754c\u6f0f\u6d1e\u767e\u51fa
  • \u5c3e\u7530\u69ae\u4e00\u90ce
  • \u6d77\u8cca\u738b
  • \u5c0f\u5c71\u5b99\u54c9
  • \u5b87\u5b99\u5144\u5f1f
  • \u5fd7\u540d\u5742\u9ad8\u6b21
  • Monkey Peak + \u7c82\u7530\u6643\u5b8f
  • \u56db\u8449\u5915\u30c8
  • \u6d3e\u5c0d\u5496\u5b54\u660e\uff08\u6d3e\u5c0d\u6d6a\u5ba2\u8af8\u845b\u5b54\u660e\uff09 + \u5c0f\u5ddd\u4eae
  • \u786c\u68a8\u83dc
  • \u9999\u683c\u91cc\u62c9\u00b7\u958b\u62d3\u7570\u5883\uff5e\u7cde\u4f5c\u7375\u624b\u6311\u6230\u795e\u4f5c\uff5e + \u4e0d\u4e8c\u6dbc\u4ecb
  • \u5341\u65e5\u8349\u8f14
  • \u570b\u738b\u6392\u540d
  • \u9ce5\u98fc\u831c
  • \u65e9\u5b89\uff0c\u56de\u4f86\u62c9
  • \u6797\u7530\u7403
  • \u5927\u9ed1\u6697
  • \u94c3\u6728\u52dd\u548c\uff08\u30de\u30b5\u30ab\u30ba\uff09
  • \u8aaa\u8457\u300c\u8acb\u5c07\u6211\u7684\u5b69\u5b50\u6bba\u6b7b\u300d\u7684\u7236\u6bcd\u5011 \u2014 \u62bc\u5ddd\u525b
  • \u7121\u6cd5\u5206\u5272\u86cb\u7cd5\u7684\u5931\u8db3\u5c11\u5e74\u5011 \u2014 \u5bae\u53e3\u5e78\u6cbb
"},{"location":"essay/","title":"\u96a8\u7b46","text":"

\u9019\u88e1\u662f\u96a8\u7b46\uff0c\u7d00\u9304\u5404\u7a2e\u6771\u897f\u3002\u6709\u932f\u6b61\u8fce\u4f86\u4fee\u6b63\u3002

"},{"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

  • \u500b\u4eba\uff0c\u5de5\u4f5c\u6548\u7387\u3001\u5275\u9020\u529b\u3001\u5b78\u7fd2\uff1b
  • \u5718\u968a\uff0c\u7a0b\u5f0f\u78bc\u54c1\u8cea\u3001\u6280\u8853\u50b5\uff1b
  • \u7d44\u7e54\uff0c\u54e1\u5de5\u7559\u4efb\u3001\u5275\u65b0\u3001\u7372\u5229\u3001\u66f4\u5bec\u5ee3\u7684\u76ee\u6a19\u3002

\u5728\u512a\u5316\u958b\u767c\u9ad4\u9a57\u4e0a\uff0c\uff08\u5047\u8a2d\uff09\u6709\u4e09\u500b\u6307\u6a19\u53ef\u4ee5\u8003\u616e\uff1a

  • \u5fc3\u6d41\uff0c\u958b\u767c\u6642\u7684\u6c88\u6d78\u5ea6\u3002 \u53ef\u900f\u904e\u74b0\u5883\u7684\u6539\u5584\uff08\u5982\u5b89\u975c\u7684\u74b0\u5883\uff09\u3001\u5de5\u5177\u7684\u512a\u5316\uff08\u5982\u7d71\u4e00\u4ecb\u9762\uff0c\u700f\u89bd\u5668\u548c IDE \u662f\u5426\u5e38\u5e38\u5207\u63db\uff09\u3001 \u500b\u4eba\u6216\u5718\u968a\u7684\u6642\u9593\u898f\u5283\uff08\u5982\u8b93\u5de5\u7a0b\u81ea\u884c\u898f\u5283\u5c08\u5fc3\u958b\u767c\u7684\u6642\u9593\uff09\u3002
  • \u56de\u994b\uff0c\u9700\u8981\u5f9e\u5916\u90e8\u53bb\u7372\u5f97\u9032\u4e00\u6b65\u5f80\u524d\u7684\u63a8\u529b\uff0c\u901f\u5ea6\u548c\u54c1\u8cea\u662f\u5176\u4e2d\u7684\u91cd\u8981\u8861\u91cf\u9ede\u3002 \u4f8b\u5982\u7a0b\u5f0f\u78bc\u591a\u4e45\u5f97\u5230\u5be9\u95b1\u4e26\u653e\u884c\u3001\u4e00\u500b\u5167\u90e8\u7cfb\u7d71\u7591\u554f\uff08\u4f8b\u5982\u4f9d\u8cf4\u7684 API \u4ecb\u9762\uff09\u591a\u4e45\u5f97\u5230\u56de\u7b54\u3002
  • \u8a8d\u77e5\u8ca0\u8377\uff0c\u8166\u529b\u904b\u4f5c\u6642\u8cc7\u8a0a\u7684\u8ca0\u8f09\u7a0b\u5ea6\u3002 \u8a8d\u77e5\u8ca0\u8377\u53c8\u5206\u70ba\u4e09\u500b\u985e\u5225\u3002 \u5167\u90e8\u56fa\u6709\uff08intrinsic\uff09\uff0c\u8655\u7406\u554f\u984c\u6642\u672c\u4f86\u5c31\u9808\u5177\u5099\u7684\u77e5\u8b58\u3001 \u5916\u986f\u884c\u70ba\uff08extraneous\uff09\uff0c\u8cc7\u8a0a\u5448\u73fe\u7684\u65b9\u5f0f\uff0c\u53ef\u900f\u904e\u66f4\u76f4\u89c0\u7684\u5448\u73fe\u4f86\u964d\u4f4e\u3001 \u610f\u7fa9\u95dc\u806f\uff08germane\uff09\uff0c\u591a\u500b\u8cc7\u8a0a\u4e4b\u9593\u7684\u95dc\u4fc2\uff0c\u8d8a\u9b06\u6563\u4ee3\u8868\u9700\u8981\u82b1\u66f4\u591a\u8166\u529b\u53bb\u4e32\u806f\u3002

\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. 1=\u5f9e\u4e0d\u30012=\u9bae\u5c11\u30013=\u5076\u723e\u30014=\u7d93\u5e38\u30015=\u5e7e\u4e4e\u00a0\u21a9\u21a9\u21a9\u21a9\u21a9\u21a9

  2. 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

  3. 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

  4. 1=0-20%\u30012=21-40%\u30013=41-60%\u30014=61-80%\u30015=81-100%\u00a0\u21a9

  5. 1=\u975e\u5e38\u7cdf\u30012=\u7cdf\u7cd5\u30013=\u53ef\u63a5\u53d7\u30014=\u597d\u30015=\u975e\u5e38\u597d\u00a0\u21a9\u21a9

  6. 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

  7. 1=\u6bcf\u65e5\u30012=\u6bcf\u9031\u30013=\u6bcf\u6708\u30014=\u6bcf\u6578\u6708\u30015=\u5f9e\u4e0d\u00a0\u21a9

"},{"location":"essay/gpl-check/","title":"GPL \u7684\u6aa2\u67e5","text":"

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

  • \u628a\u6240\u6709 Repo \u7684 Dependecy \u6574\u5408\u8d77\u4f86
  • \u900f\u904e\u5957\u4ef6\u7ba1\u7406\u5de5\u5177\u7684 API \u6aa2\u67e5\u5957\u4ef6\u7684 License
  • npm
  • composer
  • maven
"},{"location":"essay/gpl-check/#\u65b9\u6cd5","title":"\u65b9\u6cd5","text":"

\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

  • \u7be9\u9078\u9700\u8981\u7684\u8cc7\u6599
    1. \u9700\u8981\u5927\u65bc\u7b49\u65bc\u56db\u500b\u53c3\u6578\uff0c\u4e5f\u5c31\u662f\u81f3\u5c11\u9700\u8981\u6709 app \u540d\u7a31
    2. path\uff08\u7b2c\u4e8c\u500b\u53c3\u6578\uff09\u9700\u8981\u5305\u542b dependency \u9019\u95dc\u9375\u5b57
    3. project \u540d\u7a31\uff08\u4f46\u4e09\u500b\u53c3\u6578\uff09\u4e0d\u80fd\u5305\u542b\u5167\u90e8\u4f7f\u7528\u7684
    4. project \u540d\u7a31\u5fc5\u9808\u5305\u542b .
    5. \u628a\u7d50\u679c\u4ee5 / \u9023\u7d50
  • \u900f\u904e\u524d\u9762\u5f97\u5230 metadata \u7684\u65b9\u5f0f\u5f97\u5230\u6700\u65b0\u7248\u672c
  • \u5f97\u5230\u6700\u65b0\u7248\u672c\u7684 license
$ 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":"
  • block-ui MIT GPL
  • easejs GPL-3.0+
  • express-sitemap GPL-3.0
  • hipchatter GPL-2.0
  • intro.js AGPL-3.0
  • jszip MIT GPL-3.0-or-later
  • jszip-utils MIT GPL-3.0
  • mariadb LGPL-2.1-or-later
  • node-forge BSD-3-Clause GPL-2.0
  • pm2 AGPL-3.0
  • scrollmagic MIT GPL-3.0+
  • sonarqube-scanner LGPL-3.0
"},{"location":"essay/gpl-check/#composer_1","title":"Composer","text":"
  • matomo/device-detector LGPL-3.0-or-later
  • php-amqplib/php-amqplib LGPL-2.1-or-later
  • phpoffice/phpexcel LGPL-2.1
  • phpmailer/phpmailer LGPL-2.1-only
  • silvertipsoftware/wkhtmltopdf-amd64 LGPL-3.0-only
"},{"location":"essay/gpl-check/#maven_1","title":"Maven","text":"

build.gradle \u548c pom.xml \u90fd\u8981\u8dd1\u5b8c\u3002

  • com.experlog/xapool LGPL
  • com.github.jsqlparser/jsqlparser GNU-Library-or-Lesser-General-Public-License-(LGPL)-V2.1 The-Apache-Software-License-Version-2.0
  • com.rabbitmq/amqp-client AL-2.0 GPL-v2 MPL-2.0
  • com.whalin/Memcached-Java-Client LGPLv3
  • net.java/jvnet-parent CDDL-1.1 GPL2-w/-CPE
  • org.glassfish.jersey/project EPL-2.0 The-GNU-General-Public-License-(GPL)-Version-2-With-Classpath-Exception Apache-License-2.0 Modified-BSD
  • org.glassfish.jersey.media/project EPL-2.0 The-GNU-General-Public-License-(GPL)-Version-2-With-Classpath-Exception Apache-License-2.0
  • org.javassist/javassist MPL-1.1 LGPL-2.1 Apache-License-2.0
  • org.mariadb.jdbc/mariadb-java-client LGPL-2.1
  • org.sonatype.oss/oss-parent LGPL
"},{"location":"essay/nginx-changelog/","title":"Nginx from 1.18.0 to 1.22.1","text":"

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:

  • 1-byte memory overwrite might occur during DNS server response processing if the 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.0

Feature:

  • the 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.1
  • the userid_flags directive. 1.19.3
  • the proxy_cookie_flags directive. 1.19.3
  • the same source files can now be specified in different modules while building addon modules. 1.19.5
  • the -e switch. 1.19.5
  • \ud83d\udc41\ufe0f now, if free worker connections are exhausted, nginx starts closing not only keepalive connections, but also connections in lingering close. 1.19.7
  • flags in the proxy_cookie_flags directive can now contain variables. 1.19.8
  • the $connection_time variable. 1.19.10
  • the keepalive_time directive. 1.19.10
  • request body filters API now permits buffering of the data being processed. 1.21.2
  • support for sendfile(SF_NOCACHE) on FreeBSD. 1.21.5

Bugfix:

  • negative size buf in writer alerts might appear in logs if a memcached server returned a malformed response. 1.19.1
  • on XFS and NFS file systems disk cache size might be calculated incorrectly. 1.19.1
  • zero length UDP datagrams were not proxied. 1.19.1
  • \ud83d\udc41\ufe0f nginx did not delete unix domain listen sockets during graceful shutdown on the SIGQUIT signal. 1.19.1
  • a segmentation fault might occur in a worker process if different large_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.3
  • the stale-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.3
  • in request body filters internal API. 1.19.5
  • upstream sent frame for closed stream errors might occur when working with gRPC backends. 1.19.5
  • nginx returned the 400 response on requests like GET http://example.com?args HTTP/1.0. 1.19.6
  • a segmentation fault might occur in a worker process if HTTPS was used; the bug had appeared in 1.19.5. 1.19.6
  • no live upstreams errors if a server inside upstream block was marked as down. 1.19.6
  • in the add_trailer directive. 1.19.7
  • HEAD requests were handled incorrectly if the return directive was used with the image_filter or xslt_stylesheet directives. 1.19.7
  • zero 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.7
  • in the eventport method. 1.19.8
  • some errors were logged as unknown if nginx was built with glibc 2.32. 1.19.8
  • in the eventport method. 1.19.9
  • \ud83d\udc41\ufe0f nginx might not detect that a connection was already closed by the client when waiting for auth_delay or limit_req delay, or when working with backends. 1.19.9
  • \ud83d\udc41\ufe0f nginx might not close a connection till keepalive timeout expiration if the connection was closed by the client while discarding the request body. 1.19.9
  • special characters were not escaped during automatic redirect with appended trailing slash. 1.21.0
  • reduced memory consumption for long-lived requests when proxying with more than 64 buffers. 1.21.1
  • keepalive connections with gRPC backends might not be closed after receiving a GOAWAY frame. 1.21.1
  • nginx did not escape \", <, >, \\, ^, ``,{,|, and}` characters when proxying with changed URI. 1.21.1
  • invalid headers from backends were logged at the info level instead of error; the bug had appeared in 1.21.1. 1.21.4
  • \ud83d\udc41\ufe0f after receiving a response with incorrect length from a proxied backend nginx might nevertheless cache the connection. Thanks to Awdhesh Mathpal. 1.21.4
  • in the $content_length variable when using chunked transfer encoding. 1.21.4
  • nginx returned the Connection: keep-alive header line in responses during graceful shutdown of old worker processes. 1.21.6
  • when using EPOLLEXCLUSIVE on Linux client connections were unevenly distributed among worker processes. 1.21.6

Change:

  • now extra data sent by a backend are always discarded. 1.19.1
  • optimization of client request body reading when using chunked transfer encoding. 1.19.2
  • now nginx starts closing keepalive connections before all free worker connections are exhausted, and logs a warning about this to the error log. 1.19.2
  • the default value of the keepalive_requests directive was changed to 1000. 1.19.10
  • optimization of configuration testing when using many listening sockets. 1.21.1
  • \ud83d\udc41\ufe0f now nginx always returns an error if spaces or control characters are used in the Host request header line. 1.21.1
  • \ud83d\udc41\ufe0f now nginx always returns an error if spaces or control characters are used in a header name. 1.21.1
  • \ud83d\udc41\ufe0f now nginx always returns an error if spaces or control characters are used in the request line. 1.21.1
  • \ud83d\udc41\ufe0f now nginx always returns an error if both Content-Length and Transfer-Encoding header lines are present in the request. 1.21.1
  • \ud83d\udc41\ufe0f now nginx always returns an error for the CONNECT method. 1.21.1
  • export ciphers are no longer supported. 1.21.2
  • now nginx rejects HTTP/1.0 requests with the Transfer-Encoding header line. 1.21.2
  • the default value of the sendfile_max_chunk directive was changed to 2 megabytes. 1.21.4
  • now nginx always uses sendfile(SF_NODISKIO) on FreeBSD. 1.21.5
  • now nginx is built with the PCRE2 library by default. 1.21.5

Workaround:

  • [crit] SSL_write() failed messages might appear in logs when using OpenSSL 1.1.1. 1.19.3
  • gzip filter failed to use preallocated memory alerts appeared in logs when using zlib-ng. 1.19.10
"},{"location":"essay/nginx-changelog/#by-module","title":"By module","text":"

Grouped by modules.

Bugfix:

  • in the ngx_http_xslt_filter_module. 1.19.2
  • in the ngx_http_slice_module. 1.19.2
  • in the ngx_http_flv_module and ngx_http_mp4_module. Thanks to Chris Newton. 1.19.6
  • the mp4_start_key_frame directive in the ngx_http_mp4_module. Thanks to Tracey Jaquith. 1.21.4
"},{"location":"essay/nginx-changelog/#stream","title":"Stream","text":"

Feature:

  • the ngx_stream_set_module. 1.19.3
  • the fastopen parameter of the listen directive in the stream module. Thanks to Anbang Wen. 1.21.0
  • support for SSL_sendfile() when using OpenSSL 3.0. 1.21.4
  • the ssl_alpn directive in the stream module. 1.21.4
  • the proxy_half_close directive in the stream module. 1.21.4
"},{"location":"essay/nginx-changelog/#mail-proxy","title":"Mail proxy","text":"

Feature:

  • the proxy_smtp_auth directive in mail proxy. 1.19.4
  • the proxy_protocol parameter of the listen directive, the proxy_protocol and set_real_ip_from directives in mail proxy. 1.19.8
  • the mail proxy module supports POP3 and IMAP pipelining. 1.21.0
  • the max_errors directive in the mail proxy module. 1.21.0

Bugfix:

  • nginx could not be built with the mail proxy module, but without the ngx_mail_ssl_module; the bug had appeared in 1.19.8. 1.19.9
  • connections with clients in the mail proxy module might be closed unexpectedly when using SMTP pipelining. 1.21.0
"},{"location":"essay/nginx-changelog/#by-protocols","title":"By protocols","text":"

Grouped by protocols.

"},{"location":"essay/nginx-changelog/#ssl","title":"SSL","text":"

Feature:

  • the ssl_reject_handshake directive. 1.19.4
  • the ssl_conf_command, proxy_ssl_conf_command, grpc_ssl_conf_command, and uwsgi_ssl_conf_command directives. 1.19.4
  • variables support in the proxy_ssl_certificate, proxy_ssl_certificate_key grpc_ssl_certificate, grpc_ssl_certificate_key, uwsgi_ssl_certificate, and uwsgi_ssl_certificate_key directives. 1.21.0
  • the Auth-SSL-Protocol and Auth-SSL-Cipher header lines are now passed to the mail proxy authentication server. Thanks to Rob Mueller. 1.21.2
  • OpenSSL 3.0 compatibility. 1.21.2
  • the $ssl_alpn_protocol variable. 1.21.4
  • the $ssl_curve variable. 1.21.5

Bugfix:

  • in error handling when using the ssl_ocsp directive. 1.19.1
  • proxying to uwsgi backends using SSL might not work. Thanks to Guanzhong Chen. 1.19.1
  • SSL_shutdown() failed (SSL: ... bad write retry) messages might appear in logs. 1.19.2
  • SSL shutdown might not work. 1.19.2
  • memory leak if the ssl_ocsp directive was used. 1.19.2
  • SSL_shutdown() failed (SSL: ... bad write retry) messages might appear in logs; the bug had appeared in 1.19.2. 1.19.3
  • SSL shutdown did not work when lingering close was used. 1.19.5
  • SSL variables might be empty when used in logs; the bug had appeared in 1.19.5. 1.21.1
  • the security level, which is available in OpenSSL 1.1.0 or newer, did not affect loading of the server certificates when set with @SECLEVEL=N in the ssl_ciphers directive. 1.21.2
  • backend SSL connections in the stream module might hang after an SSL handshake. 1.21.2
  • in the ssl_session_ticket_key when using TLSv1.3. 1.21.6

Change:

  • now nginx rejects SSL connections if ALPN is used by the client, but no supported protocols can be negotiated. 1.21.4
"},{"location":"essay/nginx-changelog/#grpc","title":"gRPC","text":"

Bugfix:

  • upstream sent frame for closed stream errors might occur when working with gRPC backends. 1.19.5
  • SSL connections with gRPC backends might hang if select, poll, or /dev/poll methods were used. 1.21.2
"},{"location":"essay/nginx-changelog/#ocsp","title":"OCSP","text":"

Feature

  • client certificate validation with OCSP. 1.19.0

Bugfix:

  • OCSP stapling might not work if the resolver directive was not specified. 1.19.0
  • upstream 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.9
"},{"location":"essay/nginx-changelog/#http2","title":"HTTP.2","text":"

Bugfix:

  • connections with incorrect HTTP/2 preface were not logged. 1.19.0
  • socket leak when using HTTP/2 and subrequests in the njs module. 1.19.3
  • a segmentation fault might occur in a worker process when using HTTP/2 if errors with code 400 were redirected to a proxied location using the error_page directive. 1.19.3
  • HTTP/2 connections were immediately closed when using keepalive_timeout 0; the bug had appeared in 1.19.7. 1.19.8
  • \ud83d\udc41\ufe0f when using HTTP/2 client request body was always written to disk if the Content-Length header line was not present in the request. 1.21.2
  • in request body filters internal API when using HTTP/2 and buffering of the data being processed. 1.21.3
  • requests might hang when using HTTP/2 and the aio_write directive. 1.21.4
  • connections might hang when using HTTP/2 without SSL with the sendfile and aio directives. 1.21.5

Change:

  • the lingering_close, lingering_time, and lingering_timeout directives now work when using HTTP/2. 1.19.1
  • the http2_max_field_size and http2_max_header_size directives have been removed, the large_client_header_buffers directive should be used instead. 1.19.7
  • connections handling in HTTP/2 has been changed to better match HTTP/1.x; the http2_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.7
  • optimization of client request body reading when using HTTP/2. 1.21.3
  • support for NPN instead of ALPN to establish HTTP/2 connections has been removed. 1.21.4
"},{"location":"essay/nginx-changelog/#fastcgi","title":"FastCGI","text":"

Bugfix:

  • 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.2

Change:

  • now after receiving a too short response from a FastCGI server nginx tries to send the available part of the response to the client, and then closes the client connection. 1.19.1
"},{"location":"essay/nginx-changelog/#by-versions","title":"By versions","text":"

from 1.19.0 to 1.22.1(stable)

"},{"location":"essay/nginx-changelog/#1216","title":"1.21.6","text":"

\ud83d\udcc6 25 Jan 2022

  • Bugfix: when using EPOLLEXCLUSIVE on Linux client connections were unevenly distributed among worker processes.
  • Bugfix: nginx returned the \"Connection: keep-alive\" header line in responses during graceful shutdown of old worker processes.
  • Bugfix: in the \"ssl_session_ticket_key\" when using TLSv1.3.
"},{"location":"essay/nginx-changelog/#1215","title":"1.21.5","text":"

\ud83d\udcc6 28 Dec 2021

  • Change: now nginx is built with the PCRE2 library by default.
  • Change: now nginx always uses sendfile(SF_NODISKIO) on FreeBSD.
  • Feature: support for sendfile(SF_NOCACHE) on FreeBSD.
  • Feature: the $ssl_curve variable.
  • Bugfix: connections might hang when using HTTP/2 without SSL with the \"sendfile\" and \"aio\" directives.
"},{"location":"essay/nginx-changelog/#1214","title":"1.21.4","text":"

\ud83d\udcc6 02 Nov 2021

  • Change: support for NPN instead of ALPN to establish HTTP/2 connections has been removed.
  • Change: now nginx rejects SSL connections if ALPN is used by the client, but no supported protocols can be negotiated.
  • Change: the default value of the \"sendfile_max_chunk\" directive was changed to 2 megabytes.
  • Feature: the \"proxy_half_close\" directive in the stream module.
  • Feature: the \"ssl_alpn\" directive in the stream module.
  • Feature: the $ssl_alpn_protocol variable.
  • Feature: support for SSL_sendfile() when using OpenSSL 3.0.
  • Feature: the \"mp4_start_key_frame\" directive in the ngx_http_mp4_module. Thanks to Tracey Jaquith.
  • Bugfix: in the $content_length variable when using chunked transfer encoding.
  • Bugfix: after receiving a response with incorrect length from a proxied backend nginx might nevertheless cache the connection. Thanks to Awdhesh Mathpal.
  • Bugfix: invalid headers from backends were logged at the \"info\" level instead of \"error\"; the bug had appeared in 1.21.1.
  • Bugfix: requests might hang when using HTTP/2 and the \"aio_write\" directive.
"},{"location":"essay/nginx-changelog/#1213","title":"1.21.3","text":"

\ud83d\udcc6 07 Sep 2021

  • Change: optimization of client request body reading when using HTTP/2.
  • Bugfix: in request body filters internal API when using HTTP/2 and buffering of the data being processed.
"},{"location":"essay/nginx-changelog/#1212","title":"1.21.2","text":"

\ud83d\udcc6 31 Aug 2021

  • Change: now nginx rejects HTTP/1.0 requests with the \"Transfer-Encoding\" header line.
  • Change: export ciphers are no longer supported.
  • Feature: OpenSSL 3.0 compatibility.
  • Feature: the \"Auth-SSL-Protocol\" and \"Auth-SSL-Cipher\" header lines are now passed to the mail proxy authentication server. Thanks to Rob Mueller.
  • Feature: request body filters API now permits buffering of the data being processed.
  • Bugfix: backend SSL connections in the stream module might hang after an SSL handshake.
  • Bugfix: the security level, which is available in OpenSSL 1.1.0 or newer, did not affect loading of the server certificates when set with \"@SECLEVEL=N\" in the \"ssl_ciphers\" directive.
  • Bugfix: SSL connections with gRPC backends might hang if select, poll, or /dev/poll methods were used.
  • Bugfix: when using HTTP/2 client request body was always written to disk if the \"Content-Length\" header line was not present in the request.
"},{"location":"essay/nginx-changelog/#1211","title":"1.21.1","text":"

\ud83d\udcc6 06 Jul 2021

  • Change: now nginx always returns an error for the CONNECT method.
  • Change: now nginx always returns an error if both \"Content-Length\" and \"Transfer-Encoding\" header lines are present in the request.
  • Change: now nginx always returns an error if spaces or control characters are used in the request line.
  • Change: now nginx always returns an error if spaces or control characters are used in a header name.
  • Change: now nginx always returns an error if spaces or control characters are used in the \"Host\" request header line.
  • Change: optimization of configuration testing when using many listening sockets.
  • Bugfix: nginx did not escape \"\"\", \"<\", \">\", \"\\\", \"^\", \"`\", \"{\", \"|\", and \"}\" characters when proxying with changed URI.
  • Bugfix: SSL variables might be empty when used in logs; the bug had appeared in 1.19.5.
  • Bugfix: keepalive connections with gRPC backends might not be closed after receiving a GOAWAY frame.
  • Bugfix: reduced memory consumption for long-lived requests when proxying with more than 64 buffers.
"},{"location":"essay/nginx-changelog/#1210","title":"1.21.0","text":"

\ud83d\udcc6 25 May 2021

  • Security: 1-byte memory overwrite might occur during DNS server response processing if the \"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).
  • Feature: variables support in the \"proxy_ssl_certificate\", \"proxy_ssl_certificate_key\" \"grpc_ssl_certificate\", \"grpc_ssl_certificate_key\", \"uwsgi_ssl_certificate\", and \"uwsgi_ssl_certificate_key\" directives.
  • Feature: the \"max_errors\" directive in the mail proxy module.
  • Feature: the mail proxy module supports POP3 and IMAP pipelining.
  • Feature: the \"fastopen\" parameter of the \"listen\" directive in the stream module. Thanks to Anbang Wen.
  • Bugfix: special characters were not escaped during automatic redirect with appended trailing slash.
  • Bugfix: connections with clients in the mail proxy module might be closed unexpectedly when using SMTP pipelining.
"},{"location":"essay/nginx-changelog/#11910","title":"1.19.10","text":"

\ud83d\udcc6 13 Apr 2021

  • Change: the default value of the \"keepalive_requests\" directive was changed to 1000.
  • Feature: the \"keepalive_time\" directive.
  • Feature: the $connection_time variable.
  • Workaround: \"gzip filter failed to use preallocated memory\" alerts appeared in logs when using zlib-ng.
"},{"location":"essay/nginx-changelog/#1199","title":"1.19.9","text":"

\ud83d\udcc6 30 Mar 2021

  • Bugfix: nginx could not be built with the mail proxy module, but without the ngx_mail_ssl_module; the bug had appeared in 1.19.8.
  • Bugfix: \"upstream sent response body larger than indicated content length\" errors might occur when working with gRPC backends; the bug had appeared in 1.19.1.
  • Bugfix: nginx might not close a connection till keepalive timeout expiration if the connection was closed by the client while discarding the request body.
  • Bugfix: nginx might not detect that a connection was already closed by the client when waiting for auth_delay or limit_req delay, or when working with backends.
  • Bugfix: in the eventport method.
"},{"location":"essay/nginx-changelog/#1198","title":"1.19.8","text":"

\ud83d\udcc6 09 Mar 2021

  • Feature: flags in the \"proxy_cookie_flags\" directive can now contain variables.
  • Feature: the \"proxy_protocol\" parameter of the \"listen\" directive, the \"proxy_protocol\" and \"set_real_ip_from\" directives in mail proxy.
  • Bugfix: HTTP/2 connections were immediately closed when using \"keepalive_timeout 0\"; the bug had appeared in 1.19.7.
  • Bugfix: some errors were logged as unknown if nginx was built with glibc 2.32.
  • Bugfix: in the eventport method.
"},{"location":"essay/nginx-changelog/#1197","title":"1.19.7","text":"

\ud83d\udcc6 16 Feb 2021

  • Change: connections handling in HTTP/2 has been changed to better match HTTP/1.x; the \"http2_recv_timeout\", \"http2_idle_timeout\", and \"http2_max_requests\" directives have been removed, the \"keepalive_timeout\" and \"keepalive_requests\" directives should be used instead.
  • Change: the \"http2_max_field_size\" and \"http2_max_header_size\" directives have been removed, the \"large_client_header_buffers\" directive should be used instead.
  • Feature: now, if free worker connections are exhausted, nginx starts closing not only keepalive connections, but also connections in lingering close.
  • Bugfix: \"zero 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.
  • Bugfix: HEAD requests were handled incorrectly if the \"return\" directive was used with the \"image_filter\" or \"xslt_stylesheet\" directives.
  • Bugfix: in the \"add_trailer\" directive.
"},{"location":"essay/nginx-changelog/#1196","title":"1.19.6","text":"

\ud83d\udcc6 15 Dec 2020

  • Bugfix: \"no live upstreams\" errors if a \"server\" inside \"upstream\" block was marked as \"down\".
  • Bugfix: a segmentation fault might occur in a worker process if HTTPS was used; the bug had appeared in 1.19.5.
  • Bugfix: nginx returned the 400 response on requests like \"GET http://example.com?args HTTP/1.0\".
  • Bugfix: in the ngx_http_flv_module and ngx_http_mp4_module. Thanks to Chris Newton.
"},{"location":"essay/nginx-changelog/#1195","title":"1.19.5","text":"

\ud83d\udcc6 24 Nov 2020

  • Feature: the -e switch.
  • Feature: the same source files can now be specified in different modules while building addon modules.
  • Bugfix: SSL shutdown did not work when lingering close was used.
  • Bugfix: \"upstream sent frame for closed stream\" errors might occur when working with gRPC backends.
  • Bugfix: in request body filters internal API.
"},{"location":"essay/nginx-changelog/#1194","title":"1.19.4","text":"

\ud83d\udcc6 27 Oct 2020

  • Feature: the \"ssl_conf_command\", \"proxy_ssl_conf_command\", \"grpc_ssl_conf_command\", and \"uwsgi_ssl_conf_command\" directives.
  • Feature: the \"ssl_reject_handshake\" directive.
  • Feature: the \"proxy_smtp_auth\" directive in mail proxy.
"},{"location":"essay/nginx-changelog/#1193","title":"1.19.3","text":"

\ud83d\udcc6 29 Sep 2020

  • Feature: the ngx_stream_set_module.
  • Feature: the \"proxy_cookie_flags\" directive.
  • Feature: the \"userid_flags\" directive.
  • Bugfix: the \"stale-if-error\" cache control extension was erroneously applied if backend returned a response with status code 500, 502, 503, 504, 403, 404, or 429.
  • Bugfix: \"[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.
  • Workaround: \"[crit] SSL_write() failed\" messages might appear in logs when using OpenSSL 1.1.1.
  • Bugfix: \"SSL_shutdown() failed (SSL: ... bad write retry)\" messages might appear in logs; the bug had appeared in 1.19.2.
  • Bugfix: a segmentation fault might occur in a worker process when using HTTP/2 if errors with code 400 were redirected to a proxied location using the \"error_page\" directive.
  • Bugfix: socket leak when using HTTP/2 and subrequests in the njs module.
"},{"location":"essay/nginx-changelog/#1192","title":"1.19.2","text":"

\ud83d\udcc6 11 Aug 2020

  • Change: now nginx starts closing keepalive connections before all free worker connections are exhausted, and logs a warning about this to the error log.
  • Change: optimization of client request body reading when using chunked transfer encoding.
  • Bugfix: memory leak if the \"ssl_ocsp\" directive was used.
  • Bugfix: \"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.
  • Bugfix: a segmentation fault might occur in a worker process if different large_client_header_buffers sizes were used in different virtual servers.
  • Bugfix: SSL shutdown might not work.
  • Bugfix: \"SSL_shutdown() failed (SSL: ... bad write retry)\" messages might appear in logs.
  • Bugfix: in the ngx_http_slice_module.
  • Bugfix: in the ngx_http_xslt_filter_module.
"},{"location":"essay/nginx-changelog/#1191","title":"1.19.1","text":"

\ud83d\udcc6 07 Jul 2020

  • Change: the \"lingering_close\", \"lingering_time\", and \"lingering_timeout\" directives now work when using HTTP/2.
  • Change: now extra data sent by a backend are always discarded.
  • Change: now after receiving a too short response from a FastCGI server nginx tries to send the available part of the response to the client, and then closes the client connection.
  • Change: now after receiving a response with incorrect length from a gRPC backend nginx stops response processing with an error.
  • Feature: the \"min_free\" parameter of the \"proxy_cache_path\", \"fastcgi_cache_path\", \"scgi_cache_path\", and \"uwsgi_cache_path\" directives. Thanks to Adam Bambuch.
  • Bugfix: nginx did not delete unix domain listen sockets during graceful shutdown on the SIGQUIT signal.
  • Bugfix: zero length UDP datagrams were not proxied.
  • Bugfix: proxying to uwsgi backends using SSL might not work. Thanks to Guanzhong Chen.
  • Bugfix: in error handling when using the \"ssl_ocsp\" directive.
  • Bugfix: on XFS and NFS file systems disk cache size might be calculated incorrectly.
  • Bugfix: \"negative size buf in writer\" alerts might appear in logs if a memcached server returned a malformed response.
"},{"location":"essay/nginx-changelog/#1190","title":"1.19.0","text":"

\ud83d\udcc6 26 May 2020

  • Feature: client certificate validation with OCSP.
  • Bugfix: \"upstream sent frame for closed stream\" errors might occur when working with gRPC backends.
  • Bugfix: OCSP stapling might not work if the \"resolver\" directive was not specified.
  • Bugfix: connections with incorrect HTTP/2 preface were not logged.
"},{"location":"essay/node-changelog-14-18/","title":"Node.js \u5f9e 14 \u5347 18 \u7684\u6ce8\u610f\u4e8b\u9805","text":"

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

  • v16 Changelog
  • v18 Changelog

\u4e5f\u53ef\u4ee5\u5403\u5176\u4ed6\u4eba\u716e\u904e\u7684\uff1a

  • v16
    • \u5b98\u65b9\u5728 2021 \u767c\u8868\u4e86\u4e00\u7bc7\u6458\u8981\u7684\u6ce8\u610f\u4e8b\u9805\u3002 \u5beb\u5f97\u5f88\u597d\uff0c\u53ef\u60dc\u6c92\u6709 v18 \u7684\uff0c \u800c\u4e14\u4e5f\u5728 2022 \u8868\u9054\u4e0d\u6703\u518d\u767c\u8868\u65b0\u6587\u7ae0\u3002
    • RedHat \u5b98\u65b9\u6587\u4ef6
  • v18
    • \u4e94\u5927\u65b0\u529f\u80fd\u7684\u90e8\u843d\u683c\u6587\u7ae0
    • \u5b98\u65b9\u6587\u4ef6
    • RedHat \u5b98\u65b9\u6587\u4ef6
"},{"location":"essay/node-changelog-14-18/#ecma-script","title":"ECMA Script","text":"

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

  • v18 \u5efa\u8b70\u7684\u8a2d\u5b9a
  • \u4f7f\u7528 ESM \u7684\u8a2d\u5b9a\u3002 \u5be6\u969b\u4e0a ESM \u7684\u8a2d\u5b9a\u5f88\u8907\u96dc\uff0c \u53ef\u4ee5\u53c3\u8003\u6211\u81ea\u5df1\u5728\u7dad\u8b77\u7684 template-node-ts \u548c\u7db2\u8def\u4e0a\u7684\u4e00\u4e9b\u6574\u7406\u6587\u7ae0\uff0c\u4f8b\u5982\u9019\u7bc7 Gist\uff1b
  • \u9664\u6b64\u4e4b\u5916\uff0c\u9084\u6709\u5c0d\u7a0b\u5f0f\u78bc\u6709\u6f54\u7656\u7684\u8f03\u56b4\u8b39\u8a2d\u5b9a\u3002
"},{"location":"essay/node-changelog-14-18/#ssl","title":"SSL","text":"

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

\u5c01\u5305\u4e0a\u7684\u5dee\u7570

\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()
"},{"location":"essay/node-changelog-14-18/#\u65b0\u529f\u80fd","title":"\u65b0\u529f\u80fd","text":"

\u9019\u88e1\u6574\u7406\u4e00\u4e9b\u6709\u8da3\u7684\u65b0\u529f\u80fd\uff1a

  • \u7570\u6b65\u7684 setTimeout

    import { setTimeout } from 'timers/promises';\nasync function run() {\n    await setTimeout(5000);\n}\n
  • Event \u548c EventTarget \u7684\u5be6\u4f5c

  • \u9810\u8a2d\u6703\u8a2d\u5b9a\u670d\u52d9\u7684 Timeout\uff1a
  • headersTimeout\uff1a\u8b80\u53d6 HTTP Header \u8d85\u904e 60 \u79d2\u5f8c\u6703\u4e2d\u65b7\u9023\u7dda
  • requestTimeout\uff1a\u8655\u7406 HTTP \u8acb\u6c42\u8d85\u904e 5 \u5206\u9418\u5f8c\u6703\u4e2d\u65b7\u9023\u7dda
  • Blob\uff0c\u985e\u4f3c Buffer\uff0c \u4f46\u662f\u5141\u8a31\u591a\u500b\u7dda\u7a0b\u5c0d\u4ed6\u9032\u884c\u8b80\u53d6\u548c\u4fee\u6539\u3002
  • BroadcastChannel\uff0c\u985e\u4f3c EventTarget\uff0c \u4f46\u662f\u9069\u5408\u591a\u7dda\u7a0b\u7684\u50b3\u905e\u8cc7\u8a0a\u3002

\u4e0b\u9762\u662f\u4e00\u4e9b\u6709\u8da3\u4f46\u9084\u5728\u958b\u767c\u968e\u6bb5\u7684\u529f\u80fd\uff1a

  • \u900f\u904e Web Crypto API \u4f86\u9032\u884c\u5bc6\u78bc\u5b78\u7684\u61c9\u7528\uff0c Node.js \u4e00\u76f4\u90fd\u5e0c\u671b\u5f2d\u5e73\u700f\u89bd\u5668\u548c\u5f8c\u7aef\u7684\u5dee\u7570\u3002
  • fetch\uff0c \u4e5f\u662f\u70ba\u4e86\u5f2d\u5e73\u548c\u700f\u89bd\u5668\u7684\u5dee\u7570\uff0c\u5141\u8a31\u5feb\u901f\u800c\u7c21\u55ae\u7684\u505a HTTP \u8acb\u6c42\u3002

    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
  • \u539f\u751f\u55ae\u5143\u6e2c\u8a66\u6846\u67b6\uff1aTest Runner

    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
"},{"location":"essay/node-changelog-14-18/#\u7d50\u8ad6","title":"\u7d50\u8ad6","text":"

\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

  • \u7528\u4f86\u300c\u89e3\u91cb\u300d\uff08\u6216\u9810\u6e2c\uff09\u69cb\u9762\u7684\u8b8a\u6578\uff08x1 \u5230 x6\uff09\u7a31\u70ba\u5f62\u6210\u6027\u6307\u6a19 \uff08\u6216\u5916\u751f\u6f5b\u5728\u8b8a\u6578\uff0cformative indicator, exogenous latent variable\uff09\uff1b
  • \u7528\u4f86\u300c\u8a08\u7b97\u300d\uff08\u6216\u5171\u8b8a\uff0ccovariation\uff09\u69cb\u9762\u7684\u8b8a\u6578\uff08x7 \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

"},{"location":"essay/pls-sem/#\u6e2c\u91cf\u7406\u8ad6","title":"\u6e2c\u91cf\u7406\u8ad6","text":"

\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\u6b78

PLS-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

  • \u8cc7\u6599\u7279\u6027\uff0c\u9078\u7528\u548c\u6536\u96c6\u539f\u59cb\u8cc7\u6599\u6642\uff0c\u8981\u6ce8\u610f\u4ec0\u9ebc\uff1b
  • \u6a21\u578b\u7279\u6027\uff0c\u91dd\u5c0d\u5047\u8a2d\u9032\u884c\u6a21\u578b\u7684\u5efa\u7f6e\u6642\uff0c\u8981\u6ce8\u610f\u4ec0\u9ebc\uff1b
  • \u53c3\u6578\u7279\u6027\uff0c\u9032\u884c\u6f14\u7b97\u6cd5\u7684\u8a2d\u8a08\u548c\u6548\u7387\u8abf\u6821\u6642\uff0c\u8981\u6ce8\u610f\u4ec0\u9ebc\uff1b
  • \u8a55\u4f30\u6a21\u578b\uff0c\u6700\u7d42\u91dd\u5c0d\u7d50\u679c\u9032\u884c\u8a55\u4f30\u6642\uff0c\u8981\u6ce8\u610f\u4ec0\u9ebc\u3002
"},{"location":"essay/pls-sem/#\u8cc7\u6599\u7279\u6027","title":"\u8cc7\u6599\u7279\u6027","text":"

\u9078\u7528\u548c\u6536\u96c6\u539f\u59cb\u8cc7\u6599\u6642\uff0c\u8981\u6ce8\u610f\u4ec0\u9ebc\u3002

  • \u6a23\u672c\u5927\u5c0f\uff1a
  • \u5c11\u91cf\u6a23\u672c\u80fd\u9054\u5230\u9ad8\u6c34\u6e96\u7684\u5206\u6790\u80fd\u529b\uff0c\u4f46\u662f\u63a1\u6a23\u7684\u7fa4\u9ad4\u9700\u548c\u6bcd\u9ad4\u7d50\u69cb\u76f8\u4f3c\uff1b
  • \u6a23\u672c\u7684\u6578\u91cf\u80fd\u63d0\u9ad8\u6e96\u78ba\u6027\uff08\u63db\u53e5\u8a71\u8aaa\uff0c\u5169\u500b\u6a23\u672c\u7fa4\u7d44\u5206\u6790\u7d50\u679c\u80fd\u4fdd\u6301\u4e00\u81f4\uff09\uff1b
  • \u6709\u7814\u7a76\u8868\u660e 10 \u500d\u7684\u5f62\u6210\u6027\u6307\u6a19\u6578\u91cf\uff0c\u5373\u662f\u6700\u4f4e\u6a23\u672c\u6578\uff0c\u4e5f\u6709\u7814\u7a76\u8868\u660e\uff0c \u6700\u4f4e\u6a23\u672c\u6578\u9808\u4ee5\u6a21\u578b\u6700\u4f4e\u4fc2\u6578\u548c\u5047\u8aaa\u7684\u986f\u8457\u6027\u5dee\u7570\u70ba\u53c3\u8003\u8a02\u5b9a\u51fa\u4f86\uff0c \u5373 \\({\\left (C/P_{min} \\right )}^2\\)\uff0c\u5176\u4e2d C \u70ba\u6839\u64da\u986f\u8457\u6c34\u6e96\u7684\u5b9a\u503c\uff0c \uff08\u4f8b\u5982 \\(5%\\) \u7684\u986f\u8457\u6c34\u6e96\u4e14\u8a08\u7b97\u5f8c\u7684\u6700\u4f4e\u4fc2\u6578\u70ba 0.2 \u6642\uff0c\u6700\u4f4e\u6a23\u672c\u6578\u70ba \\({\\left (2.486/0.2 \\right )}^2=154.505\\)\uff09\u3002 \u82e5\u6700\u4f4e\u4fc2\u6578\u592a\u4f4e\uff0c\u5c0e\u81f4\u9700\u8981\u7684\u6a23\u672c\u6578\u4e0d\u73fe\u5be6\uff0c\u53ef\u4ee5\u6839\u64da\u6a21\u578b\u662f\u5426\u61c9\u95dc\u6ce8\u90a3\u4e9b\u5f71\u97ff\u529b\u4e0d\u5927\u7684\u53c3\u6578\u53bb\u9078\u64c7\u8f03\u5927\u7684\u53c3\u6578\u3002 \u9019\u65b9\u6cd5\u53ef\u4ee5\u900f\u904e\u56de\u9867\u6a21\u578b\u7684\u65b9\u5f0f\uff0c\u6bd4\u7b2c\u4e00\u6b21\u8a08\u7b97\u7576\u4f5c\u88dc\u8db3\u6a23\u672c\u6578\u5f8c\u7684\u7b2c\u4e8c\u6b21\u8a08\u7b97\u7684\u57fa\u6e96\u3002
  • \u8cc7\u6599\u5206\u5e03\uff1a
  • \u7121\u5206\u4f48\u8981\u6c42\uff0c\u53ef\u4ee5\u63a5\u53d7\u975e\u5c0d\u7a31\u5206\u4f48\uff1b
  • \u6709\u5f71\u97ff\u529b\u7684\u7570\u5e38\u503c\u548c\u5171\u7dda\u6027\u7684\u6a23\u672c\u53ef\u80fd\u6703\u5f71\u97ff\u7d50\u679c\uff0c\u61c9\u8a55\u4f30\u4e26\u907f\u514d\u3002
  • \u8cc7\u6599\u7f3a\u5931\uff1a
  • \u53ea\u8981\u7f3a\u5931\u7684\u6bd4\u4f8b\u5728\u5408\u7406\u7bc4\u570d\u5167\uff08\u5c0f\u65bc 5%\uff09\uff0c\u4ecd\u80fd\u7dad\u6301\u76f8\u7576\u6c34\u6e96\u3002
    • \u53ef\u4ee5\u900f\u904e\u522a\u9664\u8cc7\u6599\u6216\u4f7f\u7528\u5e73\u5747\u3001\u6700\u8fd1\u8cc7\u6599\u3001\u6700\u5927\u5316\u671f\u671b\u503c\u7b49\u65b9\u6cd5\u88dc\u8db3
  • \u6e2c\u91cf\u5c3a\u5ea6\uff1a
  • \u9069\u7528\u65bc\u5ea6\u91cf\u8cc7\u6599\uff08\u7b49\u8ddd\u6216\u7b49\u6bd4\uff09\u548c\u6b21\u5e8f\u7684\u6e96\u5ea6\u91cf\u8cc7\u6599\uff1b
  • \u53ef\u4ee5\u63a5\u53d7\u4e8c\u5143\u8cc7\u6599\uff08\u4f8b\u5982\u662f\u6216\u5426\u3001\u6709\u6216\u7121\uff09\uff0c \u4f46\u5728\u5c07\u5b83\u5011\u7528\u4f5c\u63a7\u5236\u8b8a\u56e0\u3001\u8abf\u7bc0\u8b8a\u56e0\u4ee5\u53ca\u5206\u6790\u6642\uff0c\u9700\u8981\u8a2d\u8a08\u6210\u91dd\u5c0d\u4e8c\u5143\u8cc7\u6599\u7684\u6a21\u578b\u3002
  • \u4e8c\u624b\u8cc7\u6599\uff1a
  • \u56e0 PLS-SEM \u53ef\u4ee5\u8655\u7406\u4e0d\u540c\u7a2e\u985e\u7684\u8cc7\u6599\u548c\u6e2c\u91cf\u6a21\u578b\uff0c\u6240\u4ee5\u9069\u5408\u91dd\u5c0d\u4e8c\u624b\u8cc7\u6599\u505a\u5176\u4ed6\u985e\u5225\u7684\u5206\u6790\u3002
\u6e2c\u91cf\u5c3a\u5ea6

\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

  • \u540d\u76ee\uff08nominal\uff09\uff0c\u4f8b\u5982\u7537\u5973\u5206\u5225\u4ee3\u8868 1 \u548c 0\uff0c\u4f46\u662f\u4e26\u6c92\u6709\u5927\u5c0f\u5dee\u8ddd\u7684\u610f\u7fa9\uff1b
  • \u6b21\u5e8f\uff08ordinal\uff09\uff0c\u4f8b\u5982\u5de5\u4f5c\u6eff\u610f\u5ea6\u5f9e 1 \u5230 5\uff0c\u53ea\u6703\u77e5\u9053 2 \u5927\u65bc 1\uff0c\u4e26\u4e0d\u6703\u77e5\u9053\u5927\u591a\u5c11\uff0c \u63db\u53e5\u8a71\u8aaa\uff0c\u6bd4\u8f03 1\u30012 \u548c 9\u300110 \u7684\u5dee\u8ddd\u662f\u6c92\u610f\u7fa9\u7684\uff1b
  • \u7b49\u8ddd\uff08interval\uff09\uff0c\u4f8b\u5982\u5ba4\u6eab 20 \u5ea6 C\uff0c\u6211\u5011\u53ef\u4ee5\u77e5\u9053 10\u300120 \u548c 30\u300140 \u5ea6\u7684\u5dee\u8ddd\u662f\u76f8\u7b49\u7684\uff1b
  • \u7b49\u6bd4\uff08ratio\uff09\uff0c\u8207\u7b49\u8ddd\u76f8\u4f3c\uff0c\u4f46\u662f\u6709\u4e00\u500b\u4ee3\u8868\u7121\u7684\u96f6\uff0c\u4f8b\u5982\u7d55\u5c0d\u6eab\u5ea6\u3001\u9577\u5ea6\u548c\u91cd\u91cf\u3002
"},{"location":"essay/pls-sem/#\u6a21\u578b\u7279\u6027","title":"\u6a21\u578b\u7279\u6027","text":"

\u91dd\u5c0d\u5047\u8a2d\u9032\u884c\u6a21\u578b\u7684\u5efa\u7f6e\u6642\uff0c\u8981\u6ce8\u610f\u4ec0\u9ebc\u3002

  • \u69cb\u9762\u7684\u6e2c\u91cf\u6a21\u578b\u9700\u8981\u7684\u8b8a\u6578\uff1a
  • \u53ef\u63a5\u53d7\u55ae\u4e00\u6216\u591a\u500b\u8b8a\u6578\u3002
  • \u69cb\u9762\u548c\u6307\u6a19\u7684\u95dc\u4fc2\uff1a
  • \u53ef\u8f15\u6613\u6574\u5408\u5f62\u6210\u6027\u548c\u53cd\u6620\u6027\u7684\u6a21\u578b\uff0c\u4e5f\u53ef\u4ee5\u4f9d\u6b64\u5ef6\u4f38\u7279\u6b8a\u6a21\u578b\uff0c\u4f8b\u5982\u9ad8\u6b0a\u91cd\u7684\u69cb\u9762\u3002
  • \u5efa\u69cb\u8907\u96dc\u7684\u6a21\u578b\uff1a
  • \u53ef\u900f\u904e\u6574\u5408\u591a\u500b\u7d50\u69cb\u7684\u6a21\u578b\uff0c\u4f86\u5efa\u7acb\u8907\u96dc\u7684\u7406\u8ad6\u3002
  • \u6a21\u578b\u7684\u5efa\u7acb\uff1a
  • \u82e5\u6709\u56e0\u679c\u8ff4\u5708\uff0c\u5373 A \u89e3\u91cb B\u3001B \u89e3\u91cb C \u6700\u5f8c C \u88ab\u7528\u4f86\u89e3\u91cb A\uff0c\u5247\u9700\u8981\u8abf\u6574\u6f14\u7b97\u6cd5\u3002
"},{"location":"essay/pls-sem/#\u53c3\u6578\u7279\u6027","title":"\u53c3\u6578\u7279\u6027","text":"

\u9032\u884c\u6f14\u7b97\u6cd5\u7684\u8a2d\u8a08\u548c\u6548\u7387\u8abf\u6821\u6642\uff0c\u8981\u6ce8\u610f\u4ec0\u9ebc\u3002

  • \u76ee\u6a19\uff1a
  • \u6700\u5927\u5316\u53cd\u6620\u6027\u6a21\u578b\u8b8a\u6578\u7684\u65b9\u5dee\u91cf\uff08\u5373 \\(R^2\\)\uff09\u3002
  • \u6548\u7387
  • \u6536\u6582\u6578\u6b21\u8fed\u4ee3\u5f8c\u9054\u5230\u5c40\u90e8\u6216\u5168\u57df\u6700\u512a\u89e3\uff08\u5373\u4f7f\u8907\u96dc\u6a21\u578b\u548c\u5927\u91cf\u8cc7\u6599\uff09\uff0c\u5373\u662f\u6709\u6548\u7387\u7684\u3002
  • \u69cb\u9762\u7684\u672c\u8cea
  • \u91dd\u5c0d\u7814\u7a76\u7684\u6f5b\u5728\u8b8a\u6578\u7684\u4ee3\u7406\uff0c\u901a\u5e38\u591a\u7d44\u69cb\u9762\u8907\u5408\u5f62\u6210\u4e00\u500b\u7406\u8ad6\u3002
  • \u69cb\u9762\u7684\u5206\u6578\u8a08\u7b97
  • \u900f\u904e\u4f86\u6e90\u6307\u6a19\u7684\u7dda\u6027\u7d44\u5408\u4f86\u8a08\u7b97\uff0c\u63db\u53e5\u8a71\u8aaa\uff0c\u4ed6\u5011\u662f\u78ba\u5b9a\u6027\u7684\uff1b
  • \u7528\u9014\u70ba\u9810\u6e2c\u76f8\u95dc\u7406\u8ad6\uff1b
  • \u53ef\u4ee5\u88ab\u62ff\u4f86\u7576\u4f5c\u6a21\u578b\u5f8c\u7e8c\u7684\u8f38\u5165\uff1b
  • \u53d7\u5230\u6578\u64da\u4e0d\u8db3\u7684\u5f71\u97ff\u8f03\u5c0f\u3002
  • \u6b0a\u91cd\u7684\u8a08\u7b97
  • \u8207\u4f7f\u7528\u516c\u56e0\u5b50\u6a21\u578b\u8cc7\u6599\u76f8\u6bd4\uff0c\u7d50\u69cb\u6a21\u578b\u95dc\u4fc2\u901a\u5e38\u88ab\u4f4e\u4f30\uff0c\u6e2c\u91cf\u6a21\u578b\u95dc\u4fc2\u901a\u5e38\u88ab\u9ad8\u4f30\uff1b
  • \u5f9e\u8907\u5408\u6a21\u578b\u8a08\u7b97\u51fa\u7684\u7d50\u679c\u4e0d\u6703\u504f\u9817\u4e14\u4e00\u81f4\uff1b
  • \u7d71\u8a08\u80fd\u529b\u512a\u65bc\u5176\u4ed6\u6a21\u578b\uff0c\u4f8b\u5982 CB-SEM \u548c PLS \u8ff4\u6b78\u3002 \u7d71\u8a08\u80fd\u529b\u512a\u79c0\u4ee3\u8868\u66f4\u5bb9\u6613\u5728\u6574\u9ad4\u7684\u8cc7\u6599\u4e2d\u627e\u51fa\u7279\u5b9a\u95dc\u4fc2\uff08\u4f8b\u5982 A \u8b8a\u56e0\u5bb9\u6613\u50be\u5411\u7406\u8ad6 B\uff09\u3002
"},{"location":"essay/pls-sem/#\u8a55\u4f30\u6a21\u578b","title":"\u8a55\u4f30\u6a21\u578b","text":"

\u6700\u7d42\u91dd\u5c0d\u7d50\u679c\u9032\u884c\u8a55\u4f30\u6642\uff0c\u8981\u6ce8\u610f\u4ec0\u9ebc\u3002

  • \u6574\u9ad4\u6a21\u578b\u7684\u8a55\u4f30
  • CB-SEM \u4e2d\u5b9a\u7fa9\u7684\u64ec\u5408\uff08fit\uff09\u6982\u5ff5\u4e0d\u9069\u7528\u65bc PLS-SEM\u3002 \u6a21\u578b\u64ec\u5408\u6e2c\u91cf\uff08model fit measure\uff09\u901a\u5e38\u88ab\u8b49\u660e\u662f\u7121\u6548\u7684\uff1b
  • \u6e2c\u91cf\u6a21\u578b\u7684\u8a55\u4f30
  • \u53cd\u6620\u6027\u6e2c\u91cf\u6a21\u578b\u6839\u64da\u6307\u6a19\u4fe1\u5ea6\uff08indicator reliability\uff09\u3001 \u5167\u90e8\u4e00\u81f4\u6027\u4fe1\u5ea6\uff08internal consistency reliability\uff09\u3001 \u6536\u6582\u7a69\u5b9a\u5ea6\uff08 convergent validity\uff09\u548c \u5340\u5225\u6548\u5ea6\uff08 discriminant validity\uff09\u9032\u884c\u5206\u6790\uff1b
  • \u5f62\u6210\u6027\u6e2c\u91cf\u6a21\u578b\u6839\u64da\u6536\u6582\u7a69\u5b9a\u5ea6\uff08 convergent validity\uff09\u3001 \u6307\u6a19\u5171\u7dda\u6027\uff08indicator collinearity\uff09\u548c \u6307\u6a19\u6b0a\u91cd\u7684\u986f\u8457\u6027\u548c\u76f8\u95dc\u6027\uff08significance and relevance of indicator weights\uff09\u9032\u884c\u5206\u6790\u3002
  • \u7d50\u69cb\u6a21\u578b\u7684\u8a55\u4f30
  • \u591a\u500b\u9810\u6e2c\u6027\u69cb\u9762\u7684\u5171\u7dda\u6027\uff1b
  • \u8def\u5f91\u6b0a\u91cd\u7684\u986f\u8457\u6027\u548c\u76f8\u95dc\u6027\uff1b
  • \u91dd\u5c0d\u6a23\u672c\u5167\u7684\u8cc7\u6599\u9032\u884c\u89e3\u91cb\uff08explanatory\uff09\u7684\u80fd\u529b\uff1b
  • \u91dd\u5c0d\u6a23\u672c\u5916\u7684\u8cc7\u6599\u9032\u884c\u9810\u6e2c\u80fd\u529b\uff08\\(PLS_predict\\)\uff09\u3002
  • \u984d\u5916\u7684\u5206\u6790
  • \u96a8\u8457 PLS-SEM \u7684\u767c\u5c55\uff0c\u8d8a\u4f86\u8d8a\u591a\u9032\u968e\u7684\u6a21\u578b\u5efa\u7f6e\u3001\u8a55\u4f30\u3001\u5206\u6790\u624b\u6bb5\u88ab\u958b\u767c\u51fa\u4f86\uff0c\u4f8b\u5982\uff1a
    • \u78ba\u8a8d\u6027\u56db\u5143\u5206\u6790\uff08confirmatory tetrad analysis\uff09
    • \u78ba\u8a8d\u6027\u7d44\u5408\u5206\u6790\uff08confirmatory composite analysis\uff09
    • \u96e2\u6563\u9078\u64c7\u5efa\u6a21\uff08discrete choice modeling\uff09
    • \u5167\u751f\u6027\u8a55\u4f30\uff08endogeneity assessment\uff09
    • \u9ad8\u968e\u69cb\u9762\uff08higher-order constructs\uff09
    • \u6f5b\u5728\u985e\u5225\u5206\u6790\uff08latent class analysis\uff09
    • \u6e2c\u91cf\u6a21\u578b\u4e0d\u8b8a\u6027\uff08measurement model invariance\uff09
    • \u4e2d\u4ecb\u5206\u6790\uff08mediation analysis\uff09
    • \u6a21\u578b\u9078\u64c7\uff08model selection\uff09
    • \u8abf\u7bc0\u6548\u61c9\uff08moderating effects\uff09\uff0c\u5305\u62ec\u8abf\u7bc0\u4e2d\u4ecb\uff08moderated mediation\uff09
    • \u591a\u7d44\u5206\u6790\uff08multi-group analysis\uff09
    • \u5fc5\u8981\u689d\u4ef6\u5206\u6790\uff08necessary condition analysis\uff09
    • \u975e\u7dda\u6027\u6548\u61c9\uff08nonlinear effects\uff09
"},{"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":"
  • \u554f\u904e\u53bb\u7d93\u9a57\u8207\u4e8b\u5be6\uff0c\u907f\u514d\u5047\u8a2d\u6027\u554f\u984c
    1. \u9810\u8a2d\u689d\u4ef6\u5beb\u6e05\u695a
  • \u5982\u679c\u672a\u4f86\u9080\u8acb\u60a8\u4f7f\u7528\uff0c\u60a8\u6703\u4f7f\u7528\u54ea\u4e9b\u529f\u80fd\u3002A. \u8077\u7f3a\u6392\u5e8f
  • \u5047\u8a2d\u672a\u4f86\u6b63\u8981\u958b\u59cb\u627e\u5de5\u4f5c\uff0c\u60a8\u6703\u60f3\u4f7f\u7528\u54ea\u4e9b\u529f\u80fd\u3002A. \u8077\u7f3a\u6392\u5e8f\uff1a\u53ef\u4ee5\u5c07\u60a8\u611f\u8208\u8da3\u7684\u8077\u7f3a\u7f6e\u9802
  • \u554f\u884c\u70ba\uff0c\u907f\u514d\u554f\u601d\u8003
    1. \u9078\u64c7\u984c
    2. \u5716\u6848
    3. \u8b93\u5176\u53ef\u4ee5\u300c\u99ac\u4e0a\u60f3\u51fa\u4f86\u300d
  • \u554f\u984c\u8981\u8db3\u5920\u660e\u78ba\uff0c\u76e1\u53ef\u80fd\u964d\u4f4e\u6a21\u7cca\u7a7a\u9593
  • \u8acb\u554f\u60a8\u591a\u5e38\u4f7f\u7528\u6211\u5011\u7684\u670d\u52d9\uff1f
  • \u8acb\u554f\u60a8\u6709\u591a\u5e38\u4f7f\u7528 104 \u4eba\u529b\u9280\u884c\uff1f
  • \u8acb\u554f\u60a8\u6700\u8fd1\u4e00\u500b\u6708\u5167\uff0c\u591a\u5e38\u4f7f\u7528 104 \u5de5\u4f5c\u5feb\u627e APP \u4f86\u61c9\u5fb5\u5de5\u4f5c
  • \u9583\u907f\u4e0d\u826f\u554f\u984c
    1. \u5f15\u5c0e\u5f0f\u554f\u984c\uff1a\u66ff\u586b\u7b54\u8005\u9810\u8a2d\uff08\u6697\u793a\uff09\u7acb\u5834
    2. \u8a98\u5c0e\u662f\u554f\u984c\uff1a\u64cd\u63a7\u3001\u9650\u5236\u56de\u7b54\u8cbb\u70ba
    3. \u4e0d\u660e\u78ba\u554f\u984c\uff1a\u5982\u4e0a\u8ff0\u7b2c\u4e09\u9805
    4. \u884c\u8a71\u554f\u984c\uff1a\u554f\u53e5\u4e2d\u5305\u542b\u884c\u8a71\u3001\u5c08\u696d\u8853\u8a9e
    5. \u8907\u5408\u554f\u984c
    6. \u591a\u91cd\u908f\u8f2f\u554f\u984c
"},{"location":"essay/questionnaire-principal/#\u5c01\u9589\u578b\u9078\u9805\u8a2d\u8a08\u539f\u5247","title":"\u5c01\u9589\u578b\u9078\u9805\u8a2d\u8a08\u539f\u5247","text":"
  • ME: \u5f7c\u6b64\u4e4b\u9593 \u5b8c\u5168\u7368\u7acb\u3001\u6beb\u7121\u91cd\u758a\uff0c\u55ae\u9078
  • CE: \u6574\u9ad4\u800c\u8a00 \u5b8c\u5168\u7aae\u76e1\u53ef\u80fd\u3001\u6beb\u7121\u907a\u6f0f\uff0c\u591a\u9078
"},{"location":"essay/questionnaire-principal/#\u5408\u7406\u7684\u9078\u9805\u6578\u91cf","title":"\u5408\u7406\u7684\u9078\u9805\u6578\u91cf","text":"
  • \u8996\u5de5\u5177\u800c\u5b9a
  • SurveyCake \u53ef\u4ee5\u96d9\u6b04
  • Hotjar \u55ae\u6b04
  • 20 \u500b\u4ee5\u5167
  • \u7e2e\u6e1b\u9078\u9805
  • \u5176\u4ed6
"},{"location":"essay/questionnaire-principal/#\u77e9\u9663\u984c","title":"\u77e9\u9663\u984c","text":"

\u4e00\u984c\u591a\u554f

"},{"location":"essay/questionnaire-principal/#\u674e\u7279\u514b\u91cf\u5c3a","title":"\u674e\u7279\u514b\u91cf\u5c3a","text":"
  • 1 \u5206\u30012 \u5206\u30013 \u5206\u30014 \u5206\u30015 \u5206
  • 5 \u5206\u30017 \u5206\u300111 \u5206\uff08NPS\uff09
  • \u5947\u6578\u9ede\uff1a\u6709\u4e2d\u9593\u9078\u9805
  • \u70ba\u6578\u5b57\u52a0\u4e0a\u6587\u5b57\u6a19\u7c64
"},{"location":"essay/questionnaire-principal/#\u65e2\u6709\u7684\u554f\u5377\u984c\u578b\u53ef\u4ee5\u52a0\u901f\u88fd\u4f5c","title":"\u65e2\u6709\u7684\u554f\u5377\u984c\u578b\u53ef\u4ee5\u52a0\u901f\u88fd\u4f5c","text":"

\u554f\u5377\u8cc7\u6599\u5eab

"},{"location":"essay/questionnaire-principal/#\u554f\u984c\u7684\u985e\u578b","title":"\u554f\u984c\u7684\u985e\u578b","text":"
  • \u63cf\u7e6a\u51fa\u76ee\u6a19\u65cf\u7fa4\u9577\u76f8
  • \u884c\u70ba\u3001\u614b\u5ea6\u3001\u8a8d\u77e5
  • Net-Promoter-Score-NPS
  • \u7f3a\u9ede
  • \u6ce8\u610f
  • \u670d\u52d9\u6eff\u610f\u5ea6
  • \u8cc7\u5b89
"},{"location":"essay/questionnaire-principal/#\u63cf\u7e6a\u51fa\u76ee\u6a19\u65cf\u7fa4\u9577\u76f8","title":"\u63cf\u7e6a\u51fa\u76ee\u6a19\u65cf\u7fa4\u9577\u76f8","text":"
  • \u6027\u5225
  • \u5e74\u9f61
  • \u6559\u80b2\u7a0b\u5ea6
  • \u5c45\u4f4f\u5730
"},{"location":"essay/questionnaire-principal/#\u884c\u70ba\u614b\u5ea6\u8a8d\u77e5","title":"\u884c\u70ba\u3001\u614b\u5ea6\u3001\u8a8d\u77e5","text":"
  • \u6700\u8fd1\u4e00\u500b\u6708\u505a\u4e86\u54ea\u4e9b\u670d\u52d9\uff1a\u662f\u5426\u53d7\u904e\u53bb\u7d93\u9a57\u5f71\u97ff
  • \u6eff\u610f\u5ea6\u3001\u7a4d\u6975\u5ea6\uff1a\u662f\u5426\u6709\u7279\u5b9a\u52d5\u6a5f
  • \uff08\u4e0d\uff09\u4f7f\u7528\u539f\u56e0
"},{"location":"essay/questionnaire-principal/#net-promoter-score-nps","title":"Net Promoter Score (NPS)","text":"

\u4f60\u6709\u591a\u5927\u7684\u610f\u9858\u5c07\u7522\u54c1\u63a8\u85a6\u7d66\u89aa\u670b\u597d\u53cb\uff1f

0~10 \u5206\uff1a

  • 0~6 \u6279\u8a55\u8005
  • 7~8 \u88ab\u52d5\u8005
  • 9~10 \u63a8\u5ee3\u8005
  • NPS = \u63a8\u5ee3\u8005\u6bd4\u4f8b - \u6279\u8a55\u8005\u6bd4\u4f8b
"},{"location":"essay/questionnaire-principal/#\u7f3a\u9ede","title":"\u7f3a\u9ede","text":"
  • \u4ec0\u9ebc\u6a23\u7684\u5206\u6578\u662f\u597d\u7684\uff1f
  • \u6ce2\u52d5\u5927\uff1a\u53d7\u884c\u92b7\u7b49\u5f71\u97ff
  • \u7db2\u8def\u4e0a\u7684\u6a19\u6e96\u7121\u6cd5\u76e1\u4fe1

\u8ddf\u81ea\u5df1\u8cfd\u8dd1

"},{"location":"essay/questionnaire-principal/#\u6ce8\u610f","title":"\u6ce8\u610f","text":"
  • \u554f\u7684\u662f\u9084\u6c92\u767c\u751f\u7684\u4e8b\u60c5
  • \u88dc\u554f\uff1a\u662f\u5426\u4f7f\u7528\u904e\u7522\u54c1
  • \u5207\u5206\u65b9\u5f0f\u592a\u6b66\u65b7
  • \u8ffd\u554f\u8a55\u5206\u539f\u56e0
"},{"location":"essay/questionnaire-principal/#\u670d\u52d9\u6eff\u610f\u5ea6","title":"\u670d\u52d9\u6eff\u610f\u5ea6","text":"
  • 5 \u5206\u30017 \u5206\u300111 \u5206
  • \u8981\u6709\u4e2d\u9593\u9078\u9805\uff0c\u907f\u514d\u9078\u908a\u7ad9
  • \u6bd4\u8f03\uff1a\u6bd4\u4ee5\u524d\u597d\u5c31\u662f\u597d
"},{"location":"essay/questionnaire-principal/#\u8cc7\u5b89","title":"\u8cc7\u5b89","text":"
  • \u7528\u4e0d\u5230\u5c31\u5225\u641c\u96c6
  • \u59a5\u5584\u4fdd\u5b58
"},{"location":"essay/questionnaire-principal/#\u554f\u5377\u4f48\u5c40","title":"\u554f\u5377\u4f48\u5c40","text":""},{"location":"essay/questionnaire-principal/#\u8d77","title":"\u8d77","text":"
  • \u57fa\u672c\u8cc7\u6599
  • \u904e\u53bb\u7d93\u9a57
"},{"location":"essay/questionnaire-principal/#\u627f","title":"\u627f","text":"

\u6700\u95dc\u5fc3\u7684\u8b70\u984c\uff0c\u53ef\u80fd\u9700\u8981\u8cbb\u529b\u601d\u8003

  • \u89ba\u5f97\u597d\u7528\u7684\u529f\u80fd
  • \u671f\u5f85\u7684\u529f\u80fd
"},{"location":"essay/questionnaire-principal/#\u8f49","title":"\u8f49","text":"

\u5e0c\u671b\u586b\u7b54\u8005\u9032\u4e00\u6b65\u63a1\u53d6\u7684\u884c\u52d5

  • \u9858\u610f\u8cfc\u8cb7\u91d1\u984d\u3001\u9858\u610f\u63a8\u85a6\u5c0d\u8c61
  • \u8996\u9700\u6c42\u800c\u5b9a\uff0c\u4e0d\u4e00\u5b9a\u9700\u8981\u6709
"},{"location":"essay/questionnaire-principal/#\u5408","title":"\u5408","text":"
  • \u611f\u8b1d\u8a9e
  • \u901a\u5e38\u654f\u611f\u500b\u8cc7\u6703\u5728\u9019\u6bb5\uff08\u56e0\u70ba\u4f7f\u7528\u8005\u5df2\u7d93\u586b\u5b8c\u5f88\u591a\u554f\u984c\uff0c\u6703\u60f3\u5b8c\u6210\u9019\u500b\u554f\u5377\uff09
"},{"location":"essay/questionnaire-principal/#\u9700\u8981\u653e\u591a\u5c11\u984c\u76ee","title":"\u9700\u8981\u653e\u591a\u5c11\u984c\u76ee","text":"

\u8996\u76ee\u7684\u800c\u5b9a\uff0c\u62bd\u734e\u3001\u79ae\u54c1\u53ef\u6709\u6548\u63d0\u5347\u586b\u7b54\u8005\u610f\u9858\u3002

  • Hotjar \u5efa\u8b70\u6975\u77ed\u554f\u5377
  • \u7528\u65bc\u6eff\u610f\u5ea6
  • 4 \u984c\u5167
  • 1 \u5206\u9418
  • \u77ed\u554f\u5377
  • \u57fa\u672c\u8abf\u67e5
  • 10 \u984c\u5167
  • 3 \u5206\u9418
  • \u4e2d\u554f\u5377
  • \u9a57\u8b49\u5047\u8aaa
  • 10~25
  • 10 \u5206\u9418
  • \u9577\u554f\u5377
  • \u591a\u7a2e\u4ea4\u53c9\u5206\u6790
"},{"location":"essay/questionnaire-principal/#\u554f\u5377\u5de5\u5177","title":"\u554f\u5377\u5de5\u5177","text":""},{"location":"essay/questionnaire-principal/#microsoft-form","title":"Microsoft Form","text":"
  • O365 \u9644\u9001
  • \u6709 NPS \u9810\u8a2d\u554f\u984c
  • \u582a\u7528
  • \u548c O365 \u6574\u5408
"},{"location":"essay/questionnaire-principal/#\u7f3a\u9ede_1","title":"\u7f3a\u9ede","text":"
  • \u7121\u6cd5\u4f7f\u7528\u5716\u7247\u4f5c\u70ba\u9078\u9805
  • \u4e0d\u5bb9\u6613\u908f\u8f2f\u8df3\u8f49
"},{"location":"essay/questionnaire-principal/#google-form","title":"Google Form","text":"
  • \u514d\u8cbb
  • \u6700\u5ee3\u6cdb
  • \u582a\u7528
  • \u548c Google Doc \u6574\u5408
"},{"location":"essay/questionnaire-principal/#\u7f3a\u9ede_2","title":"\u7f3a\u9ede","text":"
  • \u8907\u9078\u984c\u539f\u59cb\u8cc7\u6599\u4e0d\u597d\u5206\u6790
"},{"location":"essay/questionnaire-principal/#survey-cake","title":"Survey Cake","text":"
  • \u6709\u514d\u8cbb\u7248
  • \u53f0\u7063\u516c\u53f8
  • \u529f\u80fd\u5b8c\u6574\u3001\u6559\u5b78\u6587\u4ef6\u8c50\u5bcc
  • \u53ef\u5728\u5f8c\u53f0\u5b8c\u6210\u90e8\u5206\u5206\u6790
"},{"location":"essay/questionnaire-principal/#\u4f7f\u7528\u5834\u666f","title":"\u4f7f\u7528\u5834\u666f","text":"
  • \u8ffd\u6c42\u826f\u597d\u9ad4\u9a57
  • \u6700\u9ad8\u5ea6\u7684\u5ba2\u5236\u9ad4\u9a57
  • \u554f\u5377\u7d50\u679c\u9032\u884c\u62bd\u734e
"},{"location":"essay/questionnaire-principal/#\u7f3a\u9ede_3","title":"\u7f3a\u9ede","text":"
  • \u904b\u884c\u901f\u5ea6\u6162
"},{"location":"essay/questionnaire-principal/#hotjar","title":"Hotjar","text":"
  • \u6709\u514d\u8cbb\u7248
  • \u63d2\u5165\u7db2\u9801
  • \u5f62\u5f0f\u5c0e\u81f4\u984c\u6578\u6709\u56b4\u683c\u9650\u5236
"},{"location":"essay/questionnaire-principal/#\u4f7f\u7528\u5834\u666f_1","title":"\u4f7f\u7528\u5834\u666f","text":"
  • \u7b2c\u4e00\u5370\u8c61\u3001\u5230\u7ad9\u539f\u56e0
  • \u907f\u514d\u8a55\u4f30\u529f\u80fd\u984c
"},{"location":"essay/questionnaire-principal/#\u7f3a\u9ede_4","title":"\u7f3a\u9ede","text":"
  • \u5c0d\u7528\u6236\u5e72\u64fe\u7387\u9ad8
  • \u53ea\u80fd\u6975\u77ed\u554f\u5377
  • \u53ea\u80fd\u9472\u5d4c\u5728\u7db2\u9801\u800c\u975e APP
"},{"location":"essay/questionnaire-principal/#\u5728\u53f0\u7063\u975e\u4e3b\u6d41","title":"\u5728\u53f0\u7063\u975e\u4e3b\u6d41","text":"
  • Typeform
  • \u826f\u597d\u4f7f\u7528\u8005\u9ad4\u9a57
  • \u6709\u904e\u500b\u8cc7\u5916\u6d29\u7684\u7d93\u9a57
  • SurveyMonkey
  • \u50c5\u6b21\u65bc Google \u7684\u5927\u578b\u554f\u5377\u670d\u52d9
  • \u8a08\u7b97\u6a5f
  • Qualtrics
  • \u586b\u7b54\u9ad4\u9a57\u4f73
  • \u5f8c\u53f0\u50c5\u6709\u82f1\u6587
"},{"location":"essay/questionnaire-principal/#\u88fd\u4f5c\u6d41\u7a0b","title":"\u88fd\u4f5c\u6d41\u7a0b","text":""},{"location":"essay/questionnaire-principal/#\u8349\u7a3f\u5de5\u5177","title":"\u8349\u7a3f\u5de5\u5177","text":"

\u5229\u7528 spreadsheet\u3001excel \u7b49\u5de5\u5177\u505a\u8349\u7a3f\uff0c\u65b9\u4fbf\u8a18\u9304\u4fee\u6539\u904e\u7a0b\u548c\u505a\u7559\u8a00\u3002

"},{"location":"essay/questionnaire-principal/#\u8a18\u9304\u4fdd\u5b58","title":"\u8a18\u9304\u4fdd\u5b58","text":"

\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":"
  • \u4e0d\u50c5\u8981\u8ffd\u8e64\u554f\u5377\u767c\u9001\u6578\u91cf\uff0c\u4e5f\u8981\u770b\u8f49\u63db\u7387
  • \u907f\u514d\u53ef\u4ee5\u900f\u904e\u8cc7\u6599\u4ea4\u53c9\u6bd4\u5c0d\u51fa\u4e00\u500b\u4eba\uff0c\u4fdd\u8b77\u586b\u7b54\u8005\u7684\u96b1\u79c1
  • \u82e5\u586b\u7b54\u8005\u4e0d\u5e0c\u671b\u7559\u4e0b\u500b\u8cc7\uff0c\u8981\u53ef\u4ee5\u522a\u9664\u8a72\u7d00\u9304
"},{"location":"essay/questionnaire-principal/#\u4ea4\u53c9\u5206\u6790","title":"\u4ea4\u53c9\u5206\u6790","text":"
  • \u5169\u500b\u8b8a\u9805\u5f7c\u6b64\u4ea4\u53c9\uff0c\u89c0\u5bdf\u8da8\u52e2\u548c\u5dee\u7570
  • Excel \u7684 \u6a1e\u7d10\u5206\u6790
"},{"location":"essay/questionnaire-principal/#\u5831\u544a\u65b9\u5f0f","title":"\u5831\u544a\u65b9\u5f0f","text":"
  • \u7528\u6236\u6a23\u8c8c Profile
  • \u5713\u9905\u5716
  • \u9577\u689d\u5716
  • \u8981\u6ce8\u610f\u62bd\u6a23\u8aa4\u5dee
  • Margin of Error https://cyber-edge.com/determining-minimum-survey-sample-sizes-based-on-survey-margin-of-error/
"},{"location":"essay/architecture/made-container/","title":"\u5982\u4f55\u88fd\u4f5c Docker Container","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

  1. \u6e96\u5099\u597d\u61c9\u7528\u7a0b\u5f0f\u7684\u76f8\u4f9d\u5957\u4ef6
  2. \u6e96\u5099\u597d\u57f7\u884c\u61c9\u7528\u7a0b\u5f0f\u7684\u74b0\u5883
  3. \u57f7\u884c\u61c9\u7528\u7a0b\u5f0f
"},{"location":"essay/architecture/made-container/#\u6e96\u5099\u597d\u61c9\u7528\u7a0b\u5f0f\u7684\u76f8\u4f9d\u5957\u4ef6","title":"\u6e96\u5099\u597d\u61c9\u7528\u7a0b\u5f0f\u7684\u76f8\u4f9d\u5957\u4ef6","text":"

\u4ee5 Node.js \u70ba\u4f8b\uff0c\u5247\u662f npm i \u6216\u66f4\u7cbe\u7c21\u7684 npm ci --only=production\u3002 \u5176\u4ed6\u5982\uff1a

  • PHP \u7684 composer install --no-dev --optimize-autoloader
  • Python \u7684 pip install
  • Gradle \u7684 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

"},{"location":"essay/architecture/made-container/#\u7bc4\u4f8b","title":"\u7bc4\u4f8b","text":"

\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\u672c
  • v0.0.2 \u4ee3\u8868\u4fee\u6b63 server.js
  • v0.0.3 \u4ee3\u8868\u65b0\u589e\u5957\u4ef6
Layer Size v0.0.1 v0.0.2 v0.0.3 1: FROM node AS deps N/A 532fd65ecacd 532fd65ecacd 532fd65ecacd 2: WORKDIR /srv N/A bec6e0fc4a96 bec6e0fc4a96 bec6e0fc4a96 3: COPY package* N/A 58341ced6003 58341ced6003 959c7f2c693b 4: RUN npm ci N/A dd6cd3c5a283 dd6cd3c5a283 6e9065bacad0 5: FROM node:lts-slim AS release 5.6MB e7d92cdc71fe e7d92cdc71fe e7d92cdc71fe 6: COPY node_modules 67.8MB a86f6f94fc75 a86f6f94fc75 b97b002f4734 7: COPY . . 138kB cab24763e869 7f6f49f5bc16 f2c9ac237a1c 8: EXPOSE 0 0efe3d9cd543 4fc6b68804c9 f4b64a1c5e64 9: ENV HOST 0 9104495370ba df073bd1c682 fee5ff92855c 10: ENV PORT 0 04d6b8f0afce f67d0897cb11 638a7ff0c240 11: CMD 0 b3babfadde8e 9b6514336e72 12d0c7e37935 Cost per Deploy N/A 0 138kB 68MB"},{"location":"essay/architecture/pki-checklist/","title":"\u5efa\u7f6e PKI \u6ce8\u610f\u4e8b\u9805","text":"

\u672c\u8cc7\u6599\u4f86\u6e90\u65bc NIST 800-32 Ct.3

  • Certification Path Building
  • Key Rollover in the Resource Public Key Infrastructure
  • X.509

\u53ef\u80fd\u9700\u8981\u6e9d\u901a\u7684\u539f\u56e0\uff1a

  • \u521d\u59cb\u8a3b\u518a/\u8a8d\u8b49
  • \u91d1\u9470\u5c0d\u66f4\u65b0
  • \u6191\u8b49\u66f4\u65b0
"},{"location":"essay/architecture/pki-checklist/#nist","title":"NIST","text":""},{"location":"essay/architecture/pki-checklist/#\u540d\u8a5e\u4ecb\u7d39","title":"\u540d\u8a5e\u4ecb\u7d39","text":"
  • CA \u7c3d\u7f72\u7c3d\u8b49\u7d66 user\uff0c\u6b64\u6642 CA \u662f issuer\u3002
  • CA \u6703\u628a\u9a57\u8b49 user \u7684\u8cc7\u8a0a\u4e1f\u7d66 Registration Authority(RA)\uff0c\u4f8b\u5982\uff1aDNS
  • \u4f7f\u7528 CA \u7c3d\u51fa\u4f86\u7684\u7c3d\u8b49\uff0c\u4e26\u4ee5\u6b64\u4f86\u4fe1\u4efb user \u7684\u7b2c\u4e09\u65b9\u7a31\u70ba relying parties

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

  • user name
  • issuer name
  • public key
  • signature
  • validity (starting and expiring times)
  • cryptographic algorithm(s)
  • \u548c\u5176\u4ed6 Private \u7684 extension

\u9a57\u8b49\u904e\u7a0b

  • Cross certificates\uff0c\u5c31\u7b97\u662f root CA(trust anchors)\u4e5f\u53ef\u80fd\u6703\u9700\u8981\u5176\u4ed6\u540c\u6a23\u662f root CA \u7684\u7c3d\u8b49\u3002
  • certification path\uff0crelying party \u5f9e user \u5230 trust anchors \u7684\u9a57\u8b49\u6d41\u7a0b

\u9a57\u8b49\u904e\u7a0b\u4e2d\u7684\u6bcf\u4e00\u6bb5\u90fd\u9700\u8981\u78ba\u8a8d\uff08path validation\uff09\uff1a

  • \u7c3d\u8b49\u9a57\u8b49
  • \u7c3d\u8b49\u6c92\u88ab\u64a4\u92b7
  • \u88ab\u6b63\u78ba\u7684\u653f\u7b56 issue

\u7c3d\u8b49\u7684\u72c0\u614b\u5c55\u793a\uff08\u7c3d\u8b49\u6c92\u88ab\u64a4\u92b7\uff09\u65b9\u5f0f\u6709\u5169\u7a2e\uff1a

  • Online Certificate Status Protocol (OCSP)
  • certificate revocation list, or CRL

\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":"
  • [ ] \u78ba\u4fdd\u652f\u63f4\u4efb\u4e00\u5354\u5b9a\uff1a
  • Certificate Management Protocol (CMP) RFC 4210
  • Enrollment over Secure Transport (EST) RFC 7030
  • Certificate Management Using Cryptographic Message Syntax (CMC) RFC 5272
  • [ ] \u78ba\u4fdd\u53ef\u4ee5\u7522\u751f\u6191\u8b49\uff0c\u5176\u4e2d\u61c9\u542b\u6709\u7684\u8cc7\u8a0a\u65bc\u5f8c\u8a0e\u8ad6\u4e4b\u3002
  • [ ] \u53ef\u4ee5\u7522\u751f\u591a\u7d44\u6191\u8b49\uff0c\u4e14\u5141\u8a31\u7279\u5b9a\u91d1\u9470\u7a2e\u985e\u3002
  • [ ] \u5141\u8a31 CRL\u3002
  • [ ] \u5141\u8a31\u5916\u90e8\u9023\u7d50 CRL\uff0c\u4e14\u5fc5\u9808\u542b\u6709 HTTP URLS\u3002
  • [ ] \u61c9\u53ef\u4ee5\u900f\u904e LDPA \u53d6\u5f97 CRL\u3002
  • [ ] \u5141\u8a31 OCSP\u3002
  • [ ] \u6bcf\u7d44 PKI \u90fd\u6709\u5176\u6191\u8b49\u8cc7\u8a0a\uff0c\u4e14\u8cc7\u8a0a\u80fd\u88ab\u986f\u793a\u65bc\u5176\u7c3d\u7f72\u7684\u7c3d\u8b49 CRL\u3002
  • [ ] \u5141\u8a31\u8a2d\u5b9a\u5ba2\u5236\u76f8\u95dc\u8cc7\u8a0a\u65bc\u6191\u8b49\u4e2d\u3002
  • [ ] \u5141\u8a31\u4f7f\u7528 RSA \u548c ECDSA \u6f14\u7b97\u6cd5\u3002
  • [ ] \u53ef\u4ee5\u5099\u4efd\u4e26\u707d\u96e3\u5fa9\u539f\u3002
  • [ ] \u5141\u8a31\u6b0a\u9650\u5728\u5e33\u865f\u4e4b\u9593\u7684\u8f49\u79fb\u3002
"},{"location":"essay/architecture/pki-checklist/#ocsp-responders","title":"OCSP Responders","text":"
  • [ ] \u78ba\u4fdd OCSP responders \u7b26\u5408 RFC 6960 Online Certificate Status Protocol\u3002
  • [ ] \u78ba\u4fdd\u80fd\u8655\u7406\u6709\u7121\u7c3d\u7ae0\u548c\u540d\u7a31\u7684\u8acb\u6c42\uff0c\u5c31\u7b97\u662f\u62d2\u7d55\u4e5f\u9808\u56de\u61c9\u3002
  • [ ] \u56de\u61c9\u6642\u6c92\u6709\u4efb\u4f55\u65bc RFC 5019 \u4e2d\u63d0\u53ca\u7684\u932f\u8aa4
  • [ ] \u56de\u61c9\u6642\u7684\u7c3d\u7ae0\u5efa\u8b70\u7b26\u5408\u548c\u5176\u7522\u751f\u7684\u6191\u8b49\u7684\u6f14\u7b97\u6cd5\u76f8\u540c\uff0c\u91d1\u9470\u683c\u5f0f\u4e5f\u5efa\u8b70\u4e00\u6a23\u3002\u5141\u8a31\u4f7f\u7528 RSA \u548c ECDSA \u6f14\u7b97\u6cd5\u3002
"},{"location":"essay/architecture/pki-checklist/#\u52a0\u5bc6\u6a21\u7d44","title":"\u52a0\u5bc6\u6a21\u7d44","text":"
  • [ ] CAs\u3001Key Recovery Servers \u548c OCSP responders \u9ad8\u65bc FIPS 140-2 \u7b49\u7d1a 3\u3002
  • [ ] RAs \u9700\u9ad8\u65bc FIPS 140-2 \u7b49\u7d1a 2\u3002
  • [ ] \u78ba\u4fdd\u8acb\u6c42\u7c3d\u8b49\u7684\u55ae\u4f4d\u548c\u4f7f\u7528\u8005\u7684\u52a0\u5bc6\u6a21\u7d44\u9ad8\u65bc FIPS 140-2 \u7b49\u7d1a 1\u3002
"},{"location":"essay/architecture/pki-checklist/#key-recovery-servers","title":"Key Recovery Servers","text":"
  • [ ] \u5982\u679c PKI \u652f\u63f4\u91d1\u9470\u7522\u751f\uff0c\u5c31\u61c9\u652f\u63f4\u91d1\u9470\u6551\u63f4\u670d\u52d9\u3002
  • [ ] \u61c9\u652f\u63f4\u81ea\u52d5\u5316\u7684\u91d1\u9470\u6551\u63f4\u670d\u52d9\u3002
"},{"location":"essay/architecture/pki-checklist/#relying-party-software","title":"Relying Party Software","text":"
  • [ ] \u8def\u7a0b\u9a57\u8b49\uff08path validation\uff09
  • [ ] \u78ba\u4fdd\u7b26\u5408 RFC 5280 conformant path validation\u3002
  • [ ] \u5141\u8a31\u7d44\u7e54\u5916\u7684\u9a57\u8b49\uff08\u4f8b\u5982\u900f\u904e federal agency\uff09\u4e14\u9700\u7b26\u5408 NIST \u5efa\u8b70\u7684\u9a57\u8b49\u65b9\u5f0f\u3002
  • [ ] \u5141\u8a31\u6709 Bridge \u7684\u8def\u5f91\uff0c\u4e14\u9700\u7b26\u5408 NIST \u5efa\u8b70\u7684\u9a57\u8b49\u65b9\u5f0f\u3002
  • [ ] \u61c9\u8a72\u540c\u6642\u652f\u63f4 CRLs \u548c OCSP\u3002
  • \u9a57\u8b49\u6191\u8b49
  • [ ] \u78ba\u4fdd\u53ef\u4ee5\u5efa\u7acb\u9a57\u8b49\u7684\u8def\u5f91
  • [ ] \u81f3\u5c11\u8981\u80fd\u8655\u7406 HTTP-based \u7684\u56de\u61c9
  • [ ] \u61c9\u8981\u80fd\u8655\u7406 LDAP \u7684\u5354\u5b9a
  • [ ] \u4f5c\u7528\u65bc\u4f01\u696d\u7aef PKI \u7684 RP \u61c9\u80fd\u767c\u73fe\u8def\u5f91\u4e0a\u53d7 trust anchor CA \u8a8d\u8b49\u7684\u968e\u5c64\u5f0f CA\u3002
  • [ ] \u975e\u4f01\u696d\u7aef PKI \u7684 RP \u61c9\u80fd\u767c\u73fe\u8def\u5f91\u4e0a\u975e\u968e\u5c64\u5f0f\u7684 CA\u3002
"},{"location":"essay/architecture/pki-checklist/#client-software","title":"Client Software","text":"
  • [ ] \u5ba2\u6236\u7aef\u5141\u8a31\u591a\u500b\u516c\u79c1\u9470\u8acb\u6c42\u591a\u500b\u7c3d\u8b49
  • [ ] \u52a0\u5bc6\u6a21\u7d44\u9ad8\u65bc FIPS 140-2 \u7b49\u7d1a 1
  • [ ] \u5ba2\u6236\u61c9\u53ef\u4f7f\u7528 CA \u63d0\u4f9b\u7684 certificate management protocol
"},{"location":"essay/architecture/pki-checklist/#\u7d66-pki-\u7ba1\u7406\u8005\u7684\u5efa\u8b70","title":"\u7d66 PKI \u7ba1\u7406\u8005\u7684\u5efa\u8b70","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":"
  • [ ] \u78ba\u4fdd CAs \u8a2d\u5b9a\u597d\u53ef\u63a5\u53d7\u7684\u516c\u79c1\u9470\u6f14\u7b97\u6cd5\u548c\u91d1\u9470\u9577\u5ea6\uff0c\u9084\u6709\u9a57\u8b49 domain
  • [ ] \u70ba\u4e86\u6700\u5927\u5316\u6a19\u6e96\u6027\uff0c\u61c9\u4f7f\u7528 RSA \u53bb\u505a\u7c3d\u7ae0\u548c\u91d1\u9470\u8f49\u79fb
  • [ ] \u70ba\u4e86\u6700\u5927\u5316\u5b89\u5168\u6027\u548c\u6548\u7387\uff0c\u61c9\u4f7f\u7528 EC \u53bb\u505a\u7c3d\u7ae0\u548c\u91d1\u9470\u8f49\u79fb
  • [ ] \u7576\u7c3d\u767c\u7c3d\u8b49\u6216 CRLs \u6642\uff0c\u61c9\u7b26\u5408\u6f14\u7b97\u6cd5\u3001\u9577\u5ea6\u7684\u898f\u7bc4
  • [ ] \u5229\u7528 subject key \u7522\u751f signing key \u6642\uff0c\u7c3d\u8b49\u7684\u5b89\u5168\u6027\u61c9\u5927\u65bc subject key \u53bb\u7c3d\u8b49
  • \u7522\u751f\u91d1\u9470\u6642\uff1a
  • [ ] \u4f7f\u7528\u8005\u61c9\u7522\u751f\u5c6c\u65bc\u4ed6\u5011\u81ea\u5df1\u7684\u7c3d\u8b49\u91d1\u9470
  • [ ] \u82e5\u4e0a PKI \u900f\u904e\u91d1\u9470\u50b3\u9001\u65b9\u5f0f\u53bb\u50b3\u9001\u91d1\u9470\uff0c\u61c9\u63d0\u4f9b\u91d1\u9470\u5fa9\u539f\u670d\u52d9
  • [ ] CAs \u8981\u78ba\u4fdd\u91d1\u9470\u771f\u7684\u5c6c\u65bc\u4f7f\u7528\u8005\uff08PoP\uff09
  • [ ] \u61c9\u5728\u7c3d\u8b49\u524d\u5148\u9a57\u8b49\u91d1\u9470
  • Key usage extension
  • [ ] \u7c3d\u8b49\u61c9\u5305\u542b key-ussage extension
  • [ ] key-ussage extension \u61c9\u9650\u5236\u4e00\u7a2e\u7372\u53d6\u65b9\u5f0f\uff0c\u4f7f\u7528\u8005\u81ea\u5df1\u7522\u751f\u6216 PKI \u7522\u751f
  • [ ] \u6240\u6709\u7c3d\u8b49\u61c9\u5305\u542b CRLs \u7684\u4f4d\u7f6e\u8cc7\u8a0a
  • [ ] \u82e5\u63d0\u4f9b OCSP responder\uff0c\u61c9\u63d0\u4f9b\u4f4d\u7f6e\u8cc7\u8a0a\u65bc\u7c3d\u8b49\u4e2d
  • [ ] \u5728\u904e\u671f\u524d\u61c9\u91cd\u65b0\u7c3d\u7f72\u5b8c\u6210\uff0c\u4e26\u4e14\u6b63\u78ba\u66f4\u65b0\u6191\u8b49\u8cc7\u8a0a\uff0c\u5982 domain \u6216\u4fe1\u7bb1
"},{"location":"essay/architecture/pki-checklist/#certificate-revocation-requests","title":"Certificate Revocation Requests","text":"
  • [ ] \u61c9\u63d0\u4f9b\u81ea\u52d5\u64a4\u92b7\u6a5f\u5236\uff1a
  • [ ] CAs \u61c9\u5728\u64a4\u92b7\u6642\u9032\u884c\u8eab\u4efd\u9a57\u8b49
  • [ ] \u4f7f\u7528\u8005\u63d0\u4f9b\u8eab\u4efd\u8b49\u660e\u4e26\u8981\u6c42\u64a4\u92b7\u6642\uff0c\u61c9\u5728\u4e0d\u9700\u4eba\u529b\u4ecb\u5165\u4e0b\u57f7\u884c\u3002
  • [ ] RAs \u61c9\u80fd\u5728\u8a2d\u5b9a\u5f8c\uff0c\u4ee3\u8868\u4f7f\u7528\u8005\u6216\u516c\u53f8\u8acb\u6c42\u7c3d\u8b49\u64a4\u92b7
"},{"location":"essay/architecture/pki-checklist/#certificate-revocation-list-generation","title":"Certificate Revocation List Generation","text":"
  • [ ] \u70ba\u4e86\u6700\u5927\u6a19\u6e96\u5316\uff0cCAs \u61c9\u63d0\u4f9b\u5b8c\u6574\u7684\u64a4\u92b7\u7c3d\u8b49\u65bc CRL \u4e2d
  • [ ] \u82e5\u6709\u5927\u91cf\u7684\u64a4\u92b7\u7c3d\u8b49\uff0c\u53ef\u4ee5\u7522\u751f\u90e8\u5206\u7684 CRL\uff0c\u4f46\u9808\u984d\u5916\u63d0\u4f9b\u5b8c\u6574\u7684 CRL \u4f4d\u7f6e\u8cc7\u8a0a\u3002\u4e00\u4efd CRL \u4e0d\u61c9\u8d85\u904e 250,000 \u7684\u64a4\u92b7\u7c3d\u8b49\u3002
"},{"location":"essay/architecture/pki-checklist/#pki-repositories-for-the-distribution-of-certificates-and-crls","title":"PKI Repositories for the Distribution of Certificates and CRLs","text":"
  • [ ] PKIs \u61c9\u80fd\u516c\u958b\u63d0\u4f9b\u7c3d\u8b49\u548c CRL
  • [ ] PKI \u5eab\u61c9\u80fd\u63d0\u4f9b\u8eab\u4efd\u9a57\u8b49\u5f8c\u7684\u7c3d\u8b49\u4f4d\u7f6e\u4fee\u6539\u548c PKI \u5eab\u7684 CRL \u5206\u4f48
  • [ ] PKI \u5eab\u61c9\u81f3\u5c11\u5141\u8a31 HTTP 1.1 \u6216 LDAP version 3
  • [ ] \u70ba\u4e86\u6700\u5927\u6a19\u6e96\u5316\uff0c HTTP \u548c LDAP \u90fd\u61c9\u88ab\u7b26\u5408
  • [ ] HA \u61c9\u88ab\u8003\u616e
  • [ ] PKI \u5eab\u61c9\u5305\u542b\u6240\u6709\u5176\u64c1\u6709\u7684 PKI \u7684\u6240\u6709\u7c3d\u8b49
  • [ ] PKI \u5eab\u61c9\u5305\u542b\u6240\u6709\u5176\u64c1\u6709\u7684 PKI \u7684 CRL
"},{"location":"essay/architecture/pki-checklist/#ocsp-responders_1","title":"OCSP Responders","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

  • \u70ba\u4e86\u6700\u5927\u6a19\u6e96\u5316\uff1a
  • [ ] OCSP responders \u4e0d\u61c9\u8981\u6c42\u8acb\u6c42\u8981\u6709\u7c3d\u540d\uff0c\u4e14\u4e0d\u80fd\u9650\u5236\u54ea\u4e9b\u7c3d\u8b49\u72c0\u614b\u662f\u53ef\u4ee5\u88ab\u5141\u8a31\u7684
  • [ ] \u61c9\u80fd\u56de\u61c9\u57fa\u672c\u7684\u8cc7\u8a0a\uff0c\u4e14\u4e0d\u80fd\u542b\u6709\u5371\u96aa\u7684 extensions
  • \u82e5\u50c5\u9700\u7b26\u5408\u5167\u90e8\u793e\u7fa4\u800c\u975e\u6a19\u6e96\u5316\uff1a
  • [ ] OCSP responders \u53ef\u8981\u6c42\u8acb\u6c42\u8981\u6709\u7c3d\u540d\uff0c\u4e14\u53ef\u62d2\u7d55\u5916\u90e8\u7684\u8acb\u6c42
  • [ ] OCSP \u7684\u56de\u61c9\u8a0a\u606f\u53ef\u80fd\u542b\u6709\u7279\u6b8a\u7684 extensions
"},{"location":"essay/architecture/pki-checklist/#backup-and-archive","title":"Backup and Archive","text":"
  • [ ] \u61c9\u8a72\u5099\u4efd\u8cc7\u6599\uff0c\u4e26\u7576\u707d\u96e3\u767c\u751f\u5f8c\u80fd\u91cd\u65b0\u555f\u7528
  • [ ] CAs \u61c9\u7d00\u9304\u4f55\u6642\u548c\u4f55\u4eba\u7533\u8acb\u7684\u7c3d\u8b49
  • [ ] \u61c9\u6709 log \u7d00\u9304\u6240\u6709\u7c3d\u8b49\u548c CRL
  • [ ] \u7533\u8acb\u4eba\u7684\u516c\u9470\u61c9\u548c\u5176\u7c3d\u8b49\u4e00\u8d77\u88ab\u4fdd\u5b58
"},{"location":"essay/architecture/pki-checklist/#relying-party-integration-and-configuration","title":"Relying Party Integration and Configuration","text":"
  • [ ] \u61c9\u53ef\u4ee5\u767c\u73fe\u8def\u5f91\u548c\u7372\u5f97\u72c0\u614b\u8cc7\u8a0a
  • [ ] \u61c9\u8981\u53ef\u4ee5\u652f\u63f4 CRL \u548c OCSP \u7684\u683c\u5f0f
  • [ ] \u61c9\u80fd\u5206\u8fa8\u6700\u5c0f\u55ae\u4f4d\u7684 trust anchors
  • [ ] \u7576\u60c5\u5883\u8655\u65bc\u300c\u516c\u53f8\u5c0d\u653f\u5e9c\u300d\u6216\u300c\u653f\u5e9c\u5c0d\u653f\u5e9c\u300d\uff0c\u61c9\u4f7f\u7528 Common Policy Root CA \u6216\u548c Common Policy Root CA \u4e92\u76f8\u8a8d\u8b49\u7684 CA \u6216\u4ee5 Federal Bridge \u70ba trust anchor \u7684 CA
  • [ ] \u7576\u60c5\u5883\u5c6c\u65bc\u300c\u4f7f\u7528\u8005\u5c0d\u653f\u5e9c\u300d\uff0c\u61c9\u7528\u7a0b\u5f0f\u7684\u5b89\u5168\u6027\u7121\u6cd5\u505a\u5230\u9ad8\u5ea6\u9650\u5236\uff0c\u70ba\u4e86\u9054\u6210\u9ad8\u6a19\u6e96\u6027\uff0c\u4f7f\u7528\u8005\u53ef\u80fd\u6703\u4f7f\u7528\u7684\u9810\u5148\u5b89\u88dd\u81f3 COTS products \u7684 trust anchors
  • \u8def\u5f91\u9a57\u8b49\uff1a
  • [ ] \u5c0d\u548c\u4f7f\u7528\u8005\u61c9\u7528\u7a0b\u5f0f\u5c0d\u63a5\u7684\u9023\u7dda\uff0c\u8def\u5f91\u9a57\u8b49\u61c9\u88ab\u8a2d\u5b9a\u6210\u53ef\u63a5\u53d7\u6240\u6709\u5408\u6cd5\u8def\u5f91
  • [ ] \u5c0d\u9700\u8981\u9ad8\u5ea6\u5b89\u5168\u6027\u7684\u7cfb\u7d71\uff0c\u61c9\u88ab\u8a2d\u5b9a\u6210\u50c5\u63a5\u53d7\u7279\u5b9a\u9069\u7576\u7684\u653f\u7b56\u7684\u8def\u5f91
"},{"location":"essay/architecture/pki-checklist/#user-guidance-subscribers","title":"User Guidance (Subscribers)","text":"

\u5c0d\u65bc\u548c PKI \u7533\u8acb\u6b0a\u8b49\u7684\u4f7f\u7528\u8005\uff1a

  • [ ] \u4f7f\u7528\u8005\u61c9\u7522\u751f\u5c6c\u65bc\u81ea\u5df1\u7684\u91d1\u9470\uff0c\u7528\u4f5c\u7c3d\u8b49\u548c\u8eab\u4efd\u8b49\u660e
  • [ ] \u4f7f\u7528\u8005\u53ef\u80fd\u81ea\u5df1\u7522\u751f\u91d1\u9470\uff0c\u6216\u5f9e\u53ef\u4fe1\u4efb\u7684\u8cc7\u6e90\u53d6\u5f97\u91d1\u9470
  • [ ] \u4f7f\u7528\u8005\u61c9\u5305\u7ba1\u597d\u79c1\u9470\uff0c\u5305\u62ec\u52a0\u5bc6\u79c1\u9470\u7684 PIN \u78bc\u6216\u5bc6\u78bc
  • [ ] \u4f7f\u7528\u8005\u61c9\u8acb\u6c42\u64a4\u92b7\uff0c\u7576\u4ed6\u89ba\u5f97\u8a72\u6a21\u7d44\u88ab\u5077\u3001\u8907\u88fd\u6216\u7834\u58de
  • \u4f7f\u7528\u8005\u61c9\u7ba1\u7406\u820a\u7684\u91d1\u9470\uff0c\u9664\u975e\u7ba1\u7406\u55ae\u4f4d\u6709\u53e6\u5916\u653f\u7b56\u8aaa\u660e\uff1a
  • [ ] \u7576\u7c3d\u8b49\u904e\u671f\u5c31\u61c9\u628a\u79c1\u9470\u4e1f\u68c4
  • [ ] 2. \u7528\u4f86\u7522\u751f\u7c3d\u7ae0\u7684\u79c1\u9470\uff0c\u61c9\u7b49\u5230\u5176\u7522\u751f\u7684\u79c1\u9470\u90fd\u88ab\u91cd\u65b0\u52a0\u5bc6\u6216\u6368\u68c4\u5f8c\u624d\u80fd\u4e1f\u68c4
"},{"location":"essay/architecture/replace-docker-desktop/","title":"\u53d6\u4ee3 Docker Desktop","text":"

Docker Desktop \u5728\u7279\u5b9a\u689d\u4ef6\u4e0b\u8981\u9322\u4e86\uff0c\u8a72\u7528\u4ec0\u9ebc\u53d6\u4ee3\uff1f

\u73fe\u6709\u5de5\u5177\uff1a

  • lima\uff0c\u5efa\u7f6e VM \u5728 macOS \u4e0a\uff0c\u4e26\u63d0\u4f9b runC \u7684\u4ecb\u9762\u3002
  • nerdctl\uff0c\u5728 lima \u4e4b\u4e0a\u5efa\u7f6e containerd\u3002
  • colima\uff0c\u628a\u4e0a\u8ff0\u5169\u8005\u6574\u5408\u8d77\u4f86\uff08\u9810\u8a2d\u4f7f\u7528 docker\uff0c\u4f60\u53ef\u4ee5\u900f\u904e colima start --runtime containerd \u4f86\u8abf\u6574\uff09\uff0c\u8b93\u4f60\u53ef\u4ee5\u5feb\u901f\u5efa\u7f6e\u74b0\u5883\u3002
  • finch\uff0c\u628a\u4e0a\u8ff0\u5169\u8005\uff08lima, nerdctl\uff09\u6574\u5408\u8d77\u4f86\u4e26\u63d0\u4f9b\u6307\u4ee4\u4ecb\u9762
  • podman\uff0cAll-in-one\u3002

\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":"
  1. \u9ede\u9078\u53f3\u4e0a\u89d2\u87f2\u87f2\u5716\u6848
  2. \u6700\u4e0b\u9762\u7684 Uninstall
"},{"location":"essay/architecture/replace-docker-desktop/#\u91cd\u65b0\u5b89\u88dd-docker","title":"\u91cd\u65b0\u5b89\u88dd Docker","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":"
  • Vagrant
  • VirtualBox
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

"},{"location":"essay/architecture/tcp-socket-loss-after-dhcp/#\u884c\u70ba\u8868\u73fe","title":"\u884c\u70ba\u8868\u73fe","text":"

\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

"},{"location":"essay/architecture/tcp-socket-loss-after-dhcp/#smoking-gun-1---system-network","title":"Smoking gun 1 - system-network","text":"

\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 ss

ss \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 ethtool

ss \u662f\u900f\u904e socket_diag \u53bb\u53d6\u5f97 OS's kernel \u7684\u9023\u7dda\u8cc7\u8a0a\uff0c\u5305\u62ec\uff1a

  • socket
  • routing table
  • connection tracking

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

  • pre-routing\uff0c\u7d00\u9304\uff08conntrack\uff09\u3001\u4fee\u6b63\uff08mangle\uff09\u3001\u8f49\u5740\u5c0d\u61c9\uff08NAT\uff09
  • routing decision\uff0c\u5224\u65b7\u662f\u5426\u9001\u7d66 user-space
  • input\uff0c\u4fee\u6b63\uff08mangle\uff09\u3001\u7be9\u9078\uff08filter\uff09

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

  • \u5b8c\u6574\u6536\u5230\u4e0a\u4e00\u500b\u8cc7\u6599\u7684\u300c\u78ba\u8a8d\u901a\u77e5\u300d\uff1f
  • Keep-Alive \u901a\u77e5\uff1f
  • \u4e09\u6b21\u4ea4\u63e1\u5b8c\u6210\u901a\u77e5\uff1f
  • \u56db\u6b21\u63ee\u624b\u7684\u968e\u6bb5\u6216\u5b8c\u6210\u901a\u77e5\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

TCP ACK Scan

\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

  • \u5354\u5b9a\u7a2e\u985e
  • source IP, port
  • destination IP, port
  • connection state
$ 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

  • conntrack \u6536\u5230\u4e00\u500b UDP \u5c01\u5305\uff1b
  • \u5354\u5b9a\u7de8\u865f 17\uff1b
  • 29 \u79d2\u5f8c\u9019\u500b\u8cc7\u6599\u5c07\u6703\u88ab\u6e05\u9664\uff0c\u6839\u64da\u5354\u5b9a\u7684\u4e0d\u540c\uff0c\u9054\u5230\u7279\u5b9a\u72c0\u614b\u5f8c\u9019\u500b\u503c\u5c07\u6703\u88ab\u91cd\u7f6e\uff1b
  • 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
  • IP \u548c Port
  • mark\uff0c\u6839\u64da\u5546\u52d9\u908f\u8f2f\u6a19\u8a18\u9019\u500b\u9023\u7dda\uff0c\u4f8b\u5982 iptables \u7684\u963b\u64cb\u7b49\u7b49\uff1b
  • use \u662f counter \u7528\u4f86\u8a18\u9304 GC \u72c0\u614b\u3002

\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\u6e90

conntrack \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

  1. Connection tracking (conntrack) - Part 1: Modules and Hooks
  2. Connection tracking (conntrack) - Part 2: Core Implementation
  3. Connection tracking (conntrack) - Part 3: State and Examples

Fedora Magazine \u95dc\u65bc conntrack \u7684\u4ecb\u7d39\uff1a

  1. Network address translation part 1 \u2013 packet tracing
  2. Network address translation part 2 \u2013 the conntrack tool
  3. Network address translation part 3 \u2013 the conntrack event framework
  4. Network address translation part 4 \u2013 Conntrack troubleshooting
"},{"location":"essay/architecture/tcp-socket-loss-after-dhcp/#\u9023\u7dda\u8868\u88ab\u585e\u6eff\u6703\u767c\u751f\u4ec0\u9ebc\u4e8b","title":"\u9023\u7dda\u8868\u88ab\u585e\u6eff\u6703\u767c\u751f\u4ec0\u9ebc\u4e8b","text":"

\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

"},{"location":"essay/architecture/tcp-socket-loss-after-dhcp/#\u9023\u7dda\u8868\u88ab\u91cd\u7f6e\u5f8c\u6703\u767c\u751f\u4ec0\u9ebc\u4e8b","title":"\u9023\u7dda\u8868\u88ab\u91cd\u7f6e\u5f8c\u6703\u767c\u751f\u4ec0\u9ebc\u4e8b","text":"

\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

  • systemd-networkd removes IPv4 address during DHCP renewal
  • DHCP Renew Causing Interface To Restart

\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

  • \u5728 Client\u3001Server\uff08Redis\uff09\u3001Firewall \u4e09\u7aef\u57f7\u884c TCP Dump\uff0c\u770b\u5230\u9023\u7dda\u88ab\u6b63\u5e38\u5efa\u7acb\u3002
  • Server \u9810\u8a2d\u6703\u6bcf\u4e94\u5206\u9418\u505a\u4e00\u6b21 TCP Keep-Alive\uff0c\u7576\u5b83\u9001\u51fa Keep-Alive ACK \u5c01\u5305\uff1a
  • Firewall \u6709\u770b\u5230 ACK \u5c01\u5305\uff1b
  • Client \u6709\u770b\u5230 ACK \u5c01\u5305\uff0c\u4e26\u4e14\u63a5\u8457\u56de\u61c9 RST \u5c01\u5305\uff1b
  • Firewall\u3001Server \u90fd\u6536\u5230 RST\uff0c\u4e26\u4e14\u91cb\u653e\u76f8\u95dc\u8cc7\u6e90\u3002
  • \u6b64\u6642\u900f\u904e netstat \u5728 Client \u4e0a\u5f97\u77e5\u5c0d\u61c9\u7528\u7a0b\u5f0f\u4f86\u8aaa\uff0c\u9023\u7dda\u4ecd\u7136\u5b58\u5728\uff1b
  • \u61f7\u7591 TCP Keep-Alive \u7684\u67d0\u7a2e\u5c01\u5305\u932f\u8aa4\uff0c\u4e26\u5617\u8a66\u628a\u983b\u7387\u5f9e 5 \u5206\u9418\u964d\u5230 30 \u5206\u9418\uff1b
  • \u6aa2\u67e5\u5c01\u5305\u5176\u4e2d\u7684\u683c\u5f0f\u548c\u5404\u500b\u8a2d\u5b9a\uff1b
  • \u61f7\u7591 Linux \u5e95\u5c64\u5be6\u4f5c\uff0c\u7db2\u8def\u4e0a\u67e5\u5404\u7a2e\u53ef\u80fd\uff1b
  • \u6700\u7d42\u63a8\u6e2c conntrack \u7684\u8868\u91cd\u7f6e\uff0c\u4e26\u900f\u904e syslog \u5f97\u5230 DHCP \u7684\u8aaa\u660e\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":"
  • Apache HTTP Server
  • Microsoft IIS
  • iPlanet Web Server

\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

  • mod_jk
  • ISAPI redirector
  • NSAPI redirector

\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

  • Jetty
  • JBoss
  • ...

\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

"},{"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":"
  1. Compression: proxy > app.use(compression())
  2. Asynchronous (async.) >> Synchronous (sync.)
    • The only reason to use sync. function is the time to start up server.
    • \u552f\u4e00\u6709\u7406\u7531\u4f7f\u7528\u540c\u6b65\u51fd\u6578\u7684\u6642\u6a5f\u662f\u5728\u6700\u521d\u555f\u52d5\u4e4b\u6642
  3. Static files: proxy > serve-static > res.sendFile()
  4. Console is sync! Always use async or use sync only in development.
    • Debugging: debug >> console
    • Application: Winston / Bunyan >> console
  5. Handle Error ( Important!, Detailed in next section )
    • Try-catch
    • Promise
"},{"location":"essay/code/node.js-best-practice/#handle-error","title":"Handle Error","text":"
  1. Try-catch is synchronous.
  2. Express catch all sync. error in default (v.5 catch Promise as well)
"},{"location":"essay/code/node.js-best-practice/#what-will-log","title":"What will log?","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":"
  1. callback invoked some time later after method (do another thing).
  2. happened exception! wait to finish other synchronous processes (do second thing).
  3. finish try-catch block.
  4. final run (finish project!).
  5. Fire the asynchronous exception!
"},{"location":"essay/code/node.js-best-practice/#category","title":"Category","text":"
  1. Operational Errors
    • The errors you are/can except.
    • Log, Show, Retry/Abort.
  2. Programmer Errors
    • The best way to recover from programmer errors is to crash immediately
    • Try debug your program rather than handle it.
"},{"location":"essay/code/node.js-best-practice/#do-in-configuration","title":"Do In Configuration","text":"
  1. env.NODE_ENV='production';
  2. Rebuild after error, use helpers or init system 1 2
  3. Multi-threads 3 4
  4. Caching 5 6
  5. Reverse-Proxy 7 8
  1. https://wiki.debian.org/systemd/ \u21a9

  2. http://upstart.ubuntu.com/ \u21a9

  3. https://nodejs.org/docs/latest/api/cluster.html \u21a9

  4. https://docs.strongloop.com/display/SLC/Clustering \u21a9

  5. Varnish https://www.varnish-cache.org/ \u21a9

  6. Nginx https://serversforhackers.com/nginx-caching/ \u21a9

  7. Nginx https://serversforhackers.com/nginx-caching/ \u21a9

  8. HAProxy http://www.haproxy.org/ \u21a9

"},{"location":"essay/code/node.js-error/","title":"Node.js \u7684\u932f\u8aa4\u6709\u54ea\u4e9b","text":""},{"location":"essay/code/node.js-error/#network","title":"Network","text":"Error Context Ambiguous Meaning EACCES Server N/A Cannot listen on port due to permissions EADDRINUSE Server N/A Cannot listen on port since another process has it ECONNREFUSED Client No Client unable to connect to server ENOTFOUND Client No DNS lookup for the server failed ECONNRESET Client Yes Server closed connection with client EPIPE Client Yes Connection to server has closed ETIMEDOUT Client Yes Server didn\u2019t respond in time"},{"location":"essay/code/node.js-error/#process","title":"Process","text":"
  • 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.
"},{"location":"essay/code/node.js-error/#file-system","title":"File System","text":"
  • 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.
"},{"location":"essay/code/object-oriented-terms/","title":"\u7269\u4ef6\u5c0e\u5411\u540d\u8a5e","text":"

\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

  • new\uff08construct\uff09\uff0c\u5efa\u69cb\uff0c\u5efa\u69cb\u51fa\u4f86\u7684\u6703\u7a31\u70ba\u4e00\u500b\u5be6\u4f8b\uff08instance\uff09\u6216\u7269\u4ef6\uff08object\uff09
  • attribute\uff08property\uff09\uff0c\u5c6c\u6027\uff0c\u5be6\u4f8b\u5c08\u5c6c\u7684\u503c
  • method\uff08function\uff09\uff0c\u51fd\u5f0f\uff0c\u5be6\u4f8b\u5c08\u5c6c\u7684\u51fd\u5f0f
  • public\uff0c\u516c\u958b\uff0c\u5916\u90e8\u64cd\u4f5c\u5be6\u4f8b\u53ef\u4ee5\u7528\u7684\u51fd\u5f0f\uff0c\u4e5f\u53ef\u4ee5\u5728\u985e\u5225\u5167\u90e8\u4f7f\u7528
  • private\uff0c\u79c1\u6709\uff0c\u53ea\u6709\u985e\u5225\u5167\u90e8\u53ef\u4ee5\u4f7f\u7528
"},{"location":"essay/code/object-oriented-terms/#\u62bd\u8c61\u985e\u5225","title":"\u62bd\u8c61\u985e\u5225","text":"

\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

  • extends\uff08inherit\uff09\uff0c\u7e7c\u627f\uff0cPoodle \u6216 Bulldog \u90fd\u53bb\u7e7c\u627f\u62bd\u8c61\u985e\u5225 Dog
  • protected\uff0c\u4fdd\u8b77\uff0c\u9664\u4e86\u985e\u5225\u5167\u90e8\u4f7f\u7528\uff0c\u7e7c\u627f\u5f8c\u7684\u985e\u5225\uff0c\u4e5f\u53ef\u4ee5\u4f7f\u7528\u9019\u500b\u7a2e\u985e\u7684\u5c6c\u6027\u6216\u51fd\u5f0f
  • abstract\uff0c\u62bd\u8c61\uff0c\u628a\u985e\u5225\u3001\u51fd\u5f0f\u6216\u5c6c\u6027\u62bd\u8c61\uff0c\u7e7c\u627f\u7684\u985e\u5225\u5fc5\u9808\u53bb\u5be6\u4f5c\uff08implement\uff09\u4ed6

\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
  • interface\uff0c\u4ecb\u9762\uff0c\u4e00\u7a2e\u5951\u7d04\uff0c\u6703\u8981\u6c42\u5be6\u4f5c\uff08implements\uff09\u5b83\u7684\uff08\u62bd\u8c61\uff09\u985e\u5225\u53bb\u5be6\u4f5c\u67d0\u4e9b\u51fd\u5f0f\u6216\u5c6c\u6027\uff0c\u53ea\u9700\u5b9a\u7fa9\u516c\u958b\u51fd\u5f0f\u6216\u5c6c\u6027

\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":"
  • \u5efa\u69cb\uff08construct, new\uff09\u548c \u5be6\u4f5c\uff08implements\uff09\u7684\u5dee\u5225
  • \u79c1\u6709\uff08private\uff09\u3001\u4fdd\u8b77\uff08protected\uff09\u3001\u516c\u958b\uff08public\uff09 \u7684\u5dee\u5225
  • \u4ecb\u9762\uff08interface\uff09 \u548c \u62bd\u8c61\u985e\u5225\uff08abstract class\uff09 \u7684\u5dee\u5225
\u7a2e\u985e \u5efa\u69cb \u5be6\u4f5c \u62bd\u8c61\u7a0b\u5ea6 class O O \u4f4e abstract class X O \u4e2d interface X X \u9ad8

\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

  • \u6211\u5728\u5403\u98ef
  • \u6211\u5728\u7528\u9280\u8272\u6e6f\u5319\u88dd\u8457\u7d04\u4e09\u514b\u3001\u516d\u5341\u9846\u7684\u7c73\u98ef\uff0c\u4e26\u7528\u53f3\u624b\u6293\u8457\u6e6f\u5319\uff0c\u6b63\u6e96\u5099\u9001\u9032\u5634\u5df4\u4e26\u5480\u56bc\uff08\u7136\u5f8c\u4f60\u5c31\u5931\u53bb\u4f60\u552f\u4e00\u7684\u670b\u53cb\u4e86\uff09

\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

  • \u8f15\u6613\u78ba\u8a8d\u9019\u662f\u6b63\u78ba\u7684\u65e5\u8a8c\u3002\u900f\u904e\u6bd4\u5c0d STH (signed tree head)
  • \u8f15\u6613\u67e5\u627e\u7279\u5b9a\u6191\u8b49\u662f\u5426\u5b58\u5728\u3002\u900f\u904e Markle tree \u7684\u7279\u6027
  • \u82e5\u8a72\u65e5\u8a8c\u56e0\u4efb\u4f55\u539f\u56e0\u51fa\u932f\uff08\u7a0b\u5f0f\u78bc\u6709 bug\u3001\u932f\u8aa4\u8a2d\u5b9a\u3001\u4efb\u4f55\u908a\u969b\u60c5\u6cc1\u7b49\u7b49\uff09\u8981\u80fd\u8f15\u6613\u767c\u73fe\u8a72\u932f\u3002\u6aa2\u67e5 STH
  • \u4e0d\u5f71\u97ff\u73fe\u6709\u7c3d\u767c\u7c3d\u8b49\u7684\u6f5b\u6642\uff0c\u5728\u7c3d\u8b49\u4e0a\u6dfb\u52a0\u64f4\u5145\uff08X.509v3 extension\uff09
  • SCT (Signed Certificate Timestamp)\u7528\u505a\u78ba\u4fdd\u5df2\u9032\u55ae\u4e00\uff08instantly\uff09\u65e5\u8a8c\u4e2d
  • MMD (Maximum Merge Delay)\u6a19\u660e\u5728\u6642\u9650\u5167\u8a72\u7c3d\u8b49\u53ef\u80fd\u4e0d\u6703\u5728\u5404\u500b\u65e5\u8a8c\u4e2d\u9054\u6210\u4e00\u81f4\u6027
  • \u6bcf\u500b\u7c3d\u8b49\u9700\u8981\u5169\u500b\u4ee5\u4e0a\u7684 SCT\uff0c\u7c3d\u8b49\u6548\u671f\u8d8a\u9577\u9700\u8981\u8d8a\u591a\uff0c\u4f46\u4e0d\u80fd\u592a\u591a\u5426\u5247\u6703\u589e\u52a0\u7c3d\u767c\u6642\u7684\u6f5b\u6642\u548c TLS \u4ea4\u63e1\u7684\u5927\u5c0f
  • MMD \u70ba 24 \u5c0f\u6642\u3002\u8d8a\u4f4e\u8d8a\u5b89\u5168\uff0c\u53cd\u4e4b\u5247\u80fd\u9054\u5230\u8f03\u5f37\u7684\u5bb9\u932f\u6548\u679c
  • \u53ea\u627f\u8a8d CA \u7c3d\u767c\u7684\u7c3d\u8b49\u907f\u514d\u7d00\u9304\u65e5\u8a8c\u592a\u591a

\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":"
  • RFC\ud83d\ude06
  • CT \u4f5c\u8005\u91dd\u5c0d\u8a72\u6280\u8853\u7684\u8aaa\u660e\uff0c\u7b97\u662f\u7b2c\u4e00\u7bc7\u5b8c\u6574\u8aaa\u660e
  • CT \u5b98\u7db2\u5716\u756b\u5f0f\u8aaa\u660e\uff0c\u5f9e\u57fa\u790e\u958b\u59cb\u4e86\u89e3
  • Markle Town \u662f CloudFlare \u91dd\u5c0d CT \u5f97\u5230\u7684\u7c3d\u8b49\u8cc7\u6599\u5f8c\u505a\u7d71\u8a08
  • \u5168\u4e16\u754c\u6700\u5927\u7684 CA \u2014 Let's Encrypt \u8aaa\u660e\u5982\u4f55\u5be6\u4f5c CT Logs
  • Google \u958b\u767c\u51fa\u7528\u4f86\u5728 SQL \u4e4b\u4e0a\u5efa\u7acb Markle Tree \u7d50\u69cb\u7684\u4ee3\u7406
  • MDN \u91dd\u5c0d\u700f\u89bd\u5668\u652f\u63f4\u7a0b\u5ea6\u505a\u7684\u8aaa\u660e
  • \u958b\u653e\u5927\u5bb6\u900f\u904e CT \u641c\u5c0b\u7c3d\u8b49\u7684 UI
  • Google \u5de5\u7a0b\u5e2b\u62b1\u6028 OCSP \u7684\u7121\u7528\uff0c\u4e26\u8aaa\u660e\u66ff\u4ee3\u65b9\u6848
  1. \u5efa\u8b70\u4e0d\u8981\u4f7f\u7528 OCSP\uff0c\u53ef\u4ee5\u770b Referrer \u4e2d\u7684\u9023\u7d50\u3002\u00a0\u21a9

"},{"location":"essay/web/http/","title":"HTTP","text":"

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\uff08\u6216\u56de\u61c9\uff09\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 \u53bb\u505a\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\u3002

"},{"location":"essay/web/http/#\u53c3\u6578\u8a2d\u5b9a","title":"\u53c3\u6578\u8a2d\u5b9a","text":"

\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\u5927\u5c0f\u5beb\u6709\u5dee\uff0c\u884c\u9996\u5230\u5192\u865f\u4e4b\u524d\u70ba\u9375\uff08key\uff09\uff0c\u4e0d\u53ef\u4ee5\u6709\u7a7a\u683c\uff1b \u5192\u865f\u5f8c\u70ba\u503c\uff08value\uff09\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/#\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

"},{"location":"essay/web/http/#\u975c\u614b\u7db2\u7ad9\u8981\u6ce8\u610f\u7684\u6a19\u982d","title":"\u975c\u614b\u7db2\u7ad9\u8981\u6ce8\u610f\u7684\u6a19\u982d","text":""},{"location":"essay/web/http/#cache-control","title":"Cache-Control","text":"

\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/#\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\u6bcf\u5929\u6703\u9700\u8981\u8655\u7406 10Gbps \u500b\u983b\u5bec\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 OCI \u5206\u5c64\u3002 \u7576 Maglevs \u524d\u9762\u7684 \u8def\u7531\u5668\uff08router\uff09\u6536\u5230\u5c01\u5305\u7684\u6642\u5019\uff0c\u6703\u900f\u904e ECMP \u6c7a\u5b9a\u5206\u6d3e\u8a72\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

  • \u5ba2\u6236\u7aef\u555f\u52d5\u6d41\u91cf\uff1a\u5ba2\u6236\u7aef C \u5411\u4f3a\u670d\u5668 S1 \u767c\u9001\u5c01\u5305\u3002
  • \u5c01\u5305\u5230\u9054\u8def\u7531\u5668\uff1a\u5c01\u5305\u5230\u9054\u8def\u7531\u5668 R\u3002
  • ECMP \u9078\u64c7\uff1a\u7531\u65bc\u6709\u5169\u500b\u7b49\u50f9\u6210\u672c\u7684\u8def\u5f91 (\u8def\u5f91 1 \u548c\u8def\u5f91 2) \u53ef\u9054 S1\uff0c\u56e0\u6b64 ECMP \u5c07\u767c\u63ee\u4f5c\u7528\u3002 \u8def\u7531\u5668\u4f7f\u7528\u96dc\u6e4a\u7b97\u6cd5\uff08\u57fa\u65bc\u6e90\u548c\u76ee\u7684\u5730 IP \u5730\u5740\u7b49\u56e0\u7d20\uff09\u4f86\u78ba\u5b9a\u6b64\u7279\u5b9a\u5c01\u5305\u7684\u8def\u5f91\u3002
  • \u5047\u8a2d\u96dc\u6e4a\u51fd\u6578\u70ba\u6b64\u5c01\u5305\u9078\u64c7\u4e86\u8def\u5f91 1 (\u4ecb\u9762 1)\u3002
  • \u5c01\u5305\u8f49\u767c\uff1a\u8def\u7531\u5668 R \u5c07\u5c01\u5305\u8f49\u767c\u5230\u4ecb\u9762 1\uff0c\u671d\u5411\u4f3a\u670d\u5668 S1\u3002

\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

  • \u5982\u679c\u96dc\u6e4a\u51fd\u6578\u518d\u6b21\u9078\u64c7\u8def\u5f91 1\uff0c\u6b64\u5c01\u5305\u5c07\u9075\u5faa\u8207\u524d\u4e00\u500b\u5c01\u5305\u76f8\u540c\u7684\u8def\u5f91\u3002
  • \u5982\u679c\u96dc\u6e4a\u51fd\u6578\u9019\u6b21\u9078\u64c7\u4e86\u8def\u5f91 2 (\u4ecb\u9762 2)\uff0c\u5247\u5c01\u5305\u5c07\u63a1\u53d6\u4e0d\u540c\u7684\u8def\u7531\u5230\u9054 S1\uff0c\u5f9e\u800c\u5be6\u73fe\u8ca0\u8f09\u5e73\u8861\u3002

ECMP \u7684\u512a\u9ede\uff1a

  • \u589e\u52a0\u983b\u5bec\uff1a\u901a\u904e\u5229\u7528\u591a\u689d\u8def\u5f91\uff0cECMP \u53ef\u4ee5\u5206\u4f48\u6d41\u91cf\u4e26\u6f5b\u5728\u63d0\u9ad8\u6574\u9ad4\u7db2\u8def\u541e\u5410\u91cf\u3002
  • \u5bb9\u932f\u6027\uff1a\u5982\u679c\u4e00\u689d\u8def\u5f91\u4e0d\u53ef\u7528\uff0c\u6d41\u91cf\u53ef\u4ee5\u81ea\u52d5\u91cd\u65b0\u8def\u7531\u5230\u5269\u9918\u8def\u5f91\uff0c\u5f9e\u800c\u63d0\u4f9b\u5197\u9918\u3002

\u9700\u8981\u8003\u616e\u7684\u4e8b\u9805\uff1a

  • \u9023\u7dda\u7684\u8655\u7406\uff1a\u5982\u679c\u5c01\u5305\u8d70\u5230\u53e6\u5916\u4e00\u53f0\u8a2d\u5099\uff0c\u539f\u672c\u7684\u9023\u7dda\u6839\u64da\u5be6\u4f5c\u53ef\u80fd\u6703\u4e2d\u65b7

\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

  • \u8def\u7531\u4f48\u9054\uff0c\u5c0d\u5176\u4ed6 ISP \u5ba3\u544a\u81ea\u5df1\u5167\u90e8\u64c1\u6709\u7684 IP \u524d\u7db4\uff1b
  • \u8def\u7531\u8abf\u6574\uff0c\u6bcf\u6b21\u8def\u7531\u8a2d\u5b9a\u7684\u8abf\u6574\uff08\u4f8b\u5982 IP \u4e0b\u7dda\uff09\uff0c\u90fd\u9700\u8981\u5c0d\u5916\u505a\u5ba3\u544a\uff1b
  • \u8def\u5f91\u9078\u64c7\uff0c\u900f\u904e\u8def\u7531\u7684\u5404\u7a2e\u53c3\u6578\uff08\u4f8b\u5982 hop \u6578\u91cf\uff09\uff0c\u9078\u64c7\u8d70\u5230\u7279\u5b9a IP \u7684\u6700\u4f73\u8def\u5f91\uff1b
  • \u50b3\u905e\u6d41\u91cf\uff0c\u8def\u7531\u5668\u6839\u64da BGP \u7684\u8cc7\u8a0a\uff0c\u9032\u884c\u5c01\u5305\u50b3\u5c0e\u3002
"},{"location":"essay/web/maglev/#linux-bypass","title":"Linux Bypass","text":"

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

  • \u540c\u500b\u4e0a\u4e0b\u6e38\u7684\u5c01\u5305\u90fd\u5728\u540c\u500b queue \u4e2d\u8655\u7406\uff0c\u6bd4\u8f03\u4e0d\u6703\u9020\u6210\u8655\u7406\u901f\u5ea6\u4e0d\u4e00\u81f4\uff0c\u4e26\u9032\u800c\u5c0e\u81f4\u5931\u5e8f\u3002
  • \u540c\u500b\u4e0a\u4e0b\u6e38\u7684\u5c01\u5305\u5728\u9032\u5165\u76f8\u540c\u7684 queue \u4e4b\u5f8c\uff0c\u5c31\u53ea\u6703\u9078\u64c7\u4e00\u6b21 backend\uff0c\u4e0d\u7528\u6bcf\u6b21\u90fd\u91cd\u9078\u4e00\u6b21\u3002

\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

"},{"location":"essay/web/maglev/#packet-pool","title":"Packet Pool","text":"

\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

  • received\uff1asteering \u6536\u5230 NIC \u7684\u5c01\u5305\u5f8c\uff0c\u6703\u628a\u8a72\u5c01\u5305\u7684\u6307\u6a19\u653e\u5728\u9019\uff1b
  • processed\uff1asteering \u6703\u628a\u8a72\u6307\u6a19\u4e0a\u7684\u5c01\u5305\u5206\u914d\u7d66\u5c0d\u61c9\u7684 receiving queue\uff1b
  • reserved\uff1asteering \u6703\u628a packet pool \u88e1\u7684\u7a7a\u9592\u4f4d\u7f6e\uff0c\u9032\u884c\u9810\u7d04\u4f7f\u7528\uff1b
  • sent\uff1amuxing \u6703\u628a\u5728\u9019\u7684\u5c01\u5305\u9001\u51fa\u5c01\u5305\u7d66 NIC\uff1b
  • ready\uff1amuxing \u6703\u628a transmission queue \u7684\u5c01\u5305\u62ff\u51fa\u4f86\u653e\u9019\uff1b
  • recycled\uff1a\u56e0\u70ba\u4efb\u52d9\u5b8c\u6210\uff0cmuxing \u6703\u628a\u9019\u88e1\u5728 packet pool \u4f54\u7528\u7684\u4f4d\u7f6e\u7d66\u91cb\u653e\u3002

\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

\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

\u5373\u4fbf\u5982\u6b64\uff0c\u65e9\u671f\u7684\u6f14\u7b97\u6cd5\u5728 Maglev \u4e2d\uff0c\u6709\u4e00\u4e9b\u689d\u4ef6\u6c92\u8fa6\u6cd5\u88ab\u6eff\u8db3\uff1a

  • \u7576\u540c\u500b\u670d\u52d9\u4e0a\u6e38\u7bc0\u9ede\u6578\u91cf\u9054\u5230\u6578\u767e\u6642\uff0c\u9700\u8981\u5f88\u5927\u7684\u8868\u4f86\u9054\u5230\u8db3\u5920\u5206\u6563\u7684\u8ca0\u8f09\u5747\u8861\uff1b
  • \u5076\u723e\u91cd\u5efa\u9019\u500b\u8868\u662f\u53ef\u4ee5\u88ab\u63a5\u53d7\u7684\uff0c\u53ea\u8981\u80fd\u5920\u9054\u5230\u8db3\u5920\u7684\u7a69\u5b9a\u5ea6\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

"},{"location":"essay/web/maglev/#vip-matching","title":"VIP Matching","text":""},{"location":"essay/web/maglev/#fragment-handling","title":"Fragment Handling","text":""},{"location":"essay/web/maglev/#monitoring-and-debugging","title":"Monitoring and Debugging","text":""},{"location":"essay/web/maglev/#\u6e2c\u8a66","title":"\u6e2c\u8a66","text":""},{"location":"essay/web/maglev/#\u5ef6\u4f38","title":"\u5ef6\u4f38","text":""},{"location":"essay/web/maglev/#sharding","title":"Sharding","text":"
  1. \u53c3\u95b1\u7b2c\u4e09\u6bb5 3\uff0cForwarder Design and Implementation\u00a0\u21a9

"},{"location":"essay/web/network-books/","title":"12 Best Computer Networking Books for Beginners & Experts","text":"

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:

  • Switches, VLANs, trunking, Link aggregation etc
  • Routers, routing protocols (RIP, EIGRP, OSPF, BGP), redistribution etc
  • Cisco devices configuration (4500, 6500 multilayer switches, 3550, 3750 etc)
  • Cisco Nexus discussion and configuration.
  • MPLS
  • ACLs, authentication, NAT etc
  • Firewalls (ASA etc)
  • Wireless
  • VoIP
  • QoS
  • IP design
  • IPv4, IPv6
  • Etc

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:

  • Overview of networking
  • Internet Protocols
  • Switching
  • Routing
  • Wireless
  • Security

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:

  • CCNA 200-301 Official Cert Guide, Volume 1
  • CCNA 200-301 Official Cert Guide, Volume 2

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":"
  • Computer Networking: A Top-Down Approach
  • Networking All-in-One For Dummies
  • CompTIA Network+ Certification All-in-One Exam Guide
"},{"location":"essay/web/network-books/#best-books-for-more-advanced-professionals","title":"Best Books for More Advanced Professionals","text":"
  • Network Warrior
  • The Complete Guide to LAN Switching Technology
"},{"location":"essay/web/network-books/#best-books-for-cisco-professional-experts","title":"Best Books for Cisco Professional Experts","text":"
  • Routing TCP/IP, Volume I
  • Routing TCP/IP, Volume II
  • Cisco Networking All-in-One For Dummies
"},{"location":"essay/web/network-books/#best-books-for-next-generation-networking-engineers","title":"Best Books for Next Generation Networking Engineers","text":"
  • Network Programmability and Automation
  • Software Defined Networks: A Comprehensive Approach
"},{"location":"essay/web/network-books/#for-ccna-200-301","title":"For CCNA 200-301","text":"
  • CCNA 200-301 Official Cert Guide Library
  • CCNA 200-301 Lab Guide with Packet Tracer Labs

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

  • \u5efa\u8b70\u5148\u8b80\u904e\u300c\u7db2\u8def\u600e\u9ebc\u50b3\u300d\u9019\u7bc7
  • \u50b3\u8f38\u5c64\u4e2d\u7684 TCP
"},{"location":"essay/web/network-details/#\u4e59\u592a\u7db2","title":"\u4e59\u592a\u7db2","text":""},{"location":"essay/web/network-details/#\u6536\u767c\u5668\u76f8\u95dc","title":"\u6536\u767c\u5668\u76f8\u95dc","text":"
  • \u524d\u65871\uff08Preamble or Syncword\uff09\uff1a\u662f\u7528\u4f86\u544a\u77e5\u76ee\u7684\u5730\u7aef\uff1a\u300c\u73fe\u5728\u6709\u8a0a\u606f\u8981\u9001\u7d66\u4f60\u4e86\uff0c\u6e96\u5099\u63a5\u6536\u56c9\u300d\uff0c\u907f\u514d\u8b93\u7db2\u5361\u4e00\u76f4\u505a\u4e8b\u3002
  • \u6846\u8d77\u59cb\u5b9a\u754c\u7b26\uff08Start Frame Delimiter, SFD\uff09\uff1a\u662f\u7528\u4f86\u5206\u754c\u5f85\u6703\u7684\u8a0a\u865f\u5c31\u662f\u771f\u6b63\u6709\u50f9\u503c\u7684\u8cc7\u8a0a\u3002
  • \u8a0a\u6846\u9593\u9694(Inter Frame Gap, IPG)\uff1a\u548c \u524d\u6587 \u5f88\u50cf\uff0c\u53ea\u662f\u662f\u7d50\u5c3e\u90e8\u4efd\u3002
\u524d\u6587\u548c\u6846\u8d77\u59cb\u5b9a\u754c\u7b26\u7684\u7bc4\u4f8b

\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":"
  • \u76ee\u7684\u4f4d\u7f6e\uff08MAC destination\uff09
  • \u4f86\u6e90\u4f4d\u7f6e\uff08MAC source\uff09
  • \u4e59\u592a\u7a2e\u985e\uff08EtherType\uff09\u6216\u8a0a\u6846\u9577\u5ea6\uff1a\u82e5\u8a72\u503c\u5c0f\u65bc 1501 \u4ee3\u8868\u8a0a\u6846\u9577\u5ea6\u53cd\u4e4b\u5927\u65bc 1535 \u5247\u662f\u4ee3\u8868\u7a2e\u985e
EtherType \u7684\u66f4\u591a\u8a0a\u606f

1500 \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

  • IPv4
  • IPv6

\u9019\u908a\u63d0\u4e00\u4e0b IPv6 \u6709\u5e7e\u9ede\u8981\u6ce8\u610f\uff1a

  • \u901a\u4fe1\u985e\u5225\u3001\u6d41\u6a19\u8a18 \u90fd\u662f\u70ba\u4e86 \u670d\u52d9\u54c1\u8cea\u63a7\u5236 Quality of Service, QoS\uff09\u3002
  • \u8df3\u6bb5\u6578\u9650\u5236 \u7528\u4f86\u9650\u5236\u8def\u7531\u6b21\u6578\u3002

\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

  • \u5354\u5b9a\u7248\u672c\uff084 \u6216 6 \u7b49\u7b49\uff09
  • \u6aa2\u6838\u548c
  • \u5c01\u5305\u9577\u5ea6
  • \u76ee\u7684\u5730\u7aef\u7684 IP \u4f4d\u7f6e\u6216\u5ee3\u64ad\u5c01\u5305\uff08\u9001\u7d66\u5927\u5bb6\u7684\uff09
  • \u5982\u679c\u81ea\u5df1\u4e0d\u662f\u76ee\u7684\u5730\u7aef\u7684\u5c01\u5305\uff0c\u5c31\u53ef\u80fd\u6703\u900f\u904e\u8def\u7531\u8868\uff08Routing Table\uff09\u5f80\u5916\u8def\u7531\uff0c\u9019\u5c31\u662f\u8def\u7531\u5668\u5728\u505a\u7684\u4e8b\u3002
  • \u6b63\u78ba\u6392\u5e8f\uff08\u900f\u904e\u8b58\u5225\u78bc\uff09\uff0c\u4e26\u653e\u9032\u7de9\u885d\u5340\u7b49\u5f85\u6392\u5e8f
  • \u6aa2\u67e5\u50b3\u8f38\u5c64\u7684\u7a2e\u985e\uff0c\u4f8b\u5982 1 \u4ee3\u8868 ICMP\u30016 \u4ee3\u8868 TCP\u300117 \u4ee3\u8868 UDP
  1. \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

"},{"location":"essay/web/network-routing/","title":"\u7db2\u8def\u600e\u9ebc\u50b3","text":"

\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

  • \u82e5\u76f8\u5dee\u904e\u5927\uff08\u7cfb\u7d71\u5927\u90e8\u5206\u90fd\u662f\u9810\u8a2d 128ms\uff09\uff0c\u5247\u6703\u66ab\u505c\u540c\u6b65\u4e26\u5f37\u5236\u91cd\u8a2d\uff1b
  • \u53bb\u56de\u7684\u7db2\u8def\u5ef6\u9072\u5dee\u7570\u904e\u5927\u6703\u5927\u5e45\u964d\u4f4e\u6821\u6642\u7684\u7cbe\u6e96\u5ea6\uff1b
  • \u958f\u79d2\u554f\u984c\uff1b
  • VM \u7684\u77f3\u82f1\u9707\u76ea\u5668\u662f\u865b\u64ec\u7684\uff0c\u4e5f\u5c31\u662f\u6703\u53d7\u5230 CPU \u5f71\u97ff\uff0c\u800c\u964d\u4f4e\u6e96\u78ba\u6027
  • NTP Server \u7684\u932f\u8aa4\u8a2d\u5b9a\uff1b
  • \u9632\u706b\u7246\u64cb\u4f4f\u548c NTP \u7684\u9023\u7dda\u3002

\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\u6027

NTP \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":"
  1. Time, technology and leaping seconds
  2. The One-second War
"},{"location":"essay/web/retry-strategy/","title":"Retry \u7684\u7b56\u7565","text":""},{"location":"essay/web/retry-strategy/#retry-in-http-method","title":"Retry in HTTP method","text":"Method Idempotent Destructive Safe 4XX 5XX Ambiguous Purpose GET O X O No Retry Retry Retry \u53d6\u5f97\u8cc7\u6599 POST X X X No Retry No Retry No Retry \u5efa\u7acb\u8cc7\u6599 PUT O O X No Retry Retry Retry \u5efa\u7acb\u6216\u7de8\u8f2f\u8cc7\u6599 PATCH X O X No Retry Retry Retry \u7de8\u8f2f\u8cc7\u6599 DELETE O O X No Retry Retry Retry \u522a\u9664\u8cc7\u6599

Idempotent

\u51aa\u7b49\u7684\uff0c\u91cd\u8907\u57f7\u884c\u5f8c\u7d50\u679c\u4ecd\u76f8\u540c

Destructive\uff1a

\u7834\u58de\u6027\u7684\uff0c\u57f7\u884c\u5f8c\u6703\u53ef\u80fd\u6703\u9020\u6210\u8cc7\u6599\u7684\u7121\u6cd5\u5fa9\u539f

PUT \u53ef\u80fd\u70ba user.name = 'Evan'\uff0cPATH \u53ef\u80fd\u70ba user.access_count += 1\uff0c\u6545\u51aa\u7b49\u662f\u4e0d\u540c\u7684\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\uff0c\u6216\u5728\u66f4\u6539\u904e\u7a0b\u4e2d\uff0c\u5f9e\u4ed6\u8655\u5df2\u7d93\u88ab\u4fee\u6539\u3002

\u5c31\u5982\u540c Memcached \u7684 CAS \u503c

\u6bcf\u6b21 Request \u4e2d\u589e\u52a0 idempotency key \u53ef\u4ee5\u7528\u4f5c cache key

"},{"location":"essay/web/retry-strategy/#circuit-breaker-pattern","title":"Circuit Breaker Pattern","text":"

\u591a\u4e45 Retry \u4e00\u6b21\uff1f

  • \u7db2\u8def\u65b7\u7dda\uff0c\u53ef\u80fd\u50c5\u9020\u6210\u6578\u6beb\u79d2\u7684 rejection
  • DB connection\uff0c\u53ef\u80fd\u9020\u6210\u6578\u79d2\u7684 rejection
  • reboot \u53ef\u80fd\u9020\u6210\u6578\u5206\u9418\u7684 rejection
  • rolling back \u53ef\u80fd\u9020\u6210\u5c0f\u6642\u7684 rejection

\u5728\u4e0a\u8ff0\u7684\u60c5\u6cc1\u4e0b\uff0cexponential backoff \u5c31\u662f\u696d\u754c\u7684 retry \u6a19\u6e96\uff0c\u4f8b\u5982\uff1a

  • 100ms
  • 250ms
  • 500ms
  • 1s
  • 2.5s
  • 5s
  • 5s
  • ...
  • quit
"},{"location":"essay/web/retry-strategy/#jitter","title":"Jitter","text":"

\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\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

let time = SCHEDULE[times] || DEFAULT;\nreturn Math.random() * (time * 0.2) + time * 0.9;\n

\u6216\u662f\u589e\u52a0 offset\uff1a

const PERIOD = 60_000;\nconst OFFSET = Math.random() * PERIOD;\nsetTimeout(() => {\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\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

  • \u53ef\u9760\uff1a\u900f\u904e\u53cd\u8986\u5bc4\u9001\u78ba\u8a8d\u4fe1\u865f\uff08Acknowledge\uff0c\u6216\u7c21\u7a31 ACK\uff09
  • \u5e8f\u5217\uff1a\u900f\u904e Sequence(\u6216\u7c21\u7a31 SEQ) \u548c Acknowledgement\uff08\uff09\u7684\u7de8\u865f\u78ba\u8a8d\u9806\u5e8f
  • \u96d9\u5411\uff1a\u958b\u555f\u9023\u7dda\u6642\uff0c\u9019\u500b\u9023\u7dda\u96d9\u65b9\u90fd\u53ef\u4ee5\u5beb\u5165\u548c\u8b80\u53d6\u7684
"},{"location":"essay/web/tcp/#\u5167\u5bb9\u7269","title":"\u5167\u5bb9\u7269","text":"

\u912d\u4e2d\u52dd

TCP \u6703\u900f\u904e\u4e0a\u8ff0\u5404\u7a2e\u7de8\u865f\u548c\u8a0a\u865f\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\u624d\u80fd\u771f\u6b63\u5b8c\u6574\u95dc\u9589\u9023\u7dda\uff08\u56db\u6b21\u63ee\u624b\uff09\u3002\u5176\u5b8c\u6574\u751f\u547d\u7684\u7a0b\u5982\u4e0b\uff1a

\u5404\u500b\u4fe1\u865f\uff08Flags\uff09\u4ee3\u8868\u610f\u7fa9\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

  • Reserved
  • Accurate echo
  • Congestion Window Reduced
  • Echo, ECH
  • Urgent, URG
  • \u7dca\u6025\u7684\u5c01\u5305\uff0c\u544a\u77e5\u63a5\u6536\u65b9\u9019\u500b\u5c01\u5305\u4e0d\u9700\u8981\u9032\u5165\u4f47\u5217\uff08queue\uff09\uff0c\u8acb\u76f4\u63a5\u8655\u7406
  • \u6703\u51fa\u73fe\u7684\u5834\u666f\u9084\u6c92\u770b\u904e
  • Acknowledgment, ACK
  • \u901a\u5e38\u7528\u4f86\u544a\u77e5\u5c0d\u65b9\uff0c\u6211\u6536\u5230\u4f60\u525b\u525b\u50b3\u7684\u4fe1\u865f\u4e86\uff1b
  • \u6709\u6642\u6703\u593e\u5e36\u5176\u4ed6\u4fe1\u865f\uff0c\u8868\u660e\u540c\u610f\u67d0\u4e9b\u8981\u6c42\uff0c \u4f8b\u5982 SYN+ACK \u4ee3\u8868\u6211\u6536\u5230\u4f60\u7684\u9023\u7dda\u8981\u6c42\uff0c\u4e26\u4e14\u540c\u610f\u4f60\u7684\u9023\u7dda
  • Push, PSH
  • \u6dfb\u52a0\u9019\u500b\u4fe1\u865f\u4ee3\u8868\u63a5\u6536\u65b9\u4e0d\u9700\u8981\u505a\u66ab\u5b58\uff0c\u53ef\u4ee5\u76f4\u63a5\u628a\u8cc7\u6599\u5f80\u4e0a\u50b3\u905e
  • \u901a\u5e38\u7528\u5728\u5c0f\u6bb5\u7684\u8cc7\u6599\uff0c\u56e0\u70ba\u5927\u8cc7\u6599\u6703\u88ab\u5206\u6210\u591a\u6bb5\uff0c\u7136\u5f8c\u6703\u6709\u9806\u5e8f\u8b70\u984c
  • Reset, RST\uff0c\u5df2\u7d93\u6368\u68c4\u7684\u9023\u7dda\u53c8\u6536\u5230\u8a0a\u865f\uff08\u4f8b\u5982 ACK\uff09\uff0c\u5c31\u6703\u56de\u50b3
  • \u57e0\u4e0d\u5b58\u5728\uff0c\u901a\u5e38\u662f\u56e0\u70ba\u4f60\u8acb\u6c42\u7684\u57e0\u6c92\u88ab\u6253\u958b\uff1b
  • IP \u4e0d\u5b58\u5728\uff0c\u901a\u5e38\u662f\u56e0\u70ba\u4f60\u76e3\u807d\u7684 IP \u4e0d\u662f 0.0.0.0:port\uff1b
  • \u9023\u7dda\u88ab\u68c4\u7528\uff0c\u5c0d\u65b9\uff08\u63a5\u6536\u8005\uff09\u6703\u51fa\u73fe Connection closed by peer \u7684\u932f\u8aa4\uff1b
  • \u5c0d\u65b9\u7684\u4f47\u5217\uff08queue\uff09\u5df2\u7d93\u6eff\u4e86\uff1b
  • \u9632\u706b\u7246\u6e05\u9664\u4e86 session table\uff0c\u5c0e\u81f4\u4e0d\u8a8d\u8b58\u9019\u6bb5\u9023\u7dda\uff0c\u5c31\u53ef\u80fd\u56de\u50b3\u8a72\u8a0a\u865f\u3002
  • Synchronize, SYN
  • \u958b\u555f\u9023\u7dda
  • \u88ab\u52d5\u65b9\u6703\u548c ACK \u4e00\u8d77\u642d\u914d
  • Finish, FIN
  • \u7d50\u675f\u9023\u7dda
  • \u88ab\u52d5\u65b9\u6703\u548c ACK \u4e00\u8d77\u642d\u914d
"},{"location":"essay/web/tcp/#\u4e09\u6b21\u63e1\u624b","title":"\u4e09\u6b21\u63e1\u624b","text":"

\u912d\u4e2d\u52dd

\u5f7c\u6b64\u6703\u5728\u4e09\u6b21\u63e1\u624b\u4e2d\u78ba\u8a8d\u63a5\u4e0b\u4f86\u7684 SEQ \u865f\u78bc\uff1a

  • \u4e3b\u52d5\u65b9\uff08\u6216\u7a31\u767c\u8d77\u65b9\u3001\u5ba2\u6236\u7aef\uff09\u9001\u51fa\u8981\u6c42\u9023\u7dda\u7684\u540c\u6b65\u4fe1\u865f\uff08Synchronous \u6216\u7a31 SYN\uff09
  • \u76e3\u807d\u65b9\uff08\u6216\u7a31\u670d\u52d9\u7aef\u3001\u79c1\u670d\u7aef\uff09\u5141\u8a31\u9023\u7dda\uff08ACK\uff09\u4e26\u540c\u6a23\u8ce6\u4e88\u540c\u6b65\u4fe1\u865f\uff08SYN\uff09
  • \u4e3b\u52d5\u65b9\u5141\u8a31\u9023\u7dda
"},{"location":"essay/web/tcp/#\u56db\u6b21\u63ee\u624b","title":"\u56db\u6b21\u63ee\u624b","text":"

\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

  • \u4e3b\u52d5\u65b9 \u8981\u6c42\u95dc\u9589\u9023\u7dda FIN\uff0c\u4e26\u9032\u5165 FIN_WAIT1 \u72c0\u614b\u3002
  • \u88ab\u52d5\u65b9 \u544a\u77e5\u6536\u5230\u9019\u500b\u8cc7\u8a0a ACK\u3002
  • \u4e3b\u52d5\u65b9 \u9032\u5165\u7b49\u5f85 FIN_WAIT2 \u72c0\u614b\u3002
  • \u88ab\u52d5\u65b9 \u78ba\u4fdd\u8cc7\u6599\u90fd\u9001\u5b8c\u5f8c\uff0c\u95dc\u9589\u9023\u7dda FIN\u3002
  • \u4e3b\u52d5\u65b9 \u544a\u77e5\u6536\u5230\u9019\u500b\u8cc7\u8a0a ACK\uff0c\u6b64\u6642\u88ab\u52d5\u65b9\u4e0d\u7528\u7ba1\u6709\u6c92\u6709\u6536\u5230\u9019\u500b ACK\u3002
  • \u4e3b\u52d5\u65b9 \u9032\u5165 TIME_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\uff01\u4ed6\u9700\u8981\u9032\u5165\u7b49\u5f85\u5c0d\u65b9\u95dc\u9589\u7684\u72c0\u614b\uff08FIN WAIT 1 \u6216 FIN WAIT 2\uff09\uff1b\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

"},{"location":"essay/web/tcp/#tcp-\u9078\u9805","title":"TCP \u9078\u9805","text":"

TCP \u9078\u9805\uff08TCP Option\uff09\u5927\u90e8\u5206\u90fd\u662f\u5728\u63e1\u624b\u968e\u6bb5\u78ba\u8a8d\u7684\uff0c \u8a73\u898b\uff1a

  • 0: End of options
  • 1: no-op
  • 2: MSS(Maximum TCP Segment Size)\uff0c\u5354\u5546\u6bb5\u7684\u5927\u5c0f
  • 3: Window Scaling\uff0c\u63d0\u9ad8\u5ba2\u6236\u7aef\u53ef\u7528\u983b\u5bec
  • 4: SACK\uff08Selective ACK\uff09\uff0c\u907f\u514d\u6bcf\u6b21\u90fd\u8981\u7b49\u8d85\u6642\u624d\u91cd\u50b3\uff0c\u4e14\u53ea\u91cd\u50b3\u4e1f\u5931\u7684\u5c01\u5305\uff0c\u7528\u4f86\u52a0\u901f\u91cd\u50b3\u7684\u6a5f\u5236
  • 8: Timestamp\uff0c\u7cbe\u6e96 RTT
  • 34: TFO\uff08TCP Fast Open\uff09

Kernel options \u53ef\u4ee5\u53c3\u8003 sysctl-explorer

  • TCP_NODELAY\uff1a\u555f\u7528\u6642\uff0c\u7576\u8cc7\u6599\u5927\u65bc MSS\uff0c\u5c31\u9001\u51fa\uff1b\u53cd\u4e4b\u5247\u7d2f\u7a4d\u76f4\u5230\u6536\u5230\u4e0a\u4e00\u500b\u5c01\u5305\u7684 ACK\u3002 \u7f3a\u9ede\u81ea\u7136\u5c31\u662f\u5982\u679c\u61c9\u7528\u7a0b\u5f0f\u672c\u8eab\u5c31\u662f\u5c0f\u8cc7\u6599\u9001\u51fa\uff08\u4f8b\u5982 Streaming\uff09\uff0c\u5c31\u6703\u5e38\u5e38\u9ad4\u9a57\u5230\u5ef6\u9072\u3002 \u9664\u6b64\u4e4b\u5916\uff0c\u5982\u679c\u5c0d\u65b9\u4e5f\u555f\u7528\uff0c\u5c31\u53ef\u80fd\u6703\u6709\u9396\u6b7b\uff08deadlock\uff09\u7684\u72c0\u6cc1\uff0c\u5169\u908a\u90fd\u5728\u7b49 ACK\u3002
  • TCP_CORK\uff1a\u555f\u7528\u6642\uff0c\u53ea\u6709\u7576\u7d2f\u7a4d\u5230\u4e00\u5b9a\u7684\u91cf\u624d\u6703\u9001\u51fa\uff08\u9650\u5236\u5728 200ms \u4ee5\u4e0b\uff09\uff0c\u548c TCP_NODELAY \u5dee\u5728\u4e00\u500b\u662f\u7b49 ACK \u4e00\u500b\u662f\u7b49\u91cf\u5230\u4e00\u5b9a\u7a0b\u5ea6\u3002 \u7576\u4f60\u5728\u9001\u51fa\u5927\u91cf\u8cc7\u6599\u6642\uff0c\u9019\u6703\u5f88\u6709\u7528\uff0c\u4f46\u662f\u8acb\u5c0f\u5fc3\u670d\u7528\u3002
"},{"location":"essay/web/tcp/#congestion-control","title":"Congestion Control","text":"

BBR, Queue-Discipline

"},{"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/#\u4e09\u6b21\u63e1\u624b_1","title":"\u4e09\u6b21\u63e1\u624b","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/#\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
  1. \u9650\u5236\u6700\u9ad8\u4e94\u500b\u9023\u7dda
  2. \u62ff new_sd \u53bb\u8b80\u5beb\u8cc7\u6599\uff0csd \u5247\u7e7c\u7e8c\u76e3\u807d\u9023\u7dda\u8acb\u6c42\u3002
"},{"location":"essay/web/tcp/#\u554f\u984c","title":"\u554f\u984c","text":"\u70ba\u4ec0\u9ebc\u6703\u6709\u907a\u5931\u3001\u91cd\u8907\u5bc4\u9001\u548c\u5931\u5e8f\u7684\u554f\u984c\uff1f

\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

  • \u7db2\u8def\u983b\u5bec\u6b63\u5e38\u504f\u9ad8\uff0c\u4f46\u6c92\u6709\u7a81\u7834\u9650\u5236\u3002
  • \u61c9\u7528\u5c64\u7684\u8cc7\u6e90\u4f7f\u7528\u7387\u4f4e\uff0cCPU/Mem \u7dad\u6301\u5728 5% \u5de6\u53f3\u3002
  • HTTP \u7684\u6f5b\u6642\u975e\u5e38\u9ad8\uff0c\u6578\u5341\u79d2
\u8acb\u554f\u4e0a\u8ff0\u72c0\u6cc1\u53ef\u80fd\u7684\u539f\u56e0\uff1f

\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

  • \u65b0\u589e\u7bc0\u9ede\uff0c\u6069\uff0c\u55ae\u7d14\u800c\u66b4\u529b
  • \u5206\u6563\u670d\u52d9\uff0c\u5c31\u662f\u63d0\u4f9b\u5fae\u670d\u52d9
  • \u61c9\u7528\u7a0b\u5f0f\u7684\u8abf\u6574\uff0c\u56e0\u70ba\u55ae\u4e00\u61c9\u7528\u8acb\u6c42\u6703\u6253\u5f88\u591a\u500b\u4e0d\u540c\u8cc7\u6599\u5eab\u7684\u8acb\u6c42\uff1a
  • \u4f7f\u7528\u4e8b\u4ef6\u6a5f\u5236\uff0c\u964d\u4f4e\u524d\u7aef\u9700\u8981\u5b9a\u671f\u78ba\u8a8d\u8cc7\u6599\u662f\u5426\u66f4\u65b0
  • \u4f7f\u7528\u5feb\u53d6\uff0c\u4e26\u5229\u7528\u5feb\u53d6\u6e1b\u5c11\u9700\u8981\u548c\u591a\u500b\u8cc7\u6599\u5eab\u6e9d\u901a\u7684\u904e\u7a0b
  • \u548c\u8cc7\u6599\u5eab\u7684\u6e9d\u901a\u4e2d\u589e\u52a0\u4e00\u500b\u4ee3\u7406\u5668\uff0c\u53ea\u9700\u8981\u548c\u4ed6\u5efa\u7acb\u9023\u7dda\u5373\u53ef
  • \u8abf\u6574\u524d\u7aef\u61c9\u7528\u5c64\u5354\u5b9a
    • GraphQL
    • HTTP/3
"},{"location":"essay/web/tcp/#referer","title":"Referer","text":"

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

"},{"location":"essay/web/url-structure/#scheme","title":"Scheme","text":"

http, https

"},{"location":"essay/web/url-structure/#host","title":"Host","text":"

subdomain.domain.tld

"},{"location":"essay/web/url-structure/#top-layer-domain-tld","title":"Top layer Domain (TLD)","text":"
  • com
  • com.tw
  • io
  • github.io
"},{"location":"essay/web/url-structure/#port","title":"Port","text":"
  • http default 80
  • https default 443
"},{"location":"essay/web/url-structure/#path","title":"Path","text":"

/path?query_key=query_value#fragment

"},{"location":"essay/web/url-structure/#diagram","title":"Diagram","text":""},{"location":"essay/web/url-structure/#example","title":"Example","text":"
  • 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
"},{"location":"essay/web/url-structure/#extension","title":"Extension","text":"
  • schemeful-same-site consider scheme on site
  • HTTP header Sec-Fetch-Site([time=April, 2020]) can know where request came from
  • same-site
  • same-origin
  • cross-site
  • none
"},{"location":"essay/web-security/cross-origin-resources-sharing/","title":"CORS","text":"

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":"
  1. \u4f7f\u7528\u8005\u9032\u5230 http://example.com \u7684\u7db2\u7ad9\u3002
  2. \u4f7f\u7528\u8005\u7684\u700f\u89bd\u5668\u900f\u904e\u7db2\u7ad9\u9700\u6c42\u53ef\u80fd\u6703\u53bb\u8ddf\u5176\u4ed6\u7db2\u7ad9\uff08http://image.com\uff09\u8981\u6a94\u6848\uff08\u5716\u7247\uff0cCSS \u6a94...\uff09\u3002
  3. \u70ba\u4e86\u4fdd\u8b77\u88ab\u8981\u6c42\u7684\u7db2\u7ad9\u96b1\u79c1\uff0c\u82e5\u8a72\u7db2\u7ad9\u56de\u50b3\u7684\u6a19\u982d\u4e0d\u5141\u8a31\u8a72\u5b58\u53d6\uff0c\u700f\u89bd\u5668\u6703\u5224\u5b9a\u8981\u6c42\u5931\u6557\uff0c\u53cd\u4e4b\u5247\u6210\u529f\u3002
"},{"location":"essay/web-security/cross-origin-resources-sharing/#access-control-allow-origin","title":"Access-Control-Allow-Origin","text":"
  • http://example.com
  • http://example.com | http://other.com
  • *
"},{"location":"essay/web-security/cross-origin-resources-sharing/#\u7d30\u7bc0","title":"\u7d30\u7bc0","text":"
  1. \u82e5 HTTP request \u593e\u96dc\u4e86\u4e9b\u6771\u897f\uff0cHTTP response \u5c31\u6703\u9700\u8981\u66f4\u591a\u6a19\u982d\u4f86\u8868\u9054\u610f\u9858\u3002
  2. \u82e5 HTTP request \u593e\u96dc\u4e86\u4e9b\u6771\u897f\uff0c\u700f\u89bd\u5668\u53ef\u80fd\u9084\u9700\u8981\u505a\u9810\u5148\u6aa2\u67e5\uff0c\u82e5\u6aa2\u67e5\u5931\u6557\uff0c\u4e0d\u6703\u505a\u9032\u4e00\u6b65\u7684\u8981\u6c42\u3002

\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

"},{"location":"essay/web-security/cross-origin-resources-sharing/#\u5ef6\u4f38","title":"\u5ef6\u4f38","text":"

very new feature!!

  1. Cross Origin Embedder Policy (COEP)
    • \u7db2\u7ad9\u662f\u5426\u9700\u8981\u4f7f\u7528 CORP \u548c CORS
  2. Cross Origin Opener Policy (COOP)
    • \u80fd\u5426\u5728\u4e0d\u79fb\u52d5\u7db2\u5740\u60c5\u6cc1\u4e0b\u6253\u958b\u5176\u4ed6\u7db2\u9801\uff08popup\uff09
  3. Cross Origin Resource Policy (CORP)
    • Cross-Origin-Resource-Policy
      • same-origin
      • same-site
      • cross-origin
  4. Cross Origin Read Blocking (CORB)
    • Cross-Origin-Embedder-Policy
      • require-corp
"},{"location":"essay/web-security/mixed-content/","title":"\u4ec0\u9ebc\u662f Mixed Content","text":"
  • \u540c\u4e00\u500b\u7db2\u7ad9\u64c1\u6709\u591a\u500b\u7db2\u7ad9\u7684\u8cc7\u6e90
  • JS
  • CSS
  • \u5716\u7247\u7b49\u7b49
  • \u5f71\u97ff\u7db2\u7ad9\u884c\u70ba
  • \\http://evil.com\u201d> \u4e0d\u662f\uff01
"},{"location":"essay/web-security/mixed-content/#\u54ea\u4e9b\u9700\u8981\u6ce8\u610f","title":"\u54ea\u4e9b\u9700\u8981\u6ce8\u610f","text":"
  • \u9664\u4e86\u5f71\u7247\u3001\u8072\u97f3\u3001\u5716\u50cf\u90fd\u61c9\u8a72\u8981\u64cb
  • \u5716\u50cf\u4e5f\u8981\u6ce8\u610f \u628a\u5783\u573e\u6876\u7684\u5716\u6a19\u548c\u5132\u5b58\u8d77\u4f86\u7684\u5716\u6a19\u4ea4\u63db
  • \u820a\u7684\u700f\u89bd\u5668\u53ef\u80fd\u9632\u8b77\u4e0d\u5920
  • IE8 \u4ee5\u4e0b
"},{"location":"essay/web-security/mixed-content/#\u9632\u8b77","title":"\u9632\u8b77","text":"
  • http:// => https://
  • \u5f9e\u672c\u5730\u7aef\u9001\u8cc7\u6599\u800c\u4e0d\u662f\u5f9e\u5225\u7684\u7db2\u7ad9\u8981
  • Header: Content Security Policy
  • upgrade-insecure-requests
    • cascades into \\
    • blocking resources
    • \u6383\u63cf\u5de5\u5177\uff1a
    • HTTPSChecker
    • Mixed Content Scan
    • "},{"location":"essay/web-security/owasp-api-top10/","title":"OWASP API Top 10","text":""},{"location":"essay/web-security/owasp-api-top10/#broken-object-level-authorization","title":"Broken Object Level Authorization","text":"
      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

      "},{"location":"essay/web-security/owasp-api-top10/#broken-authentication","title":"Broken Authentication","text":"

      \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

      "},{"location":"essay/web-security/owasp-api-top10/#lack-of-resources--rate-limiting","title":"Lack of Resources & Rate Limiting","text":"

      \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

      "},{"location":"essay/web-security/owasp-api-top10/#broken-function-level-authorization","title":"Broken Function Level Authorization","text":"

      \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

      • \u67b6\u69cb\u7684\u6aa2\u67e5
      • \u6aa2\u67e5\u5bc6\u78bc\u5f37\u5ea6\uff0czxcvbn
      • \u6aa2\u67e5\u5bc6\u78bc\u88ab\u7834\u89e3\u904e\uff0cHave I been pwned?
      • \u9650\u5236\u5617\u8a66
      • \u81ea\u5df1\u653b\u64ca\u770b\u770b\uff0cBurp Suite Intruder
      "},{"location":"essay/web-security/owasp-authentication-best-practice/#session","title":"Session","text":"

      Referer: https://github.com/OWASP/owasp-mstg/blob/master/Document/0x04e-Testing-Authentication-and-Session-Management.md#session-management-best-practices

      • \u6bcf\u6b21\u9700\u8981\u9a57\u8b49\u8eab\u4efd\u6642\u8981\u505a\u6aa2\u67e5
      • \u8981\u904e\u671f
      • \u6839\u64da\u4e0d\u540c Framework \u6709\u4e0d\u540c best practice\uff0c\u8acb\u8a73\u95b1\uff01\uff01
      "},{"location":"essay/web-security/owasp-authentication-best-practice/#2fa","title":"2FA","text":"
      • SMS-OTP
      • NIST: \"Due to the risk that SMS messages may be intercepted or redirected, implementers of new systems SHOULD carefully consider alternative authenticators.\"
      • \u53ef\u80fd\u906d\u9047\u7684\u5a01\u8105\u548c\u9810\u9632\u65b9\u5f0f\uff1ahttps://github.com/OWASP/owasp-mstg/blob/master/Document/0x04e-Testing-Authentication-and-Session-Management.md#dangers-of-sms-otp
      • Transaction Signing with Push Notifications and PKI
      • \u624b\u6a5f\u5efa\u7acb\u516c\u79c1\u9470
      • \u516c\u9470\u9001\u7d66\u5f8c\u7aef
      • \u82e5\u9700\u8981\u9a57\u8b49\u7684\u884c\u70ba\uff1a
        • \u767c\u901a\u77e5\uff08Push notifications\uff09\u5230\u624b\u6a5f
        • \u4f7f\u7528\u8005\u6388\u6b0a
        • \u50b3\u9001\u79c1\u9470\u7c3d\u6838\u904e\u7684\u8a0a\u606f
        • \u9a57\u8b49
      • \u8a73\u7d30\u6ce8\u610f\u4e8b\u9805\u548c\u6e2c\u8a66\uff1ahttps://github.com/OWASP/owasp-mstg/blob/master/Document/0x04e-Testing-Authentication-and-Session-Management.md#transaction-signing-with-push-notifications-and-pki
      "},{"location":"essay/web-security/owasp-authentication-best-practice/#jwt","title":"JWT","text":"
      • \u6bcf\u6b21\u90fd\u8981\u9a57\u8b49
      • \u9470\u5319\u85cf\u597d
      • \u85cf\u597d\u6a5f\u654f\u8cc7\u6599\uff0c\u82e5\u6709\u5fc5\u8981\u8acb\u52a0\u5bc6
      • \u4f7f\u7528 jti\uff08JWT ID\uff09
      • token \u8acb\u653e\u5728 KeyChain \u6216 KeyStore
      • Header \u4e0d\u80fd\u8b93 alg \u53ef\u63a5\u53d7 none
      • exp \u8981\u6ce8\u610f
      "},{"location":"essay/web-security/owasp-authentication-best-practice/#oauth-20","title":"OAuth 2.0","text":"
      • \u5225\u7528 implicit grant\uff0ccode grant \u8981\u4e00\u6b21\u6027\u4e14\u77ed\u6642
      • PKCE
      • Access Token \u82e5\u5b58\u5728\u4e0d\u4fe1\u4efb\u7684\u5730\u65b9\u8981\u77ed\u66ab\u7684\u671f\u9650
      • \u6709\u9650\u5236\u7684 scope
      • \u9664\u4e86 access token \u8981\u6709\u53ef\u4ee5\u9a57\u8b49\u4f7f\u7528\u8005\u7684\u8cc7\u8a0a
      • OAuth 2.0 for Native APP
      "},{"location":"essay/web-security/owasp-authentication-best-practice/#\u600e\u9ebc\u78ba\u8a8d\u9019\u662f\u540c\u4e00\u53f0\u624b\u6a5f","title":"\u600e\u9ebc\u78ba\u8a8d\u9019\u662f\u540c\u4e00\u53f0\u624b\u6a5f","text":"

      \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_IDencrypted 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

      "},{"location":"essay/web-security/owasp-authentication-best-practice/#\u5176\u4ed6","title":"\u5176\u4ed6","text":"
      • \u8b93\u4f7f\u7528\u8005\u77e5\u9053 {} \u4e5f\u767b\u5165\u5e33\u865f\u4e86
      • \u54ea\u500b\u88dd\u7f6e
      • \u54ea\u500b\u6642\u9593
      • \u54ea\u500b\u5730\u9ede
      • \u8981\u901a\u77e5\u4f7f\u7528\u8005\u6709\u65b0\u7684\u767b\u5165
      • \u8b93\u4f7f\u7528\u8005\u77e5\u9053\u6700\u5f8c\u884c\u70ba\u662f\u4ec0\u9ebc
      • \u6bcf\u6b21\u767b\u5165\u3001\u767b\u51fa\u8981\u505a\u7d00\u9304
      • \u9019\u4e9b\u662f\u6a5f\u654f\u7684\u884c\u70ba
      • \u767b\u5165
      • \u6539\u5bc6\u78bc
      • \u500b\u8cc7\u6539\u8b8a (name, email address, telephone number, etc.)
      • \u654f\u611f\u884c\u70ba (purchase, accessing important resources, etc.)
      • \u540c\u610f\u689d\u6b3e
      "},{"location":"essay/web-security/owasp-mobile-risk-top10/","title":"OWASP \u884c\u52d5\u88dd\u7f6e\u98a8\u96aa","text":""},{"location":"essay/web-security/owasp-mobile-risk-top10/#\u4e0d\u540c\u5e73\u53f0\u9593\u7684\u932f\u8aa4\u5be6\u4f5cimproper-platform-usage","title":"\u4e0d\u540c\u5e73\u53f0\u9593\u7684\u932f\u8aa4\u5be6\u4f5c\uff08Improper Platform Usage\uff09","text":"

      \u4f8b\u5982\u628a\u6a5f\u654f\u8cc7\u6599\u5b58\u9032 local storage \u800c\u4e0d\u662f\u539f\u751f\u7684\u52a0\u5bc6\u5132\u5b58\u7a7a\u9593\uff1a

      • iOS \u7684 Keychain
      • Android \u7684 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

      • Log
      • SD card
      • Cloud synced
      • OS
      • Frameworkd\uff08\u6846\u67b6\u5982\uff1aFlutter\uff09
      • Binary data\uff08\u7a0b\u5f0f\u78bc\u88e1\u9762\uff09

      \u9810\u9632\uff1a

      • \u53ea\u5132\u5b58\u5fc5\u8981\u8cc7\u8a0a
      • \u5c07\u654f\u611f\u6a94\u6848\u52a0\u5bc6\uff0c\u548c\u9078\u64c7\u597d\u5132\u5b58\u7684\u4f4d\u7f6e

      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

      • \u7db2\u8def\u9023\u7dda
      • Wifi \u9023\u7dda
      • \u8fd1\u5834\u901a\u8a0a\uff08Near Field Communication\uff0cNFC\uff09\u9023\u7dda
      • ...

      \u6700\u4f73\u505a\u6cd5\uff1a

      • \u78ba\u4fdd\u6240\u6709\u654f\u611f\u6027\u8cc7\u6599\u6709\u63a1\u7528\u52a0\u5bc6\u65b9\u5f0f\uff08TLS\u3001SSL\uff09\u9032\u884c\u50b3\u8f38
      • \u4e26\u5be6\u8e10\u5176\u6700\u4f73\u505a\u6cd5
      • \u6301\u7e8c\u6ce8\u610f\u7db2\u8def\u6d41\u91cf
      • \u4e0d\u8981\u628a\u6a5f\u654f\u8cc7\u6599\u900f\u904e SMS\u3001MMS \u50b3\u51fa\u53bb
      "},{"location":"essay/web-security/owasp-mobile-risk-top10/#\u4e0d\u5b89\u5168\u7684\u9a57\u8b49\u6a5f\u5236insecure-authentication","title":"\u4e0d\u5b89\u5168\u7684\u9a57\u8b49\u6a5f\u5236\uff08Insecure Authentication\uff09","text":"
      • \u628a Session \u6216 Token \u5132\u5b58\u9032\u5b89\u5168\u4f4d\u7f6e
      • \u5225\u7528 PIN \u78bc\u9a57\u8b49
      • \u82e5\u60a8\u7684 App \u7121\u9808 \u96e2\u7dda\u5b58\u53d6\uff0c\u8acb\u505c\u7528\u6b64\u529f\u80fd
      • \u82e5\u60a8\u7684\u61c9\u7528\u7a0b\u5f0f\u9700\u7dad\u6301\u6a5f\u5bc6\u6027\uff0c\u8acb\u9032\u884c \u96d9\u56e0\u7d20\u8eab\u5206\u9a57\u8b49
      • \u5584\u7528\u5982 Microsoft / Google Authenticator \u7b49\u670d\u52d9
      "},{"location":"essay/web-security/owasp-mobile-risk-top10/#\u932f\u8aa4\u7684\u4f7f\u7528\u5bc6\u78bc\u5b78broken-cryptography","title":"\u932f\u8aa4\u7684\u4f7f\u7528\u5bc6\u78bc\u5b78(Broken Cryptography)","text":"
      • \u4fdd\u8b77\u597d\u4f60\u7684\u9470\u5319
      • \u5225\u81ea\u5df1\u8a2d\u8a08\u5bc6\u78bc\u5b78\u76f8\u95dc\u7684\u6f14\u7b97\u6cd5
      • \u4e0d\u5b89\u5168\u6216\u904e\u6642\u7684\u6f14\u7b97\u6cd5\uff08\u4e0d\u55ae\u6307\u52a0\u5bc6\uff09
      • RC2
      • MD4
      • MD5
      • SHA1
      "},{"location":"essay/web-security/owasp-mobile-risk-top10/#\u4e0d\u5b89\u5168\u7684\u6388\u6b0a\u6a5f\u5236insecure-authorization","title":"\u4e0d\u5b89\u5168\u7684\u6388\u6b0a\u6a5f\u5236\uff08Insecure Authorization\uff09","text":"
      GET /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

      • buffer overflow
      • format string vulnerabilities
      • ...

      \u9810\u9632\uff1a

      • \u8b93\u591a\u4eba\u4e00\u8d77\u6aa2\u67e5\u7a0b\u5f0f\u78bc
      • \u5beb\u597d\u770b\u7684\u7a0b\u5f0f\u78bc\uff0c\u597d\u770b\u7684\u7a0b\u5f0f\u78bc\u5e6b\u52a9 Debug
      • buffer overflow \u548c memory leak \u662f\u9ad8\u98a8\u96aa\u7684\u5b89\u5168\u6027\u554f\u984c
      include <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

      • \u6700\u7d42\u7684\u7a0b\u5f0f\u78bc\u4e0d\u80fd\u6709 debug \u7684 log
      • \u907f\u514d\u82e5 config \u6a94\u8b8a\u5316\u4e86\uff0c\u7522\u54c1\u7684\u6a5f\u654f\u8cc7\u8a0a\u6216\u7279\u6b8a\u74b0\u5883\u4ecd\u80fd\u904b\u884c\u6216\u66b4\u9732
      • \u55ae\u5143\u6216\u6574\u5408\u6e2c\u8a66\u4e0d\u8981\u5728\u6700\u7d42\u7522\u54c1\u4e2d
      • \u4e0d\u80fd\u6709 UAT\u3001staging\u3001demo \u6216 test \u74b0\u5883\u7684\u7a0b\u5f0f\u78bc\u5728\u6700\u7d42\u7522\u54c1
      "},{"location":"essay/web-security/owasp-mobile-risk-top10/#\u820a\u7684","title":"\u820a\u7684","text":""},{"location":"essay/web-security/owasp-mobile-risk-top10/#\u4f3a\u670d\u5668\u7aef\u5b89\u5168\u63a7\u5236\u8106\u5f31weak-server-side-controls","title":"\u4f3a\u670d\u5668\u7aef\u5b89\u5168\u63a7\u5236\u8106\u5f31\uff08Weak Server Side Controls\uff09","text":"

      \u5f8c\u7aef\u9700\u8981\u6ce8\u610f\u53ef\u80fd\u906d\u53d7\u7684\u653b\u64ca\uff1a

      • OWASP Top 10
      • OWASP API Top 10

      \u57fa\u672c\u89c0\u5ff5\uff1a

      • \u7d55\u4e0d\u76f8\u4fe1\u7528\u6236\u7aef
      • \u8b39\u614e\u8a2d\u8a08\u884c\u52d5\u88dd\u7f6e\u7684\u4f3a\u670d\u5668\u7aef\u63a7\u5236
      • \u7d55\u4e0d\u4f7f\u7528\u7528\u6236\u7aef\u61c9\u7528\u7a0b\u5f0f\u57f7\u884c\u5b58\u53d6\u63a7\u5236
      "},{"location":"essay/web-security/owasp-mobile-risk-top10/#\u975e\u6545\u610f\u6216\u610f\u5916\u9020\u6210\u7684\u8cc7\u6599\u5916\u6d29unintended-data-leakage","title":"\u975e\u6545\u610f\u6216\u610f\u5916\u9020\u6210\u7684\u8cc7\u6599\u5916\u6d29\uff08Unintended Data Leakage\uff09","text":"
      • \u5c07\u88dd\u7f6e\u53ef\u6536\u96c6\u7684\u8cc7\u6599\u9650\u5236\u5728\u5176\u6240\u9700\u7684\u7bc4\u570d
      • \u5207\u52ff\u5c07\u654f\u611f\u8cc7\u6599\u5132\u5b58\u65bc\u516c\u5171\u5834\u6240
      • \u77ad\u89e3\u4e26\u5bc6\u5207\u76e3\u63a7\u60a8\u7684\u61c9\u7528\u7a0b\u5f0f\u8655\u7406\uff0c\u5982\uff1a\u526a\u4e0b - \u8cbc\u4e0a\u3001\u61c9\u7528\u7a0b\u5f0f\u80cc\u666f\u8655\u7406\u3001Cookie\u3001 URL \u5feb\u53d6\u53ca\u9375\u76e4\u6309\u4e0b\u5feb\u53d6\u7b49\u52d5\u4f5c
      "},{"location":"essay/web-security/owasp-mobile-risk-top10/#\u5ba2\u6236\u7aef\u6ce8\u5165client-side-injection","title":"\u5ba2\u6236\u7aef\u6ce8\u5165(Client Side Injection)","text":"
      • \u4f7f\u7528\u767d\u540d\u55ae\u65b9\u6cd5\u662f\u62b5\u64cb XSS
      • \u78ba\u4fdd\u4f7f\u7528\u8005\u8cc7\u6599\u901a\u904e\u53c3\u6578\u5316\u7684\u67e5\u8a62
      • \u9a57\u8b49\u4e26\u7de8\u78bc\u6240\u6709\u5132\u5b58\u5728\u88dd\u7f6e\u4e0a\u7684\u8cc7\u6599

      \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":"
      • \u907f\u514d\u4f7f\u7528\u88dd\u7f6e\u7684\u786c\u9ad4\u8b58\u5225\u78bc\u4f86\u7576\u4f5c Session \u503c
      • Session \u503c\u7684\u904e\u671f\u6642\u9593\u61c9\u8a2d\u5b9a\u5728\u4e00\u500b\u53ef\u63a5\u53d7\u7bc4\u570d\u5167
      • \u61c9\u6709\u80fd\u5920\u5feb\u901f\u64a4\u92b7 Token \u7684\u6a5f\u5236
      "},{"location":"essay/web-security/owasp-mobile-risk-top10/#\u5b89\u5168\u6c7a\u7b56\u662f\u7d93\u7531\u4e0d\u53d7\u4fe1\u4efb\u7684\u8f38\u5165security-decisions-via-untrusted-inputs","title":"\u5b89\u5168\u6c7a\u7b56\u662f\u7d93\u7531\u4e0d\u53d7\u4fe1\u4efb\u7684\u8f38\u5165\uff08Security Decisions Via Untrusted Inputs\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

      • \u5207\u52ff\u5c07\u7a0b\u5f0f\u78bc\u5132\u5b58\u5728\u4e0d\u53d7\u60a8\u63a7\u5236\u7684\u4e0d\u5b89\u5168\u74b0\u5883\u4e0b
      • \u78ba\u4fdd\u6b63\u78ba\u4f7f\u7528\u6191\u8b49\u7d81\u5b9a\u53ca\u5075\u932f\u5de5\u5177\u5075\u6e2c\u63a7\u5236
      • \u76e3\u63a7\u57f7\u884c\u968e\u6bb5\u7a0b\u5f0f\u78bc\u662f\u5426\u5728 App \u6d3b\u52d5\u4e2d\u51fa\u73fe\u7570\u5e38
      "},{"location":"essay/web-security/owasp-mobile-risk-top10/#\u5074\u901a\u9053\u8cc7\u6599\u6d29\u6f0fside-channel-data-leakage","title":"\u5074\u901a\u9053\u8cc7\u6599\u6d29\u6f0f\uff08Side Channel Data Leakage\uff09","text":"

      \u8cc7\u6599\u61c9\u907f\u514d\u81ea\u52d5\u5132\u5b58\u65bc\u53ef\u651c\u5f0f\u884c\u52d5\u88dd\u7f6e\u5167

      • \u7db2\u9801\u66ab\u5b58\uff08Web Cache\uff09
      • \u6309\u9375\u5074\u9304\uff08Keystorke Logging\uff09
      • \u64f7\u53d6\u756b\u9762\uff08Screenshots\uff09
      • \u65e5\u8a8c\u6a94\uff08Logs\uff09
      • \u66ab\u5b58\u76ee\u9304\uff08Temp Directories\uff09
      "},{"location":"essay/web-security/owasp-mobile-risk-top10/#\u654f\u611f\u8cc7\u8a0a\u6d29\u6f0fsensitive-informaiton-disclosure","title":"\u654f\u611f\u8cc7\u8a0a\u6d29\u6f0f\uff08Sensitive Informaiton Disclosure\uff09","text":"

      \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! \u5beb\u4f5c \u2605\u2605\u2605\u2606\u2606 Michael T. Nygard 2018-01 Adaptive Concurrency \u5b8c\u6210 \u5fc3\u5f97 2022-07"},{"location":"feedback/#\u60f3\u8b80","title":"\u60f3\u8b80","text":"
      • Modern CPU Design
      • Blue Green Test - Netflix
      • The Pragmatic Programmer
      • Site Reliability Engineering
      • The Site Reliability Workbook, Practical Ways to Implement SRE
      "},{"location":"feedback/#\u8b80\u5b8c","title":"\u8b80\u5b8c","text":"

      \u8b80\u5b8c\u66f8\uff0c\u4f46\u662f\u9084\u6c92\u958b\u59cb\u5beb\u5fc3\u5f97\u3002

      • Implementation Patterns
      • Stream Processing, CEP, Event Sourcing, and Data Streaming Explained
      • DataHub - LinkedIn
      • \u4f5b\u9640\u548c\u539f\u59cb\u4f5b\u6559\u601d\u60f3 - \u90ed\u826f\u92c6
      • \u8ad6\u8a9e
      "},{"location":"feedback/#\u5beb\u4f5c","title":"\u5beb\u4f5c","text":"

      \u958b\u59cb\u5beb\u4f5c\uff08\u53ef\u80fd\u8b80\u5b8c\u4e5f\u53ef\u80fd\u9084\u6c92\u8b80\u5b8c\uff09\u3002

      • Future Of Fusion Energy
      • Release It!
      "},{"location":"feedback/#\u5b8c\u6210","title":"\u5b8c\u6210","text":"

      \u8b80\u5b8c\u4e14\u5beb\u5b8c\u5fc3\u5f97\u3002

      • Distributed Systems with Node.js
      • Designing Data-intensive Applications
      • Adaptive Concurrency
      "},{"location":"feedback/adaptive-concurrency/","title":"\u9069\u61c9\u6027\u4e26\u884c\u8655\u7406","text":"

      \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

      • \u51b7\u6c23\u58de\u6389\uff0c\u539f\u672c\u5341\u5206\u9418\u53ef\u4ee5\u8655\u7406\u4e00\u4f4d\u9867\u5ba2\uff0c\u56e0\u70ba\u7169\u60b6\u6240\u4ee5\u73fe\u5728\u5341\u4e94\u5206\u9418\u624d\u80fd\u5b8c\u6210
      • \u6578\u6284\u6a5f\u58de\u6389\uff0c\u6bd4\u51b7\u6c23\u58de\u6389\u66f4\u7cdf\uff0c\u73fe\u5728\u4e09\u5341\u5206\u9418\u624d\u80fd\u8655\u7406\u4e00\u4f4d\u9867\u5ba2
      • \u884c\u54e1\u81e8\u6642\u8acb\u5047\uff0c\u9280\u884c\u73fe\u5728\u5b8c\u5168\u6c92\u8fa6\u6cd5\u8655\u7406\u9867\u5ba2\u7684\u696d\u52d9\u4e86
      • \u67d0\u653f\u7b56\u7684\u57f7\u884c\uff0c\u5c0e\u81f4\u696d\u52d9\u91cf\u5927\u589e\uff0c\u9867\u5ba2\u6578\u91cf\u591a\u5230\u4f60\u548c\u884c\u54e1\u90fd\u6c92\u8fa6\u6cd5\u8ca0\u8377
      • \u9867\u5ba2\u56e0\u70ba\u7b49\u592a\u4e45\u4e86\uff0c\u628a\u4f60\u6293\u51fa\u4f86\u81ed\u7f75\u4e00\u9813

      \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

      • \u67d0\u500b\u670d\u52d9\u7684\u8acb\u6c42\u7a81\u7136\u589e\u52a0\uff0c\u5c0e\u81f4\u4e0a\u6e38\u670d\u52d9\u548c APIM \u672c\u8eab\u7684\u8ca0\u8f09\u80fd\u529b\u53d7\u5230\u6311\u6230
      • \u8acb\u6c42\u7684\u7e3d\u91cf\u7a81\u7136\u589e\u52a0\uff0c\u539f\u56e0\u53ef\u80fd\u4e0d\u6b62\u662f\u5916\u5728\u56e0\u7d20\uff0c\u4e5f\u6709\u53ef\u80fd\u662f\u524d\u7aef\u7684 bug
      • \u4e0a\u6e38\u670d\u52d9\u56de\u61c9\u901f\u5ea6\u8b8a\u6162\u4e86\uff0c\u4e0d\u7ba1\u662f\u670d\u52d9\u672c\u8eab\u7684\u8655\u7406\u901f\u5ea6\u964d\u4f4e\u3001\u6709\u7a0b\u5f0f\u4e0a\u7684\u932f\u6216\u8005\u7db2\u8def\u74b0\u5883\u7b49\u7b49\u3002

      \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

      "},{"location":"feedback/adaptive-concurrency/#aimd","title":"AIMD","text":"

      \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

      "},{"location":"feedback/adaptive-concurrency/#\u6bd4\u8f03","title":"\u6bd4\u8f03","text":"

      \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

      • \u900f\u904e\u5916\u90e8\u7684\u8cc7\u6599\u5eab\u4f86\u5132\u5b58\u9019\u4e9b\u72c0\u614b\uff0c\u4f8b\u5982 Redis\u3001Dragonfly\u3002\u628a\u64f4\u5c55\u6027\u7684\u554f\u984c\u4e1f\u7d66\u8cc7\u6599\u5eab\u3002
      • \u7559\u8a00\u5354\u8b70\uff08Gossip\uff09\uff0c\u8b93\u5404\u500b\u7bc0\u9ede\u5f7c\u6b64\u6e9d\u901a\u5354\u8abf\u5404\u81ea\u7684\u72c0\u614b\uff0c\u4ed6\u4e0d\u50cf\u5171\u8b58\u6f14\u7b97\u6cd5\u9019\u9ebc\u56b4\u8b39\u3002
      • \u5354\u8abf\u8005\uff0c\u628a\u8cc7\u6599\u7684\u8655\u7406\u4e1f\u7d66\u4e00\u500b\u5916\u90e8\u5354\u8abf\u8005\uff0c\u5f88\u50cf\u8cc7\u6599\u5eab\uff0c\u4f46\u9019\u5354\u8abf\u8005\u662f\u4e00\u7a2e\u61c9\u7528\u7a0b\u5f0f\u3002
      • \u76f8\u5c0d\u65bc\u5354\u8abf\u8005\uff0c\u4f60\u53ef\u4ee5\u5728\u53e2\u96c6\u5167\u90e8\u63a8\u8209\u4e00\u500b\u6216\u591a\u500b\u9818\u8896\u4f86\u6c7a\u5b9a\u9650\u6d41\u7684\u72c0\u614b\uff0c\u4f46\u662f\u9818\u8896\u7684\u9078\u64c7\u9700\u8981\u5171\u8b58\u6f14\u7b97\u6cd5\u3002
      • \u653e\u68c4\u6e96\u78ba\u6027\uff0c\u8b93\u5404\u500b\u7bc0\u9ede\u8655\u7406\u5404\u81ea\u7684\u72c0\u614b\uff0c\u4f8b\u5982\u539f\u672c\u6bcf\u500b\u4f7f\u7528\u8005\u6bcf\u79d2\u9650\u5236 100 \u500b\u8acb\u6c42\uff0c\u7576\u5206\u6563\u5230\u56db\u500b\u7bc0\u9ede\u5c31\u662f\u9650\u5236\u6bcf\u500b\u4f7f\u7528\u8005\u6bcf\u79d2 25 \u500b\u8acb\u6c42

      \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

      • \u4e0d\u540c\u7684\u8acb\u6c42\uff0c\u53ef\u80fd\u6703\u6709\u4e0d\u540c\u7684\u512a\u5148\u7a0b\u5ea6\uff0c\u4f8b\u5982 VIP \u6703\u54e1\u3002
      • \u6839\u64da\u4e0d\u540c\u529f\u80fd\uff0c\u6f5b\u6642\u53ef\u80fd\u6703\u6709\u4e0d\u540c\u7684\u9ad8\u4f4e\uff0c\u6240\u4ee5\u4e0d\u53ea\u662f\u6839\u64da\u670d\u52d9\u8a18\u9304\u6f5b\u6642\uff0c\u751a\u81f3\u8981\u6839\u64da\u4e0d\u540c path \u7d00\u9304\u6f5b\u6642\u3002
      • \u524d\u9762\u63d0\u7684\u5229\u7528\u7387\uff0c\u5f88\u7c21\u55ae\u7684\u628a 100 \u500b\u9650\u5236\u5206\u6210 80/80\uff0c\u6709\u6c92\u6709\u66f4\u597d\u6216\u66f4\u901a\u7528\u7684\u5206\u6cd5\uff1f

      \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

      • trace \u53ef\u4ee5\u77e5\u9053\u9019\u500b\u8acb\u6c42\u662f\u6bcf\u500b\u9023\u7dda\u90fd\u6162\u9084\u662f\u600e\u6a23
      • metrics \u53ef\u4ee5\u77e5\u9053\u61c9\u7528\u6574\u9ad4\u72c0\u6cc1

      \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

      • \u628a\u8a2d\u5b9a\u8b8a\u6210 code\uff0c\u653e\u8fd1 VCS\uff0c\u52a0\u4e0a lint\u3002
      • \u8b93\u591a\u5718\u968a\u7684 metrics \u76e1\u91cf\u4e00\u81f4\u3002
      • \u7368\u7acb\u5404\u500b component\uff1a
      • collecting: statsd, Prometheus
      • storing: Prometheus, InfluxDB(long term)
      • dashboarding: Grafana, Viceroy
      • alerting: Alertmanager
      • \u5b9a\u671f\u8b93\u67d0\u500b\u670d\u52d9\u58de\u6389\u6216\u67d0\u500b\u6307\u6a19\u8d85\u904e\u95a5\u503c\uff0c\u78ba\u4fdd\u4f60\u7684 alert \u6709\u901a\u77e5\u5230\u5c0d\u7684\u5718\u968a
      • \u78ba\u4fdd\u8cc7\u6599\u7684\u5373\u6642\u6027\uff0c\u624d\u80fd\u5728\u7b2c\u4e00\u6642\u9593\u5f97\u5230\u8b66\u8a0a

      metrics \u6ce8\u610f\u56db\u5927\u6307\u6a19\uff1a

      • \u4f60\u7684\u670d\u52d9\u672c\u8eab
      • \u4f60\u7684\u4f9d\u8cf4
      • \u7e3d\u800c\u8a00\u4e4b\uff0c\u78ba\u4fdd\u6bcf\u500b\u6307\u6a19\u90fd\u6709\u500b\u76ee\u7684

      \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

      • \u8b80\u53d6\u524d\u5341\u5206\u9418\u7684\u8cc7\u6599\u6aa2\u67e5\u73fe\u5728\u932f\u8aa4\u7387\u662f\u4e0d\u662f\u5927\u65bc 0.1%\u3002 \u4f46\u5be6\u969b\u4e0a\uff0c\u9019\u500b\u5341\u5206\u9418\u7684\u300c\u932f\u8aa4\u91cf\u300d\u53ef\u80fd\u53ea\u4f54 30 \u5929\u7684\u56db\u5343\u5206\u4e4b\u4e00\uff0c\u5bb9\u6613\u9020\u6210 False Alarm\u3002 \u63db\u53e5\u8a71\u8aaa\uff0c\u4f60\u53ef\u80fd\u53ef\u4ee5\u6bcf\u5929\u6536\u5230 6*24 \u500b\u8b66\u544a\uff0c\u800c\u4ecd\u80fd\u6eff\u8db3\u4f60\u7684 error budget
      • \u6539\u6210\u4e09\u5341\u516d\u5c0f\u6642\u7684\u8cc7\u6599\uff1a
      • \u4e09\u5c0f\u6642\u4fee\u5fa9\u597d\u7684\u932f\u8aa4\uff0c\u6703\u5728\u63a5\u4e0b\u4f86\u7684\u4e09\u5341\u4e09\u500b\u5c0f\u6642\u4e00\u76f4\u53eb
      • \u8017\u8cbb\u5927\u91cf\u8a08\u7b97\u8cc7\u6e90
      • \u6539\u6210\u6bcf\u5c0f\u6642\u6aa2\u67e5\u4e00\u6b21\uff0c\u4f46\u6703\u8b93\u8b66\u544a\u592a\u665a\u6536\u5230

      \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

      • \u5047\u8a2d\u8a8d\u70ba\u6bcf\u5c0f\u6642\u6d88\u8017\u6389 5% \u7684 error budget \u662f\u56b4\u91cd\u4e14\u9700\u8981\u544a\u8b66\u7684\uff0c\u5c31\u8a08\u7b97\uff1a burn rate \u70ba 36\uff08\\(\\frac{30 day*24hr/day}{1hr}* 5\\%\\)\uff09\u3002 \u4f46\u4ecd\u6703\u6709\u554f\u984c\uff1a
      • burn rate 36 \u4ee5\u4e0b\u7684\u932f\u8aa4\u5c31\u4e0d\u6703\u88ab\u544a\u77e5\uff0c \u7136\u800c\u5979\u53ea\u9700\u7d04 20 \u5c0f\u6642\u5c31\u6703\u628a\u4f60\u7684 error budget \u5403\u6389\u3002 \uff08\u4f4e\u932f\u8aa4\u7387\u800c\u9577\u671f\u5b58\u5728\u7684\u6f0f\u6d1e\uff09
      • 58 \u5206\u9418\uff08\\(60 - 0.001*60*36\\)\uff09\u7684 reset time \u4ecd\u592a\u9577
      • \u591a\u7b49\u7d1a\u7684\u95a5\u503c\uff1a2/5/10% \u7684\u932f\u8aa4\u7387\u3001\u6bcf 1/6/36 \u5c0f\u6642\u7684\u8cc7\u6599\u300114.4/6/1 \u7684 burn rate\uff1a
      • \u7f3a\u9ede\u5c31\u662f\u5f88\u591a\u6578\u503c\u9700\u8981\u53bb\u53c3\u8003\u3001\u8a2d\u5b9a\u548c\u8aaa\u670d
      • reset time \u4ecd\u672a\u6e1b\u5c11
      • \u53ef\u80fd\u4e00\u6b21\u89f8\u767c\u4e09\u500b\u544a\u8b66
      • \u642d\u914d\u77ed\u6642\u9593\u7684 AND \u908f\u8f2f\uff0c\u4f8b\u5982\uff1a
      • \u6bcf\u5c0f\u6642 > 2%\u300c\u4e14\u300d\u6bcf\u4e94\u5206\u9418 > 2%
      • \u6bcf\u516d\u5c0f\u6642 > 5%\u300c\u4e14\u300d\u6bcf\u4e09\u5341\u5206\u9418 > 5%
      • \u6bcf\u4e09\u5929 > 10%\u300c\u4e14\u300d\u6bcf\u5169\u5c0f\u6642 > 10%

      \u4f4e\u6d41\u91cf\u7684\u89e3\u6cd5\uff1a

      • \u4eba\u5de5\u6d41\u91cf\uff0c\u4f46\u7f3a\u9ede\uff1a
      • \u670d\u52d9\u5f88\u8907\u96dc\uff0c\u507d\u9020\u7684\u6d41\u91cf\u901a\u5e38\u53ea\u5305\u542b\u4e00\u90e8\u5206\u7684\u8acb\u6c42
      • \u507d\u9020\u7684\u6d41\u91cf\u6703\u8b93\u771f\u5be6\u7684\u932f\u8aa4\u7387\u4e0b\u964d
      • \u6574\u5408\u670d\u52d9\uff0c\u628a\u591a\u500b\u5c0f\u7684\u670d\u52d9\uff08\u64c1\u6709\u76f8\u4f3c\u76f8\u4f9d\uff0c\u4f8b\u5982\u8cc7\u6599\u5eab\uff09\u6574\u5408\u9032\u5927\u7684\u76e3\u63a7\u7cfb\u7d71\uff0c\u53bb\u8a08\u7b97 SLO
      • \u81ea\u52d5\u91cd\u65b0\u9001\u51fa\u8acb\u6c42\uff08retry\uff09\uff0c\u907f\u514d\u66ab\u6642\u6027\u7684\u932f\u8aa4\u5f71\u97ff\u4f7f\u7528\u8005
      • \u964d\u4f4e SLO \u6216\u62c9\u9577\u6642\u9593\u8ef8\u4f86\u505a\u5206\u6790

      \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

      • \u6848\u4f8b\u5206\u4eab\uff0c \u900f\u904e\u4e00\u4e9b\u6848\u4f8b\u5206\u4eab\uff0c\u66b8\u89e3\u54ea\u4e9b\u8a2d\u8a08\u6703\u8b93\u670d\u52d9\u96e3\u4ee5\u7dad\u904b\u3002
      • \u904b\u884c\u74b0\u5883\uff0c \u5f9e\u5be6\u9ad4\u3001\u7db2\u8def\u3001\u55ae\u4e00\u7bc0\u9ede\u3001\u591a\u7bc0\u9ede\u518d\u5230\u8abf\u5ea6\u5de5\u5177\u7684\u61c9\u7528\u7b56\u7565\u548c\u7dad\u904b\u6ce8\u610f\u4e8b\u9805\u3002
      • \u9069\u61c9\u529b\uff0c \u5f9e\u6574\u9ad4\u7cfb\u7d71\u53bb\u89e3\u5256\u53ef\u4ee5\u6539\u5584\u7684\u9ede\uff0c\u5305\u62ec\u4f01\u696d\u67b6\u69cb\u3001\u670d\u52d9\u67b6\u69cb\u3001\u8cc7\u6599\u67b6\u69cb\u3002
      "},{"location":"feedback/release-it/#\u6848\u4f8b\u5206\u4eab","title":"\u6848\u4f8b\u5206\u4eab","text":"

      \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

      • \u4f7f\u7528\u5927\u5bb6\u90fd\u5728\u7528\uff08\u958b\u6e90\uff09\u7684\u9023\u7dda\u6c60\u7ba1\u7406\u5de5\u5177\uff1b
      • \u907f\u514d\u9023\u9396\u5f0f\u53cd\u61c9\u5f71\u97ff\u5176\u4ed6\u670d\u52d9\uff0c\u4f8b\u5982 \u8259\u58c1\u8a2d\u8a08\u539f\u5247\uff08bulkheads\uff09\u3001\u6bcf\u500b\u8cc7\u6599\u5eab\u7528\u81ea\u5df1\u7684\u9023\u7dda\u6c60\uff1b
      • \u8abf\u6574\u8cc7\u6599\u67b6\u69cb\uff0c\u4f8b\u5982\u4e8b\u4ef6\u6a5f\u5236\uff1b
      • \u76e3\u63a7\u5404\u500b\u4f9d\u8cf4\u7684\u9023\u7dda\uff08\u8acb\u6c42\uff09\u6578\uff0c\u51fa\u554f\u984c\u53ef\u4ee5\u5feb\u901f\u5b9a\u4f4d\u3002
      \u95dc\u65bc\u9023\u7dda\u6c60

      \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

      "},{"location":"feedback/release-it/#\u5c01\u5305\u88ab\u4e1f\u68c4","title":"\u5c01\u5305\u88ab\u4e1f\u68c4","text":"

      \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

      • TCP keep-alive\uff0c\u6536\u4e0d\u5230\u5c01\u5305\u5c31\u91cd\u5efa\uff1b
      • \u4ee5 MongoDB \u70ba\u4f8b\uff0c\u5b83\u5c31\u6709 keep-alive \u9019\u500b\u6a5f\u5236\u7684\u9078\u9805\uff08\u9810\u8a2d\u6c92\u958b\uff09\uff1b
      • \u76e3\u63a7\u5404\u500b\u4f9d\u8cf4\u7684\u9023\u7dda\uff08\u8acb\u6c42\uff09\u6578\uff0c\u51fa\u554f\u984c\u53ef\u4ee5\u5feb\u901f\u5b9a\u4f4d\u3002
      "},{"location":"feedback/release-it/#\u884c\u70ba\u5806\u7a4d","title":"\u884c\u70ba\u5806\u7a4d","text":"

      \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

      • \u4f7f\u7528 \u8259\u58c1\u8a2d\u8a08\u539f\u5247\uff1b
      • Auto Scaling\uff1b
      • \u505a\u5b8c\u5584\u7684\u8ca0\u8f09\u6e2c\u8a66\u3002
      "},{"location":"feedback/release-it/#\u932f\u8aa4\u544a\u77e5\u7fa9\u52d9","title":"\u932f\u8aa4\u544a\u77e5\u7fa9\u52d9","text":"

      \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

      • \u6ce8\u610f\u9023\u7dda\u6c60\u4e2d\u7684\u9023\u7dda\u751f\u6ec5\u548c\u505c\u64fa\uff1b
      • \u660e\u78ba\u544a\u77e5\u8acb\u6c42\u65b9\uff0c\u5373\u4f7f\u91cd\u9001\u4e00\u6b21\uff0c\u9019\u500b\u8acb\u6c42\u4e5f\u4e0d\u6703\u88ab\u653e\u884c\uff1b
      • \u63d0\u65e9\u628a\u932f\u8aa4\u56de\u7d66\u8acb\u6c42\u7aef\uff0c\u907f\u514d\u52a0\u91cd\u5f8c\u7aef\u670d\u52d9\u7684\u8ca0\u8f09\uff0c\u4f8b\u5982\u9069\u61c9\u6027\u4e26\u884c\u8655\u7406
      "},{"location":"feedback/release-it/#session","title":"Session","text":"

      \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

      • \u5efa\u7f6e\u9632\u79a6 DDoS \u6a5f\u5236\uff1b
      • \u8b93\u524d\u7aef\uff08SPA \u6216 SSR\uff09\u900f\u904e JS \u9001\u8acb\u6c42\u4f86\u5efa\u7acb session\uff0c \u5c07\u4f4e\u975e\u4eba\u985e\u8acb\u6c42\u53bb\u5efa\u7acb session \u7684\u53ef\u80fd\uff1b
      • \u8259\u58c1\u8a2d\u8a08\u539f\u5247\uff0c\u907f\u514d\u670d\u52d9\u7684\u5931\u80fd\u3002
      "},{"location":"feedback/release-it/#\u670d\u52d9\u91cd\u555f\u5f8c\u7684\u8017\u80fd\u9ad8\u5cf0","title":"\u670d\u52d9\u91cd\u555f\u5f8c\u7684\u8017\u80fd\u9ad8\u5cf0","text":"

      \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

      • \u9010\u53f0\u958b\u6a5f\uff1b
      • \u63d2\u4e0a\u87ba\u7d72\u8d77\u5b50\u907f\u514d\u65b7\u8def\u5668\u8df3\u96fb\uff0c\u540c\u6642\u52a0\u5f37\u51b7\u6c23\u6a5f\u548c\u98a8\u6247\u907f\u514d\u904e\u71b1\u3002
      "},{"location":"feedback/release-it/#\u932f\u8aa4\u914d\u7f6e","title":"\u932f\u8aa4\u914d\u7f6e","text":"

      \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

      • \u975e\u9810\u671f\u6642\u9593\u964d\u8f09\u6642\uff0c\u901a\u77e5\u7ba1\u7406\u8005\uff1b
      • \u964d\u4f4e\u81ea\u52d5\u5316\u7684\u6b0a\u9650\uff0c\u4f8b\u5982\u505a\u5927\u898f\u6a21\u66f4\u52d5\u6642\uff0c\u9700\u8981\u624b\u52d5\u4ecb\u5165\uff1b
      • \u78ba\u4fdd\u670d\u52d9\u6709\u8db3\u5920\u6642\u9593\u6696\u8eab\uff0c\u4f8b\u5982\u5148\u505a\u597d\u5feb\u53d6\u3002
      "},{"location":"feedback/release-it/#\u8655\u7406\u975e\u9810\u671f\u7684\u5927\u91cf\u8cc7\u6599","title":"\u8655\u7406\u975e\u9810\u671f\u7684\u5927\u91cf\u8cc7\u6599","text":"

      \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

      • \u4e0d\u8981\u76f8\u4fe1\u6240\u6709\u5916\u90e8\u8cc7\u6599\uff1b
      • \u78ba\u4fdd\u9650\u5236\u61c9\u7528\u5c64\u5354\u5b9a\u50b3\u8f38\u7684\u5927\u5c0f\u3002
      "},{"location":"feedback/release-it/#\u5ffd\u7565\u61c9\u6ce8\u610f\u7684\u932f\u8aa4","title":"\u5ffd\u7565\u61c9\u6ce8\u610f\u7684\u932f\u8aa4","text":"

      \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

      • \u8b39\u8a18 Throw early, catch late \u539f\u5247\uff1b
      • \u9810\u5148\u8981\u5230\u61c9\u6709\u7684\u8cc7\u6e90\uff0c\u7576\u7121\u6cd5\u5f97\u5230\u6642\uff0c\u5c31\u5148\u4e1f\u932f\uff0c\u4e0d\u9032\u884c\u904b\u7b97\u3002
      "},{"location":"feedback/release-it/#\u8cc7\u6e90\u914d\u7f6e\u7684\u9ad8\u5ea6\u4f9d\u8cf4","title":"\u8cc7\u6e90\u914d\u7f6e\u7684\u9ad8\u5ea6\u4f9d\u8cf4","text":"

      \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

      • \u5206\u6563\u9023\u7dda\u6c60\u7d66\u4e0d\u540c\u670d\u52d9\uff1b
      • \u76e3\u63a7\u5404\u500b\u4f9d\u8cf4\u7684\u9023\u7dda\uff08\u8acb\u6c42\uff09\u6578\uff0c\u51fa\u554f\u984c\u53ef\u4ee5\u5feb\u901f\u5b9a\u4f4d\u3002
      "},{"location":"feedback/release-it/#\u4f4e\u4f30\u53ef\u80fd\u7684\u4f86\u6e90\u6578","title":"\u4f4e\u4f30\u53ef\u80fd\u7684\u4f86\u6e90\u6578","text":"

      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

      • \u641c\u5c0b\u5f15\u64ce\uff08\u4f8b\u5982 Google\uff09\u5c0e\u6d41\u9032\u4f86\u7684\u91cf\u7d04\u4f54\u56db\u6210\uff0c\u7136\u800c\u4ed6\u5011\u64c1\u6709\u7684\u7db2\u5740\u537b\u662f\u820a\u7684\u3002 \u9019\u6642\u4f7f\u7528\u8005\u9032\u4f86\u7684\u662f 404 \u7684\u756b\u9762\u3002\u4f46\u662f\uff01\u5b83\u4ecd\u7136\u6703\u5efa\u7acb session\u3002
      • \u641c\u5c0b\u5f15\u64ce\u6ce8\u610f\u5230 404 \u5f8c\uff0c\u958b\u59cb\u6e05\u9664\u5feb\u53d6\uff0c\u91cd\u65b0\u6d3e\u51fa\u722c\u87f2\u5c16\u5175\u53bb\u722c\u4f60\u7684\u7db2\u7ad9\uff0c\u52a0\u91cd\u8ca0\u64d4\u3002
      • \u7af6\u696d\u7684\u722c\u87f2\u4f86\u722c\u4f60\u7684\u8cc7\u6599\uff08\u4e3b\u8981\u662f\u7522\u54c1\u552e\u50f9\uff0c\u4ee5\u5229\u505a\u6bcf\u65e5\u7af6\u696d\u5831\u8868\uff09\u3002
      • \u9084\u6709\u5f88\u5927\u4e00\u90e8\u5206\u7684 session \u4e0d\u77e5\u5f9e\u4f55\u800c\u4f86\uff0c\u4f8b\u5982\u700f\u89bd\u5668\u7684\u5957\u4ef6\u932f\u8aa4\uff0c\u4f46\u5c31\u662f\u624b\u52d5\u628a\u5b83\u79fb\u9664\u3002 \u5c31\u7b97\u8b93\u4e00\u500b\u4f7f\u7528\u8005\u7684\u9ad4\u9a57\u5f88\u7cdf\uff0c\u7e3d\u597d\u904e\u8b93\u5927\u5bb6\u90fd\u4e0d\u80fd\u7528\u3002

      \u6211\u8a8d\u70ba\u4e8b\u4ef6\u4e3b\u8981\u6b78\u56e0\u65bc\u5e7e\u9ede\uff1a

      • \u7f3a\u4e4f\u9632\u885b\u6a5f\u5236\uff0c\u4f8b\u5982\u9069\u61c9\u6027\u4e26\u884c\u8655\u7406\uff1b
      • \u7f3a\u4e4f\u820a\u7db2\u7ad9\u7684\u4e26\u884c\uff0c\u4e26\u9010\u6f38\u5c0e\u6d41\uff1b
      • \u904e\u65bc\u5bec\u9b06\u7684 session \u5efa\u7acb\u6a5f\u5236\uff0c\u53ef\u4ee5\u8a66\u8457\u628a\u641c\u5c0b\u7d00\u9304\u653e\u5728 URL \u7684 query \u4e0a\u3002
      \u6211\u81ea\u5df1\u5f9e\u4e2d\u5ef6\u4f38\uff0c\u60f3\u505a\u7684\u4e8b

      \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

      • \u62d2\u7d55\u9023\u7dda\uff08\u9023\u7dda\u524d\u6216\u5f8c\uff09\uff0cTCP RST \u6216\u5176\u4ed6\u53ef\u80fd\uff1b
      • \u6392\u5f97\u9032\u5e8f\u5217\u88e1\uff0c\u4f46\u662f\u4e0d\u6703\u88ab\u5be6\u969b\u57f7\u884c\uff1b
      • \u53ea\u6703\u56de TCP SYN \u6216 ACK \u7684\u8a0a\u865f\uff1b
      • \u5efa\u7acb\u9023\u7dda\u5f8c\u4e0d\u9001\u4efb\u4f55\u8cc7\u6599\uff1b
      • \u5efa\u7acb\u9023\u7dda\u5f8c\u4e00\u76f4\u4e0d\u56de ACK\uff0c\u5c0e\u81f4\u4e00\u76f4\u91cd\u65b0\u767c\u9001\uff08retransmission\uff09\uff1b
      • \u53ea\u6703\u56de HTTP Header \u800c\u6c92\u6709 body\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

      • \u96fb\u8166\u548c\u7db2\u8def
      • \u55ae\u4e00\u7bc0\u9ede
      • \u53e2\u96c6
      • \u53e2\u96c6\u63a7\u5236\uff08\u6216\u8005 control plan\uff09
      • \u53e2\u96c6\u7ba1\u7406
      "},{"location":"feedback/release-it/#\u96fb\u8166\u548c\u7db2\u8def","title":"\u96fb\u8166\u548c\u7db2\u8def","text":"

      \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

      • \u7db2\u8def\uff1a\u5167\u5bb9\u5305\u62ec\u91d0\u6e05\u4e3b\u6a5f\u540d\uff08hostname\uff09\u3001IP \u7b49\u7b49\u3002
      • \u904b\u884c\u63a7\u5236\uff08runtime control\uff09\uff1a\u4ecb\u7d39\u5be6\u9ad4\u6a5f\u3001\u865b\u64ec\u6a5f\u3001\u5bb9\u5668\u3001\u96f2\u7aef\u7684\u5dee\u7570\u3002
      "},{"location":"feedback/release-it/#\u7db2\u8def","title":"\u7db2\u8def","text":"

      \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

      • Domain \u662f\u5916\u90e8\u7db2\u5740\uff0c\u900f\u904e DNS \u89e3\u6790 IP \u5f8c\u8def\u7531\u5230\u6307\u5b9a\u7bc0\u9ede\u7684\u540d\u7a31\uff1b
      • Hostname \u662f\u4e3b\u6a5f\u540d\u7a31\uff0c\u4e00\u53f0\u4e3b\u6a5f\u53ea\u6703\u6709\u4e00\u500b\u540d\u7a31\uff0c\u4f60\u53ef\u4ee5\u900f\u904e\u4e0b\u6307\u4ee4 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

      "},{"location":"feedback/release-it/#\u904b\u884c\u63a7\u5236","title":"\u904b\u884c\u63a7\u5236","text":"

      \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

      • \u5bb9\u5668\u9810\u671f\u662f\u5feb\u901f\u751f\u6ec5\u7684\uff0c\u670d\u52d9\u61c9\u8a72\u907f\u514d\u904e\u4e45\u7684\u555f\u52d5\u548c\u95dc\u9589\u3002
      • \u9664\u932f\u662f\u56f0\u96e3\u7684\uff0c\u5982\u679c\u4f60\u6709\u767c\u751f\u904e\u7dda\u4e0a\u554f\u984c\uff0c\u4f60\u6703\u767c\u73fe\u9032\u53bb\u5bb9\u5668\u5f8c\u7c21\u76f4\u4e00\u7c4c\u83ab\u5c55\uff0c \u56e0\u70ba\u88e1\u9762\u7684\u74b0\u5883\u4e7e\u6de8\u5230\u5f88\u96e3\u505a\u4e9b\u4ec0\u9ebc\u4e8b\u60c5\u3002
      • \u7db2\u8def\u662f\u8907\u96dc\u7684\uff0c\u7531\u65bc\u5728\u4e3b\u6a5f\u4e0a\u53c8\u642d\u8f09\u4e86\u5f88\u591a\u7db2\u8def\u6a4b\u63a5\uff08bridge\uff09\uff0c\u6709\u6642\u5c01\u5305\u7684\u6d41\u5411\u5f88\u96e3\u8ffd\u8e64\u3002

      \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

      • \u4f60\u7684\u865b\u64ec\u6a5f\u53ef\u80fd\u6703\u56e0\u70ba\u71df\u904b\u65b9\u7684\u7ba1\u7406\u56e0\u7d20\u88ab\u8981\u6c42\u91cd\u65b0\u555f\u52d5\u3002
      • \u5c31\u50cf\u5bb9\u5668\u4e00\u6a23\uff0c\u4f60\u5728\u96f2\u7aef\u4e0a\u7684\u6a5f\u5668\u4e0d\u6703\u6709\u56fa\u5b9a\u7684 IP\uff0c\u9664\u975e\u82b1\u9322\u53bb\u79df\u8cc3\u3002
      • \u901a\u5e38\u4e00\u53f0\u6a5f\u5668\u914d\u4e0a\u4e00\u500b\uff08\u865b\u64ec\uff09NIC\uff0c\u6240\u4ee5\u4f60\u53ea\u6703\u62ff\u5230\u4e00\u500b\u79c1\u6709 IP\uff0c\u4f46\u6709\u6642\u61c9\u7528\u7684\u9700\u6c42\u9700\u8981\u591a\u5f35 NIC\u3002

      \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

      • \u7a0b\u5f0f\u78bc\u8981\u653e\u5728\u7248\u672c\u63a7\u5236\uff08version control\uff09\u4e2d\uff0c\u5225\u585e\u6a5f\u654f\u8cc7\u8a0a\u3002
      • \u90e8\u7f72\u8981\u81ea\u52d5\u5316\uff0c\u4e26\u78ba\u4fdd\u4f9d\u8cf4\u548c\u63d2\u4ef6\u7684\u5b89\u5168\u6027\u3002
      • \u6bd4\u8d77\u904b\u884c\u63a7\u5236\u96a8\u8457\u6642\u9593\u6539\u8b8a\uff0c\u6bcf\u6b21\u6539\u8b8a\u90fd\u662f\u5f9e\u7279\u5b9a\u72c0\u614b\u5ef6\u4f38\uff0c\u66f4\u70ba\u5b89\u5168\u6709\u6548\uff1a
      • \u5c0f\u670d\u52d9\u8a2d\u5b9a\u6a94\u7528\u6ce8\u5165\uff08\u6a94\u6848\u6216\u74b0\u5883\u8b8a\u6578\uff09\uff1b \u5927\uff08\u591a\u500b\u5fae\uff09\u670d\u52d9\u53ef\u4ee5\u7528\u5c08\u9580\u670d\u52d9\u4f86\u66ff\u4ee3\uff08Consul\u3001ZooKeeper \u6216 etcd\uff09\u3002

      \u76e3\u63a7\u7e3d\u7d50\u5e7e\u9ede\u6ce8\u610f\uff1a

      • \u5728\u61c9\u7528\u8a2d\u8a08\u4e4b\u521d\u5c31\u8981\u5efa\u7acb\u65e5\u8a8c\uff08log\uff09\u3001\u6e2c\u5ea6\uff08metrics\uff09\u548c\u76e3\u63a7\uff08alert\uff09\u7684\u67b6\u69cb\u3002
      • \u907f\u514d\u65e5\u8a8c\u3001\u6e2c\u5ea6\u7684\u8f38\u51fa\u548c\u89c0\u6e2c\u4e4b\u9593\u7684\u8026\u5408\u5316\uff0c\u4e5f\u5c31\u662f\u5728\u8abf\u6574\u89c0\u6e2c\u6307\u6a19\u7684\u6642\u5019\uff0c\u4e0d\u9700\u8981\u6539\u61c9\u7528\u7a0b\u5f0f\u3002
      • \u5beb\u65e5\u8a8c\u662f\u6700\u76f4\u63a5\u89c0\u5bdf\u61c9\u7528\u7684\u884c\u70ba\u7684\u65b9\u5f0f\uff0c\u6709\u5e7e\u9ede\u6ce8\u610f\uff1a
      • \u65e5\u8a8c\u4f4d\u7f6e\u6700\u597d\u5728\u61c9\u7528\u7684\u4f4d\u7f6e\u4e4b\u5916\uff08/var/logs\uff09\uff0c\u5bb9\u5668\u7684\u8a71\u55ae\u7d14\u8f38\u51fa\u5230 stdout \u5c31\u53ef\u4ee5\u3002
      • \u4e0d\u8981\u8b93 error \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
      • \u5beb\u6e05\u695a\u4e00\u9ede\uff0c\u56e0\u70ba\u7dca\u6025\u72c0\u6cc1\u6703\u8b93\u5224\u65b7\u529b\u4e0b\u964d\u3002
      • \u540c\u4e00\u500b\u8acb\u6c42\u7684\u65e5\u8a8c\u8981\u6709 trace ID\uff08\u901a\u5e38\u8f03 correlation ID\uff09\u6a19\u793a\u3002
      • \u66b4\u9732\u5065\u5eb7\u6aa2\u67e5\u63a5\u53e3\uff0c\u5305\u62ec\u61c9\u7528\u7a0b\u5f0f\u7684\u9023\u7dda\u72c0\u6cc1\u3001IP\u3001\u7248\u672c\u8cc7\u8a0a\u3002
      "},{"location":"feedback/release-it/#\u53e2\u96c6","title":"\u53e2\u96c6","text":"

      \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

      • \u5e73\u8861\u8ca0\u8f09\u7684\u6f14\u7b97\u6cd5\u9078\u64c7\uff0c\u4f8b\u5982\u5faa\u74b0\u6bd4\u5c0d\uff08round robin\uff09\u3002
      • \u5982\u4f55\u6aa2\u67e5\u5404\u500b\u7bc0\u9ede\u662f\u5426\u6b63\u5e38\uff08health check\uff09\u3002
      • \u662f\u5426\u8981\u8b93\u7279\u5b9a\u4f7f\u7528\u8005\u9023\u5230\u7279\u5b9a\u7bc0\u9ede\uff0c\u5373\u6240\u8b02\u7684 sticky-session\u3002
      • \u7576\u670d\u52d9\u5931\u80fd\u6642\uff0c\u8981\u600e\u9ebc\u56de\u61c9\u3002

      \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

      "},{"location":"feedback/release-it/#\u8cc7\u6e90\u7684\u9700\u6c42\u63a7\u5236","title":"\u8cc7\u6e90\u7684\u9700\u6c42\u63a7\u5236","text":"

      \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

      • Socket \u6703\u88ab\u8017\u76e1\uff0c\u4e26\u9700\u8981\u7b49\u5f85\u820a\u7684\u88ab\u95dc\u9589 \uff08\u95dc\u9589\u524d\u6703\u9700\u8981\u9032\u5165 TIME_WAIT \u72c0\u614b\uff09\u3002
      • \u4e00\u90e8\u5206\u5c01\u5305\u7b49\u5f85\u8457\u5176\u4ed6\u5c01\u5305\u9032\u4f86\uff0c\u9019\u6642\u8a18\u61b6\u9ad4\u5c31\u6703\u88ab\u9019\u4e9b\u4e0d\u5b8c\u6574\u7684\u5c01\u5305\u4f54\u7528\uff0c \u7a31\u9019\u7a2e\u73fe\u8c61\u70ba\u968a\u982d\u963b\u585e\u3002
      • \u4ee5 TCP \u70ba\u4f8b\uff0c\u5efa\u7acb\u9023\u7dda\u524d\u6703\u9032\u5165 listen 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

      • \u8def\u7531\uff0c\u8def\u7531\u662f\u7db2\u8def\u4e16\u754c\u6700\u8907\u96dc\u7684\u4e00\u584a\uff0c\u4e0d\u662f\u4e09\u8a00\u5169\u8a9e\u8aaa\u5f97\u76e1 \uff08\u7576\u7136\u6709\u5f88\u591a\u76f8\u95dc\u7684\u66f8\uff09\u3002
      • \u96a8\u8457\u7bc0\u9ede\u7684\u589e\u52a0\uff0c\u9700\u8981\u7dad\u8b77\u8def\u7531\u8868\uff0c\u4e0d\u7ba1\u9019\u500b\u8def\u7531\u8868\u662f\u8cc7\u6599\u5eab\u6216\u662f\u4e00\u500b\u8868\u683c\u3002
      • \u8fd1\u671f\u4e5f\u6162\u6162\u8208\u8d77\u5168\u90e8\u7531\u8edf\u9ad4\u63a7\u5236\u7684\u67b6\u69cb\uff0c
      • \u4f8b\u5982\u865b\u64ec\u4ea4\u63db\u5668\u3001 K8s\u3001 VLAN tagging \u7b49\u3002
      • \u9019\u4e9b\u8def\u7531\u8a2d\u5b9a\u5305\u62ec\u55ae\u4e00\u7bc0\u9ede\u6709\u591a\u500b\u51fa\u8def\u53e3\uff08\u4e00\u500b\u7d66\u670d\u52d9\u3001\u4e00\u500b\u7d66\u7dad\u904b\u7b49\u7b49\uff09\u7684\u8907\u96dc\u72c0\u6cc1\u3002
      • \u670d\u52d9\u767c\u73fe\uff0c\u6bcf\u500b\u63d0\u4f9b\u9019\u500b\u6a5f\u5236\u7684\u8edf\u9ad4\uff08ZooKeeper\u3001etcd \u7b49\u7b49\uff09\u90fd\u6709\u81ea\u5df1\u7684\u6b0a\u8861\u6a5f\u5236\uff0c \u9069\u5408\u4e0d\u540c\u5834\u666f\uff0c\u4e0d\u8981\u8a8d\u70ba\u9019\u4e9b\u8edf\u9ad4\u90fd\u662f\u4e00\u6a23\u7684\u3002
      • VIP \u7684\u8f49\u63db\uff0c\u8ca0\u8f09\u5668\u6703\u900f\u904e VIP \u4f86\u6307\u5b9a\u670d\u52d9\u8981\u8d70\u7684\u7bc0\u9ede\uff08HA, active/standby \u7684\u6a5f\u5236\uff09\uff0c \u9019\u6642\u8981\u6ce8\u610f\uff0c\u7576 VIP \u9032\u884c\u5207\u63db\u6642\uff0c\u6bcf\u500b TCP \u9023\u7dda\u90fd\u53ef\u80fd\u5728\u50b3\u905e\u4e0b\u4e00\u500b\u5c01\u5305\u6642\u5931\u80fd\uff0c \u5305\u62ec\u90a3\u4e9b\u91cd\u8981\u7684\u8cc7\u6599\u5eab\u9023\u7dda\u3002
      "},{"location":"feedback/release-it/#\u53e2\u96c6\u7ba1\u7406","title":"\u53e2\u96c6\u7ba1\u7406","text":"

      \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\u4f8b

      AWS 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

      • \u6587\u4e2d\u5f9e\u6c92\u51fa\u73fe\u300c\u4eba\u70ba\u932f\u8aa4\u300d\u9019\u985e\u76f8\u95dc\u8a0a\u606f\uff0c\u56e0\u70ba\u4eba\u985e\u72af\u932f\u662f\u53ef\u4ee5\u88ab\u9810\u671f\u548c\u63a5\u53d7\u7684\uff0c \u8eab\u70ba\u4e00\u500b\u7ba1\u7406\u5de5\u5177\u537b\u6c92\u80fd\u611f\u77e5\u5230\u9019\u4ef6\u4e8b\u60c5\uff0c\u6240\u4ee5\u6587\u4e2d\u5f37\u8abf\u7684\u662f\u7ba1\u7406\u5de5\u5177\u7684\u5931\u80fd\u3002
      • \u64cd\u4f5c\u6307\u5357\u4ee3\u8868\u4ee5\u524d\u6709\u4eba\u7167\u8457\u9019\u4e9b\u6307\u4ee4\u57f7\u884c\uff0c\u4f46\u662f\u70ba\u4ec0\u9ebc\u4ee5\u524d\u6c92\u6709\u767c\u751f\u610f\u5916\uff1f \u6211\u5011\u5e38\u5e38\u6aa2\u8996\u90a3\u4e9b\u5931\u6557\u7684\u6848\u4f8b\uff0c\u4f46\u6211\u5011\u4e5f\u53ef\u4ee5\u53bb\u6aa2\u8996\u90a3\u4e9b\u6210\u529f\u7684\u6848\u4f8b\u3002 \u4f8b\u5982\u4e4b\u524d\u6709\u4eba\u4e5f\u5beb\u932f\u904e\uff0c\u4f46\u4ed6\u5728\u63d0\u4ea4\u524d\u7684\u67d0\u500b\u6d41\u7a0b\u4e2d\u6709\u5176\u4ed6\u4eba\u5be9\u6838\u51fa\u4f86\u4e86\uff0c\u8a72\u600e\u9ebc\u5f37\u5316\u9019\u4e9b\u6d41\u7a0b\uff1f
      • \u81ea\u52d5\u5316\u7684\u53cd\u61c9\u662f\u5feb\u901f\u7684\uff0c\u5728\u5c4d\u6aa2\u5831\u544a\u4e2d AWS \u6700\u7d42\u964d\u4f4e\u4e86\u79fb\u9664\u7bc0\u9ede\u7684\u901f\u5ea6\u548c\u589e\u52a0\u4e00\u4e9b\u4fdd\u5b89\u7cfb\u7d71 \uff08\u7576\u6e1b\u5c11\u7684\u91cf\u4f4e\u65bc\u7cfb\u7d71\u7576\u524d\u627f\u8f09\u7684\u91cf\u6642\u63d0\u51fa\u8b66\u544a\uff09\u3002

      \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

      • \u662f\u5426\u7d66\u670d\u52d9\u4f7f\u7528\u8005\uff08\u4e0d\u662f\u670d\u52d9\u958b\u767c\u8005\uff09\u5e36\u4f86\u597d\u7684\u9ad4\u9a57
      • \u80fd\u5426\u66ff\u516c\u53f8\u8cfa\u9322\uff08\u7701\u9322\uff09

      \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

      • \u670d\u52d9\u7684\u74f6\u9838\uff08bottleneck\uff09\uff0c\u4f8b\u5982\u6700\u5e38\u7528\u7684\u8acb\u6c42\u662f\u4ec0\u9ebc\uff0c \u53ef\u4ee5 cache \u55ce\uff1f\u9a57\u8b49\u6388\u6b0a\u908f\u8f2f\u53ef\u4ee5 wildcard \u55ce\uff1f
      • \u9023\u7dda\u662f\u5426\u6709\u4f47\u5217\u6392\u968a\u73fe\u8c61\uff1f
      • \u524d\u7aef\u4f7f\u7528\u7684\u9023\u7dda\u884c\u70ba\u662f\u5426\u904e\u5ea6\u58c5\u585e\uff1f

      \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

      • \u958b\u767c\u4eba\u54e1\u53ef\u80fd\u60f3\u770b\u65e5\u8a8c\uff0c\u6aa2\u67e5\u5947\u602a\u7684\u7a0b\u5f0f\u884c\u70ba\uff1b
      • \u5206\u6790\u4eba\u54e1\u53ef\u80fd\u60f3\u770b\u6307\u6a19\uff0c\u66b8\u89e3\u4f7f\u7528\u8005\u6574\u9ad4\u7684\u884c\u70ba\uff1b
      • \u5c08\u6848\u7684\u7ba1\u7406\u4eba\u54e1\u53ef\u80fd\u60f3\u770b\u529f\u80fd\u7684\u4f7f\u7528\u72c0\u6cc1\u3002

      \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

      • \u6d41\u91cf\uff0c\u8acb\u6c42\u6578\u3001\u4f75\u884c\u6578\u3002
      • \u4f7f\u7528\u8005\uff0c\u767b\u5165\u5931\u6557\u3001\u5728\u7dda\u6578\u3002
      • \u5546\u52d9\u908f\u8f2f\uff0c\u6210\u4ea4\u6578\u3001\u5165\u5e33\u984d\u3002
      • \u8cc7\u6599\u5eab\uff0c\u9023\u7dda\u3001\u8acb\u6c42\u5931\u6557\u6578\u3001\u56de\u61c9\u6642\u9593\u3002
      • \u904b\u7b97\u8cc7\u6e90\uff0c\u9023\u7dda\u6c60\u3001\u7dda\u7a0b\u6c60\u3001\u963b\u585e\u72c0\u614b\u3002
      • \u5132\u5b58\u8cc7\u6e90\uff0c\u8a18\u61b6\u9ad4\u3001\u5feb\u53d6\u3002

      \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

      • \u7576\u7d44\u614b\u670d\u52d9\u5931\u80fd\u6642\uff0c\u61c9\u7528\u7a0b\u5f0f\u548c\u7bc0\u9ede\u61c9\u8a72\u8981\u53ef\u4ee5\u6b63\u5e38\u904b\u4f5c\uff08\u4f46\u662f\u65b0\u7684\u61c9\u7528\u7a0b\u5f0f\u8981\u90e8\u7f72\u53ef\u80fd\u6703\u5931\u6557\uff09\u3002
      • \u78ba\u4fdd\u7d44\u614b\u670d\u52d9\u6c92\u6709\u80fd\u529b\u53ef\u4ee5\u5feb\u901f\u7d42\u7d50\u5927\u91cf\u7bc0\u9ede\u7684\u80fd\u529b\u3002
      • \u8cc7\u6599\u8981\u5099\u4efd\u3002

      \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

      "},{"location":"feedback/release-it/#\u5373\u6642\u63a7\u5236\u4f60\u7684\u61c9\u7528\u7a0b\u5f0f","title":"\u5373\u6642\u63a7\u5236\u4f60\u7684\u61c9\u7528\u7a0b\u5f0f","text":"

      \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

      • \u91cd\u7f6e\u8ff4\u5708\uff1b
      • \u8abf\u6574\u9023\u7dda\u6c60\u7684\u6578\u91cf\u548c\u903e\u6642\u6642\u9593\uff1b
      • \u66ab\u505c\u548c\u67d0\u500b\u670d\u52d9\u7684\u9023\u7dda\uff1b
      • \u91cd\u65b0\u8b80\u53d6\u8a2d\u5b9a\u6a94\uff1b
      • \u67d0\u500b\u529f\u80fd\u7684\u958b\u95dc\uff1b
      • \u958b\u59cb\u3001\u95dc\u9589\u5c0d\u5916\u670d\u52d9\u3002

      \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

      • \u516c\u53f8\u5c64\u7d1a
      • \u670d\u52d9\u5c64\u7d1a
      • \u8cc7\u6599\u5c64\u7d1a
      "},{"location":"feedback/release-it/#\u516c\u53f8\u5c64\u7d1a\u7684\u67b6\u69cb","title":"\u516c\u53f8\u5c64\u7d1a\u7684\u67b6\u69cb","text":"

      \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

      • \u64c1\u6709\u67b6\u69cb\u5718\u968a\uff08DevOps\uff09\uff0c\u9019\u500b\u5718\u968a\u9700\u8981\u5c0d\u670d\u52d9\u67b6\u69cb\u6e05\u695a\uff0c\u53ef\u5177\u6709\u6559\u80b2\u610f\u7fa9\u7684\u5718\u968a\u3002
      • \u7121\u75db\u767c\u5e03\uff0c\u4e00\u6b21\u5927\u7684\u767c\u4f48\u6bd4\u4e0d\u4e0a\u591a\u500b\u5c0f\u7684\u767c\u4f48\u3002
      • \u4e0d\u8981\u5efa\u7acb\u592a\u5927\u7684\u5718\u968a\uff0c\u5718\u968a\u518d\u5927\u4e5f\u53ea\u9700\u8981\u5169\u500b\u62ab\u85a9\u5c31\u80fd\u9935\u98fd\uff0c\u9ebb\u96c0\u96d6\u5c0f\u4e94\u81df\u4ff1\u5168\u7684\u6982\u5ff5\u3002
      • \u6548\u7387\u7684\u6289\u64c7\uff0c\u5927\u5bb6\u53ef\u80fd\u6703\u89ba\u5f97\u6548\u7387\u8d8a\u9ad8\u8d8a\u597d\uff0c\u4f46\u662f\u9ad8\u6548\u7387\u901a\u5e38\u4ee3\u8868\u4f4e\u9748\u6d3b\u6027\uff0c\u9019\u662f\u9700\u8981\u53d6\u6368\u7684\u3002 \u4f8b\u5982\u6c7d\u8eca\u5de5\u5ee0\u6a5f\u68b0\u7684\u9ad8\u6548\u7387\u4f4e\u5f48\u6027\uff0c\u5c0d\u6bd4\u65bc\u6280\u5e2b\u7684\u4f4e\u6548\u7387\u9ad8\u5f48\u6027\u3002

      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

      • \u5fae\u670d\u52d9\uff0c\u66f8\u7a2e\u4ee5 Design Rules \u70ba\u539f\u5247\uff0c \u95e1\u8ff0\u516d\u7a2e\u6a21\u7d44\u5316\u8a2d\u8a08\u539f\u5247\u3002
      • \u8a0a\u606f\u4f47\u5217\uff0c\u9ad8\u5f48\u6027\u4f46\u662f\u9664\u932f\u8f03\u96e3\uff0c\u4e14\u9700\u8981\u601d\u60f3\u4e0a\u7684\u8f49\u8b8a\u3002
      • \u5d4c\u5165\u5f0f\u64f4\u5145\uff0c\u9069\u5408\u55ae\u4e00\u670d\u52d9\u7684\u64f4\u5145\u3002
      "},{"location":"feedback/release-it/#\u8cc7\u6599\u5c64\u7d1a\u7684\u67b6\u69cb","title":"\u8cc7\u6599\u5c64\u7d1a\u7684\u67b6\u69cb","text":"

      \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\uff09

      Virtual 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

      • \u7528\u4f5c\u55ae\u4e00\u670d\u52d9\u591a\u500b\u7bc0\u9ede\u7684\u552f\u4e00\u8def\u53e3\uff0c
      • HA \u6a5f\u5236\uff0c
      • \u55ae\u7d14\u5728\u79c1\u6709\u7db2\u8def\u906e\u7f69\u4e0b\u7684 IP \u5206\u914d\u3002

      \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

      • \u5728\u528d\u6a4b\u5927\u5b78\u64d4\u4efb\u8cc7\u6df1\u7814\u7a76\u54e1\uff0c\u4e26\u65bc\u7814\u7a76\u6240\u6559\u6388 \u5206\u6563\u5f0f\u7cfb\u7d71\u3002
      • \u7d93\u71df\u4e00\u500b\u8d85\u8b9a\u7684\u90e8\u843d\u683c\u3002
      • \u591a\u9805\u958b\u6e90\u8edf\u9ad4\uff0c\u5305\u62ec Automerge\uff0c Apache Avro \u548c Apache Samza \u7b49\u3002
      • \u5275\u7acb\u5169\u5bb6\u516c\u53f8\u5206\u5225\u65bc 2009 \u88ab Red Gate Software \u548c 2012 \u88ab LinkedIn \u6536\u8cfc

      Table of contents

      1. Foundation of Data Systems
        1. Reliable, Scalable, and Maintainable Applications\u301034\u30111
        2. Data Models and Query Languages\u301049\u3011
        3. Storage and Retrieval\u301064\u3011
        4. Encoding and Evolution\u301054\u3011
      2. Distributed Data
        1. Replication\u301061\u3011
        2. Partitioning\u301033\u3011
        3. Transactions\u301054\u3011
        4. The Trouble with Distributing Systems\u301095\u3011
        5. Consistency and Consensus\u3010110\u3011
      3. Derived Data
        1. Batch Processing\u301081\u3011
        2. Stream Processing\u3010100\u3011
        3. The Future of Data Systems\u3010114\u3011

      \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

      1. \u77e5\u8b58\u53ca\u529b\u91cf\u3001\u904b\u7528\u8cc7\u6599\u64f4\u5c55\u4f01\u696d\u6d1e\u5bdf\u529b\u548c\u6c7a\u7b56\u6b0a\uff1b
      2. \u5c07\u8cc7\u6599\u5927\u773e\u5316\uff0c\u5efa\u7acb\u5b89\u5168\u7cfb\u7d71\u4f86\u6536\u96c6\u3001\u5132\u5b58\u53ca\u8655\u7406\u8cc7\u6599\uff0c\u63d0\u4f9b\u7d66\u9700\u8981\u7684\u4eba\u54e1\u548c\u61c9\u7528\u7a0b\u5f0f\uff1b
      3. \u4ee5\u5275\u65b0\u65b9\u5f0f\u8b93\u8cc7\u6599\u767c\u63ee\u529f\u7528\uff1a\u8cc7\u6599\u79d1\u5b78\u3001\u6a5f\u5668\u5b78\u7fd2\u3002
      "},{"location":"feedback/designing-data-intensive-applications/#\u5831\u544a\u9032\u7a0b","title":"\u5831\u544a\u9032\u7a0b","text":"

      \u5206\u6210\u4e09\u5927\u584a\uff1a

      • \u57fa\u790e\uff1a\u6a21\u578b\u3001\u8cc7\u6599\u5eab\u5e95\u5c64\u4f5c\u7528\u7b49\uff1b
      • \u5206\u6563\u5f0f\uff1a\u591a\u53f0\u8cc7\u6599\u5eab\u4e4b\u9593\u7684\u8907\u88fd\u548c\u5206\u5340\uff1b
      • \u5ef6\u4f38\uff1a\u591a\u7a2e\u985e\u7684\u8cc7\u6599\u5eab\u9593\u7684\u6e9d\u901a\u3002
      "},{"location":"feedback/designing-data-intensive-applications/#\u8cc7\u6599\u6a21\u578b\u548c\u8a9e\u6cd5","title":"\u8cc7\u6599\u6a21\u578b\u548c\u8a9e\u6cd5","text":"

      \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

      • \u95dc\u806f\u5f0f\u6a21\u578b v.s. \u6587\u4ef6\u5f0f\u6a21\u578b
      • \u5716\u50cf\u5f0f\u6a21\u578b
      • \u641c\u5c0b\u8a9e\u8a00
      "},{"location":"feedback/designing-data-intensive-applications/#\u7d22\u5f15","title":"\u7d22\u5f15","text":"

      \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

      • \u6563\u5217\u5f0f\u7d22\u5f15
      • \u6392\u5e8f\u5b57\u4e32\u8868
      • B \u6a39
      • \u6b21\u7d1a\u7d22\u5f15
      • \u591a\u6b04\u4f4d\u7d22\u5f15\u3001\u6a21\u7cca\u7d22\u5f15\u3001\u5b8c\u5168\u5167\u5b58
      "},{"location":"feedback/designing-data-intensive-applications/#\u8cc7\u6599\u5009\u5132","title":"\u8cc7\u6599\u5009\u5132","text":"

      \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

      • OLTP \u548c OLAP
      • \u5217\u5f0f\u8cc7\u6599\u5eab
      • \u7279\u6b8a\u7db1\u76ee
      • \u58d3\u7e2e
      "},{"location":"feedback/designing-data-intensive-applications/#\u7de8\u78bc\u548c\u9032\u7a0b","title":"\u7de8\u78bc\u548c\u9032\u7a0b","text":"

      \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

      • \u7a0b\u5f0f\u7de8\u78bc\u3001\u8de8\u8a9e\u8a00\u7de8\u78bc
      • \u4e8c\u9032\u4f4d\u7de8\u78bc
      • \u4f7f\u7528\u5834\u666f
      • \u900f\u904e\u8cc7\u6599\u5eab
      • REST \u548c RPC
      • \u975e\u540c\u6b65\u8a0a\u606f\u50b3\u905e
      "},{"location":"feedback/designing-data-intensive-applications/#\u8655\u7406\u7af6\u8cfd\u60c5\u6cc1","title":"\u8655\u7406\u7af6\u8cfd\u60c5\u6cc1","text":"

      \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

      • \u9694\u96e2\u6027\u3001\u5bb9\u932f\u6027\u3001\u4e00\u81f4\u6027
      • \u4ea4\u6613
      • \u7af6\u8cfd\u72c0\u6cc1
      • \u4f7f\u7528\u63d0\u4ea4\u5f8c\u7684\u8cc7\u6599
      • \u5feb\u7167\u9694\u96e2
      • \u5beb\u5165\u504f\u659c
      • \u5e8f\u5217\u5316
      • \u5be6\u969b\u5e8f\u5217\u5316
      • \u5169\u968e\u6bb5\u9396
      • \u5e8f\u5217\u5316\u5feb\u7167
      "},{"location":"feedback/designing-data-intensive-applications/#\u5206\u6563\u5f0f\u8cc7\u6599\u5eab\u8907\u88fd","title":"\u5206\u6563\u5f0f\u8cc7\u6599\u5eab\u2014\u8907\u88fd","text":"

      \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

      • \u964d\u4f4e\u8ca0\u8f09
      • \u9ad8\u53ef\u7528\u6027\uff08High Availability\uff09
      • \u62c9\u8fd1\u548c\u670d\u52d9\u8acb\u6c42\u7684\u8ddd\u96e2\uff08Geographically Close\uff09

      \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

      • \u6709\u4ec0\u9ebc\u65b9\u5f0f\uff1f
      • \u55ae\u4e00\u9818\u8896
      • \u591a\u9818\u8896
      • \u7121\u9818\u8896(Dynamo-style)
      • \u6b0a\u8861
      • \u540c\u6b65 v.s. \u7570\u6b65
      • \u4e00\u81f4\u6027 v.s. \u53ef\u7528\u6027
      "},{"location":"feedback/designing-data-intensive-applications/#\u5206\u6563\u5f0f\u8cc7\u6599\u5eab\u5206\u5340","title":"\u5206\u6563\u5f0f\u8cc7\u6599\u5eab\u2014\u5206\u5340","text":"

      \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

      • \u4e09\u5927\u554f\u984c
      • \u8981\u600e\u9ebc\u5206\u5340
      • \u8981\u600e\u9ebc\u8def\u7531
      • \u8981\u600e\u9ebc\u5e73\u8861
      • \u5982\u4f55\u6574\u5408\u4e0d\u540c\u5206\u5340\u7684\u8cc7\u6599
      • \u6b21\u7d22\u5f15
      "},{"location":"feedback/designing-data-intensive-applications/#\u5206\u6563\u5f0f\u7cfb\u7d71\u7684\u74b0\u5883","title":"\u5206\u6563\u5f0f\u7cfb\u7d71\u7684\u74b0\u5883","text":"

      \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

      • \u4e09\u5927\u554f\u984c
      • \u7db2\u969b\u7db2\u8def
      • \u7576\u65e5\u6642\u9418
      • \u57f7\u884c\u7dd2\u5ef6\u5b95
      "},{"location":"feedback/designing-data-intensive-applications/#\u5206\u6563\u5f0f\u7cfb\u7d71\u7684\u5bb9\u932f","title":"\u5206\u6563\u5f0f\u7cfb\u7d71\u7684\u5bb9\u932f","text":"

      \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

      • \u4e09\u500b\u7cfb\u7d71
      • \u7dda\u6027\u7cfb\u7d71
      • \u56e0\u679c\u95dc\u4fc2
      • \u5171\u8b58
      • \u5168\u57df\u9806\u5e8f\u5ee3\u64ad

      \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

      • Unix \u5de5\u5177\u7684\u54f2\u5b78
      • MapReduce on Hadoop
      • \u8cc7\u6599\u6d41\u5f15\u64ce
      "},{"location":"feedback/designing-data-intensive-applications/#\u4e32\u6d41\u8655\u7406","title":"\u4e32\u6d41\u8655\u7406","text":"

      \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

      • \u5982\u4f55\u5feb\u53d6\u6bcf\u7bc7\u8cbc\u6587\u7684\u7e3d\u6309\u8b9a\u6578\uff1f
      • \u90e8\u5206\u6309\u8b9a\u4eba\u7684\u540d\u5b57\u662f\u91dd\u5c0d\u4f60\u53ef\u80fd\u8a8d\u8b58\u7684\u4eba\u505a\u986f\u793a\uff0c\u4eca\u5929\u6709\u4e00\u500b\u4f60\u8a8d\u8b58\u7684\u670b\u53cb\u6309\u8a72\u8cbc\u6587\u300c\u8b9a\u300d\uff0c\u5982\u4f55\u5feb\u901f\u4e14\u6709\u6548\u7387\u5730\u8b93\u8a8d\u8b58\u8a72\u6309\u8b9a\u4eba\u5728\u986f\u793a\u8a72\u8cbc\u6587\u7684\u6642\u5019\u80fd\u986f\u793a\u5176\u540d\u5b57\uff1f
      • Change Data Capture(CDC)
      • Event Sourcing
      • \u4e2d\u4ecb\u8005\u3001\u65e5\u8a8c\u578b\u4e2d\u4ecb\u8005
      "},{"location":"feedback/designing-data-intensive-applications/#\u7e3d\u7d50\u548c\u6574\u5408","title":"\u7e3d\u7d50\u548c\u6574\u5408","text":"

      \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

      • \u529f\u80fd\u6027\u9700\u6c42\uff0c\u4f8b\u5982\uff1a\u5141\u8a31\u5b58\u53d6\u8cc7\u6599\u3001\u641c\u5c0b\u7b49\u7b49\u3002
      • \u975e\u529f\u80fd\u6027\u9700\u6c42\uff0c\u4f8b\u5982\uff1a
      • \u5b89\u5168\u6027\uff08security\uff09
      • \u53ef\u9760\u6027\uff08reliability\uff09
      • \u9806\u5f9e\u6027\uff08compliant with a standard or a spec\uff09
      • \u5ef6\u5c55\u6027\uff08scalability\uff09
      • \u76f8\u5bb9\u6027\uff08compatible with a piece of hardware or software\uff09
      • \u7dad\u8b77\u6027\uff08maintainability\uff09
      "},{"location":"feedback/designing-data-intensive-applications/#\u53ef\u9760\u6027","title":"\u53ef\u9760\u6027","text":"

      \u7576\u670d\u52d9\u767c\u751f\u72c0\u6cc1\u6642\uff0c\u4ecd\u7136\u80fd\u6b63\u78ba\u904b\u884c\u3002\u72c0\u6cc1\u53ef\u80fd\u70ba

      • \u786c\u9ad4\uff0c\u901a\u5e38\u662f\u7121\u76f8\u95dc\u6027\u4e14\u96a8\u6a5f\u7684
      • \u8edf\u9ad4\uff0c\u901a\u5e38\u662f\u7cfb\u7d71\u6027\u7684\u4e14\u96e3\u4ee5\u89e3\u6c7a
      • \u4eba\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

      1. \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

      2. \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

      3. \u5728\u4e0d\u8003\u616e\u62dc\u5360\u5ead\u932f\u8aa4\u4e0b\u3002\u00a0\u21a9

      4. \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

      "},{"location":"feedback/designing-data-intensive-applications/derived-batch/","title":"\u884d\u751f\u8cc7\u6599\u2014\u6279\u6b21\u8655\u7406","text":"

      \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

      • \u539f\u59cb\u8cc7\u6599\uff08Source Of Truth, SOT, Systems Of Record)\uff0c\u4f7f\u7528\u8005\u8f38\u5165\u7684\u8cc7\u6599\uff0c\u4f8b\u5982\u8a55\u8ad6\u3001\u500b\u8cc7\u7b49\u7b49
      • \u884d\u751f\u8cc7\u6599\uff08Derived Data\uff09\uff0c\u5229\u7528\u539f\u59cb\u8cc7\u6599\u7522\u751f\u7684\u8cc7\u6599\uff0c\u4f8b\u5982\u63a8\u85a6\u6587\u7ae0\u3001\u5feb\u53d6\u7b49\u7b49

      \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

      • \u670d\u52d9\u8655\u7406\u5c31\u662f\u6211\u5011\u5148\u524d\u770b\u5230\u7684\u61c9\u7528\u7a0b\u5f0f\u548c\u8cc7\u6599\u5eab\uff08\u6216\u548c\u5176\u4ed6\u670d\u52d9\uff09\u7684\u6e9d\u901a\uff1a\u9001\u51fa\u8acb\u6c42\uff08request\uff09\u5f97\u5230\u56de\u61c9\uff08response\uff09\u3002
      • \u6279\u6b21\u8655\u7406\u6982\u5ff5\u5c31\u662f\u628a\u5b8c\u6574\u7684\u5de5\u4f5c\u62c6\u5206\u6210\u300c\u6279\u6b21\u300d\uff08batch\uff09\uff0c\u4e26\u628a\u6bcf\u500b\u5c0f\u4efd\u7684\u5de5\u4f5c\u4e1f\u7d66\u4e0d\u540c\u7bc0\u9ede\u8655\u7406\uff0c\u6700\u5f8c\u518d\u6574\u5408\u8d77\u4f86\u3002\u807d\u8d77\u4f86\u548c\u6211\u5011\u4e4b\u524d\u8a0e\u8ad6\u7684\u5206\u6563\u5f0f\u8cc7\u6599\u5eab\u7684\u5206\u5340\u5f88\u50cf\uff0c\u4e8b\u5be6\u4e0a\u9019\u5169\u500b\u6771\u897f\u53ef\u4ee5\u8aaa\u662f\u76f8\u8f14\u76f8\u6210\uff0c\u5206\u5340\u4e0b\u7684\u4e26\u884c\u904b\u7b97\u7a31\u70ba MPP\uff08Massive Parallel Processing\uff09\u9019\u5169\u8005\u5df2\u7d93\u8d8a\u4f86\u8d8a\u50cf\uff0c\u4e92\u76f8\u5b78\u7fd2\u8457\uff0c\u5f85\u6703\u6703\u8a0e\u8ad6\u5230\u3002
      • \u4e32\u6d41\u8655\u7406\u5247\u662f\u628a\u8acb\u6c42\u7684\u6982\u5ff5\u8f49\u6210\u300c\u4e8b\u4ef6\u300d\uff08event\uff09\uff0c\u6bcf\u6b21\u4e8b\u4ef6\u89f8\u767c\u90fd\u6703\u5f15\u8d77\u4e00\u7cfb\u5217\u7684\u7570\u52d5\uff0c\u800c\u9019\u500b\u7570\u52d5\u53ef\u80fd\u662f\u5728\u591a\u500b\u4e0d\u540c\u7684\u7bc0\u9ede\uff0c\u53ea\u8981\u9019\u4e9b\u7bc0\u9ede\u6709\u5728\u300c\u76e3\u807d\u300d\uff08\u6d88\u5316\uff09\u9019\u500b\u4e8b\u4ef6\u3002

      \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

      "},{"location":"feedback/designing-data-intensive-applications/derived-batch/#\u627e\u6700\u4f4e\u7684\u6f5b\u6642latency","title":"\u627e\u6700\u4f4e\u7684\u6f5b\u6642\uff08latency\uff09","text":"
      # \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

      • \u8b93\u5404\u500b\u5de5\u5177\u505a\u597d\u81ea\u5df1\u7684\u4e8b\uff0c\u7576\u6709\u5176\u4ed6\u529f\u80fd\u7684\u9700\u6c42\u6642\uff0c\u518d\u589e\u52a0\u4e00\u500b\u5de5\u5177\u5427\uff01
      • \u628a\u8f38\u51fa\u8a2d\u8a08\u6210\u5176\u4ed6\u5de5\u5177\u53ef\u4ee5\u62ff\u4f86\u7528\u505a\u8f38\u5165\uff0c\u907f\u514d\u5728\u8f38\u51fa\u4e2d\u589e\u52a0\u7121\u8b02\u7684\u8cc7\u8a0a
      • \u6700\u597d\u5728\u6578\u9031\u5167\u5b8c\u6210\u8a2d\u8a08\u4e26\u5be6\u4f5c\u4e00\u500b\u5de5\u5177\uff0c\u518d\u6301\u7e8c\u88dc\u5f37
      • \u76e1\u91cf\u4f7f\u7528\u5de5\u5177\uff08\u5957\u4ef6\uff09\u4f86\u6e1b\u8f15\u958b\u767c\u8ca0\u64d4

      \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

      • STDIN
      • STDOUT
      • STDERR

      \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

      "},{"location":"feedback/designing-data-intensive-applications/derived-batch/#\u7ba1\u7dda\u7684\u5f37\u5927","title":"\u7ba1\u7dda\u7684\u5f37\u5927","text":"

      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 myProcess
      import 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
      1. Python \u5f88\u9069\u5408\u81ea\u5df1\u8a2d\u8a08\u5c0f\u5de5\u5177\uff0c\u7576\u4f60\u628a\u4e0a\u8ff0\u7a0b\u5f0f\u78bc\u5beb\u597d\u4e4b\u5f8c\uff0c\u4f60\u5c31\u53ef\u4ee5 pip install -e $LIB_FOLDER \u4f86\u7522\u751f\u81ea\u5df1\u7684\u5de5\u5177\u4e86\u3002
      "},{"location":"feedback/designing-data-intensive-applications/derived-batch/#\u7f3a\u9ede","title":"\u7f3a\u9ede","text":"

      \u7576\u7136 GNU Coreutils \u9084\u662f\u6709\u4e9b\u7f3a\u9ede\u7684\uff1a

      • \u4ed6\u5728\u547c\u53eb\u6b04\u4f4d\u7684\u6642\u5019\u4e0d\u662f\u90a3\u9ebc\u76f4\u89c0\uff0c\u4f8b\u5982\u524d\u9762\u7684\u4f8b\u5b50\u4e2d {print $4} \u4ee3\u8868\u7684\u662f\u6f5b\u6642\u3002
      • \u7576\u8cc7\u6599\u4e0d\u518d\u662f\u4f7f\u7528\u9810\u8a2d\u7684\u65b9\u5f0f\u505a\u5206\u5272\u7684\u6642\u5019\uff0c\u5c31\u9700\u8981\u53c3\u7167\u5f88\u591a\u6587\u4ef6
      • \u4f8b\u5982\u539f\u672c\u662f\u4ee5\u7a7a\u683c\u70ba\u5b9a\u754c\u7b26\uff0c\u7576\u9700\u8981\u4f7f\u7528\u5982 CSV \u4ee5\u9017\u865f\u70ba\u5b9a\u754c\u7b26\u7684\u6a94\u6848\u6642\u5c31\u5f88\u9ebb\u7169
      • \u6709\u6642\u5019\u8f38\u5165\u6709\u5f88\u591a\uff0c\u4e0d\u518d\u53ea\u662f\u55ae\u7d14\u7684\u7a7a\u683c\u5340\u5206\u7684\u6587\u5b57\u6642\u5c31\u6703\u5f88\u9ebb\u7169
      • \u4f8b\u5982 curl \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
      "},{"location":"feedback/designing-data-intensive-applications/derived-batch/#\u9ad8\u5bb9\u932f\u6027","title":"\u9ad8\u5bb9\u932f\u6027","text":"

      \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 \u7121\u5171\u4eab\u67b6\u69cb \u7684\u67b6\u69cb
      • daemon-based\uff0c\u6bcf\u500b\u7bc0\u9ede\u90fd\u6703\u653e\u4e00\u500b\u5b88\u8b77\u7a0b\u5e8f\uff08daemon\uff09\uff0c\u7136\u5f8c\u9019\u4e9b\u7a0b\u5e8f\u6703\u548c\u4e00\u500b\u4e2d\u592e\u7ba1\u7406\u4eba\uff08schedular\uff09\u53bb\u5206\u914d\u8cc7\u6599\u3001\u5099\u4efd\u3001\u63d0\u4f9b\u5065\u5eb7\u6aa2\u67e5\u7b49\u7b49
      • \u5099\u4efd\uff08replicate\uff09\uff0c\u7570\u65bc\u6211\u5011\u5728\u5206\u6563\u5f0f\u8cc7\u6599\u5eab\u770b\u5230\u7684\u8907\u88fd\uff0c\u4ed6\u8655\u7406\u7684\u6a5f\u5236\u548c\u55ae\u53f0\u6a5f\u5668\u505a\u6a94\u6848\u7cfb\u7d71\u7684\u5099\u4efd\u6bd4\u8f03\u50cf\uff0c\u4f8b\u5982 RAID\uff08\u900f\u904e\u7db2\u8def\uff09\u548c\u7cfe\u522a\u78bc\uff08erasure coding\uff09\u3002

      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

      • GlusterFS
      • Quantcast File System
      • OpenStack Swift
      • GFS \u2192 Colossus
      • Amazon S3
      • Azure Blob Storage
      "},{"location":"feedback/designing-data-intensive-applications/derived-batch/#mapreduce","title":"MapReduce","text":"

      \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

      • Map \u8ca0\u8cac\u628a\u60f3\u8981\u7684\u8cc7\u6599\u5f9e\u539f\u59cb\u8cc7\u6599\u63d0\u53d6\u51fa\u4f86\uff0c\u6211\u5011\u7a31\u5176\u70ba Mapper
      • Reduce \u8ca0\u8cac\u628a\u76f8\u4f3c\u7684\u8cc7\u6599\u6574\u5408\u8d77\u4f86\u4e26\u505a\u8a08\u7b97\uff0c\u6211\u5011\u7a31\u5176\u70ba Reducer

      \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\u3002Reducer \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

      "},{"location":"feedback/designing-data-intensive-applications/derived-batch/#\u5de5\u4f5c\u6d41\u7a0b","title":"\u5de5\u4f5c\u6d41\u7a0b","text":"

      \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

      • \u628a\u71b1\u9ede\uff08\u540d\u4eba\uff09\u7684\u8cc7\u6599\u9001\u7d66\u591a\u500b Reducer \u800c\u975e\u53ea\u6709\u4e00\u500b\uff0c\u7136\u5f8c\u518d\u628a\u9700\u8981\u806f\u5408\u7684\u8cc7\u6599\uff08\u540d\u4eba\u7684\u8cc7\u6599\uff09\u9001\u7d66\u9019\u4e9b Reducer\uff0c\u6700\u5f8c\u518d\u628a Reducer \u4e2d\u76f8\u540c\u7684\u8cc7\u6599\u6574\u5408\u5728\u4e00\u8d77\uff0c\u5982 Pig \u7684 skewed join \u548c Crunch \u7684 sharded join
      • \u4f7f\u7528 map-side join\uff08\u5f85\u6703\u63d0\uff09
      • \u5206\u5169\u500b\u7a0b\u5e8f\u57f7\u884c\uff0c\u7b2c\u4e00\u500b\u5148\u6253\u4e82\u8cc7\u6599\uff0c\u7b2c\u4e8c\u500b\u628a\u6253\u4e82\u7684\u8cc7\u6599\u6574\u5408\u5728\u4e00\u8d77\uff0c\u4f8b\u5982\u539f\u672c\u8cc7\u6599\u53eb\u505a 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
      "},{"location":"feedback/designing-data-intensive-applications/derived-batch/#map-side-join","title":"Map-side join","text":"

      \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

      • \u5ee3\u64ad\u806f\u5408\u8868\uff0c\u5982\u679c\u5f85\u806f\u5408\u7684\u8868\u662f\u5920\u5c0f\u7684\uff0c\u5c31\u53ef\u4ee5\u76f4\u63a5\u50b3\u905e\u806f\u5408\u8868\u5230\u5404\u500b Mapper \u4e2d\uff08\u9019\u540d\u7a31\u7684\u7531\u4f86\uff09
      • \u5206\u5340\u806f\u5408\u8868\uff0c\u5982\u679c\u77e5\u9053 Mapper \u7684\u8f38\u5165\u7bc4\u570d\uff0c\u5c31\u53ef\u4ee5\u628a\u7279\u5b9a\u7bc4\u570d\u7684\u806f\u5408\u8868\u653e\u9032\u4f86\uff0c\u6e1b\u5c11\u4e0d\u5fc5\u8981\u7684\u8a18\u61b6\u9ad4\u7a7a\u9593\uff0c\u5728 Hive \u4e2d\u9019\u7a31\u70ba bucketed map joins
      • \u5206\u5340\u4e14\u6392\u5e8f\u806f\u5408\u8868\uff0c\u5982\u679c Mapper \u7684\u8f38\u5165\u4e0d\u50c5\u77e5\u9053\u7bc4\u570d\uff0c\u4e5f\u78ba\u5b9a\u4ed6\u662f\u6392\u5e8f\u904e\u7684\uff08\u901a\u5e38\u9019\u4ee3\u8868\u9019\u500b mapper \u8cc7\u6599\u6e90\u662f\u5225\u7684 MapReduce \u7a0b\u5e8f\uff09\u5c31\u53ef\u4ee5\u6309\u7167\u9806\u5e8f\u8b80\u53d6\u7279\u5b9a\u7684\u503c\uff0c\u5c31\u4e0d\u9700\u8981\u628a\u6240\u6709\u7684\u8868\u653e\u9032\u8a18\u61b6\u9ad4\u4e2d\u9593\u3002
      "},{"location":"feedback/designing-data-intensive-applications/derived-batch/#\u6bd4\u8f03\u5169\u8005","title":"\u6bd4\u8f03\u5169\u8005","text":"

      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

      • Voldemort
      • Terrapin
      • ElephantDB
      • HBase

      \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\u6027

      MPP \u548c MapReduce \u7684\u5dee\u7570

      \u6211\u5011\u6574\u7406\u4e00\u4e0b\u5169\u8005\u5dee\u7570\uff1a

      • \u8cc7\u6599\u7d50\u69cb\uff0c\u6279\u6b21\u8655\u7406\u7684\u8cc7\u6599\u662f\u751f\u7684\uff08Raw\uff09\uff0c\u76f8\u5c0d\u65bc MPP \u662f\u7d50\u69cb\u5316\u7684\uff08schema\uff09
      • \u7522\u51fa\uff0cMPP \u901a\u5e38\u662f\u7522\u51fa\u67d0\u7a2e\u5831\u8868\uff08\u4f8b\u5982\uff0c\u4f7f\u7528\u8005\u9019\u500b\u6708\u7684\u8cfc\u8cb7\u529b\uff09\uff0c\u6279\u6b21\u8655\u7406\u901a\u5e38\u7522\u51fa\u53e6\u4e00\u7a2e\u9762\u8c8c\u7684\u8cc7\u6599\uff08\u4f8b\u5982\uff0c\u4f7f\u7528\u8005\u7684\u63a8\u85a6\u597d\u53cb\uff09
      • \u5fa9\u539f\u6027\uff0c\u6279\u6b21\u8655\u7406\u56e0\u70ba\u53ea\u662f\u8f38\u51fa\u300c\u6a94\u6848\u300d\uff0c\u76f8\u5c0d\u65bc MPP \u7684\u8f38\u51fa\u53ef\u80fd\u6703\u7570\u52d5\u8cc7\u6599\u5eab\u7684\u8cc7\u6599\uff0c\u9019\u7a2e\u53ef\u5fa9\u539f\u7684\u64cd\u4f5c\u662f\u76f8\u5c0d\u9ad8\u5bb9\u932f\u7684
      • \u5f48\u6027\uff0c\u6279\u6b21\u8655\u7406\u56e0\u70ba\u5929\u751f\u5141\u8a31\u61c9\u7528\u7a0b\u5f0f\u5ba2\u5236\u81ea\u5df1\u60f3\u8981\u7684\u908f\u8f2f\uff0c\u6240\u4ee5\u5f48\u6027\u5f88\u9ad8
      • \u76f4\u89c0\u6027\uff0cMPP \u7684\u64cd\u4f5c\u5f88\u76f4\u89c0\uff0c\u5c24\u5176\u900f\u904e SQL \u9019\u7a2e\u62bd\u8c61\u8a9e\u6cd5\uff0c\u8b93\u4f7f\u7528\u8005\u53ef\u4ee5\u5f88\u5feb\u901f\u4e0a\u624b\uff08\u751a\u81f3\u4e0d\u9700\u8981\u6703\u5beb\u7a0b\u5f0f\u7684\u4eba\u90fd\u53ef\u4ee5\u7528\uff09
      • \u5bb9\u932f\u6027\uff0c\u5c0d\u6279\u6b21\u8655\u7406\u4f86\u8aaa\uff0c\u6bcf\u4e00\u6b21\u7684\u7570\u52d5\u90fd\u4e0d\u6703\u5f71\u97ff\u8f38\u5165\uff0c\u6240\u4ee5\u7576\u7bc0\u9ede\u5931\u80fd\u6642\u901a\u5e38\u90fd\u6703\u81ea\u52d5\u91cd\u65b0\u5617\u8a66\u4e0a\u4e00\u500b\u7a0b\u5e8f\uff08\u800c\u975e\u5168\u90e8\u91cd\u8a66\uff09\uff0c\u9019\u9ede\u7570\u65bc MPP \u6703\u6368\u68c4\u8acb\u6c42\uff08\u6216\u5168\u90e8\u91cd\u8a66\uff09\u4e26\u8b93\u61c9\u7528\u7a0b\u5f0f\uff08\u6216\u4f7f\u7528\u8005\uff09\u6c7a\u5b9a\u4e0b\u4e00\u52d5

      \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

      • \u53ef\u8f15\u6613\u91cd\u8a66\uff0c\u8f38\u5165\u4e26\u4e0d\u6703\u88ab\u7570\u52d5\u4e14\u53ef\u4ee5\u7121\u8ca0\u64d4\u7684\u91cd\u65b0\u5617\u8a66\u7a0b\u5e8f
      • \u9ad8\u5f48\u6027\uff0c\u4efb\u4f55\u8f49\u63db\u90fd\u53ef\u4ee5\u900f\u904e\u5ba2\u5236\u7684\u7a0b\u5f0f\u78bc
      • \u5fa9\u7528\u6027\uff0c\u4efb\u4f55\u8f38\u51fa\u90fd\u53ef\u4ee5\u518d\u88ab\u5176\u4ed6\u4eba\u62ff\u4f86\u7576\u8f38\u5165\uff08\u4ecb\u9762\u55ae\u4e00\uff09

      \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

      • Unix \u662f\u6587\u5b57\u985e\u578b\u7684\u8f38\u5165\u8f38\u51fa\uff0cMapReduce \u662f\u4f7f\u7528\u7de8\u78bc\u5f8c\u7684\u6a94\u6848\uff08Avro\u3001Parquet \u7b49\u7b49\uff09
      • \u56e0\u70ba\u4f7f\u7528\u7de8\u78bc\uff0c\u6240\u4ee5\u4e0d\u6703\u6709\u6240\u8b02\u7684 {print $4}\uff0c\u800c\u662f {print $latency}
      • MapReduce \u628a\u4e00\u500b\u7a0b\u5e8f\u62c6\u6210 Mapper \u548c Reducer \u5169\u6bb5\uff0c\u9019\u6703\u9020\u6210\u554f\u984c\uff1a
      • \u7121\u8b02\u7684\u6392\u5e8f
      • \u5728\u9032\u884c\u4e0b\u4e00\u500b\u7a0b\u5e8f\u4e4b\u524d\u6703\u7b49\u524d\u4e00\u500b\u7a0b\u5e8f\u505a\u5b8c\uff0cUnix \u5927\u90e8\u5206\u60c5\u6cc1\u662f\u63a1\u7528\u4e32\u6d41\u6a5f\u5236
      • Mapper \u901a\u5e38\u662f\u5197\u8d05\u7684\uff0c\u76f4\u63a5\u8b93 Reducer \u4f7f\u7528\u8f38\u5165\u5373\u53ef
      • \u4e0d\u540c\u7a0b\u5e8f\u4e4b\u9593\u6703\u628a\u8cc7\u6599\u5099\u4efd\u9032 HDFS \u4e2d
      "},{"location":"feedback/designing-data-intensive-applications/derived-batch/#\u8cc7\u6599\u6d41\u5f15\u64ce","title":"\u8cc7\u6599\u6d41\u5f15\u64ce","text":"

      \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

      • \u50b3\u905e\u76f8\u540c\u7684\u5206\u5340\u8cc7\u6599\uff0c\u9019\u6642\u7bc0\u9ede\u7684\u8cc7\u6599\u5c31\u4e0d\u9700\u8981\u900f\u904e\u7db2\u8def\u50b3\u905e
      • \u50b3\u905e\u8a72\u5206\u5340\u8cc7\u6599\u5230\u6240\u6709\u7bc0\u9ede
      • \u91cd\u65b0\u7de8\u6392\u5206\u5340\u8cc7\u6599\uff0cMapReduce \u9810\u8a2d\u5168\u90e8\u90fd\u662f\u5982\u6b64

      \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

      • \u964d\u4f4e\u7121\u8b02\u6392\u5e8f\uff08\u6bcf\u6b21 Mapper \u7d50\u675f\u90fd\u8981\u6392\u5e8f\uff09\u7684\u8017\u80fd
      • \u4e0d\u9700\u8981\u5197\u8d05\u7684 Mapper
      • \u904b\u7b97\u5b50\u9593\u7684\u8cc7\u6599\u4e0d\u6703\u4e1f\u9032 HDFS\uff0c\u907f\u514d\u7121\u8b02\u7684\u8017\u80fd
      • \u900f\u904e\u660e\u78ba\u8868\u9054\u904b\u7b97\u5b50\u4e4b\u9593\u7684\u6e9d\u901a\uff0c\u53ef\u4ee5\u6709\u4e00\u500b\u6982\u89c0\u4e86\u89e3\u4e0d\u540c\u904b\u7b97\u5b50\u7684\u95dc\u4fc2\uff0c\u4f86\u9054\u5230\u6548\u80fd\u6700\u512a\u5316\uff08\u6b63\u78ba\u5206\u914d\u5206\u5340\uff0c\u5c31\u4e0d\u9700\u8981\u628a\u8cc7\u6599\u4e00\u76f4\u50b3\u905e\u5230\u7db2\u969b\u7db2\u8def\u4e2d\uff09
      • \u4e0d\u9700\u7b49\u5f85\u524d\u9762\u7684\u904b\u7b97\u5b50\u5b8c\u6210\u5c31\u53ef\u4ee5\u958b\u59cb\u5de5\u4f5c\uff08\u5982\u540c Unix \u4e00\u822c\uff09
      • \u4f7f\u7528\u76f8\u540c\u7684\u7a0b\u5e8f\u904b\u7b97\u4e0d\u540c\u7684\u904b\u7b97\u5b50\u907f\u514d\u7a0b\u5f0f\u78bc\u7684\u521d\u59cb\u5316\u8017\u80fd
      "},{"location":"feedback/designing-data-intensive-applications/derived-batch/#\u8981\u600e\u9ebc\u91cd\u4f86","title":"\u8981\u600e\u9ebc\u91cd\u4f86\uff1f","text":"

      \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

      • \u5716\u50cf\u5f0f\u8655\u7406\uff1a\u4e0d\u518d\u662f\u4ee5\u7bc0\u9ede\u70ba\u8cc7\u6599\u5206\u5340\u7684\u55ae\u4f4d\uff0c\u800c\u662f\u4ee5\u9ede\uff08vertex\uff09\u70ba\u55ae\u4f4d\u3002\u4e26\u4e14\u6bcf\u6b21\u8fed\u4ee3\u53ea\u8655\u7406\u76f8\u95dc\u8cc7\u6599\uff0c\u5c31\u597d\u50cf MapReduce \u4e2d\u7684 Reducer\u3002\u4ee3\u8868\u662f Pregel\u3002
      • \u600e\u9ebc\u8b93\u958b\u767c\u8005\u5c08\u6ce8\u65bc\u5546\u52d9\u908f\u8f2f\u7684\u958b\u767c\uff0c\u800c\u4e0d\u662f\u6279\u6b21\u8655\u7406\u5e95\u5c64\u7684\u904b\u4f5c\uff0c\u4e26\u900f\u904e\u62bd\u8c61\u4ecb\u9762\uff0c\u8b93\u6279\u6b21\u8655\u7406\u7684\u5de5\u7a0b\u5e2b\u53ef\u4ee5\u63d0\u5347\u76f8\u95dc\u6548\u80fd\u800c\u4e0d\u5f71\u97ff\u958b\u767c\u8005\uff08\u5c31\u597d\u50cf SQL \u7684\u6f14\u9032\u4e00\u6a23\uff09\u3002\u76f8\u95dc\u63d0\u9ad8\u7dad\u5ea6\u7684\u5de5\u5177\uff0c\u5982\uff1aPig, Hive, Cascading\uff0c\u5c31\u662f\u53ef\u4ee5\u62bd\u63db\u5e95\u5c64\u7684\u6846\u67b6\uff08MapReduce, Spark, Flink\uff09\u800c\u4f7f\u7528\u76f8\u540c\u7684\u4ecb\u9762\u4f86\u57f7\u884c\u6279\u6b21\u904b\u7b97\u3002
      • \u52a0\u901f\u6e2c\u8a66\uff0c\u5c31\u597d\u50cf Unix \u4e2d\u7684 less \u4e00\u6a23\uff0c\u53ef\u4ee5\u770b\u5230\u90e8\u5206\u7684\u904b\u7b97\u7d50\u679c\u800c\u4e0d\u662f\u5168\u90e8\u8dd1\u5b8c
      "},{"location":"feedback/designing-data-intensive-applications/derived-batch/#vs-mpp_1","title":"v.s. MPP","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\u6027

      MPP \u548c\u8cc7\u6599\u6d41\u5f15\u64ce\u7684\u5dee\u7570

      \u8cc7\u6599\u6d41\u5f15\u64ce\u548c MPP \u6b63\u4e92\u76f8\u5b78\u7fd2\uff1a

      • MPP \u8d8a\u4f86\u8d8a\u80fd\u63a5\u53d7\u5ba2\u88fd\u5316\u7684\u8a08\u7b97\uff0c\u4f8b\u5982 MADlib \u5141\u8a31\u4e00\u4e9b\u6a5f\u5668\u5b78\u7fd2\u7684\u6f14\u7b97\u6cd5\u9032 MPP \u4e2d\u3002
      • \u6279\u6b21\u8655\u7406\u4e5f\u8d8a\u4f86\u8d8a\u591a\u9ad8\u62bd\u8c61\u7684\u8a9e\u6cd5\u6e1b\u5c11\u958b\u767c\u8005\u53bb\u8a2d\u7f6e\u4e00\u4e9b\u7d30\u90e8\u53c3\u6578\u5982\u9663\u5217\u5316\u8a08\u7b97\u3001\u806f\u5408\u7a2e\u985e\u7684\u9078\u64c7\u7b49\u7b49\u3002
      • \u6709\u4e9b MPP \u7684\u8cc7\u6599\u7d50\u69cb\u4e5f\u5141\u8a31\u751f\u7684\u8cc7\u6599\u7d50\u69cb\uff0c\u4f8b\u5982 HBase\u3002
      "},{"location":"feedback/designing-data-intensive-applications/derived-batch/#\u7e3d\u7d50","title":"\u7e3d\u7d50","text":"

      \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

      • Unix philosophy
      • MapReduce on Hadoop
      • MapReduce v.s. MPP
      • MapReduce v.s. Unix
      • Dataflow engine v.s. MapReduce
      • Dataflow engine v.s. MPP

      \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\uff08topic, stream\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

      "},{"location":"feedback/designing-data-intensive-applications/derived-stream/#\u8ffd\u8e64\u8005\u4e3b\u52d5","title":"\u8ffd\u8e64\u8005\u4e3b\u52d5","text":"

      \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

      • \u5728\u5fd9\uff0c\u9019\u6642\u53ef\u4ee5\u505a\u4e00\u4e9b\u624b\u6cd5
      • \u963b\u64cb\uff08block\uff09\u5f8c\u7e8c\u7684\u8acb\u6c42
      • \u8b93\u5f8c\u7e8c\u7684\u8acb\u6c42\u6392\u968a\uff08queue\uff09
      • \u963b\u64cb\u4e26\u544a\u77e5 \u767c\u5e03\u8005 \u76ee\u524d\u5728\u5fd9\uff08\u5f8c\u58d3\uff0cbackpressure\uff09\uff0cTCP \u548c Unix \u7684\u7ba1\u7dda\u7684\u90fd\u9019\u529f\u80fd
      • \u5931\u80fd\uff0c\u9019\u6642\u505a\u6cd5\u6703\u6839\u64da\u8ffd\u8e64\u8005\u548c\u767c\u5e03\u8005\u7684\u95dc\u4fc2\u800c\u6709\u4e0d\u540c

      \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

      • \u76f4\u63a5\u50b3\u9001
      • \u4e2d\u4ecb\u8005
      • \u65e5\u8a8c\u578b\u4e2d\u4ecb\u8005
      "},{"location":"feedback/designing-data-intensive-applications/derived-stream/#\u76f4\u63a5\u50b3\u9001","title":"\u76f4\u63a5\u50b3\u9001","text":"

      \u767c\u5e03\u8005\u76f4\u63a5\u628a\u4e8b\u4ef6\u9001\u7d66\u8ffd\u8e64\u8005\uff0c\u6709\u5e7e\u500b\u7279\u9ede

      • \u901a\u5e38\u9700\u8981 SDK \u6216\u7a0b\u5f0f\u5eab\u7684\u5e6b\u5fd9
      • \u901a\u5e38\u57fa\u65bc UDP\uff0c\u907f\u514d\u8b93\u8ffd\u8e64\u8005\u5f71\u97ff\u767c\u5e03\u8005\u7684\u56de\u61c9\u6642\u9593
      • \u901a\u5e38\u4e0d\u5728\u4e4e\u8ffd\u8e64\u8005\u7684\u5931\u80fd\uff0c\u4e5f\u5c31\u662f\u6c92\u6709\u76f8\u95dc\u5bb9\u932f\u6a5f\u5236
      • \u6216\u8005\u7528 TCP \u4e26\u5617\u8a66\u91cd\u65b0\u9023\u7dda
      • \u901a\u5e38\u53ea\u6709\u4e00\u500b\u8ffd\u8e64\u8005\uff0c\u5426\u5247\u5f88\u5bb9\u6613\u5f71\u97ff\u767c\u5e03\u8005\u7684\u8907\u96dc\u5ea6

      \u76f8\u95dc\u8edf\u9ad4\u6709\uff1a

      • ZeroMQ
      • StatsD
      • nanomsg
      "},{"location":"feedback/designing-data-intensive-applications/derived-stream/#\u4e2d\u4ecb\u8005","title":"\u4e2d\u4ecb\u8005","text":"

      \u767c\u5e03\u8005\u628a\u4e8b\u4ef6\u9001\u5230\u4e2d\u4ecb\u8005\uff08broker, queue\uff09

      • \uff08\u6839\u64da\u8a2d\u5b9a\uff09\u53ef\u8abf\u6574\u4e2d\u4ecb\u8005\u7684\u5bb9\u932f\u6a5f\u5236\uff1a\u963b\u64cb\u3001\u6392\u968a\u3001\u5f8c\u58d3
      • \u7576\u8a18\u61b6\u9ad4\u4e0d\u5920\u6642\uff0c\uff08\u6839\u64da\u8a2d\u5b9a\uff09\u53ef\u900f\u904e\u6a94\u6848\u7cfb\u7d71\u7dad\u6301\u8010\u7528\u6027\uff08durability\uff09
      • \u53ef\u4ee5\u7d0d\u9032 XA
      • \u6709\u5b9a\u7fa9\u4e00\u4e9b\u5be6\u4f5c\u7684\u6a19\u6e96\uff1aJMS\u3001AMQP

      \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

      • RabbitMQ
      • ActiveMQ
      • ...

      \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":"
      • \u8cc7\u6599\u7684\u522a\u9664\u4e0a
      • \u8cc7\u6599\u5eab\u53ea\u6709\u7576\u8981\u6c42\uff08DELETE TABLE ...\uff09\u6642\u624d\u522a\u9664
      • \u4e2d\u4ecb\u8005\u78ba\u4fdd\u8ffd\u8e64\u8005\u63a5\u6536\u5230\u4e8b\u4ef6\u5f8c\u5c31\u6703\u628a\u4e8b\u4ef6\u522a\u9664\u6389
      • \u641c\u5c0b\u7279\u5b9a\u8cc7\u6599
      • \u8cc7\u6599\u5eab\u900f\u904e\u7d22\u5f15\u548c\u6b21\u7d22\u5f15\u4f86\u52a0\u901f\u641c\u5c0b
      • \u4e2d\u4ecb\u8005\u8b93\u8ffd\u8e64\u8005\u8ffd\u8e64\u591a\u500b\u4e3b\u984c\u4f86\u9054\u6210\u4e0d\u540c\u8cc7\u6599\u7684\u7372\u53d6
      "},{"location":"feedback/designing-data-intensive-applications/derived-stream/#\u7570\u6b65","title":"\u7570\u6b65","text":"

      \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

      • Apache Kafka
      • Apache DistributedLog

      \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\u7a69\u5b9a
      • \u6279\u6b21\u50b3\u905e
      • \u8ffd\u8e64\u8005\u7684\u89e3\u8026

      \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\u597d
      key=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

      • PostgreSQL - Bottled Water
      • MySQL - Maxwell
      • MongoDB - Mongoriver
      • Oracle - GoldenGate
      • Kafka Connect
      • Spinal Tap
      • Debezium

      \u6709\u4e9b\u751a\u81f3\u652f\u63f4\u7576\u7279\u5b9a\u503c\u88ab\u7570\u52d5\u6642\u8f38\u51fa\u4e8b\u4ef6\uff1a

      • RethinkDB, Firebase, CouchDB
      • MongoDB - Meteor
      • VoltDB
      VoltDB \u7528\u4f86\u76e3\u807d\u7279\u5b9a\u8868\u7684\u7570\u52d5\u8a9e\u6cd5
      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)\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":"
      • \u7be9\u9078\u7279\u5b9a\u4e8b\u4ef6
      • \u6574\u5408\u4e8b\u4ef6\u5206\u6790
      • \u5efa\u7acb\u65b0\u89c0\u9ede

      \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 CEL
      select *\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\uff0cCEP \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

      • \u91d1\u878d\u516c\u53f8\u76e3\u63a7\u4fe1\u7528\u5361\u72c0\u6cc1
      • \u81ea\u52d5\u5316\u5de5\u5ee0\u6aa2\u67e5
      • ...

      \u53ef\u80fd\u7684\u8edf\u9ad4\u6709\uff1a

      • Apache Samza
      • Apache Flink
      • Esper
      • IBM InfoSpher Stream
      • ...
      "},{"location":"feedback/designing-data-intensive-applications/derived-stream/#\u6574\u5408\u4e8b\u4ef6\u5206\u6790","title":"\u6574\u5408\u4e8b\u4ef6\u5206\u6790","text":"

      \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

      • Apache Flink\uff08Apache Storm\uff09
      • Spark Streaming
      • Samza
      • Kafka

      \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":"
      • \u843d\u5f8c\u7684\u4e8b\u4ef6\u8a72\u600e\u9ebc\u8655\u7406\uff1f
      • \u6642\u9593\u7a97\u7684\u9078\u64c7

      \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

      • \u7ffb\u8f49\u6642\u9593\u7a97\uff08Tumbling window\uff09\uff0c\u4f8b\u5982\u6bcf 5 \u5206\u9418\u7d71\u8a08\u4e00\u6b21\uff1a0930-0935\u30010935~0940\u3001...\u3002
      • \u8df3\u8e8d\u6642\u9593\u7a97\uff08Hopping window\uff09\uff0c\u4f8b\u5982\u6bcf 1+5+1 \u5206\u9418\u7d71\u8a08\u4e00\u6b21\uff1a0930~0937\u30010936~0943\u3001...\u3002
      • \u6ed1\u52d5\u6642\u9593\u7a97\uff08Sliding window\uff09\uff0c\u4f8b\u5982\u4e94\u5206\u5167\u6700\u5927\u3001\u5c0f\u7684\u6642\u9593\uff1a0930~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
      • \u6703\u8ac7\u6642\u9593\u7a97\uff08Session window\uff09\uff0c\u4f8b\u5982\u64c1\u6709\u67d0\u7de8\u865f\u7684\u4e8b\u4ef6\u7684\u5340\u9593\uff0c\u901a\u5e38\u7528\u65bc\u8ffd\u8e64\u4f7f\u7528\u8005\u7684\u64cd\u4f5c\u3002
      "},{"location":"feedback/designing-data-intensive-applications/derived-stream/#\u806f\u5408","title":"\u806f\u5408","text":"
      • \u5169\u7d44\u4e3b\u984c\u7684\u806f\u5408
      • \u52d5\u614b\u8868\u548c\u4e3b\u984c\u7684\u806f\u5408
      • \u52d5\u614b\u8868\u548c\u52d5\u614b\u8868\u7684\u806f\u5408

      \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

      • \u900f\u904e Microbatching/Checkpoint \u8b93\u57f7\u884c\u53ef\u4ee5\u5f9e\u4e2d\u91cd\u4f86\u3002
      • \u4f7f\u904b\u7b97\u6210\u70ba\u51aa\u7b49\u7684\u3002
      • \u91cd\u5efa\u72c0\u614b\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\u4e8b\u4ef6\u4f86\u6e90\u8ce6\u4e88\u8cc7\u6599\u6210\u70ba\u4e00\u7a2e\u300c\u9762\u5411\u300d\u800c\u975e\u72c0\u614b\u3002\u5c0d\u65bc\u4e8b\u4ef6\u7b49\u7b49\u6a5f\u5236\u60f3\u8981\u6df1\u5165\uff0c\u53ef\u4ee5\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

      • \u50b3\u9001\u4e8c\u9032\u4f4d\u8a0a\u865f\u7684\u5be6\u9ad4\u5c64
      • \u628a\u4e8c\u9032\u4f4d\u6574\u5408\u6210\u8a0a\u6846\uff08frame\uff09\u7684\u8cc7\u6599\u9023\u7d50\u5c64\uff0c\u4ee5\u5716\u4e0a\u70ba\u4f8b\u5c31\u662f Ethernet \u7684\u4ea4\u63db\u5668\uff0c\u4e26\u5728\u9019\u88e1\u9032\u884c\u9ad8\u5bb9\u932f\u3001\u5075\u932f\u7684 CRC
      • \u5229\u65bc\u5927\u91cf\u64f4\u5c55\u4e26\u7ba1\u7406\u591a\u5c01\u5305\uff08packet\uff09\u7684\u7db2\u8def\u5c64\uff0c\u4ee5\u5716\u4e0a\u70ba\u4f8b\u5c31\u662f IP \u7684\u8def\u7531\u5668
      • \u628a\u9019\u4e9b\u5305\u88dd\u6210\u7db2\u5361\uff08NIC\uff09\uff0c\u4e26\u548c CPU \u9032\u884c\u6e9d\u901a
      • \u6700\u5f8c\u5728\u8edf\u9ad4\u9762\u4e0a\u63d0\u4f9b UDP/TCP \u7b49\u5354\u5b9a\u6eff\u8db3\u5404\u7a2e\u8cc7\u6599\u7684\u50b3\u8f38\u7684\u50b3\u8f38\u5c64\uff0c\u4ee5 TCP \u70ba\u4f8b\uff0c\u5c31\u6703\u5728\u6b64\u9032\u884c\u5c01\u5305\u7684\u6392\u5e8f\u3001\u91cd\u65b0\u8acb\u6c42\u3001\u6d88\u9664\u91cd\u8907\u7b49\u6392\u9664\u932f\u8aa4\u7684\u884c\u70ba
      • \u6700\u5f8c\u5229\u7528 BSD \u63d0\u4f9b\u7684 API \u8b93\u61c9\u7528\u7a0b\u5f0f\u5f97\u4ee5\u548c OS \u6e9d\u901a\uff0c\u4e26\u5b8c\u6210\u9019\u4e00\u7cfb\u5217\u7684\u884c\u70ba

      \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":"
      • \u7db2\u8def\u6703\u9047\u5230\u54ea\u4e9b\u554f\u984c\uff1f
      • \u8981\u600e\u9ebc\u77e5\u9053\u7db2\u8def\u9047\u5230\u54ea\u4e9b\u554f\u984c\uff1f
      • \u5982\u4f55\u5224\u5b9a\u7bc0\u9ede\u9023\u4e0d\u4e0a\u4e86\uff1f
      • \u70ba\u4ec0\u9ebc\u7db2\u8def\u5ef6\u9072\u662f\u7121\u754c\u7684\uff1f

      \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

      • \u8b8a\u56e0\uff0c\u54ea\u4e9b\u662f\u5916\u5728\u74b0\u5883\u8b93\u7db2\u8def\u767c\u751f\u554f\u984c
      • \u5929\u751f\uff0c\u4ed6\u7684\u5929\u751f\u8a2d\u8a08\u9020\u6210\u4e86\u4ec0\u9ebc\u7f3a\u9677
      "},{"location":"feedback/designing-data-intensive-applications/distributed-env/#\u7269\u7406\u6027\u640d\u58de","title":"\u7269\u7406\u6027\u640d\u58de","text":"

      \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

      1. GitHub \u56e0\u66f4\u65b0\u8def\u7531\u5668\u6642\u8a2d\u7f6e\u932f\u8aa4\u5f15\u767c\u9aa8\u724c\u6548\u61c9\u9020\u6210\u505c\u6a5f\u4e94\u5c0f\u6642
      2. Facebook \u56e0\u932f\u8aa4\u8a2d\u5b9a\u9020\u6210\u5168\u7403\u5168\u670d\u52d9\u516d\u5c0f\u6642\u4ee5\u4e0a\u7684\u505c\u6a5f
      3. Google \u5f88\u5c11\u5c0d\u5916\u516c\u5e03\u505c\u6a5f\u539f\u56e0
      "},{"location":"feedback/designing-data-intensive-applications/distributed-env/#\u97cc\u9ad4\u6709\u932f","title":"\u97cc\u9ad4\u6709\u932f","text":"

      \u55ae\u7d14\u8edf\u9ad4\u9762\u6709 bug\uff1a

      • \u8def\u7531\u5668\u55ae\u5411\u7121\u6cd5\u9001\u51fa

      \u5982\u679c\u60f3\u4e86\u89e3\u66f4\u591a\u53ef\u80fd\u6703\u6709\u7684\u554f\u984c\uff0c\u53ef\u4ee5\u67e5\u95b1\uff1a

      • https://queue.acm.org/detail.cfm?id=2655736
      • https://queue.acm.org/detail.cfm?id=2482856
      "},{"location":"feedback/designing-data-intensive-applications/distributed-env/#\u5982\u4f55\u77e5\u9053\u6b63\u767c\u751f\u54ea\u4e9b\u554f\u984c","title":"\u5982\u4f55\u77e5\u9053\u6b63\u767c\u751f\u54ea\u4e9b\u554f\u984c","text":"

      \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

      • \u7576\u76ee\u7684\u7aef\u7684\u961c\u6c92\u958b\uff0cTCP \u6703\u56de\u61c9 FIN \u6216 RST
      • \u7576\u76ee\u7684\u7bc0\u9ede\u6b63\u9762\u81e8\u7db2\u8def\u58c5\u585e\uff0cTCP \u6703\u56de\u61c9\u4e00\u4e9b\u8b66\u544a\u8cc7\u8a0a
      • \u82e5\u61c9\u7528\u7a0b\u5f0f\u4e2d\u65b7\uff0c\u4f46\u662f OS \u4ecd\u5728\u57f7\u884c\uff0c\u6709\u4e9b\u8cc7\u6599\u5eab\u6703\u6709\u6a5f\u5236\u544a\u8a34\u53e2\u96c6\u5167\u7684\u8cc7\u6599\u5eab\uff1a\u300c\u6211\u7121\u6cd5\u904b\u4f5c\u4e86\uff01\u300d
      • \u53ef\u4ee5\u76e3\u63a7\u4ea4\u63db\u5668\uff08switch\uff09\u3001\u8def\u7531\u5668\uff08router\uff09\u751a\u81f3\u4e2d\u7e7c\u5668\uff08repeater\uff09\u7684\u7ba1\u7406\u7cfb\u7d71
      • \u82e5\u5c0d\u9019\u4e9b\u540d\u8a5e\u4e0d\u4e86\u89e3\uff0c\u63a8\u85a6\u9019\u7bc7\u4e2d\u6587\u6587\u7ae0\uff0c\u4e0d\u904e\u82e5\u8981\u66f4\u6709\u7cfb\u7d71\u5730\u4e86\u89e3\u9084\u662f\u5efa\u8b70 coursera \u8ab2\u7a0b
      • \u6709\u4e9b\u8def\u7531\u5668\u6703\u56de\u5c01\u5305\uff08ICMP Destination Unreachable\uff09\u544a\u8a34\u4f60\u8a72\u7bc0\u9ede\u662f\u7121\u6cd5\u9023\u7dda\u7684
      • Timeout\uff08TCP \u672c\u8eab\u5c31\u6709\uff0c\u6b64\u6307\u61c9\u7528\u7a0b\u5f0f\u9762\uff09\uff0c\u9760\u7d93\u9a57\u6c7a\u5b9a\u61c9\u8a72\u5728\u591a\u9577\u6642\u9593\u5167\u56de\u61c9
      • Phi Accrual \u52d5\u614b\u8abf\u6574 Timeout \u6642\u9593
      • \u6296\u52d5\u7de9\u885d\uff08jitter buffer\uff09\u8ce6\u4e88\u6642\u9593\u4e00\u4e9b\u4e82\u6578\uff0c\u907f\u514d\u585e\u8eca

      \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

      • \u82e5\u8a0a\u606f\u91cf\u8f03\u5927\uff0c\u53ef\u80fd\u6703\u50b3\u9001\u591a\u500b\u5c01\u5305\uff0c\u4e0d\u540c\u5c01\u5305\u6703\u6709\u4e0d\u540c\u6392\u968a\u7a0b\u5ea6\u548c\u4e0d\u540c\u8def\u5f91\uff0c\u56e0\u6b64\u6703\u51fa\u73fe\u5ef6\u9072\u548c\u4e82\u5e8f\u3002
      • \u5982\u679c\u767c\u73fe\u91dd\u5c0d\u7279\u5b9a\u76ee\u6a19\u7684\u50b3\u9001\u53d7\u5230\u9650\u5236\uff0c\u6b64\u6642\u5f88\u53ef\u80fd\u9762\u81e8_\u53cd\u58d3_\uff08backpressure\uff09
      • \u57f7\u884c\u7dd2\u6392\u968a\uff0c\u9032\u800c\u5f71\u97ff\u5c01\u5305\u7684\u50b3\u9001\uff0cVM \u56e0\u70ba QoS\uff08Quality of Service\uff0c\u8ce6\u4e88\u5404\u57f7\u884c\u7dd2\u6b0a\u9650\u7b49\u7d1a\u548c\u91cd\u8981\u7a0b\u5ea6\uff09\u7684\u95dc\u4fc2\u53ef\u80fd\u66f4\u56b4\u91cd
      • \u58de\u9130\u5c45\uff08noisy neighbor\uff09

      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\u65e5\u6642\u9418\uff08Time-of-Day\uff09
      • \u908f\u8f2f\u6642\u9418\uff08Monotoni clock\uff09

      \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

      • PHP
      • time
      • hrtime
      • Node.js
      • Date.now
      • process.hrtime
      "},{"location":"feedback/designing-data-intensive-applications/distributed-env/#ntp","title":"NTP","text":"

      \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

      • \u82e5\u76f8\u5dee\u904e\u5927\uff0c\u5247\u6703\u66ab\u505c\u540c\u6b65\u4e26\u5f37\u5236\u91cd\u8a2d
      • \u53bb\u56de\u7684\u7db2\u8def\u5ef6\u9072\u5dee\u7570\u904e\u5927\u6703\u5927\u5e45\u964d\u4f4e\u6821\u6642\u7684\u7cbe\u6e96\u5ea6
      • \u958f\u79d2\u554f\u984c
      • VM \u7684\u77f3\u82f1\u9707\u76ea\u5668\u662f\u865b\u64ec\u7684\uff0c\u4e5f\u5c31\u662f\u6703\u53d7\u5230 CPU \u5f71\u97ff\uff0c\u800c\u964d\u4f4e\u6e96\u78ba\u6027
      • NTP Server \u7684\u932f\u8aa4\u8a2d\u5b9a
      • \u9632\u706b\u7246\u64cb\u4f4f\u548c NTP \u7684\u9023\u7dda
      "},{"location":"feedback/designing-data-intensive-applications/distributed-env/#ntp-\u4e4b\u5916","title":"NTP \u4e4b\u5916","text":"

      \u9664\u4e86 NTP \u4e4b\u5916\uff0c\u9084\u6709\u54ea\u4e9b\u6821\u6642\u65b9\u5f0f\uff1a

      • \u6b50\u6d32\u8ca1\u7d93\u5e02\u5834\u5100\u5668\u6307\u5357\u900f\u904e\u9ad8\u7cbe\u6e96\u7684\u5728\u5730\u6642\u9418\uff0c\u7372\u5f97\u7cbe\u6e96\u7684\u6642\u9593\u4f86\u907f\u514d\u80a1\u5e02\u7684\u7570\u5e38\u3002
      • GPS \u900f\u904e Precision Time Protocal(PTP) \u4f86\u7372\u5f97\u9ad8\u7cbe\u6e96\u7684\u6642\u9593

      \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

      "},{"location":"feedback/designing-data-intensive-applications/distributed-env/#google-spanner","title":"Google Spanner","text":"

      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

      • intro
      • TrueTime

      \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

      • cAdvisor
      "},{"location":"feedback/designing-data-intensive-applications/distributed-env/#\u57f7\u884c\u7dd2\u5ef6\u5b95","title":"\u57f7\u884c\u7dd2\u5ef6\u5b95","text":"

      \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":"
      • OS \u5c64\u9762
      • VM \u6703\u88ab\u66ab\u505c\uff08suspended\uff09\uff0c\u88ab\u66ab\u505c\u6642 Host \u6703\u958b\u59cb\u628a VM \u7684\u8cc7\u6599\u8f38\u51fa\u5230 FileSystem \u4e2d\uff0c\u4e26\u7b49\u5f85\u554f\u984c\u8655\u7406\u5b8c\u5f8c\u5fa9\u539f\uff08resumed\uff09\uff0c\u9019\u904e\u7a0b\u6703\u4f9d\u8cf4\u65bc\u7cfb\u7d71\u6a94\u6848\u7684 I/O\uff0c\u53ef\u80fd\u6703\u8017\u6642\u975e\u5e38\u4e45\u3002
      • Memory swapping \u6703\u8b93\u8a18\u61b6\u9ad4\u4e0d\u5e38\u7528\u7684\u6771\u897f\u653e\u9032\u78c1\u789f\u4e2d\uff0c\u4f46\u662f\u5728\u4e00\u4e9b\u72c0\u6cc1\u9019\u53ef\u80fd\u6703\u88ab\u53cd\u8986\u89f8\u767c\u3002
      • CPU \u6703\u57f7\u884c\u4e0a\u4e0b\u6587\u4ea4\u63db\uff08context-switch\uff09\u597d\u8b93 CPU \u53ef\u4ee5\u6709\u6548\u7684\u88ab\u591a\u57f7\u884c\u5e8f\u5229\u7528\u3002\u9019\u5c31\u53ef\u80fd\u9020\u6210\u4e3b\u8981\u670d\u52d9\u88ab\u5176\u4ed6\u670d\u52d9\u4e2d\u65b7
      • \u7a0b\u5e8f\u5c64\u9762
      • \u6709\u4e9b\u52d5\u614b\u578b\u5225\u7684\u8a9e\u8a00\u6703\u5b9a\u671f\u5b9a\u91cf\u57f7\u884c\u5783\u573e\u56de\u6536\uff08Garbage Collection, GC\uff09\uff0c\u8a2d\u5b9a\u4e0d\u6070\u7576\u53ef\u80fd\u6703\u8b93\u4ed6\u5ef6\u5b95\u7a0b\u5e8f\u5176\u4ed6\u904b\u4f5c\uff08\u4f8b\u5982\u5546\u52d9\u908f\u8f2f\u7684\u7a0b\u5f0f\u78bc\uff09\u7684\u57f7\u884c
      • \u6709\u4e9b\u8a9e\u8a00\u6703\u5b9a\u671f\u8b80\u53d6\u7a0b\u5f0f\u78bc\uff0c\u4e5f\u5c31\u662f\u57f7\u884c\u8cc7\u6599\u7684 I/O\uff0c\u800c\u9019\u500b\u884c\u70ba\u53ef\u80fd\u6703\u56e0\u70ba\u7cfb\u7d71\u78c1\u789f I/O \u6548\u80fd\u53d7\u9650\u800c\u88ab\u8feb\u5ef6\u5b95\u6240\u6709\u76f8\u95dc\u7a0b\u5e8f\u3002
      "},{"location":"feedback/designing-data-intensive-applications/distributed-env/#\u591a\u4e00\u5c64\u570d\u6b04","title":"\u591a\u4e00\u5c64\u570d\u6b04","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

      • \u4f9d\u8cf4\u65bc\u5c08\u9580\u89e3\u6c7a\u5206\u6563\u5f0f\u7cfb\u7d71\u7684\u5de5\u5177
      • Confluent
      • etcd
      • ZooKepper
      • \u7a69\u5b9a\u7684\u6642\u9593
      • \u5982\u679c\u516c\u53f8\u672c\u4f86\u5c31\u6709\u4e00\u7cfb\u5217\u7528\u4f86\u8655\u7406\u932f\u8aa4\u72c0\u614b\u7684\u6a5f\u5236\uff08\u4f8b\u5982\u822a\u7a7a\u516c\u53f8\u8a02\u7968\u932f\u8aa4\u3001\u7dda\u4e0a\u5546\u5834\u5bc4\u932f\u5305\u88f9\uff09\uff0c\u7576\u767c\u751f\u9019\u4e9b\u5c11\u898b\u7684\u7af6\u8cfd\u72c0\u6cc1\u6642\uff0c\u6211\u5011\u5c31\u53ef\u4ee5\u900f\u904e\u65e2\u6709\u8655\u7406\u932f\u8aa4\u7684\u6a5f\u5236\u4f86\u56de\u61c9\u9019\u4e9b\u5ba2\u6236\uff0c\u7562\u7adf\u5982\u679c\u8981\u8b93\u7cfb\u7d71\u64c1\u6709\u9ad8\u4e00\u81f4\u6027\u9700\u8981\u4ed8\u51fa\u4e00\u5b9a\u7684\u4ee3\u50f9\uff0c\u800c\u9019\u4ee3\u50f9\u4e26\u4e0d\u6703\u4f4e\u65bc\u65e5\u5e38\u8655\u7406\u5ba2\u6236\u72c0\u614b\u7684\u6210\u672c\u3002
      "},{"location":"feedback/designing-data-intensive-applications/distributed-ft/","title":"\u5206\u6563\u5f0f\u8cc7\u6599\u5eab\u7684\u5bb9\u932f","text":"

      \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

      • \u7db2\u8def\uff0c\u4ed6\u6703\u6709 \u932f\u5e8f \u3001 \u907a\u5931 \u3001 \u5ef6\u9072 \u3001 \u91cd\u8907 \u7684\u554f\u984c
      • \u7db2\u8def\u600e\u9ebc\u50b3
      • \u7db2\u8def\u50b3\u4e86\u4ec0\u9ebc
      • \u6642\u9418\uff0c\u4ed6\u6703\u6709 \u4e0d\u51c6 \u3001 \u8df3\u6642 \u3001 \u958f\u79d2 \u7684\u554f\u984c
      • NTP
      • \u57f7\u884c\u5e8f\uff0c\u4ed6\u6703\u6709 \u5ef6\u5b95 \u7684\u554f\u984c

      \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

      • \u55ae\u4e00\u7bc0\u9ede\u4e2d\uff0c\u4e00\u81f4\u6027\u4ee3\u8868\u4e26\u884c\u8acb\u6c42\u9020\u6210\u7684\u7af6\u8cfd\u72c0\u6cc1\u7684\u8655\u7406\u3002
      • \u5206\u6563\u5f0f\u7cfb\u7d71\u4e2d\uff0c\u4e00\u81f4\u6027\u4ee3\u8868\u5982\u4f55\u7dad\u6301\u591a\u53f0\u8cc7\u6599\u5eab\u5230\u76f8\u4f3c\u7684\u72c0\u614b\u3002
      "},{"location":"feedback/designing-data-intensive-applications/distributed-ft/#\u6709\u54ea\u4e9b\u5bb9\u932f\u65b9\u5f0f","title":"\u6709\u54ea\u4e9b\u5bb9\u932f\u65b9\u5f0f","text":"

      \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

      • linearizability
      • strict serializability
      • strong one-copy serializability
      • atomic consistency
      • strong consistency
      • immediate consistency
      • external consistency
      "},{"location":"feedback/designing-data-intensive-applications/distributed-ft/#\u9d3f\u820d\u7406\u8ad6","title":"\u9d3f\u820d\u7406\u8ad6","text":"

      \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":"
      • \u9ad8\u6210\u672c
      • \u597d\u7406\u89e3

      \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

      "},{"location":"feedback/designing-data-intensive-applications/distributed-ft/#\u548c\u5168\u57df\u9806\u5e8f\u7684\u95dc\u4fc2","title":"\u548c\u5168\u57df\u9806\u5e8f\u7684\u95dc\u4fc2","text":"

      \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

      • Challenges to Adopting Stronger Consistency at Scale
      • Causality Is Expensive

      \u4e00\u4e9b\u8cc7\u6599\u5eab\u5617\u8a66\u5728\u6eff\u8db3\u56e0\u679c\u95dc\u4fc2\u6642\uff0c\u7d66\u4e88\u6548\u80fd\u548c\u53ef\u7528\u6027

      • Stronger Semantics for Low-Latency Geo-Replicated Storage
      • SwiftCloud
      • Bolt-on
      "},{"location":"feedback/designing-data-intensive-applications/distributed-ft/#\u5168\u57df\u9806\u5e8f","title":"\u5168\u57df\u9806\u5e8f","text":"

      \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":"
      • \u5404\u500b\u8cc7\u6599\u5eab\u7522\u81ea\u5df1\u7684\u7248\u672c\uff08\u4f8b\u5982\u524d\u7db4 ID\uff09
      • \u6642\u9593\u6233\u8a18\uff0c\u6642\u9593\u662f\u4e0d\u6e96\u7684
      • \u5404\u500b\u8cc7\u6599\u5eab\u4f7f\u7528\u7bc4\u570d\u5167\u7684\u7248\u672c\uff0c\u4f8b\u5982 \u8cc7\u6599\u5eab A \u4f7f\u7528 ID 1 \uff5e 100\u3001 \u8cc7\u6599\u5eab B \u4f7f\u7528 ID 101 \uff5e 200

      \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

      • \u524d\u8005\u662f\u8a66\u8457\u8655\u7406\u5206\u6563\u5f0f\u7cfb\u7d71\u4e0b\u7684\u56e0\u679c\u95dc\u4fc2
      • \u5f8c\u8005\u662f\u907f\u514d\u4e26\u884c\u8655\u7406\u7684\u76f8\u4e92\u5f71\u97ff\uff08\u6bcf\u6b21\u7570\u52d5\u8a72\u503c\uff0c\u6703\u589e\u52a0\u4ed6\u7684\u7248\u672c\uff09
      "},{"location":"feedback/designing-data-intensive-applications/distributed-ft/#\u5168\u57df\u9806\u5e8f\u5ee3\u64ad","title":"\u5168\u57df\u9806\u5e8f\u5ee3\u64ad","text":"

      \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

      • \u6210\u529f\u9001\u8a0a\u606f\u5230\u7bc0\u9ede
      • \u7576\u7db2\u8def\u7b49\u554f\u984c\u5c0e\u81f4\u7bc0\u9ede\u5931\u80fd\uff0c\u5c31\u6703\u5617\u8a66\u76f4\u5230\u4ed6\u6210\u529f\u70ba\u6b62
      • \u8a0a\u606f\u662f\u6309\u7167\u9806\u5e8f\u88ab\u57f7\u884c\u7684

      \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

      • \u5728\u4e00\u500b\u62bd\u8c61\u65e5\u8a8c\uff08\u900f\u904e\u5168\u57df\u9806\u5e8f\u5ee3\u64ad\u9054\u6210\uff09\u9644\u52a0\uff08append\uff09\u4e00\u500b\u8acb\u6c42\uff1a\u6211\u8981\u8b80\u73fe\u5728\u4f4f\u9662\u91ab\u751f\u7684\u4eba\u6578
      • \u5411\u9019\u500b\u65e5\u8a8c\u53d6\u5f97\u525b\u525b\u8acb\u6c42\u7684\u7de8\u865f id1
      • \u505a\u4efb\u4f55\u5f97\u5230\u9019\u500b\u503c\u7684\u908f\u8f2f\u5224\u65b7
      • \u767c\u51fa\u53e6\u4e00\u500b\u9810\u5148\u8acb\u6c42\uff08\u4e26\u4e0d\u6703\u57f7\u884c\uff0c\u50c5\u4f5c\u5ba3\u544a\uff09\uff1a\u6211\u8981\u8b93\u9019\u500b\u4f4f\u9662\u91ab\u751f\u4f11\u5047
      • \u53d6\u5f97\u525b\u525b\u9810\u5148\u8acb\u6c42\u7684\u7de8\u865f idn
      • \u78ba\u4fdd id1 \u548c idn \u9593\u6240\u6709\u8acb\u6c42\u90fd\u88ab\u57f7\u884c\uff08id(n-1) \u5f88\u53ef\u80fd\u6703\u6bd4 idn \u665a\u4f86\uff09
      • \u57f7\u884c\u8acb\u6c42 idn\uff0c\u4e26\u518d\u9644\u52a0\u81f3\u62bd\u8c61\u65e5\u8a8c\u4e2d
      "},{"location":"feedback/designing-data-intensive-applications/distributed-ft/#\u8b80\u53d6\u6642\u7684\u7dda\u6027\u7cfb\u7d71","title":"\u8b80\u53d6\u6642\u7684\u7dda\u6027\u7cfb\u7d71","text":"

      \u82e5\u8981\u8b93\u8b80\u53d6\u7684\u8acb\u6c42\u9054\u6210\u7dda\u6027\u7cfb\u7d71\uff0c\u53ef\u4ee5\u6709\u5e7e\u7a2e\u505a\u6cd5\uff1a

      • \u628a\u8b80\u53d6\u8acb\u6c42\u653e\u9032\u62bd\u8c61\u65e5\u8a8c\u4e2d\uff0c\u78ba\u4fdd\u8b80\u53d6\u8acb\u6c42\u4e4b\u524d\u7684\u6240\u6709\u8acb\u6c42\u90fd\u88ab\u57f7\u884c\uff08etcd \u63a1\u7528\u9019\u505a\u6cd5\uff09
      • \u78ba\u4fdd\u62bd\u8c61\u65e5\u8a8c\u4e2d\u7576\u4e0b\u6700\u65b0\u7684\u8acb\u6c42\u88ab\u57f7\u884c\uff0c\u518d\u57f7\u884c\u8b80\u53d6\uff08ZooKeeper \u63a1\u7528\u9019\u505a\u6cd5\uff09

      \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":"
      • \u9818\u8896\u9078\u8209
      • \u5168\u57df\u9806\u5e8f\u5ee3\u64ad
      • \u5206\u6563\u5f0f\u9396\uff08\u570d\u6b04\u9396\uff09
      • \u5206\u6563\u5f0f\u4ea4\u6613\u6a5f\u5236\uff0c\u7576\u591a\u500b\u8cc7\u6599\u5eab\u57f7\u884c\u76f8\u540c\u7684\u7570\u52d5\uff08\u900f\u904e\u5168\u57df\u9806\u5e8f\u5ee3\u64ad/\u5171\u8b58\u6f14\u7b97\u6cd5\uff09\u6642\uff0c\u6709\u5e7e\u500b\u8cc7\u6599\u5eab\u62d2\u7d55\u8a72\u6b21\u7570\u52d5\uff08\u56e0\u70ba\u72c0\u614b\u4e0d\u5141\u8a31\uff0c\u5982\u91cd\u8907\u8a3b\u518a\u4f7f\u7528\u8005\uff0c\u6216\u7bc0\u9ede\u5931\u80fd\uff09\uff0c\u9700\u8981\u8b93\u5176\u4ed6\u5df2\u7d93\u57f7\u884c\u7570\u52d5\u7684\u7bc0\u9ede\u5fa9\u539f\uff08abort\uff09\u3002
      • \u5075\u6e2c\u6a5f\u5236\uff0c\u7576\u6709\u7bc0\u9ede\u5931\u80fd\u6642\u9700\u8981\u6709\u4eba\u5224\u5b9a\u5176\u5931\u80fd\uff0c\u6216\u8005\u5075\u6e2c\u76ee\u524d\u6709\u54ea\u4e9b\u670d\u52d9\u6b63\u5728\u7dda\u4e0a\uff0c\u82e5\u53ea\u6709\u55ae\u4e00\u7bc0\u9ede\u505a\u5224\u65b7\u5c31\u5f88\u5bb9\u6613\u51fa\u932f\u3002
      • \u7368\u7acb\u9650\u5236\uff0c\u4f8b\u5982\u4f7f\u7528\u8005\u8a3b\u518a\u5e33\u865f
      "},{"location":"feedback/designing-data-intensive-applications/distributed-ft/#\u5be6\u4f5c","title":"\u5be6\u4f5c","text":"
      • 2PC(3PC) with XA
      • \u5171\u8b58\u6f14\u7b97\u6cd5

      \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

      • \u5354\u8abf\u8005\u767c\u9001\u7570\u52d5\u8acb\u6c42
      • \u7bc0\u9ede\u9810\u4f5c\u7570\u52d5\u8acb\u6c42\uff0c\u6aa2\u67e5\u662f\u5426\u80fd\u8655\u7406\u8a72\u8acb\u6c42\uff08\u4f8b\u5982\u4f7f\u7528\u8005\u5e33\u865f\u7533\u8acb\u662f\u5426 uniqueness\uff09
      • \u5354\u8abf\u8005\u78ba\u8a8d\u6bcf\u500b\u7bc0\u9ede\u90fd\u80fd\u8655\u7406
      • \u9019\u4e4b\u524d\u4efb\u4e00\u7bc0\u9ede\u7121\u6cd5\u56de\u61c9\u6216\u62d2\u7d55\u8acb\u6c42\u90fd\u6703\u8b93\u6240\u6709\u7bc0\u9ede\u653e\u68c4\u8a72\u7570\u52d5
      • \u5354\u8abf\u8005\u7d00\u9304\u5404\u7bc0\u9ede\u7684\u7d50\u679c\uff08\u63d0\u4ea4\u6216\u8005\u653e\u68c4\uff09\u4e26\u6c7a\u5b9a\u6700\u7d42\u7d50\u679c
      • \u5354\u8abf\u8005\u901a\u77e5\u5404\u7bc0\u9ede\u7d50\u679c\uff0c\u4e14\u5728\u78ba\u4fdd\u5404\u7bc0\u9ede\u90fd\u6536\u5230\u7d50\u679c\u4e4b\u524d\u6703\u4e00\u76f4\u5617\u8a66\u901a\u77e5\u4e26\u62d2\u7d55\u4efb\u4f55\u65b0\u7684\u76f8\u95dc\u7570\u52d5\u8acb\u6c42

      \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":"
      • Zab (ZooKeeper)
      • Raft (etcd)
      • Paxos (Google Spanner, ...)
      • ...

      \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

      • \u4e00\u81f4\u6027\uff0c\u6240\u6709\u7bc0\u9ede\u6700\u7d42\u7684\u7d50\u679c\u662f\u4e00\u6a23\u7684
      • \u552f\u4e00\u6027\uff0c\u6240\u6709\u7bc0\u9ede\u6700\u7d42\u7684\u7d50\u679c\u53ea\u6709\u4e00\u500b
      • \u5408\u6cd5\u6027\uff0c\u4efb\u4e00\u7d50\u679c\u90fd\u662f\u67d0\u4e00\u7bc0\u9ede\u63d0\u51fa\u7684
      • \u5bb9\u932f\u6027\uff0c\u4efb\u4e00\u7bc0\u9ede\u7684\u5931\u80fd\u4e0d\u5f71\u97ff\u5176\u4ed6\u7bc0\u9ede\u6c7a\u5b9a

      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

      "},{"location":"feedback/designing-data-intensive-applications/distributed-ft/#\u8a0e\u8ad6\u4e00\u4e0b\u5171\u8b58\u6f14\u7b97\u6cd5","title":"\u8a0e\u8ad6\u4e00\u4e0b\u5171\u8b58\u6f14\u7b97\u6cd5","text":"

      \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":"
      • \u5206\u5340\u8981\u6ce8\u610f\u8ca0\u8f09_\u504f\u659c_\uff0c\u5176\u8655\u7406\u65b9\u5f0f\u6709\uff1a
      • \u7bc4\u570d\u5206\u5340
      • \u96dc\u6e4a\u5206\u5340
      • \u8def\u7531\u8981\u6709\u5171\u8b58\u8cc7\u6599\uff0c\u5176\u8655\u7406\u65b9\u5f0f\u6709\uff1a
      • \u7bc0\u9ede
      • \u4ee3\u7406\u4eba
      • \u4f7f\u7528\u8005
      • \u5e73\u8861\u8981\u6e1b\u5c11 I/O\uff0c\u5176\u8655\u7406\u65b9\u5f0f\u6709\uff1a
      • \u56fa\u5b9a\u5340\u6578
      • \u56fa\u5b9a\u5340\u9577
      • \u56fa\u5b9a\u5404\u7bc0\u9ede\u5340\u6578

      \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

      • \u7b2c\u4e00\u500b\u5b57\u6bcd\uff0c\u56e0\u70ba\u5b57\u6bcd\u662f\u548c\u5730\u5340\u6709\u95dc\u4fc2\u7684\uff0c\u9019\u6703\u9020\u6210\u53f0\u5317\u7684\u4f7f\u7528\u8005\u6578\u91cf\u5927\u65bc\u82b1\u84ee\u7684\u4f7f\u7528\u8005\uff0c\u9020\u6210\u8ca0\u8f09\u504f\u659c\u3002
      • \u524d\u56db\u500b\u6578\u5b57\uff0c\u56e0\u70ba\u7b2c\u4e00\u500b\u6578\u5b57\u4ee3\u8868\u7537\u5973\uff0c\u5c31\u53ef\u80fd\u56e0\u70ba\u4e0d\u540c\u6708\u4efd\u6c42\u8077\u8005\u7684\u7537\u5973\u6bd4\u4f8b\u4e0d\u540c\uff08\u4f8b\u5982\u9000\u4f0d\u6642\u6bb5\u7684\u6c42\u8077\u8005\u4e2d\u7537\u751f\u5927\u65bc\u5973\u751f\uff09\u800c\u9020\u6210\u8ca0\u8f09\u504f\u659c\u3002
      • \u5f8c\u56db\u78bc\uff0c\u770b\u8d77\u4f86\u53ef\u4ee5\u5e73\u5747\u5206\u914d\u4e86\uff0c\u4f46\u4eca\u5929\u5982\u679c\u6211\u8981\u627e\u53f0\u5317\u5730\u5340\u7684\u6c42\u8077\u8005\u6709\u591a\u5c11\u5462\uff1f

      \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":"
      • \u7167\u9806\u5e8f\u6392
      • \u5bb9\u6613\u88fd\u9020\u71b1\u9ede
      • \u9700\u8981\u5236\u5b9a\u908a\u754c
      • \u96dc\u6e4a\u5f8c\u7167\u9806\u5e8f\u6392
      • \u7bc4\u570d\u641c\u5c0b\u6548\u80fd\u4f4e

      \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, Couchbase, Voldemort\uff0cMongoDB \u5247\u662f\u6703\u76f4\u63a5\u5c0d\u6240\u6709\u8cc7\u6599\u5eab\u641c\u5c0b\u3002

      \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

      \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

      \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

      • Espresso \u4f7f\u7528 Helix (\u5176\u5e95\u5c64\u4ecd\u4f9d\u8cf4\u65bc ZooKeeper)
      • HBase\u3001SolrCloud\u3001Kafka \u4f7f\u7528 ZooKeeper
      • MongoDB \u4f7f\u7528\u81ea\u5df1\u7684 CSRS
      "},{"location":"feedback/designing-data-intensive-applications/distributed-partition/#\u8cc7\u6599\u5eab\u5f7c\u6b64\u5354\u5546","title":"\u8cc7\u6599\u5eab\u5f7c\u6b64\u5354\u5546","text":"

      \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":"
      • \u8981\u76e1\u91cf\u5e73\u5747\u5206\u6563
      • \u4e0d\u80fd\u4e2d\u65b7\u8acb\u6c42
      • \u53ea\u79fb\u52d5\u5fc5\u8981\u7684\u8cc7\u6599
      "},{"location":"feedback/designing-data-intensive-applications/distributed-partition/#\u6709\u54ea\u4e9b\u65b9\u5f0f","title":"\u6709\u54ea\u4e9b\u65b9\u5f0f","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

      • \u56fa\u5b9a\u5340\u6578
      • \u5340\u7684\u6578\u91cf\u4ee3\u8868\u7bc0\u9ede\u6700\u5927\u6578\u91cf
      • \u4eba\u5de5\u6c7a\u5b9a\u8a72\u6578\u3002
        • \u592a\u591a\u6703\u9020\u6210\u7ba1\u7406\u56f0\u96e3\uff08\u8cc7\u6599\u9700\u8981\u88ab\u5283\u5206\u5f97\u5f88\u7d30\uff09
        • \u592a\u5c11\u53ef\u80fd\u6703\u5206\u914d\u4e0d\u5e73\u5747\uff08\u6709\u9918\u6578\uff09
      • Riak\u3001Elasticsearch\u3001Couchbase\u3001Voldemort
      • \u56fa\u5b9a\u5340\u9577
      • \u7576\u5340\u9577\u5230\u4e00\u5b9a\u5927\u5c0f\u6642\uff0c\u5c0d\u534a\u62c6\uff1b\u592a\u5c0f\u6642\u5247\u5408\u4f75
      • \u53e2\u96c6\u4e00\u958b\u59cb\u6642\u53ef\u80fd\u53ea\u6709\u4e00\u5169\u500b\u5206\u5340\uff0c\u53ef\u4ee5\u8a2d\u5b9a\u6700\u4f4e\u5340\u6578
      • HBase\uff08\u4f7f\u7528 HDFS \u5206\u914d\u5404\u5340\uff09\u3001RethinkDB\u3001MongoDB
      • \u6bcf\u7bc0\u9ede\u56fa\u5b9a\u5340\u6578
      • \u65b0\u589e\u7bc0\u9ede\u6642\uff0c\u820a\u7bc0\u9ede\u5206\u4ed6\u4e00\u4e9b\u8cc7\u6599
      • \u7b26\u5408\u76f4\u89ba\uff1a\u8cc7\u6599\u5eab\u8d8a\u591a\uff0c\u5340\u8d8a\u591a
      • \u901a\u5e38\u9069\u7528\u65bc\u96dc\u6e4a\u5206\u5340
      • Cassandra\u3001Ketama

      \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":"
      • \u5982\u4f55\u6574\u5408\u4e0d\u540c\u5206\u5340\u7684\u8cc7\u6599
      • \u6b21\u7d22\u5f15
      "},{"location":"feedback/designing-data-intensive-applications/distributed-partition/#massive-parallel-processingmpp","title":"Massive Parallel Processing\uff08MPP\uff09","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":"
      • \u672c\u5730\u7d22\u5f15\uff08local index\uff09
      • \u5168\u57df\u7d22\u5f15\uff08global index\uff09

      \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

      \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

      • \u7576\u5728\u8b80\u4f60\u53ef\u4ee5\u7de8\u8f2f\u7684\u8cc7\u6599\uff08\u4f8b\u5982\uff0c\u500b\u4eba\u8cc7\u6599\uff09\u7684\u6642\u5019\uff0c\u4f7f\u7528 Leader\u3002
      • \u5982\u679c\u4f60\u53ef\u4ee5\u7de8\u8f2f\u7684\u8cc7\u6599\u5f88\u591a\uff0c\u6703\u5c0e\u81f4 Leader \u8ca0\u64d4\u5f88\u91cd
      • \u7d00\u9304\u4e0a\u6b21\u7de8\u8f2f\u7684\u6642\u9593\uff0c\u4e94\u5206\u9418\u5167\u7684\u8b80\u53d6\u4f7f\u7528 Leader
      • \u7576\u4f7f\u7528\u8005\u662f\u5728\u4e0d\u540c\u88dd\u7f6e\u8b80\u53d6\u6642\uff0c\u6240\u8b02\u7684\u300c\u7d00\u9304\u300d\u5c31\u7121\u6cd5\u5728\u61c9\u7528\u7a0b\u5f0f\u9762\u4e2d\u505a\u5230\u3002

      \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

      • \u64f4\u589e\u6027\u3002\u55ae\u53f0\u6a5f\u5668\u80fd\u57f7\u884c\u7684\u904b\u7b97\u6709\u9650\uff0c\u8b93\u8cc7\u6599\u5eab\u9032\u884c\u8907\u88fd\u4ee3\u8868\u53ef\u4ee5\u7528\u5169\u53f0\u6a5f\u5668\u7684\u904b\u7b97\u80fd\u529b\u53d6\u4ee3\u4e00\u53f0\u5169\u500d\u904b\u7b97\u80fd\u529b\u7684\u6a5f\u5668\uff0c\u9032\u800c\u964d\u4f4e\u6210\u672c\uff08\u5176\u6210\u672c\u7684\u6210\u9577\u66f2\u7dda\u5206\u5225\u662f\u7dda\u6027\u548c\u66f2\u7dda\uff09\u3002
      • \u9ad8\u53ef\u7528\u6027\u3002\u7576\u6a5f\u5668\u58de\u4e86\uff0c\u670d\u52d9\u4ecd\u80fd\u904b\u884c\uff0c\u9664\u6b64\u4e4b\u5916\u6709\u6642\u70ba\u4e86\u7dad\u904b\uff08\u8edf\u9ad4\u5347\u7248\uff09\u5fc5\u9808\u8981\u5148\u505c\u6b62\u4e00\u53f0\u6a5f\u5668\u7684\u670d\u52d9\uff0c\u7b49\u4ed6\u5b8c\u6210\u7dad\u904b\u518d\u8b93\u4ed6\u7e7c\u7e8c\u5c0d\u5916\u670d\u52d9\u3002
      • \u4f4e\u6f5b\u6642\u3002\u5206\u6563\u6a5f\u5668\u65bc\u4e16\u754c\u5404\u5730\uff0c\u8b93\u4e0d\u540c\u5730\u65b9\u7684\u4f7f\u7528\u8005\u53ef\u4ee5\u5c31\u8fd1\u4f7f\u7528\u670d\u52d9\uff0c\u964d\u4f4e\u6f5b\u6642\u3002
      "},{"location":"feedback/designing-data-intensive-applications/distributed-replication/#\u55ae\u53f0\u6a5f\u5668","title":"\u55ae\u53f0\u6a5f\u5668","text":"

      \u55ae\u53f0\u6a5f\u5668\u5176\u5be6\u5728\u5176\u6210\u9577\u904e\u7a0b\u4e5f\u662f\u6709\u4e00\u6a23\u7684\u554f\u984c\u3002

      • \u64f4\u589e\u6027\uff1a\u96a8\u8457\u4e00\u53f0\u6a5f\u5668\u7684\u539f\u59cb\u8a2d\u5099\u6c92\u8fa6\u6cd5\u6eff\u8db3\u904b\u7b97\u6642\uff0c\u6211\u5011\u53ef\u4ee5\u589e\u52a0\u4ed6\u7684 CPU/Memory/Disk\u3002
      • \u5bb9\u932f\u6027\uff1a\u7576\u90e8\u5206 CPU \u58de\u4e86\uff0c\u4e00\u4e9b\u9ad8\u968e\u96fb\u8166\u751a\u81f3\u5141\u8a31\u4e0d\u95dc\u6a5f\u7684\u60c5\u6cc1\u4e0b\u7f6e\u63db\u8a2d\u5099\u3002
      • \u4f4e\u6f5b\u6642\uff1a\u5171\u4eab\u78c1\u789f\uff08shared-disk\uff09\u7684\u67b6\u69cb\uff0c\u96d6\u7136\u55ae\u53f0\u6a5f\u5668\u4e0d\u80fd\u5206\u6563\u5404\u5730\uff0c\u4f46\u662f\u53ef\u4ee5\u5728\u6709\u9650\u5340\u57df\u5167\u900f\u904e\u4e00\u4e9b\u6a5f\u523612\u9054\u5230\u591a\u500b\u6a5f\u5668\u5171\u4eab\u540c\u4e00\u500b\u5132\u5b58\u7a7a\u9593\u3002
      "},{"location":"feedback/designing-data-intensive-applications/distributed-replication/#\u7121\u5171\u4eab\u67b6\u69cb","title":"\u7121\u5171\u4eab\u67b6\u69cb","text":"

      \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

      • \u6709\u4e00\u500b \u5354\u8abf\u8005 \u5728\u5e6b\u5fd9
      • \u8cc7\u6599\u5eab\u88e1\u9762\u6709\u4e00\u500b\u9818\u8896\u6c7a\u5b9a\u8cc7\u6599\u600e\u9ebc\u5b58
      • \u8cc7\u6599\u5eab\u5404\u81ea\u70ba\u653f\uff0c\u518d\u5171\u540c\u6c7a\u5b9a

      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\uff1a\u8cc7\u6599\u5eab\u9593\u7684\u8cc7\u6599\u540c\u6b65
      • \u5206\u5340\uff1a\u628a\u8cc7\u6599\u5206\u88dd

      \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

      • \u8907\u88fd\uff1a\u9ad8\u53ef\u7528\u6027\u3001\u5099\u4efd
      • \u5206\u5340\uff1a\u4e00\u53f0\u6a5f\u5668\u4e0d\u5920\u88dd

      \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

      • \u6709\u9818\u8896\u7684\u65b9\u5f0f\u5c31\u662f\u900f\u904e\u50b3\u64ad\u8907\u88fd\u65e5\u8a8c
      • \u7121\u9818\u8896\u7684\u65b9\u5f0f\u5c31\u662f\u5b9a\u671f\u6574\u4f75

      \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

      • \u5982\u4f55\u8655\u7406\u8d95\u5de5\u554f\u984c
      • \u8d95\u5de5\u9020\u6210\u7684\u8907\u6b0a\uff08split brain\uff09
      • \u518d\u770b\u770b\u55ae\u4e00\u9818\u8896\u548c\u591a\u9818\u8896\u5171\u901a\u7684
      • \u540c\u7570\u6b65 \u554f\u984c
      • \u5982\u4f55\u8907\u88fd\u65e5\u8a8c
      • \u6700\u5f8c\u8a0e\u8ad6\u4e00\u4e0b\u70ba\u4ec0\u9ebc\u4e0d\u597d\u64f4\u589e\u548c\u70ba\u4ec0\u9ebc\u64c1\u6709\u9ad8\u4e00\u81f4\u6027
      "},{"location":"feedback/designing-data-intensive-applications/distributed-replication/#\u8d95\u5de5","title":"\u8d95\u5de5","text":"

      \u524d\u9762\u63d0\u7684\u8d95\u5de5\u554f\u984c\uff0c\u9019\u908a\u8a0e\u8ad6\u4e09\u7a2e\u72c0\u6cc1\u3002\u5206\u5225\u662f

      • \u7576\u6709\u65b0\u7684\u8cc7\u6599\u5eab\u8981\u9032\u4f86\u4e00\u8d77\u5206\u64d4\u5de5\u4f5c\u6642
      • \u6709\u4e00\u53f0\u8cc7\u6599\u5eab\u66ab\u6642\u58de\u6389\uff0c\u9700\u8981\u5f9e\u820a\u7684\u72c0\u614b\u8d95\u5de5\u81f3\u6700\u65b0\u72c0\u614b
      • \u82e5\u8a72\u8cc7\u6599\u5eab\u662f\u8ffd\u96a8\u8005\u6642
      • \u82e5\u8a72\u8cc7\u6599\u5eab\u662f\u9818\u8896\u6642
      "},{"location":"feedback/designing-data-intensive-applications/distributed-replication/#\u65b0\u7684\u8ffd\u96a8\u8005","title":"\u65b0\u7684\u8ffd\u96a8\u8005","text":"

      \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

      • \u5efa\u7acb\u3001\u4f7f\u7528\u5feb\u7167\u3002\u5927\u90e8\u5206\u8cc7\u6599\u5eab\u90fd\u5167\u5efa\u5efa\u7acb\u5feb\u7167\u529f\u80fd\uff0c\u6709\u4e9b\u9700\u8981\u5916\u90e8\u5957\u4ef6\uff0c\u4f8b\u5982 MySQL \u7684 innobackupex
      • \u88dc\u4e0a\u6700\u65b0\u8cc7\u6599\u3002\u88dc\u4e0a\u6700\u65b0\u8cc7\u6599\u524d\uff0c\u9700\u8981\u77e5\u9053\u5feb\u7167\u5728\u6574\u500b\u6b77\u7a0b\u4e2d\u7684\u4f4d\u7f6e\uff08PostgreSQL \u7684 log sequence \u548c MySQL \u7684 binlog coordinates\uff09\uff0c\u4e26\u5f9e\u9019\u4e4b\u5f8c\u4f7f\u7528\u6211\u5011\u5f8c\u9762\u6703\u63d0\u7684_\u8907\u88fd\u65e5\u8a8c_\u4f86\u88dc\u9f4a\u3002
      • \u6649\u5347\u8ffd\u96a8\u8005\u3002\u6e96\u5099\u6649\u5347\u524d\u7684\u72c0\u614b\u6211\u5011\u7a31\u5176\u70ba catch-up
      "},{"location":"feedback/designing-data-intensive-applications/distributed-replication/#\u8ffd\u96a8\u8005\u91cd\u555f","title":"\u8ffd\u96a8\u8005\u91cd\u555f","text":"

      \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

      • \u5b9a\u671f\u63a2\u6e2c\u5176\u662f\u5426\u5b58\u6d3b\uff0c\u82e5\u6642\u9593\u5167\u6c92\u56de\u61c9\uff0c\u5c31\u5224\u5b9a\u5176\u5931\u80fd\u3002
      • \u900f\u904e\u9078\u8209\uff0c\u6216\u8005\u76f4\u63a5\u4f7f\u7528\u524d\u6b21\u9078\u8209\u6240\u5f97\u51fa\u4f86\u7684\u526f\u9818\u8896\u3002\u4e0d\u904e\u901a\u5e38\u90fd\u662f\u9078\u64c7\u64c1\u6709\u6700\u65b0\u8cc7\u6599\u7684\u8ffd\u96a8\u8005\u3002\u9019\u4e00\u985e\u7684\u9078\u8209\uff0c\u82e5\u6c92\u5beb\u597d\u5c31\u6703\u51fa\u73fe\u8907\u6b0a\u554f\u984c\uff0c\u56e0\u6b64\u901a\u5e38\u9700\u8981\u8b93 \u7bc0\u9ede \u6709\u300c\u5171\u8b58\u300d\uff0c\u4e4b\u5f8c\u6703\u63d0\u3002
      • \u8b93\u5927\u5bb6\u90fd\u77e5\u9053\u8ab0\u662f\u65b0\u7684\u9818\u8896\uff08\u5305\u62ec\u820a\u9818\u8896\u91cd\u555f\u5f8c\u4e5f\u8981\u901a\u77e5\u4ed6\uff09\u3002
      "},{"location":"feedback/designing-data-intensive-applications/distributed-replication/#\u9818\u8896\u5931\u80fd\u9020\u6210\u7684\u554f\u984c","title":"\u9818\u8896\u5931\u80fd\u9020\u6210\u7684\u554f\u984c","text":"
      • \u5c1a\u672a\u540c\u6b65\u7684\u8cc7\u6599\u5982\u679c\u5b8c\u5168\u6368\u68c4\uff0c\u6703\u9020\u6210\u4e0b\u9762\u7684\u554f\u984c\u3002
      • \u591a\u500b\u9818\u8896\u7a31\u70ba\u8907\u6b0a\uff08split-brain\uff09\u72c0\u6cc1\uff0c\u9019\u6642\u82e5\u6c92\u9047\u5230\u4e00\u4e9b\u908a\u969b\u72c0\u6cc1\u4f60\u5f88\u53ef\u80fd\u6703\u540c\u6642\u95dc\u9589\u5169\u500b\u9818\u8896\uff0c\u5c0e\u81f4\u8cc7\u6599\u5eab\u63d0\u4f9b\u7684\u670d\u52d9\u5b8c\u5168\u4e2d\u65b7\u3002\u6240\u4ee5\u5373\u4f7f\u6709\u4e9b\u8cc7\u6599\u5eab\u53e2\u96c6\u63d0\u4f9b\u81ea\u52d5\u91cd\u555f\u9818\u8896\u7684\u6a5f\u5236\uff0c\u5f88\u591a\u7dad\u904b\u4eba\u54e1\u4ecd\u7136\u63a1\u7528\u624b\u52d5\u8abf\u6574\u7684\u65b9\u5f0f\u3002\u5f8c\u9762\u63d0\u7684\u5171\u8b58\u554f\u984c\u5c31\u6703\u8a73\u7d30\u8a0e\u8ad6\u4ec0\u9ebc\u908a\u969b\u60c5\u6cc1\u6703\u9020\u6210\u932f\u8aa4\u5224\u5b9a\u3002
      • \u592a\u5c0f\u7684\u6642\u9593\u5340\u9593\u53ef\u80fd\u6703\u56e0\u70ba\u7db2\u8def\u5ef6\u9072\u5c0e\u81f4\u8f15\u6613\u7684\u91cd\u555f\u9818\u8896\uff0c\u589e\u52a0\u6a5f\u5668\u7684\u8ca0\u64d4\u3002

      \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

      • \u900f\u904e\u8f38\u5165\u7684\u8a9e\u6cd5\uff08SQL\u3001MapReduce \u7b49\u7b49\uff09\u76f4\u63a5\u8907\u88fd\u5230\u5176\u4ed6\u8cc7\u6599\u5eab\u3002\u597d\u8655\u662f\u9019\u7a2e\u65b9\u5f0f\u901a\u5e38\u5f88\u7c21\u55ae\u5be6\u4f5c\u800c\u4e14\u50b3\u905e\u7684\u8cc7\u6599\u901a\u5e38\u5f88\u5c0f\u30025.1 \u7248\u524d\u7684 MySQL \u548c\u7279\u5b9a\u60c5\u6cc1\u4e0b\u7684 VoltDB \u90fd\u6703\u4f7f\u7528\u9019\u65b9\u5f0f\u3002\u5176\u5e36\u4f86\u7684\u554f\u984c\uff1a
      • \u975e\u5e38\u6578\u7684\u8cc7\u6599\u7684\u50b3\u905e\uff0c\u4f8b\u5982 NOW()\u3001RAND()\u3001AUTO_INCR() \u7b49\u7b49\u3002
      • \u82e5\u8cc7\u6599\u662f\u6709\u9650\u5236\u689d\u4ef6\u7684\uff0c\u4f8b\u5982 WHERE <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\u3002
      • \u8cc7\u6599\u5eab\u5728\u66f4\u65b0\u8cc7\u6599\u6642\u6703\u6709\u5f88\u591a\u5176\u4ed6\u88ab\u5f71\u97ff\u7684\u8cc7\u6599\uff0c\u4f8b\u5982\u89f8\u767c\u5668\uff08trigger\uff09\u3001\u8caf\u5b58\u7a0b\u5e8f\uff08stored procedure\uff09\u3001\u53c3\u8003\u9375\uff08reference key\uff09\u3002\u5c0e\u81f4\u57f7\u884c\u7d50\u679c\u53ef\u80fd\u4e00\u6a23\u4f46\u662f\u8cc7\u6599\u5eab\u7684\u6574\u9ad4\u72c0\u614b\u537b\u4e0d\u4e00\u81f4
      • \u7b2c\u4e8c\u7a2e\u65b9\u5f0f\u662f\u76f4\u63a5\u4f7f\u7528 WAL\u3002\u524d\u9762\u5728\u8a0e\u8ad6\u7d22\u5f15\u7684\u6642\u5019\u6709\u63d0\u5230\u5169\u7a2e\u5132\u5b58\u65b9\u5f0f\uff1a\u65e5\u8a8c\u7d50\u69cb\u548c\u9801\u5c0e\u5411\u3002\u65e5\u8a8c\u7d50\u69cb\u672c\u4f86\u5c31\u6709\u5728\u7dad\u6301\u65e5\u8a8c\u4e26\u6301\u7e8c\u5728\u80cc\u666f\u57f7\u884c\u6574\u5408\u58d3\u7e2e\uff0c\u9801\u5c0e\u5411\u5247\u662f\u5229\u7528 WAL \u4fdd\u8b49\u8cc7\u6599\u4e0d\u6703\u88ab\u907a\u5931\u3002\u6211\u5011\u5c31\u53ef\u4ee5\u900f\u904e\u9019\u4e9b\u65e5\u8a8c\u7684\u8cc7\u6599\u9032\u884c\u50b3\u905e\u3002PostgreSQL \u548c Oracle \u7b49\u591a\u500b\u8cc7\u6599\u5eab\u90fd\u4f7f\u7528\u9019\u65b9\u5f0f\u3002\u4e0d\u904e\u6703\u6709\u4e9b\u554f\u984c\uff1a
      • \u901a\u5e38\u65e5\u8a8c\u7684\u8cc7\u6599\u90fd\u5f88\u7d30\uff0c\u751a\u81f3\u7d30\u5230\u54ea\u500b\u78c1\u789f\u7684\u54ea\u500b byte \u6703\u585e\u54ea\u4e9b\u8cc7\u6599\u3002\u9019\u5c0e\u81f4\u8907\u88fd\u65e5\u8a8c\u7684\u8cc7\u6599\u4e0d\u80fd\u5728\u4e0d\u540c\u7248\u672c\u7684\u8cc7\u6599\u683c\u5f0f\u9593\u4f7f\u7528\uff0c\u9032\u800c\u589e\u52a0\u7dad\u904b\u7684\u56f0\u96e3\u5ea6\u3002
      • \u908f\u8f2f\u65e5\u8a8c\u4ecb\u65bc\u4e0a\u8ff0\u5169\u7a2e\u65b9\u5f0f\u7684\u4e2d\u9593\uff0c\u4e0d\u6703\u50cf\u8a9e\u6cd5\u90a3\u6a23\u62bd\u8c61\uff0c\u4f46\u53c8\u4e0d\u6703\u7d30\u5230\u50cf WAL \u90a3\u6a23\u3002\u4f8b\u5982\u8a9e\u6cd5\u662f UPDATE 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
      • \u984d\u5916\u88dc\u5145\u4e00\u7a2e\uff0c\u6709\u53ef\u80fd\u5728\u50b3\u905e\u8cc7\u6599\u6642\u6703\u5e0c\u671b\u6709\u500b\u4e2d\u4ecb\u5668\u5e6b\u52a9\u6211\u5011\u52a0\u4e0a\u4e00\u4e9b\u5ba2\u5236\u7684\u5546\u52d9\u908f\u8f2f\u4fee\u6b63\uff0c\u4f8b\u5982\u52a0\u5bc6\u3001\u7279\u5b9a\u8cc7\u6599\u7684\u4fee\u6b63\u548c\u8655\u7406\u885d\u7a81\u7b49\u7b49\u3002\u9019\u6642\u53ef\u4ee5\u4f7f\u7528 Oracle \u7684 GoldenGate\u3002\u4f60\u4e5f\u53ef\u4ee5\u900f\u904e\u89f8\u767c\u5668\u548c\u8caf\u5b58\u7a0b\u5e8f\u628a\u8cc7\u6599\u532f\u9032\u5176\u4ed6\u8868\u683c\uff08table\uff09\u4e2d\u4f86\u9054\u6210\u4e00\u6a23\u7684\u4e8b\u60c5\u3002\u4f8b\u5982 Oracle \u7684 Databus \u548c Postgres \u7684 Bucardo\u3002\u9019\u4e9b\u65b9\u6cd5\u96d6\u7136\u53ef\u4ee5\u589e\u52a0\u5f88\u591a\u5f48\u6027\uff0c\u4f46\u662f\u56e0\u70ba\u6d89\u53ca\u5230\u61c9\u7528\u7a0b\u5f0f\u908f\u8f2f\u548c\u8cc7\u6599\u5eab\u908f\u8f2f\u9593\u7684\u8f49\u63db\u6240\u4ee5\u901a\u5e38\u5bb9\u6613\u6709\u932f\u800c\u4e14\u6703\u589e\u52a0\u8cc7\u6599\u5eab\u7684\u8ca0\u64d4\u3002
      "},{"location":"feedback/designing-data-intensive-applications/distributed-replication/#\u9069\u5408\u55ae\u4e00\u8cc7\u6599\u4e2d\u5fc3","title":"\u9069\u5408\u55ae\u4e00\u8cc7\u6599\u4e2d\u5fc3","text":"

      \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

      • \u4e86\u89e3\u591a\u9818\u8896\u5e36\u4f86\u54ea\u4e9b\u597d\u3001\u58de\u8655\u3002
      • \u591a\u9818\u8896\u7684\u72c0\u6cc1\u5176\u5be6\u6eff\u5e38\u898b\u7684\uff1f
      • \u4ecb\u7d39\u4e0d\u540c\u62d3\u64b2\uff08topology\uff09\u4e0b\u7684\u60c5\u6cc1\u3002
      • \u56e0\u70ba\u540c\u6642\u6709\u591a\u500b\u8cc7\u6599\u5eab\u5728\u5beb\u5165\uff0c\u5982\u4f55\u8655\u7406\u885d\u7a81\uff1f
      • \u5982\u4f55\u68b3\u7406\u56e0\u679c\u95dc\u4fc2\u3002
      "},{"location":"feedback/designing-data-intensive-applications/distributed-replication/#\u591a\u9818\u8896\u7684\u597d\u8655","title":"\u591a\u9818\u8896\u7684\u597d\u8655","text":"

      \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

      • \u907f\u514d\u885d\u7a81\u3002\u5982\u679c\u53ef\u4ee5\uff0c\u628a\u76f8\u540c\u7684\u8cc7\u6599\u7684\u7de8\u8f2f\u4e1f\u7d66\u540c\u4e00\u500b\u9818\u8896\uff0c\u4f8b\u5982\u4f7f\u7528\u8005\u7de8\u8f2f\u500b\u4eba\u8cc7\u6599\uff0c\u5c31\u628a\u8a72\u4f7f\u7528\u8005\u7684\u6240\u6709\u5beb\u5165\u8acb\u6c42\u4e1f\u5230\u540c\u4e00\u500b\u9818\u8896\uff08\u4e5f\u8a31\u662f\u96e2\u4ed6\u6700\u8fd1\u7684 DC\uff09\u3002\u4f46\u5982\u679c\u540c\u4e00\u6642\u9593\u5730\u7403\u53e6\u4e00\u908a\u6709\u4eba\u4e5f\u5728\u7de8\u8f2f\u76f8\u540c\u4f7f\u7528\u8005\u7684\u8cc7\u8a0a\u6642\uff0c\u9084\u662f\u7121\u53ef\u907f\u514d\u7684\u6709\u885d\u7a81\u3002
      • \u7d66\u4e88\u5404\u5beb\u5165\u8acb\u6c42\u4e00\u500b\u6642\u9593\u6233\u3002\u53ea\u8b93\u6700\u65b0\u7684\u8cc7\u8a0a\u5beb\u5165\uff08Last Write Win\uff0cLWW\uff09\uff0c\u96d6\u7136\u9019\u5f88\u5e38\u898b\uff0c\u4f46\u537b\u5f88\u5bb9\u6613\u51fa\u73fe\u8cc7\u6599\u7684\u907a\u5931\u3002\u5982\u679c\u53c8\u8003\u616e\u5230\u6a5f\u5668\u7684\u6642\u9418\u662f\u4e0d\u51c6\u7684\u9019\u500b\u8b70\u984c\u6642\uff0c\u5f88\u53ef\u80fd\u65b0\u8cc7\u6599\u6703\u88ab\u820a\u8cc7\u6599\u8986\u84cb\uff0c\u6642\u9418\u554f\u984c\u6703\u7559\u5230\u5225\u7bc7\u8a0e\u8ad6\u3002
      • Cassandra \u53ea\u652f\u63f4\u9019\u65b9\u5f0f
      • Riak \u53ef\u4ee5\u9078\u64c7\u4f7f\u7528\u9019\u65b9\u5f0f
      • \u9ad8\u968e\u9818\u8896\u53ef\u4ee5\u8907\u5beb\u4f4e\u968e\u9818\u8896\u7684\u5beb\u5165\u8acb\u6c42\u3002\u57fa\u672c\u8ddf LWW \u5f88\u50cf\u3002
      • \u628a\u6240\u6709\u885d\u7a81\u8a18\u9304\u8d77\u4f86\u4e26\u5728
      • \u4e0b\u6b21\u8acb\u6c42\u6642\uff0c\u8981\u6c42\u61c9\u7528\u7a0b\u5f0f\uff08\u6216\u4f7f\u7528\u8005\uff09\u6574\u4f75\u885d\u7a81
      • \u767c\u751f\u885d\u7a81\u6642\uff0c\u8981\u6c42\u61c9\u7528\u7a0b\u5f0f\uff08\u6216\u4f7f\u7528\u8005\uff09\u6574\u4f75\u885d\u7a81
      "},{"location":"feedback/designing-data-intensive-applications/distributed-replication/#\u5176\u4ed6\u8655\u7406\u885d\u7a81\u7684\u9818\u57df","title":"\u5176\u4ed6\u8655\u7406\u885d\u7a81\u7684\u9818\u57df","text":"
      • \u7279\u6b8a\u7684\u8cc7\u6599\u578b\u5225\uff08Conflict-free Replicated DataTypes\uff0cCRDTs\uff09\uff0c\u4f8b\u5982 Map\u3001counter \u7b49\u7b49\uff0c\u5929\u751f\u5bb9\u8a31\u885d\u7a81
      • \u7279\u6b8a\u7684\u8cc7\u6599\u67b6\u69cb\uff08Mergeable persistent data structures\uff09\uff0c\u985e\u4f3c\u7248\u672c\u63a7\u5236\u7cfb\u7d71\uff08\u5982\uff0cGit\uff09\uff0c\u6703\u628a\u885d\u7a81\u8a18\u9304\u8d77\u4f86\u4e26\u4f9d\u7167\u8a2d\u5b9a\u6574\u4f75\u8d77\u4f86
      • \u6587\u5b57\u6574\u5408\uff08Operational transformation\uff09\uff0c\u5be6\u4f5c\u65bc Google Docs \u4e2d\uff0c\u628a\u5b57\u4e32\u7576\u6210\u9663\u5217\u4e26\u5141\u8a31\u540c\u6642\u63d2\u5165\u65b0\u503c\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

      1. Client1 \u8acb\u6c42\u5beb\u5165 [milk]\uff0c\u5b9a\u5176\u70ba\u7248\u672c\u4e00
      2. Client2 \u8acb\u6c42\u5beb\u5165 [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]
      3. Client1 \u8acb\u6c42\u5beb\u5165 [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]
      4. Client2 \u8acb\u6c42\u5beb\u5165 [eggs, milk, ham] \u5f97\u5230\u7248\u672c\u4e09\u7684\u8cc7\u6599 [milk, flour]\uff0c\u4e26\u6574\u5408\u6210 [eggs, milk, ham, flour]
      5. Client1 \u6574\u5408\u6210 [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

      • Raik
      • Cassandra
      • Voldemort

      \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

      • \u5982\u540c\u524d\u9762\u63d0\u5230\u7684\uff0c\u540c\u7570\u6b65\u7684\u9078\u64c7\uff0c\u5982\u679c\u55ae\u4e00\u8cc7\u6599\u5eab\u640d\u58de\uff0c\u6211\u9700\u8981\u7b49\u4ed6\u5fa9\u539f\u624d\u80fd\u5b8c\u6210\u8acb\u6c42\u55ce\uff1f
      • \u5982\u4f55\u505a\u5230\u591a\u53f0\u8cc7\u6599\u5eab\u7684\u8cc7\u6599\u4e00\u81f4\u6027
      • \u70ba\u4ec0\u9ebc\u7121\u9818\u8896\u53ef\u4ee5\u505a\u5230\u9ad8\u53ef\u7528\u6027
      "},{"location":"feedback/designing-data-intensive-applications/distributed-replication/#\u9700\u8981\u5168\u90e8\u9001\u6210\u529f\u55ce","title":"\u9700\u8981\u5168\u90e8\u9001\u6210\u529f\u55ce\uff1f","text":"

      \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

      • \u4e26\u884c\u7684\u8b80\u53d6\u548c\u5beb\u5165
      • \u4e26\u884c\u7684\u885d\u7a81\u5beb\u5165
      • \u6210\u529f\u5beb\u5165\u7684\u8cc7\u6599\u5eab\u58de\u6389\uff0c\u5c0e\u81f4\u65b0\u7684\u8cc7\u6599\u5eab\u4f7f\u7528\u820a\u8cc7\u6599\u300c\u8d95\u4e0a\u300d
      • \u6642\u9418\u4e0d\u6e96\u5c0e\u81f4\u7684\u554f\u984c
      "},{"location":"feedback/designing-data-intensive-applications/distributed-replication/#\u9d3f\u5de2\u539f\u7406","title":"\u9d3f\u5de2\u539f\u7406","text":"

      \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":"
      • \u5206\u6563\u5f0f\u8cc7\u6599\u5eab
      • \u64f4\u589e\u6027
      • \u9ad8\u53ef\u7528\u6027\uff08\u9ad8\u5bb9\u932f\u6027\uff09
      • \u4f4e\u6f5b\u6642
      • \u8907\u88fd\u3001\u5206\u5340

      \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

      1. Network Attached Storage(NAS)\u00a0\u21a9

      2. Storage Area Network(SAN)\u00a0\u21a9

      "},{"location":"feedback/designing-data-intensive-applications/farewell/","title":"\u7e3d\u7d50\u548c\u6574\u5408","text":"

      \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

      • \u539f\u5b50\u6027\uff1a\u8b93\u6240\u6709\u76f8\u95dc\u7684\u8acb\u6c42\u90fd\u88ab\u5305\u88dd\u6210\u55ae\u4e00\u7a0b\u5e8f\uff0c\u7576\u4e00\u7cfb\u5217\u8acb\u6c42\u4e2d\u6709\u4efb\u4e00\u8acb\u6c42\u767c\u751f\u932f\u8aa4\uff0c\u5c31\u8b93\u8cc7\u6599\u5eab\u56de\u5230\u4e00\u7cfb\u5217\u8acb\u6c42\u524d\u7684\u72c0\u614b\u3002
      • \u9694\u96e2\u6027\uff1a\u4ea4\u6613\u548c\u4ea4\u6613\u4e4b\u9593\u4e0d\u6703\u4e92\u76f8\u5f71\u97ff\uff0c\u4f8b\u5982 \u4ea4\u6613 A \u770b\u4e0d\u5230 \u4ea4\u6613 B \u4ea4\u6613\u5c1a\u672a\u63d0\u4ea4\u524d\u7684\u72c0\u614b\u3002

      \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\uff0c\u4e00\u7fa4\u7bc0\u9ede\u4e2d\u6709\u4e00\u500b\u9818\u8896\u8ca0\u8cac\u670d\u52d9\u7570\u52d5\u8acb\u6c42\uff0c\u5176\u4ed6\u7bc0\u9ede\u8ca0\u8cac\u670d\u52d9\u8b80\u53d6\u8acb\u6c42\uff0c\u9818\u8896\u900f\u904e\u50b3\u905e\u8907\u88fd\u65e5\u8a8c\u7d66\u5176\u4ed6\u7bc0\u9ede\u9054\u6210\u4e00\u81f4\u6027\u3002
      • \u591a\u9818\u8896\uff0c\u4e00\u7fa4\u7bc0\u9ede\u6709\u591a\u500b\u9818\u8896\uff0c\u9019\u6642\u4e0d\u50c5\u53ef\u4ee5\u5206\u6563\u7570\u52d5\u8acb\u6c42\u4e5f\u80fd\u628a\u591a\u500b\u53e2\u96c6\u653e\u5728\u4e0d\u540c\u5730\u7406\u5340\u57df\u7684\u8cc7\u6599\u4e2d\u5fc3\uff0c\u9054\u5230\u570b\u969b\u5316\u7684\u4f4e\u6f5b\u6642\u670d\u52d9\u3002
      • \u7121\u9818\u8896\uff0c\u900f\u904e\u5916\u90e8\u5354\u8abf\u8005\u628a\u8acb\u6c42\u5206\u914d\u5230\u6240\u6709\uff08\u6216\u8005\u8aaa\u591a\u6578\uff09\u7bc0\u9ede\uff0c\u53ef\u4ee5\u89e3\u6c7a\u55ae\u4e00\u9818\u8896\u7684\u4f4e\u53ef\u7528\u53c8\u80fd\u89e3\u6c7a\u591a\u9818\u8896\u7684\u7570\u52d5\u885d\u7a81\u3002

      \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

      "},{"location":"feedback/designing-data-intensive-applications/farewell/#\u5206\u6563\u5f0f\u8cc7\u6599\u5eab\u7684\u5bb9\u932f","title":"\u5206\u6563\u5f0f\u8cc7\u6599\u5eab\u7684\u5bb9\u932f","text":"

      \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

      • \u7d22\u5f15\u4e2d\u4e0d\u540c\u8cc7\u6599\u5eab\u53ef\u80fd\u6703\u4f7f\u7528 \u6392\u5e8f\u5b57\u4e32\u8868 \u6216 B-Tree\uff0c\u9019\u5169\u8005\u5206\u5225\u6709\u4e0d\u540c\u7684\u512a\u52a3\u52e2\u3002
      • \u5206\u6563\u5f0f\u8907\u88fd\u6642\u9078\u64c7 \u55ae\u4e00\u9818\u8896\u3001\u591a\u9818\u8896 \u6216 \u7121\u9818\u8896\u3002

      \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

      • \u5206\u6563\u5f0f\u4ea4\u6613\u67b6\u69cb\uff1a\u4f4e\u6548\u80fd\u548c\u4f4e\u5bb9\u932f
      • \u4e8b\u4ef6\u4f86\u6e90\uff1a\u9ad8\u6548\u80fd\u548c\u9ad8\u53ef\u7528\uff0c\u4f46\u50c5\u80fd\u4fdd\u6301\u6700\u7d42\u4e00\u81f4\u6027

      \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":"
      • \u7570\u6b65
      • \u6c7a\u5b9a\u6027
      • \u539f\u5b50\u6027\u7684\u8f49\u5ac1
      • \u56e0\u679c

      \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

      • \u5728\u767c\u9001\u6709\u56e0\u679c\u95dc\u4fc2\u7684\u4e8b\u4ef6\u6642\u900f\u904e\u55ae\u4e00\u7bc0\u9ede\u7684\u908f\u8f2f\u6642\u9418\u4f86\u8ce6\u4e88\u4e8b\u4ef6\u984d\u5916\u7684\u8cc7\u8a0a\u3002\u4e5f\u5c31\u662f\u589e\u52a0\u4e8b\u4ef6\u7684 metadata\u3002
      • \u8b93\u8b80\u53d6\u4e5f\u8b8a\u6210\u4e8b\u4ef6\uff0c\u6709\u9ede\u50cf\u662f stream-table join\uff0c \u8b80\u53d6\u4e8b\u4ef6\u662f\u4e32\u6d41\u7684\uff0c\u800c\u5176\u4ed6\u76f8\u95dc\u8cc7\u8a0a\u7684\u300c\u72c0\u614b\u300d\u5247\u88ab\u5132\u5b58\u9032\u8a18\u61b6\u9ad4\u4e2d\uff0c\u4f8b\u5982\u8cfc\u7269\u8eca\u7684\u72c0\u614b\u3002
      • \u81ea\u52d5\u8655\u7406\u885d\u7a81\u7684\u6f14\u7b97\u6cd5\uff0c\u4f46\u6709\u6642\u7576\u611f\u77e5\u5230\u885d\u7a81\u6642\u5df2\u7d93\u4f86\u4e0d\u53ca\u4e86\uff08\u4f8b\u5982\u9001\u51fa\u90f5\u4ef6\uff09

      \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\u7b97
      BEGIN 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\u884c
      ALTER 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

      • \u5305\u88dd\u6240\u6709\u7570\u52d5\u5230\u55ae\u4e00\u4e8b\u4ef6
      • \u5728\u6240\u6709\u4e8b\u4ef6\u4e2d\u6dfb\u52a0\u552f\u4e00\u7684\u7de8\u865f\uff0c\u8ce6\u4e88\u4e4b\u5f8c\u6bcf\u4e00\u6b21\u7684\u8a08\u7b97\u90fd\u662f\u51aa\u7b49\u7684
      • \u5132\u5b58\u7684\u4e8b\u4ef6\u662f\u4e0d\u8b8a\u7684
      • \u4f7f\u7528\u6c7a\u5b9a\u6027\u7684\u884d\u751f\u51fd\u793a\u8ffd\u8e64\u60f3\u8981\u7684\u4e8b\u4ef6
      • \u884d\u751f\u65b0\u9762\u8c8c
      "},{"location":"feedback/designing-data-intensive-applications/farewell/#\u76e3\u63a7\u5065\u5eb7\u72c0\u6cc1","title":"\u76e3\u63a7\u5065\u5eb7\u72c0\u6cc1","text":"

      \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":"
      • Lambda Architecture \u6574\u5408\u6279\u6b21\u8655\u7406\u548c\u4e32\u6d41\u8655\u7406\uff0c\u7f3a\u9ede\u548c\u8655\u7406\u7f3a\u9ede\u7684\u4e00\u4e9b\u6a5f\u5236\u3002
      • \u5229\u7528\u806f\u5408\uff08join\uff09\u4e0d\u540c\u4e32\u6d41\u8655\u7406\u7684\u8f38\u51fa\uff0c\u4f86\u89e3\u6c7a\u8de8\u5206\u5340\u7684\u641c\u5c0b\uff0c\u985e\u4f3c MPP\uff0c\u53ea\u662f\u662f\u7528\u4e8b\u4ef6\u4f86\u6e90\u7684\u57fa\u790e
      • \u5b9a\u671f\u642c\u9077\u8cc7\u6599\u907f\u514d\u786c\u9ad4\u7684\u640d\u58de
      • \u8981\u505a\u5c0d\u7684\u4e8b\uff1a\u96b1\u79c1\u6b0a\u548c\u81ea\u6211\u898f\u7bc4
      "},{"location":"feedback/designing-data-intensive-applications/farewell/#\u7d50\u8a9e","title":"\u7d50\u8a9e","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

      • \u4e00\u6708\u4efd\u6536\u5165\u7e3d\u984d\uff1f
      • \u4eca\u5e74\u6210\u529f\u61c9\u5fb5\u7684\u4eba\u6578\uff1f
      • \u54ea\u7a2e\u8077\u985e\u6700\u591a\u4eba\u61c9\u5fb5\uff1f

      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

      • \u8cfc\u7269\u8005\u5728\u4e00\u5929\u4e2d\u8cfc\u8cb7\u7684\u6642\u9593\u5206\u4f48
      • \u54ea\u500b\u5546\u54c1\u8ce3\u6700\u597d

      \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

      • \u6c42\u8077\u8005\u5c65\u6b77\u8cc7\u6599\u5eab
      • \u6c42\u8077\u8005\u7684\u6027\u5411\u6e2c\u9a57

      \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":"
      • \u6536\u8cbb\u7684
      • Teradata
      • Vertica
      • SAP HANA
      • ParAccel
      • Amazon Redshift based on ParAccel and PostgreSQL
      • \u958b\u6e90\u7684 SQL-on-Hadoop \u5c08\u6848
      • Google's Dremel paper
      • Apache Hive
      • Apache Spark
      • Cloudera Impala
      • Facebook Presto
      • Apache Drill
      "},{"location":"feedback/designing-data-intensive-applications/foundation-dw/#\u7db1\u76ee","title":"\u7db1\u76ee","text":"

      \u8cc7\u6599\u5009\u5132 \u53ef\u80fd\u7684\u7db1\u76ee\uff08schema\uff09\u8a2d\u8a08\u6709\u5169\u7a2e\uff1a

      • \u661f\u72c0\u7db1\u76ee\uff08star schema\uff09
      • \u8cc7\u6599\u5009\u5132 \u7684\u8cc7\u6599\u548c\u5176\u4ed6\u8cc7\u6599\u5eab\u7684\u8cc7\u6599\u95dc\u7cfb\uff0c\u6a23\u5b50\u5c31\u597d\u50cf\u661f\u661f\u767c\u51fa\u4f86\u7684\u5149\u4e00\u6a23
      • \u96ea\u82b1\u7db1\u76ee\uff08snowflake schema\uff09
      • \u8cc7\u6599\u548c\u8cc7\u6599\u7684\u95dc\u4fc2\u5c64\u5c64\u4ea4\u758a
      "},{"location":"feedback/designing-data-intensive-applications/foundation-dw/#\u661f\u72c0\u7db1\u76ee","title":"\u661f\u72c0\u7db1\u76ee","text":"

      \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\u8868
      • fact \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

      • \u597d\u64f4\u5145\uff0c\u4f8b\u5982\uff1a\u7576\u6709\u65b0\u7684\u7a2e\u985e\uff0c\u5c31\u4e0d\u7528\u540c\u6642\u53bb\u6539\u7a2e\u985e\u8868\u548c\u7522\u54c1\u8868
      • \u9069\u5408\u58d3\u7e2e\u548c\u512a\u5316\u641c\u5c0b\u901f\u5ea6\uff08\u900f\u904e Bitmap Index\uff09\uff0c\u5f8c\u9762\u6703\u4ecb\u7d39
      • \u597d\u8abf\u6574\uff0c\u65b0\u589e\u5c6c\u6027\u6642\uff0c\u4e0d\u9700\u8981\u8003\u616e\u653e\u5728\u54ea\u500b\u8868\u6bd4\u8f03\u9069\u5408
      • \u8f03\u597d\u7406\u89e3\uff0c\u4e0d\u7528\u5c64\u5c64\u5806\u780c\uff0c\u5c64\u5c64\u89e3\u6790
      "},{"location":"feedback/designing-data-intensive-applications/foundation-dw/#\u884c\u5f0f\u8cc7\u6599\u5eab","title":"\u884c\u5f0f\u8cc7\u6599\u5eab","text":"

      \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

      • \u901a\u5e38\u4e0d\u540c\u8a9e\u8a00\u4e4b\u9593\u662f\u7121\u6cd5\u4e92\u76f8\u63a5\u901a\u7684
      • \u53ef\u80fd\u6703\u89f8\u767c\u7269\u4ef6\u7684\u5efa\u7f6e\uff0c\u6709\u5b89\u5168\u6027\u7591\u616e
      • \u4e26\u975e\u4ee5\u300c\u524d\u5f8c\u76f8\u5bb9\u300d\u70ba\u8a2d\u8a08\u6838\u5fc3
      • \u6548\u7387\u901a\u5e38\u5f88\u5dee
      "},{"location":"feedback/designing-data-intensive-applications/foundation-encode/#\u65b9\u4fbf\u4eba\u985e\u95b1\u8b80","title":"\u65b9\u4fbf\u4eba\u985e\u95b1\u8b80","text":"

      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

      • \u4f54\u7a7a\u9593
      • \u7121\u6cd5\u5132\u5b58\u4e8c\u9032\u4f4d\u6587\u5b57\uff0c\u96d6\u7136\u53ef\u4ee5\u4f7f\u7528 Base64 \u628a\u4e8c\u9032\u4f4d\u8f49\u63db\u6210 Unicode \u6587\u5b57\uff0c\u537b\u9700\u8981\u984d\u5916\u7684\u6548\u80fd\u548c\u9ad4\u7a4d
      • Base64 \u6bcf 6 \u500b bit \u8f49\u6210\u4e00\u500b ASCII \u5b57\u5143\uff081 \u500b byte\uff09\uff0c\u6240\u4ee5\u9ad4\u7a4d\u6703\u6bd4\u76f4\u63a5\u505a\u4e8c\u9032\u4f4d\u8f49\u63db\u5927 1.3 \u500d
      • \u6c92\u6709\u7db1\u76ee\uff0c\u82b1\u6642\u9593\u7406\u89e3\u548c\u7ba1\u7406
      • \u5927\u6578\u5b57\u4e0d\u597d\u5132\u5b58\uff0c\u6574\u6578\u3001\u5c0f\u6578\u7684\u5340\u5206

      \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

      "},{"location":"feedback/designing-data-intensive-applications/foundation-encode/#\u4e8c\u9032\u4f4d\u7de8\u78bc","title":"\u4e8c\u9032\u4f4d\u7de8\u78bc","text":"

      \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

      • Apache Thrift - \u521d\u59cb\u65bc Facebook
      • Protocol Buffer - Google
      • Apache Avro

      \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

      • \u5411\u5f8c\u76f8\u5bb9\uff1a\u820a\u7684\u7a0b\u5f0f\u78bc\u8b80\u5230\u7684\u8cc7\u6599\u542b\u6709\u65b0\u7684\u7db1\u76ee\u5b9a\u7fa9\u7684\u6b04\u4f4d\u6642\uff0c\u4ecd\u7136\u53ef\u4ee5\u904b\u884c
      • \u5411\u524d\u76f8\u5bb9\uff1a\u65b0\u7684\u7a0b\u5f0f\u78bc\u8b80\u5230\u7684\u8cc7\u6599\u542b\u6709\u5df2\u7d93\u88ab\u522a\u9664\u6216\u4e0d\u540c\u683c\u5f0f\u7684\u6b04\u4f4d\u6642\uff0c\u4ecd\u7136\u53ef\u4ee5\u904b\u884c

      \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

      • BinaryProtocol
      • CompactProtocol
      "},{"location":"feedback/designing-data-intensive-applications/foundation-encode/#protocol-buffer","title":"Protocol Buffer","text":"

      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\u3002
      • \u6bcf\u500b tag ID \u4e0d\u53bb\u66f4\u52d5\u4f86\u4fdd\u6301\u524d\u5f8c\u76f8\u5bb9\u3002\u7576\u4f7f\u7528\u820a\u7684\u7db1\u76ee\u53bb\u8b80\u53d6\u672a\u77e5\u6b04\u4f4d\u6642\uff0c\u7701\u7565\u4e4b\u3002
      • \u65b0\u589e\u6b04\u4f4d\u6642\u82e5\u8a2d\u5b9a required \u6703\u8b93\u820a\u7a0b\u5f0f\u78bc\u8f38\u51fa\u932f\u8aa4\uff0c\u9700\u8981\u7d66\u5b9a\u9810\u8a2d\u503c\u3002
      • \u8b8a\u66f4\u6a94\u6848\u683c\u5f0f\u53ef\u80fd\u5c0e\u81f4\u8cc7\u6599\u4e0d\u5b8c\u5168\uff0c\u4f8b\u5982 int8 \u8f49\u5230 int16
      • ProtocolBuffers \u6c92\u6709 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\u3002
      "},{"location":"feedback/designing-data-intensive-applications/foundation-encode/#apache-avro","title":"Apache Avro","text":"

      Apache 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

      • \u578b\u5225\u548c\u4e0a\u9762\u63d0\u7684\u5c0d\u61c9\u6a5f\u5236\u5f88\u50cf\uff0c\u5728\u7a0b\u5f0f\u5be6\u4f5c\u9700\u8981\u8a2d\u8a08\u578b\u5225\u7684\u8f49\u63db\u3002
      • \u8a2d\u5b9a 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
      "},{"location":"feedback/designing-data-intensive-applications/foundation-encode/#\u5982\u4f55\u77e5\u9053\u7de8\u78bc\u6642\u7684\u7db1\u76ee\u7248\u672c","title":"\u5982\u4f55\u77e5\u9053\u7de8\u78bc\u6642\u7684\u7db1\u76ee\u7248\u672c","text":"

      \u6839\u64da\u61c9\u7528\u7a0b\u5f0f\u800c\u6709\u5dee\u7570\uff1a

      • \u82e5\u8cc7\u6599\u5eab\u662f\u5728 Hadoop \u67b6\u69cb\u4e4b\u4e0a\uff0c\u5c31\u53ef\u4ee5\u5728\u6bcf\u4efd\u6a94\u6848\u524d\u9762\u6dfb\u52a0\u7db1\u76ee\u7248\u672c\u3002
      • \u82e5\u8cc7\u6599\u5eab\u7684\u6bcf\u7b46\u8cc7\u6599\u90fd\u53ef\u80fd\u6703\u6709\u4e0d\u540c\u7684\u7248\u672c\uff0c\u5c31\u9700\u8981\u5728\u6bcf\u7b46\u8cc7\u6599\u524d\u8a2d\u5b9a\u7248\u672c\uff0c\u5982 Espresso\u3002
      • \u82e5\u662f\u5728\u7db2\u8def\u4e0a\u9032\u884c\u96d9\u5411\u6e9d\u901a\u7684\u61c9\u7528\u7a0b\u5f0f\uff0c\u53ef\u4ee5\u5354\u5546\u51fa\u5f7c\u6b64\u7684\u7248\u672c\uff0c\u5982 Avro RPC

      \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

      • \u5728\u89e3\u78bc\u6642\u4e0d\u6703\u53d7\u7db1\u76ee\u5f71\u97ff\uff0c\u53ef\u8f15\u6613\uff08\u8cc7\u6599\u5eab\u9762\uff09\u5141\u8a31\u5411\u5f8c\uff08\u524d\uff09\u7684\u76f8\u5bb9\u3002
      • \u53ef\u4ee5\u900f\u904e\u6587\u4ef6\u65b9\u5f0f\u88dc\u8db3\u7db1\u76ee\uff0c\u4e14\u80fd\u8a73\u7d30\u9650\u5236\u8cc7\u6599\u3002\u5982\uff1a\u6578\u5b57\u53ea\u80fd\u5728 0~1 \u4e4b\u9593\u3002

      \u7136\u800c\u4e8c\u9032\u4f4d\u7de8\u78bc\u4e5f\u6709\u5176\u597d\u8655\uff1a

      • \u5132\u5b58\u66f4\u7dca\u5bc6\uff0c\u9ad4\u7a4d\u5c0f\u3002
      • \u56e0\u70ba\u7db1\u76ee\uff08Schema\uff09\u662f\u5fc5\u9808\u7684\uff0c\u4e0d\u6703\u51fa\u73fe\u6587\u4ef6\u548c\u5be6\u969b\u904b\u4f5c\u6709\u843d\u5dee\uff08\u5fd8\u8a18\u88dc\u6587\u4ef6\uff09\u3002
      • \u5728 compile \u904e\u7a0b\u5c31\u80fd\u6aa2\u67e5\u7a0b\u5f0f\u78bc\u662f\u5426\u7b26\u5408\u7db1\u76ee\u3002
      • \u900f\u904e\u4e00\u4e9b\u6a5f\u5236\u4ecd\u80fd\u4fdd\u6301\u5411\u524d\uff08\u5f8c\uff09\u7684\u76f8\u5bb9\u8b93\u4ed6\u548c Schema-less \u7684\u7de8\u78bc\u4e00\u6a23\u597d\u7528
      "},{"location":"feedback/designing-data-intensive-applications/foundation-encode/#\u7de8\u89e3\u78bc\u7684\u4f7f\u7528\u60c5\u5883","title":"\u7de8\uff08\u89e3\uff09\u78bc\u7684\u4f7f\u7528\u60c5\u5883","text":"

      \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

      • \u900f\u904e\u8cc7\u6599\u5eab
      • \u5169\u500b\u670d\u52d9\u6216\u4f7f\u7528\u8005\u5f7c\u6b64\u6e9d\u901a
      • \u7570\u6b65\u8a0a\u606f\u50b3\u905e\uff08Asynchronous message passing\uff09
      "},{"location":"feedback/designing-data-intensive-applications/foundation-encode/#\u900f\u904e\u8cc7\u6599\u5eab","title":"\u900f\u904e\u8cc7\u6599\u5eab","text":"

      \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

      • \u7de8\u78bc\uff1a\u50b3\u905e\u8cc7\u6599\u6642\uff1b\u8cc7\u6599\u5eab\u5beb\u9032\u78c1\u789f\u6642
      • \u89e3\u78bc\uff1a\u63a5\u6536\u50b3\u5230\u7684\u8cc7\u6599\u6642\uff1b\u8cc7\u6599\u5eab\u8b80\u78c1\u789f\u7684\u8cc7\u6599\u6642

      \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

      • \u8acb\u6c42\u8005\u628a\u8acb\u6c42\u8cc7\u8a0a\u7de8\u78bc
      • \u670d\u52d9\u8005\u89e3\u78bc
      • \u670d\u52d9\u8005\u628a\u56de\u61c9\u7de8\u78bc
      • \u8acb\u6c42\u8005\u89e3\u78bc

      \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

      • RPC/SOAP \u88ab\u51fd\u5f0f\u5eab\u5305\u88dd\u5f8c\uff0c\u5c31\u50cf\u547c\u53eb\u51fd\u793a\u4e00\u6a23\uff0c\u53ef\u4ee5\u76f4\u63a5\u547c\u53eb\u3002\u53cd\u4e4b\uff0cREST/GraphQL \u5c31\u9700\u8981\u53c3\u95b1\u63d0\u4f9b\u8005\u7684\u6587\u4ef6\u3002
      • RPC/SOAP \u7121\u6cd5\u4fdd\u8b49 client \u4f7f\u7528\u6700\u65b0\u7248\u672c\u7684 Schema\uff0c\u6240\u4ee5\u8f03\u96e3\u7dad\u904b\u3002\u53cd\u4e4b\uff0cRESTful API \u53ef\u4ee5\u5229\u7528\uff1a
      • \u524d\u7db4\u8a5e\u52a0\u4e0a\u7248\u672c
      • HTTP \u6a19\u982d\uff08Accept\uff09\u5beb\u660e\u4f7f\u7528\u7248\u672c
      • \u8acb\u6c42\u6642\u9700\u651c\u5e36 Token
      • RPC/SOAP \u901a\u5e38\u6703\u4f7f\u7528\u8f03\u6709\u6548\u7387\u548c\u9069\u5408\u524d\u5f8c\u76f8\u5bb9\u7684\u7de8\u78bc\u65b9\u5f0f

      \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

      • Protocol Buffers - Google gRPC
      • \u4e4b\u524d\u6709\u64b0\u5beb\u904e\u5fc3\u5f97
      • Thrift - Twitter Finagle
      • JSON - LinkedIn Rest.li
      "},{"location":"feedback/designing-data-intensive-applications/foundation-encode/#\u975e\u540c\u6b65\u8a0a\u606f\u50b3\u905e","title":"\u975e\u540c\u6b65\u8a0a\u606f\u50b3\u905e","text":"

      \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

      • \u540c\u6b65\u8a0a\u606f\u9810\u671f\u6536\u5230\u8acb\u6c42\uff0c\u4f8b\u5982 REST API\u3002\u9019\u4ee3\u8868\u7576\u6c92\u6536\u5230\u8acb\u6c42\u6642\uff0c\u9700\u8981\u505a\u932f\u8aa4\u8655\u7406\uff08Error handling\uff09
      • \u975e\u540c\u6b65\u8a0a\u606f\u5247\u76f8\u53cd\uff0c\u9001\u51fa\u8a0a\u606f\u5f8c\uff0c\u5728\u78ba\u8a8d\u5c0d\u65b9\u6536\u5230\u524d\uff08\u6839\u64da\u8a2d\u5b9a\u53ef\u80fd\u4e0d\u9700\u8981\u78ba\u8a8d\uff09\u53ef\u80fd\u53c8\u518d\u9001\u51fa\u4e00\u5247\u8a0a\u606f

      \u975e\u540c\u6b65\u8a0a\u606f\u50b3\u905e\u66f8\u4e2d\u4e3b\u8981\u4ecb\u7d39\u5169\u7a2e\u65b9\u5f0f\uff1a

      • \u6d88\u606f\u4ee3\u7406\uff08Message brokers\uff09
      • \u4e8b\u4ef6\u4e32\u6d41\u5f0f\u67b6\u69cb\uff08Event streaming platforms\uff09
      • \u4f01\u696d\u670d\u52d9\u532f\u6d41\u6392\uff08Enterprise service bus\uff09
      • \u5206\u6563\u5f0f\u6f14\u54e1\u6a21\u578b\uff08Distributed actor model\uff09

      \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\u91cf
      SELECT 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

      \u53bb\u6b63\u898f\u5316\u4ee5\u63d0\u5347\u6548\u7387
      -- 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

      • \u9694\u96e2\u6027\uff08isolation\uff09\uff1a\u662f\u7528\u4f86\u907f\u514d\u7af6\u8cfd\u72c0\u6cc1
      • \u5bb9\u932f\u6027\uff08fault-tolerance\uff09\uff1a\u662f\u7576\u8cc7\u6599\u5eab\u767c\u751f\u7af6\u8cfd\u72c0\u6cc1\u6642\uff0c\u6211\u5011\u8981\u5982\u4f55\u5fa9\u539f\u8cc7\u6599\u5eab\u72c0\u614b\u3002
      "},{"location":"feedback/designing-data-intensive-applications/foundation-ft/#\u9694\u96e2\u6027","title":"\u9694\u96e2\u6027","text":"

      \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

      • \u52a0\u4e00\u628a\u9396\uff08lock\uff09\u3002
      • \u5efa\u7acb\u5feb\u7167\uff08snapshot\uff09\uff0c\u907f\u514d\u4e92\u76f8\u5f71\u97ff\u3002
      • \u5efa\u7acb\u7248\u672c\u6a5f\u5236\uff08version\uff09\u3002

      \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

      • \u5168\u90e8\u91cd\u4f86\uff1a\u525b\u525b\u65b0\u589e\u7684\u90f5\u4ef6\u8b93\u8cc7\u6599\u5eab\u81ea\u52d5\u6368\u53bb\uff0c\u8b93\u61c9\u7528\u7a0b\u5f0f\u91cd\u65b0\u9001\u4e00\u6b21\u9019\u4e00\u7cfb\u5217\u7684\u8acb\u6c42\u3002
      • \u91cd\u4f86\u932f\u8aa4\u7684\u8acb\u6c42\uff1a\u4ee5\u672a\u8b80\u90f5\u4ef6\u7684\u4f8b\u5b50\u4f86\u8aaa\uff0c\u5c31\u662f\u91cd\u65b0\u52a0\u4e00\u6b21\u672a\u8b80\u6578\u91cf\u3002
      • \u7d66\u4f60\u6c7a\u5b9a\uff1a\u8cc7\u6599\u5eab\u544a\u77e5\u61c9\u7528\u7a0b\u5f0f\u767c\u751f\u932f\u8aa4\uff0c\u8b93\u61c9\u7528\u7a0b\u5f0f\uff08\u6216\u4f7f\u7528\u8005\uff09\u6c7a\u5b9a\u8a72\u600e\u9ebc\u505a\u3002

      \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

      "},{"location":"feedback/designing-data-intensive-applications/foundation-ft/#\u76e1\u8cac\u6027","title":"\u76e1\u8cac\u6027","text":"

      \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

      • \u8cc7\u6599\u5eab\u5728\u56de\u61c9\u7d66\u61c9\u7528\u7a0b\u5f0f\u6642\u767c\u751f\u7db2\u8def\u932f\u8aa4\uff0c\u9020\u6210\u5be6\u969b\u8cc7\u6599\u5eab\u5df2\u7d93\u8dd1\u5b8c\uff0c\u800c\u61c9\u7528\u7a0b\u5f0f\u4ee5\u70ba\u6c92\u8dd1\u5b8c\u3002\u9019\u6642\u5c31\u8981\u6709\u61c9\u7528\u7a0b\u5f0f\u5c64\u7d1a\u7684\u53bb\u91cd\u8907\uff08de-duplication\uff09\u908f\u8f2f
      • \u7576\u8cc7\u6599\u5eab\u56e0\u70ba\u5927\u91cf\u8acb\u6c42\u800c\u5c0e\u81f4\u5fd9\u4e0d\u904e\u4f86\u4e26\u56de\u61c9\u932f\u8aa4\uff0c\u91cd\u505a\u4e00\u6b21\u53ea\u6703\u8b93\u72c0\u6cc1\u66f4\u7cdf\u7cd5
      • \u7576\u4f60\u7684\u7a0b\u5f0f\u78bc\u6709\u932f\u6216\u8005\u8acb\u6c42\u5beb\u5165\u7684\u503c\u4e0d\u7b26\u5408\u7db1\u76ee\u7b49\u7b49\uff0c\u91cd\u505a\u4e00\u6b21\u4e26\u4e0d\u6703\u8b93\u4ed6\u57f7\u884c\u6210\u529f
      "},{"location":"feedback/designing-data-intensive-applications/foundation-ft/#\u4e00\u81f4\u6027\u7b49\u7d1a","title":"\u4e00\u81f4\u6027\u7b49\u7d1a","text":"

      \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

      "},{"location":"feedback/designing-data-intensive-applications/foundation-ft/#\u8b80\u672a\u5b8c\u6210\u7684\u8cc7\u6599","title":"\u8b80\u672a\u5b8c\u6210\u7684\u8cc7\u6599","text":"

      \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

      "},{"location":"feedback/designing-data-intensive-applications/foundation-ft/#\u5feb\u7167\u9694\u96e2","title":"\u5feb\u7167\u9694\u96e2","text":"

      \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

      • \u8cc7\u6599\u5eab\u7684\u5099\u4efd\u3002\u7576\u8cc7\u6599\u5eab\u5728\u91dd\u5c0d\u7dda\u4e0a\u8cc7\u6599\u5eab\u505a\u5099\u4efd\u6642\uff0c\u4ed6\u4ecd\u7136\u5f8c\u9047\u5230\u4e0a\u8ff0\u7684\u554f\u984c\u3002\u5982\u679c\u5099\u4efd\u7684\u8cc7\u6599\u662f\u72c0\u614b\u4e0d\u4e00\u81f4\u7684\uff0c\u7576\u672a\u4f86\u9700\u8981\u7528\u5099\u4efd\u8cc7\u6599\u505a\u5fa9\u539f\u6642\uff0c\u5c31\u6703\u9020\u6210\u9019\u7a2e\u77ed\u66ab\u4e0d\u4e00\u81f4\u6027\u7684\u8cc7\u6599\u8b8a\u6210\u6c38\u4e45\u6027\u7684
      • \u5206\u6790\u6027\u7684\u641c\u5c0b\u3002\u82e5\u4f60\u9700\u8981\u505a\u5206\u6790\u5168\u90e8\u4f7f\u7528\u8005\u7684\u72c0\u614b\u6642\uff0c\u5f88\u53ef\u80fd\u6703\u5f97\u5230\u9019\u7a2e\u7834\u788e\u6216\u4e0d\u5408\u4e4e\u908f\u8f2f\u7684\u7d50\u679c\u3002

      \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

      • \u4f7f\u7528\u5feb\u7167\u9694\u96e2\u7684\u8cc7\u6599\u5eab
      • \u4f7f\u7528\u91cd\u8907\u8b80\u53d6\u7684\u8cc7\u6599\u5eab
      "},{"location":"feedback/designing-data-intensive-applications/foundation-ft/#\u591a\u7248\u672c\u4e26\u884c\u63a7\u5236","title":"\u591a\u7248\u672c\u4e26\u884c\u63a7\u5236","text":"

      \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

      • PostgreSQL \u6703\u76e1\u91cf\u8b93\u6240\u6709\u7248\u672c\u7684\u8cc7\u6599\u90fd\u653e\u9032\u540c\u4e00\u500b\u9801
      • CouchDB\u3001Datomic\u3001LMDB \u7576\u4ea4\u6613\u9700\u8981\u66f4\u65b0\u8cc7\u6599\u6642\uff0c\u8b93\u4ed6\u76f4\u63a5\u91cd\u65b0\u5efa\u7acb\u65b0\u7684\u6a39\u72c0\u7d50\u69cb\uff0c\u5b8c\u6210\u5f8c\u76f4\u63a5\u53d6\u4ee3\u820a\u7684\u6a39\u72c0\u7d50\u69cb\u3002\u9019\u6a23\u5176\u4ed6\u8b80\u53d6\u7684\u4ea4\u6613\u5c31\u4e0d\u6703\u53d7\u5230\u5f71\u97ff\u3002\u4f46\u662f\u4ed6\u6703\u9700\u8981\u80cc\u666f\u57f7\u884c\u5783\u573e\u56de\u6536\u548c\u58d3\u7e2e\u7684\u5de5\u4f5c

      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\u7d04
      BEGIN 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
      1. \u6aa2\u67e5\u6240\u6709\u73fe\u5b58\u7684\u8207 12:00~13:00 \u91cd\u758a\u7684\u9810\u7d04
      2. \u5982\u679c\u4e4b\u524d\u7684\u67e5\u8a62\u986f\u793a\u6c92\u6709\u91cd\u758a\u7684\u9810\u7d04\uff08COUNT(\\*) == 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
      1. \u6aa2\u67e5\u6240\u6709\u73fe\u5b58\u7684\u4f7f\u7528\u8005\u662f\u5426\u6709 new_user
      2. \u5982\u679c\u4e4b\u524d\u7684\u67e5\u8a62\u986f\u793a\u6c92\u6709\u8a72\u4f7f\u7528\u8005\uff08COUNT(*) == 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

      "},{"location":"feedback/designing-data-intensive-applications/foundation-ft/#\u5e8f\u5217\u5316","title":"\u5e8f\u5217\u5316","text":"

      \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

      • \u5be6\u969b\u5e8f\u5217\u5316\u6c92\u8fa6\u6cd5\u6709\u6548\u7684\u64f4\u589e
      • \u5169\u968e\u6bb5\u9396\u6703\u8b93\u6f5b\u6642\uff08latency\uff09\u5f88\u4e0d\u7a69
      • \u5e8f\u5217\u5316\u5feb\u7167\u4e5f\u8a31\u6703\u662f\u672a\u4f86\u6a19\u6e96
      "},{"location":"feedback/designing-data-intensive-applications/foundation-ft/#\u5be6\u969b\u5e8f\u5217\u5316","title":"\u5be6\u969b\u5e8f\u5217\u5316","text":"

      \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

      • VoltDB \u4f7f\u7528 JAVA \u6216 Groovy \u4f5c\u70ba\u8caf\u5b58\u7a0b\u5e8f
      • Datomic \u4f7f\u7528 JAVA \u6216 Clojure \u4f5c\u70ba\u8caf\u5b58\u7a0b\u5e8f
      • Redis \u4f7f\u7528 Lua \u4f5c\u70ba\u8caf\u5b58\u7a0b\u5e8f

      \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

      • \u8a18\u9304\u7684\u8d8a\u7d30\uff0c\u8d8a\u80fd\u5224\u65b7\u5176\u4ed6\u4ea4\u6613\u662f\u5426\u53d7\u5f71\u97ff\uff0c\u9032\u800c\u6368\u68c4\u8a72\u4ea4\u6613\u3002PostgreSQL
      • \u7d00\u9304\u7684\u8d8a\u5c11\uff0c\u57f7\u884c\u6548\u80fd\u8d8a\u5feb\uff0c\u8a18\u61b6\u9ad4\u7684\u9700\u6c42\u8d8a\u4f4e\u3002

      \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

      • \u6578\u5b57\u589e\u52a0\uff0c\u5148\u5f8c\u52a0\u4e00\u4e0d\u8ad6\u9806\u5e8f\u90fd\u6703\u9020\u6210\u8cc7\u6599\u52a0\u4e8c\u3002
      • \u9663\u5217\u52a0\u5143\u7d20\uff0c\u82e5\u4e0d\u8003\u616e\u9663\u5217\u7684\u9806\u5e8f\uff0c\u5148\u52a0\u548c\u5f8c\u52a0\u90fd\u6703\u88ab\u52a0\u9032\u9663\u5217\u88e1\u800c\u4e0d\u6703\u907a\u5931\u3002
      • Redis
      • MongoDB
      • Riak 2.0
      "},{"location":"feedback/designing-data-intensive-applications/foundation-ft/#\u5be6\u4f5c\u53ef\u907f\u514d\u7684\u7af6\u8cfd\u72c0\u6cc1","title":"\u5be6\u4f5c\u53ef\u907f\u514d\u7684\u7af6\u8cfd\u72c0\u6cc1","text":"

      \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

      1. https://www.microsoft.com/en-us/research/wp-content/uploads/2016/02/tr-95-51.pdf \u21a9

      2. http://pmg.csail.mit.edu/papers/adya-phd.pdf \u21a9

      3. http://arxiv.org/pdf/1302.0309.pdf \u21a9

      4. http://pmg.csail.mit.edu/papers/adya-phd.pdf \u21a9

      5. http://arxiv.org/pdf/1302.0309.pdf \u21a9

      6. https://www.microsoft.com/en-us/research/wp-content/uploads/2016/02/tr-95-51.pdf \u21a9

      7. http://arxiv.org/pdf/1302.0309.pdf \u21a9

      "},{"location":"feedback/designing-data-intensive-applications/foundation-index/","title":"\u7d22\u5f15","text":"

      \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

      • \u95dc\u806f\u5f0f\u8cc7\u6599\u5eab\u9069\u5408\u7c21\u55ae\u5f97\u591a\u5c0d\u591a\u95dc\u4fc2
      • \u6587\u4ef6\u5f0f\u6a21\u578b\u9069\u5408\u4e00\u5c0d\u591a\u95dc\u4fc2
      • \u5716\u50cf\u5f0f\u6a21\u578b\u9069\u5408\u5927\u91cf\u7684\u591a\u5c0d\u591a\u95dc\u4fc2\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

      \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

      \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

      • \u70ba\u4ec0\u9ebc query \u6642\u53ea\u91dd\u5c0d\u55ae\u4e00\u500b\u7d22\u5f15\u4f5c\u641c\u5c0b\u5462\uff1f
      • \u540c\u6642\u4f7f\u7528\u5169\u500b\u7d22\u5f15\u53bb\u505a\u641c\u5c0b\u4e0d\u662f\u975e\u5e38\u76f4\u89c0\u55ce\uff1f

      \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

      \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 393
      1,{\"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":"
      • \u56e0\u70ba\u662f\u4e00\u76f4\u65b0\u589e\u8cc7\u6599\u5230\u6a94\u6848\u5c3e\u90e8\uff0c\u5982\u4f55\u907f\u514d\u7121\u9650\u5236\u7684\u6a94\u6848\u5927\u5c0f\u589e\u9577
      • \u6a94\u6848\u683c\u5f0f \u4f7f\u7528\u4e8c\u9032\u4f4d\u7684\u8f49\u63db\uff0c\u964d\u4f4e\u5b57\u4e32\u3001\u6578\u5b57\u7b49\u7b49\u591a\u6a23\u7684\u8b8a\u6578\u683c\u5f0f\u8f49\u63db\uff0c\u4f8b\u5982\u8868\u60c5\u7b26\u865f\u3002
      • \u5982\u4f55\u522a\u9664\u6307\u5b9a\u8cc7\u6599 \u9700\u8981\u5728\u8a72 key \u4e2d\u7d66\u4e88\u7279\u5b9a\u503c\uff08tombstone\uff09\uff0c\u7576 compaction \u548c merge segment \u5f8c\uff0c\u6703\u81ea\u52d5\u6368\u68c4\u8a72\u9375\u503c\u3002
      • \u6a5f\u5668\u91cd\u555f\u6642\uff0c\u91cd\u65b0\u7372\u5f97 hash index \u9700\u8981\u5168\u6587\u8b80\u53d6\uff0c\u975e\u5e38\u8017\u6642 \u6703\u5b9a\u6642\u5b9a\u91cf\u5feb\u7167\uff08snapshot\uff09hash index \u9032\u6a94\u6848\uff0c\u907f\u514d\u6a5f\u5668\u91cd\u555f\u6642\u7684\u5168\u6587\u6aa2\u7d22\u3002
      • \u5beb\u5165\u8cc7\u6599\u5230\u4e00\u534a\u6642\uff0c\u6a5f\u5668\u58de\u6389 \u5efa\u7acb\u6838\u5c0d\u548c\uff08checksums\uff09\uff0c\u82e5\u6838\u5c0d\u548c\u6709\u932f\uff0c\u5247\u4e0d\u4f7f\u7528\u8a72\u503c\u3002
      • \u5982\u4f55\u78ba\u4fdd\u540c\u6b65\u63a7\u5236\uff08Concurrency Control\uff09\u6642\u9020\u6210\u7684\u932f\u8aa4\uff0c\u4f8b\u5982 A \u8cc7\u6599\u5beb\u5230\u4e00\u534a\u6642\uff0cB \u8cc7\u6599\u8981\u958b\u59cb\u5beb\u5165\u4e86\uff0cB \u8981\u5982\u4f55\u7b49 A \u5beb\u5b8c \u50c5\u958b\u653e\u4e00\u500b\u5beb\u5165\u7684\u7dda\u7a0b\uff08thread\uff09\u3002
      "},{"location":"feedback/designing-data-intensive-applications/foundation-index/#\u6a94\u6848\u58d3\u7e2e\u6574\u5408","title":"\u6a94\u6848\u58d3\u7e2e\u6574\u5408","text":"

      \u7576\u6a94\u6848\u9054\u5230\u4e00\u5b9a\u5927\u5c0f\u6642\uff1a

      • \u628a\u6a94\u6848\u5340\u5206\u6210\u597d\u5e7e\u584a\uff08segment\uff09\uff0c\u6bcf\u500b\u5340\u584a\u7368\u81ea\u7d00\u9304\u4ed6\u5011\u7684 hash index\u3002
      • \u7576\u5340\u584a\u592a\u5927\u6642\uff0c\u958b\u59cb\u9032\u884c\u58d3\u7e2e\uff08compaction\uff09\uff0c\u628a\u820a\u7684 key-value \u6368\u68c4\uff0c\u4e26\u628a\u6709\u6548\u8cc7\u6599\u5beb\u5165\u65b0\u7684\u6a94\u6848\u3002
      • \u5169\u500b\u5c0f\u5340\u584a\u53ef\u4ee5\u9032\u884c\u6574\u5408\uff08merge\uff09\u3002

      \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 \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":"
      • Hash index \u82e5\u904e\u5927\uff0c\u6216\u8005\u8aac key \u904e\u591a\uff0c\u52e2\u5fc5\u6703\u5927\u5927\u5f71\u97ff\u6548\u80fd\u3002
      • \u6c92\u8fa6\u6cd5\u5feb\u901f\u67e5\u8a62\u7bc4\u570d\u7684 key\uff0c\u4f8b\u5982\u60f3\u77e5\u9053\u4ee5 animal \u70ba\u958b\u982d\u7684\u9375\u503c\u6578\u91cf\u3002
      "},{"location":"feedback/designing-data-intensive-applications/foundation-index/#\u61c9\u7528","title":"\u61c9\u7528","text":"
      • Bitcask
      "},{"location":"feedback/designing-data-intensive-applications/foundation-index/#\u6392\u5e8f\u5b57\u4e32\u8868","title":"\u6392\u5e8f\u5b57\u4e32\u8868","text":"

      \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\u3002SSTable \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

      1. \u5728\u505a merge \u7684\u904e\u7a0b\uff0c\u53ef\u4ee5\u975e\u5e38\u6709\u6548\u7387\u4e14\u7701\u7a7a\u9593\uff1a

      2. \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

      3. \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

      "},{"location":"feedback/designing-data-intensive-applications/foundation-index/#\u7b56\u7565","title":"\u7b56\u7565","text":"

      \u7531\u4e0a\u8ff0\u7684\u4e00\u4e9b\u7279\u6027\uff0c\u53ef\u4ee5\u7e3d\u7d50 SSTables \u5728\u5be6\u4f5c\u4e0a\u7684\u7b56\u7565\u5982\u4e0b\uff1a

      • \u6bcf\u6b21\u8cc7\u6599\u9032\u4f86\uff0c\u5b58\u9032 in-memory \u7684\u6a39\u72c0\u7d50\u69cb\uff08red-black tree \u6216 AVL tree\uff09\uff0c\u8a72\u6a39\u72c0\u7d50\u69cb\u53ef\u4ee5\u4fdd\u8b49\u65b0\u7684\u8cc7\u6599\u6703\u4ee5\u6392\u5e8f\u904e\u7684\u65b9\u5f0f\u5b58\u9032\u7d50\u69cb\u4e2d\u3002
      • \u7576\u6a39\u72c0\u7d50\u69cb\u8d8a\u4f86\u8d8a\u5927\uff0c\u8d85\u904e\u95a5\u503c\uff08\u901a\u5e38\u6578\u500b MB\uff09\uff0c\u5b58\u9032\u6a94\u6848\uff08segment\uff09\u88e1\u3002\u56e0\u70ba\u5df2\u7d93\u6392\u5e8f\u904e\uff0c\u6240\u4ee5\u5132\u5b58\u7684\u6548\u7387\u5e7e\u4e4e\u7b49\u65bc I/O \u7684\u6548\u7387
      • \u7576\u6709\u8b80\u53d6\u7684\u8acb\u6c42\u6642\uff0c\u5148\u8b80\u53d6 in-memory \u518d\u5f9e\u6700\u65b0\u7684\u6a94\u6848\u4f9d\u5e8f\u8b80\u53d6\u3002
      • \u96a8\u8457\u6642\u9593\u9032\u884c\uff0c\u6301\u7e8c\u9032\u884c\u6574\u5408\uff08merging\uff09\u8207\u58d3\u7e2e\uff08compaction\uff09\u3002

      \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":"
      • Google LevelDB
      • Facebook RocksDB - based on LevelDB
      • Apache Cassandra(\u985e\u4f3c) - based on Big Table paper
      • Apache HBase(\u985e\u4f3c) - based on Big Table paper
      • Lucene\uff08\u88ab Elasticsearch \u548c Solr \u4f7f\u7528\uff09 - term dictionaries

      \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":"
      1. \u82e5\u641c\u5c0b\u7684\u8cc7\u6599\u662f\u4e0d\u5b58\u5728\u7684\uff08non-exist key\uff09\uff0c\u5c31\u9700\u8981\u6240\u6709\u6a94\u6848\u90fd\u95b1\u6b77\u5f8c\u624d\u80fd\u5224\u65b7\u3002 > Bloom filters \u7279\u6b8a\u7d50\u69cb\u7684\u6a94\u6848\uff0c\u6703\u5927\u7565\u63cf\u8ff0\u8cc7\u6599\u5eab\u7684\u72c0\u614b\uff0c\u4e26\u544a\u8a34\u4f60\u8a72\u9375\u503c\u662f\u5426\u5b58\u5728
      2. \u8a72\u4ee5\u4f55\u7a2e\u9806\u5e8f\u548c\u6642\u9593\u9ede\u9032\u884c\u6574\u5408\uff08merging\uff09\u8207\u58d3\u7e2e\uff08compaction\uff09\u3002
        1. size-tiered - \u65b0\u7684\u548c\u5c0f\u7684 segment \u6703\u88ab\u6574\u5408\u58d3\u7e2e\u9032\u820a\u7684\u3002
          • segment \u6578\u91cf\u5c11
          • segment \u5927\u5c0f\u6703\u662f 4/16/64... \u65b9\u5f0f\u500d\u589e
          • segment \u9593\u6703\u6709 overlapping \u7684\u72c0\u6cc1
        2. leveled compaction - \u6bcf\u4e00\u5c64\u5728\u5347\u7d1a\u6642\u6703\u505a\u6574\u5c64\u7684\u58d3\u7e2e
          • segment \u6578\u91cf\u591a\uff0c\u7b2c\u4e00\u5c64\u6a94\u6848\u6578 10 \u500b\uff0c\u7b2c\u4e8c\u5c64\u662f 100 \u500b
          • segment \u5927\u5c0f\u662f\u56fa\u5b9a\u7684
          • \u6bcf\u4e00\u5c64\uff08level\uff09\u7684 segment \u9593\u4e0d\u6703\u6709 overlapping \u7684\u72c0\u6cc1

      \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

      • \u6bcf\u500b\u5340\u584a\u7684\u5927\u5c0f\u901a\u5e38\u70ba 4KB\uff0c\u4e0d\u904e\u5be6\u969b\u4e0a\u4ecd\u8981\u8003\u616e\u786c\u9ad4\u7684\u914d\u7f6e\u3002
      • \u6bcf\u500b\u5340\u584a\u90fd\u6703\u6709\u4e00\u500b\u5730\u5740\u53bb\u4ee3\u8868\u4ed6\uff08\u985e\u4f3c\u7a0b\u5f0f\u78bc\u4e2d\u7684 pointer\uff0c\u6a94\u540d\uff09\u3002
      • \u6709\u4e00\u500b\u7279\u6b8a\u5340\u584a\u7a31\u70ba root\uff0c\u6bcf\u6b21\u641c\u5c0b\u90fd\u5148\u7d93\u904e\u8a72\u5340\u584a\u3002
      • \u5340\u584a\u5206\u5169\u7a2e
      • \u8def\u5f91\u5340\u584a - \u7528\u4f86\u5c0e\u5f15\u81f3\u5404\u500b\u5340\u584a\uff0c\u5169\u500b key \u4e4b\u9593\u7684\u8cc7\u6599\u5373\u662f\u5b58\u653e\u9019\u5169\u8005\u4e4b\u9593\u7684\u8cc7\u6599\u4f4d\u7f6e
      • \u8cc7\u6599\u5340\u584a - \u7528\u4f86\u5132\u5b58 key-value

      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":"
      • \u7531\u65bc B-Tree \u6703\u8986\u84cb\u5148\u524d\u5132\u5b58\u7684\u503c\uff0c\u9019\u6642\u5c31\u9700\u8981\u8003\u616e\u5230\u786c\u9ad4\u662f\u600e\u9ebc\u505a\u8986\u5beb\u7684\uff1f
      • \u6a5f\u68b0\u5f0f\u78c1\u789f\uff0c\u7b49\u5f85\u8b80\u5beb\u982d\u9047\u5230\u6b63\u78ba\u4f4d\u7f6e\uff0c\u958b\u59cb\u8986\u5beb
      • \u56fa\u614b\u786c\u789f\uff0c\u4ee5\u56fa\u5b9a\u55ae\u4f4d\u5927\u5c0f\u5beb\u5165\uff0c\u9700\u914d\u5408\u8edf\u9ad4

      \u7c21\u800c\u8a00\u4e4b\uff0c\u591a\u4e00\u7a2e\u52d5\u4f5c\uff0c\u591a\u4e00\u5c64\u8003\u616e

      • \u7576\u66f4\u65b0\u8cc7\u6599\u6642\uff0c\u53ef\u80fd\u6703\u628a page \u62c6\u5206\u5169\u500b\uff0c\u6216\u5f71\u97ff\u73fe\u6709\u8cc7\u6599\u3002\u505a\u5230\u4e00\u534a\u6642\uff0c\u6a5f\u5668\u58de\u4e86\u600e\u9ebc\u8fa6\uff1f
      • write-ahead log\uff08WAL \u6216\u7a31 redo log\uff09\u6703\u7d00\u9304\u820a\u8cc7\u6599\uff0c\u4f5c\u70ba\u707d\u96e3\u5fa9\u539f\u7528\u3002
      • \u7576\u9700\u8981\u8655\u7406\u591a\u5de5\uff08concurrency control\uff09\uff0c\u4e00\u500b\u5de5\u4eba\u5728\u5beb\u5165\u6642\uff0c\u6a39\u72c0\u7d50\u69cb\u53ef\u80fd\u662f\u4e0d\u7a69\u5b9a\u7684\uff08\u6b63\u5728\u8abf\u6574 B-Tree\uff09
      • \u9700\u8981\u5229\u7528 latches \u6f14\u7b97\u6cd5\u4f86\u9396\u5b9a\u5340\u584a\u4e0d\u88ab\u5176\u4ed6\u7dda\u7a0b\u8b80\u53d6\u3002
      • \u7531\u6b64\u4e5f\u53ef\u4ee5\u770b\u51fa SSTable \u548c B-Tree \u5728\u8655\u7406\u9019\u554f\u984c\u7684\u96e3\u6613\u7a0b\u5ea6\uff0cSSTable \u5728\u58d3\u7e2e\u6574\u5408\u7684\u904e\u7a0b\u90fd\u662f\u80cc\u666f\u57f7\u884c\u7684\uff0c\u800c\u4e0d\u5f71\u97ff\u73fe\u6709\u8cc7\u6599\uff0c\u6700\u7d42\u57f7\u884c\u5b8c\u7562\u624d\u6703\u505a\u66f4\u65b0\u3002
      "},{"location":"feedback/designing-data-intensive-applications/foundation-index/#\u5982\u4f55\u512a\u5316","title":"\u5982\u4f55\u512a\u5316","text":"

      1970 \u5e74\u5230\u73fe\u5728\uff0c\u4e5f\u505a\u4e86\u5f88\u591a\u512a\u5316\uff1a

      • \u707d\u96e3\u5fa9\u539f\u6642 WAF \u4e4b\u5916\uff0c\u6709\u4e9b\u4e5f\u5229\u7528\u5feb\u7167\u7684\u65b9\u5f0f\uff0c\u5efa\u7acb\u526f\u672c\uff0c\u8b93\u8b80\u53d6\u6642\u4e0d\u5fc5\u9396\u5b9a\u8a72\u6a39\u3002
      • \u4e0d\u5fc5\u4f7f\u7528\u5b8c\u6574\u7684 key\uff0c\u800c\u662f\u5728\u78ba\u4fdd\u7368\u7acb\u6027\u7684\u540c\u6642\uff0c\u53d6\u7528\u7e2e\u5beb\u5373\u53ef\u3002
      • \u8b93\u76f8\u8fd1\u7684 page \u653e\u5728 filesystem \u7684\u9644\u8fd1\uff0c\u4f46\u662f\u7576\u6a39\u72c0\u7d50\u69cb\u88ab\u66f4\u65b0\uff0c\u5c31\u9700\u8981\u66f4\u6df1\u4e00\u5c64\u7684\u6f14\u7b97\u6cd5\u3002
      • \u589e\u52a0\u540c\u5c64\u9644\u8fd1 page \u7684\u5730\u5740\uff0c\u52a0\u901f\u641c\u5c0b
      • \u4e00\u4e9b\u8b8a\u5f62\u7684 B-Tree \u6703\u6574\u5408 Log-Structure \u7684\u529f\u80fd\u53bb\u505a\u52a0\u901f
      • ...
      "},{"location":"feedback/designing-data-intensive-applications/foundation-index/#\u6bd4\u8f03","title":"\u6bd4\u8f03","text":"

      \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

      • SSTable \u9069\u5408\u5beb\u5165\uff0cB-Tree \u9069\u5408\u8b80\u53d6\u3002
      • B-Tree \u8f03\u6210\u719f\u7a69\u5b9a\u4f46\u662f SSTable \u6b63\u9010\u6f38\u63d0\u5347\u4f7f\u7528\u6bd4\u4f8b\u3002

      \u7d30\u7bc0\uff1a

      • \u5beb\u5165\uff1a\u6bcf\u6b21\u5beb\u5165\u9032\u8cc7\u6599\u5eab\u7684\u8cc7\u6599\uff0c\u5176\u4e00\u751f\u88ab\u91cd\u8907\u5beb\u5165\u786c\u9ad4\u7684\u6b21\u6578\u7a31\u70ba write amplification
      • B-Tree \u6bcf\u6b21\u5beb\u5165\u9032\u8cc7\u6599\u5eab\u6642\u6642\uff0c\u90fd\u6703\u5beb\u5165\u81f3\u5c11\u5169\u904d\uff08WAL\uff09\uff0c\u4e14\u6bcf\u6b21\u66f4\u65b0 page \u7684\u4e9b\u5fae\u8cc7\u6599\uff0c\u90fd\u9700\u8981\u5b8c\u6574\u91cd\u65b0\u5beb\u5165\uff08\u56e0\u70ba\u662f\u6539\u52d5\u820a\u8cc7\u6599\uff09
      • SSTable write amplification \u901a\u5e38\u8f03\u4f4e\u4e14 append \u7684\u65b9\u5f0f\u4ecd\u8b93\u4ed6\u6709\u8f03\u9ad8\u7684\u5beb\u5165\u6548\u80fd\uff0c\u4f46\u53d7\u58d3\u7e2e\u548c\u6574\u5408\u7684\u6f14\u7b97\u6cd5\u6216\u4f7f\u7528\u8005\u8a2d\u5b9a\u5f71\u97ff\u3002
      • \u6a5f\u68b0\u5f0f\u786c\u789f\uff08\u78c1\u789f\uff09\u5728\u6709\u9806\u5e8f\u6027\u7684\u5beb\u5165\uff08append\uff09\u6703\u6709\u8f03\u9ad8\u7684\u6548\u80fd
      • \u56fa\u614b\u786c\u789f\u56e0\u5176\u662f\u5beb\u9032\u6676\u7247\u88e1\uff0c\u9069\u5408\u7dca\u5bc6\u7684\u8cc7\u6599\u5beb\u5165\uff0c\u6545 append \u8f03\u6709\u6548\u3002\uff08\u96d6\u7136\u97cc\u9ad4\u6703\u76e1\u91cf\u8b93\u5beb\u5165\u4fdd\u6301\u7dca\u5bc6\uff09
      • \u8a18\u61b6\u9ad4
      • B-Tree \u901a\u5e38\u9700\u8981\u8f03\u591a\u8a18\u61b6\u9ad4\uff0c\u56e0\u70ba\u6bcf\u500b page \u90fd\u662f\u56fa\u5b9a\u5927\u5c0f\uff0c\u4ee3\u8868\u53ef\u80fd\u6703\u6709\u5f88\u591a\u9592\u7f6e\u7a7a\u9593
      • SSTable \u900f\u904e\u53cd\u8986\u58d3\u7e2e\u6574\u5408\uff0c\u901a\u5e38\u4f7f\u7528\u8f03\u5c11\u8a18\u61b6\u9ad4\u3002\u4f46\u662f\u82e5\u662f\u904e\u5927\u7684\u5beb\u5165\u91cf\uff0c\u53ef\u80fd\u6703\u5c0e\u81f4\u58d3\u7e2e\u6574\u5408\u7684\u901f\u5ea6\u4f86\u4e0d\u53ca\u914d\u5408\uff0c\u9032\u800c\u7121\u9650\u91cf\u7684\u589e\u9577\u8a18\u61b6\u9ad4\uff0c\u6700\u7d42\u5d29\u6f70\uff0c\u9700\u8981\u66ff\u4ed6\u6e96\u5099\u76e3\u63a7\u7cfb\u7d71\u3002
      • \u6709\u6548\u6027
      • SSTable \u56e0\u5176\u53ef\u80fd\u6703\u9700\u8981\u53cd\u8986\u58d3\u7e2e\u6574\u5408\uff0c\u5118\u7ba1\u662f\u80cc\u666f\u57f7\u884c\uff0c\u4ecd\u6703\u5403\u6389\u6a5f\u5668\u7684 CPU\uff0c\u5c0e\u81f4\u901f\u5ea6\u964d\u4f4e
      • B-Tree \u5176 latency \u901a\u5e38\u8f03\u7a69\u5b9a
      • \u9664\u4e86 CPU\uff0c\u4e5f\u8981\u8003\u616e\u8cc7\u6599\u7684 I/O \u80fd\u529b\u3002SSTable \u9700\u8981\u58d3\u7e2e\u6574\u5408\uff0c\u6bcf\u6b21\u66ab\u5b58\u7684\u6700\u65b0\u8cc7\u6599\u584a\u53c8\u9700\u8981\u8db3\u5920\u4efd\u91cf\u7684\u8cc7\u6e90\u4f86\u505a\u5beb\u5165\uff0c\u5c0e\u81f4\u548c\u65b0\u8cc7\u6599\u7684\u5beb\u5165\u4e92\u76f8\u7af6\u722d\uff0c\u62d6\u6162\u901f\u5ea6\u3002
      • \u539f\u5b50\u6027
      • B-Tree \u4e2d\uff0c\u6bcf\u500b key \u53ea\u6703\u6709\u4e00\u500b value\uff0c\u53ef\u900f\u904e\u9396\u5b9a\u7279\u5b9a page \u4f86\u4fdd\u6301\u539f\u5b50\u6027\u3002
      • SSTable \u540c\u4e00\u500b key \u53ef\u80fd\u5b58\u5728\u591a\u500b\u8cc7\u6599\uff0c\u5728\u8655\u7406\u539f\u5b50\u6027\u6642\u6703\u9700\u8981\u8f03\u8cbb\u5de5\u7684\u6f14\u7b97\u6cd5
      "},{"location":"feedback/designing-data-intensive-applications/foundation-index/#\u7d22\u5f15\u6392\u5e8f","title":"\u7d22\u5f15\u6392\u5e8f","text":"

      \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

      1. \u6bcf\u500b\u6b21\u7d1a\u7d22\u5f15\u7528 key-value \u5132\u5b58\uff0c\u5176\u4e2d\u7684 value \u4ee3\u8868\u591a\u500b\u4e3b\u7d22\u5f15\u3002\u4f8b\u5982\uff0c\u5e74\u9f61 20 \u7684 value \u6709 [user-1, user-10]
      2. \u7528 primary index \u53bb\u6574\u5408 \u6b21\u7d1a\u7d22\u5f15\u3002\u4f8b\u5982\uff0c\u624b\u6a5f\u70ba 09123 \u7684 key-value \u70ba 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

      • heap file
      • _clustered index
      "},{"location":"feedback/designing-data-intensive-applications/foundation-index/#\u5806\u7a4d\u6a94","title":"\u5806\u7a4d\u6a94","text":"

      \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

      1. \u628a\u6240\u6709 index \u7684\u8cc7\u6599\u5eab\u90fd\u66f4\u65b0\u6a94\u6848\u4f4d\u7f6e\u3002
      2. \u6216\u5728\u820a\u7684 \u5806\u7a4d\u6a94 \u4e2d\u5b58\u653e\u65b0\u7684 \u5806\u7a4d\u6a94 \u7684\u4f4d\u7f6e\uff0c\u9019\u6a23\u641c\u5c0b\u6642\u9593\u6703\u8d8a\u4f86\u8d8a\u9577
      "},{"location":"feedback/designing-data-intensive-applications/foundation-index/#\u7fa4\u805a\u5f0f\u7d22\u5f15","title":"\u7fa4\u805a\u5f0f\u7d22\u5f15","text":"

      \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

      • \u984d\u5916\u7684\u5132\u5b58\u7a7a\u9593\uff08\u591a\u958b\u4e00\u500b Index Tree \u53bb\u5b58\uff09\u3002
      • \u984d\u5916\u7684\u641c\u5c0b\u6642\u9593

      \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\uff1aR-Tree\u3002

      \u5176\u4ed6\u53ef\u80fd\u9700\u8981\u591a\u7dad\u5ea6\u7684 \u7d22\u5f15 \u5834\u666f\u6709\uff1a

      • \u96fb\u5546\u9700\u8981\u641c\u5c0b\u9577\u3001\u5bec\u3001\u9ad8\u7684\u5546\u54c1
      • \u4eba\u529b\u9280\u884c\u9700\u8981\u641c\u5c0b\u85aa\u8cc7\u3001\u8ddd\u96e2\u65b0\u5e97\u6700\u8fd1\u7684\u5de5\u4f5c
      "},{"location":"feedback/designing-data-intensive-applications/foundation-index/#\u6a21\u7cca\u7d22\u5f15","title":"\u6a21\u7cca\u7d22\u5f15","text":"

      \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

      • \u62fc\u932f\u3002
      • \u6587\u6cd5\u8f49\u63db\u3002\u5982\uff1a\u904e\u53bb\u5f0f\u3001\u73fe\u5728\u5f0f\u3002
      • \u540c\u7fa9\u8a5e\u3002
      • \u8a72\u8a5e\u5f59\u9577\u642d\u914d\u7684\u8a5e\u3002\u5982\uff1a\u6e1b\u80a5\u3001\u904b\u52d5\u3002

      \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\uff0cLucene \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

      • \u7576\u96fb\u6e90\u5207\u65b7\uff0c\u8a18\u61b6\u9ad4\u7684\u8cc7\u6599\u5c31\u6c92\u4e86
      • \u4fbf\u5b9c

      \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

      • \u4e0d\u5728\u4e4e\u7576\u96fb\u6e90\u5207\u65b7\uff0c\u662f\u5426\u9700\u8981\u7dad\u6301\u8cc7\u6599\uff1aMemcached
      • \u9700\u8981\u7dad\u6301\u8cc7\u6599\uff1aVoltDB\u3001MemSQL\u3001Oracle TimesTen\u3001Redis\u3001Couchbase
      • \u900f\u904e\u7279\u6b8a\u786c\u9ad4\uff08\u4e0d\u65b7\u96fb\u7cfb\u7d71\uff09
      • \u5beb Log\uff0c\u9019\u65b9\u6cd5\u9664\u7dad\u6301\u8cc7\u6599\uff0c\u4e5f\u64c1\u6709\u63d0\u4f9b\u5099\u4efd\u3001\u65b9\u4fbf\u5206\u6790\u7b49\u597d\u8655\u3002
      • \u5b9a\u6642\u5feb\u7167\u3002
      • \u900f\u904e\u5176\u4ed6\u6a5f\u5668\u8907\u88fd\u8cc7\u6599\uff08replicate\uff09

      \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

      1. http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.16.652 \u21a9

      "},{"location":"feedback/designing-data-intensive-applications/foundation-model/","title":"\u8cc7\u6599\u6a21\u578b\u548c\u8a9e\u6cd5","text":"

      \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

      • \u968e\u5c64\u5f0f\u6a39\u72c0\u7d50\u69cb\uff08Hierarchical Tree\uff09
      • \u95dc\u806f\u5f0f\u6a21\u578b\uff08Relational model\uff09
      • \u6587\u4ef6\u5f0f\u6a21\u578b\uff08Document model\uff09
      • \u5716\u50cf\u5f0f\u6a21\u578b\uff08Graph-like model\uff09

      \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

      • \u76f8\u4f3c\u8cc7\u6599\u88ab\u6574\u5408\u9032\u540c\u4e00\u95dc\u4fc2\uff08relations/tables\uff09\u4e2d
      • \u800c\u5404\u500b\u95dc\u4fc2\u88e1\u662f\u4e00\u7cfb\u5217\u7684\u975e\u9806\u5e8f\u6027\u7d44\u5408(tuples/rows)\u3002

      \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

      • \u5c0d\u8cc7\u6599\u5eab\u505a\u624b\u8173\u6703\u4e0d\u6703\u5403\u6389\u7dda\u4e0a\u4f7f\u7528\u8005\u7684\u6548\u80fd
      • \u61c9\u7528\u7a0b\u5f0f\u53ef\u4ee5\u9000\u7248\uff0c\u6240\u4ee5\u9700\u8981\u8003\u616e\u81e8\u6642\u6709\u72c0\u6cc1\u6642\uff0c\u9000\u7248\u662f\u5426\u6703\u5f71\u97ff\u3002\uff08forward compatible\uff09

      \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\uff08data locality\uff09
      • \u8cc7\u6599\u7684\u8f49\u63db\uff08impedance mismatch\uff09
      • \u601d\u60f3\u7684\u8f49\u63db

      \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

      • \u95dc\u806f\u5f0f\u8cc7\u6599\u5eab\u652f\u63f4 JSON \u683c\u5f0f\u7684\u6b04\u4f4d
      • PostgreSQL
      • MySQL,
      • IBM DB2
      • \u8cc7\u6599\u5f0f\u8cc7\u6599\u5eab\u900f\u904e\u6587\u4ef6\u53c3\u8003\uff08document reference\uff09\u505a\u806f\u5408\uff08join\uff09
      • RethinkDB
      • MongoDB \u7684 driver
      • \u95dc\u806f\u5f0f\u8cc7\u6599\u5eab\u7684\u8cc7\u6599\u5c40\u90e8\u6027\uff08data locality\uff09
      • Google Spanner \u900f\u904e\u7db1\u76ee\u5ba3\u544a\u5176\u5c6c\u65bc\u54ea\u500b\u6bcd\u8868\uff08parent table\uff09\u4f86\u505a\u5230\u5c40\u90e8\u6027
      • Oracle \u7684 multi-table index, Bigtable\uff08Cassandra, HBase\uff09 \u7684 column-family \u4e5f\u90fd\u985e\u4f3c
      "},{"location":"feedback/designing-data-intensive-applications/foundation-model/#\u5716\u50cf\u5f0f\u6a21\u578b","title":"\u5716\u50cf\u5f0f\u6a21\u578b","text":"

      \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

      • \u4eba\u969b\u95dc\u4fc2
      • \u7db2\u9801\u95dc\u4fc2
      • \u9053\u8def

      \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

      • \u4efb\u4f55\u9ede\u548c\u5176\u4ed6\u4efb\u4f55\u9ede\u90fd\u53ef\u4ee5\u9023\u7d50
      • \u7d66\u5b9a\u4e00\u500b\u9ede\uff0c\u53ef\u4ee5\u5feb\u901f\u627e\u5230\u548c\u5176\u6709\u6240\u9023\u7d50\u7684\u9ede\u3002\u4e0d\u7ba1\u662f\u9032\u9084\u662f\u51fa\u3002
      • \u56e0\u70ba\u7dda\u4e0a\u6709\u6a19\u865f\uff0c\u6240\u4ee5\u53ef\u4ee5\u8ce6\u4e88\u7dda\u4e0d\u540c\u610f\u7fa9

      \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

      • \u570b\u5bb6 A \u88ab_\u570b\u5bb6 B_ \u4f75\u8cfc\uff0c\u8b8a\u6210_\u57ce\u5e02 A_\u3002\u539f\u672c\u51fa\u751f\u65bc_\u570b\u5bb6 A_ \u7684\u4eba\uff0c\u8981\u6539\u6210\u51fa\u751f\u65bc_\u570b\u5bb6 B_ \u4e0b\u7684_\u57ce\u5e02 A_\u3002\u5982\u679c\u662f\u95dc\u806f\u5f0f\u8cc7\u6599\u5eab\uff0c\u56e0\u70ba\u5c64\u7d1a\u6539\u8b8a\u4e86\uff0c\u8981\u8abf\u6574\u7684\u6771\u897f\u5f88\u591a\u3002
      • \u4eca\u5929\u9664\u4e86\u8981\u8a2d\u5b9a\u570b\u5bb6\u5916\uff0c\u9084\u60f3\u8981\u8a2d\u5b9a\u4f7f\u7528\u8005\u559c\u6b61\u5403\u7684\u98df\u7269\uff0c\u53ef\u4ee5\u4e0d\u9700\u8981\u8abf\u6574\u7db1\u76ee\u76f4\u63a5\u589e\u52a0\u7bc0\u9ede\u548c\u7dda\u3002

      \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

      • Neo4j
      • Titan
      • InfiniteGraph

      \u4e09\u5143\u7d44\u6a21\u578b\uff08triple-stores model\uff09

      • Datomic
      • AllegroGraph

      \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

      • \u9ede\uff1aID\u3001\u7a2e\u985e\u3001\u5c6c\u6027
      • \u7dda\uff1aID\u3001\u8d77\u59cb\u9ede\u3001\u7d42\u9ede\u3001\u6a19\u865f\uff08label\uff09\u3001\u5c6c\u6027

      \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
      1. prefix \u53ef\u4ee5\u60f3\u50cf\u6210 namespace \u7684\u6982\u5ff5\u3002

      \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

      • \u8072\u660e\u5f0f\uff08Declarative\uff09
      • \u547d\u4ee4\u5f0f\uff08Imperative\uff09
      • \u908f\u8f2f\u5f0f\uff08Deductive\uff09

      \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":"
      • \u9ad8\u62bd\u8c61\u7a0b\u5ea6\uff0c\u597d\u7406\u89e3
      • \u66f4\u65b0\u5e95\u5c64\u904b\u4f5c\u65b9\u5f0f\u800c\u4e0d\u7528\u6539\u52d5\u7a0b\u5f0f\u78bc\uff0c\u5e95\u5c64\u904b\u4f5c\u53ef\u80fd\u5305\u62ec
      • \u641c\u5c0b\u6f14\u7b97\u6cd5
      • \u4e26\u884c\u8655\u7406\uff08parallel processing\uff09
      • \u7b49\u7b49
      "},{"location":"feedback/designing-data-intensive-applications/foundation-model/#\u547d\u4ee4\u5f0f\u597d\u8655","title":"\u547d\u4ee4\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
      1. Map \u4ee3\u8868\u5f9e\u8cc7\u6599\u5eab\u4e2d\u6bcf\u7b46\uff08row/document\uff09\u7be9\u9078\u51fa\u591a\u7d44 k-v \u7d44\u5408\uff0c\u5c31\u597d\u50cf\u8cc7\u6599\u7d50\u69cb\u4e2d\u7684 map \u4e00\u6a23
      2. Reduce \u4ee3\u8868\u5f9e Map \u4e2d\u7684 k-v \u7d44\u5408\uff0c\u76f8\u540c\u7684 key \u6703\u88ab\u5206\u914d\u5230\u540c\u4e00\u7d44\uff0c\u7136\u5f8c\u505a\u964d\u51aa
      3. \u8072\u660e\u5f0f\u7684\u65b9\u5f0f\u53bb\u7be9\u9078\u7a2e\u985e\u70ba\u9bca\u9b5a\u7684\u52d5\u7269

      \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

      • \u82e5\u8003\u616e\u7d30\u7dfb\u8abf\u6574\uff0c\u4f8b\u5982\u6a5f\u5668\u5b78\u7fd2
      • \u55ae\u7d14\u547c\u53eb\u51fd\u5f0f\u53ef\u4ee5\u5f88\u5feb\u901f\u7684\u628a\u9019\u500b\u904b\u7b97\u5206\u914d\u5230\u591a\u53f0\u8cc7\u6599\u5eab\u4e2d\uff08\u8072\u660e\u5f0f\u4e00\u6a23\u53ef\u4ee5\u505a\u5230\uff0c\u4f46\u662f\u6703\u5f88\u4e0d\u76f4\u89c0\uff0c\u4f8b\u5982 MPP\uff09
      "},{"location":"feedback/designing-data-intensive-applications/foundation-model/#\u908f\u8f2f\u5f0f","title":"\u908f\u8f2f\u5f0f","text":"

      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

      • A: B \u662f \u53d7\u5bb3\u8005\uff08V\uff09 \u7684\u670b\u53cb\uff0c\u4e14 C \u548c V \u4e92\u76f8\u8a0e\u53ad\u3002
      • B: \u4e8b\u60c5\u767c\u751f\u6642\u6211\u4e0d\u5728\u73fe\u5834\uff0c\u800c\u4e14\u6211\u4e0d\u8a8d\u8b58 V\u3002
      • C: \u6211\u662f\u7121\u8f9c\u7684\uff0c\u4f46\u4e8b\u767c\u6642\uff0c\u6211\u770b\u5230 A \u548c B \u5728\u73fe\u5834\uff0c\u53ef\u662f\u6211\u4e0d\u77e5\u9053\u7a76\u7adf\u8ab0\u505a\u7684\u3002

      \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
      1. \u9019\u88e1\u7684\u5b9a\u7fa9\u8b49\u8a5e\uff0c\u6839\u64da\u6bcf\u500b\u4eba\u7684\u908f\u8f2f\u4e0d\u540c\uff0c\u53ef\u80fd\u6709\u4e0d\u540c\u5beb\u6cd5\u3002\u4f8b\u5982\uff1a

        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
      1. Fallback function\uff0c\u7576\u8cc7\u6599\u6c92\u6709 within \u5c31\u53d6\u540d\u7a31\u3002

      Datalog \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

      • \u5176\u4ed6\u6a21\u578b
      • \u79d1\u5b78\u4e0a\u4f7f\u7528\uff0c\u9700\u8981\u5132\u5b58\u5927\u91cf\u72c0\u614b\u7684\u8cc7\u6599\u5eab\u3002\u4f8b\u5982\uff0c\u5f37\u4e2d\u5b50\u5c0d\u649e\u6a5f\u7684 ROOT
      • \u57fa\u56e0\u8cc7\u6599\u5eab\uff0c\u9577\u5b57\u4e32\u7684\u76f8\u4f3c\u6027\u3002\u4f8b\u5982\uff0cGenBank
      • \u6587\u672c\u641c\u5c0b\u3002\u4f8b\u5982\uff0cElasticsearch
      • \u5716\u50cf\u5f0f\u6a21\u578b\u548c\u4e0a\u9762\u63d0\u7684 CODASYL \u770b\u8d77\u4f86\u597d\u50cf\u90fd\u8981\u5faa\u7dda\u53bb\u627e\u5230\u67d0\u500b\u9ede\uff0c\u4f46\u662f\u6709\u4e9b\u5dee\u7570\uff1a
      • \u5716\u50cf\u5f0f\u6a21\u578b\u7684\u7db1\u76ee\u5f88\u55ae\u7d14\uff0c\u4efb\u4f55\u9ede\u90fd\u53ef\u4ee5\u548c\u5176\u4ed6\u4efb\u4f55\u9ede\u9023\u7d50
      • \u5716\u50cf\u5f0f\u6a21\u578b\u7684\u7dda\u662f\u6c92\u6709\u9806\u5e8f\u6027\u7684\uff0cCODASYL \u5728\u8003\u616e\u5132\u5b58\u6642\u7684\u72c0\u6cc1\uff0c\u4e00\u5c0d\u591a\u95dc\u4fc2\u662f\u6709\u9806\u5e8f\u6027\u7684
      • CODASYL \u662f\u547d\u4ee4\u5f0f\u7684\u641c\u5c0b\u8a9e\u8a00\uff0c\u5927\u90e8\u5206\u5716\u50cf\u5f0f\u6a21\u578b\u7684\u641c\u5c0b\u8a9e\u8a00\u5f0f\u8072\u660e\u5f0f\u7684
      • \u8a9e\u610f\u7db2\u7ad9\uff08semantic web\uff09\u548c\u4e09\u5143\u7d44\u6a21\u578b\u5f88\u50cf\uff0c\u4f46\u662f\u537b\u662f\u5169\u500b\u610f\u7fa9\u4e0d\u540c\u800c\u5be6\u4f5c\u65b9\u5f0f\u76f8\u4f3c\u7684\u6771\u897f\u3002
      "},{"location":"feedback/designing-data-intensive-applications/glossary/","title":"\u8a5e\u5f59\u8868","text":"

      \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

      1. \u5728\u591a\u7dda\u7a0b\u4e2d\u4ee3\u8868\u6bcf\u9805\u5de5\u4f5c\u90fd\u662f\u55ae\u4e00\u4e14\u7368\u7acb\u7684\uff0c\u4e0d\u53d7\u5176\u4ed6\u7dda\u7a0b\u5f71\u97ff\uff08\u985e\u4f3c\u65bc\u4ea4\u6613\u4e2d\u7684\u9694\u96e2\u6027\uff09\u3002
      2. \u5728\u4ea4\u6613\u4e2d\u4ee3\u8868\u6240\u6709\u5de5\u4f5c\u6574\u5408\u6210\u55ae\u4e00\u5de5\u4f5c\uff1a\u8981\u9ebb\u90fd\u5b8c\u6210\uff0c\u8981\u9ebb\u90fd\u5931\u6557\u3002
      "},{"location":"feedback/designing-data-intensive-applications/glossary/#\u53cd\u58d3","title":"\u53cd\u58d3","text":"

      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

      1. \u5404\u5206\u5340\u7684\u4e0d\u5e73\u8861\uff0c\u4f8b\u5982\u67d0\u4e9b\u5206\u5340\u6709\u5927\u91cf\u8acb\u6c42\u6216\u8cc7\u6599\uff0c\u800c\u5176\u4ed6\u5206\u5340\u5247\u5c11\u5f97\u591a\u3002\u4e5f\u88ab\u7a31\u70ba hot spot\u3002
      2. \u4e26\u884c\u8655\u7406\u6642\u4ea4\u6613\u7684\u4ea4\u932f\u8655\u7406\u5c0e\u81f4\u8cc7\u6599\u4ee5\u4e0d\u671f\u671b\u7684\u9806\u5e8f\u51fa\u73fe\u3002
      "},{"location":"feedback/designing-data-intensive-applications/glossary/#\u91cd\u8907\u5206\u6b0a","title":"\u91cd\u8907\u5206\u6b0a","text":"

      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

      1. \u4fee\u6539\u7a0b\u5f0f\u78bc\u6642\uff0c\u53ef\u80fd\u7121\u610f\u9593\u7834\u58de\u6389\u5176\u4e2d\u5404\u500b\u95dc\u4fc2\u7684\u5354\u4f5c\uff0cDebug \u4ee3\u50f9\u5f88\u9ad8
      2. \u6bcf\u6b21\u4ea4\u4ed8\u3001\u90e8\u7f72\u90fd\u6703\u82b1\u5f88\u9577\u6642\u9593
      3. \u65b0\u9032\u54e1\u5de5\uff0c\u6216\u60f3\u9032\u5165\u9019\u500b\u5c08\u6848\u7684\u9580\u6abb\uff08\u7406\u89e3\u5c08\u6848\u7684\u6642\u9593\uff09\u63d0\u9ad8

      \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

      1. \u98a8\u96aa\u63d0\u9ad8\uff0c\u56e0\u670d\u52d9\u5f7c\u6b64\u4e4b\u9593\u6709\u9023\u7d50\uff0c\u82e5 A \u670d\u52d9\u58de\u4e86\uff0cB \u670d\u52d9\u4e5f\u6703\u58de\u6389\u3002\u591a\u4e00\u53f0\u6a5f\u5668\uff0c\u5c31\u591a\u4e00\u4efd\u6a5f\u5668\u58de\u6389\u7684\u98a8\u96aa
      2. \u589e\u52a0\u6e9d\u901a\u9700\u8981\u7684\u6642\u9593\u3001\u98a8\u96aa\u548c\u6d41\u91cf
      3. \u672c\u4f86\u540c\u4e00\u500b\u61c9\u7528\u7a0b\u5f0f\uff0c\u53ef\u4ee5\u5171\u7528\u4e00\u4efd\u8a2d\u5b9a\u6a94\u3001\u7a0b\u5f0f\u78bc\u548c\u6a5f\u654f\u8cc7\u6599\uff0c\u82e5\u670d\u52d9\u8b8a\u591a\u4e86\uff0c\u8a72\u600e\u9ebc\u540c\u6b65\u9019\u4e9b\u5171\u7528\u7684\u6a94\u6848
      4. \u8981\u600e\u9ebc\u77e5\u9053\u7279\u5b9a Request \u70ba\u4ec0\u9ebc\u6703\u56de 500\uff0c\u54ea\u53f0\u58de\u4e86\uff1f
      5. \u9650\u5236\u7279\u5b9a\u670d\u52d9\u50c5\u80fd\u5728\u670d\u52d9\u9593\u6e9d\u901a\uff0c\u800c\u4e0d\u80fd\u5c0d\u5916\uff08VPC\uff09

      \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

      1. Protocol - \u4e0d\u540c\u7684\u670d\u52d9\u9593\uff0c\u8a72\u7528\u4ec0\u9ebc\u65b9\u5f0f\u6e9d\u901a\uff0c\u554f\u984c 2
      2. SLA and Load Testing - \u5982\u4f55\u8b49\u660e\u6548\u7387\u5728\u63a5\u53d7\u7bc4\u570d\u5167\uff0c\u554f\u984c 2
      3. Observability - Log\u3001Metric \u548c Tracing\uff0c\u554f\u984c 4
      4. Container - \u670d\u52d9\u8b8a\u591a\u4e86\uff0c\u90e8\u7f72\u4e0a\u8a72\u4f7f\u7528\u4ec0\u9ebc\u65b9\u5f0f\uff0c\u554f\u984c 1
      5. Container Orchestration and Misc. - \u5bb9\u5668\u8abf\u5ea6\u5de5\u5177\uff0c\u554f\u984c 1~5
      "},{"location":"feedback/distributed-systems-with-node.js/container-orchestration-and-misc/","title":"Container Orchestration and Misc","text":"

      \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

      • \u5982\u4f55\u505a Scaling\uff0c\u55ae\u4e00\u6216\u591a\u53f0\u6a5f\u5668
      • Load Balance
      • Health Check and Replacement
      • \u591a\u670d\u52d9\u9593\u7684\u6e9d\u901a\uff0cdocker-compose \u50c5\u80fd\u5728\u55ae\u4e00\u53f0\u6a5f\u5668\u4e0b\u5354\u52a9\u6e9d\u901a
      • \u65b0\u7248\u672c\u7684\u61c9\u7528\u7a0b\u5f0f\u5982\u4f55\u7121\u7e2b\u63a5\u8ecc

      \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

      • Container
      • Volume
      • Pod
      • Node
      • Master
      • Cluster
      "},{"location":"feedback/distributed-systems-with-node.js/container-orchestration-and-misc/#container","title":"Container","text":"

      \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

      • Kubernetes Daemon\uff08\u7a31\u4f5c Kubelet\uff09
      • Container Daemon\uff08\u5982\uff1aDocker\uff09
      • Network Proxy\uff08\u7a31\u4f5c Kube Proxy\uff09

      "},{"location":"feedback/distributed-systems-with-node.js/container-orchestration-and-misc/#master","title":"Master","text":"

      \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

      "},{"location":"feedback/distributed-systems-with-node.js/container-orchestration-and-misc/#cluster","title":"Cluster","text":"

      \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

      • Deployment
      • Selector
      • Label
      • Scheduler
      • Controller
      • ReplicaSet
      • Probe

      "},{"location":"feedback/distributed-systems-with-node.js/container-orchestration-and-misc/#deployment","title":"Deployment","text":"

      \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

      "},{"location":"feedback/distributed-systems-with-node.js/container-orchestration-and-misc/#label","title":"Label","text":"

      \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

      "},{"location":"feedback/distributed-systems-with-node.js/container-orchestration-and-misc/#scheduler","title":"Scheduler","text":"

      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

      • StatefulSet \u662f\u53ef\u4ee5\u63d0\u4f9b\u72c0\u614b\u5132\u5b58\u7684\u7fa4\u7d44\u3002

      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

      • Ingress
      • Service

      "},{"location":"feedback/distributed-systems-with-node.js/container-orchestration-and-misc/#service","title":"Service","text":"

      \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

      • \u78ba\u8a8d kubectl \u7684\u5b89\u88dd\uff1akubectl version --client

      brew install kubernetes-cli

      • \u78ba\u8a8d minikube \u7684\u5b89\u88dd\uff1aminikube version

      brew install minikube

      "},{"location":"feedback/distributed-systems-with-node.js/container-orchestration-and-misc/#kubectl","title":"kubectl","text":"
      • \u555f\u52d5
      $ 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
      • \u67e5\u770b\u73fe\u6709 Pods
      $ kubectl get pods\nNo resources found in default namespace.\n

      \u56e0\u70ba\u9810\u8a2d\u4f7f\u7528 default namespace

      • \u67e5\u770b\u6240\u6709 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
      • \u67e5\u770b\u7cfb\u7d71\u7684 Pods
      $ 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
      • \u67e5\u770b Node
      $ kubectl get nodes\nNAME       STATUS   ROLES                  AGE   VERSION\nminikube   Ready    control-plane,master   48d   v1.20.2\n
      • \u4f7f\u7528 minikube \u7684 Docker daemon

      1. \u5148\u67e5\u770b\u73fe\u6709 Docker process list\uff1adocker ps
      2. \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
      3. \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":"tldr
      H4sIAAAAAAAACs1c245a2RH9lRHPbLTvF79NFCXxSzTKRMrDZB721UbBTYduzyUj/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

      • \u5b9a\u7fa9 Pod \u548c Label
      • \u900f\u904e Selector \u6c7a\u5b9a scaling \u8981\u4f7f\u7528\u54ea\u4e00\u4e9b Pod
      • \u8981\u6c42\u9054\u5230\u7684\u72c0\u614b\u3002\u4ee5\u6b64\u8a2d\u5b9a\u6a94\u70ba\u4f8b\uff1a\u9577\u5230 3/5 \u500b Pods
      • Container \u8a2d\u5b9a\u3002\u7248\u672c\u3001port \u548c health-check

      \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

      • \u5b9a\u7fa9\u61c9\u7528\u7a0b\u5f0f\u5c0d\u5916\u7684 port\uff08Node \u5916\u3001Cluster \u5167\uff09
      • \u8a2d\u5b9a Ingress \u5c0e\u5f15\u689d\u4ef6\uff0c\u653e\u5982 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

      • Horizontal Autoscaler \u900f\u904e CPU \u6216\u5176\u4ed6\u7cfb\u7d71\u8cc7\u6e90\u53bb\u589e\u6e1b Pod\u3002
      • Cron Job \u900f\u904e\u6392\u7a0b\u53bb\u589e\u6e1b Pod\u3002

      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":"
      • Live migration
      • Retry strategy
      • Chaos resiliency
      • Data atomicity
      • Dependency security
      • Dependency upgrade

      \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

      1. SLO
      2. Load Test
      3. Baseline
      "},{"location":"feedback/distributed-systems-with-node.js/container/#observability","title":"Observability","text":"

      \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

      • Log
      • Metric
      • Tracing
      • Alert
      • Health Check
      "},{"location":"feedback/distributed-systems-with-node.js/container/#\u90e8\u7f72\u65b9\u5f0f","title":"\u90e8\u7f72\u65b9\u5f0f","text":"

      \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

      • \u53ef\u651c\u5e36\u6027 - \u76f8\u4f9d\u5957\u4ef6\u9808\u4e00\u4f75\u651c\u5e36\uff0c\u5305\u62ec Binaries Depending
      • \u6548\u7387 - \u6bcf\u6b21\u90e8\u7f72\u9700\u6d88\u8017\u7684\u6210\u672c
      • \u5b89\u5168\u6027 - \u6a5f\u654f\u8cc7\u8a0a\u7684\u66b4\u9732
      • \u8106\u5f31\u6027 - \u76f8\u4f9d\u5957\u4ef6\u7248\u672c\u7684\u885d\u7a81\u7b49
      "},{"location":"feedback/distributed-systems-with-node.js/container/#\u6bd4\u8f03","title":"\u6bd4\u8f03","text":"
      • \u5be6\u9ad4\u6a5f - \u82e5\u548c\u5176\u4ed6\u670d\u52d9\uff08\u5982 Load Balancer\uff09\u6709\u5957\u4ef6\u7684\u885d\u7a81\uff0c\u6703\u5f88\u9ebb\u7169\u3002
      • VM - \u9069\u5408 DB \u548c\u5176\u4ed6\u9700\u8981\u5132\u5b58\u7a69\u5b9a\u72c0\u614b\u7684\u61c9\u7528\u7a0b\u5f0f\u3002
      • Container - \u9069\u5408\u9ad8\u8fed\u4ee3\u3001\u9ad8\u90e8\u7f72\u7387\u7684\u61c9\u7528\u7a0b\u5f0f\u3002

      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

      1. dockerd daemon\uff0c\u5c0d\u5916\u63d0\u4f9b API\uff0c\u9032\u884c Container \u7684\u5efa\u7f6e\u548c\u7ba1\u7406
      2. Docker CLI \u63d0\u4f9b\u8a9e\u6cd5\u5c0d API \u9032\u884c\u547c\u53eb\u548c\u8a2d\u5b9a\u3002
      3. Docker Hub

      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

      • \u4ee5 Node.js \u70ba\u57fa\u790e\u7684\u88fd\u4f5c\u7bc4\u4f8b
      • \u5404\u8a9e\u8a00\u7684\u7bc4\u4f8b - \u5b98\u7db2
      "},{"location":"feedback/distributed-systems-with-node.js/container/#\u548c-container-\u7684\u4e92\u52d5","title":"\u548c Container \u7684\u4e92\u52d5","text":"

      \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
      • \u4e26\u4f7f\u7528 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

      "},{"location":"feedback/distributed-systems-with-node.js/container/#\u628a\u6a94\u6848\u4e1f\u9032-container-\u4e2d","title":"\u628a\u6a94\u6848\u4e1f\u9032 Container \u4e2d","text":"
      $ 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

      "},{"location":"feedback/distributed-systems-with-node.js/container/#alternative","title":"Alternative","text":"

      \u73fe\u5728\u5df2\u7d93\u8f03\u5c11\u5176\u4ed6\u7ba1\u7406 Container \u7684\u7522\u54c1\uff1a

      • RedHat \u6709\u4e00\u500b\u5df2\u7d93 archive \u7684\u5c08\u6848 rkt
      • Open Container Initiative \u5247\u5617\u8a66\u5236\u8a02 container \u6a19\u6e96\u3002
      "},{"location":"feedback/distributed-systems-with-node.js/container/#\u5206\u6563\u5f0f\u7cfb\u7d71\u4e0a\u7684\u61c9\u7528","title":"\u5206\u6563\u5f0f\u7cfb\u7d71\u4e0a\u7684\u61c9\u7528","text":"

      \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

      • \u628a\u4e0d\u540c\u670d\u52d9\u5305\u88dd\u6210\u540c\u4e00\u500b Image

      \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

      • JFrog Artifactory
      • Cloud based
      "},{"location":"feedback/distributed-systems-with-node.js/container/#\u8a3b","title":"\u8a3b","text":"

      \u9019\u6b21\u5206\u4eab\u7701\u7565

      • \u4e0a\u50b3 Image \u5230 Docker Registry
      • \u81ea\u88fd Docker Registry UI
      "},{"location":"feedback/distributed-systems-with-node.js/observability/","title":"Observability","text":""},{"location":"feedback/distributed-systems-with-node.js/observability/#\u8aaa\u660e","title":"\u8aaa\u660e","text":"

      \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

      "},{"location":"feedback/distributed-systems-with-node.js/observability/#tracing","title":"Tracing","text":"

      \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

      "},{"location":"feedback/distributed-systems-with-node.js/observability/#metric","title":"Metric","text":"

      \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

      "},{"location":"feedback/distributed-systems-with-node.js/observability/#elasticsearch","title":"Elasticsearch","text":"

      \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":"
      • Datadog
      • Sumo Logic
      • Splunk
      • Cloud (AWS, GCP, ELK)
      "},{"location":"feedback/distributed-systems-with-node.js/observability/#metrics","title":"Metrics","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, InfluxDB
      • StatsD -> cAdvisor, MetricBeat
      "},{"location":"feedback/distributed-systems-with-node.js/observability/#tracing_1","title":"Tracing","text":"

      \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

      "},{"location":"feedback/distributed-systems-with-node.js/observability/#\u7a0b\u5f0f\u78bc_1","title":"\u7a0b\u5f0f\u78bc","text":"

      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

      "},{"location":"feedback/distributed-systems-with-node.js/observability/#\u7bc4\u4f8b","title":"\u7bc4\u4f8b","text":"

      \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":"
      • \u61c9\u7528\u5c64\uff08Application Layer\uff09
      • \u8868\u9054\u5c64\uff08Presentation Layer\uff09
      • \u6703\u8b70\u5c64\uff08Session Layer\uff09
      • \u50b3\u8f38\u5c64\uff08Transport Layer\uff09
      • \u7db2\u8def\u5c64\uff08Network Layer\uff09
      • \u8cc7\u6599\u9023\u7d50\u5c64\uff08Data Link Layer\uff09
      • \u5be6\u9ad4\u5c64\uff08Physical Layer\uff09
      "},{"location":"feedback/distributed-systems-with-node.js/protocol/#http","title":"HTTP","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

      "},{"location":"feedback/distributed-systems-with-node.js/protocol/#json","title":"JSON","text":"

      \u55ae\u7d14\u900f\u904e JSON \u50b3\u905e\u6709\u4ec0\u9ebc\u7f3a\u9ede\uff1f

      1. \u6b63\u78ba\u7684\u8cc7\u6599\u683c\u5f0f\u61c9\u8a72\u8981\u9577\u4ec0\u9ebc\u6a23\u5b50\uff1f
      2. \u4f7f\u7528\u8005\u9700\u8981\u95b1\u8b80\u76f8\u95dc\u6587\u4ef6\uff0c\u6709\u8fa6\u6cd5\u8b93\u6a5f\u5668\u81ea\u52d5\u8655\u7406\u55ce\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

      • JSON API
      • JSON Schema
      • OpenAPI (Swagger)

      \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

      • \u53ef\u4ee5\u62ff\u5230\u6700\u6e96\u78ba\u7684\u8cc7\u6599\uff0c\u6e1b\u5c11\u7db2\u8def\u50b3\u8f38
      • \u628a\u591a\u7a2e\u670d\u52d9\u7684\u8cc7\u6599\u5728\u4e00\u6b21\u8acb\u6c42\u4e2d\u8981\u9f4a

      \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

      "},{"location":"feedback/distributed-systems-with-node.js/protocol/#\u898f\u7bc4","title":"\u898f\u7bc4","text":"
      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

      • web-api \u539f\u59cb\u78bc
      // \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
      • recipe-api \u539f\u59cb\u78bc
      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

      • \u518d\u5efa\u7acb\u4e00\u500b endpoint \u5c08\u9580\u505a\u9019\u4ef6\u4e8b\uff1a \u904e\u591a API\uff0c\u96e3\u7ba1\u7406\u548c\u7406\u89e3
      • \u5728\u8a72 endpoint \u65b0\u589e\u8b8a\u6578\uff1aneed_send_email\uff1a \u8b93\u8a72 endpoint \u8d8a\u4f86\u8d8a\u8907\u96dc

      Remote 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

      • \u6240\u6709\u683c\u5f0f\u7686\u9808\u9810\u5148\u8a2d\u5b9a\u597d\uff0c\u526f\u6a94\u540d\u70ba .proto\uff0c\u4e14\u9700\u8981\u8b93 client \u64c1\u6709\u3002
      • \u5404\u503c\u9700\u7d66\u5b9a\u9806\u5e8f\uff0c\u4e14\u4e4b\u5f8c\u4e0d\u5efa\u8b70\u4fee\u6539\u3002
      • \u6578\u5b57\u6709\u591a\u578b\u5225\uff1aint32\uff0cint64\uff0cfloat\uff0cdouble \u7b49\u7b49\u3002

      \u9019\u4e9b\u689d\u4ef6\u6709\u5e7e\u500b\u597d\u8655\uff1a

      • \u6548\u80fd\u3001\u9ad4\u7a4d\u7684\u6700\u512a\u5316\uff0cbinary serialize/deserialize
      {\"id\":42} v.s. 42\n
      • \u5411\u5f8c\u76f8\u5bb9
      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":"
      • gRPC proto
      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
      • \u5efa\u7acb service\uff0c\u539f\u59cb\u78bc
      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
      • \u5efa\u7acb client\uff0c\u539f\u59cb\u78bc
      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

      • \u6709 field
      • \u4e0d\u9700\u8981\u984d\u5916\u6a94\u6848\uff08\u5982 .proto\uff09\u53bb\u63cf\u8ff0

      gRPC

      • Apache Thrift
      • JSON RPC

      \u95dc\u65bc gRPC \u63a8\u85a6\u7684\u6587\u7ae0\uff1a

      • \u6bd4\u8f03 gRPC \u670d\u52d9\u8207 HTTP API
      "},{"location":"feedback/distributed-systems-with-node.js/protocol/#\u7d50\u8ad6","title":"\u7d50\u8ad6","text":"
      1. JSON \u4f60\u9700\u8981\u4e00\u500b http client \u4f86\u547c\u53eb\u773e\u591a API Endpoint\uff0c\u8a0a\u606f\u683c\u5f0f\u4e5f\u9700\u8981\u6709\u984d\u5916\u7684 Schema \u5b9a\u7fa9
      2. GraphQL \u4f60\u9084\u662f\u9700\u8981\u4e00\u500b http client\uff0c\u4f46\u662f\u9019\u6b21\u53ea\u9700\u8981\u5c0d\u61c9\u4e00\u500b\u7aef\u9ede\uff0c\u800c\u4e14\u53ef\u4ee5\u81ea\u5df1\u7d44\u7e54\u67e5\u8a62\u5167\u5bb9
      3. gRPC \u4f60\u9023 http client \u90fd\u4e0d\u7528\uff0c\u5957\u4ef6\u6703\u5e6b\u4f60\u7522\u51fa\u9019\u4e9b\u547c\u53eb\u7684\u7a0b\u5f0f\u908f\u8f2f\uff0c\u800c\u4f60\u53ea\u9700\u8981\u50cf\u5beb\u4e00\u822c function \u4e00\u6a23\u547c\u53eb\u5373\u53ef
      "},{"location":"feedback/distributed-systems-with-node.js/sla-and-load-testing/","title":"SLA and Load Testing","text":""},{"location":"feedback/distributed-systems-with-node.js/sla-and-load-testing/#\u8aaa\u660e","title":"\u8aaa\u660e","text":"

      \u7522\u54c1\u90fd\u9700\u8981\u5411\u4f7f\u7528\u8005\u5c55\u793a\u90e8\u5206\u7684\u627f\u8afe\uff0c\u4f8b\u5982\uff1a

      • \u8981\u6c42\u5728 100ms \u5167\u56de\u61c9\uff08Latency\uff09
      • 1 \u5e74\u7576\u4e2d\u50c5\u6709 1 \u5c0f\u6642\u4ee5\u5167\u7684\u6642\u9593\u670d\u52d9\u53ef\u80fd\u7121\u6cd5\u4f7f\u7528
      • \u4efb\u4f55\u8b8a\u52d5\u90fd\u6703\u4fdd\u8b49\u4e00\u5e74\u5167\u7684\u5411\u5f8c\u76f8\u5bb9

      \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

      "},{"location":"feedback/distributed-systems-with-node.js/sla-and-load-testing/#\u5206\u6563\u5f0f\u7cfb\u7d71\u4e2d\u7684\u610f\u7fa9","title":"\u5206\u6563\u5f0f\u7cfb\u7d71\u4e2d\u7684\u610f\u7fa9","text":"

      \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

      • \u5728\u4e0d\u505a\u4efb\u4f55\u5916\u90e8\u8acb\u6c42\u4e4b\u4e0b\u7684 Latency
      • \u4f7f\u7528\u7684\u6846\u67b6\u6240\u9650\u5236\u7684 Latency

      \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

      • \u5957\u7528 compression\uff0c\u5c0d\u65bc\u6548\u80fd\u6703\u6709\u4ec0\u9ebc\u5f71\u97ff\uff1f
      • \u518d\u52a0\u4e0a r-prxoy \u53c8\u6703\u6709\u4ec0\u9ebc\u5f71\u97ff\uff1f
      "},{"location":"feedback/distributed-systems-with-node.js/sla-and-load-testing/#latency_1","title":"Latency","text":"Percentile With Proxy Without 99% 47ms 53ms 99.9% 50ms 57ms 99.99% 52ms 62ms 99.999% 53ms 64ms"},{"location":"feedback/distributed-systems-with-node.js/sla-and-load-testing/#protocol","title":"Protocol","text":"

      \u4e0a\u4e00\u4efd\u5831\u544a\u8a0e\u8ad6\u5404\u7a2e\u670d\u52d9\u9593\u7684\u6e9d\u901a\u65b9\u5f0f\uff1a

      • JSON over HTTP
      • GraphQL
      • gRPC

      \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":"
      1. SLA \u662f\u9762\u5411\u5f88\u591a\u7684\u6307\u6a19\uff0c\u6709\u6642\u5fc5\u9808\u6b0a\u8861
      2. \u6b63\u78ba\u7684\u8a55\u4f30\u7b26\u5408\u81ea\u5df1\u7684\u6307\u6a19\uff0c\u4f8b\u5982\uff1a\u81ea\u52d5\u586b\u5beb vs \u9280\u884c\u958b\u6236
      3. \u5728\u505a load testing \u6642\uff0c\u9700\u8981\u6ce8\u610f\u7522\u54c1\u53ef\u80fd\u7684\u6d41\u91cf\u9ad8\u4f4e\u5cf0
      4. \u8981\u76e1\u91cf\u6e1b\u5c11\u96dc\u97f3\uff08noisy neighbor\uff09\uff0c\u76e1\u91cf\u5728\u985e\u4f3c\u7dda\u4e0a\u7684\u74b0\u5883\u4e2d\u6e2c\u8a66
      5. \u4e00\u500b\u7522\u54c1\u7a76\u7adf\u8a72\u958b\u5e7e\u500b\uff08\u591a\u5c11 CPU/Memory\uff09\u6a5f\u5668\u4f86\u6eff\u8db3\u7dda\u4e0a\u6d41\u91cf\uff1f
      "},{"location":"feedback/distributed-systems-with-node.js/sla-and-load-testing/#\u65b9\u5411","title":"\u65b9\u5411","text":"
      1. \u89c0\u5bdf\u7dda\u4e0a\u74b0\u5883\u73fe\u6709\u7684\u6d41\u91cf\u9ad8\u5cf0\uff0c\u4e26\u5236\u5b9a\u51fa\u7b26\u5408\u5546\u52d9\u908f\u8f2f\u7684 Latency\uff08SLO\uff09\u3002
      2. \u5236\u5b9a\u55ae\u4f4d\uff1a\u4e00\u500b Docker container\u3001\u4e00\u53f0\u6a5f\u5668\u3001EC2
      3. \u627e\u51fa\u5728\u6eff\u8db3 TP99 \u4e0b\u7684\u8acb\u6c42\u6578
      4. \u589e\u52a0\u55ae\u4f4d\uff0c\u53cd\u8986\u6e2c\u8a66\u76f4\u5230\u9054\u5230\u80fd\u5bb9\u7d0d\u7dda\u4e0a\u74b0\u5883\u7684\u6578\u91cf
      "},{"location":"feedback/distributed-systems-with-node.js/sla-and-load-testing/#\u7bc4\u4f8b_1","title":"\u7bc4\u4f8b","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

      • \u661f\u661f\u662f\u600e\u9ebc\u4f86\u7684\uff1f
      • \u80fd\u91cf\u600e\u9ebc\u4f86\u7684\uff1f
      • \u6838\u878d\u5408\u5f37\u5ea6\u8981\u8db3\u4ee5\u652f\u6490\u91cd\u529b\u624d\u80fd\u5f62\u6210\u661f\u661f
      • \u66f4\u91cd\u66f4\u5927\u7684\u539f\u5b50\u7684\u5f62\u6210\u539f\u7406\u6709\u54ea\u4e9b\uff1f\u53ef\u4ee5\u641c\u5c0b\u6c26\u805a\u8b8a\u7684\u904e\u7a0b

      \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

      • \u6838\u5206\u88c2\uff08nuclear fission\uff09
      • \u6838\u878d\u5408\uff08nuclear fusion\uff09
      • \u5730\u71b1\uff08geothermal\uff0c\u91cd\u529b\u5c55\u73fe\u51fa\u7684\u4e00\u7a2e\u80fd\u91cf\uff09
      • \u592a\u967d\u80fd\uff08solar\uff09
      • \u6f6e\u6c50\uff08tidal\uff0c\u91cd\u529b\u5c55\u73fe\u51fa\u7684\u4e00\u7a2e\u80fd\u91cf\uff09

      \u5176\u4ed6\u80fd\u6e90\u4fbf\u90fd\u662f\u5f9e\u9019\u4e9b\u57fa\u790e\u80fd\u6e90\u5ef6\u4f38\u800c\u6210\uff0c\u4f8b\u5982

      • \u98a8\u529b\uff0c\u7576\u592a\u967d\u80fd\u7522\u751f\u71b1\u529b\u5dee\u5c31\u6703\u5f62\u6210\u58d3\u529b\u5dee\u9032\u800c\u5f62\u6210\u98a8\u529b
      • \u6c34\u529b\uff0c\u900f\u904e\u6c34\u7684\u84b8\u767c\u81f3\u9ad8\u8655\u5f8c\u7531\u4e0a\u800c\u4e0b\u7684\u52d5\u529b\u5dee\u5f62\u6210\u6c34\u529b
      • \u77f3\u6cb9\uff0c\u690d\u7269\u5229\u7528\u592a\u967d\u57f7\u884c\u5149\u5408\u4f5c\u7528\u4ee5\u4fbf\u751f\u5b58\uff0c\u6700\u5f8c\u8870\u9000\u5f62\u6210\u77f3\u6cb9

      \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

      • \u900f\u904e\u6c18\u548c\u6c1a\u7684\u78b0\u649e\uff08D-T fusion\uff09\uff0c\u8f03\u6613\u767c\u751f\u878d\u5408
      • \u900f\u904e\u6c18\u548c\u6c18\u7684\u78b0\u649e\uff08D-D fusion\uff09\uff0c\u8f03\u96e3\u767c\u751f\u878d\u5408\uff0c\u4f46\u662f\u4e0d\u518d\u9700\u8981\u6c1a

      \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\u4f46\u53ef\u4ee5\u8f15\u6613\u5c31\u53ef\u4ee5\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\u6240\u4ee5\u91cd\u529b\u6240\u9020\u6210\u7684\u62c9\u529b\u6703\u88ab\u6e1b\u5c11\u800c\u5347\u9ad8\u6d77\u5e73\u9762\uff0c\u6240\u4ee5\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\uff0c\u56e0\u70ba\u5982\u6b64\uff0c\u5730\u7403\u81ea\u8f49\u7684\u901f\u5ea6\u964d\u4f4e\u4e86\u800c\u6708\u7403\u516c\u8f49\u7684\u901f\u5ea6\u537b\u63d0\u9ad8\u4e86\u4e5f\u9020\u6210\u6708\u7403\u516c\u8f49\u7684\u8ddd\u96e2\u63d0\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

      • \u5132\u80fd\u7cfb\u7d71
      • \u9700\u6c42\u63a7\u7ba1
      • \u8de8\u5340\u57df\u96fb\u7db2
      • \u589e\u52a0\u5099\u63f4\u4ee5\u63d0\u4f9b\u8d85\u904e\u6240\u9700\u7684\u80fd\u91cf\uff0c\u9019\u65b9\u6cd5\u4e0d\u7d93\u6fdf\uff0c\u6211\u5011\u5c31\u4e0d\u8a0e\u8ad6\u4e4b\u4e86\u3002

      \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\u4e2d\u65b7\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 \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

      • \u6838\u878d\u5408\u7684\u7814\u7a76 \u6838\u878d\u5408\u7814\u7a76\u5c6c\u65bc\u524d\u77bb\u6027\u7814\u7a76\uff0c\u4e5f\u5c31\u662f\u5118\u7ba1\u4f60\u4ed8\u51fa\u7684\u5f88\u591a\uff0c\u5f88\u53ef\u80fd\u6700\u7d42\u537b\u6c92\u6709\u4ec0\u9ebc\u6709\u50f9\u503c\u7684\u56de\u5831\u3002\u4f46\u662f\u7576\u6709\u6210\u679c\u6642\uff0c\u9019\u500b\u6536\u7a6b\u537b\u975e\u5e38\u5de8\u5927\uff0c\u4f60\u5c07\u64c1\u6709\u4e00\u500b\u5b89\u975c\u3001\u53ef\u9760\u3001\u9ad8\u6548\u4e14\u53ef\u4ee5\u4f4e\u6210\u672c\u5730\u63a5\u7ba1\u73fe\u6709\u77f3\u5316\u71c3\u6599\u767c\u96fb\u5ee0\u7684\u5927\u90e8\u5206\u5668\u6750\u7684\u80fd\u6e90\u3002
      • \u512a\u5316\u518d\u751f\u80fd\u6e90\u7684\u64f7\u53d6\u6548\u7387\u548c\u6210\u672c \u518d\u751f\u80fd\u6e90\u7684\u9593\u6b47\u6027\uff0c\u8b93\u6211\u5011\u5f88\u96e3\u53ea\u4f9d\u9760\u55ae\u4e00\u80fd\u6e90\u3002\u592a\u967d\u80fd\u64c1\u6709\u5f88\u9ad8\u7684\u80fd\u91cf\u5bc6\u5ea6\uff0c\u537b\u6709\u9031\u671f\u6027\u9593\u6b47\u7684\u554f\u984c\uff0c\u6211\u5011\u53ef\u80fd\u53ef\u4ee5\u5229\u7528\u98a8\u529b\u4f86\u5f4c\u88dc\uff0c\u4f46\u4ecd\u9700\u8981\u9760\u4e00\u4e9b\u624b\u6cd5\u4f86\u6eff\u8db3\u9700\u6c42\uff0c\u4f8b\u5982\u5132\u80fd\u3001\u64f4\u589e\u96fb\u7db2\u3001\u8b93\u6a5f\u5668\u8070\u660e\u7684\u4f7f\u7528\u80fd\u6e90\uff08\u4f8b\u5982\u7528\u96fb\u5927\u6236\u767d\u5929\u7528\u96fb\uff09\u3002
      • \u5927\u81bd\u5730\u7e7c\u7e8c\u63a1\u7528\u6838\u5206\u88c2 \u5118\u7ba1\u6838\u5206\u88c2\u80fd\u767c\u96fb\u5ee0\u5c6c\u65bc\u6700\u5b89\u5168\u7684\u767c\u96fb\u8a2d\u65bd\u4e4b\u4e00\uff08\u6bcf\u55ae\u4f4d\u80fd\u91cf\u9020\u6210\u7684\u50b7\u4ea1\u4eba\u6578\u5f88\u4f4e\uff09\uff0c\u4f46\u5927\u773e\u5c0d\u65bc\u4ed6\u7684\u6050\u61fc\u5f9e\u672a\u5e73\u606f\u3002\u672a\u4f86\u6ecb\u751f\u53cd\u61c9\u7684\u6838\u5206\u88c2\u5fc5\u7136\u6703\u6709\u6240\u9032\u5c55\u548c\u5be6\u8e10\uff0c\u4f46\u662f\u7576\u610f\u5916\u7121\u53ef\u907f\u514d\u5730\u767c\u751f\u6642\uff0c\u6211\u5011\u9700\u8981\u52aa\u529b\u8b93\u707d\u5bb3\u767c\u751f\u6642\u7684\u7bc4\u570d\u9650\u7e2e\u5728\u6211\u5011\u63d0\u51fa\u7684\u627f\u8afe\u4e2d\u3002\u6700\u5f8c\u6838\u5206\u88c2\u7684\u767c\u5c55\u6703\u52a0\u901f\u6838\u6b66\u5668\u7684\u64f4\u589e\uff0c\u9019\u4e5f\u662f\u6b64\u6280\u8853\u5e36\u4f86\u7684\u91cd\u8981\u4e14\u4e0d\u5e78\u7684\u526f\u4f5c\u7528\u4e4b\u4e00\u3002
      1. \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

      2. \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

      "},{"location":"feedback/future-of-fusion-energy/fusion/","title":"\u6838\u878d\u5408","text":"
      • \u539f\u5b50\u6838\u4e2d\u7684\u5169\u500b\u8cea\u5b50\u660e\u660e\u5e36\u8457\u6b63\u96fb\uff0c\u70ba\u4ec0\u9ebc\u5f7c\u6b64\u4e0d\u6703\u56e0\u70ba\u96fb\u78c1\u529b\u76f8\u65a5\uff1f\u6838\u529b
      • \u7576\u5169\u500b\u8cea\u5b50\u76f8\u649e\uff0c\u4e26\u4e14\u8d8a\u904e\u5eab\u502b\u58c1\u58d8\u6642\u5c31\u6703\u767c\u751f\u6838\u878d\u5408\uff0c\u4f60\u53ef\u4ee5\u60f3\u50cf\u628a\u9ad8\u723e\u592b\u7403\u5f9e\u81fa\u7063\u6d77\u5cfd\u7684\u6d77\u9762\u4e0a\u6253\u9032\u5230\u7389\u5c71\u4e0a\u7684\u4e00\u500b\u7403\u6d1e\uff0c\u8b93\u8cea\u5b50\u8d8a\u904e\u5eab\u502b\u58c1\u58d8\u4e26\u878d\u5408\u5c31\u662f\u9019\u9ebc\u56f0\u96e3\u3002\u4e0d\u53ea\u662f\u529b\u91cf\u8981\u5920\u5f37\uff0c\u540c\u6642\u529b\u91cf\u4e5f\u4e0d\u80fd\u592a\u5f37\u3002\u82e5\u4e0d\u662f\u56e0\u70ba\u64c1\u6709\u8db3\u5920\u5927\u91cf\u7684\u8cea\u5b50\uff08\u9ad8\u723e\u592b\u7403\uff09\u4e14\u6bcf\u9846\u8cea\u5b50\u90fd\u64c1\u6709\u4e00\u5b9a\u7684\u80fd\u91cf\u7684\u74b0\u5883\u4e0b\uff0c\u767c\u751f\u6838\u878d\u5408\u7684\u6a5f\u7387\u5c31\u6703\u975e\u5e38\u4f4e\u3002
      \u6838\u529b

      \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

      • \u57fa\u672c\u7c92\u5b50
      • \u504f\u5fae\u5206
      • \u72f9\u7fa9\u76f8\u5c0d\u8ad6
      • \u91cf\u5b50\u529b\u5b78
      "},{"location":"feedback/physics/astronomy/","title":"\u5929\u6587\u5b78","text":"

      \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

      • \u5fae\u6ce2\uff0c\u6700\u521d\u900f\u904e\u5fae\u6ce2\u89c0\u6e2c\u5b87\u5b99\uff0c\u9032\u800c\u8b93\u6211\u5011\u5c0d\u9019\u500b\u6ce2\u6bb5\u66f4\u4e86\u89e3\uff0c\u5f9e\u800c\u5ef6\u4f38\u5230\u751f\u6d3b\u5de5\u5177\uff0c\u6700\u5f8c\u518d\u5f9e\u751f\u6d3b\u61c9\u7528\u5ef6\u4f38\u66f4\u591a\u9762\u5411\uff0c\u4f8b\u5982 Wi-Fi\u3002
      • CCD\uff0c\u900f\u904e\u5728\u5929\u6587\u5b78\u4e0a\u7684\u61c9\u7528\uff0c\u6700\u5f8c\u666e\u53ca\u5230\u6bcf\u500b\u4eba\u624b\u4e0a\u90fd\u6709\u7684\u624b\u6a5f\u76f8\u6a5f\u3002

      \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

      • \u671b\u9060\u93e1\uff08telescope\uff09\uff0c\u8d8a\u5927\u7684\u611f\u5149\u7bc4\u570d\uff0c\u80fd\u770b\u5230\u7684\u6771\u897f\u5c31\u6703\u8d8a\u6e05\u6670\uff0c \u4f8b\u5982\uff1a\u6211\u5011\u773c\u775b\u6709 5 mm \u7684\u5bec\u5ea6\u63a5\u6536\u5149\u7dda\uff0c\u4e26\u5f9e\u4e2d\u91d0\u6e05\u7269\u9ad4\u7684\u8f2a\u5ed3\u3002 \u76ee\u524d\u6b63\u5728\uff082017-\uff09\u667a\u5229\u8208\u5efa\u4e00\u500b\u4e16\u4e0a\u6700\u5927\u7684\u671b\u9060\u93e1\uff0c\u6b50\u6d32\u6975\u5927\u671b\u9060\u93e1\uff0c\u5176\u5c07\u64c1\u6709 40 m \u5927\u7684\u76f4\u5f91\u4f86\u63a5\u6536\u5149\u7dda\u3002
      • \u5149\u8b5c\uff08spectroscopy\uff09\uff0c\u5f9e\u725b\u9813\u958b\u59cb\u7814\u7a76\u5149\u7684\u6563\u5c04\u5f8c\uff0c\u6211\u5011\u767c\u73fe\u4e86\u65e5\u5149\u662f\u7531\u4e0d\u540c\u984f\u8272\u7684\u5149\u7d44\u6210\u7684\u3002 \u5982\u4eca\uff0c\u6211\u5011\u6703\u900f\u904e\u89c0\u5bdf\u5929\u6587\u7269\u9ad4\u7684\u5149\u8b5c\uff0c\u63a8\u6e2c\u8a72\u7269\u9ad4\u7684\u6eab\u5ea6\u3001\u7d44\u6210\u3001\u79fb\u52d5\u901f\u5ea6\u3002
      • \u5f71\u50cf\uff0c\u6709\u4e86\u5f71\u50cf\uff0c\u6211\u5011\u53ef\u4ee5\u5ba2\u89c0\u7684\u7d00\u9304\u9019\u4e9b\u7269\u9ad4\uff0c\u4e0d\u518d\u662f\u900f\u904e\u89c0\u5bdf\u5bb6\u7684\u53e3\u8ff0\u3001\u66f8\u5beb\u6216\u624b\u7e6a\u3002 \u9664\u6b64\u4e4b\u5916\uff0c\u6211\u5011\u4e5f\u53ef\u4ee5\u5229\u7528\u4e00\u4e9b\u5f71\u50cf\u6280\u8853\uff0c\u7372\u5f97\u4ee5\u524d\u4e0d\u77e5\u9053\u7684\u8a0a\u606f\uff0c \u4f8b\u5982\u66dd\u5149\uff0cCCD \u53ef\u4ee5\u9577\u671f\u7f6e\u65bc\u661f\u7a7a\u4e0b\uff0c\u4e26\u7d2f\u7a4d\u90a3\u4e9b\u767c\u5149\u5fae\u5f31\u7684\u661f\u9ad4\u6240\u6563\u767c\u51fa\u7684\u5149\u7dda\u3002
      • \u591a\u6ce2\u6bb5\u5929\u6587\u5b78\uff0c\u5149\u7dda\u662f\u96fb\u78c1\u6ce2\u7684\u4e00\u7a2e\u8868\u73fe\u5f62\u5f0f\uff0c \u900f\u904e\u89c0\u5bdf\u4e0d\u540c\u983b\u7387\u7684\u96fb\u78c1\u6ce2\uff0c\u6211\u5011\u7372\u5f97\u9664\u4e86\u984f\u8272\u5916\uff0c\u4ee5\u5f80\u4e0d\u77e5\u9053\u7684\u4e00\u4e9b\u8a0a\u606f\u3002 \u4e8b\u5be6\u4e0a\uff0c\u6bcf\u6b21\u6211\u5011\u767c\u660e\u4e0d\u540c\u6ce2\u9577\uff08\u4f8b\u59822008 \u5e74 NASA \u767c\u5c04\u7684\u8cbb\u7c73\u4f3d\u99ac\u5c04\u7dda\u592a\u7a7a\u671b\u9060\u93e1\uff09\u7684\u89c0\u6e2c\u624b\u6cd5\uff0c \u90fd\u6703\u5f97\u5230\u4e00\u4e9b\u5168\u65b0\u7684\u767c\u73fe\uff08\u4f8b\u5982\u4e2d\u5b50\u661f\u5674\u6d41\u548c\u8cbb\u7c73\u6c23\u6ce1\u7b49\u7b49\uff09\u3002
      • \u592a\u7a7a\u63a2\u6e2c\uff0c\u81ea\u5f9e 1960 \u5e74\u4ee3\u5f8c\uff0c\u4eba\u985e\u6709\u80fd\u529b\u5728\u9664\u4e86\u5730\u7403\u4e4b\u5916\u7684\u5730\u65b9\u9032\u884c\u89c0\u6e2c\u3002 \u5728\u5916\u592a\u7a7a\u89c0\u6e2c\u53ef\u4ee5\u907f\u514d\u5927\u6c23\u5c64\u7684\u5e72\u64fe\uff0c\u4f8b\u5982 X\u5c04\u7dda \u5c31\u7121\u6cd5\u7a7f\u900f\u5927\u6c23\u5c64\uff0c\u5fc5\u9808\u7528\u592a\u7a7a\u671b\u9060\u93e1\u3002
      • \u96fb\u5b50\u8a08\u7b97\uff0c\u900f\u904e\u524d\u8ff0\u5e7e\u9805\u7684\u6210\u679c\uff0c\u8f49\u63db\u6210\u96fb\u8166\u7684\u8cc7\u6599\u5f8c\uff0c\u5c31\u53ef\u4ee5\u9032\u884c\u4efb\u4f55\u8907\u96dc\u7684\u8a08\u7b97\u3002 \u6700\u5f8c\u5229\u7528\u8a08\u7b97\u7d50\u679c\u91cd\u65b0\u56de\u4f86\u8abf\u6574\u89c0\u6e2c\u65b9\u5f0f\u548c\u8a2d\u5b9a\uff0c\u53cd\u8986\u900f\u904e\u9019\u4e9b\u6b63\u5411\u56de\u994b\uff0c\u9054\u6210\u8d8a\u4f86\u8d8a\u7cbe\u6e96\u7684\u7d50\u679c\u3002

      \u5728\u89c0\u6e2c\u5929\u6587\u5b78\u4e0a\uff0c\u6211\u5011\u4e5f\u6709\u5f88\u591a\u56f0\u96e3\u9700\u8981\u9762\u5c0d\uff1a

      • \u8ddd\u96e2\uff0c\u6211\u5011\u89c0\u5bdf\u5230\u7684\u7269\u9ad4\u5149\u7dda\u5f37\u5ea6\u6703\u96a8\u8457\u8ddd\u96e2\u5e73\u65b9\u6210\u53cd\u6bd4\u3002 \u8209\u4f8b\u4f86\u8aaa\uff0c\u8ddd\u96e2\u6211\u5011\u6700\u8fd1\u7684\u6046\u661f \u6bd4\u9130\u661f\uff0c\u5b83\u548c\u6211\u5011\u7684\u8ddd\u96e2\u662f 270k AU\u3002 \u63db\u7b97\u4e0b\u4f86\uff0c\u6211\u5011\u5f9e\u90a3\u6536\u5230\u7684\u5149\u7dda\u6703\u6bd4\u592a\u967d\u9084\u5f31\u4e0a \\(10^{11}\\) \u500d\u3002
      • \u5927\u5c0f\uff0c\u7269\u9ad4\u5728\u89c0\u5bdf\u8005\u770b\u5230\u7684\u5927\u5c0f\u8ddf\u5be6\u969b\u5927\u5c0f\u6703\u548c\u8ddd\u96e2\u6210\u53cd\u6bd4\uff08\u6ce8\u610f\u4e0d\u662f\u5e73\u65b9\uff09\uff0c \u6211\u5011\u901a\u5e38\u7528\u89d2\u76f4\u5f91\u4f86\u8868\u793a\u7269\u9ad4\u7684\u8ddd\u96e2\u548c\u5927\u5c0f\u95dc\u4fc2\u3002 \u4e00\u500b DVD \u5927\u5c0f\u7684\u7269\u9ad4\uff0c\u5728 400 \u516c\u5c3a\u9060\u7684\u8ddd\u96e2\u7d04\u70ba 1 \u5f27\u5206\uff08arch minute\uff09\uff0c \u5728 27 \u516c\u91cc\u5916\u5247\u7d04\u70ba 1 \u5f27\u79d2\u3002 \u5929\u6587\u5b78\u88e1\u5f88\u5e38\u4f7f\u7528\u9019\u500b\u55ae\u4f4d\uff0c\u4ee5\u97cb\u4f2f\u671b\u9060\u93e1\u70ba\u4f8b\uff0c \u4ed6\u7684\u756b\u8cea\u6e05\u6670\u5ea6\u53ef\u4ee5\u62cd\u651d 0.1 \u5f27\u79d2\u7684\u7269\u9ad4\u3002
      • \u591a\u8b8a\u7684\u6ce2\u9577\uff0c\u4e0d\u540c\u6eab\u5ea6\u91cb\u653e\u7684\u6ce2\u9577\u4e0d\u540c\uff08\u6a5f\u7387\u5206\u4f48\u4e0a\u7684\u9ad8\u5cf0\uff09\uff0c \u6eab\u5ea6\u8d8a\u9ad8\u6ce2\u9577\u8d8a\u77ed\u3001\u983b\u7387\u8d8a\u9ad8\uff08\u4f46\u4e0d\u662f\u7dda\u6027\u7684\uff09\u3002 \u9019\u5c31\u4ee3\u8868\u6211\u5011\u9700\u8981\u8a2d\u8a08\u5f88\u591a\u4e0d\u540c\u5100\u5668\uff0c\u7528\u4f86\u89c0\u6e2c\u4e0d\u540c\u6ce2\u9577\u7684\u96fb\u78c1\u6ce2\u3002
      • \u6578\u91cf\uff0c\u5929\u9ad4\u6578\u91cf\u592a\u591a\u4e86\uff0c\u5982\u679c\u6211\u5011\u8981\u628a\u5b83\u5b58\u9032\u8cc7\u6599\u5eab\u4e2d\uff0c\u9019\u4ee3\u8868\u6211\u5011\u9700\u8981\u70ba\u5176\u8a2d\u8a08\u4e00\u4e9b\u7279\u6b8a\u7684\u8cc7\u6599\u5eab\u3002 \u9664\u6b64\u4e4b\u5916\uff0c\u5728\u505a\u4efb\u4f55\u7d71\u8a08\u548c\u8a08\u7b97\u6642\uff0c\u4e5f\u6703\u9762\u81e8\u8a08\u7b97\u80fd\u529b\u7684\u554f\u984c\u3002
      • \u6642\u9593\uff0c\u5929\u9ad4\u8b8a\u7570\u7684\u901f\u5ea6\u901a\u5e38\u5f88\u6162\uff0c\u6211\u5011\u5982\u4f55\u5728\u77ed\u77ed\u6578\u5e74\u9593\u5c31\u66b8\u89e3\u4e26\u9a57\u8b49\u5929\u9ad4\u5728\u5404\u500b\u968e\u6bb5\u7684\u8b8a\u7570\uff1f \u4f8b\u5982\uff1a\u592a\u967d\u71c3\u71d2\u6b86\u76e1\u9700\u8981\u6578\u5341\u5104\u5e74\u3002 \u4e5f\u6709\u4e00\u4e9b\u5929\u6587\u73fe\u8c61\u662f\u5feb\u901f\u7684\uff0c\u4f8b\u5982\u8d85\u65b0\u661f\u7684\u80fd\u91cf\u91cb\u653e\u53ef\u80fd\u53ea\u8981\u6578\u6708\u751a\u81f3\u6578\u5929\u3001 \u4e00\u500b\u5de8\u77f3\u5728\u7838\u5411\u5730\u7403\u524d\uff0c\u53ef\u80fd\u53ea\u9700\u8981\u6578\u5c0f\u6642\u7684\u6642\u9593\u5c31\u53ef\u4ee5\u767c\u751f\u5287\u70c8\u7684\u79fb\u52d5\u8b8a\u5316\u3002
      "},{"location":"feedback/physics/astronomy/#\u671b\u9060\u93e1","title":"\u671b\u9060\u93e1","text":"

      \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

      • \u4eae\u5ea6\uff0c\u8981\u80fd\u5075\u6e2c\u4e26\u6574\u5408\u6700\u5fae\u5c0f\u7684\u5149\u6e90\u3002
      • \u92b3\u5229\u5ea6\uff0c\u6bcf\u500b\u661f\u9ad4\u8981\u548c\u5176\u4ed6\u661f\u9ad4\u5340\u5206\u958b\u4f86\u3002
      • \u591a\u500b\u6ce2\u6bb5\uff0c\u4e0d\u53ea\u662f\u53ef\u898b\u5149\uff0c\u4e5f\u5e0c\u671b\u6709\u5176\u4ed6\u6ce2\u6bb5\u7684\u96fb\u78c1\u6ce2\u88ab\u6536\u96c6\u3002
      "},{"location":"feedback/physics/astronomy/#\u4eae\u5ea6","title":"\u4eae\u5ea6","text":"

      \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
      • \u5927\u6c23\u5e72\u64fe
      • \u671b\u773c\u93e1\u7684\u4e0d\u5b8c\u7f8e
      "},{"location":"feedback/physics/astronomy/#\u7e5e\u5c04","title":"\u7e5e\u5c04","text":"

      \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

      • \u5728\u5916\u592a\u7a7a\u5efa\u7f6e\u671b\u9060\u93e1\uff0c\u8a73\u898b\u592a\u7a7a\u671b\u9060\u93e1\u3002
      • \u8ffd\u8e64\u9019\u4e9b\u6643\u52d5\u7136\u5f8c\u900f\u904e\u8a08\u7b97\u6821\u6b63\u9019\u500b\u8aa4\u5dee\u3002 \u4f8b\u5982\u6b50\u6d32\u6975\u5927\u671b\u9060\u93e1\u5229\u7528\u6253\u51fa\u53bb\u7684\u96f7\u5c04\u4f86\u8a08\u7b97\u5927\u6c23\u6643\u52d5\u7a0b\u5ea6\uff0c\u8a73\u898b\u96fb\u8166\u3002
      "},{"location":"feedback/physics/astronomy/#\u671b\u773c\u93e1\u7684\u4e0d\u5b8c\u7f8e","title":"\u671b\u773c\u93e1\u7684\u4e0d\u5b8c\u7f8e","text":"

      \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

      • \u767c\u5c04 \u592a\u7a7a\u68ad \u7684\u8a2d\u65bd
      • \u671b\u9060\u93e1\u6240\u9700\u7684 \u80fd\u91cf
      • \u8b93\u671b\u9060\u93e1\u4fdd\u6301 \u7a69\u5b9a
      • \u9ad4\u8a8d\u5230\u81ea\u5df1\u7684 \u4f4d\u7f6e
      • \u7279\u5b9a\u4f4d\u7f6e\u907f\u514d \u8f3b\u5c04\u548c\u6eab\u5ea6\u5dee
      • \u80fd\u7834\u58de\u8a2d\u65bd\u7684 \u788e\u77f3
      • \u78ba\u4fdd \u8cc7\u6599\u50b3\u8f38 \u7684\u7a69\u5b9a
      "},{"location":"feedback/physics/astronomy/#\u592a\u7a7a\u68ad","title":"\u592a\u7a7a\u68ad","text":"

      \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

      • \u6c23\u9ad4\u5fae\u63a7\uff0c\u5c31\u50cf\u96fb\u5f71\u6f14\u7684\u90a3\u6a23\u3002
      • \u4e09\u500b\u4e0d\u540c\u65b9\u5411\u7684\u8f2a\u5708\uff0c\u900f\u904e\u8ce6\u4e88\u4e09\u500b\u8f2a\u5708\u4e0d\u540c\u7684\u8f49\u52d5\u901f\u5ea6\u4f86\u63a7\u5236\u65b9\u5411\u3002
      • \u5229\u7528\u671b\u9060\u93e1\u5167\u7684\u7dda\u5708\uff0c\u88fd\u9020\u51fa\u78c1\u529b\uff0c\u4e26\u8a66\u8457\u548c\u5730\u78c1\u4ea4\u932f\uff08\u6216\u5e73\u884c\uff09\u4f86\u7522\u751f\u78c1\u529b\u77e9\u4e26\u63a7\u5236\u65b9\u5411\u3002
      "},{"location":"feedback/physics/astronomy/#\u4f4d\u7f6e","title":"\u4f4d\u7f6e","text":"

      \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\u5e73\u7dda\u89c0\u6e2c\u5668\uff0c\u89c0\u770b\u5730\u7403\u4f4d\u7f6e\u4f86\u5f97\u77e5\u81ea\u5df1\u7684\u4f4d\u7f6e
      • \u592a\u967d\u611f\u6e2c\u5668\uff0c\u89c0\u770b\u592a\u967d\u4f4d\u7f6e\u4f86\u5f97\u77e5\u81ea\u5df1\u7684\u4f4d\u7f6e
      • \u9640\u87ba\u5100
      • \u661f\u9ad4\u8ffd\u8e64\u5668\uff0c\u984d\u5916\u4e00\u500b\u76f8\u6a5f\u53bb\u78ba\u8a8d\u548c\u8fa8\u8b58\u76ee\u6a19\u7684\u4f4d\u7f6e\u3002 \u9019\u76f8\u5c0d\u65bc\u5176\u4ed6\u65b9\u6cd5\u6703\u6bd4\u8f03\u7cbe\u6e96\u4f46\u6bd4\u8f03\u8cb4\u3002
      "},{"location":"feedback/physics/astronomy/#\u8f3b\u5c04\u548c\u6eab\u5ea6\u5dee","title":"\u8f3b\u5c04\u548c\u6eab\u5ea6\u5dee","text":"

      \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

      • MS22 \u806f\u76df\u865f\u98db\u8239\u88ab\u5fae\u6d41\u661f\u6253\u51fa\u7834\u6d1e
      "},{"location":"feedback/physics/astronomy/#\u8cc7\u6599\u50b3\u8f38","title":"\u8cc7\u6599\u50b3\u8f38","text":"

      \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

      • \u5927\u6c23\u5c64\u6703\u963b\u64cb\u7279\u5b9a\u5c04\u7dda\u3002
      • \u5e72\u64fe\uff08distort\uff09\u5149\u7dda\uff0c\u56e0\u70ba\u5927\u6c23\u5c64\u7684\u5bc6\u5ea6\u4e0d\u540c\uff0c\u5c31\u50cf\u5149\u5f9e\u7a7a\u6c23\u9032\u5165\u6c34\u6703\u6298\u5c04\u4e00\u6a23\uff0c\u6240\u4ee5\u5149\u6703\u5728\u5927\u6c23\u5c64\u4e2d\u6296\u52d5\u3002
      • \u5730\u8868\u5149\u6e90\uff0c\u4f8b\u5982\u6708\u5149\u3001\u71c8\u5149\u3002 \u5c31\u7b97\u5230\u4e86\u6714\u591c\uff0c\u4ecd\u7136\u6703\u56e0\u70ba\u5728\u5730\u7403\u53e6\u4e00\u908a\u592a\u967d\u900f\u904e\u5927\u6c23\u5c64\u6298\u5c04\u7684\u5fae\u5f31\u5149\u6e90\u3002
      \u5730\u7403\u5404\u7a2e\u8f3b\u5c04\u5e36\u3001\u7279\u6b8a\u9ede\u7684\u6bd4\u4f8b\u5716

      \u53f3\u908a\u7684\u5716\u53ef\u4ee5\u770b\u5230\uff1a

      1. \u6700\u9760\u8fd1\u4e2d\u5fc3\uff08\u5730\u7403\uff09\u7684\u5713\u5708\u7a31\u70ba \u4f4e\u8ecc\u9053\uff0c\u901a\u5e38\u904b\u884c\u5c0d\u5730\u885b\u661f\u3002\u7d04\u70ba 1.05~1.1 \u500b \\(R_e\\)\uff08\u5730\u7403\u534a\u5f91\uff09
      2. \u8cea\u5b50\u5e45\u5c04\u5e36\uff08proton radiation orbit\uff09\uff0c\u7d04\u70ba 1.5 \u500b \\(R_e\\)
      3. \u96fb\u5b50\u8f3b\u5c04\u5e36\uff08electron radiation orbit\uff09\uff0c\u7d04\u70ba 4 \u500b \\(R_e\\)
      4. \u5730\u7403\u975c\u6b62\u8ecc\u9053\uff08Geostationary orbit\uff09\uff0c\u7d04\u70ba 6.54 \u500b \\(R_e\\)
      5. \u78c1\u5c64\uff08magnetosphere\uff09\uff0c\u5728\u9019\u81e8\u754c\u9ede\u592a\u7a7a\u4e2d\u5e36\u96fb\u7684\u7c92\u5b50\u5b50\u53d7\u5230\u5730\u7403\u78c1\u529b\u5f71\u97ff\u7684\u7a0b\u5ea6\u6703\u5927\u65bc\u592a\u7a7a\u4e4b\u5916\uff0c \u7d04\u70ba 10 \u500b \\(R_e\\)

      \u63a5\u8457\u770b\u5de6\u908a\u7684\u5716\uff1a

      1. \u6708\u7403\u7e5e\u884c \u7d04\u70ba 61 \u500b \\(R_e\\)
      2. \u62c9\u683c\u6717\u65e5\u9ede \uff08L2\uff09\u7d04\u70ba 236 \u500b \\(R_e\\)
      3. \u592a\u967d\u7d04\u70ba 23,000 \u500b \\(R_e\\)
      "},{"location":"feedback/physics/astronomy/#\u661f\u9ad4","title":"\u661f\u9ad4","text":"

      \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

      • \u5ba2\u89c0\u5730\u7d00\u9304\u7269\u9ad4\u3002
      • \u628a\u7d00\u9304\u7d50\u679c\u6578\u4f4d\u5316\u3002
      • \u6574\u5408\u7d50\u679c\uff0c\u4f8b\u5982\u66dd\u5149\u3002
      • \u53ef\u4ee5\u611f\u6e2c\u9664\u4e86\u53ef\u898b\u5149\u4e4b\u5916\u7684\u96fb\u78c1\u6ce2\u3002
      \u6574\u5408\u7d50\u679c\u7684\u4f8b\u5b50

      \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

      • \u53ef\u4ee5\u76f4\u63a5\u5132\u5b58\u3001\u904b\u7b97\u6578\u4f4d\u5316\u7684\u611f\u6e2c\u7d50\u679c\u3002
      • \u53ef\u4ee5\u63a7\u5236\u671b\u9060\u93e1\uff0c\u9032\u884c\u6821\u6e96\u3002
      • \u53ef\u4ee5\u9032\u884c\u8907\u96dc\u4e14\u7cbe\u5bc6\u7684\u8a08\u7b97\u3002 \u4f8b\u5982\u6211\u5011\u53ef\u4ee5\u300c\u88fd\u9020\u300d\u51fa\u6578\u5341\u5104\u500b\u5047\u7684\u661f\u9ad4\uff0c\u4e26\u6a21\u64ec\u5176\u78b0\u649e\u3001\u4e92\u52d5\u7b49\u7b49\u7684\u6a5f\u5236\uff0c\u4f86\u9a57\u8b49\u5404\u7a2e\u5047\u8aaa\u3002
      • \u53ef\u4ee5\u900f\u904e\u7db2\u8def\u5feb\u901f\u548c\u4ed6\u4eba\u4e92\u52d5\u3002\u4e16\u754c\u5404\u5730\u90fd\u6709\u5929\u6587\u5b78\u5bb6\u628a\u81ea\u5df1\u7684\u7814\u7a76\u7d50\u679c\u5b58\u4e0b\u4f86\uff0c \u900f\u904e\u7db2\u8def\uff0c\u6211\u5011\u53ef\u4ee5\u5feb\u901f\u628a\u81ea\u5df1\u7684\u7d50\u679c\uff08\u4f8b\u5982 X\u5c04\u7dda \u7684\u66dd\u5149\u7d50\u679c\uff09\u548c\u5225\u4eba\u7684\u7d50\u679c\uff08\u4f8b\u5982\u7d05\u5916\u7dda\u7684\u66dd\u5149\u7d50\u679c\uff09\u9032\u884c\u6bd4\u5c0d\u3002

      \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

      • \u6eab\u5ea6\uff0c\u8a72\u661f\u9ad4\u7684\u6eab\u5ea6\u662f\u591a\u5c11\uff1f
      • \u7d44\u6210\uff0c\u8a72\u661f\u9ad4\u900f\u904e\u54ea\u4e9b\u6210\u5206\u7d44\u6210\uff1f
      • \u901f\u5ea6\uff0c\u79fb\u52d5\u7684\u901f\u5ea6\u548c\u65b9\u5411\u3002
      "},{"location":"feedback/physics/astronomy/#\u6eab\u5ea6","title":"\u6eab\u5ea6","text":"

      \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

      • \u4e00\u500b\u5f9e \u53cd\u5c04\u93e1 \u532f\u805a\u800c\u6210\u7684\u5149\u6e90\u3002
      • \u6e96\u76f4\u5100 \u628a\u5149\u7dda\u8b8a\u6210\u5e73\u884c\u7684\u3002
      • \u5149\u67f5 \u628a\u5149\u7dda\u6253\u6563\uff0c\u8b93\u7279\u5b9a\u6ce2\u9577\u7684\u96fb\u78c1\u6ce2\u805a\u7126\u65bc\u67d0\u8655\u3002
      • CCD \u4f86\u5132\u5b58\u9019\u4e9b\u96fb\u78c1\u6ce2\u3002

      "},{"location":"feedback/physics/astronomy/#\u5176\u4ed6\u8981\u89e3\u6c7a\u7684\u56f0\u96e3","title":"\u5176\u4ed6\u8981\u89e3\u6c7a\u7684\u56f0\u96e3","text":"

      \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

      • \u63a2\u7d22\u6728\u661f\u6eab\u5ea6\u8b8a\u5316\u7684\u9031\u671f\u6027
      • \u8cbb\u7c73\u6c23\u6ce1\u7684\u53ef\u80fd\u6210\u56e0
      • \u91cd\u529b\u6ce2
      • \u9ed1\u6d1e\u7684\u91cd\u8907\u6f6e\u6c50\u7834\u58de\u4e8b\u4ef6
      • \u985e\u5730\u884c\u661f\u548c\u76f8\u4f3c\u885b\u661f\u7684\u5f62\u6210\u539f\u56e0\u63a8\u6e2c
      • \u7279\u6b8a\u8d85\u65b0\u661f Pa 30 \uff08\u4f60\u53ef\u4ee5\u5728\u672c\u7bc7\u770b\u5230\u5f88\u591a\u672c\u6587\u63d0\u5230\u95dc\u65bc\u8d85\u65b0\u661f\u7684\u5167\u5bb9\uff09
      • \u80fd\u5f62\u6210\u5343\u65b0\u661f\u7684\u96d9\u661f\u7cfb\u7d71
      • \u524d\u9762\u90fd\u662f\u5229\u7528\u725b\u9813\u529b\u5b78\u6e2c\u5f97\u661f\u9ad4\u8cea\u91cf\uff0c\u4f60\u4e5f\u53ef\u4ee5\u4f7f\u7528\u91cd\u529b\u5fae\u900f\u93e1\u5f97\u5230\u7cbe\u6e96\u8cea\u91cf\u3002
      • \u6697\u7269\u8cea\u4f86\u6e90\u65bc\u9ed1\u6d1e\uff1f
      • \u5b87\u5b99\u6700\u65e9\u671f\u7684\u6046\u661f\u53ef\u80fd\u7684\u8a95\u751f\u539f\u7406
      • \u5b87\u5b99\u9593\u6700\u5927\u5c3a\u5ea6\u78c1\u5834\u2500\u2500\u300c\u5b87\u5b99\u7db2\u78c1\u5834\u300d
      • \u5feb\u901f\u96fb\u6ce2\u7206\u767c\uff08frb\uff09\u6beb\u79d2\u5167\u7522\u751f\u7684\u80fd\u91cf\u76f8\u7576\u65bc\u592a\u967d\u5e74\u8f38\u51fa\u91cf
      • \u5b87\u5b99\u6700\u53e4\u8001\u9ed1\u6d1e
      • \u4f7f\u7528\u4f4e\u8ecc\u885b\u661f\u63a2\u6e2c\u7121\u7dda\u96fb\u6ce2\uff0c\u6210\u5c31\u592a\u7a7a\u671b\u9060\u93e1\u7684\u65b0\u7bc7\u7ae0
      "},{"location":"feedback/physics/special-relativity/","title":"\u72f9\u7fa9\u76f8\u5c0d\u8ad6","text":"

      \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\u662f\u5c6c\u65bc\u540c\u4e00\u500b\u5834\u57df\uff0c\u4e5f\u5c31\u662f\u8aaa\u6642\u7a7a\u3002
      • \u300c\u76f8\u5c0d\u300d\u9019\u6982\u5ff5\u8cab\u7a7f\u6574\u500b\u76f8\u5c0d\u8ad6

      \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\uff08\u50b3\u7d71\u4e0a\u662f\u7522\u54c1\u958b\u767c\u5718\u968a\u8ca0\u8cac\uff09\u662f\u53ef\u7528\u6027\uff08\u50b3\u7d71\u4e0a\u662f\u7dad\u904b\u5718\u968a\u8ca0\u8cac\uff09\uff0c \u800c\u9019\u500b\u529f\u80fd\u904d\u53ca\u6240\u6709\u7dda\u4e0a\u7522\u54c1\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

      • \u52de\u52d5\u529b\uff0c\u5148\u53bb\u8fa8\u8b58\u52de\u52d5\u529b\uff0c\u7136\u5f8c\u9032\u884c\u6307\u6a19\uff0c\u6700\u5f8c\u6e1b\u4f4e\u52de\u52d5\u529b\u3002
      • \u8655\u7406\u820a\u6709\u7cfb\u7d71\uff0c\u900f\u904e\u64f1\u7f6e\u3001\u5305\u88dd\u3001\u64f4\u5145\u3001\u66ff\u63db\u3001\u64a4\u9664\u3001\u8a17\u7ba1\u53bb\u8655\u7406\u3002
      • \u7c21\u5316\u7cfb\u7d71\uff0c\u900f\u904e\u8fa8\u8b58\u3001\u9810\u9632\u548c\u8655\u7406\u4f86\u7c21\u5316\u7cfb\u7d71\u591a\u500b\u9762\u5411\u3002
      • \u5f85\u547d\u5c0f\u7d44\uff0c\u5206\u914d on-call \u6b0a\u8cac\u3001\u5de5\u6642\u7684\u8f2a\u66ff\uff0c\u81ea\u52d5\u5316\u7684\u5fc5\u8981\u3002
      • \u707d\u96e3\u7ba1\u7406\uff0c\u7dca\u6025\u4e8b\u4ef6\u6642\u7684\u8cac\u4efb\u5283\u5206\uff0c\u4e26\u4e14\u5e38\u614b\u4e14\u5be6\u969b\u7684\u8a13\u7df4\u3002
      • \u4e8b\u5f8c\u6790\u8aa4\u6587\u5316\uff0c\u5982\u4f55\u8b93\u4f01\u696d\u5728\u707d\u96e3\u767c\u751f\u5f8c\uff0c\u5b78\u7fd2\u5230\u6700\u591a\uff1f
      • \u8ca0\u8f09\u7ba1\u7406\uff0c\u597d\u7684\u8ca0\u8f09\u7ba1\u7406\u6a5f\u5236\u901a\u5e38\u662f\u8907\u5408\u578b\u7684\uff0c\u4f46\u5efa\u69cb\u5f8c\uff0c\u53c8\u6709\u54ea\u4e9b\u7dad\u904b\u4e0a\u7684\u5efa\u8b70\u5462\uff1f
      • \u975e\u62bd\u8c61\u5927\u578b\u7cfb\u7d71\u8a2d\u8a08\uff0c\u8b93\u958b\u767c\u8005\u8a2d\u8a08\u7cfb\u7d71\u67b6\u69cb\u6642\u80fd\u6709\u500b\u4f9d\u64da\u53bb\u5efa\u7acb\u7a69\u5065\u800c\u53c8\u9ad8\u64f4\u5145\u7684\u7cfb\u7d71\u3002
      • \u8cc7\u6599\u7ba1\u7dda\u8a2d\u8a08\uff0c\u8cc7\u6599\u7ba1\u7dda\u5e6b\u52a9\u6574\u5408\u8cc7\u6599\uff0c\u5176\u8a2d\u8a08\u548c\u7dda\u4e0a\u7cfb\u7d71\u6709\u7570\u66f2\u540c\u5de5\u4e4b\u5999\u3002
      • \u8a2d\u5b9a\u6a94\u7684\u6700\u4f73\u5be6\u8e10\uff0c\u597d\u7684\u670d\u52d9\u8a2d\u5b9a\u65b9\u5f0f\uff0c\u6703\u6e1b\u5c11\u7dca\u6025\u60c5\u6cc1\u7684\u767c\u751f\u3002
      • \u91d1\u7d72\u96c0\u90e8\u7f72\uff0c\u90e8\u7f72\u5de5\u7a0b\u4e5f\u662f\u78ba\u4fdd\u670d\u52d9\u7a69\u5b9a\u7684\u91cd\u8981\u5de5\u5177\u3002
      \u4ec0\u9ebc\u662f\u7dad\u904b

      \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

      • \u670d\u52d9\u6d41\u91cf\u4e0a\u5347\u4e86\uff0c\u5f9e\u4e00\u53f0\u8b8a\u6210\u5169\u53f0\u4e4b\u5f8c\uff0c\u6211\u8981\u600e\u9ebc\u77e5\u9053\u6d41\u91cf\u7e3d\u91cf\uff0c500 \u7684\u6bd4\u4f8b\u7b49\u7b49\uff1b
      • \u5916\u90e8\u4f9d\u8cf4\u5f9e\u76f8\u540c\u8cc7\u6599\u4e2d\u5fc3\uff0c\u642c\u9077\u5230\u96f2\u7aef\uff0c\u89c0\u5bdf\u5230\u7684 P99 \u6f5b\u6642\u62c9\u9ad8\u4e86\uff0c\u8a72\u600e\u9ebc\u8655\u7406\uff1b
      • \u6bcf\u5929\u56fa\u5b9a\u67d0\u4e00\u6642\u6bb5\uff0c500 \u6bd4\u4f8b\u6703\u5347\u9ad8\uff0c\u6211\u8a72\u600e\u9ebc\u8ffd\u8e64\u554f\u984c\uff1f

      \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

      • \u53ef\u8b80\u6027\u7684\u539f\u5247\u5c31\u662f\u8a2d\u8a08\u6642\uff0c\u628a\u76ee\u7684\u548c\u5be6\u4f5c\u7d30\u7bc0\u5340\u5206\u958b\u4f86\u3002
      • \u5b89\u5168\u6027\u7684\u539f\u5247\u5c31\u662f\u8981\u7559\u9000\u8def\u7d66\u81ea\u5df1\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

      • \u78ba\u4fdd\u547d\u4ee4\u7684\u55ae\u4e00\u6027\uff0c\u4e00\u500b\u4eba\u4e0d\u6703\u807d\u547d\u65bc A \u53c8\u540c\u6642\u807d\u547d\u65bc B\uff1b
      • \u5206\u914d\u597d\u5404\u500b\u89d2\u8272\uff08\u5305\u542b CL \u548c OL\uff09\u4e14\u89d2\u8272\u529f\u80fd\u5b9a\u7fa9\u660e\u78ba\uff0c\u4e26\u9810\u8a2d\u6240\u6709\u89d2\u8272\u9084\u672a\u6307\u6d3e\uff1b
      • \u6240\u505a\u7684\u6240\u6709\u4e8b\u60c5\u90fd\u505a\u597d\u8a18\u9304\uff0c\u5305\u62ec\u9664\u932f\u3001\u4ecb\u5165\u884c\u70ba\u7b49\u7b49\uff08\u5e6b\u52a9\u672a\u4f86\u601d\u8003\u53ef\u512a\u5316\u7684\u9805\u76ee\uff09\uff1b
      • \u5118\u65e9\u4e26\u5b9a\u671f\u7684\u5ba3\u544a\u4e8b\u4ef6\u72c0\u6cc1\uff0c\u4e26\u78ba\u4fdd\u6e9d\u901a\u7ba1\u9053\u7684\u66a2\u901a\u3002

      \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

      • \u7d71\u4e00\u7684\u5c0d\u5916\u7a97\u53e3\uff0c\u56de\u7b54\u6240\u6709\u95dc\u5207\u6027\u554f\u984c\uff1b
      • \u5b9a\u671f\u6574\u7406\u4e26\u532f\u5831\u4e8b\u4ef6\u7d66\u9ad8\u5c64\u3001\u5168\u516c\u53f8\u7b49\u7b49\u3002

      OL \u5247\u662f\u5c08\u6ce8\u5728\uff1a

      • \u554f\u984c\u7684\u67e5\u627e\uff1b
      • \u6025\u6551\u65b9\u6848\u7684\u5224\u5b9a\uff1b
      • \u5354\u52a9\u627e\u51fa\u6839\u6cbb\u7684\u65b9\u6cd5\u3002
      "},{"location":"feedback/site-reliability-workbook/incident-response/#\u5118\u65e9\u5ba3\u544a\u4e8b\u4ef6","title":"\u5118\u65e9\u5ba3\u544a\u4e8b\u4ef6","text":"

      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

      • \u6e9d\u901a\u58c1\u58d8\uff0c\u7f3a\u9677\u8ffd\u8e64\u7cfb\u7d71\uff08e.g. JIRA\uff09\u4e26\u4e0d\u662f\u826f\u597d\u7684\u6e9d\u901a\u6a4b\u6a11\uff1b
      • \u4e0d\u540c\u89d2\u5ea6\u7684\u770b\u5f85\u4e8b\u60c5\uff0c\u6703\u52a0\u901f\u932f\u8aa4\u7684\u6392\u67e5\uff1b
      • \u8b93\u4e0d\u540c\u90e8\u9580\u7684\u540c\u4ec1\u9762\u5c0d\u7dda\u4e0a\u932f\u8aa4\u6709\u9032\u4e00\u6b65\u7684\u5fc3\u7406\u6e96\u5099\u3002

      \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

      • GKE \u53e2\u96c6\u5728\u5efa\u7acb\u6642\uff0c\u5176\u4ed6\u7bc0\u9ede\u5617\u8a66\u8a3b\u518a\u8fd1\u4e3b\u63a7\u53f0\u6642\u6703\u5931\u6557\uff1b
      • \u932f\u8aa4\u8a0a\u606f\u544a\u77e5\u6191\u8b49\u7c3d\u767c\u7684\u6a5f\u5236\u6709\u932f\uff1b
      • \u6240\u6709\u5728\u6b50\u6d32\u5730\u5340\u7684\u53e2\u96c6\u90fd\u6703\u5efa\u7acb\u5931\u6557\uff0c\u5176\u4ed6\u5247\u5730\u5340\u5247\u7121\uff1b
      • \u6c92\u6709\u5176\u4ed6 GCP \u670d\u52d9\u6709\u4efb\u4f55\u7db2\u8def\u548c\u9650\u6d41\u7684\u554f\u984c\u3002

      \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

      "},{"location":"feedback/site-reliability-workbook/incident-response/#gke-\u7121\u6cd5\u5efa\u5236\u65b0\u53e2\u96c6\u7684\u4e8b\u5f8c\u5206\u6790","title":"GKE \u7121\u6cd5\u5efa\u5236\u65b0\u53e2\u96c6\u7684\u4e8b\u5f8c\u5206\u6790","text":"

      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

      • \u767c\u73fe\u4e26\u8457\u624b\u8655\u7406\u4e8b\u4ef6\uff1b
      • \u9032\u884c\u6025\u6551\u8655\u7406\uff1b
      • \u6839\u56e0\u7684\u67e5\u627e\uff1b
      • \u89e3\u6c7a\u6839\u56e0\u4e26\u64b0\u5beb\u4e8b\u5f8c\u6790\u8aa4\u6587\u4ef6\u3002
      "},{"location":"feedback/site-reliability-workbook/incident-response/#\u8f15\u91cd\u7de9\u6025\u7684\u5224\u5b9a","title":"\u8f15\u91cd\u7de9\u6025\u7684\u5224\u5b9a","text":"

      \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

      • \u6bcf\u500b\u6709\u548c\u5931\u80fd\u78c1\u789f\u639b\u52fe\u7684\u904b\u7b97\u4e3b\u6a5f\u90fd\u9700\u8981\u91cd\u555f\uff1b
      • \u5728\u7b49\u5f85\u91cd\u555f\u524d\uff0c\u8b80\u5beb\u7684\u932f\u8aa4\u6703\u4e00\u76f4\u767c\u751f\uff1b
      • \u5982\u679c\u8a72\u904b\u7b97\u4e3b\u6a5f\u88e1\u9762\u6709\u5ba2\u6236\u6b63\u5728\u4f7f\u7528\u7684 VM\uff0c\u5c31\u9700\u8981\u5148\u5c07\u5176\u300c\u642c\u9077\u300d\u4e4b\u5176\u4ed6\u4e3b\u6a5f\u3002

      \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

      • \u7df4\u7fd2\u7dca\u6025\u4e8b\u4ef6\u8655\u7406\uff0c \u6bcf\u9031\u4e94 PagerDuty \u6703\u5728\u7dda\u4e0a\u74b0\u5883\uff08\u4f46\u53ef\u63a7\u7684\u7bc4\u570d\u5167\uff09\u5be6\u73fe\u4e00\u4e9b\u932f\u8aa4\u72c0\u6cc1\uff0c\u8b93\u5de5\u7a0b\u7df4\u7fd2\u4e8b\u4ef6\u7684\u8655\u7406\u3002 \u5728\u9019\u904e\u7a0b\u4e2d\uff0c\u6703\u8f2a\u66ff\u6307\u63ee\u5b98\uff08IC\uff09\uff0c\u9019\u4e9b\u904e\u7a0b\u90fd\u53ef\u4ee5\u5e6b\u52a9\u65b0\u4eba\u9032\u5165\u72c0\u6cc1\uff0c \u540c\u6642\u4e5f\u80fd\u52a0\u901f\u5f85\u547d\u4eba\u54e1\u7684\u63db\u8840\uff08\u5b9a\u671f\u8f2a\u66ff\u5f85\u547d\u4eba\u54e1\u53ef\u4ee5\u8212\u7de9\u5de5\u4f5c\u58d3\u529b\uff09\u3002
      • \u90e8\u5206\u7df4\u7fd2\u9650\u5236\u8655\u7406\u6642\u9593\uff0c \u7df4\u7fd2\u6c92\u8fa6\u6cd5\u5b8c\u5168\u6a21\u64ec\u771f\u5be6\u72c0\u6cc1\uff0c\u4f46\u662f\u900f\u904e\u6642\u9650\u4f86\u589e\u52a0\u5be6\u969b\u72c0\u6cc1\u7684\u7dca\u5f35\u611f\u3002
      • \u5f9e\u6b77\u53f2\u4e2d\u5b78\u7fd2\uff0c\u7576\u7136\uff0c\u9019\u500b\u524d\u63d0\u662f\u4ee5\u524d\u7684\u4e8b\u4ef6\u90fd\u6709\u88ab\u597d\u597d\u7d00\u9304\uff08\u5305\u62ec\u8a0a\u606f\u548c\u901a\u8a71\uff09\u3002 \u5728\u7df4\u7fd2\u7684\u904e\u7a0b\u4e2d\u6709\u5e7e\u500b\u65b9\u5411\uff1a\u5982\u4f55\u52a0\u901f\u7dca\u6025\u8655\u7f6e\u65b9\u6848\u7684\u5be6\u73fe\u3001\u5982\u4f55\u907f\u514d\u707d\u96e3\u3002

      \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

      • \u5f85\u547d\u4eba\u54e1\u6307\u6d3e\u76f8\u95dc\u4eba\u54e1\u548c\u5347\u7d1a\u4e8b\u4ef6\uff1b
      • \u512a\u5148\u5be6\u65bd\u7dca\u6025\u8655\u7f6e\uff1b
      • IC\u3001CL \u548c OL \u7684\u6307\u6d3e\u3002

      \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

      • \u958b\u59cb\u8f49\u79fb\u6642\u767c\u73fe\u6240\u6709\u8f49\u79fb\u90fd\u9700\u8981\u5148\u548c\u4f86\u6e90\u7aef\uff08\u5c31\u662f\u88ab\u65b7\u7db2\u7684\u8fa6\u516c\u5ba4\uff09\u9032\u884c\u6e9d\u901a\uff1b
      • \u9032\u884c\u5176\u4ed6\u64cd\u4f5c\u6642\uff0c\u56e0\u70ba\u9a57\u8b49\u7cfb\u7d71\u7684\u4f9d\u8cf4\u4e2d\u65b7\uff0c\u5c0e\u81f4\u5931\u6548\uff1b
      • \u5167\u90e8\u696d\u52d9\u529f\u80fd\u7684\u5be9\u6279\u8ffd\u8e64\u7cfb\u7d71\u5c31\u5efa\u7f6e\u65bc\u8a72\u8fa6\u516c\u53f8\uff1b
      • \u7576\u5de5\u7a0b\u5e2b\u653e\u68c4\u6e96\u5099\u53bb\u5403\u665a\u9910\u6642\uff0c\u5496\u5561\u5ef3\u88ab DoS \u653b\u64ca\u3002

      \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/legacy-system/","title":"\u8655\u7406\u820a\u6709\u7cfb\u7d71","text":"

      \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

      • \u9019\u500b\u7cfb\u7d71\u5f9e\u65e9\u671f\u4fbf\u5b58\u5728\uff1b
      • \u548c\u5f88\u591a\u65e2\u6709\u7684\u7cfb\u7d71\u6709\u96b1\u6666\u7684\u806f\u7e6b\uff1b
      • \u662f\u500b\u5728\u5546\u52d9\u908f\u8f2f\u4e2d\u4e0d\u91cd\u8981\u7684\u7cfb\u7d71\uff1b
      • \u9577\u671f\u7a69\u5b9a\u7684\u904b\u884c\uff0c\u6c92\u6709\u767c\u751f\u904e\u4ec0\u9ebc\u6703\u5c0e\u81f4\u591a\u7cfb\u7d71\u5d29\u6f70\u7684\u60c5\u6cc1\u3002

      \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\u901a\u5e38\u6703\u6709\u4e94\u500b\u65b9\u6cd5\u3002 \u9019\u4e9b\u65b9\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

      • \u64f1\u7f6e\uff08Avoidance\uff09
      • \u5305\u88dd\uff08Encapsulation\uff09
      • \u64f4\u5145\uff08Augmentation\uff09
      • \u66ff\u63db\u3001\u64a4\u9664\uff08Replacement\u3001Retirement\uff09
      • \u8a17\u7ba1\uff08Custodian\uff09
      "},{"location":"feedback/site-reliability-workbook/legacy-system/#\u64f1\u7f6e","title":"\u64f1\u7f6e","text":"

      \u4e00\u500b\u6700\u7701\u529b\u7684\u65b9\u6cd5\uff0c\u64f1\u7f6e\uff08avoidance\uff09\u3002

      \u4f60\u8a55\u4f30\u904e\u6539\u8b8a\u5e36\u4f86\u7684\u6210\u672c\u548c\u98a8\u96aa\uff0c\u65bc\u662f\u6c7a\u5b9a\u7dad\u6301\u73fe\u72c0\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":"feedback/site-reliability-workbook/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\uff08encapsulation\uff09\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":"feedback/site-reliability-workbook/legacy-system/#\u64f4\u5145","title":"\u64f4\u5145","text":"

      \u65e2\u7136\u8981\u6539\u8b8a\u5f88\u96e3\uff0c\u90a3\u6211\u5c31\u50c5\u50c5\u64f4\u5145\uff08augmentation\uff09\u4ed6\u7684\u529f\u80fd\uff0c\u8b93\u76e1\u53ef\u80fd\u512a\u5316\u800c\u4e0d\u53bb\u7570\u52d5\u5546\u52d9\u908f\u8f2f\u3002

      \u9019\u7a2e\u624b\u6cd5\u901a\u5e38\u6703\u548c\u5305\u88dd\u4f75\u884c\u4f7f\u7528\u3002

      "},{"location":"feedback/site-reliability-workbook/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":"feedback/site-reliability-workbook/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":"feedback/site-reliability-workbook/legacy-system/#\u65b9\u6cd5\u7684\u6574\u5408","title":"\u65b9\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

      • \u6211\u5011\u610f\u8b58\u5230\u820a\u6709\u7cfb\u7d71\u7684\u6539\u52d5\u8981\u4ed8\u51fa\u5927\u91cf\u7cbe\u529b\uff0c\u65bc\u662f \u64f1\u7f6e\u3002
      • \u5f8c\u4f86\u6c7a\u8b70\u9084\u662f\u8981\u6539\uff0c\u65bc\u662f\u4f60\u5148\u628a\u820a\u6709\u7cfb\u7d71 \u5305\u88dd \u8d77\u4f86\u3002
      • \u4e26\u4e14\u914d\u5408\u4e00\u4e9b\u65b0\u7684\u898f\u7bc4\u6216\u8981\u6c42\u4f86 \u64f4\u589e\uff0c\u4f8b\u5982\u4f7f\u7528\u65b0\u7248\u7684\u5957\u4ef6\u4f86\u89e3\u6c7a CVE\u3002
      • \u9010\u6f38 \u66ff\u63db \u90e8\u5206\u529f\u80fd\uff0c\u4e26\u4f7f\u7528\u7dda\u4e0a\u8cc7\u6599\u78ba\u4fdd\u6b63\u78ba\u6027\uff0c\u6700\u5f8c\u5b8c\u6574 \u64a4\u9664 \u820a\u7684\u5be6\u4f5c\u3002
      • \u7576\u820a\u6709\u7cfb\u7d71\u5c0d\u67d0\u500b\u5718\u968a\u4ecd\u662f\u5fc5\u8981\u7684\uff0c\u5c31\u628a\u4fdd\u7ba1\u6b0a \u8a17\u7ba1 \u65bc\u5b83\u3002
      "},{"location":"feedback/site-reliability-workbook/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\u6301\u7e8c\u4e00\u5c0f\u6bb5\u4e00\u5c0f\u6bb5\u7684\u89e3\u6c7a\uff0c\u9019\u4fbf\u662f\u8655\u7406\u820a\u6709\u7cfb\u7d71\u7684\u5fc3\u6cd5\u3002

      "},{"location":"feedback/site-reliability-workbook/managing-load/","title":"\u8ca0\u8f09\u7ba1\u7406","text":"

      \u8ca0\u8f09\u5e73\u8861\uff08load balancing\uff09\u3001\u8ca0\u8f09\u524a\u6e1b\uff08load shedding\uff09\u548c\u81ea\u52d5\u64f4\u589e\uff08auto scaling\uff09\uff0c \u9019\u4e9b\u6a5f\u5236\u90fd\u53ef\u4ee5\u5e6b\u52a9\u6539\u5584\u670d\u52d9\u7684\u8ca0\u8f09\u72c0\u6cc1\uff0c\u901a\u5e38\u4e00\u500b\u5927\u578b\u670d\u52d9\u7684\u8ca0\u8f09\u7ba1\u7406\u6a5f\u5236\u5305\u542b\u9019\u4e0a\u8ff0\u4e09\u7a2e\u65b9\u5f0f\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\uff08\u81ea\u52d5\u5316\u7684\uff09\u8a2d\u7f6e\uff0c\u4e26\u7834\u58de\u53ef\u7528\u6027\u3002

      \u5728\u9019\u4e9b\u5343\u5947\u767e\u602a\u7684\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\u500b\u8ca0\u8f09\u5e73\u8861\u7684\u4e0d\u540c\u89d2\u5ea6\uff0c\u8b93\u5927\u5bb6\u80fd\u5920\u7406\u89e3\u8a2d\u8a08\u4e0a\u7684\u56f0\u5883\u548c\u5e38\u898b\u89e3\u6cd5\u3002

      • \u524d\u7aef\uff0c \u4f7f\u7528\u8005\u8d70\u5230\u8cc7\u6599\u4e2d\u5fc3\u9580\u53e3\u7684\u5e73\u8861\uff1b
      • \u8cc7\u6599\u4e2d\u5fc3\u88e1\u9762\uff0c \u5728\u53ef\u63a7\u7bc4\u570d\u5167\u7684\u7ba1\u7406\u548c\u8a2d\u8a08\u3002
      "},{"location":"feedback/site-reliability-workbook/managing-load/#google-cloud-load-balancing","title":"Google Cloud Load Balancing","text":"

      \u7b2c\u4e00\u6bb5\u5148\u900f\u904e Google \u96f2\u7aef\u7684\u8ca0\u8f09\u5e73\u8861\u6a5f\u5236\uff08GCLB\uff09\uff0c\u4f86\u63d0\u51fa\u5e7e\u500b\u5efa\u8b70\u7684\u6a21\u5f0f\u4f9b\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\u90fd\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\u9019\u9700\u8981\u628a\u4f7f\u7528\u8005\u7684 IP \u4fdd\u7559\u4e0b\u4f86\uff0c\u800c\u4e14\u7576\u8cc7\u6599\u4e2d\u5fc3\u5931\u80fd\u6642\uff0c\u8981\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\u3002

      \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\u900f\u904e BGP \u767c\u9001\u81ea\u5df1\u7684\u8cc7\u8a0a\u7d66\u7db2\u8def\u4e16\u754c\u3002

      \u4f46\u9019\u4ecd\u6703\u6709\u5e7e\u500b\u554f\u984c\uff1a

      • \u55ae\u4e00\u7684\u8cc7\u6599\u4e2d\u5fc3\u4ecd\u53ef\u80fd\u88ab\u9644\u8fd1\u7684\u4f7f\u7528\u8005\u6c96\u57ae
      • \u4f7f\u7528\u8005\u53ef\u80fd\u6703\u56e0\u70ba\u5207\u63db\u8def\u7531\u8def\u5f91\u800c\u65b7\u958b\u9023\u7dda
      "},{"location":"feedback/site-reliability-workbook/managing-load/#\u8de8\u8cc7\u6599\u4e2d\u5fc3\u6642\u78ba\u4fdd\u9023\u7dda\u7684\u7dad\u6301","title":"\u8de8\u8cc7\u6599\u4e2d\u5fc3\u6642\u78ba\u4fdd\u9023\u7dda\u7684\u7dad\u6301","text":"

      \u70ba\u4e86\u8b93\u4f7f\u7528\u8005\u5728\u8de8\u8cc7\u6599\u4e2d\u5fc3\u6642\u80fd\u78ba\u4fdd\u9023\u7dda\u7684\u7dad\u6301\uff0cGoogle \u900f\u904e\u7a69\u5b9a\u5316\u7684 anycast\uff08stabilized anycast\uff09\u4f86\u9054\u6210\u3002

      ---\ntitle: Stabilized Anycast\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 balancersMaglev]\n    p1[HTTP Reverse Proxies]\n  end\n  subgraph \"Data-center 2\"\n    direction TB\n    u2[router] --> lb2[Load balancersMaglev]\n    lb2 --> p2[HTTP Reverse Proxies]\n  end\n  i --10.0.0.1--> u1\n  i --10.0.0.1--> u2\n  lb1 -.StabilizedAnycast.-> lb2\n

      \u7576\u9023\u7dda\u5728 Data-center 1 \u5efa\u7acb\u6642\uff0c\u8def\u7531\u5668\u4e0b\u9762\u7684\u8ca0\u8f09\u5e73\u8861\u5668 \uff08Google \u547d\u540d\u70ba Maglev\uff09 \u6703\u628a\u9023\u7dda\u8cc7\u8a0a\u540c\u6b65\u7d66\u5176\u4ed6\u8cc7\u6599\u4e2d\u5fc3\u3002 \u800c\u9019\u500b\u8ca0\u8f09\u5e73\u8861\u5668\u53ea\u6703\u8655\u7406 L4 \u7684\u5c01\u5305\uff0c\u4e26\u4e14\u900f\u904e Equal-Cost Multi Path\uff08ECMP\uff09\u7684\u8f49\u9001\u65b9\u5f0f\uff0c \u9054\u6210\u53ef\u4ee5\u8b93\u591a\u500b\u8ca0\u8f09\u5e73\u8861\u5171\u4eab\u9023\u7dda\u8cc7\u8a0a\uff0c\u7576\u9700\u8981\u63d0\u9ad8\u8ca0\u8f09\u80fd\u529b\u6642\uff0c\u53ea\u9700\u8981\u55ae\u7d14\u7684\u589e\u52a0\u6a5f\u5668\u5373\u53ef\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\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\u900f\u904e\u8fed\u4ee3\u7684\u65b9\u5f0f\u5faa\u5e8f\u6539\u5584\u8a2d\u8a08\uff0c \u6700\u7d42\u8b93\u958b\u767c\u8005\u8a2d\u8a08\u51fa\u4e00\u500b\u80fd\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\u53e6\u5916\u6240\u8b02\u7684\u9ad8\u7a69\u5065\u6027\u5305\u542b\uff1a

      • \u5bb9\u91cf\uff08capacity\uff09\u9810\u4f30
      • \u529f\u80fd\u7368\u7acb\u6027\uff08\u985e\u4f3c\u8259\u58c1\u539f\u5247\uff0cbulkheads\uff09\uff0c\u907f\u514d\u55ae\u4e00\u529f\u80fd\u7684\u640d\u58de\u5f71\u97ff\u5168\u90e8\u7684\u670d\u52d9\u3002
      • \u5141\u8a31\u670d\u52d9\u964d\u80fd\uff08degradation\uff09

      \u5728\u63a5\u4e0b\u4f86\u7684\u7df4\u7fd2\u4e2d\uff0c\u6bcf\u4e00\u6b21\u8fed\u4ee3\u7684\u8a2d\u8a08\uff0c\u90fd\u53ef\u4ee5\u554f\u554f\u81ea\u5df1\u9019\u56db\u500b\u554f\u984c\uff1a

      • \u9019\u500b\u8a2d\u8a08\u53ef\u80fd\u55ce\uff1f
      • \u6709\u6c92\u6709\u66f4\u597d\u7684\u65b9\u6cd5\uff1f
      • \u9019\u65b9\u6cd5\u53ef\u4ee5\u5728\u6709\u9650\u7684\u6642\u9593\u548c\u91d1\u9322\u5167\u9054\u6210\u55ce\uff1f
      • \u5982\u679c\u5c08\u6848\u6709\u4e86\u5176\u4ed6\u5e72\u64fe\u6216\u63d2\u4ef6\uff0c\u9019\u65b9\u6cd5\u4ecd\u80fd\u6210\u529f\u55ce\uff1f
      "},{"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

      • [ ] \u7ba1\u7406\u7dda\u4e0a\u4f5c\u696d
      • [ ] \u7406\u89e3\u65e5\u8a8c\u8a0a\u606f
      • [ ] draining \u6d41\u91cf\u5230\u53e6\u4e00\u500b\u53e2\u96c6
      • [ ] rollback \u932f\u8aa4\u7684\u66f4\u65b0
      • [ ] \u963b\u64cb\u6216\u9650\u5236\u975e\u9810\u671f\u7684\u6d41\u91cf
      • [ ] \u589e\u52a0\u7bc0\u9ede\uff0c\u63d0\u9ad8\u670d\u52d9\u8ca0\u8f09\u91cf
      • [ ] \u7fd2\u6163\u76e3\u63a7\u9762\u677f
      • [ ] \u7406\u89e3\u670d\u52d9\u67b6\u69cb\u548c\u670d\u52d9\u7684\u76f8\u4f9d

      \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

      • P1\uff0c\u7dca\u6025\u4e8b\u4ef6\u3001\u6703\u901a\u77e5 on-call\u3001\u6703\u958b\u59cb\u57f7\u884c\u4e8b\u4ef6\u7684\u5206\u985e\u3001\u5f71\u97ff SLO\uff1b
      • P2\uff0c\u5f71\u97ff\u7bc4\u570d\u6709\u9650\u3001\u6703\u900f\u904e\u4e8b\u4ef6\u4e32\u6d41\u983b\u9053\u544a\u77e5\uff1b
      • P3\uff0c\u88ab\u6574\u5408\u8d77\u4f86\u7684\u8a0a\u606f\uff0c\u901a\u5e38\u548c\u670d\u52d9\u7684\u5bb9\u91cf\u6709\u95dc\u3002

      \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

      • \u6bd4\u8f03\u58de\u7684\u548c\u597d\u7684\u4e8b\u5f8c\u6790\u8aa4\u6587\u4ef6
      • \u5efa\u7acb\u5f37\u5065\u7684\u4e8b\u5f8c\u6790\u8aa4\u6587\u5316\u548c\u8fa8\u8b58\u4e00\u4e9b\u53ef\u80fd\u9020\u6210\u7834\u58de\u7684\u8de1\u8c61
      • \u4e00\u500b\u5de5\u5177\u548c\u6a23\u677f\u5e6b\u52a9\u958b\u59cb\u5efa\u7acb
      "},{"location":"feedback/site-reliability-workbook/postmortem-culture/#\u908a\u7de3\u5feb\u53d6\u548c\u4ee3\u7406\u5668\u7684\u5931\u80fd","title":"\u908a\u7de3\u5feb\u53d6\u548c\u4ee3\u7406\u5668\u7684\u5931\u80fd","text":"

      \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":"
      • \u4e8b\u4ef6\u6240\u6709\u8005\uff1a\u694a\u4e00@\u3001\u674e\u4e8c@\u3001\u9673\u4e09@\u3001\u738b\u56db@
      • \u4e8b\u4ef6\u5be9\u95b1\u5718\u968a\uff1a\u885b\u661f\u57fa\u790e\u8a2d\u65bd\u7dad\u904b\u5718\u968a@
      • \u72c0\u614b\uff1a\u5b8c\u6210
      • \u4e8b\u4ef6\u767c\u751f\u65e5\uff1a2014-08-11
      • \u6587\u4ef6\u767c\u5e03\u65e5\uff1a2014-12-30
      "},{"location":"feedback/site-reliability-workbook/postmortem-culture/#\u4e8b\u4ef6\u6982\u8981","title":"\u4e8b\u4ef6\u6982\u8981","text":"
      • \u5f71\u97ff\uff1a\u6240\u6709\u885b\u661f\u6a5f\u5668\u90fd\u88ab\u78c1\u789f\u62b9\u9664\uff0c\u4e26\u5c0e\u81f4\u6240\u6709 Google \u7684\u908a\u7de3\u904b\u7b97\u80fd\u529b\u5931\u6548\u3002
      • \u6839\u56e0\uff1a\u738b\u56db@ \u5ffd\u7565\u57f7\u884c\u5f8c\u7684\u6aa2\u67e5\uff0c\u76f4\u63a5\u91cd\u8907\u57f7\u884c\u81ea\u52d5\u5316\u7684\u64cd\u4f5c\uff0c\u9032\u800c\u89f8\u767c\u932f\u8aa4\u3002
      "},{"location":"feedback/site-reliability-workbook/postmortem-culture/#\u72c0\u6cc1\u7e3d\u7d50","title":"\u72c0\u6cc1\u7e3d\u7d50","text":"
      • \u6301\u7e8c\u6642\u9593\uff1a40 \u5206\u9418\u3002
      • \u5f71\u97ff\u7522\u54c1\uff1a\u908a\u7de3\u904b\u7b97\u8cc7\u6e90\u3002
      • \u5f71\u97ff\u6bd4\u4f8b\uff1a\u6240\u6709\u908a\u7de3\u904b\u7b97\u3002
      • \u4f7f\u7528\u8005\u5f71\u97ff\uff1a\u6240\u6709\u7d93\u904e\u908a\u7de3\u904b\u7b97\u7684\u8acb\u6c42\u6f5b\u6642\u62c9\u9ad8\u3002
      • \u6536\u76ca\u5f71\u97ff\uff1a\u6709\u4e9b\u5ee3\u544a\u56e0\u70ba\u6f5b\u6642\u62c9\u9ad8\uff0c\u6c92\u6709\u6b63\u78ba\u6295\u653e\u3002
      • \u767c\u73fe\u65bc\uff1a\u76e3\u63a7\u544a\u8b66\u3002
      • \u5fa9\u539f\u65bc\uff1a\u900f\u904e\u4eba\u5de5\u5fa9\u539f\u908a\u7de3\u904b\u7b97\uff0c\u6301\u7e8c\u5c0e\u5f15\u6d41\u91cf\u3002
      "},{"location":"feedback/site-reliability-workbook/postmortem-culture/#\u80cc\u666f\u975e\u5fc5\u8981","title":"\u80cc\u666f\uff08\u975e\u5fc5\u8981\uff09","text":"

      \u7121\u3002

      "},{"location":"feedback/site-reliability-workbook/postmortem-culture/#\u5f71\u97ff","title":"\u5f71\u97ff","text":"
      • \u4f7f\u7528\u8005\u5f71\u97ff\uff1a\u6f5b\u6642\u62c9\u9ad8\u3002
      • \u6536\u76ca\u5f71\u97ff\uff1a\u6709\u4e9b\u5ee3\u544a\u6c92\u8fa6\u6cd5\u6295\u653e\u3002
      "},{"location":"feedback/site-reliability-workbook/postmortem-culture/#\u6839\u56e0\u548c\u89f8\u767c\u9ede","title":"\u6839\u56e0\u548c\u89f8\u767c\u9ede","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":"
      • \u6211\u5011\u505a\u5c0d\u4e86
      • \u544a\u8b66\u6210\u529f\u89f8\u767c\uff1b
      • \u4e8b\u4ef6\u7ba1\u7406\u6a5f\u5236\u6b63\u78ba\u904b\u884c\u3002
      • \u6211\u5011\u6c92\u505a\u597d
      • \u5718\u968a\uff08\u7279\u5225\u662f\u694a\u4e00@\u3001\u674e\u4e8c@\uff09\u7adf\u7136\u6c92\u6709\u64b0\u5beb\u6587\u4ef6\u544a\u77e5\u5927\u5bb6\u4e0d\u8981\u91cd\u8907\u57f7\u884c\u7a0b\u5f0f\u78bc\uff1b
      • \u5f85\u547d\u5c0f\u7d44\u6c92\u6709\u6210\u529f\u963b\u6b62\u78c1\u789f\u62b9\u9664\u7684\u81ea\u52d5\u5316\u8173\u672c\u5f9e\u55ae\u4e00\u53e2\u96c6\u64f4\u5927\u5230\u5168\u90e8\u53e2\u96c6\uff0c\u4e26\u4e14\u5df2\u7d93\u4e0d\u662f\u7b2c\u4e00\u6b21\u53cd\u61c9\u9019\u9ebc\u6162\u4e86\u3002
      • \u5e78\u904b\u7684\u4e8b
      • \u6838\u5fc3\u904b\u7b97\u8cc7\u6e90\u80fd\u6b63\u5e38\u8655\u7406\u5168\u7403\u7684\u6d41\u91cf\uff0c\u6211\u4e0d\u6562\u7f6e\u4fe1\u6211\u5011\u6210\u529f\u7684\u907f\u514d\u707d\u96e3\u767c\u751f\uff01\uff01
      "},{"location":"feedback/site-reliability-workbook/postmortem-culture/#\u5f8c\u7e8c\u512a\u5316","title":"\u5f8c\u7e8c\u512a\u5316","text":"\u9805\u76ee \u7a2e\u985e \u512a\u5148\u5ea6 \u8ca0\u8cac\u4eba \u7968 \u8b93\u81ea\u52d5\u5316\u66f4\u597d \u7de9\u89e3 2 \u674e\u4e8c@ \u512a\u5316\u544a\u8b66 \u5075\u6e2c 2 \u9673\u4e09@\u9700\u8981\u5b78\u7fd2\u5982\u4f55\u8de8\u8cc7\u6599\u4e2d\u5fc3\u7684\u4ea4\u4ed8\u5354\u8b70 \u7de9\u89e3 2 TICKET-123 \u6559\u80b2\u8a13\u7df4\u907f\u514d\u932f\u8aa4\u57f7\u884c\u6307\u4ee4 \u9810\u9632 2"},{"location":"feedback/site-reliability-workbook/postmortem-culture/#\u8a5e\u5f59\u8868","title":"\u8a5e\u5f59\u8868","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

      • \u5927\u90e8\u5206\u7684\u512a\u5316\u90fd\u662f\u7de9\u89e3\u578b\u6216\u9810\u9632\u578b\u7684\uff0c\u5728\u9810\u9632\u904e\u7a0b\u4e2d\uff0c\u4e0d\u8981\u671f\u5f85\u4eba\u985e\u4e0d\u6703\u72af\u932f\uff0c\u61c9\u8a72\u8003\u616e\u7684\u662f\u5982\u4f55 \u300c\u8b93\u4eba\u985e\u7121\u6cd5\u5728\u6b64\u5730\u72af\u932f\u300d\uff0c\u5176\u4e2d\u51aa\u7b49\u5c31\u662f\u4e00\u500b\u5f88\u597d\u7684\u7279\u5fb5\u3002

        \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

      "},{"location":"feedback/site-reliability-workbook/postmortem-culture/#\u6307\u8cac\u578b\u7684\u6558\u8ff0","title":"\u6307\u8cac\u578b\u7684\u6558\u8ff0","text":"

      \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

      • \u628a\u5718\u968a\u6210\u54e1\u6307\u660e\u51fa\u4f86\u8ca0\u8cac\uff0c\u61c9\u8a72\u4ee5\u5718\u968a\u70ba\u55ae\u4f4d\u53bb\u6b78\u548e\u4e8b\u4ef6\uff1b
      • \u8981\u6c42\u7279\u5b9a\u6210\u54e1\u7684\u6559\u80b2\u8a13\u7df4\u3002
      "},{"location":"feedback/site-reliability-workbook/postmortem-culture/#\u8a87\u5f35\u7684\u7528\u8a5e","title":"\u8a87\u5f35\u7684\u7528\u8a5e","text":"

      \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

      • \u4e8b\u4ef6\u6240\u6709\u8005\uff1a
      • \u6587\u4ef6\u64b0\u5beb\uff1a\u694a\u4e00@\u3001\u674e\u4e8c@
      • \u8cc7\u6599\u4e2d\u5fc3\u81ea\u52d5\u5316\u8173\u672c\uff1a\u9673\u4e09@
      • \u7db2\u8def\u7ba1\u7406\uff1a\u738b\u56db@
      • \u7cfb\u7d71\u7ba1\u7406\uff1a\u5289\u4e94@
      • \u4e8b\u4ef6\u5be9\u95b1\u5718\u968a\uff1a\u6240\u6709\u5de5\u7a0b\u54e1\u5de5@google.com
      • \u72c0\u614b\uff1a\u5b8c\u6210
      • \u4e8b\u4ef6\u767c\u751f\u65e5\uff1a2014-08-11\uff0c\u9031\u4e00\uff0c17:10 to 17:50 PST8PDT
      • \u6587\u4ef6\u767c\u5e03\u65e5\uff1a2014-08-15\uff0c\u9031\u4e94
      "},{"location":"feedback/site-reliability-workbook/postmortem-culture/#\u4e8b\u4ef6\u6982\u8981_1","title":"\u4e8b\u4ef6\u6982\u8981","text":"
      • \u5f71\u97ff\uff1a
      • \u524d\u7aef\u8acb\u6c42\u88ab\u4e1f\u68c4\uff1b
      • \u4e00\u4e9b\u5ee3\u544a\u6c92\u8fa6\u6cd5\u64ad\u653e\uff1b
      • \u6240\u6709\u88ab\u885b\u661f\u6240\u670d\u52d9\u7684\u61c9\u7528\uff0c\u5176\u6f5b\u6642\u90fd\u88ab\u62c9\u9ad8\u4e26\u6301\u7e8c\u63a5\u8fd1\u5169\u5929\u3002
      • \u6839\u56e0\uff1a\u8a2d\u5099\u9000\u4f11\u76f8\u95dc\u7684\u81ea\u52d5\u5316\u6709\u932f\uff0c\u5c0e\u81f4\u4e26\u975e\u7279\u5b9a\u6a5f\u6ac3\u7684\u8a2d\u5099\u9032\u884c\u78c1\u789f\u62b9\u9664\u3002 \u9019\u8b93\u5168\u4e16\u754c\u6240\u6709\u885b\u661f\u7684\u8a2d\u5099\u90fd\u88ab\u6392\u9032\u9000\u4f11\u6d41\u7a0b\uff0c\u6700\u7d42\u5176\u80fd\u63d0\u4f9b\u7684\u524d\u7aef\u5feb\u53d6\u90fd\u7121\u6cd5\u904b\u4f5c\u4e86\u3002
      "},{"location":"feedback/site-reliability-workbook/postmortem-culture/#\u72c0\u6cc1\u7e3d\u7d50_1","title":"\u72c0\u6cc1\u7e3d\u7d50","text":"
      • \u6301\u7e8c\u6642\u9593\uff1a
      • \u4e3b\u8981\u65bc 08-11\uff0c\u9031\u4e00\uff0c17:10 \u5230 17:50 PST8PDT\uff1b
      • \u91cd\u65b0\u5efa\u7f6e\u548c\u6f5b\u6642\u62c9\u9ad8\u7684\u72c0\u6cc1\u6301\u7e8c\u5230 08-13\uff0c\u5468\u4e09\uff0c07:46 PST8PDT\uff0c\u4e26\u65bc\u6b64\u6642\u95dc\u9589\u4e8b\u4ef6\u3002
      • \u5f71\u97ff\u7522\u54c1\uff1aGFE\uff08\u524d\u7aef\u57fa\u790e\u8a2d\u65bd\uff09\uff0c\u7279\u5225\u662f\u4f7f\u7528\u885b\u661f\u7684\u5730\u5340\u3002
      • \u5f71\u97ff\u6bd4\u4f8b\uff1a\u6240\u6709\u900f\u904e\u885b\u661f\u670d\u52d9\u7684\u5168\u7403\u6027\u6d41\u91cf\uff08\u4e00\u822c\u4f86\u8aaa\u7d04\u70ba 60% \u7684\u7e3d\u6d41\u91cf\uff09\u3002
      • \u4f7f\u7528\u8005\u5f71\u97ff\uff1a
      • xx \u7684\u524d\u7aef\u6d41\u91cf\u88ab\u4e1f\u68c4\u4e26\u6301\u7e8c 40 \u5206\u9418\uff08\u671f\u9593\u5167\u5e73\u5747\u7684 QPS \u70ba xx\uff0c\u4f54\u7e3d\u6d41\u91cf\u7684 xx%\uff09\uff1b
      • \u6240\u6709\u6709\u88ab\u885b\u661f\u8a2d\u5099\u670d\u52d9\u7684\u61c9\u7528\uff0c\u5176\u6f5b\u6642\u90fd\u88ab\u62c9\u9ad8\u4e26\u6301\u7e8c\u5169\u5929\u3002
      • \u6536\u76ca\u5f71\u97ff\uff1a\u5be6\u969b\u6536\u76ca\u5f71\u97ff\u76ee\u524d\u4e0d\u53ef\u77e5\u3002
      • \u767c\u73fe\u65bc\uff1aBlackbox \u76e3\u63a7\uff0c\u5718\u968a\u6536\u5230\u5e7e\u4e4e\u5168\u7403\u6240\u6709\u885b\u661f\u8a2d\u5099\u7684\u932f\u8aa4\u8a0a\u606f\uff1a satellite-a12bcd34 \u670d\u52d9\u592a\u591a\u5931\u6557 HTTP \u8acb\u6c42
      • \u5fa9\u539f\u65bc\uff1a\u707d\u96e3\u767c\u751f\u5f8c\uff0c\u6240\u6709\u6d41\u91cf\u8fc5\u901f\u88ab\u5c0e\u6d41\u81f3 Google \u64c1\u6709\u7684\u524d\u7aef\u53e2\u96c6\u4e2d\uff0c\u4f46\u662f\u76f8\u95dc\u6f5b\u6642\u90fd\u88ab\u62c9\u9ad8\u4e86\u3002
      "},{"location":"feedback/site-reliability-workbook/postmortem-culture/#\u80cc\u666f\u975e\u5fc5\u8981_1","title":"\u80cc\u666f\uff08\u975e\u5fc5\u8981\uff09","text":"

      \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":"
      • xx \u7684\u524d\u7aef\u6d41\u91cf\u88ab\u4e1f\u68c4\u4e26\u6301\u7e8c 40 \u5206\u9418\u3002\u671f\u9593\u5167\u5e73\u5747\u7684 QPS \u70ba xx\uff0c\u4f54\u7e3d\u6d41\u91cf\u7684 xx%\u3002 \u6211\u5011\u7684\u76e3\u63a7\u7cfb\u7d71\u986f\u793a\u51fa\u88ab\u4e1f\u68c4\u7684\u6d41\u91cf\u5176\u5be6\u8981\u66f4\u5927\uff0c\u9019\u662f\u56e0\u70ba\u90e8\u5206\u885b\u661f\u5176\u5be6\u4ecd\u7136\u6709\u5728\u670d\u52d9\uff0c \u4f46\u662f\u88ab\u76e3\u63a7\u8a8d\u70ba\u5931\u80fd\uff0c\u6240\u4ee5\u5c31\u6703\u6709\u6578\u64da\u4e0a\u7684\u843d\u5dee\uff0c\u6211\u5011\u6703\u5728\u5fa9\u8def\u4e0a\u8aaa\u660e\u6211\u5011\u600e\u9ebc\u4f30\u8a08\u9019\u500b\u6d41\u91cf\u7684\u3002
      • \u6240\u6709\u4f9d\u8cf4\u65bc\u885b\u661f\u7684\u61c9\u7528\u5176\u6f5b\u6642\u90fd\u5728\u9019\u5169\u5929\u5167\u88ab\u62c9\u9ad8\uff1a
      • \u63a5\u8fd1 Google \u7dad\u8b77\u7684\u6838\u5fc3\u904b\u7b97\u8cc7\u6e90\u7684\u570b\u5bb6\u6709\u7d04 xx \u6beb\u79d2\u7684 RTT \u9ad8\u5cf0\uff1b
      • \u5176\u4ed6\u8f03\u4f9d\u8cf4\u65bc\u885b\u661f\u8a2d\u5099\u7684\u570b\u5bb6\uff08\u4f8b\u5982\uff0c\u6fb3\u6d32\u3001\u7d10\u897f\u862d\u3001\u5370\u5ea6\uff09\u5247\u6709 xx \u6beb\u79d2\u7684\u9ad8\u5cf0\u3002
      "},{"location":"feedback/site-reliability-workbook/postmortem-culture/#\u6536\u76ca\u5f71\u97ff","title":"\u6536\u76ca\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

      • \u5716\u7247\u548c\u5f71\u7247\uff1a\u6839\u64da\u65e5\u5c0d\u65e5\u7684\u8cc7\u6599\u986f\u793a\u6709\u5f88\u5927\u7684\u932f\u8aa4\u6bd4\u4f8b\u5dee\u8ddd\uff0c\u6211\u5011\u4f30\u8a08\u5be6\u969b\u6536\u76ca\u640d\u5931\u7d04\u843d\u5728 xx \u5230 xx%\uff1b
      • \u641c\u5c0b\uff1axx \u5230 xx% \u7684\u932f\u8aa4\u843d\u5728 17:00 \u5230 18:00 \u4e4b\u9593\uff0c\u540c\u6a23\u6709\u5f88\u5927\u7684\u65e5\u5c0d\u65e5\u5dee\u8ddd\u3002
      "},{"location":"feedback/site-reliability-workbook/postmortem-culture/#\u5718\u968a\u5f71\u97ff","title":"\u5718\u968a\u5f71\u97ff","text":"
      • \u6d41\u91cf\u7dad\u904b\u5718\u968a\u7528\u4e86\u6240\u6709\u4eba\u529b\u4e26\u82b1\u4e86\u7d04 48 \u5c0f\u6642\u4f86\u5b8c\u6210\u4fee\u5fa9\uff1b
      • NST\uff08\u67d0\u500b\u670d\u52d9\uff09\u6709\u9ad8\u65bc\u6c34\u5e73\u7684\u8ca0\u8f09\u4e2d\u65b7\uff0c\u56e0\u70ba\u4ed6\u5011\u9700\u8981\u5141\u8a31\u66f4\u9ad8\u7684\u9650\u6d41\u9032\u5165\u6838\u5fc3\u904b\u7b97\u8cc7\u6e90\uff1b
      • \u56e0\u70ba\u5feb\u53d6\u547d\u4e2d\u7684\u4e0b\u964d\uff0c\u4e00\u4e9b\u670d\u52d9\u6709\u66f4\u9ad8\u7684\u56de\u61c9\u6642\u9593\uff1a
      • \u4f8b\u5982\uff0c\u8acb\u67e5\u770b\u9019\u500b\u804a\u5929\u8a18\u9304\uff08\u67d0\u9023\u7d50\uff09\u4f86\u77e5\u9053\u6709\u54ea\u4e9b\u670d\u52d9\uff1b
      • \u9019\u4e9b\u670d\u52d9\u770b\u5230\u5feb\u53d6\u547d\u4e2d\u7387\u5f9e xx \u964d\u5230 xx%\u3002
      "},{"location":"feedback/site-reliability-workbook/postmortem-culture/#\u4e8b\u4ef6\u8ffd\u8e64\u9023\u7d50","title":"\u4e8b\u4ef6\u8ffd\u8e64\u9023\u7d50","text":"

      \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

      • \u641c\u5c0b\u8a72\u8a2d\u5099\u64c1\u6709\u7684\u6a5f\u6ac3\uff0c\u4f8b\u5982 a12bcd34 \u88e1\u6709\u4e00\u500b rack123 \u6a5f\u6ac3\uff1b
      • \u641c\u5c0b\u6240\u6709\u4f4d\u65bc\u8a72\u6a5f\u6ac3\u7684\u6a5f\u5668\uff0c\u4f8b\u5982 rack123 \u5c0d\u61c9\u65bc machine1\u3001machine2 \u7b49\u7b49\uff1b
      • \u628a\u9019\u4e9b\u6a5f\u5668\u9032\u884c\u78c1\u789f\u62b9\u9664\u3002

      \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":"
      • \u6838\u5fc3\u904b\u7b97\u8cc7\u6e90\u80fd\u5920\u627f\u8f09\u6240\u6709\u6d41\u91cf\uff08\u8a73\u898b\u4e0b\u500b\u6bb5\u843d\uff09\uff0c\u5373\u4f7f\u6240\u6709\u908a\u7de3\u904b\u7b97\u90fd\u5931\u80fd\uff0c \u9019\u8b93\u6d41\u91cf\u5718\u968a\u53ef\u4ee5\u5728\u8f03\u4f4e\u7684\u58d3\u529b\u4e0b\u9032\u884c\u5fa9\u539f\u5de5\u4f5c\uff1b
      • \u7576\u908a\u7de3\u904b\u7b97\u5931\u80fd\u6642\uff0c\u81ea\u52d5\u5316\u7684\u5c0e\u6d41\u6a5f\u5236\u6b63\u78ba\u5730\u628a\u6d41\u91cf\u5c0e\u5230\u6838\u5fc3\u7684\u8cc7\u6599\u4e2d\u5fc3\uff1b
      • \u885b\u661f\u5728\u9000\u5f79\u904e\u7a0b\u662f\u5feb\u901f\u4e14\u6709\u6548\u7387\u7684\uff0c\u96d6\u7136\u9019\u6709\u4ee3\u7406\u4eba\u6df7\u6dc6\u7684\u98a8\u96aa\uff1b
      • \u4e8b\u4ef6\u6210\u529f\u900f\u904e OMG \u89f8\u767c IMAG \u4e26\u4e14\u8a72\u5de5\u5177\u6210\u529f\u8b49\u660e\u5c0d\u65bc\u4e8b\u4ef6\u8ffd\u8e64\u548c\u8de8\u5718\u968a\u6e9d\u901a\u7684\u50f9\u503c\u3002
      "},{"location":"feedback/site-reliability-workbook/postmortem-culture/#\u6211\u5011\u6c92\u505a\u597d","title":"\u6211\u5011\u6c92\u505a\u597d","text":"

      \u95dc\u65bc\u5931\u80fd\u7684\u90e8\u5206\uff1a

      • \u6d41\u91cf Admin Server\uff08\u7ba1\u7406\u670d\u52d9\uff09\u6c92\u6709\u6b63\u78ba\u9a57\u8b49\u6307\u4ee4\uff0c \u4e14\u6240\u6709\u6307\u4ee4\u61c9\u8a72\u90fd\u8981\u51aa\u7b49\u7684\u6216\u81f3\u5c11\u7576\u91cd\u8907\u57f7\u884c\u6642\u662f\u5931\u6548\u5b89\u5168\u7684\uff1b
      • \u6a5f\u5668\u8cc7\u6599\u5eab\uff08MDB\uff09\u4e26\u6c92\u6709\u9650\u5236\u8de8\u8cc7\u6599\u4e2d\u5fc3\u7684\u6240\u5c6c\u9a57\u8b49\uff1b \uff08\u96d6\u7136\u8a72\u4eba\u54e1\u53ea\u5141\u8a31\u5c0d A \u5730\u5340\u7684\u64cd\u4f5c\uff0c\u4f46\u662f\u900f\u904e MDB \u537b\u53ef\u4ee5\u505a\u5230\u5168\u57df\u7684\u64cd\u4f5c\uff0c\u5373\u4ee3\u7406\u4eba\u6df7\u6dc6\uff09
      • \u9000\u5f79\u64cd\u4f5c\u6d41\u7a0b\u4e26\u6c92\u6709\u4ea4\u53c9\u6bd4\u5c0d\u9000\u5f79\u8acb\u6c42\u548c\u7576\u521d\u7533\u8acb\u7684\u7bc4\u570d\u662f\u5426\u76f8\u7576\uff1b
      • \u9000\u5f79\u64cd\u4f5c\u6d41\u7a0b\u6c92\u6709\u9650\u6d41\uff0c\u7576\u958b\u59cb\u9000\u5f79\u6642\uff0c\u6240\u6709\u64cd\u4f5c\u90fd\u662f\u99ac\u4e0a\u57f7\u884c\uff0c\u4e26\u6c92\u6709\u4efb\u4f55\u7de9\u885d\uff1b
      • \u4e00\u4e9b\u5c0d\u5916\u7684\u6d41\u91cf\u56e0\u70ba\u76ee\u7684\u5f9e\u908a\u7de3\u904b\u7b97\u6a5f\u5668\u8f49\u5230\u5176\u4ed6\u5340\u57df\uff0c\u5c0e\u81f4\u6709\u4e00\u6bb5\u6642\u9593\u7684\u7db2\u8def\u58c5\u585e\uff0c\u800c\u8a72\u58c5\u585e\u76f4\u5230\u908a\u7de3\u904b\u7b97\u6062\u5fa9\u5f8c\u624d\u88ab\u5fa9\u539f\u3002

      \u95dc\u65bc\u5fa9\u539f\u7684\u90e8\u5206\uff1a

      • \u91cd\u65b0\u5b89\u88dd\u6a5f\u5668\u662f\u7de9\u6162\u800c\u4e0d\u53ef\u9760\u7684\uff0c\u5176\u662f\u900f\u904e TFTP \u53bb\u50b3\u905e\u8cc7\u6599\uff0c\u800c\u7576\u5c08\u7dda\u6b63\u8655\u65bc\u7e41\u5fd9\u6642\uff0c\u9019\u500b\u64cd\u4f5c\u662f\u7de9\u6162\u7684\uff1b
      • Autoreplacer\uff08\u81ea\u52d5\u66ff\u63db\u6a5f\u5236\uff09\u7684\u57fa\u790e\u8a2d\u65bd\u662f\u6c92\u8fa6\u6cd5\u8655\u7406\u540c\u6642\u8981\u5efa\u7f6e xx \u500b\u7bc0\u9ede\u7684\uff0c \u70ba\u4e86\u52a0\u901f\u81ea\u52d5\u5316\u5efa\u7f6e\uff0c\u9700\u8981\u8a31\u591a\u4eba\u529b\u6295\u5165\u9032\u53bb\u624b\u52d5\u5efa\u7f6e\uff0c\u4ee5\u4e0b\u662f\u5e7e\u500b\u9020\u6210\u7de9\u6162\u7684\u56e0\u7d20\uff1a
      • SSH \u8d85\u6642\u6703\u8b93\u81ea\u52d5\u66ff\u63db\u6a5f\u5236\u5728\u4e00\u4e9b\u8f03\u9060\u7684\u7bc0\u9ede\u4e0a\u51fa\u73fe\u4e0d\u7a69\u5b9a\u7684\u72c0\u6cc1\uff1b
      • \u7de9\u6162\u7684\u6838\u5fc3\u7248\u672c\u5347\u7d1a\uff0c\u5373\u4f7f\u6838\u5fc3\u7248\u672c\u5df2\u7d93\u9054\u5230\u6307\u5b9a\u7684\u7248\u672c\uff1b
      • \u6838\u5fc3\u7684\u908f\u8f2f\u6703\u9650\u5236\u4f75\u5b58\u64cd\u4f5c\uff0c\u5c0e\u81f4\u540c\u6642\u6700\u591a\u53ea\u80fd\u8a2d\u5b9a\u5169\u500b\u6a5f\u5668\uff1b
      • \u81ea\u52d5\u66ff\u63db\u7684\u5947\u602a\u5916\u986f\u884c\u70ba\u589e\u52a0\u4e86\u5c0d\u5176\u64cd\u4f5c\u7684\u56f0\u96e3\u6027\u3002
      • \u91dd\u5c0d\u904e\u591a\u7bc0\u9ede\uff0825%\uff09\u6b63\u9032\u884c\u9000\u5f79\u884c\u70ba\u7684\u76e3\u63a7\uff0c\u5728\u7bc0\u9ede\u9054\u5230 23% \u6642\u4e26\u6c92\u6709\u544a\u8b66\uff0c \u4f46\u662f\u5728\u6f32\u5230 29% \u6642\u767c\u51fa\u4e86\u544a\u8b66\uff0c\u4f46\u9019\u5169\u500b\u6578\u5b57\u4e4b\u9593\u5dee\u4e86 30 \u5206\u9418\uff1b
      • \u80fd\u5920\u9032\u884c\u5b89\u88dd\u7684\u5de5\u7a0b\u4eba\u54e1\u5f88\u5c11\uff0c\u9019\u9020\u6210\u9069\u6642\u8abf\u6574\u7684\u56f0\u96e3\u548c\u5fa9\u539f\u7684\u7de9\u6162\uff1b
      • \u900f\u904e\u6700\u9ad8\u6b0a\u9650\uff08superuser\uff09\u9032\u884c\u4eba\u5de5\u5b89\u88dd\u9020\u6210\u4e0d\u540c\u6a5f\u5668\u7684\u72c0\u614b\u51fa\u73fe\u5dee\u7570\uff0c\u9019\u589e\u52a0\u4e86\u5f8c\u7e8c\u8981\u9032\u884c\u6253\u6383\u7684\u75db\u82e6\u3002
      "},{"location":"feedback/site-reliability-workbook/postmortem-culture/#\u5e78\u904b\u7684\u4e8b","title":"\u5e78\u904b\u7684\u4e8b","text":"
      • \u6838\u5fc3\u904b\u7b97\u8cc7\u6e90\u548c\u908a\u7de3\u904b\u7b97\u7684\u7ba1\u7406\u65b9\u6cd5\u6709\u975e\u5e38\u5927\u7684\u5dee\u7570\uff0c\u9019\u5c0e\u81f4\u5728\u908a\u7de3\u904b\u7b97\u767c\u751f\u554f\u984c\u6642\uff0c\u4e26\u6c92\u6709\u5f71\u97ff\u6838\u5fc3\u904b\u7b97\uff1b
      • YouTube \u7684 CDN \u4e5f\u6709\u8457\u4e0d\u540c\u7684\u57fa\u790e\u8a2d\u65bd\u548c\u7ba1\u7406\u624b\u6bb5\uff0c\u9019\u5c0e\u81f4\u4e8b\u767c\u6642\uff0c\u8a72\u7522\u54c1\u7684\u8d85\u5927\u6d41\u91cf\u4e26\u6c92\u6709\u9032\u4e00\u6b65\u62d6\u57ae\u6838\u5fc3\u904b\u7b97\u8cc7\u6e90\u3002
      "},{"location":"feedback/site-reliability-workbook/postmortem-culture/#\u5f8c\u7e8c\u512a\u5316_1","title":"\u5f8c\u7e8c\u512a\u5316","text":"

      \u7531\u65bc\u672c\u4e8b\u4ef6\u7684\u5ee3\u6cdb\u5f71\u97ff\uff0c\u6211\u5011\u5c07\u512a\u5316\u62c6\u5206\u6210\u4e94\u500b\u9762\u5411\uff1a

      1. \u9810\u9632\u548c\u98a8\u96aa\u7684\u6559\u80b2
      2. \u7dca\u6025\u72c0\u6cc1\u7684\u56de\u61c9
      3. \u76e3\u63a7\u548c\u544a\u8b66
      4. \u908a\u7de3\u904b\u7b97\u7684\u4f9b\u7d66
      5. \u96dc\u9805
      \u512a\u5316\u5167\u5bb9 \u7a2e\u985e \u512a\u5148\u5ea6 \u6240\u5c6c\u4eba\u54e1 \u7968\u865f \u5be9\u8a08\u6240\u6709\u6703\u8b93\u6b63\u5e38\u6a5f\u5668\u8b8a\u6210\u5931\u80fd\u7684\u7cfb\u7d71 \u8abf\u67e5 P1 \u9673\u4e09@ BUG123 \u958b\u7968\u53bb\u8ffd\u8e64 BUG123 \u5217\u51fa\u7684\u7cfb\u7d71\u662f\u5426\u6709\u963b\u64cb\u932f\u8aa4\u8f38\u5165 \u9810\u9632 P1 \u9673\u4e09@ BUG124 \u62d2\u7d55\u4efb\u4f55\u55ae\u4e00\u64cd\u4f5c\u53ef\u4ee5\u8de8\u9650\u57df\u53bb\u57f7\u884c \u7de9\u89e3 P1 \u694a\u4e00@ BUG125 \u7ba1\u7406\u7cfb\u7d71\u9700\u8981\u984d\u5916\u6aa2\u67e5\u53bb\u907f\u514d\u91dd\u5c0d\u8d85\u904e xx \u7684\u7bc0\u9ede\u9032\u884c\u64cd\u4f5c \u7de9\u89e3 P1 \u738b\u56db@ BUG126 \u7ba1\u7406\u7cfb\u7d71\u9700\u8981\u53bb\u554f\u5b89\u5168\u6aa2\u67e5\u7cfb\u7d71\u662f\u5426\u57f7\u884c\u5141\u8a31\u9000\u5f79\u5de5\u4f5c \u9810\u9632 P0 \u674e\u4e8c@ BUG127 \u7ba1\u7406\u7cfb\u7d71\u62d2\u7d55\u90a3\u4e9b\u61c9\u8a72\u8981\u7d66\u503c\u537b\u6c92\u503c\u7684\u64cd\u4f5c \u9810\u9632 P0 \u8a31\u4e03@ BUG128

      \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

      • \u8a5e\u5f59\u8868\uff0c\u8b93\u66f4\u591a\u4eba\u6709\u6a5f\u6703\u53c3\u8207\uff1b
      • \u5f8c\u7e8c\u512a\u5316\uff0c\u9019\u500b\u5927\u578b\u4e8b\u4ef6\u6709\u5f88\u591a\u512a\u5316\u7a7a\u9593\uff0c\u900f\u904e\u5206\u9580\u5225\u985e\u8b93\u4ed6\u66f4\u5bb9\u6613\u5206\u6d3e\u5de5\u4f5c\u548c\u6b0a\u8861\uff1b
      • \u53ef\u91cf\u5316\u6307\u6a19\uff0c\u8db3\u5920\u7684\u6578\u64da\u548c\u5716\u7247\uff0c\u4e26\u4e14\u9644\u4e0a\u539f\u59cb\u8cc7\u6599\u7684\u9023\u7d50\u3002
      "},{"location":"feedback/site-reliability-workbook/postmortem-culture/#\u5177\u9ad4\u7684\u5f8c\u7e8c\u512a\u5316","title":"\u5177\u9ad4\u7684\u5f8c\u7e8c\u512a\u5316","text":"
      • \u6b0a\u8cac\u6b78\u5c6c\uff0c\u660e\u78ba\u6307\u5b9a\u6240\u5c6c\u8005\u548c\u7968\u865f\uff1b
      • \u512a\u5148\u7a0b\u5ea6\uff0c\u5206\u6e05\u512a\u5148\u7a0b\u5ea6\u4f86\u6709\u6548\u8ffd\u8e64\u9019\u4e9b\u512a\u5316\u5be6\u4f5c\uff1b
      • \u91cf\u5316\u5be6\u4f5c\uff0c\u4f8b\u5982\u8a2d\u8a08\u65b0\u7684\u544a\u8b66\u6aa2\u8996\u662f\u5426\u8d85\u904e xx% \u7684\u6a5f\u5668\u4e0b\u7dda\u4e86\uff1b
      • \u5206\u985e\u5c6c\u6027\uff0c\u4f8b\u5982\u9810\u9632\u6027\u548c\u7de9\u89e3\u578b\u3002
      "},{"location":"feedback/site-reliability-workbook/postmortem-culture/#\u4e0d\u8cac\u602a\u55ae\u4e00\u4eba\u54e1\u7684\u884c\u6587","title":"\u4e0d\u8cac\u602a\u55ae\u4e00\u4eba\u54e1\u7684\u884c\u6587","text":"

      \u6587\u4ef6\u5c08\u6ce8\u5728\u7cfb\u7d71\u8a2d\u8a08\u7684\u4e0d\u5b8c\u5584\uff0c\u800c\u975e\u4eba\u70ba\u64cd\u4f5c\u7684\u5931\u8aa4\uff1a

      • \u6211\u5011\u6c92\u505a\u597d\uff0c\u4e26\u6c92\u6709\u4eba\u54e1\u88ab\u9ede\u540d\u4e26\u8cac\u602a\uff1b
      • \u6839\u56e0\u548c\u89f8\u767c\u9ede\uff0c\u5c08\u6ce8\u5728\u300c\u4ec0\u9ebc\u6771\u897f\u300d\u6c92\u5f04\u597d\uff0c\u800c\u975e\u300c\u8ab0\u300d\u6c92\u5f04\u597d\uff1b
      • \u5f8c\u7e8c\u512a\u5316\uff0c\u5c08\u6ce8\u5728\u6539\u5584\u670d\u52d9\uff0c\u800c\u975e\u6539\u5584\u4eba\u54e1\u3002
      "},{"location":"feedback/site-reliability-workbook/postmortem-culture/#\u8db3\u5920\u7684\u6df1\u5ea6\u548c\u5ee3\u5ea6","title":"\u8db3\u5920\u7684\u6df1\u5ea6\u548c\u5ee3\u5ea6","text":"

      \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

      • \u5f71\u97ff\uff0c\u9019\u6bb5\u5728\u5f88\u591a\u4e0d\u540c\u89d2\u5ea6\u4e2d\u63d0\u51fa\u8aaa\u660e\uff0c\u8b93\u4ed6\u5f71\u97ff\u7bc4\u570d\u66f4\u5ba2\u89c0\uff1b
      • \u6839\u56e0\u548c\u89f8\u767c\u9ede\uff0c\u5f9e\u7cfb\u7d71\u5230\u7a0b\u5f0f\u78bc\u7684\u5be6\u4f5c\uff0c\u63d0\u4f9b\u8db3\u5920\u7d30\u7bc0\u7684\u8aaa\u660e\uff1b
      • \u8cc7\u6599\u5c0e\u5411\u7684\u7e3d\u7d50\uff0c\u6240\u6709\u7684\u7e3d\u7d50\u90fd\u662f\u57fa\u65bc\u4e8b\u5be6\u548c\u8cc7\u6599\uff0c\u4e26\u63d0\u4f9b\u539f\u59cb\u8cc7\u6599\u7684\u9023\u7d50\uff1b
      • \u9644\u9304\uff0c\u63d0\u4f9b\u66f4\u591a\u5716\u7247\u8b93\u975e\u5c08\u696d\u4eba\u54e1\u80fd\u5feb\u901f\u7406\u89e3\u5dee\u7570\u548c\u5f71\u97ff\u3002
      "},{"location":"feedback/site-reliability-workbook/postmortem-culture/#\u6587\u4ef6\u64b0\u5beb\u5feb\u901f","title":"\u6587\u4ef6\u64b0\u5beb\u5feb\u901f","text":"

      \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

      • \u53ef\u4ee5\u5f37\u5316\u7684\u505a\u6cd5
      • \u58de\u5473\u9053
      • \u5de5\u5177
      "},{"location":"feedback/site-reliability-workbook/postmortem-culture/#\u53ef\u4ee5\u5f37\u5316\u7684\u505a\u6cd5","title":"\u53ef\u4ee5\u5f37\u5316\u7684\u505a\u6cd5","text":"
      • \u5c55\u73fe\u7121\u8cac\u5099\u7684\u7cbe\u795e
      • \u734e\u52f5\u4e8b\u5f8c\u6790\u8aa4\u7684\u7522\u51fa
      • \u958b\u653e\u5f0f\u7684\u7cbe\u795e
      "},{"location":"feedback/site-reliability-workbook/postmortem-culture/#\u5c55\u73fe\u7121\u8cac\u5099\u7684\u7cbe\u795e","title":"\u5c55\u73fe\u7121\u8cac\u5099\u7684\u7cbe\u795e","text":"

      \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

      • \u512a\u5316\u4f5c\u6cd5\u7684\u6210\u529f\u57f7\u884c\uff1b
      • \u5f9e\u4e8b\u4ef6\u4e2d\u5f97\u5230\u7684\u6771\u897f\u5411\u4f01\u696d\u5167\u90e8\u6a6b\u5411\u7684\u63a8\u5ee3\uff0c\u4f8b\u5982\u67d0\u7a2e\u512a\u5316\u8a2d\u5b9a\uff1b
      • \u5be6\u969b\u9032\u884c\u4e8b\u4ef6\u8655\u7406\u7684\u6642\u9593\u6e1b\u5c11\u7684\u6bd4\u4f8b\uff0c\u4f8b\u5982\u4eca\u5e74\u53ea\u7528\u4e86\u5169\u9031\u5728\u8655\u7406\u4e8b\u4ef6\uff1b

      \u53ef\u4ee5\u9032\u884c\u7684\u734e\u52f5\u53ef\u80fd\u6709\uff1a

      • \u8b93\u4e8b\u4ef6\u7684\u53c3\u8207\u4eba\u6709\u6a5f\u6703\u8b8a\u6210\u8a72\u985e\u578b\u4e8b\u4ef6\u7684\u610f\u898b\u9818\u8896\uff0c\u4f8b\u5982 \u300c\u4f60\u53ef\u4ee5\u548c\u5c0f\u660e\u8a0e\u8ad6\u770b\u770b\uff0c\u4ed6\u4e0a\u6b21\u624d\u548c\u67d0\u5718\u968a\u4e00\u8d77\u64b0\u5beb\u4e86\u9019\u985e\u578b\u4e8b\u4ef6\u7684\u6790\u8aa4\u6587\u4ef6\uff0c\u4ed6\u61c9\u8a72\u6703\u7d66\u4f60\u4e00\u4e9b\u610f\u898b\u300d\uff1b
      • \u904a\u6232\u5316\uff0c\u4f8b\u5982\u8cde\u91d1\u7375\u4eba\uff0c\u7d71\u8a08\u5404\u500b\u4eba\u54e1\u6216\u5718\u968a\u4e8b\u4ef6\u8655\u7406\u7684\u6b21\u6578\uff0c\u4e26\u6709\u6392\u884c\u699c\u7b49\u7b49\u3002
      "},{"location":"feedback/site-reliability-workbook/postmortem-culture/#\u958b\u653e\u5f0f\u7684\u7cbe\u795e","title":"\u958b\u653e\u5f0f\u7684\u7cbe\u795e","text":"

      \u9019\u4e5f\u662f\u4e00\u7a2e\u9593\u63a5\u7684\u734e\u52f5\uff0c\u6709\u4e00\u4e9b\u505a\u6cd5\u53ef\u4ee5\u53c3\u8003\uff1a

      • \u907f\u514d\u55ae\u4e00\u5718\u968a\u6216\u4eba\u54e1\u64b0\u5beb\uff0c\u5bb9\u6613\u5931\u53bb\u5ba2\u89c0\u6027\uff1b
      • \u9f13\u52f5\u975e\u53c3\u8207\u4eba\u54e1\u7684\u56de\u994b\uff1b
      • \u628a\u4e8b\u4ef6\u6458\u8981\u653e\u9032\u5167\u90e8\u901a\u8a0a\u7ba1\u9053\uff0c\u4f8b\u5982 Teams \u6216 Slack\uff1b
      • \u8de8\u5718\u968a\u7684\u6aa2\u8a0e\u548c\u5be9\u67e5\uff0c\u751a\u81f3\u975e\u5b98\u65b9\u7684\u95b1\u8b80\u793e\u5718\uff1b
      • \u8b93\u65b0\u9032\u54e1\u5de5\u80fd\u53c3\u8207\u9032\u4f86\uff0c\u4f8b\u5982\u7df4\u7fd2\u8cfd\uff1b
      • \u6bcf\u9031\u4e8b\u4ef6\u6703\u8b70\uff0c\u5171\u540c\u5be9\u8996\u904e\u53bb\u4e00\u9031\u7684\u4e8b\u4ef6\u3002
      "},{"location":"feedback/site-reliability-workbook/postmortem-culture/#\u58de\u5473\u9053","title":"\u58de\u5473\u9053","text":"

      \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

      • \u54e1\u5de5\u907f\u514d\u53c3\u8207\u4e8b\u5f8c\u6790\u8aa4\uff0c\u4f8b\u5982\u300c\u54c7\uff0c\u4f60\u6709\u807d\u8aaa\u9019\u6b21\u4e8b\u4ef6\u55ce\uff1f\u300d\u300c\u662f\u554a\uff0c\u771f\u6158\uff0c\u4ed6\u5011\u6b63\u5728\u5beb\u6587\u4ef6\u300d\u300c\u5e78\u597d\u4e0d\u662f\u6211\u300d\uff1b
      • \u5be6\u4f5c\u4eba\u54e1\u7684\u4e0d\u8a8d\u540c\uff0c\u4f8b\u5982\u300c\u6211\u77e5\u9053\u516c\u53f8\u9f13\u52f5\u4e0d\u8cac\u5099\uff0c\u4f46\u9019\u88e1\u53ea\u6709\u6211\u548c\u4f60\uff0c\u70ba\u4ec0\u9ebc\u4f60\u4e0d\u5728\u4e8b\u524d\u53bb\u63a5\u53d7\u90a3\u4e9b\u6539\u5584\u610f\u898b\uff1f\u300d \u53ef\u4ee5\u6539\u6210\u300c\u4e8b\u524d\u61c9\u8a72\u6703\u6709\u4e00\u4e9b\u5fb5\u5146\uff0c\u6211\u5011\u53ef\u4ee5\u4f86\u8a0e\u8ad6\u4e00\u4e0b\u70ba\u4ec0\u9ebc\u6211\u5011\u5ffd\u7565\u4e86\u9019\u4e9b\u5fb5\u5146\u300d\uff1b
      • \u7f3a\u4e4f\u6642\u9593\u64b0\u5beb\uff0c\u597d\u7684\u4e8b\u5f8c\u6790\u8aa4\u6587\u4ef6\u662f\u9700\u8981\u6642\u9593\u64b0\u5beb\u7684\uff0c\u900f\u904e\u4e00\u5b9a\u7a0b\u5ea6\u54c1\u8cea\u7684\u6587\u4ef6\uff0c\u4f86\u6559\u80b2\u672a\u4f86\u7684\u6240\u6709\u5718\u968a\u3002 \u66ff\u64b0\u5beb\u6587\u4ef6\u6392\u512a\u5148\u9806\u5e8f\u3001\u8ffd\u8e64\u9032\u5ea6\u548c\u5be9\u95b1\u7d50\u679c\uff0c\u6700\u91cd\u8981\u7684\u662f\u8981\u7d66\u4e88\u5718\u968a\u6642\u9593\u5b8c\u6210\u4e8b\u4ef6\u7684\u76f8\u95dc\u5f8c\u7e8c\u512a\u5316\u3002
      • \u91cd\u8907\u6027\u4e8b\u4ef6\uff0c\u5982\u679c\u985e\u4f3c\u7684\u4e8b\u60c5\u53cd\u8986\u767c\u751f\uff0c\u9019\u662f\u4e00\u500b\u597d\u7684\u5fb5\u5146\u53bb\u9032\u884c\u6df1\u5ea6\u7814\u7a76\u3002 \u5617\u8a66\u96c6\u5408\u5404\u500b\u4e8b\u4ef6\u7684\u5354\u4f5c\u8005\uff0c\u4e26\u628a\u5404\u500b\u6587\u4ef6\u62ff\u51fa\u4f86\u6bd4\u8f03\uff0c\u6709\u5e7e\u500b\u5207\u5165\u9ede\uff1a
      • \u5f8c\u7e8c\u512a\u5316\u662f\u5426\u82b1\u4e86\u592a\u591a\u6642\u9593\uff1f
      • \u529f\u80fd\u6027\u7684\u958b\u767c\u662f\u5426\u5f71\u97ff\u7a69\u5b9a\u6027\u512a\u5316\u7684\u8abf\u6574\uff1f
      • \u512a\u5316\u662f\u5426\u5728\u4e00\u958b\u59cb\u88ab\u6b63\u78ba\u63d0\u51fa\uff1f
      • \u670d\u52d9\u662f\u5426\u592a\u904e\u8001\u820a\uff0c\u4ee5\u81f3\u65bc\u91cd\u69cb\u56f0\u96e3\uff1f
      • \u662f\u5426\u5728\u56b4\u91cd\u7684\u50b7\u53e3\u4e0a\uff0c\u8cbc\u4e0a OK \u8e66\uff1f
      "},{"location":"feedback/site-reliability-workbook/postmortem-culture/#\u5de5\u5177\u548c\u5e73\u53f0","title":"\u5de5\u5177\u548c\u5e73\u53f0","text":"

      \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

      • \u6587\u4ef6\u6a21\u677f\uff0c\u8b93\u516c\u53f8\u5176\u4ed6\u4eba\u80fd\u5feb\u901f\u627e\u5230\u4ed6\u5011\u60f3\u8981\u7684\uff0c\u540c\u6642\u6a21\u677f\u5efa\u8b70\u5141\u8a31\u9032\u884c\u4e00\u4e9b\u5ba2\u88fd\u5316\uff1a
      • Google \u5167\u90e8\u662f\u4f7f\u7528 Google Docs\uff0c\u56e0\u70ba\u5141\u8a31\u5171\u7de8\uff0c\u4e14\u5141\u8a31\u5ba2\u88fd\u5316\uff1b
      • \u900f\u904e Google Apps Script \u9032\u884c\u4e00\u4e9b\u81ea\u52d5\u5316\uff0c\u4f8b\u5982\u9078\u64c7\u5167\u90e8\u54e1\u5de5\u6642\u3002
      • Google \u767c\u5c55\u51fa\u4f86\u7684 checklist\uff1a
      • \u707d\u96e3\u5f71\u97ff\u7bc4\u570d\u7684\u5b8c\u6574\u904d\u6b77\uff1b
      • \u6839\u56e0\u7684\u6e05\u6670\u4e86\u89e3\uff0c\u4e26\u4f9d\u6b64\u767c\u5c55\u512a\u5316\uff08Five Whys\uff09\uff1b
      • \u512a\u5316\u9805\u76ee\u662f\u7d93\u904e\u6280\u8853\u4e3b\u7ba1\u7684\u6279\u51c6\u548c\u5be9\u67e5\u3002
      • \u8cc7\u6599\u5eab\u7684\u9078\u64c7\uff08\u76ee\u524d\u90fd\u6c92\u6709\u958b\u6e90\uff0c\u9700\u8981\u82b1\u6642\u9593\u8abf\u67e5\uff0c\u4f8b\u5982 Zalando \u7684 Sunrise\uff09\uff1a
      • \u900f\u904e\u641c\u96c6\u800c\u4f86\u7684\u8cc7\u6599\uff0c\u8b93\u4e0b\u6b21\u5efa\u7acb\u6790\u8aa4\u6587\u4ef6\u80fd\u5920\u66f4\u5feb\u901f\u66f4\u81ea\u52d5\u5316\uff1b
      • \u5efa\u7f6e\u4e00\u500b\u53ef\u4ee5\u6709\u6548\u8ffd\u8e64\u5f8c\u7e8c\u512a\u5316\u7684\u9762\u677f\uff1b
      • \u5206\u6790\u4e26\u756b\u6210\u5716\u4f86\u76f4\u89c0\u8868\u9054\u54ea\u4e9b\u5730\u65b9\u9084\u4e0d\u5920\u7a69\u5b9a\uff08\u4e00\u500b\u516c\u53f8\u670d\u52d9\u5730\u5716\uff0c\u4e26\u6a19\u6ce8\u7d05\u8272\u4f86\u8868\u660e\u9019\u6bb5\u4e0d\u7a69\uff09\u3002 \u4e26\u6839\u64da\u4e00\u4e9b\u6307\u6a19\uff0c\u4f8b\u5982\uff1a\u6b21\u6578\u3001\u7206\u70b8\u534a\u5f91\u3001\u6301\u7e8c\u6642\u9593\u3001\u5075\u6e2c\u6642\u9593\u3001\u5fa9\u539f\u6642\u9593\uff0c\u4f86\u9032\u884c\u7576\u6708\u7684\u7e3e\u6548\u8a55\u4f30\u3002

      \u4ee5\u4e0b\u5217\u51fa\u4e00\u4e9b\u6709\u7528\u5de5\u5177\uff1a

      • PagerDuty \u7684 postmortem template\uff1b
      • \u90e8\u843d\u5ba2\u5728 GitHub Gist \u64b0\u5beb\u7684 postmortem \u7bc4\u4f8b\uff1b
      • \u5728 stackoverflow \u4e0a\u7684\u4e00\u4e9b\u8a0e\u8ad6\uff1apostmortem \u9700\u8981\u54ea\u4e9b\u6bb5\u843d
      "},{"location":"feedback/site-reliability-workbook/postmortem-culture/#\u7d50\u8ad6","title":"\u7d50\u8ad6","text":"

      \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

      • identify\uff0c\u5b9a\u7fa9\u52de\u52d5\u529b
      • quantify\uff0c\u8ce6\u4e88\u6307\u6a19\uff0c\u78ba\u4fdd\u6e1b\u5c11\u52de\u52d5\u529b\u662f\u5fc5\u8981\u6216\u8005\u6709\u6210\u6548\u7684
      • work toward eliminating it\uff0c\u81ea\u52d5\u5316\u7684\u5be6\u8e10
      "},{"location":"review/","title":"\u5e74\u5ea6\u56de\u9867","text":"

      \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

      • \uff08\u5168\u80fd\uff09\u81ea\u7136\u8a9e\u8a00\u8655\u7406\u6a21\u578b \u2014 ChatGPT
      • AI \u7e6a\u5716 \u2014 Stable Diffusion
      • \u86cb\u767d\u8cea\u6a21\u578b\u9810\u6e2c \u2014 AlphaFold2
      • \u6838\u878d\u5408\u7684\u6eab\u5ea6\u7dad\u6301
      • \u6230\u7565\u904a\u6232 \u2014 CICERO
      • \u53e4\u5e0c\u81d8\u6b77\u53f2\u6587\u672c\u5224\u8b80 \u2014 Ithaca
      "},{"location":"review/2022-ai/#chatgpt","title":"ChatGPT","text":"

      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

      • \u73a9\u6587\u5b57\u7248\u7684 RPG\uff0c\u4f8b\u5982\u8b93\u4ed6\u626e\u6f14\u5bc6\u5ba4\u4e2d\u7684\u67d0\u4e00\u500b\u4eba\uff0c\u7d66\u4e88\u5176\u9078\u64c7\u548c\u7dda\u7d22\uff0c\u6700\u7d42\u8b93\u4ed6\u6210\u529f\u9003\u51fa\u3002
      • \u6574\u5408 AI \u7e6a\u5716\uff0c\u5728\u77ed\u77ed\u6578\u5c0f\u6642\u5167\uff0c\u63a8\u51fa\u4e86\u7d14 AI \u5275\u4f5c\u7684\u5152\u7ae5\u7e6a\u672c\u3002

      \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

      • \u74b0\u5883\uff0c\u63a2\u8a0e\u74b0\u5883\u7684\u72c0\u614b\u3001\u6c38\u7e8c\u7684\u9032\u5ea6\u548c\u898f\u7bc4\u7684\u5efa\u7f6e\uff1b
      • \u751f\u7269\uff0c\u7269\u7a2e\u3001\u6a5f\u5236\u3001\u91ab\u7642\u548c\u4fdd\u80b2\u7684\u8a0e\u8ad6\uff1b
      • \u6578\u4f4d\uff0cAI\u3001\u64f4\u5145\u5be6\u5883\u3001\u6f14\u7b97\u6cd5\u7b49\u7b49\uff1b
      • \u79d1\u6280\uff0c\u5b87\u5b99\u3001\u91cf\u5b50\u3001\u6280\u8853\u548c\u6578\u5b78\uff1b
      • \u4eba\u6587\uff0c\u751f\u6d3b\u3001\u6cd5\u5f8b\u3001\u90fd\u5e02\u548c\u4e8b\u4ef6\u3002

      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

      • \u7d93\u904e\u4e86\u5341\u5e74\uff0c\u6b50\u6d32\u82b1\u4e86\u516d\u5104\u6b50\u5143\u7684\u4eba\u985e\u5927\u8166\u5c08\u6848\u7d42\u65bc\u5b8c\u6210\uff0c \u900f\u904e\u96fb\u8166\u6a21\u64ec\u53d7\u523a\u6fc0\u7684\u53cd\u61c9\uff0c\u800c\u5176\u4ed6\u570b\u5bb6\u7684\u4eba\u8166\u5c08\u6848\u4ecd\u5728\u6301\u7e8c\u8457\uff1b
      • \u4e16\u754c\u6700\u5927\u7684\u4eba\u8166\u5730\u5716\u548c \u57fa\u56e0\u5730\u5716\u4e5f\u5728\u4eca\u5e74\u63a8\u51fa\uff0c \u65e8\u5728\u7cbe\u6e96\u5b9a\u4f4d\u6307\u5b9a\u7684\u7d30\u80de\u548c\u57fa\u56e0\u4f4d\u7f6e\uff0c\u52a0\u901f\u91ab\u7642\u7814\u7a76\uff1b
      • \u4eba\u985e\u7684 Y \u67d3\u8272\u9ad4\u7684\u89e3\u78bc\u5b8c\u6210\uff0c \u56e0\u70ba\u91cd\u8907\u6027\u7684\u7247\u6bb5\uff0c\u65e9\u671f\u8a8d\u70ba\u7121\u7528\u7684\u67d3\u8272\u9ad4\u5176\u5be6\u6c7a\u5b9a\u4e86\u5f88\u591a\u4e8b\u60c5\uff1b
      • \u5728\u8a08\u7b97\u4eba\u985e\u7d30\u80de\u7684\u6578\u91cf\u6642\uff0c\u6703\u767c\u73fe\u8d8a\u5c0f\u7684\u7d30\u80de\u8d8a\u591a\uff0c \u4f46\u662f\u4ed6\u7684\u7e3d\u8cea\u91cf\u6703\u548c\u90a3\u4e9b\u5927\u800c\u5c11\u7684\u7d30\u80de\u76f8\u540c\uff0c \u9019\u7a2e\u7279\u5fb5\u751a\u81f3\u80fd\u63a8\u5ee3\u5230\u5176\u4ed6\u751f\u7269\u7cfb\u7d71\u4e0a\u3002

      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

      • \u6ce2\u591a\u9ece\u5404\u57f9\u80b2\u77ed\u6bdb\u4e73\u725b\u8b93\u7260\u5011\u66f4\u8010\u71b1\uff1b
      • \u6253\u7834\u85cd\u7da0\u85fb\u7684\u7d30\u80de\u58c1\u8b93\u4ed6\u53ef\u4ee5\u6210\u70ba\u6cbb\u7642\u50b7\u53e3\u7684\u5229\u5668\uff1b
      • \u7814\u7a76\u767c\u73fe\u852c\u679c\u7684\u5fae\u71df\u990a\u542b\u91cf\u964d\u4f4e\uff0c\u4e26\u88ab\u78b3\u6c34\u5316\u5408\u7269\u53d6\u4ee3\uff1b
      • \u6606\u87f2\u7684\u8b8a\u614b\u6703\u91cd\u7d44\u6574\u500b\u795e\u7d93\u5143\u7684\u9023\u7d50\uff0c\u800c\u975e\u55ae\u7d14\u7684\u88fd\u9020\u65b0\u7684\u7d30\u80de\uff1b
      • \u900f\u904e\u57fa\u56e0\uff0c\u6210\u529f\u8b93\u679c\u8805\u9032\u884c\u7121\u6027\u751f\u6b96\uff1b
      • \u900f\u904e\u57fa\u56e0\uff0c\u8b93\u96de\u96bb\u5c0d\u79bd\u6d41\u611f\u514d\u75ab\uff1b
      • \u9175\u6bcd\u83cc\uff0c\u4e16\u754c\u9996\u500b\u8d85\u904e\u4e00\u534a DNA \u90fd\u662f\u5408\u6210\u51fa\u4f86\u7684\u751f\u7269\uff1b
      • \u900f\u904e\u65b0\u7684\u6210\u50cf\u6280\u8853\uff0c\u5c0d\u5149\u5408\u4f5c\u7528\u7684\u90e8\u4efd\u8b8a\u5316\u6709\u65b0\u7684\u8a8d\u8b58

      \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

      • \u6bcf\u9694\u6578\u5e74\u7684\u87ec\u6f6e\u65bc\u4eca\u5e74\u518d\u8d77\uff0c \u4e26\u4e14\u6700\u65b0\u7814\u7a76\u986f\u793a\u87ec\u5403\u7684\u662f\u690d\u7269\u4e4b\u6db2\uff1b
      • \u9ce5\u985e\u6578\u91cf\u7684\u6301\u7e8c\u964d\u4f4e\uff1b
      • \u82b1\u87f9\u548c\u9b5a\u5728\u53f0\u7063\u7684\u4fdd\u80b2\uff1b
      • \u900f\u904e\u5feb\u901f\u5206\u5225\u516c\u6bcd\u87f9\u4f86\u964d\u4f4e\u8783\u87f9\u7684\u58d3\u529b\uff1b
      • \u6df1\u6d77\u9b5a\u985e\u7684\u65b0\u5546\u6a5f\uff0c\u4f46\u662f\u904e\u5730\u958b\u767c\u5c07\u6703\u5f71\u97ff\u5176\u628a\u78b3\u5e36\u9032\u6df1\u6d77\u7684\u80fd\u529b\uff1b
      • \u4e16\u754c\u6700\u5927\u7684\u6a39\uff0c\u4f54\u5730 44 \u842c\u5e73\u65b9\u516c\u5c3a\uff0c\u88ab\u8b49\u5be6\u5168\u6797\u70ba\u4e00\u682a\uff1b
      • \u4f01\u9d5d\u6bcf\u6b21\u5c0f\u7761\u56db\u79d2\u9418\uff0c\u6bcf\u5929\u5171\u7761\u7d04 11 \u5c0f\u6642\u7684\u7279\u6b8a\u7761\u7720\u6a5f\u5236\u3002
      • \u5bb6\u755c\u52d5\u7269\u64c1\u6709\u8907\u96dc\u7684\u7cbe\u795e\u751f\u6d3b\uff0c \u8c6c\u6703\u91cb\u653e\u88ab\u56f0\u7684\u540c\u4f34\u3001\u5c71\u7f8a\u4f3c\u4e4e\u7121\u79c1\u7684\u5e6b\u52a9\u5176\u4ed6\u7f8a\u7372\u5f97\u7f8e\u5473\u4f73\u991a\u800c\u725b\u53ef\u4ee5\u63a5\u53d7\u5982\u5ec1\u8a13\u7df4\u3002
      • ScienceNews \u7cbe\u9078\u7684\u672c\u5e74\u5ea6\u6700\u4f73\u52d5\u7269\u6545\u4e8b\u3002
      "},{"location":"review/2023/#\u91ab\u5b78","title":"\u91ab\u5b78","text":"

      \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

      • \u4eca\u5e74\u8afe\u8c9d\u723e\u734e\u9812\u7d66 mRNA \u7684\u76f8\u95dc\u5021\u8b70\u8005\uff0c \u9f13\u52f5\u4ed6\u5011\u5728\u65b0\u51a0\u80ba\u708e\u7684\u75ab\u82d7\u88fd\u4f5c\u4e0a\u7684\u8ca2\u737b\uff1b
      • \u512a\u5316\u816b\u56ca\u6027\u7e96\u7dad\u5316\u7684\u6cbb\u7642\uff0c\u7372\u5f97\u672c\u5e74 breakthrough price\uff1b
      • \u627e\u51fa\u70ba\u4ec0\u9ebc\u4e73\u764c\u9019\u9ebc\u5bb9\u6613\u8f49\u79fb\u5230\u810a\u9ad3\uff0c\u56e0\u70ba\u4e00\u7a2e\u7279\u6b8a\u86cb\u767d\u8cea\u5728\u4f5c\u795f\uff1b
      • \u900f\u904e\u5948\u7c73\u96fb\u7dda\u6307\u5b9a\u653b\u64ca\u764c\u7d30\u80de\uff1b
      • \u4eba\u985e\u6b77\u53f2\u4e0a\u7b2c\u4e00\u6b21\u7684\u57fa\u56e0\u7de8\u8f2f\u81e8\u5e8a\u8a66\u9a57\uff0c\u7528\u65bc\u6cbb\u7642\u767d\u8840\u75c5\uff0c \u4e00\u6b21\u6cbb\u7642\u8981\u5169\u767e\u842c\u7f8e\u5143\uff1b
      • \u5851\u9020\u9aa8\u9abc\u7684\u57fa\u56e0\u63a2\u8a0e\uff1b
      • \u4eba\u985e\u5df2\u77e5\u7b2c\u4e09\u500b\u5f9e\u611b\u6ecb\u75c5\u4e2d\u5b8c\u5168\u6cbb\u7652\u7684\u60a3\u8005\uff1b
      • \u4f7f\u7528 Deep brain stimulation, DBS \u6cbb\u7642\u6291\u9b31\u75c7\u7684\u7cfb\u5217\u6587\u7ae0\uff1b
      • \u4eba\u985e\u9996\u500b\u5168\u773c\u79fb\u690d\u6848\u4f8b\uff1b
      • \u900f\u904e\u4eba\u5de5\u667a\u6167\u6aa2\u6e2c\u963f\u8332\u6d77\u9ed8\u75c7\uff1b
      • \u4e5f\u900f\u904e\u4eba\u5de5\u667a\u6167\u5206\u6790\u8166\u7d30\u80de\u7684\u5373\u6642\u96fb\u5b50\u8a0a\u865f\uff0c \u8fa8\u8b58\u51fa\u60f3\u8981\u767c\u51fa\u7684\u8a00\u8a9e\uff1b
      • \u651c\u5e36\u91ab\u5b78\u4e2d\uff0c\u4f7f\u7528\u4f4e\u529f\u7387\u5ee3\u57df\u7db2\u8def\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

      • Consensus\uff1a\u4e3b\u984c\u76f8\u95dc\u7684\u554f\u7b54\uff0c\u4ee5\u5b78\u8853\u5171\u8b58\u70ba\u4f9d\u64da\u56de\u7b54\uff1b
      • Elicit\uff1a\u7528\u65bc\u69cb\u601d\u60f3\u6cd5\u548c\u6458\u8981\u8ad6\u6587\u7684\u597d\u5de5\u5177\uff1b
      • Scite\uff1a\u63d0\u4f9b\u8a73\u7d30\u7684\u771f\u5be6\u5f15\u7528\u6e05\u55ae\uff1b
      • Research Rabbit Rabbit\uff1a\u53ef\u4ee5\u4e86\u89e3\u4f60\u7684\u8208\u8da3\u4e26\u751f\u6210\u63a8\u85a6\u95b1\u8b80\u7684\u8ad6\u6587\uff1b
      • ChatPDF\uff1a\u80fd\u5920\u4e0a\u50b3\u8ad6\u6587\u4e26\u958b\u59cb\u5c0d\u5176\u63d0\u554f\u3002

      \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

      • \u8a2d\u8a08\u7d44\u5408\u8a9e\u8a00\u4e2d\u7684\u6392\u5e8f\u6f14\u7b97\u6cd5\uff1b
      • \u7121\u4eba\u6a5f\u7af6\u901f\u3001 \u6578\u5b78\u985e\u578b\u904a\u6232\u7684\u512a\u52dd\uff1b
      • \u9996\u500b\u628a\u57f7\u884c\u9577\u7684\u4f4d\u5b50\u8b93 AI \u4f86\u7576\u7684\u516c\u53f8\uff1b
      • \u58d3\u7e2e\u8cc7\u6599\u7684\u6f14\u7b97\u6cd5\uff1b
      • \u5929\u6c23\u9810\u5831\uff0c \u9019\u662f\u8001\u8b70\u984c\uff0c\u4f46\u662f\u4e00\u76f4\u6c92\u6709\u6709\u6548\u7684\u904b\u7b97\u80fd\u5920\u5339\u6575\u4eba\u985e\u8a2d\u8a08\u51fa\u4f86\u7684\u516c\u5f0f\uff1b
      • DeepMind \u7684\u4eba\u5de5\u667a\u616717 \u5929\u5167\u8a2d\u8a08\u51fa 41 \u500b\u7121\u6a5f\u7269\uff1b
      • \u6a21\u64ec\u4eba\u985e\u5927\u8166 \u7684\u4eba\u5de5\u667a\u80fd\uff0c\u4ee5\u4f4e\u529f\u8017\u70ba\u7279\u8272\uff0c\u9019\u4e5f\u5074\u9762\u8aaa\u660e\u4e86\u4eba\u985e\u5927\u8166\u7684\u9ad8\u6548\u6027\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

      • \u4e2d\u570b\u6b63\u5f0f\u555f\u7528 5G \u5ee3\u64ad\uff0c\u4ee5\u5f8c\u6536\u770b\u96fb\u8996\u4ea6\u662f\u7528\u9ad8\u901f\u901a\u8a0a\uff1b
      • IEEE \u901a\u904e Li-FI \u65b0\u6a19\u6e96\uff0c \u9ad8\u7a69\u5b9a\u9ad8\u983b\u5bec\uff0c\u53ef\u60dc\u4f4e\u64f4\u5f35\u548c\u7121\u6cd5\u9694\u7246\u901a\u8a0a\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

      • \u6838\u878d\u5408\u5728\u53bb\u5e74\u5229\u7528\u4eba\u5de5\u667a\u6167\u6709\u6240\u7a81\u7834\uff0c \u4eca\u5e74\u5247\u662f\u5171\u767c\u751f\u4e86\u56db\u6b21\u7684\u9ede\u706b\u4e8b\u4ef6\uff0c\u4e5f\u5c31\u662f\u8f38\u51fa\u80fd\u91cf\u5927\u65bc\u8f38\u5165\u80fd\u91cf\uff0c \u4e5f\u6709\u958b\u767c\u51fa\u4e00\u4e9b\u51b7\u5857\u5c64\u512a\u5316\u6838\u878d\u5408\u7684\u9032\u884c\uff1b
      • \u600e\u9ebc\u516c\u5e73\u5730\u628a\u4e0d\u5c0d\u7a31\u7684\u86cb\u7cd5\u4e00\u5206\u70ba\u4e8c\uff1f
      • \u6d41\u9ad4\u529b\u5b78\u4e2d\uff0c\u5c0d\u65bc\u6d41\u9ad4\u7684\u5047\u8a2d\u5b58\u5728\u8fd1\u516b\u5341\u5e74\u7684\u932f\u8aa4\uff1b
      • \u6ef2\u900f\u58d3\u7684\u65b0\u767c\u73fe\uff0c\u4e26\u975e\u6fc3\u5ea6\u9a45\u52d5\uff0c\u800c\u662f\u819c\u5167\u58d3\u529b\uff1b
      • \u4eca\u5e74\u7834\u89e3\u4e86 1974 \u5e74\u4ee5\u4f86\u7684\u554f\u984c\uff0c\u7d44\u5408\u5f8c\u7684\u5f62\u72c0\u6c38\u4e0d\u91cd\u8907\u7684\u5e7e\u4f55\u5716\u5f62\uff1b
      • Meta Quest3 \u548c\u860b\u679c\u7684 VisionPro \u7684\u6bd4\u8f03\uff0c\u5e36\u51fa LED \u7684\u6280\u8853\u4e4b\u722d\uff1b
      • \u5168\u606f\u52d5\u7269\u5712\uff0c\u6e1b\u8f15\u52d5\u7269\u8ca0\u64d4\u3002
      "},{"location":"review/2023/#\u5b87\u5b99","title":"\u5b87\u5b99","text":"

      \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

      • \u6700\u9060\u7684\u6046\u661f\uff0cEarendel
      • \u7e3d\u7d50\u4e86\u4e00\u4e9b\u89c0\u6e2c\u91cd\u529b\u6ce2\u7684\u65b9\u6cd5\uff1b
      • \u89c0\u5bdf\u5230\u6700\u5bcc\u80fd\u91cf\u7684\u5b87\u5b99\u7206\u70b8\u4e8b\u4ef6\uff1b
      • \u4e03\u5e74\u524d\u7684\u5c0f\u884c\u661f\u63a2\u6e2c\u4efb\u52d9\uff0c\u88ab\u6210\u529f\u9001\u56de\uff0c \u4f46\u662f\u76ee\u524d\u4ecd\u56e0\u70ba\u5361\u6b7b\u7684\u87ba\u7d72\u800c\u62c6\u4e0d\u958b\u6a23\u672c\u4fdd\u5b58\u7bb1\u3002

      \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

      • \u96fb\u5b50\u7684\u65b0\u578b\u614b\u767c\u73fe\uff1b
      • \u900f\u904e\u8abf\u6574\u80fd\u968e\u8df3\u8e8d\u7684\u96e3\u6613\u5ea6\uff0c\u4f86\u6a21\u64ec\u9ed1\u6d1e\u7684\u7269\u7406\u7279\u6027\uff1b
      • \u6578\u5468\u4ecd\u80fd\u7dad\u6301\u6e96\u78ba\u6027\u7684\u539f\u5b50\u5149\u675f\u6642\u9418\uff1b
      • \u5e74\u4e2d\u8f5f\u52d5\u4e00\u6642\u7684\u97d3\u570b\u5ba4\u6eab\u8d85\u5c0e\u9ad4\u65b0\u767c\u73fe\u8207\u5176\u6c92\u843d\uff0c \u9019\u7bc7\u4e5f\u8aaa\u660e\u4e86\u9ad8\u6eab\u8d85\u5c0e\u9ad4\u7684\u61c9\u7528\uff1b
      • \u91cf\u5b50\u4f4d\u5143\u8b8a\u5f97\u66f4\u7a69\u5b9a\u4e86\uff1b
      • \u7b2c\u4e00\u500b\u64c1\u6709 1000 \u91cf\u5b50\u4f4d\u5143\u7684\u6676\u7247\uff1b
      • \u786c\u5e63\u5927\u5c0f\u7684\u7c92\u5b50\u52a0\u901f\u5668\u3002
      "},{"location":"review/2023/#\u7da0\u80fd","title":"\u7da0\u80fd","text":"

      \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

      • \u592a\u967d\u80fd\u7684\u56de\u6536\u662f\u8fd1\u5e74\u5f88\u71b1\u9580\u7684\u7814\u7a76\u9818\u57df\uff0c\u751a\u81f3\u53ef\u4ee5\u8aaa\u662f\u65b0\u4e00\u4ee3\u7684\u7da0\u91d1\uff0c\u65e9\u671f\u90fd\u5207\u788e\u7136\u5f8c\u71c3\u71d2\uff0c\u5f88\u6d6a\u8cbb\u3002 \u6709\u4eba\u4f7f\u7528\u5200\u7247\u5207\u5272\uff0c \u4e5f\u6709\u4eba\u7528\u5fae\u6ce2\uff0c \u4e5f\u6709\u4eba\u5229\u7528\u6e05\u6f54\u6a5f\u5668\u4eba\u5ef6\u9577\u5176\u58fd\u547d\uff1b
      • \u9664\u4e86\u7da0\u80fd\u6e1b\u78b3\uff0c\u4e5f\u6709\u4e00\u4e9b\u88dc\u63a2\u65b9\u5f0f\uff0c \u4f8b\u5982\u6fd5\u5ea6\u6355\u6349\u70ad\uff1b
      • \u6e1b\u78b3\u4e4b\u5916\uff0c\u91dd\u5c0d\u5851\u81a0\u7684\u8655\u7406\u4e5f\u8d8a\u4f86\u8d8a\u91cd\u8996\uff0c \u4f8b\u5982\u53ef\u8b8a\u6210\u6d77\u6d0b\u751f\u7269\u98df\u7269\u7684\u5851\u81a0\u548c \u900f\u904e\u78c1\u6027\u9846\u7c92\u53bb\u9664\u5fae\u578b\u5851\u81a0\uff1b
      • \u96a8\u7136\u96fb\u52d5\u8eca\u7684\u7522\u91cf\u9054\u5230\u6b77\u53f2\u9ad8\u5cf0\uff0c \u4f46\u662f\u96fb\u52d5\u8eca\u56e0\u70ba\u91cd\uff0c\u6240\u4ee5\u88fd\u9020\u7684\u74b0\u5883\u5851\u81a0\u66f4\u591a\u3002 \u632a\u5a01\u4e5f\u767c\u73fe\uff0c\u6bd4\u8d77\u9f13\u52f5\u96fb\u52d5\u8eca\uff0c\u66f4\u61c9\u8a72\u9f13\u52f5\u884c\u8d70\uff0c\u6545\u800c\u53d6\u6d88\u96fb\u52d5\u8eca\u7684\u88dc\u52a9\u3002 \u4e0d\u9051\u65bc\u96fb\u52d5\u6c7d\u8eca\uff0c\u7da0\u80fd\u5ba2\u6a5f\u4e5f\u6210\u529f\u98db\u8d8a\u5927\u897f\u6d0b\uff0c \u5b8c\u6210\u968e\u6bb5\u6027\u7684\u7a81\u7834\u3002

      \u80fd\u6e90\u958b\u767c\u76f8\u95dc\uff1a

      • \u51b7\u5a92\u51b7\u6c23\u52a0\u901f\u5730\u7403\u6696\u6216\uff0c\u65b0\u65b9\u6cd5\u900f\u904e\u96fb\u71b1\u5834\u9032\u51fa\u96fb\u5834\uff0c\u9054\u6210\u51b7\u71b1\u4ea4\u66ff\uff1b
      • \u597d\u7684\u7da0\u80fd\u7cfb\u7d71\uff0c\u4f8b\u5982\u82f1\u570b\u7684\u6f6e\u6c50\u767c\u96fb\uff0c \u4e5f\u9700\u8981\u6709\u597d\u7684\u5132\u96fb\u7cfb\u7d71\uff0c\u4f8b\u5982 4GWh \u7684\u5132\u71b1\u767c\u96fb\u5ee0\uff1b
      • \u4f7f\u7528\u7e69\u5b50\u63a1\u96c6\u92f0\u7684\u65b0\u65b9\u6cd5\uff1b
      • \u9223\u9226\u7926\u592a\u967d\u80fd\u7684\u6548\u7387\u7a81\u7834\uff1b
      • \u6c2b\u662f\u745e\u58eb\u5200\uff0c\u5728\u672a\u4f86\u7684\u7da0\u80fd\u626e\u6f14\u91cd\u8981\u89d2\u8272\uff0c\u4eca\u5e74\u4e5f\u6709\u4e00\u4e9b\u7a81\u7834\uff1a \u4e0d\u9700\u8981\u6de1\u6c34\u7684\u5236\u6c2b\u624b\u6cd5\u3001 \u900f\u904e\u5851\u6599\u88fd\u6c2b\uff0c\u8b93\u7e3d\u9ad4\u7684\u88fd\u4f5c\u6210\u672c\u662f\u8ca0\u7684\u3001 \u900f\u904e\u71b1\u80fd\u88fd\u6c2b\uff1b
      • \u96fb\u6c60\u7684\u767c\u5c55\u4e5f\u5f88\u91cd\u8981\uff0c\u597d\u7684\u96fb\u6c60\u53ef\u4ee5\u6e1b\u7de9\u7da0\u80fd\u7684\u767c\u96fb\u4e0d\u7a69\u5b9a\u6027\uff0c\u4e26\u63d0\u4f9b\u6709\u6548\u7684\u7dca\u6025\u7528\u96fb\u3002 \u56fa\u614b\u96fb\u6c60\u662f\u524d\u5e7e\u5e74\u7684\u795e\u8a71\uff0c\u8fd1\u4f86\u767c\u73fe\u4e0d\u5c11\u767c\u5c55\u7684\u56f0\u96e3\uff0c \u9664\u6b64\u4e4b\u5916\u6709\u4e00\u4e9b\u96fb\u6c60\u4e0a\u7684\u7a81\u7834\uff0c\u4f8b\u5982 \u900f\u904e\u7a7a\u6c23\u767c\u96fb\u7684\u92c5\u96fb\u6c60\u3001 \u7528\u9435\u7926\u7576\u9577\u6548\u7684\u96fb\u6c60\u3001 \u5229\u7528\u7a7a\u6c23\u9032\u884c\u767c\u96fb\u3002

      \u90fd\u5e02\u8a2d\u8a08\u76f8\u95dc\uff1a

      • \u81e8\u6d77\u57ce\u5e02\u53ef\u4ee5\u5229\u7528\u6d77\u6c34\u6c96\u99ac\u6876\u548c\u8abf\u7bc0\u6eab\u5ea6\uff1b
      • \u53ef\u7528\u65bc\u4f4f\u5b85\u548c\u9053\u8def\u7684\u6c34\u6ce5\u96fb\u6c60\uff0c \u5176\u5229\u7528\u6c34\u6ce5\u548c\u9ed1\u70ad\uff1b
      • \u4ee5\u5927\u8c61\u76ae\u819a\u70ba\u767c\u60f3\u8a2d\u8a08\u5927\u6a13\u5916\u7246\uff1b
      • \u85e4\u985e\u964d\u6eab\u5efa\u7bc9\uff0c\u6709\u6548\u3001\u4fbf\u5b9c\u3001\u6cdb\u7528\uff1b
      • \u53ef\u4ee5\u5e6b\u52a9\u5efa\u7bc9\u9694\u71b1\u3001\u4fdd\u6eab\u7684\u900f\u660e\u6c23\u51dd\u81a0\u73bb\u7483\uff1b
      • \u90fd\u5e02\u8a2d\u8a08\u4e2d\u958b\u59cb\u601d\u8003\u5982\u4f55\u8b93\u90fd\u5e02\u964d\u6eab\uff0c \u4e26\u4e14\u8a66\u8457\u81ea\u7136\u7684\u5f15\u5165\u98a8\u3002
      "},{"location":"review/2023/#\u4eba\u6587","title":"\u4eba\u6587","text":"

      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

      • \u5c0d\u65bc\u653f\u5e9c\u7684\u4e0d\u74b0\u4fdd\uff0c\u4e0d\u53ea\u662f\u5e74\u8f15\u4eba\u63d0\u51fa\u63a7\u8a34\uff0c \u9084\u6709\u8001\u4eba\uff1b
      • \u4eba\u5011\u78ba\u5be6\u66f4\u74b0\u4fdd\u4e86\uff0c \u9f13\u52f5\u591a\u5403\u7d20\u98df\u3001\u4f7f\u7528\u5927\u773e\u904b\u8f38\u3001\u6e1b\u5c11\u5851\u81a0\u4f7f\u7528\u3001\u4e0d\u642d\u98db\u6a5f\u7684\u6e21\u5047\u3001\u4f7f\u7528\u5c31\u8fd1\u7684\u6709\u6a5f\u8fb2\u7522\uff1b
      • unity \u8981\u6f32\u50f9\u4e86\uff0c \u9019\u4e5f\u5074\u9762\u986f\u793a\u51fa\u904a\u6232\u7522\u696d\u7684\u8870\u9000\uff0c \u4e26\u4e14\u53ef\u4ee5\u770b\u5230\u5168\u4e16\u754c\u904a\u6232\u6536\u5165\u4e03\u5e74\u4f86\u9996\u6b21\u4e0b\u6ed1\uff0c \u4e5f\u6709\u4e0d\u5c11\u7db2\u8def\u4e0a\u7684\u76f8\u95dc\u8a0e\u8ad6\uff1b
      • \u5224\u5b9a\u4e86 3M \u56e0\u70ba\u8ecd\u4e8b\u8033\u585e\u8ce0\u511f\u5343\u5104\u7684\u548c\u89e3\u5b98\u53f8\uff1b
      • \u4eba\u884c\u9053\u7684\u6539\u5584\u8d8a\u4f86\u8d8a\u6ce8\u91cd\uff0c\u4f8b\u5982\uff0c \u8377\u862d\u6c92\u8eca\u8a08\u756b\u3001 \u548c\u53f0\u7063\u4eba\u884c\u9053\u7684\u6539\u5584\uff1b
      • \u5168\u9762\u7981\u6b62\u6d3b\u9ad4\u52d5\u7269\u5be6\u9a57\uff0c \u7ae0\u9b5a\u6709\u75db\u89ba\u3001\u7814\u7a76\u6642\u5c07\u53d7\u5230\u4fdd\u8b77\uff0c \u53e6\u5916\u53f0\u7063\u52d5\u4fdd\u6cd5\u5c07\u8981\u4fee\u6cd5\uff0c\u5167\u5bb9\u5927\u81f4\u662f\uff1a
      • \u9650\u5236\u52d5\u7269\u7576\u734e\u54c1
      • \u6355\u7378\u593e\u7684\u7981\u6b62
      • \u52d5\u6aa2\u54e1\u7684\u5c08\u696d\u3001\u798f\u5229\u548c\u516c\u6b0a\u529b
      • \u4e0d\u7576\u98fc\u990a\u7684\u754c\u5b9a\u548c\u8ab2\u8cac
      • \u7d93\u6fdf\u52d5\u7269\u7684\u798f\u5229
      • \u53f0\u7063\u5efa\u7bc9\u88dc\u78b3\u6cd5\u898f\uff1b
      • \u822a\u7a7a\u57ce\u5fb5\u6536\u5c45\u6c11\u52dd\u8a34\uff0c\u5224\u5b9a\u975e\u6cd5\u5fb5\u6536\uff0c \u4f46\u662f\u91d1\u984d\u4e0d\u8db3\u5c0e\u81f4\u5fb5\u6536\u6236\u4e0d\u6eff\uff1b
      • \u4e2d\u570b\u623f\u5b50\u9700\u6c42\u7684\u8da8\u7de9\u4ee5\u53ca\u6046\u5927\u7684\u56f0\u5883\uff1b
      • \u4e2d\u570b\u7684\u81ea\u88fd\u98db\u6a5f\uff0c\u5617\u8a66\u548c\u6ce2\u97f3\u3001\u806f\u5408\u4e09\u5206\u5929\u4e0b\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

      • \u6b63\u7576\u6027\u5371\u6a5f\u6703\u8b93\u8b0a\u8a00\u548c\u4ec7\u6068\u6027\u8a00\u8ad6\u6607\u83ef\u3002
      • \u6295\u7968\u7684\u533f\u540d\u6027\u5bb9\u6613\u6fc0\u767c\u4ec7\u5916\u60c5\u7bc0\uff0c\u61c9\u8003\u91cf\u589e\u52a0\u4e00\u4e9b\u66b4\u9732\u56e0\u7d20\uff0c\u4f8b\u5982\u8003\u8a66\u548c\u62db\u52df\u3002\u6458\u81ea\u81ea\u7136\u96dc\u8a8c\u7684\u6bcf\u65e5\u8cbc\u6587\u3002
      • \u9802\u5c16\u4eba\u624d\u6bd4\u7684\u4e0d\u662f\u667a\u529b\uff0c\u800c\u662f\u8b19\u905c\u3002
      • \u4eba\u624d\u5354\u4f5c\u8005\u6bd4\u5c08\u696d\u80fd\u529b\u66f4\u96e3\u5f97\u3002
      • Z\u4e16\u4ee3\u7684\u9069\u61c9\u5fc5\u8981\u3002
      • \u76f4\u5230\u6709\u4e00\u5929\uff0c\u4f60\u610f\u8b58\u5230\u4e86\u4f60\u6703\u6b7b\uff0c\u624b\u982d\u7684\u4e8b\u60c5\u505a\u4e0d\u5b8c\uff0c\u4e00\u5207\u5c31\u90fd\u767c\u751f\u4e86\u6539\u8b8a\u3002 \u5f9e\u90a3\u4e00\u5929\u958b\u59cb\uff0c\u4f60\u82b1\u8cbb\u7684\u6642\u9593\u624d\u662f\u771f\u6b63\u82b1\u51fa\u53bb\u7684\u6642\u9593\uff0c\u99ac\u4e01\u00b7\u65af\u79d1\u585e\u65af\u3002
      • \u8afe\u8c9d\u723e\u75c7\uff0c\u7576\u4f60\u7372\u5f97\u8afe\u8c9d\u723e\u6642\uff0c\u5927\u5bb6\u5c31\u6703\u958b\u59cb\u554f\u4f60\u5404\u7a2e\u9762\u5411\u7684\u554f\u984c\uff0c\u7136\u5f8c\u4f60\u5c31\u6703\u958b\u59cb\u89ba\u5f97\u4f60\u4ec0\u9ebc\u90fd\u61c2\u3002\u8afe\u8c9d\u723e\u734e\u5f97\u4e3b\uff0cPaul Nurse\u3002
      • \u8fd1\u5e74\u4f86\u8ad6\u6587\u6578\u6fc0\u589e\uff0c\u4f46\u662f\u79d1\u6280\u696d\u6c92\u6709\u5275\u65b0\u3002
      • \u58ef\u4e16\u4ee3\u8a08\u5283\uff0c\u9f13\u52f5\u8001\u5e74\u4eba\u51fa\u4f86\u6d3b\u52d5\u7684\u8a08\u756b\uff0c\u67ef\u6587\u54f2\u3002
      • \u5584\u610f\u662f\u570b\u5bb6\u6700\u5927\u7684\u5c4f\u969c\uff0c\u67ef\u6587\u54f2\u3002
      "},{"location":"review/2023/#\u7e3d\u7d50","title":"\u7e3d\u7d50","text":"

      \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\u88e1\u6709\u4e00\u4e9b\u5fc3\u5f97\u8ddf\u96a8\u7b46\u3002

      \u9019\u88e1\u65b9\u4fbf\u6211\u505a\u6574\u7406\uff0c\u548c\u505a issues \u4f86\u63d0\u9192\u81ea\u5df1\u5f85\u505a\u4e8b\u9805\u3002

      "},{"location":"#\u6700\u65b0\u6587\u7ae0","title":"\u6700\u65b0\u6587\u7ae0","text":"

      \u958b\u767c\u9ad4\u9a57\u7684\u6539\u9032\uff0c\u958b\u767c\u9ad4\u9a57\u8981\u512a\u5316\uff0c\u4f46\u662f\u8a72\u600e\u9ebc\u8b93\u4ed6\u7528\u6578\u64da\u8b49\u660e\u662f\u5426\u6709\u6548\uff1f

      {384x461}DALL\u00b7E

      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":"latest-works/","title":"Latest works","text":"

      \u958b\u767c\u9ad4\u9a57\u7684\u6539\u9032\uff0c\u958b\u767c\u9ad4\u9a57\u8981\u512a\u5316\uff0c\u4f46\u662f\u8a72\u600e\u9ebc\u8b93\u4ed6\u7528\u6578\u64da\u8b49\u660e\u662f\u5426\u6709\u6548\uff1f

      {384x461}DALL\u00b7E

      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":"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

      • \u6d66\u6fa4\u76f4\u6a39
      • \u77f3\u585a\u771f\u4e00
      • \u5bcc\u5805\u7fa9\u535a

      \u6f2b\u756b\u5217\u8868\uff1a

      • \u4e09\u8089\u5fc5\u8d77\u00b7\u7259\u9738\u5b50
      • \u62f3\u9858\u963f\u4fee\u7f85
        • \u62f3\u9858\u5967\u7c73\u54c9
      • \u9ebb\u751f\u7fbd\u5442
      • \u4eca\u969b\u4e4b\u570b\u7684\u95d6\u95dc\u8005
        • RESET
      • \u7e6a\u672c\u5948\u592e
      • \u5373\u4f7f\u5982\u6b64\u6211\u9084\u662f\u559c\u6b61\u4f60 + \u5f90\u8b7d\u5ead
      • \u9a37\u52d5\u6642\u7bc0\u7684\u5c11\u5973\u5011\u554a
      • \u8429\u539f\u9ebb\u7f8e
      • \u5973\u5152\u7684\u670b\u53cb
      • \u7de8\u8f2f\u7684\u4e00\u751f
      • \u85e4\u672c\u6a39
      • \u93c8\u92f8\u4eba
      • \u4f50\u4f50\u6728\u4ed6\u63a5\u4e0b\u4e86\u5b50\u5f48
      • \u59b9\u59b9\u7684\u59ca\u59ca
      • \u6200\u611b\u4ee4\u4eba\u76f2\u76ee
      • \u708e\u62f3
      • \u518d\u898b\u4e86\u7e6a\u68a8
      • \u6dfa\u91ce\u4e00\u4e8cO
      • \u665a\u5b89\u5e03\u5e03
      • \u6a02\u8207\u8def
      • \u96f6\u843d
      • \u8679\u4e4b\u539f
      • \u77f3\u585a\u771f\u4e00
      • \u5cb3
      • BLUE GIANT
      • \u82b1\u6fa4\u5065\u543e
      • \u8001\u8655\u7537\u7684\u6625\u5929
      • \u8acb\u53eb\u6211\u82f1\u96c4
        • \u516c\u5f0f\u5408\u96c6
      • \u5730\u4e0b\u5fcd\u8005
      • \u5c71\u672c\u82f1\u592b
      • \u5149\u4eba
      • \u6bba\u624b\u963f\u4e00
      • \u7570\u8b8a\u8005
      • \u7532\u6590\u8c37\u5fcd
      • \u8d85\u667a\u904a\u6232
      • \u65b0\u4fe1\u9577\u516c\u8a18
      • \u6c99\u6751\u5ee3\u660e
      • \u8840\u511f\u91d1
      • \u8ecd\u50b3
      • \u5e03\u8389\u5e0c\u7279\u7684\u665a\u9910
      • \u96fb\u6ce2\u554a\uff0c\u807d\u8457\u5427
      • \u5ca9\u660e\u5747
      • \u96f6\u91cc + \u5ba4\u4e95\u5927\u8cc7
      • \u6b77\u53f2\u4e4b\u773c
      • \u6709\u98a8\u5b50\u5728\u7684\u5e97
      • \u62bc\u898b\u4fee\u9020
      • HAPPINESS
      • \u5fd7\u4e43\u91ac\u7121\u6cd5\u8aaa\u51fa\u81ea\u5df1\u7684\u540d\u5b57
      • \u8840\u4e4b\u8f4d
      • \u6d66\u6fa4\u76f4\u6a39
      • 20 \u4e16\u7d00\u5c11\u5e74
      • MONSTER
      • PLUTO \uff5e\u51a5\u738b\uff5e
      • \u671d\u5287
      • \u6253\u5674\u568f
      • \u6e21\u908a\u6f64
      • \u4e09\u5104\u5143\u4e8b\u4ef6\u5947\u8ac7
      • \u5982\u4ef6
      • \u9ed1\u91d1\u83bd\u592b
      • \u677e\u672c\u525b
      • LOTTA RAIN
      • \u7518\u751c\u4e4b\u6c34
      • \u80b2\u6c5f\u7dbe
      • G \u5f26\u4e0a\u7684\u4f60\u548c\u6211
      • Torch Song Ecology
      • \u5176\u5be6\u4e26\u4e0d\u5728\u4e4e\u4f60
      • \u6708\u4e0b\u795e\u5947\u5bb6\u65cf
      • \u7d14\u6de8\u8106\u5f31\u7684\u5fc3
      • \u67f4\u9580\u6587
      • Age35
      • \u6771\u4eac\u611b\u60c5\u6545\u4e8b
      • \u611b\u60c5\u767d\u76ae\u66f8
      • \u5ca9\u672c\u5948\u7dd2
      • \u91d1\u4e4b\u570b\u6c34\u4e4b\u570b
      • \u6628\u65e5\u5fc3\u6674\u5929
      • \u4f5c\u77f3\u8cb4\u6d69
      • rin
      • \u5800\u5c3e\u7701\u592a
      • \u523b\u523b
      • \u946b\u946b
      • \u76f8\u7530\u88d5
      • 1518
      • \u52c7\u8005\u4e00\u751f\u6b7b\u4e00\u56de
      • \u8352\u5ddd\u5f18
      • \u767e\u59d3\u8cb4\u65cf
      • \u767d\u9280\u4e4b\u5319
      • \u4e9e\u723e\u65af\u862d\u6230\u8a18
      • \u677e\u672c\u76f4\u4e5f
      • \u6ce2\u5947\u5eab\u6d1b
      • \u602a\u7378 8 \u865f
      • \u718a\u5009\u9686\u654f
      • \u5341\u4e8c\u500b\u60f3\u6b7b\u7684\u5c11\u5e74 + \u51b2\u65b9\u4e01
      • \u610f\u5916
      • \u87f2\u5e2b\uff08\u5c4d\u9304\uff09
      • \u5c0f\u6797\u5d07\u4eba
      • \u919c\u86d9\u59d1\u5a18
      • \u91ce\u4eba\u8f49\u751f
      • \u543e\u5ce0\u547c\u4e16\u6674
      • \u9b3c\u6ec5\u4e4b\u5203
      • jellybean
      • \u536f\u771f\u50b3
      • \u4e2d\u6751\u52c7\u5fd7
      • \u516d\u9053\u7684\u60e1\u5973\u5011
      • \u6fa4\u7530\u65b0
      • \u66b4\u529b\u884c\u52d5 + \u6dfa\u4e95\u84ee\u6b21
      • \u65b0\u5ddd\u6b0a\u5175\u885b
      • \u72fc\u4e0d\u6703\u5165\u7720
      • KUJIRA
      • \u842c\u6b72\uff01
      • \u5f18\u677e\u51c9
      • \u919c\u7537\u771f\u6230\u58eb\uff08\u80a5\u5b85\u52c7\u8005\uff09 + \u4e0a\u6708\u30f2\u30b5\u30e0
      • \u76f8\u539f\u5f18\u6cbb
      • \u771f\uff0e\u7570\u7a2e\u683c\u9b25\u5927\u6230
      • \u4e09\u6d66\u8ffd\u513a
      • \u5929\u7a7a\u4fb5\u72af + \u5927\u7fbd\u9686\u5ee3
      • \u829d\u6751\u88d5\u540f
      • \u908a\u7de3\u884c\u52d5 + \u30ad\u30e0\u30e9\u30c0\u30a4\u30b9\u30b1
      • \u6b64\u5143\u548c\u6d25\u4e5f
      • \u7028\u6236\u5167\u6d77
      • \u305f\u304b\u307f\u3061
      • \u767e\u842c\u576a\u8ff7\u5bae\uff08\u767e\u842c\u758a\u8ff7\u5bae\uff09
      • \u9999\u6708\u7f8e\u591c
      • \u5c0f\u66f8\u75f4\u7684\u4e0b\u524b\u4e0a\uff08\u611b\u66f8\u7684\u4e0b\u524b\u4e0a\uff09 + \u9234\u83ef
      • \u4e09\u90e8\u656c
      • \u9b4d\u9b4e\u7684\u6416\u7c43\u66f2
      • \u516b\u6728\u6559\u5ee3
      • \u7375\u9b54\u6230\u8a18\uff08Claymore \u5927\u528d\uff09
      • \u5149\u6c38\u5eb7\u5247
      • \u795e\u79d8\u5de8\u4eba\u963f\u74e6\u65af
      • \u6771\u6751\u660e\u5b50
      • \u6771\u4eac\u767d\u65e5\u5922\u5973
      • \u798f\u5730\u7ffc
      • \u547d\u904b\u8f2a\u8ff4\uff08\u5e7b\u89ba\u518d\u4e00\u6b21\uff09
      • \u85e4\u7530\u548c\u65e5\u90ce
      • \u9b41\u5121\u99ac\u6232\u5718\uff08\u9b54\u5076\u99ac\u6232\u5718\uff09
      • \u7dd2\u57ce\u771f
      • \u8c93\u4e4b\u5bfa\u7684\u77e5\u6069\u59d0
      • \u843d\u5408\u5c1a\u4e4b
      • \u7f6a\u8207\u7f70
      • \u7709\u6708\u554d
      • \u611b\u5728\u96e8\u904e\u5929\u6674\u6642\uff08\u6200\u5982\u96e8\u6b62\uff09
      • \u5bcc\u660e\u4ec1\u65b0
      • \u5947\u5999\u8f15\u72c2\u7684\u5354\u594f\u66f2~\u7570\u5f69\u7684\u516c\u4e3b
      • \u9ad8\u6a4b\u7559\u7f8e\u5b50
      • \u76f8\u805a\u4e00\u523b
      • \u6751\u4e0a\u5d07
      • \u661f\u5b88\u72ac
      • \u4f0a\u52e2\u3068\u3082\u304b
      • \u60e9\u5f79 339 \u5e74
      • \u5967\u6d69\u54c9
      • \u72ac\u820d
      • \u8535\u4eba\u5e78\u660e
      • \u73a9\u5076\u6bba\u4eba\u904a\u6232 + \u30ce\u6751\u512a\u4ecb
      • \u672c\u7530\u771f\u543e
      • \u7834\u58de\u7378
      • \u7551\u512a\u4ee5
      • \u8309\u8389
      • \u9593\u7028\u5143\u6717
      • \u6295\u7968\u6a5f\u5668\u4eba\u5c11\u5973
      • \u6b7b\u4ea1\u9810\u544a
      • \u6dbc\u5ddd\u9234
      • \u904a\u62323\u4eba\u5a18
      • \u304b\u306d\u3082\u3068
      • \u6211\u5152\u5b50\u597d\u50cf\u8f49\u751f\u53bb\u7570\u4e16\u754c
      • \u5bcc\u5805\u7fa9\u535a
      • \u7375\u4eba
      • KAITO
      • \u85cd\u8272\u65d7\u5e5f
      • \u5c0f\u897f\u660e\u65e5\u7fd4
      • \u9858\u4f86\u4e16\u70ba\u4ed6\u4eba
      • \u82e5\u9d3b\u6587\u5316
      • \u5c0b\u8831\u4eba
      • \u4e09\u6d66\u5efa\u592a\u90ce
      • \u70d9\u5370\u6230\u58eb
      • \u8aeb\u5c71\u5275
      • \u9032\u64ca\u7684\u5de8\u4eba
      • \u91d1\u57ce\u5b97\u5e78
      • \u617e\u671b\u5bc4\u751f
      • \u4f50\u85e4\u6d0b\u58fd
      • \u5bc4\u751f\u4eba\u6bcd
      • \u52a0\u85e4\u6587\u5b5d
      • \u7b2c\u4e09\u5343\u5e74\u7684\u795e\u5c0d\u61c9
      • \u516b\u76ee\u8ff7
      • \u901a\u5f80\u590f\u5929\u7684\u96a7\u9053\uff0c\u518d\u898b\u7684\u51fa\u53e3\u5168
      • \u68ee\u9ad8\u5915\u6b21
      • \u9322\u9032\u7403\u5834 + \u8db3\u7acb\u91d1\u592a\u90ce
      • \u8fbb\u667a
      • \u9006\u8f49\u76e3\u7763 GIANT KILLING
      • \u4e95\u4e0a\u96c4\u5f65
      • \u6d6a\u4eba\u528d\u5ba2\uff08\u6d6a\u5ba2\u884c\uff09
      • \u6afb\u4e95\u756b\u9580
      • \u4e9e\u4eba
      • \u5357\u52dd\u4e45
      • \u6bba\u624b\u5bd3\u8a00
      • \u5c71\u5ddd\u76f4\u8f1d
      • MY HOME HERO + \u671d\u57fa\u52dd\u58eb
      • \u6211\u7684\u73fe\u5be6\u662f\u6200\u611b\u904a\u6232 \u5f6d\u6770 + \u308f\u308b\u3044\u304a\u3068\u3053 + \u5948\u6829
      • FLIPFLOPs
      • \u9054\u723e\u6587\u904a\u6232
      • \u4e18\u91ce\u512a
      • \u4e8b\u8207\u9858\u9055\u7684\u4e0d\u6b7b\u5192\u96aa\u8005 + \u4e2d\u66fe\u6839\u30cf\u30a4\u30c5
      • \u83c5\u539f\u656c\u592a
      • \u5bb6\u65cf\u5c0d\u6297\u6bba\u622e\u6703\u6230
      • \u82a5\u898b\u4e0b\u4e0b
      • \u5492\u8853\u56de\u6230
      • \u30cf\u30e0\u7537\u30fb\u85fb
      • \u5730\u7344\u6a21\u5f0f\uff5e\u559c\u6b61\u901f\u901a\u904a\u6232\u7684\u73a9\u5bb6\u5728\u5ee2\u8a2d\u5b9a\u7570\u4e16\u754c + \u9435\u7530\u733f\u5152
      • ONE
      • \u4e00\u62f3\u8d85\u4eba + \u6751\u7530\u96c4\u4ecb
      • \u4f50\u85e4\u771f\u901a
      • \u9019\u500b\u4e16\u754c\u6f0f\u6d1e\u767e\u51fa
      • \u5c3e\u7530\u69ae\u4e00\u90ce
      • \u6d77\u8cca\u738b
      • \u5c0f\u5c71\u5b99\u54c9
      • \u5b87\u5b99\u5144\u5f1f
      • \u5fd7\u540d\u5742\u9ad8\u6b21
      • Monkey Peak + \u7c82\u7530\u6643\u5b8f
      • \u56db\u8449\u5915\u30c8
      • \u6d3e\u5c0d\u5496\u5b54\u660e\uff08\u6d3e\u5c0d\u6d6a\u5ba2\u8af8\u845b\u5b54\u660e\uff09 + \u5c0f\u5ddd\u4eae
      • \u786c\u68a8\u83dc
      • \u9999\u683c\u91cc\u62c9\u00b7\u958b\u62d3\u7570\u5883\uff5e\u7cde\u4f5c\u7375\u624b\u6311\u6230\u795e\u4f5c\uff5e + \u4e0d\u4e8c\u6dbc\u4ecb
      • \u5341\u65e5\u8349\u8f14
      • \u570b\u738b\u6392\u540d
      • \u9ce5\u98fc\u831c
      • \u65e9\u5b89\uff0c\u56de\u4f86\u62c9
      • \u6797\u7530\u7403
      • \u5927\u9ed1\u6697
      • \u94c3\u6728\u52dd\u548c\uff08\u30de\u30b5\u30ab\u30ba\uff09
      • \u8aaa\u8457\u300c\u8acb\u5c07\u6211\u7684\u5b69\u5b50\u6bba\u6b7b\u300d\u7684\u7236\u6bcd\u5011 \u2014 \u62bc\u5ddd\u525b
      • \u7121\u6cd5\u5206\u5272\u86cb\u7cd5\u7684\u5931\u8db3\u5c11\u5e74\u5011 \u2014 \u5bae\u53e3\u5e78\u6cbb
      "},{"location":"essay/","title":"\u96a8\u7b46","text":"

      \u9019\u88e1\u662f\u96a8\u7b46\uff0c\u7d00\u9304\u5404\u7a2e\u6771\u897f\u3002\u6709\u932f\u6b61\u8fce\u4f86\u4fee\u6b63\u3002

      "},{"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

      • \u500b\u4eba\uff0c\u5de5\u4f5c\u6548\u7387\u3001\u5275\u9020\u529b\u3001\u5b78\u7fd2\uff1b
      • \u5718\u968a\uff0c\u7a0b\u5f0f\u78bc\u54c1\u8cea\u3001\u6280\u8853\u50b5\uff1b
      • \u7d44\u7e54\uff0c\u54e1\u5de5\u7559\u4efb\u3001\u5275\u65b0\u3001\u7372\u5229\u3001\u66f4\u5bec\u5ee3\u7684\u76ee\u6a19\u3002

      \u5728\u512a\u5316\u958b\u767c\u9ad4\u9a57\u4e0a\uff0c\uff08\u5047\u8a2d\uff09\u6709\u4e09\u500b\u6307\u6a19\u53ef\u4ee5\u8003\u616e\uff1a

      • \u5fc3\u6d41\uff0c\u958b\u767c\u6642\u7684\u6c88\u6d78\u5ea6\u3002 \u53ef\u900f\u904e\u74b0\u5883\u7684\u6539\u5584\uff08\u5982\u5b89\u975c\u7684\u74b0\u5883\uff09\u3001\u5de5\u5177\u7684\u512a\u5316\uff08\u5982\u7d71\u4e00\u4ecb\u9762\uff0c\u700f\u89bd\u5668\u548c IDE \u662f\u5426\u5e38\u5e38\u5207\u63db\uff09\u3001 \u500b\u4eba\u6216\u5718\u968a\u7684\u6642\u9593\u898f\u5283\uff08\u5982\u8b93\u5de5\u7a0b\u81ea\u884c\u898f\u5283\u5c08\u5fc3\u958b\u767c\u7684\u6642\u9593\uff09\u3002
      • \u56de\u994b\uff0c\u9700\u8981\u5f9e\u5916\u90e8\u53bb\u7372\u5f97\u9032\u4e00\u6b65\u5f80\u524d\u7684\u63a8\u529b\uff0c\u901f\u5ea6\u548c\u54c1\u8cea\u662f\u5176\u4e2d\u7684\u91cd\u8981\u8861\u91cf\u9ede\u3002 \u4f8b\u5982\u7a0b\u5f0f\u78bc\u591a\u4e45\u5f97\u5230\u5be9\u95b1\u4e26\u653e\u884c\u3001\u4e00\u500b\u5167\u90e8\u7cfb\u7d71\u7591\u554f\uff08\u4f8b\u5982\u4f9d\u8cf4\u7684 API \u4ecb\u9762\uff09\u591a\u4e45\u5f97\u5230\u56de\u7b54\u3002
      • \u8a8d\u77e5\u8ca0\u8377\uff0c\u8166\u529b\u904b\u4f5c\u6642\u8cc7\u8a0a\u7684\u8ca0\u8f09\u7a0b\u5ea6\u3002 \u8a8d\u77e5\u8ca0\u8377\u53c8\u5206\u70ba\u4e09\u500b\u985e\u5225\u3002 \u5167\u90e8\u56fa\u6709\uff08intrinsic\uff09\uff0c\u8655\u7406\u554f\u984c\u6642\u672c\u4f86\u5c31\u9808\u5177\u5099\u7684\u77e5\u8b58\u3001 \u5916\u986f\u884c\u70ba\uff08extraneous\uff09\uff0c\u8cc7\u8a0a\u5448\u73fe\u7684\u65b9\u5f0f\uff0c\u53ef\u900f\u904e\u66f4\u76f4\u89c0\u7684\u5448\u73fe\u4f86\u964d\u4f4e\u3001 \u610f\u7fa9\u95dc\u806f\uff08germane\uff09\uff0c\u591a\u500b\u8cc7\u8a0a\u4e4b\u9593\u7684\u95dc\u4fc2\uff0c\u8d8a\u9b06\u6563\u4ee3\u8868\u9700\u8981\u82b1\u66f4\u591a\u8166\u529b\u53bb\u4e32\u806f\u3002

      \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. 1=\u5f9e\u4e0d\u30012=\u9bae\u5c11\u30013=\u5076\u723e\u30014=\u7d93\u5e38\u30015=\u5e7e\u4e4e\u00a0\u21a9\u21a9\u21a9\u21a9\u21a9\u21a9

      2. 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

      3. 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

      4. 1=0-20%\u30012=21-40%\u30013=41-60%\u30014=61-80%\u30015=81-100%\u00a0\u21a9

      5. 1=\u975e\u5e38\u7cdf\u30012=\u7cdf\u7cd5\u30013=\u53ef\u63a5\u53d7\u30014=\u597d\u30015=\u975e\u5e38\u597d\u00a0\u21a9\u21a9

      6. 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

      7. 1=\u6bcf\u65e5\u30012=\u6bcf\u9031\u30013=\u6bcf\u6708\u30014=\u6bcf\u6578\u6708\u30015=\u5f9e\u4e0d\u00a0\u21a9

      "},{"location":"essay/gpl-check/","title":"GPL \u7684\u6aa2\u67e5","text":"

      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

      • \u628a\u6240\u6709 Repo \u7684 Dependecy \u6574\u5408\u8d77\u4f86
      • \u900f\u904e\u5957\u4ef6\u7ba1\u7406\u5de5\u5177\u7684 API \u6aa2\u67e5\u5957\u4ef6\u7684 License
      • npm
      • composer
      • maven
      "},{"location":"essay/gpl-check/#\u65b9\u6cd5","title":"\u65b9\u6cd5","text":"

      \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

      • \u7be9\u9078\u9700\u8981\u7684\u8cc7\u6599
        1. \u9700\u8981\u5927\u65bc\u7b49\u65bc\u56db\u500b\u53c3\u6578\uff0c\u4e5f\u5c31\u662f\u81f3\u5c11\u9700\u8981\u6709 app \u540d\u7a31
        2. path\uff08\u7b2c\u4e8c\u500b\u53c3\u6578\uff09\u9700\u8981\u5305\u542b dependency \u9019\u95dc\u9375\u5b57
        3. project \u540d\u7a31\uff08\u4f46\u4e09\u500b\u53c3\u6578\uff09\u4e0d\u80fd\u5305\u542b\u5167\u90e8\u4f7f\u7528\u7684
        4. project \u540d\u7a31\u5fc5\u9808\u5305\u542b .
        5. \u628a\u7d50\u679c\u4ee5 / \u9023\u7d50
      • \u900f\u904e\u524d\u9762\u5f97\u5230 metadata \u7684\u65b9\u5f0f\u5f97\u5230\u6700\u65b0\u7248\u672c
      • \u5f97\u5230\u6700\u65b0\u7248\u672c\u7684 license
      $ 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":"
      • block-ui MIT GPL
      • easejs GPL-3.0+
      • express-sitemap GPL-3.0
      • hipchatter GPL-2.0
      • intro.js AGPL-3.0
      • jszip MIT GPL-3.0-or-later
      • jszip-utils MIT GPL-3.0
      • mariadb LGPL-2.1-or-later
      • node-forge BSD-3-Clause GPL-2.0
      • pm2 AGPL-3.0
      • scrollmagic MIT GPL-3.0+
      • sonarqube-scanner LGPL-3.0
      "},{"location":"essay/gpl-check/#composer_1","title":"Composer","text":"
      • matomo/device-detector LGPL-3.0-or-later
      • php-amqplib/php-amqplib LGPL-2.1-or-later
      • phpoffice/phpexcel LGPL-2.1
      • phpmailer/phpmailer LGPL-2.1-only
      • silvertipsoftware/wkhtmltopdf-amd64 LGPL-3.0-only
      "},{"location":"essay/gpl-check/#maven_1","title":"Maven","text":"

      build.gradle \u548c pom.xml \u90fd\u8981\u8dd1\u5b8c\u3002

      • com.experlog/xapool LGPL
      • com.github.jsqlparser/jsqlparser GNU-Library-or-Lesser-General-Public-License-(LGPL)-V2.1 The-Apache-Software-License-Version-2.0
      • com.rabbitmq/amqp-client AL-2.0 GPL-v2 MPL-2.0
      • com.whalin/Memcached-Java-Client LGPLv3
      • net.java/jvnet-parent CDDL-1.1 GPL2-w/-CPE
      • org.glassfish.jersey/project EPL-2.0 The-GNU-General-Public-License-(GPL)-Version-2-With-Classpath-Exception Apache-License-2.0 Modified-BSD
      • org.glassfish.jersey.media/project EPL-2.0 The-GNU-General-Public-License-(GPL)-Version-2-With-Classpath-Exception Apache-License-2.0
      • org.javassist/javassist MPL-1.1 LGPL-2.1 Apache-License-2.0
      • org.mariadb.jdbc/mariadb-java-client LGPL-2.1
      • org.sonatype.oss/oss-parent LGPL
      "},{"location":"essay/nginx-changelog/","title":"Nginx from 1.18.0 to 1.22.1","text":"

      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:

      • 1-byte memory overwrite might occur during DNS server response processing if the 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.0

      Feature:

      • the 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.1
      • the userid_flags directive. 1.19.3
      • the proxy_cookie_flags directive. 1.19.3
      • the same source files can now be specified in different modules while building addon modules. 1.19.5
      • the -e switch. 1.19.5
      • \ud83d\udc41\ufe0f now, if free worker connections are exhausted, nginx starts closing not only keepalive connections, but also connections in lingering close. 1.19.7
      • flags in the proxy_cookie_flags directive can now contain variables. 1.19.8
      • the $connection_time variable. 1.19.10
      • the keepalive_time directive. 1.19.10
      • request body filters API now permits buffering of the data being processed. 1.21.2
      • support for sendfile(SF_NOCACHE) on FreeBSD. 1.21.5

      Bugfix:

      • negative size buf in writer alerts might appear in logs if a memcached server returned a malformed response. 1.19.1
      • on XFS and NFS file systems disk cache size might be calculated incorrectly. 1.19.1
      • zero length UDP datagrams were not proxied. 1.19.1
      • \ud83d\udc41\ufe0f nginx did not delete unix domain listen sockets during graceful shutdown on the SIGQUIT signal. 1.19.1
      • a segmentation fault might occur in a worker process if different large_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.3
      • the stale-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.3
      • in request body filters internal API. 1.19.5
      • upstream sent frame for closed stream errors might occur when working with gRPC backends. 1.19.5
      • nginx returned the 400 response on requests like GET http://example.com?args HTTP/1.0. 1.19.6
      • a segmentation fault might occur in a worker process if HTTPS was used; the bug had appeared in 1.19.5. 1.19.6
      • no live upstreams errors if a server inside upstream block was marked as down. 1.19.6
      • in the add_trailer directive. 1.19.7
      • HEAD requests were handled incorrectly if the return directive was used with the image_filter or xslt_stylesheet directives. 1.19.7
      • zero 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.7
      • in the eventport method. 1.19.8
      • some errors were logged as unknown if nginx was built with glibc 2.32. 1.19.8
      • in the eventport method. 1.19.9
      • \ud83d\udc41\ufe0f nginx might not detect that a connection was already closed by the client when waiting for auth_delay or limit_req delay, or when working with backends. 1.19.9
      • \ud83d\udc41\ufe0f nginx might not close a connection till keepalive timeout expiration if the connection was closed by the client while discarding the request body. 1.19.9
      • special characters were not escaped during automatic redirect with appended trailing slash. 1.21.0
      • reduced memory consumption for long-lived requests when proxying with more than 64 buffers. 1.21.1
      • keepalive connections with gRPC backends might not be closed after receiving a GOAWAY frame. 1.21.1
      • nginx did not escape \", <, >, \\, ^, ``,{,|, and}` characters when proxying with changed URI. 1.21.1
      • invalid headers from backends were logged at the info level instead of error; the bug had appeared in 1.21.1. 1.21.4
      • \ud83d\udc41\ufe0f after receiving a response with incorrect length from a proxied backend nginx might nevertheless cache the connection. Thanks to Awdhesh Mathpal. 1.21.4
      • in the $content_length variable when using chunked transfer encoding. 1.21.4
      • nginx returned the Connection: keep-alive header line in responses during graceful shutdown of old worker processes. 1.21.6
      • when using EPOLLEXCLUSIVE on Linux client connections were unevenly distributed among worker processes. 1.21.6

      Change:

      • now extra data sent by a backend are always discarded. 1.19.1
      • optimization of client request body reading when using chunked transfer encoding. 1.19.2
      • now nginx starts closing keepalive connections before all free worker connections are exhausted, and logs a warning about this to the error log. 1.19.2
      • the default value of the keepalive_requests directive was changed to 1000. 1.19.10
      • optimization of configuration testing when using many listening sockets. 1.21.1
      • \ud83d\udc41\ufe0f now nginx always returns an error if spaces or control characters are used in the Host request header line. 1.21.1
      • \ud83d\udc41\ufe0f now nginx always returns an error if spaces or control characters are used in a header name. 1.21.1
      • \ud83d\udc41\ufe0f now nginx always returns an error if spaces or control characters are used in the request line. 1.21.1
      • \ud83d\udc41\ufe0f now nginx always returns an error if both Content-Length and Transfer-Encoding header lines are present in the request. 1.21.1
      • \ud83d\udc41\ufe0f now nginx always returns an error for the CONNECT method. 1.21.1
      • export ciphers are no longer supported. 1.21.2
      • now nginx rejects HTTP/1.0 requests with the Transfer-Encoding header line. 1.21.2
      • the default value of the sendfile_max_chunk directive was changed to 2 megabytes. 1.21.4
      • now nginx always uses sendfile(SF_NODISKIO) on FreeBSD. 1.21.5
      • now nginx is built with the PCRE2 library by default. 1.21.5

      Workaround:

      • [crit] SSL_write() failed messages might appear in logs when using OpenSSL 1.1.1. 1.19.3
      • gzip filter failed to use preallocated memory alerts appeared in logs when using zlib-ng. 1.19.10
      "},{"location":"essay/nginx-changelog/#by-module","title":"By module","text":"

      Grouped by modules.

      Bugfix:

      • in the ngx_http_xslt_filter_module. 1.19.2
      • in the ngx_http_slice_module. 1.19.2
      • in the ngx_http_flv_module and ngx_http_mp4_module. Thanks to Chris Newton. 1.19.6
      • the mp4_start_key_frame directive in the ngx_http_mp4_module. Thanks to Tracey Jaquith. 1.21.4
      "},{"location":"essay/nginx-changelog/#stream","title":"Stream","text":"

      Feature:

      • the ngx_stream_set_module. 1.19.3
      • the fastopen parameter of the listen directive in the stream module. Thanks to Anbang Wen. 1.21.0
      • support for SSL_sendfile() when using OpenSSL 3.0. 1.21.4
      • the ssl_alpn directive in the stream module. 1.21.4
      • the proxy_half_close directive in the stream module. 1.21.4
      "},{"location":"essay/nginx-changelog/#mail-proxy","title":"Mail proxy","text":"

      Feature:

      • the proxy_smtp_auth directive in mail proxy. 1.19.4
      • the proxy_protocol parameter of the listen directive, the proxy_protocol and set_real_ip_from directives in mail proxy. 1.19.8
      • the mail proxy module supports POP3 and IMAP pipelining. 1.21.0
      • the max_errors directive in the mail proxy module. 1.21.0

      Bugfix:

      • nginx could not be built with the mail proxy module, but without the ngx_mail_ssl_module; the bug had appeared in 1.19.8. 1.19.9
      • connections with clients in the mail proxy module might be closed unexpectedly when using SMTP pipelining. 1.21.0
      "},{"location":"essay/nginx-changelog/#by-protocols","title":"By protocols","text":"

      Grouped by protocols.

      "},{"location":"essay/nginx-changelog/#ssl","title":"SSL","text":"

      Feature:

      • the ssl_reject_handshake directive. 1.19.4
      • the ssl_conf_command, proxy_ssl_conf_command, grpc_ssl_conf_command, and uwsgi_ssl_conf_command directives. 1.19.4
      • variables support in the proxy_ssl_certificate, proxy_ssl_certificate_key grpc_ssl_certificate, grpc_ssl_certificate_key, uwsgi_ssl_certificate, and uwsgi_ssl_certificate_key directives. 1.21.0
      • the Auth-SSL-Protocol and Auth-SSL-Cipher header lines are now passed to the mail proxy authentication server. Thanks to Rob Mueller. 1.21.2
      • OpenSSL 3.0 compatibility. 1.21.2
      • the $ssl_alpn_protocol variable. 1.21.4
      • the $ssl_curve variable. 1.21.5

      Bugfix:

      • in error handling when using the ssl_ocsp directive. 1.19.1
      • proxying to uwsgi backends using SSL might not work. Thanks to Guanzhong Chen. 1.19.1
      • SSL_shutdown() failed (SSL: ... bad write retry) messages might appear in logs. 1.19.2
      • SSL shutdown might not work. 1.19.2
      • memory leak if the ssl_ocsp directive was used. 1.19.2
      • SSL_shutdown() failed (SSL: ... bad write retry) messages might appear in logs; the bug had appeared in 1.19.2. 1.19.3
      • SSL shutdown did not work when lingering close was used. 1.19.5
      • SSL variables might be empty when used in logs; the bug had appeared in 1.19.5. 1.21.1
      • the security level, which is available in OpenSSL 1.1.0 or newer, did not affect loading of the server certificates when set with @SECLEVEL=N in the ssl_ciphers directive. 1.21.2
      • backend SSL connections in the stream module might hang after an SSL handshake. 1.21.2
      • in the ssl_session_ticket_key when using TLSv1.3. 1.21.6

      Change:

      • now nginx rejects SSL connections if ALPN is used by the client, but no supported protocols can be negotiated. 1.21.4
      "},{"location":"essay/nginx-changelog/#grpc","title":"gRPC","text":"

      Bugfix:

      • upstream sent frame for closed stream errors might occur when working with gRPC backends. 1.19.5
      • SSL connections with gRPC backends might hang if select, poll, or /dev/poll methods were used. 1.21.2
      "},{"location":"essay/nginx-changelog/#ocsp","title":"OCSP","text":"

      Feature

      • client certificate validation with OCSP. 1.19.0

      Bugfix:

      • OCSP stapling might not work if the resolver directive was not specified. 1.19.0
      • upstream 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.9
      "},{"location":"essay/nginx-changelog/#http2","title":"HTTP.2","text":"

      Bugfix:

      • connections with incorrect HTTP/2 preface were not logged. 1.19.0
      • socket leak when using HTTP/2 and subrequests in the njs module. 1.19.3
      • a segmentation fault might occur in a worker process when using HTTP/2 if errors with code 400 were redirected to a proxied location using the error_page directive. 1.19.3
      • HTTP/2 connections were immediately closed when using keepalive_timeout 0; the bug had appeared in 1.19.7. 1.19.8
      • \ud83d\udc41\ufe0f when using HTTP/2 client request body was always written to disk if the Content-Length header line was not present in the request. 1.21.2
      • in request body filters internal API when using HTTP/2 and buffering of the data being processed. 1.21.3
      • requests might hang when using HTTP/2 and the aio_write directive. 1.21.4
      • connections might hang when using HTTP/2 without SSL with the sendfile and aio directives. 1.21.5

      Change:

      • the lingering_close, lingering_time, and lingering_timeout directives now work when using HTTP/2. 1.19.1
      • the http2_max_field_size and http2_max_header_size directives have been removed, the large_client_header_buffers directive should be used instead. 1.19.7
      • connections handling in HTTP/2 has been changed to better match HTTP/1.x; the http2_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.7
      • optimization of client request body reading when using HTTP/2. 1.21.3
      • support for NPN instead of ALPN to establish HTTP/2 connections has been removed. 1.21.4
      "},{"location":"essay/nginx-changelog/#fastcgi","title":"FastCGI","text":"

      Bugfix:

      • 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.2

      Change:

      • now after receiving a too short response from a FastCGI server nginx tries to send the available part of the response to the client, and then closes the client connection. 1.19.1
      "},{"location":"essay/nginx-changelog/#by-versions","title":"By versions","text":"

      from 1.19.0 to 1.22.1(stable)

      "},{"location":"essay/nginx-changelog/#1216","title":"1.21.6","text":"

      \ud83d\udcc6 25 Jan 2022

      • Bugfix: when using EPOLLEXCLUSIVE on Linux client connections were unevenly distributed among worker processes.
      • Bugfix: nginx returned the \"Connection: keep-alive\" header line in responses during graceful shutdown of old worker processes.
      • Bugfix: in the \"ssl_session_ticket_key\" when using TLSv1.3.
      "},{"location":"essay/nginx-changelog/#1215","title":"1.21.5","text":"

      \ud83d\udcc6 28 Dec 2021

      • Change: now nginx is built with the PCRE2 library by default.
      • Change: now nginx always uses sendfile(SF_NODISKIO) on FreeBSD.
      • Feature: support for sendfile(SF_NOCACHE) on FreeBSD.
      • Feature: the $ssl_curve variable.
      • Bugfix: connections might hang when using HTTP/2 without SSL with the \"sendfile\" and \"aio\" directives.
      "},{"location":"essay/nginx-changelog/#1214","title":"1.21.4","text":"

      \ud83d\udcc6 02 Nov 2021

      • Change: support for NPN instead of ALPN to establish HTTP/2 connections has been removed.
      • Change: now nginx rejects SSL connections if ALPN is used by the client, but no supported protocols can be negotiated.
      • Change: the default value of the \"sendfile_max_chunk\" directive was changed to 2 megabytes.
      • Feature: the \"proxy_half_close\" directive in the stream module.
      • Feature: the \"ssl_alpn\" directive in the stream module.
      • Feature: the $ssl_alpn_protocol variable.
      • Feature: support for SSL_sendfile() when using OpenSSL 3.0.
      • Feature: the \"mp4_start_key_frame\" directive in the ngx_http_mp4_module. Thanks to Tracey Jaquith.
      • Bugfix: in the $content_length variable when using chunked transfer encoding.
      • Bugfix: after receiving a response with incorrect length from a proxied backend nginx might nevertheless cache the connection. Thanks to Awdhesh Mathpal.
      • Bugfix: invalid headers from backends were logged at the \"info\" level instead of \"error\"; the bug had appeared in 1.21.1.
      • Bugfix: requests might hang when using HTTP/2 and the \"aio_write\" directive.
      "},{"location":"essay/nginx-changelog/#1213","title":"1.21.3","text":"

      \ud83d\udcc6 07 Sep 2021

      • Change: optimization of client request body reading when using HTTP/2.
      • Bugfix: in request body filters internal API when using HTTP/2 and buffering of the data being processed.
      "},{"location":"essay/nginx-changelog/#1212","title":"1.21.2","text":"

      \ud83d\udcc6 31 Aug 2021

      • Change: now nginx rejects HTTP/1.0 requests with the \"Transfer-Encoding\" header line.
      • Change: export ciphers are no longer supported.
      • Feature: OpenSSL 3.0 compatibility.
      • Feature: the \"Auth-SSL-Protocol\" and \"Auth-SSL-Cipher\" header lines are now passed to the mail proxy authentication server. Thanks to Rob Mueller.
      • Feature: request body filters API now permits buffering of the data being processed.
      • Bugfix: backend SSL connections in the stream module might hang after an SSL handshake.
      • Bugfix: the security level, which is available in OpenSSL 1.1.0 or newer, did not affect loading of the server certificates when set with \"@SECLEVEL=N\" in the \"ssl_ciphers\" directive.
      • Bugfix: SSL connections with gRPC backends might hang if select, poll, or /dev/poll methods were used.
      • Bugfix: when using HTTP/2 client request body was always written to disk if the \"Content-Length\" header line was not present in the request.
      "},{"location":"essay/nginx-changelog/#1211","title":"1.21.1","text":"

      \ud83d\udcc6 06 Jul 2021

      • Change: now nginx always returns an error for the CONNECT method.
      • Change: now nginx always returns an error if both \"Content-Length\" and \"Transfer-Encoding\" header lines are present in the request.
      • Change: now nginx always returns an error if spaces or control characters are used in the request line.
      • Change: now nginx always returns an error if spaces or control characters are used in a header name.
      • Change: now nginx always returns an error if spaces or control characters are used in the \"Host\" request header line.
      • Change: optimization of configuration testing when using many listening sockets.
      • Bugfix: nginx did not escape \"\"\", \"<\", \">\", \"\\\", \"^\", \"`\", \"{\", \"|\", and \"}\" characters when proxying with changed URI.
      • Bugfix: SSL variables might be empty when used in logs; the bug had appeared in 1.19.5.
      • Bugfix: keepalive connections with gRPC backends might not be closed after receiving a GOAWAY frame.
      • Bugfix: reduced memory consumption for long-lived requests when proxying with more than 64 buffers.
      "},{"location":"essay/nginx-changelog/#1210","title":"1.21.0","text":"

      \ud83d\udcc6 25 May 2021

      • Security: 1-byte memory overwrite might occur during DNS server response processing if the \"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).
      • Feature: variables support in the \"proxy_ssl_certificate\", \"proxy_ssl_certificate_key\" \"grpc_ssl_certificate\", \"grpc_ssl_certificate_key\", \"uwsgi_ssl_certificate\", and \"uwsgi_ssl_certificate_key\" directives.
      • Feature: the \"max_errors\" directive in the mail proxy module.
      • Feature: the mail proxy module supports POP3 and IMAP pipelining.
      • Feature: the \"fastopen\" parameter of the \"listen\" directive in the stream module. Thanks to Anbang Wen.
      • Bugfix: special characters were not escaped during automatic redirect with appended trailing slash.
      • Bugfix: connections with clients in the mail proxy module might be closed unexpectedly when using SMTP pipelining.
      "},{"location":"essay/nginx-changelog/#11910","title":"1.19.10","text":"

      \ud83d\udcc6 13 Apr 2021

      • Change: the default value of the \"keepalive_requests\" directive was changed to 1000.
      • Feature: the \"keepalive_time\" directive.
      • Feature: the $connection_time variable.
      • Workaround: \"gzip filter failed to use preallocated memory\" alerts appeared in logs when using zlib-ng.
      "},{"location":"essay/nginx-changelog/#1199","title":"1.19.9","text":"

      \ud83d\udcc6 30 Mar 2021

      • Bugfix: nginx could not be built with the mail proxy module, but without the ngx_mail_ssl_module; the bug had appeared in 1.19.8.
      • Bugfix: \"upstream sent response body larger than indicated content length\" errors might occur when working with gRPC backends; the bug had appeared in 1.19.1.
      • Bugfix: nginx might not close a connection till keepalive timeout expiration if the connection was closed by the client while discarding the request body.
      • Bugfix: nginx might not detect that a connection was already closed by the client when waiting for auth_delay or limit_req delay, or when working with backends.
      • Bugfix: in the eventport method.
      "},{"location":"essay/nginx-changelog/#1198","title":"1.19.8","text":"

      \ud83d\udcc6 09 Mar 2021

      • Feature: flags in the \"proxy_cookie_flags\" directive can now contain variables.
      • Feature: the \"proxy_protocol\" parameter of the \"listen\" directive, the \"proxy_protocol\" and \"set_real_ip_from\" directives in mail proxy.
      • Bugfix: HTTP/2 connections were immediately closed when using \"keepalive_timeout 0\"; the bug had appeared in 1.19.7.
      • Bugfix: some errors were logged as unknown if nginx was built with glibc 2.32.
      • Bugfix: in the eventport method.
      "},{"location":"essay/nginx-changelog/#1197","title":"1.19.7","text":"

      \ud83d\udcc6 16 Feb 2021

      • Change: connections handling in HTTP/2 has been changed to better match HTTP/1.x; the \"http2_recv_timeout\", \"http2_idle_timeout\", and \"http2_max_requests\" directives have been removed, the \"keepalive_timeout\" and \"keepalive_requests\" directives should be used instead.
      • Change: the \"http2_max_field_size\" and \"http2_max_header_size\" directives have been removed, the \"large_client_header_buffers\" directive should be used instead.
      • Feature: now, if free worker connections are exhausted, nginx starts closing not only keepalive connections, but also connections in lingering close.
      • Bugfix: \"zero 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.
      • Bugfix: HEAD requests were handled incorrectly if the \"return\" directive was used with the \"image_filter\" or \"xslt_stylesheet\" directives.
      • Bugfix: in the \"add_trailer\" directive.
      "},{"location":"essay/nginx-changelog/#1196","title":"1.19.6","text":"

      \ud83d\udcc6 15 Dec 2020

      • Bugfix: \"no live upstreams\" errors if a \"server\" inside \"upstream\" block was marked as \"down\".
      • Bugfix: a segmentation fault might occur in a worker process if HTTPS was used; the bug had appeared in 1.19.5.
      • Bugfix: nginx returned the 400 response on requests like \"GET http://example.com?args HTTP/1.0\".
      • Bugfix: in the ngx_http_flv_module and ngx_http_mp4_module. Thanks to Chris Newton.
      "},{"location":"essay/nginx-changelog/#1195","title":"1.19.5","text":"

      \ud83d\udcc6 24 Nov 2020

      • Feature: the -e switch.
      • Feature: the same source files can now be specified in different modules while building addon modules.
      • Bugfix: SSL shutdown did not work when lingering close was used.
      • Bugfix: \"upstream sent frame for closed stream\" errors might occur when working with gRPC backends.
      • Bugfix: in request body filters internal API.
      "},{"location":"essay/nginx-changelog/#1194","title":"1.19.4","text":"

      \ud83d\udcc6 27 Oct 2020

      • Feature: the \"ssl_conf_command\", \"proxy_ssl_conf_command\", \"grpc_ssl_conf_command\", and \"uwsgi_ssl_conf_command\" directives.
      • Feature: the \"ssl_reject_handshake\" directive.
      • Feature: the \"proxy_smtp_auth\" directive in mail proxy.
      "},{"location":"essay/nginx-changelog/#1193","title":"1.19.3","text":"

      \ud83d\udcc6 29 Sep 2020

      • Feature: the ngx_stream_set_module.
      • Feature: the \"proxy_cookie_flags\" directive.
      • Feature: the \"userid_flags\" directive.
      • Bugfix: the \"stale-if-error\" cache control extension was erroneously applied if backend returned a response with status code 500, 502, 503, 504, 403, 404, or 429.
      • Bugfix: \"[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.
      • Workaround: \"[crit] SSL_write() failed\" messages might appear in logs when using OpenSSL 1.1.1.
      • Bugfix: \"SSL_shutdown() failed (SSL: ... bad write retry)\" messages might appear in logs; the bug had appeared in 1.19.2.
      • Bugfix: a segmentation fault might occur in a worker process when using HTTP/2 if errors with code 400 were redirected to a proxied location using the \"error_page\" directive.
      • Bugfix: socket leak when using HTTP/2 and subrequests in the njs module.
      "},{"location":"essay/nginx-changelog/#1192","title":"1.19.2","text":"

      \ud83d\udcc6 11 Aug 2020

      • Change: now nginx starts closing keepalive connections before all free worker connections are exhausted, and logs a warning about this to the error log.
      • Change: optimization of client request body reading when using chunked transfer encoding.
      • Bugfix: memory leak if the \"ssl_ocsp\" directive was used.
      • Bugfix: \"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.
      • Bugfix: a segmentation fault might occur in a worker process if different large_client_header_buffers sizes were used in different virtual servers.
      • Bugfix: SSL shutdown might not work.
      • Bugfix: \"SSL_shutdown() failed (SSL: ... bad write retry)\" messages might appear in logs.
      • Bugfix: in the ngx_http_slice_module.
      • Bugfix: in the ngx_http_xslt_filter_module.
      "},{"location":"essay/nginx-changelog/#1191","title":"1.19.1","text":"

      \ud83d\udcc6 07 Jul 2020

      • Change: the \"lingering_close\", \"lingering_time\", and \"lingering_timeout\" directives now work when using HTTP/2.
      • Change: now extra data sent by a backend are always discarded.
      • Change: now after receiving a too short response from a FastCGI server nginx tries to send the available part of the response to the client, and then closes the client connection.
      • Change: now after receiving a response with incorrect length from a gRPC backend nginx stops response processing with an error.
      • Feature: the \"min_free\" parameter of the \"proxy_cache_path\", \"fastcgi_cache_path\", \"scgi_cache_path\", and \"uwsgi_cache_path\" directives. Thanks to Adam Bambuch.
      • Bugfix: nginx did not delete unix domain listen sockets during graceful shutdown on the SIGQUIT signal.
      • Bugfix: zero length UDP datagrams were not proxied.
      • Bugfix: proxying to uwsgi backends using SSL might not work. Thanks to Guanzhong Chen.
      • Bugfix: in error handling when using the \"ssl_ocsp\" directive.
      • Bugfix: on XFS and NFS file systems disk cache size might be calculated incorrectly.
      • Bugfix: \"negative size buf in writer\" alerts might appear in logs if a memcached server returned a malformed response.
      "},{"location":"essay/nginx-changelog/#1190","title":"1.19.0","text":"

      \ud83d\udcc6 26 May 2020

      • Feature: client certificate validation with OCSP.
      • Bugfix: \"upstream sent frame for closed stream\" errors might occur when working with gRPC backends.
      • Bugfix: OCSP stapling might not work if the \"resolver\" directive was not specified.
      • Bugfix: connections with incorrect HTTP/2 preface were not logged.
      "},{"location":"essay/node-changelog-14-18/","title":"Node.js \u5f9e 14 \u5347 18 \u7684\u6ce8\u610f\u4e8b\u9805","text":"

      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

      • v16 Changelog
      • v18 Changelog

      \u4e5f\u53ef\u4ee5\u5403\u5176\u4ed6\u4eba\u716e\u904e\u7684\uff1a

      • v16
        • \u5b98\u65b9\u5728 2021 \u767c\u8868\u4e86\u4e00\u7bc7\u6458\u8981\u7684\u6ce8\u610f\u4e8b\u9805\u3002 \u5beb\u5f97\u5f88\u597d\uff0c\u53ef\u60dc\u6c92\u6709 v18 \u7684\uff0c \u800c\u4e14\u4e5f\u5728 2022 \u8868\u9054\u4e0d\u6703\u518d\u767c\u8868\u65b0\u6587\u7ae0\u3002
        • RedHat \u5b98\u65b9\u6587\u4ef6
      • v18
        • \u4e94\u5927\u65b0\u529f\u80fd\u7684\u90e8\u843d\u683c\u6587\u7ae0
        • \u5b98\u65b9\u6587\u4ef6
        • RedHat \u5b98\u65b9\u6587\u4ef6
      "},{"location":"essay/node-changelog-14-18/#ecma-script","title":"ECMA Script","text":"

      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

      • v18 \u5efa\u8b70\u7684\u8a2d\u5b9a
      • \u4f7f\u7528 ESM \u7684\u8a2d\u5b9a\u3002 \u5be6\u969b\u4e0a ESM \u7684\u8a2d\u5b9a\u5f88\u8907\u96dc\uff0c \u53ef\u4ee5\u53c3\u8003\u6211\u81ea\u5df1\u5728\u7dad\u8b77\u7684 template-node-ts \u548c\u7db2\u8def\u4e0a\u7684\u4e00\u4e9b\u6574\u7406\u6587\u7ae0\uff0c\u4f8b\u5982\u9019\u7bc7 Gist\uff1b
      • \u9664\u6b64\u4e4b\u5916\uff0c\u9084\u6709\u5c0d\u7a0b\u5f0f\u78bc\u6709\u6f54\u7656\u7684\u8f03\u56b4\u8b39\u8a2d\u5b9a\u3002
      "},{"location":"essay/node-changelog-14-18/#ssl","title":"SSL","text":"

      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

      \u5c01\u5305\u4e0a\u7684\u5dee\u7570

      \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()
      "},{"location":"essay/node-changelog-14-18/#\u65b0\u529f\u80fd","title":"\u65b0\u529f\u80fd","text":"

      \u9019\u88e1\u6574\u7406\u4e00\u4e9b\u6709\u8da3\u7684\u65b0\u529f\u80fd\uff1a

      • \u7570\u6b65\u7684 setTimeout

        import { setTimeout } from 'timers/promises';\nasync function run() {\n    await setTimeout(5000);\n}\n
      • Event \u548c EventTarget \u7684\u5be6\u4f5c

      • \u9810\u8a2d\u6703\u8a2d\u5b9a\u670d\u52d9\u7684 Timeout\uff1a
      • headersTimeout\uff1a\u8b80\u53d6 HTTP Header \u8d85\u904e 60 \u79d2\u5f8c\u6703\u4e2d\u65b7\u9023\u7dda
      • requestTimeout\uff1a\u8655\u7406 HTTP \u8acb\u6c42\u8d85\u904e 5 \u5206\u9418\u5f8c\u6703\u4e2d\u65b7\u9023\u7dda
      • Blob\uff0c\u985e\u4f3c Buffer\uff0c \u4f46\u662f\u5141\u8a31\u591a\u500b\u7dda\u7a0b\u5c0d\u4ed6\u9032\u884c\u8b80\u53d6\u548c\u4fee\u6539\u3002
      • BroadcastChannel\uff0c\u985e\u4f3c EventTarget\uff0c \u4f46\u662f\u9069\u5408\u591a\u7dda\u7a0b\u7684\u50b3\u905e\u8cc7\u8a0a\u3002

      \u4e0b\u9762\u662f\u4e00\u4e9b\u6709\u8da3\u4f46\u9084\u5728\u958b\u767c\u968e\u6bb5\u7684\u529f\u80fd\uff1a

      • \u900f\u904e Web Crypto API \u4f86\u9032\u884c\u5bc6\u78bc\u5b78\u7684\u61c9\u7528\uff0c Node.js \u4e00\u76f4\u90fd\u5e0c\u671b\u5f2d\u5e73\u700f\u89bd\u5668\u548c\u5f8c\u7aef\u7684\u5dee\u7570\u3002
      • fetch\uff0c \u4e5f\u662f\u70ba\u4e86\u5f2d\u5e73\u548c\u700f\u89bd\u5668\u7684\u5dee\u7570\uff0c\u5141\u8a31\u5feb\u901f\u800c\u7c21\u55ae\u7684\u505a HTTP \u8acb\u6c42\u3002

        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
      • \u539f\u751f\u55ae\u5143\u6e2c\u8a66\u6846\u67b6\uff1aTest Runner

        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
      "},{"location":"essay/node-changelog-14-18/#\u7d50\u8ad6","title":"\u7d50\u8ad6","text":"

      \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

      • \u7528\u4f86\u300c\u89e3\u91cb\u300d\uff08\u6216\u9810\u6e2c\uff09\u69cb\u9762\u7684\u8b8a\u6578\uff08x1 \u5230 x6\uff09\u7a31\u70ba\u5f62\u6210\u6027\u6307\u6a19 \uff08\u6216\u5916\u751f\u6f5b\u5728\u8b8a\u6578\uff0cformative indicator, exogenous latent variable\uff09\uff1b
      • \u7528\u4f86\u300c\u8a08\u7b97\u300d\uff08\u6216\u5171\u8b8a\uff0ccovariation\uff09\u69cb\u9762\u7684\u8b8a\u6578\uff08x7 \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

      "},{"location":"essay/pls-sem/#\u6e2c\u91cf\u7406\u8ad6","title":"\u6e2c\u91cf\u7406\u8ad6","text":"

      \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\u6b78

      PLS-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

      • \u8cc7\u6599\u7279\u6027\uff0c\u9078\u7528\u548c\u6536\u96c6\u539f\u59cb\u8cc7\u6599\u6642\uff0c\u8981\u6ce8\u610f\u4ec0\u9ebc\uff1b
      • \u6a21\u578b\u7279\u6027\uff0c\u91dd\u5c0d\u5047\u8a2d\u9032\u884c\u6a21\u578b\u7684\u5efa\u7f6e\u6642\uff0c\u8981\u6ce8\u610f\u4ec0\u9ebc\uff1b
      • \u53c3\u6578\u7279\u6027\uff0c\u9032\u884c\u6f14\u7b97\u6cd5\u7684\u8a2d\u8a08\u548c\u6548\u7387\u8abf\u6821\u6642\uff0c\u8981\u6ce8\u610f\u4ec0\u9ebc\uff1b
      • \u8a55\u4f30\u6a21\u578b\uff0c\u6700\u7d42\u91dd\u5c0d\u7d50\u679c\u9032\u884c\u8a55\u4f30\u6642\uff0c\u8981\u6ce8\u610f\u4ec0\u9ebc\u3002
      "},{"location":"essay/pls-sem/#\u8cc7\u6599\u7279\u6027","title":"\u8cc7\u6599\u7279\u6027","text":"

      \u9078\u7528\u548c\u6536\u96c6\u539f\u59cb\u8cc7\u6599\u6642\uff0c\u8981\u6ce8\u610f\u4ec0\u9ebc\u3002

      • \u6a23\u672c\u5927\u5c0f\uff1a
      • \u5c11\u91cf\u6a23\u672c\u80fd\u9054\u5230\u9ad8\u6c34\u6e96\u7684\u5206\u6790\u80fd\u529b\uff0c\u4f46\u662f\u63a1\u6a23\u7684\u7fa4\u9ad4\u9700\u548c\u6bcd\u9ad4\u7d50\u69cb\u76f8\u4f3c\uff1b
      • \u6a23\u672c\u7684\u6578\u91cf\u80fd\u63d0\u9ad8\u6e96\u78ba\u6027\uff08\u63db\u53e5\u8a71\u8aaa\uff0c\u5169\u500b\u6a23\u672c\u7fa4\u7d44\u5206\u6790\u7d50\u679c\u80fd\u4fdd\u6301\u4e00\u81f4\uff09\uff1b
      • \u6709\u7814\u7a76\u8868\u660e 10 \u500d\u7684\u5f62\u6210\u6027\u6307\u6a19\u6578\u91cf\uff0c\u5373\u662f\u6700\u4f4e\u6a23\u672c\u6578\uff0c\u4e5f\u6709\u7814\u7a76\u8868\u660e\uff0c \u6700\u4f4e\u6a23\u672c\u6578\u9808\u4ee5\u6a21\u578b\u6700\u4f4e\u4fc2\u6578\u548c\u5047\u8aaa\u7684\u986f\u8457\u6027\u5dee\u7570\u70ba\u53c3\u8003\u8a02\u5b9a\u51fa\u4f86\uff0c \u5373 \\({\\left (C/P_{min} \\right )}^2\\)\uff0c\u5176\u4e2d C \u70ba\u6839\u64da\u986f\u8457\u6c34\u6e96\u7684\u5b9a\u503c\uff0c \uff08\u4f8b\u5982 \\(5%\\) \u7684\u986f\u8457\u6c34\u6e96\u4e14\u8a08\u7b97\u5f8c\u7684\u6700\u4f4e\u4fc2\u6578\u70ba 0.2 \u6642\uff0c\u6700\u4f4e\u6a23\u672c\u6578\u70ba \\({\\left (2.486/0.2 \\right )}^2=154.505\\)\uff09\u3002 \u82e5\u6700\u4f4e\u4fc2\u6578\u592a\u4f4e\uff0c\u5c0e\u81f4\u9700\u8981\u7684\u6a23\u672c\u6578\u4e0d\u73fe\u5be6\uff0c\u53ef\u4ee5\u6839\u64da\u6a21\u578b\u662f\u5426\u61c9\u95dc\u6ce8\u90a3\u4e9b\u5f71\u97ff\u529b\u4e0d\u5927\u7684\u53c3\u6578\u53bb\u9078\u64c7\u8f03\u5927\u7684\u53c3\u6578\u3002 \u9019\u65b9\u6cd5\u53ef\u4ee5\u900f\u904e\u56de\u9867\u6a21\u578b\u7684\u65b9\u5f0f\uff0c\u6bd4\u7b2c\u4e00\u6b21\u8a08\u7b97\u7576\u4f5c\u88dc\u8db3\u6a23\u672c\u6578\u5f8c\u7684\u7b2c\u4e8c\u6b21\u8a08\u7b97\u7684\u57fa\u6e96\u3002
      • \u8cc7\u6599\u5206\u5e03\uff1a
      • \u7121\u5206\u4f48\u8981\u6c42\uff0c\u53ef\u4ee5\u63a5\u53d7\u975e\u5c0d\u7a31\u5206\u4f48\uff1b
      • \u6709\u5f71\u97ff\u529b\u7684\u7570\u5e38\u503c\u548c\u5171\u7dda\u6027\u7684\u6a23\u672c\u53ef\u80fd\u6703\u5f71\u97ff\u7d50\u679c\uff0c\u61c9\u8a55\u4f30\u4e26\u907f\u514d\u3002
      • \u8cc7\u6599\u7f3a\u5931\uff1a
      • \u53ea\u8981\u7f3a\u5931\u7684\u6bd4\u4f8b\u5728\u5408\u7406\u7bc4\u570d\u5167\uff08\u5c0f\u65bc 5%\uff09\uff0c\u4ecd\u80fd\u7dad\u6301\u76f8\u7576\u6c34\u6e96\u3002
        • \u53ef\u4ee5\u900f\u904e\u522a\u9664\u8cc7\u6599\u6216\u4f7f\u7528\u5e73\u5747\u3001\u6700\u8fd1\u8cc7\u6599\u3001\u6700\u5927\u5316\u671f\u671b\u503c\u7b49\u65b9\u6cd5\u88dc\u8db3
      • \u6e2c\u91cf\u5c3a\u5ea6\uff1a
      • \u9069\u7528\u65bc\u5ea6\u91cf\u8cc7\u6599\uff08\u7b49\u8ddd\u6216\u7b49\u6bd4\uff09\u548c\u6b21\u5e8f\u7684\u6e96\u5ea6\u91cf\u8cc7\u6599\uff1b
      • \u53ef\u4ee5\u63a5\u53d7\u4e8c\u5143\u8cc7\u6599\uff08\u4f8b\u5982\u662f\u6216\u5426\u3001\u6709\u6216\u7121\uff09\uff0c \u4f46\u5728\u5c07\u5b83\u5011\u7528\u4f5c\u63a7\u5236\u8b8a\u56e0\u3001\u8abf\u7bc0\u8b8a\u56e0\u4ee5\u53ca\u5206\u6790\u6642\uff0c\u9700\u8981\u8a2d\u8a08\u6210\u91dd\u5c0d\u4e8c\u5143\u8cc7\u6599\u7684\u6a21\u578b\u3002
      • \u4e8c\u624b\u8cc7\u6599\uff1a
      • \u56e0 PLS-SEM \u53ef\u4ee5\u8655\u7406\u4e0d\u540c\u7a2e\u985e\u7684\u8cc7\u6599\u548c\u6e2c\u91cf\u6a21\u578b\uff0c\u6240\u4ee5\u9069\u5408\u91dd\u5c0d\u4e8c\u624b\u8cc7\u6599\u505a\u5176\u4ed6\u985e\u5225\u7684\u5206\u6790\u3002
      \u6e2c\u91cf\u5c3a\u5ea6

      \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

      • \u540d\u76ee\uff08nominal\uff09\uff0c\u4f8b\u5982\u7537\u5973\u5206\u5225\u4ee3\u8868 1 \u548c 0\uff0c\u4f46\u662f\u4e26\u6c92\u6709\u5927\u5c0f\u5dee\u8ddd\u7684\u610f\u7fa9\uff1b
      • \u6b21\u5e8f\uff08ordinal\uff09\uff0c\u4f8b\u5982\u5de5\u4f5c\u6eff\u610f\u5ea6\u5f9e 1 \u5230 5\uff0c\u53ea\u6703\u77e5\u9053 2 \u5927\u65bc 1\uff0c\u4e26\u4e0d\u6703\u77e5\u9053\u5927\u591a\u5c11\uff0c \u63db\u53e5\u8a71\u8aaa\uff0c\u6bd4\u8f03 1\u30012 \u548c 9\u300110 \u7684\u5dee\u8ddd\u662f\u6c92\u610f\u7fa9\u7684\uff1b
      • \u7b49\u8ddd\uff08interval\uff09\uff0c\u4f8b\u5982\u5ba4\u6eab 20 \u5ea6 C\uff0c\u6211\u5011\u53ef\u4ee5\u77e5\u9053 10\u300120 \u548c 30\u300140 \u5ea6\u7684\u5dee\u8ddd\u662f\u76f8\u7b49\u7684\uff1b
      • \u7b49\u6bd4\uff08ratio\uff09\uff0c\u8207\u7b49\u8ddd\u76f8\u4f3c\uff0c\u4f46\u662f\u6709\u4e00\u500b\u4ee3\u8868\u7121\u7684\u96f6\uff0c\u4f8b\u5982\u7d55\u5c0d\u6eab\u5ea6\u3001\u9577\u5ea6\u548c\u91cd\u91cf\u3002
      "},{"location":"essay/pls-sem/#\u6a21\u578b\u7279\u6027","title":"\u6a21\u578b\u7279\u6027","text":"

      \u91dd\u5c0d\u5047\u8a2d\u9032\u884c\u6a21\u578b\u7684\u5efa\u7f6e\u6642\uff0c\u8981\u6ce8\u610f\u4ec0\u9ebc\u3002

      • \u69cb\u9762\u7684\u6e2c\u91cf\u6a21\u578b\u9700\u8981\u7684\u8b8a\u6578\uff1a
      • \u53ef\u63a5\u53d7\u55ae\u4e00\u6216\u591a\u500b\u8b8a\u6578\u3002
      • \u69cb\u9762\u548c\u6307\u6a19\u7684\u95dc\u4fc2\uff1a
      • \u53ef\u8f15\u6613\u6574\u5408\u5f62\u6210\u6027\u548c\u53cd\u6620\u6027\u7684\u6a21\u578b\uff0c\u4e5f\u53ef\u4ee5\u4f9d\u6b64\u5ef6\u4f38\u7279\u6b8a\u6a21\u578b\uff0c\u4f8b\u5982\u9ad8\u6b0a\u91cd\u7684\u69cb\u9762\u3002
      • \u5efa\u69cb\u8907\u96dc\u7684\u6a21\u578b\uff1a
      • \u53ef\u900f\u904e\u6574\u5408\u591a\u500b\u7d50\u69cb\u7684\u6a21\u578b\uff0c\u4f86\u5efa\u7acb\u8907\u96dc\u7684\u7406\u8ad6\u3002
      • \u6a21\u578b\u7684\u5efa\u7acb\uff1a
      • \u82e5\u6709\u56e0\u679c\u8ff4\u5708\uff0c\u5373 A \u89e3\u91cb B\u3001B \u89e3\u91cb C \u6700\u5f8c C \u88ab\u7528\u4f86\u89e3\u91cb A\uff0c\u5247\u9700\u8981\u8abf\u6574\u6f14\u7b97\u6cd5\u3002
      "},{"location":"essay/pls-sem/#\u53c3\u6578\u7279\u6027","title":"\u53c3\u6578\u7279\u6027","text":"

      \u9032\u884c\u6f14\u7b97\u6cd5\u7684\u8a2d\u8a08\u548c\u6548\u7387\u8abf\u6821\u6642\uff0c\u8981\u6ce8\u610f\u4ec0\u9ebc\u3002

      • \u76ee\u6a19\uff1a
      • \u6700\u5927\u5316\u53cd\u6620\u6027\u6a21\u578b\u8b8a\u6578\u7684\u65b9\u5dee\u91cf\uff08\u5373 \\(R^2\\)\uff09\u3002
      • \u6548\u7387
      • \u6536\u6582\u6578\u6b21\u8fed\u4ee3\u5f8c\u9054\u5230\u5c40\u90e8\u6216\u5168\u57df\u6700\u512a\u89e3\uff08\u5373\u4f7f\u8907\u96dc\u6a21\u578b\u548c\u5927\u91cf\u8cc7\u6599\uff09\uff0c\u5373\u662f\u6709\u6548\u7387\u7684\u3002
      • \u69cb\u9762\u7684\u672c\u8cea
      • \u91dd\u5c0d\u7814\u7a76\u7684\u6f5b\u5728\u8b8a\u6578\u7684\u4ee3\u7406\uff0c\u901a\u5e38\u591a\u7d44\u69cb\u9762\u8907\u5408\u5f62\u6210\u4e00\u500b\u7406\u8ad6\u3002
      • \u69cb\u9762\u7684\u5206\u6578\u8a08\u7b97
      • \u900f\u904e\u4f86\u6e90\u6307\u6a19\u7684\u7dda\u6027\u7d44\u5408\u4f86\u8a08\u7b97\uff0c\u63db\u53e5\u8a71\u8aaa\uff0c\u4ed6\u5011\u662f\u78ba\u5b9a\u6027\u7684\uff1b
      • \u7528\u9014\u70ba\u9810\u6e2c\u76f8\u95dc\u7406\u8ad6\uff1b
      • \u53ef\u4ee5\u88ab\u62ff\u4f86\u7576\u4f5c\u6a21\u578b\u5f8c\u7e8c\u7684\u8f38\u5165\uff1b
      • \u53d7\u5230\u6578\u64da\u4e0d\u8db3\u7684\u5f71\u97ff\u8f03\u5c0f\u3002
      • \u6b0a\u91cd\u7684\u8a08\u7b97
      • \u8207\u4f7f\u7528\u516c\u56e0\u5b50\u6a21\u578b\u8cc7\u6599\u76f8\u6bd4\uff0c\u7d50\u69cb\u6a21\u578b\u95dc\u4fc2\u901a\u5e38\u88ab\u4f4e\u4f30\uff0c\u6e2c\u91cf\u6a21\u578b\u95dc\u4fc2\u901a\u5e38\u88ab\u9ad8\u4f30\uff1b
      • \u5f9e\u8907\u5408\u6a21\u578b\u8a08\u7b97\u51fa\u7684\u7d50\u679c\u4e0d\u6703\u504f\u9817\u4e14\u4e00\u81f4\uff1b
      • \u7d71\u8a08\u80fd\u529b\u512a\u65bc\u5176\u4ed6\u6a21\u578b\uff0c\u4f8b\u5982 CB-SEM \u548c PLS \u8ff4\u6b78\u3002 \u7d71\u8a08\u80fd\u529b\u512a\u79c0\u4ee3\u8868\u66f4\u5bb9\u6613\u5728\u6574\u9ad4\u7684\u8cc7\u6599\u4e2d\u627e\u51fa\u7279\u5b9a\u95dc\u4fc2\uff08\u4f8b\u5982 A \u8b8a\u56e0\u5bb9\u6613\u50be\u5411\u7406\u8ad6 B\uff09\u3002
      "},{"location":"essay/pls-sem/#\u8a55\u4f30\u6a21\u578b","title":"\u8a55\u4f30\u6a21\u578b","text":"

      \u6700\u7d42\u91dd\u5c0d\u7d50\u679c\u9032\u884c\u8a55\u4f30\u6642\uff0c\u8981\u6ce8\u610f\u4ec0\u9ebc\u3002

      • \u6574\u9ad4\u6a21\u578b\u7684\u8a55\u4f30
      • CB-SEM \u4e2d\u5b9a\u7fa9\u7684\u64ec\u5408\uff08fit\uff09\u6982\u5ff5\u4e0d\u9069\u7528\u65bc PLS-SEM\u3002 \u6a21\u578b\u64ec\u5408\u6e2c\u91cf\uff08model fit measure\uff09\u901a\u5e38\u88ab\u8b49\u660e\u662f\u7121\u6548\u7684\uff1b
      • \u6e2c\u91cf\u6a21\u578b\u7684\u8a55\u4f30
      • \u53cd\u6620\u6027\u6e2c\u91cf\u6a21\u578b\u6839\u64da\u6307\u6a19\u4fe1\u5ea6\uff08indicator reliability\uff09\u3001 \u5167\u90e8\u4e00\u81f4\u6027\u4fe1\u5ea6\uff08internal consistency reliability\uff09\u3001 \u6536\u6582\u7a69\u5b9a\u5ea6\uff08 convergent validity\uff09\u548c \u5340\u5225\u6548\u5ea6\uff08 discriminant validity\uff09\u9032\u884c\u5206\u6790\uff1b
      • \u5f62\u6210\u6027\u6e2c\u91cf\u6a21\u578b\u6839\u64da\u6536\u6582\u7a69\u5b9a\u5ea6\uff08 convergent validity\uff09\u3001 \u6307\u6a19\u5171\u7dda\u6027\uff08indicator collinearity\uff09\u548c \u6307\u6a19\u6b0a\u91cd\u7684\u986f\u8457\u6027\u548c\u76f8\u95dc\u6027\uff08significance and relevance of indicator weights\uff09\u9032\u884c\u5206\u6790\u3002
      • \u7d50\u69cb\u6a21\u578b\u7684\u8a55\u4f30
      • \u591a\u500b\u9810\u6e2c\u6027\u69cb\u9762\u7684\u5171\u7dda\u6027\uff1b
      • \u8def\u5f91\u6b0a\u91cd\u7684\u986f\u8457\u6027\u548c\u76f8\u95dc\u6027\uff1b
      • \u91dd\u5c0d\u6a23\u672c\u5167\u7684\u8cc7\u6599\u9032\u884c\u89e3\u91cb\uff08explanatory\uff09\u7684\u80fd\u529b\uff1b
      • \u91dd\u5c0d\u6a23\u672c\u5916\u7684\u8cc7\u6599\u9032\u884c\u9810\u6e2c\u80fd\u529b\uff08\\(PLS_predict\\)\uff09\u3002
      • \u984d\u5916\u7684\u5206\u6790
      • \u96a8\u8457 PLS-SEM \u7684\u767c\u5c55\uff0c\u8d8a\u4f86\u8d8a\u591a\u9032\u968e\u7684\u6a21\u578b\u5efa\u7f6e\u3001\u8a55\u4f30\u3001\u5206\u6790\u624b\u6bb5\u88ab\u958b\u767c\u51fa\u4f86\uff0c\u4f8b\u5982\uff1a
        • \u78ba\u8a8d\u6027\u56db\u5143\u5206\u6790\uff08confirmatory tetrad analysis\uff09
        • \u78ba\u8a8d\u6027\u7d44\u5408\u5206\u6790\uff08confirmatory composite analysis\uff09
        • \u96e2\u6563\u9078\u64c7\u5efa\u6a21\uff08discrete choice modeling\uff09
        • \u5167\u751f\u6027\u8a55\u4f30\uff08endogeneity assessment\uff09
        • \u9ad8\u968e\u69cb\u9762\uff08higher-order constructs\uff09
        • \u6f5b\u5728\u985e\u5225\u5206\u6790\uff08latent class analysis\uff09
        • \u6e2c\u91cf\u6a21\u578b\u4e0d\u8b8a\u6027\uff08measurement model invariance\uff09
        • \u4e2d\u4ecb\u5206\u6790\uff08mediation analysis\uff09
        • \u6a21\u578b\u9078\u64c7\uff08model selection\uff09
        • \u8abf\u7bc0\u6548\u61c9\uff08moderating effects\uff09\uff0c\u5305\u62ec\u8abf\u7bc0\u4e2d\u4ecb\uff08moderated mediation\uff09
        • \u591a\u7d44\u5206\u6790\uff08multi-group analysis\uff09
        • \u5fc5\u8981\u689d\u4ef6\u5206\u6790\uff08necessary condition analysis\uff09
        • \u975e\u7dda\u6027\u6548\u61c9\uff08nonlinear effects\uff09
      "},{"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":"
      • \u554f\u904e\u53bb\u7d93\u9a57\u8207\u4e8b\u5be6\uff0c\u907f\u514d\u5047\u8a2d\u6027\u554f\u984c
        1. \u9810\u8a2d\u689d\u4ef6\u5beb\u6e05\u695a
      • \u5982\u679c\u672a\u4f86\u9080\u8acb\u60a8\u4f7f\u7528\uff0c\u60a8\u6703\u4f7f\u7528\u54ea\u4e9b\u529f\u80fd\u3002A. \u8077\u7f3a\u6392\u5e8f
      • \u5047\u8a2d\u672a\u4f86\u6b63\u8981\u958b\u59cb\u627e\u5de5\u4f5c\uff0c\u60a8\u6703\u60f3\u4f7f\u7528\u54ea\u4e9b\u529f\u80fd\u3002A. \u8077\u7f3a\u6392\u5e8f\uff1a\u53ef\u4ee5\u5c07\u60a8\u611f\u8208\u8da3\u7684\u8077\u7f3a\u7f6e\u9802
      • \u554f\u884c\u70ba\uff0c\u907f\u514d\u554f\u601d\u8003
        1. \u9078\u64c7\u984c
        2. \u5716\u6848
        3. \u8b93\u5176\u53ef\u4ee5\u300c\u99ac\u4e0a\u60f3\u51fa\u4f86\u300d
      • \u554f\u984c\u8981\u8db3\u5920\u660e\u78ba\uff0c\u76e1\u53ef\u80fd\u964d\u4f4e\u6a21\u7cca\u7a7a\u9593
      • \u8acb\u554f\u60a8\u591a\u5e38\u4f7f\u7528\u6211\u5011\u7684\u670d\u52d9\uff1f
      • \u8acb\u554f\u60a8\u6709\u591a\u5e38\u4f7f\u7528 104 \u4eba\u529b\u9280\u884c\uff1f
      • \u8acb\u554f\u60a8\u6700\u8fd1\u4e00\u500b\u6708\u5167\uff0c\u591a\u5e38\u4f7f\u7528 104 \u5de5\u4f5c\u5feb\u627e APP \u4f86\u61c9\u5fb5\u5de5\u4f5c
      • \u9583\u907f\u4e0d\u826f\u554f\u984c
        1. \u5f15\u5c0e\u5f0f\u554f\u984c\uff1a\u66ff\u586b\u7b54\u8005\u9810\u8a2d\uff08\u6697\u793a\uff09\u7acb\u5834
        2. \u8a98\u5c0e\u662f\u554f\u984c\uff1a\u64cd\u63a7\u3001\u9650\u5236\u56de\u7b54\u8cbb\u70ba
        3. \u4e0d\u660e\u78ba\u554f\u984c\uff1a\u5982\u4e0a\u8ff0\u7b2c\u4e09\u9805
        4. \u884c\u8a71\u554f\u984c\uff1a\u554f\u53e5\u4e2d\u5305\u542b\u884c\u8a71\u3001\u5c08\u696d\u8853\u8a9e
        5. \u8907\u5408\u554f\u984c
        6. \u591a\u91cd\u908f\u8f2f\u554f\u984c
      "},{"location":"essay/questionnaire-principal/#\u5c01\u9589\u578b\u9078\u9805\u8a2d\u8a08\u539f\u5247","title":"\u5c01\u9589\u578b\u9078\u9805\u8a2d\u8a08\u539f\u5247","text":"
      • ME: \u5f7c\u6b64\u4e4b\u9593 \u5b8c\u5168\u7368\u7acb\u3001\u6beb\u7121\u91cd\u758a\uff0c\u55ae\u9078
      • CE: \u6574\u9ad4\u800c\u8a00 \u5b8c\u5168\u7aae\u76e1\u53ef\u80fd\u3001\u6beb\u7121\u907a\u6f0f\uff0c\u591a\u9078
      "},{"location":"essay/questionnaire-principal/#\u5408\u7406\u7684\u9078\u9805\u6578\u91cf","title":"\u5408\u7406\u7684\u9078\u9805\u6578\u91cf","text":"
      • \u8996\u5de5\u5177\u800c\u5b9a
      • SurveyCake \u53ef\u4ee5\u96d9\u6b04
      • Hotjar \u55ae\u6b04
      • 20 \u500b\u4ee5\u5167
      • \u7e2e\u6e1b\u9078\u9805
      • \u5176\u4ed6
      "},{"location":"essay/questionnaire-principal/#\u77e9\u9663\u984c","title":"\u77e9\u9663\u984c","text":"

      \u4e00\u984c\u591a\u554f

      "},{"location":"essay/questionnaire-principal/#\u674e\u7279\u514b\u91cf\u5c3a","title":"\u674e\u7279\u514b\u91cf\u5c3a","text":"
      • 1 \u5206\u30012 \u5206\u30013 \u5206\u30014 \u5206\u30015 \u5206
      • 5 \u5206\u30017 \u5206\u300111 \u5206\uff08NPS\uff09
      • \u5947\u6578\u9ede\uff1a\u6709\u4e2d\u9593\u9078\u9805
      • \u70ba\u6578\u5b57\u52a0\u4e0a\u6587\u5b57\u6a19\u7c64
      "},{"location":"essay/questionnaire-principal/#\u65e2\u6709\u7684\u554f\u5377\u984c\u578b\u53ef\u4ee5\u52a0\u901f\u88fd\u4f5c","title":"\u65e2\u6709\u7684\u554f\u5377\u984c\u578b\u53ef\u4ee5\u52a0\u901f\u88fd\u4f5c","text":"

      \u554f\u5377\u8cc7\u6599\u5eab

      "},{"location":"essay/questionnaire-principal/#\u554f\u984c\u7684\u985e\u578b","title":"\u554f\u984c\u7684\u985e\u578b","text":"
      • \u63cf\u7e6a\u51fa\u76ee\u6a19\u65cf\u7fa4\u9577\u76f8
      • \u884c\u70ba\u3001\u614b\u5ea6\u3001\u8a8d\u77e5
      • Net-Promoter-Score-NPS
      • \u7f3a\u9ede
      • \u6ce8\u610f
      • \u670d\u52d9\u6eff\u610f\u5ea6
      • \u8cc7\u5b89
      "},{"location":"essay/questionnaire-principal/#\u63cf\u7e6a\u51fa\u76ee\u6a19\u65cf\u7fa4\u9577\u76f8","title":"\u63cf\u7e6a\u51fa\u76ee\u6a19\u65cf\u7fa4\u9577\u76f8","text":"
      • \u6027\u5225
      • \u5e74\u9f61
      • \u6559\u80b2\u7a0b\u5ea6
      • \u5c45\u4f4f\u5730
      "},{"location":"essay/questionnaire-principal/#\u884c\u70ba\u614b\u5ea6\u8a8d\u77e5","title":"\u884c\u70ba\u3001\u614b\u5ea6\u3001\u8a8d\u77e5","text":"
      • \u6700\u8fd1\u4e00\u500b\u6708\u505a\u4e86\u54ea\u4e9b\u670d\u52d9\uff1a\u662f\u5426\u53d7\u904e\u53bb\u7d93\u9a57\u5f71\u97ff
      • \u6eff\u610f\u5ea6\u3001\u7a4d\u6975\u5ea6\uff1a\u662f\u5426\u6709\u7279\u5b9a\u52d5\u6a5f
      • \uff08\u4e0d\uff09\u4f7f\u7528\u539f\u56e0
      "},{"location":"essay/questionnaire-principal/#net-promoter-score-nps","title":"Net Promoter Score (NPS)","text":"

      \u4f60\u6709\u591a\u5927\u7684\u610f\u9858\u5c07\u7522\u54c1\u63a8\u85a6\u7d66\u89aa\u670b\u597d\u53cb\uff1f

      0~10 \u5206\uff1a

      • 0~6 \u6279\u8a55\u8005
      • 7~8 \u88ab\u52d5\u8005
      • 9~10 \u63a8\u5ee3\u8005
      • NPS = \u63a8\u5ee3\u8005\u6bd4\u4f8b - \u6279\u8a55\u8005\u6bd4\u4f8b
      "},{"location":"essay/questionnaire-principal/#\u7f3a\u9ede","title":"\u7f3a\u9ede","text":"
      • \u4ec0\u9ebc\u6a23\u7684\u5206\u6578\u662f\u597d\u7684\uff1f
      • \u6ce2\u52d5\u5927\uff1a\u53d7\u884c\u92b7\u7b49\u5f71\u97ff
      • \u7db2\u8def\u4e0a\u7684\u6a19\u6e96\u7121\u6cd5\u76e1\u4fe1

      \u8ddf\u81ea\u5df1\u8cfd\u8dd1

      "},{"location":"essay/questionnaire-principal/#\u6ce8\u610f","title":"\u6ce8\u610f","text":"
      • \u554f\u7684\u662f\u9084\u6c92\u767c\u751f\u7684\u4e8b\u60c5
      • \u88dc\u554f\uff1a\u662f\u5426\u4f7f\u7528\u904e\u7522\u54c1
      • \u5207\u5206\u65b9\u5f0f\u592a\u6b66\u65b7
      • \u8ffd\u554f\u8a55\u5206\u539f\u56e0
      "},{"location":"essay/questionnaire-principal/#\u670d\u52d9\u6eff\u610f\u5ea6","title":"\u670d\u52d9\u6eff\u610f\u5ea6","text":"
      • 5 \u5206\u30017 \u5206\u300111 \u5206
      • \u8981\u6709\u4e2d\u9593\u9078\u9805\uff0c\u907f\u514d\u9078\u908a\u7ad9
      • \u6bd4\u8f03\uff1a\u6bd4\u4ee5\u524d\u597d\u5c31\u662f\u597d
      "},{"location":"essay/questionnaire-principal/#\u8cc7\u5b89","title":"\u8cc7\u5b89","text":"
      • \u7528\u4e0d\u5230\u5c31\u5225\u641c\u96c6
      • \u59a5\u5584\u4fdd\u5b58
      "},{"location":"essay/questionnaire-principal/#\u554f\u5377\u4f48\u5c40","title":"\u554f\u5377\u4f48\u5c40","text":""},{"location":"essay/questionnaire-principal/#\u8d77","title":"\u8d77","text":"
      • \u57fa\u672c\u8cc7\u6599
      • \u904e\u53bb\u7d93\u9a57
      "},{"location":"essay/questionnaire-principal/#\u627f","title":"\u627f","text":"

      \u6700\u95dc\u5fc3\u7684\u8b70\u984c\uff0c\u53ef\u80fd\u9700\u8981\u8cbb\u529b\u601d\u8003

      • \u89ba\u5f97\u597d\u7528\u7684\u529f\u80fd
      • \u671f\u5f85\u7684\u529f\u80fd
      "},{"location":"essay/questionnaire-principal/#\u8f49","title":"\u8f49","text":"

      \u5e0c\u671b\u586b\u7b54\u8005\u9032\u4e00\u6b65\u63a1\u53d6\u7684\u884c\u52d5

      • \u9858\u610f\u8cfc\u8cb7\u91d1\u984d\u3001\u9858\u610f\u63a8\u85a6\u5c0d\u8c61
      • \u8996\u9700\u6c42\u800c\u5b9a\uff0c\u4e0d\u4e00\u5b9a\u9700\u8981\u6709
      "},{"location":"essay/questionnaire-principal/#\u5408","title":"\u5408","text":"
      • \u611f\u8b1d\u8a9e
      • \u901a\u5e38\u654f\u611f\u500b\u8cc7\u6703\u5728\u9019\u6bb5\uff08\u56e0\u70ba\u4f7f\u7528\u8005\u5df2\u7d93\u586b\u5b8c\u5f88\u591a\u554f\u984c\uff0c\u6703\u60f3\u5b8c\u6210\u9019\u500b\u554f\u5377\uff09
      "},{"location":"essay/questionnaire-principal/#\u9700\u8981\u653e\u591a\u5c11\u984c\u76ee","title":"\u9700\u8981\u653e\u591a\u5c11\u984c\u76ee","text":"

      \u8996\u76ee\u7684\u800c\u5b9a\uff0c\u62bd\u734e\u3001\u79ae\u54c1\u53ef\u6709\u6548\u63d0\u5347\u586b\u7b54\u8005\u610f\u9858\u3002

      • Hotjar \u5efa\u8b70\u6975\u77ed\u554f\u5377
      • \u7528\u65bc\u6eff\u610f\u5ea6
      • 4 \u984c\u5167
      • 1 \u5206\u9418
      • \u77ed\u554f\u5377
      • \u57fa\u672c\u8abf\u67e5
      • 10 \u984c\u5167
      • 3 \u5206\u9418
      • \u4e2d\u554f\u5377
      • \u9a57\u8b49\u5047\u8aaa
      • 10~25
      • 10 \u5206\u9418
      • \u9577\u554f\u5377
      • \u591a\u7a2e\u4ea4\u53c9\u5206\u6790
      "},{"location":"essay/questionnaire-principal/#\u554f\u5377\u5de5\u5177","title":"\u554f\u5377\u5de5\u5177","text":""},{"location":"essay/questionnaire-principal/#microsoft-form","title":"Microsoft Form","text":"
      • O365 \u9644\u9001
      • \u6709 NPS \u9810\u8a2d\u554f\u984c
      • \u582a\u7528
      • \u548c O365 \u6574\u5408
      "},{"location":"essay/questionnaire-principal/#\u7f3a\u9ede_1","title":"\u7f3a\u9ede","text":"
      • \u7121\u6cd5\u4f7f\u7528\u5716\u7247\u4f5c\u70ba\u9078\u9805
      • \u4e0d\u5bb9\u6613\u908f\u8f2f\u8df3\u8f49
      "},{"location":"essay/questionnaire-principal/#google-form","title":"Google Form","text":"
      • \u514d\u8cbb
      • \u6700\u5ee3\u6cdb
      • \u582a\u7528
      • \u548c Google Doc \u6574\u5408
      "},{"location":"essay/questionnaire-principal/#\u7f3a\u9ede_2","title":"\u7f3a\u9ede","text":"
      • \u8907\u9078\u984c\u539f\u59cb\u8cc7\u6599\u4e0d\u597d\u5206\u6790
      "},{"location":"essay/questionnaire-principal/#survey-cake","title":"Survey Cake","text":"
      • \u6709\u514d\u8cbb\u7248
      • \u53f0\u7063\u516c\u53f8
      • \u529f\u80fd\u5b8c\u6574\u3001\u6559\u5b78\u6587\u4ef6\u8c50\u5bcc
      • \u53ef\u5728\u5f8c\u53f0\u5b8c\u6210\u90e8\u5206\u5206\u6790
      "},{"location":"essay/questionnaire-principal/#\u4f7f\u7528\u5834\u666f","title":"\u4f7f\u7528\u5834\u666f","text":"
      • \u8ffd\u6c42\u826f\u597d\u9ad4\u9a57
      • \u6700\u9ad8\u5ea6\u7684\u5ba2\u5236\u9ad4\u9a57
      • \u554f\u5377\u7d50\u679c\u9032\u884c\u62bd\u734e
      "},{"location":"essay/questionnaire-principal/#\u7f3a\u9ede_3","title":"\u7f3a\u9ede","text":"
      • \u904b\u884c\u901f\u5ea6\u6162
      "},{"location":"essay/questionnaire-principal/#hotjar","title":"Hotjar","text":"
      • \u6709\u514d\u8cbb\u7248
      • \u63d2\u5165\u7db2\u9801
      • \u5f62\u5f0f\u5c0e\u81f4\u984c\u6578\u6709\u56b4\u683c\u9650\u5236
      "},{"location":"essay/questionnaire-principal/#\u4f7f\u7528\u5834\u666f_1","title":"\u4f7f\u7528\u5834\u666f","text":"
      • \u7b2c\u4e00\u5370\u8c61\u3001\u5230\u7ad9\u539f\u56e0
      • \u907f\u514d\u8a55\u4f30\u529f\u80fd\u984c
      "},{"location":"essay/questionnaire-principal/#\u7f3a\u9ede_4","title":"\u7f3a\u9ede","text":"
      • \u5c0d\u7528\u6236\u5e72\u64fe\u7387\u9ad8
      • \u53ea\u80fd\u6975\u77ed\u554f\u5377
      • \u53ea\u80fd\u9472\u5d4c\u5728\u7db2\u9801\u800c\u975e APP
      "},{"location":"essay/questionnaire-principal/#\u5728\u53f0\u7063\u975e\u4e3b\u6d41","title":"\u5728\u53f0\u7063\u975e\u4e3b\u6d41","text":"
      • Typeform
      • \u826f\u597d\u4f7f\u7528\u8005\u9ad4\u9a57
      • \u6709\u904e\u500b\u8cc7\u5916\u6d29\u7684\u7d93\u9a57
      • SurveyMonkey
      • \u50c5\u6b21\u65bc Google \u7684\u5927\u578b\u554f\u5377\u670d\u52d9
      • \u8a08\u7b97\u6a5f
      • Qualtrics
      • \u586b\u7b54\u9ad4\u9a57\u4f73
      • \u5f8c\u53f0\u50c5\u6709\u82f1\u6587
      "},{"location":"essay/questionnaire-principal/#\u88fd\u4f5c\u6d41\u7a0b","title":"\u88fd\u4f5c\u6d41\u7a0b","text":""},{"location":"essay/questionnaire-principal/#\u8349\u7a3f\u5de5\u5177","title":"\u8349\u7a3f\u5de5\u5177","text":"

      \u5229\u7528 spreadsheet\u3001excel \u7b49\u5de5\u5177\u505a\u8349\u7a3f\uff0c\u65b9\u4fbf\u8a18\u9304\u4fee\u6539\u904e\u7a0b\u548c\u505a\u7559\u8a00\u3002

      "},{"location":"essay/questionnaire-principal/#\u8a18\u9304\u4fdd\u5b58","title":"\u8a18\u9304\u4fdd\u5b58","text":"

      \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":"
      • \u4e0d\u50c5\u8981\u8ffd\u8e64\u554f\u5377\u767c\u9001\u6578\u91cf\uff0c\u4e5f\u8981\u770b\u8f49\u63db\u7387
      • \u907f\u514d\u53ef\u4ee5\u900f\u904e\u8cc7\u6599\u4ea4\u53c9\u6bd4\u5c0d\u51fa\u4e00\u500b\u4eba\uff0c\u4fdd\u8b77\u586b\u7b54\u8005\u7684\u96b1\u79c1
      • \u82e5\u586b\u7b54\u8005\u4e0d\u5e0c\u671b\u7559\u4e0b\u500b\u8cc7\uff0c\u8981\u53ef\u4ee5\u522a\u9664\u8a72\u7d00\u9304
      "},{"location":"essay/questionnaire-principal/#\u4ea4\u53c9\u5206\u6790","title":"\u4ea4\u53c9\u5206\u6790","text":"
      • \u5169\u500b\u8b8a\u9805\u5f7c\u6b64\u4ea4\u53c9\uff0c\u89c0\u5bdf\u8da8\u52e2\u548c\u5dee\u7570
      • Excel \u7684 \u6a1e\u7d10\u5206\u6790
      "},{"location":"essay/questionnaire-principal/#\u5831\u544a\u65b9\u5f0f","title":"\u5831\u544a\u65b9\u5f0f","text":"
      • \u7528\u6236\u6a23\u8c8c Profile
      • \u5713\u9905\u5716
      • \u9577\u689d\u5716
      • \u8981\u6ce8\u610f\u62bd\u6a23\u8aa4\u5dee
      • Margin of Error https://cyber-edge.com/determining-minimum-survey-sample-sizes-based-on-survey-margin-of-error/
      "},{"location":"essay/architecture/made-container/","title":"\u5982\u4f55\u88fd\u4f5c Docker Container","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

      1. \u6e96\u5099\u597d\u61c9\u7528\u7a0b\u5f0f\u7684\u76f8\u4f9d\u5957\u4ef6
      2. \u6e96\u5099\u597d\u57f7\u884c\u61c9\u7528\u7a0b\u5f0f\u7684\u74b0\u5883
      3. \u57f7\u884c\u61c9\u7528\u7a0b\u5f0f
      "},{"location":"essay/architecture/made-container/#\u6e96\u5099\u597d\u61c9\u7528\u7a0b\u5f0f\u7684\u76f8\u4f9d\u5957\u4ef6","title":"\u6e96\u5099\u597d\u61c9\u7528\u7a0b\u5f0f\u7684\u76f8\u4f9d\u5957\u4ef6","text":"

      \u4ee5 Node.js \u70ba\u4f8b\uff0c\u5247\u662f npm i \u6216\u66f4\u7cbe\u7c21\u7684 npm ci --only=production\u3002 \u5176\u4ed6\u5982\uff1a

      • PHP \u7684 composer install --no-dev --optimize-autoloader
      • Python \u7684 pip install
      • Gradle \u7684 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

      "},{"location":"essay/architecture/made-container/#\u7bc4\u4f8b","title":"\u7bc4\u4f8b","text":"

      \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\u672c
      • v0.0.2 \u4ee3\u8868\u4fee\u6b63 server.js
      • v0.0.3 \u4ee3\u8868\u65b0\u589e\u5957\u4ef6
      Layer Size v0.0.1 v0.0.2 v0.0.3 1: FROM node AS deps N/A 532fd65ecacd 532fd65ecacd 532fd65ecacd 2: WORKDIR /srv N/A bec6e0fc4a96 bec6e0fc4a96 bec6e0fc4a96 3: COPY package* N/A 58341ced6003 58341ced6003 959c7f2c693b 4: RUN npm ci N/A dd6cd3c5a283 dd6cd3c5a283 6e9065bacad0 5: FROM node:lts-slim AS release 5.6MB e7d92cdc71fe e7d92cdc71fe e7d92cdc71fe 6: COPY node_modules 67.8MB a86f6f94fc75 a86f6f94fc75 b97b002f4734 7: COPY . . 138kB cab24763e869 7f6f49f5bc16 f2c9ac237a1c 8: EXPOSE 0 0efe3d9cd543 4fc6b68804c9 f4b64a1c5e64 9: ENV HOST 0 9104495370ba df073bd1c682 fee5ff92855c 10: ENV PORT 0 04d6b8f0afce f67d0897cb11 638a7ff0c240 11: CMD 0 b3babfadde8e 9b6514336e72 12d0c7e37935 Cost per Deploy N/A 0 138kB 68MB"},{"location":"essay/architecture/pki-checklist/","title":"\u5efa\u7f6e PKI \u6ce8\u610f\u4e8b\u9805","text":"

      \u672c\u8cc7\u6599\u4f86\u6e90\u65bc NIST 800-32 Ct.3

      • Certification Path Building
      • Key Rollover in the Resource Public Key Infrastructure
      • X.509

      \u53ef\u80fd\u9700\u8981\u6e9d\u901a\u7684\u539f\u56e0\uff1a

      • \u521d\u59cb\u8a3b\u518a/\u8a8d\u8b49
      • \u91d1\u9470\u5c0d\u66f4\u65b0
      • \u6191\u8b49\u66f4\u65b0
      "},{"location":"essay/architecture/pki-checklist/#nist","title":"NIST","text":""},{"location":"essay/architecture/pki-checklist/#\u540d\u8a5e\u4ecb\u7d39","title":"\u540d\u8a5e\u4ecb\u7d39","text":"
      • CA \u7c3d\u7f72\u7c3d\u8b49\u7d66 user\uff0c\u6b64\u6642 CA \u662f issuer\u3002
      • CA \u6703\u628a\u9a57\u8b49 user \u7684\u8cc7\u8a0a\u4e1f\u7d66 Registration Authority(RA)\uff0c\u4f8b\u5982\uff1aDNS
      • \u4f7f\u7528 CA \u7c3d\u51fa\u4f86\u7684\u7c3d\u8b49\uff0c\u4e26\u4ee5\u6b64\u4f86\u4fe1\u4efb user \u7684\u7b2c\u4e09\u65b9\u7a31\u70ba relying parties

      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

      • user name
      • issuer name
      • public key
      • signature
      • validity (starting and expiring times)
      • cryptographic algorithm(s)
      • \u548c\u5176\u4ed6 Private \u7684 extension

      \u9a57\u8b49\u904e\u7a0b

      • Cross certificates\uff0c\u5c31\u7b97\u662f root CA(trust anchors)\u4e5f\u53ef\u80fd\u6703\u9700\u8981\u5176\u4ed6\u540c\u6a23\u662f root CA \u7684\u7c3d\u8b49\u3002
      • certification path\uff0crelying party \u5f9e user \u5230 trust anchors \u7684\u9a57\u8b49\u6d41\u7a0b

      \u9a57\u8b49\u904e\u7a0b\u4e2d\u7684\u6bcf\u4e00\u6bb5\u90fd\u9700\u8981\u78ba\u8a8d\uff08path validation\uff09\uff1a

      • \u7c3d\u8b49\u9a57\u8b49
      • \u7c3d\u8b49\u6c92\u88ab\u64a4\u92b7
      • \u88ab\u6b63\u78ba\u7684\u653f\u7b56 issue

      \u7c3d\u8b49\u7684\u72c0\u614b\u5c55\u793a\uff08\u7c3d\u8b49\u6c92\u88ab\u64a4\u92b7\uff09\u65b9\u5f0f\u6709\u5169\u7a2e\uff1a

      • Online Certificate Status Protocol (OCSP)
      • certificate revocation list, or CRL

      \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":"
      • [ ] \u78ba\u4fdd\u652f\u63f4\u4efb\u4e00\u5354\u5b9a\uff1a
      • Certificate Management Protocol (CMP) RFC 4210
      • Enrollment over Secure Transport (EST) RFC 7030
      • Certificate Management Using Cryptographic Message Syntax (CMC) RFC 5272
      • [ ] \u78ba\u4fdd\u53ef\u4ee5\u7522\u751f\u6191\u8b49\uff0c\u5176\u4e2d\u61c9\u542b\u6709\u7684\u8cc7\u8a0a\u65bc\u5f8c\u8a0e\u8ad6\u4e4b\u3002
      • [ ] \u53ef\u4ee5\u7522\u751f\u591a\u7d44\u6191\u8b49\uff0c\u4e14\u5141\u8a31\u7279\u5b9a\u91d1\u9470\u7a2e\u985e\u3002
      • [ ] \u5141\u8a31 CRL\u3002
      • [ ] \u5141\u8a31\u5916\u90e8\u9023\u7d50 CRL\uff0c\u4e14\u5fc5\u9808\u542b\u6709 HTTP URLS\u3002
      • [ ] \u61c9\u53ef\u4ee5\u900f\u904e LDPA \u53d6\u5f97 CRL\u3002
      • [ ] \u5141\u8a31 OCSP\u3002
      • [ ] \u6bcf\u7d44 PKI \u90fd\u6709\u5176\u6191\u8b49\u8cc7\u8a0a\uff0c\u4e14\u8cc7\u8a0a\u80fd\u88ab\u986f\u793a\u65bc\u5176\u7c3d\u7f72\u7684\u7c3d\u8b49 CRL\u3002
      • [ ] \u5141\u8a31\u8a2d\u5b9a\u5ba2\u5236\u76f8\u95dc\u8cc7\u8a0a\u65bc\u6191\u8b49\u4e2d\u3002
      • [ ] \u5141\u8a31\u4f7f\u7528 RSA \u548c ECDSA \u6f14\u7b97\u6cd5\u3002
      • [ ] \u53ef\u4ee5\u5099\u4efd\u4e26\u707d\u96e3\u5fa9\u539f\u3002
      • [ ] \u5141\u8a31\u6b0a\u9650\u5728\u5e33\u865f\u4e4b\u9593\u7684\u8f49\u79fb\u3002
      "},{"location":"essay/architecture/pki-checklist/#ocsp-responders","title":"OCSP Responders","text":"
      • [ ] \u78ba\u4fdd OCSP responders \u7b26\u5408 RFC 6960 Online Certificate Status Protocol\u3002
      • [ ] \u78ba\u4fdd\u80fd\u8655\u7406\u6709\u7121\u7c3d\u7ae0\u548c\u540d\u7a31\u7684\u8acb\u6c42\uff0c\u5c31\u7b97\u662f\u62d2\u7d55\u4e5f\u9808\u56de\u61c9\u3002
      • [ ] \u56de\u61c9\u6642\u6c92\u6709\u4efb\u4f55\u65bc RFC 5019 \u4e2d\u63d0\u53ca\u7684\u932f\u8aa4
      • [ ] \u56de\u61c9\u6642\u7684\u7c3d\u7ae0\u5efa\u8b70\u7b26\u5408\u548c\u5176\u7522\u751f\u7684\u6191\u8b49\u7684\u6f14\u7b97\u6cd5\u76f8\u540c\uff0c\u91d1\u9470\u683c\u5f0f\u4e5f\u5efa\u8b70\u4e00\u6a23\u3002\u5141\u8a31\u4f7f\u7528 RSA \u548c ECDSA \u6f14\u7b97\u6cd5\u3002
      "},{"location":"essay/architecture/pki-checklist/#\u52a0\u5bc6\u6a21\u7d44","title":"\u52a0\u5bc6\u6a21\u7d44","text":"
      • [ ] CAs\u3001Key Recovery Servers \u548c OCSP responders \u9ad8\u65bc FIPS 140-2 \u7b49\u7d1a 3\u3002
      • [ ] RAs \u9700\u9ad8\u65bc FIPS 140-2 \u7b49\u7d1a 2\u3002
      • [ ] \u78ba\u4fdd\u8acb\u6c42\u7c3d\u8b49\u7684\u55ae\u4f4d\u548c\u4f7f\u7528\u8005\u7684\u52a0\u5bc6\u6a21\u7d44\u9ad8\u65bc FIPS 140-2 \u7b49\u7d1a 1\u3002
      "},{"location":"essay/architecture/pki-checklist/#key-recovery-servers","title":"Key Recovery Servers","text":"
      • [ ] \u5982\u679c PKI \u652f\u63f4\u91d1\u9470\u7522\u751f\uff0c\u5c31\u61c9\u652f\u63f4\u91d1\u9470\u6551\u63f4\u670d\u52d9\u3002
      • [ ] \u61c9\u652f\u63f4\u81ea\u52d5\u5316\u7684\u91d1\u9470\u6551\u63f4\u670d\u52d9\u3002
      "},{"location":"essay/architecture/pki-checklist/#relying-party-software","title":"Relying Party Software","text":"
      • [ ] \u8def\u7a0b\u9a57\u8b49\uff08path validation\uff09
      • [ ] \u78ba\u4fdd\u7b26\u5408 RFC 5280 conformant path validation\u3002
      • [ ] \u5141\u8a31\u7d44\u7e54\u5916\u7684\u9a57\u8b49\uff08\u4f8b\u5982\u900f\u904e federal agency\uff09\u4e14\u9700\u7b26\u5408 NIST \u5efa\u8b70\u7684\u9a57\u8b49\u65b9\u5f0f\u3002
      • [ ] \u5141\u8a31\u6709 Bridge \u7684\u8def\u5f91\uff0c\u4e14\u9700\u7b26\u5408 NIST \u5efa\u8b70\u7684\u9a57\u8b49\u65b9\u5f0f\u3002
      • [ ] \u61c9\u8a72\u540c\u6642\u652f\u63f4 CRLs \u548c OCSP\u3002
      • \u9a57\u8b49\u6191\u8b49
      • [ ] \u78ba\u4fdd\u53ef\u4ee5\u5efa\u7acb\u9a57\u8b49\u7684\u8def\u5f91
      • [ ] \u81f3\u5c11\u8981\u80fd\u8655\u7406 HTTP-based \u7684\u56de\u61c9
      • [ ] \u61c9\u8981\u80fd\u8655\u7406 LDAP \u7684\u5354\u5b9a
      • [ ] \u4f5c\u7528\u65bc\u4f01\u696d\u7aef PKI \u7684 RP \u61c9\u80fd\u767c\u73fe\u8def\u5f91\u4e0a\u53d7 trust anchor CA \u8a8d\u8b49\u7684\u968e\u5c64\u5f0f CA\u3002
      • [ ] \u975e\u4f01\u696d\u7aef PKI \u7684 RP \u61c9\u80fd\u767c\u73fe\u8def\u5f91\u4e0a\u975e\u968e\u5c64\u5f0f\u7684 CA\u3002
      "},{"location":"essay/architecture/pki-checklist/#client-software","title":"Client Software","text":"
      • [ ] \u5ba2\u6236\u7aef\u5141\u8a31\u591a\u500b\u516c\u79c1\u9470\u8acb\u6c42\u591a\u500b\u7c3d\u8b49
      • [ ] \u52a0\u5bc6\u6a21\u7d44\u9ad8\u65bc FIPS 140-2 \u7b49\u7d1a 1
      • [ ] \u5ba2\u6236\u61c9\u53ef\u4f7f\u7528 CA \u63d0\u4f9b\u7684 certificate management protocol
      "},{"location":"essay/architecture/pki-checklist/#\u7d66-pki-\u7ba1\u7406\u8005\u7684\u5efa\u8b70","title":"\u7d66 PKI \u7ba1\u7406\u8005\u7684\u5efa\u8b70","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":"
      • [ ] \u78ba\u4fdd CAs \u8a2d\u5b9a\u597d\u53ef\u63a5\u53d7\u7684\u516c\u79c1\u9470\u6f14\u7b97\u6cd5\u548c\u91d1\u9470\u9577\u5ea6\uff0c\u9084\u6709\u9a57\u8b49 domain
      • [ ] \u70ba\u4e86\u6700\u5927\u5316\u6a19\u6e96\u6027\uff0c\u61c9\u4f7f\u7528 RSA \u53bb\u505a\u7c3d\u7ae0\u548c\u91d1\u9470\u8f49\u79fb
      • [ ] \u70ba\u4e86\u6700\u5927\u5316\u5b89\u5168\u6027\u548c\u6548\u7387\uff0c\u61c9\u4f7f\u7528 EC \u53bb\u505a\u7c3d\u7ae0\u548c\u91d1\u9470\u8f49\u79fb
      • [ ] \u7576\u7c3d\u767c\u7c3d\u8b49\u6216 CRLs \u6642\uff0c\u61c9\u7b26\u5408\u6f14\u7b97\u6cd5\u3001\u9577\u5ea6\u7684\u898f\u7bc4
      • [ ] \u5229\u7528 subject key \u7522\u751f signing key \u6642\uff0c\u7c3d\u8b49\u7684\u5b89\u5168\u6027\u61c9\u5927\u65bc subject key \u53bb\u7c3d\u8b49
      • \u7522\u751f\u91d1\u9470\u6642\uff1a
      • [ ] \u4f7f\u7528\u8005\u61c9\u7522\u751f\u5c6c\u65bc\u4ed6\u5011\u81ea\u5df1\u7684\u7c3d\u8b49\u91d1\u9470
      • [ ] \u82e5\u4e0a PKI \u900f\u904e\u91d1\u9470\u50b3\u9001\u65b9\u5f0f\u53bb\u50b3\u9001\u91d1\u9470\uff0c\u61c9\u63d0\u4f9b\u91d1\u9470\u5fa9\u539f\u670d\u52d9
      • [ ] CAs \u8981\u78ba\u4fdd\u91d1\u9470\u771f\u7684\u5c6c\u65bc\u4f7f\u7528\u8005\uff08PoP\uff09
      • [ ] \u61c9\u5728\u7c3d\u8b49\u524d\u5148\u9a57\u8b49\u91d1\u9470
      • Key usage extension
      • [ ] \u7c3d\u8b49\u61c9\u5305\u542b key-ussage extension
      • [ ] key-ussage extension \u61c9\u9650\u5236\u4e00\u7a2e\u7372\u53d6\u65b9\u5f0f\uff0c\u4f7f\u7528\u8005\u81ea\u5df1\u7522\u751f\u6216 PKI \u7522\u751f
      • [ ] \u6240\u6709\u7c3d\u8b49\u61c9\u5305\u542b CRLs \u7684\u4f4d\u7f6e\u8cc7\u8a0a
      • [ ] \u82e5\u63d0\u4f9b OCSP responder\uff0c\u61c9\u63d0\u4f9b\u4f4d\u7f6e\u8cc7\u8a0a\u65bc\u7c3d\u8b49\u4e2d
      • [ ] \u5728\u904e\u671f\u524d\u61c9\u91cd\u65b0\u7c3d\u7f72\u5b8c\u6210\uff0c\u4e26\u4e14\u6b63\u78ba\u66f4\u65b0\u6191\u8b49\u8cc7\u8a0a\uff0c\u5982 domain \u6216\u4fe1\u7bb1
      "},{"location":"essay/architecture/pki-checklist/#certificate-revocation-requests","title":"Certificate Revocation Requests","text":"
      • [ ] \u61c9\u63d0\u4f9b\u81ea\u52d5\u64a4\u92b7\u6a5f\u5236\uff1a
      • [ ] CAs \u61c9\u5728\u64a4\u92b7\u6642\u9032\u884c\u8eab\u4efd\u9a57\u8b49
      • [ ] \u4f7f\u7528\u8005\u63d0\u4f9b\u8eab\u4efd\u8b49\u660e\u4e26\u8981\u6c42\u64a4\u92b7\u6642\uff0c\u61c9\u5728\u4e0d\u9700\u4eba\u529b\u4ecb\u5165\u4e0b\u57f7\u884c\u3002
      • [ ] RAs \u61c9\u80fd\u5728\u8a2d\u5b9a\u5f8c\uff0c\u4ee3\u8868\u4f7f\u7528\u8005\u6216\u516c\u53f8\u8acb\u6c42\u7c3d\u8b49\u64a4\u92b7
      "},{"location":"essay/architecture/pki-checklist/#certificate-revocation-list-generation","title":"Certificate Revocation List Generation","text":"
      • [ ] \u70ba\u4e86\u6700\u5927\u6a19\u6e96\u5316\uff0cCAs \u61c9\u63d0\u4f9b\u5b8c\u6574\u7684\u64a4\u92b7\u7c3d\u8b49\u65bc CRL \u4e2d
      • [ ] \u82e5\u6709\u5927\u91cf\u7684\u64a4\u92b7\u7c3d\u8b49\uff0c\u53ef\u4ee5\u7522\u751f\u90e8\u5206\u7684 CRL\uff0c\u4f46\u9808\u984d\u5916\u63d0\u4f9b\u5b8c\u6574\u7684 CRL \u4f4d\u7f6e\u8cc7\u8a0a\u3002\u4e00\u4efd CRL \u4e0d\u61c9\u8d85\u904e 250,000 \u7684\u64a4\u92b7\u7c3d\u8b49\u3002
      "},{"location":"essay/architecture/pki-checklist/#pki-repositories-for-the-distribution-of-certificates-and-crls","title":"PKI Repositories for the Distribution of Certificates and CRLs","text":"
      • [ ] PKIs \u61c9\u80fd\u516c\u958b\u63d0\u4f9b\u7c3d\u8b49\u548c CRL
      • [ ] PKI \u5eab\u61c9\u80fd\u63d0\u4f9b\u8eab\u4efd\u9a57\u8b49\u5f8c\u7684\u7c3d\u8b49\u4f4d\u7f6e\u4fee\u6539\u548c PKI \u5eab\u7684 CRL \u5206\u4f48
      • [ ] PKI \u5eab\u61c9\u81f3\u5c11\u5141\u8a31 HTTP 1.1 \u6216 LDAP version 3
      • [ ] \u70ba\u4e86\u6700\u5927\u6a19\u6e96\u5316\uff0c HTTP \u548c LDAP \u90fd\u61c9\u88ab\u7b26\u5408
      • [ ] HA \u61c9\u88ab\u8003\u616e
      • [ ] PKI \u5eab\u61c9\u5305\u542b\u6240\u6709\u5176\u64c1\u6709\u7684 PKI \u7684\u6240\u6709\u7c3d\u8b49
      • [ ] PKI \u5eab\u61c9\u5305\u542b\u6240\u6709\u5176\u64c1\u6709\u7684 PKI \u7684 CRL
      "},{"location":"essay/architecture/pki-checklist/#ocsp-responders_1","title":"OCSP Responders","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

      • \u70ba\u4e86\u6700\u5927\u6a19\u6e96\u5316\uff1a
      • [ ] OCSP responders \u4e0d\u61c9\u8981\u6c42\u8acb\u6c42\u8981\u6709\u7c3d\u540d\uff0c\u4e14\u4e0d\u80fd\u9650\u5236\u54ea\u4e9b\u7c3d\u8b49\u72c0\u614b\u662f\u53ef\u4ee5\u88ab\u5141\u8a31\u7684
      • [ ] \u61c9\u80fd\u56de\u61c9\u57fa\u672c\u7684\u8cc7\u8a0a\uff0c\u4e14\u4e0d\u80fd\u542b\u6709\u5371\u96aa\u7684 extensions
      • \u82e5\u50c5\u9700\u7b26\u5408\u5167\u90e8\u793e\u7fa4\u800c\u975e\u6a19\u6e96\u5316\uff1a
      • [ ] OCSP responders \u53ef\u8981\u6c42\u8acb\u6c42\u8981\u6709\u7c3d\u540d\uff0c\u4e14\u53ef\u62d2\u7d55\u5916\u90e8\u7684\u8acb\u6c42
      • [ ] OCSP \u7684\u56de\u61c9\u8a0a\u606f\u53ef\u80fd\u542b\u6709\u7279\u6b8a\u7684 extensions
      "},{"location":"essay/architecture/pki-checklist/#backup-and-archive","title":"Backup and Archive","text":"
      • [ ] \u61c9\u8a72\u5099\u4efd\u8cc7\u6599\uff0c\u4e26\u7576\u707d\u96e3\u767c\u751f\u5f8c\u80fd\u91cd\u65b0\u555f\u7528
      • [ ] CAs \u61c9\u7d00\u9304\u4f55\u6642\u548c\u4f55\u4eba\u7533\u8acb\u7684\u7c3d\u8b49
      • [ ] \u61c9\u6709 log \u7d00\u9304\u6240\u6709\u7c3d\u8b49\u548c CRL
      • [ ] \u7533\u8acb\u4eba\u7684\u516c\u9470\u61c9\u548c\u5176\u7c3d\u8b49\u4e00\u8d77\u88ab\u4fdd\u5b58
      "},{"location":"essay/architecture/pki-checklist/#relying-party-integration-and-configuration","title":"Relying Party Integration and Configuration","text":"
      • [ ] \u61c9\u53ef\u4ee5\u767c\u73fe\u8def\u5f91\u548c\u7372\u5f97\u72c0\u614b\u8cc7\u8a0a
      • [ ] \u61c9\u8981\u53ef\u4ee5\u652f\u63f4 CRL \u548c OCSP \u7684\u683c\u5f0f
      • [ ] \u61c9\u80fd\u5206\u8fa8\u6700\u5c0f\u55ae\u4f4d\u7684 trust anchors
      • [ ] \u7576\u60c5\u5883\u8655\u65bc\u300c\u516c\u53f8\u5c0d\u653f\u5e9c\u300d\u6216\u300c\u653f\u5e9c\u5c0d\u653f\u5e9c\u300d\uff0c\u61c9\u4f7f\u7528 Common Policy Root CA \u6216\u548c Common Policy Root CA \u4e92\u76f8\u8a8d\u8b49\u7684 CA \u6216\u4ee5 Federal Bridge \u70ba trust anchor \u7684 CA
      • [ ] \u7576\u60c5\u5883\u5c6c\u65bc\u300c\u4f7f\u7528\u8005\u5c0d\u653f\u5e9c\u300d\uff0c\u61c9\u7528\u7a0b\u5f0f\u7684\u5b89\u5168\u6027\u7121\u6cd5\u505a\u5230\u9ad8\u5ea6\u9650\u5236\uff0c\u70ba\u4e86\u9054\u6210\u9ad8\u6a19\u6e96\u6027\uff0c\u4f7f\u7528\u8005\u53ef\u80fd\u6703\u4f7f\u7528\u7684\u9810\u5148\u5b89\u88dd\u81f3 COTS products \u7684 trust anchors
      • \u8def\u5f91\u9a57\u8b49\uff1a
      • [ ] \u5c0d\u548c\u4f7f\u7528\u8005\u61c9\u7528\u7a0b\u5f0f\u5c0d\u63a5\u7684\u9023\u7dda\uff0c\u8def\u5f91\u9a57\u8b49\u61c9\u88ab\u8a2d\u5b9a\u6210\u53ef\u63a5\u53d7\u6240\u6709\u5408\u6cd5\u8def\u5f91
      • [ ] \u5c0d\u9700\u8981\u9ad8\u5ea6\u5b89\u5168\u6027\u7684\u7cfb\u7d71\uff0c\u61c9\u88ab\u8a2d\u5b9a\u6210\u50c5\u63a5\u53d7\u7279\u5b9a\u9069\u7576\u7684\u653f\u7b56\u7684\u8def\u5f91
      "},{"location":"essay/architecture/pki-checklist/#user-guidance-subscribers","title":"User Guidance (Subscribers)","text":"

      \u5c0d\u65bc\u548c PKI \u7533\u8acb\u6b0a\u8b49\u7684\u4f7f\u7528\u8005\uff1a

      • [ ] \u4f7f\u7528\u8005\u61c9\u7522\u751f\u5c6c\u65bc\u81ea\u5df1\u7684\u91d1\u9470\uff0c\u7528\u4f5c\u7c3d\u8b49\u548c\u8eab\u4efd\u8b49\u660e
      • [ ] \u4f7f\u7528\u8005\u53ef\u80fd\u81ea\u5df1\u7522\u751f\u91d1\u9470\uff0c\u6216\u5f9e\u53ef\u4fe1\u4efb\u7684\u8cc7\u6e90\u53d6\u5f97\u91d1\u9470
      • [ ] \u4f7f\u7528\u8005\u61c9\u5305\u7ba1\u597d\u79c1\u9470\uff0c\u5305\u62ec\u52a0\u5bc6\u79c1\u9470\u7684 PIN \u78bc\u6216\u5bc6\u78bc
      • [ ] \u4f7f\u7528\u8005\u61c9\u8acb\u6c42\u64a4\u92b7\uff0c\u7576\u4ed6\u89ba\u5f97\u8a72\u6a21\u7d44\u88ab\u5077\u3001\u8907\u88fd\u6216\u7834\u58de
      • \u4f7f\u7528\u8005\u61c9\u7ba1\u7406\u820a\u7684\u91d1\u9470\uff0c\u9664\u975e\u7ba1\u7406\u55ae\u4f4d\u6709\u53e6\u5916\u653f\u7b56\u8aaa\u660e\uff1a
      • [ ] \u7576\u7c3d\u8b49\u904e\u671f\u5c31\u61c9\u628a\u79c1\u9470\u4e1f\u68c4
      • [ ] 2. \u7528\u4f86\u7522\u751f\u7c3d\u7ae0\u7684\u79c1\u9470\uff0c\u61c9\u7b49\u5230\u5176\u7522\u751f\u7684\u79c1\u9470\u90fd\u88ab\u91cd\u65b0\u52a0\u5bc6\u6216\u6368\u68c4\u5f8c\u624d\u80fd\u4e1f\u68c4
      "},{"location":"essay/architecture/replace-docker-desktop/","title":"\u53d6\u4ee3 Docker Desktop","text":"

      Docker Desktop \u5728\u7279\u5b9a\u689d\u4ef6\u4e0b\u8981\u9322\u4e86\uff0c\u8a72\u7528\u4ec0\u9ebc\u53d6\u4ee3\uff1f

      \u73fe\u6709\u5de5\u5177\uff1a

      • lima\uff0c\u5efa\u7f6e VM \u5728 macOS \u4e0a\uff0c\u4e26\u63d0\u4f9b runC \u7684\u4ecb\u9762\u3002
      • nerdctl\uff0c\u5728 lima \u4e4b\u4e0a\u5efa\u7f6e containerd\u3002
      • colima\uff0c\u628a\u4e0a\u8ff0\u5169\u8005\u6574\u5408\u8d77\u4f86\uff08\u9810\u8a2d\u4f7f\u7528 docker\uff0c\u4f60\u53ef\u4ee5\u900f\u904e colima start --runtime containerd \u4f86\u8abf\u6574\uff09\uff0c\u8b93\u4f60\u53ef\u4ee5\u5feb\u901f\u5efa\u7f6e\u74b0\u5883\u3002
      • finch\uff0c\u628a\u4e0a\u8ff0\u5169\u8005\uff08lima, nerdctl\uff09\u6574\u5408\u8d77\u4f86\u4e26\u63d0\u4f9b\u6307\u4ee4\u4ecb\u9762
      • podman\uff0cAll-in-one\u3002

      \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":"
      1. \u9ede\u9078\u53f3\u4e0a\u89d2\u87f2\u87f2\u5716\u6848
      2. \u6700\u4e0b\u9762\u7684 Uninstall
      "},{"location":"essay/architecture/replace-docker-desktop/#\u91cd\u65b0\u5b89\u88dd-docker","title":"\u91cd\u65b0\u5b89\u88dd Docker","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":"
      • Vagrant
      • VirtualBox
      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

      "},{"location":"essay/architecture/tcp-socket-loss-after-dhcp/#\u884c\u70ba\u8868\u73fe","title":"\u884c\u70ba\u8868\u73fe","text":"

      \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

      "},{"location":"essay/architecture/tcp-socket-loss-after-dhcp/#smoking-gun-1---system-network","title":"Smoking gun 1 - system-network","text":"

      \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 ss

      ss \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 ethtool

      ss \u662f\u900f\u904e socket_diag \u53bb\u53d6\u5f97 OS's kernel \u7684\u9023\u7dda\u8cc7\u8a0a\uff0c\u5305\u62ec\uff1a

      • socket
      • routing table
      • connection tracking

      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

      • pre-routing\uff0c\u7d00\u9304\uff08conntrack\uff09\u3001\u4fee\u6b63\uff08mangle\uff09\u3001\u8f49\u5740\u5c0d\u61c9\uff08NAT\uff09
      • routing decision\uff0c\u5224\u65b7\u662f\u5426\u9001\u7d66 user-space
      • input\uff0c\u4fee\u6b63\uff08mangle\uff09\u3001\u7be9\u9078\uff08filter\uff09

      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

      • \u5b8c\u6574\u6536\u5230\u4e0a\u4e00\u500b\u8cc7\u6599\u7684\u300c\u78ba\u8a8d\u901a\u77e5\u300d\uff1f
      • Keep-Alive \u901a\u77e5\uff1f
      • \u4e09\u6b21\u4ea4\u63e1\u5b8c\u6210\u901a\u77e5\uff1f
      • \u56db\u6b21\u63ee\u624b\u7684\u968e\u6bb5\u6216\u5b8c\u6210\u901a\u77e5\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

      TCP ACK Scan

      \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

      • \u5354\u5b9a\u7a2e\u985e
      • source IP, port
      • destination IP, port
      • connection state
      $ 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

      • conntrack \u6536\u5230\u4e00\u500b UDP \u5c01\u5305\uff1b
      • \u5354\u5b9a\u7de8\u865f 17\uff1b
      • 29 \u79d2\u5f8c\u9019\u500b\u8cc7\u6599\u5c07\u6703\u88ab\u6e05\u9664\uff0c\u6839\u64da\u5354\u5b9a\u7684\u4e0d\u540c\uff0c\u9054\u5230\u7279\u5b9a\u72c0\u614b\u5f8c\u9019\u500b\u503c\u5c07\u6703\u88ab\u91cd\u7f6e\uff1b
      • 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
      • IP \u548c Port
      • mark\uff0c\u6839\u64da\u5546\u52d9\u908f\u8f2f\u6a19\u8a18\u9019\u500b\u9023\u7dda\uff0c\u4f8b\u5982 iptables \u7684\u963b\u64cb\u7b49\u7b49\uff1b
      • use \u662f counter \u7528\u4f86\u8a18\u9304 GC \u72c0\u614b\u3002

      \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\u6e90

      conntrack \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

      1. Connection tracking (conntrack) - Part 1: Modules and Hooks
      2. Connection tracking (conntrack) - Part 2: Core Implementation
      3. Connection tracking (conntrack) - Part 3: State and Examples

      Fedora Magazine \u95dc\u65bc conntrack \u7684\u4ecb\u7d39\uff1a

      1. Network address translation part 1 \u2013 packet tracing
      2. Network address translation part 2 \u2013 the conntrack tool
      3. Network address translation part 3 \u2013 the conntrack event framework
      4. Network address translation part 4 \u2013 Conntrack troubleshooting
      "},{"location":"essay/architecture/tcp-socket-loss-after-dhcp/#\u9023\u7dda\u8868\u88ab\u585e\u6eff\u6703\u767c\u751f\u4ec0\u9ebc\u4e8b","title":"\u9023\u7dda\u8868\u88ab\u585e\u6eff\u6703\u767c\u751f\u4ec0\u9ebc\u4e8b","text":"

      \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

      "},{"location":"essay/architecture/tcp-socket-loss-after-dhcp/#\u9023\u7dda\u8868\u88ab\u91cd\u7f6e\u5f8c\u6703\u767c\u751f\u4ec0\u9ebc\u4e8b","title":"\u9023\u7dda\u8868\u88ab\u91cd\u7f6e\u5f8c\u6703\u767c\u751f\u4ec0\u9ebc\u4e8b","text":"

      \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

      • systemd-networkd removes IPv4 address during DHCP renewal
      • DHCP Renew Causing Interface To Restart

      \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

      • \u5728 Client\u3001Server\uff08Redis\uff09\u3001Firewall \u4e09\u7aef\u57f7\u884c TCP Dump\uff0c\u770b\u5230\u9023\u7dda\u88ab\u6b63\u5e38\u5efa\u7acb\u3002
      • Server \u9810\u8a2d\u6703\u6bcf\u4e94\u5206\u9418\u505a\u4e00\u6b21 TCP Keep-Alive\uff0c\u7576\u5b83\u9001\u51fa Keep-Alive ACK \u5c01\u5305\uff1a
      • Firewall \u6709\u770b\u5230 ACK \u5c01\u5305\uff1b
      • Client \u6709\u770b\u5230 ACK \u5c01\u5305\uff0c\u4e26\u4e14\u63a5\u8457\u56de\u61c9 RST \u5c01\u5305\uff1b
      • Firewall\u3001Server \u90fd\u6536\u5230 RST\uff0c\u4e26\u4e14\u91cb\u653e\u76f8\u95dc\u8cc7\u6e90\u3002
      • \u6b64\u6642\u900f\u904e netstat \u5728 Client \u4e0a\u5f97\u77e5\u5c0d\u61c9\u7528\u7a0b\u5f0f\u4f86\u8aaa\uff0c\u9023\u7dda\u4ecd\u7136\u5b58\u5728\uff1b
      • \u61f7\u7591 TCP Keep-Alive \u7684\u67d0\u7a2e\u5c01\u5305\u932f\u8aa4\uff0c\u4e26\u5617\u8a66\u628a\u983b\u7387\u5f9e 5 \u5206\u9418\u964d\u5230 30 \u5206\u9418\uff1b
      • \u6aa2\u67e5\u5c01\u5305\u5176\u4e2d\u7684\u683c\u5f0f\u548c\u5404\u500b\u8a2d\u5b9a\uff1b
      • \u61f7\u7591 Linux \u5e95\u5c64\u5be6\u4f5c\uff0c\u7db2\u8def\u4e0a\u67e5\u5404\u7a2e\u53ef\u80fd\uff1b
      • \u6700\u7d42\u63a8\u6e2c conntrack \u7684\u8868\u91cd\u7f6e\uff0c\u4e26\u900f\u904e syslog \u5f97\u5230 DHCP \u7684\u8aaa\u660e\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":"
      • Apache HTTP Server
      • Microsoft IIS
      • iPlanet Web Server

      \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

      • mod_jk
      • ISAPI redirector
      • NSAPI redirector

      \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

      • Jetty
      • JBoss
      • ...

      \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

      "},{"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":"
      1. Compression: proxy > app.use(compression())
      2. Asynchronous (async.) >> Synchronous (sync.)
        • The only reason to use sync. function is the time to start up server.
        • \u552f\u4e00\u6709\u7406\u7531\u4f7f\u7528\u540c\u6b65\u51fd\u6578\u7684\u6642\u6a5f\u662f\u5728\u6700\u521d\u555f\u52d5\u4e4b\u6642
      3. Static files: proxy > serve-static > res.sendFile()
      4. Console is sync! Always use async or use sync only in development.
        • Debugging: debug >> console
        • Application: Winston / Bunyan >> console
      5. Handle Error ( Important!, Detailed in next section )
        • Try-catch
        • Promise
      "},{"location":"essay/code/node.js-best-practice/#handle-error","title":"Handle Error","text":"
      1. Try-catch is synchronous.
      2. Express catch all sync. error in default (v.5 catch Promise as well)
      "},{"location":"essay/code/node.js-best-practice/#what-will-log","title":"What will log?","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":"
      1. callback invoked some time later after method (do another thing).
      2. happened exception! wait to finish other synchronous processes (do second thing).
      3. finish try-catch block.
      4. final run (finish project!).
      5. Fire the asynchronous exception!
      "},{"location":"essay/code/node.js-best-practice/#category","title":"Category","text":"
      1. Operational Errors
        • The errors you are/can except.
        • Log, Show, Retry/Abort.
      2. Programmer Errors
        • The best way to recover from programmer errors is to crash immediately
        • Try debug your program rather than handle it.
      "},{"location":"essay/code/node.js-best-practice/#do-in-configuration","title":"Do In Configuration","text":"
      1. env.NODE_ENV='production';
      2. Rebuild after error, use helpers or init system 1 2
      3. Multi-threads 3 4
      4. Caching 5 6
      5. Reverse-Proxy 7 8
      1. https://wiki.debian.org/systemd/ \u21a9

      2. http://upstart.ubuntu.com/ \u21a9

      3. https://nodejs.org/docs/latest/api/cluster.html \u21a9

      4. https://docs.strongloop.com/display/SLC/Clustering \u21a9

      5. Varnish https://www.varnish-cache.org/ \u21a9

      6. Nginx https://serversforhackers.com/nginx-caching/ \u21a9

      7. Nginx https://serversforhackers.com/nginx-caching/ \u21a9

      8. HAProxy http://www.haproxy.org/ \u21a9

      "},{"location":"essay/code/node.js-error/","title":"Node.js \u7684\u932f\u8aa4\u6709\u54ea\u4e9b","text":""},{"location":"essay/code/node.js-error/#network","title":"Network","text":"Error Context Ambiguous Meaning EACCES Server N/A Cannot listen on port due to permissions EADDRINUSE Server N/A Cannot listen on port since another process has it ECONNREFUSED Client No Client unable to connect to server ENOTFOUND Client No DNS lookup for the server failed ECONNRESET Client Yes Server closed connection with client EPIPE Client Yes Connection to server has closed ETIMEDOUT Client Yes Server didn\u2019t respond in time"},{"location":"essay/code/node.js-error/#process","title":"Process","text":"
      • 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.
      "},{"location":"essay/code/node.js-error/#file-system","title":"File System","text":"
      • 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.
      "},{"location":"essay/code/object-oriented-terms/","title":"\u7269\u4ef6\u5c0e\u5411\u540d\u8a5e","text":"

      \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

      • new\uff08construct\uff09\uff0c\u5efa\u69cb\uff0c\u5efa\u69cb\u51fa\u4f86\u7684\u6703\u7a31\u70ba\u4e00\u500b\u5be6\u4f8b\uff08instance\uff09\u6216\u7269\u4ef6\uff08object\uff09
      • attribute\uff08property\uff09\uff0c\u5c6c\u6027\uff0c\u5be6\u4f8b\u5c08\u5c6c\u7684\u503c
      • method\uff08function\uff09\uff0c\u51fd\u5f0f\uff0c\u5be6\u4f8b\u5c08\u5c6c\u7684\u51fd\u5f0f
      • public\uff0c\u516c\u958b\uff0c\u5916\u90e8\u64cd\u4f5c\u5be6\u4f8b\u53ef\u4ee5\u7528\u7684\u51fd\u5f0f\uff0c\u4e5f\u53ef\u4ee5\u5728\u985e\u5225\u5167\u90e8\u4f7f\u7528
      • private\uff0c\u79c1\u6709\uff0c\u53ea\u6709\u985e\u5225\u5167\u90e8\u53ef\u4ee5\u4f7f\u7528
      "},{"location":"essay/code/object-oriented-terms/#\u62bd\u8c61\u985e\u5225","title":"\u62bd\u8c61\u985e\u5225","text":"

      \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

      • extends\uff08inherit\uff09\uff0c\u7e7c\u627f\uff0cPoodle \u6216 Bulldog \u90fd\u53bb\u7e7c\u627f\u62bd\u8c61\u985e\u5225 Dog
      • protected\uff0c\u4fdd\u8b77\uff0c\u9664\u4e86\u985e\u5225\u5167\u90e8\u4f7f\u7528\uff0c\u7e7c\u627f\u5f8c\u7684\u985e\u5225\uff0c\u4e5f\u53ef\u4ee5\u4f7f\u7528\u9019\u500b\u7a2e\u985e\u7684\u5c6c\u6027\u6216\u51fd\u5f0f
      • abstract\uff0c\u62bd\u8c61\uff0c\u628a\u985e\u5225\u3001\u51fd\u5f0f\u6216\u5c6c\u6027\u62bd\u8c61\uff0c\u7e7c\u627f\u7684\u985e\u5225\u5fc5\u9808\u53bb\u5be6\u4f5c\uff08implement\uff09\u4ed6

      \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
      • interface\uff0c\u4ecb\u9762\uff0c\u4e00\u7a2e\u5951\u7d04\uff0c\u6703\u8981\u6c42\u5be6\u4f5c\uff08implements\uff09\u5b83\u7684\uff08\u62bd\u8c61\uff09\u985e\u5225\u53bb\u5be6\u4f5c\u67d0\u4e9b\u51fd\u5f0f\u6216\u5c6c\u6027\uff0c\u53ea\u9700\u5b9a\u7fa9\u516c\u958b\u51fd\u5f0f\u6216\u5c6c\u6027

      \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":"
      • \u5efa\u69cb\uff08construct, new\uff09\u548c \u5be6\u4f5c\uff08implements\uff09\u7684\u5dee\u5225
      • \u79c1\u6709\uff08private\uff09\u3001\u4fdd\u8b77\uff08protected\uff09\u3001\u516c\u958b\uff08public\uff09 \u7684\u5dee\u5225
      • \u4ecb\u9762\uff08interface\uff09 \u548c \u62bd\u8c61\u985e\u5225\uff08abstract class\uff09 \u7684\u5dee\u5225
      \u7a2e\u985e \u5efa\u69cb \u5be6\u4f5c \u62bd\u8c61\u7a0b\u5ea6 class O O \u4f4e abstract class X O \u4e2d interface X X \u9ad8

      \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

      • \u6211\u5728\u5403\u98ef
      • \u6211\u5728\u7528\u9280\u8272\u6e6f\u5319\u88dd\u8457\u7d04\u4e09\u514b\u3001\u516d\u5341\u9846\u7684\u7c73\u98ef\uff0c\u4e26\u7528\u53f3\u624b\u6293\u8457\u6e6f\u5319\uff0c\u6b63\u6e96\u5099\u9001\u9032\u5634\u5df4\u4e26\u5480\u56bc\uff08\u7136\u5f8c\u4f60\u5c31\u5931\u53bb\u4f60\u552f\u4e00\u7684\u670b\u53cb\u4e86\uff09

      \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

      • \u8f15\u6613\u78ba\u8a8d\u9019\u662f\u6b63\u78ba\u7684\u65e5\u8a8c\u3002\u900f\u904e\u6bd4\u5c0d STH (signed tree head)
      • \u8f15\u6613\u67e5\u627e\u7279\u5b9a\u6191\u8b49\u662f\u5426\u5b58\u5728\u3002\u900f\u904e Markle tree \u7684\u7279\u6027
      • \u82e5\u8a72\u65e5\u8a8c\u56e0\u4efb\u4f55\u539f\u56e0\u51fa\u932f\uff08\u7a0b\u5f0f\u78bc\u6709 bug\u3001\u932f\u8aa4\u8a2d\u5b9a\u3001\u4efb\u4f55\u908a\u969b\u60c5\u6cc1\u7b49\u7b49\uff09\u8981\u80fd\u8f15\u6613\u767c\u73fe\u8a72\u932f\u3002\u6aa2\u67e5 STH
      • \u4e0d\u5f71\u97ff\u73fe\u6709\u7c3d\u767c\u7c3d\u8b49\u7684\u6f5b\u6642\uff0c\u5728\u7c3d\u8b49\u4e0a\u6dfb\u52a0\u64f4\u5145\uff08X.509v3 extension\uff09
      • SCT (Signed Certificate Timestamp)\u7528\u505a\u78ba\u4fdd\u5df2\u9032\u55ae\u4e00\uff08instantly\uff09\u65e5\u8a8c\u4e2d
      • MMD (Maximum Merge Delay)\u6a19\u660e\u5728\u6642\u9650\u5167\u8a72\u7c3d\u8b49\u53ef\u80fd\u4e0d\u6703\u5728\u5404\u500b\u65e5\u8a8c\u4e2d\u9054\u6210\u4e00\u81f4\u6027
      • \u6bcf\u500b\u7c3d\u8b49\u9700\u8981\u5169\u500b\u4ee5\u4e0a\u7684 SCT\uff0c\u7c3d\u8b49\u6548\u671f\u8d8a\u9577\u9700\u8981\u8d8a\u591a\uff0c\u4f46\u4e0d\u80fd\u592a\u591a\u5426\u5247\u6703\u589e\u52a0\u7c3d\u767c\u6642\u7684\u6f5b\u6642\u548c TLS \u4ea4\u63e1\u7684\u5927\u5c0f
      • MMD \u70ba 24 \u5c0f\u6642\u3002\u8d8a\u4f4e\u8d8a\u5b89\u5168\uff0c\u53cd\u4e4b\u5247\u80fd\u9054\u5230\u8f03\u5f37\u7684\u5bb9\u932f\u6548\u679c
      • \u53ea\u627f\u8a8d CA \u7c3d\u767c\u7684\u7c3d\u8b49\u907f\u514d\u7d00\u9304\u65e5\u8a8c\u592a\u591a

      \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":"
      • RFC\ud83d\ude06
      • CT \u4f5c\u8005\u91dd\u5c0d\u8a72\u6280\u8853\u7684\u8aaa\u660e\uff0c\u7b97\u662f\u7b2c\u4e00\u7bc7\u5b8c\u6574\u8aaa\u660e
      • CT \u5b98\u7db2\u5716\u756b\u5f0f\u8aaa\u660e\uff0c\u5f9e\u57fa\u790e\u958b\u59cb\u4e86\u89e3
      • Markle Town \u662f CloudFlare \u91dd\u5c0d CT \u5f97\u5230\u7684\u7c3d\u8b49\u8cc7\u6599\u5f8c\u505a\u7d71\u8a08
      • \u5168\u4e16\u754c\u6700\u5927\u7684 CA \u2014 Let's Encrypt \u8aaa\u660e\u5982\u4f55\u5be6\u4f5c CT Logs
      • Google \u958b\u767c\u51fa\u7528\u4f86\u5728 SQL \u4e4b\u4e0a\u5efa\u7acb Markle Tree \u7d50\u69cb\u7684\u4ee3\u7406
      • MDN \u91dd\u5c0d\u700f\u89bd\u5668\u652f\u63f4\u7a0b\u5ea6\u505a\u7684\u8aaa\u660e
      • \u958b\u653e\u5927\u5bb6\u900f\u904e CT \u641c\u5c0b\u7c3d\u8b49\u7684 UI
      • Google \u5de5\u7a0b\u5e2b\u62b1\u6028 OCSP \u7684\u7121\u7528\uff0c\u4e26\u8aaa\u660e\u66ff\u4ee3\u65b9\u6848
      1. \u5efa\u8b70\u4e0d\u8981\u4f7f\u7528 OCSP\uff0c\u53ef\u4ee5\u770b Referrer \u4e2d\u7684\u9023\u7d50\u3002\u00a0\u21a9

      "},{"location":"essay/web/http/","title":"HTTP","text":"

      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\uff08\u6216\u56de\u61c9\uff09\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 \u53bb\u505a\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\u3002

      "},{"location":"essay/web/http/#\u53c3\u6578\u8a2d\u5b9a","title":"\u53c3\u6578\u8a2d\u5b9a","text":"

      \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\u5927\u5c0f\u5beb\u6709\u5dee\uff0c\u884c\u9996\u5230\u5192\u865f\u4e4b\u524d\u70ba\u9375\uff08key\uff09\uff0c\u4e0d\u53ef\u4ee5\u6709\u7a7a\u683c\uff1b \u5192\u865f\u5f8c\u70ba\u503c\uff08value\uff09\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/#\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

      "},{"location":"essay/web/http/#\u975c\u614b\u7db2\u7ad9\u8981\u6ce8\u610f\u7684\u6a19\u982d","title":"\u975c\u614b\u7db2\u7ad9\u8981\u6ce8\u610f\u7684\u6a19\u982d","text":""},{"location":"essay/web/http/#cache-control","title":"Cache-Control","text":"

      \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/#\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 OCI \u5206\u5c64\u3002 \u7576 Maglevs \u524d\u9762\u7684 \u8def\u7531\u5668\uff08router\uff09\u6536\u5230\u5c01\u5305\u7684\u6642\u5019\uff0c\u6703\u900f\u904e ECMP \u6c7a\u5b9a\u5206\u6d3e\u8a72\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

      • \u5ba2\u6236\u7aef\u555f\u52d5\u6d41\u91cf\uff1a\u5ba2\u6236\u7aef C \u5411\u4f3a\u670d\u5668 S1 \u767c\u9001\u5c01\u5305\u3002
      • \u5c01\u5305\u5230\u9054\u8def\u7531\u5668\uff1a\u5c01\u5305\u5230\u9054\u8def\u7531\u5668 R\u3002
      • ECMP \u9078\u64c7\uff1a\u7531\u65bc\u6709\u5169\u500b\u7b49\u50f9\u6210\u672c\u7684\u8def\u5f91 (\u8def\u5f91 1 \u548c\u8def\u5f91 2) \u53ef\u9054 S1\uff0c\u56e0\u6b64 ECMP \u5c07\u767c\u63ee\u4f5c\u7528\u3002 \u8def\u7531\u5668\u4f7f\u7528\u96dc\u6e4a\u7b97\u6cd5\uff08\u57fa\u65bc\u6e90\u548c\u76ee\u7684\u5730 IP \u5730\u5740\u7b49\u56e0\u7d20\uff09\u4f86\u78ba\u5b9a\u6b64\u7279\u5b9a\u5c01\u5305\u7684\u8def\u5f91\u3002
      • \u5047\u8a2d\u96dc\u6e4a\u51fd\u6578\u70ba\u6b64\u5c01\u5305\u9078\u64c7\u4e86\u8def\u5f91 1 (\u4ecb\u9762 1)\u3002
      • \u5c01\u5305\u8f49\u767c\uff1a\u8def\u7531\u5668 R \u5c07\u5c01\u5305\u8f49\u767c\u5230\u4ecb\u9762 1\uff0c\u671d\u5411\u4f3a\u670d\u5668 S1\u3002

      \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

      • \u5982\u679c\u96dc\u6e4a\u51fd\u6578\u518d\u6b21\u9078\u64c7\u8def\u5f91 1\uff0c\u6b64\u5c01\u5305\u5c07\u9075\u5faa\u8207\u524d\u4e00\u500b\u5c01\u5305\u76f8\u540c\u7684\u8def\u5f91\u3002
      • \u5982\u679c\u96dc\u6e4a\u51fd\u6578\u9019\u6b21\u9078\u64c7\u4e86\u8def\u5f91 2 (\u4ecb\u9762 2)\uff0c\u5247\u5c01\u5305\u5c07\u63a1\u53d6\u4e0d\u540c\u7684\u8def\u7531\u5230\u9054 S1\uff0c\u5f9e\u800c\u5be6\u73fe\u8ca0\u8f09\u5e73\u8861\u3002

      ECMP \u7684\u512a\u9ede\uff1a

      • \u589e\u52a0\u983b\u5bec\uff1a\u901a\u904e\u5229\u7528\u591a\u689d\u8def\u5f91\uff0cECMP \u53ef\u4ee5\u5206\u4f48\u6d41\u91cf\u4e26\u6f5b\u5728\u63d0\u9ad8\u6574\u9ad4\u7db2\u8def\u541e\u5410\u91cf\u3002
      • \u5bb9\u932f\u6027\uff1a\u5982\u679c\u4e00\u689d\u8def\u5f91\u4e0d\u53ef\u7528\uff0c\u6d41\u91cf\u53ef\u4ee5\u81ea\u52d5\u91cd\u65b0\u8def\u7531\u5230\u5269\u9918\u8def\u5f91\uff0c\u5f9e\u800c\u63d0\u4f9b\u5197\u9918\u3002

      \u9700\u8981\u8003\u616e\u7684\u4e8b\u9805\uff1a

      • \u9023\u7dda\u7684\u8655\u7406\uff1a\u5982\u679c\u5c01\u5305\u8d70\u5230\u53e6\u5916\u4e00\u53f0\u8a2d\u5099\uff0c\u539f\u672c\u7684\u9023\u7dda\u6839\u64da\u5be6\u4f5c\u53ef\u80fd\u6703\u4e2d\u65b7

      \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

      • \u8def\u7531\u4f48\u9054\uff0c\u5c0d\u5176\u4ed6 ISP \u5ba3\u544a\u81ea\u5df1\u5167\u90e8\u64c1\u6709\u7684 IP \u524d\u7db4\uff1b
      • \u8def\u7531\u8abf\u6574\uff0c\u6bcf\u6b21\u8def\u7531\u8a2d\u5b9a\u7684\u8abf\u6574\uff08\u4f8b\u5982 IP \u4e0b\u7dda\uff09\uff0c\u90fd\u9700\u8981\u5c0d\u5916\u505a\u5ba3\u544a\uff1b
      • \u8def\u5f91\u9078\u64c7\uff0c\u900f\u904e\u8def\u7531\u7684\u5404\u7a2e\u53c3\u6578\uff08\u4f8b\u5982 hop \u6578\u91cf\uff09\uff0c\u9078\u64c7\u8d70\u5230\u7279\u5b9a IP \u7684\u6700\u4f73\u8def\u5f91\uff1b
      • \u50b3\u905e\u6d41\u91cf\uff0c\u8def\u7531\u5668\u6839\u64da BGP \u7684\u8cc7\u8a0a\uff0c\u9032\u884c\u5c01\u5305\u50b3\u5c0e\u3002
      "},{"location":"essay/web/maglev/#linux-bypass","title":"Linux Bypass","text":"

      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

      • \u540c\u500b\u4e0a\u4e0b\u6e38\u7684\u5c01\u5305\u90fd\u5728\u540c\u500b queue \u4e2d\u8655\u7406\uff0c\u6bd4\u8f03\u4e0d\u6703\u9020\u6210\u8655\u7406\u901f\u5ea6\u4e0d\u4e00\u81f4\uff0c\u4e26\u9032\u800c\u5c0e\u81f4\u5931\u5e8f\u3002
      • \u540c\u500b\u4e0a\u4e0b\u6e38\u7684\u5c01\u5305\u5728\u9032\u5165\u76f8\u540c\u7684 queue \u4e4b\u5f8c\uff0c\u5c31\u53ea\u6703\u9078\u64c7\u4e00\u6b21 backend\uff0c\u4e0d\u7528\u6bcf\u6b21\u90fd\u91cd\u9078\u4e00\u6b21\u3002

      \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

      "},{"location":"essay/web/maglev/#packet-pool","title":"Packet Pool","text":"

      \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

      • received\uff1asteering \u6536\u5230 NIC \u7684\u5c01\u5305\u5f8c\uff0c\u6703\u628a\u8a72\u5c01\u5305\u7684\u6307\u6a19\u653e\u5728\u9019\uff1b
      • processed\uff1asteering \u6703\u628a\u8a72\u6307\u6a19\u4e0a\u7684\u5c01\u5305\u5206\u914d\u7d66\u5c0d\u61c9\u7684 receiving queue\uff1b
      • reserved\uff1asteering \u6703\u628a packet pool \u88e1\u7684\u7a7a\u9592\u4f4d\u7f6e\uff0c\u9032\u884c\u9810\u7d04\u4f7f\u7528\uff1b
      • sent\uff1amuxing \u6703\u628a\u5728\u9019\u7684\u5c01\u5305\u9001\u51fa\u5c01\u5305\u7d66 NIC\uff1b
      • ready\uff1amuxing \u6703\u628a transmission queue \u7684\u5c01\u5305\u62ff\u51fa\u4f86\u653e\u9019\uff1b
      • recycled\uff1a\u56e0\u70ba\u4efb\u52d9\u5b8c\u6210\uff0cmuxing \u6703\u628a\u9019\u88e1\u5728 packet pool \u4f54\u7528\u7684\u4f4d\u7f6e\u7d66\u91cb\u653e\u3002

      \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

      \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

      1. \u7576\u540c\u500b\u670d\u52d9\u4e0a\u6e38\u7bc0\u9ede\u6578\u91cf\u9054\u5230\u6578\u767e\u6642\uff0c\u9700\u8981\u5f88\u5927\u7684\u8868\u4f86\u9054\u5230\u8db3\u5920\u5747\u8861\u7684\u8ca0\u8f09\uff1b
      2. \u5728 Maglev \u4e2d\u662f\u53ef\u4ee5\u7a0d\u5fae\u63a5\u53d7\u8868\u91cd\u5efa\uff0c\u56e0\u70ba ECMP \u5728 Maglev \u6578\u91cf\u4e0d\u8b8a\u60c5\u6cc1\u4e0b\uff0c \u53ef\u4ee5\u78ba\u4fdd\u76f8\u540c 5-tuple \u9001\u5230\u540c\u500b Maglev\uff0c\u5728 Forwarder \u7684\u6a5f\u5236\u4e0b\uff0c\u4ecd\u6703\u8d70\u5230\u540c\u500b\u4e0a\u6e38\u3002

      \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

      \\[\\begin{aligned} \\mathit{offset}_i = h1(\\mathit{name}_i) \\mod M \\qquad \\forall i \\in N\\\\ \\mathit{skip}_i = h2(\\mathit{name}_i) \\mod (M-1) + 1 \\qquad \\forall \\quad i \\in N\\\\ \\end{aligned}\\]

      \u6700\u5f8c\u5c31\u53ef\u4ee5\u5efa\u7acb\u51fa\u5c0d\u7167\u8868\uff1a

      \\[\\begin{aligned} \\mathit{permutation}_i_j = (\\mathit{offset}_i + j \\times \\mathit{skip}_i) \\mod M \\qquad \\forall \\quad i \\in N \\quad\\textrm{and}\\quad 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

      "},{"location":"essay/web/maglev/#\u7bc4\u4f8b","title":"\u7bc4\u4f8b","text":"

      \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

      Step B0 B1 B2 1 3 0 3, 4 2 0, 4, 1 2 5 3 5, 2, 6 - -

      \u5728\u4e0a\u8ff0\u63a8\u6f14\u4e0b\uff0c\u53ef\u4ee5\u5f97\u51fa entry\uff1a

      j Backend 0 B1 1 B0 2 B1 3 B0 4 B2 5 B2 6 B0

      \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

      j Old New 0 B1 B0 1 B0 B0 2 B1 B0 3 B0 B0 4 B2 B2 5 B2 B2 6 B0 B2

      \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\u3002

      "},{"location":"essay/web/maglev/#vip-matching","title":"VIP Matching","text":""},{"location":"essay/web/maglev/#fragment-handling","title":"Fragment Handling","text":""},{"location":"essay/web/maglev/#monitoring-and-debugging","title":"Monitoring and Debugging","text":""},{"location":"essay/web/maglev/#\u6e2c\u8a66","title":"\u6e2c\u8a66","text":""},{"location":"essay/web/maglev/#\u5ef6\u4f38","title":"\u5ef6\u4f38","text":""},{"location":"essay/web/maglev/#sharding","title":"Sharding","text":"
      1. \u53c3\u95b1\u7b2c\u4e09\u6bb5 3\uff0cForwarder Design and Implementation\u00a0\u21a9

      "},{"location":"essay/web/network-books/","title":"12 Best Computer Networking Books for Beginners & Experts","text":"

      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:

      • Switches, VLANs, trunking, Link aggregation etc
      • Routers, routing protocols (RIP, EIGRP, OSPF, BGP), redistribution etc
      • Cisco devices configuration (4500, 6500 multilayer switches, 3550, 3750 etc)
      • Cisco Nexus discussion and configuration.
      • MPLS
      • ACLs, authentication, NAT etc
      • Firewalls (ASA etc)
      • Wireless
      • VoIP
      • QoS
      • IP design
      • IPv4, IPv6
      • Etc

      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:

      • Overview of networking
      • Internet Protocols
      • Switching
      • Routing
      • Wireless
      • Security

      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:

      • CCNA 200-301 Official Cert Guide, Volume 1
      • CCNA 200-301 Official Cert Guide, Volume 2

      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":"
      • Computer Networking: A Top-Down Approach
      • Networking All-in-One For Dummies
      • CompTIA Network+ Certification All-in-One Exam Guide
      "},{"location":"essay/web/network-books/#best-books-for-more-advanced-professionals","title":"Best Books for More Advanced Professionals","text":"
      • Network Warrior
      • The Complete Guide to LAN Switching Technology
      "},{"location":"essay/web/network-books/#best-books-for-cisco-professional-experts","title":"Best Books for Cisco Professional Experts","text":"
      • Routing TCP/IP, Volume I
      • Routing TCP/IP, Volume II
      • Cisco Networking All-in-One For Dummies
      "},{"location":"essay/web/network-books/#best-books-for-next-generation-networking-engineers","title":"Best Books for Next Generation Networking Engineers","text":"
      • Network Programmability and Automation
      • Software Defined Networks: A Comprehensive Approach
      "},{"location":"essay/web/network-books/#for-ccna-200-301","title":"For CCNA 200-301","text":"
      • CCNA 200-301 Official Cert Guide Library
      • CCNA 200-301 Lab Guide with Packet Tracer Labs

      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

      • \u5efa\u8b70\u5148\u8b80\u904e\u300c\u7db2\u8def\u600e\u9ebc\u50b3\u300d\u9019\u7bc7
      • \u50b3\u8f38\u5c64\u4e2d\u7684 TCP
      "},{"location":"essay/web/network-details/#\u4e59\u592a\u7db2","title":"\u4e59\u592a\u7db2","text":""},{"location":"essay/web/network-details/#\u6536\u767c\u5668\u76f8\u95dc","title":"\u6536\u767c\u5668\u76f8\u95dc","text":"
      • \u524d\u65871\uff08Preamble or Syncword\uff09\uff1a\u662f\u7528\u4f86\u544a\u77e5\u76ee\u7684\u5730\u7aef\uff1a\u300c\u73fe\u5728\u6709\u8a0a\u606f\u8981\u9001\u7d66\u4f60\u4e86\uff0c\u6e96\u5099\u63a5\u6536\u56c9\u300d\uff0c\u907f\u514d\u8b93\u7db2\u5361\u4e00\u76f4\u505a\u4e8b\u3002
      • \u6846\u8d77\u59cb\u5b9a\u754c\u7b26\uff08Start Frame Delimiter, SFD\uff09\uff1a\u662f\u7528\u4f86\u5206\u754c\u5f85\u6703\u7684\u8a0a\u865f\u5c31\u662f\u771f\u6b63\u6709\u50f9\u503c\u7684\u8cc7\u8a0a\u3002
      • \u8a0a\u6846\u9593\u9694(Inter Frame Gap, IPG)\uff1a\u548c \u524d\u6587 \u5f88\u50cf\uff0c\u53ea\u662f\u662f\u7d50\u5c3e\u90e8\u4efd\u3002
      \u524d\u6587\u548c\u6846\u8d77\u59cb\u5b9a\u754c\u7b26\u7684\u7bc4\u4f8b

      \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":"
      • \u76ee\u7684\u4f4d\u7f6e\uff08MAC destination\uff09
      • \u4f86\u6e90\u4f4d\u7f6e\uff08MAC source\uff09
      • \u4e59\u592a\u7a2e\u985e\uff08EtherType\uff09\u6216\u8a0a\u6846\u9577\u5ea6\uff1a\u82e5\u8a72\u503c\u5c0f\u65bc 1501 \u4ee3\u8868\u8a0a\u6846\u9577\u5ea6\u53cd\u4e4b\u5927\u65bc 1535 \u5247\u662f\u4ee3\u8868\u7a2e\u985e
      EtherType \u7684\u66f4\u591a\u8a0a\u606f

      1500 \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

      • IPv4
      • IPv6

      \u9019\u908a\u63d0\u4e00\u4e0b IPv6 \u6709\u5e7e\u9ede\u8981\u6ce8\u610f\uff1a

      • \u901a\u4fe1\u985e\u5225\u3001\u6d41\u6a19\u8a18 \u90fd\u662f\u70ba\u4e86 \u670d\u52d9\u54c1\u8cea\u63a7\u5236 Quality of Service, QoS\uff09\u3002
      • \u8df3\u6bb5\u6578\u9650\u5236 \u7528\u4f86\u9650\u5236\u8def\u7531\u6b21\u6578\u3002

      \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

      • \u5354\u5b9a\u7248\u672c\uff084 \u6216 6 \u7b49\u7b49\uff09
      • \u6aa2\u6838\u548c
      • \u5c01\u5305\u9577\u5ea6
      • \u76ee\u7684\u5730\u7aef\u7684 IP \u4f4d\u7f6e\u6216\u5ee3\u64ad\u5c01\u5305\uff08\u9001\u7d66\u5927\u5bb6\u7684\uff09
      • \u5982\u679c\u81ea\u5df1\u4e0d\u662f\u76ee\u7684\u5730\u7aef\u7684\u5c01\u5305\uff0c\u5c31\u53ef\u80fd\u6703\u900f\u904e\u8def\u7531\u8868\uff08Routing Table\uff09\u5f80\u5916\u8def\u7531\uff0c\u9019\u5c31\u662f\u8def\u7531\u5668\u5728\u505a\u7684\u4e8b\u3002
      • \u6b63\u78ba\u6392\u5e8f\uff08\u900f\u904e\u8b58\u5225\u78bc\uff09\uff0c\u4e26\u653e\u9032\u7de9\u885d\u5340\u7b49\u5f85\u6392\u5e8f
      • \u6aa2\u67e5\u50b3\u8f38\u5c64\u7684\u7a2e\u985e\uff0c\u4f8b\u5982 1 \u4ee3\u8868 ICMP\u30016 \u4ee3\u8868 TCP\u300117 \u4ee3\u8868 UDP
      1. \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

      "},{"location":"essay/web/network-routing/","title":"\u7db2\u8def\u600e\u9ebc\u50b3","text":"

      \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

      • \u82e5\u76f8\u5dee\u904e\u5927\uff08\u7cfb\u7d71\u5927\u90e8\u5206\u90fd\u662f\u9810\u8a2d 128ms\uff09\uff0c\u5247\u6703\u66ab\u505c\u540c\u6b65\u4e26\u5f37\u5236\u91cd\u8a2d\uff1b
      • \u53bb\u56de\u7684\u7db2\u8def\u5ef6\u9072\u5dee\u7570\u904e\u5927\u6703\u5927\u5e45\u964d\u4f4e\u6821\u6642\u7684\u7cbe\u6e96\u5ea6\uff1b
      • \u958f\u79d2\u554f\u984c\uff1b
      • VM \u7684\u77f3\u82f1\u9707\u76ea\u5668\u662f\u865b\u64ec\u7684\uff0c\u4e5f\u5c31\u662f\u6703\u53d7\u5230 CPU \u5f71\u97ff\uff0c\u800c\u964d\u4f4e\u6e96\u78ba\u6027
      • NTP Server \u7684\u932f\u8aa4\u8a2d\u5b9a\uff1b
      • \u9632\u706b\u7246\u64cb\u4f4f\u548c NTP \u7684\u9023\u7dda\u3002

      \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\u6027

      NTP \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":"
      1. Time, technology and leaping seconds
      2. The One-second War
      "},{"location":"essay/web/retry-strategy/","title":"Retry \u7684\u7b56\u7565","text":""},{"location":"essay/web/retry-strategy/#retry-in-http-method","title":"Retry in HTTP method","text":"Method Idempotent Destructive Safe 4XX 5XX Ambiguous Purpose GET O X O No Retry Retry Retry \u53d6\u5f97\u8cc7\u6599 POST X X X No Retry No Retry No Retry \u5efa\u7acb\u8cc7\u6599 PUT O O X No Retry Retry Retry \u5efa\u7acb\u6216\u7de8\u8f2f\u8cc7\u6599 PATCH X O X No Retry Retry Retry \u7de8\u8f2f\u8cc7\u6599 DELETE O O X No Retry Retry Retry \u522a\u9664\u8cc7\u6599

      Idempotent

      \u51aa\u7b49\u7684\uff0c\u91cd\u8907\u57f7\u884c\u5f8c\u7d50\u679c\u4ecd\u76f8\u540c

      Destructive\uff1a

      \u7834\u58de\u6027\u7684\uff0c\u57f7\u884c\u5f8c\u6703\u53ef\u80fd\u6703\u9020\u6210\u8cc7\u6599\u7684\u7121\u6cd5\u5fa9\u539f

      PUT \u53ef\u80fd\u70ba user.name = 'Evan'\uff0cPATH \u53ef\u80fd\u70ba user.access_count += 1\uff0c\u6545\u51aa\u7b49\u662f\u4e0d\u540c\u7684\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\uff0c\u6216\u5728\u66f4\u6539\u904e\u7a0b\u4e2d\uff0c\u5f9e\u4ed6\u8655\u5df2\u7d93\u88ab\u4fee\u6539\u3002

      \u5c31\u5982\u540c Memcached \u7684 CAS \u503c

      \u6bcf\u6b21 Request \u4e2d\u589e\u52a0 idempotency key \u53ef\u4ee5\u7528\u4f5c cache key

      "},{"location":"essay/web/retry-strategy/#circuit-breaker-pattern","title":"Circuit Breaker Pattern","text":"

      \u591a\u4e45 Retry \u4e00\u6b21\uff1f

      • \u7db2\u8def\u65b7\u7dda\uff0c\u53ef\u80fd\u50c5\u9020\u6210\u6578\u6beb\u79d2\u7684 rejection
      • DB connection\uff0c\u53ef\u80fd\u9020\u6210\u6578\u79d2\u7684 rejection
      • reboot \u53ef\u80fd\u9020\u6210\u6578\u5206\u9418\u7684 rejection
      • rolling back \u53ef\u80fd\u9020\u6210\u5c0f\u6642\u7684 rejection

      \u5728\u4e0a\u8ff0\u7684\u60c5\u6cc1\u4e0b\uff0cexponential backoff \u5c31\u662f\u696d\u754c\u7684 retry \u6a19\u6e96\uff0c\u4f8b\u5982\uff1a

      • 100ms
      • 250ms
      • 500ms
      • 1s
      • 2.5s
      • 5s
      • 5s
      • ...
      • quit
      "},{"location":"essay/web/retry-strategy/#jitter","title":"Jitter","text":"

      \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\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

      let time = SCHEDULE[times] || DEFAULT;\nreturn Math.random() * (time * 0.2) + time * 0.9;\n

      \u6216\u662f\u589e\u52a0 offset\uff1a

      const PERIOD = 60_000;\nconst OFFSET = Math.random() * PERIOD;\nsetTimeout(() => {\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\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

      • \u53ef\u9760\uff1a\u900f\u904e\u53cd\u8986\u5bc4\u9001\u78ba\u8a8d\u4fe1\u865f\uff08Acknowledge\uff0c\u6216\u7c21\u7a31 ACK\uff09
      • \u5e8f\u5217\uff1a\u900f\u904e Sequence(\u6216\u7c21\u7a31 SEQ) \u548c Acknowledgement\uff08\uff09\u7684\u7de8\u865f\u78ba\u8a8d\u9806\u5e8f
      • \u96d9\u5411\uff1a\u958b\u555f\u9023\u7dda\u6642\uff0c\u9019\u500b\u9023\u7dda\u96d9\u65b9\u90fd\u53ef\u4ee5\u5beb\u5165\u548c\u8b80\u53d6\u7684
      "},{"location":"essay/web/tcp/#\u5167\u5bb9\u7269","title":"\u5167\u5bb9\u7269","text":"

      \u912d\u4e2d\u52dd

      TCP \u6703\u900f\u904e\u4e0a\u8ff0\u5404\u7a2e\u7de8\u865f\u548c\u8a0a\u865f\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\u624d\u80fd\u771f\u6b63\u5b8c\u6574\u95dc\u9589\u9023\u7dda\uff08\u56db\u6b21\u63ee\u624b\uff09\u3002\u5176\u5b8c\u6574\u751f\u547d\u7684\u7a0b\u5982\u4e0b\uff1a

      \u5404\u500b\u4fe1\u865f\uff08Flags\uff09\u4ee3\u8868\u610f\u7fa9\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

      • Reserved
      • Accurate echo
      • Congestion Window Reduced
      • Echo, ECH
      • Urgent, URG
      • \u7dca\u6025\u7684\u5c01\u5305\uff0c\u544a\u77e5\u63a5\u6536\u65b9\u9019\u500b\u5c01\u5305\u4e0d\u9700\u8981\u9032\u5165\u4f47\u5217\uff08queue\uff09\uff0c\u8acb\u76f4\u63a5\u8655\u7406
      • \u6703\u51fa\u73fe\u7684\u5834\u666f\u9084\u6c92\u770b\u904e
      • Acknowledgment, ACK
      • \u901a\u5e38\u7528\u4f86\u544a\u77e5\u5c0d\u65b9\uff0c\u6211\u6536\u5230\u4f60\u525b\u525b\u50b3\u7684\u4fe1\u865f\u4e86\uff1b
      • \u6709\u6642\u6703\u593e\u5e36\u5176\u4ed6\u4fe1\u865f\uff0c\u8868\u660e\u540c\u610f\u67d0\u4e9b\u8981\u6c42\uff0c \u4f8b\u5982 SYN+ACK \u4ee3\u8868\u6211\u6536\u5230\u4f60\u7684\u9023\u7dda\u8981\u6c42\uff0c\u4e26\u4e14\u540c\u610f\u4f60\u7684\u9023\u7dda
      • Push, PSH
      • \u6dfb\u52a0\u9019\u500b\u4fe1\u865f\u4ee3\u8868\u63a5\u6536\u65b9\u4e0d\u9700\u8981\u505a\u66ab\u5b58\uff0c\u53ef\u4ee5\u76f4\u63a5\u628a\u8cc7\u6599\u5f80\u4e0a\u50b3\u905e
      • \u901a\u5e38\u7528\u5728\u5c0f\u6bb5\u7684\u8cc7\u6599\uff0c\u56e0\u70ba\u5927\u8cc7\u6599\u6703\u88ab\u5206\u6210\u591a\u6bb5\uff0c\u7136\u5f8c\u6703\u6709\u9806\u5e8f\u8b70\u984c
      • Reset, RST\uff0c\u5df2\u7d93\u6368\u68c4\u7684\u9023\u7dda\u53c8\u6536\u5230\u8a0a\u865f\uff08\u4f8b\u5982 ACK\uff09\uff0c\u5c31\u6703\u56de\u50b3
      • \u57e0\u4e0d\u5b58\u5728\uff0c\u901a\u5e38\u662f\u56e0\u70ba\u4f60\u8acb\u6c42\u7684\u57e0\u6c92\u88ab\u6253\u958b\uff1b
      • IP \u4e0d\u5b58\u5728\uff0c\u901a\u5e38\u662f\u56e0\u70ba\u4f60\u76e3\u807d\u7684 IP \u4e0d\u662f 0.0.0.0:port\uff1b
      • \u9023\u7dda\u88ab\u68c4\u7528\uff0c\u5c0d\u65b9\uff08\u63a5\u6536\u8005\uff09\u6703\u51fa\u73fe Connection closed by peer \u7684\u932f\u8aa4\uff1b
      • \u5c0d\u65b9\u7684\u4f47\u5217\uff08queue\uff09\u5df2\u7d93\u6eff\u4e86\uff1b
      • \u9632\u706b\u7246\u6e05\u9664\u4e86 session table\uff0c\u5c0e\u81f4\u4e0d\u8a8d\u8b58\u9019\u6bb5\u9023\u7dda\uff0c\u5c31\u53ef\u80fd\u56de\u50b3\u8a72\u8a0a\u865f\u3002
      • Synchronize, SYN
      • \u958b\u555f\u9023\u7dda
      • \u88ab\u52d5\u65b9\u6703\u548c ACK \u4e00\u8d77\u642d\u914d
      • Finish, FIN
      • \u7d50\u675f\u9023\u7dda
      • \u88ab\u52d5\u65b9\u6703\u548c ACK \u4e00\u8d77\u642d\u914d
      "},{"location":"essay/web/tcp/#\u4e09\u6b21\u63e1\u624b","title":"\u4e09\u6b21\u63e1\u624b","text":"

      \u912d\u4e2d\u52dd

      \u5f7c\u6b64\u6703\u5728\u4e09\u6b21\u63e1\u624b\u4e2d\u78ba\u8a8d\u63a5\u4e0b\u4f86\u7684 SEQ \u865f\u78bc\uff1a

      • \u4e3b\u52d5\u65b9\uff08\u6216\u7a31\u767c\u8d77\u65b9\u3001\u5ba2\u6236\u7aef\uff09\u9001\u51fa\u8981\u6c42\u9023\u7dda\u7684\u540c\u6b65\u4fe1\u865f\uff08Synchronous \u6216\u7a31 SYN\uff09
      • \u76e3\u807d\u65b9\uff08\u6216\u7a31\u670d\u52d9\u7aef\u3001\u79c1\u670d\u7aef\uff09\u5141\u8a31\u9023\u7dda\uff08ACK\uff09\u4e26\u540c\u6a23\u8ce6\u4e88\u540c\u6b65\u4fe1\u865f\uff08SYN\uff09
      • \u4e3b\u52d5\u65b9\u5141\u8a31\u9023\u7dda
      "},{"location":"essay/web/tcp/#\u56db\u6b21\u63ee\u624b","title":"\u56db\u6b21\u63ee\u624b","text":"

      \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

      • \u4e3b\u52d5\u65b9 \u8981\u6c42\u95dc\u9589\u9023\u7dda FIN\uff0c\u4e26\u9032\u5165 FIN_WAIT1 \u72c0\u614b\u3002
      • \u88ab\u52d5\u65b9 \u544a\u77e5\u6536\u5230\u9019\u500b\u8cc7\u8a0a ACK\u3002
      • \u4e3b\u52d5\u65b9 \u9032\u5165\u7b49\u5f85 FIN_WAIT2 \u72c0\u614b\u3002
      • \u88ab\u52d5\u65b9 \u78ba\u4fdd\u8cc7\u6599\u90fd\u9001\u5b8c\u5f8c\uff0c\u95dc\u9589\u9023\u7dda FIN\u3002
      • \u4e3b\u52d5\u65b9 \u544a\u77e5\u6536\u5230\u9019\u500b\u8cc7\u8a0a ACK\uff0c\u6b64\u6642\u88ab\u52d5\u65b9\u4e0d\u7528\u7ba1\u6709\u6c92\u6709\u6536\u5230\u9019\u500b ACK\u3002
      • \u4e3b\u52d5\u65b9 \u9032\u5165 TIME_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\uff01\u4ed6\u9700\u8981\u9032\u5165\u7b49\u5f85\u5c0d\u65b9\u95dc\u9589\u7684\u72c0\u614b\uff08FIN WAIT 1 \u6216 FIN WAIT 2\uff09\uff1b\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

      "},{"location":"essay/web/tcp/#tcp-\u9078\u9805","title":"TCP \u9078\u9805","text":"

      TCP \u9078\u9805\uff08TCP Option\uff09\u5927\u90e8\u5206\u90fd\u662f\u5728\u63e1\u624b\u968e\u6bb5\u78ba\u8a8d\u7684\uff0c \u8a73\u898b\uff1a

      • 0: End of options
      • 1: no-op
      • 2: MSS(Maximum TCP Segment Size)\uff0c\u5354\u5546\u6bb5\u7684\u5927\u5c0f
      • 3: Window Scaling\uff0c\u63d0\u9ad8\u5ba2\u6236\u7aef\u53ef\u7528\u983b\u5bec
      • 4: SACK\uff08Selective ACK\uff09\uff0c\u907f\u514d\u6bcf\u6b21\u90fd\u8981\u7b49\u8d85\u6642\u624d\u91cd\u50b3\uff0c\u4e14\u53ea\u91cd\u50b3\u4e1f\u5931\u7684\u5c01\u5305\uff0c\u7528\u4f86\u52a0\u901f\u91cd\u50b3\u7684\u6a5f\u5236
      • 8: Timestamp\uff0c\u7cbe\u6e96 RTT
      • 34: TFO\uff08TCP Fast Open\uff09

      Kernel options \u53ef\u4ee5\u53c3\u8003 sysctl-explorer

      • TCP_NODELAY\uff1a\u555f\u7528\u6642\uff0c\u7576\u8cc7\u6599\u5927\u65bc MSS\uff0c\u5c31\u9001\u51fa\uff1b\u53cd\u4e4b\u5247\u7d2f\u7a4d\u76f4\u5230\u6536\u5230\u4e0a\u4e00\u500b\u5c01\u5305\u7684 ACK\u3002 \u7f3a\u9ede\u81ea\u7136\u5c31\u662f\u5982\u679c\u61c9\u7528\u7a0b\u5f0f\u672c\u8eab\u5c31\u662f\u5c0f\u8cc7\u6599\u9001\u51fa\uff08\u4f8b\u5982 Streaming\uff09\uff0c\u5c31\u6703\u5e38\u5e38\u9ad4\u9a57\u5230\u5ef6\u9072\u3002 \u9664\u6b64\u4e4b\u5916\uff0c\u5982\u679c\u5c0d\u65b9\u4e5f\u555f\u7528\uff0c\u5c31\u53ef\u80fd\u6703\u6709\u9396\u6b7b\uff08deadlock\uff09\u7684\u72c0\u6cc1\uff0c\u5169\u908a\u90fd\u5728\u7b49 ACK\u3002
      • TCP_CORK\uff1a\u555f\u7528\u6642\uff0c\u53ea\u6709\u7576\u7d2f\u7a4d\u5230\u4e00\u5b9a\u7684\u91cf\u624d\u6703\u9001\u51fa\uff08\u9650\u5236\u5728 200ms \u4ee5\u4e0b\uff09\uff0c\u548c TCP_NODELAY \u5dee\u5728\u4e00\u500b\u662f\u7b49 ACK \u4e00\u500b\u662f\u7b49\u91cf\u5230\u4e00\u5b9a\u7a0b\u5ea6\u3002 \u7576\u4f60\u5728\u9001\u51fa\u5927\u91cf\u8cc7\u6599\u6642\uff0c\u9019\u6703\u5f88\u6709\u7528\uff0c\u4f46\u662f\u8acb\u5c0f\u5fc3\u670d\u7528\u3002
      "},{"location":"essay/web/tcp/#congestion-control","title":"Congestion Control","text":"

      BBR, Queue-Discipline

      "},{"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/#\u4e09\u6b21\u63e1\u624b_1","title":"\u4e09\u6b21\u63e1\u624b","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/#\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
      1. \u9650\u5236\u6700\u9ad8\u4e94\u500b\u9023\u7dda
      2. \u62ff new_sd \u53bb\u8b80\u5beb\u8cc7\u6599\uff0csd \u5247\u7e7c\u7e8c\u76e3\u807d\u9023\u7dda\u8acb\u6c42\u3002
      "},{"location":"essay/web/tcp/#\u554f\u984c","title":"\u554f\u984c","text":"\u70ba\u4ec0\u9ebc\u6703\u6709\u907a\u5931\u3001\u91cd\u8907\u5bc4\u9001\u548c\u5931\u5e8f\u7684\u554f\u984c\uff1f

      \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

      • \u7db2\u8def\u983b\u5bec\u6b63\u5e38\u504f\u9ad8\uff0c\u4f46\u6c92\u6709\u7a81\u7834\u9650\u5236\u3002
      • \u61c9\u7528\u5c64\u7684\u8cc7\u6e90\u4f7f\u7528\u7387\u4f4e\uff0cCPU/Mem \u7dad\u6301\u5728 5% \u5de6\u53f3\u3002
      • HTTP \u7684\u6f5b\u6642\u975e\u5e38\u9ad8\uff0c\u6578\u5341\u79d2
      \u8acb\u554f\u4e0a\u8ff0\u72c0\u6cc1\u53ef\u80fd\u7684\u539f\u56e0\uff1f

      \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

      • \u65b0\u589e\u7bc0\u9ede\uff0c\u6069\uff0c\u55ae\u7d14\u800c\u66b4\u529b
      • \u5206\u6563\u670d\u52d9\uff0c\u5c31\u662f\u63d0\u4f9b\u5fae\u670d\u52d9
      • \u61c9\u7528\u7a0b\u5f0f\u7684\u8abf\u6574\uff0c\u56e0\u70ba\u55ae\u4e00\u61c9\u7528\u8acb\u6c42\u6703\u6253\u5f88\u591a\u500b\u4e0d\u540c\u8cc7\u6599\u5eab\u7684\u8acb\u6c42\uff1a
      • \u4f7f\u7528\u4e8b\u4ef6\u6a5f\u5236\uff0c\u964d\u4f4e\u524d\u7aef\u9700\u8981\u5b9a\u671f\u78ba\u8a8d\u8cc7\u6599\u662f\u5426\u66f4\u65b0
      • \u4f7f\u7528\u5feb\u53d6\uff0c\u4e26\u5229\u7528\u5feb\u53d6\u6e1b\u5c11\u9700\u8981\u548c\u591a\u500b\u8cc7\u6599\u5eab\u6e9d\u901a\u7684\u904e\u7a0b
      • \u548c\u8cc7\u6599\u5eab\u7684\u6e9d\u901a\u4e2d\u589e\u52a0\u4e00\u500b\u4ee3\u7406\u5668\uff0c\u53ea\u9700\u8981\u548c\u4ed6\u5efa\u7acb\u9023\u7dda\u5373\u53ef
      • \u8abf\u6574\u524d\u7aef\u61c9\u7528\u5c64\u5354\u5b9a
        • GraphQL
        • HTTP/3
      "},{"location":"essay/web/tcp/#referer","title":"Referer","text":"

      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

      "},{"location":"essay/web/url-structure/#scheme","title":"Scheme","text":"

      http, https

      "},{"location":"essay/web/url-structure/#host","title":"Host","text":"

      subdomain.domain.tld

      "},{"location":"essay/web/url-structure/#top-layer-domain-tld","title":"Top layer Domain (TLD)","text":"
      • com
      • com.tw
      • io
      • github.io
      "},{"location":"essay/web/url-structure/#port","title":"Port","text":"
      • http default 80
      • https default 443
      "},{"location":"essay/web/url-structure/#path","title":"Path","text":"

      /path?query_key=query_value#fragment

      "},{"location":"essay/web/url-structure/#diagram","title":"Diagram","text":""},{"location":"essay/web/url-structure/#example","title":"Example","text":"
      • 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
      "},{"location":"essay/web/url-structure/#extension","title":"Extension","text":"
      • schemeful-same-site consider scheme on site
      • HTTP header Sec-Fetch-Site([time=April, 2020]) can know where request came from
      • same-site
      • same-origin
      • cross-site
      • none
      "},{"location":"essay/web-security/cross-origin-resources-sharing/","title":"CORS","text":"

      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":"
      1. \u4f7f\u7528\u8005\u9032\u5230 http://example.com \u7684\u7db2\u7ad9\u3002
      2. \u4f7f\u7528\u8005\u7684\u700f\u89bd\u5668\u900f\u904e\u7db2\u7ad9\u9700\u6c42\u53ef\u80fd\u6703\u53bb\u8ddf\u5176\u4ed6\u7db2\u7ad9\uff08http://image.com\uff09\u8981\u6a94\u6848\uff08\u5716\u7247\uff0cCSS \u6a94...\uff09\u3002
      3. \u70ba\u4e86\u4fdd\u8b77\u88ab\u8981\u6c42\u7684\u7db2\u7ad9\u96b1\u79c1\uff0c\u82e5\u8a72\u7db2\u7ad9\u56de\u50b3\u7684\u6a19\u982d\u4e0d\u5141\u8a31\u8a72\u5b58\u53d6\uff0c\u700f\u89bd\u5668\u6703\u5224\u5b9a\u8981\u6c42\u5931\u6557\uff0c\u53cd\u4e4b\u5247\u6210\u529f\u3002
      "},{"location":"essay/web-security/cross-origin-resources-sharing/#access-control-allow-origin","title":"Access-Control-Allow-Origin","text":"
      • http://example.com
      • http://example.com | http://other.com
      • *
      "},{"location":"essay/web-security/cross-origin-resources-sharing/#\u7d30\u7bc0","title":"\u7d30\u7bc0","text":"
      1. \u82e5 HTTP request \u593e\u96dc\u4e86\u4e9b\u6771\u897f\uff0cHTTP response \u5c31\u6703\u9700\u8981\u66f4\u591a\u6a19\u982d\u4f86\u8868\u9054\u610f\u9858\u3002
      2. \u82e5 HTTP request \u593e\u96dc\u4e86\u4e9b\u6771\u897f\uff0c\u700f\u89bd\u5668\u53ef\u80fd\u9084\u9700\u8981\u505a\u9810\u5148\u6aa2\u67e5\uff0c\u82e5\u6aa2\u67e5\u5931\u6557\uff0c\u4e0d\u6703\u505a\u9032\u4e00\u6b65\u7684\u8981\u6c42\u3002

      \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

      "},{"location":"essay/web-security/cross-origin-resources-sharing/#\u5ef6\u4f38","title":"\u5ef6\u4f38","text":"

      very new feature!!

      1. Cross Origin Embedder Policy (COEP)
        • \u7db2\u7ad9\u662f\u5426\u9700\u8981\u4f7f\u7528 CORP \u548c CORS
      2. Cross Origin Opener Policy (COOP)
        • \u80fd\u5426\u5728\u4e0d\u79fb\u52d5\u7db2\u5740\u60c5\u6cc1\u4e0b\u6253\u958b\u5176\u4ed6\u7db2\u9801\uff08popup\uff09
      3. Cross Origin Resource Policy (CORP)
        • Cross-Origin-Resource-Policy
          • same-origin
          • same-site
          • cross-origin
      4. Cross Origin Read Blocking (CORB)
        • Cross-Origin-Embedder-Policy
          • require-corp
      "},{"location":"essay/web-security/mixed-content/","title":"\u4ec0\u9ebc\u662f Mixed Content","text":"
      • \u540c\u4e00\u500b\u7db2\u7ad9\u64c1\u6709\u591a\u500b\u7db2\u7ad9\u7684\u8cc7\u6e90
      • JS
      • CSS
      • \u5716\u7247\u7b49\u7b49
      • \u5f71\u97ff\u7db2\u7ad9\u884c\u70ba
      • \\http://evil.com\u201d> \u4e0d\u662f\uff01
      "},{"location":"essay/web-security/mixed-content/#\u54ea\u4e9b\u9700\u8981\u6ce8\u610f","title":"\u54ea\u4e9b\u9700\u8981\u6ce8\u610f","text":"
      • \u9664\u4e86\u5f71\u7247\u3001\u8072\u97f3\u3001\u5716\u50cf\u90fd\u61c9\u8a72\u8981\u64cb
      • \u5716\u50cf\u4e5f\u8981\u6ce8\u610f \u628a\u5783\u573e\u6876\u7684\u5716\u6a19\u548c\u5132\u5b58\u8d77\u4f86\u7684\u5716\u6a19\u4ea4\u63db
      • \u820a\u7684\u700f\u89bd\u5668\u53ef\u80fd\u9632\u8b77\u4e0d\u5920
      • IE8 \u4ee5\u4e0b
      "},{"location":"essay/web-security/mixed-content/#\u9632\u8b77","title":"\u9632\u8b77","text":"
      • http:// => https://
      • \u5f9e\u672c\u5730\u7aef\u9001\u8cc7\u6599\u800c\u4e0d\u662f\u5f9e\u5225\u7684\u7db2\u7ad9\u8981
      • Header: Content Security Policy
      • upgrade-insecure-requests
        • cascades into \\
        • blocking resources
        • \u6383\u63cf\u5de5\u5177\uff1a
        • HTTPSChecker
        • Mixed Content Scan
        • "},{"location":"essay/web-security/owasp-api-top10/","title":"OWASP API Top 10","text":""},{"location":"essay/web-security/owasp-api-top10/#broken-object-level-authorization","title":"Broken Object Level Authorization","text":"
          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

          "},{"location":"essay/web-security/owasp-api-top10/#broken-authentication","title":"Broken Authentication","text":"

          \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

          "},{"location":"essay/web-security/owasp-api-top10/#lack-of-resources--rate-limiting","title":"Lack of Resources & Rate Limiting","text":"

          \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

          "},{"location":"essay/web-security/owasp-api-top10/#broken-function-level-authorization","title":"Broken Function Level Authorization","text":"

          \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

          • \u67b6\u69cb\u7684\u6aa2\u67e5
          • \u6aa2\u67e5\u5bc6\u78bc\u5f37\u5ea6\uff0czxcvbn
          • \u6aa2\u67e5\u5bc6\u78bc\u88ab\u7834\u89e3\u904e\uff0cHave I been pwned?
          • \u9650\u5236\u5617\u8a66
          • \u81ea\u5df1\u653b\u64ca\u770b\u770b\uff0cBurp Suite Intruder
          "},{"location":"essay/web-security/owasp-authentication-best-practice/#session","title":"Session","text":"

          Referer: https://github.com/OWASP/owasp-mstg/blob/master/Document/0x04e-Testing-Authentication-and-Session-Management.md#session-management-best-practices

          • \u6bcf\u6b21\u9700\u8981\u9a57\u8b49\u8eab\u4efd\u6642\u8981\u505a\u6aa2\u67e5
          • \u8981\u904e\u671f
          • \u6839\u64da\u4e0d\u540c Framework \u6709\u4e0d\u540c best practice\uff0c\u8acb\u8a73\u95b1\uff01\uff01
          "},{"location":"essay/web-security/owasp-authentication-best-practice/#2fa","title":"2FA","text":"
          • SMS-OTP
          • NIST: \"Due to the risk that SMS messages may be intercepted or redirected, implementers of new systems SHOULD carefully consider alternative authenticators.\"
          • \u53ef\u80fd\u906d\u9047\u7684\u5a01\u8105\u548c\u9810\u9632\u65b9\u5f0f\uff1ahttps://github.com/OWASP/owasp-mstg/blob/master/Document/0x04e-Testing-Authentication-and-Session-Management.md#dangers-of-sms-otp
          • Transaction Signing with Push Notifications and PKI
          • \u624b\u6a5f\u5efa\u7acb\u516c\u79c1\u9470
          • \u516c\u9470\u9001\u7d66\u5f8c\u7aef
          • \u82e5\u9700\u8981\u9a57\u8b49\u7684\u884c\u70ba\uff1a
            • \u767c\u901a\u77e5\uff08Push notifications\uff09\u5230\u624b\u6a5f
            • \u4f7f\u7528\u8005\u6388\u6b0a
            • \u50b3\u9001\u79c1\u9470\u7c3d\u6838\u904e\u7684\u8a0a\u606f
            • \u9a57\u8b49
          • \u8a73\u7d30\u6ce8\u610f\u4e8b\u9805\u548c\u6e2c\u8a66\uff1ahttps://github.com/OWASP/owasp-mstg/blob/master/Document/0x04e-Testing-Authentication-and-Session-Management.md#transaction-signing-with-push-notifications-and-pki
          "},{"location":"essay/web-security/owasp-authentication-best-practice/#jwt","title":"JWT","text":"
          • \u6bcf\u6b21\u90fd\u8981\u9a57\u8b49
          • \u9470\u5319\u85cf\u597d
          • \u85cf\u597d\u6a5f\u654f\u8cc7\u6599\uff0c\u82e5\u6709\u5fc5\u8981\u8acb\u52a0\u5bc6
          • \u4f7f\u7528 jti\uff08JWT ID\uff09
          • token \u8acb\u653e\u5728 KeyChain \u6216 KeyStore
          • Header \u4e0d\u80fd\u8b93 alg \u53ef\u63a5\u53d7 none
          • exp \u8981\u6ce8\u610f
          "},{"location":"essay/web-security/owasp-authentication-best-practice/#oauth-20","title":"OAuth 2.0","text":"
          • \u5225\u7528 implicit grant\uff0ccode grant \u8981\u4e00\u6b21\u6027\u4e14\u77ed\u6642
          • PKCE
          • Access Token \u82e5\u5b58\u5728\u4e0d\u4fe1\u4efb\u7684\u5730\u65b9\u8981\u77ed\u66ab\u7684\u671f\u9650
          • \u6709\u9650\u5236\u7684 scope
          • \u9664\u4e86 access token \u8981\u6709\u53ef\u4ee5\u9a57\u8b49\u4f7f\u7528\u8005\u7684\u8cc7\u8a0a
          • OAuth 2.0 for Native APP
          "},{"location":"essay/web-security/owasp-authentication-best-practice/#\u600e\u9ebc\u78ba\u8a8d\u9019\u662f\u540c\u4e00\u53f0\u624b\u6a5f","title":"\u600e\u9ebc\u78ba\u8a8d\u9019\u662f\u540c\u4e00\u53f0\u624b\u6a5f","text":"

          \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_IDencrypted 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

          "},{"location":"essay/web-security/owasp-authentication-best-practice/#\u5176\u4ed6","title":"\u5176\u4ed6","text":"
          • \u8b93\u4f7f\u7528\u8005\u77e5\u9053 {} \u4e5f\u767b\u5165\u5e33\u865f\u4e86
          • \u54ea\u500b\u88dd\u7f6e
          • \u54ea\u500b\u6642\u9593
          • \u54ea\u500b\u5730\u9ede
          • \u8981\u901a\u77e5\u4f7f\u7528\u8005\u6709\u65b0\u7684\u767b\u5165
          • \u8b93\u4f7f\u7528\u8005\u77e5\u9053\u6700\u5f8c\u884c\u70ba\u662f\u4ec0\u9ebc
          • \u6bcf\u6b21\u767b\u5165\u3001\u767b\u51fa\u8981\u505a\u7d00\u9304
          • \u9019\u4e9b\u662f\u6a5f\u654f\u7684\u884c\u70ba
          • \u767b\u5165
          • \u6539\u5bc6\u78bc
          • \u500b\u8cc7\u6539\u8b8a (name, email address, telephone number, etc.)
          • \u654f\u611f\u884c\u70ba (purchase, accessing important resources, etc.)
          • \u540c\u610f\u689d\u6b3e
          "},{"location":"essay/web-security/owasp-mobile-risk-top10/","title":"OWASP \u884c\u52d5\u88dd\u7f6e\u98a8\u96aa","text":""},{"location":"essay/web-security/owasp-mobile-risk-top10/#\u4e0d\u540c\u5e73\u53f0\u9593\u7684\u932f\u8aa4\u5be6\u4f5cimproper-platform-usage","title":"\u4e0d\u540c\u5e73\u53f0\u9593\u7684\u932f\u8aa4\u5be6\u4f5c\uff08Improper Platform Usage\uff09","text":"

          \u4f8b\u5982\u628a\u6a5f\u654f\u8cc7\u6599\u5b58\u9032 local storage \u800c\u4e0d\u662f\u539f\u751f\u7684\u52a0\u5bc6\u5132\u5b58\u7a7a\u9593\uff1a

          • iOS \u7684 Keychain
          • Android \u7684 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

          • Log
          • SD card
          • Cloud synced
          • OS
          • Frameworkd\uff08\u6846\u67b6\u5982\uff1aFlutter\uff09
          • Binary data\uff08\u7a0b\u5f0f\u78bc\u88e1\u9762\uff09

          \u9810\u9632\uff1a

          • \u53ea\u5132\u5b58\u5fc5\u8981\u8cc7\u8a0a
          • \u5c07\u654f\u611f\u6a94\u6848\u52a0\u5bc6\uff0c\u548c\u9078\u64c7\u597d\u5132\u5b58\u7684\u4f4d\u7f6e

          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

          • \u7db2\u8def\u9023\u7dda
          • Wifi \u9023\u7dda
          • \u8fd1\u5834\u901a\u8a0a\uff08Near Field Communication\uff0cNFC\uff09\u9023\u7dda
          • ...

          \u6700\u4f73\u505a\u6cd5\uff1a

          • \u78ba\u4fdd\u6240\u6709\u654f\u611f\u6027\u8cc7\u6599\u6709\u63a1\u7528\u52a0\u5bc6\u65b9\u5f0f\uff08TLS\u3001SSL\uff09\u9032\u884c\u50b3\u8f38
          • \u4e26\u5be6\u8e10\u5176\u6700\u4f73\u505a\u6cd5
          • \u6301\u7e8c\u6ce8\u610f\u7db2\u8def\u6d41\u91cf
          • \u4e0d\u8981\u628a\u6a5f\u654f\u8cc7\u6599\u900f\u904e SMS\u3001MMS \u50b3\u51fa\u53bb
          "},{"location":"essay/web-security/owasp-mobile-risk-top10/#\u4e0d\u5b89\u5168\u7684\u9a57\u8b49\u6a5f\u5236insecure-authentication","title":"\u4e0d\u5b89\u5168\u7684\u9a57\u8b49\u6a5f\u5236\uff08Insecure Authentication\uff09","text":"
          • \u628a Session \u6216 Token \u5132\u5b58\u9032\u5b89\u5168\u4f4d\u7f6e
          • \u5225\u7528 PIN \u78bc\u9a57\u8b49
          • \u82e5\u60a8\u7684 App \u7121\u9808 \u96e2\u7dda\u5b58\u53d6\uff0c\u8acb\u505c\u7528\u6b64\u529f\u80fd
          • \u82e5\u60a8\u7684\u61c9\u7528\u7a0b\u5f0f\u9700\u7dad\u6301\u6a5f\u5bc6\u6027\uff0c\u8acb\u9032\u884c \u96d9\u56e0\u7d20\u8eab\u5206\u9a57\u8b49
          • \u5584\u7528\u5982 Microsoft / Google Authenticator \u7b49\u670d\u52d9
          "},{"location":"essay/web-security/owasp-mobile-risk-top10/#\u932f\u8aa4\u7684\u4f7f\u7528\u5bc6\u78bc\u5b78broken-cryptography","title":"\u932f\u8aa4\u7684\u4f7f\u7528\u5bc6\u78bc\u5b78(Broken Cryptography)","text":"
          • \u4fdd\u8b77\u597d\u4f60\u7684\u9470\u5319
          • \u5225\u81ea\u5df1\u8a2d\u8a08\u5bc6\u78bc\u5b78\u76f8\u95dc\u7684\u6f14\u7b97\u6cd5
          • \u4e0d\u5b89\u5168\u6216\u904e\u6642\u7684\u6f14\u7b97\u6cd5\uff08\u4e0d\u55ae\u6307\u52a0\u5bc6\uff09
          • RC2
          • MD4
          • MD5
          • SHA1
          "},{"location":"essay/web-security/owasp-mobile-risk-top10/#\u4e0d\u5b89\u5168\u7684\u6388\u6b0a\u6a5f\u5236insecure-authorization","title":"\u4e0d\u5b89\u5168\u7684\u6388\u6b0a\u6a5f\u5236\uff08Insecure Authorization\uff09","text":"
          GET /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

          • buffer overflow
          • format string vulnerabilities
          • ...

          \u9810\u9632\uff1a

          • \u8b93\u591a\u4eba\u4e00\u8d77\u6aa2\u67e5\u7a0b\u5f0f\u78bc
          • \u5beb\u597d\u770b\u7684\u7a0b\u5f0f\u78bc\uff0c\u597d\u770b\u7684\u7a0b\u5f0f\u78bc\u5e6b\u52a9 Debug
          • buffer overflow \u548c memory leak \u662f\u9ad8\u98a8\u96aa\u7684\u5b89\u5168\u6027\u554f\u984c
          include <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

          • \u6700\u7d42\u7684\u7a0b\u5f0f\u78bc\u4e0d\u80fd\u6709 debug \u7684 log
          • \u907f\u514d\u82e5 config \u6a94\u8b8a\u5316\u4e86\uff0c\u7522\u54c1\u7684\u6a5f\u654f\u8cc7\u8a0a\u6216\u7279\u6b8a\u74b0\u5883\u4ecd\u80fd\u904b\u884c\u6216\u66b4\u9732
          • \u55ae\u5143\u6216\u6574\u5408\u6e2c\u8a66\u4e0d\u8981\u5728\u6700\u7d42\u7522\u54c1\u4e2d
          • \u4e0d\u80fd\u6709 UAT\u3001staging\u3001demo \u6216 test \u74b0\u5883\u7684\u7a0b\u5f0f\u78bc\u5728\u6700\u7d42\u7522\u54c1
          "},{"location":"essay/web-security/owasp-mobile-risk-top10/#\u820a\u7684","title":"\u820a\u7684","text":""},{"location":"essay/web-security/owasp-mobile-risk-top10/#\u4f3a\u670d\u5668\u7aef\u5b89\u5168\u63a7\u5236\u8106\u5f31weak-server-side-controls","title":"\u4f3a\u670d\u5668\u7aef\u5b89\u5168\u63a7\u5236\u8106\u5f31\uff08Weak Server Side Controls\uff09","text":"

          \u5f8c\u7aef\u9700\u8981\u6ce8\u610f\u53ef\u80fd\u906d\u53d7\u7684\u653b\u64ca\uff1a

          • OWASP Top 10
          • OWASP API Top 10

          \u57fa\u672c\u89c0\u5ff5\uff1a

          • \u7d55\u4e0d\u76f8\u4fe1\u7528\u6236\u7aef
          • \u8b39\u614e\u8a2d\u8a08\u884c\u52d5\u88dd\u7f6e\u7684\u4f3a\u670d\u5668\u7aef\u63a7\u5236
          • \u7d55\u4e0d\u4f7f\u7528\u7528\u6236\u7aef\u61c9\u7528\u7a0b\u5f0f\u57f7\u884c\u5b58\u53d6\u63a7\u5236
          "},{"location":"essay/web-security/owasp-mobile-risk-top10/#\u975e\u6545\u610f\u6216\u610f\u5916\u9020\u6210\u7684\u8cc7\u6599\u5916\u6d29unintended-data-leakage","title":"\u975e\u6545\u610f\u6216\u610f\u5916\u9020\u6210\u7684\u8cc7\u6599\u5916\u6d29\uff08Unintended Data Leakage\uff09","text":"
          • \u5c07\u88dd\u7f6e\u53ef\u6536\u96c6\u7684\u8cc7\u6599\u9650\u5236\u5728\u5176\u6240\u9700\u7684\u7bc4\u570d
          • \u5207\u52ff\u5c07\u654f\u611f\u8cc7\u6599\u5132\u5b58\u65bc\u516c\u5171\u5834\u6240
          • \u77ad\u89e3\u4e26\u5bc6\u5207\u76e3\u63a7\u60a8\u7684\u61c9\u7528\u7a0b\u5f0f\u8655\u7406\uff0c\u5982\uff1a\u526a\u4e0b - \u8cbc\u4e0a\u3001\u61c9\u7528\u7a0b\u5f0f\u80cc\u666f\u8655\u7406\u3001Cookie\u3001 URL \u5feb\u53d6\u53ca\u9375\u76e4\u6309\u4e0b\u5feb\u53d6\u7b49\u52d5\u4f5c
          "},{"location":"essay/web-security/owasp-mobile-risk-top10/#\u5ba2\u6236\u7aef\u6ce8\u5165client-side-injection","title":"\u5ba2\u6236\u7aef\u6ce8\u5165(Client Side Injection)","text":"
          • \u4f7f\u7528\u767d\u540d\u55ae\u65b9\u6cd5\u662f\u62b5\u64cb XSS
          • \u78ba\u4fdd\u4f7f\u7528\u8005\u8cc7\u6599\u901a\u904e\u53c3\u6578\u5316\u7684\u67e5\u8a62
          • \u9a57\u8b49\u4e26\u7de8\u78bc\u6240\u6709\u5132\u5b58\u5728\u88dd\u7f6e\u4e0a\u7684\u8cc7\u6599

          \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":"
          • \u907f\u514d\u4f7f\u7528\u88dd\u7f6e\u7684\u786c\u9ad4\u8b58\u5225\u78bc\u4f86\u7576\u4f5c Session \u503c
          • Session \u503c\u7684\u904e\u671f\u6642\u9593\u61c9\u8a2d\u5b9a\u5728\u4e00\u500b\u53ef\u63a5\u53d7\u7bc4\u570d\u5167
          • \u61c9\u6709\u80fd\u5920\u5feb\u901f\u64a4\u92b7 Token \u7684\u6a5f\u5236
          "},{"location":"essay/web-security/owasp-mobile-risk-top10/#\u5b89\u5168\u6c7a\u7b56\u662f\u7d93\u7531\u4e0d\u53d7\u4fe1\u4efb\u7684\u8f38\u5165security-decisions-via-untrusted-inputs","title":"\u5b89\u5168\u6c7a\u7b56\u662f\u7d93\u7531\u4e0d\u53d7\u4fe1\u4efb\u7684\u8f38\u5165\uff08Security Decisions Via Untrusted Inputs\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

          • \u5207\u52ff\u5c07\u7a0b\u5f0f\u78bc\u5132\u5b58\u5728\u4e0d\u53d7\u60a8\u63a7\u5236\u7684\u4e0d\u5b89\u5168\u74b0\u5883\u4e0b
          • \u78ba\u4fdd\u6b63\u78ba\u4f7f\u7528\u6191\u8b49\u7d81\u5b9a\u53ca\u5075\u932f\u5de5\u5177\u5075\u6e2c\u63a7\u5236
          • \u76e3\u63a7\u57f7\u884c\u968e\u6bb5\u7a0b\u5f0f\u78bc\u662f\u5426\u5728 App \u6d3b\u52d5\u4e2d\u51fa\u73fe\u7570\u5e38
          "},{"location":"essay/web-security/owasp-mobile-risk-top10/#\u5074\u901a\u9053\u8cc7\u6599\u6d29\u6f0fside-channel-data-leakage","title":"\u5074\u901a\u9053\u8cc7\u6599\u6d29\u6f0f\uff08Side Channel Data Leakage\uff09","text":"

          \u8cc7\u6599\u61c9\u907f\u514d\u81ea\u52d5\u5132\u5b58\u65bc\u53ef\u651c\u5f0f\u884c\u52d5\u88dd\u7f6e\u5167

          • \u7db2\u9801\u66ab\u5b58\uff08Web Cache\uff09
          • \u6309\u9375\u5074\u9304\uff08Keystorke Logging\uff09
          • \u64f7\u53d6\u756b\u9762\uff08Screenshots\uff09
          • \u65e5\u8a8c\u6a94\uff08Logs\uff09
          • \u66ab\u5b58\u76ee\u9304\uff08Temp Directories\uff09
          "},{"location":"essay/web-security/owasp-mobile-risk-top10/#\u654f\u611f\u8cc7\u8a0a\u6d29\u6f0fsensitive-informaiton-disclosure","title":"\u654f\u611f\u8cc7\u8a0a\u6d29\u6f0f\uff08Sensitive Informaiton Disclosure\uff09","text":"

          \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! \u5beb\u4f5c \u2605\u2605\u2605\u2606\u2606 Michael T. Nygard 2018-01 Adaptive Concurrency \u5b8c\u6210 \u5fc3\u5f97 2022-07"},{"location":"feedback/#\u60f3\u8b80","title":"\u60f3\u8b80","text":"
          • Modern CPU Design
          • Blue Green Test - Netflix
          • The Pragmatic Programmer
          • Site Reliability Engineering
          • The Site Reliability Workbook, Practical Ways to Implement SRE
          "},{"location":"feedback/#\u8b80\u5b8c","title":"\u8b80\u5b8c","text":"

          \u8b80\u5b8c\u66f8\uff0c\u4f46\u662f\u9084\u6c92\u958b\u59cb\u5beb\u5fc3\u5f97\u3002

          • Implementation Patterns
          • Stream Processing, CEP, Event Sourcing, and Data Streaming Explained
          • DataHub - LinkedIn
          • \u4f5b\u9640\u548c\u539f\u59cb\u4f5b\u6559\u601d\u60f3 - \u90ed\u826f\u92c6
          • \u8ad6\u8a9e
          "},{"location":"feedback/#\u5beb\u4f5c","title":"\u5beb\u4f5c","text":"

          \u958b\u59cb\u5beb\u4f5c\uff08\u53ef\u80fd\u8b80\u5b8c\u4e5f\u53ef\u80fd\u9084\u6c92\u8b80\u5b8c\uff09\u3002

          • Future Of Fusion Energy
          • Release It!
          "},{"location":"feedback/#\u5b8c\u6210","title":"\u5b8c\u6210","text":"

          \u8b80\u5b8c\u4e14\u5beb\u5b8c\u5fc3\u5f97\u3002

          • Distributed Systems with Node.js
          • Designing Data-intensive Applications
          • Adaptive Concurrency
          "},{"location":"feedback/adaptive-concurrency/","title":"\u9069\u61c9\u6027\u4e26\u884c\u8655\u7406","text":"

          \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

          • \u51b7\u6c23\u58de\u6389\uff0c\u539f\u672c\u5341\u5206\u9418\u53ef\u4ee5\u8655\u7406\u4e00\u4f4d\u9867\u5ba2\uff0c\u56e0\u70ba\u7169\u60b6\u6240\u4ee5\u73fe\u5728\u5341\u4e94\u5206\u9418\u624d\u80fd\u5b8c\u6210
          • \u6578\u6284\u6a5f\u58de\u6389\uff0c\u6bd4\u51b7\u6c23\u58de\u6389\u66f4\u7cdf\uff0c\u73fe\u5728\u4e09\u5341\u5206\u9418\u624d\u80fd\u8655\u7406\u4e00\u4f4d\u9867\u5ba2
          • \u884c\u54e1\u81e8\u6642\u8acb\u5047\uff0c\u9280\u884c\u73fe\u5728\u5b8c\u5168\u6c92\u8fa6\u6cd5\u8655\u7406\u9867\u5ba2\u7684\u696d\u52d9\u4e86
          • \u67d0\u653f\u7b56\u7684\u57f7\u884c\uff0c\u5c0e\u81f4\u696d\u52d9\u91cf\u5927\u589e\uff0c\u9867\u5ba2\u6578\u91cf\u591a\u5230\u4f60\u548c\u884c\u54e1\u90fd\u6c92\u8fa6\u6cd5\u8ca0\u8377
          • \u9867\u5ba2\u56e0\u70ba\u7b49\u592a\u4e45\u4e86\uff0c\u628a\u4f60\u6293\u51fa\u4f86\u81ed\u7f75\u4e00\u9813

          \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

          • \u67d0\u500b\u670d\u52d9\u7684\u8acb\u6c42\u7a81\u7136\u589e\u52a0\uff0c\u5c0e\u81f4\u4e0a\u6e38\u670d\u52d9\u548c APIM \u672c\u8eab\u7684\u8ca0\u8f09\u80fd\u529b\u53d7\u5230\u6311\u6230
          • \u8acb\u6c42\u7684\u7e3d\u91cf\u7a81\u7136\u589e\u52a0\uff0c\u539f\u56e0\u53ef\u80fd\u4e0d\u6b62\u662f\u5916\u5728\u56e0\u7d20\uff0c\u4e5f\u6709\u53ef\u80fd\u662f\u524d\u7aef\u7684 bug
          • \u4e0a\u6e38\u670d\u52d9\u56de\u61c9\u901f\u5ea6\u8b8a\u6162\u4e86\uff0c\u4e0d\u7ba1\u662f\u670d\u52d9\u672c\u8eab\u7684\u8655\u7406\u901f\u5ea6\u964d\u4f4e\u3001\u6709\u7a0b\u5f0f\u4e0a\u7684\u932f\u6216\u8005\u7db2\u8def\u74b0\u5883\u7b49\u7b49\u3002

          \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

          "},{"location":"feedback/adaptive-concurrency/#aimd","title":"AIMD","text":"

          \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

          "},{"location":"feedback/adaptive-concurrency/#\u6bd4\u8f03","title":"\u6bd4\u8f03","text":"

          \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

          • \u900f\u904e\u5916\u90e8\u7684\u8cc7\u6599\u5eab\u4f86\u5132\u5b58\u9019\u4e9b\u72c0\u614b\uff0c\u4f8b\u5982 Redis\u3001Dragonfly\u3002\u628a\u64f4\u5c55\u6027\u7684\u554f\u984c\u4e1f\u7d66\u8cc7\u6599\u5eab\u3002
          • \u7559\u8a00\u5354\u8b70\uff08Gossip\uff09\uff0c\u8b93\u5404\u500b\u7bc0\u9ede\u5f7c\u6b64\u6e9d\u901a\u5354\u8abf\u5404\u81ea\u7684\u72c0\u614b\uff0c\u4ed6\u4e0d\u50cf\u5171\u8b58\u6f14\u7b97\u6cd5\u9019\u9ebc\u56b4\u8b39\u3002
          • \u5354\u8abf\u8005\uff0c\u628a\u8cc7\u6599\u7684\u8655\u7406\u4e1f\u7d66\u4e00\u500b\u5916\u90e8\u5354\u8abf\u8005\uff0c\u5f88\u50cf\u8cc7\u6599\u5eab\uff0c\u4f46\u9019\u5354\u8abf\u8005\u662f\u4e00\u7a2e\u61c9\u7528\u7a0b\u5f0f\u3002
          • \u76f8\u5c0d\u65bc\u5354\u8abf\u8005\uff0c\u4f60\u53ef\u4ee5\u5728\u53e2\u96c6\u5167\u90e8\u63a8\u8209\u4e00\u500b\u6216\u591a\u500b\u9818\u8896\u4f86\u6c7a\u5b9a\u9650\u6d41\u7684\u72c0\u614b\uff0c\u4f46\u662f\u9818\u8896\u7684\u9078\u64c7\u9700\u8981\u5171\u8b58\u6f14\u7b97\u6cd5\u3002
          • \u653e\u68c4\u6e96\u78ba\u6027\uff0c\u8b93\u5404\u500b\u7bc0\u9ede\u8655\u7406\u5404\u81ea\u7684\u72c0\u614b\uff0c\u4f8b\u5982\u539f\u672c\u6bcf\u500b\u4f7f\u7528\u8005\u6bcf\u79d2\u9650\u5236 100 \u500b\u8acb\u6c42\uff0c\u7576\u5206\u6563\u5230\u56db\u500b\u7bc0\u9ede\u5c31\u662f\u9650\u5236\u6bcf\u500b\u4f7f\u7528\u8005\u6bcf\u79d2 25 \u500b\u8acb\u6c42

          \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

          • \u4e0d\u540c\u7684\u8acb\u6c42\uff0c\u53ef\u80fd\u6703\u6709\u4e0d\u540c\u7684\u512a\u5148\u7a0b\u5ea6\uff0c\u4f8b\u5982 VIP \u6703\u54e1\u3002
          • \u6839\u64da\u4e0d\u540c\u529f\u80fd\uff0c\u6f5b\u6642\u53ef\u80fd\u6703\u6709\u4e0d\u540c\u7684\u9ad8\u4f4e\uff0c\u6240\u4ee5\u4e0d\u53ea\u662f\u6839\u64da\u670d\u52d9\u8a18\u9304\u6f5b\u6642\uff0c\u751a\u81f3\u8981\u6839\u64da\u4e0d\u540c path \u7d00\u9304\u6f5b\u6642\u3002
          • \u524d\u9762\u63d0\u7684\u5229\u7528\u7387\uff0c\u5f88\u7c21\u55ae\u7684\u628a 100 \u500b\u9650\u5236\u5206\u6210 80/80\uff0c\u6709\u6c92\u6709\u66f4\u597d\u6216\u66f4\u901a\u7528\u7684\u5206\u6cd5\uff1f

          \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

          • trace \u53ef\u4ee5\u77e5\u9053\u9019\u500b\u8acb\u6c42\u662f\u6bcf\u500b\u9023\u7dda\u90fd\u6162\u9084\u662f\u600e\u6a23
          • metrics \u53ef\u4ee5\u77e5\u9053\u61c9\u7528\u6574\u9ad4\u72c0\u6cc1

          \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

          • \u628a\u8a2d\u5b9a\u8b8a\u6210 code\uff0c\u653e\u8fd1 VCS\uff0c\u52a0\u4e0a lint\u3002
          • \u8b93\u591a\u5718\u968a\u7684 metrics \u76e1\u91cf\u4e00\u81f4\u3002
          • \u7368\u7acb\u5404\u500b component\uff1a
          • collecting: statsd, Prometheus
          • storing: Prometheus, InfluxDB(long term)
          • dashboarding: Grafana, Viceroy
          • alerting: Alertmanager
          • \u5b9a\u671f\u8b93\u67d0\u500b\u670d\u52d9\u58de\u6389\u6216\u67d0\u500b\u6307\u6a19\u8d85\u904e\u95a5\u503c\uff0c\u78ba\u4fdd\u4f60\u7684 alert \u6709\u901a\u77e5\u5230\u5c0d\u7684\u5718\u968a
          • \u78ba\u4fdd\u8cc7\u6599\u7684\u5373\u6642\u6027\uff0c\u624d\u80fd\u5728\u7b2c\u4e00\u6642\u9593\u5f97\u5230\u8b66\u8a0a

          metrics \u6ce8\u610f\u56db\u5927\u6307\u6a19\uff1a

          • \u4f60\u7684\u670d\u52d9\u672c\u8eab
          • \u4f60\u7684\u4f9d\u8cf4
          • \u7e3d\u800c\u8a00\u4e4b\uff0c\u78ba\u4fdd\u6bcf\u500b\u6307\u6a19\u90fd\u6709\u500b\u76ee\u7684

          \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

          • \u8b80\u53d6\u524d\u5341\u5206\u9418\u7684\u8cc7\u6599\u6aa2\u67e5\u73fe\u5728\u932f\u8aa4\u7387\u662f\u4e0d\u662f\u5927\u65bc 0.1%\u3002 \u4f46\u5be6\u969b\u4e0a\uff0c\u9019\u500b\u5341\u5206\u9418\u7684\u300c\u932f\u8aa4\u91cf\u300d\u53ef\u80fd\u53ea\u4f54 30 \u5929\u7684\u56db\u5343\u5206\u4e4b\u4e00\uff0c\u5bb9\u6613\u9020\u6210 False Alarm\u3002 \u63db\u53e5\u8a71\u8aaa\uff0c\u4f60\u53ef\u80fd\u53ef\u4ee5\u6bcf\u5929\u6536\u5230 6*24 \u500b\u8b66\u544a\uff0c\u800c\u4ecd\u80fd\u6eff\u8db3\u4f60\u7684 error budget
          • \u6539\u6210\u4e09\u5341\u516d\u5c0f\u6642\u7684\u8cc7\u6599\uff1a
          • \u4e09\u5c0f\u6642\u4fee\u5fa9\u597d\u7684\u932f\u8aa4\uff0c\u6703\u5728\u63a5\u4e0b\u4f86\u7684\u4e09\u5341\u4e09\u500b\u5c0f\u6642\u4e00\u76f4\u53eb
          • \u8017\u8cbb\u5927\u91cf\u8a08\u7b97\u8cc7\u6e90
          • \u6539\u6210\u6bcf\u5c0f\u6642\u6aa2\u67e5\u4e00\u6b21\uff0c\u4f46\u6703\u8b93\u8b66\u544a\u592a\u665a\u6536\u5230

          \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

          • \u5047\u8a2d\u8a8d\u70ba\u6bcf\u5c0f\u6642\u6d88\u8017\u6389 5% \u7684 error budget \u662f\u56b4\u91cd\u4e14\u9700\u8981\u544a\u8b66\u7684\uff0c\u5c31\u8a08\u7b97\uff1a burn rate \u70ba 36\uff08\\(\\frac{30 day*24hr/day}{1hr}* 5\\%\\)\uff09\u3002 \u4f46\u4ecd\u6703\u6709\u554f\u984c\uff1a
          • burn rate 36 \u4ee5\u4e0b\u7684\u932f\u8aa4\u5c31\u4e0d\u6703\u88ab\u544a\u77e5\uff0c \u7136\u800c\u5979\u53ea\u9700\u7d04 20 \u5c0f\u6642\u5c31\u6703\u628a\u4f60\u7684 error budget \u5403\u6389\u3002 \uff08\u4f4e\u932f\u8aa4\u7387\u800c\u9577\u671f\u5b58\u5728\u7684\u6f0f\u6d1e\uff09
          • 58 \u5206\u9418\uff08\\(60 - 0.001*60*36\\)\uff09\u7684 reset time \u4ecd\u592a\u9577
          • \u591a\u7b49\u7d1a\u7684\u95a5\u503c\uff1a2/5/10% \u7684\u932f\u8aa4\u7387\u3001\u6bcf 1/6/36 \u5c0f\u6642\u7684\u8cc7\u6599\u300114.4/6/1 \u7684 burn rate\uff1a
          • \u7f3a\u9ede\u5c31\u662f\u5f88\u591a\u6578\u503c\u9700\u8981\u53bb\u53c3\u8003\u3001\u8a2d\u5b9a\u548c\u8aaa\u670d
          • reset time \u4ecd\u672a\u6e1b\u5c11
          • \u53ef\u80fd\u4e00\u6b21\u89f8\u767c\u4e09\u500b\u544a\u8b66
          • \u642d\u914d\u77ed\u6642\u9593\u7684 AND \u908f\u8f2f\uff0c\u4f8b\u5982\uff1a
          • \u6bcf\u5c0f\u6642 > 2%\u300c\u4e14\u300d\u6bcf\u4e94\u5206\u9418 > 2%
          • \u6bcf\u516d\u5c0f\u6642 > 5%\u300c\u4e14\u300d\u6bcf\u4e09\u5341\u5206\u9418 > 5%
          • \u6bcf\u4e09\u5929 > 10%\u300c\u4e14\u300d\u6bcf\u5169\u5c0f\u6642 > 10%

          \u4f4e\u6d41\u91cf\u7684\u89e3\u6cd5\uff1a

          • \u4eba\u5de5\u6d41\u91cf\uff0c\u4f46\u7f3a\u9ede\uff1a
          • \u670d\u52d9\u5f88\u8907\u96dc\uff0c\u507d\u9020\u7684\u6d41\u91cf\u901a\u5e38\u53ea\u5305\u542b\u4e00\u90e8\u5206\u7684\u8acb\u6c42
          • \u507d\u9020\u7684\u6d41\u91cf\u6703\u8b93\u771f\u5be6\u7684\u932f\u8aa4\u7387\u4e0b\u964d
          • \u6574\u5408\u670d\u52d9\uff0c\u628a\u591a\u500b\u5c0f\u7684\u670d\u52d9\uff08\u64c1\u6709\u76f8\u4f3c\u76f8\u4f9d\uff0c\u4f8b\u5982\u8cc7\u6599\u5eab\uff09\u6574\u5408\u9032\u5927\u7684\u76e3\u63a7\u7cfb\u7d71\uff0c\u53bb\u8a08\u7b97 SLO
          • \u81ea\u52d5\u91cd\u65b0\u9001\u51fa\u8acb\u6c42\uff08retry\uff09\uff0c\u907f\u514d\u66ab\u6642\u6027\u7684\u932f\u8aa4\u5f71\u97ff\u4f7f\u7528\u8005
          • \u964d\u4f4e SLO \u6216\u62c9\u9577\u6642\u9593\u8ef8\u4f86\u505a\u5206\u6790

          \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

          • \u6848\u4f8b\u5206\u4eab\uff0c \u900f\u904e\u4e00\u4e9b\u6848\u4f8b\u5206\u4eab\uff0c\u66b8\u89e3\u54ea\u4e9b\u8a2d\u8a08\u6703\u8b93\u670d\u52d9\u96e3\u4ee5\u7dad\u904b\u3002
          • \u904b\u884c\u74b0\u5883\uff0c \u5f9e\u5be6\u9ad4\u3001\u7db2\u8def\u3001\u55ae\u4e00\u7bc0\u9ede\u3001\u591a\u7bc0\u9ede\u518d\u5230\u8abf\u5ea6\u5de5\u5177\u7684\u61c9\u7528\u7b56\u7565\u548c\u7dad\u904b\u6ce8\u610f\u4e8b\u9805\u3002
          • \u9069\u61c9\u529b\uff0c \u5f9e\u6574\u9ad4\u7cfb\u7d71\u53bb\u89e3\u5256\u53ef\u4ee5\u6539\u5584\u7684\u9ede\uff0c\u5305\u62ec\u4f01\u696d\u67b6\u69cb\u3001\u670d\u52d9\u67b6\u69cb\u3001\u8cc7\u6599\u67b6\u69cb\u3002
          "},{"location":"feedback/release-it/#\u6848\u4f8b\u5206\u4eab","title":"\u6848\u4f8b\u5206\u4eab","text":"

          \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

          • \u4f7f\u7528\u5927\u5bb6\u90fd\u5728\u7528\uff08\u958b\u6e90\uff09\u7684\u9023\u7dda\u6c60\u7ba1\u7406\u5de5\u5177\uff1b
          • \u907f\u514d\u9023\u9396\u5f0f\u53cd\u61c9\u5f71\u97ff\u5176\u4ed6\u670d\u52d9\uff0c\u4f8b\u5982 \u8259\u58c1\u8a2d\u8a08\u539f\u5247\uff08bulkheads\uff09\u3001\u6bcf\u500b\u8cc7\u6599\u5eab\u7528\u81ea\u5df1\u7684\u9023\u7dda\u6c60\uff1b
          • \u8abf\u6574\u8cc7\u6599\u67b6\u69cb\uff0c\u4f8b\u5982\u4e8b\u4ef6\u6a5f\u5236\uff1b
          • \u76e3\u63a7\u5404\u500b\u4f9d\u8cf4\u7684\u9023\u7dda\uff08\u8acb\u6c42\uff09\u6578\uff0c\u51fa\u554f\u984c\u53ef\u4ee5\u5feb\u901f\u5b9a\u4f4d\u3002
          \u95dc\u65bc\u9023\u7dda\u6c60

          \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

          "},{"location":"feedback/release-it/#\u5c01\u5305\u88ab\u4e1f\u68c4","title":"\u5c01\u5305\u88ab\u4e1f\u68c4","text":"

          \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

          • TCP keep-alive\uff0c\u6536\u4e0d\u5230\u5c01\u5305\u5c31\u91cd\u5efa\uff1b
          • \u4ee5 MongoDB \u70ba\u4f8b\uff0c\u5b83\u5c31\u6709 keep-alive \u9019\u500b\u6a5f\u5236\u7684\u9078\u9805\uff08\u9810\u8a2d\u6c92\u958b\uff09\uff1b
          • \u76e3\u63a7\u5404\u500b\u4f9d\u8cf4\u7684\u9023\u7dda\uff08\u8acb\u6c42\uff09\u6578\uff0c\u51fa\u554f\u984c\u53ef\u4ee5\u5feb\u901f\u5b9a\u4f4d\u3002
          "},{"location":"feedback/release-it/#\u884c\u70ba\u5806\u7a4d","title":"\u884c\u70ba\u5806\u7a4d","text":"

          \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

          • \u4f7f\u7528 \u8259\u58c1\u8a2d\u8a08\u539f\u5247\uff1b
          • Auto Scaling\uff1b
          • \u505a\u5b8c\u5584\u7684\u8ca0\u8f09\u6e2c\u8a66\u3002
          "},{"location":"feedback/release-it/#\u932f\u8aa4\u544a\u77e5\u7fa9\u52d9","title":"\u932f\u8aa4\u544a\u77e5\u7fa9\u52d9","text":"

          \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

          • \u6ce8\u610f\u9023\u7dda\u6c60\u4e2d\u7684\u9023\u7dda\u751f\u6ec5\u548c\u505c\u64fa\uff1b
          • \u660e\u78ba\u544a\u77e5\u8acb\u6c42\u65b9\uff0c\u5373\u4f7f\u91cd\u9001\u4e00\u6b21\uff0c\u9019\u500b\u8acb\u6c42\u4e5f\u4e0d\u6703\u88ab\u653e\u884c\uff1b
          • \u63d0\u65e9\u628a\u932f\u8aa4\u56de\u7d66\u8acb\u6c42\u7aef\uff0c\u907f\u514d\u52a0\u91cd\u5f8c\u7aef\u670d\u52d9\u7684\u8ca0\u8f09\uff0c\u4f8b\u5982\u9069\u61c9\u6027\u4e26\u884c\u8655\u7406
          "},{"location":"feedback/release-it/#session","title":"Session","text":"

          \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

          • \u5efa\u7f6e\u9632\u79a6 DDoS \u6a5f\u5236\uff1b
          • \u8b93\u524d\u7aef\uff08SPA \u6216 SSR\uff09\u900f\u904e JS \u9001\u8acb\u6c42\u4f86\u5efa\u7acb session\uff0c \u5c07\u4f4e\u975e\u4eba\u985e\u8acb\u6c42\u53bb\u5efa\u7acb session \u7684\u53ef\u80fd\uff1b
          • \u8259\u58c1\u8a2d\u8a08\u539f\u5247\uff0c\u907f\u514d\u670d\u52d9\u7684\u5931\u80fd\u3002
          "},{"location":"feedback/release-it/#\u670d\u52d9\u91cd\u555f\u5f8c\u7684\u8017\u80fd\u9ad8\u5cf0","title":"\u670d\u52d9\u91cd\u555f\u5f8c\u7684\u8017\u80fd\u9ad8\u5cf0","text":"

          \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

          • \u9010\u53f0\u958b\u6a5f\uff1b
          • \u63d2\u4e0a\u87ba\u7d72\u8d77\u5b50\u907f\u514d\u65b7\u8def\u5668\u8df3\u96fb\uff0c\u540c\u6642\u52a0\u5f37\u51b7\u6c23\u6a5f\u548c\u98a8\u6247\u907f\u514d\u904e\u71b1\u3002
          "},{"location":"feedback/release-it/#\u932f\u8aa4\u914d\u7f6e","title":"\u932f\u8aa4\u914d\u7f6e","text":"

          \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

          • \u975e\u9810\u671f\u6642\u9593\u964d\u8f09\u6642\uff0c\u901a\u77e5\u7ba1\u7406\u8005\uff1b
          • \u964d\u4f4e\u81ea\u52d5\u5316\u7684\u6b0a\u9650\uff0c\u4f8b\u5982\u505a\u5927\u898f\u6a21\u66f4\u52d5\u6642\uff0c\u9700\u8981\u624b\u52d5\u4ecb\u5165\uff1b
          • \u78ba\u4fdd\u670d\u52d9\u6709\u8db3\u5920\u6642\u9593\u6696\u8eab\uff0c\u4f8b\u5982\u5148\u505a\u597d\u5feb\u53d6\u3002
          "},{"location":"feedback/release-it/#\u8655\u7406\u975e\u9810\u671f\u7684\u5927\u91cf\u8cc7\u6599","title":"\u8655\u7406\u975e\u9810\u671f\u7684\u5927\u91cf\u8cc7\u6599","text":"

          \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

          • \u4e0d\u8981\u76f8\u4fe1\u6240\u6709\u5916\u90e8\u8cc7\u6599\uff1b
          • \u78ba\u4fdd\u9650\u5236\u61c9\u7528\u5c64\u5354\u5b9a\u50b3\u8f38\u7684\u5927\u5c0f\u3002
          "},{"location":"feedback/release-it/#\u5ffd\u7565\u61c9\u6ce8\u610f\u7684\u932f\u8aa4","title":"\u5ffd\u7565\u61c9\u6ce8\u610f\u7684\u932f\u8aa4","text":"

          \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

          • \u8b39\u8a18 Throw early, catch late \u539f\u5247\uff1b
          • \u9810\u5148\u8981\u5230\u61c9\u6709\u7684\u8cc7\u6e90\uff0c\u7576\u7121\u6cd5\u5f97\u5230\u6642\uff0c\u5c31\u5148\u4e1f\u932f\uff0c\u4e0d\u9032\u884c\u904b\u7b97\u3002
          "},{"location":"feedback/release-it/#\u8cc7\u6e90\u914d\u7f6e\u7684\u9ad8\u5ea6\u4f9d\u8cf4","title":"\u8cc7\u6e90\u914d\u7f6e\u7684\u9ad8\u5ea6\u4f9d\u8cf4","text":"

          \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

          • \u5206\u6563\u9023\u7dda\u6c60\u7d66\u4e0d\u540c\u670d\u52d9\uff1b
          • \u76e3\u63a7\u5404\u500b\u4f9d\u8cf4\u7684\u9023\u7dda\uff08\u8acb\u6c42\uff09\u6578\uff0c\u51fa\u554f\u984c\u53ef\u4ee5\u5feb\u901f\u5b9a\u4f4d\u3002
          "},{"location":"feedback/release-it/#\u4f4e\u4f30\u53ef\u80fd\u7684\u4f86\u6e90\u6578","title":"\u4f4e\u4f30\u53ef\u80fd\u7684\u4f86\u6e90\u6578","text":"

          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

          • \u641c\u5c0b\u5f15\u64ce\uff08\u4f8b\u5982 Google\uff09\u5c0e\u6d41\u9032\u4f86\u7684\u91cf\u7d04\u4f54\u56db\u6210\uff0c\u7136\u800c\u4ed6\u5011\u64c1\u6709\u7684\u7db2\u5740\u537b\u662f\u820a\u7684\u3002 \u9019\u6642\u4f7f\u7528\u8005\u9032\u4f86\u7684\u662f 404 \u7684\u756b\u9762\u3002\u4f46\u662f\uff01\u5b83\u4ecd\u7136\u6703\u5efa\u7acb session\u3002
          • \u641c\u5c0b\u5f15\u64ce\u6ce8\u610f\u5230 404 \u5f8c\uff0c\u958b\u59cb\u6e05\u9664\u5feb\u53d6\uff0c\u91cd\u65b0\u6d3e\u51fa\u722c\u87f2\u5c16\u5175\u53bb\u722c\u4f60\u7684\u7db2\u7ad9\uff0c\u52a0\u91cd\u8ca0\u64d4\u3002
          • \u7af6\u696d\u7684\u722c\u87f2\u4f86\u722c\u4f60\u7684\u8cc7\u6599\uff08\u4e3b\u8981\u662f\u7522\u54c1\u552e\u50f9\uff0c\u4ee5\u5229\u505a\u6bcf\u65e5\u7af6\u696d\u5831\u8868\uff09\u3002
          • \u9084\u6709\u5f88\u5927\u4e00\u90e8\u5206\u7684 session \u4e0d\u77e5\u5f9e\u4f55\u800c\u4f86\uff0c\u4f8b\u5982\u700f\u89bd\u5668\u7684\u5957\u4ef6\u932f\u8aa4\uff0c\u4f46\u5c31\u662f\u624b\u52d5\u628a\u5b83\u79fb\u9664\u3002 \u5c31\u7b97\u8b93\u4e00\u500b\u4f7f\u7528\u8005\u7684\u9ad4\u9a57\u5f88\u7cdf\uff0c\u7e3d\u597d\u904e\u8b93\u5927\u5bb6\u90fd\u4e0d\u80fd\u7528\u3002

          \u6211\u8a8d\u70ba\u4e8b\u4ef6\u4e3b\u8981\u6b78\u56e0\u65bc\u5e7e\u9ede\uff1a

          • \u7f3a\u4e4f\u9632\u885b\u6a5f\u5236\uff0c\u4f8b\u5982\u9069\u61c9\u6027\u4e26\u884c\u8655\u7406\uff1b
          • \u7f3a\u4e4f\u820a\u7db2\u7ad9\u7684\u4e26\u884c\uff0c\u4e26\u9010\u6f38\u5c0e\u6d41\uff1b
          • \u904e\u65bc\u5bec\u9b06\u7684 session \u5efa\u7acb\u6a5f\u5236\uff0c\u53ef\u4ee5\u8a66\u8457\u628a\u641c\u5c0b\u7d00\u9304\u653e\u5728 URL \u7684 query \u4e0a\u3002
          \u6211\u81ea\u5df1\u5f9e\u4e2d\u5ef6\u4f38\uff0c\u60f3\u505a\u7684\u4e8b

          \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

          • \u62d2\u7d55\u9023\u7dda\uff08\u9023\u7dda\u524d\u6216\u5f8c\uff09\uff0cTCP RST \u6216\u5176\u4ed6\u53ef\u80fd\uff1b
          • \u6392\u5f97\u9032\u5e8f\u5217\u88e1\uff0c\u4f46\u662f\u4e0d\u6703\u88ab\u5be6\u969b\u57f7\u884c\uff1b
          • \u53ea\u6703\u56de TCP SYN \u6216 ACK \u7684\u8a0a\u865f\uff1b
          • \u5efa\u7acb\u9023\u7dda\u5f8c\u4e0d\u9001\u4efb\u4f55\u8cc7\u6599\uff1b
          • \u5efa\u7acb\u9023\u7dda\u5f8c\u4e00\u76f4\u4e0d\u56de ACK\uff0c\u5c0e\u81f4\u4e00\u76f4\u91cd\u65b0\u767c\u9001\uff08retransmission\uff09\uff1b
          • \u53ea\u6703\u56de HTTP Header \u800c\u6c92\u6709 body\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

          • \u96fb\u8166\u548c\u7db2\u8def
          • \u55ae\u4e00\u7bc0\u9ede
          • \u53e2\u96c6
          • \u53e2\u96c6\u63a7\u5236\uff08\u6216\u8005 control plan\uff09
          • \u53e2\u96c6\u7ba1\u7406
          "},{"location":"feedback/release-it/#\u96fb\u8166\u548c\u7db2\u8def","title":"\u96fb\u8166\u548c\u7db2\u8def","text":"

          \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

          • \u7db2\u8def\uff1a\u5167\u5bb9\u5305\u62ec\u91d0\u6e05\u4e3b\u6a5f\u540d\uff08hostname\uff09\u3001IP \u7b49\u7b49\u3002
          • \u904b\u884c\u63a7\u5236\uff08runtime control\uff09\uff1a\u4ecb\u7d39\u5be6\u9ad4\u6a5f\u3001\u865b\u64ec\u6a5f\u3001\u5bb9\u5668\u3001\u96f2\u7aef\u7684\u5dee\u7570\u3002
          "},{"location":"feedback/release-it/#\u7db2\u8def","title":"\u7db2\u8def","text":"

          \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

          • Domain \u662f\u5916\u90e8\u7db2\u5740\uff0c\u900f\u904e DNS \u89e3\u6790 IP \u5f8c\u8def\u7531\u5230\u6307\u5b9a\u7bc0\u9ede\u7684\u540d\u7a31\uff1b
          • Hostname \u662f\u4e3b\u6a5f\u540d\u7a31\uff0c\u4e00\u53f0\u4e3b\u6a5f\u53ea\u6703\u6709\u4e00\u500b\u540d\u7a31\uff0c\u4f60\u53ef\u4ee5\u900f\u904e\u4e0b\u6307\u4ee4 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

          "},{"location":"feedback/release-it/#\u904b\u884c\u63a7\u5236","title":"\u904b\u884c\u63a7\u5236","text":"

          \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

          • \u5bb9\u5668\u9810\u671f\u662f\u5feb\u901f\u751f\u6ec5\u7684\uff0c\u670d\u52d9\u61c9\u8a72\u907f\u514d\u904e\u4e45\u7684\u555f\u52d5\u548c\u95dc\u9589\u3002
          • \u9664\u932f\u662f\u56f0\u96e3\u7684\uff0c\u5982\u679c\u4f60\u6709\u767c\u751f\u904e\u7dda\u4e0a\u554f\u984c\uff0c\u4f60\u6703\u767c\u73fe\u9032\u53bb\u5bb9\u5668\u5f8c\u7c21\u76f4\u4e00\u7c4c\u83ab\u5c55\uff0c \u56e0\u70ba\u88e1\u9762\u7684\u74b0\u5883\u4e7e\u6de8\u5230\u5f88\u96e3\u505a\u4e9b\u4ec0\u9ebc\u4e8b\u60c5\u3002
          • \u7db2\u8def\u662f\u8907\u96dc\u7684\uff0c\u7531\u65bc\u5728\u4e3b\u6a5f\u4e0a\u53c8\u642d\u8f09\u4e86\u5f88\u591a\u7db2\u8def\u6a4b\u63a5\uff08bridge\uff09\uff0c\u6709\u6642\u5c01\u5305\u7684\u6d41\u5411\u5f88\u96e3\u8ffd\u8e64\u3002

          \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

          • \u4f60\u7684\u865b\u64ec\u6a5f\u53ef\u80fd\u6703\u56e0\u70ba\u71df\u904b\u65b9\u7684\u7ba1\u7406\u56e0\u7d20\u88ab\u8981\u6c42\u91cd\u65b0\u555f\u52d5\u3002
          • \u5c31\u50cf\u5bb9\u5668\u4e00\u6a23\uff0c\u4f60\u5728\u96f2\u7aef\u4e0a\u7684\u6a5f\u5668\u4e0d\u6703\u6709\u56fa\u5b9a\u7684 IP\uff0c\u9664\u975e\u82b1\u9322\u53bb\u79df\u8cc3\u3002
          • \u901a\u5e38\u4e00\u53f0\u6a5f\u5668\u914d\u4e0a\u4e00\u500b\uff08\u865b\u64ec\uff09NIC\uff0c\u6240\u4ee5\u4f60\u53ea\u6703\u62ff\u5230\u4e00\u500b\u79c1\u6709 IP\uff0c\u4f46\u6709\u6642\u61c9\u7528\u7684\u9700\u6c42\u9700\u8981\u591a\u5f35 NIC\u3002

          \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

          • \u7a0b\u5f0f\u78bc\u8981\u653e\u5728\u7248\u672c\u63a7\u5236\uff08version control\uff09\u4e2d\uff0c\u5225\u585e\u6a5f\u654f\u8cc7\u8a0a\u3002
          • \u90e8\u7f72\u8981\u81ea\u52d5\u5316\uff0c\u4e26\u78ba\u4fdd\u4f9d\u8cf4\u548c\u63d2\u4ef6\u7684\u5b89\u5168\u6027\u3002
          • \u6bd4\u8d77\u904b\u884c\u63a7\u5236\u96a8\u8457\u6642\u9593\u6539\u8b8a\uff0c\u6bcf\u6b21\u6539\u8b8a\u90fd\u662f\u5f9e\u7279\u5b9a\u72c0\u614b\u5ef6\u4f38\uff0c\u66f4\u70ba\u5b89\u5168\u6709\u6548\uff1a
          • \u5c0f\u670d\u52d9\u8a2d\u5b9a\u6a94\u7528\u6ce8\u5165\uff08\u6a94\u6848\u6216\u74b0\u5883\u8b8a\u6578\uff09\uff1b \u5927\uff08\u591a\u500b\u5fae\uff09\u670d\u52d9\u53ef\u4ee5\u7528\u5c08\u9580\u670d\u52d9\u4f86\u66ff\u4ee3\uff08Consul\u3001ZooKeeper \u6216 etcd\uff09\u3002

          \u76e3\u63a7\u7e3d\u7d50\u5e7e\u9ede\u6ce8\u610f\uff1a

          • \u5728\u61c9\u7528\u8a2d\u8a08\u4e4b\u521d\u5c31\u8981\u5efa\u7acb\u65e5\u8a8c\uff08log\uff09\u3001\u6e2c\u5ea6\uff08metrics\uff09\u548c\u76e3\u63a7\uff08alert\uff09\u7684\u67b6\u69cb\u3002
          • \u907f\u514d\u65e5\u8a8c\u3001\u6e2c\u5ea6\u7684\u8f38\u51fa\u548c\u89c0\u6e2c\u4e4b\u9593\u7684\u8026\u5408\u5316\uff0c\u4e5f\u5c31\u662f\u5728\u8abf\u6574\u89c0\u6e2c\u6307\u6a19\u7684\u6642\u5019\uff0c\u4e0d\u9700\u8981\u6539\u61c9\u7528\u7a0b\u5f0f\u3002
          • \u5beb\u65e5\u8a8c\u662f\u6700\u76f4\u63a5\u89c0\u5bdf\u61c9\u7528\u7684\u884c\u70ba\u7684\u65b9\u5f0f\uff0c\u6709\u5e7e\u9ede\u6ce8\u610f\uff1a
          • \u65e5\u8a8c\u4f4d\u7f6e\u6700\u597d\u5728\u61c9\u7528\u7684\u4f4d\u7f6e\u4e4b\u5916\uff08/var/logs\uff09\uff0c\u5bb9\u5668\u7684\u8a71\u55ae\u7d14\u8f38\u51fa\u5230 stdout \u5c31\u53ef\u4ee5\u3002
          • \u4e0d\u8981\u8b93 error \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
          • \u5beb\u6e05\u695a\u4e00\u9ede\uff0c\u56e0\u70ba\u7dca\u6025\u72c0\u6cc1\u6703\u8b93\u5224\u65b7\u529b\u4e0b\u964d\u3002
          • \u540c\u4e00\u500b\u8acb\u6c42\u7684\u65e5\u8a8c\u8981\u6709 trace ID\uff08\u901a\u5e38\u8f03 correlation ID\uff09\u6a19\u793a\u3002
          • \u66b4\u9732\u5065\u5eb7\u6aa2\u67e5\u63a5\u53e3\uff0c\u5305\u62ec\u61c9\u7528\u7a0b\u5f0f\u7684\u9023\u7dda\u72c0\u6cc1\u3001IP\u3001\u7248\u672c\u8cc7\u8a0a\u3002
          "},{"location":"feedback/release-it/#\u53e2\u96c6","title":"\u53e2\u96c6","text":"

          \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

          • \u5e73\u8861\u8ca0\u8f09\u7684\u6f14\u7b97\u6cd5\u9078\u64c7\uff0c\u4f8b\u5982\u5faa\u74b0\u6bd4\u5c0d\uff08round robin\uff09\u3002
          • \u5982\u4f55\u6aa2\u67e5\u5404\u500b\u7bc0\u9ede\u662f\u5426\u6b63\u5e38\uff08health check\uff09\u3002
          • \u662f\u5426\u8981\u8b93\u7279\u5b9a\u4f7f\u7528\u8005\u9023\u5230\u7279\u5b9a\u7bc0\u9ede\uff0c\u5373\u6240\u8b02\u7684 sticky-session\u3002
          • \u7576\u670d\u52d9\u5931\u80fd\u6642\uff0c\u8981\u600e\u9ebc\u56de\u61c9\u3002

          \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

          "},{"location":"feedback/release-it/#\u8cc7\u6e90\u7684\u9700\u6c42\u63a7\u5236","title":"\u8cc7\u6e90\u7684\u9700\u6c42\u63a7\u5236","text":"

          \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

          • Socket \u6703\u88ab\u8017\u76e1\uff0c\u4e26\u9700\u8981\u7b49\u5f85\u820a\u7684\u88ab\u95dc\u9589 \uff08\u95dc\u9589\u524d\u6703\u9700\u8981\u9032\u5165 TIME_WAIT \u72c0\u614b\uff09\u3002
          • \u4e00\u90e8\u5206\u5c01\u5305\u7b49\u5f85\u8457\u5176\u4ed6\u5c01\u5305\u9032\u4f86\uff0c\u9019\u6642\u8a18\u61b6\u9ad4\u5c31\u6703\u88ab\u9019\u4e9b\u4e0d\u5b8c\u6574\u7684\u5c01\u5305\u4f54\u7528\uff0c \u7a31\u9019\u7a2e\u73fe\u8c61\u70ba\u968a\u982d\u963b\u585e\u3002
          • \u4ee5 TCP \u70ba\u4f8b\uff0c\u5efa\u7acb\u9023\u7dda\u524d\u6703\u9032\u5165 listen 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

          • \u8def\u7531\uff0c\u8def\u7531\u662f\u7db2\u8def\u4e16\u754c\u6700\u8907\u96dc\u7684\u4e00\u584a\uff0c\u4e0d\u662f\u4e09\u8a00\u5169\u8a9e\u8aaa\u5f97\u76e1 \uff08\u7576\u7136\u6709\u5f88\u591a\u76f8\u95dc\u7684\u66f8\uff09\u3002
          • \u96a8\u8457\u7bc0\u9ede\u7684\u589e\u52a0\uff0c\u9700\u8981\u7dad\u8b77\u8def\u7531\u8868\uff0c\u4e0d\u7ba1\u9019\u500b\u8def\u7531\u8868\u662f\u8cc7\u6599\u5eab\u6216\u662f\u4e00\u500b\u8868\u683c\u3002
          • \u8fd1\u671f\u4e5f\u6162\u6162\u8208\u8d77\u5168\u90e8\u7531\u8edf\u9ad4\u63a7\u5236\u7684\u67b6\u69cb\uff0c
          • \u4f8b\u5982\u865b\u64ec\u4ea4\u63db\u5668\u3001 K8s\u3001 VLAN tagging \u7b49\u3002
          • \u9019\u4e9b\u8def\u7531\u8a2d\u5b9a\u5305\u62ec\u55ae\u4e00\u7bc0\u9ede\u6709\u591a\u500b\u51fa\u8def\u53e3\uff08\u4e00\u500b\u7d66\u670d\u52d9\u3001\u4e00\u500b\u7d66\u7dad\u904b\u7b49\u7b49\uff09\u7684\u8907\u96dc\u72c0\u6cc1\u3002
          • \u670d\u52d9\u767c\u73fe\uff0c\u6bcf\u500b\u63d0\u4f9b\u9019\u500b\u6a5f\u5236\u7684\u8edf\u9ad4\uff08ZooKeeper\u3001etcd \u7b49\u7b49\uff09\u90fd\u6709\u81ea\u5df1\u7684\u6b0a\u8861\u6a5f\u5236\uff0c \u9069\u5408\u4e0d\u540c\u5834\u666f\uff0c\u4e0d\u8981\u8a8d\u70ba\u9019\u4e9b\u8edf\u9ad4\u90fd\u662f\u4e00\u6a23\u7684\u3002
          • VIP \u7684\u8f49\u63db\uff0c\u8ca0\u8f09\u5668\u6703\u900f\u904e VIP \u4f86\u6307\u5b9a\u670d\u52d9\u8981\u8d70\u7684\u7bc0\u9ede\uff08HA, active/standby \u7684\u6a5f\u5236\uff09\uff0c \u9019\u6642\u8981\u6ce8\u610f\uff0c\u7576 VIP \u9032\u884c\u5207\u63db\u6642\uff0c\u6bcf\u500b TCP \u9023\u7dda\u90fd\u53ef\u80fd\u5728\u50b3\u905e\u4e0b\u4e00\u500b\u5c01\u5305\u6642\u5931\u80fd\uff0c \u5305\u62ec\u90a3\u4e9b\u91cd\u8981\u7684\u8cc7\u6599\u5eab\u9023\u7dda\u3002
          "},{"location":"feedback/release-it/#\u53e2\u96c6\u7ba1\u7406","title":"\u53e2\u96c6\u7ba1\u7406","text":"

          \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\u4f8b

          AWS 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

          • \u6587\u4e2d\u5f9e\u6c92\u51fa\u73fe\u300c\u4eba\u70ba\u932f\u8aa4\u300d\u9019\u985e\u76f8\u95dc\u8a0a\u606f\uff0c\u56e0\u70ba\u4eba\u985e\u72af\u932f\u662f\u53ef\u4ee5\u88ab\u9810\u671f\u548c\u63a5\u53d7\u7684\uff0c \u8eab\u70ba\u4e00\u500b\u7ba1\u7406\u5de5\u5177\u537b\u6c92\u80fd\u611f\u77e5\u5230\u9019\u4ef6\u4e8b\u60c5\uff0c\u6240\u4ee5\u6587\u4e2d\u5f37\u8abf\u7684\u662f\u7ba1\u7406\u5de5\u5177\u7684\u5931\u80fd\u3002
          • \u64cd\u4f5c\u6307\u5357\u4ee3\u8868\u4ee5\u524d\u6709\u4eba\u7167\u8457\u9019\u4e9b\u6307\u4ee4\u57f7\u884c\uff0c\u4f46\u662f\u70ba\u4ec0\u9ebc\u4ee5\u524d\u6c92\u6709\u767c\u751f\u610f\u5916\uff1f \u6211\u5011\u5e38\u5e38\u6aa2\u8996\u90a3\u4e9b\u5931\u6557\u7684\u6848\u4f8b\uff0c\u4f46\u6211\u5011\u4e5f\u53ef\u4ee5\u53bb\u6aa2\u8996\u90a3\u4e9b\u6210\u529f\u7684\u6848\u4f8b\u3002 \u4f8b\u5982\u4e4b\u524d\u6709\u4eba\u4e5f\u5beb\u932f\u904e\uff0c\u4f46\u4ed6\u5728\u63d0\u4ea4\u524d\u7684\u67d0\u500b\u6d41\u7a0b\u4e2d\u6709\u5176\u4ed6\u4eba\u5be9\u6838\u51fa\u4f86\u4e86\uff0c\u8a72\u600e\u9ebc\u5f37\u5316\u9019\u4e9b\u6d41\u7a0b\uff1f
          • \u81ea\u52d5\u5316\u7684\u53cd\u61c9\u662f\u5feb\u901f\u7684\uff0c\u5728\u5c4d\u6aa2\u5831\u544a\u4e2d AWS \u6700\u7d42\u964d\u4f4e\u4e86\u79fb\u9664\u7bc0\u9ede\u7684\u901f\u5ea6\u548c\u589e\u52a0\u4e00\u4e9b\u4fdd\u5b89\u7cfb\u7d71 \uff08\u7576\u6e1b\u5c11\u7684\u91cf\u4f4e\u65bc\u7cfb\u7d71\u7576\u524d\u627f\u8f09\u7684\u91cf\u6642\u63d0\u51fa\u8b66\u544a\uff09\u3002

          \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

          • \u662f\u5426\u7d66\u670d\u52d9\u4f7f\u7528\u8005\uff08\u4e0d\u662f\u670d\u52d9\u958b\u767c\u8005\uff09\u5e36\u4f86\u597d\u7684\u9ad4\u9a57
          • \u80fd\u5426\u66ff\u516c\u53f8\u8cfa\u9322\uff08\u7701\u9322\uff09

          \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

          • \u670d\u52d9\u7684\u74f6\u9838\uff08bottleneck\uff09\uff0c\u4f8b\u5982\u6700\u5e38\u7528\u7684\u8acb\u6c42\u662f\u4ec0\u9ebc\uff0c \u53ef\u4ee5 cache \u55ce\uff1f\u9a57\u8b49\u6388\u6b0a\u908f\u8f2f\u53ef\u4ee5 wildcard \u55ce\uff1f
          • \u9023\u7dda\u662f\u5426\u6709\u4f47\u5217\u6392\u968a\u73fe\u8c61\uff1f
          • \u524d\u7aef\u4f7f\u7528\u7684\u9023\u7dda\u884c\u70ba\u662f\u5426\u904e\u5ea6\u58c5\u585e\uff1f

          \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

          • \u958b\u767c\u4eba\u54e1\u53ef\u80fd\u60f3\u770b\u65e5\u8a8c\uff0c\u6aa2\u67e5\u5947\u602a\u7684\u7a0b\u5f0f\u884c\u70ba\uff1b
          • \u5206\u6790\u4eba\u54e1\u53ef\u80fd\u60f3\u770b\u6307\u6a19\uff0c\u66b8\u89e3\u4f7f\u7528\u8005\u6574\u9ad4\u7684\u884c\u70ba\uff1b
          • \u5c08\u6848\u7684\u7ba1\u7406\u4eba\u54e1\u53ef\u80fd\u60f3\u770b\u529f\u80fd\u7684\u4f7f\u7528\u72c0\u6cc1\u3002

          \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

          • \u6d41\u91cf\uff0c\u8acb\u6c42\u6578\u3001\u4f75\u884c\u6578\u3002
          • \u4f7f\u7528\u8005\uff0c\u767b\u5165\u5931\u6557\u3001\u5728\u7dda\u6578\u3002
          • \u5546\u52d9\u908f\u8f2f\uff0c\u6210\u4ea4\u6578\u3001\u5165\u5e33\u984d\u3002
          • \u8cc7\u6599\u5eab\uff0c\u9023\u7dda\u3001\u8acb\u6c42\u5931\u6557\u6578\u3001\u56de\u61c9\u6642\u9593\u3002
          • \u904b\u7b97\u8cc7\u6e90\uff0c\u9023\u7dda\u6c60\u3001\u7dda\u7a0b\u6c60\u3001\u963b\u585e\u72c0\u614b\u3002
          • \u5132\u5b58\u8cc7\u6e90\uff0c\u8a18\u61b6\u9ad4\u3001\u5feb\u53d6\u3002

          \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

          • \u7576\u7d44\u614b\u670d\u52d9\u5931\u80fd\u6642\uff0c\u61c9\u7528\u7a0b\u5f0f\u548c\u7bc0\u9ede\u61c9\u8a72\u8981\u53ef\u4ee5\u6b63\u5e38\u904b\u4f5c\uff08\u4f46\u662f\u65b0\u7684\u61c9\u7528\u7a0b\u5f0f\u8981\u90e8\u7f72\u53ef\u80fd\u6703\u5931\u6557\uff09\u3002
          • \u78ba\u4fdd\u7d44\u614b\u670d\u52d9\u6c92\u6709\u80fd\u529b\u53ef\u4ee5\u5feb\u901f\u7d42\u7d50\u5927\u91cf\u7bc0\u9ede\u7684\u80fd\u529b\u3002
          • \u8cc7\u6599\u8981\u5099\u4efd\u3002

          \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

          "},{"location":"feedback/release-it/#\u5373\u6642\u63a7\u5236\u4f60\u7684\u61c9\u7528\u7a0b\u5f0f","title":"\u5373\u6642\u63a7\u5236\u4f60\u7684\u61c9\u7528\u7a0b\u5f0f","text":"

          \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

          • \u91cd\u7f6e\u8ff4\u5708\uff1b
          • \u8abf\u6574\u9023\u7dda\u6c60\u7684\u6578\u91cf\u548c\u903e\u6642\u6642\u9593\uff1b
          • \u66ab\u505c\u548c\u67d0\u500b\u670d\u52d9\u7684\u9023\u7dda\uff1b
          • \u91cd\u65b0\u8b80\u53d6\u8a2d\u5b9a\u6a94\uff1b
          • \u67d0\u500b\u529f\u80fd\u7684\u958b\u95dc\uff1b
          • \u958b\u59cb\u3001\u95dc\u9589\u5c0d\u5916\u670d\u52d9\u3002

          \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

          • \u516c\u53f8\u5c64\u7d1a
          • \u670d\u52d9\u5c64\u7d1a
          • \u8cc7\u6599\u5c64\u7d1a
          "},{"location":"feedback/release-it/#\u516c\u53f8\u5c64\u7d1a\u7684\u67b6\u69cb","title":"\u516c\u53f8\u5c64\u7d1a\u7684\u67b6\u69cb","text":"

          \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

          • \u64c1\u6709\u67b6\u69cb\u5718\u968a\uff08DevOps\uff09\uff0c\u9019\u500b\u5718\u968a\u9700\u8981\u5c0d\u670d\u52d9\u67b6\u69cb\u6e05\u695a\uff0c\u53ef\u5177\u6709\u6559\u80b2\u610f\u7fa9\u7684\u5718\u968a\u3002
          • \u7121\u75db\u767c\u5e03\uff0c\u4e00\u6b21\u5927\u7684\u767c\u4f48\u6bd4\u4e0d\u4e0a\u591a\u500b\u5c0f\u7684\u767c\u4f48\u3002
          • \u4e0d\u8981\u5efa\u7acb\u592a\u5927\u7684\u5718\u968a\uff0c\u5718\u968a\u518d\u5927\u4e5f\u53ea\u9700\u8981\u5169\u500b\u62ab\u85a9\u5c31\u80fd\u9935\u98fd\uff0c\u9ebb\u96c0\u96d6\u5c0f\u4e94\u81df\u4ff1\u5168\u7684\u6982\u5ff5\u3002
          • \u6548\u7387\u7684\u6289\u64c7\uff0c\u5927\u5bb6\u53ef\u80fd\u6703\u89ba\u5f97\u6548\u7387\u8d8a\u9ad8\u8d8a\u597d\uff0c\u4f46\u662f\u9ad8\u6548\u7387\u901a\u5e38\u4ee3\u8868\u4f4e\u9748\u6d3b\u6027\uff0c\u9019\u662f\u9700\u8981\u53d6\u6368\u7684\u3002 \u4f8b\u5982\u6c7d\u8eca\u5de5\u5ee0\u6a5f\u68b0\u7684\u9ad8\u6548\u7387\u4f4e\u5f48\u6027\uff0c\u5c0d\u6bd4\u65bc\u6280\u5e2b\u7684\u4f4e\u6548\u7387\u9ad8\u5f48\u6027\u3002

          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

          • \u5fae\u670d\u52d9\uff0c\u66f8\u7a2e\u4ee5 Design Rules \u70ba\u539f\u5247\uff0c \u95e1\u8ff0\u516d\u7a2e\u6a21\u7d44\u5316\u8a2d\u8a08\u539f\u5247\u3002
          • \u8a0a\u606f\u4f47\u5217\uff0c\u9ad8\u5f48\u6027\u4f46\u662f\u9664\u932f\u8f03\u96e3\uff0c\u4e14\u9700\u8981\u601d\u60f3\u4e0a\u7684\u8f49\u8b8a\u3002
          • \u5d4c\u5165\u5f0f\u64f4\u5145\uff0c\u9069\u5408\u55ae\u4e00\u670d\u52d9\u7684\u64f4\u5145\u3002
          "},{"location":"feedback/release-it/#\u8cc7\u6599\u5c64\u7d1a\u7684\u67b6\u69cb","title":"\u8cc7\u6599\u5c64\u7d1a\u7684\u67b6\u69cb","text":"

          \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\uff09

          Virtual 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

          • \u7528\u4f5c\u55ae\u4e00\u670d\u52d9\u591a\u500b\u7bc0\u9ede\u7684\u552f\u4e00\u8def\u53e3\uff0c
          • HA \u6a5f\u5236\uff0c
          • \u55ae\u7d14\u5728\u79c1\u6709\u7db2\u8def\u906e\u7f69\u4e0b\u7684 IP \u5206\u914d\u3002

          \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

          • \u5728\u528d\u6a4b\u5927\u5b78\u64d4\u4efb\u8cc7\u6df1\u7814\u7a76\u54e1\uff0c\u4e26\u65bc\u7814\u7a76\u6240\u6559\u6388 \u5206\u6563\u5f0f\u7cfb\u7d71\u3002
          • \u7d93\u71df\u4e00\u500b\u8d85\u8b9a\u7684\u90e8\u843d\u683c\u3002
          • \u591a\u9805\u958b\u6e90\u8edf\u9ad4\uff0c\u5305\u62ec Automerge\uff0c Apache Avro \u548c Apache Samza \u7b49\u3002
          • \u5275\u7acb\u5169\u5bb6\u516c\u53f8\u5206\u5225\u65bc 2009 \u88ab Red Gate Software \u548c 2012 \u88ab LinkedIn \u6536\u8cfc

          Table of contents

          1. Foundation of Data Systems
            1. Reliable, Scalable, and Maintainable Applications\u301034\u30111
            2. Data Models and Query Languages\u301049\u3011
            3. Storage and Retrieval\u301064\u3011
            4. Encoding and Evolution\u301054\u3011
          2. Distributed Data
            1. Replication\u301061\u3011
            2. Partitioning\u301033\u3011
            3. Transactions\u301054\u3011
            4. The Trouble with Distributing Systems\u301095\u3011
            5. Consistency and Consensus\u3010110\u3011
          3. Derived Data
            1. Batch Processing\u301081\u3011
            2. Stream Processing\u3010100\u3011
            3. The Future of Data Systems\u3010114\u3011

          \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

          1. \u77e5\u8b58\u53ca\u529b\u91cf\u3001\u904b\u7528\u8cc7\u6599\u64f4\u5c55\u4f01\u696d\u6d1e\u5bdf\u529b\u548c\u6c7a\u7b56\u6b0a\uff1b
          2. \u5c07\u8cc7\u6599\u5927\u773e\u5316\uff0c\u5efa\u7acb\u5b89\u5168\u7cfb\u7d71\u4f86\u6536\u96c6\u3001\u5132\u5b58\u53ca\u8655\u7406\u8cc7\u6599\uff0c\u63d0\u4f9b\u7d66\u9700\u8981\u7684\u4eba\u54e1\u548c\u61c9\u7528\u7a0b\u5f0f\uff1b
          3. \u4ee5\u5275\u65b0\u65b9\u5f0f\u8b93\u8cc7\u6599\u767c\u63ee\u529f\u7528\uff1a\u8cc7\u6599\u79d1\u5b78\u3001\u6a5f\u5668\u5b78\u7fd2\u3002
          "},{"location":"feedback/designing-data-intensive-applications/#\u5831\u544a\u9032\u7a0b","title":"\u5831\u544a\u9032\u7a0b","text":"

          \u5206\u6210\u4e09\u5927\u584a\uff1a

          • \u57fa\u790e\uff1a\u6a21\u578b\u3001\u8cc7\u6599\u5eab\u5e95\u5c64\u4f5c\u7528\u7b49\uff1b
          • \u5206\u6563\u5f0f\uff1a\u591a\u53f0\u8cc7\u6599\u5eab\u4e4b\u9593\u7684\u8907\u88fd\u548c\u5206\u5340\uff1b
          • \u5ef6\u4f38\uff1a\u591a\u7a2e\u985e\u7684\u8cc7\u6599\u5eab\u9593\u7684\u6e9d\u901a\u3002
          "},{"location":"feedback/designing-data-intensive-applications/#\u8cc7\u6599\u6a21\u578b\u548c\u8a9e\u6cd5","title":"\u8cc7\u6599\u6a21\u578b\u548c\u8a9e\u6cd5","text":"

          \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

          • \u95dc\u806f\u5f0f\u6a21\u578b v.s. \u6587\u4ef6\u5f0f\u6a21\u578b
          • \u5716\u50cf\u5f0f\u6a21\u578b
          • \u641c\u5c0b\u8a9e\u8a00
          "},{"location":"feedback/designing-data-intensive-applications/#\u7d22\u5f15","title":"\u7d22\u5f15","text":"

          \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

          • \u6563\u5217\u5f0f\u7d22\u5f15
          • \u6392\u5e8f\u5b57\u4e32\u8868
          • B \u6a39
          • \u6b21\u7d1a\u7d22\u5f15
          • \u591a\u6b04\u4f4d\u7d22\u5f15\u3001\u6a21\u7cca\u7d22\u5f15\u3001\u5b8c\u5168\u5167\u5b58
          "},{"location":"feedback/designing-data-intensive-applications/#\u8cc7\u6599\u5009\u5132","title":"\u8cc7\u6599\u5009\u5132","text":"

          \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

          • OLTP \u548c OLAP
          • \u5217\u5f0f\u8cc7\u6599\u5eab
          • \u7279\u6b8a\u7db1\u76ee
          • \u58d3\u7e2e
          "},{"location":"feedback/designing-data-intensive-applications/#\u7de8\u78bc\u548c\u9032\u7a0b","title":"\u7de8\u78bc\u548c\u9032\u7a0b","text":"

          \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

          • \u7a0b\u5f0f\u7de8\u78bc\u3001\u8de8\u8a9e\u8a00\u7de8\u78bc
          • \u4e8c\u9032\u4f4d\u7de8\u78bc
          • \u4f7f\u7528\u5834\u666f
          • \u900f\u904e\u8cc7\u6599\u5eab
          • REST \u548c RPC
          • \u975e\u540c\u6b65\u8a0a\u606f\u50b3\u905e
          "},{"location":"feedback/designing-data-intensive-applications/#\u8655\u7406\u7af6\u8cfd\u60c5\u6cc1","title":"\u8655\u7406\u7af6\u8cfd\u60c5\u6cc1","text":"

          \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

          • \u9694\u96e2\u6027\u3001\u5bb9\u932f\u6027\u3001\u4e00\u81f4\u6027
          • \u4ea4\u6613
          • \u7af6\u8cfd\u72c0\u6cc1
          • \u4f7f\u7528\u63d0\u4ea4\u5f8c\u7684\u8cc7\u6599
          • \u5feb\u7167\u9694\u96e2
          • \u5beb\u5165\u504f\u659c
          • \u5e8f\u5217\u5316
          • \u5be6\u969b\u5e8f\u5217\u5316
          • \u5169\u968e\u6bb5\u9396
          • \u5e8f\u5217\u5316\u5feb\u7167
          "},{"location":"feedback/designing-data-intensive-applications/#\u5206\u6563\u5f0f\u8cc7\u6599\u5eab\u8907\u88fd","title":"\u5206\u6563\u5f0f\u8cc7\u6599\u5eab\u2014\u8907\u88fd","text":"

          \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

          • \u964d\u4f4e\u8ca0\u8f09
          • \u9ad8\u53ef\u7528\u6027\uff08High Availability\uff09
          • \u62c9\u8fd1\u548c\u670d\u52d9\u8acb\u6c42\u7684\u8ddd\u96e2\uff08Geographically Close\uff09

          \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

          • \u6709\u4ec0\u9ebc\u65b9\u5f0f\uff1f
          • \u55ae\u4e00\u9818\u8896
          • \u591a\u9818\u8896
          • \u7121\u9818\u8896(Dynamo-style)
          • \u6b0a\u8861
          • \u540c\u6b65 v.s. \u7570\u6b65
          • \u4e00\u81f4\u6027 v.s. \u53ef\u7528\u6027
          "},{"location":"feedback/designing-data-intensive-applications/#\u5206\u6563\u5f0f\u8cc7\u6599\u5eab\u5206\u5340","title":"\u5206\u6563\u5f0f\u8cc7\u6599\u5eab\u2014\u5206\u5340","text":"

          \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

          • \u4e09\u5927\u554f\u984c
          • \u8981\u600e\u9ebc\u5206\u5340
          • \u8981\u600e\u9ebc\u8def\u7531
          • \u8981\u600e\u9ebc\u5e73\u8861
          • \u5982\u4f55\u6574\u5408\u4e0d\u540c\u5206\u5340\u7684\u8cc7\u6599
          • \u6b21\u7d22\u5f15
          "},{"location":"feedback/designing-data-intensive-applications/#\u5206\u6563\u5f0f\u7cfb\u7d71\u7684\u74b0\u5883","title":"\u5206\u6563\u5f0f\u7cfb\u7d71\u7684\u74b0\u5883","text":"

          \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

          • \u4e09\u5927\u554f\u984c
          • \u7db2\u969b\u7db2\u8def
          • \u7576\u65e5\u6642\u9418
          • \u57f7\u884c\u7dd2\u5ef6\u5b95
          "},{"location":"feedback/designing-data-intensive-applications/#\u5206\u6563\u5f0f\u7cfb\u7d71\u7684\u5bb9\u932f","title":"\u5206\u6563\u5f0f\u7cfb\u7d71\u7684\u5bb9\u932f","text":"

          \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

          • \u4e09\u500b\u7cfb\u7d71
          • \u7dda\u6027\u7cfb\u7d71
          • \u56e0\u679c\u95dc\u4fc2
          • \u5171\u8b58
          • \u5168\u57df\u9806\u5e8f\u5ee3\u64ad

          \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

          • Unix \u5de5\u5177\u7684\u54f2\u5b78
          • MapReduce on Hadoop
          • \u8cc7\u6599\u6d41\u5f15\u64ce
          "},{"location":"feedback/designing-data-intensive-applications/#\u4e32\u6d41\u8655\u7406","title":"\u4e32\u6d41\u8655\u7406","text":"

          \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

          • \u5982\u4f55\u5feb\u53d6\u6bcf\u7bc7\u8cbc\u6587\u7684\u7e3d\u6309\u8b9a\u6578\uff1f
          • \u90e8\u5206\u6309\u8b9a\u4eba\u7684\u540d\u5b57\u662f\u91dd\u5c0d\u4f60\u53ef\u80fd\u8a8d\u8b58\u7684\u4eba\u505a\u986f\u793a\uff0c\u4eca\u5929\u6709\u4e00\u500b\u4f60\u8a8d\u8b58\u7684\u670b\u53cb\u6309\u8a72\u8cbc\u6587\u300c\u8b9a\u300d\uff0c\u5982\u4f55\u5feb\u901f\u4e14\u6709\u6548\u7387\u5730\u8b93\u8a8d\u8b58\u8a72\u6309\u8b9a\u4eba\u5728\u986f\u793a\u8a72\u8cbc\u6587\u7684\u6642\u5019\u80fd\u986f\u793a\u5176\u540d\u5b57\uff1f
          • Change Data Capture(CDC)
          • Event Sourcing
          • \u4e2d\u4ecb\u8005\u3001\u65e5\u8a8c\u578b\u4e2d\u4ecb\u8005
          "},{"location":"feedback/designing-data-intensive-applications/#\u7e3d\u7d50\u548c\u6574\u5408","title":"\u7e3d\u7d50\u548c\u6574\u5408","text":"

          \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

          • \u529f\u80fd\u6027\u9700\u6c42\uff0c\u4f8b\u5982\uff1a\u5141\u8a31\u5b58\u53d6\u8cc7\u6599\u3001\u641c\u5c0b\u7b49\u7b49\u3002
          • \u975e\u529f\u80fd\u6027\u9700\u6c42\uff0c\u4f8b\u5982\uff1a
          • \u5b89\u5168\u6027\uff08security\uff09
          • \u53ef\u9760\u6027\uff08reliability\uff09
          • \u9806\u5f9e\u6027\uff08compliant with a standard or a spec\uff09
          • \u5ef6\u5c55\u6027\uff08scalability\uff09
          • \u76f8\u5bb9\u6027\uff08compatible with a piece of hardware or software\uff09
          • \u7dad\u8b77\u6027\uff08maintainability\uff09
          "},{"location":"feedback/designing-data-intensive-applications/#\u53ef\u9760\u6027","title":"\u53ef\u9760\u6027","text":"

          \u7576\u670d\u52d9\u767c\u751f\u72c0\u6cc1\u6642\uff0c\u4ecd\u7136\u80fd\u6b63\u78ba\u904b\u884c\u3002\u72c0\u6cc1\u53ef\u80fd\u70ba

          • \u786c\u9ad4\uff0c\u901a\u5e38\u662f\u7121\u76f8\u95dc\u6027\u4e14\u96a8\u6a5f\u7684
          • \u8edf\u9ad4\uff0c\u901a\u5e38\u662f\u7cfb\u7d71\u6027\u7684\u4e14\u96e3\u4ee5\u89e3\u6c7a
          • \u4eba\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

          1. \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

          2. \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

          3. \u5728\u4e0d\u8003\u616e\u62dc\u5360\u5ead\u932f\u8aa4\u4e0b\u3002\u00a0\u21a9

          4. \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

          "},{"location":"feedback/designing-data-intensive-applications/derived-batch/","title":"\u884d\u751f\u8cc7\u6599\u2014\u6279\u6b21\u8655\u7406","text":"

          \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

          • \u539f\u59cb\u8cc7\u6599\uff08Source Of Truth, SOT, Systems Of Record)\uff0c\u4f7f\u7528\u8005\u8f38\u5165\u7684\u8cc7\u6599\uff0c\u4f8b\u5982\u8a55\u8ad6\u3001\u500b\u8cc7\u7b49\u7b49
          • \u884d\u751f\u8cc7\u6599\uff08Derived Data\uff09\uff0c\u5229\u7528\u539f\u59cb\u8cc7\u6599\u7522\u751f\u7684\u8cc7\u6599\uff0c\u4f8b\u5982\u63a8\u85a6\u6587\u7ae0\u3001\u5feb\u53d6\u7b49\u7b49

          \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

          • \u670d\u52d9\u8655\u7406\u5c31\u662f\u6211\u5011\u5148\u524d\u770b\u5230\u7684\u61c9\u7528\u7a0b\u5f0f\u548c\u8cc7\u6599\u5eab\uff08\u6216\u548c\u5176\u4ed6\u670d\u52d9\uff09\u7684\u6e9d\u901a\uff1a\u9001\u51fa\u8acb\u6c42\uff08request\uff09\u5f97\u5230\u56de\u61c9\uff08response\uff09\u3002
          • \u6279\u6b21\u8655\u7406\u6982\u5ff5\u5c31\u662f\u628a\u5b8c\u6574\u7684\u5de5\u4f5c\u62c6\u5206\u6210\u300c\u6279\u6b21\u300d\uff08batch\uff09\uff0c\u4e26\u628a\u6bcf\u500b\u5c0f\u4efd\u7684\u5de5\u4f5c\u4e1f\u7d66\u4e0d\u540c\u7bc0\u9ede\u8655\u7406\uff0c\u6700\u5f8c\u518d\u6574\u5408\u8d77\u4f86\u3002\u807d\u8d77\u4f86\u548c\u6211\u5011\u4e4b\u524d\u8a0e\u8ad6\u7684\u5206\u6563\u5f0f\u8cc7\u6599\u5eab\u7684\u5206\u5340\u5f88\u50cf\uff0c\u4e8b\u5be6\u4e0a\u9019\u5169\u500b\u6771\u897f\u53ef\u4ee5\u8aaa\u662f\u76f8\u8f14\u76f8\u6210\uff0c\u5206\u5340\u4e0b\u7684\u4e26\u884c\u904b\u7b97\u7a31\u70ba MPP\uff08Massive Parallel Processing\uff09\u9019\u5169\u8005\u5df2\u7d93\u8d8a\u4f86\u8d8a\u50cf\uff0c\u4e92\u76f8\u5b78\u7fd2\u8457\uff0c\u5f85\u6703\u6703\u8a0e\u8ad6\u5230\u3002
          • \u4e32\u6d41\u8655\u7406\u5247\u662f\u628a\u8acb\u6c42\u7684\u6982\u5ff5\u8f49\u6210\u300c\u4e8b\u4ef6\u300d\uff08event\uff09\uff0c\u6bcf\u6b21\u4e8b\u4ef6\u89f8\u767c\u90fd\u6703\u5f15\u8d77\u4e00\u7cfb\u5217\u7684\u7570\u52d5\uff0c\u800c\u9019\u500b\u7570\u52d5\u53ef\u80fd\u662f\u5728\u591a\u500b\u4e0d\u540c\u7684\u7bc0\u9ede\uff0c\u53ea\u8981\u9019\u4e9b\u7bc0\u9ede\u6709\u5728\u300c\u76e3\u807d\u300d\uff08\u6d88\u5316\uff09\u9019\u500b\u4e8b\u4ef6\u3002

          \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

          "},{"location":"feedback/designing-data-intensive-applications/derived-batch/#\u627e\u6700\u4f4e\u7684\u6f5b\u6642latency","title":"\u627e\u6700\u4f4e\u7684\u6f5b\u6642\uff08latency\uff09","text":"
          # \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

          • \u8b93\u5404\u500b\u5de5\u5177\u505a\u597d\u81ea\u5df1\u7684\u4e8b\uff0c\u7576\u6709\u5176\u4ed6\u529f\u80fd\u7684\u9700\u6c42\u6642\uff0c\u518d\u589e\u52a0\u4e00\u500b\u5de5\u5177\u5427\uff01
          • \u628a\u8f38\u51fa\u8a2d\u8a08\u6210\u5176\u4ed6\u5de5\u5177\u53ef\u4ee5\u62ff\u4f86\u7528\u505a\u8f38\u5165\uff0c\u907f\u514d\u5728\u8f38\u51fa\u4e2d\u589e\u52a0\u7121\u8b02\u7684\u8cc7\u8a0a
          • \u6700\u597d\u5728\u6578\u9031\u5167\u5b8c\u6210\u8a2d\u8a08\u4e26\u5be6\u4f5c\u4e00\u500b\u5de5\u5177\uff0c\u518d\u6301\u7e8c\u88dc\u5f37
          • \u76e1\u91cf\u4f7f\u7528\u5de5\u5177\uff08\u5957\u4ef6\uff09\u4f86\u6e1b\u8f15\u958b\u767c\u8ca0\u64d4

          \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

          • STDIN
          • STDOUT
          • STDERR

          \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

          "},{"location":"feedback/designing-data-intensive-applications/derived-batch/#\u7ba1\u7dda\u7684\u5f37\u5927","title":"\u7ba1\u7dda\u7684\u5f37\u5927","text":"

          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 myProcess
          import 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
          1. Python \u5f88\u9069\u5408\u81ea\u5df1\u8a2d\u8a08\u5c0f\u5de5\u5177\uff0c\u7576\u4f60\u628a\u4e0a\u8ff0\u7a0b\u5f0f\u78bc\u5beb\u597d\u4e4b\u5f8c\uff0c\u4f60\u5c31\u53ef\u4ee5 pip install -e $LIB_FOLDER \u4f86\u7522\u751f\u81ea\u5df1\u7684\u5de5\u5177\u4e86\u3002
          "},{"location":"feedback/designing-data-intensive-applications/derived-batch/#\u7f3a\u9ede","title":"\u7f3a\u9ede","text":"

          \u7576\u7136 GNU Coreutils \u9084\u662f\u6709\u4e9b\u7f3a\u9ede\u7684\uff1a

          • \u4ed6\u5728\u547c\u53eb\u6b04\u4f4d\u7684\u6642\u5019\u4e0d\u662f\u90a3\u9ebc\u76f4\u89c0\uff0c\u4f8b\u5982\u524d\u9762\u7684\u4f8b\u5b50\u4e2d {print $4} \u4ee3\u8868\u7684\u662f\u6f5b\u6642\u3002
          • \u7576\u8cc7\u6599\u4e0d\u518d\u662f\u4f7f\u7528\u9810\u8a2d\u7684\u65b9\u5f0f\u505a\u5206\u5272\u7684\u6642\u5019\uff0c\u5c31\u9700\u8981\u53c3\u7167\u5f88\u591a\u6587\u4ef6
          • \u4f8b\u5982\u539f\u672c\u662f\u4ee5\u7a7a\u683c\u70ba\u5b9a\u754c\u7b26\uff0c\u7576\u9700\u8981\u4f7f\u7528\u5982 CSV \u4ee5\u9017\u865f\u70ba\u5b9a\u754c\u7b26\u7684\u6a94\u6848\u6642\u5c31\u5f88\u9ebb\u7169
          • \u6709\u6642\u5019\u8f38\u5165\u6709\u5f88\u591a\uff0c\u4e0d\u518d\u53ea\u662f\u55ae\u7d14\u7684\u7a7a\u683c\u5340\u5206\u7684\u6587\u5b57\u6642\u5c31\u6703\u5f88\u9ebb\u7169
          • \u4f8b\u5982 curl \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
          "},{"location":"feedback/designing-data-intensive-applications/derived-batch/#\u9ad8\u5bb9\u932f\u6027","title":"\u9ad8\u5bb9\u932f\u6027","text":"

          \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 \u7121\u5171\u4eab\u67b6\u69cb \u7684\u67b6\u69cb
          • daemon-based\uff0c\u6bcf\u500b\u7bc0\u9ede\u90fd\u6703\u653e\u4e00\u500b\u5b88\u8b77\u7a0b\u5e8f\uff08daemon\uff09\uff0c\u7136\u5f8c\u9019\u4e9b\u7a0b\u5e8f\u6703\u548c\u4e00\u500b\u4e2d\u592e\u7ba1\u7406\u4eba\uff08schedular\uff09\u53bb\u5206\u914d\u8cc7\u6599\u3001\u5099\u4efd\u3001\u63d0\u4f9b\u5065\u5eb7\u6aa2\u67e5\u7b49\u7b49
          • \u5099\u4efd\uff08replicate\uff09\uff0c\u7570\u65bc\u6211\u5011\u5728\u5206\u6563\u5f0f\u8cc7\u6599\u5eab\u770b\u5230\u7684\u8907\u88fd\uff0c\u4ed6\u8655\u7406\u7684\u6a5f\u5236\u548c\u55ae\u53f0\u6a5f\u5668\u505a\u6a94\u6848\u7cfb\u7d71\u7684\u5099\u4efd\u6bd4\u8f03\u50cf\uff0c\u4f8b\u5982 RAID\uff08\u900f\u904e\u7db2\u8def\uff09\u548c\u7cfe\u522a\u78bc\uff08erasure coding\uff09\u3002

          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

          • GlusterFS
          • Quantcast File System
          • OpenStack Swift
          • GFS \u2192 Colossus
          • Amazon S3
          • Azure Blob Storage
          "},{"location":"feedback/designing-data-intensive-applications/derived-batch/#mapreduce","title":"MapReduce","text":"

          \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

          • Map \u8ca0\u8cac\u628a\u60f3\u8981\u7684\u8cc7\u6599\u5f9e\u539f\u59cb\u8cc7\u6599\u63d0\u53d6\u51fa\u4f86\uff0c\u6211\u5011\u7a31\u5176\u70ba Mapper
          • Reduce \u8ca0\u8cac\u628a\u76f8\u4f3c\u7684\u8cc7\u6599\u6574\u5408\u8d77\u4f86\u4e26\u505a\u8a08\u7b97\uff0c\u6211\u5011\u7a31\u5176\u70ba Reducer

          \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\u3002Reducer \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

          "},{"location":"feedback/designing-data-intensive-applications/derived-batch/#\u5de5\u4f5c\u6d41\u7a0b","title":"\u5de5\u4f5c\u6d41\u7a0b","text":"

          \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

          • \u628a\u71b1\u9ede\uff08\u540d\u4eba\uff09\u7684\u8cc7\u6599\u9001\u7d66\u591a\u500b Reducer \u800c\u975e\u53ea\u6709\u4e00\u500b\uff0c\u7136\u5f8c\u518d\u628a\u9700\u8981\u806f\u5408\u7684\u8cc7\u6599\uff08\u540d\u4eba\u7684\u8cc7\u6599\uff09\u9001\u7d66\u9019\u4e9b Reducer\uff0c\u6700\u5f8c\u518d\u628a Reducer \u4e2d\u76f8\u540c\u7684\u8cc7\u6599\u6574\u5408\u5728\u4e00\u8d77\uff0c\u5982 Pig \u7684 skewed join \u548c Crunch \u7684 sharded join
          • \u4f7f\u7528 map-side join\uff08\u5f85\u6703\u63d0\uff09
          • \u5206\u5169\u500b\u7a0b\u5e8f\u57f7\u884c\uff0c\u7b2c\u4e00\u500b\u5148\u6253\u4e82\u8cc7\u6599\uff0c\u7b2c\u4e8c\u500b\u628a\u6253\u4e82\u7684\u8cc7\u6599\u6574\u5408\u5728\u4e00\u8d77\uff0c\u4f8b\u5982\u539f\u672c\u8cc7\u6599\u53eb\u505a 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
          "},{"location":"feedback/designing-data-intensive-applications/derived-batch/#map-side-join","title":"Map-side join","text":"

          \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

          • \u5ee3\u64ad\u806f\u5408\u8868\uff0c\u5982\u679c\u5f85\u806f\u5408\u7684\u8868\u662f\u5920\u5c0f\u7684\uff0c\u5c31\u53ef\u4ee5\u76f4\u63a5\u50b3\u905e\u806f\u5408\u8868\u5230\u5404\u500b Mapper \u4e2d\uff08\u9019\u540d\u7a31\u7684\u7531\u4f86\uff09
          • \u5206\u5340\u806f\u5408\u8868\uff0c\u5982\u679c\u77e5\u9053 Mapper \u7684\u8f38\u5165\u7bc4\u570d\uff0c\u5c31\u53ef\u4ee5\u628a\u7279\u5b9a\u7bc4\u570d\u7684\u806f\u5408\u8868\u653e\u9032\u4f86\uff0c\u6e1b\u5c11\u4e0d\u5fc5\u8981\u7684\u8a18\u61b6\u9ad4\u7a7a\u9593\uff0c\u5728 Hive \u4e2d\u9019\u7a31\u70ba bucketed map joins
          • \u5206\u5340\u4e14\u6392\u5e8f\u806f\u5408\u8868\uff0c\u5982\u679c Mapper \u7684\u8f38\u5165\u4e0d\u50c5\u77e5\u9053\u7bc4\u570d\uff0c\u4e5f\u78ba\u5b9a\u4ed6\u662f\u6392\u5e8f\u904e\u7684\uff08\u901a\u5e38\u9019\u4ee3\u8868\u9019\u500b mapper \u8cc7\u6599\u6e90\u662f\u5225\u7684 MapReduce \u7a0b\u5e8f\uff09\u5c31\u53ef\u4ee5\u6309\u7167\u9806\u5e8f\u8b80\u53d6\u7279\u5b9a\u7684\u503c\uff0c\u5c31\u4e0d\u9700\u8981\u628a\u6240\u6709\u7684\u8868\u653e\u9032\u8a18\u61b6\u9ad4\u4e2d\u9593\u3002
          "},{"location":"feedback/designing-data-intensive-applications/derived-batch/#\u6bd4\u8f03\u5169\u8005","title":"\u6bd4\u8f03\u5169\u8005","text":"

          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

          • Voldemort
          • Terrapin
          • ElephantDB
          • HBase

          \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\u6027

          MPP \u548c MapReduce \u7684\u5dee\u7570

          \u6211\u5011\u6574\u7406\u4e00\u4e0b\u5169\u8005\u5dee\u7570\uff1a

          • \u8cc7\u6599\u7d50\u69cb\uff0c\u6279\u6b21\u8655\u7406\u7684\u8cc7\u6599\u662f\u751f\u7684\uff08Raw\uff09\uff0c\u76f8\u5c0d\u65bc MPP \u662f\u7d50\u69cb\u5316\u7684\uff08schema\uff09
          • \u7522\u51fa\uff0cMPP \u901a\u5e38\u662f\u7522\u51fa\u67d0\u7a2e\u5831\u8868\uff08\u4f8b\u5982\uff0c\u4f7f\u7528\u8005\u9019\u500b\u6708\u7684\u8cfc\u8cb7\u529b\uff09\uff0c\u6279\u6b21\u8655\u7406\u901a\u5e38\u7522\u51fa\u53e6\u4e00\u7a2e\u9762\u8c8c\u7684\u8cc7\u6599\uff08\u4f8b\u5982\uff0c\u4f7f\u7528\u8005\u7684\u63a8\u85a6\u597d\u53cb\uff09
          • \u5fa9\u539f\u6027\uff0c\u6279\u6b21\u8655\u7406\u56e0\u70ba\u53ea\u662f\u8f38\u51fa\u300c\u6a94\u6848\u300d\uff0c\u76f8\u5c0d\u65bc MPP \u7684\u8f38\u51fa\u53ef\u80fd\u6703\u7570\u52d5\u8cc7\u6599\u5eab\u7684\u8cc7\u6599\uff0c\u9019\u7a2e\u53ef\u5fa9\u539f\u7684\u64cd\u4f5c\u662f\u76f8\u5c0d\u9ad8\u5bb9\u932f\u7684
          • \u5f48\u6027\uff0c\u6279\u6b21\u8655\u7406\u56e0\u70ba\u5929\u751f\u5141\u8a31\u61c9\u7528\u7a0b\u5f0f\u5ba2\u5236\u81ea\u5df1\u60f3\u8981\u7684\u908f\u8f2f\uff0c\u6240\u4ee5\u5f48\u6027\u5f88\u9ad8
          • \u76f4\u89c0\u6027\uff0cMPP \u7684\u64cd\u4f5c\u5f88\u76f4\u89c0\uff0c\u5c24\u5176\u900f\u904e SQL \u9019\u7a2e\u62bd\u8c61\u8a9e\u6cd5\uff0c\u8b93\u4f7f\u7528\u8005\u53ef\u4ee5\u5f88\u5feb\u901f\u4e0a\u624b\uff08\u751a\u81f3\u4e0d\u9700\u8981\u6703\u5beb\u7a0b\u5f0f\u7684\u4eba\u90fd\u53ef\u4ee5\u7528\uff09
          • \u5bb9\u932f\u6027\uff0c\u5c0d\u6279\u6b21\u8655\u7406\u4f86\u8aaa\uff0c\u6bcf\u4e00\u6b21\u7684\u7570\u52d5\u90fd\u4e0d\u6703\u5f71\u97ff\u8f38\u5165\uff0c\u6240\u4ee5\u7576\u7bc0\u9ede\u5931\u80fd\u6642\u901a\u5e38\u90fd\u6703\u81ea\u52d5\u91cd\u65b0\u5617\u8a66\u4e0a\u4e00\u500b\u7a0b\u5e8f\uff08\u800c\u975e\u5168\u90e8\u91cd\u8a66\uff09\uff0c\u9019\u9ede\u7570\u65bc MPP \u6703\u6368\u68c4\u8acb\u6c42\uff08\u6216\u5168\u90e8\u91cd\u8a66\uff09\u4e26\u8b93\u61c9\u7528\u7a0b\u5f0f\uff08\u6216\u4f7f\u7528\u8005\uff09\u6c7a\u5b9a\u4e0b\u4e00\u52d5

          \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

          • \u53ef\u8f15\u6613\u91cd\u8a66\uff0c\u8f38\u5165\u4e26\u4e0d\u6703\u88ab\u7570\u52d5\u4e14\u53ef\u4ee5\u7121\u8ca0\u64d4\u7684\u91cd\u65b0\u5617\u8a66\u7a0b\u5e8f
          • \u9ad8\u5f48\u6027\uff0c\u4efb\u4f55\u8f49\u63db\u90fd\u53ef\u4ee5\u900f\u904e\u5ba2\u5236\u7684\u7a0b\u5f0f\u78bc
          • \u5fa9\u7528\u6027\uff0c\u4efb\u4f55\u8f38\u51fa\u90fd\u53ef\u4ee5\u518d\u88ab\u5176\u4ed6\u4eba\u62ff\u4f86\u7576\u8f38\u5165\uff08\u4ecb\u9762\u55ae\u4e00\uff09

          \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

          • Unix \u662f\u6587\u5b57\u985e\u578b\u7684\u8f38\u5165\u8f38\u51fa\uff0cMapReduce \u662f\u4f7f\u7528\u7de8\u78bc\u5f8c\u7684\u6a94\u6848\uff08Avro\u3001Parquet \u7b49\u7b49\uff09
          • \u56e0\u70ba\u4f7f\u7528\u7de8\u78bc\uff0c\u6240\u4ee5\u4e0d\u6703\u6709\u6240\u8b02\u7684 {print $4}\uff0c\u800c\u662f {print $latency}
          • MapReduce \u628a\u4e00\u500b\u7a0b\u5e8f\u62c6\u6210 Mapper \u548c Reducer \u5169\u6bb5\uff0c\u9019\u6703\u9020\u6210\u554f\u984c\uff1a
          • \u7121\u8b02\u7684\u6392\u5e8f
          • \u5728\u9032\u884c\u4e0b\u4e00\u500b\u7a0b\u5e8f\u4e4b\u524d\u6703\u7b49\u524d\u4e00\u500b\u7a0b\u5e8f\u505a\u5b8c\uff0cUnix \u5927\u90e8\u5206\u60c5\u6cc1\u662f\u63a1\u7528\u4e32\u6d41\u6a5f\u5236
          • Mapper \u901a\u5e38\u662f\u5197\u8d05\u7684\uff0c\u76f4\u63a5\u8b93 Reducer \u4f7f\u7528\u8f38\u5165\u5373\u53ef
          • \u4e0d\u540c\u7a0b\u5e8f\u4e4b\u9593\u6703\u628a\u8cc7\u6599\u5099\u4efd\u9032 HDFS \u4e2d
          "},{"location":"feedback/designing-data-intensive-applications/derived-batch/#\u8cc7\u6599\u6d41\u5f15\u64ce","title":"\u8cc7\u6599\u6d41\u5f15\u64ce","text":"

          \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

          • \u50b3\u905e\u76f8\u540c\u7684\u5206\u5340\u8cc7\u6599\uff0c\u9019\u6642\u7bc0\u9ede\u7684\u8cc7\u6599\u5c31\u4e0d\u9700\u8981\u900f\u904e\u7db2\u8def\u50b3\u905e
          • \u50b3\u905e\u8a72\u5206\u5340\u8cc7\u6599\u5230\u6240\u6709\u7bc0\u9ede
          • \u91cd\u65b0\u7de8\u6392\u5206\u5340\u8cc7\u6599\uff0cMapReduce \u9810\u8a2d\u5168\u90e8\u90fd\u662f\u5982\u6b64

          \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

          • \u964d\u4f4e\u7121\u8b02\u6392\u5e8f\uff08\u6bcf\u6b21 Mapper \u7d50\u675f\u90fd\u8981\u6392\u5e8f\uff09\u7684\u8017\u80fd
          • \u4e0d\u9700\u8981\u5197\u8d05\u7684 Mapper
          • \u904b\u7b97\u5b50\u9593\u7684\u8cc7\u6599\u4e0d\u6703\u4e1f\u9032 HDFS\uff0c\u907f\u514d\u7121\u8b02\u7684\u8017\u80fd
          • \u900f\u904e\u660e\u78ba\u8868\u9054\u904b\u7b97\u5b50\u4e4b\u9593\u7684\u6e9d\u901a\uff0c\u53ef\u4ee5\u6709\u4e00\u500b\u6982\u89c0\u4e86\u89e3\u4e0d\u540c\u904b\u7b97\u5b50\u7684\u95dc\u4fc2\uff0c\u4f86\u9054\u5230\u6548\u80fd\u6700\u512a\u5316\uff08\u6b63\u78ba\u5206\u914d\u5206\u5340\uff0c\u5c31\u4e0d\u9700\u8981\u628a\u8cc7\u6599\u4e00\u76f4\u50b3\u905e\u5230\u7db2\u969b\u7db2\u8def\u4e2d\uff09
          • \u4e0d\u9700\u7b49\u5f85\u524d\u9762\u7684\u904b\u7b97\u5b50\u5b8c\u6210\u5c31\u53ef\u4ee5\u958b\u59cb\u5de5\u4f5c\uff08\u5982\u540c Unix \u4e00\u822c\uff09
          • \u4f7f\u7528\u76f8\u540c\u7684\u7a0b\u5e8f\u904b\u7b97\u4e0d\u540c\u7684\u904b\u7b97\u5b50\u907f\u514d\u7a0b\u5f0f\u78bc\u7684\u521d\u59cb\u5316\u8017\u80fd
          "},{"location":"feedback/designing-data-intensive-applications/derived-batch/#\u8981\u600e\u9ebc\u91cd\u4f86","title":"\u8981\u600e\u9ebc\u91cd\u4f86\uff1f","text":"

          \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

          • \u5716\u50cf\u5f0f\u8655\u7406\uff1a\u4e0d\u518d\u662f\u4ee5\u7bc0\u9ede\u70ba\u8cc7\u6599\u5206\u5340\u7684\u55ae\u4f4d\uff0c\u800c\u662f\u4ee5\u9ede\uff08vertex\uff09\u70ba\u55ae\u4f4d\u3002\u4e26\u4e14\u6bcf\u6b21\u8fed\u4ee3\u53ea\u8655\u7406\u76f8\u95dc\u8cc7\u6599\uff0c\u5c31\u597d\u50cf MapReduce \u4e2d\u7684 Reducer\u3002\u4ee3\u8868\u662f Pregel\u3002
          • \u600e\u9ebc\u8b93\u958b\u767c\u8005\u5c08\u6ce8\u65bc\u5546\u52d9\u908f\u8f2f\u7684\u958b\u767c\uff0c\u800c\u4e0d\u662f\u6279\u6b21\u8655\u7406\u5e95\u5c64\u7684\u904b\u4f5c\uff0c\u4e26\u900f\u904e\u62bd\u8c61\u4ecb\u9762\uff0c\u8b93\u6279\u6b21\u8655\u7406\u7684\u5de5\u7a0b\u5e2b\u53ef\u4ee5\u63d0\u5347\u76f8\u95dc\u6548\u80fd\u800c\u4e0d\u5f71\u97ff\u958b\u767c\u8005\uff08\u5c31\u597d\u50cf SQL \u7684\u6f14\u9032\u4e00\u6a23\uff09\u3002\u76f8\u95dc\u63d0\u9ad8\u7dad\u5ea6\u7684\u5de5\u5177\uff0c\u5982\uff1aPig, Hive, Cascading\uff0c\u5c31\u662f\u53ef\u4ee5\u62bd\u63db\u5e95\u5c64\u7684\u6846\u67b6\uff08MapReduce, Spark, Flink\uff09\u800c\u4f7f\u7528\u76f8\u540c\u7684\u4ecb\u9762\u4f86\u57f7\u884c\u6279\u6b21\u904b\u7b97\u3002
          • \u52a0\u901f\u6e2c\u8a66\uff0c\u5c31\u597d\u50cf Unix \u4e2d\u7684 less \u4e00\u6a23\uff0c\u53ef\u4ee5\u770b\u5230\u90e8\u5206\u7684\u904b\u7b97\u7d50\u679c\u800c\u4e0d\u662f\u5168\u90e8\u8dd1\u5b8c
          "},{"location":"feedback/designing-data-intensive-applications/derived-batch/#vs-mpp_1","title":"v.s. MPP","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\u6027

          MPP \u548c\u8cc7\u6599\u6d41\u5f15\u64ce\u7684\u5dee\u7570

          \u8cc7\u6599\u6d41\u5f15\u64ce\u548c MPP \u6b63\u4e92\u76f8\u5b78\u7fd2\uff1a

          • MPP \u8d8a\u4f86\u8d8a\u80fd\u63a5\u53d7\u5ba2\u88fd\u5316\u7684\u8a08\u7b97\uff0c\u4f8b\u5982 MADlib \u5141\u8a31\u4e00\u4e9b\u6a5f\u5668\u5b78\u7fd2\u7684\u6f14\u7b97\u6cd5\u9032 MPP \u4e2d\u3002
          • \u6279\u6b21\u8655\u7406\u4e5f\u8d8a\u4f86\u8d8a\u591a\u9ad8\u62bd\u8c61\u7684\u8a9e\u6cd5\u6e1b\u5c11\u958b\u767c\u8005\u53bb\u8a2d\u7f6e\u4e00\u4e9b\u7d30\u90e8\u53c3\u6578\u5982\u9663\u5217\u5316\u8a08\u7b97\u3001\u806f\u5408\u7a2e\u985e\u7684\u9078\u64c7\u7b49\u7b49\u3002
          • \u6709\u4e9b MPP \u7684\u8cc7\u6599\u7d50\u69cb\u4e5f\u5141\u8a31\u751f\u7684\u8cc7\u6599\u7d50\u69cb\uff0c\u4f8b\u5982 HBase\u3002
          "},{"location":"feedback/designing-data-intensive-applications/derived-batch/#\u7e3d\u7d50","title":"\u7e3d\u7d50","text":"

          \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

          • Unix philosophy
          • MapReduce on Hadoop
          • MapReduce v.s. MPP
          • MapReduce v.s. Unix
          • Dataflow engine v.s. MapReduce
          • Dataflow engine v.s. MPP

          \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\uff08topic, stream\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

          "},{"location":"feedback/designing-data-intensive-applications/derived-stream/#\u8ffd\u8e64\u8005\u4e3b\u52d5","title":"\u8ffd\u8e64\u8005\u4e3b\u52d5","text":"

          \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

          • \u5728\u5fd9\uff0c\u9019\u6642\u53ef\u4ee5\u505a\u4e00\u4e9b\u624b\u6cd5
          • \u963b\u64cb\uff08block\uff09\u5f8c\u7e8c\u7684\u8acb\u6c42
          • \u8b93\u5f8c\u7e8c\u7684\u8acb\u6c42\u6392\u968a\uff08queue\uff09
          • \u963b\u64cb\u4e26\u544a\u77e5 \u767c\u5e03\u8005 \u76ee\u524d\u5728\u5fd9\uff08\u5f8c\u58d3\uff0cbackpressure\uff09\uff0cTCP \u548c Unix \u7684\u7ba1\u7dda\u7684\u90fd\u9019\u529f\u80fd
          • \u5931\u80fd\uff0c\u9019\u6642\u505a\u6cd5\u6703\u6839\u64da\u8ffd\u8e64\u8005\u548c\u767c\u5e03\u8005\u7684\u95dc\u4fc2\u800c\u6709\u4e0d\u540c

          \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

          • \u76f4\u63a5\u50b3\u9001
          • \u4e2d\u4ecb\u8005
          • \u65e5\u8a8c\u578b\u4e2d\u4ecb\u8005
          "},{"location":"feedback/designing-data-intensive-applications/derived-stream/#\u76f4\u63a5\u50b3\u9001","title":"\u76f4\u63a5\u50b3\u9001","text":"

          \u767c\u5e03\u8005\u76f4\u63a5\u628a\u4e8b\u4ef6\u9001\u7d66\u8ffd\u8e64\u8005\uff0c\u6709\u5e7e\u500b\u7279\u9ede

          • \u901a\u5e38\u9700\u8981 SDK \u6216\u7a0b\u5f0f\u5eab\u7684\u5e6b\u5fd9
          • \u901a\u5e38\u57fa\u65bc UDP\uff0c\u907f\u514d\u8b93\u8ffd\u8e64\u8005\u5f71\u97ff\u767c\u5e03\u8005\u7684\u56de\u61c9\u6642\u9593
          • \u901a\u5e38\u4e0d\u5728\u4e4e\u8ffd\u8e64\u8005\u7684\u5931\u80fd\uff0c\u4e5f\u5c31\u662f\u6c92\u6709\u76f8\u95dc\u5bb9\u932f\u6a5f\u5236
          • \u6216\u8005\u7528 TCP \u4e26\u5617\u8a66\u91cd\u65b0\u9023\u7dda
          • \u901a\u5e38\u53ea\u6709\u4e00\u500b\u8ffd\u8e64\u8005\uff0c\u5426\u5247\u5f88\u5bb9\u6613\u5f71\u97ff\u767c\u5e03\u8005\u7684\u8907\u96dc\u5ea6

          \u76f8\u95dc\u8edf\u9ad4\u6709\uff1a

          • ZeroMQ
          • StatsD
          • nanomsg
          "},{"location":"feedback/designing-data-intensive-applications/derived-stream/#\u4e2d\u4ecb\u8005","title":"\u4e2d\u4ecb\u8005","text":"

          \u767c\u5e03\u8005\u628a\u4e8b\u4ef6\u9001\u5230\u4e2d\u4ecb\u8005\uff08broker, queue\uff09

          • \uff08\u6839\u64da\u8a2d\u5b9a\uff09\u53ef\u8abf\u6574\u4e2d\u4ecb\u8005\u7684\u5bb9\u932f\u6a5f\u5236\uff1a\u963b\u64cb\u3001\u6392\u968a\u3001\u5f8c\u58d3
          • \u7576\u8a18\u61b6\u9ad4\u4e0d\u5920\u6642\uff0c\uff08\u6839\u64da\u8a2d\u5b9a\uff09\u53ef\u900f\u904e\u6a94\u6848\u7cfb\u7d71\u7dad\u6301\u8010\u7528\u6027\uff08durability\uff09
          • \u53ef\u4ee5\u7d0d\u9032 XA
          • \u6709\u5b9a\u7fa9\u4e00\u4e9b\u5be6\u4f5c\u7684\u6a19\u6e96\uff1aJMS\u3001AMQP

          \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

          • RabbitMQ
          • ActiveMQ
          • ...

          \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":"
          • \u8cc7\u6599\u7684\u522a\u9664\u4e0a
          • \u8cc7\u6599\u5eab\u53ea\u6709\u7576\u8981\u6c42\uff08DELETE TABLE ...\uff09\u6642\u624d\u522a\u9664
          • \u4e2d\u4ecb\u8005\u78ba\u4fdd\u8ffd\u8e64\u8005\u63a5\u6536\u5230\u4e8b\u4ef6\u5f8c\u5c31\u6703\u628a\u4e8b\u4ef6\u522a\u9664\u6389
          • \u641c\u5c0b\u7279\u5b9a\u8cc7\u6599
          • \u8cc7\u6599\u5eab\u900f\u904e\u7d22\u5f15\u548c\u6b21\u7d22\u5f15\u4f86\u52a0\u901f\u641c\u5c0b
          • \u4e2d\u4ecb\u8005\u8b93\u8ffd\u8e64\u8005\u8ffd\u8e64\u591a\u500b\u4e3b\u984c\u4f86\u9054\u6210\u4e0d\u540c\u8cc7\u6599\u7684\u7372\u53d6
          "},{"location":"feedback/designing-data-intensive-applications/derived-stream/#\u7570\u6b65","title":"\u7570\u6b65","text":"

          \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

          • Apache Kafka
          • Apache DistributedLog

          \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\u7a69\u5b9a
          • \u6279\u6b21\u50b3\u905e
          • \u8ffd\u8e64\u8005\u7684\u89e3\u8026

          \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\u597d
          key=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

          • PostgreSQL - Bottled Water
          • MySQL - Maxwell
          • MongoDB - Mongoriver
          • Oracle - GoldenGate
          • Kafka Connect
          • Spinal Tap
          • Debezium

          \u6709\u4e9b\u751a\u81f3\u652f\u63f4\u7576\u7279\u5b9a\u503c\u88ab\u7570\u52d5\u6642\u8f38\u51fa\u4e8b\u4ef6\uff1a

          • RethinkDB, Firebase, CouchDB
          • MongoDB - Meteor
          • VoltDB
          VoltDB \u7528\u4f86\u76e3\u807d\u7279\u5b9a\u8868\u7684\u7570\u52d5\u8a9e\u6cd5
          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)\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":"
          • \u7be9\u9078\u7279\u5b9a\u4e8b\u4ef6
          • \u6574\u5408\u4e8b\u4ef6\u5206\u6790
          • \u5efa\u7acb\u65b0\u89c0\u9ede

          \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 CEL
          select *\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\uff0cCEP \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

          • \u91d1\u878d\u516c\u53f8\u76e3\u63a7\u4fe1\u7528\u5361\u72c0\u6cc1
          • \u81ea\u52d5\u5316\u5de5\u5ee0\u6aa2\u67e5
          • ...

          \u53ef\u80fd\u7684\u8edf\u9ad4\u6709\uff1a

          • Apache Samza
          • Apache Flink
          • Esper
          • IBM InfoSpher Stream
          • ...
          "},{"location":"feedback/designing-data-intensive-applications/derived-stream/#\u6574\u5408\u4e8b\u4ef6\u5206\u6790","title":"\u6574\u5408\u4e8b\u4ef6\u5206\u6790","text":"

          \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

          • Apache Flink\uff08Apache Storm\uff09
          • Spark Streaming
          • Samza
          • Kafka

          \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":"
          • \u843d\u5f8c\u7684\u4e8b\u4ef6\u8a72\u600e\u9ebc\u8655\u7406\uff1f
          • \u6642\u9593\u7a97\u7684\u9078\u64c7

          \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

          • \u7ffb\u8f49\u6642\u9593\u7a97\uff08Tumbling window\uff09\uff0c\u4f8b\u5982\u6bcf 5 \u5206\u9418\u7d71\u8a08\u4e00\u6b21\uff1a0930-0935\u30010935~0940\u3001...\u3002
          • \u8df3\u8e8d\u6642\u9593\u7a97\uff08Hopping window\uff09\uff0c\u4f8b\u5982\u6bcf 1+5+1 \u5206\u9418\u7d71\u8a08\u4e00\u6b21\uff1a0930~0937\u30010936~0943\u3001...\u3002
          • \u6ed1\u52d5\u6642\u9593\u7a97\uff08Sliding window\uff09\uff0c\u4f8b\u5982\u4e94\u5206\u5167\u6700\u5927\u3001\u5c0f\u7684\u6642\u9593\uff1a0930~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
          • \u6703\u8ac7\u6642\u9593\u7a97\uff08Session window\uff09\uff0c\u4f8b\u5982\u64c1\u6709\u67d0\u7de8\u865f\u7684\u4e8b\u4ef6\u7684\u5340\u9593\uff0c\u901a\u5e38\u7528\u65bc\u8ffd\u8e64\u4f7f\u7528\u8005\u7684\u64cd\u4f5c\u3002
          "},{"location":"feedback/designing-data-intensive-applications/derived-stream/#\u806f\u5408","title":"\u806f\u5408","text":"
          • \u5169\u7d44\u4e3b\u984c\u7684\u806f\u5408
          • \u52d5\u614b\u8868\u548c\u4e3b\u984c\u7684\u806f\u5408
          • \u52d5\u614b\u8868\u548c\u52d5\u614b\u8868\u7684\u806f\u5408

          \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

          • \u900f\u904e Microbatching/Checkpoint \u8b93\u57f7\u884c\u53ef\u4ee5\u5f9e\u4e2d\u91cd\u4f86\u3002
          • \u4f7f\u904b\u7b97\u6210\u70ba\u51aa\u7b49\u7684\u3002
          • \u91cd\u5efa\u72c0\u614b\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\u4e8b\u4ef6\u4f86\u6e90\u8ce6\u4e88\u8cc7\u6599\u6210\u70ba\u4e00\u7a2e\u300c\u9762\u5411\u300d\u800c\u975e\u72c0\u614b\u3002\u5c0d\u65bc\u4e8b\u4ef6\u7b49\u7b49\u6a5f\u5236\u60f3\u8981\u6df1\u5165\uff0c\u53ef\u4ee5\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

          • \u50b3\u9001\u4e8c\u9032\u4f4d\u8a0a\u865f\u7684\u5be6\u9ad4\u5c64
          • \u628a\u4e8c\u9032\u4f4d\u6574\u5408\u6210\u8a0a\u6846\uff08frame\uff09\u7684\u8cc7\u6599\u9023\u7d50\u5c64\uff0c\u4ee5\u5716\u4e0a\u70ba\u4f8b\u5c31\u662f Ethernet \u7684\u4ea4\u63db\u5668\uff0c\u4e26\u5728\u9019\u88e1\u9032\u884c\u9ad8\u5bb9\u932f\u3001\u5075\u932f\u7684 CRC
          • \u5229\u65bc\u5927\u91cf\u64f4\u5c55\u4e26\u7ba1\u7406\u591a\u5c01\u5305\uff08packet\uff09\u7684\u7db2\u8def\u5c64\uff0c\u4ee5\u5716\u4e0a\u70ba\u4f8b\u5c31\u662f IP \u7684\u8def\u7531\u5668
          • \u628a\u9019\u4e9b\u5305\u88dd\u6210\u7db2\u5361\uff08NIC\uff09\uff0c\u4e26\u548c CPU \u9032\u884c\u6e9d\u901a
          • \u6700\u5f8c\u5728\u8edf\u9ad4\u9762\u4e0a\u63d0\u4f9b UDP/TCP \u7b49\u5354\u5b9a\u6eff\u8db3\u5404\u7a2e\u8cc7\u6599\u7684\u50b3\u8f38\u7684\u50b3\u8f38\u5c64\uff0c\u4ee5 TCP \u70ba\u4f8b\uff0c\u5c31\u6703\u5728\u6b64\u9032\u884c\u5c01\u5305\u7684\u6392\u5e8f\u3001\u91cd\u65b0\u8acb\u6c42\u3001\u6d88\u9664\u91cd\u8907\u7b49\u6392\u9664\u932f\u8aa4\u7684\u884c\u70ba
          • \u6700\u5f8c\u5229\u7528 BSD \u63d0\u4f9b\u7684 API \u8b93\u61c9\u7528\u7a0b\u5f0f\u5f97\u4ee5\u548c OS \u6e9d\u901a\uff0c\u4e26\u5b8c\u6210\u9019\u4e00\u7cfb\u5217\u7684\u884c\u70ba

          \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":"
          • \u7db2\u8def\u6703\u9047\u5230\u54ea\u4e9b\u554f\u984c\uff1f
          • \u8981\u600e\u9ebc\u77e5\u9053\u7db2\u8def\u9047\u5230\u54ea\u4e9b\u554f\u984c\uff1f
          • \u5982\u4f55\u5224\u5b9a\u7bc0\u9ede\u9023\u4e0d\u4e0a\u4e86\uff1f
          • \u70ba\u4ec0\u9ebc\u7db2\u8def\u5ef6\u9072\u662f\u7121\u754c\u7684\uff1f

          \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

          • \u8b8a\u56e0\uff0c\u54ea\u4e9b\u662f\u5916\u5728\u74b0\u5883\u8b93\u7db2\u8def\u767c\u751f\u554f\u984c
          • \u5929\u751f\uff0c\u4ed6\u7684\u5929\u751f\u8a2d\u8a08\u9020\u6210\u4e86\u4ec0\u9ebc\u7f3a\u9677
          "},{"location":"feedback/designing-data-intensive-applications/distributed-env/#\u7269\u7406\u6027\u640d\u58de","title":"\u7269\u7406\u6027\u640d\u58de","text":"

          \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

          1. GitHub \u56e0\u66f4\u65b0\u8def\u7531\u5668\u6642\u8a2d\u7f6e\u932f\u8aa4\u5f15\u767c\u9aa8\u724c\u6548\u61c9\u9020\u6210\u505c\u6a5f\u4e94\u5c0f\u6642
          2. Facebook \u56e0\u932f\u8aa4\u8a2d\u5b9a\u9020\u6210\u5168\u7403\u5168\u670d\u52d9\u516d\u5c0f\u6642\u4ee5\u4e0a\u7684\u505c\u6a5f
          3. Google \u5f88\u5c11\u5c0d\u5916\u516c\u5e03\u505c\u6a5f\u539f\u56e0
          "},{"location":"feedback/designing-data-intensive-applications/distributed-env/#\u97cc\u9ad4\u6709\u932f","title":"\u97cc\u9ad4\u6709\u932f","text":"

          \u55ae\u7d14\u8edf\u9ad4\u9762\u6709 bug\uff1a

          • \u8def\u7531\u5668\u55ae\u5411\u7121\u6cd5\u9001\u51fa

          \u5982\u679c\u60f3\u4e86\u89e3\u66f4\u591a\u53ef\u80fd\u6703\u6709\u7684\u554f\u984c\uff0c\u53ef\u4ee5\u67e5\u95b1\uff1a

          • https://queue.acm.org/detail.cfm?id=2655736
          • https://queue.acm.org/detail.cfm?id=2482856
          "},{"location":"feedback/designing-data-intensive-applications/distributed-env/#\u5982\u4f55\u77e5\u9053\u6b63\u767c\u751f\u54ea\u4e9b\u554f\u984c","title":"\u5982\u4f55\u77e5\u9053\u6b63\u767c\u751f\u54ea\u4e9b\u554f\u984c","text":"

          \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

          • \u7576\u76ee\u7684\u7aef\u7684\u961c\u6c92\u958b\uff0cTCP \u6703\u56de\u61c9 FIN \u6216 RST
          • \u7576\u76ee\u7684\u7bc0\u9ede\u6b63\u9762\u81e8\u7db2\u8def\u58c5\u585e\uff0cTCP \u6703\u56de\u61c9\u4e00\u4e9b\u8b66\u544a\u8cc7\u8a0a
          • \u82e5\u61c9\u7528\u7a0b\u5f0f\u4e2d\u65b7\uff0c\u4f46\u662f OS \u4ecd\u5728\u57f7\u884c\uff0c\u6709\u4e9b\u8cc7\u6599\u5eab\u6703\u6709\u6a5f\u5236\u544a\u8a34\u53e2\u96c6\u5167\u7684\u8cc7\u6599\u5eab\uff1a\u300c\u6211\u7121\u6cd5\u904b\u4f5c\u4e86\uff01\u300d
          • \u53ef\u4ee5\u76e3\u63a7\u4ea4\u63db\u5668\uff08switch\uff09\u3001\u8def\u7531\u5668\uff08router\uff09\u751a\u81f3\u4e2d\u7e7c\u5668\uff08repeater\uff09\u7684\u7ba1\u7406\u7cfb\u7d71
          • \u82e5\u5c0d\u9019\u4e9b\u540d\u8a5e\u4e0d\u4e86\u89e3\uff0c\u63a8\u85a6\u9019\u7bc7\u4e2d\u6587\u6587\u7ae0\uff0c\u4e0d\u904e\u82e5\u8981\u66f4\u6709\u7cfb\u7d71\u5730\u4e86\u89e3\u9084\u662f\u5efa\u8b70 coursera \u8ab2\u7a0b
          • \u6709\u4e9b\u8def\u7531\u5668\u6703\u56de\u5c01\u5305\uff08ICMP Destination Unreachable\uff09\u544a\u8a34\u4f60\u8a72\u7bc0\u9ede\u662f\u7121\u6cd5\u9023\u7dda\u7684
          • Timeout\uff08TCP \u672c\u8eab\u5c31\u6709\uff0c\u6b64\u6307\u61c9\u7528\u7a0b\u5f0f\u9762\uff09\uff0c\u9760\u7d93\u9a57\u6c7a\u5b9a\u61c9\u8a72\u5728\u591a\u9577\u6642\u9593\u5167\u56de\u61c9
          • Phi Accrual \u52d5\u614b\u8abf\u6574 Timeout \u6642\u9593
          • \u6296\u52d5\u7de9\u885d\uff08jitter buffer\uff09\u8ce6\u4e88\u6642\u9593\u4e00\u4e9b\u4e82\u6578\uff0c\u907f\u514d\u585e\u8eca

          \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

          • \u82e5\u8a0a\u606f\u91cf\u8f03\u5927\uff0c\u53ef\u80fd\u6703\u50b3\u9001\u591a\u500b\u5c01\u5305\uff0c\u4e0d\u540c\u5c01\u5305\u6703\u6709\u4e0d\u540c\u6392\u968a\u7a0b\u5ea6\u548c\u4e0d\u540c\u8def\u5f91\uff0c\u56e0\u6b64\u6703\u51fa\u73fe\u5ef6\u9072\u548c\u4e82\u5e8f\u3002
          • \u5982\u679c\u767c\u73fe\u91dd\u5c0d\u7279\u5b9a\u76ee\u6a19\u7684\u50b3\u9001\u53d7\u5230\u9650\u5236\uff0c\u6b64\u6642\u5f88\u53ef\u80fd\u9762\u81e8_\u53cd\u58d3_\uff08backpressure\uff09
          • \u57f7\u884c\u7dd2\u6392\u968a\uff0c\u9032\u800c\u5f71\u97ff\u5c01\u5305\u7684\u50b3\u9001\uff0cVM \u56e0\u70ba QoS\uff08Quality of Service\uff0c\u8ce6\u4e88\u5404\u57f7\u884c\u7dd2\u6b0a\u9650\u7b49\u7d1a\u548c\u91cd\u8981\u7a0b\u5ea6\uff09\u7684\u95dc\u4fc2\u53ef\u80fd\u66f4\u56b4\u91cd
          • \u58de\u9130\u5c45\uff08noisy neighbor\uff09

          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\u65e5\u6642\u9418\uff08Time-of-Day\uff09
          • \u908f\u8f2f\u6642\u9418\uff08Monotoni clock\uff09

          \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

          • PHP
          • time
          • hrtime
          • Node.js
          • Date.now
          • process.hrtime
          "},{"location":"feedback/designing-data-intensive-applications/distributed-env/#ntp","title":"NTP","text":"

          \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

          • \u82e5\u76f8\u5dee\u904e\u5927\uff0c\u5247\u6703\u66ab\u505c\u540c\u6b65\u4e26\u5f37\u5236\u91cd\u8a2d
          • \u53bb\u56de\u7684\u7db2\u8def\u5ef6\u9072\u5dee\u7570\u904e\u5927\u6703\u5927\u5e45\u964d\u4f4e\u6821\u6642\u7684\u7cbe\u6e96\u5ea6
          • \u958f\u79d2\u554f\u984c
          • VM \u7684\u77f3\u82f1\u9707\u76ea\u5668\u662f\u865b\u64ec\u7684\uff0c\u4e5f\u5c31\u662f\u6703\u53d7\u5230 CPU \u5f71\u97ff\uff0c\u800c\u964d\u4f4e\u6e96\u78ba\u6027
          • NTP Server \u7684\u932f\u8aa4\u8a2d\u5b9a
          • \u9632\u706b\u7246\u64cb\u4f4f\u548c NTP \u7684\u9023\u7dda
          "},{"location":"feedback/designing-data-intensive-applications/distributed-env/#ntp-\u4e4b\u5916","title":"NTP \u4e4b\u5916","text":"

          \u9664\u4e86 NTP \u4e4b\u5916\uff0c\u9084\u6709\u54ea\u4e9b\u6821\u6642\u65b9\u5f0f\uff1a

          • \u6b50\u6d32\u8ca1\u7d93\u5e02\u5834\u5100\u5668\u6307\u5357\u900f\u904e\u9ad8\u7cbe\u6e96\u7684\u5728\u5730\u6642\u9418\uff0c\u7372\u5f97\u7cbe\u6e96\u7684\u6642\u9593\u4f86\u907f\u514d\u80a1\u5e02\u7684\u7570\u5e38\u3002
          • GPS \u900f\u904e Precision Time Protocal(PTP) \u4f86\u7372\u5f97\u9ad8\u7cbe\u6e96\u7684\u6642\u9593

          \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

          "},{"location":"feedback/designing-data-intensive-applications/distributed-env/#google-spanner","title":"Google Spanner","text":"

          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

          • intro
          • TrueTime

          \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

          • cAdvisor
          "},{"location":"feedback/designing-data-intensive-applications/distributed-env/#\u57f7\u884c\u7dd2\u5ef6\u5b95","title":"\u57f7\u884c\u7dd2\u5ef6\u5b95","text":"

          \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":"
          • OS \u5c64\u9762
          • VM \u6703\u88ab\u66ab\u505c\uff08suspended\uff09\uff0c\u88ab\u66ab\u505c\u6642 Host \u6703\u958b\u59cb\u628a VM \u7684\u8cc7\u6599\u8f38\u51fa\u5230 FileSystem \u4e2d\uff0c\u4e26\u7b49\u5f85\u554f\u984c\u8655\u7406\u5b8c\u5f8c\u5fa9\u539f\uff08resumed\uff09\uff0c\u9019\u904e\u7a0b\u6703\u4f9d\u8cf4\u65bc\u7cfb\u7d71\u6a94\u6848\u7684 I/O\uff0c\u53ef\u80fd\u6703\u8017\u6642\u975e\u5e38\u4e45\u3002
          • Memory swapping \u6703\u8b93\u8a18\u61b6\u9ad4\u4e0d\u5e38\u7528\u7684\u6771\u897f\u653e\u9032\u78c1\u789f\u4e2d\uff0c\u4f46\u662f\u5728\u4e00\u4e9b\u72c0\u6cc1\u9019\u53ef\u80fd\u6703\u88ab\u53cd\u8986\u89f8\u767c\u3002
          • CPU \u6703\u57f7\u884c\u4e0a\u4e0b\u6587\u4ea4\u63db\uff08context-switch\uff09\u597d\u8b93 CPU \u53ef\u4ee5\u6709\u6548\u7684\u88ab\u591a\u57f7\u884c\u5e8f\u5229\u7528\u3002\u9019\u5c31\u53ef\u80fd\u9020\u6210\u4e3b\u8981\u670d\u52d9\u88ab\u5176\u4ed6\u670d\u52d9\u4e2d\u65b7
          • \u7a0b\u5e8f\u5c64\u9762
          • \u6709\u4e9b\u52d5\u614b\u578b\u5225\u7684\u8a9e\u8a00\u6703\u5b9a\u671f\u5b9a\u91cf\u57f7\u884c\u5783\u573e\u56de\u6536\uff08Garbage Collection, GC\uff09\uff0c\u8a2d\u5b9a\u4e0d\u6070\u7576\u53ef\u80fd\u6703\u8b93\u4ed6\u5ef6\u5b95\u7a0b\u5e8f\u5176\u4ed6\u904b\u4f5c\uff08\u4f8b\u5982\u5546\u52d9\u908f\u8f2f\u7684\u7a0b\u5f0f\u78bc\uff09\u7684\u57f7\u884c
          • \u6709\u4e9b\u8a9e\u8a00\u6703\u5b9a\u671f\u8b80\u53d6\u7a0b\u5f0f\u78bc\uff0c\u4e5f\u5c31\u662f\u57f7\u884c\u8cc7\u6599\u7684 I/O\uff0c\u800c\u9019\u500b\u884c\u70ba\u53ef\u80fd\u6703\u56e0\u70ba\u7cfb\u7d71\u78c1\u789f I/O \u6548\u80fd\u53d7\u9650\u800c\u88ab\u8feb\u5ef6\u5b95\u6240\u6709\u76f8\u95dc\u7a0b\u5e8f\u3002
          "},{"location":"feedback/designing-data-intensive-applications/distributed-env/#\u591a\u4e00\u5c64\u570d\u6b04","title":"\u591a\u4e00\u5c64\u570d\u6b04","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

          • \u4f9d\u8cf4\u65bc\u5c08\u9580\u89e3\u6c7a\u5206\u6563\u5f0f\u7cfb\u7d71\u7684\u5de5\u5177
          • Confluent
          • etcd
          • ZooKepper
          • \u7a69\u5b9a\u7684\u6642\u9593
          • \u5982\u679c\u516c\u53f8\u672c\u4f86\u5c31\u6709\u4e00\u7cfb\u5217\u7528\u4f86\u8655\u7406\u932f\u8aa4\u72c0\u614b\u7684\u6a5f\u5236\uff08\u4f8b\u5982\u822a\u7a7a\u516c\u53f8\u8a02\u7968\u932f\u8aa4\u3001\u7dda\u4e0a\u5546\u5834\u5bc4\u932f\u5305\u88f9\uff09\uff0c\u7576\u767c\u751f\u9019\u4e9b\u5c11\u898b\u7684\u7af6\u8cfd\u72c0\u6cc1\u6642\uff0c\u6211\u5011\u5c31\u53ef\u4ee5\u900f\u904e\u65e2\u6709\u8655\u7406\u932f\u8aa4\u7684\u6a5f\u5236\u4f86\u56de\u61c9\u9019\u4e9b\u5ba2\u6236\uff0c\u7562\u7adf\u5982\u679c\u8981\u8b93\u7cfb\u7d71\u64c1\u6709\u9ad8\u4e00\u81f4\u6027\u9700\u8981\u4ed8\u51fa\u4e00\u5b9a\u7684\u4ee3\u50f9\uff0c\u800c\u9019\u4ee3\u50f9\u4e26\u4e0d\u6703\u4f4e\u65bc\u65e5\u5e38\u8655\u7406\u5ba2\u6236\u72c0\u614b\u7684\u6210\u672c\u3002
          "},{"location":"feedback/designing-data-intensive-applications/distributed-ft/","title":"\u5206\u6563\u5f0f\u8cc7\u6599\u5eab\u7684\u5bb9\u932f","text":"

          \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

          • \u7db2\u8def\uff0c\u4ed6\u6703\u6709 \u932f\u5e8f \u3001 \u907a\u5931 \u3001 \u5ef6\u9072 \u3001 \u91cd\u8907 \u7684\u554f\u984c
          • \u7db2\u8def\u600e\u9ebc\u50b3
          • \u7db2\u8def\u50b3\u4e86\u4ec0\u9ebc
          • \u6642\u9418\uff0c\u4ed6\u6703\u6709 \u4e0d\u51c6 \u3001 \u8df3\u6642 \u3001 \u958f\u79d2 \u7684\u554f\u984c
          • NTP
          • \u57f7\u884c\u5e8f\uff0c\u4ed6\u6703\u6709 \u5ef6\u5b95 \u7684\u554f\u984c

          \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

          • \u55ae\u4e00\u7bc0\u9ede\u4e2d\uff0c\u4e00\u81f4\u6027\u4ee3\u8868\u4e26\u884c\u8acb\u6c42\u9020\u6210\u7684\u7af6\u8cfd\u72c0\u6cc1\u7684\u8655\u7406\u3002
          • \u5206\u6563\u5f0f\u7cfb\u7d71\u4e2d\uff0c\u4e00\u81f4\u6027\u4ee3\u8868\u5982\u4f55\u7dad\u6301\u591a\u53f0\u8cc7\u6599\u5eab\u5230\u76f8\u4f3c\u7684\u72c0\u614b\u3002
          "},{"location":"feedback/designing-data-intensive-applications/distributed-ft/#\u6709\u54ea\u4e9b\u5bb9\u932f\u65b9\u5f0f","title":"\u6709\u54ea\u4e9b\u5bb9\u932f\u65b9\u5f0f","text":"

          \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

          • linearizability
          • strict serializability
          • strong one-copy serializability
          • atomic consistency
          • strong consistency
          • immediate consistency
          • external consistency
          "},{"location":"feedback/designing-data-intensive-applications/distributed-ft/#\u9d3f\u820d\u7406\u8ad6","title":"\u9d3f\u820d\u7406\u8ad6","text":"

          \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":"
          • \u9ad8\u6210\u672c
          • \u597d\u7406\u89e3

          \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

          "},{"location":"feedback/designing-data-intensive-applications/distributed-ft/#\u548c\u5168\u57df\u9806\u5e8f\u7684\u95dc\u4fc2","title":"\u548c\u5168\u57df\u9806\u5e8f\u7684\u95dc\u4fc2","text":"

          \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

          • Challenges to Adopting Stronger Consistency at Scale
          • Causality Is Expensive

          \u4e00\u4e9b\u8cc7\u6599\u5eab\u5617\u8a66\u5728\u6eff\u8db3\u56e0\u679c\u95dc\u4fc2\u6642\uff0c\u7d66\u4e88\u6548\u80fd\u548c\u53ef\u7528\u6027

          • Stronger Semantics for Low-Latency Geo-Replicated Storage
          • SwiftCloud
          • Bolt-on
          "},{"location":"feedback/designing-data-intensive-applications/distributed-ft/#\u5168\u57df\u9806\u5e8f","title":"\u5168\u57df\u9806\u5e8f","text":"

          \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":"
          • \u5404\u500b\u8cc7\u6599\u5eab\u7522\u81ea\u5df1\u7684\u7248\u672c\uff08\u4f8b\u5982\u524d\u7db4 ID\uff09
          • \u6642\u9593\u6233\u8a18\uff0c\u6642\u9593\u662f\u4e0d\u6e96\u7684
          • \u5404\u500b\u8cc7\u6599\u5eab\u4f7f\u7528\u7bc4\u570d\u5167\u7684\u7248\u672c\uff0c\u4f8b\u5982 \u8cc7\u6599\u5eab A \u4f7f\u7528 ID 1 \uff5e 100\u3001 \u8cc7\u6599\u5eab B \u4f7f\u7528 ID 101 \uff5e 200

          \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

          • \u524d\u8005\u662f\u8a66\u8457\u8655\u7406\u5206\u6563\u5f0f\u7cfb\u7d71\u4e0b\u7684\u56e0\u679c\u95dc\u4fc2
          • \u5f8c\u8005\u662f\u907f\u514d\u4e26\u884c\u8655\u7406\u7684\u76f8\u4e92\u5f71\u97ff\uff08\u6bcf\u6b21\u7570\u52d5\u8a72\u503c\uff0c\u6703\u589e\u52a0\u4ed6\u7684\u7248\u672c\uff09
          "},{"location":"feedback/designing-data-intensive-applications/distributed-ft/#\u5168\u57df\u9806\u5e8f\u5ee3\u64ad","title":"\u5168\u57df\u9806\u5e8f\u5ee3\u64ad","text":"

          \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

          • \u6210\u529f\u9001\u8a0a\u606f\u5230\u7bc0\u9ede
          • \u7576\u7db2\u8def\u7b49\u554f\u984c\u5c0e\u81f4\u7bc0\u9ede\u5931\u80fd\uff0c\u5c31\u6703\u5617\u8a66\u76f4\u5230\u4ed6\u6210\u529f\u70ba\u6b62
          • \u8a0a\u606f\u662f\u6309\u7167\u9806\u5e8f\u88ab\u57f7\u884c\u7684

          \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

          • \u5728\u4e00\u500b\u62bd\u8c61\u65e5\u8a8c\uff08\u900f\u904e\u5168\u57df\u9806\u5e8f\u5ee3\u64ad\u9054\u6210\uff09\u9644\u52a0\uff08append\uff09\u4e00\u500b\u8acb\u6c42\uff1a\u6211\u8981\u8b80\u73fe\u5728\u4f4f\u9662\u91ab\u751f\u7684\u4eba\u6578
          • \u5411\u9019\u500b\u65e5\u8a8c\u53d6\u5f97\u525b\u525b\u8acb\u6c42\u7684\u7de8\u865f id1
          • \u505a\u4efb\u4f55\u5f97\u5230\u9019\u500b\u503c\u7684\u908f\u8f2f\u5224\u65b7
          • \u767c\u51fa\u53e6\u4e00\u500b\u9810\u5148\u8acb\u6c42\uff08\u4e26\u4e0d\u6703\u57f7\u884c\uff0c\u50c5\u4f5c\u5ba3\u544a\uff09\uff1a\u6211\u8981\u8b93\u9019\u500b\u4f4f\u9662\u91ab\u751f\u4f11\u5047
          • \u53d6\u5f97\u525b\u525b\u9810\u5148\u8acb\u6c42\u7684\u7de8\u865f idn
          • \u78ba\u4fdd id1 \u548c idn \u9593\u6240\u6709\u8acb\u6c42\u90fd\u88ab\u57f7\u884c\uff08id(n-1) \u5f88\u53ef\u80fd\u6703\u6bd4 idn \u665a\u4f86\uff09
          • \u57f7\u884c\u8acb\u6c42 idn\uff0c\u4e26\u518d\u9644\u52a0\u81f3\u62bd\u8c61\u65e5\u8a8c\u4e2d
          "},{"location":"feedback/designing-data-intensive-applications/distributed-ft/#\u8b80\u53d6\u6642\u7684\u7dda\u6027\u7cfb\u7d71","title":"\u8b80\u53d6\u6642\u7684\u7dda\u6027\u7cfb\u7d71","text":"

          \u82e5\u8981\u8b93\u8b80\u53d6\u7684\u8acb\u6c42\u9054\u6210\u7dda\u6027\u7cfb\u7d71\uff0c\u53ef\u4ee5\u6709\u5e7e\u7a2e\u505a\u6cd5\uff1a

          • \u628a\u8b80\u53d6\u8acb\u6c42\u653e\u9032\u62bd\u8c61\u65e5\u8a8c\u4e2d\uff0c\u78ba\u4fdd\u8b80\u53d6\u8acb\u6c42\u4e4b\u524d\u7684\u6240\u6709\u8acb\u6c42\u90fd\u88ab\u57f7\u884c\uff08etcd \u63a1\u7528\u9019\u505a\u6cd5\uff09
          • \u78ba\u4fdd\u62bd\u8c61\u65e5\u8a8c\u4e2d\u7576\u4e0b\u6700\u65b0\u7684\u8acb\u6c42\u88ab\u57f7\u884c\uff0c\u518d\u57f7\u884c\u8b80\u53d6\uff08ZooKeeper \u63a1\u7528\u9019\u505a\u6cd5\uff09

          \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":"
          • \u9818\u8896\u9078\u8209
          • \u5168\u57df\u9806\u5e8f\u5ee3\u64ad
          • \u5206\u6563\u5f0f\u9396\uff08\u570d\u6b04\u9396\uff09
          • \u5206\u6563\u5f0f\u4ea4\u6613\u6a5f\u5236\uff0c\u7576\u591a\u500b\u8cc7\u6599\u5eab\u57f7\u884c\u76f8\u540c\u7684\u7570\u52d5\uff08\u900f\u904e\u5168\u57df\u9806\u5e8f\u5ee3\u64ad/\u5171\u8b58\u6f14\u7b97\u6cd5\uff09\u6642\uff0c\u6709\u5e7e\u500b\u8cc7\u6599\u5eab\u62d2\u7d55\u8a72\u6b21\u7570\u52d5\uff08\u56e0\u70ba\u72c0\u614b\u4e0d\u5141\u8a31\uff0c\u5982\u91cd\u8907\u8a3b\u518a\u4f7f\u7528\u8005\uff0c\u6216\u7bc0\u9ede\u5931\u80fd\uff09\uff0c\u9700\u8981\u8b93\u5176\u4ed6\u5df2\u7d93\u57f7\u884c\u7570\u52d5\u7684\u7bc0\u9ede\u5fa9\u539f\uff08abort\uff09\u3002
          • \u5075\u6e2c\u6a5f\u5236\uff0c\u7576\u6709\u7bc0\u9ede\u5931\u80fd\u6642\u9700\u8981\u6709\u4eba\u5224\u5b9a\u5176\u5931\u80fd\uff0c\u6216\u8005\u5075\u6e2c\u76ee\u524d\u6709\u54ea\u4e9b\u670d\u52d9\u6b63\u5728\u7dda\u4e0a\uff0c\u82e5\u53ea\u6709\u55ae\u4e00\u7bc0\u9ede\u505a\u5224\u65b7\u5c31\u5f88\u5bb9\u6613\u51fa\u932f\u3002
          • \u7368\u7acb\u9650\u5236\uff0c\u4f8b\u5982\u4f7f\u7528\u8005\u8a3b\u518a\u5e33\u865f
          "},{"location":"feedback/designing-data-intensive-applications/distributed-ft/#\u5be6\u4f5c","title":"\u5be6\u4f5c","text":"
          • 2PC(3PC) with XA
          • \u5171\u8b58\u6f14\u7b97\u6cd5

          \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

          • \u5354\u8abf\u8005\u767c\u9001\u7570\u52d5\u8acb\u6c42
          • \u7bc0\u9ede\u9810\u4f5c\u7570\u52d5\u8acb\u6c42\uff0c\u6aa2\u67e5\u662f\u5426\u80fd\u8655\u7406\u8a72\u8acb\u6c42\uff08\u4f8b\u5982\u4f7f\u7528\u8005\u5e33\u865f\u7533\u8acb\u662f\u5426 uniqueness\uff09
          • \u5354\u8abf\u8005\u78ba\u8a8d\u6bcf\u500b\u7bc0\u9ede\u90fd\u80fd\u8655\u7406
          • \u9019\u4e4b\u524d\u4efb\u4e00\u7bc0\u9ede\u7121\u6cd5\u56de\u61c9\u6216\u62d2\u7d55\u8acb\u6c42\u90fd\u6703\u8b93\u6240\u6709\u7bc0\u9ede\u653e\u68c4\u8a72\u7570\u52d5
          • \u5354\u8abf\u8005\u7d00\u9304\u5404\u7bc0\u9ede\u7684\u7d50\u679c\uff08\u63d0\u4ea4\u6216\u8005\u653e\u68c4\uff09\u4e26\u6c7a\u5b9a\u6700\u7d42\u7d50\u679c
          • \u5354\u8abf\u8005\u901a\u77e5\u5404\u7bc0\u9ede\u7d50\u679c\uff0c\u4e14\u5728\u78ba\u4fdd\u5404\u7bc0\u9ede\u90fd\u6536\u5230\u7d50\u679c\u4e4b\u524d\u6703\u4e00\u76f4\u5617\u8a66\u901a\u77e5\u4e26\u62d2\u7d55\u4efb\u4f55\u65b0\u7684\u76f8\u95dc\u7570\u52d5\u8acb\u6c42

          \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":"
          • Zab (ZooKeeper)
          • Raft (etcd)
          • Paxos (Google Spanner, ...)
          • ...

          \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

          • \u4e00\u81f4\u6027\uff0c\u6240\u6709\u7bc0\u9ede\u6700\u7d42\u7684\u7d50\u679c\u662f\u4e00\u6a23\u7684
          • \u552f\u4e00\u6027\uff0c\u6240\u6709\u7bc0\u9ede\u6700\u7d42\u7684\u7d50\u679c\u53ea\u6709\u4e00\u500b
          • \u5408\u6cd5\u6027\uff0c\u4efb\u4e00\u7d50\u679c\u90fd\u662f\u67d0\u4e00\u7bc0\u9ede\u63d0\u51fa\u7684
          • \u5bb9\u932f\u6027\uff0c\u4efb\u4e00\u7bc0\u9ede\u7684\u5931\u80fd\u4e0d\u5f71\u97ff\u5176\u4ed6\u7bc0\u9ede\u6c7a\u5b9a

          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

          "},{"location":"feedback/designing-data-intensive-applications/distributed-ft/#\u8a0e\u8ad6\u4e00\u4e0b\u5171\u8b58\u6f14\u7b97\u6cd5","title":"\u8a0e\u8ad6\u4e00\u4e0b\u5171\u8b58\u6f14\u7b97\u6cd5","text":"

          \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":"
          • \u5206\u5340\u8981\u6ce8\u610f\u8ca0\u8f09_\u504f\u659c_\uff0c\u5176\u8655\u7406\u65b9\u5f0f\u6709\uff1a
          • \u7bc4\u570d\u5206\u5340
          • \u96dc\u6e4a\u5206\u5340
          • \u8def\u7531\u8981\u6709\u5171\u8b58\u8cc7\u6599\uff0c\u5176\u8655\u7406\u65b9\u5f0f\u6709\uff1a
          • \u7bc0\u9ede
          • \u4ee3\u7406\u4eba
          • \u4f7f\u7528\u8005
          • \u5e73\u8861\u8981\u6e1b\u5c11 I/O\uff0c\u5176\u8655\u7406\u65b9\u5f0f\u6709\uff1a
          • \u56fa\u5b9a\u5340\u6578
          • \u56fa\u5b9a\u5340\u9577
          • \u56fa\u5b9a\u5404\u7bc0\u9ede\u5340\u6578

          \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

          • \u7b2c\u4e00\u500b\u5b57\u6bcd\uff0c\u56e0\u70ba\u5b57\u6bcd\u662f\u548c\u5730\u5340\u6709\u95dc\u4fc2\u7684\uff0c\u9019\u6703\u9020\u6210\u53f0\u5317\u7684\u4f7f\u7528\u8005\u6578\u91cf\u5927\u65bc\u82b1\u84ee\u7684\u4f7f\u7528\u8005\uff0c\u9020\u6210\u8ca0\u8f09\u504f\u659c\u3002
          • \u524d\u56db\u500b\u6578\u5b57\uff0c\u56e0\u70ba\u7b2c\u4e00\u500b\u6578\u5b57\u4ee3\u8868\u7537\u5973\uff0c\u5c31\u53ef\u80fd\u56e0\u70ba\u4e0d\u540c\u6708\u4efd\u6c42\u8077\u8005\u7684\u7537\u5973\u6bd4\u4f8b\u4e0d\u540c\uff08\u4f8b\u5982\u9000\u4f0d\u6642\u6bb5\u7684\u6c42\u8077\u8005\u4e2d\u7537\u751f\u5927\u65bc\u5973\u751f\uff09\u800c\u9020\u6210\u8ca0\u8f09\u504f\u659c\u3002
          • \u5f8c\u56db\u78bc\uff0c\u770b\u8d77\u4f86\u53ef\u4ee5\u5e73\u5747\u5206\u914d\u4e86\uff0c\u4f46\u4eca\u5929\u5982\u679c\u6211\u8981\u627e\u53f0\u5317\u5730\u5340\u7684\u6c42\u8077\u8005\u6709\u591a\u5c11\u5462\uff1f

          \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":"
          • \u7167\u9806\u5e8f\u6392
          • \u5bb9\u6613\u88fd\u9020\u71b1\u9ede
          • \u9700\u8981\u5236\u5b9a\u908a\u754c
          • \u96dc\u6e4a\u5f8c\u7167\u9806\u5e8f\u6392
          • \u7bc4\u570d\u641c\u5c0b\u6548\u80fd\u4f4e

          \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, Couchbase, Voldemort\uff0cMongoDB \u5247\u662f\u6703\u76f4\u63a5\u5c0d\u6240\u6709\u8cc7\u6599\u5eab\u641c\u5c0b\u3002

          \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

          \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

          \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

          • Espresso \u4f7f\u7528 Helix (\u5176\u5e95\u5c64\u4ecd\u4f9d\u8cf4\u65bc ZooKeeper)
          • HBase\u3001SolrCloud\u3001Kafka \u4f7f\u7528 ZooKeeper
          • MongoDB \u4f7f\u7528\u81ea\u5df1\u7684 CSRS
          "},{"location":"feedback/designing-data-intensive-applications/distributed-partition/#\u8cc7\u6599\u5eab\u5f7c\u6b64\u5354\u5546","title":"\u8cc7\u6599\u5eab\u5f7c\u6b64\u5354\u5546","text":"

          \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":"
          • \u8981\u76e1\u91cf\u5e73\u5747\u5206\u6563
          • \u4e0d\u80fd\u4e2d\u65b7\u8acb\u6c42
          • \u53ea\u79fb\u52d5\u5fc5\u8981\u7684\u8cc7\u6599
          "},{"location":"feedback/designing-data-intensive-applications/distributed-partition/#\u6709\u54ea\u4e9b\u65b9\u5f0f","title":"\u6709\u54ea\u4e9b\u65b9\u5f0f","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

          • \u56fa\u5b9a\u5340\u6578
          • \u5340\u7684\u6578\u91cf\u4ee3\u8868\u7bc0\u9ede\u6700\u5927\u6578\u91cf
          • \u4eba\u5de5\u6c7a\u5b9a\u8a72\u6578\u3002
            • \u592a\u591a\u6703\u9020\u6210\u7ba1\u7406\u56f0\u96e3\uff08\u8cc7\u6599\u9700\u8981\u88ab\u5283\u5206\u5f97\u5f88\u7d30\uff09
            • \u592a\u5c11\u53ef\u80fd\u6703\u5206\u914d\u4e0d\u5e73\u5747\uff08\u6709\u9918\u6578\uff09
          • Riak\u3001Elasticsearch\u3001Couchbase\u3001Voldemort
          • \u56fa\u5b9a\u5340\u9577
          • \u7576\u5340\u9577\u5230\u4e00\u5b9a\u5927\u5c0f\u6642\uff0c\u5c0d\u534a\u62c6\uff1b\u592a\u5c0f\u6642\u5247\u5408\u4f75
          • \u53e2\u96c6\u4e00\u958b\u59cb\u6642\u53ef\u80fd\u53ea\u6709\u4e00\u5169\u500b\u5206\u5340\uff0c\u53ef\u4ee5\u8a2d\u5b9a\u6700\u4f4e\u5340\u6578
          • HBase\uff08\u4f7f\u7528 HDFS \u5206\u914d\u5404\u5340\uff09\u3001RethinkDB\u3001MongoDB
          • \u6bcf\u7bc0\u9ede\u56fa\u5b9a\u5340\u6578
          • \u65b0\u589e\u7bc0\u9ede\u6642\uff0c\u820a\u7bc0\u9ede\u5206\u4ed6\u4e00\u4e9b\u8cc7\u6599
          • \u7b26\u5408\u76f4\u89ba\uff1a\u8cc7\u6599\u5eab\u8d8a\u591a\uff0c\u5340\u8d8a\u591a
          • \u901a\u5e38\u9069\u7528\u65bc\u96dc\u6e4a\u5206\u5340
          • Cassandra\u3001Ketama

          \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":"
          • \u5982\u4f55\u6574\u5408\u4e0d\u540c\u5206\u5340\u7684\u8cc7\u6599
          • \u6b21\u7d22\u5f15
          "},{"location":"feedback/designing-data-intensive-applications/distributed-partition/#massive-parallel-processingmpp","title":"Massive Parallel Processing\uff08MPP\uff09","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":"
          • \u672c\u5730\u7d22\u5f15\uff08local index\uff09
          • \u5168\u57df\u7d22\u5f15\uff08global index\uff09

          \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

          \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

          • \u7576\u5728\u8b80\u4f60\u53ef\u4ee5\u7de8\u8f2f\u7684\u8cc7\u6599\uff08\u4f8b\u5982\uff0c\u500b\u4eba\u8cc7\u6599\uff09\u7684\u6642\u5019\uff0c\u4f7f\u7528 Leader\u3002
          • \u5982\u679c\u4f60\u53ef\u4ee5\u7de8\u8f2f\u7684\u8cc7\u6599\u5f88\u591a\uff0c\u6703\u5c0e\u81f4 Leader \u8ca0\u64d4\u5f88\u91cd
          • \u7d00\u9304\u4e0a\u6b21\u7de8\u8f2f\u7684\u6642\u9593\uff0c\u4e94\u5206\u9418\u5167\u7684\u8b80\u53d6\u4f7f\u7528 Leader
          • \u7576\u4f7f\u7528\u8005\u662f\u5728\u4e0d\u540c\u88dd\u7f6e\u8b80\u53d6\u6642\uff0c\u6240\u8b02\u7684\u300c\u7d00\u9304\u300d\u5c31\u7121\u6cd5\u5728\u61c9\u7528\u7a0b\u5f0f\u9762\u4e2d\u505a\u5230\u3002

          \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

          • \u64f4\u589e\u6027\u3002\u55ae\u53f0\u6a5f\u5668\u80fd\u57f7\u884c\u7684\u904b\u7b97\u6709\u9650\uff0c\u8b93\u8cc7\u6599\u5eab\u9032\u884c\u8907\u88fd\u4ee3\u8868\u53ef\u4ee5\u7528\u5169\u53f0\u6a5f\u5668\u7684\u904b\u7b97\u80fd\u529b\u53d6\u4ee3\u4e00\u53f0\u5169\u500d\u904b\u7b97\u80fd\u529b\u7684\u6a5f\u5668\uff0c\u9032\u800c\u964d\u4f4e\u6210\u672c\uff08\u5176\u6210\u672c\u7684\u6210\u9577\u66f2\u7dda\u5206\u5225\u662f\u7dda\u6027\u548c\u66f2\u7dda\uff09\u3002
          • \u9ad8\u53ef\u7528\u6027\u3002\u7576\u6a5f\u5668\u58de\u4e86\uff0c\u670d\u52d9\u4ecd\u80fd\u904b\u884c\uff0c\u9664\u6b64\u4e4b\u5916\u6709\u6642\u70ba\u4e86\u7dad\u904b\uff08\u8edf\u9ad4\u5347\u7248\uff09\u5fc5\u9808\u8981\u5148\u505c\u6b62\u4e00\u53f0\u6a5f\u5668\u7684\u670d\u52d9\uff0c\u7b49\u4ed6\u5b8c\u6210\u7dad\u904b\u518d\u8b93\u4ed6\u7e7c\u7e8c\u5c0d\u5916\u670d\u52d9\u3002
          • \u4f4e\u6f5b\u6642\u3002\u5206\u6563\u6a5f\u5668\u65bc\u4e16\u754c\u5404\u5730\uff0c\u8b93\u4e0d\u540c\u5730\u65b9\u7684\u4f7f\u7528\u8005\u53ef\u4ee5\u5c31\u8fd1\u4f7f\u7528\u670d\u52d9\uff0c\u964d\u4f4e\u6f5b\u6642\u3002
          "},{"location":"feedback/designing-data-intensive-applications/distributed-replication/#\u55ae\u53f0\u6a5f\u5668","title":"\u55ae\u53f0\u6a5f\u5668","text":"

          \u55ae\u53f0\u6a5f\u5668\u5176\u5be6\u5728\u5176\u6210\u9577\u904e\u7a0b\u4e5f\u662f\u6709\u4e00\u6a23\u7684\u554f\u984c\u3002

          • \u64f4\u589e\u6027\uff1a\u96a8\u8457\u4e00\u53f0\u6a5f\u5668\u7684\u539f\u59cb\u8a2d\u5099\u6c92\u8fa6\u6cd5\u6eff\u8db3\u904b\u7b97\u6642\uff0c\u6211\u5011\u53ef\u4ee5\u589e\u52a0\u4ed6\u7684 CPU/Memory/Disk\u3002
          • \u5bb9\u932f\u6027\uff1a\u7576\u90e8\u5206 CPU \u58de\u4e86\uff0c\u4e00\u4e9b\u9ad8\u968e\u96fb\u8166\u751a\u81f3\u5141\u8a31\u4e0d\u95dc\u6a5f\u7684\u60c5\u6cc1\u4e0b\u7f6e\u63db\u8a2d\u5099\u3002
          • \u4f4e\u6f5b\u6642\uff1a\u5171\u4eab\u78c1\u789f\uff08shared-disk\uff09\u7684\u67b6\u69cb\uff0c\u96d6\u7136\u55ae\u53f0\u6a5f\u5668\u4e0d\u80fd\u5206\u6563\u5404\u5730\uff0c\u4f46\u662f\u53ef\u4ee5\u5728\u6709\u9650\u5340\u57df\u5167\u900f\u904e\u4e00\u4e9b\u6a5f\u523612\u9054\u5230\u591a\u500b\u6a5f\u5668\u5171\u4eab\u540c\u4e00\u500b\u5132\u5b58\u7a7a\u9593\u3002
          "},{"location":"feedback/designing-data-intensive-applications/distributed-replication/#\u7121\u5171\u4eab\u67b6\u69cb","title":"\u7121\u5171\u4eab\u67b6\u69cb","text":"

          \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

          • \u6709\u4e00\u500b \u5354\u8abf\u8005 \u5728\u5e6b\u5fd9
          • \u8cc7\u6599\u5eab\u88e1\u9762\u6709\u4e00\u500b\u9818\u8896\u6c7a\u5b9a\u8cc7\u6599\u600e\u9ebc\u5b58
          • \u8cc7\u6599\u5eab\u5404\u81ea\u70ba\u653f\uff0c\u518d\u5171\u540c\u6c7a\u5b9a

          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\uff1a\u8cc7\u6599\u5eab\u9593\u7684\u8cc7\u6599\u540c\u6b65
          • \u5206\u5340\uff1a\u628a\u8cc7\u6599\u5206\u88dd

          \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

          • \u8907\u88fd\uff1a\u9ad8\u53ef\u7528\u6027\u3001\u5099\u4efd
          • \u5206\u5340\uff1a\u4e00\u53f0\u6a5f\u5668\u4e0d\u5920\u88dd

          \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

          • \u6709\u9818\u8896\u7684\u65b9\u5f0f\u5c31\u662f\u900f\u904e\u50b3\u64ad\u8907\u88fd\u65e5\u8a8c
          • \u7121\u9818\u8896\u7684\u65b9\u5f0f\u5c31\u662f\u5b9a\u671f\u6574\u4f75

          \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

          • \u5982\u4f55\u8655\u7406\u8d95\u5de5\u554f\u984c
          • \u8d95\u5de5\u9020\u6210\u7684\u8907\u6b0a\uff08split brain\uff09
          • \u518d\u770b\u770b\u55ae\u4e00\u9818\u8896\u548c\u591a\u9818\u8896\u5171\u901a\u7684
          • \u540c\u7570\u6b65 \u554f\u984c
          • \u5982\u4f55\u8907\u88fd\u65e5\u8a8c
          • \u6700\u5f8c\u8a0e\u8ad6\u4e00\u4e0b\u70ba\u4ec0\u9ebc\u4e0d\u597d\u64f4\u589e\u548c\u70ba\u4ec0\u9ebc\u64c1\u6709\u9ad8\u4e00\u81f4\u6027
          "},{"location":"feedback/designing-data-intensive-applications/distributed-replication/#\u8d95\u5de5","title":"\u8d95\u5de5","text":"

          \u524d\u9762\u63d0\u7684\u8d95\u5de5\u554f\u984c\uff0c\u9019\u908a\u8a0e\u8ad6\u4e09\u7a2e\u72c0\u6cc1\u3002\u5206\u5225\u662f

          • \u7576\u6709\u65b0\u7684\u8cc7\u6599\u5eab\u8981\u9032\u4f86\u4e00\u8d77\u5206\u64d4\u5de5\u4f5c\u6642
          • \u6709\u4e00\u53f0\u8cc7\u6599\u5eab\u66ab\u6642\u58de\u6389\uff0c\u9700\u8981\u5f9e\u820a\u7684\u72c0\u614b\u8d95\u5de5\u81f3\u6700\u65b0\u72c0\u614b
          • \u82e5\u8a72\u8cc7\u6599\u5eab\u662f\u8ffd\u96a8\u8005\u6642
          • \u82e5\u8a72\u8cc7\u6599\u5eab\u662f\u9818\u8896\u6642
          "},{"location":"feedback/designing-data-intensive-applications/distributed-replication/#\u65b0\u7684\u8ffd\u96a8\u8005","title":"\u65b0\u7684\u8ffd\u96a8\u8005","text":"

          \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

          • \u5efa\u7acb\u3001\u4f7f\u7528\u5feb\u7167\u3002\u5927\u90e8\u5206\u8cc7\u6599\u5eab\u90fd\u5167\u5efa\u5efa\u7acb\u5feb\u7167\u529f\u80fd\uff0c\u6709\u4e9b\u9700\u8981\u5916\u90e8\u5957\u4ef6\uff0c\u4f8b\u5982 MySQL \u7684 innobackupex
          • \u88dc\u4e0a\u6700\u65b0\u8cc7\u6599\u3002\u88dc\u4e0a\u6700\u65b0\u8cc7\u6599\u524d\uff0c\u9700\u8981\u77e5\u9053\u5feb\u7167\u5728\u6574\u500b\u6b77\u7a0b\u4e2d\u7684\u4f4d\u7f6e\uff08PostgreSQL \u7684 log sequence \u548c MySQL \u7684 binlog coordinates\uff09\uff0c\u4e26\u5f9e\u9019\u4e4b\u5f8c\u4f7f\u7528\u6211\u5011\u5f8c\u9762\u6703\u63d0\u7684_\u8907\u88fd\u65e5\u8a8c_\u4f86\u88dc\u9f4a\u3002
          • \u6649\u5347\u8ffd\u96a8\u8005\u3002\u6e96\u5099\u6649\u5347\u524d\u7684\u72c0\u614b\u6211\u5011\u7a31\u5176\u70ba catch-up
          "},{"location":"feedback/designing-data-intensive-applications/distributed-replication/#\u8ffd\u96a8\u8005\u91cd\u555f","title":"\u8ffd\u96a8\u8005\u91cd\u555f","text":"

          \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

          • \u5b9a\u671f\u63a2\u6e2c\u5176\u662f\u5426\u5b58\u6d3b\uff0c\u82e5\u6642\u9593\u5167\u6c92\u56de\u61c9\uff0c\u5c31\u5224\u5b9a\u5176\u5931\u80fd\u3002
          • \u900f\u904e\u9078\u8209\uff0c\u6216\u8005\u76f4\u63a5\u4f7f\u7528\u524d\u6b21\u9078\u8209\u6240\u5f97\u51fa\u4f86\u7684\u526f\u9818\u8896\u3002\u4e0d\u904e\u901a\u5e38\u90fd\u662f\u9078\u64c7\u64c1\u6709\u6700\u65b0\u8cc7\u6599\u7684\u8ffd\u96a8\u8005\u3002\u9019\u4e00\u985e\u7684\u9078\u8209\uff0c\u82e5\u6c92\u5beb\u597d\u5c31\u6703\u51fa\u73fe\u8907\u6b0a\u554f\u984c\uff0c\u56e0\u6b64\u901a\u5e38\u9700\u8981\u8b93 \u7bc0\u9ede \u6709\u300c\u5171\u8b58\u300d\uff0c\u4e4b\u5f8c\u6703\u63d0\u3002
          • \u8b93\u5927\u5bb6\u90fd\u77e5\u9053\u8ab0\u662f\u65b0\u7684\u9818\u8896\uff08\u5305\u62ec\u820a\u9818\u8896\u91cd\u555f\u5f8c\u4e5f\u8981\u901a\u77e5\u4ed6\uff09\u3002
          "},{"location":"feedback/designing-data-intensive-applications/distributed-replication/#\u9818\u8896\u5931\u80fd\u9020\u6210\u7684\u554f\u984c","title":"\u9818\u8896\u5931\u80fd\u9020\u6210\u7684\u554f\u984c","text":"
          • \u5c1a\u672a\u540c\u6b65\u7684\u8cc7\u6599\u5982\u679c\u5b8c\u5168\u6368\u68c4\uff0c\u6703\u9020\u6210\u4e0b\u9762\u7684\u554f\u984c\u3002
          • \u591a\u500b\u9818\u8896\u7a31\u70ba\u8907\u6b0a\uff08split-brain\uff09\u72c0\u6cc1\uff0c\u9019\u6642\u82e5\u6c92\u9047\u5230\u4e00\u4e9b\u908a\u969b\u72c0\u6cc1\u4f60\u5f88\u53ef\u80fd\u6703\u540c\u6642\u95dc\u9589\u5169\u500b\u9818\u8896\uff0c\u5c0e\u81f4\u8cc7\u6599\u5eab\u63d0\u4f9b\u7684\u670d\u52d9\u5b8c\u5168\u4e2d\u65b7\u3002\u6240\u4ee5\u5373\u4f7f\u6709\u4e9b\u8cc7\u6599\u5eab\u53e2\u96c6\u63d0\u4f9b\u81ea\u52d5\u91cd\u555f\u9818\u8896\u7684\u6a5f\u5236\uff0c\u5f88\u591a\u7dad\u904b\u4eba\u54e1\u4ecd\u7136\u63a1\u7528\u624b\u52d5\u8abf\u6574\u7684\u65b9\u5f0f\u3002\u5f8c\u9762\u63d0\u7684\u5171\u8b58\u554f\u984c\u5c31\u6703\u8a73\u7d30\u8a0e\u8ad6\u4ec0\u9ebc\u908a\u969b\u60c5\u6cc1\u6703\u9020\u6210\u932f\u8aa4\u5224\u5b9a\u3002
          • \u592a\u5c0f\u7684\u6642\u9593\u5340\u9593\u53ef\u80fd\u6703\u56e0\u70ba\u7db2\u8def\u5ef6\u9072\u5c0e\u81f4\u8f15\u6613\u7684\u91cd\u555f\u9818\u8896\uff0c\u589e\u52a0\u6a5f\u5668\u7684\u8ca0\u64d4\u3002

          \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

          • \u900f\u904e\u8f38\u5165\u7684\u8a9e\u6cd5\uff08SQL\u3001MapReduce \u7b49\u7b49\uff09\u76f4\u63a5\u8907\u88fd\u5230\u5176\u4ed6\u8cc7\u6599\u5eab\u3002\u597d\u8655\u662f\u9019\u7a2e\u65b9\u5f0f\u901a\u5e38\u5f88\u7c21\u55ae\u5be6\u4f5c\u800c\u4e14\u50b3\u905e\u7684\u8cc7\u6599\u901a\u5e38\u5f88\u5c0f\u30025.1 \u7248\u524d\u7684 MySQL \u548c\u7279\u5b9a\u60c5\u6cc1\u4e0b\u7684 VoltDB \u90fd\u6703\u4f7f\u7528\u9019\u65b9\u5f0f\u3002\u5176\u5e36\u4f86\u7684\u554f\u984c\uff1a
          • \u975e\u5e38\u6578\u7684\u8cc7\u6599\u7684\u50b3\u905e\uff0c\u4f8b\u5982 NOW()\u3001RAND()\u3001AUTO_INCR() \u7b49\u7b49\u3002
          • \u82e5\u8cc7\u6599\u662f\u6709\u9650\u5236\u689d\u4ef6\u7684\uff0c\u4f8b\u5982 WHERE <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\u3002
          • \u8cc7\u6599\u5eab\u5728\u66f4\u65b0\u8cc7\u6599\u6642\u6703\u6709\u5f88\u591a\u5176\u4ed6\u88ab\u5f71\u97ff\u7684\u8cc7\u6599\uff0c\u4f8b\u5982\u89f8\u767c\u5668\uff08trigger\uff09\u3001\u8caf\u5b58\u7a0b\u5e8f\uff08stored procedure\uff09\u3001\u53c3\u8003\u9375\uff08reference key\uff09\u3002\u5c0e\u81f4\u57f7\u884c\u7d50\u679c\u53ef\u80fd\u4e00\u6a23\u4f46\u662f\u8cc7\u6599\u5eab\u7684\u6574\u9ad4\u72c0\u614b\u537b\u4e0d\u4e00\u81f4
          • \u7b2c\u4e8c\u7a2e\u65b9\u5f0f\u662f\u76f4\u63a5\u4f7f\u7528 WAL\u3002\u524d\u9762\u5728\u8a0e\u8ad6\u7d22\u5f15\u7684\u6642\u5019\u6709\u63d0\u5230\u5169\u7a2e\u5132\u5b58\u65b9\u5f0f\uff1a\u65e5\u8a8c\u7d50\u69cb\u548c\u9801\u5c0e\u5411\u3002\u65e5\u8a8c\u7d50\u69cb\u672c\u4f86\u5c31\u6709\u5728\u7dad\u6301\u65e5\u8a8c\u4e26\u6301\u7e8c\u5728\u80cc\u666f\u57f7\u884c\u6574\u5408\u58d3\u7e2e\uff0c\u9801\u5c0e\u5411\u5247\u662f\u5229\u7528 WAL \u4fdd\u8b49\u8cc7\u6599\u4e0d\u6703\u88ab\u907a\u5931\u3002\u6211\u5011\u5c31\u53ef\u4ee5\u900f\u904e\u9019\u4e9b\u65e5\u8a8c\u7684\u8cc7\u6599\u9032\u884c\u50b3\u905e\u3002PostgreSQL \u548c Oracle \u7b49\u591a\u500b\u8cc7\u6599\u5eab\u90fd\u4f7f\u7528\u9019\u65b9\u5f0f\u3002\u4e0d\u904e\u6703\u6709\u4e9b\u554f\u984c\uff1a
          • \u901a\u5e38\u65e5\u8a8c\u7684\u8cc7\u6599\u90fd\u5f88\u7d30\uff0c\u751a\u81f3\u7d30\u5230\u54ea\u500b\u78c1\u789f\u7684\u54ea\u500b byte \u6703\u585e\u54ea\u4e9b\u8cc7\u6599\u3002\u9019\u5c0e\u81f4\u8907\u88fd\u65e5\u8a8c\u7684\u8cc7\u6599\u4e0d\u80fd\u5728\u4e0d\u540c\u7248\u672c\u7684\u8cc7\u6599\u683c\u5f0f\u9593\u4f7f\u7528\uff0c\u9032\u800c\u589e\u52a0\u7dad\u904b\u7684\u56f0\u96e3\u5ea6\u3002
          • \u908f\u8f2f\u65e5\u8a8c\u4ecb\u65bc\u4e0a\u8ff0\u5169\u7a2e\u65b9\u5f0f\u7684\u4e2d\u9593\uff0c\u4e0d\u6703\u50cf\u8a9e\u6cd5\u90a3\u6a23\u62bd\u8c61\uff0c\u4f46\u53c8\u4e0d\u6703\u7d30\u5230\u50cf WAL \u90a3\u6a23\u3002\u4f8b\u5982\u8a9e\u6cd5\u662f UPDATE 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
          • \u984d\u5916\u88dc\u5145\u4e00\u7a2e\uff0c\u6709\u53ef\u80fd\u5728\u50b3\u905e\u8cc7\u6599\u6642\u6703\u5e0c\u671b\u6709\u500b\u4e2d\u4ecb\u5668\u5e6b\u52a9\u6211\u5011\u52a0\u4e0a\u4e00\u4e9b\u5ba2\u5236\u7684\u5546\u52d9\u908f\u8f2f\u4fee\u6b63\uff0c\u4f8b\u5982\u52a0\u5bc6\u3001\u7279\u5b9a\u8cc7\u6599\u7684\u4fee\u6b63\u548c\u8655\u7406\u885d\u7a81\u7b49\u7b49\u3002\u9019\u6642\u53ef\u4ee5\u4f7f\u7528 Oracle \u7684 GoldenGate\u3002\u4f60\u4e5f\u53ef\u4ee5\u900f\u904e\u89f8\u767c\u5668\u548c\u8caf\u5b58\u7a0b\u5e8f\u628a\u8cc7\u6599\u532f\u9032\u5176\u4ed6\u8868\u683c\uff08table\uff09\u4e2d\u4f86\u9054\u6210\u4e00\u6a23\u7684\u4e8b\u60c5\u3002\u4f8b\u5982 Oracle \u7684 Databus \u548c Postgres \u7684 Bucardo\u3002\u9019\u4e9b\u65b9\u6cd5\u96d6\u7136\u53ef\u4ee5\u589e\u52a0\u5f88\u591a\u5f48\u6027\uff0c\u4f46\u662f\u56e0\u70ba\u6d89\u53ca\u5230\u61c9\u7528\u7a0b\u5f0f\u908f\u8f2f\u548c\u8cc7\u6599\u5eab\u908f\u8f2f\u9593\u7684\u8f49\u63db\u6240\u4ee5\u901a\u5e38\u5bb9\u6613\u6709\u932f\u800c\u4e14\u6703\u589e\u52a0\u8cc7\u6599\u5eab\u7684\u8ca0\u64d4\u3002
          "},{"location":"feedback/designing-data-intensive-applications/distributed-replication/#\u9069\u5408\u55ae\u4e00\u8cc7\u6599\u4e2d\u5fc3","title":"\u9069\u5408\u55ae\u4e00\u8cc7\u6599\u4e2d\u5fc3","text":"

          \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

          • \u4e86\u89e3\u591a\u9818\u8896\u5e36\u4f86\u54ea\u4e9b\u597d\u3001\u58de\u8655\u3002
          • \u591a\u9818\u8896\u7684\u72c0\u6cc1\u5176\u5be6\u6eff\u5e38\u898b\u7684\uff1f
          • \u4ecb\u7d39\u4e0d\u540c\u62d3\u64b2\uff08topology\uff09\u4e0b\u7684\u60c5\u6cc1\u3002
          • \u56e0\u70ba\u540c\u6642\u6709\u591a\u500b\u8cc7\u6599\u5eab\u5728\u5beb\u5165\uff0c\u5982\u4f55\u8655\u7406\u885d\u7a81\uff1f
          • \u5982\u4f55\u68b3\u7406\u56e0\u679c\u95dc\u4fc2\u3002
          "},{"location":"feedback/designing-data-intensive-applications/distributed-replication/#\u591a\u9818\u8896\u7684\u597d\u8655","title":"\u591a\u9818\u8896\u7684\u597d\u8655","text":"

          \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

          • \u907f\u514d\u885d\u7a81\u3002\u5982\u679c\u53ef\u4ee5\uff0c\u628a\u76f8\u540c\u7684\u8cc7\u6599\u7684\u7de8\u8f2f\u4e1f\u7d66\u540c\u4e00\u500b\u9818\u8896\uff0c\u4f8b\u5982\u4f7f\u7528\u8005\u7de8\u8f2f\u500b\u4eba\u8cc7\u6599\uff0c\u5c31\u628a\u8a72\u4f7f\u7528\u8005\u7684\u6240\u6709\u5beb\u5165\u8acb\u6c42\u4e1f\u5230\u540c\u4e00\u500b\u9818\u8896\uff08\u4e5f\u8a31\u662f\u96e2\u4ed6\u6700\u8fd1\u7684 DC\uff09\u3002\u4f46\u5982\u679c\u540c\u4e00\u6642\u9593\u5730\u7403\u53e6\u4e00\u908a\u6709\u4eba\u4e5f\u5728\u7de8\u8f2f\u76f8\u540c\u4f7f\u7528\u8005\u7684\u8cc7\u8a0a\u6642\uff0c\u9084\u662f\u7121\u53ef\u907f\u514d\u7684\u6709\u885d\u7a81\u3002
          • \u7d66\u4e88\u5404\u5beb\u5165\u8acb\u6c42\u4e00\u500b\u6642\u9593\u6233\u3002\u53ea\u8b93\u6700\u65b0\u7684\u8cc7\u8a0a\u5beb\u5165\uff08Last Write Win\uff0cLWW\uff09\uff0c\u96d6\u7136\u9019\u5f88\u5e38\u898b\uff0c\u4f46\u537b\u5f88\u5bb9\u6613\u51fa\u73fe\u8cc7\u6599\u7684\u907a\u5931\u3002\u5982\u679c\u53c8\u8003\u616e\u5230\u6a5f\u5668\u7684\u6642\u9418\u662f\u4e0d\u51c6\u7684\u9019\u500b\u8b70\u984c\u6642\uff0c\u5f88\u53ef\u80fd\u65b0\u8cc7\u6599\u6703\u88ab\u820a\u8cc7\u6599\u8986\u84cb\uff0c\u6642\u9418\u554f\u984c\u6703\u7559\u5230\u5225\u7bc7\u8a0e\u8ad6\u3002
          • Cassandra \u53ea\u652f\u63f4\u9019\u65b9\u5f0f
          • Riak \u53ef\u4ee5\u9078\u64c7\u4f7f\u7528\u9019\u65b9\u5f0f
          • \u9ad8\u968e\u9818\u8896\u53ef\u4ee5\u8907\u5beb\u4f4e\u968e\u9818\u8896\u7684\u5beb\u5165\u8acb\u6c42\u3002\u57fa\u672c\u8ddf LWW \u5f88\u50cf\u3002
          • \u628a\u6240\u6709\u885d\u7a81\u8a18\u9304\u8d77\u4f86\u4e26\u5728
          • \u4e0b\u6b21\u8acb\u6c42\u6642\uff0c\u8981\u6c42\u61c9\u7528\u7a0b\u5f0f\uff08\u6216\u4f7f\u7528\u8005\uff09\u6574\u4f75\u885d\u7a81
          • \u767c\u751f\u885d\u7a81\u6642\uff0c\u8981\u6c42\u61c9\u7528\u7a0b\u5f0f\uff08\u6216\u4f7f\u7528\u8005\uff09\u6574\u4f75\u885d\u7a81
          "},{"location":"feedback/designing-data-intensive-applications/distributed-replication/#\u5176\u4ed6\u8655\u7406\u885d\u7a81\u7684\u9818\u57df","title":"\u5176\u4ed6\u8655\u7406\u885d\u7a81\u7684\u9818\u57df","text":"
          • \u7279\u6b8a\u7684\u8cc7\u6599\u578b\u5225\uff08Conflict-free Replicated DataTypes\uff0cCRDTs\uff09\uff0c\u4f8b\u5982 Map\u3001counter \u7b49\u7b49\uff0c\u5929\u751f\u5bb9\u8a31\u885d\u7a81
          • \u7279\u6b8a\u7684\u8cc7\u6599\u67b6\u69cb\uff08Mergeable persistent data structures\uff09\uff0c\u985e\u4f3c\u7248\u672c\u63a7\u5236\u7cfb\u7d71\uff08\u5982\uff0cGit\uff09\uff0c\u6703\u628a\u885d\u7a81\u8a18\u9304\u8d77\u4f86\u4e26\u4f9d\u7167\u8a2d\u5b9a\u6574\u4f75\u8d77\u4f86
          • \u6587\u5b57\u6574\u5408\uff08Operational transformation\uff09\uff0c\u5be6\u4f5c\u65bc Google Docs \u4e2d\uff0c\u628a\u5b57\u4e32\u7576\u6210\u9663\u5217\u4e26\u5141\u8a31\u540c\u6642\u63d2\u5165\u65b0\u503c\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

          1. Client1 \u8acb\u6c42\u5beb\u5165 [milk]\uff0c\u5b9a\u5176\u70ba\u7248\u672c\u4e00
          2. Client2 \u8acb\u6c42\u5beb\u5165 [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]
          3. Client1 \u8acb\u6c42\u5beb\u5165 [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]
          4. Client2 \u8acb\u6c42\u5beb\u5165 [eggs, milk, ham] \u5f97\u5230\u7248\u672c\u4e09\u7684\u8cc7\u6599 [milk, flour]\uff0c\u4e26\u6574\u5408\u6210 [eggs, milk, ham, flour]
          5. Client1 \u6574\u5408\u6210 [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

          • Raik
          • Cassandra
          • Voldemort

          \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

          • \u5982\u540c\u524d\u9762\u63d0\u5230\u7684\uff0c\u540c\u7570\u6b65\u7684\u9078\u64c7\uff0c\u5982\u679c\u55ae\u4e00\u8cc7\u6599\u5eab\u640d\u58de\uff0c\u6211\u9700\u8981\u7b49\u4ed6\u5fa9\u539f\u624d\u80fd\u5b8c\u6210\u8acb\u6c42\u55ce\uff1f
          • \u5982\u4f55\u505a\u5230\u591a\u53f0\u8cc7\u6599\u5eab\u7684\u8cc7\u6599\u4e00\u81f4\u6027
          • \u70ba\u4ec0\u9ebc\u7121\u9818\u8896\u53ef\u4ee5\u505a\u5230\u9ad8\u53ef\u7528\u6027
          "},{"location":"feedback/designing-data-intensive-applications/distributed-replication/#\u9700\u8981\u5168\u90e8\u9001\u6210\u529f\u55ce","title":"\u9700\u8981\u5168\u90e8\u9001\u6210\u529f\u55ce\uff1f","text":"

          \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

          • \u4e26\u884c\u7684\u8b80\u53d6\u548c\u5beb\u5165
          • \u4e26\u884c\u7684\u885d\u7a81\u5beb\u5165
          • \u6210\u529f\u5beb\u5165\u7684\u8cc7\u6599\u5eab\u58de\u6389\uff0c\u5c0e\u81f4\u65b0\u7684\u8cc7\u6599\u5eab\u4f7f\u7528\u820a\u8cc7\u6599\u300c\u8d95\u4e0a\u300d
          • \u6642\u9418\u4e0d\u6e96\u5c0e\u81f4\u7684\u554f\u984c
          "},{"location":"feedback/designing-data-intensive-applications/distributed-replication/#\u9d3f\u5de2\u539f\u7406","title":"\u9d3f\u5de2\u539f\u7406","text":"

          \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":"
          • \u5206\u6563\u5f0f\u8cc7\u6599\u5eab
          • \u64f4\u589e\u6027
          • \u9ad8\u53ef\u7528\u6027\uff08\u9ad8\u5bb9\u932f\u6027\uff09
          • \u4f4e\u6f5b\u6642
          • \u8907\u88fd\u3001\u5206\u5340

          \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

          1. Network Attached Storage(NAS)\u00a0\u21a9

          2. Storage Area Network(SAN)\u00a0\u21a9

          "},{"location":"feedback/designing-data-intensive-applications/farewell/","title":"\u7e3d\u7d50\u548c\u6574\u5408","text":"

          \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

          • \u539f\u5b50\u6027\uff1a\u8b93\u6240\u6709\u76f8\u95dc\u7684\u8acb\u6c42\u90fd\u88ab\u5305\u88dd\u6210\u55ae\u4e00\u7a0b\u5e8f\uff0c\u7576\u4e00\u7cfb\u5217\u8acb\u6c42\u4e2d\u6709\u4efb\u4e00\u8acb\u6c42\u767c\u751f\u932f\u8aa4\uff0c\u5c31\u8b93\u8cc7\u6599\u5eab\u56de\u5230\u4e00\u7cfb\u5217\u8acb\u6c42\u524d\u7684\u72c0\u614b\u3002
          • \u9694\u96e2\u6027\uff1a\u4ea4\u6613\u548c\u4ea4\u6613\u4e4b\u9593\u4e0d\u6703\u4e92\u76f8\u5f71\u97ff\uff0c\u4f8b\u5982 \u4ea4\u6613 A \u770b\u4e0d\u5230 \u4ea4\u6613 B \u4ea4\u6613\u5c1a\u672a\u63d0\u4ea4\u524d\u7684\u72c0\u614b\u3002

          \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\uff0c\u4e00\u7fa4\u7bc0\u9ede\u4e2d\u6709\u4e00\u500b\u9818\u8896\u8ca0\u8cac\u670d\u52d9\u7570\u52d5\u8acb\u6c42\uff0c\u5176\u4ed6\u7bc0\u9ede\u8ca0\u8cac\u670d\u52d9\u8b80\u53d6\u8acb\u6c42\uff0c\u9818\u8896\u900f\u904e\u50b3\u905e\u8907\u88fd\u65e5\u8a8c\u7d66\u5176\u4ed6\u7bc0\u9ede\u9054\u6210\u4e00\u81f4\u6027\u3002
          • \u591a\u9818\u8896\uff0c\u4e00\u7fa4\u7bc0\u9ede\u6709\u591a\u500b\u9818\u8896\uff0c\u9019\u6642\u4e0d\u50c5\u53ef\u4ee5\u5206\u6563\u7570\u52d5\u8acb\u6c42\u4e5f\u80fd\u628a\u591a\u500b\u53e2\u96c6\u653e\u5728\u4e0d\u540c\u5730\u7406\u5340\u57df\u7684\u8cc7\u6599\u4e2d\u5fc3\uff0c\u9054\u5230\u570b\u969b\u5316\u7684\u4f4e\u6f5b\u6642\u670d\u52d9\u3002
          • \u7121\u9818\u8896\uff0c\u900f\u904e\u5916\u90e8\u5354\u8abf\u8005\u628a\u8acb\u6c42\u5206\u914d\u5230\u6240\u6709\uff08\u6216\u8005\u8aaa\u591a\u6578\uff09\u7bc0\u9ede\uff0c\u53ef\u4ee5\u89e3\u6c7a\u55ae\u4e00\u9818\u8896\u7684\u4f4e\u53ef\u7528\u53c8\u80fd\u89e3\u6c7a\u591a\u9818\u8896\u7684\u7570\u52d5\u885d\u7a81\u3002

          \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

          "},{"location":"feedback/designing-data-intensive-applications/farewell/#\u5206\u6563\u5f0f\u8cc7\u6599\u5eab\u7684\u5bb9\u932f","title":"\u5206\u6563\u5f0f\u8cc7\u6599\u5eab\u7684\u5bb9\u932f","text":"

          \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

          • \u7d22\u5f15\u4e2d\u4e0d\u540c\u8cc7\u6599\u5eab\u53ef\u80fd\u6703\u4f7f\u7528 \u6392\u5e8f\u5b57\u4e32\u8868 \u6216 B-Tree\uff0c\u9019\u5169\u8005\u5206\u5225\u6709\u4e0d\u540c\u7684\u512a\u52a3\u52e2\u3002
          • \u5206\u6563\u5f0f\u8907\u88fd\u6642\u9078\u64c7 \u55ae\u4e00\u9818\u8896\u3001\u591a\u9818\u8896 \u6216 \u7121\u9818\u8896\u3002

          \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

          • \u5206\u6563\u5f0f\u4ea4\u6613\u67b6\u69cb\uff1a\u4f4e\u6548\u80fd\u548c\u4f4e\u5bb9\u932f
          • \u4e8b\u4ef6\u4f86\u6e90\uff1a\u9ad8\u6548\u80fd\u548c\u9ad8\u53ef\u7528\uff0c\u4f46\u50c5\u80fd\u4fdd\u6301\u6700\u7d42\u4e00\u81f4\u6027

          \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":"
          • \u7570\u6b65
          • \u6c7a\u5b9a\u6027
          • \u539f\u5b50\u6027\u7684\u8f49\u5ac1
          • \u56e0\u679c

          \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

          • \u5728\u767c\u9001\u6709\u56e0\u679c\u95dc\u4fc2\u7684\u4e8b\u4ef6\u6642\u900f\u904e\u55ae\u4e00\u7bc0\u9ede\u7684\u908f\u8f2f\u6642\u9418\u4f86\u8ce6\u4e88\u4e8b\u4ef6\u984d\u5916\u7684\u8cc7\u8a0a\u3002\u4e5f\u5c31\u662f\u589e\u52a0\u4e8b\u4ef6\u7684 metadata\u3002
          • \u8b93\u8b80\u53d6\u4e5f\u8b8a\u6210\u4e8b\u4ef6\uff0c\u6709\u9ede\u50cf\u662f stream-table join\uff0c \u8b80\u53d6\u4e8b\u4ef6\u662f\u4e32\u6d41\u7684\uff0c\u800c\u5176\u4ed6\u76f8\u95dc\u8cc7\u8a0a\u7684\u300c\u72c0\u614b\u300d\u5247\u88ab\u5132\u5b58\u9032\u8a18\u61b6\u9ad4\u4e2d\uff0c\u4f8b\u5982\u8cfc\u7269\u8eca\u7684\u72c0\u614b\u3002
          • \u81ea\u52d5\u8655\u7406\u885d\u7a81\u7684\u6f14\u7b97\u6cd5\uff0c\u4f46\u6709\u6642\u7576\u611f\u77e5\u5230\u885d\u7a81\u6642\u5df2\u7d93\u4f86\u4e0d\u53ca\u4e86\uff08\u4f8b\u5982\u9001\u51fa\u90f5\u4ef6\uff09

          \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\u7b97
          BEGIN 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\u884c
          ALTER 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

          • \u5305\u88dd\u6240\u6709\u7570\u52d5\u5230\u55ae\u4e00\u4e8b\u4ef6
          • \u5728\u6240\u6709\u4e8b\u4ef6\u4e2d\u6dfb\u52a0\u552f\u4e00\u7684\u7de8\u865f\uff0c\u8ce6\u4e88\u4e4b\u5f8c\u6bcf\u4e00\u6b21\u7684\u8a08\u7b97\u90fd\u662f\u51aa\u7b49\u7684
          • \u5132\u5b58\u7684\u4e8b\u4ef6\u662f\u4e0d\u8b8a\u7684
          • \u4f7f\u7528\u6c7a\u5b9a\u6027\u7684\u884d\u751f\u51fd\u793a\u8ffd\u8e64\u60f3\u8981\u7684\u4e8b\u4ef6
          • \u884d\u751f\u65b0\u9762\u8c8c
          "},{"location":"feedback/designing-data-intensive-applications/farewell/#\u76e3\u63a7\u5065\u5eb7\u72c0\u6cc1","title":"\u76e3\u63a7\u5065\u5eb7\u72c0\u6cc1","text":"

          \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":"
          • Lambda Architecture \u6574\u5408\u6279\u6b21\u8655\u7406\u548c\u4e32\u6d41\u8655\u7406\uff0c\u7f3a\u9ede\u548c\u8655\u7406\u7f3a\u9ede\u7684\u4e00\u4e9b\u6a5f\u5236\u3002
          • \u5229\u7528\u806f\u5408\uff08join\uff09\u4e0d\u540c\u4e32\u6d41\u8655\u7406\u7684\u8f38\u51fa\uff0c\u4f86\u89e3\u6c7a\u8de8\u5206\u5340\u7684\u641c\u5c0b\uff0c\u985e\u4f3c MPP\uff0c\u53ea\u662f\u662f\u7528\u4e8b\u4ef6\u4f86\u6e90\u7684\u57fa\u790e
          • \u5b9a\u671f\u642c\u9077\u8cc7\u6599\u907f\u514d\u786c\u9ad4\u7684\u640d\u58de
          • \u8981\u505a\u5c0d\u7684\u4e8b\uff1a\u96b1\u79c1\u6b0a\u548c\u81ea\u6211\u898f\u7bc4
          "},{"location":"feedback/designing-data-intensive-applications/farewell/#\u7d50\u8a9e","title":"\u7d50\u8a9e","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

          • \u4e00\u6708\u4efd\u6536\u5165\u7e3d\u984d\uff1f
          • \u4eca\u5e74\u6210\u529f\u61c9\u5fb5\u7684\u4eba\u6578\uff1f
          • \u54ea\u7a2e\u8077\u985e\u6700\u591a\u4eba\u61c9\u5fb5\uff1f

          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

          • \u8cfc\u7269\u8005\u5728\u4e00\u5929\u4e2d\u8cfc\u8cb7\u7684\u6642\u9593\u5206\u4f48
          • \u54ea\u500b\u5546\u54c1\u8ce3\u6700\u597d

          \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

          • \u6c42\u8077\u8005\u5c65\u6b77\u8cc7\u6599\u5eab
          • \u6c42\u8077\u8005\u7684\u6027\u5411\u6e2c\u9a57

          \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":"
          • \u6536\u8cbb\u7684
          • Teradata
          • Vertica
          • SAP HANA
          • ParAccel
          • Amazon Redshift based on ParAccel and PostgreSQL
          • \u958b\u6e90\u7684 SQL-on-Hadoop \u5c08\u6848
          • Google's Dremel paper
          • Apache Hive
          • Apache Spark
          • Cloudera Impala
          • Facebook Presto
          • Apache Drill
          "},{"location":"feedback/designing-data-intensive-applications/foundation-dw/#\u7db1\u76ee","title":"\u7db1\u76ee","text":"

          \u8cc7\u6599\u5009\u5132 \u53ef\u80fd\u7684\u7db1\u76ee\uff08schema\uff09\u8a2d\u8a08\u6709\u5169\u7a2e\uff1a

          • \u661f\u72c0\u7db1\u76ee\uff08star schema\uff09
          • \u8cc7\u6599\u5009\u5132 \u7684\u8cc7\u6599\u548c\u5176\u4ed6\u8cc7\u6599\u5eab\u7684\u8cc7\u6599\u95dc\u7cfb\uff0c\u6a23\u5b50\u5c31\u597d\u50cf\u661f\u661f\u767c\u51fa\u4f86\u7684\u5149\u4e00\u6a23
          • \u96ea\u82b1\u7db1\u76ee\uff08snowflake schema\uff09
          • \u8cc7\u6599\u548c\u8cc7\u6599\u7684\u95dc\u4fc2\u5c64\u5c64\u4ea4\u758a
          "},{"location":"feedback/designing-data-intensive-applications/foundation-dw/#\u661f\u72c0\u7db1\u76ee","title":"\u661f\u72c0\u7db1\u76ee","text":"

          \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\u8868
          • fact \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

          • \u597d\u64f4\u5145\uff0c\u4f8b\u5982\uff1a\u7576\u6709\u65b0\u7684\u7a2e\u985e\uff0c\u5c31\u4e0d\u7528\u540c\u6642\u53bb\u6539\u7a2e\u985e\u8868\u548c\u7522\u54c1\u8868
          • \u9069\u5408\u58d3\u7e2e\u548c\u512a\u5316\u641c\u5c0b\u901f\u5ea6\uff08\u900f\u904e Bitmap Index\uff09\uff0c\u5f8c\u9762\u6703\u4ecb\u7d39
          • \u597d\u8abf\u6574\uff0c\u65b0\u589e\u5c6c\u6027\u6642\uff0c\u4e0d\u9700\u8981\u8003\u616e\u653e\u5728\u54ea\u500b\u8868\u6bd4\u8f03\u9069\u5408
          • \u8f03\u597d\u7406\u89e3\uff0c\u4e0d\u7528\u5c64\u5c64\u5806\u780c\uff0c\u5c64\u5c64\u89e3\u6790
          "},{"location":"feedback/designing-data-intensive-applications/foundation-dw/#\u884c\u5f0f\u8cc7\u6599\u5eab","title":"\u884c\u5f0f\u8cc7\u6599\u5eab","text":"

          \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

          • \u901a\u5e38\u4e0d\u540c\u8a9e\u8a00\u4e4b\u9593\u662f\u7121\u6cd5\u4e92\u76f8\u63a5\u901a\u7684
          • \u53ef\u80fd\u6703\u89f8\u767c\u7269\u4ef6\u7684\u5efa\u7f6e\uff0c\u6709\u5b89\u5168\u6027\u7591\u616e
          • \u4e26\u975e\u4ee5\u300c\u524d\u5f8c\u76f8\u5bb9\u300d\u70ba\u8a2d\u8a08\u6838\u5fc3
          • \u6548\u7387\u901a\u5e38\u5f88\u5dee
          "},{"location":"feedback/designing-data-intensive-applications/foundation-encode/#\u65b9\u4fbf\u4eba\u985e\u95b1\u8b80","title":"\u65b9\u4fbf\u4eba\u985e\u95b1\u8b80","text":"

          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

          • \u4f54\u7a7a\u9593
          • \u7121\u6cd5\u5132\u5b58\u4e8c\u9032\u4f4d\u6587\u5b57\uff0c\u96d6\u7136\u53ef\u4ee5\u4f7f\u7528 Base64 \u628a\u4e8c\u9032\u4f4d\u8f49\u63db\u6210 Unicode \u6587\u5b57\uff0c\u537b\u9700\u8981\u984d\u5916\u7684\u6548\u80fd\u548c\u9ad4\u7a4d
          • Base64 \u6bcf 6 \u500b bit \u8f49\u6210\u4e00\u500b ASCII \u5b57\u5143\uff081 \u500b byte\uff09\uff0c\u6240\u4ee5\u9ad4\u7a4d\u6703\u6bd4\u76f4\u63a5\u505a\u4e8c\u9032\u4f4d\u8f49\u63db\u5927 1.3 \u500d
          • \u6c92\u6709\u7db1\u76ee\uff0c\u82b1\u6642\u9593\u7406\u89e3\u548c\u7ba1\u7406
          • \u5927\u6578\u5b57\u4e0d\u597d\u5132\u5b58\uff0c\u6574\u6578\u3001\u5c0f\u6578\u7684\u5340\u5206

          \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

          "},{"location":"feedback/designing-data-intensive-applications/foundation-encode/#\u4e8c\u9032\u4f4d\u7de8\u78bc","title":"\u4e8c\u9032\u4f4d\u7de8\u78bc","text":"

          \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

          • Apache Thrift - \u521d\u59cb\u65bc Facebook
          • Protocol Buffer - Google
          • Apache Avro

          \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

          • \u5411\u5f8c\u76f8\u5bb9\uff1a\u820a\u7684\u7a0b\u5f0f\u78bc\u8b80\u5230\u7684\u8cc7\u6599\u542b\u6709\u65b0\u7684\u7db1\u76ee\u5b9a\u7fa9\u7684\u6b04\u4f4d\u6642\uff0c\u4ecd\u7136\u53ef\u4ee5\u904b\u884c
          • \u5411\u524d\u76f8\u5bb9\uff1a\u65b0\u7684\u7a0b\u5f0f\u78bc\u8b80\u5230\u7684\u8cc7\u6599\u542b\u6709\u5df2\u7d93\u88ab\u522a\u9664\u6216\u4e0d\u540c\u683c\u5f0f\u7684\u6b04\u4f4d\u6642\uff0c\u4ecd\u7136\u53ef\u4ee5\u904b\u884c

          \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

          • BinaryProtocol
          • CompactProtocol
          "},{"location":"feedback/designing-data-intensive-applications/foundation-encode/#protocol-buffer","title":"Protocol Buffer","text":"

          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\u3002
          • \u6bcf\u500b tag ID \u4e0d\u53bb\u66f4\u52d5\u4f86\u4fdd\u6301\u524d\u5f8c\u76f8\u5bb9\u3002\u7576\u4f7f\u7528\u820a\u7684\u7db1\u76ee\u53bb\u8b80\u53d6\u672a\u77e5\u6b04\u4f4d\u6642\uff0c\u7701\u7565\u4e4b\u3002
          • \u65b0\u589e\u6b04\u4f4d\u6642\u82e5\u8a2d\u5b9a required \u6703\u8b93\u820a\u7a0b\u5f0f\u78bc\u8f38\u51fa\u932f\u8aa4\uff0c\u9700\u8981\u7d66\u5b9a\u9810\u8a2d\u503c\u3002
          • \u8b8a\u66f4\u6a94\u6848\u683c\u5f0f\u53ef\u80fd\u5c0e\u81f4\u8cc7\u6599\u4e0d\u5b8c\u5168\uff0c\u4f8b\u5982 int8 \u8f49\u5230 int16
          • ProtocolBuffers \u6c92\u6709 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\u3002
          "},{"location":"feedback/designing-data-intensive-applications/foundation-encode/#apache-avro","title":"Apache Avro","text":"

          Apache 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

          • \u578b\u5225\u548c\u4e0a\u9762\u63d0\u7684\u5c0d\u61c9\u6a5f\u5236\u5f88\u50cf\uff0c\u5728\u7a0b\u5f0f\u5be6\u4f5c\u9700\u8981\u8a2d\u8a08\u578b\u5225\u7684\u8f49\u63db\u3002
          • \u8a2d\u5b9a 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
          "},{"location":"feedback/designing-data-intensive-applications/foundation-encode/#\u5982\u4f55\u77e5\u9053\u7de8\u78bc\u6642\u7684\u7db1\u76ee\u7248\u672c","title":"\u5982\u4f55\u77e5\u9053\u7de8\u78bc\u6642\u7684\u7db1\u76ee\u7248\u672c","text":"

          \u6839\u64da\u61c9\u7528\u7a0b\u5f0f\u800c\u6709\u5dee\u7570\uff1a

          • \u82e5\u8cc7\u6599\u5eab\u662f\u5728 Hadoop \u67b6\u69cb\u4e4b\u4e0a\uff0c\u5c31\u53ef\u4ee5\u5728\u6bcf\u4efd\u6a94\u6848\u524d\u9762\u6dfb\u52a0\u7db1\u76ee\u7248\u672c\u3002
          • \u82e5\u8cc7\u6599\u5eab\u7684\u6bcf\u7b46\u8cc7\u6599\u90fd\u53ef\u80fd\u6703\u6709\u4e0d\u540c\u7684\u7248\u672c\uff0c\u5c31\u9700\u8981\u5728\u6bcf\u7b46\u8cc7\u6599\u524d\u8a2d\u5b9a\u7248\u672c\uff0c\u5982 Espresso\u3002
          • \u82e5\u662f\u5728\u7db2\u8def\u4e0a\u9032\u884c\u96d9\u5411\u6e9d\u901a\u7684\u61c9\u7528\u7a0b\u5f0f\uff0c\u53ef\u4ee5\u5354\u5546\u51fa\u5f7c\u6b64\u7684\u7248\u672c\uff0c\u5982 Avro RPC

          \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

          • \u5728\u89e3\u78bc\u6642\u4e0d\u6703\u53d7\u7db1\u76ee\u5f71\u97ff\uff0c\u53ef\u8f15\u6613\uff08\u8cc7\u6599\u5eab\u9762\uff09\u5141\u8a31\u5411\u5f8c\uff08\u524d\uff09\u7684\u76f8\u5bb9\u3002
          • \u53ef\u4ee5\u900f\u904e\u6587\u4ef6\u65b9\u5f0f\u88dc\u8db3\u7db1\u76ee\uff0c\u4e14\u80fd\u8a73\u7d30\u9650\u5236\u8cc7\u6599\u3002\u5982\uff1a\u6578\u5b57\u53ea\u80fd\u5728 0~1 \u4e4b\u9593\u3002

          \u7136\u800c\u4e8c\u9032\u4f4d\u7de8\u78bc\u4e5f\u6709\u5176\u597d\u8655\uff1a

          • \u5132\u5b58\u66f4\u7dca\u5bc6\uff0c\u9ad4\u7a4d\u5c0f\u3002
          • \u56e0\u70ba\u7db1\u76ee\uff08Schema\uff09\u662f\u5fc5\u9808\u7684\uff0c\u4e0d\u6703\u51fa\u73fe\u6587\u4ef6\u548c\u5be6\u969b\u904b\u4f5c\u6709\u843d\u5dee\uff08\u5fd8\u8a18\u88dc\u6587\u4ef6\uff09\u3002
          • \u5728 compile \u904e\u7a0b\u5c31\u80fd\u6aa2\u67e5\u7a0b\u5f0f\u78bc\u662f\u5426\u7b26\u5408\u7db1\u76ee\u3002
          • \u900f\u904e\u4e00\u4e9b\u6a5f\u5236\u4ecd\u80fd\u4fdd\u6301\u5411\u524d\uff08\u5f8c\uff09\u7684\u76f8\u5bb9\u8b93\u4ed6\u548c Schema-less \u7684\u7de8\u78bc\u4e00\u6a23\u597d\u7528
          "},{"location":"feedback/designing-data-intensive-applications/foundation-encode/#\u7de8\u89e3\u78bc\u7684\u4f7f\u7528\u60c5\u5883","title":"\u7de8\uff08\u89e3\uff09\u78bc\u7684\u4f7f\u7528\u60c5\u5883","text":"

          \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

          • \u900f\u904e\u8cc7\u6599\u5eab
          • \u5169\u500b\u670d\u52d9\u6216\u4f7f\u7528\u8005\u5f7c\u6b64\u6e9d\u901a
          • \u7570\u6b65\u8a0a\u606f\u50b3\u905e\uff08Asynchronous message passing\uff09
          "},{"location":"feedback/designing-data-intensive-applications/foundation-encode/#\u900f\u904e\u8cc7\u6599\u5eab","title":"\u900f\u904e\u8cc7\u6599\u5eab","text":"

          \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

          • \u7de8\u78bc\uff1a\u50b3\u905e\u8cc7\u6599\u6642\uff1b\u8cc7\u6599\u5eab\u5beb\u9032\u78c1\u789f\u6642
          • \u89e3\u78bc\uff1a\u63a5\u6536\u50b3\u5230\u7684\u8cc7\u6599\u6642\uff1b\u8cc7\u6599\u5eab\u8b80\u78c1\u789f\u7684\u8cc7\u6599\u6642

          \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

          • \u8acb\u6c42\u8005\u628a\u8acb\u6c42\u8cc7\u8a0a\u7de8\u78bc
          • \u670d\u52d9\u8005\u89e3\u78bc
          • \u670d\u52d9\u8005\u628a\u56de\u61c9\u7de8\u78bc
          • \u8acb\u6c42\u8005\u89e3\u78bc

          \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

          • RPC/SOAP \u88ab\u51fd\u5f0f\u5eab\u5305\u88dd\u5f8c\uff0c\u5c31\u50cf\u547c\u53eb\u51fd\u793a\u4e00\u6a23\uff0c\u53ef\u4ee5\u76f4\u63a5\u547c\u53eb\u3002\u53cd\u4e4b\uff0cREST/GraphQL \u5c31\u9700\u8981\u53c3\u95b1\u63d0\u4f9b\u8005\u7684\u6587\u4ef6\u3002
          • RPC/SOAP \u7121\u6cd5\u4fdd\u8b49 client \u4f7f\u7528\u6700\u65b0\u7248\u672c\u7684 Schema\uff0c\u6240\u4ee5\u8f03\u96e3\u7dad\u904b\u3002\u53cd\u4e4b\uff0cRESTful API \u53ef\u4ee5\u5229\u7528\uff1a
          • \u524d\u7db4\u8a5e\u52a0\u4e0a\u7248\u672c
          • HTTP \u6a19\u982d\uff08Accept\uff09\u5beb\u660e\u4f7f\u7528\u7248\u672c
          • \u8acb\u6c42\u6642\u9700\u651c\u5e36 Token
          • RPC/SOAP \u901a\u5e38\u6703\u4f7f\u7528\u8f03\u6709\u6548\u7387\u548c\u9069\u5408\u524d\u5f8c\u76f8\u5bb9\u7684\u7de8\u78bc\u65b9\u5f0f

          \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

          • Protocol Buffers - Google gRPC
          • \u4e4b\u524d\u6709\u64b0\u5beb\u904e\u5fc3\u5f97
          • Thrift - Twitter Finagle
          • JSON - LinkedIn Rest.li
          "},{"location":"feedback/designing-data-intensive-applications/foundation-encode/#\u975e\u540c\u6b65\u8a0a\u606f\u50b3\u905e","title":"\u975e\u540c\u6b65\u8a0a\u606f\u50b3\u905e","text":"

          \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

          • \u540c\u6b65\u8a0a\u606f\u9810\u671f\u6536\u5230\u8acb\u6c42\uff0c\u4f8b\u5982 REST API\u3002\u9019\u4ee3\u8868\u7576\u6c92\u6536\u5230\u8acb\u6c42\u6642\uff0c\u9700\u8981\u505a\u932f\u8aa4\u8655\u7406\uff08Error handling\uff09
          • \u975e\u540c\u6b65\u8a0a\u606f\u5247\u76f8\u53cd\uff0c\u9001\u51fa\u8a0a\u606f\u5f8c\uff0c\u5728\u78ba\u8a8d\u5c0d\u65b9\u6536\u5230\u524d\uff08\u6839\u64da\u8a2d\u5b9a\u53ef\u80fd\u4e0d\u9700\u8981\u78ba\u8a8d\uff09\u53ef\u80fd\u53c8\u518d\u9001\u51fa\u4e00\u5247\u8a0a\u606f

          \u975e\u540c\u6b65\u8a0a\u606f\u50b3\u905e\u66f8\u4e2d\u4e3b\u8981\u4ecb\u7d39\u5169\u7a2e\u65b9\u5f0f\uff1a

          • \u6d88\u606f\u4ee3\u7406\uff08Message brokers\uff09
          • \u4e8b\u4ef6\u4e32\u6d41\u5f0f\u67b6\u69cb\uff08Event streaming platforms\uff09
          • \u4f01\u696d\u670d\u52d9\u532f\u6d41\u6392\uff08Enterprise service bus\uff09
          • \u5206\u6563\u5f0f\u6f14\u54e1\u6a21\u578b\uff08Distributed actor model\uff09

          \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\u91cf
          SELECT 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

          \u53bb\u6b63\u898f\u5316\u4ee5\u63d0\u5347\u6548\u7387
          -- 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

          • \u9694\u96e2\u6027\uff08isolation\uff09\uff1a\u662f\u7528\u4f86\u907f\u514d\u7af6\u8cfd\u72c0\u6cc1
          • \u5bb9\u932f\u6027\uff08fault-tolerance\uff09\uff1a\u662f\u7576\u8cc7\u6599\u5eab\u767c\u751f\u7af6\u8cfd\u72c0\u6cc1\u6642\uff0c\u6211\u5011\u8981\u5982\u4f55\u5fa9\u539f\u8cc7\u6599\u5eab\u72c0\u614b\u3002
          "},{"location":"feedback/designing-data-intensive-applications/foundation-ft/#\u9694\u96e2\u6027","title":"\u9694\u96e2\u6027","text":"

          \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

          • \u52a0\u4e00\u628a\u9396\uff08lock\uff09\u3002
          • \u5efa\u7acb\u5feb\u7167\uff08snapshot\uff09\uff0c\u907f\u514d\u4e92\u76f8\u5f71\u97ff\u3002
          • \u5efa\u7acb\u7248\u672c\u6a5f\u5236\uff08version\uff09\u3002

          \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

          • \u5168\u90e8\u91cd\u4f86\uff1a\u525b\u525b\u65b0\u589e\u7684\u90f5\u4ef6\u8b93\u8cc7\u6599\u5eab\u81ea\u52d5\u6368\u53bb\uff0c\u8b93\u61c9\u7528\u7a0b\u5f0f\u91cd\u65b0\u9001\u4e00\u6b21\u9019\u4e00\u7cfb\u5217\u7684\u8acb\u6c42\u3002
          • \u91cd\u4f86\u932f\u8aa4\u7684\u8acb\u6c42\uff1a\u4ee5\u672a\u8b80\u90f5\u4ef6\u7684\u4f8b\u5b50\u4f86\u8aaa\uff0c\u5c31\u662f\u91cd\u65b0\u52a0\u4e00\u6b21\u672a\u8b80\u6578\u91cf\u3002
          • \u7d66\u4f60\u6c7a\u5b9a\uff1a\u8cc7\u6599\u5eab\u544a\u77e5\u61c9\u7528\u7a0b\u5f0f\u767c\u751f\u932f\u8aa4\uff0c\u8b93\u61c9\u7528\u7a0b\u5f0f\uff08\u6216\u4f7f\u7528\u8005\uff09\u6c7a\u5b9a\u8a72\u600e\u9ebc\u505a\u3002

          \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

          "},{"location":"feedback/designing-data-intensive-applications/foundation-ft/#\u76e1\u8cac\u6027","title":"\u76e1\u8cac\u6027","text":"

          \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

          • \u8cc7\u6599\u5eab\u5728\u56de\u61c9\u7d66\u61c9\u7528\u7a0b\u5f0f\u6642\u767c\u751f\u7db2\u8def\u932f\u8aa4\uff0c\u9020\u6210\u5be6\u969b\u8cc7\u6599\u5eab\u5df2\u7d93\u8dd1\u5b8c\uff0c\u800c\u61c9\u7528\u7a0b\u5f0f\u4ee5\u70ba\u6c92\u8dd1\u5b8c\u3002\u9019\u6642\u5c31\u8981\u6709\u61c9\u7528\u7a0b\u5f0f\u5c64\u7d1a\u7684\u53bb\u91cd\u8907\uff08de-duplication\uff09\u908f\u8f2f
          • \u7576\u8cc7\u6599\u5eab\u56e0\u70ba\u5927\u91cf\u8acb\u6c42\u800c\u5c0e\u81f4\u5fd9\u4e0d\u904e\u4f86\u4e26\u56de\u61c9\u932f\u8aa4\uff0c\u91cd\u505a\u4e00\u6b21\u53ea\u6703\u8b93\u72c0\u6cc1\u66f4\u7cdf\u7cd5
          • \u7576\u4f60\u7684\u7a0b\u5f0f\u78bc\u6709\u932f\u6216\u8005\u8acb\u6c42\u5beb\u5165\u7684\u503c\u4e0d\u7b26\u5408\u7db1\u76ee\u7b49\u7b49\uff0c\u91cd\u505a\u4e00\u6b21\u4e26\u4e0d\u6703\u8b93\u4ed6\u57f7\u884c\u6210\u529f
          "},{"location":"feedback/designing-data-intensive-applications/foundation-ft/#\u4e00\u81f4\u6027\u7b49\u7d1a","title":"\u4e00\u81f4\u6027\u7b49\u7d1a","text":"

          \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

          "},{"location":"feedback/designing-data-intensive-applications/foundation-ft/#\u8b80\u672a\u5b8c\u6210\u7684\u8cc7\u6599","title":"\u8b80\u672a\u5b8c\u6210\u7684\u8cc7\u6599","text":"

          \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

          "},{"location":"feedback/designing-data-intensive-applications/foundation-ft/#\u5feb\u7167\u9694\u96e2","title":"\u5feb\u7167\u9694\u96e2","text":"

          \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

          • \u8cc7\u6599\u5eab\u7684\u5099\u4efd\u3002\u7576\u8cc7\u6599\u5eab\u5728\u91dd\u5c0d\u7dda\u4e0a\u8cc7\u6599\u5eab\u505a\u5099\u4efd\u6642\uff0c\u4ed6\u4ecd\u7136\u5f8c\u9047\u5230\u4e0a\u8ff0\u7684\u554f\u984c\u3002\u5982\u679c\u5099\u4efd\u7684\u8cc7\u6599\u662f\u72c0\u614b\u4e0d\u4e00\u81f4\u7684\uff0c\u7576\u672a\u4f86\u9700\u8981\u7528\u5099\u4efd\u8cc7\u6599\u505a\u5fa9\u539f\u6642\uff0c\u5c31\u6703\u9020\u6210\u9019\u7a2e\u77ed\u66ab\u4e0d\u4e00\u81f4\u6027\u7684\u8cc7\u6599\u8b8a\u6210\u6c38\u4e45\u6027\u7684
          • \u5206\u6790\u6027\u7684\u641c\u5c0b\u3002\u82e5\u4f60\u9700\u8981\u505a\u5206\u6790\u5168\u90e8\u4f7f\u7528\u8005\u7684\u72c0\u614b\u6642\uff0c\u5f88\u53ef\u80fd\u6703\u5f97\u5230\u9019\u7a2e\u7834\u788e\u6216\u4e0d\u5408\u4e4e\u908f\u8f2f\u7684\u7d50\u679c\u3002

          \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

          • \u4f7f\u7528\u5feb\u7167\u9694\u96e2\u7684\u8cc7\u6599\u5eab
          • \u4f7f\u7528\u91cd\u8907\u8b80\u53d6\u7684\u8cc7\u6599\u5eab
          "},{"location":"feedback/designing-data-intensive-applications/foundation-ft/#\u591a\u7248\u672c\u4e26\u884c\u63a7\u5236","title":"\u591a\u7248\u672c\u4e26\u884c\u63a7\u5236","text":"

          \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

          • PostgreSQL \u6703\u76e1\u91cf\u8b93\u6240\u6709\u7248\u672c\u7684\u8cc7\u6599\u90fd\u653e\u9032\u540c\u4e00\u500b\u9801
          • CouchDB\u3001Datomic\u3001LMDB \u7576\u4ea4\u6613\u9700\u8981\u66f4\u65b0\u8cc7\u6599\u6642\uff0c\u8b93\u4ed6\u76f4\u63a5\u91cd\u65b0\u5efa\u7acb\u65b0\u7684\u6a39\u72c0\u7d50\u69cb\uff0c\u5b8c\u6210\u5f8c\u76f4\u63a5\u53d6\u4ee3\u820a\u7684\u6a39\u72c0\u7d50\u69cb\u3002\u9019\u6a23\u5176\u4ed6\u8b80\u53d6\u7684\u4ea4\u6613\u5c31\u4e0d\u6703\u53d7\u5230\u5f71\u97ff\u3002\u4f46\u662f\u4ed6\u6703\u9700\u8981\u80cc\u666f\u57f7\u884c\u5783\u573e\u56de\u6536\u548c\u58d3\u7e2e\u7684\u5de5\u4f5c

          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\u7d04
          BEGIN 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
          1. \u6aa2\u67e5\u6240\u6709\u73fe\u5b58\u7684\u8207 12:00~13:00 \u91cd\u758a\u7684\u9810\u7d04
          2. \u5982\u679c\u4e4b\u524d\u7684\u67e5\u8a62\u986f\u793a\u6c92\u6709\u91cd\u758a\u7684\u9810\u7d04\uff08COUNT(\\*) == 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
          1. \u6aa2\u67e5\u6240\u6709\u73fe\u5b58\u7684\u4f7f\u7528\u8005\u662f\u5426\u6709 new_user
          2. \u5982\u679c\u4e4b\u524d\u7684\u67e5\u8a62\u986f\u793a\u6c92\u6709\u8a72\u4f7f\u7528\u8005\uff08COUNT(*) == 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

          "},{"location":"feedback/designing-data-intensive-applications/foundation-ft/#\u5e8f\u5217\u5316","title":"\u5e8f\u5217\u5316","text":"

          \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

          • \u5be6\u969b\u5e8f\u5217\u5316\u6c92\u8fa6\u6cd5\u6709\u6548\u7684\u64f4\u589e
          • \u5169\u968e\u6bb5\u9396\u6703\u8b93\u6f5b\u6642\uff08latency\uff09\u5f88\u4e0d\u7a69
          • \u5e8f\u5217\u5316\u5feb\u7167\u4e5f\u8a31\u6703\u662f\u672a\u4f86\u6a19\u6e96
          "},{"location":"feedback/designing-data-intensive-applications/foundation-ft/#\u5be6\u969b\u5e8f\u5217\u5316","title":"\u5be6\u969b\u5e8f\u5217\u5316","text":"

          \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

          • VoltDB \u4f7f\u7528 JAVA \u6216 Groovy \u4f5c\u70ba\u8caf\u5b58\u7a0b\u5e8f
          • Datomic \u4f7f\u7528 JAVA \u6216 Clojure \u4f5c\u70ba\u8caf\u5b58\u7a0b\u5e8f
          • Redis \u4f7f\u7528 Lua \u4f5c\u70ba\u8caf\u5b58\u7a0b\u5e8f

          \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

          • \u8a18\u9304\u7684\u8d8a\u7d30\uff0c\u8d8a\u80fd\u5224\u65b7\u5176\u4ed6\u4ea4\u6613\u662f\u5426\u53d7\u5f71\u97ff\uff0c\u9032\u800c\u6368\u68c4\u8a72\u4ea4\u6613\u3002PostgreSQL
          • \u7d00\u9304\u7684\u8d8a\u5c11\uff0c\u57f7\u884c\u6548\u80fd\u8d8a\u5feb\uff0c\u8a18\u61b6\u9ad4\u7684\u9700\u6c42\u8d8a\u4f4e\u3002

          \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

          • \u6578\u5b57\u589e\u52a0\uff0c\u5148\u5f8c\u52a0\u4e00\u4e0d\u8ad6\u9806\u5e8f\u90fd\u6703\u9020\u6210\u8cc7\u6599\u52a0\u4e8c\u3002
          • \u9663\u5217\u52a0\u5143\u7d20\uff0c\u82e5\u4e0d\u8003\u616e\u9663\u5217\u7684\u9806\u5e8f\uff0c\u5148\u52a0\u548c\u5f8c\u52a0\u90fd\u6703\u88ab\u52a0\u9032\u9663\u5217\u88e1\u800c\u4e0d\u6703\u907a\u5931\u3002
          • Redis
          • MongoDB
          • Riak 2.0
          "},{"location":"feedback/designing-data-intensive-applications/foundation-ft/#\u5be6\u4f5c\u53ef\u907f\u514d\u7684\u7af6\u8cfd\u72c0\u6cc1","title":"\u5be6\u4f5c\u53ef\u907f\u514d\u7684\u7af6\u8cfd\u72c0\u6cc1","text":"

          \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

          1. https://www.microsoft.com/en-us/research/wp-content/uploads/2016/02/tr-95-51.pdf \u21a9

          2. http://pmg.csail.mit.edu/papers/adya-phd.pdf \u21a9

          3. http://arxiv.org/pdf/1302.0309.pdf \u21a9

          4. http://pmg.csail.mit.edu/papers/adya-phd.pdf \u21a9

          5. http://arxiv.org/pdf/1302.0309.pdf \u21a9

          6. https://www.microsoft.com/en-us/research/wp-content/uploads/2016/02/tr-95-51.pdf \u21a9

          7. http://arxiv.org/pdf/1302.0309.pdf \u21a9

          "},{"location":"feedback/designing-data-intensive-applications/foundation-index/","title":"\u7d22\u5f15","text":"

          \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

          • \u95dc\u806f\u5f0f\u8cc7\u6599\u5eab\u9069\u5408\u7c21\u55ae\u5f97\u591a\u5c0d\u591a\u95dc\u4fc2
          • \u6587\u4ef6\u5f0f\u6a21\u578b\u9069\u5408\u4e00\u5c0d\u591a\u95dc\u4fc2
          • \u5716\u50cf\u5f0f\u6a21\u578b\u9069\u5408\u5927\u91cf\u7684\u591a\u5c0d\u591a\u95dc\u4fc2\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

          \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

          \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

          • \u70ba\u4ec0\u9ebc query \u6642\u53ea\u91dd\u5c0d\u55ae\u4e00\u500b\u7d22\u5f15\u4f5c\u641c\u5c0b\u5462\uff1f
          • \u540c\u6642\u4f7f\u7528\u5169\u500b\u7d22\u5f15\u53bb\u505a\u641c\u5c0b\u4e0d\u662f\u975e\u5e38\u76f4\u89c0\u55ce\uff1f

          \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

          \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 393
          1,{\"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":"
          • \u56e0\u70ba\u662f\u4e00\u76f4\u65b0\u589e\u8cc7\u6599\u5230\u6a94\u6848\u5c3e\u90e8\uff0c\u5982\u4f55\u907f\u514d\u7121\u9650\u5236\u7684\u6a94\u6848\u5927\u5c0f\u589e\u9577
          • \u6a94\u6848\u683c\u5f0f \u4f7f\u7528\u4e8c\u9032\u4f4d\u7684\u8f49\u63db\uff0c\u964d\u4f4e\u5b57\u4e32\u3001\u6578\u5b57\u7b49\u7b49\u591a\u6a23\u7684\u8b8a\u6578\u683c\u5f0f\u8f49\u63db\uff0c\u4f8b\u5982\u8868\u60c5\u7b26\u865f\u3002
          • \u5982\u4f55\u522a\u9664\u6307\u5b9a\u8cc7\u6599 \u9700\u8981\u5728\u8a72 key \u4e2d\u7d66\u4e88\u7279\u5b9a\u503c\uff08tombstone\uff09\uff0c\u7576 compaction \u548c merge segment \u5f8c\uff0c\u6703\u81ea\u52d5\u6368\u68c4\u8a72\u9375\u503c\u3002
          • \u6a5f\u5668\u91cd\u555f\u6642\uff0c\u91cd\u65b0\u7372\u5f97 hash index \u9700\u8981\u5168\u6587\u8b80\u53d6\uff0c\u975e\u5e38\u8017\u6642 \u6703\u5b9a\u6642\u5b9a\u91cf\u5feb\u7167\uff08snapshot\uff09hash index \u9032\u6a94\u6848\uff0c\u907f\u514d\u6a5f\u5668\u91cd\u555f\u6642\u7684\u5168\u6587\u6aa2\u7d22\u3002
          • \u5beb\u5165\u8cc7\u6599\u5230\u4e00\u534a\u6642\uff0c\u6a5f\u5668\u58de\u6389 \u5efa\u7acb\u6838\u5c0d\u548c\uff08checksums\uff09\uff0c\u82e5\u6838\u5c0d\u548c\u6709\u932f\uff0c\u5247\u4e0d\u4f7f\u7528\u8a72\u503c\u3002
          • \u5982\u4f55\u78ba\u4fdd\u540c\u6b65\u63a7\u5236\uff08Concurrency Control\uff09\u6642\u9020\u6210\u7684\u932f\u8aa4\uff0c\u4f8b\u5982 A \u8cc7\u6599\u5beb\u5230\u4e00\u534a\u6642\uff0cB \u8cc7\u6599\u8981\u958b\u59cb\u5beb\u5165\u4e86\uff0cB \u8981\u5982\u4f55\u7b49 A \u5beb\u5b8c \u50c5\u958b\u653e\u4e00\u500b\u5beb\u5165\u7684\u7dda\u7a0b\uff08thread\uff09\u3002
          "},{"location":"feedback/designing-data-intensive-applications/foundation-index/#\u6a94\u6848\u58d3\u7e2e\u6574\u5408","title":"\u6a94\u6848\u58d3\u7e2e\u6574\u5408","text":"

          \u7576\u6a94\u6848\u9054\u5230\u4e00\u5b9a\u5927\u5c0f\u6642\uff1a

          • \u628a\u6a94\u6848\u5340\u5206\u6210\u597d\u5e7e\u584a\uff08segment\uff09\uff0c\u6bcf\u500b\u5340\u584a\u7368\u81ea\u7d00\u9304\u4ed6\u5011\u7684 hash index\u3002
          • \u7576\u5340\u584a\u592a\u5927\u6642\uff0c\u958b\u59cb\u9032\u884c\u58d3\u7e2e\uff08compaction\uff09\uff0c\u628a\u820a\u7684 key-value \u6368\u68c4\uff0c\u4e26\u628a\u6709\u6548\u8cc7\u6599\u5beb\u5165\u65b0\u7684\u6a94\u6848\u3002
          • \u5169\u500b\u5c0f\u5340\u584a\u53ef\u4ee5\u9032\u884c\u6574\u5408\uff08merge\uff09\u3002

          \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 \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":"
          • Hash index \u82e5\u904e\u5927\uff0c\u6216\u8005\u8aac key \u904e\u591a\uff0c\u52e2\u5fc5\u6703\u5927\u5927\u5f71\u97ff\u6548\u80fd\u3002
          • \u6c92\u8fa6\u6cd5\u5feb\u901f\u67e5\u8a62\u7bc4\u570d\u7684 key\uff0c\u4f8b\u5982\u60f3\u77e5\u9053\u4ee5 animal \u70ba\u958b\u982d\u7684\u9375\u503c\u6578\u91cf\u3002
          "},{"location":"feedback/designing-data-intensive-applications/foundation-index/#\u61c9\u7528","title":"\u61c9\u7528","text":"
          • Bitcask
          "},{"location":"feedback/designing-data-intensive-applications/foundation-index/#\u6392\u5e8f\u5b57\u4e32\u8868","title":"\u6392\u5e8f\u5b57\u4e32\u8868","text":"

          \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\u3002SSTable \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

          1. \u5728\u505a merge \u7684\u904e\u7a0b\uff0c\u53ef\u4ee5\u975e\u5e38\u6709\u6548\u7387\u4e14\u7701\u7a7a\u9593\uff1a

          2. \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

          3. \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

          "},{"location":"feedback/designing-data-intensive-applications/foundation-index/#\u7b56\u7565","title":"\u7b56\u7565","text":"

          \u7531\u4e0a\u8ff0\u7684\u4e00\u4e9b\u7279\u6027\uff0c\u53ef\u4ee5\u7e3d\u7d50 SSTables \u5728\u5be6\u4f5c\u4e0a\u7684\u7b56\u7565\u5982\u4e0b\uff1a

          • \u6bcf\u6b21\u8cc7\u6599\u9032\u4f86\uff0c\u5b58\u9032 in-memory \u7684\u6a39\u72c0\u7d50\u69cb\uff08red-black tree \u6216 AVL tree\uff09\uff0c\u8a72\u6a39\u72c0\u7d50\u69cb\u53ef\u4ee5\u4fdd\u8b49\u65b0\u7684\u8cc7\u6599\u6703\u4ee5\u6392\u5e8f\u904e\u7684\u65b9\u5f0f\u5b58\u9032\u7d50\u69cb\u4e2d\u3002
          • \u7576\u6a39\u72c0\u7d50\u69cb\u8d8a\u4f86\u8d8a\u5927\uff0c\u8d85\u904e\u95a5\u503c\uff08\u901a\u5e38\u6578\u500b MB\uff09\uff0c\u5b58\u9032\u6a94\u6848\uff08segment\uff09\u88e1\u3002\u56e0\u70ba\u5df2\u7d93\u6392\u5e8f\u904e\uff0c\u6240\u4ee5\u5132\u5b58\u7684\u6548\u7387\u5e7e\u4e4e\u7b49\u65bc I/O \u7684\u6548\u7387
          • \u7576\u6709\u8b80\u53d6\u7684\u8acb\u6c42\u6642\uff0c\u5148\u8b80\u53d6 in-memory \u518d\u5f9e\u6700\u65b0\u7684\u6a94\u6848\u4f9d\u5e8f\u8b80\u53d6\u3002
          • \u96a8\u8457\u6642\u9593\u9032\u884c\uff0c\u6301\u7e8c\u9032\u884c\u6574\u5408\uff08merging\uff09\u8207\u58d3\u7e2e\uff08compaction\uff09\u3002

          \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":"
          • Google LevelDB
          • Facebook RocksDB - based on LevelDB
          • Apache Cassandra(\u985e\u4f3c) - based on Big Table paper
          • Apache HBase(\u985e\u4f3c) - based on Big Table paper
          • Lucene\uff08\u88ab Elasticsearch \u548c Solr \u4f7f\u7528\uff09 - term dictionaries

          \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":"
          1. \u82e5\u641c\u5c0b\u7684\u8cc7\u6599\u662f\u4e0d\u5b58\u5728\u7684\uff08non-exist key\uff09\uff0c\u5c31\u9700\u8981\u6240\u6709\u6a94\u6848\u90fd\u95b1\u6b77\u5f8c\u624d\u80fd\u5224\u65b7\u3002 > Bloom filters \u7279\u6b8a\u7d50\u69cb\u7684\u6a94\u6848\uff0c\u6703\u5927\u7565\u63cf\u8ff0\u8cc7\u6599\u5eab\u7684\u72c0\u614b\uff0c\u4e26\u544a\u8a34\u4f60\u8a72\u9375\u503c\u662f\u5426\u5b58\u5728
          2. \u8a72\u4ee5\u4f55\u7a2e\u9806\u5e8f\u548c\u6642\u9593\u9ede\u9032\u884c\u6574\u5408\uff08merging\uff09\u8207\u58d3\u7e2e\uff08compaction\uff09\u3002
            1. size-tiered - \u65b0\u7684\u548c\u5c0f\u7684 segment \u6703\u88ab\u6574\u5408\u58d3\u7e2e\u9032\u820a\u7684\u3002
              • segment \u6578\u91cf\u5c11
              • segment \u5927\u5c0f\u6703\u662f 4/16/64... \u65b9\u5f0f\u500d\u589e
              • segment \u9593\u6703\u6709 overlapping \u7684\u72c0\u6cc1
            2. leveled compaction - \u6bcf\u4e00\u5c64\u5728\u5347\u7d1a\u6642\u6703\u505a\u6574\u5c64\u7684\u58d3\u7e2e
              • segment \u6578\u91cf\u591a\uff0c\u7b2c\u4e00\u5c64\u6a94\u6848\u6578 10 \u500b\uff0c\u7b2c\u4e8c\u5c64\u662f 100 \u500b
              • segment \u5927\u5c0f\u662f\u56fa\u5b9a\u7684
              • \u6bcf\u4e00\u5c64\uff08level\uff09\u7684 segment \u9593\u4e0d\u6703\u6709 overlapping \u7684\u72c0\u6cc1

          \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

          • \u6bcf\u500b\u5340\u584a\u7684\u5927\u5c0f\u901a\u5e38\u70ba 4KB\uff0c\u4e0d\u904e\u5be6\u969b\u4e0a\u4ecd\u8981\u8003\u616e\u786c\u9ad4\u7684\u914d\u7f6e\u3002
          • \u6bcf\u500b\u5340\u584a\u90fd\u6703\u6709\u4e00\u500b\u5730\u5740\u53bb\u4ee3\u8868\u4ed6\uff08\u985e\u4f3c\u7a0b\u5f0f\u78bc\u4e2d\u7684 pointer\uff0c\u6a94\u540d\uff09\u3002
          • \u6709\u4e00\u500b\u7279\u6b8a\u5340\u584a\u7a31\u70ba root\uff0c\u6bcf\u6b21\u641c\u5c0b\u90fd\u5148\u7d93\u904e\u8a72\u5340\u584a\u3002
          • \u5340\u584a\u5206\u5169\u7a2e
          • \u8def\u5f91\u5340\u584a - \u7528\u4f86\u5c0e\u5f15\u81f3\u5404\u500b\u5340\u584a\uff0c\u5169\u500b key \u4e4b\u9593\u7684\u8cc7\u6599\u5373\u662f\u5b58\u653e\u9019\u5169\u8005\u4e4b\u9593\u7684\u8cc7\u6599\u4f4d\u7f6e
          • \u8cc7\u6599\u5340\u584a - \u7528\u4f86\u5132\u5b58 key-value

          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":"
          • \u7531\u65bc B-Tree \u6703\u8986\u84cb\u5148\u524d\u5132\u5b58\u7684\u503c\uff0c\u9019\u6642\u5c31\u9700\u8981\u8003\u616e\u5230\u786c\u9ad4\u662f\u600e\u9ebc\u505a\u8986\u5beb\u7684\uff1f
          • \u6a5f\u68b0\u5f0f\u78c1\u789f\uff0c\u7b49\u5f85\u8b80\u5beb\u982d\u9047\u5230\u6b63\u78ba\u4f4d\u7f6e\uff0c\u958b\u59cb\u8986\u5beb
          • \u56fa\u614b\u786c\u789f\uff0c\u4ee5\u56fa\u5b9a\u55ae\u4f4d\u5927\u5c0f\u5beb\u5165\uff0c\u9700\u914d\u5408\u8edf\u9ad4

          \u7c21\u800c\u8a00\u4e4b\uff0c\u591a\u4e00\u7a2e\u52d5\u4f5c\uff0c\u591a\u4e00\u5c64\u8003\u616e

          • \u7576\u66f4\u65b0\u8cc7\u6599\u6642\uff0c\u53ef\u80fd\u6703\u628a page \u62c6\u5206\u5169\u500b\uff0c\u6216\u5f71\u97ff\u73fe\u6709\u8cc7\u6599\u3002\u505a\u5230\u4e00\u534a\u6642\uff0c\u6a5f\u5668\u58de\u4e86\u600e\u9ebc\u8fa6\uff1f
          • write-ahead log\uff08WAL \u6216\u7a31 redo log\uff09\u6703\u7d00\u9304\u820a\u8cc7\u6599\uff0c\u4f5c\u70ba\u707d\u96e3\u5fa9\u539f\u7528\u3002
          • \u7576\u9700\u8981\u8655\u7406\u591a\u5de5\uff08concurrency control\uff09\uff0c\u4e00\u500b\u5de5\u4eba\u5728\u5beb\u5165\u6642\uff0c\u6a39\u72c0\u7d50\u69cb\u53ef\u80fd\u662f\u4e0d\u7a69\u5b9a\u7684\uff08\u6b63\u5728\u8abf\u6574 B-Tree\uff09
          • \u9700\u8981\u5229\u7528 latches \u6f14\u7b97\u6cd5\u4f86\u9396\u5b9a\u5340\u584a\u4e0d\u88ab\u5176\u4ed6\u7dda\u7a0b\u8b80\u53d6\u3002
          • \u7531\u6b64\u4e5f\u53ef\u4ee5\u770b\u51fa SSTable \u548c B-Tree \u5728\u8655\u7406\u9019\u554f\u984c\u7684\u96e3\u6613\u7a0b\u5ea6\uff0cSSTable \u5728\u58d3\u7e2e\u6574\u5408\u7684\u904e\u7a0b\u90fd\u662f\u80cc\u666f\u57f7\u884c\u7684\uff0c\u800c\u4e0d\u5f71\u97ff\u73fe\u6709\u8cc7\u6599\uff0c\u6700\u7d42\u57f7\u884c\u5b8c\u7562\u624d\u6703\u505a\u66f4\u65b0\u3002
          "},{"location":"feedback/designing-data-intensive-applications/foundation-index/#\u5982\u4f55\u512a\u5316","title":"\u5982\u4f55\u512a\u5316","text":"

          1970 \u5e74\u5230\u73fe\u5728\uff0c\u4e5f\u505a\u4e86\u5f88\u591a\u512a\u5316\uff1a

          • \u707d\u96e3\u5fa9\u539f\u6642 WAF \u4e4b\u5916\uff0c\u6709\u4e9b\u4e5f\u5229\u7528\u5feb\u7167\u7684\u65b9\u5f0f\uff0c\u5efa\u7acb\u526f\u672c\uff0c\u8b93\u8b80\u53d6\u6642\u4e0d\u5fc5\u9396\u5b9a\u8a72\u6a39\u3002
          • \u4e0d\u5fc5\u4f7f\u7528\u5b8c\u6574\u7684 key\uff0c\u800c\u662f\u5728\u78ba\u4fdd\u7368\u7acb\u6027\u7684\u540c\u6642\uff0c\u53d6\u7528\u7e2e\u5beb\u5373\u53ef\u3002
          • \u8b93\u76f8\u8fd1\u7684 page \u653e\u5728 filesystem \u7684\u9644\u8fd1\uff0c\u4f46\u662f\u7576\u6a39\u72c0\u7d50\u69cb\u88ab\u66f4\u65b0\uff0c\u5c31\u9700\u8981\u66f4\u6df1\u4e00\u5c64\u7684\u6f14\u7b97\u6cd5\u3002
          • \u589e\u52a0\u540c\u5c64\u9644\u8fd1 page \u7684\u5730\u5740\uff0c\u52a0\u901f\u641c\u5c0b
          • \u4e00\u4e9b\u8b8a\u5f62\u7684 B-Tree \u6703\u6574\u5408 Log-Structure \u7684\u529f\u80fd\u53bb\u505a\u52a0\u901f
          • ...
          "},{"location":"feedback/designing-data-intensive-applications/foundation-index/#\u6bd4\u8f03","title":"\u6bd4\u8f03","text":"

          \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

          • SSTable \u9069\u5408\u5beb\u5165\uff0cB-Tree \u9069\u5408\u8b80\u53d6\u3002
          • B-Tree \u8f03\u6210\u719f\u7a69\u5b9a\u4f46\u662f SSTable \u6b63\u9010\u6f38\u63d0\u5347\u4f7f\u7528\u6bd4\u4f8b\u3002

          \u7d30\u7bc0\uff1a

          • \u5beb\u5165\uff1a\u6bcf\u6b21\u5beb\u5165\u9032\u8cc7\u6599\u5eab\u7684\u8cc7\u6599\uff0c\u5176\u4e00\u751f\u88ab\u91cd\u8907\u5beb\u5165\u786c\u9ad4\u7684\u6b21\u6578\u7a31\u70ba write amplification
          • B-Tree \u6bcf\u6b21\u5beb\u5165\u9032\u8cc7\u6599\u5eab\u6642\u6642\uff0c\u90fd\u6703\u5beb\u5165\u81f3\u5c11\u5169\u904d\uff08WAL\uff09\uff0c\u4e14\u6bcf\u6b21\u66f4\u65b0 page \u7684\u4e9b\u5fae\u8cc7\u6599\uff0c\u90fd\u9700\u8981\u5b8c\u6574\u91cd\u65b0\u5beb\u5165\uff08\u56e0\u70ba\u662f\u6539\u52d5\u820a\u8cc7\u6599\uff09
          • SSTable write amplification \u901a\u5e38\u8f03\u4f4e\u4e14 append \u7684\u65b9\u5f0f\u4ecd\u8b93\u4ed6\u6709\u8f03\u9ad8\u7684\u5beb\u5165\u6548\u80fd\uff0c\u4f46\u53d7\u58d3\u7e2e\u548c\u6574\u5408\u7684\u6f14\u7b97\u6cd5\u6216\u4f7f\u7528\u8005\u8a2d\u5b9a\u5f71\u97ff\u3002
          • \u6a5f\u68b0\u5f0f\u786c\u789f\uff08\u78c1\u789f\uff09\u5728\u6709\u9806\u5e8f\u6027\u7684\u5beb\u5165\uff08append\uff09\u6703\u6709\u8f03\u9ad8\u7684\u6548\u80fd
          • \u56fa\u614b\u786c\u789f\u56e0\u5176\u662f\u5beb\u9032\u6676\u7247\u88e1\uff0c\u9069\u5408\u7dca\u5bc6\u7684\u8cc7\u6599\u5beb\u5165\uff0c\u6545 append \u8f03\u6709\u6548\u3002\uff08\u96d6\u7136\u97cc\u9ad4\u6703\u76e1\u91cf\u8b93\u5beb\u5165\u4fdd\u6301\u7dca\u5bc6\uff09
          • \u8a18\u61b6\u9ad4
          • B-Tree \u901a\u5e38\u9700\u8981\u8f03\u591a\u8a18\u61b6\u9ad4\uff0c\u56e0\u70ba\u6bcf\u500b page \u90fd\u662f\u56fa\u5b9a\u5927\u5c0f\uff0c\u4ee3\u8868\u53ef\u80fd\u6703\u6709\u5f88\u591a\u9592\u7f6e\u7a7a\u9593
          • SSTable \u900f\u904e\u53cd\u8986\u58d3\u7e2e\u6574\u5408\uff0c\u901a\u5e38\u4f7f\u7528\u8f03\u5c11\u8a18\u61b6\u9ad4\u3002\u4f46\u662f\u82e5\u662f\u904e\u5927\u7684\u5beb\u5165\u91cf\uff0c\u53ef\u80fd\u6703\u5c0e\u81f4\u58d3\u7e2e\u6574\u5408\u7684\u901f\u5ea6\u4f86\u4e0d\u53ca\u914d\u5408\uff0c\u9032\u800c\u7121\u9650\u91cf\u7684\u589e\u9577\u8a18\u61b6\u9ad4\uff0c\u6700\u7d42\u5d29\u6f70\uff0c\u9700\u8981\u66ff\u4ed6\u6e96\u5099\u76e3\u63a7\u7cfb\u7d71\u3002
          • \u6709\u6548\u6027
          • SSTable \u56e0\u5176\u53ef\u80fd\u6703\u9700\u8981\u53cd\u8986\u58d3\u7e2e\u6574\u5408\uff0c\u5118\u7ba1\u662f\u80cc\u666f\u57f7\u884c\uff0c\u4ecd\u6703\u5403\u6389\u6a5f\u5668\u7684 CPU\uff0c\u5c0e\u81f4\u901f\u5ea6\u964d\u4f4e
          • B-Tree \u5176 latency \u901a\u5e38\u8f03\u7a69\u5b9a
          • \u9664\u4e86 CPU\uff0c\u4e5f\u8981\u8003\u616e\u8cc7\u6599\u7684 I/O \u80fd\u529b\u3002SSTable \u9700\u8981\u58d3\u7e2e\u6574\u5408\uff0c\u6bcf\u6b21\u66ab\u5b58\u7684\u6700\u65b0\u8cc7\u6599\u584a\u53c8\u9700\u8981\u8db3\u5920\u4efd\u91cf\u7684\u8cc7\u6e90\u4f86\u505a\u5beb\u5165\uff0c\u5c0e\u81f4\u548c\u65b0\u8cc7\u6599\u7684\u5beb\u5165\u4e92\u76f8\u7af6\u722d\uff0c\u62d6\u6162\u901f\u5ea6\u3002
          • \u539f\u5b50\u6027
          • B-Tree \u4e2d\uff0c\u6bcf\u500b key \u53ea\u6703\u6709\u4e00\u500b value\uff0c\u53ef\u900f\u904e\u9396\u5b9a\u7279\u5b9a page \u4f86\u4fdd\u6301\u539f\u5b50\u6027\u3002
          • SSTable \u540c\u4e00\u500b key \u53ef\u80fd\u5b58\u5728\u591a\u500b\u8cc7\u6599\uff0c\u5728\u8655\u7406\u539f\u5b50\u6027\u6642\u6703\u9700\u8981\u8f03\u8cbb\u5de5\u7684\u6f14\u7b97\u6cd5
          "},{"location":"feedback/designing-data-intensive-applications/foundation-index/#\u7d22\u5f15\u6392\u5e8f","title":"\u7d22\u5f15\u6392\u5e8f","text":"

          \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

          1. \u6bcf\u500b\u6b21\u7d1a\u7d22\u5f15\u7528 key-value \u5132\u5b58\uff0c\u5176\u4e2d\u7684 value \u4ee3\u8868\u591a\u500b\u4e3b\u7d22\u5f15\u3002\u4f8b\u5982\uff0c\u5e74\u9f61 20 \u7684 value \u6709 [user-1, user-10]
          2. \u7528 primary index \u53bb\u6574\u5408 \u6b21\u7d1a\u7d22\u5f15\u3002\u4f8b\u5982\uff0c\u624b\u6a5f\u70ba 09123 \u7684 key-value \u70ba 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

          • heap file
          • _clustered index
          "},{"location":"feedback/designing-data-intensive-applications/foundation-index/#\u5806\u7a4d\u6a94","title":"\u5806\u7a4d\u6a94","text":"

          \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

          1. \u628a\u6240\u6709 index \u7684\u8cc7\u6599\u5eab\u90fd\u66f4\u65b0\u6a94\u6848\u4f4d\u7f6e\u3002
          2. \u6216\u5728\u820a\u7684 \u5806\u7a4d\u6a94 \u4e2d\u5b58\u653e\u65b0\u7684 \u5806\u7a4d\u6a94 \u7684\u4f4d\u7f6e\uff0c\u9019\u6a23\u641c\u5c0b\u6642\u9593\u6703\u8d8a\u4f86\u8d8a\u9577
          "},{"location":"feedback/designing-data-intensive-applications/foundation-index/#\u7fa4\u805a\u5f0f\u7d22\u5f15","title":"\u7fa4\u805a\u5f0f\u7d22\u5f15","text":"

          \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

          • \u984d\u5916\u7684\u5132\u5b58\u7a7a\u9593\uff08\u591a\u958b\u4e00\u500b Index Tree \u53bb\u5b58\uff09\u3002
          • \u984d\u5916\u7684\u641c\u5c0b\u6642\u9593

          \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\uff1aR-Tree\u3002

          \u5176\u4ed6\u53ef\u80fd\u9700\u8981\u591a\u7dad\u5ea6\u7684 \u7d22\u5f15 \u5834\u666f\u6709\uff1a

          • \u96fb\u5546\u9700\u8981\u641c\u5c0b\u9577\u3001\u5bec\u3001\u9ad8\u7684\u5546\u54c1
          • \u4eba\u529b\u9280\u884c\u9700\u8981\u641c\u5c0b\u85aa\u8cc7\u3001\u8ddd\u96e2\u65b0\u5e97\u6700\u8fd1\u7684\u5de5\u4f5c
          "},{"location":"feedback/designing-data-intensive-applications/foundation-index/#\u6a21\u7cca\u7d22\u5f15","title":"\u6a21\u7cca\u7d22\u5f15","text":"

          \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

          • \u62fc\u932f\u3002
          • \u6587\u6cd5\u8f49\u63db\u3002\u5982\uff1a\u904e\u53bb\u5f0f\u3001\u73fe\u5728\u5f0f\u3002
          • \u540c\u7fa9\u8a5e\u3002
          • \u8a72\u8a5e\u5f59\u9577\u642d\u914d\u7684\u8a5e\u3002\u5982\uff1a\u6e1b\u80a5\u3001\u904b\u52d5\u3002

          \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\uff0cLucene \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

          • \u7576\u96fb\u6e90\u5207\u65b7\uff0c\u8a18\u61b6\u9ad4\u7684\u8cc7\u6599\u5c31\u6c92\u4e86
          • \u4fbf\u5b9c

          \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

          • \u4e0d\u5728\u4e4e\u7576\u96fb\u6e90\u5207\u65b7\uff0c\u662f\u5426\u9700\u8981\u7dad\u6301\u8cc7\u6599\uff1aMemcached
          • \u9700\u8981\u7dad\u6301\u8cc7\u6599\uff1aVoltDB\u3001MemSQL\u3001Oracle TimesTen\u3001Redis\u3001Couchbase
          • \u900f\u904e\u7279\u6b8a\u786c\u9ad4\uff08\u4e0d\u65b7\u96fb\u7cfb\u7d71\uff09
          • \u5beb Log\uff0c\u9019\u65b9\u6cd5\u9664\u7dad\u6301\u8cc7\u6599\uff0c\u4e5f\u64c1\u6709\u63d0\u4f9b\u5099\u4efd\u3001\u65b9\u4fbf\u5206\u6790\u7b49\u597d\u8655\u3002
          • \u5b9a\u6642\u5feb\u7167\u3002
          • \u900f\u904e\u5176\u4ed6\u6a5f\u5668\u8907\u88fd\u8cc7\u6599\uff08replicate\uff09

          \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

          1. http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.16.652 \u21a9

          "},{"location":"feedback/designing-data-intensive-applications/foundation-model/","title":"\u8cc7\u6599\u6a21\u578b\u548c\u8a9e\u6cd5","text":"

          \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

          • \u968e\u5c64\u5f0f\u6a39\u72c0\u7d50\u69cb\uff08Hierarchical Tree\uff09
          • \u95dc\u806f\u5f0f\u6a21\u578b\uff08Relational model\uff09
          • \u6587\u4ef6\u5f0f\u6a21\u578b\uff08Document model\uff09
          • \u5716\u50cf\u5f0f\u6a21\u578b\uff08Graph-like model\uff09

          \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

          • \u76f8\u4f3c\u8cc7\u6599\u88ab\u6574\u5408\u9032\u540c\u4e00\u95dc\u4fc2\uff08relations/tables\uff09\u4e2d
          • \u800c\u5404\u500b\u95dc\u4fc2\u88e1\u662f\u4e00\u7cfb\u5217\u7684\u975e\u9806\u5e8f\u6027\u7d44\u5408(tuples/rows)\u3002

          \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

          • \u5c0d\u8cc7\u6599\u5eab\u505a\u624b\u8173\u6703\u4e0d\u6703\u5403\u6389\u7dda\u4e0a\u4f7f\u7528\u8005\u7684\u6548\u80fd
          • \u61c9\u7528\u7a0b\u5f0f\u53ef\u4ee5\u9000\u7248\uff0c\u6240\u4ee5\u9700\u8981\u8003\u616e\u81e8\u6642\u6709\u72c0\u6cc1\u6642\uff0c\u9000\u7248\u662f\u5426\u6703\u5f71\u97ff\u3002\uff08forward compatible\uff09

          \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\uff08data locality\uff09
          • \u8cc7\u6599\u7684\u8f49\u63db\uff08impedance mismatch\uff09
          • \u601d\u60f3\u7684\u8f49\u63db

          \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

          • \u95dc\u806f\u5f0f\u8cc7\u6599\u5eab\u652f\u63f4 JSON \u683c\u5f0f\u7684\u6b04\u4f4d
          • PostgreSQL
          • MySQL,
          • IBM DB2
          • \u8cc7\u6599\u5f0f\u8cc7\u6599\u5eab\u900f\u904e\u6587\u4ef6\u53c3\u8003\uff08document reference\uff09\u505a\u806f\u5408\uff08join\uff09
          • RethinkDB
          • MongoDB \u7684 driver
          • \u95dc\u806f\u5f0f\u8cc7\u6599\u5eab\u7684\u8cc7\u6599\u5c40\u90e8\u6027\uff08data locality\uff09
          • Google Spanner \u900f\u904e\u7db1\u76ee\u5ba3\u544a\u5176\u5c6c\u65bc\u54ea\u500b\u6bcd\u8868\uff08parent table\uff09\u4f86\u505a\u5230\u5c40\u90e8\u6027
          • Oracle \u7684 multi-table index, Bigtable\uff08Cassandra, HBase\uff09 \u7684 column-family \u4e5f\u90fd\u985e\u4f3c
          "},{"location":"feedback/designing-data-intensive-applications/foundation-model/#\u5716\u50cf\u5f0f\u6a21\u578b","title":"\u5716\u50cf\u5f0f\u6a21\u578b","text":"

          \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

          • \u4eba\u969b\u95dc\u4fc2
          • \u7db2\u9801\u95dc\u4fc2
          • \u9053\u8def

          \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

          • \u4efb\u4f55\u9ede\u548c\u5176\u4ed6\u4efb\u4f55\u9ede\u90fd\u53ef\u4ee5\u9023\u7d50
          • \u7d66\u5b9a\u4e00\u500b\u9ede\uff0c\u53ef\u4ee5\u5feb\u901f\u627e\u5230\u548c\u5176\u6709\u6240\u9023\u7d50\u7684\u9ede\u3002\u4e0d\u7ba1\u662f\u9032\u9084\u662f\u51fa\u3002
          • \u56e0\u70ba\u7dda\u4e0a\u6709\u6a19\u865f\uff0c\u6240\u4ee5\u53ef\u4ee5\u8ce6\u4e88\u7dda\u4e0d\u540c\u610f\u7fa9

          \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

          • \u570b\u5bb6 A \u88ab_\u570b\u5bb6 B_ \u4f75\u8cfc\uff0c\u8b8a\u6210_\u57ce\u5e02 A_\u3002\u539f\u672c\u51fa\u751f\u65bc_\u570b\u5bb6 A_ \u7684\u4eba\uff0c\u8981\u6539\u6210\u51fa\u751f\u65bc_\u570b\u5bb6 B_ \u4e0b\u7684_\u57ce\u5e02 A_\u3002\u5982\u679c\u662f\u95dc\u806f\u5f0f\u8cc7\u6599\u5eab\uff0c\u56e0\u70ba\u5c64\u7d1a\u6539\u8b8a\u4e86\uff0c\u8981\u8abf\u6574\u7684\u6771\u897f\u5f88\u591a\u3002
          • \u4eca\u5929\u9664\u4e86\u8981\u8a2d\u5b9a\u570b\u5bb6\u5916\uff0c\u9084\u60f3\u8981\u8a2d\u5b9a\u4f7f\u7528\u8005\u559c\u6b61\u5403\u7684\u98df\u7269\uff0c\u53ef\u4ee5\u4e0d\u9700\u8981\u8abf\u6574\u7db1\u76ee\u76f4\u63a5\u589e\u52a0\u7bc0\u9ede\u548c\u7dda\u3002

          \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

          • Neo4j
          • Titan
          • InfiniteGraph

          \u4e09\u5143\u7d44\u6a21\u578b\uff08triple-stores model\uff09

          • Datomic
          • AllegroGraph

          \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

          • \u9ede\uff1aID\u3001\u7a2e\u985e\u3001\u5c6c\u6027
          • \u7dda\uff1aID\u3001\u8d77\u59cb\u9ede\u3001\u7d42\u9ede\u3001\u6a19\u865f\uff08label\uff09\u3001\u5c6c\u6027

          \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
          1. prefix \u53ef\u4ee5\u60f3\u50cf\u6210 namespace \u7684\u6982\u5ff5\u3002

          \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

          • \u8072\u660e\u5f0f\uff08Declarative\uff09
          • \u547d\u4ee4\u5f0f\uff08Imperative\uff09
          • \u908f\u8f2f\u5f0f\uff08Deductive\uff09

          \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":"
          • \u9ad8\u62bd\u8c61\u7a0b\u5ea6\uff0c\u597d\u7406\u89e3
          • \u66f4\u65b0\u5e95\u5c64\u904b\u4f5c\u65b9\u5f0f\u800c\u4e0d\u7528\u6539\u52d5\u7a0b\u5f0f\u78bc\uff0c\u5e95\u5c64\u904b\u4f5c\u53ef\u80fd\u5305\u62ec
          • \u641c\u5c0b\u6f14\u7b97\u6cd5
          • \u4e26\u884c\u8655\u7406\uff08parallel processing\uff09
          • \u7b49\u7b49
          "},{"location":"feedback/designing-data-intensive-applications/foundation-model/#\u547d\u4ee4\u5f0f\u597d\u8655","title":"\u547d\u4ee4\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
          1. Map \u4ee3\u8868\u5f9e\u8cc7\u6599\u5eab\u4e2d\u6bcf\u7b46\uff08row/document\uff09\u7be9\u9078\u51fa\u591a\u7d44 k-v \u7d44\u5408\uff0c\u5c31\u597d\u50cf\u8cc7\u6599\u7d50\u69cb\u4e2d\u7684 map \u4e00\u6a23
          2. Reduce \u4ee3\u8868\u5f9e Map \u4e2d\u7684 k-v \u7d44\u5408\uff0c\u76f8\u540c\u7684 key \u6703\u88ab\u5206\u914d\u5230\u540c\u4e00\u7d44\uff0c\u7136\u5f8c\u505a\u964d\u51aa
          3. \u8072\u660e\u5f0f\u7684\u65b9\u5f0f\u53bb\u7be9\u9078\u7a2e\u985e\u70ba\u9bca\u9b5a\u7684\u52d5\u7269

          \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

          • \u82e5\u8003\u616e\u7d30\u7dfb\u8abf\u6574\uff0c\u4f8b\u5982\u6a5f\u5668\u5b78\u7fd2
          • \u55ae\u7d14\u547c\u53eb\u51fd\u5f0f\u53ef\u4ee5\u5f88\u5feb\u901f\u7684\u628a\u9019\u500b\u904b\u7b97\u5206\u914d\u5230\u591a\u53f0\u8cc7\u6599\u5eab\u4e2d\uff08\u8072\u660e\u5f0f\u4e00\u6a23\u53ef\u4ee5\u505a\u5230\uff0c\u4f46\u662f\u6703\u5f88\u4e0d\u76f4\u89c0\uff0c\u4f8b\u5982 MPP\uff09
          "},{"location":"feedback/designing-data-intensive-applications/foundation-model/#\u908f\u8f2f\u5f0f","title":"\u908f\u8f2f\u5f0f","text":"

          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

          • A: B \u662f \u53d7\u5bb3\u8005\uff08V\uff09 \u7684\u670b\u53cb\uff0c\u4e14 C \u548c V \u4e92\u76f8\u8a0e\u53ad\u3002
          • B: \u4e8b\u60c5\u767c\u751f\u6642\u6211\u4e0d\u5728\u73fe\u5834\uff0c\u800c\u4e14\u6211\u4e0d\u8a8d\u8b58 V\u3002
          • C: \u6211\u662f\u7121\u8f9c\u7684\uff0c\u4f46\u4e8b\u767c\u6642\uff0c\u6211\u770b\u5230 A \u548c B \u5728\u73fe\u5834\uff0c\u53ef\u662f\u6211\u4e0d\u77e5\u9053\u7a76\u7adf\u8ab0\u505a\u7684\u3002

          \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
          1. \u9019\u88e1\u7684\u5b9a\u7fa9\u8b49\u8a5e\uff0c\u6839\u64da\u6bcf\u500b\u4eba\u7684\u908f\u8f2f\u4e0d\u540c\uff0c\u53ef\u80fd\u6709\u4e0d\u540c\u5beb\u6cd5\u3002\u4f8b\u5982\uff1a

            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
          1. Fallback function\uff0c\u7576\u8cc7\u6599\u6c92\u6709 within \u5c31\u53d6\u540d\u7a31\u3002

          Datalog \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

          • \u5176\u4ed6\u6a21\u578b
          • \u79d1\u5b78\u4e0a\u4f7f\u7528\uff0c\u9700\u8981\u5132\u5b58\u5927\u91cf\u72c0\u614b\u7684\u8cc7\u6599\u5eab\u3002\u4f8b\u5982\uff0c\u5f37\u4e2d\u5b50\u5c0d\u649e\u6a5f\u7684 ROOT
          • \u57fa\u56e0\u8cc7\u6599\u5eab\uff0c\u9577\u5b57\u4e32\u7684\u76f8\u4f3c\u6027\u3002\u4f8b\u5982\uff0cGenBank
          • \u6587\u672c\u641c\u5c0b\u3002\u4f8b\u5982\uff0cElasticsearch
          • \u5716\u50cf\u5f0f\u6a21\u578b\u548c\u4e0a\u9762\u63d0\u7684 CODASYL \u770b\u8d77\u4f86\u597d\u50cf\u90fd\u8981\u5faa\u7dda\u53bb\u627e\u5230\u67d0\u500b\u9ede\uff0c\u4f46\u662f\u6709\u4e9b\u5dee\u7570\uff1a
          • \u5716\u50cf\u5f0f\u6a21\u578b\u7684\u7db1\u76ee\u5f88\u55ae\u7d14\uff0c\u4efb\u4f55\u9ede\u90fd\u53ef\u4ee5\u548c\u5176\u4ed6\u4efb\u4f55\u9ede\u9023\u7d50
          • \u5716\u50cf\u5f0f\u6a21\u578b\u7684\u7dda\u662f\u6c92\u6709\u9806\u5e8f\u6027\u7684\uff0cCODASYL \u5728\u8003\u616e\u5132\u5b58\u6642\u7684\u72c0\u6cc1\uff0c\u4e00\u5c0d\u591a\u95dc\u4fc2\u662f\u6709\u9806\u5e8f\u6027\u7684
          • CODASYL \u662f\u547d\u4ee4\u5f0f\u7684\u641c\u5c0b\u8a9e\u8a00\uff0c\u5927\u90e8\u5206\u5716\u50cf\u5f0f\u6a21\u578b\u7684\u641c\u5c0b\u8a9e\u8a00\u5f0f\u8072\u660e\u5f0f\u7684
          • \u8a9e\u610f\u7db2\u7ad9\uff08semantic web\uff09\u548c\u4e09\u5143\u7d44\u6a21\u578b\u5f88\u50cf\uff0c\u4f46\u662f\u537b\u662f\u5169\u500b\u610f\u7fa9\u4e0d\u540c\u800c\u5be6\u4f5c\u65b9\u5f0f\u76f8\u4f3c\u7684\u6771\u897f\u3002
          "},{"location":"feedback/designing-data-intensive-applications/glossary/","title":"\u8a5e\u5f59\u8868","text":"

          \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

          1. \u5728\u591a\u7dda\u7a0b\u4e2d\u4ee3\u8868\u6bcf\u9805\u5de5\u4f5c\u90fd\u662f\u55ae\u4e00\u4e14\u7368\u7acb\u7684\uff0c\u4e0d\u53d7\u5176\u4ed6\u7dda\u7a0b\u5f71\u97ff\uff08\u985e\u4f3c\u65bc\u4ea4\u6613\u4e2d\u7684\u9694\u96e2\u6027\uff09\u3002
          2. \u5728\u4ea4\u6613\u4e2d\u4ee3\u8868\u6240\u6709\u5de5\u4f5c\u6574\u5408\u6210\u55ae\u4e00\u5de5\u4f5c\uff1a\u8981\u9ebb\u90fd\u5b8c\u6210\uff0c\u8981\u9ebb\u90fd\u5931\u6557\u3002
          "},{"location":"feedback/designing-data-intensive-applications/glossary/#\u53cd\u58d3","title":"\u53cd\u58d3","text":"

          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

          1. \u5404\u5206\u5340\u7684\u4e0d\u5e73\u8861\uff0c\u4f8b\u5982\u67d0\u4e9b\u5206\u5340\u6709\u5927\u91cf\u8acb\u6c42\u6216\u8cc7\u6599\uff0c\u800c\u5176\u4ed6\u5206\u5340\u5247\u5c11\u5f97\u591a\u3002\u4e5f\u88ab\u7a31\u70ba hot spot\u3002
          2. \u4e26\u884c\u8655\u7406\u6642\u4ea4\u6613\u7684\u4ea4\u932f\u8655\u7406\u5c0e\u81f4\u8cc7\u6599\u4ee5\u4e0d\u671f\u671b\u7684\u9806\u5e8f\u51fa\u73fe\u3002
          "},{"location":"feedback/designing-data-intensive-applications/glossary/#\u91cd\u8907\u5206\u6b0a","title":"\u91cd\u8907\u5206\u6b0a","text":"

          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

          1. \u4fee\u6539\u7a0b\u5f0f\u78bc\u6642\uff0c\u53ef\u80fd\u7121\u610f\u9593\u7834\u58de\u6389\u5176\u4e2d\u5404\u500b\u95dc\u4fc2\u7684\u5354\u4f5c\uff0cDebug \u4ee3\u50f9\u5f88\u9ad8
          2. \u6bcf\u6b21\u4ea4\u4ed8\u3001\u90e8\u7f72\u90fd\u6703\u82b1\u5f88\u9577\u6642\u9593
          3. \u65b0\u9032\u54e1\u5de5\uff0c\u6216\u60f3\u9032\u5165\u9019\u500b\u5c08\u6848\u7684\u9580\u6abb\uff08\u7406\u89e3\u5c08\u6848\u7684\u6642\u9593\uff09\u63d0\u9ad8

          \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

          1. \u98a8\u96aa\u63d0\u9ad8\uff0c\u56e0\u670d\u52d9\u5f7c\u6b64\u4e4b\u9593\u6709\u9023\u7d50\uff0c\u82e5 A \u670d\u52d9\u58de\u4e86\uff0cB \u670d\u52d9\u4e5f\u6703\u58de\u6389\u3002\u591a\u4e00\u53f0\u6a5f\u5668\uff0c\u5c31\u591a\u4e00\u4efd\u6a5f\u5668\u58de\u6389\u7684\u98a8\u96aa
          2. \u589e\u52a0\u6e9d\u901a\u9700\u8981\u7684\u6642\u9593\u3001\u98a8\u96aa\u548c\u6d41\u91cf
          3. \u672c\u4f86\u540c\u4e00\u500b\u61c9\u7528\u7a0b\u5f0f\uff0c\u53ef\u4ee5\u5171\u7528\u4e00\u4efd\u8a2d\u5b9a\u6a94\u3001\u7a0b\u5f0f\u78bc\u548c\u6a5f\u654f\u8cc7\u6599\uff0c\u82e5\u670d\u52d9\u8b8a\u591a\u4e86\uff0c\u8a72\u600e\u9ebc\u540c\u6b65\u9019\u4e9b\u5171\u7528\u7684\u6a94\u6848
          4. \u8981\u600e\u9ebc\u77e5\u9053\u7279\u5b9a Request \u70ba\u4ec0\u9ebc\u6703\u56de 500\uff0c\u54ea\u53f0\u58de\u4e86\uff1f
          5. \u9650\u5236\u7279\u5b9a\u670d\u52d9\u50c5\u80fd\u5728\u670d\u52d9\u9593\u6e9d\u901a\uff0c\u800c\u4e0d\u80fd\u5c0d\u5916\uff08VPC\uff09

          \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

          1. Protocol - \u4e0d\u540c\u7684\u670d\u52d9\u9593\uff0c\u8a72\u7528\u4ec0\u9ebc\u65b9\u5f0f\u6e9d\u901a\uff0c\u554f\u984c 2
          2. SLA and Load Testing - \u5982\u4f55\u8b49\u660e\u6548\u7387\u5728\u63a5\u53d7\u7bc4\u570d\u5167\uff0c\u554f\u984c 2
          3. Observability - Log\u3001Metric \u548c Tracing\uff0c\u554f\u984c 4
          4. Container - \u670d\u52d9\u8b8a\u591a\u4e86\uff0c\u90e8\u7f72\u4e0a\u8a72\u4f7f\u7528\u4ec0\u9ebc\u65b9\u5f0f\uff0c\u554f\u984c 1
          5. Container Orchestration and Misc. - \u5bb9\u5668\u8abf\u5ea6\u5de5\u5177\uff0c\u554f\u984c 1~5
          "},{"location":"feedback/distributed-systems-with-node.js/container-orchestration-and-misc/","title":"Container Orchestration and Misc","text":"

          \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

          • \u5982\u4f55\u505a Scaling\uff0c\u55ae\u4e00\u6216\u591a\u53f0\u6a5f\u5668
          • Load Balance
          • Health Check and Replacement
          • \u591a\u670d\u52d9\u9593\u7684\u6e9d\u901a\uff0cdocker-compose \u50c5\u80fd\u5728\u55ae\u4e00\u53f0\u6a5f\u5668\u4e0b\u5354\u52a9\u6e9d\u901a
          • \u65b0\u7248\u672c\u7684\u61c9\u7528\u7a0b\u5f0f\u5982\u4f55\u7121\u7e2b\u63a5\u8ecc

          \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

          • Container
          • Volume
          • Pod
          • Node
          • Master
          • Cluster
          "},{"location":"feedback/distributed-systems-with-node.js/container-orchestration-and-misc/#container","title":"Container","text":"

          \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

          • Kubernetes Daemon\uff08\u7a31\u4f5c Kubelet\uff09
          • Container Daemon\uff08\u5982\uff1aDocker\uff09
          • Network Proxy\uff08\u7a31\u4f5c Kube Proxy\uff09

          "},{"location":"feedback/distributed-systems-with-node.js/container-orchestration-and-misc/#master","title":"Master","text":"

          \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

          "},{"location":"feedback/distributed-systems-with-node.js/container-orchestration-and-misc/#cluster","title":"Cluster","text":"

          \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

          • Deployment
          • Selector
          • Label
          • Scheduler
          • Controller
          • ReplicaSet
          • Probe

          "},{"location":"feedback/distributed-systems-with-node.js/container-orchestration-and-misc/#deployment","title":"Deployment","text":"

          \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

          "},{"location":"feedback/distributed-systems-with-node.js/container-orchestration-and-misc/#label","title":"Label","text":"

          \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

          "},{"location":"feedback/distributed-systems-with-node.js/container-orchestration-and-misc/#scheduler","title":"Scheduler","text":"

          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

          • StatefulSet \u662f\u53ef\u4ee5\u63d0\u4f9b\u72c0\u614b\u5132\u5b58\u7684\u7fa4\u7d44\u3002

          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

          • Ingress
          • Service

          "},{"location":"feedback/distributed-systems-with-node.js/container-orchestration-and-misc/#service","title":"Service","text":"

          \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

          • \u78ba\u8a8d kubectl \u7684\u5b89\u88dd\uff1akubectl version --client

          brew install kubernetes-cli

          • \u78ba\u8a8d minikube \u7684\u5b89\u88dd\uff1aminikube version

          brew install minikube

          "},{"location":"feedback/distributed-systems-with-node.js/container-orchestration-and-misc/#kubectl","title":"kubectl","text":"
          • \u555f\u52d5
          $ 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
          • \u67e5\u770b\u73fe\u6709 Pods
          $ kubectl get pods\nNo resources found in default namespace.\n

          \u56e0\u70ba\u9810\u8a2d\u4f7f\u7528 default namespace

          • \u67e5\u770b\u6240\u6709 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
          • \u67e5\u770b\u7cfb\u7d71\u7684 Pods
          $ 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
          • \u67e5\u770b Node
          $ kubectl get nodes\nNAME       STATUS   ROLES                  AGE   VERSION\nminikube   Ready    control-plane,master   48d   v1.20.2\n
          • \u4f7f\u7528 minikube \u7684 Docker daemon

          1. \u5148\u67e5\u770b\u73fe\u6709 Docker process list\uff1adocker ps
          2. \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
          3. \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":"tldr
          H4sIAAAAAAAACs1c245a2RH9lRHPbLTvF79NFCXxSzTKRMrDZB721UbBTYduzyUj/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

          • \u5b9a\u7fa9 Pod \u548c Label
          • \u900f\u904e Selector \u6c7a\u5b9a scaling \u8981\u4f7f\u7528\u54ea\u4e00\u4e9b Pod
          • \u8981\u6c42\u9054\u5230\u7684\u72c0\u614b\u3002\u4ee5\u6b64\u8a2d\u5b9a\u6a94\u70ba\u4f8b\uff1a\u9577\u5230 3/5 \u500b Pods
          • Container \u8a2d\u5b9a\u3002\u7248\u672c\u3001port \u548c health-check

          \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

          • \u5b9a\u7fa9\u61c9\u7528\u7a0b\u5f0f\u5c0d\u5916\u7684 port\uff08Node \u5916\u3001Cluster \u5167\uff09
          • \u8a2d\u5b9a Ingress \u5c0e\u5f15\u689d\u4ef6\uff0c\u653e\u5982 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

          • Horizontal Autoscaler \u900f\u904e CPU \u6216\u5176\u4ed6\u7cfb\u7d71\u8cc7\u6e90\u53bb\u589e\u6e1b Pod\u3002
          • Cron Job \u900f\u904e\u6392\u7a0b\u53bb\u589e\u6e1b Pod\u3002

          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":"
          • Live migration
          • Retry strategy
          • Chaos resiliency
          • Data atomicity
          • Dependency security
          • Dependency upgrade

          \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

          1. SLO
          2. Load Test
          3. Baseline
          "},{"location":"feedback/distributed-systems-with-node.js/container/#observability","title":"Observability","text":"

          \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

          • Log
          • Metric
          • Tracing
          • Alert
          • Health Check
          "},{"location":"feedback/distributed-systems-with-node.js/container/#\u90e8\u7f72\u65b9\u5f0f","title":"\u90e8\u7f72\u65b9\u5f0f","text":"

          \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

          • \u53ef\u651c\u5e36\u6027 - \u76f8\u4f9d\u5957\u4ef6\u9808\u4e00\u4f75\u651c\u5e36\uff0c\u5305\u62ec Binaries Depending
          • \u6548\u7387 - \u6bcf\u6b21\u90e8\u7f72\u9700\u6d88\u8017\u7684\u6210\u672c
          • \u5b89\u5168\u6027 - \u6a5f\u654f\u8cc7\u8a0a\u7684\u66b4\u9732
          • \u8106\u5f31\u6027 - \u76f8\u4f9d\u5957\u4ef6\u7248\u672c\u7684\u885d\u7a81\u7b49
          "},{"location":"feedback/distributed-systems-with-node.js/container/#\u6bd4\u8f03","title":"\u6bd4\u8f03","text":"
          • \u5be6\u9ad4\u6a5f - \u82e5\u548c\u5176\u4ed6\u670d\u52d9\uff08\u5982 Load Balancer\uff09\u6709\u5957\u4ef6\u7684\u885d\u7a81\uff0c\u6703\u5f88\u9ebb\u7169\u3002
          • VM - \u9069\u5408 DB \u548c\u5176\u4ed6\u9700\u8981\u5132\u5b58\u7a69\u5b9a\u72c0\u614b\u7684\u61c9\u7528\u7a0b\u5f0f\u3002
          • Container - \u9069\u5408\u9ad8\u8fed\u4ee3\u3001\u9ad8\u90e8\u7f72\u7387\u7684\u61c9\u7528\u7a0b\u5f0f\u3002

          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

          1. dockerd daemon\uff0c\u5c0d\u5916\u63d0\u4f9b API\uff0c\u9032\u884c Container \u7684\u5efa\u7f6e\u548c\u7ba1\u7406
          2. Docker CLI \u63d0\u4f9b\u8a9e\u6cd5\u5c0d API \u9032\u884c\u547c\u53eb\u548c\u8a2d\u5b9a\u3002
          3. Docker Hub

          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

          • \u4ee5 Node.js \u70ba\u57fa\u790e\u7684\u88fd\u4f5c\u7bc4\u4f8b
          • \u5404\u8a9e\u8a00\u7684\u7bc4\u4f8b - \u5b98\u7db2
          "},{"location":"feedback/distributed-systems-with-node.js/container/#\u548c-container-\u7684\u4e92\u52d5","title":"\u548c Container \u7684\u4e92\u52d5","text":"

          \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
          • \u4e26\u4f7f\u7528 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

          "},{"location":"feedback/distributed-systems-with-node.js/container/#\u628a\u6a94\u6848\u4e1f\u9032-container-\u4e2d","title":"\u628a\u6a94\u6848\u4e1f\u9032 Container \u4e2d","text":"
          $ 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

          "},{"location":"feedback/distributed-systems-with-node.js/container/#alternative","title":"Alternative","text":"

          \u73fe\u5728\u5df2\u7d93\u8f03\u5c11\u5176\u4ed6\u7ba1\u7406 Container \u7684\u7522\u54c1\uff1a

          • RedHat \u6709\u4e00\u500b\u5df2\u7d93 archive \u7684\u5c08\u6848 rkt
          • Open Container Initiative \u5247\u5617\u8a66\u5236\u8a02 container \u6a19\u6e96\u3002
          "},{"location":"feedback/distributed-systems-with-node.js/container/#\u5206\u6563\u5f0f\u7cfb\u7d71\u4e0a\u7684\u61c9\u7528","title":"\u5206\u6563\u5f0f\u7cfb\u7d71\u4e0a\u7684\u61c9\u7528","text":"

          \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

          • \u628a\u4e0d\u540c\u670d\u52d9\u5305\u88dd\u6210\u540c\u4e00\u500b Image

          \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

          • JFrog Artifactory
          • Cloud based
          "},{"location":"feedback/distributed-systems-with-node.js/container/#\u8a3b","title":"\u8a3b","text":"

          \u9019\u6b21\u5206\u4eab\u7701\u7565

          • \u4e0a\u50b3 Image \u5230 Docker Registry
          • \u81ea\u88fd Docker Registry UI
          "},{"location":"feedback/distributed-systems-with-node.js/observability/","title":"Observability","text":""},{"location":"feedback/distributed-systems-with-node.js/observability/#\u8aaa\u660e","title":"\u8aaa\u660e","text":"

          \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

          "},{"location":"feedback/distributed-systems-with-node.js/observability/#tracing","title":"Tracing","text":"

          \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

          "},{"location":"feedback/distributed-systems-with-node.js/observability/#metric","title":"Metric","text":"

          \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

          "},{"location":"feedback/distributed-systems-with-node.js/observability/#elasticsearch","title":"Elasticsearch","text":"

          \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":"
          • Datadog
          • Sumo Logic
          • Splunk
          • Cloud (AWS, GCP, ELK)
          "},{"location":"feedback/distributed-systems-with-node.js/observability/#metrics","title":"Metrics","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, InfluxDB
          • StatsD -> cAdvisor, MetricBeat
          "},{"location":"feedback/distributed-systems-with-node.js/observability/#tracing_1","title":"Tracing","text":"

          \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

          "},{"location":"feedback/distributed-systems-with-node.js/observability/#\u7a0b\u5f0f\u78bc_1","title":"\u7a0b\u5f0f\u78bc","text":"

          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

          "},{"location":"feedback/distributed-systems-with-node.js/observability/#\u7bc4\u4f8b","title":"\u7bc4\u4f8b","text":"

          \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":"
          • \u61c9\u7528\u5c64\uff08Application Layer\uff09
          • \u8868\u9054\u5c64\uff08Presentation Layer\uff09
          • \u6703\u8b70\u5c64\uff08Session Layer\uff09
          • \u50b3\u8f38\u5c64\uff08Transport Layer\uff09
          • \u7db2\u8def\u5c64\uff08Network Layer\uff09
          • \u8cc7\u6599\u9023\u7d50\u5c64\uff08Data Link Layer\uff09
          • \u5be6\u9ad4\u5c64\uff08Physical Layer\uff09
          "},{"location":"feedback/distributed-systems-with-node.js/protocol/#http","title":"HTTP","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

          "},{"location":"feedback/distributed-systems-with-node.js/protocol/#json","title":"JSON","text":"

          \u55ae\u7d14\u900f\u904e JSON \u50b3\u905e\u6709\u4ec0\u9ebc\u7f3a\u9ede\uff1f

          1. \u6b63\u78ba\u7684\u8cc7\u6599\u683c\u5f0f\u61c9\u8a72\u8981\u9577\u4ec0\u9ebc\u6a23\u5b50\uff1f
          2. \u4f7f\u7528\u8005\u9700\u8981\u95b1\u8b80\u76f8\u95dc\u6587\u4ef6\uff0c\u6709\u8fa6\u6cd5\u8b93\u6a5f\u5668\u81ea\u52d5\u8655\u7406\u55ce\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

          • JSON API
          • JSON Schema
          • OpenAPI (Swagger)

          \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

          • \u53ef\u4ee5\u62ff\u5230\u6700\u6e96\u78ba\u7684\u8cc7\u6599\uff0c\u6e1b\u5c11\u7db2\u8def\u50b3\u8f38
          • \u628a\u591a\u7a2e\u670d\u52d9\u7684\u8cc7\u6599\u5728\u4e00\u6b21\u8acb\u6c42\u4e2d\u8981\u9f4a

          \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

          "},{"location":"feedback/distributed-systems-with-node.js/protocol/#\u898f\u7bc4","title":"\u898f\u7bc4","text":"
          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

          • web-api \u539f\u59cb\u78bc
          // \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
          • recipe-api \u539f\u59cb\u78bc
          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

          • \u518d\u5efa\u7acb\u4e00\u500b endpoint \u5c08\u9580\u505a\u9019\u4ef6\u4e8b\uff1a \u904e\u591a API\uff0c\u96e3\u7ba1\u7406\u548c\u7406\u89e3
          • \u5728\u8a72 endpoint \u65b0\u589e\u8b8a\u6578\uff1aneed_send_email\uff1a \u8b93\u8a72 endpoint \u8d8a\u4f86\u8d8a\u8907\u96dc

          Remote 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

          • \u6240\u6709\u683c\u5f0f\u7686\u9808\u9810\u5148\u8a2d\u5b9a\u597d\uff0c\u526f\u6a94\u540d\u70ba .proto\uff0c\u4e14\u9700\u8981\u8b93 client \u64c1\u6709\u3002
          • \u5404\u503c\u9700\u7d66\u5b9a\u9806\u5e8f\uff0c\u4e14\u4e4b\u5f8c\u4e0d\u5efa\u8b70\u4fee\u6539\u3002
          • \u6578\u5b57\u6709\u591a\u578b\u5225\uff1aint32\uff0cint64\uff0cfloat\uff0cdouble \u7b49\u7b49\u3002

          \u9019\u4e9b\u689d\u4ef6\u6709\u5e7e\u500b\u597d\u8655\uff1a

          • \u6548\u80fd\u3001\u9ad4\u7a4d\u7684\u6700\u512a\u5316\uff0cbinary serialize/deserialize
          {\"id\":42} v.s. 42\n
          • \u5411\u5f8c\u76f8\u5bb9
          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":"
          • gRPC proto
          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
          • \u5efa\u7acb service\uff0c\u539f\u59cb\u78bc
          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
          • \u5efa\u7acb client\uff0c\u539f\u59cb\u78bc
          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

          • \u6709 field
          • \u4e0d\u9700\u8981\u984d\u5916\u6a94\u6848\uff08\u5982 .proto\uff09\u53bb\u63cf\u8ff0

          gRPC

          • Apache Thrift
          • JSON RPC

          \u95dc\u65bc gRPC \u63a8\u85a6\u7684\u6587\u7ae0\uff1a

          • \u6bd4\u8f03 gRPC \u670d\u52d9\u8207 HTTP API
          "},{"location":"feedback/distributed-systems-with-node.js/protocol/#\u7d50\u8ad6","title":"\u7d50\u8ad6","text":"
          1. JSON \u4f60\u9700\u8981\u4e00\u500b http client \u4f86\u547c\u53eb\u773e\u591a API Endpoint\uff0c\u8a0a\u606f\u683c\u5f0f\u4e5f\u9700\u8981\u6709\u984d\u5916\u7684 Schema \u5b9a\u7fa9
          2. GraphQL \u4f60\u9084\u662f\u9700\u8981\u4e00\u500b http client\uff0c\u4f46\u662f\u9019\u6b21\u53ea\u9700\u8981\u5c0d\u61c9\u4e00\u500b\u7aef\u9ede\uff0c\u800c\u4e14\u53ef\u4ee5\u81ea\u5df1\u7d44\u7e54\u67e5\u8a62\u5167\u5bb9
          3. gRPC \u4f60\u9023 http client \u90fd\u4e0d\u7528\uff0c\u5957\u4ef6\u6703\u5e6b\u4f60\u7522\u51fa\u9019\u4e9b\u547c\u53eb\u7684\u7a0b\u5f0f\u908f\u8f2f\uff0c\u800c\u4f60\u53ea\u9700\u8981\u50cf\u5beb\u4e00\u822c function \u4e00\u6a23\u547c\u53eb\u5373\u53ef
          "},{"location":"feedback/distributed-systems-with-node.js/sla-and-load-testing/","title":"SLA and Load Testing","text":""},{"location":"feedback/distributed-systems-with-node.js/sla-and-load-testing/#\u8aaa\u660e","title":"\u8aaa\u660e","text":"

          \u7522\u54c1\u90fd\u9700\u8981\u5411\u4f7f\u7528\u8005\u5c55\u793a\u90e8\u5206\u7684\u627f\u8afe\uff0c\u4f8b\u5982\uff1a

          • \u8981\u6c42\u5728 100ms \u5167\u56de\u61c9\uff08Latency\uff09
          • 1 \u5e74\u7576\u4e2d\u50c5\u6709 1 \u5c0f\u6642\u4ee5\u5167\u7684\u6642\u9593\u670d\u52d9\u53ef\u80fd\u7121\u6cd5\u4f7f\u7528
          • \u4efb\u4f55\u8b8a\u52d5\u90fd\u6703\u4fdd\u8b49\u4e00\u5e74\u5167\u7684\u5411\u5f8c\u76f8\u5bb9

          \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

          "},{"location":"feedback/distributed-systems-with-node.js/sla-and-load-testing/#\u5206\u6563\u5f0f\u7cfb\u7d71\u4e2d\u7684\u610f\u7fa9","title":"\u5206\u6563\u5f0f\u7cfb\u7d71\u4e2d\u7684\u610f\u7fa9","text":"

          \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

          • \u5728\u4e0d\u505a\u4efb\u4f55\u5916\u90e8\u8acb\u6c42\u4e4b\u4e0b\u7684 Latency
          • \u4f7f\u7528\u7684\u6846\u67b6\u6240\u9650\u5236\u7684 Latency

          \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

          • \u5957\u7528 compression\uff0c\u5c0d\u65bc\u6548\u80fd\u6703\u6709\u4ec0\u9ebc\u5f71\u97ff\uff1f
          • \u518d\u52a0\u4e0a r-prxoy \u53c8\u6703\u6709\u4ec0\u9ebc\u5f71\u97ff\uff1f
          "},{"location":"feedback/distributed-systems-with-node.js/sla-and-load-testing/#latency_1","title":"Latency","text":"Percentile With Proxy Without 99% 47ms 53ms 99.9% 50ms 57ms 99.99% 52ms 62ms 99.999% 53ms 64ms"},{"location":"feedback/distributed-systems-with-node.js/sla-and-load-testing/#protocol","title":"Protocol","text":"

          \u4e0a\u4e00\u4efd\u5831\u544a\u8a0e\u8ad6\u5404\u7a2e\u670d\u52d9\u9593\u7684\u6e9d\u901a\u65b9\u5f0f\uff1a

          • JSON over HTTP
          • GraphQL
          • gRPC

          \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":"
          1. SLA \u662f\u9762\u5411\u5f88\u591a\u7684\u6307\u6a19\uff0c\u6709\u6642\u5fc5\u9808\u6b0a\u8861
          2. \u6b63\u78ba\u7684\u8a55\u4f30\u7b26\u5408\u81ea\u5df1\u7684\u6307\u6a19\uff0c\u4f8b\u5982\uff1a\u81ea\u52d5\u586b\u5beb vs \u9280\u884c\u958b\u6236
          3. \u5728\u505a load testing \u6642\uff0c\u9700\u8981\u6ce8\u610f\u7522\u54c1\u53ef\u80fd\u7684\u6d41\u91cf\u9ad8\u4f4e\u5cf0
          4. \u8981\u76e1\u91cf\u6e1b\u5c11\u96dc\u97f3\uff08noisy neighbor\uff09\uff0c\u76e1\u91cf\u5728\u985e\u4f3c\u7dda\u4e0a\u7684\u74b0\u5883\u4e2d\u6e2c\u8a66
          5. \u4e00\u500b\u7522\u54c1\u7a76\u7adf\u8a72\u958b\u5e7e\u500b\uff08\u591a\u5c11 CPU/Memory\uff09\u6a5f\u5668\u4f86\u6eff\u8db3\u7dda\u4e0a\u6d41\u91cf\uff1f
          "},{"location":"feedback/distributed-systems-with-node.js/sla-and-load-testing/#\u65b9\u5411","title":"\u65b9\u5411","text":"
          1. \u89c0\u5bdf\u7dda\u4e0a\u74b0\u5883\u73fe\u6709\u7684\u6d41\u91cf\u9ad8\u5cf0\uff0c\u4e26\u5236\u5b9a\u51fa\u7b26\u5408\u5546\u52d9\u908f\u8f2f\u7684 Latency\uff08SLO\uff09\u3002
          2. \u5236\u5b9a\u55ae\u4f4d\uff1a\u4e00\u500b Docker container\u3001\u4e00\u53f0\u6a5f\u5668\u3001EC2
          3. \u627e\u51fa\u5728\u6eff\u8db3 TP99 \u4e0b\u7684\u8acb\u6c42\u6578
          4. \u589e\u52a0\u55ae\u4f4d\uff0c\u53cd\u8986\u6e2c\u8a66\u76f4\u5230\u9054\u5230\u80fd\u5bb9\u7d0d\u7dda\u4e0a\u74b0\u5883\u7684\u6578\u91cf
          "},{"location":"feedback/distributed-systems-with-node.js/sla-and-load-testing/#\u7bc4\u4f8b_1","title":"\u7bc4\u4f8b","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

          • \u661f\u661f\u662f\u600e\u9ebc\u4f86\u7684\uff1f
          • \u80fd\u91cf\u600e\u9ebc\u4f86\u7684\uff1f
          • \u6838\u878d\u5408\u5f37\u5ea6\u8981\u8db3\u4ee5\u652f\u6490\u91cd\u529b\u624d\u80fd\u5f62\u6210\u661f\u661f
          • \u66f4\u91cd\u66f4\u5927\u7684\u539f\u5b50\u7684\u5f62\u6210\u539f\u7406\u6709\u54ea\u4e9b\uff1f\u53ef\u4ee5\u641c\u5c0b\u6c26\u805a\u8b8a\u7684\u904e\u7a0b

          \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

          • \u6838\u5206\u88c2\uff08nuclear fission\uff09
          • \u6838\u878d\u5408\uff08nuclear fusion\uff09
          • \u5730\u71b1\uff08geothermal\uff0c\u91cd\u529b\u5c55\u73fe\u51fa\u7684\u4e00\u7a2e\u80fd\u91cf\uff09
          • \u592a\u967d\u80fd\uff08solar\uff09
          • \u6f6e\u6c50\uff08tidal\uff0c\u91cd\u529b\u5c55\u73fe\u51fa\u7684\u4e00\u7a2e\u80fd\u91cf\uff09

          \u5176\u4ed6\u80fd\u6e90\u4fbf\u90fd\u662f\u5f9e\u9019\u4e9b\u57fa\u790e\u80fd\u6e90\u5ef6\u4f38\u800c\u6210\uff0c\u4f8b\u5982

          • \u98a8\u529b\uff0c\u7576\u592a\u967d\u80fd\u7522\u751f\u71b1\u529b\u5dee\u5c31\u6703\u5f62\u6210\u58d3\u529b\u5dee\u9032\u800c\u5f62\u6210\u98a8\u529b
          • \u6c34\u529b\uff0c\u900f\u904e\u6c34\u7684\u84b8\u767c\u81f3\u9ad8\u8655\u5f8c\u7531\u4e0a\u800c\u4e0b\u7684\u52d5\u529b\u5dee\u5f62\u6210\u6c34\u529b
          • \u77f3\u6cb9\uff0c\u690d\u7269\u5229\u7528\u592a\u967d\u57f7\u884c\u5149\u5408\u4f5c\u7528\u4ee5\u4fbf\u751f\u5b58\uff0c\u6700\u5f8c\u8870\u9000\u5f62\u6210\u77f3\u6cb9

          \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

          • \u900f\u904e\u6c18\u548c\u6c1a\u7684\u78b0\u649e\uff08D-T fusion\uff09\uff0c\u8f03\u6613\u767c\u751f\u878d\u5408
          • \u900f\u904e\u6c18\u548c\u6c18\u7684\u78b0\u649e\uff08D-D fusion\uff09\uff0c\u8f03\u96e3\u767c\u751f\u878d\u5408\uff0c\u4f46\u662f\u4e0d\u518d\u9700\u8981\u6c1a

          \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\u4f46\u53ef\u4ee5\u8f15\u6613\u5c31\u53ef\u4ee5\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\u6240\u4ee5\u91cd\u529b\u6240\u9020\u6210\u7684\u62c9\u529b\u6703\u88ab\u6e1b\u5c11\u800c\u5347\u9ad8\u6d77\u5e73\u9762\uff0c\u6240\u4ee5\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\uff0c\u56e0\u70ba\u5982\u6b64\uff0c\u5730\u7403\u81ea\u8f49\u7684\u901f\u5ea6\u964d\u4f4e\u4e86\u800c\u6708\u7403\u516c\u8f49\u7684\u901f\u5ea6\u537b\u63d0\u9ad8\u4e86\u4e5f\u9020\u6210\u6708\u7403\u516c\u8f49\u7684\u8ddd\u96e2\u63d0\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

          • \u5132\u80fd\u7cfb\u7d71
          • \u9700\u6c42\u63a7\u7ba1
          • \u8de8\u5340\u57df\u96fb\u7db2
          • \u589e\u52a0\u5099\u63f4\u4ee5\u63d0\u4f9b\u8d85\u904e\u6240\u9700\u7684\u80fd\u91cf\uff0c\u9019\u65b9\u6cd5\u4e0d\u7d93\u6fdf\uff0c\u6211\u5011\u5c31\u4e0d\u8a0e\u8ad6\u4e4b\u4e86\u3002

          \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\u4e2d\u65b7\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 \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

          • \u6838\u878d\u5408\u7684\u7814\u7a76 \u6838\u878d\u5408\u7814\u7a76\u5c6c\u65bc\u524d\u77bb\u6027\u7814\u7a76\uff0c\u4e5f\u5c31\u662f\u5118\u7ba1\u4f60\u4ed8\u51fa\u7684\u5f88\u591a\uff0c\u5f88\u53ef\u80fd\u6700\u7d42\u537b\u6c92\u6709\u4ec0\u9ebc\u6709\u50f9\u503c\u7684\u56de\u5831\u3002\u4f46\u662f\u7576\u6709\u6210\u679c\u6642\uff0c\u9019\u500b\u6536\u7a6b\u537b\u975e\u5e38\u5de8\u5927\uff0c\u4f60\u5c07\u64c1\u6709\u4e00\u500b\u5b89\u975c\u3001\u53ef\u9760\u3001\u9ad8\u6548\u4e14\u53ef\u4ee5\u4f4e\u6210\u672c\u5730\u63a5\u7ba1\u73fe\u6709\u77f3\u5316\u71c3\u6599\u767c\u96fb\u5ee0\u7684\u5927\u90e8\u5206\u5668\u6750\u7684\u80fd\u6e90\u3002
          • \u512a\u5316\u518d\u751f\u80fd\u6e90\u7684\u64f7\u53d6\u6548\u7387\u548c\u6210\u672c \u518d\u751f\u80fd\u6e90\u7684\u9593\u6b47\u6027\uff0c\u8b93\u6211\u5011\u5f88\u96e3\u53ea\u4f9d\u9760\u55ae\u4e00\u80fd\u6e90\u3002\u592a\u967d\u80fd\u64c1\u6709\u5f88\u9ad8\u7684\u80fd\u91cf\u5bc6\u5ea6\uff0c\u537b\u6709\u9031\u671f\u6027\u9593\u6b47\u7684\u554f\u984c\uff0c\u6211\u5011\u53ef\u80fd\u53ef\u4ee5\u5229\u7528\u98a8\u529b\u4f86\u5f4c\u88dc\uff0c\u4f46\u4ecd\u9700\u8981\u9760\u4e00\u4e9b\u624b\u6cd5\u4f86\u6eff\u8db3\u9700\u6c42\uff0c\u4f8b\u5982\u5132\u80fd\u3001\u64f4\u589e\u96fb\u7db2\u3001\u8b93\u6a5f\u5668\u8070\u660e\u7684\u4f7f\u7528\u80fd\u6e90\uff08\u4f8b\u5982\u7528\u96fb\u5927\u6236\u767d\u5929\u7528\u96fb\uff09\u3002
          • \u5927\u81bd\u5730\u7e7c\u7e8c\u63a1\u7528\u6838\u5206\u88c2 \u5118\u7ba1\u6838\u5206\u88c2\u80fd\u767c\u96fb\u5ee0\u5c6c\u65bc\u6700\u5b89\u5168\u7684\u767c\u96fb\u8a2d\u65bd\u4e4b\u4e00\uff08\u6bcf\u55ae\u4f4d\u80fd\u91cf\u9020\u6210\u7684\u50b7\u4ea1\u4eba\u6578\u5f88\u4f4e\uff09\uff0c\u4f46\u5927\u773e\u5c0d\u65bc\u4ed6\u7684\u6050\u61fc\u5f9e\u672a\u5e73\u606f\u3002\u672a\u4f86\u6ecb\u751f\u53cd\u61c9\u7684\u6838\u5206\u88c2\u5fc5\u7136\u6703\u6709\u6240\u9032\u5c55\u548c\u5be6\u8e10\uff0c\u4f46\u662f\u7576\u610f\u5916\u7121\u53ef\u907f\u514d\u5730\u767c\u751f\u6642\uff0c\u6211\u5011\u9700\u8981\u52aa\u529b\u8b93\u707d\u5bb3\u767c\u751f\u6642\u7684\u7bc4\u570d\u9650\u7e2e\u5728\u6211\u5011\u63d0\u51fa\u7684\u627f\u8afe\u4e2d\u3002\u6700\u5f8c\u6838\u5206\u88c2\u7684\u767c\u5c55\u6703\u52a0\u901f\u6838\u6b66\u5668\u7684\u64f4\u589e\uff0c\u9019\u4e5f\u662f\u6b64\u6280\u8853\u5e36\u4f86\u7684\u91cd\u8981\u4e14\u4e0d\u5e78\u7684\u526f\u4f5c\u7528\u4e4b\u4e00\u3002
          1. \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

          2. \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

          "},{"location":"feedback/future-of-fusion-energy/fusion/","title":"\u6838\u878d\u5408","text":"
          • \u539f\u5b50\u6838\u4e2d\u7684\u5169\u500b\u8cea\u5b50\u660e\u660e\u5e36\u8457\u6b63\u96fb\uff0c\u70ba\u4ec0\u9ebc\u5f7c\u6b64\u4e0d\u6703\u56e0\u70ba\u96fb\u78c1\u529b\u76f8\u65a5\uff1f\u6838\u529b
          • \u7576\u5169\u500b\u8cea\u5b50\u76f8\u649e\uff0c\u4e26\u4e14\u8d8a\u904e\u5eab\u502b\u58c1\u58d8\u6642\u5c31\u6703\u767c\u751f\u6838\u878d\u5408\uff0c\u4f60\u53ef\u4ee5\u60f3\u50cf\u628a\u9ad8\u723e\u592b\u7403\u5f9e\u81fa\u7063\u6d77\u5cfd\u7684\u6d77\u9762\u4e0a\u6253\u9032\u5230\u7389\u5c71\u4e0a\u7684\u4e00\u500b\u7403\u6d1e\uff0c\u8b93\u8cea\u5b50\u8d8a\u904e\u5eab\u502b\u58c1\u58d8\u4e26\u878d\u5408\u5c31\u662f\u9019\u9ebc\u56f0\u96e3\u3002\u4e0d\u53ea\u662f\u529b\u91cf\u8981\u5920\u5f37\uff0c\u540c\u6642\u529b\u91cf\u4e5f\u4e0d\u80fd\u592a\u5f37\u3002\u82e5\u4e0d\u662f\u56e0\u70ba\u64c1\u6709\u8db3\u5920\u5927\u91cf\u7684\u8cea\u5b50\uff08\u9ad8\u723e\u592b\u7403\uff09\u4e14\u6bcf\u9846\u8cea\u5b50\u90fd\u64c1\u6709\u4e00\u5b9a\u7684\u80fd\u91cf\u7684\u74b0\u5883\u4e0b\uff0c\u767c\u751f\u6838\u878d\u5408\u7684\u6a5f\u7387\u5c31\u6703\u975e\u5e38\u4f4e\u3002
          \u6838\u529b

          \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

          • \u57fa\u672c\u7c92\u5b50
          • \u504f\u5fae\u5206
          • \u72f9\u7fa9\u76f8\u5c0d\u8ad6
          • \u91cf\u5b50\u529b\u5b78
          "},{"location":"feedback/physics/astronomy/","title":"\u5929\u6587\u5b78","text":"

          \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

          • \u5fae\u6ce2\uff0c\u6700\u521d\u900f\u904e\u5fae\u6ce2\u89c0\u6e2c\u5b87\u5b99\uff0c\u9032\u800c\u8b93\u6211\u5011\u5c0d\u9019\u500b\u6ce2\u6bb5\u66f4\u4e86\u89e3\uff0c\u5f9e\u800c\u5ef6\u4f38\u5230\u751f\u6d3b\u5de5\u5177\uff0c\u6700\u5f8c\u518d\u5f9e\u751f\u6d3b\u61c9\u7528\u5ef6\u4f38\u66f4\u591a\u9762\u5411\uff0c\u4f8b\u5982 Wi-Fi\u3002
          • CCD\uff0c\u900f\u904e\u5728\u5929\u6587\u5b78\u4e0a\u7684\u61c9\u7528\uff0c\u6700\u5f8c\u666e\u53ca\u5230\u6bcf\u500b\u4eba\u624b\u4e0a\u90fd\u6709\u7684\u624b\u6a5f\u76f8\u6a5f\u3002

          \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

          • \u671b\u9060\u93e1\uff08telescope\uff09\uff0c\u8d8a\u5927\u7684\u611f\u5149\u7bc4\u570d\uff0c\u80fd\u770b\u5230\u7684\u6771\u897f\u5c31\u6703\u8d8a\u6e05\u6670\uff0c \u4f8b\u5982\uff1a\u6211\u5011\u773c\u775b\u6709 5 mm \u7684\u5bec\u5ea6\u63a5\u6536\u5149\u7dda\uff0c\u4e26\u5f9e\u4e2d\u91d0\u6e05\u7269\u9ad4\u7684\u8f2a\u5ed3\u3002 \u76ee\u524d\u6b63\u5728\uff082017-\uff09\u667a\u5229\u8208\u5efa\u4e00\u500b\u4e16\u4e0a\u6700\u5927\u7684\u671b\u9060\u93e1\uff0c\u6b50\u6d32\u6975\u5927\u671b\u9060\u93e1\uff0c\u5176\u5c07\u64c1\u6709 40 m \u5927\u7684\u76f4\u5f91\u4f86\u63a5\u6536\u5149\u7dda\u3002
          • \u5149\u8b5c\uff08spectroscopy\uff09\uff0c\u5f9e\u725b\u9813\u958b\u59cb\u7814\u7a76\u5149\u7684\u6563\u5c04\u5f8c\uff0c\u6211\u5011\u767c\u73fe\u4e86\u65e5\u5149\u662f\u7531\u4e0d\u540c\u984f\u8272\u7684\u5149\u7d44\u6210\u7684\u3002 \u5982\u4eca\uff0c\u6211\u5011\u6703\u900f\u904e\u89c0\u5bdf\u5929\u6587\u7269\u9ad4\u7684\u5149\u8b5c\uff0c\u63a8\u6e2c\u8a72\u7269\u9ad4\u7684\u6eab\u5ea6\u3001\u7d44\u6210\u3001\u79fb\u52d5\u901f\u5ea6\u3002
          • \u5f71\u50cf\uff0c\u6709\u4e86\u5f71\u50cf\uff0c\u6211\u5011\u53ef\u4ee5\u5ba2\u89c0\u7684\u7d00\u9304\u9019\u4e9b\u7269\u9ad4\uff0c\u4e0d\u518d\u662f\u900f\u904e\u89c0\u5bdf\u5bb6\u7684\u53e3\u8ff0\u3001\u66f8\u5beb\u6216\u624b\u7e6a\u3002 \u9664\u6b64\u4e4b\u5916\uff0c\u6211\u5011\u4e5f\u53ef\u4ee5\u5229\u7528\u4e00\u4e9b\u5f71\u50cf\u6280\u8853\uff0c\u7372\u5f97\u4ee5\u524d\u4e0d\u77e5\u9053\u7684\u8a0a\u606f\uff0c \u4f8b\u5982\u66dd\u5149\uff0cCCD \u53ef\u4ee5\u9577\u671f\u7f6e\u65bc\u661f\u7a7a\u4e0b\uff0c\u4e26\u7d2f\u7a4d\u90a3\u4e9b\u767c\u5149\u5fae\u5f31\u7684\u661f\u9ad4\u6240\u6563\u767c\u51fa\u7684\u5149\u7dda\u3002
          • \u591a\u6ce2\u6bb5\u5929\u6587\u5b78\uff0c\u5149\u7dda\u662f\u96fb\u78c1\u6ce2\u7684\u4e00\u7a2e\u8868\u73fe\u5f62\u5f0f\uff0c \u900f\u904e\u89c0\u5bdf\u4e0d\u540c\u983b\u7387\u7684\u96fb\u78c1\u6ce2\uff0c\u6211\u5011\u7372\u5f97\u9664\u4e86\u984f\u8272\u5916\uff0c\u4ee5\u5f80\u4e0d\u77e5\u9053\u7684\u4e00\u4e9b\u8a0a\u606f\u3002 \u4e8b\u5be6\u4e0a\uff0c\u6bcf\u6b21\u6211\u5011\u767c\u660e\u4e0d\u540c\u6ce2\u9577\uff08\u4f8b\u59822008 \u5e74 NASA \u767c\u5c04\u7684\u8cbb\u7c73\u4f3d\u99ac\u5c04\u7dda\u592a\u7a7a\u671b\u9060\u93e1\uff09\u7684\u89c0\u6e2c\u624b\u6cd5\uff0c \u90fd\u6703\u5f97\u5230\u4e00\u4e9b\u5168\u65b0\u7684\u767c\u73fe\uff08\u4f8b\u5982\u4e2d\u5b50\u661f\u5674\u6d41\u548c\u8cbb\u7c73\u6c23\u6ce1\u7b49\u7b49\uff09\u3002
          • \u592a\u7a7a\u63a2\u6e2c\uff0c\u81ea\u5f9e 1960 \u5e74\u4ee3\u5f8c\uff0c\u4eba\u985e\u6709\u80fd\u529b\u5728\u9664\u4e86\u5730\u7403\u4e4b\u5916\u7684\u5730\u65b9\u9032\u884c\u89c0\u6e2c\u3002 \u5728\u5916\u592a\u7a7a\u89c0\u6e2c\u53ef\u4ee5\u907f\u514d\u5927\u6c23\u5c64\u7684\u5e72\u64fe\uff0c\u4f8b\u5982 X\u5c04\u7dda \u5c31\u7121\u6cd5\u7a7f\u900f\u5927\u6c23\u5c64\uff0c\u5fc5\u9808\u7528\u592a\u7a7a\u671b\u9060\u93e1\u3002
          • \u96fb\u5b50\u8a08\u7b97\uff0c\u900f\u904e\u524d\u8ff0\u5e7e\u9805\u7684\u6210\u679c\uff0c\u8f49\u63db\u6210\u96fb\u8166\u7684\u8cc7\u6599\u5f8c\uff0c\u5c31\u53ef\u4ee5\u9032\u884c\u4efb\u4f55\u8907\u96dc\u7684\u8a08\u7b97\u3002 \u6700\u5f8c\u5229\u7528\u8a08\u7b97\u7d50\u679c\u91cd\u65b0\u56de\u4f86\u8abf\u6574\u89c0\u6e2c\u65b9\u5f0f\u548c\u8a2d\u5b9a\uff0c\u53cd\u8986\u900f\u904e\u9019\u4e9b\u6b63\u5411\u56de\u994b\uff0c\u9054\u6210\u8d8a\u4f86\u8d8a\u7cbe\u6e96\u7684\u7d50\u679c\u3002

          \u5728\u89c0\u6e2c\u5929\u6587\u5b78\u4e0a\uff0c\u6211\u5011\u4e5f\u6709\u5f88\u591a\u56f0\u96e3\u9700\u8981\u9762\u5c0d\uff1a

          • \u8ddd\u96e2\uff0c\u6211\u5011\u89c0\u5bdf\u5230\u7684\u7269\u9ad4\u5149\u7dda\u5f37\u5ea6\u6703\u96a8\u8457\u8ddd\u96e2\u5e73\u65b9\u6210\u53cd\u6bd4\u3002 \u8209\u4f8b\u4f86\u8aaa\uff0c\u8ddd\u96e2\u6211\u5011\u6700\u8fd1\u7684\u6046\u661f \u6bd4\u9130\u661f\uff0c\u5b83\u548c\u6211\u5011\u7684\u8ddd\u96e2\u662f 270k AU\u3002 \u63db\u7b97\u4e0b\u4f86\uff0c\u6211\u5011\u5f9e\u90a3\u6536\u5230\u7684\u5149\u7dda\u6703\u6bd4\u592a\u967d\u9084\u5f31\u4e0a \\(10^{11}\\) \u500d\u3002
          • \u5927\u5c0f\uff0c\u7269\u9ad4\u5728\u89c0\u5bdf\u8005\u770b\u5230\u7684\u5927\u5c0f\u8ddf\u5be6\u969b\u5927\u5c0f\u6703\u548c\u8ddd\u96e2\u6210\u53cd\u6bd4\uff08\u6ce8\u610f\u4e0d\u662f\u5e73\u65b9\uff09\uff0c \u6211\u5011\u901a\u5e38\u7528\u89d2\u76f4\u5f91\u4f86\u8868\u793a\u7269\u9ad4\u7684\u8ddd\u96e2\u548c\u5927\u5c0f\u95dc\u4fc2\u3002 \u4e00\u500b DVD \u5927\u5c0f\u7684\u7269\u9ad4\uff0c\u5728 400 \u516c\u5c3a\u9060\u7684\u8ddd\u96e2\u7d04\u70ba 1 \u5f27\u5206\uff08arch minute\uff09\uff0c \u5728 27 \u516c\u91cc\u5916\u5247\u7d04\u70ba 1 \u5f27\u79d2\u3002 \u5929\u6587\u5b78\u88e1\u5f88\u5e38\u4f7f\u7528\u9019\u500b\u55ae\u4f4d\uff0c\u4ee5\u97cb\u4f2f\u671b\u9060\u93e1\u70ba\u4f8b\uff0c \u4ed6\u7684\u756b\u8cea\u6e05\u6670\u5ea6\u53ef\u4ee5\u62cd\u651d 0.1 \u5f27\u79d2\u7684\u7269\u9ad4\u3002
          • \u591a\u8b8a\u7684\u6ce2\u9577\uff0c\u4e0d\u540c\u6eab\u5ea6\u91cb\u653e\u7684\u6ce2\u9577\u4e0d\u540c\uff08\u6a5f\u7387\u5206\u4f48\u4e0a\u7684\u9ad8\u5cf0\uff09\uff0c \u6eab\u5ea6\u8d8a\u9ad8\u6ce2\u9577\u8d8a\u77ed\u3001\u983b\u7387\u8d8a\u9ad8\uff08\u4f46\u4e0d\u662f\u7dda\u6027\u7684\uff09\u3002 \u9019\u5c31\u4ee3\u8868\u6211\u5011\u9700\u8981\u8a2d\u8a08\u5f88\u591a\u4e0d\u540c\u5100\u5668\uff0c\u7528\u4f86\u89c0\u6e2c\u4e0d\u540c\u6ce2\u9577\u7684\u96fb\u78c1\u6ce2\u3002
          • \u6578\u91cf\uff0c\u5929\u9ad4\u6578\u91cf\u592a\u591a\u4e86\uff0c\u5982\u679c\u6211\u5011\u8981\u628a\u5b83\u5b58\u9032\u8cc7\u6599\u5eab\u4e2d\uff0c\u9019\u4ee3\u8868\u6211\u5011\u9700\u8981\u70ba\u5176\u8a2d\u8a08\u4e00\u4e9b\u7279\u6b8a\u7684\u8cc7\u6599\u5eab\u3002 \u9664\u6b64\u4e4b\u5916\uff0c\u5728\u505a\u4efb\u4f55\u7d71\u8a08\u548c\u8a08\u7b97\u6642\uff0c\u4e5f\u6703\u9762\u81e8\u8a08\u7b97\u80fd\u529b\u7684\u554f\u984c\u3002
          • \u6642\u9593\uff0c\u5929\u9ad4\u8b8a\u7570\u7684\u901f\u5ea6\u901a\u5e38\u5f88\u6162\uff0c\u6211\u5011\u5982\u4f55\u5728\u77ed\u77ed\u6578\u5e74\u9593\u5c31\u66b8\u89e3\u4e26\u9a57\u8b49\u5929\u9ad4\u5728\u5404\u500b\u968e\u6bb5\u7684\u8b8a\u7570\uff1f \u4f8b\u5982\uff1a\u592a\u967d\u71c3\u71d2\u6b86\u76e1\u9700\u8981\u6578\u5341\u5104\u5e74\u3002 \u4e5f\u6709\u4e00\u4e9b\u5929\u6587\u73fe\u8c61\u662f\u5feb\u901f\u7684\uff0c\u4f8b\u5982\u8d85\u65b0\u661f\u7684\u80fd\u91cf\u91cb\u653e\u53ef\u80fd\u53ea\u8981\u6578\u6708\u751a\u81f3\u6578\u5929\u3001 \u4e00\u500b\u5de8\u77f3\u5728\u7838\u5411\u5730\u7403\u524d\uff0c\u53ef\u80fd\u53ea\u9700\u8981\u6578\u5c0f\u6642\u7684\u6642\u9593\u5c31\u53ef\u4ee5\u767c\u751f\u5287\u70c8\u7684\u79fb\u52d5\u8b8a\u5316\u3002
          "},{"location":"feedback/physics/astronomy/#\u671b\u9060\u93e1","title":"\u671b\u9060\u93e1","text":"

          \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

          • \u4eae\u5ea6\uff0c\u8981\u80fd\u5075\u6e2c\u4e26\u6574\u5408\u6700\u5fae\u5c0f\u7684\u5149\u6e90\u3002
          • \u92b3\u5229\u5ea6\uff0c\u6bcf\u500b\u661f\u9ad4\u8981\u548c\u5176\u4ed6\u661f\u9ad4\u5340\u5206\u958b\u4f86\u3002
          • \u591a\u500b\u6ce2\u6bb5\uff0c\u4e0d\u53ea\u662f\u53ef\u898b\u5149\uff0c\u4e5f\u5e0c\u671b\u6709\u5176\u4ed6\u6ce2\u6bb5\u7684\u96fb\u78c1\u6ce2\u88ab\u6536\u96c6\u3002
          "},{"location":"feedback/physics/astronomy/#\u4eae\u5ea6","title":"\u4eae\u5ea6","text":"

          \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
          • \u5927\u6c23\u5e72\u64fe
          • \u671b\u773c\u93e1\u7684\u4e0d\u5b8c\u7f8e
          "},{"location":"feedback/physics/astronomy/#\u7e5e\u5c04","title":"\u7e5e\u5c04","text":"

          \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

          • \u5728\u5916\u592a\u7a7a\u5efa\u7f6e\u671b\u9060\u93e1\uff0c\u8a73\u898b\u592a\u7a7a\u671b\u9060\u93e1\u3002
          • \u8ffd\u8e64\u9019\u4e9b\u6643\u52d5\u7136\u5f8c\u900f\u904e\u8a08\u7b97\u6821\u6b63\u9019\u500b\u8aa4\u5dee\u3002 \u4f8b\u5982\u6b50\u6d32\u6975\u5927\u671b\u9060\u93e1\u5229\u7528\u6253\u51fa\u53bb\u7684\u96f7\u5c04\u4f86\u8a08\u7b97\u5927\u6c23\u6643\u52d5\u7a0b\u5ea6\uff0c\u8a73\u898b\u96fb\u8166\u3002
          "},{"location":"feedback/physics/astronomy/#\u671b\u773c\u93e1\u7684\u4e0d\u5b8c\u7f8e","title":"\u671b\u773c\u93e1\u7684\u4e0d\u5b8c\u7f8e","text":"

          \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

          • \u767c\u5c04 \u592a\u7a7a\u68ad \u7684\u8a2d\u65bd
          • \u671b\u9060\u93e1\u6240\u9700\u7684 \u80fd\u91cf
          • \u8b93\u671b\u9060\u93e1\u4fdd\u6301 \u7a69\u5b9a
          • \u9ad4\u8a8d\u5230\u81ea\u5df1\u7684 \u4f4d\u7f6e
          • \u7279\u5b9a\u4f4d\u7f6e\u907f\u514d \u8f3b\u5c04\u548c\u6eab\u5ea6\u5dee
          • \u80fd\u7834\u58de\u8a2d\u65bd\u7684 \u788e\u77f3
          • \u78ba\u4fdd \u8cc7\u6599\u50b3\u8f38 \u7684\u7a69\u5b9a
          "},{"location":"feedback/physics/astronomy/#\u592a\u7a7a\u68ad","title":"\u592a\u7a7a\u68ad","text":"

          \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

          • \u6c23\u9ad4\u5fae\u63a7\uff0c\u5c31\u50cf\u96fb\u5f71\u6f14\u7684\u90a3\u6a23\u3002
          • \u4e09\u500b\u4e0d\u540c\u65b9\u5411\u7684\u8f2a\u5708\uff0c\u900f\u904e\u8ce6\u4e88\u4e09\u500b\u8f2a\u5708\u4e0d\u540c\u7684\u8f49\u52d5\u901f\u5ea6\u4f86\u63a7\u5236\u65b9\u5411\u3002
          • \u5229\u7528\u671b\u9060\u93e1\u5167\u7684\u7dda\u5708\uff0c\u88fd\u9020\u51fa\u78c1\u529b\uff0c\u4e26\u8a66\u8457\u548c\u5730\u78c1\u4ea4\u932f\uff08\u6216\u5e73\u884c\uff09\u4f86\u7522\u751f\u78c1\u529b\u77e9\u4e26\u63a7\u5236\u65b9\u5411\u3002
          "},{"location":"feedback/physics/astronomy/#\u4f4d\u7f6e","title":"\u4f4d\u7f6e","text":"

          \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\u5e73\u7dda\u89c0\u6e2c\u5668\uff0c\u89c0\u770b\u5730\u7403\u4f4d\u7f6e\u4f86\u5f97\u77e5\u81ea\u5df1\u7684\u4f4d\u7f6e
          • \u592a\u967d\u611f\u6e2c\u5668\uff0c\u89c0\u770b\u592a\u967d\u4f4d\u7f6e\u4f86\u5f97\u77e5\u81ea\u5df1\u7684\u4f4d\u7f6e
          • \u9640\u87ba\u5100
          • \u661f\u9ad4\u8ffd\u8e64\u5668\uff0c\u984d\u5916\u4e00\u500b\u76f8\u6a5f\u53bb\u78ba\u8a8d\u548c\u8fa8\u8b58\u76ee\u6a19\u7684\u4f4d\u7f6e\u3002 \u9019\u76f8\u5c0d\u65bc\u5176\u4ed6\u65b9\u6cd5\u6703\u6bd4\u8f03\u7cbe\u6e96\u4f46\u6bd4\u8f03\u8cb4\u3002
          "},{"location":"feedback/physics/astronomy/#\u8f3b\u5c04\u548c\u6eab\u5ea6\u5dee","title":"\u8f3b\u5c04\u548c\u6eab\u5ea6\u5dee","text":"

          \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

          • MS22 \u806f\u76df\u865f\u98db\u8239\u88ab\u5fae\u6d41\u661f\u6253\u51fa\u7834\u6d1e
          "},{"location":"feedback/physics/astronomy/#\u8cc7\u6599\u50b3\u8f38","title":"\u8cc7\u6599\u50b3\u8f38","text":"

          \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

          • \u5927\u6c23\u5c64\u6703\u963b\u64cb\u7279\u5b9a\u5c04\u7dda\u3002
          • \u5e72\u64fe\uff08distort\uff09\u5149\u7dda\uff0c\u56e0\u70ba\u5927\u6c23\u5c64\u7684\u5bc6\u5ea6\u4e0d\u540c\uff0c\u5c31\u50cf\u5149\u5f9e\u7a7a\u6c23\u9032\u5165\u6c34\u6703\u6298\u5c04\u4e00\u6a23\uff0c\u6240\u4ee5\u5149\u6703\u5728\u5927\u6c23\u5c64\u4e2d\u6296\u52d5\u3002
          • \u5730\u8868\u5149\u6e90\uff0c\u4f8b\u5982\u6708\u5149\u3001\u71c8\u5149\u3002 \u5c31\u7b97\u5230\u4e86\u6714\u591c\uff0c\u4ecd\u7136\u6703\u56e0\u70ba\u5728\u5730\u7403\u53e6\u4e00\u908a\u592a\u967d\u900f\u904e\u5927\u6c23\u5c64\u6298\u5c04\u7684\u5fae\u5f31\u5149\u6e90\u3002
          \u5730\u7403\u5404\u7a2e\u8f3b\u5c04\u5e36\u3001\u7279\u6b8a\u9ede\u7684\u6bd4\u4f8b\u5716

          \u53f3\u908a\u7684\u5716\u53ef\u4ee5\u770b\u5230\uff1a

          1. \u6700\u9760\u8fd1\u4e2d\u5fc3\uff08\u5730\u7403\uff09\u7684\u5713\u5708\u7a31\u70ba \u4f4e\u8ecc\u9053\uff0c\u901a\u5e38\u904b\u884c\u5c0d\u5730\u885b\u661f\u3002\u7d04\u70ba 1.05~1.1 \u500b \\(R_e\\)\uff08\u5730\u7403\u534a\u5f91\uff09
          2. \u8cea\u5b50\u5e45\u5c04\u5e36\uff08proton radiation orbit\uff09\uff0c\u7d04\u70ba 1.5 \u500b \\(R_e\\)
          3. \u96fb\u5b50\u8f3b\u5c04\u5e36\uff08electron radiation orbit\uff09\uff0c\u7d04\u70ba 4 \u500b \\(R_e\\)
          4. \u5730\u7403\u975c\u6b62\u8ecc\u9053\uff08Geostationary orbit\uff09\uff0c\u7d04\u70ba 6.54 \u500b \\(R_e\\)
          5. \u78c1\u5c64\uff08magnetosphere\uff09\uff0c\u5728\u9019\u81e8\u754c\u9ede\u592a\u7a7a\u4e2d\u5e36\u96fb\u7684\u7c92\u5b50\u5b50\u53d7\u5230\u5730\u7403\u78c1\u529b\u5f71\u97ff\u7684\u7a0b\u5ea6\u6703\u5927\u65bc\u592a\u7a7a\u4e4b\u5916\uff0c \u7d04\u70ba 10 \u500b \\(R_e\\)

          \u63a5\u8457\u770b\u5de6\u908a\u7684\u5716\uff1a

          1. \u6708\u7403\u7e5e\u884c \u7d04\u70ba 61 \u500b \\(R_e\\)
          2. \u62c9\u683c\u6717\u65e5\u9ede \uff08L2\uff09\u7d04\u70ba 236 \u500b \\(R_e\\)
          3. \u592a\u967d\u7d04\u70ba 23,000 \u500b \\(R_e\\)
          "},{"location":"feedback/physics/astronomy/#\u661f\u9ad4","title":"\u661f\u9ad4","text":"

          \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

          • \u5ba2\u89c0\u5730\u7d00\u9304\u7269\u9ad4\u3002
          • \u628a\u7d00\u9304\u7d50\u679c\u6578\u4f4d\u5316\u3002
          • \u6574\u5408\u7d50\u679c\uff0c\u4f8b\u5982\u66dd\u5149\u3002
          • \u53ef\u4ee5\u611f\u6e2c\u9664\u4e86\u53ef\u898b\u5149\u4e4b\u5916\u7684\u96fb\u78c1\u6ce2\u3002
          \u6574\u5408\u7d50\u679c\u7684\u4f8b\u5b50

          \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

          • \u53ef\u4ee5\u76f4\u63a5\u5132\u5b58\u3001\u904b\u7b97\u6578\u4f4d\u5316\u7684\u611f\u6e2c\u7d50\u679c\u3002
          • \u53ef\u4ee5\u63a7\u5236\u671b\u9060\u93e1\uff0c\u9032\u884c\u6821\u6e96\u3002
          • \u53ef\u4ee5\u9032\u884c\u8907\u96dc\u4e14\u7cbe\u5bc6\u7684\u8a08\u7b97\u3002 \u4f8b\u5982\u6211\u5011\u53ef\u4ee5\u300c\u88fd\u9020\u300d\u51fa\u6578\u5341\u5104\u500b\u5047\u7684\u661f\u9ad4\uff0c\u4e26\u6a21\u64ec\u5176\u78b0\u649e\u3001\u4e92\u52d5\u7b49\u7b49\u7684\u6a5f\u5236\uff0c\u4f86\u9a57\u8b49\u5404\u7a2e\u5047\u8aaa\u3002
          • \u53ef\u4ee5\u900f\u904e\u7db2\u8def\u5feb\u901f\u548c\u4ed6\u4eba\u4e92\u52d5\u3002\u4e16\u754c\u5404\u5730\u90fd\u6709\u5929\u6587\u5b78\u5bb6\u628a\u81ea\u5df1\u7684\u7814\u7a76\u7d50\u679c\u5b58\u4e0b\u4f86\uff0c \u900f\u904e\u7db2\u8def\uff0c\u6211\u5011\u53ef\u4ee5\u5feb\u901f\u628a\u81ea\u5df1\u7684\u7d50\u679c\uff08\u4f8b\u5982 X\u5c04\u7dda \u7684\u66dd\u5149\u7d50\u679c\uff09\u548c\u5225\u4eba\u7684\u7d50\u679c\uff08\u4f8b\u5982\u7d05\u5916\u7dda\u7684\u66dd\u5149\u7d50\u679c\uff09\u9032\u884c\u6bd4\u5c0d\u3002

          \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

          • \u6eab\u5ea6\uff0c\u8a72\u661f\u9ad4\u7684\u6eab\u5ea6\u662f\u591a\u5c11\uff1f
          • \u7d44\u6210\uff0c\u8a72\u661f\u9ad4\u900f\u904e\u54ea\u4e9b\u6210\u5206\u7d44\u6210\uff1f
          • \u901f\u5ea6\uff0c\u79fb\u52d5\u7684\u901f\u5ea6\u548c\u65b9\u5411\u3002
          "},{"location":"feedback/physics/astronomy/#\u6eab\u5ea6","title":"\u6eab\u5ea6","text":"

          \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

          • \u4e00\u500b\u5f9e \u53cd\u5c04\u93e1 \u532f\u805a\u800c\u6210\u7684\u5149\u6e90\u3002
          • \u6e96\u76f4\u5100 \u628a\u5149\u7dda\u8b8a\u6210\u5e73\u884c\u7684\u3002
          • \u5149\u67f5 \u628a\u5149\u7dda\u6253\u6563\uff0c\u8b93\u7279\u5b9a\u6ce2\u9577\u7684\u96fb\u78c1\u6ce2\u805a\u7126\u65bc\u67d0\u8655\u3002
          • CCD \u4f86\u5132\u5b58\u9019\u4e9b\u96fb\u78c1\u6ce2\u3002

          "},{"location":"feedback/physics/astronomy/#\u5176\u4ed6\u8981\u89e3\u6c7a\u7684\u56f0\u96e3","title":"\u5176\u4ed6\u8981\u89e3\u6c7a\u7684\u56f0\u96e3","text":"

          \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

          • \u63a2\u7d22\u6728\u661f\u6eab\u5ea6\u8b8a\u5316\u7684\u9031\u671f\u6027
          • \u8cbb\u7c73\u6c23\u6ce1\u7684\u53ef\u80fd\u6210\u56e0
          • \u91cd\u529b\u6ce2
          • \u9ed1\u6d1e\u7684\u91cd\u8907\u6f6e\u6c50\u7834\u58de\u4e8b\u4ef6
          • \u985e\u5730\u884c\u661f\u548c\u76f8\u4f3c\u885b\u661f\u7684\u5f62\u6210\u539f\u56e0\u63a8\u6e2c
          • \u7279\u6b8a\u8d85\u65b0\u661f Pa 30 \uff08\u4f60\u53ef\u4ee5\u5728\u672c\u7bc7\u770b\u5230\u5f88\u591a\u672c\u6587\u63d0\u5230\u95dc\u65bc\u8d85\u65b0\u661f\u7684\u5167\u5bb9\uff09
          • \u80fd\u5f62\u6210\u5343\u65b0\u661f\u7684\u96d9\u661f\u7cfb\u7d71
          • \u524d\u9762\u90fd\u662f\u5229\u7528\u725b\u9813\u529b\u5b78\u6e2c\u5f97\u661f\u9ad4\u8cea\u91cf\uff0c\u4f60\u4e5f\u53ef\u4ee5\u4f7f\u7528\u91cd\u529b\u5fae\u900f\u93e1\u5f97\u5230\u7cbe\u6e96\u8cea\u91cf\u3002
          • \u6697\u7269\u8cea\u4f86\u6e90\u65bc\u9ed1\u6d1e\uff1f
          • \u5b87\u5b99\u6700\u65e9\u671f\u7684\u6046\u661f\u53ef\u80fd\u7684\u8a95\u751f\u539f\u7406
          • \u5b87\u5b99\u9593\u6700\u5927\u5c3a\u5ea6\u78c1\u5834\u2500\u2500\u300c\u5b87\u5b99\u7db2\u78c1\u5834\u300d
          • \u5feb\u901f\u96fb\u6ce2\u7206\u767c\uff08frb\uff09\u6beb\u79d2\u5167\u7522\u751f\u7684\u80fd\u91cf\u76f8\u7576\u65bc\u592a\u967d\u5e74\u8f38\u51fa\u91cf
          • \u5b87\u5b99\u6700\u53e4\u8001\u9ed1\u6d1e
          • \u4f7f\u7528\u4f4e\u8ecc\u885b\u661f\u63a2\u6e2c\u7121\u7dda\u96fb\u6ce2\uff0c\u6210\u5c31\u592a\u7a7a\u671b\u9060\u93e1\u7684\u65b0\u7bc7\u7ae0
          "},{"location":"feedback/physics/special-relativity/","title":"\u72f9\u7fa9\u76f8\u5c0d\u8ad6","text":"

          \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\u662f\u5c6c\u65bc\u540c\u4e00\u500b\u5834\u57df\uff0c\u4e5f\u5c31\u662f\u8aaa\u6642\u7a7a\u3002
          • \u300c\u76f8\u5c0d\u300d\u9019\u6982\u5ff5\u8cab\u7a7f\u6574\u500b\u76f8\u5c0d\u8ad6

          \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\uff08\u50b3\u7d71\u4e0a\u662f\u7522\u54c1\u958b\u767c\u5718\u968a\u8ca0\u8cac\uff09\u662f\u53ef\u7528\u6027\uff08\u50b3\u7d71\u4e0a\u662f\u7dad\u904b\u5718\u968a\u8ca0\u8cac\uff09\uff0c \u800c\u9019\u500b\u529f\u80fd\u904d\u53ca\u6240\u6709\u7dda\u4e0a\u7522\u54c1\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

          • \u52de\u52d5\u529b\uff0c\u5148\u53bb\u8fa8\u8b58\u52de\u52d5\u529b\uff0c\u7136\u5f8c\u9032\u884c\u6307\u6a19\uff0c\u6700\u5f8c\u6e1b\u4f4e\u52de\u52d5\u529b\u3002
          • \u8655\u7406\u820a\u6709\u7cfb\u7d71\uff0c\u900f\u904e\u64f1\u7f6e\u3001\u5305\u88dd\u3001\u64f4\u5145\u3001\u66ff\u63db\u3001\u64a4\u9664\u3001\u8a17\u7ba1\u53bb\u8655\u7406\u3002
          • \u7c21\u5316\u7cfb\u7d71\uff0c\u900f\u904e\u8fa8\u8b58\u3001\u9810\u9632\u548c\u8655\u7406\u4f86\u7c21\u5316\u7cfb\u7d71\u591a\u500b\u9762\u5411\u3002
          • \u5f85\u547d\u5c0f\u7d44\uff0c\u5206\u914d on-call \u6b0a\u8cac\u3001\u5de5\u6642\u7684\u8f2a\u66ff\uff0c\u81ea\u52d5\u5316\u7684\u5fc5\u8981\u3002
          • \u707d\u96e3\u7ba1\u7406\uff0c\u7dca\u6025\u4e8b\u4ef6\u6642\u7684\u8cac\u4efb\u5283\u5206\uff0c\u4e26\u4e14\u5e38\u614b\u4e14\u5be6\u969b\u7684\u8a13\u7df4\u3002
          • \u4e8b\u5f8c\u6790\u8aa4\u6587\u5316\uff0c\u5982\u4f55\u8b93\u4f01\u696d\u5728\u707d\u96e3\u767c\u751f\u5f8c\uff0c\u5b78\u7fd2\u5230\u6700\u591a\uff1f
          • \u8ca0\u8f09\u7ba1\u7406\uff0c\u597d\u7684\u8ca0\u8f09\u7ba1\u7406\u6a5f\u5236\u901a\u5e38\u662f\u8907\u5408\u578b\u7684\uff0c\u4f46\u5efa\u69cb\u5f8c\uff0c\u53c8\u6709\u54ea\u4e9b\u7dad\u904b\u4e0a\u7684\u5efa\u8b70\u5462\uff1f
          • \u975e\u62bd\u8c61\u5927\u578b\u7cfb\u7d71\u8a2d\u8a08\uff0c\u8b93\u958b\u767c\u8005\u8a2d\u8a08\u7cfb\u7d71\u67b6\u69cb\u6642\u80fd\u6709\u500b\u4f9d\u64da\u53bb\u5efa\u7acb\u7a69\u5065\u800c\u53c8\u9ad8\u64f4\u5145\u7684\u7cfb\u7d71\u3002
          • \u8cc7\u6599\u7ba1\u7dda\u8a2d\u8a08\uff0c\u8cc7\u6599\u7ba1\u7dda\u5e6b\u52a9\u6574\u5408\u8cc7\u6599\uff0c\u5176\u8a2d\u8a08\u548c\u7dda\u4e0a\u7cfb\u7d71\u6709\u7570\u66f2\u540c\u5de5\u4e4b\u5999\u3002
          • \u8a2d\u5b9a\u6a94\u7684\u6700\u4f73\u5be6\u8e10\uff0c\u597d\u7684\u670d\u52d9\u8a2d\u5b9a\u65b9\u5f0f\uff0c\u6703\u6e1b\u5c11\u7dca\u6025\u60c5\u6cc1\u7684\u767c\u751f\u3002
          • \u91d1\u7d72\u96c0\u90e8\u7f72\uff0c\u90e8\u7f72\u5de5\u7a0b\u4e5f\u662f\u78ba\u4fdd\u670d\u52d9\u7a69\u5b9a\u7684\u91cd\u8981\u5de5\u5177\u3002
          \u4ec0\u9ebc\u662f\u7dad\u904b

          \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

          • \u670d\u52d9\u6d41\u91cf\u4e0a\u5347\u4e86\uff0c\u5f9e\u4e00\u53f0\u8b8a\u6210\u5169\u53f0\u4e4b\u5f8c\uff0c\u6211\u8981\u600e\u9ebc\u77e5\u9053\u6d41\u91cf\u7e3d\u91cf\uff0c500 \u7684\u6bd4\u4f8b\u7b49\u7b49\uff1b
          • \u5916\u90e8\u4f9d\u8cf4\u5f9e\u76f8\u540c\u8cc7\u6599\u4e2d\u5fc3\uff0c\u642c\u9077\u5230\u96f2\u7aef\uff0c\u89c0\u5bdf\u5230\u7684 P99 \u6f5b\u6642\u62c9\u9ad8\u4e86\uff0c\u8a72\u600e\u9ebc\u8655\u7406\uff1b
          • \u6bcf\u5929\u56fa\u5b9a\u67d0\u4e00\u6642\u6bb5\uff0c500 \u6bd4\u4f8b\u6703\u5347\u9ad8\uff0c\u6211\u8a72\u600e\u9ebc\u8ffd\u8e64\u554f\u984c\uff1f

          \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

          • \u53ef\u8b80\u6027\u7684\u539f\u5247\u5c31\u662f\u8a2d\u8a08\u6642\uff0c\u628a\u76ee\u7684\u548c\u5be6\u4f5c\u7d30\u7bc0\u5340\u5206\u958b\u4f86\u3002
          • \u5b89\u5168\u6027\u7684\u539f\u5247\u5c31\u662f\u8981\u7559\u9000\u8def\u7d66\u81ea\u5df1\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

          • \u78ba\u4fdd\u547d\u4ee4\u7684\u55ae\u4e00\u6027\uff0c\u4e00\u500b\u4eba\u4e0d\u6703\u807d\u547d\u65bc A \u53c8\u540c\u6642\u807d\u547d\u65bc B\uff1b
          • \u5206\u914d\u597d\u5404\u500b\u89d2\u8272\uff08\u5305\u542b CL \u548c OL\uff09\u4e14\u89d2\u8272\u529f\u80fd\u5b9a\u7fa9\u660e\u78ba\uff0c\u4e26\u9810\u8a2d\u6240\u6709\u89d2\u8272\u9084\u672a\u6307\u6d3e\uff1b
          • \u6240\u505a\u7684\u6240\u6709\u4e8b\u60c5\u90fd\u505a\u597d\u8a18\u9304\uff0c\u5305\u62ec\u9664\u932f\u3001\u4ecb\u5165\u884c\u70ba\u7b49\u7b49\uff08\u5e6b\u52a9\u672a\u4f86\u601d\u8003\u53ef\u512a\u5316\u7684\u9805\u76ee\uff09\uff1b
          • \u5118\u65e9\u4e26\u5b9a\u671f\u7684\u5ba3\u544a\u4e8b\u4ef6\u72c0\u6cc1\uff0c\u4e26\u78ba\u4fdd\u6e9d\u901a\u7ba1\u9053\u7684\u66a2\u901a\u3002

          \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

          • \u7d71\u4e00\u7684\u5c0d\u5916\u7a97\u53e3\uff0c\u56de\u7b54\u6240\u6709\u95dc\u5207\u6027\u554f\u984c\uff1b
          • \u5b9a\u671f\u6574\u7406\u4e26\u532f\u5831\u4e8b\u4ef6\u7d66\u9ad8\u5c64\u3001\u5168\u516c\u53f8\u7b49\u7b49\u3002

          OL \u5247\u662f\u5c08\u6ce8\u5728\uff1a

          • \u554f\u984c\u7684\u67e5\u627e\uff1b
          • \u6025\u6551\u65b9\u6848\u7684\u5224\u5b9a\uff1b
          • \u5354\u52a9\u627e\u51fa\u6839\u6cbb\u7684\u65b9\u6cd5\u3002
          "},{"location":"feedback/site-reliability-workbook/incident-response/#\u5118\u65e9\u5ba3\u544a\u4e8b\u4ef6","title":"\u5118\u65e9\u5ba3\u544a\u4e8b\u4ef6","text":"

          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

          • \u6e9d\u901a\u58c1\u58d8\uff0c\u7f3a\u9677\u8ffd\u8e64\u7cfb\u7d71\uff08e.g. JIRA\uff09\u4e26\u4e0d\u662f\u826f\u597d\u7684\u6e9d\u901a\u6a4b\u6a11\uff1b
          • \u4e0d\u540c\u89d2\u5ea6\u7684\u770b\u5f85\u4e8b\u60c5\uff0c\u6703\u52a0\u901f\u932f\u8aa4\u7684\u6392\u67e5\uff1b
          • \u8b93\u4e0d\u540c\u90e8\u9580\u7684\u540c\u4ec1\u9762\u5c0d\u7dda\u4e0a\u932f\u8aa4\u6709\u9032\u4e00\u6b65\u7684\u5fc3\u7406\u6e96\u5099\u3002

          \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

          • GKE \u53e2\u96c6\u5728\u5efa\u7acb\u6642\uff0c\u5176\u4ed6\u7bc0\u9ede\u5617\u8a66\u8a3b\u518a\u8fd1\u4e3b\u63a7\u53f0\u6642\u6703\u5931\u6557\uff1b
          • \u932f\u8aa4\u8a0a\u606f\u544a\u77e5\u6191\u8b49\u7c3d\u767c\u7684\u6a5f\u5236\u6709\u932f\uff1b
          • \u6240\u6709\u5728\u6b50\u6d32\u5730\u5340\u7684\u53e2\u96c6\u90fd\u6703\u5efa\u7acb\u5931\u6557\uff0c\u5176\u4ed6\u5247\u5730\u5340\u5247\u7121\uff1b
          • \u6c92\u6709\u5176\u4ed6 GCP \u670d\u52d9\u6709\u4efb\u4f55\u7db2\u8def\u548c\u9650\u6d41\u7684\u554f\u984c\u3002

          \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

          "},{"location":"feedback/site-reliability-workbook/incident-response/#gke-\u7121\u6cd5\u5efa\u5236\u65b0\u53e2\u96c6\u7684\u4e8b\u5f8c\u5206\u6790","title":"GKE \u7121\u6cd5\u5efa\u5236\u65b0\u53e2\u96c6\u7684\u4e8b\u5f8c\u5206\u6790","text":"

          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

          • \u767c\u73fe\u4e26\u8457\u624b\u8655\u7406\u4e8b\u4ef6\uff1b
          • \u9032\u884c\u6025\u6551\u8655\u7406\uff1b
          • \u6839\u56e0\u7684\u67e5\u627e\uff1b
          • \u89e3\u6c7a\u6839\u56e0\u4e26\u64b0\u5beb\u4e8b\u5f8c\u6790\u8aa4\u6587\u4ef6\u3002
          "},{"location":"feedback/site-reliability-workbook/incident-response/#\u8f15\u91cd\u7de9\u6025\u7684\u5224\u5b9a","title":"\u8f15\u91cd\u7de9\u6025\u7684\u5224\u5b9a","text":"

          \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

          • \u6bcf\u500b\u6709\u548c\u5931\u80fd\u78c1\u789f\u639b\u52fe\u7684\u904b\u7b97\u4e3b\u6a5f\u90fd\u9700\u8981\u91cd\u555f\uff1b
          • \u5728\u7b49\u5f85\u91cd\u555f\u524d\uff0c\u8b80\u5beb\u7684\u932f\u8aa4\u6703\u4e00\u76f4\u767c\u751f\uff1b
          • \u5982\u679c\u8a72\u904b\u7b97\u4e3b\u6a5f\u88e1\u9762\u6709\u5ba2\u6236\u6b63\u5728\u4f7f\u7528\u7684 VM\uff0c\u5c31\u9700\u8981\u5148\u5c07\u5176\u300c\u642c\u9077\u300d\u4e4b\u5176\u4ed6\u4e3b\u6a5f\u3002

          \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

          • \u7df4\u7fd2\u7dca\u6025\u4e8b\u4ef6\u8655\u7406\uff0c \u6bcf\u9031\u4e94 PagerDuty \u6703\u5728\u7dda\u4e0a\u74b0\u5883\uff08\u4f46\u53ef\u63a7\u7684\u7bc4\u570d\u5167\uff09\u5be6\u73fe\u4e00\u4e9b\u932f\u8aa4\u72c0\u6cc1\uff0c\u8b93\u5de5\u7a0b\u7df4\u7fd2\u4e8b\u4ef6\u7684\u8655\u7406\u3002 \u5728\u9019\u904e\u7a0b\u4e2d\uff0c\u6703\u8f2a\u66ff\u6307\u63ee\u5b98\uff08IC\uff09\uff0c\u9019\u4e9b\u904e\u7a0b\u90fd\u53ef\u4ee5\u5e6b\u52a9\u65b0\u4eba\u9032\u5165\u72c0\u6cc1\uff0c \u540c\u6642\u4e5f\u80fd\u52a0\u901f\u5f85\u547d\u4eba\u54e1\u7684\u63db\u8840\uff08\u5b9a\u671f\u8f2a\u66ff\u5f85\u547d\u4eba\u54e1\u53ef\u4ee5\u8212\u7de9\u5de5\u4f5c\u58d3\u529b\uff09\u3002
          • \u90e8\u5206\u7df4\u7fd2\u9650\u5236\u8655\u7406\u6642\u9593\uff0c \u7df4\u7fd2\u6c92\u8fa6\u6cd5\u5b8c\u5168\u6a21\u64ec\u771f\u5be6\u72c0\u6cc1\uff0c\u4f46\u662f\u900f\u904e\u6642\u9650\u4f86\u589e\u52a0\u5be6\u969b\u72c0\u6cc1\u7684\u7dca\u5f35\u611f\u3002
          • \u5f9e\u6b77\u53f2\u4e2d\u5b78\u7fd2\uff0c\u7576\u7136\uff0c\u9019\u500b\u524d\u63d0\u662f\u4ee5\u524d\u7684\u4e8b\u4ef6\u90fd\u6709\u88ab\u597d\u597d\u7d00\u9304\uff08\u5305\u62ec\u8a0a\u606f\u548c\u901a\u8a71\uff09\u3002 \u5728\u7df4\u7fd2\u7684\u904e\u7a0b\u4e2d\u6709\u5e7e\u500b\u65b9\u5411\uff1a\u5982\u4f55\u52a0\u901f\u7dca\u6025\u8655\u7f6e\u65b9\u6848\u7684\u5be6\u73fe\u3001\u5982\u4f55\u907f\u514d\u707d\u96e3\u3002

          \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

          • \u5f85\u547d\u4eba\u54e1\u6307\u6d3e\u76f8\u95dc\u4eba\u54e1\u548c\u5347\u7d1a\u4e8b\u4ef6\uff1b
          • \u512a\u5148\u5be6\u65bd\u7dca\u6025\u8655\u7f6e\uff1b
          • IC\u3001CL \u548c OL \u7684\u6307\u6d3e\u3002

          \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

          • \u958b\u59cb\u8f49\u79fb\u6642\u767c\u73fe\u6240\u6709\u8f49\u79fb\u90fd\u9700\u8981\u5148\u548c\u4f86\u6e90\u7aef\uff08\u5c31\u662f\u88ab\u65b7\u7db2\u7684\u8fa6\u516c\u5ba4\uff09\u9032\u884c\u6e9d\u901a\uff1b
          • \u9032\u884c\u5176\u4ed6\u64cd\u4f5c\u6642\uff0c\u56e0\u70ba\u9a57\u8b49\u7cfb\u7d71\u7684\u4f9d\u8cf4\u4e2d\u65b7\uff0c\u5c0e\u81f4\u5931\u6548\uff1b
          • \u5167\u90e8\u696d\u52d9\u529f\u80fd\u7684\u5be9\u6279\u8ffd\u8e64\u7cfb\u7d71\u5c31\u5efa\u7f6e\u65bc\u8a72\u8fa6\u516c\u53f8\uff1b
          • \u7576\u5de5\u7a0b\u5e2b\u653e\u68c4\u6e96\u5099\u53bb\u5403\u665a\u9910\u6642\uff0c\u5496\u5561\u5ef3\u88ab DoS \u653b\u64ca\u3002

          \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/legacy-system/","title":"\u8655\u7406\u820a\u6709\u7cfb\u7d71","text":"

          \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

          • \u9019\u500b\u7cfb\u7d71\u5f9e\u65e9\u671f\u4fbf\u5b58\u5728\uff1b
          • \u548c\u5f88\u591a\u65e2\u6709\u7684\u7cfb\u7d71\u6709\u96b1\u6666\u7684\u806f\u7e6b\uff1b
          • \u662f\u500b\u5728\u5546\u52d9\u908f\u8f2f\u4e2d\u4e0d\u91cd\u8981\u7684\u7cfb\u7d71\uff1b
          • \u9577\u671f\u7a69\u5b9a\u7684\u904b\u884c\uff0c\u6c92\u6709\u767c\u751f\u904e\u4ec0\u9ebc\u6703\u5c0e\u81f4\u591a\u7cfb\u7d71\u5d29\u6f70\u7684\u60c5\u6cc1\u3002

          \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\u901a\u5e38\u6703\u6709\u4e94\u500b\u65b9\u6cd5\u3002 \u9019\u4e9b\u65b9\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

          • \u64f1\u7f6e\uff08Avoidance\uff09
          • \u5305\u88dd\uff08Encapsulation\uff09
          • \u64f4\u5145\uff08Augmentation\uff09
          • \u66ff\u63db\u3001\u64a4\u9664\uff08Replacement\u3001Retirement\uff09
          • \u8a17\u7ba1\uff08Custodian\uff09
          "},{"location":"feedback/site-reliability-workbook/legacy-system/#\u64f1\u7f6e","title":"\u64f1\u7f6e","text":"

          \u4e00\u500b\u6700\u7701\u529b\u7684\u65b9\u6cd5\uff0c\u64f1\u7f6e\uff08avoidance\uff09\u3002

          \u4f60\u8a55\u4f30\u904e\u6539\u8b8a\u5e36\u4f86\u7684\u6210\u672c\u548c\u98a8\u96aa\uff0c\u65bc\u662f\u6c7a\u5b9a\u7dad\u6301\u73fe\u72c0\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":"feedback/site-reliability-workbook/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\uff08encapsulation\uff09\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":"feedback/site-reliability-workbook/legacy-system/#\u64f4\u5145","title":"\u64f4\u5145","text":"

          \u65e2\u7136\u8981\u6539\u8b8a\u5f88\u96e3\uff0c\u90a3\u6211\u5c31\u50c5\u50c5\u64f4\u5145\uff08augmentation\uff09\u4ed6\u7684\u529f\u80fd\uff0c\u8b93\u76e1\u53ef\u80fd\u512a\u5316\u800c\u4e0d\u53bb\u7570\u52d5\u5546\u52d9\u908f\u8f2f\u3002

          \u9019\u7a2e\u624b\u6cd5\u901a\u5e38\u6703\u548c\u5305\u88dd\u4f75\u884c\u4f7f\u7528\u3002

          "},{"location":"feedback/site-reliability-workbook/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":"feedback/site-reliability-workbook/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":"feedback/site-reliability-workbook/legacy-system/#\u65b9\u6cd5\u7684\u6574\u5408","title":"\u65b9\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

          • \u6211\u5011\u610f\u8b58\u5230\u820a\u6709\u7cfb\u7d71\u7684\u6539\u52d5\u8981\u4ed8\u51fa\u5927\u91cf\u7cbe\u529b\uff0c\u65bc\u662f \u64f1\u7f6e\u3002
          • \u5f8c\u4f86\u6c7a\u8b70\u9084\u662f\u8981\u6539\uff0c\u65bc\u662f\u4f60\u5148\u628a\u820a\u6709\u7cfb\u7d71 \u5305\u88dd \u8d77\u4f86\u3002
          • \u4e26\u4e14\u914d\u5408\u4e00\u4e9b\u65b0\u7684\u898f\u7bc4\u6216\u8981\u6c42\u4f86 \u64f4\u589e\uff0c\u4f8b\u5982\u4f7f\u7528\u65b0\u7248\u7684\u5957\u4ef6\u4f86\u89e3\u6c7a CVE\u3002
          • \u9010\u6f38 \u66ff\u63db \u90e8\u5206\u529f\u80fd\uff0c\u4e26\u4f7f\u7528\u7dda\u4e0a\u8cc7\u6599\u78ba\u4fdd\u6b63\u78ba\u6027\uff0c\u6700\u5f8c\u5b8c\u6574 \u64a4\u9664 \u820a\u7684\u5be6\u4f5c\u3002
          • \u7576\u820a\u6709\u7cfb\u7d71\u5c0d\u67d0\u500b\u5718\u968a\u4ecd\u662f\u5fc5\u8981\u7684\uff0c\u5c31\u628a\u4fdd\u7ba1\u6b0a \u8a17\u7ba1 \u65bc\u5b83\u3002
          "},{"location":"feedback/site-reliability-workbook/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\u6301\u7e8c\u4e00\u5c0f\u6bb5\u4e00\u5c0f\u6bb5\u7684\u89e3\u6c7a\uff0c\u9019\u4fbf\u662f\u8655\u7406\u820a\u6709\u7cfb\u7d71\u7684\u5fc3\u6cd5\u3002

          "},{"location":"feedback/site-reliability-workbook/managing-load/","title":"\u8ca0\u8f09\u7ba1\u7406","text":"

          \u8ca0\u8f09\u5e73\u8861\uff08load balancing\uff09\u3001\u8ca0\u8f09\u524a\u6e1b\uff08load shedding\uff09\u548c\u81ea\u52d5\u64f4\u589e\uff08auto scaling\uff09\uff0c \u9019\u4e9b\u6a5f\u5236\u90fd\u53ef\u4ee5\u5e6b\u52a9\u6539\u5584\u670d\u52d9\u7684\u8ca0\u8f09\u72c0\u6cc1\uff0c\u901a\u5e38\u4e00\u500b\u5927\u578b\u670d\u52d9\u7684\u8ca0\u8f09\u7ba1\u7406\u6a5f\u5236\u5305\u542b\u9019\u4e0a\u8ff0\u4e09\u7a2e\u65b9\u5f0f\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\uff08\u81ea\u52d5\u5316\u7684\uff09\u8a2d\u7f6e\uff0c\u4e26\u7834\u58de\u53ef\u7528\u6027\u3002

          \u5728\u9019\u4e9b\u5343\u5947\u767e\u602a\u7684\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\u500b\u8ca0\u8f09\u5e73\u8861\u7684\u4e0d\u540c\u89d2\u5ea6\uff0c\u8b93\u5927\u5bb6\u80fd\u5920\u7406\u89e3\u8a2d\u8a08\u4e0a\u7684\u56f0\u5883\u548c\u5e38\u898b\u89e3\u6cd5\u3002

          • \u524d\u7aef\uff0c \u4f7f\u7528\u8005\u8d70\u5230\u8cc7\u6599\u4e2d\u5fc3\u9580\u53e3\u7684\u5e73\u8861\uff1b
          • \u8cc7\u6599\u4e2d\u5fc3\u88e1\u9762\uff0c \u5728\u53ef\u63a7\u7bc4\u570d\u5167\u7684\u7ba1\u7406\u548c\u8a2d\u8a08\u3002
          "},{"location":"feedback/site-reliability-workbook/managing-load/#google-cloud-load-balancing","title":"Google Cloud Load Balancing","text":"

          \u7b2c\u4e00\u6bb5\u5148\u900f\u904e Google \u96f2\u7aef\u7684\u8ca0\u8f09\u5e73\u8861\u6a5f\u5236\uff08GCLB\uff09\uff0c\u4f86\u63d0\u51fa\u5e7e\u500b\u5efa\u8b70\u7684\u6a21\u5f0f\u4f9b\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\u90fd\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\u9019\u9700\u8981\u628a\u4f7f\u7528\u8005\u7684 IP \u4fdd\u7559\u4e0b\u4f86\uff0c\u800c\u4e14\u7576\u8cc7\u6599\u4e2d\u5fc3\u5931\u80fd\u6642\uff0c\u8981\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\u3002

          \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\u900f\u904e BGP \u767c\u9001\u81ea\u5df1\u7684\u8cc7\u8a0a\u7d66\u7db2\u8def\u4e16\u754c\u3002

          \u4f46\u9019\u4ecd\u6703\u6709\u5e7e\u500b\u554f\u984c\uff1a

          • \u55ae\u4e00\u7684\u8cc7\u6599\u4e2d\u5fc3\u4ecd\u53ef\u80fd\u88ab\u9644\u8fd1\u7684\u4f7f\u7528\u8005\u6c96\u57ae
          • \u4f7f\u7528\u8005\u53ef\u80fd\u6703\u56e0\u70ba\u5207\u63db\u8def\u7531\u8def\u5f91\u800c\u65b7\u958b\u9023\u7dda
          "},{"location":"feedback/site-reliability-workbook/managing-load/#\u8de8\u8cc7\u6599\u4e2d\u5fc3\u6642\u78ba\u4fdd\u9023\u7dda\u7684\u7dad\u6301","title":"\u8de8\u8cc7\u6599\u4e2d\u5fc3\u6642\u78ba\u4fdd\u9023\u7dda\u7684\u7dad\u6301","text":"

          \u70ba\u4e86\u8b93\u4f7f\u7528\u8005\u5728\u8de8\u8cc7\u6599\u4e2d\u5fc3\u6642\u80fd\u78ba\u4fdd\u9023\u7dda\u7684\u7dad\u6301\uff0cGoogle \u900f\u904e\u7a69\u5b9a\u5316\u7684 anycast\uff08stabilized anycast\uff09\u4f86\u9054\u6210\u3002

          ---\ntitle: Stabilized Anycast\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 balancersMaglev]\n    p1[HTTP Reverse Proxies]\n  end\n  subgraph \"Data-center 2\"\n    direction TB\n    u2[router] --> lb2[Load balancersMaglev]\n    lb2 --> p2[HTTP Reverse Proxies]\n  end\n  i --10.0.0.1--> u1\n  i --10.0.0.1--> u2\n  lb1 -.StabilizedAnycast.-> lb2\n

          \u7576\u9023\u7dda\u5728 Data-center 1 \u5efa\u7acb\u6642\uff0c\u8def\u7531\u5668\u4e0b\u9762\u7684\u8ca0\u8f09\u5e73\u8861\u5668 \uff08Google \u547d\u540d\u70ba Maglev\uff09 \u6703\u628a\u9023\u7dda\u8cc7\u8a0a\u540c\u6b65\u7d66\u5176\u4ed6\u8cc7\u6599\u4e2d\u5fc3\u3002 \u800c\u9019\u500b\u8ca0\u8f09\u5e73\u8861\u5668\u53ea\u6703\u8655\u7406 L4 \u7684\u5c01\u5305\uff0c\u4e26\u4e14\u900f\u904e Equal-Cost Multi Path\uff08ECMP\uff09\u7684\u8f49\u9001\u65b9\u5f0f\uff0c \u9054\u6210\u53ef\u4ee5\u8b93\u591a\u500b\u8ca0\u8f09\u5e73\u8861\u5171\u4eab\u9023\u7dda\u8cc7\u8a0a\uff0c\u7576\u9700\u8981\u63d0\u9ad8\u8ca0\u8f09\u80fd\u529b\u6642\uff0c\u53ea\u9700\u8981\u55ae\u7d14\u7684\u589e\u52a0\u6a5f\u5668\u5373\u53ef\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\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\u900f\u904e\u8fed\u4ee3\u7684\u65b9\u5f0f\u5faa\u5e8f\u6539\u5584\u8a2d\u8a08\uff0c \u6700\u7d42\u8b93\u958b\u767c\u8005\u8a2d\u8a08\u51fa\u4e00\u500b\u80fd\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\u53e6\u5916\u6240\u8b02\u7684\u9ad8\u7a69\u5065\u6027\u5305\u542b\uff1a

          • \u5bb9\u91cf\uff08capacity\uff09\u9810\u4f30
          • \u529f\u80fd\u7368\u7acb\u6027\uff08\u985e\u4f3c\u8259\u58c1\u539f\u5247\uff0cbulkheads\uff09\uff0c\u907f\u514d\u55ae\u4e00\u529f\u80fd\u7684\u640d\u58de\u5f71\u97ff\u5168\u90e8\u7684\u670d\u52d9\u3002
          • \u5141\u8a31\u670d\u52d9\u964d\u80fd\uff08degradation\uff09

          \u5728\u63a5\u4e0b\u4f86\u7684\u7df4\u7fd2\u4e2d\uff0c\u6bcf\u4e00\u6b21\u8fed\u4ee3\u7684\u8a2d\u8a08\uff0c\u90fd\u53ef\u4ee5\u554f\u554f\u81ea\u5df1\u9019\u56db\u500b\u554f\u984c\uff1a

          • \u9019\u500b\u8a2d\u8a08\u53ef\u80fd\u55ce\uff1f
          • \u6709\u6c92\u6709\u66f4\u597d\u7684\u65b9\u6cd5\uff1f
          • \u9019\u65b9\u6cd5\u53ef\u4ee5\u5728\u6709\u9650\u7684\u6642\u9593\u548c\u91d1\u9322\u5167\u9054\u6210\u55ce\uff1f
          • \u5982\u679c\u5c08\u6848\u6709\u4e86\u5176\u4ed6\u5e72\u64fe\u6216\u63d2\u4ef6\uff0c\u9019\u65b9\u6cd5\u4ecd\u80fd\u6210\u529f\u55ce\uff1f
          "},{"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

          • [ ] \u7ba1\u7406\u7dda\u4e0a\u4f5c\u696d
          • [ ] \u7406\u89e3\u65e5\u8a8c\u8a0a\u606f
          • [ ] draining \u6d41\u91cf\u5230\u53e6\u4e00\u500b\u53e2\u96c6
          • [ ] rollback \u932f\u8aa4\u7684\u66f4\u65b0
          • [ ] \u963b\u64cb\u6216\u9650\u5236\u975e\u9810\u671f\u7684\u6d41\u91cf
          • [ ] \u589e\u52a0\u7bc0\u9ede\uff0c\u63d0\u9ad8\u670d\u52d9\u8ca0\u8f09\u91cf
          • [ ] \u7fd2\u6163\u76e3\u63a7\u9762\u677f
          • [ ] \u7406\u89e3\u670d\u52d9\u67b6\u69cb\u548c\u670d\u52d9\u7684\u76f8\u4f9d

          \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

          • P1\uff0c\u7dca\u6025\u4e8b\u4ef6\u3001\u6703\u901a\u77e5 on-call\u3001\u6703\u958b\u59cb\u57f7\u884c\u4e8b\u4ef6\u7684\u5206\u985e\u3001\u5f71\u97ff SLO\uff1b
          • P2\uff0c\u5f71\u97ff\u7bc4\u570d\u6709\u9650\u3001\u6703\u900f\u904e\u4e8b\u4ef6\u4e32\u6d41\u983b\u9053\u544a\u77e5\uff1b
          • P3\uff0c\u88ab\u6574\u5408\u8d77\u4f86\u7684\u8a0a\u606f\uff0c\u901a\u5e38\u548c\u670d\u52d9\u7684\u5bb9\u91cf\u6709\u95dc\u3002

          \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

          • \u6bd4\u8f03\u58de\u7684\u548c\u597d\u7684\u4e8b\u5f8c\u6790\u8aa4\u6587\u4ef6
          • \u5efa\u7acb\u5f37\u5065\u7684\u4e8b\u5f8c\u6790\u8aa4\u6587\u5316\u548c\u8fa8\u8b58\u4e00\u4e9b\u53ef\u80fd\u9020\u6210\u7834\u58de\u7684\u8de1\u8c61
          • \u4e00\u500b\u5de5\u5177\u548c\u6a23\u677f\u5e6b\u52a9\u958b\u59cb\u5efa\u7acb
          "},{"location":"feedback/site-reliability-workbook/postmortem-culture/#\u908a\u7de3\u5feb\u53d6\u548c\u4ee3\u7406\u5668\u7684\u5931\u80fd","title":"\u908a\u7de3\u5feb\u53d6\u548c\u4ee3\u7406\u5668\u7684\u5931\u80fd","text":"

          \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":"
          • \u4e8b\u4ef6\u6240\u6709\u8005\uff1a\u694a\u4e00@\u3001\u674e\u4e8c@\u3001\u9673\u4e09@\u3001\u738b\u56db@
          • \u4e8b\u4ef6\u5be9\u95b1\u5718\u968a\uff1a\u885b\u661f\u57fa\u790e\u8a2d\u65bd\u7dad\u904b\u5718\u968a@
          • \u72c0\u614b\uff1a\u5b8c\u6210
          • \u4e8b\u4ef6\u767c\u751f\u65e5\uff1a2014-08-11
          • \u6587\u4ef6\u767c\u5e03\u65e5\uff1a2014-12-30
          "},{"location":"feedback/site-reliability-workbook/postmortem-culture/#\u4e8b\u4ef6\u6982\u8981","title":"\u4e8b\u4ef6\u6982\u8981","text":"
          • \u5f71\u97ff\uff1a\u6240\u6709\u885b\u661f\u6a5f\u5668\u90fd\u88ab\u78c1\u789f\u62b9\u9664\uff0c\u4e26\u5c0e\u81f4\u6240\u6709 Google \u7684\u908a\u7de3\u904b\u7b97\u80fd\u529b\u5931\u6548\u3002
          • \u6839\u56e0\uff1a\u738b\u56db@ \u5ffd\u7565\u57f7\u884c\u5f8c\u7684\u6aa2\u67e5\uff0c\u76f4\u63a5\u91cd\u8907\u57f7\u884c\u81ea\u52d5\u5316\u7684\u64cd\u4f5c\uff0c\u9032\u800c\u89f8\u767c\u932f\u8aa4\u3002
          "},{"location":"feedback/site-reliability-workbook/postmortem-culture/#\u72c0\u6cc1\u7e3d\u7d50","title":"\u72c0\u6cc1\u7e3d\u7d50","text":"
          • \u6301\u7e8c\u6642\u9593\uff1a40 \u5206\u9418\u3002
          • \u5f71\u97ff\u7522\u54c1\uff1a\u908a\u7de3\u904b\u7b97\u8cc7\u6e90\u3002
          • \u5f71\u97ff\u6bd4\u4f8b\uff1a\u6240\u6709\u908a\u7de3\u904b\u7b97\u3002
          • \u4f7f\u7528\u8005\u5f71\u97ff\uff1a\u6240\u6709\u7d93\u904e\u908a\u7de3\u904b\u7b97\u7684\u8acb\u6c42\u6f5b\u6642\u62c9\u9ad8\u3002
          • \u6536\u76ca\u5f71\u97ff\uff1a\u6709\u4e9b\u5ee3\u544a\u56e0\u70ba\u6f5b\u6642\u62c9\u9ad8\uff0c\u6c92\u6709\u6b63\u78ba\u6295\u653e\u3002
          • \u767c\u73fe\u65bc\uff1a\u76e3\u63a7\u544a\u8b66\u3002
          • \u5fa9\u539f\u65bc\uff1a\u900f\u904e\u4eba\u5de5\u5fa9\u539f\u908a\u7de3\u904b\u7b97\uff0c\u6301\u7e8c\u5c0e\u5f15\u6d41\u91cf\u3002
          "},{"location":"feedback/site-reliability-workbook/postmortem-culture/#\u80cc\u666f\u975e\u5fc5\u8981","title":"\u80cc\u666f\uff08\u975e\u5fc5\u8981\uff09","text":"

          \u7121\u3002

          "},{"location":"feedback/site-reliability-workbook/postmortem-culture/#\u5f71\u97ff","title":"\u5f71\u97ff","text":"
          • \u4f7f\u7528\u8005\u5f71\u97ff\uff1a\u6f5b\u6642\u62c9\u9ad8\u3002
          • \u6536\u76ca\u5f71\u97ff\uff1a\u6709\u4e9b\u5ee3\u544a\u6c92\u8fa6\u6cd5\u6295\u653e\u3002
          "},{"location":"feedback/site-reliability-workbook/postmortem-culture/#\u6839\u56e0\u548c\u89f8\u767c\u9ede","title":"\u6839\u56e0\u548c\u89f8\u767c\u9ede","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":"
          • \u6211\u5011\u505a\u5c0d\u4e86
          • \u544a\u8b66\u6210\u529f\u89f8\u767c\uff1b
          • \u4e8b\u4ef6\u7ba1\u7406\u6a5f\u5236\u6b63\u78ba\u904b\u884c\u3002
          • \u6211\u5011\u6c92\u505a\u597d
          • \u5718\u968a\uff08\u7279\u5225\u662f\u694a\u4e00@\u3001\u674e\u4e8c@\uff09\u7adf\u7136\u6c92\u6709\u64b0\u5beb\u6587\u4ef6\u544a\u77e5\u5927\u5bb6\u4e0d\u8981\u91cd\u8907\u57f7\u884c\u7a0b\u5f0f\u78bc\uff1b
          • \u5f85\u547d\u5c0f\u7d44\u6c92\u6709\u6210\u529f\u963b\u6b62\u78c1\u789f\u62b9\u9664\u7684\u81ea\u52d5\u5316\u8173\u672c\u5f9e\u55ae\u4e00\u53e2\u96c6\u64f4\u5927\u5230\u5168\u90e8\u53e2\u96c6\uff0c\u4e26\u4e14\u5df2\u7d93\u4e0d\u662f\u7b2c\u4e00\u6b21\u53cd\u61c9\u9019\u9ebc\u6162\u4e86\u3002
          • \u5e78\u904b\u7684\u4e8b
          • \u6838\u5fc3\u904b\u7b97\u8cc7\u6e90\u80fd\u6b63\u5e38\u8655\u7406\u5168\u7403\u7684\u6d41\u91cf\uff0c\u6211\u4e0d\u6562\u7f6e\u4fe1\u6211\u5011\u6210\u529f\u7684\u907f\u514d\u707d\u96e3\u767c\u751f\uff01\uff01
          "},{"location":"feedback/site-reliability-workbook/postmortem-culture/#\u5f8c\u7e8c\u512a\u5316","title":"\u5f8c\u7e8c\u512a\u5316","text":"\u9805\u76ee \u7a2e\u985e \u512a\u5148\u5ea6 \u8ca0\u8cac\u4eba \u7968 \u8b93\u81ea\u52d5\u5316\u66f4\u597d \u7de9\u89e3 2 \u674e\u4e8c@ \u512a\u5316\u544a\u8b66 \u5075\u6e2c 2 \u9673\u4e09@\u9700\u8981\u5b78\u7fd2\u5982\u4f55\u8de8\u8cc7\u6599\u4e2d\u5fc3\u7684\u4ea4\u4ed8\u5354\u8b70 \u7de9\u89e3 2 TICKET-123 \u6559\u80b2\u8a13\u7df4\u907f\u514d\u932f\u8aa4\u57f7\u884c\u6307\u4ee4 \u9810\u9632 2"},{"location":"feedback/site-reliability-workbook/postmortem-culture/#\u8a5e\u5f59\u8868","title":"\u8a5e\u5f59\u8868","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

          • \u5927\u90e8\u5206\u7684\u512a\u5316\u90fd\u662f\u7de9\u89e3\u578b\u6216\u9810\u9632\u578b\u7684\uff0c\u5728\u9810\u9632\u904e\u7a0b\u4e2d\uff0c\u4e0d\u8981\u671f\u5f85\u4eba\u985e\u4e0d\u6703\u72af\u932f\uff0c\u61c9\u8a72\u8003\u616e\u7684\u662f\u5982\u4f55 \u300c\u8b93\u4eba\u985e\u7121\u6cd5\u5728\u6b64\u5730\u72af\u932f\u300d\uff0c\u5176\u4e2d\u51aa\u7b49\u5c31\u662f\u4e00\u500b\u5f88\u597d\u7684\u7279\u5fb5\u3002

            \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

          "},{"location":"feedback/site-reliability-workbook/postmortem-culture/#\u6307\u8cac\u578b\u7684\u6558\u8ff0","title":"\u6307\u8cac\u578b\u7684\u6558\u8ff0","text":"

          \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

          • \u628a\u5718\u968a\u6210\u54e1\u6307\u660e\u51fa\u4f86\u8ca0\u8cac\uff0c\u61c9\u8a72\u4ee5\u5718\u968a\u70ba\u55ae\u4f4d\u53bb\u6b78\u548e\u4e8b\u4ef6\uff1b
          • \u8981\u6c42\u7279\u5b9a\u6210\u54e1\u7684\u6559\u80b2\u8a13\u7df4\u3002
          "},{"location":"feedback/site-reliability-workbook/postmortem-culture/#\u8a87\u5f35\u7684\u7528\u8a5e","title":"\u8a87\u5f35\u7684\u7528\u8a5e","text":"

          \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

          • \u4e8b\u4ef6\u6240\u6709\u8005\uff1a
          • \u6587\u4ef6\u64b0\u5beb\uff1a\u694a\u4e00@\u3001\u674e\u4e8c@
          • \u8cc7\u6599\u4e2d\u5fc3\u81ea\u52d5\u5316\u8173\u672c\uff1a\u9673\u4e09@
          • \u7db2\u8def\u7ba1\u7406\uff1a\u738b\u56db@
          • \u7cfb\u7d71\u7ba1\u7406\uff1a\u5289\u4e94@
          • \u4e8b\u4ef6\u5be9\u95b1\u5718\u968a\uff1a\u6240\u6709\u5de5\u7a0b\u54e1\u5de5@google.com
          • \u72c0\u614b\uff1a\u5b8c\u6210
          • \u4e8b\u4ef6\u767c\u751f\u65e5\uff1a2014-08-11\uff0c\u9031\u4e00\uff0c17:10 to 17:50 PST8PDT
          • \u6587\u4ef6\u767c\u5e03\u65e5\uff1a2014-08-15\uff0c\u9031\u4e94
          "},{"location":"feedback/site-reliability-workbook/postmortem-culture/#\u4e8b\u4ef6\u6982\u8981_1","title":"\u4e8b\u4ef6\u6982\u8981","text":"
          • \u5f71\u97ff\uff1a
          • \u524d\u7aef\u8acb\u6c42\u88ab\u4e1f\u68c4\uff1b
          • \u4e00\u4e9b\u5ee3\u544a\u6c92\u8fa6\u6cd5\u64ad\u653e\uff1b
          • \u6240\u6709\u88ab\u885b\u661f\u6240\u670d\u52d9\u7684\u61c9\u7528\uff0c\u5176\u6f5b\u6642\u90fd\u88ab\u62c9\u9ad8\u4e26\u6301\u7e8c\u63a5\u8fd1\u5169\u5929\u3002
          • \u6839\u56e0\uff1a\u8a2d\u5099\u9000\u4f11\u76f8\u95dc\u7684\u81ea\u52d5\u5316\u6709\u932f\uff0c\u5c0e\u81f4\u4e26\u975e\u7279\u5b9a\u6a5f\u6ac3\u7684\u8a2d\u5099\u9032\u884c\u78c1\u789f\u62b9\u9664\u3002 \u9019\u8b93\u5168\u4e16\u754c\u6240\u6709\u885b\u661f\u7684\u8a2d\u5099\u90fd\u88ab\u6392\u9032\u9000\u4f11\u6d41\u7a0b\uff0c\u6700\u7d42\u5176\u80fd\u63d0\u4f9b\u7684\u524d\u7aef\u5feb\u53d6\u90fd\u7121\u6cd5\u904b\u4f5c\u4e86\u3002
          "},{"location":"feedback/site-reliability-workbook/postmortem-culture/#\u72c0\u6cc1\u7e3d\u7d50_1","title":"\u72c0\u6cc1\u7e3d\u7d50","text":"
          • \u6301\u7e8c\u6642\u9593\uff1a
          • \u4e3b\u8981\u65bc 08-11\uff0c\u9031\u4e00\uff0c17:10 \u5230 17:50 PST8PDT\uff1b
          • \u91cd\u65b0\u5efa\u7f6e\u548c\u6f5b\u6642\u62c9\u9ad8\u7684\u72c0\u6cc1\u6301\u7e8c\u5230 08-13\uff0c\u5468\u4e09\uff0c07:46 PST8PDT\uff0c\u4e26\u65bc\u6b64\u6642\u95dc\u9589\u4e8b\u4ef6\u3002
          • \u5f71\u97ff\u7522\u54c1\uff1aGFE\uff08\u524d\u7aef\u57fa\u790e\u8a2d\u65bd\uff09\uff0c\u7279\u5225\u662f\u4f7f\u7528\u885b\u661f\u7684\u5730\u5340\u3002
          • \u5f71\u97ff\u6bd4\u4f8b\uff1a\u6240\u6709\u900f\u904e\u885b\u661f\u670d\u52d9\u7684\u5168\u7403\u6027\u6d41\u91cf\uff08\u4e00\u822c\u4f86\u8aaa\u7d04\u70ba 60% \u7684\u7e3d\u6d41\u91cf\uff09\u3002
          • \u4f7f\u7528\u8005\u5f71\u97ff\uff1a
          • xx \u7684\u524d\u7aef\u6d41\u91cf\u88ab\u4e1f\u68c4\u4e26\u6301\u7e8c 40 \u5206\u9418\uff08\u671f\u9593\u5167\u5e73\u5747\u7684 QPS \u70ba xx\uff0c\u4f54\u7e3d\u6d41\u91cf\u7684 xx%\uff09\uff1b
          • \u6240\u6709\u6709\u88ab\u885b\u661f\u8a2d\u5099\u670d\u52d9\u7684\u61c9\u7528\uff0c\u5176\u6f5b\u6642\u90fd\u88ab\u62c9\u9ad8\u4e26\u6301\u7e8c\u5169\u5929\u3002
          • \u6536\u76ca\u5f71\u97ff\uff1a\u5be6\u969b\u6536\u76ca\u5f71\u97ff\u76ee\u524d\u4e0d\u53ef\u77e5\u3002
          • \u767c\u73fe\u65bc\uff1aBlackbox \u76e3\u63a7\uff0c\u5718\u968a\u6536\u5230\u5e7e\u4e4e\u5168\u7403\u6240\u6709\u885b\u661f\u8a2d\u5099\u7684\u932f\u8aa4\u8a0a\u606f\uff1a satellite-a12bcd34 \u670d\u52d9\u592a\u591a\u5931\u6557 HTTP \u8acb\u6c42
          • \u5fa9\u539f\u65bc\uff1a\u707d\u96e3\u767c\u751f\u5f8c\uff0c\u6240\u6709\u6d41\u91cf\u8fc5\u901f\u88ab\u5c0e\u6d41\u81f3 Google \u64c1\u6709\u7684\u524d\u7aef\u53e2\u96c6\u4e2d\uff0c\u4f46\u662f\u76f8\u95dc\u6f5b\u6642\u90fd\u88ab\u62c9\u9ad8\u4e86\u3002
          "},{"location":"feedback/site-reliability-workbook/postmortem-culture/#\u80cc\u666f\u975e\u5fc5\u8981_1","title":"\u80cc\u666f\uff08\u975e\u5fc5\u8981\uff09","text":"

          \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":"
          • xx \u7684\u524d\u7aef\u6d41\u91cf\u88ab\u4e1f\u68c4\u4e26\u6301\u7e8c 40 \u5206\u9418\u3002\u671f\u9593\u5167\u5e73\u5747\u7684 QPS \u70ba xx\uff0c\u4f54\u7e3d\u6d41\u91cf\u7684 xx%\u3002 \u6211\u5011\u7684\u76e3\u63a7\u7cfb\u7d71\u986f\u793a\u51fa\u88ab\u4e1f\u68c4\u7684\u6d41\u91cf\u5176\u5be6\u8981\u66f4\u5927\uff0c\u9019\u662f\u56e0\u70ba\u90e8\u5206\u885b\u661f\u5176\u5be6\u4ecd\u7136\u6709\u5728\u670d\u52d9\uff0c \u4f46\u662f\u88ab\u76e3\u63a7\u8a8d\u70ba\u5931\u80fd\uff0c\u6240\u4ee5\u5c31\u6703\u6709\u6578\u64da\u4e0a\u7684\u843d\u5dee\uff0c\u6211\u5011\u6703\u5728\u5fa9\u8def\u4e0a\u8aaa\u660e\u6211\u5011\u600e\u9ebc\u4f30\u8a08\u9019\u500b\u6d41\u91cf\u7684\u3002
          • \u6240\u6709\u4f9d\u8cf4\u65bc\u885b\u661f\u7684\u61c9\u7528\u5176\u6f5b\u6642\u90fd\u5728\u9019\u5169\u5929\u5167\u88ab\u62c9\u9ad8\uff1a
          • \u63a5\u8fd1 Google \u7dad\u8b77\u7684\u6838\u5fc3\u904b\u7b97\u8cc7\u6e90\u7684\u570b\u5bb6\u6709\u7d04 xx \u6beb\u79d2\u7684 RTT \u9ad8\u5cf0\uff1b
          • \u5176\u4ed6\u8f03\u4f9d\u8cf4\u65bc\u885b\u661f\u8a2d\u5099\u7684\u570b\u5bb6\uff08\u4f8b\u5982\uff0c\u6fb3\u6d32\u3001\u7d10\u897f\u862d\u3001\u5370\u5ea6\uff09\u5247\u6709 xx \u6beb\u79d2\u7684\u9ad8\u5cf0\u3002
          "},{"location":"feedback/site-reliability-workbook/postmortem-culture/#\u6536\u76ca\u5f71\u97ff","title":"\u6536\u76ca\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

          • \u5716\u7247\u548c\u5f71\u7247\uff1a\u6839\u64da\u65e5\u5c0d\u65e5\u7684\u8cc7\u6599\u986f\u793a\u6709\u5f88\u5927\u7684\u932f\u8aa4\u6bd4\u4f8b\u5dee\u8ddd\uff0c\u6211\u5011\u4f30\u8a08\u5be6\u969b\u6536\u76ca\u640d\u5931\u7d04\u843d\u5728 xx \u5230 xx%\uff1b
          • \u641c\u5c0b\uff1axx \u5230 xx% \u7684\u932f\u8aa4\u843d\u5728 17:00 \u5230 18:00 \u4e4b\u9593\uff0c\u540c\u6a23\u6709\u5f88\u5927\u7684\u65e5\u5c0d\u65e5\u5dee\u8ddd\u3002
          "},{"location":"feedback/site-reliability-workbook/postmortem-culture/#\u5718\u968a\u5f71\u97ff","title":"\u5718\u968a\u5f71\u97ff","text":"
          • \u6d41\u91cf\u7dad\u904b\u5718\u968a\u7528\u4e86\u6240\u6709\u4eba\u529b\u4e26\u82b1\u4e86\u7d04 48 \u5c0f\u6642\u4f86\u5b8c\u6210\u4fee\u5fa9\uff1b
          • NST\uff08\u67d0\u500b\u670d\u52d9\uff09\u6709\u9ad8\u65bc\u6c34\u5e73\u7684\u8ca0\u8f09\u4e2d\u65b7\uff0c\u56e0\u70ba\u4ed6\u5011\u9700\u8981\u5141\u8a31\u66f4\u9ad8\u7684\u9650\u6d41\u9032\u5165\u6838\u5fc3\u904b\u7b97\u8cc7\u6e90\uff1b
          • \u56e0\u70ba\u5feb\u53d6\u547d\u4e2d\u7684\u4e0b\u964d\uff0c\u4e00\u4e9b\u670d\u52d9\u6709\u66f4\u9ad8\u7684\u56de\u61c9\u6642\u9593\uff1a
          • \u4f8b\u5982\uff0c\u8acb\u67e5\u770b\u9019\u500b\u804a\u5929\u8a18\u9304\uff08\u67d0\u9023\u7d50\uff09\u4f86\u77e5\u9053\u6709\u54ea\u4e9b\u670d\u52d9\uff1b
          • \u9019\u4e9b\u670d\u52d9\u770b\u5230\u5feb\u53d6\u547d\u4e2d\u7387\u5f9e xx \u964d\u5230 xx%\u3002
          "},{"location":"feedback/site-reliability-workbook/postmortem-culture/#\u4e8b\u4ef6\u8ffd\u8e64\u9023\u7d50","title":"\u4e8b\u4ef6\u8ffd\u8e64\u9023\u7d50","text":"

          \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

          • \u641c\u5c0b\u8a72\u8a2d\u5099\u64c1\u6709\u7684\u6a5f\u6ac3\uff0c\u4f8b\u5982 a12bcd34 \u88e1\u6709\u4e00\u500b rack123 \u6a5f\u6ac3\uff1b
          • \u641c\u5c0b\u6240\u6709\u4f4d\u65bc\u8a72\u6a5f\u6ac3\u7684\u6a5f\u5668\uff0c\u4f8b\u5982 rack123 \u5c0d\u61c9\u65bc machine1\u3001machine2 \u7b49\u7b49\uff1b
          • \u628a\u9019\u4e9b\u6a5f\u5668\u9032\u884c\u78c1\u789f\u62b9\u9664\u3002

          \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":"
          • \u6838\u5fc3\u904b\u7b97\u8cc7\u6e90\u80fd\u5920\u627f\u8f09\u6240\u6709\u6d41\u91cf\uff08\u8a73\u898b\u4e0b\u500b\u6bb5\u843d\uff09\uff0c\u5373\u4f7f\u6240\u6709\u908a\u7de3\u904b\u7b97\u90fd\u5931\u80fd\uff0c \u9019\u8b93\u6d41\u91cf\u5718\u968a\u53ef\u4ee5\u5728\u8f03\u4f4e\u7684\u58d3\u529b\u4e0b\u9032\u884c\u5fa9\u539f\u5de5\u4f5c\uff1b
          • \u7576\u908a\u7de3\u904b\u7b97\u5931\u80fd\u6642\uff0c\u81ea\u52d5\u5316\u7684\u5c0e\u6d41\u6a5f\u5236\u6b63\u78ba\u5730\u628a\u6d41\u91cf\u5c0e\u5230\u6838\u5fc3\u7684\u8cc7\u6599\u4e2d\u5fc3\uff1b
          • \u885b\u661f\u5728\u9000\u5f79\u904e\u7a0b\u662f\u5feb\u901f\u4e14\u6709\u6548\u7387\u7684\uff0c\u96d6\u7136\u9019\u6709\u4ee3\u7406\u4eba\u6df7\u6dc6\u7684\u98a8\u96aa\uff1b
          • \u4e8b\u4ef6\u6210\u529f\u900f\u904e OMG \u89f8\u767c IMAG \u4e26\u4e14\u8a72\u5de5\u5177\u6210\u529f\u8b49\u660e\u5c0d\u65bc\u4e8b\u4ef6\u8ffd\u8e64\u548c\u8de8\u5718\u968a\u6e9d\u901a\u7684\u50f9\u503c\u3002
          "},{"location":"feedback/site-reliability-workbook/postmortem-culture/#\u6211\u5011\u6c92\u505a\u597d","title":"\u6211\u5011\u6c92\u505a\u597d","text":"

          \u95dc\u65bc\u5931\u80fd\u7684\u90e8\u5206\uff1a

          • \u6d41\u91cf Admin Server\uff08\u7ba1\u7406\u670d\u52d9\uff09\u6c92\u6709\u6b63\u78ba\u9a57\u8b49\u6307\u4ee4\uff0c \u4e14\u6240\u6709\u6307\u4ee4\u61c9\u8a72\u90fd\u8981\u51aa\u7b49\u7684\u6216\u81f3\u5c11\u7576\u91cd\u8907\u57f7\u884c\u6642\u662f\u5931\u6548\u5b89\u5168\u7684\uff1b
          • \u6a5f\u5668\u8cc7\u6599\u5eab\uff08MDB\uff09\u4e26\u6c92\u6709\u9650\u5236\u8de8\u8cc7\u6599\u4e2d\u5fc3\u7684\u6240\u5c6c\u9a57\u8b49\uff1b \uff08\u96d6\u7136\u8a72\u4eba\u54e1\u53ea\u5141\u8a31\u5c0d A \u5730\u5340\u7684\u64cd\u4f5c\uff0c\u4f46\u662f\u900f\u904e MDB \u537b\u53ef\u4ee5\u505a\u5230\u5168\u57df\u7684\u64cd\u4f5c\uff0c\u5373\u4ee3\u7406\u4eba\u6df7\u6dc6\uff09
          • \u9000\u5f79\u64cd\u4f5c\u6d41\u7a0b\u4e26\u6c92\u6709\u4ea4\u53c9\u6bd4\u5c0d\u9000\u5f79\u8acb\u6c42\u548c\u7576\u521d\u7533\u8acb\u7684\u7bc4\u570d\u662f\u5426\u76f8\u7576\uff1b
          • \u9000\u5f79\u64cd\u4f5c\u6d41\u7a0b\u6c92\u6709\u9650\u6d41\uff0c\u7576\u958b\u59cb\u9000\u5f79\u6642\uff0c\u6240\u6709\u64cd\u4f5c\u90fd\u662f\u99ac\u4e0a\u57f7\u884c\uff0c\u4e26\u6c92\u6709\u4efb\u4f55\u7de9\u885d\uff1b
          • \u4e00\u4e9b\u5c0d\u5916\u7684\u6d41\u91cf\u56e0\u70ba\u76ee\u7684\u5f9e\u908a\u7de3\u904b\u7b97\u6a5f\u5668\u8f49\u5230\u5176\u4ed6\u5340\u57df\uff0c\u5c0e\u81f4\u6709\u4e00\u6bb5\u6642\u9593\u7684\u7db2\u8def\u58c5\u585e\uff0c\u800c\u8a72\u58c5\u585e\u76f4\u5230\u908a\u7de3\u904b\u7b97\u6062\u5fa9\u5f8c\u624d\u88ab\u5fa9\u539f\u3002

          \u95dc\u65bc\u5fa9\u539f\u7684\u90e8\u5206\uff1a

          • \u91cd\u65b0\u5b89\u88dd\u6a5f\u5668\u662f\u7de9\u6162\u800c\u4e0d\u53ef\u9760\u7684\uff0c\u5176\u662f\u900f\u904e TFTP \u53bb\u50b3\u905e\u8cc7\u6599\uff0c\u800c\u7576\u5c08\u7dda\u6b63\u8655\u65bc\u7e41\u5fd9\u6642\uff0c\u9019\u500b\u64cd\u4f5c\u662f\u7de9\u6162\u7684\uff1b
          • Autoreplacer\uff08\u81ea\u52d5\u66ff\u63db\u6a5f\u5236\uff09\u7684\u57fa\u790e\u8a2d\u65bd\u662f\u6c92\u8fa6\u6cd5\u8655\u7406\u540c\u6642\u8981\u5efa\u7f6e xx \u500b\u7bc0\u9ede\u7684\uff0c \u70ba\u4e86\u52a0\u901f\u81ea\u52d5\u5316\u5efa\u7f6e\uff0c\u9700\u8981\u8a31\u591a\u4eba\u529b\u6295\u5165\u9032\u53bb\u624b\u52d5\u5efa\u7f6e\uff0c\u4ee5\u4e0b\u662f\u5e7e\u500b\u9020\u6210\u7de9\u6162\u7684\u56e0\u7d20\uff1a
          • SSH \u8d85\u6642\u6703\u8b93\u81ea\u52d5\u66ff\u63db\u6a5f\u5236\u5728\u4e00\u4e9b\u8f03\u9060\u7684\u7bc0\u9ede\u4e0a\u51fa\u73fe\u4e0d\u7a69\u5b9a\u7684\u72c0\u6cc1\uff1b
          • \u7de9\u6162\u7684\u6838\u5fc3\u7248\u672c\u5347\u7d1a\uff0c\u5373\u4f7f\u6838\u5fc3\u7248\u672c\u5df2\u7d93\u9054\u5230\u6307\u5b9a\u7684\u7248\u672c\uff1b
          • \u6838\u5fc3\u7684\u908f\u8f2f\u6703\u9650\u5236\u4f75\u5b58\u64cd\u4f5c\uff0c\u5c0e\u81f4\u540c\u6642\u6700\u591a\u53ea\u80fd\u8a2d\u5b9a\u5169\u500b\u6a5f\u5668\uff1b
          • \u81ea\u52d5\u66ff\u63db\u7684\u5947\u602a\u5916\u986f\u884c\u70ba\u589e\u52a0\u4e86\u5c0d\u5176\u64cd\u4f5c\u7684\u56f0\u96e3\u6027\u3002
          • \u91dd\u5c0d\u904e\u591a\u7bc0\u9ede\uff0825%\uff09\u6b63\u9032\u884c\u9000\u5f79\u884c\u70ba\u7684\u76e3\u63a7\uff0c\u5728\u7bc0\u9ede\u9054\u5230 23% \u6642\u4e26\u6c92\u6709\u544a\u8b66\uff0c \u4f46\u662f\u5728\u6f32\u5230 29% \u6642\u767c\u51fa\u4e86\u544a\u8b66\uff0c\u4f46\u9019\u5169\u500b\u6578\u5b57\u4e4b\u9593\u5dee\u4e86 30 \u5206\u9418\uff1b
          • \u80fd\u5920\u9032\u884c\u5b89\u88dd\u7684\u5de5\u7a0b\u4eba\u54e1\u5f88\u5c11\uff0c\u9019\u9020\u6210\u9069\u6642\u8abf\u6574\u7684\u56f0\u96e3\u548c\u5fa9\u539f\u7684\u7de9\u6162\uff1b
          • \u900f\u904e\u6700\u9ad8\u6b0a\u9650\uff08superuser\uff09\u9032\u884c\u4eba\u5de5\u5b89\u88dd\u9020\u6210\u4e0d\u540c\u6a5f\u5668\u7684\u72c0\u614b\u51fa\u73fe\u5dee\u7570\uff0c\u9019\u589e\u52a0\u4e86\u5f8c\u7e8c\u8981\u9032\u884c\u6253\u6383\u7684\u75db\u82e6\u3002
          "},{"location":"feedback/site-reliability-workbook/postmortem-culture/#\u5e78\u904b\u7684\u4e8b","title":"\u5e78\u904b\u7684\u4e8b","text":"
          • \u6838\u5fc3\u904b\u7b97\u8cc7\u6e90\u548c\u908a\u7de3\u904b\u7b97\u7684\u7ba1\u7406\u65b9\u6cd5\u6709\u975e\u5e38\u5927\u7684\u5dee\u7570\uff0c\u9019\u5c0e\u81f4\u5728\u908a\u7de3\u904b\u7b97\u767c\u751f\u554f\u984c\u6642\uff0c\u4e26\u6c92\u6709\u5f71\u97ff\u6838\u5fc3\u904b\u7b97\uff1b
          • YouTube \u7684 CDN \u4e5f\u6709\u8457\u4e0d\u540c\u7684\u57fa\u790e\u8a2d\u65bd\u548c\u7ba1\u7406\u624b\u6bb5\uff0c\u9019\u5c0e\u81f4\u4e8b\u767c\u6642\uff0c\u8a72\u7522\u54c1\u7684\u8d85\u5927\u6d41\u91cf\u4e26\u6c92\u6709\u9032\u4e00\u6b65\u62d6\u57ae\u6838\u5fc3\u904b\u7b97\u8cc7\u6e90\u3002
          "},{"location":"feedback/site-reliability-workbook/postmortem-culture/#\u5f8c\u7e8c\u512a\u5316_1","title":"\u5f8c\u7e8c\u512a\u5316","text":"

          \u7531\u65bc\u672c\u4e8b\u4ef6\u7684\u5ee3\u6cdb\u5f71\u97ff\uff0c\u6211\u5011\u5c07\u512a\u5316\u62c6\u5206\u6210\u4e94\u500b\u9762\u5411\uff1a

          1. \u9810\u9632\u548c\u98a8\u96aa\u7684\u6559\u80b2
          2. \u7dca\u6025\u72c0\u6cc1\u7684\u56de\u61c9
          3. \u76e3\u63a7\u548c\u544a\u8b66
          4. \u908a\u7de3\u904b\u7b97\u7684\u4f9b\u7d66
          5. \u96dc\u9805
          \u512a\u5316\u5167\u5bb9 \u7a2e\u985e \u512a\u5148\u5ea6 \u6240\u5c6c\u4eba\u54e1 \u7968\u865f \u5be9\u8a08\u6240\u6709\u6703\u8b93\u6b63\u5e38\u6a5f\u5668\u8b8a\u6210\u5931\u80fd\u7684\u7cfb\u7d71 \u8abf\u67e5 P1 \u9673\u4e09@ BUG123 \u958b\u7968\u53bb\u8ffd\u8e64 BUG123 \u5217\u51fa\u7684\u7cfb\u7d71\u662f\u5426\u6709\u963b\u64cb\u932f\u8aa4\u8f38\u5165 \u9810\u9632 P1 \u9673\u4e09@ BUG124 \u62d2\u7d55\u4efb\u4f55\u55ae\u4e00\u64cd\u4f5c\u53ef\u4ee5\u8de8\u9650\u57df\u53bb\u57f7\u884c \u7de9\u89e3 P1 \u694a\u4e00@ BUG125 \u7ba1\u7406\u7cfb\u7d71\u9700\u8981\u984d\u5916\u6aa2\u67e5\u53bb\u907f\u514d\u91dd\u5c0d\u8d85\u904e xx \u7684\u7bc0\u9ede\u9032\u884c\u64cd\u4f5c \u7de9\u89e3 P1 \u738b\u56db@ BUG126 \u7ba1\u7406\u7cfb\u7d71\u9700\u8981\u53bb\u554f\u5b89\u5168\u6aa2\u67e5\u7cfb\u7d71\u662f\u5426\u57f7\u884c\u5141\u8a31\u9000\u5f79\u5de5\u4f5c \u9810\u9632 P0 \u674e\u4e8c@ BUG127 \u7ba1\u7406\u7cfb\u7d71\u62d2\u7d55\u90a3\u4e9b\u61c9\u8a72\u8981\u7d66\u503c\u537b\u6c92\u503c\u7684\u64cd\u4f5c \u9810\u9632 P0 \u8a31\u4e03@ BUG128

          \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

          • \u8a5e\u5f59\u8868\uff0c\u8b93\u66f4\u591a\u4eba\u6709\u6a5f\u6703\u53c3\u8207\uff1b
          • \u5f8c\u7e8c\u512a\u5316\uff0c\u9019\u500b\u5927\u578b\u4e8b\u4ef6\u6709\u5f88\u591a\u512a\u5316\u7a7a\u9593\uff0c\u900f\u904e\u5206\u9580\u5225\u985e\u8b93\u4ed6\u66f4\u5bb9\u6613\u5206\u6d3e\u5de5\u4f5c\u548c\u6b0a\u8861\uff1b
          • \u53ef\u91cf\u5316\u6307\u6a19\uff0c\u8db3\u5920\u7684\u6578\u64da\u548c\u5716\u7247\uff0c\u4e26\u4e14\u9644\u4e0a\u539f\u59cb\u8cc7\u6599\u7684\u9023\u7d50\u3002
          "},{"location":"feedback/site-reliability-workbook/postmortem-culture/#\u5177\u9ad4\u7684\u5f8c\u7e8c\u512a\u5316","title":"\u5177\u9ad4\u7684\u5f8c\u7e8c\u512a\u5316","text":"
          • \u6b0a\u8cac\u6b78\u5c6c\uff0c\u660e\u78ba\u6307\u5b9a\u6240\u5c6c\u8005\u548c\u7968\u865f\uff1b
          • \u512a\u5148\u7a0b\u5ea6\uff0c\u5206\u6e05\u512a\u5148\u7a0b\u5ea6\u4f86\u6709\u6548\u8ffd\u8e64\u9019\u4e9b\u512a\u5316\u5be6\u4f5c\uff1b
          • \u91cf\u5316\u5be6\u4f5c\uff0c\u4f8b\u5982\u8a2d\u8a08\u65b0\u7684\u544a\u8b66\u6aa2\u8996\u662f\u5426\u8d85\u904e xx% \u7684\u6a5f\u5668\u4e0b\u7dda\u4e86\uff1b
          • \u5206\u985e\u5c6c\u6027\uff0c\u4f8b\u5982\u9810\u9632\u6027\u548c\u7de9\u89e3\u578b\u3002
          "},{"location":"feedback/site-reliability-workbook/postmortem-culture/#\u4e0d\u8cac\u602a\u55ae\u4e00\u4eba\u54e1\u7684\u884c\u6587","title":"\u4e0d\u8cac\u602a\u55ae\u4e00\u4eba\u54e1\u7684\u884c\u6587","text":"

          \u6587\u4ef6\u5c08\u6ce8\u5728\u7cfb\u7d71\u8a2d\u8a08\u7684\u4e0d\u5b8c\u5584\uff0c\u800c\u975e\u4eba\u70ba\u64cd\u4f5c\u7684\u5931\u8aa4\uff1a

          • \u6211\u5011\u6c92\u505a\u597d\uff0c\u4e26\u6c92\u6709\u4eba\u54e1\u88ab\u9ede\u540d\u4e26\u8cac\u602a\uff1b
          • \u6839\u56e0\u548c\u89f8\u767c\u9ede\uff0c\u5c08\u6ce8\u5728\u300c\u4ec0\u9ebc\u6771\u897f\u300d\u6c92\u5f04\u597d\uff0c\u800c\u975e\u300c\u8ab0\u300d\u6c92\u5f04\u597d\uff1b
          • \u5f8c\u7e8c\u512a\u5316\uff0c\u5c08\u6ce8\u5728\u6539\u5584\u670d\u52d9\uff0c\u800c\u975e\u6539\u5584\u4eba\u54e1\u3002
          "},{"location":"feedback/site-reliability-workbook/postmortem-culture/#\u8db3\u5920\u7684\u6df1\u5ea6\u548c\u5ee3\u5ea6","title":"\u8db3\u5920\u7684\u6df1\u5ea6\u548c\u5ee3\u5ea6","text":"

          \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

          • \u5f71\u97ff\uff0c\u9019\u6bb5\u5728\u5f88\u591a\u4e0d\u540c\u89d2\u5ea6\u4e2d\u63d0\u51fa\u8aaa\u660e\uff0c\u8b93\u4ed6\u5f71\u97ff\u7bc4\u570d\u66f4\u5ba2\u89c0\uff1b
          • \u6839\u56e0\u548c\u89f8\u767c\u9ede\uff0c\u5f9e\u7cfb\u7d71\u5230\u7a0b\u5f0f\u78bc\u7684\u5be6\u4f5c\uff0c\u63d0\u4f9b\u8db3\u5920\u7d30\u7bc0\u7684\u8aaa\u660e\uff1b
          • \u8cc7\u6599\u5c0e\u5411\u7684\u7e3d\u7d50\uff0c\u6240\u6709\u7684\u7e3d\u7d50\u90fd\u662f\u57fa\u65bc\u4e8b\u5be6\u548c\u8cc7\u6599\uff0c\u4e26\u63d0\u4f9b\u539f\u59cb\u8cc7\u6599\u7684\u9023\u7d50\uff1b
          • \u9644\u9304\uff0c\u63d0\u4f9b\u66f4\u591a\u5716\u7247\u8b93\u975e\u5c08\u696d\u4eba\u54e1\u80fd\u5feb\u901f\u7406\u89e3\u5dee\u7570\u548c\u5f71\u97ff\u3002
          "},{"location":"feedback/site-reliability-workbook/postmortem-culture/#\u6587\u4ef6\u64b0\u5beb\u5feb\u901f","title":"\u6587\u4ef6\u64b0\u5beb\u5feb\u901f","text":"

          \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

          • \u53ef\u4ee5\u5f37\u5316\u7684\u505a\u6cd5
          • \u58de\u5473\u9053
          • \u5de5\u5177
          "},{"location":"feedback/site-reliability-workbook/postmortem-culture/#\u53ef\u4ee5\u5f37\u5316\u7684\u505a\u6cd5","title":"\u53ef\u4ee5\u5f37\u5316\u7684\u505a\u6cd5","text":"
          • \u5c55\u73fe\u7121\u8cac\u5099\u7684\u7cbe\u795e
          • \u734e\u52f5\u4e8b\u5f8c\u6790\u8aa4\u7684\u7522\u51fa
          • \u958b\u653e\u5f0f\u7684\u7cbe\u795e
          "},{"location":"feedback/site-reliability-workbook/postmortem-culture/#\u5c55\u73fe\u7121\u8cac\u5099\u7684\u7cbe\u795e","title":"\u5c55\u73fe\u7121\u8cac\u5099\u7684\u7cbe\u795e","text":"

          \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

          • \u512a\u5316\u4f5c\u6cd5\u7684\u6210\u529f\u57f7\u884c\uff1b
          • \u5f9e\u4e8b\u4ef6\u4e2d\u5f97\u5230\u7684\u6771\u897f\u5411\u4f01\u696d\u5167\u90e8\u6a6b\u5411\u7684\u63a8\u5ee3\uff0c\u4f8b\u5982\u67d0\u7a2e\u512a\u5316\u8a2d\u5b9a\uff1b
          • \u5be6\u969b\u9032\u884c\u4e8b\u4ef6\u8655\u7406\u7684\u6642\u9593\u6e1b\u5c11\u7684\u6bd4\u4f8b\uff0c\u4f8b\u5982\u4eca\u5e74\u53ea\u7528\u4e86\u5169\u9031\u5728\u8655\u7406\u4e8b\u4ef6\uff1b

          \u53ef\u4ee5\u9032\u884c\u7684\u734e\u52f5\u53ef\u80fd\u6709\uff1a

          • \u8b93\u4e8b\u4ef6\u7684\u53c3\u8207\u4eba\u6709\u6a5f\u6703\u8b8a\u6210\u8a72\u985e\u578b\u4e8b\u4ef6\u7684\u610f\u898b\u9818\u8896\uff0c\u4f8b\u5982 \u300c\u4f60\u53ef\u4ee5\u548c\u5c0f\u660e\u8a0e\u8ad6\u770b\u770b\uff0c\u4ed6\u4e0a\u6b21\u624d\u548c\u67d0\u5718\u968a\u4e00\u8d77\u64b0\u5beb\u4e86\u9019\u985e\u578b\u4e8b\u4ef6\u7684\u6790\u8aa4\u6587\u4ef6\uff0c\u4ed6\u61c9\u8a72\u6703\u7d66\u4f60\u4e00\u4e9b\u610f\u898b\u300d\uff1b
          • \u904a\u6232\u5316\uff0c\u4f8b\u5982\u8cde\u91d1\u7375\u4eba\uff0c\u7d71\u8a08\u5404\u500b\u4eba\u54e1\u6216\u5718\u968a\u4e8b\u4ef6\u8655\u7406\u7684\u6b21\u6578\uff0c\u4e26\u6709\u6392\u884c\u699c\u7b49\u7b49\u3002
          "},{"location":"feedback/site-reliability-workbook/postmortem-culture/#\u958b\u653e\u5f0f\u7684\u7cbe\u795e","title":"\u958b\u653e\u5f0f\u7684\u7cbe\u795e","text":"

          \u9019\u4e5f\u662f\u4e00\u7a2e\u9593\u63a5\u7684\u734e\u52f5\uff0c\u6709\u4e00\u4e9b\u505a\u6cd5\u53ef\u4ee5\u53c3\u8003\uff1a

          • \u907f\u514d\u55ae\u4e00\u5718\u968a\u6216\u4eba\u54e1\u64b0\u5beb\uff0c\u5bb9\u6613\u5931\u53bb\u5ba2\u89c0\u6027\uff1b
          • \u9f13\u52f5\u975e\u53c3\u8207\u4eba\u54e1\u7684\u56de\u994b\uff1b
          • \u628a\u4e8b\u4ef6\u6458\u8981\u653e\u9032\u5167\u90e8\u901a\u8a0a\u7ba1\u9053\uff0c\u4f8b\u5982 Teams \u6216 Slack\uff1b
          • \u8de8\u5718\u968a\u7684\u6aa2\u8a0e\u548c\u5be9\u67e5\uff0c\u751a\u81f3\u975e\u5b98\u65b9\u7684\u95b1\u8b80\u793e\u5718\uff1b
          • \u8b93\u65b0\u9032\u54e1\u5de5\u80fd\u53c3\u8207\u9032\u4f86\uff0c\u4f8b\u5982\u7df4\u7fd2\u8cfd\uff1b
          • \u6bcf\u9031\u4e8b\u4ef6\u6703\u8b70\uff0c\u5171\u540c\u5be9\u8996\u904e\u53bb\u4e00\u9031\u7684\u4e8b\u4ef6\u3002
          "},{"location":"feedback/site-reliability-workbook/postmortem-culture/#\u58de\u5473\u9053","title":"\u58de\u5473\u9053","text":"

          \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

          • \u54e1\u5de5\u907f\u514d\u53c3\u8207\u4e8b\u5f8c\u6790\u8aa4\uff0c\u4f8b\u5982\u300c\u54c7\uff0c\u4f60\u6709\u807d\u8aaa\u9019\u6b21\u4e8b\u4ef6\u55ce\uff1f\u300d\u300c\u662f\u554a\uff0c\u771f\u6158\uff0c\u4ed6\u5011\u6b63\u5728\u5beb\u6587\u4ef6\u300d\u300c\u5e78\u597d\u4e0d\u662f\u6211\u300d\uff1b
          • \u5be6\u4f5c\u4eba\u54e1\u7684\u4e0d\u8a8d\u540c\uff0c\u4f8b\u5982\u300c\u6211\u77e5\u9053\u516c\u53f8\u9f13\u52f5\u4e0d\u8cac\u5099\uff0c\u4f46\u9019\u88e1\u53ea\u6709\u6211\u548c\u4f60\uff0c\u70ba\u4ec0\u9ebc\u4f60\u4e0d\u5728\u4e8b\u524d\u53bb\u63a5\u53d7\u90a3\u4e9b\u6539\u5584\u610f\u898b\uff1f\u300d \u53ef\u4ee5\u6539\u6210\u300c\u4e8b\u524d\u61c9\u8a72\u6703\u6709\u4e00\u4e9b\u5fb5\u5146\uff0c\u6211\u5011\u53ef\u4ee5\u4f86\u8a0e\u8ad6\u4e00\u4e0b\u70ba\u4ec0\u9ebc\u6211\u5011\u5ffd\u7565\u4e86\u9019\u4e9b\u5fb5\u5146\u300d\uff1b
          • \u7f3a\u4e4f\u6642\u9593\u64b0\u5beb\uff0c\u597d\u7684\u4e8b\u5f8c\u6790\u8aa4\u6587\u4ef6\u662f\u9700\u8981\u6642\u9593\u64b0\u5beb\u7684\uff0c\u900f\u904e\u4e00\u5b9a\u7a0b\u5ea6\u54c1\u8cea\u7684\u6587\u4ef6\uff0c\u4f86\u6559\u80b2\u672a\u4f86\u7684\u6240\u6709\u5718\u968a\u3002 \u66ff\u64b0\u5beb\u6587\u4ef6\u6392\u512a\u5148\u9806\u5e8f\u3001\u8ffd\u8e64\u9032\u5ea6\u548c\u5be9\u95b1\u7d50\u679c\uff0c\u6700\u91cd\u8981\u7684\u662f\u8981\u7d66\u4e88\u5718\u968a\u6642\u9593\u5b8c\u6210\u4e8b\u4ef6\u7684\u76f8\u95dc\u5f8c\u7e8c\u512a\u5316\u3002
          • \u91cd\u8907\u6027\u4e8b\u4ef6\uff0c\u5982\u679c\u985e\u4f3c\u7684\u4e8b\u60c5\u53cd\u8986\u767c\u751f\uff0c\u9019\u662f\u4e00\u500b\u597d\u7684\u5fb5\u5146\u53bb\u9032\u884c\u6df1\u5ea6\u7814\u7a76\u3002 \u5617\u8a66\u96c6\u5408\u5404\u500b\u4e8b\u4ef6\u7684\u5354\u4f5c\u8005\uff0c\u4e26\u628a\u5404\u500b\u6587\u4ef6\u62ff\u51fa\u4f86\u6bd4\u8f03\uff0c\u6709\u5e7e\u500b\u5207\u5165\u9ede\uff1a
          • \u5f8c\u7e8c\u512a\u5316\u662f\u5426\u82b1\u4e86\u592a\u591a\u6642\u9593\uff1f
          • \u529f\u80fd\u6027\u7684\u958b\u767c\u662f\u5426\u5f71\u97ff\u7a69\u5b9a\u6027\u512a\u5316\u7684\u8abf\u6574\uff1f
          • \u512a\u5316\u662f\u5426\u5728\u4e00\u958b\u59cb\u88ab\u6b63\u78ba\u63d0\u51fa\uff1f
          • \u670d\u52d9\u662f\u5426\u592a\u904e\u8001\u820a\uff0c\u4ee5\u81f3\u65bc\u91cd\u69cb\u56f0\u96e3\uff1f
          • \u662f\u5426\u5728\u56b4\u91cd\u7684\u50b7\u53e3\u4e0a\uff0c\u8cbc\u4e0a OK \u8e66\uff1f
          "},{"location":"feedback/site-reliability-workbook/postmortem-culture/#\u5de5\u5177\u548c\u5e73\u53f0","title":"\u5de5\u5177\u548c\u5e73\u53f0","text":"

          \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

          • \u6587\u4ef6\u6a21\u677f\uff0c\u8b93\u516c\u53f8\u5176\u4ed6\u4eba\u80fd\u5feb\u901f\u627e\u5230\u4ed6\u5011\u60f3\u8981\u7684\uff0c\u540c\u6642\u6a21\u677f\u5efa\u8b70\u5141\u8a31\u9032\u884c\u4e00\u4e9b\u5ba2\u88fd\u5316\uff1a
          • Google \u5167\u90e8\u662f\u4f7f\u7528 Google Docs\uff0c\u56e0\u70ba\u5141\u8a31\u5171\u7de8\uff0c\u4e14\u5141\u8a31\u5ba2\u88fd\u5316\uff1b
          • \u900f\u904e Google Apps Script \u9032\u884c\u4e00\u4e9b\u81ea\u52d5\u5316\uff0c\u4f8b\u5982\u9078\u64c7\u5167\u90e8\u54e1\u5de5\u6642\u3002
          • Google \u767c\u5c55\u51fa\u4f86\u7684 checklist\uff1a
          • \u707d\u96e3\u5f71\u97ff\u7bc4\u570d\u7684\u5b8c\u6574\u904d\u6b77\uff1b
          • \u6839\u56e0\u7684\u6e05\u6670\u4e86\u89e3\uff0c\u4e26\u4f9d\u6b64\u767c\u5c55\u512a\u5316\uff08Five Whys\uff09\uff1b
          • \u512a\u5316\u9805\u76ee\u662f\u7d93\u904e\u6280\u8853\u4e3b\u7ba1\u7684\u6279\u51c6\u548c\u5be9\u67e5\u3002
          • \u8cc7\u6599\u5eab\u7684\u9078\u64c7\uff08\u76ee\u524d\u90fd\u6c92\u6709\u958b\u6e90\uff0c\u9700\u8981\u82b1\u6642\u9593\u8abf\u67e5\uff0c\u4f8b\u5982 Zalando \u7684 Sunrise\uff09\uff1a
          • \u900f\u904e\u641c\u96c6\u800c\u4f86\u7684\u8cc7\u6599\uff0c\u8b93\u4e0b\u6b21\u5efa\u7acb\u6790\u8aa4\u6587\u4ef6\u80fd\u5920\u66f4\u5feb\u901f\u66f4\u81ea\u52d5\u5316\uff1b
          • \u5efa\u7f6e\u4e00\u500b\u53ef\u4ee5\u6709\u6548\u8ffd\u8e64\u5f8c\u7e8c\u512a\u5316\u7684\u9762\u677f\uff1b
          • \u5206\u6790\u4e26\u756b\u6210\u5716\u4f86\u76f4\u89c0\u8868\u9054\u54ea\u4e9b\u5730\u65b9\u9084\u4e0d\u5920\u7a69\u5b9a\uff08\u4e00\u500b\u516c\u53f8\u670d\u52d9\u5730\u5716\uff0c\u4e26\u6a19\u6ce8\u7d05\u8272\u4f86\u8868\u660e\u9019\u6bb5\u4e0d\u7a69\uff09\u3002 \u4e26\u6839\u64da\u4e00\u4e9b\u6307\u6a19\uff0c\u4f8b\u5982\uff1a\u6b21\u6578\u3001\u7206\u70b8\u534a\u5f91\u3001\u6301\u7e8c\u6642\u9593\u3001\u5075\u6e2c\u6642\u9593\u3001\u5fa9\u539f\u6642\u9593\uff0c\u4f86\u9032\u884c\u7576\u6708\u7684\u7e3e\u6548\u8a55\u4f30\u3002

          \u4ee5\u4e0b\u5217\u51fa\u4e00\u4e9b\u6709\u7528\u5de5\u5177\uff1a

          • PagerDuty \u7684 postmortem template\uff1b
          • \u90e8\u843d\u5ba2\u5728 GitHub Gist \u64b0\u5beb\u7684 postmortem \u7bc4\u4f8b\uff1b
          • \u5728 stackoverflow \u4e0a\u7684\u4e00\u4e9b\u8a0e\u8ad6\uff1apostmortem \u9700\u8981\u54ea\u4e9b\u6bb5\u843d
          "},{"location":"feedback/site-reliability-workbook/postmortem-culture/#\u7d50\u8ad6","title":"\u7d50\u8ad6","text":"

          \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

          • identify\uff0c\u5b9a\u7fa9\u52de\u52d5\u529b
          • quantify\uff0c\u8ce6\u4e88\u6307\u6a19\uff0c\u78ba\u4fdd\u6e1b\u5c11\u52de\u52d5\u529b\u662f\u5fc5\u8981\u6216\u8005\u6709\u6210\u6548\u7684
          • work toward eliminating it\uff0c\u81ea\u52d5\u5316\u7684\u5be6\u8e10
          "},{"location":"review/","title":"\u5e74\u5ea6\u56de\u9867","text":"

          \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

          • \uff08\u5168\u80fd\uff09\u81ea\u7136\u8a9e\u8a00\u8655\u7406\u6a21\u578b \u2014 ChatGPT
          • AI \u7e6a\u5716 \u2014 Stable Diffusion
          • \u86cb\u767d\u8cea\u6a21\u578b\u9810\u6e2c \u2014 AlphaFold2
          • \u6838\u878d\u5408\u7684\u6eab\u5ea6\u7dad\u6301
          • \u6230\u7565\u904a\u6232 \u2014 CICERO
          • \u53e4\u5e0c\u81d8\u6b77\u53f2\u6587\u672c\u5224\u8b80 \u2014 Ithaca
          "},{"location":"review/2022-ai/#chatgpt","title":"ChatGPT","text":"

          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

          • \u73a9\u6587\u5b57\u7248\u7684 RPG\uff0c\u4f8b\u5982\u8b93\u4ed6\u626e\u6f14\u5bc6\u5ba4\u4e2d\u7684\u67d0\u4e00\u500b\u4eba\uff0c\u7d66\u4e88\u5176\u9078\u64c7\u548c\u7dda\u7d22\uff0c\u6700\u7d42\u8b93\u4ed6\u6210\u529f\u9003\u51fa\u3002
          • \u6574\u5408 AI \u7e6a\u5716\uff0c\u5728\u77ed\u77ed\u6578\u5c0f\u6642\u5167\uff0c\u63a8\u51fa\u4e86\u7d14 AI \u5275\u4f5c\u7684\u5152\u7ae5\u7e6a\u672c\u3002

          \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

          • \u74b0\u5883\uff0c\u63a2\u8a0e\u74b0\u5883\u7684\u72c0\u614b\u3001\u6c38\u7e8c\u7684\u9032\u5ea6\u548c\u898f\u7bc4\u7684\u5efa\u7f6e\uff1b
          • \u751f\u7269\uff0c\u7269\u7a2e\u3001\u6a5f\u5236\u3001\u91ab\u7642\u548c\u4fdd\u80b2\u7684\u8a0e\u8ad6\uff1b
          • \u6578\u4f4d\uff0cAI\u3001\u64f4\u5145\u5be6\u5883\u3001\u6f14\u7b97\u6cd5\u7b49\u7b49\uff1b
          • \u79d1\u6280\uff0c\u5b87\u5b99\u3001\u91cf\u5b50\u3001\u6280\u8853\u548c\u6578\u5b78\uff1b
          • \u4eba\u6587\uff0c\u751f\u6d3b\u3001\u6cd5\u5f8b\u3001\u90fd\u5e02\u548c\u4e8b\u4ef6\u3002

          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

          • \u7d93\u904e\u4e86\u5341\u5e74\uff0c\u6b50\u6d32\u82b1\u4e86\u516d\u5104\u6b50\u5143\u7684\u4eba\u985e\u5927\u8166\u5c08\u6848\u7d42\u65bc\u5b8c\u6210\uff0c \u900f\u904e\u96fb\u8166\u6a21\u64ec\u53d7\u523a\u6fc0\u7684\u53cd\u61c9\uff0c\u800c\u5176\u4ed6\u570b\u5bb6\u7684\u4eba\u8166\u5c08\u6848\u4ecd\u5728\u6301\u7e8c\u8457\uff1b
          • \u4e16\u754c\u6700\u5927\u7684\u4eba\u8166\u5730\u5716\u548c \u57fa\u56e0\u5730\u5716\u4e5f\u5728\u4eca\u5e74\u63a8\u51fa\uff0c \u65e8\u5728\u7cbe\u6e96\u5b9a\u4f4d\u6307\u5b9a\u7684\u7d30\u80de\u548c\u57fa\u56e0\u4f4d\u7f6e\uff0c\u52a0\u901f\u91ab\u7642\u7814\u7a76\uff1b
          • \u4eba\u985e\u7684 Y \u67d3\u8272\u9ad4\u7684\u89e3\u78bc\u5b8c\u6210\uff0c \u56e0\u70ba\u91cd\u8907\u6027\u7684\u7247\u6bb5\uff0c\u65e9\u671f\u8a8d\u70ba\u7121\u7528\u7684\u67d3\u8272\u9ad4\u5176\u5be6\u6c7a\u5b9a\u4e86\u5f88\u591a\u4e8b\u60c5\uff1b
          • \u5728\u8a08\u7b97\u4eba\u985e\u7d30\u80de\u7684\u6578\u91cf\u6642\uff0c\u6703\u767c\u73fe\u8d8a\u5c0f\u7684\u7d30\u80de\u8d8a\u591a\uff0c \u4f46\u662f\u4ed6\u7684\u7e3d\u8cea\u91cf\u6703\u548c\u90a3\u4e9b\u5927\u800c\u5c11\u7684\u7d30\u80de\u76f8\u540c\uff0c \u9019\u7a2e\u7279\u5fb5\u751a\u81f3\u80fd\u63a8\u5ee3\u5230\u5176\u4ed6\u751f\u7269\u7cfb\u7d71\u4e0a\u3002

          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

          • \u6ce2\u591a\u9ece\u5404\u57f9\u80b2\u77ed\u6bdb\u4e73\u725b\u8b93\u7260\u5011\u66f4\u8010\u71b1\uff1b
          • \u6253\u7834\u85cd\u7da0\u85fb\u7684\u7d30\u80de\u58c1\u8b93\u4ed6\u53ef\u4ee5\u6210\u70ba\u6cbb\u7642\u50b7\u53e3\u7684\u5229\u5668\uff1b
          • \u7814\u7a76\u767c\u73fe\u852c\u679c\u7684\u5fae\u71df\u990a\u542b\u91cf\u964d\u4f4e\uff0c\u4e26\u88ab\u78b3\u6c34\u5316\u5408\u7269\u53d6\u4ee3\uff1b
          • \u6606\u87f2\u7684\u8b8a\u614b\u6703\u91cd\u7d44\u6574\u500b\u795e\u7d93\u5143\u7684\u9023\u7d50\uff0c\u800c\u975e\u55ae\u7d14\u7684\u88fd\u9020\u65b0\u7684\u7d30\u80de\uff1b
          • \u900f\u904e\u57fa\u56e0\uff0c\u6210\u529f\u8b93\u679c\u8805\u9032\u884c\u7121\u6027\u751f\u6b96\uff1b
          • \u900f\u904e\u57fa\u56e0\uff0c\u8b93\u96de\u96bb\u5c0d\u79bd\u6d41\u611f\u514d\u75ab\uff1b
          • \u9175\u6bcd\u83cc\uff0c\u4e16\u754c\u9996\u500b\u8d85\u904e\u4e00\u534a DNA \u90fd\u662f\u5408\u6210\u51fa\u4f86\u7684\u751f\u7269\uff1b
          • \u900f\u904e\u65b0\u7684\u6210\u50cf\u6280\u8853\uff0c\u5c0d\u5149\u5408\u4f5c\u7528\u7684\u90e8\u4efd\u8b8a\u5316\u6709\u65b0\u7684\u8a8d\u8b58

          \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

          • \u6bcf\u9694\u6578\u5e74\u7684\u87ec\u6f6e\u65bc\u4eca\u5e74\u518d\u8d77\uff0c \u4e26\u4e14\u6700\u65b0\u7814\u7a76\u986f\u793a\u87ec\u5403\u7684\u662f\u690d\u7269\u4e4b\u6db2\uff1b
          • \u9ce5\u985e\u6578\u91cf\u7684\u6301\u7e8c\u964d\u4f4e\uff1b
          • \u82b1\u87f9\u548c\u9b5a\u5728\u53f0\u7063\u7684\u4fdd\u80b2\uff1b
          • \u900f\u904e\u5feb\u901f\u5206\u5225\u516c\u6bcd\u87f9\u4f86\u964d\u4f4e\u8783\u87f9\u7684\u58d3\u529b\uff1b
          • \u6df1\u6d77\u9b5a\u985e\u7684\u65b0\u5546\u6a5f\uff0c\u4f46\u662f\u904e\u5730\u958b\u767c\u5c07\u6703\u5f71\u97ff\u5176\u628a\u78b3\u5e36\u9032\u6df1\u6d77\u7684\u80fd\u529b\uff1b
          • \u4e16\u754c\u6700\u5927\u7684\u6a39\uff0c\u4f54\u5730 44 \u842c\u5e73\u65b9\u516c\u5c3a\uff0c\u88ab\u8b49\u5be6\u5168\u6797\u70ba\u4e00\u682a\uff1b
          • \u4f01\u9d5d\u6bcf\u6b21\u5c0f\u7761\u56db\u79d2\u9418\uff0c\u6bcf\u5929\u5171\u7761\u7d04 11 \u5c0f\u6642\u7684\u7279\u6b8a\u7761\u7720\u6a5f\u5236\u3002
          • \u5bb6\u755c\u52d5\u7269\u64c1\u6709\u8907\u96dc\u7684\u7cbe\u795e\u751f\u6d3b\uff0c \u8c6c\u6703\u91cb\u653e\u88ab\u56f0\u7684\u540c\u4f34\u3001\u5c71\u7f8a\u4f3c\u4e4e\u7121\u79c1\u7684\u5e6b\u52a9\u5176\u4ed6\u7f8a\u7372\u5f97\u7f8e\u5473\u4f73\u991a\u800c\u725b\u53ef\u4ee5\u63a5\u53d7\u5982\u5ec1\u8a13\u7df4\u3002
          • ScienceNews \u7cbe\u9078\u7684\u672c\u5e74\u5ea6\u6700\u4f73\u52d5\u7269\u6545\u4e8b\u3002
          "},{"location":"review/2023/#\u91ab\u5b78","title":"\u91ab\u5b78","text":"

          \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

          • \u4eca\u5e74\u8afe\u8c9d\u723e\u734e\u9812\u7d66 mRNA \u7684\u76f8\u95dc\u5021\u8b70\u8005\uff0c \u9f13\u52f5\u4ed6\u5011\u5728\u65b0\u51a0\u80ba\u708e\u7684\u75ab\u82d7\u88fd\u4f5c\u4e0a\u7684\u8ca2\u737b\uff1b
          • \u512a\u5316\u816b\u56ca\u6027\u7e96\u7dad\u5316\u7684\u6cbb\u7642\uff0c\u7372\u5f97\u672c\u5e74 breakthrough price\uff1b
          • \u627e\u51fa\u70ba\u4ec0\u9ebc\u4e73\u764c\u9019\u9ebc\u5bb9\u6613\u8f49\u79fb\u5230\u810a\u9ad3\uff0c\u56e0\u70ba\u4e00\u7a2e\u7279\u6b8a\u86cb\u767d\u8cea\u5728\u4f5c\u795f\uff1b
          • \u900f\u904e\u5948\u7c73\u96fb\u7dda\u6307\u5b9a\u653b\u64ca\u764c\u7d30\u80de\uff1b
          • \u4eba\u985e\u6b77\u53f2\u4e0a\u7b2c\u4e00\u6b21\u7684\u57fa\u56e0\u7de8\u8f2f\u81e8\u5e8a\u8a66\u9a57\uff0c\u7528\u65bc\u6cbb\u7642\u767d\u8840\u75c5\uff0c \u4e00\u6b21\u6cbb\u7642\u8981\u5169\u767e\u842c\u7f8e\u5143\uff1b
          • \u5851\u9020\u9aa8\u9abc\u7684\u57fa\u56e0\u63a2\u8a0e\uff1b
          • \u4eba\u985e\u5df2\u77e5\u7b2c\u4e09\u500b\u5f9e\u611b\u6ecb\u75c5\u4e2d\u5b8c\u5168\u6cbb\u7652\u7684\u60a3\u8005\uff1b
          • \u4f7f\u7528 Deep brain stimulation, DBS \u6cbb\u7642\u6291\u9b31\u75c7\u7684\u7cfb\u5217\u6587\u7ae0\uff1b
          • \u4eba\u985e\u9996\u500b\u5168\u773c\u79fb\u690d\u6848\u4f8b\uff1b
          • \u900f\u904e\u4eba\u5de5\u667a\u6167\u6aa2\u6e2c\u963f\u8332\u6d77\u9ed8\u75c7\uff1b
          • \u4e5f\u900f\u904e\u4eba\u5de5\u667a\u6167\u5206\u6790\u8166\u7d30\u80de\u7684\u5373\u6642\u96fb\u5b50\u8a0a\u865f\uff0c \u8fa8\u8b58\u51fa\u60f3\u8981\u767c\u51fa\u7684\u8a00\u8a9e\uff1b
          • \u651c\u5e36\u91ab\u5b78\u4e2d\uff0c\u4f7f\u7528\u4f4e\u529f\u7387\u5ee3\u57df\u7db2\u8def\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

          • Consensus\uff1a\u4e3b\u984c\u76f8\u95dc\u7684\u554f\u7b54\uff0c\u4ee5\u5b78\u8853\u5171\u8b58\u70ba\u4f9d\u64da\u56de\u7b54\uff1b
          • Elicit\uff1a\u7528\u65bc\u69cb\u601d\u60f3\u6cd5\u548c\u6458\u8981\u8ad6\u6587\u7684\u597d\u5de5\u5177\uff1b
          • Scite\uff1a\u63d0\u4f9b\u8a73\u7d30\u7684\u771f\u5be6\u5f15\u7528\u6e05\u55ae\uff1b
          • Research Rabbit Rabbit\uff1a\u53ef\u4ee5\u4e86\u89e3\u4f60\u7684\u8208\u8da3\u4e26\u751f\u6210\u63a8\u85a6\u95b1\u8b80\u7684\u8ad6\u6587\uff1b
          • ChatPDF\uff1a\u80fd\u5920\u4e0a\u50b3\u8ad6\u6587\u4e26\u958b\u59cb\u5c0d\u5176\u63d0\u554f\u3002

          \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

          • \u8a2d\u8a08\u7d44\u5408\u8a9e\u8a00\u4e2d\u7684\u6392\u5e8f\u6f14\u7b97\u6cd5\uff1b
          • \u7121\u4eba\u6a5f\u7af6\u901f\u3001 \u6578\u5b78\u985e\u578b\u904a\u6232\u7684\u512a\u52dd\uff1b
          • \u9996\u500b\u628a\u57f7\u884c\u9577\u7684\u4f4d\u5b50\u8b93 AI \u4f86\u7576\u7684\u516c\u53f8\uff1b
          • \u58d3\u7e2e\u8cc7\u6599\u7684\u6f14\u7b97\u6cd5\uff1b
          • \u5929\u6c23\u9810\u5831\uff0c \u9019\u662f\u8001\u8b70\u984c\uff0c\u4f46\u662f\u4e00\u76f4\u6c92\u6709\u6709\u6548\u7684\u904b\u7b97\u80fd\u5920\u5339\u6575\u4eba\u985e\u8a2d\u8a08\u51fa\u4f86\u7684\u516c\u5f0f\uff1b
          • DeepMind \u7684\u4eba\u5de5\u667a\u616717 \u5929\u5167\u8a2d\u8a08\u51fa 41 \u500b\u7121\u6a5f\u7269\uff1b
          • \u6a21\u64ec\u4eba\u985e\u5927\u8166 \u7684\u4eba\u5de5\u667a\u80fd\uff0c\u4ee5\u4f4e\u529f\u8017\u70ba\u7279\u8272\uff0c\u9019\u4e5f\u5074\u9762\u8aaa\u660e\u4e86\u4eba\u985e\u5927\u8166\u7684\u9ad8\u6548\u6027\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

          • \u4e2d\u570b\u6b63\u5f0f\u555f\u7528 5G \u5ee3\u64ad\uff0c\u4ee5\u5f8c\u6536\u770b\u96fb\u8996\u4ea6\u662f\u7528\u9ad8\u901f\u901a\u8a0a\uff1b
          • IEEE \u901a\u904e Li-FI \u65b0\u6a19\u6e96\uff0c \u9ad8\u7a69\u5b9a\u9ad8\u983b\u5bec\uff0c\u53ef\u60dc\u4f4e\u64f4\u5f35\u548c\u7121\u6cd5\u9694\u7246\u901a\u8a0a\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

          • \u6838\u878d\u5408\u5728\u53bb\u5e74\u5229\u7528\u4eba\u5de5\u667a\u6167\u6709\u6240\u7a81\u7834\uff0c \u4eca\u5e74\u5247\u662f\u5171\u767c\u751f\u4e86\u56db\u6b21\u7684\u9ede\u706b\u4e8b\u4ef6\uff0c\u4e5f\u5c31\u662f\u8f38\u51fa\u80fd\u91cf\u5927\u65bc\u8f38\u5165\u80fd\u91cf\uff0c \u4e5f\u6709\u958b\u767c\u51fa\u4e00\u4e9b\u51b7\u5857\u5c64\u512a\u5316\u6838\u878d\u5408\u7684\u9032\u884c\uff1b
          • \u600e\u9ebc\u516c\u5e73\u5730\u628a\u4e0d\u5c0d\u7a31\u7684\u86cb\u7cd5\u4e00\u5206\u70ba\u4e8c\uff1f
          • \u6d41\u9ad4\u529b\u5b78\u4e2d\uff0c\u5c0d\u65bc\u6d41\u9ad4\u7684\u5047\u8a2d\u5b58\u5728\u8fd1\u516b\u5341\u5e74\u7684\u932f\u8aa4\uff1b
          • \u6ef2\u900f\u58d3\u7684\u65b0\u767c\u73fe\uff0c\u4e26\u975e\u6fc3\u5ea6\u9a45\u52d5\uff0c\u800c\u662f\u819c\u5167\u58d3\u529b\uff1b
          • \u4eca\u5e74\u7834\u89e3\u4e86 1974 \u5e74\u4ee5\u4f86\u7684\u554f\u984c\uff0c\u7d44\u5408\u5f8c\u7684\u5f62\u72c0\u6c38\u4e0d\u91cd\u8907\u7684\u5e7e\u4f55\u5716\u5f62\uff1b
          • Meta Quest3 \u548c\u860b\u679c\u7684 VisionPro \u7684\u6bd4\u8f03\uff0c\u5e36\u51fa LED \u7684\u6280\u8853\u4e4b\u722d\uff1b
          • \u5168\u606f\u52d5\u7269\u5712\uff0c\u6e1b\u8f15\u52d5\u7269\u8ca0\u64d4\u3002
          "},{"location":"review/2023/#\u5b87\u5b99","title":"\u5b87\u5b99","text":"

          \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

          • \u6700\u9060\u7684\u6046\u661f\uff0cEarendel
          • \u7e3d\u7d50\u4e86\u4e00\u4e9b\u89c0\u6e2c\u91cd\u529b\u6ce2\u7684\u65b9\u6cd5\uff1b
          • \u89c0\u5bdf\u5230\u6700\u5bcc\u80fd\u91cf\u7684\u5b87\u5b99\u7206\u70b8\u4e8b\u4ef6\uff1b
          • \u4e03\u5e74\u524d\u7684\u5c0f\u884c\u661f\u63a2\u6e2c\u4efb\u52d9\uff0c\u88ab\u6210\u529f\u9001\u56de\uff0c \u4f46\u662f\u76ee\u524d\u4ecd\u56e0\u70ba\u5361\u6b7b\u7684\u87ba\u7d72\u800c\u62c6\u4e0d\u958b\u6a23\u672c\u4fdd\u5b58\u7bb1\u3002

          \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

          • \u96fb\u5b50\u7684\u65b0\u578b\u614b\u767c\u73fe\uff1b
          • \u900f\u904e\u8abf\u6574\u80fd\u968e\u8df3\u8e8d\u7684\u96e3\u6613\u5ea6\uff0c\u4f86\u6a21\u64ec\u9ed1\u6d1e\u7684\u7269\u7406\u7279\u6027\uff1b
          • \u6578\u5468\u4ecd\u80fd\u7dad\u6301\u6e96\u78ba\u6027\u7684\u539f\u5b50\u5149\u675f\u6642\u9418\uff1b
          • \u5e74\u4e2d\u8f5f\u52d5\u4e00\u6642\u7684\u97d3\u570b\u5ba4\u6eab\u8d85\u5c0e\u9ad4\u65b0\u767c\u73fe\u8207\u5176\u6c92\u843d\uff0c \u9019\u7bc7\u4e5f\u8aaa\u660e\u4e86\u9ad8\u6eab\u8d85\u5c0e\u9ad4\u7684\u61c9\u7528\uff1b
          • \u91cf\u5b50\u4f4d\u5143\u8b8a\u5f97\u66f4\u7a69\u5b9a\u4e86\uff1b
          • \u7b2c\u4e00\u500b\u64c1\u6709 1000 \u91cf\u5b50\u4f4d\u5143\u7684\u6676\u7247\uff1b
          • \u786c\u5e63\u5927\u5c0f\u7684\u7c92\u5b50\u52a0\u901f\u5668\u3002
          "},{"location":"review/2023/#\u7da0\u80fd","title":"\u7da0\u80fd","text":"

          \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

          • \u592a\u967d\u80fd\u7684\u56de\u6536\u662f\u8fd1\u5e74\u5f88\u71b1\u9580\u7684\u7814\u7a76\u9818\u57df\uff0c\u751a\u81f3\u53ef\u4ee5\u8aaa\u662f\u65b0\u4e00\u4ee3\u7684\u7da0\u91d1\uff0c\u65e9\u671f\u90fd\u5207\u788e\u7136\u5f8c\u71c3\u71d2\uff0c\u5f88\u6d6a\u8cbb\u3002 \u6709\u4eba\u4f7f\u7528\u5200\u7247\u5207\u5272\uff0c \u4e5f\u6709\u4eba\u7528\u5fae\u6ce2\uff0c \u4e5f\u6709\u4eba\u5229\u7528\u6e05\u6f54\u6a5f\u5668\u4eba\u5ef6\u9577\u5176\u58fd\u547d\uff1b
          • \u9664\u4e86\u7da0\u80fd\u6e1b\u78b3\uff0c\u4e5f\u6709\u4e00\u4e9b\u88dc\u63a2\u65b9\u5f0f\uff0c \u4f8b\u5982\u6fd5\u5ea6\u6355\u6349\u70ad\uff1b
          • \u6e1b\u78b3\u4e4b\u5916\uff0c\u91dd\u5c0d\u5851\u81a0\u7684\u8655\u7406\u4e5f\u8d8a\u4f86\u8d8a\u91cd\u8996\uff0c \u4f8b\u5982\u53ef\u8b8a\u6210\u6d77\u6d0b\u751f\u7269\u98df\u7269\u7684\u5851\u81a0\u548c \u900f\u904e\u78c1\u6027\u9846\u7c92\u53bb\u9664\u5fae\u578b\u5851\u81a0\uff1b
          • \u96a8\u7136\u96fb\u52d5\u8eca\u7684\u7522\u91cf\u9054\u5230\u6b77\u53f2\u9ad8\u5cf0\uff0c \u4f46\u662f\u96fb\u52d5\u8eca\u56e0\u70ba\u91cd\uff0c\u6240\u4ee5\u88fd\u9020\u7684\u74b0\u5883\u5851\u81a0\u66f4\u591a\u3002 \u632a\u5a01\u4e5f\u767c\u73fe\uff0c\u6bd4\u8d77\u9f13\u52f5\u96fb\u52d5\u8eca\uff0c\u66f4\u61c9\u8a72\u9f13\u52f5\u884c\u8d70\uff0c\u6545\u800c\u53d6\u6d88\u96fb\u52d5\u8eca\u7684\u88dc\u52a9\u3002 \u4e0d\u9051\u65bc\u96fb\u52d5\u6c7d\u8eca\uff0c\u7da0\u80fd\u5ba2\u6a5f\u4e5f\u6210\u529f\u98db\u8d8a\u5927\u897f\u6d0b\uff0c \u5b8c\u6210\u968e\u6bb5\u6027\u7684\u7a81\u7834\u3002

          \u80fd\u6e90\u958b\u767c\u76f8\u95dc\uff1a

          • \u51b7\u5a92\u51b7\u6c23\u52a0\u901f\u5730\u7403\u6696\u6216\uff0c\u65b0\u65b9\u6cd5\u900f\u904e\u96fb\u71b1\u5834\u9032\u51fa\u96fb\u5834\uff0c\u9054\u6210\u51b7\u71b1\u4ea4\u66ff\uff1b
          • \u597d\u7684\u7da0\u80fd\u7cfb\u7d71\uff0c\u4f8b\u5982\u82f1\u570b\u7684\u6f6e\u6c50\u767c\u96fb\uff0c \u4e5f\u9700\u8981\u6709\u597d\u7684\u5132\u96fb\u7cfb\u7d71\uff0c\u4f8b\u5982 4GWh \u7684\u5132\u71b1\u767c\u96fb\u5ee0\uff1b
          • \u4f7f\u7528\u7e69\u5b50\u63a1\u96c6\u92f0\u7684\u65b0\u65b9\u6cd5\uff1b
          • \u9223\u9226\u7926\u592a\u967d\u80fd\u7684\u6548\u7387\u7a81\u7834\uff1b
          • \u6c2b\u662f\u745e\u58eb\u5200\uff0c\u5728\u672a\u4f86\u7684\u7da0\u80fd\u626e\u6f14\u91cd\u8981\u89d2\u8272\uff0c\u4eca\u5e74\u4e5f\u6709\u4e00\u4e9b\u7a81\u7834\uff1a \u4e0d\u9700\u8981\u6de1\u6c34\u7684\u5236\u6c2b\u624b\u6cd5\u3001 \u900f\u904e\u5851\u6599\u88fd\u6c2b\uff0c\u8b93\u7e3d\u9ad4\u7684\u88fd\u4f5c\u6210\u672c\u662f\u8ca0\u7684\u3001 \u900f\u904e\u71b1\u80fd\u88fd\u6c2b\uff1b
          • \u96fb\u6c60\u7684\u767c\u5c55\u4e5f\u5f88\u91cd\u8981\uff0c\u597d\u7684\u96fb\u6c60\u53ef\u4ee5\u6e1b\u7de9\u7da0\u80fd\u7684\u767c\u96fb\u4e0d\u7a69\u5b9a\u6027\uff0c\u4e26\u63d0\u4f9b\u6709\u6548\u7684\u7dca\u6025\u7528\u96fb\u3002 \u56fa\u614b\u96fb\u6c60\u662f\u524d\u5e7e\u5e74\u7684\u795e\u8a71\uff0c\u8fd1\u4f86\u767c\u73fe\u4e0d\u5c11\u767c\u5c55\u7684\u56f0\u96e3\uff0c \u9664\u6b64\u4e4b\u5916\u6709\u4e00\u4e9b\u96fb\u6c60\u4e0a\u7684\u7a81\u7834\uff0c\u4f8b\u5982 \u900f\u904e\u7a7a\u6c23\u767c\u96fb\u7684\u92c5\u96fb\u6c60\u3001 \u7528\u9435\u7926\u7576\u9577\u6548\u7684\u96fb\u6c60\u3001 \u5229\u7528\u7a7a\u6c23\u9032\u884c\u767c\u96fb\u3002

          \u90fd\u5e02\u8a2d\u8a08\u76f8\u95dc\uff1a

          • \u81e8\u6d77\u57ce\u5e02\u53ef\u4ee5\u5229\u7528\u6d77\u6c34\u6c96\u99ac\u6876\u548c\u8abf\u7bc0\u6eab\u5ea6\uff1b
          • \u53ef\u7528\u65bc\u4f4f\u5b85\u548c\u9053\u8def\u7684\u6c34\u6ce5\u96fb\u6c60\uff0c \u5176\u5229\u7528\u6c34\u6ce5\u548c\u9ed1\u70ad\uff1b
          • \u4ee5\u5927\u8c61\u76ae\u819a\u70ba\u767c\u60f3\u8a2d\u8a08\u5927\u6a13\u5916\u7246\uff1b
          • \u85e4\u985e\u964d\u6eab\u5efa\u7bc9\uff0c\u6709\u6548\u3001\u4fbf\u5b9c\u3001\u6cdb\u7528\uff1b
          • \u53ef\u4ee5\u5e6b\u52a9\u5efa\u7bc9\u9694\u71b1\u3001\u4fdd\u6eab\u7684\u900f\u660e\u6c23\u51dd\u81a0\u73bb\u7483\uff1b
          • \u90fd\u5e02\u8a2d\u8a08\u4e2d\u958b\u59cb\u601d\u8003\u5982\u4f55\u8b93\u90fd\u5e02\u964d\u6eab\uff0c \u4e26\u4e14\u8a66\u8457\u81ea\u7136\u7684\u5f15\u5165\u98a8\u3002
          "},{"location":"review/2023/#\u4eba\u6587","title":"\u4eba\u6587","text":"

          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

          • \u5c0d\u65bc\u653f\u5e9c\u7684\u4e0d\u74b0\u4fdd\uff0c\u4e0d\u53ea\u662f\u5e74\u8f15\u4eba\u63d0\u51fa\u63a7\u8a34\uff0c \u9084\u6709\u8001\u4eba\uff1b
          • \u4eba\u5011\u78ba\u5be6\u66f4\u74b0\u4fdd\u4e86\uff0c \u9f13\u52f5\u591a\u5403\u7d20\u98df\u3001\u4f7f\u7528\u5927\u773e\u904b\u8f38\u3001\u6e1b\u5c11\u5851\u81a0\u4f7f\u7528\u3001\u4e0d\u642d\u98db\u6a5f\u7684\u6e21\u5047\u3001\u4f7f\u7528\u5c31\u8fd1\u7684\u6709\u6a5f\u8fb2\u7522\uff1b
          • unity \u8981\u6f32\u50f9\u4e86\uff0c \u9019\u4e5f\u5074\u9762\u986f\u793a\u51fa\u904a\u6232\u7522\u696d\u7684\u8870\u9000\uff0c \u4e26\u4e14\u53ef\u4ee5\u770b\u5230\u5168\u4e16\u754c\u904a\u6232\u6536\u5165\u4e03\u5e74\u4f86\u9996\u6b21\u4e0b\u6ed1\uff0c \u4e5f\u6709\u4e0d\u5c11\u7db2\u8def\u4e0a\u7684\u76f8\u95dc\u8a0e\u8ad6\uff1b
          • \u5224\u5b9a\u4e86 3M \u56e0\u70ba\u8ecd\u4e8b\u8033\u585e\u8ce0\u511f\u5343\u5104\u7684\u548c\u89e3\u5b98\u53f8\uff1b
          • \u4eba\u884c\u9053\u7684\u6539\u5584\u8d8a\u4f86\u8d8a\u6ce8\u91cd\uff0c\u4f8b\u5982\uff0c \u8377\u862d\u6c92\u8eca\u8a08\u756b\u3001 \u548c\u53f0\u7063\u4eba\u884c\u9053\u7684\u6539\u5584\uff1b
          • \u5168\u9762\u7981\u6b62\u6d3b\u9ad4\u52d5\u7269\u5be6\u9a57\uff0c \u7ae0\u9b5a\u6709\u75db\u89ba\u3001\u7814\u7a76\u6642\u5c07\u53d7\u5230\u4fdd\u8b77\uff0c \u53e6\u5916\u53f0\u7063\u52d5\u4fdd\u6cd5\u5c07\u8981\u4fee\u6cd5\uff0c\u5167\u5bb9\u5927\u81f4\u662f\uff1a
          • \u9650\u5236\u52d5\u7269\u7576\u734e\u54c1
          • \u6355\u7378\u593e\u7684\u7981\u6b62
          • \u52d5\u6aa2\u54e1\u7684\u5c08\u696d\u3001\u798f\u5229\u548c\u516c\u6b0a\u529b
          • \u4e0d\u7576\u98fc\u990a\u7684\u754c\u5b9a\u548c\u8ab2\u8cac
          • \u7d93\u6fdf\u52d5\u7269\u7684\u798f\u5229
          • \u53f0\u7063\u5efa\u7bc9\u88dc\u78b3\u6cd5\u898f\uff1b
          • \u822a\u7a7a\u57ce\u5fb5\u6536\u5c45\u6c11\u52dd\u8a34\uff0c\u5224\u5b9a\u975e\u6cd5\u5fb5\u6536\uff0c \u4f46\u662f\u91d1\u984d\u4e0d\u8db3\u5c0e\u81f4\u5fb5\u6536\u6236\u4e0d\u6eff\uff1b
          • \u4e2d\u570b\u623f\u5b50\u9700\u6c42\u7684\u8da8\u7de9\u4ee5\u53ca\u6046\u5927\u7684\u56f0\u5883\uff1b
          • \u4e2d\u570b\u7684\u81ea\u88fd\u98db\u6a5f\uff0c\u5617\u8a66\u548c\u6ce2\u97f3\u3001\u806f\u5408\u4e09\u5206\u5929\u4e0b\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

          • \u6b63\u7576\u6027\u5371\u6a5f\u6703\u8b93\u8b0a\u8a00\u548c\u4ec7\u6068\u6027\u8a00\u8ad6\u6607\u83ef\u3002
          • \u6295\u7968\u7684\u533f\u540d\u6027\u5bb9\u6613\u6fc0\u767c\u4ec7\u5916\u60c5\u7bc0\uff0c\u61c9\u8003\u91cf\u589e\u52a0\u4e00\u4e9b\u66b4\u9732\u56e0\u7d20\uff0c\u4f8b\u5982\u8003\u8a66\u548c\u62db\u52df\u3002\u6458\u81ea\u81ea\u7136\u96dc\u8a8c\u7684\u6bcf\u65e5\u8cbc\u6587\u3002
          • \u9802\u5c16\u4eba\u624d\u6bd4\u7684\u4e0d\u662f\u667a\u529b\uff0c\u800c\u662f\u8b19\u905c\u3002
          • \u4eba\u624d\u5354\u4f5c\u8005\u6bd4\u5c08\u696d\u80fd\u529b\u66f4\u96e3\u5f97\u3002
          • Z\u4e16\u4ee3\u7684\u9069\u61c9\u5fc5\u8981\u3002
          • \u76f4\u5230\u6709\u4e00\u5929\uff0c\u4f60\u610f\u8b58\u5230\u4e86\u4f60\u6703\u6b7b\uff0c\u624b\u982d\u7684\u4e8b\u60c5\u505a\u4e0d\u5b8c\uff0c\u4e00\u5207\u5c31\u90fd\u767c\u751f\u4e86\u6539\u8b8a\u3002 \u5f9e\u90a3\u4e00\u5929\u958b\u59cb\uff0c\u4f60\u82b1\u8cbb\u7684\u6642\u9593\u624d\u662f\u771f\u6b63\u82b1\u51fa\u53bb\u7684\u6642\u9593\uff0c\u99ac\u4e01\u00b7\u65af\u79d1\u585e\u65af\u3002
          • \u8afe\u8c9d\u723e\u75c7\uff0c\u7576\u4f60\u7372\u5f97\u8afe\u8c9d\u723e\u6642\uff0c\u5927\u5bb6\u5c31\u6703\u958b\u59cb\u554f\u4f60\u5404\u7a2e\u9762\u5411\u7684\u554f\u984c\uff0c\u7136\u5f8c\u4f60\u5c31\u6703\u958b\u59cb\u89ba\u5f97\u4f60\u4ec0\u9ebc\u90fd\u61c2\u3002\u8afe\u8c9d\u723e\u734e\u5f97\u4e3b\uff0cPaul Nurse\u3002
          • \u8fd1\u5e74\u4f86\u8ad6\u6587\u6578\u6fc0\u589e\uff0c\u4f46\u662f\u79d1\u6280\u696d\u6c92\u6709\u5275\u65b0\u3002
          • \u58ef\u4e16\u4ee3\u8a08\u5283\uff0c\u9f13\u52f5\u8001\u5e74\u4eba\u51fa\u4f86\u6d3b\u52d5\u7684\u8a08\u756b\uff0c\u67ef\u6587\u54f2\u3002
          • \u5584\u610f\u662f\u570b\u5bb6\u6700\u5927\u7684\u5c4f\u969c\uff0c\u67ef\u6587\u54f2\u3002
          "},{"location":"review/2023/#\u7e3d\u7d50","title":"\u7e3d\u7d50","text":"

          \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 diff --git a/sitemap.xml b/sitemap.xml index 4e52f8b6..043141a2 100644 --- a/sitemap.xml +++ b/sitemap.xml @@ -2,397 +2,397 @@ https://evan361425.github.io/ - 2024-05-07 + 2024-05-09 daily https://evan361425.github.io/latest-works/ - 2024-05-07 + 2024-05-09 daily https://evan361425.github.io/awesome/ - 2024-05-07 + 2024-05-09 daily https://evan361425.github.io/awesome/cb/ - 2024-05-07 + 2024-05-09 daily https://evan361425.github.io/essay/ - 2024-05-07 + 2024-05-09 daily https://evan361425.github.io/essay/devex-in-action/ - 2024-05-07 + 2024-05-09 daily https://evan361425.github.io/essay/gpl-check/ - 2024-05-07 + 2024-05-09 daily https://evan361425.github.io/essay/nginx-changelog/ - 2024-05-07 + 2024-05-09 daily https://evan361425.github.io/essay/node-changelog-14-18/ - 2024-05-07 + 2024-05-09 daily https://evan361425.github.io/essay/pls-sem/ - 2024-05-07 + 2024-05-09 daily https://evan361425.github.io/essay/questionnaire-principal/ - 2024-05-07 + 2024-05-09 daily https://evan361425.github.io/essay/architecture/made-container/ - 2024-05-07 + 2024-05-09 daily https://evan361425.github.io/essay/architecture/pki-checklist/ - 2024-05-07 + 2024-05-09 daily https://evan361425.github.io/essay/architecture/replace-docker-desktop/ - 2024-05-07 + 2024-05-09 daily https://evan361425.github.io/essay/architecture/tcp-socket-loss-after-dhcp/ - 2024-05-07 + 2024-05-09 daily https://evan361425.github.io/essay/architecture/tomcat-max-packet-size/ - 2024-05-07 + 2024-05-09 daily https://evan361425.github.io/essay/code/node.js-best-practice/ - 2024-05-07 + 2024-05-09 daily https://evan361425.github.io/essay/code/node.js-error/ - 2024-05-07 + 2024-05-09 daily https://evan361425.github.io/essay/code/object-oriented-terms/ - 2024-05-07 + 2024-05-09 daily https://evan361425.github.io/essay/web/certificate-transparency/ - 2024-05-07 + 2024-05-09 daily https://evan361425.github.io/essay/web/http/ - 2024-05-07 + 2024-05-09 daily https://evan361425.github.io/essay/web/maglev/ - 2024-05-07 + 2024-05-09 daily https://evan361425.github.io/essay/web/network-books/ - 2024-05-07 + 2024-05-09 daily https://evan361425.github.io/essay/web/network-details/ - 2024-05-07 + 2024-05-09 daily https://evan361425.github.io/essay/web/network-routing/ - 2024-05-07 + 2024-05-09 daily https://evan361425.github.io/essay/web/ntp/ - 2024-05-07 + 2024-05-09 daily https://evan361425.github.io/essay/web/retry-strategy/ - 2024-05-07 + 2024-05-09 daily https://evan361425.github.io/essay/web/tcp/ - 2024-05-07 + 2024-05-09 daily https://evan361425.github.io/essay/web/url-structure/ - 2024-05-07 + 2024-05-09 daily https://evan361425.github.io/essay/web-security/cross-origin-resources-sharing/ - 2024-05-07 + 2024-05-09 daily https://evan361425.github.io/essay/web-security/mixed-content/ - 2024-05-07 + 2024-05-09 daily https://evan361425.github.io/essay/web-security/owasp-api-top10/ - 2024-05-07 + 2024-05-09 daily https://evan361425.github.io/essay/web-security/owasp-authentication-best-practice/ - 2024-05-07 + 2024-05-09 daily https://evan361425.github.io/essay/web-security/owasp-mobile-risk-top10/ - 2024-05-07 + 2024-05-09 daily https://evan361425.github.io/feedback/ - 2024-05-07 + 2024-05-09 daily https://evan361425.github.io/feedback/adaptive-concurrency/ - 2024-05-07 + 2024-05-09 daily https://evan361425.github.io/feedback/maintenace-experience/ - 2024-05-07 + 2024-05-09 daily https://evan361425.github.io/feedback/release-it/ - 2024-05-07 + 2024-05-09 daily https://evan361425.github.io/feedback/designing-data-intensive-applications/ - 2024-05-07 + 2024-05-09 daily https://evan361425.github.io/feedback/designing-data-intensive-applications/derived-batch/ - 2024-05-07 + 2024-05-09 daily https://evan361425.github.io/feedback/designing-data-intensive-applications/derived-stream/ - 2024-05-07 + 2024-05-09 daily https://evan361425.github.io/feedback/designing-data-intensive-applications/distributed-env/ - 2024-05-07 + 2024-05-09 daily https://evan361425.github.io/feedback/designing-data-intensive-applications/distributed-ft/ - 2024-05-07 + 2024-05-09 daily https://evan361425.github.io/feedback/designing-data-intensive-applications/distributed-partition/ - 2024-05-07 + 2024-05-09 daily https://evan361425.github.io/feedback/designing-data-intensive-applications/distributed-replication/ - 2024-05-07 + 2024-05-09 daily https://evan361425.github.io/feedback/designing-data-intensive-applications/farewell/ - 2024-05-07 + 2024-05-09 daily https://evan361425.github.io/feedback/designing-data-intensive-applications/foundation-dw/ - 2024-05-07 + 2024-05-09 daily https://evan361425.github.io/feedback/designing-data-intensive-applications/foundation-encode/ - 2024-05-07 + 2024-05-09 daily https://evan361425.github.io/feedback/designing-data-intensive-applications/foundation-ft/ - 2024-05-07 + 2024-05-09 daily https://evan361425.github.io/feedback/designing-data-intensive-applications/foundation-index/ - 2024-05-07 + 2024-05-09 daily https://evan361425.github.io/feedback/designing-data-intensive-applications/foundation-model/ - 2024-05-07 + 2024-05-09 daily https://evan361425.github.io/feedback/designing-data-intensive-applications/glossary/ - 2024-05-07 + 2024-05-09 daily https://evan361425.github.io/feedback/distributed-systems-with-node.js/ - 2024-05-07 + 2024-05-09 daily https://evan361425.github.io/feedback/distributed-systems-with-node.js/container-orchestration-and-misc/ - 2024-05-07 + 2024-05-09 daily https://evan361425.github.io/feedback/distributed-systems-with-node.js/container/ - 2024-05-07 + 2024-05-09 daily https://evan361425.github.io/feedback/distributed-systems-with-node.js/observability/ - 2024-05-07 + 2024-05-09 daily https://evan361425.github.io/feedback/distributed-systems-with-node.js/protocol/ - 2024-05-07 + 2024-05-09 daily https://evan361425.github.io/feedback/distributed-systems-with-node.js/sla-and-load-testing/ - 2024-05-07 + 2024-05-09 daily https://evan361425.github.io/feedback/future-of-fusion-energy/ - 2024-05-07 + 2024-05-09 daily https://evan361425.github.io/feedback/future-of-fusion-energy/energy/ - 2024-05-07 + 2024-05-09 daily https://evan361425.github.io/feedback/future-of-fusion-energy/fusion/ - 2024-05-07 + 2024-05-09 daily https://evan361425.github.io/feedback/physics/ - 2024-05-07 + 2024-05-09 daily https://evan361425.github.io/feedback/physics/astronomy/ - 2024-05-07 + 2024-05-09 daily https://evan361425.github.io/feedback/physics/special-relativity/ - 2024-05-07 + 2024-05-09 daily https://evan361425.github.io/feedback/site-reliability-workbook/ - 2024-05-07 + 2024-05-09 daily https://evan361425.github.io/feedback/site-reliability-workbook/canary-release/ - 2024-05-07 + 2024-05-09 daily https://evan361425.github.io/feedback/site-reliability-workbook/configuration-best-practice/ - 2024-05-07 + 2024-05-09 daily https://evan361425.github.io/feedback/site-reliability-workbook/data-pipelines/ - 2024-05-07 + 2024-05-09 daily https://evan361425.github.io/feedback/site-reliability-workbook/incident-response/ - 2024-05-07 + 2024-05-09 daily https://evan361425.github.io/feedback/site-reliability-workbook/legacy-system/ - 2024-05-07 + 2024-05-09 daily https://evan361425.github.io/feedback/site-reliability-workbook/managing-load/ - 2024-05-07 + 2024-05-09 daily https://evan361425.github.io/feedback/site-reliability-workbook/nalsd/ - 2024-05-07 + 2024-05-09 daily https://evan361425.github.io/feedback/site-reliability-workbook/on-call/ - 2024-05-07 + 2024-05-09 daily https://evan361425.github.io/feedback/site-reliability-workbook/postmortem-culture/ - 2024-05-07 + 2024-05-09 daily https://evan361425.github.io/feedback/site-reliability-workbook/simplicity/ - 2024-05-07 + 2024-05-09 daily https://evan361425.github.io/feedback/site-reliability-workbook/toil/ - 2024-05-07 + 2024-05-09 daily https://evan361425.github.io/review/ - 2024-05-07 + 2024-05-09 daily https://evan361425.github.io/review/2022-ai/ - 2024-05-07 + 2024-05-09 daily https://evan361425.github.io/review/2023/ - 2024-05-07 + 2024-05-09 daily \ No newline at end of file diff --git a/sitemap.xml.gz b/sitemap.xml.gz index 1c776fd846a37a46c161633a359c345866f68f94..45682d3994267890dc876e64b99aa225c4c8e2b9 100644 GIT binary patch delta 935 zcmV;Y16ch32mS{KABzYG01`Zr2Ot7SijgTO9oNg~p3cZZ!M|CVwxR!-pq*>>)oz^f7n_|M8do%k!sgPidIiErsT_$wS`X z0g}eh9iDg3FJ|}2?7rxb`?Yt&>;S&UBjfi&2js4=&ATf%l;*+muc;g)lw{_>Cn*#W zW|S~u;dHhw6c9z=S~OdSXS^8l25izzTQqAQol%=$Pk%*I`kws7+@9+~Up8y#@CT~d zznJ~!qJg6mBRCe#_3ct6~QMUk6aITJkiZQ zIFeKkHe+;P(R9I{kWGhjN+H(6pKLUe*^_ZW#K19S8H24!Ll`Y2Gs4A0SfmL3iAD2k zSdEJT-+z7+)8;@ja(3djB5Y(1Tt04Szv((LfeC%W&gl9crD*IK+r}a%I+CtyG>O4W z1lDZqT0D3jRy^bgy~A_ym>yHkFHIZ5NvfgkP-72Q4=;x)k?+grtzcs@CcYX`iySc|xaKtW!9x=67~tO6q$#hm-1cHGiWvj1nfcsQKRjT)}4hp<|?r1`Ro( z((s`k>@b5w1CflTBl}%-;8PlOzH|Je$#_K(^519~LrV?~lbnkFGmeN|3&j@b9(d3} zOmtqV96He@hs6)(5hxpwTq(dy#GH#1yO1Byj1EE2P%53YL!sWQUojmdFw0y^ULp{q zyMG%IS%-*D7tdKeQVYor>yo5V4#Kz+O{8k5opQwi{ds+&j%j_GB5B==5<}7FE*)_33D0}q zBUec{ikWqoxp$AM=YO==O<+6VQu54e4S#%RMiRRofz>MststMFC6|jbwX2C7Qn0~Q zFGL(HyTt{_U0Er(3G)zjoN^W3grhl5atm#c`)jS(b<^Lzl};artB{piFcpA<5975K zV2Nl6oMyOAJ@B~#6Q9q-XI#3wq~#EK?(x?PZoz9%YVH-|igg5kq<-Rh+D<Hy)s7K_I*xSa|~Cn3=d8!##c*aq5Mkd zKMRNw2Ot7Xi;*cP9hb}Kp3cZZ!M|1J3Q~6U(D{4+5N0T?$_Q8vjg}ZkBr|A9gw@eHt(+7P?`tJzov4KP?DJgpQKPk zm{G!rh11!#P(T!cYtd{Sp7CPH8?Z??ZPBcKbVhB0J%1HV>3i}Qb9=4}ec7y`!|$kO z|6=x^iw2HPjNn)_3Zi5d+7RWem0^4Pms9%m^0~VUZ&ACl<}G zVKpuWe1H2@Oq&DA$k~b8im;J6aQV2Q{i^H41Sa$eJEQA+l%la`Y#WQ5=t#P*(If^h z5m>XaYw_TDSn-e}^bXI(V|q+Ezcg(KC#iEfiazd*DF_ zG0}Oca_B^t92P&AN1$v#a-{$-5pyn5>_UD(Gdcu8L#cGq4uyKJe#LZ=qXwcV(sECd@Ryutgu0mF7!BhYaK8)8| zfF+_OaGK#d^}y!}Ong2QpKOZsBtBq zh!piVk5aFWd=|GupK?1nYBE&uU*fO_d%ed+^~xA^+xIzT%`sfPGCVk`7+)=wh4L$* z|12Pe%*47CjGbJ;=Uje3i_n