잡다한 프로그래밍 :: 잡다한 프로그래밍
반응형

1. Backpressure(배압) 현상 이란?

배압이란 데이터 생산(Producer)과 소비(Consumer)가 불균형적일 때 일어나는 현상이다.

만약 10,000개의 데이터를 0.1초마다 발행하고, 소비는 10초마다 한다면? 데이터는 스트림에 계속 쌓이게 된다.

이는 OutOfMemoryError(OOM)로 이어져 어플리케이션이 죽게 될 것이다.

이러한 현상을 배압(Backpressure)이라고 하며 RxJava에서는 배압 현상을 제어할 수 있는 방법을 제공한다.

 

2. 어디서 주로 발생?

생산자, 소비자 라는 내용이 이전 내용과 비슷하지 않은가? (대용량 처리, kafka 참고) 생산자가 reactive하게 데이터를 쌓고, 소비자가 이를 가져다가 사용하는 구조에서 주로 발생하게 된다.

※ 정리하면 non-blocking 방식으로 데이터를 보내는구조에서 발생

 

3. Backpressure를 예방하기 위한 전략

 

반응형
반응형

지인의 추천으로 메이크 타임이라는 책을 읽게 되었다.

 

이 책은 시간관리에 대한 설명을 해주는 책이다.

시간관리를 잘하고 싶은 사람들이 읽어보면 좋을 것 같다.

 

책에서 설명하고 있는내용은 다음과 같았다.

 

1. 하이라이트

- 쉽게 설명해서 오늘의 하이라이트 (가장 중요한 것)를 정하는 것 이다.

하이라이트를 정하는 방법 (직감, 글쓰기 등)은 다양하게 있고 책을 한번 읽어보는 것 을 추천한다.

 

2. 초집중

- 하이라이트를 정했으면 해당 일을 수행할 시간을 지정해 두는 것이다. 이시간에는 하이라이트를 제외한 다른일을 할 수 없게 한다.

 

3. 돌아보기

- 오늘의 하루를 돌아보는 것, 쉽게 말해 내가 정한일을 얼마나 잘 수행했는지 등 되돌아보는 시간

 

4. 에너지 회복

- 내일도 1, 2, 3 번의 단계를 수행할 수 있도록 회복하는 단계이다.

 

이런식으로 시간 관리하는 방법을 제시한다. 간단하게 정리하다보니 이정도는 책을 읽지 않아도 누구나 알 수 있는게 아닐까? 하지만, 책에서 제시하는 작은 차이들이 꽤 도움이 된다 (시계설정, 유튜브 SNS 절제 등)

 

내가 시간관리를 잘 하고 싶다면 한번쯤 추천하는 책이다.

반응형

'일상 > 독서' 카테고리의 다른 글

[독서] - 도파민네이션  (0) 2023.12.06
[독서] - 원띵  (0) 2023.12.06
[독서] 창업가의 특성  (0) 2023.08.17
[독서] 클루지  (0) 2023.06.27
[독서] - 포커스 리딩  (0) 2023.06.20
반응형

관심있는 분야이다보니 해당 책을 읽게 되었다.
해당 책은 저자가 생각하는 방법을 나열해 두었기에 요약하는편이 좀 더 어울리다고 생각해서 정리하게 되었다.

책에서 하고자하는 말은, 단순하게 어떤식으로 행동해야 창업에 성공할 수 있는지이다. 책 제목처럼 심플하다.
내가 가장 기억에 남았던 내용을 정리하자면 아래와 같다.

1. 먼저 해야 성공한다.
- A는 이래서 안돼, B는 이부분이 부족하네.. C는 등등 이런 잡다한 고민보다 일단 팔아보는게 더 중요하다는 내용이다.
- 시장에서의 가치는 내가 판단하는게 아니기 때문에, 일단 하나라도 판매(시도)를 해보는게 더 중요하다고 한다.

2. 직장에서의 성공경험과, 창업은 다르다.
- 직장에서 성공한 사람들이 가장 많이 오해하는 것 중 하나라고 한다.

