코딩딩/MSA

MSA 기초

전낙타 2023. 11. 3. 09:11

MSA 환경

  • 서비스와 서비스는 원격 호출로 구성
  • 서비스 클라이언트가 서비스를 호출할때 서비스의 위치를 알아낼 수 있어야 한다.
  • 이러한 서비스가 디스커버리

Service discovery와 Client server

각 서비스의 위치를 등록해 놓는 전화번호부와 같은 서버

  • GPT서비스 디스커버리는 다음과 같은 기능을 수행합니다:
    1. 서비스 등록: 각 서비스는 자신의 위치, IP 주소, 포트 번호, 서비스 유형 등을 서비스 디스커버리 메커니즘에 등록합니다.
    2. 서비스 검색: 클라이언트 애플리케이션은 특정 서비스를 필요로 할 때, 서비스 디스커버리 메커니즘을 사용하여 해당 서비스의 위치를 검색합니다.
    3. 서비스 상태 업데이트: 서비스 디스커버리는 서비스의 상태 변화를 감지하고 업데이트할 수 있으며, 서비스의 가용성 및 신뢰성을 향상시킵니다.
    4. 부하 분산: 서비스 디스커버리를 사용하면 부하 분산을 수행할 수 있으며, 여러 서버 인스턴스 중에서 요청을 분배할 수 있습니다.
    서비스 디스커버리는 클라우드 환경, 컨테이너 오케스트레이션 플랫폼(예: Kubernetes) 및 마이크로서비스 아키텍처에서 특히 중요합니다. 몇 가지 인기 있는 서비스 디스커버리 도구와 프로토콜에는 Consul, etcd, ZooKeeper, DNS-based service discovery, 그리고 HTTP API 기반의 디스커버리가 포함됩니다. 이러한 메커니즘은 서버와 서비스의 동적 확장과 관리를 단순화하고, 안정성과 가용성을 향상시키는 데 도움이 됩니다.
  • 서비스 디스커버리(Service Discovery)는 컴퓨터 네트워크에서 서비스의 위치와 특성을 자동으로 발견하고 등록하는 메커니즘을 가리킵니다. 이것은 네트워크 환경에서 서비스를 찾거나 통신하기 위해 중요한 역할을 합니다. 서비스 디스커버리는 다양한 응용 프로그램 및 서비스 간의 효율적인 통신을 지원하고, 확장 가능한 분산 시스템에서 필수적입니다.

디스커버리 서버를 통해 클라이언트 서버에 요청이 들어오면 작업을 수행한다

#application.yml
server:
  port: 8761

spring:
  application:
    name: discoveryservice

eureka:
  client:
    register-with-eureka: false
    fetch-registry: false

  server:
    # 해당 옵션을 false로 설정해놓으면 연결이 끊킬시 바로 서버를 drop한다
    # 개발용으로만 사용할것
    enable-self-preservation: false
    eviction-interval-timer-in-ms: 3000

내 ip 주소와 port 번호를 통해 유레카 서버를 모니터링 할 수 있는 창이 뜬다0

client service의 application.yml

server:
  #랜덤포트 설정하기
  port: 0

spring:
  application:
    name: userservice

#레지스트리에 서비스 등록할지를 설정 (기본이 true)
eureka:
  client:
    register-with-eureka: true
    # 유레카 서버로부터 인스턴스 정보를 주기적으로 가져올 것인지 설정하는 속성
    # true로 설정하면 갱신된 정보를 주기적으로 받겠다는 의미
    fetch-registry: true

    # 서버의 위치를 등록
    service-url:
      defaultZone: <http://192.168.0.16:8761/eureka>

  instance:
    instance-id: ${spring.cloud.client.hostname}:${spring.cloud.application.instance_id:${random.value}}
    # 클라이언트가 유레카에 등록된 이후에 등록한 시간마다 하트비트를 전송
    lease-renewal-interval-in-seconds: 1
    # 설정된 시간동안 하트비트를 받지 못하면 인스턴스를 레지스트리에서 제거
    lease-expiration-duration-in-seconds: 2