공통

    [대규모 서비스를 지탱하는 기술] 알고리즘 실용화

    알고리즘 실용화 알고리즘과 평가 속도를 중시하는 프로그램을 작성할 경우에 알고리즘과 데이터 구조의 선택은 중요하다. 이때 대상이 되는 데이터가 크면 클수록 선택에 따른 차이가 현저해진다. 예를 들어서 데이터 내에서 필요한 데이터를 처음부터 순차적으로 찾아가는 선형 탐색(Linear Search)은 1,000건의 데이터가 있을 때 원하는 데이터를 찾기까지 탐색을 반복하면서 최대 1,000번을 탐색하는 알고리즘이다. n건에 대해 n번의 탐색이 필요하므로 O(n)의 알고리즘이라고 한다. 반면에 이분탐색은 (Binary Search)은 n건의 데이터에서 log n번 만에 목적 데이터를 찾는 알고리즘으로, O(log n)이다. 이분 탐색에서는 1,000건에 대해 최대 10번 만에 탐색이 완료된다. 이는 데이터의 ..

    [대규모 서비스를 지탱하는 기술] DB 스케일아웃 전략

    DB 스케일아웃 전략 1. 인덱스의 효과 인덱스는 색인으로 저장 공간과 쓰기 성능을 희생하면서 검색 속도를 높이기 위한 자료구조이다. MySQL에서는 기본적으로 B-Tree를 인덱스 알고리즘으로 사용한다. B-Tree는 이론적으로 탐색 계산량이 O(log n)으로 보장되므로 선형 탐색에서 O(n)으로 찾는 것보다 B-Tree로 찾는 것이 더 빠르다. 이러한 이유로 인덱스로 탐색하면 검색 속도가 빨라지는 이유이다. 이처럼 계산량 측면에서 개선될 뿐만 아니라 디스크 구조에 최적화된 인덱스를 사용해서 탐색함으로써 디스크 Seek 횟수면에서도 개선된다. 책에서 인덱스 및 실행계획에 대해서 간단하게 다루고 있는데.. 이 부분은 Real MySQL 정리한 것이 더 유용하다고 생각해서 이정도만 정리하였습니다. cf)..

    [대규모 서비스를 지탱하는 기술] OS 캐시 구조

    OS 캐시 구조 페이지 캐시 OS에는 디스크 내의 데이터에 빠르게 액세스 할 수 있도록 하는 구조가 갖춰져 있다. OS는 메모리를 이용해서 디스크 액세스를 줄인다. ⇒ OS 캐시 Linux의 경우는 페이지 캐시라고 하는 캐시 구조를 갖추고 있다. 페이지 구조 가상 메모리 OS는 가상 메모리 구조를 갖추고 있다. 가상 메모리 구조는 논리적인 선형 어드레스를 물리적인 물리 어드레스로 변환하는 것. 가상 메모리 구조가 존재하는 가장 큰 이유는 물리적인 하드웨어를 OS에서 추상화하기 위해서이다. 가상 메모리를 통해 OS가 커널 내에서 메모리를 추상화하고 있다. 이러한 이유로 프로세스에서 메모리를 다루기 쉽게하는 이점을 제공한다. (프로세스에게는 0x000과 같이 반드시 메모리의 특정 번지부터 시작한다고 정해져 ..

    [대규모 서비스를 지탱하는 기술] 메모리와 디스크

    대규모 데이터 처리의 어려운 점 메모리 내에서 계산할 수 없다. 데이터가 너무 많아서 메모리 내에서 계산할 수 없게 되면 디스크에 있는 데이터를 검색하게 된다. 하지만 디스크는 메모리에 비해 상당히 느리며, I/O에 시간이 걸린다. 메모리 vs 디스크의 속도 차 탐색 속도 메모리는 전기적인 부품으로 물리적 구조는 탐색 속도와 그다지 관계없다. (데이터가 메모리상에 있다면 탐색할 때 물리적인 동작 없이 실제 데이터 탐색 시의 오버헤드가 거의 없으므로 빠른 것이다.) 반면에 디스크는 헤드의 이동과 원반의 회전이라는 두 가지 물리적인 동작을 수반하고 있다. 이러한 물리적인 구조가 탐색 속도에 영향을 준다. OS 레벨에서의 디스크의 탐색 속도 개선 사항 디스크는 느리지만 OS는 이러한 점을 어느 정도 커버하는 ..

    [대규모 서비스를 지탱하는 기술] 대규모 서비스의 어려움

    소규모 서비스와 대규모 서비스의 차이 서버 몇 대 정도의 소규모 서비스에는 없는, 대규모 서비스에만 있는 문제나 어려움에는 어떠한 것이 있을까? 1. 확장성 확보, 부하분산 필요 먼저 대량의 액세스가 있는 서비스에서는 서버 1대로는 부하를 처리할 수 없는 경우가 대 다수이다. 이때, 서버 1대로 처리할 수 없는 부하를 어떻게 처리할 것인가가 가장 큰 문제이다. 이러한 문제를 해결하기 위한 전략에는 크게 두 가지 전략이 있다. 스케일업 (Scale-Up) 하드웨어의 성능을 높여 처리능력을 끌어올리는 방법 스케일아웃 (Scale-Out) 서버를 횡으로 전개, 즉 서버의 역할을 분담하거나 대수를 늘림으로써 시스템의 전체적인 처리능력을 높여서 부하를 분산하는 방법 스케일 아웃 전략을 통해 저가의 하드웨어를 횡으..