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

1Ôª 10Ôª 50Ôª





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



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
ÔÆÔ­ÉúÓ¦ÓõÄ12ÒªËØ
 
×÷ÕßêdzƣºHelloWorld°áÔ˹¤
  1687  次浏览      27
 2021-1-7
 
±à¼­ÍƼö:
±¾ÆªÎÄÕÂÖ÷Òª½éÉÜÊ®¶þÒªËØ´ÓÀíÂÛÉÏ×ܽáÔÆÔ­ÉúµÄÌØµã£¬ÔÚʵ¼Ê²Ù×÷ÖдÓ×Ô¼º¹«Ë¾µÄʵ¼Ê³ö·¢½øÐм¼ÊõÑ¡ÐÍ£¬Ï£Íû¶ÔÄúµÄѧϰÓÐËù°ïÖú¡£
±¾ÎÄÀ´×ÔÓÚCSDN£¬ÓÉAlice±à¼­¡¢ÍƼö¡£

ÔÆÔ­Éú£¨Cloud Native£©ÊÇÓÉ Pivotal µÄMatt StineÔÚ2013ÄêÌá³öµÄÒ»¸ö¸ÅÄÊÇËû¶àÄêµÄ¼Ü¹¹ºÍ×Éѯ×ܽá³öÀ´µÄÒ»¸ö˼ÏëµÄ¼¯ºÏ¡£

ÔÚÔÆµÄʱ´ú£¬Ó¦Óûá¸ü¶àµÄÇ¨ÒÆµ½Ôƶˣ¬»ùÓÚÔÆµÄ¼Ü¹¹Éè¼ÆºÍ¿ª·¢Ä£Ê½ÐèÒªÒ»Ì×ȫеÄÀíÄîÈ¥³ÐÔØ£¬ÓÚÊÇÔÆÔ­Éú˼ÏëÓ¦Ô˶øÉú£¬¶øÕë¶ÔÔÆÔ­ÉúÓ¦Óÿª·¢µÄ×î¼Ñʵ¼ùÔ­Ôò£¬12-FactorÍÑÓ±¶ø³ö£¬Í¬Ê±Ò²´øÀ´ÁËеĽâ¶Á¡£

12-Factor£¬ÊÇÓÉHeroku´´Ê¼ÈËAdamWigginsÊ×´ÎÌá³ö²¢¿ªÔ´£¬²¢ÓÉÖڶྭÑé·á¸»µÄ¿ª·¢Õß¹²Í¬ÍêÉÆ£¬Õâ×ÛºÏÁËËûÃǹØÓÚSaaSÓ¦Óü¸ºõËùÓеľ­ÑéºÍÖǻۣ¬ÊÇ¿ª·¢´ËÀàÓ¦ÓõÄÀíÏëʵ¼ù±ê×¼¡£

12-Factor È«³Æ½Ð TheTwelve-Factor App£¬Ëü¶¨ÒåÁËÒ»¸öÓÅÑŵĻ¥ÁªÍøÓ¦ÓÃÔÚÉè¼Æ¹ý³ÌÖУ¬ÐèÒª×ñÑ­µÄһЩ»ù±¾Ô­Ôò£¬ºÍ Cloud-Native ÓÐÒìÇúͬ¹¤Ö®´¦¡£

ÄǾßÌåÓÐÄÄÊ®¶þÔ­ÔòÁË£¬¼ûÏÂͼ£º

I. »ù×¼´úÂë

Ò»·Ý»ù×¼´úÂ루Codebase£©£¬¶à·Ý²¿Êð£¨deploy£©

12-FactorÓ¦ÓÃ(ÒëÕß×¢£ºÓ¦¸ÃÊÇ˵һ¸öʹÓñ¾ÎĸÅÄîÀ´Éè¼ÆµÄÓ¦Óã¬ÏÂͬ)ͨ³£»áʹÓð汾¿ØÖÆÏµÍ³¼ÓÒÔ¹ÜÀí£¬ÈçGit, Mercurial, Subversion¡£Ò»·ÝÓÃÀ´¸ú×Ù´úÂëËùÓÐÐÞ¶©°æ±¾µÄÊý¾Ý¿â±»³Æ×÷ ´úÂë¿â£¨code repository, code repo, repo£©¡£

ÔÚÀàËÆ SVN ÕâÑùµÄ¼¯ÖÐʽ°æ±¾¿ØÖÆÏµÍ³ÖУ¬»ù×¼´úÂë ¾ÍÊÇÖ¸¿ØÖÆÏµÍ³ÖеÄÕâÒ»·Ý´úÂë¿â£»¶øÔÚ Git ÄÇÑùµÄ·Ö²¼Ê½°æ±¾¿ØÖÆÏµÍ³ÖУ¬»ù×¼´úÂë ÔòÊÇÖ¸×îÉÏÓεÄÄÇ·Ý´úÂë¿â¡£

Ò»·Ý´úÂë¿â¶ÔÓ¦¶à·Ý²¿Êð

»ù×¼´úÂëºÍÓ¦ÓÃÖ®¼ä×ÜÊDZ£³ÖÒ»Ò»¶ÔÓ¦µÄ¹ØÏµ£º

l Ò»µ©Óжà¸ö»ù×¼´úÂ룬¾Í²»ÄܳÆÎªÒ»¸öÓ¦Ó㬶øÊÇÒ»¸ö·Ö²¼Ê½ÏµÍ³¡£·Ö²¼Ê½ÏµÍ³ÖеÄÿһ¸ö×é¼þ¶¼ÊÇÒ»¸öÓ¦Óã¬Ã¿Ò»¸öÓ¦ÓÿÉÒÔ·Ö±ðʹÓà 12-Factor ½øÐпª·¢¡£

l ¶à¸öÓ¦Óù²ÏíÒ»·Ý»ù×¼´úÂëÊÇÓÐã£ÓÚ 12-Factor Ô­ÔòµÄ¡£½â¾ö·½°¸Êǽ«¹²ÏíµÄ´úÂë²ð·ÖΪ¶ÀÁ¢µÄÀà¿â£¬È»ºóʹÓà ÒÀÀµ¹ÜÀí ²ßÂÔÈ¥¼ÓÔØËüÃÇ¡£

¾¡¹Üÿ¸öÓ¦ÓÃÖ»¶ÔÓ¦Ò»·Ý»ù×¼´úÂ룬µ«¿ÉÒÔͬʱ´æÔÚ¶à·Ý²¿Êð¡£Ã¿·Ý ²¿Êð Ï൱ÓÚÔËÐÐÁËÒ»¸öÓ¦ÓõÄʵÀý¡£Í¨³£»áÓÐÒ»¸öÉú²ú»·¾³£¬Ò»¸ö»ò¶à¸öÔ¤·¢²¼»·¾³¡£´ËÍ⣬ÿ¸ö¿ª·¢ÈËÔ±¶¼»áÔÚ×Ô¼º±¾µØ»·¾³ÔËÐÐÒ»¸öÓ¦ÓÃʵÀý£¬ÕâЩ¶¼Ï൱ÓÚÒ»·Ý²¿Êð¡£

ËùÓв¿ÊðµÄ»ù×¼´úÂëÏàͬ£¬µ«Ã¿·Ý²¿Êð¿ÉÒÔʹÓÃÆä²»Í¬µÄ°æ±¾¡£±ÈÈ磬¿ª·¢ÈËÔ±¿ÉÄÜÓÐһЩÌá½»»¹Ã»ÓÐͬ²½ÖÁÔ¤·¢²¼»·¾³£»Ô¤·¢²¼»·¾³Ò²ÓÐһЩÌύûÓÐͬ²½ÖÁÉú²ú»·¾³¡£µ«ËüÃǶ¼¹²ÏíÒ»·Ý»ù×¼´úÂ룬ÎÒÃǾÍÈÏΪËüÃÇÖ»ÊÇÏàͬӦÓõIJ»Í¬²¿Êð¶øÒÑ¡£

II. ÒÀÀµ

ÏÔʽÉùÃ÷ÒÀÀµ¹ØÏµ£¨ dependency £©

´ó¶àÊý±à³ÌÓïÑÔ¶¼»áÌṩһ¸ö´ò°üϵͳ£¬ÓÃÀ´Îª¸÷¸öÀà¿âÌṩ´ò°ü·þÎñ£¬¾ÍÏñ Perl µÄ CPAN »òÊÇ Ruby µÄRubygems ¡£Í¨¹ý´ò°üϵͳ°²×°µÄÀà¿â¿ÉÒÔÊÇϵͳ¼¶µÄ£¨³ÆÖ®Îª ¡°site packages¡±£©£¬»ò½ö¹©Ä³¸öÓ¦ÓóÌÐòʹÓ㬲¿ÊðÔÚÏàÓ¦µÄĿ¼ÖУ¨³ÆÖ®Îª ¡°vendoring¡± »ò ¡°bunding¡±£©¡£

