高性能架构
关注点 性能指标,性能测试,性能优化
具体优化内容如概述所示
如何合理使用缓存
1. 读写比再2:1 以上
2. 没有热点的访问
3. 数据的不一致以及脏读 缓存达到失效时间,才能从数据库中重新加载
4. 缓存可用性 一旦缓存奔溃,请求会直接打到db 引起雪崩
5. 缓存预热
6. 缓存穿透 恶意攻击 并发请求不存在的缓存数据,有可能引起mysql打挂策略是针对null值也进行缓存预热
分布式缓存架构
采用redis 高性能 功能丰富 高可用部署 持久化方式
redis 集群的3种方式 主从,哨兵,cluster
cluster redis存储不同的内容,通过节点互连来保证数据传输,当节点大多数失败的时候,集群才会失败。集群有16000+的slot 寻找每个key在哪个slot中 通过crc函数来确定key落在哪个机器上,从而保证高可用
为了保证每个节点的高可用,可在每个节点挂载几个从服务使用哨兵来监控
高可用方案 master/slaver复制, RDB快照持久
实践
性能优先的关闭复制,aof 和快照
master 关闭rdb/aof,开启master/slaver
slaver 开启rdb/aof
开启复制或者持久 预留1倍空间
多实例时,一次执行bgsave 避免fork进程
故障切换
- 当1出现故障时
- config server 根据error log 等等查出是master发生故障, 需要进行master/slaver切换
- 通知slave 修改配置信息
- 每个app连到新的master并发送请求
- 根据analysis 工具分析出原master已经没有任何app连接之后,通知config server
- 将slave 切换成master
- 如果原master恢复成活,则将其变成新master 的slaver
分布式方案
codis集群方案:
codis用途 codis是用来服务redis集群的方案。作用是充当客户端到redis集群的中间件
codis 分为四个部分 codis-proxy codis-dashboard codis-server zookeeper/etcd
原理:
codis 一共有1024个slot ,当redis 发现内存不足的时候,codis 会 crc() /1024 找到对应的slot 将slot 指向不同的redis 实例 这样就实现了扩容
自动均衡策略 codis会在闲时监控 slot 是否平衡 然后会自动进迁移
reids迁移速度 并行迁移 非常快
槽位同步:
通过zookeeper 来进行同步管理 当config 发生变化时,zookeeper能够感知并提醒codis-server 进行槽位同步
3.0之前的是用 pre-sharding + client-side-routing(用户侧路由) 做分布式方案
3.0之后用redis cluster
pre-sharding 节点部署初期,就提前考虑日后的存储规模,建立足够多的实例(如128个节点)
原理:
有n台主机 m个实例 那总实例= n*M
当业务低的时候 n少 m多
当业务高得时候 n多m少 这样能保证总实例不变 但是性能能够提升
理论:
一台机器部署多个实例,当容量不够的时候将其中实例拆分到不同的机器上
拆分过程:
- 在新机器上启动对应的redis实例
- 配置新端口为待迁移端口的从库
- 复制完成后,切换所有客户端到新的从库端口
- 将其从库晋升为主库
- 移除老端口实例
- 重复以上过程保证所有端口都迁移成功
单点故障问题
也是高可用的解决方案 master/slaver集群的设定 主备切换
如何做容量管理
cpu不是瓶颈,io跟内存才是
设置maxmemory跟阈值报警
设置缓存策略
设置合理过期时间
什么是缓存策略(查看redis 缓存设计以及常用问题)
高可用架构
关注点 可用度度量与考核 基本架构也是3层架构 应用,服务,数据层
通过负载均衡进行无状态服务的失效转移
高可用策略
1. 分级管理
2. 超时设置
3. 异步调用
4. 服务降级
5. 幂等性设计
数据高可用存储
含义:
数据持久性
数据可访问性
数据一致性
如何实现
1.数据备份
2.失效转移机制
CAP理论
一个提供数据的存储服务无法同时满足数据可用性,数据一致性,分区可伸缩性这3个特点
现象:当前大多数的分布式系统满足 分区可伸缩性以及数据高可用性,但是由于集群的增加,出现故障的概率增加,导致很难实现每个节点在任何瞬间都能保持数据的一致性 其就是保证a p,不保证c
伸缩性架构
关注点 2类方式 不同服务器部署不同的服务 二是不同的服务器部署相同的服务集群
根据业务 可以分成水平拆分跟垂直拆分
核心在于负载均衡
负载均衡在各个网络层级中都有不同的做法
- http重定向负载均衡
- dns域名解析负载均衡 根据A记录来进行负载均衡
- 反向代理(nginx)
- ip+端口负载均衡(lvs)
mysql 主从读写分离,分库分表 cobar 集群 迁移采用一致性hash
Hbase 依赖HRegion 以及分布式系统HDFS实现
可拓展架构
利用分布式消息队列降低系统耦合度
-
利用分布式服务打造可复用的业务平台
解决方案 拆分 模块独立部署 纵横拆分
web service 打造分布式服务平台
大型网站分布式服务的需求以及特点
负载均衡
失效转移(节点不可用 立即切换到可用的节点上)
远程通信
整合异构系统
马克思的劳动价值理论
产品的内在价值在于劳动的时间,劳动的时间不在于个体付出的劳动时间,而在于行业一般劳动时间
网站的安全架构
xss攻击 cross site script
csrf攻击 cross site request forgery 跨站请求伪造 利用用户的cookie或者session 来已用户的身份来伪造请求