Data nên lưu vào database trước rồi mới lưu vào cache hay phải làm ngược lại?

3125

Bài viết được sự cho phép của tác giả Võ Doãn Thành

1. Tâm sự xíu nha

Đã mấy lần bạn được nghe câu hỏi này khi đang phỏng vấn ở công ty chưa?

Nếu đã từng thì mình rất vui vì bạn đã được nhà tuyển dụng đánh giá cao về kiến thức chuyên môn hoặc kinh nghiệm làm việc.

Đối với mình đây sẽ là câu hỏi nâng cao để khai thác 1 ứng viên về cách xử lý tình huống.

Bạn có thể đọc nhiều sách hoặc nghe youtube để nạp thêm kiến thức về xây dựng hệ thống dễ maintain, dễ mở rộng, thiết kế các ứng dựng theo kiến trúc microservice, hoặc làm sao để bảo vệ ứng dụng tránh những tấn công, …

Nhưng mà để lựa chọn được giải pháp nào theo từng hoàn cảnh thì đó là kĩ năng.

Vì thực tế nếu mà bạn không có kĩ năng để đưa ra nên chọn giải pháp nào thì sẽ có thể tốn nhiều thời gian hoặc tiền bạc nếu giải pháp của bạn lựa chọn phát sinh ra vấn đề khác.

2. Hiểu câu hỏi

Ok, giờ mình quay lại câu hỏi nha. Nếu bạn chưa từng được hỏi câu hỏi hay phải tự tìm câu trả lời cho câu hỏi này.

Thì bạn dành khoảng 2 phút suy nghĩ thử xem câu trả lời nên là gì đây.

Hmmm, nếu bạn vội trả lời liền thì câu trả lời sẽ không thoả đáng cho nhà tuyển dụng nha.

Đọc kĩ lại câu hỏi 1 lần nữa. Vì trong câu hỏi này đang có lỗi sai. Bạn có thể tìm ra nó được chứ?

(Dành thêm khoảng 2 phút xem thử chỗ nào đang chưa đúng nha.)

Câu hỏi này đáng lẽ nên có 2 vế chứ không phải chỉ có 1 vế. Cái đang thiếu là là ngữ cảnh cho câu hỏi (context).

Sẽ rất khó để đưa ra giải pháp nếu chúng ta không biết được giải pháp mà sẽ đưa ra cho hệ thống như thế nào, nghiệp vụ ưu tiên của hệ thống là gì, những rũi ro mà hệ thông sẽ sẵn sàng chấp nhận sẽ là gì,…

Nhức cái đầu rồi đúng không? Đầu tiên hãy hỏi lại là tuyển dụng những thắc mắc trên trước nhé.

  Ôn tập chi tiết về database trong lập trình PHP

  Câu hỏi phỏng vấn Database Developer/ Database Administrator thường gặp

3. Câu trả lời

Bây giờ, chúng ta đã hiểu được yêu cầu của nhà tuyển dụng rồi nha. Mình sẽ giúp bạn làm rõ từng giải pháp nhé.

1. Data nên lưu vào database trước rồi mới lưu vào cache:

– Giải pháp này được chọn khi chúng ta cần sự nhất quán về mặt data (consistency).

– Nếu bạn có 10 server cùng chạy thì mong muốn khi có bất kỳ sự thay đổi nào 10 server sẽ có thông tin giống nhau.

– Và không có sự sai phạm nào về data. Không thể server này có data mới nhưng server khác lại data cũ (Nguyên nhân có thể fail transaction hoặc không thể ghi vào database vì hệ thống fail).

Ví dụ, trong hệ thống đặt vé du lịch, có thể có các microservice riêng biệt xử lý việc tìm kiếm chuyến bay, đặt phòng khách sạn và xử lý thanh toán.

Microservice tìm kiếm chuyến bay sẽ kiểm tra tính khả dụng với microservice hãng hàng không. Nếu có chuyến bay có sẵn, microservice đặt vé sẽ đặt chỗ trên chuyến bay và tạo một bản ghi đặt vé trong database.

Cuối cùng, nó sẽ cập nhật cache để phản ánh sự giảm tính khả dụng của chuyến bay. Lúc này nếu trong quá trình trên có bất kỳ sai sót nào thì chỗ ngồi sẽ bị chiếm mất hoặc không thể cho người khác đặt.

Xem thêm Việc làm database hấp dẫn trên TopDev

2. Data nên lưu vào cache trước rồi mới lưu vào database:

– Giải pháp này được chọn khi chúng ta cần tính khá dụng khi thao tác ghi (availability). Bất cứ lệnh ghi nào (write) thì cache sẽ có thông tin mới đó.

– Người dùng có thể thấy data mới nhất cho dù data đó đang chưa được ghi xuống database.

Ví dụ, một ứng dụng social có thể có các microservice riêng biệt cho bài đăng của người dùng và newsfeed của người dùng. Khi người dùng làm mới newsfeed của mình, microservice newsfeed sẽ đầu tiên kiểm tra cache để tìm bài đăng gần đây.

Nếu cache là mới, nó sẽ hiển thị những bài đăng đó ngay lập tức. Trong background, nó sẽ gọi không đồng bộ microservice bài đăng để lấy bất kỳ bài đăng mới nào và cập nhật vào database với chúng.

Điều này cung cấp một tải newsfeed ban đầu nhanh chóng ngay cả khi có một chút trễ trong việc hiển thị bài đăng hoàn toàn mới.

4. Kết luận:

Mỗi lựa chọn nó đi theo từng bài toán cụ thể. Mình hy vọng với các ví dụ trên giúp bạn phần nào hiểu được độ ưu tiên để đưa ra quyết định cho phù hợp nhé.

Bài viết gốc được đăng tải tại LinkedIn Thanh Vo

Xem thêm:

Xem thêm tuyển dụng các vị trí IT hấp dẫn trên TopDev