当前位置: 网站建设 > 网页设计 > 建站经验 >

大型高性能Web站点十项规则

时间:2013-03-02 03:58来源:未知 作者:admin 点击:

标签:大型高性能Web站点十项规则 Web(48)站点(12)越(1)变得(2)系统(18)规则(15)十项(3)大型(14)高性能(4)跟着(5)
跟着系统变得越来越宏大,特殊是当它们占有 很差的SQL时,一台数据库服务器通常不足以处置负载。但是多个数据库意味着反复,除非你对数据进行了分离。更个别地,这象征着树立主/从副本系统,其中程序会对主库编写所有的Update、Insert和Delete变革语句,而所有Select的数据都读取自从数据库(或者多个从数据库)。 另外,在将所有备份文件从服务器上转移出来 之前要进行紧缩和加密。另外还要确保拥有设计合理的MySQL配置。MySQL默认安装使用说明中只有5~10行关于配置的说明,这基本不合适开发使用。
大型高性能Web站点十项规则》文章地址:http://www.tfxk.com/wangyesheji/jianzhanjingyan/030233b52013.htm

跟着系统变得越来越宏大,特殊是当它们占有 很差的SQL时,一台数据库服务器通常不足以处置负载。但是多个数据库意味着反复,除非你对数据进行了分离。更个别地,这象征着树立主/从副本系统,其中程序会对主库编写所有的Update、Insert和Delete变革语句,而所有Select的数据都读取自从数据库(或者多个从数据库)。

另外,在将所有备份文件从服务器上转移出来 之前要进行紧缩和加密。另外还要确保拥有设计合理的MySQL配置。MySQL默认安装使用说明中只有5~10行关于配置的说明,这基本不合适开发使用。 而我们提供应客户的最佳实践文档足足有10页那么长。文档中大概有100种有用的关于安全、性能和稳定性问题的设定,包括预防数据败坏,其中很多设定都是无比重要的。

很多公司只有开发者的桌面系统和他们的生产 服务器。当系统变得越来越大、越来越复杂时,大型门户网站架构设计的可伸缩性,测试和管理代码就会导致严峻的问题。最佳的实践是拥有两个测试系统,一个用于开发者的代码和功效的整合测试, 另一个要与生产环境完整一致,从而更容易向生产环境平滑地过渡。荣幸的是,当初使用云盘算(或者私有云)可以轻松达到这一点。一个5~10台服务器的生产 环境,可以很容易地在办公室或者IDC中使用一台服务器来复制,从而用于测试,而这台服务器我们可以用于多个客户的名目。

在Web系统中做多少日志都不为过。所有系统都应该将重要的数据写入到日志中,不论是它们本人的日志仍是系统的Syslog。Cron的Job以及其他Shell脚本或者C语言的程序,对日志都有 相应标准以及简单的函数。在Shell脚本中,只要要使用 Logger命令就可以实现日志的写入。在脚本启动/结束、重要的脚本执行以及实时数据产生的 情况下都要执行写入日志操作。这样呈现问题的时候,查看重要的系统日志就可以很容易地看到产生了什么。

使用良好的数据库设计和SQL

此外,永远不要使用Ftp来上传文件,特别是在公用的Wi-Fi环境中,因为在其中黑客很容易盗取用户名和密码。取而代之的是使用Sftp会更加安全。另外,每个雇员都应该拥有自己的用户ID和随秘密码。

Tag:高性能Web站点     高性能Web站点    

使用适合的会话管理

这样做带来一个问题,接下来每段PHP脚本 都需要基于ID来查找会话数据。由于PHP无奈在履行过程之间保持状态(这与Java不同),这个会话数据需要存储在某个处所,通常是在数据库中。但是, 如果庞杂的页面需要在每个页面载入进程中对其进行十次查找(这是时常要做的),那就意味着每个页面都要执行10次SQL查询,这会导致数据库上很大的负载。

然而,我们很难对其范围进行正确的扩展并坚持安全性,因为每个运用层都有其本身的问题、缺点和最佳实际。当前的实际情况是,很多网站都是由开发人员疾速而便宜地创建,通常没有任何IT职员或者经理,只是由程序员来管理系统。

大型系统常常会使用专门的工具如 Local5来记载日志,并配置Syslog或者Syslog-ng来将其存放在单独的文件中,这样会更容易使用。需要留神的是,Syslog工具和 Logger(以及任何Syslog调用)默认优先使用user.notice,如有必要,你可以对其进行调剂。

一个令人厌恶的部署问题是,开发者很少考虑 他们的软件会被部署到生产Web服务器的什么位置,以及如何部署。我们看到过很多大型的系统将它们的PHP代码部署在/home/xiaofeng或者 /web/code路径下。事实上,这两个路径都是异常不标准的,并且会带来操作和安全性的问题。当这些系统从开发环境转移到测试环境再到生产环境中时, 因为每个安装配置都长短标准的,所以常常会出现问题,这时就需要开发者调整能力够畸形工作。

