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

1Ôª 10Ôª 50Ôª





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



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
ΪʲôËüÓеäÐÍFaaSÄÜÁ¦£¬È´ÊǷǵäÐÍFaaS¼Ü¹¹£¿
 
×÷Õߣº ·ë΢·å(Öî¸ðèª)
  2058  次浏览      27
 2019-12-31
 
±à¼­ÍƼö:
ÎÄÕ½«Ïêϸ½éÉÜNBFµÄFaaSÈÝÆ÷¼Ü¹¹¡¢·þÎñ·¢²¼¡¢·þÎñ·ÓɺÍÇ¿´óµÄServerlessÄÜÁ¦ÒÔ¼°NBF-FaaSÔÚ°¢Àï´ó´ÙÆÚ¼äµÄʵ¼ùÐĵá£

±¾ÎÄÀ´×ÔÓÚyq.aliyun.com£¬ÓÉ»ðÁú¹ûÈí¼þAnna±à¼­¡¢ÍƼö¡£

FaaS¡ªFunction as a service£¬º¯Êý¼´·þÎñ¡£ËüÊÇ2014ÄêÓÉÓÚÑÇÂíÑ·µÄAWS LambdaµÄÐËÆð£¬¶ø±»´ó¼Ò¹ã·ºÈÏÖª¡£FaaSÄÜÁ¦ÊÇNBFÖеÄÒ»Ïî·Ç³£ÖØÒªµÄÄÜÁ¦£¬NBFÊÇÒ»¸ö·ÇµäÐ͵ÄFaaS¼Ü¹¹£¬µ«ÊǾ߱¸Á˵äÐ͵ÄFaaSÄÜÁ¦¡£

1.NBF

NBF (New-Retail Business Framework) Êǹ©Ó¦Á´ÖÐ̨»ù´¡¼¼ÊõÍŶÓÑз¢µÄÐÂÁãÊÛ·þÎñ¿ª·Å¿ò¼Ü£¬ÌṩÁ˱ê×¼»¯ÒµÎñ¶¨Òå¡¢¿ì½Ý·þÎñ¿ª·¢ºÍÉú̬¿ª·ÅµÄÄÜÁ¦£¬Ö¼ÔÚΪÉú̬»ï°éÌṩһÕûÌ×ÍêÕûµÄÐÂÁãÊÛPaaSºÍSaaSµÄ½â¾ö·½°¸¡£

2.FaaS

2.1¶¨Òå

FaaSÊÇServerlessµÄÒ»ÖÖµäÐÍÐÎʽ£¬ÓÉ Serverlessƽ̨Ìṩ¸ºÔؾùºâ¡¢¸ß¿ÉÓá¢×Ô¶¯À©ËõÈÝ¡¢·þÎñÖÎÀíµÈ×î¼Ñʵ¼ù£¬½«ÕâЩ×î¼Ñʵ¼ù¶Ô Developer ͸Ã÷»¯£¬½øÒ»²½Ëõ¶Ì Developer ´ÓÏë·¨µ½²úÆ·µÄʱ¼ä£¬½µµÍ¿ª·¢³É±¾£¬Í¬Ê±±£ÕÏ Developer ¿ª·¢µÄ·þÎñµÄ¿É¿¿ÐÔ¡£Í¨¹ýʼþÇý¶¯µÄ·½Ê½£¬¿ª·¢ÕßµÄFunctionͨ¹ýEventÓÐЧ´¥·¢£¬±ÈÈç HTTP ÇëÇó¡¢ÏûϢʼþµÈ¡£

2.2µäÐͼܹ¹

Event Sources Function ʼþÇý¶¯µÄ¼¯ºÏ£»

Function Instances Ìṩ·þÎñµÄFunction»ò΢·þÎñ£»

FaaS Controller ¹ÜÀíFunctionµÄ¿ØÖÆ·þÎñ£¬±ÈÈçµäÐ͵ÄAPI Gateway»òÕßBFF(Backend For Front)µÈ£»

Platform Services FunctionÒÀÀµµÄƽ̨·þÎñ£¬ÈçȨÏÞ¹ÜÀí API¡¢¶ÔÏó´æ´¢·þÎñµÈ¡£

3.NBF-FaaS¼Ü¹¹

3.1 NBF-Platform Services

NBFµÄƽ̨ÄÜÁ¦Ö÷Òª·ÖΪÈý²ã £º

£¨1£©Serverlessƽ̨¡ªCSE(Cloud Service Engine)£ºServerlessÊÇFaaSƽ̨ÒÀÀµµÄ»ù´¡ÄÜÁ¦£¬ÕâÒ»¿éNBFÓëÖмä¼þCSEÍŶÓÉî¶ÈºÏ×÷£¬CSEÌṩ¿ìËÙµÄÀ©ËõÈݵÄÄÜÁ¦£¬¿ÉÒÔÔÚºÁÃë¼¶±ðÖ§³Ö²¢ÐÐˮƽÀ©ÈݺͶ¯Ì¬ËõÈÝ£¬Âú×ãÒµÎñµÄ´í·å³¡¾°¡£»ù´¡¼¼ÊõÍŶÓÓëCSE¹²½¨ÈÝÆ÷ÀäÈÈÆô¶¯µÄÐÔÄÜÓÅ»¯ÒÔ¼°ServerlessÔËά¹¤¾ß(ÈÕÖ¾£¬¼à¿Ø±¨¾¯£¬Á´Â·¸ú×ÙµÈ)¿ª·¢¡£

