Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

【CEDEC2018】Azure最新情報+「オトギフロンティア」運用大公開+サーバーレスアーキテクチャー

934 views

Published on

2018年8月22日、CEDEC2018 にて 日本マイクロソフト増渕大輔と千代田まどか、KMSの川方慎介さんが講演しました。Microsoft Azureの最新情報と、KMSさんが運営する「オトギフロンティア」の開発・運営のお話です。オンラインゲーム、ネットワークゲームを製作する際にバックエンドサーバー構築の際にご参考ください。 大規模なユーザーアクセスをこなして安定的運用というのは大前提で、これからのクラウドはいかに見通しよく開発体制が回るかどうか。

資料配布用に一部改変しています。(アニメーションの削除や時間の関係で非表示ににしていたスライドを表示に変更、等)

Published in: Software
  • Be the first to comment

【CEDEC2018】Azure最新情報+「オトギフロンティア」運用大公開+サーバーレスアーキテクチャー

  1. 1. Microsoft Azure Xbox Adaptive Controller
  2. 2. Microsoft Azure 2 regions in Japan 140 available in 140 countries 54 regions worldwide
  3. 3. AI と アナリティクス コグニティブ サービス マシンラーニ ング Bot サービス HD イン サイト コンピューティング VMs と ス ケールセット コンテナ サーフィス ファブリック ファンクション データベースと ストレージ Azure SQL Cosmos DB Redis キャッシュ Blob スト レージ アプリと コンテンツ Mobile アプリWeb アプリ CDN ノーティフィ ケーションハブ 開発と デプロイメント VS Team サービス VS アプリ センター Azure バッチ ハイブリッドと ネットワーキング バーチャル ネットワーク ロード・バ ランサー セキュリティ センター ExpressRoute
  4. 4. マイクロソフトのネットワークは、世界第 2 位 の規模(上にいるのは、米国政府のネットワークのみ);
  5. 5. 「Leader」
  6. 6. Blob ストレージ サービス ストレージアカウント VM DEPO 手元にある VHD ファイル OSS の ギャラリー Azure イメージ管理 標準イメージ (MS 提供) マイイメージ (独自テンプレート) Azure Hyper-V Azure 仮想マシン Azure 仮想マシン Azure 仮想マシン Azure 仮想ネットワーク DNS 名とエンドポイント (外部からのアクセス) リソースグループ 仮想マシンから イメージ作成 Azure 基本サービス NLB F/W DNS VPN G/W DHCP ドメイン名管理 9
  7. 7. Dv3 Fv2 • Intel Xeon E7-8890 v3 (Haswell) • Largest VMs in Azure • Up to 128 vCPUs, 4TB RAM • Intel Broadwell E5-2673 v4 • Hyper-Threaded CPUs • Up to 64 vCPU’s, 256GB RAM ネットワーク も速いのでオススメ! 基本的に選ぶのはDv3がおススメ。次ページの Accelerated Network が使えます メモリ不足は Ev3→Mの順に検討。CPU不足はFv2を検討 • Intel Xeon E5-2673 v4 (Broadwell) • Hyper-Threaded CPUs • Up to 64 vCPUs, 432GB RAM • Intel® Xeon® Platinum 8168 processor (Skylake)
  8. 8. Azure Virtual Machines における SQL Server のパフォーマンスに関するベスト プラクティス MySQL でも この (☝) 考え方を適用可能 data files TempDB V M Disk Cache = Read Only Cache Disk Cache = Off log files Disk Cache = Read Write Cach OS Disk DataDisk https://blogs.technet.microsoft.com/jpaztech/2016/03/15/azure-vm-storage-performance/ Azure VM のストレージ パフォーマンスに関する留意点と対処策
  9. 9. SR-IOV (英語) アナウンスBlog
  10. 10. Media Services WebJob Batch maintenance Visual Studio Team Services Gaming app Web app #N Rest web API Auth/ encryption Redis Service Cache Service Game front end API Traffic Manager Web app #N WebSocket Networking Game Stateful Service App Service SQL database— Elastic #N Relational Database Key/Value Document NoSQL DB Continuous integration and deployment Application InsightsCDN Images Unity Asset Static Contents Machine learning Prediction— batch execution Azure Functions Machine learning batch execution Admin tool Data visualization Azure AD API Management API Apps Media Asset
  11. 11. Linux版 Windows版 チューニング Web Apps App Service Environment Azure Database for MySQL (New!) SQL Database コンテナ マイクロサービス サーバーレス CosmosDB グローバル利用実績 Rendering サーバー Jenkins スケーラブル版 事例 こちら Visual Studio Team Services (VSTS) Visual Studio App Center Application Insights Azure Monitor Azure Log Analytics アラート 継続的監視も
  12. 12. SQL Database Web Apps Functions Service FabricAKS/ACS
  13. 13. ここからちょまどパート 「サーバーレス」
  14. 14. (10秒) 自己紹介:千代田まどか • ニックネーム「ちょまど」 • 新卒で入社したSIerを3ヶ月で退職 • その後スマホアプリを C#で開発する デベロッパーとして2年間働く • 2016年に Microsoft に入社 • エンジニア兼マンガ家
  15. 15. 私の描いた絵
  16. 16. chomado
  17. 17. オンプレミス IaaS (一般的な) PaaS サーバレス (これも PaaS の一種) クラウド ハードウェア OS ランタイム アプリ (関数呼び出し) 関数 ハードウェア OS ランタイム アプリ (関数呼び出し) 関数 ハードウェア OS ランタイム アプリ (関数呼び出し) 関数 ハードウェア OS ランタイム アプリ (関数呼び出し) 関数
  18. 18. オンプレミス IaaS (一般的な) PaaS サーバレス クラウド ハードウェア OS ランタイム アプリ (関数呼び出し) 関数 ハードウェア OS ランタイム アプリ (関数呼び出し) 関数 ハードウェア OS ランタイム アプリ (関数呼び出し) 関数 ハードウェア OS ランタイム アプリ (関数呼び出し) 関数 呼び出しのきっかけ「トリガー」 トリガー「DB の data テーブルに 新しい項目が増えたら」 →アウトプット「○○ API を叩く&別の テーブルにデータ挿入」 トリガー「HTTPリクエストが来たら」 →アウトプット「来たデータを解析して DBのテーブルに挿入」
  19. 19. サーバーレス
  20. 20. ちょまどだよ! (音声) ちょまどだよ (筋肉音声) こんなアプリ (Action) 作ったよ!
  21. 21. 3/16にデモ動画を撮って ツイッターに投稿した Google Home に マッチョな声で喋らせた! サーバーサイドは Microsoft Azure Functions 使って言 語は C# で… 再生数 117,700! https://twitter.com/chomado/status/974534165419892736
  22. 22. Demo: 「筋肉ボイス」
  23. 23. Actions on Google ちょまどだよ! (音声) “ちょまどだよ” って言ってるわ。 Webhook に投げるわ ちょまど だよ (筋肉音声) Azure Functions (サーバレスのサービス) (プログラムが実行される場所) “ちょまどだよ” (jsonデータ) VoiceText Web API (text to speech の サービス by HOYA株式会社) “ちょまどだよ” (文字列) Azure Storage (ファイル置き場) mp3 の URL + それを再生して というリクエスト (記法は SSML を 使用) Microsoft Azure (クラウドサービス) Dialogflow
  24. 24. Actions on Google ちょまどだよ! (音声) “ちょまどだよ” って言ってるわ。 Webhook に投げるわ ちょまど だよ (筋肉音声) Azure Functions (サーバレスのサービス) (プログラムが実行される場所) “ちょまどだよ” (jsonデータ) VoiceText Web API (text to speech の サービス by HOYA株式会社) “ちょまどだよ” (文字列) Azure Storage (ファイル置き場) mp3 の URL + それを再生して というリクエスト (記法は SSML を 使用) Microsoft Azure (クラウドサービス) Dialogflow ガリガリ コードを書く部分
  25. 25. トリガー: HttpTrigger 出力: CloudBlockBlob (Storage に出力されたmp3 ファイルの保存URLが簡単に取れる) Webhookで呼ばれる Azure Function の記述 Google アシスタントに渡されたユーザ の入力文字列(“ちょまどだよ”)は、渡って くるJSON データの中の “ResolvedQuery”プロパティの中に 入ってる。ので使う
  26. 26. スピーチ関係では、入力文字列を SSML (Speech Synthesis Markup Language) フォーマットに従って書くと良い感じ。 Googleアシスタントだけでなく、Microsoft Cortana や Amazon Alexa も SSML 対応し てるから覚えておくと便利そう これで Azure Storage に保存した mp3 ファ イルの URL にアクセスできる。 これで引っ張ってこれる。超簡単 Azure Functions では データベース(Storage)への アクセス/入出力が 超簡単に出来る(1行!)
  27. 27. 「GitHub の master ブランチが 更新されたら Functions に デプロイ」 という設定も簡単に可能
  28. 28. Azure Functions に作った API エンドポイント
  29. 29. ここまでちょまどパート 「サーバーレス」
  30. 30. Event Hubs (Event distribution) Data Lake Storage (Offline raw data) Stream Analytics (Real-time data analytics & transformations) Data Lake Analytics (Data transformations) SQL Database Data Factory (Schedule analytics jobs) Azure Functions (Transformations) PlayFab Integrations … PowerBI Game (Sends events) … https://www.youtube.com/wa tch?v=JDtSAZu3Ung Customer Fluffy Fairy Games Game Title Idle Miner Tycoon 『ざくざくキング:採掘王国』 Products and Services Azure Azure App Service Azure Data Factory Azure Data Lake Analytics Azure Data Lake Store Azure Event Hubs Azure Stream Analytics Azure Virtual Machines
  31. 31. SQL Database Web Apps Functions Service FabricAKS/ACS
  32. 32. 主な機能 • スケールアウト・イン • スケールアップ・ダウン • スロット • 共有ストレージ • 独自ドメイン+SSL • 継続的デプロイ (CI/CD) • Kudu 経由の SSH 接続 • etc. Azure を代表する PaaS 機能の一つ 開発者はコードに集中できる ロードバランサ―やスケール調整、バッ クアップといったウェブサーバーに関す る様々な運用作業から解放される 基本はシェアード環境であるが、最近登 場した、「App Service Environment v2」 を利用すると、ロードバランサーなどの マシンリソース、ネットワークリソース が占有型となる。
  33. 33. 論理データベース Write Write Ack Ack Read value write Ack Azure Database for MySQL/PostgreSQL も同じような 構造で、MySQL のままでもAzureを使えます それでもAzure SQL Database は性能・機能の両面で (いまのところ)最強のDBサービス!! 特徴 ⚫無停止フェールオーバー ⚫無停止スケールアップ(プラン変更) ⚫自動パフォーマンスチューニング ⚫スループット指定によるプロビジョニング ⚫(最近)インスタンス指定型も登場! SQL Server Managed Instance (preview)
  34. 34. 有効化の手順 https://docs.microsoft.com/ja- jp/azure/sql-database/sql-database- automatic-tuning 1.CREATE INDEX - ワークロード のパフォーマンスを改善させる 可能性があるインデックスを特 定し、インデックスを作成 2.DROP INDEX - 冗長なイン デックスや重複するインデック ス、また長期間使用されていな いインデックスを特定。 3.FORCE LAST GOOD PLAN - 以 前の良好なプランよりも速度の 低い実行プランを使用している SQL クエリを特定。さらに過去 に確認された良好なプランを使 用してクエリを実行。
  35. 35. 詳細とサンプルコード https://docs.microsoft.com/ja-jp/azure/sql- database/scripts/sql-database-monitor-and- scale-database-powershell
  36. 36. Customer PONOS Corp. Azure Partner CLOUD CREATIVE STUDIOS, INC The game server architecture is designed by CLOUD CREATIVE STUDIOS, INC, first Cloud Solution Provider (CSP) only for gaming customers in Japan.
  37. 37. 株式会社クラウドクリエイティブスタジオ秦泉寺さん 株式会社クラウドクリエイティブスタジオ ゲーム業界特化 Azure CSP!(日本初) Azure CSP (Cloud Solution Provider)とは Microsoft の公式の Azure パートナーです。 クラウド サービスの信頼できるアドバイザー として顧客にソリューション提供を行います。
  38. 38. APIサーバーメ ンテナンス サーバー マスタ ーレ プリ ケーショ ン 運用自動化、 障害通知など Unityアセッ ト CDN Traffic Manager • APIサーバー、 SQL DBはそれぞれ東日本、 西日本に分けて配置 • APIサーバーはASEを 、 それ以外のサー バーはAppServiceを利用 • メ ンテナンス中のみメ ンテナンスサーバー にト ラ フ ィ ッ ク を送る 管理ツール サーバー • チャ ッ ト • 電話 • メ ール WebSocket用 サーバー Customer KMS
  39. 39. オトギフロンティアの場合
  40. 40. 「オトギフロンティア」の少人数開発を支える サーバーレスアーキテクチャー
  41. 41. 136457 144127 211489 224577 244747 263981 294399 328733 370500 401099 437340 512722 559624 0 100000 200000 300000 400000 500000 600000 ユーザー数 事前登録者数 8月 9月 10月 11月 12月 2018/1月 2月 3月 4月 5月 6月 7月
  42. 42. オンプレミス Azure挑戦 某Cloud 某Cloud Azure(今) 2009年〜2013年 2011年〜2013年 2014年〜2015年 2016年〜2016年 2017年〜2018年 約3000台のサーバーを自 社で管理し、20タイトル ほどのスマホゲームを運 用 IaaSで小規模のタイトル を 載 せ て 試 験 運 用 。 Microsoft社の協力のもと 自社で構築。 IaaSで小規模のゲームを運 用。インフラ構築は自社。 運用は、外部。 IaaSで外部で構築、運用 も外部 PaaSで構築。構築、運用も 自社でまかなう (インフラ経験者はいない) リアルタイムバトルが流 行っていて、ピーク時に 合わせてインフラを構築。 リソースをピーク時に合 わせたため、それ以外の 時間帯でリソースが余っ てた。 ノウハウ、アプリの設計 が最適化されておらず、 サービスの負荷に耐えれ ず断念 小規模チームでの運用を実 施。自社で構築し、運用は 外部。運用時に柔軟な対応 ができなかった。 小規模チームでの運用を 実施。外注で構築し、運 用も外注。何を実施する にも費用がかかり、不透 明感が半端なかった。 Azureポータルから、最適な マシン構成と台数を自分で対 応できる
  43. 43. 広告代理店がいきなりゲームを作り出すことにした(0名) (エンジニアいないしゲームも作ったこと無い) フロントはUnity C#、サーバーLISP、DBはMySQLの構成で開発開始(3名) インフラをどうするか問題が勃発(4名) (サーバーサイドと、インフラのエンジニア採用をどうするか??) 一時期、サーバーサイドをPHP、MySQLでAWSで検討(4名) (Azureにはいい印象がなく、選択肢としてなかった。周りのゲーム会社はAWS採用が多かった)
  44. 44. 増渕さん、廣瀬さん(デプロイ王子に相談) 今の時代、サーバーレスですよ!! 現在(6名) フロントUnity C#、サーバーサイドC#、 SQL Server 、Azure(PaaS構成)に決める(4名) LispをC#に変更し、APIをすべて作り直した(リリース4ヶ月前に開始: 5名)
  45. 45. ■App Service ■App Service Environment ■Azure SQL ■Logic Apps ■Function Apps ■Application Insights ■redis
  46. 46. 開発環境 ■ Visual Studio 2017 ■ SQL Server Management Studio ■ git ■ ASP.NET MVC ■ ASP.NET WebAPI2 ■ .NetFramework 4.7 (C#7.2) ■ Entity Framework 6 ■ Redis ■ SignalR ■ Azure ■ PowerShell その他ツール ■ LINQPad ■ Postman ■ Swagger
  47. 47. 開発環境 ■Visual Studio 2017 ■ git ■ Unity 5.4(PC版) ■ Unity 2017(スマホ版) ■ DOTween ■ UniRx ■ WebGL ■ PowerShell その他ツール ■LINQPad
  48. 48. App Service x 1台 メンテナンス用API用 App Service x 20台 API用管理用 マスター Azure SQL DTU4000 Azure SQL DTU125 レプリケーション deploy用 UnityアセットCDN Traffic Manager Application Insights App Service x 20台 App Service x 1台
  49. 49. ASE x 1台 メンテナンス用API用WebSocket用 予備予備 API用WebSocket用 ASE x 3台〜20台ASE x 2台〜4台 管理用 ASE x 1台 マスター Azure SQL DTU1750 Azure SQL DTU125 レプリケーション Redis cache UnityアセットCDN Traffic Manager Application Insights 運用自動化、 障害通知など チャット 電話 deploy用
  50. 50. App Service East → 20台 West → 20台 DB:P15(DTU4000) App Service Environment East→2〜15台 West → 0台 DB:P11(DTU1750) インフラコスト60%減!! パフォーマンスも激高!! 現在リリース当初 • App Service Environmentへ変更 • APIチューニング • DBチューニング • オートスケールチューニング
  51. 51. ASEを作成しEastの設定を、ASE Eastにコピー East20台、West20台の計40台でレスポンスが激悪 ASEのインスタンスを1台立ち上げ、トラフィックマネージャーを使い、ASEに徐々に流し込み 問題ないことを確認し、ASEのインスタンス数を20台に ASのインスタンス数を0台にし、トラフィックをすべてASEに インスタンス数も少なく、レスポンスも大改善!
  52. 52. コメント数も現在402,000コメント超!! ※7月末時点
  53. 53. • Query Performance Insightから問題のクエリを抽出/改善 • SQL Server Profilerで実行計画を見てチューニング
  54. 54. • Indexの自動作成
  55. 55. 月一回、Indexの再構築(統計情報の更新)をメンテ中に実施しています ALTER INDEX [PK_dbo.ULoginBonus] ON ULoginBonus REBUILD; ALTER INDEX [PK_dbo.UPartyPresets] ON UPartyPresets REBUILD; ALTER INDEX [PK_dbo.UFriendPointLogs] ON UFriendPointLogs REBUILD; ALTER INDEX [PK_dbo.Battles] ON Battles REBUILD; ALTER INDEX [PK_dbo.UUnisonBossPartySlots] ON UUnisonBossPartySlots REBUILD; ALTER INDEX [IX_UUserId_IsComplete_IsReceived] ON UMissions REBUILD; ALTER INDEX [IX_MMissionId_UUserId] ON UMissions REBUILD; ALTER INDEX [IX_IfReceived_UpdatedAt] ON UGiftBoxes REBUILD; ALTER INDEX [nci_wi_UMonsters_894F063E7B4EBDD361A5D334D85D9784] ON UMonsters REBUILD; ALTER INDEX [nci_wi_USkills_8A41146790020619BBE105EB1D72D85E] ON USkills REBUILD;
  56. 56. • オートスケールを使用し、オンラインで インスタンス台数をチューニング • イベント時はオートスケールで追いつかないことも • 事前に最低インスタンス数を増やしておく • コストを抑えるため、ユーザーが激減する 時間帯(夜中)はインスタンス数を落ちやすく設定
  57. 57. • 夜は寝たいし、24時間監視できない • 障害を検知して、電話(Twillio)やチャットワークに通知 • Azureポータルと、AplicationInsightで設定し、 通知/復旧も通知
  58. 58. Indexの再構築中にDTUが100% に チャットワークに障害発生の アラートメッセージと、復旧時のメッセージが
  59. 59. • Traffic Managerの向きを変えるだけ
  60. 60. アプリの更新(週2〜3回) • DBのマイグレーションを実施(Entitiy FrameWork使用) • サーバー側アプリをデプロイ (gitへのプッシュをトリガーに自動デプロイ) • クライアント側アプリ(WebGL)をストレージに配置 • ゲーム用マスターデータ投入 ( SQL Server Management Studio 使用) • リリース
  61. 61. • C#好きなエンジニアが集まっている • サーバークライアント関係なくC#開発できる • インフラを意識せずに、サービス開発に注力できる • インフラエンジニアのコストが必要ない • 容易なスケールアウト/イン、アップ/ダウンがオンラインで • 外部サービスとの連携が柔軟で、自分たちの開発を楽に • インフラの状態がポータルで可視化(たまにスマホから操作) • Application Insightsで障害の特定 • 自動チューニングで、DBのIndexの自動作成
  62. 62. 開発者のために 最適化されたクラウド
  63. 63. Azure Database はどれを使うべき? • カジュアルに使うなら「Azure Database for MySQL」 • 3月20日に GA(一般提供) • IOPSの改善やリードレプリカなど徐々に進化しています • 実績と性能 重視なら「Azure SQL Database」がオススメ • Azure の初期から存在するサービス • SQL Server ベースです • 実はMacでも管理ツール動きます SQL Operations Studio https://github.com/Microsoft/sqlopsstudio 既存システム(MySQL)がO/R マッピング している場合はSQL Databaseを ご検討ください
  64. 64. Database Transaction Unit (DTU) 参考:データベース トランザクション ユニット (DTU) とエラスティック データベース トランザクション ユニット (eDTU) の説明 https://docs.microsoft.com/ja-jp/azure/sql-database/sql-database-what-is-a-dtu DTU 使用率
  65. 65. エラスティックデータベースプール
  66. 66. 我こそはパフォチュー野郎必見! SQL Database Managed Instance (preview) https://docs.microsoft.com/ja-jp/azure/sql-database/sql-database-managed-instance
  67. 67. AI と アナリティクス コグニティブ サービス マシンラーニ ング Bot サービス HD イン サイト コンピューティング VMs と ス ケールセット コンテナ サーフィス ファブリック ファンクション データベースと ストレージ Azure SQL Cosmos DB Redis キャッシュ Blob スト レージ アプリと コンテンツ Mobile アプリWeb アプリ CDN ノーティフィ ケーションハブ 開発と デプロイメント VS Team サービス VS アプリ センター Azure バッチ ハイブリッドと ネットワーキング バーチャル ネットワーク ロード・バ ランサー セキュリティ センター ExpressRoute
  68. 68. SQL Database Web Apps Functions Service FabricAKS/ACS
  69. 69.
  70. 70. プログラミング モデル DevOps ツール オーケスト レーション ライフサイクル 管理 正常性 監視 常時稼働 可用性 自動 スケール Azureオンプレミス インフラあらゆるクラウド開発マシン 実行可能ファイルReliable Services (.NET, Java) Reliable Actors (.NET, Java)ASP.NET Core コンテナー
  71. 71. Azure Service Fabric クラスター Azure へ アップロード Windows/Linux 向けの スタンドアロン クラスター パッケージが生成され、 オンプレミスにデプロイされる Service Fabric スタンドアロン クラスター オンプレミスあらゆる クラウド クラスター構成 オンプレミス、Azure 両方のクラスターを ポータルで管理 クラウドに依存しない(AWS上にも構築可能) マイクロサービスを意識しなくても単なるクラスタ リング、オーケストレーション、スケジューリング ソフトウェアとしても利用可能 他のメジャーなオーケストレーションとの違いはス テートフルへの対応
  72. 72. https://channel9.msdn.com/Blogs/The-Game- Blog/Building-Awesome-Games-with-Service-Fabrichttps://azure.microsoft.com/en- us/blog/use-actors-to-talk-to- millions/?utm_term=%23azure
  73. 73. Reliable Actor Customer FunRock Partner Sthlmtechangels Products and Services Azure Azure Active Directory Azure Event Hubs Azure Functions Azure Key Vault Azure Notification Hubs Azure Service Fabric Azure Storage Visual Studio Team Services
  74. 74. Customer Next Games Game Title The Walking Dead: No Man’s Land https://azure.microsoft.com/ja- jp/resources/videos/azure-documentdb-walking- dead/
  75. 75. • インフラエンジニアいなくても 開発できる! • ゲーム開発作業、全体の見通しよくなる!
  76. 76. © 2018 Microsoft Corporation. All rights reserved. 本情報の内容(添付文書、リンク先などを含む)は、作成日時点でのものであり、予告なく変更される場合があります。

×