ãã§ã«Habrã§Yandexã¯ã©ãŠãã€ã³ãã©ã¹ãã©ã¯ãã£ã«ã€ããŠ
話ã
ãŸããã ä»æ¥ã¯èšèããããžãã¹ã«ç§»ãçªã§ã-EllipticsãšCocaineã«ç¬èªã®ã¯ã©ãŠããå±éããæ¹æ³ã段éçã«ç€ºããããšæããŸãã

ã¹ããŒã
flaskã䜿çšããŠ
ãã¹ãã¢ããªã±ãŒã·ã§ã³ãå®è¡ã§ããå°ããªã¯ã©ãŠãã®ã»ããã¢ãããèŠãŠã¿ãŸãããã
ãã®ã¯ã©ãŠãã¯ã次ã®èŠçŽ ã§æ§æãããŠããŸãã
- Dockerã§ã®ã³ã«ã€ã³ã©ã³ã¿ã€ã å®è¡ã¢ããªã±ãŒã·ã§ã³ã
- ã¢ããªã±ãŒã·ã§ã³ã€ã¡ãŒãžãä¿åããããã®Dockerã¬ãžã¹ã㪠ã
- åæ£ã¢ããªã±ãŒã·ã§ã³ã¹ãã¬ãŒãžãšããŠã®Elliptics ãããã³ã¯ã©ãŠãæ§æã
- ã³ã«ã€ã³å®è¡æéçŽããŒã -ã¯ã©ã€ã¢ã³ãã³ã«ã€ã³ã³ãŒãã®åäžã®ã¯ã©ãŠããšã³ããªãã€ã³ãã
- ã¢ããªã±ãŒã·ã§ã³ã«ã¢ã¯ã»ã¹ããããã®ä»£æ¿æ¹æ³ãšããŠã®HTTPããã³ããšã³ã ã
å段éã§ã段éã®æåããã¹ãããããã«ãã§ãã¯ãè¡ããŸãã

ã芧ã®ãšããã
DockerããµããŒãããã«ã¯ãå°ãªããšã
3.8ã®ã«ãŒãã«ãåãã
5å°ã®ä»®æ³ãã·ã³ãå¿
èŠã§ãã å¿
èŠãªããã±ãŒãžã¯
ãªããžããªã«ãã
ãŸã ã
ãªããžããªãè¿œå ããæ¹æ³æ¬¡ã®å
容ã§
/etc/apt/sources.list.d/reverbrain.listãäœæããŸãã
deb http://repo.reverbrain.com/precise/ current/amd64/ deb http://repo.reverbrain.com/precise/ current/all/
ããŒãåŒãäžããŸãã
curl -O http://repo.reverbrain.com/REVERBRAIN.GPG sudo apt-key add REVERBRAIN.GPG
ã©ã®ã³ã«ã€ã³é¢é£ããã±ãŒãžãå©çšå¯èœãèŠãŠã¿ãŸãããïŒ
apt-get update apt-cache search cocaine
Ellipticsã§5å
1å°ã®ãã·ã³ãã
Ellipticsã®ã€ã³ã¹ããŒã«ãå±éããŠãã¯ã©ã¹ã¿ãŒã®åäœãå®èšŒããæ¹æ³ãç°¡åã«èª¬æããå¿
èŠããããŸãã ããã«ãããã¯ãã®æ¥åãæŠéçšã«å±éããããã®ã¬ã€ããšã¯ã¿ãªãããªãããšã«æ³šæããŠãã ããã Ellipticsã®éçºã«æºãã£ãŠãã人ã¯ãééããªãããã«ã€ããŠããªãã«è©±ãã§ãããã æ
å ±ã¯
ããã¥ã¡ã³ãã«ãèšèŒãããŠã
ãŸã ã
äžå¯Ÿã®ã³ãã³ãã§ã¯ã次ã®ããã«ãªããŸãã
sudo apt-get install elliptics=2.24.14.31 elliptics-client=2.24.14.31 mkdir /tmp/history/ && mkdir /tmp/root cp /usr/share/doc/elliptics/examples/ioserv.conf ./tst_ioserv.conf
ããã«
tst_ioserv.confã§ãæåéã3è¡ãå€æŽããå¿
èŠããããŸãã ã ããïŒ
group = 1 addr = localhost:1025:2-0 192.168.50.201:1025:2-1 // IP indexes_shard_count = 16
ãã®åŸãå®è¡ããŸãïŒ
dnet_ioserv -c tst_ioserv.conf

cocaine-runtime + Dockerã®æ§æ
ã¢ããªã±ãŒã·ã§ã³ã®ã³ãŒããçŽæ¥å®è¡ãããã·ã³ã®æ§æã§ããã¯ã©ãŠãã®å®è£
ãå§ããŸãããã ã€ã³ã¹ããŒã«ã®ã³ã¢ã¯ã確ãã«
cocaine-runtimeã§ãã
Dockerã䜿çšããã«ã¯ã
Dockerèªäœãš
cocaine-pluginãã€ã³ã¹ããŒã«ããå¿
èŠããããŸãã
ç®æšã¯ããã«ãŒã³ã³ããã§ã¢ããªã±ãŒã·ã§ã³ãå®è¡ããããšã§ãããéåžžã®ããã»ã¹ãšããŠã¢ããªã±ãŒã·ã§ã³ãèµ·åããããšãæ確ã«ããŸãã
ã³ã³ããåã¯è¯å¥œã§ãã ã¢ããªã±ãŒã·ã§ã³ã®ç°å¢åé¡ã解決ããŸãã
- äžæ¯ã¯åžžã«ç§ãã¡ãšäžç·ã§ãã
- 2ã€ã®ã¢ããªã±ãŒã·ã§ã³ã®äŸåé¢ä¿ã«ç«¶åã¯ãããŸããã
- éçºç°å¢ããã¹ãç°å¢ã補åç°å¢ã§ã®ç°å¢ã®äžå€æ§ã
ã³ã³ãããªãã§èµ·åããããšã¯ãäŸåé¢ä¿ããªãïŒããšãã°ãå®è¡äžã®ã¢ããªã±ãŒã·ã§ã³ïŒå Žåããã³ã³ããã䜿çšããæè¡çãªèœåãããå ŽåïŒããšãã°ãã«ãŒãã«ãå¿
èŠãªããŒãžã§ã³ãããäœããæŽæ°ã§ããªãå ŽåïŒã«é©çšå¯èœã§äŸ¿å©ã§ãã
ãªããžããªãæ¥ç¶ããåŸãå¿
èŠãªããã±ãŒãžãã€ã³ã¹ããŒã«ããŸãã
sudo apt-get install cocaine-runtime libcocaine-core2 libcocaine-plugin-docker2 libcocaine-plugin-elliptics=2.24.14.31 elliptics-client=2.24.14.31

