paint-brush
5 cơ chế lưu vào bộ nhớ đệm để tăng tốc ứng dụng của bạntừ tác giả@pragativerma
13,404 lượt đọc
13,404 lượt đọc

5 cơ chế lưu vào bộ nhớ đệm để tăng tốc ứng dụng của bạn

từ tác giả Pragati Verma8m2022/09/12
Read on Terminal Reader
Read this story w/o Javascript

dài quá đọc không nổi

Bộ nhớ đệm là một kỹ thuật đệm trong đó chúng tôi lưu trữ dữ liệu được truy cập thường xuyên trong bộ nhớ tạm thời hoặc không gian để làm cho dữ liệu đó luôn sẵn sàng và giảm khối lượng công việc cho ứng dụng, máy chủ hoặc cơ sở dữ liệu của chúng tôi. Nó có thể được thực hiện ở các cấp độ khác nhau trong một ứng dụng web tùy thuộc vào trường hợp sử dụng. Bộ nhớ đệm diễn ra ở các cấp độ khác nhau như Bộ đệm ẩn cạnh hoặc CDN (Mạng phân phối nội dung) hoặc Bộ đệm phía máy chủ (Bộ đệm phía máy chủ) Bộ đệm có thể được sử dụng với tất cả các loại kho dữ liệu, bao gồm cơ sở dữ liệu NoSQL cũng như cơ sở dữ liệu quan hệ.

Companies Mentioned

Mention Thumbnail
Mention Thumbnail

Coin Mentioned

Mention Thumbnail
featured image - 5 cơ chế lưu vào bộ nhớ đệm để tăng tốc ứng dụng của bạn
Pragati Verma HackerNoon profile picture
0-item
1-item


Nếu bạn là một nhà phát triển phần mềm phụ trợ, Bộ nhớ đệm là một giải pháp phù hợp bất cứ khi nào bạn cần tăng tốc ứng dụng web của mình. Tuy nhiên, có rất nhiều điều về Bộ nhớ đệm bị thiếu khi quyết định chiến lược Bộ nhớ đệm phù hợp cho ứng dụng web của bạn. Do đó, trong bài viết này, chúng ta sẽ thảo luận về các chiến lược Bộ nhớ đệm khác nhau có sẵn và cách chọn chiến lược phù hợp cho trường hợp sử dụng của bạn.


Bộ nhớ đệm là gì?

Nói một cách đơn giản hơn, Caching là một kỹ thuật đệm trong đó chúng tôi lưu trữ dữ liệu được truy cập thường xuyên trong bộ nhớ tạm thời hoặc không gian để làm cho dữ liệu luôn sẵn sàng và giảm tải công việc cho ứng dụng, máy chủ hoặc cơ sở dữ liệu của chúng tôi. Nó có thể được thực hiện ở các cấp độ khác nhau trong một ứng dụng web tùy thuộc vào trường hợp sử dụng.


Lưu vào bộ nhớ đệm ở các cấp độ khác nhau trong một ứng dụng web

Bộ nhớ đệm diễn ra ở các cấp độ khác nhau trong một ứng dụng web, chẳng hạn như sau:


Edge Caching hoặc CDN (Mạng phân phối nội dung)

CDN được sử dụng để lưu nội dung tĩnh (chẳng hạn như hình ảnh, video hoặc trang web) trong các máy chủ được phân phối theo địa lý để nó có thể gửi nội dung nhanh hơn đến người dùng cuối bằng cách sử dụng bộ nhớ cache.


Nguồn: https://imagekit.io/


Hãy coi CDN là một chuỗi cửa hàng tạp hóa: thay vì đi hàng trăm km đến những cánh đồng trồng thực phẩm, người mua đến cửa hàng tạp hóa địa phương của họ, nơi vẫn cần đi lại nhưng gần hơn đáng kể. Việc mua sắm hàng tạp hóa chỉ mất vài phút thay vì vài ngày vì các cửa hàng tạp hóa tích trữ thực phẩm từ các trang trại ở xa. Tương tự, CDN lưu trữ 'kho' nội dung xuất hiện trên Internet, cho phép các trang web tải nhanh hơn đáng kể.


