原文:https://www.cnblogs.com/chengxuyonghu/p/13683468.html
一、概述
主要功能:应用解耦,异步消息,流量削锋等问题
架构设计:实现高性能,高可用,可伸缩和最终一致性架构
常用消息队列:ActiveMQ,RabbitMQ,ZeroMQ,Kafka,MetaMQ,RocketMQ
使用场景:
1)RabbitMQ:对数据一致性、稳定性和可靠性要求很高的场景,对性能和吞吐量的要求还在其次(集群不能动态扩展)
2)RocketMQ:具有高吞吐量、高可用性、适合大规模分布式系统应用的特点(支持的语言较少,语言支持的情况下优先选择)
3)Kafka:基于Pull的模式来处理消息消费,追求高吞吐量,适合产生大量数据的互联网服务的数据收集业务(多数用于处理日志)
二、核心功能理解
解耦:一个事务,只关心核心的流程。而需要依赖其他系统但不那么重要的事情,有通知即可,无需等待结果
异步消息:
一致性:保证消息的可靠性
1)强一致性:
2)最终一致性:主要是用“记录”和“补偿”的方式。在做所有的不确定的事情之前,先把事情记录下来,然后去做不确定的事情,结果可能是:成功、失败或是不确定,“不确定”(例如超时等)可以等价为失败。成功就可以把记录的东西清理掉了,对于失败和不确定,可以依靠定时任务等方式把所有失败的事情重新执行一遍,直到成功为止
三、使用总结
1.消息队列不是万能的,对于需要强事务保证而且延迟敏感的,RPC是优于消息队列的。
2.对于一些无关痛痒,或者对于别人非常重要但是对于自己不是那么关心的事情,可以利用消息队列去做。
3.支持最终一致性的消息队列,能够用来处理延迟不那么敏感的“分布式事务”场景,而且相对于笨重的分布式事务,可能是更优的处理方式。
4.当上下游系统处理能力存在差距的时候,利用消息队列做一个通用的“漏斗”,在下游有能力处理的时候,再进行分发。
一、概述
原理:
1) 将数据写入/读取速度更快的存储(设备)
2) 将数据缓存到离应用最近的位置
3)将数据缓存到离用户最近的位置
缓存分类
1)CDN缓存
2)反向代理缓存
3)分布式Cache
4)本地应用缓存
缓存媒介
1)常用中间件:Varnish,Ngnix,Squid,Memcache,Redis,Ehcache等
2)缓存的内容:文件,数据,对象
3)缓存的介质:CPU,内存(本地,分布式),磁盘(本地,分布式)
缓存设计
1)缓存的内容:1.热点数据;2.静态资源
2)缓存的位置:CDN,反向代理,分布式缓存服务器,本机(内存,硬盘)
缓存策略
1)过期策略:(1)固定时间:比如指定缓存的时间是30分钟;(2)相对时间:比如最近10分钟内没有访问的数据;
2)同步机制:(1)实时写入;(2)异步刷新
缓存的目的:将热点数据放到离用户最近或访问速度更快的介质中,加快数据的访问,减小响应时间
二、CDN缓存
原理:CDN的基本原理是广泛采用各种缓存服务器,将缓存服务器分布到用户访问相对集中的地区或网络中,在用户访问网站时,利用全局负载技术将用户的访问指向距离最近的工作正常的缓存服务器上,由缓存服务器直接响应用户请求
CDN主要解决将数据缓存到离用户最近的位置,一般缓存静态资源文件(页面,脚本,图片,视频,文件等)。
国内网络异常复杂,跨运营商的网络访问会很慢。为了解决跨运营商或各地用户访问问题,可以在重要的城市,部署CDN应用。使用户就近获取所需内容,降低网络拥塞,提高用户访问响应速度和命中率。
(1) 未部署CDN应用前
网络请求路径:
请求:本机网络(局域网)——》运营商网络——》应用服务器机房
响应:应用服务器机房——》运营商网络——》本机网络(局域网)
在不考虑复杂网络的情况下,从请求到响应需要经过3个节点,4个步骤完成一次用户访问操作。
(2) 部署CDN应用后
网络路径:
请求:本机网络(局域网)——》运营商网络
响应:运营商网络——》本机网络(局域网)
在不考虑复杂网络的情况下,从请求到响应需要经过2个节点,2个步骤完成一次用户访问操作。
与不部署CDN服务相比,减少了1个节点,2个步骤的访问。极大的提高的系统的响应速度。
优点
1)本地Cache加速:提升访问速度,尤其含有大量图片和静态页面站点
2)镜像服务:消除了不同运营商之间互联的瓶颈造成的影响,实现了跨运营商的网络加速,保证不同网络中的用户都能得到良好的访问质量
3)远程加速:远程访问用户根据DNS负载均衡技术智能自动选择Cache服务器,选择最快的Cache服务器,加快远程访问的速度
4)带宽优化:自动生成服务器的远程Mirror(镜像)cache服务器,远程用户访问时从cache服务器上读取数据,减少远程访问的带宽、分担网络流量、减轻原站点WEB服务器负载等功能
5)集群抗攻击:广泛分布的CDN节点加上节点之间的智能冗余机制,可以有效地预防黑客入侵以及降低各种D.D.o.S攻击对网站的影响,同时保证较好的服务质量
缺点
1)动态资源缓存,需要注意实时性(解决方法:主要缓存静态资源,动态资源建立多级缓存或准实时同步)
2).如何保证数据的一致性和实时性需要权衡考虑(解决方法:设置缓存失效时间(1个小时,最终一致性))
CND技术实践
目前,中小型互联网公司,综合成本考虑,一般租用第三方CDN服务,大型互联网公司,采用自建或第三方结合的方式。比如淘宝刚开始使用第三方的,当流量很大后,第三方公司无法支撑其CDN流量,淘宝最后采用自建CDN的方式实现。
淘宝CDN,如下图(来自网络):
三、反向代理缓存
原理:反向代理位于应用服务器机房,处理所有对WEB服务器的请求。如果用户请求的页面在代理服务器上有缓冲的话,代理服务器直接将缓冲内容发送给用户。如果没有缓冲则先向WEB服务器发出请求,取回数据,本地缓存后再发送给用户。通过降低向WEB服务器的请求数,从而降低了WEB服务器的负载
代理缓存对比:常用的代理缓存有Varnish,Squid,Ngnix
1)varnish和squid是专业的cache服务,nginx需要第三方模块支持;
2)Varnish采用内存型缓存,避免了频繁在内存、磁盘中交换文件,性能比Squid高;
3)Varnish由于是内存cache,所以对小文件如css,js,小图片啥的支持很棒,后端的持久化缓存可以采用的是Squid或ATS
4) Squid功能全而大,适合于各种静态的文件缓存,一般会在前端挂一个HAProxy或nginx做负载均衡跑多个实例
5) Nginx采