±à¼ÍƼö: |
±¾ÎÄÖ÷Òª½éÉÜRaftÔÚCMQÖеÄÓ¦ÓõÄÏêϸ¹ý³Ì,Ï£Íû¶ÔÄúµÄѧϰÓÐËù°ïÖú¡£
±¾ÎÄÀ´×ÔÓÚÔÆÉçÇø£¬ÓÉ»ðÁú¹ûÈí¼þAlice±à¼ÍƼö¡£ |
|
½Ó¡¶Raft Ëã·¨ÔÀí¼°ÆäÔÚ CMQ ÖеÄÓ¦Óã¨ÉÏ£©¡·
Èý RaftÔÚCMQÖеÄÓ¦ÓÃ
ÔçÆÚÎÒÃÇÔÚrabbitmqµÄ»ù´¡ÉϴÁËÒ»Ì׿ÉÀ©Õ¹ÏûÏ¢Öмä¼þCRMQ1.0£¬ÓÉÓÚrabbitmqµÄGMͬ²½Ëã·¨ÔÚÐÔÄܵȷ½Ãæ´æÔÚÆ¿¾±£¬ËùÒÔ×ÔÑÐÁË»ùÓÚraftËã·¨µÄÄÚ²¿°æ±¾CRMQ2.0ºÍÌÚÑ¶ÔÆCMQ£¬ÔÚ±£Ö¤Ç¿Ò»Ö¸߿ɿ¿µÄǰÌáÏ£¬ÐÔÄܺͿÉÓÃÐÔ¶¼ÓÐÏÔÖøÌáÉý¡£ÊµÏÖÉϲÉÓÃÁËÉú²úConfirm
+ Ïû·ÑAck»úÖÆ±£Ö¤ÏûÏ¢²»¶ªÊ§£¬ConfirmºÍAck»úÖÆ¾ùͨ¹ýraftÀ´±£Ö¤¡£Éú²úµÄÏûϢͨ¹ýRaftתΪEntryͬ²½µ½´ó¶àÊý½Úµã²¢Ìá½»£¬Íê³Éºó¸÷½Úµã״̬»úÓ¦ÓøÃEntry£¬½«ÏûÏ¢ÄÚÈÝдÈë´ÅÅÌ£¬Ö®ºóÓÉLeader½Úµã»Ø¸´¿Í»§¶ËConfirm£¬±íʾÏûÏ¢Éú²ú³É¹¦¡£Ïû·Ñʱ¿Í»§¶Ë´ÓLeader½ÚµãÀÈ¡ÏûÏ¢£¬Ïû·ÑÍê³Éºóͨ¹ýAckÃüÁî֪ͨ·þÎñ¶ËÏûÏ¢ÒÑÏû·Ñ¿Éɾ³ý£¬AckÇëÇó¾Raftͬ²½ºó£¬¸÷½ÚµãÓ¦ÓøÃÇëÇó£¬Ö®ºóÏûÏ¢±»É¾³ý²»»áÔÙͶµÝ¡£ÏÂÃæ½éÉÜÏêϸ¹ý³Ì£º
Éú²úÁ÷³Ì£º
1£©Éú²úÕß½«Éú²úÏûÏ¢µÄÇëÇó·¢ÍùLeaderµÄRaftÄ£¿é¡£
2£©RaftÄ£¿éÍê³ÉEntryµÄ´´½¨ºÍͬ²½¡£
3£©´ó¶àÊý½ÚµãÉϳ־û¯²¢·µ»Ø³É¹¦ºóEntry±ê¼ÇΪCommitted¡£
4£©ËùÓнڵãµÄState MachineÓ¦ÓøÃÈÕÖ¾£¬È¡³öʵ¼ÊµÄÉú²úÇëÇ󣬽«ÏûÏ¢ÄÚÈÝдÈë´ÅÅÌ£¬¸üÐÂApplyIndex¡£¸Ã²½Öè²»ÐèҪˢÅÌ¡£
5£©Leader»Ø¸´¿Í»§¶ËConfirm£¬Í¨ÖªÉú²ú³É¹¦¡£
6£©Èç¹û´Ëºó»úÆ÷ÖØÆô£¬Í¨¹ýraftÈÕÖ¾»Ö¸´Éú²úÏûÏ¢£¬±£Ö¤ÁËÒÑConfirmµÄÏûÏ¢²»¶ªÊ§¡£
Ïû·ÑÁ÷³Ì£º
1£©Ïû·ÑÕß´ÓLeader½ÚµãÀÈ¡ÏûÏ¢¡£
2£©LeaderÊÕµ½ºó´Ó´ÅÅ̼ÓÔØÎ´É¾³ýµÄÏûϢͶµÝ¸ø¿Í»§¶Ë¡£
3£©¿Í»§¶Ë´¦ÀíÍê³ÉºóAckÏûÏ¢£¬Í¨Öª·þÎñÆ÷ɾ³ýÏûÏ¢¡£
4£©AckÇëÇó¾Raftͬ²½ºó±ê¼ÇΪCommitted¡£
5£©¸÷½Úµã״̬»úÓ¦ÓøÃÈÕÖ¾£¬½«ÏûÏ¢¶ÔÓ¦µÄbitÖÃ룬½«ÆäÉèÖÃΪÒÑɾ³ý²¢¸üÐÂApplyIndex¡£
6£©Í¨Öª¿Í»§¶Ëɾ³ý³É¹¦¡£
7£©Èç¹û»úÆ÷ÖØÆô£¬Í¨¹ýRaftÈÕÖ¾»Ö¸´AckÇëÇ󣬱£Ö¤ÁËÒÑɾ³ýµÄÏûÏ¢²»»áÔÙͶµÝ¡£
¿ìÕÕ¹ÜÀí£º
¿ìÕÕ¹ÜÀíÓëÒµÎñ½ôÃÜÏà¹Ø£¬²»Í¬ÏµÍ³¿ìÕÕÖÆ×÷µÄ³É±¾²îÒìºÜ´ó£¬CMQÖпìÕÕµÄÄÚÈÝÊ®·ÖÇáÁ¿£¬Ò»´Î¿ìÕյĺÄʱÔÚºÁÃë¼¶£¬Æ½¾ù5min´´½¨Ò»´Î£¬¸÷½Úµã¶ÀÁ¢Íê³É¡£ÊµÏÖÉÏÄÚ´æÖÐά»¤ÁËÒ»·Ý¶¯Ì¬µÄ¿ìÕÕ£¬ÖÆ×÷¿ìÕÕʱÊ×ÏÈ¿½±´³ö¶¯Ì¬¿ìÕյĸ±±¾£¬Ö®ºó´¦ÀíÁ÷¼ÌÐø¸üж¯Ì¬¿ìÕÕ£¬Óÿ½±´³öµÄ¸±±¾´´½¨¿ìÕÕÎļþ£¬²»Ó°Ïìʵ¼ÊµÄ´¦ÀíÁ÷¡£¿ìÕÕ¾ßÌåÄÚÈݰüÀ¨£º
1£©term£º¿ìÕÕ¶ÔÓ¦EntryµÄterm £¨²ÎÕÕËã·¨£©
2£©index£º¿ìÕÕ¶ÔÓ¦EntryµÄ index £¨²ÎÕÕËã·¨£©
3£©node_info£ºEntryʱµÄ¼¯ÈºÅäÖÃÐÅÏ¢¡£
4£©topic info£ºÃ¿¸ö¶ÓÁÐÒ»Ïî¡£CMQÖÐͬһ¶ÓÁÐÉú²úµÄÏûϢ˳ÐòдÈ룬·ÖƬ´æ´¢£¬Òò´ËÖ»Ðè¼Ç¼×îºóÒ»¸ö·ÖƬµÄ״̬£¨·ÖƬÎļþÃû£¬ÎļþÆ«ÒÆÁ¿£©¡£
5£©queue info£ºÃ¿¸ö¶ÓÁÐÒ»Ïî¡£CMQÖвÉÓÃbitmap¼Ç¼ÏûÏ¢µÄɾ³ýÇé¿ö£¬ÔÚÄÚ´æÖÐά»¤£¬ÔÚÖÆ×÷¿ìÕÕʱdumpµ½¿ìÕÕÎļþ¡£
¿É¿¿ÐÔ£ºÒµ½çͳһµÄºâÁ¿±ê׼ΪRPO(Recovery Point Objective)£¬·´Ó³¹ÊÕÏʱÊý¾Ý»Ö¸´ÍêÕûÐÔµÄÖ¸±ê¡£ÓÉÓÚÖ»ÓÐÌá½»µÄÈÕÖ¾²Å»á±»Ó¦Óõ½×´Ì¬»ú£¬ÇÒraftÈÕÖ¾ÔÚдÈëʱ»áÇ¿ÖÆË¢ÅÌ£¬ËùÒÔ¹ÊÕÏÖØÆôºóͨ¹ý¿ìÕÕ+raftÈÕÖ¾¼´¿É»Ö¸´£¬²»»á¶ªÊ§Êý¾Ý£¬RPO=0¡£²»¹ý£¬Èç2.7½ÚËùÊö£¬Leader¹ÊÕÏʱ¿ÉÄÜ»á²úÉúÖØ¸´Êý¾Ý£¬ÐèҪͨ¹ýÃݵÈÐÔ±£Ö¤»òÈ¥ÖØ»úÖÆÀ´½â¾ö¸ÃÎÊÌâ¡£
¿ÉÓÃÐÔ£ºÒµ½çͳһµÄºâÁ¿±ê׼ΪRTO(Recovery Time Objective)£¬·´Ó³¹ÊÕÏʱҵÎñ»Ö¸´¼°Ê±ÐÔµÄÖ¸±ê¡£follower¹ÊÕ϶ÔϵͳûÓÐÓ°Ï죨RTO=0£©£¬leader¹ÊÕÏʱÆäËû½Úµãͨ¹ý×Ô·¢Ñ¡³öÐÂleader£¬¶øÇÒCMQÖÐǰ¶Ë¾ß±¸×Ô¶¯ÖØÁ¬¹¦ÄÜ£¬µ±Á¬½Ó¶Ï¿ªºó»á×Ô¶¯Ñ°ÕÒÐÂleader£¬ÏµÍ³²»¿ÉÓÃʱ¼ä´ó´ó½µµÍ¡£Ä¿Ç°CMQÖÐÅäÖõÄÑ¡¾Ù³¬Ê±Ê±¼äΪ2s~4s£¬ÔÚ²»¿¼ÂÇÑ¡¾Ù³åÍ»µÄǰÌáÏ£¬RTOÉÏÏÞΪ4s¡£
ÔÚCMQÖУ¬Leaderͨ¹ýÓëFollowerµÄÐÄÌøÅжÏ×Ô¼ºÊÇ·ñÒÑÍøÂç·ÖÇø£¬µ±¼ì²âµ½·ÖÇøÊ±£¨´ó¶àÊý½ÚµãÉÏ´ÎÐÄÌø»Ø¸´Ê±¼ä¾àÏÖÔÚ³¬¹ý2s£©£¬Ö÷¶¯¶Ï¿ªÇ°¶ËÁ¬½Ó£¬Ç°¶Ë·¢ÏÖºó»á×Ô¶¯Ñ°ÕÒÐÂLeader¡£Õâ¶Îʱ¼äÄÚ¿Í»§¶ËÇëÇó»á³¬Ê±£¬ÔÚÁ¬ÉÏÐÂLeaderºó£¬¿Í»§¶ËÖØÊÔ֮ǰ³¬Ê±µÄÈÎÎñ£¬ºóÐøÇëÇó»Ö¸´Õý³£¡£
ËÄ RaftËã·¨ÐÔÄÜÓÅ»¯
RaftËã·¨µÄÐÔÄÜÆ¿¾±Ö÷ÒªÓÐÁ½·½Ã棺
1£© ÿ´ÎÈÕ־дÈëºó¶¼ÐèҪˢÅ̲ÅÄÜ·µ»Ø³É¹¦£¬¶øË¢ÅÌÊÇÒ»¸ö±È½ÏºÄʱµÄ²Ù×÷¡£
2£© ÓÉÓÚËã·¨ÏÞÖÆ£¬ËùÓеÄÇëÇó¶¼ÓÉLeader´¦Àí£¬²»ÄÜ×öµ½ËùÓнڵã½Ô¿ÉÌṩ·þÎñ¡£
Õë¶ÔÒÔÉÏÁ½¸öÎÊÌ⣬ÎÒÃÇ×öÁËÒÔÏÂÓÅ»¯£º
1£©Batch Processing£ºÔÚÇëÇóÁ¿½Ï´óʱ£¬²¢²»ÊÇÿһÌõÈÕ־дÈ붼ˢÅÌ£¬»¹ÊÇÀÛ»ýÒ»¶¨Á¿µÄÈÕÖ¾ºó¼¯ÖÐË¢ÅÌ£¬´Ó¶ø¼õÉÙË¢ÅÌ´ÎÊý¡£¶ÔÓ¦µÄ£¬ÔÚͬ²½µ½FollowerʱҲ²ÉÓÃÅúÁ¿Í¬²½µÄ·½Ê½£¬Follower½ÓÊÕºó½«ÈÕÖ¾ÅúÁ¿Ð´ÅÌ¡£
2£©Multi-Raft£º ½ø³ÌÖÐͬʱÔËÐжà¸öraftʵÀý£¬»úÆ÷Ö®¼ä×齨¶àraft ×飬¿Í»§¶ËÇëÇó·Óɵ½²»Í¬µÄgroupÉÏ£¬´Ó¶øÊµÏÖ¶àÖ÷¶Áд£¬Ìá¸ß²¢·¢ÐÔÄÜ¡£Í¨¹ý½«leader·Ö²¼ÔÚ²»Í¬»úÆ÷ÉÏ£¬Ìá¸ßÁËϵͳµÄÕûÌåÀûÓÃÂÊ¡£
3£©Async-rpc£º ÔÚÈÕ־ͬ²½¹ý³ÌÖвÉÓÃͬ²½rpc·½Ê½£¬ÔÚÒ»¶Ë´¦ÀíʱÁíÒ»¶ËÖ»Äܵȴý£¬ÐÔÄܽϲÎÒÃDzÉÓÃÒì²½µÄ·½Ê½Ê¹µÃleader¶Ë·¢ËͺÍFollower¶Ë´¦Àí²¢·¢½øÐС£·¢Ë͹ý³ÌÖÐleader¶Ëά³ÖÒ»¸ö·¢ËÍ´°¿Ú£¬µ±´ýÈ·ÈϵÄrpcÊý´ïµ½ÉÏÏÞÍ£Ö¹·¢ËÍ£¬´°¿ÚÖµÉÏÏÞ£º
ÔÚÓëͬÊôÓڸ߿ɿ¿(¶à¸±±¾Í¬²½Ë¢ÅÌ)µÄRabbitmqÐÔÄܶԱÈÖУ¬Ïàͬѹ²â³¡¾°ÏÂCMQËÙ¶È¿ÉÒÔ´ïµ½RabbitMQµÄËı¶×óÓÒ¡£
ÒÔÏÂΪTS60»úÆ÷1KBÏûÏ¢´óСʱÐÔÄÜÊý¾Ý£º
²âÊÔÖÐCMQ²ÉÓõ¥Raft×鷽ʽÒÔ±£Ö¤²âÊÔ¹«Æ½ÐÔ¡£¼à¿ØÏÔʾCPU¡¢ÄÚ´æºÍÍø¿¨¾ùδ´ïµ½Æ¿¾±£¬ÏµÍ³Æ¿¾±ÔÚ´ÅÅÌIO£¬iostatÏÔʾw_awaitÔ¶´óÓÚsvctm¡£Ö÷ÒªÔÒòÔÚÓÚË¢Å̺Äʱ£¬Ôì³Éд²Ù×÷ÅŶӵȴý¡£
ʵ¼ÊÉú²ú»·¾³CMQÖÐÎÒÃǽ«raft×éºÍ´ÅÅ̽øÐа󶨣¬ÊµÏÖraft×éÖ®¼ä´ÅÅ̵ĸôÀ룬һ·½Ãæ±£Ö¤ÁË´ÅÅ̵Ä˳Ðò¶Áд£¬ÁíÒ»·½Ãæ³ä·ÖÀûÓûúÆ÷µÄcpu
¡¢ÄÚ´æ¡¢Íø¿¨µÈ×ÊÔ´¡£
Îå ͨÓÃRaft¿â
CMQÖÐÍêÕûʵÏÖÁËRaftËã·¨²¢½â¾öÁ˺ܶàϸ½ÚÄѵ㡣¿¼Âǵ½·Ö²¼Ê½ÏµÍ³Éè¼ÆµÄ¸´ÔÓÐÔ£¬Èç¹û¿ª·¢ÕßֻרעÓÚÒµÎñÏà¹Ø²¿·Ö£¬½«¿ÉÒÔÏÔÖø½µµÍ¿ª·¢ÄѶȣ¬Ìá¸ßϵͳµÄÖÊÁ¿£¬ËùÒÔÎÒÃǽ«CMQÖеÄraft²¿·ÖÒÔ¿âµÄ·½Ê½¶ÀÁ¢³öÀ´£¬Ê¹ÓÃÕßÓÃËü¼´¿É´î½¨Ò»Ì×ǿһÖ¸߿ÉÓ÷ֲ¼Ê½ÏµÍ³¡£Ä¿Ç°¸Ã¿âÒѾÍê³É»ùÏß°æ±¾¿ª·¢²¢ÔÚ²¿ÃÅÂäµØÊ¹Óã¬ÑéÖ¤Íê³Éºó»áÂ½Ðø¿ª·Å¸ø¸ü¶àÒµÎñʹÓá£
Áù ×ܽá
ÏûÏ¢Öмä¼þͨ³£·ÖΪ¸ß¿É¿¿°æ±¾ºÍ¸ßÐÔÄܰ汾Á½ÖÖ¡£CMQÊÇÒ»¿î½ðÈÚ¼¶µÄ¸ß¿É¿¿·Ö²¼Ê½ÏûÏ¢Öмä¼þ£¬Í¨¹ýraft±£Ö¤ÁËÏûÏ¢µÄ¿É¿¿²»¶ªÊ§¡£Í¬Ê±ÔÚÐÔÄܺͿÉÓÃÐÔ·½ÃæÏà±È¾ºÆ·¶¼ÓÐÏÔÖøÌá¸ß¡£
RaftË㷨ǿµ÷ÁËLeaderµÄµØÎ»£¬Ñ¡¾ÙºÍÈÕ־ͬ²½¶¼ÊÇÎ§ÈÆLeaderÕ¹¿ª¡£ÓÉLeader¸ºÔð´¦ÀíËùÓÐÇëÇó±£Ö¤ÁËϵͳµÄǿһÖÂÐÔ£»LeaderÑ¡¾ÙºÍÈÕ־ͬ²½Ëã·¨±£Ö¤ÁËÊý¾ÝµÄ¿É¿¿²»¶ªÊ§£»´ËÍâÉÏÊö²½ÖèÖ»ÐèÒª´ó¶àÊýÕý³£»¥Áª¼´¿É£¬´Ó¶ø¼«´óÌá¸ßÁËϵͳµÄ¿ÉÓÃÐÔ£¬ÉÙÁ¿»úÆ÷¹ÊÕϲ»ÊÜÓ°Ïì¡£²»¹ý£¬ËùÓÐÇëÇóÓÉLeader´¦Àí²¢Ã»Óгä·ÖÀûÓôӽڵãµÄ×ÊÔ´£¬Ä¿Ç°googleµÄSpannerÒÑÖ§³Ö´Ó´Ó½Úµã¶ÁÈ¡£¬ºóÐøÎÒÃÇÒ²»áÔÚÕâ·½Ãæ×÷¸ü½øÒ»²½µÄÑо¿¡£RaftËã·¨Ò×ÓÚÀí½âºÍ¹¤³Ì»¯£¬ÏàÐÅδÀ´»áÓ¦ÓÃÔÚÔ½À´Ô½¶àµÄ·Ö²¼Ê½ÏµÍ³ÖС£
|