£¨2£©NBFÈÝÆ÷£ºNBFÈÝÆ÷²ÉÓÃOSGI¼Ü¹¹£¬ÌṩÁËBundleÍêÕûµÄÉúÃüÖÜÆÚ¹ÜÀí£¬°üÀ¨BundleµÄ¼ÓÔØ£¬Æô¶¯£¬Ð¶ÔغÍ×¢ÏúµÈµÈ£¬ÒÔ¼°ÈÝÆ÷ºÍBundleµÄ¸ôÀëºÍͨÐÅÄÜÁ¦¡£

£¨3£©Æ½Ì¨ÄÜÁ¦£º

·þÎñ·¢²¼£º°ÑFunction/Bundle¿ìËÙ·¢²¼³É·þÎñµÄÄÜÁ¦¡£

·þÎñ·ÓÉ£º·þÎñ¶à̬£¬½µ¼¶ºÍMockµÄ·ÓÉÄÜÁ¦¡£

·þÎñ¹ÜÀí£º»ùÓÚSPIºÍBundleµÄ°æ±¾¹ÜÀíºÍ·þÎñÆôÍ£ÄÜÁ¦¡£

·þÎñÔËά£º·þÎñµÄServerlessÄÜÁ¦£¬»ì²¿ÄÜÁ¦£¬»Ò¶ÈÄÜÁ¦ºÍÈÝÔÖ½µ¼¶ÄÜÁ¦µÈ ¡£

3.2 NBF-Function Instances

NBFµÄº¯ÊýʵÀý¶ÔÓ¦µÄ¾ÍÊdz¤ÔÚNBF·þÎñÊг¡µÄÒ»¸ö¸ö·þÎñ±³ºóµÄBundleʵÏÖ£º

3.3 NBF-Event Sources

NBFµÄEvent SourcesÊÇÓÉÁ÷³ÌÖÐÐÄÌṩµÄ»ùÓÚEventMapµÄ·þÎñ±àÅÅÄÜÁ¦£º

3.4 NBF-FaaS Controller

NBFµÄFaaS Controller°üÀ¨ÈýÖÖÀàÐÍ£º

£¨1£©Á÷³ÌÖÐÐĵ÷¶È·þÎñ Á÷³ÌÖÐÐÄÌṩÁ˵÷¶ÈSPI·þÎñµÄʼþÇý¶¯ÄÜÁ¦£¬°üÀ¨Á÷³Ìʼþ£¬ÏûϢʼþ£¬¶¨Ê±Ê¼þµÈµÈ£¬Ä¿Ç°»ù±¾¿ÉÒÔ¸²¸ÇËùÓеÄʼþÇý¶¯µÄÒµÎñ³¡¾°¡£

£¨2£©Brokerµ÷ÓÃRPC·þÎñ BrokerÖ§³Ö¶àģʽµ÷ÓÃBundle·¢²¼µÄRPC·þÎñ£¬°üÀ¨·þÎñµÄ¶à̬·ÓÉ£¬½µ¼¶Â·ÓɺÍMock·ÓÉµÈ ¡£

£¨3£©NBF-Restµ÷ÓÃHTTP·þÎñ£¬NBF-RestÖ§³Öµ÷ÓÃBundle·¢²¼µÄHTTP·þÎñ¡£

4. NBFµÄFaaSÄÜÁ¦

4.1 BundleÉúÃüÖÜÆÚ¹ÜÀí¡ª¡ªNBFÈÝÆ÷

| 4.1.1 NBFÈÝÆ÷¼Ü¹¹

NBFÈÝÆ÷¹ÜÀíÁËBundleµÄ¼ÓÔØ£¬Æô¶¯£¬Ð¶ÔغÍ×¢ÏúµÄÍêÕûÖÜÆÚ£¬²¢²ÉÓÃOSGI»úÖÆÊµÏÖÁËÈÝÆ÷ºÍBundleÖ®¼äµÄ¸ôÀëºÍͨÐÅÄÜÁ¦¡£

ÈÝÆ÷¼Ü¹¹Éè¼Æ :

NBFÈÝÆ÷¼Ü¹¹Ö÷Òª·ÖΪÈý²ã£º

£¨1£©Serverless²ã

