MiBee Steward v0.7.3 thay thế agent Go bằng Rust và áp dụng quy tắc đặt lại schema
Công cụ giám sát mạng tự lưu trữ MiBee Steward v0.7.3 đã thay thế agent viết bằng Go bằng phiên bản Rust nhẹ hơn, phá vỡ tính tương thích ngược với các cơ sở dữ liệu cũ và giới thiệu tính năng liên kết chỉ đọc giữa
Bài được dịch tự động từ bản gốc tiếng Anh.
Vào ngày 12 tháng 10 năm 2026, nhà phát triển đứng sau MiBee Steward đã ra mắt phiên bản 0.7.3, một bản cập nhật quan trọng cho công cụ giám sát mạng tự lưu trữ này. Bản phát hành này đưa ra một thay đổi mang tính phá vỡ (breaking change), từ chối khởi động nếu sử dụng cơ sở dữ liệu từ các phiên bản trước, buộc người dùng phải thực hiện quét mới hoàn toàn. Nó cũng thay thế agent phân tán được viết bằng Go bằng một triển khai mới bằng Rust nhằm cải thiện hiệu suất trên phần cứng có tài nguyên hạn chế.
Chuyện gì đã xảy ra
Tác động tức thì nhất đối với người dùng hiện tại là việc cố ý từ chối các tệp cơ sở dữ liệu cũ. MiBee Steward v0.7.3 sẽ không khởi động nếu nó phát hiện cơ sở dữ liệu từ v0.6 trở về trước, cũng như không chấp nhận các cơ sở dữ liệu từ v0.7.0 đến v0.7.2. Nhà phát triển đã loại bỏ chuỗi di trú phức tạp khi khởi động vốn cho phép các bản cập nhật gia tăng trước đây, điều này từng dẫn đến các lỗi DDL song song (parallel-DDL) khiến các thay đổi schema một phần làm hệ thống rơi vào trạng thái không nhất quán. Thay vào đó, binary hiện nay kiểm tra xem phiên bản schema trong cơ sở dữ liệu có khớp với nguồn duy nhất của sự thật (single source of truth) trong db/schema.sql hay không. Nếu chúng không khớp, ứng dụng sẽ thoát một cách sạch sẽ để ngăn ngừa hỏng hóc dữ liệu.
Để nâng cấp, quản trị viên phải sao lưu dữ liệu hiện có, khởi chạy binary mới trên một thư mục dữ liệu trống và cho phép hệ thống nạp lại bảng tài sản thông qua một lần quét mạng mới. Quy trình này cũng áp dụng cho mini database cục bộ của agent, nghĩa là lịch sử quét và thông tin đăng nhập SNMPv3 được lưu trữ cục bộ sẽ không được di trú. Nhà phát triển nhấn mạnh rằng việc đặt lại cứng (hard reset) này đảm bảo không còn trạng thái một phần nào gây nhầm lẫn cho hệ thống trong quá trình vận hành.
Một thay đổi kiến trúc lớn trong bản phát hành này là việc thay thế agent phân tán dựa trên Go bằng phiên bản Rust. Agent mới, nằm trong thư mục agent-rs/, tạo ra các bản build tĩnh musl cho các kiến trúc amd64, arm64 và armv7. Mặc dù tệp cấu hình agent.yaml vẫn giữ nguyên tính tương thích để tránh chỉnh sửa thủ công, nhưng runtime nền tảng đã thay đổi đáng kể để hỗ trợ phần cứng cũ hơn với bộ nhớ hạn chế. Nhà phát triển đã thử nghiệm thay đổi này trên thiết bị NanoPi NEO với 512 MB RAM, so sánh mức sử dụng tài nguyên của hai triển khai trong hai ngày lấy mẫu.
Chi tiết chính
- Tương thích cơ sở dữ liệu: v0.7.3 từ chối khởi động với bất kỳ cơ sở dữ liệu nào từ v0.6 trở về trước, cũng như v0.7.0–v0.7.2, buộc phải có trạng thái schema sạch.
- Viết lại agent: Agent phân tán hiện được viết bằng Rust, thay thế triển khai Go trước đó để giảm dấu chân bộ nhớ và cải thiện độ ổn định.
- Chỉ số hiệu suất: Trên thiết bị NanoPi NEO, agent Rust sử dụng RSS trung vị là 12 MB so với 54 MB của agent Go, với phương sai chặt chẽ hơn nhiều (11–12 MB so với 38–63 MB).
- Tăng thông lượng: Agent Rust đạt khoảng 1,7 lần thông lượng của agent Go khi thực hiện quét subnet
/24trên cùng phần cứng. - Hỗ trợ liên kết (Federation): Bản phát hành bổ sung tính năng liên kết chỉ đọc giữa hai trung tâm, cho phép mỗi bên xem thiết bị của bên kia mà không lộ thông tin đăng nhập hoặc cho phép lệnh từ xa.
- Sửa lỗi topo: Các bản cập nhật bao gồm xử lý tốt hơn các thiết bị đa cổng (multi-homed devices) để ngăn chặn tình trạng ping-pong danh tính và cải thiện việc phát hiện root bridge bằng cách sử dụng vai trò cổng STP.
Bối cảnh
MiBee Steward là một công cụ giám sát mạng dạng single-binary được thiết kế để trả lời câu hỏi về những thiết bị nào đang tồn tại trên mạng cục bộ. Nó sử dụng Go cho thành phần máy chủ chính với router Chi và SQLite thông qua modernc để tránh các phụ thuộc CGO. Giao diện người dùng được xây dựng bằng SvelteKit và nhúng trực tiếp vào binary. Công cụ xác định thiết bị theo nhà cung cấp, loại, cổng mở và chứng chỉ, đồng thời lập bản đồ các mối quan hệ lân cận. Nó được cấp phép theo AGPL-3.0, với giấy phép thương mại kép dành cho những ai muốn fork nó thành các sản phẩm đóng hoặc dịch vụ lưu trữ.
Việc chuyển từ Go sang Rust cho thành phần agent phản ánh một đánh đổi phổ biến trong lập trình hệ thống. Go cung cấp tốc độ phát triển nhanh và các nguyên ngữ đồng thời mạnh mẽ nhưng có thể có chi phí bộ nhớ cao hơn do bộ thu gom rác (garbage collector). Rust, mặc dù có đường cong học tập dốc hơn, cung cấp an toàn bộ nhớ mà không cần bộ thu gom rác, dẫn đến các binary nhỏ hơn và mức sử dụng tài nguyên dự đoán được hơn. Điều này đặc biệt quan trọng đối với các thiết bị biên như máy tính đơn bo mạch (single-board computers) có thể chỉ có 512 MB RAM và chạy nhiều dịch vụ đồng thời.
Tại sao điều này quan trọng
Đối với các đội ngũ vận hành hạ tầng riêng, quyết định phá vỡ tính tương thích cơ sở dữ liệu là một cân nhắc vận hành đáng kể. Mặc dù nhà phát triển lập luận rằng việc loại bỏ các bản di trú gia tăng giúp triệt tiêu một lớp lỗi tinh vi liên quan đến các cập nhật schema một phần, nhưng nó áp đặt một quy trình khôi phục thủ công lên người dùng. Quản trị viên phải lên kế hoạch cho thời gian ngừng hoạt động trong giai đoạn quét lại, vì bảng tài sản sẽ trống cho đến khi binary mới hoàn tất chu kỳ khám phá của nó. Điều này làm nổi bật sự căng thẳng giữa khả năng bảo trì mã dài hạn và sự tiện lợi vận hành ngắn hạn trong phần mềm tự lưu trữ.
Những cải tiến hiệu suất từ agent Rust rất phù hợp cho các tổ chức sử dụng phần cứng cũ hoặc tiết kiệm điện năng cho việc giám sát mạng. Trong các môi trường mà mỗi megabyte RAM đều quý giá, chẳng hạn như homelab hoặc mạng văn phòng nhỏ chạy trên máy tính đơn bo mạch, việc giảm từ ~54 MB xuống ~12 MB RSS trung vị là một con số đáng kể. Dải bộ nhớ chặt chẽ hơn cũng hỗ trợ việc lập kế hoạch dung lượng, vì hệ thống ít có khả năng gặp phải các đợt tăng đột biến bất ngờ có thể kích hoạt lỗi out-of-memory kills trên các thiết bị bị ràng buộc tài nguyên.
Việc giới thiệu tính năng liên kết chỉ đọc giải quyết một nhu cầu phổ biến của các đội ngũ phân tán hoặc tổ chức đa địa điểm muốn có tầm nhìn xuyên suốt các mạng mà không ảnh hưởng đến bảo mật. Bằng cách cho phép một instance xem danh sách thiết bị của instance khác mà không cấp quyền truy cập lệnh, công cụ giảm thiểu rủi ro di chuyển ngang (lateral movement) trong trường hợp bị xâm phạm. Lựa chọn thiết kế này đảm bảo rằng các lỗi hoặc lỗ hổng ở một trung tâm không thể bị khai thác để kiểm soát thiết bị trong mạng peer, duy trì ranh giới bảo mật nghiêm ngặt giữa các miền quản trị.
Bạn có thể làm gì
- Sao lưu trước khi nâng cấp: Chạy script
./scripts/backup.shđược cung cấp trước khi cố gắng cài đặt v0.7.3 để bảo toàn mọi dữ liệu lịch sử quan trọng. - Chuẩn bị cho việc quét lại: Lên lịch một cửa sổ bảo trì cho việc nâng cấp, vì hệ thống sẽ cần thời gian để khám phá lại tất cả các tài sản trên mạng sau khi khởi động với cơ sở dữ liệu trống.
- Cập nhật cấu hình agent: Đảm bảo các tệp
agent.yamlcủa bạn sẵn sàng cho agent Rust mới; mặc dù định dạng vẫn tương thích, hãy xác minh các đường dẫn và quyền hạn cho binary mới. - Thử nghiệm trên phần cứng mục tiêu: Nếu bạn sử dụng các thiết bị tài nguyên thấp, hãy triển khai agent Rust mới trên một đơn vị thử nghiệm trước để xác nhận rằng các bản build tĩnh musl hoạt động đúng với phiên bản kernel cụ thể của bạn.
- Xem xét cài đặt liên kết: Nếu bạn dự định sử dụng tính năng liên kết mới, hãy tạo các token xác thực ở phía peer và cấu hình cẩn thận các cài đặt
center_urlvàcidrđể hạn chế phơi nhiễm. - Kiểm tra biểu đồ topo: Sau khi nâng cấp, hãy xác minh rằng biểu đồ topo xác định đúng root bridge và các thiết bị đa cổng không còn nhảy giữa các phân đoạn trong UI.



