一、大型网站架构的演化过程
什么样的网站才算是大型网站?
大型网站的特点:
- 高并发、大流量:需要面对高并发用户,大流量访问。
- 高可用:需要7 x 24小时不间断服务。
- 海量数据:数据需要存储、管理,需要大量服务器。
- 用户分步广泛、网络情况复杂:全球网络复杂,像国内还有各个运营商网络互通难的问题。
- 安全环境恶劣:互联网开放性,使得网站易受到攻击。
- 需求快速变更,发布频繁:快速迭代。
- 渐进式发展:从小网站开始,逐渐发展成大站点。
大型网站的主要技术挑战
庞大的用户,高并发的访问和海量数据。任何简单业务在处理PB级数据或数以亿计的用户时,问题就会变得棘手。
大型网站架构的演化过程
初始阶段的网站架构
初始阶段:1台服务器,部署应用程序和数据库,并访问本地文件。【1台服务器什么都干】
大多数小项目的初期架构都是这样。随着网站业务发展,1台服务器无法满足需求:用户越来越多,网站性能越来越差,越来越多的数据导致存储空间不足。
应用、数据库、文件分离
应用服务与数据服务分离:提高性能,解决存储问题。【服务器专用化】
应用服务器:处理业务,要求CPU强
文件服务器:存储文件,要求存储容量大
数据库服务器:存储数据、缓存、磁盘检索,要求内存、硬盘速度快
随着用户量增多,数据库压力大,会成为系统瓶颈。
用缓存改善网站性能
二八定律:80%的业务访问20%的数据。所以常用数据放入缓存,可以减少数据库的压力。
缓存分为两种:
- 本地缓存:访问更快,但受应用服务器内存限制,且会出现和应用程序争用内存的情况。【比如EhCache、Guava等】
- 分布式缓存:集群方式,专用服务器作为缓存服务器,理论上不受内存容量限制。【比如Redis】
目前只有单个应用服务器,且只部署了一个实例,其能够处理的连接数有限,在网站访问高峰期时,应用服务器会变成瓶颈。
使用应用集群改善网站的并发能力
一台服务器的处理能力不足时,不要考虑去换更强大的服务器,对于大型网站而言,不管多么强大的服务器,都满足不了网站持续增长的业务需求。最好的方式是添加更多的服务器来分担原有服务器的访问。
数据库读写分离
数据库还存在的的问题:使用缓存后,依然会有部分读操作(缓存没有命中,缓存过期等)和所有的写操作需要访问数据库。在网站用户达到一定规模后,数据库依然会因为负载较高成为系统瓶颈。
解决办法:采用数据库读写分离,两台数据库配置主从关系,从主库写数据,从从库读数据,主库的数据会同步到从库中。为了便于应用程序能够透明地访问读写分离的数据库,所以在应用程序中使用专门的数据访问模块。【比如MySQL主从】
使用反向代理缓存和CDN加速网站响应:网络环境复杂,缓存前端静态资源
请求访问存在的问题:随着网站持续的发展,发现不同网络环境的用户访问速度不同。
解决办法:使用反向代理缓存和CDN加速网站响应。
CDN和反向代理的基本原理:都是缓存,区别在于CDN部署在网络提供商的机房,使用户在请求网站服务时,可以从距离自己最近的网络提供商机房获取数据;而反向代理则部署在网站的中心机房中,从用户请求达到中心机房后,首先访问的服务器是反向代理服务器,如果反向代理服务器中缓存着用户请求的资源,就将其直接返回给用户。
CDN和反向代理的目的:尽早返回数据给用户,一方面加快用户访问速度,另一方面减轻应用服务器的负载压力。
使用分布式文件系统和分布式数据库系统
随着网站业务发展,原有读写分离的数据库也不能支撑。另外,原有的文件服务器也无法满足需求了。
这时,需要使用分布式数据库和分布式文件系统。【比如MySQL Cluster、FastDFS分布式文件系统】
分布式数据库是网站数据库拆分的最后手段,只有在单表数据规模非常庞大时才使用。
网站更常用的数据库拆分手段是业务分库,将不同的业务数据部署在不同的物理服务器上。
使用NoSQL和搜索引擎
随着业务越来越复杂,对数据存储和检索的需求也越来越复杂,网站需要采用NoSQL和非数据库查询技术比如搜索引擎(ElasticSearch、Solr等)。
业务拆分(分治)
网站过于复杂,将业务拆分。比如商城拆分为首页、店铺、订单、买家、卖家等产品线,归不同的业务团队负责。具体到技术,也会根据产品线划分,将一个网站拆分为多个应用,每个应用独立部署维护。应用之间可以通过一个超链接建立关系(在首页的导航链接指向不同的应用地址),也可以通过消息队列进行数据分发,当然最多的还是通过访问同一个数据存储系统来构成一个关联的完整系统。
分布式服务
业务拆分越来越小,存储系统越来越大,应用系统整体复杂度呈指数型增加,部署维护越来越困难。由于所有应用都需要连接数据库,在数万台服务器的情况下,数据库连接会资源不足。
既然每个应用系统都需要相同的业务操作,比如用户管理、商品管理等,可以把这些共用业务抽取出来,独立部署。【此处并不能很好的理解?只是提取通用的,就能解决吗?这里表述的是不是微服务的意思呢?】
一、大型网站架构的演化过程相关推荐
- 大型网站架构体系的介绍
一.前言 一个成熟的大型网站(如淘宝.天猫.腾讯等)的系统架构并不是一开始设计时就具备完整的高性能.高可用.高伸缩等特性的,它是随着用户量的增加,业务功能的扩展逐渐演变完善的,在这个过程中,开发模式. ...
- 大型网站架构演化历程
http://www.hollischuang.com/archives/728 本文内容大部分来自<大型网站技术架构>,这本书很值得一看,强烈推荐. 大型网站系统的特点 高并发,大流量 ...
- (转)大型网站架构演化发展历程
前面已经描述了大型网站系统的特点,而对一个大型网站系统,其架构也是重要的一个环节. 大型网站技术主要的挑战来自于庞大的用户.高并发以及海量的数据这三个方面.大型网站的形成就像一颗大树的成长,历尽长时间 ...
- 《大型网站技术架构》读书笔记一:大型网站架构演化
来源:http://www.cnblogs.com/edisonchou/p/3773891.html 此篇已收录至<大型网站技术架构>读书笔记系列目录贴,点击访问该目录可获取更多内容. ...
- 2.大型网站架构演化的价值观
这个世界没有哪个网站从诞生起就是大型网站:也没有哪个网站第一次发布就拥有 庞大的用户,高并发的访问,海量的数据:大型网站都是从小型网站发展而来.网站的 价值在于它能为用户提供什么价值,在于网站能做什么 ...
- 1. 大型网站架构演化
如果把上世纪90年代初CERN正式发布Web标准和第一个Web服务的岀现当做互 联网站的开始,那么互联网站的发展只经历了短短20多年的时间.在20多年的时间里, 互联网的世界发生了巨大变化,今天,全球 ...
- 读《大型网站技术架构:核心原理与案例分析》第一章:大型网站架构演化
写在前面 从开始写代码到现在,已经做了好几个项目了,BS和CS的都有,一直都以一个码农自居.但,作为一个进步的程序员,都有一个成为架构师的理想.于是,在平时的工作中,也积极的去看各种书籍,看园子里面的 ...
- 大型网站架构演化(一)——初始阶段的网站架构
大型网站的技术挑战主要来自于庞大的用户,高并发的访问和海量的数据,任何简单的业务一旦需要处理数以P计的数据和面对数以亿计的用户,问题就会变得很棘手.大型网站架构主要是解决这类问题. 大型网站都是从小型 ...
- 一文讲透大型网站架构模式核心原理与案例分析
什么是模式?每一个模式描述了一个在我们周围不断发生的问题及该问题解决方案的核心.这样,你就能一次又一次地使用该方案而不必做重复的工作. 也许互联网产品不是随便复制就能成功的,创新的产品更能为用户创造价 ...
最新文章
- CPU使用率的几个重要指标含义列举
- 如何使用点击超链接的方式打开Android手机上的应用
- ios fixed定位后内容不显示_HTMLCSS学习笔记(七)-- 定位与锚点
- dijkstra伪代码翻译java,Dijkstra算法的伪代码和C语言版本,还是模版
- 微信小程序-腾讯地图显示偏差问题
- linux远程登录失败锁定,登录失败锁定策略配置登录超时策略禁用root远程登录脚本...
- 金蝶显示服务器不是有效,金蝶 服务器不是有效的 请重新设置
- 如何获取CSDN积分?
- css摇杆,【宅家呗专题】Virtual Joystick虚拟摇杆插件教程
- iOS 封装Healthkit
- Java使用Thumbnails实现图片指定大小压缩
- 尚硅谷SpringCloud2020简单学习记录(个人用)65-73集
- python发送文件_利用python传送文件
- 吃桃子削不削皮 如何吃有保证
- 从零开始开发微信小程序(四):微信小程序绑定系统账号并授权登录之后台端...
- ABAP SY-SUBRC含义
- 《精通python设计模式》读书笔记之——结构型设计模式
- 华为又收天才少女,进华为的标准是什么?
- 企业微信应用程序开发WeChatAPI
- android电池管理系统
热门文章
- C# WeChat聊天软件实例(WPF+WebSocket+WebApi+EntityFramework)
- HTML5开发移动web应用—JQuery Mobile(1)
- 如何使用Arduino Web服务器连接ENC28J60以太网模块
- mysql 连接配置
- 简单题目:给出一个整数,转换为16进制的字符
- WMS仓库管理系统模块分析
- 三星gtn8010安卓7_三星GT-N8010刷机教程
- 大学英语六级考试2022年6月真题|9:00
- 【案例教程】山洪径流过程模拟及洪水危险性评价技术
- Java jar 命令行运行程序如何引用第三方依赖包