プロジェクトのアイデア
アイデアがなかったので、無料のドメインuglyrater.orgがあったので、評価をしなければなりませんでした。
一番下の行は簡単です:+と-をアレンジできるユーザーのリストがあります。 新しいユーザーは、VKページアドレスで評価に追加されます。
ご注意 この記事には、個人的な経験に基づいた多くの主観的な評価があります!
実装
![](https://habrastorage.org/storage2/3e9/8a7/4c9/3e98a74c97c5a830d472f551da3ca99e.png)
アーキテクチャは意図的に複雑にする必要がありました。さもなければ、興味深いものすべてを試すことはできませんでした。 さらに、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経由ですべてをサーバーに展開することにしました。
![](https://habrastorage.org/storage2/43a/e22/d8f/43ae22d8fae714e951211b700d407eeb.png)
しかし、そこにありました。 nginxはWebソケットをサポートしていないことが判明し、この問題には3つの解決策がありました。
- 不安定なnginxをインストールします。
UbuntuにはPPAがあり、そこからインストールしましたが、HTTP認証が落ちて、うまくいきませんでした。 また、サーバーにはこのような承認を伴う水銀リポジトリもあるため、このオプションはすぐになくなりました。 - TCPプロキシを使用して nginxをビルドします。
簡単な指示を見つけたので、すべてが組み立てられました。 すべての古いプロジェクトが開始されました。 しかし、ここで、私はどこかで何かを間違えたか、何かをしましたが、websocketは正しく動作しませんでした。 オプションが消えます。 - HAProxyを使用します。
ここでは、写真で表示しやすいオーバーヘッドのあるスキームを取得します。
彼女と一緒に、すべてがうまくいき、うまくいった。
まとめ
もちろん、これはクールで便利で高速ですが、まだ多くのショールがあります。 展開の主要な柱ですが、最終的な解決策はそれほど悪くはありません。
コード付きgithub。
無視された形で。