Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
·Ö²¼Ê½´æ´¢Ëã·¨Ö®Raft Ò»ÖÂÐÔËã·¨
 
 
  2164  次浏览      30
2021-3-2
 
±à¼­ÍƼö:
±¾ÎÄÖ÷Òª½²½âÁ˸´ÖÆ×´Ì¬»ú/Replicated state machines¼°Raft Ëã·¨£¬Ï£Íû¶ÔÄúµÄѧϰÓÐËù°ïÖú¡£
±¾ÎÄÀ´×Ô³ÌÐòÔ±´ó±¾Óª£¬ÓÉ»ðÁú¹ûÈí¼þLinda±à¼­¡¢ÍƼö¡£

·Ö²¼Ê½ÏµÍ³ÖУ¬ÈçºÎ±£Ö¤¶à¸ö½ÚµãµÄ״̬һÖ£¿Raft Ò»ÖÂÐÔËã·¨Óë Paxos ²»Í¬£¬ºÅ³Æ¼òµ¥Ò×ѧ£¬ÇÒÒѾ­¹ã·ºÓ¦ÓÃÔÚÉú²úÖС£ÀýÈç k8s ºÍ CoreOS ÖÐʹÓÃµÄ etcd£»tikv ÖÐʹÓà Raft Íê³É·Ö²¼Ê½Í¬²½£»Redis Cluster ÖÐʹÓÃÀàËÆ Raft µÄÑ¡Ö÷»úÖÆµÈµÈ¡£½ñÌìÎÒÃÇÀ´Ò»Ì½¾¿¾¹°É¡£

¸´ÖÆ×´Ì¬»ú/Replicated state machines

¸´ÖÆ×´Ì¬»úµÄÏë·¨Êǽ«·þÎñÆ÷¿´³ÉÒ»¸ö״̬»ú£¬¶øÒ»ÖÂÐÔËã·¨µÄÄ¿µÄÊÇÈöą̀·þÎñÆ÷/״̬»úÄܹ»¼ÆËãµÃµ½ÏàͬµÄ״̬£¬Í¬Ê±£¬Èç¹ûÓв¿·Ö»úÆ÷å´»ú£¬¼¯Èº×÷Ϊһ¸öÕûÌåÒÀÈ»ÄܼÌÐø¹¤×÷¡£¸´ÖÆ×´Ì¬»úÒ»°ãͨ¹ý¸´ÖÆÈÕÖ¾£¨replicated log£©À´ÊµÏÖ£¬ÈçÏÂͼ£º

·þÎñÆ÷»á½«¿Í»§¶Ë·¢À´µÄÃüÁî´æ³ÉÈÕÖ¾£¬ÈÕÖ¾ÊÇÓÐÐòµÄ¡£¶ø·þÎñÆ÷״̬»úÖ´ÐÐÃüÁîµÄ½á¹ûÊÇÈ·¶¨µÄ£¬ÕâÑùÈç¹ûÿ̨·þÎñÆ÷µÄ״̬»úÖ´ÐеÄÃüÁîÊÇÏàͬµÄ£¬×´Ì¬»ú×îÖÕµÄ״̬Ҳ»áÊÇÏàͬµÄ£¬Êä³öµÄ½á¹ûÒ²»áÊÇÏàͬµÄ¡£¶øÈçºÎ±£Ö¤²»Í¬·þÎñÆ÷¼äµÄÈÕÖ¾ÊÇÒ»ÑùµÄÄØ£¿Õâ¾ÍÊÇÆäÖеġ°Ò»ÖÂÐÔÄ£¿é¡±µÄ¹¤×÷ÁË¡£

Ò»ÖÂÐÔÄ£¿é£¨consensus module£©ÔÚÊÕµ½¿Í»§¶ËµÄÃüÁîʱ£¨¢Ú£©£¬Ò»·½ÃæÒª½«ÃüÁîÌí¼Óµ½×Ô¼ºµÄÈÕÖ¾¶ÓÁÐÖУ¬Í¬Ê±ÐèÒªÓëÆäËü·þÎñÆ÷µÄÒ»ÖÂÐÔÄ£¿é¹µÍ¨£¬È·±£ËùÓеķþÎñÆ÷½«×îÖÕÓµÓÐÏàͬµÄÈÕÖ¾£¬¼´Ê¹ÓÐЩ·þÎñÆ÷¿ÉÄܹÒÁË¡£Êµ¼ùÖÐÖÁÉÙÐèÒª¡°´ó¶àÊý(´óÓÚÒ»°ë)¡±·þÎñÆ÷ͬ²½ÁËÃüÁî²ÅÈÏΪͬ²½³É¹¦ÁË¡£

Raft Ëã·¨

½ÓÏÂÈ¥»á´Ó 3 ¸ö·½Ãæ½²½â Raft Ëã·¨£º

Ñ¡Ö÷£¨Leader Election£©¡£Raft ÔÚͬһʱ¿ÌÖ»ÓÐÒ»¸öÖ÷½ÚµãÄܽÓÊÕдÃüÁî¡£

ÈÕÖ¾¸´ÖÆ£¨Log Replication£©¡£Raft ÈçºÎ½«½ÓÊÕµ½µÄÃüÁî¸´ÖÆµ½ÆäËü·þÎñÆ÷ÉÏ£¬Ê¹Æä±£³ÖÒ»Ö£¿

°²È«ÐÔ£¬ÎªÊ²Ã´ Raft ÔÚ¸÷ÖÖÇé¿öÏÂÒÀ¾ÉÄܱ£Ö¤¸÷·þÎñÆ÷µÄÈÕÖ¾Ò»ÖÂÐÔ£¿

»ù´¡¸ÅÄî

Ê×ÏÈÊǽڵãµÄ 3 ÖÖ״̬/½ÇÉ«£º

Follower/´Ó½Úµã²»·¢ÆðÇëÇ󣬵¥´¿ÏìÓ¦ Candidate ºÍ Leader µÄÇëÇó

