![](https://habrastorage.org/storage1/a83f1fe1/bf3fb3cb/c6825a17/1a8d1610.gif)
ãã®èšäºã§ã¯ãã¢ããªã±ãŒã·ã§ã³ãæé©åããç°åžžãªæ¹æ³ã®1ã€ãã€ãŸããã¿ã¹ã¯ã®åæ£ã«Gearmanãããžã§ã¯ãã䜿çšããããšãæ€èšããããšæããŸãã Gearmanã¯ããã®ãããªã·ã¹ãã ãæ§ç¯ããããã®ãã¬ãŒã ã¯ãŒã¯ã§ãã èšäºã«ã¯ã³ãŒãäŸã¯ãããŸãããèšäºã¯ããå ¥éçã§ãããå®çšçãªæ å ±ã¯ååã«å«ãŸããŠããŸãã
æ©èœãšè² è·ã®ç¹ã§éåžžã«è€éãªãããžã§ã¯ãã§ã¯ãé ããæ©ããæé©åãšã¹ã±ãŒã©ããªãã£ã®åé¡ãçããŸãã ãã®è€éãªåé¡ã解決ããããã®å€ãã®ã¢ãããŒãããããŸããã·ã¹ãã å šäœãŸãã¯ãã®ç¹ã«ããŒããããéšåã®èšç®èœåã®éåžžã®å¢å ãããç¹æ®ãªãœãããŠã§ã¢ããã³ããŒããŠã§ã¢ã·ã¹ãã ã®åœ¢ã§ã®è€éãªãœãªã¥ãŒã·ã§ã³ãŸã§ã ãããã®ãœãªã¥ãŒã·ã§ã³ãçµã¿åãããããšã¯ãç®æšã§ããã ãã§ãªããããéããããé«ãããã匷ãããããã解決ããããã®ã¢ãããŒãã§ãããã匱ç¹ã®æ€çŽ¢ãšç¹å®ã§ãã å€ãã®å Žåãããã«ããã¯ã¯ãã°ã©ãã£ãã¯æ å ±ã®åŠçãæå·åãã¢ãŒã«ã€ãã倧éã®æ å ±ãåŠçããã³/ãŸãã¯è¿ã倧éã®ããŒã¿ããŒã¹ã¯ãšãªã«é¢é£ãããªãœãŒã¹éçŽåã®ã¿ã¹ã¯ã§ãã
Gearmanã¯ãDanga Interactiveã®ã¹ã¿ããã«ãã£ãŠéçºããããªãŒãã³ãœãŒã¹ãããžã§ã¯ãã§ãã ãã®ååã¯ããããŒãžã£ãŒãšããèšèã®ã¢ãã°ã©ã ã«éããããã®ã¢ããªã±ãŒã·ã§ã³ã®æ©èœïŒããŸããŸãªã¿ã¹ã¯ã®ç®¡çãå¶åŸ¡ãé åžïŒã®ç°¡åãªèª¬æã¯ãããŒãžã£ãŒã®åœ¹ââå²ã§ãã åœåãGearmanã¯Perlã§å®è£ ãããŸããããæéã®çµéãšãšãã«ã libeventã©ã€ãã©ãªã䜿çšããŠCã§æžãçŽãããŸãããlibeventã©ã€ãã©ãªã®ååšã¯ãäž»èŠéšåïŒã¿ã¹ã¯ãµãŒããŒïŒã®æ©èœã«å¿ èŠã§ãã * nixã·ã¹ãã ãžã®ã€ã³ã¹ããŒã«ã¯å€§ããåé¡ã§ã¯ãªããã»ãšãã©ã®Linuxãã£ã¹ããªãã¥ãŒã·ã§ã³ã§ã¯ãgearmanããã±ãŒãžãæšæºãªããžããªã«å«ãŸããŠããŸãã
èè ããã®èšäºã®ã¿ã€ãã«ã§ããã¬ãŒã ã¯ãŒã¯ããšããèšèã䜿çšããçç±ã説æãã䟡å€ããããŸãã å®éãã®ã¢ãã³ã®äœ¿çšã¯æ¯èŒçç°¡åã§ãããåæã«ã¿ã¹ã¯ã®å¹æçãªãœãªã¥ãŒã·ã§ã³ã«ã¯éåžžã«æ·±å»ãªéçºãå¿ èŠã§ã-ããã¯æ¢æã®ãœãªã¥ãŒã·ã§ã³ã§ã¯ãããŸããã
äœæ¥ã§Gearmanã䜿çšããã¢ããªã±ãŒã·ã§ã³ã¯ã3ã€ã®äž»èŠã³ã³ããŒãã³ãã§åäœããŸãã
- ã¿ã¹ã¯ãµãŒããŒ-Gearmanã®äžå¿éšåã§ããããã§ã¯ãã¿ã¹ã¯ãšçµæã¯ã¯ã©ã€ã¢ã³ããšããã©ãŒããŒããéãããããããã¿ã¹ã¯ãšçµæã¯ããã©ãŒããŒãšã¯ã©ã€ã¢ã³ãã«ããããéä¿¡ãããŸãã
- è«è² æ¥è -æ©èœã®å®è£ ãå¿ èŠãªäž»èŠéšåã§ãã è«è² æ¥è ã¯ãµãŒããŒããã®ã¿ã¹ã¯ãåãå ¥ããŠå®äºããããšããŸãã
- ã¯ã©ã€ã¢ã³ããåå¥ã«å®è£ ãããã¿ã¹ã¯ãäœæããŠãµãŒããŒã«éä¿¡ããå Žåã«ãã£ãŠã¯ïŒåŸã§è©³ãã説æããŸãïŒçµæãååŸããŸãã
ã¯ã©ã€ã¢ã³ããšè«è² æ¥è ã¯Gearman APIã䜿çšããŠãå¿ èŠãªæ©èœãåŒã³åºããŠå®è£ ããŸãã äžèšã®ã¢ãŒããã¯ãã£ã瀺ãå³ã¯ãã¡ã€ã³ãããžã§ã¯ããµã€ãã«è¡šç€ºãããŸãã
![ç»å](http://gearman.org/images/gearman_stack.png)
ãã®ãããªã·ã¹ãã ã®æäœã®å€å žçãªäŸãèããŠã¿ãŸããã-ãŠãŒã¶ãŒãåçããµã€ãã«ã¢ããããŒãããããããã¹ãŠã®åéã«èŠããããšæã£ãŠããŸãã ãµã€ãå šäœã§äœ¿çšããã«ã¯ããã®åçã®ããŸããŸãªãµã€ãºããã°ããæºåããå¿ èŠããããŸãã ã¯ããããæç¹ãŸã§ã¯ãã°ã©ãã£ãã¯ã¹ã®çæã«é¢ãããã¹ãŠã®äœæ¥ãã·ã¹ãã ã®ã¡ã€ã³ã³ãŒãã§å®è¡ã§ããŸãããããšãhabraeffectãçºçããã·ã¹ãã å šäœãæµå ¥ããŸãã 次ã«ãGearmanã䜿çšããŠãã®åé¡ã解決ããæ¹æ³ãèŠãŠãããŸããåçãåãåã£ãããåçã«é¢ããå¿ èŠãªæ å ±ãå«ãGearmanãµãŒããŒã®ã¿ã¹ã¯ãäœæããŸãïŒååãšããŠãåçèªäœãã¿ã¹ã¯ã«å«ããããšãã§ããŸãããç§ã«ãšã£ãŠã¯ãããã¯å©çããªããããè¯ãã§ãããã¢ãã¬ã¹ã䜿çšããŠïŒå®è¡ããããã«éä¿¡ããŸãã ã¿ã¹ã¯ãµãŒããŒã¯ãç¡æã®ãšã°ãŒãã¥ãŒã¿ãŒïŒã©ãŠã³ãããã³ïŒãéžæãïŒããããæ¢ã«æšæž¬ãããŠããããã«ãè€æ°ã®ãšã°ãŒãã¥ãŒã¿ãŒãååšããå¯èœæ§ããããŸãïŒãå®äºãããã¿ã¹ã¯ãéä¿¡ããŸãã è«è² æ¥è ã¯å¿ èŠãªãã¹ãŠã®æ å ±ãåãåããå¿ èŠã«å¿ããŠåŠçããæ£åžžã«å®äºããã¿ã¹ã¯ãããã³ã¿ã¹ã¯ãåæãããŠããå Žåã¯äœæ¥ã®çµæã«é¢ããåçãéä¿¡ããŸãã ã¯ãã2çš®é¡ã®ã¿ã¹ã¯ããããŸããã¯ã©ã€ã¢ã³ããã¿ã¹ã¯ã®å®äºãåŸ æ©ããŠããå Žåã¯åæã§ãããããã«å¿ããŠçµæãçºçããŸããã¯ã©ã€ã¢ã³ããã¿ã¹ã¯ã®ã€ãã·ãšãŒã¿ãŒãšããŠã®ã¿åäœããå Žåã¯éåæã§ãã ããã§ãgearmanã¢ããªã±ãŒã·ã§ã³ã®åéšåéã®éä¿¡ãããã³ã«ãTCP / IPã§ãããšããäºå®ãè¿œå ããŸããã€ãŸããåéšåïŒãµãŒããŒãã¯ã©ã€ã¢ã³ãããšã°ãŒãã¥ãŒã¿ãŒïŒã¯å¥ã ã®ãã·ã³äžã«ããããšãç解ãããŸãã è€æ°ã®ãµãŒããŒãšã¯ã©ã€ã¢ã³ããååšããå ŽåããããŸãã ã¯ã©ã€ã¢ã³ããšãšã°ãŒãã¥ãŒã¿ã®å®è£ ã¯äºãã«ç¬ç«ããŠããŸãïŒgearmanãæäœããããã®APIãå®è£ ãããŠããå©çšå¯èœãªèšèªã«ã¯ãperlãphpãpythonãjavaãCãMySQL UDFãªã©ããããŸãïŒã ãã®ãããžã§ã¯ãã¯æŽ»çºã«éçºãããŠããŸã-ãã°ä¿®æ£ãšæ¹åã䌎ãæ°ããããŒãžã§ã³ãæ¯æãªãªãŒã¹ãããŸãã åºåã§ã¯ãéçºè ã®æ³ååãšçµéšã«ãã£ãŠã®ã¿è§£æ±ºãããã¿ã¹ã¯ã®ç¯å²ãå¶éããããããªããã©è²ã®ç»åãåŸãããŸãã ããšãã°ãæ£åžžã«è§£æ±ºãããã®ã¢ãã³ã䜿çšããŠè§£æ±ºãããããã€ãã®äžè¬çãªã¿ã¹ã¯ïŒ
- åçãåŠçããäžèšã®ã¿ã¹ã¯ãããŸããŸãªãµã€ãºã®çæã®ã¿ã«éå®ãããªã
- ã¯ã©ã€ã¢ã³ãåŽã§ã¯ã©ãŠã³ãšé 延ã䜿çšããªãããã£ãã·ã¥å ã®ããŒã¿ã®éåæç¡å¹å/æŽæ°
- 倧éã®ããŒã¿ãã¢ãŒã«ã€ããã
- executoråŽã§æå·åã䜿çšããŠã圢åŒïŒkey => valueïŒã®ããŒã¿ãæäœããŸã
ä»ãããã€ãã®å®çšçãªæ å ±ã gearmanã®äž»ãªä»äºã®ãªããžã§ã¯ãã¯ãã¿ã¹ã¯ïŒã¿ã€ãïŒåæãéåæïŒãã¿ã¹ã¯ã®ååïŒãµã€ãºå€æŽãªã©ïŒãããã³ãã©ã¡ãŒã¿ãŒïŒã§æ§æãããã¿ã¹ã¯ã§ãã åã¿ã¹ã¯ã¯ãååãšãã©ã¡ãŒã¿ãŒã®ãã¢ã§èå¥ãããŸãã ã€ãŸããåããã©ã¡ãŒã¿ãŒãæã€2ã€ã®åäžã®ã¿ã¹ã¯ããµãŒããŒã«å°çããå Žåãæåã®ã¿ã¹ã¯ã®ã¿ãå®äºãã2çªç®ã®ãµãŒããŒã¯ã¹ããŒããã¯ãããŸãã ãã®ãã¥ã¢ã³ã¹ã«ãããå€ãã®èå³æ·±ãããšãèµ·ãããŸããåžžã«èŠããŠãã䟡å€ããããŸããç¹å®ã®ã¿ã¹ã¯ãå®äºããå¿ èŠããããŸããïŒ -ãã©ã¡ãŒã¿ã«äžæã®å€ãè¿œå ããŸãã
ãµãŒããŒã¯ããŒã¢ã³ããã»ã¹ã§ãã ãã®ãããªã¢ããªã±ãŒã·ã§ã³ã®ãŠãŒã¶ãŒããŒãã€ã³ã¿ãŒãã§ã€ã¹èšå®æšæºãšãšãã«ãå€ãã®æ§æãã©ã¡ãŒã¿ãŒããããããã€ãã®ç¹å®ã®ãªãã·ã§ã³ããããŸãã ã¿ã¹ã¯ãå®äºããããã®è©Šè¡åæ°ã¯ã-jãã©ã¡ãŒã¿ãŒ--job-retries =ã§æ§æãããŸãã è€æ°ã®ã¹ã¬ããã䜿çšããã«ã¯ã-tãªãã·ã§ã³ã-threads =ãååšããŸãã ãµãŒããŒã«ã¯ã¿ã¹ã¯ãã¥ãŒãäœããã®çš®é¡ã®ã¹ãã¬ãŒãžã«ä¿åããæ©èœããããããåèµ·åæã«ããŒã¿ã倱ãããšãªãããã»ã¹å šäœã埩å ã§ããŸãã ãªããžããªã¯ãMySQL / drizzleãmemcachedãPostgreSQLããŸãã¯sqlliteã§ãã èå³æ·±ãã®ã¯ãéä¿¡ããã»ã¹ã¯ã©ã€ã¢ã³ã->ã¿ã¹ã¯ãµãŒããŒã§ãµãŒãããŒãã£ã®ãããã³ã«ã䜿çšãããªãã·ã§ã³ã§ãã çŸåšå®è£ ãããŠãããã®ãããªãããã³ã«ã¯HTTPã®ã¿ã§ãã ãã®ãªãã·ã§ã³ã䜿çšãããšãHTTPèŠæ±ãä»ããŠç¹å®ã®ããŒãã§ã¿ã¹ã¯ãåä¿¡ããããã«GearmanãµãŒããŒãæ§æã§ããŸãïŒèŠæ±ãããuriã¯ã¿ã¹ã¯åãhttpæ¬äœããã¯ãŒã¯ããŒããhttpããããŒã«ããããã¿ã¹ã¯ã¿ã€ãã«å€æãããŸãïŒãã€ãŸããã¯ã©ã€ã¢ã³ãå®è£ ã¯åçŽãªHTTPã¯ã©ã€ã¢ã³ããåŒã³åºãå ã ããã«ãããã¿ã¹ã¯ã®ã¿ã€ã/ãµã€ãºã«å¶éã課ãããããšã¯ãããŸããã ã®ã¢ãã³ã§ã® HTTPã®äœ¿çšã«ã€ããŠã¯ã ãã¡ããã芧ãã ãã ã HTTPãããã³ã«ãšGearmanã䜿çšãããšãå¹ççã«ãã©ã³ã¹ã®åããRESTãµãŒãã¹ãç°¡åã«æ§ç¯ã§ããŸãã APIé¢æ°ãåŒã³åºãããã®ã©ãããŒã¯ã»ãšãã©ã®ç°å¢åãã«äœæãããŠãããããã»ãŒãã¹ãŠã®ããã°ã©ãã³ã°èšèªããgearmanã®ã¿ã¹ã¯ãäœæã§ããŸãã
å®è¡éšåã¯ããããããããããšã°ãŒãã¥ãŒã¿ãŒã«ãããŸãã ããã§ã¯ãæšæºã®phpãpythonãjavaããmysqlã®ãŠãŒã¶ãŒå®çŸ©é¢æ°ã«è³ããŸã§ãå®è£ ããŒã«ã®éžæãéåžžã«åºç¯å²ã§ãã å¯äžã®æ¡ä»¶ã¯ãgearmanã©ã€ãã©ãªã®ãµããŒããå©çšå¯èœã§ããããšã§ããããã«ã¯ãã¢ãžã¥ãŒã«ã®è¿œå ã³ã³ãã€ã«ãå¿ èŠã«ãªãå ŽåããããŸãã ãããããšã°ãŒãã¥ãŒã¿ïŒã¯ãŒã«ãŒïŒã¯ãå®è¡å¯èœãªãã¹ãŠã®ã¿ã¹ã¯ãç»é²ããåŸãã¡ã¢ãªå ã§ãµãŒããŒããã®ã¿ã¹ã¯ã®å°çãåŸ æ©ããããã¯ã°ã©ãŠã³ãããã»ã¹ã§ãã ç¹å®ã®ãã³ããŒãéä¿¡ãããµãŒããŒã®æ°ã«å¶éã¯ãããŸããã
æ¬ ç¹ã«ã€ããŠè©±ããŸãããããããã®ããã€ããããããããã¯ããŸããŸãªçšåºŠã®é倧床ã§ãã executorã¯é·æéæå¹ãªããã»ã¹ã§ããããããã®æ©èœã®å€æŽã¯executorèªäœãåèµ·åããããã»ã¹ãæå³ãããã®executorãå®è¡ã§ããã¿ã¹ã¯ã®è¿œå /åé€ã«ãåãããšãåœãŠã¯ãŸããŸãã ã€ãŸããæ°ããæ©èœãè¿œå ããããæ¢åã®æ©èœãå€æŽãããããå¿ èŠãããå Žåããã®ã¿ã¹ã¯ã«é¢é£ä»ããããŠããå®è¡è ã®ãã¹ãŠã®ããã»ã¹ãåèµ·åããå¿ èŠããããŸãã å®è¡è ãç°ãªããµãŒããŒã«ç°ãªãæ°ã§æ£åšããŠããå Žåããã®ããã»ã¹ã¯ç°¡åã§ã¯ãããŸããã ãŸãããã¹ãŠã®èšèªãå¹ççãªããŒã¢ã³ããã»ã¹ãèšè¿°ããããã«èšèšãããŠããããã§ã¯ãããŸããã
ãµãŒããŒã«ããã¿ã¹ã¯ã®åæ£ã¯ãåäžã®ã¢ã«ãŽãªãºã ïŒã©ãŠã³ãããã³ïŒã«åŸã£ãŠã®ã¿è¡ãããŸãã ã¯ãã2ã€ã®åªå 床ã¬ãã«ïŒé«ããã³äœïŒã®ã¿ã¹ã¯ããããŸãã ãã ããã¿ã¹ã¯ã®å®è¡ãããæ£ç¢ºã«å¶åŸ¡ããããšã¯ã§ããŸããã ããã«ãã©ã®ãšã¯ãŒãã¥ãŒã¿ãŒãã¿ã¹ã¯ãå®è¡ããããæ£ç¢ºã«ç¥ãããšã¯äžå¯èœã§ãããã©ã®ããŒãã«éä¿¡ããã¹ãããçŽæ¥ç€ºãããšãäžå¯èœã§ããããããã°ããã»ã¹ãéåžžã«è€éã«ããŸãã
äžèšã®æ¬ ç¹ãããäž»ãªãã®ã¯æ¬¡ã®ãšããã§ã-å®è£ ãããã·ã¹ãã ã管çããããã®å¥å šãªæ段ã®æ¬ åŠã ãã¹ãŠãæåã§è¡ãå¿ èŠããããã®ã¢ãã³ã¢ããªã±ãŒã·ã§ã³ã®æ§é ã«çæããŠãã ããã
ãã¡ããã説æãããŠãããã¹ãŠã®åé¡ã«ã¯è§£æ±ºçããããŸãããã®å®è£ ã«ã€ããŠã¯ã次ã®èšäºã§èª¬æããŸãã
Gearmanã®æ å ±ãœãŒã¹ããã®ä»ã®èå³æ·±ãæ å ±ãžã®ãªã³ã¯ãå°ããããŸãã
- å®éã®ã¡ã€ã³ãµã€ãïŒ gearman.org
- ã©ã³ãããããããžã§ã¯ãããŒãžïŒ launchpad.net/gearmand
- Googleã°ã«ãŒãã§ã®ãã£ã¹ã«ãã·ã§ã³ïŒ groups.google.com/group/gearman/topics
- PHPã§ã®äœ¿çšäŸïŒ http : //highload.com.ua/
- GearmanãµãŒããŒã®èµ·å ïŒ gearmanhq.com