芪æãªãèªè
ïŒ Herokuãã©ãããã©ãŒã éçºè
ã«ãã
The Twelve-Factor App Webã¢ããªã±ãŒã·ã§ã³éçºæ¹æ³è«ã®ç¿»èš³ã玹ä»ããŸãã ç§ã®ã³ã¡ã³ãã¯èšäºäžã«ãã¿ãã¬ã«ãã£ãŠé ãããŠããŸãã
ã¯ããã«
ä»æ¥ããœãããŠã§ã¢ã¯éåžžã
Webã¢ããªã±ãŒã·ã§ã³ãŸãã¯SaaSïŒSoftware
-as-a- ServiceïŒãšåŒã°ãããµãŒãã¹ã®åœ¢ã§é
åžãããŸãã 12ã®èŠå ã®é©çšã¯ã次ã®ãããªSaaSã¢ããªã±ãŒã·ã§ã³ãäœæããããã®æ¹æ³è«ã§ãã
- 宣èšåœ¢åŒã䜿çšããŠãã€ã³ã¹ããŒã«ããã³æ§æããã»ã¹ãèšè¿°ããŸããããã«ããããããžã§ã¯ãã«æ¥ç¶ããæ°ããéçºè
ã®æéãšãªãœãŒã¹ãæå°éã«æããããŸãã
- ã©ã³ã¿ã€ã éã®æ倧éã®ç§»æ€æ§ãåæãšãããªãã¬ãŒãã£ã³ã°ã·ã¹ãã ãšã®åæãããã
- ææ°ã®ã¯ã©ãŠããã©ãããã©ãŒã ã§ã®å±éã«é©ããŠããããµãŒããŒãã·ã¹ãã 管çã®å¿
èŠæ§ããªããªããŸãã
- éçºç°å¢ãšã©ã³ã¿ã€ã ç°å¢ã®äžäžèŽãæå°éã«æããŸããããã«ãããæ倧éã®æè»æ§ãåŸãããã«ã ç¶ç¶çãªå±é ïŒç¶ç¶çãªå±éïŒã䜿çšã§ããŸãã
- ãŸããéçºããŒã«ãã¢ãŒããã¯ãã£ãããã³ãã©ã¯ãã£ã¹ã倧å¹
ã«å€æŽããããšãªãæ¡åŒµã§ããŸãã
12ã®èŠå ã®æ¹æ³è«ã¯ãä»»æã®ããã°ã©ãã³ã°èšèªã§èšè¿°ããããµãŒãããŒãã£ãµãŒãã¹ïŒãããã³ã°ãµãŒãã¹ïŒïŒããŒã¿ããŒã¹ãã¡ãã»ãŒãžãã¥ãŒããã£ãã·ã¥ã¡ã¢ãªãªã©ïŒã®ä»»æã®çµã¿åããã䜿çšããã¢ããªã±ãŒã·ã§ã³ã«é©çšã§ããŸãã
èæ¯
ãã®ããã¥ã¡ã³ããžã®è²¢ç®è
ã¯ãæ°çŸã®ã¢ããªã±ãŒã·ã§ã³ã®éçºãšå±éã«çŽæ¥é¢äžãã
Herokuãã©ãããã©ãŒã ã§ã®äœæ¥äžã«æ°åäžã®ã¢ããªã±ãŒã·ã§ã³ã®éçºãå®è¡ãã¹ã±ãŒãªã³ã°ãéæ¥çã«ç®æããŸããã
ãã®ããã¥ã¡ã³ãã¯ãããŸããŸãªSaaSã¢ããªã±ãŒã·ã§ã³ãå®éã«äœ¿çšããã³èŠ³å¯ãããã¹ãŠã®çµéšããŸãšãããã®ã§ãã ãã®ããã¥ã¡ã³ãã¯ãã¢ããªã±ãŒã·ã§ã³éçºãžã®3ã€ã®çæ³çãªã¢ãããŒããçµã¿åããããã®ã§ããæéã®çµéã«äŒŽãã¢ããªã±ãŒã·ã§ã³ã®ææ©çæé·ã®ãã€ããã¯ã¹ãã¢ããªã±ãŒã·ã§ã³ã³ãŒãããŒã¹ã§äœæ¥ãã
ãœãããŠã§ã¢äŸµé£ã®åœ±é¿ãæé€ããéçºè
éã®ååã®ãã€ããã¯ã¹ã«ç¹ã«æ³šæãæããŸãã
ç§ãã¡ã®åæ©ã¯ãçŸä»£ã®ã¢ããªã±ãŒã·ã§ã³éçºã®å®è·µã§ééããããã€ãã®äœç³»çãªåé¡ã®èªèãé«ãããããã®åé¡ãè°è«ããããã®äžè¬çãªåºæ¬æŠå¿µãæäŸããé¢é£çšèªã§ãããã®åé¡ã«å¯Ÿããäžè¬çãªæŠå¿µã®è§£æ±ºçãæäŸããããšã§ãã ãã®åœ¢åŒã¯ãMartin Fowlerã®ã
Patterns of Enterprise Application Architecture and
Refactoringãã®æ¬ã«è§ŠçºãããŠããŸãã
ãã®ããã¥ã¡ã³ãã¯èª°ãèªãã¹ãã§ããïŒ
SaaSã¢ããªã±ãŒã·ã§ã³ãäœæããéçºè
ã ãã®ãããªã¢ããªã±ãŒã·ã§ã³ãå±éããã³ç®¡çãããšã³ãžãã¢ãžã®Opsã
12ã®èŠå
I.ã³ãŒãããŒã¹ããŒãžã§ã³ç®¡çã·ã¹ãã ã§ç£èŠããã1ã€ã®ã³ãŒãããŒã¹-è€æ°ã®å±é
IIã äŸåé¢ä¿äŸåé¢ä¿ãæ瀺çã«å®£èšããŠåé¢ãã
IIIã æ§æå®è¡æã«æ§æãä¿åãã
IVã ãµãŒãããŒãã£ãµãŒãã¹ïŒãããã³ã°ãµãŒãã¹ïŒãã©ã°å¯èœãªãªãœãŒã¹ãšããŠãµãŒãããŒãã£ã®ãµãŒãã¹ïŒãããã³ã°ãµãŒãã¹ïŒãæ€èšãã
V.ã¢ã»ã³ããªããªãªãŒã¹ãå®è£
ã¢ã»ã³ããªæ®µéãšå®è¡æ®µéãå³å¯ã«åé¢
VIã ããã»ã¹å
éšç¶æ
ãä¿æããªã1ã€ä»¥äžã®ããã»ã¹ãšããŠã¢ããªã±ãŒã·ã§ã³ãå®è¡ããŸãïŒã¹ããŒãã¬ã¹ïŒ
VIIã ããŒããã€ã³ãã£ã³ã°ããŒããã€ã³ãã«ãããµãŒãã¹ã®ãšã¯ã¹ããŒã
Viiiã 䞊è¡æ§ããã»ã¹ã§ã¢ããªã±ãŒã·ã§ã³ãã¹ã±ãŒãªã³ã°ãã
IXã 䜿ãæšãŠã¯ã€ãã¯ã¹ã¿ãŒããšæ£ããã·ã£ããããŠã³ã§ä¿¡é Œæ§ãæ倧å
X.ã¢ããªã±ãŒã·ã§ã³éçº/äœæ¥ããªãã£éçºç°å¢ãã¹ããŒãžã³ã°ç°å¢ãããã³æ¬çªç°å¢ãå¯èœãªéãåæ§ã«ä¿ã¡ãŸãã
Xiã ãã®ã³ã°ãã°ãã€ãã³ãã¹ããªãŒã ãšèãã
XIIã 管çã¿ã¹ã¯ã¯ã³ã¿ã€ã ããã»ã¹ã䜿çšããŠç®¡ç/管çã¿ã¹ã¯ãå®è¡ãã
I.ã³ãŒãããŒã¹
ããŒãžã§ã³ç®¡çã·ã¹ãã ã§ç£èŠããã1ã€ã®ã³ãŒãããŒã¹-è€æ°ã®å±é
Git ã
Mercurialã Subversionãªã©ã®ããŒãžã§ã³ç®¡çã·ã¹ãã ã§ã¯ã12ã®èŠå ã®é©çšãåžžã«è¿œè·¡ãããŸãã ç£èŠå¯Ÿè±¡ããŒãžã§ã³ã®ããŒã¿ããŒã¹ã®ã³ããŒã¯
ã³ãŒããªããžããªãšåŒã°ããå€ãã®å Žåã
ã³ãŒãã¬ããŸãã¯åã«
ã¬ãïŒã¬ãïŒã«ççž®ãã
ãŸããã³ãŒãããŒã¹ã¯ãåäžã®ãªããžããªïŒSubvertionãªã©ã®éäžåããŒãžã§ã³ç®¡çã·ã¹ãã ïŒãŸãã¯å
±éã®åæã³ããããæã€å€ãã®ãªããžããªïŒGitãªã©ã®åæ£åããŒãžã§ã³ç®¡çã·ã¹ãã ïŒã§ãã

