Cho một địa chỉ IP công cộng (peer A) và danh sách nhiều địa chỉ IP công cộng khác (kết hợp địa chỉ IPv4 và IPv6), cách dễ nhất để so khớp ngang hàng IP là gì địa chỉ của n
các đồng nghiệp gần nhất mà không cần các đồng nghiệp tự ping nhau để chấm điểm độ trễ? Tôi nghĩ rằng điều này là có thể bằng cách sử dụng BGP với một loạt các truy vấn phức tạp (và có thể một cái gì đó liên quan đến OSPF), nhưng tôi đã hy vọng rằng có thể có một giải pháp hoặc thư viện mà sẽ làm cho nó dễ dàng như các cuộc gọi chức năng lý thuyết dưới đây Logged .WebRTC: Kết hợp các đối tác gần nhất
// `peer` is a single IP address. `peer_list` is a list of IP addresses
// get the 5 nearest peers (ordered) to `peer` from `peer_list`
nearest_peers = get_nearest_ips(peer, peer_list, 5);
nên tôi chỉ sử dụng một trường hợp địa phương của cơ sở dữ liệu GeoIP MaxMind của + Haversine/Vincenty, hoặc là nó thực tế để sử dụng BGP thông qua một thư viện (với bộ nhớ đệm đúng nơi cần thiết) để thực hiện điều này?
Dường như loại mã này có thể tồn tại trong triển khai định tuyến anycast nguồn mở, mặc dù tôi không thể tìm thấy bất kỳ thứ gì phù hợp với trường hợp sử dụng này.
Giải pháp hoặc thư viện được đề xuất không phải hoạt động trên node.js — mọi ngôn ngữ đều ổn.
Tôi giả định danh sách IP là địa chỉ IP bên ngoài. Tôi sẽ sử dụng cơ sở dữ liệu GeoIP của MaxMind để lấy tọa độ của mỗi IP và sau đó sử dụng công thức Haversine để xác định vị trí ngắn nhất. Có lẽ nút cổ chai sẽ là thời gian phản hồi từ MaxMind (Ví dụ <400 ms) nhưng tôi cũng thấy rằng họ bán cho bạn cơ sở dữ liệu GeoIP để lưu trữ nó trên cơ sở nếu cần thiết. https://www.maxmind.com/en/geoip2-databases – spicyramen
@spicyramen Vâng, nếu tôi không thể tìm ra cách để làm điều này trong BGP một MaxMind db địa phương là dự phòng thay thế của tôi bây giờ. –