Zero to Hero
대규모 서비스를 지탱하는 기술 04
Review 2021. 1. 12. 17:45

클라우드의 장단점 장점 확장의 유연성 저가로 사용하면서 확장해나갈 수 있다. 단점 획일적인 호스트 사양(메모리 상한선, 느린 I/O) 애매한 로드밸런서 때때로 멈춘다 자체 구축 인프라의 장단점 장점 하드웨어 구성을 유연하게 할 수 있다. 서비스로부터의 요청에 유연하게 대응할 수 있다. 병목현상을 제어할 수 있다. 다중성 확보 원리 서버를 여러 대 늘어놓는다. 1, 2대 정지하더라도 충분히 처리할 수 있도록 해둔다. 로드밸런서로 페일오버 / 페일백 멀티 마스터 VRRP(Virtual Router Redundancy Protocol) 기반으로 감시하면서 다중의 마스터를 두는 MySQL 기법 Active 마스터와 Stanby 마스터를 운용해 Active 마스터에 장애가 나면 Stanby 마스터를 Active ..

대규모 서비스를 지탱하는 기술 03
Review 2021. 1. 12. 17:31

B+ 트리 vs 이분 트리 1. 이분 트리는 노드가 반드시 하나로 정해져 있다. 반면에 B트리는 유동적으로 개수를 조정할 수 있다. 2. 노드의 데이터 개수를 유동적으로 조정해 노드 하나의 크기를 4KB 등으로 고정할 수 있다. 즉 각 노드의 크기를 적당한 사이즈로 정할 수 있다. 3. 다시 말해서 노드 1개를 디스크 1블록만큼 할당하면 B트리로 디스크에 저장했을 때 각 노드를 딱 한 블록만큼으로 해서 저장할 수 있다. 이는 디스크 Seek을 줄여 탐색 속도를 빠르게 한다. 4. 결론적으로 인덱스 트리를 순회할 때 디스크 Seek 발생 횟수를 최소화할 수 있다. 한번 읽은 데이터는 메모리에 캐싱되기 때문에 같은 노드 내의 데이터는 디스크 Seek 없이 탐색할 수 있다. 5. 반면에 이분 트리는 특정 노드..

대규모 서비스를 지탱하는 기술 02
Review 2021. 1. 12. 17:20

I/O 부하를 줄이는 방법 1. 캐시를 전제로 한 I/O 줄이는 방법 데이터 규모 CPU 부하분산은 단순히 스케일 업 하는 것으로 해결이 가능하다. -> I/O 분산에는 국소성을 고려한다. 3. 단순히 대수만 늘려서는 확장성을 확보할 수 없다. 애초에 캐시 용량이 부족해서 늘렸는데 그 부족한 부분도 그대로 동일하게 늘려가게 된다. 결국 액세스 한 순간에 느려지는 것은 변함이 없다. 캐싱할 수 없는 비율은 변함없이 그대로 간다. 국소성을 고려한 분산 액세스 패턴을 고려한 분산, 캐싱할 수 없는 부분이 사라진다. ..

대규모 서비스를 지탱하는 기술 01
Review 2021. 1. 12. 16:34

소규모 서비스와 대규모 서비스의 차이 1. 확장성 확보, 부하분산 필요 스케일 업이 아닌 스케일 아웃으로 진행된 느 확장의 경우 요구되는 서버, DB 간 동기화 이슈 해결 2. 다중성 확보 특정 서버가 고장 나거나 성능이 저하되더라도 서비스를 계속할 수 있는 구성으로 할 필요가 있다. 대규모 서비스일수록 잠깐의 기능 정지로 인해 많은 손실을 가져오기 때문이다. 3. 효율적 운용 필요 서버가 100대를 넘어갈 때 현재 서버들의 상태를 파악할 수 있어야 하고, 상태에 따라서 적절한 조치를 빠르게 취할 수 있어야 한다. 최소한의 인력으로 대규모 시스템을 건강한 상태로 유지하는 것이 필요하다. 4. 개발자 수, 개발 방법의 변화 표준화를 위한 교육 및 팀 매니지먼트가 필요하다. 5. 대규모 데이터의 처리 가장 ..

친절한 SQL 튜닝 04
Review 2020. 12. 30. 12:52

인덱스 수직적 탐색 정렬된 인덱스 레코드 중 조건을 만족하는 첫 번째 레코드를 찾는 과정 즉 인덱스 스캔 시작 지점을 찾는 과정 인덱스 수평적 탐색 수직적 탐색으로 찾은 스캔 시작점에서 찾고자 하는 데이터가 더 안 나타날 때까지 수평적으로 스캔하는 과정 즉 실제로 데이터를 찾는 과정 WHERE 절의 조건 순서에 따라서 성능이 결정된다? 잘못된 정보임. 비교 연산 횟수를 줄일 수 있다는 설명은 맞음. 하지만 인덱스의 자료구조인 B+Tree는 평면 구조가 아님. 어떤 순서로 해도 일 량에는 차이가 없음. (자세한 건 인덱스 성별 여자 이름 유관순으로 검색해볼 것, 대부분이 잘못된 자료인 경우라고 함) 인덱스를 RANGE SCAN 할 수 없는 이유 1. 인덱스 칼럼을 가공하면 인덱스를 정상적으로 사용할 수 없..

친절한 SQL 튜닝 03
Review 2020. 12. 30. 12:26

SQL의 성능을 결정하는 디스크 I/O 1. I/O를 처리하는 동안 프로세스는 잠을 잔다. 2. 즉 프로세스가 디스크에서 데이터를 읽어야 할 때, CPU는 OS에 반환하고 잠시 waiting state 상태로 진입해 I/O가 완료되길 기다린다. 즉 프로세스가 I/O가 많을수록 대기시간이 길어지고 성능이 느려진다. 3. 아무리 하드웨어 성능이 향상되고 있지만 여전히 느리다. 그러므로 디스크 I/O를 줄이기 위한 최적화가 필요하다. SQL의 데이터 구조 1. 블록: 데이터를 읽고 쓰는 단위 2. 익스텐트: 공간을 확장하는 단위, 연속된 블록 집합 3. 세그먼트: 데이터 저장공간이 필요한 오브젝트(테이블, 인덱스, 파티션, LOB 등) 4. 테이블 스페이스: 세그먼트를 담는 컨테이너 5. 데이터 파일: 디스크..