ÕâÒ»²ãNBFºÍCSEÍŶӹ²½¨£¬CSE¸ºÔðʵÏÖFast Auto-Scaling£¬Ä¿Ç°ÒѾ­ÔÚ˫ʮ¶þºÍÅ®Íõ½ÚµÈ´ó´Ù»î¶¯µÃµ½Á˳ä·ÖÑéÖ¤¡£NBFʵÏÖÁËFast Cold StartºÍFast Hot Start Fast Cold Start¡ªÓÅ»¯Bundle·þÎñ·¢²¼µÄÀäÆô¶¯Ê±¼ä Fast Hot Start¡ªÓÅ»¯Bundle·þÎñScaling upºóµÄ·þÎñ¿ÉÓÃʱ¼ä µ×²ãÒÀÀµµÄCaaS·þÎñĿǰҲÔÚ¸úËæCSEµÄ½Ú×à´ÓSigma3.0ÏòACK-EEÇ¨ÒÆ£¬Î´À´½«È«ÃæÖ§³Ö°¢ÀïÔÆµ¥Ôª¡£

£¨2£©NBF-OSGI Framework

NBF-OSGI FrameworkÊDzÉÓÃOSGI»úÖÆÊµÏÖÁËBundle¼ÓÔØ£¬Æô¶¯£¬Ð¶ÔغÍ×¢ÏúÍêÕûÉúÃüÖÜÆÚÍйܣ¬Ä¿Ç°ÔÚ¼¯ÍÅÄÚ²¿¾ø¶Ô¶àÊý¶¼ÊÇPandoraÓ¦Ó㬼¯ÍÅÖмä¼þ¶¼ÊÇͨ¹ýModuleClassLoader²å¼þʽ¼ÓÔØ£¬Òò´ËĿǰNBFÈÝÆ÷µÄBundle¼ÓÔØ·½Ê½Ò²Êǽ¨Á¢ÔÚPandoraµÄ¼ÓÔØ»úÖÆÖ®ÉϵÄNBF-OSGI FrameworkÌṩÁËÒ»ÕûÌ×BundleµÄ¸ôÀë»úÖÆ£¬BundleÓëÈÝÆ÷µÄͨÐÅ»úÖÆÒÔ¼°BundleÖ®¼äµÄͨÐÅ»úÖÆ¡£

ÈÝÆ÷ÓëBundleͨÐÅ£ºÈÝÆ÷ÌṩÁËimport»úÖÆ£¬Í¨¹ýÕâÖÖ·½Ê½Bundle¾Í¿ÉÒÔʹÓÃÈÝÆ÷ÄÜÁ¦£¬±ÈÈçSpringµÄcontextÍйܣ¬±ÈÈçAOPÄÜÁ¦

<imported>
<packages>
<package>org.springframework</package>
<package>org.apache.commons.logging</package>
<package>org.aopalliance</package>
<package>org.aspectj</package>
</packages>
</imported>

 

Bundle¸ôÀ룺NBFÈÝÆ÷»áΪÿ¸öBundle½¨Á¢¶ÀÁ¢É³Ï䣬´Ó¼ÓÔØ»úÖÆÉϱ£Ö¤ÁËBundle´úÂë¼¶±ð¸ôÀ룬±ÜÃâBundleÖ®¼äµÄÀàºÍ×ÊÔ´³åÍ»¡£

BundleÖ®¼äͨÐÅ£ºNBFÈÝÆ÷³ÖÓÐBundleContextµÄÈ«¾Ö¹ÜÀíÆ÷£¬Ö§³ÖBundle°ÑÐèÒªÌṩ¸øÆäËûBundleʹÓõÄContext·Åµ½È«¾Ö¹ÜÀíÆ÷ÖУ¬´Ó¶øÊµÏÖÁËBundleÖ®¼äµÄͨÐÅ¡£

£¨3£©ÈÝÆ÷ÍйܵÄBundleºÍPlugin

BundleÎÞÐè¶àÑÔ£¬ÊÇÒµÎñ·½±àдµÄÒµÎñÂß¼­´úÂë PluginÊÇNBFÒýÇæÌṩµÄÔöÖµÄÜÁ¦£¬²ÉÓòå¼þ»¯µÄ·½Ê½½øÐмÓÔØ£¬±ÈÈçNBF-FaaSÄÜÁ¦ÖÐ×îºËÐĵķþÎñ·¢²¼ÄÜÁ¦¡£

4.1.2 δÀ´µÄNBFÈÝÆ÷¼Ü¹¹

Ç°ÃæÌáµ½ÁËÓÉÓÚĿǰ¼¯ÍÅÄÚ²¿¾ø¶Ô¶àÊý¶¼ÊÇPandoraÓ¦Óã¬Òò´ËĿǰNBFµÄÈÝÆ÷¼Ü¹¹Êǽ¨Á¢PandoraµÄ¼ÓÔØ»úÖÆÉϵ쬱¾ÖÊÉÏÊÇRunÔÚPandoraµÄÈÝÆ÷Äڵġ£¶øÎ´À´µÄNBFÈÝÆ÷¼Ü¹¹ÊÇÓÉNBF-OSGI FrameworkÀ´ÍйÜÍⲿÈÝÆ÷£¬ÕâЩÍⲿÈÝÆ÷¿ÉÒÔÊÇPandoraÈÝÆ÷£¬Ò²¿ÉÒÔÊÇ·ÇPandoraÈÝÆ÷£¬ÕâÑù¾ÍʵÏÖÁËNBFÈÝÆ÷¶ÔÓÚPandoraÈÝÆ÷µÄÒÀÀµµ¹Ö᣶ø¶ÔÓÚRunÔÚNBF-FaaSƽ̨µÄBundle¶øÑԾ;ßÓиü·á¸»µÄ¿É±äÐÔ¡£

