Skip to main content

14. 고성능 로깅 및 메시징

자바는 C++ 에 비해 여러 장단점이 있습니다.

  • 장점 : 개발자가 신경써야하는 저수준 관심사를 줄임으로서 생산성을 높입니다.
  • 단점 : 저수준 제어를 포기하고 성능 자체를 직접 다룰 수 없는 단점이 있습니다.

자바 플랫폼의 철학은 저수준의 세부 관심사에서 벗어나는 것입니다.

지연에 민감한 고성능 애플리케이션을 다룰 때 개발자가 고려해야하는 이슈는 다음과 같습니다.

  • 로깅
  • 메시징

로깅#

  • 일반적으로 로깅은 크게 신경쓰지않습니다.
  • 그러나 로거는 실제 모든 애플리케이션에서 중요한 부분 중 하나입니다.
  • 대부분의 고성능 환경에서는 처리 정확도와 리포팅이 속도 만큼 중요합니다.

로깅 벤치마크#

일반적으로 많이 쓰는 로거는 다음과 깉습니다.

  • Logback, Log4j, java.util.logging
  • 일반적으로 Logback이 성능이 좋고, 자바 유틸 로거는 그렇게 좋지않습니다. Log4j 포맷은 전반적으로 가장 일관된 결과를 보입니다.

성능에 영향이 적은 로거 설계하기#

  • 로깅은 모든 애플리케이션의 필수 컴포넌트이지만, 저지연 애플리케이션에서 로거는 비즈니스 로직 성능에 병목 현상을 초래해서는 안됩니다.
  • Log4j를 SLF4J로 감짜면 퍼사드가 매개변수를 2개만 지원하기 때무에, 코드 베이스를 리팩터링할 필요가 없습니다.

리얼 로직 라이브러리를 통해서 지연 줄이기#

리얼 로직은 저수준 세부의 이해가 곡성능 설계에 영향을 미칩니다.

  • 아그로나 : 자바용 고성능 자료 구조 및 유틸리티 메서드
  • 단순 바이너리 인코딩 : 고성능 메시지 코덱
  • 에어론 : 효율적/안정적인 UDP 유니캐스트, UDP 멀티캐스트, IPC 메시지 전송
  • 아티오 : 탄력적인 고성능 FIX 게이트웨이

아그로나#

  • 진정한 저지연 애플리케이션 전용 구성 요소를 담아놓은 라이브러리
  • 아그로나 버퍼

image

  • 아그로나 리스트, 맵, 세트
  • 아그로나 큐
    • OneToOneConcurrentArrayQueue
    • ManyToManyConcurrentArrayQueue
    • ManyToOneConcurrentArrayQueue
  • 링 버퍼

단순 바이너리 인코딩#

  • 캬피-프리, 네이티브 타입 매핑
  • 정상 상태 할당
  • 스트리밍/단어 정렬 액세스
  • SBE, 메시 레이아웃을 즉정한 XML 스키마 파일

에어론#

  • 아키텍처 구조

image

에어론의 설계 개념#

  • 구독자
  • 전송 요건
    • 정렬 : 섞인 메시지를 다시 정렬합니다.
    • 신뢰성 : 유실된 데이터는 재요청해야합니다.
    • 배압 : 흐름 제어 및 배압 측정 서비스가 필요합니다.
    • 혼잡 : 네프워크가 포화시 혼잡이 발생합니다.
    • 다중화 : 전체 성능을 떨어트리지 않고 단일 채널에서 다중 정보 스트림을 처리해야합니다.
  • 지연 및 애플리케이션 원칙
    • 정상 상태에서 가비지-프리 실행
    • 메시지 경로에 스마트 배칭 적용
    • 메시 경로의 락-프리 알고리증
    • 메시지 경로의 논블로킹 I/O
    • 메시지 경로의 비예외 케이스
    • 단일 출력기 원칙을 적용
    • 공유 안하는 상태가 더 좋습니다.
  • 내부 작동 원리
    • 효율적인 메시지 처리 시스템을 구축하기 위해 스킵리스트 등을 사용합니다.
    • image
Last updated on