±à¼ÍƼö: |
±¾ÎÄÖ÷Òª²ûÊö
ServiceMesh ¼Ü¹¹ÔÚÓÐÔÞÊÇÈçºÎÒ»²½²½·¢Õ¹ºÍÂ䵨µÄ£¬²¢¶Ô ServiceMesh
¼Ü¹¹Äܹ»½â¾öµÄÎÊÌâºÍÓ¦Óó¡¾°ÓнøÒ»²½µÄ½²½â
±¾ÎÄÀ´×ÔÓÚInfoQ£¬ÓÉ»ðÁú¹ûÈí¼þç÷ç÷±à¼¡¢ÍƼö |
|
Ò»¡¢ÔµÆð
ÓÐÔÞ³õÆÚ£¬Ê¹ÓõÄÊÇ Nginx+PHP-FPM£¬ËùÓеÄÒµÎñÂß¼´úÂë¶¼ÔÚÒ»¸ö½Ð×ö Iron µÄ PHP ´úÂë²Ö¿âÀÊÇÒ»¸öµäÐ͵ĵ¥ÌåÓ¦Óà (Monolith)£¬ÕûÌå¼Ü¹¹¿ÉÒÔ¼òµ¥µÄ±íʾ³ÉÏÂͼ£º

¼Ü¹¹ÔÚÓÐÔÞ³õÆÚ£¬ÍŶӹæÄ£±È½ÏС£¬ÇÒÒµÎñÂß¼Ïà¶Ô±È½Ï¼òµ¥µÄʱºò£¬ºÜºÃµÄÖ§³ÅºÍ³ÐÔØÁËÓÐÔ޵ĺËÐÄÒµÎñ¡£µ«ÊÇ£¬Ëæ×ÅÓÐÔÞÒµÎñºÍÍŶӹæÄ£µÄ¼«ËÙ·¢Õ¹£¬µ¥ÌåÓ¦ÓõÄȱÏÝÓúÀ´Óú͹ÏÔ£º
ñîºÏÐÔ¸ß
¸ôÀëÐÔ²î
ÍŶÓÐ×÷ÐÔ²î
Ò»´Î·¢²¼´øÀ´µÄ¹ÊÕÏÍùÍùÐèÒª¼¸¸öÒµÎñÍŶӵÄÈË×øÔÚÒ»Æð£¬»¨·ÑÊýÊ®·ÖÖÓÉõÖÁ¼¸¸öСʱ²ÅÄܶ¨Î»¾¿¾¹ÊÇÄÄ´¦¸Ä¶¯Òý·¢µÄ¡£¶Ôµ¥ÌåÓ¦ÓýøÐÐ΢·þÎñ¸ÄÔì£¬ÊÆÔÚ±ØÐС£
×ۺϵ±Ê±ÍŶӺÍÒµÎñ·¢Õ¹µÄʵ¼ÊÇé¿ö£¬Ò»·½Ã棬ÓÐÔÞÑ¡ÔñÁ˹úÄڷdz£Á÷ÐÐÇҾ߱¸Á¼ºÃÉú̬µÄ dubbo ×÷Ϊ Java ÓïÑÔ RPC ¿ò¼Ü£»ÁíÒ»·½Ã棬¿¼Âǵ½ÍŶÓÖÐÓÐÏ൱ÊýÁ¿ PHP ¿ª·¢µÄͬѧ£¬ÓÐÔÞÄÚ²¿·õ»¯³öÁË ZanPHP¡ª¡ªÊ¹Óà PHP ÓïÑԵĴ¿Òì²½ RPC ¿ò¼Ü£¬²¢Ñ¡ÔñÁË ETCD ×÷Ϊ·þÎñ×¢²áºÍ·¢ÏÖÖÐÐÄ£¬¿ªÊ¼´î½¨ÓÐÔÞ·þÎñ»¯µÄÕûÌå¼Ü¹¹¡£ÎªÁ˽â¾ö¿çÓïÑÔ (Java Óë PHP ÓïÑÔÖ®¼ä) µÄ RPC ͨÐÅÎÊÌ⣬ÓÐÔÞÔÚ facebook ¿ªÔ´µÄ thrift ÐÒé»ù´¡ÉϽøÐÐÁ˶þ´Î·â×°£¬¿ª·¢ÁË NOVA ÐÒéÓÃÒÔÖ§³Ö¿çÓïÑÔ RPC µ÷Óá£
×ÛÉÏËùÊö£¬ÕâһʱÆÚ£¬ÕûÌåµÄ¼Ü¹¹Ñ¡ÐÍÈçÏ£º

