Angesichts einer einzigen öffentlichen IP-Adresse (Peer A) und einer Liste von vielen anderen öffentlichen IP-Adressen (eine Mischung aus IPv4-und IPv6-Adressen), ist der einfachste Weg, Peer A die IP Adressen der n
nächsten Peers, ohne dass sich die Peers beim Latenz-Benchmarking gegenseitig manuell pingen?WebRTC: Abgleich nächster Peers
Ich denke, dass dies mit BGP mit einer Reihe von komplizierten Abfragen möglich ist (und vielleicht etwas mit OSPF), aber ich hatte gehofft, dass es eine Lösung oder Bibliothek geben könnte, die es so einfach wie den theoretischen Funktionsaufruf machen würde .
// `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);
Soll ich nur eine lokale Instanz der GeoIP-Datenbank MaxMind verwenden + Haversine/Vincenty, oder ist es praktisch, BGP über eine Bibliothek zu verwenden (mit dem richtigen Caching, wo erforderlich), dies zu erreichen?
Es scheint, als ob diese Art von Code in einer Open-Source-Anycast-Routing-Implementierung existiert, obwohl ich nichts gefunden habe, das zu diesem Anwendungsfall passt.
Die Lösung oder vorgeschlagene Bibliothek muss nicht auf node.js funktionieren - jede Sprache ist in Ordnung.
Ich nehme an, die Liste der IPs sind externe IP-Adressen. Ich würde die GeoIP-Datenbank von MaxMind verwenden, um die Koordinaten jedes IP zu erhalten und dann die Haversine-Formel zu verwenden, um den kürzesten Ort zu bestimmen. Wahrscheinlich wäre der Flaschenhals die Reaktionszeit von MaxMind (Beispiel <400 ms), aber ich habe auch festgestellt, dass sie Ihnen die GeoIP-Datenbank verkaufen, um sie bei Bedarf lokal zu hosten. https://www.maxmind.com/en/geoip2-databases – spicyramen
@spicyramen Ja, wenn ich nicht herausfinden kann, wie man das in BGP macht, ist eine lokale MaxMind db meine Fallbackalternative für jetzt. –