ããã«ã¡ã¯ãã¬ã·ãäºæ¥é¨ã®æ°äºï¼@SpicyCoffeeï¼ã§ãã
ã¯ãã¯ãããã§ã¯ããã¾ã§ãã¬ã·ããæç¨¿ãã¦ããæ¤ç´¢çµæã«åæ ãããã¾ã§æé·ã§ 24 æéç¨åº¦ã®æéãããã£ã¦ãã¾ãããä»åããã®æéã 5 åç¨åº¦ãæé·ã§ã 10 åç¨åº¦ã«ç縮ãããã¨ã«æåãã¾ãããæ¬è¨äºã§ã¯ãããã¸ã§ã¯ããªã¼ãã¼ã®ç«å ´ã§é¢ãã£ãç§ã代表ãã¦ãã®éçºã«ã¤ãã¦ç´¹ä»ãã¾ãã
ããã¸ã§ã¯ãã®ç®çã¨æ°å¤ç®æ¨
æ¬ããã¸ã§ã¯ãã§ã¯ä¸è¨ã®ãã¬ã·ããæç¨¿ãã¦ããæ¤ç´¢çµæã«åæ ãããã¾ã§ã®æéç縮ããç®çã¨ããã¾ãããããããæéç縮ã¨ãã£ã¦ãç¾ç¶ 24 æéã§ãããã®ã "1 æé" ã«ããã®ãã"1 å" ã«ããã®ãã"1 ç§" ã«ããã®ãã§ã¯è©±ãå ¨ç¶éãã¾ãããã®æ°å¤ç®æ¨ã¯è¨è¨ãå§ãã¨ããå¾ã®æææ±ºå®ã«å¤§ããå½±é¿ãä¸ããããããã£ããã¨ããæå³ãæã£ãç¶æ ã§æç¢ºã«å®ãã¦ããå¿ è¦ãããã¾ããã
ããã§ãç§ã¨ãããã¯ããªã¼ãã¼*1ãè°è«ãéããã¾ã㯠âä»åã®ããã¸ã§ã¯ãã§å®ç¾ãããã¦ã¼ã¶ã¼ä½é¨" ãå®ãã¾ããããã®ä½é¨ããå¿ è¦ã¨ãªãæ¤ç´¢çµæã®åæ é »åº¦ãéç®ããæçµçãªæ°å¤ç®æ¨ããä¸å¤®å¤ 5 åç¨åº¦ãæå¤§ã§ã 10 å以å ã®æ¤ç´¢çµæã¸ã®åæ ãã§ããã¨å®ãããã¨ã¨ãªãã¾ãããåæã«å®ããããã¸ã§ã¯ãã®ã¹ã±ã¸ã¥ã¼ã«ã¯ 6 é±éã§ãããè¦ç©ããã®ç¬¬ä¸å°è±¡ã¨ãã¦ã¯ããªãã®ãªã®ãªã®è¨å®ã§ããã
ãã®è¨äºã§ã¯ãä»å¾æ¬ããã¸ã§ã¯ãã§å®ç¾ããããæ¤ç´¢çµæãåæ ãããã¾ã§ã®æéã®ç縮ãã âshort-period indexingâ ã¨å¼ç§°ãããã¨ã«ãã¾ãã
æ§ã·ã¹ãã ã®æ¦è¦
ããã¸ã§ã¯ãçºè¶³æç¹ã§ã®æ¤ç´¢å¨ãã®ã·ã¹ãã (以䏿§ã·ã¹ãã )ã以ä¸ã«ç¤ºãã¾ãã

