Share
Embed
Transcript
62 slides
-
Cloud connect the world as a Glue AWS Dev Day
2017 Track 2 Masahiro Nagano @kazeburo -
Me • Masahiro Nagano / խ • @kazeburo • Mercari,
Inc Principal Engineer Site Reliability Engineering (SRE) Team • BASE, Inc Technical Advisor -
SRE • Site Reliability Engineering ͷུ • Google ͷӡ༻νʔϜΛ͍Δ Ben
Treynor ͕ఏএ • Google ͷ༷ʑͳϓϩμΫτɾαʔϏεΛԣஅͯ͠ɺιϑτΣΞΤ ϯδχΞϦϯάΑΓαΠτ/αʔϏεͷ৴པੑΛ্ͤ͞Δ Software Engineering/Teamͱͦͷ࣮ફ = Google SRE -
Google SRE • ιϑτΣΞΤϯδχΞ(SWE)ͱͯ͠࠾༻ • ӡ༻ͷۀΛ50%ҎԼʹ͑Δ • 50%ΦϖϨʔγϣϯͷࣗಈԽɺιϑτΣΞͷ৴པੑ্ʹ͋ͯΔ • ΤϥʔόδΣοτͱ͍͏ߟ͑ํ
• SREͱSWEͷSLAΛऔΓܾΊɺརΛҰகͤ͞Δ http://landing.google.com/sre/book.html -
Mercari SRE • ͍ͭͰշద͔ͭ҆શʹར༻Ͱ͖Δʮ৴པੑͷߴ͍ʯαʔϏεͷ࣮ݱ • ʮ৽نαʔϏεͷ։ൃҎ֎ͷΤϯδχΞϦϯάશ෦Δʯ • 2015/11 ʮΠϯϑϥνʔϜʯ͔ΒSRE •
ʮΠϯϑϥʯΑΓαʔϏεࢦ • ݱࡏϝϯόʔʮ6ਓʯઈࢍืूத -
Mercari SRE ͷۀൣғ Operations Software Eng. ج൫ߏங OnCall (োରԠ) Automation
εέʔϥϏϦςΟɾՄ༻ੑվળ ϛυϧΣΞߏங ΞϓϦέʔγϣϯͷઃܭϨϏϡʔ ϩάऩूɾੳج൫ͷߏஙɺӡ༻ αʔόϓϩϏδϣχϯάɾσϓϩΠͷඋ ηΩϡϦςΟʗෆਖ਼ར༻ݕग़ -
Agenda • ϝϧΧϦͱ / ੈք3ڌͰͷ։ൃӡ༻ମ੍ʹ͍ͭͯ • ϝϧΧϦͷΞʔΩςΫνϟ / Ϋϥυͷར༻ •
ڑΛ͑ΔɺੈքΛܨ͙γεςϜ -
Global Development Team Tokyo San Francisco London San Francisco/London ʹΦϑΟε
ݱ࠾༻ɺग़ऀɺظग़ு߹Θͤͯ ΤϯδχΞ໊͕͔Βे໊ -
Global Development Team • Tokyo • ։ൃͷத৺ɻJPʹՃ͑ͯશͯͷregionͷ։ൃ • San Fransisco
• αʔϏεͷϩʔΧϥΠζ • ݴޠ͚ͩͰͳ͘ɺจԽश׳ͷϩʔΧϥΠζ • London • αʔϏε্ཱͪ͛ϑΣʔζ / ݱͷ๏ྩͳͲʹ߹ΘͤͨϩʔΧϥΠζ -
Global Development ͷ͠͞ 10:00 1:00 18:00 9࣌ؒ 7࣌ؒ લ Tokyo
San Francisco London 3ڌἧͬͯإΛ߹ΘͤΔ͜ͱ͕͔ͳΓ͍͠ -
Global Development ͷਐΊํ(1) • ΫϥυΛ׆༻ͯ͠ίϛϡχέʔγϣϯΛਤΔ • ଠฏ༸ɾେ༸Λ·͍ͨͩPull ReqeuestϨϏϡʔ • Slack
• Video Conference • ϦϞʔτϖΞϓϩ(εΫϦʔϯڞ༗) -
Global Development ͷਐΊํ(2) • ཱࣗͨ͠νʔϜͱͯ͠՝ղܾ͢Δ • ϓϩδΣΫτϚωʔδϟͱɺΫϥΠΞϯτ͔ΒαʔόαΠυΤϯ δχΞ·ͰϑϧελοΫͷϓϩμΫτνʔϜΛݱͰ݁ • νʔϜؙ͝ͱग़ு
• iOS/AndroidRegionʹΑͬͯfork͋Δ͍ɺbranchΛ͚ɺޓ͍ ͷӨڹΛݮΒ͢ -
SREͷέʔε • 6ਓͷ͏ͪɺ1ਓ͕ظUSग़ுத • ݱ։ൃͷαʔϏεͷΦϖϨʔγϣϯͷѲ • ि1ͰUSͱͷSync MTG • ே9࣌(PDT
17:00) ʹࣗʹͯ Video Conference • UKͱҊ݅ϕʔεͰ༦ํʹMTG • OnCall ൪ே9͔࣌ΒࣗػɻUS͔Βͷ࡞ۀґཔʹ͋ͨΔ -
Infrastructure history (1) • 2013/07 JP ϦϦʔε • ͘͞ΒΠϯλʔωοτͷVPS 1ʹWebDBͯ͢ࡌͤͨ
• ΠϯϑϥετϥΫνϟઐऀ͍ͳ͍தͰɺۙͳٕज़Λબ • ϦϦʔεޙ2ϲ݄Ͱ͘͞ΒΫϥυɺઐ༻αʔόʹҠߦ͖ͯͨ͠ -
Infrastructure history (2) • 2014/09 US ϦϦʔε • AWS (Oregon)
ʹͯαʔϏεߏங • JPϦϦʔεॳʹൺͯΤϯδχΞ͕૿͑ɺAWSܦݧऀଟ͘ͳͬͨ • ͦΕͰ·ͩΠϯϑϥετϥΫνϟઐऀগͳ͘ɺAWSͷϚωʔδυ αʔϏεΛଟ͘ར༻ͯ͠αʔϏεΛߏங • USࠃͷઐ༻αʔόར༻ݕ౼͕ͨ͠ɺUSͷεέʔϧ༧ͮ͠Β͘ɺ Ϋϥυͷॊೈ͞ΛຊΑΓॏཁࢹͨ͠ -
Infrastructure history (3) • (2015/02 kazeburo ೖࣾ) • 2015/11 SREνʔϜൃ
• ͘͞ΒΠϯλʔωοτͱAWSͷϋΠϒϦουͳΠϯϑϥετϥΫνϟ ͷ্ͷΞʔΩςΫνϟΛਐԽͤ͞ɺ৴པੑͱεέʔϥϏϦςΟͷ্ • 2017/03 UK ϦϦʔε • ৽͍ٕ͠ज़తνϟϨϯδͱͯ͠GCPΛબ -
Architecture • ࡾ+αͳγϯϓϧͳΞʔΩςΫνϟ • Reverse Proxy = nginx Application =
Apache+mod_php Database = MySQL Cache = memcached Search = Solr • ଟ͘Λཧαʔόʹͯߏ • εέʔϧΞοϓεέʔϧΞτߦ͏Diagonal Scaleࢦ • Databaseʹ ioMemory NVMe Λࡌͨ͠αʔόΛ࠾༻ nginx nginx nginx ©2011 Amazon Web Services LLC or its affiliates. All rights reserved. Users Client Multimedia Corporate data center Traditional server Mobile Client WS Management Console IAM Add-on Example: IAM Add-on Human Intelligence Tasks (HIT) Assignment/ Task Requester Workers fic DNS-RR App App App App App App MySQL MySQL memcached memcached util util cloud cloud JP -
Architecture JP ͷΞʔΩςΫνϟΛجຊ౿ऻ EC2/GCE (αʔό) Λத৺ͨ͠ߏ ɾ USಠࣗͷαʔϏε খنʙதنDBʹ RDS
UKͰCloud Load BalancerΛར༻ nginx nginx nginx ©2011 Amazon Web Services LLC or its affiliates. All rights reserved. Users Client Multimedia Corporate data center Traditional server Mobile Client anagement onsole IAM Add-on Example: IAM Add-on man Intelligence Tasks (HIT) Assignment/ Task Requester Workers DNS-RR App App App App App App MySQL MySQL memcached memcached util util US RDS EC2 EC2 EC2 EC2 EC2 EC2 EC2 EC2 EC2 EC2 EC2 EC2 EC2 EC2 EC2 nginx nginx nginx ©2011 Amazon Web Services LLC or its affiliates. All rights reserved. User Users Client Multimedia Corpora data cen Mobile Client Internet AWS Management Console IAM Add-on Example: IAM Add-on Human Intelligence Tasks (HIT) Assignment/ Task Requester Workers Amazon Mechanical Turk Non-Service Specific App App App App App App MySQL MySQL memcached memcached util util GCE cloud load balancer GCE GCE GCE GCE GCE GCE GCE GCE GCE GCE GCE GCE GCE GCE UK -
αʔόத৺ͷ Architecture • ϝϯςϯεϏϦςΟɾεέʔϥϏϦςΟઓུͷڞ௨Խ • গਓͰͷӡ༻ • Ansible Playbook ࠶ར༻
• εέʔϧ͕ઌߦ͍ͯ͠ΔJPͰ࣮͋Δߏ • US Ͱͷ App Store ϥϯΩϯά3ҐͷτϥϑΟοΫͳ͘ӡ༻ • EC2ͷIaaSͱͯ͠ͷύϑΥʔϚϯεɺ৴པੑ͔ͳΓ্͍ͯ͠Δ -
Mercari Architecture ·ͱΊ • 3ͭͷRegionͰ࠾༻͢ΔΠϯϑϥετϥΫνϟ͕ҟͳΔ • JP/US/UK αʔόΛத৺ͱͨ͠ArchitectureΛ࠾༻ • AWSͰΫϥυΒ͍͠ઃܭͤͣɺنͰઌߦ͢ΔJPʹ߹Θͤ
Δ͜ͱͰɺӡ༻ͷڞ௨ԽͱলྗԽ • ϝϧΧϦͰΫϥυΛੵۃతʹ͍ͬͯͳ͍ʁ • JP/US/UK ڞ௨ͷΠϯϑϥετϥΫνϟͰར༻͍ͯ͠·͢ -
Global Infrastructure • Mercari JP/US/UK ͷΠϯϑϥετϥΫνϟಠཱ͍ͯ͠Δ • σʔλΛαʔϏεΛߦ͏ҬʹཹΊΔඞཁੑ • ͍͔ͭ͘ͷΫϥυαʔϏεΛڞ௨ͯ͠ར༻
• ւ֎ͰͷΞΫηεվળ • Ϋϥυͷߴ͍εέʔϥϏϦςΟɾ৴པੑʹΑΓαʔϏεͷՄ༻ ੑΛอͭ -
Global Infrastructure JP US UK DNS: Amazon Route53 CDN: Akamai,
CloudFront Storage: Amazon S3 Analysis: Google BigQuery Common Micro Services ܾࡁ/ྲྀ/Domestic Service ܾࡁ/ྲྀ/Domestic Service ܾࡁ/ྲྀ/Domestic Service ڞ௨ΞʔΩςΫνϟ αʔό͕த৺ ֤Region Ϋϥυ͕த৺ ৴པੑͷߴ͍AWSͷ αʔϏε͕ڬΈࠐΉ -
Amazon Route53 • ߴ͍Մ༻ੑͱ৴པੑͷDNS • Roadworker Λར༻ • github.com/codenize-tools/roadworker •
Routefile ΛGithubͰཧ • Pull RequestͷmergeޙɺCIΛܦ༝ͯ͠ ࣗಈө hosted_zone "mercari.jp." do rrset "api.mercari.jp.", "CNAME" do ttl 30 resource_records( "endpoint-api.mercari.jp" ) end end #Routefile PR Github Travis-CI Route53 -
Amazon Route53 + HealthCheck • DNS-RR ӡ༻࣌ͷ • αʔόো࣌ʹDNSͷॻ͖͑ʹ͕͔͔࣌ؒΔ •
ϒϥβͳͲͷҰ෦ΫϥΠΞϯτDNS-RRͷ߹ɺҰ෦ͷαʔόʹଓ͕Ͱ͖ ͳ͍߹ɺଞͷαʔόଓ͢͠ͷͰোʹΑΔӨڹେ͖͘ͳΓʹ͍͘ɻ • ϚΠΫϩαʔϏεԽ͕ਐΉͱ༷ʑͳϒϥβҎ֎ͷΫϥΠΞϯτ͕ଓ͢Δɻ ଟ͘DNS-RRͷো࣌ͷ࠶ଓ࣮͞Εͯͳ͍ • Route53 ͷ Health CheckΛ͍ղܾ(Λݕূத) -
Route53 + Health Check with Roadworker [“153.x.y.150”, "153.x.y.151"].each do |ip|
rrset "endpoint-ha.mercari.jp.", "A" do ttl 30 weight 1 set_identifier “endpoint-ha-“ + ip.gsub(/\./,'-') health_check "http://#{ip}/hc", :request_interval => 30, :failure_threshold => 3 resource_records( "#{ip}" ) end end Health CheckʹΑΓ DNS-RR ͰՄ༻ੑΛߴΊΒΕΔ #Routefile -
(ͦΕ·͕͢) ෦ DNS • શͯͷαʔόʹunboundΛಋೖ • ϩʔΧϧΩϟογϡʹΑΔύϑΥʔϚϯε্ • resolv.confΑΓՄ༻ੑ্͕͕Δ •
DNSαʔόͷunboundͰϦΫΤετΛৼΓ͚ • *.local BIND͕ݖҖαʔό • *.consul consul DNS interface App App App App App App DNS DNS unbound unbound unbound unbound unbound unbound DNS unbound Consul/DNS BIND *.consul *.local -
(ͦΕ·͕͢) ෦DNSͰCNAME • ෦DNSͰϚωʔδυαʔϏεͷΤϯυϙΠϯτͷCNAMEΛઃఆ • ΞϓϦέʔγϣϯ͔ΒଓCNAMEܦ༝ • ϚωʔδυαʔϏε͔ΒϚωʔδυαʔϏεͷҠߦɺϚωʔδυ αʔϏε͔ΒEC2ͷҠߦɺ·ͨͦͷٯͷҠߦ͕Γ͍͢ db-cstool-master
IN CNAME cstool-db.XXXXX.us-west-2.rds.amazonaws.com. -
Amazon S3 • ߴ͍Մ༻ੑͱ৴པੑͷετϨʔδ • ը૾ɺϩάɺσʔλϕʔεͷόοΫΞοϓͳͲ͋ΒΏΔσʔλ Λ֨ೲ • IAMΛར༻ͨ͠ߴͳΞΫηεཧͱૄ݁߹ͷ࣮ݱ •
αϒγεςϜ͔ΒͷσʔλΠϯϙʔτɾΤΫεϙʔτ • ֎෦αʔϏεɾύʔτφʔͱͷσʔλड͚͠खஈ -
͋ΒΏΔσʔλͷετϨʔδ: ը૾ App App App App App App Client Multimedia
Corporate data center Traditional server Mobile Client ent IAM Add-on Example: IAM Add-on ligence HIT) Assignment/ Task Requester Workers ը૾σʔλಉظతʹॖখ/Ξοϓϩʔυ AWS SDK for PHPΛར༻ɻෳͷը૾Λฒߦͯ͠PUT্ͯ͠ ग़! ඦສຕ/day -
͋ΒΏΔσʔλͷετϨʔδ: ϩά Log Log ΞΫηεϩάʗΤϥʔϩάͳͲ֤छϩάfluentܦ༝Ͱूͯ͠S3ʹ֨ೲ aws-cli ·ͨ fluent-plugin-s3 batch +
aws-cli > 1TB/day App App App App App App -
͋ΒΏΔσʔλͷετϨʔδ: όοΫΞοϓ MySQL Master MySQL BackupSlave MySQLຖxtrabackup(ि1Ͱmysqldump) backup༻slave͔ΒbackupΛऔಘɻaws-cliͰసૹ > 1.2TB(ѹॖࡁ)/day
xtrabackup + aws-cli MySQL Master MySQL BackupSlave -
Amazon S3 as a Hub MySQL SaaS / ࣾ Microservices
+ IAM ػցֶशʗෆਖ਼ݕ ྲྀɾܾࡁ ৴པੑͷߴ͍S3ΛHubͱͯ͠ɺૄ݁߹Λ࣮ݱ SFTP Partner goofys App App App App App App nginx nginx nginx consulͰઃఆΛ σʔλͷimport/export ACL ML API ML API ֶशσʔλͷimport -
ࠃͱࠃ֎ͷϨΠςϯγ ੴ AWS ౦ GCP 18ms 70-100ms 140ms GCP 6ms
͍͍ͩͨͷ ଠฏ༸/ถେ/େ༸ͱΑΓɺੴङԕ͍ -
ߴϨΠςϯγڥͰͷHTTPS௨৴ • ௨ৗͷTCP HandshakingʹՃ͑ճͷΓͱΓ͕ඞཁ • RTT 26msecͰHTTPSͷ௨৴Λߦͳͬͨ߹ɺ200msecҎ্͔͔Δ • RTT 100msec͑Δͱɺ600msecҎ্
• ࢀߟ) mercari APIͷϨεϙϯελΠϜ(90percentile) 100msec -
ΫϥΠΞϯτ͔Βͷଓվળ • CDNΛར༻͢Δ • Cloudfront, Akamai, Fastly • ΫϥΠΞϯτۙ͘ʹ͋ΔCDNͷΤοδαʔόͱTLS Handshaking
• CDN ͱ Origin ؒίωΫγϣϯूઐ༻ωοτϫʔΫΛར༻͢ Δ͜ͱͰߴԽ • www.mercari.com CDNΛར༻ -
CDNͷར༻: mercari Web JP US UK mercari.com/ mercari.com/jp/ mercari.com/uk/ CDN
azon Web Services LLC or its affiliates. All rights reserved. Client Multimedia Corporate data center Traditional server Mobile Client AM Add-on Example: IAM Add-on Assignment/ Task Requester Workers ©2011 Amazon Web Services LLC or its affiliates. All rights reserved. Users Client Multimedia Corporate data center Traditional server Mobile Client anagement nsole IAM Add-on Example: IAM Add-on man Intelligence Tasks (HIT) Assignment/ Task Requester Workers ©2011 Amazon Web Services LLC or its affiliates. All rights reserved. Users Client Multimedia Corporate data center Traditional server Mobile Client et AWS Management Console IAM Add-on Example: IAM Add-on Human Intelligence Tasks (HIT) Assignment/ Task Requester Workers on l Turk vice Specific ©2011 Amazon Web Services LLC or its affiliates. All rights reserved. User Users Client Multimedia Corporate data center Traditional server Mobile Client Internet AWS Management Console IAM Add-on Example: IAM Add-on Human Intelligence Tasks (HIT) Assignment/ Task Requester Workers Amazon Mechanical Turk Non-Service Specific ©2011 Amazon Web Services LLC or its affiliates. All rights reserved. User Users Client Multimedia Corporate data center Traditional server Mobile Client Internet AWS Management Console IAM Add-on Example: IAM Add-on Human Intelligence Tasks (HIT) Assignment/ Task Requester Workers Amazon Mechanical Turk Non-Service Specific ©2011 Amazon Web Services LLC or its affiliates. All rights reserved. User Users Client Multimedia Corporate data center Traditional server Mobile Client Internet AWS Management Console IAM Add-on Example: IAM Add-on Human Intelligence Tasks (HIT) Assignment/ Task Requester Workers Amazon Mechanical Turk Non-Service Specific ©2011 Amazon Web Services LLC or its affiliates. All rights reserved. User Users Client Multimedia Corporate data center Mobile Client Internet AWS Management Console IAM Add-on Example: IAM Add-on Human Intelligence Tasks (HIT) Assignment/ Task Requester Workers Amazon Mechanical Turk Non-Service Specific ©2011 Amazon Web Services LLC or its affiliates. All rights reserved. User Users Client Multimedia Mobile Client Internet AWS Management Console IAM Add-on Example: IAM Add-on Human Intelligence Tasks (HIT) Assignment/ Task Reques Workers Amazon Mechanical Turk Non-Service Specific ©2011 Amazon Web Services LLC or its affiliates. All rights re User Users Client Mul Mobile Client Internet AWS Management Console IAM Add-on Example: IAM Add-on Amazon Mechanical Turk Human Intelligence Tasks (HIT) Assignment/ Task Workers Amazon Mechanical Turk Non-Service Specific ੴङDC -
ΞϓϦέʔγϣϯ͔ΒΫϥυΞΫηε • ΞϓϦέʔγϣϯͰHTTPS௨৴ͷKeepAliveΛߦ͏ • PHP ApplicationͰͷKeepAlive͍͠ • ϦΫΤετॲཧޙʹϝϞϦ͕ΫϦΞ͞Εɺ TCPଓΕΔ •
ϚϧνϓϩηεͰ͋ΓɺKeepAliveͯ͠ޮ͕ѱ͍ • => ͦ͜Ͱ Connection PoolingΛతͱͨ͠ Proxy ServerΛ։ൃ -
chocon % curl -H ‘Host: example.com.ccnproxy-https’ http://10.0.0.1/v1/foo *.ccnproxy-https IN CNAME
chocon.local. ෦DNSΛ׆༻͢ΔͱURLͷϗετ໊Λมߋ͢Δ͚ͩ chocon Web Client https://example.com/ ʹproxy http http or https keepAlive Private Network % curl http://example.com.ccnproxy-https/v1/foo -
Before chocon $ ./httpstat.sh /dev/null https://microservice.example.com/hc HTTP/1.1 200 OK Server:
nginx/1.11.5 Date: Thu, 01 Jun 2017 00:43:49 GMT Content-Type: application/json; charset=utf-8 Content-Length: 22 Expires: Thu, 01 Jun 2017 01:43:49 GMT Cache-Control: max-age=3600,public Body stored in: /tmp/httpstat-body.263264511496278239 DNS Lookup TCP Connection SSL Handshake Server Processing Content Transfer [ 2ms | 24ms | 197ms | 25ms | 0ms ] | | | | | namelookup:2ms | | | | connect:26ms | | | pretransfer:223ms | | starttransfer:248ms | total:248ms -
After chocon $ ./httpstat.sh /dev/null https://microservice.example.com.ccnproxy-https/hc HTTP/1.1 200 OK Cache-Control:
max-age=3600,public Content-Length: 22 Content-Type: application/json; charset=utf-8 Date: Thu, 01 Jun 2017 00:43:49 GMT Expires: Thu, 01 Jun 2017 01:43:49 GMT Server: nginx/1.11.5 X-Chocon-Req: bSCzJrCMZ9wbRN8TYhZ3wV Body stored in: /tmp/httpstat-body.390174181496278775 DNS Lookup TCP Connection Server Processing Content Transfer [ 1ms | 1ms | 19ms | 0ms ] | | | | namelookup:1ms | | | connect:2ms | | starttransfer:21ms | total:21ms -
Why chocon? • ࣅͨmiddlewareݟ͔ͭΒͳ͍ • ୯७ͳforward proxyͰHTTPS௨৴ͷूͰ͖ͳ͍ • HTTPSend to
endͰ҉߸ԽɻMITM Proxy͕ඞཁʹͳΔ • Goݴޠඪ४ͷHTTP/2ʹΑΓޮͷྑ͍ूɺߴͳΞΫηε͕ظ -
chocon in JP App App App App App App App
App chocon DC(Cloud) Cloud(DC) Microservices SaaS Cloud API endpoint 90msec ͕19msec ͱੴङ౦ژؒͷRTT࣮ଌ·Ͱվળ AWS SDKendpointΛΓସ͑Δ͜ͱͰར༻Մೳ http or https keepAlive -
chocon & Pacific Ocean App App App App chocon US
Cloud HTTPS, HTTP/2 Keepalive 100msecఔ·ͰԆ͕͑ΒΕɺଞRegionͱͷ࿈ܞͷ࣮ݱɻ USͷઌਐతͳΫϥυαʔϏεʹΞΫηε͘͢͠ͳΔ Cloudfront/CDN ւఈέʔϒϧ -
·ͱΊ • ϝϧΧϦ JP/US/UK ͷ3ڌͰαʔϏεల։ɺ։ൃߦ͏ • ֤RegionαʔόΛத৺ͱͨ͠ڞ௨ͨ͠ΞʔΩςΫνϟ • άϩʔόϧͰAmazon Route53,
Amazon S3ͷߴ͍৴པੑʹࢧ͑ΒΕ͍ͯΔ • ੈքΛ݁ͿͨΊʹΫϥυαʔϏεಠࣗ։ൃͷιϑτΣΞΛར༻