Facebook mở rộng quy mô MySQL như thế nào

Cố gắng không ngừng nâng cấp phần mềm cơ sở hạ tầng quan trọng của bạn cho nhiều bản phát hành và nếu bạn thực hiện thay đổi mã tùy chỉnh cho một dự án nguồn mở, hãy chuẩn bị cho công việc bổ sung để tích hợp lại các bản vá đó khi phiên bản cập nhật của phần mềm xuất hiện

Đó chỉ là một số bài học mà bạn có thể thu thập được từ một mục blog của Facebook được đăng vào thứ Năm, ghi lại quá trình chuyển đổi nhảy vọt quy mô lớn đôi khi nguy hiểm của công ty sang MySQL phiên bản 8. 0, từ số 5 cổ đại. 6 mà nó đã sử dụng hệ thống cơ sở dữ liệu MySQL mã nguồn mở của Oracle

Vâng, mặc dù Facebook đã tạo ra Cassandra, một kho lưu trữ NoSQL có thể mở rộng hiện do Datastax quản lý, gã khổng lồ truyền thông xã hội vẫn đang sử dụng cơ sở dữ liệu quan hệ truyền thống MySQL thực sự để lưu trữ hàng Petabyte thông tin người dùng có giá trị, theo tác giả của bài đăng, Facebook Production Engineering . Cho đến nay, một công ty đã mất gần một năm để chuyển sang MySQL 8. 0 từ 5. 6, được phát hành lần đầu tiên vào năm 2013 và hỗ trợ sẽ kết thúc vào năm nay. Oracle tung ra MySQL 8. 0 trong năm 2018

Vượt qua khó khăn trên 5. 7

Công ty đã bỏ qua hoàn toàn việc nâng cấp lên MySQL 5. 7, bản phát hành chính giữa 5. 6 và 8. 0. Vào thời điểm đó, Facebook đang xây dựng công cụ lưu trữ tùy chỉnh của mình, được gọi là MyRocks, cho MySQL và không muốn làm gián đoạn quá trình triển khai, các kỹ sư viết. MyRocks là bản chuyển thể của MySQL dành cho RocksDB, một công cụ lưu trữ được tối ưu hóa cho hiệu suất ghi nhanh mà Instagram đã xây dựng để tối ưu hóa Cassandra. Bản thân Facebook đang sử dụng MyRocks để cung cấp năng lượng cho “tầng dịch vụ cơ sở dữ liệu người dùng” của mình, nhưng sẽ yêu cầu một số tính năng trong MySQL 8. 0 để hỗ trợ đầy đủ các tối ưu hóa như vậy

Bỏ qua phiên bản 5. 7, tuy nhiên, làm phức tạp quá trình nâng cấp. “Bỏ qua một phiên bản chính như 5. 7 vấn đề đã giới thiệu mà quá trình di chuyển của chúng tôi cần giải quyết”, các kỹ sư thừa nhận trong bài đăng trên blog. Máy chủ không thể đơn giản được nâng cấp tại chỗ. Họ phải sử dụng kết xuất hợp lý để thu thập dữ liệu và xây dựng lại các máy chủ cơ sở dữ liệu từ đầu — trong một số trường hợp, công việc này mất vài ngày. API thay đổi từ 5. 6 đến 8. 0 cũng phải được root và việc hỗ trợ hai phiên bản chính trong một bộ bản sao đơn giản là rất khó

Khi bắt đầu công việc [vẫn đang được tiến hành], công ty đã có 1.700 bản vá mã ban đầu được viết cho v5. 6 cần được chuyển sang 8. 0 ở dạng nào đó. Một số API không được dùng nữa trong 5. 7 đã bị loại bỏ hoàn toàn bởi phiên bản 8. 0, có nghĩa là các nhà phát triển Facebook phải viết lại mã ứng dụng dựa trên các API cũ này

Nhóm cập nhật đã sắp xếp các bản vá cần thiết thành một số nhóm khác nhau, nhóm nhiều bản vá cho cùng một tính năng lại với nhau. Một số bản vá lỗi của Facebook hoàn toàn không cần phải chuyển tiếp vì chức năng mà chúng cung cấp sau đó đã được bao phủ bởi 8. 0 chính nó. Ngoài ra còn có các tính năng không phải máy chủ cần được chuyển, chẳng hạn như các tính năng hỗ trợ môi trường xây dựng, các công cụ MySQL đã sửa đổi như mysqlbinlog hoặc chức năng bổ sung đó, như API ứng dụng khách không đồng bộ

