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つの目標を達成しているようです。しかし、私はバグに苦しんでおり、すぐに修正されると思います。
このように行く落とし穴はありましたか?