[その1] Groupon: 単一のRailsアプリから複数のNode.jsアプリへの移行

https://engineering.groupon.com/2013/misc/i-tier-dismantling-the-monoliths/

1 comment | 0 points | by Jshiike 約3年前


Jshiike 約3年前 | ▲upvoteする | link

Grouponのビジネス自体はかつての盛り上がりはないですが、シンプルなRailsアプリが、事業の成長 & グローバル化に従って、アーキテクチャを変えていった過程をエンジニアブログで紹介してるので、参考になればと。



1) まとめ


Grouponは、Railsのシングルコードベースを独立した20個のNode.jsアプリにアーキテクチャを変更した。


  • ページの読み込み時間が概ね50%改善。これはテクノロジーの効果とコードの書き直しでwebページが軽くなったのとの相乗効果。

  • 同じトラッフィクに対してハードウェアが削減できた。

  • チーム間の依存関係が少なくなったので、新機能リリースのペースが早くなった

  • 同じ機能を複数の国にそれぞれ導入するような冗長さがなくなり、機能/デザイン変更がスピードアップした。

2) 歴史


簡単に機能変更ができるRailsアプリは、創業期の規模の小さい開発チームにとって、大きなメリットであった。[初期のアーキテクチャ]


急増するトラフィックを単一のDBクラスタでさばくのが厳しくなり、フロントエンドのサーバ追加、DBレプリケーション、CDNの利用にはじまり、バックエンドの機能を新しいサービスに移すことでしのいだ。しかし、サイトの他の部分(views, controllers, assets, etc.)は旧来のRailsアプリのままであった。[当時のアーキテクチャ]


3) グローバル化


短期間に48カ国にサービスを提供するようになり、いくつかの会社を買収した。その中の欧州CityDeal社は、システムの構成は似ていたが、採用していた技術が、GrouponのRuby/Nginx/MySQLに対して、Java/Apache/PostgreSQLであったので、両社のシステムを平行して存続させることにした。米国/欧州それぞれに機能を導入しなくてはいけない非効率は、その後、企業買収が続いて、更に悪化しくこととなる。[両社のアーキテクチャ]


4) モバイル


モバイルクライアントは、iPhone/iPad/Android/Windows Mobile用に開発したが、グローバルで同じものを利用できるように、米国/欧州それぞれのシステム側でAPIを用意した。その後、モバイルのトラフィックが50%を占めるようになってくると、常にWebで機能導入をしてからでないと、モバイルに展開できないというかたちがデメリットとしてでてきた。[モバイルを含めたアーキテクチャ] 


5) 単一コードベースの弊害


Railsのコードベースがどんどん大きくなってくると、複数のチームがかかわることになり、各チームの更新をまとめて本番アップして、ダメだと全てロールバックという非効率な運営になってしまった。


6) 書き直し


書き直すという判断は、一般的にはかなり危険だが、Grouponの場合は、モバイルウェブサイトと店舗向けページの開発であらかじめテストをしたうえで取り組んだ。ゴールとしては、


  • 複数国にまたがっている新機能導入作業をひとまとめにする。

  • モバイルとウェブを同じレベルで扱えるようにする。

  • サイトのパフォーマンス向上

  • それぞれの開発チームが独立して動けるようにする。

7) アプローチ


まず、単一のRailsアプリを、機能別に複数のNode.jsアプリ群にわけた。[] Node.js採用の理由は、大量に流入するHTTPリクエストに対応し、並列でAPIリクエスト処理し、結果をHTMLにもってこれるソリューションであったから。


Node.jsアプリ群の上にNginxのルーティングレイヤを配し、ユーザが訪問してくるページ別にトラフィックをさばき、更にA/Bテストにも対応できるようになった。[]


Node.jsのフロントアプリ群はAPIを介して、バックエンドと通信している。[アーキテクチャ図] 米国/欧州のバックエンド統合が完了するまでは、それぞれのバックエンドAPIとNode.jsアプリ群が通信しているかたちになっている。[アーキテクチャ図]



その2はこちら


Node.js: Issac Schlueterの語るオープンソースとリーダーシップ


Node.jsをサーバサイドのUIレイヤに限定するのか?


Issac Schlueterが語るNode.js v1.0へのロードマップ



#groupon #node.js #rails #モジュール化 #開発スタイル #アーキテクチャ

Back