Một số tính năng phức tạp nhất yêu cầu thay đổi đáng kể đối với 8. 0 để hoạt động bình thường. Vào thời điểm bài đăng trên blog này được phát hành, nhóm đã đánh giá 2.300 bản vá, 1.500 trong số đó đang tiến tới 8. 0

Di chuyển nó trên Over

Nỗ lực di chuyển thực tế liên quan đến việc gộp nhiều phiên bản mysqld [daemon lõi MySQL thực tế] thành các bộ bản sao lớn hơn, sử dụng phần mềm được chế tạo đặc biệt để tự động hóa quy trình thay đổi qua các nhóm bản sao lớn. Mỗi bộ sao chép [có thể bao trùm các trung tâm dữ liệu khác nhau] có một phiên bản chính và nhiều phiên bản phụ. Chiến lược chuyển đổi là tạo và thêm 8. 0 thứ cấp qua bản sao logic bằng mysqldump, sau đó thực hiện các bước sau để thực hiện chuyển đổi

  • Kích hoạt lưu lượng đọc trên 8. 0 thứ cấp
  • cho phép 8. 0 phiên bản được thăng cấp lên chính
  • Vô hiệu hóa 5. 6 trường hợp cho lưu lượng đọc
  • Loại bỏ tất cả 5. 6 trường hợp

Để xác thực rằng quá trình di chuyển sẽ hoạt động, nhóm đã viết các thử nghiệm tích hợp cho phần mềm tự động hóa. Phần mềm này được chạy trong môi trường thử nghiệm có một số lỗi nhỏ về kiểu trường hợp cạnh. Đối với quá trình di chuyển MyRocks, nhóm đã xây dựng một khung kiểm tra bóng MySQL để nắm bắt lưu lượng sản xuất và phát lại chúng cho các phiên bản thử nghiệm

Công việc di chuyển đang tiếp tục, nhưng Facebook đã tận hưởng những lợi ích của MySQL 8. 0, Nayak và Lee khẳng định. Chẳng hạn, một số ứng dụng đang sử dụng các tính năng mới như Lưu trữ tài liệu và hỗ trợ DateTime được cải thiện

Facebook đã tham gia cùng một số dịch vụ Internet nặng ký khác, chẳng hạn như Google và LinkedIn, để trang bị tốt hơn cho hệ thống quản lý cơ sở dữ liệu quan hệ MySQL cho công việc quy mô lớn

Nhóm mới, được gọi là WebScaleSQL, bao gồm các kỹ sư từ Facebook, Google, LinkedIn và Twitter

"Mục tiêu của chúng tôi khi khởi chạy WebScaleSQL là cho phép các thành viên định hướng theo quy mô của cộng đồng MySQL làm việc chặt chẽ hơn với nhau để ưu tiên các khía cạnh quan trọng nhất đối với chúng tôi", kỹ sư phần mềm Facebook Steaphan Greene viết trong một bài đăng trên blog thông báo về WebScaleSQL.

"Chúng tôi mong muốn tạo ra một hệ thống chia sẻ kiến ​​thức tích hợp hơn để giúp các công ty tận dụng các tính năng tuyệt vời đã có trong MySQL 5. 6, đồng thời xây dựng và bổ sung thêm nhiều tính năng dành riêng cho việc triển khai trong môi trường quy mô lớn," Greene viết

Facebook có một trong những triển khai MySQL nguồn mở lớn nhất, nếu không muốn nói là triển khai lớn nhất. Hệ thống cơ sở dữ liệu chứa dữ liệu của Facebook 1. 23 tỷ người dùng

Nhiều công ty mạng xã hội khác đã tránh sử dụng hoàn toàn cơ sở dữ liệu quan hệ như MySQL mà thay vào đó là cơ sở dữ liệu NoSQL như Cassandra hoặc Riak, được xây dựng từ đầu để lưu trữ các tập dữ liệu cực lớn trải rộng trên nhiều máy chủ

