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

1Ôª 10Ôª 50Ôª





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



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
¸ßÐÔÄܵķֲ¼Ê½·þÎñ¿ò¼Ü Dubbo
 
 À´Ô´£ºÍøÂç ·¢²¼ÓÚ£º 2017-4-18
  2771  次浏览      32
 

1. ʲôÊÇDubbo£¿

¹ÙÍø£ºhttp://dubbo.io/£¬DUBBOÊÇÒ»¸ö·Ö²¼Ê½·þÎñ¿ò¼Ü£¬ÖÂÁ¦ÓÚÌṩ¸ßÐÔÄܺÍ͸Ã÷»¯µÄRPCÔ¶³Ì·þÎñµ÷Ó÷½°¸£¬ÒÔ¼°×÷ΪSOA·þÎñÖÎÀíµÄ·½°¸£¬ËüÊǰ¢Àï°Í°ÍSOA·þÎñ»¯ÖÎÀí·½°¸µÄºËÐÄ¿ò¼Ü£¬Ã¿ÌìΪ2,000+¸ö·þÎñÌṩ3,000,000,000+´Î·ÃÎÊÁ¿Ö§³Ö£¬²¢±»¹ã·ºÓ¦ÓÃÓÚ°¢Àï°Í°Í¼¯Íŵĸ÷³ÉÔ±Õ¾µã¡£<ĿǰµÄdubboÉçÇøÒÑֹͣά»¤ºÍ¸üÐÂ>£¬ËüµÄºËÐŦÄܰüÀ¨£º

#remoting:Ô¶³ÌͨѶ»ù´¡£¬Ìṩ¶Ô¶àÖÖNIO¿ò¼Ü³éÏó·â×°£¬°üÀ¨¡°Í¬²½×ªÒì²½¡±ºÍ¡°ÇëÇó-ÏìÓ¦¡±Ä£Ê½µÄÐÅÏ¢½»»»·½Ê½¡£

#cluster: ·þÎñ¿ò¼ÜºËÐÄ£¬Ìṩ»ùÓÚ½Ó¿Ú·½·¨µÄÔ¶³Ì¹ý³Ìµ÷Ó㬰üÀ¨¶àЭÒéÖ§³Ö£¬²¢ÌṩÈí¸ºÔØ¾ùºâºÍÈÝ´í»úÖÆµÄ¼¯ÈºÖ§³Ö¡£

#registry: ·þÎñ×¢²áÖÐÐÄ£¬Ê¹·þÎñÏû·Ñ·½Äܶ¯Ì¬µÄ²éÕÒ·þÎñÌṩ·½£¬Ê¹µØÖ·Í¸Ã÷£¬Ê¹·þÎñÌṩ·½¿ÉÒÔÆ½»¬Ôö¼Ó»ò¼õÉÙ»úÆ÷¡£

2. dubboÊÇÈçºÎʹÓÃÀ´Ìṩ·þÎñµÄ£¿

webÓ¦Óüܹ¹µÄ·¢Õ¹£¬´Óµ¥Ò»µÄORM¼Ü¹¹£¨Ò»¸öÓ¦Ó㬽«ËùÓй¦Äܲ¿ÊðÔÚÒ»Æð£¬¼õÉÙ²¿ÊðµÄ½ÚµãºÍ³É±¾£©µ½MVC¼Ü¹¹£¨²ð·Ö³ö»¥Ï಻Ïà¸ÉµÄ¼¸¸öÓ¦Óã©£¬ÔÙ´ÓMVC¿ò¼Üµ½RPC¿ò¼Ü£¨½«ÒµÎñÖеĺËÐÄÒµÎñ³éÈ¡³öÀ´£¬×öΪ¶ÀÁ¢µÄ·þÎñ£¬½¥½¥ÐγɷþÎñÖÐÐÄ£©£¬´ÓRPC¼Ü¹¹µ½SOA¼Ü¹¹£¨Ôö¼ÓÒ»¸öµ÷¶ÈÖÐÐÄ»ùÓÚ·ÃÎÊѹÁ¦ÊµÊ±¹ÜÀí¼¯ÈºÈÝÁ¿£¬Ìá¸ß¼¯ÈºÀûÓÃÂÊ£©¡£

