范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

微服务架构中的多级缓存设计还有人不懂?

  今天我们来聊聊缓存这个话题,看看在微服务环境下如何设计有效的多级缓存架构。主要涉及三方面内容:Web 应用的客户端缓存;应用层静态资源缓存;服务层多级缓存。
  首先,咱们先讲解微服务架构的多级缓存设计。微服务架构中的多级缓存设计
  提到缓存,想必每一位软件工程师都不陌生,它是目前架构设计中提高性能最直接的方式。这里我们举个例子:
  假设应用程序将原始数据存储在 MySQL 数据库中。众所周知 MySQL 数据库会将数据存储在硬盘以防止掉电丢失,但是受制于硬盘的物理设计,即便是目前性能最好的企业级 SSD 硬盘,也比内存的这种高速设备 IO 层面差一个数量级,而以淘宝、京东这种电商为代表的互联网应用,都是典型的 "读多写少" 的场景,因此我们需要在设计上进行数据的读写分离,在数据写入时直接落盘处理,而占比超过 90% 的数据读取操作时则从以 Redis 为代表的内存 NoSQL 数据库提取数据,利用内存的高吞吐瞬间完成数据提取,这里 Redis 的作用就是我们常说的缓存。
  当然,缓存可不只有用内存替代硬盘这一种形式,在分布式架构下缓存在每一层都有自己的设计,下面咱们通过这个微服务的多级缓存架构图为主线进行讲解。
  这张图从上到下包含四层,分别为:客户端、应用层、服务层以及数据层。客户端缓存
  X 商城客户端为浏览器,在浏览器层面我们主要是对 HTML 中的图片、CSS、JS、字体这些静态资源进行缓存。
  我们以百度 Logo 图片为例,百度在 HTTP 通过 Expires 响应头控制静态图片的有效期。Expires 代表过期时间。当前百度 Logo 的过期时间为 2031 年 2 月 8 日 9 时 26 分 31 秒。在这个时间段内,浏览器会将图片以文件形式缓存在本地,再次访问时会看到"from disk cache"的提示,此时浏览器不再产生与服务器的实际请求,会从本地直接读取缓存图片。通过在浏览器端设置 Expires 可以在很大程度减少重复请求静态资源带来的带宽损耗,这在高并发 Web 应用中是基础而重要的设置。应用层缓存
  那 Expires 到底在哪里进行设置呢?对于浏览器来说它只是客户端,只负责读取Expires响应头,对于 Expires 要在应用层,也就是 CDN 与 Nginx 中进行设置。CDN 内容分发网络
  CDN 全称是 Content Delivery Network,即内容分发网络,是互联网静态资源分发的主要技术手段。
  CDN 内容分发网络
  中国幅员辽阔,从北京到上海就有上千公里,如果大量的上海用户同时要访问千里之外的北京服务器的资源,这么长的通信必然带来高延迟与更多不可控因素影响数据传输,如果有某种机制允许将北京的静态文件缓存到上海的服务器,上海用户自动就近访问服务器获取资源,这样便可很大程度降低网络延迟,进而提高系统的可用性。而刚才提到的分布式缓存技术就是我们常提到的CDN(内容分发网络)。
  对于广域的互联网应用,CDN 几乎是必需的基础设施,它有效解决了带宽集中占用以及数据分发的问题。像 Web 页面中的图片、音视频、CSS、JS 这些静态资源,都可以通过 CDN 服务器就近获取。
  CDN 技术的核心是"智能 DNS",智能 DNS 会根据用户的 IP 地址自动确定就近访问 CDN 节点,咱们以下图为例:
  以某上海用户的浏览器要访问商城首页广告位的 banner.jpg 文件,浏览器通过服务商提供的智能 DNS 服务,将请求自动转发到商城在上海地区准备的 CDN 服务器,上海 CDN 收到请求后首先检查本机是否已缓存过 banner.jpg,如果文件已存在便直接将图片数据返回给客户端;如果没有缓存过,则回源到北京的源数据节点,将 banner.jpg 文件抽取并缓存到上海服务器,最后上海 CDN 节点再将本机的 banner.jpg 返回给客户端。对于 banner.jpg 来说,第一次访问后上海 CDN 节点已缓存该文件,则之后的缓存有效期内所有后续访问由上海 CDN 直接提供。与之类似的,商城应用可以在重要城市搭建 CDN 节点,这样原本集中被发往北京服务器的请求就被分摊到 CDN 节点,这也直接降低了北京机房的带宽压力。
  在互联网应用中,因为 CDN 涉及多地域多节点组网,前期投入成本较高,更多的中小型软件公司通常会选择阿里云、腾讯云等大厂提供的 CDN 服务,通过按需付费的方式降低硬件成本。而这些服务商又会为 CDN 赋予额外的能力,比如阿里云、腾讯云 CDN 除了缓存文件之外,还提供了管理后台能为响应赋予额外的响应头。如下所示在阿里云 CDN 后台,就额外设置了 Cache-Control 响应头代表缓存有效期为 1 小时。这里我们额外提一下 Expires 与的 Cache-Control 的区别,Expires 是指定具体某个时间点缓存到期,而 Cache-Control 则代表缓存的有效期是多长时间。Expires 设置时间,Cache-Control 设置时长,根据业务场景不同可以使用不同的响应头。
  Nginx 缓存管理
  说完 CDN,下面再来聊一下 Nginx。Nginx 是一款开源的、跨平台的高性能 Web 服务器,它有着高性能,稳定性好,配置简单,模块结构化,资源消耗低的优点。同时支持反向代理、负载均衡、缓存的功能。Nginx 是 Web 应用架构中的常客,例如后端 Tomcat 集群便可通过增加 Nginx 前置做软负载均衡,为应用提供高可用特性。
  在互联网应用中,用户分布在全国各地,对资源的响应速度与带宽要求较高,因此部署 CDN 是十分有必要的。但在更多的企业应用中,其实大部分的企业用户都分布在指定的办公区域或者相对固定的场所,再加上并发用户相对较少,其实并不需要额外部署 CDN 这种重量级解决方案。在架构中只需要部署 Nginx 服务器,利用 Nginx 自带的静态资源缓存与压缩功能便可胜任大多数企业应用场景。
  在 Nginx 中自带将后端应用中图片、CSS、JS 等静态资源缓存功能,我们只需在 Nginx 的核心配置 nginx.conf 中增加下面的片段,便可对后端的静态资源进行缓存,关键配置我已做好注释,同学们可以直接使用。# 设置缓存目录 # levels代表采用1:2也就是两级目录的形式保存缓存文件(静态资源css、js) # keys_zone定义缓存的名称及内存的使用,名称为babytun-cache ,在内存中开始100m交换空间 # inactive=7d 如果某个缓存文件超过7天没有被访问,则删除 # max_size=20g;代表设置文件夹最大不能超过20g,超过后会自动将访问频度(命中率)最低的缓存文件删除 proxy_cache_path d:/nginx-cache levels=1:2 keys_zone=babytun-cache:100m inactive=7d max_size=20g;  #配置xmall后端服务器的权重负载均衡策略 upstream xmall {     server 192.168.31.181 weight=5 max_fails=1 fail_timeout=3s;     server 192.168.31.182 weight=2;     server 192.168.31.183 weight=1;     server 192.168.31.184 weight=2; }  server { 	#nginx通过80端口提供Web服务 	listen 80; 	# 开启静态资源缓存 	# 利用正则表达式匹配URL,匹配成功的则执行内部逻辑 	# ~* 代表URL匹配不区分大小写 	location ~* .(gif|jpg|css|png|js|woff|html)(.*){     # 配置代理转发规则 		proxy_pass http://xmall; 		proxy_set_header Host $host; 		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 		proxy_cache xmall-cache; 		#如果静态资源响应状态码为200(成功)  302(暂时性重定向)时 缓存文件有效期1天 		proxy_cache_valid 200 302 24h; 		#301(永久性重定向)缓存保存5天 		proxy_cache_valid 301 5d; 		#其他情况 		proxy_cache_valid any 5m; 		#设置浏览器端缓存过期时间90天 		expires 90d; 	}  	  	#使用xmall服务器池进行后端处理  	location /{ 		proxy_pass http://xmall;  		proxy_set_header Host $host; 		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 	} } 复制代码
  增加上面配置后,每一次通过 Nginx 访问应用中新的静态文件时,在 Nginx 服务的缓存目录便会生成缓存文件,在缓存有效期内该静态资源的请求便不再送到后端服务器,而直接由 Nginx 读取本地缓存并返回。
  服务层缓存
  在前面无论是 CDN 还是 Nginx,都是对 Web 应用中的静态资源文件进行缓存。但后端应用与服务更多的是访问接口与数据,对于这些对象我们如何利用缓存技术进行性能优化呢?对于后端应用与服务的缓存可以按部署方式分为进程内缓存与分布式缓存服务。进程内缓存
  所谓进程内缓存,就是在应用中开辟的一块内存空间,数据在运行时被载入这块内存,通过本地内存的低延迟、高吞吐的特性提高程序的访问速度。进程内缓存在众多 Java 框架内都有广泛应用,例如 Hibernate、Mybatis 框架的一二级缓存、Spring MVC 的页面缓存都是进程内缓存的经典应用场景,这些进程内缓存在 Java 中也有着非常多优秀的开源实现,如 EhCache、Caffeine 都是代表性产品。分布式缓存服务
  与进程内相对的,就是需要独立部署的分布式缓存服务。最常用的是基于 Redis 这种内存型 NoSQL 数据库,对整体架构中的应用数据进行集中缓存。
  在架构设计时,很多新架构师一听到缓存,下意识认为增加 Redis 分布式缓存服务器就够了,其实这是片面的做法。在缓存架构设计时,一定要按照由近到远、由快到慢的顺序进行逐级访问。假设在电商进行商品秒杀活动时,如果没有本地缓存,所有商品、订单、物流的热点数据都保存在 Redis 服务器中,每完成一笔订单,都要额外增加若干次网络通信,网络通信本身就可能由于各种原因存在通信失败的问题。即便是你能保证网络 100% 可用,但 Redis 集群承担了来自所有外部应用的访问压力,一旦突发流量超过 Redis 的负载上限,整体架构便面临崩溃的风险。
  因此在 Java 的应用端也要设计多级缓存,我们将进程内缓存与分布式缓存服务结合,有效分摊应用压力。在 Java 应用层面,只有 EhCache 的缓存不存在时,再去 Redis 分布式缓存获取,如果 Redis 也没有此数据再去数据库查询,数据查询成功后对 Redis 与 EhCahce 同时进行双写更新。这样 Java 应用下一次再查询相同数据时便直接从本地 EhCache 缓存提取,不再产生新的网络通信,应用查询性能得到显著提高。
  保障缓存一致性
  但事无完美,当引入多级缓存后,我们又会遇到缓存数据一致性的挑战,以下图为例:
  我们都知道作为数据库写操作,是不通过缓存的。假设商品服务实例 1 将 1 号商品价格调整为 80 元,这会衍生一个新问题:如何主动向应用程序推送数据变更的消息来保证它们也能同步更新缓存呢?
  相信此时你已经有了答案。没错,我们需要在当前架构中引入 MQ 消息队列,利用 RocketMQ 的主动推送功能来向其他服务实例以及 Redis 缓存服务发起变更通知。
  如上图所示,在商品服务实例 1 对商品调价后,主动向 RocketMQ Broker 发送变更消息,Broker 将变更信息推送至其他实例与 Redis 集群,这些服务实例在收到变更消息后,在缓存中先删除过期缓存,再创建新的数据,以此保证各实例数据一致。
  看到这里你会发现,对于缓存来说,并没有终极的解决方案。虽然多级缓存设计带来了更好的应用性能,但也为了缓存一致性必须引入 MQ 增加了架构的复杂度。那到底多级缓存设计该如何取舍呢?在我看来,有三种情况特别适合引入多级缓存。
  第一种情况,缓存的数据是稳定的。例如邮政编码、地域区块、归档的历史数据这些信息适合通过多级缓存减小 Redis 与数据库的压力。
  第二种情况,瞬时可能会产生极高并发的场景。例如春运购票、双 11 零点秒杀、股市开盘交易等,瞬间的流量洪峰可能击穿 Redis 缓存,产生流量雪崩。这时利用预热的进程内缓存分摊流量,减少后端压力是非常有必要的。
  第三种情况,一定程度上允许数据不一致。例如某博客平台中你修改了自我介绍这样的非关键信息,此时在应用集群中其他节点缓存不一致也并不会带来严重影响,对于这种情况我们采用T+1的方式在日终处理时保证缓存最终一致就可以了。
  以上是我总结的三种适合服务层做多级缓存的场景。当然如果你们的应用并发量不大,在未来的1~2 年内利用 Redis 分布式缓存集群完全可以胜任应用性能要求,那自然就没有必要设计多级缓存,我们要根据业务特点灵活调整架构。小结
  今天咱们介绍了在应用微服务架构下从客户端到服务层,各层的缓存设计以及解决方案,讲解了从浏览器的 Expires 响应头到 CDN、Nginx 的静态资源缓存,再到服务层针对数据的多级缓存,使你对微服务架构的缓存有了总体的了解。
  原文链接:https://juejin.cn/post/7202479313228218428