ã³ãŒãããŒã¹ãšã¢ããªã±ãŒã·ã§ã³ã®éã«ã¯åžžã«1察1ã®å¯Ÿå¿ããããŸãã
- è€æ°ã®ã³ãŒãããŒã¹ãããå Žåãããã¯ã¢ããªã±ãŒã·ã§ã³ã§ã¯ãªããåæ£ã·ã¹ãã ã§ãã åæ£ã·ã¹ãã ã®åã³ã³ããŒãã³ãã¯ã¢ããªã±ãŒã·ã§ã³ã§ãããåã³ã³ããŒãã³ãã¯12ã®èŠå ã«åå¥ã«å¯Ÿå¿ã§ããŸãã
- è€æ°ã®ã¢ããªã±ãŒã·ã§ã³ãåãã³ãŒããå
±æããŠãããšããäºå®ã¯ã12ã®èŠå ã«éåããŠããŸãã ãã®ç¶æ³ã§ã®è§£æ±ºçã¯ãäŸåé¢ä¿ãããŒãžã£ãŒãä»ããŠæ¥ç¶ã§ããã©ã€ãã©ãªã«å
±éã³ãŒããå²ãåœãŠãããšã§ãã
åã¢ããªã±ãŒã·ã§ã³ã«ã¯1ã€ã®ã³ãŒãããŒã¹ãããããŸããããåãã¢ããªã±ãŒã·ã§ã³ã®å€ãã®å±éãååšããå¯èœæ§ããããŸãã
ãããã€ãããã¢ããªã±ãŒã·ã§ã³ïŒãããã€ïŒã¯ãã¢ããªã±ãŒã·ã§ã³ã®å®è¡äžã®ã€ã³ã¹ã¿ã³ã¹ã§ãã éåžžãããã¯äœæ¥ãµã€ãå±éãš1ã€ä»¥äžã®äžéãµã€ãå±éã§ãã ããã«ãåéçºè
ã¯èªåã®ããŒã«ã«éçºç°å¢ã§å®è¡ãããŠããã¢ããªã±ãŒã·ã§ã³ã®ã³ããŒãæã¡ãããããããããã€æžã¿ã¢ããªã±ãŒã·ã§ã³ïŒãããã€ïŒãšããŠã®è³æ Œãæã£ãŠããŸãã
ã³ãŒãããŒã¹ã¯ãã¹ãŠã®å±éã§åãã§ããå¿
èŠããããŸãããåãã³ãŒãããŒã¹ã®ç°ãªãããŒãžã§ã³ãåå±éã§å®è¡ã§ããŸãã ããšãã°ãéçºè
ã«ã¯ãäžéå±éã«ãŸã è¿œå ãããŠããªãå€æŽãããã€ãããå ŽåããããŸãã äžéå±éã«ã¯ãéçšå±éã«ãŸã è¿œå ãããŠããªãå€æŽãããã€ãããå ŽåããããŸãã ãã ãããããã®ãããã€ã¡ã³ãã¯ãã¹ãŠåãã³ãŒãããŒã¹ã䜿çšãããããåãã¢ããªã±ãŒã·ã§ã³ã®ç°ãªããããã€ã¡ã³ããšããŠèå¥ããããšãã§ããŸãã
IIã äŸåé¢ä¿
äŸåé¢ä¿ãæ瀺çã«å®£èšããŠåé¢ãã
ã»ãšãã©ã®ããã°ã©ãã³ã°èšèªã«ã¯ãPerlã®
CPANãRubyã®
Rubygemsãªã©ãã©ã€ãã©ãªãé
åžããããã®ããã±ãŒãžãããŒãžã£ãŒãä»å±ããŠããŸãã ããã±ãŒãžãããŒãžã£ãŒã«ãã£ãŠã€ã³ã¹ããŒã«ãããã©ã€ãã©ãªã¯ãã·ã¹ãã å
šäœããã¢ã¯ã»ã¹å¯èœã«ã€ã³ã¹ããŒã«ããïŒãããããã·ã¹ãã ããã±ãŒãžãïŒããã¢ããªã±ãŒã·ã§ã³ãå«ããã£ã¬ã¯ããªå
ã®ã¢ããªã±ãŒã·ã§ã³ã§ã®ã¿äœ¿çšã§ããŸãïŒããããããã³ããŒãããã³ããã³ãã«ãïŒã
12ã®èŠå ã®é©çšã¯ãã·ã¹ãã å
šäœã§å©çšå¯èœãªæé»çã«å©çšå¯èœãªããã±ãŒãžã«æ±ºããŠäŸåããŸããã ã¢ããªã±ãŒã·ã§ã³ã¯ã
äŸåé¢ä¿å®£èšãããã§ã¹ãã䜿çšããŠããã¹ãŠã®äŸåé¢ä¿ãå®å
šãã€æ£ç¢ºã«
宣èšããŸãã ããã«ãã©ã³ã¿ã€ã
äŸåé¢ä¿åé¢ããŒã«ã䜿çšããŠãæé»çãªäŸåé¢ä¿ãåšå²ã®ã·ã¹ãã ãããæŒãåºãªããããã«ããŸãã äŸåé¢ä¿ã®å®å
šãã€æ瀺çãªä»æ§ã¯ãã¢ããªã±ãŒã·ã§ã³ã®éçºãšéçšã®äž¡æ¹ã§åãæ¹æ³ã§é©çšãããŸãã
ããšãã°ãRuby
Gem Bundlerã¯ã
Gemfile
ããäŸåé¢ä¿ã宣èšããããã®ãããã§ã¹ã圢åŒãšããŠäœ¿çšããäŸåé¢ä¿ãåé¢ããããã®
bundle exec
ã䜿çšããŸãã Pythonã«ã¯ããããã®ã¿ã¹ã¯ã®ããã®2ã€ã®ç°ãªãããŒã«ããããŸãã宣èšã«
ã¯Pipã䜿çšãããåé¢ã«ã¯
Virtualenvã䜿çšãããŸãã Cã«ãäŸåé¢ä¿ã宣èšããããã®
Autoconfããããéçãã€ã³ãã£ã³ã°ã¯äŸåé¢ä¿ã®åé¢ãæäŸã§ããŸãã ã©ã®ããŒã«ãããã䜿çšãããã«é¢ä¿ãªããäŸåé¢ä¿ã®å®£èšãšåé¢ã¯åžžã«äžç·ã«äœ¿çšããå¿
èŠããããŸãããã®ãã¡ã®1ã€ã ãã§ã¯ã12ã®èŠå ãæºããã«ã¯äžååã§ãã
äŸåé¢ä¿ãæ瀺çã«å®£èšããå©ç¹ã®1ã€ã¯ãæ°ããéçºè
åãã«ã¢ããªã±ãŒã·ã§ã³ãç°¡åã«æ§æã§ããããšã§ãã æ°ããéçºè
ã¯ãã¢ããªã±ãŒã·ã§ã³ã®ã³ãŒãããŒã¹ãèªåã®ãã·ã³ã«ã³ããŒã§ããŸããå¿
èŠãªèŠä»¶ã¯ãèšèªã©ã³ã¿ã€ã ãšããã±ãŒãžãããŒãžã£ãŒã®ååšã®ã¿ã§ãã ã¢ããªã±ãŒã·ã§ã³ã³ãŒãã®å®è¡ã«å¿
èŠãªãã®ã¯ãã¹ãŠãç¹å®ã®
æ§æã³ãã³ãã䜿çšããŠ
æ§æã§ããŸã ã ããšãã°ãRuby / Bundlerã®å Žåãèšå®ã³ãã³ãã¯
bundle install
ã§ãClojure /
Leiningenã®å Žåã¯
lein deps
ã§ãã
ãŸãã12ã®èŠå ã®é©çšã¯ãã·ã¹ãã ããŒã«ã®æé»çãªååšã«äŸåããŸããã äŸãšããŠã¯ãImageMagickããã³
curl
ããã°ã©ã ã®èµ·åããããŸãã ãããã®ããŒã«ã¯å€ãã®ã·ã¹ãã ãŸãã¯ã»ãšãã©ã®ã·ã¹ãã ã«ååšããå¯èœæ§ããããŸãããã¢ããªã±ãŒã·ã§ã³ãå°æ¥åäœããå¯èœæ§ã®ãããã¹ãŠã®ã·ã¹ãã ã«ååšããããšããŸãã¯å¥ã®ã·ã¹ãã ã§èŠã€ãã£ãããŒãžã§ã³ãã¢ããªã±ãŒã·ã§ã³ãšäºææ§ããããã©ããã¯ä¿èšŒãããŸãã ã¢ããªã±ãŒã·ã§ã³ãã·ã¹ãã ããŒã«ãå®è¡ããå¿
èŠãããå Žåããã®ããŒã«ãã¢ããªã±ãŒã·ã§ã³ã«å«ããå¿
èŠããããŸãã
翻蚳è
ã®ã³ã¡ã³ããã®ä»ã®ããã±ãŒãžãããŒãžã£ãŒïŒ
åé¢ã®ããã«ã次ã®ãã®ã䜿çšã§ããŸãã
- Rubyã®RVM
- NodeJSã®NVM
- ãããŠã Dockerã«èšåããããšã¯ééããããŸãããDockerã䜿çšãããšãã·ã¹ãã å
šäœãã¢ããªã±ãŒã·ã§ã³ã«å¯ŸããŠãããŒã«ã«ãã«ãªããå®è¡æã«å¿
èŠãªäŸåé¢ä¿ã宣èšããŠåé¢ã§ããŸãã
IIIã æ§æ
å®è¡æã«æ§æãä¿åãã
ãããã€ã¡ã³ã ïŒéçºç°å¢ãäžéãããã€ã¡ã³ãããã³éçšãããã€ã¡ã³ãïŒã®éã§å€æŽã§ããã®ã¯ã¢ããªã±ãŒã·ã§ã³
æ§æã®ã¿ã§ãã ããã«ã¯ä»¥äžãå«ãŸããŸãïŒ
- ããŒã¿ããŒã¹ããã£ãã·ã¥ããã®ä»ã®ãµãŒãããŒãã£ãµãŒãã¹ãªã©ã®ãªãœãŒã¹æ¥ç¶èå¥å
- Amazon S3ãTwitterãªã©ã®å€éšãµãŒãã¹ã«æ¥ç¶ããããã®ãã°ã€ã³è©³çŽ°
- æ£èŠã®ãã¹ãåãªã©ã®å±éç°å¢åºæã®å€
ã¢ããªã±ãŒã·ã§ã³ã¯ãæ§æãã³ãŒãã®å®æ°ãšããŠä¿åããå ŽåããããŸãã ããã¯ã
æ§æãšã³ãŒãã®å³å¯ãªåé¢ãå¿
èŠãšãã12ã®èŠå ã®æ¹æ³è«ã«éåããŠã
ãŸã ã æ§æã¯ãããã€ã¡ã³ãéã§å€§ããç°ãªãå¯èœæ§ããããããã³ãŒããå€æŽããªãã§ãã ããã
æ§æãšã¢ããªã±ãŒã·ã§ã³ã³ãŒããæ£ããåé¢ãããŠãããã©ããã®ãªããã¹ãã¹ãã¯ããã©ã€ããŒãããŒã¿ãæãªãããšãªãããã€ã§ãã¢ããªã±ãŒã·ã§ã³ã³ãŒãããŒã¹ãèªç±ã«å©çšã§ãããšããäºå®ã§ãã
ãã®ãæ§æãã®å®çŸ©ã«ã¯ãRailsã®ãconfig / routes.rbããªã©ã®å
éšã¢ããªã±ãŒã·ã§ã³æ§æãã
Springã§ã® ã¡ã€ã³ã¢ãžã¥ãŒã«ã®æ¥ç¶æ¹æ³ã¯å«ãŸã
ãªãããšã«æ³šæããŠãã ããã ãã®ã¿ã€ãã®æ§æã¯ãããã€ã¡ã³ãéã§å€ãããªããããã³ãŒãå
ã«ä¿æããããšããå§ãããŸãã
å¥ã®èšå®æ¹æ³ã¯ãããŒãžã§ã³ç®¡çã·ã¹ãã ã«ä¿åãããŠããªãèšå®ãã¡ã€ã«ã䜿çšããããšã§ããããšãã°ãRailsã®ãconfig / database.ymlãã§ãã ããã¯ãã³ãŒãã«ä¿åãããŠããå®æ°ã®äœ¿çšã«å¯Ÿãã倧ããªæ¹åã§ããããã®æ¹æ³ã«ã¯ãŸã æ¬ ç¹ããããŸããèšå®ãã¡ã€ã«ã誀ã£ãŠãªããžããªã«ä¿åããã®ã¯ç°¡åã§ãã æ§æãã¡ã€ã«ãããŸããŸãªå Žæããã³ããŸããŸãªåœ¢åŒã§æ£ãã°ã£ãŠããåŸåããããŸããããã«ããããã¹ãŠã®èšå®ã1ãæã§è¡šç€ºããã³ç®¡çããããšãé£ãããªããŸãã ããã«ããããã®ãã¡ã€ã«ã®åœ¢åŒã¯éåžžãç¹å®ã®èšèªãŸãã¯ãã¬ãŒã ã¯ãŒã¯ã«åºæã§ãã
12åã®èŠçŽ ãé©çšãããšã ç°å¢å€æ° ïŒå€ãã®å Žå
env varsãŸãã¯
envã«ççž®ïŒã«
æ§æãä¿åãããŸã ã ç°å¢å€æ°ã¯ãã³ãŒããå€æŽããã«ãããã€ã¡ã³ãéã§ç°¡åã«å€æŽã§ããŸãã æ§æãã¡ã€ã«ãšã¯ç°ãªãã誀ã£ãŠããããã³ãŒããªããžããªã«ä¿åããããšã¯ã»ãšãã©ãããŸããã ãŸãããŠãŒã¶ãŒæ§æãã¡ã€ã«ãJavaã·ã¹ãã ããããã£ãªã©ã®ä»ã®æ§æã¡ã«ããºã ãšã¯ç°ãªãããããã¯èšèªããã³ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã«äŸåããªãæšæºã§ãã
æ§æ管çãžã®å¥ã®ã¢ãããŒãã¯ã°ã«ãŒãåã§ãã ã¢ããªã±ãŒã·ã§ã³ã¯ãRailsã®
development
ç°å¢ã
test
ç°å¢ã
production
ç°å¢ãªã©ãç¹å®ã®ãããã€ã¡ã³ãã®ååã«ã¡ãªãã§åä»ããããã°ã«ãŒãïŒå€ãã®å Žåãç°å¢ããšåŒã°ããïŒã«æ§æãã°ã«ãŒãåããŸãã ãã®æ¹æ³ã¯ååã«ã¹ã±ãŒã©ãã«ã§ã¯ãããŸãããç°ãªãã¢ããªã±ãŒã·ã§ã³ãããã€ã¡ã³ããäœæãããã»ã©ã
staging
ã
qa
ãªã©ã®æ°ããç°å¢åãå¿
èŠã«ãªããŸãã ãããžã§ã¯ããããã«å€§ãããªããšãéçºè
ã¯
joes-staging
ãªã©ã®ç¬èªã®ç¹å¥ãªç°å¢ãè¿œå ã§ããæ§æã®çµã¿åãããççºçã«å¢å ããã¢ããªã±ãŒã·ã§ã³ã®ãããã€ã¡ã³ãã®ç®¡çãéåžžã«è匱ã«ãªããŸãã
12ã®èŠå ã®ä»é²ã§ã¯ãç°å¢å€æ°ã¯ç¡é¢ä¿ãªã³ã³ãããŒã«ã§ãããåç°å¢å€æ°ã¯ä»ã®ç°å¢å€æ°ããå®å
šã«ç¬ç«ããŠããŸãã ãããã¯ãç°å¢ãã«ã°ã«ãŒãåãããããšã¯ãããŸãããã代ããã«å±éããšã«åå¥ã«ç®¡çãããŸãã ããã¯ããã®åç¶æéã«ããã£ãŠããå€ãã®ã¢ããªã±ãŒã·ã§ã³å±éã®èªç¶ãªå€èŠ³ã«æ²¿ã£ãŠåŸã
ã«æ¡å€§ããã¢ãã«ã§ãã
翻蚳è
ã®ã³ã¡ã³ãç°å¢å€æ°ãæäœããããã®ã¢ãžã¥ãŒã«ïŒ
IVã ãµãŒãããŒãã£ãµãŒãã¹ïŒãããã³ã°ãµãŒãã¹ïŒ
ãã©ã°å¯èœãªãªãœãŒã¹ãšããŠãµãŒãããŒãã£ã®ãµãŒãã¹ïŒãããã³ã°ãµãŒãã¹ïŒãæ€èšãã
ãµãŒãããŒãã£ãµãŒãã¹ãšã¯ããããã¯ãŒã¯ãä»ããŠã¢ããªã±ãŒã·ã§ã³ã§äœ¿çšã§ãããµãŒãã¹ã§ãããéåžžã®æäœã®äžéšãšããŠå¿
èŠã§ãã ããšãã°ãããŒã¿ãŠã§ã¢ããŠã¹ïŒäŸïŒ
MySQLã
CouchDB ïŒãã¡ãã»ãŒãžãã¥ãŒã·ã¹ãã ïŒäŸïŒ
RabbitMQããã³
Beanstalkd ïŒãéä¿¡ã¡ãŒã«SMTPãµãŒãã¹ïŒäŸïŒ
Postfix ïŒããã£ãã·ã¥ã·ã¹ãã ïŒäŸïŒ
Memcached ïŒã
åŸæ¥ãããŒã¿ããŒã¹ãªã©ã®ãµãŒãããŒãã£ãµãŒãã¹ã¯ãã¢ããªã±ãŒã·ã§ã³ãå±éããã·ã¹ãã 管çè
ãšåã管çè
ã«ãã£ãŠç®¡çãããŠããŸããã ããŒã«ã«ãµãŒãã¹ã«å ããŠãã¢ããªã±ãŒã·ã§ã³ã¯ãµãŒãããŒãã£ãæäŸããã³ç®¡çãããµãŒãã¹ã䜿çšã§ããŸãã äŸã«ã¯ãSMTPãµãŒãã¹ïŒ
æ¶å°ãªã©ïŒãã¡ããªãã¯ã³ã¬ã¯ã·ã§ã³ãµãŒãã¹ïŒ
New Relicã
Logglyãªã© ïŒããã€ããªããŒã¿ã¹ãã¢ïŒ
Amazon S3ãªã©ïŒãããŸããŸãªãµãŒãã¹APIïŒ
Twitter ã
Google Mapsã Last.fmãªã© ïŒã®äœ¿çšãå«ãŸããŸãã ã
12ã®èŠå ã®ã¢ããªã±ãŒã·ã§ã³ã³ãŒãã¯ãããŒã«ã«ãµãŒãã¹ãšãµãŒãããŒãã£ãµãŒãã¹ãåºå¥ããŸããã ã¢ããªã±ãŒã·ã§ã³ã®å Žåããããã¯ãããããã©ã°ã€ã³å¯èœãªãªãœãŒã¹ã§ãããURLã«ãã£ãŠããŸãã¯
æ§æã«ä¿åãããŠããå¥ã®å Žæ/è³æ Œæ
å ±ã®ãã¢ã«ãã£ãŠã¢ã¯ã»ã¹ã§ã
ãŸã ã 12ã®èŠå ã®åã¢ããªã±ãŒã·ã§ã³
ãããã€ã¡ã³ã㯠ãã¢ããªã±ãŒã·ã§ã³ã³ãŒããå€æŽããããšãªããããŒã«ã«MySQLããŒã¿ããŒã¹ããµãŒãããŒãã£ã®ç®¡ç察象ããŒã¿ããŒã¹ïŒ
Amazon RDSãªã©ïŒã«çœ®ãæããããšãã§ããã¯ãã§ãã åæ§ã«ãã³ãŒããå€æŽããã«ããŒã«ã«SMTPãµãŒããŒããµãŒãããŒãã£ïŒæ¶å°ãªã©ïŒã«çœ®ãæããããšãã§ããŸãã ã©ã¡ãã®å Žåããæ§æå
ã®ãªãœãŒã¹èå¥åãå€æŽããã ãã§ãã
ç°ãªããµãŒãããŒãã£ãµãŒãã¹ã¯ãããã
ãªãœãŒã¹ã§ãã ããšãã°ãMySQLããŒã¿ããŒã¹ã¯ãªãœãŒã¹ã§ããã2ã€ã®MySQLããŒã¿ããŒã¹ïŒã¢ããªã±ãŒã·ã§ã³ã¬ãã«ã§ã®æçåã«äœ¿çšïŒã¯2ã€ã®å¥åã®ãªãœãŒã¹ãšããŠé©æ Œã§ãã 12ã®èŠå ã®é©çšã«ããããããã®ããŒã¿ããŒã¹ã¯
æ¥ç¶ããããªãœãŒã¹ã§ãããšèŠãªãããŸããããã¯ãããããæ¥ç¶ãããŠãããããã€ã¡ã³ããšã®åŒ±ãæ¥ç¶ã瀺ããŠããŸãã

