면접준비 - 4 -- 프로세스, 쓰레드 정의 및 스프링 클라우드
프로세스(Process) 란
“컴퓨터에서 연속적으로 실행되고 있는 컴퓨터 프로그램"
메모리에 올라와 실행되고 있는 프로그램의 인스턴스(독립적인 개체)
운영체제로부터 시스템 자원을 할당받는 작업의 단위
즉, 동적인 개념으로는 실행된 프로그램을 의미한다.
스레드(Thread) 란
“프로세스 내에서 실행되는 여러 흐름의 단위”
프로세스의 특정한 수행 경로
프로세스가 할당받은 자원을 이용하는 실행의 단위
[스프링 클라우드] Netflix Zuul
zuul서버는 API Gateway이다먼저 왜 API Gateway가 필요할까 이해하는게 중요API Gateway는 API의 요청자인 Client(웹어플리케이션 또는 모바일앱)와 API의 제공자인 backend service를 연결하는 중계자우리가 부
velog.io
스프링 클라우드 -- zuul //
zuul서버는 API Gateway
API 게이트웨이는 API를 위해 관리, 모니터링, 인증을 제공하는 API 관리 시스템
먼저 왜 API Gateway가 필요할까 이해하는게 중요
API Gateway는 API의 요청자인 Client(웹어플리케이션 또는 모바일앱)와
API의 제공자인 backend service를 연결하는 중계자
API Gateway가 필요한 이유
- 인증/인가: 부적절한 요청을 차단하여 Backend service를 보호
- L/B & Routing: Client의 요청에 따라 적절한 backend service를 로드밸런싱(L/B: Load Balancing)하고 연결(라우팅)
- Logging: 유통되는 트래픽 로깅
- Circuit Break: Backend service 장애 감지 및 대처
모든 frontend의 요청을 라우팅하므로 다음의 usecase에도 활용할 수 있습니다.
- 점진적으로 레거시 시스템을 신규 시스템으로 교체: Strangler pattern 적용
- 트래픽 일부만 새로운 서비스로 라우팅: Canari(카나리) 배포 가능
Ribbon이란?
Ribbon은 Load balancing을 요청 어플리케이션 단에서 수행해주는 Client-side Load balancer입니다.
Ribbon과 같은 L/B가 필요한 이유는 부하 분산을 적절하게 하여 서비스의 가용성을 최대화하기 위함입니다.
히스트릭스 대시보드 서버
히스트릭스 대시보드는 히스트릭스 클라이언트에서 생성하는 스트림을 시각화하여 웹화면에 보여주는 대시보드 화면입니다. 히스트릭스 클라이언트가 설치된 마이크로서비스는 마이크로서비스 호출 시 생성되는 스트림 메시지를 터빈 서버에 전송합니다.
마이크로서비스에 히스트릭스 클라이언트가 설치되면 'http://마이크로서비스IP:포트/hystrix.stream'으로 스트림 메시지를 보내고, 히스트릭스 대시보드에 등록하여 실시간으로 확인할 수 있습니다 마이크로서비스의 개수가 많아지면 마이크로서비스 하나하나 상태를 확인하기 힘들기 때문에 터빈 서버를 이용하여 개별 히스트릭스 스트림을 한꺼번에 수집하는 기능으로 사용합니다.
히스트릭스 대시보드는 터빈 서버에 연결하여 일괄 취합된 스트림 메시지를 웹 화면을 통해 확인할 수 있습니다.
터빈 서버(Turbine server)
마이크로서비스에 설치된 히스트릭스 클라이언트 스트림을 통합해 주는 기능을 제공합니다. 히스트릭스 클라이언트 스트림은 마이크로서비스에 설치된 히스트릭스 클라이언트에서 마이크로서비스로의 서비스 처리 요청에 대한 결과값을 스트림으로 전달해주는 역할을 하고, 마이크로서비스에 히스트릭스 스트림 메시지는 이후에 설명할 히스트릭스 커맨드 설정을 통해서 적용할 수 있습니다. 터빈 서버는 각 마이크로서비스에서 생성되는 히스트릭스 클라이언트의 스트림 메시지를 터빈 서버로 모두 수집하는 역할을 합니다.
1) 유레카를 사용한 서비스 디스커버리
스프링 클라우드 넷플릭스에서 제공되는 첫 패턴은 유레카로 제공되는 서비스 디스커버리이다. 이 패키지는 클라이언트와 서버로 구분된다.
유레카 클라이언트를 프로젝트에 포함하려면 spring-cloud-starter-eureka 스타터를 사용한다. 클라언트는 항상 애플리케이션의 일부로 원격의 디스커버리 서버에 연결하는 일을 담당한다. 일단 연결되면 서비스 이름과 네트워크 위치를 담은 등록 메시지를 보낸다. 현재 마이크로서비스가 다른 마이크로서비스의 종단점을 호출해야 할 경우, 클라이언트는 서버로부터 등록된 서비스 목록을 담은 최신의 컨피규레이션을 가져오게 된다.
서버는 독립적인 스프링 부트 애플리케이션으로 설정되고 실행되는데, 각 서버의 상태를 다른 서버에 복제해 가용성이 높다. 유레카 서버를 프로젝트에 포함하려면 spring-cloud-starter-eureka-server 스타터를 사용한다.
2) 주울을 사용한 라우팅
스프링 클라우드 넷플릭스 프로젝트에 사용할 수 있는 패턴은 주울(Zuul)을 사용한 현명한 라우팅이다. 주울 라우팅 방식은 JVM 기반의 라우터이며 서버 측 부하분산과 일부 필터링을 수행한다. 주울은 폭넓은 곳에 적용할 수 있다. 넷플릭스에서는 주울을 인증이나 부하 평균 분배(Round-Robin), 정적 응답 처리, 부하 테스트에 사용한다. 주울은 설정가능하고 독립적인 스프링 부트 애플리케이션으로 실행된다는 점에서 유레카 서버와 같다.
주울을 프로젝트에 포함하려면 spring-cloud-starter-zuul 스타터를 사용한다. 마이크로서비스 아키텍처에서 주울은 전체 시스템의 진입점을 제공하는 API 게이트웨이로서 중요한 역할을 한다. 이를 위해 주울은 각 서비스의 네트워크 위치 정보를 알아야 하므로 유레카 서버와 통신하기 위해 디스커버리 클라이언트를 클래스 경로에 포함한다.
3) 리본을 사용한 부하 분산
스프링 클라우드 넷플릭스의 기능 중 클라이언트 측 부하 분산기인 리본(Ribbon)이 있다. 이것은 TCP, UDP, HTTP 등 가장 유명한 프로토콜을 지원하다. 동기 방식의 REST 호출뿐만 아니라 비동기 똔느 리액티브 모델도 지원한다. 부하 분산 외에도 서비스 디스커버리, 캐싱, 일괄 처리, 장애 내성과 통합할 수 있다. 리본은 기본 HTTP와 TCP 클라이언트를 한단계 더 추상화한다.
출처: https://12bme.tistory.com/506 [길은 가면, 뒤에 있다.:티스토리]