diff --git a/essay/devex-in-action/index.html b/essay/devex-in-action/index.html index fcc3d2ee..0c4f91dc 100644 --- a/essay/devex-in-action/index.html +++ b/essay/devex-in-action/index.html @@ -10,9 +10,10 @@ - - - + + + + 開發體驗的改進 - 心得與記錄 @@ -60,7 +61,7 @@ - + @@ -1060,10 +1061,11 @@

開發體驗的改進

-

!!! info "摘要" - 本文摘錄自:DevEx in Action

-
文中闡述為什麼優化工程開發重要,並依此來設計出一個優質的工作環境。
-
+
+

摘要

+

本文摘錄自:DevEx in Action

+

文中闡述為什麼優化開發體驗很重要,並依此來設計出一個優質的工作環境。

+

優化工程開發體驗有三個目標要滿足:

+
+

只有這三個嗎?

+

這些只是作者提供的指標,根據情境可以自行設計。

+

但是要注意,根據 PLS-SEM(後面的分析工具)最佳指南, +指標數量越高,樣本數要跟著提高才能降低誤差。

+

總結來說,就會有這三對三的線圖:

-
---
+
---
 title: 開發體驗的三個方向
 ---
 flowchart LR
@@ -1103,7 +1111,7 @@ 

開發體驗的改進

cl --H3a-->p cl --H3b-->t cl --H3c-->o -
+

問卷

透過問卷和 PLS 的分析, 首先確保項目和假設有正關係,接著找出項目和假設的關係程度。

@@ -1138,7 +1146,6 @@

問卷問卷問卷問卷問卷問卷結果

-
---
-title: 環境對各單位的影響程度
+

透過 PLS-SEM 得到各個指標對各個目標的重要程度:

+
---
+title: 指標對各目標的影響程度
 ---
 flowchart LR
     p[個人]
@@ -1315,7 +1318,10 @@ 

結果心流

提供工程人員專注的開發,不只是優化個人效率,也能同時優化團隊和組織。

能夠擁有足夠時間的沈浸開發,會讓開發者增加 50% 的生產效率。 @@ -1336,7 +1342,11 @@

認知負荷

總結

-

TODO

+

總結來說,降低開發的認知負荷對於個人、團體和組織是最有效的。

+

但是這邊的精華在於用數據展示,換句話說,我們可以知道如何衡量改變。 +例如公司開始設計一個工具加速開發,這樣的優化如果可以透過數字知道某方面提升 40%, +某方面提升 10%,就可以知道這工具的優勢和劣勢,進一步改善。

+

