±à¼ÍƼö: |
±¾ÎÄÖ÷Òª½éÉÜÁËDubbodµÄ×ÜÌå¼Ü¹¹¼°×¢²áÖÐÐÄ¡¢ÐÒéÖ§³Ö¡¢·þÎñ¼à¿ØµÈÄÚÈÝ¡£
ÎÄÀ´×ÔÓÚ²©¿ÍÔ°£¬ÓÉ»ðÁú¹ûÈí¼þLinda±à¼¡¢ÍƼö¡£ |
|
DubboÊÇAlibaba¿ªÔ´µÄ·Ö²¼Ê½·þÎñ¿ò¼Ü£¬Ëü×î´óµÄÌØµãÊǰ´ÕÕ·Ö²ãµÄ·½Ê½À´¼Ü¹¹£¬Ê¹ÓÃÕâÖÖ·½Ê½¿ÉÒÔʹ¸÷¸ö²ãÖ®¼ä½âñîºÏ£¨»òÕß×î´óÏ޶ȵØËÉñîºÏ£©¡£´Ó·þÎñÄ£Ð͵ĽǶÈÀ´¿´£¬Dubbo²ÉÓõÄÊÇÒ»Öַdz£¼òµ¥µÄÄ£ÐÍ£¬ÒªÃ´ÊÇÌṩ·½Ìṩ·þÎñ£¬ÒªÃ´ÊÇÏû·Ñ·½Ïû·Ñ·þÎñ£¬ËùÒÔ»ùÓÚÕâÒ»µã¿ÉÒÔ³éÏó³ö·þÎñÌṩ·½£¨Provider£©ºÍ·þÎñÏû·Ñ·½£¨Consumer£©Á½¸ö½ÇÉ«¡£¹ØÓÚ×¢²áÖÐÐÄ¡¢ÐÒéÖ§³Ö¡¢·þÎñ¼à¿ØµÈÄÚÈÝ£¬Ïê¼ûºóÃæÃèÊö¡£
×ÜÌå¼Ü¹¹
DubboµÄ×ÜÌå¼Ü¹¹£¬ÈçͼËùʾ£º
 Dubbo¿ò¼ÜÉè¼ÆÒ»¹²»®·ÖÁË10¸ö²ã£¬¶ø×îÉÏÃæµÄService²ãÊÇÁô¸øÊµ¼ÊÏëҪʹÓÃDubbo¿ª·¢·Ö²¼Ê½·þÎñµÄ¿ª·¢ÕßʵÏÖÒµÎñÂß¼µÄ½Ó¿Ú²ã¡£Í¼ÖÐ×ó±ßµÀ¶±³¾°µÄΪ·þÎñÏû·Ñ·½Ê¹ÓõĽӿڣ¬ÓұߵÂÌÉ«±³¾°µÄΪ·þÎñÌṩ·½Ê¹ÓõĽӿڣ¬