Nguồn: https://awesome-tech.readthedocs.io/


Khi người dùng sử dụng CDN để yêu cầu bất kỳ nội dung nào từ một trang web, CDN sẽ truy xuất nội dung từ máy chủ gốc và giữ một bản sao của nội dung cho các yêu cầu trong tương lai. Nội dung đã lưu trong bộ nhớ cache được giữ trong bộ nhớ cache CDN miễn là người dùng tiếp tục truy cập nó.


Bộ nhớ đệm cơ sở dữ liệu

Bộ nhớ đệm cơ sở dữ liệu đề cập đến các thuật toán bộ nhớ đệm thông minh gốc được sử dụng bởi bất kỳ cơ sở dữ liệu nào để tối ưu hóa việc đọc và ghi. Bộ nhớ đệm, trong trường hợp này, có thể nằm trong một số khu vực bao gồm cơ sở dữ liệu, ứng dụng hoặc dưới dạng một lớp độc lập.


Database Caching có thể được sử dụng với tất cả các loại kho dữ liệu, bao gồm cơ sở dữ liệu NoSQL cũng như cơ sở dữ liệu quan hệ như máy chủ SQL - MySQL hoặc MariaDB,… Nó cũng hoạt động tốt với nhiều nền tảng dữ liệu như AWS và Microsoft Azure.


Bộ đệm trình duyệt hoặc bộ nhớ đệm phía máy khách

Trình duyệt hoặc ứng dụng khách lưu trữ nội dung tĩnh dựa trên tiêu đề hết hạn trong bộ nhớ cache. Các tiêu đề bộ nhớ cache HTTP chỉ định thời gian trình duyệt có thể thực hiện các phản hồi bộ nhớ cache tiếp theo cho nội dung web được yêu cầu. Ngoài ra, các trình duyệt có thể lưu vào bộ nhớ cache phản hồi cho các yêu cầu GET để tránh các cuộc gọi dữ liệu không cần thiết.


Bộ nhớ đệm phía máy chủ

Bộ đệm máy chủ là cơ chế bộ nhớ đệm được biết đến và sử dụng phổ biến nhất trong đó dữ liệu được lưu vào bộ đệm trong ứng dụng máy chủ. Ở đây mọi thứ phụ thuộc rất nhiều vào nhu cầu công việc, nó được tối ưu hóa cao cho các ứng dụng có ít người dùng đồng thời hơn.


Bộ nhớ đệm web phía máy chủ thường liên quan đến việc sử dụng proxy web để giữ các phản hồi web từ các máy chủ web phía trước nó nằm, giảm đáng kể tải và độ trễ của chúng. Các bộ nhớ đệm này được thực hiện bởi các quản trị viên trang web và hoạt động như một tác nhân trung gian giữa trình duyệt và các máy chủ gốc.


Một hình thức khác của Bộ nhớ đệm phía máy chủ là sử dụng các kho khóa-giá trị như Memcached và Redis. Ngược lại, để đảo ngược proxy, chỉ lưu trữ phản hồi HTTP vào một yêu cầu HTTP cụ thể, bất kỳ nội dung web nào mà nhà phát triển ứng dụng cần có thể được lưu vào bộ nhớ đệm bằng cách sử dụng bộ lưu trữ đối tượng khóa / giá trị. Nội dung web thường được tìm nạp bằng mã ứng dụng hoặc khung ứng dụng có thể khai thác bộ nhớ dữ liệu Trong Bộ nhớ.


Một lợi thế khác của việc sử dụng kho khóa / giá trị cho bộ nhớ đệm trực tuyến là chúng thường được sử dụng để lưu trữ các phiên web và các tài liệu được lưu trong bộ nhớ cache khác. Điều này mang lại một giải pháp thống nhất cho nhiều tình huống ứng dụng khác nhau.


Tại sao chúng ta cần Caching?

Có một số lợi ích của bộ nhớ đệm như được đề cập bên dưới:


Cải thiện hiệu suất ứng dụng

