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

1Ôª 10Ôª 50Ôª





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



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
ConfigBus£ºTwitter µÄ¶¯Ì¬ÅäÖÃʵ¼ù
 
  1627  次浏览      27
 2018-12-21
 
±à¼­ÍƼö:

±¾ÎÄÀ´×Ôinfoq£¬±¾ÎĽ«½éÉÜ Twitter µÄ¶¯Ì¬ÅäÖÃϵͳ ConfigBus¡£ConfigBus °üÀ¨´æ´¢ÅäÖõÄÊý¾Ý¿â¡¢½«ÅäÖ÷ַ¢µ½ Twitter Êý¾ÝÖÐÐÄÖеĻúÆ÷µÄ¹ÜµÀ¡¢¶ÁÈ¡ºÍ¸üÐÂÅäÖÃµÄ API ºÍ¹¤¾ß¡£

¶¯Ì¬ÅäÖÃÄܹ»ÔÚ²»ÖØÐÂÆô¶¯Ó¦ÓóÌÐòµÄÇé¿öϸü¸ÄÕýÔÚÔËÐеÄϵͳµÄÐÐΪºÍ¹¦ÄÜ¡£ÀíÏëµÄ¶¯Ì¬ÅäÖÃϵͳʹ·þÎñ¿ª·¢ÈËÔ±ºÍ¹ÜÀíÔ±Äܹ»·½±ãµØ²é¿´ºÍ¸üÐÂÅäÖ㬲¢¸ßЧ¿É¿¿µØÏòÓ¦ÓóÌÐòÌṩÅäÖøüС£Ëüʹ×éÖ¯Äܹ»¿ìËÙ¡¢´óµ¨µØµü´úÐÂÌØÐÔ£¬²¢Ìṩ¹¤¾ß£¬¼õÉÙÓë¸ü¸ÄÏÖÓÐϵͳÏà¹ØµÄ·çÏÕ¡£

ÔÚ Twitter µÄÔçÆÚ£¬Ó¦ÓóÌÐò¹ÜÀí²¢·Ö·¢×Ô¼ºµÄÅäÖã¬Í¨³£´æ´¢ÔÚ ZooKeeper ÖС£µ«ÊÇ£¬ÎÒÃÇÒÔǰʹÓà ZooKeeper µÄ¾­Ñé±íÃ÷£¬ËüÔÚÓÃ×÷ͨÓüüÖµ´æ´¢Ê±²»ÄÜÉìËõ¡£ÆäËûÍŶÓת¶øÊ¹Óà Git ½øÐд洢£¬²¢½áºÏ×Ô¶¨ÒåµÄ¹¤¾ßÀ´¸üС¢·Ö·¢ºÍÖØÐ¼ÓÔØÅäÖá£Ëæ×Å Twitter µÄ·¢Õ¹£¬ºÜÃ÷ÏÔÐèÒªÒ»¸ö±ê×¼µÄ½â¾ö·½°¸À´Ìṩ¿ÉÉìËõµÄ»ù´¡ÉèÊ©¡¢¿ÉÖØÓõĿâºÍÓÐЧµÄ¼à¿Ø¡£

¼Ü¹¹

ÔÚÒ»¸ö½Ï¸ßµÄ²ã´ÎÉÏ£¬Äã¿ÉÒÔ½« ConfigBus ¿´×÷Ò»¸ö Git ´æ´¢¿â£¬ËüµÄÄÚÈݱ»ÍÆË͵½ Twitter Êý¾ÝÖÐÐĵÄËùÓлúÆ÷ÉÏ¡£ÅäÖøü¸Ä¾­¹ýһϵÁв½Öèµ½´ïÄ¿µÄµØ£º

1.¿ª·¢ÈËÔ±Ïò Git ´æ´¢¿âÌá½»¸ü¸Ä¡£¾­¹ýÉí·ÝÑéÖ¤µÄÓ¦ÓóÌÐòÒ²¿ÉÒÔͨ¹ý ConfigBus ·þÎñÌá½»µ½´æ´¢¿â¡£

2.Ô¤½ÓÊÕ¹³×ÓÑéÖ¤¸ü¸Ä¡£Èç¹ûÑé֤ͨ¹ý£¬ÔòÔÚ·þÎñÆ÷ÉϽÓÊܲ¢Ìá½»ÍÆËÍ¡££¨ÎÒÃǽ«ÔÚ¡°Ìص㡱²¿·Ö¸üÏêϸµØÌÖÂÛÕâÖÖÑéÖ¤¡££©

3.Ò»µ©·þÎñÆ÷ÉϵÄÌá½»¹ý³ÌÍê³É£¬Git ½ÓÊÕºó¹³×ӾͻáʹÓÃÌá½»ÐÅÏ¢£¨SHA¡¢Ê±¼ä´ÁµÈ£©¸üРZooKeeper ÖеÄÌØ¶¨½Úµã¡£

½ÓÏÂÀ´»á´¥·¢ZooKeeper watches£¬Òý·¢ÏÂÓιý³ÌµÄ¶¯×÷£º

a. ÔÚ×÷ΪÅäÖÃ×¼±¸ÇøµÄ¡°ConfigStore¡±»úÆ÷ÉÏ£¬watch ʼþ»áµ÷ÓÃÒ»¸ö»Øµ÷£¬´Ó Git ·þÎñÆ÷»ñÈ¡×îÐÂÌá½»¡£Ëü»¹Óõ±Ç°µÄ SHA ¸üРZooKeeper ÖеÄÌõÄ¿¡£

b. ÔÚÄ¿±ê»úÆ÷ÉÏ£¬watch ʼþ´¥·¢¾µÏñÈÎÎñ£¬¸ÃÈÎÎñÂÖѯ ZooKeeper£¬ÕÒ³öÓë×îÐÂÌá½»¾ßÓÐÏàͬ SHA µÄ ConfigStore »úÆ÷¡£Ò»µ©ÕÒµ½Ô´»úÆ÷£¬¾µÏñÈÎÎñ½«ÔËÐÐ rsync °Ñ¸ü¸Äͬ²½µ½±¾µØ»úÆ÷ÉÏ¡£

