ããã¯ãªã«?
HTTPã使ã£ã¦ããã¡ã¤ã«ã Consul ã¯ã©ã¹ã¿å ã§åæ£é å¸ãã daemon ã§ããGo ã§æ¸ããã¦ãã¾ããèªã¿ããã¯ãããããã§ãã
éçºåæ©ã¨ã¦ã¼ã¹ã±ã¼ã¹
æä½ã® Stretcher ã¨ãããããã¤ãã¼ã«ãããã¾ããå¬ãããã¨ã«ãèªåãå¤åãã¦ããã«ã¤ãã¯ã ãã§ã¯ãªããä»ç¤¾ããã§ã使ããã¦ããããã§ãã å æ¥ãæç¤¾ã® Stretcher ãã使ãã®ããã«è©±ãä¼ºãæ©ä¼ãããããããã¤ã¢ã¼ã«ã¤ãã®å徿ã®ãããã¯ã¼ã¯è² è·ãåé¡ã«ãªã£ã¦ããã¨ãããã¨ãèãã¾ããã
ã«ã¤ãã¯ã§ã¯ãµã¼ãã¯åºæ¬ AWS ã«ãããS3 ãããããã¤ã¢ã¼ã«ã¤ã(200ã300MBç¨åº¦)ãåå¾ãã¦ãã¾ããS3ã¯ã¡ãã£ã¨æå³ãåãããªããããå
ç¢ã§ãstretcherã® -random-delay 5
(éå§ãå¹³å2.5ç§ãæå¤§5ç§ããã) ãè¨å®ããç¶æ
ã§100å°ç¨åº¦ãã䏿ã«200MBãåå¾ãã«è¡ã£ã¦ããå¹³ç¶ã¨åãã¹ãã«å¯¾ã㦠60ã80MB/sec ãããã®è»¢éé度ã§ãã¡ã¤ã«ãé
ã£ã¦ãã¾ãããã¨ã©ã¼ã«ãªããã¨ãã»ã¼ããã¾ããã(æ¯æ¥10ådeployãã¦ã㦠S3 ããã®åå¾ã失æããã®ã¯æ°ã¶æã«ä¸åº¦ã¨ã)
ã¨ãããAWSå¤é¨ããåå¾ããå ´åãAWSã¾ã§ã®åç·ã®åé¡ãããã¾ãããdelayã大ããåã£ã¦ãçµæ§ãªç¢ºçã§å¤±æããã®ã§å°ã£ã¦ãããã¨ãã話ã§ããã
ã¨ãããã¨ã§ãConsul ã¯ã©ã¹ã¿å é¨ã§ãã¡ã¤ã«ã忣é å¸ããHTTP ã§åå¾ã§ããä»çµã¿ãä½ã£ã¦ã¿ã¾ããã
ä½¿ãæ¹
README ã«æ¸ãã¦ããã¨ããã§ãããHTTP ã® PUT, GET, HEAD, DELETE ã«å¯¾å¿ãã¦ãã¾ãã
Consul ã¯ã©ã¹ã¿å ã§å node ã« tuggle ãèµ·åãã¾ãã(ããã©ã«ãã§ã¯TCP 8900çªãã¼ãã listen ãã¾ã)
[node{1,2,3}]$ mkdir /tmp/tuggle [node{1,2,3}]$ tuggle -data-dir /tmp/tuggle
ã©ãã1å°ã® node ã§ PUT ãããã¨ã§ãã¡ã¤ã«ãç»é²ã§ãã¾ãã
[node1]$ curl -XPUT -H"Content-Type: application/gzip" --data-binary @test.gz localhost:8900/test.gz
ç»é²ããããã¡ã¤ã«ã¯ GET / ãããã¨ã§ä¸è¦§ãåç §ã§ãã¾ãã
[node1]$ curl -s localhost:8900 | jq . [ { "id": "6524a9d7b3bde0f3543f1ead0ae8604f", "name": "test.gz", "content_type": "application/gzip", "size": 8764510, "created_at": "2017-02-13T07:46:18.809409122Z" } ]
ãã®å¾ãä»ã® node ã§åãã¦ãã tuggle ãã GET ãããã¨ã§ããã¡ã¤ã«ãåå¾ã§ãã¾ãã
[node2]$ curl localhost:8900/test.gz > test.gz [node2]$ ls -l test.gz -rw-rw-r-- 1 foo bar 8764510 Feb 13 07:55 test.gz
ãã¡ã¤ã«ã®ä¸æ¸ãã¯æªå¯¾å¿ã§ããåä¸ãã¡ã¤ã«åã¸ã¯ä¸æ¦ DELETE ã§æ¶ãã¦ãã PUT ããªããã¦ãã ãããã©ãã® node ããã§ã DELETE å¯è½ã§ãã
[node1]$ curl -X DELETE localhost:8900/test.gz
åä½åç
tuggle ã®åä½åçãç°¡åã«èª¬æãã¾ãã
tuggle 㯠PUT ãåãä»ããã¨ã以ä¸ã®åä½ããã¾ãã
- ãã¡ã¤ã«ã data-dir ã«ä¿å
- Consul KV ã«ãã¡ã¤ã«ã«å¯¾å¿ããã¡ã¿ãã¼ã¿ãè¨é²
- Consul Service ã« name=
tuggle
tag=ãã¡ã¤ã«åã®MD5
ã¨ãã¦èªåã® node ãç»é² - (URL弿°
sync
ãã¤ãã¦ããå ´åãConsul Event ãçºè¡ãã¦ä»ã® node ã® tuggle ã«åå¾ãä¿ã)
ã¤ã¾ããã©ã® node ãã©ã®ãã¡ã¤ã«ãä¿æãã¦ããã®ãã Consul Service ã®ã¿ã°ã§ç®¡çãã¦ãã¾ãã
tuggleã¯GETãåãä»ããã¨ãConsul KVã®ã¡ã¿ãã¼ã¿ãåç §ããä¸ã§
- èªåã® data-dir ã«åå¨ãã¦ããã°ãããè¿ãã¾ã
- èªåãæã£ã¦ããªãå ´åãConsul Serviceã name=
tuggle
tag=ãã¡ã¤ã«åã®MD5
ã§æ¤ç´¢ãããã¡ã¤ã«ãæã£ã¦ããnodeã«HTTPã§åå¾ãã«è¡ãã¾ã- åå¾ãçµãã£ãã data-dir ã«ä¿åããèªåèªèº«ã Service ã«ç»é²ããä¸ã§ã¯ã©ã¤ã¢ã³ãã«ãã¡ã¤ã«ãè¿ãã¾ã
ã¨ããåä½ããã¾ããããã«ãã£ã¦ãèªåãæã£ã¦ããªããã¡ã¤ã«ã¯ãã®æç¹ã§æã£ã¦ãã node ãæ¤ç´¢ãã¦åå¾ãããã®å¾èªåèªèº«ãé å¸ node ã¨ãã¦åä½ãããã¨ã«ãªãã¾ãã
DELETEã§ã¯ãåãä»ãã node ã¯ä»¥ä¸ã®åä½ããã¾ãã
- Consul KV ããã¡ã¿ãã¼ã¿ãåé¤
- Consul Eventãçºè¡ãã¦ãã¯ã©ã¹ã¿å ã®tuggleã«ãã¼ã«ã«ãã¡ã¤ã«ãåé¤ããããã«éç¥
Stretcher ã¨çµã¿åããã¦ä½¿ãå ´åã¯ãããã¤ã¢ã¼ã«ã¤ãã tuggle ã« PUT ãã¦ãããmanifest ã§ src: http://localhost:8900/foo.tar.gz
ãªã©ã¨æå®ããæ³å®ã§ãã
å®è£ ä¸ã®å·¥å¤«
æåã«ãã¡ã¤ã«ãæã£ã¦ããã®ã¯ 1 node ãªã®ã§ããããã¤æã®ããã«ä¸æã«å node ã§åå¾ãããã¨ããã¨ãçµå±æåã®1å°ã«è² è·ãéä¸ãã¦ãã¾ãã¾ãã ããã§ tuggle 㯠Consul ã®ã»ããã©ã®ä»çµã¿ãå©ç¨ãã¦ã1 nodeã«å¯¾ããåå¾ã®ä¸¦åæ°ã 3 ã«å¶éãã¦ãã¾ãã
ã»ããã©ãåå¾ã§ããªãã£ã node ã¯ããã°ããå¾ ã£ããã¨ã« Consul Service ã®æ¤ç´¢ãããªãã©ã¤ãã¾ãããã®æç¹ã§åå¾ãçµãã£ã node ã¯é å¸ node ã¨ãªã£ã¦ãããããå¢ããé å¸ node ã®ä¸ããã©ã³ãã ã«é¸æãããã¨ã§è² è·ã忣ãã¾ãã
ã¾ããConsul 0.6 以éã§ã¯ Consul Agent éã§ãããã¯ã¼ã¯çãªè·é¢ã測å®ãã¦ãã¾ããServiceãæ¤ç´¢ããã¨ãã« near=_agent
ã¨ããã¯ã¨ãªããããã¨ã§ãèªåã¨è¿ã node ãåªå
çã«é¸æãããã¨ãã§ãã¾ãã
ããã«ãã£ã¦ãAWSã® AZ (Availiability Zone)éã®ããã«ãããã¯ã¼ã¯éã«è·é¢ãããå ´åã§ããèªåã¨è¿ãã¨ããããåå¾ãããã¨ã§å¹çãä¸ãããã¨ãã§ãã¾ãã
ã¾ããåå¾ã«ãã£ã¦å¸¯åã使ãå°½ãããªãããã« -fetch-rate
ã¨ãããªãã·ã§ã³ã§ãåå¾ã«ä½¿ç¨ãã帯åãå¶éãããã¨ãã§ãã¾ããããã¯æä½ã® shapeio ã¨ããã©ã¤ãã©ãªã§å®ç¾ãã¦ãã¾ãã
https://github.com/fujiwara/shapeio
å®éã©ããªæã?
ãã¡ã¤ã«ãã©ã®ããã« node éã§ä¼éãã¦ãã£ãã®ããã Consul KV ã«ä¿ç®¡ãã¦ããã¦ãgraphviz ã® dot å½¢å¼ã§åºåããæ©è½ãããã¾ãã
$ curl "http://localhost:8900/test.gz?graph" > graph.dot $ curl "http://localhost:8900/test.gz?graph&format=svg" > graph.svg
node ã« graphviz (dot
ã³ãã³ã) ãã¤ã³ã¹ãã¼ã«ããã¦ããã°ãformat=(svg|png)
ãªã©ã¨æå®ãããã¨ã§å¤æå¾ã®ç»åãåå¾ãããã¨ãã§ãã¾ãã
å®éã« 135MB ã®ãã¡ã¤ã«ã AWS ä¸ã§ c4.large ã¤ã³ã¹ã¿ã³ã¹ 50å°ãmulti-az æ§æã§é å¸ (sync弿°ä»ã) ãã¦ã¿ãã°ã©ãã¯ä»¥ä¸ã®ããã«ãªãã¾ããã
å ¨ node ã«ãã¡ã¤ã«ãé å¸å®äºããã¾ã§ã«ç´18ç§ã§ãããc4.large ã¤ã³ã¹ã¿ã³ã¹ã§ã¯ãããã 70MB/sec ç¨åº¦ã®ãããã¯ã¼ã¯é度ããåºãªãããã1å°ã«å¯¾ãã¦å ¨å°ãåå¾ããã¨100ç§è¿ããããã¯ãã®ã¨ããã忣é å¸ã«ãã£ã¦é«éåãã¦ããã®ãåããã¾ãã
(æåã§) AZ ãã¨ã«è²ãä»ãã¦ã¿ãã¨ä»¥ä¸ã®ããã«ããããããã« AZ å ãåªå ãã¦ãã¡ã¤ã«ãæµãã¦ãã£ã¦ãããã§ããæåã«å AZ ã®ãéä¸ãã¦ããã®ã¯ããããã¯ã¼ã¯çã«è¿ããã Consul Event ã®ä¼éãæ©ããã®ããå ã«ã»ããã©ãåå¾ãããããã¨æããã¾ãããã®è¾ºã¯å·¥å¤«ã®ä½å°ãããããã§ãã
å¶é
- Consul Service ã®ã¿ã°ã§ãã¡ã¤ã«ã管çãã¦ããé½åä¸ã大éã®ãã¡ã¤ã«ã¯æ±ããªãæ¹ãããããã§ã
- 試ãã«1000ãã¡ã¤ã«ãç»é²ãã¦ã¿ã¦ãç¹ã«åé¡ã¯åºã¾ããã§ããããå°ãããã¡ã¤ã«ã§ã¯Consul APIãå©ããªã¼ãã¼ãããããããããæ®éã«HTTPã§é ããããã ãã¶é ããªãã¾ã
- ãã¡ã¤ã«ã«ãã£ã¬ã¯ããªé層ã¯ä»ãããã¾ãã
- é¢åã ã£ãã ããªã®ã§ãã®ãã¡ç´ããã
ã¨ãããã¨ã§ãã¾ã åãå§ããã°ããã§æ¬çªæå ¥ããã¦ãã¾ããããèå³ã®ããããã¯ã試ãããã ããã¨å¹¸ãã§ãã
ãªãã¸ããªã® docker ãã£ã¬ã¯ããªä»¥ä¸ã§ make up
ã¨ããã¨ãdocker-compose ã§ 8 node ã®ã¯ã©ã¹ã¿ãèµ·åããã®ã§ã試ãã®ã¯ãã¡ãããæè»½ã§ãã