λÓÚÖÐÖáÏßÉϵÄΪ˫·½¶¼Óõ½µÄ½Ó¿Ú¡£
ÏÂÃæ£¬½áºÏDubbo¹Ù·½Îĵµ£¬ÎÒÃÇ·Ö±ðÀí½âһϿò¼Ü·Ö²ã¼Ü¹¹ÖУ¬¸÷¸ö²ã´ÎµÄÉè¼ÆÒªµã£º
·þÎñ½Ó¿Ú²ã£¨Service£©£º¸Ã²ãÊÇÓëʵ¼ÊÒµÎñÂß¼Ïà¹ØµÄ£¬¸ù¾Ý·þÎñÌṩ·½ºÍ·þÎñÏû·Ñ·½µÄÒµÎñÉè¼Æ¶ÔÓ¦µÄ½Ó¿ÚºÍʵÏÖ¡£
ÅäÖò㣨Config£©£º¶ÔÍâÅäÖýӿڣ¬ÒÔServiceConfigºÍReferenceConfigΪÖÐÐÄ£¬¿ÉÒÔÖ±½ÓnewÅäÖÃÀ࣬Ҳ¿ÉÒÔͨ¹ýspring½âÎöÅäÖÃÉú³ÉÅäÖÃÀà¡£
·þÎñ´úÀí²ã£¨Proxy£©£º·þÎñ½Ó¿Ú͸Ã÷´úÀí£¬Éú³É·þÎñµÄ¿Í»§¶ËStubºÍ·þÎñÆ÷¶ËSkeleton£¬ÒÔServiceProxyΪÖÐÐÄ£¬À©Õ¹½Ó¿ÚΪProxyFactory¡£
·þÎñ×¢²á²ã£¨Registry£©£º·â×°·þÎñµØÖ·µÄ×¢²áÓë·¢ÏÖ£¬ÒÔ·þÎñURLΪÖÐÐÄ£¬À©Õ¹½Ó¿ÚΪRegistryFactory¡¢RegistryºÍRegistryService¡£¿ÉÄÜûÓзþÎñ×¢²áÖÐÐÄ£¬´Ëʱ·þÎñÌṩ·½Ö±½Ó±©Â¶·þÎñ¡£
¼¯Èº²ã£¨Cluster£©£º·â×°¶à¸öÌṩÕߵķÓɼ°¸ºÔؾùºâ£¬²¢ÇŽÓ×¢²áÖÐÐÄ£¬ÒÔInvokerΪÖÐÐÄ£¬À©Õ¹½Ó¿ÚΪCluster¡¢Directory¡¢RouterºÍLoadBalance¡£½«¶à¸ö·þÎñÌṩ·½×éºÏΪһ¸ö·þÎñÌṩ·½£¬ÊµÏÖ¶Ô·þÎñÏû·Ñ·½À´Í¸Ã÷£¬Ö»ÐèÒªÓëÒ»¸ö·þÎñÌṩ·½½øÐн»»¥¡£
¼à¿Ø²ã£¨Monitor£©£ºRPCµ÷ÓôÎÊýºÍµ÷ÓÃʱ¼ä¼à¿Ø£¬ÒÔStatisticsΪÖÐÐÄ£¬À©Õ¹½Ó¿ÚΪMonitorFactory¡¢MonitorºÍMonitorService¡£
Ô¶³Ìµ÷Óò㣨Protocol£©£º·â½«RPCµ÷Óã¬ÒÔInvocationºÍResultΪÖÐÐÄ£¬À©Õ¹½Ó¿ÚΪProtocol¡¢InvokerºÍExporter¡£ProtocolÊÇ·þÎñÓò£¬ËüÊÇInvoker±©Â¶ºÍÒýÓõÄÖ÷¹¦ÄÜÈë¿Ú£¬Ëü¸ºÔðInvokerµÄÉúÃüÖÜÆÚ¹ÜÀí¡£InvokerÊÇʵÌåÓò£¬ËüÊÇDubboµÄºËÐÄÄ£ÐÍ£¬ÆäËüÄ£ÐͶ¼ÏòËü¿¿ÈÅ£¬»òת»»³ÉËü£¬Ëü´ú±íÒ»¸ö¿ÉÖ´ÐÐÌ壬¿ÉÏòËü·¢Æðinvokeµ÷Óã¬ËüÓпÉÄÜÊÇÒ»¸ö±¾µØµÄʵÏÖ£¬Ò²¿ÉÄÜÊÇÒ»¸öÔ¶³ÌµÄʵÏÖ£¬Ò²¿ÉÄÜÒ»¸ö¼¯ÈºÊµÏÖ¡£
ÐÅÏ¢½»»»²ã£¨Exchange£©£º·â×°ÇëÇóÏìӦģʽ£¬Í¬²½×ªÒì²½£¬ÒÔRequestºÍResponseΪÖÐÐÄ£¬À©Õ¹½Ó¿ÚΪExchanger¡¢ExchangeChannel¡¢ExchangeClientºÍExchangeServer¡£
ÍøÂç´«Êä²ã£¨Transport£©£º³éÏóminaºÍnettyΪͳһ½Ó¿Ú£¬ÒÔMessageΪÖÐÐÄ£¬À©Õ¹½Ó¿ÚΪChannel¡¢Transporter¡¢Client¡¢ServerºÍCodec¡£
Êý¾ÝÐòÁл¯²ã£¨Serialize£©£º¿É¸´ÓõÄһЩ¹¤¾ß£¬À©Õ¹½Ó¿ÚΪSerialization¡¢ ObjectInput¡¢ObjectOutputºÍThreadPool¡£
´ÓÉÏͼ¿ÉÒÔ¿´³ö£¬Dubbo¶ÔÓÚ·þÎñÌṩ·½ºÍ·þÎñÏû·Ñ·½£¬´Ó¿ò¼ÜµÄ10²ãÖзֱðÌṩÁ˸÷×ÔÐèÒª¹ØÐĺÍÀ©Õ¹µÄ½Ó¿Ú£¬¹¹½¨Õû¸ö·þÎñÉú̬ϵͳ£¨·þÎñÌṩ·½ºÍ·þÎñÏû·Ñ·½±¾Éí¾ÍÊÇÒ»¸öÒÔ·þÎñΪÖÐÐĵģ©¡£
¸ù¾Ý¹Ù·½ÌṩµÄ£¬¶ÔÓÚÉÏÊö¸÷²ãÖ®¼ä¹ØÏµµÄÃèÊö£¬ÈçÏÂËùʾ£º
ÔÚRPCÖУ¬ProtocolÊǺËÐIJ㣬Ҳ¾ÍÊÇÖ»ÒªÓÐProtocol + Invoker + Exporter¾Í¿ÉÒÔÍê³É·Ç͸Ã÷µÄRPCµ÷Óã¬È»ºóÔÚInvokerµÄÖ÷¹ý³ÌÉÏFilterÀ¹½Øµã¡£
ͼÖеÄConsumerºÍProviderÊdzéÏó¸ÅÄֻÊÇÏëÈÿ´Í¼Õ߸üÖ±¹ÛµÄÁ˽âÄÄЩÀà·ÖÊôÓÚ¿Í»§¶ËÓë·þÎñÆ÷¶Ë£¬²»ÓÃClientºÍServerµÄÔÒòÊÇDubboÔںܶೡ¾°Ï¶¼Ê¹ÓÃProvider¡¢Consumer¡¢Registry¡¢Monitor»®·ÖÂß¼ÍØÆÕ½Úµã£¬±£³Öͳһ¸ÅÄî¡£
¶øClusterÊÇÍâΧ¸ÅÄËùÒÔClusterµÄÄ¿µÄÊǽ«¶à¸öInvokerαװ³ÉÒ»¸öInvoker£¬ÕâÑùÆäËüÈËÖ»Òª¹Ø×¢Protocol²ãInvoker¼´¿É£¬¼ÓÉÏCluster»òÕßÈ¥µôCluster¶ÔÆäËü²ã¶¼²»»áÔì³ÉÓ°Ï죬ÒòΪֻÓÐÒ»¸öÌṩÕßʱ£¬ÊDz»ÐèÒªClusterµÄ¡£
Proxy²ã·â×°ÁËËùÓнӿڵÄ͸Ã÷»¯´úÀí£¬¶øÔÚÆäËü²ã¶¼ÒÔInvokerΪÖÐÐÄ£¬Ö»Óе½Á˱©Â¶¸øÓû§Ê¹ÓÃʱ£¬²ÅÓÃProxy½«Invokerת³É½Ó¿Ú£¬»ò½«½Ó¿ÚʵÏÖת³ÉInvoker£¬Ò²¾ÍÊÇÈ¥µôProxy²ãRPCÊÇ¿ÉÒÔRunµÄ£¬Ö»ÊDz»ÄÇô͸Ã÷£¬²»ÄÇô¿´ÆðÀ´Ïñµ÷±¾µØ·þÎñÒ»Ñùµ÷Ô¶³Ì·þÎñ¡£
¶øRemotingʵÏÖÊÇDubboÐÒéµÄʵÏÖ£¬Èç¹ûÄãÑ¡ÔñRMIÐÒ飬Õû¸öRemoting¶¼²»»áÓÃÉÏ£¬RemotingÄÚ²¿ÔÙ»®ÎªTransport´«Êä²ãºÍExchangeÐÅÏ¢½»»»²ã£¬Transport²ãÖ»¸ºÔðµ¥ÏòÏûÏ¢´«Ê䣬ÊǶÔMina¡¢Netty¡¢GrizzlyµÄ³éÏó£¬ËüÒ²¿ÉÒÔÀ©Õ¹UDP´«Ê䣬¶øExchange²ãÊÇÔÚ´«Êä²ãÖ®ÉÏ·â×°ÁËRequest-ResponseÓïÒå¡£
RegistryºÍMonitorʵ¼ÊÉϲ»ËãÒ»²ã£¬¶øÊÇÒ»¸ö¶ÀÁ¢µÄ½Úµã£¬Ö»ÊÇΪÁËÈ«¾Ö¸ÅÀÀ£¬ÓòãµÄ·½Ê½»ÔÚÒ»Æð¡£
´ÓÉÏÃæµÄ¼Ü¹¹Í¼ÖУ¬ÎÒÃÇ¿ÉÒÔÁ˽⵽£¬Dubbo×÷Ϊһ¸ö·Ö²¼Ê½·þÎñ¿ò¼Ü£¬Ö÷Òª¾ßÓÐÈçϼ¸¸öºËÐĵÄÒªµã£º
·þÎñ¶¨Òå
·þÎñÊÇÎ§ÈÆ·þÎñÌṩ·½ºÍ·þÎñÏû·Ñ·½µÄ£¬·þÎñÌṩ·½ÊµÏÖ·þÎñ£¬¶ø·þÎñÏû·Ñ·½µ÷Ó÷þÎñ¡£
·þÎñ×¢²á
¶ÔÓÚ·þÎñÌṩ·½£¬ËüÐèÒª·¢²¼·þÎñ£¬¶øÇÒÓÉÓÚÓ¦ÓÃϵͳµÄ¸´ÔÓÐÔ£¬·þÎñµÄÊýÁ¿¡¢ÀàÐÍÒ²²»¶ÏÅòÕÍ£»¶ÔÓÚ·þÎñÏû·Ñ·½£¬Ëü×î¹ØÐÄÈçºÎ»ñÈ¡µ½ËüËùÐèÒªµÄ·þÎñ£¬¶øÃæ¶Ô¸´ÔÓµÄÓ¦ÓÃϵͳ£¬ÐèÒª¹ÜÀí´óÁ¿µÄ·þÎñµ÷Ó᣶øÇÒ£¬¶ÔÓÚ·þÎñÌṩ·½ºÍ·þÎñÏû·Ñ·½À´Ëµ£¬ËûÃÇ»¹ÓпÉÄܼæ¾ßÕâÁ½ÖÖ½ÇÉ«£¬¼´¼ÈÐèÒªÌṩ·þÎñ£¬ÓÐÐèÒªÏû·Ñ·þÎñ¡£
ͨ¹ý½«·þÎñͳһ¹ÜÀíÆðÀ´£¬¿ÉÒÔÓÐЧµØÓÅ»¯ÄÚ²¿Ó¦ÓöԷþÎñ·¢²¼/ʹÓõÄÁ÷³ÌºÍ¹ÜÀí¡£·þÎñ×¢²áÖÐÐÄ¿ÉÒÔͨ¹ýÌØ¶¨ÐÒéÀ´Íê³É·þÎñ¶ÔÍâµÄͳһ¡£DubboÌṩµÄ×¢²áÖÐÐÄÓÐÈçϼ¸ÖÖÀàÐͿɹ©Ñ¡Ôñ£º
Multicast×¢²áÖÐÐÄ
Zookeeper×¢²áÖÐÐÄ
Redis×¢²áÖÐÐÄ
Simple×¢²áÖÐÐÄ
·þÎñ¼à¿Ø
ÎÞÂÛÊÇ·þÎñÌṩ·½£¬»¹ÊÇ·þÎñÏû·Ñ·½£¬ËûÃǶ¼ÐèÒª¶Ô·þÎñµ÷ÓõÄʵ¼Ê״̬½øÐÐÓÐЧµÄ¼à¿Ø£¬´Ó¶ø¸Ä½ø·þÎñÖÊÁ¿¡£
Ô¶³ÌͨÐÅÓëÐÅÏ¢½»»»
Ô¶³ÌͨÐÅÐèÒªÖ¸¶¨Í¨ÐÅË«·½ËùÔ¼¶¨µÄÐÒ飬ÔÚ±£Ö¤Í¨ÐÅË«·½Àí½âÐÒéÓïÒåµÄ»ù´¡ÉÏ£¬»¹Òª±£Ö¤¸ßЧ¡¢Îȶ¨µÄÏûÏ¢´«Êä¡£Dubbo¼Ì³ÐÁ˵±Ç°Ö÷Á÷µÄÍøÂçͨÐÅ¿ò¼Ü£¬Ö÷Òª°üÀ¨Èçϼ¸¸ö£º
Mina
Netty
Grizzly
·þÎñµ÷ÓÃ
ÏÂÃæ´ÓDubbo¹ÙÍøÖ±½ÓÄÃÀ´£¬¿´Ò»Ï»ùÓÚRPC²ã£¬·þÎñÌṩ·½ºÍ·þÎñÏû·Ñ·½Ö®¼äµÄµ÷ÓùØÏµ£¬ÈçͼËùʾ£º