3. 마케팅 2.0 > 3.0으로의 전환
- 마케팅 방법을 바꾸라는 내용인데 소비자 중심의 마케팅을 했다면, 3.0은 소비자에서 나아가 세상을 더 나은바향으로 바꾸자 하는데 힘쓴다.
- 책이 아닌 개인적인 서칭으로는 4.0 까지 존재하는것 같다.

가끔은 이런 다른주제의 책을 읽어보는것도 도움이 되는 것 같다.

반응형

'일상 > 독서' 카테고리의 다른 글

[독서] - 원띵  (0) 2023.12.06
[독서] - 메이크 타임  (1) 2023.11.04
[독서] 클루지  (0) 2023.06.27
[독서] - 포커스 리딩  (0) 2023.06.20
역행자 - 자청  (1) 2023.02.16
반응형

이전 자청 책을 읽고 궁금한 책이기도 했고, 회사 1층 추천서에 이 책이 있어서 읽게 되었다.
먼저 클루지란 어떤 문제에 대해 서툴거나 세련되지 않은 해결책을 뜻한다. (하지만 잘 굴러가기는 하는 그런 상황)
쉽게 정리하면 어찌어찌 해결은 잘 되는데, 방법이 깔끔하지 않은 그런 상황을 뜻한다.

이러한 일이 왜 생겼을까? 인류는 결국 생존하기 위해서 클루지 방식대로 진화했기 때문이라고 한다.
그럼 이러한 방식이 최고의 방법일까? 이 책에서 말하고자 하는 내용이 이 내용이라고 생각한다.

결국 우리는 이러한 클루지를 인지하고 더 나은 방법을 찾아야 한다.

책에서 예시로 보여주는 클루지는 다음과 같다.

1. 인간의 기억 체계는 생각보다 허술하다.
- 인간의 기억 방법이 컴퓨터보다 좋은 점, 나쁜 점을 예시로 들며 설명하지만 결국 우리 기억은 100% 신뢰할 수 없다.

2. 신념은 쉽게 오염될 수 있다.

3. 피로하거나 마음이 산란할 때는 되도록 중요한 결정을 내리지 말 것

이외에도 책에서 여러 클루지 예시를 들어주고 있어서 책을 읽고 확인해 보면 좋을 것 같다.
책 자체는 많이 두껍고, 지루한 편이지만 신선한 내용들이 중간중간 숨어있어서 한 번쯤 읽어보길 추천한다

반응형

'일상 > 독서' 카테고리의 다른 글

[독서] - 원띵  (0) 2023.12.06
[독서] - 메이크 타임  (1) 2023.11.04
[독서] 창업가의 특성  (0) 2023.08.17
[독서] - 포커스 리딩  (0) 2023.06.20
역행자 - 자청  (1) 2023.02.16
반응형

팀장님의 추천으로 `포커스 리딩`이라는 책을 읽게 되었다.

항상 책읽는건 좋은거야, 중요해 라고 생각은 했지만 어떻게 책을 읽어야 도움이 되는지는 잘 몰랐기에 재미있게 읽어볼 수 있었다.

책에서는 독서의 장점을 계속해서 설명한다. 책은 경험을 싼 값에 살 수 있는 것, 만날 수 없는 대상의 강의를 듣는 것 등 비유해가며 설명하는데

결국 이러한 독서를 어떻게 효율적으로 읽을 수 있는지가 주 내용이다.

5가지로 책에서는 단계를 정의하고있다.

1. 마인드셋
- 나는 할 수 있다는 마음가짐을 가지는 마인드셋 단계

2. 속도 뛰어넘기
- 집중력을 향상시키는데 도움이 되고, 본인이 필요로 하는 핵심을 빠르게 뽑아낼 수 있게 훈련하는 단계 이다.

3. 스킵 & 스캐닝
- 핵심이 아닌 부분은 빠르게 스킵하고, 보다 빠르게 스캐닝하는 훈련이다.

4. 핵심단어 뽑아내기
- 자기만의 핵심을 뽑아낼 수 있게 훈련하는 단계이다.
- 핵심 3가지가 하나의 결론을 나타낸다고 책에서는 말하고 있으며, 이러한 훈련은 일상에도 도움이 될 것 이다

5. 질문하기
- 스스로 끊임없이 질문하는단계
- 이 책에 핵심을 정확하게 파악했는지 스스로에게 질문하는 단계 질문을 하면 할 수록 더 좋은 답에 도달할 수 있다.


