Wed Sep 10 2025
...
FastCommentsãã°ããŒãã«ã«åæ£ãããŸãã
æ°æ©èœ
以åãFastCommentsã¯éåžžã«äŒçµ±çãªãŠã§ãã¢ããªã±ãŒã·ã§ã³ã®ã¢ãŒããã¯ãã£ãæã£ãŠããŸãããã¢ããªãµãŒããŒãããŒã¿ããŒã¹ãããã³ãã®ä»ã®ãµãŒãã¹ããããŸããããã㯠2ã€ã®ãªãŒãžã§ã³ïŒus-westãšeuïŒã«ããã£ãŠè€è£œãããŠããŸããããã©ã³ã¹ã«ããŠãã°ããŒãã«ããŒã¿ã»ã³ã¿ãŒã§ãã¹ããããŠãã顧客ã®ã³ã¡ã³ãã¹ã¬ããã衚瀺ãããå Žåããªã¯ãšã¹ã㯠ã³ã¡ã³ãããŒã¿ã®ããã«us-westãŸã§è¡ãå¿ èŠããããŸããã
ãããã®å¿ èŠã¯ãããŸããïŒä»ã§ã¯ãã³ã¡ã³ãããŒã¿ãšãã¹ãŠã®ã¡ãã£ã¢è³ç£ããç§ãã¡ã®ã°ããŒãã«ãããã€ã¡ã³ãã®é¡§å®¢ã®ããã«äžçäžã«è€è£œãããŠããã EUãããã€ã¡ã³ãã®é¡§å®¢ã®ããã«ã¯ãããŒã¿ãè€è£œããã3ã€ã®ååšãã€ã³ãããããŸãããªã¯ãšã¹ãã¯EUå ã®æå¯ãã®ããŒãã«éä¿¡ãããŸãã
以åã®åäœæ¹æ³
ããŒã¿ããŒã¹ã«ã¯ããã€ãã®ã©ã€ãã¬ããªã«ããªãŒãžã§ã³ãã¯ã©ãŠããããã€ããŒéã«ãã£ããã®ã®ããã¹ãŠã®ãµãŒãã¹ã¯ãµãŒãã¹ã¿ã€ãããšã«1ã€ã®ã€ã³ã¹ã¿ã³ã¹ã«ãããã€ãããŠããŸããã ã€ãŸããåãªãŒãžã§ã³ã«ã¯1ã€ã®ã¢ããªãµãŒããŒã1ã€ã®pubsubãµãŒããŒãããã³1ã€ã®ã¡ãã£ã¢ãµãŒããŒããããŸãããèšç»ã¯ãã·ã³ãã«ããä¿ã€ããã«åçŽã¹ã±ãŒã«ããããšã§ããã ã³ãŒããæžãã®ã¯ç°¡åã§ãã - ããŒã¿ããŒã¹ã«ã¢ã¯ã»ã¹ãããšãã«ã¯åžžã«ãèªåã®æžã蟌ã¿ãèªããããšãã§ãããšããã£ãŠããŸãããã€ã³ãã©ã¯ç°¡åã§ãããã ã»ãã¥ãªãã£æŽæ°ãé€ããŠã¯ããŠã³ã¿ã€ã ã1åãããããšããããŸããã
åé¡
åé¡ã¯æããã«ã容éã«éããããšããå§ãŸããŸãããæé©åããæçµçã«ã¯ãã®ãµãŒãã¹ã®ã€ã³ã¹ã¿ã³ã¹ãµã€ãºãäžããªããã°ãªããŸããã§ããã
ãããLinodeäžã§ã³ã¹ãçã«é£ãããªãå§ããŸããã$144ã®ã€ã³ã¹ã¿ã³ã¹ã¯ãç§ãã¡ã®ãã¹ããŒã¯ãã¹ãã«åºã¥ããšã$20ã®OVHããŒãã«çžåœãã ãã¹ãã£ã³ã°ãããã€ããŒãåãæ¿ããŠãããã¡ããã¡ãã«åäžé害ç¹ãååšããããšã«ãªããŸãããŸããOVHã®ãããªãããã€ããŒã¯ãã¡ã³ããã³ã¹ãã©ãã«ã®è§£æ±ºã« LinodeãããæéããããåŸåããããŸãã
RiR :)
æåã®æ°å¹ŽéãFastCommentsã®PubSubããã³ã¡ãã£ã¢ãµãŒãã¹ã¯Javaã§æžãããŠããŸãããJavaã¯æå ¥ããåªåã«å¯ŸããŠæ¯èŒçé«ãããã©ãŒãã³ã¹ãçºæ®ããããã«éžã°ãã GCã調æŽãç¶ããG1GCãShenandoahãZ1ã詊ããŠããåŸããã¯ãJavaã¯äœ¿ããªãããšã«ããŸãããã¡ã¢ãªäœ¿çšã®ãªãŒããŒããããåçŽã«å€§ããããŠããããã® ãµãŒãã¹ã¯å®æåŸéåžžã«å®å®ãããããJavaã®å©ç¹ãèããŠããŸããŸããããŸãããããã®ãµãŒãã¹ã¯ããµã³ããªã³ã°ããŒããåé¡ã«å¯ŸåŠããå¿ èŠãããã JITããŸã åäœããŠããªããšãã«ããŒã¯ãã©ãã£ãã¯ãåŠçããããšããŠããŸããããããã®ãµãŒãã¹ã¯C++ãRustã«ç§»è¡ãã絶奜ã®åè£ã§ããã
Rustãéžã°ããçç±ã¯ãç§ãã¡ãC++ã®å°éå®¶ã§ã¯ãªãããããã³ãŒãã§ãã¹ããããš1人ã®é¡§å®¢ã®ããŒã¿ãå¥ã®é¡§å®¢ã«å ¬éãããå¯èœæ§ãããããã§ããRustã¯ãã®ãããªåé¡ãé²ãã®ã«åœ¹ç«ã¡ãŸãã
ãããã®ãµãŒãã¹ãçµ±åããããšãæãã§ããã®ã§ãå¥ã® GraalVMãªã©ã§æé©åããããšãã§ããŸããããRustã«ç§»è¡ããŠãã¹ãŠãçµããããããšã«ããŸããã
ç§»è¡ã¯åé¡ãªãã§ã¯ãããŸããã§ããããããã®ãµãŒãã¹ã¯SSLãçµç«¯ããHTTP 1.1ãHTTP/2ãªã©ããµããŒãããªããã°ãªããŸããã§ãããããŒã¿ã®å€ãã®ã¹ããªãŒã ãåæã«ç®¡çãããã ãšããžã®ãªã³ãã£ã¹ã¯Lruãã£ãã·ã¥ãS3ãããŒã¿ããŒã¹ããã¡ãã£ã¢ãèªã¿èŸŒãã ããã¡ãã·ã¥ã§éä¿¡ãããããå¿ èŠããããŸãããJavaãšã³ã·ã¹ãã ãVertxãNetty㯠ãããã®äœæ¥ã«éåžžã«é©ããŠããŸãããã©ã€ãã©ãªãšã³ã·ã¹ãã ãéçãŸã§æŒãäžããŠãããRustã©ã€ãã©ãªã«å€ãã®çµéšããªãã£ããããå€å°ã®ãã©ã€ã¢ã«ã¢ã³ããšã©ãŒããããŸããã ããã«ããããŠã³ã¿ã€ã ãçããç³ãèš³ãããŸããã
ç§ãã¡ã¯ãŸããç°ãªãã¡ã¢ãªç®¡çè ãå®éšããã«ã¹ã¿ã DNSãµãŒããŒã«ã¯mimallocãããã©ã³ã¹ããŒãå±€ã«ã¯libcã䜿çšããããšã«æ±ºããŸãããNginxãApache㯠䜿çšãããMaxmindããæ¯é±åæ§ç¯ãããã€ã³ã¡ã¢ãªã€ã³ããã¯ã¹ã«åºã¥ããŠã¯ã©ã€ã¢ã³ããã°ããŒãã«ã«ã«ãŒãã£ã³ã°ããã«ã¹ã¿ã DNSãµãŒããŒãšRustã§æ§ç¯ããããã©ã³ã¹ããŒãå±€ã®çµã¿åããã䜿çšããŠããŸãã ãã©ã³ã¹ããŒãã¯SSLãçµç«¯ããpubsubã®äœæ¥ãåŠçããCDNãšããŠæ©èœããŸããããã«ããããµãŒãã¹éã§ã®ç§»åãå°ãªããã€ã³ãã©ã¹ãã©ã¯ãã£ã®ãªãŒããŒããã/æœè±¡åãæžããŸãã ããããå¯èŠæ§ãäœããªããããè¯å¥œãªã¡ããªã¯ã¹ãéèŠã§ãã
ããã©ãŒãã³ã¹ã®çµæãRustãµãŒãã¹ã¯Javaã®ããã®çŽ10ã30%ã®ã¡ã¢ãªã䜿çšããŸãããéã³ãšããŠJava Concurrency in Practiceã®ãããªæ¬ãèªãã§ããã®ã§ã å°éå®¶ã§ã¯ãããŸããããéãJVMãµãŒãã¹ãæžãæ¹æ³ã«ã€ããŠããã€ãã®ç¥èããããŸãããRustã䜿çšããŠãããéæããã®ã¯é¥ãã«ç°¡åã§ãããããã«ã倧éã® ãµãã¹ã¯ã©ã€ããŒãžã®ã¡ãã»ãŒãžã®ã¹ãã€ã¯ã¯ãJVMãµãŒãã¹ã40%ã®æéãGCã«è²»ãããŠããã®ã«å¯ŸããCPU䜿çšçã«ã»ãšãã©åœ±é¿ãäžããŸããã§ãããç§ã¯Rustã®å€§ãã¡ã³ãšã¯èšããŸãããã å€ãã®äœæ¥ãè¡ããåæéçºåŸã¯ãã»ã©å€ãããªããµãŒãã¹ã«ã¯å®ç§ã§ããç§ãã¡ã®äž»èŠãªããžãã¹ããžãã¯ã¯TypeScriptã«æ®ã£ãŠããŸãã
æ°ããã¢ãŒããã¯ãã£
æ°ããã¢ãŒããã¯ãã£ã«ã¯ãããããããŒãããªããªããŸããã代ããã«ãåãµãŒããŒã¯åããµãŒãã¹ãšã»ãŒåäžã®æ§æãæã€å®å šãªã¯ããŒã³ã§ããããããã ãã©ã³ã¹ããŒããDNSãã¢ããªã±ãŒã·ã§ã³ãµãŒããŒãããŒã¿ããŒã¹ã®ã³ããŒãå®è¡ããŸãããã¹ãŠã®ããŒãã¯èªåçã«Dropbearã§è§£é€ããããã«ãã£ã¹ã¯æå·åãç¶æããŸãã
åãµãŒããŒã¯ããªã¯ãšã¹ããçµç«¯ãããŠã§ããœã±ãããhttpã¹ããªãŒã ããŸãã¯cdnãªã¯ãšã¹ããšããŠåŠçããã«ãŒãã£ã³ã°ãã©ã³ã¹ããŒããå®è¡ããŸãããããã®ãµãŒããŒã¯ äºãã«æ¥ç¶ããäžãããã1ã€ãã°ããŒãã«ãããã¯ãŒã¯ããã®ããŒã«ã«DNSãµãŒããŒã«ãããã³ã°ãããªã¢ã«ã¿ã€ã ã§åã©ã€ãããŒããã°ããŒãã«ã«ã©ãã«ããããDNSã«äŒããŸãã
æ°ããã¢ãŒããã¯ãã£ã®1ã€ã®å©ç¹ã¯åé·æ§ã§ãããããªãŒãžã§ã³ã®é¡§å®¢ãç§ãã¡ã«éåžžã«å³ãããªã¯ãšã¹ããããå Žåãä»ã®ãªãŒãžã§ã³ã¯ãªã³ã©ã€ã³ã®ãŸãŸã§ãã
ã¢ããªã±ãŒã·ã§ã³ã³ãŒãã¯ãã©ã®ã¯ãšãªãæå¯ãã®ããŒãã«ãããã§ãããããŸãã¯ã©ã®ã¯ãšãªãé ãé¢ããããŒã¿ããŒã¹ã®ãã©ã€ããªã«è¡ãå¿ èŠãããããéåžžã«æèããå¿ èŠããããŸãããã¹ããããšããã©ãŒãã³ã¹ã åçã«äœäžããŸããããã«ãããäžéšã®ãªãŒãžã§ã³ããã®æžã蟌ã¿ãé ããªãå¯èœæ§ããããããã«ã¯æ éãªèª¿æŽãšæé©åãå¿ èŠã§ããç§ãã¡ã¯ä»ããããŒã¿ããŒã¹ã«ã¢ã¯ã»ã¹ãããã¹ãŠã®ã¡ãœããã readPreferenceåŒæ°ãåããšãããã¿ãŒã³ãå éšã§åŸã£ãŠããŸããããã«ãããåŒã³åºãåŽã¯æäžå±€ãŸã§ãéããŠãã©ã®ããã«ã¯ãšãªãè¡ãããæç€ºçã«æ±ºå®ããå¿ èŠããããŸãã
ãã®å©ç¹ã¯ããªãŒãã«å¯Ÿããéåžžã«è¯ãæ°Žå¹³ã¹ã±ãŒãªã³ã°ã§ããFastCommentsã¯éåžžã«èªã¿èŸŒã¿ãéèŠãããŠããŸãããç§ãã¡ã¯ã¢ãã¬ãŒã¿ãŒãå¿ããŠã¯ãããŸããïŒã¢ãã¬ãŒã¿ãŒã¯ äžçäžã§åããŠããã圌ãã®äœéšãè¯å¥œã«ä¿ã¡ãããšèããŠããŸãããã®ããŒã«ã¢ãŠãã®äžç°ãšããŠã圌ãã®ã¢ãã¬ãŒã·ã§ã³ããŒã«ãè¿ éã§ããããšã確èªããããã«ãæ°äººã®ã¢ãã¬ãŒã¿ãŒãšååããŠããŸãã
ç§ãã¡ã¯ãŸããããŒããŠã§ã¢ãæåã§éžæããããšãã§ããããã¯æ¥œããããããããããŸããæ°ãããµãŒããŒã¯i5-13500ãšRyzen 5 5600Xã®ããã¯ã¹ãæ··åãããã®ã§ãEUã«ã¯å€ãXeonsããããŸãã ç§ãã¡ã®ãã³ãããŒã¯ã§ã¯ãããããã¹ãŠãä»ã®ãããã€ããŒã§æ¢ããŠãããããé«äŸ¡ãªãµãŒããŒãããã¯ããã«éãããšãããããŸãããæ¬ ç¹ã¯ããå€ãã®ã»ããã¢ããäœæ¥ãå¿ èŠãªããšã§ãããç§ãã¡ã¯ ãããèªååããæ éã«å¯ŸããSMARTãã£ã¹ã¯ç£èŠãªã©ãè¡ã£ãŠããŸãã
ãã®ãããªããšãè¡ãããšã§ãç«¶äºåã®ããäŸ¡æ ŒãåŒãç¶ãæäŸã§ããŸãã
ããŒã«ã¢ãŠã
ãµãŒãã¹ãåæ§ç¯ããæ°ãããã¹ãã£ã³ã°ãããã€ããŒã«ç§»è¡ããéçšã§ãé廿°ã¶æã®ããŒã«ã¢ãŠãã¯ã¹ã ãŒãºã§ã¯ãããŸããã§ããããçæ§ã®ãçè§£ã«æè¬ããŸãã
åæã®ããŒã«ã¢ãŠãã§ã¯ã100msãè¶ ãããªã¯ãšã¹ããå¢å ããŠããããšã瀺ãã¡ããªã¯ã¹ã衚瀺ãããŸãããç§ãã¡ã¯ãããŸãå€ãã®ãªã¯ãšã¹ãããã®ãããªé·ãæéãèŠããããšããªãããã«åªããŠããŸãã
ç¹å®ã®ãªãŒãžã§ã³ã®ããã©ãŒãã³ã¹ãæ¹åãããããåŒãç¶ãåŸã ã«é²å±ããŠããŸãããããŸã§ãã£ãŒãããã¯ãæäŸããŠãã ãã£ãçæ§ã«æè¬ããŸãã
APIäœ¿çšæã®èæ ®äºé
APIã¯åŒ·ãäžè²«æ§ããããèªåã®æžã蟌ã¿ãèªãããšãã§ããåŸæ¹äºææ§ãç¶æããéçºè ã«ã·ã³ãã«ããä¿æããŸããéçºè ãäžè²«æ§ãããããã©ãŒãã³ã¹ãéžæã§ããããã«ã readPreferenceãã©ã¡ãŒã¿ãå ¬éããäºå®ã§ãããã®å©ç¹ã¯ããããã®APIåŒã³åºãã«å¯ŸããŠã¯ã¬ãžããå²åŒãæäŸã§ãããããããªããšããããšã§ãã
ãããªãã¯ãšã³ããã€ã³ããäŸãã°ãããªãã¯ã³ã¡ã³ããŠã£ãžã§ãããæäŸããããã®ãã®ã¯ãåžžã«ãã®ããŒãã®æå¯ãã®ïŒããŒã«ã«ïŒããŒã¿ããŒã¹ããèªã¿åããŸãã
ãªãéåžžã®CDNã䜿çšããªãã®ã
ã³ã¡ã³ãã¹ã¬ããã¯éçã§ã¯ãªããã©ã€ãã§ãããå€ãéçããŒã¿ã«ã©ã€ãã¹ããªãŒã ãé©çšããããšãã§ããŸããããŸããå¿åãŠãŒã¶ãŒãšããŠã¹ã¬ããã衚瀺ãããšãå¿åã»ãã·ã§ã³ããçºçããŸãã ãã®å¿åã»ãã·ã§ã³å ã§ã¯ãä»ã®ãŠãŒã¶ãŒããããã¯ãŸãã¯ãã©ã°ä»ãããããšãã§ããå¿åãŠãŒã¶ãŒãç¹å®ã®ã³ã¡ã³ããæ°ã«å ¥ã£ããã©ããã衚瀺ããå¿ èŠããããŸããã³ã¡ã³ãã¹ã¬ããã¯SSOãèªèšŒã ãŸãã¯ãŠãŒã¶ãŒã°ã«ãŒãã®èåŸã§ããã¯ãããããšããããŸãã
æåŸã«ãåçããŒã¿ãCDNããã®éçããŒã¿ã«ãããã³ã°ããããããã°ã¬ãã·ããšã³ãã³ã¹ã¡ã³ããã§ã¯ãã³ã³ãã³ãããžã£ã³ããããæ°ç§åŸã«å€ãã£ããããæªãäœéšãæäŸããŸãã ç§ãã¡ã¯ãããé¿ããããšèããŠããŸãã
誰ãç§ã®ããŒã¿ãæã£ãŠããã®ã
ããªãã®ããŒã¿ã¯ãã¯ãLinodeã«ä¿åãããŠããŸãããHetznerãšOVHã®éã§ã©ã€ãã«è€è£œãããŠãããå®å šãªãã£ã¹ã¯æå·åãæœãããŠãããããã¯ãšã³ããµãŒããŒéã®éä¿¡ã¯ãã¹ãŠTLSã§è¡ãããŸãã ç§ãã¡ã¯ã¢ãŠãããŠã³ãWebhookãããã·ã®ããã«æ°åã®ã¬ã¬ã·ãŒLinodeã€ã³ã¹ã¿ã³ã¹ãç¶æããŠããŸãããLinodeã«ã¯ããŒã¿ãã¡ãã£ã¢ã¯ä¿åãããŠããŸããã
çµè«
ãã¹ãŠã®äž»èŠãªãªãªãŒã¹ãšåæ§ã«ãç§ãã¡ã¯ãã®å€æŽãæé©åããã¹ãããé©åã«ãªãªãŒã¹ããããã«æéãåããããšãå¬ããæããŸããFastCommentsã¯ãã®äœæ¥ã«ãã£ãŠããããã¹ã±ãŒã«ãã é·æçã«ããè¯ã皌åæéãæã€ã¯ãã§ããåé¡ãçºèŠããå Žåã¯ãäžã«æããŠãã ããã
