뭐든지시작이반이다
Dream Future
뭐든지시작이반이다
  • 분류 전체보기
    • Spring
      • 개념
      • 기타
    • Java
    • Algorithm
      • 알고리즘 정리
    • DB
      • Postgresql
    • 트러블슈팅
    • Git & Github
    • V&V
    • EFK
    • 북스터디
    • 기타

인기 글

최근 댓글

전체 방문자
오늘
어제

블로그 메뉴

  • 홈
  • 태그
  • 방명록

태그

  • gitignore
  • Kibana
  • 트러블슈팅
  • SelectionSort
  • multimodule
  • springboot
  • 알고리즘
  • spring-boot
  • docker
  • efk
  • github
  • SqlSessionFactory
  • fluentd
  • git
  • Controller
  • sqlSessionTemplate
  • Hibernate
  • Kotlin
  • auditing
  • lombok
  • mybatis
  • dirtyChecking
  • spring
  • JPA
  • ambiguous오류
  • 파티셔닝
  • gradle
  • 대규모서비스
  • springbot
  • requestmapping
hELLO · Designed By 정상우.
뭐든지시작이반이다

Dream Future

북스터디

[대규모서비스] 분산

2022. 5. 19. 23:41

웹 어플리케이션 요청은 로드밸런서를 거쳐 AP서버에 도달하고 DB의 I/O작업을 발생시킨다. 

서버에 부하가 생길 때

1. AP서버는 CPU부하 위주이고 데이터를 분산하여 저장하지 않기 때문에 단순 서버 추가 증설으로 부하를 분산할 수 있다. 

2. DB의 경우 I/O부하 위주이고 데이터를 동기화시켜야한다는 문제가 있어 확장이 쉽지 않다. 또한 단순 증설을 해도 캐싱되지 않는 구간은 똑같이 캐싱되지 않을 확률이 높기 때문에 효율이 좋지 않다. 

캐싱은 블럭 단위로 진행된다.

DB는 기본적으로 디스크에 데이터를 저장하게 되므로 느린 디스크 I/O작업을 줄이기위해 메모리에 캐싱할 수 있게 환경을 구성하는 것이 중요하다.

DB분산을 위한 파티셔닝

데이터 액세스 패턴을 고려하여 분산하는 것을 locality/국소성을 고려한 분산이라고 한다.

1. 테이블 단위 분할

테이블 단위로 나눈다. 총 4개의 테이블이 있으면 1+2/3+4 이런 식으로 분할한다.

2. 테이블 데이터 분할

한 테이블 내에서 기준을 정하여 데이터를 분할한다. id의 첫글자를 기준으로 나눌 수 있다.

3. 용도 별로 시스템 분산

일반 사용자/ 봇/ 외부API 등 용도 별로 로드 밸런서를 두고 AP와 DB를 따로 사용한다.

 

팁

1. 서버 부팅 후 바로 운영에 넣지 않는다.

필요한 데이터를 캐싱한 후 투입해야한다. 그렇지 않으면 많은 I/O작업이 발생하여 심각한 부하가 발생할 수 있다.

2. 성능평가는 캐시가 최적화된 후에 실시한다.

캐시 최적화가 안되어있으면 성능이 낮게 나올 수 있다.

 

전반적으로 OS 지식을 이해하고 아는 것을 중요하게 말하고 있다.

 

출처: 웹 개발자를 위한 대규모 서비스를 지탱하는 기술

저작자표시 비영리 동일조건 (새창열림)
    뭐든지시작이반이다
    뭐든지시작이반이다
    기록장입니다.

    티스토리툴바