サーバレスアーキテクチャにしてみた【デブサミ2017 17-E-2】

39
セッションID: 【17-E-2】 サーバーレスアーキテクチャにしてみた 取締役CTO 石田 健亮 株式会社ドリーム・アーツ @kensuke_ishida

Transcript of サーバレスアーキテクチャにしてみた【デブサミ2017 17-E-2】

Page 1: サーバレスアーキテクチャにしてみた【デブサミ2017 17-E-2】

セッションID: 【17-E-2】

サーバーレスアーキテクチャにしてみた

取締役CTO 石田 健亮

株式会社ドリーム・アーツ

@kensuke_ishida

Page 2: サーバレスアーキテクチャにしてみた【デブサミ2017 17-E-2】

Serverless 僕たちがサーバーレスに取り組んだ話をします

Page 3: サーバレスアーキテクチャにしてみた【デブサミ2017 17-E-2】

おことわり

• 当社はGoogle社、salesforce.com社ほか各社との利害関係は一切ございません。

• 本セッションの内容は当社の体験をもとに構成されています。

• 鵜呑みにせずご自身で体験されることをお薦めします。

Page 4: サーバレスアーキテクチャにしてみた【デブサミ2017 17-E-2】

自己紹介

Page 5: サーバレスアーキテクチャにしてみた【デブサミ2017 17-E-2】

石田 健亮 @kensuke_ishida

株式会社ドリーム・アーツ CTO プロダクトデザイン本部長 プログラマー

Page 6: サーバレスアーキテクチャにしてみた【デブサミ2017 17-E-2】

仕事: 企業向け製品・サービス 社員数: 300人 所在地: 恵比寿、広島、 那覇、石垣、大連 設立: 1996年 技術ブログ: https://insuite.jp/blog/

Page 7: サーバレスアーキテクチャにしてみた【デブサミ2017 17-E-2】

ドリーム・アーツの事業

プロダクト事業

✕ コンサルティング・SI事業

Page 8: サーバレスアーキテクチャにしてみた【デブサミ2017 17-E-2】

1997

2005 2008

2016 2014

プロダクト事業

ドリーム・アーツの製品群 今回お話しするのは エンタープライズチャットサービス「知話輪」

Page 9: サーバレスアーキテクチャにしてみた【デブサミ2017 17-E-2】

https://chiwawa.one

知話輪 2016年11月ローンチ!!

Page 10: サーバレスアーキテクチャにしてみた【デブサミ2017 17-E-2】

知話輪の中身① 弊社製品のINSUITE/ひびきSm@rtDBと連携し、チャットのタイムライン上で業務をすすめることが可能になります。

Page 11: サーバレスアーキテクチャにしてみた【デブサミ2017 17-E-2】

知話輪の中身② ユーザーや組織の管理は、INSUITEのマスターと自動で同期するので大組織への導入も簡単です。

Page 12: サーバレスアーキテクチャにしてみた【デブサミ2017 17-E-2】

知話輪の中身③ グループウェア機能と密接に連動するので、こうして今日のスケジュールが自分のタイムラインに通知されます。

Page 13: サーバレスアーキテクチャにしてみた【デブサミ2017 17-E-2】

知話輪の中身④ ひびきSm@rtDBで営業レポートDBを作成すると、訪問予定の終了のタイミングで営業レポートの登録フォームへの誘導が通知されます。

Page 14: サーバレスアーキテクチャにしてみた【デブサミ2017 17-E-2】

知話輪の中身⑤

知話輪の中身 知話輪の中身 近くのお客様情報が検索できます。

Page 15: サーバレスアーキテクチャにしてみた【デブサミ2017 17-E-2】

知話輪の中身⑥ 地図アプリとの連携も可能。

Page 16: サーバレスアーキテクチャにしてみた【デブサミ2017 17-E-2】

https://developers.chiwawa.one

Developers サイト 詳しく知りたい方はこちらへ

Page 17: サーバレスアーキテクチャにしてみた【デブサミ2017 17-E-2】
Page 18: サーバレスアーキテクチャにしてみた【デブサミ2017 17-E-2】

さて本題の

Serverless

サーバレスとよく耳にするが 人によって解釈が違うなという印象。

Page 19: サーバレスアーキテクチャにしてみた【デブサミ2017 17-E-2】

FaaS (Function as a Service)

AWS Lambda (2015/6〜)

Azure Functions (2016/11〜)

Page 20: サーバレスアーキテクチャにしてみた【デブサミ2017 17-E-2】

PaaS

この2つも自分でサーバを持たなくてもデプロイできる そういう意味ではサーバレスかも

Page 21: サーバレスアーキテクチャにしてみた【デブサミ2017 17-E-2】

mBaaS

これらもまた、サーバが見えないのでサーバレス

Page 22: サーバレスアーキテクチャにしてみた【デブサミ2017 17-E-2】

僕達のサーバーレス

「ケータイとSSHは嫌いだ」

いろんな定義があるが

開発スピードや運用コストを考えた結果、 知話輪にサーバレスを採用

この背景には僕達の痛い経験が……

Page 23: サーバレスアーキテクチャにしてみた【デブサミ2017 17-E-2】

開発ヒストリー