Leader/Ö÷½Úµã¸ºÔðÏìÓ¦¿Í»§¶Ë·¢ÆðµÄÇëÇó£¬Èç¹û¿Í»§¶ËµÄÇëÇó·¢Ë͵½ Follower£¬ÇëÇó»á±»×ª·¢µ½Ö÷½Úµã

Candidate/ºòÑ¡½ÚµãÊÇÒ»ÖÖÖмä״̬£¬Ö»ÔÚÑ¡Ö÷ÆÚ¼ä´æÔÚ¡£

ËüÃǵÄת»»¹ØÏµÈçÏ£º

Æä´ÎÊÇÈÎÆÚ£¨term£©µÄ¸ÅÄî¡£Raft ½«Ê±¼äÇзֳɶà¸ö term£¬Ã¿¸ö term ÒÔÑ¡Ö÷¿ªÊ¼£¬Ñ¡Ö÷ÆÚ¼ä¸÷½Úµã³¢ÊÔµ±ÉÏÖ÷½Úµã£¬Ñ¡¾Ù½áÊøºó¿ªÊ¼Õý³£´¦Àí¿Í»§¶ËµÄÇëÇó¡£Èçͼ£º

Raft »á±£Ö¤Ã¿Ò»¸ö term ÖÐÖÁ¶àÖ»ÓÐÒ»¸ö leader£¬Èç¹ûÑ¡Ö÷ʱѡƱ±»·ÖÉ¢µ¼ÖÂûÓнڵã»ñµÃ¶àÊýƱ£¨Èç t3£©£¬Ôò»á¿ªÊ¼ÐÂÒ»ÂÖÑ¡¾Ù¡£

term ¾ÍÏñÂß¼­Éϵġ°Ê±¼ä¡±£¬ÓÃÀ´¼Ç¼ºÍ±È½Ï¸÷½ÚµãµÄ¡°½ø¶È¡±¡£Èç¹ûij¸ö½ÚµãÊÕµ½ÐÅϢʱ·¢ÏÖ×Ô¼ºµÄ term ÊÇÂäºóµÄ£¬Ëü»áÁ¢¼´½«×Ô¼ºµÄ term ¸üÐÂΪ¸ü´óµÄ term£»Í¬Ê±½Úµã²»»áÀí²Ç term ±È×Ô¼ºÐ¡µÄÏûÏ¢£»ÁíÍâÈç¹ûÖ÷½ÚµãÊÕµ½ term ±È×Ô¼º´óµÄÏûÏ¢£¬Ôò»áÁ¢Âí½øÈë follower µÄ״̬¡£

ÀýÈçÓÉÓÚÍøÂçÇé¿ö²»¼Ñ£¬Ò»¸öÖ÷½Úµã A ÓëÆäËü½ÚµãʧÁª£¬ÆäËü½ÚµãÑ¡ÁËÒ»¸öеÄÖ÷½Úµã B£¬µ±ÍøÂç»Ö¸´Õý³£Ê±£¬¾ÉÖ÷½Úµã A ÊÕµ½Ö÷½Úµã B µÄÏûϢʱ£¬Ëü»áÅжÏÐÂÖ÷½Úµã B µÄ term ´óÓÚ×Ô¼º£¬ËµÃ÷×Ô¼º´í¹ýÁËһЩʼþ£¬Òò´ËÑ¡Ôñ·ÅÆú×Ô¼ºµÄÖ÷½ÚµãÉí·Ý¡£

Ñ¡Ö÷/Leader Election

½ÚµãÆô¶¯Ê±£¬Ä¬ÈÏ´¦ÓÚ Follower µÄ״̬£¬ËùÒÔ¿ªÊ¼Ê±ËùÓнڵã¾ùÊÇ Follower£¬ÄÇôʲôʱºò´¥·¢Ñ¡Ö÷ÄØ£¿Raft Óá°ÐÄÌø¡±µÄ·½Ê½À´±£³ÖÖ÷´Ó½ÚµãµÄÁªÏµ£¬Èç¹û³¤Ê±¼äûÓÐÊÕµ½Ö÷½ÚµãµÄÐÄÌø£¬Ôò¿ªÊ¼Ñ¡Ö÷¡£ÕâÀï»áÉæ¼°µ½Á½¸öʱ¼ä£º

ÐÄÌø¼ä¸ô£¬Ö÷½Úµã¸ô¶à³¤Ê±¼ä·¢ËÍÐÄÌøÐÅÏ¢

µÈ´ýʱ¼ä(election timeout)£¬Èç¹û³¬¹ýÕâ¸öʱ¼äÈÔȻûÓÐÊÕµ½ÐÄÌø£¬ÔòÈÏΪÖ÷½Úµãå´»ú¡£Ò»°ãÿ¸ö½Úµã¸÷×ÔÔÚ 150¡«300ms ¼äËæ»úȡֵ¡£

µ±Ò»¸ö½ÚµãÔڵȴýʱ¼äÄÚûÓÐÊÕµ½Ö÷½ÚµãµÄÐÄÌøÐÅÏ¢£¬ËüÊ×ÏȽ«×Ô¼º±£´æµÄ term Ôö¼Ó 1 ²¢½øÈë Candidate ״̬¡£´ËʱËü»áÏÈͶƱ¸ø×Ô¼º£¬È»ºó²¢Ðз¢ËÍ RequestVoteÏûÏ¢¸øÆäËüËùÓнڵ㣬ÇëÇóÕâЩ½ÚµãͶƱ¸ø×Ô¼º¡£È»ºóµÈ´ýÖ±µ½ÒÔÏ 3 ÖÖÇéÐÎÖ®Ò»·¢Éú£º

ÊÕµ½´óÓÚÒ»°ëµÄƱ£¬µ±Ñ¡ÎªÖ÷½Úµã

ÓÐÆäËü½Úµãµ±Ñ¡ÁËÖ÷½Úµã£¬´Ëʱ»áÊÕµ½ÐµÄÖ÷½ÚµãµÄÐÄÌø

