±à¼ÍƼö: |
±¾ÎÄÖ±½Ó½éÉÜÎÞ·þÎñÆ÷¼ÆË㣬Ȼºó½éÉÜÔÚ֮ǰ500´ÎcommitÀïFaaSµÄ3´óÌØÐÔ£¬Ï£Íû¿ÉÒÔΪÄúµÄѧϰ´øÀ´°ïÖú¡£
±¾ÎÄÀ´×ÔÓÚCloud Zone,ÓÉ»ðÁú¹ûÈí¼þAlice±à¼¡¢ÍƼö¡£ |
|
¹¦Äܼ´·þÎñÊÇÔÚÈÝÆ÷Ö®ÉϹ¹½¨ÎÞ·þÎñÆ÷¹¦ÄܵĿò¼Ü¡£ÔÚÈ¥Äê10Ô·ݿªÊ¼Õâ¸öÏîÄ¿£¬ÓÃÀ´ÀíÄîÂÛÖ¤£¬Àí½âÊÇ·ñ¿ÉÒÔÔÚDocker
SwarmÉÏÔËÐÐAlexa skills»òÕßLambda¹¦ÄÜ¡£ÔÚÒ»¿ªÊ¼µÄһЩ³É¹¦Ö®ºó£¬ÔÚ12Ô·ݽ«µÚÒ»¸ö°æ±¾µÄGo´úÂë·¢²¼µ½GitHubÉÏ¡£

´ÓµÚÒ»´Îcommit¿ªÊ¼£¬FaaS³ÖÐøÍÆ½ø£¬ÔÚGitHubÉÏ»ñµÃÁË2500¶à¸östar£¬Í¬Ê±»¹³öÏÖÁËÒ»¸ö¿ª·¢Õߺͺڿ͵ÄСÐÍÉçÇø£¬ÎÒÃÇ»áÔÚ¾Û»áÖз¢±íÑݽ²£¬±àд×Ô¼ºµÄºÜcoolµÄ¹¦ÄÜ£¬²¢ÇÒ¹±Ï×´úÂë¡£ÎÒ×Ô¼ºµÄÒ»´óÊÕ»ñÊÇÔÚ4Ô·ÝAustin¾Ù°ìµÄDockerconÉÏ»ñµÃÁËMoby¡®s
Cool Hacks keynote·Ö»á³¡µÄÒ»¸öϯλ¡£´ó¼ÒÏëÒª½«DockerÉè¼ÆÓÃÀ´Íê³ÉµÄÊÂÇéµÄ±ß½ç½øÒ»²½À©Õ¹¡£

ÎÞ·þÎñÆ÷ÊÇʲô£¿
¼Ü¹¹»¹ÔÚÑݽø
¡°ÎÞ·þÎñÆ÷¡±Õâ¸ö´Ê²¢²»ÊǺÜÇ¡µ±¡ª¡ªÎÒÃÇʵ¼ÊÌÖÂÛµÄÊÇʼþÇý¶¯ÏµÍ³µÄÒ»ÖÖȫмܹ¹Ä£Ê½¡£»ùÓÚ´Ë£¬ÎÞ·þÎñÆ÷¹¦Äܳ£³£±»ÓÃÀ´×÷Ϊ·þÎñ¼äµÄÁ¬½Ó£¬»òÕßÓÃÔÚʼþÇý¶¯µÄ¼Ü¹¹Àï¡£ÔÚ¹ýÈ¥£¬ÎÒÃdzÆÖ®Îª·þÎñ×ÜÏß¡£

ÎÞ·þÎñÆ÷¹¦ÄÜ
ÎÞ·þÎñÆ÷ÊÇÒ»¶ÎСÐ͵ģ¬ÎÞ¹ØÁªµÄ£¬²¢ÇÒ¿ÉÖØÓõĴúÂ룺
1.ËüÊǶÌÔݵÄ
2.Ëü²»ÊÇdaemon£¨³¤ÆÚÔËÐеģ©
3.Ëü²»·¢²¼TCP·þÎñ
4.ËüûÓÐ״̬
5.ÀûÓÃÒÑÓзþÎñ»òÕßµÚÈý·½×ÊÔ´
6.¼¸ÃëÄÚÍê³ÉÖ´ÐУ¨»ùÓÚAWSµÄLambda£©
ÎÒÃÇ»¹Ðè񻂿·Ö¿ªÎÞ·þÎñÆ÷²úÆ·ºÍIaaS¹©Ó¦ÉÌÒÔ¼°¿ªÔ´Èí¼þÏîÄ¿¡£
Ò»·½Ã棬IaaS¹©Ó¦ÉÌÌṩÎÞ·þÎñÆ÷²úÆ·£¬±ÈÈçLambda£¬Google
Cloud FunctionsÒÔ¼°Azure Functions¡£ÁíÒ»·½Ã棬ÓÐFaaSÕâÑùµÄ¿ò¼Ü£¬ÈñàÅÅÆ½Ì¨£¬±ÈÈçDocker
Swarm»òÕßKubernetes×öÖØÁ¿µÄÊÂÇé¡£

