Độ trễ là “thời gian chết” trong các hệ thống phân tán.
Độ trễ cao có thể làm cho ứng dụng không thể sử dụng được, gây khó chịu cho người dùng cuối và ảnh hưởng tiêu cực đến kết quả kinh doanh chẳng khác gì một sự cố hoàn toàn.
Sự bực bội, khó chịu với một trang web chậm là một trải nghiệm tồi tệ đối với người dùng hiện nay.
Nói ở mức độ nhẹ hơn, các trang web không thể truy cập được thì sẽ lãng phí thời gian của người dùng.
Vì vậy, việc các nhà phát triển đầu tư vào việc học các chiến lược giảm độ trễ là điều khôn ngoan.
Dưới đây là 8 chiến lược hàng đầu để giảm độ trễ mà bạn có thể cần biết:
Caching
Caching là một kỹ thuật cơ bản trong các hệ thống phân tán để cải thiện hiệu suất và giảm tải cho các dịch vụ backend.
Mục tiêu chính của caching là giảm thiểu các lần truy vấn cơ sở dữ liệu tốn kém và tránh thực hiện các phép tính có độ trễ cao nhiều lần.
Bằng cách lưu trữ dữ liệu được truy cập thường xuyên trong cache, ứng dụng có thể truy xuất dữ liệu nhanh hơn nhiều so với việc truy xuất từ nguồn (root) như cơ sở dữ liệu hoặc dịch vụ từ xa.
Caching thường được triển khai bằng cách sử dụng bộ nhớ tốc độ cao hoặc các hệ thống lưu trữ nhanh để cung cấp khả năng truy cập dữ liệu cache với độ trễ thấp.
Content Delivery Networks (CDN)
CDN là một mạng lưới phân tán địa lý của các máy chủ làm việc cùng nhau để cung cấp nội dung đến người dùng cuối với tính sẵn sàng cao và hiệu suất.
CDN giảm độ trễ bằng cách lưu trữ nội dung gần người dùng cuối.
Khi một người dùng yêu cầu nội dung từ một trang web hoặc ứng dụng sử dụng CDN, yêu cầu được chuyển hướng đến máy chủ CDN gần nhất thay vì máy chủ gốc(root server).
Nếu nội dung yêu cầu đã được lưu trữ trên máy chủ CDN, nó sẽ được phục vụ trực tiếp từ cache, loại bỏ sự cần thiết phải truy xuất từ máy chủ gốc. Điều này giảm khoảng cách dữ liệu phải di chuyển và giảm thiểu thời gian phản hồi.
Load Balancing
Load Balancing là một kỹ thuật cực kỳ quan trọng để phân phối công việc giữa nhiều máy chủ.
Bằng cách sử dụng các load balancer để phân phối lưu lượng truy cập đến nhiều máy chủ, chúng ta đảm bảo rằng không có máy chủ nào bị quá tải. Điều này đảm bảo hệ thống hoạt động theo đúng kỳ vọng của người dùng.
Khi một khách hàng gửi yêu cầu đến hệ thống phân tán, load balancer sẽ nhận yêu cầu và điều hướng thông minh đến một trong các máy chủ có sẵn dựa trên các thuật toán hoặc chính sách được xác định trước.
Các thuật toán Load Balancing phổ biến bao gồm:
- Round Robin
- Least Connections
- IP Hash
- …
Async Processing
Khi xử lý các tác vụ dài(long-running task) trong một hệ thống phân tán, điều quan trọng là xem xét trải nghiệm người dùng và khả năng đáp ứng tổng thể của hệ thống.
Việc triển khai async processing là một kỹ thuật mạnh mẽ cho phép hệ thống phản hồi nhanh chóng với người dùng trong khi thực hiện xử lý thêm ở background.
Trong mô hình async processing, khi người dùng khởi tạo một long-running task(tác vụ dài) chẳng hạn như tạo một báo cáo phức tạp hoặc xử lý một tập dữ liệu lớn, hệ thống sẽ ngay lập tức xác nhận yêu cầu và trả về phản hồi cho người dùng.
Ở phía sau, hệ thống xếp hàng tác vụ vào hàng đợi tin nhắn(message queue) hoặc hàng đợi tác vụ(task queue).
Một quy trình làm việc nền riêng biệt(separate background worker process) hoặc một nhóm các quy trình làm việc(pool of worker processes continuously) liên tục theo dõi hàng đợi này, nhận nhiệm vụ khi chúng có sẵn và không làm tắc nghẽn luồng ứng dụng chính hoặc ảnh hưởng đến khả năng đáp ứng của hệ thống.
Database Indexing
Cơ sở dữ liệu có thể là nguồn gốc chính của độ trễ nếu không được thiết kế tối ưu.
Để đảm bảo hiệu suất cơ sở dữ liệu tối ưu và xử lý truy vấn nhanh hơn, điều quan trọng là triển khai các chỉ mục(indexing) đúng đắn và xác định, cải tiến các truy vấn cơ sở dữ liệu chậm.
Chỉ mục đóng vai trò quan trọng trong việc cải thiện hiệu quả của các truy vấn cơ sở dữ liệu.
Bằng cách tạo các chỉ mục phù hợp trên các cột hoặc kết hợp các cột được truy cập thường xuyên, cơ sở dữ liệu có thể nhanh chóng xác định và truy xuất dữ liệu cần thiết mà không cần quét toàn bộ bảng. Điều này giảm thiểu thời gian và tài nguyên cần thiết để xử lý các truy vấn, đặc biệt là đối với các tập dữ liệu lớn.
Data Compression
Khi truyền dữ liệu qua mạng, đặc biệt là trong các hệ thống phân tán, điều quan trọng là xem xét kích thước của dữ liệu được gửi.
Các tải dữ liệu lớn có thể tiêu tốn nhiều băng thông mạng hơn, tăng độ trễ và ảnh hưởng đến hiệu suất tổng thể của hệ thống.
Để giảm thiểu những vấn đề này, một kỹ thuật phổ biến là nén dữ liệu trước khi gửi qua mạng.
Data Compression bao gồm việc giảm kích thước của dữ liệu bằng cách áp dụng các thuật toán nén để loại bỏ sự dư thừa và đại diện dữ liệu một cách hiệu quả hơn. Có nhiều lợi ích khi nén dữ liệu:
- Giảm sử dụng băng thông
- Cải thiện độ trễ
- Sử dụng tài nguyên hiệu quả
- Tiết kiệm chi phí
Precaching
Precaching là một kỹ thuật sử dụng để lưu trữ dữ liệu trước khi yêu cầu được đưa ra.
Ý tưởng là lưu trữ trước dữ liệu có khả năng cao sẽ được truy cập để có thể phục vụ nhanh hơn khi người dùng yêu cầu.
Use Keep-Alive Connections
Quy trình bắt tay TCP thiết lập một kết nối đáng tin cậy giữa hai đầu điểm trước khi truyền dữ liệu có thể bắt đầu.
Tuy nhiên, quy trình này có thể tốn kém về độ trễ mạng và tiêu thụ tài nguyên, vì nó liên quan đến nhiều chuyến đi lòng vòng giữa khách hàng và máy chủ.
Để tối ưu hóa chi phí liên quan đến việc thiết lập các kết nối TCP mới, nên tái sử dụng các kết nối hiện có bất cứ khi nào có thể.
Tái sử dụng kết nối, còn được gọi là Keep-Alive Connections, là một kỹ thuật cho phép gửi nhiều yêu cầu qua cùng một kết nối TCP, giảm nhu cầu thiết lập các kết nối mới cho mỗi yêu cầu.
Tài liệu tham khảo.
Để lại một bình luận