skarltjr / Memory_Write_Record

나의 모든 학습 기록
0 stars 0 forks source link

서버 성능 올리는방법 조금 알아보기 #119

Open skarltjr opened 2 years ago

skarltjr commented 2 years ago
  1. TPS를 높이는 단순한 방법
    
    단순한 방법은 서버를 늘리는 방법이다
    - ex) 서버 1대의 TPS가 10이라면 2대를 가용할때 20

비슷한 방법으로 스레드풀 + db커넥션 풀 늘리기

  1. 위 방법의 문제점
    
    서버를 늘리는 방법은 금전적인 문제가 분명히 있을 것

풀을 늘리는 방법은 -> db가 감당할 수 있는 한계치가 분명히존재 -> 이 한계치를 넘어간다면 db 쿼리 시간이 증가하고 -> 처리 시간이 길어지면서 TPS가 줄어드는 역효과가 발생


3. 그럼 TPS를 잘 높이려면

⭐️기본적으로 처리 시간을 줄여야한다

  1. 그럼 처리시간을 어떻게 줄이느냐?

    서버입장에서 처리시간을 많이 잡아먹는 행위가 존재
    - db연동
    - api호출
    - 데이터 집계/계산 등 작업을 찾아 처리 시간을 줄여야한다.
  2. 처리시간 줄이기 : db

    
    크게 세 가지 방법 : 쿼리 튜닝 / 캐시 / 장비빨..
  3. 장비빨

    • 읽기용 db를 나누기(하나의 db에 몰린 요청을 분산)
    • db 자체의 성능을 올리기
  4. 쿼리 튜닝

    • 쿼리 자체를 튜닝함으로써 훨씬 빠른 속도를 이끌어낼 수 있다.
  5. 캐시

    • 예를 들어 사이트의 메인 페이지가 가장 접근이 많이 되는 경우 매 요청마다 메인 페이지를 불러올 필요없이 미리 캐시에 땡겨놓는다면?
    • db접근 시간을 없애고 굉장히 빠르게 처리가 가능
  6. 처리시간 줄이기 : API

    
    캐시 / 호출제거
  7. 캐시 캐시를 활용하여 외부 시스템의 api 호출 횟수 자체를 줄여버린다면 api 응답을 기다려야하는 호출시간을 단축시킬 수 있다

  8. 호출 제거

    • 메시징 + 비동기 연동
    • 비동기 : 호출시점과 응답시점이 다를 수 있다. 즉 우리의 서버는 빠르게 응답을 하고 비동기로 외부 api를 활용하는 방법을 활용할 수 있다.
  9. 데이터 집계/계산

    
    매 번 데이터를 집계하거나 계산하는 경우를 피해라
    미리미리 계산해서 이를 캐시나 db에 보관함으로써.

실제로 매 번 좋아요 개수를 계산해오는게 굉장히 비효율적이라 생각하여 통계 테이블을 따로 빼고 이를 활용하여 미리미리 집계해본 경험


-----
### 응답시간 = 대기시간 + 처리시간

지금까지 처리시간 줄이기에 집중했지만 사실 대기시간을 줄이는 방법도 필요하다


#### 응답시간 - 대역폭

대역폭이 작으면 마치 좁은 도로에 트래픽이 몰리는것과 같다. 엉금엉금

어떻게 대처해야할까?

응답 크기 줄이기 : 응답 압축, 이미지 파일 크기 줄이기 트래픽 분리하기 : 이미지, 정적 파일을 cdn을 통해 제공

skarltjr commented 2 years ago

그러나 제일 중요한건 처리시간 자체를 줄일필요가 있다는것 결국 이게 안된다면 나머지는 필요가 없어진다