ã¢ããªã±ãŒã·ã§ã³ã管çããã«ã¯ã
cocaine-toolãŠãŒãã£ãªãã£ãå¿
èŠã§ãã ãããã€ã³ã¹ããŒã«ããæãç°¡åãªæ¹æ³ã¯ãæšæºã®Pythonããã±ãŒãžãªããžããªã§ãã
PyPIããã§ãã
msgpackã® Pythonã«ãã€ã³ããŒãã€ã³ã¹ããŒã«ããå¿
èŠããããŸãã
sudo apt-get install msgpack-python
ãããŠã
ã³ã«ã€ã³ããŒã« ã
sudo pip install cocaine-tools
msgpack-pythonãPyPIããã§ã¯ãªãã®ã¯ãªãã§ããïŒMsgpack-pythonã«ã¯2ã€ã®å®è£
ããããŸãã 1ã€ã¯çŽç²ãªPythonã§ããã1ã€ã¯Cythonã«ãããŸãã PyPIããã€ã³ã¹ããŒã«ããå Žåããã€ããªããŒãžã§ã³ã®ã³ã³ãã€ã«ãè©Šè¡ããã倱æããå Žåã¯ã¯ãªãŒã³ãªå®è£
ãã€ã³ã¹ããŒã«ãããŸãã æªãç¹ã¯ããããã®å®è£
ãäºãã«äºææ§ããªãããšã§ãã Cythonã®æšæºããŒãžã§ã³ã䜿çšããŸããã ã»ãšãã©ã®å Žåãå¿
èŠãªäŸåé¢ä¿ã®äžéšãæ¬ èœããŠãããã¯ãªãŒã³ãªå®è£
ãã€ã³ã¹ããŒã«ãããŠããŸããããã¯-ããŒãžã§ã³ã«ãã£ãŠã¯-ç解ã§ããªããšã©ãŒã«ã€ãªãããŸãã ããã¯åžžã«åœãŠã¯ãŸãããã§ã¯ãªããããããç¶æ³ã¯å°æ¥æ¹åããã§ãããã
å
¬åŒ
ããã¥ã¡ã³ãã®èª¬æã«åŸã£ãŠã䟿å©ãªæ¹æ³
㧠Dockerãã€ã³ã¹ããŒã«ããŸãã 次ã®ãã¹ã䜿çšãããŸãã
curl -s https://get.docker.io/ubuntu/ | sudo sh

