July Tech Festa 2014 slides #techfesta #consul
ABOUT CONSUL6/22/2014@ijin July Tech Festa 2014
View Slide
ABOUT ME (@IJIN)• Michael H. Oshita • Japanese American • 10+ Years in Japan • Software/Infra/Cloud Engineer • http://ijin.github.io
ABOUT ME (@IJIN)τϥϒϧˑ͠Ύʔͨʔͣ
τϥϒϧˑ͠Ύʔͨʔͣ #08http://bit.ly/torash08
CONSUL
CONSULHTTP APIͱDNSͰૢ࡞͕Ͱ͖ΔࢄܕΫϥελ
SERVICE DISCOVERY• ؆୯ʹserviceΛొ͠ɺࣗಈͰΫϥελ্Ͱݕग़Մೳ • DNS·ͨHTTPʹΑͬͯࢀর
FAILURE DETECTION• ϔϧενΣοΫػೳ • ࢮΜͩϊʔυͷϦΫΤετᷖճ !
MULTI DATACENTER• ෳͷσʔληϯλʔΛ·͍ͨͰ௨৴ • ଞͷDC্Ͱͷserviceͷࢀর
KEY/VALUE STORE• ಈతͳઃఆใͷஔ͖ॴͱͯ͠ • Long PollingͰઃఆมߋͷଈ࣌௨
TECHNOLOGY• Consensus Protocol (Raft, FSM) In Search of an Understandable Consensus Algorithm - Stanford University • Gossip Protocol (Serf) SWIM: Scalable Weakly-consistent Infection-style Process Group Membership - Cornel University • Sessions (Chuby) The Chubby Lock Service for Loosely-Coupled Distributed Systems - Google • TLS, Jespen Testing !
ARCHITECTURE
CONSISTENCY
CONSISTENCYdefault !!consistent: !!stale:"?state" or "?consistent" parameterɾେମStrongly Consistent ɾ৽Leaderঢ֨࣌ʹstale readͷՄೳੑ͋Γɻ ɾ͍ !ɾStrongly Consistent ɾLeaderQuromͰ֬ೝ ɾLatency͕ൃੜ͢ΔͷͰएׯΊ !ɾStale Readɺޡࠩ֓Ͷ50ms͙Β͍ ɾLeaderҎ֎ͷServer͕ԠՄ ɾߴ
CONSUL AGENTNodes & Servicesfoo bar bazredis 01.web 02.webnodeservice
CONSUL AGENT• DNS Interface • HTTP API • Health Check !
CONSUL AGENTDNS Interface.node..Node Lookup:
CONSUL AGENTDNS Interface
CONSUL AGENTDNS Interface..service.Service Lookup:
CONSUL AGENTDNS CACHINGStale Reads ɾࢀরσϑΥϧτͰLeader NodeͷΈ ɾ༗ޮԽ͢ΔͱଞͷServer Node͔ΒࢀরՄೳ ɾεϧʔϓοτ্ ɾmax_staleͰ࣌ؒΛઃఆ !TTL ɾDNS TTLσϑΥϧτͰ0 ɾdnsmasqͰΩϟογϡՄೳʹ {"dns_config": {"service_ttl": {"*": "5s","web": "30s"}}new! (0.3.0)
CONSUL AGENTHTTP API/v1/kv/key/value endpoint:RESTful:GET, PUT, DELETE
CONSUL AGENTHTTP APIkey/value:base64raw
CONSUL AGENTHTTP API/v1/agent/checks/v1/agent/services/v1/agent/members/v1/agent/self/v1/agent/join//v1/agent/force-leave//v1/agent/service/deregister/agent endpoint:/v1/agent/register/v1/agent/deregister//v1/agent/pass//v1/agent/warn//v1/agent/fail//v1/agent/service/register
CONSUL AGENTHTTP API/v1/catalog/register/v1/catalog/deregister/v1/catalog/datacenters/v1/catalog/nodescatalog endpoint:/v1/catalog/services/v1/catalog/service//v1/catalog/node/
CONSUL AGENTHTTP API/v1/health/node//v1/health/checks//v1/health/service//v1/state/health endpoint:
CONSUL AGENTHEALTH CHECK{"service": {"check": {"script": "curl localhost > /dev/null 2>&1","interval": "10s"}}check definition:
CONSUL AGENTHEALTH CHECKExit Code 0 - Check is passing!Exit Code 1 - Check is warning!Any Other - Check is failingcheck script:
CONSUL AGENTHEALTH CHECK
BLOCKING QUERIESɾLong PollingΛͬͯঢ়ଶมߋΛଈ࣌ݕ !ɾԠλΠϜΞτ͔࣌ҟৗൃੜ࣌ !?wait=&index=
USE CASESɾInternal DNS !ɾInventory Management !ɾFailover
DEMO
BENCHMARKGET8 CPU Cores, 2Ghz 16GB RAM 160GB SSD disk 1Gbps NICRequests/secrps0 2750 5500 8250 1100010,469.541,054.031v0.2.0 v0.3.0
BENCHMARKGETresponse time distribution# of responses0.003000.006000.009000.0012000.00response time (s)0.001 0.007 0.014 0.017 0.023 0.030 0.033 0.062 0.094 0.125 0.156v0.2.0 v0.3.08 CPU Cores, 2Ghz 16GB RAM 160GB SSD disk 1Gbps NIC
WEB UI
CONSUL-APILibrary in GOhttps://github.com/armon/consul-api
IN CLOSINGconsulΠΠΑʂ