尽管编写像避免SQL注入和登录安全之类的 代码波及很多安全问题,但可怜的是,简直没有人考虑过安全性,而那些考虑到的人也没有对其进行很好地舆解。而本文要关注的是操作性的系统安全。对于这类安 全,我们的焦点集中在三个安全范畴:防火墙、运行的用户以及文件拜访权限。

在任何系统中,数据库通常是最大的机能瓶 颈。而影响数据库性能的最大两个问题是数据库设计跟SQL代码品质。良多体系都领有良好的或者至少是可用的数据库设计,但因为不经由恰当的性能测 试,SQL代码质量通常都会很差。这样的SQL代码在开发环境中可能运行很快,由于其中只有小数据集和最小的负载。然而当成千上万的用户同时读取数据库中 上百万条记载的时候,它就很可能会瓦解。

--> [网站建设之]大型高性能Web站点十项规则

最后,要对所有使用版本节制,包含测试和生产环境的安排。许多开发者都使用SVN或者相似的办法。在幻想状况下,这些方法能够被用于所有代码、脚本、HTML、图片、配置、文档和测试。版本把持应该是代码转移到测试环境的必经之路,而不是简略地复制或者使用tar文件,大型门户网站实现的十四大技术小结,因为这二者都是不牢靠的。开发者应该将所有一切都签入,打上标签,而后将它们签 出到测试系统。假如所有都没问题,那么它们会将该版本签出到出产环境。

问题在于,在有两台Web服务器和多个HTTP衔接的情形下,用户流量会在两台服务器之间调配和挪动,服务器很难晓得用户是谁,并对所有数据进行跟踪,因为每个页面或者页面的组成局部都可能来 自不同的服务器。在PHP中,通常是这样解决的,在第一次连接或登录的时候就创建一个会话ID并将其放在Cookie中,然后这个Cookie会和每个 HTTP恳求一起发送。

使用读/写数据库分别

使用类似Memcached之类的数据库缓存

会话被定义为独自的终极用户登录或者连接一 段时光,其中通常会包括多个TCP/IP的HTTP连接、多少个Web页面,通常还包括几十个甚至上百个页面元素,如框架、菜单、Ajax更新等。所有这些 HTTP要求都需要知道用户是谁,才干满意平安的请求,大型网站建站要考虑数据库压力和服务器负载,并向用户传递适当的内容,因为这些都是会话的组成部门。通常每个会话都会包括彼此关系的会话数据, 如用户名、用户ID、历史、购物车、统计材料等等信息。

这些问题在各个级别上都会产生,下面总结的规则是对最普通的问题进行概述,并且阐明为什么这些规则如此重要,以及最好采取什么方法来修改它们。遵守这些倡议的站点会进步它的可伸缩性、安全性以及操作上的稳定性。

Web 服务器的日志应该寄存在/var /logs或者/var/logs/app_name下,而不应该位于主代码区域。这样做的起因不仅仅是因为这些尺度的门路很主要,更应该关注的是,适当 地配置服务器会将/var配置为分离的文件系统。如果利用程序忽然写入了大量日志并占用所有磁盘空间,因为咱们做了以上的配置就不会导致系统崩溃,或者其 他重大的问题。如果日志位于其余地位,就可能会发生问题。

Web服务器运行或者服务的文件 (像.php和.html文件)对于Web服务器的用户应该是不可写的。这意味着Apache或者Nginx用户不应该拥有Web目录的写权限。有很多方 法都可以做到这一点,而最简单的就是将这些文件为其他用户所有,然后让Apache/Nginx等用户归属于可以使用640权限读取文件的组中。这会防范 几乎所有的黑客和针对页面的攻击。

在中国,开源的LAMP栈是最流行的网络架构,它使用PHP开发,运行在Apache服务器上,以MySQL作为数据库,所有这些都运行在Linux上。它是个可靠的平台,运行良好,是现在寰球最风行的Internet系统架构。

一个好的系统会对程序进行配置,用来翻开或者封闭日志,并可以取舍在每模块或者功能的级别上应用不同级别的日志。这使得我们可以记录非常具体和强盛的日志,用来剖析和调试在生产操作中所发生的问题。

很多公司都没有良好的备份机制,也不知道如 何恰当地完成这项工作,多种浏览器兼容的CSS使用技巧。MySQL的Dump是不够的,因为最好的备份方法是使用LVM快照和INNODB对系统进行热备份,从而得到超快的速度和超高的 可靠性。

本文和大家分享一下创立大型高性能Web站点的十项规矩,你应当来看下哦,十分不错的文章。

不幸的 是,这些问题一开始并不显著,直到系统增大、突然开始崩溃的时候才会浮现出来。在增大的过程中,数据库系统看起来运行得很快(因为数据都位于内存中,而且很少有并发的查询),并且对用户的响 应也很快,但实际上它的内部运行效力很低。这并不重要,我们关注的是在系统增大并碰到性能问题之前找到这些问题并加以解决。

