Có tất cả các loại kỹ thuật để xử lý giao dịch hiệu suất cao và một trong những bài viết của Fowler chỉ là một trong số nhiều kỹ thuật mới. Thay vì liệt kê một loạt các kỹ thuật có thể hoặc không thể áp dụng cho tình huống của bất kỳ ai, tôi nghĩ tốt hơn là nên thảo luận về các nguyên tắc cơ bản và cách LMAX giải quyết một số lượng lớn chúng.
Đối với một hệ thống xử lý giao dịch quy mô cao, bạn muốn thực hiện tất cả những điều sau đây càng nhiều càng tốt:
Giảm thiểu thời gian dành cho các tầng lưu trữ chậm nhất. Từ nhanh nhất đến chậm nhất trên một máy chủ hiện đại bạn có: CPU / L1 -> L2 -> L3 -> RAM -> Đĩa / LAN -> WAN. Bước nhảy từ ngay cả đĩa từ hiện đại nhanh nhất sang RAM chậm nhất là hơn 1000 lần để truy cập tuần tự ; truy cập ngẫu nhiên thậm chí còn tồi tệ hơn.
Giảm thiểu hoặc loại bỏ thời gian chờ đợi . Điều này có nghĩa là chia sẻ càng ít trạng thái càng tốt, và, nếu trạng thái phải được chia sẻ, tránh các khóa rõ ràng bất cứ khi nào có thể.
Truyền bá khối lượng công việc. CPU đã không nhanh hơn nhiều trong vài năm qua, nhưng chúng đã nhỏ hơn và 8 lõi là khá phổ biến trên máy chủ. Ngoài ra, bạn thậm chí có thể truyền bá công việc trên nhiều máy, đó là cách tiếp cận của Google; điều tuyệt vời ở đây là nó thu nhỏ mọi thứ kể cả I / O.
Theo Fowler, LMAX sử dụng cách tiếp cận sau đây cho từng điều sau:
Giữ tất cả trạng thái trong bộ nhớ mọi lúc. Hầu hết các công cụ cơ sở dữ liệu thực sự sẽ làm điều này bằng mọi cách, nếu toàn bộ cơ sở dữ liệu có thể nằm gọn trong bộ nhớ, nhưng chúng không muốn để lại bất cứ điều gì có thể xảy ra, điều này có thể hiểu được trên nền tảng giao dịch thời gian thực. Để giải quyết vấn đề này mà không gây thêm rủi ro, họ đã phải xây dựng một loạt các cơ sở hạ tầng dự phòng và dự phòng nhẹ.
Sử dụng hàng đợi không khóa ("người gây rối") cho luồng sự kiện đầu vào. Ngược lại với độ bền cao truyền thống hàng đợi tin nhắn mà là dứt khoát không khóa miễn phí, và trong thực tế thường liên quan đến đau đớn chậm giao dịch phân tán .
Không nhiều. LMAX ném cái này dưới xe buýt trên cơ sở khối lượng công việc phụ thuộc lẫn nhau; kết quả của một thay đổi các tham số cho những người khác. Đây là một cảnh báo quan trọng , và một điều mà Fowler gọi rõ ràng. Họ làm làm cho một số sử dụng đồng thời để cung cấp khả năng chuyển đổi dự phòng, nhưng tất cả các logic kinh doanh được xử lý trên một chủ đề duy nhất .
LMAX không phải là cách tiếp cận duy nhất đối với OLTP quy mô cao. Và mặc dù nó khá tuyệt vời theo đúng nghĩa của nó, bạn không cần phải sử dụng các kỹ thuật vượt trội để có thể đạt được mức hiệu suất đó.
Trong tất cả các nguyên tắc trên, # 3 có lẽ là quan trọng nhất và hiệu quả nhất, bởi vì, thẳng thắn, phần cứng là rẻ. Nếu bạn có thể phân vùng chính xác khối lượng công việc trên nửa tá lõi và vài chục máy, thì giới hạn của bầu trời đối với các kỹ thuật tính toán song song thông thường . Bạn sẽ ngạc nhiên về số lượng thông lượng bạn có thể rút ra mà không có gì ngoài một loạt các hàng đợi tin nhắn và một nhà phân phối vòng tròn. Rõ ràng là nó không hiệu quả như LMAX - thực sự thậm chí không gần - nhưng thông lượng, độ trễ và hiệu quả chi phí là những mối quan tâm riêng biệt, và ở đây chúng tôi đang nói cụ thể về thông lượng.
Nếu bạn có cùng loại nhu cầu đặc biệt mà LMAX thực hiện - cụ thể là trạng thái chia sẻ tương ứng với thực tế kinh doanh trái ngược với lựa chọn thiết kế vội vàng - thì tôi khuyên bạn nên thử thành phần của chúng, vì tôi chưa thấy nhiều khác phù hợp với những yêu cầu đó. Nhưng nếu chúng ta chỉ đơn giản nói về khả năng mở rộng cao thì tôi mong bạn nên nghiên cứu thêm về các hệ thống phân tán, bởi vì chúng là cách tiếp cận kinh điển được sử dụng bởi hầu hết các tổ chức hiện nay (Hadoop và các dự án liên quan, ESB và các kiến trúc liên quan, CQRS mà Fowler cũng đề cập, và như vậy).
SSD cũng sẽ trở thành một công cụ thay đổi cuộc chơi; có thể tranh luận, họ đã được. Giờ đây, bạn có thể có bộ nhớ vĩnh viễn với thời gian truy cập tương tự RAM, và mặc dù SSD cấp máy chủ vẫn còn đắt khủng khiếp, cuối cùng chúng sẽ giảm giá khi tỷ lệ chấp nhận tăng. Nó đã được nghiên cứu rộng rãi và kết quả khá khó hiểu và sẽ chỉ trở nên tốt hơn theo thời gian, vì vậy toàn bộ khái niệm "giữ mọi thứ trong bộ nhớ" ít quan trọng hơn trước đây. Vì vậy, một lần nữa, tôi sẽ cố gắng tập trung vào đồng thời bất cứ khi nào có thể.