NBFÐÂÈÝÆ÷¼Ü¹¹ £º

4.2 Bundle·þÎñ·¢²¼

·þÎñ·¢²¼µÄºËÐÄÔ­ÀíÈçÏÂͼ±È½ÏÏêϸµÄ½éÉÜÁËNBFÈÝÆ÷°ÑBundle·¢²¼³ÉRPC·þÎñµÄÍêÕûÁ´Â·£¬ºËÐÄÖ÷Òª°üÀ¨Èý²½£º

ÒÀ¾Ý·Óɱí¼ÓÔØBundle £»

ͨ¹ýNBF Framework¼ÓÔØºÍÆô¶¯Bundle £»

ͨ¹ýNBF Framework¼ÓÔØºÍÆô¶¯·þÎñ·¢²¼µÄPlugin ¡£

4.3 ·þÎñµÄ·Óɺ͹ܿءªBroker

| 4.3.1 Broker¼Ü¹¹ £º

Broker¼Ü¹¹Ö÷Òª·ÖΪ£º

Broker Agent

Broker AgentʵÏÖÁËBrokerµÄSPIºÍImplementµÄ·ÖÀ룬ͨ¹ýBrokerBundleLoader¶¯Ì¬¼ÓÔØimplement£¬ÕâÑùBrokerµÄ°æ±¾Éý¼¶¶ÔÓÚʹÓ÷½¶øÑÔÊDz»ÓÃ×ö´úÂë±ä¸üºÍÖØÐ·¢²¼¡£ÏëÏëÄ³Ð©ÖØÐ͵Ķþ·½¿â°æ±¾Éý¼¶£¬Ã¿¸öÒµÎñ·½¶¼ÐèÒªÉî¶È¸ÐÖª£¬ÊDz»ÊǾõµÃ»áÊæË¬ºÜ¶à¡£SPI ProxyÔòʵÏÖÁ˲ÉÓÃ×¢½âµÄ·½Ê½À´ÊµÏÖÎÞÇÖÈëµÄ·þÎñµ÷Ó㬴Ӵ«Í³µÄ·þÎñµ÷Ó÷½Ê½Ç¨ÒƵ½NBFµÄ·þÎñµ÷Ó÷½Ê½Ò×Èç·´ÕÆ¡£¾Ù¸öÀõ×Ó£º

£¨1£©´«Í³µÄ·þÎñµ÷Ó÷½Ê½£º

@Autowired
ServiceA serviceA£»
serviceA.invoke(params);

 

£¨2£©Broker SPIµ÷Ó÷½Ê½£º

@Autowired
BundleBroker bundleBroker;
bundleBroker.get(ServiceA.class).invoke(params);

 

 

£¨3£©×¢½âµÄµ÷Ó÷½Ê½£º

@DynamicInject
ServiceA serviceA;
serviceA.invoke(params);

ÓÐÁË@DynamicInject£¬ÊDz»ÊǾõµÃNBF·þÎñµ÷ÓøúÔ­ÓеĴ«Í³µ÷Ó÷½Ê½Ã»É¶Çø±ð£¬ ¶ÔÓÚ@DynamicInjectÖ§³ÖµÄ¼¸ÖÖ·½Ê½¡£

Broker Bundle

¶ÔÓÚBroker BundleºËÐŦÄܰüÀ¨ÒÔϼ¸¿éºËÐŦÄÜ£º

4.3.1.1 BundleProxy

BundleProxy¿ÉÒÔ¼òµ¥Àí½â³ÉÊǶÔBundleÔËÐеĴúÀí»úÖÆ£¬±ÈÈçBundleµÄÖ÷¶¯È۶Ϻͱ»¶¯½µ¼¶ÕâЩÄÜÁ¦¶¼ÊÇͨ¹ýBundleProxyʵÏֵģ¬ÒòΪÕâÐ©ÌØÐÔ¶ÔÓÚÿ¸öÔËÐÐBundle¶¼ÊÇͳһµÄ»úÖÆ¡£

4.3.1.2 ·þÎñ·¢ÏÖ

·þÎñ·¢ÏÖÖ÷ÒªÖ°ÔðÔõôÕÒµ½ÐèÒªµ÷ÓõķþÎñ£¬ÔõôÉú³Éµ÷Ó÷þÎñµÄURI£¬ÄÃHSFµÄ·þÎñѰַ²ßÂÔÀ´¶Ô±È£¬Õû¸ö»úÖÆ¾Í¼òµ¥ÁË HSFµÄѰַURI: Proxy://IP:port/service/version/method ¶ÔÓÚBroker·þÎñ·¢ÏÖ IPºÍport¶ÔÓ¦µÄÈÝÆ÷±¾ÉíµÄÍøÂçÐÅÏ¢£¬ÕâЩ¿ÉÒÔͨ¹ýAPPName»òÕßArmory·Ö×éÒÔ¼°Î´À´serverlessºóµÄGroupIdÀ´»ñÈ¡ serviceName£¬versionÕâЩÊý¾Ý¾ÍÊǵÚÈý²ãBrokerÊý¾Ý²ãÌṩµÄspiºÍbundleÔªÊý¾ÝÐÅÏ¢ ÓÐÁËÕâЩ»ù±¾ÐÅÏ¢ÒÔºó£¬ÎÒÃǾͿÉÒÔÉú³ÉNBF·þÎñ·¢ÏÖµÄURIÁË¡£

