常见的⽹站服务器架构有哪些?
1. 初始阶段的⽹站架构
⼀般来讲,⼤型⽹站都是从⼩型⽹站发展⽽来,⼀开始的架构都⽐较简单,随着业务复杂和⽤户量的激增,才开始做很多架构上的改进。当它还是⼩型⽹站的时候,没有太多访客,⼀般来讲只需要⼀台服务器就够了,这时应⽤程序、数据库、⽂件等所有资源都在⼀台服务器上,⽹站架构如下图所⽰:
web服务器主要提供什么服务2. 应⽤服务和数据服务分离
随着⽹站业务的发展和⽤户量的增加,⼀台服务器就⽆法再满⾜需求了。⼤量⽤户访问导致访问速度越
来越慢,⽽逐渐增加的数据也会导致存储空间不⾜。这时就需要将应⽤和数据分离,应⽤和数据分离后整个⽹站使⽤ 3 台服务器:应⽤服务器、⽂件服务器和数据库服务器。这3 台服务器对硬件资源的要求各不相同:
应⽤服务器业务逻辑,需要强⼤的CPU
数据库服务器对磁盘读写操作很多,需要更快的磁盘和更⼤的内存
⽂件服务器存储⽤户上传的⽂件,因此需要更⼤的磁盘空间
此时,⽹站系统的架构如下图所⽰:
3. 使⽤缓存改善⽹站性能
随着⽤户再增加,⽹站⼜会⼀次⾯临挑战:数据库压⼒太⼤导致整站访问效率再此下降,⽤户体验受到影响。⼀个⽹站,往往 80% 的业务访问集中在 20% 的数据上,⽐如微博请求量最多的肯定是那些千万级粉丝的⼤ V 的微博,⽽⼏乎没有⼈关注的你的⾸页,除了⾃⼰想起来之外根本不会被打开。既然⼤部分业务访问集中在⼀⼩部分数据上,那就把这⼀⼩部分数据先提前缓存在内存中,⽽不是每次都去数据库读取,这样就可以减少数据库的访问压⼒,从⽽提⾼整个⽹站的访问速度。
⽹站使⽤的缓存⼀般分为缓存到应⽤服务器或者缓存在专门的分布式缓存服务器。缓存到应⽤服务器⾃⼰的访问速度快很多,但是受⾃⾝内存限制,往往不太适⽤。远程分布式缓存使⽤⼀个集专门负责缓存服务,当内存不够还可以轻松得动态扩容。
4. 使⽤应⽤服务器集改善⽹站的并发处理能⼒
使⽤缓存后,数据访问压⼒得到了缓解,但是单⼀应⽤服务器能够处理的请求连接有限,在⽹站访问⾼峰期,应⽤服务器就成了整个⽹站的效率瓶颈。使⽤分布式集是⽹站解决⾼并发、海量数据问题的常⽤⼿段。当⼀台服务器的处理能⼒和存储空间不⾜时,不要尝试去更换更强⼤的服务器,对⼤型⽹站⽽⾔,多么强⼤的服务器,都满⾜不了⽹站持续增长的业务需求。这种情况下,更恰当的做法是增加⼀台服务器分担原有服务器的访问及存储压⼒。对⽹站架构⽽⾔,只要能通过增加⼀台服务器的
⽅式改善负载压⼒,就可以以同样的⽅式持续增加服务器不断改善系统性能,从⽽实现系统的可伸缩性。应⽤服务器实现集是⽹站可伸缩架构设计中较为简单成熟的⼀种,如下图所⽰:
通过负载均衡调度服务器,可以将来⾃⽤户浏览器的访问请求分发到应⽤服务器集中的任何⼀台服务器上,如果有更多⽤户,就在集中加⼊更多的应⽤服务器,使应⽤服务器的压⼒不再成为整个⽹站的瓶颈。
5. 数据库读写分离
⽹站在使⽤缓存后,使对⼤部分数据读操作访问都可以不通过数据库就能完成,但是仍有⼀部分读操作(缓存访问不命中、缓存过期)和全部的写操作都需要访问数据库,在⽹站的⽤户达到⼀定规模后,数据库因为负载压⼒过⾼⽽成为⽹站的瓶颈。⽬前⼤部分的主流数据库都提供主从热备功能,通过配置两台数据库主从关系,可以将⼀台数据库服务器的数据更新同步到另⼀台服务器上。⽹站利⽤数据库的这⼀功
能,实现数据库读写分离,从⽽改善数据库负载压⼒。如下图所⽰:
应⽤服务器在写数据的时候,访问主数据库,主数据库通过主从复制机制将数据更新同步到从数据库,这样当应⽤服务器读数据的时候,就可以通过从数据库获得数据。为了便于应⽤程序访问读写分离后的数据库,通常在应⽤服务器端使⽤专门的数据访问模块,使数据库读写分离对应⽤透明。
6. 使⽤反向代理和 CDN 加速⽹站响应
随着⽹站业务不断发展,⽤户规模越来越⼤,由于中国复杂的⽹络环境,不同地区的⽤户访问⽹站时,速度差别也极⼤。有研究表明,⽹站访问延迟和⽤户流失率正相关,⽹站访问越慢,⽤户越容易失去耐⼼⽽离开。为了提供更好的⽤户体验,留住⽤户,⽹站需要加速⽹站访问速度。主要⼿段有使⽤ CDN 和反向代理。如下图所⽰:
7. 使⽤分布式⽂件系统和分布式数据库系统
任何强⼤的单⼀服务器都满⾜不了⼤型⽹站持续增长的业务需求。数据库经过读写分离后,从⼀台服务器拆分成两台服务器,但是随着⽹站业务的发展依然不能满⾜需求,这时需要使⽤分布式数据库。⽂件系统也⼀样,需要使⽤分布式⽂件系统。如下图所⽰:
分布式数据库是⽹站数据库拆分的最后⼿段,只有在单表数据规模⾮常庞⼤的时候才使⽤。不到不得已时,⽹站更常⽤的数据库拆分⼿段是业务分库,将不同业务的数据部署在不同的物理服务器上。
8. 使⽤ NoSQL 和搜索引擎
随着⽹站业务越来越复杂,对数据存储和检索的需求也越来越复杂,⽹站需要采⽤⼀些⾮关系数据库技术如 NoSQL 和⾮数据库查询技术如搜索引擎。如下图所⽰:
NoSQL 和搜索引擎都是源⾃互联⽹的技术⼿段,对可伸缩的分布式特性具有更好的⽀持。应⽤服务器则通过⼀个统⼀数据访问模块访问各种数据,减轻应⽤程序管理诸多数据源的⿇烦。
9. 业务拆分
⼤型⽹站为了应对⽇益复杂的业务场景,通过使⽤分⽽治之的⼿段将整个⽹站业务分成不同的产品线。如⼤型购物交易⽹站都会将⾸页、商铺、订单、买家、卖家等拆分成不同的产品线,分归不同的业务团队负责。
具体到技术上,也会根据产品线划分,将⼀个⽹站拆分成许多不同的应⽤,每个应⽤独⽴部署。应⽤之间可以通过⼀个超链接建⽴关系(在⾸页上的导航链接每个都指向不同的应⽤地址),也可以通过消息队列进⾏数据分发,当然最多的还是通过访问同⼀个数据存储系统来构成⼀个关联的完整系统,如下图所⽰:
10. 分布式服务
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论