PHPカンファレンス2015でメルカリのエンジニアリングについて発表してきました

2015年10月3日に開催されたPHPカンファレンス2015で「フリマアプリ「メルカリ」の急成長を支えるエンジニアリング」というタイトルで発表してきました。

フリマアプリ「メルカリ」の急成長を支えるエンジニアリング

speakerdeck.com

内容的には昨年の9月に自分が入社してからの1年の間に行ってきたメルカリの様々なシステムの基盤作りに関する取り組みを中心にまとめたものになっています。

bokko.hatenablog.com

これらの取り組みはもちろんすべて自分一人でやったわけではなく、同僚のエンジニア達と共同で取り組んで達成してきた成果でもあります。例えば、発表資料の中で言及しているデプロイの仕組みの構築にはインフラチームのメンバー全員(4人)の手が入っています。

デプロイの自動化およびゼロダウンタイム化への道

メルカリで本番にアプリーケーションをデプロイするにはリリース時刻になったらSlackに現れるデプロイ用のBotに対して yes と答えるだけです。

非常にシンプルですが、一般にシンプルで利用しやすいシステムの裏側では多くの抽象化が行われているため、得てして複雑になる傾向があります。(一方で使いにくいシステムの裏側は思いのほか単純だったりします)

その例に漏れず、メルカリのデプロイの仕組みもそれなりに複雑で多くの要素から構成されています。

  • デプロイ用のAnsibleプレイブック
  • リリース作業者とのやりとり、リリースに関するチケットやPRのチェック、masterへのマージ、デプロイを行うBot(Node.js製)
  • RedmineのチケットからBotに伝えるリリース内容を自動生成するブックマークレット
  • ngx_dynamic_upstreamでゼロダウンデプロイを実現するためのユーティリティ (mercari_app_ctl, mercari_app_rsync)

で、今のデプロイの仕組みを構築するにあたって自分がやったのはGWの半分とその後の約1週間を使ってngx_dynamic_upstreamを作った、ということだけです。実際にゼロダウンでデプロイするための仕組みの構築はほぼ@kazeburoさんが一晩でやってくれました。デプロイ用のプレイブックやBotもインフラチームの別のエンジニアの手によるものです。・・・あれ、俺仕事してなくね?

まとめ

という感じで今後もメルカリのインフラチームで強力なシステムの基盤作りに取り組んでいきます。