Kiến trúc trong bộ nhớ cho các dịch vụ web: nguyên tắc và nguyên tắc cơ bản về công nghệ

Trong bộ nhớ là tập hợp các khái niệm về lưu trữ dữ liệu khi dữ liệu được lưu trữ trong RAM của ứng dụng và đĩa được sử dụng để sao lưu. Theo cách tiếp cận cổ điển, dữ liệu được lưu trữ trên đĩa và bộ nhớ được lưu trong bộ đệm. Ví dụ: một ứng dụng web có phần phụ trợ để xử lý dữ liệu sẽ yêu cầu dữ liệu đó vào bộ lưu trữ: nó nhận, chuyển đổi dữ liệu và rất nhiều dữ liệu được truyền qua mạng. Trong bộ nhớ trong, các phép tính được gửi đến dữ liệu - tới bộ lưu trữ, nơi chúng được xử lý và mạng ít tải hơn.

Nhờ kiến ​​trúc của nó, In-Memory tăng tốc độ truy cập dữ liệu lên nhiều lần và đôi khi thậm chí còn nhanh hơn gấp nhiều lần. Ví dụ, các nhà phân tích ngân hàng muốn xem trong một ứng dụng phân tích một báo cáo về các khoản vay được phát hành trong năm qua theo biến động theo ngày. Quá trình này sẽ mất vài phút trên DBMS cổ điển, nhưng với Trong bộ nhớ, nó sẽ xuất hiện gần như ngay lập tức. Điều này là do phương pháp này cho phép bạn lưu trữ nhiều thông tin hơn vào bộ nhớ đệm và nó được lưu trữ trong RAM “trong tầm tay”. Ứng dụng không cần yêu cầu dữ liệu từ ổ cứng, tính khả dụng của dữ liệu này bị giới hạn bởi tốc độ mạng và ổ đĩa.

Những khả năng nào khác có sẵn với In-Memory và đây là cách tiếp cận nào? Vladimir Pligin - kỹ sư tại GridGain. Tài liệu đánh giá này sẽ hữu ích cho các nhà phát triển phụ trợ ứng dụng web chưa từng làm việc với In-Memory và muốn dùng thử hoặc quan tâm đến các xu hướng hiện đại trong phát triển phần mềm và thiết kế kiến ​​trúc.

Ghi. Bài viết dựa trên bản ghi lại báo cáo của Vladimir tại #GetIT Conf. Trước khi áp dụng lệnh tự cách ly, chúng tôi thường xuyên tổ chức các cuộc gặp gỡ và hội nghị dành cho các nhà phát triển ở Moscow và St. Petersburg: chúng tôi đã thảo luận về các xu hướng, các vấn đề phát triển hiện tại, các vấn đề và giải pháp của họ. Hiện tại không thể tổ chức một hội nghị nhưng đã đến lúc chia sẻ những tài liệu hữu ích từ những hội nghị trước đây.

Ai sử dụng Trong bộ nhớ và cách thức

Trong bộ nhớ thường được sử dụng khi cần tương tác nhanh với người dùng hoặc xử lý lượng lớn dữ liệu.

  • Ngân hàng ví dụ: sử dụng Trong bộ nhớ để giảm độ trễ khi khách hàng sử dụng ứng dụng hoặc để phân tích khách hàng trước khi cho vay.
  • công nghệ tài chính sử dụng Trong bộ nhớ để cải thiện hiệu suất của các dịch vụ và ứng dụng cho các ngân hàng thuê ngoài xử lý và phân tích dữ liệu. 
  • Các công ty bảo hiểm: để tính toán rủi ro, ví dụ, bằng cách phân tích dữ liệu khách hàng trong nhiều năm.
  • Công ty hậu cần. Ví dụ, họ xử lý rất nhiều dữ liệu để tính toán các tuyến đường tối ưu cho vận chuyển hàng hóa và hành khách với hàng nghìn thông số và theo dõi trạng thái của các lô hàng.
  • Bán lẻ. Giải pháp trong bộ nhớ giúp phục vụ khách hàng nhanh hơn và xử lý khối lượng lớn thông tin: lô hàng, hóa đơn, giao dịch, sự hiện diện của hàng nghìn hàng hóa trong kho và chuẩn bị báo cáo phân tích.
  • В IOT Trong bộ nhớ thay thế cơ sở dữ liệu truyền thống.
  • Dược phẩm Ví dụ: các công ty sử dụng In-Memory để sắp xếp các tổ hợp thành phần thuốc. 

Tôi sẽ kể cho bạn một số ví dụ về cách khách hàng của chúng tôi sử dụng các giải pháp Trong bộ nhớ và cách bạn có thể tự triển khai chúng.

Trong bộ nhớ là bộ nhớ chính

