본문 바로가기

Backend

(35)
[Kafka] Code analysis for sending record in producer Let's analyze code where data is sent in a producer. Call back initialization private Future doSend(ProducerRecord record, Callback callback) { // Append callback takes care of the following: // - call interceptors and user callback on completion // - remember partition that is calculated in RecordAccumulator.append AppendCallbacks appendCallbacks = new AppendCal..
[Kafka] Code analysis for topic creation Let me break down kafka code when creating a topic, especially looking at main function. This code is part of the Apache Kafka server-side logic for creating topics. It handles topic creation by validating configurations and policies, assigning partitions and replicas, and then creating the topic. It is from a function of createTopics at ZkAdminManager.scala.Parameters /** * Create topics and..
[Kafka] What is a Kafka? KafkaApache Kafka is a popular distributed event streaming platform used for building real-time data pipelines and streaming applications. Here's a breakdown of words that will be used frequently. ProducerProducer is who produce data. It can be an application or service such as e-commerce applications. Data can be orders and payment-transactions.ConsumerObviously, Consumer is who consume data as..
[System Design] Consistent Hashing Let's say we have 4th severs that operate uniformly which means traffic to them is quite similar. Each server has an unique index from 0 to 3 and we can easily distribute traffics using modulo operation.  Here, 'hash(key)' generates a hash value from the key which could be an IP address or a user session ID and '% 4' ensures that the traffic is evenly spread across the four servers. serverIndex ..
[MySQL] partitioning 구성 파티셔닝은 대용량 데이터셋을 나누는 것이다. 이는 하나의 데이터 베이스 서버의 부하를 나누는 데 목적이 있다. 자세한 내용은 일전의 블로그에 정리한 바 있다.  아래에서는 하나의 서버 내 하나의 테이블에서 partitioning 하는 예제를 다룰 것이다. 이 후 다음 블로그에서는 여러 개의 서버에서 하나의 테이블이 분산되어 있는 구조를 다룰 것이다.  Create a Partitioned table기본적인 테이블 구조에 Partition을 더했다. event date의 년도의 범위에 따라 파티션을 나누었다. (Range partitioning) 아래는 mysql 8.4.0 에서 동작하는 코드이다. CREATE TABLE my_table ( id INT NOT NULL AUTO_INCREMENT, ..
[MySQL] replication 구성 MySQL에서 replication을 구성했습니다. replication은 간단히 이야기하자면 확장성 및 내결함성을 위해 여러개의 데이터 베이스의 복사본을 둔 것입니다. 아래의 블로그에서 보다 자세히 정리했습니다.  https://ji-seung.tistory.com/65 [DB] 분산 데이터 - 복제여러 장비 간 데이터를 분산하는 이유는 다음과 같다. 확장성 내결함성/ 고가용성 지연시간 수직확장 vs 수평확장 수직확장은 용량확장이라고도 불리며 더 강력한 장비(CPU, 메모리 칩, 디스크)를ji-seung.tistory.com 리더(master)와 팔로워(replica, slave)로 구성되어 있으며 오늘 블로그에서는 하나의 리더, 하나의 팔로워가 있는 단일 리더 구조를 구현할 것입니다. 기본적으로 각각..
[DB] 분산 시스템의 골칫거리 - 패킷 손실과 지연 (타임아웃) 아래는 분산 시스템에서 나타날 수 있는 대표적인 골칫거리들이다. 네트워크로 패킷을 보내려고 할 때, 언제나 패킷이 손실되거나 지연될 수 있다. 노드의 시계는 다른 노드와 심하게 맞지 않을 수 있고 시간이 갑자기 앞뒤로 뛸 수도 있다. 프로세스는 실행 도중 어느 시점에서 상당한 시간 동안 멈출 수 있고, 다른 노드에 의해 죽었다고 선언될 수 있다. 부분 실패가 생길 수 있다는 것은 분산 시스템의 뚜렷한 특성이다.  분산 시스템에서 우리는 구성 요소의 일부가 고장 나더라도 전체로서의 시스템은 계속 동작할 수 있도록 부분 실패에 대한 내성을 소프트웨어에 내장하려고 노력한다. 소프트웨어에 내결함성 메커니즘을 넣으려고 한다. 타임아웃패킷 손실, 지연과 관련된 내결함성 매커니즘이다. 타임 아웃 안에 확인 응답을 받..
[MySQL] 기본 구조와 show databases MySQL 전체 코드는 36 MB이다. 일일이 모든 코드를 보는 것은 힘들다. 그래서 우리가 흔히 쓰는 쿼리들을 입력하였을 때, 어떤 방식으로 동작하는지를 파악하려고 한다.  아래와 같은 쿼리들에 대해서 어떤 식으로 동작하는지 알아볼 것이다. SHOW DATABASES;CREATE DATABASE mydatabase;USE mydatabase;CREATE TABLE mytable ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(50), age INT);INSERT INTO mytable (name, age) VALUES ('John', 30), ('Alice', 25), ('Bob', 35);SELECT * FROM mytable; 우선 comma..
[MySQL] git clone MySQL MySQL을 github에서 clone하였다. 기본적으로 cmake를 통해 빌드 프로세스가 구축되었다. cmake는 크로스 플랫폼 빌드 시스템으로, 소스 코드에서 빌드 프로세스를 자동화하는 도구이다.  Docs/README.build 에는 빌드하는 방법에 대한 설명이 있었다. The recommended way to build MySQL for developers: cd cmake make 설명대로 디렉토리 내부에 build 디렉토리를 만들었고 해당 디렉토리에서 cmake .. 를 호출하였다.그런데 자꾸 bison의 버전이 맞지 않다는 에러가 나왔다.  확인 결과, 버전은 2.3이었고 업그레이드가 필요하였다. 그런데 업그레이드를 하였음에도 bison version은 변하지 않았다. ..
[MySQL] Hello MySQL! 를 읽으니 해당 내용들이 실제 database에서 코드로써 어떻게 나타나는지 궁금하다. 실제 database 코드를 한번 까봐야겠다. 우선, MySQL 코드를 볼 예정이다. 세부 자료구조가 b-트리로 b+트리 기반 db를 구현해본 경험이 있기에 코드를 읽기 더 수월하다고 판단했다. 또한 스타트업부터 대기업까지 MySQL을 주로 사용한다는 현실적인 이유도 있다. 기회가 된다면 contribute도 해보고 싶다. 물론 contribute가 상당히 힘든 일인 것은 알고 있다. 그렇지만 그것이 충분히 의미있고 개발자로서 큰 성장의 기회라는 것을 알고 있다. contribute를 하기 위해서는 우선 코드의 전반을 파악하고, 세부 내용은 깊게 파악할 것이다. 이 과정에서 배운 것들을 정리한다면 그 과정 자체로 의미..