Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
一休com on クラウド ~ 急成長を支える技術基盤とSRE ~
Search
s-tokutake
January 30, 2019
Technology
4
5.7k
一休com on クラウド ~ 急成長を支える技術基盤とSRE ~
s-tokutake
January 30, 2019
Tweet
Share
More Decks by s-tokutake
See All by s-tokutake
一休.comのアーキテクチャ変遷から考えるサービス分割の勘所
tokutakesatoshi
17
12k
Other Decks in Technology
See All in Technology
Storage Browser for Amazon S3
miu_crescent
1
140
Postman と API セキュリティ / Postman and API Security
yokawasa
0
200
[Ruby] Develop a Morse Code Learning Gem & Beep from Strings
oguressive
1
160
LINEヤフーのフロントエンド組織・体制の紹介【24年12月】
lycorp_recruit_jp
0
530
Amazon SageMaker Unified Studio(Preview)、Lakehouse と Amazon S3 Tables
ishikawa_satoru
0
150
Microsoft Azure全冠になってみた ~アレを使い倒した者が試験を制す!?~/Obtained all Microsoft Azure certifications Those who use "that" to the full will win the exam! ?
yuj1osm
2
110
Amazon VPC Lattice 最新アップデート紹介 - PrivateLink も似たようなアップデートあったけど違いとは
bigmuramura
0
190
How to be an AWS Community Builder | 君もAWS Community Builderになろう!〜2024 冬 CB募集直前対策編?!〜
coosuke
PRO
2
2.8k
alecthomas/kong はいいぞ / kamakura.go#7
fujiwara3
1
300
バクラクのドキュメント解析技術と実データにおける課題 / layerx-ccc-winter-2024
shimacos
2
1.1k
ブラックフライデーで購入したPixel9で、Gemini Nanoを動かしてみた
marchin1989
1
530
なぜCodeceptJSを選んだか
goataka
0
160
Featured
See All Featured
It's Worth the Effort
3n
183
28k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
330
21k
Designing for Performance
lara
604
68k
We Have a Design System, Now What?
morganepeng
51
7.3k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
159
15k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
0
98
The Illustrated Children's Guide to Kubernetes
chrisshort
48
48k
Site-Speed That Sticks
csswizardry
2
190
Build The Right Thing And Hit Your Dates
maggiecrowley
33
2.4k
Imperfection Machines: The Place of Print at Facebook
scottboms
266
13k
Unsuck your backbone
ammeep
669
57k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
169
50k
Transcript
0 一休com on クラウド ~ 急成長を支える技術基盤とSRE ~
1 自己紹介 • 徳武 聡 • システム本部 CTO室 所属 •
入社4年目 • 技術基盤の刷新やサービス運用の改善、SRE(サイトリライアビ リティエンジニアリング)などに携わる。
2 本日の内容 一休の紹介 開発組織について 一休でのSite Reliability Engineering クラウド移行プロジェクト 具体的な移行事例 今後の取り組みとまとめ
3 一休の紹介
4 一休について • 1998年7月30日設立 • 2016年 ヤフーグループ入り • 従業員数 339名
(2018年7月現在) • エンジニアは約50名
5 一休.com • 上質な宿泊施設予約 • 2000年誕生 • 会員数800万人超 • 高い成長率を維持
6 一休.comレストラン • ファインダイニング予約 • 2006年誕生 • 高い成長率を維持
7 新サービスのリリース & メディア紹介 • ホテルスパ予約サービス「一休スパ」 を11月にローンチ • https://spa.ikyu.com/ •
メディア紹介 • 5年間ヒトヤスミしていたのに、なぜ「一休」は再成長したのか • http://www.itmedia.co.jp/business/articles/1811/21/news019.html • 一休社長 榊淳「イノベーション異論」 • https://trend.nikkeibp.co.jp/atcl/contents/18/00087/
8 採用技術/ツール • サーバサイド • ASP.NET WebForms/MVC (VB.NET/C#) • Python,
Flask, Docker • レストランサイトをPythonに移行中 ➢ https://user-first.ikyu.co.jp/entry/restaurant2 • SQLServer, Solr • フロントエンド • Vue.js, TypeScript, Webpack • インフラ • Amazon Web Service, Fastly • モニタリング • NewRelic, Datadog
9 開発組織について
10 エンジニアリング組織の体制 レストラン事業本部 宿泊事業本部 新規事業本部 システム本部 データサイエンス部 プロダクト開発部 10人 3人
プロダクト開発部 15人 4人 デジタルマーケテイング部 5人 10人 営業部 マーケティング部 営業部 マーケティング部
11 事業部のエンジニアは目的型組織でミッションを追う 事業本部 システム本部 プロダクト開発部 UI/UX Partner Alliance etc… Application
Platform SRE
12 システム本部のエンジニアは側面から事業部を支援 事業部 システム本部 プロダクト開発部 UI/UX Partner Alliance etc… Application
Platform SRE 新技術の導入 技術負債の返却 etc リソースプランニング リリースエンジニアリング Devops etc…
13 一休でのSite Reliability Engineering システム本部 Application Platform SRE • SREという肩書のエンジニアはいない。
• システム本部のエンジニアがSREという活動を行っている。 • 必要であれば事業部のエンジニアも信頼性改善を行う。 × システム本部 Application Platform SRE 〇
14 一休でのSite Reliability Engineering
15 ※ SRE = Site Reliability Engineering • この発表では、 SRE
= Site Reliability Engineering です。 • Site Reliability Engineerではありません。
16 この発表を通して伝えたいこと ✓ SREはソフトウェアエンジニアリングを通じて障害を未然に防ぐ ことに注力することで最大の価値が提供できる。 ✓ そのためには、可能な限りのあらゆる成果物をソフトウェアエン ジニアリング=コーディングで生み出せるようにしておく。 ✓ そのために、クラウドや外部サービスを積極的に活用する。
✓ 障害を未然に防ぐためのエンジニアリングに最大限注力する。
17 そもそもSREとは? “要するに、私たちの仕事はシステム内でのアジリティと 安定性のバランスをとることなのです ” SRE本 第9章 「単純さ」 • アジリティ
= 素早さ • システム内のアジリティ = システム変更の素早さ = 開発の素早さ • システムの素早い変更とシステムの安定さを両立させるためのエ ンジニアリングを行う。
18 典型的なSREの活動 ( SRE本 第5章 「トイルの撲滅」より ) 1. ソフトウェアエンジニアリング ➢
コードの作成や修正を含む作業。 • 自動化スクリプトの作成、ツールやフレームワークの作成。 2. システムエンジニアリング ➢ プロダクションシステムの設定、設定の変更。 • サーバセットアップ。モニタリングのセットアップ。 • ロードバランサの設定。各種パラメータチューニングなど。 3. トイル ➢ サービスを稼働させるのに直結している作業で、繰り返されたり、手作業 だったりするもの 4. オーバヘッド ➢ 管理作業。採用や事務作業、ミーティング、評価など。
19 1. ソフトウェアエンジニアリング ➢ コードの作成や修正を含む作業。 • 自動化スクリプトの作成、ツールやフレームワークの作成。 2. システムエンジニアリング ➢
プロダクションシステムの設定、設定の変更。 • サーバセットアップ。モニタリングのセットアップ。 • ロードバランサの設定。各種パラメータチューニングなど。 3. トイル ➢ サービスを稼働させるのに直結している作業で、繰り返されたり、手作業 だったりするもの 4. オーバヘッド ➢ 管理作業。採用や事務作業、ミーティング、評価など。 一休では2年前までは… 技術基盤エンジニアが担当 ビルド&リリーススクリプトの開発 開発環境の整備 インフラエンジニアが担当 物理サーバのセットアップ ハードウェアメンテナンス
20 1. ソフトウェアエンジニアリング ➢ コードの作成や修正を含む作業。 • 自動化スクリプトの作成、ツールやフレームワークの作成。 2. システムエンジニアリング ➢
プロダクションシステムの設定、設定の変更。 • サーバセットアップ。モニタリングのセットアップ。 • ロードバランサの設定。各種パラメータチューニングなど。 3. トイル ➢ サービスを稼働させるのに直結している作業で、繰り返されたり、手作業 だったりするもの 4. オーバヘッド ➢ 管理作業。採用や事務作業、ミーティング、評価など。 作業内容の隔たりが大きかった 技術基盤エンジニアが担当 ビルド&リリーススクリプトの開発 開発環境の整備 インフラエンジニアが担当 物理サーバのセットアップ ハードウェアメンテナンス 大きな壁 作業内容の分断 属人化
21 1. ソフトウェアエンジニアリング ➢ コードの作成や修正を含む作業。 • 自動化スクリプトの作成、ツールやフレームワークの作成。 2. システムエンジニアリング ➢
プロダクションシステムの設定、設定の変更。 • サーバセットアップ。モニタリングのセットアップ。 • ロードバランサの設定。各種パラメータチューニングなど。 3. トイル ➢ サービスを稼働させるのに直結している作業で、繰り返されたり、手作業 だったりするもの 4. オーバヘッド ➢ 管理作業。採用や事務作業、ミーティング、評価など。 今は… 両方ともソフト ウェアエンジニ アが担当 両方ともソフト ウェアエンジ ニアが担当 両方ともソースコードの作成、修正で完結できる。 壁の解消
22 一休でのSite Reliability Engineering • ソースコードの作成、修正でSREが完結する。 • SREに巻き込めるエンジニアの数が増える。 • 専任者への作業集中が防げる。
• エンジニアリングのリソースをより合理的に配置できる。 システム本部 Application Platform SRE
23 なぜ… なぜソースコードの作成、修正でSREが完結できるようになったの か。
24 クラウド移行プロジェクト • 一休のサービスに関するすべてのインフラをクラウドに移行する プロジェクト • Amazon Web Serviceへ移行。2016年末にプロジェクトキッ クオフ。
• 約10人のエンジニアが携わる。 • 2018年4月に完了。 • 物理サーバを置いていたデータセンターを解約完了。 • Amazon Web Serviceでは賄えない部分もこの機会に積極 的に外部サービスを利用するように変更。
25 クラウド移行のキモ 1. クラウドサービスのメリット、利便性を最大限享受できるかたち で移行を行う。 ➢ そのために必要なエンジニアリングには積極的に工数を投下する。 ➢ 必要であればプロダクトのコードも積極的に修正。 •
単に物理的な筐体が仮想マシンになっただけ、という移行には 絶対にしない。 2. この大きなプロジェクトの中で一緒に解消できる技術負債は積 極的に解消していく。
26 Site Reliability Engineeringとしてのクラウド移行 総インシデント数 内インフラ起因のインシデント数 2016年下半期 12 5 2017年上半期
20 6 2017年下半期 12 4 2018年上半期 10 0 2018年下半期 16 0 • インシデント数の推移 • 2017年10月にアプリケーション移行完了 • 2018年2月にデータベース移行完了 • 2018年はインフラ起因のインシデントは0だった。
27 具体的な移行事例 アプリケーションサーバ ビルド/デプロイパイプライン ロードバランサー メールサーバ データベースサーバ モニタリング
28 具体的な移行事例 アプリケーションサーバ ビルド/デプロイパイプライン ロードバランサー メールサーバ データベースサーバ モニタリング
29 アプリケーションサーバ 移行前の課題 ① • 10台以上のアプリケーションサーバを管理 • 設定変更が必要なら管理者が手動で1台づつ対応 • 例えば、月次のWindows
Update • 毎月、担当者が全台を手動適用 • 物理サーバなので、何かあればデータセンターに行く必要あり • 変更に時間がかかる。 • 変更できる人が限られている。 • 本質的でない作業に必要以上に時間がとられる。 Problem
30 アプリケーションサーバ 移行前の課題 ② • モノリシック(Monolithic)なウェブアプリケーション • モノリシック = 一枚岩
• ひとつのアプリケーションでサービスに関するあらゆる機能を 提供 • 顧客向け機能、施設向け機能、社内オペレータ向け機能が単 一アプリケーションで動作 • ソースコードの参照関係も複雑 • 新任の開発者が変更するソースコードを直感的に把握できない。 • 明らかに過剰スペックの物理サーバ • 関心事が適切に分離できていない。 • 適切なサイジングができていない。 Problem
31 アプリケーションサーバ 移行前の課題
32 アプリケーションサーバの課題に対する解決策 • アプリケーションサーバはAWS Elastic Beanstalkに移行 • TerraformでInfrastructure as Codeを実践
• アプリケーションは大規模リファクタリング • ユーザー単位で分割 • 物理サーバ依存のコードを撲滅 = Be Stateless! • AWSのサービスを積極利用 Solution
33 AWS Elastic Beanstalkとは • 公式サイトによれば • “AWS Elastic Beanstalk
により、開発者は AWS クラウドのアプリケー ションを迅速にデプロイし管理することがより簡単になります。 ” • “開発者は単にそのアプリケーションをアップロードするだけで、Elastic Beanstalk が自動的に容量のプロビジョニング、負荷分散、Auto- Scaling、およびアプリケーション状態モニタリングといったデプロイの詳 細を処理します。” • AWSのPlatform as a Service • アプリケーションに必要なミドルウェアをサービスとして提供する。
34 AWS Elastic Beanstalkとは • EC2 + Elastic Load Balancing
+ AWS Auto Scaling の組み 合わせ • 一定以上の負荷でEC2インスタンスが自動で増える。 • EC2インスタンスが障害を起こしたら自動でLBから外れる。 • 自動で新しいEC2インスタンスがサービスイン • アプリケーションデプロイの仕組みも提供 • ローリングデプロイ、 Blue/Greenなどの仕組みを提供 ✓ インフラ管理の大部分をAWSにお任せできる。 ✓ 物理インフラに比べセットアップがはるかに簡単 Good
35 Terraform+AMIでInfrastructure as Codeを実践 • AMI(Amazon Machine Image)はEC2インスタンスのテンプ レート。カスタマイズ可能 •
TerraformはInfrastructure as Codeを実践するためのツール • Infrastructure as Codeとは • ソフトウェア開発の手法でインフラを管理する。 • インフラ構成を宣言的でコードで記述できる。 • コードなのでテストができる。 • コードなのでGitHubで管理できる。
36 Windows Updateを適用するなら 新AMIをElastic Beanstalkに適用 新しいAMIを入手 新AMIでTerraformを更新 新カスタムAMIを作成
37 すべての作業をコード変更で! • インフラ変更に関するすべての作業をソースコードの修正 + CI/CDで実現 • CI/CDにcircleciを活用 • GitHubのPull
Requestのマージをトリガにデプロイ開始 • Elastic Beanstalkが変更適用済のEC2を自動的に立ち上げて サービスイン • 変更適用前のEC2は自動的に破棄。サービスは無停止 Good ✓ コードの修正だけで変更を実現 ✓ 物理インフラに比べセットアップがはるかに簡単
38 アプリケーション大規模リファクタリング① アプリ分割 • 移行プロジェクトで最も工数を費やした作業 • 分割しないとElastic Beanstalkが使えない。 • デプロイパッケージのサイズに上限があるから
• この機会にソースコードの見通しを良くしたい。 • ついでにデッドコード、不要な機能を削除 • 顧客向け機能、施設向け機能、社内オペレータ向け機能を別の アプリケーションとして分離 Good ✓ コードがより簡単に理解できるようになった。 ✓ デプロイパッケージの作成も簡単になった。
39 分割後の構成 Good ✓ 適切なサイジングが可能になった。
40 アプリケーション大規模リファクタリング② Be Stateless! • アプリケーションサーバはいつ破棄されても大丈夫にする。 • Disposable(破棄可能) = Immutable(不変)
• 一度構築したサーバの設定、ソフトウェアは変更しない。 • 変更するなら新しいサーバを作って古いのを破棄 • DisposableならStateless (状態を持たない) にする必要あり • 状態 = アプリ実行で生まれる、アプリ実行に必要な情報 • データベースサーバはStateful = 破棄できない。 • アプリケーションサーバはStatelessにできる。そうするべき。 • そのほうがアプリケーションがシンプルになる。 • 管理もしやすい。
41 一休のアプリは状態を持っていた • サーバのアクセスログを日時で集計してアクセス解析していた。 • サーバを破棄したらログがなくなってしまう。 • アプリが生成したファイルを同期ツールを使って全アプリサー バに配布してダウンロードできるようにしていた。 •
サーバを破棄したらファイルがなくなり404になってしまう。
42 一休のアプリは状態を持っていた • サーバのアクセスログを日時で集計してアクセス解析していた。 • サーバを破棄したらログがなくなってしまう。 ✓ 機能を棚卸しして不要な集計を廃止 ✓ Google
Analyticsのデータから集計 • アプリが生成したファイルを同期ツールを使って全アプリサー バに配布してダウンロードできるようにしていた。 • サーバを破棄したらファイルがなくなり404になってしまう。 ✓ ファイルをAWS S3にアップロード Good ✓ アプリケーションがシンプルになった。
43 アプリケーション大規模リファクタリング③ AWS積極活用 • データセンターのファイルサーバはS3に移行 • GitHub管理する必要のない画像ファイルもS3へ • リポジトリのサイズを小さく •
画像へのリクエストをS3にオフロード • AWS Elasticache Redisでデータのキャッシュ • データベースの負荷軽減 • 応答の高速化 Good ✓ リポジトリが小さくなって開発スピードが向上した。 ✓ アプリケーションサーバ、データベースサーバの負荷軽減
44 参考資料 • AWS S3を使った画像管理の改善について • https://speakerdeck.com/kensuketanaka/ikyu-storage-improvement • クラウド移行後に実施した画像最適化とサイトスピード改善について •
https://speakerdeck.com/shotaakasaka/imageoptimize-sitespeed- up-ikyu-with-imgix • アプリケーションの分割とElastic Beanstalkへの移行について • https://user-first.ikyu.co.jp/entry/2017/12/08/110000
45 具体的な移行事例 アプリケーションサーバ ビルド/デプロイパイプライン ロードバランサー メールサーバ データベースサーバ モニタリング
46 ビルド/デプロイパイプライン 移行前の課題 • 頻繁にデプロイが失敗する。 • デプロイセット作成でエラー発生。 • デプロイフローの途中で止まる。 •
リリース当番のエンジニアがマニュアルでトラブル対応 • リリースは事業部のエンジニアが当番制で担当している。 • 本来やるべき自分の仕事ができない。
47 ビルドデプロイパイプライン なぜ不安定? • デプロイスクリプトが複雑で独自 • ロードバランサ、ファイル同期ソフトと連携して自前でカナリ アリリースを実現 • 変更分のみのデプロイを実現するため差分を抽出
• トラブル対応に多くの知識が必要で時間がかかる。 • ファイル同期ソフトが不安定 • 商用ソフトウェアだが動作不良になるケースがある。 • ビルドデプロイパイプラインが独自過ぎる。 Problem
48 移行前のビルド/デプロイフロー ロードバランサー アプリケーションサーバ ファイル同期ツール ロードバランサから切り離す API経由で操作 • デプロイセットの作成 •
ビルド • 変更差分の抽出 • ロードバランサの操作 • 対象サーバの切り離し • デプロイセットの配置 • ファイル同期ツールの一時停止 一時停止 一時停止
49 ビルドデプロイパイプラインの課題に対する解決策 • 動作に必要なすべてのファイルをデプロイ • 差分デプロイをやめるためのエンジニアリングを実施 • Disposableにするには差分デプロイではダメ • ビルドは外部のCIサービスで実行
• Jenkinsをやめるためのエンジニアリングを実施 • デプロイパッケージの仕様は標準に合わせる • デプロイはElastic Beanstalkにお任せ Solution
50 差分デプロイをやめよう • なぜ差分デプロイの必要がある? • サイトのデザイン変更を素早く実現するため • フロントエンドの資材だけ素早くデプロイ • 一休.comはデザインが命
• 変更が高頻度な部分はデプロイ不要で変えられるようにしよう。 簡易なCMSを開発
51 簡易CMSでバナー変更を楽ちんに! Elasticache Good • jsonをアップロードするだけでバナーを変更できる仕組みを開発 • アプリのデプロイと無関係にデザインを変えられる。 ✓ デザイナーの関心とアプリのデプロイが疎結合に
✓ デザイン変更の工数削減 ✓ 差分デプロイの廃止
52 ビルドは外部のサービスで実行 • 外部のCI/CDサービスを利用 • ビルドの定義ファイルをアプリと同じリポジトリで管理できる。 • ビルド環境自体が状態を持たないようになっている。 • 問題が特定しやすい。
• ビルド環境の変更も定義ファイルを変えるだけでOK
53 デプロイはElastic Beanstalkにお任せ • CI/CDはデプロイパッケージを作成してElastic Beanstalkにデプ ロイ指示をするだけ。 • デプロイ自体はElastic Beanstalkが安全に実行してくれる。
• ロードバランサからサーバの切り離し • 資材のデプロイとヘルスチェック • Elastic Beanstalkのデプロイパッケージ(zip)は512MB以下に する必要あり。 • 不要なコードを徹底的に削除 • 画像はなるべくS3に配置してデプロイパッケージから排除 • デプロイスクリプトも可能な限りシンプルに。
54 変更後のデプロイフロー マージをトリガにビルド開始 APIでデプロイ指示 Windows環境で動作するアプリはAppveyor Linux環境で動作するアプリはcircleci Good ✓ ビルド/デプロイフローが安定 ✓
リリース回数が日次1回から日次3回へアップ
55 参考資料 • 一休.comのビルド/デプロイの歴史について • https://speakerdeck.com/kensuketanaka/ikyu-deploy-flow • https://speakerdeck.com/minato128/ikyu-deploy
56 具体的な移行事例 アプリケーションサーバ ビルド/デプロイパイプライン ロードバランサー メールサーバ データベースサーバ モニタリング
57 ロードバランサー 移行前の課題 • アプライアンスを利用 • トラフィックの制御のルールがバージョン管理されていない。 可読性も悪い。 • 変更も手作業
• 特定のエンジニアしか変更できない。 • アプライアンスは保守作業が大変 • ソフトウェアのアップデート • 保守契約の更新 • トラフィック制御のルールがわかりにくい • メンテナンスが大変 Problem
58 移行先を検討! • [案1]自前でnginxを立てて運用する。 • 可用性も自分たちで担保する必要がある。 • 設計が複雑になりそう。 • マネージドなサービスを活用したい。
• [案2] AWS Application Load Balancerに移行 • 既存のトラフィック制御のルールが完全に移植できない。 • オリジンサーバ側のリライト処理も修正が必要 • 工数がかかりそう。
59 CDNサービス見直しでFastlyを検証してみると • Fastlyはリバースプロキシとして活用できそう。 • 既存のトラフィック制御のルールも移植できる。 • マネージドなサービス • 設定もプログラマブル
60 Fastlyとは • CDN = コンテンツ配信ネットワーク • 効率的かつ高速にコンテンツを届ける仕組み • HTTPアクセラレータであるVarnishを利用している。
• Varnish = キャッシュ機構搭載のリバースプロキシ • VCL(Varnish Configuration Language)で柔軟にルーテ ィングできる。 • 大規模なサービスも使っているので信頼性も高そう。 • Fastlyに移行! Solution
61 VCLファイルの変更もInfrastructure As Code VCLファイルはGitHubで管理 マージをトリガにしてCIが起動 circleci上でTerraformが適用を実行 AWS Application Load
Balancer AWS EC2
62 キャッシュ機構も積極的に活用 • ゴールデンタイムのTVで宿泊施設が話題になる。 • 平時の2倍のアクセスが来てトラフィックがスパイク! • Fastlyキャッシュがコンテンツを返すのでサービスには影響なし
63 アプリケーション開発にも積極的活用 • 新機能の部分リリース • 特定のパラメータがあるときだけ新機能を有効にする。 • VCLファイルのデプロイが高速なので簡単に実験できる。 • リクエスト追跡IDを付与
• VCLでリクエストヘッダにユニークIDを付与 • アプリケーションログや各種メトリクスにユニークIDを出力 • リクエスト単位での調査がやりやすくなった。 Good ✓ 誰でもルーティングの定義が変更できる。 ✓ アプリケーション開発でも積極的活用 ✓ キャッシュ機構活用でサイトの信頼性アップ
64 具体的な移行事例 アプリケーションサーバ ビルド/デプロイパイプライン ロードバランサー メールサーバ データベースサーバ モニタリング
65 メールサーバー 移行前の課題 • Windows Serverのメールサーバ機能とアプライアンスで実現 • アプリケーションの実装が複雑 • 再送処理を自前で実装
• 同期処理でメール送信しているので重い • メールで通知する必要のないメッセージも多数 • アプライアンスは保守作業が面倒 • 可用性の確保 • ソフトウェアのアップデート、保守契約更新 • アプリケーション側の実装が複雑で最適でない • メンテナンスが大変 Problem
66 SMTPサーバの運用自体をなくしたい • サービスとしてはメールが送信できればいいだけ。 • SMTPサーバを自前で運用する必然性はない。 • 外部サービスを使うことに決定。 • 同時にメール送信処理をリファクタリング
• SendGridに移行! • メール送信は非同期処理に! • 必要のないメールは廃止 or Slackに移行! Solution
67 SendGridとは • メール配信サービス • アプリケーションはWeb API経由でメール送信できる。 • SMTPを使わずに済む。 •
日本での事例も多い。 • 携帯キャリアの独自の制限を考慮した配信アルゴリズム になっているはず。 • 日本に正規代理店もある。
68 メール送信基盤を開発 アプリケーション AWS SQS AWS EC2 AWS DynamoDB メールをキューに詰める
キューから メールを取得 送信したメールを保存 APIをコールして送信実行 カスタマーサポートスタッフ 必要に応じて履歴を確認
69 メール送信基盤を開発 • すべてのアプリケーションが使えるメール配信基盤を開発 • アプリケーションは所定のフォーマットのjsonをキューに詰め るだけ。 • あとは配信基盤がすべての処理を行ってくれる。 •
メールの配信 • 配信ステータスの更新 • バウンス対応 Good ✓ アプリケーションがシンプルに! ✓ 運用も簡単に!
70 参考資料 • メール配信基盤の開発と運用について • https://speakerdeck.com/minato128/ikyu-mail-platform • https://user-first.ikyu.co.jp/entry/2017/12/05/000000 • SendGridの活用方法
• https://user-first.ikyu.co.jp/entry/2018/06/06/142759
71 具体的な移行事例 アプリケーションサーバ ビルド/デプロイパイプライン ロードバランサー メールサーバ データベースサーバ モニタリング
72 • ハードウェア運用管理が難しい。 • 属人的になってしまう。 • 調達に時間がかかる。 • 調達から本番投入まででトータル2ヶ月くらいかかる。 •
ライフサイクル(製品寿命)に振り回される。 • ファームウェアのアップデートしたら障害発生 • 利用していたストレージのベンダが倒産して調達不可能に。 データベースサーバ 移行前の課題 • 運用に作業工数がかかりすぎる。 • 増強に時間がかかる。 Problem
73 AWS EC2でSQL Serverのクラスタを構築 Good ✓ 意思決定から1週間程度でサーバの増強が可能に!
74 詳細はブログで公開中 • https://user-first.ikyu.co.jp/entry/sql-server-aws-1 • https://user-first.ikyu.co.jp/entry/sql-server-aws-2 • 移行の背景、方針、移行当日の生々しい話はブログで!
75 具体的な移行事例 アプリケーションサーバ ビルド/デプロイパイプライン ロードバランサー メールサーバ データベースサーバ モニタリング
76 クラウドサービスのメトリクスはDatadog • クラウドサービスの各種メトリクスのモニタリングはDatadog • AWSの各種サービスとのインテグレーション機能が豊富 • すべてのアプリケーションサーバにスクリプトでインストール • 通知はすべてSlackのアラートチャンネルに送信
• アラートチャンネルには全エンジニアがJoin
77 アプリケーションの性能はNewRelic • APMサービス • APM = Application Performance Monitoring
• アプリケーションの性能指標を細かく追跡できる。 • KPIを定めて性能が劣化したらSlackに通知する。 • 有償版を導入して、SQLのトレースも活用 • 性能モニタリングのサービスだが障害調査にも有用 • アプリ内部の急激な速度劣化をグラフで表してくれる。 • 急激にトラフィックが伸びているエンドポイントを示してくれる。
78 まとめと現状の課題、今後の取り組み まとめ 現状の課題、今後の取り組み
79 まとめ
80 • SREは障害を未然に防ぐ活動に注力するのが一番合理的 SREは障害を起こさないための活動 トイル撲滅しなきゃ ポストモーテム 書かなきゃ オンコール対応だ! 自動化だ! インシデント管理
しなきゃ SLOを作成しなきゃ
81 障害を起こさないための最適な手段に注力する トイル撲滅しなきゃ ポストモーテム 書かなきゃ オンコール対応だ! 自動化だ! インシデント管理し なきゃ SLOを作成しなきゃ
障害を未然に防ぐための手段 • 障害を防ぐために最も効果的な手段にリソースを集中投下する。 • 全部やろうとしない。
82 障害を未然に防ぐ活動 = ソフトウェアエンジニアリング にする! • ソースコード修正でエンジニアリングが完結するメリットは大きい。 • 作業のオーバーヘッドが少なくなる。 •
SREに巻き込めるエンジニアの数が多くなる。 • プロダクトのコードの修正もしやすくなる。 • クラウドやSaaSを活用すればソースコード修正で完結できる。 • コードをGitHubなどのリポジトリで管理。 • テストとデプロイを外部CI/CDサービスで実行。 • ただし、適切に活用する。 • 自分たちの考えやプロダクトをクラウド側の特性に合わせる。 • クラウドの利点を最大限活用する。
83 Betterな姿を探るには • Betterな姿を具体的に描くのは難しい。 • 課題は感じるけれど「どうなったらいいのか」は曖昧 クラウドの利点を最大限活用できるサービス基盤 サービス基盤のBetterな姿 • Betterな姿を探るには
• 技術、サービス、方法論が解決しようとしている課題を把握 する。 • その課題と自分たちの課題を突き合わせる。 一休の場合
84 大きなプロジェクトの効能 • Infrastructure as CodeやBe Statelessなどはクラウドに移行し なくても実践できる。 • が、実際には難しい。
• 既存の開発案件の流れの中でやるのは大変 • 大きなプロジェクトに携わると視点が切り替わる。 • この機能、使っているんだっけ。 • この運用作業、やってる理由は? • 大きいはプロジェクトは普段できない課題解決の実行チャンス • ひとつのアイディアで複数の課題を解決する。
85 まとめと現状の課題、今後の取り組み まとめ 現状の課題、今後の取り組み
86 今のままの体制で大丈夫? システム本部 Application Platform SRE • サービスの成長、新サービスのローンチでSREの占める割合 が大きくなってくる。 人を増やそう。専任者を置こう。
or コードを書いて解決するべし。 人手がかからないサービス基盤にしたのだから バランスを取る必要あり
87 ボトルネックのない開発体制、開発環境を目指す システム本部 Application Platform SRE 宿泊事業本部 プロダクト開発部 レストラン事業本部 プロダクト開発部
支援 支援
88 ボトルネックのない開発体制、開発環境を目指す システム本部 Application Platform SRE 宿泊事業本部 プロダクト開発部 レストラン事業本部 プロダクト開発部
支援 支援 事業展開のボトルネック になっちゃダメ
89 ボトルネックのない開発体制、開発環境を目指す • 新サービスの環境に時間がかかる。 • Elastic Beanstalkは便利だけど設定が煩雑。 • ビルド/デプロイ、スケールアウトにかかる時間を短縮できないか。 •
開発者のローカルの開発環境セットアップをもっと簡単にしたい。 • DockerやKubernetesなどコンテナ技術で改善できないか
90 プロダクトの品質を維持するための基盤作り 総インシデント数 内インフラ起因のインシデント数 2017年上半期 20 6 2017年下半期 12 4
2018年上半期 10 0 2018年下半期 16 0 • プロダクト起因のインシデントが多い。 • フロントエンド(js,css)開発の比重が高まっている。 • モニタリング、品質保証基盤がこの変化に追いつけていない。 • プロダクトの進化に寄り添った品質保証基盤の構築
91 ご清聴ありがとうございました