±à¼ÍƼö: |
ÎÄÕ·ÖÏíÁËServerlessµÄ¼Ü¹¹¹æ·¶£¬ServerlessʼþÓë¹æ·¶£¬Serverless¹¤³Ì»¯µÄÄѵãÓëÌôÕ½£¬ÒÔ¼°ServerlessÐÐÒµÓ¦Óã¬Ï£Íû´ËÎĶÔÄúµÄѧϰÓÐËù°ïÖú¡£
À´×ÔÓÚÔÆÉçÇø£¬,ÓÉ»ðÁú¹ûÈí¼þAlice±à¼¡¢ÍƼö¡£ |
|
Ò»¡¢·ÖÏíĿ¼

¶þ¡¢ÈëÃÅ£º3·ÖÖÓ¿ìËÙ¹¹½¨²¿ÊðÒ»¸ö Node Ó¦ÓÃ(Egg + Serverless)

1.×¼±¸ Egg ÏîÄ¿
1.1 ³õʼ»¯ Egg ÏîÄ¿

1.2 ÐÞ¸Ä Egg ÅäÖÃ
ÓÉÓÚÔÆº¯ÊýÔÚÖ´ÐÐʱ£¬Ö»ÓÐ?/tmp?¿É¶ÁдµÄ£¬ËùÒÔÎÒÃÇÐèÒª½«?egg.js?¿ò¼ÜÔËÐг¢ÊÔµÄÈÕ־дµ½¸ÃĿ¼Ï£¬Îª´ËÐèÒªÐÞ¸Ä?config/config.default.js?ÖеÄÅäÖÃÈçÏ£º

1.3 ²âÊÔÔËÐÐÏîÄ¿
npm run dev
2.°²×° Serverless Framework
// °²×°Serverless ¿ò¼Ü
npm i -g serverless
3.ÅäÖÃ YAML
3.1 ÔÚ egg ÏîÄ¿¸ùĿ¼,н¨ Serverless ÅäÖÃÎļþ serverless.yml

4.²¿Êðµ½ÌÚÑ¶ÔÆ
²¿ÊðÃüÁ sls deploy
eggÏêϸÅäÖòο¼£ºhttps://github.com/serverless-components/tencent-egg/tree/v2
ËÄ¡¢Serverless ¼Ü¹¹¹æ·¶
1. ´«Í³-ǰ¶Ë³¡¾°´¦ÀíÄ£Ð͵äÐͽṹ

´«Í³Ç°¶Ë´¦Àí³¡¾°£¬·þÎñÆ÷ÖпÉÄÜÉæ¼°Â·ÓɹæÔò£¬¼øÈ¨Âß¼ÒÔ¼°ÆäËû¸÷ÀิÔÓµÄÒµÎñ´úÂë
¿ª·¢ÍŶÓÒª¸¶³öºÜ´óµÄ¾«Á¦ÔÚÕâ¸ö·þÎñÆ÷µÄÔËάÉÏÃæ£¬°üÀ¨¿Í»§Á¿Í»È»Ôö¶àʱÊÇ·ñÐèÒªÀ©ÈÝ·þÎñÆ÷£¿
·þÎñÆ÷ÉϵĽű¾£¬ÒµÎñ´úÂëµÈÊÇ·ñ»¹ÔÚ½¡¿µÔËÐУ¿
ÊÇ·ñÓкڿÍÔÚ²»¶ÏµØ¶Ô·þÎñÆ÷·¢Æð¹¥»÷£¿
µÈһϵÁÐÎÊÌâ¡¡
2. Serverless-ǰ¶Ë³¡¾°´¦ÀíÄ£Ð͵äÐͽṹ

ÔÚServerless³¡¾°¿Í»§¶ËºÍÊý¾Ý¿âδ·¢Éú±äµÄǰÌáÏ£¬Ö®Ç°ÐèÒª¿ª·¢ÍŶÓά»¤µÄ·ÓÉÄ£¿éÒÔ¼°¼øÈ¨Ä£¿é¶¼½«½ÓÈë·þÎñÉÌÌṩµÄAPIÍø¹ØÏµÍ³ÒÔ¼°¼øÈ¨ÏµÍ³
¿ª·¢ÍŶÓÎÞÐëÔÙά»¤ÕâÁ½²¿·ÖµÄÒµÎñ´úÂ룬ֻÐèÒª³ÖÐøÎ¬»¤Ïà¹Ø¹æÔò¼´¿É
ͬʱҵÎñ´úÂëÒ²±»²ð·Ö³ÉÁ˺¯ÊýÁ£¶È£¬²»Í¬º¯Êý±íʾ²»Í¬µÄ¹¦ÄÜ
2.1 Serverless?¼Ü¹¹Ä£ÐÍ

