티스토리 뷰

System Design시 고려 사항

Server - Client 통신 시 다음과 같은 예외사항이 발생할 수 있다.

 - Client가 Server를 찾지 못하는 경우

 - Server가 다운되어 Client의 Request를 받지 못할 경우

 - Client가 다운되어 Server의 Response가 소실된 경우

 - Client가 crash된 경우

 

이러한 예외사항을 방어하기 위해 다음을 고려할 수 있다.

  • Reliability : 신뢰성
  • Availability : 유용성
  • Low latency : 짧은 지연시간
  • Performance : 성능
  • Const effective : 지속성

상황별로 네트워크 프로토콜을 TCP또는 UDP를 사용할 수 있다.

 - TCP는 3way-handshake와 세그먼트를 통한 높은 신뢰성을 가지고 있고 UDP에 비해 상대적으로 느리다.

 - 속도가 TCP에 비해 빠르지만 Server의 실행 여부와 관계없이 데이터를 전송하며, 서버가 다운되어 있는 상황이면 데이터가 소실된다.

 

Capacity Estimation

Capacity

아래의 용량 단위는 기억해두면 좋다.

  • 8bits = 1byte
  • 1024 bytes = 1kb
  • 1024kb = 1mb
  • charactor = 1byte
  • int = 4byte
  • timestamp = 4byte

 

Time

  • 60 * 60 = 3600s (hour)
  • 3600 * 24(1day) = 86,400s (day)
  • 86,400s * 30 = 2,500,000s (month)

 

CPU와 Memory

CPU cycle이 1sec로 가정했을 때 그외 h/w의 속도

type time sec
CPU cycle 0.3ms 1s
RAM 120ms 6m
SSD 150ms 6days
HDD 10ms 12months
CA (Europe latency) 183ms 19years

CPU에서 데이터에 접근하는데 물리적인 거리

 

 

Back-end developer가 고려해야 될 부분

 - 하루 총 Request 수 : 평균 DAU * reads(get) + write(post)

DAU : Daily Active Users(DAU) : 하루동안 해당 서비스를 이용한 순수 이용자 수

EX) SNS서비스 시스템을 디자인할 때

 - 보통 Global 대기업에서 운영하는 서비스의 Read/Write비율을 80:20으로 가정한다.

 - User1명이 하루에 30개의 게시글을 읽고, 1개의 게시글을 업로드 한다고 가정

 - 1000만명의 사용자가 있다고 가정.

  • 10 million DAU * 30 photos = 300 million (http method Get)
  • 10 million DAU * 1 photo upload = 10 million photo (http method Post)

 - 위의 가정에서 1초당 요청 수

  • 300 million Get / 86400s = 3472 reads/sec
  • 10 million Post / 86400s = 115 writes/sec

 - 팔로워 기능이 있고 팔로워 수에 따라 게시글이 얼마나 많이 노출되는지 다를것이고, 이 비율을 20%라고 가정

  • DB로 접근하는것이 아닌 Caching을 하는것이 효율적
  • 하루에 발생하는 총 트래픽 => 300 milion Request * 500bytes(사진) * 0.2 = 30GB

 - 위의 계산은 한 Server에 국한되며, 여러가지 예외사항을 방어하기 위해 Server를 5개로 운영(replica적용)한다고 가정

  • 30GB * 5 = 150GB

이는 단순히 photo데이터만을 고려했을 경우이며, SNS서비스의 기능(영상, 포스팅, 채팅 등)에 따라 감당해야 할 트래픽의 양은 어마어마할 것이며 이를 감당하는 시스템을 디자인 하는것은 매우 중요하다.

 

Latency(지연시간)

 - 총 지연시간

① Client -> Server

② Server -> DB

③ DB의 작업 (read / search / write)

④ DB -> Server

⑤ Server -> Client

Accessing

  • 1MB를 Memory에서 순차적으로(sequencielly) 읽는다면 250ms(0.25s)
  • 1MB를 SSD에서 읽는다면 1000ms(1s)
  • 1MB를 HDD에서 읽을 경우 20000ms

Throughput(처리율)

  • 서버가 감당할 수 있는 Request의 수

Availablity(응답성)

 - Server Operating time

 - availability가 100%일수는 없으며, 99%일 경우 1년에 5일(24h*5)의 시간동안 서버가 작동하지 않는다.

 - HA(Highly Availability)의 기준은 99.999%이며, 이 정도의 수치는 1년에 5분동안 서버가 작동하지 않는다.

 - 1년에 5분동안 작동하지 않는 것도 허용하지 않기위해 Replica(다중 서버), Redundancy(여분 서버)등의 시스템을 구축

- 서비스 수준 고려

  • SLA(Service Level Agreement) : 서비스가 특정 기대에 못미쳤을 경우 고객 보상을 제공해주는 계약
  • SLI(Service Level Indicators) : 서비스의 측정 가능한 특성, 시간이 정해지고 측정 가능해야 된다.
  • SLO(Service Level Object) : 주어진 SLI에서 성취할 서비스 수준의 목표 또는 숫자지표

'시스템 디자인' 카테고리의 다른 글

시스템 디자인 5주차  (0) 2021.08.13
시스템 디자인 4주차  (0) 2021.07.31
시스템 디자인 3주차  (0) 2021.07.21
CDN  (0) 2021.07.16
시스템 디자인  (0) 2021.07.10
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
글 보관함