DubboÓÐ×Ô¼ºµÄ·þÎñÖÐÐÄ£¬Ð´ºÃµÄ·þÎñ¿ÉÒÔ×¢²áµ½·þÎñÖÐÐÄ£¬¿Í»§¶Ë´Ó·þÎñÖÐÐÄѰÕÒ·þÎñ£¬È»ºóÔÙµ½ÏàÓ¦µÄ·þÎñÌṩÕß»úÆ÷»ñÈ¡·þÎñ¡£Í¨¹ý·þÎñÖÐÐÄ¿ÉÒÔʵÏÖ¼¯Èº¡¢¸ºÔؾùºâ¡¢¸ß¿ÉÓÃ(ÈÝ´í) µÈÖØÒª¹¦ÄÜ¡£·þÎñÖÐÐÄÒ»°ãʹÓÃzookeeperʵÏÖ£¬Ò²ÓÐredisºÍÆäËûһЩ·½Ê½¡£ÒÔʹÓÃzookeeper×÷Ϊ·þÎñÖÐÐÄΪÀý£¬·þÎñÌṩÕ߯ô¶¯ºó»áÔÚzookeeperµÄ/dubbo½ÚµãÏ´´½¨ÌṩµÄ·þÎñ½Úµã£¬°üº¬·þÎñÌṩÕßip¡¢portµÈÐÅÏ¢¡£·þÎñÌṩÕ߹رÕʱ»á´ÓzookeeperÖÐÒÆ³ý¶ÔÓ¦µÄ·þÎñ¡£·þÎñʹÓÃÕß»á´Ó×¢²áÖÐÐÄzookeeperÖÐѰÕÒ·þÎñ£¬Í¬Ò»¸ö·þÎñ¿ÉÄÜ»áÓжà¸öÌṩÕߣ¬Dubbo»á°ïÎÒÃÇÕÒµ½ºÏÊʵķþÎñÌṩÕß¡£

3. dubboÊÇÈçºÎ×ö¼¯ÈºÈÝ´íµÄ£¿

µ±·þÎñµ÷ÓÃʧ°Üʱ£¨±ÈÈçÏìÓ¦³¬Ê±£©£¬¸ù¾ÝÎÒÃǵÄÒµÎñ²»Í¬£¬¿ÉÒÔʹÓò»Í¬µÄ²ßÂÔÀ´Ó¦¶ÔÕâÖÖʧ°Ü¡£±ÈÈçÎÒÃǵ÷ÓõķþÎñÊÇÒ»¸ö²éѯ·þÎñ£¬²»»áÐÞ¸ÄÊý¾Ý¿â£¬ÄÇô¿ÉÒÔ¸ø¸Ã·þÎñÉèÖÃÈÝ´í·½Ê½Îªfailover <ʧ°ÜÖØÊÔ·½Ê½>£¬µ±µ÷ÓÃʧ°Üʱ£¬×Ô¶¯Çл»µ½ÆäËû·þÎñÌṩÕßÈ¥µ÷Ó㬵±Ê§°Ü´ÎÊý³¬¹ýÖ¸¶¨ÖØÊÔ´ÎÊý£¬ÄÇô¾ÍÅ׳ö´íÎó¡£Èç¹û·þÎñÊǸüÐÂÊý¾ÝµÄ·þÎñ£¬ÄǾͲ»ÄÜʹÓÃʧ°ÜÖØÊԵķ½Ê½ÁË£¬ ÒòΪÕâÑù¿ÉÄܲúÉúÊý¾ÝÖØ¸´Ð޸ĵÄÎÊÌ⣬±ÈÈçµ÷ÓÃÌṩÕßAµÄ²åÈëÓû§·½·¨£¬µ«ÊǸ÷½·¨ÒµÎñÂß¼­¸´ÔÓ£¬Ö´Ðйý³ÌºÜÂý£¬µ¼ÖÂÏìÓ¦³¬Ê±£¬ÄÇô´ËʱÈç¹ûÔÙÈ¥µ÷ÓÃÁíÍâÒ»¸ö·þÎñÌṩÕߵIJåÈëÓû§·½·¨£¬½«»áÓÖÖØ¸´²åÈëͬһ¸öÓû§¡£¶ÔÓÚÕâÖÖÀàÐ͵ķþÎñ£¬¿ÉÒÔʹÓÃÈÝ´í·½Ê½Îªfailfast£¬Èç¹ûµÚÒ»´Îµ÷ÓÃʧ°Ü£¬Á¢¼´±¨´í£¬²»ÐèÒªÖØÊÔ¡£

ÁíÍ⻹ÓÐÏÂÃæ¼¸ÖÖÈÝ´íÀàÐÍ£¬failsafe ³öÏÖ´íÎó£¬Ö±½ÓºöÂÔ£¬²»ÖØÊÔÒ²²»±¨´í; failback ʧ°Üºó²»±¨´í£¬»á½«¸Ãʧ°ÜÇëÇ󣬶¨Ê±ÖØ·¢£¬ÊʺÏÏûϢ֪ͨÀàÐ͵ķþÎñ¡£forking£¬²¢Ðе÷Óöà¸ö·þÎñÆ÷£¬Ö»ÒªÔÚijһ̨ÌṩÕßÉÏÃæ³É¹¦£¬ÄÇô·½·¨·µ»Ø£¬ÊʺÏʵʱÐÔÒªÇó½Ï¸ßµÄ²éѯ·þÎñ£¬µ«ÊÇÒªÎþÉüÐÔÄÜ¡£ÒòΪÿ̨·þÎñÆ÷»á×öͬһ¸ö²Ù×÷£»broadcast ¹ã²¥µ÷ÓÃËùÓзþÎñÌṩÕߣ¬Öð¸öµ÷Óã¬ÈÎÒâһ̨±¨´íÔò±¨´í¡£ÊʺÏÓë¸üÐÂÿ̨ÌṩÕßÉÏÃæµÄ»º´æ£¬ÕâÖÖÀàÐ͵ķþÎñ¡£

