14. 고성능 로깅 및 메시징
자바는 C++ 에 비해 여러 장단점이 있습니다.
- 장점 : 개발자가 신경써야하는 저수준 관심사를 줄임으로서 생산성을 높입니다.
- 단점 : 저수준 제어를 포기하고 성능 자체를 직접 다룰 수 없는 단점이 있습니다.
자바 플랫폼의 철학은 저수준의 세부 관심사에서 벗어나는 것입니다.
지연에 민감한 고성능 애플리케이션을 다룰 때 개발자가 고려해야하는 이슈는 다음과 같습니다.
- 로깅
- 메시징
#
로깅- 일반적으로 로깅은 크게 신경쓰지않습니다.
- 그러나 로거는 실제 모든 애플리케이션에서 중요한 부분 중 하나입니다.
- 대부분의 고성능 환경에서는 처리 정확도와 리포팅이 속도 만큼 중요합니다.
#
로깅 벤치마크일반적으로 많이 쓰는 로거는 다음과 깉습니다.
Logback
,Log4j
,java.util.logging
- 일반적으로 Logback이 성능이 좋고, 자바 유틸 로거는 그렇게 좋지않습니다. Log4j 포맷은 전반적으로 가장 일관된 결과를 보입니다.
#
성능에 영향이 적은 로거 설계하기- 로깅은 모든 애플리케이션의 필수 컴포넌트이지만, 저지연 애플리케이션에서 로거는 비즈니스 로직 성능에 병목 현상을 초래해서는 안됩니다.
- Log4j를 SLF4J로 감짜면 퍼사드가 매개변수를 2개만 지원하기 때무에, 코드 베이스를 리팩터링할 필요가 없습니다.
#
리얼 로직 라이브러리를 통해서 지연 줄이기리얼 로직은 저수준 세부의 이해가 곡성능 설계에 영향을 미칩니다.
- 아그로나 : 자바용 고성능 자료 구조 및 유틸리티 메서드
- 단순 바이너리 인코딩 : 고성능 메시지 코덱
- 에어론 : 효율적/안정적인 UDP 유니캐스트, UDP 멀티캐스트, IPC 메시지 전송
- 아티오 : 탄력적인 고성능 FIX 게이트웨이
#
아그로나- 진정한 저지연 애플리케이션 전용 구성 요소를 담아놓은 라이브러리
- 아그로나 버퍼
- 아그로나 리스트, 맵, 세트
- 아그로나 큐
OneToOneConcurrentArrayQueue
ManyToManyConcurrentArrayQueue
ManyToOneConcurrentArrayQueue
- 링 버퍼
#
단순 바이너리 인코딩- 캬피-프리, 네이티브 타입 매핑
- 정상 상태 할당
- 스트리밍/단어 정렬 액세스
- SBE, 메시 레이아웃을 즉정한 XML 스키마 파일
#
에어론- 아키텍처 구조
#
에어론의 설계 개념- 구독자
- 전송 요건
- 정렬 : 섞인 메시지를 다시 정렬합니다.
- 신뢰성 : 유실된 데이터는 재요청해야합니다.
- 배압 : 흐름 제어 및 배압 측정 서비스가 필요합니다.
- 혼잡 : 네프워크가 포화시 혼잡이 발생합니다.
- 다중화 : 전체 성능을 떨어트리지 않고 단일 채널에서 다중 정보 스트림을 처리해야합니다.
- 지연 및 애플리케이션 원칙
- 정상 상태에서 가비지-프리 실행
- 메시지 경로에 스마트 배칭 적용
- 메시 경로의 락-프리 알고리증
- 메시지 경로의 논블로킹 I/O
- 메시지 경로의 비예외 케이스
- 단일 출력기 원칙을 적용
- 공유 안하는 상태가 더 좋습니다.
- 내부 작동 원리
- 효율적인 메시지 처리 시스템을 구축하기 위해 스킵리스트 등을 사용합니다.