2021-01-04 16:38:58 阅读(172)
作为一名技术从业者,经过十年的访问,我发现一些知识需要在世界各地阅读才能整理出线索。让我们从一开始就一步一步地谈谈系统点。一个每天访问数千个小网站到每天访问100万或200万个小网站,我们如何才能让它顺利度过这个阶段,不要在技术上有先天性的不足,写给一些技术人员和不懂技术的企业家。了解互联网的人都有自己的想法,有些人把想法付诸实践,做一个网站,然后开始运营。事实上,从纯网站技术的角度来看,由于开源模式的发展,建立一个小网站既简单又便宜。当访问量达到一定数量级时,成本开始飙升,问题开始出现。由于带宽的增加、硬件的扩展和人员扩张带来的成本增加是显而易见的,相当大一部分成本是由代码重构、架构重构甚至底层开发语言更换引起的。最糟糕的是数据丢失。经过几年的努力,他们一夜之间回到了创业之前。降低成本就是增加利润。很多事情,我们一开始就可以避免,先打好基础,以后可以节省很多精力,少操很多心。假设你是一个参与创业的技术人员,目前你很穷,你必须自己做一切,自己付钱。在早期阶段,你必须制作一个应用程序不是特别复杂的网站,所以你应该注意以下几点:首先,一般来说,技术人员(程序员)创业是根据自己的技术背景选择最熟悉的语言,但考虑到你不可能一个人写程序,你必须仔细考虑。无论使用什么语言,最终代码的质量都取决于管理,所以我们仍然从纯语言层面更加实用。java现在很流行、php、.net、python、ruby有自己的优缺点,python和ruby,现在人员招聘还是比较困难的,性能优化会费很大的力气,.net平台买不起windowserver。java、最常用的php。在早期阶段,几乎所有的应用程序都依赖于前端支持的网站。php具有入门简单、设计模式简单、写作快、性能充足等优点。然而,不注意设计模式也是其缺点,容易变得松散,隐藏更多的错误,难以维护。java的优点是有许多成熟的工具来帮助整个管理过程,强大的类型也可以避免一些弱智的bug。大多数java程序员更注重设计模式,而不管它是否实际,代码格式看起来仍然很好。这也是一个缺点,初学者可能过于注重模式,难以解决实际需求。前端不仅仅是html、css之类的。与用户互动的整个部分是前端,包括处理程序。建议使用这类程序的主要原因是开发迅速,员工广泛。至于行为分析、银行接口、异步信息处理等后端,只能根据不同的业务需求选择不同的语言。二、代码版本管理如果开发人员之间的网络速度相似,SVN;比较分散,比如跨国,hg。大多数人还是svn。假设选择了svn,有几个考虑因素。一是采用什么树结构。前期可能只有一个主干,以后需要建立一个分支,比如一个开发分支,一个在线分支,然后每个小组可能需要一个分支。建议在开始时选择两个分支,开发和在线。每个功能在当地测试正确后提交到开发分支,最后统一测试,可以合并到在线分支。如果你喜欢使用svn作为移动硬盘,写一点也没关系,也就是说,当合并更大时,这些人可以建立自己的分支,甚至建立一个本地代码仓库,随意提交自己的分支,然后在测试后提交到开发分支。部署,可手动部署,也可自动部署。手工部署比较简单,一般是直接在服务器上svnupdate,或者找新目录svncheckout,然后把webroot给ln-s。应用程序越复杂,部署就越复杂,没有统一的标准,只要不使用ftp上传的形式,一个是上传文件引用不一致错误率增加,另一个是开发人员的版本很容易与在线版本不一致,导致想要改变错误的单词成为一个回滚杯。若有多台服务器仍建议自动部署,更换代码的机器将从当前服务池中临时撤出,更新后再重新加入。无论项目有多小,养成使用版本管理的好习惯至少可以作为你的备份,我的http://zhiyi.us虽然是wordpress,但还是svn,只改一两句css也是劳动成果。三、服务器硬件不要羡慕大客户和有钱人,看看机房散户区,一台服务器孤独支撑的网站数不胜数。若资金稍有充足,建议至少三台标准配置,分别用于web处理、数据库、备份。web服务器至少需要8G内存,双sataraid1。如果经济稍微宽松一点,或者有更多的静态文件或图片,15ksasraid1 0。数据库至少有16G内存,15ksasraid1 0。备份服务器最好与数据库服务器配置相同。硬件可以自己购买品牌底板,即机箱配备主板和硬盘盒,CPU内存硬盘配备自己,也可以在整个品牌或兼容机上使用。三台机器,市场情况6台、7万也就配齐了。网络服务器可以运行程序和内存缓存,数据库服务器只运行主数据库(如果是MySQL),备份服务器工作相对较多,网络配置、缓存配置、数据库配置与前两个一致,所以网络和数据库任何问题,备份服务器更改ip切换。备份策略可以是drbd、rsync或许多其他开源备份方案。rsync是最简单的,放在cron里自己跑就行了。备份和切换,建议做更多的测试,选择最安全、最适合业务的,并尽可能多地备份。4、尽量不要选择三种机房:联通访问特别慢的电信机房、电信访问特别慢的联通机房、电信联通访问特别慢的移动或铁通机房。那网通机房呢?亲爱的,网通联通N久前合并改名为联通。多寻找,实地考察,多测试,多探索,北京、上海、广州等主要节点城市,或有很多高质量的机房,找到网络质量好,严格的机房管理,特别是严格的管理,不要访问网站,打电话过去知道别人维护你的网络电缆,这比DOS头疼。自己拉几根光纤叫机房,看你的抗风险程度和心理素质。机房可以说是非常重要的,直接关系到网站的访问速度,网站的访问速度直接关系到用户体验。我可以翻墙看风景,但是很难买到网络游戏vpn来打开你这个不太知名的网站。也许你的网站ajax很出色,但document怎么也不ready,有些代码总是与用户绝缘。五、架构初始架构一般比较简单,web负载平衡 数据库主从 缓存 分布式存储 队列。总的来说,就这些东西而言,无数的文章已经重复了细节。根据未来的情况,会有N多WEB、N多主从关系、N多缓存、N多xxx设计。基本方案是现成的,但您比其他人更强大的是,考虑到缓存故障时的雪崩效应、同步数据的一致性和时差、队列的稳定性和失败后的重试策略、文件存储的效率和备份方法。缓存总有一天会失效,数据库复制总有一天会断裂,队列总有一天会写不进去,电源总有一天会烧坏。缓存总有一天会失败,数据库复制总有一天会断裂,队列总有一天会写不进去,电源总有一天会烧坏。根据墨菲定律,网站迟早会成为茶几。六、Linux服务器软件、nginx、php、mysql,除了名字,我们还必须选择版本。Linux有很多发行版本。只要没有特殊要求,就可以选择人数最多、社区最活跃、配置最方便、软件包最完整、最新的,比如debian。、ubuntu。至于RHEL,你使用只能在RHEL上运行的软件吗?剩下的nginx、php、mysql、activemq、其他的等等,除非你改变了这些软件或你的程序,否则尽量更新版本,新版本,意味着新特性、漏洞和性能的增加。道听途说的人总是告诉你,旧版本是稳定的。与特殊业务相比,所谓的稳定性,大多数人没有改变任何服务器软件源代码,绝大多数情况下可以顺利升级到新版本。类似jdk5到jdk6,python2到python3等变化较大的升级还是比较少见的。看看changelog,看看升级说明,根据自己的情况进行评估。升级越早越好。其他家庭使用php6编写程序,并参观php4。优秀的开源程序升级还是很负责任的,看好文档,不要害怕。以上六点已经准备好了。现在我们有了运行环境、基本架构骨架、备份和切换方案,我们应该开始设计和开发。在发展方面有无数的事情,下一篇文章将首先讨论一些重点。七、数据库几乎所有的操作最终都会落在数据库上,而且最难扩展(存储也很难)。在开发之前,必须确定mysql,什么样的表用myisam,什么样的表用inodb。还应确定复制策略和分片策略。在表引擎方面,一般来说,更新不多、不需要事务的表可以使用myisam,需要线路锁定和事务支持的表可以使用innodb。myisam的锁表不一定是性能低下的根本原因,innodb也不一定都是行锁,具体细节要多看相关文档,熟悉引擎特性才能更好的使用。现代WEB的应用越来越复杂。我们经常设计很多冗余的表结构。虽然不符合传统范式,但值得考虑速度。如果要求较高,甚至应结束联合查询。编程时要多注意数据一致性。在复制策略方面,多主多最好从结构开始设计,代码直接根据多主多编写,使用一些技巧避免复制延迟问题,解决多数据库数据是否一致,可以自己编写或找到现成的操作和维护工具。分片策略。总有几个表数据量超大,此时分片是必然的。分片有很多策略,从简单的分区到根据热量自动调整,根据具体业务选择适合自己的。避免以自增ID为主键,不利于分片。存储过程很难扩展。这种情况主要发生在传统的C/S,特别是OA系统转换的开发人员。低成本网站不是一两台小型机器运行数据库处理所有业务的模式,而是机海作战。方便的水平扩展比预分析时间和网络传输流量要重要得多。NoSQL。这只是一个概念。在实际应用中,网站拥有越来越多的密集写作操作、数亿的简单关系数据读取、热准备等,这些都不是传统关系数据库擅长的,因此产生了许多非关系数据库,如redis/TC&TT/MongoDB/Memcachedb等,在测试中,这些都达到了每秒至少1万次的写作操作,内存类型甚至超过5万次。例如,MongoDB可以通过几句配置形成复制 自动分片 在failover的环境中,文档存储也简化了传统的设计库结构再开发模式。很多业务可以用这样的数据库代替mysql。八、缓存。数据库非常脆弱,前面必须有缓存,事实上,我们优化速度,几乎是优化缓存,可以使用缓存,不要跑到后端数据库。缓存有持久缓存和内存缓存。生成静态页面是最容易理解的持久缓存。还有很多,比如varnish的分块缓存、上面提到的memcachedb等。memcached首当其冲。被动更新和主动更新可用于缓存更新。被动更新的优点是设计简单。当缓存空时,它会自动去数据库取数据,然后填写缓存,但很容易引起雪崩效应。一旦缓存大面积失效,数据库的压力可能会急剧上升。主动缓存可以避免这一点,但可能会导致程序无法获取数据。如何配合这两者,程序设计要多动脑筋。九、队列。一个用户操作可能会导致一系列资源和功能的调动。如果同时发生这些调动,压力无法控制,用户体验也不好。这些操作可以放在队列中,由其他模块异步执行,如发送电子邮件和手机短信。开源队列服务器很多,性能要求不高。使用数据库作为队列也可以。只要程序读写队列的接口保持不变,底层队列服务就可以随时更换,类似于Zend_Queue类的Zendframework,java.util.Queue接口等。十、文件存储。除结构化数据外,我们还经常存储其他数据,如图片等。这类数据数量多,访问量大。典型的是图片,从用户头像到用户上传的照片,生成不同的缩略图尺寸。存储的分布几乎和数据库扩展一样困难。在不使用专业存储的情况下,基本上是靠自己的NAS。这涉及到结构。以图片存储为例。图片很容易产生热点。有些图片上传后就没人看了。有些图片可能每天访问数十万次,大量小文件的异步备份也需要时间。为了准备未来的图片,最好在一开始就把图片的域名分开,而不是主域名。很多网站都设置了cookie.domain.ltd,如果图片也在这个域名下,很可能会因为cookie而导致缓存失效,占用多余的流量,也可能会因为浏览器并发线程的限制而导致访问缓慢。有一个简单的方法可以用普通的文件系统存储图片。计算文件的hash值,如md5,以结果第一为第一级目录,因此第一级有16个目录。从0到F,这个字母可以作为域名,0.yourimg.com到f.yourimg.com(客户端dns压力会增加)
以上就是关于前期做应用不特别复杂的网站,要注意以下几点的相关介绍,更多前期做应用不特别复杂的网站,要注意以下几点相关内容可以咨询我们或者浏览页面上的推荐内容。我们将让你对前期做应用不特别复杂的网站,要注意以下几点有更深的了解和认识。
推荐阅读
最新文章
猜你喜欢以下内容:
一 客户顾问-张三 一