ããã±ãŒãžãæ£åžžã«ã€ã³ã¹ããŒã«ããããšã
cocaine-runtimeã¯ããã©ã«ãã®æ§æã§éå§ãããŸãããããã¯å€æŽããå¿
èŠããããŸãã
cocaine-runtimeãåæ¢ããæ§æã®å€æŽã«é²ã¿ãŸãã
sudo service cocaine-runtime stop
ããã©ã«ãã®æ§æãã¡ã€ã«ã¯
/etc/cocaine/cocaine-default.confã«ããã次ã®ããã«ãªããŸãã
{ "version": 2, "paths": { "plugins": "/usr/lib/cocaine", "runtime": "/var/run/cocaine" }, "services": { "logging": { "type": "logging" }, "storage": { "type": "storage", "args": { "backend": "core" } }, "node": { "type": "node", "args": { "runlist": "default" } } }, "storages": { "core": { "type": "files", "args": { "path": "/var/lib/cocaine" } }, "cache": { "type": "files", "args": { "path": "/var/cache/cocaine" } } }, "loggers": { "core": { "type": "syslog", "args": { "identity": "cocaine", "verbosity": "info" } } } }
ã¯ã©ãŠãæ§æãäœæããŸãããã ãããè¡ãã«ã¯ã
2ã€ã®ãšã³ãã£ãã£ãæ§æããå¿
èŠããããŸãã
- åæ£ãµãŒãã¹ã§ã®äœæ¥ãæ§æããŸãïŒãã®äŸã§ã¯Elliptics ïŒã åé¡ã¯ã ã³ã«ã€ã³ã©ã³ã¿ã€ã ãå®è¡äžã®ã¢ããªã±ãŒã·ã§ã³ãã¢ããªã±ãŒã·ã§ã³èµ·åãããã¡ã€ã«ãã¢ããªã±ãŒã·ã§ã³ãããã§ã¹ãã®ãªã¹ããã¹ãã¬ãŒãžããèªã¿åãããšã§ãã ããã®ãŸãŸãååšãããã¡ã€ã«ã¹ãã¬ãŒãžã䜿çšããå ŽåãåããŒãã§ãã®ããŒã¿ã®äžè²«æ§ãç¶æããå¿
èŠããããããã¯éåžžã«äžäŸ¿ã§ãã åæ£ä¿éºã®å Žåããã®åé¡ã¯ããèªäœã§è§£æ±ºãããŸãã
- ã©ã³ã¿ã€ã ã«ãã¯ã©ãŠãèªäœã®æ
å ±ãã¯ã©ãŠãã®éçŽããŒãã«æäŸãããŸãã
å®éšã®ããã«ãæäŸãããããã©ã«ã
èšå®ã®ã³ããŒïŒ
/etc/cocaine/cocaine-cloud.confãªã© ïŒãå€æŽãããšäŸ¿å©ã§ãã
servicesãšåããã¹ãã¬ãã«ã§æ§æã«ãããã¯ãŒã¯ã»ã¯ã·ã§ã³ãè¿œå ããããšã§ã
ã³ã«ã€ã³ã©ã³ã¿ã€ã ã«ã
å®è¡äžã®ã¢ããªã±ãŒã·ã§ã³ãšãµãŒãã¹ã«ã€ããŠéçŽããŒãã«éç¥ãããããšãã§ã
ãŸã ã
"network" : { "group": "224.168.2.9" }, "services": { ... }
å¯äžã®
ã°ã«ãŒããã©ã¡ãŒã¿ã¯ãã¢ã©ãŒããéä¿¡ããããã«ããã£ã¹ãã°ã«ãŒãã®ã¢ãã¬ã¹ãèšè¿°ããŸãã
ã¹ãã¬ãŒãžã¯ã
ãµãŒãã¹/ã¹ãã¬ãŒãžããã³
ã¹ãã¬ãŒãž/ã³ã¢ã»ã¯ã·ã§ã³ãå€æŽããããšã§æ§æãããŸãã
"storage": { "type": "elliptics" }, "storages" : { "core": { "type": "elliptics", "args": { "nodes" : { "192.168.50.201" : 1025 }, "io-thread-num" : 8, "wait-timeout" : 30, "check-timeout" : 60, "net-thread-num" : 8, "groups" : [1], "verbosity" : 2 } } }
Ellipticsã¹ãã¬ãŒãžã®å®è£
ã¯ã察å¿ãããã©ã°ã€ã³ã«ãã£ãŠæäŸãããŸãã ã¡ãªã¿ã«ãããã±ãŒãžã®ãã¹ãŠã®ãã©ã°ã€ã³ã¯/ usr / lib / cocaineã«é
眮ãããŸã
ãcocaine-runtimeã¯ããã©ã«ãã§ããããæ¢ããŸãã
ããã§ãããã©ã«ãã§ãã®èšå®ã§ã³ã«ã€ã³ã匷å¶çã«éå§ããŸãã äœæãã
/etc/default/cocaine-runtime
ïŒ
CONFIG_PATH = "/etc/cocaine/cocaine-cloud.conf"
æ°ããèšå®ã§
cocaine-runtimeã
å®è¡ããããã»ã¹ãæ©èœããŠããããšã確èªããŸãã

ããŒã
10053ã§éå§ããåŸããã®ããŒãã®ãµãŒãã¹ãã±ãŒã¿ãŒã¯ãã¢ããªã±ãŒã·ã§ã³ã®å¯çšæ§ã®èŠæ±ãåŸ
ã¡ãŸãã ããã¯ãã¯ã©ãŠãã¢ããªã±ãŒã·ã§ã³ããã³ãµãŒãã¹çšã®äžçš®ã®DNSã§ããã€ãŸãããµãŒãã¹ãŸãã¯ã¢ããªã±ãŒã·ã§ã³ã®ååã«ãã£ãŠãèŠæ±ãåŠçããããã«èŠæ±ãéä¿¡ããå ŽæãããããŸãã
cocaine-tool info
ã³ãã³ãã䜿çšããŠããã®ããŒãäžã®ã¢ããªã±ãŒã·ã§ã³ã«é¢ããæ
å ±ãèŠæ±ã§ããŸãã ãã®ã³ãã³ãã®åºåã¯ãŸã é©ãã¹ããã®ã§ã¯ãããŸããããèŠããŠãããŠãã ãã-ããã«å€æŽãããŸãã
ã³ã«ã€ã³ã©ã³ã¿ã€ã ãšãã©ã°ã€ã³ã«å ããŠã
Dockerãã€ã³ã¹ããŒã«ããããšãæãåºããŠãã ããã ãŸããæ£åžžã«éå§ãããããšã確èªããŸãã

åæ§ã®ã¢ã¯ã·ã§ã³ã2çªç®ã®ãã·ã³ã§å®è¡ããããšæ³å®ããŠããŸãã åèšã§ãå
±æ
ã¹ãã¬ãŒãžã調ã¹ã
ã³ã«ã€ã³ã©ã³ã¿ã€ã ã
å®è¡ãã
2å°ã®è»ããããŸã-ããã¯çŽ æŽãããããšã§ãïŒ
ãã®æç¹ã§ãã¢ããªã±ãŒã·ã§ã³ãå®è¡ããããšã¯ãã§ã«å¯èœã§ãã ãã¡ãããããã¯ãŸã£ããã¯ã©ãŠãã§ã¯ãããŸããããããã§ãã§ãã è¢ããŸãããŸããããå§ããŸãããã
ãŸããã¢ããªã±ãŒã·ã§ã³ã³ãŒããã³ã«ã€ã³ã¹ãã¬ãŒãžã«é
ä¿¡ããå¿
èŠããããŸãã ãã®ã¿ã¹ã¯ã¯ã
cocaine-toolã䜿çšããŠç°¡åã«è§£æ±ºã§ã
ãŸã ã
ãµã³ãã«ã䜿çšããŠãªããžããªã®ã¯ããŒã³ãäœæãããã£ã¬ã¯ããªã«ç§»åããŸãã
git clone git@github.com:cocaine/cocaine-framework-python.git -b v0.11 cd cocaine-framework-python/examples/flask/

