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

1Ôª 10Ôª 50Ôª





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



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
Faas£¬ÓÖÒ»¸öδÀ´£¿
 
×÷ÕߣºÃçÁ¢Ò¢
  58939  次浏览      30
2020-1-2
 
±à¼­ÍƼö:
ÎÄÕ½éÉÜÁËFaasÊÇʲô£¬FaaSµÄÌØµã¡¢ÒÔ¼°ËüµÄºÃ´¦£¬ºÍ»ùÓÚKubernetesµÄFaaS¿ò¼ÜFissionµÈ£¬Ï£ÍûÄܶÔÄúÓÐËù°ïÖú¡£
±¾ÎÄÀ´×ÔÓÚ¹«ÖںţºÈÝÆ÷ʱ´ú£¬ÓÉ»ðÁú¹ûÈí¼þLuca±à¼­¡¢ÍƼö¡£

ǰÑÔ

ÔÆ¼ÆËãʱ´ú³öÏÖÁË´óÁ¿XaaSÐÎʽµÄ¸ÅÄî,´ÓIaaS¡¢PaaS¡¢SaaSµ½ÈÝÆ÷ÔÆÒýÁìµÄCaaS,ÔÙµ½»ðÈȵÄ΢·þÎñ¼Ü¹¹,ÒÔ¼°ÏÖÔÚÔ½À´Ô½¶à±»Ì¸ÆðµÄServerlessºÍFaaS,ÎÒÃÇÕýÔÚ¾­Àú?Ò»¸ö¼¼Êõ·ÉËÙ±ä¸ïµÄʱ´ú¡£

Ò»¡¢Ê²Ã´ÊÇFaas

ÔÆ¼ÆËãʱ´ú³öÏÖÁË´óÁ¿XaaSÐÎʽµÄ¸ÅÄ´ÓIaaS(Infrastructure as a Service)¡¢PaaS(Platform as a Service)¡¢SaaS(Software as a Service)µ½ÈÝÆ÷ÔÆÒýÁìµÄCaaS(Containers as a Service)£¬ÔÙµ½»ðÈȵÄ΢·þÎñ¼Ü¹¹£¬ËüÃǶ¼ÔÚÊÔ׎«¸÷ÖÖÈí¡¢Ó²¼þ×ÊÔ´µÈ³éÏóΪһÖÖ·þÎñÌṩ¸ø¿ª·¢ÕßʹÓã¬ÈÃËûÃDz»ÔÙµ£ÐÄ»ù´¡ÉèÊ©¡¢×ÊÔ´ÐèÇó¡¢Öмä¼þµÈµÈ£¬ÔÚ¼õÇáÐÄÖǸºµ£µÄͬʱ¸üºÃµØ×¨×¢ÓÚÒµÎñ¡£FaaSÊÇFunctions as a ServiceµÄ¼ò³Æ£¬ËüÍùÍùºÍÎÞ·þÎñ¼Ü¹¹(Serverless Architecture)һͬ±»ÌáÆð¡£

ServerlessµÄ¸ÅÄî¸Õ¸Õ³öÏÖÔÚHackerNewsʱ²¢²»Îª´óÖÚËù½ÓÊÜ¡£ºóÀ´Ëæ×Å΢·þÎñºÍʼþÇý¶¯¼Ü¹¹µÄ·¢Õ¹²ÅÂýÂýÒýÆð¹Ø×¢¡£Serverless²¢²»ÊÇ˵ûÓзþÎñÆ÷²ÎÓ룬Ëüͨ¹ý½«¸´ÔӵķþÎñÆ÷¼Ü¹¹Í¸Ã÷»¯£¬Ê¹¿ª·¢ÕßרעÓÚ¡°Òª×öʲô¡±£¬´Ó¶øÇ¿µ÷Á˼õÉÙ¿ª·¢Õß¶Ô·þÎñÆ÷µÈ¼ÆËã×ÊÔ´µÄ¹Ø×¢¡¢¹¤×÷Á£¶È´Ó·þÎñÆ÷Çл»µ½ÈÎÎñµÄ˼Ïë¡£2006ÄêµÚÒ»¸öÖ§³Ö¡°ËæÓÃËæ¸¶¡±µÄ´úÂëÖ´ÐÐÆ½Ì¨ZimkiÎÊÊÀ¡£2014ÄêÑÇÂíÑ·AWSÍÆ³öÁËLambda³ÉΪ×îÖ÷ÒªµÄÎÞ·þÎñ¼Ü¹¹µÄ´ú±í¡£½Ó×ÅGoogle¡¢IBMºÍMicrosoftÒ²·×·×ÍÆ³öÁ˸÷×ÔÖ§³ÖServerlessµÄƽ̨¡£

