——来自《10分钟搞懂互联网系统演进规律:支撑亿级用户的架构都是这样来的!》数据库
互联网主要面对的技术挑战,用一句话归纳:就是用户不断上升产生的并发访问压力以及数据存储压力,因此系统须要更强的处理能力才能解决这些问题。后端
而系统处理能力提高,主要有两种途径:缓存
1.垂直伸缩:安全
提高单台服务器的处理能力,好比用更快频率的cpu,用更多核的cpu,用更大的内存,用更快的网卡,用更多的磁盘组成一台服务器,使单台服务器的处理能力获得提高,经过这种手段提高系统的处理能力。服务器
缺点以下:网络
a.当垂直伸缩达到必定程度之后,继续增长计算须要花费更多的钱。架构
b.垂直伸缩是有物理极限的,即便是大型机,也有本身的物理极限,它不可能无限地伸缩下去的。并发
c.操做系统的设计或者应用程序的设计制约着垂直伸缩,最多只能达到一个点没法继续提升。负载均衡
在大型互联网出现以前,传统的软件,好比银行、电信这些企业的软件系统,主要是使用垂直伸缩这种手段实现系统能力提高的,在服务器上加强,提高服务器的硬件水平。当某种类型的服务器能力提高到了瓶颈之后,就会用更强大的服务器,好比说从服务器升级到小型机,从小型机提高到中型机,从中型机提高到大型机,服务器愈来愈强大,处理能力愈来愈强大,固然价格也愈来愈昂贵,运维愈来愈复杂。运维
2.水平伸缩:
单机的处理能力并不提高,也不使用更昂贵的更快的更厉害的硬件,而是经过更多的服务器,将这些服务器构成一个分布式集群,经过这个集群,统一对外提供服务,以此来提升系统总体的处理能力。
水平伸缩优势:
a.只要架构合理,可以添加服务器到集群中,你的系统就是永远能够正常运行。
b.它没有极限,它的成本也不会说到了某个临界点就忽然增长。并且逐渐的增长服务器,得到相同的计算处理能力,只会比之前的服务器更便宜,不会更贵,由于硬件的价格老是在不断地降低的。
c.应用程序运行在一个服务器上,是为单一服务器而设计的,而增长服务器的话只是让程序部署在更多的服务器上,因此也不须要对应用程序进行太多的改变,应用程序不会受到硬件制约。
在互联网行业中多采用水平伸缩的手段。
应用程序、数据库、文件等全部的资源都集中在一台服务器上,典型案例:基于LAMP架构的PHP网站。
若是用户访问量愈来愈多,会致使性能愈来愈差,数据存储空间不足。
随着业务发展,单台服务器再也不知足需求,将应用和数据分离后成三台服务器(应用服务器、文件服务器和数据库服务器)。应用服务器须要处理大量的业务,所以须要更快更强大的CPU;数据库服务器须要快速磁盘检索和数据缓存,所以须要更快的磁盘和更大的内存;文件服务器须要存储大量用户上传的文件,所以须要更大的硬盘。
当用户访问巨大,会致使数据库压力太大,访问延迟,影响网站性能,用户体验差。
网站访问特色80%的业务访问集中在20%的数据上,所以能够经过使用缓存的方式,减小数据库的访问压力,提升网站的数据访问速度。缓存分为两种:缓存在应用服务器上的本地缓存和缓存在专门的分布式缓存服务器上的远程缓存。本地缓存访问速度快,但缓存数据量有限;远程分布式缓存可使用集群方式,容量不受限制。
单一应用服务器可以处理的请求链接有限,在网站访问高峰期,应用服务器会成为整个网站的瓶颈。
使用集群是网站解决高并发、海量数据问题的经常使用手段。改善系统性能,从而实现系统的可伸缩性。经过负载均衡调度服务器,能够将用户的访问请求分发到集群中的任何一台服务器上,使应用服务器的负载压力再也不成为网站的瓶颈。
网站在使用缓存后,绝大部分数据读操做访问均可以不经过数据库就能完成,但仍有一部分读操做(缓存访问不命中、缓存过时)和所有的写操做须要访问数据库,在网站的用户达到必定规模后,数据库由于负载压力太高而成为网站的瓶颈。
大部分主流数据库都提供主从热备功能,经过配置两台数据库主从关系,将一台数据库服务器的数据更新同步到另外一台服务器上。网站利用数据库的这一功能,实现数据库读写分离,从而改善数据库负载压力。
CDN和反向代理的基本原理都是缓存,区别在于CDN部署在网络提供商的机房,使用户在请求网站服务时,能够从距离本身最近的网络提供商机房获取数据;而反向代理则部署在网站的中心机房,当用户请求到达中心机房后,首先访问的服务器是反向代理服务器,若是反向代理服务器中缓存着用户请求的资源,就将其直接返回给用户。
使用CDN和反向代理的目的都是尽早返回数据给用户,一方面加快用户访问速度,另外一方面也减轻后端服务器的负载压力。
随着网站业务的发展,两台数据库服务器仍然没法知足需求,文件系统也同样。分布式数据库是网站数据库拆分的最后手段,只有在单表数据规模很是庞大的时候才使用。不到不得已,网站更经常使用的数据库拆分手段是业务分库,将不一样业务的数据库部署在不一样的物理服务器上。
随着网站业务愈来愈复杂,对数据存储和检索的需求也愈来愈复杂,网站须要采用一些非关系型数据库技术如NoSQL和非数据库查询技术如搜索引擎。NoSQL和搜索引擎都是源自互联网的技术手段,对可伸缩的分布式特性具备更好的支持。应用服务器则经过一个统一数据访问模块访问各类数据,减轻应用程序管理诸多数据源的麻烦。
经过分而治之的手段将整个网站业务分红不一样的产品线,如淘宝将首页、商铺、订单、卖家、买家等拆分红不一样的产品线,分归不一样的业务团队负责。各个应用之间能够经过创建一个超连接创建关系,也能够经过消息队列进行数据分发。
既然每个应用系统都须要执行许多相通的业务操做,好比用户管理、商品管理等,那么能够将这些共用的业务提取出来,独立部署。
大型网站架构技术的核心价值不是从无到有搭建一个大型网站,而是可以伴随小型网站业务的渐进发展,慢慢地演化成一个大型网站。
业务成就了技术,事业成就了人,而不是相反。
大公司的经验和成功模块值得学习借鉴,但不能盲从。
技术是为业务而存在的,除此毫无心义。
技术是用来解决业务问题的,而业务的问题,也能够经过业务的手段去解决。好比12306真正的问题其实不在于它的技术架构,而在于它的业务架构。