MaxScale is a database proxy that provides high availability and scalability for MariaDB servers. It can be used to configure load balancing of read/write connections, auto failover/switchover/rejoin using MariaDB GTID replication. Keepalived can be used with MaxScale to provide high availability by monitoring MaxScale and failing over if needed. The document provides details on setting up MariaDB replication with GTID, installing and configuring MaxScale and Keepalived. It also describes testing the auto failover functionality.
Redis Cluster is an approach to distributing Redis across multiple nodes. Key-value pairs are partitioned across nodes using consistent hashing on the key's hash slot. Nodes specialize as masters or slaves of data partitions for redundancy. Clients can query any node, which will redirect requests as needed. Nodes continuously monitor each other to detect and address failures, maintaining availability as long as each partition has at least one responsive node. The redis-trib tool is used to setup, check, resize, and repair clusters as needed.
Spark 의 핵심은 무엇인가? RDD! (RDD paper review)Yongho Ha
요즘 Hadoop 보다 더 뜨고 있는 Spark.
그 Spark의 핵심을 이해하기 위해서는 핵심 자료구조인 Resilient Distributed Datasets (RDD)를 이해하는 것이 필요합니다.
RDD가 어떻게 동작하는지, 원 논문을 리뷰하며 살펴보도록 합시다.
http://www.cs.berkeley.edu/~matei/papers/2012/sigmod_shark_demo.pdf
카카오 광고 플랫폼 MSA 적용 사례 및 API Gateway와 인증 구현에 대한 소개if kakao
황민호(robin.hwang) / kakao corp. DSP개발파트
---
최근 Spring Cloud와 Netflix OSS로 MSA를 구성하는 시스템 기반의 서비스들이 많아지는 추세입니다.
카카오에서도 작년에 오픈한 광고 플랫폼 모먼트에 Spring Cloud 기반의 MSA환경을 구성하여, API Gateway도 적용하였는데 1년 반 정도 운영한 경험을 공유할 예정입니다. 더불어 MSA 환경에서는 API Gateway를 통해 인증을 어떻게 처리하는지 알아보고 OAuth2 기반의 JWT Token을 이용한 인증에 대한 이야기도 함께 나눌 예정입니다.
Apache kafka 모니터링을 위한 Metrics 이해 및 최적화 방안SANG WON PARK
Apache Kafak의 빅데이터 아키텍처에서 역할이 점차 커지고, 중요한 비중을 차지하게 되면서, 성능에 대한 고민도 늘어나고 있다.
다양한 프로젝트를 진행하면서 Apache Kafka를 모니터링 하기 위해 필요한 Metrics들을 이해하고, 이를 최적화 하기 위한 Configruation 설정을 정리해 보았다.
[Apache kafka 모니터링을 위한 Metrics 이해 및 최적화 방안]
Apache Kafka 성능 모니터링에 필요한 metrics에 대해 이해하고, 4가지 관점(처리량, 지연, Durability, 가용성)에서 성능을 최적화 하는 방안을 정리함. Kafka를 구성하는 3개 모듈(Producer, Broker, Consumer)별로 성능 최적화를 위한 …
[Apache Kafka 모니터링을 위한 Metrics 이해]
Apache Kafka의 상태를 모니터링 하기 위해서는 4개(System(OS), Producer, Broker, Consumer)에서 발생하는 metrics들을 살펴봐야 한다.
이번 글에서는 JVM에서 제공하는 JMX metrics를 중심으로 producer/broker/consumer의 지표를 정리하였다.
모든 지표를 정리하진 않았고, 내 관점에서 유의미한 지표들을 중심으로 이해한 내용임
[Apache Kafka 성능 Configuration 최적화]
성능목표를 4개로 구분(Throughtput, Latency, Durability, Avalibility)하고, 각 목표에 따라 어떤 Kafka configuration의 조정을 어떻게 해야하는지 정리하였다.
튜닝한 파라미터를 적용한 후, 성능테스트를 수행하면서 추출된 Metrics를 모니터링하여 현재 업무에 최적화 되도록 최적화를 수행하는 것이 필요하다.
쿠키런: 킹덤 대규모 인프라 및 서버 운영 사례 공유 [데브시스터즈 - 레벨 200] - 발표자: 용찬호, R&D 엔지니어, 데브시스터즈 ...Amazon Web Services Korea
<쿠키런:킹덤> 게임 유저 수가 급증하면서 지금까지 겪어보지 못했던 대규모 인프라 환경을 운영하게 되었고, 그 과정에서 다양한 문제점들에 부딪히게 되었습니다. 이 세션에서는 AWS에서 Stateful 한 게임 서버를 어떻게 운영해야 하는지 아키텍처 관점에서 먼저 설명한 후, 수 백만 명의 사용자를 감당하기 위해 해결해야 했던 어려움에 대해 Scalability 관점에서 설명해드립니다.
OpenSearch는 배포형 오픈 소스 검색과 분석 제품군으로 실시간 애플리케이션 모니터링, 로그 분석 및 웹 사이트 검색과 같이 다양한 사용 사례에 사용됩니다. OpenSearch는 데이터 탐색을 쉽게 도와주는 통합 시각화 도구 OpenSearch와 함께 뛰어난 확장성을 지닌 시스템을 제공하여 대량 데이터 볼륨에 빠르게 액세스 및 응답합니다. 이 세션에서는 실제 동작 구조에 대한 설명을 바탕으로 최적화를 하기 위한 방법과 운영상에 발생할 수 있는 이슈에 대해서 알아봅니다.
아름답고 유연한 데이터 파이프라인 구축을 위한 Amazon Managed Workflow for Apache Airflow - 유다니엘 A...Amazon Web Services Korea
Apache Airflow는 복잡한 데이터 처리 파이프라인의 전체적인 프로세스를 자동화하기 위한 워크플로우 관리 플랫폼이며 오픈 소스 커뮤니티에서 활발하게 기여하고 있는 top-level 프로젝트 입니다. AWS는 최근에 Amazon Managed Workflow for Apache Airflow (MWAA) 서비스를 정식 출시하였고, 본 강연에서는 Apache Airflow 및 MWAA를 소개하고 어떻게 AWS 서비스와 연동하여 데이터 처리 워크플로우를 구축할 수 있는지 데모를 통해 알려 드립니다.
AWS EMR을 사용하면서 비용을 최적화하기 위해 필요한 다양한 관점의 방안을 검토하여 정리한 자료.
비용 최적화 대상은 zeppelin/jupyter notebook과 apache spark를 활용하는 서비스를 대상으로 하였으며, 해당 작업이 aws emr에서 어떻게 동작하는지 내부 구조을 파악하여 확인함.
- AWS EMR이란?
- AWS EMR의 과금 방식은?
- 어떻게 비용을 최적화 할 것인가?
- 최적의 EMR 클러스터 구성 방안
- 가성비 높은 Instance 선정 방안
- Apache Spark 성능 개선 방안
가장 중요한 것은 실행할 job의 자원사용량/성능을 모니터링하고, 이에 맞게 자원을 최적화하는 것이 필요함.
배민찬(https://www.baeminchan.com) 서비스의 백엔드 시스템 중 일부가 지난 1년간 어떤 고민과 아이디어, 결과물을 만들어냈는지 공유하려고 합니다. 발표 중 언급되는 용어나 도구에 대해 일반적인 정의나 간단한 설명은 언급되나 자세히 다루지 않습니다. 사용된 도구들로 어떻게 이벤트 기반 분산 시스템을 만들었는지에 대한 이야기가 중심입니다.
This document provides an overview of the architectures and internals of Amazon DocumentDB and MongoDB. It discusses how DocumentDB separates computing and storage layers for improved scalability compared to MongoDB, which couples these layers. It also explains key differences in how each handles data reads/writes, replication, sharding, and other functions. The goal is to help users understand the pros and cons of each for their use cases and needs around performance, scalability and management.
Redis is an in-memory key-value store that is often used as a database, cache, and message broker. It supports various data structures like strings, hashes, lists, sets, and sorted sets. While data is stored in memory for fast access, Redis can also persist data to disk. It is widely used by companies like GitHub, Craigslist, and Engine Yard to power applications with high performance needs.
Spark 의 핵심은 무엇인가? RDD! (RDD paper review)Yongho Ha
요즘 Hadoop 보다 더 뜨고 있는 Spark.
그 Spark의 핵심을 이해하기 위해서는 핵심 자료구조인 Resilient Distributed Datasets (RDD)를 이해하는 것이 필요합니다.
RDD가 어떻게 동작하는지, 원 논문을 리뷰하며 살펴보도록 합시다.
http://www.cs.berkeley.edu/~matei/papers/2012/sigmod_shark_demo.pdf
카카오 광고 플랫폼 MSA 적용 사례 및 API Gateway와 인증 구현에 대한 소개if kakao
황민호(robin.hwang) / kakao corp. DSP개발파트
---
최근 Spring Cloud와 Netflix OSS로 MSA를 구성하는 시스템 기반의 서비스들이 많아지는 추세입니다.
카카오에서도 작년에 오픈한 광고 플랫폼 모먼트에 Spring Cloud 기반의 MSA환경을 구성하여, API Gateway도 적용하였는데 1년 반 정도 운영한 경험을 공유할 예정입니다. 더불어 MSA 환경에서는 API Gateway를 통해 인증을 어떻게 처리하는지 알아보고 OAuth2 기반의 JWT Token을 이용한 인증에 대한 이야기도 함께 나눌 예정입니다.
Apache kafka 모니터링을 위한 Metrics 이해 및 최적화 방안SANG WON PARK
Apache Kafak의 빅데이터 아키텍처에서 역할이 점차 커지고, 중요한 비중을 차지하게 되면서, 성능에 대한 고민도 늘어나고 있다.
다양한 프로젝트를 진행하면서 Apache Kafka를 모니터링 하기 위해 필요한 Metrics들을 이해하고, 이를 최적화 하기 위한 Configruation 설정을 정리해 보았다.
[Apache kafka 모니터링을 위한 Metrics 이해 및 최적화 방안]
Apache Kafka 성능 모니터링에 필요한 metrics에 대해 이해하고, 4가지 관점(처리량, 지연, Durability, 가용성)에서 성능을 최적화 하는 방안을 정리함. Kafka를 구성하는 3개 모듈(Producer, Broker, Consumer)별로 성능 최적화를 위한 …
[Apache Kafka 모니터링을 위한 Metrics 이해]
Apache Kafka의 상태를 모니터링 하기 위해서는 4개(System(OS), Producer, Broker, Consumer)에서 발생하는 metrics들을 살펴봐야 한다.
이번 글에서는 JVM에서 제공하는 JMX metrics를 중심으로 producer/broker/consumer의 지표를 정리하였다.
모든 지표를 정리하진 않았고, 내 관점에서 유의미한 지표들을 중심으로 이해한 내용임
[Apache Kafka 성능 Configuration 최적화]
성능목표를 4개로 구분(Throughtput, Latency, Durability, Avalibility)하고, 각 목표에 따라 어떤 Kafka configuration의 조정을 어떻게 해야하는지 정리하였다.
튜닝한 파라미터를 적용한 후, 성능테스트를 수행하면서 추출된 Metrics를 모니터링하여 현재 업무에 최적화 되도록 최적화를 수행하는 것이 필요하다.
쿠키런: 킹덤 대규모 인프라 및 서버 운영 사례 공유 [데브시스터즈 - 레벨 200] - 발표자: 용찬호, R&D 엔지니어, 데브시스터즈 ...Amazon Web Services Korea
<쿠키런:킹덤> 게임 유저 수가 급증하면서 지금까지 겪어보지 못했던 대규모 인프라 환경을 운영하게 되었고, 그 과정에서 다양한 문제점들에 부딪히게 되었습니다. 이 세션에서는 AWS에서 Stateful 한 게임 서버를 어떻게 운영해야 하는지 아키텍처 관점에서 먼저 설명한 후, 수 백만 명의 사용자를 감당하기 위해 해결해야 했던 어려움에 대해 Scalability 관점에서 설명해드립니다.
OpenSearch는 배포형 오픈 소스 검색과 분석 제품군으로 실시간 애플리케이션 모니터링, 로그 분석 및 웹 사이트 검색과 같이 다양한 사용 사례에 사용됩니다. OpenSearch는 데이터 탐색을 쉽게 도와주는 통합 시각화 도구 OpenSearch와 함께 뛰어난 확장성을 지닌 시스템을 제공하여 대량 데이터 볼륨에 빠르게 액세스 및 응답합니다. 이 세션에서는 실제 동작 구조에 대한 설명을 바탕으로 최적화를 하기 위한 방법과 운영상에 발생할 수 있는 이슈에 대해서 알아봅니다.
아름답고 유연한 데이터 파이프라인 구축을 위한 Amazon Managed Workflow for Apache Airflow - 유다니엘 A...Amazon Web Services Korea
Apache Airflow는 복잡한 데이터 처리 파이프라인의 전체적인 프로세스를 자동화하기 위한 워크플로우 관리 플랫폼이며 오픈 소스 커뮤니티에서 활발하게 기여하고 있는 top-level 프로젝트 입니다. AWS는 최근에 Amazon Managed Workflow for Apache Airflow (MWAA) 서비스를 정식 출시하였고, 본 강연에서는 Apache Airflow 및 MWAA를 소개하고 어떻게 AWS 서비스와 연동하여 데이터 처리 워크플로우를 구축할 수 있는지 데모를 통해 알려 드립니다.
AWS EMR을 사용하면서 비용을 최적화하기 위해 필요한 다양한 관점의 방안을 검토하여 정리한 자료.
비용 최적화 대상은 zeppelin/jupyter notebook과 apache spark를 활용하는 서비스를 대상으로 하였으며, 해당 작업이 aws emr에서 어떻게 동작하는지 내부 구조을 파악하여 확인함.
- AWS EMR이란?
- AWS EMR의 과금 방식은?
- 어떻게 비용을 최적화 할 것인가?
- 최적의 EMR 클러스터 구성 방안
- 가성비 높은 Instance 선정 방안
- Apache Spark 성능 개선 방안
가장 중요한 것은 실행할 job의 자원사용량/성능을 모니터링하고, 이에 맞게 자원을 최적화하는 것이 필요함.
배민찬(https://www.baeminchan.com) 서비스의 백엔드 시스템 중 일부가 지난 1년간 어떤 고민과 아이디어, 결과물을 만들어냈는지 공유하려고 합니다. 발표 중 언급되는 용어나 도구에 대해 일반적인 정의나 간단한 설명은 언급되나 자세히 다루지 않습니다. 사용된 도구들로 어떻게 이벤트 기반 분산 시스템을 만들었는지에 대한 이야기가 중심입니다.
This document provides an overview of the architectures and internals of Amazon DocumentDB and MongoDB. It discusses how DocumentDB separates computing and storage layers for improved scalability compared to MongoDB, which couples these layers. It also explains key differences in how each handles data reads/writes, replication, sharding, and other functions. The goal is to help users understand the pros and cons of each for their use cases and needs around performance, scalability and management.
Redis is an in-memory key-value store that is often used as a database, cache, and message broker. It supports various data structures like strings, hashes, lists, sets, and sorted sets. While data is stored in memory for fast access, Redis can also persist data to disk. It is widely used by companies like GitHub, Craigslist, and Engine Yard to power applications with high performance needs.
Vectorized Processing in a Nutshell. (in Korean)
Presented by Hyoungjun Kim, Gruter CTO and Apache Tajo committer, at DeView 2014, Sep. 30 Seoul Korea.
Klaytn 성능 향상 대장정 - 1000만 account 극복기
블록체인은 네트워크 상에서 상태가 합의를 이루고 복제되어야하는 제한 조건 때문에 전통적인 데이터베이스에 비해 떨어지는 성능을 보인다. 또한 Klaytn에서는 각 어카운트의 정보를 저장하기 위해 Merkle Partricia Trie를 사용하는데, Merkle Partricia Trie의 성능은 전체 어카운트 개수가 늘어날수록 떨어진다. 1000만개 이상의 어카운트가 존재할 때에도 성능 저하를 최소화 하기 위해 1) 일반적인 성능 향상과 더불어 2) 어카운트 개수 증가에 의한 성능 저하를 최소화하는 작업을 동시에 진행하였다. 본 세션에서는 블록체인의 성능 병목 구간에 대한 설명과 더불어 1) Consensus Layer, 2) In-memory Layer, 3) Persistent Layer 의 각 레이어 별로 적용한 최적화 기법들, 그리고 그 사이에 마주친 문제들에 대해 공유하는 시간을 갖는다.
KGC 2014 가볍고 유연하게 데이터 분석하기 : 쿠키런 사례 중심 , 데브시스터즈Minwoo Kim
1년 7개월 장수 모바일 게임 쿠키런. 많은 유저, 하루에도 쏟아지는 많은 로그. Time To Market 단축이 핵심 역량 중 하나가 되는 모바일 게임 시장. 자주 빠르게 변경되는 스팩, 로그도 마찬가지로 자주 빠르게 변경되는 스키마. 이런 현실속에서 게임 개발과 운영, 데이터 분석까지 병행 하기 위해서 가볍고 유연한 아키텍처로 적당히 빠르게 데이터 분석을 하는 쿠키런 서버팀 사례를 소개합니다.
The document discusses consistent hashing, which is a technique for distributing data across multiple servers. It works by assigning each server and data item a unique hash value and storing each data item on the first server whose hash value comes after the data's hash value. This allows redistributing only a fraction of data when servers are added or removed. The key aspects are using a hash function to assign all items unique values and treating the hash ring as a circular space to determine data placement.
Integration between Filebeat and logstash DaeMyung Kang
Filebeat sends log files to Logstash. There are several cases described for integrating Filebeat and Logstash:
1) A simple configuration where one log file is sent from Filebeat to Logstash and output to one file.
2) Another simple configuration where multiple log files are sent from Filebeat to Logstash using a wildcard, and output to one file.
3) An advanced configuration where multiple log files are sent from Filebeat to Logstash, and Logstash outputs each file to a separate file based on the original file name using filtering.
4) A more advanced configuration where log files are sent from Filebeat to Logstash, Logstash parses the timestamp and uses it as the output
This document discusses Kafka timestamps and offsets. It explains that Kafka assigns timestamps to messages by default as the sending time from the client. The timestamps are stored in the timeindex file, which uses binary search to fetch logs by timestamp. When a log segment rolls, it is typically due to the segment size exceeding the max, the time since the oldest message exceeding the max, or the indexes becoming full. If a message is appended with an older timestamp than what is in the timeindex, it will overwrite the existing entries.
This document discusses how Kafka handles timestamps and offsets. It explains that Kafka maintains offset and time-based indexes to allow fetching log data by offset or timestamp. When new log records are appended, the indexes are updated with the largest offset and timestamp. If a record has a timestamp older than the existing minimum in the time index, Kafka will still append it but the time index entry will not be updated.
This document discusses Redis access control and the Redis ACL protocol version 1 (RCP1). It provides background on security issues with exposing Redis and Memcached servers publicly without authentication. RCP1 aims to address limitations of the existing requirepass authentication by defining user permissions through command groups and implementing access control using bit arrays. The presenter then demonstrates RCP1.
4. Redis 소개
● In-Memory Data Structure Store
● Open Source(BSD 3 License)
● Support data structures
○ Strings, set, sorted-set, hashes, list
○ Hyperloglog, bitmap, geospatial index
○ Stream
● Only 1 Committer
17. Cache 구조 #1 - Look aside Cache
Client Web Server DB
Memory Cache를 이용하게 되면 훨씬 더
빠른 속도로 서비스가 가능합니다.
Cache
1. Web Server 는 데이터가 존재하는지
Cache를 먼저 확인
2. Cache에 데이터가 있으면 Cache에서
가져온다.
3. Cache에 데이터가 없다면 DB에서
읽어온다.
4. DB에서 읽어온 데이터를 Cache에
다시 저장한다.
18. Cache 구조 #2 - Write Back
Client Web Server DB
Memory Cache를 이용하게 되면 훨씬 더
빠른 속도로 서비스가 가능합니다.
Cache
1. Web Server 는 모든 데이터를
Cache에만 저장
2. Cache에 특정 시간동안의 데이터가
저장
3. Cache에 있는 데이터를 DB에
저장한다.
4. DB에 저장된 데이터를 삭제한다.
26. 개발의 난이도
● 친구 리스트를 KEY/VALUE 형태로 저장해야 한다면?
○ 현재 유저 123의 친구 Key는 friends:123, 현재 친구 A가
있는 중
T1(친구 B를 추가)
● 친구 리스트 friends:123 을 읽는다.
● friends:123 의 끝에 친구 B를 추가한다.
● 해당 값을 friend:123 에 저장한다.
T1(친구 C를 추가)
● 친구 리스트 friends:123 을 읽는다.
● friends:123 의 끝에 친구 C를 추가한다.
● 해당 값을 friend:123 에 저장한다.
27. 개발의 난이도
● 어떤 문제가 발생할 수 있을까요?
T1(친구 B를 추가)
● 친구 리스트 friends:123 을 읽는다.
● friends:123 의 끝에 친구 B를 추가한다.
● 해당 값을 friend:123 에 저장한다.
T1(친구 C를 추가)
● 친구 리스트 friends:123 을 읽는다.
● friends:123 의 끝에 친구 C를 추가한다.
● 해당 값을 friend:123 에 저장한다.
28. 개발의 난이도
● 어떤 문제가 발생할 수 있을까요?
시간순서 T1(친구 B 추가) T2(친구 C 추가) 최종상태
1 friends:123 읽기 A
2 친구 B 추가 A
3 friends:123 쓰기 A, B
4 friends:123 읽기 A, B
5 친구 C 추가 A, B
6 friends:123 쓰기 A, B, C
29. 개발의 난이도
● Race Condition
시간순서 T1(친구 B 추가) T2(친구 C 추가) 최종상태
1 friends:123 읽기 A
2 friends:123 읽기 A
3 친구 B 추가 A
4 친구 C 추가 A
5 friends:123 쓰기 A, B
6 friends:123 쓰기 A, C
30. 개발의 난이도
● Race Condition
시간순서 T1(친구 B 추가) T2(친구 C 추가) 최종상태
1 friends:123 읽기 A
2 friends:123 읽기 A
3 친구 B 추가 A
4 친구 C 추가 A
5 friends:123 쓰기 A, C
6 friends:123 쓰기 A, B
31. 개발의 난이도
● Redis의 경우는 자료구조가 Atomic 하기 때문에, 해당 Race
Condition 을 피할 수 있습니다.
○ 그래도 잘못짜면 발생함.
32. 왜 Collection 이 중요한가?
● 외부의 Collection을 잘 이용하는 것으로, 여러가지 개발
시간을 단축시키고, 문제를 줄여줄 수 있기 때문에 Collection
이 중요.
34. Redis 사용 처
● Remote Data Store
○ A서버, B서버, C서버에서 데이터를 공유하고 싶을때
● 한대에서만 필요한다면, 전역 변수를 쓰면 되지 않을까?
○ Redis 자체가 Atomic을 보장해준다.(싱글 스레드라…)
● 주로 많이 쓰는 곳들
○ 인증 토큰 등을 저장(Strings 또는 hash)
○ Ranking 보드로 사용(Sorted Set)
○ 유저 API Limit
○ 잡 큐(list)
42. List : insert
● 기본 사용법
○ Lpush <key> <A>
■ Key: (A)
○ Rpush <key> <B>
■ Key: (A, B)
○ Lpush <key> <C>
■ Key: (C, A, B)
○ Rpush <key> <D, A>
■ Key: (C, A, B, D, A)
43. List : pop
● 기본 사용법
○ Key: (C, A, B, D, A)
○ LPOP <key>
■ Pop C, Key: (A, B, D, A)
○ RPOP <key>
■ Pop A, Key: (A, B, D)
○ RPOP <key>
■ Pop D, Key: (A, B)
44. List : lpop, blpop, rpop, brpop
● 기본 사용법
○ Key: ()
○ LPOP <key>
■ No Data
○ BLPOP <key>
■ 누가 데이터를 Push 하기 전까지 대기
46. Set : 데이터가 있는지 없는지만 체크하는 용도
● 기본 사용법
○ SADD <Key> <Value>
■ Value가 이미 Key에 있으면 추가되지 않는다.
○ SMEMBERS <Key>
■ 모든 Value를 돌려좀
○ SISMEMBER <key> <value>
■ value가 존재하면 1, 없으면 0
● 특정 유저를 Follow 하는 목록을 저장해둔다면
48. Sorted Sets : 랭킹에 따라서 순서가 바뀌길 바란다면
● 기본 사용법
○ ZADD <Key> <Score> <Value>
■ Value가 이미 Key에 있으면 해당 Score로 변경된다.
○ ZRANGE <Key> <StartIndex> <EndIndex>
■ 해당 Index 범위 값을 모두 돌려줌
■ Zrange testkey 0 -1
● 모든 범위를 가져옴.
● 유저 랭킹 보드로 사용할 수 있음.
● Sorted sets의 score 는 double 타입이기 때문에, 값이 정확하지 않을 수 있다.
○ 컴퓨터에서는 실수가 표현할 수 없는 정수값들이 존재.
49. Sorted Sets - 정렬이 필요한 값이 필요하다면?
● select * from rank order by score limit 50, 20;
○ zrange rank 50 70
● Select * from rank order by score desc limit 50, 20;
○ Zrevrange rank 50 70
50. Sorted Sets - Score 기준으로 뽑고 싶다면?
● select * from rank where score >= 70 and score < 100;
○ zrangebyscore rank 70 100
● Select * from rank where score > 70;
○ Zrangebyscore rank (70 +inf
55. Collection 주의 사항
● 하나의 컬렉션에 너무 많은 아이템을 담으면 좋지 않음
○ 10000개 이하 몇천개 수준으로 유지하는게 좋음.
● Expire는 Collection의 item 개별로 걸리지 않고 전체 Collection에 대해서만 걸림
○ 즉 해당 10000개의 아이템을 가진 Collection에 expire가 걸려있다면 그 시간 후에
10000개의 아이템이 모두 삭제.
59. 메모리 관리
● Redis 는 In-Memory Data Store.
● Physical Memory 이상을 사용하면 문제가 발생
○ Swap 이 있다면 Swap 사용으로 해당 메모리 Page
접근시 마다 늦어짐.
○ Swap이 없다면?
● Maxmemory를 설정하더라도 이보다 더 사용할 가능성이 큼.
● RSS 값을 모니터링 해야함.
60. 메모리 관리
● 많은 업체가 현재 메모리를 사용해서 Swap을 쓰고 있다는 것을
모를때가 많음(T.T)
61. 메모리 관리
● 큰 메모리를 사용하는 instance 하나보다는 적은 메모리를
사용하는 instance 여러개가 안전함.
● CPU 4 Core, 32GB Memory
24 GB Instance
8 GB Instance
8 GB Instance
8 GB Instance
62. 메모리 관리
● Redis는 메모리 파편화가 발생할 수 있음. 4.x 대 부터 메모리
파현화를 줄이도록 jemlloc에 힌트를 주는 기능이 들어갔으나,
jemalloc 버전에 따라서 다르게 동작할 수 있음.
● 3.x대 버전의 경우
○ 실제 used memory는 2GB로 보고가 되지만 11GB의
RSS를 사용하는 경우가 자주 발생
● 다양한 사이즈를 가지는 데이터 보다는 유사한 크기의 데이터를
가지는 경우가 유리.
63. 메모리가 부족할 때는?
● Cache is Cash!!!
○ 좀 더 메모리 많은 장비로 Migration.
○ 메모리가 빡빡하면 Migration 중에 문제가 발생할수도…
● 있는 데이터 줄이기.
○ 데이터를 일정 수준에서만 사용하도록 특정 데이터를 줄임.
○ 다만 이미 Swap을 사용중이라면, 프로세스를 재시작
해야함.
64. 메모리를 줄이기 위한 설정
● 기본적으로 Collection 들은 다음과 같은 자료구조를 사용
○ Hash -> HashTable을 하나 더 사용
○ Sorted Set -> Skiplist와 HashTable을 이용.
○ Set -> HashTable 사용
○ 해당 자료구조들은 메모리를 많이 사용함.
● Ziplist 를 이용하자.
65. Ziplist 구조
● In-Memory 특성 상, 적은 개수라면 선형 탐색을 하더라도
빠르다.
● List, hash, sorted set 등을 ziplist로 대체해서 처리를 하는
설정이 존재
○ hash-max-ziplist-entries, hash-max-ziplist-value
○ list-max-ziplist-size, list-max-ziplist-value
○ zset-max-ziplist-entries, zset-max-ziplist-value
zlbytes zltail zllen entry entry ... entry zlend
67. O(N) 관련 명령어는 주의하자.
● Redis 는 Single Threaded.
○ 그러면 Redis가 동시에 여러 개의 명령을 처리할 수
있을까?
○ 참고로 단순한 get/set의 경우, 초당 10만 TPS 이상
가능(CPU속도에 영향을 받습니다.)
68. Redis is Single Threaded.
processInputBuffer
packet
processCommand
packet packetpacket
Packet 으로 하나의 Command가 완성되면
processCommand 에서 실제로 실행됨
69. Single Threaded 의 의미
● Redis 는 Single Threaded.
○ 그러면 Redis가 동시에 여러 개의 명령을 처리할 수
있을까?
○ 참고로 단순한 get/set의 경우, 초당 10만 TPS 이상
가능(물리 서버기준, CPU속도에 영향을 받습니다.)
72. 대표적인 O(N) 명령들
● KEYS
● FLUSHALL, FLUSHDB
● Delete Collections
● Get All Collections
73. 대표적인 실수 사례
● Key가 백만개 이상인데 확인을 위해 KEYS 명령을 사용하는
경우
○ 모니터링 스크립트가 일초에 한번씩 keys를 호출하는
경우도...
● 아이템이 몇만개 든 hash, sorted set, set에서 모든
데이터를 가져오는 경우
● 예전의 Spring security oauth RedisTokenStore
74. KEYS 는 어떻게 대체할 것인가?
● scan 명령을 사용하는 것으로 하나의 긴 명령을 짧은 여러번의
명령으로 바꿀 수 있다.
redis 127.0.0.1:6379> scan 0
1) "17"
2) 1) "key:12"
2) "key:8"
3) "key:4"
redis 127.0.0.1:6379> scan 17
1) "0"
2) 1) "key:5"
2) "key:18"
3) "key:0"
7) "key:6"
8) "key:9"
9) "key:11"
75. Collection의 모든 item을 가져와야 할 때?
● Collection의 일부만 가져오거나…
○ Sorted Set
● 큰 Collection을 작은 여러개의 Collection으로 나눠서 저장
○ Userranks -> Userrank1, Userrank2, Userrank3
○ 하나당 몇천개 안쪽으로 저장하는게 좋음.
76. Spring security oauth RedisTokenStore 이슈
● Access Token의 저장을 List(O(N)) 자료구조를 통해서
이루어짐.
○ 검색, 삭제시에 모든 item을 매번 찾아봐야 함.
■ 100만개 쯤 되면 전체 성능에 영향을 줌.
○ 현재는 Set(O(1))을 이용해서 검색, 삭제를 하도록
수정되어있음.
77. Spring security oauth RedisTokenStore 이슈
● https://charsyam.wordpress.com/2018/05/11/입-개발-spring-security-oauth의-redistokenstore의-사용은-서비스에-
적합하지-않/
79. Redis Replication
● Async Replication
○ Replication Lag 이 발생할 수 있다.
● “Replicaof’(>= 5.0.0) or ‘slaveof’ 명령으로 설정 가능
○ Replicaof hostname port
● DBMS로 보면 statement replication가 유사
80. Redis Replication
● Replication 설정 과정
○ Secondary에 replicaof or slaveof 명령을 전달
○ Secondary는 Primary에 sync 명령 전달
○ Primary는 현재 메모리 상태를 저장하기 위해
■ Fork
○ Fork 한 프로세서는 현재 메모리 정보를 disk에 dump
○ 해당 정보를 secondary 에 전달
○ Fork 이후의 데이터를 secondary에 계속 전달
81. Redis Replication 시 주의할 점
● Replication 과정에서 fork 가 발생하므로 메모리 부족이
발생할 수 있다.
● Redis-cli --rdb 명령은 현재 상태의 메모리 스냅샷을
가져오므로 같은 문제를 발생시킴
● AWS나 클라우드의 Redis는 좀 다르게 구현되어서 좀더 해당
부분이 안정적.
82. Redis Replication 시 주의할 점
● 많은 대수의 Redis 서버가 Replica를 두고 있다면
○ 네트웍 이슈나, 사람의 작업으로 동시에 replication이
재시도 되도록 하면 문제가 발생할 수 있음.
○ ex) 같은 네트웍안에서 30GB를 쓰는 Redis Master
100대 정도가 리플리케이션을 동시에 재시작하면 어떤 일이
벌어질 수 있을까?
84. redis.conf 권장 설정 Tip
● Maxclient 설정 50000
● RDB/AOF 설정 off
● 특정 commands disable
○ Keys
○ AWS의 ElasticCache는 이미 하고 있음.
● 전체 장애의 90% 이상이 KEYS와 SAVE 설정을 사용해서
발생.
● 적절한 ziplist 설정
154. Redis Cluster
● Hash 기반으로 Slot 16384 로 구분
○ Hash 알고리즘은 CRC16을 사용
○ Slot = crc16(key) % 16384
○ Key가 Key{hashkey} 패턴이면 실제 crc16에
hashkey가 사용된다.
○ 특정 Redis 서버는 이 slot range를 가지고 있고, 데이터
migration은 이 slot 단위의 데이터를 다른 서버로
전달하게 된다.(migrateCommand 이용)
164. Coordinator 기반
● Zookeeper, etcd, consul 등의 Coordinator 사용
API Server
Redis #1 : P
Redis #2 : S
Coordinator: current Redis is Redis #1
Health
Checker
166. Coordinator 기반
API Server
Redis #1 : P
Redis #2 : P
Coordinator: current Redis is Redis #1
Health
Checker
Health Checker는 Redis #2를 Primary
로 승격시킨다.
167. Coordinator 기반
API Server
Redis #1 : P
Redis #2 : P
Coordinator: current Redis is Redis #2
Health
Checker
Health Checker는 Redis #2를 Primary
로 승격시킨다.
Health Checker는 Coordinator에 current
Redis가 Redis #2라고 업데이트 한다.
168. Coordinator 기반
API Server
Redis #1 : P
Redis #2 : P
Coordinator: current Redis is Redis #2
Health
Checker
Health Checker는 Redis #2를 Primary
로 승격시킨다.
Health Checker는 Coordinator에 current
Redis가 Redis #2라고 업데이트 한다.
Coordinator는 API Server에 current Redis
가 변경되었다고 알려준다.
170. VIP 기반
API Server Redis #1 : P
Redis #2 : S
Health
Checker
VIP: 10.0.1.1.
API Server는 10.0.1.1로만 접속
171. VIP 기반
API Server Redis #1 : P
Redis #2 : S
Health
Checker
VIP: 10.0.1.1.
API Server는 10.0.1.1로만 접속
172. VIP 기반
API Server Redis #1 : P
Redis #2 : P
Health
Checker
VIP: 10.0.1.1.
API Server는 10.0.1.1로만 접속
Health Checker는 Redis #2를 Primary
로 승격시킨다.
173. VIP 기반
API Server Redis #1 : P
Redis #2 : P
Health
Checker
VIP: 10.0.1.1.
API Server는 10.0.1.1로만 접속
Health Checker는 Redis #2를 Primary
로 승격시킨다.
Health Checker는 VIP 10.0.1.1 을 Redis #2
로 할당한다.
174. VIP 기반
API Server Redis #1 : P
Redis #2 : P
Health
Checker
VIP: 10.0.1.1.
API Server는 10.0.1.1로만 접속
Health Checker는 Redis #2를 Primary
로 승격시킨다.
Health Checker는 VIP 10.0.1.1 을 Redis #2
로 할당한다.
Health Checker는 Redis #1에 있던 기존 연결을
모두 끊어준다.(클라이언트의 재접속 유도)
175. DNS 기반
API Server Redis #1 : P
Redis #2 : S
Health
Checker
DNS: redis-primary.svc.io
API Server는 redis-primary.svc.io로만 접속
176. DNS 기반
API Server Redis #1 : P
Redis #2 : S
Health
Checker
DNS: redis-primary.svc.io
API Server는 redis-primary.svc.io로만 접속
177. DNS 기반
API Server Redis #1 : P
Redis #2 : P
Health
Checker
DNS: redis-primary.svc.io
API Server는 redis-primary.svc.io로만 접속
Health Checker는 Redis #2를 Primary
로 승격시킨다.
178. DNS 기반
API Server Redis #1 : P
Redis #2 : P
Health
Checker
DNS: redis-primary.svc.io
API Server는 redis-primary.svc.io로만 접속
Health Checker는 Redis #2를 Primary
로 승격시킨다.
179. DNS 기반
API Server Redis #1 : P
Redis #2 : P
Health
Checker
DNS: redis-primary.svc.io
API Server는 redis-primary.svc.io로만 접속
Health Checker는 Redis #2를 Primary
로 승격시킨다.
Health Checker는 DNS: redis-primary.svc.io
을 Redis #2 로 할당한다.
180. DNS 기반
API Server Redis #1 : P
Redis #2 : P
Health
Checker
DNS: redis-primary.svc.io
API Server는 redis-primary.svc.io로만 접속
Health Checker는 Redis #2를 Primary
로 승격시킨다.
Health Checker는 DNS: redis-primary.svc.io
을 Redis #2 로 할당한다.
Health Checker는 Redis #1에 있던 기존 연결을
모두 끊어준다.(클라이언트의 재접속 유도)
181. VIP/DNS 기반
● 클라이언트에 추가적인 구현이 필요없다.
● VIP 기반은 외부로 서비스를 제공해야 하는 서비스 업자에 유리
(예를 들어 클라우드 업체)
● DNS 기반은 DNS Cache TTL을 관리해야 함.
○ 사용하는 언어별 DNS 캐싱 정책을 잘 알아야 함
○ 툴에 따라서 한번 가져온 DNS 정보를 다시 호출 하지 않는
경우도 존재
183. Monitoring Factor
● Redis Info를 통한 정보
○ RSS
○ Used Memory
○ Connection 수
○ 초당 처리 요청 수
● System
○ CPU
○ Disk
○ Network rx/tx
184. CPU가 100%를 칠 경우
● 처리량이 매우 많다면?
○ 좀 더 CPU 성능이 좋은 서버로 이전
○ 실제 CPU 성능에 영향을 받음
■ 그러나 단순 get/set은 초당 10만 이상 처리가능
● O(N) 계열의 특정 명령이 많은 경우.
○ Monitor 명령을 통해 특정 패턴을 파악하는 것이 필요
○ Monitor 잘못쓰면 부하로 해당 서버에 더 큰 문제를
일으킬 수도 있음.(짧게 쓰는게 좋음)
186. 결론
● 기본적으로 Redis는 매우 좋은 툴
● 그러나 메모리를 빡빡하게 쓸 경우, 관리하기가 어려움
○ 32기가 장비라면 24기가 이상 사용하면 장비 증설을
고려하는 것이 좋음.
○ Write가 Heavy 할 때는 migration도 매우 주의해야함.
● Client-output-buffer-limit 설정이 필요.
187. Redis as Cache
● Cache 일 경우는 문제가 적게 발생
○ Redis 가 문제가 있을 때 DB등의 부하가 어느정도
증가하는 지 확인 필요.
○ Consistent Hashing도 실제 부하를 아주 균등하게
나누지는 않음. Adaptive Consistent Hashing 을
이용해 볼 수도 있음.
188. Redis as Persistent Store
● Persistent Store의 경우
○ 무조건 Primary/Secondary 구조로 구성이 필요함
○ 메모리를 절대로 빡빡하게 사용하면 안됨.
■ 정기적인 migration이 필요.
■ 가능하면 자동화 툴 을 만들어서 이용
○ RDB/AOF가 필요하다면 Secondary에서만 구동