°¸Àý£ºÎÒÃÇÔÚµãÎҰɵÄAPPÏûÏ¢ÍÆË;ÍÊDzÉÓõÄfailback·½Ê½£¬µãÎҰɵĶÌÐÅ֪ͨÔò²ÉÓõÄÊÇfailover·½Ê½¡£

4. dubboÊÇÈçºÎ×ö¸ºÔؾùºâµÄ£¿{¼¸ÖÖ¸ºÔؾùºâµÄ²ßÂÔ}

µ±Í¬Ò»¸ö·þÎñÓжà¸öÌṩÕßÔÚÌṩ·þÎñʱ£¬ ¿Í»§¶ËÈçºÎÕýÈ·µÄÑ¡ÔñÌṩÕßʵÏÖ¸ºÔؾùºâdubboÒ²¸øÎÒÃÇÌṩÁ˼¸ÖÖ·½°¸£ºrandom£¬Ëæ»úÑ¡ÌṩÕߣ¬²¢¿ÉÒÔ¸øÌṩÕßÉèÖÃÈ¨ÖØ£»roundrobin£¬ÂÖѯѡÔñÌṩÕߣ¬leastactive£¬×îÉÙ»îÔ¾µ÷ÓÃÊý£¬Ïàͬ»îÔ¾ÊýµÄËæ»ú£¬»îÔ¾ÊýÖ¸µ÷ÓÃǰºó¼ÆÊý²î¡£Ê¹ÂýµÄÌṩÕßÊÕµ½¸üÉÙÇëÇó£¬ÒòΪԽÂýµÄÌṩÕߵĵ÷ÓÃǰºó¼ÆÊý²î»áÔ½´ó¡£consistenthash Ò»ÖÂÐÔhash£¬Ïàͬ²ÎÊýµÄÇëÇó·¢µ½Í¬Ò»Ì¨»úÆ÷ÉÏ¡£

