åçåãããããã»ã¹ãšçžäºæ¥ç¶ãããå€æ°ã®ãµãŒãã¹ãåãã Lamoda ã®ãããªå€§äŒæ¥ã«ãã¢ãããŒãã®å€§å¹ ãªå€æŽã匷ãããã®ã¯äœã§ãããã? åæ©ã¯ãç«æ³çãªãã®ããããã¹ãŠã®ããã°ã©ããŒã«å åšããå®éšãžã®æ¬²æ±ãŸã§ããŸã£ããç°ãªãå ŽåããããŸãã
ããããããã¯è¿œå ã®ã¡ãªãããæåŸ
ã§ããªããšããæå³ã§ã¯ãããŸããã Sergey Zaika ããKafka ã«ã€ãã³ãé§åå API ãå®è£
ãããšå
·äœçã«äœãåŸãããã®ããæããŠãããŸã (
å
責äºé
: ãã®èšäºã¯ãSergey ã 2018 幎 XNUMX æã« HighLoad++ ã§éå¬ããããŒãã¢ããã®è³æã«åºã¥ããŠããŸãã Lamoda æ°ã«ãã Kafka ãšã®å
±åäœæ¥ã®ã©ã€ãäœéšã¯ãã¹ã±ãžã¥ãŒã«äžã®ä»ã®ã¬ããŒããšåæ§ã«ãªã¹ããŒãé
äºããŸããã ããã¯ãåãèããæã€äººã
ãåžžã«èŠã€ããããšãã§ãããŸããããã¹ãã§ãããšããäºå®ã®å¥œäŸã§ãããšç§ãã¡ã¯èããŠããŸããHighLoad++ ã®äž»å¬è
ã¯ããããä¿é²ããé°å²æ°ãäœãåºãããåŒãç¶ãåªåããŠãããŸãã
ããã»ã¹ã«ã€ããŠ
Lamoda ã¯ãç¬èªã®ã³ã³ã¿ã¯ã ã»ã³ã¿ãŒãé éãµãŒãã¹ (ããã³å€ãã®é¢é£äŒç€Ÿ)ãåçã¹ã¿ãžãªã巚倧ãªå庫ãåãã倧èŠæš¡ãªé»ååååŒãã©ãããã©ãŒã ã§ãããããããã¹ãŠãç¬èªã®ãœãããŠã§ã¢ã§å®è¡ãããŸãã æ¯æãæ¹æ³ã¯æ°åãããB2B ããŒãããŒã¯ãããã®ãµãŒãã¹ã®äžéšãŸãã¯ãã¹ãŠã䜿çšããèªç€Ÿã®è£œåã«é¢ããææ°æ å ±ãç¥ããããšèããŠããŸãã ããã«ãLamoda ã¯ãã·ã¢é£éŠä»¥å€ã® XNUMX ãåœã§äºæ¥ãå±éããŠããŸãããããã§ã¯ãã¹ãŠãå°ãç°ãªããŸãã æ°ãã泚æãæ§æããã«ã¯ãåèšã§ãããã XNUMX ãè¶ ããæ¹æ³ããããç¬èªã®æ¹æ³ã§åŠçããå¿ èŠããããŸãã ããããã¹ãŠã¯ãæã«ã¯éæ確ãªæ¹æ³ã§éä¿¡ããæ°åã®ãµãŒãã¹ã®å©ããåããŠæ©èœããŸãã 泚æã¹ããŒã¿ã¹ãäž»ãªè²¬ä»»ãšããäžå€®ã·ã¹ãã ããããŸãã ç§ãã¡ã¯åœŒå¥³ãBOBãšåŒã³ãç§ã¯åœŒå¥³ãšäžç·ã«åããŠããŸãã
ã€ãã³ãé§ååAPIã䜿çšããè¿éããŒã«
ã€ãã³ãé§åãšããèšèã¯éåžžã«é³è ãªãã®ã§ããããããäœãæå³ããã®ãã«ã€ããŠã¯ãããå°ã詳ããå®çŸ©ããŸãã Kafka ã§ã€ãã³ãé§åå API ã¢ãããŒããè©Šãããšã«ããèæ¯ããå§ããŸãã
ã©ã®ãåºã§ããã客æ§ããéãæã£ãŠæ³šæããã ãã§ãªããååãåããªãã£ããªã©ã®çç±ã§ãåºåŽããè¿éãæ±ããããããšããããŸãã ããã¯æ¯èŒççãããã»ã¹ã§ããå¿
èŠã«å¿ããŠæ
å ±ãæããã«ããééããŸãã
ããããæ³åŸã®å€æŽã«ãããªã¿ãŒã³ã¯ããè€éã«ãªãããã®ããã«å¥ã®ãã€ã¯ããµãŒãã¹ãå®è£ ããå¿ èŠããããŸããã
ç§ãã¡ã®åæ©:
- æ³åŸ FZ-54 - ã€ãŸããæ³åŸã¯ãç³åã§ããããšé åæžã§ããããšãããããééååŒã«ã€ããŠãæ°åãšããããªãçã SLA 以å ã«çšå眲ã«å ±åããããšã矩åä»ããŠããŸãã ç§ãã¡ã¯é»ååååŒäŒæ¥ãšããŠãéåžžã«å€ãã®æ¥åãè¡ã£ãŠããŸãã æè¡çã«ã¯ãããã¯æ°ãã責任 (ãããã£ãŠæ°ãããµãŒãã¹) ãšãé¢é£ãããã¹ãŠã®ã·ã¹ãã ã®æ¹åãæå³ããŸãã
- ããåå² ã¯ãBOB ãå€ãã®éäžæ žçãªè²¬ä»»ãã解æŸããå šäœã®è€éãã軜æžããããã®ç€Ÿå ãããžã§ã¯ãã§ãã
ãã®å³ã¯ãäž»èŠãª Lamoda ã·ã¹ãã ã瀺ããŠããŸãã ä»ããããã®ã»ãšãã©ã¯ãã以äžã§ã çž®å°ããã¢ããªã¹ã®åšãã« 5 ïœ 10 åã®ãã€ã¯ããµãŒãã¹ãé
眮ã ãããã¯ãã£ãããšæé·ããŠããŸãããäžå€®ã§éžæãããã©ã°ã¡ã³ããå±éããã®ã¯æããããããå°ããããããšããŠããŸãããããèœäžãããããšã¯ã§ããŸããã ãã¹ãŠã®ååŒæ (ç¢å°) ãäºçŽãããã®ãã¡ã®ãããããå©çšã§ããªããªãå¯èœæ§ããããšããäºå®ãèæ
®ããå¿
èŠããããŸãã
BOB ã«ã¯ãæ¯æãã·ã¹ãã ãé éã·ã¹ãã ãéç¥ã·ã¹ãã ãªã©ãéåžžã«å€ãã®ååŒæããããŸãã
æè¡çã«ã¯ BOB ã¯æ¬¡ã®ãšããã§ãã
- ã³ãŒããçŽ 150 è¡ + ãã¹ããçŽ 100 è¡ã
- php7.2 + Zend 1 & Symfony ã³ã³ããŒãã³ã 3;
- 100 ãè¶ ãã API ãšæ倧 50 ã®ã¢ãŠãããŠã³ãçµ±åã
- ç¬èªã®ããžãã¹ ããžãã¯ãæ〠4 ãåœã
BOB ã®å°å ¥ã«ã¯è²»çšãšåŽåããããã解決ãããã³ãŒããšåé¡ã®éã¯èª°ãé ã®äžã«ãã¹ãŠãå ¥ããããªãã»ã©ã§ãã äžè¬ã«ãç°¡ç¥åããçç±ã¯ãããããããŸãã
è¿åæç¶ã
æåã¯ãBOB ãš Payment ãšãã XNUMX ã€ã®ã·ã¹ãã ãããã»ã¹ã«é¢äžããŸãã ããã« XNUMX ã€ã衚瀺ãããŸãã
- 財æ¿åãµãŒãã¹: 財æ¿åããã³å€éšãµãŒãã¹ãšã®éä¿¡ã«é¢ããåé¡ã«å¯ŸåŠããŸãã
- è¿éããŒã«ãBOB ãèšããŸããªããããåã«æ°ãã亀æãå«ãŸããŠããŸãã
ããã»ã¹ã¯æ¬¡ã®ããã«ãªããŸãã
- BOB ã¯è¿éã®ãªã¯ãšã¹ããåãåããŸãã
- BOB ããã®è¿éããŒã«ã«ã€ããŠèªããŸãã
- è¿éããŒã«ã¯æ¯æãã«ããéãè¿ããŠãã ããããšæ瀺ããŸãã
- æ¯æãã¯ãéãè¿ããŸãã
- Refund Tool ãš BOB ã¯ã¹ããŒã¿ã¹ãçžäºã«åæããŸããããã¯ãçŸæç¹ã§ã¯äž¡æ¹ãšãå¿ èŠã§ããããã§ãã BOB ã«ã¯ UIãäŒèšçšã®ã¬ããŒããããã³äžè¬ã«ããã»ã©ç°¡åã«ã¯è»¢éã§ããªã倧éã®ããŒã¿ãããããããŸã è¿éããŒã«ã«å®å šã«åãæ¿ããæºåãã§ããŠããŸããã ïŒã€ã®æ€ åã«åº§ããªããã°ãªããŸããã
- 財æ¿åã®èŠè«ã¯ãªããªãã
ãã®çµæãKafka äžã§äžçš®ã®ã€ãã³ã ãã¹ãã€ãŸããã¹ãŠãå§ãŸãã€ãã³ã ãã¹ãäœæããŸããã äžæ³ãããã§åäžé害ç¹ãã§ããŸãã (ç®è)ã
é·æãšçæã¯éåžžã«æçœã§ãã ç§ãã¡ã¯ãã¹ãäœã£ãã®ã§ãä»ã§ã¯ãã¹ãŠã®ãµãŒãã¹ããã¹ã«äŸåããŠããããšã«ãªããŸãã ããã«ããèšèšã¯ç°¡çŽ åãããŸãããã·ã¹ãã ã«åäžé害ç¹ãçããŸãã Kafka ãã¯ã©ãã·ã¥ããããã»ã¹ãåæ¢ããŸãã
ã€ãã³ãé§ååAPIãšã¯
ãã®è³ªåã«å¯Ÿããè¯ãçãã¯ãMartin Fowler ã«ããã¬ããŒã (GOTO 2017) ã«ãããŸãã
ç§ãã¡ããã£ãããšãç°¡åã«èª¬æãããšã
- ãã¹ãŠã®éåæ亀æã次ã®ããã«ãŸãšããŸãã ã€ãã³ãã¹ãã¬ãŒãžã ã¹ããŒã¿ã¹ã®å€åã«ã€ããŠé¢å¿ã®ãããã¹ãŠã®æ¶è²»è ã«ãããã¯ãŒã¯çµç±ã§éç¥ãã代ããã«ãã¹ããŒã¿ã¹ã®å€åã«é¢ããã€ãã³ããéäžã¹ãã¬ãŒãžã«æžã蟌ã¿ããããã¯ã«èå³ã®ããæ¶è²»è ã¯ããã«è¡šç€ºããããã¹ãŠãèªã¿åããŸãã
- ãã®å Žåã®ã€ãã³ãã¯éç¥ã§ã (éç¥ïŒã©ããã§äœããå€ãã£ããšããããšã§ãã ããšãã°ã泚æã¹ããŒã¿ã¹ãå€æŽãããŸããã éç¥ã«å«ãŸããŠããªãã¹ããŒã¿ã¹å€åã«äŒŽãããŒã¿ã«èå³ã®ããæ¶è²»è ã¯ãèªããã®ã¹ããŒã¿ã¹ãç¥ãããšãã§ããã
- æ倧ã®ãªãã·ã§ã³ã¯æ¬æ Œçãªã€ãã³ã ãœãŒã·ã³ã°ã§ãã ç¶æ 転éã©ã®ã€ãã³ãã«ã¯ãåŠçã«å¿ èŠãªãã¹ãŠã®æ å ± (ã€ãã³ããã©ãããæ¥ãã®ããã©ã®ãããªç¶æ ã«ãªã£ãã®ããããŒã¿ãã©ã®ããã«æ£ç¢ºã«å€æŽãããã®ããªã©) ãå«ãŸããŠããŸããå¯äžã®åé¡ã¯ãå®çŸå¯èœæ§ãšä¿åã§ããæ å ±ã®éã§ãã
è¿éããŒã«ã®ç«ã¡äžãã®äžç°ãšããŠãç§ãã¡ã¯ XNUMX çªç®ã®ãªãã·ã§ã³ã䜿çšããŸããã ããã«ããã詳现ãªæ å ±ãæœåºããå¿ èŠããªããªã£ããããã€ãã³ãåŠçãç°¡çŽ åãããããã«ãæ°ããã€ãã³ããçºçãããã³ã«ã³ã³ã·ã¥ãŒããŒããã®æ確ãªååŸãªã¯ãšã¹ãã倧éã«çæããããšããã·ããªãªãæé€ãããŸããã
è¿éããŒã«ãµãŒãã¹ èªã¿èŸŒãŸããŠããªããããã£ãŠãã«ãã«ã«ã¯å¿ èŠãšããããããã³ã®å³ããããŸãã è¿éãµãŒãã¹ãè² è·ã®é«ããããžã§ã¯ãã«ãªã£ãããããžãã¹ã¯æºè¶³ããªããšæããŸãã
çŸç¶ã®ãŸãŸã®éåæ亀æ
éåæ亀æã®å ŽåãPHP éšéã¯éåžž RabbitMQ ã䜿çšããŸãã ãªã¯ãšã¹ãã®ããŒã¿ãåéããŠãã¥ãŒã«å ¥ããåããµãŒãã¹ã®ã³ã³ã·ã¥ãŒããŒããããèªã¿åã£ãŠéä¿¡ããŸãã (ãŸãã¯éä¿¡ããŸããã§ãã)ã API èªäœã«ã€ããŠã¯ãLamoda 㯠Swagger ãç©æ¥µçã«äœ¿çšããŠããŸãã API ãèšèšããSwagger ã§èšè¿°ããã¯ã©ã€ã¢ã³ããšãµãŒããŒã®ã³ãŒããçæããŸãã ãŸãããããã«åŒ·åããã JSON RPC 2.0 ã䜿çšããŸãã
ESB ãã¹ã䜿çšãããŠããå Žæãããã°ãactiveMQ äžã«ããå ŽæããããŸãããäžè¬çã«ã¯ã RabbitMQ - æšæº.
éåæ亀æã®äºå®
ã€ãã³ããã¹ãä»ãã亀æãèšèšããå Žåãé¡äŒŒç¹ããã©ãããšãã§ããŸãã åæ§ã«ãã€ãã³ãæ§é ã®èšè¿°ãéããŠå°æ¥ã®ããŒã¿äº€æã«ã€ããŠã説æããŸãã yaml 圢åŒã§ã¯ãã³ãŒãçæãèªåãã¡ã§è¡ãå¿ èŠãããããžã§ãã¬ãŒã¿ãŒã¯ä»æ§ã«åŸã£ãŠ DTO ãäœæããã¯ã©ã€ã¢ã³ããšãµãŒããŒã«ããããæäœããããæããŸãã äžä»£ã¯ XNUMX ã€ã®èšèªã«ç§»è¡ããŸã - golangãšphpã ããã¯ã©ã€ãã©ãªã®äžè²«æ§ãä¿ã€ã®ã«åœ¹ç«ã¡ãŸãã ãã®ãžã§ãã¬ãŒã¿ãŒã¯ golang ã§æžãããŠãããããgogi ãšããååãä»ããããŸããã
Kafka ã§ã®ã€ãã³ããœãŒã·ã³ã°ã¯å
žåçãªãã®ã§ãã Kafka Confluent ã®ã¡ã€ã³ ãšã³ã¿ãŒãã©ã€ãº ããŒãžã§ã³ããã®ãœãªã¥ãŒã·ã§ã³ããããŸãã
ç®èãªããšã«ããã®ãããªãã§ããã±ãŒã¹ã§ããã»ãŒåæ§ã®ãœãªã¥ãŒã·ã§ã³ãäœæãã Zalando ãšããã»ãŒåæ§ã®ããžãã¹ãååšãããšããããæå¹ã«æŽ»çšã§ããªãã®ã§ãã
èµ·åæã®ã¢ãŒããã¯ã㣠ãã¿ãŒã³ã¯æ¬¡ã®ãšããã§ããKafka ããçŽæ¥èªã¿åããŸãããæžã蟌ã¿ã¯ã€ãã³ã ãã¹çµç±ã§ã®ã¿è¡ãããŸãã Kafka ã«ã¯ããããŒã«ãŒããã©ã³ãµãŒãªã©ãããã«èªã¿åãããã®ããããããããŸãããŸããå€ããå°ãªããæ°Žå¹³ã¹ã±ãŒãªã³ã°ã®æºåãã§ããŠããŸããç§ã¯ãããä¿æããŠããããã£ãã®ã§ãã ç§ãã¡ã¯ XNUMX ã€ã®ã²ãŒããŠã§ã€ãå¥åã€ãã³ããã¹ãéããŠé²é³ãå®äºããããšèããŠããŸããããã®çç±ã¯æ¬¡ã®ãšããã§ãã
ã€ãã³ããã¹
ãããã¯ã€ãã³ããã¹ãšãã ããã¯åãªãã¹ããŒãã¬ã¹ http ã²ãŒããŠã§ã€ã§ãããããã€ãã®éèŠãªåœ¹å²ãæ ããŸãã
- æ€èšŒã®äœæ â ã€ãã³ããä»æ§ãæºãããŠããããšã確èªããŸãã
- ã€ãã³ããã¹ã¿ãŒã·ã¹ãã ã€ãŸããããã¯ãã©ã®ã€ãã³ããšã©ã®æ§é ãæå¹ã§ãããšèŠãªãããããšãã質åã«çãããäŒç€Ÿã®äž»èŠãã€å¯äžã®ã·ã¹ãã ã§ãã æ€èšŒã«ã¯ãããŒã¿åãšåæåã䜿çšããŠã³ã³ãã³ããå³å¯ã«æå®ããã ãã§ãã
- ããã·ã¥é¢æ° ã·ã£ãŒãã£ã³ã°ã®å Žå - Kafka ã¡ãã»ãŒãžæ§é ã¯ããŒãšå€ã§ãããããŒã®ããã·ã¥ã䜿çšããŠããŒãé 眮ããå Žæãèšç®ãããŸãã
ãªã
ç§ãã¡ã¯åçåãããããã»ã¹ãåãã倧äŒæ¥ã§åããŠããŸãã ãªãäœããå€ããã®ã§ããããïŒ ããã¯å®éšã§ãããããŠããã€ãã®å©ç¹ãåŸããããšæåŸ ããŠããŸãã
1:n+1 亀æ (XNUMX 察å€)
Kafka ã䜿çšãããšãæ°ããã³ã³ã·ã¥ãŒããŒã API ã«æ¥ç¶ããã®ãéåžžã«ç°¡åã«ãªããŸãã
è€æ°ã®ã·ã¹ãã (ããã³ããã€ãã®æ°ããã·ã¹ãã ) ã§åæã«ææ°ã®ç¶æ ã«ä¿ã€å¿ èŠããããã£ã¬ã¯ããªããããšããŸãã 以åã¯ãset-API ãå®è£ ãããã³ãã«ãçºæãããã¹ã¿ãŒ ã·ã¹ãã ã«ã³ã³ã·ã¥ãŒã㌠ã¢ãã¬ã¹ãéç¥ããŸããã ããã§ããã¹ã¿ãŒ ã·ã¹ãã ããããã¯ã«æŽæ°æ å ±ãéä¿¡ããèå³ã®ãã人ã¯å šå¡ãããèªãããã«ãªããŸãã æ°ããã·ã¹ãã ãç»å ŽããŸãã - ç§ãã¡ã¯ããããããã¯ã«ç»é²ããŸããã ã¯ãããã³ãã«ãå¯èœã§ãããããã·ã³ãã«ã§ãã
BOB ã®äžéšã§ããè¿éããŒã«ã®å ŽåãKafka ãéããŠåæãç¶æãããšäŸ¿å©ã§ãã æ¯æãã«ã¯ããéãè¿ããããšèšèŒãããŠããŸããBOB ãš RT ããããç¥ããã¹ããŒã¿ã¹ãå€æŽãã財æ¿åãµãŒãã¹ããããç¥ããå°åæãçºè¡ããŸããã
泚æ/è¿åã«é¢ãããã¥ãŒã¹ãã¯ã©ã€ã¢ã³ãã«éç¥ããçµ±åéç¥ãµãŒãã¹ãäœæããèšç»ããããŸãã çŸåšããã®è²¬ä»»ã¯ã·ã¹ãã éã§åæ£ãããŠããŸãã Kafka ããé¢é£æ
å ±ãååŸããŠããã«å¿çãã (ãããŠä»ã®ã·ã¹ãã ã§ãããã®éç¥ãç¡å¹ã«ãã) ããã«éç¥ãµãŒãã¹ãæããã ãã§ååã§ãã æ°ãã«çŽæ¥äº€æããå¿
èŠã¯ãããŸããã
ããŒã¿é§åå
ã©ã®ãããªãè¡ã®ã«ãããããªäŒæ¥ãã§ãã£ãŠãããŸãããã¯ãã°ãã©ãã»ã©å€§ãããŠããã·ã¹ãã éã®æ å ±ã¯éæã«ãªããŸãã Lamoda ã«ã¯ãã·ã¹ãã ããããŒã¿ãåéããããžãã¹ãšã€ã³ããªãžã§ã³ã ã·ã¹ãã ã®äž¡æ¹ã§åå©çšå¯èœãªåœ¢åŒã«å€æããããŒã¿åæéšéããããŸãã Kafka ã䜿çšãããšã倧éã®ããŒã¿ããã°ããæäŸãããã®æ å ±ã®æµããææ°ã®ç¶æ ã«ä¿ã€ããšãã§ããŸãã
ã¬ããªã±ãŒã·ã§ã³ãã°
RabbitMQ ã®ããã«ãã¡ãã»ãŒãžã¯èªã¿åãããåŸã«æ¶ããŸããã ã€ãã³ãã«åŠçã«ååãªæ å ±ãå«ãŸããŠããå Žåããªããžã§ã¯ãã«å¯Ÿããæè¿ã®å€æŽã®å±¥æŽãåŸãããå¿ èŠã«å¿ããŠãããã®å€æŽãé©çšããããšãã§ããŸãã
ã¬ããªã±ãŒã·ã§ã³ ãã°ã®ä¿åæéã¯ããã®ãããã¯ãžã®æžã蟌ã¿ã®åŒ·åºŠã«ãã£ãŠç°ãªããŸããKafka ã䜿çšãããšãä¿åæéãšããŒã¿ ããªã¥ãŒã ã®å¶éãæè»ã«èšå®ã§ããŸãã éäžçãªãããã¯ã®å Žåãããšãçæéæäœäžèœã«ãªã£ãå Žåã§ããæ å ±ãæ¶ããåã«ãã¹ãŠã®æ¶è²»è ãæ å ±ãèªãæéã確ä¿ã§ããããšãéèŠã§ãã éåžžã¯ä»¥äžã®ããŒã¿ãä¿åããããšãå¯èœã§ã æ¥ã®åäœ, ãµããŒããšããŠã¯ååã§ãã
次ã«ãKafka ã«è©³ãããªã人ã®ããã«ããã¥ã¡ã³ããå°ãå説æããŸã (åçãããã¥ã¡ã³ãããã®ãã®ã§ã)
AMQP ã«ã¯ãã¥ãŒããããŸããã³ã³ã·ã¥ãŒããŒåãã«ã¡ãã»ãŒãžããã¥ãŒã«æžã蟌ã¿ãŸãã éåžžãXNUMX ã€ã®ãã¥ãŒã¯ãåãããžãã¹ ããžãã¯ãåãã XNUMX ã€ã®ã·ã¹ãã ã«ãã£ãŠåŠçãããŸãã è€æ°ã®ã·ã¹ãã ã«éç¥ããå¿ èŠãããå Žåã¯ãã¢ããªã±ãŒã·ã§ã³ã«è€æ°ã®ãã¥ãŒã«æžã蟌ãããã«æ瀺ãããããã¥ãŒèªäœã®ã¯ããŒã³ãäœæãããã¡ã³ã¢ãŠã ã¡ã«ããºã ã䜿çšããŠäº€æãæ§æãããããããšãã§ããŸãã
Kafka ã«ãåæ§ã®æœè±¡åããããŸã ãããã¯ãã¡ãã»ãŒãžãæžããŸãããèªãã§ãæ¶ããŸããã ããã©ã«ãã§ã¯ãKafka ã«æ¥ç¶ãããšããã¹ãŠã®ã¡ãã»ãŒãžãåä¿¡ããäžæãããšããããä¿åãããªãã·ã§ã³ã衚瀺ãããŸãã ã€ãŸããé çªã«èªãã§ãããŸããã¡ãã»ãŒãžãæ¢èªãšããŠããŒã¯ããããšã¯ã§ããŸããããID ãä¿åããŠãããããèªã¿ç¶ããããšãã§ããŸãã 決å®ãã ID ã¯ãªãã»ãããšåŒã°ãããã®ã¡ã«ããºã ã¯ã³ããã ãªãã»ããã§ãã
ãããã£ãŠãç°ãªãããžãã¯ãå®è£ ããããšãã§ããŸãã ããšãã°ãããŸããŸãªåœã® 4 ã€ã®ã€ã³ã¹ã¿ã³ã¹ã« BOB ããããŸããLamoda ã¯ãã·ã¢ãã«ã¶ãã¹ã¿ã³ããŠã¯ã©ã€ãããã©ã«ãŒã·ã«ãããŸãã ãããã¯å¥ã ã«ãããã€ããããããæ§æãšç¬èªã®ããžãã¹ ããžãã¯ãè¥å¹²ç°ãªããŸãã ã¡ãã»ãŒãžã«ã¯ããããã©ã®åœãæãã®ãã瀺ããŸãã ååœã®å BOB æ¶è²»è ã¯ç°ãªã groupId ã䜿çšããŠèªã¿åããã¡ãã»ãŒãžãèªåã«åœãŠã¯ãŸããªãå Žåã¯ã¹ãããããŸãã ããã«ãªãã»ãã +1 ãã³ãããããŸãã åããããã¯ãåœç€Ÿã®æ¯æããµãŒãã¹ã«ãã£ãŠèªã¿åãããå Žåãå¥ã®ã°ã«ãŒãã§èªã¿åãããããããªãã»ããã¯äº€å·®ããŸããã
ã€ãã³ãèŠä»¶:
- ããŒã¿ã®å®å šæ§ã ã€ãã³ããåŠçã§ããããã«ååãªããŒã¿ãå¿ èŠã§ãã
- èª å®ã ã€ãã³ãã«äžè²«æ§ããããã€ãã³ããåŠçã§ãããã©ããã®æ€èšŒã Events-bus ã«å§ä»»ããŸãã
- é åºã¯éèŠã§ãã 埩垰ã®å Žåãç§ãã¡ã¯æŽå²ã«å¯ŸåŠããããšãäœåãªããããŸãã éç¥ã®å Žåãé åºã¯éèŠã§ã¯ãããŸãããéç¥ãåçš®ã®å Žåãã©ã®é åºãæåã«å°çãããã«é¢ä¿ãªããé»åã¡ãŒã«ã¯åãã«ãªããŸãã è¿éã®å Žåã«ã¯æ確ãªããã»ã¹ãããã泚æãå€æŽããå Žåã¯äŸå€ãçºçããè¿éã¯äœæãŸãã¯åŠçããããæçµçã«ã¯ç°ãªãã¹ããŒã¿ã¹ã«ãªããŸãã
- äžè²«æ§ã ç§ãã¡ã¯ã¹ãã¢ãæã£ãŠãããçŸåšã¯ API ã®ä»£ããã«ã€ãã³ããäœæããŠããŸãã æ°ããã€ãã³ããæ¢åã®ã€ãã³ãã®å€æŽã«é¢ããæ å ±ãè¿ éãã€å®äŸ¡ã«ãµãŒãã¹ã«éä¿¡ããæ¹æ³ãå¿ èŠã§ãã ããã¯ãå¥ã® git ãªããžããªãšã³ãŒã ãžã§ãã¬ãŒã¿ãŒã®å ±éä»æ§ãéããŠå®çŸãããŸãã ãããã£ãŠãç°ãªããµãŒãã¹ã®ã¯ã©ã€ã¢ã³ããšãµãŒããŒã調æŽãããŸãã
ã©ã¢ãŒãã®ã«ãã«
XNUMX ã€ã® Kafka ã€ã³ã¹ããŒã«ããããŸãã
- ãã°;
- ç 究éçº;
- ã€ãã³ããã¹ã
ä»æ¥ã¯æåŸã®ç¹ã«ã€ããŠã®ã¿è©±ããŸãã events-bus ã§ã¯ãããã»ã©å€§èŠæš¡ãªã€ã³ã¹ããŒã«ã¯ãããŸãã - 3 ã€ã®ãããŒã«ãŒ (ãµãŒããŒ) ãš 27 ã®ãããã¯ã ãã§ãã ååãšããŠãXNUMX ã€ã®ãããã¯ã XNUMX ã€ã®ããã»ã¹ã«ãªããŸãã ããããããã¯åŸ®åŠãªç¹ãªã®ã§ããããã觊ããŠãããŸãã
äžã¯RPSã°ã©ãã§ãã è¿éããã»ã¹ã¯éç·è²ã®ç· (ã¯ããX 軞äžã®ç·) ã§ããŒã¯ãããŠããããã³ã¯è²ã®ç·ã¯ã³ã³ãã³ãæŽæ°ããã»ã¹ã§ãã
Lamoda ã®ã«ã¿ãã°ã«ã¯äœçŸäžãã®è£œåãå«ãŸããŠãããããŒã¿ã¯åžžã«æŽæ°ãããŸãã äžéšã®ã³ã¬ã¯ã·ã§ã³ã¯æ代é ãã«ãªããããã«ä»£ããæ°ããã³ã¬ã¯ã·ã§ã³ããªãªãŒã¹ãããã«ã¿ãã°ã«ã¯åžžã«æ°ããã¢ãã«ãç»å ŽããŸãã ç§ãã¡ã¯ãã客æ§ãææ¥äœãèå³ãæã€ããäºæž¬ããããšããŠãããããåžžã«æ°ãããã®ãè³Œå ¥ããåçãæ®ããé³åã±ãŒã¹ãæŽæ°ããŠããŸãã
ãã³ã¯è²ã®ããŒã¯ã¯è£œåã®ã¢ããããŒããã€ãŸã補åã®å€æŽã§ãã ã¿ããªãåçãæ®ããåçãæ®ãããããŠãŸãåçãæ®ã£ãŠããããšãããããŸãã â ã€ãã³ãã®ããã¯ãããŒãããŸããã
Lamoda ã€ãã³ãã®äœ¿çšäŸ
æ§ç¯ãããã¢ãŒããã¯ãã£ã次ã®æäœã«äœ¿çšããŸãã
- è¿åç¶æ³ã®è¿œè·¡: é¢é£ãããã¹ãŠã®ã·ã¹ãã ããã®è¡ååèµ·ãšã¹ããŒã¿ã¹è¿œè·¡ã æ¯æããã¹ããŒã¿ã¹ãäŒèšåŠçãéç¥ã ããã§ç§ãã¡ã¯ã¢ãããŒãããã¹ãããããŒã«ãäœæãããã¹ãŠã®ãã°ãåéããããã¥ã¡ã³ããäœæãããã®äœ¿çšæ¹æ³ãååã«äŒããŸããã
- 補åã«ãŒãã®æŽæ°: æ§æãã¡ã¿ããŒã¿ãç¹æ§ã XNUMX ã€ã®ã·ã¹ãã ãèªã¿åã (衚瀺) ãè¡ããè€æ°ã®ã·ã¹ãã ãæžã蟌ã¿ãè¡ããŸãã
- é»åã¡ãŒã«ãããã·ã¥ãSMSïŒæ³šæãéãŸããŸããã泚æãå°çããŸãããè¿åãåãä»ããããŸããããªã©ããããããããŸãã
- åšåº«ã»å庫ãªãã¥ãŒã¢ã« â ã¢ã€ãã ã®å®éçãªæŽæ°ãæ°å€ã ã: å庫ãžã®å°çãè¿åã ååã®äºçŽã«é¢é£ãããã¹ãŠã®ã·ã¹ãã ãææ°ã®ããŒã¿ã§åäœããå¿ èŠããããŸãã çŸåšãæ ªäŸ¡æŽæ°ã·ã¹ãã ã¯éåžžã«è€éã§ãããKafka ã«ãã£ãŠç°¡çŽ åãããŸãã
- ããŒã¿è§£æ (ç 究éçºéšé)ãML ããŒã«ãåæãçµ±èšã ç§ãã¡ã¯æ å ±ã®éææ§ãæãã§ããŸããKafka ã¯ããã«é©ããŠããŸãã
ããã§ãéå» XNUMX ãæéã«èµ·ãã£ã倧ããªå€åãšèå³æ·±ãçºèŠã«ã€ããŠã®ããã«èå³æ·±ãéšåã説æããŸãã
èšèšäžã®åé¡
æ°ããããšãããããšããŸããããšãã°ãé ä¿¡ããã»ã¹å šäœã Kafka ã«è»¢éããŸãã çŸåšãããã»ã¹ã®äžéšã¯ BOB ã®æ³šæåŠçã«å®è£ ãããŠããŸãã é éãµãŒãã¹ãžã®æ³šæã®è»¢éãäžéå庫ãžã®ç§»åãªã©ã®èåŸã«ã¯ã¹ããŒã¿ã¹ ã¢ãã«ããããŸãã ã¢ããªã¹å šäœ (å Žåã«ãã£ãŠã¯ XNUMX ã€) ã«å ããŠãé ä¿¡å°çšã® API ãå€æ°ãããŸãã 圌ãã¯é éã«ã€ããŠãã£ãšè©³ããç¥ã£ãŠããŸãã
ãããã¯äŒŒãé åã®ããã«èŠããŸãããBOB ã®æ³šæåŠçãšåºè·ã·ã¹ãã ã§ã¯ã¹ããŒã¿ã¹ãç°ãªããŸãã ããšãã°ãäžéšã®å® é 䟿ãµãŒãã¹ã¯äžéã¹ããŒã¿ã¹ãéä¿¡ããããé éæžã¿ããŸãã¯ãçŽå€±ããšããæçµã¹ããŒã¿ã¹ã®ã¿ãéä¿¡ããŸãã éã«ãååã®ç§»åã«ã€ããŠè©³çŽ°ã«å ±åãã人ãããŸãã 誰ããç¬èªã®æ€èšŒã«ãŒã«ãæã£ãŠããŸããé»åã¡ãŒã«ãæå¹ã§ãããã€ãŸãåŠçããããšãã人ãããŸãã ä»ã®äººã«ãšã£ãŠã¯ãããã¯ç¡å¹ã§ãããé£çµ¡å ã®é»è©±çªå·ããããã泚æã¯åŒãç¶ãåŠçããã誰ãããã®ãããªæ³šæã¯ãŸã£ããåŠçãããªããšèšãã§ãããã
ããŒã¿ã¹ããªãŒã
Kafka ã®å ŽåãããŒã¿ ãããŒãæŽçãããšããåé¡ãçããŸãã ãã®ã¿ã¹ã¯ã§ã¯ãããã€ãã®ãã€ã³ãã«åºã¥ããŠæŠç¥ãéžæããå¿ èŠããããŸãããã¹ãŠãèŠãŠã¿ãŸãããã
XNUMX ã€ã®ãããã¯å ã§ããããããããšãå¥ã®ãããã¯å ã§ãããã?
ã€ãã³ãä»æ§æžãããããŸãã BOB ã§ã¯ãããããã®æ³šæãé éããå¿ èŠãããããšãèšè¿°ãã泚æçªå·ããã®æ§æãããã€ãã® SKU ãšããŒã³ãŒããªã©ã瀺ããŸãã ååãå庫ã«å°çãããšãé éæ¥è ã¯ã¹ããŒã¿ã¹ãã¿ã€ã ã¹ã¿ã³ãããã®ä»å¿ èŠãªãã®ãã¹ãŠãåãåãããšãã§ããŸãã ãã ãããã®ããŒã¿ã®æŽæ°ã BOB ã§åä¿¡ããããšèããŠããŸãã é ä¿¡ããããŒã¿ãåä¿¡ããéã®ããã»ã¹ããããŸãã ãããåãã€ãã³ãã§ããïŒ ãããšããããã¯ç¬èªã®ãããã¯ã«å€ããå¥ã®ããåããªã®ã§ãããã?
ã»ãšãã©ã®å Žåããããã¯éåžžã«äŒŒãŠããããããã¯ã XNUMX ã€äœæããããšããèªæã«æ ¹æ ããªãããã§ã¯ãããŸããããããã¯ãå¥ã§ãããšããããšã¯ãã³ã³ã·ã¥ãŒããå¥ãæ§æãå¥ãããããã¹ãŠã®äžä»£ãå¥ã§ããããšãæå³ããããã§ãã ããããäºå®ã§ã¯ãããŸããã
æ°ãããã£ãŒã«ããæ°ããã€ãã³ããïŒ
ããããåãã€ãã³ãã䜿çšãããšãå¥ã®åé¡ãçºçããŸãã ããšãã°ããã¹ãŠã®é ä¿¡ã·ã¹ãã ã BOB ãçæã§ããçš®é¡ã® DTO ãçæã§ããããã§ã¯ãããŸããã ID ãéä¿¡ããŸãããID ã¯å¿ èŠãªãããä¿åãããŸããããŸããã€ãã³ã ãã¹ ããã»ã¹ãéå§ãã芳ç¹ããã¯ããã®ãã£ãŒã«ãã¯å¿ é ã§ãã
ãã®ãã£ãŒã«ããå¿ é ã§ãããšããã€ãã³ã ãã¹ã®ã«ãŒã«ãå°å ¥ãããšãBOB ãŸãã¯éå§ã€ãã³ã ãã³ãã©ãŒã«è¿œå ã®æ€èšŒã«ãŒã«ãèšå®ããå¿ èŠããããŸãã æ€èšŒã¯ãµãŒãã¹å šäœã«åºããå§ããŸãããããã¯ããŸã䟿å©ã§ã¯ãããŸããã
ãã XNUMX ã€ã®åé¡ã¯ã段éçãªéçºãžã®èªæã§ãã ã€ãã³ãã«äœããå ããå¿ èŠããããšèšãããŠããŸãããèããŠã¿ãã°ãããã¯å¥ã®ã€ãã³ãã§ããã¹ãã ã£ãã®ãããããŸããã ããããç§ãã¡ã®ã¹ããŒã ã§ã¯ãå¥ã®ã€ãã³ãã¯å¥ã®ãããã¯ã§ãã äžã§èª¬æããããã»ã¹å šäœã«ã€ããŠã¯ãå¥ã®ãããã¯ã§èª¬æããŸãã éçºè ã¯ãåã«å¥ã®ãã£ãŒã«ãã JSON ã¹ããŒãã«è¿œå ããŠåçæããããªãã§ãããã
è¿éã®å Žåã¯å幎åŸã®ã€ãã³ãéå¬ã«è³ããŸããã æãæ»ãæŽæ°ãšåŒã°ãã XNUMX ã€ã®ã¡ã¿ã€ãã³ããããããã®æŽæ°ãå®éã«äœã§ãããã説æããã¿ã€ã ãã£ãŒã«ãããããŸããã ãã®ããããã®ã¿ã€ãã§ãã®ã€ãã³ããæ€èšŒããæ¹æ³ãæããŠãããããªããŒã¿ãŒãåãããçŽ æŽããããã¹ã€ããããããŸããã
ã€ãã³ãã®ããŒãžã§ã³ç®¡ç
Kafka ã§ã¡ãã»ãŒãžãæ€èšŒããã«ã¯ã次ã䜿çšã§ããŸã
ããŒãã£ã·ã§ã³ã®èªã¿åãé åºã®ä¿èšŒ
Kafka å ã®ãããã¯ã¯ããŒãã£ã·ã§ã³ã«åå²ãããŸãã ããã¯ããšã³ãã£ãã£ãååŒæãèšèšããŠããéã¯ããã»ã©éèŠã§ã¯ãããŸããããããã䜿çšããã³æ¡åŒµããæ¹æ³ã決å®ããéã«ã¯éèŠã§ãã
éåžžã®å ŽåãKafka 㧠XNUMX ã€ã®ãããã¯ãäœæããŸãã ããã©ã«ãã§ã¯ XNUMX ã€ã®ããŒãã£ã·ã§ã³ã䜿çšããããã®ãããã¯ã®ãã¹ãŠã®ã¡ãã»ãŒãžã¯ããã«éãããŸãã ãããã£ãŠãæ¶è²»è ã¯ãããã®ã¡ãã»ãŒãžãé çªã«èªã¿ãŸãã ããã§ãXNUMX 人ã®ç°ãªãã³ã³ã·ã¥ãŒããã¡ãã»ãŒãžãèªããããã«ã·ã¹ãã ãæ¡åŒµããå¿ èŠããããšããŸãã ããšãã°ãSMS ãéä¿¡ããŠããå Žåãè¿œå ã®ããŒãã£ã·ã§ã³ãäœæããããã« Kafka ã«æ瀺ã§ããŸãããããããšãKafka ã¯ã¡ãã»ãŒãžã XNUMX ã€ã®éšå (ååã¯ãããããååã¯ãã) ã«åå²ãå§ããŸãã
ã«ãã«ã¯ããããã©ã®ããã«åå²ããŸãã? åã¡ãã»ãŒãžã«ã¯æ¬æ (JSON ãä¿åããŸã) ãšããŒããããŸãã ãã®ããŒã«ããã·ã¥é¢æ°ãä»å ãããšãã¡ãã»ãŒãžãã©ã®ããŒãã£ã·ã§ã³ã«éä¿¡ããããã決ãŸããŸãã
æãæ»ãã®å Žåãããã¯éèŠã§ããXNUMX ã€ã®ããŒãã£ã·ã§ã³ãåãå Žåã䞊åã³ã³ã·ã¥ãŒããŒãæåã®ã€ãã³ããããåã« XNUMX çªç®ã®ã€ãã³ããåŠçããå¯èœæ§ããããåé¡ãçºçããŸãã ããã·ã¥é¢æ°ã«ãããåãããŒãæã€ã¡ãã»ãŒãžãåãããŒãã£ã·ã§ã³ã«å°éããããšãä¿èšŒãããŸãã
ã€ãã³ããšã³ãã³ãã®æ¯èŒ
ãããç§ãã¡ãééããåé¡ã§ãã ã€ãã³ããšã¯ç¹å®ã®ã€ãã³ãã§ããããšãã°ãååããã£ã³ã»ã«ããããè¿éãçºçãããªã©ãã©ããã§äœããèµ·ãã£ã (something_happened) ããšãèšããŸãã 誰ãããããã®ã€ãã³ãããªãã¹ã³ãããšããååããã£ã³ã»ã«ãããŸãããã«åŸã£ãŠè¿éãšã³ãã£ãã£ãäœæãããã»ããã¢ããã®ã©ããã«ãè¿éãçºçããŸããããšæžã蟌ãŸããŸãã
ãããéåžžãã€ãã³ããäŒç»ãããšãã¯ãç¡é§ã«ã€ãã³ããæžãããã¯ãããŸããã誰ããèªãã§ããããšããäºå®ãé Œãã«ããŸãã äœããèµ·ãã£ãïŒã¢ã€ãã ããã£ã³ã»ã«ããããè¿éãè¿éãããïŒã®ã§ã¯ãªããäœãããã¹ãã ãšããããšãæžããããšãã匷ãèªæããããŸãã ããšãã°ãååã¯è¿åã®æºåãã§ããŠããŸãã
äžæ¹ã§ãã€ãã³ããã©ã®ããã«äœ¿çšããããã瀺åããŠããŸãã äžæ¹ã§ãéåžžã®ã€ãã³ãåãšã¯ããŸã䌌ãŠããŸããã ããã«ããããã do_something ã³ãã³ããŸã§ã¯ããã»ã©é ããããŸããã ãã ãã誰ãããã®ã€ãã³ããèªãã§ãããšããä¿èšŒã¯ãããŸããã ãããŠãããèªãã°ãæåããããšã«ãªããŸãã ãããŠããããããŸãèªã¿åããå Žåãããªãã¯äœããè¡ãããã®äœããæåããããšã«ãªããŸãã ã€ãã³ãã do_something ã«ãªã£ãç¬éã«ãã£ãŒãããã¯ãå¿ èŠã«ãªãããããåé¡ã«ãªããŸãã
RabbitMQ ã®éåæ亀æã§ã¯ãã¡ãã»ãŒãžãèªã㧠http ã«ã¢ã¯ã»ã¹ãããšãå°ãªããšãã¡ãã»ãŒãžãåä¿¡ããããšããå¿çãåŸãããŸãã Kafka ã«æžã蟌ããšãKafka ã«æžããã¡ãã»ãŒãžãååšããŸããããããã©ã®ããã«åŠçããããã«ã€ããŠã¯äœãããããŸããã
ãããã£ãŠãç§ãã¡ã®å Žåã¯ãå¿çã€ãã³ããå°å ¥ããéåžžã«å€ãã®ã€ãã³ããéä¿¡ãããå Žåã«ããã®åŸã«åãæ°ã®å¿çã€ãã³ããå°çããããã«ç£èŠãèšå®ããå¿ èŠããããŸããã ãããèµ·ãããªãå Žåã¯ãäœãåé¡ãçºçããããã§ãã ããšãã°ããitem_ready_to_refundãã€ãã³ããéä¿¡ããå Žåãæãæ»ããäœæããããéãã¯ã©ã€ã¢ã³ãã«è¿ããããmoney_refundedãã€ãã³ããéä¿¡ãããããšãæåŸ ãããŸãã ããããããã¯ç¢ºå®ã§ã¯ãªããããç£èŠãå¿ èŠã§ãã
ãã¥ã¢ã³ã¹
ããªãæçœãªåé¡ããããŸãããããã¯ããé çªã«èªãã§ããŠãæªãã¡ãã»ãŒãžãããå Žåãã³ã³ã·ã¥ãŒããŒã¯èœã¡ãŠããŸããå ã«é²ãããšãã§ããªããªããŸãã å¿ èŠã§ã ãã¹ãŠã®æ¶è²»è ãæ¢ããŠãã ãããããã«ãªãã»ãããã³ãããããŠèªã¿åããç¶ããŸãã
ç§ãã¡ã¯ãããç¥ã£ãŠããŠãæåŸ ããŠããŸããããããã§ãããã¯èµ·ãããŸããã ãããŠãããã¯ãã€ãã³ããã€ãã³ããã¹ã®èŠ³ç¹ããã¯æå¹ã§ãããã¢ããªã±ãŒã·ã§ã³ããªããŒã¿ã®èŠ³ç¹ããã¯æå¹ã§ããããPostgreSQLã®èŠ³ç¹ããã¯ç¡å¹ã§ãã£ãããã«èµ·ãããŸããã UNSIGNED INT ãåãã MySQL ãšãæ°ãã«äœæãããã·ã¹ãã ã§ã¯ INT ã®ã¿ãåãã PostgreSQL ããããŸããã 圌ã®ãµã€ãºã¯å°ãå°ãããŠãIDãåããŸããã§ããã Symfony ã¯äŸå€ãé€ããŠæ»äº¡ããŸããã ãã¡ãããäŸå€ã«äŸåããŠããããäŸå€ããã£ãããããã®ãªãã»ãããã³ãããããããšããŠããŸããããã¡ãã»ãŒãžã®åŠçã倱æããããããã®åã«åé¡ã«ãŠã³ã¿ãŒãã€ã³ã¯ãªã¡ã³ãããå¿ èŠããããŸããã ãã®ãããžã§ã¯ãã®ã«ãŠã³ã¿ãŒãããŒã¿ããŒã¹å ã«ãããSymfony ã¯ãã§ã«ããŒã¿ããŒã¹ãšã®éä¿¡ãéããŠãããXNUMX çªç®ã®äŸå€ã«ãããªãã»ãããã³ãããããæ©äŒããªãããã»ã¹å šäœã匷å¶çµäºãããŸããã
ãµãŒãã¹ã¯ãã°ããåæ¢ããŠããŸãããã幞ããªããšã«ãKafka ã§ã¯ã¡ãã»ãŒãžãæ®ã£ãŠãããããããã¯ããã»ã©æªãããšã§ã¯ãããŸããã§ããã äœæ¥ãåéãããããèªã¿çµããããšãã§ããŸãã å¿«é©ã§ããã
Kafka ã«ã¯ãããŒã«ãéããŠä»»æã®ãªãã»ãããèšå®ããæ©èœããããŸãã ãã ãããããè¡ãã«ã¯ããã¹ãŠã®ã³ã³ã·ã¥ãŒããŒãåæ¢ããå¿ èŠããããŸãããã®å Žåãã³ã³ã·ã¥ãŒããŒãååšããªãå¥ã®ãªãªãŒã¹ãæºåããåãããã€ããŸãã ãã®åŸãKafka ã§ããŒã«ã䜿çšããŠãªãã»ãããã·ãããããšãã¡ãã»ãŒãžãéä¿¡ãããŸãã
å¥ã®ãã¥ã¢ã³ã¹ - ã¬ããªã±ãŒã·ã§ã³ ãã°ãš rdkafka.so ã®æ¯èŒ - ç§ãã¡ã®ãããžã§ã¯ãã®è©³çŽ°ã«é¢é£ããŠããŸãã ç§ãã¡ã¯ PHP ã䜿çšããŸããPHP ã§ã¯ãååãšããŠããã¹ãŠã®ã©ã€ãã©ãªã¯ rdkafka.so ãªããžããªãéã㊠Kafka ãšéä¿¡ãããã®åŸãããçš®ã®ã©ãããŒãååšããŸãã ãããããããã¯ç§ãã¡å人ã®å°é£ã§ããããã§ã«èªãã æ¬ã®äžéšãåã«åèªããããšã¯ããã»ã©ç°¡åã§ã¯ãªãããšãããããŸããã äžè¬çã«ããœãããŠã§ã¢ã«åé¡ããããŸããã
ããŒãã£ã·ã§ã³ã®æäœã®è©³çŽ°ã«æ»ããšãããã¯ããã¥ã¡ã³ãã«èšèŒãããŠããŸãã ã³ã³ã·ã¥ãŒã >= ããã㯠ããŒãã£ã·ã§ã³ã ããããç§ããã®ããšãç¥ã£ãã®ã¯ãæã£ãŠããããããã£ãšåŸã§ããã ã¹ã±ãŒãªã³ã°ã㊠20 ã€ã®ã³ã³ã·ã¥ãŒããæãããå Žåã¯ãå°ãªããšã XNUMX ã€ã®ããŒãã£ã·ã§ã³ãå¿ èŠã§ãã ã€ãŸããXNUMX 件ã®ã¡ãã»ãŒãžãèç©ããã XNUMX ã€ã®ããŒãã£ã·ã§ã³ããããæ°ããããŒãã£ã·ã§ã³ãäœæããå Žåãã¡ãã»ãŒãžã®æ°ã¯ããã«ã¯åçã«ãªããŸããã ãããã£ãŠãXNUMX ã€ã®äžŠåã³ã³ã·ã¥ãŒããŒãæã€ã«ã¯ãããŒãã£ã·ã§ã³ãåŠçããå¿ èŠããããŸãã
ç£èŠ
ãããç£èŠããæ¹æ³ã«ãã£ãŠãæ¢åã®ã¢ãããŒãã«ã©ã®ãããªåé¡ãããã®ãââãããã«æ確ã«ãªããšæããŸãã
ããšãã°ãæè¿ã¹ããŒã¿ã¹ãå€æŽãããããŒã¿ããŒã¹å ã®è£œåã®æ°ãèšç®ããããã«å¿ããŠãããã®å€æŽã«åºã¥ããŠã€ãã³ããçºçããã¯ãã§ããããã®æ°å€ãç£èŠã·ã¹ãã ã«éä¿¡ããŸãã 次ã«ãKafka ãã XNUMX çªç®ã®æ°å€ãå®éã«èšé²ãããã€ãã³ãã®æ°ãååŸããŸãã æããã«ãããã XNUMX ã€ã®æ°å€ã®å·®ã¯åžžã«ãŒãã§ãªããã°ãªããŸããã
ããã«ããããã¥ãŒãµãŒãã©ã®ããã«åäœããŠããããã€ãã³ããã¹ãã¡ãã»ãŒãžãåä¿¡ãããã©ãããããã³ã³ã³ã·ã¥ãŒããã©ã®ããã«åäœããŠããããç£èŠããå¿
èŠããããŸãã ããšãã°ã以äžã®ãã£ãŒãã§ã¯ãRefund Tool ã¯å¥œèª¿ã§ãããBOB ã«ã¯æããã«ããã€ãã®åé¡ããããŸã (éãããŒã¯)ã
æ¶è²»è
ã°ã«ãŒãã®é
ãã«ã€ããŠã¯ãã§ã«è¿°ã¹ãŸããã 倧ãŸãã«èšããšãããã¯æªèªã¡ãã»ãŒãžã®æ°ã§ãã äžè¬ã«ãæ¶è²»è
ã¯çŽ æ©ãäœæ¥ãããããé
延ã¯éåžž 0 ã§ãããå Žåã«ãã£ãŠã¯çæéã®ããŒã¯ãçºçããããšããããŸãã Kafka ã¯ããããã®ãŸãŸå®è¡ã§ããŸãããäžå®ã®ééãèšå®ããå¿
èŠããããŸãã
ãããžã§ã¯ãããããŸã
API ã®å¿çã¯æ¬¡ã®ããã«ãªããŸãã ããã¯ã°ã«ãŒã bob-live-fifaãããŒãã£ã·ã§ã³refund.update.v1ãã¹ããŒã¿ã¹OKãã©ã°0 - æåŸã®æçµãªãã»ãããªã©ã§ãã
ç£èŠ updated_at SLA (ã¹ã¿ãã¯) ãã§ã«è¿°ã¹ãŸããã ããšãã°ãååãè¿åå¯èœãªã¹ããŒã¿ã¹ã«å€æŽãããŸããã Cron ãã€ã³ã¹ããŒã«ãããšã5 å以å
ã«ãã®ãªããžã§ã¯ããè¿éãããªãã£ãå Žå (æ¯æãã·ã¹ãã ãéããŠããã«è¿éãããŸã)ãééããªãäœãåé¡ãçºçãããããããã¯ééããªããµããŒã察象ã§ãããšéç¥ãããŸãã ãããã£ãŠãåçŽã« Cron ã䜿çšããŠãã®ãããªãã®ãèªã¿åãããããã 0 ãã倧ããå Žåã«ã¢ã©ãŒããéä¿¡ããŸãã
èŠçŽãããšãã€ãã³ãã䜿çšãããšæ¬¡ã®ãããªå Žåã«äŸ¿å©ã§ãã:
- æ å ±ã¯ããã€ãã®ã·ã¹ãã ã§å¿ èŠãšãããŸãã
- åŠçã®çµæã¯éèŠã§ã¯ãããŸããã
- ã€ãã³ããã»ãšãã©ãªãããå°ããªã€ãã³ãããããŸãã
ãã®èšäºã«ã¯ Kafka ã®éåæ API ãšããéåžžã«å ·äœçãªãããã¯ãããããã«èŠããŸãããããã«é¢é£ããŠäžåºŠã«å€ãã®ããšããå§ãããããšæããŸãã
ãŸãã次HighLoad ++ XNUMXæãŸã§åŸ ã€å¿ èŠããããŸããXNUMXæã«ã¯ãµã³ã¯ãããã«ãã«ã¯ããŒãžã§ã³ããããXNUMXæã«ã¯ããã·ãã«ã¹ã¯ã§ã®é«è² è·ã«ã€ããŠè©±ããŸãã
第äºã«ããã®ã¬ããŒãã®èè ã§ããã»ã«ã²ã€ã»ã¶ã€ã«æ°ã¯ããã¬ããžãããžã¡ã³ãã«é¢ããæ°ããäŒè°ã®ããã°ã©ã å§å¡äŒã®ã¡ã³ããŒã§ãããã¬ããžã«ã³ãã¡ã¬ã³ã¹ ã ãã®ã«ã³ãã¡ã¬ã³ã¹ã¯ 26 æ XNUMX æ¥ã«éå¬ããã XNUMX æ¥éãã®ã€ãã³ãã§ããããã®ããã°ã©ã ã¯éåžžã«å 容ãæ¿ããã®ã§ãã
ãããŠXNUMXæã«ãªããŸãPHP ãã·ã¢ ОRIT++ (DevOpsConf ãå«ã) - ããã§ãããã¯ãææ¡ããããèªåã®çµéšã«ã€ããŠè©±ããããè©°ã蟌ãŸããã³ãŒã³ã«ã€ããŠæå¥ãèšã£ããããããšãã§ããŸãã
åºæïŒ habr.com