ÉÏͼÖУ¬À¶É«µÄ±íʾÓëÒµÎñÓн»»¥£¬ÂÌÉ«µÄ±íʾֻ¶ÔDubboÄÚ²¿½»»¥¡£ÉÏÊöͼËùÃèÊöµÄµ÷ÓÃÁ÷³ÌÈçÏ£º
·þÎñÌṩ·½·¢²¼·þÎñµ½·þÎñ×¢²áÖÐÐÄ£»
·þÎñÏû·Ñ·½´Ó·þÎñ×¢²áÖÐÐĶ©ÔÄ·þÎñ£»
·þÎñÏû·Ñ·½µ÷ÓÃÒѾע²áµÄ¿ÉÓ÷þÎñ
½Ó×Å£¬½«ÉÏÃæ³éÏóµÄµ÷ÓÃÁ÷³Ìͼչ¿ª£¬ÏêϸÈçͼËùʾ£º

×¢²á/×¢Ïú·þÎñ
·þÎñµÄ×¢²áÓë×¢Ïú£¬ÊǶԷþÎñÌṩ·½½ÇÉ«¶øÑÔ£¬ÄÇôע²á·þÎñÓë×¢Ïú·þÎñµÄʱÐòͼ£¬ÈçͼËùʾ£º

·þÎñ¶©ÔÄ/È¡Ïû
ΪÁËÂú×ãÓ¦ÓÃϵͳµÄÐèÇ󣬷þÎñÏû·Ñ·½µÄ¿ÉÄÜÐèÒª´Ó·þÎñ×¢²áÖÐÐĶ©ÔÄÖ¸¶¨µÄÓзþÎñÌṩ·½·¢²¼µÄ·þÎñ£¬Ôڵõ½Í¨Öª¿ÉÒÔʹÓ÷þÎñʱ£¬¾Í¿ÉÒÔÖ±½Óµ÷Ó÷þÎñ¡£·´¹ýÀ´£¬Èç¹û²»ÐèҪijһ¸ö·þÎñÁË£¬¿ÉÒÔÈ¡Ïû¸Ã·þÎñ¡£ÏÂÃæ¿´Ò»Ï¶ÔÓ¦µÄʱÐòͼ£¬ÈçͼËùʾ£º

