ããã«ã¡ã¯ïŒ ç§ã®åå㯠Vadim Madison ã§ããAvito ã·ã¹ãã ãã©ãããã©ãŒã ã®éçºãææ®ããŠããŸãã 瀟å ã§ã¢ããªã·ã㯠ã¢ãŒããã¯ãã£ãããã€ã¯ããµãŒãã¹ ã¢ãŒããã¯ãã£ã«ç§»è¡ããŠããããšã¯ãäœåºŠãèšãããŠããŸããã ãã€ã¯ããµãŒãã¹ãæ倧éã«æŽ»çšãããã€ã¯ããµãŒãã¹ã«åãããªãããã«ã€ã³ãã©ã¹ãã©ã¯ãã£ãã©ã®ããã«å€é©ããããå ±æãããšããæ¥ãŸããã ãã㧠PaaS ãã©ã®ããã«åœ¹ç«ã€ãããããã€ã¡ã³ããç°¡çŽ åãããã€ã¯ããµãŒãã¹ã®äœæã XNUMX åã®ã¯ãªãã¯ã«ççž®ããæ¹æ³ã«ã€ããŠãèªã¿ãã ããã ç§ã以äžã«æžããã¹ãŠã Avito ã«å®å šã«å®è£ ãããŠããããã§ã¯ãããŸããããã®äžéšã¯ãã©ãããã©ãŒã ã®éçºæ¹æ³ã«åœ±é¿ããŸãã
(ãã®èšäºã®æåŸã§ã¯ããã€ã¯ããµãŒãã¹ ã¢ãŒããã¯ãã£ã®å°é家 Chris Richardson ã«ãã XNUMX æ¥éã®ã»ãããŒã«åå ããæ©äŒã«ã€ããŠèª¬æããŸã)ã
ãã€ã¯ããµãŒãã¹ã«è³ã£ãçµç·¯
Avito ã¯äžçæ倧ã®æ©å¯æ å ±ãµã€ãã® 15 ã€ã§ã20 æ¥ããã XNUMX äžä»¥äžã®æ°ããåºåãæ²èŒãããŠããŸãã åœç€Ÿã®ããã¯ãšã³ã㯠XNUMX ç§ããã XNUMX 件ãè¶ ãããªã¯ãšã¹ããåãå ¥ããŸãã çŸåšãæ°çŸã®ãã€ã¯ããµãŒãã¹ããããŸãã
ç§ãã¡ã¯ããæ°å¹Žããã€ã¯ããµãŒãã¹ ã¢ãŒããã¯ãã£ãæ§ç¯ããŠããŸããã æ£ç¢ºã«ã¯ - ç§ãã¡ã®ååã®è©³çŽ°
åœåãç§ãã¡ã¯ãã€ã¯ããµãŒãã¹ã®éçºãšç«ã¡äžããå æ¬çã«æ¯æŽãããšã³ã·ã¹ãã ãäœæããŠããŸããã§ããã 圌ãã¯åã«è³¢æãªãªãŒãã³ãœãŒã¹ ãœãªã¥ãŒã·ã§ã³ãåéããããããèªå® ã§èµ·åããéçºè ã«ãããã«å¯ŸåŠããããæåŸ ããã ãã§ãã ãã®çµæã圌㯠XNUMX ãæ (ããã·ã¥ããŒããå éšãµãŒãã¹) ã蚪åãããã®åŸãäžæ岩ã§å€ãæ¹æ³ã§ã³ãŒããã«ããããããšãã欲æ±ã匷ããªããŸããã 以äžã®å³ã®ç·è²ã¯éçºè ãäœããã®æ¹æ³ã§èªåã®æã§è¡ãããšã瀺ããé»è²ã¯èªååã瀺ããŸãã
PaaS CLI ãŠãŒãã£ãªãã£ã§ã¯ãXNUMX ã€ã®ã³ãã³ãã§æ°ãããµãŒãã¹ãäœæãããããã« XNUMX ã€ã®ã³ãã³ãã§æ°ããããŒã¿ããŒã¹ãè¿œå ãããStage ã«ãããã€ãããŸãã
ããã€ã¯ããµãŒãã¹æçåãã®æ代ãã©ãä¹ãè¶ããã®ã
ã¢ããªã·ã㯠ã¢ãŒããã¯ãã£ã§ã¯ã補åã®å€æŽã®äžè²«æ§ãä¿ã€ããã«ãéçºè ã¯è¿é£ã®ã¢ãŒããã¯ãã£ã§äœãèµ·ãã£ãŠããã®ããææ¡ããå¿ èŠããããŸããã æ°ããã¢ãŒããã¯ãã£ã§äœæ¥ããå ŽåããµãŒãã¹ ã³ã³ããã¹ãã¯çžäºã«äŸåããªããªããŸãã
ããã«ããã€ã¯ããµãŒãã¹ ã¢ãŒããã¯ãã£ãå¹æçã«ããã«ã¯ã次ã®ãããªå€ãã®ããã»ã¹ã確ç«ããå¿ èŠããããŸãã
⢠ãã®ã³ã°ã
⢠ãã¬ãŒã¹ã®ãªã¯ãšã¹ã (Jaeger)ã
⢠ãšã©ãŒéèš (ã»ã³ããªãŒ)ã
⢠Kubernetes ããã®ã¹ããŒã¿ã¹ãã¡ãã»ãŒãžãã€ãã³ã (ã€ãã³ã ã¹ããªãŒã åŠç)ã
⢠ã¬ãŒã¹å¶é/ãµãŒããããã¬ãŒã«ãŒ (Hystrix ã䜿çšã§ããŸã)ã
⢠ãµãŒãã¹æ¥ç¶ã®å¶åŸ¡ (Netramesh ã䜿çš)ã
⢠ã¢ãã¿ãªã³ã° (Grafana)ã
⢠çµã¿ç«ãŠïŒããŒã ã·ãã£ïŒã
⢠ã³ãã¥ãã±ãŒã·ã§ã³ãšéç¥ (Slackãé»åã¡ãŒã«)ã
⢠ã¿ã¹ã¯ã®è¿œè·¡ã (ãžã©)
⢠ææžã®æºåã
ã·ã¹ãã ãèŠæš¡ãæ¡å€§ããŠãæŽåæ§ã倱ãããå¹æãç¶æã§ããããã«ããããã«ãç§ãã¡ã¯ Avito ã®ãã€ã¯ããµãŒãã¹ã®æ§æãåèããŸããã
ãã€ã¯ããµãŒãã¹ã®ç®¡çæ¹æ³
以äžã¯ãå€ãã® Avito ãã€ã¯ããµãŒãã¹éã§çµ±äžããããããŒã㣠ããªã·ãŒããå®è£ ããã®ã«åœ¹ç«ã¡ãŸãã
- ã€ã³ãã©ã¹ãã©ã¯ãã£ãå±€ã«åå²ããã
- ãµãŒãã¹ãšããŠã®ãã©ãããã©ãŒã (PaaS) ã®æŠå¿µã
- ãã€ã¯ããµãŒãã¹ã§èµ·ãããã¹ãŠãç£èŠããŸãã
ã€ã³ãã©ã¹ãã©ã¯ãã£æœè±¡åã¬ã€ã€ãŒã«ã¯ XNUMX ã€ã®ã¬ã€ã€ãŒãå«ãŸããŸãã äžããäžãžè¡ããŸãããã
A. äžéš - ãµãŒãã¹ ã¡ãã·ã¥ã æå㯠Istio ãè©ŠããŸãããã䜿çšãããªãœãŒã¹ãå€ãããŠãããªã¥ãŒã ã«å¯ŸããŠã³ã¹ããé«ãããããšãããããŸããã ããã§ãã¢ãŒããã¯ã㣠ããŒã ã®ã·ã㢠ãšã³ãžãã¢ãAlexander Lukyanchenko ã¯ç¬èªã®ãœãªã¥ãŒã·ã§ã³ãéçºããŸããã
B. äž - Kubernetesã ãã®äžã«ãã€ã¯ããµãŒãã¹ããããã€ããŠéçšããŸãã
C. åºéš - å°éã ç§ãã¡ã¯ã¯ã©ãŠãã OpenStack ãªã©ã䜿çšãããå®å
šã«ãã¢ã¡ã¿ã«ã«äŸåããŠããŸãã
ãã¹ãŠã®ã¬ã€ã€ãŒã¯ PaaS ã«ãã£ãŠçµåãããŸãã ãããŠããã®ãã©ãããã©ãŒã 㯠XNUMX ã€ã®éšåã§æ§æãããŠããŸãã
I. çºé»æ©ãCLI ãŠãŒãã£ãªãã£çµç±ã§å¶åŸ¡ãããŸãã éçºè ãæ£ããæ¹æ³ã§æå°éã®åŽåã§ãã€ã¯ããµãŒãã¹ãäœæã§ããããæ¯æŽããã®ã¯åœŒå¥³ã§ãã
II. çµ±åã³ã¬ã¯ã¿ãŒ å ±éã®ããã·ã¥ããŒããéããŠãã¹ãŠã®ããŒã«ãå¶åŸ¡ã§ããŸãã
â ¢ïŒ ã¹ãã¬ãŒãžã éèŠãªã¢ã¯ã·ã§ã³ã®ããªã¬ãŒãèªåçã«èšå®ããã¹ã±ãžã¥ãŒã©ãŒãšæ¥ç¶ããŸãã ãã®ãããªã·ã¹ãã ã®ãããã§ã誰ãã Jira ã§ã¿ã¹ã¯ãèšå®ãå¿ãããããšãã£ãŠãã¿ã¹ã¯ã XNUMX ã€ãèŠéãããããšã¯ãããŸããã ããã«ã¯ Atlas ãšããå éšããŒã«ã䜿çšããŸãã
Avito ã§ã®ãã€ã¯ããµãŒãã¹ã®å®è£ ãåäžã®ã¹ããŒã ã«åŸã£ãŠå®è¡ããããããéçºããã³ãªãªãŒã¹ã®å段éã§ã®ãã€ã¯ããµãŒãã¹ã®å¶åŸ¡ãç°¡çŽ åãããŸãã
æšæºã®ãã€ã¯ããµãŒãã¹éçºãã€ãã©ã€ã³ã¯ã©ã®ããã«æ©èœããŸãã?
äžè¬ã«ããã€ã¯ããµãŒãã¹äœæãã§ãŒã³ã¯æ¬¡ã®ããã«ãªããŸãã
CLI ããã·ã¥ â ç¶ç¶çã€ã³ãã°ã¬ãŒã·ã§ã³ â ãã€ã¯ â ããã〠â 人工ãã¹ã â ã«ããªã¢ ãã¹ã â ã¹ã¯ã€ãŒãº ãã¹ã â æ¬çª â ã¡ã³ããã³ã¹ã
æ£ç¢ºã«ãã®é åºã§èŠãŠã¿ãŸãããã
CLIããã·ã¥
⢠ãã€ã¯ããµãŒãã¹ã®äœæ.
ç§ãã¡ã¯ãã¹ãŠã®éçºè
ã«ãã€ã¯ããµãŒãã¹ã®äœ¿ãæ¹ãæããããã«é·ãéèŠåŽããŸããã ããã«ã¯ãConfluence ã§è©³çŽ°ãªæé ãèšè¿°ããããšãå«ãŸããŸãã ããããèšç»ã¯å€æŽãããè¿œå ãããŸããã ãã®çµæã移è¡ã®éå§æã«ããã«ããã¯ãçºçããŸããããã€ã¯ããµãŒãã¹ã®èµ·åã«ã¯ããã«æéãããããããã§ãäœæäžã«åé¡ãé »ç¹ã«çºçããŸããã
æçµçã«ããã€ã¯ããµãŒãã¹ãäœæããéã®åºæ¬çãªæé ãèªååããã·ã³ãã«ãª CLI ãŠãŒãã£ãªãã£ãæ§ç¯ããŸããã å®éãããã¯æåã® git Push ã眮ãæããŸãã 圌女ãå ·äœçã«äœãããŠãããã¯æ¬¡ã®ãšããã§ãã
â ããŠã£ã¶ãŒããã¢ãŒãã§ããã³ãã¬ãŒãã«åŸã£ãŠãµãŒãã¹ã段éçã«äœæããŸãã Avito ããã¯ãšã³ãã«ã¯ãPHPãGolangãPython ãªã©ã®äž»èŠãªããã°ã©ãã³ã°èšèªã®ãã³ãã¬ãŒãããããŸãã
- äžåºŠã« XNUMX ã€ã®ã³ãã³ãã§ãç¹å®ã®ãã·ã³ã«ããŒã«ã«éçºçšã®ç°å¢ããããã€ããŸãã - Minikube ãèµ·åãããHelm ãã£ãŒããèªåçã«çæãããããŒã«ã« kubernetes ã§èµ·åãããŸãã
â å¿ èŠãªããŒã¿ããŒã¹ã«æ¥ç¶ããŸãã éçºè ã¯ãããŒã«ã«ãã¹ããŒãžãéçšç°å¢ãåãããå¿ èŠãªããŒã¿ããŒã¹ã«ã¢ã¯ã»ã¹ããããã« IPããã°ã€ã³ããã¹ã¯ãŒããç¥ãå¿ èŠã¯ãããŸããã ããã«ãããŒã¿ããŒã¹ã¯ãã©ãŒã«ã ãã¬ã©ã³ãæ§æã§ãã©ã³ã·ã³ã°ã䜿çšããŠå³åº§ã«ãããã€ãããŸãã
â ã©ã€ãã¢ã»ã³ããªèªäœãå®è¡ããŸãã éçºè ã IDE ãéããŠãã€ã¯ããµãŒãã¹å ã®äœããä¿®æ£ãããšããŸãã ãŠãŒãã£ãªãã£ã¯ãã¡ã€ã« ã·ã¹ãã å ã®å€æŽã確èªããããã«åºã¥ããŠã¢ããªã±ãŒã·ã§ã³ (Golang çš) ãåæ§ç¯ããåèµ·åããŸãã PHP ã®å Žåããã¥ãŒãå ã®ãã£ã¬ã¯ããªã転éããã ãã§ãããã§ã©ã€ããªããŒãããèªåçã«ãååŸãããŸãã
â èªåãã¹ããçæããŸãã ãã©ã³ã¯ã®åœ¢ã§ããã䜿çšã«ã¯éåžžã«é©ããŠããŸãã
⢠ãã€ã¯ããµãŒãã¹ã®å°å ¥.
ç§ãã¡ã«ãšã£ãŠããã€ã¯ããµãŒãã¹ã®ãããã€ã¯å°ãé¢åãªäœæ¥ã§ããã 次ã®ãã®ãå¿ èŠã§ããã
I. Dockerfileã
II. æ§æã
â
¢ïŒ Helm ãã£ãŒãã¯ããèªäœãç
©éã§ããã次ã®ãã®ãå«ãŸããŸãã
â ãã£ãŒãèªäœã
â ãã³ãã¬ãŒã;
â ããŸããŸãªç°å¢ãèæ
®ããå
·äœçãªå€ã
Kubernetes ãããã§ã¹ããåå å·¥ããæéãçãããããã§ã¹ããèªåçã«çæãããããã«ãªããŸããã ãããæãéèŠãªã®ã¯ãå°å ¥ã極éãŸã§ç°¡çŽ åãããããšã§ãã ä»åŸã¯ Dockerfile ãäœæãããéçºè 㯠XNUMX ã€ã®çã app.toml ãã¡ã€ã«ã«æ§æå šäœãæžã蟌ã¿ãŸãã
ã¯ããapp.toml èªäœã§ã¯ããã°ããã®éäœãããããšããããŸããã ãµãŒãã¹ã®ã³ããŒãã©ãã«ããããŠããã€çæããããæå®ã (éçºãµãŒããŒäžãã¹ããŒãžã³ã°äžãæ¬çªç°å¢äž)ããã®äŸåé¢ä¿ã瀺ããŸãã [engine] ãããã¯ã® line size = "small" ã«æ³šç®ããŠãã ããã ããã¯ãKubernetes çµç±ã§ãµãŒãã¹ã«å²ãåœãŠãããå¶éã§ãã
次ã«ãæ§æã«åºã¥ããŠãå¿ èŠãªãã¹ãŠã® Helm ãã£ãŒããèªåçã«çæãããããŒã¿ããŒã¹ãžã®æ¥ç¶ãäœæãããŸãã
⢠åºæ¬çãªæ€èšŒã ãã®ãããªãã§ãã¯ãèªååãããŠããŸãã
远跡ããå¿
èŠããããŸã:
â Dockerfile ã¯ãããŸããã
â app.toml ã¯ãããŸããã
â å
¥æå¯èœãªããã¥ã¡ã³ãã¯ãããŸãã?
â äŸåé¢ä¿ã¯å€§äžå€«ã§ããïŒ
â ã¢ã©ãŒã ã«ãŒã«ãèšå®ãããŠãããã©ããã
æåŸã«ãã©ã®è£œåã¡ããªã¯ã¹ãç£èŠãããããµãŒãã¹ã®ææè
èªèº«ã決å®ããŸãã
⢠ææžã®æºåã
ãŸã åé¡ã®ããåéã§ãã ããã¯æãæçœã§ããããã«æããŸãããåæã«ãå¿ããããã¡ãªãèšé²ã§ãããããããã£ãŠé£éã®äžã§è匱ãªéšåãšãªããŸãã
åãã€ã¯ããµãŒãã¹ã®ããã¥ã¡ã³ããå¿
èŠã§ãã ããã«ã¯æ¬¡ã®ãããã¯ãå«ãŸããŸãã
I. ãµãŒãã¹ã®ç°¡åãªèª¬æã æåéãããããäœãããã®ãããããŠãªããããå¿ èŠãªã®ãã«ã€ããŠã®ããã€ãã®æã§ãã
II. ã¢ãŒããã¯ãã£å³ã®ãªã³ã¯ã ããšãã°ããã£ãã·ã¥ã« Redis ã䜿çšããŠããã®ããæ°žç¶ã¢ãŒãã®ã¡ã€ã³ ããŒã¿ ã¹ãã¢ãšã㊠Redis ã䜿çšããŠããã®ãããäžç®èŠãã ãã§ç°¡åã«ç解ã§ããããšãéèŠã§ãã Avito ã§ã¯ä»ã®ãšããããã㯠Confluence ãžã®ãªã³ã¯ã§ãã
â ¢ïŒ æé æžã ãµãŒãã¹ã®éå§ãšãã®åŠçã®è€éãã«é¢ããçãã¬ã€ãã
IV. ãããã質åããµãŒãã¹ã䜿çšãããšãã«ååãééããå¯èœæ§ã®ããåé¡ãäºæž¬ããããšããå§ãããŸãã
V. API ã®ãšã³ããã€ã³ãã®èª¬æã çªç¶å®å ãæå®ããªãã£ãå Žåãããªãã®ãã€ã¯ããµãŒãã¹ã«é¢é£ããååãã»ãŒç¢ºå®ã«ãã®æéãæ¯æãããšã«ãªããŸãã çŸåšãããã«ã¯ Swagger ãšãbrief ãšåŒã°ãããœãªã¥ãŒã·ã§ã³ã䜿çšããŠããŸãã
VI. ã©ãã«ã ãŸãã¯ããµãŒãã¹ãäŒç€Ÿã®ã©ã®è£œåãæ©èœããŸãã¯æ§é éšéã«å±ããŠãããã瀺ãããŒã«ãŒã ãããã¯ãããšãã°ãååã XNUMX é±éåã«åãäºæ¥éšéã«å¯ŸããŠå±éããæ©èœãåæžãããã©ãããããã«ç解ããã®ã«åœ¹ç«ã¡ãŸãã
VII. ãµãŒãã¹ã®ææè ã ã»ãšãã©ã®å Žåããã (ãŸãã¯ããã) 㯠PaaS ã䜿çšããŠèªåçã«æ±ºå®ã§ããŸãããå®å šãæããããéçºè ã¯ããããæåã§æå®ããå¿ èŠããããŸãã
æåŸã«ãã³ãŒã ã¬ãã¥ãŒãšåæ§ã«ãããã¥ã¡ã³ããã¬ãã¥ãŒããããšããå§ãããŸãã
ç¶ç¶çã€ã³ãã°ã¬ãŒã·ã§ã³
- ãªããžããªãæºåããŠããŸãã
- TeamCity ã§ãã€ãã©ã€ã³ãäœæããŸãã
- æš©å©ã®èšå®ã
- ãµãŒãã¹ææè ãæ€çŽ¢ããŸãã ããã«ã¯ãæåããŒãã³ã°ãš PaaS ã«ããæå°éã®èªååãšãããã€ããªãã ã¹ããŒã ããããŸãã å®å šèªåã¹ããŒã ã¯ããµããŒãã®ããã«ãµãŒãã¹ãå¥ã®éçºããŒã ã«ç§»ç®¡ãããå ŽåããŸãã¯ãµãŒãã¹éçºè ãèŸããå Žåãªã©ã«å€±æããŸãã
- Atlas ãžã®ãµãŒãã¹ã®ç»é² ïŒäžèšãåç §ïŒã ãã¹ãŠã®ææè ãšäŸåé¢ä¿ã
- 移è¡ã確èªããŠããŸãã æœåšçã«å±éºãªãã®ããªããã©ããã確èªããŸãã ããšãã°ããããã® XNUMX ã€ã§ã¯ããµãŒãã¹ã®ç°ãªãããŒãžã§ã³éã®ããŒã¿ ã¹ããŒãã®äºææ§ãå£ãå¯èœæ§ã®ããå€æŽããŒãã«ãŸãã¯ãã®ä»ã®ãã®ããããã¢ãã衚瀺ãããŸãã ãã®åŸã移è¡ã¯å®è¡ãããããµãã¹ã¯ãªãã·ã§ã³ã«é 眮ãããŸããPaaS ã¯ãå®å šã«äœ¿çšã§ããå Žåã«ãµãŒãã¹ææè ã«éç¥ããå¿ èŠããããŸãã
çŒã
次ã®æ®µéã¯ãå±éåã®ãµãŒãã¹ã®ããã±ãŒãžåã§ãã
- ã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããŸãã å€å žã«ããã°ãDocker ã€ã¡ãŒãžã§ã
- ãµãŒãã¹èªäœãšé¢é£ãªãœãŒã¹ã® Helm ãã£ãŒãã®çæã ããŒã¿ããŒã¹ãšãã£ãã·ã¥ãå«ãŸããŸãã ãããã¯ãCLI ããã·ã¥æ®µéã§çæããã app.toml æ§æã«åŸã£ãŠèªåçã«äœæãããŸãã
- 管çè ãããŒããéãããã®ãã±ãããäœæãã ïŒå¿ èŠãªå Žåã«ïŒã
- åäœãã¹ãã®å®è¡ãšã³ãŒãã«ãã¬ããžã®èšç®ã ã³ãŒã ã«ãã¬ããžãæå®ããããããå€ãäžåã£ãŠããå ŽåããµãŒãã¹ã¯ãã以äžãããã€ã¡ã³ãã«é²ãããšã¯ã§ããŸããã 蚱容ç¯å²å ã«ããå ŽåããµãŒãã¹ã«ã¯ãæ²èŠ³çãªãä¿æ°ãå²ãåœãŠãããŸãããã®åŸãæéãçµéããŠãææšã«æ¹åãèŠãããªãå Žåãéçºè ã¯ãã¹ãã«é¢ããŠé²æ©ããªããšããéç¥ãåãåããŸã (ãããŠããã«ã€ããŠäœããããå¿ èŠããããŸãïŒã
- ã¡ã¢ãªãš CPU ã®å¶éãèæ
®ããã ç§ãã¡ã¯äž»ã« Golang ã§ãã€ã¯ããµãŒãã¹ãäœæããKubernetes ã§å®è¡ããŸãã ãããã£ãŠãGolang èšèªã®ç¹æ®æ§ã«é¢é£ãã埮åŠãªç¹ã XNUMX ã€ãããŸããããã©ã«ãã§ã¯ãGOMAXPROCS å€æ°ãæ瀺çã«èšå®ããªãå Žåãèµ·åæã«ãã·ã³äžã®ãã¹ãŠã®ã³ã¢ã䜿çšãããåããã·ã³äžã§è€æ°ã®ãã®ãããªãµãŒãã¹ãèµ·åããããšããããã®ãµãŒãã¹ãéå§ãããŸããè³æºã奪ãåããäºãã«å¹²æžãåãã 以äžã®ã°ã©ãã¯ãã¢ããªã±ãŒã·ã§ã³ã競åãªãã§ãªãœãŒã¹ç«¶åã¢ãŒãã§å®è¡ããå Žåã«ãå®è¡æéãã©ã®ããã«å€åãããã瀺ããŠããŸãã ïŒã°ã©ãã®åºå
žã¯
ãã㧠).
å®è¡æéã¯çãã»ã©è¯ãã§ãã æ倧: 643 ããªç§ãæå°: 42 ããªç§ã åçã¯ã¯ãªãã¯å¯èœã§ãã
æè¡ã«ãããæéã¯çãã»ã©è¯ãã§ãã æ倧: 14091 nsãæå°: 151 nsã åçã¯ã¯ãªãã¯å¯èœã§ãã
ã¢ã»ã³ããªã®æºå段éã§ããã®å€æ°ãæ瀺çã«èšå®ããããšããã©ã€ãã©ãªã䜿çšããããšãã§ããŸãã
å±éãã
⢠èŠçŽã確èªããã ãµãŒãã¹ ã¢ã»ã³ããªãç®çã®ç°å¢ã«é
ä¿¡ãå§ããåã«ã次ã®ç¹ã確èªããå¿
èŠããããŸãã
- API ãšã³ããã€ã³ãã
â API ãšã³ããã€ã³ãå¿çã®ã¹ããŒããžã®æºæ ã
â ãã°åœ¢åŒã
â ãµãŒãã¹ãžã®ãªã¯ãšã¹ãã®ããããŒã®èšå® (çŸåšããã㯠netramesh ã«ãã£ãŠè¡ãããŸã)
â ã€ãã³ã ãã¹ã«ã¡ãã»ãŒãžãéä¿¡ãããšãã«ææè
ããŒã¯ã³ãèšå®ããŸãã ããã¯ããã¹å
šäœã®ãµãŒãã¹ã®æ¥ç¶ã远跡ããããã«å¿
èŠã§ãã ãµãŒãã¹ã®æ¥ç¶æ§ãåäžãããªãåªçããŒã¿ (ããã¯è¯ãããšã§ã) ãšããµãŒãã¹ã®æ¥ç¶æ§ã匷åããããžãã¹ ããŒã¿ (ããã¯éåžžã«æªãããšã§ã!) ã®äž¡æ¹ããã¹ã«éä¿¡ã§ããŸãã ãããŠããã®æ¥ç¶ãåé¡ã«ãªã£ãæç¹ã§ããã¹ã®æžã蟌ã¿ãšèªã¿åãã誰ãè¡ãããç解ããããšã¯ããµãŒãã¹ãé©åã«åé¢ããã®ã«åœ¹ç«ã¡ãŸãã
Avito ã«ã¯ãŸã ããã»ã©å€ãã®ã³ã³ãã³ã·ã§ã³ã¯ãããŸãããããã®æ°ã¯æ¡å€§ãç¶ããŠããŸãã ãã®ãããªåæãããŒã ãç解ãç解ã§ãã圢åŒã§å©çšã§ããããã«ãªãã°ãªãã»ã©ããã€ã¯ããµãŒãã¹éã®äžè²«æ§ãç¶æããããšã容æã«ãªããŸãã
æš¡æ¬è©Šéš
⢠ã¯ããŒãºãã«ãŒããã¹ãã ãã®ããã«ç§ãã¡ã¯çŸåšãªãŒãã³ãœãŒã¹ã䜿çšããŠããŸã
⢠ã¹ãã¬ã¹ãã¹ãã ç§ãã¡ã¯ãã¹ãŠã®ãµãŒãã¹ãæé©ãªããã©ãŒãã³ã¹ã§æäŸã§ããããåªããŸãã ãŸããåãµãŒãã¹ã®ãã¹ãŠã®ããŒãžã§ã³ã¯è² è·ãã¹ãã®å¯Ÿè±¡ãšãªãå¿
èŠããããŸããããã«ããããµãŒãã¹ã®çŸåšã®ããã©ãŒãã³ã¹ãšãåããµãŒãã¹ã®ä»¥åã®ããŒãžã§ã³ãšã®éããç解ã§ããŸãã ãµãŒãã¹ã®æŽæ°åŸã«ããã©ãŒãã³ã¹ã XNUMX åã® XNUMX ã«äœäžããå Žåãããã¯ãã®ææè
ã«ãšã£ãŠæãããªã·ã°ãã«ã§ãããã³ãŒãã詳ãã調ã¹ãŠç¶æ³ãä¿®æ£ããå¿
èŠããããŸãã
ããšãã°ãåéããããŒã¿ã䜿çšããŠèªåã¹ã±ãŒãªã³ã°ãæ£ããå®è£
ããæçµçã«ã¯ãµãŒãã¹ãã©ã®çšåºŠã¹ã±ãŒã©ãã«ã§ããããäžè¬çã«ç解ããŸãã
è² è·ãã¹ãäžã«ããªãœãŒã¹æ¶è²»ãèšå®ãããå¶éãæºãããŠãããã©ããã確èªããŸãã ãããŠç§ãã¡ã¯äž»ã«æ¥µç«¯ãªããšã«çŠç¹ãåœãŠãŸãã
a) ç·è² è·ã調ã¹ãŸãã
- å°ãããã - è² è·ãæ°åçªç¶äœäžãããšãããããäœãããŸã£ããæ©èœããªããªãå¯èœæ§ããããŸãã
- 倧ããããŸã - æé©åãå¿
èŠã§ãã
b) RPS ã«åŸã£ãŠã«ãããªãã調ã¹ãŸãã
ããã§ã¯ãçŸåšã®ããŒãžã§ã³ãšä»¥åã®ããŒãžã§ã³ã®éããšåèšæ°éãèŠãŠãããŸãã ããšãã°ããµãŒãã¹ã 100 rps ãçæããå Žåããã®ãµãŒãã¹ã®èšè¿°ãäžååã§ããããããããã®ç¹ç°æ§ã«ãããã®ã§ããããããã«ãããããã¯ãµãŒãã¹ãéåžžã«æ³šææ·±ã芳å¯ããçç±ã«ãªããŸãã
éã«ãRPS ãå€ãããå Žåã¯ãããããäœããã®ãã°ããããäžéšã®ãšã³ããã€ã³ãããã€ããŒãã®å®è¡ãåæ¢ããä»ã®ãšã³ããã€ã³ããåã«ããªã¬ãŒãããã ãã§ãããšèããããŸãã return true;
ã«ããªã¢ãã¹ã
åæãã¹ãã«åæ ŒããåŸãå°æ°ã®ãŠãŒã¶ãŒã§ãã€ã¯ããµãŒãã¹ããã¹ãããŸãã ç§ãã¡ã¯ããµãŒãã¹ã®å¯Ÿè±¡ãŠãŒã¶ãŒã®ããããããªã·ã§ã¢ (0,1% æªæº) ããæ
éã«éå§ããŸãã ãã®æ®µéã§ã¯ããµãŒãã¹ã®åé¡ãã§ããã ãæ©ã瀺ãããã«ãæ£ããæè¡ææšãšè£œåææšãã¢ãã¿ãªã³ã°ã«å«ãŸããããšãéåžžã«éèŠã§ãã ã«ããªã¢ ãã¹ãã®æçæé㯠5 åãäž»ãªãã¹ãæé㯠2 æéã§ãã è€éãªãµãŒãã¹ã®å Žåã¯ãæéãæåã§èšå®ããŸãã
ç§ãã¡ã¯åæããŸãïŒ
â èšèªåºæã®ã¡ããªã¯ã¹ãç¹ã« php-fpm ã¯ãŒã«ãŒã
â Sentry ã®ãšã©ãŒã
â å¿çã¹ããŒã¿ã¹ã
- æ£ç¢ºãã€å¹³åçãªå¿çæéã
â ã¬ã€ãã³ã·ãŒ;
â åŠçæžã¿ããã³æªåŠçã®äŸå€ã
â 補åã®ææšã
ã¹ã¯ã€ãºãã¹ã
ã¹ã¯ã€ãŒãº ãã¹ãã¯ãã¹ã¯ã€ãŒãºããã¹ããšãåŒã°ããŸãã ãã®æè¡ã®åå㯠Netflix ã«å°å
¥ãããŸããã ãã®æ¬è³ªã¯ãæåã« XNUMX ã€ã®ã€ã³ã¹ã¿ã³ã¹ãå®éã®ãã©ãã£ãã¯ã§é害ç¹ãŸã§æºããããã®å¶éãèšå®ããããšã§ãã 次ã«ãå¥ã®ã€ã³ã¹ã¿ã³ã¹ãè¿œå ããŠããã®ãã¢ãåã³æ倧ãŸã§ããŒãããŸãã æåã®ãçµããã§å€©äºãšäžè§å·ãèŠããŸãã ããã§ãäžåºŠã« XNUMX ã€ã®ã€ã³ã¹ã¿ã³ã¹ãæ¥ç¶ããå€åã®ãã¿ãŒã³ãèšç®ããŸãã
ãå§çž®ãã«ãããã¹ã ããŒã¿ãå
±éã®ã¡ããªã¯ã¹ ããŒã¿ããŒã¹ã«æµå
¥ããããã§äººçºçãªè² è·çµæããããã§åŒ·åãããããåæãããããã§çœ®ãæãããããããšããããŸãã
çç£
⢠ã¹ã±ãŒãªã³ã°ã ãµãŒãã¹ãå®çšŒåç°å¢ã«å±éãããšãããµãŒãã¹ãã©ã®ããã«æ¡åŒµãããããç£èŠããŸãã ç§ãã¡ã®çµéšã§ã¯ãCPU ã€ã³ãžã±ãŒã¿ãŒã®ã¿ãç£èŠããããšã¯å¹æçã§ã¯ãããŸããã çŽç²ãªåœ¢åŒã® RPS ãã³ãããŒã¯ã«ããèªåã¹ã±ãŒãªã³ã°ã¯æ©èœããŸããããªã³ã©ã€ã³ ã¹ããªãŒãã³ã°ãªã©ã®ç¹å®ã®ãµãŒãã¹ã«å¯ŸããŠã®ã¿æ©èœããŸãã ãããã£ãŠãæåã«ã¢ããªã±ãŒã·ã§ã³åºæã®è£œåã¡ããªã¯ã¹ãæ€èšããŸãã
ãã®çµæãã¹ã±ãŒãªã³ã°æã«ä»¥äžãåæããŸãã
- CPU ããã³ RAM ã€ã³ãžã±ãŒã¿ãŒã
â ãã¥ãŒå
ã®ãªã¯ãšã¹ãã®æ°ã
- åå¿æéã
â èç©ãããå±¥æŽããŒã¿ã«åºã¥ãäºæž¬ã
ãµãŒãã¹ãã¹ã±ãŒãªã³ã°ãããšãã¯ããã§ãŒã³å ã®æåã®ãµãŒãã¹ãã¹ã±ãŒãªã³ã°ããããã®ãµãŒãã¹ãã¢ã¯ã»ã¹ãããµãŒãã¹ãè² è·ã«ãã£ãŠå€±æããªãããã«ããã®äŸåé¢ä¿ãç£èŠããããšãéèŠã§ãã ãµãŒãã¹ã®ããŒã«å šäœã®èš±å®¹å¯èœãªè² è·ã確ç«ããããã«ããæãè¿ããäŸåãµãŒãã¹ã®å±¥æŽããŒã¿ (CPU ãš RAM ã®ææšã®çµã¿åãããšãã¢ããªåºæã®ã¡ããªã¯ã¹ã«åºã¥ã) ã確èªããå±¥æŽããŒã¿ãšæ¯èŒããŸãããµãŒãã¹ã®åæåãªã©ããäŸåé¢ä¿ãã§ãŒã³ãå šäœã«ããã£ãŠäžããäžãŸã§ç¶ããŸãã
ãµãŒãã¹
ãã€ã¯ããµãŒãã¹ã皌åããããããã«ããªã¬ãŒãã¢ã¿ããã§ããŸãã
ããªã¬ãŒãçºçããå
žåçãªç¶æ³ã次ã«ç€ºããŸãã
â æœåšçã«å±éºãªç§»è¡ãæ€åºãããŸããã
â ã»ãã¥ãªãã£ã¢ããããŒãããªãªãŒã¹ãããŸããã
â ãµãŒãã¹èªäœã¯é·ããã¢ããããŒããããŠããŸããã§ããã
â ãµãŒãã¹ã®è² è·ãèããæžå°ãããããµãŒãã¹ã®è£œåã¡ããªã¯ã¹ã®äžéšãéåžžã®ç¯å²ãè¶
ããŠããŸãã
â ãã®ãµãŒãã¹ã¯æ°ãããã©ãããã©ãŒã èŠä»¶ãæºãããªããªããŸããã
ããªã¬ãŒã®äžã«ã¯ãåäœã®å®å®æ§ãæ ããã®ãããã°ãã·ã¹ãã ã¡ã³ããã³ã¹ã®æ©èœãšããŠã®ãã®ããããŸããããšãã°ãäžéšã®ãµãŒãã¹ãé·æéãããã€ãããŠãããããã®åºæ¬ã€ã¡ãŒãžãã»ãã¥ãªã㣠ãã§ãã¯ã«åæ Œããªããªã£ãå Žåãªã©ã§ãã
ããã·ã¥ããŒã
ã€ãŸããããã·ã¥ããŒã㯠PaaS å šäœã®ã³ã³ãããŒã« ããã«ã§ãã
- ãã¹ãã«ãã¬ããžãã€ã¡ãŒãžã®æ°ã補åã³ããŒã®æ°ãããŒãžã§ã³ãªã©ã®ããŒã¿ãå«ãããµãŒãã¹ã«é¢ããåäžã®æ å ±ã
- ãµãŒãã¹ãšã©ãã«ïŒããžãã¹ãŠããããžã®æå±ã®ããŒã«ãŒã補åã®æ©èœãªã©ïŒã«ãã£ãŠããŒã¿ããã£ã«ã¿ãªã³ã°ããããã®ããŒã«
- ãã¬ãŒã¹ããã®ã³ã°ãç£èŠã®ããã®ã€ã³ãã©ã¹ãã©ã¯ã㣠ããŒã«ãšçµ±åããããã®ããŒã«ã
- åäžã®ãµãŒãã¹ãã€ã³ãã®ããã¥ã¡ã³ãã
- ãµãŒãã¹å šäœã«ããããã¹ãŠã®ã€ãã³ããåäžã®èŠç¹ããèŠãããšãã§ããŸãã
åèšã§
PaaS ãå°å ¥ããåã«ãæ°ããéçºè ã¯ãæ¬çªç°å¢ã§ãã€ã¯ããµãŒãã¹ãèµ·åããããã«å¿ èŠãªãã¹ãŠã®ããŒã« (KubernetesãHelmã瀟å ã® TeamCity æ©èœããã©ãŒã«ã ãã¬ã©ã³ããªæ¹æ³ã§ã®ããŒã¿ããŒã¹ããã£ãã·ã¥ãžã®æ¥ç¶ã®ã»ããã¢ãããªã©) ãç解ããã®ã«æ°é±éãè²»ããããšãã§ããŸãããã¯ã€ãã¯ã¹ã¿ãŒããèªãã§ãµãŒãã¹èªäœãäœæããã«ã¯æ°æéããããŸãã
HighLoad++ 2018 ã§ãã®ãããã¯ã«é¢ããã¬ããŒããäœæããŸãããã芧ãã ããã
æåŸãŸã§èªãã§ããã ããæ¹ãžã®ããŒãã¹ãã©ãã¯
Avito ã§ã¯ãéçºè
åãã« XNUMX æ¥éã®ç€Ÿå
ãã¬ãŒãã³ã°ãéå¬ããŠããŸãã
èšç·Žã¯5æ7æ¥ããXNUMXæ¥ãŸã§ã¢ã¹ã¯ã¯ã§è¡ãããã ãããã¯å®å šã«å æãããå¶æ¥æ¥ã§ãã æŒé£ãšãã¬ãŒãã³ã°ã¯ç§ãã¡ã®ãªãã£ã¹ã§è¡ããã亀éè²»ãšå®¿æ³è²»ã¯éžã°ããåå è èªèº«ãæ¯æããŸãã
åå ç³ã蟌ã¿ãã§ããŸã
ãã¬ãŒãã³ã°åå è
ã®ååã¯ããã®æçš¿ã®æŽæ°ããã³éçºè
åããœãŒã·ã£ã« ãããã¯ãŒã¯ Avito (AvitoTech ã§çºè¡š) ã§çºè¡šããŸãã
åºæïŒ habr.com