Slide 1

Slide 1 text

freee 株式会社 freeeにおけるSRE的取り組み - スケーラブルなサービス・組織を目指す - 2018.11.28 SRE Lounge #6

Slide 2

Slide 2 text

- メーカー研究所(組み込み系)を経て今年1月に freeeにJoin - サービスインフラ構築、監視、アラート対応、生 産性改善、マイクロサービス化推進、色々やっ てます - Github: at-k - Twitter: at_k Atsushi Kawamura 河村 篤志 freee株式会社 2

Slide 3

Slide 3 text

3 アジェンダ ● freeeの概要 ● サービス規模拡大へ対応する ● 社員数増大へ対応する freeeにおけるSRE的な取り組みを、広めな感じで紹介します

Slide 4

Slide 4 text

01 freeeの概要 「スモールビジネスを、世界の主役に。」 4 Section

Slide 5

Slide 5 text

5 スモールビジネスのトータルサポート 会社設立 freee クラウド 会計ソフト freee 人事労務 freee ✩ はじめる ↻ 運営する ↗ 育てる いつでもどこでも 5分で会社設立 モバイル完全対応 業務をカンタンに自動化できる シェアNo.1の クラウド会計ソフト 給与事務と労務事務を 1クリックに マイナンバーもお任せ ● ビジネスのはじまりから成長までをサポートするプロダクトを提供

Slide 6

Slide 6 text

6 6 在庫 社内業務 会計 販売管理 調達管理 仕 入 先 得 意 先 債権管理 債務管理 発注 仕入計上 支払管理 出金 受注 売上計上 債権管理 入金 自動仕訳 仕訳 経費精算 給与計算 発注 納品 出金 受注 納品 入金 請求 在庫管理 = freee対応領域 入荷 出荷 対応領域(会計フリー 一部) ● 在庫管理モジュール以外の領域をワンパッケージで提供 ● システムがモジュール単位で分離していない(ツギハギのないシステム) 債務 管理 債権 管理 請求 管理 AI 会計 分析 経費 精算 6 ● 会計業務を自動化・集約管理し、業務効率化・意思決定をサポート

Slide 7

Slide 7 text

7 プロダクトの歴史 ● バックオフィス業務をサポートする様々なサービスを日々リリース ● 以下は主要プロダクトの1st release 2012 2013 2014 2015 2016 2017 2018 会社設立

Slide 8

Slide 8 text

02 サービス規模拡大に対処する - freeeのインフラアーキテクチャ 8 Section

Slide 9

Slide 9 text

9 サービスの規模は順調に拡大 クラウド会計ソフトのシェアの割合 [1] 35.2% [1] BCN調べ、https://corp.freee.co.jp/news/bcn-retail-7537.html (2017) [2] 当社調べ、「クラウド会計ソフト freee」を実際に利用した事業所数 (2018) 6.5万 30万 60万 80万 100万 有効事業所数 [2] ● 有効事業所数は100万達成 ● サービスの種類も多様化(会計、労務、申告、開業、mynumber... )

Slide 10

Slide 10 text

10 課題:サービス規模拡大への対応 ● サービス規模が2倍になったからと言って運用人員を単純に2倍にしてよいか? ● サービスの種類が増えた分だけ個別に同じものを用意していくのは非効率 -> 自動化、共通基盤化の推進

Slide 11

Slide 11 text

11 AWSを全力活用する freeeではサービスの殆どをAWS上で運用しています

Slide 12

Slide 12 text

12 例: インスタンス追加の自動化 ● CPU使用率、キューに積まれたタスク数 ● Scheduled Actionによるインスタンスの自動先行追加/削減 負荷が高ければ自動でインスタンス起動 起動したインスタンスは自動でmackerelの監視対象に入る

Slide 13

Slide 13 text

13 他のAWS利用例 ● Securityの自動化 - AWS WAF、GuardDuty ● データストア - RDS、S3、Elasticache ● 開発・Deploy支援 - Code Build、Code Pipeline、Cloud Formation ● 分析・ログ - Redshift、Elasticsearch、Kinesis etc etc… なるべくマネージド・サービスを使っていくことで、大規模サービスを効率的にさばいていく // もちろんトレードオフ(コスト・柔軟性・依存度など)は理解した上で

Slide 14

Slide 14 text

14 SaaSを全力活用する ● AWSだけではカバーしきれない領域を、各種SaaSで補っていく ● 以下はfreeeで利用しているサービス(一部)

Slide 15

Slide 15 text

15 定期的な見直し・チューニング ● 一度は構築した自動化も、ほっといておくと錆びついてしまう - instance type、scale ruleの見直し、deploy & provisionシーケンス見直し - Capacity Planning(繁忙期) - Reserved Instance - aws のpredictive scalingがこの辺勝手にやってくれたりするようになると嬉しい Reserved Instance購入例 繁忙期のアクセス数予測