12-Factor¹æÔòϵÄÓ¦ÓóÌÐò²»»áÒþʽÒÀÀµÏµÍ³¼¶µÄÀà¿â¡£ ËüÒ»¶¨Í¨¹ý ÒÀÀµÇåµ¥ £¬È·ÇеØÉùÃ÷ËùÓÐÒÀÀµÏî¡£´ËÍ⣬ÔÚÔËÐйý³ÌÖÐͨ¹ý ÒÀÀµ¸ôÀë ¹¤¾ßÀ´È·±£³ÌÐò²»»áµ÷ÓÃϵͳÖдæÔÚµ«Çåµ¥ÖÐδÉùÃ÷µÄÒÀÀµÏî¡£ÕâÒ»×ö·¨»áͳһӦÓõ½Éú²úºÍ¿ª·¢»·¾³¡£

ÀýÈ磬 Ruby µÄ Bundler ʹÓà Gemfile ×÷ΪÒÀÀµÏîÉùÃ÷Çåµ¥£¬Ê¹Óà bundleexec À´½øÐÐÒÀÀµ¸ôÀë¡£Python ÖÐÔò¿É·Ö±ðʹÓÃÁ½ÖÖ¹¤¾ß ¨C Pip ÓÃ×÷ÒÀÀµÉùÃ÷£¬ Virtualenv ÓÃ×÷ÒÀÀµ¸ôÀë¡£ÉõÖÁ C ÓïÑÔÒ²ÓÐÀàËÆ¹¤¾ß£¬ Autoconf ÓÃ×÷ÒÀÀµÉùÃ÷£¬¾²Ì¬Á´½Ó¿âÓÃ×÷ÒÀÀµ¸ôÀë¡£ÎÞÂÛÓÃʲô¹¤¾ß£¬ÒÀÀµÉùÃ÷ºÍÒÀÀµ¸ôÀë±ØÐëÒ»ÆðʹÓ㬷ñÔòÎÞ·¨Âú×ã 12-Factor ¹æ·¶¡£

ÏÔʽÉùÃ÷ÒÀÀµµÄÓŵãÖ®Ò»ÊÇΪнø¿ª·¢Õß¼ò»¯ÁË»·¾³ÅäÖÃÁ÷³Ì¡£Ð½ø¿ª·¢Õß¿ÉÒÔ¼ì³öÓ¦ÓóÌÐòµÄ»ù×¼´úÂ룬°²×°±à³ÌÓïÑÔ»·¾³ºÍËü¶ÔÓ¦µÄÒÀÀµ¹ÜÀí¹¤¾ß£¬Ö»Ðèͨ¹ýÒ»¸ö ¹¹½¨ÃüÁî À´°²×°ËùÓеÄÒÀÀµÏ¼´¿É¿ªÊ¼¹¤×÷¡£ÀýÈ磬Ruby/Bundler ÏÂʹÓà bundle install£¬¶ø Clojure/Leiningen ÔòÊÇ lein deps¡£

12-Factor Ó¦ÓÃͬÑù²»»áÒþʽÒÀÀµÄ³Ð©ÏµÍ³¹¤¾ß£¬Èç ImageMagick »òÊÇcurl¡£¼´Ê¹ÕâЩ¹¤¾ß´æÔÚÓÚ¼¸ºõËùÓÐϵͳ£¬µ«ÖÕ¾¿ÎÞ·¨±£Ö¤ËùÓÐδÀ´µÄϵͳ¶¼ÄÜÖ§³ÖÓ¦ÓÃ˳ÀûÔËÐУ¬»òÊÇÄܹ»ºÍÓ¦ÓüæÈÝ¡£Èç¹ûÓ¦ÓñØÐëʹÓõ½Ä³Ð©ÏµÍ³¹¤¾ß£¬ÄÇôÕâЩ¹¤¾ßÓ¦¸Ã±»°üº¬ÔÚÓ¦ÓÃÖ®ÖС£

III. ÅäÖÃ

ÔÚ»·¾³Öд洢ÅäÖÃ

ͨ³££¬Ó¦ÓÃµÄ ÅäÖà ÔÚ²»Í¬ ²¿Êð (Ô¤·¢²¼¡¢Éú²ú»·¾³¡¢¿ª·¢»·¾³µÈµÈ)¼ä»áÓкܴó²îÒì¡£ÕâÆäÖаüÀ¨£º

l Êý¾Ý¿â£¬Memcached£¬ÒÔ¼°ÆäËû ºó¶Ë·þÎñ µÄÅäÖÃ

l µÚÈý·½·þÎñµÄÖ¤Ê飬ÈçAmazon S3¡¢Twitter µÈ

l ÿ·Ý²¿ÊðÌØÓеÄÅäÖã¬ÈçÓòÃûµÈ

ÓÐЩӦÓÃÔÚ´úÂëÖÐʹÓó£Á¿±£´æÅäÖã¬ÕâÓë12-Factor ËùÒªÇóµÄ´úÂëºÍÅäÖÃÑϸñ·ÖÀëÏÔÈ»´óÏྶͥ¡£ÅäÖÃÎļþÔÚ¸÷²¿Êð¼ä´æÔÚ´ó·ù²îÒ죬´úÂëÈ´ÍêȫһÖ¡£

ÅжÏÒ»¸öÓ¦ÓÃÊÇ·ñÕýÈ·µØ½«ÅäÖÃÅųýÔÚ´úÂëÖ®Í⣬һ¸ö¼òµ¥µÄ·½·¨ÊÇ¿´¸ÃÓ¦ÓõĻù×¼´úÂëÊÇ·ñ¿ÉÒÔÁ¢¿Ì¿ªÔ´£¬¶ø²»Óõ£ÐĻᱩ¶ÈκÎÃô¸ÐµÄÐÅÏ¢¡£

ÐèÒªÖ¸³öµÄÊÇ£¬ÕâÀﶨÒåµÄ¡°ÅäÖá±²¢²»°üÀ¨Ó¦ÓõÄÄÚ²¿ÅäÖ㬱ÈÈç Rails µÄ config/routes.rb£¬»òÊÇʹÓà Spring ʱ ´úÂëÄ£¿é¼äµÄÒÀÀµ×¢Èë¹ØÏµ ¡£ÕâÀàÅäÖÃÔÚ²»Í¬²¿Êð¼ä²»´æÔÚ²îÒ죬ËùÒÔÓ¦¸ÃдÈë´úÂë¡£

ÁíÍâÒ»¸ö½â¾ö·½·¨ÊÇʹÓÃÅäÖÃÎļþ£¬µ«²»°ÑËüÃÇÄÉÈë°æ±¾¿ØÖÆÏµÍ³£¬¾ÍÏñ Rails µÄconfig/database.yml ¡£ÕâÏà¶ÔÓÚÔÚ´úÂëÖÐʹÓó£Á¿ÒѾ­Êdz¤×ã½ø²½£¬µ«ÈÔÈ»ÓÐȱµã£º×ÜÊǻ᲻СÐĽ«ÅäÖÃÎļþÇ©ÈëÁË´úÂë¿â£»ÅäÖÃÎļþµÄ¿ÉÄÜ»á·ÖÉ¢ÔÚ²»Í¬µÄĿ¼£¬²¢ÓÐ×Ų»Í¬µÄ¸ñʽ£¬ÕâÈÃÕÒ³öÒ»¸öµØ·½À´Í³Ò»¹ÜÀíËùÓÐÅäÖñäµÄ²»Ì«ÏÖʵ¡£¸üÔãµÄÊÇ£¬ÕâЩ¸ñʽͨ³£ÊÇÓïÑÔ»ò¿ò¼ÜÌØ¶¨µÄ¡£

12-FactorÍÆ¼ö½«Ó¦ÓõÄÅäÖô洢ÓÚ »·¾³±äÁ¿ ÖУ¨ env vars, env £©¡£»·¾³±äÁ¿¿ÉÒԷdz£·½±ãµØÔÚ²»Í¬µÄ²¿Êð¼ä×öÐ޸ģ¬È´²»¶¯Ò»ÐдúÂ룻ÓëÅäÖÃÎļþ²»Í¬£¬²»Ð¡ÐİÑËüÃÇÇ©Èë´úÂë¿âµÄ¸ÅÂÊ΢ºõÆä΢£»ÓëһЩ´«Í³µÄ½â¾öÅäÖÃÎÊÌâµÄ»úÖÆ£¨±ÈÈç Java µÄÊôÐÔÅäÖÃÎļþ£©Ïà±È£¬»·¾³±äÁ¿ÓëÓïÑÔºÍϵͳÎ޹ء£

