분류 전체보기
-
Open files 확인 maxclients 레디스 프로세스에서 받아들일 수 있는 최대 클라이언트의 개수 기본 값 : 10,000 서버의 파일 디스크럽터 수에 영향을 받는다 현재 서버의 파일 디스크럽터 수 확인 커맨드 $ ulimit -a | grep open 해당 설정을 수정하는 방법 /etc/security/limits.conf THP 비활성화 리눅스는 메모리를 페이지 단위로 관리하며, 기본 페이지는 4096 바이트(4KB)로 고정돼 있다. 메모리 크기가 커질수록 페이지를 관리하는 테이블인 TLB의 크기도 커져 메모리를 사용할 때 오버헤드가 발생하는 이슈로 인해 페이지를 크게 만든 뒤 자동으로 관리하는 THP(transparent huge page) 기능이 도입됐다. 하지만, 레디스와 같은 데이터베이..
[Redis] Redis 환경 구성(서버 설정 변경)Open files 확인 maxclients 레디스 프로세스에서 받아들일 수 있는 최대 클라이언트의 개수 기본 값 : 10,000 서버의 파일 디스크럽터 수에 영향을 받는다 현재 서버의 파일 디스크럽터 수 확인 커맨드 $ ulimit -a | grep open 해당 설정을 수정하는 방법 /etc/security/limits.conf THP 비활성화 리눅스는 메모리를 페이지 단위로 관리하며, 기본 페이지는 4096 바이트(4KB)로 고정돼 있다. 메모리 크기가 커질수록 페이지를 관리하는 테이블인 TLB의 크기도 커져 메모리를 사용할 때 오버헤드가 발생하는 이슈로 인해 페이지를 크게 만든 뒤 자동으로 관리하는 THP(transparent huge page) 기능이 도입됐다. 하지만, 레디스와 같은 데이터베이..
2024.03.19 -
레디스란? Remote dictionary server의 약자 고성능 키-값 유형의 인메모리 NoSQL 데이터베이스로, 오픈 소스 기반의 데이터 저장소 레디스 특징 실시간 응답(빠른 성능) in-memory database 단순성 키-값 형태로 데이터를 관리 싱글 스레드로 동작 (이벤트 루프) (메인 스레드 1개, 별도의 스레드 3개) 고가용성 자체적으로 HA(high availabilty) 기능을 제공 복제를 통해 데이터를 여러 서버에 분산 확장성 클러스터 모드 가능 레디스 설치 리눅스에 레디스를 설치하는 방법은 두 가지가 있다 패키징 파일을 설치 빠르고 간편하게 설치 가능 redis와 관련된 파일이 여러 군데에 흩어져 저장되어서 관리가 어려울 수 있다 인터넷에 연결되지 않은 서버에서는 불가능한 설치 ..
[Redis] Redis 설치(in Linux)레디스란? Remote dictionary server의 약자 고성능 키-값 유형의 인메모리 NoSQL 데이터베이스로, 오픈 소스 기반의 데이터 저장소 레디스 특징 실시간 응답(빠른 성능) in-memory database 단순성 키-값 형태로 데이터를 관리 싱글 스레드로 동작 (이벤트 루프) (메인 스레드 1개, 별도의 스레드 3개) 고가용성 자체적으로 HA(high availabilty) 기능을 제공 복제를 통해 데이터를 여러 서버에 분산 확장성 클러스터 모드 가능 레디스 설치 리눅스에 레디스를 설치하는 방법은 두 가지가 있다 패키징 파일을 설치 빠르고 간편하게 설치 가능 redis와 관련된 파일이 여러 군데에 흩어져 저장되어서 관리가 어려울 수 있다 인터넷에 연결되지 않은 서버에서는 불가능한 설치 ..
2024.03.15 -
기존에 잘 동작하던 서비스의 java version을 upgrade시키고 난 이후에 에러가 발생하게 되었다. java 8 -> java 11 에러 내역 버전 업 이후에 thread 개수가 너무 많이 증가하여 out of memory 발생 Caused by: java.lang.OutOfMemoryError: unable to create native thread: possibly out of memory or process/resource limits reached at java.base/java.lang.Thread.start0(Native Method) at java.base/java.lang.Thread.start(Unknown Source) at java.base/java.util.concurren..
[Java] ForkJoinPool 에러 발생 in Java11기존에 잘 동작하던 서비스의 java version을 upgrade시키고 난 이후에 에러가 발생하게 되었다. java 8 -> java 11 에러 내역 버전 업 이후에 thread 개수가 너무 많이 증가하여 out of memory 발생 Caused by: java.lang.OutOfMemoryError: unable to create native thread: possibly out of memory or process/resource limits reached at java.base/java.lang.Thread.start0(Native Method) at java.base/java.lang.Thread.start(Unknown Source) at java.base/java.util.concurren..
2024.03.11 -
기존의 Monolithic 방식에서 MSA로 전환되면서 독립성, 확장성과 같은 많은 이점을 얻었다. 하지만, MSA를 적용하며 겪는 단점도 존재한다. 서비스가 분산되어 있어, 서비스 간 통신에 복잡성 증가 장애 추적 및 모니터링에 대한 어려움 Service Discovery : callee 서비스의 논리적, 물리적 위치가 변경되었을 때 caller에서 찾는데 어려움 Circuit breaking : callee 서비스의 문제가 있을 때, caller 서비스에 해당 장애가 전파되지 않도록 하기 위한 추가적인 노력 필요 이러한 단점들을 극복하기 위해서는 MSA 서비스들은 서비스 간 커뮤니케이션을 통제하는 추가적인 로직이 필요하게 된다. 이러한 작업들을 각각의 서비스에 중복으로 넣지 않고 인프라에서 해당 작업..
[MSA] Service Mesh란기존의 Monolithic 방식에서 MSA로 전환되면서 독립성, 확장성과 같은 많은 이점을 얻었다. 하지만, MSA를 적용하며 겪는 단점도 존재한다. 서비스가 분산되어 있어, 서비스 간 통신에 복잡성 증가 장애 추적 및 모니터링에 대한 어려움 Service Discovery : callee 서비스의 논리적, 물리적 위치가 변경되었을 때 caller에서 찾는데 어려움 Circuit breaking : callee 서비스의 문제가 있을 때, caller 서비스에 해당 장애가 전파되지 않도록 하기 위한 추가적인 노력 필요 이러한 단점들을 극복하기 위해서는 MSA 서비스들은 서비스 간 커뮤니케이션을 통제하는 추가적인 로직이 필요하게 된다. 이러한 작업들을 각각의 서비스에 중복으로 넣지 않고 인프라에서 해당 작업..
2024.03.03 -
Spring-Kafka를 이용하여 Consumer를 구현하게 되면, 보통 @KafkaListener를 많이 사용한다. @KafkaListener( topics = "testTopic1", groupId = "test-consumer-group1", concurrency = "1" ) public void test(Message message) { //... } @KafkaListener의 설정 중에 concurrency라는 설정을 알아보자. 해당 설정은 consumer의 thread 개수를 지정하는 값이다. 그렇다면, 하나의 consumer에서 동시에 여러 message를 처리할 수 있도록 thread를 늘리면 좋을 것이라는 생각이 드는데, thread 개수를 늘린다고 무조건 처리량이 좋아지는 것은 아니..
[Kafka] Spring Kafka Listener Concurrency 설정Spring-Kafka를 이용하여 Consumer를 구현하게 되면, 보통 @KafkaListener를 많이 사용한다. @KafkaListener( topics = "testTopic1", groupId = "test-consumer-group1", concurrency = "1" ) public void test(Message message) { //... } @KafkaListener의 설정 중에 concurrency라는 설정을 알아보자. 해당 설정은 consumer의 thread 개수를 지정하는 값이다. 그렇다면, 하나의 consumer에서 동시에 여러 message를 처리할 수 있도록 thread를 늘리면 좋을 것이라는 생각이 드는데, thread 개수를 늘린다고 무조건 처리량이 좋아지는 것은 아니..
2024.02.28 -
MSA 환경을 구성하게 되면, 각각의 서비스들의 상태들을 모니터링하는 것이 기존 형식보다는 까다로워진다. 모놀리식인 경우에는 하나의 application으로 구성되어 있어 해당 application의 상태 정보만 잘 모니터링하면 되었지만 각각의 모듈이 나누어진 MSA 환경에서는 모니터링할 target들이 더 많아진다. MSA 환경에서의 모니터링은 Prometheus, Grafana를 통해 이루어질 수 있다. prometheus 메트릭(metric)이라는 데이터 모델을 기반으로 하는 monitoring, alert 툴 Grafana : 메트릭 정보를 시각화해 주는 툴 위의 그림을 기준으로 보면 prometheus를 통해 spring-boot-application의 모니터링 데이터를 수집 grafana에서 ..
[MSA] Prometheus Grafana 구성 및 특징MSA 환경을 구성하게 되면, 각각의 서비스들의 상태들을 모니터링하는 것이 기존 형식보다는 까다로워진다. 모놀리식인 경우에는 하나의 application으로 구성되어 있어 해당 application의 상태 정보만 잘 모니터링하면 되었지만 각각의 모듈이 나누어진 MSA 환경에서는 모니터링할 target들이 더 많아진다. MSA 환경에서의 모니터링은 Prometheus, Grafana를 통해 이루어질 수 있다. prometheus 메트릭(metric)이라는 데이터 모델을 기반으로 하는 monitoring, alert 툴 Grafana : 메트릭 정보를 시각화해 주는 툴 위의 그림을 기준으로 보면 prometheus를 통해 spring-boot-application의 모니터링 데이터를 수집 grafana에서 ..
2024.02.23 -
grafana docker image https://hub.docker.com/r/grafana/grafana grafana docker compose restart : https://kkang-joo.tistory.com/70 volume : https://kkang-joo.tistory.com/45 privileged : docker container 내에서 host의 리눅스 커널 기능을 모두 사용할 수 있다(host의 주요 자원에 접근 권한 획득) version: "3.8" services: grafana: image: grafana/grafana-oss:9.5.2 container_name: grafana ports: - "3000:3000" volumes: - "grafana_volume:/va..
[MSA] Prometheus Grafana docker 설치grafana docker image https://hub.docker.com/r/grafana/grafana grafana docker compose restart : https://kkang-joo.tistory.com/70 volume : https://kkang-joo.tistory.com/45 privileged : docker container 내에서 host의 리눅스 커널 기능을 모두 사용할 수 있다(host의 주요 자원에 접근 권한 획득) version: "3.8" services: grafana: image: grafana/grafana-oss:9.5.2 container_name: grafana ports: - "3000:3000" volumes: - "grafana_volume:/va..
2024.02.18 -
일반적으로 kafka message queue를 활용하면 아래와 같이 하나의 topic을 두고 message를 produce 하고 consume 한다. 위와 같은 경우 이외에 filtering이나 추가 로직을 중간에 두어 여러 topic을 사용하며 체이닝 하는 형식으로 kafka를 활용하기도 한다. 이러한 경우에 여러 producer, consumer를 생성해서 사용하는 것보다는 kafka stream을 활용할 수 있을것 같다 Kafka Stream Kafka Streams는 카프카에 저장된 데이터를 처리하고 분석하기 위해 개발된 자바 라이브러리 장점 카프카와 완벽한 호환 Kafka에서 공식적으로 제공되는 라이브러리 Exactly-once 처리 보장 스케쥴링 도구가 별도로 필요 없음 자체 로컬 상태 저장..
[Kafka] Kafka Stream란 ( Consumer와 비교 )일반적으로 kafka message queue를 활용하면 아래와 같이 하나의 topic을 두고 message를 produce 하고 consume 한다. 위와 같은 경우 이외에 filtering이나 추가 로직을 중간에 두어 여러 topic을 사용하며 체이닝 하는 형식으로 kafka를 활용하기도 한다. 이러한 경우에 여러 producer, consumer를 생성해서 사용하는 것보다는 kafka stream을 활용할 수 있을것 같다 Kafka Stream Kafka Streams는 카프카에 저장된 데이터를 처리하고 분석하기 위해 개발된 자바 라이브러리 장점 카프카와 완벽한 호환 Kafka에서 공식적으로 제공되는 라이브러리 Exactly-once 처리 보장 스케쥴링 도구가 별도로 필요 없음 자체 로컬 상태 저장..
2024.02.14