Share
Embed
SRE大全 メルカリ編 後半 #hbstudy 75 / SRE Taizen Mercari 2 hbstudy#75
SRE大全 メルカリ編 後半 hbstudy#75
kazeburo
August 02, 2017
Transcript
47 slides
-
AGENDA • ޙ • PHP ΞϓϦέʔγϣϯͷ࠷దԽࣄྫ • ηΩϡϦςΟͷऔΓΈ(ύεϫʔυϦετ߈ܸࣄྫ) • ϝϧΧϦSREͷࠓޙ
• SREͷׂͷݱࡏͱະདྷɺϚΠΫϩαʔϏε -
JSONಡΈࠐΈ • 1ͷαʔόͰར༻͞Εͨmessage keyΛϩάʹهɺΑ͘ར༻͞ΕΔ messageΛಛఆ • grep | sort |
uniq -c | sort -n • Α͘ར༻͞ΕΔmessage͚ͩΛूΊͨ essential.json Λ࡞ • ϕϯνϚʔΫ All: 9msec => Essential: 1msec ҎԼ -
େྔͷྫ֎Ϋϥε • αʔό্Ͱى͖͍ͯΔ࣮ࡍʹى͖͍ͯΔྫ֎Λूܭ • ൃੜ݅ͷଟ͍ͷΛ app_exception_base.php ʹΓग़͢ • ϕϯνϚʔΫ 10msec
=> 1msec • try-catchͰϩάʹͰͳ͍ͷ͋ͬͨ -
PHP(Opcache) ಈ࡞Πϝʔδ memory Destroy!! start end DB API shared mem
php php php php php php php php php Response Request OPCODE Copy ࣮ߦ ࣮ߦ ࣮ߦ ίϯύΠϧ݁ՌͰͳ͘ɺOPCODEΛcache͓ͯ͠Γɺhashclassߏங = ϦΫΤετΛ͑ͯcache͢Δͷ͍͠ -
ϘτϧωοΫΛ୳͢ํ๏ • NewRelic • σʔλϕʔεɺmemcachedɺ֎෦APIͷݺͼग़͠ճͱ࣌ؒɻN+1ɺpreload࿙Εͷൃݟ • PHP෦ͷτϨʔεͰ͖Δ • strace •
System Call ͷτϨʔε • PHP෦Ͱى͖͍ͯΔ͜ͱτϨʔεͰ͖ͳ͍ • System CallͱιʔείʔυΛݟൺͯϘτϧωοΫΛ୳͢ => Ͳ͏ͬͯʁ -
strace $ sudo strace -tt -s 256 -p $(pgrep -n
-f httpd) |& tee strace.txt 15:29:31.122566 read(20, “GET /...) 15:29:31.122844 stat( ... 15:29:31.123914 getcwd("/", 4095) = 2 15:29:31.123936 chdir(“/var/www/vhosts/app/webroot") = 0 15:29:31.123966 setitimer(ITIMER_PROF, {it_interval={0, 0}, it_value={60, 0}}, NULL) = 0 15:29:31.123987 fcntl(18, F_SETLK, {type=F_RDLCK, whence=SEEK_SET, start=1, len=1}) = 0 15:29:31.125310 open(“/var/www/vhosts/app/foo/bar.json”) = 0 ## Ctrl-C $ less strace.txt PHP ෦ͷಈ࡞traceͰ͖ͳ͍ ιʔείʔυͱরΒ͠߹ΘͤΔʹώϯτͱͳΔsystem call͕΄͍͠ => OpcacheͷઃఆΛΈΔ -
php.ini in Production opcache.enable = 1 opcache.revalidate_freq = any opcache.validate_timestamps
= 0 ࠷େੑೳ opcache.enable = 1 opcache.revalidate_freq = 1 opcache.validate_timestamps = 1 ϝϧΧϦӡ༻த ϑΝΠϧͷߋ৽νΣοΫ͠ͳ͍ ϑΝΠϧͷߋ৽νΣοΫ͢Δ 1ඵ͝ͱʹνΣοΫ nginx dynamic upstreamΛ͍ɺbalancer͔Β֎ͯ͠ɺ rsync => 1ඵsleep ͯ͠balancerʹ͢ -
php.ini for strace opcache.enable = 1 opcache.revalidate_freq = 0 opcache.validate_timestamps
= 1 TUSBDF࣮ߦ༻ ຖϦΫΤετͰνΣοΫ͢Δ 18:21:01.253488 stat("/var/www/current/app/webroot/index.php", {st_mode=S_IFREG|0644, st_size=356, ...}) = 0 18:21:01.253572 stat("/var/www/current/dietcake/dietcake.php", {st_mode=S_IFREG|0644, st_size=1013, ...}) = 0 18:21:01.253697 stat("/var/www/current/dietcake/core/exception.php", {st_mode=S_IFREG|0644, st_size=46, ...}) = 0 18:21:01.253775 stat("/var/www/current/dietcake/core/inflector.php", {st_mode=S_IFREG|0644, st_size=289, ...}) = 0 .... 18:21:01.254005 stat("/var/www/current/dietcake/core/dispatcher.php", {st_mode=S_IFREG|0644, st_size=1300, ...}) = 0 18:21:01.254044 stat(“/var/www/current/app/aaaaaaa.php", {st_mode=S_IFREG|0644, st_size=5457, ...}) = 0 18:21:01.254135 stat("/var/www/current/app/app_xxx.php", {st_mode=S_IFREG|0644, st_size=10423, ...}) = 0 18:21:01.254618 stat("/var/www/current/app/app_exception.php", {st_mode=S_IFREG|0644, st_size=45680, ...}) = 0 18:21:01.257390 stat("/var/www/current/app/app_yyy.php", {st_mode=S_IFREG|0644, st_size=1133, ...}) = 0 -
App࠷దԽͷϞνϕʔγϣϯͱλΠϛϯά • Appαʔό͕૿͑Δͱ • ނো͕૿͑ɺσϓϩΠ࣌ؒ৳ͼΔ • AppαʔόΛ૿ͯ͘͠ͳΔͷ͛Δ͕ɺϨεϙϯε͕มΘΒͳ͍ • ϝϧΧϦͰAppαʔόͷCPU༻͕ఆظతʹ50%Λ͑࢝ΊͨΒରࡦΛߦ͏ •
αʔόͷՃ or ΞϓϦέʔγϣϯͷίʔυͷ࠷దԽ • قઅతཁҼͰΞΫηε͕૿͑ΔͷͰɺ࣌ؒͷ͋Δͱ͖ʹ४උɾ࠷దԽͷωλΛ͓ͬͯ͘ • αʔόαΠυΤϯδχΞͱऔΓΉ͜ͱ͕Ͱ͖Εͳ͓ྑ͍ • SREݚमͰऔΓΉͳͲ -
େنͳύεϫʔυϦετ߈ܸ • ੈքத͔Β߈ܸ͕ߦΘΕΔ • 2016ʹ࣮ࡍʹى͖ͨ߈ܸͷΞΫη εݩͷࠃ • 1IPʹ͖ͭɺճͷϩάΠϯࢼߦͰ ͋ΓɺࣗಈͰ͛ͳ͍ ͦͷଞ
18% Armenia 2% Azerbaijan 2% Bahrain 2% Georgia 2% Japan 2% Russian 2% Indonesia 3% Nepal 3% Pakistan 5% Thailand 5% Taiwan 6% Viet Nam 6% Brazil 10% India 30% -
େنͳύεϫʔυϦετ߈ܸͷඋ͑ • ߈ܸ͞Ε͍͢Web൛ͰCAPTCHAΛಋೖ • Client Reputation ͷར༻ • GeoIP •
Anonymous proxy detection • IP Reputation -
߈ܸݩIP Reputation -PX .JEEMF )JHI 4ׂ͙͜ͱ͕Ͱ͖ͨՄೳੑ͕͋Δ* ༷ʑͳใϦιʔεΛΈ߹ΘͤͯαʔϏεͷ҆શੑΛߴΊ͍ͯ·͢
* ߈ܸͷ͋ͬͨλΠϛϯάͷreputationͰͳ͍ͷͰଟগζϨ͕͋Γ·͢ -
Mercari SRE (࠶ܝ) • ͍ͭͰշద͔ͭ҆શʹར༻Ͱ͖Δʮ৴པੑͷߴ͍ʯαʔϏεͷ࣮ݱ • ʮ৽نαʔϏεͷ։ൃҎ֎ͷΤϯδχΞϦϯάશ෦Δʯ • ʮ։ൃʯͱʮӡ༻ʯͷ •
Productionڥͷ࡞ۀશൠΛSRE͕ड͚࣋ͭ -
Mercari SREͷҐஔ͚ͮ ։ൃνʔϜ SRE BOT Infrastructure σʔλϕʔε࡞ۀ/ௐࠪґཔ εΩʔϚ/ΞʔΩςΫνϟ૬ஊ ߏஙʗӡ༻ σʔλϕʔε࡞ۀ
ௐࠪ ߏஙɾར༻ σϓϩΠ Log ಗ໊DB ར༻ ར༻ ө/ࢀর ௐࠪͷڠྗɺमਖ਼ґཔ -
MicroserviceԽ • ։ൃऀʹ Ownership • ։ൃ৫ͷεέʔϥϏϦςΟͱॊೈੑΛߴΊɺαʔϏεΛΑΓ͍͛ͯ͘ • ʮϝϧΧϦνϟϯωϧʯͳͲͷ৽͍͠ػೳ • AtteΧϧͳͲͷ࿈ܞΞϓϦ
• Ҭ͝ͱͷಠࣗαʔϏε => US/UKͰਐΜͰ͍Δ -
Microservice in US ©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 Tasks (HIT) Task Mechanical Turk Non-Service Specific backend for frontends GKE Core/طଘAPI protobuf JSON over HTTPs GRPC Service A Service B Spanner GKE GKE Deployج൫ SaaS PubSub -
MicroserviceԽʹΉ͚ͯ • Requirements(ཁ݅)ͷࡦఆ • Microserviceج൫ͷߏங • Deploy, Log, Database, Monitoring...
• ຊ൪ͷΞʔΩςΫνϟͱͯ͠ͷ࠾༻ • લਐͭͭ͠՝Λݟ͚ͭɺͻͱͭͻͱͭղܾ͍ͯ͘͠ -
ࠓޙͷMercari SRE ։ൃνʔϜ SRE BOT Infrastructure σʔλϕʔε࡞ۀ/ௐࠪґཔ εΩʔϚ/ΞʔΩςΫνϟ૬ஊ ߏஙʗӡ༻ σʔλϕʔε࡞ۀ
ௐࠪ ߏஙɾར༻ σϓϩΠ Log ಗ໊DB ར༻ ར༻ ө/ࢀর ௐࠪͷڠྗ मਖ਼ґཔ Microserviceج൫ Mircoservice Infrastructure σϓϩΠ ߏங ࣗಈԽ͞Εͨӡ༻ -
ࠓޙͷMercari SRE ։ൃνʔϜ SRE BOT Infrastructure σʔλϕʔε࡞ۀ/ௐࠪґཔ εΩʔϚ/ΞʔΩςΫνϟ૬ஊ ߏஙʗӡ༻ σʔλϕʔε࡞ۀ
ௐࠪ ߏஙɾར༻ σϓϩΠ Log ಗ໊DB ར༻ ར༻ ө/ࢀর ௐࠪͷڠྗ मਖ਼ґཔ Mircoservice Infrastructure σϓϩΠ ߏங ࣗಈԽ͞Εͨӡ༻ Microserviceج൫ ϚΠΫϩαʔϏεԽ͕ਐΉ͜ͱͰ ͚ͩ͜͜ʹͳ͍ͬͯ͘ͷ͔ʁ -
ࠓޙͷMercari SRE ։ൃνʔϜ SRE BOT Infrastructure σʔλϕʔε࡞ۀ/ௐࠪґཔ εΩʔϚ/ΞʔΩςΫνϟ૬ஊ ߏஙʗӡ༻ σʔλϕʔε࡞ۀ
ௐࠪ ߏஙɾར༻ σϓϩΠ Log ಗ໊DB ར༻ ར༻ ө/ࢀর ௐࠪͷڠྗ मਖ਼ґཔ Microserviceج൫/Requirement Mircoservice Infrastructure σϓϩΠ ߏங ࣗಈԽ͞Εͨӡ༻ ੵۃతʹؔΘ͍ͬͯ͘ -
ࠓޙͷMercari SRE • Microserviceͷج൫ߏஙɾӡ༻ • SREͷϊϋΛͬͯαʔϏεʹੵۃతؔ༩ • εέʔϥϏϦςΟɺՄ༻ੑͷվળ • ࣗಈԽͷਪਐɺΦϖϨʔγϣϯͷվળ
• ηΩϡϦςΟͷ࣮ࢪ • Globalͳnetwork/infrastructureͷޮӡ༻ -
Mercari SRE More!!! Microservice, Automation, Performance, Scalability Database, Network, Distributed
System, OS, Cloud, Hardware, Security SWE + ༷ʑͳࣝɾܦݧΛੜ͔ͯ͠ ʮ৽ͨͳՁΛੜΈग़͢ੈքతϚʔέοτΛΔʯ ৴པੑΛ࣋ͬͯࢧ͑Δ શํ໘ͰΑΖ͓͘͠ئ͍͠·͢!!