¹ýÁËÒ»¶Îʱ¼äºóÒÀ¾ÉûÓе±Ñ¡£¬´Ëʱ¸Ã½Úµã»á³¢ÊÔ¿ªÊ¼ÐÂÒ»ÂÖÑ¡¾Ù

¶ÔÓÚµÚÒ»ÖÖÇéÐΣ¬Candidate ½ÚµãÐèÒªÊÕµ½¼¯ÈºÖÐÓë×Ô¼º term ÏàͬµÄËùÓнڵãÖдóÓÚÒ»°ëµÄƱÊý£¨µ±È»Èç¹û½Úµã term ±È×Ô¼º´ó£¬ÊDz»»áÀí²Ç×Ô¼ºµÄÑ¡¾ÙÏûÏ¢µÄ£©¡£½ÚµãͶƱʱ»á²ÉÈ¡Ïȵ½ÏȵõÄÔ­Ôò£¬¶ÔÓÚij¸ö term£¬×î¶àͶ³öһƱ£¨ºóÃæ»¹»áÔÙ¶ÔͶƱ¼ÓһЩÏÞÖÆ£©¡£ÕâÑùÄܱ£Ö¤Ä³¸ö term ÖУ¬×î¶àÖ»»á²úÉúÒ»¸ö leader¡£µ±Ò»¸ö Candidate ±ä³ÉÖ÷½Úµãºó£¬Ëü»áÏòÆäËüËùÓнڵ㷢ËÍÐÄÌøÐÅÏ¢£¬ÕâÑùÆäËüµÄ Candidate Ò²»á±ä³É Follower¡£

µÚ¶þÖÖÇéÐÎÊÇÔڵȴýͶƱµÄ¹ý³ÌÖУ¬Candidate ÊÕµ½ÆäËüÖ÷½ÚµãµÄÐÄÌøÐÅÏ¢£¨Ö»ÓÐÖ÷½Úµã²Å»áÏòÆäËü½Úµã·¢ÐÄÌø£©£¬ÇÒÐÅÏ¢Öаüº¬µÄ term ´óÓÚµÈÓÚ×Ô¼ºµÄ term£¬Ôòµ±Ç°½Úµã·ÅÆú¾ºÑ¡£¬½øÈë Follower ״̬¡£µ±È»£¬ÈçǰËù˵£¬Èç¹ûÐÄÌøÖÐµÄ term СÓÚ×Ô¼º£¬Ôò²»ÓèÀí»á¡£

µÚÈýÖÖÇéÐÎÒ»°ã·¢ÉúÔÚ¶à¸ö Follower ͬʱ´¥·¢Ñ¡¾Ù£¬¶ø¸÷½ÚµãµÄͶƱ±»·ÖÉ¢ÁË£¬µ¼ÖÂûÓÐ Candidate Äܵõ½¶àÊýƱ¡£³¬¹ýͶƱµÄµÈ´ýʱ¼äºó£¬½Úµã´¥·¢ÐÂÒ»ÂÖÑ¡¾Ù¡£ÀíÂÛÉÏ£¬Ñ¡¾ÙÓпÉÄÜÓÀԶƽƱ£¬Raft ÖÐÓÉÓÚ¸÷¸ö½ÚµãµÄ³¬Ê±Ê±¼äÊÇËæ»úµÄ£¬Êµ¼ÊÉÏÆ½Æ±²»Ì«»áÓÀÔ¶³ÖÐøÏÂÈ¥¡£

ÈÕÖ¾¸´ÖÆ/Log Replication

Log Replication ·ÖΪÁ½¸öÖ÷Òª²½Ö裺¸´ÖÆ/Replication ºÍ Ìá½»/Commit¡£µ±Ò»¸ö½Úµã±»Ñ¡ÎªÖ÷½Úµãºó£¬Ëü¿ªÊ¼¶ÔÍâÌṩ·þÎñ£¬ÊÕµ½¿Í»§¶ËµÄ command ºó£¬Ö÷½Úµã»áÊ×ÏȽ« command Ìí¼Óµ½×Ô¼ºµÄÈÕÖ¾¶ÓÁÐÖУ¬È»ºó²¢Ðеؽ«ÏûÏ¢·¢Ë͸øÆäËüËùÓеĽڵ㣬ÔÚÈ·±£ÏûÏ¢±»°²È«µØ¸´ÖÆ£¨ÏÂÎĽâÊÍ£©ºó£¬Ö÷½Úµã»á½«¸ÃÏûÏ¢Ìá½»µ½×´Ì¬»úÖУ¬²¢·µ»Ø×´Ì¬»úÖ´ÐеĽá¹û¡£Èç¹ûfollower ¹ÒÁË»òÒòÎªÍøÂçÔ­ÒòÏûÏ¢¶ªÊ§ÁË£¬Ö÷½Úµã»á²»¶ÏÖØÊÔÖ±µ½ËùÓдӽڵã×îÖճɹ¦¸´ÖƸÃÏûÏ¢¡£

ÈÕÖ¾½á¹¹Ê¾ÀýÈçÏ£º

ÈÕÖ¾ÓÉÐí¶àÌõÄ¿£¨log entry£©×é³É£¬ÌõĿ˳Ðò±àºÅ¡£ÌõÄ¿°üº¬ËüÉú³Éʱ½ÚµãËùÔÚµÄ term £¨Ð¡·½¸ñÖÐÉÏ·½µÄÊý×Ö£©£¬ÒÔ¼°ÈÕÖ¾µÄÄÚÈÝ¡£µ±Ò»¸öÌõÄ¿±»ÈÏΪ°²È«µØ±»¸´ÖÆ£¬ÇÒÌá½»µ½×´Ì¬»úʱ£¬ÎÒÃÇÈÏΪËü´¦ÓÚ¡°ÒÑÌá½»£¨committed£©¡±×´Ì¬¡£

