Chia sẻ bởi Anshul Chhabra, Senior Dev tại Microsoft
Vào năm 2015, một nhóm kỹ sư nhỏ đã phát triển Discord chỉ trong 60 ngày. Đến năm 2016, cơ sở dữ liệu của họ gặp khó khăn khi phải xử lý hơn 1 tỷ tin nhắn mỗi ngày. Dưới đây là cách họ đã mở rộng hệ thống để xử lý hàng tỷ tin nhắn mà không gặp sự cố:
1. Lựa chọn MongoDB để tăng tốc phát triển
Ban đầu, Discord sử dụng MongoDB để nhanh chóng triển khai và thử nghiệm các tính năng. Tuy nhiên, khi số lượng tin nhắn đạt 100 triệu, họ gặp phải các vấn đề:
- Dữ liệu và chỉ mục không còn đủ chỗ trong RAM, dẫn đến việc truy cập đĩa thường xuyên và tăng độ trễ.
- Việc phân mảnh (sharding) trong MongoDB phức tạp và thiếu ổn định, khiến việc mở rộng theo chiều dọc trở nên khó khăn.
2. Chuyển đổi sang Cassandra
Để giải quyết vấn đề, Discord chuyển sang sử dụng Cassandra, một cơ sở dữ liệu NoSQL phân tán với các ưu điểm:
- Khả năng mở rộng tuyến tính: Thêm nút mới dễ dàng khi cần.
- Độ sẵn sàng cao: Chịu được lỗi của nút mà không gây gián đoạn.
- Hiệu quả đã được chứng minh: Được sử dụng bởi các công ty lớn như Netflix và Apple.
- Cộng đồng mạnh mẽ: Mã nguồn mở với sự hỗ trợ rộng rãi.
Trước khi chuyển đổi hoàn toàn, họ đã thử nghiệm bằng cách ghi và đọc song song trên cả MongoDB và Cassandra để đảm bảo hiệu suất.
3. Vấn đề đầu tiên – Upsert và lỗi dữ liệu
Cassandra ưu tiên tính sẵn sàng hơn tính nhất quán, với mọi thao tác ghi đều là upsert (chèn hoặc cập nhật). Điều này dẫn đến việc khi có các thao tác chỉnh sửa và xóa đồng thời, dữ liệu có thể bị thiếu hoặc không đầy đủ. Để khắc phục:
- Thêm cơ chế xác minh dữ liệu để phát hiện và xóa các hàng bị lỗi.
- Sử dụng "tombstones" (xóa mềm) để xử lý các bất nhất một cách hiệu quả.
4. Vấn đề thứ hai – Quá tải tombstone làm chậm Cassandra
Sau 6 tháng, Cassandra bắt đầu chậm lại do:
- Một kênh có 1 tin nhắn nhưng hàng triệu mục đã bị xóa (tombstones).
- Cassandra phải quét qua các tombstone trong quá trình đọc, gây áp lực lớn lên bộ thu gom rác (GC) và dẫn đến các khoảng dừng hệ thống.
Để giải quyết:
- Giảm thời gian tồn tại của tombstone từ 10 ngày xuống 2 ngày để dọn dẹp nhanh hơn.
- Tối ưu hóa truy vấn để bỏ qua các phân vùng trống, tránh quét các tombstone không cần thiết.
5. Tối ưu hóa cuối cùng – Phân chia dữ liệu theo thời gian
Các kênh lớn trên Discord có thể phát triển vô hạn, dẫn đến các phân vùng dữ liệu lớn, khó truy cập. Giải pháp:
- Phân chia tin nhắn theo thời gian: Lưu trữ dữ liệu theo các khoảng thời gian cố định (ví dụ: mỗi 10 ngày).
- Mỗi phân chia tạo ra kích thước phân vùng cố định, ngăn chặn suy giảm hiệu suất.
Hiện trạng của Discord
- Sử dụng ScyllaDB (phiên bản viết lại của Cassandra bằng C++) để cải thiện hiệu suất và giảm áp lực lên bộ thu gom rác.
Việc chuyển đổi từ MongoDB sang Cassandra đã giúp Discord xử lý hiệu quả khối lượng tin nhắn khổng lồ, đảm bảo trải nghiệm người dùng mượt mà và không gián đoạn.
Website không chứa bất kỳ quảng cáo nào, mọi đóng góp để duy trì phát triển cho website (donation) xin vui lòng gửi về STK 90.2142.8888 - Ngân hàng Vietcombank Thăng Long - TRAN VAN BINH
=============================
Nếu bạn không muốn bị AI thay thế và tiết kiệm 3-5 NĂM trên con đường trở thành DBA chuyên nghiệp hay làm chủ Database thì hãy đăng ký ngay KHOÁ HỌC ORACLE DATABASE A-Z ENTERPRISE, được Coaching trực tiếp từ tôi với toàn bộ bí kíp thực chiến, thủ tục, quy trình của gần 20 năm kinh nghiệm (mà bạn sẽ KHÔNG THỂ tìm kiếm trên Internet/Google) từ đó giúp bạn dễ dàng quản trị mọi hệ thống Core tại Việt Nam và trên thế giới, đỗ OCP.
- CÁCH ĐĂNG KÝ: Gõ (.) hoặc để lại số điện thoại hoặc inbox https://m.me/tranvanbinh.vn hoặc Hotline/Zalo 090.29.12.888
- Chi tiết tham khảo:
https://bit.ly/oaz_w
=============================
2 khóa học online qua video giúp bạn nhanh chóng có những kiến thức nền tảng về Linux, Oracle, học mọi nơi, chỉ cần có Internet/4G:
- Oracle cơ bản: https://bit.ly/admin_1200
- Linux: https://bit.ly/linux_1200
=============================
KẾT NỐI VỚI CHUYÊN GIA TRẦN VĂN BÌNH:
📧 Mail: binhoracle@gmail.com
☎️ Mobile/Zalo: 0902912888
👨 Facebook: https://www.facebook.com/BinhOracleMaster
👨 Inbox Messenger: https://m.me/101036604657441 (profile)
👨 Fanpage: https://www.facebook.com/tranvanbinh.vn
👨 Inbox Fanpage: https://m.me/tranvanbinh.vn
👨👩 Group FB: https://www.facebook.com/groups/DBAVietNam
👨 Website: https://www.tranvanbinh.vn
👨 Blogger: https://tranvanbinhmaster.blogspot.com
🎬 Youtube: https://www.youtube.com/@binhguru
👨 Tiktok: https://www.tiktok.com/@binhguru
👨 Linkin: https://www.linkedin.com/in/binhoracle
👨 Twitter: https://twitter.com/binhguru
👨 Podcast: https://www.podbean.com/pu/pbblog-eskre-5f82d6
👨 Địa chỉ: Tòa nhà Sun Square - 21 Lê Đức Thọ - Phường Mỹ Đình 1 - Quận Nam Từ Liêm - TP.Hà Nội
=============================
cơ sở dữ liệu, cơ sở dữ liệu quốc gia, database, AI, trí tuệ nhân tạo, artificial intelligence, machine learning, deep learning, LLM, ChatGPT, DeepSeek, Grok, oracle tutorial, học oracle database, Tự học Oracle, Tài liệu Oracle 12c tiếng Việt, Hướng dẫn sử dụng Oracle Database, Oracle SQL cơ bản, Oracle SQL là gì, Khóa học Oracle Hà Nội, Học chứng chỉ Oracle ở đầu, Khóa học Oracle online,sql tutorial, khóa học pl/sql tutorial, học dba, học dba ở việt nam, khóa học dba, khóa học dba sql, tài liệu học dba oracle, Khóa học Oracle online, học oracle sql, học oracle ở đâu tphcm, học oracle bắt đầu từ đâu, học oracle ở hà nội, oracle database tutorial, oracle database 12c, oracle database là gì, oracle database 11g, oracle download, oracle database 19c/21c/23c/23ai, oracle dba tutorial, oracle tunning, sql tunning , oracle 12c, oracle multitenant, Container Databases (CDB), Pluggable Databases (PDB), oracle cloud, oracle security, oracle fga, audit_trail,oracle RAC, ASM, oracle dataguard, oracle goldengate, mview, oracle exadata, oracle oca, oracle ocp, oracle ocm , oracle weblogic, postgresql tutorial, mysql tutorial, mariadb tutorial, ms sql server tutorial, nosql, mongodb tutorial, oci, cloud, middleware tutorial, docker, k8s, micro service, hoc solaris tutorial, hoc linux tutorial, hoc aix tutorial, unix tutorial, securecrt, xshell, mobaxterm, Sửa bài viết