¹ØÓÚÒ»ÖÂÐÔhashµÄ¼¸µãѧϰ£¬ÎÒÃÇÖªµÀÆÕͨµÄ¹þÏ£Ëã·¨ÔÚÉ¢ÁеÄʱºò£¬¿ÉÄܲúÉú¼ä¸ô£¬²¢²»ÄÜʹÊý¾Ý¾ùÓë·Ö²¼¿ªÀ´¡£Ò»ÖÂÐÔ¹þÏ£Ëã·¨ÕýÊÇ»ùÓÚ¹þÏ£Ëã·¨µÄȱµãËùÒýÈëµÄ½â¾ö·½°¸¡£Ò»ÖÂÐÔhashËã·¨Ìá³öÁËÔÚ¶¯Ì¬±ä»¯µÄCache»·¾³ÖУ¬Åж¨¹þÏ£Ëã·¨ºÃ»µµÄËĸö¶¨Ò壺1¡¢Æ½ºâÐÔ(Balance)£ºÆ½ºâÐÔÊÇÖ¸¹þÏ£µÄ½á¹ûÄܹ»¾¡¿ÉÄÜ·Ö²¼µ½ËùÓеĻº³åÖÐÈ¥£¬ÕâÑù¿ÉÒÔʹµÃËùÓеĻº³å¿Õ¼ä¶¼µÃµ½ÀûÓ᣺ܶà¹þÏ£Ëã·¨¶¼Äܹ»Âú×ãÕâÒ»Ìõ¼þ¡£2¡¢µ¥µ÷ÐÔ(Monotonicity)£ºµ¥µ÷ÐÔÊÇÖ¸Èç¹ûÒѾ­ÓÐһЩÄÚÈÝͨ¹ý¹þÏ£·ÖÅɵ½ÁËÏàÓ¦µÄ»º³åÖУ¬ÓÖÓÐÐµĻº³å¼ÓÈ뵽ϵͳÖС£¹þÏ£µÄ½á¹ûÓ¦Äܹ»±£Ö¤Ô­ÓÐÒÑ·ÖÅäµÄÄÚÈÝ¿ÉÒÔ±»Ó³Éäµ½Ô­ÓеĻòÕßÐµĻº³åÖÐÈ¥£¬¶ø²»»á±»Ó³Éäµ½¾ÉµÄ»º³å¼¯ºÏÖÐµÄÆäËû»º³åÇø¡£3¡¢·ÖÉ¢ÐÔ(Spread)£ºÔÚ·Ö²¼Ê½»·¾³ÖУ¬ÖÕ¶ËÓпÉÄÜ¿´²»µ½ËùÓеĻº³å£¬¶øÊÇÖ»ÄÜ¿´µ½ÆäÖеÄÒ»²¿·Ö¡£µ±ÖÕ¶ËÏ£Íûͨ¹ý¹þÏ£¹ý³Ì½«ÄÚÈÝÓ³Éäµ½»º³åÉÏʱ£¬ÓÉÓÚ²»Í¬ÖÕ¶ËËù¼ûµÄ»º³å·¶Î§ÓпÉÄܲ»Í¬£¬´Ó¶øµ¼Ö¹þÏ£µÄ½á¹û²»Ò»Ö£¬×îÖյĽá¹ûÊÇÏàͬµÄÄÚÈݱ»²»Í¬µÄÖÕ¶ËÓ³Éäµ½²»Í¬µÄ»º³åÇøÖС£ÕâÖÖÇé¿öÏÔÈ»ÊÇÓ¦¸Ã±ÜÃâµÄ£¬ÒòΪËüµ¼ÖÂÏàͬÄÚÈݱ»´æ´¢µ½²»Í¬»º³åÖÐÈ¥£¬½µµÍÁËϵͳ´æ´¢µÄЧÂÊ¡£·ÖÉ¢ÐԵ͍Òå¾ÍÊÇÉÏÊöÇé¿ö·¢ÉúµÄÑÏÖØ³Ì¶È¡£ºÃµÄ¹þÏ£Ëã·¨Ó¦Äܹ»¾¡Á¿±ÜÃâ²»Ò»ÖµÄÇé¿ö·¢Éú£¬Ò²¾ÍÊǾ¡Á¿½µµÍ·ÖÉ¢ÐÔ¡£4¡¢¸ºÔØ(Load)£º¸ºÔØÎÊÌâʵ¼ÊÉÏÊÇ´ÓÁíÒ»¸ö½Ç¶È¿´´ý·ÖÉ¢ÐÔÎÊÌâ¡£¼ÈÈ»²»Í¬µÄÖÕ¶Ë¿ÉÄܽ«ÏàͬµÄÄÚÈÝÓ³Éäµ½²»Í¬µÄ»º³åÇøÖУ¬ÄÇô¶ÔÓÚÒ»¸öÌØ¶¨µÄ»º³åÇø¶øÑÔ£¬Ò²¿ÉÄܱ»²»Í¬µÄÓû§Ó³ÉäΪ²»Í¬ µÄÄÚÈÝ¡£Óë·ÖÉ¢ÐÔÒ»Ñù£¬ÕâÖÖÇé¿öÒ²ÊÇÓ¦µ±±ÜÃâµÄ£¬Òò´ËºÃµÄ¹þÏ£Ëã·¨Ó¦Äܹ»¾¡Á¿½µµÍ»º³åµÄ¸ººÉ¡£ÔÚ·Ö²¼Ê½¼¯ÈºÖУ¬¶Ô»úÆ÷µÄÌí¼Óɾ³ý£¬»òÕß»úÆ÷¹ÊÕϺó×Ô¶¯ÍÑÀ뼯ȺÕâЩ²Ù×÷ÊÇ·Ö²¼Ê½¼¯Èº¹ÜÀí×î»ù±¾µÄ¹¦ÄÜ¡£Èç¹û²ÉÓó£ÓõÄhash(object)%NËã·¨£¬ÄÇôÔÚÓлúÆ÷Ìí¼Ó»òÕßɾ³ýºó£¬ºÜ¶àÔ­ÓеÄÊý¾Ý¾ÍÎÞ·¨ÕÒµ½ÁË£¬ÕâÑùÑÏÖØµÄÎ¥·´Á˵¥µ÷ÐÔÔ­Ôò¡£½ÓÏÂÀ´Ö÷Òª½²½âÒ»ÏÂÒ»ÖÂÐÔ¹þÏ£Ëã·¨ÊÇÈçºÎÉè¼ÆµÄ£º

ÈçÉÏͼËùʾ£¬ÊÇ»·ÐεÄhash¿Õ¼ä£¬°´ÕÕ³£ÓõÄhashËã·¨À´½«¶ÔÓ¦µÄkey¹þÏ£µ½Ò»¸ö¾ßÓÐ2^32´Î·½¸öͰµÄ¿Õ¼äÖУ¬¼´0~(2^32)-1µÄÊý×Ö¿Õ¼äÖС£ÏÖÔÚÎÒÃÇ¿ÉÒÔ½«ÕâЩÊý×ÖͷβÏàÁ¬£¬ÏëÏó³ÉÒ»¸ö±ÕºÏµÄ»·ÐΡ£ÎÒÃǰÑÊý¾Ýͨ¹ýhashËã·¨´¦ÀíºóÓ³Éäµ½»·ÉÏ£¬ÏÖÔÚÎÒÃǽ«object1¡¢object2¡¢object3¡¢object4Ëĸö¶ÔÏóͨ¹ýÌØ¶¨µÄHashº¯Êý¼ÆËã³ö¶ÔÓ¦µÄkeyÖµ£¬È»ºóÉ¢Áе½Hash»·ÉÏ¡£Hash(object1) = key1£»Hash(object2) = key2£»Hash(object3) = key3£»Hash(object4) = key4£»

