仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 791|回复: 9
打印 上一主题 下一主题

[CentOS(社区)] 带来一篇年夜型高功能Web站点的十项划定规矩

[复制链接]
变相怪杰 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-14 20:38:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
如果您觉得本篇CentOSLinux教程讲得好,请记得点击右边漂浮的分享程序,把好文章分享给你的好朋友们!总结了国际收集和游戏公司运转后端办事器过程当中所失掉的理论履历和教导。这些划定规矩合用于日会见量从一万到上百万的年夜型体系。
在我们公司ChinaNetCloud,见过量种分歧范例的网站和体系,有好也有差。个中有些体系具有优秀的办事器/收集架构,而且举行了公道的调剂和监控;但是一样平常的体系城市有宁静和功能上的成绩,不克不及优秀运转,也没法变得更盛行。
在中国,开源的LAMP栈是最盛行的收集架构,它利用PHP开辟,运转在Apache办事器上,以MySQL作为数据库,一切这些都运转在Linux上。它是个牢靠的平台,运转优秀,是如今环球最盛行的Internet体系架构。但是,我们很难对其范围举行准确的扩大并坚持宁静性,由于每一个使用层都有其本身的成绩、缺点和最好理论。我们的事情就是匡助企业用最低的操纵本钱来创立并运转高功能的、可伸缩的、宁静的体系,因而关于这类成绩我们有很丰厚的履历。
以后的实践情形是,良多网站都是由开辟职员疾速而便宜地创立,一般没有任何IT职员大概司理,只是由步伐员来办理体系。酿成的了局是,固然消费很低的本钱网站就能够入手下手运转,可是当具有大批用户、必要扩大范围的时分,一般就会晤临真实的成绩。究竟,中国具有三亿八万万的Internet用户,假如个中的0.01%会见这个站点,就很简单激发25万~50万的页面会见量。这些成绩在各个级别上城市发生,上面总结的划定规矩是对最一样平常的成绩举行概述,而且申明为何这些划定规矩云云主要,和最好接纳甚么***来修改它们。遵守这些倡议的站点会进步它的可伸缩性、宁静性和操纵上的不乱性。
1.利用符合的会话办理
第一个想到的扩大体系的***就是增加更多硬件。比方,利用两台办事器而不是一台。这听着公道,但会发生潜伏成绩:会话办理。这对Java步伐来讲是很严峻的成绩,在PHP中也会发生可延展性成绩,关于数据库的负载特别云云。
会话被界说为独自的终极用户登录大概毗连一段工夫,个中一般会包括多个TCP/IP的HTTP毗连、几个Web页面,一般还包含几十个乃至上百个页面元素,如框架、菜单、Ajax更新等。一切这些HTTP哀求都必要晓得用户是谁,才干满意宁静的请求,并向用户传送得当的内容,由于这些都是会话的构成局部。一般每一个会话城市包含互相联系关系的会话数据,如用户名、用户ID、汗青、购物车、统计材料等等信息。
成绩在于,在有两台Web办事器和多个HTTP毗连的情形下,用户流量会在两台办事器之间分派和挪动,办事器很难晓得用户是谁,并对一切数据举行跟踪,由于每一个页面大概页面的构成局部都大概来自分歧的办事器。在PHP中,一般是如许办理的,在第一次毗连或登录的时分就创立一个会话ID并将其放在Cookie中,然后这个Cookie会和每一个HTTP哀求一同发送。
如许做带来一个成绩,接上去每段PHP剧本都必要基于ID来查找会话数据。因为PHP没法在实行历程之间坚持形态(这与Java分歧),这个会话数据必要存储在某个中央,一般是在数据库中。可是,假如庞大的页面必要在每一个页面载进过程当中对其举行十次查找(这是常常要做的),那就意味着每一个页面都要实行10次SQL查询,这会招致数据库上很年夜的负载。
在后面所举的中国Internet用户0.01%的例子中,大概很简单在每秒内仅仅为了办理会话就天生上百个查询。办理***是一向利用位于Cookie中的会话ID,而且利用像Memcached之类的办事来缓存会话数据以取得高功能。
还要注重个中存在宁静性的成绩,由于黑客能够假造另外一个用户的会话ID,这是很简单找到或看到的,出格是在公用的Wi-Fi中。办理***是对会话ID举行得当的加密大概署名,并将其与工夫区间、IP地点和其他关头信息像扫瞄器大概其他细节相绑定。在Internet上有良多不错的关于优秀的会话办理的例子,你能够依据必要找到最合适的。
2.老是要思索宁静性
只管编写像避免SQL注进和登录宁静之类的代码触及良多宁静成绩,但不幸的是,几近没有人思索过宁静性,而那些思索到的人也没有对其举行很好地舆解。而本文要存眷的是操纵性的体系宁静。关于这类宁静,我们的核心会合在三个宁静范畴:防火墙、运转的用户和文件会见权限。
除设置专门的硬件防火墙(像Cisco的ASA)以外,一切办事器都还应当运转像Iptables之类的防火墙,它会回护办事器免受其他威逼和打击。这些威逼和打击大概来自大众的Internet、其他办事器或当地办事器,也包含利用VPN大概SSH通道的开辟和操纵职员。我们仅对指定的IP开放的确必要的端口。Iptables大概会很庞大,可是有良多不错的模板,我们一般可使用它们来匡助客户创立Iptables。比方,默许的RedHat大概CentOS防火墙的设置申明只要10行,明显其实不有用。我们最好理论的Iptables设置也许有5页,这个中包括了Linux所能供应的第一流的宁静提防。
一切公用的办事,都应当运转在专门的用户下,如Apache。牢记永久都不要利用Root用户运转,由于这会让任何突入到Apache的用户接受全部办事器。假如Apache只是运转在Apache用户下大概运转在Nobody下,那末突入Apache就不是一件简单的事变了。
Web办事器运转大概办事的文件(像.php和.html文件)关于Web办事器的用户应当是不成写的。这意味着Apache大概Nginx用户不该该具有Web目次的写权限。有良多***都能够做到这一点,而最复杂的就是将这些文件为其他用户一切,然后让Apache/Nginx等用户回属于可以利用640权限读取文件的组中。这会提防几近一切的黑客和针对页面的打击。
别的,永久不要利用Ftp来上传文件,出格是在公用的Wi-Fi情况中,由于在个中黑客很简单偷取用户名和暗码。取而代之的是利用Sftp会加倍宁静。别的,每一个雇员都应当具有本人的用户ID和随秘密码。
3.利用尺度的路径和装置设置
一个使人厌恶的安排成绩是,开辟者很少思索他们的软件会被安排到临盆Web办事器的甚么地位,和怎样安排。我们看到过很多年夜型的体系将它们的PHP代码安排在/home/xiaofeng大概/web/code路径下。现实上,这两个路径都长短常不尺度的,而且会带来操纵和宁静性的成绩。当这些体系从开辟情况转移到测试情况再到临盆情况中时,由于每一个装置设置都长短尺度的,以是常常会呈现成绩,这时候就必要开辟者调剂才干够一般事情。
你应当老是利用尺度的装置包和二进制文件来装置像Apache之类的办事器。不要从源代码编译大概装置Tarball,由于这会招致临时不乱性和办理上的成绩,别的在办事器上装置多个分歧的版本也会形成搅浑。
Web站点应当老是在指定的平台和Linux公布的尺度路径下举行测试和安排,像RedHat大概CentOS下的/var/www/html路径。这有助于对体系举行无效的权限办理、备份、设置、监控和其他操纵。
Web办事器的日记应当寄存在/var/logs大概/var/logs/app_name下,而不该该位于主代码地区。如许做的缘故原由不单单是由于这些尺度的路径很主要,更应当存眷的是,得当地设置办事器会将/var设置为分别的文件体系。假如使用步伐俄然写进了大批日记并占用一切磁盘空间,因为我们做了以上的设置就不会招致体系溃散,大概其他严峻的成绩。假如日记位于其他地位,便可能会发生成绩。
4.老是利用日记
在Web体系中做几日记都不为过。一切体系都应当将主要的数据写进到日记中,不论是它们本人的日记仍是体系的Syslog。Cron的Job和其他Shell剧本大概C言语的步伐,对日记都有响应尺度和复杂的函数。在Shell剧本中,只必要利用Logger下令就能够完成日记的写进。在剧本启动/中断、主要的剧本实行和及时数据发生的情形下都要实行写进日记操纵。如许呈现成绩的时分,检察次要的体系日记就能够很简单地看到产生了甚么。
年夜型体系常常会利用专门的工具如Local5来纪录日记,并设置Syslog大概Syslog-ng来将其寄存在独自的文件中,如许会更简单利用。必要注重的是,Syslog工具和Logger(和任何Syslog挪用)默许优先利用user.notice,若有需要,你能够对其举行调剂。
一个好的体系会对步伐举行设置,用来翻开大概封闭日记,并能够选择在每模块大概功效的级别上使用分歧级其余日记。这使得我们能够纪录十分具体和壮大的日记,用来剖析和调试在临盆操纵中所产生的成绩。