ã¢ããªã±ãŒã·ã§ã³ã³ãŒãã«å ããŠã
manifest.jsonã次ã®å Žæã«ããããšãããããŸãã
{ "slave": "main.py" }
ãã®ãã¡ã€ã«ã®äž»ãªã¿ã¹ã¯ã¯ãå®è¡ãããã®ããã©ãããã©ãŒã ã«äŒããããšã§ãã
ç°å¢ãæž¡ãããšãã§ã
ãŸã ã
ããã»ã¹ãšããŠå®è¡ããã¢ããªã±ãŒã·ã§ã³ã®ã³ãŒããã¯ã©ãŠãã«ããŠã³ããŒãããã«ã¯ã次ã®ã³ãã³ããå®è¡ããå¿
èŠããããŸãã
cocaine-tool app upload --name example
cocaine-tool㯠ãã¢ããªã±ãŒã·ã§ã³ãã¢ãŒã«ã€ãã«ããã¯ããã¯ã©ãŠãã«ã¢ããããŒãããŸãã 次ã«ãããŠã³ããŒãããã¢ããªã±ãŒã·ã§ã³ã®ãªã¹ãã確èªããŸãã

ãããã¢ããªã±ãŒã·ã§ã³ã§ãïŒ äž»ãªãã®ã¯ãã¢ããªã±ãŒã·ã§ã³ã®ã€ã³ã¹ããŒã«ã«å¿
èŠãª
flaskã®ã€ã³ã¹ããŒã«ãå¿ããªãããšã§ãã ã³ã³ãããªãã§å®è¡ããããšã®æ¬ ç¹ã¯æ¬¡ã®ãšããã§ãã
sudo apt-get install python-flask
次ã«ãã¢ããªã±ãŒã·ã§ã³ã«å²ãåœãŠããããªãœãŒã¹ãåé¢ã®ã¿ã€ããã¯ãŒã«ãŒæ°ã®ç®¡çãªã©ãæ§æããå¿
èŠããããŸãã ãããã¡ã€ã«ã¯ãã®ç®çã«åœ¹ç«ã¡ãŸãã ãããã¡ã€ã«ã¯ãè€æ°ã®ã¢ããªã±ãŒã·ã§ã³ã«é¢é£ä»ããããšãã§ããŸãã
æãåçŽãªãããã¡ã€ã«ã¯ç©ºã®JSON
{}
ã§ãã ãã®å Žåãããã©ã«ãèšå®ã䜿çšãããŸãã
å©çšå¯èœãªãã¹ãŠã®ãªãã·ã§ã³ã®
説æã¯ã
説æã«ãããŸãã åŸã§ã³ã³ããå
ã§ã¢ããªã±ãŒã·ã§ã³ãèµ·åãããšãã«ãããèå³æ·±ãäŸãæ€èšããŸãã
ããã©ã«ãã®ãããã¡ã€ã«ã«ååãä»ããŠãã¯ã©ãŠãã¹ãã¬ãŒãžã«ã¢ããããŒãããŸãã æ£ããèµ·åããããšã確èªããŠãã ããã

æåŸã«ãã¹ã€ãããåŒããŠã¢ããªã±ãŒã·ã§ã³ãèµ·åãããšããæ¥ãŸããïŒ
cocaine-tool app start --name example --profile default

ããã§ã
cocaine-tool info
ã³ãã³ãã®åºåãå€æŽãããŸããã ãã®ããŒãã§å®è¡ãããŠããã¢ããªã±ãŒã·ã§ã³ãšã¢ããªã±ãŒã·ã§ã³ã«é¢ããçµ±èšã衚瀺ãããŸãã
ã¢ããªã±ãŒã·ã§ã³ã«ã¡ãã»ãŒãžãéä¿¡ããŠã¿ãŸãããã ãã®ããã«ã¯ããã®ãããªå°ããªpythonã¹ã¯ãªããã§ååã§ãã
ã¢ããªã±ãŒã·ã§ã³ã¯ãŸã 1ã€ã®ããŒãã§ã®ã¿å®è¡ãããŠããŸããã2çªç®ã®ããŒãã«ç§»åããŠå®è¡ããããšãã§ããŸãã ããã§ã
Dockerã§ã¢ããªã±ãŒã·ã§ã³ã®ã€ã³ãã©ã¹ãã©ã¯ãã£ãæ§ç¯ãç¶ããããšãã§ããŸãã
Dockerã¬ãžã¹ããª
Docker-registryã¯ãã¢ããªã±ãŒã·ã§ã³ã€ã¡ãŒãžïŒã³ã³ããïŒã®ãã©ã€ããŒããªããžããªã§ãã 詳现ã«ã€ããŠã¯ãå
¬åŒã®
dockerã®ããã¥ã¡ã³ããåç
§ããŠãã ãã ã
Docker-registryã¯ãç»åãä¿åããããã®å€ãã®ããã¯ãšã³ãããµããŒãããŠããŸãã åæãã¯ãããŒã«ã«ãã¡ã€ã«ã·ã¹ãã ã«ç»åãèšé²ããããšããå§ãŸãã
Ellipticsã«ç»åãä¿åãããŸã§æ¡åŒµãããŸãã
Docker-registryãå®è¡ããæãç°¡åãªæ¹æ³ã¯ãDockerã䜿çšããããšã§ãã ãããè¡ãã«ã¯ã
Docker ïŒäžèšãåç
§ïŒãã€ã³ã¹ããŒã«ããã³ãã³ãã«ç®çã®ã€ã¡ãŒãžãå®è¡ãããå¿
èŠããããŸãã
sudo docker run -p 5000:5000 registry
ã¬ãžã¹ããªã€ã¡ãŒãžã¯æåã«ãªããžããªããããŒããããŠãã£ãã·ã¥ããã次åã¯ããã«èµ·åããŸãã