4.3.1.3 ·ÓɼÆËã

ÔÚ½éÉÜ·ÓɼÆËã֮ǰ£¬ÏȽéÉÜÏÂÏÈǰÌáµ½@DynamicInjectÖ§³ÖµÄ¼¸ÖÖ·½Ê½£ºÄ¬ÈÏģʽ£¬¹æÔòģʽºÍ¶¯Ì¬Ä£Ê½¡£

£¨1£©Ä¬ÈÏģʽ£º ĬÈÏģʽ¾ÍÊÇ·þÎñµ÷Óò»ÐèÒªÖ¸¶¨ÈκηÓɲÎÊý£¬ÕâÖÖµ÷Ó÷½Ê½Êʺϵ¥BundleʵÏÖµÄSPI£¬BundleʵÏÖ¾ÍÊÇĬÈÏʵÏÖ

@DynamicInject
private ConfigReadService configReadService;
ResultDO<List<ConfigDTO>> result = configReadService.queryConfig(new ConfigQuery);

£¨2£©¹æÔòģʽ£º ¹æÔòģʽ֧³ÖÈýÖÖ·½Ê½Ö¸¶¨Â·ÓɲÎÊý£ºId(ÒµÎñÉí·Ý)£¬Expression(ÕýÔò±í´ïʽ)£¬Rule(¹æÔò±í´ïʽ)¡£

// Ö¸¶¨bundleId·½Ê½, typeĬÈÏΪID
@DynamicInject(pattern = "drf")
// Ö¸¶¨ÕýÔò·½Ê½
@DynamicInject(pattern = "^drf-hz.*$", type = "REG")
// Ö¸¶¨Rule·½Ê½
@DynamicInject(pattern = "{\"wareHouseId\":\"2001\"}", type = "RULE")

£¨3£©¶¯Ì¬Ä£Ê½£º ¶¯Ì¬Ä£Ê½Ö¸µÄÊDZàÂëʱÎÞ·¨È·¶¨µ÷ÓòÎÊýµÄ³¡¾°£¬Â·ÓɲÎÊýÐèÒªµ÷ÓÃʱ´«Èë¡£

@DynamicInject
private DynamicInvoker<ConfigReadService> configReadServiceDynamic;

ResultDO<List<ConfigDTO>> result;
// ¶¯Ì¬´«ÈëbundleId
result = configReadServiceDynamic.getService(bundleId).queryConfig(new ConfigQuery);

// ¶¯Ì¬´«Èë¹æÔò²ÎÊý
Map<String, Object> params = new HashMap<>();
params.put("merchant", merchant);
result = configReadServiceDynamic.getService(params).queryConfig(new ConfigQuery);

 

·ÓɼÆËãÓÖÒªÔÙ´ÎÌáµ½ÎÒÃÇÏÈǰÌáµ½¹ýµÄSpiProxyÁË£¬SpiProxyµÄÖ°ÄÜÖ÷ÒªÓÐÁ½¸ö£º

a.»ñÈ¡SPIInfo£¬°üÀ¨SPIµÄClassName£¬SpiVersionºÍSpiCodeµÈµÈ

b.¸ù¾Ý·ÓɲÎÊý¼ÆËãÐèÒªµ÷ÓÃBundleId È»ºóÔÙ¸ù¾ÝÎÒÃÇÔÚ·þÎñ·¢ÏÖÖÐÌáµ½µÄѰַ²ßÂÔ£¬²»ÄÑ·¢ÏÖÎÒÃÇÒѾ­¿ÉÒÔÉú³ÉNBF·þÎñµ÷ÓõÄURI£¬Õâ¾ÍÊÇNBF¶à̬·ÓɵĺËÐÄÔ­Àí ¡£

4.1.3.4 È۶Ͻµ¼¶

È۶Ͻµ¼¶°üÀ¨Á½¸öºËÐÄÄÜÁ¦£º±»¶¯½µ¼¶ºÍÖ÷¶¯ÈÛ¶Ï¡£

£¨1£©±»¶¯½µ¼¶£º±»¶¯½µ¼¶»áÔÚÈýÖÖÇé¿öÏ´¥·¢£º·þÎñÕÒ²»µ½£¬·þÎñ·µ»ØÒì³£ºÍ·þÎñ³¬Ê±£¬Õâ¸öʱºò·þÎñµ÷Óûá×Ô¶¯Â·Óɵ½Bundle¶ÔÓ¦µÄ½µ¼¶Bundle¡£Óøö¼òµ¥µÄ±í¸ñ½âÊÍϽµ¼¶µÄº¬Òå £º

