æšå¹Ž9æããªã¢ã«ã¿ã€ã ã¡ãã»ãŒãžã³ã°çšã®ãªãŒãã³ãœãŒã¹ãµãŒããŒã§ããCentrifugeã«é¢ããæåŸã®èšäºã
å
¬éãããŸãã ã çŸåšããã®æçš¿ãå
¬éãããŠããããã®ãªã¹ãã«ãGoããããŸãã ãããŠãæ£åœãªçç±ã§ãã¿ã€ãã«ãããã§ã«ç解ã§ããããã«ãCentrifugeã¯PythonããGoã«ç§»æ€ãããŸãã-ããã
Centrifugoã®ç»å Žã§ãã 移è¡ã®çç±ãGoã®é·æãšçæãããã³ä»¥åã®åºç以éãããžã§ã¯ããã©ã®ããã«é²åãããã«ã€ããŠ-ç«ã®äžã§èªãã§ãã ããã
ãã¹ãïŒãããŠãæããã«ãåŸã®äººçïŒã§ããµãŒããŒãäžè¬çã«CentrifugeãšåŒã³ãŸããç°ãªãèšèªã§ã®å®è£
ã®éãã匷調ããå¿
èŠãããå Žåã¯ãè±èªç-PythonããŒãžã§ã³ã®CentrifugeãCentrifugo-GoããŒãžã§ã³ã䜿çšããŸãã
é å¿åé¢æ©ã«ã€ããŠç°¡åã«èª¬æããŸãã ããã¯ãã¢ããªã±ãŒã·ã§ã³ã®ããã¯ãšã³ãã®é£ã§å®è¡ããããµãŒããŒã§ãã ã¢ããªã±ãŒã·ã§ã³ãŠãŒã¶ãŒã¯ãWebsocketãããã³ã«ãŸãã¯SockJS polyphileã©ã€ãã©ãªã䜿çšããŠCentrifugeã«æ¥ç¶ããŸãã æ¥ç¶ããŠãã°ã€ã³ãããšã圌ãã¯èå³ã®ãããã£ã³ãã«ã賌èªããŸãã ã¢ããªã±ãŒã·ã§ã³ããã¯ãšã³ããæ°ããã€ãã³ãã«ã€ããŠåŠç¿ãããšããã«ãïŒRedisã®ãã¥ãŒãŸãã¯HTTP APIã䜿çšããŠïŒCentrifugeã®ç®çã®ãã£ãã«ã«ã€ãã³ããéä¿¡ããæ¥ç¶ããããã¹ãŠã®é¢å¿ã®ãããŠãŒã¶ãŒã«ã¡ãã»ãŒãžãéä¿¡ããŸãã
ãããã£ãŠãCentrifugeã¯ãå€ãã®Webã¢ããªã±ãŒã·ã§ã³ã®ããã¯ãšã³ããèšè¿°ãããŠããå€ãã®ææ°ã®äžè¬çãªãã¬ãŒã ã¯ãŒã¯ïŒDjangoãRuby on RailsãLaravelãªã©ïŒã®åé¡ã解決ããŸãã ããã¯ãšã³ããéåæã§åäœã§ããããªã¯ãšã¹ããåŠçããã¯ãŒã«ãŒã®ããŒã«ãå¶éãããŠããå Žåãã¯ã©ã€ã¢ã³ãããã®æ°žç¶çãªæ¥ç¶ã®åŠçã«ããããã®ããŒã«ãããã«äœ¿ãæããããŸãã ãã¡ãããéçºã«å¿
èŠãªäœæ¥éãæžããããã ãã«ãCentrifugeã䜿çšããŠéåæããã¯ãšã³ããšãã¢ã«ããããšã劚ãããã®ã¯äœããããŸããã
é å¿åé¢æ©ã®ãããªå€ãã®è§£æ±ºçãããã以åã®èšäºã§ãããã®ããã€ããèšåããŸããã äž»ãªç¹åŸŽã¯æ¬¡ã®ãšããã§ãã
- ã¢ããªã±ãŒã·ã§ã³ããã¯ãšã³ããèšè¿°ãããŠããèšèªã®ç¬ç«ã
- SockJSã®äœ¿çšïŒäœããã®çç±ã§ãã©ãŠã¶ãŒãWebsocketæ¥ç¶ã確ç«ã§ããããã©ãŒã«ããã¯ãã©ã³ã¹ããŒãïŒeventsourceãxhr-streamingãxhr-pollingãªã©ïŒãä»ããŠæ°ããã¡ãã»ãŒãžãåä¿¡ã§ããªããã¹ãŠã®ãŠãŒã¶ãŒãèš±å¯ããŸãã
- 眲åä»ãããŒã¯ã³ïŒHMAC SHA-256ïŒã®äœ¿çšã«åºã¥ããŠãŒã¶ãŒèªèšŒã
- å€§æ ¹ã«é¢é£ããããã€ãã®ããã»ã¹ãå®è¡ããæ©èœã
- ãã£ãã«å
ã®çŸåšã®ãŠãŒã¶ãŒã«é¢ããæ
å ±ããã£ãã«å
ã®ã¡ãã»ãŒãžã®å±¥æŽããŠãŒã¶ãŒã«ãããã£ãã«ãžã®ãµãã¹ã¯ã©ã€ããŸãã¯ãã£ãã«ããã®ãµãã¹ã¯ã©ã€ã解é€ã«é¢ããã¡ãã»ãŒãžã ã»ãšãã©ã®PUB / SUBãœãªã¥ãŒã·ã§ã³ã¯ãæ°ããã¡ãã»ãŒãžã®ã¿ãéä¿¡ã§ããŸãã
- å±éã®ããã®å®å
šãªæºåïŒrpmãDockerfileãNginx config; ãŸããçŸåšããã¹ãŠã®ãã©ãããã©ãŒã çšã®ãã€ããªãã¡ã€ã«ã®åœ¢åŒã§ãªãªãŒã¹ãããŠããŸãã
以åã¯ãé å¿åé¢æ©ã®äž»ãªç®çã¯Webã¢ããªã±ãŒã·ã§ã³ã§ã®ã€ã³ã¹ã¿ã³ãã¡ãã»ãŒãžã³ã°ã§ããããšã匷調ããŠããŸããã ãããããwebããšããæ¥é èŸã¯ããããžã§ã¯ãã®å¯èœæ§ãå°ãé ããŠããŸããWebsocketãããã³ã«ã䜿çšããŠãã¢ãã€ã«ã¢ããªã±ãŒã·ã§ã³ããCentrifugeã«æ¥ç¶ã§ããŸãã ããã¯ããªãŒãã³ãœãŒã¹ã³ãã¥ããã£ã®äžéšã®ãŠãŒã¶ãŒã«ãã£ãŠç¢ºèªãããŠããŸãã ããããæ®å¿µãªãããã¢ãã€ã«ããã€ã¹ãã€ãŸãJavaãŸãã¯Objective-C / Swiftã®ã¯ã©ã€ã¢ã³ãã¯ãããŸããã Goãžã®ç§»è¡ã¯ãããŸããŸãªç°å¢ããã®äœ¿çšã«ãµãŒããŒãé©å¿ãããããã®ãã1ã€ã®å°ããªã¹ãããã§ãã ãããããŸãæåã«ã ãªãè¡ãã®ïŒ ããã«ã¯ããã€ãã®çç±ããããŸããã
Goãžã®ç§»è¡ã®å©ç¹
æ§èœ
GoãCPythonããã倧å¹
ã«é«éã§ããããšã¯ç§å¯ã§ã¯ãããŸããã ãããŠãCentrifuge on Goã¯ãã£ãšé«éã«ãªããŸããã äŸãæããŸãã é å¿åé¢æ©ã䜿çšãããšã1ã€ã®HTTPãªã¯ãšã¹ãã§å€ãã®ã³ãã³ããAPIã«éä¿¡ã§ããŸãã ãã£ã³ãã«ã«å
¬éããå¿
èŠãããæ°ããæçš¿ã1000件å«ããªã¯ãšã¹ããéä¿¡ããŸããã çµæãèŠãŠã¿ãŸãããã
Centrifuge: 2.0 , Centrifuge: 17.2 , 100 Centrifugo: 30 , (x15) Centrifugo: 350 , 100 (x49)
ããã§ãã1000ã¡ãã»ãŒãžã¯éæšæºçãªç¶æ³ã§ããããã§ã¯ã1ã€ã®æ°ããã¡ãã»ãŒãžããã£ãã«ã«éä¿¡ããçµæã瀺ããŠããŸãã
Centrifuge: 3 , 0 Centrifuge: 160 1000 Centrifugo: 200 , 0 (x15) Centrifugo: 2.0 1000 (x80)
æ°å€ã¯Macbook Air 2011ã§ååŸããããã®ã§ããã¯ã©ã€ã¢ã³ãæ¥ç¶ã¯åããã·ã³ãã人çºçã«äœæããããã®ã§ãããåçãå®äºããŠããã¡ãã»ãŒãžãæ¢ã«ã¯ã©ã€ã¢ã³ãã«å°çããããã§ã¯ãããŸããã ãšããã§ãã¡ãã»ãŒãžã®æçš¿ã«äœ¿çšããã³ãŒãã¯æ¬¡ã®ãšããã§ãã
from cent.core import generate_api_sign import requests import json command = { "method": "publish", "params": {"channel": "test", "data": {"json": True}} } n = 1000 url = "http://localhost:8000/api/development" commands = [] for i in range(n): commands.append(command) encoded_data = json.dumps(commands) sign = generate_api_sign("secret", "development", encoded_data) r = requests.post(url, data={"sign": sign, "data": encoded_data})
ãã¡ããããã¹ãŠã®ãµãŒããŒã³ã³ããŒãã³ãã§ãã®ãããªããã©ãŒãã³ã¹ã®åäžãèŠãããããã§ã¯ãããŸãããã絶察ã«ãã¹ãŠãé«éã«ãªã£ãŠããŸãã Centrifugeãªããžããªã«ã¯ã1ã€ã®ãã£ãã«ã«ãµãã¹ã¯ã©ã€ããããå€æ°ã®æ¥ç¶ãäœæãããã³ãããŒã¯ã¹ã¯ãªããããããŸãã 賌èªãããšãã¡ãã»ãŒãžããã£ãã«ã«éä¿¡ããããã¹ãŠã®é¡§å®¢ãã¡ãã»ãŒãžãåä¿¡ãããŸã§æéãèšç®ãããŸãã ãã®æéã®äžéã200ããªç§ã§ãšããšããµãŒããŒããã®ãããªãã£ãã«/ã¯ã©ã€ã¢ã³ãã®åæ£ã§æ£åžžã«åŠçã§ããåææ¥ç¶ã®æ°ãçŽ4åã«ãªããŸããïŒç§ã®ã©ãããããã§ã¯4000ãã14000ïŒã ç¹°ãè¿ããŸããããã¹ãŠã®ã¯ã©ã€ã¢ã³ãã¯åããã·ã³ããåãã¹ã¯ãªããå
ã§äœæãããããããã®è©äŸ¡ã«åããçããå¯èœæ§ããããŸãã
ãã«ãã³ã¢
Goã§ã¯ãè€æ°ã®ã³ã¢ãåæã«äœ¿çšããåäžã®ããã»ã¹ãå®è¡ã§ããŸãã Tornadoã®å Žåãããã€ãã®Centrifugeããã»ã¹ãå®è¡ãããããã®åã§Nginxããã©ã³ãµãŒãšããŠäœ¿çšããå¿
èŠããããŸããã ããã¯æ©èœããŸãããGoã䜿çšãããšã¯ããã«ç°¡åã«ãªããŸãããã·ã³ã®å©çšå¯èœãªé»åã掻çšããããã°ã©ã ãäœæããŸãã ããããéæ³ã¯ãããŸãããããã°ã©ã ã³ãŒãã¯ãGoã©ã³ã¿ã€ã ãããã»ããµã³ã¢éã§äœæ¥ãåæ£ã§ããããã«ããå¿
èŠããããŸãïŒ
https://golang.org/doc/faq#Why_GOMAXPROCS ïŒã
é
åž
Goã®ã¢ããªã±ãŒã·ã§ã³ã¯ãGoã®åºåã«ããããã°ã©ã ã«éçã«ãªã³ã¯ããã1ã€ã®å®è¡å¯èœãã¡ã€ã«ãååŸã§ãããããé
åžãç°¡åã§ãã ããŠã³ããŒãããŠå®è¡-åäœããŸãïŒ äŸåé¢ä¿ããªããPythonã®virtualenvãwarãã·ã³ã«ãã©ãã°ããŸãã ãã¡ãããMail.Ru Groupã§ã¯ããã¡ã€ã«ãæŠéã«ã³ããŒããã®ã§ã¯ãªããã¢ããªã±ãŒã·ã§ã³ããšã«rpmãäœæããŸãã ããããrpmã®äœæãã¯ããã«ééçã§ãã·ã³ãã«ã§é«éã§ãã äžèšã«å ããŠãGoã§ã¯ããŸããŸãªãã©ãããã©ãŒã ã®ã³ãŒããã¯ãã¹ã³ã³ãã€ã«ã§ããŸããããã¯é©ãã»ã©äŸ¿å©ãªæ©èœã§ãã ã»ãšãã©ã®å Žåã«å¿
èŠãªã®ã¯ããã€ããªãã¡ã€ã«ãå¿
èŠãªãã©ãããã©ãŒã ãšã¢ãŒããã¯ãã£ã瀺ãããšã§ãã
èšèªã«çµã¿èŸŒãŸãã䞊è¡æ§ã¢ãã«
ããã©ã«ãã®çµã¿èŸŒã¿Go䞊è¡æ§èšèªã«ãããå©çšå¯èœãªãã¹ãŠã®ã©ã€ãã©ãªãšèšèªããŒã«ã䜿çšããŠéããããã³ã°ã³ãŒããèšè¿°ã§ããŸããTornadoesã®å Žåã®ããã«ãéããããã³ã°ã©ã€ãã©ãªãæ¢ãå¿
èŠã¯ãããŸããã ããšãã°ãé çã®çš®ã®1ã€ã¯ãå€§æ ¹ã®éåæã¯ã©ã€ã¢ã³ãã§ããã å
¬åŒã®redis-pyãããã«å¿ããããšãã§ããŸãã ãã«ããŒãã«å€ããå°ãªããçããŠããŠããã«ããŒã
ãªãã£ã¹ãš
ãã¬ãã£ã¹ã® 2ã€ãèŠã€ãããŸããã åœåãtornado-redisã䜿çšããäºå®ã§ãããã
ãã°ãååšãããããç§ã«ã¯é©ããŠããŸããã§ããã ãã®çµæãPythonããŒãžã§ã³ã§ã¯toredisã䜿çšãããŸãã 圌ã¯éåžžã«åªããŠããŸããããããžã®éã¯åä»ã§ããã
Goã§ã¯ããããã¯ãŒã¯ã³ãŒã«ãšã·ã¹ãã ã³ãŒã«ã䜿çšããéåæåäœãèšèªã®åºç€ã§ãã ã©ã³ã¿ã€ã ã¹ã±ãžã¥ãŒã©ã¯ãåŒã³åºãããããã¯ãããŽã«ãŒãã³éããŸãã¯ãŽã«ãŒãã³ãæ©èœããããã«å²ãåœãŠãããç¹å®ã®æ倧æéåŸã«ã³ã³ããã¹ããåãæ¿ããŸãã äžè¬ã«ãããã¯ãã¹ãŠãGeventãšTornadoã§ããçšåºŠæ©èœããããã«èŠããŸãããç®±ããåºããŠããã«äœ¿çšã§ããããšã¯å€§ããªå¹žçŠã§ãã
éçåä»ã
çŸæç¹ã§ã¯ãéçãªåä»ããåçãªåä»ããããåªããŠãããšèšã£ãŠããããã§ã¯ãªãããšã«æ³šæããŠãã ããã ãããïŒ éçåä»ãã®ãããã§ãã³ãŒãã®å€æŽãã¯ããã«ç°¡åã«ãªããŸããã 確ãã«ãããã¯Pythonã®åŸã®æãé¡èãªçºèŠã®1ã€ã§ããããªãã¡ã¯ã¿ãªã³ã°ã¯å€§å¹
ã«ç°¡çŽ åãããŸããã ã³ãŒããå€æŽãå ããåŸã«ã³ã³ãã€ã«ãããå Žåãæ£ããåäœãããšããè¿œå ã®ä¿èšŒããããŸãã
ãªã¹ããããé
ç®ã¯ã移è¡ãåççã§ããããšã確èªããã®ã«ååã§ããããã«æããŸãã ããã»ã¹ã§èŠã€ãã£ãä»ã®ãã©ã¹ããããŸããã Goã³ãŒãã®ãã¹ãã¯ç°¡åã§ããããŒãžã§ã³1.5ã¯ãJavaãŸãã¯Objective-Cãã䜿çšããå
±æã©ã€ãã©ãªãäœæããæ¹æ³ãæäŸããŸããçµã¿èŸŒã¿ãŠãŒãã£ãªãã£ã䜿çšãããšããŽã«ãŒãã³ãªãŒã¯ã远跡ã§ããŸãã
Go移è¡ã®çæ
ãã¡ããããã®ãããªç§»è¡ã®æ¬ ç¹ãè©äŸ¡ããå¿
èŠããããŸããã ããšãã°ãPythonããŒãžã§ã³ã§äœããããïŒå®å
šã«äºææ§ã®ããGoããŒãžã§ã³ãäœæãããªããžããªå
ã®ã³ãŒãã眮ãæããããå¥ã®ãããžã§ã¯ãã«ããŸããïŒ ãããžã§ã¯ããžã®ã€ã³ã¿ãŒããããªã³ã¯ããã¹ãŠåãããã«çœ®ãæããã®ã¯é
åçã§ãããããã®ååã«ã¯å€§ããªæå³ããããŸããã åžžèãããäœãå¥ã«è¡ãå¿
èŠããããã瀺åãããŸããã æåŸã«ãCentrifugeãšCentrifugoããããŸãã ãããŠãç§ã¯ãããéåžžã«è¯ããšã¯èšããŸãããããã¯çŽããããã§ãã
2çªç®ã®ãã€ã³ãïŒãªãŒãã³ãœãŒã¹ãœãªã¥ãŒã·ã§ã³ã䜿çšããéçºè
ãããã®ãªãŒãã³ãœãŒã¹ã¢ããªã±ãŒã·ã§ã³ãèšè¿°ãããŠããããã°ã©ãã³ã°èšèªãšåãèšèªã䜿çšããŠããå ŽåããããèŠã€ããã®ã¯ã¯ããã«ç°¡åã§ãã ããã§ãã誰ãèšã£ãŠããPythonã³ãã¥ããã£ã¯Goã³ãã¥ããã£ããã倧ããã§ãã ãããç ç²ã«ããªããã°ãªããŸããã§ããã
ããã«ããã®èšèªã¯ç§ã«ãšã£ãŠæ°ãããã®ãªã®ã§ãå€ãã¬ãŒãã«åã³è¶³ãèžã¿å
¥ããããæ°ããã¬ãŒããèŠã€ããæ©äŒããããŸããïŒä»ã§ãããã§ãïŒã ããããããã°ã©ããŒãæ¢ããããšã¯ãããŸãããïŒ ããã©ãããïŒ
Goèšèªèªäœã«ã¯æ¬ ç¹ããããŸãã éåžžäžæºãèšãäž»ãªãã®ãèŠãŠã¿ãŸãããïŒ
- ãžã§ããªãã¯å»è¬åã®äžè¶³ã ã¯ããããã§ã¯ãããŸããã ãã®çµæããªããžããªã«2ã€ã®ããŒã¿æ§é ããããŸããçè«çã«ã¯ãGoããžã§ããªãã¯ããµããŒãããŠããå Žåãä»ã®ãããžã§ã¯ãã§åå©çšã§ããŸãïŒå¥ã®ãªããžããªããæ¢è£œã®ãã®ãååŸããããšãã§ããŸãïŒã ããã¯ãæååã§ã®ã¿æ©èœããã¡ã¢ãªå
fifoãã¥ãŒããã³åªå
床ããŒããã¥ãŒã§ãã ãããããžã§ããªãã¯ãããã§ããã-ããã¯è¯ãã§ãããã ãããåæã«ããããæ¬åœã«ç§ãæ©ãŸããšã¯èšããŸããã ç§ãç解ããŠããããã«ãGoèšèªã®èè
ã¯ãã®è³ªåãæªè§£æ±ºã ãšèããŠããŸãã ããããå°æ¥çã«ã¯ããžã§ããªãã¯ãèšèªã«è¿œå ããæ£ããæ¹æ³ãèŠã€ããããšãã§ããã§ãããã
- ãšã©ãŒåŠçã Goã«ã¯äŸå€ã¯ãããŸãããé¢æ°/ã¡ãœããããæ瀺çã«ãšã©ãŒãè¿ãã®ãç¿æ
£ã§ãã ç§ã®æèŠã§ã¯ãããã¯éåžžã«äž»èŠ³çãªãã€ãã¹ã§ãã ããšãã°ãç§ã¯ããã奜ãã§ãã äœããã®å人çãªçç±ã§ãäŸå€ãåŒãèµ·ãã代ããã«ã³ã«ãŒãã³ã®å®è¡ã®çµæãšããŠãç«å·»ã§ããããŸããã ç§ã«ãšã£ãŠäŸ¿å©ã§ãïŒ ããããPythonã§èšèªã®å®è·µã«é¢ããŠäžèªç¶ã«æããå Žåãããã§ã¯ã§ããŸããã
移è¡
Pythoné å¿åé¢æ©ã¯ã
Tornado ã
Toredis ã
Sockjs-Tornadoãªã©ã®ããã€ãã®äž»èŠãªã©ã€ãã©ãªã«åºã¥ããŠæ§ç¯ãããŠããŸãã ãããã£ãŠãGoã§é¡äŒŒäœãèŠã€ããå¿
èŠããããŸããã Tornadoã®ä»£ããã«ãèšèªèªäœãçŽæ¥äœçšããRedisãš
é£æºããããã«
Redigoã䜿çšãã
ãSockJSãµãŒããŒã®çŽ æŽããã
å®è£
ãèŠã€ãããŸããã äžè¬ã«ãPythonããGoã«ç§»è¡ãããšãã決å®ãäžãããã¡ã€ã³ã³ãŒãããŒã¹ã®æžãçŽãã¯ä»äºã®åŸã®å€æ¹ã«çŽ3ãæããããŸããã 移è¡ããã»ã¹ãããããžã§ã¯ãã®èšå®ãšåå空éãä¿åããããã®ããã¯ãšã³ããåé€ããããšããç§ã®åžæãšäžèŽããããšãããŸããŸèµ·ãããŸããã ãããžã§ã¯ãã«é¢ãã以åã®èšäºãèªãã å Žåãããããç¥ã£ãŠããã§ãããïŒä»¥åã¯ããããã®èšå®ã¯ãããã¯ãšã³ããèšè¿°ããŠäœ¿çšããæ©èœãåããJSONãã¡ã€ã«ãSQLiteãMongoDBããŸãã¯PostgreSQLããéžæããããã«ä¿åãããŠããŸããã SQLiteãããã©ã«ãã®éžæã§ããã ããã¯ããããééãã§ããã èšå®ãå€æŽãããããšã¯ãã£ãã«ãªãã®ã§ãããŒã¿ããŒã¹ãä¿æããããšã¯ãŸã£ããæå³ããããŸããã ãã®çµæãæ§æãã¡ã€ã«ã®ã¿ã䜿çšããããã«ãã¹ãŠãäœãçŽããããããçš®é¡ã®ããã¯ãšã³ããåãé€ããŸããã
æ§æãã¡ã€ã«ãJSONãYAMLããŸãã¯TOML圢åŒã§äœæã§ããããã«ãªããŸãã-ãã°ããã
Viper Goã©ã€ãã©ãªã®ãããã§ãã äžè¬ã«ãViperã¯è€æ°ã®åœ¢åŒããµããŒãããã®ãåŸæã§ããã ãã§ãªãããã®äž»ãªã¿ã¹ã¯ã¯ããŸããŸãªå Žæããé©åãªåªå
床ã§æ§æãªãã·ã§ã³ãåéããããšã§ãã
- ããã©ã«ãå€
- æ§æãã¡ã€ã«ã®å€ã
- ç°å¢å€æ°ããã
- ãªã¢ãŒãæ§æãœãŒã¹ïŒEtcdãConsulïŒããã
- ã³ãã³ãã©ã€ã³åŒæ°ããã
- ã¢ããªã±ãŒã·ã§ã³èªäœã®æäœäžã«æ瀺çã«æå®ãããŸãã
ãããã£ãŠãã©ã€ãã©ãªã«ãããã¢ããªã±ãŒã·ã§ã³ã®éåžžã«æè»ãªæ§æãå¯èœã«ãªããŸãã
çºçãã移è¡ã®é£ããã®ãã¡ã次ã®ç¹ã«æ³šæããŠãã ããã
- ã€ã³ã¿ãŒãã§ã€ã¹{}ããã³ããã[string]ã€ã³ã¿ãŒãã§ã€ã¹{}ãé »ç¹ã«äœ¿çšããŸãã ããã§ã¯ãããŸãããã代ããã«å³å¯ã«åæå®ãããæ§é ã䜿çšããŠãåŸã
ã«åãé€ãããšãã§ããŸããã ãšããã§ãããã¯ããŒãéã®éä¿¡ã®å
éšãããã³ã«ãšã¯ã©ã€ã¢ã³ããšã®éä¿¡ãããã³ã«ãé çªã«ããããã®ã«åœ¹ç«ã¡ãŸããã äœãã©ã®ã¿ã€ãã§éä¿¡ããããããŸãã¯éä¿¡ãããã¹ããã¯æ確ã§ãã
- ç°ãªããŽã«ãŒãã³ããããŒã¿ã«ã¢ã¯ã»ã¹ãããšãã«èµ·ãããã競åç¶æ
ã ãããã®ã»ãšãã©ã¯ãGoã¬ãŒã¹ãã£ãã¯ã¿ã䜿çšããŠæ€åºãããŸãããGoã¬ãŒã¹ãã£ãã¯ã¿ã¯ãåæã®æ段ã«ãã£ãŠããŸããŸãªãŽã«ãŒãã³ããã®ããŒã¿ãžã®ä¿è·ãããŠããªãã¢ã¯ã»ã¹ã®ãã¹ãŠã®ã±ãŒã¹ãã³ã³ãœãŒã«ã«åºåããŸãã Goã®åæããŒã«ããããã£ãã«ãšãåæããã³ã¢ãããã¯ããã±ãŒãžã®ããªããã£ãã䜿çšã§ããŸãã
Klaus Postæ°ãã倧ããªå©ãããããŸãã
ã圌ã¯ããã€ãã®ç«¶åç¶æ
ãçºèŠããã³ãŒãã®ã¹ã¿ã€ã«ã®æ¬ é¥ãææããéåžžã«æçšãªãã«ãªã¯ãšã¹ããè¡ããŸããã
æžãæãäžã«æ¢ã«éããŠããå¥ã®èå³æ·±ãGoæ©èœããããŸãã ããã¯ãJavaããã³Objective-Cã®ãããªãã¯ã©ã€ãã©ãªAPIã§åäœããããã«Go 1.5ã§å°å
¥ãããå
±æã©ã€ãã©ãªãäœæããããã®ãµããŒãã§ãã ãããããããiOSãšAndroidã®ã¯ã©ã€ã¢ã³ããäœæããéã§ããïŒ ç§»è¡äžã«ã
ããã¥ã¡ã³ãã¯å®å
šã«æžãçŽãããŸããã çŸåšããã¹ãŠã®Centrifugoé¢é£ãããžã§ã¯ããå
å«ããã³ãªã³ã¯ããŠããŸãã ããã¯ããµãŒããŒèªäœãjavascriptã¯ã©ã€ã¢ã³ããHTTP APIã¯ã©ã€ã¢ã³ããWebã€ã³ã¿ãŒãã§ã€ã¹ã§ãã ã¡ãªã¿ã«ã以åã¯Tornadoã§èšè¿°ããããµãŒããŒã³ãŒããšãšãã«ãªããžããªã«çŽæ¥é
眮ãããŠããWebã€ã³ã¿ãŒãã§ã€ã¹ã¯ãçŸåšã¯ç¬ç«ããŠãããReactJSïŒ
https://github.com/centrifugal/web ïŒã®1ããŒãžã¢ããªã±ãŒã·ã§ã³ã§ãã 泚æGIFïŒ
Centrifugeã®PythonããŒãžã§ã³ã¯ãçŸåšGoããŒãžã§ã³ãšã»ãŒå®å
šã«äºææ§ããããŸãã éãã¯ãããããã§ãããä»åŸã¯äžäžèŽãããã«åŒ·ããªããCentrifugeã«æ°ããæ©èœãè¿œå ããäºå®ã¯ãªããèŠã€ãã£ããã°ãä¿®æ£ããã ãã§ãã
ã»ãŒ2ãæéãç§ãã¡ã¯Mail.Ru Groupã€ã³ãã©ãããã§Centrifugoã䜿çšããŠããŸãããããããŸã§ã®ãšããåé¡ã¯ãããŸããã è² è·ã¯ãããã§ãã1æ¥å¹³å550人ã®åææ¥ç¶ãŠãŒã¶ãŒãå¹³åçŽ50ã®ã¢ã¯ãã£ããã£ãã«ã1åãããçŽ30ã®ã¡ãã»ãŒãžã§ãã Centrifugoãèµ·åããŠè©Šãââã«ã¯ãã·ã¹ãã ã®ãã€ããªãªãªãŒã¹ïŒ
https://github.com/centrifugal/centrifugo/releases ïŒãããŠã³ããŒãã§ããŸããRPMããã³Dockerã€ã¡ãŒãžããã«ãããããã®ä»æ§ããããŸãã
ç§ã¯ãã2ã€ã®è³ªåããããŸãã 1ã€ç®ã¯ãå€§æ ¹ãããå Žåã«é å¿åé¢æ©ã䜿çšããå¿
èŠãããçç±ã§ãã 第äºã«ãäœäººã®ãŠãŒã¶ãŒãåäžã®é å¿åé¢æ©ã€ã³ã¹ã¿ã³ã¹ãç«ãŠãããšãã§ããŸããïŒ æåã®è³ªåã¯å¥åŠã§ãããçãã¯æ¬¡ã®ãšããã§ãããã¡ãããCentrifugeã䜿çšããããšã¯ã§ããŸããããæåãããããžã§ã¯ãã§å©çšã§ããå€ãã®ããšãå®çŸããå¿
èŠããããŸãã äžèŠãããã¯åçŽã«æãããããããŸããããæªéã¯çŽ°éšã«å®¿ã£ãŠããŸãã ãããŠããããã®ããããªããšã¯ãŸãšãã§ããã©ãŠã¶ã¯ã©ã€ã¢ã³ãã®ã³ãŒãããå§ãŸããå±éã§çµãããŸãã é å¿åé¢æ©ã§ã¯ãå®éã«äœ¿çšãããå€ãã®åé¡ããã§ã«è§£æ±ºãããŠããŸãã 圌女ã¯ãã§ã«æŠéã§ã®ãã¹ãã«æåããŠããŸãã ããšãã°ã圌女ã¯Mail.Ru Groupã§åŸæ¥å¡åãã®ã€ã³ã¿ã©ã¯ãã£ãã²ãŒã ãå®æœããããšãèš±å¯ããŸãããçŽ50人ã®åå è
ãã¢ãã€ã«ããã€ã¹ïŒã©ããããããã¿ãã¬ãããæºåž¯é»è©±ïŒãæã£ãŠæ¥ãŸããã 誰ããã²ãŒã ã«æ¥ç¶ãããªã¢ã«ã¿ã€ã ã§ç»é¢äžã®è³ªåãã©ãŠã³ãçµæãã²ãŒã çµ±èšãåãåãããšãã§ããŸããã åæã«ããã¹ãã¯å®éã«èª°ããªã³ã©ã€ã³ã§ãããã確èªããã²ãŒã ã®éå§æã«äººã
ãæŽçããã®ã«åœ¹ç«ã¡ãŸããã 2çªç®ã®è³ªåãžã®çãïŒããããŸããã ç¥ããŸãããäœäžãã®åææ¥ç¶ãæ¥ç¶ã§ãããã¹ãŠãããŸãæ©èœããããã§ãã ãã ããåæã«ãããŒããŠã§ã¢ãæ¥ç¶æ°ããã£ãã«æ°ããã£ãã«å
ã®ã¡ãã»ãŒãžæ°ãªã©ãå€ãã®èŠå ãå
šäœçãªããã©ãŒãã³ã¹ãšã¹ã«ãŒãããã«åœ±é¿ããŸãã ãã®è³ªåã«å¯Ÿããçãã¯ãé©åãªè©äŸ¡ãšç£èŠãæäŸããããšã®ã¿ã§ãã
ãããªãç®æšã¯æ¬¡ã®ãšããã§ãã
- ç§ã¯Objective-C / SwiftãŸãã¯Javaã®ã©ã¡ããç¥ããªãã®ã§ãAndroidãšiOSã§äœ¿çšããã¯ã©ã€ã¢ã³ãã¯ãæŠããŠããªãŒãã³ãœãŒã¹ã³ãã¥ããã£ãŸãã¯Goã®å
±æã©ã€ãã©ãªã«åžæãæã£ãŠããŸãã
- ææšã
- ã·ã£ãŒãã£ã³ã°ïŒ Redisã¯ã©ã¹ã¿ãŒ ã¿ã©ã³ããŒã«ïŒ
ãããŠãçµè«ã®ããã€ãã®ãªã³ã¯ïŒ
Githubã®ãªããžããªã®èšäºã«ãã
gopherãå«ã PSã€ã¡ãŒãžïŒ
github.com/hackraft/gophericonsPSSç§ã¯ãŸãããããŠãŒã¶ãŒã®
mercãš
sl4mmerã«æè¬ããŸãã
圌ãã¯ãããžã§ã¯ãã®éçºã«å€å€§ãªè²¢ç®ãããŠãããŸããã