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/) で発表した資料です。

492da7e022786a647bf0a1efb28db3f8?s=128

Keiji Matsuzaki

March 22, 2015
Tweet

Transcript

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

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

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

  4. None
  5. 自己紹介

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

    @xga Github: @futoase
  7. 確定申告という山場を越えた...

  8. None
  9. freee 株式会社

  10. eは3つ

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

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

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

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

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

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

  20. 今のところこの2つ

  21. 設計

  22. Ruby on Rails Public API Private API 会計処理 給与計算 認証処理

    Web front Backbone.js Vue.js Application Layer CSS
  23. Application Layer Go サムネイル変換 OCR

  24. Infrastructure Layer Amazon Web Service RDS ElastiCache EC2 SQS S3

    SES Route 53 IAM RedShift
  25. Mobile(会計のみ) iOS Android Reactive Cocoa Rx Java

  26. 開発体制

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

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

  29. デプロイ体制

  30. develop staging master

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

  32. develop staging master futoase Pull Request

  33. develop staging master futoase Pull Request

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

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

    Request
  36. develop staging master futoase OK test Pull Request

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

  38. develop staging master futoase Pull Request

  39. develop staging master futoase hoge氏 Review Pull Request

  40. develop staging master futoase hoge氏 LGTM Pull Request

  41. develop staging master futoase Merge hoge氏 LGTM

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

  43. develop staging master futoase

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

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

    Pull Request
  46. develop staging master job: staging-deploy

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

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

  49. 監視体制

  50. None
  51. None
  52. zabbix server web api auth

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

    proc.mem… system.cpu… proc.num...
  54. zabbix server web api auth

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

    proc.mem… system.cpu… proc.num...
  56. zabbix server web api auth

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

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

  59. zabbix server web api auth

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

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

    available 10% Disk: available 10%
  62. zabbix server CPU: 80% (user time) Mem: available 10% Disk:

    available 10% Trigger CPU >= 80% (user time) web api auth
  63. zabbix server HipChat ML チャットに通知 MLに通知

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

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

    stage=production
  66. jenkins web api auth server spec...

  67. jenkins web api auth OK

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

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

  70. MONyog Bugsnag Newrelic

  71. MONyog Bugsnag Newrelic SQL Tuning Application Bug Performance

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

  76. ロギング体制

  77. web api auth fluentd

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

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

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

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

  82. S3 ElasticSerch Kibana PostgreSQL JSONB + GIN index

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

  84. KPI体制

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

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

  87. サポート体制

  88. 文化

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

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

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

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

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

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

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

  97. あざっした