æ§ã·ã¹ãã ã®èã¯ä»¥ä¸ã®ï¼ç¹ã§ãã
æ¤ç´¢ã¤ã³ããã¯ã¹ãçæããæ¥æ¬¡ããã
æ§ã·ã¹ãã ã§ã¯ãæ¤ç´¢çµæã®æ´æ°ã 24 æéã«ä¸åº¦ã§ããã¨å²ãåããæ¥æ¬¡ãããã§ã¤ã³ããã¯ã¹ã®æ´æ°ãè¡ã£ã¦ãã¾ãããã¬ã·ãã«é¢ããå種ã¡ã¿ãã¼ã¿ãéããå¿ è¦ã«å¿ãã¦å å·¥ãããã¨ã§ããã¥ã¡ã³ããçæãããã®ããã¥ã¡ã³ãã Solr ã«éä¿¡ãããã¨ã§ã¤ã³ããã¯ã¹ãçæãã¾ããçæãããã¤ã³ããã¯ã¹ã¯å¾ã»ã©èª¬æãã ECS ãå©ç¨ãããããã¤ã¡ã³ãã®ããã« S3 ã«é ç½®ããã¾ãã
æ¥æ¬¡æ´æ°ã§ããã¨ããå²ãåãã®å ã«ãããã 100 ãè¶ ãã field ã®æ å ±ãæ°ç¾ä¸ã¬ã·ãã«ã¤ãã¦æ¯æ¥çæãã¦ãããä¸ã«ã¯æ©æ¢°å¦ç¿ãç¨ãã¦ã¬ã·ãã«ã¹ã³ã¢ãä»ä¸ãããããªå¦çãå«ã¾ãã¦ããããããã®å®è¡æé㯠90 åç¨åº¦ã«ãªã£ã¦ãã¾ããã
ã¡ãªã¿ã«ããã®ãããèªä½ã 5 å¹´ã»ã©åã«æ§ã·ã¹ãã ããåé¢ã»ãªãã¬ã¤ã¹ããããã®ã«ãªãã¾ããå½æã®æ§åã¯ä»¥ä¸ã®è¨äºã«è¨è¼ãã¦ããããããããããã°ãããã¦ã覧ãã ããã
ECS ãå©ç¨ãããããã¤ã¡ã³ã
æ§ã·ã¹ãã ã§ã¯ãECS ã®ã¿ã¹ã¯ã¨ã㦠Solr ãèµ·åãã¦ãã¾ãããä¸è¬ã«ãæ¤ç´¢ã¨ã³ã¸ã³ã®ãããªã¹ãã¼ããã«ãªããã«ã¦ã§ã¢ã¨ ECS ã¯ç¸æ§ããããªãã¨ããã¦ãã¾ããããããæ§ã·ã¹ãã ã§ã¯ S3 ã«ã¤ã³ããã¯ã¹ãé ç½®ãã¦ã¿ã¹ã¯ã®èµ·åæã«ããããã¦ã³ãã¼ããã¦ãããã¨ã§ã¹ãã¼ããã³ã³ããã®å¤ã«åºãããã®ç¸æ§ã®æªããè§£æ¶ãã¦ãã¾ãã
ãã®è¨è¨ã¯ãã¹ãã¼ã(= ã¤ã³ããã¯ã¹)ã®æ´æ°é »åº¦ãååã«ä½ããã¨ããåæã«åºã¥ãã¦ãããã®ã§ãããæ¬ããã¸ã§ã¯ãã®ç®çãéæããããã«ã¯ãªãã¬ã¤ã¹ããå¿ è¦æ§ãåºã¦ããå¯è½æ§ãããç®æã§ããã
ãã®éçºã«ã¤ãã¦ã®è©³ç´°ã¯ä»¥ä¸ã®è¨äºã§è§£èª¬ããã¦ãã¾ãã®ã§ããããããã°ãã¡ããã覧ãã ããã
ç®æ¨éæã®ããã®èª²é¡
æ§ã·ã¹ãã ãèå¯ãããã¨ã§ãç®æ¨ãéæããããã«ã¯ä»¥ä¸ã®ãããªèª²é¡ããããã¨ãããã£ã¦ãã¾ããã
short-period indexing ã«é©ãã Solr ã®ä½¿ãæ¹ãåèãã
æ§ã·ã¹ãã ã§ã¯ã常å¨çã«èµ·åãã¦ãã Solr 㯠"åç §ç³»" ã®ã¿ã§ãããindex ã®æ´æ°æã«ã¯ spot instance ã¨ã㦠"æ´æ°ç³»" ã® Solr ãç«ã¡ä¸ã㦠index ãçæãã¦ãã¾ãããindex ã®æ´æ°ãæ¥æ¬¡ã§ããã°ãã®æ¹æ³ã§ãåé¡ããã¾ãããããããæ°å以ä¸ã®ãªã¼ãã¼ã«ãªããªã "æ´æ°ç³»" ã® Solr ã常ã«ç¨¼åãããã¤è¤æ°ã® "åç §ç³»" Solr ã«æ´æ°ãåæããå¿ è¦ãããããã§ãã
æ´æ°ã®åææ¹æ³ã«ã¤ãã¦ã¯ããã¨ãã°ãSolr ã«ã¯ã¯ã©ã¹ã¿ãçµãã§ replication ãå®è¡ããããã®æ©è½ãããã¾ãããããããã®æ©è½ã ECS ã« Solr ãä¹ãã¦ããç¶æ ã§ãåé¡ãªãåä½ãããã¯èªæã§ã¯ããã¾ãããECS ãæ´»ç¨ãããã¨ã«ãããããã¤ãã¹ã±ã¼ãªã³ã°ã®å®¹ææ§ã¨ãã£ãã¡ãªããã¯å¯è½ãªéãæ®ããã*2ãã®ã®ããã®ããã«ã¯æ°ããè¦ä»¶ã«åããã調æ»ã工夫ãå¿ è¦ã«ãªãããã§ãã
ãããã S3 ãä»ãã¦ã¤ã³ããã¯ã¹ãé å¸ããããæ¹ãé©ãã¦ããããå«ã Solr å¨ãã®æ§æã»è¨è¨ã¯å¤§å¹ ã«èãç´ãå¿ è¦ãããããã§ããã
ã¤ã³ããã¯ã¹ããæ å ±ãé¸å¥ãã
åè¿°ããããã«ãã¬ã·ãã®ããã¥ã¡ã³ã㯠100 åå¾ã® field ãæã£ã¦ãããä¸ã«ã¯æ©æ¢°å¦ç¿ãç¨ãã¦ä»ä¸ãããã¹ã³ã¢ã®ãããªãã®ãå«ã¾ãã¾ãããããå ¨ã¦ã®æ å ±ãã¤ã³ããã¯ã¹ãããã¨ããã¨ããããããã®å¦çã«æéããããå¯è½æ§ãé«ããshort-period indexing ã®ã¿ã¤ã ã¹ãã³ã§ãããå®è¡ãããã¨ã¯å°é£ã ã¨èãããã¾ãããããã£ã¦ãã¦ã¼ã¶ã¼ä½é¨ã«ç«ã¡è¿ã£ã¦ short-period indexing ã®ã¹ã³ã¼ãã«å«ãã field ãå®ç¾©ããå¿ è¦ãããã¾ããã
ã¾ããã¯ãã¯ãããã®ã¬ã·ãã¯ã¦ã¼ã¶ã¼æç¨¿ç©ã§ãããããã£ã¦ãä½ã®ãã§ãã¯ãããã«ã¬ã·ããã¤ã³ããã¯ã¹ãã¦ãã¾ãã¨ãæããã«æçã§ã¯ãªãåçãç¨ããã¬ã·ããªã©ã®ãä¸é©åãªæç¨¿ã®é²åºãå¢ãã¦ãã¾ãå¯è½æ§ãããã¾ãããã®ãã¨ãèããã¨ãã¤ã³ããã¯ã¹ããæ å ±ã«å ãã¦ãã©ã®ã¬ã·ããã¤ã³ããã¯ã¹ããããã¨ããå¤å®ãå¿ è¦ã«ãªãã¨äºæ³ããã¾ãã*3ã
æ¥æ¬¡ãããã«ããæ´æ°ã¨ short-period indexing ã«ããæ´æ°ãåå± ããã
æ¥æ¬¡ãããã«ããã¤ã³ããã¯ã¹æ´æ°ã¯ãæ´æ°é »åº¦ã¨å¼ãæãã§ã¯ããã¾ããããç·æ¥æã«ãã¼ã«ããã¯ã容æã«ãªãã¨ãã£ãã¡ãªãããããã¾ãããæ¤ç´¢çµæã«ä¸å ·åãçããéãã¤ã³ããã¯ã¹ã®ãã¼ã¸ã§ã³ãå·»ãæ»ããã¨ã§åæ¥æç¹ã®ã¤ã³ããã¯ã¹ãç¨ãã¦æ¤ç´¢æ©è½ãæä¾ãããã¨ã容æã§ãããã¯æ¤ç´¢ã·ã¹ãã ãã®ãã®ã®é 奿§ãæ¯ããä¸ã¤ã®è¦ç´ ã«ãªã£ã¦ãã¾ãã
ãã®ãã»ã¼ããã¤ã³ããã¤ãããæ©è½ã¯æç¨ãªããå¯è½ã§ããã°æ®ãããããããªãã¨æ¥æ¬¡ãããã«ããæ´æ°ã¨ short-period indexing ã«ããæ´æ°ã並åãããã¨ã«ãªãã¾ãããããªãã¨ã¤ã³ããã¯ã¹ã®æ´æ°çµè·¯ãè¤æ°ã«ãªãããããã®éã«ã³ã³ããªã¯ããèµ·ãããªãããã«ã·ã¹ãã ãè¨è¨ããå¿ è¦ãããããã§ããã
ãã£ãã·ã¥ãæ¤ç´¢çµæã®æ´æ°ãé»å®³ããªãããã«ãã
åè¿°ããæ§æå³ã§ã¯è¡¨ç¾ããã¦ãã¾ããã§ããããæ¤ç´¢ã·ã¹ãã ã®å¨è¾ºã«ã¯å¤ç¨®å¤æ§ã®ãã£ãã·ã¥ãåå¨ãã¦ãã¾ããã¯ã©ã¤ã¢ã³ãã¢ããªããã®ãªã¯ã¨ã¹ããåãä»ãã API ããæ¤ç´¢ãµã¼ãã¼ããã®ãªã¯ã¨ã¹ããåãä»ãã Solr ã¨ãè¤æ°ç®æã«ãã£ãã·ã¥ãåå¨ãã¦ãããæ¤ç´¢ã¤ã³ããã¯ã¹ã®æ´æ°æã«ã¯ããããç ´æ£ããªããã°æ¤ç´¢çµæãå¤åãã¾ããã
åç´ã«ãã£ãã·ã¥ãå¥ããã°åãµã¼ãã¹ã¸ã®è² è·å¢å¤§ã¯é¿ãããããã¾ãã¯ç¾ç¶ã®ãããççã調æ»ãã¦å¥ããããªãå°ããã¤å¥ãããé£ããããªããµã¼ãã¼ãå¢ãããªã©ã®å¯¾å¿ãå¿ è¦ã«ãªãããã§ããã
æ°ã·ã¹ãã ã®æ¦è¦
以ä¸ã«æãã課é¡ã解決ããããã«ã以ä¸ã®å³ã«ç¤ºããããªå ¨ä½åã®ã·ã¹ãã ãè¨è¨ã»éçºãã¾ããã
éçºã®æµãã¨ãã¦ã¯ãå ¨ä½è¨è¨ã«ã¤ãã¦ã¯ããã¸ã§ã¯ãã¡ã³ãã¼ã® 4 åå ¨å¡ã§è°è«ããªããåºããå¿ è¦ãªéçºãããç¨åº¦ç¹å®ãããå¾ã«ãåä½ã®å°éé åã«åããã¦èª¿æ»ãå®è£ ãå²ãæ¯ãå½¢ã«ãã¾ããã