×îºó£¬Ê¹ÓÃÕâЩÅäÖÃÎļþµÄÓ¦ÓóÌÐò½«¿´µ½ÎļþϵͳÉϵĸü¸Ä£¨Í¨¹ý ConfigBus ¿Í»§¶Ë¿â£©£¬²¢Æô¶¯½ø³ÌÄÚÖØÐ¼ÓÔØ¡£

×îºó£¬ÏµÍ³Í£Ö¹¹¤×÷£¬ÒÔ±ã°ÑµÚ 1 ²½Öиü¸ÄµÄÎļþͬ²½µ½ËùÓÐÄ¿±ê»úÆ÷£¬²¢ÓÉÒÀÀµÕâЩ»úÆ÷µÄËùÓпͻ§¶ËÓ¦ÓóÌÐòÖØÐ¼ÓÔØ¡£

ÌØµã

ÅäÖü´´úÂë

ʹÓà Git ÔÊÐí¿ª·¢ÈËÔ±ÖØÓÃÔ´´æ´¢¿âÌṩµÄÐí¶àÏàͬµÄÃüÁîºÍ¹¤×÷Á÷¡£Git ¼°ÆäÖܱߵÄÉú̬ϵͳÖ÷ÒªÌṩÁËÒÔϹ¦ÄÜ£º

¾ßÓиü¸ÄÈÕÖ¾µÄÔ´´úÂë¿ØÖÆ£ºÄܹ»¼ì²é¹ýÈ¥µÄÅäÖøü¸ÄÒԲ鿴¸ü¸ÄÁËʲô£¨ÒÔ¼°ÓÉË­¸ü¸Ä¡¢ºÎʱ¸ü¸Ä»òΪʲô¸ü¸Ä£©ÊǷdz£ÓмÛÖµµÄ¡£Git ×ÔÈ»ÔÊÐíÕâÑù×ö¡£¿ª·¢ÈËÔ±ÍêÈ«ÓÐÐÅÐÄ£¬µ±Ç°ºÍ¹ýÈ¥µÄ°æ±¾ÔÚ°æ±¾¿ØÖÆÖÐÊǰ²È«µÄ¡£

×Ô¶¯²¿Êð£ºConfigBus ÖеÄÅäÖÃÎļþ»á×Ô¶¯¸´ÖƵ½ËùÓÐÄ¿±ê»úÆ÷¡£Ä¿Ç°£¬ÅäÖô«²¥µÄƽ¾ùÑÓ³ÙΪ 80-100 Ã룬¶ø p99 ÑÓ³Ù´óԼΪ 300 Ãë¡£

·ÖÎöÑéÖ¤£ºConfigBus ʹÓÃÔ¤½ÓÊÕ¹³×ÓÀ´ÔËÐÐÑéÖ¤³ÌÐò£¬ËüÃÇ¿ÉÒÔ¼ì²éÅäÖÃÎļþÖеÄÓï·¨´íÎ󣬽øÐÐģʽÑéÖ¤£¬ÒÔ¼°Ö´ÐÐÈκÎÀàÐ͵Ä×Ô¶¨ÒåÑéÖ¤¡£ËüÕë¶Ô JSON µÈÁ÷ÐÐÅäÖøñʽΪ Twitter ¿ª·¢ÈËÔ±ÌṩÁË¿ªÏä¼´ÓõÄÓï·¨ÑéÖ¤¡£Ëü»¹ÌṩÁËÖ¸¶¨Ä£Ê½ºÍÑéÖ¤¼æÈÝÐÔµÄÄÜÁ¦¡£Óû§»¹¿ÉÒÔ±àд×Ô¶¨ÒåÑéÖ¤£¬²¢ÔÚ Git ÖÐÌí¼ÓºÍ¸üÐÂÅäÖÃʱִÐÐÕâЩÑéÖ¤¡£

´úÂëÉóºË£ºÈÃÅäÖøü¸Äͨ¹ý´úÂëÆÀÉóÓÐÖúÓÚ¼õÉÙ´íÎ󣬲¢ÔÚ½«ÆäͶÈëÉú²ú»·¾³Ö®Ç°·¢ÏÖÎÊÌâ¡£

ACL£ºÎÒÃÇÔÚ Git ´æ´¢¿âÖÐÇ¿ÖÆÖ´ÐÐÅäÖÃËùÓÐȨ£¬ÒÔÈ·±£ÅäÖÃÎļþÖ»±»Ó¦¸Ã¹ÜÀíËüÃǵÄÍŶӺÍÓ¦ÓóÌÐòÐ޸ġ£µ±ÍÆËÍÒ»¸ö¸ü¸Äʱ£¬Ò»¸öÔ¤½ÓÊÕ¹³×Ó»áÑéÖ¤ÊÇ·ñÔÊÐíÖ´ÐиÃÍÆË͵ÄÓû§¶ÔÕâЩÎļþ½øÐиü¸Ä¡£

±à³Ì·ÃÎÊ£ºConfigBus ·þÎñÖ§³Ö¶Ô ConfigBus µÄ±à³Ì·ÃÎÊ¡£¸Ã·þÎñʵÏÖÁËGit¡°ÖÇÄÜ¡±HTTP ЭÒ飬²¢³äµ±ÅäÖô洢¿âµÄǰ¶Ë¡£Ëüͨ¹ý HTTP ºÍ Thrift API Ìṩ¶ÁÈ¡ºÍ¡°compare-and-set¡±Ð´È빦ÄÜ¡£ÕâʹµÃ±àд¶àÓû§Ó¦ÓóÌÐòÏòµ¥¸öÎļþÍÆË͸ü¸Ä±äµÃ¼òµ¥ÁË£¬²»ÐèÒªËüÃǾßÓд洢¿âµÄ±¾µØ¿Ë¡¡£¸Ã·þÎñ»¹ÄÚÖÃÁËÀÖ¹Û²¢·¢¿ØÖÆ£¬µ±ÍÆËÍÓÉÓÚ¶Ô´æ´¢¿âµÄ²¢·¢¸üжøÊ§°Üʱ»á×Ô¶¯ÖØÊÔ¡£