책 읽기를 좋아하거나, 책 읽기를 시작해보려는 누군가가 있다면 해당 독서를 추천한다.

반응형

'일상 > 독서' 카테고리의 다른 글

[독서] - 원띵  (0) 2023.12.06
[독서] - 메이크 타임  (1) 2023.11.04
[독서] 창업가의 특성  (0) 2023.08.17
[독서] 클루지  (0) 2023.06.27
역행자 - 자청  (1) 2023.02.16
반응형

1. 카프카의 기본 구성

카프카는 데이터를 받아서 전달하는 데이터 버스의 역할을 한다. (이전 MQ와 동일한 형태)

그리고 주키퍼는 카프카의 정상 동작을 보장하기위해 메타데이터를 관리한다.

 

앞서 설명한 Message Queue처럼, producer는 카프카에 메세지를 전달하고, consumer는 카프카에서 메세지를 꺼내간다.

이때 이 카프카에 대한 설정은 주키퍼에서 담당한다.

 

2. 카프카의 기본 개념

  • 브로커: 카프카가 설치되 서버, 또는 노드를 의미함
  • 프로듀서: 카프카로 메세지를 보내는 역할을 하는 클라이언트
  • 컨슈머: 카프카에서 메세지를 꺼내가는 역할을 하는 클라이언트
  • 토픽: 카프카는 메시지 피드들을 토픽으로 구분, 각 토픽은 카프카내에서 고유함
  • 파티션: 병렬 처리 및 고성능을 얻기 위해 하나의 토픽을 여러개로 나눈 것을 말함
  • 세그먼트: 프로듀서가 전송한 실제 메시지가 브로커의 로컬 디스크에 저장되는 파일을 말함
  • 메세지: 프로듀서가 브로커로 전송하고나, 컨슈머가 읽어가는 데이터를 의미함
  • 주키퍼(ZooKeeper): 카프카의 메타데이터 관리 및 브로커의 정상상태 점검(health check)을 담당합니다

 

토픽(TOPIC)

- producer가 실제로 보내는 메세지가 담기는 곳

- 하나의 토픽에 여러 프로듀서들이 메세지를 전송할 수 있고, 여러 컨슈머가 하나의 토픽에서 데이터를 읽어올 수 있다.

- 토픽을 효율적으로 관리하기위해, 토픽은 여러 파티션으로 구성되어야한다

 

파티션

여러프로듀서 A, B, C가 같은 'TOPIC1'에 데이터를 전송했다고 가정해보자.

토픽에 파티션이 1개라면 프로듀서 A, B, C가 보내는 데이터는 해당 파티션이 모두 감당해야한다.

이 경우 하나의 데이터 전송 완료 이후, 다음 메세지 전송이 가능해지면서 전송 속도에 영향을 미친다.

 

- 파티션을 여러개로 늘려 하나의 토픽을 병렬 처리할 수 있도록 한다.

 

▶ 적절한 파티션의 수는 어떻게 정할 수 있을까?

파티션의 수는 초기 생성 후 언제든 늘릴 수 있지만, 다시 줄일 수 없음

따라서 파티션수를 작게, 2개 혹은 4개 정도로 생성한 후, 메시지 처리량이나 컨슈머의 LAG(카프카의 남아있는 메시지수)를 보고 늘려 가는 방법이 가장 좋다.

https://eventsizer.io 를 참고해 적절한 파티션 수를 산정할 수도 있다 (참고용)

 

추가

파티션간에는 순서보장 X, 같은 파티션내에서는 순서보장O

그래서 토픽에 메세지 전달할땐 키값을 같이 전달해서 같은 파티션에 저장해서 순서보장을 하거나 하는식으로 사용가능

 

파티션 오프셋

파티션내의 메세지의 위치를 의미

세그먼트

프로듀서가 hello my name is A라는 메세지가 "TOPIC1" 에 파티션 0에 저장되었다면 해당 메시지는 어떻게 저장되고 있을까?

바로 파티션0에 세그먼트 라는 로그 파일의 형태로 브로커의 로컬 디스크에 저장된다.

해당 로그파일을 확인하고 싶다면 /data/kafka-logs/에서 확인할 수 있다.

 