¾¡¹Ü½«µ¥ÌåÓ¦Óòð·Ö³É΢·þÎñÄܹ»´øÀ´Ò»ÏµÁÐÖÚËùÖÜÖªµÄÊÕÒæ£¬µ«ÈκÎÒµÎñÇ¨ÒÆµÄ¹ý³Ì¶¼ÊÇÍ´¿àµÄ£¬Í¬Ê±£¬ÔÚÇ¨ÒÆ¹ý³ÌÖбض¨»áÓÐÏ൱³¤µÄÒ»¶Îʱ¼äоÉÒµÎñ¼Ü¹¹´úÂëÐèҪͬʱÔÚÏßÉÏÔËÐС£Òò¶ø£¬ÏÖÓгÐÔØÁË´óÁ¿ºËÐÄÒµÎñµÄµ¥Ìå
PHP-FPM ´úÂëÈçºÎµ÷ÓÃвð·Ö³öÀ´µÄ Java »òÕß ZanPHP µÄ΢·þÎñ£¬¾Í³ÉÁËÊ×µ±Æä³åµÄÎÊÌâ¡£
ÓÉÓÚ PHP-FPM ÔËÐÐģʽµÄÌØÊâÐÔ£ºµ¥¸ö HTTP ÇëÇó´¦ÀíÍê³ÉÖ®ºó»áÊÍ·ÅËùÓеÄ×ÊÔ´ºÍÄڴ棬µ¼ÖÂÆäºÜÄÑʵÏÖ×î»ù±¾µÄ΢·þÎñ¼Ü¹¹µÄÐèÇó¡£È磬΢·þÎñ¼Ü¹¹ÐèÒªµ÷ÓöË
(consumer) ³¤Ê±¼ä»º´æ·þÎñ·¢ÏÖ½á¹û£¬²¢ÄܸÐÖª·þÎñ·¢ÏÖ½á¹ûµÄ±ä»¯¡£¼´Ê¹Ê¹Óù²ÏíÄÚ´æµÄ·½Ê½ÊµÏÖ£¬ÕûÌåµÄʵÏֳɱ¾Ò²·Ç³£¸ß£¬Îȶ¨ÐÔÒ²ÄÑÒԵõ½ºÜºÃµÄ±£Ö¤¡£ÔÚÕâÑùµÄ±³¾°Ï£¬ÓÐÔÞ
PaaS ÍŶÓÔÚ 16 Äê³õʹÓà golang ¿ª·¢²¢ÉÏÏßÁË·þÎñ»¯´úÀí×é¼þ Tether0.1 °æ±¾¡£Éè¼ÆµÄÖ÷Òª¹¦ÄÜΪ£º
ʵÏÖ¶ÔÓÐÔÞÄÚ²¿¿çÓïÑÔ RPC ÐÒé NOVA µÄ½âÎö ¶Ô½ÓÓÐÔÞÄÚ²¿ ETCD ·þÎñ·¢ÏÖÖÐÐÄ£¬½âÎö²¢»º´æ·þÎñ·¢ÏÖÊý¾Ý
ͨ¹ý±¾µØ¶Ë¿Ú½ÓÊÜ NOVARPC ÇëÇ󣬲¢¸ù¾Ý½âÎöµÄ NOVA ÇëÇóÐÅÏ¢ºÍ·þÎñ·¢ÏÖ½á¹û£¬½«ÇëÇóͨ¹ý³¤Á´½Óת·¢ÖÁºó¶Ë·þÎñ
½øÐÐ×ܽá¾ÍÊÇ£ºTether0.1 °æ±¾ÊÇʵÏÖÁË´úÀí¡¢×ª·¢ NOVARPC ÇëÇóÖÁÏàÓ¦µÄ·þÎñÌṩ·½µÄ±¾µØ
Agent£¬¼òµ¥µÄ¼Ü¹¹Í¼ÈçÏ£º