ÆÕͨhashÇóÓàËã·¨×îΪ²»Í׵ĵط½¾ÍÊÇÔÚÓлúÆ÷µÄÌí¼Ó»òÕßɾ³ýÖ®ºó»áÕճɴóÁ¿µÄ¶ÔÏó´æ´¢Î»ÖÃʧЧ£¬ÕâÑù¾Í´ó´óµÄ²»Âú×ãµ¥µ÷ÐÔÁË¡£ÏÂÃæÀ´·ÖÎöÒ»ÏÂÒ»ÖÂÐÔ¹þÏ£Ëã·¨ÊÇÈçºÎ´¦ÀíµÄ£¿Ëüͨ¹ý°´Ë³Ê±ÕëÇ¨ÒÆµÄ¹æÔò£¬Ê×Ïȱ£Ö¤ÆäËü¶ÔÏó»¹±£³ÖÔ­ÓеĴ洢λÖᣵ±Í¨¹ý½ÚµãµÄÌí¼ÓºÍɾ³ýµÄʱºò£¬Ò»ÖÂÐÔ¹þÏ£Ëã·¨ÔÚ±£³ÖÁ˵¥µ÷ÐÔµÄͬʱ£¬»¹ÊÇÊý¾ÝµÄÇ¨ÒÆ´ïµ½ÁË×îС£¬ÕâÑùµÄËã·¨¶Ô·Ö²¼Ê½¼¯ÈºÀ´ËµÊǷdz£ºÏÊʵ쬱ÜÃâÁË´óÁ¿Êý¾ÝÇ¨ÒÆ£¬¼õСÁË·þÎñÆ÷µÄµÄѹÁ¦¡£

5. dubboµÄ¶àЭÒ鷽ʽ£¿

dubboÌṩÁ˶àÖÖЭÒ鏸Óû§Ñ¡Ôñ£¬Èçdubbo¡¢hessian¡¢rmi ¡£²¢¿ÉΪÿ¸ö·þÎñÖ¸¶¨²»Í¬µÄ´«ÊäЭÒ飬Á£¶È¿ÉÒÔϸ»¯µ½·½·¨£¬²»Í¬·þÎñÔÚÐÔÄÜÉÏÊÊÓò»Í¬Ð­Òé½øÐд«Ê䣬±ÈÈç´óÊý¾ÝÓöÌÁ¬½ÓЭÒ飬СÊý¾Ý´ó²¢·¢Óó¤Á¬½ÓЭÒé¡£

ʹÓÃDubbo½øÐÐÔ¶³Ìµ÷ÓÃʵÏÖ·þÎñ½»»¥£¬ËüÖ§³Ö¶àÖÖЭÒ飬ÈçHessian¡¢HTTP¡¢RMI¡¢Memcached¡¢Redis¡¢ThriftµÈµÈ¡£ÓÉÓÚDubbo½«ÕâЩЭÒéµÄʵÏÖ½øÐÐÁË·â×°ÁË£¬ÎÞÂÛÊÇ·þÎñ¶Ë£¨¿ª·¢·þÎñ£©»¹Êǿͻ§¶Ë£¨µ÷Ó÷þÎñ£©£¬¶¼²»ÐèÒª¹ØÐÄЭÒéµÄϸ½Ú£¬Ö»ÐèÒªÔÚÅäÖÃÖÐÖ¸¶¨Ê¹ÓõÄЭÒé¼´¿É£¬´Ó¶ø±£Ö¤ÁË·þÎñÌṩ·½Óë·þÎñÏû·Ñ·½Ö®¼äµÄ͸Ã÷¡£ÁíÍ⣬Èç¹ûÎÒÃÇʹÓÃDubboµÄ·þÎñ×¢²áÖÐÐÄ×é¼þ£¬ÕâÑù·þÎñÌṩ·½½«·þÎñ·¢²¼µ½×¢²áµÄÖÐÐÄ£¬Ö»Êǽ«·þÎñµÄÃû³Æ±©Â¶¸øÍⲿ£¬¶ø·þÎñÏû·Ñ·½Ö»ÐèÒªÖªµÀ×¢²áÖÐÐĺͷþÎñÌṩ·½ÌṩµÄ·þÎñÃû³Æ£¬¾ÍÄܹ»Í¸Ã÷µØµ÷Ó÷þÎñ£¬ºóÃæÎÒÃǻῴµ½¾ßÌåÌṩ·þÎñºÍÏû·Ñ·þÎñµÄÅäÖÃÄÚÈÝ£¬Ê¹µÃË«·½Ö®¼ä½»»¥µÄ͸Ã÷»¯¡£

ÈçͼËùʾµÄÓ¦Óó¡¾°£¬·þÎñ·½Ìṩһ¸öËÑË÷·þÎñ£¬¶Ô·þÎñ·½À´Ëµ£¬Ëü»ùÓÚSolrCloud¹¹½¨ÁËËÑË÷·þÎñ£¬°üº¬Á½¸ö¼¯Èº£¬ZooKeeper¼¯ÈººÍSolr¼¯Èº£¬È»ºóÔÚǰ¶Ëͨ¹ýNginxÀ´½øÐз´Ïò´úÀí£¬´ïµ½¸ºÔؾùºâµÄÄ¿µÄ¡£·þÎñÏû·Ñ·½¾ÍÊǵ÷Ó÷þÎñ½øÐвéѯ£¬¸ø³ö²éѯÌõ¼þ¡£

