SlideShare une entreprise Scribd logo
1  sur  69
서비스 캐시 적용 A to Z
오픈소스를 활용한
마이크로 서비스의 캐시 전략
아프리카TV | 플랫폼개발팀 | 정경석
2017.10.25
캐시의 종류
캐시 데이터 선택
모노리틱 서비스와 캐시
모놀리틱에서 마이크로 서비스로
마이크로 서비스와 캐시
캐시적용 사례
목차
정경석(kris_jeong@facebook)
발표자 소개
백엔드 개발을 주 업으로 하는 개발자. 소수의 장비로 대량 트래픽 처리.
현재 아프리카TV의 검색 시스템과 캐시클러스터를 개발하고 운영.
취미로 책도 씁니다.
2013 2015 2018
발표의 흐름
마덜 컴퍼니에서 근무하는
김개발 대리의 서비스 개발 성장기
김대리 소개
예제코드
일정
복부비만
탈출
신기술
구글
검색
칼퇴하자
기계식
키보드
디버깅은 생명
누구세요?
안녕하세요.
저는 스타트업
“마덜 컴퍼니”의
개발자 입니다.
마덜 컴퍼니의 역작 엄친아.com 을 만들 예정입니다
서비스 오픈 준비 step 1
기획에서 나온 내용들
• 엄친아.com은 엄마 친구 아들의 일상을 담은 영상을 서비스 한다
• 첫 페이지에는 엄친아와 관련된 영상 20개를 조회수 순서로 보여주자
• 엄친아 자랑코너(사진 게시판)
• 기타 이것 저것 좋은 기능
웹 서비스를 위한 서버는 어디에?
서비스 오픈 준비 step 2
서비스 오픈 준비 step 3
개발이 완료된 후 1
아뿔싸!!
개발이 완료된 후 2
요구분석프로젝트 제안
개발결과 설치완료 고객이 원한 것!
프로젝트 요청
서비스 아키텍처 V1.0
MySQL
WAS inst.
Service
UI
서비스가 흥하고 있어!
MySQL
WAS inst.
Service
UI
아직은 매출이…
돈은 없고 트래픽은 처리해야겠고…
캐시를 적용하자
캐시 종류가 너무 많아!!
캐시의 분류
WAS inst.
Service
UI
Cache
Private cache Shared cache
Cache
WAS inst.
Service
UI
Cache Client
우리 서비스에 적절한 캐시는?
캐시 선택
• 지원 기능
• 사용자 그룹
• 업데이트
• 적용성
• 트러블 슈팅
• 지원 라이브러리
서비스 트래픽 분석
캐시 대상 선정
데이터? 페이지?
어떻게?
메인 페이지의 엄친아 관련 영상정보 20개를 캐시에 저장
{
"contents": [
{
"video": {
"title": {
"simpleText": "연구소장님 아들 엄친아 각별 등장?! [마인크래프트
모드어드벤쳐: 초능력 연구소] - Mod Adventure - [잠뜰]"
},
...
},
{
"video": {
"title": {
"simpleText": "금수저, 엄친아, 엄친딸 코스프레
...
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”);
캐시 데이터 조회
캐시 생성
아키텍처 V1.5
MySQL
WAS inst.
Service
UI
Guava
해결 완료!!
예제코드
일정
복부비만
탈출
신기술
구글
검색
칼퇴하자
기계식
키보드
디버깅은 생명
캐시 적용 됐다!!
잘 되네~
퇴근이닷!!
서비스가 흥하고 있어 V2.0
MySQL
WAS inst.
Service
UI
Guava
WAS inst.
Service
UI
Guava
아키텍처 V1.8
MySQL
WAS inst.
Service
UI
Guava
WAS inst.
Service
UI
Guava
Load balancer
기능은 점점 많아지고..
김대리에겐 고통이 찾아온다….
그래 결정했어!!
모놀리틱 to 마이크로
빅뱅?
WAS inst.
Service
UI
Guava
WAS inst.
Service
UI
Guava
검색 API
Service
Guava
회원 API
Service
Guava
메시징 API
Service
Guava
방송 API
Service
Guava
신규작업 Holding하고
아키텍처 변경작업 올인
하지만!!
현실은 녹록치 않다!
feat. 사장님
그래서 점진적 적용
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. 사장님
적용 결과
WAS inst.
Service
UI
Guava
검색 API
Service
Guava
회원 API
Service
Guava
메시징 API
Service
Guava
채팅 API
Service
Guava
Reverse
Proxy
ACL
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
레거시
마이크로 서비스(구현 완료)
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
그 시각 고객센터에서는…
Issue 발생
고객센터 불만
영상의 제목을 바꿨는데 모바일에서는 안 바뀌네요!
영상의 조회수가 늘었다가 줄었다가 해요!
새로 올린 동영상이 보였다 안보였다 해요!
서비스가 좋아지게 바꾼거라며!! 이럴꺼면 왜 바꿨냐?
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) ????
아키텍처 변화 V2.0
Private cache에서 Shared cache로
MySQL
Redis
WAS inst.
Service
UI
Jedis
WAS inst.
Service
UI
Jedis
WAS inst.
Service
UI
Jedis
Load balancer
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();
KeyManager key = new KeyManager...
String mainPageVideoList = jedis.get(key.get(“mainPage”));
JsonParser jsonParser = new JsonParser();
JsonObject mainPageVideoListJson = (JsonObject)jsonParser.parse(mainPageVideoList
);
String to JsonObject
Connection Pool
키 생성 로직
해결 완료!!
예제코드
일정
복부비만
탈출
신기술
구글
검색
칼퇴하자
기계식
키보드
디버깅은 생명
캐시 잘 되네!
퇴근이닷!!
개별 서비스에서 생성한 캐시 키가 충돌하면 장애
Issue
캐시에 저장된 데이터의 키 충돌
Redis
WAS inst.
like 검색
Jedis
WAS inst.
전문검색
Jedis
search:먹방
{hit:{}…}
search:먹방
<html>…
공통 라이브러리 배포 – 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);
키 생성 규칙
아키텍처 변화 V2.1
Cache-lib.jar 배포
MySQL
Redis
WAS inst.
Service
UI
Cache-lib
WAS inst.
Service
UI
Cache-lib
WAS inst.
Service
UI
Cache-lib, Jedis
Load balancer
해결 완료!!
예제코드
일정
복부비만
탈출
신기술
구글
검색
칼퇴하자
기계식
키보드
디버깅은 생명
다 됐다!!
퇴근길 치맥?
어느날 갑자기
서비스 장애
MySQL
Redis
캐시 서버가 죽었다!!!
WAS inst.
Service
UI
Jedis
WAS inst.
Service
UI
Jedis
WAS inst.
Service
UI
Jedis
Load balancer
SPOF
WAS inst.
Service
UI
Guava
Private cache 사용
MySQL
WAS inst.
Service
UI
Guava
WAS inst.
Service
UI
Guava
Load balancer
MS
아키텍처 변화 V2.5
MySQL
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
해결 완료!!
예제코드
일정
복부비만
탈출
신기술
구글
검색
칼퇴하자
기계식
키보드
디버깅은 생명
다 됐다.. 치맥?
그 시각 옆 팀에서는 신규 서비스가
우리도 캐시 쓰게 해주세요
feat. Python
Redis Cluster
NER API
NER
Python,
redis-py
키 생성 규칙 WAS inst.
Service
UI
Java,
Jedis
키 생성 규칙
캐시 서버좀 공유합시다
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
키 생성 규칙
헐!
할일과 고민
캐시 클러스터를 모든 개발팀에 오픈하자
• 굿 아이디어!
오픈 전 고민들
• 사람은 누구나 실수를(flushdb, config set)
• 각 언어에 대한 라이브러리 검토 및 버전관리
• maxclients 1024??
• 키 생성 규칙이 변경되면?
• 개발자의 영원한 숙제 버전 관리!!
라이브러리 버전
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
키 생성 규칙
HTTP 기반 Cache API
S
M
WAS inst.
Service
UI
HttpClient
M M
S S
Redis Cluster
Cache API
Service
Cache-lib, Jedis
장단점
장점
• 클라이언트 라이브러리
• 접근 제어 / Command 제어
• 유연성
단점
• Web API 추가 리소스 필요
• 라이브러리 대비 성능저하(Throughput/Latency)
• 관리 포인트 증가
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… '
HTTP 기반 Cache API 구조
Zookeeper
S
M M M
S S
Redis Cluster
Cache API
Armeria
Netty
Zookeper
Service
Lettuce
Cache API
Service
Cache-lib,
Jedis
Cache API
Service
Cache-lib,
Jedis
WAS inst.
Service
UI
HttpClient
WAS inst.
Service
UI
HttpClient
아키텍처 변화 V3.0
S
MySQL
M
WAS inst.
Service
UI
HttpClient
M M
S S
Redis Cluster
Cache API
Service
Cache-lib,
Jedis
Zookeeper
Load balancer
API가 생각보다 가볍다?
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
Cache API
Service
Cache-lib,
Jedis
Cache API
Service
Cache-lib,
Jedis
WAS inst.
Service
UI
HttpClient
WAS inst.
Service
UI
HttpClient
아키텍처 변화 V3.2
S
MySQL
M
WAS inst.
Service
UI
HttpClient
M M
S S
Redis Cluster
Cache API
Service
Cache-lib,
Jedis
Zookeeper
Load balancer
HA
Proxy
캐시 적용 사례
서비스 적용 상태
조회수 어뷰징 방지
사용자별 영상 조회 정보를 저장
조회수 어뷰징 방지 구현
51213:device6572:2134654 1
사용자 번호 동영상 번호 최종 시청위치
Data(String)Key
동영상 이어보기
단일 사용자별 영상번호와 재생 시간 저장
동영상 이어보기 구현
“vod:view:position:21021”
513224 152
13213 350
78754 30
1028462 35
사용자 번호
동영상 번호 최종 시청위치
Data(Hash)Key
읽음 처리
메시지 번호와 읽은 사용자의 사용자 번호 저장
메시지 읽음처리
두 가지 구현 방법 중 Line의 구현 방법
“msg:readcount:39929:21021”
39929
92943
30233
1355549
사용자 번호 메시지 번호
읽은 사용자 번호
Data(Hash)Key
주간단위 이벤트
이벤트 이름과 사용자 번호에 데이터 저장
기간이 정해진 이벤트
ExpireAt or select <db번호> flushdb
“event:hotsummer:21021”
viewBroad 3
viewVod 7
liveUp 2
addFavorite 1
Data(Hash)Key
사용자 번호
이벤트명 횟수
Copyright ⓒ 2017 SAMSUNG ELECTRONICS. ALL RIGHTS RESERVED
감사합니다

Contenu connexe

Tendances

Hancom MDS Conference - KAKAO DEVOPS Practice (카카오 스토리의 Devops 사례)
Hancom MDS Conference - KAKAO DEVOPS Practice (카카오 스토리의 Devops 사례)Hancom MDS Conference - KAKAO DEVOPS Practice (카카오 스토리의 Devops 사례)
Hancom MDS Conference - KAKAO DEVOPS Practice (카카오 스토리의 Devops 사례)knight1128
 
Kubernetes를 통한 laravel 개발프로세스 개선하기
Kubernetes를 통한 laravel 개발프로세스 개선하기Kubernetes를 통한 laravel 개발프로세스 개선하기
Kubernetes를 통한 laravel 개발프로세스 개선하기Changyeop Kim
 
[141] 오픈소스를 쓰려는 자, 리베이스의 무게를 견뎌라
[141] 오픈소스를 쓰려는 자, 리베이스의 무게를 견뎌라[141] 오픈소스를 쓰려는 자, 리베이스의 무게를 견뎌라
[141] 오픈소스를 쓰려는 자, 리베이스의 무게를 견뎌라NAVER D2
 
BRK3738 - Azure Container Instance로 시작하는 간편한 서버리스 컨테이너 개발
BRK3738 - Azure Container Instance로 시작하는 간편한 서버리스 컨테이너 개발BRK3738 - Azure Container Instance로 시작하는 간편한 서버리스 컨테이너 개발
BRK3738 - Azure Container Instance로 시작하는 간편한 서버리스 컨테이너 개발Jung Hyun Nam
 
Node.js 시작하기
Node.js 시작하기Node.js 시작하기
Node.js 시작하기Huey Park
 
Windows Kubernetes Bootstrapping and Operations
Windows Kubernetes Bootstrapping and OperationsWindows Kubernetes Bootstrapping and Operations
Windows Kubernetes Bootstrapping and OperationsJung Hyun Nam
 
BRK3713 - Microsoft Azure에서 Windows와 Linux를 동시에 사용하는 하이브리드 Kubernetes 클러스터 구축
BRK3713 - Microsoft Azure에서 Windows와 Linux를 동시에 사용하는 하이브리드 Kubernetes 클러스터 구축BRK3713 - Microsoft Azure에서 Windows와 Linux를 동시에 사용하는 하이브리드 Kubernetes 클러스터 구축
BRK3713 - Microsoft Azure에서 Windows와 Linux를 동시에 사용하는 하이브리드 Kubernetes 클러스터 구축Jung Hyun Nam
 
[221] docker orchestration
[221] docker orchestration[221] docker orchestration
[221] docker orchestrationNAVER D2
 
모바일 게임과 앱을 위한 오픈소스 게임서버 엔진 프로젝트 CloudBread 프로젝트
모바일 게임과 앱을 위한 오픈소스 게임서버 엔진 프로젝트 CloudBread 프로젝트모바일 게임과 앱을 위한 오픈소스 게임서버 엔진 프로젝트 CloudBread 프로젝트
모바일 게임과 앱을 위한 오픈소스 게임서버 엔진 프로젝트 CloudBread 프로젝트Dae Kim
 
Quic을 이용한 네트워크 성능 개선
 Quic을 이용한 네트워크 성능 개선 Quic을 이용한 네트워크 성능 개선
Quic을 이용한 네트워크 성능 개선NAVER D2
 
[Play.node] node.js 를 사용한 대규모 글로벌(+중국) 서비스
[Play.node] node.js 를 사용한 대규모 글로벌(+중국) 서비스[Play.node] node.js 를 사용한 대규모 글로벌(+중국) 서비스
[Play.node] node.js 를 사용한 대규모 글로벌(+중국) 서비스Dan Kang (강동한)
 
[NDC17] Kubernetes로 개발서버 간단히 찍어내기
[NDC17] Kubernetes로 개발서버 간단히 찍어내기[NDC17] Kubernetes로 개발서버 간단히 찍어내기
[NDC17] Kubernetes로 개발서버 간단히 찍어내기SeungYong Oh
 
[211]대규모 시스템 시각화 현동석김광림
[211]대규모 시스템 시각화 현동석김광림[211]대규모 시스템 시각화 현동석김광림
[211]대규모 시스템 시각화 현동석김광림NAVER D2
 
[D2 COMMUNITY] Open Container Seoul Meetup - 마이크로 서비스 아키텍쳐와 Docker kubernetes
[D2 COMMUNITY] Open Container Seoul Meetup -  마이크로 서비스 아키텍쳐와 Docker kubernetes[D2 COMMUNITY] Open Container Seoul Meetup -  마이크로 서비스 아키텍쳐와 Docker kubernetes
[D2 COMMUNITY] Open Container Seoul Meetup - 마이크로 서비스 아키텍쳐와 Docker kubernetesNAVER D2
 
파이어베이스 네이버 밋업발표
파이어베이스 네이버 밋업발표파이어베이스 네이버 밋업발표
파이어베이스 네이버 밋업발표NAVER D2
 
AWS와 함께 한 쿠키런 서버 Re-architecting 사례 (Gaming on AWS)
AWS와 함께 한 쿠키런 서버 Re-architecting 사례 (Gaming on AWS)AWS와 함께 한 쿠키런 서버 Re-architecting 사례 (Gaming on AWS)
AWS와 함께 한 쿠키런 서버 Re-architecting 사례 (Gaming on AWS)Brian Hong
 
시간당 수백만 요청을 처리하는 node.js 서버 운영기 - Playnode 2015
시간당 수백만 요청을 처리하는 node.js 서버 운영기 - Playnode 2015시간당 수백만 요청을 처리하는 node.js 서버 운영기 - Playnode 2015
시간당 수백만 요청을 처리하는 node.js 서버 운영기 - Playnode 2015Goonoo Kim
 
Rancher Simple User Guide
Rancher Simple User GuideRancher Simple User Guide
Rancher Simple User GuideSANG WON PARK
 
Big query at GDG Korea Cloud meetup
Big query at GDG Korea Cloud meetupBig query at GDG Korea Cloud meetup
Big query at GDG Korea Cloud meetupJude Kim
 

Tendances (20)

Hancom MDS Conference - KAKAO DEVOPS Practice (카카오 스토리의 Devops 사례)
Hancom MDS Conference - KAKAO DEVOPS Practice (카카오 스토리의 Devops 사례)Hancom MDS Conference - KAKAO DEVOPS Practice (카카오 스토리의 Devops 사례)
Hancom MDS Conference - KAKAO DEVOPS Practice (카카오 스토리의 Devops 사례)
 
Kubernetes를 통한 laravel 개발프로세스 개선하기
Kubernetes를 통한 laravel 개발프로세스 개선하기Kubernetes를 통한 laravel 개발프로세스 개선하기
Kubernetes를 통한 laravel 개발프로세스 개선하기
 
[141] 오픈소스를 쓰려는 자, 리베이스의 무게를 견뎌라
[141] 오픈소스를 쓰려는 자, 리베이스의 무게를 견뎌라[141] 오픈소스를 쓰려는 자, 리베이스의 무게를 견뎌라
[141] 오픈소스를 쓰려는 자, 리베이스의 무게를 견뎌라
 
AWS + Docker in Vingle
AWS + Docker in VingleAWS + Docker in Vingle
AWS + Docker in Vingle
 
BRK3738 - Azure Container Instance로 시작하는 간편한 서버리스 컨테이너 개발
BRK3738 - Azure Container Instance로 시작하는 간편한 서버리스 컨테이너 개발BRK3738 - Azure Container Instance로 시작하는 간편한 서버리스 컨테이너 개발
BRK3738 - Azure Container Instance로 시작하는 간편한 서버리스 컨테이너 개발
 
Node.js 시작하기
Node.js 시작하기Node.js 시작하기
Node.js 시작하기
 
Windows Kubernetes Bootstrapping and Operations
Windows Kubernetes Bootstrapping and OperationsWindows Kubernetes Bootstrapping and Operations
Windows Kubernetes Bootstrapping and Operations
 
BRK3713 - Microsoft Azure에서 Windows와 Linux를 동시에 사용하는 하이브리드 Kubernetes 클러스터 구축
BRK3713 - Microsoft Azure에서 Windows와 Linux를 동시에 사용하는 하이브리드 Kubernetes 클러스터 구축BRK3713 - Microsoft Azure에서 Windows와 Linux를 동시에 사용하는 하이브리드 Kubernetes 클러스터 구축
BRK3713 - Microsoft Azure에서 Windows와 Linux를 동시에 사용하는 하이브리드 Kubernetes 클러스터 구축
 
[221] docker orchestration
[221] docker orchestration[221] docker orchestration
[221] docker orchestration
 
모바일 게임과 앱을 위한 오픈소스 게임서버 엔진 프로젝트 CloudBread 프로젝트
모바일 게임과 앱을 위한 오픈소스 게임서버 엔진 프로젝트 CloudBread 프로젝트모바일 게임과 앱을 위한 오픈소스 게임서버 엔진 프로젝트 CloudBread 프로젝트
모바일 게임과 앱을 위한 오픈소스 게임서버 엔진 프로젝트 CloudBread 프로젝트
 
Quic을 이용한 네트워크 성능 개선
 Quic을 이용한 네트워크 성능 개선 Quic을 이용한 네트워크 성능 개선
Quic을 이용한 네트워크 성능 개선
 
[Play.node] node.js 를 사용한 대규모 글로벌(+중국) 서비스
[Play.node] node.js 를 사용한 대규모 글로벌(+중국) 서비스[Play.node] node.js 를 사용한 대규모 글로벌(+중국) 서비스
[Play.node] node.js 를 사용한 대규모 글로벌(+중국) 서비스
 
[NDC17] Kubernetes로 개발서버 간단히 찍어내기
[NDC17] Kubernetes로 개발서버 간단히 찍어내기[NDC17] Kubernetes로 개발서버 간단히 찍어내기
[NDC17] Kubernetes로 개발서버 간단히 찍어내기
 
[211]대규모 시스템 시각화 현동석김광림
[211]대규모 시스템 시각화 현동석김광림[211]대규모 시스템 시각화 현동석김광림
[211]대규모 시스템 시각화 현동석김광림
 
[D2 COMMUNITY] Open Container Seoul Meetup - 마이크로 서비스 아키텍쳐와 Docker kubernetes
[D2 COMMUNITY] Open Container Seoul Meetup -  마이크로 서비스 아키텍쳐와 Docker kubernetes[D2 COMMUNITY] Open Container Seoul Meetup -  마이크로 서비스 아키텍쳐와 Docker kubernetes
[D2 COMMUNITY] Open Container Seoul Meetup - 마이크로 서비스 아키텍쳐와 Docker kubernetes
 
파이어베이스 네이버 밋업발표
파이어베이스 네이버 밋업발표파이어베이스 네이버 밋업발표
파이어베이스 네이버 밋업발표
 
AWS와 함께 한 쿠키런 서버 Re-architecting 사례 (Gaming on AWS)
AWS와 함께 한 쿠키런 서버 Re-architecting 사례 (Gaming on AWS)AWS와 함께 한 쿠키런 서버 Re-architecting 사례 (Gaming on AWS)
AWS와 함께 한 쿠키런 서버 Re-architecting 사례 (Gaming on AWS)
 
시간당 수백만 요청을 처리하는 node.js 서버 운영기 - Playnode 2015
시간당 수백만 요청을 처리하는 node.js 서버 운영기 - Playnode 2015시간당 수백만 요청을 처리하는 node.js 서버 운영기 - Playnode 2015
시간당 수백만 요청을 처리하는 node.js 서버 운영기 - Playnode 2015
 
Rancher Simple User Guide
Rancher Simple User GuideRancher Simple User Guide
Rancher Simple User Guide
 
Big query at GDG Korea Cloud meetup
Big query at GDG Korea Cloud meetupBig query at GDG Korea Cloud meetup
Big query at GDG Korea Cloud meetup
 

Similaire à Soscon2017 오픈소스를 활용한 마이크로 서비스의 캐시 전략

[2017 AWS Startup Day] 서버리스 마이크로서비스로 일당백 개발조직 만들기
[2017 AWS Startup Day] 서버리스 마이크로서비스로 일당백 개발조직 만들기[2017 AWS Startup Day] 서버리스 마이크로서비스로 일당백 개발조직 만들기
[2017 AWS Startup Day] 서버리스 마이크로서비스로 일당백 개발조직 만들기Amazon Web Services Korea
 
Unionweb프로젝트
Unionweb프로젝트Unionweb프로젝트
Unionweb프로젝트Dong-Jin Park
 
마이크로서비스를 위한 AWS 아키텍처 패턴 및 모범 사례 - AWS Summit Seoul 2017
마이크로서비스를 위한 AWS 아키텍처 패턴 및 모범 사례 - AWS Summit Seoul 2017마이크로서비스를 위한 AWS 아키텍처 패턴 및 모범 사례 - AWS Summit Seoul 2017
마이크로서비스를 위한 AWS 아키텍처 패턴 및 모범 사례 - AWS Summit Seoul 2017Amazon Web Services Korea
 
[오픈소스컨설팅]이기종 WAS 클러스터링 솔루션- Athena Dolly
[오픈소스컨설팅]이기종 WAS 클러스터링 솔루션- Athena Dolly[오픈소스컨설팅]이기종 WAS 클러스터링 솔루션- Athena Dolly
[오픈소스컨설팅]이기종 WAS 클러스터링 솔루션- Athena DollyJi-Woong Choi
 
AWS Code 서비스 특집 - 아마존 DevOps와 CodeDeploy, CodePipeline (윤석찬)
AWS Code 서비스 특집 - 아마존 DevOps와 CodeDeploy, CodePipeline (윤석찬)AWS Code 서비스 특집 - 아마존 DevOps와 CodeDeploy, CodePipeline (윤석찬)
AWS Code 서비스 특집 - 아마존 DevOps와 CodeDeploy, CodePipeline (윤석찬)Amazon Web Services Korea
 
AWS 기반의 마이크로 서비스 아키텍쳐 구현 방안 :: 김필중 :: AWS Summit Seoul 20
AWS 기반의 마이크로 서비스 아키텍쳐 구현 방안 :: 김필중 :: AWS Summit Seoul 20AWS 기반의 마이크로 서비스 아키텍쳐 구현 방안 :: 김필중 :: AWS Summit Seoul 20
AWS 기반의 마이크로 서비스 아키텍쳐 구현 방안 :: 김필중 :: AWS Summit Seoul 20Amazon Web Services Korea
 
마이크로서비스 아키텍처로 개발하기
마이크로서비스 아키텍처로 개발하기마이크로서비스 아키텍처로 개발하기
마이크로서비스 아키텍처로 개발하기Jaewoo Ahn
 
[Korea Linux Forum] Implementing web based online multiplayer tetris with Ope...
[Korea Linux Forum] Implementing web based online multiplayer tetris with Ope...[Korea Linux Forum] Implementing web based online multiplayer tetris with Ope...
[Korea Linux Forum] Implementing web based online multiplayer tetris with Ope...JinKwon Lee
 
Openshift 활용을 위한 Application의 준비, Cloud Native
Openshift 활용을 위한 Application의 준비, Cloud NativeOpenshift 활용을 위한 Application의 준비, Cloud Native
Openshift 활용을 위한 Application의 준비, Cloud Nativerockplace
 
02.JBOSS EAP7(FOR CONTAINER/CLOUD)
02.JBOSS EAP7(FOR CONTAINER/CLOUD)02.JBOSS EAP7(FOR CONTAINER/CLOUD)
02.JBOSS EAP7(FOR CONTAINER/CLOUD)Opennaru, inc.
 
V8 add on with middleware modules
V8 add on with middleware modulesV8 add on with middleware modules
V8 add on with middleware modulesJay Kim
 
빠르게훓어보는 Node.js와 Vert.x
빠르게훓어보는 Node.js와 Vert.x빠르게훓어보는 Node.js와 Vert.x
빠르게훓어보는 Node.js와 Vert.xTerry Cho
 
Social Tutorial Platform: Webbles
Social Tutorial Platform: Webbles Social Tutorial Platform: Webbles
Social Tutorial Platform: Webbles Wonkyung Lyu
 
AWS re:Invent 특집(2) – 서버리스(Serverless) 마이크로서비스를 위한 일곱 가지 모범 사례 (윤석찬)
AWS re:Invent 특집(2) – 서버리스(Serverless) 마이크로서비스를 위한 일곱 가지 모범 사례 (윤석찬)AWS re:Invent 특집(2) – 서버리스(Serverless) 마이크로서비스를 위한 일곱 가지 모범 사례 (윤석찬)
AWS re:Invent 특집(2) – 서버리스(Serverless) 마이크로서비스를 위한 일곱 가지 모범 사례 (윤석찬)Amazon Web Services Korea
 
클라이드 네이티브 기반 Twelve Factor 앱 개발 - 윤석찬, AWS 테크에반젤리스트 :: AWS Summit Online Kore...
클라이드 네이티브 기반 Twelve Factor 앱 개발 - 윤석찬, AWS 테크에반젤리스트 :: AWS Summit Online Kore...클라이드 네이티브 기반 Twelve Factor 앱 개발 - 윤석찬, AWS 테크에반젤리스트 :: AWS Summit Online Kore...
클라이드 네이티브 기반 Twelve Factor 앱 개발 - 윤석찬, AWS 테크에반젤리스트 :: AWS Summit Online Kore...Amazon Web Services Korea
 
AWS Finance Symposium_천만 고객을 위한 AWS 클라우드 아키텍쳐 확장하기
AWS Finance Symposium_천만 고객을 위한 AWS 클라우드 아키텍쳐 확장하기AWS Finance Symposium_천만 고객을 위한 AWS 클라우드 아키텍쳐 확장하기
AWS Finance Symposium_천만 고객을 위한 AWS 클라우드 아키텍쳐 확장하기Amazon Web Services Korea
 
Micro Service Architecture의 이해
Micro Service Architecture의 이해Micro Service Architecture의 이해
Micro Service Architecture의 이해Terry Cho
 
Progressive Web App(PWA) 테코톡 발표자료 - 마르코(장원석)
Progressive Web App(PWA) 테코톡 발표자료 - 마르코(장원석)Progressive Web App(PWA) 테코톡 발표자료 - 마르코(장원석)
Progressive Web App(PWA) 테코톡 발표자료 - 마르코(장원석)Wonseok Jang
 
Cloud life seminar open shift,이준영(배포용)
Cloud life seminar   open shift,이준영(배포용)Cloud life seminar   open shift,이준영(배포용)
Cloud life seminar open shift,이준영(배포용)Software in Life
 
데브옵스(DevOps) 문화 모범 사례와 구현 도구 살펴보기 – 박선준 :: AWS Builders Online Series
데브옵스(DevOps) 문화 모범 사례와 구현 도구 살펴보기 – 박선준 :: AWS Builders Online Series데브옵스(DevOps) 문화 모범 사례와 구현 도구 살펴보기 – 박선준 :: AWS Builders Online Series
데브옵스(DevOps) 문화 모범 사례와 구현 도구 살펴보기 – 박선준 :: AWS Builders Online SeriesAmazon Web Services Korea
 

Similaire à Soscon2017 오픈소스를 활용한 마이크로 서비스의 캐시 전략 (20)

[2017 AWS Startup Day] 서버리스 마이크로서비스로 일당백 개발조직 만들기
[2017 AWS Startup Day] 서버리스 마이크로서비스로 일당백 개발조직 만들기[2017 AWS Startup Day] 서버리스 마이크로서비스로 일당백 개발조직 만들기
[2017 AWS Startup Day] 서버리스 마이크로서비스로 일당백 개발조직 만들기
 
Unionweb프로젝트
Unionweb프로젝트Unionweb프로젝트
Unionweb프로젝트
 
마이크로서비스를 위한 AWS 아키텍처 패턴 및 모범 사례 - AWS Summit Seoul 2017
마이크로서비스를 위한 AWS 아키텍처 패턴 및 모범 사례 - AWS Summit Seoul 2017마이크로서비스를 위한 AWS 아키텍처 패턴 및 모범 사례 - AWS Summit Seoul 2017
마이크로서비스를 위한 AWS 아키텍처 패턴 및 모범 사례 - AWS Summit Seoul 2017
 
[오픈소스컨설팅]이기종 WAS 클러스터링 솔루션- Athena Dolly
[오픈소스컨설팅]이기종 WAS 클러스터링 솔루션- Athena Dolly[오픈소스컨설팅]이기종 WAS 클러스터링 솔루션- Athena Dolly
[오픈소스컨설팅]이기종 WAS 클러스터링 솔루션- Athena Dolly
 
AWS Code 서비스 특집 - 아마존 DevOps와 CodeDeploy, CodePipeline (윤석찬)
AWS Code 서비스 특집 - 아마존 DevOps와 CodeDeploy, CodePipeline (윤석찬)AWS Code 서비스 특집 - 아마존 DevOps와 CodeDeploy, CodePipeline (윤석찬)
AWS Code 서비스 특집 - 아마존 DevOps와 CodeDeploy, CodePipeline (윤석찬)
 
AWS 기반의 마이크로 서비스 아키텍쳐 구현 방안 :: 김필중 :: AWS Summit Seoul 20
AWS 기반의 마이크로 서비스 아키텍쳐 구현 방안 :: 김필중 :: AWS Summit Seoul 20AWS 기반의 마이크로 서비스 아키텍쳐 구현 방안 :: 김필중 :: AWS Summit Seoul 20
AWS 기반의 마이크로 서비스 아키텍쳐 구현 방안 :: 김필중 :: AWS Summit Seoul 20
 
마이크로서비스 아키텍처로 개발하기
마이크로서비스 아키텍처로 개발하기마이크로서비스 아키텍처로 개발하기
마이크로서비스 아키텍처로 개발하기
 
[Korea Linux Forum] Implementing web based online multiplayer tetris with Ope...
[Korea Linux Forum] Implementing web based online multiplayer tetris with Ope...[Korea Linux Forum] Implementing web based online multiplayer tetris with Ope...
[Korea Linux Forum] Implementing web based online multiplayer tetris with Ope...
 
Openshift 활용을 위한 Application의 준비, Cloud Native
Openshift 활용을 위한 Application의 준비, Cloud NativeOpenshift 활용을 위한 Application의 준비, Cloud Native
Openshift 활용을 위한 Application의 준비, Cloud Native
 
02.JBOSS EAP7(FOR CONTAINER/CLOUD)
02.JBOSS EAP7(FOR CONTAINER/CLOUD)02.JBOSS EAP7(FOR CONTAINER/CLOUD)
02.JBOSS EAP7(FOR CONTAINER/CLOUD)
 
V8 add on with middleware modules
V8 add on with middleware modulesV8 add on with middleware modules
V8 add on with middleware modules
 
빠르게훓어보는 Node.js와 Vert.x
빠르게훓어보는 Node.js와 Vert.x빠르게훓어보는 Node.js와 Vert.x
빠르게훓어보는 Node.js와 Vert.x
 
Social Tutorial Platform: Webbles
Social Tutorial Platform: Webbles Social Tutorial Platform: Webbles
Social Tutorial Platform: Webbles
 
AWS re:Invent 특집(2) – 서버리스(Serverless) 마이크로서비스를 위한 일곱 가지 모범 사례 (윤석찬)
AWS re:Invent 특집(2) – 서버리스(Serverless) 마이크로서비스를 위한 일곱 가지 모범 사례 (윤석찬)AWS re:Invent 특집(2) – 서버리스(Serverless) 마이크로서비스를 위한 일곱 가지 모범 사례 (윤석찬)
AWS re:Invent 특집(2) – 서버리스(Serverless) 마이크로서비스를 위한 일곱 가지 모범 사례 (윤석찬)
 
클라이드 네이티브 기반 Twelve Factor 앱 개발 - 윤석찬, AWS 테크에반젤리스트 :: AWS Summit Online Kore...
클라이드 네이티브 기반 Twelve Factor 앱 개발 - 윤석찬, AWS 테크에반젤리스트 :: AWS Summit Online Kore...클라이드 네이티브 기반 Twelve Factor 앱 개발 - 윤석찬, AWS 테크에반젤리스트 :: AWS Summit Online Kore...
클라이드 네이티브 기반 Twelve Factor 앱 개발 - 윤석찬, AWS 테크에반젤리스트 :: AWS Summit Online Kore...
 
AWS Finance Symposium_천만 고객을 위한 AWS 클라우드 아키텍쳐 확장하기
AWS Finance Symposium_천만 고객을 위한 AWS 클라우드 아키텍쳐 확장하기AWS Finance Symposium_천만 고객을 위한 AWS 클라우드 아키텍쳐 확장하기
AWS Finance Symposium_천만 고객을 위한 AWS 클라우드 아키텍쳐 확장하기
 
Micro Service Architecture의 이해
Micro Service Architecture의 이해Micro Service Architecture의 이해
Micro Service Architecture의 이해
 
Progressive Web App(PWA) 테코톡 발표자료 - 마르코(장원석)
Progressive Web App(PWA) 테코톡 발표자료 - 마르코(장원석)Progressive Web App(PWA) 테코톡 발표자료 - 마르코(장원석)
Progressive Web App(PWA) 테코톡 발표자료 - 마르코(장원석)
 
Cloud life seminar open shift,이준영(배포용)
Cloud life seminar   open shift,이준영(배포용)Cloud life seminar   open shift,이준영(배포용)
Cloud life seminar open shift,이준영(배포용)
 
데브옵스(DevOps) 문화 모범 사례와 구현 도구 살펴보기 – 박선준 :: AWS Builders Online Series
데브옵스(DevOps) 문화 모범 사례와 구현 도구 살펴보기 – 박선준 :: AWS Builders Online Series데브옵스(DevOps) 문화 모범 사례와 구현 도구 살펴보기 – 박선준 :: AWS Builders Online Series
데브옵스(DevOps) 문화 모범 사례와 구현 도구 살펴보기 – 박선준 :: AWS Builders Online Series
 

Plus de Kris Jeong

Going asynchronous with netty - SOSCON 2015
Going asynchronous with netty - SOSCON 2015Going asynchronous with netty - SOSCON 2015
Going asynchronous with netty - SOSCON 2015Kris Jeong
 
Redis data design by usecase
Redis data design by usecaseRedis data design by usecase
Redis data design by usecaseKris Jeong
 
This is redis - feature and usecase
This is redis - feature and usecaseThis is redis - feature and usecase
This is redis - feature and usecaseKris Jeong
 
이것이 레디스다.
이것이 레디스다.이것이 레디스다.
이것이 레디스다.Kris Jeong
 
REDIS intro and how to use redis
REDIS intro and how to use redisREDIS intro and how to use redis
REDIS intro and how to use redisKris Jeong
 

Plus de Kris Jeong (6)

Going asynchronous with netty - SOSCON 2015
Going asynchronous with netty - SOSCON 2015Going asynchronous with netty - SOSCON 2015
Going asynchronous with netty - SOSCON 2015
 
Redis data design by usecase
Redis data design by usecaseRedis data design by usecase
Redis data design by usecase
 
This is redis - feature and usecase
This is redis - feature and usecaseThis is redis - feature and usecase
This is redis - feature and usecase
 
이것이 레디스다.
이것이 레디스다.이것이 레디스다.
이것이 레디스다.
 
Active MQ
Active MQActive MQ
Active MQ
 
REDIS intro and how to use redis
REDIS intro and how to use redisREDIS intro and how to use redis
REDIS intro and how to use redis
 

Soscon2017 오픈소스를 활용한 마이크로 서비스의 캐시 전략

Notes de l'éditeur

  1. 사람은 실수를 통해서 배웁니다. 처음 개발된 결과물이 김대리의 삽질을 통해 변화하는 과정을 같이 살펴보겠습니다.
  2. 먼저 김대리 소개를 하겠습니다.
  3. 서버 위치 선택
  4. 개발 스택 선택
  5. 서비스가 점점 느려진다.. 두둥
  6. IMDB IMDG
  7. Private : 도입이 쉬움, 별도의 비용이 발생하지 않음. Shared : 별도 서버 구축으로 인한 비용 발생
  8. 이런게 없다면 Access log를 통해서 데이터 생성
  9. 그런데 서비스가 점점 느려진다고 항의가 빗발치네?
  10. 됐어 자연스러웠어.
  11. 그런데 서비스가 점점 느려진다고 항의가 빗발치네?
  12. 돈도 있고 장비 증설로 해결!
  13. 개발에 소요되는 시간은 어찌할 것이며 빅뱅 했다가 실패하면 누가 책임질래?
  14. 세션 대신 API 토큰 선 적용 필요.
  15. 세션 대신 API 토큰 선 적용 필요.
  16. 근본 원인은 캐시간 데이터 불일치
  17. 그런데 서비스가 점점 느려진다고 항의가 빗발치네?
  18. 그런데 서비스가 점점 느려진다고 항의가 빗발치네?
  19. 공유 캐시를 적용하니 이전에는 생각하지 않아도 되었던 이슈. Cache 서버 Fault와 장애!
  20. 인스턴스의 장애가 서비스 장애로 이어지지 않음.
  21. Redis 라이브러리 패치, Redis 클러스터 패치  전체 서비스 파급
  22. Redis 라이브러리 패치, Redis 클러스터 패치  전체 서비스 파급
  23. Read from 이슈. Jedis는 Master slave switch가 이루어지지 않음.
  24. 그런데 서비스가 점점 느려진다고 항의가 빗발치네?
  25. 왜 굳이 이걸?
  26. 5명의 방송 10분 이상 시청 VOD 10개 시청 Live 방송 추천하기 즐겨찾기 하기