æ°ã·ã¹ãã ã®ç¹å¾´ã以ä¸ã«ç¤ºãã¾ãã
1. User-Managed Index Replication ãå©ç¨ãã Solr cluster ã®æ§ç¯
æ°ã·ã¹ãã ã§ã¯ Solr ãæä¾ãã User-Managed Index Replication ã®ä»çµã¿ãå©ç¨ã㦠"æ´æ°ç³»" 㨠"åç §ç³»" ãçµã¿åããã Solr cluster ãæ§ç¯ãã¾ããã
ãã®ã¢ã¼ãã§ã¯ Solr ã¤ã³ã¹ã¿ã³ã¹ã¯ update ãªã¯ã¨ã¹ããåãä»ãã 1 å°ã® leader ã¨ãæ¤ç´¢ãªã¯ã¨ã¹ããåãä»ããè¤æ°å°ã® follower ã«åããã¾ããfollower ã¯è¨å®ããæéãã¨ã« leader ã«å¯¾ãã¦ãã¼ãªã³ã°ãè¡ããå·®åããã¦ã³ãã¼ããã¾ã*4ãããããã® Solr ã¯æ§ã·ã¹ãã ã¨å¤ããã Hako ãç¨ã㦠ECS Task ã¨ãã¦èµ·åãã¦ãã¾ãã
ç´°ããªè¦ä»¶ã¨ãã¦ã¯ãæ´æ°ãã³ã³ããªã¯ãããªãããã«åæã«èµ·åãã¦ãã leader ã¯æå¤§ 1 task ã«æããå¿
è¦ãããããã㯠ECS ã® minimumHealthyPercent ã maximumPercent ãè¨å®ãããã¨ã§ä¿è¨¼ãã¦ãã¾ãã
ã¾ããfollower ã¯èµ·åæã«æ¥æ¬¡ãããã§çæããã index ã S3 ãããã¦ã³ãã¼ããããã®å¾ leader ãä¿æãã¦ããæ´æ°åã replicate ãçµãã£ãã¿ã¤ãã³ã°ã§èªèº«ã® status ã healthy ã¨ãã¦ãµã¼ãã¹ã¤ã³ãã¾ãããããããã¨ã§ããã«ã¹ãã§ãã¯ãæåãããã¿ã¤ãã³ã°ãã³ã³ããã¼ã«ããèµ·åå¾ replication éä¸ã® follower ã«ã¢ã¯ã»ã¹ãéä¸ããã¨ãã¢ã¯ã»ã¹æ¯ã«æ¤ç´¢çµæãå¤ãã£ã¦ãã¾ãã¨ãã£ãåé¡ãé²ãã§ãã¾ãã
2. EFS ãå©ç¨ãã index ã®æ°¸ç¶å
æ°ã·ã¹ãã ã«ããã¦ã¯ãleader Solr ãåèµ·åã deploy ãããå ´åã«ããã¦ã index ã®ç¶æ ãä¿ã¡ãupdate 㨠replication ãæ£ããåä½ããç¶æ ãä¿è¨¼ããå¿ è¦ãããã¾ãã
ãããå®ç¾ããããã«ãAWS ã®ãããã¯ã¼ã¯ã¹ãã¬ã¼ã¸ãµã¼ãã¹ã§ãã EFS ãå©ç¨ã§ãã¾ããEFS ã ECS ã«ã¢ã¿ãããããã¨ã§ãæ°¸ç¶çãªã¹ãã¬ã¼ã¸ããã¦ã³ããããã¨ãã§ãã¾ããããããEFS ã¯ãããã¯ã¼ã¯è¶ãã«ã¢ã¯ã»ã¹ããã¹ãã¬ã¼ã¸ã§ãããããã¬ã¤ãã³ã·çã®æ§è½ã¯ ECS ã®ã¨ãã§ã¡ã©ã«ã¹ãã¬ã¼ã¸ã«å¯¾ãã¦å°ãå£ããã®ã¨ãªã£ã¦ãã¾ãã¾ãã
ããã§ãupdate ãªã¯ã¨ã¹ããåãä»ã㦠index ãæ°¸ç¶åããå¿ è¦ã®ãã leader ã®ã¹ãã¬ã¼ã¸ã«ã¯ EFS ã使ããã¦ã¼ã¶ã¼ããã®æ¤ç´¢ãªã¯ã¨ã¹ããåãä»ãã¦ç´ æ©ãå¿çããå¿ è¦ããã follower ã®ã¹ãã¬ã¼ã¸ã«ã¯ tmpfs ãå©ç¨ãããã¨ã¨ãã¦ãã¾ãã
ã¾ããæ°ã·ã¹ãã ã«ããã¦ããæ§ã·ã¹ãã ã¨åæ§ã«æ¥æ¬¡ã§è¨ç®ã»ä»ä¸ããã field ã¯åå¨ãããããæ¥æ¬¡ãããã§çæããã index ã§ EFS ã®ä¸èº«ãå·®ãæ¿ããå¦çãå®è¡ããã¦ãã¾ãã
ãã®ã¨ããindex ã®å·®ãæ¿ãã leader/follower ã®åèµ·åé åºã«ãã£ã¦ã¯ replication ã®æ´åæ§ãåããªããªãæ§ã ãªåé¡ãçºçãããã¨ãããã£ããããä¾åé¢ä¿ãä¸å¯§ã«æ´çãã¦åå¦çã®å®è¡é åºãå¶å¾¡ãã¦ãã¾ã*5ã
3. index update batch ã®å®æå®è¡
index ã®æ´æ°ã¯ 5 åãã¨ã«å®æå®è¡ãããããã§å®ç¾ãã¦ãã¾ãããã®å®æå®è¡ãã¨ã«ãç´è¿ 1 æéã§æ´æ°ããã£ãã¬ã·ãã®æ å ±ããåå¾ãããã®æ å ±ãå ã«å¿ è¦ãªå¦çãæ½ãã¦ããã¥ã¡ã³ããçæããleader ã« update ã®ãªã¯ã¨ã¹ããæããã¨ããæµãã§ãã

