最近的 AWS 区域的客户端 IP 地址

2024-05-08

Question

我想从客户端设备将一些数据上传到 AWS,但我想上传到最近的 AWS 区域的 S3 存储桶。

同样,我希望能够从最近的区域下载。

当然,我会在每个区域设置一个存储桶

我可以使用一个系统,它可以获取客户端的 IP 地址,然后确定它是否是 us-west-1、eu-west-1、eu-central-1、ap-northeast-1 等?

问题的症结就在于此。我上传的数据仅对一个人有用,并且需要尽快到达该人。

因此,如果我在英国,我会上传一个文件,而我的预期收件人目前在日本(因为他们可能正在移动) - 上传到伦敦 AWS 区域的 ping 时间会比上传到靠近日本的区域的 ping 时间更长。


根据IP查找客户位置

使用地理IP

pip install python-geoip
pip install python-geoip-geolite2

然后你的代码将看起来像这样。

from geoip import geolite2
match = geolite2.lookup('8.8.8.8')

print match.location

这产生, (37.386,-122.0838)

查找所有 AWS 中心的位置

该信息可从:http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/LocationsOfEdgeServers.html http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/LocationsOfEdgeServers.html您需要找到他们的地理位置。这可以用 geopy 来完成

pip install geopy

Then

from geopy.geocoders import Nominatim
geolocator = Nominatim()
location = geolocator.geocode("Singapore")
print location.latitude, location.longitude

这使

1.2904527 103.852038

您需要对所有位置执行此操作并将数据保存在某个地方。可能在 RDBMS 中(如果您正在这样做,请考虑使用 django,django 对使用 GeoDjango 进行地理位置搜索有很好的支持)

终于找到距离了

找到客户端位置后,我们将其称为 l1,找到数据中心位置后,是时候找到距离了

from geopy.distance import great_circle
great_circle(l1.point, l2.point)

这就是你的距离

寻找最近距离

您可以循环遍历所有保存的位置并找到最近的距离,或者如果您将数据保存在支持地理空间数据的 RDBMS 中(立即想到 postgis),您可以使用ST_Distance函数可以用很少的代码快速有效地进行距离比较。如前面提到的,django https://docs.djangoproject.com/en/1.10/ref/contrib/gis/geoquerysets/对地理空间查询有出色的支持。

如果您要使用 Postgis/Django ,涉及 Great_circle 的循环将被调用 st_distance 替换。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

最近的 AWS 区域的客户端 IP 地址 的相关文章