èµ·åãããšã
Docker-registryã¯ããŒã
5000ã§ãªãã¹ã³ããŸãã ç§ãã¡ã¯åœŒã«pingãéããŸã
curl "http://192.168.50.4:5000/_ping"
ããã§ã»ããã¢ããã¯å®äºã§ãã
ã³ã³ããã§ã¢ããªã±ãŒã·ã§ã³ããã«ãããã³ãããã€ããŸã
ã³ã³ããã®å Žåã®ã¢ããªã±ãŒã·ã§ã³ã®å±éã¯ããéã³ã³ããããšå€§å·®ãããŸããã æãéèŠãªéãã¯ãã€ã¡ãŒãžããã«ãããã«
ã¯Dockerfileãå¿
èŠãªããšã§ãã å®éã«ã¯ãã€ã¡ãŒãžã®å
éšç¶æ
ã圢æããããã«å®è¡ããå¿
èŠãããã·ã§ã«ã³ãã³ãã®ã»ããã§æ§æãããŠããŸãã ãã®åŸãã€ã¡ãŒãžãDocker-registryã«æ³šãããŸãã
ããã«ãã³ã³ãããå®è¡ãã
Dockerã¯ãã¬ãžã¹ããªããã€ã¡ãŒãžãããŒãã§ããŸãã
Dockerfileã®æ§æã䜿çšå¯èœãªã³ãã³ãã¯ãã¡ãã«ãããŸãã Dockerfileã®ä»£ããã«ãã¢ã»ã³ããªäžã«ã³ã³ããå
ã§å®è¡ãããChefã¬ã·ããŸãã¯Puppetãããã§ã¹ããæäŸã§ããŸãã
ãã®ã¢ããªã±ãŒã·ã§ã³ã®ãããã¡ã€ã«ã§ã¯ã絶çžDockerã®ã¿ã€ããæå®ããå¿
èŠããããŸãã ãããè¡ãã«ã¯ãæ°ãããããã¡ã€ã«ãäœæããŸãã
{ "queue-limit": 1000, "pool-limit": 10, "isolate": { "type": "docker", "args": { "memory_limit": 1000000000, "endpoint": "unix:///var/run/docker.sock", "registry": "registry.cloud.net:5000", "cpu_shares": 0 } }, "concurrency": 200 }
docker-profile.jsonãšããååã§ãã¡ã€ã«ã«ãããã¡ã€ã«ãé
眮ããdocker-profileãšããååã§ã¢ããããŒãããŸã
cocaine-tool profile upload --name docker-profile --profile=docker-profile.json
ãã®äŸã§ã¯ãæ¢è£œã®Dockerfileããããã¯ã©ãŠããžã®ã¢ããªã±ãŒã·ã§ã³ã®ããŠã³ããŒãã¯æ¬¡ã®ãšããã§ãã
sudo cocaine-tool app upload --docker=unix:///var/run/docker.sock --registry=registry.cloud.net:5000 --manifest manifest-docker.json --name example-docker --timeout 20000
ããã¯ã€ã³ã¹ã¿ã³ãããã»ã¹ã§ã¯ãªãããã¹ãŠç»åãšãããã¯ãŒã¯ã®ãµã€ãºã«äŸåããŸãã ãããããã®çµæãåæ§ã®ç¢æã衚瀺ãããã¯ãã§ãã 次ã«ãã¢ããªã±ãŒã·ã§ã³ãèµ·åããŸãã

