개발/기술
-
citus - 스키마 정리하고 분산테이블 만들기개발/기술 2024. 9. 5. 22:30
아래와 같은 스키마를 가진 database 가 있다고 해보자content 테이블은 board 테이블을 참조하며 게시판 정보를 포함한다.content_feed 은 board 테이블을 참조하면서 게시판별 피드 정보를 나타내는데 사용된다.content_like 테이블은 user 와 content 정보를 참조하면서 유저의 컨텐츠 좋아요 정보를 저장한다.일반 SNS 에서 흔히 볼 수 있는 스키마다. 운영중에 content 테이블에 데이터가 많이 쌓여서 citus 를 이용해서 분산하고자 한다. 분산 칼럼은 id 필드로 선정했다select from create_distributed_table('content', 'id', shard_count := 4); 하지만 아래와 같은 에러가 발생한다.ERROR: refere..
-
카프카 - URP, Under Min ISR개발/기술 2024. 8. 30. 17:52
URP (Under Replicated Partition)카프카를 운영하다보면 URP 장애가 종종 발생한다. URP 장애는 다양한 이유로 발생하는데 원인을 알기 위해선 먼저 URP 가 먼지 알아야 한다. 카프카에는 파티션이라는 개념이 있고 파티션은 리더와 팔로워 파티션으로 나눠진다. 파티션은 토픽의 데이터가 저장되는 스토리지로 보면 되는데 리더 파티션은 프로튜서와 컨슈머로부터 토픽을 주고 받는 부분이고 팔로워 파티션은 리더 파티션의 내용을 복제한다. 스토리지에서 볼 수 있는 RAID 처럼 카프카도 내용을 복제해서 고가용성과 내구성을 확보하는 방식으로 동작한다. 카프카 운영자는 replicas.factor 옵션으로 복제본의 개수를 설정할 수 있는데 주로 3개 정도 둔다. URP 는 리더 파티션과 동기화되지..
-
Zookeeper 사용 목적과 사례 중심으로 정리개발/기술 2024. 8. 16. 18:56
분산시스템을 무조건 만나게 되는 주키퍼. 이번 포스트에선 주키퍼를 사용하는 이유와 사례를 중점적으로 살펴보자. Why Zookeepr?카프카나 하둡, 클릭하우스 같은 분산 시스템 서비스는 여러개의 서버가 동시에 동작하는 시스템이다. 서버들이 유기적 협력하기 위해선 서로가 어떤 상태인지, 어떤 책임을 맡고 있고 무엇을 할 수 있는지 모니터링 할 수 있는 환경이 필요하다. 예를 들어 특정 서버가 죽어 버리면 다른 서버에서 장애를 발견하고 복구 작업이 진행할 수 있어야 하고 서버 마다 갖고 있는 테이블을 어딘가에 공유할 수 있어야 한다. 시스템마다 서버끼리 상태를 공유할 수 있는 환경을 독자적으로 만들 수도 있겠지만 매 시스템마다 만들기는 버겁다. 감사하게도 아파치에서 분산시스템에서 범용적으로 사용할 수 있..
-
OLAP vs OLTP 데이터베이스개발/기술 2024. 4. 16. 11:36
데이터베이스는 어떤 기능에 초점을 두느냐에 따라 OLAP, OLTP 데이터베이스로 나뉜다. 좀 거칠게 단순화하면 쓰기 성능은 떨어지더라도 읽기 성능을 극대화 할때는 OLAP (Online Analytic Processing), 읽기 성능이 떨어지더라도 안정적인 트랜잭션을 제공하는데 초점을 둔다면 OLTP (Online Transaction Processing) 데이터베이스로 구분할 수 있다. 사용 케이스에 따라 구분할 수 있는데 은행, 온라인 쇼핑, 항공기 예약처럼 사용자의 쓰기 데이터가 빠르게 처리돼야 하는 경우 OLTP 데이터베이스를 사용하고 데이터 분석 툴처럼 복잡한 쿼리 검색이 빠르게 처리돼야 하는 경우 OLAP 데이터베이스를 사용한다. MySQL, PostgreSQL, Maria DB 처럼 우리..
-
Clickhouse 가 빠른 이유개발/기술 2024. 4. 11. 11:48
Clickhouse 는 Online Analytic Processing(OLAP) 에 최적화된 데이터베이스로 다른 데이터베이스에 비해 월등한 검색 속도를 자랑한다. 이번 포스트에서는 어떤 요소들 때문에 Clickhouse 가 속도가 빠른지 정리했다 Column oriented DBMS Clickhouse 는 칼럼형 데이터베이스를 사용하고 있다. 칼럼형 구조가 생소할 수 있는데 먼저 이것과 반대되는 개념인 로우형(Row-oriented) 데이터베이스에 대해서 먼저 알아보자 Row-oriented DBMS 같은 행에 있는 데이터 단위로 저장되는 형태다. MySQL 과 PostgreSQL 이 대표적인 Row 형 데이터베이스다 만약 (시간, 주소, 전화번호) 정보를 저장하는 데이터베이스라면 세가지 데이터를 같은..
-
VIP, HA개발/기술 2023. 11. 27. 22:16
VIP VIP 는 가상의 주소를 의미한다. 하나의 컴퓨터에 물리 ip 주소와는 별개로 새로운 가상 IP 주소를 설정할 수 있다. VIP 를 설정하면 같은 네트워크 내에서 설정한 vip 주소에 대한 요청을 받을 수 있게 된다. 하지만 아무 주소나 정할 수 있는건 아니고 몇가지 규칙이 있다. 네트워크 범위 네트워크의 서브넷 설정에 맞는 주소를 골라야한다. inet 192.168.1.4/24 로 설정된 경우 서브넷에 따라서 192.168.1.x 범위의 주소를 가상의 주소로 설정할 수 있다. 주소충돌방지 너무 당연하지만 기존에 있던 주소와 겹치면 안된다 HA(High Availability) VIP 는 고가용성 서비스를 구성할 때 주로 사용된다. 실제 사례를 알아보기 위해 먼저 데이터베이스의 프라이머리, 스탠드..
-
가상 스레드(Virtual Thread) 그리고 스프링개발/기술 2023. 11. 24. 20:19
1. 가상스레드란? 가상 스레드를 이해하려면 물리 스레드와 가상스레드의 차이점을 이해해야 한다. 1.1 물리스레드 학교 수업시간에 배웠던 스레드 개념이다. 하드웨어 기반 cpu 코어에서 실행되는 스레드다. 각 코어는 한번에 하나의 스레드를 실행할 수 있으며 멀티코어는 동시에 여러 스레드를 실행할 수 있다 시스템 리소스 시스템 리소스를 직접 사용한다. cpu 하나를 독차지 하고 있는 스레드라고 보면 된다. 가상스레드에 대한 개념이 없는 상태에선 이게 무슨 당연한 소리냐 싶을 수 있는데 일단 이렇게만 알고 있자. 계산집약적 작업에 효율적 직접 하드웨어 리소스를 사용하기 때문에 높은 CPU 사용량을 뽑아낼 수 있으므로 계산 집약적 작업에 적합하다 운영체제에서 관리 운영체제에서 관리되므로 컨텍스트 스위칭 비용이..
-
single threaded vs multi threaded개발/기술 2023. 3. 16. 16:15
싱글 쓰레드 시스템은 쓰레드 하나로 시스템을 구성하는 방식이고 멀티 쓰레드 시스템은 두개 이상의 쓰레드를 이용해서 프로그램을 구성하는 것을 말한다. 멀티 코어가 대세인 하드웨어 환경이라면 쓰레드를 늘려서 시간당 작업량을 늘리는게 당연히 좋지 않을까 하는 생각이 들겠지만 구조마다 장/단점이 있다. Single Thread 특징 Simplicity: 쓰레드가 하나만 있기 때문에 간단한 아키텍처를 구항할 수 있다. 개발하고 배포하고 유지하기가 쉽다. 멀티 쓰레드 환경에서 발생할 수 있는 동시성 이슈 같은 것은 고민하지 않아도 된다. Limited Concurrency: 싱글 쓰레드 환경에서는 요청 하나당 한개만 처리할 수 있다. 동시에 처리할 수 없기 때문에 응답 속도도 느려지고 througput도 좋지 않다..