일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Spring Batch
- JVM
- javascript
- linux
- php
- Oracle
- tool
- jsp
- Gradle
- springboot
- Design Patterns
- Git
- AWS
- jenkins
- laravel
- Spring
- 요리
- Web Server
- ReactJS
- 맛집
- it
- devops
- java
- ubuntu
- redis
- IntelliJ
- db
- elasticsearch
- Spring Boot
- MySQL
- Today
- Total
아무거나
웹 서비스 캐시 전략 본문
웹 서비스 캐시 전략
1. 일반적으로는 스케일업이 더 쉽고 스케일 아웃이 비용이 적게 든다.
2. 캐시를 선택해야 하는 이유
- 돈이 부족한데 성능을 더 높여야 할때, 돈은 있지만 성능을 더 높여야 할때..
3. use case : login
- ( select * from users where id = 'bkjeon' )
유저수가 적으면.. -> 충분히 빠르다.
그러나 유저 수가 엄청 많으면.. -> DB도 인덱스 걸면 충분히 빠르다.(단, 읽기만 한다면 또한 디스크 읽는 수 가 적을때만)
그래도 느리면 캐시를 적용하자.
4. use case : log
- 쓰기용 캐시 적용
- Log하나당 DB삽입( insert into clicklogs values(a,b,c); )
- 모아서 쓰기..1024개 단위( Insert into clicklogs values(a1,b1,c1),(a2,b2,c2),(a3,b3,c3) )
- 모아 쓰기를 위한 버퍼로 캐시 사용( 결과 : 10만건 기준 16~17 -> 1.4~1.5로 향상 )
5. 페이스북의 캐시 예시
- login을 위한 유저정보, 첫 화면에 보여줄 피드 몇백개, 친구관계 등.. -> 이슈는 scale
- 유저 로그인 관련 정보는 많아도 대부분 메모리에 올라감
- 1k * 10,000,000 = 10G 그런데 1억명이면 한 서버당 100G? -> 이 또한 돈이 있으면 가능
- 그럼 10억명이면? 1TB? -> 데이터의 분배가 필요함
# 한대면 -> LRU등으로 자주쓰는 녀석들만. 조금씩 사용
# 여러대면 -> 1~백만 : 1번, 백만1~2백만 : 2번 -> Range가 너무 크면 서버별 사용 리소스가 크게 치아닐 수 있음 서버 추가시에 range 조절이 없으면 데이터 이동이 없다.
user #1000005 <-> server user #1, user #10, #user #1000000 ...
<-> user #1000001, user #1000100, user #2000000....
user #2000001, user #2000200, user #3000000.....
- modulo : ID % 서버대수 = k -> 서버 대수에 따라서 데이터의 이동이 많아짐 가능하면 2배씩 증가하는게 유리
# user #1 <-> server <-> user #1, user #4, user #7...
user #2, user #5, user #8...
user #3, user #6, user #9...
- Indexed : 해당 데이터가 어디 존재하는지 Index 서버가 따로 존재 -> Index의 변경으로 데이터 이동이 자유롭다(Index 서버에 대한 관리가 추가로 필요)
# Index server(user 5000 is in 3), user #5000 <-> server <-> user #3, user #6, user#5000...
- 서버의 목록은 zookeeper 등으로 관리하면 좋음
'IT > 기타 IT지식' 카테고리의 다른 글
get방식의 길이 제한에 대한 이야기 (0) | 2019.03.21 |
---|---|
Rest API 정의 (0) | 2019.03.12 |
oauth와 sso(싱글사인온)의 차이 (0) | 2019.03.07 |
3 Tier Architecture(3계층 구조) (0) | 2018.07.31 |
티스토리 소스코드 플러그인 사용 ( 업로드 필요없음 ) (0) | 2018.06.10 |