- 浏览: 496675 次
- 性别:
- 来自: 武汉
文章分类
- 全部博客 (335)
- VM (2)
- python 基础 (78)
- C (7)
- php (38)
- django (8)
- c++ (1)
- python 服务端编程 (21)
- ubuntu (1)
- linux (26)
- mysql (24)
- 缓存管理 (5)
- nginx (4)
- linux 命令行 (16)
- web (8)
- javascript (8)
- python 模块 (3)
- java (6)
- 面试题 (2)
- tornado (1)
- 运维 (10)
- 网络编程 (0)
- svn (5)
- css (1)
- mongodb (3)
- vim (8)
- infobright (1)
- shell (1)
- 算法 (2)
- redis (1)
最新评论
原文地址:
http://www.yeeyan.org/articles/view/7300/16073
过去当运行一个大的web应用时候意味着运行一个大型的web服务器。因为你的应用吸引了大量的用户,你将不得不在你的服务器里增加更多的内存和处理器。
今天,'大型服务器'模式已经过去,取而代之的是大量的小服务器,使用各种各样的负载均衡技术。这是一种更可行的方法,将使硬件成本降至最低。
'更多小服务器'的优势超过过去的'大型服务器'模式体现在两个方面:
如果服务器宕机,那么负载均衡系统将停止请求到宕机的服务器,转而分发负载到其他正常运行的服务器上。
扩展你的服务器更加容易。你要做的仅仅是加入新的服务器到负载均衡系统。不需要中断你的应用运行。
所以,把握住这个机会:). 当然,代价就是这要求你的应用开发时增加一点复杂度。这就是本文要覆盖的内容。
这时你可能对自己说: '但是我怎么知道我正在使用负载均衡呢?'。最诚实的回答是,如果你正在问这个问题,那么答案是你多半没有在使用负载均衡系统并且你的系统不需要考虑这个 问题。大多数情况,当应用成长足够大的规模时,负载均衡就需要明确提出和设置了。然而,我也偶尔看见虚拟主机公司为客户的应用做这个负载均衡,或者像下面 描述的那样要自己来做。
在继续下面的内容之前,我要指出本文主要描述PHP的负载均衡。将来我可能会写有关数据负载均衡的文字,但是现在你必须等待。
注意,我一直提“web应用”而不是website,这是想区分'web应用'是那些复杂的站点往往涉及服务器端编程和数据库,而不是website那样只显示简单的静态内容。
1. PHP文件
第一个问题是,如果你有大量的小型服务器,你怎么把你的php文件上传到所有的服务器上?有如下的方法供你参考:
分别上传所有的文件到每一个服务器 , 这种方法带来的问题是:想像一下你有20个服务器,那么上传过程中这将很容易导致错误,并且更新时极有可能导致不同服务器上有不同版本的文件。
使用 'rsync ' (或类似的软件) . 这样的工具能同步本地目录和多个远程主机目录上的文件。
使用版本控制软件(如subversion ) . 这是我最喜欢的方法。用它可以很好地维护我得代码,当发布我的应用时,可以在每一个服务器上运行svn update命令同步。这种方法也使切换服务器得代码到过去的某一个版本更加容易。
使用一个文件服务器(你可能发现NFS 非常适合做这件事情). 这种方式是使用一个文件服务器来存放你的web应用. 当然,如果你的文件服务器宕机,那么多所有你的站点将不能使用。这时,你就需要花费更多的开支来恢复它。
选择哪种方式依赖于你的需求和你掌握的技能。如果你使用版本控制系统,那么你可能得计划一个方法如果同时执行一个更新命令更新所有服务器上的代码。然而,如果使用文件服务器,你就要实现一些失败恢复机制,防止万一服务器宕机导致请求失败。
2. 文件上传
当只有一台服务器时,文件上传不是一个问题。但是当我们有多台服务器时,那么上传的文件应该怎么存放呢?上传文件的问题和跨服务器php文件存储是类似的。下面是几种可能的方案:
把文件存储到数据库中 。大多数数据允许存储二进制数据。当你请求文件下载时,访问数据把二进制数据和相应的文件名和类型输出给用户。在使用这种方案前应该考虑数据库怎样存储你的文件。该方法的问题在于如果数据库服务器宕机将使文件不可用。
在一个文件服务器上存储上传的文件 . 与前面的介绍一样,你要安装一个文件服务器让所有web服务器共享,把所有上传的文件上传到这里,上传后所有的web服务器就都可以使用它。但是,如果文件服务器宕机,那么可能发生图像文件下载中断。
设计你自己的上传机制传输文件到服务器到每一个服务器 . 这个方法没有单个文件服务器或者数据库方案的缺陷,但是将增加你代码的复杂度。例如,如果上传到多个服务器过程中,服务器宕机,你要怎么处理?
用数据库存储上传文件但是设计一个文件缓存机制是一个不错的方案。当服务器接收一个文件下载请求时,首先检查缓存系统中是否有该文件,如果发现那么从缓存系统下载,否则从数据库读取并把它缓存到文件系统中。
3. 会话(Sessions)
如果你熟悉php的session处理,你将可能知道默认情况下,它存储session数据在服务器的临时文件里。而且,这个文件仅仅在 你请求处理的那个服务器上,但是接下来的请求可能被另外一个服务器处理,这将在另一个服务器上生成新的session。这导致session频繁地不被识 别,如登录用户总是要求重新登录。
我推荐的方案是,要么重新php内建的session处理机制存储session数据到数据库,或者实现你自己的机制保证发送一个用户的请求到同一台服务器。
4. 配置(Configuration)
尽管这个话题不是和php特别相关,我感觉还是有必要提及。当运行集群服务器时,用某种方法保持服务器之间的配置文件同步是一个好主意。如果配置文件不一致,可能导致一些非常奇怪的断断续续的行为导致很难排查这些问题。
我推荐使用版本控制系统单独管理他们。这样你可以为不同的项目安装存储不同的php配置文件,也可以保持所有服务器配置文件同步。
5. 日志(Logging)
像配置问题一样,logging不是仅仅和php相关。但是对于保持服务器健康运行它仍然是非常重要的。没有正确的logging系统,你怎么知道如果PHP代码开始产生错误(在系统正式运行时,你总是关闭display_errors 设置,不是吗?)
有几种方法你可以实现logging:
在每一个服务器上记录日志。 这是最简单的方法。每一个机器仅仅记录一个文件。好处是简单,可能只要很少的配置。但是,随着服务器数量的增多,监控每台服务器上的日志文件将变得非常困难。
记录日志到一个共享 这种方法每一个服务器仍然有这个日志文件,但是他们通过共享机制被存储在一个中央文件服务器上,这将使监控日志变得更简单。该方案的问题在于,如果文件服务器不可用将导致一个简单的日志不能写入问题最终导致整个应用崩溃。
记录日志到logging服务器 你可以使用一个logging软件,如syslog 来把所有的日志写到一个中央服务器。尽管这个方法要求更多的配置,但是他也提供了最健壮的方案。
http://www.yeeyan.org/articles/view/7300/16073
过去当运行一个大的web应用时候意味着运行一个大型的web服务器。因为你的应用吸引了大量的用户,你将不得不在你的服务器里增加更多的内存和处理器。
今天,'大型服务器'模式已经过去,取而代之的是大量的小服务器,使用各种各样的负载均衡技术。这是一种更可行的方法,将使硬件成本降至最低。
'更多小服务器'的优势超过过去的'大型服务器'模式体现在两个方面:
如果服务器宕机,那么负载均衡系统将停止请求到宕机的服务器,转而分发负载到其他正常运行的服务器上。
扩展你的服务器更加容易。你要做的仅仅是加入新的服务器到负载均衡系统。不需要中断你的应用运行。
所以,把握住这个机会:). 当然,代价就是这要求你的应用开发时增加一点复杂度。这就是本文要覆盖的内容。
这时你可能对自己说: '但是我怎么知道我正在使用负载均衡呢?'。最诚实的回答是,如果你正在问这个问题,那么答案是你多半没有在使用负载均衡系统并且你的系统不需要考虑这个 问题。大多数情况,当应用成长足够大的规模时,负载均衡就需要明确提出和设置了。然而,我也偶尔看见虚拟主机公司为客户的应用做这个负载均衡,或者像下面 描述的那样要自己来做。
在继续下面的内容之前,我要指出本文主要描述PHP的负载均衡。将来我可能会写有关数据负载均衡的文字,但是现在你必须等待。
注意,我一直提“web应用”而不是website,这是想区分'web应用'是那些复杂的站点往往涉及服务器端编程和数据库,而不是website那样只显示简单的静态内容。
1. PHP文件
第一个问题是,如果你有大量的小型服务器,你怎么把你的php文件上传到所有的服务器上?有如下的方法供你参考:
分别上传所有的文件到每一个服务器 , 这种方法带来的问题是:想像一下你有20个服务器,那么上传过程中这将很容易导致错误,并且更新时极有可能导致不同服务器上有不同版本的文件。
使用 'rsync ' (或类似的软件) . 这样的工具能同步本地目录和多个远程主机目录上的文件。
使用版本控制软件(如subversion ) . 这是我最喜欢的方法。用它可以很好地维护我得代码,当发布我的应用时,可以在每一个服务器上运行svn update命令同步。这种方法也使切换服务器得代码到过去的某一个版本更加容易。
使用一个文件服务器(你可能发现NFS 非常适合做这件事情). 这种方式是使用一个文件服务器来存放你的web应用. 当然,如果你的文件服务器宕机,那么多所有你的站点将不能使用。这时,你就需要花费更多的开支来恢复它。
选择哪种方式依赖于你的需求和你掌握的技能。如果你使用版本控制系统,那么你可能得计划一个方法如果同时执行一个更新命令更新所有服务器上的代码。然而,如果使用文件服务器,你就要实现一些失败恢复机制,防止万一服务器宕机导致请求失败。
2. 文件上传
当只有一台服务器时,文件上传不是一个问题。但是当我们有多台服务器时,那么上传的文件应该怎么存放呢?上传文件的问题和跨服务器php文件存储是类似的。下面是几种可能的方案:
把文件存储到数据库中 。大多数数据允许存储二进制数据。当你请求文件下载时,访问数据把二进制数据和相应的文件名和类型输出给用户。在使用这种方案前应该考虑数据库怎样存储你的文件。该方法的问题在于如果数据库服务器宕机将使文件不可用。
在一个文件服务器上存储上传的文件 . 与前面的介绍一样,你要安装一个文件服务器让所有web服务器共享,把所有上传的文件上传到这里,上传后所有的web服务器就都可以使用它。但是,如果文件服务器宕机,那么可能发生图像文件下载中断。
设计你自己的上传机制传输文件到服务器到每一个服务器 . 这个方法没有单个文件服务器或者数据库方案的缺陷,但是将增加你代码的复杂度。例如,如果上传到多个服务器过程中,服务器宕机,你要怎么处理?
用数据库存储上传文件但是设计一个文件缓存机制是一个不错的方案。当服务器接收一个文件下载请求时,首先检查缓存系统中是否有该文件,如果发现那么从缓存系统下载,否则从数据库读取并把它缓存到文件系统中。
3. 会话(Sessions)
如果你熟悉php的session处理,你将可能知道默认情况下,它存储session数据在服务器的临时文件里。而且,这个文件仅仅在 你请求处理的那个服务器上,但是接下来的请求可能被另外一个服务器处理,这将在另一个服务器上生成新的session。这导致session频繁地不被识 别,如登录用户总是要求重新登录。
我推荐的方案是,要么重新php内建的session处理机制存储session数据到数据库,或者实现你自己的机制保证发送一个用户的请求到同一台服务器。
4. 配置(Configuration)
尽管这个话题不是和php特别相关,我感觉还是有必要提及。当运行集群服务器时,用某种方法保持服务器之间的配置文件同步是一个好主意。如果配置文件不一致,可能导致一些非常奇怪的断断续续的行为导致很难排查这些问题。
我推荐使用版本控制系统单独管理他们。这样你可以为不同的项目安装存储不同的php配置文件,也可以保持所有服务器配置文件同步。
5. 日志(Logging)
像配置问题一样,logging不是仅仅和php相关。但是对于保持服务器健康运行它仍然是非常重要的。没有正确的logging系统,你怎么知道如果PHP代码开始产生错误(在系统正式运行时,你总是关闭display_errors 设置,不是吗?)
有几种方法你可以实现logging:
在每一个服务器上记录日志。 这是最简单的方法。每一个机器仅仅记录一个文件。好处是简单,可能只要很少的配置。但是,随着服务器数量的增多,监控每台服务器上的日志文件将变得非常困难。
记录日志到一个共享 这种方法每一个服务器仍然有这个日志文件,但是他们通过共享机制被存储在一个中央文件服务器上,这将使监控日志变得更简单。该方案的问题在于,如果文件服务器不可用将导致一个简单的日志不能写入问题最终导致整个应用崩溃。
记录日志到logging服务器 你可以使用一个logging软件,如syslog 来把所有的日志写到一个中央服务器。尽管这个方法要求更多的配置,但是他也提供了最健壮的方案。
发表评论
-
修改 phpStorm 7.1.3 字体大小
2014-11-08 14:56 617原文地址: http://blog.csdn.net/wi ... -
UNIX时间戳换算问题
2014-02-20 09:35 935转:http://chenyudengyuqiong-163 ... -
【转】yii框架,命令行应用程序设计
2014-02-12 18:27 793首先,当您接触yii框架时,您会发现,它已经精心设计好了一套命 ... -
php http_build_query
2014-02-12 09:45 841这函数方便,不用自己去拼接了 http_build_que ... -
stream_context_create作用
2014-02-12 09:42 822转 http://huangliangfeixu.blo ... -
php 的 private public protected
2014-01-09 20:14 1231public 表示全局,类内部外部子类都可以访问; pr ... -
CDbConnection failed to open the DB connection: could not find driver
2014-01-02 16:11 1097wamp5 看看是否安装了php_pdo_mysql扩展 ... -
【转】浅谈页面静态化、缓存技术与SEO
2013-12-25 11:17 1334原文地址: 浅谈页面静态化、缓存技术与SEO http ... -
php 路由机制
2013-12-02 17:52 809【转】 http://3haku.net/2012/07/04 ... -
php 跨域问题
2013-11-21 17:36 472header('P3P:CP="IDC DSP C ... -
Forbidden You don't have permission to access
2013-11-19 11:58 1191Forbidden You don't have permi ... -
【转】深入浅出之Smarty模板引擎工作机制(二)
2013-10-13 19:18 710http://www.cnblogs.com/hongfei/ ... -
【转】深入浅出之Smarty模板引擎工作机制 一
2013-10-13 19:12 736http://www.cnblogs.com/hongfei/ ... -
【转 php 优化】Squid是什么,Squid工作原理是什么
2013-11-06 17:43 814http://wuhaoshu.blog.51cto.co ... -
【转】PHP加速插件eAccelerator和Zend Optimizer是什
2013-12-18 09:02 939eaccelerator是一个开放源码的php应用程序加速 ... -
【转 php优化 】三款免费的PHP加速器:APC、eAccelerator、XCache比较
2013-10-12 17:08 804http://www.vpser.net/opt/apc- ... -
php中heredoc的使用方法
2013-10-12 16:31 659Heredoc技术,在正规的PH ... -
【转】php 安全 讨论magic_quotes_gpc、mysql_real_escape_string、addslashes的区别及用法
2013-10-11 18:01 822原文地址: http://blog.unvs.cn/archi ... -
【转】PHP心得(收藏,慢慢看)
2013-09-08 18:39 823转:http://my.oschina.net/liu ... -
PHP配置指令作用域说明(PHP_INI_PERDIR、PHP_INI_SYSTEM、PHP_INI_USER、PHP_INI_ALL)
2013-08-27 10:15 851PHP总共有4个配置指令作用域:(PHP中的每个指令都有自己 ...
相关推荐
今天,’大型服务器’模式已经过去,取而代之的是大量的小服务器,使用各种各样的负载均衡技术。这是一种更可行的方法,将使硬件成本降至最低。 ‘更多小服务器’的优势超过过去的’大型服务器’模式体现在两个方面...
阿里云的负载均衡服务SDK手册提供了开发者们使用各种编程语言(如Java、Python、PHP和.NET)与阿里云负载均衡服务进行集成的详细指南。负载均衡服务的主要目标是分散网络流量,提高应用的可用性和性能,确保服务的...
阿里云的负载均衡服务SDK手册提供了开发者使用不同编程语言(如Java、Python、PHP和.NET)与阿里云负载均衡服务进行交互的详细指南。SDK(Software Development Kit)是一组工具和库,允许开发者轻松地集成阿里云的...
摘 要 传统的实验室管理方式,积累量大,易出错,在实验室开放方面,学生很难查看实验室的空闲时段,管理员也很难为学生...PHP负载均衡指南 - 47 - 三、工程设计图纸: - 51 - 四、源程序: - 51 - 五、其他: - 51 -
在IT行业中,构建高效、可扩展的Web服务是至关重要的,Apache和Tomcat的集群配置、伪静态处理以及负载均衡正是实现这一目标的关键技术。Apache作为广泛应用的HTTP服务器,能够处理静态内容,而Tomcat则作为Java应用...
有关使用外部数据库实例的说明,请参阅《 Elastic Beanstalk开发人员指南》: 。 本教程还使用AWS管理控制台而不是EB CLI。 这些说明已通过WordPress 4.8.3进行了测试安装EB CLI EB CLI与Git集成在一起,并简化了...
PHP 开发者可以使用 Nginx、Apache 等服务器软件来实现负载均衡。 2. 服务器集群:将多个服务器组成集群,可以提高系统的可用性和扩展性。当某个服务器发生故障时,集群中的其他服务器可以继续提供服务。 3. 缓存...
在搭建Linux服务器上运行PHP应用的环境中,通常会采用LAMP(Linux、Apache、MySQL、PHP)或LNMP(Linux、Nginx、MySQL、PHP)架构。...此外,根据实际需求,还可以配置HTTPS、负载均衡、缓存等高级功能。
总结来说,平滑重启PHP文件有效测试涉及到服务器管理、PHP-FPM的工作机制、负载均衡策略以及系统监控等多方面的技术知识。通过平滑重启,开发者能够在不中断服务的前提下,更新PHP环境,优化性能,保障线上业务的...
让我们深入探讨这个主题,了解如何配置Nginx+PHP5的完整环境,并实现负载均衡。 首先,你需要在Windows系统上安装WNMP组件。这通常包括以下几个步骤: 1. **安装Nginx**:你可以从Nginx官方网站下载Windows版本的...
- 分布式存储:Memcache支持多台服务器集群,你可以通过配置多个服务器地址,实现负载均衡和故障转移。 - 键值大小限制:注意Memcache中的键值对大小不能超过1MB,设计数据结构时需考虑这一限制。 - 数据一致性:...
Nginx的基础知识部分涉及到Nginx的安装、调试、Rewrite规则的应用、Redirect重定向、自动添加目录斜线、Location指令的使用、文件过期时间的设置、防盗链技术、访问控制、日志处理、缓存策略、负载均衡、简单优化、...
此外,为了提升性能,可能会采用缓存技术(如Redis或Memcached)、负载均衡、数据库优化(如索引、查询优化)等策略。 安全性方面,HYBBS应遵循最佳实践,如输入验证、防止SQL注入、XSS攻击防御、CSRF令牌、密码...
2. 模块化结构:Nginx 采用模块化的结构,包括过滤器、协议模块、负载均衡模块等多种模块,可以根据需要灵活地组合不同的模块。 3. SSL 和 TLS 支持:Nginx 支持 SSL 和 TLS 加密连接,可以提供安全的数据传输。 4. ...
第6章 Nginx HTTP负载均衡和反向代理的配置与优化 第7章 Nginx的Rewrite规则与实例 第8章 Nginx模块开发 第9章 Nginx的Web缓存服务与新浪网的开源NCACHE模块 第10章 Nginx在国内知名网站中的应用案例 第11章 Nginx的...
安装完成后,需要进行相应的配置,包括主配置文件nginx.conf的编写和其他相关配置文件的设置,比如定义服务器块(server blocks)配置虚拟主机,以及定义反向代理和负载均衡策略等。 5. Nginx在Web服务器中的应用:...
2. 分布式部署:在大型应用中,通过多台Memcache服务器实现负载均衡,提高系统可用性和性能。 3. 键命名规范:使用有意义且不冲突的键名,便于管理和查找。 4. 缓存命中率监控:定期检查缓存命中率,调整缓存策略以...
FastDFS是一个轻量级的分布式文件系统,由淘宝开发,专门用于解决大容量存储和负载均衡问题。其核心特点是跟踪器(Tracker)和存储节点(Storage)。Tracker负责调度和负载均衡,而Storage则存储文件并处理文件同步...