±à¼ÍƼö: |
¿ªÔ´ RPC ¿ò¼ÜÓÐÄÄÐ©ÄØ£¿Ò»ÀàÊǸúijÖÖÌØ¶¨ÓïÑÔÆ½Ì¨°ó¶¨µÄ£¬ÁíÒ»ÀàÊÇÓëÓïÑÔÎ޹ؼ´¿çÓïÑÔÆ½Ì¨µÄ¡£ÄÇô½ÓÏÂÀ´Çë¿´Ïêϸ½éÉÜ
±¾ÎÄÀ´×ÔÓÚ½ñÈÕÍ·Ìõ£¬ÓÉ»ðÁú¹ûÈí¼þAnna±à¼¡¢ÍƼö¡£ |
|
¸úÓïÑÔÆ½Ì¨°ó¶¨µÄ¿ªÔ´ RPC ¿ò¼ÜÖ÷ÒªÓÐÏÂÃæ¼¸ÖÖ¡£
Dubbo£º¹úÄÚ×îÔ翪ԴµÄ RPC ¿ò¼Ü£¬Óɰ¢Àï°Í°Í¹«Ë¾¿ª·¢²¢ÓÚ 2011 ÄêÄ©¶ÔÍ⿪Դ£¬½öÖ§³Ö
Java ÓïÑÔ¡£
Motan£ºÎ¢²©ÄÚ²¿Ê¹ÓÃµÄ RPC ¿ò¼Ü£¬ÓÚ 2016 Äê¶ÔÍ⿪Դ£¬½öÖ§³Ö Java ÓïÑÔ¡£
Tars£ºÌÚѶÄÚ²¿Ê¹ÓÃµÄ RPC ¿ò¼Ü£¬ÓÚ 2017 Äê¶ÔÍ⿪Դ£¬½öÖ§³Ö C++ ÓïÑÔ¡£
Spring Cloud£º¹úÍâ Pivotal ¹«Ë¾ 2014 Äê¶ÔÍ⿪ԴµÄ RPC ¿ò¼Ü£¬½öÖ§³Ö
Java ÓïÑÔ
¶ø¿çÓïÑÔÆ½Ì¨µÄ¿ªÔ´ RPC ¿ò¼ÜÖ÷ÒªÓÐÒÔϼ¸ÖÖ¡£
gRPC£ºGoogle ÓÚ 2015 Äê¶ÔÍ⿪ԴµÄ¿çÓïÑÔ RPC ¿ò¼Ü£¬Ö§³Ö¶àÖÖÓïÑÔ¡£
Thrift£º×î³õÊÇÓÉ Facebook ¿ª·¢µÄÄÚ²¿ÏµÍ³¿çÓïÑ﵀ RPC ¿ò¼Ü£¬2007 Äê¹±Ï׸øÁË
Apache »ù½ð£¬³ÉΪ Apache ¿ªÔ´ÏîĿ֮һ£¬Ö§³Ö¶àÖÖÓïÑÔ¡£
Èç¹ûÄãµÄÒµÎñ³¡¾°½ö½ö¾ÖÏÞÓÚÒ»ÖÖÓïÑԵϰ£¬¿ÉÒÔÑ¡Ôñ¸úÓïÑÔ°ó¶¨µÄ RPC ¿ò¼ÜÖеÄÒ»ÖÖ£»
Èç¹ûÉæ¼°¶à¸öÓïÑÔÆ½Ì¨Ö®¼äµÄÏ໥µ÷Ó㬾ÍÓ¦¸ÃÑ¡Ôñ¿çÓïÑÔÆ½Ì¨µÄ RPC ¿ò¼Ü¡£
RPC ¿ò¼Ü£¬ËüÃǾßÌåÓкÎÇø±ð£¿
1. Dubbo
ÏÈÀ´ÁÄÁÄ Dubbo£¬Dubbo ¿ÉÒÔ˵ÊǹúÄÚ¿ªÔ´×îÔçµÄ RPC ¿ò¼ÜÁË£¬Ä¿Ç°Ö»Ö§³Ö
Java ÓïÑÔ£¬ËüµÄ¼Ü¹¹¿ÉÒÔÓÃÏÂÃæÕâÕÅͼչʾ¡£

