Cách xây dựng hệ thống có khả năng mở rộng cho người mới bắt đầu – Ngày 2: Database

Bài viết như một ghi chú ghi khi tác giả tìm hiểu về xây dựng hệ thống có khả năng mở rộng (Scalability).

Bài viết được dịch từ link: Scalability for Dummies – Part 2: Database

Image source

Nội dung phần 1 của series giúp chúng ta có thể mở rộng hệ thống theo chiều ngang một cách dễ dàng. Và giờ chúng ta đã sẵn sàng để xử lý hàng ngàn request đồng thời. Nhưng vì một lý do nào đó, ứng dụng của bạn dần chậm đi, cho tới khi nó dừng hẳn. Nguyên nhân: Cơ sở dữ liệu. Đó là MySQL đúng không?

Giờ những gì phải thay đổi không chỉ là thêm nhiều máy chủ, mà có thể cần một cái gì đó táo bạo hơn. Cuối cùng bạn có thể lựa chọn một trong 2 lựa chọn:

Lựa chọn thứ nhất là vẫn gắn bó với MySQL và giữa cho “con quái vật” đó hoạt động. Thuê một chuyên gia quản trị hệ quản trị cơ sở dữ liệu (DBA). Yêu cầu anh ta triển khai mô hình nhân bản master-slave (đọc dữ liệu từ slaves, và ghi dữ liệu vào master). Và nâng cấp phần cứng cho máy chủ master bằng cách thêm RAM, RAM và nhiều RAM nữa. Trong một vài tháng, báo cáo đến từ DBA sẽ có những từ khóa “sharding”, “denormalization” và “SQL turning”, và anh ta lo lắng về lượng thời gian làm thêm giờ cần thiết cho những tuần tới. Tới lúc này, mọi hành động mới để giúp cho cơ sở dữ liệu của bạn hoạt động sẽ tốn kém và mất thời gian hơn so với hành động ngay trước đó. Ứng dụng của chúng ta có thể đã tốt hơn nếu chúng ta lựa chọn giải pháp thứ hai ngay từ đầu – Khi mà dữ liệu của chúng ta còn nhỏ và dễ dàng để chuyển đổi.

Lựa chọn thứ hai có nghĩa là không chuẩn hóa dữ liệu ngay từ đầu, và bao gồm cả việc sử dụng câu lệnh JOIN trong bất kỳ truy vấn cơ sở dữ liệu nào. Chúng ta có thể vẫn dùng MySQL và sử dụng nó như một hệ quản trị dữ liệu NoSQL. Hoặc chúng ta có thể chuyển sang một cơ sở dữ liệu NoSQL tốt hơn và dễ mở rộng hơn như MongoDB hoặc CouchDB. Câu lệnh JOIN cần được hoàn thành ở code của ứng dụng. Bạn thực hiện bước này càng sớm thì code của ứng dụng sẽ càng ít phải thay đổi trong tương lai. Nhưng ngay cả khi chúng ta đã thành công chuyển sang sử dụng cơ sở dữ liệu NoSQL mới nhất, và thực hiện lệnh JOIN ở tầng ứng dụng, thì cơ sở dữ liệu của chúng ta vẫn ngày càng chậm hơn. Tôi sẽ cần giới thiệu về việc sử dụng Cache.

Từ khóa: ,