΢·þÎñ¼Ü¹¹½üÄêÀ´ÊÇÒ»¸ö·Ç³£»ð±¬µÄ»°Ì⣬´ó´óССµÄ¹«Ë¾¶¼¿ªÊ¼Öð²½·Ö²ðÔ­À´µÄµ¥ÌåÓ¦Óã¬ÊÔ×Åת»»µ½Óɸ÷¸öÄ£¿é·þÎñ×éºÏ³É´óÐ͵ĸ´ÔÓÓ¦Óá£Serverless¿ÉÒÔ¿´×÷ÊDZÈ΢·þÎñ¼Ü¹¹¸üϸÁ£¶ÈµÄ¼Ü¹¹Ä£Ê½£¬¼´FaaS¡£LambdaÒ²ÊÇFaaSµÄµäÐÍ´ú±í£¬ËüÔÊÐíÓû§½ö½öÉÏ´«´úÂë¶øÎÞÐèÌṩºÍ¹ÜÀí·þÎñÆ÷£¬ÓÉËü¸ºÔð´úÂëµÄÖ´ÐС¢¸ß¿ÉÓÃÀ©Õ¹£¬Ö§³Ö´Ó±ðµÄAWS·þÎñ»òÆäËûWebÓ¦ÓÃÖ±½Óµ÷Óõȡ£ÒÔµç×ÓÉÌÎñÓ¦ÓÃΪÀý£¬Î¢·þÎñÖпÉÒÔ½«ä¯ÀÀÉÌÆ·¡¢Ìí¼Ó¹ºÎï³µ¡¢Ïµ¥¡¢Ö§¸¶¡¢²é¿´ÎïÁ÷µÈ²ð·ÖΪ½âñîµÄ΢·þÎñ¡£ÔÚFaaSÀËü¿ÉÒÔ²ð·Öµ½Óû§µÄËùÓÐCRUD²Ù×÷´úÂë¡£µ±·¢Éú¡°Ïµ¥¡±Ê¼þʱ£¬½«´¥·¢ÏàÓ¦µÄFunctions£¬½»ÓÉLambdaÖ´ÐС£ÈËÃÇÔÚÔ½À´Ô½¶àµÄ³¡¾°ÀォServerlessºÍFaaSµÈͬÆðÀ´¡£

¼ÙÉèÏÖÔÚÓÐÏÂÃæµÄJavaScript´úÂ룺