´ó¹æÄ£³ÖÐø½»¸¶

Ò»µ©ÅäÖñ»°²È«´æ´¢£¬ÎÒÃÇÐèÒªÒ»ÖÖ·½·¨°ÑËüÃÇÌṩ¸øÔËÐÐÔÚTwitter »ù´¡ÉèÊ©ÉϵÄÈí¼þ£¬°üÀ¨ÔËÐÐÔÚMesosÔÆÒÔ¼°Ö±½ÓÔËÐÐÔÚÂã»úÉϵķþÎñ¡£ÕâÊÇͨ¹ý rsync ½«ÎļþÍÆË͵½ËùÓеĻúÆ÷ÉÏÀ´ÊµÏֵġ£ÐèÒª·ÃÎÊÅäÖõÄÓ¦ÓóÌÐòÖ»Ðè´Ó±¾µØÎļþϵͳ¶ÁÈ¡¡£ÕâÑù×öµÄºÃ´¦ÊÇ£º

¼òµ¥£ºÊ¹ÓÃÎļþϵͳ×÷Ϊ API ʹµÃÈκÎÓïÑÔ±àдµÄÓ¦ÓóÌÐò¶¼¿ÉÒÔʹÓà ConfigBus¡£¿ÉÒÔÔÚ±¾µØÎļþϵͳ¶ÁÈ¡ÅäÖû¹ÓÐÖúÓÚ¼õÉÙ·þÎñÆô¶¯Ê±¼ä£¬ÌرðÊÇÔÚÔÆ»·¾³ÖУ¬Ó¦ÓóÌÐòʵÀý¿ÉÒÔÔÚÒ»¸ö½ÚµãÉÏå´µô£¬È»ºóÔÚÁíÒ»¸ö½ÚµãÉÏÔËÐС£

¿ÉÈÝ´í£º½«ÅäÖÃÊý¾ÝÍÆË͵½Ã¿Ì¨»úÆ÷Éϵı¾µØÎļþϵͳÖУ¬ÕâÑù£¬¼´Ê¹ ConfigBus ¹ÜµÀµÄijЩ²¿·Öʧ°Ü£¬Ó¦ÓóÌÐòÒ²¿ÉÒÔ¼ÌÐøÔËÐС£ÀýÈ磬Èç¹û Git ·þÎñÆ÷å´»ú£¬ÍŶӽ«ÎÞ·¨½øÐÐеÄÅäÖøü¸Ä£¬µ«ÊÇÔËÐÐÖеÄÓ¦ÓóÌÐò²»»áÊܵ½Ì«´óÓ°Ï졣ͬÑù£¬Èç¹û ZooKeeper ³öÏÖ¹ÊÕÏ£¬·Ö·¢¹ÜµÀÒ²»áÊܵ½Ó°Ï죬µ«»úÆ÷ÉÏÏÖÓеÄÅäÖÃÈÔÈ»¿ÉÓá£Ïà·´£¬Èç¹ûÅäÖûñÈ¡·þÎñå´µô£¬ÐèÒª°´Ðè»ñÈ¡ÅäÖÃÊý¾ÝµÄϵͳ½«»áʧ°Ü¡£

¿ÉÀ©Õ¹£ºConfigBus µÄ¶à²ã¼Ü¹¹ÔÊÐíϵͳ¸ù¾ÝÐèÇóµÄÔö¼Ó½øÐÐÉìËõ¡£ConfigStore ²ã½« Git ·þÎñÆ÷ÓëÖ±½ÓÁ÷Á¿¸ôÀ뿪À´¡£ÔÚÕâÒ»²ãÔö¼ÓÈÝÁ¿ÒÔÊÊÓ¦ Twitter ²»¶ÏÔö³¤µÄ»úÆ÷ÊýÁ¿Ëù´øÀ´µÄÐèÇóÔö¼Ó£¬ÕâÔÚ²Ù×÷ÉÏÊǷdz£¼òµ¥µÄ¡£

¡°ÈÈ¡±ÖØÔØ

¶¯Ì¬ÅäÖÃϵͳµÄÖ÷ÒªÓŵãÖ®Ò»ÊÇÄܹ»¶ÀÁ¢ÓÚʹÓÃËüµÄÈí¼þ²¿ÊðÖØÐ¼ÓÔØÅäÖøü¸Ä¡£´ËÍ⣬һ¸öÍêÈ«¶¯Ì¬µÄÅäÖÃϵͳӦ¸ÃÄܹ»ÔÚ²»ÖØÐÂÆô¶¯Ó¦ÓóÌÐò½ø³ÌµÄÇé¿öÏÂÖØÐ¼ÓÔØ¸ü¸Ä£¬´Ó¶ø×îС»¯¶ÔÕû¸öÓ¦ÓóÌÐòµÄÓ°Ïì¡£ConfigBus ÌṩÁËһЩ¿â£¬ÔÊÐí¿Í»§¶Ë¶©ÔÄÌØ¶¨µÄÎļþ£¬²¢ÔÚÕâЩÎļþ¸ü¸Äʱµ÷Óûص÷¡£ËäȻӦÓóÌÐòÒ²¿ÉÒÔÖ±½Ó´ÓÎļþϵͳ¶ÁÈ¡£¬µ«ÊÇʹÓþ­¹ýÁ¼ºÃ²âÊԺͷâ×°µÄ¿Í»§¶Ë¿â¾ßÓÐÒÔÏÂÓŵã:

±ÜÃâ¼ì²âÅäÖøü¸Ä²¢´¥·¢ÖØÐ¼ÓÔØµÄ´úÂëÖØ¸´£»

ÔÊÐíǶÈë·¢²¼ÅäÖÃÐÂÏʶÈÖ¸±êÓÃÓÚÎÊÌâ¼ì²âµÄ´úÂë¡£

¼à¿Ø