£¨2£©Ö÷¶¯ÈÛ¶Ï£ºÖ÷¶¯ÈÛ¶ÏÊÇͨ¹ýNBFÉèÖûùÏßÖ¸±êÀ´ÊµÏֵģ¬Èç¹û³¬¹ý·þÎñµÄ»ùÏßÖ¸±ê£¬Ôò·Óɵ½½µ¼¶Bundle ¡£

ÔÚ½ØÍ¼µÄÀõ×ÓÖÐÎÒÃÇÑ¡ÓÃBundle(¹©Ó¦Á´-Åú·¢·þÎñ-´óÈó·¢ÊµÏÖ)×÷ΪBundle(¹©Ó¦Á´-Åú·¢·þÎñ-ºÐÂíʵÏÖ)µÄ½µ¼¶Bundle£¬ÔÚ³¬¹ý»ùÏßÖ¸±ê100ms¾Í»á·Óɵ½½µ¼¶Bundle¡£¶ÔÓÚÈ۶Ͻµ¼¶ÊµÏֵĺËÐÄÔ­Àí¾ÍÊÇÎÒÃÇÏÈǰÌáµ½¹ýµÄBundleProxy£¬ÕâÐ©ÌØÐÔ¶ÔÓÚÿ¸öÔËÐÐBundle¶¼ÊÇͳһµÄ»úÖÆ£¬Í¨¹ýBundleProxyʶ±ðÊÇ·ñÂú×ãÖ÷¶¯È۶Ϻͱ»¶¯½µ¼¶µÄÌõ¼þ£¬È»ºóÔÙ´úÀíÖ´ÐÐÕæÕýµÄBundle ¡£

4.1.3.5 Á÷Á¿¹Ü¿Ø

Á÷Á¿¹Ü¿ØÌṩÁËÒ»ÖÖÈí¸ºÔØµÄÄÜÁ¦£¬Ö§³ÖÉèÖÃBundleºÍ½µ¼¶BundleÖ®¼äµÄÁ÷Á¿Åä±È£¬ÎÒÃÇÈÔÒÔBundle£º¹©Ó¦Á´-Åú·¢·þÎñ-ºÐÂíʵÏÖΪÀý£¬ÒÔͼΪ֤£º

5. ·þÎñµÄ¸ß¿ÉÓÃÔËά

5.1 NBF-ServerlessÄÜÁ¦

ÔÚÏÈǰÌáµ½µÄNBFÈÝÆ÷¼Ü¹¹ÖУ¬NBF-ServerlessÄÜÁ¦ÊÇNBFÈÝÆ÷¼Ü¹¹µÄÖØÒª»ùʯ£¬Ö»ÓÐÔÚServerlessʵÏÖºÁÃë¼¶µ¯ÐÔÀ©ËõÈÝǰÌáÏ£¬²ÅÄÜÕæÕýÖ§³Å´í·å³¡¾°£¬²ÅÄÜ×î´ó³Ì¶ÈµÄ½ÚÔ¼»úÆ÷×ÊÔ´¡£

Ö»ÓÐÔÚServerlessʵÏÖ·þÎñ×ÊԴͳһµ¯ÐÔµ÷¶ÈµÄǰÌáÏ£¬²ÅÄÜÕæÕýʵÏÖNBFµÄ·þÎñ²¿Êð¸ôÀ룬¶ø²»ÊÇĿǰͨ¹ý¶¨ÖÆÈÝÆ÷¹æ¸ñ(1Core2G,2Core4G,4Core8GµÈµÈ)ºÍBundle»ì²¿µÄ·½Ê½À´ÊµÏÖBundle²¿Êð¸ôÀëºÍ»úÆ÷×ÊÔ´Ö®¼äµÄƽºâ¡£ÔÚÕâÀïÒ»¶¨ÒªÎªNBFµÄÉî¶ÈºÏ×÷»ï°é¡ª¡ªCSEÍŶӹĸöÕÆ£¬ËûÃÇÒѾ­¾ß±¸Á˺ÁÃë¼¶Auto-ScalingÄÜÁ¦£¬ÎªÎÒÃÇÌṩÁ˿ɿ¿µÄ»ù´¡ÉèÊ©¡£

µ±È»¶ÔÓÚServerlessÅäÌ×ÔËάÉèÊ©(ÈÕÖ¾£¬¼à¿Ø±¨¾¯£¬Á´Â·¸ú×ÙµÈ)ºÍServerlessÇ¨ÒÆµ½ACK-EEÔÆµ¥ÔªÕâЩÊÂÇ飬NBFºÍCSE¶¼»¹ÔÚ·ÉÏ¡£ÄÇÔÚNBF-ServerlessÄÜÁ¦µÄ½¨Éè¹ý³ÌÖУ¬NBFÓÖ°çÑÝʲô½ÇɫĨ£¿ÓÃÒ»ÕÅͼÀ´¼òµ¥±íÊöÏÂServerlessµÄʵÏÖÔ­ÀíÒÔ¼°CSEÓëNBFµÄÖ°Ôð»®·Ö¡£

| 5.1.1 Fast Auto-Scaling