´ÓͼÖÐÄãÄÜ¿´µ½£¬Dubbo µÄ¼Ü¹¹Ö÷Òª°üº¬Ëĸö½ÇÉ«£¬ÆäÖÐ Consumer ÊÇ·þÎñÏû·ÑÕߣ¬Provider
ÊÇ·þÎñÌṩÕߣ¬Registry ÊÇ×¢²áÖÐÐÄ£¬Monitor ÊÇ¼à¿ØÏµÍ³¡£
¾ßÌåµÄ½»»¥Á÷³ÌÊÇ Consumer Ò»¶Ëͨ¹ý×¢²áÖÐÐÄ»ñÈ¡µ½ Provider ½Úµãºó£¬Í¨¹ý Dubbo
µÄ¿Í»§¶Ë SDK Óë Provider ½¨Á¢Á¬½Ó£¬²¢·¢Æðµ÷Óá£Provider Ò»¶Ëͨ¹ý Dubbo
µÄ·þÎñ¶Ë SDK ½ÓÊÕµ½ Consumer µÄÇëÇ󣬴¦ÀíºóÔٰѽá¹û·µ»Ø¸ø Consumer¡£
2. Motan
Motan ÊǹúÄÚÁíÍâÒ»¸ö±È½ÏÓÐÃûµÄ¿ªÔ´µÄ RPC ¿ò¼Ü£¬Í¬ÑùÒ²Ö»Ö§³Ö Java ÓïÑÔʵÏÖ£¬ËüµÄ¼Ü¹¹¿ÉÒÔÓÃÏÂÃæÕâÕÅͼÃèÊö¡£

Motan Óë Dubbo µÄ¼Ü¹¹ÀàËÆ£¬¶¼ÐèÒªÔÚ Client ¶Ë£¨·þÎñÏû·ÑÕߣ©ºÍ Server ¶Ë£¨·þÎñÌṩÕߣ©ÒýÈë
SDK£¬ÆäÖÐ Motan ¿ò¼ÜÖ÷Òª°üº¬ÏÂÃæ¼¸¸ö¹¦ÄÜÄ£¿é¡£
register£ºÓÃÀ´ºÍ×¢²áÖÐÐĽ»»¥£¬°üÀ¨×¢²á·þÎñ¡¢¶©ÔÄ·þÎñ¡¢·þÎñ±ä¸ü֪ͨ¡¢·þÎñÐÄÌø·¢Ë͵ȹ¦ÄÜ¡£
protocol£ºÓÃÀ´½øÐÐ RPC ·þÎñµÄÃèÊöºÍ RPC ·þÎñµÄÅäÖùÜÀí£¬ÕâÒ»²ã»¹¿ÉÒÔÌí¼Ó²»Í¬¹¦ÄܵÄ
filter ÓÃÀ´Íê³Éͳ¼Æ¡¢²¢·¢ÏÞÖÆµÈ¹¦ÄÜ¡£
serialize£º½« RPC ÇëÇóÖеIJÎÊý¡¢½á¹ûµÈ¶ÔÏó½øÐÐÐòÁл¯Óë·´ÐòÁл¯
transport£ºÓÃÀ´½øÐÐÔ¶³ÌͨÐÅ£¬Ä¬ÈÏʹÓà Netty NIO µÄ TCP ³¤Á´½Ó·½Ê½¡£
cluster£ºÇëÇóʱ»á¸ù¾Ý²»Í¬µÄ¸ß¿ÉÓÃÓë¸ºÔØ¾ùºâ²ßÂÔÑ¡ÔñÒ»¸ö¿ÉÓÃµÄ Server ·¢ÆðÔ¶³Ìµ÷Óá£
3. Tars
Tars ÊÇÌÚѶ¸ù¾ÝÄÚ²¿¶àÄêʹÓÃ΢·þÎñ¼Ü¹¹µÄʵ¼ù£¬×Ü½á¶ø³ÉµÄ¿ªÔ´ÏîÄ¿£¬½öÖ§³Ö C++ ÓïÑÔ£¬ËüµÄ¼Ü¹¹Í¼ÈçÏ¡£

