본문 바로가기

대용량 플랫폼

[박혜웅] 대용량 트래픽 처리 - DB

* 이 글은 지극히 주관적인 견해이므로, 참고용으로만 사용하시기 바랍니다.


아는 후배가 물어봐서 정리 차원에서 간단히 적어 본다.

후배의 질문은 DB를 대용량 처리할 수 있도록 구성해보고 싶다는 것이다.


우선순위로 아주 간단히 적어보자.


1. SSD 를 써라.

클라우드 서비스에도 SSD를 지원하는게 있으니, 가능하면 약간 더 투자해서 SSD를 쓰자.

read-through 부하분산을 위해 하드디스크로 몇 개의 slave DB를 만드는 것보다, 한 대의 SSD서버로 구성하는 편이 100배 낫다.

물론 돈이 넉넉하다면.... fusionIO.


2. 파티셔닝 해라.

파티셔닝은 수평, 수직 두 종류가 있다.

데이타베이스단위가 아니라 테이블 단위로 속성을 잘 파악하여, 다르게 파티셔닝하자.

(물론 join이 불가능한 부분은 프로그램으로 처리해야 하지만.... )

매번 join하는 것보단, join한 데이타를 넣는 방법이 성능면에서는 효과적이다.

파티셔닝 방법은 게시판처럼 time 기반인지, 특정지역에 한정된 region 기반인지로 구분하면 될 것 같다.


3. 메모리 기반의 data cache, queue를 사용하라.

요즘 ram이 많이 싸졌다. 예전에 캐시 서버 구성하려고 몇천만원이 들었지만....

퍼포먼스는 cache, queue가 보장한다.

다만 프로그래밍 복잡도는 매우 증가하니, 정말로 대용량 트래픽일 경우에만 고려하자.

데이타가 증가할 것에 대비해서, consistent hashing과 proxy 개념은 이해하고 사용하자.

팁을 말하자면 cache나 queue안의 데이타 구조를 범용으로 구성하면, 자주 미들웨어 레이어를 고치는 수고는 덜 수 있을 것이다.


4. replication은 최소한 사용하자.

replication으로 다수의 slave를 구성해서 read-through 를 처리하는 방법은...

replication이 꼬이면, 장시간 서비스를 중지할지도 모르는 위험성이 있다. slave가 많아 질수록 그 확률은 증가한다.

실시간 백업을 위해서 slave를 1대만 추가하거나, HW 레벨에서 실시간 동기화하는 방법을 고려하자.