Fast Auto-ScalingÊÇCSEÌṩµÄºËÐÄ»ù´¡ÉèÊ©ÄÜÁ¦£¬ºÁÃë¼¶µÄµ¯ÐÔÀ©ÈÝÖ÷Òª°üÀ¨¼¸¸ö²½Ö裺

£¨1£©ÖÖ×Ó»úÆ÷µÄÆô¶¯ ÖÖ×Ó»úÆ÷µÄÆô¶¯¾ÍÊÇÀäÆô¶¯µÄ¹ý³Ì£¬Õâ¸ö¹ý³Ì¸úµ±Ç°¼¯ÍÅAPPÆô¶¯µÄ·½Ê½ÎÞÒ죬¾ÍÊÇÈÝÆ÷Æô¶¯£¬¾µÏñ¼ÓÔØºÍ·þÎñ±©Â¶µÄ¼¸¸ö²½Ö裬Òò´ËÀäÆô¶¯µÄʱ¼äÆÕ±éÀ´ËµÊÇ·ÖÖÓ¼¶±ðµÄ¡£

£¨2£©ÖÖ×Ó·Ö·¢ ͨ¹ýFork2µÄ¼¼ÊõʵÏÖÁËÖÖ×Ó»úÆ÷µÄÄÚ´æ¸´ÖÆ£¬¶ø°ÑÄÚ´æ¸´ÖÆµ½À©ÈÝ»úÆ÷ÉϵÄʱ¼äÊǼ«¶ÌµÄ£¬Òò´ËCSEµÄAuto-Scaling¿ÉÒÔºÁÃ뼶ʵÏÖ²¢ÐÐˮƽÀ©ÈÝ¡£

£¨3£©·þÎñ×¢²á Õâ¸ö¹ý³Ìʵ¼ÊÉϾÍÊÇÔÚConfigServerÍê³É·þÎñ×¢²á£¬´Ó¶ø¿ÉÒÔ±£Õϸ´ÖƳöÀ´µÄService BeanÊǿɱ»µ÷Óõġ£

| 5.1.2 Fast Cold Start

NBFÔÚNBF-ServerlessÄÜÁ¦¹¹½¨ÖеÚÒ»¸öÖØÒªÊÂÏî¾ÍÊÇʵÏÖÀäÆô¶¯ÓÅ»¯£¬ÎÒÃÇÆÚÍû°ÑÀäÆô¶¯µÄÆô¶¯´Ó·ÖÖÓ¼¶±ðÓÅ»¯µ½Ãë¼¶£¬Òò´Ëµ÷ÕûÁËNBF BundleµÄÀäÆô¶¯»úÖÆ£º

£¨1£©ÔÚBundle´´½¨»úÆ÷·Ö×éºÍÀ©ÈÝ·Ö×éµÄʱºòÌáǰ²¿ÊðEngine¡£

£¨2£©Í¨¹ýNBFµÄFaaSÄÜÁ¦¶¯Ì¬¼ÓÔØBundle£¬Ô­À´£¬ÀäÆô¶¯Ê±¼ä=PandoraÈÝÆ÷µÄÆô¶¯Ê±¼ä+EngineµÄÆô¶¯Ê±¼ä+BundleµÄinstallºÍstartʱ¼ä£¬¾­¹ýÓÅ»¯ÒÔºó£¬ÀäÆô¶¯Ê±¼ä=BundleµÄinstallºÍstartʱ¼ä¡£

| 5.1.3 Fast Hot Start

ÓÉÓÚµ±Ç°µÄÀ©ÈÝ»úÖÆÊÇͨ¹ýÄÚ´æ¸´ÖÆÊµÏֵ쬶øÀàËÆÓÚUUIDÕâÖÖÓë»úÆ÷ÓйصÄÄÚ´æ±äÁ¿µÄ¸´ÖÆÊDz»ºÏÊʵģ¬Òò´ËNBFµÄÈÈÆô¶¯ÓÅ»¯Ö÷ÒªÊÇÌṩÁËrefreshÄÚ´æ±äÁ¿µÄ»úÖÆ¡£NBFµÄFrameworkÍйÜÁËBundleÉúÃüÖÜÆÚ¹ÜÀí£¬Ò²ÌṩÏàÓ¦µÄHookÄÜÁ¦£¬Í¨¹ýÕâЩHook¾ÍÄܽâ¾öUUIDÕâÖÖÎÊÌâ¡£

| 5.1.4 Serverlessʵ¼ù

ËäȻĿǰServerlessÔËάÅäÌ×ÄÜÁ¦»¹²»¹»ÍêÉÆ£¬µ«ÊÇÎÒÃÇÈÔÈ»ÔÚÈ¥Äê˫ʮ¶þºÍ½ñÄêÅ®Íõ½ÚÉÏÏßÁ˼¸¸öP0¼¶·þÎñ£¬ÑéÖ¤ÔÚ´ó´Ù³¡¾°ÏÂServerlessµÄÎȶ¨ÐԺͺÁÃë¼¶µÄAuto-ScalingÄÜÁ¦¡£µ±È»ÎÒÃǸÒÔÚS¼¶µÄ´ó´ÙÖÐÑéÖ¤P0¼¶·þÎñÒ²ÊÇÓÐËùÒÀÕ̵ģ¬ÄǾÍÊÇNBFµÄÈ۶Ͻµ¼¶ºÍÁ÷Á¿¹Ü¿ØÄÜÁ¦¡£