FaaSÓëPaaSµÄ¸ÅÄîÔÚijЩ·½ÃæÓÐÐí¶àÏàËÆµÄµØ·½¡£ÈËÃÇÉõÖÁÈÏΪFaaS¾ÍÊÇÁíÒ»ÖÖÐÎʽµÄPaaS¡£µ«ÊÇIntent MediaµÄ¹¤³Ì¸±×ܲÃMike RobertsÓÐ×Ô¼ºµÄ²»Í¬¿´·¨£º Most PaaS applications are not geared towards bringing entire applications up and down in response to an event, whereas FaaS platforms do exactly this. FaaSºÍPaaSÔÚÔËά·½Ãæ×î´óµÄ²îÒìÔÚÓÚËõ·ÅÄÜÁ¦¡£¶ÔÓڴ󲿷ÖPaaSƽ̨£¬Óû§ÒÀÈ»ÐèÒª¿¼ÂÇËõ·Å¡£µ«ÊǶÔÓÚFaaSÓ¦Óã¬ÕâÖÖÎÊÌâÍêÈ«ÊÇ͸Ã÷µÄ¡£¾ÍË㽫PaaSÓ¦ÓÃÉèÖÃΪ×Ô¶¯Ëõ·Å£¬ÒÀÈ»ÎÞ·¨ÔÚ¾ßÌåÇëÇóµÄ²ãÃæÉϽøÐÐËõ·Å£¬¶øFaaSÓ¦ÓÃÔڳɱ¾·½ÃæÐ§Òæ¾Í¸ß¶àÁË¡£AWSÔÆ¼Ü¹¹Õ½ÂÔ¸±×ܲÃAdrian CockcroftÔø¾Õë¶ÔÁ½ÕߵĽ綨¸ø³öÁËÒ»¸ö¼òµ¥µÄ·½·¨£º If your PaaS can efficiently start instances in 20ms that run for half a second, then call it serverless. ÕýÊÇÒòΪServerlessÓëPaaSµÄ²»Í¬£¬ÓëFaaSÒÔ¼°BaaSµÄ¹ØÏµ£¬ËùÒÔÓÐÈË˵ServerlessÕæÕýʵÏÖÁ˵±³õÔÆ¼ÆËãµÄÄ¿±ê£¬¸üÓÐÈËÕâÑù¶¨ÒåServerless£º Serverless=BaaS+FaaS+... ?³ÏÈ»£¬ÕâÖÖ˵·¨Î´±ØÊǰٷÖÖ®Ò»°Ù׼ȷµÄ£¬¾ÍÏñMartin FowlerµÄÒ»¾ä»°£ºLike many trends in software, there¡¯s no one clear view of what Serverless is. µ«ÊDz»¿É·ñÈϵÄÒ»µãÊÇServerlessÔںܶà²ãÃæ£¬ºÜ¶àÁìÓò£¬Ô½À´Ô½Í»³ö¡°ÆÚÍûÖÐÔÆ¼ÆË㡱µÄÑù×ÓÁË¡£
2.2 Serverless ´¦ÀíÄ£ÐÍ

Event Sources£¨Ê¼þÔ´£©£º½«Event´¥·¢»òÁ÷ʽ´«Êäµ½Ò»¸ö»ò¶à¸öº¯ÊýʵÀýÖУ»
Function Instance£¨º¯ÊýʵÀý£©£º¿ÉÒÔ¸ù¾ÝÐèÒª£¬½«µ¥¸öº¯Êý/΢·þÎñ½øÐÐÀ©Õ¹£»
FaaS Controller£¨Faas ¿ØÖÆÆ÷£©£º²¿Ê𣬿ØÖƺͼàÊÓº¯ÊýʵÀý¼°ÆäÀ´Ô´
ƽ̨·þÎñ£ºFaaS½â¾ö·½°¸Ê¹ÓõÄÒ»°ã¼¯Èº»òÔÆ·þÎñ£¨ÓÐʱ³ÆÎªºó¶Ë¼´·þÎñ£¬»òÕßBaaSµÈ£©
2.3 Serverless ³¡¾°µäÐ͵Ť×÷Á÷³Ì

