FlynnÊÇÒ»¸ö¿ªÔ´µÄPaaSƽ̨£¬¿É×Ô¶¯¹¹½¨²¿ÊðÈκÎÓ¦Óõ½DockerÈÝÆ÷¼¯ÈºÉÏÔËÐУ¬Æä¹¦ÄÜÌØÐÔÓë×é¼þÉè¼Æ´óÁ¿²Î¿¼ÁË´«Í³µÄPaaSƽ̨Heroku¡£±¾ÎÄÖ¼ÔÚ´ÓʹÓö¯»ú¡¢»ù±¾¶ÔÏó¡¢²ã´Î¼Ü¹¹¡¢¹¦ÄÜ×é¼þ¡¢»ù±¾¹¤×÷Á÷Õ⼸¸ö·½Ãæ¶ÔFlynn×ö×ÜÌåµÄ½éÉÜ¡£
ΪʲôÐèÒªFlynn
ΪÁ˱ãÓÚÀí½âFlynnµÄ×÷ÓÃÓ빦ÄÜ£¬ÈÃÎÒÃÇÏÈÀ´¿´¿´Ó¦ÓóÌÐò´Ó¿ª·¢µ½¹¹½¨ÔÙµ½²¿ÊðÔÙµ½ÔËÐзֱðÐèÒª¾ÀúµÄ¼¸¸öʵÌå״̬£º