ÅäÖùÜÀíµÄÁíÒ»¸ö·½ÃæÊÇ·Ö×é¡£ÓÐʱӦÓûὫÅäÖð´ÕÕÌØ¶¨²¿Êð½øÐзÖ×飨»ò½Ð×ö¡°»·¾³¡±£©£¬ÀýÈçRailsÖеÄdevelopment,test, ºÍ production »·¾³¡£ÕâÖÖ·½·¨ÎÞ·¨ÇáÒ×À©Õ¹£º¸ü¶à²¿ÊðÒâζןü¶àÐµĻ·¾³£¬ÀýÈç staging »ò qa¡£Ëæ×ÅÏîÄ¿µÄ²»¶ÏÉîÈ룬¿ª·¢ÈËÔ±¿ÉÄÜ»¹»áÌí¼ÓËûÃÇ×Ô¼ºµÄ»·¾³£¬±ÈÈç joes-staging £¬Õ⽫µ¼Ö¸÷ÖÖÅäÖÃ×éºÏµÄ¼¤Ôö£¬´Ó¶ø¸ø¹ÜÀí²¿ÊðÔö¼ÓÁ˺ܶ಻ȷ¶¨ÒòËØ¡£

12-Factor Ó¦ÓÃÖУ¬»·¾³±äÁ¿µÄÁ£¶ÈÒª×㹻С£¬ÇÒÏà¶Ô¶ÀÁ¢¡£ËüÃÇÓÀÔ¶Ò²²»»á×éºÏ³ÉÒ»¸öËùνµÄ¡°»·¾³¡±£¬¶øÊǶÀÁ¢´æÔÚÓÚÿ¸ö²¿ÊðÖ®ÖС£µ±Ó¦ÓóÌÐò²»¶ÏÀ©Õ¹£¬ÐèÒª¸ü¶àÖÖÀàµÄ²¿Êðʱ£¬ÕâÖÖÅäÖùÜÀí·½Ê½Äܹ»×öµ½Æ½»¬¹ý¶É¡£

IV. ºó¶Ë·þÎñ

°Ñºó¶Ë·þÎñ(backing services)µ±×÷¸½¼Ó×ÊÔ´

ºó¶Ë·þÎñÊÇÖ¸³ÌÐòÔËÐÐËùÐèÒªµÄͨ¹ýÍøÂçµ÷Óõĸ÷ÖÖ·þÎñ£¬ÈçÊý¾Ý¿â£¨MySQL£¬CouchDB£©£¬ÏûÏ¢/¶ÓÁÐϵͳ£¨RabbitMQ£¬Beanstalkd£©£¬SMTP Óʼþ·¢ËÍ·þÎñ£¨Postfix£©£¬ÒÔ¼°»º´æÏµÍ³£¨Memcached£©¡£

ÀàËÆÊý¾Ý¿âµÄºó¶Ë·þÎñ£¬Í¨³£Óɲ¿ÊðÓ¦ÓóÌÐòµÄϵͳ¹ÜÀíÔ±Ò»Æð¹ÜÀí¡£³ýÁ˱¾µØ·þÎñÖ®Í⣬ӦÓóÌÐòÓпÉÄÜʹÓÃÁ˵ÚÈý·½·¢²¼ºÍ¹ÜÀíµÄ·þÎñ¡£Ê¾Àý°üÀ¨ SMTP£¨ÀýÈç Postmark£©£¬Êý¾ÝÊÕ¼¯·þÎñ£¨ÀýÈç New Relic »òLoggly£©£¬Êý¾Ý´æ´¢·þÎñ£¨Èç Amazon S3£©£¬ÒÔ¼°Ê¹Óà API ·ÃÎʵķþÎñ£¨ÀýÈç Twitter, Google Maps,Last.fm£©¡£

12-Factor Ó¦Óò»»áÇø±ð¶Ô´ý±¾µØ»òµÚÈý·½·þÎñ¡£ ¶ÔÓ¦ÓóÌÐò¶øÑÔ£¬Á½ÖÖ¶¼ÊǸ½¼Ó×ÊÔ´£¬Í¨¹ýÒ»¸ö url »òÊÇÆäËû´æ´¢ÔÚ ÅäÖÃÖеķþÎñ¶¨Î»/·þÎñÖ¤ÊéÀ´»ñÈ¡Êý¾Ý¡£12-FactorÓ¦ÓõÄÈÎÒâ ²¿Ê𠣬¶¼Ó¦¸Ã¿ÉÒÔÔÚ²»½øÐÐÈκδúÂë¸Ä¶¯µÄÇé¿öÏ£¬½«±¾µØ MySQL Êý¾Ý¿â»»³ÉµÚÈý·½·þÎñ£¨ÀýÈç Amazon RDS£©¡£ÀàËÆµÄ£¬±¾µØ SMTP·þÎñÓ¦¸ÃÒ²¿ÉÒԺ͵ÚÈý·½ SMTP ·þÎñ£¨ÀýÈç Postmark £©»¥»»¡£ÉÏÊö 2 ¸öÀý×ÓÖУ¬½öÐèÐÞ¸ÄÅäÖÃÖеÄ×ÊÔ´µØÖ·¡£

ÿ¸ö²»Í¬µÄºó¶Ë·þÎñÊÇÒ»·Ý ×ÊÔ´ ¡£ÀýÈ磬һ¸ö MySQL Êý¾Ý¿âÊÇÒ»¸ö×ÊÔ´£¬Á½¸öMySQL Êý¾Ý¿â£¨ÓÃÀ´Êý¾Ý·ÖÇø£©¾Í±»µ±×÷ÊÇ 2 ¸ö²»Í¬µÄ×ÊÔ´¡£12-Factor Ó¦Óý«ÕâЩÊý¾Ý¿â¶¼ÊÓ×÷ ¸½¼Ó×ÊÔ´ £¬ÕâЩ×ÊÔ´ºÍËüÃǸ½ÊôµÄ²¿Êð±£³ÖËÉñîºÏ¡£

Ò»ÖÖ²¿Ê𸽼Ó4¸öºó¶Ë·þÎñ

²¿Êð¿ÉÒÔ°´Ðè¼ÓÔØ»òÐ¶ÔØ×ÊÔ´¡£ÀýÈ磬Èç¹ûÓ¦ÓõÄÊý¾Ý¿â·þÎñÓÉÓÚÓ²¼þÎÊÌâ³öÏÖÒì³££¬¹ÜÀíÔ±¿ÉÒÔ´Ó×î½üµÄ±¸·ÝÖлָ´Ò»¸öÊý¾Ý¿â£¬Ð¶Ôص±Ç°µÄÊý¾Ý¿â£¬È»ºó¼ÓÔØÐµÄÊý¾Ý¿â ¨C Õû¸ö¹ý³Ì¶¼²»ÐèÒªÐ޸ĴúÂë¡£

V. ¹¹½¨£¬·¢²¼£¬ÔËÐÐ

Ñϸñ·ÖÀë¹¹½¨ºÍÔËÐÐ

»ù×¼´úÂë ת»¯ÎªÒ»·Ý²¿Êð(·Ç¿ª·¢»·¾³)ÐèÒªÒÔÏÂÈý¸ö½×¶Î£º

l ¹¹½¨½×¶Î ÊÇÖ¸½«´úÂë²Ö¿âת»¯Îª¿ÉÖ´ÐаüµÄ¹ý³Ì¡£¹¹½¨Ê±»áʹÓÃÖ¸¶¨°æ±¾µÄ´úÂ룬»ñÈ¡ºÍ´ò°ü ÒÀÀµÏ±àÒë³É¶þ½øÖÆÎļþºÍ×ÊÔ´Îļþ¡£

l ·¢²¼½×¶Î »á½«¹¹½¨µÄ½á¹ûºÍµ±Ç°²¿ÊðËùÐè ÅäÖà Ïà½áºÏ£¬²¢Äܹ»Á¢¿ÌÔÚÔËÐл·¾³ÖÐͶÈëʹÓá£

l ÔËÐн׶Π£¨»òÕß˵¡°ÔËÐÐʱ¡±£©ÊÇÖ¸Õë¶ÔÑ¡¶¨µÄ·¢²¼°æ±¾£¬ÔÚÖ´Ðл·¾³ÖÐÆô¶¯Ò»ÏµÁÐÓ¦ÓóÌÐò ½ø³Ì¡£

