時雨祭 2015.03 (http://shigure.connpass.com/event/11780/) で発表した資料です。
freeeを支える技術時雨祭 (2015.3)
View Slide
発表の機会をいただき、ありがとうございますm(_ _)m
Github、3/21 21:00から15分ほどメンテナンスhttps://github.com/blog/1975-scheduled-maintenance-saturday-3-21-2015-12-00-utc
自己紹介
松崎 啓治(まつざき けいじ) 33歳freee 入社(6社目...?) 2014年6月1日〜やってること: インフラ担当Twitter: @xgaGithub: @futoase
確定申告という山場を越えた...
freee 株式会社
eは3つ
何をやってる会社か?
http://www.freee.co.jp/special/zeirishi/
クラウド会計ソフトfreee(フリー)https://secure.freee.co.jp/
口座情報から自動で入出金データを管理仕訳帳の出力確定申告書出力レシートアップロード後OCR対応 etc...
クラウド給与計算ソフト freee(フリー)https://p.secure.freee.co.jp/
年末調整入力の対応源泉徴収票の出力勤務時間の管理残業時間の管理(時給) etc...
今のところこの2つ
設計
Ruby on RailsPublic APIPrivate API会計処理給与計算認証処理Web frontBackbone.jsVue.jsApplication LayerCSS
Application LayerGoサムネイル変換OCR
Infrastructure LayerAmazon Web ServiceRDSElastiCacheEC2SQSS3SESRoute 53IAMRedShift
Mobile(会計のみ)iOS AndroidReactive Cocoa Rx Java
開発体制
会計給与インフラEngineerEngineerEngineerAnalytics CTOアプリ基盤EngineerAdjusterUXEngineer
だいたいエンジニア30名ぐらい。インターンまぜると35名ぐらいになるかな。
デプロイ体制
develop staging master
develop staging master開発用branch staging向け release向け
develop staging masterfutoasePull Request
develop staging masterfutoasegit check out pr/10000Pull Request
develop staging masterfutoasePull Request test (Parallel test)Pull Request
develop staging masterfutoaseOK testPull Request
PRを出すとJenkinsがParallel testを実行してくれる
develop staging masterfutoasehoge氏ReviewPull Request
develop staging masterfutoasehoge氏LGTMPull Request
develop staging masterfutoaseMerge hoge氏LGTM
ReviewerがPRのReviewを行う。RevieweeがMergeする
develop staging masterfutoase
develop staging masterfutoase@deploypre-deploy repositorydevelop to staging
develop staging masterfutoase@deploypre-deploy repositorydevelop to stagingPull Request
develop staging masterjob: staging-deploy
job: staging-deployweb api admincap deploy staging
botにHipChatからコマンドを投げ、jenkinsにcapistrano taskを実行させる
監視体制
zabbix serverweb api auth
zabbix serverweb api authzabbix get ->proc.cpu … proc.mem… system.cpu… proc.num...
Zabbix serverのItemに登録しているkeyを元にZabbix agentが各サーバのメトリクスを取得、監視
zabbix serverweb api authCPU: 80% (user time) Mem: available 10% Disk: available 10%
zabbix serverCPU: 80% (user time) Mem: available 10% Disk: available 10%Trigger CPU >= 80% (user time)web api auth
zabbix serverHipChat MLチャットに通知 MLに通知
予めZabbix Itemに対してTrigger条件を指定し、閾値を超えたらHipChat と MLに通知を送るようにしている単純なActionで済むなら、プロセスを自動起動してなかったことにするとか。
jenkinsweb api authbundle ex rake \spec role=api stage=production
jenkinsweb api authserver spec...
jenkinsweb api authOK
EC2 Tagからインスタンス情報を取り出し(Private IPアドレス)、serverspecをインスタンスに対して掛け、テストする。
パフォーマンス確認体制
MONyog Bugsnag Newrelic
MONyog Bugsnag NewrelicSQL Tuning Application Bug Performance
監視に割り当てる人力が少なめなため、価値があるソフトウェアを購入し運用することで穴を埋める。
ロギング体制
webapiauthfluentd
webapiauthfluentdtd-agenttd-agenttd-agent
webapiauthfluentdtd-agenttd-agenttd-agentdata
各サーバからtd-agentによりfluentdサーバ(1台)にデータを送信。
fluentdS3ElasticSerchfluent-plugin-s3fluent-plugin-elasticsearch
S3ElasticSerch KibanaPostgreSQLJSONB + GIN index
kibanaは直近1ヶ月分のログを調査するときに利用する。PostgreSQLはサービスインから今までのログを調査するのに利用する。PostgreSQLのJSONB型のカラムにデータを突っ込んでGINindex貼ると2000万件ほどのレコードだとSELECT文 2〜3secで返ってきて便利
KPI体制
RedShiftS3ZendeskサポートサポートデータRDSBI(内製)R言語RPostgreSQLR Studio
RedShiftを中心としてKPI体制を整えている。Google Big QueryやTreasure Dataなどは今のところ検討せず。独自BIの管理が課題。
サポート体制
文化
毎月最後の金曜日にTGIF毎週火曜と木曜日に全体ミーティング二週間に一回程度、社員全員で飯を食うリリースが終わったら適当に立ち食い寿司屋に行くあとは定期的に何かしら飲みがある
Qiita::Teamにあれこれ書いたり。何かあったらメールに書くという文化があるので何があったのかがわからないということが少ない(今のところ)
バグのことをハッピーと呼ぶ。ハッピー担当というものが平時は毎日2名、エンジニアがアサインされ、負債を返していく。
asanaにサポートからバグを受け取ったら起票、修正したらコメントの繰り返し。タスク管理はほぼasana。チームに寄ってはwunderlistやTrello使ったり。
サーバプロビジョニングは入社時にchefだったので駆逐していって、後もうちょっと(data bagの管理)で終わる。今はansibleに移行中。
採用http://www.freee.co.jp/recruit_eng
エンジニア募集中なのでfreee株式会社が気になる人は僕のほうまで話いただけるか、Wantedlyなどの手段を利用オナシャス♥
あざっした