すべての最もファッショナブルな

インターネットで新しい、シンプル、高速、スケーラブルなテクノロジーについて読んだので、私はそれらすべてを試してみたかったです。 突然、彼らは私がすでに知っているpostgresql + django + json-rpcバンドルよりも優れていることが判明します。



プロジェクトのアイデア



アイデアがなかったので、無料のドメインuglyrater.orgがあったので、評価をしなければなりませんでした。

一番下の行は簡単です:+と-をアレンジできるユーザーのリストがあります。 新しいユーザーは、VKページアドレスで評価に追加されます。





ご注意 この記事には、個人的な経験に基づいた多くの主観的な評価があります!



実装









アーキテクチャは意図的に複雑にする必要がありました。さもなければ、興味深いものすべてを試すことはできませんでした。 さらに、vk apiを介してユーザーデータを取得する操作は非常に長く、並列化するという考えはそれほど悪くはありません。 これを行うには、MQが必要です。選択はRabbitMQに委ねられました 。 AMQPは「吸う」、 ØMQは 「すべてのもの」と言うかもしれませんが、zeromqで私はすでに解決しており、このコンテキストには興味がありません。

RabbitMQはpikaを通じて使用されました。 メッセージを初期化して送受信するには、最小限のコードが必要でした。 「ワーカー」とそのテストで確認できます。 書いた後、これまたは同様のタスクを満たすために、すでに使用されているZerocIceおよびØMQとの小さな比較が現れました。

うさぎ ØMQ ゼロアイス
長所 少量のコード。

作業の単純さ。
スピード

ネイティブオブジェクトの送信。

独自の悪魔を必要としません。
リモート機能およびオブジェクトを操作する機能。

ソケット自体の欠如;

信号/スロット;
短所 デーモンの起動が必要です。 ルーターの作成が必要です。

多くのコード。
書き込みスライスが必要です。

デーモン(icebox)の開始が必要です。

複雑さ


そして、たまたま、現在のタスクでは、RabbitMQとØMQが同等に適合し、ZerocIceはスズメの大砲のようなものでした。



ここで、受信および処理されたデータをどこかに保存する必要があります。 nosqlはファッショナブルになったため、 mongodbが選択されました。 このタスクでormを使用したpostgresqlに違いはありません。すべてがスマートで便利です。



Webサーバーのキューが到着しました。 現在、非同期とプッシュのmodがサーバーからクライアントに移動しているため、特に最近ハブについて書いたため、 tornadotornadio2が選択されました その後、すぐに問題が発生し、tornadio2からCookieを取得できませんでした。 したがって、私は松葉杖がsocketioを介してクライアントから「秘密」のidを送信するのをブロックする必要がありました。 このすべての後、私はdjango + json-rpcとの小さな比較を得ました:

竜巻+ tornadio2 ジャンゴ+ json-rpc
長所 サーバーからプッシュ。

軽さ;

スピード
シンプルさ;

標準化されたプロトコル。
短所 複雑さ

「曲線」はCookieで機能します。
怪物;

プッシュシミュレーションの定期的な要求。


ここではすべてがあいまいですが、プッシュのため、竜巻オプションは依然として優れています。



クライアント側には特別なことは何もありませんでしたので、 コーヒースクリプトhaml 、およびsassを使用しただけで、多くのコード行を節約できました。



展開する



長い間考えずに、標準のスキームを使用して、nginx経由ですべてをサーバーに展開することにしました。







しかし、そこにありました。 nginxはWebソケットをサポートしていないことが判明し、この問題には3つの解決策がありました。

  1. 不安定なnginxをインストールします。

    UbuntuにはPPAがあり、そこからインストールしましたが、HTTP認証が落ちて、うまくいきませんでした。 また、サーバーにはこのような承認を伴う水銀リポジトリもあるため、このオプションはすぐになくなりました。
  2. TCPプロキシを使用して nginxをビルドします。

    簡単な指示を見つけたので、すべてが組み立てられました。 すべての古いプロジェクトが開始されました。 しかし、ここで、私はどこかで何かを間違えたか、何かをしましたが、websocketは正しく動作しませんでした。 オプションが消えます。
  3. HAProxyを使用します。

    ここでは、写真で表示しやすいオーバーヘッドのあるスキームを取得します。







    彼女と一緒に、すべてがうまくいき、うまくいった。


まとめ



もちろん、これはクールで便利で高速ですが、まだ多くのショールがあります。 展開の主要な柱ですが、最終的な解決策はそれほど悪くはありません。



コード付きgithub。

無視された形で。



All Articles