´úÂë±»¹¹½¨£¬È»ºóºÍÅäÖýáºÏ³ÉΪ·¢²¼°æ±¾

12-facfor Ó¦ÓÃÑϸñÇø·Ö¹¹½¨£¬·¢²¼£¬ÔËÐÐÕâÈý¸ö²½Öè¡£ ¾ÙÀýÀ´Ëµ£¬Ö±½ÓÐ޸Ĵ¦ÓÚÔËÐÐ״̬µÄ´úÂëÊǷdz£²»¿ÉÈ¡µÄ×ö·¨£¬ÒòΪÕâЩÐ޸ĺÜÄÑÔÙͬ²½»Ø¹¹½¨²½Öè¡£

²¿Ê𹤾ßͨ³£¶¼ÌṩÁË·¢²¼¹ÜÀí¹¤¾ß£¬×îÒýÈËעĿµÄ¹¦ÄÜÊÇÍË»ØÖÁ½Ï¾ÉµÄ·¢²¼°æ±¾¡£±ÈÈ磬 Capistrano ½«ËùÓз¢²¼°æ±¾¶¼´æ´¢ÔÚÒ»¸ö½Ð releases µÄ×ÓĿ¼ÖУ¬µ±Ç°µÄÔÚÏß°æ±¾Ö»ÐèÓ³ÉäÖÁ¶ÔÓ¦µÄĿ¼¼´¿É¡£¸Ã¹¤¾ßµÄrollback ÃüÁî¿ÉÒÔºÜÈÝÒ×µØÊµÏÖ»ØÍ˰汾µÄ¹¦ÄÜ¡£

ÿһ¸ö·¢²¼°æ±¾±ØÐë¶ÔÓ¦Ò»¸öΨһµÄ·¢²¼ ID£¬ÀýÈç¿ÉÒÔʹÓ÷¢²¼Ê±µÄʱ¼ä´Á£¨2011-04-06-20:32:17£©£¬Òà»òÊÇÒ»¸öÔö³¤µÄÊý×Ö£¨v100£©¡£·¢²¼µÄ°æ±¾¾ÍÏñÒ»±¾Ö»ÄÜ×·¼ÓµÄÕ˱¾£¬Ò»µ©·¢²¼¾Í²»¿ÉÐ޸ģ¬Èκεı䶯¶¼Ó¦¸Ã²úÉúÒ»¸öÐµķ¢²¼°æ±¾¡£

еĴúÂëÔÚ²¿Êð֮ǰ£¬ÐèÒª¿ª·¢ÈËÔ±´¥·¢¹¹½¨²Ù×÷¡£µ«ÊÇ£¬ÔËÐн׶β»Ò»¶¨ÐèÒªÈËΪ´¥·¢£¬¶øÊÇ¿ÉÒÔ×Ô¶¯½øÐС£Èç·þÎñÆ÷ÖØÆô£¬»òÊǽø³Ì¹ÜÀíÆ÷ÖØÆôÁËÒ»¸ö±ÀÀ£µÄ½ø³Ì¡£Òò´Ë£¬ÔËÐн׶ÎÓ¦¸Ã±£³Ö¾¡¿ÉÄÜÉÙµÄÄ£¿é£¬ÕâÑù¼ÙÉè°ëÒ¹·¢Éúϵͳ¹ÊÕ϶ø¿ª·¢ÈËÔ±ÓÖ×½½ó¼ûÖâÒ²²»»áÒýÆðÌ«´óÎÊÌâ¡£¹¹½¨½×¶ÎÊÇ¿ÉÒÔÏà¶Ô¸´ÔÓһЩµÄ£¬ÒòΪ´íÎóÐÅÏ¢Äܹ»Á¢¿ÌչʾÔÚ¿ª·¢ÈËÔ±ÃæÇ°£¬´Ó¶øµÃµ½Í×ÉÆ´¦Àí¡£

VI. ½ø³Ì

ÒÔÒ»¸ö»ò¶à¸öÎÞ״̬½ø³ÌÔËÐÐÓ¦ÓÃ

ÔËÐл·¾³ÖУ¬Ó¦ÓóÌÐòͨ³£ÊÇÒÔÒ»¸öºÍ¶à¸ö ½ø³Ì ÔËÐеġ£

×î¼òµ¥µÄ³¡¾°ÖУ¬´úÂëÊÇÒ»¸ö¶ÀÁ¢µÄ½Å±¾£¬ÔËÐл·¾³ÊÇ¿ª·¢ÈËÔ±×Ô¼ºµÄ±Ê¼Ç±¾µçÄÔ£¬½ø³ÌÓÉÒ»ÌõÃüÁîÐУ¨ÀýÈçpython my_script.py£©¡£ÁíÍâÒ»¸ö¼«¶ËÇé¿öÊÇ£¬¸´ÔÓµÄÓ¦ÓÿÉÄÜ»áʹÓÃºÜ¶à ½ø³ÌÀàÐÍ £¬Ò²¾ÍÊÇÁã¸ö»ò¶à¸ö½ø³ÌʵÀý¡£

12-Factor Ó¦ÓõĽø³Ì±ØÐëÎÞ״̬ÇÒ ÎÞ¹²Ïí ¡£ ÈκÎÐèÒª³Ö¾Ã»¯µÄÊý¾Ý¶¼Òª´æ´¢ÔÚ ºó¶Ë·þÎñ ÄÚ£¬±ÈÈçÊý¾Ý¿â¡£

ÄÚ´æÇøÓò»ò´ÅÅ̿ռä¿ÉÒÔ×÷Ϊ½ø³ÌÔÚ×öijÖÖÊÂÎñÐͲÙ×÷ʱµÄ»º´æ£¬ÀýÈçÏÂÔØÒ»¸öºÜ´óµÄÎļþ£¬¶ÔÆä²Ù×÷²¢½«½á¹ûдÈëÊý¾Ý¿âµÄ¹ý³Ì¡£12-FactorÓ¦Óøù±¾²»Óÿ¼ÂÇÕâЩ»º´æµÄÄÚÈÝÊDz»ÊÇ¿ÉÒÔ±£Áô¸øÖ®ºóµÄÇëÇóÀ´Ê¹Óã¬ÕâÊÇÒòΪӦÓÃÆô¶¯Á˶àÖÖÀàÐ͵Ľø³Ì£¬½«À´µÄÇëÇó¶à°ë»áÓÉÆäËû½ø³ÌÀ´·þÎñ¡£¼´Ê¹ÔÚÖ»ÓÐÒ»¸ö½ø³ÌµÄÇéÐÎÏ£¬ÏÈǰ±£´æµÄÊý¾Ý£¨ÄÚ´æ»òÎļþϵͳÖУ©Ò²»áÒòÎªÖØÆô£¨Èç´úÂ벿Êð¡¢ÅäÖøü¸Ä¡¢»òÔËÐл·¾³½«½ø³Ìµ÷¶ÈÖÁÁíÒ»¸öÎïÀíÇøÓòÖ´ÐУ©¶ø¶ªÊ§¡£

Ô´Îļþ´ò°ü¹¤¾ß£¨Jammit, django-compressor£© ʹÓÃÎļþϵͳÀ´»º´æ±àÒë¹ýµÄÔ´Îļþ¡£12-FactorÓ¦ÓøüÇãÏòÓÚÔÚ ¹¹½¨²½Öè×ö´Ë¶¯×÷¡ª¡ªÕýÈç Rails×ÊÔ´¹ÜµÀ £¬¶ø²»ÊÇÔÚÔËÐн׶Ρ£

һЩ»¥ÁªÍøÏµÍ³ÒÀÀµÓÚ ¡°Õ³ÐÔ session¡±£¬ ÕâÊÇÖ¸½«Óû§ session ÖеÄÊý¾Ý»º´æÖÁij½ø³ÌµÄÄÚ´æÖУ¬²¢½«Í¬Ò»Óû§µÄºóÐøÇëÇó·Óɵ½Í¬Ò»¸ö½ø³Ì¡£Õ³ÐÔ session ÊÇ 12-Factor ¼«Á¦·´¶ÔµÄ¡£Session ÖеÄÊý¾ÝÓ¦¸Ã±£´æÔÚÖîÈçMemcached »ò Redis ÕâÑùµÄ´øÓйýÆÚʱ¼äµÄ»º´æÖС£

VII. ¶Ë¿Ú°ó¶¨

ͨ¹ý¶Ë¿Ú°ó¶¨(Port binding)À´Ìṩ·þÎñ

