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

DeNA.go #01 次世代配車アプリ「MOV」 Go事例紹介

hami
May 24, 2019

DeNA.go #01 次世代配車アプリ「MOV」 Go事例紹介

DeNA.go #01 での発表資料です

hami

May 24, 2019
Tweet

More Decks by hami

Other Decks in Technology

Transcript

  1. May 24, 2019 shuhei.ikeda Automotive BU. Smart Taxi Gr. DeNA

    Co., Ltd. DeNA.go #01 次世代配車アプリ「MOV」 Go事例紹介
  2. * Copyright (C) 2019 DeNA Co.,Ltd. All Rights Reserved. •Python

    4年
 •Ruby 2年
 •C# / Erlang / Go1年
 
 MOV リリース1ヶ月後の2018年5月ごろに参加
 いまServerSideのTeamLeader
 
 自己紹介
 *
  3. * Copyright (C) 2019 DeNA Co.,Ltd. All Rights Reserved. •2018年

    4月 神奈川県 地域限定でリリース
 •2018年 6月 神奈川県 対象エリア拡大
 •2018年 12月 東京都 リリース
 
 MOV
 *
  4. * Copyright (C) 2019 DeNA Co.,Ltd. All Rights Reserved. •MOV

    server(2019/01 〜)
 - Go実装
 - WebAPI テストあり
 - 動作確認はChatOpsでE2Eテスト
 
 •MOV server(〜 2018/4)
 - Ruby実装
 - WebAPI テストは一部のみ実装済み
 - 動作確認はPostman
 
 
 MOV SERVERを1年前と比較
 *
  5. * Copyright (C) 2019 DeNA Co.,Ltd. All Rights Reserved. *

    システム構成
 
     before             after

  6. * Copyright (C) 2019 DeNA Co.,Ltd. All Rights Reserved. Rubyは開発者の生産性が高いとても良い言語ですが..


    
 圧倒的なサーバスピンアップ速度
 
 GAE/SE Goの圧倒的なサーバスピンアップ速度
 5分でアクセス数が10倍になるようなpush通知やTV放送といった爆発的なアクセス増加で も事前準備なしでアクセスを捌きるにはGAE/SE Goが最適だった。
 
 -> Go移行で達成できた
 
 
 メモリ効率の良さ
 
 prefork型Web serverでは達成できないメモリ効率の良さ
 
 -> goroutineでmany cpu server のリソースを使い切れる
 
 
 Why Go?
 
 *
  7. * Copyright (C) 2019 DeNA Co.,Ltd. All Rights Reserved. どうやってRuby

    から Go に移行したかはtech blogに記載
 
 
 MOV タクシー配車アプリ RubyからGolangへ刷新 マイクロサービス化 https://engineer.dena.jp/2019/01/mov-rubygolang.html 
 * How
 

  8. * Copyright (C) 2019 DeNA Co.,Ltd. All Rights Reserved. Vue.js

    + Express(GAE/SE Node.js) + GAE/SE Go
 Expressは環境切り替え、IP制限、JWT認証のため利用
 
 * 社内向け管理画面
 

  9. * Copyright (C) 2019 DeNA Co.,Ltd. All Rights Reserved. 試行錯誤した結果

    UnitTestとhandlerのシナリオテストを書く方式に収束した。
 GAE のテスト高速化にはgithub.com/favclip/testerator を利用。
 
 
 
 
 
 
 
 
 * Test
 

  10. * Copyright (C) 2019 DeNA Co.,Ltd. All Rights Reserved. API

    Documentの生成
 
 github.com/swaggo/swag を利用
 structからsample JSON含んだドキュメントを自動生成でき便利
 
 
 * 自動生成

  11. * Copyright (C) 2019 DeNA Co.,Ltd. All Rights Reserved. Slack

    Bot 
 コマンドを共有しなくてもSlackのchat履歴から各エンジニアが学んでいくのが良い
 SlackのReal-Time Messaging APIを利用したbotを構築
 
 
 ▼ Slackから配車結合テストを実行した例
    成功時                  失敗時
 CHAT OPS
 *
  12. * Copyright (C) 2019 DeNA Co.,Ltd. All Rights Reserved. 


    
 負荷・障害に強いシステム実現に向けて
 *
  13. * Copyright (C) 2019 DeNA Co.,Ltd. All Rights Reserved. 


    exponential backoff 
 DB接続失敗時のリトライ間隔時間を失敗ごとに徐々に増やして行く。
 DB高負荷起因でAppサーバがスケールアウトしDBがコネクション数起因でDBが落ちるこ とを防ぐ。
 
 オートスケールするサーバでRDBを利用するなら入れておいて損はないと思います。
 
 
 
 
 負荷・障害に強いシステム実現に向けて1
 *
  14. * Copyright (C) 2019 DeNA Co.,Ltd. All Rights Reserved. 負荷検証の敷居を低く


    
 AWS EC2 + Locustで構築。1営業日あれば負荷が掛けれるようscript化
 少しでもリスクあると思ったら負荷検証できるよう敷居をとにかく低くしておく
 
 
 
 
 
 負荷・障害に強いシステム実現に向けて2
 *
  15. * Copyright (C) 2019 DeNA Co.,Ltd. All Rights Reserved. 


    fallback 実装
 
 サービス落とすより機能下げ縮退運転する
 投入ポイントの見極めが仕様次第で難しいですが刺さると緊急時の銀の弾丸に
 緊急シナリオごとにbizと縮退内容を握っておくとよりよい。
 
 - ETA(予想到着時間)システム高負荷で応答ないとき2点間直線距離で近似計算
 - 新システム投入初期段階はエラー時旧システムにfallback
 - 高負荷時に表示する車両台数を減らす
 
 
 
 負荷・障害に強いシステム実現に向けて3
 *
  16. * Copyright (C) 2019 DeNA Co.,Ltd. All Rights Reserved. 


    
 100倍速めざしてやっていくぞ
 *
  17. * Copyright (C) 2019 DeNA Co.,Ltd. All Rights Reserved. bot,

    WebAPI, gRPCサーバでもシュッと書けてしまうGoの素晴らしさは既に各所で十分語られて いるため省略して..
 
 車両動態 のポーリングが重いので、gRPC with streaming APIで1サーバで捌ける同 時接続ユーザ数100倍目指してやっていくぞ。
 
 * ポーリングWebAPI の gRPC with streaming API化
 

  18. * Copyright (C) 2019 DeNA Co.,Ltd. All Rights Reserved. High

    memory usage server in Golang メモリに乗り切らない膨大なマスタデータをGolang Serverで高速に効率よく扱うにはどうすれば 良いでしょうか。diskストレージからメモリへのデータ展開はprotobufを利用すると直接mapに変 換でき高速に処理できます。 更新されたdiskストレージ上のマスタデータをロック時間最小でメモリ展開するにはRead/Write ロックを組み合わせHot loadingする手法が有効です。 以上を地理空間データを扱った知見を抽象化して紹介します。 https://fukuoka.gocon.jp/ja/speakers/ikeda.sub/ * Go Conference'19 Summer in Fukuoka 登壇します

  19. * Copyright (C) 2019 DeNA Co.,Ltd. All Rights Reserved. 


    
 
 
 「DeNA オートモーティブ」「DeNA AI」で検索
 
 • https://dena-automotive.com/
 • https://dena.ai/
 
 
 
 
 
 * We're Hiring !