写点什么

架构师系列之技术选型

用户头像
东哥
关注
发布于: 2020 年 07 月 08 日
架构师系列之技术选型

一:缓存

今天讲了三个部分

缓存东西多些,其他相对较少


缓存数据存储: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 复制,存在不一致时间,读写分离。是为了保证系统性能,采用的读写分离的策略

主主复制

写的高可用

主主复制的不能并发写入,复制只增加并发读性能,并发写的性能并没有改变,更新表结构会导致巨大的同步延迟


用户头像

东哥

关注

还未添加个人签名 2018.03.25 加入

还未添加个人简介

评论

发布
暂无评论
架构师系列之技术选型