´Ó¼Ü¹¹Í¼ÉÏ¿ÉÒÔ¿´³ö£º
¶ÔÓÚ PHP-FPM(ÏÖ´æµÄµ¥ÌåÓ¦ÓÃ)£¬Ö»ÐèҪʵÏÖ NOVA ÐÒéµÄ±à½âÂë¼´¿É
·þÎñ»¯ÕûÌå¼Ü¹¹µÄ¸´ÔÓ¶È£¬°üÀ¨£º·þÎñ·¢ÏÖ¡¢¸ºÔؾùºâ¡¢ºó¶Ë·þÎñµÄÓÅÑÅÏÂÏߵȵȣ¬È«²¿¶¼Ï³Áµ½ Tether ²ã´¦Àí¡£
Tether ÓëÓÐÔÞ¼à¿Ø¡¢ÈÕ־ƽ̨¶Ô½Ó£¬ÊµÏÖÁ˶Ô΢·þÎñ¼äµ÷ÓÃµÄ¼à¿ØºÍ±¨¾¯¡£
´Ó¹¦Äܺͼܹ¹ÉÏ¿ÉÒÔºÜÇåÎúµØ¿´³ö£¬Tether ¾ÍÊÇ ServiceMesh ¼Ü¹¹ÖÐµÄ Sidecar£¬Ö»²»¹ýÔÚÓÐÔÞ³õÆÚµÄʵ¼ùÖУ¬Ö»ÓзþÎñµÄµ÷Ó÷½ (consumer ¶Ë) ͨ¹ý Sidecar ·¢Æð RPC ÇëÇó¡£
ËäÈ»Ôڴ˽׶ÎÒýÈë Tether ×÷Ϊ Sidecar µÄ³ö·¢µãÊÇΪÁ˽â¾ö PHP-FPM µ÷Óúó¶Ë·þÎñµÄÎÊÌ⣬µ«ÊÇ£¬ServiceMesh ¼Ü¹¹´øÀ´µÄÓÅÊÆºÜ¿ì¾ÍÌåÏÖÁ˳öÀ´£ºÕû¸ö΢·þÎñ¼Ü¹¹µÄ¸´ÔӶȶ¼¶ÔÓ¦ÓÃÒþ²ØÁË£¬¼Ü¹¹µÄ¹¦Äܵü´úºÍÉý¼¶¶ÔÒµÎñÓ¦ÓÃÍêȫ͸Ã÷£¬Ö»ÐèÓÉÔËάÉý¼¶ Sidecar£¬ÒµÎñÓ¦Óñã¾ß±¸ÁËеÄ΢·þÎñ¹¦ÄÜÌØÐÔ¡£
ÒÔ´ËΪ»ù´¡£¬ÓÐÔÞ¿ªÊ¼Öð²½½«µ¥ÌåµÄ PHP-FPM Ó¦Óòð·Ö³ÉÂß¼ºÍÒµÎñÉÏÏà¶Ô¶ÀÁ¢µÄ΢·þÎñ£¬Öð²½ËõС PHP-FPM Ó¦ÓÃÉÏËù³ÐÔØµÄÒµÎñÂß¼£¬¿ªÆôÁËÓÐÔÞ΢·þÎñ¼Ü¹¹µÄÑݽøÖ®Â·¡£
¶þ¡¢·¢?/p>
ʱ¼äÀ´µ½ 2017 ÄêÄêÖУ¬Ëæ×ż¼ÊõÍŶӺÍÒµÎñµÄ½øÒ»²½·¢Õ¹£¬ÓÐÔ޵ĺËÐÄÒµÎñÖÐ̨»ù±¾É϶¼Ñ¡ÔñÁË Java Óë Dubbo µÄ×éºÏ£¬Îª¿çÓïÑÔµ÷ÓÃÉè¼ÆµÄ NOVA ÐÒéÒÔ¼° ZanPHP ¿ò¼ÜÖð½¥Ê½Î¢¡£ÔÚÕâÑùµÄÇ÷ÊÆºÍ¼¼Êõ·¢Õ¹±³¾°Ö®Ï£¬ÓÐÔÞ¼¼Êõ¼Ü¹¹È·¶¨ÁËеķ¢Õ¹·½Ïò£º
ºó¶ËÒµÎñÖÐ̨ȫ²¿Ç¨ÒÆÖÁ Java PHP-FPM ÖÐÓëÒ³ÃæÆ´×°ºÍäÖȾÏà¹ØµÄÂ߼ȫ²¿Ç¨ÒÆÖÁ Node.js 
Ëæ×Å Node.js µÄÒýÈ룬ͬÑùµÄÎÊÌâÔٴγöÏÖ£ºNode.js ×÷ΪҵÎñ±àÅźÍÄ£°æäÖȾ²ã£¬ÈçºÎµ÷Óò¿ÊðÔÚ¸´ÔÓ·þÎñ»¯¼Ü¹¹ÖÐµÄ Java ÖÐ̨ӦÓã¿
Ê×ÏÈ£¬ÊÇ RPC ÐÒéºÍ±àÂëµÄÑ¡ÔñÎÊÌâ¡£¶ÔÓÚ¿çÓïÑÔµ÷ÓÃÒµ½çÒ»°ãÑ¡ÔñʹÓà IDL À´ÃèÊö½Ó¿Ú¶¨Ò壬²¢À´Í¨¹ý¹¤¾ß×Ô¶¯Éú³ÉµÄ×®´úÂëÐòÁл¯¡¢·´ÐòÁл¯Êý¾ÝºÍ±àÂë¡¢½âÎö RPC ÇëÇó°ü£¬grpc ºÍ thrift ¶¼ÊÇͨ¹ýÕâÖÖ·½Ê½ÊµÏֵĶàÓïÑÔÖ§³Ö¡£ÕâÊDZÊÕ߱ȽÏÍÆ³çµÄ·½Ê½£¬IDL ͨ³£½ö±£Áô¸÷¸ö±à³ÌÓïÑÔ¹«¹²µÄÌØÐÔ£¬¶ø±ÜÃâÒýÈëÓëÌØ¶¨ÓïÑÔÏà¹ØµÄÌØÐÔ£¬½ø¶ø¶Ô¿çÓïÑÔµ÷ÓÃÓÐ×ŷdz£ºÃµÄÖ§³Ö¡£Í¬Ê± IDL ±¾Éí¾ÍÊÇÁ¼ºÃµÄ½Ó¿ÚÃèÊöÎĵµ£¬Äܹ»ÔÚÏ൱³Ì¶ÈÉϼõÉÙ¹µÍ¨¡¢Ð×÷³É±¾£¬Ò²±ãÓÚ¿ª·¢ÕßÑø³ÉÏÈÉè¼Æ½Ó¿ÚÔÙ½øÐпª·¢µÄϰ¹ß¡£
ËäÈ»ÓÐÔÞ³õÆÚ¾ÍÉè¼ÆÁË NOVA ÐÒ飬ͨ¹ý±àд IDL Éú³É×®´úÂëµÄ·½Ê½ÊµÏÖ¿çÓïÑÔ RPC£¬µ«ÊÇʹÓà dubbo ¿ò¼ÜµÄ Java ¿ª·¢Í¬Ñ§ÒѾϰ¹ßÁËÖ±½Ó±àд½Ó¿Ú¾ÍÄÜʵÏÖ Java ·þÎñÖ®¼äÏ໥µ÷ÓõĿª·¢Ä£Ê½£¬µ¼ÖÂÔÚÍÆ¹ã NOVA ÐÒéµÄʱºòÓöµ½Á˲»ÉÙµÄ×èÁ¦¡ª¡ª´æÔÚ¸ü±ã½ÝµÄµ÷Ó÷½Ê½Ê±£¬ÎªºÎ»¹ÒªÑ§Ï°¾ßÓÐÒ»¶¨ÉÏÊÖÃż÷µÄ IDL£¿°ÚÔÚÃæÇ°µÄÀ§¾³£ºÊ¹Óà Java µÄºó¶Ë¿ª·¢Í¬Ñ§ÒѾ²»ÇéÔ¸¡¢ÉõÖÁµÖ´¥±àд IDL£¬Ïò Node.js µÄ¿ª·¢Í¬Ñ§Íƹã IDL Ò²¿ÉÄÜÓöµ½Í¬ÑùµÄÎÊÌâ¡£

