架构师训练营 Week5 技术选型 - 缓存 / 消息队列 / 负载均衡
Summary
课程进入第五周,同时参加了JAVA进阶一下子感觉时间占满了忙不过来。
怎么说呢,不知道外面的世界怎么样,一直在一个业务系统中做了很多年。工作中这三项技术都有用到,但是并没用的太好。经常被诟病性能问题,跟系统整体架构和业务设计也会有关。
缓存
业务中从前到后用到了,
浏览器缓存
缓存变量,
Cookie, localStorage
静态文件。与之相应的会涉及到http的请求 url/响应头文件。etag, last-modify-Since等属性。
后端缓存
JSP编译文件,jsp:include flush=true 会在每次请求时检查jsp有没有改动从而重新编译
,flush=false 可能就跟 html include一样了一直引用第一次编译的文件
本地内存,一般用静态的Map,List常量来实现的。通过定时器定时跟数据库同步重新加载,有时会通过请求url实时刷新某中条件的缓存。
分布式缓存
内部推荐的是Gemfire,课上老师对比了Redis 和Memcached 的区别. Gemfire和Redis或者其他缓存的对比有机会还是要分析下。
之前提到分布式一直想到的是加机器Duplicate,这次课才真正意识到分布式缓存的特点,缓存要分配到各个机器上。另外缓存的失效策略和重新加载,缓存数据结构的设计在具体业务实现中需要考虑。跟本地内存相比,缓存增加了网络开销
最后截取课程中的两张截图来总结其他部分
消息队列
主要分类
P2Pd点对点
Pub/Sub发布订阅
常用协议
AMQP: AMQP即Advanced Message Queuing Protocol,是应用层协议的一个开放标准,为面向消息的中间件设计。
STOMP: STOMP(Streaming Text Orientated Message Protocol)是流文本定向消息协议,是一种为MOM(Message Oriented Middleware,面向消息的中间件)设计的简单文本协议
XMPP: XMPP(可扩展消息处理现场协议,Extensible Messaging and Presence Protocol)是基于可扩展标记语言(XML)的协议,多用于即时消息(IM)以及在线现场探测。适用于服务器之间的准即时操作。核心是基于XML流传输,这个协议可能最终允许因特网用户向因特网上的其他任何人发送即时消息,即使其操作系统和浏览器不同。但XML编码格式占用带宽大。
JMS: JMS是基于JVM消息代理的规范,是对AMQP,MQTT,STOMP,XMPP等协议更高一层的抽象。
MQ产品对比
负载均衡
之前没注意一直是把负载均衡架构跟算法混为一谈的。
负载均衡算法/策略
轮询法
随机法
源地址哈希法
加权轮询法 针对后台服务器性能不均
加权随机法,针对后台服务器性能不均
最小连接数法, 根据后台服务器积压的连接数分配给最少挤压服务其
负载均衡架构/分类
HTTP 重定向,每次由对外接口发送重定向头给客户端指定实际服务器 (服务端返回再请求)
DNS, 由DNS服务器分发给后台服务器(客户端,机房)
反向代理, 请求到服务端代理,服务端再重新转发请求
IP, 服务代理不解析负载,IP重定向
数据链路层, 服务代理更改相应目的地址,直接把相应返回给请求客户端不经过代理。
评论