• 《大型网站技术架构-核心原理与案例分析》之一: 大型网站架构演化


    最近刚刚读完李智慧的《大型网站技术架构-核心原理与案例分析》,对每章重点内容作了一些笔记,以便加深印象及日后查阅。

    一、大型网站软件系统的特点

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

    高可用:系统7X24小时不间断服务。

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

    用户分布广泛,网络情况复杂:许多大型互联网都是为全球用户提供服务的,用户分布范围广,各地网络情况千差万别。

    安全环境恶劣:由于互联网的开放性,使得互联网站更容易受到攻击,大型网站几乎每天都会被黑客攻击。

    需求快速变更,发布频繁:和传统软件的版本发版本发布频率不同,互联网产品为快速适用市场,满足用户需求,其产品发布频率是极高的。

    渐近式发展:与传统软件产品或企业应用系统一开始就规划好全部的功能和非功能需求不同,几乎所有的大型互联网站都是从一个小网站开始,渐进地发展起来的。

    二、大型网站架构演化发展历史

    1、初始阶段的网站架构

    应用程序、数据库、文件等所有的资源都在一台服务器上。通常使用的技术为Linux、PHP、Apache、MySQL,架构图如下:

     

    2、应用服务器和数据服务分离

    将应用和数据分离,整个网站使用三台服务器:应用服务器、文件服务器和数据库服务器。分离后,不同特性的服务器承担不同的服务角色。

     

    3、使用缓存改善网站性能

    网站使用的缓存可以分为两种:缓存在应用服务器上的本地缓存和缓存在专门的分布缓存服务器上的远程缓存。使用缓存后,数据访问压力得到有效缓解,架构图如下:

    4、使用应用服务器集群改善网站的并发处理能力

    使用集群是网站解决高并发、海量数据问题的常用手段。通过负载均衡服务器,可将来自用户浏览器的访问请求分发到应用服务器集群中的任何一台服务器上。

    5、数据库读写分离

    网站使用缓存后,使绝大部分数据读操作访问都可以不通过数据库就能完成,但是还有一部分读操作(缓存访问不命中、缓存过期)和全部的写操作需要访问数据库。通过配置两台数据库主从关系,可以将一台数据库服务器的数据更新同步到另一台服务器上。为了便于应用程序访问读写分离后的数据库,通常在应用服务器端使用专门的数据访问模块,使数据库读写分离对应用透明。

    6、使用反向代理和CDN加速网站响应

    CDN和反向代理基本原理都是缓存,区别在于CDN部署在网络提供商的机房,使用户在请求网站服务时,可以从距离自己最近的网络提供商机房获取数据;而反向代理则部署在网站的中心机房,当用户请求到达中心机房后,首先访问的服务器是反向代理服务器,如果反向代理服务器上缓存着用户请求的资源,就将其直接返回给用户。

    7、使用分布式文件系统和分布式数据库系统

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

    8、使用NOSQL和搜索引擎

    NOSQL和搜索引擎都是源自互联网的技术手段,对可伸缩的分布式特性具有更好的支持。

    9、业务拆分

    大型网站为了应对日益复杂的业务场景,通过使用分而治之的手段将整个网站业务分成不同的产品线,将一个网站拆分成许多不同的应用,每个应用独立部署维护。

    10、分布式服务

    三、大型网站架构演化的价值观

    世界没有哪个网站从诞生起就是大型网站;也没有哪个网站第一次发布就拥有庞大的用户,高并发的访问,海量的数据;大型网站都是从小型网站发展而来。网站的价值在于它能为用户提供什么价值,在于网站能做什么,而不在于它是怎么做的,所以在网站还很小的时候就去追求网站的架构是舍本逐末,得不偿失的。小型网站最需要做的就是为用户提供好的服务来创造价值,得到用户的认可,活下去,野蛮生长。

    1、大型网站架构技术的核心价值是随网站所需灵活应对

    大型网站架构技术的核心价值不是从无到有搭建一个大型网站,而是能够伴随小型网站业务的逐步发展,慢慢地演化成一个大型网站。

    2、驱动大型网站技术发展的主要力量是网站的业务发展

    创新的业务发展模式对网站架构逐步提出更高要求,才使得创新的网站架构得以发展成熟。

    四、网站架构设计误区

    1、一味追随大公司的解决方案

    2、为了技术而技术

    网站技术是为业务而存在的,除此毫无意义。

    3、企图用技术解决所有问题

    技术是用来解决业务问题的,而业务的问题,也只可以通过业务的手段去解决。

     

  • 相关阅读:
    uitoolbar 圆角
    json
    MFC 控件使用笔记
    automake和autoconf使用介绍
    [译]C# Socket连接请求超时机制
    linux 环境变量的配置
    OK6410,修改调试串口,屏蔽调试输出,增加启动画面
    UML图各类符号含义
    图解UML类与类之间的六中关系
    C#综合揭秘——深入分析委托与事件
  • 原文地址:https://www.cnblogs.com/maoxiaolv/p/5561773.html
Copyright © 2020-2023  润新知