はじめに
マクロサービスの通信方法には、
API、メッセージキュー、バッチ処理、データベース共有等が挙げられます。
今回はこれらの特徴について解説していきます。
同期通信と非同期通信
通信方法は大きく、同期通信と非同期通信に大別されます。
各通信方法について見ていく前の前提知識として、これらについて解説します。
同期通信は送信側と受信側のタイミングを合わせる通信です。砕いて言うと、相手にリクエストをしたら、応答が返ってくるのを待つ通信方法です。
同期通信は直感的ですが、リクエスト処理の完了を待つために時間がかかる可能性があり、処理の効率性やスケーラビリティに制約があります。
反対に、非同期通信は送信側と受信者側でタイミングを合わせて通信を行う必要はありません。データの送信、受信はそれぞれの好きなタイミングで独立して行われます。
非同期通信では、リクエスト後、レスポンスを待たないため、一つの遅延処理が全体に影響を与えず、応答待ちの時間を最小限に抑えることができます。
一方で、エラーハンドリングやデータの整合性を考慮する必要が出てくることがあります。
API
HTTPベースのプロトコルを使用して、他のサービスにリクエストを送信し、応答を受け取ります。
メソッド(GET、POST、PUT、DELETEなど)とリソース(エンドポイント)で操作方法を表現します。また、同期通信で1対1で通信を行います。
メリット
- シンプルで直感的。よく使われる
- クライアントとサーバーが直接通信するため、リアルタイムなデータの取得、更新が可能
- RESTやGraphQLなど標準化されたプロトコルを使用して相互運用性が高い
- 多くの言語で基本的にサポートされている
- Web上のナレッジやツールが豊富
デメリット
- 1リクエストで複数のリソースを操作できない
- 同期通信であるためリクエストが完了するまでクライアントはブロックされる
- 高負荷がある場合、パフォーマンスの問題が生じる可能性がある
バッチ
特定の時間またはイベントトリガーで起動され、データを収集・変換・処理します。一般的には、ファイル連携やDB参照を介した定期的な連携で使用することが多いです。
メリット
- 非同期にまとめて大量のデータを効率よく処理できる
- 定期実行によりデータ集計やバックエンドタスクを自動化できる
デメリット
- 実行間隔によってはデータの遅延が発生する
- 非同期であるため、リアルタイムなデータの要求には適していない
メッセージキュー
非同期にメッセージのやり取りをする仕組みです。
送信者はメッセージをキューに追加し、受信者はキューからメッセージを取り出して使用します。
また、1つの送信者に対して、複数の受信者を設定することも可能です。
メリット
- 送信者と受信者側のサービスの疎結合性を高める
- スケーラビリティが高く、負荷分散や耐障害性が高い
- 送信者と受信者の処理速度の違いを吸収してくれる(バッファリング)
デメリット
- メッセージの順序や整合性の管理に注意が必要
- 管理が複雑になる
DB共有
テーブル、ビューを直接共有してデータを連携します。
メリット
- データの一貫性が保たれる
- 反映した即時のデータが扱える
- トランザクション管理やデータの永続化により信頼性が高い
デメリット
- 各サービス間が直接的な結合をすることになるため、依存性が高まる。
- 修正時の影響範囲が大きくなる
- 複数のサービスが同時にデータベースにアクセスすると、データの競合やパフォーマンスの低下が発生する可能性がある
終わりに
本記事はここまでとなります。
ご覧いただきありがとうございました。ご指摘等がございましたら頂けますと嬉しいです。
引き続き、プログラミングについて定期的に発信していきますのでよろしくお願いします!
また、もしよろしければtwitterもフォローしていただけると嬉しいです!🐢
コメント