고성능 트랜잭션 처리를위한 모든 종류의 기술이 있으며 Fowler의 기사에 나오는 기술은 최첨단 기술 중 하나 일뿐입니다. 다른 사람의 상황에 적용 할 수도 있고 적용되지 않을 수있는 많은 기술을 나열하는 것보다는 기본 원칙과 LMAX가 많은 기술을 다루는 방법에 대해 논의하는 것이 좋습니다.
대규모 트랜잭션 처리 시스템의 경우 가능한 한 다음을 모두 수행하려고합니다.
가장 느린 스토리지 계층에서 소요되는 시간을 최소화하십시오. 최신 서버에서 가장 빠르거나 느린 서버 : CPU / L1-> L2-> L3-> RAM-> 디스크 / LAN-> WAN. 가장 빠른 최신 자기 디스크에서 가장 느린 RAM으로의 점프는 순차적 액세스를 위해 1000x 이상입니다 . 랜덤 액세스는 더욱 악화됩니다.
대기 시간을 최소화하거나 제거하십시오 . 이는 가능한 한 적은 상태를 공유하고, 상태 를 공유 해야하는 경우 가능할 때마다 명시 적 잠금을 피하는 것을 의미합니다.
작업량을 분산 시키십시오. CPU는 훨씬 더 빨리 지난 몇 년 동안 못 했어,하지만 그들은 한 작은 입수, 8 개 코어 서버에 매우 일반적이다. 그 외에도 Google의 접근 방식 인 여러 머신에 작업을 분산시킬 수도 있습니다. 이것에 대한 좋은 점은 I / O를 포함한 모든 것을 확장한다는 것입니다 .
Fowler에 따르면 LMAX는 다음과 같은 방법을 사용합니다.
계속 모두 에서 메모리의 상태를 모든 시간. 전체 데이터베이스가 메모리에 들어갈 수 있다면 대부분의 데이터베이스 엔진은 실제로 어쨌든이 작업 을 수행하지만 실시간 거래 플랫폼에서 이해할 수있는 기회를 남기고 싶지 않습니다. 엄청난 위험을 초래하지 않고이 문제를 해결하기 위해 경량의 백업 및 장애 조치 인프라를 구축해야했습니다.
입력 이벤트 스트림에 잠금없는 큐 ( "중단기")를 사용하십시오. 기존의 내구성에 대비 메시지 큐 결정적입니다 하지 무료 잠금, 실제로 보통 고통스럽게 느린 포함 분산 트랜잭션을 .
별로. LMAX는 워크로드가 상호 의존적이라는 사실에 기초하여 버스 아래에 이것을 던집니다. 하나의 결과는 다른 것의 매개 변수를 변경합니다. 이것은 중요한 경고이며 Fowler가 명시 적으로 지적합니다. 그들은 어떻게해야합니까 몇 가지 장애 복구 기능을 제공하기 위해 동시성을 사용하지만, 모든 비즈니스 로직은에서 처리 단일 스레드 .
LMAX가 대규모 OLTP에 대한 유일한 접근 방식 은 아닙니다 . 또한 자체적으로는 훌륭하지만 성능 수준을 높이기 위해 최첨단 기술을 사용할 필요 는 없습니다 .
위의 모든 원칙 중 # 3은 아마도 가장 중요하고 가장 효과적 일 것입니다. 솔직히 하드웨어는 저렴하기 때문입니다. 수십 개의 코어와 수십 개의 시스템에서 워크로드를 올바르게 분할 할 수 있다면 기존 병렬 컴퓨팅 기술 의 한계가 하늘에 있습니다. 많은 메시지 대기열과 라운드 로빈 배포자만으로도 처리량을 얼마나 줄일 수 있는지 놀랄 것입니다. LMAX만큼 효율적이지는 않지만 실제로는 근접하지는 않지만 처리량, 대기 시간 및 비용 효율성은 별도의 문제이며 여기서는 처리량에 대해 구체적으로 이야기하고 있습니다.
LMAX와 같은 특별한 요구 사항, 특히 성급한 디자인 선택이 아닌 비즈니스 현실에 해당하는 공유 상태가 있다면 그 구성 요소를 사용해 보는 것이 좋습니다. 그렇지 않으면 해당 요구 사항에 적합합니다. 그러나 우리가 단순히 높은 확장성에 대해 이야기하고 있다면 분산 시스템에 대한 더 많은 연구를 할 것을 권장합니다. 왜냐하면 오늘날 대부분의 조직에서 사용하는 표준 접근 방식이기 때문입니다 (Hadoop 및 관련 프로젝트, ESB 및 관련 아키텍처, CQRS 언급 등).
SSD는 또한 게임 체인저가 될 것입니다. 틀림없이, 그들은 이미 있습니다. 이제 RAM에 대한 액세스 시간이 비슷한 영구 스토리지를 보유 할 수 있으며 서버급 SSD는 여전히 비싸지 만 채택률이 높아지면 결국 가격이 내려갑니다. 그것은 광범위하게 연구되어 왔으며 결과는 꽤 놀랍고 시간이 지남에 따라 더 좋아질 것이므로 전체 "메모리에 모든 것을 유지"개념은 이전보다 훨씬 덜 중요합니다. 다시 한 번, 가능할 때마다 동시성에 초점을 맞추려고합니다.