»¥ÁªÍøÓ¦ÓÃÓÐʱ»áÔËÐÐÓÚ·þÎñÆ÷µÄÈÝÆ÷Ö®ÖС£ÀýÈç PHP ¾­³£×÷Ϊ Apache HTTPD µÄÒ»¸öÄ£¿éÀ´ÔËÐУ¬ÕýÈçJava ÔËÐÐÓÚ Tomcat ¡£

12-Factor Ó¦ÓÃÍêÈ«×ÔÎÒ¼ÓÔØ ¶ø²»ÒÀÀµÓÚÈκÎÍøÂç·þÎñÆ÷¾Í¿ÉÒÔ´´½¨Ò»¸öÃæÏòÍøÂçµÄ·þÎñ¡£»¥ÁªÍøÓ¦Óà ͨ¹ý¶Ë¿Ú°ó¶¨À´Ìṩ·þÎñ £¬²¢¼àÌý·¢ËÍÖÁ¸Ã¶Ë¿ÚµÄÇëÇó¡£

±¾µØ»·¾³ÖУ¬¿ª·¢ÈËԱͨ¹ýÀàËÆhttp://localhost:5000/µÄµØÖ·À´·ÃÎÊ·þÎñ¡£ÔÚÏßÉÏ»·¾³ÖУ¬ÇëÇóͳһ·¢ËÍÖÁ¹«¹²ÓòÃû¶øºó·ÓÉÖÁ°ó¶¨Á˶˿ڵÄÍøÂç½ø³Ì¡£

ͨ³£µÄʵÏÖ˼·ÊÇ£¬½«ÍøÂç·þÎñÆ÷Àà¿âͨ¹ý ÒÀÀµÉùÃ÷ ÔØÈëÓ¦Óá£ÀýÈ磬PythonµÄ Tornado,Ruby µÄThin ,Java ÒÔ¼°ÆäËû»ùÓÚ JVM ÓïÑ﵀ Jetty¡£ÍêÈ«ÓÉ Óû§¶Ë £¬È·ÇеÄ˵Ӧ¸ÃÊÇÓ¦ÓõĴúÂ룬·¢ÆðÇëÇ󡣺ÍÔËÐл·¾³Ô¼¶¨ºÃ°ó¶¨µÄ¶Ë¿Ú¼´¿É´¦ÀíÕâЩÇëÇó¡£

HTTP ²¢²»ÊÇΨһһ¸ö¿ÉÒÔÓɶ˿ڰó¶¨ÌṩµÄ·þÎñ¡£Æäʵ¼¸ºõËùÓзþÎñÆ÷Èí¼þ¶¼¿ÉÒÔͨ¹ý½ø³Ì°ó¶¨¶Ë¿ÚÀ´µÈ´ýÇëÇó¡£ÀýÈ磬ʹÓà XMPP µÄ ejabberd £¬ ÒÔ¼°Ê¹Óà Redis ЭÒé µÄ Redis ¡£

»¹ÒªÖ¸³öµÄÊÇ£¬¶Ë¿Ú°ó¶¨ÕâÖÖ·½Ê½Ò²Òâζ×ÅÒ»¸öÓ¦ÓÿÉÒÔ³ÉΪÁíÍâÒ»¸öÓ¦ÓÃµÄ ºó¶Ë·þÎñ £¬µ÷Ó÷½½«·þÎñ·½ÌṩµÄÏàÓ¦URL µ±×÷×ÊÔ´´æÈë ÅäÖà ÒÔ±¸½«À´µ÷Óá£

VIII. ²¢·¢

ͨ¹ý½ø³ÌÄ£ÐͽøÐÐÀ©Õ¹

ÈκμÆËã»ú³ÌÐò£¬Ò»µ©Æô¶¯£¬¾Í»áÉú³ÉÒ»¸ö»ò¶à¸ö½ø³Ì¡£»¥ÁªÍøÓ¦ÓòÉÓöàÖÖ½ø³ÌÔËÐз½Ê½¡£ÀýÈ磬PHP ½ø³Ì×÷Ϊ Apache µÄ×Ó½ø³Ì´æÔÚ£¬ËæÇëÇó°´ÐèÆô¶¯¡£Java ½ø³ÌÔò²ÉÈ¡ÁËÏà·´µÄ·½Ê½£¬ÔÚ³ÌÐòÆô¶¯Ö®³õ JVM ¾ÍÌṩÁËÒ»¸ö³¬¼¶½ø³Ì´¢±¸ÁË´óÁ¿µÄϵͳ×ÊÔ´(CPU ºÍÄÚ´æ)£¬²¢Í¨¹ý¶àÏß³ÌʵÏÖÄÚ²¿µÄ²¢·¢¹ÜÀí¡£ÉÏÊö 2 ¸öÀý×ÓÖУ¬½ø³ÌÊÇ¿ª·¢ÈËÔ±¿ÉÒÔ²Ù×÷µÄ×îСµ¥Î»¡£

À©Õ¹±íÏÖΪÔËÐÐÖеĽø³Ì£¬¹¤×÷¶àÑùÐÔ±íÏÖΪ½ø³ÌÀàÐÍ¡£

ÔÚ 12-factor Ó¦ÓÃÖУ¬½ø³ÌÊÇÒ»µÈ¹«Ãñ¡£12-Factor Ó¦ÓõĽø³ÌÖ÷Òª½è¼øÓÚ unix ÊØ»¤½ø³ÌÄ£ÐÍ ¡£¿ª·¢ÈËÔ±¿ÉÒÔÔËÓÃÕâ¸öÄ£ÐÍÈ¥Éè¼ÆÓ¦Óüܹ¹£¬½«²»Í¬µÄ¹¤×÷·ÖÅ䏸²»Í¬µÄ ½ø³ÌÀàÐÍ ¡£ÀýÈ磬HTTP ÇëÇó¿ÉÒÔ½»¸ø web ½ø³ÌÀ´´¦Àí£¬¶ø³£×¤µÄºǫ́¹¤×÷Ôò½»ÓÉ worker ½ø³Ì¸ºÔð¡£

Õâ²¢²»°üÀ¨¸ö±ð½ÏÎªÌØÊâµÄ½ø³Ì£¬ÀýÈçͨ¹ýÐéÄâ»úµÄÏ̴߳¦Àí²¢·¢µÄÄÚ²¿ÔËË㣬»òÊÇʹÓÃÖîÈç EventMachine,Twisted, Node.js µÄÒì²½/ʼþ´¥·¢Ä£ÐÍ¡£µ«Ò»Ì¨¶ÀÁ¢µÄÐéÄâ»úµÄÀ©Õ¹ÓÐÆ¿¾±£¨´¹Ö±À©Õ¹£©£¬ËùÒÔÓ¦ÓóÌÐò±ØÐë¿ÉÒÔÔÚ¶ą̀ÎïÀí»úÆ÷¼ä¿ç½ø³Ì¹¤×÷¡£

ÉÏÊö½ø³ÌÄ£ÐÍ»áÔÚϵͳ¼±ÐèÀ©Õ¹Ê±´ó·ÅÒì²Ê¡£ 12-Factor Ó¦ÓõĽø³ÌËù¾ß±¸µÄÎÞ¹²Ïí£¬Ë®Æ½·ÖÇøµÄÌØÐÔ Òâζ×ÅÌí¼Ó²¢·¢»á±äµÃ¼òµ¥¶øÎÈÍס£ÕâЩ½ø³ÌµÄÀàÐÍÒÔ¼°Ã¿¸öÀàÐÍÖнø³ÌµÄÊýÁ¿¾Í±»³Æ×÷ ½ø³Ì¹¹³É ¡£

12-Factor Ó¦ÓõĽø³Ì ²»ÐèÒªÊØ»¤½ø³Ì »òÊÇдÈë PID Îļþ¡£Ïà·´µÄ£¬Ó¦¸Ã½èÖú²Ù×÷ϵͳµÄ½ø³Ì¹ÜÀíÆ÷(ÀýÈçUpstart £¬·Ö²¼Ê½µÄ½ø³Ì¹ÜÀíÔÆÆ½Ì¨£¬»òÊÇÀàËÆ Foreman µÄ¹¤¾ß)£¬À´¹ÜÀí Êä³öÁ÷ £¬ÏìÓ¦±ÀÀ£µÄ½ø³Ì£¬ÒÔ¼°´¦ÀíÓû§´¥·¢µÄÖØÆôºÍ¹Ø±Õ³¬¼¶½ø³ÌµÄÇëÇó¡£

