±à¼ÍƼö: |
ÎÄÕ½éÉÜÁË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ÓֻᱻÆäËû¼¼ÊõËù´úÌæ¡£Éú»îÔÚÕâ¸öÐÅÏ¢±¬Õ¨¡¢¼¼Êõ·ÉËÙ¸üµüµÄʱ´úºÜ·³ÄÕÒ²ºÜÐÒ¸£¡£Õâ¾ÍÊÇÎÒÃÇËùÔÚµÄʱ´ú£¬ÎÒÃÇÕýÔÚÇ×Éí¾Àú×ÅδÀ´¡£ |