出门不被叫阿姨的秘诀在这!二孩妈妈的6个穿搭技巧来了昵称霞个人信息35岁,两个孩子宝妈,黄黑皮,身高170,体重115,肩宽40,H型扁平身材,头发细软毛躁并且发量很少穿搭描述日常穿搭比较简约。诉求想要看起来时尚洋气一点,不知道自己三伏天炎热出汗多,建议常吃碱性家常菜,清火润燥常吃身体好大家好这里是南方姑娘香香,每天分享不一样的家常菜。我们都知道三伏天是一年中最热的,这个时候出汗就特别多,如何调整饮食就很重要了,这个时候建议常吃一些碱性的家常菜,提高身体素质,轻松王心凌现身七夕晚会,央视镜头下拿捏住氛围感,穿泡泡裙美若精灵昨天的央视七夕晚会当中,有不少台湾艺人登上了舞台,这其中包括王心凌萧敬腾王耀庆等等,她们在舞台上倾情献唱,为观众们献上了精彩绝伦的表演。当晚令人印象最深刻的就是甜心教主王心凌了,刚真正适合50岁女人的大牌面霜盘点,价格小贵但真的好用,建议收藏50岁女性护肤,虽然抗老依然是主旋律,但是对个人的实际情况和肤质需求有所了解也是非常重要的。这一年龄段的女性,在皮肤护理方面更追求精简高效,往往用一瓶精华水面霜就完成了日常护肤。如张常宁婚后再做最新决定!女排迎坏消息,蔡斌成光杆司令无人可用中国女排目前正在宁波北仑进行封闭训练,全力备战即将在9月份到来的世锦赛。对于这支全新组建的中国女排来说,自从新任主教练蔡斌上任后,她们的表现就备受关注,全国的球迷都想看看在缺少了朱罕见!泰山队发布会1分钟结束,将帅表态拿3分,于根伟恭维泰山队北京时间8月5日,中超第11轮泰山队与津门虎的赛前发布会进行,主教练郝伟携队员王彤参加,由于现场没有记者提问,泰山队的发布会非常简短,不到1分钟就匆匆宣告结束。时隔将近一个月后,中德甲法兰克福vs拜仁,欧联杯冠军能否撼动南大王?大家好,欢迎来到全景观足坛,带你更高维度看足球!今天为大家带来的是德甲第一轮的较量,法兰克福主场迎战拜仁慕尼黑,下面我们就从多维度带您了解一下这场比赛!球队背景主队法兰克福上赛季在内维尔C罗的行为与博格巴相同,不能让球员掌管球队前曼联球员加里内维尔(GaryNeville)在接受ABola采访时对克里斯蒂亚诺罗纳尔多(CristianoRonaldo)目前的行为以及他在曼彻斯特俱乐部的情况发表了负面评价。WTT突尼斯赛刘炜珊惜败张本美和,林高远逆转蒙泰罗WTT突尼斯已经来到正赛,中国军团这次派出不少一线球员参加,其中就包括林高远和何卓佳等主力,国乒虽有部分球员退出,但仍旧有13人出战单打第一轮,此前被张本智和逆转的林高远,这次又得重金签下9名CBA球员,千万年薪招募郭艾伦,翼龙老板大有来头周琦当初的难题似乎又要重演了,前不久,郭艾伦向效力了12年之久的辽宁男篮提出转会申请,这意味着双方有着不可轻易调和的矛盾,至于郭艾伦能否轻松离开,还要看辽宁男篮会不会放人,没办法,突发意外!中超大将登场1分钟吃红牌,太恶劣了,或遭追加处罚中超联赛第11轮一场焦点战,上海申花对阵长春亚泰。下半场中段,场上突发一次意外,刚登场仅仅1分钟的申花大将杨泽翔吃到红牌。看完回放发现,真的太恶劣了,他大概率还将遭到足协的追加处罚
脸书允许发布仇俄言论,俄检方须将其列为极端组织(观察者网讯)据俄新社11日消息,Meta公司10日表示,暂时允许俄乌等部分国家用户发表杀死普京等仇恨言论。对此,俄罗斯总检察长办公室就关于打击极端主义活动法案,要求俄罗斯联邦通信双手指节僵硬肿胀疼痛近半年,为何开的方子重在治肝?来了患者双手的指节肿胀疼痛,僵硬近半年之久,而且还伴随下肢酸,但是并不疼痛。我说你的二便是否正常?可曾去过医院检查?她说去了,医院检查血沉抗O类风湿因子均无异常,双手及颈椎X光片也和黄晓明离婚一个月,Baby的33岁生日,挡不住的冷清人自相残,人心惟危,人心莫测,人心薄凉,人走茶凉,人心思变。佚名最难猜透的便是人心,正所谓人心隔肚皮,不亲身经历一些事情,又怎能体会到人情冷暖,世态炎凉?生日对于每个人而言都是非常奚梦瑶晒照庆祝33岁生日与老公何猷君贴脸合影超甜蜜搜狐娱乐讯3月8日是奚梦瑶33岁生日,她在社交平台晒出与老公何猷君的合照庆生,二人脸贴着脸,表情搞怪,恩爱十足。2019年7月4日,何猷君和奚梦瑶持证结婚。奚梦瑶在自己的社交网站上男人晨起后吃一片生姜,身体会怎么样,医生5个变化等着他生姜是厨房中常见的调味品,几乎在每个家庭的厨房中都能见到它的身影,里面还有较多对人体有益的成分,既可以食用,也有一定的药用价值。中医认为生姜味辛,性微温,主要归肺脾胃经,从中医中药华为P60Pro概念机前后双屏2亿像素徕卡镜头,麒麟5G芯片稳了?华为去年发布的P50Pro没有令人失望吧?打孔屏配熟悉的徕卡镜头,无论是颜值还是拍摄功能都是如此惊艳,唯一令人遗憾的是麒麟芯片不支持5G网络。而随着时间的发展,华为这两年在努力突破方形的镜头你见过吗?佳能发布潜望式超远摄镜头专利佳能申请了一项技术专利,该技术使用包括600mmF4和400mmF2。8示例在内的四个反光镜实现全长较短的超远摄镜头。专利公开号P2022052220佳能公司在专利中的表述为待解决错觉吗?黑洞以超光速喷出物质流?光速是不是限制了我们的思维?黑洞以超光速喷出物质流最近,天文学家谈到了银河系m87中心着名的黑洞如何以超过光速的速度喷出物质流。在2019,由于事件视界望远镜捕获得了M87星系中黑洞的图像,注释这是世界上第一2019年学霸在校做生意,两年赚了两个亿,警察上门判了13年近年来随着经济的发展,越来越多的名校高材生选择自己创业,政府也推出了不少政策,扶持大学生创业。大学生毕竟一直生活在象牙塔中,也不是每个人都有创业的天赋。但也有天赋异禀的人,一出手就手游每日榜单(2022年4月4日)每日更新游戏榜单和新鲜资讯,关注我不迷路。关注我的都棒棒哒!今天是2022年4月4日,首先来看看今天的畅销榜单变化今天具体的榜单如下腾讯QQ飞车今天畅销榜排名第10。这是一款竞速手王者荣耀在也不复往日了啊今天我遇到了让我最愤怒的一局,我玩的貂蝉二技能躲妲己的二技能没受伤害但是控到我了就很奇怪,还有就是我一个貂蝉打廉颇和夏侯惇被他俩打一万多滴血,腿都跳断了,我死了,受到法伤百分之六十