ÊÇ·ñ½«Ò»¸öÌõÄ¿Ìá½»µ½×´Ì¬»úÊÇÓÉÖ÷½Úµã¾ö¶¨µÄ¡£Raft Òª±£Ö¤Ìá½»µÄÌõÄ¿»á×îÖÕ±»ËùÓеĽڵãÖ´ÐС£µ±Ö÷½ÚµãÅжÏÒ»¸öÌõÄ¿ÒѾ­±»¸´ÖƵ½´ó¶àÊý½Úµãʱ£¬¾Í»áÌá½» /Commit¸ÃÌõÄ¿£¬Ìá½»Ò»¸öÌõÄ¿µÄͬʱ»áÌá½»¸ÃÌõĿ֮ǰµÄËùÓÐÌõÄ¿£¬°üÀ¨ÄÇЩ֮ǰÓÉÆäËüÖ÷½Úµã´´½¨µÄÌõÄ¿£¨»¹ÓÐÐ©ÌØÊâÇé¿öÏÂÃæ»áÌᣩ¡£Ö÷½Úµã»á¼Ç¼µ±Ç°Ìá½»µÄÈÕÖ¾±àºÅ (log index)£¬²¢ÔÚ·¢ËÍÐÄÌøÊ±´øÉϸÃÐÅÏ¢£¬ÕâÑùÆäËü½Úµã×îÖÕ»áͬ²½Ìá½»ÈÕÖ¾¡£

ÉÏÃæËµµÄÊÇ¡°Ìá½»¡±£¬ÄÇô¡°¸´ÖÆ¡±ÊÇÈçºÎ½øÐеģ¿ÔÚÏÖʵÇé¿öÏ£¬Ö÷´Ó½ÚµãµÄÈÕÖ¾¿ÉÄܲ»Ò»Ö£¨ÀýÈçÔÚÏûÏ¢µ½´ï´Ó½ÚµãǰÖ÷½Úµã¹ÒÁË£¬¶ø´Ó½Úµã±»Ñ¡ÎªÁËеÄÖ÷½Úµã£¬´ËʱÖ÷´Ó½ÚµãµÄÈÕÖ¾²»Ò»Ö£©¡£Raft Ëã·¨ÖУ¬Ö÷½ÚµãÐèÒª´¦Àí²»Ò»ÖµÄÇé¿ö£¬ËüÒªÇóËùÓÐµÄ´Ó½Úµã¸´ÖÆ×Ô¼ºµÄËùÓÐÈÕÖ¾£¨µ±È»ÏÂһС½Ú»á½éÉܶîÍâµÄÏÞÖÆ£¬±£Ö¤¸´ÖÆÊǰ²È«µÄ£©¡£

Òª¸´ÖÆËùÓÐÈÕÖ¾£¬¾ÍÒªÏÈÕÒµ½ÈÕÖ¾¿ªÊ¼²»Ò»ÖµÄλÖã¬ÈçºÎ×öµ½ÄØ£¿Raft µ±Ö÷½Úµã½ÓÊÕµ½Ð嵀 command ʱ£¬»á·¢ËÍ AppendEntries ÈÃ´Ó½Úµã¸´ÖÆÈÕÖ¾£¬²»Ò»ÖµÄÇé¿öÒ²»áÔÚÕâʱ±»´¦Àí£¨AppendEntries ÏûϢͬʱ»¹¼æÖ°×÷ΪÐÄÌøÐÅÏ¢£©¡£ÏÂÃæÊÇÈÕÖ¾²»Ò»ÖµÄʾÀý£º

Ö÷½ÚµãÐèҪΪÿ¸ö´Ó½Úµã¼Ç¼һ¸ö nextIndex£¬×÷Ϊ¸Ã´Ó½ÚµãÏÂÒ»ÌõÒª·¢Ë͵ÄÈÕÖ¾µÄ±àºÅ¡£µ±Ò»¸ö½Úµã¸Õ±»Ñ¡ÎªÖ÷½Úµãʱ£¬ÎªËùÓдӽڵãµÄ nextIndex ³õʼ»¯×Ô¼º×î´óÈÕÖ¾±àºÅ¼Ó 1£¨ÈçÉÏͼʾÀýÔòΪ 11£©¡£½Ó×ÅÖ÷½Úµã·¢ËÍ AppendEntries ¸ø´Ó½Úµã£¬´Ëʱ´Ó½Úµã»á½øÐÐÒ»ÖÂÐÔ¼ì²é£¨Consistency Check£©¡£

ËùνһÖÂÐÔ¼ì²é£¬Ö¸µÄÊǵ±Ö÷½Úµã·¢ËÍ AppendEntries ÏûϢ֪ͨ´Ó½ÚµãÌí¼ÓÌõĿʱ£¬ÐèÒª½«ÐÂÌõÄ¿ A ֮ǰµÄÄǸöÌõÄ¿ B µÄ log index ºÍ term£¬ÕâÑù£¬µ±´Ó½ÚµãÊÕµ½ÏûϢʱ£¬¾Í¿ÉÒÔÅжÏ×Ô¼ºµÚlog index ÌõÈÕÖ¾µÄ term ÊÇ·ñÓë B µÄ term Ïàͬ£¬Èç¹û²»ÏàͬÔò¾Ü¾ø¸ÃÏûÏ¢£¬Èç¹ûÏàͬÔòÌí¼ÓÌõÄ¿ A¡£

Ö÷½ÚµãµÄÏûÏ¢±»Ä³¸ö´Ó½Úµã¾Ü¾øºó£¬Ö÷½Úµã»á½«¸Ã´Ó½ÚµãµÄ nextIndex ¼õÒ»ÔÙÖØÐ·¢ËÍAppendEntries ÏûÏ¢¡£²»¶ÏÖØÊÔ£¬×îÖÕ¾ÍÄÜÕÒÖ÷´Ó½ÚµãÈÕÖ¾Ò»Ö嵀 log index£¬²¢ÓÃÖ÷½ÚµãµÄÐÂÈÕÖ¾¸²¸Ç´Ó½ÚµãµÄ¾ÉÈÕÖ¾¡£µ±È»£¬Èç¹û´Ó½Úµã½ÓÊÕ AppendEntries ÏûÏ¢ºó£¬Ö÷½Úµã»á½« nextIndex Ôö¼ÓÒ»£¬ÇÒÈç¹ûµ±Ç°µÄ×îРlog index ´óÓÚ nextIndex Ôò»á¼ÌÐø·¢ËÍÏûÏ¢¡£