ConfigBus ÊÇÒ»¸ö¸´Ôӵķֲ¼Ê½ÏµÍ³£¬ÓÐÐí¶à»î¶¯²¿¼þ¡£ÎÒÃÇÔÚ¸÷¸ö²ã¼¶¶Ôϵͳ½øÐÐ¼à¿Ø£¬ÒÔ±ãÊÕ¼¯Í³¼ÆÐÅÏ¢£¬²¢ÔÚ·¢ÏÖÒì³£ÐÐΪʱ·¢³ö¾¯±¨¡£

¶ÀÁ¢²¿¼þ£ºÎÒÃÇ¼à¿Ø¸÷¸ö×Óϵͳ£¨Èç Git ºÍ ZooKeeper ·þÎñÆ÷£©µÄ½¡¿µ×´¿ö¡£ÀýÈ磬ÎÒÃÇÊÕ¼¯Óë Git ´æ´¢¿âµÄ¹¦ÄܺÍÐÔÄÜÏà¹ØµÄͳ¼ÆÐÅÏ¢£¨°ü´óС¡¢Ìá½»ÑÓ³Ù¡¢¹³×ÓÑӳٵȵȣ©£¬²¢·¢³ö¾¯±¨¡£

°æ±¾¸ú×Ù£ºGit ·þÎñÆ÷½«ÆÚÍûµÄÅäÖð汾·¢²¼µ½ ZooKeeper¡£ÏÂÓÎÏû·ÑÕßʹÓô˰汾¼à¿ØÅäÖÃÊý¾ÝµÄÐÂÏʶȡ£

¶Ëµ½¶Ë¼à¿Ø£ºÔËÐÐÔÚ¿Í»§¶Ë»úÆ÷ÉÏµÄ¼à¿ØÓ¦ÓóÌÐòÿ¸ô¼¸·ÖÖӾͻá¸üÐÂÅäÖô洢¿âÖеÄÌØ¶¨Îļþ£¬²¢µÈ´ý¸üд«²¥µ½Æä±¾µØ»úÆ÷¡£ÕâÓÐÖúÓÚ¶ÈÁ¿ ConfigBus ¹ÜµÀµÄ¹Ø¼üÌØÕ÷£¬ÀýÈçÌá½»³É¹¦ÂÊ¡¢Ìá½»ÑÓ³ÙºÍÅäÖÃͬ²½ÑÓ³Ù¡£

ÓÃÀý

Á÷Á¿Â·ÓÉ£ºÔÚ Twitter£¬ConfigBus ÓÃÓÚ´æ´¢·þÎñ·ÓɲÎÊý¡£Õâ¿ÉÒÔÓÃÓÚ¿ØÖÆÇëÇó·ÓÉÂß¼­£¨ÀýÈ磬Èç¹û¿ª·¢ÈËԱϣÍû½« 1% µÄ·þÎñÇëÇó·Óɵ½ÔËÐÐÈí¼þ×Ô¶¨Òå°æ±¾µÄÒ»×éʵÀý£©¡£

Ôª·þÎñ·¢ÏÖ£ºÔÚ Twitter£¬·þÎñÊÇͨ¹ýÒ»¸ö·þÎñ·¢ÏÖ·þÎñ·¢Ïֱ˴ˡ£µ«ÊÇ£¬ËüÃDZØÐëÊ×ÏÈ·¢ÏÖ·þÎñ·¢ÏÖ·þÎñ±¾Éí¡£ÕâÊÇͨ¹ý ConfigBus ʵÏֵġ£Ê¹Óà ConfigBus ÓëÀàËÆÓÚ ZooKeeper ÕâÑùµÄ¶«Î÷£¬ÆäÓŵãÊÇ£¬ÔÚÿ̨»úÆ÷µÄ±¾µØÎļþϵͳÉ϶¼ÓпÉÓõÄÐÅÏ¢£¬ÕâʹµÃϵͳ¸üÄܵÖÓù¹ÊÕÏ£¨Ò²¾ÍÊÇ˵£¬Èç¹û ConfigBus »ò ZooKeeper ³öÏÖ¹ÊÕÏ£¬·þÎñ·¢ÏÖÈÔÈ»¿ÉÒÔÔËÐУ©¡£

Decider£ºÔÚ Twitter£¬Decider ÊÇ·þÎñʹÓõÄÌØÐÔ±êʶϵͳ£¬ÓÃÓÚÔÚÔËÐÐʱ¶¯Ì¬ÆôÓúͽûÓõ¥¸öÌØÐÔ¡£¸ÃϵͳλÓÚ ConfigBus Ö®ÉÏ¡£Decider ÊÇÃæÏò¼ü - ÖµµÄ£¨¡°cool_new_feature µÄÖµÊǶàÉÙ£¿¡±£©£¬¶ø ConfigBus ÊÇÃæÏòÎļþµÄ£¨¡°Îļþapplication/config.jsonµÄÄÚÈÝÊÇʲô£¿¡±£©¡£µ¥¸öÌØÐԵıêʶ³ÆÎª¡°¾ö²ßÆ÷£¨decider£©¡±¡£Ò»µ©Ç¶Èëµ½´úÂëÖУ¬¾ö²ßÆ÷¾Í¿ÉÒÔ¸ü¸ÄÕýÔÚÔËÐеÄÓ¦ÓóÌÐòµÄÐÐΪ£¬¶ø²»ÐèÒª¸ü¸Ä´úÂë»òÖØÐ²¿Êð¡£³ý´ËÖ®Í⣬¾ö²ßÆ÷¿ÉÒÔÓÃÀ´£º

ÓÐÑ¡ÔñÐÔµØÆôÓôúÂ룺¿ÉÒÔÔÚ´úÂëÖÐʹÓþö²ß¼üÀ´Ñ¡ÔñÐÔµØÆôÓôúÂë¿é¡£Decider ÌṩµÄÖ÷Òª·½·¨ÊÇ¡°isAvailable¡±£¬Ëü½ÓÊÜÒ»¸ö¾ö²ß¼ü²ÎÊý£¬Èç¹ûÕë¶Ôµ±Ç°µÄµ÷Óôò¿ªÌØÐÔ£¬Ôò·µ»Ø¡°true¡±£»Èç¹ûÕë¶Ôµ±Ç°µÄµ÷ÓùرÕÌØÐÔ£¬Ôò·µ»Ø¡°false¡± ¡£¡°isAvailable¡±·½·¨Ê¹µÃ¿ª·¢ÈËÔ±¿ÉÒÔÏñÏÂÃæÕâÑùÇл»´úÂë·¾¶£º