ÐÒéÖ§³Ö
DubboÖ§³Ö¶àÖÖÐÒ飬ÈçÏÂËùʾ£º
DubboÐÒé
HessianÐÒé
HTTPÐÒé
RMIÐÒé
WebServiceÐÒé
ThriftÐÒé
MemcachedÐÒé
RedisÐÒé
ÔÚͨÐŹý³ÌÖУ¬²»Í¬µÄ·þÎñµÈ¼¶Ò»°ã¶ÔÓ¦×Ų»Í¬µÄ·þÎñÖÊÁ¿£¬ÄÇôѡÔñºÏÊʵÄÐÒé±ãÊÇÒ»¼þ·Ç³£ÖØÒªµÄÊÂÇé¡£Äã¿ÉÒÔ¸ù¾ÝÄãÓ¦ÓõĴ´½¨À´Ñ¡Ôñ¡£ÀýÈ磬ʹÓÃRMIÐÒ飬һ°ã»áÊܵ½·À»ðǽµÄÏÞÖÆ£¬ËùÒÔ¶ÔÓÚÍⲿÓëÄÚ²¿½øÐÐͨÐŵij¡¾°£¬¾Í²»ÒªÊ¹ÓÃRMIÐÒ飬¶øÊÇ»ùÓÚHTTPÐÒé»òÕßHessianÐÒé¡£
²Î¿¼²¹³ä
DubboÒÔ°ü½á¹¹À´×éÖ¯¸÷¸öÄ£¿é£¬¸÷¸öÄ£¿é¼°Æä¹ØÏµ£¬ÈçͼËùʾ£º

