Bỏ qua

In memory statless'full


1. Bộ nhớ đệm in-memory (In-memory Cache)

Bộ nhớ đệm in-memory là một cách lưu trữ dữ liệu tạm thời trong RAM (bộ nhớ truy cập ngẫu nhiên). Do RAM nhanh hơn rất nhiều so với ổ đĩa cứng hoặc các cơ sở dữ liệu lưu trữ trên đĩa, việc truy xuất dữ liệu từ bộ nhớ đệm in-memory giúp tăng tốc độ đáng kể.

Tại sao cần bộ nhớ đệm in-memory?

Khi một ứng dụng phải xử lý nhiều yêu cầu (queries) phức tạp, nếu mỗi lần đều truy vấn trực tiếp vào cơ sở dữ liệu, thời gian xử lý sẽ rất lâu. Bộ nhớ đệm in-memory lưu trữ những dữ liệu thường xuyên được truy vấn hoặc kết quả của những phép tính phức tạp. Điều này giảm tải công việc cho cơ sở dữ liệu chính và tăng tốc độ phản hồi của ứng dụng.

Ví dụ cụ thể:

  • Google Search: Khi bạn tìm kiếm một từ khóa phổ biến, kết quả được trả về rất nhanh nhờ thông tin đã được lưu sẵn trong bộ nhớ đệm. Nếu một từ khóa chưa được tìm kiếm trước đó, Google sẽ lấy dữ liệu từ cơ sở dữ liệu chính và sau đó lưu kết quả vào bộ nhớ đệm để các lần tìm kiếm sau nhanh hơn.

  • Website thương mại điện tử: Dữ liệu về các sản phẩm "bán chạy nhất" hoặc "đang giảm giá" được lưu trong bộ nhớ đệm. Khi người dùng truy cập, trang web trả về dữ liệu từ bộ nhớ đệm mà không cần truy vấn vào cơ sở dữ liệu.

Lợi ích chính của bộ nhớ đệm in-memory:

  1. Tăng tốc độ: Truy vấn nhanh hơn vì dữ liệu nằm trong RAM.
  2. Giảm tải cho cơ sở dữ liệu: Cơ sở dữ liệu không cần xử lý cùng một yêu cầu nhiều lần.
  3. Tối ưu chi phí: Giảm thời gian phản hồi, nâng cao trải nghiệm người dùng.

Cách hoạt động:

  • Cache Hit: Khi ứng dụng yêu cầu dữ liệu và bộ nhớ đệm đã lưu sẵn dữ liệu đó, dữ liệu sẽ được trả về ngay lập tức từ cache.
  • Cache Miss: Nếu dữ liệu không có trong bộ nhớ đệm, ứng dụng sẽ lấy dữ liệu từ cơ sở dữ liệu chính, sau đó lưu vào bộ nhớ đệm để dùng lại trong tương lai.

2. Ứng dụng Stateless

Stateless có nghĩa là không lưu trữ trạng thái (state) của người dùng hoặc phiên làm việc trên máy chủ ứng dụng.

Vậy trạng thái là gì?

  • State (trạng thái) là thông tin liên quan đến người dùng hoặc phiên làm việc mà máy chủ cần để xử lý yêu cầu. Ví dụ: bạn đăng nhập vào một trang web, trạng thái "đã đăng nhập" là trạng thái của bạn.

Ứng dụng Stateless hoạt động như thế nào?

Trong ứng dụng Stateless, máy chủ không giữ bất kỳ trạng thái nào. Thay vào đó, thông tin trạng thái được lưu trữ ở nơi khác, ví dụ như: 1. Trong token được gửi kèm với mỗi yêu cầu (ví dụ: JWT - JSON Web Token). 2. Trong bộ nhớ đệm in-memory như Redis.

Khi người dùng gửi một yêu cầu, máy chủ sẽ kiểm tra trạng thái từ các nguồn này thay vì tự lưu nó.

Ví dụ cụ thể:

  • Netflix:
  • Khi bạn xem phim trên Netflix, nếu bạn tạm dừng video ở thiết bị này và tiếp tục xem ở thiết bị khác, trạng thái xem phim của bạn (vị trí bạn đã xem đến) không lưu trên từng máy chủ. Thay vào đó, Netflix lưu trạng thái này trong một hệ thống bên ngoài, như Redis. Nhờ đó, bất kỳ máy chủ nào trong hệ thống Netflix cũng có thể xử lý yêu cầu của bạn.

  • Ứng dụng web nhiều máy chủ:

  • Bạn đăng nhập vào một trang web được lưu trên nhiều máy chủ. Nếu phiên đăng nhập của bạn được lưu trên một máy chủ cụ thể, bạn sẽ bị "đăng xuất" nếu lần sau hệ thống chuyển bạn sang máy chủ khác. Để khắc phục, thông tin phiên đăng nhập được lưu trong Redis (bộ nhớ đệm in-memory), nên bất kỳ máy chủ nào cũng có thể đọc được thông tin này.

Lợi ích chính của Stateless:

  1. Dễ mở rộng (scalable):
  2. Các máy chủ không cần chia sẻ thông tin trạng thái với nhau, dễ dàng thêm máy chủ mới khi cần.
  3. Linh hoạt:
  4. Một yêu cầu từ người dùng có thể được xử lý bởi bất kỳ máy chủ nào, không bị phụ thuộc vào máy chủ cũ.
  5. Đáng tin cậy (reliable):
  6. Nếu một máy chủ gặp sự cố, các máy chủ khác vẫn có thể xử lý yêu cầu mà không mất trạng thái của người dùng.

Kết hợp Bộ nhớ đệm và Stateless

Hai khái niệm này thường đi đôi với nhau. Bộ nhớ đệm in-memory như Redis hoặc Memcached thường được sử dụng để hỗ trợ ứng dụng Stateless.

Ví dụ thực tế:

  1. Lưu session trong Redis:
  2. Khi người dùng đăng nhập, thông tin phiên làm việc của họ được lưu vào Redis. Dù yêu cầu của người dùng được chuyển đến máy chủ nào, máy chủ đó đều có thể lấy trạng thái từ Redis.

  3. Caching dữ liệu thường xuyên sử dụng:

  4. Kết quả truy vấn cơ sở dữ liệu thường xuyên được lưu trong Redis. Khi người dùng gửi yêu cầu, máy chủ kiểm tra Redis trước, nếu có thì trả kết quả ngay (cache hit), nếu không thì lấy dữ liệu từ cơ sở dữ liệu và lưu lại Redis (cache miss).

So sánh dễ hiểu:

Khái niệm Bộ nhớ đệm in-memory Ứng dụng Stateless
Mục đích Lưu trữ dữ liệu tạm thời để truy xuất nhanh hơn Không lưu trạng thái trên máy chủ, giúp dễ mở rộng
Dữ liệu lưu trữ Kết quả truy vấn, phiên làm việc, dữ liệu tạm thời Token phiên làm việc hoặc trạng thái lưu ở cache
Kỹ thuật hỗ trợ Redis, Memcached JWT, Redis (session storage), các API Stateless
Ví dụ cụ thể Lưu kết quả tìm kiếm hoặc sản phẩm phổ biến Xem phim Netflix liên tục trên nhiều thiết bị

Bình luận