インターネットで新しい、シンプル、高速、スケーラブルなテクノロジーについて読んだので、私はそれらすべてを試してみたかったです。 突然、彼らは私がすでに知っている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がサーバーからクライアントに移動しているため、特に
最近ハブについて
書いたため、
tornadoと
tornadio2が選択されました その後、すぐに問題が発生し、tornadio2からCookieを取得できませんでした。 したがって、私は松葉杖がsocketioを介してクライアントから「秘密」のidを送信するのをブロックする必要がありました。 このすべての後、私はdjango + json-rpcとの小さな比較を得ました:
| 竜巻+ tornadio2 | ジャンゴ+ json-rpc |
---|
長所 | サーバーからプッシュ。 軽さ; スピード | シンプルさ; 標準化されたプロトコル。 |
短所 | 複雑さ 「曲線」はCookieで機能します。 | 怪物; プッシュシミュレーションの定期的な要求。 |
ここではすべてがあいまいですが、プッシュのため、竜巻オプションは依然として優れています。
クライアント側には特別なことは何もありませんでしたので、
コーヒースクリプト 、
haml 、および
sassを使用しただけで、多くのコード行を節約できました。
展開する
長い間考えずに、標準のスキームを使用して、nginx経由ですべてをサーバーに展開することにしました。

しかし、そこにありました。 nginxはWebソケットをサポートしていないことが判明し、この問題には3つの解決策がありました。
- 不安定なnginxをインストールします。
UbuntuにはPPAがあり、そこからインストールしましたが、HTTP認証が落ちて、うまくいきませんでした。 また、サーバーにはこのような承認を伴う水銀リポジトリもあるため、このオプションはすぐになくなりました。 - TCPプロキシを使用して nginxをビルドします。
簡単な指示を見つけたので、すべてが組み立てられました。 すべての古いプロジェクトが開始されました。 しかし、ここで、私はどこかで何かを間違えたか、何かをしましたが、websocketは正しく動作しませんでした。 オプションが消えます。 - HAProxyを使用します。
ここでは、写真で表示しやすいオーバーヘッドのあるスキームを取得します。

彼女と一緒に、すべてがうまくいき、うまくいった。
まとめ
もちろん、これはクールで便利で高速ですが、まだ多くのショールがあります。 展開の主要な柱ですが、最終的な解決策はそれほど悪くはありません。
コード付きgithub。無視された形で。