《大型网站技术架构——核心原理与案例分析》第1章:大型网站架构演化

架构演进面临的挑战及解决思路

——来自《10分钟搞懂互联网系统演进规律:支撑亿级用户的架构都是这样来的!》数据库

互联网主要面对的技术挑战,用一句话归纳:就是用户不断上升产生的并发访问压力以及数据存储压力,因此系统须要更强的处理能力才能解决这些问题。后端

而系统处理能力提高,主要有两种途径:缓存

1.垂直伸缩安全

提高单台服务器的处理能力,好比用更快频率的cpu,用更多核的cpu,用更大的内存,用更快的网卡,用更多的磁盘组成一台服务器,使单台服务器的处理能力获得提高,经过这种手段提高系统的处理能力。服务器

缺点以下:网络

a.当垂直伸缩达到必定程度之后,继续增长计算须要花费更多的钱。架构

b.垂直伸缩是有物理极限的,即便是大型机,也有本身的物理极限,它不可能无限地伸缩下去的。并发

c.操做系统的设计或者应用程序的设计制约着垂直伸缩,最多只能达到一个点没法继续提升。负载均衡

在大型互联网出现以前,传统的软件,好比银行、电信这些企业的软件系统,主要是使用垂直伸缩这种手段实现系统能力提高的,在服务器上加强,提高服务器的硬件水平。当某种类型的服务器能力提高到了瓶颈之后,就会用更强大的服务器,好比说从服务器升级到小型机,从小型机提高到中型机,从中型机提高到大型机,服务器愈来愈强大,处理能力愈来愈强大,固然价格也愈来愈昂贵,运维愈来愈复杂。运维

2.水平伸缩

单机的处理能力并不提高,也不使用更昂贵的更快的更厉害的硬件,而是经过更多的服务器,将这些服务器构成一个分布式集群,经过这个集群,统一对外提供服务,以此来提升系统总体的处理能力。

水平伸缩优势:

a.只要架构合理,可以添加服务器到集群中,你的系统就是永远能够正常运行。

b.它没有极限,它的成本也不会说到了某个临界点就忽然增长。并且逐渐的增长服务器,得到相同的计算处理能力,只会比之前的服务器更便宜,不会更贵,由于硬件的价格老是在不断地降低的。

c.应用程序运行在一个服务器上,是为单一服务器而设计的,而增长服务器的话只是让程序部署在更多的服务器上,因此也不须要对应用程序进行太多的改变,应用程序不会受到硬件制约。

在互联网行业中多采用水平伸缩的手段。

1、大型网站软件系统的特色

  1. 高并发、大流量:PV量巨大
  2. 高可用:系统7*24小时不间断服务
  3. 海量数据:文件数目巨大
  4. 用户分布普遍,网络状况复杂:运营商网络难互通
  5. 安全环境恶劣:黑客攻击
  6. 需求快速变动,发布频繁:快速适应市场,知足用户需求
  7. 渐进式发展:慢慢地运营出大型互联网站

2、大型网站架构演化发展历程

2.一、初始阶段的网站架构

应用程序、数据库、文件等全部的资源都集中在一台服务器上,典型案例:基于LAMP架构的PHP网站。

 

若是用户访问量愈来愈多,会致使性能愈来愈差,数据存储空间不足。

2.二、应用服务和数据服务分离

随着业务发展,单台服务器再也不知足需求,将应用和数据分离后成三台服务器(应用服务器、文件服务器和数据库服务器)。应用服务器须要处理大量的业务,所以须要更快更强大的CPU;数据库服务器须要快速磁盘检索和数据缓存,所以须要更快的磁盘和更大的内存;文件服务器须要存储大量用户上传的文件,所以须要更大的硬盘。

当用户访问巨大,会致使数据库压力太大,访问延迟,影响网站性能,用户体验差。

2.三、使用缓存改善网站性能

网站访问特色80%的业务访问集中在20%的数据上,所以能够经过使用缓存的方式,减小数据库的访问压力,提升网站的数据访问速度。缓存分为两种:缓存在应用服务器上的本地缓存和缓存在专门的分布式缓存服务器上的远程缓存。本地缓存访问速度快,但缓存数据量有限;远程分布式缓存可使用集群方式,容量不受限制。

单一应用服务器可以处理的请求链接有限,在网站访问高峰期,应用服务器会成为整个网站的瓶颈。

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

使用集群是网站解决高并发、海量数据问题的经常使用手段。改善系统性能,从而实现系统的可伸缩性。经过负载均衡调度服务器,能够将用户的访问请求分发到集群中的任何一台服务器上,使应用服务器的负载压力再也不成为网站的瓶颈。

2.五、数据库读写分离

网站在使用缓存后,绝大部分数据读操做访问均可以不经过数据库就能完成,但仍有一部分读操做(缓存访问不命中、缓存过时)和所有的写操做须要访问数据库,在网站的用户达到必定规模后,数据库由于负载压力太高而成为网站的瓶颈。

大部分主流数据库都提供主从热备功能,经过配置两台数据库主从关系,将一台数据库服务器的数据更新同步到另外一台服务器上。网站利用数据库的这一功能,实现数据库读写分离,从而改善数据库负载压力

2.六、使用反向代理和CDN加速网站响应

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

使用CDN和反向代理的目的都是尽早返回数据给用户,一方面加快用户访问速度,另外一方面也减轻后端服务器的负载压力。

2.七、使用分布式文件系统和分布式数据库系统

随着网站业务的发展,两台数据库服务器仍然没法知足需求,文件系统也同样。分布式数据库是网站数据库拆分的最后手段,只有在单表数据规模很是庞大的时候才使用。不到不得已,网站更经常使用的数据库拆分手段是业务分库,将不一样业务的数据库部署在不一样的物理服务器上。

2.八、使用NoSQL和搜索引擎

随着网站业务愈来愈复杂,对数据存储和检索的需求也愈来愈复杂,网站须要采用一些非关系型数据库技术如NoSQL和非数据库查询技术如搜索引擎。NoSQL和搜索引擎都是源自互联网的技术手段,对可伸缩的分布式特性具备更好的支持。应用服务器则经过一个统一数据访问模块访问各类数据,减轻应用程序管理诸多数据源的麻烦。

2.九、业务拆分

经过分而治之的手段将整个网站业务分红不一样的产品线,如淘宝将首页、商铺、订单、卖家、买家等拆分红不一样的产品线,分归不一样的业务团队负责。各个应用之间能够经过创建一个超连接创建关系,也能够经过消息队列进行数据分发。

2.十、分布式服务

既然每个应用系统都须要执行许多相通的业务操做,好比用户管理、商品管理等,那么能够将这些共用的业务提取出来,独立部署。

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

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

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

3.二、驱动大型网站架构技术发展的主要力量是网站的业务发展

业务成就了技术,事业成就了人,而不是相反。

4、网站架构设计误区

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

大公司的经验和成功模块值得学习借鉴,但不能盲从。

4.二、为了技术而技术

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

4.三、企图用技术解决全部问题

技术是用来解决业务问题的,而业务的问题,也能够经过业务的手段去解决。好比12306真正的问题其实不在于它的技术架构,而在于它的业务架构。

相关文章
相关标签/搜索