分散システムを構築する際のサービスの発見と負荷分散は、コア機能です。サービスの発見は、システム内のサービスとそのネットワークの場所を自動的に識別するために使用されますが、ロードバランスは、システムの高可用性とパフォーマンスを向上させるために複数のサービスインスタンスに合理的にリクエストを配布する責任があります。
この記事では、PHPマイクロサービスにこれら2つの機能を実装するための特定の方法と例コードを共有します。
サービスの発見の目的は、利用可能なすべてのサービスインスタンスを見つけ、他のサービスにネットワークの場所を提供することです。 PHPマイクロサービスでは、サービスインスタンスはレジストリを介して管理できます。レジストリは、システムとそのネットワーク情報で利用可能なすべてのサービスを記録する集中サービスです。
これは、レジストリを使用してサービス発見を実装する方法を示すPHPの例です。
クラスレジストリ{ private static $ services = []; public static function registerservice($ servicename、$ host、$ port){ self :: $ services [$ servicename] [] = [ 「ホスト」=> $ホスト、 'port' => $ポート、 ]; } public static function getService($ servicename){ $ services = self :: $ services [$ servicename] ?? []; $ index = mt_rand(0、count($ services)-1); Return $ services [$ index] ??ヌル; } } レジストリ:: registerService( 'user-service'、 'localhost'、8001); レジストリ:: registerService( 'user-service'、 'localhost'、8002); レジストリ:: registerService( 'order-service'、 'localhost'、9001); $ userservice = registry :: getService( 'user-service'); $ OrderService = registry :: GetService( 'Order-Service'); エコー「ユーザーサービス:」。 $ userservice ['host']。 ":"。 $ userservice ['port']。 "\ n"; Echo "Order Service:"。 $ OrderService ['HOST']。 ":"。 $ OrderService ['port']。 "\ n";
レジストリクラスは、サービスの登録と取得の例で定義されています。レジスターサービスメソッドは、サービスインスタンスの登録に使用され、GetServiceメソッドを使用して特定のサービスのランダムインスタンスを取得します。開発者は、サービスの有効期限や健康チェックの追加など、需要に基づいて機能を拡張できます。
ロードバランスにより、複数のサービスインスタンスにリクエストを配布することにより、システムの高可用性とパフォーマンスの最適化が可能になります。 PHPマイクロサービスでは、一般的に使用されるアルゴリズムには、ポーリング、ランダム選択、および加重ランダム性が含まれます。
ここに、ポーリング負荷のバランスアルゴリズムを実装するPHPの例があります。
クラスロードバランサー{ private static $ services = []; private static $ index = 0; public static function addservice($ servicename、$ host、$ port){ self :: $ services [$ servicename] [] = [ 「ホスト」=> $ホスト、 'port' => $ポート、 ]; } public static function getService($ servicename){ $ services = self :: $ services [$ servicename] ?? []; $ index = self :: $ index%count($ services); 自分の:: $ index ++; Return $ services [$ index] ??ヌル; } } loadbalancer :: addService( 'user-service'、 'localhost'、8001); loadbalancer :: addservice( 'user-service'、 'localhost'、8002); LoadBalancer :: AddService( 'Order-Service'、 'LocalHost'、9001); for($ i = 0; $ i <10; $ i ++){ $ userservice = loadbalancer :: getService( 'user-service'); エコー「ユーザーサービス:」。 $ userservice ['host']。 ":"。 $ userservice ['port']。 "\ n"; }
この例では、Loadbalancerクラスを使用して、サービスインスタンスとポーリングを追加してサービスを取得します。インデックスを維持することにより、GetServiceを呼び出すたびに次のサービスインスタンスが順番に返され、単純なポーリングロードバランシングが達成されます。
サービスの発見と負荷分散は、PHPマイクロサービスアーキテクチャの基礎です。レジストリを使用してサービスインスタンスを均一に管理しますが、ロードバランスアルゴリズムはシステムのパフォーマンスと安定性を向上させることができます。この記事で提供される例は実装に基づいており、開発者は実際のビジネスニーズに応じて拡張および最適化できます。