½ô½Ó×ÅÊÇ Node.js ¿ò¼ÜÓëÓÐÔÞ·þÎñ»¯¼Ü¹¹µÄÕûºÏÎÊÌâ¡£ÎÒÃǵ÷ÑÐÁËÒµ½çÒÑÓеĿªÔ´·½°¸ dubbo2.js¡£ËäÈ» Node.js ¾ßÓÐʵÏÖÇëÇó±à½âÂë¡¢·þÎñ·¢ÏÖ¡¢³¤Á´½Ó±£³Ö¡¢ÇëÇó¸ºÔؾùºâµÄÄÜÁ¦£»µ«ÊÇ£¬ÒµÎñǰ̨ÊÇ·ñÓбØÒªÒýÈëÈç´ËµÄ¸´ÔÓ¶È£¿·þÎñ»¯µ÷ÓÃµÄ¼à¿Ø¡¢Â·ÓɲßÂÔ¡¢ÏÞÁ÷¡¢È۶ϵÈÌØÐÔ£¬Node.js ÊÇ·ñÐèҪȫ²¿¶¼ÊµÏÖÒ»±é£¿ÈôÓÐÔÞºóÐøÒµÎñÐèҪʹÓÃеıà³ÌÓïÑÔ£ºC#¡¢Python µÈ£¬ÄÇÊÇ·ñÕâЩ±à³ÌÓïÑÔÓÖÒªÔÙʵÏÖÒ»±éÕâÐ©ÌØÐÔ£¿
dubbo2.js ¶ÔÎÒÃÇÃæÁٵĵÚÒ»¸öÎÊÌâÌṩÁËÒ»¶¨µÄ˼·£ºÍ¨¹ýÏÔʾµÄÖ¸¶¨µ÷Óõĺó¶Ë Java ½Ó¿ÚµÄ²ÎÊýÀàÐÍ£¬dubbo2.js ʵÏÖÁË dubbo ÐÒéµÄ±à½âÂ룬´ïµ½Á˲»Í¨¹ý IDL ʵÏÖ¿çÓïÑÔµ÷ÓõÄÄ¿µÄ¡£µ«ÊÇ£¬Èà Node.js µÄ¿ª·¢Í¬Ñ§È¥¸ÐÖªºó¶ËµÄ Java ÀàÐÍÏµÍ³ÕæµÄºÏÀíÂð£¿

»ùÓÚÒÔÉϵÄ˼¿¼£¬ÎÒÃÇÏëµ½ÁËÔçÒѽÓÈëÓÐÔÞ΢·þÎñ¿ò¼ÜµÄ Sidecar ²úÆ·£ºTether¡£Í¬Ê±£¬ÔÚ´«Í³µÄ Sidecar ÉϽøÐÐÁË´´Ð£ºÎªÁËÌù½ü Node.js ͬѧµÄ¿ª·¢Ä£Ê½ºÍϰ¹ß£¬²¢×î´ó³Ì¶ÈµÄÒþ²Øºó¶Ë·þÎñ»¯¼Ü¹¹µÄ¸´ÔÓ¶È£¬ÎÒÃÇÉè¼ÆÁ˼òµ¥µÄ HTTP+Json µÄ½Ó¿ÚÓÃÒÔ Node.js Óë Tether Ö®¼äµÄµ÷Óã¬ÓÉ Tether ʵÏÖ HTTP ÐÒéÓë΢·þÎñµ÷ÓÃµÄ dubbo ÐÒéÖ®¼äµÄÏ໥ת»»¡£ÕûÌå¼Ü¹¹ÈçÏ£º

ÖµµÃ×¢ÒâµÄÊÇ£¬Í¼Öеķº»¯µ÷Óò¢²»ÊÇ¿ªÔ´°æ±¾ dubbo µÄ¡°·º»¯µ÷Óá±£¬¶øÊÇÓÐÔÞÄÚ²¿·ÂÕÕ¿ªÔ´°æ±¾µÄ¡°·º»¯µ÷Óá±Õë¶ÔÐÔʵÏֵIJÎÊýʹÓà json ±àÂë (ÓÐÔÞÄÚʹÓà dubbo ĬÈ쵀 hessian2 ÐòÁл¯·½Ê½±àÂë²ÎÊý) µÄ¡°¿çÓïÑÔ·º»¯µ÷Óá±£¬¸Ã½Ó¿Úµ÷Ó÷µ»ØµÄÒ²ÊÇ hessian ±àÂëµÄ json ´®¡£
ÖÁ´Ë£¬Ò»ÀÍÓÀÒݵؽâ¾öÁ˶àÓïÑÔ½ÓÈëÓÐÔÞ·þÎñ»¯¼Ü¹¹µÄÎÊÌ⣬ÓÉÓÚ HTTP+Json ÐÒéµÄͨÓÃÐÔ£¬ÈÎºÎÆäËûÓïÑÔ¶¼¿ÉÒԺܷ½±ãµØÍ¨¹ý Tether µ÷ÓúËÐÄ Java ·þÎñµÄ dubbo ½Ó¿Ú£¬¶ø²»ÓùØÐÄ·þÎñ·¢ÏÖ¡¢¼à¿ØµÈ¸´ÔÓÎÊÌâ¡£
Ŀǰ£¬¸Ã¼Ü¹¹ÔÚÓÐÔÞÉú²ú»·¾³ÖÐÒѾÔËÐÐÁËÒ»Äê°ë¶à£¬Í¨¹ý Tether µÄÇëÇóÕ¼µ½ÓÐÔÞ΢·þÎñ×ÜÁ÷Á¿µÄ 20%+£¬ÊÇÓÐÔÞ΢·þÎñÕûÌå¼Ü¹¹µÄÖØÒª×é³É²¿·Ö¡£
Èý¡¢More¡
ÔÚ ServiceMesh ¼Ü¹¹Â䵨¹ý³ÌÖУ¬ÎÒÃÇÐÀϲµÄ·¢ÏÖ£¬³ýÁË×î³õµÄÉè¼ÆÒâͼ֮Í⣬Tether ×÷Ϊ Sidecar »¹Äܹ»ÊµÏÖÆäËû·Ç³£ÓмÛÖµµÄ¹¦ÄÜ£¬½ø¶øÔÚһЩÏîÄ¿Öз¢»ÓÖÁ¹ØÖØÒªµÄ×÷Óá£
ÔÚʵ¼ÊÏîÄ¿ÖУ¬ÎÒÃÇÓöµ½ÁËÕâÑùÒ»ÖÖ³¡¾°£ºÓ¦ÓÃÐèÒªµ÷Óò¿ÊðÔÚÁíÒ»¸ö»ú·¿ÖеķþÎñ¡£ÓÉÓÚµ÷Ó÷¢Æð·½ºÍ·þÎñÌṩ·½·ÖÊô²»Í¬µÄ΢·þÎñ¼¯Èº£¬·þÎñ·¢ÏÖÎÞ·¨·¢ÏÖ²¿ÊðÔÚÁíÒ»¸ö»ú·¿ÖеķþÎñÌṩ·½£»Í¬Ê±£¬ÔÚ¿ç»ú·¿µ÷Óõij¡¾°Ï£¬Êý¾ÝµÄ°²È«ÐÔÒ²±ØÐëµÃµ½¸ß¶ÈµÄÖØÊÓ£¬¿ç»ú·¿µ÷ÓñØÐë¾¹ýÑϸñµÄ¼ÓÃܺͼøÈ¨¡£
ÓÐÔÞ PaaS ÍŶÓͨ¹ý¡°·þÎñαװ (ServicePretender£¬ÒÔϼò³Æ SP)¡±Ó¦ÓÃºÍ Tether Ïà½áºÏ£¬ºÜÇÉÃîµÄÂú×ãÁË¿ç»ú·¿·þÎñ·¢ÏÖºÍÊý¾Ý¼ÓÃÜ¡¢¼øÈ¨µÄÐèÇó¡£ÕûÌåµÄ¼Ü¹¹Í¼ÈçÏ£º

