Php 当使用Nginx而不是Apache时,单独的MySQL服务器有意义吗?

Php 当使用Nginx而不是Apache时,单独的MySQL服务器有意义吗?,php,mysql,amazon-ec2,nginx,Php,Mysql,Amazon Ec2,Nginx,考虑一个web应用程序,其中对该应用程序的调用由运行多个MySQL查询的PHP脚本组成,其中一些查询是memcached的。 PHP并不做非常复杂的工作。它主要为MySQL数据提供一些格式化服务 过去,通常建议将MySQL和应用程序引擎PHP/Apache放在不同的框中 然而,当数据可以水平分割时,例如,当有十个不同的客户使用该服务时,可以按客户分割数据,当使用Nginx+FastCGI代替较重的Apache时,将Nginx Memcache和MySQL放在同一个框中难道没有意义吗?那么,当更多

考虑一个web应用程序,其中对该应用程序的调用由运行多个MySQL查询的PHP脚本组成,其中一些查询是memcached的。 PHP并不做非常复杂的工作。它主要为MySQL数据提供一些格式化服务

过去,通常建议将MySQL和应用程序引擎PHP/Apache放在不同的框中

然而,当数据可以水平分割时,例如,当有十个不同的客户使用该服务时,可以按客户分割数据,当使用Nginx+FastCGI代替较重的Apache时,将Nginx Memcache和MySQL放在同一个框中难道没有意义吗?那么,当更多的客户到来时,会添加类似的盒子吗

背景:我们正在迁移到Amazon Ec2。MySQL和AppServer的单独框意味着应用服务器上需要两倍的EBS卷,以保持代码的持久性,因为代码经常更改。此外,如果数据库盒出现问题,更多的客户将失败


澄清:目前,在迁移到EC2之前,该应用程序使用LAMP在一台服务器上运行。

如果您的应用程序体系结构已经设计为在不同的实例上支持Nginx和MySQL,那么您可能希望在同一个实例上托管所有服务,直到您收到足够的流量证明分离是合理的


通常,使用完整堆栈Nginx+Your Application+MySQL创建新的相同实例会使您的设置更难维护。考虑备份、发布应用程序更新、修补数据库引擎、更新数据库架构、生成所有客户端的报告等。如果选择此方法,您确实需要找到一些巨大的优势来抵消所有的劣势。

如果您的应用程序体系结构已经设计为在不同的实例上支持Nginx和MySQL,那么您可能希望在同一实例上托管所有服务,直到收到足够的流量证明分离是合理的


通常,使用完整堆栈Nginx+Your Application+MySQL创建新的相同实例会使您的设置更难维护。考虑备份、发布应用程序更新、修补数据库引擎、更新数据库架构、生成所有客户端的报告等。如果选择此方法,你真的需要找到一些大的优势来抵消所有的劣势。

如果你的应用程序能够在不同的服务器上使用PHP和MySQL,我不明白为什么这不起作用,实际上,它也可以在同一台服务器上使用PHP和MySQL

真正的问题是:您的服务器是否能够同时处理Apache/nginx/PHP、MySQL和memcached的负载

只有一种方法可以回答这个问题:您必须在实际的生产配置中进行测试,以确定您的服务器是否有自己的负载,或者使用类似的工具,或者模拟负载


如果同一台服务器上的所有内容都没有太多负载。。。好吧,如果它能让你的应用程序的托管更便宜,那就随它去吧-

如果您的应用程序能够在不同的服务器上使用PHP和MySQL,我不明白为什么这不起作用,实际上,它也可以在同一台服务器上使用PHP和MySQL

真正的问题是:您的服务器是否能够同时处理Apache/nginx/PHP、MySQL和memcached的负载

只有一种方法可以回答这个问题:您必须在实际的生产配置中进行测试,以确定您的服务器是否有自己的负载,或者使用类似的工具,或者模拟负载


如果同一台服务器上的所有内容都没有太多负载。。。好吧,如果它能让你的应用程序的托管更便宜,那就随它去吧-

您需要仔细衡量每件事情的内存开销-我看不出enginex和Apache有多大区别,PHP将使用所有RAM这反过来取决于web服务器选择运行多少进程,但这更多是一个调优问题

就我个人而言,我会远离enginex,因为在生产环境中运行如此怪异的服务器风险太大

数据库总是需要大量的ram,唯一能明智地调整内存缓冲区的方法就是将它们放在专用服务器上。这是假设你有大数据

如果你有非常小的数据,你可以把它放在同一个盒子里

同样,如果您没有在专用的机器上运行memcached,那么memcached几乎毫无意义。从MySQL中获取内存给memcached真的是以牙还牙。MySQL可以在其innodb_buffer_池中高效地缓存内容,这可以节省IO,但最终可能会使用更多CPU,因为您不会缓存表示逻辑等,这在memcached中是可能的

Memcached只有在有大量ram的专用设备上运行时才有意义;只有当你的大脑中没有足够的咕噜声时,这才是明智的
db服务器为应用程序的读取工作负载提供服务。在部署它之前请考虑一下。

您需要仔细测量每件事情的内存开销-我看不出enginex和Apache有多大区别,PHP将使用所有RAM。这反过来取决于web服务器选择运行多少进程,但这更多是一个调优问题

就我个人而言,我会远离enginex,因为在生产环境中运行如此怪异的服务器风险太大

数据库总是需要大量的ram,唯一能明智地调整内存缓冲区的方法就是将它们放在专用服务器上。这是假设你有大数据

如果你有非常小的数据,你可以把它放在同一个盒子里

同样,如果您没有在专用的机器上运行memcached,那么memcached几乎毫无意义。从MySQL中获取内存给memcached真的是以牙还牙。MySQL可以在其innodb_buffer_池中高效地缓存内容,这可以节省IO,但最终可能会使用更多CPU,因为您不会缓存表示逻辑等,这在memcached中是可能的

Memcached只有在有大量ram的专用设备上运行时才有意义;只有在db服务器中没有足够的grunt来满足应用程序的读取工作负载时,这才是明智的。在部署它之前,请考虑一下这一点