【福岡】GMOペパボ × Sansan合同勉強会 「歴史ある大規模サービスがまだなお成長する秘訣」 - connpass https://sansan.connpass.com/event/71727/ で発表した資料です。
Eightがサーバーサイド/インフラのメンテナンス性向上のために実現してきたこと
View Slide
# sansan_gmopepaboຊͷϋογϡλά
エンジニアの王国から来ましたhttps://slack.com/intl/ja-jp/customer-stories/sansan
菅井祐太朗 (@hokkai7go)Sansan株式会社 Eight事業部インフラエンジニア• Chef実践⼊⾨• Railsエンジニアの横にいる歴 5年• サーバーをレス化する際の権限まわりをあれこれすることが増えた• ⼀般社団法⼈LOCAL 理事
ビジネスの出会いを資産に変え、働き⽅を⾰新するMission
Your business network
本発表についてEightがサーバーサイド/インフラのメンテナンス性向上のために実現してきたことについて事業部全体や、チーム内での取り組みについて紹介します
秘訣7
必要なタイミングで捨てたり作り直したりできることなのかなと
アジェンダ9
チーム体制監視システムリリースアプリケーションログの収集、分析サーバーレス化
チーム体制11
7チーム * 4~5名くらい合計 35名程度のエンジニア
バックエンド開発 5チームモバイル(iOS, Android) 1チーム基盤チーム 1チーム ← ココ
基盤チームRailsエンジニア * 3インフラエンジニア * 2
チームがフォーカスしていること:インフラ、セキュリティ、パフォーマンス、開発者全体の⽣産性向上
監視システム16
2017年1⽉Nagios→Mackerelに完全移⾏
Mackerelでやれることはだいたいやってるが、独⾃でやっているものもある
AWS Integrationで取れないメトリクスの取得、監視粒度の細かいリソースに関するメトリクス⾃動取得→監視に関わるLambdaが4つほど
AWS Integrationで取れないメトリクスの取得、監視Auroraのinnodb statusDynamoDBのキャパシティ消費率計算、監視SESのbounse率計算、監視
例: DynamoDBのキャパシティ消費率計算、監視CloudWatch APIを叩き、Read/WriteCapacityの使⽤率を計算Mackerelに consumed_[read/write]_ratioとしてメトリクスを投稿し、監視を設定
粒度の細かいリソースに関するメトリクス⾃動取得DynamoDB StreamKinesis StreamのShard→増えたときにモニタリング追加が漏れそうなものCloudWatch APIで取得、Mackerelに投稿
Lambdaの他にもIAM権限はTerraformで管理しインフラもコードで管理し、⽇々PR出してます
リリース25
これまで、リリースについてはいくつかの問題点有り
問題点デプロイを複数に分けて⾏う必要があったリリース⽅法が⼀本化されていない部分があった⼿作業が多かったリリースにかかる時間が⻑かった(ひどいと2~3時間)
対策として⾏ったこと
対策の動きリリース所要時間計測リリース改善の機運の⾼まりリリース⽅法の⼀本化リリースブランチPR⾃動作成botの導⼊デプロイとassets:precompileの分離Golden Image(AMI)作成⾃動化Autoscalingの導⼊Blue/Green Deploymentの導⼊設定ファイルの簡略化
リリースブランチPR⾃動作成botの導⼊リリースは⽕⽊の昼頃リリースブランチPR作成をLambdaが⾃動的にやっている→リリース担当の⼿間を削減Slackを⾒られれば、その⽇のリリースPRがわかる
デプロイとassets:precompileの分離これまでデプロイ時にWebサーバ全台で assets:precompileを⾏っていた↓デプロイサーバでのデプロイ時にS3へアップロード、CloudFrontで配信
Golden Image(AMI)作成⾃動化GitHubでmasterブランチをマージApplicationデプロイ済み(全部⼊り)のイメージが⾃動的に出来上がるSlackにリリースコマンドが提⽰される→次の⼀步は、⾃動でリリースかな?
Golden Image(AMI)作成⾃動化
Blue/Green Deploymentの導⼊おなじみのMartin Fowler⽒が提唱した概念・Golden Image作成⾃動化・Autoscaling導⼊・アプリケーションログ収集(後述)が整備されたことで準備が整ったhttps://martinfowler.com/bliki/BlueGreenDeployment.html
リリースの改善についてのまとめ・⼿作業をほぼ撲滅できた・リリース内容に左右されてリリース時間が延びることはなくなった・所要時間のうち待ち時間の割合がかなり増えた・リリース担当から、リリース作業がかなり楽になったとの喜びの声
アプリケーションログ収集、分析37
アプリケーションログもいくつか課題があった
アプリケーションログに関する課題・ログレベルがまちまち・不要なログが⼤量に出ていた・分析⼿段も⽤意できてなかったため、調査のコストがとても⾼い・サーバへログインしなくてはならない状況・セキュリティ的懸念・運⽤事故を⽣む懸念
アプリケーションログに関してやったこと・容量、⾏数の計測・削減⽬標を決めた・不要そうなログをざっくりまとめた・ログレベルの整理・⼈海戦術で不要ログ出⼒を⽌めた・fluentdで収集、Elasticsearch→Kibanaで可視化、分析可能に
サーバーレス化41
https://goo.gl/1dnUeH
https://goo.gl/2U8i58
リアルタイムなリコメンデーションをサーバーレスで実現した
リコメンデーションシステムの概略図
フィードのOGP画像リサイズ&キャッシュをサーバーレスで実現した
OGP画像リサイズ&キャッシュシステムの概略図
Feed OGPը૾ϦαΠζ&ΩϟογϡϦίϝϯσʔγϣϯΞϓϦέʔγϣϯຊମ
サーバーレスの適⽤範囲・リアルタイムリコメンデーション・フィードのOGP画像のリサイズ&キャッシュ機構・監視システムの⼀部→イベントドリブンな処理で今後も適⽤範囲が広がるだろうシステムを分割することでソースコード、リリースなどの依存性を少なくしある程度まではメンテナンス性向上につながる
サーバーレスによる課題・全体像を把握するのが難しい・適切にエラーハンドリングしないと、何が起こっているかわかりにくい・ログ管理のベストプラクティスがまだ無い気がする・マイクロサービス化すると認証、ユーザー基盤とのやりとりが⼤変そう
まとめ・秘訣はたぶん、必要なタイミングで素早く捨てたり作り直したりできること・当たり前のことを当たり前に泥臭く改善している・サーバーサイド、インフラで協⼒して進められている
ありがとうございました