Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

2,666 views

Published on

모놀리틱 아키텍처에서 마이크로 서비스로.
서비스 전환점에서 적용 가능한 캐시 전략.
Cache Http API 지원으로 유연성 제공.
Cache API를 구성하는 컴포넌트 설명.

Published in: Software
  • Sex in your area is here: www.bit.ly/sexinarea
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Dating for everyone is here: www.bit.ly/2AJerkH
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • DOWNLOAD THAT BOOKS/FILE INTO AVAILABLE FORMAT - (Unlimited) ......................................................................................................................... ......................................................................................................................... Download FULL PDF EBOOK here { http://bit.ly/2m6jJ5M } ......................................................................................................................... .............. Browse by Genre Available eBooks ......................................................................................................................... accessibility Books Library allowing access to top content, including thousands of title from favorite author, plus the ability to read or download a huge selection of books for your pc or smartphone within minutes Christian, Classics, Comics, Contemporary, Cookbooks, Art, Biography, Business, Chick Lit, Children's, Manga, Memoir, Music, Science, Science Fiction, Self Help, History, Horror, Humor And Comedy, Suspense, Spirituality, Sports, Thriller, Travel, Young Adult, Crime, Ebooks, Fantasy, Fiction, Graphic Novels, Historical Fiction, Mystery, Non Fiction, Paranormal, Philosophy, Poetry, Psychology, Religion, Romance,
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • DOWNLOAD THIS BOOKS INTO AVAILABLE FORMAT (Unlimited) ......................................................................................................................... ......................................................................................................................... Download Full PDF EBOOK here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... Download Full EPUB Ebook here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... ACCESS WEBSITE for All Ebooks ......................................................................................................................... Download Full PDF EBOOK here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... Download EPUB Ebook here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... Download doc Ebook here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... ......................................................................................................................... ......................................................................................................................... .............. Browse by Genre Available eBooks ......................................................................................................................... Art, Biography, Business, Chick Lit, Children's, Christian, Classics, Comics, Contemporary, Cookbooks, Crime, Ebooks, Fantasy, Fiction, Graphic Novels, Historical Fiction, History, Horror, Humor And Comedy, Manga, Memoir, Music, Mystery, Non Fiction, Paranormal, Philosophy, Poetry, Psychology, Religion, Romance, Science, Science Fiction, Self Help, Suspense, Spirituality, Sports, Thriller, Travel, Young Adult,
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • DOWNLOAD THIS BOOKS INTO AVAILABLE FORMAT (Unlimited) ......................................................................................................................... ......................................................................................................................... Download Full PDF EBOOK here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... Download Full EPUB Ebook here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... ACCESS WEBSITE for All Ebooks ......................................................................................................................... Download Full PDF EBOOK here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... Download EPUB Ebook here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... Download doc Ebook here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... ......................................................................................................................... ......................................................................................................................... .............. Browse by Genre Available eBooks ......................................................................................................................... Art, Biography, Business, Chick Lit, Children's, Christian, Classics, Comics, Contemporary, Cookbooks, Crime, Ebooks, Fantasy, Fiction, Graphic Novels, Historical Fiction, History, Horror, Humor And Comedy, Manga, Memoir, Music, Mystery, Non Fiction, Paranormal, Philosophy, Poetry, Psychology, Religion, Romance, Science, Science Fiction, Self Help, Suspense, Spirituality, Sports, Thriller, Travel, Young Adult,
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

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

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

×