Share
Embed
Transcript
31 slides
-
Copyright (C) DeNA Co.,Ltd. All Rights Reserved. Hiroyoshi HOUCHI System
Development Dept. Open Platform Business Unit DeNA Co., Ltd. "OE"QQͰݟΔ("& Λ༻͍ͨαʔόϨε .JDSPTFSWJDFT ञͱήʔϜͱΠϯϑϥͱ($1 1 -
Copyright (C) DeNA Co.,Ltd. All Rights Reserved. ࣗݾհ ์Ղ ⁃
@hixi_hyi ͱ͔ hixi ͱ͔ͷ HN ͬͯ·͢ ॴଐʑ ⁃ גࣜձࣾDeNA ΦʔϓϯϓϥοτϑΥʔϜࣄۀຊ෦γεςϜ։ൃ෦ ⁃ 4ؒϓϥοτϑΥʔϜ։ൃऀ 3 -
Copyright (C) DeNA Co.,Ltd. All Rights Reserved. ࠓͷ͢༰ GAE Λ༻͍ͨαʔόϨε/Microservices
AndApp ֓ཁ Why GAE ? Microservices on GAE (௨৴͋ͨΓͷ) 4 -
Copyright (C) DeNA Co.,Ltd. All Rights Reserved. AndApp ⁃ DeNA
͕ఏڙ͢Δ PC ͚ϓϥοτϑΥʔϜ - ̍ͭͷΞϓϦΛ֎ͰεϚϗɺՈͰ PC Ͱ ⁃ ଓʑͱΞϓϦϦϦʔεΕͯ·͢ͷͰੋඇ͓ࢼ͍ͩ͘͠͞ - https://www.andapp.jp/ 6 -
Copyright (C) DeNA Co.,Ltd. All Rights Reserved. AndApp ͷΞʔΩςΫνϟશମ૾ 7
Portal Web Cer,ficate Client User Token Connect Product Transac,on Dashboard No,fica,on Payment Accoun,ng CrashReport Applica,on Adver,sement Analy,cs Generic Token Metadata Signer OPE Sta,c Resource Proxy Google Front End RESTful API on Microservices on GAE -
Copyright (C) DeNA Co.,Ltd. All Rights Reserved. AndApp ͷΞʔΩςΫνϟશମ૾ API
ͯ͢ RESTful Ͱͷ࣮ ͦΕͧΕͷ service ͕Ϧιʔεʹର͢Δૢ࡞Λ୲ Ϧιʔεʹର͢Δૢ࡞ͯ͢ɺ୲ͷ service ʹҠৡ e.g. Application API Application ใΛ·ͱΊͯཧɻ PortalSite Application API ʹ RESTful API ͰΞΫηεɻ PortalSite ͦͷσʔλΛ͍͍ײ͡ͷ UI ʹมͯ͠ग़ྗ 8 -
Copyright (C) DeNA Co.,Ltd. All Rights Reserved. ิࣄ߲ ͯ͢ͷσΟϕϩού(ΞϓϦέʔγϣϯ)ͷϦΫΤετ Λ͕͘͞ɺ
Namespace API ΛͬͨϚϧνςφϯ γʔͰͳ͍ BaaS ͱҟͳΓɺϓϥοτϑΥʔϜͷϦιʔεͱ֤ΞϓϦͷϦιʔε͕ࠞ ࡏ͢ΔͨΊ ήʔϜͳͲͰ RESTful API Ͱͳ͘ɺ୯७ͳ API / JSON-RPC API ͳͲͷ΄͏͕ੑ͕ߴ͍(ͱࢥΘΕΔ) ϨΠςϯγݮ·ͱ·ͬͨॲཧͳͲ RESTful (ͷݪଇʹͬऔΔͱ)࣮ݱ ग़དྷͳ͍ɻͪΖΜ RESTful API ͷલஈʹ Cloud Endpoint ͷΑ͏ͳͷΛ ஔ͘ͷ͋Γɻ 9 -
Copyright (C) DeNA Co.,Ltd. All Rights Reserved. ิࣄ߲2 Basic Scaling
(appengine ja night #35ͷ࣌ظ) → Automatic Scaling ʹҠߦத ͪͳΈʹ Basic Scaling ʹͯͨ͠ཧ༝ΫϥυͳΒͰͷʮ͓͕͍ۚ͘Β ͔͔Δ͔Θ͔Βͳ͍ʯ͕ා͔͔ͬͨΒɻ ͕ɺ͓ۚͷݟੵΓ͕ग़དྷͨͷͰ Automatic ͷ΄͏͕ྑͦ͞͏ͩΑͶʔͱɻ ͪͳΈʹݟੵΓΑΓ҆͘ͳͬͨͷͷɺ Ұ൪ΠϯύΫτσΧ͔ͬͨͷ௨৴ྉͩͬͨɻ 10 -
Copyright (C) DeNA Co.,Ltd. All Rights Reserved. Microservices on ΦϯϓϨ
ͷߏ NOT Immutable infrastructure αʔόࣗମ͕ঢ়ଶΛอ࣋ αʔόʹରͯ͠ rsync (or pull) Ͱ্ॻ͖͢ΔϦϦʔεखஈ 1 αʔόʹରͯ͠ෳͷ service ͕Քಇ োൣғͷݶఆ͕Ͱ͖ͳ͘ͳΔɺίετݮʹޮՌ͋Γ ༨Ϧιʔε αʔόࣗମͷௐୡࣗମʹίετ͕͔͔ΔͨΊɺαʔϏεఀࢭͤ͞ͳ͍ͨΊʹ কདྷΛؚΊͨ༨ͳϦιʔεΛ֬อ͍ͯ͠Δɻ ϨϕϧͰݴͬͯɺϐʔΫͱϐʔΫҎ֎ͷ͕࣌ؒಉ͡අ༻͔͔Δ 12 -
Copyright (C) DeNA Co.,Ltd. All Rights Reserved. to GAE NOT
Immutable infrastructure → immutable ʹ vesrion ຖʹ immutable ʹͰ͖ɺΓ͠ݕূ͕༰қ 1 αʔόʹରͯ͠ෳͷ service ͕Քಇ → 1 αʔό 1 service ʹ ཧͱίετͷόϥϯε͕औΕΔ ༨Ϧιʔε → ༨Ϧιʔε(= ίετ)͕গͳ͘ͳΔ + Πϯϑϥཧͳ͠ 13 -
Copyright (C) DeNA Co.,Ltd. All Rights Reserved. Why don't use
others IaaS (GKE / GAEFE) ΦʔέετϨʔγϣϯ͕ΔͨΊىಈ͕͍ εύΠΫʹ͑Εͳ͔ͬͨΓɺৗʹ্ཱ͓ͪ͛ͯ͘ඞཁ͋Γ FaaS (Cloud Function) ·࣮ͩྫख़ʹ͋Γͩͬͨ (2016/05࣌) جຊతʹϦιʔεຖʹ service (component = repository) Λ͚͍ͨͷͰɺ FaaS Ͱཻ͕খ͗ͨ͢͞ 14 -
Copyright (C) DeNA Co.,Ltd. All Rights Reserved. ϓϩδΣΫτཧ ϓϩδΣΫτͷ͚ํ [։ൃڥɾຊ൪ڥ]
x [σΟϕϩούʔ༻ɾຊ൪༻] = dev-sandbox / dev-production / live-sandbox / live-production ʹ͚ͯཧ ϓϩδΣΫτͷཧํ๏ google-mailing-list Λ༻͍ͯ deployer / viewer / analyst Λཧ ͦΕͧΕͷൣғΛ IAM ʹͯఆٛ 17 -
Copyright (C) DeNA Co.,Ltd. All Rights Reserved. όʔδϣϯཧ version Λ༻͍ͨݸਓ։ൃڥ
(DB ڞ༗) dev ڥͰͷ deploy ͰࣗಈͰͦͷਓͷ໊લͰ deploy ͞ΕΔ ಛఆͷ QA ͳͲͷ༻్Ͱ͏߹ɺ໌ࣔతʹͦͷ version Ͱ deploy ͢Δ version Λ༻͍ͨ Blue Green Deployment ຊ൪ deploy ࣌ʹ৽͍͠όʔδϣϯͰר͔Εͯɺͦ͜Ͱ֬ೝޙʹτϥϑΟο ΫΛ͋ͯΔ (ࠓͷτϥϑΟοΫͱ GAE/Go ͷ spinup తʹҰؾʹόπϯͱग़དྷ͍ͯΔ) 18 -
Copyright (C) DeNA Co.,Ltd. All Rights Reserved. Microservices ʹ͓͍ͯߟ͑Δ͖߲ Service
ͷ୯Ґ Ұఆͷࢦඪ͕ͳ͍ͱάμάμͳͷʹͳͬͯ͠·͏ AndApp Ͱ RESTful API ͷఏڙ → Ϧιʔε = Service ͷ୯Ґʹ͍ͯ͠Δ eg. User / Client / Notification API ௨৴ͱೝূೝՄΛͲ͏ઃܭ͢Δ͔ 20 -
Copyright (C) DeNA Co.,Ltd. All Rights Reserved. ༷ʑͳ API ௨৴
21 σΟϕϩούʔͷαʔό͔Β ΤϯυϢʔβͷ͔Β ಉҰ Project Service ͔Β ผ Project Service ͔Β -
Copyright (C) DeNA Co.,Ltd. All Rights Reserved. ͬͪΌ͏͜ͱ ෦௨৴͚ͩಛघͳೝূํࣜΛ͏ ड͚Δଆ͕৭ʑͳೝূํࣜʹରԠ͢Δඞཁ͋Γ
IP ੍ݶͷΈͷແೝূʹͪ͠Ό͏ Ͳ͜·Ͱ৴༻͢Δͷʁ 22 Access Token ͷ Format ΛಉҰʹ -
Copyright (C) DeNA Co.,Ltd. All Rights Reserved. AccessToken ͷݕূ ී௨ʹΔͱͯ͢ͷ
service ͕ೝূαʔόʹຖճϦΫ Τετ͢Δඞཁ͕ੜ͡Δɻ hop ͚ͩ࣌ؒϦιʔε͕ ͔͔Δ AccessToken Λͯ͢ಉҰ Format ͷͷ + JWS(JWT) Λར༻͢Δ͜ͱͰ self verification Մೳͱ͠ ͍ͯΔ 23 -
Copyright (C) DeNA Co.,Ltd. All Rights Reserved. JWS (JSON Web
Signature) ॺ໊͖ͷ JWT (JSON Λ Base64 ͨ͠ͷʹॺ໊͕͍ͭͯΔ) ର伴/ඇରশ伴Λ༻͍ͯॺ໊ݕূΛ͢Δ͜ͱ͕Ͱ͖Δ ޠኮͱͯ͠ҎԼͷͷΛೖΕ͍ͯΔ (JWT/JWKͷجຊใؚΉ) ൃߦऀ (JWT/ iss) ར༻ऀ (JWT/ aud) ୭ͷݖݶͱͯ͠ (JWT / sub) 伴ͷURL (JWK / jku) 伴 id (JWK / kid) ೝՄใ (ಠࣗ) →ݕূ+ޠኮղऍ+ೝՄใʹΑͬͯΞΫηεݖݶͷ༗ແΛΕΔ 24 -
Copyright (C) DeNA Co.,Ltd. All Rights Reserved. ֎෦͔Βͷ AccessToken ͷऔಘํ๏
25 Client Creden,als Grant Token / Cer,ficate API Implicit Code Grant Access Token Access Token -
Copyright (C) DeNA Co.,Ltd. All Rights Reserved. ֎෦͔Βͷ AccessToken ͷݕূํ๏
26 Access Token Token / Cer,ficate API Access Token User API ݕূ伴ͷऔಘ (jku / kid) Ωϟογϡ -
Copyright (C) DeNA Co.,Ltd. All Rights Reserved. ෦͔Βͷ AccessToken ͷऔಘํ๏
Metadata API No,fica,on API ॺ໊伴ͷऔಘ OPE Metadata API ॺ໊伴ͷऔಘ -
Copyright (C) DeNA Co.,Ltd. All Rights Reserved. ෦͔Βͷ AccessToken ͷऔಘํ๏
Token / Cer,ficate API No,fica,on API OPE Token / Cer,ficate API Asser,on Grant Asser,on Grant ݕূ伴ͷऔಘ (jku / kid) ݕূ伴ͷऔಘ (jku / kid) Access Token Access Token -
Copyright (C) DeNA Co.,Ltd. All Rights Reserved. ෦͔Βͷ AccessToken ͷݕূํ๏
(Ҏ߱֎෦ͱҰॹ) Token / Cer,ficate API No,fica,on API OPE Token / Cer,ficate API User API Access Token Access Token -
Copyright (C) DeNA Co.,Ltd. All Rights Reserved. ৭ʑ͍ͬͯΔ͚Ͳ ͯ͢ͷ௨৴ؒʹ͍ͭͯҎԼͷΑ͏ͳݖݶཧ͢Δ͜ͱ ͰݕূΛ؆୯ʹ͍ͯ͠Δ
ಉҰFormatͷ Self verification Մೳͳ Access Token Λ͏ ͷதͰɺService ͷ͚ํͱ௨৴ํ๏Λ͔ͬ͠Γఆٛ͞ Ε͍ͯΕ Microservices Խ؆୯ʹग़དྷΔͱࢥ͍ͬͯ Δ 30 -
Copyright (C) DeNA Co.,Ltd. All Rights Reserved. ·ͱΊ ؆୯ͳ GCP
ͷΘΕํͷ Microservices ΛͲ͏࣮ݱ͍ͯ͠Δͷ͔ (ೝূೝՄ͋ͨΓ) 31