Như chúng ta đã thảo luận trước đó, Cache là một lớp lưu trữ dữ liệu tốc độ cao lưu trữ một tập hợp con dữ liệu được truy cập thường xuyên và thường là tạm thời, để các yêu cầu trong tương lai được phục vụ nhanh hơn so với việc truy cập vào vị trí lưu trữ ban đầu. Do đó, bộ nhớ đệm cho phép tái sử dụng hiệu quả dữ liệu được tính toán hoặc truy cập trước đó. Do đó, hoạt động đọc / ghi dữ liệu được giảm đi rất nhiều và giúp cải thiện hiệu suất tổng thể của ứng dụng.


Giảm chi phí cơ sở dữ liệu

Một phiên bản cache duy nhất có thể cung cấp hàng trăm nghìn hoạt động Đầu vào / Đầu ra mỗi giây, do đó làm giảm tổng chi phí bằng cách giảm số lượng phiên bản cơ sở dữ liệu cần thiết. Do đó, tiết kiệm chi phí có thể đáng kể nếu phí lưu trữ trên mỗi thông lượng.


Giảm tải cho chương trình phụ trợ

Bộ nhớ đệm có thể giảm tải hiệu quả trên máy chủ phụ trợ và cứu nó khỏi hiệu suất chậm hơn, bằng cách chuyển hướng các phần cụ thể của tải đọc từ cơ sở dữ liệu phụ trợ sang lớp bộ nhớ đệm trong bộ nhớ. Nó có thể cứu hệ thống khỏi sự cố vào những thời điểm quá tải hoặc tăng đột biến.


Hiệu suất dự đoán

Một thách thức phổ biến với các ứng dụng hiện đại là khi phải đối phó với mức tăng đột biến trong việc sử dụng ứng dụng. Ví dụ: tăng đột biến trên các ứng dụng truyền thông xã hội trong một sự kiện công nghệ trên toàn thế giới, trận đấu cricket hoặc ngày bầu cử hoặc giảm giá trong lễ hội trên trang web Thương mại điện tử, v.v. Tải lên ứng dụng tăng có thể dẫn đến độ trễ để lấy dữ liệu, do đó làm cho hiệu suất cũng như trải nghiệm người dùng không thể đoán trước. Mặc dù, bằng cách sử dụng bộ nhớ đệm trong bộ nhớ thông lượng cao, chúng tôi có thể giảm thiểu vấn đề này ở một mức độ lớn.


Loại bỏ các điểm nóng về cơ sở dữ liệu

Một tập hợp nhỏ dữ liệu, chẳng hạn như hồ sơ người nổi tiếng hoặc sản phẩm nổi tiếng, có khả năng được truy xuất thường xuyên hơn phần còn lại trong nhiều ứng dụng. Điều này có thể gây ra các điểm nóng trong cơ sở dữ liệu của bạn và yêu cầu cung cấp quá mức tài nguyên cơ sở dữ liệu dựa trên các yêu cầu về thông lượng cho dữ liệu được sử dụng thường xuyên nhất. Lưu trữ các khóa chung trong bộ nhớ giúp giảm nhu cầu cung cấp quá mức đồng thời mang lại hiệu suất nhanh và có thể đoán trước cho dữ liệu được truy cập thường xuyên nhất.


Tăng thông lượng đọc (IOPS)

Ngoài việc giảm độ trễ, hệ thống trong bộ nhớ cung cấp tốc độ yêu cầu lớn hơn đáng kể so với cơ sở dữ liệu dựa trên đĩa tương tự. Một máy cache bên phân tán duy nhất có thể phục vụ hàng trăm nghìn yêu cầu mỗi giây.


Sau khi thảo luận về lợi ích của bộ nhớ đệm, chúng ta hãy đi sâu vào các chiến lược bộ nhớ đệm với một số trường hợp sử dụng trong thế giới thực. Trong bài viết này, chúng tôi sẽ chủ yếu tập trung vào các chiến lược bộ nhớ đệm phía máy chủ.


5 loại chiến lược lưu vào bộ đệm máy chủ khác nhau

Cache Aside

