±à¼ÍƼö: |
±¾ÎÄÀ´×Ô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 ÖУ¬È»ºó¸ù¾ÝÐèÒªÏÂÔØËüÃÇ¡£
|