架构师系列之技术选型
一:缓存
今天讲了三个部分
缓存东西多些,其他相对较少
缓存数据存储:hash 表
缓存关键指标
缓存命中率
键集合大小,键越小,可缓存的值就越多
缓存可使用内存空间
缓存对象生存时间,时间越短,命中率越低
缓存
代理缓存:代理服务器-代理用户上网的
反向代理缓存:代理数据对外输出的。有就返回,没有在访问服务
多层反向代理缓存
restful 天然 key,特别适合;post 提交无法缓存
内容分发网络 CDN
网络提供商的数据中心,离用户近,网络距离短
视频网站严重依赖 CDN
同时配置静态文件和动态内容
类型
通读缓存:缓存自己去读数据源
代理、反向代理、CDN 都是
旁路缓存
对象缓存,应用程序自己访问的
本地对象缓存
本地对象构建分布式缓存集群
远程分布式缓存对象
Memcached 分布式对象缓存
集群路由是关键点
hash:不稳定,增减节点数据移动大
一致性 hash:稳定,正常节点的数据不动,增减数据的仅涉及相邻节点
但是负载不均衡,每天机器存储的数据可能相差很大。
而且不能分担相隔很远的机器的压力
带有限负载的一致性哈希:平均分布到
带虚拟节点的一致性哈希:所有机器按照自己的能力去分
如何增减服务器
通常会询问缓存是否存储,不存在则访问数据库,并写入旁路缓存;存在直接返回
二:消息队列和异步架构
1:同步调用 VS 异步调用
2:消息队列构建异步调用架构:提升写的性能
点对点模型
发布订阅模型
3:消息队列的好处:
提升写的性能
削峰填谷
失败隔离和自我修复:生产者和消费者不受对方失败影响,完全解耦
4:时间驱动架构 EDA
5:MQ 产品比较
RabbitMQ:性能好,erlang 开发,社区
ActiveMQ:java 开发,跨平台
kafka:Scala 开发
ROcketMQ
三:负载均衡架构:如何将请求发给某台服务器
类型
1:HTTP 重定向负载均衡
两次 ip 请求,基本没人用;性能、单点等
2: DNS 负载均衡
3:反向代理负载均衡
nginx 小型的可以;大型的一般不用,转发的是 HTTP 请求,包可能大,转发效率性能低
4:数据链路层负载均衡:修改 ip 地址
算法
1:轮询
2:加权轮询
3:随机
4:最少选择
5:源地址散列--session 管理,所以没人用
session 管理
session 复制,被淘汰
session 绑定,hASH,不可行,没人用过。发布版本太快了
利用 cookie 记录 session:网络开销;客户端禁用;但是生命力强
session 服务器
四:分布式数据库
MYSQL 复制
主从复制
binlog 复制,存在不一致时间,读写分离。是为了保证系统性能,采用的读写分离的策略
主主复制
写的高可用
主主复制的不能并发写入,复制只增加并发读性能,并发写的性能并没有改变,更新表结构会导致巨大的同步延迟
评论