IX. Ò×´¦Àí

¿ìËÙÆô¶¯ºÍÓÅÑÅÖÕÖ¹¿É×î´ó»¯½¡×³ÐÔ

12-Factor Ó¦ÓÃµÄ ½ø³Ì ÊÇ Ò×´¦Àí£¨disposable£©µÄ£¬Òâ˼ÊÇ˵ËüÃÇ¿ÉÒÔ˲¼ä¿ªÆô»òÍ£Ö¹¡£ ÕâÓÐÀûÓÚ¿ìËÙ¡¢µ¯ÐÔµÄÉìËõÓ¦Óã¬Ñ¸ËÙ²¿Êð±ä»¯µÄ ´úÂë »ò ÅäÖà £¬ÎȽ¡µÄ²¿ÊðÓ¦Óá£

½ø³ÌÓ¦µ±×·Çó ×îСÆô¶¯Ê±¼ä ¡£ ÀíÏë״̬Ï£¬½ø³Ì´ÓÇÃÏÂÃüÁîµ½ÕæÕýÆô¶¯²¢µÈ´ýÇëÇóµÄʱ¼äÓ¦¸ÃÖ»ÐèºÜ¶ÌµÄʱ¼ä¡£¸üÉÙµÄÆô¶¯Ê±¼äÌṩÁ˸üÃô½ÝµÄ ·¢²¼ ÒÔ¼°À©Õ¹¹ý³Ì£¬´ËÍ⻹Ôö¼ÓÁ˽¡×³ÐÔ£¬ÒòΪ½ø³Ì¹ÜÀíÆ÷¿ÉÒÔÔÚÊÚȨÇéÐÎÏÂÈÝÒ׵Ľ«½ø³Ì°áµ½ÐµÄÎïÀí»úÆ÷ÉÏ¡£

½ø³Ì Ò»µ©½ÓÊÕ ÖÕÖ¹Ðźţ¨SIGTERM£© ¾Í»áÓÅÑŵÄÖÕÖ¹ ¡£¾ÍÍøÂç½ø³Ì¶øÑÔ£¬ÓÅÑÅÖÕÖ¹ÊÇָֹͣ¼àÌý·þÎñµÄ¶Ë¿Ú£¬¼´¾Ü¾øËùÓÐеÄÇëÇ󣬲¢¼ÌÐøÖ´Ðе±Ç°ÒѽÓÊÕµÄÇëÇó£¬È»ºóÍ˳ö¡£´ËÀàÐ͵Ľø³ÌËùÒþº¬µÄÒªÇóÊÇHTTPÇëÇó´ó¶à¶¼ºÜ¶Ì(²»»á³¬¹ý¼¸ÃëÖÓ)£¬¶øÔÚ³¤Ê±¼äÂÖѯÖУ¬¿Í»§¶ËÔÚ¶ªÊ§Á¬½ÓºóÓ¦¸ÃÂíÉϳ¢ÊÔÖØÁ¬¡£

¶ÔÓÚ worker ½ø³ÌÀ´Ëµ£¬ÓÅÑÅÖÕÖ¹ÊÇÖ¸½«µ±Ç°ÈÎÎñÍ˻ضÓÁС£ÀýÈ磬RabbitMQ ÖУ¬worker ¿ÉÒÔ·¢ËÍÒ»¸öNACKÐźš£ Beanstalkd ÖУ¬ÈÎÎñÖÕÖ¹²¢Í˻ضÓÁлáÔÚworker¶Ï¿ªÊ±×Ô¶¯´¥·¢¡£ÓÐËø»úÖÆµÄϵͳÖîÈçDelayed Job ÔòÐèҪȷ¶¨ÊÍ·ÅÁËϵͳ×ÊÔ´¡£´ËÀàÐ͵Ľø³ÌËùÒþº¬µÄÒªÇóÊÇ£¬ÈÎÎñ¶¼Ó¦¸Ã ¿ÉÖØ¸´Ö´ÐÐ £¬ ÕâÖ÷ÒªÓɽ«½á¹û°ü×°½øÊÂÎñ»òÊÇÊ¹ÖØ¸´²Ù×÷ ÃÝµÈ À´ÊµÏÖ¡£

½ø³Ì»¹Ó¦µ±ÔÚÃæ¶ÔͻȻËÀÍöʱ±£³Ö½¡×³£¬ÀýÈçµ×²ãÓ²¼þ¹ÊÕÏ¡£ËäÈ»ÕâÖÖÇé¿ö±ÈÆðÓÅÑÅÖÕÖ¹À´ËµÉÙÖ®ÓÖÉÙ£¬µ«ÖÕ¾¿ÓпÉÄÜ·¢Éú¡£Ò»ÖÖÍÆ¼öµÄ·½Ê½ÊÇʹÓÃÒ»¸ö½¡×³µÄºó¶Ë¶ÓÁУ¬ÀýÈç Beanstalkd £¬Ëü¿ÉÒÔÔÚ¿Í»§¶Ë¶Ï¿ª»ò³¬Ê±ºó×Ô¶¯ÍË»ØÈÎÎñ¡£ÎÞÂÛÈçºÎ£¬12-Factor Ó¦Óö¼Ó¦¸Ã¿ÉÒÔÉè¼ÆÄܹ»Ó¦¶ÔÒâÍâµÄ¡¢²»ÓÅÑŵÄÖսᡣCrash-onlydesign ½«ÕâÖÖ¸ÅÄîת»¯Îª ºÏºõÂß¼­µÄÀíÂÛ¡£

X. ¿ª·¢»·¾³ÓëÏßÉÏ»·¾³µÈ¼Û

¾¡¿ÉÄܵı£³Ö¿ª·¢£¬Ô¤·¢²¼£¬ÏßÉÏ»·¾³Ïàͬ

´ÓÒÔÍù¾­ÑéÀ´¿´£¬¿ª·¢»·¾³£¨¼´¿ª·¢ÈËÔ±µÄ±¾µØ ²¿Ê𣩺ÍÏßÉÏ»·¾³£¨ÍⲿÓû§·ÃÎʵÄÕæÊµ²¿Êð£©Ö®¼ä´æÔÚןܶà²îÒì¡£ÕâЩ²îÒì±íÏÖÔÚÒÔÏÂÈý¸ö·½Ã棺

l ʱ¼ä²îÒ죺 ¿ª·¢ÈËÔ±ÕýÔÚ±àдµÄ´úÂë¿ÉÄÜÐèÒª¼¸Ì죬¼¸ÖÜ£¬ÉõÖÁ¼¸¸öÔ²ŻáÉÏÏß¡£

l ÈËÔ±²îÒ죺 ¿ª·¢ÈËÔ±±àд´úÂ룬ÔËάÈËÔ±²¿Êð´úÂë¡£

l ¹¤¾ß²îÒ죺 ¿ª·¢ÈËÔ±»òÐíʹÓÃNginx£¬SQLite£¬OS X£¬¶øÏßÉÏ»·¾³Ê¹Óà Apache£¬MySQL ÒÔ¼° Linux¡£

12-Factor Ó¦ÓÃÏëÒª×öµ½ ³ÖÐø²¿Êð ¾Í±ØÐëËõС±¾µØÓëÏßÉϲîÒì¡£ ÔÙ»ØÍ·¿´ÉÏÃæËùÃèÊöµÄÈý¸ö²îÒì:

l ËõСʱ¼ä²îÒ죺¿ª·¢ÈËÔ±¿ÉÒÔ¼¸Ð¡Ê±£¬ÉõÖÁ¼¸·ÖÖӾͲ¿Êð´úÂë¡£

l ËõСÈËÔ±²îÒ죺¿ª·¢ÈËÔ±²»Ö»Òª±àд´úÂ룬¸üÓ¦¸ÃÃÜÇвÎÓ벿Êð¹ý³ÌÒÔ¼°´úÂëÔÚÏßÉϵıíÏÖ¡£

l ËõС¹¤¾ß²îÒ죺¾¡Á¿±£Ö¤¿ª·¢»·¾³ÒÔ¼°ÏßÉÏ»·¾³µÄÒ»ÖÂÐÔ¡£

½«ÉÏÊö×ܽá±äΪһ¸ö±í¸ñÈçÏ£º

ºó¶Ë·þÎñ ÊDZ£³Ö¿ª·¢ÓëÏßÉϵȼ۵ÄÖØÒª²¿·Ö£¬ÀýÈçÊý¾Ý¿â£¬¶ÓÁÐϵͳ£¬ÒÔ¼°»º´æ¡£Ðí¶àÓïÑÔ¶¼ÌṩÁ˼ò»¯»ñÈ¡ºó¶Ë·þÎñµÄÀà¿â£¬ÀýÈ粻ͬÀàÐÍ·þÎñµÄ ÊÊÅäÆ÷ ¡£ÏÂÁбí¸ñÌṩÁËһЩÀý×Ó¡£