1ã€ã®ãã€ã³ããèŠèœãšãããŠããŸã-ã©ã®ã¢ããªã±ãŒã·ã§ã³ãèµ·åæã«ã³ã«ã€ã³ã©ã³ã¿ã€ã ãéå§ãããããã©ã®ããã«èŠã€ãããã«ã€ããŠã ããã«ã¯
ã©ã³ãªã¹ãããããŸãã æ¬è³ªçã«ããã®é£æ³é
åã®ã¢ããªã±ãŒã·ã§ã³ãšãã®ãããã¡ã€ã«ã¯ãèµ·åæã«
cocane-runtimeãèªã¿åããŸãã ãããã¡ã€ã«ã®ããã«ã
ã¹ãã¬ãŒãžã«é
眮ãã
ãŸã ã ã¯ã©ãŠãã®ç°ãªãããŒãã§å®è¡äžã®ã¢ããªã±ãŒã·ã§ã³ã®ã»ããã¯ç°ãªãå Žåãããããããããã®å®è¡ãªã¹ãã¯ç°ãªãå ŽåããããŸãã ã©ã³ãªã¹ãã®ååã¯ãããŒããµãŒãã¹ã®runlistãã©ã¡ãŒã¿ãŒã®
cocaine-runtime configã§æå®ãããŸãã
éçŽããŒãã®æ§æ
æ¬è³ªçã«ãæ§æã®ãã®éšåã¯ããã³ã«ã€ã³ã©ã³ã¿ã€ã ã®æ§æãé
ç®ã«éåžžã«äŒŒãŠããŸãã
ã³ã«ã€ã³ã©ã³ã¿ã€ã ã¯éçŽããŒããšããŠæ©èœãããããããã¯èªç¶ãªããšã§ãã ãã®äžã®ãã¹ãŠã®ãã©ã³ã·ã³ã°äœæ¥ã¯ã
ã²ãŒããŠã§ã€ãã©ã°ã€ã³ã«ãã£ãŠå®è¡ãã
ãŸã ã
ãã®ãã©ã°ã€ã³ã«ã¯2ã€ã®å®è£
ããããŸãã æåã¯
ã¢ãããã¯ãšåŒã°ããŸãã ãããã«äœ¿çšå¯èœãã§ãããè¿œå ã®ããã±ãŒãžãã€ã³ã¹ããŒã«ããå¿
èŠã¯ãããŸããã æŠéã§äœ¿çšãã2çªç®ã®å®è£
ã¯
ipvsãšåŒã°ããŸãã ååã瀺ãããã«ãåãååã®ãã¯ãããžãŒã䜿çšããŸãã ã¢ãããã¯ã¯ã
ipvsã䜿çšã§ããªãå Žåã«äœ¿çšããã®ãè³¢æã§ãã ãããŠãã¡ããããã®ãã©ã°ã€ã³ã®ç¬èªã®å®è£
ãèšè¿°ããŠã奜ã¿ã®ãã¯ãããžãŒã䜿çšããŠãã©ã³ã¹ãåãããšãã§ããŸãã
èšèããè¡çºãžã ããã±ãŒãžãã€ã³ã¹ããŒã«ããŸãã
sudo apt-get install cocaine-runtime libcocaine-core2 libcocaine-plugin-ipvs2 libcocaine-plugin-elliptics=2.24.14.31 elliptics-client=2.24.14.31
ipvsã䜿çšã§ããªãå Žåã¯ãæå®ãããããã±ãŒãžã®æåŸãã€ã³ã¹ããŒã«ããå¿
èŠã¯ãããŸããã åºæ¬æ§æã®éãã¯ãããã§ãããåå¥ã«ç€ºãããŸãã
ãããã¯ãŒã¯ã»ã¯ã·ã§ã³ã«
ã²ãŒããŠã§ã€ãµãã»ã¯ã·ã§ã³ãè¿œå ãããšã
ã©ã³ã¿ã€ã ãéçŽããŒãã«
ããããšãã§ã
ãŸã ã 以åã®ããã«ãããã©ã«ãã§èšå®ã®ã³ããŒãä¿®æ£ãããšä»®å®ããŸãã åã®æ®µèœãšåæ§ã«
ã¹ãã¬ãŒãžãµãŒãã¹ãæ§æããŸããããã«å¿
èŠã«ãªããŸãã
"network": { "group": "224.168.2.9", "gateway": { "type": "ipvs"
sudo service cocane-runtime restart
ãšãããã»ã¹ãéå§ããã¯ãã§ãã
cocaine /usr/bin/cocaine-runtime --daemonize --configuration /etc/cocaine/cocaine-gateway.conf --pidfile /var/run/cocaine/runtime.pid
å®éã
ã²ãŒããŠã§ã€ã¯å€æ°ã®ãã©ã¡ãŒã¿ãŒãåãå
¥ããŸãïŒãããã®ãã©ã¡ãŒã¿ãŒã«ã€ããŠã¯è³æã§ç¢ºèªã§ããŸãïŒã
ãã°ãéããŸãããïŒããã©ã«ãã§ã¯syslogã«æžã蟌ãŸããŸãïŒã 2ã€ã®ããŒãã®æ¥ç¶ãç»é²ããããã®ãã¡ã®1ã€ããªãã«ãªã£ãããšãããããŸãã ããã¯ãšã³ãã§ãåãããšãã§ãã
æ€åºãæ©èœããããšã確èªã§ããŸãã

ã³ã«ã€ã³ãã€ãã£ããããã·
Cocaine-native-proxyã䜿çšãããšãHTTPçµç±ã§ã¯ã©ãŠãã¢ããªã±ãŒã·ã§ã³ã«ã¢ã¯ã»ã¹ã§ããŸãã ã€ã³ã¹ããŒã«ãšèšå®ã¯éåžžã«ç°¡åã§ãã
apt-get install cocaine-native-proxy
次ã«ã
ãã±ãŒã¿ãŒã»ã¯ã·ã§ã³ã§éçŽããŒãã®ãªã¹ããæå®ããå¿
èŠããããŸãã ãã®å Žåããã®ãããªããŒãã¯1ã€ã ãã§ãã å³å¯ã«èšãã°ãéçŽã¢ãŒãã§åäœããªããã±ãŒã¿ãŒãšããŒãã®ã¢ãã¬ã¹ãæå®ã§ããŸãã ããã¯ããã®ãããªããŒããä»ã®ããŒãäžã®ãµãŒãã¹ãã¢ããªã±ãŒã·ã§ã³ã«ã€ããŠäœãç¥ããªããšããçç±ã§æªãããšã§ããã€ãŸãããããã«ã¢ã¯ã»ã¹ããããšã¯ã§ããŸããã ãã©ã¡ãŒã¿ãŒã®è©³çŽ°ãªèª¬æã¯ã
github.com / cocaine / cocaine-native-proxy / blob / master / README.mdã«ãããŸãã { "endpoints": [ "0.0.0.0:8080" ], "backlog": 2048, "threads": 2, "application": { "locators": ["192.168.50.103:10053"], "service_pool": 5, "reconnect_timeout": 180, "request_timeout": 5 } }
ã€ã³ã¹ããŒã«ã®ã¯ã©ãŠããšã³ããªãã€ã³ãã¯ãéçŽããŒããæã€ãã·ã³ã§ãã HTTPã€ã³ã¿ãŒãã§ãŒã¹ã¯
cocaine-native-proxyãä»ããŠå
¬éãããŠãããšããäºå®ã«ãããããããå®éã«ã¯ããã®ãããã·ãŒã¯éçŽããŒãã䜿çšããŸãã ãã±ãŒã¿ãŒã»ã¯ã·ã§ã³ã®æ§æã§æå®ããŸããã 2ã€ã®æ¹æ³ã§ã¢ããªã±ãŒã·ã§ã³ãåŒã³åºããŠã¿ãŸãããã HTTPã¯ã©ã€ã¢ã³ãã¯
httpã€ãã³ããã³ãã©ãŒã䜿çšããPythonã®ã¯ã©ã€ã¢ã³ãã³ãŒããã
æžã蟌ã¿ã€ãã³ããš
èªã¿åãã€ãã³ããåŠçããŸãã
ã¯ã©ã€ã¢ã³ãã³ãŒãã¯ãã¯ã©ãŠããšã³ããªãã€ã³ãã®ã¢ãã¬ã¹ã瀺ããŸãã ç§ã®å Žå-192.168.50.103ã
ãã©ã¹ã³ã¢ããªã±ãŒã·ã§ã³ã¯ãhttpã€ãã³ããã³ãã©ãŒãšããŠåŒã³åºãããŸãã çŸåšãHTTPãããã·ã¯ãã€ãã³ããéä¿¡ããã¢ããªã±ãŒã·ã§ã³ã決å®ãã2ã€ã®æ¹æ³ããµããŒãããŠããŸãã æåã®æ¹æ³ã¯ãæž¡ãããURLããã¿ãŒã³ã«åŸã£ãŠæ§ç¯ãããŠããããšãåæãšããŠããŸãïŒ
///tail?arg=1&args=2. URL . /tail?arg=1&args=2 . .
X-Cocaine-Service, X-Cocaine-Event . nginx .
, :
curl "http://localhost:8080/read" -H "X-Cocaine-Service: example" -H "X-Cocaine-Event: http" curl "http://localhost:8080/example/http/read"
. , . , . . . , , (, 5%). . . , , .
. example , exampleGroup . example 1000 . .
service/locator: adding group 'exampleGroup'

exampleGroup . , , app.py hello:
@app.route('/') def hello(name=None): return "HELLO! I'm version #2"
, example2 .

curl "http://localhost:8080/exampleGroup/http/"
, . example2 0 , HTTP-proxy . , HTTP-proxy . , .
, , . , Cocaine , c, . .
///tail?arg=1&args=2. URL . /tail?arg=1&args=2
. .
X-Cocaine-Service, X-Cocaine-Event . nginx .
, :
curl "http://localhost:8080/read" -H "X-Cocaine-Service: example" -H "X-Cocaine-Event: http" curl "http://localhost:8080/example/http/read"
. , . , . . . , , (, 5%). . . , , .
. example , exampleGroup . example 1000 . .
service/locator: adding group 'exampleGroup'

exampleGroup . , , app.py hello:
@app.route('/') def hello(name=None): return "HELLO! I'm version #2"
, example2 .

curl "http://localhost:8080/exampleGroup/http/"
, . example2 0 , HTTP-proxy . , HTTP-proxy . , .
, , . , Cocaine , c, . .
///tail?arg=1&args=2. URL . /tail?arg=1&args=2
. .
X-Cocaine-Service, X-Cocaine-Event . nginx .
, :
curl "http://localhost:8080/read" -H "X-Cocaine-Service: example" -H "X-Cocaine-Event: http" curl "http://localhost:8080/example/http/read"
. , . , . . . , , (, 5%). . . , , .
. example , exampleGroup . example 1000 . .
service/locator: adding group 'exampleGroup'
exampleGroup . , , app.py hello:
@app.route('/') def hello(name=None): return "HELLO! I'm version #2"
, example2 .
curl "http://localhost:8080/exampleGroup/http/"
, . example2 0 , HTTP-proxy . , HTTP-proxy . , .
, , . , Cocaine , c, . .
///tail?arg=1&args=2. URL . /tail?arg=1&args=2
. .
X-Cocaine-Service, X-Cocaine-Event . nginx .
, :
curl "http://localhost:8080/read" -H "X-Cocaine-Service: example" -H "X-Cocaine-Event: http" curl "http://localhost:8080/example/http/read"
. , . , . . . , , (, 5%). . . , , .
. example , exampleGroup . example 1000 . .
service/locator: adding group 'exampleGroup'

exampleGroup . , , app.py hello:
@app.route('/') def hello(name=None): return "HELLO! I'm version #2"
, example2 .

curl "http://localhost:8080/exampleGroup/http/"
, . example2 0 , HTTP-proxy . , HTTP-proxy . , .
, , . , Cocaine , c, . .
///tail?arg=1&args=2. URL . /tail?arg=1&args=2
. .
X-Cocaine-Service, X-Cocaine-Event . nginx .
, :
curl "http://localhost:8080/read" -H "X-Cocaine-Service: example" -H "X-Cocaine-Event: http" curl "http://localhost:8080/example/http/read"
. , . , . . . , , (, 5%). . . , , .
. example , exampleGroup . example 1000 . .
service/locator: adding group 'exampleGroup'

exampleGroup . , , app.py hello:
@app.route('/') def hello(name=None): return "HELLO! I'm version #2"
, example2 .

curl "http://localhost:8080/exampleGroup/http/"
, . example2 0 , HTTP-proxy . , HTTP-proxy . , .
, , . , Cocaine , c, . .
///tail?arg=1&args=2. URL . /tail?arg=1&args=2
. .
X-Cocaine-Service, X-Cocaine-Event . nginx .
, :
curl "http://localhost:8080/read" -H "X-Cocaine-Service: example" -H "X-Cocaine-Event: http" curl "http://localhost:8080/example/http/read"
. , . , . . . , , (, 5%). . . , , .
. example , exampleGroup . example 1000 . .
service/locator: adding group 'exampleGroup'

exampleGroup . , , app.py hello:
@app.route('/') def hello(name=None): return "HELLO! I'm version #2"
, example2 .

curl "http://localhost:8080/exampleGroup/http/"
, . example2 0 , HTTP-proxy . , HTTP-proxy . , .
, , . , Cocaine , c, . .
///tail?arg=1&args=2. URL . /tail?arg=1&args=2
. .
X-Cocaine-Service, X-Cocaine-Event . nginx .
, :
curl "http://localhost:8080/read" -H "X-Cocaine-Service: example" -H "X-Cocaine-Event: http" curl "http://localhost:8080/example/http/read"
. , . , . . . , , (, 5%). . . , , .
. example , exampleGroup . example 1000 . .
service/locator: adding group 'exampleGroup'
exampleGroup . , , app.py hello:
@app.route('/') def hello(name=None): return "HELLO! I'm version #2"
, example2 .
curl "http://localhost:8080/exampleGroup/http/"
, . example2 0 , HTTP-proxy . , HTTP-proxy . , .
, , . , Cocaine , c, . .
///tail?arg=1&args=2. URL . /tail?arg=1&args=2
. .
X-Cocaine-Service, X-Cocaine-Event . nginx .
, :
curl "http://localhost:8080/read" -H "X-Cocaine-Service: example" -H "X-Cocaine-Event: http" curl "http://localhost:8080/example/http/read"
. , . , . . . , , (, 5%). . . , , .
. example , exampleGroup . example 1000 . .
service/locator: adding group 'exampleGroup'

exampleGroup . , , app.py hello:
@app.route('/') def hello(name=None): return "HELLO! I'm version #2"
, example2 .

curl "http://localhost:8080/exampleGroup/http/"
, . example2 0 , HTTP-proxy . , HTTP-proxy . , .
, , . , Cocaine , c, . .
///tail?arg=1&args=2. URL . /tail?arg=1&args=2
. .
X-Cocaine-Service, X-Cocaine-Event . nginx .
, :
curl "http://localhost:8080/read" -H "X-Cocaine-Service: example" -H "X-Cocaine-Event: http" curl "http://localhost:8080/example/http/read"
. , . , . . . , , (, 5%). . . , , .
. example , exampleGroup . example 1000 . .
service/locator: adding group 'exampleGroup'
exampleGroup . , , app.py hello:
@app.route('/') def hello(name=None): return "HELLO! I'm version #2"
, example2 .
curl "http://localhost:8080/exampleGroup/http/"
, . example2 0 , HTTP-proxy . , HTTP-proxy . , .
, , . , Cocaine , c, . .
///tail?arg=1&args=2. URL . /tail?arg=1&args=2
. .
X-Cocaine-Service, X-Cocaine-Event . nginx .
, :
curl "http://localhost:8080/read" -H "X-Cocaine-Service: example" -H "X-Cocaine-Event: http" curl "http://localhost:8080/example/http/read"
. , . , . . . , , (, 5%). . . , , .
. example , exampleGroup . example 1000 . .
service/locator: adding group 'exampleGroup'

exampleGroup . , , app.py hello:
@app.route('/') def hello(name=None): return "HELLO! I'm version #2"
, example2 .

curl "http://localhost:8080/exampleGroup/http/"
, . example2 0 , HTTP-proxy . , HTTP-proxy . , .
, , . , Cocaine , c, . .
///tail?arg=1&args=2. URL . /tail?arg=1&args=2
. .
X-Cocaine-Service, X-Cocaine-Event . nginx .
, :
curl "http://localhost:8080/read" -H "X-Cocaine-Service: example" -H "X-Cocaine-Event: http" curl "http://localhost:8080/example/http/read"
. , . , . . . , , (, 5%). . . , , .
. example , exampleGroup . example 1000 . .
service/locator: adding group 'exampleGroup'
exampleGroup . , , app.py hello:
@app.route('/') def hello(name=None): return "HELLO! I'm version #2"
, example2 .
curl "http://localhost:8080/exampleGroup/http/"
, . example2 0 , HTTP-proxy . , HTTP-proxy . , .
, , . , Cocaine , c, . .
///tail?arg=1&args=2. URL . /tail?arg=1&args=2
. .
X-Cocaine-Service, X-Cocaine-Event . nginx .
, :
curl "http://localhost:8080/read" -H "X-Cocaine-Service: example" -H "X-Cocaine-Event: http" curl "http://localhost:8080/example/http/read"
. , . , . . . , , (, 5%). . . , , .
. example , exampleGroup . example 1000 . .
service/locator: adding group 'exampleGroup'

exampleGroup . , , app.py hello:
@app.route('/') def hello(name=None): return "HELLO! I'm version #2"
, example2 .

curl "http://localhost:8080/exampleGroup/http/"
, . example2 0 , HTTP-proxy . , HTTP-proxy . , .
, , . , Cocaine , c, . .
///tail?arg=1&args=2. URL . /tail?arg=1&args=2
. .
X-Cocaine-Service, X-Cocaine-Event . nginx .
, :
curl "http://localhost:8080/read" -H "X-Cocaine-Service: example" -H "X-Cocaine-Event: http" curl "http://localhost:8080/example/http/read"
. , . , . . . , , (, 5%). . . , , .
. example , exampleGroup . example 1000 . .
service/locator: adding group 'exampleGroup'

exampleGroup . , , app.py hello:
@app.route('/') def hello(name=None): return "HELLO! I'm version #2"
, example2 .

curl "http://localhost:8080/exampleGroup/http/"
, . example2 0 , HTTP-proxy . , HTTP-proxy . , .
, , . , Cocaine , c, . .
///tail?arg=1&args=2. URL . /tail?arg=1&args=2
. .
X-Cocaine-Service, X-Cocaine-Event . nginx .
, :
curl "http://localhost:8080/read" -H "X-Cocaine-Service: example" -H "X-Cocaine-Event: http" curl "http://localhost:8080/example/http/read"
. , . , . . . , , (, 5%). . . , , .
. example , exampleGroup . example 1000 . .
service/locator: adding group 'exampleGroup'

exampleGroup . , , app.py hello:
@app.route('/') def hello(name=None): return "HELLO! I'm version #2"
, example2 .

curl "http://localhost:8080/exampleGroup/http/"
, . example2 0 , HTTP-proxy . , HTTP-proxy . , .
, , . , Cocaine , c, . .