5.利用优秀的数据库计划和SQL
在任何体系中,数据库一般是最年夜的功能瓶颈。而影响数据库功能的最年夜两个问题是数据库计划和SQL代码质量。良多体系都具有优秀的大概最少是可用的数据库计划,但因为没有经由得当的功能测试,SQL代码质量一般城市很差。如许的SQL代码在开辟情况中大概运转很快,由于个中只要小数据集和最小的负载。可是当做千上万的用户同时读取数据库中上百万笔记录的时分,它就极可能会溃散。
不幸的是,这些成绩一入手下手其实不分明,直到体系增年夜、俄然入手下手溃散的时分才会展现出来。在增年夜的过程当中,数据库体系看起来运转得很快(由于数据都位于内存中,并且很少有并发的查询),而且对用户的响应也很快,但实践上它的外部运转效力很低。这其实不主要,我们存眷的是在体系增年夜并碰到功能成绩之前找到这些成绩并加以办理。
关于这个问题有良多不错的书和站点举行懂得析,个中的关头工具包含慢查询日记、INNODB形态体系,和形貌以后功能的MySQL统计信息。我们见到过良多体系每秒会读取500,000条数据,这是呈现SQL成绩的分明前兆,但公司常常对其一窍不通直到办事器入手下手溃散。
MySQL体系应当对一切数据利用INNODB存储引擎,由于INNODB与之前的MyISAM比拟,运转得更快、更不乱,而且办理功能和备份事情也加倍简单和快速。在主设置文件中,INNODB应当被设置为默许的数据库引擎,而且体系应当不时地举行反省,看是不是不测创立了MyISAM的表。
6.总要具有优秀的DB设置和备份
良多公司都没有优秀的备份机制,也不晓得怎样得当地完成这项事情。MySQL的Dump是不敷的,由于最好的备份***是利用LVM快照和INNODB对体系举行热备份,从而失掉超快的速率和超高的牢靠性。
别的,在将一切备份文件从办事器上转移出来之前要举行紧缩和加密。别的还要确保具有计划公道的MySQL设置。MySQL默许装置利用申明中只要5~10行关于设置的申明,这基本不合适开辟利用。而我们供应给客户的最好理论文档足足有10页那末长。文档中约莫有100种有效的关于宁静、功能和不乱性成绩的设定,包含避免数据废弛,个中良多设建都是十分主要的。
7.利用读/写数据库分别
跟着体系变得愈来愈复杂,出格是当它们具有很差的SQL时,一台数据库办事器一般不敷以处置负载。可是多个数据库意味侧重复,除非你对数据举行了分别。更一样平常地,这意味着创建主/从正本体系,个中步伐会对主库编写一切的Update、Insert和Delete变动语句,而一切Select的数据都读取自从数据库(大概多个从数据库)。
只管观点上很复杂,可是想要公道、准确地完成其实不简单,这大概必要大批的代码事情。因而,即使在入手下手时利用统一台数据库办事器,也要尽早企图在PHP中利用分别的DB毗连来举行读写操纵。假如准确地完成该项事情,那末体系就能够扩大到2台、3台乃至12台办事器,并具有高可用性和不乱性。
8.利用相似Memcached之类的数据库缓存
即使有了好的数据库计划、SQL和读写离,年夜型的体系仍旧必要更快的功能,出格是对会话形态、密友列表和BBS笔墨之类的器材。为了到达这个目标,我们可使用像MemCached之类的数据缓存,它是一个高功能的复杂数据缓存,已被一切最年夜型的站点利用。可是要当心的是,不要100%依附于一台Memcache办事器来进步功能,由于假如那台办事器溃散了,就会损坏全部体系的功能。在这类情形下,应当利用2~3台Memcache办事器构成丛聚架构,而且有选择地包括一个缓存筹办历程,假如缓存办事重视启,必要从头载进数据,它可以疾速地载进缓存。
9.构建测试和开辟情况
良多公司只要开辟者的桌面体系和他们的临盆办事器。当体系变得愈来愈年夜、愈来愈庞大时,测试和办理代码就会招致严峻的问题。最好的理论是具有两个测试体系,一个用于开辟者的代码和功效的整合测试,另外一个要与临盆情况完整分歧,从而更简单向临盆情况光滑地过渡。侥幸的是,如今利用云盘算(大概公有云)能够轻松到达这一点。一个5~10台办事器的临盆情况,能够很简单地在办公室大概IDC中利用一台办事器来复制,从而用于测试,而这台办事器我们能够用于多个客户的项目。
10.利用版本把持
最初,要对统统利用版本把持,包含测试和生产情况的安排。良多开辟者都利用SVN大概相似的***。在幻想形态下,这些***能够被用于一切代码、剧本、HTML、图片、设置、文档和测试。版本把持应该是代码转移到测试情况的必经之路,而不是复杂地复制大概利用tar文件,由于这两者都是不成靠的。开辟者应当将一切统统都签进,打上标签,然后将它们签出到测试体系。假如一切都没成绩,那末它们会将该版本签出到临盆情况。
总结
不论是在开辟仍是在运营过程当中,创立牢靠的高功能Web体系都有良多应当注重的事项。本文试图从可操纵性和牢靠性的角度会商最主要的几点。当你构建和办理站点的时分,请不要忘了这些主要的成绩。遵守这些划定规矩会有助于确保体系久长、优秀地运行。


