서비스 발견 및로드 밸런싱은 분산 시스템을 구축 할 때 핵심 기능입니다. 서비스 검색은 시스템의 서비스 및 네트워크 위치를 자동으로 식별하는 데 사용되며로드 밸런싱은 시스템의 고 가용성 및 성능을 향상시키기 위해 여러 서비스 인스턴스에 요청을 합리적으로 배포하는 데 책임이 있습니다.
이 기사는 PHP 마이크로 서비스 에서이 두 기능을 구현하기위한 특정 방법과 예제 코드를 공유합니다.
서비스 검색의 목적은 사용 가능한 모든 서비스 인스턴스를 찾고 네트워크 위치를 다른 서비스에 제공하는 것입니다. PHP 마이크로 서비스에서 서비스 인스턴스는 레지스트리를 통해 관리 할 수 있습니다. 레지스트리는 시스템 및 네트워크 정보에 사용 가능한 모든 서비스를 기록하는 중앙 집중식 서비스입니다.
다음은 레지스트리를 사용하여 서비스 검색을 구현하는 방법을 보여주는 PHP 예입니다.
클래스 레지스트리 { 개인 정적 $ 서비스 = []; public static function registerservice ($ serviceName, $ host, $ port) { self :: $ 서비스 [$ serviceName] [] = [ '호스트'=> $ host, '포트'=> $ 포트, ]; } public static function getService ($ serviceName) { $ services = self :: $ services [$ serviceName] ?? []; $ index = mt_rand (0, count ($ services) -1); 반품 $ 서비스 [$ index] ?? 널; } } 레지스트리 :: 레지스터 서비스 ( '사용자 서비스', '로컬 호스트', 8001); 레지스트리 :: RegisterService ( '사용자 서비스', 'LocalHost', 8002); 레지스트리 :: 레지스터 서비스 ( 'Order-Service', 'localhost', 9001); $ userervice = 레지스트리 :: getService ( '사용자 서비스'); $ orderservice = 레지스트리 :: getService ( 'Order-Service'); Echo "사용자 서비스 :". $ uservice [ 'host']. ":". ". $ uservice [ 'port']. "\N"; 에코 "주문 서비스 :". $ Orderservice [ '호스트']. ":". ". $ Orderservice [ '포트']. "\N";
레지스트리 클래스는 서비스 등록 및 입수를위한 예에서 정의됩니다. 레지스터 서비스 메소드는 서비스 인스턴스를 등록하는 데 사용되며 getService 메소드는 특정 서비스의 임의 인스턴스를 얻는 데 사용됩니다. 개발자는 서비스 만료 날짜 또는 건강 점검 추가와 같은 수요에 따라 기능을 확장 할 수 있습니다.
로드 밸런싱은 여러 서비스 인스턴스에 요청을 배포하여 시스템의 고 가용성 및 성능 최적화를 가능하게합니다. PHP 마이크로 서비스에서 일반적으로 사용되는 알고리즘에는 폴링, 무작위 선택 및 가중 무작위성이 포함됩니다.
다음은 폴링로드 밸런싱 알고리즘을 구현하는 PHP 예입니다.
Class LoadBalancer { 개인 정적 $ 서비스 = []; 개인 정적 $ index = 0; 공개 정적 함수 추가 서비스 ($ ServiceName, $ host, $ port) { self :: $ 서비스 [$ serviceName] [] = [ '호스트'=> $ host, '포트'=> $ 포트, ]; } public static function getService ($ serviceName) { $ services = self :: $ services [$ serviceName] ?? []; $ index = self :: $ index % count ($ services); self :: $ index ++; 반품 $ 서비스 [$ index] ?? 널; } } LoadBalancer :: AddService ( '사용자 서비스', 'LocalHost', 8001); LoadBalancer :: AddService ( '사용자 서비스', 'LocalHost', 8002); LoadBalancer :: AddService ( 'Order-Service', 'LocalHost', 9001); for ($ i = 0; $ i <10; $ i ++) { $ userervice = loadbalancer :: getService ( '사용자 서비스'); Echo "사용자 서비스 :". $ uservice [ 'host']. ":". ". $ uservice [ 'port']. "\N"; }
이 예에서는 LoadBalancer 클래스는 서비스 인스턴스와 설문 조사를 추가하여 서비스를받는 데 사용됩니다. 인덱스를 유지함으로써 다음 서비스 인스턴스는 GetService를 호출 할 때마다 차례로 반환되어 간단한 폴링로드 밸런싱을 달성합니다.
서비스 발견 및로드 밸런싱은 PHP 마이크로 서비스 아키텍처의 기초입니다. 레지스트리를 사용하여 서비스 인스턴스를 균일하게 관리하고로드 밸런싱 알고리즘은 시스템 성능과 안정성을 향상시킬 수 있습니다. 이 기사에서 제공된 예제는 구현을 기반으로하며 개발자는 실제 비즈니스 요구에 따라 확장하고 최적화 할 수 있습니다.