2014 開発開始 Node.js MongoDB Objective-C CoreData AWS Vue.js

2015 盛大に炎上

2016 再出発の夏

2016.11.24 リリース

← サーバレスを採用

Page 24: サーバレスアーキテクチャにしてみた【デブサミ2017 17-E-2】

再出発の時、なぜ僕達はここに流れ着いたか

1. 金がない

3. 興味のままでは生きていけない

2. 時間がない

「サーバレスしかなかった」が真実

Page 25: サーバレスアーキテクチャにしてみた【デブサミ2017 17-E-2】

お金の話

利用者数・時間

オンプレミス

クラウド

サーバーレス サーバレスは 使った分だけ課金。 利用者数、時間に比例して大きくなる。

Page 26: サーバレスアーキテクチャにしてみた【デブサミ2017 17-E-2】

お金の話

2015 2016

AP Node.js 2台(2core/4GB)

-

DB MongoDB 2台(4core/16GB/SSD)

RealtimeDB 20GB

Storage 1TB 1TB

Network 1.1TB/month 1.1TB/month

料金 201,789円/月 43,909円/月

+運用の人

Page 27: サーバレスアーキテクチャにしてみた【デブサミ2017 17-E-2】

お金の話

2015 2016

iOS 1〜2人 3人

WebAPI 1人 1.8人

DB 1人 0人

インフラ構築 1〜3人 0人

合計 7人 4人

43,909円/月 フルスタック デベロッパー

人数が多く、 コミュニケーションパス

が多い

サーバレスで自由度を制限し 重要な領域にフォーカス

Page 28: サーバレスアーキテクチャにしてみた【デブサミ2017 17-E-2】

時間の話

2015 2016

iOSアプリ Objective-C 54,051行

Swift 20,864行

※プラットフォーム部分 8,790行 0行

サーバー実装 Node.js 63,873行

Java(Heroku) 13,304行

※プラットフォーム部分 29,816行 0行

43,909円/月 ※プラットフォーム部分 通信、データ管理、検索エンジン、通知、ファイル管理、 オートスケール、ロギング、インフラ自動構築など

行数で見る

Page 29: サーバレスアーキテクチャにしてみた【デブサミ2017 17-E-2】

Firebaseとは

数百万ユーザ にリアルタイム

同期

Googleに買収されたmBaas

AWS/Azure/Firebase/Herokuで簡単なアプリを作成 →Firebaseがずば抜けて完成度高かった

WebSoclet + ローカルストレージ

データ同期層 + CoreData

+ Realm

Page 30: サーバレスアーキテクチャにしてみた【デブサミ2017 17-E-2】

通知 通知 1

同期

内部API

認証(OAuth2)

API over VPN

Messaging API Webhook API

実行環境単位でデプロイ →厳密には サーバレスではない

知話輪のアーキテクチャ

Page 31: サーバレスアーキテクチャにしてみた【デブサミ2017 17-E-2】

うまい話には裏がある

1. テーブルの結合ができない

⇒ データの更新をトリガーに結合した状態を生成

2. 組み合わせ条件での絞込ができない

⇒ 複雑なものはHeroku上で実装 ⇒ 簡単なものはアプリ内で実装 ⇒ Search Engine as a Serviceを活用

Page 32: サーバレスアーキテクチャにしてみた【デブサミ2017 17-E-2】

うまい話には裏がある

3. オブジェクトの差分更新ができない

⇒ 更新前のデータを保持して、全体を構築してから更新

4. IE8ではSDKが動かない

⇒ 時代が追いつくのを待つ

Page 33: サーバレスアーキテクチャにしてみた【デブサミ2017 17-E-2】

使ってみてわかったこと

Page 34: サーバレスアーキテクチャにしてみた【デブサミ2017 17-E-2】

1. スケーラブルで安定している

自前でWebSocketで同期するストレージを構築しようとすると・・・考えたくもない。

通信に失敗した場合のリカバリ、再同期も含めてSDKで実装されている。

スケーラブル

Page 35: サーバレスアーキテクチャにしてみた【デブサミ2017 17-E-2】

2. パフォーマンスも良好

数10ms単位

Page 36: サーバレスアーキテクチャにしてみた【デブサミ2017 17-E-2】

3. ユーザー数が少ないうちは安い

利用者がある程度増えても、数十万人までならサーバー立てるより安い。

Page 37: サーバレスアーキテクチャにしてみた【デブサミ2017 17-E-2】

4. SDKが便利

認証(パスワード、Google、Facebook、Twitter、GitHub、カスタム)

権限制御

トランザクションが一応考慮されている

いろいろ便利機能がある

Page 38: サーバレスアーキテクチャにしてみた【デブサミ2017 17-E-2】

まとめ

1. 金がない

3. 興味のままでは生きていけない

2. 時間がない

「なんとかなる」 資本がなくてもササッと動かせるものが

簡単にできるようになってきた。 SI業界に広めていき、世の中全体が作ってみよう!

という方向へ行けたら嬉しい。

Page 39: サーバレスアーキテクチャにしてみた【デブサミ2017 17-E-2】

東京・広島・沖縄でエンジニア募集中

ドリーム・アーツ 採用 検索