ããã«ã¡ã¯ãç§ã¯éçºè
ã®ã»ã«ã²ã€ã»ãšã©ã³ãã§ãã§ãã
ãŸããããã€ãã®çšèªã玹ä»ããŸãã
- VIP (ä»®æ³ IP) - ãã©ã³ãµãŒ IP ã¢ãã¬ã¹
- ãµãŒããŒãããã¯ãšã³ããã€ã³ã¹ã¿ã³ã¹ - ã¢ããªã±ãŒã·ã§ã³ãå®è¡ããä»®æ³ãã·ã³
- RIP (ãªã¢ã« IP) - ãµãŒã㌠IP ã¢ãã¬ã¹
- Healthcheck - ãµãŒããŒã®æºåç¶æ³ã確èªãã
- ã¢ãªãŸãå·ã¢ãã€ã©ããªãã£ãŒãŸãŒã³ - ããŒã¿ã»ã³ã¿ãŒå ã®åé¢ãããã€ã³ãã©ã¹ãã©ã¯ãã£
- ãªãŒãžã§ã³ - ç°ãªã AZ ã®çµå
ããŒã ãã©ã³ãµãŒã¯ããã©ã³ã·ã³ã°èªäœãå®è¡ãããµãŒãã¹ã®ãã©ãŒã«ã ãã¬ã©ã³ã¹ãåäžãããã¹ã±ãŒãªã³ã°ãç°¡çŽ åãããšãã XNUMX ã€ã®äž»èŠãªã¿ã¹ã¯ã解決ããŸãã ãã©ãŒã«ã ãã¬ã©ã³ã¹ã¯èªåãã©ãã£ãã¯ç®¡çã«ãã£ãŠç¢ºä¿ãããŸãããã©ã³ãµãŒã¯ã¢ããªã±ãŒã·ã§ã³ã®ç¶æ ãç£èŠãã掻æ§ãã§ãã¯ã«åæ Œããªãã€ã³ã¹ã¿ã³ã¹ããã©ã³ã·ã³ã°ããé€å€ããŸãã ã¹ã±ãŒãªã³ã°ã¯ãã€ã³ã¹ã¿ã³ã¹éã§è² è·ãåçã«åæ£ããã€ã³ã¹ã¿ã³ã¹ã®ãªã¹ãããªã³ã¶ãã©ã€ã§æŽæ°ããããšã«ãã£ãŠä¿èšŒãããŸãã ãã©ã³ã¹ãååã«åäžã§ãªãå Žåãäžéšã®ã€ã³ã¹ã¿ã³ã¹ã容éå¶éãè¶ ããè² è·ãåããããšã«ãªãããµãŒãã¹ã®ä¿¡é Œæ§ãäœäžããŸãã
ããŒã ãã©ã³ãµãŒã¯ãå€ãã®å Žåããããå®è¡ããã OSI ã¢ãã«ã®ãããã³ã«å±€ã«ãã£ãŠåé¡ãããŸãã Cloud Balancer ã¯ã4 çªç®ã®å±€ã§ãã LXNUMX ã«å¯Ÿå¿ãã TCP ã¬ãã«ã§åäœããŸãã
ã¯ã©ãŠã ãã©ã³ãµãŒ ã¢ãŒããã¯ãã£ã®æŠèŠã«ç§»ããŸãããã åŸã ã«è©³çŽ°ã¬ãã«ãäžããŠãããŸãã ãã©ã³ãµãŒ ã³ã³ããŒãã³ãã XNUMX ã€ã®ã¯ã©ã¹ã«åé¡ããŸãã æ§æãã¬ãŒã³ ã¯ã©ã¹ã¯ãŠãŒã¶ãŒæäœãæ åœããã·ã¹ãã ã®ã¿ãŒã²ããç¶æ ãä¿åããŸãã ã³ã³ãããŒã« ãã¬ãŒã³ã¯ã·ã¹ãã ã®çŸåšã®ç¶æ ãä¿åããããŒã¿ ãã¬ãŒã³ ã¯ã©ã¹ããã·ã¹ãã ã管çããŸããããŒã¿ ãã¬ãŒã³ ã¯ã©ã¹ã¯ãã¯ã©ã€ã¢ã³ãããã€ã³ã¹ã¿ã³ã¹ãžã®ãã©ãã£ãã¯ã®é ä¿¡ãçŽæ¥æ åœããŸãã
ããŒã¿ãã¬ãŒã³
ãã©ãã£ãã¯ã¯æçµçã«å¢çã«ãŒã¿ãŒãšåŒã°ããé«äŸ¡ãªããã€ã¹ã«å°éããŸãã èé害æ§ãé«ããããã«ããã®ãããªè€æ°ã®ããã€ã¹ã XNUMX ã€ã®ããŒã¿ã»ã³ã¿ãŒã§åæã«åäœããŸãã 次ã«ããã©ãã£ãã¯ã¯ãã©ã³ãµãŒã«éãããã¯ã©ã€ã¢ã³ãã«å¯Ÿã㊠BGP çµç±ã§ãšããŒãã£ã¹ã IP ã¢ãã¬ã¹ããã¹ãŠã® AZ ã«ã¢ããŠã³ã¹ããŸãã
ãã©ãã£ãã¯ã¯ ECMP çµç±ã§éä¿¡ãããŸããããã¯ãã¿ãŒã²ãã (ãã®å Žåãã¿ãŒã²ããã¯å®å
IP ã¢ãã¬ã¹) ãžã®åçã«è¯å¥œãªã«ãŒããè€æ°ååšãããããã®ããããã«æ²¿ã£ãŠãã±ãããéä¿¡ã§ããã«ãŒãã£ã³ã°æŠç¥ã§ãã ãŸãã次ã®ã¹ããŒã ã«åŸã£ãŠãè€æ°ã®ã¢ãã€ã©ããªã㣠ãŸãŒã³ã§ã®äœæ¥ããµããŒãããŠããŸããåãŸãŒã³ã®ã¢ãã¬ã¹ãã¢ããã¿ã€ãºãããã©ãã£ãã¯ã¯æãè¿ããŸãŒã³ã«éä¿¡ããããã®å¶éãè¶
ããŸããã ãã®æçš¿ã®åŸåã§ã¯ããã©ãã£ãã¯ã«äœãèµ·ãããã«ã€ããŠè©³ãã説æããŸãã
æ§æãã¬ãŒã³
æ§æãã¬ãŒã³ã®äž»èŠãªã³ã³ããŒãã³ã㯠API ã§ããããã©ã³ãµãŒã䜿çšããåºæ¬æäœ (ã€ã³ã¹ã¿ã³ã¹ã®äœæãåé€ãå€æŽããã«ã¹ãã§ãã¯çµæã®ååŸãªã©) ãå®è¡ãããŸããããã¯äžæ¹ã§ã¯ REST API ã§ãããä»æ¹ã§ã¯ãã®ä»ãã¯ã©ãŠãã§ã¯ gRPC ãã¬ãŒã ã¯ãŒã¯ããã䜿çšãããããREST ã gRPC ã«ãå€æãããgRPC ã®ã¿ã䜿çšããŸãã ãªã¯ãšã¹ãã¯ãã¹ãŠãYandex.Cloud ã¯ãŒã«ãŒã®å
±éããŒã«ã§å®è¡ãããäžé£ã®éåæåªçã¿ã¹ã¯ã®äœæã«ã€ãªãããŸãã ã¿ã¹ã¯ã¯ããã€ã§ãäžæåæ¢ããŠåéã§ããããã«èšè¿°ãããŠããŸãã ããã«ãããæäœã®ã¹ã±ãŒã©ããªãã£ãåçŸæ§ããã°ã確ä¿ãããŸãã
ãã®çµæãAPI ããã®ã¿ã¹ã¯ã¯ãGo ã§èšè¿°ããããã©ã³ãµãŒ ãµãŒãã¹ ã³ã³ãããŒã©ãŒã«ãªã¯ãšã¹ããäœæããŸãã ãã©ã³ãµãŒãè¿œå ããã³åé€ããããããã¯ãšã³ãã®æ§æãèšå®ãå€æŽãããã§ããŸãã
ãã®ãµãŒãã¹ã¯ããã®ç¶æ
ã Yandex Database ã«ä¿åããŸããYandex Database ã¯ãéããªã䜿çšã§ããããã«ãªãåæ£ç®¡çããŒã¿ããŒã¹ã§ãã Yandex.Cloud ã§ã¯ããã§ã«è¡ã£ãŠããããã«
ãã©ã³ãµãŒã³ã³ãããŒã©ãŒã®è©±ã«æ»ããŸãããã ãã®ã¿ã¹ã¯ã¯ããã©ã³ãµãŒã«é¢ããæ å ±ãä¿åããä»®æ³ãã·ã³ã®æºåç¶æ³ããã§ãã¯ããã¿ã¹ã¯ããã«ã¹ãã§ã㯠ã³ã³ãããŒã©ãŒã«éä¿¡ããããšã§ãã
ãã«ã¹ãã§ãã¯ã³ã³ãããŒã©ãŒ
ãã§ã㯠ã«ãŒã«ã®å€æŽãªã¯ãšã¹ããåä¿¡ããYDB ã«ä¿åãããã«ã¹ãã§ã㯠ããŒãéã§ã¿ã¹ã¯ãåæ£ããŠçµæãéèšããããŒã¿ããŒã¹ã«ä¿åããŠããŒããã©ã³ãµãŒ ã³ã³ãããŒã©ãŒã«éä¿¡ããŸãã 次ã«ãããŒã¿ ãã¬ãŒã³å ã®ã¯ã©ã¹ã¿ãŒã®æ§æãå€æŽãããªã¯ãšã¹ããããŒããã©ã³ãµãŒ ããŒãã«éä¿¡ããŸããããã«ã€ããŠã¯åŸã§èª¬æããŸãã
å¥åº·èšºæã«ã€ããŠè©³ããã話ããŸãããã ãããã¯ããã€ãã®ã¯ã©ã¹ã«åé¡ã§ããŸãã ç£æ»ã«ã¯ããŸããŸãªæååºæºããããŸãã TCP ãã§ãã¯ã§ã¯ãäžå®æéå
ã«æ¥ç¶ãæ£åžžã«ç¢ºç«ããå¿
èŠããããŸãã HTTP ãã§ãã¯ã§ã¯ãæ¥ç¶ã®æåãšã¹ããŒã¿ã¹ ã³ãŒã 200 ã®å¿çã®äž¡æ¹ãå¿
èŠã§ãã
ãŸãããã§ãã¯ã¯ã¢ã¯ã·ã§ã³ã®ã¯ã©ã¹ãç°ãªããŸãããã§ãã¯ã¯ã¢ã¯ãã£ããšããã·ãã§ãã ããã·ã ãã§ãã¯ã¯ãç¹å¥ãªã¢ã¯ã·ã§ã³ãå®è¡ããã«ããã©ãã£ãã¯ã§äœãèµ·ãã£ãŠããããç£èŠããã ãã§ãã ããã¯ãäžäœã¬ãã«ã®ãããã³ã«ã®ããžãã¯ã«äŸåãããããL4 ã§ã¯ããŸãããŸãæ©èœããŸãããL4 ã§ã¯ãæäœã«ããã£ãæéããæ¥ç¶ã®å®äºãè¯å¥œãäžè¯ãã«ã€ããŠã®æ å ±ããããŸããã ã¢ã¯ãã£ã ãã§ãã¯ã§ã¯ããã©ã³ãµãŒãåãµãŒã㌠ã€ã³ã¹ã¿ã³ã¹ã«ãªã¯ãšã¹ããéä¿¡ããå¿ èŠããããŸãã
ã»ãšãã©ã®ããŒã ãã©ã³ãµãŒã¯ã掻æ§ãã§ãã¯ãããèªäœã§å®è¡ããŸãã ã¯ã©ãŠãã§ã¯ãæ¡åŒµæ§ãé«ããããã«ã·ã¹ãã ã®ãããã®éšåãåé¢ããããšã«ããŸããã ãã®ã¢ãããŒãã«ããããµãŒãã¹ãžã®ãã«ã¹ãã§ã㯠ãªã¯ãšã¹ãã®æ°ãç¶æããªããããã©ã³ãµãŒã®æ°ãå¢ããããšãã§ããŸãã ãã§ãã¯ã¯åå¥ã®ãã«ã¹ãã§ã㯠ããŒãã«ãã£ãŠå®è¡ããããã®ããŒãéã§ãã§ã㯠ã¿ãŒã²ãããã·ã£ãŒãã£ã³ã°ããã³ã¬ããªã±ãŒããããŸãã 倱æããå¯èœæ§ããããããXNUMX ã€ã®ãã¹ããããã§ãã¯ãå®è¡ããããšã¯ã§ããŸããã ãããªããšã圌ããã§ãã¯ããã€ã³ã¹ã¿ã³ã¹ã®ç¶æ ã¯ååŸã§ããªããªããŸãã å°ãªããšã XNUMX ã€ã®ãã«ã¹ãã§ã㯠ããŒãããã€ã³ã¹ã¿ã³ã¹ã®ãã§ãã¯ãå®è¡ããŸãã äžè²«ããããã·ã¥ ã¢ã«ãŽãªãºã ã䜿çšããŠãããŒãéã®ãã§ãã¯ã®ç®çãåå²ããŸãã
ãã©ã³ã¹èª¿æŽãšãã«ã¹ãã§ãã¯ãåé¢ãããšãåé¡ãçºçããå¯èœæ§ããããŸãã healthcheck ããŒãããã©ã³ãµãŒ (çŸåšãã©ãã£ãã¯ãåŠçããŠããªã) ããã€ãã¹ããŠã€ã³ã¹ã¿ã³ã¹ã«ãªã¯ãšã¹ããè¡ããšããªãœãŒã¹ãçããŠããããã«èŠããŸããããã©ãã£ãã¯ãããã«å°éããªããšããå¥åŠãªç¶æ³ãçºçããŸãã ãã®åé¡ã次ã®æ¹æ³ã§è§£æ±ºããŸããã€ãŸãããã©ã³ãµãŒãä»ããŠãã«ã¹ãã§ã㯠ãã©ãã£ãã¯ãéå§ããããšãä¿èšŒãããŸãã èšãæããã°ãã¯ã©ã€ã¢ã³ãããã®ãã©ãã£ãã¯ãšãã«ã¹ãã§ãã¯ããã®ãã©ãã£ãã¯ãå«ããã±ããã移åããã¹ããŒã ã¯æå°éç°ãªããŸããã©ã¡ãã®å Žåãããã±ããã¯ãã©ã³ãµãŒã«å°éãããã©ã³ãµãŒãã¿ãŒã²ãã ãªãœãŒã¹ã«ãã±ãããé
ä¿¡ããŸãã
éãã¯ãã¯ã©ã€ã¢ã³ãã VIP ã«ãªã¯ãšã¹ããè¡ãã®ã«å¯Ÿãããã«ã¹ãã§ãã¯ã¯åã
ã® RIP ã«ãªã¯ãšã¹ããè¡ãããšã§ãã ããã§èå³æ·±ãåé¡ãçºçããŸããã€ãŸãããŠãŒã¶ãŒã«ã°ã¬ãŒ IP ãããã¯ãŒã¯ã§ãªãœãŒã¹ãäœæããæ©äŒãäžããŠããã®ã§ãã ãã©ã³ãµãŒã®èåŸã«ãµãŒãã¹ãé ãã 10.0.0.1 人ã®ç°ãªãã¯ã©ãŠãææè
ããããšæ³åããŠã¿ãŸãããã ããããã®ãµããããã«åãã¢ãã¬ã¹ãæã€ãªãœãŒã¹ã 24/XNUMX ã«ãããŸãã ããããäœããã®æ¹æ³ã§åºå¥ã§ããå¿
èŠããããŸããããã§ã¯ãYandex.Cloud ä»®æ³ãããã¯ãŒã¯ã®æ§é ã詳ãã調ã¹ãå¿
èŠããããŸãã 詳ããå
容ã¯èª¿ã¹ãæ¹ãè¯ãã§ãã
Healthcheck ããŒãã¯ãããããæº IPv6 ã¢ãã¬ã¹ã䜿çšããŠãã©ã³ãµãŒã«æ¥ç¶ããŸãã æºã¢ãã¬ã¹ã¯ãIPv6 ã¢ãã¬ã¹ãšãŠãŒã¶ãŒ ãµãããã ID ãå éšã«åã蟌ãŸãã IPv4 ã¢ãã¬ã¹ã§ãã ãã©ãã£ãã¯ã¯ãã©ã³ãµãŒã«å°éãããã©ã³ãµãŒãã IPv4 ãªãœãŒã¹ ã¢ãã¬ã¹ãæœåºãããIPv6 ã IPv4 ã«çœ®ãæããããŠããã±ããããŠãŒã¶ãŒã®ãããã¯ãŒã¯ã«éä¿¡ãããŸãã
éæ¹åã®ãã©ãã£ãã¯ãåæ§ã«é²ã¿ãŸãããã©ã³ãµã¯ããã«ã¹ãã§ãã«ãŒããå®å ãã°ã¬ãŒ ãããã¯ãŒã¯ã§ããããšãèªèããIPv4 ã IPv6 ã«å€æããŸãã
VPP - ããŒã¿ ãã¬ãŒã³ã®äžå¿
ãã©ã³ãµã¯ããããã¯ãŒã¯ ãã©ãã£ãã¯ã®ãããåŠçã®ããã®ã·ã¹ã³ã®ãã¬ãŒã ã¯ãŒã¯ã§ãã Vector Packet Processing (VPP) ãã¯ãããžãŒã䜿çšããŠå®è£ ãããŠããŸãã ãã®äŸã§ã¯ããã¬ãŒã ã¯ãŒã¯ã¯ãŠãŒã¶ãŒç©ºéã®ãããã¯ãŒã¯ ããã€ã¹ç®¡çã©ã€ãã©ãªã§ããããŒã¿ ãã¬ãŒã³éçºããã (DPDK) äžã§åäœããŸãã ããã«ãããé«ããã±ããåŠçããã©ãŒãã³ã¹ãä¿èšŒãããŸããã«ãŒãã«å ã§çºçããå²ã蟌ã¿ãå€§å¹ ã«æžå°ããã«ãŒãã«ç©ºéãšãŠãŒã¶ãŒç©ºéã®éã§ã³ã³ããã¹ãã®åãæ¿ããçºçããŸããã
VPP ã¯ããã«é²åããããã±ãŒãžããããã«çµåããããšã§ãã·ã¹ãã ããããã«ããã©ãŒãã³ã¹ãåŒãåºããŸãã ææ°ã®ããã»ããµã§ã¯ãã£ãã·ã¥ãç©æ¥µçã«äœ¿çšããããšã§ããã©ãŒãã³ã¹ãåäžããŸãã ããŒã¿ ãã£ãã·ã¥ (ãã±ããã¯ããã¯ãã«ãã§åŠçãããããŒã¿ã¯äºãã«è¿ã) ãšåœä»€ãã£ãã·ã¥ã®äž¡æ¹ã䜿çšãããŸããVPP ã§ã¯ããã±ããåŠçã¯ã°ã©ãã«åŸãããã®ããŒãã«ã¯åãã¿ã¹ã¯ãå®è¡ããé¢æ°ãå«ãŸããŸãã
ããšãã°ãVPP ã§ã® IP ãã±ããã®åŠçã¯æ¬¡ã®é åºã§è¡ãããŸãããŸãããã±ãã ããããŒã解æããŒãã§è§£æããã次ã«ããŒãã«éä¿¡ãããããŒãã¯ã«ãŒãã£ã³ã° ããŒãã«ã«åŸã£ãŠãã±ãããããã«è»¢éããŸãã
ã¡ãã£ãšããŒãã³ã¢ã VPP ã®äœæè ã¯ããã»ããµ ãã£ãã·ã¥ã®äœ¿çšã«ããã劥åã容èªããŠããªãããããã±ããã®ãã¯ãã«ãåŠçããäžè¬çãªã³ãŒãã«ã¯æåã®ãã¯ãã«åãå«ãŸããŠããŸããããã¥ãŒã« XNUMX ã€ã®ãã±ãããããããããªç¶æ³ãåŠçãããåŠçã«ãŒããããã次ã«ãXNUMX ã€ã§åãã次㫠- XNUMX ã€ã§ãã ããªãã§ããåœä»€ã¯ãããŒã¿ããã£ãã·ã¥ã«ããŒãããŠãåŸç¶ã®å埩ã§ã®ã¢ã¯ã»ã¹ãé«éåããããã«ãã䜿çšãããŸãã
n_left_from = frame->n_vectors;
while (n_left_from > 0)
{
vlib_get_next_frame (vm, node, next_index, to_next, n_left_to_next);
// ...
while (n_left_from >= 4 && n_left_to_next >= 2)
{
// processing multiple packets at once
u32 next0 = SAMPLE_NEXT_INTERFACE_OUTPUT;
u32 next1 = SAMPLE_NEXT_INTERFACE_OUTPUT;
// ...
/* Prefetch next iteration. */
{
vlib_buffer_t *p2, *p3;
p2 = vlib_get_buffer (vm, from[2]);
p3 = vlib_get_buffer (vm, from[3]);
vlib_prefetch_buffer_header (p2, LOAD);
vlib_prefetch_buffer_header (p3, LOAD);
CLIB_PREFETCH (p2->data, CLIB_CACHE_LINE_BYTES, STORE);
CLIB_PREFETCH (p3->data, CLIB_CACHE_LINE_BYTES, STORE);
}
// actually process data
/* verify speculative enqueues, maybe switch current next frame */
vlib_validate_buffer_enqueue_x2 (vm, node, next_index,
to_next, n_left_to_next,
bi0, bi1, next0, next1);
}
while (n_left_from > 0 && n_left_to_next > 0)
{
// processing packets by one
}
// processed batch
vlib_put_next_frame (vm, node, next_index, n_left_to_next);
}
ãããã£ãŠããã«ã¹ãã§ãã¯ã¯ IPv6 çµç±ã§ VPP ãšéä¿¡ãããã«ã¹ãã§ãã¯ã IPv4 ã«å€æãããŸãã ããã¯ã°ã©ãå ã®ããŒãã«ãã£ãŠè¡ãããã¢ã«ãŽãªãºã NAT ãšåŒã°ããŸãã éæ¹åãã©ãã£ã㯠(ããã³ IPv6 ãã IPv4 ãžã®å€æ) ã«ã¯ãåãã¢ã«ãŽãªãºã NAT ããŒãããããŸãã
ãã©ã³ãµãŒ ã¯ã©ã€ã¢ã³ãããã®çŽæ¥ãã©ãã£ãã¯ã¯ããã©ã³ã·ã³ã°èªäœãå®è¡ããã°ââã©ã ããŒããééããŸãã
æåã®ããŒãã¯ã¹ãã£ãã㌠ã»ãã·ã§ã³ã§ãã ã®ããã·ã¥ãä¿åããŸã
5 ã¿ãã« ããã·ã¥ã¯ãåŸç¶ã®äžè²«ããããã·ã¥ ããŒãã§å®è¡ããèšç®ãæžããã®ã«åœ¹ç«ã¡ããŸãããã©ã³ãµãŒã®èåŸã§ãªãœãŒã¹ ãªã¹ãã®å€æŽãããé©åã«åŠçããã®ã«åœ¹ç«ã¡ãŸãã ã»ãã·ã§ã³ãååšããªããã±ããããã©ã³ãµãŒã«å°çãããšããã®ãã±ããã¯ã³ã³ã·ã¹ãã³ã ããã·ã¥ ããŒãã«éä¿¡ãããŸãã ããã§ãã³ã³ã·ã¹ãã³ã ããã·ã¥ã䜿çšããŠãã©ã³ã·ã³ã°ãè¡ãããŸããå©çšå¯èœãªãã©ã€ãããªãœãŒã¹ã®ãªã¹ããããªãœãŒã¹ãéžæããŸãã 次ã«ããã±ãã㯠NAT ããŒãã«éä¿¡ãããå®éã«å®å ã¢ãã¬ã¹ã眮ãæãããããã§ãã¯ãµã ãåèšç®ãããŸãã ã芧ã®ãšãããVPP ã®ã«ãŒã«ã«åŸããåæ§ã®èšç®ãã°ã«ãŒãåããŠããã»ããµãŒ ãã£ãã·ã¥ã®å¹çãé«ããŸãã
äžè²«ããããã·ã¥å
ãªããããéžãã ã®ãããããŠããã¯äžäœäœãªã®ãïŒ ãŸããåã®ã¿ã¹ã¯ãã€ãŸããªã¹ããããªãœãŒã¹ãéžæããããšãèããŠã¿ãŸãããã
äžè²«æ§ã®ãªãããã·ã¥ã§ã¯ãåä¿¡ãã±ããã®ããã·ã¥ãèšç®ããããã®ããã·ã¥ããªãœãŒã¹ã®æ°ã§å²ã£ãäœãã«ãã£ãŠãªã¹ããããªãœãŒã¹ãéžæãããŸãã ãªã¹ããå€æŽãããŠããªãéãããã®ã¹ããŒã ã¯ããŸãæ©èœããŸããåžžã«åã 5 ã¿ãã«ãæã€ãã±ãããåãã€ã³ã¹ã¿ã³ã¹ã«éä¿¡ããŸãã ããšãã°ãäžéšã®ãªãœãŒã¹ããã«ã¹ãã§ãã¯ã«å¿çããªããªã£ãå Žåãããã·ã¥ã®å€§éšåã§éžæãå€ãããŸãã ã¯ã©ã€ã¢ã³ãã® TCP æ¥ç¶ã¯åæãããŸãã以åã«ã€ã³ã¹ã¿ã³ã¹ A ã«å°éããŠãããã±ãããããã®ãã±ããã®ã»ãã·ã§ã³ã«æ
£ããŠããªãã€ã³ã¹ã¿ã³ã¹ B ã«å°éãå§ããå¯èœæ§ããããŸãã
äžè²«æ§ã®ããããã·ã¥ã«ãããåè¿°ã®åé¡ã解決ãããŸãã ãã®æŠå¿µã説æããæãç°¡åãªæ¹æ³ã¯æ¬¡ã®ãšããã§ããããã·ã¥ (ããšãã°ãIP:ããŒã) ã«ãã£ãŠãªãœãŒã¹ãé åžãããªã³ã°ããããšæ³åããŠãã ããã ãªãœãŒã¹ã®éžæã¯ããã±ããã®ããã·ã¥ã«ãã£ãŠæ±ºå®ãããè§åºŠã«ãããã€ãŒã«ã®å転ã§ãã
ããã«ããããªãœãŒã¹ã®æ§æãå€æŽãããå Žåã®ãã©ãã£ãã¯ã®ååæ£ãæå°éã«æããããŸãã ãªãœãŒã¹ã®åé€ã¯ããªãœãŒã¹ãé
眮ãããŠããã³ã³ã·ã¹ãã³ã ããã·ã¥ ãªã³ã°ã®éšåã«ã®ã¿åœ±é¿ããŸãã ãªãœãŒã¹ãè¿œå ãããšååžãå€ãããŸãããã¹ãã£ãã㌠ã»ãã·ã§ã³ ããŒããããããããã§ã«ç¢ºç«ãããŠããã»ãã·ã§ã³ãæ°ãããªãœãŒã¹ã«åãæ¿ããããšãã§ããŸããã
ãã©ã³ãµãŒãšãªãœãŒã¹éã®çŽæ¥ãã©ãã£ãã¯ã«äœãèµ·ãããã調ã¹ãŸããã 次ã«ãæ»ããã©ãã£ãã¯ãèŠãŠã¿ãŸãããã ããã¯ãã§ã㯠ãã©ãã£ãã¯ãšåããã¿ãŒã³ã«åŸããŸããã¢ã«ãŽãªãºã NAT çµç±ãã€ãŸããã¯ã©ã€ã¢ã³ã ãã©ãã£ãã¯ã®å Žåã¯ãªããŒã¹ NAT 44 çµç±ããã«ã¹ãã§ã㯠ãã©ãã£ãã¯ã®å Žå㯠NAT 46 çµç±ã§ãã åœç€Ÿã¯ç¬èªã®ã¹ããŒã ãéµå®ãããã«ã¹ãã§ã㯠ãã©ãã£ãã¯ãšå®éã®ãŠãŒã¶ãŒ ãã©ãã£ãã¯ãçµ±åããŸãã
ããŒããã©ã³ãµããŒããšçµã¿ç«ãŠãããã³ã³ããŒãã³ã
VPP å ã®ãã©ã³ãµãŒãšãªãœãŒã¹ã®æ§æã¯ãããŒã«ã« ãµãŒãã¹ (loadbalancer-node) ã«ãã£ãŠå ±åãããŸãã ããŒããã©ã³ãµãŒ ã³ã³ãããŒã©ãŒããã®ã€ãã³ã ã¹ããªãŒã ããµãã¹ã¯ã©ã€ãããçŸåšã® VPP ç¶æ ãšã³ã³ãããŒã©ãŒããåä¿¡ããã¿ãŒã²ããç¶æ ã®éããããããã§ããŸãã éããã·ã¹ãã ãåŸãããŸããAPI ããã®ã€ãã³ãããã©ã³ãµãŒ ã³ã³ãããŒã©ãŒã«å±ãããã©ã³ãµãŒ ã³ã³ãããŒã©ãŒãã¿ã¹ã¯ããã«ã¹ãã§ã㯠ã³ã³ãããŒã©ãŒã«å²ãåœãŠãŠããªãœãŒã¹ã®ã掻æ§åºŠãããã§ãã¯ããŸãã 次ã«ãã¿ã¹ã¯ããã«ã¹ãã§ã㯠ããŒãã«å²ãåœãŠãçµæãéèšãããã®åŸãã©ã³ãµãŒ ã³ã³ãããŒã©ãŒã«çµæãéãè¿ããŸãã ããŒããã©ã³ãµãŒ ããŒãã¯ã³ã³ãããŒã©ãŒããã®ã€ãã³ãããµãã¹ã¯ã©ã€ãããVPP ã®ç¶æ ãå€æŽããŸãã ãã®ãããªã·ã¹ãã ã§ã¯ãåãµãŒãã¹ã¯é£æ¥ãããµãŒãã¹ã«ã€ããŠå¿ èŠãªããšã ããç¥ã£ãŠããŸãã æ¥ç¶ã®æ°ã¯å¶éãããŠãããããŸããŸãªã»ã°ã¡ã³ããåå¥ã«æäœããã³æ¡åŒµããããšãã§ããŸãã
ã©ã®ãããªåé¡ãåé¿ãããŸããã?
ã³ã³ãããŒã« ãã¬ãŒã³å ã®ãã¹ãŠã®ãµãŒãã¹ã¯ Go ã§æžãããŠãããåªããã¹ã±ãŒãªã³ã°ãšä¿¡é Œæ§ã®ç¹æ§ãåããŠããŸãã Go ã«ã¯ãåæ£ã·ã¹ãã ãæ§ç¯ããããã®ãªãŒãã³ãœãŒã¹ ã©ã€ãã©ãªãå€æ°ãããŸãã åœç€Ÿã¯ GRPC ãç©æ¥µçã«äœ¿çšããŠããããã¹ãŠã®ã³ã³ããŒãã³ãã«ã¯ãµãŒãã¹ ãã£ã¹ã«ããªã®ãªãŒãã³ãœãŒã¹å®è£ ãå«ãŸããŠããŸããåœç€Ÿã®ãµãŒãã¹ã¯çžäºã®ããã©ãŒãã³ã¹ãç£èŠãããã®æ§æãåçã«å€æŽã§ããããã GRPC ã®ãã©ã³ã·ã³ã°ãšãªã³ã¯ãããŠããŸãã ã¡ããªã¯ã¹ã«ã€ããŠã¯ããªãŒãã³ãœãŒã¹ ãœãªã¥ãŒã·ã§ã³ã䜿çšããŸãã ããŒã¿ ãã¬ãŒã³ã§ã¯ããŸãšããªããã©ãŒãã³ã¹ãšå€§ããªãªãœãŒã¹äºçŽãåŸãããŸãããéã®ãããã¯ãŒã¯ ã«ãŒãã§ã¯ãªã VPP ã®ããã©ãŒãã³ã¹ã«äŸåã§ããã¹ã¿ã³ããçµã¿ç«ãŠãã®ã¯éåžžã«é£ããããšãããããŸããã
åé¡ãšè§£æ±ºç
äœãããŸããããªãã£ãã®ã§ãããã? Go ã«ã¯èªåã¡ã¢ãªç®¡çæ©èœããããŸãããã¡ã¢ãª ãªãŒã¯ã¯äŸç¶ãšããŠçºçããŸãã ãããã«å¯ŸåŠããæãç°¡åãªæ¹æ³ã¯ããŽã«ãŒãã³ãå®è¡ããå¿ããã«çµäºããããšã§ãã èŠç¹: Go ããã°ã©ã ã®ã¡ã¢ãªæ¶è²»éã«æ³šæããŠãã ããã å€ãã®å Žåãé©åãªææšã¯ãŽã«ãŒãã³ã®æ°ã§ãã ãã®è©±ã«ã¯å©ç¹ããããŸããGo ã§ã¯ãã¡ã¢ãªæ¶è²»éãå®è¡äžã®ãŽã«ãŒãã³ã®æ°ããã®ä»å€ãã®ãã©ã¡ãŒã¿ãŒãªã©ã®å®è¡æããŒã¿ãç°¡åã«ååŸã§ããŸãã
ãŸããGo ã¯æ©èœãã¹ãã«ã¯æé©ãªéžæã§ã¯ãªãå¯èœæ§ããããŸãã ãããã¯éåžžã«åé·ã§ããããCI ã§ãã¹ãŠããããã§å®è¡ããããšããæšæºçãªã¢ãããŒãã¯ããŸãé©ããŠããŸããã å®éã®ãšãããæ©èœãã¹ãã¯ããå€ãã®ãªãœãŒã¹ãå¿ èŠãšããå®éã®ã¿ã€ã ã¢ãŠããçºçããŸãã ãã®ãããCPU ãåäœãã¹ãã§ããžãŒç¶æ ã«ãªãããã¹ãã倱æããå¯èœæ§ããããŸãã çµè«: å¯èœã§ããã°ãåäœãã¹ããšã¯å¥ã«ãéãããã¹ããå®è¡ããŠãã ããã
ãã€ã¯ããµãŒãã¹ ã€ãã³ã ã¢ãŒããã¯ãã£ã¯ã¢ããªã¹ãããè€éã§ããæ°åã®ç°ãªããã·ã³ã§ãã°ãåéããã®ã¯ããŸã䟿å©ã§ã¯ãããŸããã çµè«: ãã€ã¯ããµãŒãã¹ãäœæããå Žåã¯ãããã«ãã¬ãŒã¹ã«ã€ããŠæ€èšããŠãã ããã
ç§ãã¡ã®èšç»
å
éšãã©ã³ãµãŒãIPv6 ãã©ã³ãµãŒãèµ·åããKubernetes ã¹ã¯ãªããã®ãµããŒããè¿œå ãããµãŒãã¹ã®ã·ã£ãŒãåãç¶ç¶ã (çŸåšãhealthcheck-node ãš healthcheck-ctrl ã®ã¿ãã·ã£ãŒãåãããŠããŸã)ãæ°ãããã«ã¹ãã§ãã¯ãè¿œå ãããã§ãã¯ã®ã¹ããŒãéçŽãå®è£
ããŸãã ç§ãã¡ã¯ããµãŒãã¹ãããã«ç¬ç«ãããŠãçžäºã«çŽæ¥éä¿¡ããã®ã§ã¯ãªããã¡ãã»ãŒãž ãã¥ãŒã䜿çšããŠéä¿¡ããå¯èœæ§ãæ€èšããŠããŸãã æè¿ã¯ã©ãŠãäžã«SQS察å¿ãµãŒãã¹ãç»å Ž
æè¿ãYandex Load Balancer ã®å
¬éãªãªãŒã¹ãè¡ãããŸããã æ¢æ€ãã
åºæïŒ habr.com