¸ü¾ßÌåÒ»µã£¬ÒÔÒ»¸öJava³ÌÐòΪÀýÀ´ÃèÊö£º
Ô´´úÂ룺°üÀ¨*.java¡¢log4j.properties¡¢pom.xmlµÈÎļþ¡£
·¢²¼°ü£ºÔ´´úÂë±»±àÒë´ò°üºóÉú³ÉÒ»¸öJAR°ü£¬Õâ¸ö¾ÍÊÇ·¢²¼°ü¡£
²¿ÊðÅäÖ㺱ÈÈçÿ¸ö½ø³ÌµÄÆô¶¯ÃüÁî¡¢»·¾³±äÁ¿¡¢ÏµÍ³ÊôÐԵȡ£Í¨³££¬ÕâЩÅäÖûáдÔÚÒ»¸öÆô¶¯½Å±¾ÀïÃæ¡£
½ø³Ì£ºÔËÐÐJava³ÌÐòµÄʵÌå¡£Ò»¸öJava³ÌÐò¿ÉÒÔÆð¶à¸ö½ø³Ì£¬Ã¿¸ö½ø³ÌÆô¶¯²»Í¬µÄÖ÷Àà(ʵÏÖÁËmain()·½·¨µÄÀ࣬һ¸öJAR°ü¿ÉÒÔ°üº¬¶à¸öÖ÷Àࣩ¡£
ÒýÈëdockerºó£¬·¢²¼°ü±ä³É·â×°ÁËJAR°üÓëJDK»·¾³µÄ¾µÏñ£¬½ø³Ì±ä³ÉÔÚÏ໥¸ôÀëµÄÈÝÆ÷ÀïÔËÐС£µ«ÊÇ£¬´ÓÔ´´úÂëµ½¾µÏñ¡¢´Ó¾µÏñµ½ÔËÐÐÈÝÆ÷ÕâÁ½²½×ª»»¹ý³ÌÐèÒªÓû§È˹¤µÄ²Ù×÷¡£ÓÈÆäÊǺóÕßµÄת»»£¬Éæ¼°µ½¼¯Èº×ÊÔ´µ÷¶È¡¢×Ô¶¯²¿Êð¡¢ÅäÖùÜÀí¡¢ÈÝÆ÷¹Ü¿ØµÈһϵÁеĸ´ÔÓÁ÷³Ì¡£¸ü½øÒ»²½£¬ÔÚÔËÐн׶λ¹Éæ¼°À©ËõÈÝ¡¢ÈÕÖ¾²é¿´¡¢´íÎó´¦Àí¡¢ÔËÐÐ¼à¿ØµÈÔËάÐèÇó£¬Èç¹ûÈ«²¿È˹¤²Ù×÷½«ºÄ·Ñ¾Þ´óµÄ¹¤×÷Á¿¡£
ÕâʱºòÀàËÆFlynnÕâÑùµÄPaaS³ö³¡ÁË£¬»ùÓÚDockerÖ®ÉϽøÒ»²½·â×°ÁËÕû¸ö¹¹½¨¡¢²¿Êð¡¢ÔËÐй¤×÷Á÷£¬Ê¹µÃÓû§Ö»Ðè¼òµ¥µØÌá½»´úÂë¼´¿ÉÍê³É¿ª·¢µ½ÔËÐеĿìËÙת»»£º
¿ª·¢µ½¹¹½¨£ºÓû§Í¨¹ýGitÌá½»Ô´´úÂ룬ÓÉFlynn×Ô¶¯¹¹½¨¾µÏñ£¬²¢Ìṩ°æ±¾µÄ¹ÜÀí¡ª¡ªÓû§¿ÉÒÔ´´½¨Ð°汾(ÌύдúÂë»òÐ޸IJ¿ÊðÅäÖÃ)¡¢»Ø¹öÀϰ汾µÈ¡£
²¿Êðµ½ÔËÐУºFlynn×Ô¶¯Ñ¡ÔñÔËÐлúÆ÷£¬ÎªÃ¿¸ö½ø³Ì¸±±¾²¿ÊðÆô¶¯µ¥¶ÀµÄÈÝÆ÷£¬²¢Ìṩ½ø³ÌµÄ¹ÜÀí¡ª¡ªÓû§¿ÉÒÔ×öÀ©ËõÈÝ¡¢²é¿´ÈÕÖ¾¡¢¼à¿Ø×´Ì¬µÈ¡£
FlynnµÄ»ù±¾¶ÔÏó
ÏÂÃæÎÒÃÇÀ´¿´¿´·¢²¼°ü¡¢²¿ÊðÅäÖᢽø³ÌÕâÈý¸öʵÌåÔÚFlynnÖÐÊÇÈçºÎ³éÏóµÄ¡£ÈçÏÂͼËùʾÊÇÆä»ù±¾¶ÔÏóµÄ¹ØÏµÃèÊö£º

App£º±íʾһ¸öÓ¦Óã¬ËùÓÐÆäËû¶ÔÏó¶¼ÊÇÎ§ÈÆApp¶øÕ¹¿ª¡£
Artifact£º±íʾӦÓõķ¢²¼°ü£¬Êµ¼ÊÉ϶ÔÓ¦Ò»¸öDocker¾µÏñ¡£
Process£º±íʾӦÓõĽø³Ì¡£Í¨¹ýÒ»¸ö¾µÏñ¿ÉÒÔÆô¶¯¶à¸ö²»Í¬µÄ½ø³Ì£¬Ã¿¸ö½ø³ÌÔËÐÐÔÚ×Ô¼ºµ¥¶ÀµÄÈÝÆ÷Àï¡£
Release£ºÊÇÓ¦Ó÷¢²¼Ì¬µÄ³éÏó±íʾ¡£ËüÔÚArtifactµÄ»ù´¡ÉÏÔö¼ÓÁËһЩ²»¿É±ä(immutable)µÄ¾²Ì¬ÅäÖ㬱ÈÈçÿ¸ö½ø³ÌµÄÆô¶¯ÃüÁîÐС¢»·¾³±äÁ¿¡¢°ó¶¨¶Ë¿Ú¡¢µÈ¡£ÒªÐÞ¸ÄÕâЩÅäÖã¬ÐèÒªÉú³ÉÒ»¸öÐÂRelease¡£ReleaseÕâÖÖ²»¿É±äÐÔÊÇΪÁË·½±ã×öRollback£¬¼´Ó¦ÓÃËæÊ±¿ÉÒÔ»ØÍ˵½Ö®Ç°µÄRelease¡£
Formation: ÊÇÓ¦ÓÃÔËÐÐ̬µÄ³éÏó±íʾ¡£ËüÔÚReleaseµÄ»ù´¡ÉÏÔö¼ÓÁ˿ɱä(mutable)µÄ¶¯Ì¬ÅäÖ㬼´Ã¿¸ö½ø³ÌµÄ¸±±¾(replica)¸öÊý¡£
Job: Êǽø³Ì¸±±¾µÄ³éÏó±íʾ£¬Ã¿¸öJob¶ÔÓ¦Ò»¸öÔËÐÐÈÝÆ÷¡£Òò´Ë£¬ÔÚºóÎÄÖпÉÒÔ¿´µ½£¬JobÊÇ×ÊÔ´µ÷¶ÈµÄ»ù±¾µ¥Ôª¡£
FlynnµÄ²ã´Î¼Ü¹¹
ÈçÏÂͼËùʾ£¬FlynnµÄ¼Ü¹¹×Ô϶øÉÏ·ÖΪÁ½¸ö²ã¼¶¡ª¡ªLayer 0ºÍLayer 1¡£¼òµ¥µØÀí½â£¬¿ÉÒÔÈÏΪLayer
1¸ºÔð½ÓÊÜÓû§ÇëÇ󣬷â×°³ÉÓ¦ÓõÄÔËÐÐÖ¸ÁÔÙÓÉLayer 0½â¾öÔÚÄÄÀïÔËÐС¢ÒÔʲô·½Ê½ÔËÐеÄÎÊÌâ¡£¾ßÌåÒ»µã½²£¬Layer
0ÃæÏòµÄ¶ÔÏóÊÇFormation£¬¸ºÔ𽫵ײãµÄ¼¯Èº×ÊÔ´·â×°³É¿ÉÖ´ÐÐFormationµÄһ̨Ö÷»ú£»Layer
1ÃæÏòµÄ¶ÔÏóÊÇApp£¬¸ºÔð½«App´ÓÔ´´úÂë¹¹½¨³ÉArtifact£¬½ø¶ø·â×°³ÉFormationÌá½»¸øLayer
0È¥Ö´ÐС£
ÕâÖÖ·Ö¹¤Ã÷È·µÄ²ã´Î»®·Ö£¬Ê¹Õû¸öϵͳ·Ç³£Áé»î£¬Ï໥ËÉñîºÏ£¬±ãÓÚÈÎÒâ×é¼þµÄÌæ»»(±ÈÈ磬ÉõÖÁ¿ÉÒÔ°ÑLayer
0Ìæ»»³É²»ÓÃÈÝÆ÷È¥Ö´ÐÐFormation)¡£

FlynnµÄ¹¦ÄÜ×é¼þ
ÏÂÃæ×ܽáÒ»ÏÂ×é³ÉÁ½¸ö²ã¼¶µÄ¸÷¸ö×é¼þ¼°Æä¹¦ÄÜ(ËùÓÐ×é¼þ×ÔÉí¶¼¿ÉÒÔÔËÐÐÔÚÈÝÆ÷Àï)£º
Layer 0
Scheduler: ×ÊÔ´µ÷¶ÈÆ÷£¬¶¨ÆÚ´ÓLayer 1»ñÈ¡FormationµÄ¸üУ¬ÔÙ¸ù¾Ýÿ¸öFormationµÄ²¿ÊðÅäÖÃÉú³ÉÒ»¸ö¸öµÄJob£¬×îºó´Ó¼¯ÈºÖÐÑ¡ÔñºÏÊʵĻúÆ÷È¥ÔËÐÐÕâЩJob¡£
Host Service: ÔËÐÐÔÚ¼¯ÈºÃ¿Ì¨»úÆ÷ÉϵÄagent£¬¸ºÔð¹Ü¿ØÔËÐÐÔÚ±¾»úµÄÈÝÆ÷£¬²¢ÊÕ¼¯ÔËÐÐ״̬ÐÅÏ¢¡£
Host Leader£ºÒ»¸öÌØÊâµÄHost Service£¬×öΪ"cluster leader"£¬¸ºÔðά»¤Õû¸ö¼¯ÈºµÄ״̬ÐÅÏ¢(±ÈÈçÓÐÄÄЩ»úÆ÷¡¢Ã¿Ì¨»úÆ÷ÉÏÔËÐеÄJobµÈ)£¬²¢Ìṩ¸øSchedulerÓÃÓÚ×ÊÔ´µ÷¶È¡£
Discoverd£º»ùÓÚetcdµÄ·þÎñ·¢ÏÖÄ£¿é£¬ÌṩÈÝÆ÷¼äµÄ·¢ÏÖ»úÖÆ¡£Êµ¼ÊÉÏ£¬Flynn×ÔÉíµÄ×é¼þ¼äͨѶҲÊÇͨ¹ýDiscoverdÀ´Ï໥·¢Ïֵġ£
Layer 1
CLI£ºÌṩ¸øÓû§Ê¹ÓõÄÃüÁîÐй¤¾ß¡£
Controller£ºÎªFlynnϵͳµÄÈë¿Ú£¬·â×°Á˺ËÐĶÔÏó(±ÈÈçapp/artifact/release/job)µÄÔöɾ¸Ä²é²Ù×÷£¬ÒÔRESTFul½Ó¿Ú·½Ê½Ìṩ¸øÍⲿ¿Í»§ºÍÄÚ²¿×é¼þµ÷Óá£Ëüά»¤µÄREST¶ÔÏ󽫳־û¯µ½postgreÊý¾Ý¿â¡£Layer
0µÄScheduler¾ÍÊÇͨ¹ýControllerµÄ½Ó¿ÚÀ´»ñÈ¡Formation¸üеġ£
GitReceiver£º½ÓÊÜÓû§git pushÔ´´úÂëµÄSSH·þÎñÆ÷¡£½ÓÊܵ½git pushºó½«´¥·¢Receiver¡£
Receiver£º»ùÓÚbuildpack»úÖÆ£¬ÀûÓÃSlugBuilder´ÓÔ´´úÂë°ü¹¹½¨slug°ü¡£buildpackºÍslug¶¼ÊÇ´ÓHeroku½è¼ø¹ýÀ´µÄ¸ÅÄî¡£¼òµ¥µØÀí½â£¬buildpackÊÇÒ»×éÓÃÓÚ¹¹½¨Ô´´úÂëµÄ½Å±¾£¬buildpack¿ÉÒÔ¶àÖÖ¶àÑù£¬Ã¿¸öbuildpack¿É¹¹½¨Ä³ÖÖÀàÐ͵ÄÔ´´úÂ룬ÕâÖÖÀàÐÍ¿ÉÒÔÊDz»Í¬µÄÓïÑÔ(±ÈÈçJava¡¢PHP)¡¢²»Í¬µÄ¹¹½¨·½Ê½(±ÈÈçmaven¡¢gradle)£»¶øslugÔòÊÇbuildpack¹¹½¨Éú³ÉµÄ²¿Êð°ü£¬°üº¬Á˱àÒëÊä³öÎļþ¡¢ÒÀÀµ¿âÎļþµÈÔËÐл·¾³¡£
BlobStore: HTTPÎļþ·þÎñÆ÷£¬ÓÃÓÚÉÏ´«/ÏÂÔØslug°ü¡£
SlugBuilder£º½ÓÊÜÔ´´úÂë°ü£¬»ùÓÚijÖÖbuildpack¹¹½¨Éú³Éslug°ü¡£Ñ¡ÔñÄÄÒ»ÖÖbuildpack¿ÉÒÔÏÔʽµØÖ¸¶¨£¬Ò²¿ÉÒÔÓÉSlugBuilder¸ù¾ÝÔ´Îļþ×Ô¶¯Æ¥Åä¡£
SlugRunner£ºÔËÐÐslug°ü£¬»á´ÓBlobStoreÏÂÔØÓ¦ÓõÄslug°ü¡£
FlynnµÄ¹¤×÷Á÷
ÏÂÃæÍ¨¹ýÒ»¸öÀý×ÓÀ´Õ¹Ê¾Flynn¸÷¸ö×é¼þµÄ¹¤×÷Á÷¡£Ê¹ÓÃFlynnÀ´¹¹½¨²¿ÊðÓ¦ÓÃ×î»ù±¾µÄÁ÷³ÌÊÇÒÔÏÂÈý²½£º
Óû§´´½¨app£º
[plain] view plain copy

Óû§Ìá½»app´úÂ룺
git push flynn master

Óû§À©ÈÝappµÄ½ø³Ì£º
flynn scale web=2

¶Ô±ÈKubernetes
KubernetesÊÇGoogle¿ªÔ´µÄDockerÈÝÆ÷¼¯Èº¹ÜÀíϵͳ£¬ÎªÈÝÆ÷»¯µÄÓ¦ÓÃÌṩ×ÊÔ´µ÷¶È¡¢²¿ÊðÔËÐС¢·þÎñ·¢ÏÖ¡¢À©ÈÝËõÈݵÈÕûÒ»Ì×¹¦ÄÜ£¬¸üÏêϸµØ½éÉÜÇë²Î¿¼×÷ÕßµÄÁíһƪÎÄÕ¡¶Kubernetes³õ̽£ºÔÀí¼°Êµ¼ùÓ¦Óá·¡£
ÔÚÓ¦ÓõijéÏóÉÏ£¬FlynnÓëKubernetesÓб¾ÖʵÄÇø±ð£ºFlynnµÄÓ¦ÓùÜÀíµ¥ÔªÊÇApp£¬Ö»¶ÔÓ¦Ò»¸öDocker¾µÏñ£¬µ«¿ÉÒÔÓÉÕâ¸ö¾µÏñÀ´Æô¶¯¶à¸ö½ø³Ì£¬²¢ÇÒÿ¸ö½ø³Ì¿ÉÒÔµ¥¶ÀÀ©ËõÈÝ£»¶øKubernetesµÄÓ¦ÓùÜÀíµ¥ÔªÊÇPod£¬¿É¶ÔÓ¦¶à¸ö²»Í¬µÄDocker¾µÏñ£¬²¢ÇÒPodÄڵĸ÷¸öÈÝÆ÷±£Ö¤»áÔËÐÐÔÚÏàͬµÄ»úÆ÷ÉÏ£¬Õû¸öPod×÷ΪÀ©ËõÈݵĻù±¾µ¥Î»¡£
ÁíÍâÒ»¸ö¸ù±¾µÄÇø±ðÊÇKubernetes²»Ìṩ¾µÏñ¹¹½¨Óë°æ±¾¹ÜÀíµÄ¹¦ÄÜ¡£Òò´Ë£¬KubernetesÖ»ÄÜ¿´³ÉÊÇÃæÏòÈÝÆ÷¶ø²»ÊÇÃæÏòÓ¦ÓõÄϵͳ¡£µ±È»£¬ÎÒÃÇ¿ÉÒÔÔÚKubernetesÖ®ÉÏÀ©³äÕâЩ¹¦ÄÜ¡£
¶Ô±ÈDeis
ÓëFlynnÀàËÆ£¬DeisÒ²ÊÇÊܵ½HerokuµÄÆô·¢£¬»ùÓÚDockerÖ®ÉϹ¹½¨µÄPaaSƽ̨¡£Òò´Ë£¬´Ó¹¦ÄÜÌØÐÔµ½Ó¦ÓóéÏó£¬Á½ÕßÊÇ´óͬСÒì¡£
ÖÁÓÚÁ½ÕߵIJîÒ죬Á˽ⲻÊǺܶ࣬ÕâÀïÌáÈýµã£ºµÚÒ»£¬DeisÊÇÓÃPython¿ª·¢µÄ£¬¶øFlynnÊÇGo£»µÚ¶þ£¬DeisÒÀÀµÓÚCoreOS£¬¶øFlynnÒòΪËùÓÐ×é¼þ¶¼¿ÉÔËÐÐÔÚÈÝÆ÷ÀûÓÐOSµÄÒÀÀµ£»µÚÈý£¬DeisÔÚ¹¹½¨½×¶Î£¬³ýÁËbuildpack·½Ê½¹¹½¨Í⣬»¹Ö§³ÖDockerfileÓë¾µÏñÖ±½ÓÉÏ´«Á½ÖÖ·½Ê½£¬Ïà¶ÔFlynn¸üΪÁé»î¡£ |