Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Growing Service

Harukasan
September 11, 2014

Growing Service

成長するサービス
pixiv SUMMER BOOTCAMP -2014- / 2014-09-08

Harukasan

September 11, 2014
Tweet

More Decks by Harukasan

Other Decks in Technology

Transcript

  1. ੒௕͢ΔαʔϏε
    ͸Δ͔͞Μ / MICHII Shunsuke
    2014-09-08

    pixiv SUMMER BOOT CAMP -2014-

    View Slide

  2. これまで3つのプロダクト(広告配信、pixiv、BOOTH)の話を聞
    いて、それぞれのプロダクトにどのような技術を使われている
    か、なぜその技術が使われているか、何を考えて設計されてい
    るか、そのようなことについて思いを巡らせてみたかと思いま
    す。どのサービスもそれぞれのバックグラウンドを持っており、
    そして、現在稼働しているサービスがあります。それぞれのサー
    ビスで使われている技術はばらばらだし、1つ1つの技術にそ
    れなりに理由があったり、特になかったりします(動いているの
    は正義です)。みなさんもプロダクトをつくったりしたことがあ
    れば、特に理由もなく新しい技術を採用したりすることもあると
    思います。さて、設計の話はそろそろ飽きたと思うので、今日は
    運用していく上で必要な技術の話をしようと思います。とはい
    え、単に運用の話をしてもおもしろくないと思うので、運用して
    いく上で、どのようなことを考えれば良いかについて話します。

    View Slide

  3. ͸͍

    View Slide

  4. ੒௕͢ΔαʔϏε
    ͸Δ͔͞Μ / MICHII Shunsuke
    2014-09-08

    pixiv SUMMER BOOT CAMP -2014-

    View Slide

  5. View Slide

  6. 2007೥ʹ͸͡·ͬͨྺ࢙͋ΔαʔϏε

    View Slide

  7. View Slide

  8. ໌೔Ͱͪΐ͏Ͳ7೥*
    *αʔϏε։࢝೔͸2007೥9݄10 ೔

    View Slide

  9. ༗࢙(2009೥1݄)Ҏޙ*
    *svnʹ࠷ॳʹίϛοτ͞Ε͔ͯΒ

    View Slide

  10. 8,736,432ߦͷίʔυ͕௥Ճ͞Ε

    7,399,601ߦͷίʔυ͕࡟আ͞Εͨ
    ࣍ͷϫϯϥΠφʔͰܭͬͨɻؒҧͬͯͨΒ͝ΊΜɻ
    git log --follow --shortstat --pretty="format:" . | ruby -e ‘i=0;d=0;STDIN.each{|l|
    i+=l.match(/(\d+) i/).to_a[1].to_i; d+=l.match(/(\d+) d/).to_a[1].to_i; }; puts i,d;’

    View Slide

  11. pixiv
    ブックマーク フォロー フォロー新着 小説フォ
    ロ ー 新 着  お す す め 作 品  ス マ ー ト フ ォ ン 
    circle.ms連携 コメント イラスト投稿 iOSアプリ
    コ ン テ ス ト        イ ベ ン ト 
     
     
     
     
     
     
     
     
     
     
    ゲーム         作品管理 
    ユーザー               ガラケー 
    アンケート              うごイラ 
    タグ  ランキング 地域ランキング 過去ランキング 
    検索 シリーズ フィード タグ詳細 使用ツール 
    Androidアプリ 人気のタグ お知らせ みんなの新着 
    企画目録 フォロー新着  BOOTH連携 注目のタグ
    ૿͑ଓ͚Δػೳ

    View Slide

  12. ૿͑ଓ͚Δσʔλ

    View Slide

  13. ༷ʑͳϓϥοτϑΥʔϜ

    pixiv pixiv touch iOS App. Android App. աڈʹ͸ଞʹ΋

    View Slide

  14. ੒௕ΛࢭΊͳ͍ͨΊʹ͸ԿΛ͢Ε͹ྑ͍͔

    View Slide

  15. Ή͠ΖՃ଎͍ͯ͘͠ʹ͸Ͳ͏͢Ε͹ྑ͍͔

    View Slide

  16. Agenda
    • αʔϏεͷεέʔϥϏϦςΟ
    • ܭଌͤΑ
    • pixivͷέʔεελσΟ

    View Slide

  17. ಺༰Λ٧ΊࠐΈ͗ͨ͢ͷͰ
    ͔ͳΓۦ͚଍Ͱ͢

    View Slide

  18. Scalability
    εέʔϥϏϦςΟ
    Photo: Container Ship https://flic.kr/p/9buvwZ

    View Slide

  19. — Mark D. Hill. 1990. “What is scalability?”.

    SIGARCH Comput. Archit. News 18, 4, 18-21.

    DOI=10.1145/121973.121975
    “͜ͷ࿦จʹ͓͍ͯɺࢲ͸Scalabilityͷ༷૬ʹ͍ͭͯௐࠪͨ͠ɻ͔͠͠ͳ͕
    Βɺ༗༻Ͱݫ֨ͳఆٛΛݟ͚ͭΔ͜ͱ͸ग़དྷͳ͔ͬͨɻࢲ͸γεςϜ͕
    ʮ”Scalable”Ͱ͋Δʯ͜ͱ͸ɺʮ”Modern”Ͱ͋Δʯͱಉ͘͡Β͍ศརͳ
    ݺͼํͱͯ͠࢖ΘΕ͍ͯΔͱஅݴ͢Δɻࢲ͸ɺٕज़ίϛϡχςΟʹର͠ɺ
    ݫ֨ͳఆٛΛఆٛ͢Δ͔ɺ͜ͷ༻ޠΛ࢖͏ͷΛ΍ΊΔ͜ͱΛਪ঑͢Δɻ”

    View Slide

  20. Scalability
    • ֦ுੑ͕ߴ͍͜ͱΛചΓʹ͢ΔγεςϜʹ͓͍ͯ

    Կ͔ͱศརʹ࢖ΘΕ͍ͯΔ༻ޠͷ1ͭ
    • Load Scalability:

    ෛՙʹ͋ΘͤͯϦιʔεΛ૿΍ͨ͠ΓݮΒͨ͠ΓͰ͖Δ
    • ΠϯϑϥΤϯδχΞ͕εέʔϥϏϦςΟͬͯݴͬͨΒ

    ͍͍ͩͨ͜ͷҙຯ
    • ෛՙʹ͋ΘͤͯϦιʔεΛ؆୯ʹ௥ՃɾॖখͰ͖Δ͔
    • ͓ۚΛ͔͚Ε͹Ͳ͏ʹ͔ͳΔ͔Ͳ͏͔

    View Slide

  21. Latency
    ஗Ԇ
    Throughput
    εϧʔϓοτ
    Photo: Julie German https://flic.kr/p/3P5yts
    Photo: Cyril Caton https://flic.kr/p/6bMwku

    View Slide

  22. Throughput
    • ୯Ґ࣌ؒ͋ͨΓʹॲཧͰ͖Δ͔
    • ͲΕ͚ͩͷྔΛॲཧͰ͖Δ͔Λ೺Ѳ͢ΔͨΊͷई౓
    1 container / hour
    1 hour
    source destitnation

    View Slide

  23. Bandwidth (ଳҬ෯)
    10 containers / hour
    1 hour
    • 1ͭͷճઢ͋ͨΓͷཧ࿦্ͷ࠷େεϧʔϓοτ

    View Slide

  24. Increasing Throughput
    1 hour
    • εϧʔϓοτΛ૿΍͢ʹ͸ฒྻ਺Λେ͖͘͢Δ
    30 containers / hour

    View Slide

  25. Latency
    • ॲཧʹ͔͔Δ࣌ؒ
    • ฒྻ਺Λ૿΍ͯ͠΋஗Ԇ͸খ͘͞ͳΒͳ͍
    • ஗ԆΛղܾ͢Δʹ͸ॲཧ଎౓Λ͸΍͘͢Δ͔͠ͳ͍
    1 hour
    1 minute
    ྫ͑͹ϩέοτΛ࢖͏

    View Slide

  26. Latency
    • ஗ԆΛখ͘͢͞Δͱεϧʔϓοτ͸վળ͢Δ
    • ౥ࡌͰ͖Δྔ͕ಉ͡Ͱ͋Ε͹ɺ஗Ԇ͕1/nʹͳΔͱ

    εϧʔϓοτ͸nഒ
    1 hour
    1 minute
    1 containers / hour
    60 containers / hour

    View Slide

  27. Throughput / Latency
    • εϧʔϓοτ:

    γεςϜ͕ॲཧग़དྷΔྔΛ೺Ѳ͢ΔͨΊͷई౓
    • εϧʔϓοτΛվળ͢Δʹ͸
    • ฒྻ਺Λେ͖͘͢Δ
    • ஗ԆΛখ͘͢͞Δ
    • ϨΠςϯγ:

    ฒྻ਺Λେ͖ͯ͘͠΋஗Ԇ͸খ͘͞ͳΒͳ͍

    View Slide

  28. Scaling
    • γεςϜͷεϧʔϓοτΛߴΊΔ͜ͱ
    • ฒྻ਺ΛߴΊΔ
    • ஗ԆΛগͳ͘͢Δ
    !
    • εϧʔϓοτΛߴΊΔͨΊʹ͸
    • νϡʔχϯά
    • εέʔϧΞοϓ/εέʔϧΞ΢τ

    View Slide

  29. Scale up / Scale out
    • ฒྻ਺Λ૿΍͢ʹ͸: ෳ਺ͷαʔόʹॲཧΛৼΓ෼͚Δ
    • ஗ԆΛখ͘͢͞Δʹ͸: αʔόͷεϖοΫΛ͋͛Δ
    Ý
    Ý
    Ý
    Ý
    Ý
    Ý
    Scale Up
    (Vertical Scaling)
    Ý
    Ý
    Scale Out
    (Horizontal Scaling)
    • CPUͷίΞ਺Λ૿΍͢
    • ϝϞϦʹऩ·ΔΑ͏ʹ͢Δ
    • νϡʔχϯά: ॲཧྔΛݮΒ͢=࣮࣭తεέʔϧΞοϓ
    • ෳ਺αʔόʹ෼ࢄͰ͖ΔΑ͏ʹ͢Δ
    • ෼ࢄ͢Ε͹͢Δ΄Ͳεέʔϧ͠ͳ͘ͳΔ
    • 1୆Λഒʹ͢Δʹ͸: 1୆ඞཁ
    • 10୆Λഒʹ͢Δʹ͸: 10୆ඞཁ

    View Slide

  30. Scaling: ·ͱΊ
    • νϡʔχϯά͸εέʔϦϯάͷجຊ
    • νϡʔχϯά͸࣌ؒ΋͓ۚ΋ͦΕ΄Ͳ͔͔Βͳ͍
    • ܭଌ͢Δલʹνϡʔχϯά͢Δͳ: ޙड़
    • εέʔϧΞοϓ
    • ͓ۚΛ͔͚Ε͹Ͳ͏ʹ͔ͳΔΑ͏ʹ͓ͯ͘͠
    • εέʔϧΞ΢τ
    • ෼ࢄͰ͖Δߏ੒͚ͩͭͬͯ͘͠·͑͹૿΍ͤΔ
    • ୆਺͕ଟ͘ͳΕ͹ଟ͘ͳΔ΄Ͳਏ͘ͳΔ

    View Slide

  31. ܭଌͤΑ
    Photo: Docklandsboy https://flic.kr/p/5B4TaF

    View Slide

  32. — Rob Pike. 1989. “Notes on Programming in C”.
    “Rule 1. ϓϩάϥϜ͕Ͳ͜Ͱ࣌ؒΛফඅ͢Δ͜ͱʹͳΔ͔஌Δ͜ͱ͸ग़དྷͳ͍ɻ
    ϘτϧωοΫ͸ࢥ͍͕͚ͳ͍৔ॴͰൃੜ͢Δɺ͕ͨͬͯ͠Ͳ͕͜ϘτϧωοΫ
    ͔ূ໌͢Δ·ͰɺਪଌΛߦͬͨΓεϐʔυϋοΫΛߦͬͯ͸͍͚ͳ͍ɻ”

    View Slide

  33. — Rob Pike. 1989. “Notes on Programming in C”.
    “Rule 2. ܭଌͤΑɻܭଌ͢Δ·Ͱ଎౓ͷͨΊͷνϡʔχϯάΛͯ͠͸ͳΒͳ͍ɺ
    ίʔυͷҰ෦͕࢒Γͷ෦෼Λѹ౗͠ͳ͍ͷͰ͋Ε͹ͳ͓͞ΒͰ͋Δɻ”

    View Slide

  34. ܭଌͤΑ
    • ϦιʔεΛ೺Ѳ͢Δ
    • άϥϑΛΈΔ
    • ϕϯνϚʔΫ

    View Slide

  35. Ϧιʔε
    • ݱ୅ͷPCαʔόʹ͓͚ΔओཁͳϦιʔε(ܭࢉࢿݯ)
    • CPU
    • Memory
    • Disk I/O
    • Network

    View Slide

  36. CPU
    • PCͰ͸ܭࢉҎ֎ʹશମͷ੍ޚ΋CPU͕ߦ͍ͬͯΔ
    • ྫ͑͹IOΛ଴͍ͬͯΔؒ͸ଞͷܭࢉ͕ग़དྷͳ͍
    • ͲΕ͚ͩCPUΛ࢖༻͔ͨ͠Λܭࢉ࣌ؒͰࣔ͢
    • 1࣌ؒͰ1࣌ؒ෼ܭࢉ࣌ؒΛ࢖͏ = ࢖༻཰100%
    !
    • System: Kernel͕࢖༻ͨ͠ܭࢉ࣌ؒ
    • User: ී௨ͷϓϩάϥϜ͕࢖༻ͨ͠ܭࢉ࣌ؒ
    • IO wait: IOͷೖग़ྗ଴ͪΛߦͬͨ࣌ؒ
    • IRQ / Soft IRQ: ωοτϫʔΫ౳ׂΓࠐΈΛॲཧͨ࣌ؒ͠

    View Slide

  37. ϝϞϦ
    • PCͷओهԱ૷ஔ
    • ΊͬͪΌ͸΍͍
    • ϨΠςϯγ:10 ns (SSDͩͱҰ൪଎ͯ͘0.1ms͘Β͍)
    • ΞϓϦέʔγϣϯ࢖༻ྖҬ
    • Ωϟογϡ(ϖʔδΩϟογϡ)
    • ϖʔδΩϟογϡʹࡌ͍ͬͯΕ͹σΟεΫ͔Β

    ಡΈࠐ·ͳͯ͘΋͍͍ʹߴ଎

    View Slide

  38. σΟεΫIO
    • PCͷิॿهԱ૷ஔ
    • ͘͢͝஗͍ͷͰσΟεΫIO͸جຊతʹ0ʹ͢Δ
    • HDD: ΊͬͪΌ஗͍͚Ͳେ༰ྔͰ҆Ձ
    • SSD: ͸΍͍͚Ͳ௿༰ྔͰߴՁ(࠷ۙ͸࠷େͰ1TBҐ)
    • SATA͸ͲΜͳʹ͕Μ͹ͬͯ΋࠷େεϧʔϓοτ6Gb/s
    • ͞Βʹߴ଎ʹ͢Δʹ͸
    • RAID 0 (ετϥΠϐϯά)
    • PCI-E SSD / NVMe (8-32Gb/s)

    View Slide

  39. ωοτϫʔΫ
    • ଳҬ(෮श: ཧ࿦্ͷ࠷େεϧʔϓοτ)
    • 1Gbps (࣮ࡍ͸950MbpsҐ)
    • 10Gbps
    • ϨΠςϯγ: ωοτϫʔΫ͸஍ཧతϨΠςϯγ͕େ͖͍
    • ౦ژ-χϡʔϤʔΫ: 150ms
    • ϙʔτ਺: TCP/IPͰ͸࠷େ65,535ݸ
    • TCPͰ͸ϙʔτΛόΠϯυ͠ͳ͍ͱૹड৴͕Ͱ͖ͳ͍

    View Slide

  40. Ϧιʔεঢ়گΛ೺Ѳ͢Δ
    • Ͳͷϋʔυ΢ΣΞϦιʔε͕ϘτϧωοΫ͔೺Ѳ͢Δ
    • top — Ͳͷϓϩηε͕CPUΛ࢖༻͍ͯ͠Δ͔
    • dstat — ϦιʔεͷܦաΛ೺Ѳ
    • netstat — LISTEN͍ͯ͠Δ͔ɺ࢖༻͍ͯ͠Δϙʔτ਺

    View Slide

  41. top

    View Slide

  42. htop

    View Slide

  43. dstat

    View Slide

  44. άϥϑΛݟΔ
    • ৗ೔ࠒ͔ΒϦιʔεঢ়گΛՄࢹԽ͠೺Ѳ͢Δ
    • Munin: ֤αʔόͷϦιʔεάϥϑΛऩूͯ͘͠ΕΔ

    View Slide

  45. άϥϑͷݟํ
    • ظؒ͝ͱʹݟΔ: ೔/ि/೥
    • ௕ظతͳάϥϑ͚ͩͩͱ୹ظతͳো֐ʹؾ͚ͮͳ͍
    • ௕ظάϥϑ͕ͳ͍ͱΏͬ͘Γͨ͠มԽʹؾ͚ͮͳ͍
    • ͨ͘͞ΜͷछྨͷάϥϑΛͱΔ
    • ஋ʹΑͬͯΘ͔Δ͜ͱ͕ҧ͏
    • ·ͱΊΔͱখ͍͞εέʔϧͷ͜ͱ͸Θ͔Βͳ͘ͳΔ

    View Slide

  46. Կ͕ϘτϧωοΫ͔೺Ѳͨ͠Β
    • ֤ϓϩηεʹ͍ͭͯৄ͍͠ϕϯνϚʔΫΛऔΔ
    • ΞϓϦέʔγϣϯ: ϓϩϑΝΠϦϯά
    • σʔλϕʔε: εϩʔΫΤϦϩάɺEXPLAIN
    • ετϨʔδ: Ωϟογϡώοτɾόϥϯγϯά

    View Slide

  47. ͜͜·Ͱͷ·ͱΊ

    View Slide

  48. ܭଌͤΑ
    • Ϧιʔε͸༗ݶͰ͋Δ
    • ͦΕͧΕͷϦιʔεͷಛ௃Λ೺Ѳ͓ͯ͘͠
    • ͲͷϦιʔε͕ϘτϧωοΫ͔Λ؍ଌ͢Δ
    • ϘτϧωοΫ͕Ͳ͔͜Θ͔ͬͨΒ
    • ৄ͍͠ϓϩϑΝΠϦϯάΛͱΔ

    View Slide

  49. pixivͷߏ੒
    Application



    Database
    Cache
    Image Store
    Image Cluster
    read/write
    Batch

    Search

    View Slide

  50. έʔεελσΟ
    • ৄ͍͠࿩͸લʑճͷࢿྉʹ͍͍ͩͨॻ͍ͯ͋Δ
    • ΋͏͢͜͠جຊతͳ࿩Λ͠·͢
    !
    • pixivΛࢧ͑Δٕज़2014

    https://speakerdeck.com/edvakf/pixivwozhi-eruji-shu-2014

    View Slide

  51. Database

    View Slide

  52. Database
    • pixivʹ͓͚Δσʔλϕʔεͷߏ੒
    • σʔλϕʔεͷεϧʔϓοτΛ͋͛Δʹ͸
    • σʔλϕʔεͷ஗ԆΛগͳ͘͢Δʹ͸

    View Slide

  53. pixivʹ͓͚ΔҰൠతͳߏ੒



    Master
    Slave
    Replication
    PHP
    Load Balancer


    Master
    ߋ৽
    ࢀর

    View Slide

  54. Load Balancer
    • ॲཧΛෳ਺ͷαʔόʹ෼ࢄͤ͞ΔͨΊͷϛυϧ΢ΣΞ
    • ύέοτΛෳ਺ͷαʔόʹৼΓ෼͚Δ͜ͱͰ

    ॲཧΛ෼ࢄͤ͞Δ
    • pixivͰ͸DBͷෛՙ෼ࢄʹLVSΛ࢖͍ͬͯΔ
    PHP


    View Slide

  55. ิ଍εϥΠυ
    ϩʔυόϥϯαͷํࣜ
    • L4 Load Balancerʹ͸ओʹNATํࣜͱDRSํ͕ࣜ͋Δ
    • pixiv͸DSRํࣜΛ࢖͍ͬͯΔ
    • NATํࣜ:
    • ύέοτ͕͢΂ͯϩʔυόϥϯαΛܦ༝͢Δ
    • DSRํࣜ:
    • ෮࿏͕ϩʔυόϥϯαΛܦ༝͠ͳ͍
    • Ϩεϙϯεͷσʔλྔ͕ଟ͍ͷͰ

    ϩʔυόϥϯαͷτϥϑΟοΫΛେ෯ʹݮΒͤΔ

    View Slide

  56. ิ଍εϥΠυ
    NATํࣜ
     Database  Database
    Application
    192.168.0.2/A:B
    宛先: 192.168.0.11 (C:E)
    送信元: 192.168.0.2 (A:B)
    宛先: 192.168.0.2 (C:E)
    送信元: 192.168.0.53 (D:A)

      ⁠

    宛先: 192.168.0.53 (D:A)
    送信元: 192.168.0.2 (C:E)
    192.168.0.53/D:A
    宛先: 192.168.0.2 (A:B)
    送信元: 192.168.0.11 (C:E)
    Load Balancer
    192.168.0.11/C:E
    DNAT
    • Load Balancer͕ૹ৴ઌ(෮࿏Ͱ͸ૹ৴ݩ)Λॻ͖׵͑Δ
    • ֤σʔλϕʔε͸σϑΥϧτήʔτ΢ΣΠΛLBʹ͓ͯ͘͠

    View Slide

  57. ิ଍εϥΠυ
    • Load Balancer͸ૹ৴ઌΞυϨεΛॻ͖׵͑ͳ͍
    • DB͔ΒͷԠ౴͕௚઀ΞϓϦέʔγϣϯαʔόʹฦ͞ΕΔ
    DSR (Direct Server Return)
    Load Balancer
    192.168.0.11/C:E
     Database  Database
    Application
    192.168.0.2/A:B
    宛先: 192.168.0.11 (C:E)
    送信元: 192.168.0.2 (A:B)
    宛先: 192.168.0.2 (A:B)
    送信元: 192.168.0.11 (D:A)


    宛先: 192.168.0.11 (D:A)
    送信元: 192.168.0.2 (C:E)
    192.168.0.53/D:A
    DNAT

    -A PREROUTING -d 192.168.0.11 -p tcp -j REDIRECT

    View Slide

  58. ิ଍εϥΠυ
    DSRͷར఺ͱܽ఺
    • ར఺
    • ϩʔυόϥϯαΛܦ༝͢Δσʔλྔ͕গͳ͘ͳΔͷͰɺ
    ϩʔυόϥϯαͷτϥϑΟοΫΛ཈͑Δ͜ͱ͕ग़དྷΔ
    • ܽ఺
    • ϩʔυόϥϯαͱDBΛಉ͡ωοτϫʔΫʹ഑ஔ͢Δ

    ඞཁ͕͋Δ
    • ωοτϫʔΫΛ௒͑Δ͜ͱ͕ग़དྷΔٕज़΋͋Δ:L3DSR

    (pixivͰ͸࢖͍ͬͯΔͷ͸௒͑ΒΕͳ͍L2DSR)

    View Slide

  59. • ࢀরͱߋ৽ॲཧΛ෼ׂ͢Δߏ੒
    • ࢀরͷεϧʔϓοτΛ૿Ճͤ͞Δ͜ͱ͕Ͱ͖Δ
    • WebαʔϏεͰ͸ߋ৽ॲཧʹൺ΂ࢀরස౓͕ѹ౗తʹଟ͍
    ࢀর෼ׂ



     Slave
    App.
     Master
    ϨϓϦέʔγϣϯ
    ߋ৽ΫΤϦ
    Load Balancer
    ෼ࢄ
    ࢀরΫΤϦ(SELECT)

    View Slide

  60. • ࢀরͱߋ৽ॲཧΛ෼ׂ͢Δߏ੒
    • ࢀরͷεϧʔϓοτΛ૿Ճͤ͞Δ͜ͱ͕Ͱ͖Δ
    • WebαʔϏεͰ͸ߋ৽ॲཧʹൺ΂ࢀরස౓͕ѹ౗తʹଟ͍
    ࢀর෼ׂ



     Slave
    App.
     Master
    ϨϓϦέʔγϣϯ
    ߋ৽ΫΤϦ
    Load Balancer
    ෼ࢄ
    ࢀরΫΤϦ(SELECT)

    View Slide

  61. • ࢀরͱߋ৽ॲཧΛ෼ׂ͢Δߏ੒
    • ࢀরͷεϧʔϓοτΛ૿Ճͤ͞Δ͜ͱ͕Ͱ͖Δ
    • WebαʔϏεͰ͸ߋ৽ॲཧʹൺ΂ࢀরස౓͕ѹ౗తʹଟ͍
    ࢀর෼ׂ



     Slave
    App.
     Master
    ϨϓϦέʔγϣϯ
    ߋ৽ΫΤϦ
    Load Balancer
    ෼ࢄ
    ࢀরΫΤϦ

    View Slide

  62. • εϧʔϓοτ͕૿Ճ͢Δͷ͸ࢀরΫΤϦ͚ͩ
    • ߋ৽ΫΤϦ͸֤SlaveͰ࣮ߦ͞ΕΔ
    • SELECTͯ͠UPDATEͷΑ͏ͳॲཧͩͱෆ੔߹͕ى͖Δ
    • ΞϓϦέʔγϣϯͰߋ৽ΫΤϦͱࢀরΫΤϦΛৼΓ෼͚
    ͳ͍ͱ͍͚ͳ͍ͷͰίʔυ͕ෳࡶʹͳΔ
    ࢀর෼ׂͷऑ఺

    View Slide

  63. ิ଍εϥΠυ
    WebΞϓϦέʔγϣϯͷಛ௃
    • ߋ৽ॲཧʹൺ΂ࢀরස౓͕ѹ౗తʹଟ͍
    • 1೔͋ͨΓͷ࡞඼౤ߘ: 20,000
    • 1೔͋ͨΓͷӾཡճ਺: 100,000,000
    • େن໛WebΞϓϦέʔγϣϯͰ͸ࢀর෼ׂ͕༗ޮͳ৔߹͕ଟ͍
    クエリ 頻度
    SELECT 多い
    INSERT 少ない
    UPDATE 少ない
    DELETE 非常に少ない

    View Slide

  64. গ͠໭ͬͯ

    View Slide

  65. pixivʹ͓͚ΔҰൠతͳߏ੒



    Master
    Slave
    Replication
    PHP
    Load Balancer


    Master
    ߋ৽
    ࢀর

    View Slide

  66. pixivͷσʔλϕʔε
    • ઌिͷߨٛͰ͋ͬͨͱ͓Γͨ͘͞Μͷछྨ͕͋Δ
    • ΠϥετɺϢʔβʔ৘ใ
    • খઆ
    • ධՁཤྺɺաڈϥϯΩϯά
    • ϒοΫϚʔΫ
    • ϒοΫϚʔΫ౷ܭ
    • Ϣʔβʔ޲͚ΞΫηεղੳ༻Ӿཡཤྺ

    View Slide

  67. ͳͥผΕ͍ͯΔͷ͔
    • ͢΂ͯͷσʔλΛ1୆ͷαʔόʹஔ͍͓ͯ͘ͷ͸೉͘͠
    ͳ͍ͬͯ͘
    • ςʔϒϧʹΑͬͯσʔλྔʹ͕ࠩ͋Δ
    • ΞΫηεύλʔϯ΋ҧ͏
    • Πϥετ৘ใ: ࢀর͕ଟ͍
    • Ӿཡཤྺ: ௥ه͔͠ͳ͍
    • ϒοΫϚʔΫ: σʔλྔ͕ଟ͍

    View Slide

  68. νϡʔχϯάͷҧ͍
    イラスト・ユーザ情報 ブックマーク
    σʔλྔ 少ない 多い
    ࢀরස౓ 多い 比較的少ない
    νϡʔχϯά
    Slave͕ଟ͍

    ϝϞϦ͸গͳΊ
    Slave͸গͳ͍

    ϝϞϦ౥ࡌྔ͕ଟ͍
    ίετ
    ୆਺͸ଟ͍͚Ͳ1୆1୆͸
    ௿εϖοΫͰ௿ίετ
    ୆਺͸গͳ͍͚Ͳ

    1୆͋ͨΓͷ஋ஈ͸ߴ͍
         

      

    View Slide

  69. ิ଍εϥΠυ
    σʔλϕʔεͷνϡʔχϯά
    • σʔλྔ౳ͷੑ࣭ʹΑͬͯద੾ͳνϡʔχϯά͸ҟͳΔ
    • σʔλɺΠϯσοΫε͕ϝϞϦʹऩ·Δ͔
    • ࢀর͞ΕΔσʔλ͸ग़དྷΔ͚ͩϝϞϦʹࡌͤΔ
    • ࢀর͕ͳ͚Ε͹ϝϞϦʹऩ·Δඞཁ͸ͳ͍
    • MyISAMɺInnoDBͷͲͪΒ͔
    • σΟεΫ༰ྔ͸଍ΓΔ͔
    • Slaveͷ୆਺͸Կ୆ʹ͢Δ͔
    • શͯಉ͡νϡʔχϯάʹ͢Δͷ͸೉͍͠

    View Slide

  70. 1ͭͷDBʹશͯࡌͤͨ৔߹
    • ੑ࣭͕ҟͳΔ͢΂ͯͷςʔϒϧʹ͋ΘͤͯDBΛ

    νϡʔχϯά͢Δඞཁ͕͋Δ
    • ڊେͳαʔόΛ༻ҙ͢Δඞཁ͕͋Δ
    イラスト・ユーザ ブックマーク
    イラスト・ユーザ

    ブックマーク
    σʔλྔ 少ない 多い 多い
    ࢀরස౓ 多い 少ない 多い

    View Slide

  71. 1ͭͷDBʹશͯࡌͤͨ৔߹
    • TBΫϥεͷϝϞϦΛ౥ࡌͰ͖Δαʔό΋͋Δ͜ͱ͸͋Δ
    • ͦ͏͍͏ͷΛߟ͑ͯ΋ྑ͍͔΋
    http://www.supermicro.com/newsroom/pressreleases/2014/press140218_4U_4-Way.cfm

    View Slide

  72. σʔλϕʔεͷνϡʔχϯά
    • εέʔϧΞοϓͰͲ͏ʹ͔ͯ͠΋͍͍
    • ৽͍͠΋ͷΛௐୡ͢Δͷʹ΋͕͔͔࣌ؒΔ
    • ٕज़ݕূɺݟੵ΋Γɺൃ஫……࠷௿Ͱ΋਺िؒ
    • ࠓճ͸ϋʔυ΢ΣΞͷεϖοΫΞοϓͰ͠ͷ͚͛ͨͲ
    ࣍ճ΋ߴεϖοΫ͕͋Δ͔Θ͔Βͳ͍
    • ಉ͡εϖοΫͷαʔόΛฒ΂͍͚ͯͩ͘Ͱྑ͍ํָ͕

    View Slide

  73. ਨ௚෼ׂͱਫฏ෼ׂ
    • ਨ௚෼ׂ:ྻຖʹ(·ͨ͸ςʔϒϧ୯ҐͰ)෼ׂ
    • ਫฏ෼ׂ:ߦຖʹ෼ׂ
    イラスト情報 ユーザー情報
    ID イラストタイトル 画像URL ユーザーID ニックネーム
    1 2000೥ 20 10 അࠎ
    : 2000೥ 21 10 അࠎ
    1000000 2000೥ 22 10 അࠎ
    1000001 Ͷ͜ΈΈΐΜ 1819357 11318 $
    : ̏ඵؒݟͭΊͯ 2901760 18484 Suzumemiku
    10000000 ͸ͳ·Δ 7768620 164813 ੺ΓΜ͝
    20000001 present 23291240 196214 ͘͞
    : νϟνϟ 25628357 3867630 ϨʔΠν
    30000000 ࣣ༦ 28211016 2546651 ͸͠Ό
    ブックマーク情報
    ユーザーID イラストID



    ਫฏ෼ׂ
    ਨ௚෼ׂ
      

    View Slide

  74. ਨ௚෼ׂ
    • લʹઆ໌ͨ͠ͱ͓ΓpixivͰ͸ਨ௚෼ׂ͕ଟ༻͞Ε͍ͯΔ
    • ৽͘͠ػೳΛ௥Ճ͢Δͱ͖ʹ௥Ճ͠΍͍͔͢Β

    ਨ௚෼ׂ͞Εͨঢ়ଶͰ࢝·Δ͜ͱ΋ଟ͍
    • ࠔΔ͜ͱ΋ଟ͍(ઌिͷεϥΠυࢀর)
    • ݁Ռॲཧ͕ෳࡶʹͳͬͯίʔυ͕มߋग़དྷͳ͘ͳΓ

    εέʔϥϏϦςΟ͕௿Լ͢Δ

    View Slide

  75. ਫฏ෼ׂ͠ͳ͍
    • pixivͰ͸ਫฏ෼ׂʹΑΔαʔόʔ෼ࢄΛߦ͍ͬͯͳ͍
    • ೔෇ʹΑΔύʔςΟγϣχϯά͚ͩ(෼ࢄ໨త͡Όͳ͍)
    • ͋·ΓʹෳࡶʹͳΔͷͰߟ͑ͨ͘ͳ͍
    • Ωϟογϡ༻్Ͱ͋Ε͹ྑ͍͔΋
    • ιʔγϟϧήʔϜք۾Ͱ͸Α͘࢖ΘΕͯΔͬΆ͍

    View Slide

  76. εϧʔϓοτΛ͋͛Δʹ͸
    • ࢀর෼ׂʹΑΓࢀরεϧʔϓοτΛεέʔϧΞ΢τ
    • ద੾ͳཻ౓ͰσʔλϕʔεΛ෼ׂ͢Δ
    • ෼ׂͤͣʹεέʔϧΞοϓ͢Δ͜ͱ΋ߟ͑Δ
    • ඞཁҎ্ʹ෼ׂ͠ͳ͍
    • ॲཧ͕ෳࡶʹͳΔͱαʔϏεશମͱͯ͠ΈΔͱ

    εέʔϥϏϦςΟ͕௿Լ͍ͯ͠Δ͜ͱ΋͋ΓಘΔ

    View Slide

  77. ஗ԆΛখ͘͢͞Δʹ͸
    • εέʔϧΞοϓʹ͸ݶք͕͋Δ
    • CPUͷप೾਺͸ߴࢭ·Γ(FPGAͱ͔೉ͦ͠͏)
    • ϝϞϦͷΞΫηε଎౓Λ௒͑Δ͜ͱ͸೉͍͠
    • ͨ͘͞ΜͷσʔλΛಡΈࠐΊ͹(ॲཧ͢Ε͹)

    ͦΕ͚͕͔͔ͩ࣌ؒΔ
    • ஗ԆΛখ͘͢͞Δʹ͸ॲཧ͢ΔσʔλྔΛগͳ͘͢Δ

    View Slide

  78. ΠϯσοΫεΛ࢖͏
    • ୳ࡧ͢ΔσʔλྔΛগͳ͘͢Δ
    • ΠϯσοΫε͕ͳ͍৔߹: ઌ಄͔Βॱʹ୳ࡧ
    !
    !
    !
    • ΠϯσοΫε͕͋Δ৔߹: B+πϦʔͷ୳ࡧͷΈ
    ID title
    20 2000೥
    21 2000೥
    22 2000೥
    : :
    20 21 22 … …

    View Slide

  79. ΠϯσοΫε͕࢖ΘΕ͍ͯΔ͔ௐ΂Δ
    • EXPLAINΛ࣮ߦ͢Δ
    εϥΠυ࡞Γ๨Εͨ

    View Slide

  80. ύʔςΟγϣχϯάΛ࢖͏
    ID title
    20 2000೥
    21 2000೥
    22 2000೥
    : :
    • σʔλ͕֨ೲ͞Ε͍ͯΔςʔϒϧ͚ͩΛ୳ࡧ͢Ε͹ྑ͍
    • 10,000݅ʹ෼ׂͨ͠Βઌ಄୳ࡧͯ͠΋࠷େ10,000݅
    ID title
    10000
    10001
    10002
    : :
    ID͕֨ೲ͞Ε͍ͯΔ

    ςʔϒϧ͚ͩ୳ࡧ

    View Slide

  81. ͜͜·Ͱͷ·ͱΊ

    View Slide

  82. Database
    • σʔλϕʔεͷεϧʔϓοτΛ͋͛Δʹ͸
    • ࢀর෼ׂʹΑΓࢀরεϧʔϓοτΛεέʔϧΞ΢τ
    • ద੾ͳཻ౓ͰσʔλϕʔεΛ෼ׂ͢Δ
    • σʔλϕʔεͷ஗ԆΛগͳ͘͢Δʹ͸
    • ୳ࡧ͢ΔσʔλྔΛগͳ͘͢Δ: ΠϯσοΫεΛ࢖͏
    • ୳ࡧ͢Δσʔλྔ͕গͳͯ͘ࡁΉΑ͏ʹͪΌΜͱ

    ߟ͑ͯઃܭ͢Δ

    View Slide

  83. Contents Delivery

    View Slide

  84. Contents Delivery
    • pixivͷը૾഑৴Ϋϥελ
    • ը૾഑৴ͷεϧʔϓοτΛ͋͛Δʹ͸
    • ը૾഑৴ͷ஗ԆΛগͳ͘͢Δʹ͸

    View Slide

  85. pixivͷը૾഑৴
    • pixivͷϝΠϯίϯςϯπ͸ը૾
    • ϦΫΤετͷେ൒͸ը૾ϑΝΠϧ
    • ը૾͕දࣔ͞Εͳ͍ͱϢʔβʔΤΫεϖϦΤϯε͕

    େ͖͘௿Լ͢Δ
    • ߴ଎ʹ҆ఆͯ͠େྔͷը૾Λ഑৴͢Δ࢓૊Έ͕ඞཁ
    Images HTML Static

    View Slide

  86. pixivͷը૾഑৴
    • େྔͷը૾ϑΝΠϧ
    • ΦϦδφϧը૾: 40TB
    • αϜωΠϧͷछྨ: 20छྨҎ্
    • 1ຕ͝ͱͷαΠζ
    • ฏۉ: 60KB (95ˋλΠϧ: 300KB)
    • ࠷େ: 15MB

    View Slide

  87. pixivͷը૾഑৴
    • େྔͷϦΫΤετ
    • ϦΫΤετ਺: ͍͍ͩͨ15,000 req/s
    • సૹྔ: ࠷େ 14Gbps

    View Slide

  88. ը૾഑৴Ϋϥελ
    • pixivͰ͸CDNΛ࢖͍ͬͯͳ͍
    • ୅ΘΓʹಠࣗͷCDNͷΑ͏ͳ࢓૊ΈΛ͍࣋ͬͯΔ
    • ճઢඅ༻͸Ϋϥ΢υΑΓΦϯϓϨͷํ͕҆Ձ
    • Ωϟογϡώοτ཰95%
    • ϩϯάςʔϧͳͷͰେ༰ྔͷΩϟογϡ͕ඞཁ
    • ఘΊ͍ͯΔ͜ͱ
    • ஍ཧతͳεέʔϥϏϦςΟ

    View Slide

  89. ը૾഑৴Ϋϥελ
    6GbpsΛ͞͹͘ΦϨΦϨCDNߏஙज़
    http://www.slideshare.net/semind/20101220-pixiv-techmeeting-6267332

    View Slide

  90. ը૾഑৴Ϋϥελ
    • ωοτϫʔΫ
    • 1GbpsͷճઢͰ͸શવ଍Γͳ͍
    • ͨ͘͞ΜଋͶΔͱภΓ͕ͰͨΓ؅ཧ͕໘౗
    • 10GbpsͷճઢΛ4ຊଋͶͯ࢖͍ͬͯΔ
    • αʔό
    • ݱࡏ͸40୆͘Β͍

    View Slide

  91. ը૾഑৴Ϋϥελ
    nginx
    Front Cache
    Consistent Hashing
    i1.pixiv.net i2.pixiv.net
    nginx
    Front Cache
    nginx
    Front Cache
    nginx
    Front Cache
    TrafficServer
    Cache
    TrafficServer
    Cache
    TrafficServer
    Cache
    TrafficServer
    Cache
    nginx
    Dispatch
    nginx
    Dispatch
    nginx
    Dispatch
    nginx
    Dispatch
    Apache
    Origin
    Apache
    Thumb. Gen.
    1࣍Ωϟογϡ
    2࣍Ωϟογϡ
    64GB Memory
    MEM
    SSD 256x3 GB SSD
    i2.pixiv.net
    i1.pixiv.net

    View Slide

  92. Consistent Hashing
    • URLΛΩʔʹͯ͠Hashing͢Δ
    • ΩϟογϡΛෳ਺୆ʹεέʔϧΞ΢τͰ͖Δ
    • શτϥϑΟοΫͷ95%ΛΩϟογϡͰԠ౴Ͱ͖Δ
    TrafficServer
    Cache
    TrafficServer
    Cache
    TrafficServer
    Cache
    Hash table Hash table Hash table

    View Slide

  93. • 1ϥοΫʹ͸࠷େͰ΋49୆
    • εΠονؒͷτϥϑΟοΫ͕٧·Δ(ࠓ͸10G͔ͩΒେৎ෉ʁ)
    • 1ஈ໨ͷΩϟογϡͰશτϥϑΟοΫͷ50%Λฦ͢
    2ஈΩϟογϡͷཧ༝ (1)
    switch
    L3 Switch
    49U
    1Gbps
    1Gbps
    switch

    View Slide

  94. • ϦΫΤετ͕ಛఆΩϟογϡαʔόʹภΔ
    • ਓؾͷը૾͕ϋογϯά͞ΕΔαʔό͚ͩߴෛՙ
    • ϝϞϦΩϟογϡͰਓؾ͕͋Δը૾ΛΩϟογϡ
    2ஈΩϟογϡͷཧ༝ (2)
    Server A Server B Server C Server A Server B Server C
    Cache

    View Slide

  95. ͜͜·Ͱͷ·ͱΊ

    View Slide

  96. Contents Delivery
    • ը૾഑৴ͷεϧʔϓοτΛ͋͛Δʹ͸
    • εέʔϧ͢ΔΩϟογϡΫϥελΛઃܭ͢Δ
    • Ωϟογϡ༰ྔͱτϥϑΟοΫʹؾΛ͚ͭΔ
    !
    • ϨΠςϯγ
    • Ϥʔϩούʹ೔ຊ͔Βʹߴ଎ʹసૹ͢Δͷ͸ແཧ
    • ෦෼తʹCDNΛݕূ͍ͯ͠Δ

    View Slide

  97. ϩάΛ׆༻͢Δ

    View Slide

  98. ϩάΛ׆༻͢Δ
    • ϩάσʔλ͸ଟ͚Ε͹ଟ͍ํ͕ྑ͍
    Application
    Load Balancer
    Database
    ΞΫηεϩά
    Πϕϯτϩά
    εϩʔΫΤϦϩά
     ੜσʔλ

    Τϥʔϩά
    ΞΫηεϩά
    • ϦΫΤετͨ͠URL
    • ૹ৴ݩIPΞυϨεɺUA
    • ϨεϙϯελΠϜ
    • ϦΫΤετॲཧ࣌ؒ
    !
    Πϕϯτϩά
    • Ϣʔβ͕ߦͬͨΠϕϯτͷৄࡉ৘ใ
    • POSTϦΫΤετͷத਎͸ΞΫηεϩάʹ͸ؚ·Εͳ͍

    View Slide

  99. άϩʔεͷͨΊʹ
    • ΞΫςΟϒϢʔβʔͷಈ޲Λௐࠪ͢Δ
    • ֤ػೳ͕ͲΕ͚ͩ࢖ΘΕ͍ͯΔ͔ௐࠪ͢Δ
    • ػೳվमʹΑͬͯͲͷΑ͏ͳมԽ͕ى͔ͬͨ͜ௐ΂Δ

    View Slide

  100. ։ൃऀͷͨΊʹ
    • ػೳվमʹΑͬͯͲͷΑ͏ͳมԽ͕ى͔ͬͨ͜ௐ΂Δ
    • ຊ൪؀ڥͰى͍ͬͯ͜ΔΤϥʔΛ೺Ѳ͢Δ
    • ຊ൪؀ڥͰ஗ԆͷݪҼʹͳ͍ͬͯΔ΋ͷΛಛఆ͢Δ

    View Slide

  101. ϩάܗࣜΛબͿ
    • ςΩετܗࣜ
    • ίϚϯυϥΠϯͰૢ࡞͠΍͍͢
    • ߦϕʔεͰ͋Δ
    • awk/cut΍ϫϯϥΠφʔͰ੔ܗ͠΍͍͢
    • σʔλྔ͕େ͖͘ͳΒͳ͍

    View Slide

  102. pixivͰ࢖͍ͬͯΔϩάܗࣜ
    • TSV: λϒ۠੾Γ
    • JSON: վߦ෇͖JSON
    • ݸਓతʹ͸ॱ൪ΛΑ͘๨ΕΔͷͰLTSV͕޷͖

    View Slide

  103. • Ұ୴ϑΝΠϧʹॻ͖ग़ͯͦ͠ΕΛผϓϩηε͕ಡΈࠐΉ
    • ϩάͷ෮چɺઃఆมߋ͕͠΍͍͢
    • ग़ྗઌΛ૿΍ͨ͠ͱ͖աڈͷϩάΛΠϯϙʔτͰ͖Δ
    FluentdʹΑΔϩάసૹ
    Fluentd
    Files
    Application
    Load Balancer
    Database
    ΞΫηεϩά
    Πϕϯτϩά
    εϩʔΫΤϦϩά
     ੜσʔλ

    Τϥʔϩά
    BigQuery
    !
    Elasticsearch
    !
    MongoDB
    Fluentd

    View Slide

  104. Google BigQuery
    • Google͕ఏڙ͍ͯ͠ΔղੳϓϥοτϑΥʔϜ
    • SQLͰ਺ԯ݅ͷղੳ͕े਺ඵͰͰ͖Δ
    • ਺ઍ୆ͷαʔόʹ෼ࢄ͞Ε਺ͷ๫ྗʹΑͬͯܭࢉ͞ΕΔ
    • Google Analytics Premiumʹೖ͍ͬͯΔͱ

    Google AnalyticsͷੜϩάΛղੳग़དྷΔ

    View Slide

  105. Kibana

    View Slide

  106. Kibana
    • Elasticsearchʹ֨ೲͨ͠σʔλΛղੳ͢Δπʔϧ
    • ΫϥΠΞϯταΠυͷJavaScript͚ͩͰಈ࡞͢Δ
    • ࠇ͍ը໘͕ਓؾ͚ͩͲpixivͰ͸ന͕ਓؾ

    elasticsearch
    EFK Stack
    REST API
    Output

    View Slide

  107. • ͢΂ͯͷΤϥʔΛ1෼͝ͱʹ·ͱΊͯ௨஌
    • େྔͷΤϥʔΛ௨஌͢Δνϟϯωϧ΋͋Δ
    Idobataʹ௨஌

    View Slide

  108. ՄࢹԽΛߦ͏ʹ͸
    • ·ͣ؆୯ʹՄࢹԽͰ͖Δͱ͍͏ࣄ࣮Λͭ͘Δ
    • ը໘ΛݟΔจԽΛࠜ෇͔ͤΔ
    • ՄࢹԽ͢ΔจԽ͕ҰൠతʹͳΕ͹ෆຬ͕ग़ͯ͘Δ
    • ͋·Γίετ͸͔͚ͳ͍
    • ໨తΛܾఆ͢Δલʹಋೖ͢Δඞཁ͕͋Δ
    • ·ͣ͸ࣾ಺ίετΛ࢖Θͣʹ֎෦ͷϦιʔεΛ࢖͏

    View Slide

  109. ͜͜·Ͱͷ·ͱΊ

    View Slide

  110. ϩάΛ׆༻͢Δ
    • ϩάΛՄࢹԽ͢ΔจԽΛࠜ෇͔ͤΔ
    • ՄࢹԽ͢ΔจԽ͕͋Ε͹ϩάΛͪΌΜͱग़ྗͯ͘͠ΕΔ
    Α͏ʹͳΔ͸ͣ

    View Slide

  111. ·ͱΊ

    View Slide

  112. これまで3つのプロダクト(広告配信、pixiv、BOOTH)の話を聞
    いて、それぞれのプロダクトにどのような技術を使われている
    か、なぜその技術が使われているか、何を考えて設計されてい
    るか、そのようなことについて思いを巡らせてみたかと思います。
    どのサービスもそれぞれのバックグラウンドを持っており、そし
    て、現在稼働しているサービスがあります。それぞれのサービス
    で使われている技術はばらばらだし、1つ1つの技術にそれなり
    に理由があったり、特になかったりします(動いているのは正義
    です)。みなさんもプロダクトをつくったりしたことがあれば、特
    に理由もなく新しい技術を採用したりすることもあると思います。
    さて、設計の話はそろそろ飽きたと思うので、今日は運用してい
    く上で必要な技術の話をしました。運用していく上で、どのよう
    なことを考えれば良いかについて話しました。運用していく上で
    どのようなことを考えれば良いか、その一助になれば幸いです。

    View Slide

  113. ·ͱΊ
    • ਺ࣈΛܭଌ͢Δ׳शΛ෇͚Δ
    • େن໛αʔϏεͰ͸Ϧιʔε͋ͨΓͷεϧʔϓοτ͕

    ॏཁʹͳΔ
    • ࢥ͍ࠐΈͰߦಈͤͣʹ͔ͳΒͣܭଌͯ͠࠷దԽ͢Δ
    • ࢓ࣄͷਐΊํ΋ಉ͡

    View Slide