ãã®ã¨ãããã®ã¬ã·ããä¸é©åãªæç¨¿ã§ãã確çã¯ã©ã®ãããããã ML ã«ãã£ã¦å¤å®ãã API ã¸ã®ãªã¯ã¨ã¹ããæããã¨ã§ãä¸é©åæç¨¿ã®é²åºãå¢ãããã¨ãé²ãã§ãã¾ã*6ã
宿å®è¡ãããã«ããã®ã§ã¯ãªããã¬ã·ãã®æç¨¿ã»æ´æ°ã«ããã¯ããã¦ã¤ãã³ããçºè¡ã»ãã¥ã¼ã¤ã³ã°ãã¦é½åº¦å¦çããæ¹éãèãã¾ãããã
- ã¤ãã³ãã®çºè¡æ°ãå¤ããªãæ¢åã®ç¤¾å åºç¤ãå©ç¨ãããã¨ãã§ãããã©ãããæããã§ãªãã£ã
- ãªãã©ã¤å¦çã®å®è£ ãè¤éã«ãªã
- ããã¾ã§ã®ãªã¢ã«ã¿ã¤ã æ§ãæ±ãããã¦ããªã
ãã¨ããæ¡ç¨ãè¦éã£ã¦ãã¾ãã
æ¬çªç°å¢ã¸ã®å±é
ããã¸ã§ã¯ãã®å®éã«ã¯ãã·ã¹ãã ã®æ§ç¯ã¨ã¯å¥ã«å±éã«åããåç¨®ä½æ¥ãå¿ è¦ã§ããä»å㯠SRE ã®ã¡ã³ãã¼ã®ååã«ãã£ã¦ã以ä¸ã«æãããããªä½æ¥ãäºåã«ãã£ããã¢ããã»é²è¡ãã¦ããããã¨ãã§ããé常ã«ã¹ã ã¼ãºã«å±éãçµãããã¨ãã§ãã¾ããã
ãã£ãã·ã¥ã®æ´ç
ã·ã¹ãã ãæ§ç¯ãã¦ããæ¢åã®ãã£ãã·ã¥æ§æã¯æ¥æ¬¡ã§ã®æ¤ç´¢çµææ´æ°ãåæã¨ãã¦ãããããTTL ãæ°æéåä½ã®ãã®ã«ãªã£ã¦ãã¾ããããã®ã¾ã¾ã§ã¯ããã£ãã·ã¥ã®æ´æ°ééãæ¤ç´¢çµæã®æ´æ°ééãããé·ããªã£ã¦ãã¾ãã¾ãã
æ¤ç´¢çµæã®æ´æ°é »åº¦ã«åããã¦ãã£ãã·ã¥ã® TTL ãç縮ãããã§ããã調æ»ãä¸ååã®ã¾ã¾é²ããã¨ãã£ãã·ã¥ã®è£å´ã«ãããµã¼ãã¹ã¸ã®è² è·ãå¢å¤§ããé害ãå¼ãèµ·ããã¦ãã¾ãå¯è½æ§ãããã¾ãã
ããã§ã¾ãã¯ãã£ãã·ã¥ã®è¨å®å¤æ´ãä¸ãã¦ããå½±é¿ã観測ã§ããããã«ãPrometheus + prometheus_exporter gem ãç¨ãããã£ãã·ã¥ã®ãããçãªã©ãè¨æ¸¬ããããã«ãã¾ãã*7ãæ¬¡ã«ãããã®å¤åãåãµã¼ãã¹ã®è² è·ã確èªããªãããã£ãã·ã¥ã® TTL ãå¾ã ã«çããã夿´ãè¡ããæçµçã«ããµã¼ãã¹é害ãèµ·ãããã¨ãªã TTL ã 5 åã«ã¾ã§ç縮ã§ãã¾ããã
è² è·è©¦é¨ã¨æ®µéãã¼ã«ã¢ã¦ã
æ¤ç´¢æ©è½ã®å¤æ´ã¯ã¯ãã¯ãããã®ã»ã¼å ¨ã¦ã¼ã¶ã¼ã«å½±é¿ãä¸ããå¤§è¦æ¨¡ãªãã®ã«ãªãã¾ããæ¬çªå±éåã®è² è·è©¦é¨ã¯ãå±éå¾ã®é害çºççãæãããã¨ãã§ããã®ã¯ãã¡ãããéçºè ãå®å¿ãã¦å±éãè¡ããããã«ãªãã¾ãã
ã¾ããå±éèªä½ãä¸åº¦ã«è¡ãã®ã§ã¯ãªããå¾ã ã«ã¦ã¼ã¶ã¼ãªã¯ã¨ã¹ããæµããããªæ®µéãã¼ã«ã¢ã¦ãã®æé ãè¸ããã¨ã§ãå¤§è¦æ¨¡é害ã®çºççãæãããã¨ãã§ãã¾ãã
ä»åã¯ä»¥ä¸ã®æé ã§è² è·è©¦é¨ã¨æ®µéãã¼ã«ã¢ã¦ããè¡ãã¾ããã
- æ¬çªã® Solr ã«å±ãã¦ãããªã¯ã¨ã¹ãããã©ã¼ãªã³ã°ããæ° Solr cluster ã§ããªã¯ã¨ã¹ããåé¡ãªãæãããã確èªãã(è² è·è©¦é¨)

