Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
GoogleAppEngineのマルチテナント機能の活用事例
Search
kurikei
September 25, 2018
Technology
0
63
GoogleAppEngineのマルチテナント機能の活用事例
kurikei
September 25, 2018
Tweet
Share
More Decks by kurikei
See All by kurikei
DeSCヘルスケアにおけるGo 活用事例紹介 #DeNAgo
kurikei
0
1.6k
Other Decks in Technology
See All in Technology
Proxmox × HCP Terraformで始めるお家プライベートクラウド
lamaglama39
1
210
AIを前提に、業務を”再構築”せよ IVRyの9ヶ月にわたる挑戦と未来の働き方 (BTCONJP2025)
yueda256
1
750
個人から巡るAI疲れと組織としてできること - AI疲れをふっとばせ。エンジニアのAI疲れ治療法 ショートセッション -
kikuchikakeru
1
290
技術広報のOKRで生み出す 開発組織への価値 〜 カンファレンス協賛を通して育む学びの文化 〜 / Creating Value for Development Organisations Through Technical Communications OKRs — Nurturing a Culture of Learning Through Conference Sponsorship —
pauli
5
330
Quarkusで作るInteractive Stream Application
joker1007
0
150
機密情報の漏洩を防げ! Webフロントエンド開発で意識すべき漏洩パターンとその対策
mizdra
PRO
9
3.5k
Dart and Flutter MCP serverで実現する AI駆動E2Eテスト整備と自動操作
yukisakai1225
0
540
Rubyist入門: The Way to The Timeless Way of Programming
snoozer05
PRO
7
500
探求の技術
azukiazusa1
7
2.3k
「データ無い! 腹立つ! 推論する!」から 「データ無い! 腹立つ! データを作る」へ チームでデータを作り、育てられるようにするまで / How can we create, use, and maintain data ourselves?
moznion
8
4.3k
Devoxx Morocco 2025 - Like Spring but faster: The new Java Jedi
edeandrea
PRO
0
100
なぜインフラコードのモジュール化は難しいのか - アプリケーションコードとの本質的な違いから考える
mizzy
55
17k
Featured
See All Featured
Imperfection Machines: The Place of Print at Facebook
scottboms
269
13k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
658
61k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
46
7.8k
Navigating Team Friction
lara
190
15k
GitHub's CSS Performance
jonrohan
1032
470k
Context Engineering - Making Every Token Count
addyosmani
10
390
Automating Front-end Workflow
addyosmani
1371
200k
Fireside Chat
paigeccino
41
3.7k
The Invisible Side of Design
smashingmag
302
51k
Art, The Web, and Tiny UX
lynnandtonic
303
21k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.6k
How to train your dragon (web standard)
notwaldorf
97
6.4k
Transcript
GoogleAppEngineͷマルチ テナントػೳͷ׆༻ࣄྫ DeSCϔϧεέΞגࣜձࣾ ϔϧεέΞサービス։ൃάϧʔϓ ܀ాՂ༞
ࣗݾհ • ໊લ • ܀ాՂ༞ • αʔόʔαΠυΤϯδχΞ • Perl, Ruby,
Go … • ܦྺ • 2012.04ʙ DeNAೖࣾ • 2012.09ʙ ήʔϜࣄۀ෦ͰιʔγϟϧήʔϜͷ։ൃ • 2015.10ʙ DeSCϔϧεέΞҟಈ 2
アジェンダ • DeSCϔϧεέΞͰ։ൃ͍ͯ͠ΔαʔϏεհ • ར༻͍ͯ͠ΔGCPͷαʔϏε • GAEͷϚϧνςφϯτػೳͷ׆༻ྫ 3
DeSCϔϧεέΞͰ։ൃ͍ͯ͠ΔαʔϏε 4 KenCoM ߦಈม༰αʔϏε܈
DeSCϔϧεέΞͰ։ൃ͍ͯ͠ΔαʔϏε 5 KenCoM • ݈߁อݥͷ߹һ͚αʔϏε • ݈߁அͷ݁ՌҩྍඅͳͲ͕ݟΕΔ • KenCoMར༻ऀར༻ͯ͠ͳ͍ਓΑΓ ੜ׆श׳පͷጶױϦεΫ͕ɺ౷ܭతʹ
͍͜ͱ͕Θ͔ͬͨ • ΦϯϓϨڥ ʢLinux, nginx, Rails etcʣ
DeSCϔϧεέΞͰ։ൃ͍ͯ͠ΔαʔϏε 6 ߦಈม༰αʔϏε܈ • αʔϏεΛར༻͢Δ͜ͱͰϢʔβʔͷ ߦಈΛม༰ͤ͞ɺΑΓ݈߁ʹͳͬͯ Β͏ͨΊͷαʔϏε • caminaru ϦϦʔεࡁΈ
• ʑͷาͷඪΛୡͨ͠ΒΪ ϑτ͕Β͑ΔαʔϏε • ผͷΓޱͰαʔϏεΛ։ൃத • GCPΛར༻
ओʹར༻͍ͯ͠ΔGCPͷαʔϏε 用途 GCPαʔϏε ΞϓϦέʔγϣϯ Google AppEngine StandardɿGo ʢAPIαʔόʔʣ Flexibleɿ Ruby
/ Rails ʢཧπʔϧʣ Flexibleɿ Ruby /sinatra ʢΞϓϦͷOTA༻αΠτʣ σʔλετΞ Cloud Datastore ϩάࢹɾϝτϦΫε StackDriver {Logging, Monitoring …} σʔλΣΞϋε BigQuery BIπʔϧ Cloud Datastudio 7
AppEngineͷબఆཧ༝ • ϑϧϚωʔδυ • ΞϓϦέʔγϣϯΛσϓϩΠ͢Δ͚ͩ • ਓ͕গͳ͍νʔϜͳͷͰɺͳΔ͚ͩΞϓϦέʔγϣϯͷ։ൃʹྗͨ͠ ͍ • FaaSΑΓॊೈͰෳࡶͳ͜ͱ͕Ͱ͖Δ
• Ϛϧνςφϯτػೳʢޙड़ʣͰͨ͠ෳͷΞϓϦέʔγϣϯΛߏஙͰ͖Δ • DeSCϔϧεέΞ͕͜Ε͔Β࡞Δߦಈม༰αʔϏεͷΓޱ • վળ͍݈ͨ͠߁ɾӡಈʹؔ͢Δࢦඪ ʢา / ମॏ / ݂ѹ / ݈߁அ݁Ռ etcʣ • αʔϏε͍ଓ͚ΔͨΊͷཁૉ ʢΠϯηϯςΟϒ / ήʔϛϑΟέʔγϣϯ / ίϛϡχςΟ etcʣ • ༷ʑͳΓޱͷ͏ͪɺ݈߁ʹର͢ΔΠϯύΫτ͕ߴ͘ɺޮՌ͕ग़ͦ͏ͳ αʔϏε͔ΒॱʹϦϦʔε͍ͯ͘͠ઓུʹద͍ͯͨ͠ 8
GoogleAppEngineͷϚϧνςφϯτػೳ • 1ͭͷϓϩδΣΫτʹෳͷΞϓϦέʔγϣϯΛߏஙͰ͖Δ • ϚΠΫϩαʔϏεతͳ͍ํͰ͖Δ • αʔϏεɾόʔδϣϯΛར༻͢Δ͜ͱͰΞϓϦέʔγϣϯίʔυͷ Λ࣮ݱʢޙड़ʣ • ໊લۭؒΛઃఆ͢Δ͜ͱͰσʔλͷΛ࣮ݱʢޙड़ʣ
9 https://cloud.google.com/appengine/docs/standard/go/multitenancy
ϚϧνςφϯτػೳɹʙαʔϏεɾόʔδϣϯʙ • αʔϏεͱόʔδϣϯ • ΞϓϦέʔγϣϯίʔυͷ͕Ͱ͖Δ • 1ϓϩδΣΫτʹෳͷαʔϏεΛɺ1αʔϏεʹෳͷόʔδϣ ϯ͕࡞Δ͜ͱ͕Ͱ͖Δ • ΞϓϦέʔγϣϯ͝ͱʹผͷαʔϏεʹׂΓͯΔ͜ͱͰෳͷ
ΞϓϦέʔγϣϯΛߏஙͰ͖Δ 10 ※ https://cloud.google.com/appengine/docs/standard/go/microservices-on-app-engine ΑΓҾ༻
Ϛϧνςφϯτػೳɹʙ໊લۭؒʙ • ໊લۭؒ • σʔλͷ͕Ͱ͖Δ • ΞϓϦέʔγϣϯ͝ͱʹ໊લۭؒΛઃఆ͢Δ͜ͱͰผΞϓϦͷ σʔλ͕ࢀরͰ͖ͳ͘ͳΔ • σʔλ࿙ӮΛ͙ͨΊͷΈͷҰͭ
• ѻ͏σʔλʹΑͬͯΑΓڧݻͳ͕ඞཁʹͳΔ͜ͱ͋Δͷ ͰηΩϡϦςΟཁ݅ʹԠ͍͚ͯ͡Δඞཁ͋Δ • Datastore, Memcached, TaskQueueͳͲ͕ରԠ͍ͯ͠Δ 11
DeSCͰͷϚϧνςφϯτͷ׆༻ྫ ΞϓϦέʔγϣϯ αʔϏε ໊લۭؒ ΞϓϦAͷAPI serviceA-api serviceA ΞϓϦBͷAPI serviceB-api serviceB
※ಉ͡σʔλΛࢀর ΞϓϦBͷཧπʔϧ serviceB-admin 12 serviceA-api serviceB-api serviceB-admin σʔλͷ ❌ ❌
DeSCͰͷϚϧνςφϯτͷ׆༻ྫ 13 • ΞϓϦέʔγϣϯAͱΞϓϦέʔγϣϯBͰผͷ໊લۭؒΛઃఆ • ͦΕͧΕͷΞϓϦ͔ΒଞํͷσʔλࢀরͰ͖ͳ͍ • ΞϓϦBͷAPIͱཧπʔϧ໊લۭ͕ؒಉ͡ͳͷͰಉ͡σʔλΛࢀরɾฤू ͕Ͱ͖Δ
։ൃ༻ϓϩδΣΫτͰͷϚϧνςφϯτػೳͷར༻ αʔϏε (=ϦϙδτϦ) ϒϥϯν όʔδϣϯ ໊લۭؒ serviceA-api master master serviceA
feature/auth feature-auth serviceA-feature-auth hotfix/db-err hotfix-db-err serviceA-hotfix-db-err 14 serviceA- feature-auth serviceA serviceA- hotfix-db-err master feature-auth hotfix-db-err
։ൃ༻ϓϩδΣΫτͰͷϚϧνςφϯτػೳͷར༻ 15 • ϒϥϯνΛPush͢ΔͱCIπʔϧ͕ϒϥϯν໊ʹԠͨ͡όʔδϣϯΛͬͯ ͨ͠ • AppEngineͰ ֤αʔϏε/֤όʔδϣϯ͝ͱʹURL͕ൃߦ͞ΕΔͷͰɺ։ൃ ൛ΞϓϦͷϦΫΤετઌΛม͑Δ͜ͱͰ͞ΕͨڥʹΞΫηε͕࡞Ͱ͖ Δ
• QAݕূ༻ͷڥ͕༰қʹ४උͰ͖Δ • ຊ൪ͱεϖοΫతʹಉͷڥ४උͰ͖ΔͷͰɺຊ൪ݻ༗ͷΤϥʔͷௐ ࠪͦͷղফɺෛՙࢼݧͳͲ͍͢͠
·ͱΊ 16 • GAEΛ͏͜ͱͰΞϓϦέʔγϣϯͷ։ൃʹྗͰ͖Δ • ϚϧνςφϯτػೳͰෳͷΞϓϦΛਝʹߏஙͰ͖ΔͷͰεϞʔϧελʔτ ʹ͏͚ͬͯͭ • όʔδϣϯɾ໊લۭؒΛར༻͢Δ͜ͱͰಛఆͷ݅ͷڥΛ؆୯ʹߏஙͰ͖Δ ͷͰຊ൪ڥݻ༗ͷΤϥʔͷಉఆɾղফʹศར