¿ª·¢ÈËÔ±ÓÐʱ»á¾õµÃÔÚ±¾µØ»·¾³ÖÐʹÓÃÇáÁ¿µÄºó¶Ë·þÎñ¾ßÓкÜÇ¿µÄÎüÒýÁ¦£¬¶øÄÇЩ¸üÖØÁ¿¼¶µÄ½¡×³µÄºó¶Ë·þÎñÓ¦¸ÃʹÓÃÔÚÉú²ú»·¾³¡£ÀýÈ磬±¾µØÊ¹Óà SQLite ÏßÉÏʹÓà PostgreSQL£»ÓÖÈç±¾µØ»º´æÔÚ½ø³ÌÄÚ´æÖжøÏßÉÏ´æÈë Memcached¡£

12-Factor Ó¦ÓõĿª·¢ÈËÔ±Ó¦¸Ã·´¶ÔÔÚ²»Í¬»·¾³¼äʹÓò»Í¬µÄºó¶Ë·þÎñ £¬¼´Ê¹ÊÊÅäÆ÷ÒѾ­¿ÉÒÔ¼¸ºõÏû³ýʹÓÃÉϵIJîÒì¡£ÕâÊÇÒòΪ£¬²»Í¬µÄºó¶Ë·þÎñÒâζ×Å»áͻȻ³öÏֵIJ»¼æÈÝ£¬´Ó¶øµ¼Ö²âÊÔ¡¢Ô¤·¢²¼¶¼Õý³£µÄ´úÂëÔÚÏßÉϳöÏÖÎÊÌâ¡£ÕâЩ´íÎó»á¸ø³ÖÐø²¿Êð´øÀ´×èÁ¦¡£´ÓÓ¦ÓóÌÐòµÄÉúÃüÖÜÆÚÀ´¿´£¬Ïû³ýÕâÖÖ×èÁ¦ÐèÒª»¨·ÑºÜ´óµÄ´ú¼Û¡£

Óë´Ëͬʱ£¬ÇáÁ¿µÄ±¾µØ·þÎñÒ²²»ÏñÒÔǰÄÇÑùÒýÈËעĿ¡£½èÖúÓÚHomebrew£¬apt-getµÈÏÖ´úµÄ´ò°üϵͳ£¬ÖîÈçMemcached¡¢PostgreSQL¡¢RabbitMQ µÈºó¶Ë·þÎñµÄ°²×°ÓëÔËÐÐÒ²²¢²»¸´ÔÓ¡£´ËÍ⣬ʹÓÃÀàËÆ Chef ºÍPuppet µÄÉùÃ÷ʽÅäÖù¤¾ß£¬½áºÏÏñ Vagrant ÕâÑùÇáÁ¿µÄÐéÄâ»·¾³¾Í¿ÉÒÔʹµÃ¿ª·¢ÈËÔ±µÄ±¾µØ»·¾³ÓëÏßÉÏ»·¾³ÎÞÏÞ½Ó½ü¡£Óëͬ²½»·¾³ºÍ³ÖÐø²¿ÊðËù´øÀ´µÄÒæ´¦Ïà±È£¬°²×°ÕâЩϵͳÏÔÈ»ÊÇÖµµÃµÄ¡£

²»Í¬ºó¶Ë·þÎñµÄÊÊÅäÆ÷ÈÔÈ»ÊÇÓÐÓõģ¬ÒòΪËüÃÇ¿ÉÒÔÊ¹ÒÆÖ²ºó¶Ë·þÎñ±äµÃ¼òµ¥¡£µ«Ó¦ÓõÄËùÓв¿Êð£¬ÕâÆäÖаüÀ¨¿ª·¢¡¢Ô¤·¢²¼ÒÔ¼°ÏßÉÏ»·¾³£¬¶¼Ó¦¸ÃʹÓÃͬһ¸öºó¶Ë·þÎñµÄÏàͬ°æ±¾¡£

XI. ÈÕÖ¾

°ÑÈÕÖ¾µ±×÷ʼþÁ÷

ÈÕÖ¾ ʹµÃÓ¦ÓóÌÐòÔËÐе͝×÷±äµÃ͸Ã÷¡£ÔÚ»ùÓÚ·þÎñÆ÷µÄ»·¾³ÖУ¬ÈÕ־ͨ³£±»Ð´ÔÚÓ²Å̵ÄÒ»¸öÎļþÀµ«ÕâÖ»ÊÇÒ»ÖÖÊä³ö¸ñʽ¡£

ÈÕÖ¾Ó¦¸ÃÊÇ Ê¼þÁ÷ µÄ»ã×Ü£¬½«ËùÓÐÔËÐÐÖнø³ÌºÍºó¶Ë·þÎñµÄÊä³öÁ÷°´ÕÕʱ¼ä˳ÐòÊÕ¼¯ÆðÀ´¡£¾¡¹ÜÔÚ»ØËÝÎÊÌâʱ¿ÉÄÜÐèÒª¿´ºÜ¶àÐУ¬ÈÕÖ¾×îԭʼµÄ¸ñʽȷʵÊÇÒ»¸öʼþÒ»ÐС£ÈÕ־ûÓÐÈ·¶¨¿ªÊ¼ºÍ½áÊø£¬µ«Ëæ×ÅÓ¦ÓÃÔÚÔËÐлá³ÖÐøµÄÔö¼Ó¡£

12-factorÓ¦Óñ¾Éí´Ó²»¿¼ÂÇ´æ´¢×Ô¼ºµÄÊä³öÁ÷¡£ ²»Ó¦¸ÃÊÔͼȥд»òÕß¹ÜÀíÈÕÖ¾Îļþ¡£Ïà·´£¬Ã¿Ò»¸öÔËÐеĽø³Ì¶¼»áÖ±½ÓµÄ±ê×¼Êä³ö£¨stdout£©Ê¼þÁ÷¡£¿ª·¢»·¾³ÖУ¬¿ª·¢ÈËÔ±¿ÉÒÔͨ¹ýÕâЩÊý¾ÝÁ÷£¬ÊµÊ±ÔÚÖÕ¶Ë¿´µ½Ó¦ÓõĻ¡£

ÔÚÔ¤·¢²¼»òÏßÉϲ¿ÊðÖУ¬Ã¿¸ö½ø³ÌµÄÊä³öÁ÷ÓÉÔËÐл·¾³½Ø»ñ£¬²¢½«ÆäËûÊä³öÁ÷ÕûÀíÔÚÒ»Æð£¬È»ºóÒ»²¢·¢Ë͸øÒ»¸ö»ò¶à¸ö×îÖյĴ¦Àí³ÌÐò£¬ÓÃÓڲ鿴»òÊdz¤ÆÚ´æµµ¡£ÕâЩ´æµµÂ·¾¶¶ÔÓÚÓ¦ÓÃÀ´Ëµ²»¿É¼ûÒ²²»¿ÉÅäÖ㬶øÊÇÍêÈ«½»¸ø³ÌÐòµÄÔËÐл·¾³¹ÜÀí¡£ÀàËÆ Logplex ºÍ Fluent µÄ¿ªÔ´¹¤¾ß¿ÉÒÔ´ïµ½Õâ¸öÄ¿µÄ¡£

ÕâЩʼþÁ÷¿ÉÒÔÊä³öÖÁÎļþ£¬»òÕßÔÚÖÕ¶Ëʵʱ¹Û²ì¡£×îÖØÒªµÄ£¬Êä³öÁ÷¿ÉÒÔ·¢Ë͵½ Splunk ÕâÑùµÄÈÕÖ¾Ë÷Òý¼°·ÖÎöϵͳ£¬»ò Hadoop/Hive ÕâÑùµÄͨÓÃÊý¾Ý´æ´¢ÏµÍ³¡£ÕâЩϵͳΪ²é¿´Ó¦ÓõÄÀúÊ·»î¶¯ÌṩÁËÇ¿´ó¶øÁé»îµÄ¹¦ÄÜ£¬°üÀ¨£º

l ÕÒ³ö¹ýÈ¥Ò»¶Îʱ¼äÌØÊâµÄʼþ¡£

l ͼÐλ¯Ò»¸ö´ó¹æÄ£µÄÇ÷ÊÆ£¬±ÈÈçÿ·ÖÖÓµÄÇëÇóÁ¿¡£