리플리케이션

리플리케이션이란, 각 메시지들을 여러개로 복제해서 카프카 클러스터내 브로커들에게 분산시키는 동작을 의미한다.

이러한 리플리케이션 동작덕분에 하나의 브로커가 종료되더라도 카프카는 안정성을 유지할 수 있다.

 

위 그림은 'Topic1'을 리플리케이션 팩터 3으로 설정한 후 각 브로커에 배치된 상태이다.

그림에 나타난대로, 'Topic1'은 원본을 포함해 총 3개가 있다. (정확하게는 토픽이 리플리케이션이 되는것이 아니라 파티션이 리플리케이션 된다)

 

▶ 적절한 리플리케이션 팩터 수는 어떻게 정할 수 있을까?

리플리케이션 팩터수가 커지면 안정성은 높아지지만, 브로커의 리소스를 많이 사용하게 된다. (저장하는 양이 많아지니까)

테스트나 개발환경 = 리플레이션 팩터 수 1

운영 환경 (로그성 메시지로 약간의 유실 허용): 리플리케이션 팩터 수 2

운영 환경 (유실 허용 X) 리플리케이션 팩터 수 3

 

※ 실전 카프카 개발부터 운영까지 고승범 작가에 의하면, 리플리케이션 팩터 수 3정도면 충분하게 안정성 보장과, 적절한 디스크 공간을 사용할 수 있다고 한다. 더 늘어날 경우 디스크 공간을 많이 사용할 수 있음을 인지하도록 하자.

 

실제 카프카를 사용하기 전, 개념 정리를 완벽하게 하고 가도록 하자.

반응형
반응형

- 앞서 공부한 MQ중 널리 사용되는 kafka를 설치하고 공부하도록 할 예정이다.

- AWS, 온프레미스 방식을 이용해도 되지만. 간단하게 도커, 도커 컴포즈를 이용하여 설치하도록 할 예정이다.

 

- 주키퍼3, 카프카3 형태의 클러스터 설치 방법을 공유할 예정이다.

주키퍼 = 과반수 방식을 유지해야하므로 홀수 구성 필요(Elasticsearch 클러스터 구성과 유사)

카프카 = 과반수 방식이 아니라 반드시 3대를 만들 필요는 없지만, 리플리케이션 팩터 수를 3을 충족시키기 위해 최소 3대의 클러스터 구조로 구성한다

 

1. 도커 설치 방법

# docker 리포지토리에 접근하기 위한 키 생성 설정
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

# 패키지 매니저가 docker 설치 시, 설치 위치를 알기 위한 repository 추가
sudo add-apt-repository \ 
 "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" 

# 위에서 추가한 repository를 위해서 업데이트!
sudo apt update

# docker 설치
sudo apt install docker-ce

sudo systemctl status docker

2. 도커 컴포즈 설치 방법

sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
chmod +x /usr/bin/docker-compose

docker-compose -v

 

3. kafka 설치 방법

git clone https://github.com/onlybooks/kafka2

cd kafka2/appendix_C/cluster_zk_kafka/

docker-compose up -d

4. 설치 완료 확인

docker ps 명령어로 kafka1,2,3 zk1,2,3이 동작중인지, status 가 up인지 확인한다.

 

http://{{IP}}:9000/ 로 접속하면 CMAK를 확인할 수 있다.

해당 CMAK에서  아래와 같이 클러스터를 등록하면 된다.

반응형
반응형

1. Message Queue 란?

- 메시지 큐(Message Queue)는 프로세스 또는 프로그램 간에 데이터를 교환할 때 사용하는 통신 방법 중에 하나로, 메시지 지향 미들웨어(Message Oriented Middleware:MOM)를 구현한 시스템을 의미한다. 메시지 지향 미들웨어란 비동기 메시지를 사용하는 응용 프로그램들 사이에서 데이터를 송수신하는 것을 의미한다. 여기서 메시지란 요청, 응답, 오류 메시지 혹은 단순한 정보 등의 작은 데이터가 될 수 있다.

1. 메시지 전송 시 생산자(Producer)로 취급되는 컴포넌트가 메시지를 메시지 큐에 추가한다.