»ùÓÚÉÏÃæµÄʾÀý³¡¾°£¬ÎÒÃÇ´òËãʹÓÃZooKeeper¼¯Èº×÷Ϊ·þÎñ×¢²áÖÐÐÄ¡£×¢²áÖÐÐĻᱩ¶¸ø·þÎñÌṩ·½ºÍ·þÎñÏû·Ñ·½£¬ËùÒÔ×¢²á·þÎñµÄʱºò£¬·þÎñÏÈÌṩ·½Ö»ÐèÒªÌṩNginxµÄµØÖ·¸ø×¢²áÖÐÐÄ£¬µ«ÊÇ×¢²áÖÐÐIJ¢²»»á°ÑÕâ¸öµØÖ·±©Â¶¸ø·þÎñÏû·Ñ·½¡£

public interface SolrSearchService {
String search(String collection, String q, ResponseType type, int start, int rows);
public enum ResponseType {JSON, XML}
}

ÆäÖУ¬providerµÄ·þÎñÉè¼Æ£ºproviderËù·¢²¼µÄ·þÎñ×é¼þ£¬°üº¬ÁËÒ»¸öSolrCloud¼¯Èº£¬ÔÚSolrCloud¼¯ÈºÇ°¶ËÓÖ¼ÓÁËÒ»¸ö·´Ïò´úÀí²ã£¬Ê¹ÓÃNginxÀ´¾ùºâ¸ºÔØ¡£ProviderµÄËÑË÷·þÎñϵͳ£¬Éè¼ÆÈçÏÂͼËùʾ£º

ÈçͼËùʾ£¬Êµ¼ÊnginxÖн«ÇëÇóÖ±½Óת·¢µ½ÄÚ²¿µÄWeb ServersÉÏ£¬ÔÚÕâ¸ö¹ý³ÌÖУ¬Ê¹ÓÃZooKeeperÀ´½øÐÐЭµ÷£º´Ó¶à¸ö·ÖƬ£¨Shard£©·þÎñÆ÷Éϲ¢ÐÐËÑË÷£¬×îºóºÏ²¢½á¹û¡£Ò»¹²ÅäÖÃÁË3̨Solr·þÎñÆ÷£¬ÒòΪSolrCloud¼¯ÈºÖÐÿһ¸ö½Úµã¶¼¿ÉÒÔ½ÓÊÕËÑË÷ÇëÇó£¬È»ºóÓÉÕû¸ö¼¯ÈºÈ¥²¢ÐÐËÑË÷¡£×îºó£¬ÎÒÃÇҪͨ¹ýDubbo·þÎñ¿ò¼ÜÀ´»ùÓÚÒÑÓеÄϵͳÀ´¿ª·¢ËÑË÷·þÎñ£¬²¢Í¨¹ýDubboµÄ×¢²áÖÐÐÄÀ´·¢²¼·þÎñ¡£Ê×Ñ¡ÐèҪʵÏÖ·þÎñ½Ó¿Ú£¬ÊµÏÖ´úÂëÈçÏÂËùʾ£º

package org.shirdrn.platform.dubbo.service.rpc.server;

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.shirdrn.platform.dubbo.service.rpc.api.SolrSearchService;
import org.shirdrn.platform.dubbo.service.rpc.utils.QueryPostClient;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class SolrSearchServer implements SolrSearchService {

private static final Log LOG = LogFactory.getLog(SolrSearchServer.class);
private String baseUrl;
private final QueryPostClient postClient;
private static final Map<ResponseType, FormatHandler> handlers = new HashMap<ResponseType, FormatHandler>(0);
static {
handlers.put(ResponseType.XML, new FormatHandler() {
public String format() {
return "&wt=xml";
}
});
handlers.put(ResponseType.JSON, new FormatHandler() {
public String format() {
return "&wt=json";
}
});
}
public SolrSearchServer() {
super();
postClient = QueryPostClient.newIndexingClient(null);
}
public void setBaseUrl(String baseUrl) {
this.baseUrl = baseUrl;
}
public String search(String collection, String q, ResponseType type,
int start, int rows) {
StringBuffer url = new StringBuffer();
¡¡¡¡¡¡¡¡¡¡¡¡ url.append(baseUrl).append(collection).append("/select?").append(q);
¡¡¡¡¡¡¡¡¡¡¡¡ url.append("&start=").append(start).append("&rows=").append(rows);
url.append(handlers.get(type).format());
LOG.info("[REQ] " + url.toString());
return postClient.request(url.toString());
}
interface FormatHandler {
String format();
}
public static void main(String[] args) throws IOException {
String config = SolrSearchServer.class.getPackage().getName().replace('.', '/') + "/search-provider.xml";
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(config);
context.start();
System.in.read();
}
}

¶ÔÓ¦µÄDubboÅäÖÃÎļþΪsearch-provider.xml£¬ÄÚÈÝÈçÏÂËùʾ£º

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
<dubbo:application name="search-provider" />
<dubbo:registry address="zookeeper://slave1:2188?backup=slave3:2188,slave4:2188" />
<dubbo:protocol name="dubbo" port="20880" />
<bean id="searchService" class="org.shirdrn.platform.dubbo.service.rpc.server.SolrSearchServer">
<property name="baseUrl" value="http://nginx-lbserver/solr-cloud/" />
</bean>
<dubbo:service interface="org.shirdrn.platform.dubbo.service.rpc.api.SolrSearchService" ref="searchService" />
</beans>