ÖµµÃ×¢ÒâµÄÊÇ£¬ÎªÁ˱ãÓÚÀí½â£¬Í¼ÖÐÖ»»³öÁË A »ú·¿ Service0 µ÷Óà B »ú·¿ Service1 µÄµ÷ÓÃͼʾ¡£Êµ¼ÊÉÏ A¡¢B »ú·¿ÊÇÍêÈ«¶Ô³ÆµÄ£¬B »ú·¿µ÷Óà A »ú·¿µÄÓ¦ÓÃÊÇÍêȫһÑùµÄ¡£¶Ô³ÆµÄÉè¼Æ¼«´óµØ¼ò»¯ÁËϵͳ¼Ü¹¹£¬½µµÍÁËÔËάÄѶȡ£SP Óë·þÎñ×¢²áÖÐÐÄ¡¢Tether ÒÔ¼°¶Ô¶Ë»ú·¿¶Ô³Æ²¿ÊðµÄ SP ½øÐн»»¥£¬Ö÷ÒªÍê³ÉÒÔÏÂÁ½¸ö¹¦ÄÜ£º
Ìṩ HTTPS ·þÎñ£¬¶Ô¶ËµÄ SP Ó¦ÓÿÉÒÔͨ¹ýÏàÓ¦µÄ½Ó¿Ú£¬»ñÈ¡µ½±¾»ú·¿·þÎñ×¢²áÖÐÐÄ ETCD ÉϵÄÓ¦ÓÃÔªÊý¾Ý (ͼʾÖУ¬»ú·¿ A µÄ SP ͨ¹ý HTTPS ÐÒé´Ó B »ú·¿µÄ SP »ñÈ¡µ½×¢²áÔÚ B »ú·¿ ETCD É쵀 Service1 µÄÔªÊý¾ÝÐÅÏ¢)
ÓëÖ¸¶¨µÄ Tether ±£³ÖÐÄÌø¼ì²é£¬Èô Tether ÐÄÌøÕý³££¬Ôò½«¶ÔÓ¦µÄ Tether ʹÓà 1 ÖлñÈ¡µÄ·þÎñÔªÊý¾ÝÐÅÏ¢£¬×¢²áµ½±¾»ú·¿µÄ·þÎñ×¢²áÖÐÐÄ¡£¼´½« Tether αװ³É¶Ô¶Ë»ú·¿µÄÏàÓ¦Ó¦Óà (ͼʾÖУ¬»ú·¿ A µÄ SP ½«Í¬»ú·¿µÄ Tether αװ³ÉÁË B »ú·¿µÄ Service1 Ó¦ÓÃ)
Èç´Ë£¬µ±»ú·¿ A ÖÐµÄ Service0 ÏëÒªµ÷Óûú·¿ B ÖÐµÄ Service1 ʱ£¬¸ù¾Ý·þÎñ·¢ÏֵĽá¹û£¬Service0 »áÇëÇó±¾»ú·¿µÄ³ö¿ÚÍø¹Ø TetherA£¬TetherA ÊÕµ½ÇëÇóºó»áÖ±½Óת·¢ÖÁ B »ú·¿µÄÈë¿ÚÍø¹Ø TetherB£¬ÔÙÓÉ TetherB ¸ù¾Ý±¾»ú·¿ÄÚʵ¼Ê·þÎñ·¢ÏֵĽá¹û£¬½«µ÷ÓÃÇëÇó·ÓÉÖÁʵ¼ÊÐèÒªÇëÇóµÄ Service1¡£Í¬Ê±ÔÚÍø¹ØÐ굀 TetherA Óë TetherB Ö®¼ä£¬Ê¹ÓÃÁË TLS Ë«ÏòÑéÖ¤¡¢¼ÓÃÜÀ´Âú×ãÊý¾Ý¼ÓÃܺͼøÈ¨µÄÐèÇó¡£
Ôڼܹ¹ºÍ¹¦ÄÜÉÏ£¬SP Óë Tether ÍêÈ«½âñ¿ÉÒÔ¸÷×Ô¶ÀÁ¢µü´úºÍÉý¼¶¡£ÓÉÓÚʹÓÃÁË dubbo ¿ò¼Ü·þÎñ·¢ÏÖµÄÌØÐÔ£¬Íø¹Ø Tether ¿ÉÒÔ·½±ãµØ½øÐÐˮƽÀ©ÈÝ£»µ±ÐèÒª½øÐа汾Éý¼¶Ö®Ê±£¬Ò²¿ÉÒÔͨ¹ýµ÷Õû·þÎñ·¢ÏÖµÄÈ¨ÖØ£¬·½±ãµÄ½øÐÐСÁ÷Á¿»Ò¶È¡£¼ÓÉÏ Tether ÔçÒѶԽÓÓÐÔÞ¼à¿ØÏµÍ³£¬ËùÓпç»ú·¿µÄ·þÎñ»¯µ÷Óö¼µÃµ½ÁËºÜºÃµÄ¼à¿Ø£¬¾ß±¸ºÜÇ¿µÄ¿É¹Û²âÐÔ¡£ËùÓÐÕâÒ»ÇУ¬±£ÕÏÁËÕûÌå¼Ü¹¹µÄÎȶ¨ºÍ¿É¿¿¡£
ͨ¹ýÈçÉϵÄÉè¼Æ£¬ÔÚÎÞÐèÈκÎÒµÎñºÍ¿ò¼Ü¸ÄÔìµÄǰÌáÏ£¬ÓÐÔÞ»ù´¡±£Õϲ¿ÃÅʵÏÖÁËÓ¦ÓõĿç»ú·¿²ð·ÖºÍ·þÎñ»¯µ÷Óá£Õû¸ö¹ý³Ì£¬»ù±¾ÉÏ×öµ½ÁËÎÞÐèÒµÎñ·½²ÎÓëºÍ¸ÄÔì¡£
ËÄ¡¢µ±ÏÂ
ÕýÈçÉÏÎÄËùÊö£¬ÔÚÓÐÔÞÖ÷Õ¾£¬Tether ĿǰÖ÷ÒªÊÇ×÷Ϊ¿çÓïÑÔµ÷Óó¡¾°Ï Consumer ¶ËµÄ Sidecar£¬ÒÔ¼°¿ç»ú·¿µ÷ÓÃʱ·þÎñ»¯Á÷Á¿µÄ³öÈë¿ÚÍø¹Ø¡£ËäÈ»ÔÚ¿ç»ú·¿µ÷Óó¡¾°Ï£¬Tether ʵ¼ÊÉÏͬʱÍйÜÁË Consumer ¶ËºÍ Provider ¶ËµÄÁ÷Á¿£¬µ«ÀëÕæÕý Sidecar ÍйÜÈ«²¿ RPC ÇëÇóµÄ ServiceMesh ¼Ü¹¹»¹´æÔÚÒ»¶¨µÄ¾àÀë¡£¼´Ê¹ Tether µÄ¿É¿¿ÐÔÒѾÔÚÉú²ú»·¾³µÃµ½Á˳¤Ê±¼äµÄÑéÖ¤£¬ÔÚÒÑÈ»·Ç³£³ÉÊìµÄ dubbo Éú̬ÖÐÍÆ¹ãʹÓ㬻¹´æÔڷdz£¶àµÄÀ§ÄѺÍ×èÁ¦¡£
ÓÐÔÞÔÆ£¬ÊÇÓÐÔÞÃæÏòÓм¼ÊõÑз¢ÄÜÁ¦µÄÉ̼ҺͿª·¢ÕßÌṩµÄʵÏÖ×Ô¶¨ÒåÍØÕ¹ºÍÐèÇóµÄ¡°ÔÆÆ½Ì¨¡±¡£×÷Ϊ¡°ÔÆÆ½Ì¨¡±£¬ÓÐÔÞÔÆÐèҪΪ¿ª·¢ÕßÌṩһÕûÌס¢°üº¬ÍêÕû¹¦Äܵġ°Î¢·þÎñ¼Ü¹¹¡±£¬ÒԱ㿪·¢Õß¿ìËٴ×Ô¼ºµÄÓ¦ÓᢷþÎñ¼¯Èº¡£°´ÕÕÓÐÔÞÄÚ²¿µÄ¾Ñé£¬ÍÆ¶¯ÒµÎñ¿ª·¢ÕßÉý¼¶Ó¦Óÿò¼ÜÊÇÒ»¸ö¼«ÆäÂþ³¤¶øÍ´¿àµÄ¹ý³Ì£»Ãæ¶ÔʹÓá°ÓÐÔÞÔÆ¡±µÄÍⲿ¿ª·¢Õߣ¬¿ÉÏë¶øÖª£¬Õâ¸ö¹ý³Ì½«»á±äµÃ¸ü¼Ó²»¿É¿Ø¡£ServiceMesh ¼Ü¹¹ÍêÃÀµØ½â¾öÁËÕâ¸öÎÊÌ⣬ͨ¹ý½«¸´Ôӵļܹ¹¹¦ÄÜϳÁµ½ Sidecar£¬Ó¦Óÿò¼Ü½«±äµÃ·Ç³£¼òµ¥ºÍÇᱡ¡£Î¢·þÎñ²ãµÄ¹¦Äܵü´úºÍÉý¼¶£¬½öÐ農ĬÉý¼¶ Sidecar ¼´¿É£¬ÎÞÐèÈκÎÒµÎñ¿ª·¢ÕߵIJÎÓëºÍÐͬ£¬¼«´óµØÌáÉýÁËÕûÌå¼Ü¹¹µÄÁé»îÐԺ͹¦Äܵü´ú¿É¿ØÐÔ¡£
Óë´Ëͬʱ£¬Ê¹Óá°ÓÐÔÞÔÆ¡±µÄ¿ª·¢ÕßÃDZØÈ»²»»á¶¼Ê¹Óà Java ÕâÒ»ÖÖ¿ª·¢ÓïÑÔ£¬Ê¹Óà ServiceMesh ¼Ü¹¹±ÜÃâÁËΪÿÖÖÖ§³ÖµÄÓïÑÔ¶¼¿ª·¢Î¢·þÎñ¼Ü¹¹ºÍ½øÐкóÐø¹¦Äܵü´ú£¬ÔÚ¼«´óµÄ¼õÉÙ¿ª·¢¹¤×÷Á¿µÄͬʱ±£Ö¤Á˸÷¸öÓïÑÔµÄ΢·þÎñÄÜÁ¦Í¬²½µü´ú¡£ÔÚÉÏÎÄÖÐÒѾÌá¼°£¬Ä¿Ç°ÓÐÔÞÖ÷վʹÓÃµÄ dubboRPC(ĬÈÏʹÓà hessian ÐòÁл¯) ÐÒéÓë Java ÓïÑÔÌØÐÔñîºÏÑÏÖØ£¬²»ÊʺÏÓÚ¿çÓïÑÔµ÷Óõij¡¾°¡£»ùÓÚ´Ë£¬ÔÚ¡°ÓÐÔÞÔÆ¡±³¡¾°ÖУ¬ÎÒÃÇÉè¼ÆÁË»ùÓÚ HTTP1.1 ºÍ HTTP/2 ÐÒéµÄ¿ÉÍØÕ¹µÄ RPC ÐÒ飬ÓÃÓÚ¿çÓïÑÔµ÷Óõij¡¾°¡£ÆäÖÐ HTTP/2 ÐÒéÓÉÓÚÆä±ê×¼»¯¡¢Òì²½ÐÔ¡¢¸ßÐÔÄÜ¡¢ÓïÒåÇåÎúµÈÌØÐÔ£¬ÆÚ´ýÆä³ÉΪδÀ´¿çÓïÑÔµ÷ÓõÄÖ÷Á÷¡£
ÁíÍâÖµµÃÒ»ÌáµÄÊÇ£¬¡°ÓÐÔÞÔÆ¡±ÒÑ¾È«ÃæÓµ±§¿ªÔ´ÉçÇø£¬Ê¹Óà Kubernetes ½øÐзþÎñ±àÅźÍÓ¦ÓùÜÀí£¬¼«´óµÄÌáÉýÁ˶àÓû§³¡¾°ÏµÄÔËάЧÂÊ£¬Ò²ÎªÎ´À´Ö§³Ö¸ü¶àµÄ¿ªÔ´ÌØÐÔºÍÍØÕ¹´òÏÂÁ˼áʵµÄ»ù´¡¡£ÔÚ´Ë»ù´¡ÉÏ£¬ÓÐÔÞ PaaS ÍŶӽ« Istio µÄ·þÎñ·¢ÏÖ×é¼þ Pilot Ò²ÒýÈëµ½ÁË¡°ÓÐÔÞÔÆ¡±µÄ ServiceMesh ¼Ü¹¹ÖУ¬Pilot Ö±½Ó¶Ô½Ó Kubernetes Ϊ TetherSidecar Ìṩ·þÎñ·¢ÏÖÄÜÁ¦¡£Í¨¹ý Kubernetes ±¾ÉíµÄ·þÎñ±àÅÅÄÜÁ¦£¬ÒµÎñÓ¦Óò»ÔÙÐèÒª½øÐзþÎñ×¢²áºÍ·þÎñ±£»î£»¡°ÓÐÔÞÔÆ¡±ÒµÎñ΢·þÎñ¼¯ÈºÒ²²»ÔÙÐèÒª´î½¨¶ÀÁ¢µÄ·þÎñ·¢ÏÖ¼¯Èº (ETCD,Consul µÈ)¡£ÔÚ¼ò»¯ÕûÌå¼Ü¹¹¡¢½µµÍ³É±¾µÄͬʱ£¬Ïò¿ªÔ´ÉçÇø¸ü¿¿½üÁËÒ»²½¡£