Thay vào đó, Facebook sử dụng MySQL cùng với hệ thống bộ nhớ đệm Memcached để sao chép dữ liệu trên toàn cầu trên nhiều máy chủ

WebScaleSQL không đơn độc trong nỗ lực tăng cường MySQL cho công việc quy mô Web toàn cầu có độ trễ thấp

Percona cung cấp một phiên bản MySQL để sử dụng hiệu suất cao, được gọi là Máy chủ Percona

Các nhánh MariaDB và Drizzle của MySQL cũng được tạo ra với các cải tiến về khả năng mở rộng

Ngay cả công ty quản lý mã MySQL, Oracle, cũng đã trang bị cho MySQL một trình xử lý có thể thực hiện các cuộc gọi nhanh giống như Memcached trực tiếp tới dữ liệu, thay vì đi qua chính công cụ cơ sở dữ liệu

Oracle cũng cung cấp một phiên bản riêng của MySQL, được gọi là MySQL Cluster, để sử dụng trên các cụm máy chủ, mặc dù nó khác đáng kể so với MySQL và không được sử dụng rộng rãi ngoài viễn thông và một số ngành cụ thể khác

Dự án WebScaleSQL khẳng định rằng cơ sở mã cho WebScaleSQL không phải là một nhánh của MySQL, một phiên bản riêng biệt không tương thích với chính MySQL, mà là một nhánh được tối ưu hóa cho việc sử dụng quy mô lớn

Công việc dựa trên phiên bản MySQL sẵn sàng sản xuất mới nhất, phiên bản 5. 6. Nhóm hy vọng Oracle sẽ chấp nhận một số thay đổi trong phiên bản tiếp theo của MySQL, phiên bản 5. 7

Dự án đã tạo ra một số công cụ để trợ giúp cho mục đích của nó. Nó đã phát triển một bộ các bài kiểm tra căng thẳng và một khung tự động để tạo và xem xét các thay đổi mã

Một số dự án đã và đang được triển khai

Một dự án là máy khách MySQL không đồng bộ sẽ không chặn các yêu cầu bổ sung khi nó hiện đang xử lý một. Facebook đã tạo bản sửa lỗi này và bản sửa lỗi hiện đang được các kỹ sư WebScaleSQL khác xem xét

Nhóm cũng đang xem xét các phần mở rộng khác của Facebook MySQL, chẳng hạn như cơ chế đọc trước có thể tăng tốc độ quét toàn bộ bảng theo hệ số 10

Joab Jackson đưa tin về phần mềm doanh nghiệp và tin tức công nghệ chung cho Dịch vụ Tin tức IDG. Theo dõi Joab trên Twitter tại @Joab_Jackson. Địa chỉ email của Joab là Joab_Jackson@idg. com

Facebook sử dụng MySQL như thế nào?

MySQL là cơ sở dữ liệu chính được Facebook sử dụng để lưu trữ tất cả dữ liệu xã hội . Họ bắt đầu với công cụ cơ sở dữ liệu MySQL của InnoDB và sau đó viết MyRocksDB, công cụ này cuối cùng được sử dụng làm công cụ Cơ sở dữ liệu MySQL. Memcache nằm trước MySQL dưới dạng bộ đệm.

Quy mô cơ sở dữ liệu MySQL như thế nào?

Cụm MySQL tự động phân đoạn [phân vùng] bảng trên các nút , cho phép cơ sở dữ liệu mở rộng theo chiều ngang trên phần cứng hàng hóa, chi phí thấp để phục vụ đọc và ghi .

Cơ sở dữ liệu Facebook nhanh như thế nào?

Theo Gigaom, Facebook sử dụng Autoscale làm trung gian giữa lưu lượng truy cập đến và máy chủ của công ty . Trong thời gian lưu lượng truy cập mạng thấp, Autoscale sẽ phân phối lưu lượng truy cập này đến một số lượng nhỏ máy chủ hơn và giữ cho các máy chủ này hoạt động ở công suất trung bình.

Facebook lưu trữ dữ liệu trong cơ sở dữ liệu như thế nào?

Facebook tạo ra 4 petabyte dữ liệu mỗi ngày — tức là một triệu gigabyte. Tất cả dữ liệu đó được lưu trữ trong cái được gọi là Tổ ong , chứa khoảng 300 petabyte dữ liệu.

Chủ Đề