Event State£¨Ê¼þ״̬£©£º´Ë״̬ÔÊÐíµÈ´ýÀ´×ÔʼþÔ´µÄʼþ£¬È»ºó´¥·¢º¯ÊýÔËÐлò¶à¸öº¯Êý°´Ë³Ðò¡¢²¢ÐлòÔÚ·ÖÖ§ÖÐÔËÐС£
Operation/Task State£¨²Ù×÷/ÈÎÎñ״̬£©£º´Ë״̬ÔÊÐí°´Ë³Ðò»ò²¢ÐÐÔËÐÐÒ»¸ö»ò¶à¸öº¯Êý£¬¶ø²»µÈ´ýÈκÎʼþ¡£
Switch/Choice State£¨Çл»/Ñ¡Ôñ״̬£©£º´Ë״̬ÔÊÐíת»»µ½¶à¸öÆäËû״̬£¨ÀýÈ磬ǰһ¸öº¯Êý½á¹û´¥·¢·ÖÖ§/ת»»µ½²»Í¬µÄÏÂÒ»¸ö״̬£©¡£
End/Stop State£¨½áÊø/ֹͣ״̬£©£º´Ë״̬ÒÔʧ°Ü/³É¹¦ÖÕÖ¹¹¤×÷Á÷¡£
Pass State£¨Í¨¹ý״̬£©£º´Ë״̬ÔÚÁ½¸ö״̬֮¼ä²åÈëʼþÊý¾Ý¡£
Delay/Wait State£¨ÑÓ³Ù/µÈ´ý״̬£©£º´Ë״̬µ¼Ö¹¤×÷Á÷Ö´ÐÐÑÓ³ÙÖ¸¶¨µÄ³ÖÐøÊ±¼ä»òÖ±µ½Ö¸¶¨µÄʱ¼ä/ÈÕÆÚ¡£
3. Serverless º¯Êý¼Ü¹¹¹æ·¶
3.1 º¯Êý¶¨Òå
ID
Ãû³Æ
ÃèÊö
±êÇ©
°æ±¾ID
º¯Êý´¦Àí³ÌÐò
ÔËÐÐʱÓïÑÔ
´úÂë+ÒÀÀµÏî
»·¾³±äÁ¿
ÆäËû ¡¡
3.2 ÔªÊý¾ÝÏêÇ飨Metadata Details£©
°æ±¾
»·¾³±äÁ¿
Ö´ÐнÇÉ«
×ÊÔ´
³¬Ê±
ÆäËû ¡¡
3.3 Êý¾Ý°ó¶¨
һЩÎÞ·þÎñÆ÷¿ò¼ÜÔÊÐíÓû§Ö¸¶¨º¯ÊýʹÓõÄÊäÈë/Êä³öÊý¾Ý×ÊÔ´£¬Õâʹ¿ª·¢ÈËÔ±¿ª·¢µÄº¯Êý×ÊÔ´¿ÉÒÔ¼ò»¯¡¢Ìá¸ßÐÔÄÜ£¨ÔÚÖ´ÐÐÖ®¼ä±£ÁôÊý¾ÝÁ¬½Ó£¬¿ÉÒÔԤȡÊý¾ÝµÈ£©ºÍ»ñµÃ¸üºÃµÄ°²È«ÐÔ£¨Êý¾Ý×ÊԴƾ¾ÝÊÇÉÏÏÂÎĵÄÒ»²¿·Ö£¬¶ø²»ÊÇ´úÂ룩¡£
3.4 º¯ÊýÔ¼Êø
º¯ÊýºÍÎÞ·þÎñÆ÷ÔËÐÐʱӦ¸ÃÂú×ãµÄͨÓÃÐèÇó£º
º¯Êý±ØÐëÓ벻ͬʼþÀàµÄµ×²ãʵÏÖ·ÖÀ룻
¿ÉÒÔ´Ó¶à¸öʼþÔ´µ÷ÓÃFunction£»
ÿ¸öµ÷Ó÷½·¨²»ÐèÒª²»Í¬µÄº¯Êý£»
ʼþÔ´¿ÉÒÔµ÷Óöà¸öº¯Êý£»
º¯Êý¿ÉÄÜÐèÒªÒ»ÖÖ»úÖÆÀ´Óëµ×²ãƽ̨·þÎñ½øÐг־ð󶨣»
3.5 º¯Êýµ÷ÓÃÀàÐÍ
¿ÉÒÔ¸ù¾Ý²»Í¬µÄÓÃÀý´Ó²»Í¬µÄʼþÔ´µ÷Óú¯Êý£¬ÀýÈ磺
ͬ²½ÇëÇó£¨Req / Rep£©£¬ÀýÈçHTTPÇëÇó£¬gRPCµ÷ÓÃ
¿Í»§·¢³öÇëÇ󲢵ȴýÁ¢¼´ÏìÓ¦¡£
Òì²½ÏûÏ¢¶ÓÁÐÇëÇ󣨷¢²¼/¶©ÔÄ£©£¬ÀýÈçRabbitMQ£¬AWS SNS£¬MQTT£¬µç×ÓÓʼþ£¬¶ÔÏó£¨S3£©¸ü¸Ä£¬¼Æ»®Ê¼þ£¨ÈçCRON×÷Òµ£©
ÏûÏ¢·¢²¼µ½½»»»»ú²¢·Ö·¢¸ø¶©ÔÄÕߣ»
ûÓÐÑϸñµÄÏûÏ¢ÅÅÐò£¬ÒÔµ¥´Î´¦ÀíΪÁ£¶È¡£
ÏûÏ¢/¼Ç¼Á÷£ºÀýÈçKafka£¬AWS Kinesis£¬AWS DynamoDB Streams£¬Êý¾Ý¿âCDC
Ò»×éÓÐÐòµÄÏûÏ¢/¼Ç¼£¨±ØÐ밴˳Ðò´¦Àí£©£»
ͨ³££¬Ã¿¸ö·ÖƬʹÓõ¥¸ö¹¤×÷³ÌÐò£¨·ÖƬÏû·ÑÕߣ©½«Á÷·ÖƬΪ¶à¸ö·ÖÇø/·ÖƬ£»
¿ÉÒÔ´ÓÏûÏ¢£¬Êý¾Ý¿â¸üУ¨ÈÕÖ¾£©»òÎļþ£¨ÀýÈçCSV£¬Json£¬Parquet£©Éú³ÉÁ÷£»
ʼþ¿ÉÒÔÍÆË͵½º¯ÊýÔËÐÐʱ»òÓɺ¯ÊýÔËÐÐʱÀ¶¯¡£
ÅúÁ¿×÷Òµ£¬ÀýÈçETL×÷Òµ£¬·Ö²¼Ê½»úÆ÷ѧϰ£¬HPCÄ£Äâ
×÷Òµ±»µ÷¶È»òÌá½»µ½¶ÓÁУ¬²¢ÔÚÔËÐÐʱʹÓò¢ÐеĶà¸öº¯ÊýʵÀý½øÐд¦Àí£¬Ã¿¸öº¯ÊýʵÀý´¦Àí¹¤×÷¼¯µÄÒ»¸ö»ò¶à¸ö²¿·Ö£¨ÈÎÎñ£©
²»Í¬ÀàÐ͵ÄʼþÔ´°üÀ¨£º
ʼþºÍÏûÏ¢·þÎñ£¬ÀýÈ磺RabbitMQ£¬MQTT£¬SNS
´æ´¢·þÎñ£¬ÀýÈ磺COS£¬CDB£¬PGSQL£¬Cognito£¬GoogleÔÆ´æ´¢£¬
¶Ëµã·þÎñ£¬ÀýÈ磺ÎïÁªÍø£¬HTTPÍø¹Ø£¬Òƶ¯É豸£¬Alexa£¬
ÅäÖô洢¿â£¬ÀýÈ磺Git£¬CodeCommit
ʹÓÃÌØ¶¨ÓÚÓïÑÔSDKµÄÓû§Ó¦ÓóÌÐò
¼Æ»®Ê¼þ£¬¶¨ÆÚÆôÓú¯Êýµ÷Óá£
ËäȻÿ¸öʼþÌṩµÄÊý¾Ý¿ÉÄÜÔÚ²»Í¬µÄʼþÔ´Ö®¼äÓÐËù²»Í¬£¬µ«Ê¼þ½á¹¹Ó¦¸ÃÊÇͨÓõģ¬Äܹ»·â×°¹ØÓÚʼþÔ´µÄÌØ¶¨ÐÅÏ¢¡£
Îå¡¢Serverless µÄʼþÓë¹æ·¶
1. ʲôÊÇ CloudEvents£¿
1.1 ¼ò½é
CloudEvents ÊÇÒ»Öֹ淶£¬ÓÃÓÚÒÔͨÓøñʽÃèÊöʼþÊý¾Ý£¬ÒÔÌṩ¿ç·þÎñ¡¢Æ½Ì¨ºÍϵͳµÄ½»»¥ÄÜÁ¦¡£
ʼþ¸ñʽָ¶¨ÁËÈçºÎʹÓÃijЩ±àÂë¸ñʽÀ´ÐòÁл¯ CloudEvent¡£
Ö§³ÖÕâЩ±àÂëµÄ¼æÈÝ CloudEvents ʵÏÖ±ØÐë×ñÑÔÚÏàÓ¦µÄʼþ¸ñʽÖÐÖ¸¶¨µÄ±àÂë¹æÔò¡£
ËùÓÐʵÏÖ¶¼±ØÐëÖ§³Ö JSON ¸ñʽ¡£
1.2 CloudEvents ²Î¿¼:
https://github.com/cloudevents/spec
2.ʲôÊÇ Serverless µÄʼþ£¿
2.1 Event ¼ò½é
ʼþ (Event) ÎÞ´¦²»ÔÚ,È»¶øÃ¿¸öʼþÔ´²úÉúµÄʼþ¸÷²»Ïàͬ¡£
ÓÉÓÚȱ·¦Ê¼þµÄͳһÃèÊö,¶ÔÓÚʼþµÄ¿ª·¢ÕßÀ´Ëµ,ÐèÒª²»¶ÏµØÖظ´Ñ§Ï°ÈçºÎÏû·Ñ²»Í¬ÀàÐ͵Äʼþ¡£
ÀýÈçͬһ¸ö³§É̵ÄCMQ²úÉúµÄʼþºÍAPIÍø¹Ø´¥·¢Æ÷²úÉúµÄʼþÊDz»Í¬µÄ,²»Í¬³§ÉÌµÄ APIÍø¹Ø´¥·¢Æ÷²úÉúµÄʼþÒ²¿ÉÄÜÊDz»Í¬µÄ¡£
2.2 Serverless ±ØÐëµÄʼþÊôÐÔ (REQUIRED attributes)
ID£ºÊ¶±ðʼþ
Source£ºÊ¶±ð·¢ÉúʼþµÄÉÏÏÂÎÄ
Specversion£ºÊ¼þʹÓøð汾µÄcloudEvents¹æ·¶
Type£º·¢ÉúÏà¹ØÊ¼þµÄÀàÐÍÖµ
Data£ºDataµÄÊý¾ÝÄÚÈݸñʽ
Subject£ºÊ¼þ¿ª·¢ÕßÓйصÄʼþÉÏÏÂÎÄÖ÷Ìâ
Tiem£ºÊ¼þ·¢ÉúµÄʼþ
Áù¡¢Serverless ¹¤³Ì»¯µÄÄѵãÓëÌôÕ½
1.²»Êʺϳ¤Ê±¼äÔËÐÐÓ¦ÓÃ

