Учитывая единый общедоступный IP-адрес (одноранговый узел A) и список многих других общедоступных IP-адресов (сочетание адресов IPv4 и IPv6), что является самым простым способом сопоставления одноранговых сетей адреса ближайших сверстников n
, не имея сверстников вручную пинговать друг друга для латентного бенчмаркинга?WebRTC: сопоставление ближайших сверстников
Я думаю, что это возможно с использованием BGP с множеством сложных запросов (и, возможно, с участием OSPF), но я надеялся, что может быть решение или библиотека, которые сделают ее такой же простой, как теоретический функциональный вызов ниже ,
// `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);
Должен ли я просто использовать локальный экземпляр базы данных GeoIP MaxMind в + Haversine/Vincenty, или это практично использовать BGP через библиотеку (при правильном кэшировании, где это необходимо) для достижения этой цели?
Похоже, что этот вид кода может существовать в реализации anycast routing с открытым исходным кодом, хотя я не смог найти ничего, что бы соответствовало этому варианту использования.
Решение или предлагаемая библиотека не должна работать на node.js - любой язык в порядке.
Я предполагаю, что список IP-адресов является внешним IP-адресом. Я бы использовал базу данных GeoIP от MaxMind, чтобы получить координаты каждого IP-адреса, а затем использовать формулу Хаверсина для определения кратчайшего местоположения. Вероятно, узким местом будет время отклика от MaxMind (пример <400 мс), но я также обнаружил, что они продают вам базу данных GeoIP для размещения ее в помещениях, если это необходимо. https://www.maxmind.com/ru/geoip2-databases – spicyramen
@spicyramen Да, если я не могу понять, как это сделать в BGP, локальная версия MaxMind db является моей альтернативной альтернативой. –