Çл»ºǫ́´æ´¢ÏµÍ³£ºÓÐЩӦÓóÌÐòʹÓþö²ßÆ÷Ñ¡ÔñдÈë»ò¶ÁÈ¡µÄºǫ́´æ´¢ÏµÍ³¡£ÀýÈ磬ӦÓóÌÐò´Ó¾ÉÊý¾Ý¿âÇ¨ÒÆµ½ÐÂÊý¾Ý¿â£¬Ëü¿ÉÄÜ»áÁÙʱ½«Êý¾ÝдÈëÁ½¸öϵͳ£¬²¢ÔÚÇ¨ÒÆÍê³Éºó¶¯Ì¬¹Ø±Õ¾ÉÊý¾Ý¿â¡£»òÕߣ¬Èç¹ûÐÂϵͳÓÐÎÊÌ⣬ӦÓóÌÐò¿ÉÄÜ»áÑ¡Ôñ¹Ø±ÕËü¡£¾ö²ßÆ÷ʹµÃÕâЩ¸ü¸Ä°²È«¶ø¿ìËÙ¡£

×÷ΪֹѪ´ø¶Ï¿ª¹ýÔØÏµÍ³£ºÔÚ Twitter£¬¼à¿ØÏµÍ³ÓÐʱ»áÔÚ¼ì²âµ½¸ºÔعýÖØÊ±¸üоö²ßÆ÷£¬ÒÔ±ã½ûÓÃijЩ´úÂë·¾¶¡£Õâ¿ÉÒÔ·Àֹϵͳ¹ýÔØ£¬²¢ÔÊÐíËüÃǽøÐлָ´¡£

ÇøÓò¼ä¹ÊÕÏ×ªÒÆ£ºDecider ÓÃÓڴ洢ijЩ·ÓɲÎÊý£¬ÕâЩ²ÎÊý¿ØÖÆ×Å Twitter ·þÎñ¿çÇøÓòµÄÁ÷Á¿·Ö²¼¡£ÆäÖÐÐí¶àÊÇͨ¹ý¼à¿ØÈí¼þ×Ô¶¯¸üÐµģ¬ºóÕß¿ÉÒÔ¹Û²ìÿ¸öÇøÓòµÄ¹ÊÕÏÂÊ¡£

¡°ÌØÐÔÇл»£¨Feature Switches£©¡±£ºÔÚ Twitter£¬ÌØÐÔÇл»Îª¿ØÖÆÓ¦ÓóÌÐòµÄÐÐΪÌṩÁËÒ»¸ö¸´ÔÓ¶øÇ¿´óµÄ»ùÓÚ¹æÔòµÄϵͳ¡£ÌØÐÔÇл»¿ØÖÆÌØÐÔÔÚ³õ²½¿ª·¢¡¢ÍŶӲâÊÔ¡¢ÄÚ²¿²âÊÔ¡¢Alpha ²âÊÔ¡¢Beta ²âÊÔ¡¢·¢²¼ÒÔ¼°×îÖÕÌÔÌ­µÄ¹ý³ÌÖеĿÉÓÃÐÔ¡£Óë Decider µÄÅäÖÃÒ»Ñù£¬ÌØÐÔÇл»ÅäÖô洢ÔÚ ConfigBus ÖС£²»¹ý£¬ÔÚÒÆ¶¯É豸ÉÏ£¬×îÖÕÅäÖûáÓÐÒ»¸ö¹Ø¼üÇø±ð¡£ÔÚ·¢²¼µÄ×îºóÒ»¸ö½×¶Î£¬Òƶ¯Ó¦ÓóÌÐò»áͨ¹ýÔËÐÐÔÚ Twitter Êý¾ÝÖÐÐĵķþÎñ¶¨ÆÚÀ­È¡ÕâЩÅäÖøüС£Óë Decider Ïà±È£¬ÌØÐÔÇл»»¹Ìṩ¸üϸÁ£¶ÈµÄ¿ØÖÆ¡£µäÐ굀 Decider ÅäÖúܼòµ¥£¬ÀýÈ磬¡°ÔÊÐíÊý¾ÝÖÐÐÄ X ÖÐ 70% µÄÇëÇóдÈëÐÂÊý¾Ý¿â¡±¡£ÌØÐÔÇл»ÅäÖøü¸ß¼¶£¬Ò²¸ü¸´ÔÓ£¬ÀýÈ磬¡°Îª X ÍŶÓÖеÄËùÓÐÈËÒÔ¼°Õâ¸öƽ̨ÉϵÄÕâÐ©ÌØ¶¨Óû§ÆôÓÃÕâ¸öÐÂÌØÐÔ¡£¡±

¡°¿âÇл»£¨Library toggles£©¡±£ºÌØÐÔÇл»ºÍ Decider ÊÇΪÁ˰ïÖúÓ¦ÓóÌÐò¿ª·¢ÈËÔ±°²È«·¢²¼ÌØÐÔ¶øÉè¼ÆµÄ¡£¿â¿ª·¢ÈËÔ±ÔÚÍÆ³ö¸ü¸ÄʱÓÐʱÐèÒªÀàËÆµÄ¿ª¹Ø»úÖÆ¡£FinagleÊÇ Twitter ÃæÏò JVM µÄ¿ªÔ´ RPC ¿ò¼Ü£¬ËüÌṩÁËÒ»ÖÖÇл»»úÖÆ£¬¿â¿ª·¢ÈËÔ±¿ÉÒÔʹÓøûúÖÆ°²È«µØ·¢²¼¸ü¸Ä£¬Í¬Ê±Ò²Îª·þÎñËùÓÐÕßÌṩÁËijÖ̶ֳȵĿØÖÆ¡£Twitter ÔÚÄÚ²¿ÊµÏÖÕâ¸ö API ʱʹÓà ConfigBus À´¶¯Ì¬¿ØÖÆÕâЩÇл»¡£