這樣的機制不管是公司目前對於優化開發體驗是剛起步還是正在路上,都能有機制衡量和設定目標。


    @@ -1424,5 +1434,8 @@

    總結 - + \ No newline at end of file diff --git a/search/search_index.json b/search/search_index.json index 6c19e193..708ff294 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":"

    Release It!\uff0c\u71b1\u9580\u7684\u7dad\u904b\u66f8\u7c4d\u7684\u76f8\u95dc\u5fc3\u5f97\u548c\u6574\u7406\uff0c\u5e36\u4f60\u4e86\u89e3\u7dad\u904b\u6703\u9047\u5230\u7684\u554f\u984c\u3001\u89e3\u6c7a\u65b9\u6cd5\u3001\u67b6\u69cb\u8a2d\u8a08\u3001\u5fc3\u614b\u8abf\u6574\u7b49\u7b49\u3002

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

    Release It!\uff0c\u71b1\u9580\u7684\u7dad\u904b\u66f8\u7c4d\u7684\u76f8\u95dc\u5fc3\u5f97\u548c\u6574\u7406\uff0c\u5e36\u4f60\u4e86\u89e3\u7dad\u904b\u6703\u9047\u5230\u7684\u554f\u984c\u3001\u89e3\u6c7a\u65b9\u6cd5\u3001\u67b6\u69cb\u8a2d\u8a08\u3001\u5fc3\u614b\u8abf\u6574\u7b49\u7b49\u3002

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

    !!! info \"\u6458\u8981\" \u672c\u6587\u6458\u9304\u81ea\uff1aDevEx in Action\u3002

    \u6587\u4e2d\u95e1\u8ff0\u70ba\u4ec0\u9ebc\u512a\u5316\u5de5\u7a0b\u958b\u767c\u91cd\u8981\uff0c\u4e26\u4f9d\u6b64\u4f86\u8a2d\u8a08\u51fa\u4e00\u500b\u512a\u8cea\u7684\u5de5\u4f5c\u74b0\u5883\u3002\n

    \u512a\u5316\u5de5\u7a0b\u958b\u767c\u9ad4\u9a57\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\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

    \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\u9805\u76ee\u548c\u5047\u8a2d\u6709\u6b63\u95dc\u4fc2\uff0c\u63a5\u8457\u627e\u51fa\u9805\u76ee\u548c\u5047\u8a2d\u7684\u95dc\u4fc2\u7a0b\u5ea6\u3002

    \u4e0b\u9762\u662f PLS-SEM \u4e2d\u7684\u5916\u986f\u69cb\u5ff5\uff08Exogenous Construct\uff09\uff0c\u6bcf\u500b\u9805\u76ee\u6703\u5f62\u6210\u5404\u81ea\u7684\u69cb\u5ff5\uff08formatively item\uff09\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\u6703\u53cd\u61c9\u5404\u81ea\u7684\u69cb\u5ff5\uff08reflectively item\uff09\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":"
    ---\ntitle: \u74b0\u5883\u5c0d\u5404\u55ae\u4f4d\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
    "},{"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":"

    TODO

    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/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
      2. \u5982\u679c\u672a\u4f86\u9080\u8acb\u60a8\u4f7f\u7528\uff0c\u60a8\u6703\u4f7f\u7528\u54ea\u4e9b\u529f\u80fd\u3002A. \u8077\u7f3a\u6392\u5e8f
      3. \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/\u00a0\u21a9

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

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

    4. https://docs.strongloop.com/display/SLC/Clustering\u00a0\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\u4f86\u628a\u62bd\u8c61\u5c64\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\u5c64\u5ea6 class O O \u4f4e abstract class X O \u4e2d interface X X \u9ad8

    \u70ba\u4ec0\u9ebc\u8981\u62c9\u9ad8\u62bd\u8c61\u5c64\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

    function 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/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

    "},{"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
    • \\ \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\uff0cApache 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\u548c\u6e05\u695a\u7684\u8996\u91ce\u53bb\u770b\u5f85\u54ea\u7a2e\u5de5\u5177\u6216\u662f\u53c3\u6578\u7684\u8abf\u6821\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
            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
            3. \u4ee5\u5275\u65b0\u65b9\u5f0f\u8b93\u8cc7\u6599\u767c\u63ee\u529f\u7528\uff1a\u8cc7\u6599\u79d1\u5b78\u3001\u6a5f\u5668\u5b78\u7fd2
            "},{"location":"feedback/designing-data-intensive-applications/#\u5831\u544a\u9032\u7a0b","title":"\u5831\u544a\u9032\u7a0b","text":"

            \u53ef\u4ee5\u53bbHackMD \u5831\u544a\u6587\u672c\u67e5\u770b\u5404\u7ae0\uff0c\u88e1\u9762\u6703\u6574\u7406\u6210\u8f03\u9069\u5408\u5831\u544a\u7684\u5f62\u5f0f\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\u00a0\u21a9

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

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

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

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

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

            7. http://arxiv.org/pdf/1302.0309.pdf\u00a0\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\u00a0\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/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 \u9664\u6b64\u4e4b\u5916\u6240\u8b02\u7684\u300c\u6de8\u80fd\u6e90\u300d\uff0c\u4e26\u4e0d\u5305\u62ec\u96f7\u5c04\u7cfb\u7d71\u672c\u8eab...

            "},{"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\u4e0b\u4e00\u4ee3\u7684\u6a5f\u5668\u4eba\u3002

            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\uff0c\u5929\u773c \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
            "},{"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\u4ee5\u4e0b\u5217\u51fa\u4e00\u4e9b\u500b\u4eba\u8a8d\u70ba\u6709\u8da3\u6216\u91cd\u8981\u7684\u7a81\u7834\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\uff0c \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\u3002 \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\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
            • 3M \u56e0\u70ba\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 \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\u52d5\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

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

            Release It!\uff0c\u71b1\u9580\u7684\u7dad\u904b\u66f8\u7c4d\u7684\u76f8\u95dc\u5fc3\u5f97\u548c\u6574\u7406\uff0c\u5e36\u4f60\u4e86\u89e3\u7dad\u904b\u6703\u9047\u5230\u7684\u554f\u984c\u3001\u89e3\u6c7a\u65b9\u6cd5\u3001\u67b6\u69cb\u8a2d\u8a08\u3001\u5fc3\u614b\u8abf\u6574\u7b49\u7b49\u3002

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

            Release It!\uff0c\u71b1\u9580\u7684\u7dad\u904b\u66f8\u7c4d\u7684\u76f8\u95dc\u5fc3\u5f97\u548c\u6574\u7406\uff0c\u5e36\u4f60\u4e86\u89e3\u7dad\u904b\u6703\u9047\u5230\u7684\u554f\u984c\u3001\u89e3\u6c7a\u65b9\u6cd5\u3001\u67b6\u69cb\u8a2d\u8a08\u3001\u5fc3\u614b\u8abf\u6574\u7b49\u7b49\u3002

            {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\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\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\u9805\u76ee\u548c\u5047\u8a2d\u6709\u6b63\u95dc\u4fc2\uff0c\u63a5\u8457\u627e\u51fa\u9805\u76ee\u548c\u5047\u8a2d\u7684\u95dc\u4fc2\u7a0b\u5ea6\u3002

            \u4e0b\u9762\u662f PLS-SEM \u4e2d\u7684\u5916\u986f\u69cb\u5ff5\uff08Exogenous Construct\uff09\uff0c\u6bcf\u500b\u9805\u76ee\u6703\u5f62\u6210\u5404\u81ea\u7684\u69cb\u5ff5\uff08formatively item\uff09\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\u6703\u53cd\u61c9\u5404\u81ea\u7684\u69cb\u5ff5\uff08reflectively item\uff09\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 PLS-SEM \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\u63d0\u5347 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/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
              2. \u5982\u679c\u672a\u4f86\u9080\u8acb\u60a8\u4f7f\u7528\uff0c\u60a8\u6703\u4f7f\u7528\u54ea\u4e9b\u529f\u80fd\u3002A. \u8077\u7f3a\u6392\u5e8f
              3. \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/\u00a0\u21a9

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

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

            4. https://docs.strongloop.com/display/SLC/Clustering\u00a0\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\u4f86\u628a\u62bd\u8c61\u5c64\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\u5c64\u5ea6 class O O \u4f4e abstract class X O \u4e2d interface X X \u9ad8

            \u70ba\u4ec0\u9ebc\u8981\u62c9\u9ad8\u62bd\u8c61\u5c64\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

            function 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/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

            "},{"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
            • \\ \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\uff0cApache 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\u548c\u6e05\u695a\u7684\u8996\u91ce\u53bb\u770b\u5f85\u54ea\u7a2e\u5de5\u5177\u6216\u662f\u53c3\u6578\u7684\u8abf\u6821\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
                    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
                    3. \u4ee5\u5275\u65b0\u65b9\u5f0f\u8b93\u8cc7\u6599\u767c\u63ee\u529f\u7528\uff1a\u8cc7\u6599\u79d1\u5b78\u3001\u6a5f\u5668\u5b78\u7fd2
                    "},{"location":"feedback/designing-data-intensive-applications/#\u5831\u544a\u9032\u7a0b","title":"\u5831\u544a\u9032\u7a0b","text":"

                    \u53ef\u4ee5\u53bbHackMD \u5831\u544a\u6587\u672c\u67e5\u770b\u5404\u7ae0\uff0c\u88e1\u9762\u6703\u6574\u7406\u6210\u8f03\u9069\u5408\u5831\u544a\u7684\u5f62\u5f0f\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\u00a0\u21a9

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

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

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

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

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

                    7. http://arxiv.org/pdf/1302.0309.pdf\u00a0\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\u00a0\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/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 \u9664\u6b64\u4e4b\u5916\u6240\u8b02\u7684\u300c\u6de8\u80fd\u6e90\u300d\uff0c\u4e26\u4e0d\u5305\u62ec\u96f7\u5c04\u7cfb\u7d71\u672c\u8eab...

                    "},{"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\u4e0b\u4e00\u4ee3\u7684\u6a5f\u5668\u4eba\u3002

                    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\uff0c\u5929\u773c \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
                    "},{"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\u4ee5\u4e0b\u5217\u51fa\u4e00\u4e9b\u500b\u4eba\u8a8d\u70ba\u6709\u8da3\u6216\u91cd\u8981\u7684\u7a81\u7834\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\uff0c \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\u3002 \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\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
                    • 3M \u56e0\u70ba\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 \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\u52d5\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

                    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\u9a6c\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.gz b/sitemap.xml.gz index d7b1b4da..667a4e1e 100644 Binary files a/sitemap.xml.gz and b/sitemap.xml.gz differ