Một trong những khách hàng của chúng tôi là nhà cung cấp lớn các thiết bị khoa học y tế từ Hoa Kỳ. Họ sử dụng giải pháp Trong bộ nhớ làm nơi lưu trữ dữ liệu chính. Tất cả dữ liệu được lưu trữ trên đĩa và tập hợp con dữ liệu được sử dụng tích cực sẽ được lưu trong RAM. Các phương thức truy cập lưu trữ là tiêu chuẩn - GDBC (Trình kết nối cơ sở dữ liệu chung) và ngôn ngữ truy vấn SQL.

Kiến trúc trong bộ nhớ cho các dịch vụ web: nguyên tắc và nguyên tắc cơ bản về công nghệ

Nói chung, đây được gọi là Cơ sở dữ liệu trong bộ nhớ (IMDB) hoặc Bộ nhớ tập trung vào bộ nhớ. Lớp giải pháp này có nhiều tên, đây không phải là những cái tên duy nhất. 

Tính năng IMDB:

  • Dữ liệu được lưu trữ trong Bộ nhớ trong và được truy cập thông qua SQL cũng giống như các phương pháp khác. Chúng đồng bộ, chỉ có cách trình bày, cách xưng hô là khác nhau. Giao dịch hoạt động giữa các dữ liệu.

  • IMDB nhanh hơn cơ sở dữ liệu quan hệ vì lấy thông tin từ RAM nhanh hơn từ đĩa. 
  • Các thuật toán tối ưu hóa nội bộ có ít hướng dẫn hơn.
  • IMDB phù hợp để quản lý dữ liệu, sự kiện và giao dịch trong ứng dụng.

IMDB hỗ trợ một phần ACID: Tính nguyên tử, tính nhất quán và cách ly. Nhưng chúng không hỗ trợ “độ bền” - khi tắt nguồn, tất cả dữ liệu sẽ bị mất. Để giải quyết vấn đề, bạn có thể sử dụng ảnh chụp nhanh - một “ảnh chụp nhanh” của cơ sở dữ liệu, tương tự như bản sao lưu cơ sở dữ liệu trên ổ cứng hoặc ghi lại các giao dịch (nhật ký) để khôi phục dữ liệu sau khi khởi động lại.

Để tạo các ứng dụng có khả năng chịu lỗi

Hãy tưởng tượng kiến ​​trúc cổ điển của một ứng dụng web có khả năng chịu lỗi. Nó hoạt động như thế này: tất cả các yêu cầu được phân phối bởi bộ cân bằng web giữa các máy chủ. Hệ thống này hoạt động ổn định vì các máy chủ nhân bản lẫn nhau và sao lưu khi có sự cố.

Kiến trúc trong bộ nhớ cho các dịch vụ web: nguyên tắc và nguyên tắc cơ bản về công nghệ

Bộ cân bằng chuyển tất cả các yêu cầu từ một phiên đến một máy chủ. Đây là cơ chế phiên cố định: mỗi phiên được liên kết với một máy chủ nơi nó được lưu trữ và xử lý cục bộ. 

Điều gì xảy ra khi một trong các máy chủ bị lỗi?

Kiến trúc trong bộ nhớ cho các dịch vụ web: nguyên tắc và nguyên tắc cơ bản về công nghệ

Dịch vụ sẽ không bị ảnh hưởng vì kiến ​​trúc bị trùng lặp. Nhưng chúng tôi sẽ mất một tập hợp con các phiên của máy chủ đã chết. Đồng thời, những người dùng bị ràng buộc với các phiên này. Ví dụ, một khách hàng đặt hàng và bất ngờ đuổi anh ta ra khỏi văn phòng. Anh ấy sẽ không vui khi đăng nhập lại và thấy rằng mọi thứ sẽ phải được thực hiện lại.

Một ứng dụng web cần phải hỗ trợ số lượng lớn người dùng và không bị chậm để họ có thể làm việc thoải mái. Nhưng nếu nó bị từ chối, với mỗi yêu cầu tiếp theo, thời gian cần thiết để liên lạc với kho lưu trữ phiên sẽ tăng lên. Điều này làm tăng độ trễ trung bình cho những người dùng khác. Nhưng họ không muốn chờ đợi lâu hơn trước đây.

Vấn đề này có thể được giải quyết giống như khách hàng khác của chúng tôi, một nhà cung cấp PASS lớn đến từ Hoa Kỳ. Nó sử dụng In-Memory để phân cụm các phiên web. Để thực hiện việc này, nó lưu trữ chúng không phải cục bộ mà ở trung tâm - trong cụm Trong bộ nhớ. Trong trường hợp này, các phiên có sẵn nhanh hơn nhiều vì chúng đã có trong RAM.

Kiến trúc trong bộ nhớ cho các dịch vụ web: nguyên tắc và nguyên tắc cơ bản về công nghệ

