BAT架构师分享之:大型网站技术架构
cac55 2024-09-27 06:59 20 浏览 0 评论
早期的网站为了节省成本一般会设计成集中式系统,应用程序、数据库等都部署在一台服务器上。 但随着业务的快速度发展,逐渐出现瓶颈,按一定原则**(应用拆分、服务拆分、数据拆分、应用解耦)**,向分布式系统转型,涉及到以下环节改造。
主要环节
- 业务拆分:将整个网站业务拆分成不同的应用,每个应用独立部署维护,应用之间通过RPC或消息队列通信。
- 集群化(应用服务器;基于RPC的微服务应用等)
- LVS负载均衡,负责将请求转发给不同业务集群
- 反向代理服务器,常用的如Nginx
- 应用服务器,servlet容器,如tomcat
- 应用和数据服务分离,分别部署在不同的服务器
- 后端应用合理分层,通常分为表现层或网关层、业务逻辑层、数据持久层
- 缓存。分为两种:本地缓存;分布式缓存
- CDN化。静态内容部署到CDN,就近获取,加速网站响应。
- 数据库读写分离。数据库采用主从热备,应用服务器在写数据时访问主数据库,主数据库通过主从复制机制将数据更新同步到从数据库。
- 分库分表,引入分布式数据框架
- 引入NoSQL,支持海量数据存储
- 借助elastics search等开源搜索引擎
- 异步化,系统解耦。
- 缩短业务流程,加快网站访问速度
- 消除并发访问高峰
架构五要素:
- 高性能
- 可用性(Availability)
- 伸缩性(Scalability)
- 扩展性(Extensibility)
- 安全性
1、高性能
性能的测试指标主要有:
- 响应时间:指应用执行一个操作需要的时间
- 并发数:指系统能够同时处理请求的数目
- QPS:指单位时间内系统处理的请求量
- 系统性能计数器:描述服务器或者操作系统性能的一些数据指标
性能优化,根据网站分层架构,可以分为三大类:
- Web 前端性能优化
- 减少 http 请求
- 使用浏览器缓存
- 启用压缩
- CSS 放在页面最上面,JavaScript 放在页面最下面
- 减少 Cookie 传输
- 应用服务器性能优化:主要手段有 缓存、集群、异步
- 多线程(设计为无状态,使用局部对象,并发访问资源使用锁)
- 资源复用(单例,对象池)
- 数据结构
- 异步操作(消息队列,削峰作用)
- 多台应用服务器组成一个集群共同对外服务,提高整体处理能力。
- 使用 CDN,将网站静态内容分发至离用户最近的网络服务商机房,使用户通过最短访问路径获取数据。可以在网站机房部署反向代理服务器,缓存热点文件,加快请求响应速度,减轻应用服务器负载压力
- 应用服务器端,可以使用服务器本地缓存和分布式缓存(网站性能优化第一定律:优化考虑使用缓存优化性能)
- 代码层面,也可以通过使用多线程、改善内存管理等手段优化性能。
- 数据库服务器端,索引、缓存、SQL 优化等性能优化手段
- NoSQL 数据库通过优化数据模型、存储结构、伸缩特性等
- 存储服务器性能优化
- 机械硬盘 vs. 固态硬盘
- B+ 树 vs. LSM 树
- RAID vs. HDFS
2、高可用
高可用的网站架构:目的是保证服务器硬件故障时服务依然可用、数据依然保存并能够被访问,主要手段数据和服务的冗余备份及失效转移
- 高可用的应用:显著特点是应用的无状态性
- 通过负载均衡进行无状态服务的失效转移
- 应用服务器集群的 Session 管理
- 高可用的服务:无状态的服务,可使用类似负载均衡的失效转移策略,此外还有如下策略
- 超时设置
- 异步调用
- 服务降级
- 限流
- 高可用的数据:主要手段是数据备份和失效转移机制
- 失效确认
- 访问转移
- 数据恢复
- 冷备:缺点是不能保证数据最终一致和数据可用性
- 热备:分为异步热备和同步热备
- 数据一致性(Consisitency)
- 数据可用性(Availibility)
- 分区耐受性(Partition Tolerance)
- CAP 原理
- 数据备份
- 软件质量保证
- 自动化测试
- 预发布验证
- 灰度发布
- 网站实时监控
- 警报系统
- 自动优雅降级
- 用户行为日志采集(服务器端和客户端)
- 服务器性能监控
- 监控数据采集
- 监控管理
3、伸缩性
大型网站需要面对大量用户的高并发访问和存储海量数据,不可能只用一台服务器就处理全部用户请求,存储全部数据。网站通过集群的方式将多台服务器组成一个整体共同提供服务。所谓伸缩性是指通过不断向集群中加入服务器的手段来缓解不断上升的用户并发访问压力和不断增长的数据存储需求。
衡量架构伸缩性的主要标准就是是否可以用多台服务器构建集群,是否容易向集群中添加新的服务器。加入新的服务器后是否可以提供和原来的服务器无差别的服务。集群中可容纳的总的服务器数量是否有限制。
对于应用服务器集群,只要服务器上不保存数据,所有服务器都是对等的,通过使用合适的负载均衡设备就可以向集群中不断加入服务器。
对于缓存服务器集群,加入新的服务器可能会导致缓存路由失效,进而导致集群中大部分缓存数据都无法访问。虽然缓存的数据可以通过数据库重新预热,但是如果应用已经严重依赖缓存,可能会导致整个网站崩溃。需要改进缓存路由算法保证缓存数据的可访问性。
关系数据库虽然支持数据复制,主从热备等机制,但是很难做到大规模集群的可伸缩性,因此关系数据库的集群伸缩性方案必须在数据库之外实现,通过路由分区等手段将部署有多个数据库的服务器组成一个集群。
至于大部分 NoSQL 数据库产品,由于其先天就是为海量数据而生,因此其对伸缩性的支持通常都非常好,可以做到在较少运维参与的情况下实现集群规模的线性伸缩。
概括起来伸缩性的分为如下几个方面:
- 应用服务器集群的伸缩性设计
- 轮询(Round Robin, RR)
- 加权轮询(Weighted Round Robin, WRR)
- 随机(Random)
- 最少链接(Least Connections)
- 源地址散列(Source Hashing)
- DNS 域名解析负载均衡
- 反向代理负载均衡(在 HTTP 协议层面,应用层负载均衡)
- IP 负载均衡(在内核进程完成数据分发)
- 数据链路层负载均衡(数据链路层修改 mac 地址,三角传输模式,LVS)
- 分布式缓存集群的伸缩性设计
- Memcached 客户端(包括 API,路由算法,服务器列表,通信模块)
- Memcached 服务器集群
- 分布式缓存的一致性 Hash 算法(一致性 Hash 环,虚拟层)
- 数据存储服务集群的伸缩性设计
- 关系数据库集群的伸缩性设计
- NoSQL 数据库的伸缩性设计
4、可扩展
系统架构设计层面的“开闭原则”,构建可扩展的网站架构
- 利用分布式消息队列降低耦合性
- 分布式消息队列
- 事件驱动架构(Event Driven Architecture)
- 利用分布式服务打造可复用的业务平台
- 分布式服务框架设计(Thrift,Dubbo)
- 可扩展的数据结构(如 HBase的 ColumnFamily 设计)
- 利用开放平台建设网站生态圈
5、网站的安全架构
XSS 攻击和 SQL 注入攻击是构成网站应用攻击最主要的两种手段,此外还包括 CSRF,Session 劫持等手段。
- 攻击与防御
- Error Code
- 表单 Token
- 验证码
- jsonp请求的,Referer 校验
- SQL 注入
- html 危险字符转义
- XSS 攻击:跨站点脚本攻击(Cross Site Script)
对js转义,使其失去执行功能,只作为纯字符串展示
- CSRF 攻击:跨站点请求伪造(Cross Site Request Forgery)
防范:httpOnly;增加token校验;通过Referer识别。
- 网站安全漏洞扫描
相关推荐
- Mac右键菜单如何设置?_mac 右键菜单
-
Mac的用户都知道,Mac和Windows很大的区别在于,Windows可以使用鼠标右键完成的很多快捷操作,例如右键剪切、右键新建文件、右键快速访问等等。在工作学习中,这种快捷操作会大大提高我们的工作...
- Office局部加密隐藏信息_office隐藏修改痕迹
-
除了日常使用的图片、音视频文件外,我们还常常和别人共享使用一些Word或Excel办公文件。而这些文件中的部分内容,也许是我们不希望别人看到的。这时,就需要对Word文档或Excel表格中的部分数据实...
- 不常见但100%好用的电脑快捷键_最全的电脑快捷键
-
办公人士或者经常使用电脑的人已经熟悉了常见的Ctrl+C/V等快捷键,想要更高效、专业的操作技巧来提升工作效率。接下来,同创双子双子IT运维工程师帮忙整理了一些不太常见但非常有用的快捷键。比如Alt+...
- U盘文件被隐藏怎么恢复 U盘文件恢复隐藏的方法
-
U盘文件被隐藏怎么恢复?U盘文件被隐藏其实这是中了一种U盘病毒,它会恶意的将U盘中的文件夹隐藏起来,采用常规的方法,都无法打开查看。这种U盘病毒会把文件夹的属性给篡改掉,文件设置被改成只读、隐藏,在文...
- win7查看隐藏的文件怎么操作 win7如何打开隐藏文件
-
win7查看隐藏的文件怎么操作?在使用电脑时,有一些用户会将文件设置为隐藏属性,以保护隐私。此外,还有一些系统文件默认处于隐藏状态。那么,如何操作才能打开这些隐藏文件呢?小编今天在这就为大家分享一下w...
- 系统小技巧:八个实用设置 藏于桌面右键
-
我们除了在桌面上执行鼠标单、双击操作外,常常也会用右键菜单命令查看文件或显示属性等。其实,除此之外,桌面里还隐藏着不少可被我们利用的实用右键操作项目。下面的这些Windows10桌面右键操作技巧,不...
- 移动硬盘中的隐藏文件如何恢复显示?可尝试这些方法
-
在使用移动硬盘的过程中,有时我们可能会遇到一些文件突然变得不可见或“隐藏”的情况。这种情况可能是由于多种原因造成的,如文件系统错误、病毒感染或误操作等。面对隐藏的文件,许多用户可能会感到困惑和不知所措...
- Win11怎么查看隐藏文件和文件夹?_如何查看windows隐藏文件夹
-
一般来说系统会对比较重要的文件和文件夹添加隐藏属性,很多朋友可能找半天都找不到,那么怎么找出这些隐藏文件和文件夹呢,今天系统之家小编来教大家Win11显示隐藏文件的设置方法,操作步骤其实挺简单的,希望...
- 隐藏电脑文件(夹)竟如此简单!再也不怕被偷窥了
-
导读:谁的电脑硬盘中还不存有一些珍藏多年的学习资料,可为了保护它们各位学习爱好者也真的是煞费苦心,不管是层层文件夹“套娃”隐藏也好,修改文件名甚至修改后缀名也好,效果都是非常差的,本期文章小君就聊一聊...
- 怎么打开隐藏文件夹?_文件夹怎么弄
-
有时在电脑上,我们会发现之前的文件或者文件夹不见了,很多人会觉得会不会是误删了文件之类的。其实还有一种可能,就是你的文件或者文件夹被隐藏起来了。怎么打开隐藏文件夹?一、文件或者文件夹被隐藏的原因隐藏是...
- 移动硬盘上的隐藏文件怎么能找出来
-
移动硬盘作为一种小巧而便携式的硬盘存储器,具备容量大、兼容性好、即插即用等优势,被广泛应用于办公和家庭生活中,那么在使用移动硬盘过程中,你是否遇到了文件被隐藏的问题呢?本文将介绍恢复移动硬盘隐藏文件的...
- 系统小技巧:“发送到”菜单问题巧解决
-
此前,我们已经通过本刊的一些文章熟悉了通过手动或软件的方法定制“发送到”菜单的基本方法。在使用“发送到”菜单的过程中,还可能会遇到一些问题。例如:“发送到”菜单越用越长,能不能在不编辑删减的情况下,调...
- WIN 10系统介绍(21) 重要文件的隐藏 私密文件的保护 显示隐藏文件
-
大家好,今天介绍电脑中重要文件和文件夹的隐藏以及显示。在每个人使用的电脑中,都有一些个人的私密的资料,比如一些账目,或者个人的照片,信件,技术文档,视频等等的一些资料。我们可能不希望所有登录的用户,都...
- 状态栏在哪?手机+电脑+软件里的它 一篇讲清位置和功能
-
状态栏就是设备或软件里显示状态信息的区域,能让你快速知道时间、电量等情况。下面告诉你不同设备和软件里状态栏在哪儿、有啥用。手机上的状态栏位置:屏幕最顶端的窄条,不管用什么APP,基本都在这儿。显示...
- excel隐藏的部分内容如何显示出来?3个方法帮助你!
-
excel隐藏的部分如何显示出来?你是否曾经在Excel中遇到过某些单元格被隐藏,或者某些数据在编辑时突然消失,让你感到困惑和无助?不要担心,今天我将向你揭示如何解决这些问题,让你轻松显示隐藏的部分。...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- 如何绘制折线图 (52)
- javaabstract (48)
- 新浪微博头像 (53)
- grub4dos (66)
- s扫描器 (51)
- httpfile dll (48)
- ps实例教程 (55)
- taskmgr (51)
- s spline (61)
- vnc远程控制 (47)
- 数据丢失 (47)
- wbem (57)
- flac文件 (72)
- 网页制作基础教程 (53)
- 镜像文件刻录 (61)
- ug5 0软件免费下载 (78)
- debian下载 (53)
- ubuntu10 04 (60)
- web qq登录 (59)
- 笔记本变成无线路由 (52)
- flash player 11 4 (50)
- 右键菜单清理 (78)
- cuteftp 注册码 (57)
- ospf协议 (53)
- ms17 010 下载 (60)