2. 해당 메시지는 소비자(Consumer)로 취급되는 또 다른 컴포넌트가 메시지를 검색하고 이를 사용해 어떤 작업을 수행할 때까지 메시지 큐에 저장된다.

3. 각 메시지는 하나의 소비자에 의해 한 번만 처리될 수 있는데, 이러한 이유로 메시지 큐를 이용하는 방식을 일대일 통신이라고 부른다.

 

Message Queue는 언제쓰나요?

  • 메시지 큐는 소비자(Consumer)가 실제로 메시지를 어느 시점에 가져가서 처리하는 지는 보장하지 않는다.
  • 언젠가는 큐에 넣어둔 메시지가 소비되어 처리될 것이라고 믿는 것이다.
  • 이러한 비동기적 특성 때문에 메시지 큐는 실패하면 치명적인 핵심 작업보다는 어플리케이션의 부가적인 기능에 사용하는 것이 적합하다.

1. 비동기 작업이 필요한 서비스

이메일전송
나는 이미 이메일을 전송했고, 실제 받는 사람이 읽을 때까지 시간은 걸리겠지만, 해당 작업이 완료처리 될 것을 우리는 알고있다.
바로 실시간으로 처리되지 않아도 서비스에 크게 문제 없는 이런 작업에 MQ를 사용할 수 있다.
즉, MQ는 어느 정도의 응답 지연이 허용되며, 어플리케이션의 핵심 기능은 아닌 경우에 사용하는 것이 적합하다.

 

2. 시스템 간 통신

서버 간 데이터를 주고 받거나 작업을 요청할 때, 시스템 장애를 생각해야한다.

MQ를 사용할 경우 이러한 처리를 간편하게 할 수 있다.

\

- P는 C에 직접 요청하는것이 아닌, MQ에 메세지를 전달한다.

- C는 MQ를 구독하고 MQ로부터 데이터를 수신하여 처리한다.

 

- C가 데이터를 수신할 수 없는 상황이더라도, 데이터는 보장된다 (C가 복구된 후 다시 수신 가능)

- C의 데이터처리 TPS에 맞는 속도로 데이터를 처리할 수 있다. (구현이 쉬워짐)

 

3. 서버 부하가 많은 작업 (2번과 같은 구조)

- 이미지 처리, 비디오 인코딩, 빅데이터 등 대용량 데이터 처리와 같은 작업은 메모리, CPU를 많이 사용한다.

이러한 작업은 동시에 처리할 수 있는 양이 한정적이므로 MQ를 사용하여 서버가 처리할 수 있는 양을 가져와 처리할 수 있다.

 

4. 부하분산

- 부하를 분산 하여 처리할 수 있다. 여러 C(Customer)를 배치해, 원하는 메세지(데이터)의 처리가 가능하다.

- 해당 구조는 수평구조이기 때문에 수평적 확장에 유리하다 (C를 늘리는 구조)

message queue 장점

  • 비동기(Asynchronous)
    • 메시지 큐는 생산된 메시지의 저장, 전송에 대해 동기화 처리를 진행하지 않고, 큐에 넣어 두기 때문에 나중에 처리할 수 있다.
    • 여기서, 기존 동기화 방식은 많은 메시지(데이터)가 전송될 경우 병목이 생길 수 있고, 뒤에 들어오는 요청에 대한 응답이 지연될 것이다.
  • 낮은 결합도(Decoupling)
    • 생산자 서비스와 소비자 서비스가 독립적으로 행동하게 됨으로써 서비스 간 결합도가 낮아진다.
  • 확장성(Scalable)
    • 생산자 서비스 혹은 소비자 서비스를 원하는 대로 확장할 수 있기 때문에 확장성이 좋다.
  • 탄력성(Resilience)
    • 소비자 서비스가 다운되더라도 어플리케이션이 중단되는 것은 아니다. 메시지는 메시지 큐에 남아 있다. 소비자 서비스가 다시 시작될 때마다 추가 설정이나 작업을 수행하지 않고도 메시지 처리를 시작할 수 있다.
  • 보장성(Guarantees)
    • 메시지 큐는 큐에 보관되는 모든 메시지가 결국 소비자 서비스에게 전달된다는 일반적인 보장을 제공한다.
반응형

+ Recent posts