±à¼ÍƼö: |
ÎÄÕ½«Ïêϸ½éÉÜ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¼Ü¹¹
.png)
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ºÍºÏ×÷»ï°éÌṩÉú̬¿ª·ÅÄÜÁ¦¡£ |