在一个系统上工作,它将存储更多的4 million
记录per day
。
为了减少I/O并提高速度,我将存储从数据库改为文件。因此数据将更改为json并直接写入文件。
更多信息
该系统是用PHP编写的ppc
系统,通过iframe显示多个站点的横幅和各自的服务器。
每当这个横幅加载到任何网站,我都会在文件中存储它的信息的一条记录(之前是插入到数据库中),并在数据库的两个表中更新两个字段。
问题
当访问量增加到接近每分钟3000次访问时,iframe加载速度会显著降低,而且有时会导致iframe中的打印服务器超时。
我正在寻找减少资源使用、提高加载速度以及防止超时的方法。
任何帮助我们都将不胜感激。
发布于 2015-08-13 20:51:28
随着每分钟3k请求的增加,你需要开始利用big data
架构和工具。
以下是一些需要考虑的主要图片亮点:
CDN
来存储和提供图像。mapReduce
软件来存储数据,例如distributed
服务器,而不是一台大型服务器。发布于 2015-08-19 00:34:34
是一个用于接收请求的水平可扩展基础架构。
1.将服务横幅与存储印象解耦
通过分离这两个关注点,您将能够为ppc
服务的客户提供更一致的性能。如果您还没有这样做,使用CDN或以其他方式卸载从您的服务器上为图像本身提供服务的需求可以帮助显著缩短响应时间。
另一个将给您带来巨大收益的领域是将横幅代码的服务与将印象数据存储到磁盘的进程分开。有许多方法可以做到这一点,但我有经验的一个成功的解决方案是使用ActiveMQ (http://activemq.apache.org/)或类似的排队系统。排队系统将印象数据存储在内存中,并以一致的速率将这些数据点发送到可以将数据存储到数据库或其他存储介质中的消费者(也称为工作进程)进程,从而帮助平衡印象存储负载。这允许在磁盘上实际存储印象的工作负荷与提供广告的过程分开。您还可以设置多个进程来使用排队的作业,这将导致第二个方面的改进。
2.水平可扩展的基础设施
构建水平可扩展的解决方案基本上意味着,无需增加单个服务器的大小和功能,只需添加更多更小的服务器,这些服务器将平均分担系统需求的工作负载。这有多个优点,其中之一是更容易(通常也更便宜)向池中添加几个小服务器,而不是将一个大服务器升级为更大、更强大。它还具有在服务器发生故障时更加健壮的优点。
在这种情况下,我认为一个好的解决方案是让一个服务器或进程充当路由器,它将通过将请求发送到实际处理请求的不同服务器来实现负载平衡。在互联网上有很多关于用PHP构建路由或负载平衡脚本的好资源,但基本上你会在一个端点接收请求,然后将该请求发送到另一台服务器上实际完成。如果您构建了一个准备接收请求的服务器的动态列表,那么当您开始看到不可接受的性能时,您可以很容易地增加满足请求的服务器的数量。这还将使您能够在服务器宕机时轻松地从列表中删除该服务器,然后任何流量都将被路由到仍在运行的其他服务器。
如果您还没有这样做,最好将lighttpd (http://www.lighttpd.net/)或nginx (https://www.nginx.com/)作为Apache的替代品,它们的构建目的是能够以较少的开销处理大量请求。它们特别适合在您的路由器服务器上处理请求。
一旦您为请求设置了水平伸缩,那么为存储服务器设置水平伸缩也是相当简单的。您可以通过根据池中的服务器数量修改ID来确定将请求发送到何处,从而轻松地完成此操作。
$serverNumber = $adID % $availableServers;
摘要
尽管通过优化存储方法和服务器调优,您肯定可以看到良好的性能改进,但在大型应用程序中的某些时候,您可能希望能够添加额外的服务器来完成这项工作。
发布于 2015-08-18 03:10:14
通过利用现有的Apache访问日志记录作为印象跟踪器,并完全关闭自定义数据库/平面文件读/写代码,您可以节省性能和开发时间。
设置一个新的Apache虚拟主机,并将其指向一个系统webroot目录,您将使该目录专门负责提供广告生成PHP脚本。在这一个虚拟主机配置中,您可以设置一个系统访问日志,该日志100%专用于提供您的广告;Apache将负责在每次访问(印象)时将日志添加到此日志中,并根据需要轮换/归档日志。您可以指向您想要存储日志的位置,以及将哪种类型的服务器/环境/引用/用户代理数据存储到其中。
然后,通过cron或守护程序,您可以运行任何您想要的后端日志分析器,将统计数据收集到数据库中,处理您的数字等,而无需将任何繁重的提升耦合到活动的web请求。
我还在Stack Overflow上发现了使用这种技术with lighttpd instead of Apache来进一步扩展服务器资源的建议。
进一步阅读:
https://stackoverflow.com/questions/31902772
复制相似问题