Computer >> Máy Tính >  >> Lập trình >> Redis

Ba cách để duy trì tính nhất quán của bộ nhớ cache

Nếu bạn tin Ralph Waldo Emerson, thì sự nhất quán ngu ngốc có thể là thứ ám ảnh của những bộ óc nhỏ bé, nhưng khi nói đến việc triển khai chiến lược bộ nhớ đệm cấp doanh nghiệp có thể mở rộng và thành công, thì không có gì là ngu ngốc về tính nhất quán cả. Trên thực tế, một trong những thách thức lớn nhất trong việc quản lý hoạt động của cơ sở dữ liệu doanh nghiệp là duy trì tính nhất quán của bộ nhớ cache.

Tại sao chúng ta bận tâm với bộ nhớ cache ngay từ đầu? Ưu điểm chính của bộ đệm ẩn doanh nghiệp là tốc độ và hiệu quả mà dữ liệu có thể được truy cập. Mặc dù mỗi lệnh gọi đến cơ sở dữ liệu chính có thể tốn kém về cả thời gian và sức mạnh xử lý, nhưng một lệnh gọi đến bộ nhớ cache có thể nhanh như chớp và không ảnh hưởng đến cơ sở dữ liệu chính.

Ba trở ngại đối với tính nhất quán của bộ nhớ cache

Tất nhiên, những ưu điểm này dựa trên giả định cơ bản rằng dữ liệu trong bộ nhớ đệm — hoặc bộ nhớ đệm — luôn duy trì các giá trị giống như dữ liệu nguồn. Mặc dù đây có vẻ là một mục tiêu đơn giản, nhưng trên lý thuyết thì dễ hơn thực tế. Trên thực tế, có ba cạm bẫy có thể khiến nó trật bánh:

1. Khi các thay đổi đối với cơ sở dữ liệu chính không được phản ánh trong bộ nhớ cache

Bởi vì truy cập dữ liệu thông qua bộ đệm theo định nghĩa, nhanh hơn truy cập dữ liệu thông qua cơ sở dữ liệu chính, nếu một mục cụ thể được yêu cầu, bộ đệm sẽ được tham khảo trước. Giả sử mục tồn tại trong bộ nhớ cache, nó sẽ được trả lại nhanh hơn nhiều so với nó từ cơ sở dữ liệu chính. Chiến lược này được gọi là mô hình bỏ qua bộ nhớ cache . Bộ nhớ cache được kiểm tra đầu tiên theo mặc định. Nếu dữ liệu không có trong bộ nhớ cache, ứng dụng sẽ truy vấn cơ sở dữ liệu chính và lưu kết quả vào bộ nhớ cache trên đường trở lại người dùng.

Vấn đề phát sinh trong khoảng thời gian giữa thời điểm dữ liệu trong cơ sở dữ liệu chính bị thay đổi và khi bộ nhớ cache được điều chỉnh để phản ánh sự thay đổi nói trên. Điều này bị ảnh hưởng bởi tần suất ứng dụng kiểm tra bộ nhớ cache. Tuy nhiên, mỗi lần kiểm tra đều phải trả giá bằng tài nguyên bộ xử lý. Cùng một bộ xử lý có thể đồng thời xử lý nhiều chức năng hoặc giao dịch khác, một số trong số chúng quan trọng hơn, nếu không muốn nói là cập nhật bộ nhớ cache.

Thách thức đến trong việc tìm kiếm điểm ngọt ngào, một loại khu vực Goldilocks nằm giữa việc kiểm tra các bản cập nhật quá thường xuyên hoặc không đủ. Tất nhiên, nếu người dùng cố gắng truy cập dữ liệu lỗi thời trong khoảng thời gian này, canh bạc đó sẽ bị thua.

Ba cách để duy trì tính nhất quán của bộ nhớ cache

2. Khi có sự chậm trễ trong việc cập nhật kết quả được lưu trong bộ nhớ cache

Vấn đề này trùng lặp một chút với vấn đề trước. Mỗi khi một giá trị được cập nhật trong cơ sở dữ liệu chính, một thông báo sẽ được gửi đến bộ đệm ẩn, hướng dẫn nó cập nhật giá trị đã thay đổi hoặc loại bỏ nó hoàn toàn. (Trong trường hợp thứ hai, lần tiếp theo giá trị được yêu cầu, nó sẽ được truy cập từ cơ sở dữ liệu chính và sau đó từ bộ nhớ cache sau đó.) Trong trường hợp bình thường, giao tiếp này diễn ra tương đối nhanh và mục được lưu trong bộ nhớ cache được cập nhật hoặc xóa theo thứ tự để duy trì tính nhất quán của bộ nhớ cache.