ÉÏÃæ£¬Dubbo·þÎñ×¢²áÖÐÐÄÖ¸¶¨ZooKeeperµÄµØÖ·£ºzookeeper://slave1:2188?backup=slave3:2188,slave4:2188£¬Ê¹ÓÃDubboЭÒé¡£ÅäÖ÷þÎñ½Ó¿ÚµÄʱºò£¬¿ÉÒÔ°´ÕÕSpringµÄBeanµÄÅäÖ÷½Ê½À´ÅäÖã¬×¢ÈëÐèÒªµÄÄÚÈÝ£¬ÎÒÃÇÕâÀïÖ¸¶¨ÁËËÑË÷¼¯ÈºµÄNginx·´Ïò´úÀíµØÖ·http://nginx-lbserver/solr-cloud/¡£

6. dubboµÄʹÓÃÌØµã£¿

dubbo²ÉÓÃÈ«SpringÅäÖ÷½Ê½£¬Í¸Ã÷»¯½ÓÈëÓ¦Ó㬶ÔÓ¦ÓÃûÓÐÈκÎAPIÇÖÈ룬ֻÐèÓÃSpring¼ÓÔØDubboµÄÅäÖü´¿É£¬Dubbo»ùÓÚSpringµÄSchemaÀ©Õ¹½øÐмÓÔØ¡£

7. ×ܽá

dubboÊǸßÐÔÄܵķֲ¼Ê½·þÎñ¿ò¼Ü£¬ËüÌṩÁË·þÎñÖÎÀíµÄ½â¾ö·½°¸¡£ËüÊÊÓÃÓÚ£¨¹«Ë¾ÄÚ²¿£©¿ç²¿ÃÅ¿çÏîĿԶ³Ìµ÷Óõij¡¾°£¬

dubboÎȶ¨¶ø¸ßЧ£¬²»½öÖ§³Ö´ó¹æÄ£·þÎñ¼¯ÈºµÄ¶¯Ì¬À©Õ¹£¬Æ½»¬Éý¼¶£¬¶øÇÒÖ§³Öload balance£¬fail over,Ö§³Ö·þÎñÖÊÁ¿·Ö¼¶¹ÜÀí£¬dubbo¼ò»¯ÁË·þÎñÅäÖ㬼õÉÙDBÁ¬½ÓÊý¡£

dubbo¿ÉÒÔ×öʲô£¬dubboÊÇ»ùÓÚNIOºÍ³¤Á¬½ÓµÄÔ¶³Ìµ÷ÓÃʵÏÖ£¬dubboÌṩµÄ·þÎñ±©Â¶ºÍµ¼È룬¶ÔÓ¦Ó÷½µÄ´úÂëÎÞÇÖÈëÐÔ£¬dubboÌṩ¶àЭÒéÖ§³Ö£¬ÈçRMI¡¢Hessian¡¢tbrµÈ£¬dubboÌṩÁËfail over»úÖÆ£¬µ±Ä³¸öprovider³öÏÖÒì³£ºó£¬»á×Ô¶¯Çл»provider£¬dubboÌṩÁËload balance»úÖÆ£¬²ÉÓÃÁËÈ¨ÖØ+Ëæ»ú»òÂÖѯËã·¨£¬·þÎñÁÐ±í¶¯Ì¬¸üУ¬Èç²½ÖèÈý¡£dubbo½â¾öÁË·þÎñÖÎÀíÎÊÌ⣬°üÀ¨providerºÍconsumerÖ®¼äµÄÆ¥ÅäÎÊÌ⣬dubboÌṩÁË·þÎñµÄ×¢²áºÍ¶©ÔŦÄÜ£¬dubboµÄÁé»îµÄ·ÓɹæÔòÉèÖã¬ÇÒÖ§³Ö·þÎñÁÐ±í¶¯Ì¬ÍÆË͹¦ÄÜ£¬ÇÒÌṩÁË»ùÓÚwebµÄ¹ÜÀí¹¦ÄÜ¡£

/*
* ʹÓÃDubbo·þÎñ½Ó¿Ú
*/

// Ê×ÏÈ£¬ÔÚAPI°üÖж¨Òå·þÎñ½Ó¿Ú£¬Í¬Ê±²¿ÊðÓÚProvider¶ËºÍConsumer¶Ë
public interface HelloService {
public String sayHello();
}

// Æä´Î£¬ÔÚ·þÎñ¶ËµÄProviderʵÏÖ´úÂë
public class HelloServiceImpl implements HelloService {
public String sayHello() {
return "Welcome to dubbo!";
}
}

// ÅäÖãºÌṩÕß±©Â¶·þÎñ;Ïû·ÑÕßÏû·Ñ·þÎñ

/*provider¶Ë·þÎñʵÏÖÀà*/
<bean id="helloService" class="com.alibaba.hello.impl.HelloServiceImpl" />