è² è·è©¦é¨ã®æ¦è¦ - å®éã«ä¸é¨ã®ã¬ã¹ãã³ã¹ãæ°ã·ã¹ãã ããã®ãã®ã«å·®ãæ¿ããå¾ã
ã«ãã®å²åã大ãããã¦ããï¼æ®µéãã¼ã«ã¢ã¦ãï¼

段éãã¼ã«ã¢ã¦ãã®æ¦è¦ - å ¨ã¦ã®ã¬ã¹ãã³ã¹ãæ°ã·ã¹ãã ããã®ãã®ã«ãªã£ãå¾ãshort-period indexing ãæå¹ã«ãã
ãã®ãã¡ã1 ã®è² è·è©¦é¨ã¯ Envoy ã®RequestMirrorPolicyãã 2 ã®æ®µéãã¼ã«ã¢ã¦ã㯠Envoy ã®WeightedClusterã使ã£ã¦å®ç¾ãã¦ãã¾ãã
ã¾ã¨ãã¨æ¯ãè¿ã
æ¬ããã¸ã§ã¯ãã§ã¯ã徿¥ã®æ¤ç´¢ã·ã¹ãã ã§ã¯ã¬ã·ãæç¨¿ããçµæã¸ã®è¡¨ç¤ºã¾ã§ã«æé· 24 æéããã£ã¦ãããã®ãã5 åç¨åº¦ã«ã¾ã§ç縮ãããã¨ã«æåãã¾ããã課é¡ã®ç¹å®ãã解決ã¾ã§ã 6 é±éã§ãããªãã¨ããã¿ã¤ããªã¹ã±ã¸ã¥ã¼ã«ã§ã¯ããã¾ããããäºæ¥è¦ä»¶ã«éä¸è¶³ã®ãªãéçºãäºæ ãªãå®éãããã¨ãã§ããã®ã§ã¯ãªããã¨æãã¾ãã
æ¯ãè¿ã£ã¦ã¿ãã¨æåã®è¦å ã¨ãã¦ã¯
- ããã¸ã§ã¯ãåé ã«ãããã¯ãã®å®ç¾ãã¹ãä½é¨ãããã¬ã¼ã¯ãã¦ã³ããå½¢ã§è¦ä»¶ããã£ããã¨å®ç¾©ãã
- å¾ã®æææ±ºå®ã«è»¸ãéããææ»ããå°ãªããªã£ã
- ãããã¯ãããã¤ã³ãã©ãµã¤ãã¾ã§ãåé åã«ã¤ãã¦é«ãå°éæ§ãæã¤ã¡ã³ãã¼ãéã¾ã£ã
- å ¨ä½ã®è¦ä»¶å®ç¾©ããã£ããã¨ããè¨è¨ã¯å ¨å¡ã§è¡ããããããå ã®è©³ç´°éçºã¯åã¡ã³ãã¼ãæ å½ãã
- ããã¸ã§ã¯ãã®ããè¨æã«çµæããããã¼ã ã ã£ãããæéä¸ã¯é±ï¼åã® check-in MTG ãè¨å®ãã¦ã¹ã ã¼ãºã«åæã¨ç¸è«ããããªããããã«ãã
- ã¹ãããã§æ©æ¢°å¦ç¿ã¨ã³ã¸ãã¢ãªã©ãä»ãã¼ã ã®å©åãå¾ããã¨ãã§ãã
ãã¨ã大ããã£ãã®ã§ã¯ãªããã¨æãã¾ãã
çµç¹ã¨ãã¦éæãããããã·ã§ã³ãããããã®ããã®äºæ¥ã»ãããã¯ããããããããå®ç¾ãããä½é¨ãé»ãã§ããéå£ãããã¨ããã«æè¡ãã¶ã¤ãã¦ãããåãé¤ãã¨ããä»äºã¯ããã¯ãã¨ã¦ãããããã®ãããã®ã ã¨æ¹ãã¦å®æãã¾ãããããããã«é«ãå°éæ§ãæã¤ã¡ã³ãã¼ããæããã¼ã ã§ä»äºãã§ãããã¨ãå«ãã¦ãå人çã«ã¯å ¥ç¤¾ä»¥æ¥ãã£ã¨ããããããä»äºã®ä¸ã¤ã§ãã£ãããã«æãã¾ãã
Acknowledgements
æ¬ããã¸ã§ã¯ã㯠4 åã®ã¡ã¤ã³ã¡ã³ãã¼ï¼å¨è¾ºé¨ç½²ã®ã¡ã³ãã¼ãé¢ãããããããåãçºæ®ãããã¨ã§å®éãããã¨ã®ã§ããããã¸ã§ã¯ãã§ããç§ä¸äººã®åã§ã¯å°åºå®ç¾ã§ããªãã£ãã§ããã課é¡è§£æ±ºãå ±ã«æ¨é²ãã¦ããããã¨ã«æ¹ãã¦æè¬ãã¾ãã
æå¾ã«ãã¡ã¤ã³ã¡ã³ãã¼ã® 4 åã«ã¤ãã¦ãå使¥ãã©ã®ããã«æ å½ããããæè¨ãã¾ãã
- @SpicyCoffeeï¼çè
ï¼
- æ¤ç´¢ã¨ã³ã¸ãã¢
- æ å½ï¼ããã¸ã§ã¯ãå ¨ä½ã®çµ±æ¬ã»æçµæææ±ºå® / indexing application ã®å®è£
- @osyoyu
- æ¤ç´¢ã¨ã³ã¸ãã¢
- æ å½ï¼Solr Cluster 㨠Persistent Storage å¨ãã®è¨è¨ã»éçº
- @s4ichi
- SRE
- æ å½ï¼Solr Cluster 㨠Persistent Storage å¨ãã®è¨è¨ã»éçº / è² è·è©¦é¨ã¨ãã¼ã«ã¢ã¦ã
- @eagletmt
- SRE
- æ å½ï¼ãã£ãã·ã¥ã®èª¿æ»ã¨æé©å / indexing application ã®å®è£
ãã®è¨äºããæ¥ã æè¡ãç¨ãã¦ã¦ã¼ã¶ã¼èª²é¡ã解決ãã¦ããã¿ãªãã¾ã®ãå½¹ã«ç«ã¦ã°å¹¸ãã§ãã
*1:ä»å㯠CEO ããã®å½¹å²ãæ ã£ã¦ãã¾ããã社é·ã¨ç´æ¥ä»äºãããæ©ä¼ãéã£ã¦ãã¦ã©ããã¼ã
*2:å½æã® ECS & 社å åºç¤ Hako ã¨ããæ§æã¯éç¨è² è·ãä½ãä¸ã«é常ã«å®å®ãã¦ãããSolr ãç´æ¥ã®çç±ã¨ãªã£ã¦é害ãèµ·ããã®ã¯å¹´ã« 1 度ããªãããã«è¨æ¶ãã¦ãã¾ãã
*3:人æã«ããã¬ã·ãã®å ¨ä»¶ãã§ãã¯ã¯ short-period indexing 以åãè¡ããã¦ãããããããªãã¬ã¼ã·ã§ã³ã®è¦ç´ããå«ããã¬ã·ããã§ãã¯å¨ãã§ãã·ã¹ãã 夿´ãå¿ è¦ã«ãªãã¨äºæ³ããããã¨ãã表ç¾ã®æ¹ãæ£ç¢ºããããã¾ããã
*4:leader ãã follower ã«å¯¾ãã¦å¤æ´ãéç¥ããªãç¹ã¯ MySQL ã® replication ã¨ã®éãããããã¾ããã
*5:ç¾ç¶ã®å®è£ ã ã¨æ¤ç´¢çµæãæ°æéåã®ç¶æ ã«ä¸ç¬ã ãå·»ãæ»ã£ã¦ãã¾ã£ããããã®ã§ãããå®è£ é£æåº¦ãèãã¦ããã仿§å´ã§è¨±å®¹ããã¨ãã£ã夿ããããªã£ã¦ãã¾ãã
*6:ãã® API ã®éçºã¯ãæç¨¿ç©ã®ãã§ãã¯ãè¡ã£ã¦ãããã¼ã ã¨æ©æ¢°å¦ç¿ãã¼ã ã®ååã«ãã£ã¦è¿ éã«éçºããã¾ããã
*7:ã¯ãã¯ããããæ¡ç¨ãã¦ãã Unicorn ã¯ãã«ãããã»ã¹ã§åãã¦ãããããprometheus_exporter ã® multi process modeãç¨ãã¾ããã