ͨ¹ýÒÔÉϵĻúÖÆ£¬Raft ¾ÍÄܱ£Ö¤£º

Èç¹ûÁ½¸öÈÕÖ¾ÌõÄ¿ÓÐÏàͬµÄ log index ºÍ term£¬ÔòËüÃǵÄÄÚÈÝÒ»¶¨Ïàͬ¡£

Èç¹ûÁ½¸ö½ÚµãÖеÄÁ½¸öÌõÄ¿ÓÐÏàͬµÄ log index ºÍ term£¬ÔòËüÃÇ֮ǰµÄËùÓÐÈÕÖ¾Ò»¶¨Ïàͬ¡£

°²È«ÐÔ

Òª±£Ö¤ËùÓеÄ״̬»úÓÐÒ»ÑùµÄ״̬£¬µ¥Æ¾Ç°¼¸½ÚµÄËã·¨»¹²»¹»¡£ÀýÈçÓÐ 3 ¸ö½Úµã A¡¢B¡¢ C£¬Èç¹û A ΪÖ÷½ÚµãÆÚ¼ä C ¹ÒÁË£¬´ËʱÏûÏ¢±»¶àÊý½Úµã£¨A£¬B£©½ÓÊÕ£¬ËùÒÔ A »áÌá½»ÕâЩÈÕÖ¾¡£´ËʱÈô A ¹ÒÁË£¬¶ø C »Ö¸´ÇÒ±»Ñ¡ÎªÖ÷½Úµã£¬Ôò A ÒѾ­Ìá½»µÄÈÕÖ¾»á±» C µÄÈÕÖ¾¸²¸Ç£¬´Ó¶øµ¼ÖÂ״̬»úµÄ״̬²»Ò»Ö¡£

Ñ¡Ö÷µÄÏÞÖÆ

ÔÚËùÓеÄÖ÷´Ó½á¹¹µÄÒ»ÖÂÐÔËã·¨ÖУ¬Ö÷½Úµã×îÖÕ¶¼±ØÐë°üº¬ËùÓÐÌá½»µÄÈÕÖ¾¡£ÓÐЩËã·¨Ôڴӽڵ㲻°üº¬ËùÓÐÒÑÌá½»ÈÕÖ¾µÄÇé¿öÏ£¬ÒÀ¾ÉÔÊÐíËüµ±Ñ¡ÎªÖ÷½Úµã£¬Ö®ºó´Ó½Úµã»á½«ÕâЩÈÕ־ͬ²½µ½Ö÷½ÚµãÉÏ¡£µ«ÊÇ Raft ²ÉÓÃÁ˼òµ¥µÄ·½Ê½£¬Ö»ÔÊÐíÄÇЩ°üº¬ËùÓÐÒÑÌá½»ÈÕÖ¾µÄ½Úµãµ±Ñ¡ÎªÖ÷½Úµã¡£

×¢Òâµ½½Úµãµ±Ñ¡Ö÷½ÚµãÒªÇóµÃµ½¶àÊýƱ£¬Í¬Ê±Ò»¸öÈÕÖ¾±»Ìá½»µÄǰÌáÌõ¼þÊÇËü±»¶àÊý½Úµã½ÓÊÕ£¬×ÛºÏÕâÁ½µã£¬ËµÃ÷Ñ¡¾ÙÒª²úÉú½á¹û£¬ÔòÖÁÉÙÓÐÒ»¸ö½ÚµãÔÚ³¡£¬ËüÊǰüº¬Á˵±Ç°ÒѾ­Ìá½»µÄËùÓÐÈÕÖ¾µÄ¡£

Òò´Ë£¬Raft Ëã·¨ÔÚ´¦ÀíÒªÇóÑ¡¾ÙµÄ RequestVote ÏûϢʱ×öÁËÏÞÖÆ£ºÏûÏ¢ÖлáЯ´ø Candidate µÄ log ÏûÏ¢£¬¶øÔÚͶƱʱ£¬Follower »áÅÐ¶Ï Candidate µÄÏûÏ¢ÊDz»ÊDZÈ×Ô¼º¡°¸üС±£¨ÏÂÎ͍Ò壩£¬Èç¹û²»Èç×Ô¼º¡°Ð¡±£¬Ôò¾Ü¾øÎª¸Ã Candidate ͶƱ¡£

Raft »áÊ×ÏÈÅжÏÁ½¸ö½Úµã×îºóÒ»¸ö log entry µÄ term£¬Äĸö½ÚµãµÄ¶ÔÓ¦µÄ term ¸ü´óÔò´ú±í¸Ã½ÚµãµÄÈÕÖ¾¡°¸üС±£»Èç¹û term µÄ´óСһÖ£¬ÔòË­µÄ log entry ¸ü¶àË­¾Í¡°¸üС±¡£

×¢Ò⣬¼ÓÁËÕâ¸öÏÞÖÆºó£¬Ñ¡³öµÄ½Úµã²»»áÊÇ¡°×îеġ±£¬¼´°üº¬ËùÓÐÈÕÖ¾£»µ«»áÊÇ×㹻еģ¬ÖÁÉٱȰëÊý½Úµã¸üУ¬¶øÕâÒ²Òâζ×ÅËüËù°üº¬µÄÈÕÖ¾¶¼ÊÇ¿ÉÒÔ±»Ìá½»µÄ£¨µ«²»Ò»¶¨ÒѾ­Ìá½»£©¡£

Ìύǰһ¸ö term µÄÈÕÖ¾

