# 第å
«ç« ï¼åæ£å¼ç³»çµ±ç麻ç
©

> éé
ç¸é
>
> 網路延é²
>
> åä¹çºå¾
>
> ç¡é£ææ¸
>
> ââ Kyle Kingsbury, Carly Rae Jepsen ã網路å岿§½çå±å®³ãï¼2013 å¹´ï¼[^è¯è1]
---------
[TOC]
æè¿å¹¾ç« ä¸åè¦åºç¾ç䏻顿¯ï¼ç³»çµ±å¦ä½èçé¯èª¤çäºæ
ãä¾å¦ï¼æåè¨è«äº **坿¬æ
éåæ**ï¼â[èçç¯é»ä¸æ·](ch5.md#èçç¯é»å®æ©)âï¼ï¼**è¤è£½å»¶é²**ï¼â[è¤è£½å»¶é²åé¡](ch5.md#è¤è£½å»¶é²åé¡)âï¼åäºåæ§å¶ï¼â[å¼±éé¢ç´å¥](ch7.md#å¼±éé¢ç´å¥)âï¼ãç¶æåçè§£å¯è½å¨å¯¦é系統ä¸åºç¾çå種éç·£æ
æ³æï¼æåææ´å¥½å°èçå®åã
使¯ï¼å管æåå·²ç¶è«äºå¾å¤é¯èª¤ï¼ä½ä¹åå¹¾ç« ä»ç¶éæ¼æ¨è§ãç¾å¯¦æ´å 黿ãæåç¾å¨å°æ²è§ä¸»ç¾©æå¤§åï¼åè¨ä»»ä½å¯è½åºé¯çæ±è¥¿ **齿** åºé¯ [^i]ãï¼ç¶é©è±å¯ç系統éç¶æåè¨´ä½ ï¼éæ¯ä¸ååççåè¨ãå¦æä½ åå¾å¥½ï¼ä»åå¯è½æä¸éæ²»çå¿çåµå·ä¸éåè¨´ä½ ä¸äºå¯æçæ
äºï¼
[^i]: é¤äºä¸åä¾å¤ï¼æåå°å宿
鿝éæå åºå¼çï¼è«åé± â[æå åºæ
é](#æå åºæ
é)âï¼ã
使ç¨åæ£å¼ç³»çµ±èå¨ä¸èºè¨ç®æ©ä¸ç·¨å¯«è»é«æèæ ¹æ¬çåå¥ï¼ä¸»è¦çåå¥å¨æ¼ï¼æè¨±å¤æ°ç©ååºæ¿çæ¹æ³å¯ä»¥ä½¿äºæ
åºé¯ã1,2ããå¨éä¸ç« ä¸ï¼æåå°ç解實è¸ä¸åºç¾çåé¡ï¼çè§£æåè½å¤ ä¾è³´ï¼åä¸å¯ä»¥ä¾è³´çæ±è¥¿ã
æå¾ï¼ä½çºå·¥ç¨å¸«ï¼æåç任忝æ§å»ºè½å¤ 宿工ä½ç系統ï¼å³æ»¿è¶³ä½¿ç¨è
ææçä¿èï¼ï¼å管ä¸åé½åºé¯äºãå¨ [第ä¹ç« ](ch9.md) ä¸ï¼æåå°ççä¸äºå¯ä»¥å¨åæ£å¼ç³»çµ±ä¸æä¾é種ä¿èçæ¼ç®æ³çä¾åãä½é¦å
ï¼å¨æ¬ç« ä¸ï¼æåå¿
é çè§£æåé¢è¨çææ°ã
æ¬ç« å°åæ£å¼ç³»çµ±ä¸å¯è½åºç¾çåé¡é²è¡å¾¹åºçæ²è§åæ²®åªç總çµãæåå°ç 究網路çåé¡ï¼â[ä¸å¯é ç網路](#ä¸å¯é ç網路)âï¼; æéåæåºåé¡ï¼â[ä¸å¯é çæé](#ä¸å¯é çæé)âï¼; æåå°è¨è«ä»åå¯ä»¥é¿å
çç¨åº¦ãææéäºåé¡ç徿齿¯å°æçï¼æä»¥æåå°æ¢ç´¢å¦ä½æèä¸å忣å¼ç³»çµ±ççæ
ï¼ä»¥åå¦ä½æ¨çç¼ççäºæ
ï¼â[ç¥èãçç¸èè¬è¨](#ç¥èãçç¸èè¬è¨)âï¼ã
## æ
éèé¨å失æ
ç¶ä½ å¨ä¸èºè¨ç®æ©ä¸ç·¨å¯«ä¸åç¨å¼æï¼å®é常æä»¥ä¸ç¨®ç¸ç¶å¯é æ¸¬çæ¹å¼å·è¡ï¼ç¡è«æ¯å·¥ä½éæ¯ä¸å·¥ä½ãå
滿é¯èª¤çè»é«å¯è½æè®äººè¦ºå¾é»è
¦ææå乿æ âç³ç³çä¸å¤©âï¼é種åé¡é常æ¯éæ°ååå°±æ¢å¾©äºï¼ï¼ä½éä¸»è¦æ¯è»é«å¯«å¾ä¸å¥½ççµæã
å®åè¨ç®æ©ä¸çè»é«æ²ææ ¹æ¬æ§çä¸å¯é åå ï¼ç¶ç¡¬é«æ£å¸¸å·¥ä½æï¼ç¸åçæä½ç¸½æ¯ç¢çç¸åççµæï¼éæ¯ç¢ºå®æ§çï¼ã妿åå¨ç¡¬é«åé¡ï¼ä¾å¦ï¼è¨æ¶é«æå£æè¯çµå¨é¬åï¼ï¼å
¶å¾æéå¸¸æ¯æ´å系統æ
éï¼ä¾å¦ï¼æ ¸å¿ææ
ï¼âèè²ç«é¢å®æ©âï¼åå失æï¼ãè£æè¯å¥½è»é«çå人è¨ç®æ©é常è¦éº¼åè½å®å¥½ï¼è¦éº¼å®å
¨å¤±æï¼è䏿¯ä»æ¼å
©è
ä¹éã
鿝è¨ç®æ©è¨è¨ä¸çä¸åææç鏿ï¼å¦æç¼çå
§é¨é¯èª¤ï¼æå寧é¡é»è
¦å®å
¨å´©æ½°ï¼è䏿¯è¿åé¯èª¤ççµæï¼å çºé¯èª¤ççµæå¾é£èçãå çºè¨ç®æ©é±èäºæ¨¡ç³ä¸æ¸
çç©ç實ç¾ï¼ä¸¦åç¾åºä¸åçæ³åç系統模åï¼ä¸¦ä»¥æ¸å¸ä¸æ¨£çå®ç¾çæ¹å¼éä½ãCPU æä»¤ç¸½æ¯å忍£çäºæ
ï¼å¦æä½ å°ä¸äºè³æå¯«å
¥è¨æ¶é«æç£ç¢ï¼é£éº¼éäºè³æå°ä¿æä¸è®ï¼ä¸¦ä¸ä¸æè¢«é¨æ©ç ´å£ãå¾ç¬¬ä¸èºæ¸åè¨ç®æ©éå§ï¼*å§çµæ£ç¢ºå°è¨ç®* éåè¨è¨ç®æ¨è²«ç©¿å§çµã3ãã
ç¶ä½ 編寫å·è¡å¨å¤èºè¨ç®æ©ä¸çè»é«æï¼æ
æ³ææ¬è³ªä¸çåå¥ãå¨åæ£å¼ç³»çµ±ä¸ï¼æåä¸åèæ¼çæ³åç系統模åä¸ï¼æåå¥ç¡é¸æï¼åªè½é¢å°ç¾å¯¦ä¸ççæ··äºç¾å¯¦ãèå¨ç¾å¯¦ä¸çä¸ï¼åç¨®åæ¨£çäºæ
é½å¯è½æåºç¾åé¡ã4ãï¼å¦ä¸é¢çè»¼äºæè¿°ï¼
> 卿æéç徿¥ç¶æ·ä¸ï¼æå·²ç¶åå¾å¤æ±è¥¿æé交éï¼å®å **è³æä¸å¿ï¼DCï¼** ä¸é·æåå¨ç網路å岿§½ï¼é
é»å®å
PDU æ
éï¼äº¤ææ©æ
éï¼æ´åæ©æ¶çæå¤éåï¼æ´åè³æä¸å¿ä¸»å¹¹ç¶²è·¯æ
éï¼æ´åè³æä¸å¿ç黿ºæ
éï¼ä»¥åä¸åä½è¡ç³ç叿©æä»çç¦ç¹ç®å¡æå¨è³æä¸å¿ç HVACï¼å ç±ï¼é風å空調ï¼ç³»çµ±ä¸ãè䏿çè³ä¸æ¯ä¸åéç¶ã
>
> ââ æ¯éé»ç¾
å¨åæ£å¼ç³»çµ±ä¸ï¼å管系統çå
¶ä»é¨å工使£å¸¸ï¼ä½ç³»çµ±çæäºé¨åå¯è½æä»¥æç¨®ä¸å¯é ç¥çæ¹å¼è¢«ç ´å£ãéè¢«ç¨±çº **é¨å失æï¼partial failureï¼**ãé£é»å¨æ¼é¨åå¤±ææ¯ **ä¸ç¢ºå®æ§çï¼nondeterministicï¼**ï¼å¦æä½ 試åå任使¶åå¤åç¯é»å網路çäºæ
ï¼å®ææå¯è½æå·¥ä½ï¼æææåºç¾ä¸å¯é ç¥ç失æãæ£å¦æåå°è¦çå°çï¼ä½ çè³ä¸ç¥éæ¯å¦æåäºï¼å çºè¨æ¯ééç¶²è·¯å³æçæé乿¯ä¸ç¢ºå®çï¼
é種ä¸ç¢ºå®æ§åé¨å失æçå¯è½æ§ï¼ä½¿å¾åæ£å¼ç³»çµ±é£ä»¥å·¥ä½ã5ãã
### é²è¨ç®èè¶
ç´è¨ç®æ©
éæ¼å¦ä½æ§å»ºå¤§åè¨ç®ç³»çµ±æä¸ç³»åçå²å¸ï¼
* ä¸å極端æ¯é«æè½è¨ç®ï¼HPCï¼é åãå
·ææ¸åå CPU çè¶
ç´è¨ç®æ©éå¸¸ç¨æ¼è¨ç®å¯éåç§å¸è¨ç®ä»»åï¼å¦å¤©æ°£é å ±æååååå¸ï¼æ¨¡æ¬åååååçéåï¼ã
* å¦ä¸åæ¥µç«¯æ¯ **é²è¨ç®ï¼cloud computingï¼**ï¼é²è¨ç®ä¸¦ä¸æ¯ä¸åè¯å¥½å®ç¾©çæ¦å¿µã6ãï¼ä½é常èå¤ç§æ¶è³æä¸å¿ï¼é£ç· IP 網路ï¼é常æ¯ä¹å¤ªç¶²ï¼çåç¨è¨ç®æ©ï¼å½æ§ / æéè³æºåé
以åè¨éè¨è²»çç¸éè¯ã
* å³çµ±ä¼æ¥è³æä¸å¿ä½æ¼éå
©å極端ä¹éã
ä¸åçå²å¸æå°è´ä¸åçæ
éèçæ¹å¼ãå¨è¶
ç´è¨ç®æ©ä¸ï¼ä½æ¥é常æä¸æå°å°è¨ç®ççæ
åæªå°æä¹
å²åä¸ã妿ä¸åç¯é»åºç¾æ
éï¼é常çè§£æ±ºæ¹æ¡æ¯ç°¡å®å°åæ¢æ´åå¢éçå·¥ä½è² è¼ãæ
éç¯é»ä¿®å¾©å¾ï¼è¨ç®å¾ä¸ä¸å檢æ¥é»éæ°éå§ã7,8ããå æ¤ï¼è¶
ç´è¨ç®æ©æ´åæ¯ä¸åå®ç¯é»è¨ç®æ©è䏿¯åæ£å¼ç³»çµ±ï¼ééè®é¨å失æåç´çºå®å
¨å¤±æä¾èçé¨å失æ ââ å¦æç³»çµ±çä»»ä½é¨åç¼çæ
éï¼åªæ¯è®ææçæ±è¥¿é½å´©æ½°ï¼å°±åå®èºæ©å¨ä¸çæ ¸å¿ææ
䏿¨£ï¼ã
卿¬æ¸ä¸ï¼æåå°é黿¾å¨å¯¦ç¾ç¶²é網路æåç系統ä¸ï¼éäºç³»çµ±é常èè¶
ç´è¨ç®æ©çèµ·ä¾æå¾å¤§ä¸åï¼
* 許å¤èç¶²é網路æéçæç¨ç¨å¼é½æ¯ **ç·ä¸ï¼onlineï¼** çï¼å çºå®åéè¦è½å¤ 鍿以ä½å»¶é²æå使ç¨è
ã使æåä¸å¯ç¨ï¼ä¾å¦ï¼åæ¢å¢é以é²è¡ä¿®å¾©ï¼æ¯ä¸å¯æ¥åçãç¸æ¯ä¹ä¸ï¼å天氣模æ¬é樣çé¢ç·ï¼æ¹èçï¼å·¥ä½å¯ä»¥åæ¢ä¸¦éæ°ååï¼å½±é¿ç¸ç¶å°ã
* è¶
ç´è¨ç®æ©é常ç±å°ç¨ç¡¬é«æ§å»ºèæï¼æ¯åç¯é»ç¸ç¶å¯é ï¼ç¯é»ééå
±äº«è¨æ¶é«å **é ç«¯ç´æ¥è¨æ¶é«è¨ªåï¼RDMAï¼** é²è¡éè¨ãå¦ä¸æ¹é¢ï¼é²æåä¸çç¯é»æ¯ç±åç¨æ©å¨æ§å»ºèæçï¼ç±æ¼è¦æ¨¡ç¶æ¿ï¼å¯ä»¥ä»¥è¼ä½çææ¬æä¾ç¸åçæè½ï¼èä¸å
·æè¼é«çæ
éçã
* 大åè³æä¸å¿ç¶²è·¯éå¸¸åºæ¼ IP åä¹å¤ªç¶²ï¼ä»¥ CLOS ææ²æåï¼ä»¥æä¾æ´é«çå°åï¼bisectionï¼é »å¯¬ã9ããè¶
ç´è¨ç®æ©é常使ç¨å°éçç¶²è·¯ææ²çµæ§ï¼ä¾å¦å¤ç¶ç¶²æ ¼å Torus 網路 ã10ãï¼éçºå
·æå·²ç¥éè¨æ¨¡å¼ç HPC å·¥ä½è² è¼æä¾äºæ´å¥½çæè½ã
* 系統è¶å¤§ï¼å
¶å
ä»¶ä¹ä¸å°±è¶æå¯è½å£æãé¨èæéçæ¨ç§»ï¼å£æçæ±è¥¿å¾å°ä¿®å¾©ï¼æ°çæ±è¥¿å壿ï¼ä½æ¯å¨ä¸åææåä¸è¬åç¯é»ç系統ä¸ï¼æçç±èªçºç¸½æ¯æä¸äºæ±è¥¿æ¯å£æçã7ããç¶é¯èª¤èçççç¥åªç±ç°¡å®æ¾æ£çµææï¼ä¸å大ç系統æçµæè±è²»å¤§éæéå¾é¯èª¤ä¸æ¢å¾©ï¼è䏿¯åæç¨çå·¥ä½ã8ãã
* å¦æç³»çµ±å¯ä»¥å®¹å¿ç¼çæ
éçç¯é»ï¼ä¸¦ç¹¼çºä¿ææ´é«å·¥ä½çæ
ï¼é£éº¼éå°æ¼éçåç¶è·é常æç¨ï¼ä¾å¦ï¼å¯ä»¥å·è¡æ»¾ååç´ï¼è«åé± [第åç« ](ch4.md)ï¼ï¼ä¸æ¬¡éæ°ååä¸åç¯é»ï¼åæç¹¼çºçµ¦ä½¿ç¨è
æä¾ä¸ä¸æ·çæåãå¨é²ç°å¢ä¸ï¼å¦æä¸èºèæ¬æ©å¨å·è¡ä¸ä½³ï¼å¯ä»¥æ®ºæ»å®ä¸¦è«æ±ä¸èºæ°çèæ¬æ©å¨ï¼å¸ææ°çèæ¬æ©å¨é度æ´å¿«ï¼ã
* å¨å°çä½ç½®åæ£çé¨ç½²ä¸ï¼ä¿æè³æå¨å°çä½ç½®ä¸æ¥è¿ä½¿ç¨è
以æ¸å°è¨ªåå»¶é²ï¼ï¼éè¨å¾å¯è½ééç¶²é網路é²è¡ï¼èæ¬å°ç¶²è·¯ç¸æ¯ï¼éè¨é度緩æ
¢ä¸ä¸å¯é ãè¶
ç´è¨ç®æ©é常åè¨å®åçææç¯é»é½é è¿å¨ä¸èµ·ã
妿è¦ä½¿åæ£å¼ç³»çµ±å·¥ä½ï¼å°±å¿
é æ¥åé¨åæ
éçå¯è½æ§ï¼ä¸¦å¨è»é«ä¸å»ºç«å®¹é¯æ©å¶ãæå¥è©±èªªï¼æåéè¦å¾ä¸å¯é çå
ä»¶æ§å»ºä¸åå¯é çç³»çµ±ï¼æ£å¦ â[å¯é æ§](ch1.md#å¯é æ§)â 䏿è¨è«ç飿¨£ï¼æ²æå®ç¾çå¯é æ§ï¼æä»¥æåéè¦çè§£æåå¯ä»¥å¯¦éæ¿è«¾ç極éï¼ã
å³ä½¿å¨åªæå°æ¸ç¯é»çå°å系統ä¸ï¼èæ
®é¨åæ
é乿¯å¾éè¦çãå¨ä¸åå°ç³»çµ±ä¸ï¼å¾å¯è½å¤§é¨åå
ä»¶å¨å¤§é¨åæé齿£å¸¸å·¥ä½ãç¶èï¼é²æ©ææä¸é¨å系統åºç¾æ
éï¼è»é«å¿
é 以æç¨®æ¹å¼èçãæ
éèçå¿
é æ¯è»é«è¨è¨çä¸é¨åï¼ä¸¦ä¸ä½çºè»é«çéç¶ï¼ä½ éè¦ç¥éå¨ç¼çæ
éçæ
æ³ä¸ï¼è»é«å¯è½æè¡¨ç¾åºææ¨£çè¡çºã
ç°¡å®å°åè¨ç¼ºé·å¾ç½è¦ä¸¦å¸æå§çµä¿ææå¥½ççæ³æ¯ä¸ææºçãèæ
®ä¸ç³»åå¯è½çé¯èª¤ï¼çè³æ¯ä¸å¤ªå¯è½çé¯èª¤ï¼ï¼ä¸¦å¨æ¸¬è©¦ç°å¢ä¸äººçºå°å»ºç«éäºæ
æ³ä¾æª¢è¦æç¼çä»éº¼æ¯é常éè¦çãå¨åæ£å¼ç³»çµ±ä¸ï¼æ·çï¼æ²è§ååå·çæ¯å¼å¾çã
> #### å¾ä¸å¯é çå
ä»¶æ§å»ºå¯é ç系統
>
> ä½ å¯è½æ³ç¥é鿝妿æç¾© ââ ç´è§å°çä¾ï¼ç³»çµ±åªè½åå
¶æä¸å¯é çå
ä»¶ï¼æèå¼±çç°ç¯ï¼ä¸æ¨£å¯é ãäºå¯¦ä¸¦é妿¤ï¼äºå¯¦ä¸ï¼å¾ä¸å¤ªå¯é çæ½å¨åºç¤æ§å»ºæ´å¯é ç系統æ¯è¨ç®æ©é åçä¸åå¤èææ³ã11ããä¾å¦ï¼
>
> * ç³¾é¯ç¢¼å
許æ¸åè³æå¨éè¨éé䏿ºç¢ºå³è¼¸ï¼å¶ç¾æåºç¾ä¸äºé¯èª¤ï¼ä¾å¦ç±æ¼ç¡ç·ç¶²è·¯ä¸çç¡ç·é»å¹²æ¾ã12ãã
> * **ç¶²é網路åè°ï¼Internet Protocol, IPï¼** ä¸å¯é ï¼å¯è½ä¸æ£ãå»¶é²ãéè¤æéæè³æå
ãå³è¼¸æ§å¶åè°ï¼Transmission Control Protocol, TCPï¼å¨ç¶²é網路åè°ï¼IPï¼ä¹ä¸æä¾äºæ´å¯é çå³è¼¸å±¤ï¼å®ç¢ºä¿ä¸å¤±çè³æå
è¢«éæ°å³è¼¸ï¼æ¶é¤éè¤ï¼ä¸¦ä¸è³æå
è¢«éæ°çµè£æå®å被å³éçé åºã
>
> éç¶éå系統å¯ä»¥æ¯å®çåºå±¤é¨åæ´å¯é ï¼ä½å®çå¯é æ§ç¸½æ¯æéçãä¾å¦ï¼ç³¾é¯ç¢¼å¯ä»¥èçå°éçå®ä½å
é¯èª¤ï¼ä½æ¯å¦æä½ çè¨èè¢«å¹¹æ¾ææ·¹æ²ï¼é£éº¼ééééå¯ä»¥å¾å°å¤å°è³æï¼æ¯ææ ¹æ¬æ§çéå¶çã13ããTCP å¯ä»¥é±èè³æå
çä¸å¤±ï¼éè¤åéæ°æåºï¼ä½æ¯å®ä¸è½ç¥å¥å°æ¶é¤ç¶²è·¯ä¸çå»¶é²ã
>
> éç¶æ´å¯é çé«é系統並ä¸å®ç¾ï¼ä½å®ä»ç¶æç¨ï¼å çºå®èçäºä¸äºæ£æçä½éé¯èª¤ï¼æä»¥å
¶é¤çé¯èª¤é常æ´å®¹ææ¨çåèçãæåå°å¨ â[è³æåº«ç端å°ç«¯åå](ch12.md#è³æåº«ç端å°ç«¯åå)â ä¸é²ä¸æ¥æ¢è¨éååé¡ã
## ä¸å¯é ç網路
æ£å¦å¨ [第äºé¨å](part-ii.md) çä»ç´¹ä¸æè¨è«ç飿¨£ï¼æå卿¬æ¸ä¸é注ç忣å¼ç³»çµ±æ¯ç¡å
±äº«ç系統ï¼å³éé網路é£ç·çä¸å æ©å¨ã網路æ¯éäºæ©å¨å¯ä»¥éè¨çå¯ä¸éå¾ ââ æååè¨æ¯èºæ©å¨é½æèªå·±çè¨æ¶é«åç£ç¢ï¼ä¸èºæ©å¨ä¸è½è¨ªåå¦ä¸èºæ©å¨çè¨æ¶é«æç£ç¢ï¼é¤äºéé網路å伺æå¨ç¼åºè«æ±ï¼ã
**ç¡å
±äº«** 䏦䏿¯æ§å»ºç³»çµ±çå¯ä¸æ¹å¼ï¼ä½å®å·²ç¶æçºæ§å»ºç¶²é網路æåçä¸»è¦æ¹å¼ï¼å
¶åå å¦ä¸ï¼ç¸å°ä¾¿å®ï¼å çºå®ä¸éè¦ç¹æ®ç硬é«ï¼å¯ä»¥å©ç¨åååçé²è¨ç®æåï¼ééè·¨å¤åå°çåä½çè³æä¸å¿é²è¡åé¤å¯ä»¥å¯¦ç¾é«å¯é æ§ã
ç¶²é網路åè³æä¸å¿ï¼é常æ¯ä¹å¤ªç¶²ï¼ä¸ç大夿¸å
§é¨ç¶²è·¯é½æ¯ **é忥åçµç¶²è·¯ï¼asynchronous packet networksï¼**ãå¨é種網路ä¸ï¼ä¸åç¯é»å¯ä»¥åå¦ä¸åç¯é»ç¼éä¸åè¨æ¯ï¼ä¸åæ¸æå
ï¼ï¼ä½æ¯ç¶²è·¯ä¸è½ä¿èå®ä»éº¼æåå°éï¼æè
æ¯å¦å°éãå¦æä½ å³éè«æ±ä¸¦æå¾
é¿æï¼åå¾å¤äºæ
å¯è½æåºé¯ï¼å
¶ä¸ä¸äºå¦ [å 8-1](../img/fig8-1.png) æç¤ºï¼ï¼
1. è«æ±å¯è½å·²ç¶ä¸å¤±ï¼å¯è½æäººææäºç¶²ç·ï¼ã
2. è«æ±å¯è½æ£å¨æéï¼ç¨å¾å°äº¤ä»ï¼ä¹è¨±ç¶²è·¯ææ¥æ¶æ¹éè¼ï¼ã
3. é 端ç¯é»å¯è½å·²ç¶å¤±æï¼å¯è½æ¯å´©æ½°æéæ©ï¼ã
4. é 端ç¯é»å¯è½æ«æåæ¢äºé¿æï¼å¯è½æéå°é·æéçåå¾åæ¶æ«åï¼è«åé± â[ç¨åºæ«å](#ç¨åºæ«å)âï¼ï¼ä½ç¨å¾æåæ¬¡é¿æã
5. é 端ç¯é»å¯è½å·²ç¶èçäºè«æ±ï¼ä½æ¯ç¶²è·¯ä¸çé¿æå·²ç¶ä¸å¤±ï¼å¯è½æ¯ç¶²è·¯äº¤ææ©é
ç½®é¯èª¤ï¼ã
6. é 端ç¯é»å¯è½å·²ç¶èçäºè«æ±ï¼ä½æ¯é¿æå·²ç¶è¢«å»¶é²ï¼ä¸¦ä¸ç¨å¾å°è¢«å³éï¼å¯è½æ¯ç¶²è·¯æè
ä½ èªå·±çæ©å¨éè¼ï¼ã

**å 8-1 妿å³éè«æ±ä¸¦æ²æå¾å°é¿æï¼åç¡æ³ååï¼aï¼è«æ±æ¯å¦ä¸å¤±ï¼ï¼bï¼é 端ç¯é»æ¯å¦ééï¼æï¼cï¼é¿ææ¯å¦ä¸å¤±ã**
å³éè
çè³ä¸è½åè¾¨è³æå
æ¯å¦è¢«å³éï¼å¯ä¸ç鏿æ¯è®æ¥æ¶è
å³éé¿æè¨æ¯ï¼éå¯è½æä¸å¤±æå»¶é²ãéäºåé¡å¨éåæ¥ç¶²è·¯ä¸é£ä»¥ååï¼ä½ æææçå¯ä¸è³è¨æ¯ï¼ä½ å°æªæ¶å°é¿æãå¦æä½ åå¦ä¸åç¯é»ç¼éè«æ±ä¸¦ä¸æ²ææ¶å°é¿æï¼åä¸å¯è½å¤æ·æ¯ä»éº¼åå ã
èçéååé¡çéå¸¸æ¹æ³æ¯ **è¶
æï¼Timeoutï¼**ï¼å¨ä¸æ®µæéä¹å¾æ¾æ£çå¾
ï¼ä¸¦ä¸èªçºé¿æä¸æå°éã使¯ï¼ç¶ç¼çè¶
ææï¼ä½ ä»ç¶ä¸ç¥éé 端ç¯é»æ¯å¦æ¶å°äºè«æ±ï¼å¦æè«æ±ä»ç¶å¨æåå°æ¹æéï¼é£éº¼å³ä½¿å³éè
å·²ç¶æ¾æ£äºè©²è«æ±ï¼ä»ç¶å¯è½æå°å
¶å³éçµ¦æ¥æ¶è
ï¼ã
### ç實ä¸çç網路æ
é
æåå¹¾åå¹´ä¾ä¸ç´å¨å»ºè¨è¨ç®æ©ç¶²è·¯ ââ æäººå¯è½å¸æç¾å¨æåå·²ç¶æ¾åºäºä½¿ç¶²è·¯è®å¾å¯é çæ¹æ³ã使¯ç¾å¨ä¼¼ä¹éæ²ææåã
æä¸äºç³»çµ±çç ç©¶å大éç軼äºèæè¡¨æï¼å³ä½¿å¨åä¸å®¶å
¬å¸éççè³æä¸å¿é£æ¨£çåæ§ç°å¢ä¸ï¼ç¶²è·¯åé¡ä¹å¯è½åºä¹ææå°æ®éãå¨ä¸å®¶ä¸åè³æä¸å¿é²è¡çä¸é
ç ç©¶ç¼ç¾ï¼æ¯åæå¤§ç´æ 12 å網路æ
éï¼å
¶ä¸ä¸åæ·éä¸èºæ©å¨ï¼ä¸åæ·éæ´åæ©æ¶ã15ããå¦ä¸é
ç 究測éäºæ¶é å¼äº¤ææ©ï¼å¯èäº¤ææ©åè² è¼å¹³è¡¡å¨çå
ä»¶çæ
éçã16ããå®ç¼ç¾æ°å¢åé¤ç¶²è·¯è£ç½®ä¸æåä½ æå¸æç飿¨£æ¸å°æ
éï¼å çºå®ä¸è½é²ç¯äººçºé¯èª¤ï¼ä¾å¦ï¼é¯èª¤é
ç½®çäº¤ææ©ï¼ï¼éæ¯é æä¸æ·ç主è¦åå ã
è«¸å¦ EC2 ä¹é¡çå
¬æäºæåå é »ç¹çæ«æ
網路æ
éèèåæèã14ãï¼ç®¡çè¯å¥½çç§æè³æä¸å¿ç¶²è·¯å¯è½æ¯æ´ç©©å®çç°å¢ãåç®¡å¦æ¤ï¼æ²æäººä¸å網路åé¡çå°æ¾ï¼ä¾å¦ï¼äº¤ææ©è»é«åç´éç¨ä¸çä¸ååé¡å¯è½æå¼ç¼ç¶²è·¯ææ²éæ§ï¼å¨æ¤æéç¶²è·¯è³æå
å¯è½æå»¶é²è¶
éä¸åéã17ããé¯éå¯è½å¬ä½æµ·åºé»çºä¸¦æå£å®å ã18ããå
¶ä»ä»¤äººé©è¨çæ
éå
æ¬ç¶²è·¯ä»é¢æææä¸æ£ææå
¥ç«è³æå
ï¼ä½æ¯æåå³éåºç«è³æå
ã19ãï¼å
å
å çºç¶²è·¯é£çµå¨ä¸åæ¹åä¸å·¥ä½ï¼ä¸¦ä¸è½ä¿èå®ä¹å¨ç¸åçæ¹åå·¥ä½ã
> #### 網路å岿§½
>
> ç¶ç¶²è·¯çä¸é¨åç±æ¼ç¶²è·¯æ
éèè¢«åæ·æï¼ææç¨±çº **網路å岿§½ï¼network partitionï¼** æ **網路æ·è£ï¼netsplitï¼**ã卿¬æ¸ä¸ï¼æåé常æå
æä½¿ç¨æ´ä¸è¬çè¡èª **網路æ
éï¼network faultï¼**ï¼ä»¥é¿å
è [第å
ç« ](ch6.md) è¨è«çå²å系統çå岿§½ï¼åçï¼ç¸æ··æ·ã
å³ä½¿ç¶²è·¯æ
éå¨ä½ çç°å¢ä¸é常ç½è¦ï¼æ
éå¯è½ç¼ççäºå¯¦ï¼æå³èä½ çè»é«éè¦è½å¤ èçå®åãç¡è«ä½æéé網路é²è¡éè¨ï¼é½å¯è½æå¤±æï¼éæ¯ç¡æ³é¿å
çã
å¦æç¶²è·¯æ
éçé¯èª¤èçæ²æå®ç¾©èæ¸¬è©¦ï¼æ¦æ·å°è¬ï¼å種é¯èª¤å¯è½é½æç¼çï¼ä¾å¦ï¼å³ä½¿ç¶²è·¯æ¢å¾©ã20ãï¼å¢éå¯è½æç¼ç **æ»é**ï¼æ°¸ä¹
ç¡æ³çºè«æ±æä¾æåï¼çè³å¯è½æåªé¤ææçè³æã21ãã妿è»é«è¢«ç½®æ¼ææä¹å¤çæ
æ³ä¸ï¼å®å¯è½æååºåºä¹ææçäºæ
ã
èç網路æ
é䏦䏿å³è容å¿å®åï¼å¦æä½ ç網路é常æ¯ç¸ç¶å¯é çï¼ä¸åææçæ¹æ³å¯è½æ¯ç¶ä½ ç網路éå°å顿ï¼ç°¡å®å°åç¨æ¶é¡¯ç¤ºä¸æ¢é¯èª¤è³è¨ã使¯ï¼ä½ 確實éè¦ç¥éä½ çè»é«å¦ä½æå°ç¶²è·¯åé¡ï¼ä¸¦ç¢ºä¿ç³»çµ±è½å¤ å¾ä¸æ¢å¾©ãææèå°è§¸ç¼ç¶²è·¯åé¡ä¸¦æ¸¬è©¦ç³»çµ±é¿æï¼éæ¯ Chaos Monkey èå¾çæ³æ³ï¼è«åé± â[å¯é æ§](ch1.md#å¯é æ§)âï¼ã
### 檢測æ
é
許å¤ç³»çµ±éè¦èªå檢測æ
éç¯é»ãä¾å¦ï¼
* è² è¼å¹³è¡¡å¨éè¦åæ¢åå·²æ»äº¡çç¯é»è½ç¼è«æ±ï¼å¾è¼ªè©¢å表移åºï¼å³ out of rotationï¼ã
* å¨å®ä¸»è¤è£½åè½ç忣å¼è³æåº«ä¸ï¼å¦æä¸»åº«å¤±æï¼åéè¦å°å¾åº«ä¹ä¸åç´çºæ°ä¸»åº«ï¼è«åé± â[èçç¯é»å®æ©](ch5.md#èçç¯é»å®æ©)âï¼ã
ä¸å¹¸çæ¯ï¼ç¶²è·¯çä¸ç¢ºå®æ§ä½¿å¾å¾é£å¤æ·ä¸åç¯é»æ¯å¦å·¥ä½ã卿äºç¹å®çæ
æ³ä¸ï¼ä½ å¯è½ææ¶å°ä¸äºåé¥è³è¨ï¼æç¢ºåè¨´ä½ æäºäºæ
æ²ææåï¼
* å¦æä½ å¯ä»¥é£ç·å°å·è¡ç¯é»çæ©å¨ï¼ä½æ²æç¨åºæ£å¨åµè½ç®æ¨å ï¼ä¾å¦ï¼å çºç¨åºå´©æ½°ï¼ï¼ä½æ¥ç³»çµ±å°ééå³é FIN æ RST ä¾éé並éç¨ TCP é£ç·ã使¯ï¼å¦æç¯é»å¨èçè«æ±æç¼çå´©æ½°ï¼åç¡æ³ç¥éé 端ç¯é»å¯¦éèçäºå¤å°è³æã22ãã
* 妿ç¯é»ç¨åºå´©æ½°ï¼æè¢«ç®¡ç塿®ºæ»ï¼ï¼ä½ç¯é»ç使¥ç³»çµ±ä»å¨å·è¡ï¼åæä»¤ç¢¼å¯ä»¥éç¥å
¶ä»ç¯é»æé該崩潰çè³è¨ï¼ä»¥ä¾¿å¦ä¸åç¯é»å¯ä»¥å¿«éæ¥ç®¡ï¼èç¡éçå¾
è¶
æå°æãä¾å¦ï¼HBase å°±æ¯é麼åçã23ãã
* å¦æä½ ææ¬è¨ªåè³æä¸å¿ç¶²è·¯äº¤ææ©ç管çä»é¢ï¼åå¯ä»¥ééå®å檢測硬é«ç´å¥çéè·¯æ
éï¼ä¾å¦ï¼é 端æ©å¨æ¯å¦éé黿ºï¼ãå¦æä½ ééç¶²é網路é£ç·ï¼æè
å¦æä½ èæ¼å
±äº«è³æä¸å¿èç¡æ³è¨ªåäº¤ææ©ï¼æè
ç±æ¼ç¶²è·¯åé¡èç¡æ³è¨ªå管çä»é¢ï¼åæé¤æ¤é¸é
ã
* å¦æè·¯ç±å¨ç¢ºèªä½ å試é£ç·ç IP å°åä¸å¯ç¨ï¼åå¯è½æä½¿ç¨ ICMP ç®æ¨ä¸å¯éè³æå
åè¦ä½ ã使¯ï¼è·¯ç±å¨ä¸å
·åç¥å¥çæ
éæª¢æ¸¬è½å ââ å®åå°è網路å
¶ä»åèè
ç¸åçéå¶ã
éæ¼é 端ç¯é»ééçå¿«éåé¥å¾æç¨ï¼ä½æ¯ä½ ä¸è½ææå®ãå³ä½¿ TCP 確èªå·²ç¶å³éäºä¸åæ¸æå
ï¼æç¨ç¨å¼å¨èçä¹åå¯è½å·²ç¶å´©æ½°ãå¦æä½ æ³ç¢ºä¿ä¸åè«æ±æ¯æåçï¼ä½ éè¦æç¨ç¨å¼æ¬èº«çæ£ç¢ºé¿æã24ãã
ç¸åï¼å¦æåºäºä»éº¼åé¡ï¼ä½ å¯è½æå¨å ççæå層次ä¸å¾å°ä¸åé¯èª¤é¿æï¼ä½ç¸½çä¾èªªï¼ä½ å¿
é åè¨ä½ å¯è½æ ¹æ¬å°±å¾ä¸å°ä»»ä½åæãä½ å¯ä»¥é試幾次ï¼TCP é試æ¯éæçï¼ä½æ¯ä½ ä¹å¯ä»¥å¨æç¨ç¨å¼ç´å¥é試ï¼ï¼çå¾
è¶
æéæï¼ä¸¦ä¸å¦æå¨è¶
ææéå
§æ²ææ¶å°é¿æï¼åæçµå®£åç¯é»å·²ç¶æ»äº¡ã
### è¶
æèç¡çª®çå»¶é²
妿è¶
ææ¯æª¢æ¸¬æ
éçå¯ä¸å¯é æ¹æ³ï¼é£éº¼è¶
ææè©²çå¾
å¤ä¹
ï¼ä¸å¹¸çæ¯æ²æç°¡å®ççæ¡ã
é·æéçè¶
ææå³èé·æéçå¾
ï¼ç´å°ä¸åç¯é»è¢«å®£åæ»äº¡ï¼å¨é段æéå
§ï¼ä½¿ç¨è
å¯è½ä¸å¾ä¸çå¾
ï¼æè
çå°é¯èª¤è³è¨ï¼ãççè¶
æå¯ä»¥æ´å¿«å°æª¢æ¸¬å°æ
éï¼ä½ææ´é«å°é¢¨éªèª¤å°ä¸åç¯é»å®£ä½çºå¤±æï¼è該ç¯é»å¯¦éä¸åªæ¯æ«æå°è®æ
¢äºï¼ä¾å¦ç±æ¼ç¯é»æç¶²è·¯ä¸çè² è¼å³°å¼ï¼ã
éæ©å°å®£åä¸åç¯é»å·²ç¶æ»äºæ¯æåé¡çï¼å¦æéåç¯é»å¯¦é䏿¯æ´»èçï¼ä¸¦ä¸æ£å¨å·è¡ä¸äºåä½ï¼ä¾å¦ï¼å³éä¸å°é»åéµä»¶ï¼ï¼èå¦ä¸åç¯é»æ¥ç®¡ï¼é£éº¼éååä½å¯è½ææçµå·è¡å
©æ¬¡ãæåå°å¨ â[ç¥èãçç¸èè¬è¨](#ç¥èãçç¸èè¬è¨)â 以å [第ä¹ç« ](ch9.md) å [第åä¸ç« ](ch11.md) 䏿´è©³ç´°å°è¨è«éååé¡ã
ç¶ä¸åç¯é»è¢«å®£åæ»äº¡æï¼å®çè·è²¬éè¦è½ç§»å°å
¶ä»ç¯é»ï¼éæçµ¦å
¶ä»ç¯é»å網路帶ä¾é¡å¤çè² æãå¦æç³»çµ±å·²ç¶èæ¼é«è² è·çæ
ï¼å鿩宣åç¯é»æ»äº¡æä½¿å顿´å´éãç¹å¥æ¯å¦æç¯é»å¯¦é䏿²ææ»äº¡ï¼åªæ¯ç±æ¼éè¼å°è´å
¶é¿æç·©æ
¢ï¼éæå°å
¶è² è¼è½ç§»å°å
¶ä»ç¯é»å¯è½æå°è´ **ç´è¯å¤±æ**ï¼å³ cascading failureï¼è¡¨ç¤ºå¨æ¥µç«¯æ
æ³ä¸ï¼ææç¯é»é½å®£åå°æ¹æ»äº¡ï¼ææç¯é»é½å°åæ¢å·¥ä½ï¼ã
è¨æ³ä¸åèæ§ç系統ï¼å
¶ç¶²è·¯å¯ä»¥ä¿èè³æå
çæå¤§å»¶é² ââ æ¯åè³æå
è¦éº¼å¨ä¸æ®µæéå
§å³éï¼è¦éº¼ä¸å¤±ï¼ä½æ¯å³éæ°¸é ä¸ææ¯ $d$ æ´é·ãæ¤å¤ï¼åè¨ä½ å¯ä»¥ä¿èä¸åéæ
éç¯é»ç¸½æ¯å¨ä¸æ®µæé $r$ å
§èçä¸åè«æ±ãå¨é種æ
æ³ä¸ï¼ä½ å¯ä»¥ä¿èæ¯åæåçè«æ±å¨ $2d + r$ æéå
§é½è½æ¶å°é¿æï¼å¦æä½ 卿¤æéå
§æ²ææ¶å°é¿æï¼åç¥é網路æé 端ç¯é»ä¸å·¥ä½ã妿鿝æç«çï¼$2d + r$ ææ¯ä¸ååççè¶
æè¨å®ã
ä¸å¹¸çæ¯ï¼æåæä½¿ç¨ç大夿¸ç³»çµ±é½æ²æéäºä¿èï¼éåæ¥ç¶²è·¯å
·æç¡éçå»¶é²ï¼å³åå¯è½å¿«å°å³éè³æå
ï¼ä½è³æå
å°éå¯è½éè¦çæéæ²æä¸éï¼ï¼ä¸¦ä¸å¤§å¤æ¸ä¼ºæå¨å¯¦ç¾ä¸¦ä¸è½ä¿èå®åå¯ä»¥å¨ä¸å®çæå¤§æéå
§èçè«æ±ï¼è«åé± â[é¿ææéä¿è](#é¿ææéä¿è)âï¼ãå°æ¼æ
éæª¢æ¸¬ï¼å³ä½¿ç³»çµ±å¤§é¨åæéå¿«éå·è¡ä¹æ¯ä¸å¤ çï¼å¦æä½ çè¶
ææéå¾çï¼å¾è¿æéåªéè¦ä¸åç¬æå°å³°å°±å¯ä»¥ä½¿ç³»çµ±å¤±è¡¡ã
#### 網路æå¡åæé
å¨é§é§æ±½è»æï¼ç±æ¼äº¤éæå µï¼é路交é網路çéè¡æéå¾å¾ä¸ç¡ç¸åã忍£ï¼è¨ç®æ©ç¶²è·¯ä¸è³æå
å»¶é²çå¯è®æ§é常æ¯ç±æ¼æéã25ãï¼
* 妿å¤åä¸åçç¯é»åæå試å°è³æå
å³éå°åä¸ç®çå°ï¼åç¶²è·¯äº¤ææ©å¿
é å°å®åæé並å°å®åéåéå
¥ç®æ¨ç¶²è·¯éè·¯ï¼å¦ [å 8-2](../img/fig8-2.png) æç¤ºï¼ãå¨ç¹å¿ç網路éè·¯ä¸ï¼è³æå
å¯è½éè¦çå¾
䏿®µæéæè½ç²å¾ä¸åææ§½ï¼é稱çºç¶²è·¯æå¡ï¼ã妿å³å
¥çè³æå¤ªå¤ï¼äº¤ææ©ä½å填滿ï¼è³æå
å°è¢«ä¸æ£ï¼å æ¤éè¦éæ°ç¼éè³æå
- å³ä½¿ç¶²è·¯å·è¡è¯å¥½ã
* ç¶è³æå
å°éç®æ¨æ©å¨æï¼å¦æææ CPU æ ¸å¿ç¶åé½èæ¼ç¹å¿çæ
ï¼åä¾èªç¶²è·¯çå³å
¥è«æ±å°è¢«ä½æ¥ç³»çµ±æéï¼ç´å°æç¨ç¨å¼æºå好èçå®çºæ¢ãæ ¹ææ©å¨ä¸çè² è¼ï¼éå¯è½éè¦ä¸æ®µä»»æçæéã
* å¨èæ¬åç°å¢ä¸ï¼æ£å¨å·è¡ç使¥ç³»çµ±ç¶å¸¸æ«å幾忝«ç§ï¼å çºå¦ä¸åèæ¬æ©å¨æ£å¨ä½¿ç¨ CPU æ ¸å¿ãå¨é段æéå
§ï¼èæ¬æ©å¨ä¸è½å¾ç¶²è·¯ä¸æ¶èä»»ä½è³æï¼æä»¥å³å
¥çè³æè¢«èæ¬æ©å¨ç£è¦å¨ ã26ãæéï¼ç·©è¡ï¼ï¼é²ä¸æ¥å¢å äºç¶²è·¯å»¶é²çå¯è®æ§ã
* TCP å·è¡ **æµéæ§å¶**ï¼flow controlï¼ä¹ç¨±çº **æå¡é¿å
**ï¼å³ congestion avoidanceï¼æ **èå£**ï¼å³ backpressureï¼ï¼å
¶ä¸ç¯é»æéå¶èªå·±çå³ééç以é¿å
網路éè·¯ææ¥æ¶ç¯é»éè¼ã27ããéæå³èçè³å¨è³æé²å
¥ç¶²è·¯ä¹åï¼å¨å³éè
èå°±éè¦é²è¡é¡å¤çæéã

**å 8-2 妿æå¤èºæ©å¨å°ç¶²è·¯æµéå³éå°åä¸ç®çå°ï¼åå
¶äº¤ææ©ä½åå¯è½æè¢«å¡«æ»¿ãå¨é裡ï¼å 1,2 å 4 é½è©¦åå³éè³æå
å°å 3**
èä¸ï¼å¦æ TCP 卿åè¶
ææéå
§æ²æè¢«ç¢ºèªï¼éæ¯æ ¹æè§å¯çå¾è¿æéè¨ç®çï¼ï¼åèªçºè³æå
ä¸å¤±ï¼ä¸å¤±çè³æå
å°èªåéæ°ç¼éãå管æç¨ç¨å¼æ²æçå°è³æå
ä¸å¤±åéæ°å³è¼¸ï¼ä½å®çå°äºå»¶é²ï¼çå¾
è¶
æå°æï¼ç¶å¾çå¾
éæ°å³è¼¸çè³æå
å¾å°ç¢ºèªï¼ã
> #### TCPèUDP
>
> ä¸äºå°å»¶é²ææçæç¨ç¨å¼ï¼æ¯å¦è¦è¨æè°å IP èªé³ï¼VoIPï¼ï¼ä½¿ç¨äº UDP è䏿¯ TCPã鿝å¨å¯é æ§ååå»¶é²è®åä¹éçæè¡·ï¼ç±æ¼ UDP ä¸å·è¡æµéæ§å¶ä¸¦ä¸ä¸éå³ä¸å¤±çåçµï¼æä»¥é¿å
äºç¶²è·¯å»¶é²è®åçä¸äºåå ï¼å管å®ä»ç¶æååæä½ååæç¨å»¶é²çå½±é¿ï¼ã
>
> å¨å»¶é²è³ææ¯«ç¡å¹å¼çæ
æ³ä¸ï¼UDP æ¯ä¸åä¸é¯ç鏿ãä¾å¦ï¼å¨ VoIP é»è©±å¼å«ä¸ï¼å¯è½æ²æè¶³å¤ çæééæ°ç¼éä¸å¤±çè³æå
ï¼ä¸¦å¨æè²å¨ä¸ææ¾è³æãå¨é種æ
æ³ä¸ï¼éç¼è³æå
æ²ææç¾© ââ æç¨ç¨å¼å¿
é 使ç¨éé³å¡«å
ä¸å¤±è³æå
çæéï¼å°è´è²é³çæ«ä¸æ·ï¼ï¼ç¶å¾å¨è³ææµä¸ç¹¼çºãé試ç¼çå¨äººé¡å±¤ï¼âä½ è½å說ä¸éåï¼è²é³ååæ·äºä¸æå
ãâï¼ã
ææéäºå ç´ é½æé æç¶²è·¯å»¶é²çè®åãç¶ç³»çµ±æ¥è¿å
¶æå¤§å®¹éæï¼æéå»¶é²çè®åç¯åç¹å¥å¤§ï¼ææè¶³å¤ åç¨å®¹éç系統å¯ä»¥è¼é¬æç©ºä½åï¼èå¨é«å©ç¨çç系統ä¸ï¼å¾å¿«å°±è½ç©ç´¯å¾é·çä½åã
å¨å
Œ
±é²åå¤ç§æ¶è³æä¸å¿ä¸ï¼è³æºè¢«è¨±å¤å®¢æ¶å
±äº«ï¼ç¶²è·¯é£çµåäº¤ææ©ï¼çè³æ¯åæ©å¨ç網絡å¡å CPUï¼å¨èæ¬æ©å¨ä¸å·è¡æï¼ãæ¹èçå·¥ä½è² è¼ï¼å¦ MapReduceï¼è«åé± [第åç« ](ch10.md)ï¼è½å¤ å¾å®¹æä½¿ç¶²è·¯é£çµé£½åãç±æ¼ç¡æ³æ§å¶æçè§£å
¶ä»å®¢æ¶å°å
±äº«è³æºçä½¿ç¨æ
æ³ï¼å¦æéè¿çæå人ï¼åéçé°å±
ï¼æ£å¨ä½¿ç¨å¤§éè³æºï¼å網路延é²å¯è½æç¼çåçè®åã28,29ãã
å¨é種ç°å¢ä¸ï¼ä½ åªè½éé坦驿¹å¼é¸æè¶
æï¼å¨ä¸æ®µè¼é·çææå
§ãå¨å¤èºæ©å¨ä¸æ¸¬é網路å¾è¿æéçåä½ï¼ä»¥ç¢ºå®å»¶é²çé æè®åãç¶å¾ï¼èæ
®å°æç¨ç¨å¼çç¹æ§ï¼å¯ä»¥ç¢ºå® **æ
éæª¢æ¸¬å»¶é²** è **éæ©è¶
æé¢¨éª** ä¹éçé©ç¶æè¡·ã
æ´å¥½çä¸ç¨®åæ³æ¯ï¼ç³»çµ±ä¸æ¯ä½¿ç¨é
ç½®ç常éè¶
ææéï¼èæ¯é£çºæ¸¬éé¿ææéåå
¶è®åï¼æåï¼ï¼ä¸¦æ ¹æè§å¯å°çé¿ææéåä½èªå調æ´è¶
ææéãéå¯ä»¥éé Phi Accrual æ
éæª¢æ¸¬å¨ã30ãä¾å®æï¼è©²æª¢æ¸¬å¨å¨ä¾å¦ Akka å Cassandra ã31ãä¸ä½¿ç¨ãTCP çè¶
æé峿©å¶ä¹æ¯ä»¥é¡ä¼¼çæ¹å¼å·¥ä½ã27ãã
### åæ¥ç¶²è·¯èéåæ¥ç¶²è·¯
妿æåå¯ä»¥ä¾é 網路ä¾å³éä¸äº **æå¤§å»¶é²åºå®** çè³æå
ï¼è䏿¯ä¸æ£è³æå
ï¼é£éº¼åæ£å¼ç³»çµ±å°±æç°¡å®å¾å¤ãçºä»éº¼æåä¸è½å¨ç¡¬é«å±¤é¢ä¸è§£æ±ºéååé¡ï¼ä½¿ç¶²è·¯å¯é ï¼ä½¿è»é«ä¸å¿
æå¿å¢ï¼
çºäºåçéååé¡ï¼å°è³æä¸å¿ç¶²è·¯èé常å¯é çå³çµ±åºå®é»è©±ç¶²è·¯ï¼éè窩ï¼é VoIPï¼é²è¡æ¯è¼æ¯å¾æè¶£çï¼å»¶é²é³è¨å¹åæè©±æ¯é常ç½è¦çãä¸åé»è©±éè¦ä¸åå¾ä½ç端å°ç«¯å»¶é²ï¼ä»¥åè¶³å¤ çé »å¯¬ä¾å³è¼¸ä½ è²é³çé³è¨åæ¨£è³æãå¨è¨ç®æ©ç¶²è·¯ä¸æé¡ä¼¼çå¯é æ§åå¯é 測æ§ä¸æ¯å¾å¥½åï¼
ç¶ä½ ééé»è©±ç¶²è·¯æ¥æé»è©±æï¼å®æå»ºç«ä¸åé»è·¯ï¼å¨å
©åå¼å«è
ä¹éçæ´åè·¯ç·ä¸çºå¼å«åé
ä¸ååºå®çï¼æä¿èçé »å¯¬éãéåé»è·¯æä¿æè³éè©±çµæã32ããä¾å¦ï¼ISDN 網路以æ¯ç§ 4000 å¹çåºå®éçå·è¡ãå¼å«å»ºç«æï¼æ¯åå¹å
§ï¼æ¯åæ¹åï¼åé
16 ä½ç©ºéãå æ¤ï¼å¨é話æéï¼æ¯ä¸æ¹é½ä¿èè½å¤ æ¯ 250 å¾®ç§å³éä¸å精確ç 16 ä½é³è¨è³æã33,34ãã
é種網路æ¯åæ¥çï¼å³ä½¿è³æç¶éå¤åè·¯ç±å¨ï¼ä¹ä¸æåå°æéçå½±é¿ï¼å çºå¼å«ç 16 ä½ç©ºéå·²ç¶å¨ç¶²è·¯çä¸ä¸è·³ä¸ä¿çäºä¸ä¾ãèä¸ç±æ¼æ²ææéï¼ç¶²è·¯çæå¤§ç«¯å°ç«¯å»¶é²æ¯åºå®çãæå稱ä¹çº **æéå»¶é²ï¼bounded delayï¼**ã
#### æåä¸è½ç°¡å®å°ä½¿ç¶²è·¯å»¶é²å¯é 測åï¼
è«æ³¨æï¼é»è©±ç¶²è·¯ä¸çé»è·¯è TCP é£ç·æå¾å¤§ä¸åï¼é»è·¯æ¯åºå®æ¸éçé çé »å¯¬ï¼å¨é»è·¯å»ºç«ææ²æå
¶ä»äººå¯ä»¥ä½¿ç¨ï¼è TCP é£ç·çè³æå
**æ©ææ§å°** 使ç¨ä»»ä½å¯ç¨çç¶²è·¯é »å¯¬ãä½ å¯ä»¥çµ¦ TCP ä¸åå¯è®å¤§å°çè³æå¡ï¼ä¾å¦ï¼ä¸åé»åéµä»¶æä¸åç¶²é ï¼ï¼å®æç¡å¯è½å¨æççæéå
§å³è¼¸å®ãTCP é£ç·ç©ºéæï¼ä¸ä½¿ç¨ä»»ä½é »å¯¬ [^ii]ã
[^ii]: é¤äºå¶ç¾ç keepalive è³æå
ï¼å¦æ TCP keepalive 被åç¨ã
å¦æè³æä¸å¿ç¶²è·¯åç¶²é網路æ¯é»è·¯äº¤æç¶²è·¯ï¼é£éº¼å¨å»ºç«é»è·¯æå°±å¯ä»¥å»ºç«ä¸ååä¿èçæå¤§å¾è¿æéã使¯ï¼å®å並ä¸è½é樣ï¼ä¹å¤ªç¶²å IP æ¯ **åçµäº¤æåè°**ï¼ä¸å¾ä¸å¿åæéçæç£¨åå æ¤å°è´ç網路ç¡éå»¶é²ï¼éäºåè°æ²æé»è·¯çæ¦å¿µã
çºä»éº¼è³æä¸å¿ç¶²è·¯åç¶²é網路使ç¨åçµäº¤æï¼çæ¡æ¯ï¼å®åéå° **çªç¼æµéï¼bursty trafficï¼** é²è¡äºæä½³åãä¸åé»è·¯é©ç¨æ¼é³è¨æè¦è¨é話ï¼å¨é話æééè¦æ¯ç§å³éç¸ç¶æ¸éçä½å
ãå¦ä¸æ¹é¢ï¼è«æ±ç¶²é ï¼å³éé»åéµä»¶æå³è¼¸æªæ¡æ²æä»»ä½ç¹å®çé »å¯¬è¦æ± ââ æååªæ¯å¸æå®åå¿«å®æã
妿æ³ééé»è·¯å³è¼¸æªæ¡ï¼ä½ å¾é 測ä¸åé »å¯¬åé
ãå¦æä½ çç太ä½ï¼å³è¼¸é度æä¸å¿
è¦ç太æ
¢ï¼å°è´ç¶²è·¯å®¹ééç½®ãå¦æä½ çç太é«ï¼é»è·¯å°±ç¡æ³å»ºç«ï¼å çºå¦æç¡æ³ä¿èå
¶é »å¯¬åé
ï¼ç¶²è·¯ä¸è½å»ºç«é»è·¯ï¼ãå æ¤ï¼å°é»è·¯ç¨æ¼çªç¼è³æå³è¼¸ææµªè²»ç¶²è·¯å®¹éï¼ä¸¦ä¸ä½¿å³è¼¸ä¸å¿
è¦å°ç·©æ
¢ãç¸æ¯ä¹ä¸ï¼TCP åæ
調æ´è³æå³è¼¸éç以驿å¯ç¨ç網路容éã
å·²ç¶æä¸äºå試å»å»ºç«åææ¯æ´é»è·¯äº¤æååçµäº¤æçæ··åç¶²è·¯ï¼æ¯å¦ ATM [^iii]ãInfiniBand æä¸äºç¸ä¼¼ä¹èã35ãï¼å®å¨é路層實ç¾äºç«¯å°ç«¯çæµéæ§å¶ï¼å¾èæ¸å°äºå¨ç¶²è·¯ä¸æéçéè¦ï¼å管å®ä»ç¶å¯è½å éè·¯æå¡èåå°å»¶é²ã36ããééä»ç´°ä½¿ç¨ **æå質é**ï¼quality of serviceï¼å³ QoSï¼è³æå
çåªå
é åºåæç¨ï¼å **åå
¥æ§å¶**ï¼admission controlï¼ééå³éå¨ï¼ï¼å¯ä»¥å¨åçµç¶²è·¯ä¸é¡æ¯é»è·¯äº¤æï¼ææä¾çµ±è¨ä¸ç **æéå»¶é²**ã25,32ãã
[^iii]: **é忥å³è¼¸æ¨¡å¼ï¼Asynchronous Transfer Mode, ATMï¼** å¨ 20 ä¸ç´ 80 年代æ¯ä¹å¤ªç¶²çç«¶çå°æã32ãï¼ä½å¨é»è©±ç¶²æ ¸å¿äº¤ææ©ä¹å¤ä¸¦æ²æå¾å°å¤ªå¤çæ¡ç¨ãå®èèªåæ«å¡æ©ï¼ä¹ç¨±çºèªå忬¾æ©ï¼ç¡éï¼å管å
±ç¨ä¸å縮寫è©ãæè¨±ï¼å¨ä¸äºå¹³è¡çä¸ç裡ï¼ç¶²é網路æ¯åºæ¼å ATM 鿍£çæ±è¥¿ï¼å æ¤å®åçç¶²é網路è¦è¨é話å¯è½æ¯æåçæ´å¯é ï¼å çºå®å䏿éåå
çä¸å¤±åå»¶é²ã
使¯ï¼ç®åå¨å¤ç§æ¶è³æä¸å¿åå
Œ
±é²æééç¶²é網路 [^iv] é²è¡éè¨æï¼æ¤é¡æå質éå°æªåç¨ãç¶åé¨ç½²çæè¡ä¸å
許æåå°ç¶²è·¯ç延鲿å¯é æ§ä½åºä»»ä½ä¿èï¼æåå¿
é åè¨ç¶²è·¯æå¡ï¼æéåç¡éçå»¶é²ç¸½æ¯æç¼çãå æ¤ï¼è¶
ææéæ²æ âæ£ç¢ºâ çå¼ ââ å®éè¦éé實é©ä¾ç¢ºå®ã
[^iv]: ç¶²é網路æåæä¾åä¹éçå°çåè°åéé **BGP ééå¨åè°ï¼BGPï¼** 建ç«çè·¯ç±ï¼è IP åè°ç¸æ¯ï¼æ´æ¥è¿æ¼é»è·¯äº¤æãå¨éåç´å¥ä¸ï¼å¯ä»¥è³¼è²·å°ç¨é »å¯¬ã使¯ï¼ç¶²é網路路ç±å¨ç¶²è·¯ç´å¥å·è¡ï¼è䏿¯ä¸»æ©ä¹éçå®ç¨é£ç·ï¼èä¸å·è¡æéè¦é·å¾å¤ã
> ### å»¶é²åè³æºå©ç¨
>
> æ´ä¸è¬å°èªªï¼å¯ä»¥å° **å»¶é²è®å** è¦çº **åæ
è³æºå岿§½** ççµæã
>
> åè¨å
©èºé»è©±äº¤ææ©ä¹éæä¸æ¢ç·è·¯ï¼å¯ä»¥åæé²è¡ 10,000 åå¼å«ãé鿤ç·è·¯åæçæ¯åé»è·¯é½ä½ç¨å
¶ä¸ä¸åå¼å«ææ§½ãå æ¤ï¼ä½ å¯ä»¥å°ç·è·¯è¦çºå¯ç±å¤é 10,000 åä½µç¼ä½¿ç¨è
å
±äº«çè³æºãè³æºä»¥éæ
æ¹å¼åé
ï¼å³ä½¿ä½ ç¾å¨æ¯ç·è·¯ä¸å¯ä¸çå¼å«ï¼ä¸¦ä¸ææå
¶ä» 9,999 åææ§½é½æªä½¿ç¨ï¼ä½ çé»è·¯ä»å°åé
èç·è·¯å
åå©ç¨æç¸åçåºå®æ¸éçé »å¯¬ã
>
> ç¸æ¯ä¹ä¸ï¼ç¶²é網路åæ
åäº«ç¶²è·¯é »å¯¬ãå³éè
äºç¸æ¨æ åç奪ï¼ä»¥è®ä»åçè³æå
åå¯è½å¿«å°éé網路ï¼ä¸¦ä¸ç¶²è·¯äº¤ææ©æ±ºå®å¾ä¸åæå»å°å¦ä¸åæå»å³éåªååçµï¼å³ï¼é »å¯¬åé
ï¼ãéç¨®æ¹æ³ææéç缺é»ï¼ä½å
¶åªé»æ¯å®æå¤§é度å°å©ç¨äºç·è·¯ãç·è·¯åºå®ææ¬ï¼æä»¥å¦æä½ æ´å¥½å°å©ç¨å®ï¼ä½ ééç·è·¯å³éçæ¯åä½å
çµé½ææ´ä¾¿å®ã
>
> CPU 乿åºç¾é¡ä¼¼çæ
æ³ï¼å¦æä½ å¨å¤åå·è¡ç·éåæ
å
±äº«æ¯å CPU æ ¸å¿ï¼åä¸åå·è¡ç·ææå¿
é å¨ä½æ¥ç³»çµ±çå·è¡ä½å裡çå¾
ï¼èå¦ä¸åå·è¡ç·æ£å¨å·è¡ï¼é樣æ¯åå·è¡ç·é½æå¯è½è¢«æ«åä¸åä¸å®çæéé·åº¦ã使¯ï¼èçºæ¯åå·è¡ç·åé
éæ
æ¸éç CPU é±æç¸æ¯ï¼éææ´å¥½å°å©ç¨ç¡¬é«ï¼è«åé± â[é¿ææéä¿è](#é¿ææéä¿è)âï¼ãæ´å¥½ç硬é«å©ç¨ç乿¯ä½¿ç¨èæ¬æ©å¨çéè¦åæ©ã
>
> å¦æè³æºæ¯éæ
å岿§½çï¼ä¾å¦ï¼å°ç¨ç¡¬é«åå°ç¨é »å¯¬åé
ï¼ï¼å卿äºç°å¢ä¸å¯ä»¥å¯¦ç¾ **å»¶é²ä¿è**ã使¯ï¼éæ¯ä»¥éä½å©ç¨ççºä»£å¹ç ââ æå¥è©±èªªï¼å®æ¯æ´æè²´çãå¦ä¸æ¹é¢ï¼åæ
è³æºåé
çå¤ç§æ¶æä¾äºæ´å¥½çå©ç¨çï¼æä»¥å®æ´ä¾¿å®ï¼ä½å®å
·æå¯è®å»¶é²ç缺é»ã
>
> 網路ä¸çå¯è®å»¶é²ä¸æ¯ä¸ç¨®èªç¶è¦å¾ï¼èåªæ¯ææ¬ / æ¶çæ¬è¡¡ççµæã
## ä¸å¯é çæé
æéåæéå¾éè¦ãæç¨ç¨å¼ä»¥å種æ¹å¼ä¾è³´æ¼æéä¾åç以ä¸åé¡ï¼
1. éåè«æ±æ¯å¦è¶
æäºï¼
2. éé
æåç第 99 ç¾åä½é¿ææéæ¯å¤å°ï¼
3. å¨éå»äºåéå
§ï¼è©²æå平忝ç§èçå¤å°åæ¥è©¢ï¼
4. 使ç¨è
卿åçç¶²ç«ä¸è±äºå¤é·æéï¼
5. éç¯æç« å¨ä½æéåºï¼
6. å¨ä»éº¼æéå³éæééµä»¶ï¼
7. éåå¿«åæ¢ç®ä½æå°æï¼
8. æ¥èªæªæ¡ä¸æ¤é¯èª¤è¨æ¯çæéæ³æ¯ä»éº¼ï¼
[ä¾ 1-4](ch1.md) 測éäº **æçºæé**ï¼durationsï¼ä¾å¦ï¼è«æ±å³éèé¿ææ¥æ¶ä¹éçæéééï¼ï¼è [ä¾ 5-8](ch5.md) æè¿°äº **æéé»**ï¼point in timeï¼å¨ç¹å®æ¥æååç¹å®æéç¼ççäºä»¶ï¼ã
å¨åæ£å¼ç³»çµ±ä¸ï¼æéæ¯ä¸ä»¶æ£æçäºæ
ï¼å çºéè¨ä¸æ¯å³æçï¼è¨æ¯éé網路å¾ä¸èºæ©å¨å³éå°å¦ä¸èºæ©å¨éè¦æéãæ¶å°è¨æ¯çæéç¸½æ¯ææ¼å³éçæéï¼ä½æ¯ç±æ¼ç¶²è·¯ä¸çå¯è®å»¶é²ï¼æåä¸ç¥éæäºå¤å°æéãéåäºå¯¦å°è´ææå¾é£ç¢ºå®å¨æ¶åå¤èºæ©å¨æç¼çäºæ
çé åºã
èä¸ï¼ç¶²è·¯ä¸çæ¯èºæ©å¨é½æèªå·±çæéï¼éæ¯ä¸å實éç硬é«è£ç½®ï¼é常æ¯ç³è±æ¶é«æ¯çªå¨ãéäºè£ç½®ä¸æ¯å®å
¨æºç¢ºçï¼æä»¥æ¯èºæ©å¨é½æèªå·±çæéæ¦å¿µï¼å¯è½æ¯å
¶ä»æ©å¨ç¨å¿«ææ´æ
¢ãå¯ä»¥å¨ä¸å®ç¨åº¦ä¸åæ¥æéï¼æå¸¸ç¨çæ©å¶æ¯ **網路æéåè°ï¼NTPï¼**ï¼å®å
è¨±æ ¹æä¸çµä¼ºæå¨å ±åçæéä¾èª¿æ´è¨ç®æ©æéã37ãã伺æå¨å徿´ç²¾ç¢ºçæéæºï¼å¦ GPS æ¥æ¶æ©ï¼ç²åæéã
### å®èª¿é¾èæ¥ææé
ç¾ä»£è¨ç®æ©è³å°æå
©ç¨®ä¸åçæéï¼æ¥ææéï¼time-of-day clockï¼åå®èª¿é¾ï¼monotonic clockï¼ãå管å®åé½è¡¡éæéï¼ä½ååéå
©è
å¾éè¦ï¼å çºå®åæä¸åçç®çã
#### æ¥ææé
æ¥ææéæ¯ä½ ç´è§å°çè§£æéç便ï¼å®æ ¹ææåæ¥æï¼ä¹ç¨±çº **æéæé**ï¼å³ wall-clock timeï¼è¿åç¶åæ¥æåæéãä¾å¦ï¼Linux ä¸ç `clock_gettime(CLOCK_REALTIME)`[^v] å Java ä¸ç `System.currentTimeMillis()` è¿åèª epochï¼UTC æé 1970 å¹´ 1 æ 1 æ¥åå¤ï¼ä»¥ä¾çç§æ¸ï¼ææ¯«ç§ï¼ï¼æ ¹æå
¬æï¼Gregorianï¼æ¥æï¼ä¸å
æ¬éç§ãæäºç³»çµ±ä½¿ç¨å
¶ä»æ¥æä½çºåèé»ã
[^v]: éç¶è©²æé被稱çºå³ææéï¼ä½å®è峿使¥ç³»çµ±ç¡éï¼å¦ â[é¿ææéä¿è](#é¿ææéä¿è)â ä¸æè¿°ã
æ¥ææéé常è NTP 忥ï¼éæå³èä¾èªä¸èºæ©å¨çæéæ³ï¼çæ³æ
æ³ä¸ï¼èå¦ä¸èºæ©å¨ä¸çæéæ³ç¸åã使¯å¦ä¸ç¯æè¿°ï¼æ¥ææéä¹å
·æåç¨®åæ¨£çå¥ç¹ä¹èãç¹å¥æ¯ï¼å¦ææ¬å°æéå¨ NTP 伺æå¨ä¹å太é ï¼åå®å¯è½æè¢«å¼·å¶éç½®ï¼çä¸å»å¥½åè·³åäºå
åçæéé»ãéäºè·³èºä»¥åä»åç¶å¸¸å¿½ç¥éç§çäºå¯¦ï¼ä½¿æ¥ææéä¸è½ç¨æ¼æ¸¬éç¶éæéï¼elapsed timeï¼ã38ãã
æ·å²ä¸çæ¥ææééå
·æç¸ç¶ç²ç¥çè§£æåº¦ï¼ä¾å¦ï¼å¨è¼æ©ç Windows 系統ä¸ä»¥ 10 毫ç§çºå®ä½åé²ã39ãã卿è¿ç系統ä¸éå·²ç¶ä¸æ¯ä¸ååé¡äºã
#### å®èª¿é¾
å®èª¿é¾é©ç¨æ¼æ¸¬éæçºæéï¼æéééï¼ï¼ä¾å¦è¶
æææåçé¿ææéï¼Linux ä¸ç `clock_gettime(CLOCK_MONOTONIC)`ï¼å Java ä¸ç `System.nanoTime()` 齿¯å®èª¿æéãéååå便ºæ¼ä»åä¿è總æ¯å¾åèµ°çäºå¯¦ï¼èæ¥ææéå¯ä»¥å¾åè·³ï¼ã
ä½ å¯ä»¥å¨æåæé黿ª¢æ¥å®èª¿éçå¼ï¼åä¸äºäºæ
ï¼ä¸ç¨å¾å次檢æ¥å®ãéå
©åå¼ä¹éçå·®ç°åè¨´ä½ å
©æ¬¡æª¢æ¥ä¹éç¶éäºå¤é·æéãä½å®èª¿éççµå°å¼æ¯æ¯«ç¡æç¾©çï¼å®å¯è½æ¯è¨ç®æ©åå以ä¾çç´ç§æ¸ï¼æé¡ä¼¼çä»»æå¼ãç¹å¥æ¯æ¯è¼ä¾èªå
©èºä¸åè¨ç®æ©çå®èª¿éç弿¯æ²ææç¾©çï¼å çºå®å䏦䏿¯ä¸åäºã
å¨å
·æå¤å CPU ææ§½ç伺æå¨ä¸ï¼æ¯å CPU å¯è½æä¸åå®ç¨çè¨æå¨ï¼ä½ä¸ä¸å®èå
¶ä» CPU 忥ã使¥ç³»çµ±æè£åææçå·®ç°ï¼ä¸¦åè©¦å®æç¨å·è¡ç·è¡¨ç¾åºå®èª¿éçæ¨£åï¼å³ä½¿éäºå·è¡ç·è¢«æç¨å°ä¸åç CPU ä¸ãç¶ç¶ï¼ææºçåæ³æ¯ä¸è¦å¤ªæé種å®èª¿æ§ä¿èç¶åäºã40ãã
妿 NTP åè°æª¢æ¸¬å°è¨ç®æ©çæ¬å°ç³è±éæ¯ NTP 伺æå¨è¦æ´å¿«ææ´æ
¢ï¼åå¯ä»¥èª¿æ´å®èª¿é¾ååèµ°çé »çï¼éç¨±çº **åç§»ï¼skewingï¼** æéï¼ãé è¨æ
æ³ä¸ï¼NTP å
許æééçå¢å ææ¸æ
¢æé«è³ 0.05%ï¼ä½ NTP ä¸è½ä½¿å®èª¿æéååæåå¾è·³è½ãå®èª¿æéçè§£æåº¦é常ç¸ç¶å¥½ï¼å¨å¤§å¤æ¸ç³»çµ±ä¸ï¼å®åè½å¨å¹¾å¾®ç§ææ´ççæéå
§æ¸¬éæéééã
å¨åæ£å¼ç³»çµ±ä¸ï¼ä½¿ç¨å®èª¿é¾æ¸¬é **ç¶éæé**ï¼elapsed timeï¼æ¯å¦è¶
æï¼é常å¾å¥½ï¼å çºå®ä¸åå®ä¸åç¯é»çæéä¹éåå¨ä»»ä½åæ¥ï¼ä¸¦ä¸å°æ¸¬éçè¼å¾®ä¸æºç¢ºæ§ä¸ææã
### æéåæ¥èæºç¢ºæ§
å®èª¿éä¸éè¦åæ¥ï¼ä½æ¯æ¥ææééè¦æ ¹æ NTP 伺æå¨æå
¶ä»å¤é¨æéæºä¾è¨å®æè½æç¨ãä¸å¹¸çæ¯ï¼æåç²åæéçæ¹æ³ä¸¦ä¸åä½ æå¸æç飿¨£å¯é ææºç¢º ââ ç¡¬é«æéå NTP å¯è½æè®å¹»è«æ¸¬ãèå¹¾åä¾åï¼
* è¨ç®æ©ä¸çç³è±éä¸å¤ 精確ï¼å®æ **æ¼ç§»**ï¼driftsï¼å³å·è¡éåº¦å¿«æ¼ææ
¢æ¼é æï¼ãæéæ¼ç§»åæ±ºæ¼æ©å¨ç溫度ãGoogle åè¨å
¶ä¼ºæå¨æéæ¼ç§»çº 200 ppmï¼ç¾è¬åä¹ä¸ï¼ã41ãï¼ç¸ç¶æ¼æ¯ 30 ç§è伺æå¨éæ°åæ¥ä¸æ¬¡çæéæ¼ç§»çº 6 毫ç§ï¼æè
æ¯å¤©éæ°åæ¥çæéæ¼ç§»çº 17 ç§ãå³ä½¿ä¸å工使£å¸¸ï¼æ¤æ¼ç§»ä¹æéå¶å¯ä»¥éå°çæä½³æºç¢ºåº¦ã
* 妿è¨ç®æ©çæéè NTP 伺æå¨çæéå·®å¥å¤ªå¤§ï¼å¯è½ææçµåæ¥ï¼æè
æ¬å°æéå°è¢«å¼·å¶éç½®ã37ããä»»ä½è§å¯éç½®å徿éçæç¨ç¨å¼é½å¯è½æçå°æéåéæçªç¶è·³èºã
* 妿æåç¯é»è¢« NTP 伺æå¨çé²ç«çæå¤é»å¡ï¼æå¯è½ææçºä¸æ®µæé齿²æäººææ³¨æå°ãæèæè¡¨æï¼éå¨å¯¦è¸ä¸ç¢ºå¯¦ç¼çéã
* NTP 忥åªè½å網路延é²ä¸æ¨£å¥½ï¼æä»¥ç¶ä½ 卿æå¯è®è³æå
å»¶é²çæå¡ç¶²è·¯ä¸æï¼NTP åæ¥çæºç¢ºæ§æåå°éå¶ãä¸å實é©è¡¨æï¼ç¶ééç¶²éç¶²è·¯åæ¥æï¼35 毫ç§çæå°èª¤å·®æ¯å¯ä»¥å¯¦ç¾çï¼å管å¶ç¾ç網路延é²å³°å¼æå°è´å¤§ç´ä¸ç§çèª¤å·®ãæ ¹æé
ç½®ï¼è¼å¤§çç¶²è·¯å»¶é²æå°è´ NTP 客æ¶ç«¯å®å
¨æ¾æ£ã
* ä¸äº NTP 伺æå¨æ¯é¯èª¤çæè
é
ç½®é¯èª¤çï¼å ±åçæéå¯è½ç¸å·®å¹¾åå°æã43,44ããé好 NTP 客æ¶ç«¯é常å¥å£¯ï¼å çºä»åææ¥è©¢å¤å伺æå¨ä¸¦å¿½ç¥ç°å¸¸å¼ãç¡è«å¦ä½ï¼ä¾è³´æ¼ç¶²é網路ä¸çéç人æåè¨´ä½ çæéä¾ä¿èä½ çç³»çµ±çæ£ç¢ºæ§ï¼ééæºè®äººææçã
* éç§å°è´ä¸åéå¯è½æ 59 ç§æ 61 ç§ï¼éææç ´ä¸äºå¨è¨è¨ä¹ææªèæ
®éç§ç系統çæåºåè¨ã45ããéç§å·²ç¶ä½¿è¨±å¤å¤§å系統崩潰çäºå¯¦ã38,46ã說æäºï¼éæ¼æéçé¯èª¤åè¨æ¯å¤éº¼å®¹æå·å·æºå
¥ç³»çµ±ä¸ãèçéç§çæä½³æ¹æ³å¯è½æ¯è® NTP 伺æå¨ âæè¬âï¼ä¸¦å¨ä¸å¤©ä¸é漸å·è¡éç§èª¿æ´ï¼éè¢«ç¨±çº **æå°¾**ï¼å³ smearingï¼ã47,48ãï¼éç¶å¯¦éç NTP 伺æå¨è¡¨ç¾åç°ã49ãã
* å¨èæ¬æ©å¨ä¸ï¼ç¡¬é«æéè¢«èæ¬åï¼éå°æ¼éè¦ç²¾ç¢ºè¨æçæç¨ç¨å¼æåºäºé¡å¤çææ°ã50ããç¶ä¸å CPU æ ¸å¿å¨èæ¬æ©å¨ä¹éå
±äº«æï¼æ¯åèæ¬æ©å¨é½ææ«å幾忝«ç§ï¼èæ¤åæå¦ä¸åèæ¬æ©å¨æ£å¨å·è¡ã徿ç¨ç¨å¼çè§åº¦ä¾çï¼é種åé 表ç¾çºæéçªç¶ååè·³èºã26ãã
* å¦æä½ å¨æ²æå®æ´æ§å¶æ¬çè£ç½®ï¼ä¾å¦ï¼ç§»åè£ç½®æåµå
¥å¼è£ç½®ï¼ä¸å·è¡è»é«ï¼åå¯è½å®å
¨ä¸è½ä¿¡ä»»è©²è£ç½®çç¡¬é«æéãä¸äºä½¿ç¨è
æ
æå°å
¶ç¡¬é«æéè¨å®çºä¸æ£ç¢ºçæ¥æåæéï¼ä¾å¦ï¼çºäºè¦é¿éæ²ä¸çæééå¶ï¼æéå¯è½æè¢«è¨å®å°å¾é çé廿å°ä¾ã
å¦æä½ è¶³å¤ å¨ä¹éä»¶äºä¸¦æå
¥å¤§éè³æºï¼å°±å¯ä»¥éå°é常好çæé精度ãä¾å¦ï¼éå°éèæ©æ§çææ´²æ³è¦èæ¡ MiFID II è¦æ±ææé«é »ç交æåºéå¨ UTC æé 100 å¾®ç§å
§åæ¥æéï¼ä»¥ä¾¿é¤é¯ âéå´©â çå¸å ´ç°å¸¸ç¾è±¡ï¼ä¸¦å¹«å©æª¢æ¸¬å¸å ´æç¸±ã51ãã
éé GPS æ¥æ¶æ©ï¼ç²¾ç¢ºæéåè°ï¼PTPï¼ã52ã以åä»ç´°çé¨ç½²åç£æ¸¬å¯ä»¥å¯¦ç¾é種精確度ãç¶èï¼ééè¦å¾å¤åªååå°æ¥ç¥èï¼è䏿å¾å¤æ±è¥¿é½æå°è´æé忥é¯èª¤ãå¦æä½ ç NTP å®è·ç¨åºé
ç½®é¯èª¤ï¼æè
é²ç«ç黿¢äº NTP éè¨ï¼ç±æ¼ç§»å¼èµ·çæé誤差å¯è½å¾å¿«å°±æè®å¤§ã
### ä¾è³´åæ¥æé
æéçåé¡å¨æ¼ï¼éç¶å®åçèµ·ä¾ç°¡å®æç¨ï¼ä½å»å
·æä»¤äººé©è¨ç缺é·ï¼ä¸å¤©å¯è½ä¸ææç²¾ç¢ºç 86,400 ç§ï¼**æ¥ææé** å¯è½æåå¾è·³èºï¼èä¸åç¯é»ä¸çæéå¯è½èå¦ä¸åç¯é»ä¸çæéå®å
¨ä¸åã
æ¬ç« æ©äºæåï¼æåè¨è«äºç¶²è·¯ä¸å
åä»»æå»¶é²å
çåé¡ãå管網路å¨å¤§å¤æ¸æ
æ³ä¸è¡¨ç¾è¯å¥½ï¼ä½è»é«çè¨è¨å¿
é åå®ç¶²è·¯å¶ç¾æåºç¾æ
éï¼èè»é«å¿
é æ£å¸¸èçéäºæ
éãæé乿¯å¦æ¤ï¼åç®¡å¤§å¤æ¸æéé½å·¥ä½å¾å¾å¥½ï¼ä½éè¦æºåå¥å£¯çè»é«ä¾èç䏿£ç¢ºçæéã
æä¸é¨åå顿¯ï¼ä¸æ£ç¢ºçæéå¾å®¹æè¢«è¦èä¸è¦ã妿ä¸èºæ©å¨ç CPU åºç¾æ
éæè
網路é
ç½®é¯èª¤ï¼å¾å¯è½æ ¹æ¬ç¡æ³å·¥ä½ï¼æä»¥å¾å¿«å°±æè¢«æ³¨æå修復ãå¦ä¸æ¹é¢ï¼å¦æå®çç³è±æéæç¼ºé·ï¼æè
å®ç NTP 客æ¶ç«¯é
ç½®é¯èª¤ï¼å¤§é¨åäºæ
ä¼¼ä¹ä»ç¶å¯ä»¥æ£å¸¸å·¥ä½ï¼å³ä½¿å®çæééæ¼¸åé¢ç¾å¯¦ã妿æåè»é«ä¾è³´æ¼ç²¾ç¢ºåæ¥çæéï¼é£éº¼çµææ´å¯è½æ¯æç¡è²æ¯çï¼å
æå¾®éçè³æä¸å¤±ï¼è䏿¯ä¸æ¬¡é©å¤©åå°çå´©æ½°ã53,54ãã
å æ¤ï¼å¦æä½ 使ç¨éè¦åæ¥æéçè»é«ï¼å¿
é ä»ç´°ç£æ§æææ©å¨ä¹éçæéåç§»ãæéåé¢å
¶ä»æé太é çç¯é»æç¶è¢«å®£åæ»äº¡ï¼ä¸¦å¾å¢éä¸ç§»é¤ã鿍£çç£æ§å¯ä»¥ç¢ºä¿ä½ 卿失ç¼çä¹å注æå°ç ´æçæéã
#### æåºäºä»¶çæéæ³
è®æåèæ
®ä¸åç¹å¥çæ
æ³ï¼ä¸ä»¶å¾æèªæä½ä¹å¾å±éªçäºæ
ï¼ä¾è³´æéï¼å¨å¤åç¯é»ä¸å°äºä»¶é²è¡æåºãä¾å¦ï¼å¦æå
©å客æ¶ç«¯å¯«å
¥åæ£å¼è³æåº«ï¼èª°å
å°éï¼ åªä¸åæ´è¿ï¼
[å 8-3](../img/fig8-3.png) 顯示äºå¨å
·æå¤ä¸»è¤è£½çè³æåº«ä¸å°æéçå±éªä½¿ç¨ï¼è©²ä¾åé¡ä¼¼æ¼ [å 5-9](../img/fig5-9.png)ï¼ã客æ¶ç«¯ A å¨ç¯é» 1 ä¸å¯«å
¥ `x = 1`ï¼å¯«å
¥è¢«è¤å¶å°ç¯é» 3ï¼å®¢æ¶ç«¯ B å¨ç¯é» 3 ä¸å¢å xï¼æåç¾å¨æ `x = 2`ï¼ï¼æå¾éå
©å寫å
¥é½è¢«è¤å¶å°ç¯é» 2ã

**å 8-3 客æ¶ç«¯ B ç寫å
¥æ¯å®¢æ¶ç«¯ A ç寫å
¥è¦æï¼ä½æ¯ B ç寫å
¥å
·æè¼æ©çæéæ³ã**
å¨ [å 8-3](../img/fig8-3.png) ä¸ï¼ç¶ä¸å寫å
¥è¢«è¤å¶å°å
¶ä»ç¯é»æï¼å®ææ ¹æç¼ç寫å
¥çç¯é»ä¸çæ¥ææéæ¨è¨ä¸åæéæ³ãå¨éåä¾åä¸ï¼æé忥æ¯é常好çï¼ç¯é» 1 åç¯é» 3 ä¹éçå差尿¼ 3msï¼éå¯è½æ¯ä½ å¨å¯¦è¸ä¸è½é æçæ´å¥½ã
åç®¡å¦æ¤ï¼[å 8-3](../img/fig8-3.png) ä¸çæéæ³å»ç¡æ³æ£ç¢ºæåäºä»¶ï¼å¯«å
¥ `x = 1` çæéæ³çº 42.004 ç§ï¼ä½å¯«å
¥ `x = 2` çæéæ³çº 42.003 ç§ï¼å³ä½¿ `x = 2` å¨ç¨å¾åºç¾ãç¶ç¯é» 2 æ¥æ¶å°éå
©åäºä»¶æï¼æé¯èª¤å°æ¨æ·åº `x = 1` æ¯æè¿çå¼ï¼è䏿£å¯«å
¥ `x = 2`ãææä¸è¡¨ç¾çºï¼å®¢æ¶ç«¯ B çå¢éæä½æä¸å¤±ã
é種è¡çªè§£æ±ºçç¥è¢«ç¨±çº **æå¾å¯«å
¥åå©ï¼LWWï¼**ï¼å®å¨å¤ä¸»è¤è£½åç¡ä¸»è³æåº«ï¼å¦ Cassandra ã53ãå Riak ã54ãï¼ä¸è¢«å»£æ³ä½¿ç¨ï¼è«åé± â[æå¾å¯«å
¥åå©ï¼ä¸æ£ä½µç¼å¯«å
¥ï¼](ch5.md#æå¾å¯«å
¥åå©ï¼ä¸æ£ä½µç¼å¯«å
¥ï¼)â ä¸ç¯ï¼ãæäºå¯¦ç¾æå¨å®¢æ¶ç«¯è䏿¯ä¼ºæå¨ä¸çææéæ³ï¼ä½é並ä¸è½æ¹è® LWW çåºæ¬åé¡ï¼
* è³æåº«å¯«å
¥å¯è½æç¥ç§å°æ¶å¤±ï¼å
·ææ»¯å¾æéçç¯é»ç¡æ³è¦èä¹åå
·æå¿«éæéçç¯é»å¯«å
¥çå¼ï¼ç´å°ç¯é»ä¹éçæéåå·®æ¶éã54,55ããæ¤æ¹æ¡å¯è½å°è´ä¸å®æ¸éçè³æè¢«ææä¸æ£ï¼èæªå®æç¨å ±åä»»ä½é¯èª¤ã
* LWW ç¡æ³åå **é«é »é åºå¯«å
¥**ï¼å¨ [å 8-3](../img/fig8-3.png) ä¸ï¼å®¢æ¶ç«¯ B çå¢éæä½ **ä¸å®** ç¼çå¨å®¢æ¶ç«¯ A ç寫å
¥ä¹å¾ï¼å **çæ£ä½µç¼å¯«å
¥**ï¼å¯«å
¥è
æèä¸å°å
¶ä»å¯«å
¥è
ï¼ãéè¦é¡å¤çå æéä¿è·è¹¤æ©å¶ï¼ä¾å¦çæ¬åéï¼ï¼ä»¥é²æ¢éèå æéä¿ï¼è«åé± â[檢測併ç¼å¯«å
¥](ch5.md#檢測併ç¼å¯«å
¥)âï¼ã
* å
©åç¯é»å¾å¯è½ç¨ç«å°çæå
·æç¸åæéæ³ç寫å
¥ï¼ç¹å¥æ¯å¨æéå
å
·ææ¯«ç§è§£æåº¦çæ
æ³ä¸ãçºäºè§£æ±ºé樣çè¡çªï¼ééè¦ä¸åé¡å¤ç **決åå¼**ï¼tiebreakerï¼å¯ä»¥ç°¡å®å°æ¯ä¸å大鍿©æ¸ï¼ï¼ä½éç¨®æ¹æ³ä¹å¯è½æå°è´éèå æéä¿ã53ãã
å æ¤ï¼å管ééä¿ç âæè¿â çå¼ä¸¦æ¾æ£å
¶ä»å¼ä¾è§£æ±ºè¡çªæ¯å¾èªæäººçï¼ä½æ¯è¦æ³¨æï¼âæè¿â çå®ç¾©åæ±ºæ¼æ¬å°ç **æ¥ææé**ï¼éå¾å¯è½æ¯ä¸æ£ç¢ºçãå³ä½¿ç¨å´æ ¼åæ¥ç NTP æéï¼ä¸åæ¸æå
ä¹å¯è½å¨æéæ³ 100 毫ç§ï¼æ ¹æå³éè
çæéï¼æå³éï¼ä¸¦å¨æéæ³ 99 毫ç§ï¼æ ¹ææ¥æ¶è
çæéï¼èå°é ââ çèµ·ä¾å¥½åè³æå
å¨å³éä¹åå·²ç¶å°éï¼éæ¯ä¸å¯è½çã
NTP 忥æ¯å¦è½è¶³å¤ æºç¢ºï¼ä»¥è³æ¼éç¨®ä¸æ£ç¢ºçæåºä¸æç¼çï¼ä¹è¨±ä¸è½ï¼å çº NTP çåæ¥ç²¾åº¦æ¬èº«ï¼é¤äºç³è±éæ¼ç§»éé¡èª¤å·®æºä¹å¤ï¼éåå°ç¶²è·¯å¾è¿æéçéå¶ãçºäºé²è¡æ£ç¢ºçæåºï¼ä½ éè¦ä¸åæ¯æ¸¬éç©ä»¶ï¼å³ç¶²è·¯å»¶é²ï¼è¦ç²¾ç¢ºå¾å¤çæéã
æè¬ç **é輯æéï¼logic clockï¼**ã56,57ãæ¯åºæ¼éå¢è¨æ¸å¨è䏿¯æ¯çªç³è±æ¶é«ï¼å°æ¼æåºäºä»¶ä¾èªªæ¯æ´å®å
¨ç鏿ï¼è«åé± â[檢測併ç¼å¯«å
¥](ch5.md#檢測併ç¼å¯«å
¥)âï¼ãé輯æé䏿¸¬éä¸å¤©ä¸çæéæç¶éçç§æ¸ï¼èå
測éäºä»¶çç¸å°é åºï¼ç¡è«ä¸åäºä»¶ç¼çå¨å¦ä¸åäºä»¶ä¹å鿝ä¹å¾ï¼ãç¸åï¼ç¨ä¾æ¸¬é實éç¶éæéç **æ¥ææé** å **å®èª¿é¾** ä¹è¢«ç¨±çº **ç©çæéï¼physical clockï¼**ãæåå°å¨ â[é åºä¿è](ch9.md#é åºä¿è)â ä¸ä¾çé åºåé¡ã
#### æéè®æ¸åå¨ç½®ä¿¡åé
ä½ å¯è½è½å¤ ä»¥å¾®ç§æçè³ç´ç§ç精度è®åæ©å¨çæéãä½å³ä½¿å¯ä»¥å¾å°å¦æ¤ç´°ç·»ç測éçµæï¼é䏦䏿å³èéåå¼å°æ¼é樣ç精度實é䏿¯æºç¢ºçã實éä¸ï¼å¤§æ©çæ¯ä¸æºç¢ºç ââ å¦åæè¿°ï¼å³ä½¿ä½ æ¯åéèæ¬å°ç¶²è·¯ä¸ç NTP 伺æå¨é²è¡åæ¥ï¼å¹¾æ¯«ç§çæéæ¼ç§»ä¹å¾å®¹æå¨ä¸ç²¾ç¢ºçç³è±æéä¸ç¼çã使ç¨å
Œ
±ç¶²é網路ä¸ç NTP 伺æå¨ï¼æå¥½çæºç¢ºåº¦å¯è½éå°å¹¾å毫ç§ï¼èä¸ç¶ç¶²è·¯æå¡æï¼èª¤å·®å¯è½æè¶
é 100 毫ç§ã57ãã
å æ¤ï¼å°æéè®æ¸è¦çºä¸åæé黿¯æ²ææç¾©ç ââ 宿´åæ¯ä¸æ®µæéç¯åï¼ä¾å¦ï¼ä¸å系統å¯è½ä»¥ 95% ç置信度èªçºç¶åæéèæ¼æ¬åéå
§ç第 10.3 ç§å 10.5 ç§ä¹éï¼å®å¯è½æ²æ³æ¯éæ´ç²¾ç¢ºäºã58ãã妿æååªç¥é ±100 毫ç§çæéï¼é£éº¼æéæ³ä¸çå¾®ç§æ¸åé¨ååºæ¬ä¸æ¯æ²ææç¾©çã
ä¸ç¢ºå®æ§çéå¯ä»¥æ ¹æä½ çæéæºä¾è¨ç®ãå¦æä½ ç GPS æ¥æ¶å¨æååï¼é«ï¼æéç´æ¥é£ç·å°ä½ çè¨ç®æ©ä¸ï¼é æçé¯èª¤ç¯åç±è£½é ååç¥ã妿å¾ä¼ºæå¨ç²å¾æéï¼åä¸ç¢ºå®æ§å決æ¼èªä¸æ¬¡è伺æå¨åæ¥ä»¥ä¾çç³è±éæ¼ç§»çææå¼ï¼å ä¸ NTP 伺æå¨çä¸ç¢ºå®æ§ï¼åå ä¸å°ä¼ºæå¨ç網路å¾è¿æéï¼åªæ¯ç²åç²ç¥è¿ä¼¼å¼ï¼ä¸¦åè¨ä¼ºæå¨æ¯å¯ä¿¡çï¼ã
ä¸å¹¸çæ¯ï¼å¤§å¤æ¸ç³»çµ±ä¸å
¬éé種ä¸ç¢ºå®æ§ï¼ä¾å¦ï¼ç¶å¼å« `clock_gettime()` æï¼è¿åå¼ä¸æåè¨´ä½ æéæ³çé æé¯èª¤ï¼æä»¥ä½ ä¸ç¥éå
¶ç½®ä¿¡å鿝 5 毫ç§éæ¯ 5 å¹´ã
ä¸åæè¶£çä¾å¤æ¯ Spanner ä¸ç Google TrueTime API ã41ãï¼å®æç¢ºå°å ±åäºæ¬å°æéç置信åéãç¶ä½ è©¢åç¶åæéæï¼ä½ æå¾å°å
©åå¼ï¼[ææ©ï¼ææ]ï¼éæ¯ææ©å¯è½çæéæ³åææå¯è½çæéæ³ãå¨ä¸ç¢ºå®æ§ä¼°è¨çåºç¤ä¸ï¼æéç¥éç¶åç實éæéè½å¨è©²åéå
§ãåéçå¯¬åº¦åæ±ºæ¼èªå¾æ¬å°ç³è±éæå¾èæ´ç²¾ç¢ºçæéæºåæ¥ä»¥ä¾å·²ç¶éäºå¤é·æéã
#### å
¨åæ§å¿«ç
§ç忥æé
å¨ â[å¿«ç
§éé¢åå¯éè¤è®](ch7.md#å¿«ç
§éé¢åå¯éè¤è®)â ä¸ï¼æåè¨è«äºå¿«ç
§éé¢ï¼éæ¯è³æåº«ä¸é常æç¨çåè½ï¼éè¦æ¯æ´å°åå¿«éè®å¯«äºåå大åé·æéå·è¡çåªè®äºåï¼ç¨æ¼å份æåæï¼ãå®å
許åªè®äºåçå°ç¹å®æéé»çèæ¼ä¸è´çæ
çè³æåº«ï¼ä¸ä¸æéå®åå¹²æ¾è®å¯«äºåã
å¿«ç
§é颿叏è¦ç實ç¾éè¦å®èª¿éå¢çäºå IDã妿坫å
¥æ¯å¿«ç
§æï¼å³ï¼å¯«å
¥å
·ææ¯å¿«ç
§æ´å¤§çäºå IDï¼ï¼å該寫å
¥å°æ¼å¿«ç
§äºåæ¯ä¸å¯è¦çãå¨å®ç¯é»è³æåº«ä¸ï¼ä¸åç°¡å®çè¨æ¸å¨å°±è¶³ä»¥çæäºå IDã
使¯ç¶è³æåº«åä½å¨è¨±å¤æ©å¨ä¸ï¼ä¹è¨±å¯è½å¨å¤åæ¸æä¸å¿ä¸æï¼ç±æ¼éè¦å調ï¼ï¼è·¨ææå岿§½ï¼å
¨åæ§å®èª¿éå¢çäºå ID æå¾é£çæãäºå ID å¿
é åæ å æéä¿ï¼å¦æäºå B è®åç±äºå A 寫å
¥çå¼ï¼å B å¿
é å
·ææ¯ A æ´å¤§çäºå IDï¼å¦åå¿«ç
§å°±ç¡æ³ä¿æä¸è´ã卿大éçå°è¦æ¨¡ãé«é »ççäºåæ
æ¯ä¸ï¼å¨åæ£å¼ç³»çµ±ä¸å»ºç«äºå ID æçºä¸åé£ä»¥èççç¶é ¸ [^vi]ã
[^vi]: åå¨åæ£å¼åºåèçæå¨ï¼ä¾å¦ Twitter çéªè±ï¼Snowflakeï¼ï¼å
¶ä»¥å¯ä¼¸ç¸®çæ¹å¼ï¼ä¾å¦ï¼ééå° ID 空éçå¡åé
給ä¸åç¯é»ï¼è¿ä¼¼å®èª¿å°å¢å å¯ä¸ IDã使¯ï¼å®åéå¸¸ç¡æ³ä¿èèå æéä¿ä¸è´çæåºï¼å çºåé
ç ID å¡çæéç¯åæ¯è³æåº«è®åå寫å
¥çæéç¯åè¦é·ãå¦è«åé± â[é åºä¿è](ch9.md#é åºä¿è)âã
æåå¯ä»¥ä½¿ç¨åæ¥æéçæéæ³ä½çºäºå ID åï¼å¦ææåè½å¤ ç²å¾è¶³å¤ 好ç忥æ§ï¼é£éº¼éç¨®æ¹æ³å°å
·æå¾åé©ç屬æ§ï¼æ´æçäºåæææ´å¤§çæéæ³ãç¶ç¶ï¼åé¡å¨æ¼æé精度çä¸ç¢ºå®æ§ã
Spanner 以é種æ¹å¼å¯¦ç¾è·¨è³æä¸å¿çå¿«ç
§éé¢ã59ï¼60ããå®ä½¿ç¨ TrueTime API å ±åçæé置信åéï¼ä¸¦åºæ¼ä»¥ä¸è§å¯çµæï¼å¦æä½ æå
©å置信åéï¼æ¯å置信åéå
嫿æ©åææå¯è½çæéæ³ï¼$A = [A_{earliest}, A_{latest}]$ï¼$B=[B_{earliest}, B_{latest}]$ï¼ï¼éå
©ååéä¸éçï¼å³ï¼$A_{earliest} #### 峿æ¯ççåï¼
>
> å¨åµå
¥å¼ç³»çµ±ä¸ï¼å³ææ¯æç³»çµ±ç¶éç²¾å¿è¨è¨å測試ï¼ä»¥æ»¿è¶³æææ
æ³ä¸çç¹å®æéä¿èãéåå«ç¾©è Web ä¸å°å³æè¡èªç模ç³ä½¿ç¨ç¸åï¼å¾è
æè¿°äºä¼ºæå¨å°è³ææ¨éå°å®¢æ¶ç«¯ä»¥åæ²æå´æ ¼çé¿ææééå¶çæµèçï¼è¦ [第åä¸ç« ](ch11.md)ï¼ã
ä¾å¦ï¼å¦æè»è¼ææ¸¬å¨æª¢æ¸¬å°ç¶åæ£å¨ç¶æ·ç¢°æï¼ä½ è¯å®ä¸å¸æå®å
¨æ°£åéæ¾ç³»çµ±å çº GC æ«åèå»¶é²å½åºã
å¨ç³»çµ±ä¸æä¾ **峿ä¿è** éè¦åç´è»é«æ£§çæ¯æ´ï¼ä¸å峿使¥ç³»çµ±ï¼RTOSï¼ï¼å
è¨±å¨æå®çæéééå
§ä¿è CPU æéçåé
ã庫å½å¼å¿
é ç³ææå£æ
æ³ä¸çå·è¡æéï¼åæ
è¨æ¶é«åé
å¯è½åå°éå¶æå®å
¨ä¸å
許ï¼å³æå徿¶éå¨åå¨ï¼ä½æ¯æç¨ç¨å¼ä»ç¶å¿
é 確ä¿å®ä¸æçµ¦ GC 太å¤çè² æï¼ï¼å¿
é é²è¡å¤§éçæ¸¬è©¦å測éï¼ä»¥ç¢ºä¿éå°ä¿èã
ææéäºé½éè¦å¤§éé¡å¤çå·¥ä½ï¼å´ééå¶äºå¯ä»¥ä½¿ç¨çç¨å¼èªè¨ã庫åå·¥å
·çç¯åï¼å çºå¤§å¤æ¸èªè¨åå·¥å
·ä¸æä¾å³æä¿èï¼ãç±æ¼éäºåå ï¼éç¼å³æç³»çµ±é常æè²´ï¼ä¸¦ä¸å®åéå¸¸ç¨æ¼å®å
¨ééµçåµå
¥å¼è£ç½®ãèä¸ï¼â**峿**â è â**髿è½**â ä¸ä¸æ¨£ ââ äºå¯¦ä¸ï¼å³æç³»çµ±å¯è½å
·æè¼ä½çååéï¼å çºä»åå¿
é è®åæé¿æçåªå
é åºé«æ¼ä¸åï¼å¦è«åé± â[å»¶é²åè³æºå©ç¨](#å»¶é²åè³æºå©ç¨)âï¼ã
å°æ¼å¤§å¤æ¸ä¼ºæå¨ç«¯è³æèç系統ä¾èªªï¼å³æä¿èæ¯ä¸ç¶æ¿æä¸åé©çãå æ¤ï¼éäºç³»çµ±å¿
é æ¿åå¨é峿ç°å¢ä¸å·è¡çæ«ååæéä¸ç©©å®æ§ã
#### éå¶å徿¶éçå½±é¿
ç¨åºæ«åçè² é¢å½±é¿å¯ä»¥å¨ä¸è¨´è«¸æè²´ç峿æç¨ä¿èçæ
æ³ä¸å¾å°ç·©è§£ãèªè¨å·è¡æå¨è¨ååå¾åæ¶æå
·æä¸å®çéæ´»æ§ï¼å çºå®åå¯ä»¥è·è¹¤ç©ä»¶åé
çé度åé¨èæéçæ¨ç§»å©é¤ç空éè¨æ¶é«ã
ä¸åæ°èçæ³æ³æ¯å° GC æ«åè¦çºä¸åç¯é»ççæ«è¨å䏿·ï¼ä¸¦å¨éåç¯é»æ¶éå
¶åå¾çåæï¼è®å
¶ä»ç¯é»èçä¾èªå®¢æ¶ç«¯çè«æ±ã妿å·è¡æå¯ä»¥è¦åæç¨ç¨å¼ä¸åç¯é»å¾å¿«éè¦ GC æ«åï¼é£éº¼æç¨ç¨å¼å¯ä»¥åæ¢å該ç¯é»ç¼éæ°çè«æ±ï¼çå¾
å®å®æèçæªå®æçè«æ±ï¼ç¶å¾å¨æ²æè«æ±æ£å¨é²è¡æå·è¡ GCãéåæå·§å客æ¶ç«¯é±èäº GC æ«åï¼ä¸¦éä½äºé¿ææéçé«ç¾åæ¯ã70,71ããä¸äºå°å»¶é²ææçéè交æç³»çµ±ã72ã使ç¨éç¨®æ¹æ³ã
éåæ³æ³çä¸åè®ç¨®æ¯é»ç¨å徿¶éå¨ä¾èççå½ç©ä»¶ï¼éäºç©ä»¶å¯ä»¥å¿«éæ¶éï¼ï¼ä¸¦å®æå¨ç©ç´¯å¤§éé·å£½ç©ä»¶ï¼å æ¤éè¦å®æ´ GCï¼ä¹åéæ°ååç¨åºã65,73ãã䏿¬¡å¯ä»¥éæ°ååä¸åç¯é»ï¼å¨è¨åéæ°ååä¹åï¼æµéå¯ä»¥å¾è©²ç¯é»ç§»éï¼å°±å [第åç« ](ch4.md) 裡æè¿°ç滾ååç´ä¸æ¨£ã
éäºæªæ½ä¸è½å®å
¨é»æ¢åå¾åæ¶æ«åï¼ä½å¯ä»¥ææå°æ¸å°å®åå°æç¨çå½±é¿ã
## ç¥èãçç¸èè¬è¨
æ¬ç« å°ç®åçºæ¢ï¼æåå·²ç¶æ¢ç´¢äºåæ£å¼ç³»çµ±èå·è¡å¨å®èºè¨ç®æ©ä¸çç¨å¼çä¸åä¹èï¼æ²æå
±äº«è¨æ¶é«ï¼åªæééå¯è®å»¶é²çä¸å¯é 網路å³éçè¨æ¯ï¼ç³»çµ±å¯è½éåé¨å失æï¼ä¸å¯é çæéåèçæ«åã
å¦æä½ ä¸ç¿æ
£æ¼åæ£å¼ç³»çµ±ï¼é£éº¼éäºåé¡ç徿就æè®äººè¿·æä¸è§£ã網路ä¸çä¸åç¯é»ç¡æ³ç¢ºåå°ç¥éä»»ä½äºæ
ââ å®åªè½æ ¹æå®ééç¶²è·¯æ¥æ¶å°ï¼ææ²ææ¥æ¶å°ï¼çè¨æ¯é²è¡ç測ãç¯é»åªè½éé交æè¨æ¯ä¾æ¾åºå¦ä¸åç¯é»æèççæ
ï¼å²åäºåªäºè³æï¼æ¯å¦æ£ç¢ºå·è¡ççï¼ã妿é 端ç¯é»æ²æé¿æï¼åç¡æ³ç¥éå®èæ¼ä»éº¼çæ
ï¼å çºç¶²è·¯ä¸çåé¡ä¸è½å¯é å°èç¯é»ä¸çåé¡ååéä¾ã
éäºç³»çµ±çè¨è«èå²å¸æéï¼å¨ç³»çµ±ä¸ä»éº¼æ¯çä»éº¼æ¯åï¼å¦ææç¥å測éçæ©å¶é½æ¯ä¸å¯é çï¼é£éº¼éæ¼éäºç¥èæååè½å¤éº¼ç¢ºå®å¢ï¼è»é«ç³»çµ±æè©²éµå¾ªæåå°ç©çä¸çæææçæ³åï¼å¦å æéä¿åï¼
幸éçæ¯ï¼æåä¸éè¦å»ææ¸
æ¥çå½çæç¾©ãå¨åæ£å¼ç³»çµ±ä¸ï¼æåå¯ä»¥é³è¿°éæ¼è¡çºï¼ç³»çµ±æ¨¡åï¼çåè¨ï¼ä¸¦ä»¥æ»¿è¶³éäºåè¨çæ¹å¼è¨è¨å¯¦éç³»çµ±ãæ¼ç®æ³å¯ä»¥è¢«èæå¨æå系統模å䏿£ç¢ºå·è¡ãéæå³èå³ä½¿åºå±¤ç³»çµ±æ¨¡åæä¾äºå¾å°çä¿èï¼ä¹å¯ä»¥å¯¦ç¾å¯é çè¡çºã
使¯ï¼å管å¯ä»¥ä½¿è»é«å¨ä¸å¯é ç系統模åä¸è¡¨ç¾è¯å¥½ï¼ä½é䏦䏿¯å¯ä»¥ç´æªäºç¶å¯¦ç¾çã卿¬ç« çå
¶é¤é¨åä¸ï¼æåå°é²ä¸æ¥æ¢è¨åæ£å¼ç³»çµ±ä¸çç¥èåçç¸çæ¦å¿µï¼é尿婿¼æåæèæåå¯ä»¥ååºçå種åè¨ä»¥åæåå¯è½å¸ææä¾çä¿èãå¨ [第ä¹ç« ](ch9.md) ä¸ï¼æåå°èç¼æ¼åæ£å¼ç³»çµ±çä¸äºä¾åï¼éäºæ¼ç®æ³å¨ç¹å®çåè¨æ¢ä»¶ä¸æä¾äºç¹å®çä¿èã
### çç¸ç±å¤æ¸æå®ç¾©
è¨æ³ä¸åå
·æä¸å°ç¨±æ
éç網路ï¼ä¸åç¯é»è½å¤ æ¥æ¶ç¼é給å®çææè¨æ¯ï¼ä½æ¯ä¾èªè©²ç¯é»çä»»ä½å³åºè¨æ¯è¢«ä¸æ£æå»¶é²ã19ããå³ä½¿è©²ç¯é»å·è¡è¯å¥½ï¼ä¸¦ä¸æ£å¨æ¥æ¶ä¾èªå
¶ä»ç¯é»çè«æ±ï¼å
¶ä»ç¯é»ä¹ç¡æ³è½å°å
¶é¿æãç¶é䏿®µæéå¾ï¼å
¶ä»ç¯é»å®£ä½å®å·²ç¶æ»äº¡ï¼å çºä»åæ²æè½å°ç¯é»çè¨æ¯ãé種æ
æ³å°±å夢é䏿¨£ï¼**åæ·éï¼semi-disconnectedï¼** çç¯é»è¢«æåå¢å°ï¼æ²æå°å«é âææ²æ»ï¼â ââ 使¯ç±æ¼æ²æäººè½è½å°å®çå°å«ï¼è¬ç¦®éä¼ç¹¼çºä»¥å
å¿ç決å¿ç¹¼çºè¡é²ã
å¨ä¸åç¨å¾®ä¸é£éº¼å¤¢éçå ´æ¯ä¸ï¼åæ·éçç¯é»å¯è½ææ³¨æå°å®å³éçè¨æ¯æ²æè¢«å
¶ä»ç¯é»ç¢ºèªï¼å æ¤æèå°ç¶²è·¯ä¸å¿
å®å卿
éãåç®¡å¦æ¤ï¼ç¯é»è¢«å
¶ä»ç¯é»é¯èª¤å°å®£åçºæ»äº¡ï¼èåé£ç·çç¯é»å°æ¤ç¡è½çºåã
第ä¸ç¨®æ
æ³ï¼æ³è±¡ä¸åæ£å¨ç¶æ·é·æé **å徿¶éæ«åï¼stop-the-world GC Pauseï¼** çç¯é»ï¼ç¯é»çææå·è¡ç·è¢« GC æ¶ä½ä¸¦æ«åä¸åéï¼å æ¤æ²æè«æ±è¢«èçï¼ä¹æ²æé¿æè¢«å³éãå
¶ä»ç¯é»çå¾
ï¼é試ï¼ä¸èç
©ï¼ä¸¦æçµå®£ä½ç¯é»æ»äº¡ï¼ä¸¦å°å
¶ä¸å°éè»ä¸ãæå¾ï¼GC 宿ï¼ç¯é»çå·è¡ç·ç¹¼çºï¼å¥½åä»éº¼ä¹æ²æç¼çãå
¶ä»ç¯é»æå°é©è¨ï¼å çºæè¬çæ»äº¡ç¯é»çªç¶å¾æ£ºæä¸æ¬èµ·é ä¾ï¼èº«é«å¥åº·ï¼éå§åæè§è
é«èå°è天ãGC å¾çç¯é»æåçè³æ²ææèå°å·²ç¶ç¶éäºæ´æ´ä¸åéï¼èä¸èªå·±å·²è¢«å®£åæ»äº¡ãå¾å®èªå·±çè§åº¦ä¾çï¼å¾æå¾ä¸æ¬¡èå
¶ä»ç¯é»äº¤è«ä»¥ä¾ï¼å¹¾ä¹æ²æç¶é任使éã
éäºæ
äºç坿æ¯ï¼ç¯é»ä¸ä¸å®è½ç¸ä¿¡èªå·±å°æ¼æ
æ³ç夿·ã忣å¼ç³»çµ±ä¸è½å®å
¨ä¾è³´å®åç¯é»ï¼å çºç¯é»å¯è½é¨æå¤±æï¼å¯è½æä½¿ç³»çµ±å¡æ»ï¼ç¡æ³æ¢å¾©ãç¸åï¼è¨±å¤åæ£å¼æ¼ç®æ³é½ä¾è³´æ¼æ³å®äººæ¸ï¼å³å¨ç¯é»ä¹éé²è¡æç¥¨ï¼è«åé± â[è®å¯«çæ³å®äººæ¸](ch5.md#è®å¯«çæ³å®äººæ¸)âï¼ï¼æ±ºçéè¦ä¾èªå¤åç¯é»çæå°æç¥¨æ¸ï¼ä»¥æ¸å°å°æ¼æåç¹å®ç¯é»çä¾è³´ã
éä¹å
æ¬éæ¼å®£åç¯é»æ»äº¡ç決å®ã妿æ³å®æ¸éçç¯é»å®£åå¦ä¸åç¯é»å·²ç¶æ»äº¡ï¼é£éº¼å³ä½¿è©²ç¯é»ä»æè¦ºèªå·±æ´»èï¼å®ä¹å¿
é 被èªçºæ¯æ»çãåé«ç¯é»å¿
é éµå®æ³å®æ±ºå®ä¸¦ä¸èºã
æå¸¸è¦çæ³å®äººæ¸æ¯è¶
éä¸åççµå°å¤æ¸ï¼å管å
¶ä»åå¥çæ³å®äººæ¸ä¹æ¯å¯è½çï¼ã夿¸æ³å®äººæ¸å
許系統繼çºå·¥ä½ï¼å¦æå®åç¯é»ç¼çæ
éï¼ä¸åç¯é»å¯ä»¥å®¹å¿å®ç¯é»æ
éï¼äºåç¯é»å¯ä»¥å®¹å¿éç¯é»æ
éï¼ã系統ä»ç¶æ¯å®å
¨çï¼å çºå¨éåå¶åº¦ä¸åªè½æä¸å夿¸ ââ ä¸è½åæåå¨å
©åç¸äºè¡çªç夿¸æ±ºå®ãç¶æåå¨ [第ä¹ç« ](ch9.md) ä¸è¨è« **å
±èæ¼ç®æ³ï¼consensus algorithmsï¼** æï¼æåå°æ´è©³ç´°å°è¨è«æ³å®äººæ¸çæç¨ã
#### é å°è
åé
é常æ
æ³ä¸ï¼ä¸äºæ±è¥¿å¨ä¸å系統ä¸åªè½æä¸åãä¾å¦ï¼
* è³æåº«å岿§½çé å°è
åªè½æä¸åç¯é»ï¼ä»¥é¿å
**è
¦è£**ï¼å³ split brainï¼è«åé± â[èçç¯é»å®æ©](ch5.md#èçç¯é»å®æ©)âï¼ã
* ç¹å®è³æºçéæç©ä»¶åªå
許ä¸åäºå / 客æ¶ç«¯ææï¼ä»¥é²åæå¯«å
¥åæå£ã
* ä¸åç¹å®ç使ç¨è
å稱åªè½è¢«ä¸å使ç¨è
æè¨»åï¼å çºä½¿ç¨è
å稱å¿
é å¯ä¸æ¨èä¸å使ç¨è
ã
å¨åæ£å¼ç³»çµ±ä¸å¯¦ç¾éä¸é»éè¦æ³¨æï¼å³ä½¿ä¸åç¯é»èªçºå®æ¯ â**天é¸è
ï¼the choosen oneï¼**âï¼å岿§½çè² è²¬äººï¼éçææè
ï¼æåç²å使ç¨è
å稱ç使ç¨è
çè«æ±èçç¨å¼ï¼ï¼ä½é並ä¸ä¸å®æå³èææ³å®äººæ¸çç¯é»åæï¼ä¸åç¯é»å¯è½ä»¥åæ¯é å°è
ï¼ä½æ¯å¦æå
¶ä»ç¯é»å¨æ¤æé宣ä½å®æ»äº¡ï¼ä¾å¦ï¼ç±æ¼ç¶²è·¯ä¸æ·æ GC æ«åï¼ï¼åå®å¯è½å·²è¢«éç´ï¼ä¸å¦ä¸åé å°è
å¯è½å·²ç¶ç¶é¸ã
妿ä¸åç¯é»ç¹¼çºè¡¨ç¾çº **天é¸è
**ï¼å³ä½¿å¤§å¤æ¸ç¯é»å·²ç¶å®£åå®å·²ç¶æ»äºï¼åå¨èæ
®ä¸å¨ç系統ä¸å¯è½æå°è´åé¡ã鿍£çç¯é»è½ä»¥èªå·±è³¦äºçæ¬è½åå
¶ä»ç¯é»ç¼éè¨æ¯ï¼å¦æå
¶ä»ç¯é»ç¸ä¿¡ï¼æ´å系統å¯è½æåä¸äºä¸æ£ç¢ºçäºæ
ã
ä¾å¦ï¼[å 8-4](../img/fig8-4.png) 顯示äºç±æ¼ä¸æ£ç¢ºçé實ç¾å°è´çè³ææå£é¯èª¤ãï¼éåé¯èª¤ä¸å
å
æ¯çè«ä¸çï¼HBase æ¾ç¶æéååé¡ã74,75ãï¼åè¨ä½ è¦ç¢ºä¿ä¸åå²åæåä¸çæªæ¡ä¸æ¬¡åªè½è¢«ä¸å客æ¶è¨ªåï¼å çºå¦æå¤å客æ¶è©¦åå°æ¤å¯«å
¥ï¼è©²æªæ¡å°è¢«æå£ãä½ å試ééå¨è¨ªåæªæ¡ä¹åè¦æ±å®¢æ¶ç«¯å¾é宿åç²åç§ç´ä¾å¯¦ç¾æ¤ç®çã

**å 8-4 忣å¼éç實ç¾ä¸æ£ç¢ºï¼å®¢æ¶ç«¯ 1 èªçºå®ä»ç¶å
·æææçç§ç´ï¼å³ä½¿å®å·²ç¶éæï¼å¾èç ´å£äºå²åä¸çæªæ¡**
éååé¡å°±æ¯æåå
åå¨ â[ç¨åºæ«å](#ç¨åºæ«å)â ä¸è¨è«éçä¸åä¾åï¼å¦æææç§ç´ç客æ¶ç«¯æ«å太ä¹
ï¼å®çç§ç´å°å°æãå¦ä¸å客æ¶ç«¯å¯ä»¥ç²å¾å䏿ªæ¡çç§ç´ï¼ä¸¦éå§å¯«å
¥æªæ¡ãç¶æ«åç客æ¶ç«¯å便ï¼å®èªçºï¼ä¸æ£ç¢ºï¼å®ä»ç¶æä¸åææçç§ç´ï¼ä¸¦ç¹¼çºå¯«å
¥æªæ¡ãçµæï¼å®¢æ¶ç寫å
¥å°ç¢çè¡çªä¸¦æå£æªæ¡ã
#### é²è·ä»¤ç
ç¶ä½¿ç¨éæç§ç´ä¾ä¿è·å°æäºè³æºï¼å¦ [å 8-4](../img/fig8-4.png) ä¸çæªæ¡å²åï¼ç訪åæï¼éè¦ç¢ºä¿ä¸å被誤èªçºèªå·±æ¯ â天é¸è
â çç¯é»ä¸è½æ¾äºç³»çµ±çå
¶å®é¨åã實ç¾éä¸ç®æ¨çä¸åç¸ç¶ç°¡å®çæè¡å°±æ¯ **é²è·ï¼fencingï¼**ï¼å¦ [å 8-5](../img/fig8-5.png) æç¤º

**å 8-5 åªå
許以å¢å é²è·ä»¤ççé åºé²è¡å¯«æä½ï¼å¾èä¿èå²åå®å
¨**
æååè¨æ¯æ¬¡éå®ä¼ºæå¨æäºéæç§ç´æï¼å®éæè¿åä¸å **é²è·ä»¤çï¼fencing tokenï¼**ï¼é忏å卿¯æ¬¡æäºé宿齿å¢å ï¼ä¾å¦ï¼ç±é宿åå¢å ï¼ãç¶å¾ï¼æåå¯ä»¥è¦æ±å®¢æ¶ç«¯æ¯æ¬¡åå²åæåå³é寫å
¥è«æ±æï¼é½å¿
é å
å«ç¶åçé²è·ä»¤çã
å¨ [å 8-5](../img/fig8-5.png) ä¸ï¼å®¢æ¶ç«¯ 1 以 33 ç令çç²å¾ç§ç´ï¼ä½é¨å¾é²å
¥ä¸åé·æéçåé 並ä¸ç§ç´å°æã客æ¶ç«¯ 2 以 34 ç令çï¼è©²æ¸å總æ¯å¢å ï¼ç²åç§ç´ï¼ç¶å¾å°å
¶å¯«å
¥è«æ±å³éå°å²åæåï¼å
æ¬ 34 ç令çãç¨å¾ï¼å®¢æ¶ç«¯ 1 æ¢å¾©çæ©ä¸¦å°å
¶å¯«å
¥å²åæåï¼å
æ¬å
¶ä»¤çå¼ 33ã使¯ï¼å²å伺æå¨æè¨ä½å®å·²ç¶èçäºä¸åå
·ææ´é«ä»¤çç·¨èï¼34ï¼ç寫å
¥ï¼å æ¤å®ææçµå¸¶æä»¤ç 33 çè«æ±ã
å¦æå° ZooKeeper ç¨ä½é宿åï¼åå¯å°äºåæ¨è `zxid` æç¯é»çæ¬ `cversion` ç¨ä½é²è·ä»¤çãç±æ¼å®åä¿èå®èª¿éå¢ï¼å æ¤å®åå
·ææéç屬æ§ã74ãã
è«æ³¨æï¼é種æ©å¶è¦æ±è³æºæ¬èº«å¨æª¢æ¥ä»¤çæ¹é¢ç¼æ®ç©æ¥µä½ç¨ï¼ééæçµä½¿ç¨èç令çï¼è䏿¯å·²ç¶è¢«èçç令çä¾é²è¡å¯«æä½ ââ å
å
ä¾é 客æ¶ç«¯æª¢æ¥èªå·±çéçæ
æ¯ä¸å¤ çãå°æ¼ä¸æç¢ºæ¯æ´é²è·ä»¤ççè³æºï¼å¯è½ä»ç¶å¯ä»¥è§£æ±ºæ¤éå¶ï¼ä¾å¦ï¼å¨æªæ¡å²åæåçæ
æ³ä¸ï¼å¯ä»¥å°é²è·ä»¤çå
å«å¨æªåä¸ï¼ã使¯ï¼çºäºé¿å
å¨éçä¿è·ä¹å¤èçè«æ±ï¼éè¦é²è¡æç¨®æª¢æ¥ã
å¨ä¼ºæå¨ç«¯æª¢æ¥ä¸å令çå¯è½çèµ·ä¾åæ¯ä¸å缺é»ï¼ä½éå¯ä»¥èªªæ¯ä¸ä»¶å¥½äºï¼ä¸åæååå®å®ç客æ¶ç¸½æ¯å®è¦ç©ä¸¦ä¸ææºï¼å çºä½¿ç¨å®¢æ¶ç«¯ç人èå·è¡æåç人åªå
é åºé常ä¸ä¸æ¨£ã76ããå æ¤ï¼ä»»ä½æåä¿è·èªå·±å
åæå¤å®¢æ¶çæ¿«ç¨æ¯ä¸å好主æã
### æå åºæ
é
é²è·ä»¤çå¯ä»¥æª¢æ¸¬å黿¢ç¡æä¸ç¼çé¯èª¤çç¯é»ï¼ä¾å¦ï¼å çºå®å°æªç¼ç¾å
¶ç§ç´å·²éæï¼ã使¯ï¼å¦æç¯é»ææç ´å£ç³»çµ±çä¿èï¼åå¯ä»¥éé使ç¨åé²è·ä»¤çå³éè¨æ¯ä¾è¼é¬å®ææ¤æä½ã
卿¬æ¸ä¸ï¼æååè¨ç¯é»æ¯ä¸å¯é ä½èª 實çï¼å®åå¯è½å¾æ
¢æè
å¾ä¸é¿æï¼ç±æ¼æ
éï¼ï¼ä¸¦ä¸å®åççæ
å¯è½å·²ç¶éæï¼ç±æ¼ GC æ«åæç¶²è·¯å»¶é²ï¼ï¼ä½æ¯æååè¨å¦æç¯é»å®ååºäºåæï¼å®æ£å¨èªªåº âçç¸âï¼ç¡å
¶æç¥ï¼å®æ£å¨æç
§åè°çè¦åæ®æ¼å
¶è§è²ã
妿åå¨ç¯é»å¯è½ âæè¬âï¼å³éä»»æé¯èª¤ææå£çé¿æï¼ç風éªï¼å忣å¼ç³»çµ±çåé¡è®å¾æ´å°é£äº ââ ä¾å¦ï¼å¦æç¯é»å¯è½è²ç¨±å
¶å¯¦é䏿²ææ¶å°ç¹å®çè¨æ¯ãé種è¡çºè¢«ç¨±çº **æå åºæ
éï¼Byzantine faultï¼**ï¼**å¨ä¸ä¿¡ä»»çç°å¢ä¸éæå
±èçåé¡è¢«ç¨±çºæå åºå°è»åé¡**ã77ãã
> ### æå åºå°è»åé¡
>
> æå åºå°è»å顿¯å°æè¬ âå
©å°è»åé¡â çæ³åã78ãï¼å®æ³è±¡å
©åå°è»éè¦å°±æ°é¬¥è¨åéæä¸è´çæ
æ³ãç±æ¼ä»åå¨å
©åä¸åçå°é»å»ºç«äºçå°ï¼ä»ååªè½éé信使é²è¡æºéï¼ä¿¡ä½¿æææè¢«å»¶é²æä¸å¤±ï¼å°±å網路ä¸çè³è¨å
䏿¨£ï¼ãæåå°å¨ [第ä¹ç« ](ch9.md) è¨è«éåå
±èåé¡ã
>
> å¨éååé¡çæå åºçæ¬éï¼æ n ä½å°è»éè¦åæï¼ä»åçåªåå çºæä¸äºåå¾å¨ä»åä¸éèåå°é»ç¤ã大夿¸çå°è»é½æ¯å¿ èª çï¼å èç¼åºäºç實çè³è¨ï¼ä½æ¯åå¾å¯è½æè©¦åééå³éèåæä¸ç實çè³è¨ä¾æ¬ºé¨åæ··æ·ä»äººï¼å¨è©¦åä¿ææªè¢«ç¼ç¾çåæï¼ãäºå
並ä¸ç¥éå徿¯èª°ã
>
> æå åºæ¯å¾ä¾æçºå士å¦ä¸å ¡çå¤å¸èåå¸ï¼ç¾å¨å¨åè³å
¶ç伿¯å¦å¸æãæ²æä»»ä½æ·å²èæè¡¨ææå åºå°è»æ¯å
¶ä»å°æ¹æ´å®¹æåºç¾è©è¨åé°è¬ãç¸åï¼éååå便ºæ¼æå åºå¼çé度è¤éï¼å®åï¼è¿è¿´çæç¾©ï¼æ©å¨è¨ç®æ©ä¹å就已ç¶å¨æ¿æ²»ä¸è¢«ä½¿ç¨äºã79ããLamport æ³è¦é¸ä¸å䏿åç¯ä»»ä½è®è
çåå®¶ï¼ä»è¢«åç¥å°å
¶ç¨±çºé¿ç¾å·´å°¼äºå°è»åé¡ä¸¦ä¸æ¯ä¸å好主æã80ãã
ç¶ä¸å系統å¨é¨åç¯é»ç¼çæ
éãä¸éµå®åè°ãçè³æ¡ææ»æãæ¾äºç¶²è·¯æä»ç¶è½ç¹¼çºæ£ç¢ºå·¥ä½ï¼ç¨±ä¹çº **æå åºå®¹é¯ï¼Byzantine fault-tolerantï¼** çï¼é種ææå¨æäºç¹å®æ
æ³ä¸æ¯ææç¾©çï¼
* å¨èªç©ºèªå¤©ç°å¢ä¸ï¼è¨ç®æ©è¨æ¶é«æ CPU æ«åå¨ä¸çè³æå¯è½è¢«è¼»å°ç ´å£ï¼å°è´å
¶ä»¥ä»»æä¸å¯é ç¥çæ¹å¼é¿æå
¶ä»ç¯é»ãç±æ¼ç³»çµ±æ
éé常æè²´ï¼ä¾å¦ï¼é£æ©ææ¯åç¸æ»è¹ä¸ææäººå¡ï¼æç«ç®èåé空éç«ç¸æï¼ï¼é£è¡æ§å¶ç³»çµ±å¿
é å®¹å¿æå åºæ
éã81,82ãã
* å¨å¤ååèçµç¹ç系統ä¸ï¼ä¸äºåèè
å¯è½æè©¦åæ¬ºé¨æè©é¨ä»äººãå¨é種æ
æ³ä¸ï¼ç¯é»å
å
ä¿¡ä»»å¦ä¸åç¯é»çè¨æ¯æ¯ä¸å®å
¨çï¼å çºå®åå¯è½æ¯åºæ¼æ¡æçç®çè被å³éçãä¾å¦ï¼åæ¯ç¹å¹£åå
¶ä»åå¡é䏿¨£çå°ç網路å¯ä»¥è¢«èªçºæ¯è®äºä¸ä¿¡ä»»çåæ¹åæäº¤ææ¯å¦ç¼ççä¸ç¨®æ¹å¼ï¼èä¸ä¾è³´æ¼ä¸å¿æ©æ§ï¼central authorityï¼ã83ãã
ç¶èï¼å¨æ¬æ¸è¨è«çé£äºç³»çµ±ä¸ï¼æåé常å¯ä»¥å®å
¨å°åè¨æ²ææå åºå¼çé¯èª¤ãå¨ä½ çè³æä¸å¿è£¡ï¼ææçç¯é»é½æ¯ç±ä½ ççµç¹æ§å¶çï¼æä»¥ä»åå¯ä»¥ä¿¡ä»»ï¼ï¼è¼»å°æ°´å¹³è¶³å¤ ä½ï¼è¨æ¶é«æå£ä¸æ¯ä¸å大åé¡ãè£½ä½æå åºå®¹é¯ç³»çµ±çåè°ç¸ç¶è¤éã84ãï¼è容é¯åµå
¥å¼ç³»çµ±ä¾è³´æ¼ç¡¬é«å±¤é¢çæ¯æ´ã81ããå¨å¤§å¤æ¸ä¼ºæå¨ç«¯è³æç³»çµ±ä¸ï¼é¨ç½²æå åºå®¹é¯è§£æ±ºæ¹æ¡çææ¬ä½¿å
¶è®å¾ä¸å實éã
Web æç¨ç¨å¼ç¢ºå¯¦éè¦é æåçµç«¯ä½¿ç¨è
æ§å¶ç客æ¶ç«¯ï¼å¦ Web ç覽å¨ï¼çä»»æåæ¡æè¡çºãéå°±æ¯çºä»éº¼è¼¸å
¥é©èï¼è³ææ¸
æ´å輸åºè½ç¾©å¦æ¤éè¦ï¼ä¾å¦ï¼é²æ¢ SQL 注å
¥åè·¨ç«é»æä»¤ç¢¼ãç¶èï¼æåé常ä¸å¨éè£¡ä½¿ç¨æå åºå®¹é¯åè°ï¼èåªæ¯è®ä¼ºæå¨ææ¬æ±ºå®æ¯å¦å
許客æ¶ç«¯è¡çºãä½å¨æ²æé種ä¸å¿æ©æ§çå°ç網路ä¸ï¼æå åºå®¹é¯æ´çºéè¦ã
è»é«ä¸çä¸åé¯èª¤ï¼bugï¼å¯è½è¢«èªçºæ¯æå åºå¼çé¯èª¤ï¼ä½æ¯å¦æä½ å°ç¸åçè»é«é¨ç½²å°ææç¯é»ä¸ï¼é£éº¼æå åºå¼ç容靿¼ç®æ³å¹«ä¸å°ä½ ã大夿¸æå åºå¼å®¹é¯æ¼ç®æ³è¦æ±è¶
éä¸åä¹äºçç¯é»è½å¤ æ£å¸¸å·¥ä½ï¼å³ï¼å¦ææååç¯é»ï¼æå¤é»è½æä¸åæ
éï¼ãè¦ä½¿ç¨éç¨®æ¹æ³å°ä» bugï¼ä½ å¿
é æååç¨ç«çç¸åè»é«ç實ç¾ï¼ä¸¦å¸æä¸å bug åªåºç¾å¨åå實ç¾ä¹ä¸ä¸ã
忍£ï¼å¦æä¸ååè°å¯ä»¥ä¿è·æåå
åæ¼æ´ï¼å®å
¨æ»²éåæ¡ææ»æï¼é£éº¼éå°æ¯æå¸å¼åçãä¸å¹¸çæ¯ï¼é乿¯ä¸ç¾å¯¦çï¼å¨å¤§å¤æ¸ç³»çµ±ä¸ï¼å¦ææ»æè
å¯ä»¥æ»²éä¸åç¯é»ï¼é£ä»åå¯è½ææ»²éææéäºç¯é»ï¼å çºå®åå¯è½é½å·è¡èç¸åçè»é«ãå æ¤ï¼å³çµ±æ©å¶ï¼èªèï¼è¨ªåæ§å¶ï¼å å¯ï¼é²ç«ççï¼ä»ç¶æ¯æµç¦¦æ»æè
ç主è¦ä¿è·æªæ½ã
#### å¼±è¬è¨å½¢å¼
å管æååè¨ç¯é»é常æ¯èª 實çï¼ä½å¼å¾åè»é«ä¸æ°å¢é²æ¢ âæè¬â 弱形å¼çæ©å¶ ââ ä¾å¦ï¼ç±ç¡¬é«åé¡å°è´çç¡æè¨æ¯ï¼è»é«é¯èª¤åé¯èª¤é
ç½®ãé種ä¿è·æ©å¶ä¸¦ä¸æ¯å®å
¨çæå åºå®¹é¯ï¼å çºå®åä¸è½æµææ±ºå¿å
å®çå°æï¼ä½å®åä»ç¶æ¯ç°¡å®è實ç¨çæ¥é©ï¼ä»¥æé«å¯é æ§ãä¾å¦ï¼
* ç±æ¼ç¡¬é«å顿使¥ç³»çµ±ãé©
åç¨å¼ãè·¯ç±å¨çä¸çé¯èª¤ï¼ç¶²è·¯è³æå
æææåå°æå£ãéå¸¸ï¼æå£çè³æå
æè¢«å
§å»ºæ¼ TCP å UDP ä¸çæ ¡é©åæä¿ç²ï¼ä½ææå®å乿éè«æª¢æ¸¬ã85,86,87ã ãè¦å°ä»éç¨®ç ´å£é常使ç¨ç°¡å®çæ¹æ³å°±å¯ä»¥åå°ï¼ä¾å¦æç¨ç¨å¼ç´åè°ä¸çæ ¡é©åã
* å¯å
¬é訪åçæç¨ç¨å¼å¿
é ä»ç´°æ¸
çä¾èªä½¿ç¨è
çä»»ä½è¼¸å
¥ï¼ä¾å¦æª¢æ¥å¼æ¯å¦å¨åççç¯åå
§ï¼ä¸¦éå¶å串ç大å°ä»¥é²æ¢ééå¤§è¨æ¶é«åé
çæçµæåãé²ç«çå¾é¢çå
§é¨æåå°æ¼è¼¸å
¥ä¹è¨±å¯ä»¥åªæ¡åä¸äºä¸é£éº¼å´æ ¼ç檢æ¥ï¼ä½æ¯æ¡åä¸äºåºæ¬çåçæ§æª¢æ¥ï¼ä¾å¦ï¼å¨åè°è§£æä¸ï¼ä»ç¶æ¯ä¸å好主æã
* NTP 客æ¶ç«¯å¯ä»¥é
ç½®å¤å伺æå¨å°åã忥æï¼å®¢æ¶ç«¯è¯çµ¡ææç伺æå¨ï¼ä¼°è¨å®åç誤差ï¼ä¸¦æª¢æ¥å¤§å¤æ¸ä¼ºæå¨æ¯å¦å°æåæéç¯åéæä¸è´ãåªè¦å¤§å¤æ¸ç伺æå¨æ²åé¡ï¼ä¸åé
ç½®é¯èª¤ç NTP 伺æå¨å ±åçæéæè¢«ç¶æç¹ç°å¼å¾åæ¥ä¸æé¤ã37ãã使ç¨å¤å伺æå¨ä½¿ NTP æ´å¥å£¯ï¼æ¯èµ·åªç¨å®å伺æå¨ä¾ï¼ã
### 系統模åèç¾å¯¦
å·²ç¶æå¾å¤æ¼ç®æ³è¢«è¨è¨ä»¥è§£æ±ºåæ£å¼ç³»çµ±åé¡ ââ ä¾å¦ï¼æåå°å¨ [第ä¹ç« ](ch9.md) è¨è«å
±èåé¡çè§£æ±ºæ¹æ¡ãçºäºæç¨ï¼éäºæ¼ç®æ³éè¦å®¹å¿æå卿¬ç« ä¸è¨è«ç忣å¼ç³»çµ±çå種æ
éã
æ¼ç®æ³ç編寫æ¹å¼ä¸æè©²éåä¾è³´æ¼å·è¡ç硬é«åè»é«é
ç½®çç´°ç¯ãéå°±è¦æ±æå以æç¨®æ¹å¼å°æåææå¨ç³»çµ±ä¸ç¼ççé¯èª¤å½¢å¼åãæåééå®ç¾©ä¸å系統模åä¾åå°éä¸é»ï¼é忍¡åæ¯ä¸åæ½è±¡ï¼æè¿°ä¸åæ¼ç®æ³å¯ä»¥åè¨çäºæ
ã
éæ¼æåºåè¨ï¼ä¸ç¨®ç³»çµ±æ¨¡åæ¯å¸¸ç¨çï¼
* åæ¥æ¨¡å
**åæ¥æ¨¡åï¼synchronous modelï¼** åè¨ç¶²è·¯å»¶é²ãç¨åºæ«åååæéèª¤å·®é½æ¯åéçãé䏦䏿å³èå®å
¨åæ¥çæéæé¶ç¶²è·¯å»¶é²ï¼é黿å³èä½ ç¥é網路延é²ãæ«ååæéæ¼ç§»å°æ°¸é 䏿è¶
éæååºå®çä¸éã88ããåæ¥æ¨¡å䏦䏿¯å¤§å¤æ¸å¯¦é系統çç¾å¯¦æ¨¡åï¼å çºï¼å¦æ¬ç« æè¨è«çï¼ç¡éå»¶é²åæ«å確實æç¼çã
* é¨ååæ¥æ¨¡å
**é¨å忥ï¼partial synchronousï¼** æå³èä¸å系統å¨å¤§å¤æ¸æ
æ³ä¸åä¸ååæ¥ç³»çµ±ä¸æ¨£å·è¡ï¼ä½ææåæè¶
åºç¶²è·¯å»¶é²ï¼ç¨åºæ«ååæéæ¼ç§»ççéã88ãã鿝å¾å¤ç³»çµ±çç¾å¯¦æ¨¡åï¼å¤§å¤æ¸æ
æ³ä¸ï¼ç¶²è·¯åç¨åºè¡¨ç¾è¯å¥½ï¼å¦åæåæ°¸é ç¡æ³å®æä»»ä½äºæ
ï¼ä½æ¯æåå¿
é æ¿èªï¼å¨ä»»ä½æå»é½å卿åºåè¨å¶ç¶è¢«ç ´å£çäºå¯¦ãç¼çé種æ
æ³æï¼ç¶²è·¯å»¶é²ãæ«ååæéé¯èª¤å¯è½æè®å¾ç¸ç¶å¤§ã
* éåæ¥æ¨¡å
å¨é忍¡åä¸ï¼ä¸åæ¼ç®æ³ä¸å
è¨±å°æåºåä»»ä½åè¨ ââ äºå¯¦ä¸å®çè³æ²ææéï¼æä»¥å®ä¸è½ä½¿ç¨è¶
æï¼ãä¸äºæ¼ç®æ³è¢«è¨è¨çºå¯ç¨æ¼éåæ¥æ¨¡åï¼ä½é常åéã
é²ä¸æ¥ä¾èªªï¼é¤äºæåºåé¡ï¼æåéè¦èæ
® **ç¯é»å¤±æ**ãä¸ç¨®æå¸¸è¦çç¯é»ç³»çµ±æ¨¡åæ¯ï¼
* å´©æ½° - 忢æ
é
å¨ **å´©æ½°åæ¢ï¼crash-stopï¼** 模åä¸ï¼æ¼ç®æ³å¯è½æåè¨ä¸åç¯é»åªè½ä»¥ä¸ç¨®æ¹å¼å¤±æï¼å³ééå´©æ½°ãéæå³èç¯é»å¯è½å¨ä»»ææå»çªç¶åæ¢é¿æï¼æ¤å¾è©²ç¯é»æ°¸é æ¶å¤± ââ 宿°¸é 䏿åä¾ã
* å´©æ½° - æ¢å¾©æ
é
æååè¨ç¯é»å¯è½æå¨ä»»ä½æåå´©æ½°ï¼ä½ä¹è¨±æå¨æªç¥çæéä¹å¾å次éå§é¿æãå¨ **å´©æ½° - æ¢å¾©ï¼crash-recoveryï¼** 模åä¸ï¼åè¨ç¯é»å
·æç©©å®çå²åï¼å³ï¼éæå¤±æ§ç£ç¢å²åï¼ä¸æå¨å´©æ½°ä¸ä¿çï¼èè¨æ¶é«ä¸ççæ
æä¸å¤±ã
* æå åºï¼ä»»æï¼æ
é
ç¯é»å¯ä»¥åï¼çµå°æç¾©ä¸çï¼ä»»ä½äºæ
ï¼å
æ¬è©¦åæ²å¼å欺é¨å
¶ä»ç¯é»ï¼å¦ä¸ä¸ç¯æè¿°ã
å°æ¼ç實系統ç建模ï¼å
·æ **å´©æ½° - æ¢å¾©æ
éï¼crash-recoveryï¼** ç **é¨ååæ¥æ¨¡åï¼partial synchronousï¼** éå¸¸æ¯ææç¨ç模åã忣弿¼ç®æ³å¦ä½æå°é種模åï¼
#### æ¼ç®æ³çæ£ç¢ºæ§
çºäºå®ç¾©æ¼ç®æ³æ¯æ£ç¢ºçï¼æåå¯ä»¥æè¿°å®ç屬æ§ãä¾å¦ï¼æåºæ¼ç®æ³ç輸åºå
·æå¦ä¸ç¹æ§ï¼å°æ¼è¼¸åºå表ä¸çä»»ä½å
©åä¸åçå
ç´ ï¼å·¦éçå
ç´ æ¯å³éçå
ç´ å°ãéåªæ¯å®ç¾©å°å表é²è¡æåºå«ç¾©çä¸ç¨®å½¢å¼æ¹å¼ã
忍£ï¼æåå¯ä»¥å¯«ä¸æåæ³è¦ç忣弿¼ç®æ³ç屬æ§ä¾å®ç¾©å®çæ£ç¢ºå«ç¾©ãä¾å¦ï¼å¦ææåæ£å¨çºä¸åéçæé²è·ä»¤çï¼è«åé± â[é²è·ä»¤ç](#é²è·ä»¤ç)âï¼ï¼æåå¯è½è¦æ±æ¼ç®æ³å
·æä»¥ä¸å±¬æ§ï¼
* å¯ä¸æ§ï¼uniquenessï¼
æ²æå
©åé²è·ä»¤çè«æ±è¿åç¸åçå¼ã
* å®èª¿åºåï¼monotonic sequenceï¼
å¦æè«æ± $x$ è¿åäºä»¤ç $t_x$ï¼ä¸¦ä¸è«æ± $y$ è¿åäºä»¤ç $t_y$ï¼ä¸¦ä¸ $x$ å¨ $y$ éå§ä¹åå·²ç¶å®æï¼é£éº¼ $t_x < t_y$ã
* å¯ç¨æ§ï¼availabilityï¼
è«æ±é²è·ä»¤ç並ä¸ä¸æå´©æ½°çç¯é»ï¼æçµææ¶å°é¿æã
妿ä¸å系統模åä¸çæ¼ç®æ³ç¸½æ¯æ»¿è¶³å®å¨æææååè¨å¯è½ç¼ççæ
æ³ä¸çæ§è³ªï¼é£éº¼éåæ¼ç®æ³æ¯æ£ç¢ºçãä½éå¦ä½ææç¾©ï¼å¦æææçç¯é»å´©æ½°ï¼æè
ææç網路延é²çªç¶è®å¾ç¡éé·ï¼é£éº¼æ²æä»»ä½æ¼ç®æ³è½å¤ 宿任ä½äºæ
ã
#### å®å
¨æ§åæ´»æ§
çºäºæ¾æ¸
é種æ
æ³ï¼æå¿
è¦ååå
©ç¨®ä¸åç屬æ§ï¼**å®å
¨ï¼safetyï¼å±¬æ§** å **æ´»æ§ï¼livenessï¼å±¬æ§**ãå¨åå給åºçä¾åä¸ï¼**å¯ä¸æ§** å **å®èª¿åºå** æ¯å®å
¨å±¬æ§ï¼è **å¯ç¨æ§** æ¯æ´»æ§å±¬æ§ã
éå
©ç¨®æ§è³ªæä»éº¼åå¥ï¼ä¸å試éç³å°±æ¯ï¼æ´»æ§å±¬æ§é常å¨å®ç¾©ä¸é常å
æ¬ â**æçµ**â ä¸è©ï¼æ¯çï¼ä½ çå°äº ââ æçµä¸è´æ§æ¯ä¸åæ´»æ§å±¬æ§ã89ãï¼ã
å®å
¨éå¸¸è¢«éæ£å¼å°å®ç¾©çºï¼**æ²æå£äºç¼ç**ï¼èæ´»æ§é常就é¡ä¼¼ï¼**æçµå¥½äºç¼ç**ã使¯ï¼æå¥½ä¸è¦éå¤å°é±è®é£äºéæ£å¼çå®ç¾©ï¼å çºå¥½èå£çå«ç¾©æ¯ä¸»è§çãå®å
¨åæ´»æ§ç實éå®ç¾©æ¯ç²¾ç¢ºç忏å¸çã90ãï¼
* 妿å®å
¨å±¬æ§è¢«éåï¼æåå¯ä»¥æåä¸åç¹å®çå®å
¨å±¬æ§è¢«ç ´å£çæéé»ï¼ä¾å¦ï¼å¦æéåäºå¯ä¸æ§å±¬æ§ï¼æåå¯ä»¥ç¢ºå®éè¤çé²è·ä»¤ç被è¿åçç¹å®æä½ï¼ãéåå®å
¨å±¬æ§å¾ï¼éè¦è¡çºä¸è½è¢«æ¤é· ââ æå¤±å·²ç¶ç¼çã
* æ´»æ§å±¬æ§åéä¾ï¼å¨æåæéé»ï¼ä¾å¦ï¼ä¸åç¯é»å¯è½å³éäºä¸åè«æ±ï¼ä½éæ²ææ¶å°é¿æï¼ï¼å®å¯è½ä¸æç«ï¼ä½ç¸½æ¯å¸æå¨æªä¾è½æç«ï¼å³é鿥åçè¦ï¼ã
ååå®å
¨å±¬æ§åæ´»æ§å±¬æ§çä¸ååªé»æ¯å¯ä»¥å¹«å©æåèçå°é£ç系統模åãå°æ¼åæ£å¼æ¼ç®æ³ï¼å¨ç³»çµ±æ¨¡åçææå¯è½æ
æ³ä¸ï¼è¦æ± **å§çµ** ä¿æå®å
¨å±¬æ§æ¯å¸¸è¦çã88ããä¹å°±æ¯èªªï¼å³ä½¿ææç¯é»å´©æ½°ï¼æè
æ´å網路åºç¾æ
éï¼æ¼ç®æ³ä»ç¶å¿
é 確ä¿å®ä¸æè¿åé¯èª¤ççµæï¼å³ä¿èå®å
¨å±¬æ§å¾å°æ»¿è¶³ï¼ã
使¯ï¼å°æ¼æ´»æ§å±¬æ§ï¼æåå¯ä»¥æåºä¸äºæ³¨æäºé
ï¼ä¾å¦ï¼åªæå¨å¤§å¤æ¸ç¯é»æ²æå´©æ½°çæ
æ³ä¸ï¼åªæç¶ç¶²è·¯æçµå¾ä¸æ·ä¸æ¢å¾©æï¼æåæå¯ä»¥èªªè«æ±éè¦æ¥æ¶é¿æãé¨ååæ¥æ¨¡åçå®ç¾©è¦æ±ç³»çµ±æçµè¿åå°åæ¥çæ
ââ å³ä»»ä½ç¶²è·¯ä¸æ·çæéæ®µåªææçºä¸æ®µæéçæéï¼ç¶å¾é²è¡ä¿®å¾©ã
#### å°ç³»çµ±æ¨¡åå°æ å°ç¾å¯¦ä¸ç
å®å
¨å±¬æ§åæ´»æ§å±¬æ§ä»¥å系統模åå°æ¼æ¨ç忣弿¼ç®æ³çæ£ç¢ºæ§é常æç¨ãç¶èï¼å¨å¯¦è¸ä¸å¯¦æ½æ¼ç®æ³æï¼ç¾å¯¦çæ··äºäºå¯¦å䏿¬¡å°è®ä½ å¬çåé½ï¼å¾æé¡¯ç³»çµ±æ¨¡åæ¯å°ç¾å¯¦çç°¡åæ½è±¡ã
ä¾å¦ï¼å¨å´©æ½° - æ¢å¾©ï¼crash-recoveryï¼æ¨¡åä¸çæ¼ç®æ³é常åè¨ç©©å®å²åå¨ä¸çè³æå¨å´©æ½°å¾å¯ä»¥ååã使¯ï¼å¦æç£ç¢ä¸çè³æè¢«ç ´å£ï¼æè
ç±æ¼ç¡¬é«é¯èª¤æé¯èª¤é
ç½®å°è´è³æè¢«æ¸
é¤ï¼æç¼çä»éº¼æ
æ³ã91ãï¼å¦æä¼ºæå¨åå¨éé«é¯èª¤ä¸¦ä¸å¨éæ°ååæç¡æ³èå¥å
¶ç¡¬ç¢é©
åå¨ï¼å³ä½¿é©
åå¨å·²æ£ç¢ºé£ç·å°ä¼ºæå¨ï¼é£åæç¼çä»éº¼æ
æ³ã92ãï¼
æ³å®äººæ¸æ¼ç®æ³ï¼è«åé± â[è®å¯«çæ³å®äººæ¸](ch5.md#è®å¯«çæ³å®äººæ¸)âï¼ä¾è³´ç¯é»ä¾è¨ä½å®è²ç¨±å²åçè³æã妿ä¸åç¯é»å¯è½æ£æå¥å¿çï¼å¿è¨äºä»¥åå²åçè³æï¼éææç ´æ³å®æ¢ä»¶ï¼å¾èç ´å£æ¼ç®æ³çæ£ç¢ºæ§ãä¹è¨±éè¦ä¸åæ°ç系統模åï¼å¨é忍¡åä¸ï¼æååè¨ç©©å®çå²å大å¤è½å¨å´©æ½°å¾ååï¼ä½ææä¹å¯è½æä¸å¤±ã使¯é£å模åå°±è®å¾æ´é£ä»¥æ¨çäºã
æ¼ç®æ³ççè«æè¿°å¯ä»¥ç°¡å®å®£ç¨±ä¸äºäºæ¯ä¸æç¼çç ââ å¨éæå åºå¼ç³»çµ±ä¸ï¼æå確實éè¦å°å¯è½ç¼çåä¸å¯è½ç¼ççæ
éååºåè¨ãç¶èï¼ç實ä¸çç實ç¾ï¼ä»ç¶æå
æ¬èç âåè¨ä¸ä¸å¯è½â æ
æ³çç¨å¼ç¢¼ï¼å³ä½¿ç¨å¼ç¢¼å¯è½å°±æ¯ `printf("Sucks to be you")` å `exit(666)`ï¼å¯¦éä¸ä¹å°±æ¯ç給éç¶ä¾æ¦å±è¡ã93ããï¼éå¯ä»¥èªªæ¯è¨ç®æ©ç§å¸åè»é«å·¥ç¨éçä¸åå·®ç°ï¼ã
é䏦䏿¯èªªçè«ä¸æ½è±¡çç³»çµ±æ¨¡åæ¯æ¯«ç¡å¹å¼çï¼æ°æ°ç¸åãå®åå°æ¼å°å¯¦é系統çè¤éæ§æåæä¸ååæåå¯ä»¥æ¨ççå¯èççé¯èª¤å奿¯é常æå¹«å©çï¼ä»¥ä¾¿æåè½å¤ çè§£éååé¡ï¼ä¸¦è©¦å系統å°è§£æ±ºéååé¡ãæåå¯ä»¥èææ¼ç®æ³æ¯æ£ç¢ºçï¼éé表æå®åç屬æ§å¨æå系統模åä¸ç¸½æ¯æç«çã
èææ¼ç®æ³æ£ç¢ºä¸¦ä¸æå³èå®å¨ç實系統ä¸ç實ç¾å¿
ç¶ç¸½æ¯æ£ç¢ºçãä½ééåºäºå¾å¥½çç¬¬ä¸æ¥ï¼å çºçè«åæå¯ä»¥ç¼ç¾æ¼ç®æ³ä¸çåé¡ï¼é種åé¡å¯è½æå¨ç¾å¯¦ç³»çµ±ä¸é·ææ½ä¼ï¼ç´å°ä½ çåè¨ï¼ä¾å¦ï¼æåºï¼å çºä¸å°å¸¸çæ
æ³è¢«æç ´ãçè«åæèç¶é©æ¸¬è©¦å樣éè¦ã
## æ¬ç« å°çµ
卿¬ç« ä¸ï¼æåè¨è«äºåæ£å¼ç³»çµ±ä¸å¯è½ç¼ççå種åé¡ï¼å
æ¬ï¼
* ç¶ä½ å試éé網路å³éè³æå
æï¼è³æå
å¯è½æä¸å¤±æä»»æå»¶é²ã忍£ï¼çè¦å¯è½æä¸å¤±æå»¶é²ï¼æä»¥å¦æä½ æ²æå¾å°çè¦ï¼ä½ ä¸ç¥éè¨æ¯æ¯å¦å³éæåäºã
* ç¯é»çæéå¯è½æèå
¶ä»ç¯é»é¡¯èä¸åæ¥ï¼åç®¡ä½ ç¡æå¤§åªåè¨å® NTPï¼ï¼å®å¯è½æçªç¶è·³è½æè·³åï¼ä¾é 宿¯å¾å±éªçï¼å çºä½ å¾å¯è½æ²æå¥½çæ¹æ³ä¾æ¸¬éä½ çæéçé¯èª¤ééã
* ä¸åç¨åºå¯è½æå¨å
¶å·è¡ç任使快å䏿®µç¸ç¶é·çæéï¼å¯è½æ¯å çºåæ¢ææèççå徿¶éå¨ï¼ï¼è¢«å
¶ä»ç¯é»å®£åæ»äº¡ï¼ç¶å¾å次復活ï¼å»æ²ææèå°å®è¢«æ«åäºã
éé¡ **é¨å失æï¼partial failureï¼** å¯è½ç¼ççäºå¯¦æ¯åæ£å¼ç³»çµ±çæ±ºå®æ§ç¹å¾µãæ¯ç¶è»é«è©¦åå任使¶åå
¶ä»ç¯é»çäºæ
æï¼å¶ç¾å°±æå¯è½æå¤±æï¼æè
鍿©è®æ
¢ï¼æè
æ ¹æ¬æ²æé¿æï¼æçµè¶
æï¼ãå¨åæ£å¼ç³»çµ±ä¸ï¼æå試åå¨è»é«ä¸å»ºç« **é¨å失æ** ç容靿©å¶ï¼é樣æ´å系統å¨å³ä½¿æäºçµæé¨åè¢«ç ´å£çæ
æ³ä¸ï¼ä¹å¯ä»¥ç¹¼çºå·è¡ã
çºäºå®¹å¿é¯èª¤ï¼ç¬¬ä¸æ¥æ¯ **檢測** å®åï¼ä½å³ä½¿é樣ä¹å¾é£ã大夿¸ç³»çµ±æ²ææª¢æ¸¬ç¯é»æ¯å¦ç¼çæ
éçæºç¢ºæ©å¶ï¼æä»¥å¤§å¤æ¸åæ£å¼æ¼ç®æ³ä¾é **è¶
æ** ä¾ç¢ºå®é 端ç¯é»æ¯å¦ä»ç¶å¯ç¨ã使¯ï¼è¶
æç¡æ³åå網路失æåç¯é»å¤±æï¼ä¸¦ä¸å¯è®çç¶²è·¯å»¶é²æææå°è´ç¯é»è¢«é¯èª¤å°æ·çç¼çæ
éãæ¤å¤ï¼ææä¸åç¯é»å¯è½èæ¼éç´çæ
ï¼ä¾å¦ï¼ç±æ¼é©
åç¨å¼é¯èª¤ï¼åå
網絡å¡å¯è½çªç¶ä¸éå° 1 Kb/s çååéã94ãã鿍£ä¸å âè·è¡â è䏿¯æ»æçç¯é»å¯è½æ¯ä¸å乾淨ç失æç¯é»æ´é£èçã
䏿¦æª¢æ¸¬å°æ
éï¼ä½¿ç³»çµ±å®¹å¿å®ä¹ä¸¦ä¸å®¹æï¼æ²æå
¨åæ§è®æ¸ï¼æ²æå
±äº«è¨æ¶é«ï¼æ²æå
±åçç¥èï¼ææ©å¨ä¹éä»»ä½å
¶ä»ç¨®é¡çå
±äº«çæ
ãç¯é»çè³ä¸è½å°±ç¾å¨æ¯ä»éº¼æééæä¸è´ï¼å°±ä¸ç¨èªªæ´æ·±å¥§çäºãè³è¨å¾ä¸åç¯é»æµåå¦ä¸åç¯é»çå¯ä¸æ¹æ³æ¯ééä¸å¯é ç網路å³éè³è¨ãé大決çä¸è½ç±ä¸åç¯é»å®å
¨å°å®æï¼å æ¤æåéè¦ä¸åè½å¾å
¶ä»ç¯é»ç²å¾å¹«å©çåè°ï¼ä¸¦çåéå°æ³å®äººæ¸ä»¥éæä¸è´ã
å¦æä½ ç¿æ
£æ¼å¨çæ³åçæ¸å¸å®ç¾ç宿©ç°å¢ï¼åä¸åæä½ç¸½è½ç¢ºå®å°è¿åç¸åççµæï¼ä¸ç·¨å¯«è»é«ï¼é£éº¼è½å忣å¼ç³»çµ±çåäºçç©çç¾å¯¦å¯è½ææäºä»¤äººéé©ãç¸åï¼å¦æè½å¤ å¨å®èºè¨ç®æ©ä¸è§£æ±ºä¸ååé¡ï¼é£éº¼åæ£å¼ç³»çµ±å·¥ç¨å¸«é常æèªçºéåå顿¯å¹³å¡çã5ãï¼ç¾å¨å®åè¨ç®æ©ç¢ºå¯¦å¯ä»¥åå¾å¤äºæ
ã95ããå¦æä½ å¯ä»¥é¿å
é忽夿ççåï¼ææ±è¥¿æ¾å¨ä¸èºæ©å¨ä¸ï¼é£éº¼é常æ¯å¼å¾çã
使¯ï¼æ£å¦å¨ [第äºé¨å](part-ii.md) çä»ç´¹ä¸æè¨è«ç飿¨£ï¼å¯ä¼¸ç¸®æ§ä¸¦ä¸æ¯ä½¿ç¨åæ£å¼ç³»çµ±çå¯ä¸åå ã容é¯åä½å»¶é²ï¼ééå°è³ææ¾ç½®å¨è·é¢ä½¿ç¨è
è¼è¿çå°æ¹ï¼æ¯åçéè¦çç®æ¨ï¼èéäºä¸è½ç¨å®åç¯é»å¯¦ç¾ã
卿¬ç« ä¸ï¼æåä¹è½æäºå¹¾æ¬¡è©±é¡ï¼æ¢è¨äºç¶²è·¯ãæéåç¨åºçä¸å¯é æ§æ¯å¦æ¯ä¸å¯é¿å
çèªç¶è¦å¾ãæåçå°é䏦䏿¯ï¼æå¯è½çµ¦ç¶²è·¯æä¾ç¡¬å³æçé¿æä¿èåæéçå»¶é²ï¼ä½æ¯é樣åé常æè²´ï¼ä¸å°è´ç¡¬é«è³æºçå©ç¨çéä½ã大夿¸éå®å
¨ééµç³»çµ±æé¸æ **便å®èä¸å¯é **ï¼è䏿¯ **æè²´åå¯é **ã
æåéè«å°äºè¶
ç´è¨ç®æ©ï¼å®åæ¡ç¨å¯é çå
ä»¶ï¼å æ¤ç¶å
ä»¶ç¼çæ
éæå¿
é å®å
¨åæ¢ä¸¦éæ°ååãç¸æ¯ä¹ä¸ï¼åæ£å¼ç³»çµ±å¯ä»¥æ°¸ä¹
å·è¡è䏿卿å層é¢ä¸æ·ï¼å çºææçé¯èª¤åç¶è·é½å¯ä»¥å¨ç¯é»ç´å¥é²è¡èç ââ è³å°å¨çè«ä¸æ¯å¦æ¤ãï¼å¯¦éä¸ï¼å¦æä¸åé¯èª¤çé
ç½®è®æ´è¢«æç¨å°ææçç¯é»ï¼ä»ç¶æä½¿åæ£å¼ç³»çµ±ç±çï¼ã
æ¬ç« ä¸ç´å¨è¬åå¨çåé¡ï¼çµ¦æåå±ç¾äºä¸å¹
黯淡ç忝ãå¨ [ä¸ä¸ç« ](ch9.md) ä¸ï¼æåå°ç¹¼çºè¨è«è§£æ±ºæ¹æ¡ï¼ä¸¦è¨è«ä¸äºæ¨å¨è§£æ±ºåæ£å¼ç³»çµ±ä¸ææåé¡çæ¼ç®æ³ã
## åèæç»
1. Mark Cavage: â[Thereâs Just No Getting Around It: Youâre Building a Distributed System](http://queue.acm.org/detail.cfm?id=2482856),â *ACM Queue*, volume 11, number 4, pages 80-89, April 2013. [doi:10.1145/2466486.2482856](http://dx.doi.org/10.1145/2466486.2482856)
1. Jay Kreps: â[Getting Real About Distributed System Reliability](http://blog.empathybox.com/post/19574936361/getting-real-about-distributed-system-reliability),â *blog.empathybox.com*, March 19, 2012.
1. Sydney Padua: *The Thrilling Adventures of Lovelace and Babbage: The (Mostly) True Story of the First Computer*. Particular Books, April 2015. ISBN: 978-0-141-98151-2
1. Coda Hale: â[You Canât Sacrifice Partition Tolerance](http://codahale.com/you-cant-sacrifice-partition-tolerance/),â *codahale.com*, October 7, 2010.
1. Jeff Hodges: â[Notes on Distributed Systems for Young Bloods](https://web.archive.org/web/20200218095605/https://www.somethingsimilar.com/2013/01/14/notes-on-distributed-systems-for-young-bloods/),â *somethingsimilar.com*, January 14, 2013.
1. Antonio Regalado: â[Who Coined 'Cloud Computing'?](https://www.technologyreview.com/2011/10/31/257406/who-coined-cloud-computing/),â *technologyreview.com*, October 31, 2011.
1. Luiz André Barroso, Jimmy Clidaras, and Urs Hölzle: â[The Datacenter as a Computer: An Introduction to the Design of Warehouse-Scale Machines, Second Edition](https://web.archive.org/web/20140404113735/http://www.morganclaypool.com/doi/abs/10.2200/S00516ED2V01Y201306CAC024),â *Synthesis Lectures on Computer Architecture*, volume 8, number 3, Morgan & Claypool Publishers, July 2013. [doi:10.2200/S00516ED2V01Y201306CAC024](http://dx.doi.org/10.2200/S00516ED2V01Y201306CAC024), ISBN: 978-1-627-05010-4
1. David Fiala, Frank Mueller, Christian Engelmann, et al.: â[Detection and Correction of Silent Data Corruption for Large-Scale High-Performance Computing](http://moss.csc.ncsu.edu/~mueller/ftp/pub/mueller/papers/sc12.pdf),â at *International Conference for High Performance Computing, Networking, Storage and Analysis* (SC12), November 2012.
1. Arjun Singh, Joon Ong, Amit Agarwal, et al.: â[Jupiter Rising: A Decade of Clos Topologies and Centralized Control in Googleâs Datacenter Network](http://conferences.sigcomm.org/sigcomm/2015/pdf/papers/p183.pdf),â at *Annual Conference of the ACM Special Interest Group on Data Communication* (SIGCOMM), August 2015. [doi:10.1145/2785956.2787508](http://dx.doi.org/10.1145/2785956.2787508)
1. Glenn K. Lockwood: â[Hadoop's Uncomfortable Fit in HPC](http://glennklockwood.blogspot.co.uk/2014/05/hadoops-uncomfortable-fit-in-hpc.html),â *glennklockwood.blogspot.co.uk*, May 16, 2014.
1. John von Neumann: â[Probabilistic Logics and the Synthesis of Reliable Organisms from Unreliable Components](https://personalpages.manchester.ac.uk/staff/nikolaos.kyparissas/uploads/VonNeumann1956.pdf),â in *Automata Studies (AM-34)*, edited by Claude E. Shannon and John McCarthy, Princeton University Press, 1956. ISBN: 978-0-691-07916-5
1. Richard W. Hamming: *The Art of Doing Science and Engineering*. Taylor & Francis, 1997. ISBN: 978-9-056-99500-3
1. Claude E. Shannon: â[A Mathematical Theory of Communication](http://cs.brynmawr.edu/Courses/cs380/fall2012/shannon1948.pdf),â *The Bell System Technical Journal*, volume 27, number 3, pages 379â423 and 623â656, July 1948.
1. Peter Bailis and Kyle Kingsbury: â[The Network Is Reliable](https://queue.acm.org/detail.cfm?id=2655736),â *ACM Queue*, volume 12, number 7, pages 48-55, July 2014. [doi:10.1145/2639988.2639988](http://dx.doi.org/10.1145/2639988.2639988)
1. Joshua B. Leners, Trinabh Gupta, Marcos K. Aguilera, and Michael Walfish: â[Taming Uncertainty in Distributed Systems with Help from the Network](http://www.cs.nyu.edu/~mwalfish/papers/albatross-eurosys15.pdf),â at *10th European Conference on Computer Systems* (EuroSys), April 2015. [doi:10.1145/2741948.2741976](http://dx.doi.org/10.1145/2741948.2741976)
1. Phillipa Gill, Navendu Jain, and Nachiappan Nagappan: â[Understanding Network Failures in Data Centers: Measurement, Analysis, and Implications](http://conferences.sigcomm.org/sigcomm/2011/papers/sigcomm/p350.pdf),â at *ACM SIGCOMM Conference*, August 2011. [doi:10.1145/2018436.2018477](http://dx.doi.org/10.1145/2018436.2018477)
1. Mark Imbriaco: â[Downtime Last Saturday](https://github.com/blog/1364-downtime-last-saturday),â *github.com*, December 26, 2012.
1. Will Oremus: â[The Global Internet Is Being Attacked by Sharks, Google Confirms](http://www.slate.com/blogs/future_tense/2014/08/15/shark_attacks_threaten_google_s_undersea_internet_cables_video.html),â *slate.com*, August 15, 2014.
1. Marc A. Donges: â[Re: bnx2 cards Intermittantly Going Offline](http://www.spinics.net/lists/netdev/msg210485.html),â Message to Linux *netdev* mailing list, *spinics.net*, September 13, 2012.
1. Kyle Kingsbury: â[Call Me Maybe: Elasticsearch](https://aphyr.com/posts/317-call-me-maybe-elasticsearch),â *aphyr.com*, June 15, 2014.
1. Salvatore Sanfilippo: â[A Few Arguments About Redis Sentinel Properties and Fail Scenarios](http://antirez.com/news/80),â *antirez.com*, October 21, 2014.
1. Bert Hubert: â[The Ultimate SO_LINGER Page, or: Why Is My TCP Not Reliable](http://blog.netherlabs.nl/articles/2009/01/18/the-ultimate-so_linger-page-or-why-is-my-tcp-not-reliable),â *blog.netherlabs.nl*, January 18, 2009.
1. Nicolas Liochon: â[CAP: If All You Have Is a Timeout, Everything Looks Like a Partition](http://blog.thislongrun.com/2015/05/CAP-theorem-partition-timeout-zookeeper.html),â *blog.thislongrun.com*, May 25, 2015.
1. Jerome H. Saltzer, David P. Reed, and David D. Clark: â[End-To-End Arguments in System Design](https://groups.csail.mit.edu/ana/Publications/PubPDFs/End-to-End%20Arguments%20in%20System%20Design.pdf),â *ACM Transactions on Computer Systems*, volume 2, number 4, pages 277â288, November 1984. [doi:10.1145/357401.357402](http://dx.doi.org/10.1145/357401.357402)
1. Matthew P. Grosvenor, Malte Schwarzkopf, Ionel Gog, et al.: â[Queues Donât Matter When You Can JUMP Them!](https://www.usenix.org/system/files/conference/nsdi15/nsdi15-paper-grosvenor_update.pdf),â at *12th USENIX Symposium on Networked Systems Design and Implementation* (NSDI), May 2015.
1. Guohui Wang and T. S. Eugene Ng: â[The Impact of Virtualization on Network Performance of Amazon EC2 Data Center](http://www.cs.rice.edu/~eugeneng/papers/INFOCOM10-ec2.pdf),â at *29th IEEE International Conference on Computer Communications* (INFOCOM), March 2010. [doi:10.1109/INFCOM.2010.5461931](http://dx.doi.org/10.1109/INFCOM.2010.5461931)
1. Van Jacobson: â[Congestion Avoidance and Control](http://www.cs.usask.ca/ftp/pub/discus/seminars2002-2003/p314-jacobson.pdf),â at *ACM Symposium on Communications Architectures and Protocols* (SIGCOMM), August 1988. [doi:10.1145/52324.52356](http://dx.doi.org/10.1145/52324.52356)
1. Brandon Philips: â[etcd: Distributed Locking and Service Discovery](https://www.youtube.com/watch?v=HJIjTTHWYnE),â at *Strange Loop*, September 2014.
1. Steve Newman: â[A Systematic Look at EC2 I/O](https://web.archive.org/web/20141211094156/http://blog.scalyr.com/2012/10/a-systematic-look-at-ec2-io/),â *blog.scalyr.com*, October 16, 2012.
1. Naohiro Hayashibara, Xavier Défago, Rami Yared, and Takuya Katayama: â[The Ï Accrual Failure Detector](http://hdl.handle.net/10119/4784),â Japan Advanced Institute of Science and Technology, School of Information Science, Technical Report IS-RR-2004-010, May 2004.
1. Jeffrey Wang: â[Phi Accrual Failure Detector](http://ternarysearch.blogspot.co.uk/2013/08/phi-accrual-failure-detector.html),â *ternarysearch.blogspot.co.uk*, August 11, 2013.
1. Srinivasan Keshav: *An Engineering Approach to Computer Networking: ATM Networks, the Internet, and the Telephone Network*. Addison-Wesley Professional, May 1997. ISBN: 978-0-201-63442-6
1. Cisco, â[Integrated Services Digital Network](https://web.archive.org/web/20181229220921/http://docwiki.cisco.com/wiki/Integrated_Services_Digital_Network),â *docwiki.cisco.com*.
1. Othmar Kyas: *ATM Networks*. International Thomson Publishing, 1995. ISBN: 978-1-850-32128-6
1. â[InfiniBand FAQ](http://www.mellanox.com/related-docs/whitepapers/InfiniBandFAQ_FQ_100.pdf),â Mellanox Technologies, December 22, 2014.
1. Jose Renato Santos, Yoshio Turner, and G. (John) Janakiraman: â[End-to-End Congestion Control for InfiniBand](http://www.hpl.hp.com/techreports/2002/HPL-2002-359.pdf),â at *22nd Annual Joint Conference of the IEEE Computer and Communications Societies* (INFOCOM), April 2003. Also published by HP Laboratories Palo Alto, Tech Report HPL-2002-359. [doi:10.1109/INFCOM.2003.1208949](http://dx.doi.org/10.1109/INFCOM.2003.1208949)
1. Ulrich Windl, David Dalton, Marc Martinec, and Dale R. Worley: â[The NTP FAQ and HOWTO](http://www.ntp.org/ntpfaq/NTP-a-faq.htm),â *ntp.org*, November 2006.
1. John Graham-Cumming: â[How and why the leap second affected Cloudflare DNS](https://blog.cloudflare.com/how-and-why-the-leap-second-affected-cloudflare-dns/),â *blog.cloudflare.com*, January 1, 2017.
1. David Holmes: â[Inside the Hotspot VM: Clocks, Timers and Scheduling Events â Part I â Windows](https://web.archive.org/web/20160308031939/https://blogs.oracle.com/dholmes/entry/inside_the_hotspot_vm_clocks),â *blogs.oracle.com*, October 2, 2006.
1. Steve Loughran: â[Time on Multi-Core, Multi-Socket Servers](http://steveloughran.blogspot.co.uk/2015/09/time-on-multi-core-multi-socket-servers.html),â *steveloughran.blogspot.co.uk*, September 17, 2015.
1. James C. Corbett, Jeffrey Dean, Michael Epstein, et al.: â[Spanner: Googleâs Globally-Distributed Database](https://research.google/pubs/pub39966/),â at *10th USENIX Symposium on Operating System Design and Implementation* (OSDI), October 2012.
1. M. Caporaloni and R. Ambrosini: â[How Closely Can a Personal Computer Clock Track the UTC Timescale Via the Internet?](https://iopscience.iop.org/0143-0807/23/4/103/),â *European Journal of Physics*, volume 23, number 4, pages L17âL21, June 2012. [doi:10.1088/0143-0807/23/4/103](http://dx.doi.org/10.1088/0143-0807/23/4/103)
1. Nelson Minar: â[A Survey of the NTP Network](http://alumni.media.mit.edu/~nelson/research/ntp-survey99/),â *alumni.media.mit.edu*, December 1999.
1. Viliam Holub: â[Synchronizing Clocks in a Cassandra Cluster Pt. 1 â The Problem](https://blog.rapid7.com/2014/03/14/synchronizing-clocks-in-a-cassandra-cluster-pt-1-the-problem/),â *blog.rapid7.com*, March 14, 2014.
1. Poul-Henning Kamp: â[The One-Second War (What Time Will You Die?)](http://queue.acm.org/detail.cfm?id=1967009),â *ACM Queue*, volume 9, number 4, pages 44â48, April 2011. [doi:10.1145/1966989.1967009](http://dx.doi.org/10.1145/1966989.1967009)
1. Nelson Minar: â[Leap Second Crashes Half the Internet](http://www.somebits.com/weblog/tech/bad/leap-second-2012.html),â *somebits.com*, July 3, 2012.
1. Christopher Pascoe: â[Time, Technology and Leaping Seconds](http://googleblog.blogspot.co.uk/2011/09/time-technology-and-leaping-seconds.html),â *googleblog.blogspot.co.uk*, September 15, 2011.
1. Mingxue Zhao and Jeff Barr: â[Look Before You Leap â The Coming Leap Second and AWS](https://aws.amazon.com/blogs/aws/look-before-you-leap-the-coming-leap-second-and-aws/),â *aws.amazon.com*, May 18, 2015.
1. Darryl Veitch and Kanthaiah Vijayalayan: â[Network Timing and the 2015 Leap Second](https://tklab.feit.uts.edu.au/~darryl/Publications/LeapSecond_camera.pdf),â at *17th International Conference on Passive and Active Measurement* (PAM), April 2016. [doi:10.1007/978-3-319-30505-9_29](http://dx.doi.org/10.1007/978-3-319-30505-9_29)
1. â[Timekeeping in VMware Virtual Machines](https://www.vmware.com/content/dam/digitalmarketing/vmware/en/pdf/techpaper/Timekeeping-In-VirtualMachines.pdf),â Information Guide, VMware, Inc., December 2011.
1. â[MiFID II / MiFIR: Regulatory Technical and Implementing Standards â Annex I (Draft)](https://www.esma.europa.eu/sites/default/files/library/2015/11/2015-esma-1464_annex_i_-_draft_rts_and_its_on_mifid_ii_and_mifir.pdf),â European Securities and Markets Authority, Report ESMA/2015/1464, September 2015.
1. Luke Bigum: â[Solving MiFID II Clock Synchronisation With Minimum Spend (Part 1)](https://web.archive.org/web/20170704030310/https://www.lmax.com/blog/staff-blogs/2015/11/27/solving-mifid-ii-clock-synchronisation-minimum-spend-part-1/),â *lmax.com*, November 27, 2015.
1. Kyle Kingsbury: â[Call Me Maybe: Cassandra](https://aphyr.com/posts/294-call-me-maybe-cassandra/),â *aphyr.com*, September 24, 2013.
1. John Daily: â[Clocks Are Bad, or, Welcome to the Wonderful World of Distributed Systems](https://riak.com/clocks-are-bad-or-welcome-to-distributed-systems/),â *riak.com*, November 12, 2013.
1. Kyle Kingsbury: â[The Trouble with Timestamps](https://aphyr.com/posts/299-the-trouble-with-timestamps),â *aphyr.com*, October 12, 2013.
1. Leslie Lamport: â[Time, Clocks, and the Ordering of Events in a Distributed System](https://www.microsoft.com/en-us/research/publication/time-clocks-ordering-events-distributed-system/),â *Communications of the ACM*, volume 21, number 7, pages 558â565, July 1978. [doi:10.1145/359545.359563](http://dx.doi.org/10.1145/359545.359563)
1. Sandeep Kulkarni, Murat Demirbas, Deepak Madeppa, et al.: â[Logical Physical Clocks and Consistent Snapshots in Globally Distributed Databases](http://www.cse.buffalo.edu/tech-reports/2014-04.pdf),â State University of New York at Buffalo, Computer Science and Engineering Technical Report 2014-04, May 2014.
1. Justin Sheehy: â[There Is No Now: Problems With Simultaneity in Distributed Systems](https://queue.acm.org/detail.cfm?id=2745385),â *ACM Queue*, volume 13, number 3, pages 36â41, March 2015. [doi:10.1145/2733108](http://dx.doi.org/10.1145/2733108)
1. Murat Demirbas: â[Spanner: Google's Globally-Distributed Database](http://muratbuffalo.blogspot.co.uk/2013/07/spanner-googles-globally-distributed_4.html),â *muratbuffalo.blogspot.co.uk*, July 4, 2013.
1. Dahlia Malkhi and Jean-Philippe Martin: â[Spanner's Concurrency Control](http://www.cs.cornell.edu/~ie53/publications/DC-col51-Sep13.pdf),â *ACM SIGACT News*, volume 44, number 3, pages 73â77, September 2013. [doi:10.1145/2527748.2527767](http://dx.doi.org/10.1145/2527748.2527767)
1. Manuel Bravo, Nuno Diegues, Jingna Zeng, et al.: â[On the Use of Clocks to Enforce Consistency in the Cloud](http://sites.computer.org/debull/A15mar/p18.pdf),â *IEEE Data Engineering Bulletin*, volume 38, number 1, pages 18â31, March 2015.
1. Spencer Kimball: â[Living Without Atomic Clocks](http://www.cockroachlabs.com/blog/living-without-atomic-clocks/),â *cockroachlabs.com*, February 17, 2016.
1. Cary G. Gray and David R. Cheriton: â[Leases: An Efficient Fault-Tolerant Mechanism for Distributed File Cache Consistency](https://web.archive.org/web/20230325205928/http://web.stanford.edu/class/cs240/readings/89-leases.pdf),â at *12th ACM Symposium on Operating Systems Principles* (SOSP), December 1989. [doi:10.1145/74850.74870](http://dx.doi.org/10.1145/74850.74870)
1. Todd Lipcon: â[Avoiding Full GCs in Apache HBase with MemStore-Local Allocation Buffers: Part 1](https://web.archive.org/web/20121101040711/http://blog.cloudera.com/blog/2011/02/avoiding-full-gcs-in-hbase-with-memstore-local-allocation-buffers-part-1/),â *blog.cloudera.com*, February 24, 2011.
1. Martin Thompson: â[Java Garbage Collection Distilled](http://mechanical-sympathy.blogspot.co.uk/2013/07/java-garbage-collection-distilled.html),â *mechanical-sympathy.blogspot.co.uk*, July 16, 2013.
1. Alexey Ragozin: â[How to Tame Java GC Pauses? Surviving 16GiB Heap and Greater](https://dzone.com/articles/how-tame-java-gc-pauses),â *dzone.com*, June 28, 2011.
1. Christopher Clark, Keir Fraser, Steven Hand, et al.: â[Live Migration of Virtual Machines](http://www.cl.cam.ac.uk/research/srg/netos/papers/2005-nsdi-migration.pdf),â at *2nd USENIX Symposium on Symposium on Networked Systems Design & Implementation* (NSDI), May 2005.
1. Mike Shaver: â[fsyncers and Curveballs](https://web.archive.org/web/20220107141023/http://shaver.off.net/diary/2008/05/25/fsyncers-and-curveballs/),â *shaver.off.net*, May 25, 2008.
1. Zhenyun Zhuang and Cuong Tran: â[Eliminating Large JVM GC Pauses Caused by Background IO Traffic](https://engineering.linkedin.com/blog/2016/02/eliminating-large-jvm-gc-pauses-caused-by-background-io-traffic),â *engineering.linkedin.com*, February 10, 2016.
1. David Terei and Amit Levy: â[Blade: A Data Center Garbage Collector](http://arxiv.org/pdf/1504.02578.pdf),â arXiv:1504.02578, April 13, 2015.
1. Martin Maas, Tim Harris, Krste AsanoviÄ, and John Kubiatowicz: â[Trash Day: Coordinating Garbage Collection in Distributed Systems](https://timharris.uk/papers/2015-hotos.pdf),â at *15th USENIX Workshop on Hot Topics in Operating Systems* (HotOS), May 2015.
1. â[Predictable Low Latency](http://cdn2.hubspot.net/hubfs/1624455/Website_2016/content/White%20papers/Cinnober%20on%20GC%20pause%20free%20Java%20applications.pdf),â Cinnober Financial Technology AB, *cinnober.com*, November 24, 2013.
1. Martin Fowler: â[The LMAX Architecture](http://martinfowler.com/articles/lmax.html),â *martinfowler.com*, July 12, 2011.
1. Flavio P. Junqueira and Benjamin Reed: *ZooKeeper: Distributed Process Coordination*. O'Reilly Media, 2013. ISBN: 978-1-449-36130-3
1. Enis Söztutar: â[HBase and HDFS: Understanding Filesystem Usage in HBase](http://www.slideshare.net/enissoz/hbase-and-hdfs-understanding-filesystem-usage),â at *HBaseCon*, June 2013.
1. Caitie McCaffrey: â[Clients Are Jerks: AKA How Halo 4 DoSed the Services at Launch & How We Survived](https://web.archive.org/web/20230128065851/http://caitiem.com/2015/06/23/clients-are-jerks-aka-how-halo-4-dosed-the-services-at-launch-how-we-survived/),â *caitiem.com*, June 23, 2015.
1. Leslie Lamport, Robert Shostak, and Marshall Pease: â[The Byzantine Generals Problem](https://www.microsoft.com/en-us/research/publication/byzantine-generals-problem/),â *ACM Transactions on Programming Languages and Systems* (TOPLAS), volume 4, number 3, pages 382â401, July 1982. [doi:10.1145/357172.357176](http://dx.doi.org/10.1145/357172.357176)
1. Jim N. Gray: â[Notes on Data Base Operating Systems](http://jimgray.azurewebsites.net/papers/dbos.pdf),â in *Operating Systems: An Advanced Course*, Lecture Notes in Computer Science, volume 60, edited by R. Bayer, R. M. Graham, and G. Seegmüller, pages 393â481, Springer-Verlag, 1978. ISBN: 978-3-540-08755-7
1. Brian Palmer: â[How Complicated Was the Byzantine Empire?](http://www.slate.com/articles/news_and_politics/explainer/2011/10/the_byzantine_tax_code_how_complicated_was_byzantium_anyway_.html),â *slate.com*, October 20, 2011.
1. Leslie Lamport: â[My Writings](http://lamport.azurewebsites.net/pubs/pubs.html),â *lamport.azurewebsites.net*, December 16, 2014. This page can be found by searching the web for the 23-character string obtained by removing the hyphens from the string `allla-mport-spubso-ntheweb`.
1. John Rushby: â[Bus Architectures for Safety-Critical Embedded Systems](http://www.csl.sri.com/papers/emsoft01/emsoft01.pdf),â at *1st International Workshop on Embedded Software* (EMSOFT), October 2001.
1. Jake Edge: â[ELC: SpaceX Lessons Learned](http://lwn.net/Articles/540368/),â *lwn.net*, March 6, 2013.
1. Andrew Miller and Joseph J. LaViola, Jr.: â[Anonymous Byzantine Consensus from Moderately-Hard Puzzles: A Model for Bitcoin](http://nakamotoinstitute.org/static/docs/anonymous-byzantine-consensus.pdf),â University of Central Florida, Technical Report CS-TR-14-01, April 2014.
1. James Mickens: â[The Saddest Moment](https://www.usenix.org/system/files/login-logout_1305_mickens.pdf),â *USENIX ;login: logout*, May 2013.
1. Evan Gilman: â[The Discovery of Apache ZooKeeperâs Poison Packet](http://www.pagerduty.com/blog/the-discovery-of-apache-zookeepers-poison-packet/),â *pagerduty.com*, May 7, 2015.
1. Jonathan Stone and Craig Partridge: â[When the CRC and TCP Checksum Disagree](https://web.archive.org/web/20220818235232/https://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.27.7611&rep=rep1&type=pdf),â at *ACM Conference on Applications, Technologies, Architectures, and Protocols for Computer Communication* (SIGCOMM), August 2000. [doi:10.1145/347059.347561](http://dx.doi.org/10.1145/347059.347561)
1. Evan Jones: â[How Both TCP and Ethernet Checksums Fail](http://www.evanjones.ca/tcp-and-ethernet-checksums-fail.html),â *evanjones.ca*, October 5, 2015.
1. Cynthia Dwork, Nancy Lynch, and Larry Stockmeyer: â[Consensus in the Presence of Partial Synchrony](https://dl.acm.org/doi/10.1145/42282.42283),â *Journal of the ACM*, volume 35, number 2, pages 288â323, April 1988. [doi:10.1145/42282.42283](http://dx.doi.org/10.1145/42282.42283)
1. Peter Bailis and Ali Ghodsi: â[Eventual Consistency Today: Limitations, Extensions, and Beyond](http://queue.acm.org/detail.cfm?id=2462076),â *ACM Queue*, volume 11, number 3, pages 55-63, March 2013. [doi:10.1145/2460276.2462076](http://dx.doi.org/10.1145/2460276.2462076)
1. Bowen Alpern and Fred B. Schneider: â[Defining Liveness](https://www.cs.cornell.edu/fbs/publications/DefLiveness.pdf),â *Information Processing Letters*, volume 21, number 4, pages 181â185, October 1985. [doi:10.1016/0020-0190(85)90056-0](http://dx.doi.org/10.1016/0020-0190(85)90056-0)
1. Flavio P. Junqueira: â[Dude, Whereâs My Metadata?](https://web.archive.org/web/20230604215314/https://fpj.systems/2015/05/28/dude-wheres-my-metadata/),â *fpj.me*, May 28, 2015.
1. Scott Sanders: â[January 28th Incident Report](https://github.com/blog/2106-january-28th-incident-report),â *github.com*, February 3, 2016.
1. Jay Kreps: â[A Few Notes on Kafka and Jepsen](http://blog.empathybox.com/post/62279088548/a-few-notes-on-kafka-and-jepsen),â *blog.empathybox.com*, September 25, 2013.
1. Thanh Do, Mingzhe Hao, Tanakorn Leesatapornwongsa, et al.: â[Limplock: Understanding the Impact of Limpware on Scale-out Cloud Systems](http://ucare.cs.uchicago.edu/pdf/socc13-limplock.pdf),â at *4th ACM Symposium on Cloud Computing* (SoCC), October 2013. [doi:10.1145/2523616.2523627](http://dx.doi.org/10.1145/2523616.2523627)
1. Frank McSherry, Michael Isard, and Derek G. Murray: â[Scalability! But at What COST?](http://www.frankmcsherry.org/assets/COST.pdf),â at *15th USENIX Workshop on Hot Topics in Operating Systems* (HotOS), May 2015.
[^è¯è1]: åè©©çºï¼Hey I just met you. The networkâs laggy. But hereâs my data. So store it maybe.Hey, ææ¹ç·¨èªãCall Me Maybeãæè©ï¼I just met you, And this is crazy, But here's my number, So call me, maybe?
------
| ä¸ä¸ç« | ç®é | ä¸ä¸ç« |
| ---------------------- | ------------------------------- | ------------------------------ |
| [第ä¸ç« ï¼äºå](ch7.md) | [è¨è¨è³æå¯éåæç¨](README.md) | [第ä¹ç« ï¼ä¸è´æ§èå
±è](ch9.md) |