4

JSON応答を返し、非常に高い負荷を維持する必要があるRESTfulAPIの実装に苦労しています。最も高い負荷はAPIの「読み取り」部分によって生成され、APIの「書き込み」部分によって生成される負荷はごくわずかです。私の最初の試みは、nodejsを使用してAPI全体を作成することでした。私はほとんどそれをしましたが、APIはより大きなシステムの一部であるため、javascriptとrubyの間でモデルとロジックの非常に高い重複に直面しました。すべてのロジックをバックエンド(mySql)に移動しようとしましたが、そのアイデアはさらに醜いものになりました。2番目の試みは、システムのすべての部分でモデル/ロジックとテストを共有するために、RubyエコシステムでAPIを作成することです。

CrampとGoliathを単独で使用してみましたが、非同期のものはすべてAPIの実装を非常に複雑にしました。2つの読み取りURLを非同期にする必要があるのは、それらが最大の負荷を生成し、ずっと非同期にすることで、残りのAPIを非同期で実装することを余儀なくされたためです。

私の現在の試みはハイブリッドになることです:Thin / Sinatra/Crampカクテルを使用してください。私はRubyコードでシンラックハンドルをインスタンス化し、ラックビルダーを使用して、同期実装を行っているSinatraと2つのURLを非同期で実装しているCrampの間でAPIを分割しています。

これは良い方法ですか?または、SinatraとCrampを1つのWebサーバー(Thin)に含めると、何らかの理由でさらに問題が発生しますか?

更新: 私は、ラック/ファイバー_プールとem_mysql2を組み合わせた唯一のSinatraを使用したソリューションを試しています。APIを同期実装と非同期にするという2つの目標を達成しているようです。しかし、私はバグに苦しんでおり、すぐに修正されると思います。

このように行く落とし穴はありましたか?

4

2 に答える 2

6

同じシンプロセス内に同期(シナトラ)アプリと非同期(クランプ)アプリを配置するのは良い考えではないと思います。同期部分が比較的単純な場合は、Crampに実装することをお勧めします。Crampを作成したので、ここで少し偏っています:)

ご存じない方のために説明すると、CrampはAR/ファイバープールをすぐにサポートしています-https ://github.com/lifo/cramp/blob/master/examples/fibers/long_ar_query.ru

けいれんを使用することにした場合、私は最近けいれんに多くの作業をしていて、かなり興奮しているので、問題があれば喜んでお手伝いします!私にメールを送ってください!

于 2011-08-05T02:09:20.677 に答える
0

Goliath でどのような非同期処理に遭遇したか知りたいです。一般的なケースでは、最終開発者に見える非同期コードはありません。

これをエンドユーザーに見えにくくするために何か改善できることはありますか?

于 2011-09-13T04:59:26.653 に答える