ÕâÀïÎÒÃÇÒªÌÖÂÛÒ»¸öÌØ±ðµÄÇé¿ö¡£ÎÒÃÇÖªµÀÒ»¸öÖ÷½ÚµãÈç¹û·¢ÏÖ×Ô¼ºÈÎÆÚ£¨term£©ÄÚµÄijÌõÈÕÖ¾ÒѾ­±»´æ´¢µ½Á˶àÊý½ÚµãÉÏ£¬Ö÷½Úµã¾Í»áÌá½»ÕâÌõÈÕÖ¾¡£µ«Èç¹ûÖ÷½ÚµãÔÚÌύ֮ǰ¾Í¹ÒÁË£¬Ö®ºóµÄÖ÷½Úµã»á³¢ÊÔ°ÑǰÈÎδÌá½»µÄÕâЩÈÕÖ¾¸´ÖƵ½ËùÓÐ×Ó½ÚµãÉÏ£¬µ«Óë֮ǰ²»Í¬£¬½ö½öÅжÏÕâЩÈÕÖ¾±»¸´ÖƵ½¶àÊý½Úµã£¬ÐµÄÖ÷½Úµã²¢²»ÄÜÁ¢ÂíÌá½»ÕâЩÈÕÖ¾£¬ÏÂÃæ¾ÙÒ»¸ö·´Àý£º

ÔÚ (a) ʱ£¬S1 µ±Ñ¡²¢½«ÈÕÖ¾±àºÅΪ 2 µÄÈÕÖ¾¸´ÖƵ½ÆäËü½ÚµãÉÏ¡£ÔÚ (b) ʱ£¬S1 å´»ú£¬S5 »ñµÃÀ´×Ô S3 Óë S4 µÄͶƱ£¬µ±Ñ¡Îª term 3 µÄÖ÷½Úµã£¬´ËʱÊÕµ½À´×Ô¿Í»§¶ËµÄÏûÏ¢£¬Ð´Èë×Ô¼º±àºÅΪ 2 µÄÈÕÖ¾¡£(c) ÆÚ¼ä£¬S5 å´»ú¶ø S1 ÖØÆôÍê±Ï£¬ËüÖØÐµ±Ñ¡ÎªÖ÷½Úµã²¢¼ÌÐø½«×Ô¼ºµÄÈÕÖ¾¸´ÖƸø S3£¬´Ëʱ±àºÅΪ 2 ÇÒ term Ϊ 2 µÄÈÕÖ¾ÒѾ­±»¸´ÖƵ½¶àÊý½Úµã£¬µ«Ëü»¹²»Äܱ»Ìá½»¡£Èç¹û´Ëʱ S1 å´»ú£¬Èç (d) Ëùʾ£¬´Ëʱ S5 »ñµÃÀ´×Ô S2 S3 S4 µÄͶƱ£¬µ±Ñ¡ÐµÄÖ÷½Úµã£¬´ËʱËü½«ÓÃ×Ô¼ºµÄ±àºÅΪ 2£¬term Ϊ 3 µÄÈÕÖ¾¸²¸ÇÆäËü½ÚµãµÄÈÕÖ¾¡£¶øÈç¹û S1 ¼ÌÐø´æ»î£¬ÇÒÔÚ×Ô¼ºµÄÈÎÆÚÄÚ½«Ä³ÌõÈÕÖ¾¸´ÖƵ½¶àÊý½Úµã£¬Èç (e) Ëùʾ£¬Ôò´Ëʱ S5 ÒѾ­²»¿ÉÄܼÌÐøµ±Ñ¡ÎªÖ÷½Úµã£¬Òò´Ë¸ÃÈÕ־֮ǰµÄËùÓÐÈÕÖ¾¾ù¿É±»Ìá½»£¨°üÀ¨Ç°Èδ´½¨µÄ£¬±àºÅ 2 µÄÈÕÖ¾£©¡£

ÉÏÀýÖÐµÄ (c) ºÍ (d) ˵Ã÷ÁË£¬¼´Ê¹Ç°ÈεÄÈÕÖ¾ÒѾ­±»¸´ÖƵ½¶àÊý½ÚµãÉÏ£¬ËüÒÀÈ»¿ÉÄܱ»¸²¸Ç¡£Òò´Ë Raft ²¢²»Í¨¹ý¼ÆËãǰÈÎÈÕÖ¾µÄ¸´ÖÆ´ÎÊýÀ´ÅжÏÊÇ·ñÌá½»ÕâЩÈÕÖ¾£¬ Raft Ö»¶Ô×Ô¼ºÈÎÆÚÄÚµÄÈÕÖ¾¼ÆÊý²¢ÔÚ¸´ÖƵ½¶àÊý½Úµãʱ½øÐÐÌá½»£¬ÇÒÔÚÌá½»ÕâÌõÈÕÖ¾µÄͬʱÌύ֮ǰµÄËùÓÐÈÕÖ¾¡£

Raft Ëã·¨»á³öÏÖÕâ¸ö¶îÍâµÄÎÊÌ⣬ÊÇÒòΪËüÔÚ¸´ÖÆÇ°ÈεÄÈÕ־ʱ£¬»á±£ÁôǰÈ뵀 term£¬¶øÆäËüÒ»ÖÂÐÔËã·¨»áΪÕâЩÈÕ־ʹÓÃÐ嵀 term¡£Raft Ëã·¨µÄÓÅÊÆÔÚÓÚ·½±ãÍÆÀíÈÕÖ¾µÄÐγɹý³Ì£¬Í¬Ê±ÐµÄÖ÷½ÚµãÐèÒª·¢Ë͵ÄǰÈÎÈÕÖ¾ÊýÄ¿»á¸üÉÙ¡£

°²È«ÐÔ˵Ã÷

Raft Ëã·¨µÄ°²È«ÐÔÊǾ­¹ýÀíÂÛÖ¤Ã÷µÄ£¬Õⲿ·Ö²©Ö÷²»ÊìϤÏà¹ØÁìÓò£¬Ö»µÃÇë´ó¼Ò×ÔÐп´Ô­ÂÛÎÄÁË¡£

Follower Óë Candidate å´»ú

