PHP 프로그래머 가 서비스 관리 구조 에 대한 간단 한 설명(1)

본 고 는 PHP 프로그래머 가 서비스 관리 구조 조작 을 간단하게 전개 하 는 것 을 실례 로 서술 하 였 다.여러분 께 참고 하도록 공유 하 겠 습 니 다.구체 적 으로 는 다음 과 같 습 니 다.
다른 언어 와 도구 와 관련 되 지 않 고 우 리 는 PHP 자체 에서 서비스 관 리 를 어떻게 실현 하 는 지 에 대해 이야기 합 니 다.
본 원인 은 이미 다 쓴 서비스 관리https://github.com/CrazyCodes/Service-Govern.git
뭘 다스 려?
이 전문 명 사 는 관리 하 는 것 이 서비스 이 고 서 비 스 는 우리 의 프로젝트 라 는 것 을 쉽게 발견 할 수 있다.이런 서비스 방안 을 관리 하 는 것 을 서비스 관리 라 고 한다.
현재 서버 에는 네 가지 서비스 가 있 는데,각각
  • UserService
  • ShopService
  • GoodsService
  • LiveService
  • 이러한 서 비 스 는 우리 가 그것 을 서비스 제공 자라 고 부른다.
    호출 서비스의 응용 을 우 리 는 그것 을 서비스 소비자 라 고 부른다.예 를 들 어
  • User-Api
  • Shop-Api
  • Goods-Api
  • Live-Api
  • Service 는 대내 서비스 이 고 Api 는 대외 서비스 입 니 다.

    서비스 관리 가 고려 하 는 문 제 는 바로 이 네 가지 서 비 스 를 어떻게 관리 하고 대외 서 비 스 를 어떻게 하 며 서비스 과정 을 어떻게 감시 하 느 냐 하 는 것 이다.
    실현 에 의존 하 다
    서비스 관 리 를 실현 하기 전에 다음 과 같은 몇 가지 지식 을 알 아야 한다.
  • thrift
  • rpc
  • swoole
  • thrift
    당분간 은 그것 을 통 해 다른 개발 언어 를 호출 할 수 있 는 방법 으로 이해 할 수 있다
    rpc
    RPC(Remote Procedure Call)-원 격 프로 세 스 호출 은 네트워크 를 통 해 원 격 컴퓨터 프로그램 에서 서 비 스 를 요청 하 는 것 이지 바 텀 네트워크 기술 을 알 필요 가 없 는 프로 토 콜 입 니 다.RPC 프로 토 콜 은 TCP 나 UDP 와 같은 일부 전송 프로 토 콜 의 존 재 를 가정 하여 통신 프로그램 간 에 정보 데 이 터 를 휴대 합 니 다.OSI 네트워크 통신 모델 에서 RPC 는 전송 층 과 응용 층 을 뛰 어 넘 었 다.RPC 는 네트워크 분산 다 중 프로그램 을 포함 한 응용 프로그램 개발 을 더욱 쉽게 한다.
    RPC 는 클 라 이언 트/서버 모드 를 사용 합 니 다.요청 프로그램 은 클 라 이언 트 이 고 서비스 제공 프로그램 은 서버 입 니 다.우선,클 라 이언 트 호출 프로 세 스 는 프로 세 스 매개 변수 가 있 는 호출 정 보 를 서비스 프로 세 스 로 보 낸 다음 응답 정 보 를 기다 리 고 있 습 니 다.서버 에서 프로 세 스 는 호출 정보 가 도착 할 때 까지 수면 상 태 를 유지 합 니 다.호출 정보 가 도착 하면 서버 는 프로 세 스 파 라 메 터 를 얻 고 결 과 를 계산 하 며 답변 정 보 를 보 낸 다음 호출 정 보 를 기다 리 고 마지막 으로 클 라 이언 트 호출 프로 세 스 는 답변 정 보 를 받 고 프로 세 스 결 과 를 얻 은 다음 호출 실행 을 계속 합 니 다.
    서비스 와 서비스 간 통신 은 RPC 를 통 해 통신 할 수 있 으 며,물론 UDP 등 도 선택 할 수 있다.
    swoole
    PHP 권 에서 세 기 를 뛰 어 넘 는 결과 물 을 사용 하 는 이 유 는 Swoole 자체 가 RPC 통신 을 지원 하기 때문에 본 장 은 Swoole Rpc 의 방법 을 통 해 소비자 와 서비스 제공 자 간 의 통신 을 실현 합 니 다.
    RPC 통신 실현
    서비스 관리 가 매우 중요 한 부분 이다.감지 되 지 않 은 상황 에서 소비자 A 가 서비스 제공 자 A,B,C 를 호출 하도록 해 야 한다.물론 실제 상황 에서 이것 은 영원히 불가능 하 다.메모리 공간 에 있 지 않 기 때문에 우 리 는 이런 사용 방식 을 스스로 모 의 해 야 한다.
    
    $userSerivce = $client->client ('UserService');
    $result = $userSerivce->getUserInfo (['user_id' => 100]);
    var_dump($result);
    소비자 내 에 UserService 도 없고 getUserInfo 방법 도 없다.이런 것들 은 모두 서비스 제공 자의 응용 에서 어떻게 호출 합 니까?
    우선 php 를 통한call 방법 은 존재 하지 않 는 방법 을 캡 처 합 니 다.
    
    public function __call($name, $arguments)
    {
      $client = new ClientRpc($this->serviceName);
          
      $response = $client->send ($this->serviceName, $name, $arguments);
          
      return (json_decode ($response, true));
          
    }
    가 져 온 후 자신 이 쓴 send 방법 을 호출 하여 swoole 가 나 옵 니 다.
    
    class ClientRpc
    {
      protected $client;
        
      public function __construct($service_name, $centerConfig)
      {
        $this->client = new \swoole_client(SWOOLE_SOCK_TCP);
          
        $center = Dispatcher::loadBalance ($service_name, $centerConfig);
        $this->client->connect ($center['ip'], $center['port'], 0.5);
      }
        
      public function send($service, $action, $arguments)
      {
        $request = new Request();
        
        $request->setService ($service);
        $request->setAction ($action);
        $request->setParameters ($arguments[0]);
        //     ,         ,    json        
        $this->client->send (json_encode ((array)$request));
          
        return $this->client->recv ();
      }
        
      public function __destruct()
      {
        $this->client->close ();
        unset($this->client);
      }
    }
    더 많은 PHP 관련 내용 에 관심 이 있 는 독자 들 은 본 사이트 의 주 제 를 볼 수 있다.
    본 논문 에서 말 한 것 이 여러분 의 PHP 프로 그래 밍 에 도움 이 되 기 를 바 랍 니 다.

    좋은 웹페이지 즐겨찾기