¿ÉÒÔͨ¹ýDubboµÄ´úÂ루ʹÓÃMaven¹ÜÀí£©×éÖ¯£¬ÓëÉÏÃæµÄÄ£¿é½øÐбȽϡ£¼òµ¥ËµÃ÷¸÷¸ö°üµÄÇé¿ö£º
dubbo-common ¹«¹²Â߼ģ¿é£¬°üÀ¨UtilÀàºÍͨÓÃÄ£ÐÍ¡£
dubbo-remoting Ô¶³ÌͨѶģ¿é£¬Ï൱ÓÚDubboÐÒéµÄʵÏÖ£¬Èç¹ûRPCÓÃRMIÐÒéÔò²»ÐèҪʹÓô˰ü¡£
dubbo-rpc Ô¶³Ìµ÷ÓÃÄ£¿é£¬³éÏó¸÷ÖÖÐÒ飬ÒÔ¼°¶¯Ì¬´úÀí£¬Ö»°üº¬Ò»¶ÔÒ»µÄµ÷Ó㬲»¹ØÐļ¯ÈºµÄ¹ÜÀí¡£
dubbo-cluster ¼¯ÈºÄ£¿é£¬½«¶à¸ö·þÎñÌṩ·½Î±×°ÎªÒ»¸öÌṩ·½£¬°üÀ¨£º¸ºÔؾùºâ¡¢ÈÝ´í¡¢Â·Óɵȣ¬¼¯ÈºµÄµØÖ·Áбí¿ÉÒÔÊǾ²Ì¬ÅäÖõģ¬Ò²¿ÉÒÔÊÇÓÉ×¢²áÖÐÐÄÏ·¢¡£
dubbo-registry ×¢²áÖÐÐÄÄ£¿é£¬»ùÓÚ×¢²áÖÐÐÄÏ·¢µØÖ·µÄ¼¯Èº·½Ê½£¬ÒÔ¼°¶Ô¸÷ÖÖ×¢²áÖÐÐĵijéÏó¡£
dubbo-monitor ¼à¿ØÄ£¿é£¬Í³¼Æ·þÎñµ÷ÓôÎÊý£¬µ÷ÓÃʱ¼äµÄ£¬µ÷ÓÃÁ´¸ú×ٵķþÎñ¡£
dubbo-config ÅäÖÃÄ£¿é£¬ÊÇDubbo¶ÔÍâµÄAPI£¬Óû§Í¨¹ýConfigʹÓÃDubbo£¬Òþ²ØDubboËùÓÐϸ½Ú¡£
dubbo-container ÈÝÆ÷Ä£¿é£¬ÊÇÒ»¸öStandaloneµÄÈÝÆ÷£¬ÒÔ¼òµ¥µÄMain¼ÓÔØSpringÆô¶¯£¬ÒòΪ·þÎñͨ³£²»ÐèÒªTomcat/JBossµÈWebÈÝÆ÷µÄÌØÐÔ£¬Ã»±ØÒªÓÃWebÈÝÆ÷È¥¼ÓÔØ·þÎñ¡£
|