Tars µÄ¼Ü¹¹½»»¥Ö÷Òª°üÀ¨ÒÔϼ¸¸öÁ÷³Ì£º
·þÎñ·¢²¼Á÷³Ì£ºÔÚ web ϵͳÉÏ´« server µÄ·¢²¼°üµ½ patch£¬ÉÏ´«³É¹¦ºó£¬ÔÚ web
ÉÏÌá½»·¢²¼ server ÇëÇó£¬ÓÉ registry ·þÎñ´«´ïµ½ node£¬È»ºó node ÀÈ¡ server
µÄ·¢²¼°üµ½±¾µØ£¬ÀÆð server ·þÎñ¡£
¹ÜÀíÃüÁîÁ÷³Ì£ºweb ϵͳÉϵĿÉÒÔÌá½»¹ÜÀí server ·þÎñÃüÁîÇëÇó£¬ÓÉ registry ·þÎñ´«´ïµ½
node ·þÎñ£¬È»ºóÓÉ node Ïò server ·¢Ë͹ÜÀíÃüÁî¡£
ÐÄÌøÉϱ¨Á÷³Ì£ºserver ·þÎñÔËÐк󣬻ᶨÆÚÉϱ¨ÐÄÌøµ½ node£¬node È»ºó°Ñ·þÎñÐÄÌøÐÅÏ¢Éϱ¨µ½
registry ·þÎñ£¬ÓÉ registry ½øÐÐͳһ¹ÜÀí¡£
ÐÅÏ¢Éϱ¨Á÷³Ì£ºserver ·þÎñÔËÐк󣬻ᶨÆÚÉϱ¨Í³¼ÆÐÅÏ¢µ½ stat£¬´òÓ¡Ô¶³ÌÈÕÖ¾µ½ log£¬¶¨ÆÚÉϱ¨ÊôÐÔÐÅÏ¢µ½
prop¡¢Éϱ¨Òì³£ÐÅÏ¢µ½ notify¡¢´Ó config ÀÈ¡·þÎñÅäÖÃÐÅÏ¢¡£
client ·ÃÎÊ server Á÷³Ì£ºclient ¿ÉÒÔͨ¹ý server µÄ¶ÔÏóÃû Obj ¼ä½Ó·ÃÎÊ
server£¬client »á´Ó registry ÉÏÀÈ¡ server µÄ·ÓÉÐÅÏ¢£¨Èç IP¡¢Port
ÐÅÏ¢£©£¬È»ºó¸ù¾Ý¾ßÌåµÄÒµÎñÌØÐÔ£¨Í¬²½»òÕßÒì²½£¬TCP »òÕß UDP ·½Ê½£©·ÃÎÊ server£¨µ±È»
client Ò²¿ÉÒÔͨ¹ý IP/Port Ö±½Ó·ÃÎÊ server£©¡£
4. Spring Cloud
Spring Cloud ÀûÓà Spring Boot ÌØÐÔÕûºÏÁË¿ªÔ´ÐÐÒµÖÐÓÅÐãµÄ×é¼þ£¬ÕûÌå¶ÔÍâÌṩÁËÒ»Ì×ÔÚ΢·þÎñ¼Ü¹¹ÖзþÎñÖÎÀíµÄ½â¾ö·½°¸¡£
Ö»Ö§³Ö Java ÓïÑÔÆ½Ì¨£¬ËüµÄ¼Ü¹¹Í¼¿ÉÒÔÓÃÏÂÃæÕâÕÅͼÀ´ÃèÊö¡£

