Zuul2.0

Why should msa need asyncrous, non-blocking and multi thread?

  • 이런걸 기대했더니 : 복원력(resiliency) - 대기시간(latency) 측면에서 성능 향상, 처리량(throughput), 그리고 비용 개선을 해주기를 기대했다... 그러나.

  • Zuul1은 기본적으로 Servlet Framework 기반으로 만들어져 있죠. 이런 시스셈은 기본적으로 Multithread에 Blocking시스템입니다. 즉, 하나의 요청이 들어오면 하나의 Thread를 이용해서 이러한 처리를 한다는 거죠 .

    대상

    • Netty를 전혀 모르는 사람

목표

  • Zuul2 적용

기본 지식

Zuul2 Netty Handler 메커니즘

  • 다음은 Zuul2가 HTTP request를 백엔드 서비스로 포워딩 하기 전에 실행되는 Zuul2 내 Netty Handler

    • netty로 어떻게 짜여져 있는가

    • zuul2(Proxy) filter 동작하는지

      • 1 http ( request 기본 처리..)

        Request from Browser

HttpServerLifecycleChannelHandler HttpServerLifecycleInboundChannelHandler.channelRead (msg) - request

HttpClientLifecycleChannelHandler HttpClientLifecycleOutboundChannelHandler.write(msg) - request

ProxyEndpoint writeClientRequestToOrigin ch.flush() ——

Remote Backend Service flow

——

HttpClientLifecycleChannelHandler HttpClientLifecycleInboundChannelHandler.channelRead(msg) - response

ZuulResponseFilter.apply(response)

HttpServerLifecycleChannelHandler HttpServerLifecycleOutboundChannelHandler.write(httpResponse) - response

Response To Browser

  • 2 File

    • Push 서비스

  • 3 Web socket

따라하기/유즈케이스/...

케이스1 - HTTP File Uploader/Downloader

케이스2 - Websocket Push Service

참고자료:

Last updated