/*provider¶Ë±©Â¶·þÎñ*/
<dubbo:service interface="com.alibaba.hello.HelloService" version="1.0.0" ref="helloService"/>

/*consumer¶ËÒýÈë·þÎñ*/
<dubbo:reference id="helloService" interface="com.alibaba.hello.HelloService" version="1.0.0" />

/*consumer¶ËʹÓ÷þÎñ*/
<bean id="xxxAction" class="com.alibaba.xxx.XxxAction" ><property name="helloService" ref="helloService" /></bean>

ÎÒÃǶÔdubboµÄÐÔÄÜ×ö³ö²âÊÔ£¬ÈçÏ£º

   
2771 ´Îä¯ÀÀ       32
Ïà¹ØÎÄÕÂ

ÆóÒµ¼Ü¹¹¡¢TOGAFÓëArchiMate¸ÅÀÀ
¼Ü¹¹Ê¦Ö®Â·-ÈçºÎ×öºÃÒµÎñ½¨Ä££¿
´óÐÍÍøÕ¾µçÉÌÍøÕ¾¼Ü¹¹°¸ÀýºÍ¼¼Êõ¼Ü¹¹µÄʾÀý
ÍêÕûµÄArchimateÊÓµãÖ¸ÄÏ£¨°üÀ¨Ê¾Àý£©
Ïà¹ØÎĵµ

Êý¾ÝÖÐ̨¼¼Êõ¼Ü¹¹·½·¨ÂÛÓëʵ¼ù
ÊÊÓÃArchiMate¡¢EA ºÍ iSpace½øÐÐÆóÒµ¼Ü¹¹½¨Ä£
ZachmanÆóÒµ¼Ü¹¹¿ò¼Ü¼ò½é
ÆóÒµ¼Ü¹¹ÈÃSOAÂ䵨
Ïà¹Ø¿Î³Ì

ÔÆÆ½Ì¨Óë΢·þÎñ¼Ü¹¹Éè¼Æ
ÖÐ̨սÂÔ¡¢ÖÐ̨½¨ÉèÓëÊý×ÖÉÌÒµ
ÒÚ¼¶Óû§¸ß²¢·¢¡¢¸ß¿ÉÓÃϵͳ¼Ü¹¹
¸ß¿ÉÓ÷ֲ¼Ê½¼Ü¹¹Éè¼ÆÓëʵ¼ù

×îл¼Æ»®
DeepSeekÔÚÈí¼þ²âÊÔÓ¦ÓÃʵ¼ù 4-12[ÔÚÏß]
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢Êµ¼ù 4-19[ÔÚÏß]
UAF¼Ü¹¹ÌåϵÓëʵ¼ù 4-11[±±¾©]
AIÖÇÄÜ»¯Èí¼þ²âÊÔ·½·¨Óëʵ¼ù 5-23[ÉϺ£]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 4-26[±±¾©]
ÒµÎñ¼Ü¹¹Éè¼ÆÓ뽨ģ 4-18[±±¾©]

Ïà¹ØÎÄÕÂ


ר¼ÒÊӽǿ´ITÓë¼Ü¹¹
Èí¼þ¼Ü¹¹Éè¼Æ
ÃæÏò·þÎñÌåϵ¼Ü¹¹ºÍÒµÎñ×é¼þ
ÈËÈËÍøÒÆ¶¯¿ª·¢¼Ü¹¹
¼Ü¹¹¸¯»¯Ö®ÃÕ
̸ƽ̨¼´·þÎñPaaS

Ïà¹ØÅàѵ¿Î³Ì


ÃæÏòÓ¦Óõļܹ¹Éè¼ÆÊµ¼ù
µ¥Ôª²âÊÔ+ÖØ¹¹+Éè¼ÆÄ£Ê½
Èí¼þ¼Ü¹¹Ê¦¡ª¸ß¼¶Êµ¼ù
Èí¼þ¼Ü¹¹Éè¼Æ·½·¨¡¢°¸ÀýÓëʵ¼ù
ǶÈëʽÈí¼þ¼Ü¹¹Éè¼Æ¡ª¸ß¼¶Êµ¼ù
SOAÌåϵ½á¹¹Êµ¼ù

³É¹¦°¸Àý


Èñ°²¿Æ¼¼ Èí¼þ¼Ü¹¹Éè¼Æ·½·¨
³É¶¼ ǶÈëʽÈí¼þ¼Ü¹¹Éè¼Æ
ÉϺ£Æû³µ ǶÈëʽÈí¼þ¼Ü¹¹Éè¼Æ
±±¾© Èí¼þ¼Ü¹¹Éè¼Æ
ÉϺ£ Èí¼þ¼Ü¹¹Éè¼Æ°¸ÀýÓëʵ¼ù
±±¾© ¼Ü¹¹Éè¼Æ·½·¨°¸ÀýÓëʵ¼ù
ÉîÛÚ ¼Ü¹¹Éè¼Æ·½·¨°¸ÀýÓëʵ¼ù
ǶÈëʽÈí¼þ¼Ü¹¹Éè¼Æ¡ª¸ß¼¶Êµ¼ù