老是要斟酌保险性

在前面所举的中国Internet用户 0.01%的例子中,可能很轻易在每秒内仅仅为了治理会话就天生上百个查问。解决方式是始终应用位于Cookie中的会话ID,并且使用像Memcached之类的服务来缓存会话数据以取得高性能。

第一个想到的扩展系统的方法就是增加更多硬件。例如,多做站好还是做一个站好,使用两台服务器而不是一台。这听着合理,但会产生潜在问题:会话管理。这对Java程序来说是很严峻的问题,在PHP中也会产生可延展性问题, 对数据库的负载尤其如斯。

总要拥有良好的DB配置和备份

MySQL系统应该对所有数据使用 INNODB存储引擎,因为INNODB与之前的MyISAM比拟,运行得更快、更稳定,并且管感性能和备份工作也更加容易和快捷。在主配置文件 中,INNODB应该被设置为默认的数据库引擎,并且系统应该不断地进行检讨,看是否意外创建了MyISAM的表。

使用标准的路径和装置配置

使用版本掌握

Web 站点应该总是在指定的平台和 Linux宣布的标准路径下进行测试和部署,像RedHat 或者CentOS下的/var/www/html路径。这有助于对系统进行有效的权限管 理、备份、配置、监控以及其他操作。

对于这个问题有很多不错的书和站点进行懂得析,其中的要害工具包括慢查询日志、INNODB状态系统,以及描写当前性能的MySQL统计信息。我们见到过很多系统每秒会读取500,000条数据, 这是涌现SQL问题的显明前兆,但公司往往对其一窍不通直到服务器开始崩溃。

总是使用日志

只管概念上很简单,但是想要公道、准确地实 现并不容易,这可能须要大批的代码工作。因而,即使在开端时使用统一台数据库服务器,也要尽早打算在PHP中使用分离的DB连接来进行读写操作。如果准确 地实现该项工作,那么系统就可以扩大到2台、3台甚至12台服务器,并具备高可用性和稳固性。

构建测试和开发环境

所有公用的服务,都应该运行在专门的用户 下,如Apache。切记永远都不要使用Root用户运行,因为这会让任何闯入到Apache的用户接收整个服务器。如果Apache只是运行在 Apache用户下或者运行在Nobody下,那么闯入Apache就不是一件容易的事件了。

造成的成果是,固然破费很低的本钱网站就可以开始运行,但是当拥有大量用户、 需要扩展规模的时候,通常就会见临真正的问题。究竟,中国拥有三亿八千万的Internet用户,如果其中的0.01%访问这个站点,就很容易引发25 万~50万的页面访问量。

除了配置专门的硬件防火墙(像Cisco的 ASA)之外,所有服务器都还应该运行像Iptables之类的防火墙,它会维护服务器免受其他要挟和攻打。这些威逼和袭击可能来自公共的 Internet、其他服务器或本地服务器,也包括使用VPN或者SSH通道的开发和操作人员。我们仅对指定的IP开放确切需要的端口。Iptables 可能会很复杂,但是有很多不错的模板,我们通常可以使用它们来辅助客户创建Iptables。例如,默认的RedHat或者CentOS防火墙的配置解释 只有10行,显然并不适用。我们最佳实践的Iptables配置大略有5页,这其中包含了Linux所能供给的最高等的安全防备。

还要注 意其中存在安全性的问题,因为黑客可 以捏造另一个用户的会话ID,这是很容易找到或看到的,特别是在公用的Wi-Fi中。解决方法是对会话ID进行恰当的加密或者签名,并将其与时间区间、 IP地址以及其他症结信息 像阅读器或者其他细节相绑定。在Internet上有很多不错的关于良好的会话管理的例子,你可以依据需要找到最适合的。

即便有了好的数据库设计、SQL和读写分离,大型的系统依然需要更快的性能,特别是对会话状态、挚友列表以及BBS文字之类的货色。为了到达这个目标,我们可以使用像MemCached之类的数 据缓存,它是一个高性能的简单数据缓存,已经被所有最大型的站点使用。但是要警惕的是,不要100%依附于一台Memcache服务器来提高性能,因为如 果那台服务器崩溃了,就会损坏全部系统的性能。在这种情况下,应该使用2~3台Memcache服务器构成簇集架构,并且有抉择地包含一个缓存筹备过程, 如果缓存服务重视启,需要从新载入数据,它可能快捷地载入缓存。

你应该总是使用标准的安装包和二进制文件来 安装像Apache之类的服务器。不要从源代码编译或者安装Tarball,因为这会导致长期稳定性和管理上的问题,另外在服务器上安装多个不同的版本也 会造成混杂。


(责任编辑:网站建设)
大型高性能Web站点十项规则相关文章
上一篇:大型门户网站架构设计的可伸缩性 下一篇:大型高性能网站的十项规则
回到顶部