架构师训练营 Week 05 总结
0 概述
文章框架:
1 分布式缓存架构,介绍了缓存的类型和部署位置,分布式缓存的框架原理
2 异步调用架构,介绍使用消息队列构建的异步框架
3 负载均衡架构,比较多种负载均衡的实现方式
1 分布式缓存架构
缓存是提高读取性能的关键:
一方面是减少I/O的使用
二来减少数据组合所耗费的资源和时间
1.1 缓存的技术要点
1.1.1 Hash表
缓存数据存储,是依靠Hash表来确定其在有限的空间中所在的存储位置。同时分布式缓存的路由选择算法的实现方法。
1.1.2 命中率
缓存的命中率,是评价缓存的关键指标,即是否有效依赖于能多少次重用同一个缓存来响应业务请求。如果查询一个缓存,十次查询九次能够得到正确结果,那么它的命中率是90%。
影响缓存命中率的主要指标有:
缓存键集合大小。键数量越少,缓存的效率越高。
缓存可使用内存空间。缓存的对象越多,缓存命中率就越搞。
缓存对象生存时间,TTL。对象缓存的时间越长,缓存对象被重用的可能性就越高。
1.1.3 实现模式
通读缓存(read-through)是通过在客户端与服务器之间架设缓存服务器。
旁路缓存(cache-aside)的访问路线是,先查询旁路缓存,未命中,再访问服务器,然后把数据写到旁路缓存。例如,本地缓存。
1.2 缓存的类型
1.2.1 代理缓存
代理缓存,是指客户端通过设置本地代理服务器,加快访问速度的技术。
反向代理缓存,是在应用服务器前设置的服务器,用于拦截所有流量,提供缓存服务。
1.2.2 内容分发网络(CDN)
根据URL来区分要访问的服务器:
CDN同时配置静态文件和动态内容:
1.3 分布式集群缓存
1.3.1 本地对象缓存构建分布式集群
缺点是增加了同步的负担,限制于十多台服务器的集群中使用。
1.3.2 远程分布式对象缓存
1.3.2.1 分布式对象缓存的一致性hash算法
一致性hash算法,是为了在增加、减少服务器时,尽可能减少对命中率的影响。Memcached分布式对象缓存,它的路由选择就是通过一致性hash实现(Redis则采用了不同的策略)。一致性hash在增加虚拟节点时是会有节点被覆盖的请款,但也无妨。常的虚拟节点数是150到200。
1.4 合理使用缓存
不是适合使用缓存的:
频繁修改的数据。缓存读写比2:1以上,实践中通常时4:1,缓存才有意义。
没有热点的访问。可以通过最近最久未被使用的规则把冷门数据剔除。
注意事项
缓存血本,缓存突然失效。缓存平时给数据库拦截80%左右的访问量,缓存崩溃了数据库会受不住的,这样会引发一连串的系统奔溃
缓存预热,在刚启动的缓存服务,它需要较长的时间去不断使用LRU(最近最久未用)算法筛选数据。
缓存穿透,在业务不恰当、或者恶意攻击持续高并发地请求某个不存在的数据,因为缓存没有保存该数据,所有的请求都会落在数据库上,可能会造成数据库过压而奔溃。
2 异步调用架构
为了不阻塞客户端、应用服务器的线程,提高系统资源利用率
2.1 消息队列构建异步调用架构
2.1.1 消息队列的类型
2.1.1.1 点对点模型
2.1.1.2 发布订阅模型
2.1.2 消息队列的好处
实现异步处理,提升处理性能
更好的伸缩性
削峰填谷
失败隔离:因为发布者不直接依赖消费者,所以消息系统可以将消费者系统错误与生产者系统组件隔离。同时我们可以增减服务器,而不影响生产者的可用性,这样简化了部署和服务器的管理难度。
解耦合
2.2 EDA事件驱动架构
2.2.1 实现方法
2.2.2 主要MQ产品
RabbitMQ,主要特点是性能好,社区活跃。使用Erlang开发,对不熟该语言的,可能不便于维护。(搜索出49M条结果)
ActiveMQ,可跨平台,使用Java开发。(27M)
RocketMQ,阿里巴巴开源产品,性能比较好,可靠性比较高,Java开发。(35M)
Kafka,LinkedIn出品,Scala开发,有专门针对分布式场景优化,因此伸缩性比较好。(63M)
3 负载均衡架构
3.1 负载均衡的实现方法
3.1.1 HTTP重定向均衡负载
利用HTTP重定向特性,使每次HTTP请求都会被重定向到应用服务器。
缺点:
速度慢,HTTP是协议层的,数据包大,重定向后,共两次请求会增加网络负载
不安全,把应用服务器的IP直接暴露给用户,容易被攻击
3.1.2 DNS均衡负载
通过对DNS服务器,给同一个域名,配置多个应用服务器的IP,并根据制定的规则轮询、或者随机返回IP地址,以达到负载均衡的目的
3.1.3 反向代理均衡负载
既把反向代理作为缓存服务器,亦可以让它兼任负载均衡。但这样就增加了缓存服务器的负载,得不偿失。
3.1.4 IP均衡负载
当均衡服务器收到用户请求,它会把TCP包的源IP地址、目标IP地址分别改为:负载均衡服务器自己的IP、应用服务器的IP;当应用服务器返回时,再把IP地址改回去。
缺点是,慢,因为需要对TCP包进行拆装
3.1.5 数据链路层负载均衡
在负载均衡服务器收到数据包时,把目标网卡的MAC地址改为应用服务器的网卡MAC地址;同时把应用服务器设置为和均衡服务器一样的IP,网络层就可以正常解包。称为,三角传输模型。
3.2 负载均衡算法
轮询
加权轮询
随机
最少连接
源地址散列
3.3 应用服务器集群的Session管理
Session复制,增加应用服务器的负担,得不偿失
Session绑定,客户端每次请求都会被分配到指定的服务器上,但这样就降低了系统的可用性
利用Cookie记录Session,接收到请求后,从Cookie解析得到Session对象,增加网路负载,性能差
Session服务器,理性模型
评论