IaaS¹©Ó¦ÉÌÌṩµÄÎÞ·þÎñÆ÷²úÆ·ÊÇÍêÈ«Êܿصģ¬Òò´ËËüÌṩÁ˸߶ȵıã½ÝÐԺͻùÓÚÃë/·ÖÖӵļƷѷ½°¸¡£ÁíÒ»ÃæÊÇ£¬Óû§ÐèÒª¸ú×Ù¹©Ó¦É̵ķ¢²¼ºÍÖ§³ÖÖÜÆÚ¡£¿ªÔ´µÄFaaSÏëÒªÌṩһЩ¶àÑùÐÔÒÔ¹©´ó¼ÒÑ¡Ôñ¡£
FaaSµÄ²îÒ컯ÔÚÄÄÀ
FaaS»ùÓÚÒµ½ç±ê×¼µÄCloud Native¼¼Êõ¹¹½¨£º

FaaSÏîÄ¿µÄ²îÒ컯ÔÚÓÚ£¬ÈÎÒâÁ÷³Ì¶¼¿ÉÒÔͨ¹ýwatchdog×é¼þºÍDockerÈÝÆ÷³ÉΪÎÞ·þÎñÆ÷µÄ¹¦ÄÜ¡£ÕâÒâζ×ÅÈçÏÂÈýµã£º
Óû§¿ÉÒÔÔËÐÐÈÎÒâÓïÑÔ±àдµÄ´úÂë
¿ÉÒÔÔËÐÐÈÎÒâʱ¼ä
¿ÉÒÔÔÚÈκεط½ÔËÐÐ
תÏòÎÞ·þÎñÆ÷»¯²¢²»Òâζ×ÅÓÃÁíÒ»ÖÖ±à³ÌÓïÑÔÖØÐ´´úÂë¡£Ö»Ðè¼ÌÐøÊ¹ÓÃÒµÎñºÍÍŶÓÐèÒªµÄ¶«Î÷¼´¿É¡£
ʾÀý£º±ÈÈ磬cat»òÕßsha512sum¿ÉÒÔ×÷ΪһÖÖ²»ÐèÒª±ä¸üµÄ¹¦ÄÜ£¬Í¨¹ýstdin/stdoutͨÐÅ¡£Windows¹¦ÄÜÒ²¿ÉÒÔͨ¹ýDocker
CEÖ§³Ö¡£
ÕâÊÇFaaSºÍÆäËû¿ªÔ´ÎÞ·þÎñÆ÷¿ò¼ÜµÄÖ÷񻂿±ð£¬ËüÃÇÒÀÀµÓÚÿÖÖËùÖ§³ÖµÄÓïÑÔµÄÌØ¶¨ÔËÐÐʱ¡£
ÏÂÃæ½éÉÜDockerConÖ®ºóµÄÈý´óÖ÷ÒªÌØÐÔ£¬°üÀ¨CLIºÍ¹¦ÄÜÄ£°å£¬KubernetesÖ§³ÖÒÔ¼°Òì²½´¦Àí¡£
1. ȫеÄCLI
Ò×ÓÚ²¿Êð
ÎÒ¸øFaaSÏîÄ¿Ìí¼ÓÁËCLI£¬Èò¿Êð¹¦ÄܸüΪ¼òÒ׺ͽű¾»¯¡£ÔÚÕâ֮ǰ£¬Óû§¿ÉÒÔʹÓÃAPI
GatewayµÄUI»òÕßcurl¡£CLIÈôó¼Ò¿ÉÒÔÔÚYAMLÎļþÀﶨÒ幦ÄÜ£¬Ëæºó²¿Êðµ½API GatewayÉÏ¡£
Finnian AndersonÔÚPractical Dev/dev.toÉÏдÁËһƪ½éÉÜFaaS
CLIµÄºÜºÃµÄÎÄÕ¡£
Utility½Å±¾ºÍBrew
Óа²×°½Å±¾¿ÉÒÔÓã¬John McCabeÔÚbrewÉÏά»¤ÁËÏîÄ¿µÄrecipe¡£
»òÕß
$ curl -sL https://cli.get-faas.com/
| sudo sh |
Ä£°å
CLIµÄÄ£°åÊÇÄãΨһÐèÒªÓÃËùÑ¡µÄ±à³ÌÓïÑÔ±àдhandlerµÄµØ·½£¬CLI»áʹÓÃÄ£°å½«Æä´ò°ü³ÉDockerÈÝÆ÷¡ª¡ªFaaS»á´¦ÀíËùÐèµÄ²½Öè¡£
ÌṩÁËPythonºÍNode.jsµÄÄ£°å£¬µ«ÊÇÄã¿ÉÒÔÇáËÉ´´½¨×Ô¼ºµÄ¡£
CLIÖ§³ÖÈýÖÖ²Ù×÷£º
-action build£º´ÓÄ£°åÔÚ±¾µØ´´½¨Docker¾µÏñ
-action push£º½«Ä£°åÍÆË͵½Ö¸¶¨µÄregistry»òÕßHubÉÏ
-action deploy: ²¿ÊðFaaS¹¦ÄÜ¡£
Èç¹ûÓÐÒ»¸öµ¥½ÚµãµÄ¼¯Èº£¬ÄÇô²»ÐèÒªÍÆË;µÏñ¾Í¿ÉÒÔ²¿Êð¡£
YAML¸ñʽµÄCLIÅäÖÃÅäÖÃʾÀý£º
provider:
name: faas
gateway: http://localhost:8080
functions:
url_ping:
lang: python
handler: ./sample/url_ping
image: alexellis2/faas-urlping |
Python¹¦ÄܵÄ×î¼ò½àµÄhandler£º
def handle(req):
print(req) |
ͨ¹ýHTTPpingsURL»ñµÃ·µ»Ø´úÂëµÄʾÀý£º
import requests
def print_url(url):
try:
r = requests.get(url,timeout = 1)
print(url +" => " + str(r.status_code))
except:
print("Timed out trying to reach URL.")
def handle(req):
print_url(req) |
Èç¹ûÐèÒªÌí¼Ó¶îÍâµÄpipÄ£¿é£¬ÄÇô³ýÁËÌṩhandler.pyÎļþÖ®Í⻹ÐèÒªÌṩrequirements.txtÎļþ¡£
$ faas-cli -action
build -f ./sample.yml |
Ö®ºó¿ÉÒÔÕÒµ½Ò»¸ö³ÆÎªalexellis2/faas-urlpingµÄDocker¾µÏñ£¬¿ÉÒÔʹÓÃ-action
push½«ÆäÍÆË͵½DockerHubÉÏ£¬Ê¹ÓÃ-action deploy½«Æä²¿Êð¡£
2. KubernetesÖ§³Ö
×÷ΪһÃûDocker Captain£¬ÎÒÖ÷Òª¹Ø×¢ÓëѧϰºÍÐû´«Docker
Swarm£¬µ«ÊÇÎÒÐèÒª³ÖÐø¹Ø×¢Kubernetes¡£ÎÒ´ÓÔÚLinuxºÍMacÉϴKubernetes¿ªÊ¼£¬²¢ÇÒдÁËÈýƪ½éÉÜÐÔÎÄÕ£¬ÔÚÉçÇøÒ²Ôì³ÉÁËÒ»¶¨µÄÓ°Ïì¡£
¼Ü¹¹KubernetesµÄÖ§³Ö
µ±ÎÒÀí½âÁËÈçºÎ½«Docker SwarmµÄÀíÄîÓ³Éäµ½KubernetesÖ®ºó£¬ÎÒ¾ÍÔÚ¼¸ÌìÖ®ÄÚʵÏÖÁ˼¼ÊõÔÐÍ¡£ÎÒÑ¡ÔñÁË´´½¨Ò»¸öеÄ΢·þÎñdaemonºÍKubernetes½»»¥£¬¶ø²»ÊǸøÖ÷ÒªµÄFaaS´úÂë¼°ÒýÈë¶îÍâµÄÒÀÀµÌõ¼þ¡£
FaaSͨ¹ý±ê×¼µÄRESTful½Ó¿Ú½«µ÷Ó÷Óɵ½ÐµÄdaemonÉÏ£¬Íê³É¸÷ÖÖ²Ù×÷£¬±ÈÈ磺Deploy£¬List£¬Delete£¬InvokeºÍScale¡£
ÕâÑùµÄ·½°¸Òâζ×ÅUI£¬CLIºÍ×Ô¶¯À©Õ¹¶¼²»ÐèÒª¸Ä¶¯¾Í¿ÉÒÔʹÓá£ÐµÄ΢·þÎñÔÚÒ»¸öеÄGitHub
repository£¬ÃûΪFaaS-netesµÄÏîÄ¿Àïά»¤¡£Äã¿ÉÒÔÔÚ60ÃëÄÚÔÚÄãµÄ¼¯ÈºÀïʹÓÃÆðÀ´¡£
KubernetesÖ§³ÖµÄÑÝʾ
ÔÚÕâ¸öÑÝʾÀÎÒ½«FaaS²¿Êðµ½Ò»¸ö¿Õ¼¯ÈºÀȻºó½éÉÜÈçºÎʹÓÃUI£¬Prometheus²¢ÇÒ´¥·¢×Ô¶¯À©Õ¹¡£
ÊÓÆµ
µ«ÊǵÈһϡ¡ÆäËûÈýÖÖ¿ò¼ÜÔÚKubernetesÉÏ¿ÉÒÔÓÃô£¿
KubernetesµÄÎÞ·þÎñÆ÷¿ò¼Ü´ó¸Å·ÖΪÁ½´óÀࡪ¡ªÒ»ÖÖ¶ÔÓÚÿÖÖËùÖ§³ÖµÄ±à³ÌÓïÑÔ¶¼ÐèÒªÒÀÀµÓÚÌØ¶¨µÄÔËÐÐʱ£¬Ò»ÖÖÏñFaaSÒ»Ñù£¬¿ÉÒÔÈÃÈÎÒâÈÝÆ÷³ÉΪ¹¦ÄÜ¡£
FaaS°ó¶¨µ½Docker SwarmºÍKubernetesµÄÔÉúAPIÉÏ£¬Òâζ×ÅËüʹÓÃÄãÒѾʹÓõĵÚÒ»¼¶¶ÔÏóÀ´¹ÜÀíDeploymentºÍService¡£Ò²¾ÍÊÇ˵£¬ÕâÀïûʲô´úÂëÈ¥Àí½âÄãµÄÐÂÓ¦ÓóÌÐòµÄÂß¼¡£
Ñ¡Ôñ¿ò¼ÜʱµÄÒ»¸ö¿¼ÂÇÊÇÊÇ·ñÏëÒª¹±Ï×ÌØÐÔ»òÕßfix¡£±ÈÈ磬OpenWhisk£¬ÊÇÓÃScala±àдµÄ£¬´ó²¿·ÖÆäËû¿ò¼ÜʹÓÃGolangдµÄ¡£
Funktion
Iron Functions
OpenWhisk
Kubeless
Fission
FaaS-netes
3. Òì²½´¦Àí
ÎÞ·þÎñÆ÷¹¦ÄܵÄÒ»´óÌØÕ÷ÊÇС¶ø¿ì£¬Í¨³£ÔÚ¼¸ÃëÖ®ÄÚ¾ÍÒì²½Íê³ÉÁË¡£ÏëÒªÒì²½´¦Àí¹¦ÄܵãÀíÓÉÊÇ£º
1.ËüÊÇÒ»¸öʼþ²¢ÇÒµ÷ÓÃÕß²»ÐèÒª½á¹û
2.ËüÐèÒªºÜ³¤Ê±¼äÖ´ÐлòÕß³õʼ»¯¡ª¡ª±ÈÈ磬TensorFlow/»úÆ÷ѧϰ
3.ÔÚÅúÁ¿jobÀïÏû·Ñ´óÁ¿ÇëÇó
4.ÏëÒªÏÞÖÆËÙ¶È
ÎÒͨ¹ý·Ö²¼Ê½¶ÓÁÐ×öÁ˸öÒì²½´¦ÀíµÄÔÐÍ¡£ÊµÏÖʹÓõÄÊÇNATS StreamingÏîÄ¿£¬µ«ÊÇÎÞ·¨À©Õ¹Ê¹ÓÃKafka»òÕ߯äËû¿´ÉÏÈ¥Ïñ¶ÓÁеijéÏó·½Ê½¡£

³¢ÊÔÒì²½´úÂëµÄGist£º
Run through the FaaS/Async Gist
|