Óɴ˿ɼû£¬Spring Cloud ΢·þÎñ¼Ü¹¹ÊÇÓɶà¸ö×é¼þÒ»Æð×é³ÉµÄ£¬¸÷¸ö×é¼þµÄ½»»¥Á÷³ÌÈçÏ¡£
ÇëÇóͳһͨ¹ý API Íø¹Ø Zuul À´·ÃÎÊÄÚ²¿·þÎñ£¬ÏȾ¹ý Token ½øÐа²È«ÈÏÖ¤¡£
ͨ¹ý°²È«ÈÏÖ¤ºó£¬Íø¹Ø Zuul ´Ó×¢²áÖÐÐÄ Eureka »ñÈ¡¿ÉÓ÷þÎñ½ÚµãÁÐ±í¡£
´Ó¿ÉÓ÷þÎñ½ÚµãÖÐѡȡһ¸ö¿ÉÓýڵ㣬Ȼºó°ÑÇëÇó·Ö·¢µ½Õâ¸ö½Úµã¡£
Õû¸öÇëÇó¹ý³ÌÖУ¬Hystrix ×é¼þ¸ºÔð´¦Àí·þÎñ³¬Ê±ÈÛ¶Ï£¬Turbine ×é¼þ¸ºÔð¼à¿Ø·þÎñ¼äµÄµ÷ÓúÍÈÛ¶ÏÏà¹ØÖ¸±ê£¬Sleuth
×é¼þ¸ºÔðµ÷ÓÃÁ´¼à¿Ø£¬ELK ¸ºÔðÈÕÖ¾·ÖÎö¡£
5. gRPC
ÏÈÀ´¿´Ï gRPC£¬ËüµÄÔÀíÊÇͨ¹ý IDL£¨Interface Definition Language£©Îļþ¶¨Òå·þÎñ½Ó¿ÚµÄ²ÎÊýºÍ·µ»ØÖµÀàÐÍ£¬È»ºóͨ¹ý´úÂëÉú³É³ÌÐòÉú³É·þÎñ¶ËºÍ¿Í»§¶ËµÄ¾ßÌåʵÏÖ´úÂ룬ÕâÑùÔÚ
gRPC À¿Í»§¶ËÓ¦ÓÿÉÒÔÏñµ÷Óñ¾µØ¶ÔÏóÒ»Ñùµ÷ÓÃÁíһ̨·þÎñÆ÷É϶ÔÓ¦µÄ·½·¨¡£

ËüµÄÖ÷ÒªÌØÐÔ°üÀ¨Èý¸ö·½Ãæ¡£
ͨÐÅÐÒé²ÉÓÃÁË HTTP/2£¬ÒòΪ HTTP/2 ÌṩÁËÁ¬½Ó¸´Óá¢Ë«ÏòÁ÷¡¢·þÎñÆ÷ÍÆËÍ¡¢ÇëÇóÓÅÏȼ¶¡¢Êײ¿Ñ¹ËõµÈ»úÖÆ
IDL ʹÓÃÁËProtoBuf£¬ProtoBuf ÊÇÓÉ Google ¿ª·¢µÄÒ»ÖÖÊý¾ÝÐòÁл¯ÐÒ飬ËüµÄѹËõºÍ´«ÊäЧÂʼ«¸ß£¬Óï·¨Ò²¼òµ¥
¶àÓïÑÔÖ§³Ö£¬Äܹ»»ùÓÚ¶àÖÖÓïÑÔ×Ô¶¯Éú³É¶ÔÓ¦ÓïÑԵĿͻ§¶ËºÍ·þÎñ¶ËµÄ´úÂë¡£
6. Thrift
ÔÙÀ´¿´Ï Thrift£¬Thrift ÊÇÒ»ÖÖÇáÁ¿¼¶µÄ¿çÓïÑÔ RPC ͨÐÅ·½°¸£¬Ö§³Ö¶à´ï 25 ÖÖ±à³ÌÓïÑÔ¡£ÎªÁËÖ§³Ö¶àÖÖÓïÑÔ£¬¸ú
gRPC Ò»Ñù£¬Thrift Ò²ÓÐÒ»Ì××Ô¼ºµÄ½Ó¿Ú¶¨ÒåÓïÑÔ IDL£¬¿ÉÒÔͨ¹ý´úÂëÉú³ÉÆ÷£¬Éú³É¸÷ÖÖ±à³ÌÓïÑÔµÄ
Client ¶ËºÍ Server ¶ËµÄ SDK ´úÂ룬ÕâÑù¾Í±£Ö¤Á˲»Í¬ÓïÑÔÖ®¼ä¿ÉÒÔÏ໥ͨÐÅ¡£ËüµÄ¼Ü¹¹Í¼¿ÉÒÔÓÃÏÂͼÀ´ÃèÊö¡£

´ÓÕâÕÅͼÉÏ¿ÉÒÔ¿´³ö Thrift RPC ¿ò¼ÜµÄÌØÐÔ¡£
Ö§³Ö¶àÖÖÐòÁл¯¸ñʽ£ºÈç Binary¡¢Compact¡¢JSON¡¢Multiplexed µÈ¡£
Ö§³Ö¶àÖÖͨÐÅ·½Ê½£ºÈç Socket¡¢Framed¡¢File¡¢Memory¡¢zlib µÈ¡£
·þÎñ¶ËÖ§³Ö¶àÖÖ´¦Àí·½Ê½£ºÈç Simple ¡¢Thread Pool¡¢Non-Blocking µÈ¡£
|