BAT架构师分享之:大型网站技术架构
cac55 2024-09-27 06:59 13 浏览 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识别。
- 网站安全漏洞扫描
相关推荐
- 终于,你可以在 iPhone 上玩《饥荒》了
-
继七月登陆iPad平台后,冒险生存游戏《饥荒》(Don'tStarve)经过两个月时间终于更新并适配了iPhone,此前我已就游戏在iPad上的表现写过详尽评测和上手攻略,故本文不再对游...
- 2025年最适合Macbook新手掌握的5个免费工具,效率立马飙升!
-
刚入手Macbook是否觉得操作不熟?担心新手期过长难以熟练提高效率?别担心!本文精选五款国区AppStore免费可下载的官方认证工具,所有选择均基于新手核心痛点与迁移成本考量,解决「系统维护」「操作...
- 苹果iOS 13.4和iPadOS 13.4正式更新,支持鼠标、键盘操作
-
智东西(公众号:zhidxcom)编|王颖智东西3月25日消息,苹果今天向用户推送了iOS13.4和iPadOS13.4系统更新通知。iPadOS13.4增加了对iPad鼠标和触控板的支持,...
- 苹果即将发布macOS 15 用户界面将迎来重大革新
-
苹果公司计划于6月举行的全球开发者大会(WWDC)上,震撼发布全新的macOS15操作系统。据CNMO最新报道,此次更新将彻底革新“菜单和应用程序用户界面”的排列方式,为用户带来全新的使用体验。ma...
- **Bartender 5:菜单栏管理神器**(菜单栏工具)
-
提供免费下载网站Mavom.cn**Bartender**让你可以隐藏、重新排列或移动菜单栏应用,保持桌面整洁。**主要功能:*****整理菜单栏应用**:随心所欲地隐藏或显示应用。***更新提醒...
- Mac用户必备!12款最实用的高效App,绝对值得收藏
-
作为一名数码博主,日常的工作不仅包括写文章,还涉及到大量的内容创作、视频编辑和资料管理。随着使用Mac的时间越来越长,我发现一台强大的Mac电脑,若没有合适的App加持,效果往往大打折扣。因此,我深入...
- 苹果电脑死机了按什么键(mac卡死按哪三个键)
-
苹果电脑以其卓越的性能和稳定的系统而闻名,但在使用过程中,偶尔也会遇到死机或应用程序无响应的情况。这时,掌握一些有效的强制重启或关闭方法就显得尤为重要。本文将详细介绍苹果电脑在死机时可以采取的几种处理...
- 怎么查看macbook硬盘是不是原装的
-
要查看MacBook的硬盘是否是原装的,可以采取以下几种方法:###通过系统信息检查1.**查看设备信息**:打开苹果菜单栏中的“关于本机”选项,然后选择“存储”或“磁盘工具”。这将显示你电脑上已...
- 苹果MacBook一定要进行的6个设置|新手必备省电技巧
-
一、MacBook省电设置技巧1、电池偏好设置打开“系统偏好设置”,选择“电池”,选择第二项“电池”,不同的系统版本和机型在这个界面会有所差别。勾选“使用电池电源时使显示屏略暗一些”,勾选“优化电池充...
- 在 Mac 菜单栏也能控制 HomeKit 家居设备
-
想要控制家里的HomeKit设备,我们可以利用Apple官方的家庭App。但在Mac上,家庭App不能算得上好用,不像iOS可以从控制中心直接操作,在Mac上必须打开家庭A...
- 苹果手机里这个图标是什么意思?原来这是个监听器!一直都不知道
-
不知道大家最近都有没有关注iPhone的新消息呢?iPhone11出来之后,不少小伙伴都被圈粉啦!小编不得不说绿色的那款是真好看啊!当然不仅是好看,用过苹果手机的小伙伴都知道,苹果手机里有很多超好用的...
- 如何解决苹果电脑弹出本地项目钥匙串提示?
-
Mac电脑使用的时候,因为通过iCloud同步钥匙串,或者是修改本地账户密码,会反复弹出某项目想要登录使用“钥匙串”的提示,且无法关闭的现象。那我们该如何解决呢?快和小编一起来看看吧!具体方法如下1....
- MAC小技巧:如何快速调整Dock栏的大小
-
苹果mac系统dock栏怎么缩小?想要自己调节一下dock栏的大小,该怎么调节呢?下面我们就来看看详细的苹果Mac电脑如何快速调整Dock栏的大小样式教程,需要的朋友可以参考下。1、在Dock栏右侧,...
- 新买了苹果电脑不会用?给小白的使用手册,MacOS入门必备
-
咱们很多小伙伴都是十几年甚至二十几年的Windows老用户了,如果换成苹果电脑,可能会一脸懵逼,一时间不知道怎么使用。毕竟苹果电脑搭载的是MacOS操作系统,除了系统界面和操作上有区别外,电脑键盘上有...
- 苹果macOS 15设置界面将迎来重大更新 更智能更美观
-
【CNMO科技消息】苹果计划在6月WWDC全球开发者大会上震撼发布macOS15。据CNMO了解,此次更新将彻底革新“菜单和应用程序用户界面”的排列方式。macOSVentura系统中的“系统设置...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- 如何绘制折线图 (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)