クラウドワークス エンジニアブログ

日本最大級のクラウドソーシング「クラウドワークス」の開発の裏側をお届けするエンジニアブログ

CrowdWorksのSREチームの仕事

SREチームの那須です。好きな鉱物はダイヤモンドです。宝石の国は今期イチオシのアニメです。ダイヤモンドかわいい。

最近のことですがCrowdWorksにもSREチームというものが誕生しました。CrowdWorks の最近の取り組みについての記事でも取り上げています。

engineer.crowdworks.jp

SRE とは Site Reliability Engineer の略でGoogleが提唱している概念です。主にサイトの信頼性向上や運用の自動化などインフラの仕事を、ソフトウェアエンジニア的な問題解決手法で行っていく人たちのことを指すようです。

そんなSREのチームが CrowdWorks にも誕生しました。自分はインフラの知見があまりないのですが、チャレンジとしてSREチームに加わり現在 CrowdWorks のインフラ周りと格闘しています。今回はそんなSREチームの背景や最近の仕事について書いていきたいと思います。

SREチームが組織された背景

CrowdWorksはモノリシックなRailsアプリケーションです。よくある話ではありますが、事業拡大とともにそのコードベースは成長し、複雑さは増していきました。特に複数の責務を一つのアプリケーションに抱えているので、関連が複雑でそれを紐解くのは一苦労です。

更に事業を拡大していく CrowdWorks の今後を考えると、このまま進むとコードの増加による複雑さの爆発は事業拡大の妨げになることが予想されました。つまりエンジニアリングが枷となり事業の成長を妨げるのです。これはソフトウェアによるサービスを提供する会社としては由々しき事態です。

もちろん我々はこの状況に手をこまねいていたわけではありませんでした。「CrowdWorksを整地しようプロジェクト」を開催し、一ヶ月新機能の開発を止めてコードのリファクタリングを行ったり、DDD の手法を取り入れてサービス層を構築したりとやれることはやってきました。その結果ある一定の成果を収めることはできましたが、複雑さの根本的な解決には至らずコードを読み解く苦労は依然として存在し続けました。

そこで次に我々が目をつけたのはマイクロサービスアーキテクチャです。マイクロサービスアーキテクチャは Martin Fowler が提唱した概念で、個々のサービスを特定の責務ごとに独立させ、それを組み合わせることでサービスを提供できるようにするアーキテクチャです。クラウドワークスは様々な責務の集合体となっています。受注者・発注者・仕事検索・報酬支払などいろいろな関心事が1つに収まっています。それを複数のサービスに分割できれば、過去の負債からの影響を最小限におさえつつスケールするサービスを開発できるようになるはずです。

マイクロサービスに分割したとして、それをうまく統合するためには全体を見れるチームが必要です。そういった経緯でSREチームが組織されました。

チームメンバーは自分を含めて2人の専任と4人の兼務で6人体制となっています。

最近のSREチームのお仕事

直近の取り組んでいる仕事はコード化されていないインフラのコード化と認証基盤の開発になります。

主に使用する技術は AWS・Terraform・Docker・Chef・Serverspec などがあげられます。CrowdWorks のインフラのコード化は進んでいるのですが、一部まだすんでいない部分があります。それをしっかりと Terraform でクラウド環境、Chef でインスタンスの構成をコード化し、保守性を高めマイクロサービス化の下支えをしっかりと行います。

自分が今取り組んでいるところはまさにここで、まだインフラの経験が浅い自分には良い学びの機会となっています。

次に認証基盤の開発です。マイクロサービス化を行っていく上でインターネットからサービスが呼ばれることは多くあると思います。そうなると認証が必要になってくるというのは自然な流れです。これをはじめに作りユーザ影響が少ないところから適用し、徐々に洗練させていくという戦略で進めています。

ここは様々な技術を適材適所で使用しています。CrowdWorks では Rails を使用しているので Ruby を使いますし、新しいサービスでは Play Framework が使用されているので Scala を使います。インフラの基盤には Docker を使用するので、Docker を AWS 上で使うために Terraform で ECS クラスタの環境を整えたりします。最近 re:invent でフルマネージドな Kubernetes のサービス EKS が発表されたので、それが利用できるか検討したりもしています。

SREチームのこれから

SREチームはこれからマイクロサービス化のために動きを進めていきます。新しいサービスの開発ではすでに CrowdWorks 本体とは違うサービスとして開発されており、それのインフラ構築が次の課題です。認証基盤の洗練も徐々に行っていき、マイクロサービスに分割されていく中で力を発揮できるようにしていきます。

CrowdWorks がマイクロサービスを実現することにより、サービスの信頼性を上げユーザーに安心して使ってもらえるようなプラットフォームにしていけるようにSREチームは取り組んでいきます。

やりたいことは山のようにあるのですが手が足りていないというのが正直なところです。まずはできることを一つずつクリアしていき、マイクロサービス化を実現していき、開発しやすい CrowdWorks を目指して日々精進していければと思います。

We are hiring !!

CrowdWorks ではモノリシックなサービスのマイクロサービス化を協力して行っていくメンバーを募集しています。

我々SREチームで取り組めることは、

  • マイクロサービス化に伴う Terraform・Chef・Docker による Infrastructure as a Code の実践
  • AWSGCP を用いたスケールするサービスの基盤作り
  • Scala や Go を用いたマイクロサービスの構築

などです。

他にも監視の自動化やデプロイ周りの整備など、サービス開発を行うメンバーをサポートする業務が中心ですが課題が山積みなのでとても取り組みがいがあるかと思われます。

まずはお気軽に話を聞きに来てみませんか?

www.wantedly.com

© 2016 CrowdWorks, Inc., All rights reserved.