Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Cơ Sở Dữ Liệu

Làm chủ mở rộng quy mô MongoDB: Hướng dẫn toàn diện cho sự tăng trưởng lớn

Bài viết gốc được đăng tải vào ngày 4 tháng 6 năm 2018 tại ObjectRocket.com/blog

Chúng ta có thể định nghĩa mở rộng quy mô (scaling) là việc lấy vảy cá. Tuy nhiên, với cơ sở dữ liệu, scaling đề cập đến khả năng mở rộng để đáp ứng các nhu cầu bổ sung về lưu trữ, ổ cứng, RAM, CPU, chu kỳ tính toán, mạng, hoặc các tài nguyên khác.

Làm chủ mở rộng quy mô MongoDB: Hướng dẫn toàn diện cho sự tăng trưởng lớn

Làm sao bạn biết khi nào cần mở rộng quy mô?

Ngày nay, việc thấy sự tăng trưởng nhanh chóng của dữ liệu và tỷ lệ áp dụng ứng dụng nhanh là điều phổ biến, chẳng hạn như khi ứng dụng bắt đầu lan truyền (go viral) và việc sử dụng bùng nổ. Khi điều này xảy ra, bạn sẽ nhanh chóng vượt quá môi trường ban đầu. Sự tăng trưởng đó có thể xảy ra do nhu cầu lưu trữ dữ liệu vật lý, các vấn đề hiệu suất và sự suy giảm đòi hỏi thêm tài nguyên. Nghĩ đến CPU, RAM, mạng, hoặc kết hợp tất cả các lĩnh vực đó. Bạn có thể chủ động lập kế hoạch cho sự tăng trưởng, hoặc bạn có thể chọn mở rộng khi bắt đầu thấy các vấn đề hiệu suất nhỏ.

Mở rộng chủ động

Có ít nhất hai mẫu chung có thể xảy ra khi bạn chủ động lập kế hoạch mở rộng:

  • Bạn có một đợt đẩy marketing lớn sắp tới, và bạn sẽ tăng trưởng đáng kể về số lượng khách hàng hoặc lượng dữ liệu.
  • Ứng dụng hoặc kinh doanh của bạn có xu hướng theo chu kỳ (chẳng hạn như mua sắm Giáng sinh, quyết tâm Năm mới, v.v.), và bạn thấy sự gia tăng hoạt động dẫn đến việc thu thập và giữ một lượng lớn dữ liệu.

Đọc bài viết của chúng tôi: Cách xác định khi nào là thời điểm đúng để mở rộng instance MongoDB của bạn.

Mở rộng phản ứng (phụ động)

Nếu bạn gặp các nút thắt (bottlenecks) và bạn kỳ vọng tiếp tục tăng trưởng, bạn cần nghĩ đến việc mở rộng.

Các dấu hiệu báo động bao gồm những điều sau:

  • Thời gian truy vấn tăng lên cho người dùng cuối
  • Thời gian đăng nhập tăng lên
  • Yêu cầu và máy chủ bị đóng băng (freezing up)
  • Khiếu nại về cơ sở dữ liệu từ các nhà phát triển
  • Thời gian phản hồi máy chủ chậm hơn
  • Tải tăng lên trên các host
  • Lỗi hết bộ nhớ (Out-of-memory errors)
  • Bầu cử không dự định (Unintended elections)
  • Lỗi trong log

Khi bạn bắt đầu thấy những dấu hiệu này, đã đến lúc bắt đầu mở rộng để theo kịp nhu cầu và đảm bảo bạn không mất khách hàng.

Bạn có thể mở rộng theo chiều dọc (lên) hoặc theo chiều ngang (ra)

Làm chủ mở rộng quy mô MongoDB: Hướng dẫn toàn diện cho sự tăng trưởng lớn

Mở rộng theo chiều dọc (Vertical Scaling)

Đây là phương pháp Big Iron kinh điển: Một máy lớn với nhiều tài nguyên (nhân CPU, tốc độ CPU cao, nhiều RAM, lưu trữ). Các lợi ích chính của mở rộng dọc bao gồm giảm độ phức tạp kiến trúc và ít host hơn để bảo trì. Điều này hữu ích nếu bạn không có ai xử lý bảo trì cho bạn.

Có một số cách để mở rộng dọc ngày nay. Một số tùy chọn bao gồm phần cứng commodity tốt hơn, ổ cứng và lưu trữ rẻ hơn, các tùy chọn lưu trữ tốt hơn, bộ nhớ rẻ hơn, phần mềm tốt hơn, và mạng để bạn có thể xử lý failover và gián đoạn một cách nhẹ nhàng hơn.

Mở rộng lên (scale up) lý tưởng cho nhiều ứng dụng và nhu cầu, và chúng tôi khuyến nghị Replica Sets mà chúng tôi thảo luận ở phần sau. Một điều cần lưu ý khi bạn sử dụng các replica set lớn hơn là có thể có chi phí ẩn khi mở rộng dọc. Nếu môi trường của bạn tiếp tục tăng trưởng nhanh chóng, bạn có thể phải liên tục chuyển sang máy lớn hơn hoặc có thêm tài nguyên cho đến khi đạt điểm mà điều đó không còn là lựa chọn. Bạn cũng nên cân nhắc rằng chu kỳ nâng cấp kém hiệu quả hơn trên một host lớn đơn lẻ so với môi trường mở rộng ngang. Với sự tăng trưởng liên tục, bạn phải quyết định xem có nên tiếp tục mở rộng lên hay có thể hưởng lợi từ mở rộng ngang.

