오픈소스 성능 최적화 보고서 ch07. infinispan
TRANSCRIPT
!
오픈소스����������� ������������������ 소프트웨어����������� ������������������ 성능����������� ������������������ 최적화����������� ������������������ 보고서����������� ������������������ Ch.7����������� ������������������ Infinispan
아꿈사����������� ������������������ cecil
Introduction
데이터����������� ������������������ 그리드����������� ������������������ 플랫폼����������� ������������������ ����������� ������������������
분산����������� ������������������ 메모리����������� ������������������ 시스템으로����������� ������������������ Key-value����������� ������������������ 저장����������� ������������������ 기능����������� ������������������ 제공����������� ������������������
!
•주로����������� ������������������ 비싸고����������� ������������������ 느린����������� ������������������ 저장소(RDB)와����������� ������������������ 서버����������� ������������������ 사이의����������� ������������������ 캐시����������� ������������������ 역활로����������� ������������������ 사용����������� ������������������
•일부에서는����������� ������������������ RDB를����������� ������������������ 대체.����������� ������������������
•분산����������� ������������������ 메모리의����������� ������������������ 존재����������� ������������������ 이유!����������� ������������������ 성능!����������� ������������������ 오직����������� ������������������ 성능!
Overview
미들웨어����������� ������������������ 범주에����������� ������������������ 속하는����������� ������������������ 소프트웨어로����������� ������������������
응용����������� ������������������ 프로그램의����������� ������������������ 계층과����������� ������������������ 저장����������� ������������������ 계층����������� ������������������ 사이에����������� ������������������ 주로����������� ������������������ 위치����������� ������������������
!!
데이터����������� ������������������ 베이스만����������� ������������������ 사용할����������� ������������������ 경우����������� ������������������ 이슈����������� ������������������ •많은����������� ������������������ 경우����������� ������������������ 성능의����������� ������������������ 가장����������� ������������������ 큰����������� ������������������ 병목����������� ������������������ 지점은����������� ������������������ 자료의����������� ������������������ 저장/조회����������� ������������������ 부분����������� ������������������
✓ 데이터����������� ������������������ 베이스����������� ������������������ 앞에����������� ������������������ 캐시����������� ������������������ 계층을����������� ������������������ 둘����������� ������������������ 경우����������� ������������������ 성능����������� ������������������ 향상����������� ������������������
•경합과����������� ������������������ 잠재적����������� ������������������ 실패가����������� ������������������ 집중되는����������� ������������������ 단일����������� ������������������ 지점
적용����������� ������������������ 구조����������� ������������������ -����������� ������������������ 라이브러리로����������� ������������������ 사용
Java����������� ������������������ 응용����������� ������������������ 프로그램에����������� ������������������ 내장하는����������� ������������������ 방법����������� ������������������
응용����������� ������������������ 프로그램의����������� ������������������ 힙����������� ������������������ 메모리의����������� ������������������ 일부를����������� ������������������ 캐시����������� ������������������ 메모리로����������� ������������������ 사용
적용����������� ������������������ 구조����������� ������������������ -����������� ������������������ 클러스터����������� ������������������ 서버����������� ������������������ 구조로����������� ������������������ 사용분산����������� ������������������ 캐시����������� ������������������ 서버로����������� ������������������ 사용����������� ������������������
infinispan����������� ������������������ 노드를����������� ������������������ 여러개����������� ������������������ 띄워서����������� ������������������ 하나의����������� ������������������ 클러스터를����������� ������������������ 형성����������� ������������������ 각����������� ������������������ 노드는����������� ������������������ 자신만의����������� ������������������ 격리된����������� ������������������ JVM����������� ������������������ 안에����������� ������������������ 위치
Features
•데이터는����������� ������������������ 클러스터����������� ������������������ 내의����������� ������������������ 모든����������� ������������������ 서버에����������� ������������������ 투명하게����������� ������������������ 분사되어����������� ������������������ 저장됨����������� ������������������
•SPOF(Single����������� ������������������ Point����������� ������������������ Of����������� ������������������ Failure)가����������� ������������������ 존재하지����������� ������������������ 않음.����������� ������������������
•인스턴스����������� ������������������ 추가를����������� ������������������ 통한����������� ������������������ Scale-out����������� ������������������ 기능����������� ������������������ 제공����������� ������������������
•인스턴스����������� ������������������ 종료를����������� ������������������ 통한����������� ������������������ Scale-in����������� ������������������ 가능����������� ������������������
•전반적인����������� ������������������ 기능����������� ������������������ 손실����������� ������������������ 없이����������� ������������������ Scale-in/out����������� ������������������ 기능����������� ������������������ 제공
Benchmarking
•Radar����������� ������������������ Gun����������� ������������������
•경쟁/비교����������� ������������������ 벤치마크����������� ������������������ 수행하고����������� ������������������ 보고서를����������� ������������������ 생성하는����������� ������������������ 오픈����������� ������������������ 소스����������� ������������������ 벤치마킹����������� ������������������ 프레임워크����������� ������������������
•Yahoo����������� ������������������ Cloud����������� ������������������ Serving����������� ������������������ Benchmark����������� ������������������
•다양한����������� ������������������ 크기의����������� ������������������ 자료를����������� ������������������ 읽거나����������� ������������������ 쓰기����������� ������������������ 위해����������� ������������������ 원격����������� ������������������ 저장소와����������� ������������������ 통신할때����������� ������������������ 잠복지연을����������� ������������������ 검사����������� ������������������
•Grinder,����������� ������������������ Apache����������� ������������������ JMeter����������� ������������������
•오픈소스����������� ������������������ 부하����������� ������������������ 생성기
Radar����������� ������������������ Gun
분산����������� ������������������ 테스트:����������� ������������������ 인스턴스를����������� ������������������ ����������� ������������������ 서로����������� ������������������ 다른����������� ������������������ 서버에����������� ������������������ ����������� ������������������
실행시켜,����������� ������������������ 각����������� ������������������ 분산����������� ������������������ 서비스����������� ������������������ 노드의����������� ������������������ 성능을����������� ������������������ 테스트
주요����������� ������������������ Features����������� ������������������
•프로파일링����������� ������������������
•메모리����������� ������������������ 성능����������� ������������������
•성능����������� ������������������ 측정:����������� ������������������ tps����������� ������������������
•확장성
Prime����������� ������������������ Suspects
•Network����������� ������������������
•Data����������� ������������������ serialization����������� ������������������
•Writing����������� ������������������ to����������� ������������������ Disk����������� ������������������
•Synchronization,����������� ������������������ Locking����������� ������������������ and����������� ������������������ Concurrency����������� ������������������
•Threads����������� ������������������ and����������� ������������������ Context����������� ������������������ Switching����������� ������������������
•Garbage����������� ������������������ Collection
Network
•Infinispan에서����������� ������������������ 네트워크����������� ������������������ 통신은����������� ������������������ 비용이����������� ������������������ 가장����������� ������������������ 큰����������� ������������������ 부분����������� ������������������
•노드����������� ������������������ -����������� ������������������ 노드����������� ������������������ •노드간����������� ������������������ 통신에서����������� ������������������ JGroups을����������� ������������������ 사용����������� ������������������
•JGroup:����������� ������������������ TCP/UDP를����������� ������������������ 지원하는����������� ������������������ 클러스터����������� ������������������ 구성을����������� ������������������ 위한����������� ������������������ 신뢰성����������� ������������������ 있는����������� ������������������ 메시징����������� ������������������ 라이브러리����������� ������������������
•JGroup을����������� ������������������ 네트워크와����������� ������������������ 응용����������� ������������������ 프로그램의����������� ������������������ 특성에����������� ������������������ 맞게����������� ������������������ 조율(스레드����������� ������������������ 풀,����������� ������������������ 버퍼����������� ������������������ 크기����������� ������������������ 등..)����������� ������������������
•JGroups����������� ������������������ 번들링,����������� ������������������ 단편화����������� ������������������ 방식에����������� ������������������ 맞게����������� ������������������ 응용����������� ������������������ 프로그램의����������� ������������������ 특성을����������� ������������������ 조율����������� ������������������
•서버����������� ������������������ 소켓����������� ������������������ •TCP����������� ������������������ 전송/수신����������� ������������������ 버퍼����������� ������������������ 크기,����������� ������������������ 프레임����������� ������������������ 크기,����������� ������������������ 점보����������� ������������������ 프레임����������� ������������������ 크기를����������� ������������������ 조욜����������� ������������������
•Netty����������� ������������������ 사용:����������� ������������������ 최적의����������� ������������������ 성능����������� ������������������ 보장하기����������� ������������������ 위한����������� ������������������ 여러����������� ������������������ 수준의����������� ������������������ 조율����������� ������������������ 수단����������� ������������������ 제공
Data����������� ������������������ serialization
•하나의����������� ������������������ 요청을����������� ������������������ 처리하는데����������� ������������������ 걸리는����������� ������������������ 시간의����������� ������������������ 20%를����������� ������������������ 소요����������� ������������������
•Java의����������� ������������������ 기본����������� ������������������ 직렬화는����������� ������������������ 성능이����������� ������������������ 좋지����������� ������������������ 못함.����������� ������������������
•메타����������� ������������������ 데이터가����������� ������������������ 포함됨:����������� ������������������ 클래스����������� ������������������ 정의����������� ������������������ 등..����������� ������������������
•Externalizer를����������� ������������������ 통하여����������� ������������������ 직접����������� ������������������ 구현����������� ������������������
•불필요한����������� ������������������ 메타����������� ������������������ 데이터를����������� ������������������ 줄임����������� ������������������
•개발적으로����������� ������������������ 재사용����������� ������������������ 가능����������� ������������������ 라이브러리:����������� ������������������ JBoss����������� ������������������ Marshalling
Writing����������� ������������������ to����������� ������������������ Disk
•기본적으로����������� ������������������ 내부����������� ������������������ 자료����������� ������������������ 구조이지만,����������� ������������������ 영구����������� ������������������ 기록����������� ������������������ 기능도����������� ������������������ 제공����������� ������������������
•내구성을����������� ������������������ 위해����������� ������������������ (노드의����������� ������������������ 재시작,����������� ������������������ 고장)����������� ������������������
•메모리����������� ������������������ 부족����������� ������������������ 이슈를����������� ������������������ 해결����������� ������������������
•파일����������� ������������������ 시스템����������� ������������������ 기반의����������� ������������������ 고성능����������� ������������������ 네이티브����������� ������������������ 저장소����������� ������������������ 준비중����������� ������������������
•메모리����������� ������������������ 부족����������� ������������������ 이슈를����������� ������������������ 해결을����������� ������������������ 위한����������� ������������������ 페이징����������� ������������������ 용도의����������� ������������������ 최적화된����������� ������������������ B����������� ������������������ 트리구조����������� ������������������
•내구성을����������� ������������������ 위해����������� ������������������ 쓰기는����������� ������������������ 빠르지만,����������� ������������������ 읽기/탐색은����������� ������������������ 빠를����������� ������������������ 필요가����������� ������������������ 없는����������� ������������������ 추가����������� ������������������ 전용����������� ������������������ 구조
Synchronization,����������� ������������������ Locking����������� ������������������ and����������� ������������������ Concurrency
•핵심����������� ������������������ 자료����������� ������������������ 구조는����������� ������������������ 동시����������� ������������������ 접근����������� ������������������ 시����������� ������������������ 소프트웨어����������� ������������������ 트랜잭션����������� ������������������ 메모리����������� ������������������ 사용����������� ������������������
•향후����������� ������������������ 하드웨어����������� ������������������ 지원����������� ������������������ 시����������� ������������������ 많은����������� ������������������ 수정이����������� ������������������ 필요����������� ������������������ 없음.����������� ������������������
•Lock,����������� ������������������ Mutex등의����������� ������������������ 동기화����������� ������������������ 수단의����������� ������������������ 필요성을����������� ������������������ 최소화����������� ������������������
•또한����������� ������������������ 학술����������� ������������������ 논문을����������� ������������������ 참고하여,����������� ������������������ lock-free����������� ������������������ 구현����������� ������������������ 기법을����������� ������������������ 최대한����������� ������������������ 적용
Threads����������� ������������������ and����������� ������������������ Context����������� ������������������ Switching
Infinispan의����������� ������������������ 서브����������� ������������������ 시스템들은����������� ������������������ 별도의����������� ������������������ ����������� ������������������
스레드풀을����������� ������������������ 사용하여����������� ������������������ 비동기����������� ������������������ 연산을����������� ������������������ 지원����������� ������������������ !
스레드����������� ������������������ 자체는����������� ������������������ 값싼����������� ������������������ 자원이����������� ������������������ 아님.����������� ������������������
조율이����������� ������������������ 필요
Ex)����������� ������������������ 비동기����������� ������������������ 전송����������� ������������������ 스레드����������� ������������������ 풀의����������� ������������������ 스레드의����������� ������������������ 수����������� ������������������
•노드의����������� ������������������ 평균����������� ������������������ 동시����������� ������������������ 갱신����������� ������������������ 횟수����������� ������������������ 이상
Garbage����������� ������������������ Collection
•JVM의����������� ������������������ Garbage����������� ������������������ Collection의����������� ������������������ 일반적인����������� ������������������ 관행을����������� ������������������ 따름����������� ������������������
•만약,����������� ������������������ GC����������� ������������������ 중����������� ������������������ 응답이����������� ������������������ 없다면����������� ������������������ 노드가����������� ������������������ 고장난����������� ������������������ 것으로����������� ������������������ 판단����������� ������������������ 우려가����������� ������������������ 있음.����������� ������������������
•Open����������� ������������������ JDK����������� ������������������ or����������� ������������������ Oracle����������� ������������������ HostSpot����������� ������������������ JVM에서는����������� ������������������ CMS����������� ������������������
(Concurrent����������� ������������������ Mark����������� ������������������ and����������� ������������������ Sweep)가����������� ������������������ 최적의����������� ������������������ 설정����������� ������������������
•응답성이����������� ������������������ 문제가����������� ������������������ 될경우����������� ������������������ C4(Azul의����������� ������������������ Zing����������� ������������������ JVM)을����������� ������������������ 고려
Reference• 테이비시����������� ������������������ 암스트롱����������� ������������������ 엮음.����������� ������������������ 오픈소스����������� ������������������ 소프트웨어����������� ������������������ 성능����������� ������������������ 최적화����������� ������������������ 보고서.����������� ������������������ (류광����������� ������������������ 옮김).����������� ������������������ 경기도����������� ������������������ 파주:����������� ������������������ 제이펍,����������� ������������������ 2014