Tối Ưu Hóa Mô-Đun AOI
Năm ngoái tôi đã từng viết vài bài luận về thiết kế mô-đun AOI. Việc tách riêng dịch vụ AOI thành hệ thống độc lập đã được xác định từ lâu, và hiện đang nhận được sự quan tâm tích cực từ nhiều nhóm dự án khác trong công ty. Qua các buổi thảo luận nội bộ, đã có 3-4 dự án bắt đầu lên kế hoạch triển khai cải tiến này.
Gần đây tôi đã tiến hành nghiên cứu sâu hơn về mặt kỹ thuật triển khai. Đầu tiên theo nguyên tắc KISS (Keep It Simple Stupid), tôi đã lược bỏ những chi tiết thừa thãi trong giao thức cũ. Tiêu biểu như việc không còn truyền thông tin tốc độ di chuyển của đối tượng tới mô-đun AOI nữa. Dù tốc độ có thể giúp tối ưu hóa thuật toán, nhưng dữ liệu này bản chất là dư thừa và dễ khiến chúng ta sa vào bẫy “tối ưu hóa sớm”.
Đồng thời, tôi bổ sung thêm giao thức thiết lập vùng quan tâm mặc định. Đây là cải tiến mang tính thực tiễn cao. Ban đầu tôi kỳ vọng người dùng sẽ tùy biến thiết lập AOI cho từng cặp thực thể, nhưng khi số lượng thực thể trong cảnh quá lớn thì lượng dữ liệu giao tiếp giữa các tiến trình sẽ tăng phi mã (dù tối ưu được về mặt xử lý). Trên thực tế, một thực thể AOI thường chỉ quan tâm đến các đối tượng trong phạm vi nhất định, nên việc thêm giao thức này giúp lọc bỏ hàng loạt thông tin vô nghĩa giữa các thực thể “không đội trời chung”.
Về phương án triển khai, tôi chọn mô hình tháp canh đơn giản nhất. Giả sử tầng ứng dụng yêu cầu mỗi thực thể chỉ quan tâm đến các đối tượng trong bán kính 100 mét, ta sẽ đặt các tháp canh cách nhau 100 mét. Các tháp này sẽ thông báo cho thực thể khi có đối tượng mới vào/vượt khỏi vùng được giám sát.
Cần nhấn mạnh rằng các tháp canh hoàn toàn trong suốt với tầng ứng dụng - chúng chỉ là cơ chế triển khai nội bộ. Giao thức thông báo cũng chỉ mang tính chất định hướng, không đảm bảo chính xác tuyệt đối theo bán kính thiết lập (thông tin sẽ được làm tròn lớn hơn giá trị người dùng thiết lập). Tầng ứng dụng sẽ tự xây dựng tập hợp “thực thể khả kiến” riêng, kết hợp với các giao thức AOI khác để có thông tin chính xác.
Vấn đề quan trọng nhất là cách bố trí các tháp canh. Ban đầu tôi nghĩ đến việc chia đều theo lưới 2D, nhưng ý tưởng này bị bác bỏ trong vòng 20 giây vì không tối ưu. Tôi bắt đầu tìm kiếm phương án tốt hơn, và kết quả là mô hình lục giác tổ ong như sau:
|
|
Khi phác thảo xong, đồng nghiệp nhận xét rằng đây chính là mô hình mạng tế bào (cellular network) trong viễn thông. Quả thực đây là phương án tối ưu vì mỗi thực thể chỉ cần được giám sát bởi 3 tháp canh (thay vì 4 tháp như trong mô hình lưới chữ nhật). Diện tích vùng phủ chồng lặp giữa các hình tròn ngoại tiếp của hình lục giác cũng nhỏ hơn đáng kể so với hình vuông. Trong quá trình triển khai, chúng ta có thể tạo nhiều cấp độ mạng tổ ong để đáp ứng nhu cầu đa dạng của tầng ứng dụng.