如果您觉得本篇CentOSLinux教程讲得好,请记得点击右边漂浮的分享程序,把好文章分享给你的好朋友们!
老尸 该用户已被删除
沙发
发表于 2015-1-16 18:51:23 | 只看该作者

带来一篇年夜型高功能Web站点的十项划定规矩

用户下达的命令解释给系统去执行,并将系统传回的信息再次解释给用户,估shell也称为命令解释器,有关命令的学习可参考论坛相关文章,精通英文也是学习Linux的关键。
爱飞 该用户已被删除
板凳
发表于 2015-1-18 22:31:16 | 只看该作者
尽量不要提问纯属是扯蛋.学习Linux特别是自己一个人初学入手的时候没人教很困难.当然如果可以的话平时多去买些Linux书...对学习Linux很有帮助.
冷月葬花魂 该用户已被删除
地板
发表于 2015-1-27 22:27:15 | 只看该作者
熟悉操作是日常学习Linux中的三大法宝。以下是作者学习Linux的一些个人经验,供参考:
简单生活 该用户已被删除
5#
发表于 2015-2-5 16:25:51 | 只看该作者
如果你想深入学习Linux,看不懂因为文档实在是太难了。写的最好的、最全面的文档都是英语写的,最先发布的技术信息也都是用英语写的。
admin 该用户已被删除
6#
发表于 2015-2-13 00:03:31 | 只看该作者
通过自学老师给的资料和向同学请教,掌握了一些基本的操作,比如挂载优盘,编译程序,在Linux环境下运行,转换目录等等。学了这些基础才能进行下面的模拟OS程序。?
灵魂腐蚀 该用户已被删除
7#
发表于 2015-3-3 12:12:54 | 只看该作者
让我树立了很大的信心学好这门课程,也学到了不少专业知识和技能。?
只想知道 该用户已被删除
8#
发表于 2015-3-11 11:52:02 | 只看该作者
发问的时候一定要注意到某些礼节。因为Linux社区是一个松散的组织、也不承担回复每个帖子的义务。它不是技术支持。
莫相离 该用户已被删除
9#
发表于 2015-3-18 16:36:25 | 只看该作者
随着IT从业人员越来越多,理论上会有更多的人使用Linux,可以肯定,Linux在以后这多时间不会消失。
海妖 该用户已被删除
10#
发表于 2015-3-26 12:58:15 | 只看该作者
首先Linux是开源的,这也是最主要的原因,想学windows,Unix,对不起我们没源代码。也正是因为这样,Linux才能够像滚雪球一样越滚越大,发展到现在这种规模。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-5-14 20:13

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表