Trong chiến lược bộ nhớ đệm này, bộ nhớ đệm được đặt sang một bên một cách hợp lý và ứng dụng trực tiếp giao tiếp với cơ sở dữ liệu hoặc bộ đệm để biết thông tin được yêu cầu có hiện diện hay không. Đầu tiên, ứng dụng kiểm tra bộ nhớ cache, nếu thông tin được tìm thấy, nó sẽ đọc và trả về dữ liệu, và nó được gọi là lần truy cập bộ nhớ cache , ngược lại nếu thông tin không được tìm thấy, nó được gọi là lỗi bộ nhớ cache , trong trường hợp đó, ứng dụng truy vấn cơ sở dữ liệu để đọc thông tin và trả lại dữ liệu được yêu cầu cho máy khách, sau đó cũng lưu trữ nó vào bộ nhớ cache để sử dụng trong tương lai.


Nguồn: https://www.prisma.io


Về cơ bản, nó có lợi trong các trường hợp sử dụng cần đọc nhiều. Do đó, nếu máy chủ bộ nhớ cache gặp sự cố, thì hệ thống sẽ hoạt động bình thường bằng cách giao tiếp trực tiếp với cơ sở dữ liệu, nhưng đây không phải là giải pháp lâu dài hoặc đáng tin cậy trong trường hợp tải cao điểm hoặc đột ngột có thể xảy ra.


Chiến lược ghi phổ biến nhất là ghi trực tiếp vào cơ sở dữ liệu, tuy nhiên, điều này có thể dẫn đến sự không nhất quán của dữ liệu trong trường hợp ghi thường xuyên. Để đối phó với tình huống này, các nhà phát triển thường sử dụng bộ nhớ đệm có TTL (Thời gian tồn tại) và tiếp tục phục vụ cho đến khi hết hạn.


Dưới đây là tổng quan nhanh về bộ nhớ cache có và không có TTL và khi nào sử dụng chúng:


Bộ nhớ đệm với TTL

Bộ nhớ đệm với TTL là bộ đệm thường được sử dụng nhất khi dữ liệu được cập nhật thường xuyên. Trong những trường hợp như vậy, bạn muốn bộ nhớ cache hết hạn theo định kỳ, vì vậy, bạn có thể sử dụng bộ nhớ cache có giới hạn thời gian và bộ nhớ cache sẽ tự động bị xóa sau khi khoảng thời gian trôi qua.


Ví dụ - phiên máy chủ hoặc thẻ điểm thể thao.


Bộ nhớ đệm không có TTL

Bộ nhớ đệm không có TTL được sử dụng cho các nhu cầu bộ nhớ đệm không cần cập nhật thường xuyên, ví dụ: nội dung trên trang web cung cấp các khóa học. Trong trường hợp này, nội dung sẽ được cập nhật hoặc xuất bản không thường xuyên, và do đó, việc lưu trữ vào bộ nhớ cache dễ dàng hơn nhiều mà không có bất kỳ giới hạn thời gian nào.


Ghi qua bộ nhớ đệm

Như tên cho thấy, trong chiến lược này, bất kỳ thông tin mới nào trước tiên sẽ được ghi vào bộ nhớ đệm trước bộ nhớ / cơ sở dữ liệu chính. Trong trường hợp này, bộ nhớ đệm nằm giữa ứng dụng và cơ sở dữ liệu một cách hợp lý. Do đó, nếu một ứng dụng khách yêu cầu bất kỳ thông tin nào, ứng dụng không cần phải kiểm tra với bộ đệm để biết tính khả dụng của thông tin vì bộ nhớ đệm đã có thông tin và do đó, nó được truy xuất trực tiếp từ bộ nhớ cache và được phục vụ cho khách hàng.


Nguồn: https://www.prisma.io


Tuy nhiên, nó làm tăng độ trễ của hoạt động ghi. Nhưng nếu được kết hợp với một chiến lược bộ nhớ đệm khác được gọi là bộ nhớ đệm đọc qua, chúng tôi có thể đảm bảo tính nhất quán của dữ liệu.


Đọc qua bộ nhớ cache