Khi máy chủ gặp sự cố, bộ cân bằng sẽ gửi yêu cầu từ máy chủ bị sự cố đến các máy chủ khác, như trong kiến ​​trúc cổ điển. Nhưng có một sự khác biệt quan trọng: phiên được lưu trữ trong cụm trong bộ nhớ và các máy chủ có quyền truy cập vào các phiên của máy chủ bị lỗi.

Kiến trúc này làm tăng khả năng chịu lỗi của toàn bộ hệ thống. Hơn nữa, có thể từ bỏ hoàn toàn cơ chế phiên dính.

Xử lý phân tích giao dịch kết hợp (HTAP)

Thông thường, hệ thống giao dịch và phân tích được tách biệt. Khi chúng tách ra, đế chính sẽ chịu tải. Để xử lý phân tích, dữ liệu được sao chép sang bản sao để quá trình phân tích không ảnh hưởng đến quá trình giao dịch. Nhưng việc sao chép xảy ra có độ trễ—không thể sao chép mà không có độ trễ. Nếu chúng ta làm điều này một cách đồng bộ, nó cũng sẽ làm chậm căn cứ chính và chúng ta sẽ không nhận được bất kỳ khoản tiền thắng nào.

Trong HTAP, mọi thứ hoạt động khác nhau - cùng một kho dữ liệu được sử dụng để tải giao dịch từ các ứng dụng và cho các truy vấn phân tích có thể mất nhiều thời gian để hoàn thành. Khi dữ liệu nằm trong RAM, các truy vấn phân tích được thực thi nhanh hơn và máy chủ có cơ sở dữ liệu được tải ít hơn (trung bình).

Kiến trúc trong bộ nhớ cho các dịch vụ web: nguyên tắc và nguyên tắc cơ bản về công nghệ

Một cách tiếp cận kết hợp phá vỡ bức tường giữa xử lý giao dịch và phân tích. Nếu chúng tôi thực hiện phân tích trên cùng một bộ lưu trữ thì các truy vấn phân tích sẽ được khởi chạy trên dữ liệu từ RAM. Chúng chính xác hơn, dễ hiểu hơn và đầy đủ hơn.

Tích hợp các giải pháp trong bộ nhớ

Một cách (tương đối) đơn giản - phát triển mọi thứ từ đầu. Chúng tôi giữ dữ liệu trên đĩa và lưu trữ dữ liệu nóng trong bộ nhớ. Điều này giúp tồn tại khi máy chủ khởi động lại hoặc ngừng hoạt động.

Có hai tình huống chính xảy ra ở đây khi dữ liệu được lưu trữ trên đĩa. Đầu tiên, chúng tôi muốn khắc phục sự cố hoặc khởi động lại cụm hoặc các bộ phận thường xuyên - chúng tôi muốn sử dụng nó làm cơ sở dữ liệu đơn giản. Trong trường hợp thứ hai, khi có quá nhiều dữ liệu, một số dữ liệu sẽ nằm trong bộ nhớ.

Nếu không thể xây dựng mọi thứ từ đầu thì có thể tích hợp Trong bộ nhớ vào một kiến trúc hiện có. Nhưng không phải tất cả các giải pháp Trong bộ nhớ đều phù hợp cho việc này. Có ba điều kiện bắt buộc. Giải pháp trong bộ nhớ phải hỗ trợ:

  • cách tiêu chuẩn để kết nối với cơ sở dữ liệu sẽ nằm bên dưới nó (ví dụ: MySQL);
  • ngôn ngữ truy vấn tiêu chuẩn, để không viết lại và thay đổi logic tương tác với bộ lưu trữ;
  • giao dịch - bảo tồn ngữ nghĩa của sự tương tác.

Nếu cả ba điều kiện được đáp ứng thì việc tích hợp là có thể. Chúng tôi đặt Lưới dữ liệu trong bộ nhớ giữa ứng dụng và cơ sở dữ liệu. Bây giờ, yêu cầu ghi sẽ được ủy quyền cho cơ sở dữ liệu cơ bản và yêu cầu đọc sẽ được ủy quyền cho cơ sở dữ liệu cơ bản nếu dữ liệu không có trong bộ đệm.

Kiến trúc trong bộ nhớ cho các dịch vụ web: nguyên tắc và nguyên tắc cơ bản về công nghệ

Nếu việc truy cập nhanh vào dữ liệu và quá trình xử lý dữ liệu đó quan trọng đối với bạn, chẳng hạn như đối với phân tích kinh doanh, thì bạn có thể nghĩ đến việc triển khai Trong bộ nhớ. Và để triển khai, bạn có thể sử dụng cả hai phương pháp khi thiết kế kiến ​​trúc mới.

Nguồn: www.habr.com

Thêm một lời nhận xét