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

freee-shigure-matsuri-20150321

 freee-shigure-matsuri-20150321

時雨祭 2015.03 (http://shigure.connpass.com/event/11780/) で発表した資料です。

Keiji Matsuzaki

March 22, 2015
Tweet

More Decks by Keiji Matsuzaki

Other Decks in Technology

Transcript

  1. freeeを支える技術
    時雨祭 (2015.3)

    View Slide

  2. 発表の機会をいただき、
    ありがとうございますm(_ _)m

    View Slide

  3. Github、3/21 21:00から15分ほどメンテナンス
    https://github.com/blog/1975-scheduled-maintenance-saturday-3-21-2015-12-00-utc

    View Slide

  4. View Slide

  5. 自己紹介

    View Slide

  6. 松崎 啓治(まつざき けいじ) 33歳
    freee 入社(6社目...?) 2014年6月1日〜
    やってること: インフラ担当
    Twitter: @xga
    Github: @futoase

    View Slide

  7. 確定申告という山場を越えた...

    View Slide

  8. View Slide

  9. freee 株式会社

    View Slide

  10. eは3つ

    View Slide

  11. 何をやってる会社か?

    View Slide

  12. View Slide

  13. http://www.freee.co.jp/special/zeirishi/

    View Slide

  14. クラウド会計ソフトfreee(フリー)
    https://secure.freee.co.jp/

    View Slide

  15. View Slide

  16. 口座情報から自動で入出金データを管理
    仕訳帳の出力
    確定申告書出力
    レシートアップロード後OCR対応 etc...

    View Slide

  17. クラウド給与計算ソフト freee(フリー)
    https://p.secure.freee.co.jp/

    View Slide

  18. View Slide

  19. 年末調整入力の対応
    源泉徴収票の出力
    勤務時間の管理
    残業時間の管理(時給) etc...

    View Slide

  20. 今のところこの2つ

    View Slide

  21. 設計

    View Slide

  22. Ruby on Rails
    Public API
    Private API
    会計処理
    給与計算
    認証処理
    Web front
    Backbone.js
    Vue.js
    Application Layer
    CSS

    View Slide

  23. Application Layer
    Go
    サムネイル変換
    OCR

    View Slide

  24. Infrastructure Layer
    Amazon Web Service
    RDS
    ElastiCache
    EC2
    SQS
    S3
    SES
    Route 53
    IAM
    RedShift

    View Slide

  25. Mobile(会計のみ)
    iOS Android
    Reactive Cocoa Rx Java

    View Slide

  26. 開発体制

    View Slide

  27. 会計
    給与
    インフラ
    Engineer
    Engineer
    Engineer
    Analytics CTO
    アプリ基盤
    Engineer
    Adjuster
    UX
    Engineer

    View Slide

  28. だいたいエンジニア30名ぐらい。
    インターンまぜると35名ぐらいになる
    かな。

    View Slide

  29. デプロイ体制

    View Slide

  30. develop staging master

    View Slide

  31. develop staging master
    開発用branch staging向け release向け

    View Slide

  32. develop staging master
    futoase
    Pull Request

    View Slide

  33. develop staging master
    futoase
    Pull Request

    View Slide

  34. develop staging master
    futoase
    git check out pr/10000
    Pull Request

    View Slide

  35. develop staging master
    futoase
    Pull Request test (Parallel test)
    Pull Request

    View Slide

  36. develop staging master
    futoase
    OK test
    Pull Request

    View Slide

  37. PRを出すとJenkinsが
    Parallel testを実行してくれる

    View Slide

  38. develop staging master
    futoase
    Pull Request

    View Slide

  39. develop staging master
    futoase
    hoge氏
    Review
    Pull Request

    View Slide

  40. develop staging master
    futoase
    hoge氏
    LGTM
    Pull Request

    View Slide

  41. develop staging master
    futoase
    Merge hoge氏
    LGTM

    View Slide

  42. ReviewerがPRのReviewを行う。
    RevieweeがMergeする

    View Slide

  43. develop staging master
    futoase

    View Slide

  44. develop staging master
    futoase
    @deploy
    pre-deploy repository
    develop to staging

    View Slide

  45. develop staging master
    futoase
    @deploy
    pre-deploy repository
    develop to staging
    Pull Request

    View Slide

  46. develop staging master
    job: staging-deploy

    View Slide

  47. job: staging-deploy
    web api admin
    cap deploy staging

    View Slide

  48. botにHipChatからコマンドを投げ、
    jenkinsにcapistrano taskを実行させる

    View Slide

  49. 監視体制

    View Slide

  50. View Slide

  51. View Slide

  52. zabbix server
    web api auth

    View Slide

  53. zabbix server
    web api auth
    zabbix get ->
    proc.cpu … proc.mem… system.cpu… proc.num...

    View Slide

  54. zabbix server
    web api auth

    View Slide

  55. zabbix server
    web api auth
    zabbix get ->
    proc.cpu … proc.mem… system.cpu… proc.num...

    View Slide

  56. zabbix server
    web api auth

    View Slide

  57. zabbix server
    web api auth
    zabbix get ->
    proc.cpu … proc.mem… system.cpu… proc.num...

    View Slide

  58. Zabbix serverのItemに
    登録しているkeyを元に
    Zabbix agentが
    各サーバのメトリクスを取得、監視

    View Slide

  59. zabbix server
    web api auth

    View Slide

  60. zabbix server
    web api auth
    CPU: 80% (user time) Mem: available 10% Disk: available 10%

    View Slide

  61. zabbix server
    web api auth
    CPU: 80% (user time) Mem: available 10% Disk: available 10%

    View Slide

  62. zabbix server
    CPU: 80% (user time) Mem: available 10% Disk: available 10%
    Trigger CPU >= 80% (user time)
    web api auth

    View Slide

  63. zabbix server
    HipChat ML
    チャットに通知 MLに通知

    View Slide

  64. 予めZabbix Itemに対してTrigger条件を指定し、
    閾値を超えたら
    HipChat と MLに通知を送るようにしている
    単純なActionで済むなら、プロセスを自動起動して
    なかったことにするとか。

    View Slide

  65. jenkins
    web api auth
    bundle ex rake \
    spec role=api stage=production

    View Slide

  66. jenkins
    web api auth
    server spec...

    View Slide

  67. jenkins
    web api auth
    OK

    View Slide

  68. EC2 Tagからインスタンス情報を取
    り出し(Private IPアドレス)、
    serverspecをインスタンスに対して
    掛け、テストする。

    View Slide

  69. パフォーマンス確認体制

    View Slide

  70. MONyog Bugsnag Newrelic

    View Slide

  71. MONyog Bugsnag Newrelic
    SQL Tuning Application Bug Performance

    View Slide

  72. View Slide

  73. View Slide

  74. View Slide

  75. 監視に割り当てる人力が少なめなため、
    価値があるソフトウェアを購入し運用することで
    穴を埋める。

    View Slide

  76. ロギング体制

    View Slide

  77. web
    api
    auth
    fluentd

    View Slide

  78. web
    api
    auth
    fluentd
    td-agent
    td-agent
    td-agent

    View Slide

  79. web
    api
    auth
    fluentd
    td-agent
    td-agent
    td-agent
    data

    View Slide

  80. 各サーバからtd-agentにより
    fluentdサーバ(1台)にデータを送信。

    View Slide

  81. fluentd
    S3
    ElasticSerch
    fluent-plugin-s3
    fluent-plugin-elasticsearch

    View Slide

  82. S3
    ElasticSerch Kibana
    PostgreSQL
    JSONB + GIN index

    View Slide

  83. kibanaは直近1ヶ月分のログを調査するときに利用する。
    PostgreSQLは
    サービスインから今までのログを調査するのに利用する。
    PostgreSQLのJSONB型のカラムにデータを突っ込んでGIN
    index貼ると2000万件ほどのレコードだと
    SELECT文 2〜3secで返ってきて便利

    View Slide

  84. KPI体制

    View Slide

  85. RedShift
    S3
    Zendesk
    サポート
    サポートデータ
    RDS
    BI(内製)
    R言語
    RPostgreSQL
    R Studio

    View Slide

  86. RedShiftを中心としてKPI体制を整えている。
    Google Big Queryや
    Treasure Dataなどは今のところ検討せず。
    独自BIの管理が課題。

    View Slide

  87. サポート体制

    View Slide

  88. 文化

    View Slide

  89. View Slide

  90. 毎月最後の金曜日にTGIF
    毎週火曜と木曜日に全体ミーティング
    二週間に一回程度、社員全員で飯を食う
    リリースが終わったら適当に
    立ち食い寿司屋に行く
    あとは定期的に何かしら飲みがある

    View Slide

  91. Qiita::Teamにあれこれ書いたり。
    何かあったらメールに書くという文化があるので何
    があったのかがわからないということが少ない(今の
    ところ)

    View Slide

  92. バグのことをハッピーと呼ぶ。
    ハッピー担当というものが平時は毎日2名、
    エンジニアがアサインされ、
    負債を返していく。

    View Slide

  93. asanaにサポートから
    バグを受け取ったら起票、
    修正したらコメントの繰り返し。
    タスク管理はほぼasana。
    チームに寄っては
    wunderlistやTrello使ったり。

    View Slide

  94. サーバプロビジョニングは
    入社時にchefだったので駆逐していって、
    後もうちょっと(data bagの管理)で終わる。
    今はansibleに移行中。

    View Slide

  95. 採用
    http://www.freee.co.jp/recruit_eng

    View Slide

  96. エンジニア募集中なので
    freee株式会社が気になる人は
    僕のほうまで話いただけるか、
    Wantedlyなどの手段を利用オ
    ナシャス♥

    View Slide

  97. あざっした

    View Slide