분류 전체보기 36

AMQP & RabbitMQ

1. 개요 RabbitMQ is the most widely deployed open source message broker. - RabbitMQ 공식 홈페이지 RabbitMQ를 구글에 검색하면 가장 상단에 나오는 내용이다. 일반적으로 블로그에서는 RabbitMQ를 간단하게 “AMQP를 구현한 오픈소스 메세지 브로커“ 정도로 정의한다. 위 정의를 보고 RabbitMQ가 무엇인지 단박에 알 수 있는 사람은 이 글을 보고 있지 않을 것이다. AMQP는 무엇이고, 메세지는 무엇이며 브로커는 무엇인지 궁금증이 들기 마련이다. 큐에 대한 기본적인 개념 나아가 AMQP부터 정리하며, 최종적으로 RabbitMQ가 어떤 녀석인지 알아보자. 2. AMQP ( Advanced Message Queue Protocol ) ..

Protocol 2023.09.18

Server Sent Events ( SSE )

1. SSE 란? 웹 브라우저와 서버 사이의 단방향 통신을 가능케 하는 프로토콜 기술이다. 서버가 클라이언트로 데이터를 푸시하는데에 사용되며, 실시간 업데이트를 필요로 하는 웹 어플리케이션에 유용하다. 2. SSE의 특징 2-1. 단방향 통신 SSE는 오직 서버에서 클라이언트로만의 데이터 전송을 지원하는 단방향 통신 프로토콜이다. 즉, 클라이언트에서 서버로 요청을 보내지 않아도, 서버는 실시간 업데이트를 클라이언트로 전송할 수 있다. 2-2. 텍스트 기반 SSE는 주로 텍스트 데이터에 최적화되어 있다. ( 대용량 바이너리 파일 처리 등에는 부적합하다 ) 💡 텍스트 데이터란? 텍스트 기반으로 표현될 수 있는 모든 데이터. ( 예시 1 ) JSON 형식 data: {"event": "update", "dat..

Protocol 2023.09.17

서버 설정 최적화

개요 본 장에서는 MySQL 서버에서 적합한 설정 파일을 만드는 방법을 다룬다. 가령, 혹자는 "MySQL 설정 파일"에 다음과 같은 질문을 할 수도 있다. "32GB의 RAM과 12개 CPU 코어가 있는 서버에 가장 적합한 설정 파일은 무엇인가요?" 이 질문에 대한 답은 그리 간단하지 않다. 단순히 하드웨어의 스펙에 의존하는 것이 아니라 워크로드, 데이터, 어플리케이션의 특성이나 요구 사항에 맞추어 서버를 설정해야 한다. MySQL은 기본 설정으로 대부분의 시스템에서 훌륭하게 동작한다. 그래서 대부분은 기본 설정으로 MySQL 서버를 구성하고 스키마 최적화나 인덱스 및 쿼리 디자인 등에 더 많은 시간을 할애하는 것이 좋다. 심지어 기본 옵션을 변경하였을 때, 얻을 수 있는 잠재적 이점은 그리 크지 않을..

운영 체제 및 하드웨어 최적화

개요 MySQL에 필요한 4가지 기본 리소스는 CPU, 메모리, 디스크, 네트워크 리소스이다. 네트워크는 심각한 병목 현상을 거의 나타내지 않지만, CPU, 메모리, 디스크는 확실히 자주 나타낸다. CPU, 메모리, 디스크 간의 관계는 복잡하여, 한 영역의 문제가 종종 다른 곳에서 나타난다. 어떤 문제에 자원을 투입하기 전에 다른 문제에 자원을 대신 투입해야하는지 자문하는 과정이 필요하다. 이 장에서는 MySQL의 적절한 성능을 위해 하드웨어와 운영 체제를 어떻게 구성해나가는 것이 필요한지 다룬다. MySQL의 성능을 제한하는 요소 MySQL의 가장 흔한 병목 현상은 "CPU 고갈"이다. MySQL이 병렬로 너무 많은 쿼리를 실행하려고 하거나 수가 적더라도 CPU에서 쿼리가 너무 오랫동안 실행될 때 CP..

Performance Schema (2)

성능 스키마 사용 앞서서, 성능 스키마가 무엇인지, 이를 어떻게 설정하는지 알아보았다면, 이곳에서는 성능 스키마를 통해 일반적인 문제를 해결해보고자 한다. SQL문 점검 1. Performance schema 직접 사용 성능 스키마는 SQL문의 성능을 점검하기 위해 다양한 인스트루먼트 세트를 제공한다. performance_schema를 사용하면 성능 문제를 일으키는 쿼리와 이유를 쉽게 찾을 수 있다. 아래와 같은 유형의 인스트루먼트를 활성화하면 SQL 구문 인스트루먼트를 확인할 수 있다. Instrument Class Description statement/sql SELECT 또는 CREATE TABLE 과 같은 SQL문 statement/sp Stored Procedure 제어 statement/sc..

Performance Schema (1)

성능 스키마 소개 성능 스키마 ( Performance Schema ) 는 MySQL 서버 내에서 실행되는 작업에 대한 상세 메트릭을 제공한다. 성능 스키마는 크게 두 가지 개념을 바탕으로 작동된다. 1. 인스트루먼트 ( instrument ) 인스트루먼트는 정보를 얻고자 하는 MySQL의 코드 내 특정 부분을 나타낸다. 2. 컨슈머 ( consumer ) 어떤 코드가 수행되었는지에 대한 정보를 저장하는 테이블을 나타낸다.대부분의 DBA가 성능 스키마를 통해 사용하는 부분이 이 컨슈머이다. 인스트루먼트 요소 SELECT * FROM performance_schema.setup_instruments WHERE DOCUMENTATION IS NOT NULL; 위와 같은 쿼리문을 통해 performance_s..

Circuit Breaker Pattern

개요 많은 서버들에서는 안정성을 위해 Circuit Breaker 패턴을 취하고 있다. 본 페이지에서는 Circuit Breaker 패턴의 정의와 구현 방식에 대해 정리해본다. Circuit Breaker Pattern 이란? 배경 서비스 개발 도중 외부 의존성은 피해갈 수 없다. 가령, 게시물을 올리는 서비스를 생각해보자. 개발자는 이미지를 버퍼로 받아서 Google Cloud Storage 나 AWS DynamoDB 등에 이미지를 업로드한다. 이 때, 예기치 못하게 Google Cloud Storage 나 AWS DynamoDB에 장애가 생긴다면, 어떻게 될까? 해당 API는 장애를 겪게 되고, 경우에 따라서는 장애가 다른 곳까지 전파될 수도 있다. 물론 적절한 에러 핸들링이 조치에 도움이 될 때도 ..

Design 2023.08.01

신뢰성 엔지니어링 환경에서의 모니터링

신뢰성 엔지니어링 그리고 DBA 지난 수년간, 데이터베이스 성능 모니터링은 단일 서버 성능에 대한 심층 분석에 의존했다. 이는, 사후 대응적인 측정에 더 중점을 경향으로 DBA가 게이트키핑으로서 역할할 때의 표준 운영 절차였다. 하지만, 현대의 DBA는 다르다. 구글은 신뢰성 엔지니어링에 대해 다음과 같이 이야기 한다. DBA의 역할은 더욱 복잡해지고 SRE(사이트 신뢰성 엔지니어) 또는 DBRE(데이터베이스 신뢰성 엔지니어)로 바뀌었으며, 팀은 시간을 최적해야합니다. 서비스 수준은 고객이 언제 불만을 느끼는지 정의하는 데에 도움이 되며, 성능 문제와 내부적으로 처리하는 작업 문제를 조율하여 시간을 보다 효율적으로 안배할 수 있습니다. 즉, 성공적인 고객 경험을 보장하기 위해 MySQL을 모니터링하는 것..

MySQL 아키텍처

MySQL의 논리적 아키텍처 MySQL의 논리적인 뷰는 아래와 같은 그림과 같이 크게 세 개의 계층으로 나타낼 수 있다. 최상위 계층인 클라이언트부터 최하위 계층인 스토리지 엔진까지는 다음과 같이 역할이 분담되어 있다. - 첫 번째 계층 ( 클라이언트 ): 네트워크 기반 클라이언트 / 서버 도구 또는 서버에 필요한 연결 처리, 인증, 보안. - 두 번째 계층 ( 파서, 옵티마이저 등 ): 쿼리 파싱, 분석, 최적화 및 모든 기본 제공 함수 등 MySQL의 대부분의 지능적인 부분. - 세 번째 계층 ( 스토리지 엔진 ): MySQL에 데이터를 저장하고 검색하는 역할. 서버는 스토리지 엔진 API를 통해 통신하고, 이 API는 스토리지 엔진 간의 차이를 숨겨서 쿼리 계층에서는 그 차이를 느끼지 못함. "트랜..

MySQL 성능 최적화 (실비아 보트로스, 제레미 틴리) 리뷰를 시작하기 전

2년간 회사를 다니면서, MySQL 데이터베이스와 관련한 다양한 이슈는 항상 내 곁을 따라왔다. 대게 이슈는 다음과 같은 형태를 가진다. 1. 슬로우 쿼리 최적화 이슈 2. 트랜잭션과 그 격리 레벨에 따른 동시성 이슈 3. 데이터 베이스이 리소스 관리 이슈 - 커넥션, CPU, 메모리 중 하나가 부족하여, 라이브 서비스에 발생한 장애가 그 예다. 위와 같은 이슈를 겪으면서 내가 가졌던 생각을 나열하면, 다음과 같다. 1. 데이터 베이스는 서버가 갖는 불가피한 외부 의존성이기에, 데이터 베이스의 장애는 서비스에 치명적일 수 밖에 없다. 2. 그렇기에, HA와 같이 장애가 발생했을 때의 방어 조치들도 중요하지만, 장애를 피할 수 있다면 최대한 피하는 것이 필요하다. 정리하면, 데이터 베이스의 선제/후속 조치..