Õⲿ·Ö Raft µÄ´¦Àí·Ç³£¼òµ¥£¬Èç¹û Follower »ò Candidate å´»ú£¬Ö÷½Úµã»á²»¶Ï½øÐÐÖØÊÔ£¬¼´²»¹Ü¹Ò²»¹Ò¶¼ÕÕ³£·¢ËÍ AppendEntries ÏûÏ¢¡£ÕâÑùµ± Follower »ò Candidate »Ö¸´Ö®ºó£¬ÈÕÖ¾ÈÔÄܱ»ÕýÈ·¸´ÖÆ¡£ÓÐʱ Follower »á´¦ÀíÏûϢȴÔÚÏìӦǰ崻ú£¬´ËʱÓÉÓÚ Raft Ëã·¨ÊÇÃݵȵģ¬Òò´ËÖØ¸´·¢ËÍҲûÓйØÏµ¡£

Ë㷨α´úÂë

ÏÂͼÀ´Ô´ÓÚÔ­ÂÛÎÄ£º

³ÉÔ±±ä¸ü

¼ÙÉèÒѾ­ÓÐÁËÒ»¸ö Raft ¼¯Èº£¬ÏÖÔÚÒªÍù¼¯ÈºÖÐÔö¼Ó/ÒÆ³ýÈô¸É¸ö½Úµã£¬ÒªÈçºÎʵÏÖ£¿

Ë«¶àÊýÅÉÎÊÌâ

Ò»ÖÖ·½·¨ÊÇÏÈÍ£Ö¹ËùÓнڵ㣬ÐÞ¸ÄÅäÖÃÔö¼ÓеĽڵ㣬ÔÙÖØÆôËùÓнڵ㣬µ«ÊÇÕâÑù·þÎñÆðͣʱ¾Í»áÖжϷþÎñ£¬Í¬Ê±Ò²¿ÉÄÜÔö¼ÓÈËΪ²Ù×÷ʧÎóµÄ·çÏÕ¡£ÁíÒ»ÖÖ·½·¨ÅäÖúÃеĽڵãÖ±½Ó¼ÓÈ뼯Ⱥ£¬ÕâÑùÒ²»á³öÎÊÌ⣺ÔÚij¸öʱ¿ÌʹÓò»Í¬ÅäÖõÄÁ½²¿·Ö½Úµã¿ÉÄÜ»á¸÷×ÔÑ¡³öÒ»¸öÖ÷½Úµã¡£ÈçÏÂͼ£º

ͼÖÐÂÌɫΪ¾ÉµÄÅäÖã¬À¶É«ÎªÐµÄÅäÖã¬ÔÚÖмäµÄij¸öʱ¿Ì£¬Server 1/2/3 ¿ÉÄÜ»áÑ¡³öÒ»¸öÖ÷½Úµã£¬¶ø Server 3/4/5 ¿ÉÄÜ»áÑ¡³öÁíÒ»¸ö£¬´Ó¶øÆÆ»µÁËÒ»ÖÂÐÔ¡£

³ÉÔ±±ä¸üËã·¨

Ô­°æÂÛÎÄ Ìá³öÁËÒ»¸ö±È½Ï¸´ÔÓµÄËã·¨£¬ÀûÓÃÒ»¸öÖмäµÄ¹ý¶È״̬À´´Ó C_old ¹ý¶Èµ½ C_new £¨ÕâÀïµÄ C_xxx Ö¸µÄÊdzÉÔ±µÄÅäÖã©£¬ÔÚ×÷ÕߵIJ©Ê¿ÂÛÎÄÖÐÖ¸³öÁËÒ»¸ö¸ü¼òµ¥µÄ·½·¨¡£×÷Õß·¢ÏÖ£¬Èç¹ûÒ»´ÎÖ»Ôö¼Ó»ò¼õÉÙÒ»¸ö½Úµã£¬ÄÇô²¢²»»á³öÏÖÉÏÃæËµµÄÁ½¸ö¶àÊýÅɵÄÎÊÌ⡣ʾÀýÈçÏ£º

ÉÏͼµÄ 4 ÖÖÇé¿ö·Ö±ð´ú±íԭʼ½ÚµãÊýÎªÆæÊýºÍżÊýµÄÇé¿öÏ£¬Ìí¼Ó»òÒÆ³ýÒ»¸ö½Úµãʱ¿ÉÄܲúÉúµÄ¡°´ó¶àÊý½Úµã¡±µÄ·Ö×éÇé¿ö¡£×¢Òâµ½ËùÓеķÖ×é¶¼ÖÁÉÙ»áÒ»¸ö½Úµã»á³öÏÖÔÚÁ½¸ö·Ö×éÖУ¬ÄÇô£¬Èç¹û¸Ã½ÚµãÊÇÖ÷½Úµã£¬ÔòÆäËüËùÓнڵã¾ù²»¿ÉÄܵ±Ñ¡Ö÷½Úµã£»Èç¹û¸Ã½Úµã²»ÊÇÖ÷½Úµã£¬ÔòËüÖÁÉÙÓ¦¸ÃͶƱ¸øÆäÖÐÒ»¸ö·Ö×éÖÐµÄÆäËü½Úµã£¬µ«ÕâÑùÒ»À´ÁíÒ»¸ö·Ö×é¾Í´ïµ½²»µ½Æ±ÊýÀ´²úÉúеÄÖ÷½ÚµãÁË¡£Òò´ËÔÚÖ»Ôö¼Ó/¼õÉÙÒ»¸ö½ÚµãµÄÇé¿öÏ£¬²»¿ÉÄÜͬʱ²úÉúÁ½¸öÖ÷½Úµã¡£

