spring webflux와 armeria 살펴보기 (Mono, Flux, gRPC, Thrift)
1. spring webflux 란?
- 더 낮은 사양의 하드웨어, 더 적은 수의 스레드로 동시성을 처리하기 위함
- 서블릿 스펙 3.1에서 논블로킹IO API를 지원하긴 하는데, 자꾸 동기(Filter, Servlet)나 블로킹(getParameter, getPart)에서 걸린다
- spring 5.0 (boot 2.0) 부터 사용 가능
1-1. 특징
- 서블릿과 이별 : DispatcherServlet(doGet, doPost) 이 없음
- 기본 컨테이너가 tomcat -> netty (서블릿 스펙 3.1이상인 tomcat을 쓸 수는 있음)
- project reactor : 절차형 -> 반응형, 코드가 의식의 흐름처럼 흘러감
- Reactive stream의 구현체
- 비동기 / 논블로킹 스트림 처리를 위한 스펙명세
- https://github.com/reactive-streams/reactive-streams-jvm/blob/master/README.md
- 다른 구현체 : rx시리즈, akka streams, vert.x
- Reactive stream의 구현체
1-2. Mono와 Flux
- 몇 개나 흘려보낼 것인가?
- mono : 0 or 1 (딱 한번)
- flux : 0 or 1 or many (쭈욱)
- 순서보장이 안된다
1-3. spring MVC vs webflux
2. Armeria
- Asynchronous RPC/REST library built on top of Java 8, Netty, HTTP/2, Thrift and gRPC
- 고성능 비동기 마이크로서비스를 손쉽게 제작할 수 있음
- 단일 어플리케이션에서 단일 포트로 HTTP, gRPC, Thrift를 동시에 지원
- spring webflux는 서블릿엔진이 아니기 때문에 thrift의 Tservlet을 사용할 수 없음, 별도로 서버구현체를 만들어야해서 포트 소모
- gRPC, Thrift를 브라우저기반에서 테스트 가능
- cf. 사용처 : zipkin, slack, twitter, kakaoPay 등
2-1. 동작원리
- Armeria가 Spring WebFlux의 서버구현체를 대체 : ArmeriaReactiveWebServerFactory.java
- ArmeriaWebServer 에 요청이 들어오면 분배
- HTTP요청으로 들어오면 Spring WebFlux 로
- gRPC요청이 들어오면 gRPC서비스로
- Thrift요청이 들어오면 Thrift서비스로
- Armeria가 네트워크 레벨을 핸들링하고 Spring은 Bean Container, DB Transaction 확보 용도로 공존
- Spring에서 지원하지 않는 gRPC, Thrift등의 서빙을 Armeria가 관리
2-2. gRPC 란?
- RPC는 원격 프로시저 요청 (Remote Procedure Call)의 약자로 gRPC는 Google에서 개발
- 통신 프로토콜 : HTTP/2
- 표현언어 : 프로토콜 버퍼
- xml 이나 json은 사람이 읽을 수 있게 직렬화 하지만, 프로토콜 버퍼는 이진바이너리로 직렬화 => 매우 빨라짐
2-2-1. 특징
- 로드밸런싱, 인증, 양방향 스트리밍 및 흐름 제어, 바인딩 차단 또는 차단 해제 및 취소 및 시간 초과 기능
- 클라이언트에서 서버의 API호출을 메소드처럼 직접 할 수 있음 (MSA에서 강점인 듯?)
- gRPC 클라이언트는 서버의 메소드의 stub을 작성
- gRPC 서버는 인터페이스 제공
2-3. Thrift 란?
- 다양한 언어를 지원하는 RPC 프레임워크, facebook 에서 개발
- 데이타 타입 및 서비스 인터페이스를 간단한 정의 파일안에 제공하며, 컴파일러는 다른 언어간에 통신할 수 있는 RPC 클라이언트/서버의 코드를 생성
2-3-1. 특징
- Sync, Async Server API 제공
- 서블릿 제공(org.apache.thrift.server.TServlet)
- 멀티쓰레드 지원 (org.apache.thrift.server.ThreadPoolServer : worker thread 지정)
출처: https://sjh836.tistory.com/176?category=680970 [빨간색코딩]
'Spring Framework > Spring webflux' 카테고리의 다른 글
Coroutine, Webflux<Mono> (0) | 2022.10.21 |
---|---|
Webflux 가 빠른 이유, MVC 와 비교했을 때 장단점[출처] Webflux 가 빠른 이유, MVC 와 비교했을 때 장단점|작성자 joebak (0) | 2022.10.21 |