tracksflow.comプロジェクトの開始時に、タスクは次のような音楽サービスを作成することでした。
- オープンソースからコンテンツとメタデータを取得し、
- プレイリストやいいね!が添付された独自のユーザーベースがあり、
- ソーシャルツールが含まれます。
- Web /モバイルアプリケーション、
- サイトはWebアプリケーションとして実行されます(ページのリロードなし、クライアント上のロジックの一部の実装)。
開発の開始時に、次のものがありました。
- Windows Server 2003の5ライセンス、
- 2 MS SQL Server 2008ライセンス(プロセッサライセンスの下)、
- C#クライアントライブラリを備えたphpファイルストレージシステム、
- 3人のJSプログラマ、1人の.NETプログラマ、2人のObjective-Cプログラマ。
最初に下した決定
複数のクライアントが計画されており、サイトがWebアプリケーションとして設計されるため、データベース(モデル)と提出物を厳密に分離します。
REST形式のAPIを使用して、モデルをプレゼンテーションから分離します。REST形式は、プラットフォームに依存しないテクノロジーであり、すべてのクライアントに簡単に実装できます。
データ転送形式はJSONです。 iOSチームとは白熱した議論がありましたが、総当たりでJSONを使用することを余儀なくされました-ほとんどの人にとってはより便利です。
いくつかのサードパーティのサービスと連携することで、サイトとiOS付録の作業にチャンスの要素がもたらされることは明らかでした。 また、すべてのサードパーティサービスに対して単一のデータ転送フォーマットを使用したいと考えていました。 その瞬間、Node.jsを軽量のMVCコントローラーとして使用して、サードパーティのサービスAPIと非同期に対話し、同時に結果を目的の形式にするというアイデアが生まれました。
したがって、システムコンポーネントのレベルでMVCの概念を開発しました。 Webおよびモバイルアプリケーションが表現として機能しました。 Node.jsがコントローラーです。 .Netおよびサードパーティのサービスはモデルです。
唯一のことは、vk.comがクライアントに直接結び付けられている必要があることです。APIは1つのIPアドレスからのリクエスト数に制限を課し、セッションをIPにバインドし、一般にクライアント上のvk.com APIを使用した作業メソッドの実装をあらゆる方法で促進するためです。
同様に、すべてのクライアントアプリケーションと.NETでは、MVCが内部パターンとして使用されました。 ここにMVCの入れ子人形があります:)
さらに、Node.jsを使用して.Net上の独自のバックエンドにリクエストをプロキシすることはあまり便利ではないことが明らかになりました。ノードは明らかに余分なリンクであり、nginxを通じてクライアントから.Netバックエンドにリクエストを「直接」送信することでこの作業を取り除きました。
はい、すべてのヘルメットリクエストはNginxを介して行われます。 これにより、クロスドメインリクエストの問題を回避し、バックエンドサーバーを直接アクセスから閉じます。 また、nginxは、予期しない何かがリクエストを別のアセンブリ/サーバーにリダイレクトする場合にも許可します。
何に書かれていますか?
アバターを保存するために、実績のあるphpシステムを使用し、fidel.ruに120 TBのデータを提供しました。 もちろん、その下に置きます。
バックエンドはASP.NET MVC 3で記述されています。以前のプロジェクトでの作業では 、.NET MVC 3を含むhoroshoバンドルは、REST APIが簡単で美しいことを示していました。 Entity Framework 4.2ベータは、データベースへのアクセスに使用されます。
モバイル(iOS)アプリケーションは、 newonderがネイティブツールを使用して作成されています。 アプリケーションには多くの興味深い要素があります。スワイプすると開くナビゲーションメニュー。 スイープテーブルセル; データモデル移行システム。 アプリケーションはすでにAppStoreにあります。
サイトのクライアント部分は、backbone.js + underscore.jsバンドルを使用するMVCを使用してvmkcomによって実装されます。 ルーティングは、pushStateに基づいており、サポートされているブラウザーでは履歴APIを使用し、残りはハッシュタグを使用します。
古き良きjQueryは、DOMの操作を担当します。
興味深い機能の:
- HTML5 / Flash / SilverLightプレーヤーmediaelement.jsを使用します。これにより、特定のコーデックのブラウザーでのサポートが自動的に決定され、再生に必要なプラグインが起動されます。
- Node.jsのsocket.ioバンドルを使用して、新しいイベントのプッシュ通知を送信します。
鉄
Tracksflow.comは現在、3つの仮想マシンのDataLineクラウドで実行されています 。
nginx + php-fpm + node.jsを使用したLinuxシステム。 2 GBのメモリ、32 GbのHDD、1コアCPU Xeon 2.67 GHzを搭載。
.NET MVC上のバックエンドを備えたWindows Server 2003 IIS 6。 2 GBのメモリ、60 GbのHDD、1コアのXeon 2.67 GHz CPUを搭載。
Windows Server 2003 SQL Server2008。4GBのメモリ、250 Gbのhdd、2コアCPU Xeon 2.67 GHzを搭載。
サービス全体の合計は4コア、340 GB Hdd、8 GBのメモリです。tracksflow.comはラップトップで安全に実行できます:)
荷重
私たちは高負荷のプロジェクトのふりをしません。 前年のブログ投稿を公開するとき、毎秒50件のリクエストがありました-それらは制限されていました。 ボトルネックは、Webサーバー側のEntity Frameworkによって実行される2つの結合でした。 これでボトルネックを最適化してテストしました-毎秒約500件のリクエストがリリースされました。
近い将来、さまざまなサービスシステムに関する詳細な記事がいくつか計画されています。 最初に話すべきことをコメントに書いてください。
ちなみに、Red Octoberの優れたオフィスでスーパーピープルを探しています。