Ö´ÐÐ A/B ²âÊÔ£ºÒªÓÐЧµØÔËÐвúÆ·ÊÔÑéÐèÒª¿ìËÙµü´úºÍÒ×ÓÚµ÷ÕûµÄ¹¦ÄÜ¡£Twitter µÄÊÔÑé¿ò¼ÜʹÓÃÁË ConfigBus£¬ÔÊÐíÓ¦ÓóÌÐò¿ª·¢ÈËÔ±ÇáËɵØÉèÖúÍÀ©Õ¹ÊÔÑ飬²¢ÔÚÐèҪʱ¿ìËٹرÕËüÃÇ¡£

Ò»°ãÓ¦ÓóÌÐòÅäÖãºConfigBus ×îµäÐ͵ÄÓ÷¨ÊÇ´æ´¢Ò»°ãÓ¦ÓóÌÐòÅäÖÃÎļþ£¬²¢ÔÚ¸ü¸ÄÌύʱ¶¯Ì¬µØÖØÐ¼ÓÔØËüÃÇ¡£

¾­Ñé½Ìѵ

ÎÒÃÇÔÚÉú²ú»·¾³ÖÐÔËÐÐ ConfigBus ÒѾ­½«½üËÄÄêÁË¡£ÒÔÏÂÊÇÎÒÃÇѧµ½µÄһЩ¶«Î÷¡£

½üʵʱ·Ö·¢

¾¡¹Ü ConfigBus µÄÄ¿±êÊǽüʵʱ·Ö·¢£¬µ«ÊÇ£¬Ç©Èë´æ´¢¿âµÄÔã¸âÅäÖøü¸Ä»áѸËÙ´«²¥µ½Èκεط½¡£ÎªÁË×îС»¯ÕâÖÖ¸ü¸ÄµÄÓ°Ï죬ConfigBus ×î½üÌí¼ÓÁËÒ»¸ö¿ÉÑ¡ÌØÐÔ£¬ÌṩÁË¡°·Ö½×¶Î£¨staged £©¡±¹ö¶¯¹¦ÄÜ£¬´Ó¶ø¿ÉÒÔÔöÁ¿µØ¹ö¶¯ÍƳö¸ü¸Ä¡£ÕâÊÇͨ¹ýÍ¬Ê±ÍÆËÍоɰ汾µÄÅäÖÃÒÔ¼°Ò»Ð©¹ØÓÚÍÆ³ö½×¶ÎµÄÔªÊý¾ÝÀ´ÊµÏֵġ£È»ºó£¬¸÷¸öÓ¦ÓóÌÐòʵÀýʹÓý׶ÎÔªÊý¾ÝÀ´¶¯Ì¬µØ¼ÓÔØºÏÊʰ汾µÄÅäÖá£

Git ´æ´¢¿â¹æÄ£

Ëæ×Å Git ´æ´¢¿âÄêÁäµÄÔö³¤£¬ËüµÄ¹æÄ£Ò²ÔÚÔö´ó¡£½Ï´óµÄ´æ´¢¿â»á¼õÂýÖîÈç¡°git clone¡±ºÍ¡°git add¡±Ö®ÀàµÄ²Ù×÷¡£´æ´¢¿â´óС²»½öÊܼìÈëµÄ´óÎļþÓ°Ï죬¶øÇÒ»¹Êܵ½ÖØ´ó¸ü¸ÄµÄÓ°Ïì¡£ÏÂÃæÊÇÎÒÃÇÓÃÀ´½â¾öÕâ¸öÎÊÌâµÄһЩ²ßÂÔ¡£

¡°Ç³ÍÆËÍ£¨Shallow pushes£©¡±£ºÎÒÃÇÉý¼¶µ½Ò»¸ö±È½ÏÐ嵀 Git °æ±¾£¬¸Ã°æ±¾ÔÊÐí¿ª·¢ÈËÔ±´Ó´æ´¢¿âµÄdz¿Ë¡°æ±¾ÍÆË͸ü¸Ä¡£ÕâÒâζ×Å×î³õµÄ¿Ë¡²Ù×÷Òª¿ìµÃ¶à£¬ÒòΪËüÖ»´«Êä HEAD Ìá½»ÒÔ¼°Ìá½»ºÍÍÆË͸ü¸ÄËùÐèµÄ×îСԪÊý¾Ý¡£

¹éµµ£ºÔÚ¼«ÉÙÊýÇé¿öÏ£¬ÎÒÃÇ»á¶Ô Git ´æ´¢¿â½øÐй鵵£¬½«ËùÓÐÀúÊ·¼ÇÂ¼ÒÆ¶¯µ½Ò»¸ö¹éµµÖУ¬È»ºóÖØÐ¿ªÊ¼¡£ÕâʹµÃÎÒÃÇ¿ÉÒÔɾ³ý¾ÉµÄ¡¢Ç±ÔڵĴóÎļþ£¬¼õÉÙ´æ´¢¿âµÄ´óС¡£ÎÒÃÇ»á±ÜÃâ¾­³£ÕâÑù×ö£¬ÒòΪÕâ»áÆÈʹ¿ª·¢ÈËÔ±ÖØÐ¿Ë¡´æ´¢¿â¡£

ÑÓ³¤ delta Á´£ºÎÒÃÇĿǰÕýÔÚÑо¿£¬ÊÇ·ñÒª»ý¼«µØ¶Ô Git ¶ÔÏó½øÐÐÖØÐ´ò°üÒÔÑÓ³¤ delta Á´£¬´Ó¶ø°ïÖú¼õÉÙ´æ´¢¿âµÄ´óС£¬Í¬Ê±ÓÖ±£³Ö¸ü¸ÄÌá½»ÐÔÄܲ»±ä¡£

·ÖÇø

