±à¼ÍƼö: |
±¾ÆªÎÄÕÂÖ÷Òª½éÉÜÊ®¶þÒªËØ´ÓÀíÂÛÉÏ×ܽáÔÆÔÉúµÄÌØµã£¬ÔÚʵ¼Ê²Ù×÷ÖдÓ×Ô¼º¹«Ë¾µÄʵ¼Ê³ö·¢½øÐм¼ÊõÑ¡ÐÍ£¬Ï£Íû¶ÔÄúµÄѧϰÓÐËù°ïÖú¡£
±¾ÎÄÀ´×ÔÓÚ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»òÊÇÔËÐл·¾³ÌṩµÄÆäËû»úÖÆÀ´ÔËÐÐÕâÑùµÄ½ø³Ì¡£
×ܽ᣺ʮ¶þÒªËØ´ÓÀíÂÛÉÏ×ܽáÔÆÔÉúµÄÌØµã£¬ÔÚʵ¼Ê²Ù×÷Öл¹ÊÇÒª´Ó×Ô¼º¹«Ë¾µÄʵ¼Ê³ö·¢½øÐм¼ÊõÑ¡ÐÍ¡£ÁíÍâÊ®¶þÒªËØÔÚʵʩ¹ý³ÌÖв»Ò»¶¨ÒªÒ»²½µ½Î»£¬¿ÉÒÔÏÈ´Ó½â¾ö¹«Ë¾µÄÎÊÌâ½Ç¶ÈÈ¥Ó¦Óá£
|