module.exports = function(context, callback) { callback(200, "Hello, world!
"); }

ÏÔÈ»ËüÊÇÒ»¸öº¯Êý£¬Í¨¹ýFaaSµÄ·½Ê½£¬ÎÒÃÇ¿ÉÒÔͨ¹ý·ÃÎÊÒ»¸öURLµÄ·½Ê½µ÷ÓÃÕâ¸öº¯Êý¡£

$ curl -XGET localhost:8080
Hello, world!

FaaSÓµÓÐÏÂÃæµÄÌØµã£º

1¡¢FaaSÀïµÄÓ¦ÓÃÂß¼­µ¥Ôª¶¼¿ÉÒÔ¿´×÷ÊÇÒ»¸öº¯Êý£¬¿ª·¢ÈËÔ±Ö»¹Ø×¢ÈçºÎʵÏÖÕâЩÂß¼­£¬¶ø²»ÓÃÌáǰ¿¼ÂÇÐÔÄÜÓÅ»¯£¬Èù¤×÷¾Û½¹ÔÚÕâ¸öº¯ÊýÀ¶ø·ÇÓ¦ÓÃÕûÌå¡£

2¡¢FaaSÊÇÎÞ״̬µÄ£¬ÌìÉúÂú×ãÔÆÔ­Éú(Cloud Native App)Ó¦ÓøÃÂú×ãµÄ12Òò×Ó(12 Factors)ÖжÔ״̬µÄÒªÇó¡£ÎÞ״̬Òâζ×ű¾µØÄÚ´æ¡¢´ÅÅÌÀïµÄÊý¾ÝÎÞ·¨±»ºóÐøµÄ²Ù×÷ËùʹÓᣴ󲿷ֵÄ״̬ÐèÒªÒÀÀµÓÚÍⲿ´æ´¢£¬±ÈÈçÊý¾Ý¿â¡¢ÍøÂç´æ´¢µÈ¡£

3¡¢FaaSµÄº¯ÊýÓ¦µ±¿ÉÒÔ¿ìËÙÆô¶¯Ö´ÐУ¬²¢ÓµÓжÌÔݵÄÉúÃüÖÜÆÚ¡£º¯ÊýÔÚÓÐÏÞµÄʱ¼äÀïÆô¶¯²¢´¦ÀíÈÎÎñ£¬²¢ÔÚ·µ»ØÖ´Ðнá¹ûºóÖÕÖ¹¡£Èç¹ûËüÖ´ÐÐʱ¼ä³¬¹ýÁËij¸öãÐÖµ£¬Ò²Ó¦¸Ã±»ÖÕÖ¹¡£

4¡¢FaaSº¯ÊýÆô¶¯ÑÓʱÊܺܶàÒòËØµÄ¸ÉÈÅ¡£ÒÔAWS LambdaΪÀý£¬Èç¹û²ÉÓÃÁËJS»òPythonʵÏÖÁ˺¯Êý£¬ËüµÄÆô¶¯Ê±¼äÒ»°ã²»»á³¬¹ý10~100ºÁÃë¡£µ«Èç¹ûÊÇʵÏÖÔÚJVMÉϵĺ¯Êý£¬µ±Óöµ½Í»·¢µÄ´óÁ÷Á¿»òÕßµ÷Óüä¸ô¹ý³¤µÄÇé¿ö£¬Æô¶¯Ê±¼ä»áÏÔÖø±ä³¤¡£

5¡¢FaaSÐèÒª½èÖúÓÚAPI Gateway½«ÇëÇóµÄ·ÓɺͶÔÓ¦µÄ´¦Àíº¯Êý½øÐÐÓ³É䣬²¢½«ÏìÓ¦½á¹û´úÀí·µ»Ø¸øµ÷Ó÷½¡£

±ÈÈç¶ÔÓÚÒ»¸ö¼òµ¥µÄ3²ãWebÓ¦Óã¬ÔÚÕâÀïºó¶ËϵͳʵÏÖÁ˴󲿷ÖÒµÎñÂß¼­£ºÈÏÖ¤¡¢ËÑË÷¡¢ÊÂÎñµÈ£¬ËüµÄ¼Ü¹¹ÈçÏ£º

Èç¹û²ÉÓÃServerless¼Ü¹¹£¬½«ÈÏÖ¤¡¢Êý¾Ý¿âµÈ²ÉÓõÚÈý·½µÄ·þÎñ£¬´ÓÔ­À´µÄµ¥Ìåºó¶ËÀï·Ö²ð³öÀ´(¿ÉÄÜÐèÒªÔÚÔ­À´µÄ¿Í»§¶ËÀï¼ÓÈëһЩҵÎñÂß¼­)¡£¶ÔÓڴ󲿷ֵÄÈÎÎñ£¬Í¨¹ýº¯ÊýµÄÐÎʽ½øÐÐÖ´ÐУ¬¶ø²»ÔÙʹÓÃÒ»Ö±ÔÚÏߵķþÎñÆ÷½øÐÐÖ§³Ö£¬Èç´ËÒ»À´ËüµÄ¼Ü¹¹¿´ÆðÀ´¾ÍÇåÎú¶àÁË£º

ÕâÑùµÄ²ð·Ö³ýÁËÈø÷¸ö×é¼þ(º¯Êý)¼ä³ä·Ö½âñÿ¸ö¶¼ºÜºÃµØÊµÏÖÁ˵¥Ò»Ö°ÔðÔ­Ôò(SRP, Single Responsibility Principle)ÒÔÍ⣬ËüµÄºÃ´¦»¹ÓУº

¼õÉÙ¿ªÖ§

ͨ¹ý¹ºÂò¹²ÏíµÄ»ù´¡ÉèÊ©£¬Í¬Ê±¼õÉÙÁË»¨·ÑÔÚÔËάÉϵÄÈËÁ¦³É±¾£¬×îÖÕ¼õÉÙÁË¿ªÖ§¡£

¼õÇḺµ£

²»ÔÙÐèÒªÖØ¸´ÔìÂÖ×Ó£¬ÐèҪʲô¹¦ÄÜÖ±½Ó¼¯³Éµ÷Óü´¿É£¬Ò²ÎÞÐ迼ÂÇÕûÌåµÄÐÔÄÜ£¬Ö»×¨×¢ÓÚÒµÎñ´úÂëµÄʵÏÖ¡£

Ò×ÓÚÀ©Õ¹

ÔÆÉÏÌṩÁË×Ô¶¯µÄµ¯ÐÔÀ©Õ¹£¬ÓÃÁ˶àÉÙ¼ÆËã×ÊÔ´£¬¾Í¹ºÂò¶àÉÙ£¬ÍêÈ«°´Ð踶·Ñ¡£

¼ò»¯¹ÜÀí

×Ô¶¯»¯µÄµ¯ÐÔÀ©Õ¹¡¢¼õÉÙÁË´ò°üºÍ²¿ÊðµÄ¸´ÔÓ¶È¡¢¿ÉÒÔ¿ìËÙÍÆÏòÊг¡£¬ÕâЩ¶¼ÈùÜÀí±äµÃ¼òµ¥¸ßЧ¡£

»·±£¼ÆËã

¼´Ê¹ÔÚÔÆµÄ»·¾³ÉÏ£¬ÈÔϰ¹ßÓÚ¹ºÂò¶àÓàµÄ·þÎñÆ÷£¬×îÖÕµ¼Ö¿ÕÏС£Serverless¶Å¾øÁËÕâÖÖÇé¿ö¡£

ÔÚMartin FlowerµÄרÀ¸ÎÄÕÂServerless ArchitecturesÔøÕâÑù¶¨ÒåServerless¼Ü¹¹£º

¡°Serverless architectures refer to applications that significantly depend on third-party services(AKA Backend as a Service or ¡°BaaS¡±) or on custom code that is run ephmemeral containers (Function as a Service or ¡°FaaS¡±)¡±

ÕýÈçÇ°ÃæÌáµ½ÁËFaaSµÄÿ¸öº¯Êý¶¼ÓµÓпìËÙÆô¶¯ºÍ¶ÌÔÝÉúÃüÖÜÆÚµÄÌØÐÔ£¬ÈÃÈÝÆ÷×÷ΪÈÎÎñº¯ÊýÔËÐеĻù±¾µ¥Î»£¬ÊDz»ÊǷdz£ÊʺÏFaaSµÄ³¡¾°£¿Í¬Ñù£¬×÷Ϊ×îÈÈÃŵÄÈÝÆ÷±àÅŹ¤¾ßµÄKubernetesÓÖ¸ÃÔõÑùÓ¦¶ÔFaaSÄØ?

¶þ¡¢Kubernetes Óë FaaS

FissionÊÇÒ»¿î»ùÓÚKubernetesµÄFaaS¿ò¼Ü¡£Í¨¹ýFission¿ÉÒÔÇá¶øÒ׾ٵؽ«º¯Êý·¢²¼³ÉHTTP·þÎñ¡£Ëüͨ¹ý¶ÁÈ¡Óû§µÄÔ´´úÂ룬³éÏó³öÈÝÆ÷¾µÏñ²¢Ö´ÐС£Í¬Ê±Ëü°ïÖú¼õÇáÁËKubernetesµÄѧϰ¸ºµ££¬¿ª·¢ÕßÎÞÐèÁ˽âÌ«¶àK8sÒ²¿ÉÒԴ³öʵÓõķþÎñ¡£FissionĿǰÖ÷ÒªÖ§³ÖNodeJSºÍPython£¬Ô¤Ö§³ÖC# .NET£¬¶ÔGolangµÄÖ§³ÖÒ²ÔÚ½øÐÐÖС£Fission¿ÉÒÔÓëHTTP·ÓÉ¡¢Kubernetes EventsºÍÆäËûµÄʼþ´¥·¢Æ÷½áºÏ£¬ËùÓÐÕâЩº¯Êý¶¼Ö»ÓÐÔÚÔËÐеÄʱºò²Å»áÏûºÄCPUºÍÄÚ´æ¡£

KubernetesÌṩÁËÇ¿´óµÄµ¯ÐÔ±àÅÅϵͳ£¬²¢ÇÒÓµÓÐÒ×ÓÚÀí½âµÄºó¶ËAPIºÍ²»¶Ï·¢Õ¹×³´óµÄÉçÇø¡£ËùÒÔFission½«ÈÝÆ÷±àÅŹ¦Äܽ»¸øÁËK8s£¬ÈÃ×Ô¼º×¨×¢ÓÚFaaSµÄÌØÐÔ¡£

¶ÔÓÚFaaSÀ´Ëµ£¬Ëü×îÖØÒªµÄÁ½¸öÌØÐÔÊǽ«º¯Êýת»»Îª·þÎñ£¬Í¬Ê±¹ÜÀí·þÎñµÄÉúÃüÖÜÆÚ¡£Óкܶà°ì·¨¿ÉÒÔʵÏÖÕâÁ½¸öÌØÐÔ£¬µ«ÐèÒª¿¼ÂÇһЩÎÊÌ⣬±ÈÈç¡°¿ò¼ÜÔËÐÐÔÚÔ´Âë¼¶£¿»¹ÊÇDocker¾µÏñ£¿¡±£¬¡°µÚÒ»´ÎÔËÐеĸºÔضàÉÙÄܽÓÊÜ¡±£¬²»Í¬µÄÑ¡Ôñ»áÓ°Ï쵽ƽ̨µÄÀ©Õ¹ÐÔ¡¢Ò×ÓÃÐÔ¡¢×ÊԴʹÓÃÒÔ¼°ÐÔÄܵÈÎÊÌâ¡£

ΪÁËʹFission×ã¹»Ò×Óã¬ËüÑ¡ÔñÔÚÔ´Âë¼¶¹¤×÷¡£Óû§²»ÔÙ²ÎÓë¾µÏñ¹¹½¨¡¢ÍƲֿ⡢¾µÏñÈÏÖ¤¡¢¾µÏñ°æ±¾µÈ¹ý³Ì¡£µ«Ô´Âë¼¶µÄ½Ó¿Ú²»ÔÊÐíÓû§´ò°ü¶þ½øÖÆÒÀÀµ¡£Fission²ÉÓõķ½Ê½ÊÇÔÚ¾µÏñÄÚ²¿·ÅÖö¯Ì¬µÄº¯Êý¼ÓÔØ¹¤¾ß£¬ÈÃÓû§¿ÉÒÔÔÚÔ´Âë²ã²Ù×÷£¬Í¬Ê±ÔÚÐèÒªµÄʱºò¿ÉÒÔ¶¨ÖƾµÏñ¡£ÕâЩ¾µÏñÔÚFissionÀï½Ð×ö¡°»·¾³¾µÏñ¡±£¬Ëü°üº¬ÁËÌØ¶¨ÓïÑÔµÄÔËÐÐʱ¡¢Ò»×é³£ÓõÄÒÀÀµºÍº¯ÊýµÄ¶¯Ì¬¼ÓÔØ¹¤¾ß¡£Èç¹ûÕâЩÒÀÀµÒѾ­×ã¹»Âú×ãÐèÇ󣬾ÍÖ±½ÓʹÓÃÕâ¸ö¾µÏñ£¬·ñÔòµÄ»°ÐèÒªÖØÐµ¼ÈëÒÀÀµ²¢¹¹½¨¾µÏñ¡£»·¾³¾µÏñÊÇFissionÖÐΨһÓëÓïÑÔÏà¹ØµÄ²¿·Ö¡£¿ÉÒÔ°ÑËü¿´×öÊÇ¿ò¼ÜÀïÆäÓಿ·ÖµÄͳһ½Ó¿Ú¡£ËùÒÔFission¿ÉÒÔ¸ü¼ÓÈÝÒ×À©Õ¹(Õâ¿´ÆðÀ´¾ÍÏñVFSÒ»Ñù)¡£

FaaSÓÅ»¯Á˺¯ÊýÔËÐÐʱµÄ×ÊԴʹÓã¬ËüµÄÄ¿±êÊÇÔÚÔËÐеÄʱºò²ÅÏû·Ñ×ÊÔ´¡£µ«ÔÚÀäÆô¶¯µÄʱºò¿ÉÄÜ»áÓÐЩ×ÊԴʹÓùýÔØ£¬±ÈÈç¶ÔÓÚÓû§µÇ¼µÄ¹ý³Ì£¬ÎÞÂÛ¶àµÈ¼¸Ãë¶¼ÊDz»¿É½ÓÊܵġ£ÎªÁ˸ıäÕâ¸öÎÊÌ⣬Fissionά³ÖÁËÒ»¸öÃæÏòÈκλ·¾³ÈÝÆ÷³Ø¡£µ±Óк¯Êý½øÀ´Ê±£¬FissionÎÞÐèÆô¶¯ÐÂÈÝÆ÷£¬Ö±½Ó´Ó³ØÀïȡһ¸ö£¬½«º¯Êý¿½±´µ½ÈÝÆ÷ÀִÐж¯Ì¬¼ÓÔØ£¬²¢½«ÇëÇó·Óɵ½¶ÔÓ¦µÄʵÀý¡£

³ýÁ˰²×°ÔÚ±¾µØµÄFissionÖ÷³ÌÐòÍ⣬Fission-bundleÉè¼ÆÎªÒ»×é΢·þÎñ¹¹³É:

Controller: ¼Ç¼Á˺¯Êý¡¢HTTP·ÓÉ¡¢Ê¼þ´¥·¢Æ÷ºÍ»·¾³¾µÏñ

Pool Manager: ¹ÜÀí»·¾³ÈÝÆ÷£¬¼ÓÔØº¯Êýµ½ÈÝÆ÷£¬º¯ÊýʵÀý¿ÕÏÐʱɱµô

Router: ½ÓÊÜHTTPÇëÇ󣬲¢Â·Óɵ½¶ÔÓ¦µÄº¯ÊýʵÀý£¬±ØÒªµÄ»°´ÓPool ManagerÖÐÇëÇóÈÝÆ÷ʵÀý

ÔÚKubernetesÉÏ£¬ÕâЩ×é¼þ¶¼ÒÔDeploymentµÄ·½Ê½ÔËÐУ¬²¢¶ÔÍⱩ¶Service¡£³ýÁËÕâÈý¸öFissionÌØÓеÄ×é¼þÍ⣬»¹ÓÃÁËEtcd×÷Ϊ×ÊÔ´ºÍÓ³ÉäµÄ´æ´¢£¬Í¬ÑùÒ²ÒÔDeploymentµÄ·½Ê½Æô¶¯¡£ControllerÖ§³ÖFissionµÄAPI£¬ÆäËûµÄ×é¼þ¼àÊÓcontrollerµÄ¸üС£Router±©Â¶ÎªK8sÀïµÄLoadBalancer»òNodePortÀàÐ͵ķþÎñ(ÕâÈ¡¾öÓÚK8s¼¯Èº·ÅÔÚÄÄÀï)¡£

Ŀǰ£¬Fission½«Ò»¸öº¯ÊýÓ³ÉäΪһ¸öÈÝÆ÷£¬¶ÔÓÚ×Ô¶¯À©Õ¹Îª¶à¸öʵÀýµÄÌØÐÔÔÚºóÐø°æ±¾Àï¡£ÒÔ¼°ÖØÓú¯ÊýPodsÀ´Ö§³Ö¶à¸öº¯ÊýÒ²Ôڼƻ®ÖÐ(ÔÚÕâÖÖÇé¿öϸôÀë²»ÊDZØÐëµÄ)¡£FissionÎĵµ¼òµ¥½éÉÜÁËËüµÄ¹¤×÷Ô­Àí£º

¡°µ±RouterÊÕµ½ÍⲿÇëÇó£¬ËüÏÈÈ¥»º´æCacheÀï²é¿´ÊÇ·ñÔÚÇëÇóÒ»¸öÒѾ­´æÔڵķþÎñ¡£Èç¹ûûÓУ¬Òª·ÃÎÊÇëÇóÓ³ÉäµÄ·þÎñº¯Êý£¬ÐèÒªÏòPool ManagerÉêÇëÒ»¸öÈÝÆ÷ʵÀýÖ´Ðк¯Êý¡£Pool ManagerÓµÓÐÒ»¸ö¿ÕÏÐPod³Ø¡£ËüÑ¡ÔñÒ»¸öPod£¬²¢°Ñº¯Êý¼ÓÔØµ½ÀïÃæ£¨Í¨¹ýÏòÈÝÆ÷ÀïµÄSidecar·¢ËÍÇëÇóʵÏÖ£©£¬²¢ÇÒ°ÑPodµÄµØÖ··µ»Ø¸øRouter¡£Router½«ÍⲿÇëÇó´úÀíת·¢µ½¸ÃPod£¬²¢½«ÏìÓ¦½á¹û·µ»Ø¡£Pod»á±»»º´æÆðÀ´ÒÔÓ¦¶ÔºóÐøµÄÇëÇó¡£Èç¹û¿ÕÏÐÁ˼¸·ÖÖÓ£¬Ëü¾Í»á±»É±ËÀ¡±

¶ÔÓÚ½ÏСµÄREST APIÀ´Ëµ£¬FissionÊǸöºÜºÃµÄÑ¡Ôñ£¬Í¨¹ýʵÏÖwebhooks£¬¿ÉÒÔΪSlack»òÆäËû·þÎñ±àдchatbots¡£

Fissionͬʱ»¹Ö§³Ö¸ù¾ÝKubernetesµÄWatch»úÖÆÀ´³ö·¢º¯ÊýµÄÖ´ÐС£ÀýÈçÄã¿ÉÒÔÉèÖÃÒ»¸öº¯ÊýÀ´watchij¸öÃüÃû¿Õ¼äÏÂËùÓÐÂú×ãij¸ö±êÇ©µÄpod£¬Õâ¸öº¯Êý½«µÃµ½ÐòÁл¯µÄ¶ÔÏóºÍÕâ¸öÉÏÏÂÎĵÄWatch EventÀàÐÍ(added/removed/updated)¡£ÓÖÈçͨ¹ýÉèÖÃʼþ´¦Àíº¯Êý¿ÉÒÔ½«ËüÓ¦ÓÃÓÚ¼òµ¥µÄ¼à¿Ø£¬Ö¸¶¨µ±ÈÎÒâÒ»¸ö·þÎñÌí¼Óµ½¼¯ÈºÊ±ÏòSlack·¢ËÍÒ»ÌõÏûÏ¢¡£µ±È»Ò²Óиü¸´ÔÓµÄÓ¦Óã¬ÀýÈç±àдһ¸öwatching KubernetesµÚÈý·½×ÊÔ´(Third Party Resource)µÄ×Ô¶¨Òåcontroller¡£

ÔÚFissionµÄ¹ÙÍøÉÏÓиöÈëÃŵÄʹÓÃʾÀý£º

$ cat hello.js
module.exports = function(context, callback) {
callback(200, "Hello, world!\n");
}
# Upload your function code to fission
$ fission function create --name hello --env nodejs --code hello.js
# Map GET /hello to your new function
$ fission route create --method GET --url /hello --function hello
# Run the function. This takes about 100msec the first time.
$ curl http://$FISSION_ROUTER/hello
Hello, world!

Èç¹ûÊǵÚÒ»´ÎÔËÐУ¬ÐèÒªÏÈ×¼±¸NodeJSµÄÔËÐл·¾³£º

# Add the stock NodeJS env to your Fission deployment
$ fission env create --name nodejs --image fission/node-env

ͨ¹ýÔĶÁFissionµÄÔ´Â룬¿ÉÒÔºÜÇåÎúµØ¿´µ½ËüµÄÖ´Ðйý³Ì£º

1. fission env create --name nodejs --image fission/node-env

2. fission function create --name hello --env nodejs --code hello.js

ͬÑù£¬ÓÉfissionÖ÷³ÌÐòÖ´ÐÐÃüÁîfunctionºÍ×ÓÃüÁîcreate£¬Í¨¹ý¨Cname²ÎÊýÖ¸¶¨º¯ÊýÃûΪhello£¬¨Cenv²ÎÊýÈ·¶¨»·¾³£¬¨Ccode²ÎÊýÈ·¶¨ÒªÖ´Ðеĺ¯Êý´úÂ롣ͨ¹ýPOSTÏò/v1/functions·¢³öÇëÇó£¬Ð¯´øº¯ÊýÐÅÏ¢µÄJSON¡£controllerÄõ½JSONºó½øÐк¯Êý×ÊÔ´µÄ´æ´¢¡£Ê×ÏȽ«Äõ½UUID£¬È»ºóдµ½ÎļþÃûΪ¸ÃUUIDµÄÎļþÀï¡£½Ó×ÅÏòETCDµÄAPI·¢ËÍHTTPÇëÇó£¬ÔÚfile/name·¾¶ÏÂÓÐÐò´æ·ÅUUID¡£×îºóÀàËÆÉÏÃæenvÃüÁ½«UUIDºÍÐòÁл¯ºóµÄJSONÊý¾Ýдµ½ETCDÀï¡£

3. fission route create --method GET --url /hello --function hello

fissionͨ¹ý²ÎÊý¨CmethodÖ¸¶¨ÇëÇóËùÐè·½·¨ÎªGET£¬¨CurlÖ¸¶¨API·ÓÉΪhello£¬¨CfunctionÖ¸¶¨¶ÔÓ¦Ö´Ðеĺ¯ÊýΪhello¡£Í¨¹ýPOSTÏò/v1/triggers/http·¢³öÇëÇ󣬽«Â·Óɺͺ¯ÊýµÄÓ³Éä¹ØÏµÐÅÏ¢·¢Ë͵½controller¡£controller»áÔÚÒÑÓеÄtriggerÁбíÀï½øÐÐÖØÃû¼ì²é£¬Èç¹û²»Öظ´£¬²Å»á»ñÈ¡UUID²¢½«ÐòÁл¯ºóµÄJSONÊý¾Ýдµ½etcdÀï¡£

Ç°ÃæµÄ¶¼ÊÇÓɱ¾µØµÄfission³ÌÐòÍê³ÉµÄ¡£ÎÒÃÇÒѾ­Ô¤ÏÈ´´½¨ÁËfission-bundleµÄDeploymentºÍService¡£Ëü´´½¨ÁËÃûΪfissionµÄÃüÃû¿Õ¼ä£¬²¢ÔÚÀïÃæÆô¶¯4¸öDeployment£¬·Ö±ðÊÇcontroller, router, poolMgr, etcd£¬²¢´´½¨NodePortÀàÐ͵ÄService: controllerºÍrouter£¬·Ö±ð¼àÌý¶Ë¿Ú31313ºÍ31314¡£Í¬Ê±´´½¨ÁíÒ»¸öÃûΪfission-functionµÄÃüÃû¿Õ¼äÓÃÀ´ÔËÐÐÖ´Ðк¯ÊýµÄPod.

routerʹÓÃCacheά»¤×ÅÒ»·Ýfunctionµ½serviceµÄÓ³É䣬ͬʱ»¹ÓÐtrigger¼¯ºÏ(Óиögoroutineͨ¹ýcontroller±£³Ö¶ÔÕâ¸ötrigger¼¯ºÏµÄ¸üУ©£¬ÔÚÆô¶¯Ê±°´ÕÕÌí¼ÓtriggerÀïµÄurlºÍÕë¶Ô¶ÔÓ¦º¯ÊýµÄhandler³õʼ»¯Â·ÓÉ¡£

4. curl http://$FISSION_ROUTER/hello

µ±Ö´ÐиÃcurlʱ£¬ÇëÇó·¢ËÍÖÁrouterÈÝÆ÷¡£ÊÕµ½ÇëÇóºó»áת·¢µ½Á½¸ö¶ÔÓ¦µÄhandler¡£Ò»¸öÊÇÓû§¶¨ÒåµÄÃæÏòÍⲿµÄ£¬Ò»¸öÊÇÄÚ²¿µÄ¡£Êµ¼ÊÉÏËüÃÇÖ´ÐеÄÊÇͬһ¸öhandler¡£ÈκÎhandler¶¼»áÏȸù¾ÝfuntionÃûÈ¥CacheÀï²éÕÒ¶ÔÓ¦µÄserviceÃû¡£Èç¹ûûÓÐÃüÖУ¬½«Í¨¹ýpoolmgrΪº¯Êý´´½¨ÐµÄService£¬²¢°Ñ¼Ç¼Ìí¼Óµ½Cache¡£È»ºóÉú³ÉÒ»¸ö·´Ïò´úÀí£¬½ÓÊÕÍⲿÇëÇó£¬È»ºóת·¢ÖÁKubernetes Service¡£

PoolmgrÔÚ´´½¨ÐµÄserviceʱ£¬»á¸ù¾Ýenv´´½¨Pod pool(³õʼ´óСΪ3¸ö¸±±¾µÄdeployment)£¬È»ºó´ÓÖÐËæ»úÑ¡ÔñÒ»¸öReadyµÄPod¡£½Ó×ÅΪ´Ë½¨Á¢¶ÔÓ¦µÄService¡£

FissionÊÇÒ»¸ö¿ªÔ´ÏîÄ¿£¬ÓÉPlatform 9ºÍÉçÇø½øÐпª·¢¡£ÉçÇøÕýÔÚŬÁ¦ÈÃKubernetesÉϵÄFaaS¸ü¼ÓÒ×ÓúÍÇáËɼ¯³É¡£ÔÚδÀ´¼¸¸öÔ½«Ìí¼Óµ¥Ôª²âÊÔ¡¢ÓëGit¼¯³É¡¢º¯Êý¼à¿ØºÍÈÕÖ¾¾ÛºÏµÈÌØÐÔ£¬Í¬Ê±Ò²»á¸úÆäËûµÄEvents½øÐм¯³É£¬¶ÔÁË£¬»¹ÓÐΪ¸ü¶àµÄÓïÑÔ´´½¨»·¾³¡£ÔÚ½ñÄê1Ô·ݣ¬Fission·¢²¼ÁËalpha°æ¡£

Èý¡¢ºó¼Ç

ÈÝÆ÷¼¼ÊõµÄ³öÏָıäÁËÈí¼þ½»¸¶µÄ˼ά£¬Î¢·þÎñºÍServerlessËäȻûÓмõÉÙÈí¼þÉúÃüÖÜÆÚÖеĻ·½Ú£¬µ«È·Êµ¸Ä±äÁËÏÂÓÎÈí¼þ²¿ÊðºÍά»¤µÄÀíÄÌá¸ßÁËÈí¼þ¿ª·¢ÈËÔ±µÄЧÂÊ¡£FaaSÊÇδÀ´µÄÒ»ÖÖ¿ÉÄܵÄ×ßÊÆ£¬µ«Ò»¶¨²»»áÊÇ×îÖÕµÄδÀ´¡£×ÜÓÐÒ»ÌìFaaSÓֻᱻÆäËû¼¼ÊõËù´úÌæ¡£Éú»îÔÚÕâ¸öÐÅÏ¢±¬Õ¨¡¢¼¼Êõ·ÉËÙ¸üµüµÄʱ´úºÜ·³ÄÕÒ²ºÜÐÒ¸£¡£Õâ¾ÍÊÇÎÒÃÇËùÔÚµÄʱ´ú£¬ÎÒÃÇÕýÔÚÇ×Éí¾­Àú×ÅδÀ´¡£

 
   
58939 ´Îä¯ÀÀ       30
Ïà¹ØÎÄÕÂ

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

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

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