Submit Search
Upload
MBaaS for Global and China
•
3 likes
•
2,236 views
N
Naoto Ikeno
Follow
How we develop a Mobile Game Backend as a Service which runs on multiple cloud platforms
Read less
Read more
Software
Slideshow view
Report
Share
Slideshow view
Report
Share
1 of 33
Download now
Download to read offline
Recommended
Game Server Services ではじめる サーバー開発運用しないゲーム開発 /GTMF2019
Game Server Services ではじめる サーバー開発運用しないゲーム開発 /GTMF2019
Game Tools & Middleware Forum
こわくない Git
こわくない Git
Kota Saito
超実践 Cloud Spanner 設計講座
超実践 Cloud Spanner 設計講座
Samir Hammoudi
ゲームの仕様書を書こう4 仕様書作成で楽をするconfluenceの活用
ゲームの仕様書を書こう4 仕様書作成で楽をするconfluenceの活用
Sugimoto Chizuru
MMOGで考えるゲームデザイン
MMOGで考えるゲームデザイン
Katsumi Mizushima
Unicode文字列処理
Unicode文字列処理
信之 岩永
F.E.A.Rにおけるゴール指向プランニング
F.E.A.Rにおけるゴール指向プランニング
Youichiro Miyake
Dynatrace が特別な7つの理由
Dynatrace が特別な7つの理由
Harry Hiyoshi
Recommended
Game Server Services ではじめる サーバー開発運用しないゲーム開発 /GTMF2019
Game Server Services ではじめる サーバー開発運用しないゲーム開発 /GTMF2019
Game Tools & Middleware Forum
こわくない Git
こわくない Git
Kota Saito
超実践 Cloud Spanner 設計講座
超実践 Cloud Spanner 設計講座
Samir Hammoudi
ゲームの仕様書を書こう4 仕様書作成で楽をするconfluenceの活用
ゲームの仕様書を書こう4 仕様書作成で楽をするconfluenceの活用
Sugimoto Chizuru
MMOGで考えるゲームデザイン
MMOGで考えるゲームデザイン
Katsumi Mizushima
Unicode文字列処理
Unicode文字列処理
信之 岩永
F.E.A.Rにおけるゴール指向プランニング
F.E.A.Rにおけるゴール指向プランニング
Youichiro Miyake
Dynatrace が特別な7つの理由
Dynatrace が特別な7つの理由
Harry Hiyoshi
ゲームエンジンとMVC
ゲームエンジンとMVC
AimingStudy
ゲーム開発とMVC
ゲーム開発とMVC
Takashi Komada
Spark MLlibではじめるスケーラブルな機械学習
Spark MLlibではじめるスケーラブルな機械学習
NTT DATA OSS Professional Services
VPCのアウトバウンド通信を制御するためにおさえておきたい設計ポイント
VPCのアウトバウンド通信を制御するためにおさえておきたい設計ポイント
Takuya Takaseki
グリー株式会社『私たちが GCP を使い始めた本当の理由』第 9 回 Google Cloud INSIDE Game & Apps
グリー株式会社『私たちが GCP を使い始めた本当の理由』第 9 回 Google Cloud INSIDE Game & Apps
Google Cloud Platform - Japan
「のどが渇いた」というユーザーに何を出す? ユーザーの「欲しい」に惑わされない、本当のインサイトを見つけるUXデザイン・UXリサーチ
「のどが渇いた」というユーザーに何を出す? ユーザーの「欲しい」に惑わされない、本当のインサイトを見つけるUXデザイン・UXリサーチ
Yoshiki Hayama
サービスブループリントによるシステム設計手法の紹介 - XP祭り2022
サービスブループリントによるシステム設計手法の紹介 - XP祭り2022
Yusuke Suzuki
5分で入門するAzure PlayFab
5分で入門するAzure PlayFab
YutoNishine
スマホマーケットの概要と、マーケティングの失敗例と改善 (アナリティクス アソシエーション 特別セミナー)
スマホマーケットの概要と、マーケティングの失敗例と改善 (アナリティクス アソシエーション 特別セミナー)
Tokoroten Nakayama
RustによるGPUプログラミング環境
RustによるGPUプログラミング環境
KiyotomoHiroyasu
マイクロサービスバックエンドAPIのためのRESTとgRPC
マイクロサービスバックエンドAPIのためのRESTとgRPC
disc99_
テスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるな
Kentaro Matsui
世界を跨ぐリアルタイム PvP 対戦への挑戦 [Google Cloud INSIDE Games & Apps]
世界を跨ぐリアルタイム PvP 対戦への挑戦 [Google Cloud INSIDE Games & Apps]
Google Cloud Platform - Japan
上司が信用できない会社の内部統制~第32回WebSig会議「便利さと、怖さと、心強さと〜戦う会社のための社内セキュリティ 2013年のスタンダードとは?!...
上司が信用できない会社の内部統制~第32回WebSig会議「便利さと、怖さと、心強さと〜戦う会社のための社内セキュリティ 2013年のスタンダードとは?!...
WebSig24/7
Akkaで分散システム入門
Akkaで分散システム入門
Shingo Omura
組織の問題も解決するアーキテクチャ BackendsForFrontends
組織の問題も解決するアーキテクチャ BackendsForFrontends
PIXTA Inc.
PM と PMM のためのコミュニティマネジメント
PM と PMM のためのコミュニティマネジメント
Takaaki Umada
その素敵なUI基盤を目指して・・・
その素敵なUI基盤を目指して・・・
KLab Inc. / Tech
Design Sprint Process / デザインスプリントの実際のプロセスについて
Design Sprint Process / デザインスプリントの実際のプロセスについて
Takaaki Umada
ログの書き方がチームの生産性を爆上げする話
ログの書き方がチームの生産性を爆上げする話
Tsuyoshi Ushio
仮想通貨取引所 bitbank の IaC の導入と実践
仮想通貨取引所 bitbank の IaC の導入と実践
bitbank, Inc. Tokyo, Japan
KubeFlow MeetUp #1 Katibよもやま話
KubeFlow MeetUp #1 Katibよもやま話
Yuji Oshima
More Related Content
What's hot
ゲームエンジンとMVC
ゲームエンジンとMVC
AimingStudy
ゲーム開発とMVC
ゲーム開発とMVC
Takashi Komada
Spark MLlibではじめるスケーラブルな機械学習
Spark MLlibではじめるスケーラブルな機械学習
NTT DATA OSS Professional Services
VPCのアウトバウンド通信を制御するためにおさえておきたい設計ポイント
VPCのアウトバウンド通信を制御するためにおさえておきたい設計ポイント
Takuya Takaseki
グリー株式会社『私たちが GCP を使い始めた本当の理由』第 9 回 Google Cloud INSIDE Game & Apps
グリー株式会社『私たちが GCP を使い始めた本当の理由』第 9 回 Google Cloud INSIDE Game & Apps
Google Cloud Platform - Japan
「のどが渇いた」というユーザーに何を出す? ユーザーの「欲しい」に惑わされない、本当のインサイトを見つけるUXデザイン・UXリサーチ
「のどが渇いた」というユーザーに何を出す? ユーザーの「欲しい」に惑わされない、本当のインサイトを見つけるUXデザイン・UXリサーチ
Yoshiki Hayama
サービスブループリントによるシステム設計手法の紹介 - XP祭り2022
サービスブループリントによるシステム設計手法の紹介 - XP祭り2022
Yusuke Suzuki
5分で入門するAzure PlayFab
5分で入門するAzure PlayFab
YutoNishine
スマホマーケットの概要と、マーケティングの失敗例と改善 (アナリティクス アソシエーション 特別セミナー)
スマホマーケットの概要と、マーケティングの失敗例と改善 (アナリティクス アソシエーション 特別セミナー)
Tokoroten Nakayama
RustによるGPUプログラミング環境
RustによるGPUプログラミング環境
KiyotomoHiroyasu
マイクロサービスバックエンドAPIのためのRESTとgRPC
マイクロサービスバックエンドAPIのためのRESTとgRPC
disc99_
テスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるな
Kentaro Matsui
世界を跨ぐリアルタイム PvP 対戦への挑戦 [Google Cloud INSIDE Games & Apps]
世界を跨ぐリアルタイム PvP 対戦への挑戦 [Google Cloud INSIDE Games & Apps]
Google Cloud Platform - Japan
上司が信用できない会社の内部統制~第32回WebSig会議「便利さと、怖さと、心強さと〜戦う会社のための社内セキュリティ 2013年のスタンダードとは?!...
上司が信用できない会社の内部統制~第32回WebSig会議「便利さと、怖さと、心強さと〜戦う会社のための社内セキュリティ 2013年のスタンダードとは?!...
WebSig24/7
Akkaで分散システム入門
Akkaで分散システム入門
Shingo Omura
組織の問題も解決するアーキテクチャ BackendsForFrontends
組織の問題も解決するアーキテクチャ BackendsForFrontends
PIXTA Inc.
PM と PMM のためのコミュニティマネジメント
PM と PMM のためのコミュニティマネジメント
Takaaki Umada
その素敵なUI基盤を目指して・・・
その素敵なUI基盤を目指して・・・
KLab Inc. / Tech
Design Sprint Process / デザインスプリントの実際のプロセスについて
Design Sprint Process / デザインスプリントの実際のプロセスについて
Takaaki Umada
ログの書き方がチームの生産性を爆上げする話
ログの書き方がチームの生産性を爆上げする話
Tsuyoshi Ushio
What's hot
(20)
ゲームエンジンとMVC
ゲームエンジンとMVC
ゲーム開発とMVC
ゲーム開発とMVC
Spark MLlibではじめるスケーラブルな機械学習
Spark MLlibではじめるスケーラブルな機械学習
VPCのアウトバウンド通信を制御するためにおさえておきたい設計ポイント
VPCのアウトバウンド通信を制御するためにおさえておきたい設計ポイント
グリー株式会社『私たちが GCP を使い始めた本当の理由』第 9 回 Google Cloud INSIDE Game & Apps
グリー株式会社『私たちが GCP を使い始めた本当の理由』第 9 回 Google Cloud INSIDE Game & Apps
「のどが渇いた」というユーザーに何を出す? ユーザーの「欲しい」に惑わされない、本当のインサイトを見つけるUXデザイン・UXリサーチ
「のどが渇いた」というユーザーに何を出す? ユーザーの「欲しい」に惑わされない、本当のインサイトを見つけるUXデザイン・UXリサーチ
サービスブループリントによるシステム設計手法の紹介 - XP祭り2022
サービスブループリントによるシステム設計手法の紹介 - XP祭り2022
5分で入門するAzure PlayFab
5分で入門するAzure PlayFab
スマホマーケットの概要と、マーケティングの失敗例と改善 (アナリティクス アソシエーション 特別セミナー)
スマホマーケットの概要と、マーケティングの失敗例と改善 (アナリティクス アソシエーション 特別セミナー)
RustによるGPUプログラミング環境
RustによるGPUプログラミング環境
マイクロサービスバックエンドAPIのためのRESTとgRPC
マイクロサービスバックエンドAPIのためのRESTとgRPC
テスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるな
世界を跨ぐリアルタイム PvP 対戦への挑戦 [Google Cloud INSIDE Games & Apps]
世界を跨ぐリアルタイム PvP 対戦への挑戦 [Google Cloud INSIDE Games & Apps]
上司が信用できない会社の内部統制~第32回WebSig会議「便利さと、怖さと、心強さと〜戦う会社のための社内セキュリティ 2013年のスタンダードとは?!...
上司が信用できない会社の内部統制~第32回WebSig会議「便利さと、怖さと、心強さと〜戦う会社のための社内セキュリティ 2013年のスタンダードとは?!...
Akkaで分散システム入門
Akkaで分散システム入門
組織の問題も解決するアーキテクチャ BackendsForFrontends
組織の問題も解決するアーキテクチャ BackendsForFrontends
PM と PMM のためのコミュニティマネジメント
PM と PMM のためのコミュニティマネジメント
その素敵なUI基盤を目指して・・・
その素敵なUI基盤を目指して・・・
Design Sprint Process / デザインスプリントの実際のプロセスについて
Design Sprint Process / デザインスプリントの実際のプロセスについて
ログの書き方がチームの生産性を爆上げする話
ログの書き方がチームの生産性を爆上げする話
Similar to MBaaS for Global and China
仮想通貨取引所 bitbank の IaC の導入と実践
仮想通貨取引所 bitbank の IaC の導入と実践
bitbank, Inc. Tokyo, Japan
KubeFlow MeetUp #1 Katibよもやま話
KubeFlow MeetUp #1 Katibよもやま話
Yuji Oshima
KubeFlowでどこまでいける?
KubeFlowでどこまでいける?
Yuji Oshima
GraphQLはどんな時に使うか
GraphQLはどんな時に使うか
Yutaka Tachibana
[DevSumi2019]Cloud Native アプリケーションに最適!Oracle Cloud Infrastructureの魅力!
[DevSumi2019]Cloud Native アプリケーションに最適!Oracle Cloud Infrastructureの魅力!
オラクルエンジニア通信
【BS11】毎年訪れる .NET のメジャーバージョンアップに備えるために取り組めること
【BS11】毎年訪れる .NET のメジャーバージョンアップに備えるために取り組めること
日本マイクロソフト株式会社
[Modern Cloud Day Tokyo 2019] Oracle CloudでDevOps!?Javaアプリケーションのモダン開発を支援するOra...
[Modern Cloud Day Tokyo 2019] Oracle CloudでDevOps!?Javaアプリケーションのモダン開発を支援するOra...
オラクルエンジニア通信
IoTと業務システムをつなぐgRPC/RESTサービスの開発と運用
IoTと業務システムをつなぐgRPC/RESTサービスの開発と運用
DeNA
私たちがGCPを使い始めた本当の理由
私たちがGCPを使い始めた本当の理由
gree_tech
Javaプログラマーももう逃げられない。マイクロサービスとAPIの世界。
Javaプログラマーももう逃げられない。マイクロサービスとAPIの世界。
Takakiyo Tanaka
Azureで実装する話題のコンテナサービス
Azureで実装する話題のコンテナサービス
Tsukasa Kato
Microservices and Servcie Mesh on Azure
Microservices and Servcie Mesh on Azure
Tsukasa Kato
2018 07-19dist
2018 07-19dist
Yuji Oshima
Rdbms起点で考えると見えない世界 okuyama勉強会
Rdbms起点で考えると見えない世界 okuyama勉強会
Masakazu Muraoka
Qlik Senseを使ったSAP ECCとSAP S4 HANAのデータ分析
Qlik Senseを使ったSAP ECCとSAP S4 HANAのデータ分析
QlikPresalesJapan
Oracle Container Engine for Kubernetes (OKE) ご紹介 [2021年5月版]
Oracle Container Engine for Kubernetes (OKE) ご紹介 [2021年5月版]
オラクルエンジニア通信
Intalio japan special cloud workshop
Intalio japan special cloud workshop
Daisuke Sugai
HTML5時代のwebクリエイターに必要なこと
HTML5時代のwebクリエイターに必要なこと
Masakazu Muraoka
.NET Coreから概観する.NETのOSSへの取り組み
.NET Coreから概観する.NETのOSSへの取り組み
Kouji Matsui
GAE + Spannerで目指せ No (Uncomfortable) Ops
GAE + Spannerで目指せ No (Uncomfortable) Ops
Miniascape
Similar to MBaaS for Global and China
(20)
仮想通貨取引所 bitbank の IaC の導入と実践
仮想通貨取引所 bitbank の IaC の導入と実践
KubeFlow MeetUp #1 Katibよもやま話
KubeFlow MeetUp #1 Katibよもやま話
KubeFlowでどこまでいける?
KubeFlowでどこまでいける?
GraphQLはどんな時に使うか
GraphQLはどんな時に使うか
[DevSumi2019]Cloud Native アプリケーションに最適!Oracle Cloud Infrastructureの魅力!
[DevSumi2019]Cloud Native アプリケーションに最適!Oracle Cloud Infrastructureの魅力!
【BS11】毎年訪れる .NET のメジャーバージョンアップに備えるために取り組めること
【BS11】毎年訪れる .NET のメジャーバージョンアップに備えるために取り組めること
[Modern Cloud Day Tokyo 2019] Oracle CloudでDevOps!?Javaアプリケーションのモダン開発を支援するOra...
[Modern Cloud Day Tokyo 2019] Oracle CloudでDevOps!?Javaアプリケーションのモダン開発を支援するOra...
IoTと業務システムをつなぐgRPC/RESTサービスの開発と運用
IoTと業務システムをつなぐgRPC/RESTサービスの開発と運用
私たちがGCPを使い始めた本当の理由
私たちがGCPを使い始めた本当の理由
Javaプログラマーももう逃げられない。マイクロサービスとAPIの世界。
Javaプログラマーももう逃げられない。マイクロサービスとAPIの世界。
Azureで実装する話題のコンテナサービス
Azureで実装する話題のコンテナサービス
Microservices and Servcie Mesh on Azure
Microservices and Servcie Mesh on Azure
2018 07-19dist
2018 07-19dist
Rdbms起点で考えると見えない世界 okuyama勉強会
Rdbms起点で考えると見えない世界 okuyama勉強会
Qlik Senseを使ったSAP ECCとSAP S4 HANAのデータ分析
Qlik Senseを使ったSAP ECCとSAP S4 HANAのデータ分析
Oracle Container Engine for Kubernetes (OKE) ご紹介 [2021年5月版]
Oracle Container Engine for Kubernetes (OKE) ご紹介 [2021年5月版]
Intalio japan special cloud workshop
Intalio japan special cloud workshop
HTML5時代のwebクリエイターに必要なこと
HTML5時代のwebクリエイターに必要なこと
.NET Coreから概観する.NETのOSSへの取り組み
.NET Coreから概観する.NETのOSSへの取り組み
GAE + Spannerで目指せ No (Uncomfortable) Ops
GAE + Spannerで目指せ No (Uncomfortable) Ops
MBaaS for Global and China
1.
MBaaS for Global
and China Naoto Ikeno @ikenox_ GCPUG Tokyo September 2019
2.
⾃⼰紹介 • 池野直⼈ @ikenox_ •
2017年04⽉ DeNAに新卒⼊社 • 2017年04⽉ 〜 2019年04⽉ : オートモーティブ事業部 • Anycaにてバックエンド開発/運⽤ @ オンプレ×Perl5 • 2019年04⽉ 〜 現在 : ゲーム・エンターテインメント事業本部 • 内製MBaaS「LCX」の開発 @ GCP×Java11 今⽇はこのお話👈
3.
本⽇のお話 • DeNAでは現在、ゲーム向けの内製MBaaS「LCX」を新規開発中 • MBaaS
= Mobile Backend as a Service (例: FCM) • 本⽇はLCXにおけるGCPの利⽤事例を紹介します • LCXとは何なのか • LCXはなぜGCP&Alibaba Cloudのマルチクラウド対応か、またそれをどのように実現し ているか • LCXでGAE/Java11を選択した理由、その恩恵や現時点での課題について • おまけ: GAE/Java11でのネイティブバイナリ実⾏の話
4.
About LCX
5.
ゲーム開発における課題①: ⾞輪の再発明 • ゲーム内通貨の管理(課⾦)、ログイン、プッシュ通知など、ゲームの種類によらず必要となる 機能群がある。各ストアのAPIと連携が必要な部分も多い。実装の負担も⼤きめ •
ゲームごとに似たようなものを1から実装していることになる。使い回せるのでは? 各ゲームごとに実装 ゲーム開発者の実装範囲
6.
ゲーム開発における課題②: 中国市場への進出 • DeNAの戦略:
中国は市場規模が⼤きく競合が少ない。⽇本でヒットしたタイトルを中国でも リリースしたい • しかし中国には数多くの独⾃Android App Storeが存在(40以上!)、APIもそれぞれ独⾃ • そのため⽇本のゲームを中国に持っていく際には、各ストア⽤に多くの新規実装が必要 • ゲームごとにこれを⾏うのは現実的ではない 中国以外(⽇本など) 中国
7.
これらの課題を解決するためのMBaaS = LCX •
これらの課題を解決し、ゲームの迅速な開発とパブリッシングを実現するための Mobile Backend as a Service = LCX • ゲーム側は詳細の実装不要、必要に応じてLCXのAPIを呼び出すだけで各種機能を実現 ゲーム開発者の実装範囲 LCX
8.
これらの課題を解決するためのMBaaS = LCX •
ストアごとの差異はLCXが抽象化して隠蔽、中国へのパブリッシングの際もゲーム側の改修不要 • コンセプトとしてはFCMに似ている • 守備範囲がプッシュ通知だけではない&中国市場もカバー ゲーム開発者の実装範囲 LCX
9.
これらの課題を解決するためのMBaaS = LCX •
ストアごとの差異はLCXが抽象化して隠蔽、中国へのパブリッシングの際もゲーム側の改修不要 • コンセプトとしてはFCMに似ている • 守備範囲がプッシュ通知だけではない&中国市場もカバー ゲーム開発者の実装範囲 LCX
10.
LCX on Multi
Cloud Platform
11.
クラウドの選定 • LCXでは、どのクラウドを利⽤するか? • ⾃分たちとしてはGCPを使いたい •
インフラを頑張らなくてもスケールしやすくて、社内で運⽤実績や知⾒もあるApp EngineやDatastoreを使いたい
12.
中国とGoogle • 中国ではGoogleが使えない • グレートファイアウォール •
GCPも例外ではない、中国国内からはGCPにアクセスできない • 例えば、App Engineのドメイン *.appspot.com はブロック対象 • 現状だと独⾃ドメイン経由ならアクセスできるが、今後も⼤丈夫な保証は無い • LCXを中国で運⽤する際、クラウドはどうするか?
13.
クラウドプラットフォームの選択肢 • 中国事情の前提のもと、クラウドプラットフォームの主な選択肢は以下 1. AWSを使う(中国リージョンが存在する) 2.
LCXをマルチクラウド上で動作させる • 中国以外: GCP • 中国: Alibaba Cloud • 結果的には、2を選択 • LCXをマルチクラウド上で動作させることに
14.
マルチクラウド対応という選択 • 結局、運⽤や開発は中国チームによって独⽴して⾏われる部分も多い • LCXは、DeNA中国オフィスのチームとの共同開発プロジェクト。 中国固有のロジック部分の開発や、中国での運⽤は中国チームが担当 •
40個以上のアプリストアとの連携や中国政府との連携など、⽇本チームによる開発・運 ⽤は⾮現実的 • 中国でのゲーム配信の際には、現実的には中国国内にサーバーが必要 • 中国に関してはサーバーやデータを他と共有せず独⽴して運⽤せざるを得ない
15.
マルチクラウド対応という選択 • 以上のことから、無理にクラウドプラットフォームを統⼀することによるメリットは⼩さい と判断 • お互い⾃分達が開発や運⽤の実績があるクラウドプラットフォームを利⽤することに •
⽇本チーム: GCP • 中国チーム: Alibaba Cloud • では、どのようにしてマルチクラウドで動作させるのか?
16.
LCX on Multi
Cloud Platform • ⾔語はJava • 中国、⽇本ともに馴染みがある • 1つのコードをMulti Cloud上で動かす • GCP: GAE/Java11 • Alibaba Cloud: マネージドKubernetes • GAE/Java11(2nd-gen)はApp Engine API⾮依存 • そのため、GAE/Java11の上で動作するアプリはほとん どそのまま他のプラットフォームでも動く! 中国中国以外 Some icons in this page are from http://icons8.com/
17.
LCX on Multi
Cloud Platform • ただし、各クラウド固有のサービスを利⽤する部分に ついては実装が完全に分かれることになる • GCPを使う限りGoogle Cloud APIには依存するこ とになるし、Alibaba側も固有のAPIを利⽤ • データベースは互いに性質が⼤きく異なるものを採⽤ • GCP: Datastore (NoSQL) • Alibaba Cloud: DRDS (RDBMS) • どのようにして異なるクラウド上で共通の動作を担保 するか? GCP Alibaba DB Cloud Datastore Alibaba DRDS Async Task Cloud Pub/Sub Message Service Big Data BigQuery On-prem Cluster Logging Stackdriver Logging Alibaba Log Service 利⽤サービスの違い
18.
• Clean Architectureの考え⽅を適⽤ •
ソースコードの⼤半は共通利⽤しつつ、クラウド 依存の部分のみ個別に実装 • Adapter Pattern, Repository Pattern • interfaceは共通で、実装は2つ存在 • GCP⽤、Alibaba Cloud⽤ • Common modulesから⾒た際のインターフェー スは共通なので、クラウドの違いによる処理の分 岐は現れない LCX on Multi Cloud Platform userRepository.save(user);
19.
LCX on Multi
Cloud Platform GCPで動作させる場合 Alibaba Cloudで動作させる場合
20.
LCX on Multi
Cloud Platform • Clean Architectureの考え⽅を活かして、GCPとAlibaba Cloudの両⽅への対応を実現 • 共有コード内にはクラウド依存の⽂脈のコードが現れない • 必要な部分のみ異なる実装で動く • GAE/Java11のApp Engine API⾮依存の特性もマルチクラウド対応の助けに • 今のところ⼤きな問題は発⽣していないが、まだまだ開発段階のため今後も注視が必要
21.
LCX with App
Engine Java 11
22.
LCX on GCPの構成
(仮) • 機能ごとにApp Engineのサービスを分けたりはしていない。単⼀サービスで全機能を提供 • キャッシュどうするかなど、未確定の部分あり App Engine Cloud Pub/Sub Cloud Datastore Logging Monitoring Cloud Dataflow BigQuery Cloud Storage
23.
App Engine Java
11 • LCXでは、実⾏環境としてGAE/Java11を選択 • GAE/Java11 • App Engine 2nd-gen Runtimeのうちのひとつ • App Engine API⾮依存 • 2019年06⽉にβリリース1 • GCPのプロダクトのβ期間は平均すると6ヶ⽉ほど2 • 何事もなければ、2020年初頭にはGeneral Availability? 1 https://cloud.google.com/appengine/docs/standard/java11/release-notes 2 https://cloud.google.com/products/#product-launch-stages Some icons in this page are from http://icons8.com/
24.
App Engine Java
11 • GAE/Java11はLCXの要件にマッチ • LCXの主な業務は各種App Store APIのwrapping • 処理⾃体は単純なものが多く、App Engineの各種制約が問題になりにくい • App Engineなのでスケーラビリティが⾼い • ハイトラフィックに対応しやすい • 2nd-genでApp Engine API⾮依存なのでポータビリティが⾼い • マルチクラウドに対応しやすい • GAE/Java11はまだβだが、スケジュールには⼗分余裕があると判断
25.
GAE/Java8 ⇒ Java11
で良くなった点 • App Engine API⾮依存の恩恵 • 別のプラットフォームでも動作しやすい(LCXにとって嬉しい) • 利⽤するフレームワークも⾃由に選べる • LCXでは、Spin-upが⽐較的速い&開発時にHot ReloadできるQuarkusを採⽤ • ローカルでの開発時やテスト時にも、App Engineを意識する必要がほとんどない • App Engine専⽤のDevelopment Serverが不要に。普通にJARを作って起動するだ け
26.
GAE/Java11利⽤の際の課題 • 現状、DatastoreのクエリのRemote cacheingの決定打が無い •
1st-genでは使えていたApp Engine付属のMemcacheが利⽤不可 • 代替案 • Memorystore for RedisにServerless VPC Access経由でつなぐ • ただし現状、Objectify(DatastoreのJava Client Library)が明⽰的にRedisをサ ポートしているわけではない • GCEインスタンス上でMemcachedを建ててServerless VPC Access経由でつなぐ • せっかくGAEがサーバーレスなのに • ほかにもStackdriver連携など、現時点だと不便な点がいくつか • このへんはググると⾊々な⼈が語ってくれています
27.
GAE/Java8じゃだめなんですか • 現状だと、1st-genのGAE/Java8を使ったほうが⾊々⼿軽で便利な側⾯もある • 1st-genは、App
Engine周辺エコシステムにべったり依存しているが故の便利さがある • Java8⾃体はまだしばらく⽣き続ける。GAE/Java8のベースであるOpenJDK 8は、Red Hat が2023年までサポート1 • しかし、GAE/Java8がいつまでサポートされるかは今のところ不明 • App Engineに関するアップデートも今後は2nd-gen向けのものがメインになっていくはず で、メインストリームから取り残されるリスクもある • 現状⾟い部分はGoogleも把握しているはず 1 https://developers.redhat.com/blog/2018/09/24/the-future-of-java-and-openjdk-updates-without-oracle-support/
28.
GAE/Java8じゃだめなんですか • 総合的に⾒ると、今からならGAE/Java11が良いと判断 • 各種ライブラリのGoogle
Cloud API対応も少しずつ進んでいたりして、エコシステムも 確実に整ってきている • LCXだと、マルチクラウド対応のような事情もあり、GAE/Java11がより適している
29.
GAE/Java11の可能性: ネイティブコンパイルJava • GAE/Java11ではJavaのネイティブバイナリが動く •
近年になってJavaをネイティブコンパイルする技術が登場(GraalVM) • ネイティブコンパイルしたJavaのSpin-upは10xオーダーで速い • ⼀般的に、JavaはGoと⽐べてSpin-upが遅い • 構成にもよるが、LCXだと現状10〜20sec程度かかってしまっている • 急なスパイクに耐えるための待機インスタンスが必要 • もしSpin-upを速くできれば、待機インスタンスを減らせてコスト削減につながる • LCXでも、ネイティブコンパイルJava on GAE/Java11を⼀瞬検討した(後述)
30.
• 動かしてみる • ネイティブバイナリを作ってgcloud
app deploy • app.yamlのentrypointでネイティブバイナリを指定 • GAE/Java11に空のアプリケーションをデプロイして、Spin-up timeを測定1 • 通常(JVM)の場合: 約 5sec • ネイティブバイナリの場合: 約 0.5sec! • サンプルコード: https://github.com/ikenox/quarkus-appengine-example GAE/Java11の可能性: ネイティブコンパイルJava 1 Instance typeはF1、5回ずつ測定した平均、Stackdriver logging上に記録されるlatencyを測定値としている entrypoint: './target/quarkus-appengine-example-1.0-SNAPSHOT-runner'
31.
GAE/Java11の可能性: ネイティブコンパイルJava • とはいえ、LCXでの利⽤(プロダクション利⽤)はまだ厳しい印象 •
GraalVM⾃体、Production releaseされたのはごく最近 • 既存のJavaの資産が現状使えないことも多い1 • リフレクションを使ってたりするとそのままだとコンパイルが通らない • GAE公式にネイティブバイナリを動かすTutorialがあったりするわけではない。単に事 実として動くという状態 • GAE/Java11上では他⾔語のバイナリも動く2。話の程度としてはそれと同等か • でも今後の動きによっては、Spin-upが早いサーバーレスJavaという夢が実現するかも… 1 https://github.com/oracle/graal/blob/master/substratevm/LIMITATIONS.md 2 https://github.com/ikenox/rust-on-appengine-se
32.
まとめ • LCXにおけるGCPの利⽤事例でした • LCXは中国展開を視野に⼊れ、マルチクラウドに対応する道を選択。コアロジックは共 有しつつ、GCPとAlibaba
Cloudの両⽅で動作 • ハイトラフィック・マルチクラウドというLCXの要件的に、スケーラブルでポータブル なGAE/Java11を選択 • App Engine API⾮依存の恩恵を受けている部分もあれば、現時点で課題も存在 GAE/Java11はもう少し⾜元の整備が必要な感じもあるが、今後に期待 • LCXのローンチに向け、引き続き開発を進めていきます
33.
おわり
Download now