ÎÒÃDz»ÔÊÐí Git ´æ´¢¿âÉϵġ°·Ç¿ì½ø£¨non-fast-forward£©¡±ÍÆËÍ£¬ÒÔ±£»¤Ö÷·ÖÖ§ÖеÄÌá½»²»»á±»Ç¿ÖÆÍÆË͸²¸Ç¡£ÕâÏîÉèÖõÄЧ¹ûÊÇÒªÇó¶Ô´æ´¢¿âµÄÈκÎÍÆËͶ¼±ØÐëʹÓô洢¿âµÄ×îи±±¾¡£Èç¹ûÁ½¸öÌá½»ÕßÔÚ½«Êý¾ÝÍÆË͵½´æ´¢¿âʱ²úÉú¾ºÕù£¬ÄÇôÆäÖÐÒ»¸ö½«Ê¤³ö£¬ÁíÒ»¸ö½«²»µÃ²»À­È¡×îеĸü¸Ä²¢ÖØÊÔ¡£Õâ»áÔö¼ÓÅäÖøüвÙ×÷µÄÑÓ³Ù¡£¶ÔÓÚÆµ·±Ìá½»ÕßÀ´Ëµ£¬ÑÓ³ÙµÄÔö¼Ó´øÀ´ÁËÒ»¸ö¾Þ´óµÄÎÊÌâ¡£ÎÒÃÇÊÇͨ¹ýÔÚºǫ́½«Æµ·±¸üеÄÃû³Æ¿Õ¼ä»®·Öµ½µ¥¶ÀµÄרÓô洢¿âÀ´½â¾öÕâ¸öÎÊÌâ¡£¶ÔÓÚʹÓà API ½øÐÐÅäÖøüеĿͻ§¶ËÀ´Ëµ£¬ÕâûÓÐÈκβîÒì¡£

Îļþ¼¶ÏßÐÔ»¯

ʵ¼ÊÉÏ£¬²»ÔÊÐí·Ç¿ì½øÍÆËÍÒâζ×Å ConfigBus ÔÚ´æ´¢¿â¼¶ÉÏÊÇÏßÐÔ»¯µÄ¡£Èç¹ûÁ½¸ö¿ª·¢ÈËÔ±ÒòÍ¬Ê±ÍÆË͸ü¸Ä¶ø·¢Éú¾ºÕù£¬ÔòÆäÖÐÒ»¸ö½«¡°»ñʤ¡±£¬ÁíÒ»¸ö±ØÐëÀ­È¡×îеĸü¸Ä²¢ÖØÊÔ¡£¼´Ê¹ÕâÁ½¸ö¿ª·¢ÈËÔ±ÕýÔÚ¸üÐÂÍêÈ«²»Í¬µÄÎļþ£¬Çé¿öÒ²ÊÇÈç´Ë¡£¶ÔÓÚ²»¶Ï¸üеĴ洢¿â£¬Õâ»á¸ø¿Í»§¶Ë´øÀ´²»±ØÒªµÄ¸ºµ£¡£Òò´Ë£¬ÎÒÃÇ°Ñ ConfigBus ·þÎñÉè¼Æ³É×Ô¶¯À­È¡¸üУ¬²¢ÔÚʧ°ÜÊ±ÖØÊÔÍÆËÍ¡£ÕâÌṩÁ˱íÃæÉϵÄÎļþ¼¶ÏßÐÔ»¯£¬È·±£¿Í»§¶ËÖ»ÔÚÎļþ¼¶¸üгåͻʱ²Å¿´µ½Ê§°Ü¡£

git fetchÓëgit pull

¡°git pull¡±Êµ¼ÊÉÏÊÇ¡°git fetch¡±+¡°git merge¡±¡£Èç¹û ConfigStore »úÆ÷ÉϵĿË¡վµãË𻵻òÓëÔ¶³Ì·þÎñÆ÷²»Í¬²½£¬ºÏ²¢²½Öè¿ÉÄÜ»áʧ°Ü¡£ÒÔ×Ô¶¯·½Ê½´Ó·þÎñÆ÷»ñÈ¡¸üÐÂ×ȫ¡¢×î¼ò½àµÄ·½·¨ÊÇÔËÐС°git fetch¡±+¡°git reset¡ª¡ªhard FETCH_HEAD¡±£¬ÒԱ㸲¸Ç¿Ë¡վµãÉÏ´æÔÚµÄÈκα¾µØ×´Ì¬¡£

rsync µ¼ÖµĻºÂý

ÎÒÃÇÑ¡ÔñÈÃÉÙÁ¿µÄ ConfigStore »úÆ÷´Ó Git ÉÏ»ñÈ¡ÐÅÏ¢£¬²¢½«ËüÃÇ×÷ΪÆäËû»úÆ÷ͨ¹ý rsync ½øÐÐͬ²½µÄÔ´¡£ÎÒÃÇʹÓà -c Ñ¡ÏîÔËÐÐ rsync£¬ÆÈʹËüºöÂÔʱ¼ä´Á£¬²¢Îª´óСÏàͬµÄÎļþ¼ÆËãУÑéºÍ¡£ÕâÊÇ CPU Ãܼ¯Ð͵ģ¬Òò´ËÏÞÖÆÁËÿ̨ ConfigStore »úÆ÷¿ÉÒÔÌṩµÄ²¢·¢ rsync ²Ù×÷µÄÊýÁ¿¡£·´¹ýÀ´£¬ÕâÓÖÔö¼ÓÁËÕû¸ö¶Ëµ½¶Ë´«²¥µÄÑÓ³Ù¡£½«Ãû³Æ¿Õ¼ä·ÖÇø³Éµ¥¶ÀµÄ´æ´¢¿â¿ÉÒÔ¼õÉÙ rsync ÔÚÿ´ÎÌύʱÐèÒª±È½ÏµÄÎļþÊýÁ¿¡£ÁíÒ»ÖÖ¿ÉÄܵÄÑ¡ÔñÊÇÔÚÿ̨ ConfigStore »úÆ÷ÉÏÔËÐÐÒ»¸ö Git ·þÎñÆ÷£¬²¢ÈÃËùÓеÄÄ¿±ê»úÆ÷ÔËÐС°Git fetch¡±£¬ÕâÖ»ÐèÒªÏÂÔØ×îеġ°HEAD¡±£¬¶ø²»ÐèÒªÈκαȽϿªÏú£¨ÒòΪ Git ·þÎñÆ÷È·ÇеØÖªµÀ·¢ÉúÁËʲô±ä»¯£©¡£

