一万人次现场技术准备
???今天的从技术上纯的网站,因为开发的开源模型,建立一个网站是很简单,很便宜,所以很多人认为在互联网应用方面的创业导向。这些人大多没有真正了解技术或知识不精通网站开发??和维护非常分散,学习成本太高,所以这篇文章点这方面的知识相结合的系统,每天有成千上万的小访问网站的访问12万的小网站,中间可能有什么问题,以及如何在一开始就做了足够的工作来避免这些问题。
???您的网站,因为辛勤工作,参观逐渐升高,升高,问题也开始显现。是明显的,因为成本的增加所带来的增加带宽,硬件扩张,扩张的员工,但有相当大的部分代码重构重构架构的成本,甚至底层开发语言更换引起了最坏的情况下,数据丢失,烧毁了所有的努力。这些费用的大部分可以在一开始就避免,先打好基础,后面可以节省大量的能源,少讲了很多心。
???对于不同初始投资成本,技术路线的选择是不同的。据推测,该网站刚刚只是一个想法,计划的第一年,投资在服务器硬件,带宽50000。这一数额的资金,有多种方案可供选择,如虚拟主机租用,租了一个单独的服务器或者流行的私有云,或者托管服务器。前两个选项,一个网站发展到了一定的规模要搬迁,然后重做规划显然是一个更大的影响。服务器托管配置独立的,完全的控制,所以具有一定规模的网站基本都是这种模式。自己的托管服务器的网站,开始要注意以下几点 -
首先,语言的发展
???一般情况下,技术人员(程序员)的选择根据自己的技术背景,他们最熟悉的语言,但并不总是可以是书面的程序,而且在语言的选择是多花些心思。首先要明确的是,不管用什么语言,最终的代码质量是看管理,分析,从前期开发成本。国内应用的语言的流行网站关于Java,PHP和净,蟒蛇,红宝石,这五营。 Python和Ruby?流行相对较晚,在国内的工作人员还是比较难招。 NET平台,相对较晚需要解决性能问题,员工的技能要求也比较高。其余的Java,PHP的雇主,可以说是最多的。 Java和PHP无法比拟的,但应用程序的早期,几乎总是由前端支持的网站,PHP入门很简单,快速写入,从语言层面的一个比较大的优势。至于后端,如行为分析,银行接口,异步消息处理等真正需要的,是需要根据业务需求选择不同的语言。
二,代码版本管理
???网站需要使用一个有点规模的代码版本管理。代码版本管理两点最大的效益,促进合作工作的历史记录查询比较。许多人,VSS / CVS / SVN / HG,如代码版本管理软件,目前比较流行的,svn的普及仍然是非常高的。
假设选举的svn,那么有几点考虑。首先,什么树结构。早期可能是躯干,背部的需要建立了分公司,作为一个开发分支,后来上线的分支,每队可有一个分支。推荐开始的人是从两个分支,开发和线上,每个功能本地测试提交到正确的开发分支,最后统一测试,上线的时候可能会纳入上线的分支。如果每个人都建立了自己的分支,合并会浪费大量的精力来几乎每天几次的Web应用程序,耗费太多的时间。
???部署到服务器的代码,你可以手动部署自动部署。手动部署比较简单,一般都可以直接在服务器上运行svn update,或者找到一个新的目录svn结帐,然后Web根目录LN-S过去。的更复杂的应用,更复杂的部署,那里是没有统一的标准,只是停止使用FTP上传,形式上传文件引用的不一致错误率增加,是容易出现开发人员的版本是在线的版本不一致,导致在有要更改错字结果变成回滚。如果您有多个自动部署服务器或建议,暂时退出更改代码从一台机器从目前的服务池,然后重新加入更新。
第三,在服务器硬件
???依靠网站上的无数服务器机房在每个孤独的支持,但如果稍微有足够的资金,它的标准配置,至少有三个建议,被用来作为网络处理,数据库,备份。 Web服务器至少8G内存,双SATA RAID1以上,如果经济是一点点松动,或静态文件或图片,15K SAS RAID 10。数据库至少16G内存,:15K SAS RAID 10。最好的备份服务器上的数据库服务器使用相同的配置。可以在一套完整的品牌兼容机的硬件,也可以半品牌半组装,取决于经济能力。当然,这是一个典型的混合某些类型的应用程序的性能瓶颈首先出现在网络上,这种情况下,应单独进行分析。
???Web服务器可以再次运行程序时的内存缓存,数据库服务器仅运行在主数据库(如果它是MySQL),备份服务器承担比较多的,网络配置,缓存配置,数据库配置应该是在前面的两个一致的,如WEB和数据库的任何问题,很容易可以切换到备份服务器临时更换,直到完成故障排除的问题。要注意,硬件可能在任何时候被打破,特别是硬盘,所以宁可WEB服务器,数据库服务器,不能免除备份,备份机必须是不同的,有异步,电力故障,故障可能会导致机上的所有数据丢失。可以选择很多的开源备份解决方案,是最简单的rsync写的crontab年,时间同步。备份和开关,则建议做更多的测试,选择最安全和最适合创业,尽可能多的异地备份。
四,机房
???三机房尽量不要投票:联通访问特别慢的电信机房,电信访问特别慢的联通机房电信中国联通访问特别慢的移动或铁通机房。机房要尽可能多的实地考察,并进行更多的测试,找到一个很好的网络质量,严格管理的机房。机房可以说是非常重要的,直接关系到网站访问速度,网站访问速度直接关系到用户体验,访问速度很慢的网站,它是很难得到用户的青睐。
五,架构
???的大方向,是知名的架构负载平衡网络+数据库主从+缓存+分布式存储+队列。在开始时,在按照与可伸缩的设计和编程的原则。只是为了让更多的考虑缓存失效雪崩效应,主从同步的数据一致性和时间,队列的稳定性和失败重试策略,文件存储和备份的效率,并让人意想不到的情况。缓存失效,数据库复制中断队列写入错误,电源损坏,常常会出现在很长一段时间的实际操作和维护,如果不注意这些问题,恢复期可能会比预期的要高。
第六,服务器软件
???是非常受欢迎的Linux操作系统。专业的操作人员和维修人员,人们往往会选择使用在社会上更加活跃,且易于配置,易于升级,发布,,如RH系列的,Debian,Ubuntu的服务器硬件和操作系统的选择,看看是否有一个合适的驱动程序,如果它被确定一些商业软件解决方案,但也预先知道在什么样的操作系统支持最优。 ,nginx的Web服务器,Apache的lighttpd三大系列,apache的人均消费量仍然是最大的,但,要性能调整或需要专业的情况下,并不需要太多的调整,nginx和lighttpd的,可以达到良好的性能。无论选择什么软件,除非这些软件或程序的康复,真的是不兼容的新版本,或尝试更多更好的新版本和新版本,增加新的功能,BUG减少,以提高性能。一个典型的PHP的网站,基本上大多数人都没有改过任何服务器软件源代码,绝大多数情况下是一个平滑的升级到新的版本。类似JDK5到jdk6中还是比较少见的,python2与python3,变动比较大的升级。看一看的ChangeLog,请参阅升级说明,结合自己的实际情况的评估测试,越早升级更好的升级后的成本就越高。自己编译它不被推荐,操作和维护的未来不利的包,请尝试使用内置的释放软件包管理工具,有没有特殊的要求。
七,数据库
???几乎所有的操作必须最终下降到数据库的身体,最难的扩展(实体店也很难)。数据库常见的扩展方法是复制,切片,考虑到,如何每个应用程序的数据复制切片当然,这样的考虑一般的技术设计周期推迟。在最初的数据库结构设计,根据业务的类型和量的增长预计将考虑是否要分库分区,并尽量不要使用联合查询,不使用增量ID,以方便片。复制延迟的问题,在主数据库中的数据的一致性,你可以编写自己的操作和维护现有的工具来检测。
???扩展存储过程是比较困难的,这种情况多发生在传统的C / S,尤其是在OA系统转换过来的开发人员。低成本的网站是不是一个两个小型机,运行的数据库来处理所有的商业模式,当地的海上作战。方便的横向扩张的分析前时间和网络流量比要重要得多。
???此外,称为NoSQL的一个流行的概念,可以理解为一个非传统的关系型数据库。在实际应用中,该网站有更多和更密集的写入,数十亿简单的关系数据读取,如双机热备,在传统的关系型数据库,所以他们有很多的非关系型数据库,比如Redis的/ TC&TT / MongoDB的/ Memcachedb(如测试),这些几乎总能达到至少一百万次每秒的写操作,内存类型甚至超过了50,000。在设计中,根据业务特点和性能要求来选择是否使用了这样的数据库。例如,MongoDB中,一些配置可以设置自动副本+芯片+故障转移环境中,文件存储也简化了传统的设计库结构重建的模式。但是,当你决定要采用的技术必须真正了解自己的优点和缺点,例如,可能是您选择的技术并不能支持你需要的事务和数据一致性的要求。
如图8所示,文件存储
????与数据库扩展存储分布几乎是很难的,但只以百万计的PV,磁盘IO方面一般不会有大问题,一个或两个SATA做条带化RAID机可以应付,但自己的做异步备份更加复杂,因为小文件。如果只有一台机器的商店,你可以做一个简单的优化,例如,把最小的缩略图分区,并把中缩图分区,根据调整的平均大小,块大小。存储要规划好目录结构,否则文件更多的维护复杂,不利于扩展。同时还要考虑到未来的扩展,如LVM或散列文件,根据不同的规则,不同的机器。大量的磁盘IO更容易出现故障,所以你想要做一个备份,如果有驱动器出现故障,立即采取行动,更换了很多人的硬盘坏了一连串的恶化。
????加去准备最好的开始,未来的景象将成为单独的图片域,并没有主域名。因为很多网站的cookie设置domain.ltd,如果图片是域名下的,很可能是因为cookie缓存失败,并占为过剩的流动,也可能是因为浏览器并发线程限制访问速度较慢。
IX程序
???某些硬件条件下,应用程序可以进行多次访问,很大一部分也取决于程序如何写。程序写的不好,可能访问承载写不好,可能两台机器将能接受几百万PV。更复杂,更高的数据实时性要求的应用程序,优化起来比较困难,但想法?一个统一的普通网站,是试图优化的前端,减少数据库操作的数量,减少磁盘IO。优化是指的前端,不影响的情况下,可以在浏览器中不执行服务器中执行的功能和经验,缓存服务器不直接返回到应用程序服务器,程序可以直接获得的结果,而不是外部,机器可以实现数据的远程内存可以采取的磁盘,缓存,和一些没有进入到数据库中查询。是指更新的数量减少,以减少数据库操作,缓存结果减少查询的数量,数据库执行的操作尽可能的让你的程序(例如,联接查询),尽量不要使用文件读取和写入文件系统的缓存中以减少磁盘IO,减少的数量等。程序优化永远要优化慢的部分,转换语法“优化”。
???编程,但是,不应该专注于优化应该关注的可扩展性。 WEB应用的今天,需求变化非常快,适应的体系结构的各种需求不存在,我们的可扩展性的架构与底层的相互作用想点,如持久性数据的存取规则,缓存的存取规则,也有一些共享服务,例如作为用户信息。第一个常量的一部分,做完美的,它的其余部分很容易把重点放在上述的业务逻辑。