Operation/System Architecture 27

카프카란 무엇인가? (+카프카 구성요소)

카프카(Kafka)란? 카프카(Kafka)는 Pub-Sub 모델의 메시지 큐의 한 종류이다. 2011년 미국 링크드인(Linkedin)에서 개발했다. 더 자세히 살펴보자. 다음은 카프카 개발 전 링크드인의 데이터 처리 시스템이다. 기존 링크드인의 데이터 처리 시스템은 각 파이프라인이 파편화되고 시스템 복잡도가 높아서 새로운 시스템을 확장하기 어려웠다. 이로 인해 새로운 시스템의 개발 필요성이 높아졌고, 다음과 같은 목표를 가지고 새로운 시스템을 개발했다. 프로듀서와 컨슈머의 분리 메시징 시스템과 같이 영구 메시지 데이터를 여러 컨슈머에게 적용 높은 처리량을 위한 메시지 최적화 트래픽 증가에 따른 스케일아웃이 가능한 시스템 다음은 카프카를 적용한 후 링크드인의 데이터 처리 시스템이다. 한 눈에 보기에도 훨..

다중 서버에서 Session 관리하는 방법! (Multi-server session)

다중 서버 Session 관리 요즘은 서버의 성능을 업그레이드 하는 방법으로 스케일 아웃을 많이 사용한다. 그리고, 쿠버네티스의 여러 개의 POD에 각각 올려서 관리하기도 한다. 일반적인 멀티 서버의 환경은 아래와 같다. 가령, 스프링 부트 프로젝트를 분산 서버로 배포하고있다고 가정하자. 일반적으로 Tomcat이 JSESSIONID라는 세션을 만들어서 관리한다. 세션 저장소는 Tomcat 내부에 있으므로 여러개의 톰캣이 뜨게되면 각각이 가지는 세션 저장소는 다르다. 그러면 WAS1에서 세션을 생성한 사용자가 WAS2로 접속했을 때 세션을 찾을 수 없는 현상이 발생한다. Sticky Session Sticky Session 방식을 사용하면 WAS1에서 세션을 생성한 사용자는 다시 접속할 떄도 WAS1로 접..

메시징 시스템(Messaging System) 정리!

MSA 요즘 MSA가 대두되면서 Kafka, RabbitMQ, ActiveMQ 등 메시징 시스템도 함께 떠오른다. MSA에서는 시스템 간 호출이 많기 때문에 서비스간 결합도를 낮추기 위해서 + 비동기 요청, 성능, 안정성 등 여러가지 이점이 있어서 메시징 시스템을 많이 사용하게 된다. 이 글에서는 MSA에서의 전반적인 메시징 시스템에 대해 다룬다. 용어 MOM (Message Oriented Middleware, 메시지 지향 미들웨어) 독립된 애플리케이션 간 데이터를 주고받을 수 있는 설계 함수 호출, 메모리 공유가 아닌 메시지 교환을 이용하는 중간 계층 Infra Architecture 분산 컴퓨팅이 가능해지며, 서비스간의 결합도가 낮아진다. 비동기로 메시지를 전달한다. Queue, Broadcast,..

대규모 서비스 - CDN을 사용하는 이유

캐시(Cache) 캐시 계층은 데이터가 잠시 보관되는 곳으로 별도의 캐시 계층을 이용해서 DB 서버나 웹 서버의 부하를 줄일 수 있습니다. 과정을 요약하면 이렇습니다. 원하는 페이지에 요청을 보냄 key를 이용해서 필요한 캐시를 가져옴 -> cache.get('key') 캐시가 존재하면 데이터를 그대로 사용하고, 그렇지 않으면 새로 서버에서 데이터를 읽고 캐시에 저장함 -> cache.set('key', 'content', expired) 따라서 아래와 같은 점들을 고려해야 합니다. 데이터 갱신은 자주 일어나지 않지만 참조는 빈번해야 함 휘발성이기 때문에, 데이터를 보관하는 역할을 하여선 안됨 (ex. 사용자 정보를 보관하는 경우 X) 장애 대처를 위해 캐시 서버는 분산되어야 함 CDN(Content D..

Cron vs Event scheduler 장단점 정리!

Cron Cron은 특정 시간에 특정 작업을 하는 작업을 말합니다. 대표적으로 리눅스의 cron을 사용하는 방법, Spring Scheduling, Node-cron 등이 있습니다. Event scheduler DB에서 정기적으로 특정 시간에 특정 작업을 수행시킬 수도 있습니다. MySQL의 Event scheduler, Oracle scheduler 등이 있습니다. Cron vs Event scheduler 그럼 두 가지 중에 어떤걸 선택해야 할까요? Cron 예상하기 쉬운 위치에 있음 원하는 플랫폼 사용 가능 웹서버와 DB의 역할을 분리할 수 있음 Cron의 경우에는 예상하기 쉬운 위치에 있습니다. Event scheduler의 경우에는 나중에 프로젝트를 인수인계할 때라던지 다른 개발자분이 존재유무나..

대규모 서비스 - I/O 부하 (느려졌다고 무조건 서버 증설? No!)

부하 종류 일반적으로 부하는 크게 두 가지로 분류됩니다. CPU 부하 I/O 부하 CPU 부하는 무언가를 계산할 때 일어나는 부하를 말합니다. CPU 부하의 규모조정은 간단합니다. 같은 구성의 서버를 늘리고, 로드밸런서로 분산을 시키면 됩니다. 반면, I/O 부하의 규모조정은 어렵습니다. I/O 부하란, 입력, 출력에 생기는 부하를 말합니다. 예를 들어, DB에 접근할 때 DB의 레코드 데이터를 출력하거나, DB에 데이터를 입력할 때 생기는 부하입니다. (I/O 부하를 해결하기 위해서 각 OS마다 캐시를 이용해서 메모리를 추상화 합니다.) 부하 파악 sar 명령어(sar command)로 CPU 사용률과 I/O 대기율을 확인할 수 있습니다. %user는 사용자 모드에서의 CPU 사용률이고, %system..

서버리스(Serverless)란 무엇인가?

서버리스란 ? 서버리스(Serverless)는 직역하면 "서버가 없다"라는 뜻입니다. 하지만, 서버가 없는 것은 아니고, 서버를 직접 관리할 필요가 없는 아키텍처를 뜻해서 서버리스 아키텍처(Serverless Architecture)라고 부르는 것 같습니다. 서버가 필요 없다는 뜻은 아니다! 서버를 관리하거나 신경 쓸 필요가 없다는 뜻 나노 수준의 함수로 구성된다. 서버리스 아키텍처의 구현 방식 서버리스 아키텍처의 대표적인 두 가지 구현 방식은 아래와 같습니다. BaaS (Backend as a Service) : Firebase, Kinvey, Parse ... 등 FaaS (Function as a Service) : AWS Lambda, Azure Functions, Google Cloud Func..