Distributed Lock với Redis - Single Instance

Lưu ý: Các ví dụ code trong bài viết này sử dụng Go. Các khái niệm áp dụng được cho mọi ngôn ngữ.

Tại sao cần lock?

Hãy tưởng tượng hai user cùng rút tiền từ một tài khoản ngân hàng. Nếu không có đồng bộ hóa, cả hai có thể đọc cùng một số dư, trừ số tiền riêng, rồi ghi lại, dẫn đến lost update. Một giao dịch rút tiền biến mất.

Đọc tiếp →

Chuẩn Hóa Dữ Liệu trong Cơ sở dữ liệu Quan hệ

Là kỹ sư phần mềm, chúng ta hằng ngày đều làm việc với việc trừu tượng hóa dữ liệu. Cố gắng tìm hiểu các khái niệm mơ hồ trong thế giới thực và trừu tượng hóa chúng thành thông tin có cấu trúc như biến, hàm, lớp, struct, v.v. để phần mềm có thể xử lý. Làm việc với dữ liệu hầu như luôn liên quan đến việc lưu trữ chúng vào một loại kho lưu trữ dữ liệu nào đó, một trong những loại lưu trữ đó là cơ sở dữ liệu quan hệ, thường được gọi là cơ sở dữ liệu SQL. Trong bài viết này, chúng ta sẽ đi qua các dạng chuẩn của cơ sở dữ liệu quan hệ để tìm hiểu chúng là gì, tại sao chúng tốt và tại sao chúng có thể không tốt. Chúng ta sẽ chỉ đề cập đến ba dạng chuẩn đầu tiên vì chúng là phổ biến nhất trong thế giới kỹ thuật phần mềm hiện đại.

Đọc tiếp →

CAP vs ACID vs BASE?!

CAP vs ACID vs BASE?!

Khi tìm hiểu về database, chúng ta thường nghe đến các khái niệm như định lý CAP, tính chất ACID, tính chất BASE. Các khái niệm này là gì mà đi đâu ta cũng gặp phải? Hãy cùng tôi tìm hiểu trong bài này!

CAP nghĩa là cái nón?

CAP là từ viết tắt của Consistency, Availability, Partition-tolerance được giới thiệu bởi Eric Brewer vào năm 2000 trong một buổi diễn thuyết. Brewer cho rằng, trong một hệ thống phân tán (distributed system) khi một sự kiện chia cách (network partition) xảy ra, hệ thống chỉ có thể lựa chọn giữa consistency hoặc availability. Vậy ba tính chất này là gì mà các hệ thống phân tán lại muốn có, và tại sao chúng không thể cùng lúc thoả mãn cả ba?

Đọc tiếp →

Dual Write

Dual Write

Khi làm việc với các hệ thống backend, thường có một pattern hay được sử dụng để xử lý dữ liệu nhận được. Chúng ta thường sẽ có một máy chủ chờ để nhận dữ liệu từ một message broker hoặc là qua một API nào đó. Khi dữ liệu này được truyền tới máy chủ, ta thường sẽ phải xử lý chuẩn hoá dữ liệu này theo logic nghiệp vụ. Dữ liệu này sẽ được lưu trữ vào database sau khi đã được xử lý. Và bước cuối cùng của quá trình này thường sẽ là máy chủ tiếp tục gửi dữ liệu đã được xử lý này đến các hệ thống, máy chủ tiếp theo để thực hiện xử lý tiếp nghiệp vụ. Quá trình này được gọi là dual write, hay còn được gọi là multi-write hoặc sync-write.

Đọc tiếp →