4. 분산 저장 시스템
1. Distributed Storage
1-1. RAID systems
RAID: Redundant Array of Independent Disks
하드디스크를 여러 개 배치해 사용함으로 신뢰성(reliability)를 높인다.
RAID는 신뢰성(reliability)과 성능 향상(performance)를 높이기 위해 사용된다.
- 신뢰성을 향상시키기 위해 중복(redundancy)!
Mirroring: 두 개의 물리적 디스크로 구성되어진 하나의 개념적 디스크인데, 모든 write 작업은 두 개의 디스크에 각각 전달된다.
Mean time to failure(MTTF): disk failure가 발생할 때 까지 걸리는 시간을 말한다.
싱글 디스크일 때 100,000 시간 이라면 두 개의 디스크를 사용 할 때는 두 개의 디스크 모두에 failure 가 일어나야 하므로 100,000^2 /(2*10) 시간임.
- 성능을 향상시키기 위해 평행성(parallelism)!
Mirrroing 사용 시 : 단위 시간 당 읽기 횟수가 두 배로 증가. 즉, 같은 시간이 주어진다면 더 많은 읽기가 가능하다.
Data Striping: 블락 단위의 파일이 복수의 디스크에 순서대로(stripe) 로 저장되어 있다. n 개의 디스크와 i번째 파일 블락은 (i mod n)+1 의 디스크에 위치하게 된다.
모든 디스크가 모든 액세스, read/write할 때 참여하게 된다. 싱글 디스크가 한 번 read/write 하는 시간 동안 각각의 디스크가 read/write 할 수 있다!
RAID 0
file을 block 단위로 쪼개서 parity 혹은 striping한다.
mirroring 없음.
read/write 효율: nX (n: 디스크의 수)
디스크의 데이터 접근은 속도가 다른 장치에 비해 현저히 느리기 때문에 성능에 있어 병목(bottle neck)현상이 발생한다.
만일 같은 시간이 주어진다면 디스크가 많을 수록 read/write를 더 많이 할 수 있다.
Space efficiency = 1 (디스크 하나와 같음!)
No data redundancy: 이 뜻은 protection을 제공하지 않음. error 나 failure이 떠도 방도가 없다.
RAID 1
mirroring 있음
parity 혹은 striping 없음.
read 효율 : nX
write 효율 : X
Error/Failure 지원 (n-1개 까지 에러가 허용된다.)
Space efficiency = 1/n (카피는 n개인데 디스크 하나의 효율과 같다.)
RAID 4
Block-level striping 있음
parity disk 있음 (A = A1+A2+A3, A: parity block)
read/write 효율 = (n-1)X (parity disk 하나가 에러 방지용이기 때문에 1개 빼야함)
- 근데 write 할 때는 parity disk 계산 시간이 필요함
Space efficiency = (n-1)/n (디스크는 n개인데 실질적 데이터를 저장하는 디스크는 n-1개)
하나의 disk failure 까지 방지 할 수 있다! (연산으로 유추하면 됨, 만일 parity disk가 하나 더 있다면 두 개 까지 복구 가능)
문제점: Parity disk가 write시 항상 쓰여짐 (high stress for parity disk)
RAID 5
제일 많이 쓰는 방법.
Block-level striping 있음
distributed parity (RAID4와 다른 점: parity 정보가 드라이브 안에 분산되어 있음)
read 효율: (n-1)X 혹은 nX
- 블럭 수가 3개 이하 : RAID4와 같은 상황이므로 (n-1)X
- 블럭 수가 3개 보다 많음: nX (특정 parity disk를 두는 것이 아니기 때문에 모든 디스크가 read에 참여한다.)
write 효율: RAID 4와 같음 (에러 방지용으로 parity block을 만들었고, 계산에도 시간이 걸린다. 결과적으로는 write하는 수가 같다.)
Space efficiency: RAID 4와 같음 (결론적인 실질적 데이터 저장량)
write할 때의 부담이 모든 디스크에게 분산되었다.
RAID level 선택하기
Rebuild performance (복구 시 걸리는 시간)
- disk failure가 발생하면 데이터를 복구해야하고 이 때 시간이 걸림
- RAID 1: 똑같은 데이터가 하나 더 있기 때문에 복사해 오면 된다. 매우 쉽다.
- RAId 4,5 : 다른 디스크에 접속해서 연산을 거쳐야한다. (디스크가 클 경우에는 수 시간이 걸릴 수도 있음)
RAID level usage
- RAID 0: 데이터를 좀 날려도 괜찮은데 높은 성능을 원할 때
- RAID 1: reliability도 어느 정도 있지만 복구도 빨리하고 싶을 때. (데이터 손실이 많은서버에서 주로 이용)
- RAID 5: 많은 양의 데이터를 저장할 때. RAID 0 보다는 reliability가 높음
RAID type | Read efficiency | Write efficiency | Space efficiency | Failure protection |
No RAID(1 disk) | 1 | 1 | 1 | 0 |
RAID 0 (n disks) | n | n | 1 | 0 |
RAID 1 (n disks) | n | 1 | 1/n | n-1 |
RAID 2 (n disks) | n-1 | n-1 | (n-1)/n | 1 |
1-2. Storage network
- DAS (Direct Attached Storage): 케이블을 이용해 직접적으로 storage끼리 연결. 물리적으로 선을 연결해줘야하기 때문에 '공유'하기에 좋지 않다.
- NAS (Network Attached Storage): 네트워크를 통해 모든 storage에게 서버를 연결해준다. 공유하기엔 좋지만 속도가 떨어짐.
- SAN (Storage Area Network): 클라이언트는 네트워크를 이용해 접근하지만 서버인 storage는 private network로 연결되어 있다. (광케이블과 스위치로 local하게 연결되어 있음.) NAS에 비해 속도는 빨라졌지만 비용이 많이 든다.
2. Data Centers
2-1. Google data center
https://www.youtube.com/watch?v=XZmGGAbHqa0
memcache, facebook, naver...
2-2. Facebooks Photo Storage
Haystack
이전까지는 photo store sever라는 것이 따로 있어서 CDN에서 서버에 1차로 요청하면 서버에서는 사진이 저장되어 있는 NAS storage에 2차로 요청해 데이터를 가져왔다. 하지만 이렇게되면 디스크에 접근하는 횟수가 많아져서 느리다. haystack photo storage architecture는 디스크 접근 횟수를 줄이기 위해 index를 이용하였다.
CDNs: Content Delivery Networks
Haystack Cache: 사진들이 어디에 저자오디어 있는지 index가 써져있다. index를 알기 때문에 disk acess는 한 번만 하면 되고 속도는 상당히 올라간다.
Haystack Store: memcached-based file index
Memcached
캐싱을 디스크에 하는 대신 RAM에 올리는 방법. 사진 파일의 위치 정보인 인덱스를 메모리에 모두 올렸다(in-memroy index). external data source에 접근 횟수를 줄이는 것이 목적.
Cold Storage
오래 전에 올라온 사진 보다 최근에 업로드 된 사진으로 접근하는 경우가 많았다. (the older, and thuss less popular, less accessed) 하지만 모든 사진은 같은 데이터 센터에 보관되어 있기 때문에 많은 에너지와 메모리가 필요하다.
cold storage systmen은 서버 한 대가 여러개의 하드디스크를 관리하는 형태이다.
- Disks: rack 마다 2PB의 저장소
- Power saving: on/off duty cycle.
- Storage saving: Erasure coding (Reed-Solomon error correction code
replication 효율을 3배로 늘릴 수 있는 방법.
Reed-solomon coding: 코딩으로 4개의 블럭을 더 만들어 block recovery를 가능하게함.
Subscribe to Mem Learning
Get the latest posts delivered right to your inbox