Mở rộng theo chiều ngang (Horizontal Scaling)

Sharding là mở rộng ngang. Sharding lưu trữ dữ liệu trên nhiều nút, phân phối tải và quy trình trên các host. Replication (sao chép) được xử lý bằng mô hình Primary-Replica với khả năng thêm nút bổ sung khi cần.

Cân bằng tải (load balancer) phân phối các khối dữ liệu (chunks) trên các ổ đĩa của các nút.

Điều này tăng khả năng đọc và ghi bằng cách phân phối các thao tác đọc và ghi trên một nhóm máy, thay vì dồn mọi thứ vào một máy. May mắn thay, đã có những cải tiến lớn trong chức năng balancer qua các bản phát hành gần đây. Mở rộng ngang tận dụng khả năng sharding tích hợp sẵn của MongoDB® và hưởng lợi từ việc sử dụng phần cứng commodity rẻ hơn.

Khi bạn mở rộng ngang, bạn thêm tài nguyên với host vật lý hoặc ảo.

  • Vật lý – nhiều phần cứng commodity chi phí thấp
  • Ảo – thêm nhân CPU hoặc nút bổ sung bằng cách sử dụng VM hoặc đám mây
  • Mạng – thêm cân bằng tải, quy trình mongoS® bổ sung, v.v.

Sử dụng công nghệ cân bằng tải cải tiến (phần cứng và phần mềm) để chuyển lưu lượng đến nơi nó cần đến bằng cách sử dụng cân bằng tải.

Cách triển khai mở rộng với Replica Sets trong MongoDB?

MongoDB có thể mở rộng ngang bằng cách sử dụng các replica set lớn đơn lẻ với một Primary và hai Secondaries có giao tiếp heartbeat (nhịp tim) cho trạng thái lên/xuống. Sao chép (replication) xảy ra trên các secondary thông qua logistics vận hành.

Mở rộng ngang: Replica set hay Sharding?

Điều đánh đổi với sharding là độ phức tạp tổng thể tăng lên. Nhưng sharding cũng mang lại lợi ích bằng cách đơn giản hóa bảo trì. Nó cho phép nâng cấp lăn (rolling upgrades) và cho phép bạn thực hiện các thao tác nhất định như xây dựng chỉ mục (index builds) song song cùng một lúc trên các shard và nút của bạn. Dưới đây là một số so sánh giữa replica set lớn hơn so với cụm sharded:

Replica Set Sharding
Đơn giản Cần chuyên môn (Expertise needed)
Nhiều đọc trên tập dữ liệu rộng (Không muốn scatter-gather) Nhiều ghi và cập nhật (Muốn đi thẳng đến shard chính xác để có kết quả)
Nhiều dữ liệu, tỷ lệ hoạt động thấp Nhiều dữ liệu, nhiều hoạt động
Cần nhiều tài nguyên bình thường, như ổ đĩa Cần nhiều hơn tất cả tài nguyên, bao gồm ổ đĩa, RAM, CPU, phạm vi ghi

Tại sao chọn MongoDB được quản lý từ ObjectRocket?

Rackspace ObjectRocket có nghĩa là chuyên môn (expertise). Chúng tôi quản lý MongoDB ở quy mô lớn từ đầu. Chúng tôi cung cấp hỗ trợ cho các replica set lớn hơn, và chúng tôi là một trong những nhà cung cấp đầu tiên cung cấp hỗ trợ cho các cụm MongoDB sharded lớn. Kỹ sư và DBA của chúng tôi có kinh nghiệm và đã vượt qua những rào cản rất phức tạp — những rào cản thường không được nghe đến đối với các nhà cung cấp khác.

Một số khách hàng lớn nhất của chúng tôi trong ngành công nghệ marketing (phân tích di động, truyền thông, chiến dịch email, phát hiện gian lận quảng cáo di động, và phương tiện kỹ thuật số) thường gặp các lỗi (bugs) mà không ai khác thấy hoặc biết cách sửa. Tỷ tỷ tin nhắn và tài liệu từ nhiều khách hàng, hàng nghìn chiến dịch lớn và nhỏ — nền tảng của chúng tôi lưu trữ tất cả.

Dịch vụ chúng tôi cung cấp bao gồm:

  • Cơ sở hạ tầng (Infrastructure)
  • Lưu trữ (Storage)
  • IOPS
  • Mạng (Network)
  • Hỗ trợ trực tiếp tốt nhất, không thể tốt hơn. Phản hồi đúng đắn 24×7.

Xem các gói và giá cả.

Chúng tôi nhằm cung cấp các giải pháp đám mây cung cấp cài đặt hoàn toàn mạnh mẽ và không cung cấp secondary trên các ảo lượng (virtual volumes). Do đó, chúng tôi tránh các vấn đề hiệu suất có thể phát sinh nếu một bầu cử xảy ra và primary của bạn kết thúc trên các host kém mạnh mẽ hơn được cung cấp chỉ cho secondaries. Đó là tất cả về mở rộng quy mô. Đừng quên tìm hiểu thêm về khi nào nên mở rộng instance MongoDB của bạn, mẹo sharding, chọn khóa shard tốt nhất, và nhiều hơn nữa.

Tìm hiểu thêm về Dịch vụ DBA của Rackspace.

Sử dụng tab Feedback để đưa ra bất kỳ nhận xét hoặc đặt câu hỏi. Bạn cũng có thể nhấp vào Sales Chat để trò chuyện ngay và bắt đầu cuộc hội thoại.