在大访问时加载iframe内容的延迟和低速度



在一个将存储多于4 million记录per day的系统上工作。
为了减少I/O并提高速度,我将存储从数据库更改为文件。因此数据将更改为json并直接写入file。


更多信息

该系统是用PHP编写的ppc系统,通过iframe在多个站点的服务器上显示横幅。

每当这个横幅加载在任何网站,我将存储它的信息在文件中的一个记录(是一个插入数据库之前),并更新数据库中的两个表中的两个字段。


当访问增加到几乎每分钟3000次访问时,iframe加载速度显著降低,甚至有时会导致iframe中的打印服务器超时。

我正在寻找减少资源使用和提高加载速度以及防止超时的方法。

任何帮助都将非常感激……

每分钟有3k个请求,并且希望增长,您需要开始使用big data架构和工具。

这里有一些大致的图片亮点要考虑:

  • 使用单独的CDN来存储和提供图像。
  • 使用mapReduce软件存储数据,如hadoop。
  • 获取distributed服务器,而不是一个大型服务器。
  • 添加load balancing服务器
  • 关闭所有php功能&

在应用程序大小的这个特定点上,我将重点关注对基础结构和代码逻辑的两个特定改进。

  1. 将为最终用户提供横幅资产所需的流程与存储广告印象所需的流程分离。
  2. 为接收请求实现一个水平可扩展的基础设施。

1。将服务横幅与存储印象脱钩

通过分离这两个关注点,您将能够为ppc服务的客户提供更一致的性能。如果您还没有这样做,那么使用CDN或以其他方式从服务器上卸载提供图像本身的需求可以帮助您大大缩短响应时间。

另一个将给您带来巨大收益的领域是将横幅代码的服务与将印象数据存储到磁盘的过程分开。有许多方法可以做到这一点,但我有经验的一个成功的解决方案是利用ActiveMQ (http://activemq.apache.org/)或类似的排队系统。排队系统将通过将印象数据存储在内存中并以一致的速率将这些数据点发送给消费者进程(即工作进程),从而帮助平衡印象存储负载,而消费者进程可以将这些数据存储到DB或其他存储介质中。这允许将实际在磁盘上存储印象的工作负载与服务广告的过程分开。您还可以设置多个进程来消耗排队的工作,这导致了第二个改进领域。

2。水平扩展的基础设施

构建一个水平可扩展的解决方案基本上意味着不需要增加单个服务器的大小和功率,您可以添加额外的较小的服务器,这些服务器将均匀地共享系统需求的工作负载。这有很多优点,其中之一就是向池中添加更多的小型服务器比将一个大型服务器升级到更大更强大更容易(通常也更便宜)。它还具有在服务器发生故障时更加健壮的优点。

在这种情况下,我认为一个好的解决方案是让一个服务器或进程充当路由器,它将通过将请求发送到执行实际处理请求的不同服务器来负载平衡请求。互联网上有很多关于用PHP构建路由或负载平衡脚本的好资源,但基本上,您将在一个端点接收请求,然后将该请求发送到另一个服务器以实际完成。如果您构建一个准备接收请求的服务器的动态列表,那么当您开始看到不可接受的性能时,您可以轻松地增加满足请求的服务器数量。这样做的好处还在于,如果服务器宕机,您可以轻松地将其从列表中删除,然后任何流量都将被路由到另一个仍在运行的服务器。

如果你还没有,最好看看lighttpd (http://www.lighttpd.net/)或nginx (https://www.nginx.com/)作为Apache的替代品,它们被构建为能够以更少的开销处理大量请求。这些将特别适合处理路由器服务器上的请求。

一旦为请求设置了水平扩展,那么为存储服务器设置水平扩展就相当简单了。您可以通过根据池中服务器的数量修改ID来确定向何处发送请求,从而轻松地做到这一点。

$serverNumber = $adID % $availableServers;

总结

尽管通过优化存储方法和服务器调优,您肯定可以看到良好的性能改进,但在大型应用程序中的某些时候,您可能希望能够添加额外的服务器来完成工作。我认为有了上面的步骤,你就可以很好地扩展你的应用程序了。

通过利用现有的Apache访问日志作为印象跟踪器,并完全关闭自定义数据库/平面文件读/写代码,您可能能够节省性能和开发时间。

设置一个新的Apache虚拟主机,并将其指向一个系统webroot目录,该目录将单独负责提供广告生成PHP脚本。在这个虚拟主机配置中,您可以设置一个系统访问日志,该日志100%独家为您的广告服务;Apache将负责在每次访问(印象)时追加此日志,并根据需要旋转/归档日志。您可以指向您想要存储日志的位置,以及哪种类型的服务器/环境/referrer/user-agent数据将被存储到该日志中。

然后,通过cron或守护进程,您可以运行任何后端日志分析器,将统计数据收集到数据库中,处理您的数字等,而无需将任何繁重的工作耦合到实时web请求中。

我还在Stack Overflow上发现了使用lighttpd而不是Apache来进一步扩展服务器资源的建议。

进一步阅读:

  • 巧妙的印象跟踪技术

  • Apache: Log Files

  • lighttpd

最新更新