·ÇÔ­×Óͬ²½

ConfigBus ʹÓà rsync£¬ÕâÒâζ×ÅÎļþ¿ÉÒÔµ¥¸öµØÍ¬²½µ½Ä¿±ê»úÆ÷ÉÏ¡£Òò´Ë£¬Èç¹ûÌá½»ÅöÇɸü¸ÄÁ˶à¸öÎļþ£¬ÄÇôĿ±ê»úÆ÷ÉϵÄÎļþϵͳ¿ÉÄÜ»áÔÝʱ°üº¬Ð¾ÉÎļþµÄ»ìºÏ¡£Ò»¸ö¿ÉÄܵĽâ¾ö·½°¸ÊÇͬ²½µ½Ò»¸öÁÙʱλÖã¬È»ºóʹÓÃÔ­×ÓÖØÃüÃû²Ù×÷À´Íê³É¸ü¸Ä¡£µ«ÊÇ£¬ÓÉÓÚÐèÒªÒÔÏòºó¼æÈݵķ½Ê½Ö§³Ö·ÖÇøÃû³Æ¿Õ¼ä£¬²¿ÊðλÖÃÉÏ´æÔÚ·ûºÅÁ´½Ó£¬ÕâʹµÃÎÊÌâ±äµÃ¸´ÔÓ¡£Ò»¸ö¸ü¿ÉÐеĽâ¾ö·½°¸ÊǼÌÐøÏñÏÖÔÚÕâÑù·Ö·¢Ö÷ Git ´æ´¢¿â£¬µ«Êǰѽ«À´µÄ·ÖÇø´æ´¢¿âÇл»µ½Ô­×Ó²¿Êð¡£

δÀ´Õ¹Íû

ÔÚ Twitter£¬ÎÒÃǹ¹½¨ ConfigBus ÊÇΪÁËÌṩһ¸ö½¡×³µÄ¶¯Ì¬ÅäÖÃÆ½Ì¨¡£Ëæ×ÅÏÖÓÐÓÃÀýµÄ·¢Õ¹ºÍÐÂÓÃÀýµÄ³öÏÖ£¬ConfigBus ±ØÐë½øÐиü¸ÄÒÔÊÊÓ¦ËüÃÇ¡£ÒÔÏÂÊÇÎÒÃÇÌØ±ð¹Ø×¢µÄ¼¸¸öÁìÓò¡£

Git

¶ÔÓÚÖÕ¶ËÓû§¶øÑÔ£¬Git ÓкܶàÓŵ㣬µ«ÊÇ£¬Ëü´ú±íÁËÒ»¸ö³ÖÐøµÄ²Ù×÷ÌôÕ½¡£ÎÒÃǶÔËü½ñºóÊÇ·ñÈÔÈ»ÊÇÕýÈ·µÄ½â¾ö°ì·¨³Ö¿ª·Å̬¶È¡£Ìæ´ú·½·¨°üÀ¨¼ü - Öµ´æ´¢£¬Èç Consul£¬µ«ÎÒÃDZØÐë½â¾öÀúÊ·Ì«ÉÙÕâ¸öÏà·´µÄÎÊÌâ¡£

ÖØÐÂÉè¼Æ·Ö·¢

ʹÓà rsync ´ÓÒ»¸öºÜСµÄ ConfigStore »úÆ÷³Ø½øÐзַ¢ÏÞÖÆÁË·Ö·¢¹ÜµÀµÄËÙ¶È¡£Ì½Ë÷µã¶Ôµã·Ö·¢Ä£Ðͽ«ÊÇÒ»¼þºÜÓÐȤµÄÊÂÇ飬ÔÚÕâÖÖÄ£ÐÍÖУ¬Ã¿Ì¨»úÆ÷ÔÚÓµÓв¿·Ö»òÈ«²¿Êý¾Ýºó¶¼³äµ±½øÒ»²½´«ÊäµÄÔ´¡£

Ö§³Ö´ó¶ÔÏó

Ŀǰ£¬ÎÒÃDz»¹ÄÀøÊ¹Óà ConfigBus ´¦Àí´óÐÍ Blob£¬ÕâÖ÷ÒªÊÇÒòΪ Git£¬Ò²ÒòΪÔÚÿ̨»úÆ÷ÉÏ´æ´¢´óÐÍ Blob µÄЧÂʺܵ͡£Ò»¸öDZÔڵĽâ¾ö·½°¸Êǽ« Blob ´æ´¢ÔÚÒ»¸ö³£¹æµÄ Blob ´æ´¢ÖУ¬²¢½«»î¶¯°æ±¾´æ´¢ÔÚ ConfigBus ÖУ¬È»ºó¸ù¾ÝÐèÒªÏÂÔØËüÃÇ¡£

 

   
1627 ´Îä¯ÀÀ       27
Ïà¹ØÎÄÕÂ

ÿÈÕ¹¹½¨½â¾ö·½°¸
ÈçºÎÖÆ¶¨ÓÐЧµÄÅäÖùÜÀíÁ÷³Ì
ÅäÖùÜÀíÖ÷Òª»î¶¯¼°ÊµÏÖ·½·¨
¹¹½¨¹ÜÀíÈëÃÅ
Ïà¹ØÎĵµ

ÅäÖùÜÀíÁ÷³Ì
ÅäÖùÜÀí°×ƤÊé
CM09_CÅäÖùÜÀí±ê×¼
ʹÓÃSVN½øÐа汾¿ØÖÆ
Ïà¹Ø¿Î³Ì

ÅäÖùÜÀíʵ¼ù
ÅäÖùÜÀí·½·¨¡¢¹¤¾ßÓëÓ¦ÓÃ
¶à²ã´Î¼¯³ÉÅäÖùÜÀí
²úÆ··¢²¼¹ÜÀí