Backend (49) 썸네일형 리스트형 카프카란 무엇인가? 카프카의 탄생 배경카프카는 미국의 대표적인 소셜 네트워크 서비스인 링크드인에서 처음 시작된 기술로, 링크드인 서비스가 급속도로 성장하면서 발생하게 된 여러 이슈들을 해결하기 위해 탄생했다. 링크드인 서비스가 성장하면서 어떤 상황에서 어떤 새로운 시스템에 대한 개발 요구가 높아졌길래 카프카가 탄생하게 된 것일까? 다음 그림은 카프카가 개발되기 전 링크드인의 시스템 구성도이다. 카프카 등장 전에는 각 서비스가 엔드투엔드로 연결되어 있었다. 이러한 엔드투엔드 연결 방식의 아키텍처는 많은 문제점이 있었다.첫 번째로, 통합된 전송 영역이 없으니 시스템 복잡도가 증가할 수밖에 없다. 따라서 문제를 발견하기 위해서는 이와 관련된 여러 데이터 시스템을 확인해야 했다.두 번째로, 데이터 파이프라인 관리의 어려움이다. .. 스프링 스케줄러(@Scheduled) 사용 시 주의사항 1. 여러 스케줄링 작업이 있을 때 싱글 스레드로 인한 문제* 참고: https://olsohee.tistory.com/239 스프링은 스케줄링 작업을 위한 TaskScheduler라는 인터페이스를 제공하고, 구현체로는 다음 두가지가 사용된다.가상 스레드가 활성화된 경우(Java 21 이상 및 spring.threads.virtual.enabled가 true로 설정된 경우), SimpleAsyncTaskScheduler가상 스레드가 활성화되지 않은 경우, ThreadPoolTaskScheduler그리고 ThreadPoolTaskScheduler는 기본적으로 하나의 스레드를 사용하며, spring.task.scheduling을 통해 설정 값을 변경할 수 있다. If virtual threads are en.. 레디스에서 다중 명령에 대한 원자성을 보장하는 방법 레디스는 싱글 스레드로 동작하므로 동시성 제어를 위한 복잡한 설계와 오버헤드가 적다. 그러나 싱글 스레드는 parallel 할 수 없는 것이지 concurrent 할 수 있다. 즉, 여러 레디스 클라이언트가 있고, 각 클라이언트가 여러 개의 명령을 한 번에 보낸다면, 레디스의 싱글 스레드는 여러 클라이언트들의 명령을 번갈아 하나씩 실행하게 되며 동시성 문제가 발생할 수 있다. 이를 방지하기 위해 크게 Redis Transaction과 Lua Script 2가지를 사용할 수 있다.Redis Transaction트랜잭션은 주로 관계형 데이터베이스에서 많이 쓰이는 용어인데, 레디스에서도 트랜잭션을 사용할 수 있다. 레디스에서 트랜잭션을 사용하면 여러 개의 커맨드에 대해 원자성이 보장된다. 따라서 concurr.. @Async, @Scheduled의 스레드에 대해 비동기 작업을 위한 스레드스프링은 비동기 작업을 위한 TaskExecutor라는 인터페이스를 제공한다. 스프링의 TaskExecutor 인터페이스는 자바의 Executor 인터페이스와 동일하다. 그리고 스프링이 제공하는 TaskExecutor의 구현체는 다음과 같다.SyncTaskExecutorSimpleAsyncTaskExecutorConcurrentTaskExecutorThreadPoolTaskExecutorDefaultManagedTaskExecutor...@EnableAsync의 JavaDoc을 살펴보면 다음과 같이 설명되어 있다.By default, Spring will be searching for an associated thread pool definition:* either a uniqu.. 도커 네트워크 네트워크에서 IP 주소의 고갈을 막기 위해 사설 IP와 공인 IP를 나누는 NAT이라는 개념이 등장했다. 도커에서도 이와 유사하게 하나의 컴퓨터에서 여러 개의 컨테이너를 구동하는 경우, 각 컨테이너마다 IP 주소가 할당되는데, 이 IP 주소는 도커가 설치된 호스트 내에서만 쓸 수 있는 IP로 외부와의 통신이 불가능하다. 그러면 각 컨테이너는 어떻게 외부와의 네트워크 통신이 가능한 걸까? eth0호스트의 eth0은 실제 우리가 외부와 연결할 때 사용하는 호스트 네트워크 인터페이스이다.컨테이너 안에 eth0은 veth 가상 인터페이스를 통해 외부와 통신할 수 있게 되는 것이다.veth컨테이너가 시작될 때마다 호스트에 veth(virtual eth)라는 가상의 네트워크 인터페이스가 생성된다.컨테이너가 외부와 .. 도커 알아보기 하나의 컴퓨터 위에서 여러가지 응용 프로그램을 실행시키고 싶을 수 있다. 이는 운영체제도 마찬가지이다. 맥 위에서 윈도우를 실행시키고 싶을 수도 있고, 반대로 윈도우 위에서 리눅스를 실행시키고 싶을 수도 있다. 동시에 여러가지를 실행시키는 가장 단순한 방법으로, 하드웨어를 여러 개 사서 하나에 하나씩 돌리는 무식한 방법이 있다. 그러면 하드웨어에 상관없이 하나의 하드웨어 위에 여러 개의 응용 프로그램을 돌리는 방법을 알 수 있다면 모든 것이 해결되지 않을까? 따라서 하나의 컴퓨터 자원을 마치 여러 개인 것처럼 가상으로 쪼개서 사용할 수 있도록 하는 가상화 기술이 필요하다.가상화가상화 기술은 하나의 물리적 하드웨어에서 여러 개의 논리적 가상 시스템을 생성하고 관리하는 기술이다. 이를 통해 하나의 물리적 하.. 센티널 로컬과 도커에 적용해보기 로컬에 적용이전 글에서 레디스의 복제와 센티널에 대해 알아봤다. 이번 글에서는 이들을 로컬 환경과 도커 환경에서 직접 적용해보자. 우선 로컬에 적용해보자. 레디스 서버는 다음과 같다.마스터: 6379 포트슬레이브: 6380 포트그리고 레디스 센티널 서버는 다음과 같다.센티널 서버 1: 26379 포트센티널 서버 2: 26380 포트센티널 서버 3: 26381 포트레디스 서버 띄우기(복제 환경)우선 복제 환경을 구성하기 위해 레디스 마스터와 슬레이브 서버를 띄워보자. /etc/redis 경로에 다음 두 개의 파일을 만들어뒀다. sudo nano /etc/redis/master.confsudo nano /etc/redis/slave.confmaster.confport 6379masterauth 1234re.. 레디스 복제(Replication)와 센티널(Sentinel) 고가용성가용성이란 일정 기간 동안 서비스를 정상적으로 사용할 수 있는 시간의 비율을 뜻하며, 이 값이 클수록 가용성이 높다고 한다. 서비스를 안정적으로 운영하기 위해서는 가용성을 높일 수 있는 방안을 도입해야 한다. 레디스는 고가용성을 확보하기 위해 다음 두 가지 기능을 제공한다.복제: 마스터 노드의 데이터를 복제본 노드로 실시간 복사하는 기능이다. 따라서 마스터 노드의 서버에 장애가 생겨 데이터가 유실된다고 해도 복제본 노드에서 데이터를 확인할 수 있다.자동 페일오버: 마스터 노드에서 발생한 장애를 감지해 레디스로 들어오는 클라이언트 연결을 자동으로 복제본 노드로 리다이렉션하는 기능이다. 따라서 마스터 노드의 서버에 장애가 발생했을 때 빠른 조치가 가능하다.복제(Replication)복제를 하는 이유.. 이전 1 2 3 4 ··· 7 다음