架构演变

一、大型网站系统的特点

  • 高并发,大流量:需要面对高并发用户,大流量访问;

  • 高可用:系统24小时不间断的提供服务;

  • 海量数据:需要存储、管理海量的数据,需要使用大量的服务器;

  • 用户分布广泛,网络情况复杂:很多大型网站都是为全球用户服务,用户的分布范围广泛,各地网络情况差异大;

  • 安全环境恶劣:互联网的开放性,导致网站更容易受黑客的攻击;

  • 需求快速变更,发布频繁:相比传统软件,互联网产品为了快速适应市场,满足用户的需求,产品发布的频率是极高的;

  • 渐进式发展:与传统行业软件不同,互联网产品不是事先就规划好了整个产品的全部功能,几乎每个大型互联网网站都是从一个小网站,慢慢根据市场和用户的改变而慢慢渐进发展成大型网站的;

二、大型网站架构发展历程

  大型网站的技术挑战主要来自三个方面:

    ·庞大的用户体系,

    ·高并发的访问

    ·海量数据的存储管理

  基于这三点,我们就来看看,整个架构设计方面是如何演变的。

  初始阶段(All in One

    此阶段一般用户量不多,访问量不大,数据量不多,一般一台服务器就能搞定,应用程序,数据库和文件都可以部署在一台服务器上,架构图如下:

  

  应用服务和数据服务分离阶段

    随着用户数量的增加,越来越多的用户访问导致性能越来越差,数据也越来越多导致存储空间不足,此时我们就需要考虑将应用和数据分离,此时网站需要多台服务器:

    应用服务器+数据库服务器+文件服务器,架构设计如下图:

  使用缓存改善性能阶段

    随着数据库压力越来越大,我们需要考虑从数据上优化性能,大家都知道80%的业务访问集中在20%的数据上,既然大部分业务集中访问这少部分数据,那为何我们不考虑

    把这部分数据缓存在内存中呢,不就可以减小对数据库访问的压力了嘛;

    缓存又分为2种,

      本地缓存(本地缓存是基于内存的,因此数据量有限,但是访问速度快),

      远程缓存(一些中间件缓存服务器例如redis,这部分数据理论上不限容量,而且可以做成集群模式)。

  应用服务器集群优化网站并发能力阶段

    当用户越来越多时,对网站的访问量也越来越多,应用服务器处理请求越来越慢,此时我们可以考虑将应用服务器做成集群模式部署,再通过负载均衡调度器,将用户的 

    请求分发给集群上不同的应用服务器。

  数据库读写分离阶段

    网站在使用了缓存之后,使部分数据可以不通过数据库就能完成,但是对于数据库的修改操作,还是需要访问数据库的,这个时候,数据库的负载压力过高,能为网站的性

    能瓶颈,此时我们就要考虑数据库的读写分离了,数据库的读写分离是建立在主从热备的基础上的,基本目前大多数主流数据库都支持主从热备,通过配置两台或者多台数

    据库的主从关系(1主1从,1主多从,多主多从),实现数据的读(从库)写(主库)分离,主库主动将数据同步到从库。

  向代理和CDN加速网站响应阶段

    为了加快网站的访问速度,我们主要考虑的手段为CDN和反向代理,CDN是部署在网络提供商的机房,用户在访问时,可以从距离自己最近的网络提供商机房获取数据;反

    向代理是部署在网站自己的中心机房,当用户请求到达机房时,优先访问的服务器是反向代理服务器,如果反向代理中缓存了用户请求的资源,那么就直接返回给用户,加

    快了响应的速度,也减轻了后端负载的压力。

  分布式文件系统和分布式数据库系统阶段

    当读写分离之后如果还不能满足网站的需求,那就只能考虑最后的手段了:

    分布式数据库,网站常用的数据库拆分手段是业务分库,将不同的业务数据库部署在不同的物理机上。

  NoSQL和搜索引擎阶段

    随着网站业务越来越复杂,对数据的检索和存储的需求也越来越复杂,网站需要采用一些非关系型数据库(NoSQL)和非数据库查询(搜索引擎)技术。

  业务拆分阶段

    分而治之思想,将整个网站业务划分为不同的产品线,根据不同的产品线划分将网站拆成不同的应用,每个应用独立部署维护如一个电商网站可以分为:

    首页,订单,商品,活动,优惠卷,个人中心,购物车等等多个应用,应用之间可以通过消息队列来传递数据。

  分布式服务阶段

    随着业务复杂度提升,我们会发现很多系统之间有着共同的业务,我们可以把这部分业务抽取出来,做成一个共通的基础服务。

三、网站架构设计的误区

  • 一味追求大公司的解决方案:大公司的架构和成功案例当然值得借鉴,但是不能盲从;

  • 为了技术而技术:技术是为业务而存在的,在技术选型和架构设计中一定要结合具体业务,脱离业务的架构毫无意义;

  • 企图用技术解决所有问题:技术是用来解决业务问题的,而业务本身的问题,是可以通过业务去解决,而没有必要企图用技术是解决;

--------------------- 本文来自 blankhang 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/blankhang/article/details/79346216?utm_source=copy 

posted @ 2018-10-06 22:00  凤凰山小旋风  阅读(192)  评论(0编辑  收藏  举报