Josh Evans ããNetflix ãã€ã¯ããµãŒãã¹ã®æ··æ²ãšãââãã«ã©ãã«ãªäžçã«ã€ããŠããã€ã¯ããµãŒãã¹ã®æ§é ãåæ£ã·ã¹ãã ã«é¢é£ãã課é¡ããã®å©ç¹ãšãã£ãåºæ¬çãªããšããå§ããŠèªããŸãã ãã®åºç€ã«åºã¥ããŠã圌ã¯ãã€ã¯ããµãŒãã¹ã®ç¿åŸã«ã€ãªããæåãã¢ãŒããã¯ãã£ãéçšã®å®è·µãæ¢æ±ããŸãã
éçšäžã®ããªãããšã¯ç°ãªãããµãŒãã¹ã®åœéåã®ããã®æ°ããèšèªãã³ã³ãããŒãªã©ã®æ°ãããã¯ãããžãŒã®å°å ¥ã¯ãç°å¢ã«æ°ããªè€éããå ããããã®æèçãªæ±ºå®ã§ãã ç§ã®éçšããŒã ã¯ãJava ãš EC2 ã«åºã¥ããäºåå®çŸ©ããããã¹ã ãã©ã¯ãã£ã¹ã«çµã¿èŸŒãŸãã Netflix ã®æé©ãªãã¯ãããžãŒ ããŒããããã«åºã¥ããŠæšæºåããŸããããããžãã¹ãæé·ããã«ã€ããŠãéçºè 㯠PythonãRubyãNode-JSãDocker ãªã©ã®æ°ããã³ã³ããŒãã³ããè¿œå ãå§ããŸããã
ç§ãã¡ã¯ãã客æ§ããã®èŠæ
ãåŸ
ããã«ãåœç€Ÿã®è£œåãåªããæ©èœãçºæ®ããããšãæåã«æå±ããããšãéåžžã«èªãã«æã£ãŠããŸãã ãã¹ãŠã¯éåžžã«åçŽã«å§ãŸããŸãããç§ãã¡ã¯ Python ã§åäœããããã°ã©ã ãšãRuby ã§ããã€ãã®ããã¯ãªãã£ã¹ ã¢ããªã±ãŒã·ã§ã³ã䜿çšããŠããŸãããããããWeb éçºè
ã JVM ãå»æ¢ã㊠Web ã«ç§»è¡ãããšçºè¡šãããšããäºæ
ã¯ããã«é¢çœããªããŸãããã¢ããªã±ãŒã·ã§ã³ã Node ãœãããŠã§ã¢ ãã©ãããã©ãŒã .js ã«å€æããŸãã Docker ã®å°å
¥åŸãç¶æ³ã¯ããã«è€éã«ãªããŸããã ç§ãã¡ã¯ããžãã¯ã«åŸããç§ãã¡ãæãã€ãããã¯ãããžãŒã¯ãéåžžã«çã«ããªã£ããã®ã§ãã£ãããã顧客ã«å®è£
ãããšãã«çŸå®ã«ãªããŸããã ãªããããªãã®ã説æããŸãã
å®éãAPI Gateway ã«ã¯ãUI éçºè ã®ãšã³ããã€ã³ããšããŠæ©èœã§ããåªããã¹ã¯ãªãããçµ±åããæ©èœããããŸãã ãããã®åã¹ã¯ãªããã¯ãå€æŽãå ããåŸã«æ¬çªç°å¢ã«ãããã€ããŠãããŠãŒã¶ãŒã®ããã€ã¹ã«ãããã€ã§ããããã«å€æãããããããã¹ãŠã®å€æŽã¯ API ã²ãŒããŠã§ã€ã§å®è¡ããããšã³ããã€ã³ããšåæãããŸããã
ãã ããããã«ãããAPI ãµãŒãã¹ãã³ãŒãã§éè² è·ã«ãªããããŸããŸãªé害ã·ããªãªãçºçããæ°ããã¢ããªã¹ãäœæãããšããåé¡ãç¹°ãè¿ãçºçããŸããã ããšãã°ãäžéšã®ãšã³ããã€ã³ããåé€ãããããã¹ã¯ãªãããã©ã³ãã ã«çæããäœãã®ããŒãžã§ã³ãå€ãããŠããã®ããŒãžã§ã³ã API ãµãŒãã¹ã®äœ¿çšå¯èœãªã¡ã¢ãªããã¹ãŠå æãããšããŸãã
ãããã®ãšã³ããã€ã³ããååŸã㊠API ãµãŒãã¹ããåŒãåºãã®ã¯è«ççã§ããã ãããè¡ãããã«ãDocker ã³ã³ãããŒã§å°ããªã¢ããªã±ãŒã·ã§ã³ãšããŠå®è¡ããã Node.js ã³ã³ããŒãã³ããäœæããŸããã ããã«ããããããã®ããŒã ã¢ããªã±ãŒã·ã§ã³ã«ãã£ãŠåŒãèµ·ããããåé¡ãã¯ã©ãã·ã¥ãåãåããããšãã§ããŸããã
ãããã®å€æŽã®ã³ã¹ãã¯éåžžã«å€§ããã次ã®èŠçŽ ã§æ§æãããŸãã
- çç£æ§åäžããŒã«ã æ°ãããã¯ãããžã®ç®¡çã«ã¯æ°ããããŒã«ãå¿
èŠã§ãããããã¯ãUI ããŒã ãéåžžã«åªããã¹ã¯ãªããã䜿çšããŠå¹ççãªã¢ãã«ãäœæãããããã€ã³ãã©ã¹ãã©ã¯ãã£ã®ç®¡çã«å€ãã®æéãè²»ããå¿
èŠããªããã¹ã¯ãªãããäœæããŠæ©èœããã§ãã¯ããã ãã§ããã£ãããã§ãã
æ©äŒã®æŽå¯ãšåé¡ - éèŠãªäŸã¯ãããã©ãŒãã³ã¹ãä¿é²ããæ å ±ãæããã«ããããã«å¿ èŠãªæ°ããããŒã«ã§ãã ããã»ããµãã©ãã ãå æãããŠããããã¡ã¢ãªãã©ã®ããã«äœ¿çšãããŠããããç¥ãå¿ èŠãããããã®æ å ±ãåéããã«ã¯ããŸããŸãªããŒã«ãå¿ èŠã§ããã - åºæ¬ã€ã¡ãŒãžã®æçå - ã·ã³ãã«ãªåºæ¬ AMI ã¯ããæçåãããç¹æ®åãããŸããã
- ããŒã管çã ã¯ã©ãŠãã§ããŒãã管çã§ããæ¢è£œã®ã¢ãŒããã¯ãã£ããã¯ãããžãŒã¯ååšããªããããã¹ã±ãŒã©ãã«ã§ä¿¡é Œæ§ã®é«ãã³ã³ããã®ãããã€ã¡ã³ããš Amazon AWS ãšã®ã¯ã©ãŠãçµ±åãæäŸããã³ã³ãã管çãã©ãããã©ãŒã ã§ãã Titus ãæ§ç¯ããŸããã
- ã©ã€ãã©ãªãŸãã¯ãã©ãããã©ãŒã ã®éè€ã ãã©ãããã©ãŒã ã®åãã³ã¢æ©èœãåããæ°ãããã¯ãããžãŒãæäŸããã«ã¯ããããã¯ã©ãŠãããŒã¹ã® Node.js éçºè ããŒã«ã«è€è£œããå¿ èŠããããŸããã
- åŠç¿æ²ç·ãšæ¥çã§ã®çµéšã æ°ãããã¯ãããžãŒã®å°å ¥ã«ãããå¿ ç¶çã«æ°ãã課é¡ãçããå æããããããåŠã°ãªããã°ãªããŸããã
ãããã£ãŠãç§ãã¡ã¯ XNUMX ã€ã®ãèè£ éè·¯ãã«éå®ããããšã¯ã§ãããæè¡ãé²æ©ãããããã®æ°ããæ¹æ³ãåžžã«æ§ç¯ããå¿ èŠããããŸããã ã³ã¹ããæããããã«ãäžå çãªãµããŒããå¶éããJVMãæ°ããããŒããDocker ã«éç¹ã眮ããŸããã ç§ãã¡ã¯å¹æçãªåœ±é¿ãåªå ããææ決å®ã«ãããã³ã¹ãã«ã€ããŠããŒã ã«éç¥ãããã§ã«éçºãã圱é¿åã®é«ããœãªã¥ãŒã·ã§ã³ãåå©çšããæ¹æ³ãæ¢ããã奚å±ããŸããã ç§ãã¡ã¯ã補åãæµ·å€ã®é¡§å®¢ã«æäŸããããã«ãµãŒãã¹ãå€åœèªã«ç¿»èš³ãããšãã«ãã®ã¢ãããŒãã䜿çšããŸããã äŸã«ã¯ãèªåçã«çæã§ããæ¯èŒçåçŽãªã¯ã©ã€ã¢ã³ã ã©ã€ãã©ãªãå«ãŸããŠãããããPython ããŒãžã§ã³ãRuby ããŒãžã§ã³ãJava ããŒãžã§ã³ãªã©ãéåžžã«ç°¡åã«äœæã§ããŸãã
ç§ãã¡ã¯ãããå Žæãä»ã®åæ§ã®ç¶æ³ã§å®çžŸã®ããå®èšŒæžã¿ã®ãã¯ãããžãŒã䜿çšããæ©äŒãåžžã«æ¢ããŠããŸããã
æåŸã®èŠçŽ ãã€ãŸãå€æŽãŸãã¯ããªãšãŒã·ã§ã³ã«ã€ããŠè©±ããŸãããã 補åã®æ¶è²»éããææ¥ããšãããã³ 9 æ¥ãéããŠæéããšã«ã©ã®ããã«äžåäžã«å€åããããèŠãŠãã ããã ã·ã¹ãã ã®è² è·ãæ倧ã«éããåå XNUMX æã¯ãNetflix ã«ãšã£ãŠæãå°é£ãªæé垯ã§ãããšèšããŸãã
ãµãŒãã¹æäŸãäžæãããã顧客ã«äžäŸ¿ãäžãããããããšãªãããœãããŠã§ã¢ ã€ãããŒã·ã§ã³ã®é«éå®è£
ãã€ãŸãã·ã¹ãã ã«åžžã«æ°ããå€æŽãå ããã«ã¯ã©ãããã°ããã§ãããã? Netflix ã¯ãæ°ããã°ããŒãã«ãªã¯ã©ãŠãããŒã¹ã®ç®¡çããã³ç¶ç¶çé
ä¿¡ (CD) ãã©ãããã©ãŒã ã§ãã Spinnaker ã䜿çšããããšã§ãããéæããŸããã
éèŠãªããšã«ãSpinnaker ã¯ãã¹ã ãã©ã¯ãã£ã¹ãçµ±åããããã«èšèšãããŠãããããã³ã³ããŒãã³ããæ¬çªç°å¢ã«å°å
¥ããéã«ãåºåãã¡ãã£ã¢é
ä¿¡ãã¯ãããžãŒã«çŽæ¥çµ±åã§ããŸãã
ç§ãã¡ã¯ãèªåã«ããªã¢åæãšæ®µéçãããã€ã¡ã³ããšãããç§ãã¡ãé«ãè©äŸ¡ããŠãã XNUMX ã€ã®ãã¯ãããžãŒãããªããªãŒ ãã€ãã©ã€ã³ã«çµã¿èŸŒãããšãã§ããŸããã ã«ããªã¢åæãšã¯ãå°éã®ãã©ãã£ãã¯ãæ°ããããŒãžã§ã³ã®ã³ãŒãã«éããæ®ãã®å®çšŒåãã©ãã£ãã¯ãå€ãããŒãžã§ã³ã«æž¡ãããšãæå³ããŸãã 次ã«ãæ°ããã³ãŒããã¿ã¹ã¯ã«ã©ã®ããã«å¯ŸåŠãããã確èªããŸã (æ¢åã®ã³ãŒããããè¯ããæªãã)ã
段éçããŒã«ã¢ãŠããšã¯ããããªãŒãžã§ã³ã®ããŒã«ã¢ãŠãã«åé¡ãããå Žåãå¥ã®ãªãŒãžã§ã³ã®ããŒã«ã¢ãŠãã«ç§»åããããšãæå³ããŸãã ãã®å Žåãäžèšã®ãã§ãã¯ãªã¹ããæ¬çªãã€ãã©ã€ã³ã«å«ããå¿ èŠããããŸãã æéãç¯çŽããŸãã®ã§ããã®ãããã¯ã«ã€ããŠããã«è©³ããç¥ãããå Žåã¯ãç§ã®ååã®è¬æŒãã¯ã©ãŠãã§ã®ã°ããŒãã« Netflix éçšã®ãšã³ãžãã¢ãªã³ã°ããåç §ããããšããå§ãããŸãã ã¹ããŒãã®ãããªé²ç»ã¯ãã¹ã©ã€ãã®äžéšã«ãããªã³ã¯ããã芧ããã ããŸãã
è¬æŒã®æåŸã«ãNetflix ã®çµç¹ãšã¢ãŒããã¯ãã£ã«ã€ããŠç°¡åã«èª¬æããŸãã åœåã¯ãNRDP 1.x ã¡ãã£ã¢ ã¹ããªãŒãã³ã°ã®æåã®ããŒãžã§ã³ã§ãããElectronic Delivery ãšåŒã°ããã¹ããŒã ããããŸããã ããã§ãããã¯ã¹ããªãŒã ããšããçšèªã䜿çšãããã®ã¯ãæåã¯ãŠãŒã¶ãŒãåŸã§ããã€ã¹äžã§åçããããã«ã³ã³ãã³ããããŠã³ããŒãããããšããã§ããªãã£ãããã§ãã 2009 幎åœæãNetflix ã®æåã®ããžã¿ã«é
ä¿¡ãã©ãããã©ãŒã ã¯æ¬¡ã®ãããªãã®ã§ããã
ãŠãŒã¶ãŒããã€ã¹ã«ã¯ãNRDP ãã©ãããã©ãŒã (Netflix Ready Device Platform) ã«åºã¥ãããUI ã€ã³ã¿ãŒãã§ã€ã¹ãã»ãã¥ãªã㣠ã¢ãžã¥ãŒã«ããµãŒãã¹ã®ã¢ã¯ãã£ãåãšåçã§æ§æããã Netflix ã¢ããªã±ãŒã·ã§ã³ãå«ãŸããŠããŸããã
åœæã®ãŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹ã¯éåžžã«ã·ã³ãã«ã§ããã ããã«ã¯ Queque Reader ãšåŒã°ãããã®ãå«ãŸããŠããããŠãŒã¶ãŒã¯ãµã€ãã«ã¢ã¯ã»ã¹ã㊠Queque ã«äœããè¿œå ããè¿œå ãããã³ã³ãã³ããèªåã®ããã€ã¹ã§è¡šç€ºããŸãã è¯ãç¹ã¯ãããã³ããšã³ã ããŒã ãšããã¯ãšã³ã ããŒã ãåãé»åé ä¿¡çµç¹ã«å±ããŠãããç·å¯ãªååé¢ä¿ããã£ãããšã§ãã ãã€ããŒã㯠XML ã«åºã¥ããŠäœæãããŸããã åæã«ãDVD ããžãã¹çšã® Netflix API ãäœæããããµãŒãããŒãã£ã®ã¢ããªã±ãŒã·ã§ã³ããã©ãã£ãã¯ãåœç€Ÿã®ãµãŒãã¹ã«èªå°ããããã«ãªããŸããã
ãã ããNetflix API ã¯ããã¹ãŠã®ã³ã³ãã³ãã®ã¡ã¿ããŒã¿ãèŠèŽå¯èœãªæ ç»ã«é¢ããæ å ±ãå«ãé©æ°çãªãŠãŒã¶ãŒ ã€ã³ã¿ãŒãã§ã€ã¹ãæäŸããããã«ååã«æºåãããŠãããèŠèŽãªã¹ããçæããæ©èœãäœæãããŸããã ããã«ã¯ãJSON ã¹ããŒãã«åºã¥ãæ±çš REST APIãææ°ã®ã¢ãŒããã¯ãã£ã§äœ¿çšãããŠãããã®ãšåã HTTP å¿çã³ãŒããããã³åœæããã³ããšã³ã ã¢ããªã±ãŒã·ã§ã³ã«å¿ èŠã§ãã£ã OAuth ã»ãã¥ãªã㣠ã¢ãã«ããããŸããã ããã«ãããã¹ããªãŒãã³ã° ã³ã³ãã³ãé ä¿¡ã®ãããªã㯠ã¢ãã«ãããã©ã€ããŒã ã¢ãã«ãžã®ç§»è¡ãå¯èœã«ãªããŸããã
移è¡ã®åé¡ã¯æçåã§ãããããã¯ãçŸåšãç§ãã¡ã®ã·ã¹ãã ããŸã£ããç°ãªãåäœååã«åºã¥ã㊠XNUMX ã€ã®ãµãŒãã¹ãéçšããŠããããã§ããXNUMX ã€ã¯ RestãJSONãOAuth ã«åºã¥ããŠããããã XNUMX ã€ã¯ RPCãXMLãããã³ NTBA ããŒã¯ã³ ã·ã¹ãã ã«åºã¥ããŠãŒã¶ãŒ ã»ãã¥ãªã㣠ã¡ã«ããºã ã«åºã¥ããŠããŸãã ããã¯æåã®ãã€ããªãã ã¢ãŒããã¯ãã£ã§ããã
åœå㯠API ã NCCP ã§ããŸãæ¡åŒµã§ããããããããŒã éã®æ©æŠã«ã€ãªãã£ããããXNUMX ã€ã®ããŒã ã®éã«ã¯æ¬è³ªçã«ãã¡ã€ã¢ãŠã©ãŒã«ããããŸããã éãã¯ãµãŒãã¹ããããã³ã«ãåè·¯ãã»ãã¥ãªã㣠ã¢ãžã¥ãŒã«ã«ãããéçºè ã¯å®å šã«ç°ãªãã³ã³ããã¹ãéãåãæ¿ããå¿ èŠãããããšããããããŸããã
ãã®ç¹ã«é¢ããŠãç§ã¯äŒç€Ÿã®äžçŽãšã³ãžãã¢ã® XNUMX 人ãšäŒè©±ãããé·æçã«é©åãªã¢ãŒããã¯ãã£ã¯äœã§ããã¹ãã§ãã?ããšãã質åããããšããã圌ã¯é質åãããŸãããçµç¹ãžã®åœ±é¿ã«ã€ã㊠â ããããçµ±åããŠãç§ãã¡ãããŸãããããšåŠãã ããšãå£ãããã©ããªãã§ãããã? ãã®ã¢ãããŒãã¯ããã·ã¹ãã ãèšèšããçµç¹ã¯ããã®çµç¹ã®ã³ãã¥ãã±ãŒã·ã§ã³æ§é ãåçŸããèšèšã«ãã£ãŠå¶çŽãããããšããã³ã³ãŠã§ã€ã®æ³åã«éåžžã«é¢é£ããŠããŸãã ããã¯éåžžã«æœè±¡çãªå®çŸ©ãªã®ã§ããã£ãšå
·äœçãªå®çŸ©ã奜ã¿ãŸããããœãããŠã§ã¢ã¯ãã¹ãŠããããäœæããçµç¹æ§é ãåæ ããŸããã ç§ã®ãæ°ã«å
¥ãã® Eric Raymond ã®èšèã¯æ¬¡ã®ãšããã§ãããXNUMX ã€ã®éçºããŒã ãã³ã³ãã€ã©ãŒã«åãçµãã§ããå Žåãæçµçã«ã¯ XNUMX ãã¹ã®ã³ã³ãã€ã©ãŒãå®æããŸããã ããã§ãããNetflix ã«ã¯ XNUMX ãã¹ ã³ã³ãã€ã©ãããããããç§ãã¡ã®ä»äºã®ããæ¹ã§ãã
ãã®å Žåãç¬ã¯å°»å°Ÿãæ¯ã£ãŠãããšèšããŸãã ç§ãã¡ã®æåªå äºé ã¯ãœãªã¥ãŒã·ã§ã³ã§ã¯ãªãçµç¹ã§ãããç§ãã¡ã®ã¢ãŒããã¯ãã£ãæšé²ããã®ã¯çµç¹ã§ãã åŸã ã«ãå¯ãéãã®ãµãŒãã¹ããããã¬ãŒã ã©ã³ããŒãšåŒã°ããã¢ãŒããã¯ãã£ã«ç§»è¡ããŸãããããã§ã¯ããšããž ãµãŒãã¹ãšãZuul ãããã·ãAPI ã²ãŒããŠã§ã€ãããã³å¯Ÿå¿ããæ©èœã«çŽæ¥åé¢ããŠçµ±åã§ãã NCCP ã®æ©èœã«ã€ããŠè©±ããŠããããã§ãã ãããŒã¹ãã¯ãããé«åºŠãªã»ãã¥ãªãã£ãåçãããŒã¿äžŠã¹æ¿ããªã©ã®æ©èœãåããæ°ãããã€ã¯ããµãŒãã¹ã«å€ãããŸããã
ãã®ããã«ãéšéæ§é ãšäŒæ¥ã®ãã€ããã¯ã¹ã¯ãã·ã¹ãã èšèšã圢æããäžã§éèŠãªåœ¹å²ãæãããŠãããå€åãä¿é²ãŸãã¯é»å®³ããèŠå ã§ãããšèšããŸãã ãã€ã¯ããµãŒãã¹ ã¢ãŒããã¯ãã£ã¯è€éãã€ææ©çã§ããããã®å¥å šæ§ã¯èŠåŸãšå°å ¥ãããã«ãªã¹ã«åºã¥ããŠããŸãã
ããã€ãã®åºå
ãã€ãã宿æ³ããã ãããããšãããããŸãã ç§ãã¡ã®èšäºãæ°ã«å
¥ã£ãŠããŸãã? ãã£ãšèå³æ·±ãã³ã³ãã³ããèŠããã§ãã? 泚æããããå人ã«å§ãããããŠç§ãã¡ããµããŒãããŠãã ããã
ã¢ã ã¹ãã«ãã ã®ãšã¯ã€ãã¯ã¹ Tier IV ããŒã¿ã»ã³ã¿ãŒã§ã¯ Dell R730xd ã 2 åå®ã? ããã ã
åºæïŒ habr.com