我们有一个查询在EC2实例上运行时返回的响应与本地开发机器上的响应不同。
查询完全相同:
[AD_ACT_NUMBER]/adgroupconversions/?appsecret_proof=[APP_SECRET_PROOF]&include_deleted=false&start_time=1393372800&end_time=1393459200&aggregate_days=1&limit=500
在本地开发机器上,此查询返回响应,包括:
[{"adgroup_id"=>[SPECIFIC AD GROUP],
"values"=>
[{"start_time"=>1393372800,
"end_time"=>1393459200,
"conversions"=>
[{"action_type"=>"[CONVERSION I CARE ABOUT]",
"object_id"=>"[OBJECT ID]",
"post_click_1d"=>5,
"post_click_7d"=>7,
"post_click_28d"=>7},
...etc
但是在ec2实例上,生成相同查询的相同代码会返回略有不同的结果。
[{"adgroup_id"=>[SPECIFIC AD GROUP],
"values"=>
[{"start_time"=>1393372800,
"end_time"=>1393459200,
"conversions"=>
[{"action_type"=>"[CONVERSION I CARE ABOUT]",
"object_id"=>"[OBJECT ID]",
"post_click_1d"=>5,
"post_click_7d"=>6,
"post_click_28d"=>6},
...etc
由于某种原因,转换次数减少了1次。带有7的那个似乎是正确的并匹配 查询粘贴到https://developers.facebook.com/tools/explorer时的结果以及查看Facebook广告管理器中的报告时的结果。
我们正在使用ruby和考拉来进行查询。考拉正在使用法拉第并在运行时对代码进行了撬动我已经能够确认,当它向Facebook进行原始http查询时,查询确实是相同的。两个查询都使用相同的访问令牌和相同的appsecret_proof。
起初我们认为这可能是一个时区问题,但看到两个请求都有相同的开始和结束时间,我们不确定如何。此外,虽然ec2实例是UTC并且GMT中的开发框,但UTC和GMT目前都是同一时间。然后我们检查了Koala或Faraday是否内置缓存但没有找到任何内容,并将查询更改为include_deleted = true以打破任何类型的缓存没有任何区别。
我们唯一的另一个想法是facebook api根据请求IP进行了一些缓存, 然而,这似乎不太可能。
任何人都有其他想法吗?
干杯
最高
答案 0 :(得分:0)
鉴于您的证据的性质,我能真正得出的唯一结论是,云实例可能正在与不同的Facebook服务器通信,而且一台服务器与dev机器恰好碰到的服务器略有不同步?
我可以诚实地说我也见过一些奇怪的事情。我有一些广告代码,截止到目前为止230个单元测试(有些是真正的集成测试),他们对Facebook广告端点进行各种调用...有时我看到测试执行之间的结果有所不同估计终点的数量级不同。当然,预计会有一些变化,但差异不大,从0.79到12.89。我真正可以得出的结论是,Facebook必须拥有大量的服务器,如果它们具有任何类型的负载平衡并且可能一个服务器稍微不同步,那么期望最终达到不同的服务器是完全符合逻辑的。等等。
唯一关心的是,那一点是真相?
对不起我没有比这更好的答案,如果查询和代码库确实相同,我没有看到任何其他真正的逻辑答案来解释为什么变化。我想这个回答确实无法解决问题,可能真的应该是一个评论,但问题是,在这种情况下,“正确”的答案是什么?也许Facebook的人可以更好地谈论这个话题?