美文网首页我爱编程
大型网站技术架构(一)演化

大型网站技术架构(一)演化

作者: 俊杰的笔记 | 来源:发表于2018-03-27 13:12 被阅读28次

    大型网站技术架构核心原理与案例分析 读书笔记

    大型网站演化

    • 特点
    • 历程
    • 价值观
    • 误区

    一、大型网站架构

    好的互联网产品都是慢慢运营出来的,不是一开始就开发好的。这跟传统软件产品或企业应用系统不同。

    大型网站架构解决的主要问题是高并发访问和海量数据

    二、网站架构的演化

    • 数据库分离部署;文件服务器分离部署
    • 使用缓存减轻数据库压力
    • 应用服务器集群(负载均衡)
    • 数据库读写分离
    • CDN和反向代理服务器(缓存,使数据更早返回)
    • 分布式文件系统和分布式数据库(分布式数据库是最后手段,不到万不得已不会用,一般使用业务分库)
    • NoSQL和搜索引擎
    • 业务拆分
    • 分布式服务

    初始阶段

    应用程序、数据库和文件部署在同一台服务器上。
    操作系统使用Linux,应用程序使用PHP开发,部署在Apache上,数据库使用MySQL.

    应用和数据分离

    数据量过多导致存储空间不足。
    整个网站使用三台服务器,对硬件要求各不相同:

    • 应用服务器,处理大量业务逻辑,需要有强大的CPU
    • 文件服务器,存储大量用户上传的文件,需要更大的硬盘
    • 数据库服务器,需要快速磁盘检索和数据缓存

    这个阶段,网站并发能力和数据存储空间有很大改善,但是,随着用户持续增多,网站仍然面临挑战:数据库压力大导致访问延迟,影响网站性能。

    使用缓存

    网站访问的二八定律:80%的业务访问集中在20%的数据上。

    网站使用的缓存可以分为两种:

    • 应用服务器上的本地缓存,速度更快,但受服务器内存限制,且与应用程序争用内存
    • 专门的分布式缓存服务器上的远程缓存,使用大内存服务器做集群部署

    这个阶段,数据访问压力得到缓解,但是,单一应用服务器能处理的请求连接数是有限的。在网络访问的高峰期,应用服务器成为性能瓶颈。

    使用应用服务器集群

    一台服务器处理能力、存储空间不足时,不要企图更换更强大的服务器。恰当的做法是增加一台服务器。这就是所谓的垂直扩展和水平扩展。

    应用服务器实现集群时可伸缩集群架构设计中较为简单成熟的一种。通过负载均衡来调度服务器,将浏览器的访问请求分发到应用服务器集群的任何一台服务器上。

    数据库读写分离

    网站使用缓存后,仍有一部分读操作(缓存访问不命中、缓存过期)和全部的写操作需要访问数据库。网站用户达到一定规模后,数据库因为负载压力过高而成为性能瓶颈。

    目前主流的数据库都提供主从热备功能,配置主从关系可以将一台数据库服务器的数据更新同步到另一台服务器上。

    • 写数据时,访问主数据库
    • 读数据时,访问从数据库

    通常,在应用服务器端使用专门的数据访问模块,使数据库读写分离对应用透明。

    使用反向代理和CDN加速响应

    加速网站访问速度的主要手段:

    • CDN
    • 反向代理

    CDN和反向代理的原理都是缓存。

    • CDN部署在网络提供商的机房里。用户访问时,可以从最近的网络提供商机房获取数据。
    • 反向代理则部署在网站的中心机房。用户请求到达中心机房时,首先访问的俄是反向代理服务器,如果反向代理服务器中存在着用户请求的资源,就直接返回给用户。

    使用CDN和反向代理服务器的目的都是尽早返回数据给用户:

    • 一方面加快用户访问速度
    • -另一方面减轻后端服务器的负载压力

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

    数据库经过读写分离后,从一台服务器拆分为两台,但随着网站业务的发展仍然不能满足需求,这时候需要使用分布式数据库。文件系统也需要使用分布式文件系统。

    分布式数据库是网站数据拆分的最后手段。只有在单表数据规模非常庞大的时候才使用。不到不得已时,更常用的手段是业务分库:将不同业务的数据库部署在不同的物理服务器上。

    使用NoSQL和搜索引擎

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

    NoSQL和搜索引擎都源自互联网,对可伸缩的分布式特性有更好的支持。

    应用服务器通过一个统一的数据访问模块访问各种数据,减轻应用程序管理诸多数据源的麻烦。

    业务拆分

    大型网站一般将网站业务分成不同的产品线。
    具体技术上,也会将一个网站拆分成多个不同应用,每个应用独立部署维护。应用之间通过首页的超链接建立关系,也可以通过消息队列进行数据分发。最多的还是访问同一个数据存储系统来构成完成系统。

    分布式服务

    抽取可复用的业务,独立部署,连接数据库。应用系统只需要管理用户界面,通过分布式服务调用共用业务服务完成业务操作。

    三、价值观

    网站的价值在于能够为用户提供什么价值,而不是它本身是怎么做的。网站很小的时候追求架构是舍本逐末。很多小网站十几年如一日使用LAMP(Linux+Apache+MySQL+PHP)。

    核心价值观

    大型网站架构技术的核心价值不是从无到有搭建大型网站,而是伴随业务发展,慢慢演化成一个大型网站。我们今天看到的大型网站,都是遵循着这种演化路线。

    主要驱动力

    主要驱动力是业务发展。业务成就技术,事业成就人,而不是相反。

    有些传统企业投身互联网,自己业务没有理清楚就从外面挖来高手,仿照互联网公司打造技术平台,无疑是缘木求鱼。而高手离开了熟悉的工作环境和工作模式,也无法发挥应有的能力。

    总之,有了业务和问题,才会出现解决问题的方法和技术。

    四、设计误区

    一味追求大公司解决方案

    淘宝就是这么搞的
    Facebook就是这么搞的

    为了技术而技术

    技术是为业务而存在的。

    企图用技术解决所有问题

    2012年年初12306技术故障事件后,各路专业人士和非专业人士纷纷发声,甚至有人提议写个开源网站。但其实鲜有人认识到12306的问题其实不在技术架构,而是业务架构:不应该在几亿中国人一票难求的情况下以窗口售票的模式在网上卖票(零点之后出售若干天之后的车票)。应该调整业务需求,换一种方式卖票,引入排队机制,分时段售票。

    技术只是解决业务问题的手段之一,不要忘了业务问题本身还是可以用业务手段解决。

    五、总结

    能够经历网站从小到大演化过程的架构师越来越少。小网站发展成大网站的机会本来就少,将来很可能就没有了。

    正因为如此,架构师更应该对这个过程的来龙去脉做深入了解,在技术选型和架构决策时有的放矢。

    相关文章

      网友评论

        本文标题:大型网站技术架构(一)演化

        本文链接:https://www.haomeiwen.com/subject/lqojcftx.html