Trong chiến lược lưu vào bộ nhớ đệm này, bộ nhớ đệm nằm cùng hàng với cơ sở dữ liệu sao cho bất cứ khi nào có lỗi bộ nhớ đệm (không tìm thấy dữ liệu trong bộ đệm), dữ liệu bị thiếu sẽ được điền từ cơ sở dữ liệu và được trả lại cho máy khách.


Nguồn: https://www.prisma.io


Như bạn có thể đã đoán, nó hoạt động tốt nhất đối với các ứng dụng có dung lượng lớn sẵn sàng có cùng một bộ thông tin được yêu cầu lặp đi lặp lại. Ví dụ, một trang web tin tức sẽ phục vụ những câu chuyện giống nhau trong một ngày lặp đi lặp lại.


Nhược điểm của chiến lược này là nếu dữ liệu được yêu cầu lần đầu tiên, nó luôn bị bỏ sót trong bộ nhớ cache và do đó nó sẽ chậm hơn so với yêu cầu thông thường.


Viết lại

Trong chiến lược bộ nhớ đệm này, bất cứ khi nào có hoạt động ghi, ứng dụng sẽ ghi thông tin vào bộ đệm để ghi nhận ngay các thay đổi và sau một thời gian trì hoãn, nó sẽ ghi lại dữ liệu vào cơ sở dữ liệu. Nó còn được gọi là chiến lược ghi vào bộ nhớ đệm.


Nguồn: https://www.prisma.io


Đây là một chiến lược bộ nhớ đệm tốt cho các ứng dụng nặng về hoạt động ghi để cải thiện hiệu suất ghi của ứng dụng. Nó cũng có thể giúp điều chỉnh các thời gian ngừng hoạt động cơ sở dữ liệu vừa phải và các lỗi có thể xảy ra trong các trường hợp.


Nó cũng có thể hoạt động tốt khi được ghép nối với bộ nhớ đệm đọc qua. Hơn nữa, nó có thể giảm thêm khối lượng công việc ghi trên cơ sở dữ liệu nếu hỗ trợ phân phối. Tuy nhiên, nhược điểm là nếu bộ nhớ cache bị lỗi, dữ liệu có thể bị mất vĩnh viễn. Trong hầu hết các cơ sở dữ liệu quan hệ, cơ chế ghi vào bộ nhớ đệm ghi lại được bật theo mặc định.


Viết xung quanh

Trong trường hợp này, dữ liệu được ghi trực tiếp vào cơ sở dữ liệu và chỉ dữ liệu được đọc mới được lưu trữ trong bộ đệm.


Nguồn: https://www.prisma.io


Nó có thể được kết hợp với bộ nhớ đệm đọc qua và có thể là một lựa chọn tốt trong các trường hợp dữ liệu được ghi một lần và chỉ được đọc một vài lần. Ví dụ, khi có nhu cầu về nhật ký hoặc cuộc trò chuyện thời gian thực.


Sự kết luận

Trong bài viết này, chúng ta đã thảo luận về bộ nhớ đệm là gì và các cấp độ khác nhau của bộ nhớ đệm trong một ứng dụng và tại sao chúng ta cần nó. Sau đó, chúng tôi cũng thảo luận về các chiến lược bộ nhớ đệm khác nhau cho bộ nhớ đệm phía máy chủ. Tuy nhiên, không nhất thiết bất kỳ một trong các chiến lược bộ nhớ đệm này có thể đáp ứng các trường hợp sử dụng thực tế của bạn nhưng bạn nên kết hợp các chiến lược này để có kết quả tốt nhất.


Đối với một nhà phát triển mới làm quen với điều này, nó có thể yêu cầu một số thử nghiệm và lỗi, hoặc chúng ta có thể nói, nhấn hoặc bỏ lỡ để hiểu rõ hơn về khái niệm theo nghĩa thực tế và đưa ra giải pháp tốt nhất cho một trường hợp sử dụng cụ thể.


Đó là tất cả cho bài viết này, tôi hy vọng bạn thấy nó hữu ích. Hãy cho tôi biết những gì bạn nghĩ. Bạn có thể kết nối với tôi tại đây:


LinkedIn | Twitter | GitHub


Hãy đọc tiếp!