Istnieją wszelkiego rodzaju techniki przetwarzania transakcji o wysokiej wydajności, a ta w artykule Fowlera jest tylko jedną z wielu najnowocześniejszych. Zamiast wymieniać kilka technik, które mogą, ale nie muszą odnosić się do czyjejś sytuacji, myślę, że lepiej jest omówić podstawowe zasady i sposób, w jaki LMAX odnosi się do wielu z nich.
W przypadku systemu przetwarzania transakcji na dużą skalę chcesz wykonać jak najwięcej następujących czynności:
Minimalizuj czas spędzany na najwolniejszych poziomach pamięci. Od najszybszego do najwolniejszego na nowoczesnym serwerze masz: CPU / L1 -> L2 -> L3 -> RAM -> Dysk / LAN -> WAN. Skok z nawet najszybszego współczesnego dysku magnetycznego do najwolniejszej pamięci RAM jest ponad 1000x dla sekwencyjnego dostępu; losowy dostęp jest jeszcze gorszy.
Zminimalizuj lub wyeliminuj czas oczekiwania . Oznacza to współdzielenie jak najmniejszej liczby stanów, a jeśli stan musi być współużytkowany, w miarę możliwości unikaj jawnych blokad.
Rozłóż obciążenie. Procesory nie dostał się znacznie szybciej w ciągu ostatnich kilku lat, ale nie dostał mniejsze, a 8 rdzeni jest dość powszechne na serwerze. Poza tym możesz nawet rozłożyć pracę na wiele komputerów, co jest podejściem Google; wielką zaletą jest to, że skaluje wszystko, łącznie z I / O.
Według Fowler, LMAX stosuje następujące podejście do każdego z nich:
Zachowaj cały stan w pamięci przez cały czas. Większość silników baz danych i tak to zrobi, jeśli cała baza danych zmieści się w pamięci, ale nie chcą pozostawić niczego przypadkowi, co jest zrozumiałe na platformie transakcyjnej w czasie rzeczywistym. Aby to zrobić bez dodawania mnóstwa ryzyka, musieli zbudować zestaw lekkiej infrastruktury do tworzenia kopii zapasowych i przełączania awaryjnego.
Użyj kolejki bez blokady („disruptor”) dla strumienia zdarzeń wejściowych. W przeciwieństwie do tradycyjnych trwałych kolejek wiadomości, które definitywnie nie blokują się i w rzeczywistości zwykle wiążą się z boleśnie powolnymi rozproszonymi transakcjami .
Niewiele. LMAX rzuca to pod magistralę na tej podstawie, że obciążenia są współzależne; wynik jednego zmienia parametry dla innych. Jest to krytyczne zastrzeżenie, które Fowler wyraźnie wzywa. Oni robią jakieś zastosowanie współbieżności w celu zapewnienia możliwości przełączania awaryjnego, ale wszystkie logiki biznesowej jest przetwarzany na pojedynczym wątku .
LMAX to nie jedyne podejście do OLTP na dużą skalę. I chociaż jest to całkiem genialne samo w sobie, nie musisz używać najnowocześniejszych technik, aby osiągnąć ten poziom wydajności.
Ze wszystkich powyższych zasad nr 3 jest prawdopodobnie najważniejszy i najbardziej skuteczny, ponieważ, szczerze mówiąc, sprzęt jest tani. Jeśli potrafisz właściwie podzielić obciążenie pracą na pół tuzina rdzeni i kilkadziesiąt maszyn, to niebo jest granicą dla konwencjonalnych technik obliczeń równoległych . Zdziwiłbyś się, ile przepustowości możesz osiągnąć, korzystając tylko z szeregu kolejek wiadomości i dystrybutora działającego w trybie round-robin. Oczywiście nie jest tak wydajny jak LMAX - w rzeczywistości nie jest nawet bliski - ale przepustowość, opóźnienia i opłacalność to osobne problemy, a tutaj mówimy konkretnie o przepustowości.
Jeśli masz te same specjalne potrzeby, co LMAX - w szczególności stan współdzielony, który odpowiada rzeczywistości biznesowej w przeciwieństwie do pochopnego wyboru projektu - sugeruję wypróbowanie ich komponentu, ponieważ nie widziałem zbyt wiele w innym przypadku jest to dostosowane do tych wymagań. Ale jeśli mówimy po prostu o wysokiej skalowalności, zachęcam do dalszych badań systemów rozproszonych, ponieważ są one kanonicznym podejściem stosowanym przez większość organizacji (Hadoop i powiązane projekty, ESB i powiązane architektury, CQRS, które Fowler również wzmianki i tak dalej).
Dyski SSD również staną się przełomem; zapewne już są. Możesz teraz mieć stałe miejsce do przechowywania o podobnych czasach dostępu do pamięci RAM, i chociaż dyski SSD klasy serwerowej są nadal strasznie drogie, ostatecznie spadną w cenie, gdy wzrośnie współczynnik adopcji. Został on dogłębnie zbadany, a wyniki są dość zadziwiające i z czasem będą się poprawiać, więc cała koncepcja „zachowaj wszystko w pamięci” jest o wiele mniej ważna niż kiedyś. Więc jeszcze raz staram się skupić na współbieżności, gdy tylko jest to możliwe.