µ±Ö÷½ÚµãÊÕµ½¶Ôµ±Ç°¼¯Èº£¨C_old£©ÐÂÔö/ÒÆ³ý½ÚµãµÄÇëÇóʱ£¬Ëü»á½«Ðµļ¯ÈºÅäÖã¨C_new£©×÷ΪһÌõеÄÈÕÖ¾¼ÓÈëµ½¶ÓÁÐÖУ¬²¢ÓÃÉÏÎÄÌáµ½µÄ»úÖÆ¸´ÖƵ½ÆäËü¸÷¸ö½Úµã¡£µ±Ò»¸ö½ÚµãÊÕµ½ÐµÄÈÕ־ʱ£¬ÈÕÖ¾ÖÐµÄ C_new »áÁ¢¼´ÉúЧ£¬¼´¸Ã½ÚµãµÄÈÕÖ¾»á±»¸´ÖƵ½ C_new ÖÐÅäÖÃµÄÆäËü½Úµã£¬ÇÒÈÕÖ¾ÊÇ·ñ±»Ìá½»Ò²ÒÔ C_new ÖÐÖ¸¶¨µÄ½Úµã×÷ΪÒÀ¾Ý¡£ÕâÒâζ׎ڵ㲻ÐèÒªµÈ C_new ÈÕÖ¾±»Ìá½»ºó²Å¿ªÊ¼ÆôÓà C_new£¬ÇÒÿ¸ö½Úµã×ÜÊÇʹÓÃËüµÄÈÕÖ¾ÖÐ×îеÄÅäÖá£

µ±Ö÷½ÚµãÌá½» C_new ÈÕÖ¾ºó£¬ÐÂÔö/ÒÆ³ý½ÚµãµÄ²Ù×÷¾ÍËã½áÊø¡£´Ëʱ£¬Ö÷½ÚµãÄÜÈ·¶¨ÖÁÉÙ C_new ÖеĶàÊý½ÚµãÒѾ­ÆôÓÃÁË C_new ÅäÖã¬Í¬Ê±£¬ÄÇЩ»¹Ã»ÓÐÆôÓà C_new µÄ½ÚµãÒ²²»ÔÙ¿ÉÄÜ×é³Éеġ°¶àÊý½Úµã¡±¡£

Ë㷨α´úÂë

ÏÂͼÀ´Ô´ÓÚÔ­ÂÛÎÄ£º

 

   
2164 ´Îä¯ÀÀ       30
Ïà¹ØÎÄÕÂ

»ùÓÚEAµÄÊý¾Ý¿â½¨Ä£
Êý¾ÝÁ÷½¨Ä££¨EAÖ¸ÄÏ£©
¡°Êý¾Ýºþ¡±£º¸ÅÄî¡¢ÌØÕ÷¡¢¼Ü¹¹Óë°¸Àý
ÔÚÏßÉ̳ÇÊý¾Ý¿âϵͳÉè¼Æ ˼·+Ч¹û
 
Ïà¹ØÎĵµ

GreenplumÊý¾Ý¿â»ù´¡Åàѵ
MySQL5.1ÐÔÄÜÓÅ»¯·½°¸
ijµçÉÌÊý¾ÝÖÐ̨¼Ü¹¹Êµ¼ù
MySQL¸ßÀ©Õ¹¼Ü¹¹Éè¼Æ
Ïà¹Ø¿Î³Ì

Êý¾ÝÖÎÀí¡¢Êý¾Ý¼Ü¹¹¼°Êý¾Ý±ê×¼
MongoDBʵս¿Î³Ì
²¢·¢¡¢´óÈÝÁ¿¡¢¸ßÐÔÄÜÊý¾Ý¿âÉè¼ÆÓëÓÅ»¯
PostgreSQLÊý¾Ý¿âʵսÅàѵ
×îл¼Æ»®
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢ 6-12[ÏÃÃÅ]
È˹¤ÖÇÄÜ.»úÆ÷ѧϰTensorFlow 6-22[Ö±²¥]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 6-30[±±¾©]
ǶÈëʽÈí¼þ¼Ü¹¹-¸ß¼¶Êµ¼ù 7-9[±±¾©]
Óû§ÌåÑé¡¢Ò×ÓÃÐÔ²âÊÔÓëÆÀ¹À 7-25[Î÷°²]
ͼÊý¾Ý¿âÓë֪ʶͼÆ× 8-23[±±¾©]
 
×îÐÂÎÄÕÂ
InfluxDB¸ÅÄîºÍ»ù±¾²Ù×÷
InfluxDB TSM´æ´¢ÒýÇæÖ®Êý¾ÝдÈë
Éî¶ÈÂþ̸Êý¾Ýϵͳ¼Ü¹¹¡ª¡ªLambda architecture
Lambda¼Ü¹¹Êµ¼ù
InfluxDB TSM´æ´¢ÒýÇæÖ®Êý¾Ý¶ÁÈ¡
×îпγÌ
OracleÊý¾Ý¿âÐÔÄÜÓÅ»¯¡¢¼Ü¹¹Éè¼ÆºÍÔËÐÐά»¤
²¢·¢¡¢´óÈÝÁ¿¡¢¸ßÐÔÄÜÊý¾Ý¿âÉè¼ÆÓëÓÅ»¯
NoSQLÊý¾Ý¿â£¨Ô­Àí¡¢Ó¦Óá¢×î¼Ñʵ¼ù£©
ÆóÒµ¼¶Hadoop´óÊý¾Ý´¦Àí×î¼Ñʵ¼ù
OracleÊý¾Ý¿âÐÔÄÜÓÅ»¯×î¼Ñʵ¼ù
³É¹¦°¸Àý
ij½ðÈÚ¹«Ë¾ Mysql¼¯ÈºÓëÐÔÄÜÓÅ»¯
±±¾© ²¢·¢¡¢´óÈÝÁ¿¡¢¸ßÐÔÄÜÊý¾Ý¿âÉè¼ÆÓëÓÅ»¯
ÖªÃûijÐÅϢͨÐŹ«Ë¾ NoSQL»º´æÊý¾Ý¿â¼¼Êõ
±±¾© oracleÊý¾Ý¿âSQLÓÅ»¯
ÖйúÒÆ¶¯ IaaSÔÆÆ½Ì¨-Ö÷Á÷Êý¾Ý¿â¼°´æ´¢¼¼Êõ