ÎÄÃè·þÎñÔÚÅ®Íõ½Úµ±ÌìµÄQPSÁ÷Á¿´Ó4000+ì­Éýµ½12Íò£¬Serverless·Ç³£Ñ¸ËÙµÄÀ©Èݵ½10̨£¬Í×Í×µÄÖ§³ÅÁËÒµÎñ·åÖµ¡£¶ø¶ÔÓÚ»úÆ÷×ÊÔ´µÄ½ÚÔ¼¾ÍÏÔ¶øÒ×¼ûÁË£¬Ô­À´ÎÄÃè·þÎñ¸ù¾ÝÒµÎñÌåÁ¿³£Ì¬²¿ÊðµÄ10̨£¬¶øServerlessĿǰֻÐèÒª³£Ì¬²¿Êð2̨(Æäʵ¿ÉÒÔÖ»²¿Êð1̨£¬2̨¿ÉÒÔÈÏΪÊÇÈÝÔÖ)£¬¶øÖÕ̬Serverless½«½â¾ö³¤Î²·þÎñµÄÎÊÌ⣬×îÖÕ¿ÉÒÔËõÈݵ½0̨£¬ÕâÑù¶Ô»úÆ÷×ÊÔ´ÊǸü´ó³Ì¶ÈµÄ½ÚÔ¼¡£

ÏÂͼÊÇÅ®Íõ½ÚÆÚ¼äµÄServerlessǰºóµÄÖ¸±êÌåϵ¶Ô±È £º

´ÓͼÖеÄÊý¾Ý¿ÉÒÔ¿´³ö£¬Õû¸öÎÄÃè·þÎñÔÚ´ó´ÙÆÚ¼ä±íÏÖ³öÀ´µÄϵͳÎȶ¨ÐԺͷþÎñÎȶ¨ÐÔÊÇÍêÈ«¿É¿¿µÄ£¬ÕâÒ²¾Í³ä·ÖÑéÖ¤NBF-ServerlessµÄ¿ÉÐÐÐÔ¡£

5.2 ¼«Ëٻعö

¼«ËٻعöÊÇNBF·þÎñ¸ß¿ÉÓÃÔËάһÖַdz£ÓÐЧµÄÊֶΡ£´«Í³µÄAPP»Ø¹ö·½Ê½ÊÇÖØÐ±àÒë¡¢¹¹½¨¡¢´ò°üºÍ²¿Ê𣬶øNBF¾ß±¸µäÐ͵ÄFaaSÄÜÁ¦£¬¶ÔÓÚBundle»Ø¹öÖ»ÐèÒªÖØÐÂloadÖ¸¶¨»Ø¹ö°æ±¾µÄJar°ü¶øÒÑ£¬¶øNBF EngineÓÖÊdz£×¤ÈÝÆ÷£¬Òò´ËBundle»Ø¹öËÙ¶ÈÊǷdz£Ö®¿ìµÄ¡£

6.×ܽá

ÎÄÕ±ȽÏÏêϸµÄ½éÉÜÁËNBFµÄFaaSÄÜÁ¦£¬Ò»¾ä»°×ܽ᣺NBFÊǷǵäÐ͵ÄFaaS¼Ü¹¹£¬µ«ÊǾ߱¸µäÐ͵ÄFaaSÄÜÁ¦¡£

¿ªÆª½éÉÜÁËÒµ½ç¶ÔÓÚFaaSµÄ¹ã·º¶¨Ò壬Ȼºó¶Ô±ÈÁËFaaSµäÐͼܹ¹ºÍNBF-FaaSµÄ·ÇµäÐͼܹ¹Ö®¼äµÄ¹ØÏµ£¬Ö®ºóÖØµã½éÉÜNBFµÄFaaSÄÜÁ¦£¬°üÀ¨NBFµÄÈÝÆ÷¼Ü¹¹£¬BundleµÄ·þÎñ·¢²¼ºÍBundle·ÓÉÓë¹Ü¿ØµÄºËÐÄʵÏÖÔ­Àí¡£×îºó±íÊöÁËNBFµÄ¸ß¿ÉÓÃÔËάÄÜÁ¦£¬Öصã±íÊöÁËNBF-ServerlessµÄʵÏÖÔ­ÀíºÍ¾ßÌåʵ¼ùÐĵá£ÏÖÔÚNBF´ÓÉú³¤µÄºÐÂí»Ø¹éµ½¹©Ó¦Á´ÖÐ̨£¬Îª°üÀ¨ºÐÂíÔÚÄÚµÄ25¸öBUºÍºÏ×÷»ï°éÌṩÉú̬¿ª·ÅÄÜÁ¦¡£

   
2058 ´Îä¯ÀÀ       27
Ïà¹ØÎÄÕÂ

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

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

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