본문 바로가기

MSA6

뭐? MSA? 메시징 시스템은 Kafka겠죠? - 06 서비스가 서비스를 호출하는 서버-클라이언트간의 네트워크 통신은 결합도가 높은 방식으로 시스템간의 의존성이 높아져 코드가 유연하지 못합니다. 그렇기 때문에 서비스간의 결합도가 낮아야 하는 MSA에서는 데이터 송수신을 비동기로 처리하는 Message Queue를 사용하는게 효율적이고, 대표적인 메시지 브로커로 Apache에서 만든 Kafka가 있습니다. Kafka Apache에서 만든 메시지 큐 시스템으로, 대용량의 데이터를 실시간으로 처리하는데 특화되어 있습니다. 메시지를 파일 시스템으로 저장하여 메시지가 유실될 우려가 적으며, Consumer가 Broker에 Pulling 방식으로 메시지를 가져오기 때문에 Consumer가 처리할 수 있는 메시지만 가져올 수 있습니다. Kafka에 대한 기본적인 개념과 .. 2021. 4. 23.
뭐? MSA? 그렇다면 서버를 찾아보자! Service Discovery. - 05 Service Discovery 지금까지 MSA를 위해 API Gateway, Circuit Breaker, Load Balancer 를 만들었었습니다. 하지만 아쉬운점이 있습니다. 그건 바로 서버의 네트워크 정보를 직접 입력해줘야 하는 것입니다. Zuul을 사용한 Gateway를 구현할 때도 application.yml에 url 정보 Hystrix을 적용하면서 사용한 RestTemplate이나 FeignClient에 사용된 url 정보 Ribbon의 서버 목록 정보 MSA환경에서 서비스는 동적으로 확장,축소되지만 이를 개발자가 서버 정보를 수정 하기는 매우 힘든 일입니다. 따라서 이러한 서버들의 정보를 동적으로 관리할 필요가 있습니다. Service Discovery는 서비스의 네트워크 정보를 Serv.. 2021. 4. 21.
뭐? MSA? 그렇다면 고가용성을 보장해보자! Load Balancer. - 04 Load Balancer MSA는 요즘과 같이 클라우드 환경에서 동작하기에 매우 적합한 아키텍처라고 생각합니다. AWS와 같은 클라우드 서버를 제공하는 서비스에서도 트래픽이 늘어날 경우 오토 스케일링이라는 작업을 해줍니다. 이처럼 MSA는 서비스의 고가용성을 위해 동일한 서비스를 여러대를 두는 Scale-out을 쉽게 할 수 있습니다. 그렇다면 여러개의 서비스 중 과연 어떤 서비스에 Request를 해야 할까요? API Gateway에서는 특정 url 경로에 맞는 서비스로 라우팅되었습니다. 그러면 동일한 서비스에서는 어떻게 각각 라우팅을 할 수 있을까요? Netflix에서 제공하는 Ribbon을 사용하면 서버 목록을 번갈아가면서 호출 할 수 있습니다. Ribbon Ribbon is a Inter Proc.. 2021. 4. 19.
뭐? MSA? 그렇다면 장애 전파를 막아보자! Circuit Breaker. - 03 Circuit Breaker MSA는 서비스에 장애가 발생할 경우 이 서비스에 종속된 다른 서비스까지 장애가 전파될 수 있습니다. Circuit Breaker는 회로차단기라는 의미로 MSA에서는 이 Circuit Breaker패턴을 사용해 위와같은 문제를 해결하였습니다. Circuit Breaker는 A라는 서비스에 장애가 발생하면 이 서비스를 호출하는 B 서비스가 A 서비스를 호출할 때 즉각적으로 호출을 끊어 스레드를 점유하지 않도록 해줍니다. Netflix는 Circuit Breaker 또한 오픈소스로 Hystrix라는 자바 라이브러리를 제공해주고 있습니다. Hystrix Hystrix is a latency and fault tolerance library designed to isolate poi.. 2021. 4. 16.
뭐? MSA? 그렇다면 다른 서비스를 호출해보자 Service Mesh. - 02 이전에는 MSA의 기본인 Gateway를 구현했습니다. 자 그러면 마이크로 서비스 답게 내부의 서비스들은 각자의 방법으로 메시지를 주고받아야 합니다. 그렇다면 어떤 방법을 사용해야 할까요? 앞에서 만든 Gateway를 사용하는 것도 하나의 방법이 될 수 있습니다. 이 방법을 사용하면 모든 트래픽을 게이트웨이에서 관리하니까 로깅같은 부분에서는 더욱 용이할거라고 생각합니다. 하지만 모든 네트워크 통신이 Gateway라는 단일 진입점을 사용하게 되면, 서비스의 트래픽이 커졌을 때, 게이트웨이의 장애가 전체 서비스의 장애가 될 수 있습니다. 이를 단일 장애점 (Single point of failure) 이라고 합니다. 따라서 각각의 서비스는 peer-to-peer 방식으로 통신이 이루어지는게 이상적인 아키텍처.. 2021. 4. 14.
뭐? MSA? 그렇다면 Zuul로 Gateway를 구현해보자. - 01 Netflix/zuul Zuul is a gateway service that provides dynamic routing, monitoring, resiliency, security, and more. - Netflix/zuul github.com Eureka, Hystrix등과 같이 Netflix OSS에 포함 된 API 게이트웨이 Zuul 1.x은 Servlet의 Blocking API를 사용되어 개발되었기 때문에 기본적으로 Blocking 방식으로 동작을 하고, 이를 보완하기 위해 Thread pool을 사용했지만, 오랫동안 연결이 유지되어야 하는 Websocket과 같은 연결을 지원하지 않았지만, Zuul 2.0부터는 Netty 기반 Non-blocking으로 동작합니다. 💡 Spring Clo.. 2021. 3. 30.