マルチテナントシステムを設計しており、データベースではなくアプリケーション層レベルでテナントによるシャーディングを検討しています。
仮に、これが機能する方法は、着信要求の場合、ルータープロセスが、この要求のテナントと仮想シャードIDを決定するためのプライマリ属性を含むテナントのグローバルコレクションを持っていることです。この仮想シャードIDは、実際のシャードにさらにマップされます。
実際のシャードには、アプリケーションのコードとこのテナントのデータ全体の両方が含まれています。これらのシャードは、LNMP(Linux、Nginx、MySQL / MongoDB、PHP)サーバーになります。
ルータープロセスはプロキシとして機能する必要があります。いくつかのローカルデータベースまたはファイルに格納されているコレクションに基づいて、着信要求のターゲットシャードを決定するためのコードを実行できる必要があります。これをより適切にスケーリングできるようにするために、シャード自体をルーターとしても機能させ、リクエストを適切なシャードに転送するリバースプロキシを実行できるようにすることを検討しています。シャードで実行されているnginxインスタンスは、そのリバースプロキシとしても機能する可能性があります。しかし、リクエストを適切なシャードと照合するために必要なアプリケーションロジックをどのように実行しますか。
このルーターの実装に関するアイデアや提案をいただければ幸いです。
ありがとう