さまざまな概念(正しいか間違っているか)を読んで使用した後、モジュール性に関する質問が表示されました。
プロジェクトにマイクロサービスアーキテクチャを正しく実装したい。
このアーキテクチャに従うために理解したことから、私のプロジェクトはモジュール化する必要があります。例として、ソーシャルネットワークをチャットAPIサービス、Web APIサービス、モバイルサービスAPIなどのさまざまなサービスに分解する...
マイクロサービス間の通信にどのプロトコルを使用する必要がありますか?RESTプロトコルを介して通信できますか?たとえば、JSONを介して通信しますか?また、API 1とAPI 2間の通信をセキュリティで保護するにはどうすればよいですか?
OOPおよび関数型プログラミングについて話します。
OOPは、操作のセットが固定されていて、コードが進化して新しいものを追加するときに使用されます。一方、関数型プログラミングは、セットが固定されているときに使用されますあなたのコードが進化するにつれて、さらに操作を追加します。
次に、これらの質問をまとめて1つの質問として質問します。マイクロサービスアーキテクチャをフォローするときに、プロジェクトのさまざまな部分でさまざまなプログラミングスタイルを使用するための最良のアプローチは何ですか?
逆の順序で:もちろん、マイクロサービスに「最適」なパラダイムについての一般的な回答はありません。あなたはあなたのユースケースを知り、あなた自身のために決定しなければなりません。 ロットの経験がなければ、これを正しく行うことはほとんど不可能であり、それを使ってもほとんどのプロジェクトは間違っています。
OOP vs. Functional:2つは実際にはそれほど異なりません。どちらにもカプセル化、明確な分離などの概念があります。主な違いは、機能的傾向をより厳しくすることです。あなたはあなたの数学と問題が数学的に分解できる方法を知っている必要があります。 OOPは基本的に数学に挑戦する人々のためのプログラミングです。私はOOP開発者としてです。いずれにせよ、どちらもより適切ではありません。問題自体よりも人々に。
マイクロサービス間の通信:マイクロサービス間の通信の最初のルールは、マイクロサービス間で通信しないことです。マイクロサービスは、ドメインの機能的に完全な部分である必要があります。他のシステムとの通信はすべて、Fire-and-Forgetタイプである必要があります。つまり、メッセージをシステムに送信するか、そのシステムがメッセージを送信しますが、両方は送信しません。どちらも、問題が他のサービスから明確に分離されていないことを意味します。
とにかく、実際のコミュニケーション方法はそれほど重要ではありません。 HTTP、メッセージブローカー、またはTCP/IP接続を使用できます。問題ではなく、実際には通信自体の要件に依存する必要があります。大量のデータをサポートする必要がある場合、安全な場合など。
概要:最も重要なことは、機能を完全に分解することです(そのため、要求と応答の通信は必要ありません)。簡単に実験できる他のすべてのもの。
また、マイクロサービスを実行している理由を知っている場合にも役立ちます。おそらく、チーム、運用要件、パフォーマンス/スケーリング要件など、いくつかの非機能要件があります。
最終的に、正しく実行できるかどうかは、アーキテクチャに関する目標を達成できるかどうかによって異なります。あなた自身の目標を除いて、「正しい方法」が何であるかについての実際の絶対測定はありません。
マイクロサービスに関しては、互いに通信しないように注意する必要があります。たとえば、認証マイクロサービスを持つことができます。認証が必要な他のマイクロサービスがauthマイクロサービスと通信し、独自のマイクロサービスを実装しないようにする必要があります。また、データベーステーブルのようにバックチャネルを介さずに、ネットワーク接続/キューサービスを介してマイクロサービス通信を行う必要があります。たくさんのオープンソースプロジェクト(openstack、jeager)があり、そこからインスピレーションを得られます。