l ¸ù¾ÝÓû§¶¨ÒåµÄÌõ¼þʵʱ´¥·¢¾¯±¨£¬±ÈÈçÿ·ÖÖӵı¨´í³¬¹ýij¸ö¾¯½äÏß¡£

XII. ¹ÜÀí½ø³Ì

ºǫ́¹ÜÀíÈÎÎñµ±×÷Ò»´ÎÐÔ½ø³ÌÔËÐÐ

½ø³Ì¹¹³É£¨processformation£©ÊÇÖ¸ÓÃÀ´´¦ÀíÓ¦Óõij£¹æÒµÎñ£¨±ÈÈç´¦Àí web ÇëÇ󣩵ÄÒ»×é½ø³Ì¡£Óë´Ë²»Í¬£¬¿ª·¢ÈËÔ±¾­³£Ï£ÍûÖ´ÐÐһЩ¹ÜÀí»òά»¤Ó¦ÓõÄÒ»´ÎÐÔÈÎÎñ£¬ÀýÈ磺

l ÔËÐÐÊý¾ÝÒÆÖ²£¨DjangoÖÐµÄ manage.py migrate, Rails ÖÐµÄ rakedb:migrate£©¡£

l ÔËÐÐÒ»¸ö¿ØÖÆÌ¨£¨Ò²±»³ÆÎª REPL shell£©£¬À´Ö´ÐÐһЩ´úÂë»òÊÇÕë¶ÔÏßÉÏÊý¾Ý¿â×öһЩ¼ì²é¡£´ó¶àÊýÓïÑÔ¶¼Í¨¹ý½âÊÍÆ÷ÌṩÁËÒ»¸ö REPL ¹¤¾ß£¨python »ò perl£©£¬»òÊÇÆäËûÃüÁRuby ʹÓà irb, Rails ʹÓà rails console£©¡£

l ÔËÐÐһЩÌá½»µ½´úÂë²Ö¿âµÄÒ»´ÎÐԽű¾¡£

Ò»´ÎÐÔ¹ÜÀí½ø³ÌÓ¦¸ÃºÍÕý³£µÄ ³£×¤½ø³Ì ʹÓÃͬÑùµÄ»·¾³¡£ÕâЩ¹ÜÀí½ø³ÌºÍÈÎºÎÆäËûµÄ½ø³ÌÒ»ÑùʹÓÃÏàͬµÄ ´úÂë ºÍ ÅäÖà £¬»ùÓÚij¸ö ·¢²¼°æ±¾ ÔËÐС£ºǫ́¹ÜÀí´úÂëÓ¦¸ÃËæÆäËûÓ¦ÓóÌÐò´úÂëÒ»Æð·¢²¼£¬´Ó¶ø±ÜÃâͬ²½ÎÊÌâ¡£

ËùÓнø³ÌÀàÐÍÓ¦¸ÃʹÓÃͬÑùµÄ ÒÀÀµ¸ôÀë ¼¼Êõ¡£ÀýÈ磬Èç¹ûRubyµÄweb½ø³ÌʹÓÃÁËÃüÁî bundleexec thin start £¬ÄÇôÊý¾Ý¿âÒÆÖ²Ó¦Ê¹Óà bundle exec rake db:migrate ¡£Í¬ÑùµÄ£¬Èç¹ûÒ»¸öPython ³ÌÐòʹÓÃÁË Virtualenv£¬ÔòÐèÒªÔÚÔËÐÐ Tornado Web ·þÎñÆ÷ºÍÈκΠmanage.py ¹ÜÀí½ø³ÌʱÒýÈëbin/python ¡£

12-factor ÓÈÆäÇàíùÄÇЩÌṩÁË REPL shell µÄÓïÑÔ£¬ÒòΪÄÇ»áÈÃÔËÐÐÒ»´ÎÐԽű¾±äµÃ¼òµ¥¡£ÔÚ±¾µØ²¿ÊðÖУ¬¿ª·¢ÈËÔ±Ö±½ÓÔÚÃüÁîÐÐʹÓà shell ÃüÁîµ÷ÓÃÒ»´ÎÐÔ¹ÜÀí½ø³Ì¡£ÔÚÏßÉϲ¿ÊðÖУ¬¿ª·¢ÈËÔ±ÒÀ¾É¿ÉÒÔʹÓÃssh»òÊÇÔËÐл·¾³ÌṩµÄÆäËû»úÖÆÀ´ÔËÐÐÕâÑùµÄ½ø³Ì¡£

×ܽ᣺ʮ¶þÒªËØ´ÓÀíÂÛÉÏ×ܽáÔÆÔ­ÉúµÄÌØµã£¬ÔÚʵ¼Ê²Ù×÷Öл¹ÊÇÒª´Ó×Ô¼º¹«Ë¾µÄʵ¼Ê³ö·¢½øÐм¼ÊõÑ¡ÐÍ¡£ÁíÍâÊ®¶þÒªËØÔÚʵʩ¹ý³ÌÖв»Ò»¶¨ÒªÒ»²½µ½Î»£¬¿ÉÒÔÏÈ´Ó½â¾ö¹«Ë¾µÄÎÊÌâ½Ç¶ÈÈ¥Ó¦Óá£

 

   
1687 ´Îä¯ÀÀ       27
Ïà¹ØÎÄÕÂ

ÔÆ¼ÆËãµÄ¼Ü¹¹
¶ÔÔÆ¼ÆËã·þÎñÄ£ÐÍ
ÔÆ¼ÆËãºËÐļ¼ÊõÆÊÎö
Á˽âÔÆ¼ÆËãµÄ©¶´
Ïà¹ØÎĵµ

ÔÆ¼ÆËã¼ò½é
ÔÆ¼ÆËã¼ò½éÓëÔÆ°²È«
ÏÂÒ»´úÍøÂç¼ÆËã--ÔÆ¼ÆËã
ÈídzÎöÔÆ¼ÆËã
Ïà¹Ø¿Î³Ì

ÔÆ¼ÆËãÔ­ÀíÓëÓ¦ÓÃ
ÔÆ¼ÆËãÓ¦ÓÃÓ뿪·¢
CMMIÌåϵÓëʵ¼ù
»ùÓÚCMMI±ê×¼µÄÈí¼þÖÊÁ¿±£Ö¤
×îл¼Æ»®
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢ 6-12[ÏÃÃÅ]
È˹¤ÖÇÄÜ.»úÆ÷ѧϰTensorFlow 6-22[Ö±²¥]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 6-30[±±¾©]
ǶÈëʽÈí¼þ¼Ü¹¹-¸ß¼¶Êµ¼ù 7-9[±±¾©]
Óû§ÌåÑé¡¢Ò×ÓÃÐÔ²âÊÔÓëÆÀ¹À 7-25[Î÷°²]
ͼÊý¾Ý¿âÓë֪ʶͼÆ× 8-23[±±¾©]
 
×îÐÂÎÄÕÂ
ÔÆÔ­Éú¼Ü¹¹¸ÅÊö
K8S¸ß¿ÉÓü¯Èº¼Ü¹¹ÊµÏÖ
ÈÝÆ÷ÔÆ¹ÜÀíÖ®K8S¼¯Èº¸ÅÊö
k8s-ÕûÌå¸ÅÊöºÍ¼Ü¹¹
Ê®·ÖÖÓѧ»áÓÃdocker²¿Êð΢·þÎñ
×îпγÌ
ÔÆ¼ÆË㡢΢·þÎñÓë·Ö²¼Ê½¼Ü¹¹
Æóҵ˽ÓÐÔÆÔ­ÀíÓë¹¹½¨
»ùÓÚKubernetesµÄDevOpsʵ¼ù
ÔÆÆ½Ì¨¼Ü¹¹ÓëÓ¦Ó㨰¢ÀïÔÆ£©
Docker²¿Êð±»²âϵͳÓë×Ô¶¯»¯¿ò¼Üʵ¼ù
³É¹¦°¸Àý
±±¾© ÔÆÆ½Ì¨Óë΢·þÎñ¼Ü¹¹Éè¼Æ
ͨÓù«Ë¾GE DockerÔ­ÀíÓëʵ¼ùÅàѵ
ij¾ü¹¤Ñо¿µ¥Î» MDA£¨Ä£ÐÍÇý¶¯¼Ü¹¹£©
ÖªÃûÏû·Ñ½ðÈÚ¹«Ë¾ ÁìÓòÇý¶¯Éè¼Æ
ÉîÛÚijÆû³µÆóÒµ Ä£ÐÍÇý¶¯µÄ·ÖÎöÉè¼Æ