2. ÍêÈ«ÒÀÀµÓÚµÚÈý·½·þÎñ

3. ÀäÆô¶¯Ê±¼ä

3.1 ÀäÆô¶¯Ê±¼ä¶Ô±Èͼ

3.2 ÀäÆô¶¯»ù±¾·½°¸

4.ȱ·¦µ÷ÊԺͿª·¢¹¤¾ß

5.ÓïÑÔ°æ±¾Âäºó
5.1 Serverless ¿ò¼ÜÖ§³ÖµÄÓïÑÔ°æ±¾
Python 2.7
Python 3.6
Node.js 6.10
Node.js 8.9
Golang 1.8
PHP 5.6
PHP 7.2
Java 8
¸ü¶à ¡¡
Æß¡¢Serverless ÐÐÒµÓ¦ÓÃ
1. ËûÃǶ¼ÔÚÓÃServerless¼Ü¹¹

2. Serverless ¼Ü¹¹Ó¦ÓÃ-Component
2.1 ÉçÇø×é¼þ

3. ¹ØÓÚ·ÑÓ㺳¬ÖµÃâ·Ñ¶î¶È
3.1 ·ÑÓÃ˵Ã÷
Serverless Framework ·þÎñµ±Ç°Ãâ·Ñ,
µ«¸Ã²úÆ·ËùÓõ½µÄÏà¹ØÌÚÑ¶ÔÆ²úÆ·½«°´ÕÕ×ÊԴʹÓÃÁ¿½øÐÐÊÕ·Ñ£¨×ñѸ÷²úÆ·µÄ¼Æ·Ñ¹æÔò£©¡£
ͨ¹ýÃâ·Ñ¶î¶È¹¹½¨ serverless Ó¦Óã¬Ã¿ÄêÄܽÚÊ¡ (13.3+44.432+6) ¡Á 12 = 764.784 Ôª£¬Ï൱ÓÚ** PV 3wµÄÕ¾µãÃâ·ÑÓã¬24 ¸öÔµÄÃâ·ÑÊÓÆµ»áÔ±£¬»ò 10 ´ÎÃâ·ÑµÄ»ú³¡¹ó±öÌü**¡£
3.2 ¹ØÁª²úÆ·Ãâ·Ñ¶î¶È

|