架构五要素
架构五要素
一般在做架构设计时,我们会关注以下五个要素:
- 高性能
- 高可用
- 伸缩性
- 扩展性
- 安全性
高性能
性能的测试指标主要有:
- 响应时间:指应用执行一个操作需要的时间
- 并发数:指系统能够同时处理请求的数目
- QPS:指单位时间内系统处理的请求量
- 系统性能计数器:描述服务器或者操作系统性能的一些数据指标
性能优化,根据网站分层架构,可以分为三大类:
Web前端性能优化
- 减少http请求
- 适用浏览器缓存
- 启用压缩
- 减少Cookie传输
应用服务器性能优化:缓存、集群、异步
- 多线程(设计为无状态,使用局部对象,并发访问资源使用锁)
- 资源复用(单例,对象池)
- 数据结构
- 异步操作(消息队列,削峰作用)
- 多台应用服务器组成一个集群共同对外服务,提高整体处理能力
- 使用CDN,将网站静态内容分发至里用户最近的网络服务器机房,使用户通过最短访问路径获取数据。可以在网站机房部署反向代理服务器,缓存热点文件,加快请求响应速度,减轻应用服务器负载压力
- 应用服务器端,可以使用服务器本地缓存和分布式缓存(网站性能优化第一定律:考虑使用缓存优化性能)
- 代码层面,通过使用多线程、改善内存管理等手段优化性能
- 数据库服务器端,索引、缓存、SQL优化等手段优化性能
- NoSQL数据库通过优化数据模型、存储结构、伸缩特性等
存储服务器性能优化
- 机械硬盘 vs 固态硬盘
- B+树 vs LSM树
- RAID vs HDFS
高可用
高可用的网站架构:目的是保证服务器硬件故障时服务依然可用、数据依然保存并能够被访问,主要手段有数据和服务的冗余备份及失效转移。
高可用的应用:
- 通过负载均衡进行无状态服务的失效转移
- 应用服务器集群的Session管理
高可用的服务:无状态的服务,可使用类似负载均衡的失效转移策略,此外还有如下策略
- 超时设置
- 异步调用
- 服务降级
- 限流
高可用的数据:主要手段是数据备份和失效转移机制
- 失效确认
- 访问转移
- 数据恢复
- 冷备:缺点是不能保证数据最终一致和数据可用性
- 热备:分为异步热备和同步热备
- 数据一致性(Consistency)
- 数据可用性(Availability)
- 分区容错性(Partition Tolerance)
- CAP原理
- 数据备份
软件质量保证
- 自动化测试
- 预发布验证
- 灰度发布
网站实时监控
- 警报系统
- 自动优雅降级
- 用户行为日志采集(服务端和客户端)
- 服务器性能监控
- 监控数据采集
- 监控管理
伸缩性
概括起来伸缩性分为如下几个方面:
应用服务器集群的伸缩性设计
- 轮询(Round Robin,RR)
- 加权轮询(Weighted Round Robin,WRR)
- 随机(Random)
- 最少链接(Least Connections)
- 源地址散列(Source Hashing)
- DNS域名解析负载均衡
- 反向代理负载均衡(在HTTP协议层里,应用层负载均衡)
- IP负载均衡(在内核进程完成数据分发)
- 数据链路层负载均衡(数据链路层修改mac地址,三角传输模式,LVS)
分布式缓存集群的伸缩性设计
- Redis集群
- 分布式缓存的一致性Hash算法(一致性Hash环,虚拟层)
数据存储服务集群的伸缩性设计
- 关系数据库集群的伸缩性设计
- NoSQL数据库的伸缩性设计
扩展性
系统架构设计层面的“开闭原则”,构建可扩展的网站架构。
利用分布式消息队列降低耦合性
- 分布式消息队列
- 事件驱动架构(Event Driven Architecture)
利用分布式服务打造可复用的业务平台
可扩展的数据结构(如HBase的ColumnFamily设计)
利用开放平台建设网站生态圈
安全性
XSS攻击和SQL注入时构成网站应用攻击最主要的两种手段,此外还包括CSRF,Session劫持等手段。
攻击与防御
Error Code
表单Token
验证码
Jsonp请求的,Referer校验
SQL注入
html危险字符转义
XSS攻击:跨站点脚本攻击(Cross Site Script)
对js转义,使其失去执行能力,只能作为纯字符串展示
CSRF攻击:跨站点请求伪造(Cross Site Request Forgery)
防范:httpOnly;增加token校验;通过Referer识别。
网站安全漏洞扫描
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 yupaits的博客!
评论