å¿
èŠã«å¿ããŠããªãœãŒã¹ãå±éã«æ¥ç¶ããå±éããåæã§ããŸãã ããšãã°ãããŒããŠã§ã¢ã®åé¡ãåå ã§ã¢ããªã±ãŒã·ã§ã³ããŒã¿ããŒã¹ãæ£ããæ©èœããªãå Žåã管çè
ã¯æåŸã®ããã¯ã¢ãããã埩å
ãããæ°ããããŒã¿ããŒã¹ãµãŒããŒãèµ·åã§ããŸãã çŸåšã®äœæ¥ããŒã¿ããŒã¹ãåæããæ°ããããŒã¿ããŒã¹ãæ¥ç¶ããããšãã§ããŸã-ãããã¯ãã¹ãŠãã³ãŒããå€æŽããããšãªãè¡ãããŸãã
V.ã¢ã»ã³ããªããªãªãŒã¹ãå®è£
ã¢ã»ã³ããªæ®µéãšå®è¡æ®µéãå³å¯ã«åé¢
ã³ãŒãããŒã¹ã¯ ã次ã®3ã€ã®æ®µéã§å±éã«å€æãããŸãïŒéçºçšã®å±éã¯èæ
®ãããŸããïŒ
- ã¢ã»ã³ããªãã§ãŒãºã¯ãã³ãŒããªããžããªãã¢ã»ã³ããªãšåŒã°ããå®è¡å¯èœããã±ãŒãžã«å€æããå€æã§ãã å±éããã»ã¹ã§æå®ãããããŒãžã§ã³ã®ã³ãŒãã䜿çšããŠããã«ããã§ãŒãºã¯ãµãŒãããŒãã£ã®äŸåé¢ä¿ãããŒããããã€ããªãã¡ã€ã«ãšã¢ã»ãããã³ã³ãã€ã«ããŸãã
- ãªãªãŒã¹ãã§ãŒãºã¯ãã¢ã»ã³ããªãã§ãŒãºã§ååŸããã¢ã»ã³ããªãåãå
¥ããçŸåšã®å±éæ§æãšçµã¿åãããŸã ã çµæã®ãªãªãŒã¹ã«ã¯ã¢ã»ã³ããªãšæ§æãå«ãŸããå®è¡æã«ããã«èµ·åããæºåãã§ããŠããŸãã
- ã©ã³ã¿ã€ã ïŒãã©ã³ã¿ã€ã ããšãåŒã°ããïŒã¯ãç¹å®ã®ãªãªãŒã¹ããç¹å®ã®ã¢ããªã±ãŒã·ã§ã³ããã»ã¹ã®ã»ãããèµ·åããããšã«ãããã©ã³ã¿ã€ã ã§ã¢ããªã±ãŒã·ã§ã³ãèµ·åããŸãã
12ã®èŠå ã®é©çšã§ã¯ãã¢ã»ã³ããªããªãªãŒã¹ãå®è¡ã®å段éãå³å¯ã«åé¢ããŠããŸãã ããšãã°ãå®è¡æã«ã³ãŒããå€æŽããããšã¯ã§ããŸããããããã®å€æŽããã«ããã§ãŒãºã«æ»ãæ¹æ³ããªãããã§ãã
å±éããŒã«ã¯ãååãšããŠãªãªãŒã¹ç®¡çããŒã«ã§ãããéèŠãªããšã«ã以åã®ãªãªãŒã¹ã«ããŒã«ããã¯ããæ©äŒãæäŸããŸãã ããšãã°ã
Capistranoãããã€ã¡ã³ãããŒã«ã¯ãreleasesãšãããã£ã¬ã¯ããªã®ãµããã£ã¬ã¯ããªã«ãªãªãŒã¹ãæ ŒçŽããŸããçŸåšã®ãªãªãŒã¹ã¯ãçŸåšã®ãªãªãŒã¹ã®ãã£ã¬ã¯ããªãžã®ã·ã³ããªãã¯ãªã³ã¯ã§ãã Capistrano
rollback
ããŒã ã¯ã以åã®ãªãªãŒã¹ã«ãã°ããããŒã«ããã¯ããããšãå¯èœã«ããŸãã
åãªãªãŒã¹ã«ã¯ããªãªãŒã¹ã¿ã€ã ã¹ã¿ã³ãïŒäŸ
2015-04-06-15:42:17
ïŒãŸãã¯å¢å ããçªå·ïŒäŸïŒ
v100
ïŒãªã©ã®äžæã®èå¥åãå¿
èŠã§ãã ãªãªãŒã¹ã¯è¿œå ã®ã¿å¯èœã§ãåãªãªãŒã¹ã¯äœæåŸã«å€æŽã§ããŸããã æ°ãããªãªãŒã¹ãäœæããã«ã¯ãå€æŽãå¿
èŠã§ãã
ã¢ã»ã³ããªã¯ãæ°ããã³ãŒããå±éããããã³ã«ã¢ããªã±ãŒã·ã§ã³éçºè
ã«ãã£ãŠéå§ãããŸãã å察ã«ãå®è¡ãã§ãŒãºã®éå§ã¯ããµãŒããŒã®åèµ·åããããã»ã¹ãããŒãžã£ãŒã«ãããã©ãŒã«ãããã»ã¹ã®åèµ·åãªã©ã®å Žåã«èªåçã«çºçããŸãã ãããã£ãŠãå®è¡ãã§ãŒãºã¯æè¡çã«å¯èœãªéãã·ã³ãã«ã«ããå¿
èŠããããŸããã¢ããªã±ãŒã·ã§ã³ã®èµ·åã劚ããå¯èœæ§ã®ããåé¡ã¯ãå©çšå¯èœãªéçºè
ãããªãçå€äžã«çºçããå¯èœæ§ãããããã§ãã å±éãéå§ããéçºè
ã«ã¯èãããããšã©ãŒãåžžã«è¡šç€ºãããããããã«ããã§ãŒãºã¯ããè€éã«ãªãå¯èœæ§ããããŸãã
VIã ããã»ã¹
ã¹ããŒãã¬ã¹ç¶æ
ãä¿æããªã1ã€ä»¥äžã®ããã»ã¹ãšããŠã¢ããªã±ãŒã·ã§ã³ãå®è¡ããŸã
ã¢ããªã±ãŒã·ã§ã³ã¯ãå®è¡æã«1ã€ä»¥äžã®
ããã»ã¹ãšããŠå®è¡ãã
ãŸã ã
æãåçŽãªå Žåãã³ãŒãã¯ç¬ç«ããã¹ã¯ãªããã§ãããã©ã³ã¿ã€ã ã¯èšèªã©ã³ã¿ã€ã ãã€ã³ã¹ããŒã«ãããéçºè
ã®ã©ãããããã§ãããããã»ã¹ã¯ã³ãã³ãã©ã€ã³ããèµ·åãããŸãïŒããšãã°ã
python my_script.py
ããã«ïŒã å¥ã®æ¥µç«¯ãªãªãã·ã§ã³ã¯
ãå¿
èŠãªæ°ã®ã€ã³ã¹ã¿ã³ã¹ã§èµ·åãããå€ãã®
ã¿ã€ãã®ããã»ã¹ã䜿çšã§ããè€éãªã¢ããªã±ãŒã·ã§ã³ã®å®çšçãªå±éã§ãã
12ã®èŠå ã®ã¢ããªã±ãŒã·ã§ã³ããã»ã¹ã¯ãå
éšç¶æ
ãä¿æããïŒã¹ããŒãã¬ã¹ïŒã å
±æããŒã¿ãæã¡ãŸããïŒshare-nothingïŒ ã ä¿åããå¿
èŠã®ããããŒã¿ã¯ãéåžžã¯ããŒã¿ããŒã¹å
ã®ã¹ããŒããã«ãª
ãµãŒãããŒãã£ãµãŒãã¹ã«ä¿åããå¿
èŠããããŸãã
ããã»ã¹ã¡ã¢ãªãšãã¡ã€ã«ã·ã¹ãã ã¯ãåäžã®ãã©ã³ã¶ã¯ã·ã§ã³ã®äžæãã£ãã·ã¥ãšããŠäœ¿çšã§ããŸãã ããšãã°ã倧ããªãã¡ã€ã«ãããŒã¿ããŒã¹ã«ããŒããåŠçãä¿åããŸãã 12ã®èŠå ã®é©çšã¯ãã¡ã¢ãªãŸãã¯ãã£ã¹ã¯ã«ãã£ãã·ã¥ããããã®ã次ã®ãªã¯ãšã¹ããŸãã¯ã¿ã¹ã¯ã§å©çšã§ããããšãæå³ãããã®ã§ã¯ãããŸãã-å€æ°ã®å€æ§ãªããã»ã¹ã§ã¯ã次ã®ãªã¯ãšã¹ããå¥ã®ããã»ã¹ã«ãã£ãŠåŠçãããå¯èœæ§ãé«ãã§ãã 1ã€ã®ããã»ã¹ãå®è¡ãããŠããå Žåã§ããïŒå±éãæ§æã®å€æŽããŸãã¯ããã»ã¹ãå¥ã®ç©çããã€ã¹ã«è»¢éããããšã«ããïŒåèµ·åãããšããã¹ãŠã®ããŒã«ã«ïŒã¡ã¢ãªããã¡ã€ã«ã·ã¹ãã ïŒç¶æ
ãç Žå£ãããŸãã
ã¢ã»ããããã«ãŒ ïŒ
Jammitã
django-compressorãªã© ïŒã¯ããã¡ã€ã«ã·ã¹ãã ãã³ã³ãã€ã«æžã¿ãªãœãŒã¹ã®ãã£ãã·ã¥ãšããŠäœ¿çšããŸãã 12ã®èŠå ã®ã¢ããªã±ãŒã·ã§ã³ã¯ãå®è¡æã§ã¯ãªããããšãã°
Railsã¢ã»ãããã€ãã©ã€ã³ã®ããã«ã
ãã«ããã§ãŒãºäžã«ãã®ã³ã³ãã€ã«ãè¡ãããšã奜ã¿ãŸãã
äžéšã®Webã·ã¹ãã ã¯
ãã¹ãã£ãããŒã»ãã·ã§ã³ãã«äŸåããŠã
ãŸããã€ãŸããã¢ããªã±ãŒã·ã§ã³ããã»ã¹ã¡ã¢ãªã«ãŠãŒã¶ãŒã»ãã·ã§ã³ããŒã¿ããã£ãã·ã¥ããåããŠãŒã¶ãŒããã®åŸç¶ã®ãªã¯ãšã¹ããåãããã»ã¹ã«ãªãã€ã¬ã¯ããããããšãæ³å®ããŠããŸãã ã¹ãã£ãããŒã»ãã·ã§ã³ã¯12ã®èŠå ã«éåããããã䜿çšãããäŸåãããããªãã§ãã ããã ãŠãŒã¶ãŒã»ãã·ã§ã³ããŒã¿ã¯ã
Memcachedã
Redisãªã©ãã¹ãã¬ãŒãžæéãå¶éããæ©èœãæäŸããããŒã¿ãŠã§ã¢ããŠã¹ã®è¯ãåè£ã§ãã
VIIã ããŒããã€ã³ãã£ã³ã°
ããŒããã€ã³ãã«ãããµãŒãã¹ã®ãšã¯ã¹ããŒã
Webã¢ããªã±ãŒã·ã§ã³ã¯WebãµãŒããŒã³ã³ããå
ã§å®è¡ãããå ŽåããããŸãã ããšãã°ãPHPã¢ããªã±ãŒã·ã§ã³ã¯
Apache HTTPDå
ã®ã¢ãžã¥ãŒã«ãšããŠèµ·åã§ããJavaã¢ããªã±ãŒã·ã§ã³ã¯
Tomcatå
ã§èµ·åã§ããŸãã
12èŠçŽ ã¢ããªã±ãŒã·ã§ã³ã¯å®å
šã«èªå·±å®çµåã§ãããWebãµãŒãã¹ãäœæããããã«å®è¡æã«WebãµãŒããŒãæ¿å
¥ããå¿
èŠã¯ãããŸããã Webã¢ããªã±ãŒã·ã§ã³
ã¯ãããŒãã«ãã€ã³ãããŠHTTPãµãŒãã¹ããšã¯ã¹ããŒããããã®ããŒãã«å°çããèŠæ±ããªãã¹ã³ããŸãã
ããŒã«ã«éçºäžã«ãéçºè
ã¯ãã©ãŒã ã®URLã«ç§»åããŸã
localhost:5000/
localhost:5000/
圌ã®ã¢ããªã±ãŒã·ã§ã³ãæäŸãããµãŒãã¹ã«ã¢ã¯ã»ã¹ããŸãã ãããã€ããããšãã«ãŒãã£ã³ã°ã¬ã€ã€ãŒã¯ãããªãã¯ãã¹ããžã®ãªã¯ãšã¹ããåŠçããããããããŒãããŠã³ãWebã¢ããªã±ãŒã·ã§ã³ã«ãªãã€ã¬ã¯ãããŸãã
ããã¯éåžž
ãäŸåé¢ä¿å®£èšã䜿çšã
㊠ãPythonã®
Tornado ãRubyã®
Thin ãJavaããã³ãã®ä»ã®JVMããŒã¹ã®èšèªã®
Jettyãªã©ã®ã¢ããªã±ãŒã·ã§ã³ã«WebãµãŒããŒã©ã€ãã©ãªãè¿œå ããããšã«ãã£ãŠè¡ãããŸãã ããã¯ã
ãŠãŒã¶ãŒç©ºé ãã€ãŸãã¢ããªã±ãŒã·ã§ã³ã³ãŒãã§å®å
šã«çºçããŸãã ã©ã³ã¿ã€ã ãšã®å¥çŽã¯ãèŠæ±ãåŠçããããã«ã¢ããªã±ãŒã·ã§ã³ãããŒãã«ãã€ã³ãããããšã§ãã
ããŒããã€ã³ãã£ã³ã°ãä»ããŠãšã¯ã¹ããŒãã§ãããµãŒãã¹ã¯HTTPã ãã§ã¯ãããŸããã ã»ãšãã©ãã¹ãŠã®ã¿ã€ãã®ãµãŒããŒãœãããŠã§ã¢ã¯ãããŒãã«ãã€ã³ããããçä¿¡èŠæ±ãåŸ
æ©ããããã»ã¹ãšããŠå®è¡ã§ããŸãã ãã®äŸã«ã¯ã
ejabberd ïŒ
XMPPãããã³ã«ãæäŸïŒããã³
Redis ïŒ
Redisãããã³ã«ãæäŸïŒãå«ãŸããŸãã
ãŸããããŒããã€ã³ãã¢ãããŒãã¯ãæ¶è²»ã¢ããªã±ãŒã·ã§ã³ã®æ§æã§ãµãŒãããŒãã£ã¢ããªã±ãŒã·ã§ã³ã®URLããªãœãŒã¹èå¥åãšããŠæäŸããããšã«ããã1ã€ã®ã¢ããªã±ãŒã·ã§ã³ãå¥ã®ã¢ããªã±ãŒã·ã§ã³ã®
ãµãŒãããŒãã£ãµãŒãã¹ãšããŠæ©èœã§ããããšã«ã泚æããŠãã ããã
Viiiã 䞊è¡æ§
ããã»ã¹ã§ã¢ããªã±ãŒã·ã§ã³ãã¹ã±ãŒãªã³ã°ãã
èµ·ååŸã®ã³ã³ãã¥ãŒã¿ãŒããã°ã©ã ã¯ã1ã€ä»¥äžã®äœæ¥ããã»ã¹ã§ãã æŽå²çã«ãWebã¢ããªã±ãŒã·ã§ã³ã¯ããŸããŸãªåœ¢åŒã®ããã»ã¹å®è¡ãè¡ã£ãŠããŸããã ããšãã°ãPHPããã»ã¹ã¯Apacheåããã»ã¹ãšããŠå®è¡ãããçä¿¡èŠæ±ãåŠçããã®ã«å¿
èŠãªéã§ãªã³ããã³ãã§å®è¡ãããŸãã Javaããã»ã¹ã¯å察ã®ã¢ãããŒãã䜿çšããŸããJVMã¯ãèµ·åæã«å€§éã®ã·ã¹ãã ãªãœãŒã¹ïŒããã»ããµãšã¡ã¢ãªïŒãäºçŽããã¹ã¬ããã䜿çšããŠå
éšã®äžŠååŠçã管çããåäžã®ã¢ããªã·ãã¯ã¡ã¿ããã»ã¹ã§ãã ã©ã¡ãã®å Žåããå®è¡äžã®ããã»ã¹ã¯ã¢ããªã±ãŒã·ã§ã³éçºè
ã«æå°éããèŠããŸããã
12ã®èŠå ã®ä»é²ã§ã¯ãããã»ã¹ã¯äžæµã®ãšã³ãã£ãã£ã§ãã 12åã®èŠçŽ ãé©çšããããã»ã¹ã¯ã
ããŒã¢ã³ãå®è¡ããããã®UNIXããã»ã¹ã¢ãã«ãã匷ã¿ãåããŸããã ãã®ã¢ãã«ã䜿çšãããšãéçºè
ã¯ããŸããŸãªã¯ãŒã¯ããŒããåŠçããããã«ãåã¿ã€ãã®äœæ¥ã«ç¬èªã®
ã¿ã€ãã®ããã»ã¹ãå²ãåœãŠãå¿
èŠãããããã«ã¢ããªã±ãŒã·ã§ã³ãèšèšã§ã
ãŸã ã ããšãã°ãHTTPèŠæ±ã¯Webããã»ã¹ã§åŠçã§ããé·ãããã¯ã°ã©ãŠã³ãã¿ã¹ã¯ã¯ã¯ãŒã¯ãããŒã§åŠçãããŸãã
ããã¯ã次ã®ãããªããŒã«ã§ä»®æ³ãã·ã³ãŸãã¯éåæ/ã€ãã³ãã¢ãã«ã®å®è£
ãæµããå
éšå€éåã
ã®ããã»ã¹ã䜿çšããå¯èœæ§ãæé€ãããã®ã§ã¯ãªãEventMachineããã€ã¹ããšã®Node.jsããã ããåã
ã®ä»®æ³ãã·ã³ã¯éãããç¯å²ã§ããã¹ã±ãŒãªã³ã°ã§ããªãããïŒåçŽã¹ã±ãŒãªã³ã°ïŒãã¢ããªã±ãŒã·ã§ã³ã¯ç°ãªãç©çãã·ã³ã§è€æ°ã®ããã»ã¹ãšããŠå®è¡ã§ããå¿
èŠããããŸããããã»ã¹ããŒã¹ã®ã¢ãã«ã¯ãã¹ã±ãŒãªã³ã°ã«é¢ããŠã¯æ¬åœã«èŒããŠããŸããå
±æããŒã¿ã®æ¬ åŠãš12ã®èŠå ã®ã¢ããªã±ãŒã·ã§ã³ããã»ã¹ã®æ°Žå¹³åé¢åæå®è¡æ§ã®è¿œå ã¯ãã·ã³ãã«ã§ä¿¡é Œæ§ã®é«ãæäœã§ããããŸããŸãªã¿ã€ãã®ããã»ã¹ã®é
åãšåã¿ã€ãã®ããã»ã¹ã®æ°ã¯ãããã»ã¹åœ¢æãšåŒã°ããŸãã12èŠçŽ ã®ã¢ããªã±ãŒã·ã§ã³ããã»ã¹ãæªéåããŠPIDãã¡ã€ã«ãäœæããããšã¯ã§ããŸããã代ããã«ããªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã®ããã»ã¹ãããŒãžã£ãŒïŒUpstartãã¯ã©ãŠããã©ãããã©ãŒã äžã®åæ£ããã»ã¹ãããŒãžã£ãŒãéçºäžã®Foremanãªã©ã®ããŒã«ïŒã«äŸåããŠãåºåã¹ããªãŒã ã管çããããã»ã¹ã®ã¯ã©ãã·ã¥ã«å¯Ÿå¿ãããŠãŒã¶ãŒãéå§ããåèµ·åãŸãã¯ã·ã£ããããŠã³ãåŠçããå¿
èŠããããŸãã
IXã䜿ãæšãŠ
ã¯ã€ãã¯ã¹ã¿ãŒããšæ£ããã·ã£ããããŠã³ã§ä¿¡é Œæ§ãæ倧å
12ã®èŠå ã®é©çšããã»ã¹ã¯1åéãã§ããã€ãŸããçŸæç¹ã§ã¯èª°ã§ãéå§ããã³åæ¢ã§ããŸããããã¯ãå®å®ããæè»ãªã¹ã±ãŒãªã³ã°ãã³ãŒãã®å€æŽãšæ§æã®è¿
éãªå±éãããã³éçšå±éã®ä¿¡é Œæ§ã«è²¢ç®ããŸããããã»ã¹ã¯ãèµ·åæéãæå°éã«æããããã«ããå¿
èŠããããŸããçæ³çã«ã¯ãããã»ã¹ã¯ãéå§ã³ãã³ããå®è¡ãããæç¹ãããããã»ã¹ãéå§ãããŠèŠæ±ãŸãã¯ã¿ã¹ã¯ãåãå
¥ããæºåãæŽããŸã§ãæ°ç§ããè²»ããã¹ãã§ã¯ãããŸãããèµ·åæéãçãããããªãªãŒã¹ã®æè»æ§ãåäžããŸãããã³ã¹ã±ãŒãªã³ã°ãããã«ãããã»ã¹ãããŒãžã£ãŒã¯å¿
èŠã«å¿ããŠããã»ã¹ãæ°ããç©çãã·ã³ã«èªç±ã«ç§»åã§ãããããããä¿¡é Œæ§ãé«ããªããŸããããã»ã¹ã¯ãããã»ã¹ãããŒãžã£ããSIGTERMã·ã°ãã«ãåä¿¡ãããšãã«æ£ããçµäºããå¿
èŠããããŸãã Webããã»ã¹ã®å ŽåããµãŒãã¹ããŒãã®ãªãã¹ã³ãåæ¢ããïŒã€ãŸããæ°ããèŠæ±ãæåŠããïŒããšã§æ£ããã·ã£ããããŠã³ãå®çŸãããŸããããã«ãããçŸåšã®èŠæ±ãå®äºããŠããå®äºã§ããŸãããã®ã¢ãã«ã¯ãHTTPãªã¯ãšã¹ããçãïŒæ°ç§ä»¥å
ïŒãšæ³å®ããŠããŸããé·ããªã¯ãšã¹ãã®å Žåãã¯ã©ã€ã¢ã³ãã¯æ¥ç¶ã倱ããããšãã«ã¹ã ãŒãºã«åæ¥ç¶ãè©Šã¿ãå¿
èŠããããŸããããã¯ã°ã©ãŠã³ãã¿ã¹ã¯ïŒã¯ãŒã«ãŒïŒãå®è¡ããããã»ã¹ã®å ŽåãçŸåšã®ã¿ã¹ã¯ãã¿ã¹ã¯ãã¥ãŒã«æ»ãããšã«ãããæ£ããã·ã£ããããŠã³ãå®çŸãããŸããããšãã°ãRabbitMQã§ã¯ãã¯ãŒã¯ãããŒãã³ãã³ããéä¿¡ããå ŽåããããŸãNACK
;äžBeanstalkdã®ã¯ãŒã¯ãããŒãç¡å¹ã«ãªã£ãŠèªåçã«ãã¥ãŒã«ã¿ã¹ã¯æ»ããŸããã¿ã¹ã¯ã®ããã¯ã解é€ããã«ã¯ãé
延ãžã§ããªã©ã®ããã¯ããŒã¹ã®ã·ã¹ãã ã«éç¥ããå¿
èŠããããŸãããã®ã¢ãã«ã¯ããã¹ãŠã®ã¿ã¹ã¯ããªãšã³ãã©ã³ãã§ããããšãåæãšããŠããŸããããã¯éåžžããã©ã³ã¶ã¯ã·ã§ã³ã®äœæ¥çµæãã©ããããããã¹ãçæŒç®ã䜿çšããããšã«ãã£ãŠå®çŸãããŸããããã»ã¹ãããŒããŠã§ã¢é害ã®å Žåã®çªç¶æ»ã«å¯Ÿããæµæåãããã¯ãã·ã°ãã«ã®æ£ããå®äºãããèµ·ããããã«ãªãã€ãã³ãã§ãããSIGTERM
ããã§ãçºçããå¯èœæ§ããããŸããæšå¥šãããã¢ãããŒãã¯ãBeanstalkdãªã©ã®ä¿¡é Œã§ããã¿ã¹ã¯ãã¥ãŒã䜿çšããããšã§ããããã¯ãã¯ã©ã€ã¢ã³ããåæããããæéå¶éãè¶
ãããšãã«ãã¥ãŒã«ã¿ã¹ã¯ãè¿ããŸãããããã«ãããäºæããªãæ£åžžãªã·ã£ããããŠã³ãåŠçããããã«ã12ã®èŠå ã®ã¢ããªã±ãŒã·ã§ã³ãèšèšããå¿
èŠããããŸããã¯ã©ãã·ã¥ã®ã¿ã®èšèšã¢ãŒããã¯ãã£ã¯ããã®æŠå¿µãè«ççãªçµè«ã«å°ããŸãã
X.ã¢ããªã±ãŒã·ã§ã³éçº/äœæ¥ããªãã£
éçºç°å¢ãã¹ããŒãžã³ã°ç°å¢ãããã³æ¬çªç°å¢ãå¯èœãªéãåæ§ã«ä¿ã¡ãŸãã
æŽå²çã«ãéçºïŒéçºè
ãã¢ããªã±ãŒã·ã§ã³ã®ããŒã«ã«ãããã€ã¡ã³ãã§ã©ã€ãå€æŽãè¡ãïŒãšã¢ããªã±ãŒã·ã§ã³ã®åäœïŒãšã³ããŠãŒã¶ãŒãã¢ã¯ã»ã¹ã§ããã¢ããªã±ãŒã·ã§ã³ã®ãããã€ã¡ã³ãïŒã«ã¯å€§ããªéãããããŸãããããã®éãã¯ã次ã®3ã€ã®é åã«çŸããŸãã- æå·®ïŒéçºè
ã¯ãæ°æ¥ãæ°é±éãããã«ã¯æ°ãæã§ã®ã¿ã¢ããªã±ãŒã·ã§ã³ã®äœæ¥ããŒãžã§ã³ã«å
¥ãã³ãŒããæäœã§ããŸãã
- 人å¡ã®åºå¥ïŒéçºè
ãã³ãŒããèšè¿°ããOPSãšã³ãžãã¢ããããå±éããŸãã
- ããŒã«ã®éãïŒéçºè
ã¯NginxãSQLiteãOS Xãªã©ã®æè¡ã®ã¹ã¿ãã¯ã䜿çšã§ããŸãããApacheãMySQLãããã³Linuxã¯å®çšŒåå±éã«äœ¿çšãããŸãã
12èŠçŽ ã¢ããªã±ãŒã·ã§ã³ã¯ãã¢ããªã±ãŒã·ã§ã³ã®éçºãšéçšã®éããæå°éã«æããããšã«ãããç¶ç¶çãªå±éã®ããã«èšèšãããŠããŸããäžèšã®3ã€ã®éããèæ
®ããŠãã ããã- æéå·®ãå°ããããŸããéçºè
ã¯ã³ãŒããèšè¿°ã§ããæ°æéãŸãã¯æ°åã§å±éãããŸãã
- ã¹ã¿ããã®éããå°ããããŸããã³ãŒããèšè¿°ããéçºè
ã¯ãç©æ¥µçã«å±éã«åå ããã¢ããªã±ãŒã·ã§ã³ã®å®è¡äžã«ãã®åäœãç£èŠããŸãã
- ããŒã«ã®éããå°ããããïŒã¢ããªã±ãŒã·ã§ã³ã®éçºç°å¢ãšäœæ¥ç°å¢ãå¯èœãªéãåãã«ããŸãã
äžèšãè¡šã«èŠçŽããŸãã | åŸæ¥ã®ã¢ããªã±ãŒã·ã§ã³ | ä»é²12ã®èŠå |
---|
å±ééé | é±é | æèš |
---|
ã³ãŒãã®äœæè
/ãããã€ãã人 | ç°ãªã人ã
| åã人 |
---|
ã¢ããªã±ãŒã·ã§ã³éçº/äœæ¥ç°å¢ | ãããã | ã§ããã ã䌌ãŠãã |
---|
ããŒã¿ããŒã¹ãã¡ãã»ãŒãžãã¥ãŒã·ã¹ãã ããã£ãã·ã¥ãªã©ã®ãµãŒãããŒãã£ãµãŒãã¹ã¯ãã¢ããªã±ãŒã·ã§ã³ã®éçºããã³å®è¡æã«ããªãã£ãéèŠãªé åã®1ã€ã§ããå€ãã®èšèªã¯ãããŸããŸãªã¿ã€ãã®ãµãŒãã¹ã«ã¢ã¯ã»ã¹ããããã®ã¢ããã¿ãŒãå«ãããµãŒãããŒãã£ã®ãµãŒãã¹ãžã®ã¢ã¯ã»ã¹ãç°¡çŽ åããã©ã€ãã©ãªãæäŸããŸããããã€ãã®äŸã以äžã®è¡šã«ç€ºããŸããçš®é¡ | èšèª | å³æžé€š | ã¢ããã¿ãŒ |
---|
ããŒã¿ããŒã¹ | Ruby / Rails | ã¢ã¯ãã£ãã¬ã³ãŒã | MySQLãPostgreSQLãSQLite |
ã¡ãã»ãŒãžãã¥ãŒ | Python / Django | ã»ã㪠| RabbitMQãBeanstalkdãRedis |
ãã£ãã·ã¥ | Ruby / Rails | ActiveSupport ::ãã£ãã·ã¥ | ã¡ã¢ãªããã¡ã€ã«ã·ã¹ãã ãMemcached |
éçºè
ã¯ãããŒã«ã«ç°å¢ã§è»œéã®ãµãŒãããŒãã£ãµãŒãã¹ã䜿çšãããšäŸ¿å©ãªå ŽåããããŸãããäœæ¥ç°å¢ã§ã¯ããæ·±å»ã§ä¿¡é Œæ§ã®é«ããµãŒãããŒãã£ãµãŒãã¹ã䜿çšãããŸããããšãã°ãäœæ¥ç°å¢ã§ã¯SQLiteãããŒã«ã«ã§äœ¿çšããPostgreSQLã䜿çšããŸãããŸãã¯ãéçºäžã«ãã£ãã·ã¥çšã®ã¡ã¢ãªãåŠçããäœæ¥ç°å¢ã§MemcachedããŸãã12èŠçŽ ã®ã¢ããªã±ãŒã·ã§ã³éçºè
ã¯ãéçºããã³äœæ¥ç°å¢ã§ããŸããŸãªãµãŒãããŒãã£ãµãŒãã¹ã䜿çšããèªæã«æµæããå¿
èŠããããŸãããã¢ããã¿ãçè«çã«ãµãŒãããŒãã£ã®ãµãŒãã¹ã®éãããæœè±¡åãããŠããå Žåã§ãã䜿çšããããµãŒãããŒãã£ãµãŒãã¹ã®éãã¯ãããããªéäºææ§ãååšããå¯èœæ§ãããããšãæå³ããŸããããã«ãããéçºããã³äžéå±éäžã«æ©èœãããã¹ãã«åæ Œããã³ãŒããäœæ¥ç°å¢ã§æ©èœããªããªããŸãããã®ã¿ã€ãã®ãšã©ãŒã¯ãç¶ç¶çãªå±éã®å©ç¹ãçžæ®ºããå¹²æžãäœæããŸãããã®å¹²æžãšããã«ç¶ãç¶ç¶çãªå±éã®åŸ©å
ã®ã³ã¹ãã¯ãã¢ããªã±ãŒã·ã§ã³ã®å¯¿åœå
šäœã§åèšãããšèãããšéåžžã«é«ããªããŸããããŒã«ã«ãµãŒãã¹ã®ã€ã³ã¹ããŒã«ã¯ããã€ãŠãªãã»ã©é
åçãªã¿ã¹ã¯ã«ãªããŸããã MemcachedãPostgreSQLãRabbitMQãªã©ã®ææ°ã®ãµãŒãããŒãã£ãµãŒãã¹ã¯ãHomebrewãapt-getãªã©ã®ææ°ã®ããã±ãŒãžãããŒãžã£ãŒã®ãããã§ãã€ã³ã¹ããŒã«ãå®è¡ãé£ãããããŸãããããã«ãChefãPuppetãªã©ã®å®£èšåç°å¢æºåããŒã«ãšVagrantãªã©ã®è»œéä»®æ³ç°å¢ãçµã¿åãããããšã§ãéçºè
ã¯äœæ¥ç°å¢ã«å¯èœãªéãè¿ãããŒã«ã«ç°å¢ãå®è¡ã§ããŸãããããã®ã·ã¹ãã ãã€ã³ã¹ããŒã«ããŠäœ¿çšããã³ã¹ãã¯ãã¢ããªã±ãŒã·ã§ã³ã®éçº/éçšããªãã£ãšç¶ç¶çãªå±éããåŸãããå©ç¹ãšæ¯èŒããŠäœããªããŸããããŸããŸãªãµãŒãããŒãã£ãµãŒãã¹çšã®ã¢ããã¿ã¯ãæ¯èŒçç°¡åã«æ°ãããµãŒãããŒãã£ãµãŒãã¹ã䜿çšããããã«ã¢ããªã±ãŒã·ã§ã³ã移æ€ã§ãããããäŸç¶ãšããŠæçšã§ãããã ãããã¹ãŠã®ã¢ããªã±ãŒã·ã§ã³ãããã€ã¡ã³ãïŒéçºè
ç°å¢ãäžéãããã€ã¡ã³ãããã³äœæ¥ãããã€ã¡ã³ãïŒã¯ãåãµãŒãããŒãã£ãµãŒãã¹ã®åãã¿ã€ããšåãããŒãžã§ã³ã䜿çšããå¿
èŠããããŸãã
Xiããã®ã³ã°
ãã°ãã€ãã³ãã¹ããªãŒã ãšèãã
ãã®ã³ã°ã¯ãå®è¡äžã®ã¢ããªã±ãŒã·ã§ã³ã®åäœãèŠèŠçã«è¡šçŸããŸããéåžžããµãŒããŒç°å¢ã§ã¯ããã°ã¯ãã£ã¹ã¯ãã¡ã€ã«ïŒãlogfileãïŒã«æžã蟌ãŸããŸãããããã¯åºå圢åŒã®1ã€ã«ãããŸããããã°ã¯ãå®è¡äžã®ãã¹ãŠã®ããã»ã¹ãšè£å©ãµãŒãã¹ã®åºåã¹ããªãŒã ããåéããããæéé ã«éçŽãããã€ãã³ãã®ã¹ããªãŒã ã§ããæªå å·¥ã®åœ¢åŒã®ãžã£ãŒãã«ã¯ãéåžžã1è¡ã«1ã€ãã³ãã®ããã¹ã圢åŒã§è¡šç€ºãããŸãïŒãã ããäŸå€ãã¬ãŒã¹ã¯è€æ°è¡ã«ãŸãããããšããããŸãïŒããã°ã®éå§ãšçµäºã¯åºå®ãããŠããããã¢ããªã±ãŒã·ã§ã³ã®å®è¡äžã¯ã¡ãã»ãŒãžãããŒãç¶ç¶ããŸãã12ã®èŠå ã®ã¢ããªã±ãŒã·ã§ã³ã¯ãåºåã¹ããªãŒã ãã«ãŒãã£ã³ã°ããã³ä¿åããããšã¯ãããŸãããã¢ããªã±ãŒã·ã§ã³ã¯ããã°ããã¡ã€ã«ã«æžã蟌ã¿ããã°ãã¡ã€ã«ã管çããã¹ãã§ã¯ãããŸããã代ããã«ãå®è¡äžã®åããã»ã¹ã¯ãæšæºåºåã«ãããã¡ãªã³ã°ããã«ã€ãã³ãã®ã¹ããªãŒã ãæžã蟌ã¿ãŸãstdout
ãããŒã«ã«éçºäžã«ãéçºè
ã¯ç«¯æ«ã§ãã®ã¹ã¬ããã衚瀺ããŠãã¢ããªã±ãŒã·ã§ã³ã®åäœã芳å¯ããããšãã§ããŸããäžéããã³å®çšŒåãããã€ã¡ã³ãã§ã¯ãåããã»ã¹ã®åºåã¹ããªãŒã ãã©ã³ã¿ã€ã ã«ãã£ãŠãã£ããã£ãããä»ã®ãã¹ãŠã®ã¢ããªã±ãŒã·ã§ã³åºåã¹ããªãŒã ãšã¢ã»ã³ãã«ããã衚瀺ããã³é·æã¢ãŒã«ã€ãã®ããã«1ã€ä»¥äžã®æçµçãªå®å
ã«ãªãã€ã¬ã¯ããããŸãããããã®ã¢ãŒã«ã€ããšã³ããã€ã³ãã¯ãã¢ããªã±ãŒã·ã§ã³ããã¯èŠãããã¢ããªã±ãŒã·ã§ã³ã«ãã£ãŠã«ã¹ã¿ãã€ãºå¯èœã§ããã代ããã«ã©ã³ã¿ã€ã ã«ãã£ãŠå®å
šã«å¶åŸ¡ãããŸãããªãŒãã³ãœãŒã¹ã®ãã°ã«ãŒã¿ãŒïŒäŸïŒLogplexããã³FluentïŒã¯ããã®ç®çã«äœ¿çšã§ããŸããã¢ããªã±ãŒã·ã§ã³ã€ãã³ãã¹ããªãŒã ã¯ããã¡ã€ã«ã«ãªãã€ã¬ã¯ããããããªã¢ã«ã¿ã€ã ã§ç«¯æ«ã§è¡šç€ºãããã§ããŸããæãéèŠãªããšã¯ãã€ãã³ãã®ãããŒãSplunkãªã©ã®ã€ã³ããã¯ã¹äœæããã³ãã°åæã·ã¹ãã ããŸãã¯Hadoop / Hiveãªã©ã®æ±çšã¹ãã¬ãŒãžã·ã¹ãã ã«åããããšãã§ããããšã§ãããããã®ã·ã¹ãã ã¯ã次ã®ãããªã¢ããªã±ãŒã·ã§ã³ã®åäœãé·æã«ããã£ãŠåŸ¹åºçã«åæããããã®åªããæ©èœãšæè»æ§ãåããŠããŸãã- éå»ã®ç¹å®ã®ã€ãã³ããæ€çŽ¢ããŸãã
- 倧èŠæš¡ãªåŸåã°ã©ãïŒ1åãããã®ãªã¯ãšã¹ããªã©ïŒã
- ãŠãŒã¶ãŒãå®çŸ©ãããã¥ãŒãªã¹ãã£ãã¯ã«ãŒã«ã«åºã¥ãã¢ã¯ãã£ããªã¢ã©ãŒãïŒããšãã°ã1åãããã®ãšã©ãŒæ°ãç¹å®ã®ãããå€ãè¶
ããå Žåã®ã¢ã©ãŒãïŒã
XIIã管çã¿ã¹ã¯
ã¯ã³ã¿ã€ã ããã»ã¹ã䜿çšããŠç®¡ç/管çã¿ã¹ã¯ãå®è¡ãã
ããã»ã¹ã·ã§ãŒãã³ã°ã¯ãã¢ããªã±ãŒã·ã§ã³ã®å®è¡æã«ã¢ããªã±ãŒã·ã§ã³ã®éåžžã®ã¿ã¹ã¯ïŒWebèŠæ±ã®åŠçãªã©ïŒãå®è¡ããããã«å¿
èŠãªäžé£ã®ããã»ã¹ã§ããããã«å ããŠãéçºè
ã¯æ¬¡ã®ãããªã¢ããªã±ãŒã·ã§ã³ã®1åéãã®ç®¡çããã³ä¿å®ã¿ã¹ã¯ãå®æçã«å®è¡ããå¿
èŠããããŸãã- ããŒã¿ããŒã¹ã®ç§»è¡ãéå§ããŸãïŒããšãã°ã
manage.py migrate
Djangoãrake db:migrate
RailsïŒã - ( REPL ), . REPL - (,
python
or perl
), ( irb
Ruby, rails console
Rails). - , (,
php scripts/fix_bad_records.php
).
1åéãã®ç®¡çããã»ã¹ã¯ãéåžžã®é·æå®è¡ã¢ããªã±ãŒã·ã§ã³ããã»ã¹ãšåäžã®ç°å¢ã§å®è¡ããå¿
èŠããããŸãããããã¯ããã®ãªãªãŒã¹ãå®è¡ããä»ã®ããã»ã¹ãšåãã³ãŒãããŒã¹ãšæ§æã䜿çšããŠããªãªãŒã¹ã¬ãã«ã§èµ·åãããŸããåæã®åé¡ãåé¿ããã«ã¯ã管çã³ãŒãã«ã¢ããªã±ãŒã·ã§ã³ã³ãŒããæäŸããå¿
èŠããããŸãããã¹ãŠã®ã¿ã€ãã®ããã»ã¹ã«åãäŸåé¢ä¿åé¢ã¡ãœããã䜿çšããå¿
èŠããããŸããããšãã°ãRuby Webããã»ã¹ãã³ãã³ãã䜿çšããå ŽåãããŒã¿ããŒã¹ã䜿çšããŠç§»è¡ããå¿
èŠããããŸããåæ§ã«ãVirtualenvã䜿çšããPythonããã°ã©ã ã®å Žåã¯ãæäŸãããŠããbundle exec thin start
bundle exec rake db:migrate
bin/python
Tornado WebãµãŒããŒãèµ·åããmanage.py
管çããã»ã¹ãéå§ããŸãã12èŠçŽ ã®æ¹æ³è«ã§ã¯ãããã«äœ¿ããREPLã©ãããŒãæäŸãã1åéãã®ã¹ã¯ãªãããç°¡åã«å®è¡ã§ããèšèªã奜ã¿ãŸããããŒã«ã«å±éã§ã¯ãéçºè
ã¯ã¢ããªã±ãŒã·ã§ã³ãã£ã¬ã¯ããªå
ã®ã³ã³ãœãŒã«ã³ãã³ãã䜿çšããŠ1åéãã®ç®¡çããã»ã¹ãå®è¡ããŸããå®çšŒåãããã€ã¡ã³ãã§ã¯ãéçºè
ã¯sshãŸãã¯ã©ã³ã¿ã€ã ãæäŸããå¥ã®ãªã¢ãŒãã³ãã³ãå®è¡ã¡ã«ããºã ã䜿çšããŠããã®ãããªããã»ã¹ãéå§ã§ããŸãã
ãã°ä¿®æ£ãšããé©åãªç¿»èš³ãéä¿¡ã§ããŸãã- ããã«ã³ã¡ã³ã
- ãã©ã€ããŒãã¡ãã»ãŒãž
- äžã®ãã«rekvest GitHubã®
- ( )
amalinin litchristina