Tuy nhiên, một lần nữa, sự thay đổi này đòi hỏi sức mạnh xử lý và cần có thời gian. Độ trễ có thể bị ảnh hưởng bởi cả tốc độ xử lý khả dụng cũng như thông lượng mạng. Nếu người dùng gặp rủi ro khi chọn truy cập vào dữ liệu đã lỗi thời giữa thời điểm tin nhắn được gửi bởi máy chủ để cập nhật bộ nhớ cache và thời điểm tin nhắn đó được bộ nhớ cache nhận và thực hiện, kết quả có thể là dữ liệu đã lỗi thời , không chính xác hoặc cả hai.

3. Khi có sự không nhất quán giữa các nút được lưu trong bộ nhớ cache

Tất nhiên, trang web hoặc ứng dụng càng lớn thì càng có nhiều khả năng bộ nhớ cache được lưu trữ trên nhiều nút thay vì chỉ một nút. Ngoài một chính , có thể có bất kỳ số lượng bản sao nào lý tưởng là các nút lưu trữ dữ liệu giống hệt nhau. Từ quan điểm của cân bằng tải và hiệu suất, điều này thường có ý nghĩa.

Nhưng từ quan điểm của tính toàn vẹn dữ liệu, nó tạo ra một nguồn tiềm ẩn khác của sự không nhất quán trong bộ nhớ cache. Mỗi khi dữ liệu được cập nhật trong cơ sở dữ liệu chính, sự thay đổi này cũng cần được phản ánh trong tất cả các bản sao. Tùy thuộc vào vị trí địa lý của các nút này và số lượng nút, quá trình cập nhật có thể mất một khoảng thời gian đáng kể. Mặc dù quá trình cập nhật có thể đang được tiến hành, nhưng vẫn có khả năng người dùng truy cập vào một nút mà các thay đổi vẫn chưa được thực hiện. Một lần nữa, kết quả, bạn đã đoán ra, có thể là sự không nhất quán trong bộ nhớ cache.

Chi phí của sự không nhất quán trong bộ nhớ cache

Đối với tất cả các lợi ích của cơ sở dữ liệu được lưu trong bộ nhớ cache, khả năng không nhất quán trong bộ nhớ cache có lẽ là nhược điểm dễ thấy nhất của nó. Nhưng vấn đề lớn đến mức nào? Cuối cùng, chi phí của sự không nhất quán trong bộ nhớ cache phụ thuộc vào ngữ cảnh.

Một số sự không nhất quán trong bộ nhớ cache có thể xảy ra mà không gây ra nhiều hậu quả. Ví dụ:nếu tổng số “lượt thích” trong bộ nhớ cache của bạn tạm thời không đồng bộ với tổng số lượt thích thực tế trong cơ sở dữ liệu chính của bạn, thì sự khác biệt ngắn không có khả năng gây ra sự cố hoặc thậm chí không thể nhận thấy được.

Mặt khác, nếu bộ nhớ đệm liệt kê rằng một mặt hàng còn lại của một sản phẩm cụ thể vẫn còn trong kho, trong khi hàng tồn kho thực tế tại cơ sở dữ liệu chính cho biết không còn hàng nào, xung đột dẫn đến có thể khiến khách hàng của bạn bối rối và xa lánh, gây tổn hại đến danh tiếng thương hiệu của bạn. vì độ tin cậy, gây ảnh hưởng xấu đến các giao dịch và kế toán của công ty, và trong những trường hợp nghiêm trọng, thậm chí đưa bạn vào tình thế nguy hiểm về mặt pháp lý.

Ba cách để chống lại sự không nhất quán

May mắn thay, đối với mỗi nguồn tiềm ẩn của sự không nhất quán trong bộ nhớ cache ở trên, có một số giải pháp tương ứng.

1. Vô hiệu bộ nhớ cache

Với việc vô hiệu hóa bộ đệm, bất cứ khi nào một giá trị được cập nhật trong cơ sở dữ liệu chính, mỗi mục được lưu trong bộ đệm với khóa tương ứng sẽ tự động bị xóa khỏi bộ đệm hoặc bộ đệm. Mặc dù có thể coi việc vô hiệu hóa bộ nhớ cache là một “cách tiếp cận thô bạo”, nhưng ưu điểm là nó chỉ yêu cầu một lần ghi tốn kém và thường tốn thời gian — vào chính cơ sở dữ liệu chính — thay vì hai hoặc nhiều hơn.

2. Ghi qua bộ nhớ đệm

