![Page 1: 오픈소스를 활용한 마이크로 서비스의 캐시 전략 · 2019-08-08 · 오픈소스를 활용한 마이크로 서비스의 캐시 ... 마덜 컴퍼니의 역작 엄친아.com](https://reader033.vdocuments.pub/reader033/viewer/2022041800/5e50e964d5884d77ff62dc93/html5/thumbnails/1.jpg)
서비스 캐시 적용 A to Z
오픈소스를 활용한 마이크로 서비스의 캐시 전략
아프리카TV | 플랫폼개발팀 | 정경석
2017.10.25
![Page 2: 오픈소스를 활용한 마이크로 서비스의 캐시 전략 · 2019-08-08 · 오픈소스를 활용한 마이크로 서비스의 캐시 ... 마덜 컴퍼니의 역작 엄친아.com](https://reader033.vdocuments.pub/reader033/viewer/2022041800/5e50e964d5884d77ff62dc93/html5/thumbnails/2.jpg)
캐시의 종류
캐시 데이터 선택
모노리틱 서비스와 캐시
모놀리틱에서 마이크로 서비스로
마이크로 서비스와 캐시
캐시적용 사례
목차
![Page 3: 오픈소스를 활용한 마이크로 서비스의 캐시 전략 · 2019-08-08 · 오픈소스를 활용한 마이크로 서비스의 캐시 ... 마덜 컴퍼니의 역작 엄친아.com](https://reader033.vdocuments.pub/reader033/viewer/2022041800/5e50e964d5884d77ff62dc93/html5/thumbnails/3.jpg)
정경석(kris_jeong@facebook)
발표자 소개
백엔드 개발을 주 업으로 하는 개발자. 소수의 장비로 대량 트래픽 처리.
현재 아프리카TV의 검색 시스템과 캐시클러스터를 개발하고 운영.
취미로 책도 씁니다.
2013 2015 2018
![Page 4: 오픈소스를 활용한 마이크로 서비스의 캐시 전략 · 2019-08-08 · 오픈소스를 활용한 마이크로 서비스의 캐시 ... 마덜 컴퍼니의 역작 엄친아.com](https://reader033.vdocuments.pub/reader033/viewer/2022041800/5e50e964d5884d77ff62dc93/html5/thumbnails/4.jpg)
발표의 흐름
마덜 컴퍼니에서 근무하는
김개발 대리의 서비스 개발 성장기
![Page 5: 오픈소스를 활용한 마이크로 서비스의 캐시 전략 · 2019-08-08 · 오픈소스를 활용한 마이크로 서비스의 캐시 ... 마덜 컴퍼니의 역작 엄친아.com](https://reader033.vdocuments.pub/reader033/viewer/2022041800/5e50e964d5884d77ff62dc93/html5/thumbnails/5.jpg)
김대리 소개
예제코드
일정
복부비만 탈출
신기술
구글 검색
칼퇴하자
기계식 키보드
디버깅은 생명
누구세요?
안녕하세요. 저는 스타트업 “마덜 컴퍼니”의 개발자 입니다.
![Page 6: 오픈소스를 활용한 마이크로 서비스의 캐시 전략 · 2019-08-08 · 오픈소스를 활용한 마이크로 서비스의 캐시 ... 마덜 컴퍼니의 역작 엄친아.com](https://reader033.vdocuments.pub/reader033/viewer/2022041800/5e50e964d5884d77ff62dc93/html5/thumbnails/6.jpg)
마덜 컴퍼니의 역작 엄친아.com 을 만들 예정입니다
서비스 오픈 준비 step 1
기획에서 나온 내용들
• 엄친아.com은 엄마 친구 아들의 일상을 담은 영상을 서비스 한다
• 첫 페이지에는 엄친아와 관련된 영상 20개를 조회수 순서로 보여주자
• 엄친아 자랑코너(사진 게시판)
• 기타 이것 저것 좋은 기능
![Page 7: 오픈소스를 활용한 마이크로 서비스의 캐시 전략 · 2019-08-08 · 오픈소스를 활용한 마이크로 서비스의 캐시 ... 마덜 컴퍼니의 역작 엄친아.com](https://reader033.vdocuments.pub/reader033/viewer/2022041800/5e50e964d5884d77ff62dc93/html5/thumbnails/7.jpg)
웹 서비스를 위한 서버는 어디에?
서비스 오픈 준비 step 2
![Page 8: 오픈소스를 활용한 마이크로 서비스의 캐시 전략 · 2019-08-08 · 오픈소스를 활용한 마이크로 서비스의 캐시 ... 마덜 컴퍼니의 역작 엄친아.com](https://reader033.vdocuments.pub/reader033/viewer/2022041800/5e50e964d5884d77ff62dc93/html5/thumbnails/8.jpg)
서비스 오픈 준비 step 3
![Page 9: 오픈소스를 활용한 마이크로 서비스의 캐시 전략 · 2019-08-08 · 오픈소스를 활용한 마이크로 서비스의 캐시 ... 마덜 컴퍼니의 역작 엄친아.com](https://reader033.vdocuments.pub/reader033/viewer/2022041800/5e50e964d5884d77ff62dc93/html5/thumbnails/9.jpg)
개발이 완료된 후 1
아뿔싸!!
![Page 10: 오픈소스를 활용한 마이크로 서비스의 캐시 전략 · 2019-08-08 · 오픈소스를 활용한 마이크로 서비스의 캐시 ... 마덜 컴퍼니의 역작 엄친아.com](https://reader033.vdocuments.pub/reader033/viewer/2022041800/5e50e964d5884d77ff62dc93/html5/thumbnails/10.jpg)
개발이 완료된 후 2
요구분석 프로젝트 제안
개발결과 설치완료 고객이 원한 것!
프로젝트 요청
![Page 11: 오픈소스를 활용한 마이크로 서비스의 캐시 전략 · 2019-08-08 · 오픈소스를 활용한 마이크로 서비스의 캐시 ... 마덜 컴퍼니의 역작 엄친아.com](https://reader033.vdocuments.pub/reader033/viewer/2022041800/5e50e964d5884d77ff62dc93/html5/thumbnails/11.jpg)
서비스 아키텍처 V1.0
MySQL
WAS inst.
Service
UI
![Page 12: 오픈소스를 활용한 마이크로 서비스의 캐시 전략 · 2019-08-08 · 오픈소스를 활용한 마이크로 서비스의 캐시 ... 마덜 컴퍼니의 역작 엄친아.com](https://reader033.vdocuments.pub/reader033/viewer/2022041800/5e50e964d5884d77ff62dc93/html5/thumbnails/12.jpg)
서비스가 흥하고 있어!
MySQL
WAS inst.
Service
UI
![Page 13: 오픈소스를 활용한 마이크로 서비스의 캐시 전략 · 2019-08-08 · 오픈소스를 활용한 마이크로 서비스의 캐시 ... 마덜 컴퍼니의 역작 엄친아.com](https://reader033.vdocuments.pub/reader033/viewer/2022041800/5e50e964d5884d77ff62dc93/html5/thumbnails/13.jpg)
아직은 매출이… 돈은 없고 트래픽은 처리해야겠고…
![Page 14: 오픈소스를 활용한 마이크로 서비스의 캐시 전략 · 2019-08-08 · 오픈소스를 활용한 마이크로 서비스의 캐시 ... 마덜 컴퍼니의 역작 엄친아.com](https://reader033.vdocuments.pub/reader033/viewer/2022041800/5e50e964d5884d77ff62dc93/html5/thumbnails/14.jpg)
캐시를 적용하자
캐시 종류가 너무 많아!!
![Page 15: 오픈소스를 활용한 마이크로 서비스의 캐시 전략 · 2019-08-08 · 오픈소스를 활용한 마이크로 서비스의 캐시 ... 마덜 컴퍼니의 역작 엄친아.com](https://reader033.vdocuments.pub/reader033/viewer/2022041800/5e50e964d5884d77ff62dc93/html5/thumbnails/15.jpg)
캐시의 분류
WAS inst.
Service
UI
Cache
Private cache Shared cache
Cache
WAS inst.
Service
UI
Cache Client
![Page 16: 오픈소스를 활용한 마이크로 서비스의 캐시 전략 · 2019-08-08 · 오픈소스를 활용한 마이크로 서비스의 캐시 ... 마덜 컴퍼니의 역작 엄친아.com](https://reader033.vdocuments.pub/reader033/viewer/2022041800/5e50e964d5884d77ff62dc93/html5/thumbnails/16.jpg)
우리 서비스에 적절한 캐시는?
캐시 선택
• 지원 기능
• 사용자 그룹
• 업데이트
• 적용성
• 트러블 슈팅
• 지원 라이브러리
![Page 17: 오픈소스를 활용한 마이크로 서비스의 캐시 전략 · 2019-08-08 · 오픈소스를 활용한 마이크로 서비스의 캐시 ... 마덜 컴퍼니의 역작 엄친아.com](https://reader033.vdocuments.pub/reader033/viewer/2022041800/5e50e964d5884d77ff62dc93/html5/thumbnails/17.jpg)
서비스 트래픽 분석
캐시 대상 선정
![Page 18: 오픈소스를 활용한 마이크로 서비스의 캐시 전략 · 2019-08-08 · 오픈소스를 활용한 마이크로 서비스의 캐시 ... 마덜 컴퍼니의 역작 엄친아.com](https://reader033.vdocuments.pub/reader033/viewer/2022041800/5e50e964d5884d77ff62dc93/html5/thumbnails/18.jpg)
데이터? 페이지?
어떻게?
메인 페이지의 엄친아 관련 영상정보 20개를 캐시에 저장
{
"contents": [
{
"video": {
"title": {
"simpleText": "연구소장님 아들 엄친아 각별 등장?! [마인크래프트
모드어드벤쳐: 초능력 연구소] - Mod Adventure - [잠뜰]"
},
...
},
{
"video": {
"title": {
"simpleText": "금수저, 엄친아, 엄친딸 코스프레
...
![Page 19: 오픈소스를 활용한 마이크로 서비스의 캐시 전략 · 2019-08-08 · 오픈소스를 활용한 마이크로 서비스의 캐시 ... 마덜 컴퍼니의 역작 엄친아.com](https://reader033.vdocuments.pub/reader033/viewer/2022041800/5e50e964d5884d77ff62dc93/html5/thumbnails/19.jpg)
Private cache - Google:guava
LoadingCache<String, JsonObject> cache = CacheBuilder.newBuilder()
.maximumSize(100)
.expireAfterWrite(10, TimeUnit.MINUTES)
.build(
new CacheLoader<Integer, JsonObject>() {
@Override
public JsonObject load(String pageId) throws Exception {
return getVideoList(pageId);
}
}
);
...
JsonObject mainPageVideoList = cache.get(“mainPage”);
캐시 데이터 조회
캐시 생성
![Page 20: 오픈소스를 활용한 마이크로 서비스의 캐시 전략 · 2019-08-08 · 오픈소스를 활용한 마이크로 서비스의 캐시 ... 마덜 컴퍼니의 역작 엄친아.com](https://reader033.vdocuments.pub/reader033/viewer/2022041800/5e50e964d5884d77ff62dc93/html5/thumbnails/20.jpg)
아키텍처 V1.5
MySQL
WAS inst.
Service
UI
Guava
![Page 21: 오픈소스를 활용한 마이크로 서비스의 캐시 전략 · 2019-08-08 · 오픈소스를 활용한 마이크로 서비스의 캐시 ... 마덜 컴퍼니의 역작 엄친아.com](https://reader033.vdocuments.pub/reader033/viewer/2022041800/5e50e964d5884d77ff62dc93/html5/thumbnails/21.jpg)
해결 완료!!
예제코드
일정
복부비만 탈출
신기술
구글 검색
칼퇴하자
기계식 키보드
디버깅은 생명
캐시 적용 됐다!! 잘 되네~ 퇴근이닷!!
![Page 22: 오픈소스를 활용한 마이크로 서비스의 캐시 전략 · 2019-08-08 · 오픈소스를 활용한 마이크로 서비스의 캐시 ... 마덜 컴퍼니의 역작 엄친아.com](https://reader033.vdocuments.pub/reader033/viewer/2022041800/5e50e964d5884d77ff62dc93/html5/thumbnails/22.jpg)
서비스가 흥하고 있어 V2.0
MySQL
WAS inst.
Service
UI
Guava
![Page 23: 오픈소스를 활용한 마이크로 서비스의 캐시 전략 · 2019-08-08 · 오픈소스를 활용한 마이크로 서비스의 캐시 ... 마덜 컴퍼니의 역작 엄친아.com](https://reader033.vdocuments.pub/reader033/viewer/2022041800/5e50e964d5884d77ff62dc93/html5/thumbnails/23.jpg)
WAS inst.
Service
UI
Guava
아키텍처 V1.8
MySQL
WAS inst.
Service
UI
Guava
WAS inst.
Service
UI
Guava
Load balancer
![Page 24: 오픈소스를 활용한 마이크로 서비스의 캐시 전략 · 2019-08-08 · 오픈소스를 활용한 마이크로 서비스의 캐시 ... 마덜 컴퍼니의 역작 엄친아.com](https://reader033.vdocuments.pub/reader033/viewer/2022041800/5e50e964d5884d77ff62dc93/html5/thumbnails/24.jpg)
기능은 점점 많아지고.. 김대리에겐 고통이 찾아온다….
![Page 25: 오픈소스를 활용한 마이크로 서비스의 캐시 전략 · 2019-08-08 · 오픈소스를 활용한 마이크로 서비스의 캐시 ... 마덜 컴퍼니의 역작 엄친아.com](https://reader033.vdocuments.pub/reader033/viewer/2022041800/5e50e964d5884d77ff62dc93/html5/thumbnails/25.jpg)
그래 결정했어!! 모놀리틱 to 마이크로
![Page 26: 오픈소스를 활용한 마이크로 서비스의 캐시 전략 · 2019-08-08 · 오픈소스를 활용한 마이크로 서비스의 캐시 ... 마덜 컴퍼니의 역작 엄친아.com](https://reader033.vdocuments.pub/reader033/viewer/2022041800/5e50e964d5884d77ff62dc93/html5/thumbnails/26.jpg)
빅뱅?
WAS inst.
Service
UI
Guava
WAS inst.
Service
UI
Guava
검색 API
Service
Guava
회원 API
Service
Guava
메시징 API
Service
Guava
방송 API
Service
Guava
신규작업 Holding하고
아키텍처 변경작업 올인
하지만!!
현실은 녹록치 않다!
feat. 사장님
![Page 27: 오픈소스를 활용한 마이크로 서비스의 캐시 전략 · 2019-08-08 · 오픈소스를 활용한 마이크로 서비스의 캐시 ... 마덜 컴퍼니의 역작 엄친아.com](https://reader033.vdocuments.pub/reader033/viewer/2022041800/5e50e964d5884d77ff62dc93/html5/thumbnails/27.jpg)
그래서 점진적 적용
WAS inst.
Service
UI
Guava
검색 API
Service
Guava
회원 API
Service
Guava
메시징 API
Service
Guava
채팅 API
Service
Guava
Reverse Proxy
ACL
WAS inst.
Service
UI
Guava
안된다더니 했네!!
feat. 사장님
![Page 28: 오픈소스를 활용한 마이크로 서비스의 캐시 전략 · 2019-08-08 · 오픈소스를 활용한 마이크로 서비스의 캐시 ... 마덜 컴퍼니의 역작 엄친아.com](https://reader033.vdocuments.pub/reader033/viewer/2022041800/5e50e964d5884d77ff62dc93/html5/thumbnails/28.jpg)
적용 결과
WAS inst.
Service
UI
Guava
검색 API
Service
Guava
회원 API
Service
Guava
메시징 API
Service
Guava
채팅 API
Service
Guava
Reverse Proxy
ACL
![Page 29: 오픈소스를 활용한 마이크로 서비스의 캐시 전략 · 2019-08-08 · 오픈소스를 활용한 마이크로 서비스의 캐시 ... 마덜 컴퍼니의 역작 엄친아.com](https://reader033.vdocuments.pub/reader033/viewer/2022041800/5e50e964d5884d77ff62dc93/html5/thumbnails/29.jpg)
Reverse Proxy(HA Proxy) 적용 – ACL
frontend api-server-http
bind *:80
log global
option httplog
option http-keep-alive
acl impl_done url_beg /search /member
use_backend micro_group if impl_done
default_backend legacy_group
backend legacy_group
server legacy_01 127.0.0.1:9081 check inter 5000 maxconn 10000
…
backend micro_group
server micro_api_01 127.0.0.1:8081 check inter 5000 maxconn 10000
…
ACL
레거시
마이크로 서비스(구현 완료)
![Page 30: 오픈소스를 활용한 마이크로 서비스의 캐시 전략 · 2019-08-08 · 오픈소스를 활용한 마이크로 서비스의 캐시 ... 마덜 컴퍼니의 역작 엄친아.com](https://reader033.vdocuments.pub/reader033/viewer/2022041800/5e50e964d5884d77ff62dc93/html5/thumbnails/30.jpg)
Proxy 설정
WAS inst.
Service
UI
Guava
검색 API
Service
Guava
회원 API
Service
Guava
메시징 API
Service
Guava
채팅 API
Service
Guava
Reverse Proxy
ACL
WAS inst.
Service
UI
Guava
Legacy
Micro Service
![Page 31: 오픈소스를 활용한 마이크로 서비스의 캐시 전략 · 2019-08-08 · 오픈소스를 활용한 마이크로 서비스의 캐시 ... 마덜 컴퍼니의 역작 엄친아.com](https://reader033.vdocuments.pub/reader033/viewer/2022041800/5e50e964d5884d77ff62dc93/html5/thumbnails/31.jpg)
그 시각 고객센터에서는…
![Page 32: 오픈소스를 활용한 마이크로 서비스의 캐시 전략 · 2019-08-08 · 오픈소스를 활용한 마이크로 서비스의 캐시 ... 마덜 컴퍼니의 역작 엄친아.com](https://reader033.vdocuments.pub/reader033/viewer/2022041800/5e50e964d5884d77ff62dc93/html5/thumbnails/32.jpg)
Issue 발생
고객센터 불만
영상의 제목을 바꿨는데 모바일에서는 안 바뀌네요!
영상의 조회수가 늘었다가 줄었다가 해요!
새로 올린 동영상이 보였다 안보였다 해요!
서비스가 좋아지게 바꾼거라며!! 이럴꺼면 왜 바꿨냐?
![Page 33: 오픈소스를 활용한 마이크로 서비스의 캐시 전략 · 2019-08-08 · 오픈소스를 활용한 마이크로 서비스의 캐시 ... 마덜 컴퍼니의 역작 엄친아.com](https://reader033.vdocuments.pub/reader033/viewer/2022041800/5e50e964d5884d77ff62dc93/html5/thumbnails/33.jpg)
WAS inst.
Service
UI
Guava
원인
MySQL
WAS inst.
Service
UI
Guava
WAS inst.
Service
UI
Guava
1분전 캐시 데이터
5분전 캐시 데이터
9분전 캐시 데이터
LoadingCache<String, JsonObject> cache = CacheBuilder.newBuilder()
.maximumSize(100)
.expireAfterWrite(10, TimeUnit.MINUTES)
LoadingCache<String, JsonObject> cache = CacheBuilder.newBuilder()
.maximumSize(100)
.expireAfterWrite(30, TimeUnit.SECONDS)
????
![Page 34: 오픈소스를 활용한 마이크로 서비스의 캐시 전략 · 2019-08-08 · 오픈소스를 활용한 마이크로 서비스의 캐시 ... 마덜 컴퍼니의 역작 엄친아.com](https://reader033.vdocuments.pub/reader033/viewer/2022041800/5e50e964d5884d77ff62dc93/html5/thumbnails/34.jpg)
아키텍처 변화 V2.0
Private cache를 제거하고 Shared cache 적용
Redis
WAS inst.
Service
UI
Jedis
WAS inst.
Service
UI
Jedis
WAS inst.
Service
UI
Jedis
Load balancer
MySQL
![Page 35: 오픈소스를 활용한 마이크로 서비스의 캐시 전략 · 2019-08-08 · 오픈소스를 활용한 마이크로 서비스의 캐시 ... 마덜 컴퍼니의 역작 엄친아.com](https://reader033.vdocuments.pub/reader033/viewer/2022041800/5e50e964d5884d77ff62dc93/html5/thumbnails/35.jpg)
Shared cache – Jedis + Redis 적용
GenericObjectPoolConfig config = new GenericObjectPoolConfig();
config.setMaxTotal(30);
config.setBlockWhenExhausted(true);
JedisPool pool = new JedisPool(config, “192.168.0.101 ...
...
Jedis jedis = pool.getResource();
String mainPageVideoList = jedis.get(key.get(“mainPage”));
JsonParser jsonParser = new JsonParser();
JsonObject mainPageVideoListJson = (JsonObject)jsonParser.parse(mainPageVideoList
);
String to JsonObject
Connection Pool
![Page 36: 오픈소스를 활용한 마이크로 서비스의 캐시 전략 · 2019-08-08 · 오픈소스를 활용한 마이크로 서비스의 캐시 ... 마덜 컴퍼니의 역작 엄친아.com](https://reader033.vdocuments.pub/reader033/viewer/2022041800/5e50e964d5884d77ff62dc93/html5/thumbnails/36.jpg)
해결 완료!!
예제코드
일정
복부비만 탈출
신기술
구글 검색
칼퇴하자
기계식 키보드
디버깅은 생명
캐시 잘 되네! 퇴근이닷!!
![Page 37: 오픈소스를 활용한 마이크로 서비스의 캐시 전략 · 2019-08-08 · 오픈소스를 활용한 마이크로 서비스의 캐시 ... 마덜 컴퍼니의 역작 엄친아.com](https://reader033.vdocuments.pub/reader033/viewer/2022041800/5e50e964d5884d77ff62dc93/html5/thumbnails/37.jpg)
개별 서비스에서 생성한 캐시 키가 충돌하면 장애
Issue
캐시에 저장된 데이터의 키 충돌
Redis
WAS inst.
like 검색
Jedis
WAS inst.
전문검색
Jedis
search:먹방
{hit:{}…}
search:먹방
<html>…
![Page 38: 오픈소스를 활용한 마이크로 서비스의 캐시 전략 · 2019-08-08 · 오픈소스를 활용한 마이크로 서비스의 캐시 ... 마덜 컴퍼니의 역작 엄친아.com](https://reader033.vdocuments.pub/reader033/viewer/2022041800/5e50e964d5884d77ff62dc93/html5/thumbnails/38.jpg)
공통 라이브러리 배포 – Jedis + 키 생성
public class CacheManager {
private void initializePool() {
…
public class CacheKeyMaker implements KeyMaker {
public String makeKey(String serviceName, String key) {
return serviceName + “:” + key;
…
String serviceName = “fullTextSearch”;
String searchKeyword = “먹방”;
CacheManager cacheMnager = CacheManager.getInstance();
JsonObject mainPageVideoListJson = cacheMnager.get(serviceName, searchKeyword);
키 생성 규칙
![Page 39: 오픈소스를 활용한 마이크로 서비스의 캐시 전략 · 2019-08-08 · 오픈소스를 활용한 마이크로 서비스의 캐시 ... 마덜 컴퍼니의 역작 엄친아.com](https://reader033.vdocuments.pub/reader033/viewer/2022041800/5e50e964d5884d77ff62dc93/html5/thumbnails/39.jpg)
아키텍처 변화 V2.1
Cache-lib.jar 배포
Redis
WAS inst.
Service
UI
Cache-lib
WAS inst.
Service
UI
Cache-lib
WAS inst.
Service
UI
Cache-lib, Jedis
Load balancer
MySQL
![Page 40: 오픈소스를 활용한 마이크로 서비스의 캐시 전략 · 2019-08-08 · 오픈소스를 활용한 마이크로 서비스의 캐시 ... 마덜 컴퍼니의 역작 엄친아.com](https://reader033.vdocuments.pub/reader033/viewer/2022041800/5e50e964d5884d77ff62dc93/html5/thumbnails/40.jpg)
해결 완료!!
예제코드
일정
복부비만 탈출
신기술
구글 검색
칼퇴하자
기계식 키보드
디버깅은 생명
다 됐다!! 퇴근길 치맥?
![Page 41: 오픈소스를 활용한 마이크로 서비스의 캐시 전략 · 2019-08-08 · 오픈소스를 활용한 마이크로 서비스의 캐시 ... 마덜 컴퍼니의 역작 엄친아.com](https://reader033.vdocuments.pub/reader033/viewer/2022041800/5e50e964d5884d77ff62dc93/html5/thumbnails/41.jpg)
어느날 갑자기
![Page 42: 오픈소스를 활용한 마이크로 서비스의 캐시 전략 · 2019-08-08 · 오픈소스를 활용한 마이크로 서비스의 캐시 ... 마덜 컴퍼니의 역작 엄친아.com](https://reader033.vdocuments.pub/reader033/viewer/2022041800/5e50e964d5884d77ff62dc93/html5/thumbnails/42.jpg)
서비스 장애
Redis
캐시 서버가 죽었다!!!
WAS inst.
Service
UI
Jedis
WAS inst.
Service
UI
Jedis
WAS inst.
Service
UI
Jedis
Load balancer SPOF
MySQL
![Page 43: 오픈소스를 활용한 마이크로 서비스의 캐시 전략 · 2019-08-08 · 오픈소스를 활용한 마이크로 서비스의 캐시 ... 마덜 컴퍼니의 역작 엄친아.com](https://reader033.vdocuments.pub/reader033/viewer/2022041800/5e50e964d5884d77ff62dc93/html5/thumbnails/43.jpg)
WAS inst.
Service
UI
Guava
Private cache 사용
MySQL
WAS inst.
Service
UI
Guava
WAS inst.
Service
UI
Guava
Load balancer
![Page 44: 오픈소스를 활용한 마이크로 서비스의 캐시 전략 · 2019-08-08 · 오픈소스를 활용한 마이크로 서비스의 캐시 ... 마덜 컴퍼니의 역작 엄친아.com](https://reader033.vdocuments.pub/reader033/viewer/2022041800/5e50e964d5884d77ff62dc93/html5/thumbnails/44.jpg)
M S
아키텍처 변화 V2.5
M
WAS inst.
Service
UI
Cache-lib, Jedis
WAS inst.
Service
UI
Cache-lib, Jedis
WAS inst.
Service
UI
Cache-lib, Jedis
M M
S S
Redis Cluster
Load balancer
MySQL
![Page 45: 오픈소스를 활용한 마이크로 서비스의 캐시 전략 · 2019-08-08 · 오픈소스를 활용한 마이크로 서비스의 캐시 ... 마덜 컴퍼니의 역작 엄친아.com](https://reader033.vdocuments.pub/reader033/viewer/2022041800/5e50e964d5884d77ff62dc93/html5/thumbnails/45.jpg)
해결 완료!!
예제코드
일정
복부비만 탈출
신기술
구글 검색
칼퇴하자
기계식 키보드
디버깅은 생명
다 됐다.. 치맥?
![Page 46: 오픈소스를 활용한 마이크로 서비스의 캐시 전략 · 2019-08-08 · 오픈소스를 활용한 마이크로 서비스의 캐시 ... 마덜 컴퍼니의 역작 엄친아.com](https://reader033.vdocuments.pub/reader033/viewer/2022041800/5e50e964d5884d77ff62dc93/html5/thumbnails/46.jpg)
그 시각 옆 팀에서는 신규 서비스가
![Page 47: 오픈소스를 활용한 마이크로 서비스의 캐시 전략 · 2019-08-08 · 오픈소스를 활용한 마이크로 서비스의 캐시 ... 마덜 컴퍼니의 역작 엄친아.com](https://reader033.vdocuments.pub/reader033/viewer/2022041800/5e50e964d5884d77ff62dc93/html5/thumbnails/47.jpg)
우리도 캐시 쓰게 해주세요
feat. Python
Redis Cluster
NER API
NER
Python, redis-py
키 생성 규칙 WAS inst.
Service
UI
Java, Jedis
키 생성 규칙
![Page 48: 오픈소스를 활용한 마이크로 서비스의 캐시 전략 · 2019-08-08 · 오픈소스를 활용한 마이크로 서비스의 캐시 ... 마덜 컴퍼니의 역작 엄친아.com](https://reader033.vdocuments.pub/reader033/viewer/2022041800/5e50e964d5884d77ff62dc93/html5/thumbnails/48.jpg)
캐시 서버좀 공유합시다
feat. 김책임
Redis Cluster
NER API
NER
Python, redis-py
키 생성 규칙
WAS inst.
Service
UI
Cache-lib, Jedis
검색 API
게시글검색
Node.js, ioredis
키 생성 규칙
Daemon
영상인덱싱
PHP, Predis
키 생성 규칙
WAS inst.
모바일
PHP, Phpredis
키 생성 규칙
Batch
랭킹
Java, Lettuce
키 생성 규칙
API 1
Service 1
Python, redis-py
키 생성 규칙
API 2
Service 2
Python, redis-py
키 생성 규칙
API 3
Service 3
Python, redis-py
키 생성 규칙
API 4
Service 4
Python, redis-py
키 생성 규칙
헐!
![Page 49: 오픈소스를 활용한 마이크로 서비스의 캐시 전략 · 2019-08-08 · 오픈소스를 활용한 마이크로 서비스의 캐시 ... 마덜 컴퍼니의 역작 엄친아.com](https://reader033.vdocuments.pub/reader033/viewer/2022041800/5e50e964d5884d77ff62dc93/html5/thumbnails/49.jpg)
할일과 고민
캐시 클러스터를 모든 개발팀에 오픈하자
• 굿 아이디어!
오픈 전 고민들
• 사람은 누구나 실수를(flushdb, config set)
• 각 언어에 대한 라이브러리 검토 및 버전관리
• maxclients 1024??
• 키 생성 규칙이 변경되면?
• 개발자의 영원한 숙제 버전 관리!!
![Page 50: 오픈소스를 활용한 마이크로 서비스의 캐시 전략 · 2019-08-08 · 오픈소스를 활용한 마이크로 서비스의 캐시 ... 마덜 컴퍼니의 역작 엄친아.com](https://reader033.vdocuments.pub/reader033/viewer/2022041800/5e50e964d5884d77ff62dc93/html5/thumbnails/50.jpg)
라이브러리 버전
feat. 김책임
Redis Cluster
NER API
NER
Python, redis-py
키 생성 규칙
WAS inst.
Service
UI
Cache-lib, Jedis 2.8
검색 API
게시글검색
Node.js, ioredis
키 생성 규칙
Daemon
영상인덱싱
PHP, Predis
키 생성 규칙
Batch
랭킹
Cache-lib, Lettuce
키 생성 규칙
![Page 51: 오픈소스를 활용한 마이크로 서비스의 캐시 전략 · 2019-08-08 · 오픈소스를 활용한 마이크로 서비스의 캐시 ... 마덜 컴퍼니의 역작 엄친아.com](https://reader033.vdocuments.pub/reader033/viewer/2022041800/5e50e964d5884d77ff62dc93/html5/thumbnails/51.jpg)
HTTP 기반 Cache API
S
M
WAS inst.
Service
UI
HttpClient
M M
S S
Redis Cluster
Cache API
Service
Cache-lib, Jedis
![Page 52: 오픈소스를 활용한 마이크로 서비스의 캐시 전략 · 2019-08-08 · 오픈소스를 활용한 마이크로 서비스의 캐시 ... 마덜 컴퍼니의 역작 엄친아.com](https://reader033.vdocuments.pub/reader033/viewer/2022041800/5e50e964d5884d77ff62dc93/html5/thumbnails/52.jpg)
장단점
장점
• 클라이언트 라이브러리
• 접근 제어 / Command 제어
• 유연성
단점
• Web API 추가 리소스 필요
• 라이브러리 대비 성능저하(Throughput/Latency)
• 관리 포인트 증가
![Page 53: 오픈소스를 활용한 마이크로 서비스의 캐시 전략 · 2019-08-08 · 오픈소스를 활용한 마이크로 서비스의 캐시 ... 마덜 컴퍼니의 역작 엄친아.com](https://reader033.vdocuments.pub/reader033/viewer/2022041800/5e50e964d5884d77ff62dc93/html5/thumbnails/53.jpg)
Webd.is? 직접 구현?
Webdis?
HTTP 기반 Cache API
S
M M M
S S
Redis Cluster
Custom API?
Service
Cache-lib, Jedis
curl -XPUT http://host/cache/set -d ‘hello world… '
![Page 54: 오픈소스를 활용한 마이크로 서비스의 캐시 전략 · 2019-08-08 · 오픈소스를 활용한 마이크로 서비스의 캐시 ... 마덜 컴퍼니의 역작 엄친아.com](https://reader033.vdocuments.pub/reader033/viewer/2022041800/5e50e964d5884d77ff62dc93/html5/thumbnails/54.jpg)
HTTP 기반 Cache API 구조
Zookeeper
S
M M M
S S
Redis Cluster
Cache API
Armeria
Netty
Zookeper
Service
Lettuce
![Page 55: 오픈소스를 활용한 마이크로 서비스의 캐시 전략 · 2019-08-08 · 오픈소스를 활용한 마이크로 서비스의 캐시 ... 마덜 컴퍼니의 역작 엄친아.com](https://reader033.vdocuments.pub/reader033/viewer/2022041800/5e50e964d5884d77ff62dc93/html5/thumbnails/55.jpg)
Cache API
Service
Cache-lib, Lettuce
WAS inst.
Service
UI
HttpClient
WAS inst.
Service
UI
HttpClient
아키텍처 변화 V3.0
S
M
WAS inst.
Service
UI
HttpClient
M M
S S
Redis Cluster Zookeeper
Load balancer
Cache API
Service
Cache-lib, Lettuce
Cache API
Service
Cache-lib, Lettuce
MySQL
![Page 56: 오픈소스를 활용한 마이크로 서비스의 캐시 전략 · 2019-08-08 · 오픈소스를 활용한 마이크로 서비스의 캐시 ... 마덜 컴퍼니의 역작 엄친아.com](https://reader033.vdocuments.pub/reader033/viewer/2022041800/5e50e964d5884d77ff62dc93/html5/thumbnails/56.jpg)
API가 생각보다 가볍다?
![Page 57: 오픈소스를 활용한 마이크로 서비스의 캐시 전략 · 2019-08-08 · 오픈소스를 활용한 마이크로 서비스의 캐시 ... 마덜 컴퍼니의 역작 엄친아.com](https://reader033.vdocuments.pub/reader033/viewer/2022041800/5e50e964d5884d77ff62dc93/html5/thumbnails/57.jpg)
HA Proxy 적용 – 다중 인스턴스
frontend api-server-http
bind *:80
log global
option httplog
option http-keep-alive
default_backend cache_api
backend cache_api
option httpchk GET /path
option http-keep-alive
server cache_api-01 127.0.0.1:9081 check inter 5000 maxconn 10000
server cache_api-02 127.0.0.1:9082 check inter 5000 maxconn 10000
server cache_api-02 127.0.0.1:9083 check inter 5000 maxconn 10000
Cache API 서버01~03
![Page 58: 오픈소스를 활용한 마이크로 서비스의 캐시 전략 · 2019-08-08 · 오픈소스를 활용한 마이크로 서비스의 캐시 ... 마덜 컴퍼니의 역작 엄친아.com](https://reader033.vdocuments.pub/reader033/viewer/2022041800/5e50e964d5884d77ff62dc93/html5/thumbnails/58.jpg)
Cache API
Service
Cache-lib, Lettuce
WAS inst.
Service
UI
HttpClient
WAS inst.
Service
UI
HttpClient
아키텍처 변화 V3.2
S
M
WAS inst.
Service
UI
HttpClient
M M
S S
Redis Cluster
Zookeeper
Load balancer
HA Proxy
Cache API
Service
Cache-lib, Lettuce
Cache API
Service
Cache-lib, Lettuce
MySQL
![Page 59: 오픈소스를 활용한 마이크로 서비스의 캐시 전략 · 2019-08-08 · 오픈소스를 활용한 마이크로 서비스의 캐시 ... 마덜 컴퍼니의 역작 엄친아.com](https://reader033.vdocuments.pub/reader033/viewer/2022041800/5e50e964d5884d77ff62dc93/html5/thumbnails/59.jpg)
캐시 적용 사례
![Page 60: 오픈소스를 활용한 마이크로 서비스의 캐시 전략 · 2019-08-08 · 오픈소스를 활용한 마이크로 서비스의 캐시 ... 마덜 컴퍼니의 역작 엄친아.com](https://reader033.vdocuments.pub/reader033/viewer/2022041800/5e50e964d5884d77ff62dc93/html5/thumbnails/60.jpg)
서비스 적용 상태
![Page 61: 오픈소스를 활용한 마이크로 서비스의 캐시 전략 · 2019-08-08 · 오픈소스를 활용한 마이크로 서비스의 캐시 ... 마덜 컴퍼니의 역작 엄친아.com](https://reader033.vdocuments.pub/reader033/viewer/2022041800/5e50e964d5884d77ff62dc93/html5/thumbnails/61.jpg)
조회수 어뷰징 방지
![Page 62: 오픈소스를 활용한 마이크로 서비스의 캐시 전략 · 2019-08-08 · 오픈소스를 활용한 마이크로 서비스의 캐시 ... 마덜 컴퍼니의 역작 엄친아.com](https://reader033.vdocuments.pub/reader033/viewer/2022041800/5e50e964d5884d77ff62dc93/html5/thumbnails/62.jpg)
사용자별 영상 조회 정보를 저장
조회수 어뷰징 방지 구현
vod:view:flag:51123:24654 1
사용자 번호 동영상 번호 시청여부
Data(String) Key
![Page 63: 오픈소스를 활용한 마이크로 서비스의 캐시 전략 · 2019-08-08 · 오픈소스를 활용한 마이크로 서비스의 캐시 ... 마덜 컴퍼니의 역작 엄친아.com](https://reader033.vdocuments.pub/reader033/viewer/2022041800/5e50e964d5884d77ff62dc93/html5/thumbnails/63.jpg)
동영상 이어보기
![Page 64: 오픈소스를 활용한 마이크로 서비스의 캐시 전략 · 2019-08-08 · 오픈소스를 활용한 마이크로 서비스의 캐시 ... 마덜 컴퍼니의 역작 엄친아.com](https://reader033.vdocuments.pub/reader033/viewer/2022041800/5e50e964d5884d77ff62dc93/html5/thumbnails/64.jpg)
단일 사용자별 영상번호와 재생 시간 저장
동영상 이어보기 구현
“vod:view:position:21021”
513224 152
13213 350
78754 30
1028462 35
사용자 번호
동영상 번호 최종 시청위치
Data(Hash) Key
![Page 65: 오픈소스를 활용한 마이크로 서비스의 캐시 전략 · 2019-08-08 · 오픈소스를 활용한 마이크로 서비스의 캐시 ... 마덜 컴퍼니의 역작 엄친아.com](https://reader033.vdocuments.pub/reader033/viewer/2022041800/5e50e964d5884d77ff62dc93/html5/thumbnails/65.jpg)
읽음 처리
![Page 66: 오픈소스를 활용한 마이크로 서비스의 캐시 전략 · 2019-08-08 · 오픈소스를 활용한 마이크로 서비스의 캐시 ... 마덜 컴퍼니의 역작 엄친아.com](https://reader033.vdocuments.pub/reader033/viewer/2022041800/5e50e964d5884d77ff62dc93/html5/thumbnails/66.jpg)
메시지 번호와 읽은 사용자의 사용자 번호 저장
메시지 읽음처리
※ Line 형식 구현
“msg:read:cnt:39929:21021”
39929
92943
30233
1355549
사용자 번호 메시지 번호
읽은 사용자 번호
Data(Hash) Key
![Page 67: 오픈소스를 활용한 마이크로 서비스의 캐시 전략 · 2019-08-08 · 오픈소스를 활용한 마이크로 서비스의 캐시 ... 마덜 컴퍼니의 역작 엄친아.com](https://reader033.vdocuments.pub/reader033/viewer/2022041800/5e50e964d5884d77ff62dc93/html5/thumbnails/67.jpg)
주간단위 이벤트
![Page 68: 오픈소스를 활용한 마이크로 서비스의 캐시 전략 · 2019-08-08 · 오픈소스를 활용한 마이크로 서비스의 캐시 ... 마덜 컴퍼니의 역작 엄친아.com](https://reader033.vdocuments.pub/reader033/viewer/2022041800/5e50e964d5884d77ff62dc93/html5/thumbnails/68.jpg)
이벤트 이름과 사용자 번호에 데이터 저장
기한이 정해진 이벤트 데이터
ExpireAt or select <db번호> flushdb
“event:hotsummer:21021”
viewBroad 3
viewVod 7
liveUp 2
addFavorite 1
Data(Hash) Key
사용자 번호
이벤트명 횟수
![Page 69: 오픈소스를 활용한 마이크로 서비스의 캐시 전략 · 2019-08-08 · 오픈소스를 활용한 마이크로 서비스의 캐시 ... 마덜 컴퍼니의 역작 엄친아.com](https://reader033.vdocuments.pub/reader033/viewer/2022041800/5e50e964d5884d77ff62dc93/html5/thumbnails/69.jpg)
Copyright ⓒ 2017 SAMSUNG ELECTRONICS. ALL RIGHTS RESERVED
감사합니다