エンドユーザーにプッシュ通知を送信する通知サービスを構築しています。通知には2つのタイプがあります
グループ内のすべてのユーザーに同じテキスト通知を送信するグループ通知。誰もがグループをサブスクライブし、グループに通知を送信するため、これは簡単に達成できます。
各ユーザーに特定のテキスト通知を送信するパーソナライズされた通知。
私の質問は(パーソナライズされた通知の場合)通知サービスをどのように設計すればよいかです。
アプローチ1:ユーザーごとにメッセージを作成し、メッセージを含むユーザーのバッチを通知サービスに送信して送信するアプリケーションサービスのアプリロジックに基づいて、ユーザーを選択するロジックを維持していますか?
アプリケーションロジックに基づいてユーザーを選択(アプリサーバー上)->各ユーザーをループし、カスタムメッセージを作成(アプリサーバー上)->メッセージで1Kユーザーのバッチを作成し、通知サービスに送信(アプリサーバー上)->通知を送信(通知サービス)
アプローチ2:通知サービスでアプリデータベースに直接アクセスしてユーザーを取得し、メッセージを作成して送信しますか?
ユーザーを選択->ループオーバーしてメッセージを作成->各ユーザーに送信(通知サービスのすべて)
皆さんは何を示唆していますか?検討できる他のアプローチはありますか?パーソナライズされた通知を100万人のユーザーに送信する必要がある場合があることを考慮してください。
あなたの質問に対する答えは、サービスの境界を特定する方法だと思います。基本的なアプローチは、どのサービスも、そのジョブを実行するために必要なすべてのデータを所有する必要があるということです。つまり、サービスは some SOAガイドラインの場合のように、水平層ではなく、 vertical slices によって定義されます。独自のコントローラー、ドメインロジック、UIを備えた、ビジネス機能またはビジネスプロセスの具体的な部分。自律型であるため、他のサービスのデータや動作を必要としません。
したがって、例を考えると、通知サービスは、より大きな論理サービスの一部である可能性があります。たとえば、ドメインが小売ネットワークに関するもので、ある日大きな割引があり、すべての顧客に通知したいとします。顧客の電話番号、割引に関する情報(おそらく特定のタイプの顧客に合わせたもの)、および通知テキストが必要です。誰が割引ビジネスルールを管理しますか?どのサービスが顧客のデータを所有していますか?きっとそれは販売サービスだ。したがって、通知サービスは間違いなくその一部です。したがって、この販売サービスには、通知を送信するために必要なすべてのデータを含む独自のデータベースが必要です。
パフォーマンスの問題について考えている場合は、この通知機能を独自の物理マシンに抽出してもかまいません。必要な場合は、マシンをさらに追加するだけです。また、サービスの境界は物理的なものではなく論理的なものであるため、この新たに抽出された機能のために個別のデータベースを作成する必要はありません。
これが 一連の投稿 これらの問題に詳細に対処する方法です。