目录sql
高并发,大流量
: 须要面对高并发用户,大流量访问,Google日均PV数为35亿,日均IP访问数为3亿,2011年腾讯QQ最大用户在线数1.4亿,淘宝2012年双11活动一天交易额191亿,活动开始第一分钟独立访问用户达1000万数据库
拓展: PV、UV、IV的概念缓存
PV: PV访问量(Page View),即页面访问量,每打开一次页面PV计数+1,刷新页面也是。安全
UV: UV访问数(Unique Visitor)指独立访客访问数,一台电脑终端为一个访客。服务器
IV: IV是IP访问数指独立IP访问数,计算是以一个独立的IP在一个计算时段内访问网站计算为1次IP访问数。在同一个计算时段内无论这个IP访问多少次均计算为1次。计算时段有以1天为一个计算时段,也有以1个小时为一个计算时段。网络
高可用
: 7 * 24小时不间断提供服务。大型网站的宕机通常会成为焦点,例如2010年百度域名被黑客劫持事件,双11淘宝宕机事件,12306网站并发数太高的宕机事件,微博流量明星宕机事件。架构
海量数据
: 须要存储管理海量的数据,同时须要大量服务器,Facebook 每周上传的照片数目接近10亿,百度收录的网站有百亿,Google有接近百万台服务器为全球用户提供服务。并发
用户分布普遍,网络状况复杂
:许多大型互联网公司都是为全球用户提供服务,各地网络状况千差万别,在国内,还有各个运营商网络互通难的问题,而中美光缆的数次故障,也让不少互联网公司不得不考虑在海外创建数据中心。负载均衡
安全环境恶劣
: 因为互联网的开放性,使大型互联网公司更易遭到黑客的攻击,例如facebook用户泄漏事件。
nosql
需求快速变动,发布频繁
: 和传统的企业级应用不一样,互联网公司为快速适应市场,知足用户需求,其产品发布频率是极高的。至于中小型互联网公司的发布频率,那就更高了,有时候一天会发布十几回
渐进式发展
: 与传统行业一开始规划好所有的功能和非功能的需求不一样,不少大型互联网公司都是从小公司开始作起,渐进的发展起来的。Facebook的创始人扎克伯克在哈佛的宿舍开发出来的,阿里巴巴是诞生在马云家的客厅的,好的互联网产品都是迭代出来的,不是一开始就发展的很好的。
大型网站都是从小型网站发展起来的,网站架构也是同样,网站刚开始搭建处于雏形阶段,访问量小,一台服务器彻底够用,也是大部分企业级应用的选择
应用程序,数据库,文件都部署在一台服务器的,一般服务器选用Linux,应用程序选用PHP,而后部署在Apache 上,数据库使用MySQL,聚集各类开源软件以及一架廉价的服务器就能够进行开发
随着业务的发展,一台服务器不能知足业务需求:愈来愈多的用户访问致使性能愈来愈差,愈来愈多的数据致使服务器存储空间不足,这就须要将应用和数据分离。应用和数据分离后整个网站使用三台服务器,应用服务器,文件服务器,数据库服务器
应用和数据分离后,不一样特性的服务器承担不一样的服务角色,网站的并发处理能力和数据存储都获得了很大的改善,支持业务的进一步发展。可是随着业务的增多,访问量增大,网站又一次面临挑战,数据库压力太多致使访问延迟,进而影响整个网站的性能,用户体验收到影响
网站访问特色和现实世界的财富分配一般符合二八定律: 80%的业务访问集中在20% 的数据上,淘宝买家浏览的商品集中在少部分红交数多、评价良好的商品上;百度搜索的关键词集中在少部分热门词汇上,搜索出来的词条你也会浏览前两页的内容。
既然大部分的浏览都只会放在一小部分数据上,那么是否能把这些数据缓存起来放在内存中,是否是就能够减小数据库的压力,从而提升整个网站的数据访问速度,改善数据库的写入性能了呢?
网站的缓存分为两种
: 缓存在本地服务器
上的本地缓存,缓存在远程服务器
上的远程缓存,本地缓存的访问速度要比远程缓存的更快。可是受应用服务器的内存限制,每每会存在本地缓存和应用程序竞争内存的状况,这种状况在远程服务器
上就不会存在,远程分布式缓存可使用集群的方式,部署大内存的服务器使用专门的缓存服务器,理论上能够作到不受内存限制的缓存服务
使用缓存后,有效的改善了数据库访问的压力,可是单一应用程序的服务器可以处理的链接有限,在网站访问的高峰期间,应用服务器会成为网站的瓶颈
使用集群是解决高并发,海量数据问题的关键手段,当一台服务器的处理能力、存储空间不足的时候,不要尝试去更换一台存储量更大的服务器,而是考虑集群
部署,由于对于大型网站而言,无论多么强大的服务器,都知足不了网站持续增加的业务。
应用服务器集群部署,使用负载均衡服务器作负载控制,可以改善流量峰值对应用服务器的压力,避免单一服务器承担更多的请求压力。若是还有更多的请求,那么就在现有的基础上增长更多的应用服务器。
使用缓存后,可以改善一部分的数据库访问压力,使绝大多数数据读操做访问不用经过数据库就能完成,可是仍有一部分读(缓存访问不命中,缓存过时)和所有的写操做都会直接访问数据库,在网站到达必定的规模后,也会增大数据库的压力
目前大部分主流数据库都提供主从热备功能,经过配置两台数据库搭建主从
关系,能够将一台数据库服务器的数据更新同步
到另外一台服务器上,网站能够利用这一特性,实现数据库的读写分离
的功能,从而改善数据库的压力。
应用在写数据的时候,访问主服务器,在读数据的时候,访问从服务器,主数据库经过主从复制的功能将数据同步更新到从服务器,这样当有读操做的时候,就会直接访问从服务器,当有写操做的时候,会直接访问主服务器,为了便于应用程序访问读写分离后的数据库,一般在应用服务器端使用专门的数据访问模块,使数据库读写分离对应用透明
随着网站规模不断扩大,用户规模愈来愈大,因为国内网络状况复杂,不一样地区的用户访问网站时,速度差异也极大。有研究代表,网站访问延迟和用户流失率正相关,网站访问越慢,用户的流失率越快,因此为了更好的用户体验,留住用户,网站须要更快的访问速度,主要手段有使用CDN和反向代理
CDN和反向代理的基本原理都是缓存,区别在于CDN部署在网络提供商的机房,使用户在请求网站服务时,能够从距离本身最近
的机房获取数据;而CDN则部署在网站的中心机房,当用户请求到达中心机房后,首先访问的服务器是反向代理服务器
,若是反向代理服务器缓存着资源,就会直接返回给用户
使用CDN的目的都是尽早返回数据给用户,一方面可以加快访问速度,一方面都能减轻服务器的压力
任何强大的单一服务器都知足不了大型网站持续增加的业务需求。数据库通过读写分离后,从一台服务器拆分红两台服务器,可是随着网站业务的发展不能知足业务的需求,须要使用分布式的存储服务器
,文件系统可以也是同样,须要使用分布式文件系统。
分布式数据库是网站数据库拆分的重要手段,只有在单表数据很是庞大的时候才使用。不到不得已时,网站最经常使用的数据库拆分手段是业务分库。将不一样业务的数据部署在不一样的服务器上。
随着网站业务的扩大,对数据存储和检索的要求也愈来愈高,网站须要采用一些非关系型数据库技术如NoSQL和非数据库查询技术和搜索引擎
NoSQL和搜索引擎都是源自互联网的技术手段,对可伸缩的分布式特性具备更好的支持。应用服务器则经过一个统一数据访问模块访问各类数据。减轻应用程序管理诸多数据源的麻烦
大型网站为了应对日益繁杂的业务场景,经过使用分而治之的方式将整个网站的业务拆分红不一样的产品线,如大型购物交易网站就会将首页、商铺、订单、买家、卖家等拆分红不一样的产品线,分归不一样的业务部门负责管理。
具体到技术上,也会根据产品线划分产品,将一个产品拆分红不一样的应用。每一个应用独立部署和维护,应用之间能够经过超连接简历关系,也能够经过消息队列
进行数据分发,固然最多的仍是经过访问同一个数据存储系统来构成一个关联的完整系统。
随着业务拆分愈来愈小,存储系统愈来愈大,应用系统的总体复杂度呈指数增加,部署愈来愈困难。因为全部的应用都要和数据库系统链接。在数万台服务器规模的网站中,这些链接的数目是服务器规模的平方。致使存数据库链接资源不足。拒绝服务。
既然每个应用系统都须要执行许多相同的业务操做,能够把相同的
业务提取出来。由这些可服用的业务链接数据库。提供公用业务服务。
大型网站演化到这里,基本上大多数的技术问题均可以解决,诸如跨数据中心的实时数据同步和具体网站业务相关的问题均可以经过组合改进现有的技术架构来解决。
大型网站
架构技术的核心价值不是从无到有
搭建一个大型的网站,而是可以伴随小型网站业务的逐步发展,慢慢演化成一个大型网站。在这个过程当中,不须要放弃什么,不须要推翻什么,技术选型都是很是重要的,全部的大公司例如FaceBook、Google、淘宝无不遵循这样一条发展路线
创新的业务发展模式对网站架构提出了更高的要求,才使得创新的网站架构得以发展成熟。是业务成就了技术,是事业成就了人。而不是相反。
1. 盲目追随大公司的解决方案
2. 为了技术而技术
3.企图用技术解决全部问题
文章来源
《大型网站技术架构:核心原理与案例分析》