随机推荐

  • 覆盖 Rails ActiveRecord 销毁行为的最佳方法是什么?

    我有一个应用程序 我想在其中覆盖许多模型的销毁行为 用例是用户可能有删除特定记录的合法需要 但实际上从数据库中删除该行会破坏引用完整性 从而影响其他相关模型 例如 系统的用户可能想要删除不再与其有业务往来的客户 但需要维护与该客户的交易 看
  • 对 Parquet 批量格式使用压缩

    从 Apache Flink 1 15 版本开始 您可以使用压缩功能将多个文件合并为一个 https nightlies apache org flink flink docs master docs connectors datastre
  • 如何让 selenium 等待页面在 Selenium - Excel VBA 包装器中完全加载?

    Selenium Excel VBA 的包装器使用什么代码或函数 以便程序将等待页面完全加载然后执行其他命令 最新版本在执行所需操作之前隐式等待目标元素存在 例如 driver FindElementById Click 默认情况下会在抛出
  • 使用 R 中绘制的标准误差创建条形图

    我试图找到在 R 中创建条形图并显示标准错误的最佳方法 我看过其他文章 但我无法弄清楚与我自己的数据一起使用的代码 之前没有使用过 ggplot 这似乎是最常用的方法 而 barplot 不与数据框合作 我需要在两种情况下使用它 我为此创建
  • 如何舍入 Ballerina 中的浮点值?

    在 BallerinaLang 中 如何将浮点值四舍五入到指定的小数位数 Ballerina尚未提供浮动收尾的具体方法 但使用数学 圆 https ballerina io learn api docs ballerina math htm
  • Flutter中的pushReplacementNamed和popAndPushNamed有什么区别?

    The NavigatorState班级在Flutter navigator dart有 2 种具有类似行为的方法 有什么区别pushReplacementNamed and popAndPushNamed在颤振中 pushReplacem
  • HAProxy - 如果第一台机器返回 404,则从第二台机器提供 URL

    我遇到过这样的情况 网站的一部分 某些 URL 路径 由一台后端服务器提供服务 而所有其他 URL 则由 HAProxy 中的不同默认后端提供服务 现在 由于应用程序逻辑的编写方式 可以在两台物理服务器计算机中的任意一台上的同一路径上创建要
  • Javascript RegEx 替换所有不在 HTML 标签内的字符

    寻求一些帮助 我的正则表达式有点生锈 我试图用一个字符替换 javascript 中 HTML 标签之外的所有字符 例如 用破折号 替换这些字符 div class test Lorem Ipsum br Dolor Sit Amet di
  • 我如何将值从基本适配器传递到活动

    我正在一个应用程序中工作 我需要将值从基本适配器类传递到活动 这是片段代码 public View getView int position View convertView ViewGroup parent vi convertView
  • 如何查找 SQL Server 数据库中所有空间的使用情况

    我们有一个 SQL Server 数据库 根据 Microsoft SQL Server Management Studio 的数据 该数据库只有 6436Mb 中的 119Mb 可用 然而命令 EXEC sp msforeachtable
  • 在 Robot 框架中的测试套件中设置会话 cookie

    我的应用程序是一个 RESTful API 仅当会话 cookie 存在时才有效 不幸的是 我总是需要在一个网页登录获取 cookie 并传递会话cookie到 API 来建立会话 我能够找出解决方案来验证会话 cookie 并将其传递给
  • 如何从命令行运行scala文件?

    scala是否支持scala run xxx scala go语言支持这样运行 go my go 并且Python支持 python my py 但看来 scala xxx scala 仅进行语法检查 未观察到任何输出或运行行为 那么有没有
  • 使用 NaN 计算 numpy 数组中的移动平均值

    我正在尝试计算包含 NaN 的大型 numpy 数组中的移动平均值 目前我正在使用 import numpy as np def moving average a n 5 ret np cumsum a dtype float ret n
  • 创建shell可执行全局节点模块

    我尝试创建节点模块 我成功了 我用了npm install g在代码目录中 它创建了这个模块文件夹 AppData Roaming npm node modules myfirstmodule 现在我想让一个文件作为命令可执行 例如 pm2
  • 您推荐使用哪些工具来分析 Rails 应用程序? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我一直在寻找 Rails 的分析工具 我目前正在玩和测试 ruby prof 和 Railsbench 但我对使其工作所需的大量调整和修改
  • JavaFX中如何获取鼠标位置?

    我是java fx 的初学者 如何在 JavaFX 中获取鼠标在 x 和 y 中的位置 我尝试使用 AWTMouseInfo 也导入了它 但它不起作用 我还在 Ensembles 中看到了它的代码 在 高级阶段 拖动球窗口 这就是我需要做的
  • NSFileManager.defaultManager().fileExistsAtPath 返回 false 而不是 true

    这怎么可能 let exists NSFileManager defaultManager fileExistsAtPath path absoluteString print exists exists false This is pat
  • 调整表格上的列宽

    目前 如果表格的宽度不大于容器的宽度 我可以调整表格列的大小 我希望发生的是在调整列大小时表格的宽度增加 以便滚动条出现在表格下方 基本上允许我调整大小而不受容器宽度的限制 这是一个小提琴 https jsfiddle net thatOn
  • 垂直对齐在复合模式下不起作用

    根据文档 以下内容应该有效 但对我不起作用 我错过了什么吗 PdfPTable rs1 new PdfPTable 1 PdfPCell c new PdfPCell Paragraph p new Paragraph some text
  • 最近的 AWS 区域的客户端 IP 地址

    Question 我想从客户端设备将一些数据上传到 AWS 但我想上传到最近的 AWS 区域的 S3 存储桶 同样 我希望能够从最近的区域下载 当然 我会在每个区域设置一个存储桶 我可以使用一个系统 它可以获取客户端的 IP 地址 然后确定