Trong trường hợp này, thay vì cập nhật cơ sở dữ liệu chính và xóa bộ đệm ẩn, với chiến lược ghi qua, ứng dụng sẽ cập nhật bộ đệm và sau đó bộ đệm cập nhật đồng bộ cơ sở dữ liệu chính. Nói cách khác, thay vì dựa vào cơ sở dữ liệu chính để bắt đầu bất kỳ cập nhật nào, bộ nhớ đệm có nhiệm vụ duy trì tính nhất quán của riêng nó và gửi thông tin về bất kỳ thay đổi nào mà nó thực hiện trở lại cơ sở dữ liệu chính.

3. Ghi vào bộ nhớ đệm

Thật không may, đôi khi hai lần viết thực sự có thể tạo ra một sai lầm. Một trong những hạn chế của chiến lược ghi qua bộ nhớ cache là việc cập nhật cả bộ nhớ cache và cơ sở dữ liệu chính đòi hỏi hai thay đổi tốn thời gian, đánh thuế bộ xử lý, đầu tiên đối với bộ nhớ cache và sau đó đến cơ sở dữ liệu chính.

Một chiến lược khác, được gọi là ghi sau , hãy tránh sự cố này bằng cách ban đầu chỉ cập nhật bộ đệm và sau đó cập nhật cơ sở dữ liệu chính sau đó. Tất nhiên, cơ sở dữ liệu chính cũng sẽ cần được cập nhật và càng sớm càng tốt, nhưng trong trường hợp này, người dùng không phải trả "chi phí" của hai lần ghi. Lần ghi thứ hai vào cơ sở dữ liệu chính xảy ra không đồng bộ và ở phía sau (do đó có tên, ghi phía sau) tại thời điểm ít có khả năng làm giảm hiệu suất.

Redis Enterprise để giải cứu

Ngoài việc làm mất hiệu lực bộ nhớ cache, bộ nhớ đệm ghi qua và ghi sau có thể giải quyết nhiều trường hợp giúp bạn đạt được tính nhất quán của bộ nhớ cache. Nhưng việc tìm ra câu trả lời cho một vấn đề không giống như việc thực hiện nó.

Ba cách để duy trì tính nhất quán của bộ nhớ cache

Tính năng sao chép địa lý đang hoạt động tích cực của Redis Enterprise cho phép thực hiện nhiều cuộc khảo sát chính và cho phép bạn xử lý khéo léo các tải ngày càng nặng hơn. Tên hoạt động tích cực đề cập đến thực tế là mỗi phiên bản cơ sở dữ liệu của bạn có thể chấp nhận cả thao tác đọc và ghi trên bất kỳ khóa nào. Mỗi cá thể cơ sở dữ liệu, cho dù xa đến đâu, đều là một đối tượng ngang hàng trên mạng của bạn. Điều đó có nghĩa là khi ghi xảy ra với bất kỳ phiên bản nào, nút đó sẽ tự động gửi thông báo đến tất cả các phiên bản khác trên mạng của bạn, cho biết những gì trong bộ nhớ đệm đã được thay đổi và đảm bảo tất cả các phiên bản giữ lại một tập hợp dữ liệu được lưu trong bộ nhớ đệm nhất quán.

Tính năng sao chép địa lý tích cực hoạt động độc đáo của Redis Enterprise sử dụng các thuật toán tinh vi được thiết kế để giải quyết các xung đột ghi tiềm ẩn có thể dẫn đến sự không nhất quán trong bộ nhớ cache. Các thuật toán này dựa trên các kiểu dữ liệu sao chép không có xung đột (CRDT), đảm bảo rằng các bản ghi từ nhiều bản sao có thể được hợp nhất theo cách duy trì hiệu quả tính nhất quán.

Hoan hô các hobgoblins!

Bởi vì thách thức của việc duy trì tính nhất quán của bộ nhớ cache trở nên phức tạp hơn và ngày càng có hậu quả hơn khi kiến ​​trúc của bạn phát triển, bạn cần một giải pháp bộ nhớ đệm cấp doanh nghiệp để cung cấp một cách đáng tin cậy tính nhất quán mà doanh nghiệp của bạn yêu cầu và khách hàng của bạn mong đợi.

Theo Emerson, tính nhất quán có thể là một hobgoblin, nhưng nó thực sự cần thiết khi nói đến bộ nhớ đệm cơ sở dữ liệu cấp doanh nghiệp. Đó là lý do tại sao nên chọn Redis Enterprise. Bạn thật ngu ngốc khi không làm vậy.

Nhận toàn bộ câu chuyện về bộ nhớ đệm. Đọc Lưu vào bộ nhớ đệm theo quy mô với Redis , bởi Lee Atchison.