Ŀǰ£¬»ùÓÚ Kubernetes¡¢IstioPilot¡¢TetherSidecar µÄ ServerMesh ¼Ü¹¹ÒѾÔÚ¡°ÓÐÔÞÔÆ¡±ÖÐÈ«ÃæÂ䵨£¬ÐÂÌØÐԺ͹¦ÄÜÒ²ÔÚ²»¶Ïµü´úÖС£ÆÚ´ýΪ¿ª·¢ÕßÌṩ¸üÓѺõĿª·¢¡¢Íйܻ·¾³ºÍ¸üÇ¿´óµÄ¹¦ÄÜÖ§³Ö¡£
Îå¡¢Õ¹Íû
ÓÐÔÞÖ÷Õ¾µÄÓ¦ÓÃĿǰÕýÔÚÖð²½ÏòÈÝÆ÷»¯ºÍ Kubernetes Ç¨ÒÆ£¬²¢ÇÒ½«ÔÚ 19 ÄêÄêÄÚʵÏÖ¾ø´ó¶àÊýÓ¦ÓõÄÈÝÆ÷»¯¡£Ëæ×ÅÒµÎñ¹æÄ£µÄ²»¶ÏÔö³¤£¬ÓÐÔÞ΢·þÎñ¼¯Èº¹æÄ£Ò²ËæÖ®Ë®ÕÇ´¬¸ß£¬ÓÐÔÞÔÚ·þÎñ»¯³õÆÚÑ¡ÔñµÄ ETCDV2 ·þÎñ·¢ÏÖÔÚ 18 Äê˫ʮһÆÚ¼äÒѾÓöµ½ÁËÆ¿¾±£ºÓ¦Ó÷¢²¼Ê±£¬È«¼¯Èº¹ã²¥·þÎñ·¢ÏÖÐÅÏ¢Ôì³É ETCD ¼¯Èº¶¶¶¯¡£ÎªÁËÖ§³Ö¸ü´ó¹æÄ£µÄ΢·þÎñ¼¯Èº¹æÄ££¬Í¬Ê±¶Ô dubbo ¿ò¼ÜºÍ TetherSidecar ÆÁ±Îʵ¼Ê·þÎñ·¢ÏÖÊý¾ÝµÄ´æ´¢¸ñʽºÍ´æ´¢ÏµÍ³£¬Ä¿Ç°ÓÐÔÞÄÚ²¿Ò²ÔÚ½«·þÎñ·¢ÏÖ´Ó ETCD Ç¨ÒÆÖÁ IstioPilot ×é¼þ£¬Ê¹Óà Pilot ÌṩµÄ ADS(AggregatedDiscoveryService, ¾ÛºÏ·¢ÏÖ·þÎñ) ½Ó¿Ú»ñÈ¡·þÎñ·¢ÏÖÊý¾Ý¡£
ÔÚ¿ªÔ´ Pilot µÄ»ù´¡ÉÏ£¬ÎªÁËÂú×ãÓÐÔÞÄÚ²¿µÄÐèÇó¡£ÎÒÃÇ¶Ô Pilot ½øÐÐÁËһϵÁеÄÓÅ»¯ºÍ¸ÄÔ죬°üÀ¨·þÎñ·¢ÏÖÊÊÅäÓÐÔÞ ETCD µÄÊý¾Ý½á¹¹¡¢¶ÔÒ»¶¨Ê±¼ä´°¿ÚÄڵķþÎñ¼¯Èº±ä¸üʼþ½øÐоۺϵȡ£ÓÐÔÞÄÚ²¿»¹Í¨¹ý Pilot ºÍ Istio µÄ·ÓɹæÔò£¬ÊµÏÖÁË dubbo ÇëÇóµÄÁ÷Á¿¿ØÖÆ£¬Í¨¹ý¾ßÌåµÄ RPC Á÷Á¿¿ØÖÆ£¬ÔÚÉϲã°ü×°³öÁË¡°»Ò¶È·¢²¼¡±¡¢¡°À¶ÂÌ·¢²¼¡±µÈ²úÆ·¡£ÎÞÂÛÊÇ Pilot µÄÓÅ»¯ºÍ¸ÄÔ죬»¹ÊÇ¶Ô Istio ·ÓɹæÔòµÄʹÓ㬽üÆÚ¶¼»áÓÐרÃŵÄÎÄÕ½øÐÐÏêϸµÄ½éÉÜ£¬ÕâÀï²»ÔÙÕ¹¿ª¡£
δÀ´£¬ÎÒÃÇÆÚÍû£¬ÔÚÓÐÔÞÖ÷Õ¾Ó¦ÓÃÍêÈ«ÈÝÆ÷»¯ +Kubernetes Ö®ºó£¬Ö÷Õ¾µÄÕûÌå·þÎñ»¯¼Ü¹¹»áÏò¡°ÓÐÔÞÔÆ¡±·¢Õ¹£ºPilot Ö±½Óͨ¹ý Kubernetes µÄ·þÎñ±àÅÅÄÜÁ¦»ñÈ¡·þÎñ·¢ÏÖÊý¾Ý£¬dubbo ¿ò¼Ü²»ÔÙÐèÒª½øÐзþÎñ×¢²áºÍ·þÎñ±£»î¡£
ͬʱ£¬ÓÐÔÞÄÚ²¿£¬²¿·ÖÍø¹ØÐ굀 Java Ó¦ÓÃÐèÒªµ÷ÓôóÁ¿²»Í¬µÄºó¶Ë·þÎñ½Ó¿Ú£¬ÎªÃâÈ¥²»¶ÏµÄ¹¹Ôìµ÷Óþä±úÖ®¿à£¬ÒѾ¿ªÊ¼½ÓÈë TetherSidecar£¬²¢ÔÚÉú²ú»·¾³½øÐÐʹÓã»´óÁ¿µÄÆäËû Java Ó¦ÓÃÒ²ÒѾÔÚ QA »·¾³½ÓÈëºÍʹÓà TetherSidecar¡£ÆÚ´ýÔÚ²»¾ÃµÄ½«À´£¬Í¨¹ý ServiceMesh ¼ÓÉÏÈÝÆ÷»¯Á½°ÑÀûÈУ¬Äܹ»Èüܹ¹Éý¼¶ºÍµü´úµÄ¹ý³Ì¸ü¼Ó¿É¿Ø£¬ÃâÈ¥ÒµÎñ¿ª·¢ÕßÉý¼¶¼Ü¹¹Ö®¿àµÄͬʱ¾¡¿ìÏíÊܵ½ÐµĹ¦ÄÜ¡£
|