Slide 16

Slide 16 text

16 各種サービスを使いこなして大規模サービスを運用する 定期的な見直しの機会を設けて正しくチューニングする

Slide 17

Slide 17 text

03 組織拡大に対処する - 生産性改善への取り組み 17 Section

Slide 18

Slide 18 text

18 社員数の大幅増加 大体 100名/年で増加している (エンジニアは現在100人くらい) 2014年の記事 社員数 70名 2017年の記事 社員数 360名 現在

Slide 19

Slide 19 text

19 課題:組織拡大への対応 ● 人員が2倍になっても無条件に生産性は2倍にならない -> 知識共有の見直し、権限整理、開発手法見直し

Slide 20

Slide 20 text

20 SREオンボーディング freee SREチームはこの1年で4人増員しました(自分含む なるべく早く戦力になる、そのために ● 社内の問い合わせ窓口でとにかく球拾い(3〜4件の問い合わせ/日) - わからなくても責任をもって進める、当然わからないものとして、周りに聞いて進める ● フルセットのテスト環境を構築する - サービス構成を学べるし、テスト環境を開発チームに提供できて一挙両得

Slide 21

Slide 21 text

21 知識共有改革 ● SREヒーロー / SRE留学 - SREでないエンジニア向けの短期留学コース - インフラ周りの問題に対応できる人員を育成していく - サービス基盤の概要や、運用の知見を共有 - システムの負荷調査 - SREタスクのレビュー依頼 - 障害対応ペアオペ - など ● 障害振り返り会 - 直接関係しないメンバも含めて振り返り会する - 問題発生時のフロー・対応マニュアルの整備 ● “あえて共有” 文化 - 言いにくいことも含めて、知識共有をしやすい空気を作る

Slide 22

Slide 22 text

22 アラート対応の一部移管 SREが提供した仕組みの上で、アプリエンジニアが個々の責務で対応できるようにする ● アラート対応方法をalerting textに仕込む、知見をためていく - たとえSREでなくてもDocを見れば対応できるようにする - なるべくオペレーションの動線にDocを仕込む ● アラート対応の一部権限委譲 - 誰でもできそうな対応はツール化して公開する - 例: slack経由でインスタンスを立ち上げるする

Slide 23

Slide 23 text

23 権限委譲 SREを介さずに目的を達成できる仕組みを作る ● 権限委譲の仕組みを整備する - 権限はちゃんと絞る(oneloginとaws iam role) ● SREを介さずに当事者が設定できるようにする - 例1: インフラ設定をアプリエンジニアが修正する - インフラはコードで管理されているのでPRを作成 - 承認、マージ、適用はSREが実施する - 例2: アラートルールを各自が入れられるようにする - mackerel + slack、k8sはelastalert + 自作operator + slack - ルールの作成・投入と、それの管理・実行部分を切り離し

Slide 24

Slide 24 text

24 開発環境改善 テスト環境・開発環境を改善して開発スピードを向上させる ● テスト自動化 - PRを評価するテスト環境を自動で構築 - テスト実行まで自動化 - 来週のシステムテスト自動化カンファレンスで話す予定 ● 開発環境のクラウド化 - 新規メンバへ環境を用意する手間が省ける - 必要なときに必要なスペックを用意できる - cloud9もありですがtokyoがまだない

Slide 25

Slide 25 text

25 マイクロサービス化 巨大化したサービスを疎結合なサービス群に再構成し、開発速度を上げる ● マイクロサービス化を進める - 既存サービスの切り出し、独立サービス化 - 新規機能は始めから別サービスでの実現を考慮する - コンテナ化 - アプリエンジニア主導で進めて大体完了した感じ - ただproductionでの動作までには至っていない - k8s導入 - AWS EKS期待

Slide 26

Slide 26 text

26 知識を円滑に共有するしくみ・文化を作る 本質的なところにフォーカスするための仕組みを作る エンジニア数n倍で生産性がn倍以上になる組織を目指す

Slide 27

Slide 27 text

04 まとめ 27 Section

Slide 28

Slide 28 text

28 スケーラブルなサービス・組織を実現するためのSRE的な取り組みを紹介 ● サービス拡大への対応 ○ 各種サービスを使いこなして大規模サービスを運用する ○ 定期的な見直しの機会を設けて正しくチューニングする ● 人員増加への対応 ○ 知識を円滑に共有するしくみ・文化を作る ○ 本質的なところにフォーカスするための仕組みを作る ○ エンジニア数n倍で生産性がn倍以上になる組織を目指す

Slide 29

Slide 29 text

29 参考文献 ● freee技術発表資料 ○ https://developers.freee.co.jp/presentations

Slide 30

Slide 30 text

スモールビジネスに携わる すべての人が「創造的な活動」に フォーカスできるよう