电商网站商品详情页缓存服务框架以及Hrstrix核心

news/2024/5/20 4:02:49/文章来源:https://blog.csdn.net/weixin_41011482/article/details/119080109

小型电商网站商品详情页架构

会做一个静态化页面,直接返回给用户,不涉及业务,所以返回时间特别快,如图所示。
这坏处在于只是使用一些小型的网站,几百几千到几万的商品数据。如果一些大型网站,商品数量几亿数量级,那么将这些数据全都静态化,肯定是不现实的。
在这里插入图片描述

大型电商网站商品详情页架构

一般会有一个缓存服务,进行部分数据的主动更新,然后再进行渲染。那么这个架构的核心就是缓存服务,接收到消息之后,如何保证其会获取到底层的数据。如果依赖的底层服务失败、拒绝、超时怎么办,可能会导致商品页面显示不出来数据,该如何保证这个架构的高可用性。
在这里插入图片描述

服务接口故障导致高并发耗尽资源场景

在这里插入图片描述

资源隔离,限流

线程池隔离原理

如果我们的服务是接收处理所有的请求,那么如果大量的请求同时涌入的话,就很可能会造成资源耗尽而导致系统崩溃,如果用线程池来进行流量的一个管控,如果请求达到了线程池的上线,就直接拒绝请求或者进行fallback的服务降级,那么就相当于拦截了多出来的请求,不至于让我们的系统过载,出现故障。而且线程池可以对线程进行管控,检测请求是否超时之类的错误。

线程池隔离技术适用于99%的资源隔离和限流场景。

信号量隔离限流

信号量就相当于一个关卡,每接到一个请求就记录一下,如果请求量达到上线,就直接让其请求fallback降级服务。那么这样也可以做到一个资源隔离和限流的功能。与线程池最大的区别就是,线程池是用自己的线程去进行依赖访问,而信号量是作为一个关卡将用户的请求线程进行放行或者拒绝。所以也不能对请求进行监控,检测请求是否超时之类的错误。

信号量隔离使用于内部资源隔离和限流的场景,因为不需要进行超时之类的统计,不涉及任何的网络请求,只是避免内部复杂的低效率代码hang主大量线程。

比如一些地理位置我们可能放在纯内存中,那么就可以使用信号量进行资源隔离和限流,优点在于不用自己管理线程池,并且性能还高一些。

Hrstrix的Command线程池

通过设置线程组和线程名称来实现线程池和信号量的隔离。
command group 是一个非常重要的概念,默认情况下就是通过command group来定义一个线程池,还会通过这个command group来聚合一些监控和报警信息,只要是通过同一个command group的请求都会到同一个线程池中。如果没有手动定义hrstrixThreadpool线程池的名称,那么会默认使用command group来作为hrstrix线程池的名称

command key代表了一个依赖接口;command group代表了一类依赖服务
coreSize,线程池的大小,默认为10,通过HystrixThreadPoolProperties.Setter().withCoreSize(Integer vlaue) 来设置。

在这里插入图片描述

Hrstrix的Command执行流程

  1. 创建command,构建一个HrstrixCommand或者HrstrixObservableCommand对象,HrstrixCommand主要用于仅仅会返回一个结果的调用,HrstrixObservableCommand用于会返回多个结果的调用。

  2. 调用Command执行方法,execute()、queue()、observe()、toObservable()。
    execute():只适用于HrstrixCommand,同步调用,调用后block等待返回结果。
    queue():只适用于HrstrixCommand,异步调用,调用后通过Future获取结果。
    observe():订阅一个Observable对象,获取结果
    toObservable():延迟调用,调用后不会返回,订阅Observable对象后才会返回。

  3. 检查是否开启缓存,如果有缓存那么直接返回数据

  4. 是否开启断路器,如果开启证明依赖不可用,直接调用fallback服务降级

  5. 检查线程队列是否满了,满的话调用fallback服务降级

  6. 执行Command

  7. 短路健康检查,统计服务失败、超时次数,判断是否需要开启短路器

  8. 如果调用了fallback,那么执行降级服务,返回结果

request cache 请求缓存

通过过滤器Filter来实现,每次接受请求的时候都会建立一个上下文内容request context并且设置生命周期,那么每次通过Command调用依赖的时候都会检测请求值是否已经存在,如果存在则直接返回 request cache中的数据,不需要多次请求依赖服务。

fallback降级机制

Hrstrix调用各种外部依赖的时候,出现了异常情况报错的话,就自定义一个默认值或者内存的返回值。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_750520.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

php测试网站并发量和某个网页访问时间工具---ab.exe

基本用法进入到cmd控制台 ab.exe-n 访问的总次数 -c 有多少人同一时间访问(并发量) 访问页面的 url 例如: 第一行的意思:进入在 apache服务器下面的 bin目录 然后 执行 ab.exe -n 10000(访问总次数) -c 100(有多少人同时访问&a…

一个网站自动化测试程序的设计与实现

CSDN博客不再经常更新,更多优质文章请来 粉丝联盟网 FansUnion.cn! (FansUnion) 代码 下载地址:http://download.csdn.net/detail/fansunion/5018357(免积分) 代码亮点:可读性很好,注释详尽 背景 工作中,在维护一…

假如我来架构12306网站

笔者连日来也萌发了一个想法,假如让我来设计12306网站,我作为总架构师,该当如何考虑呢?自己虽然经历过众多的大项目的全生命周期跟踪管理,对于软件工程应该是有一定的研究,但像如此巨型项目,应该…

万维网向公众开放20周年:全球首个网站重新上线

互联网改变了我们生活,学习和工作的方方面面,尤其是现在蓬勃发展的移动互联网更是将我们与互联网拉近了距离。昨天是万维网(World Wide Web)面向公众开放20周年的日子,是一个值得纪念的日子,故转载此文,以示纪念。 在万…

网站的发布和iis部署

第一步:在确保生成的网站没有问题的情况下,发布网站。右击-发布网站 第二步:保存路径(去掉允许更新此预编译站点) 第三步:生成成功,把生成的文件发布到IIS上。IIS是Internet Information Servic…

IIS网站部署常见问题汇总(乱码,服务器不可用)

在IIS上部署网站,运行时却是乱码一堆:先来看一张图片 最终得知问题出在网站属性设置上:(右击部署网站的属性) ASP.NET 选项:.NET 版本设置 部署网站时要不开发时用的.NET 版本保持一致,或者…

前端不错的网站

网址: http://www.whycss.com/http://f2er.club/转载于:https://www.cnblogs.com/yzenet/p/5820473.html

一个网站自动化测试程序的设计与实现

CSDN博客不再经常更新,更多优质文章请来 粉丝联盟网 FansUnion.cn! (FansUnion) 代码 下载地址:http://download.csdn.net/detail/fansunion/5018357(免积分) 代码亮点:可读性很好,注释详尽 背景 工作中,在维护一…

外链引入css有哪些方式_如何对网站进行seo 网站上线之后SEO会有哪些工作内容?...

企业网站的SEO优化外包给第三方是一种可取的方式,也可以自己建立一个搜索引擎优化团队。两种方法各有利弊,可以根据自己的情况选择。那么,如何建立一个可靠的seo团队呢?答案在于每一个细节岗位的人才技能,合适的人才的…

wordpress 可以添加woocommerce的分类到导航吗_分类目录 vs 标签:WordPress网站SEO之内容分类...

很多人都有一个疑问:分类目录 VS 标签,哪个对网站SEO更好?可能大部分人都不太清楚WordPress的分类目录和标签到底是什么,它们的区别之处在哪里。了解这些知识有助于各位站长正确使用分类目录和标签。本文摘自苦心孤译博客&#xf…

从零开始利用vue-cli搭建简单音乐网站(三)

1、利用router-link在组件之间传递数据 如上图,MainPage.vue中主要有8个推荐曲目数据,主要实现方式是建立好主页面模板,然后用v-for循环获取返回的music对象,然后分别绑定曲目,代码如下: ul作为承载8个曲目…

电商网站参考

1. 新都.云商汇 http://dijingvip.165183.cn/BusinessList.aspx?fromsinglemessage 2. 拼团商城 拼多多 https://www.pinduoduo.com/index.html?utm_sourcebaidubz&utm_mediumBrandZ&utm_term&utm_campaignsearch&utm_contentlogolink 3.微信小商城 古拉优选…

linux 部署.net网站后其它电脑无法访问_教程为知笔记私有部署,畅享所有 VIP 功能...

今天来玩玩为知笔记私有部署 docker 镜像,将为知笔记服务端部署在自己的服务器或者电脑上,全方位掌握自己的笔记信息,直接获得公版账号所有的的 VIP 功能。只需要启用为知笔记服务端,就可以利用自带的为知笔记网页版,…

宝塔linux如何安装asp程序,宝塔linux面板可以搭建运行asp网站程序吗

宝塔linux面板可以搭建运行asp网站程序吗?宝塔linux面板怎么支持asp?下面由宝塔教程栏目为大家详细介绍!首先登录到宝塔 Linux 面板 >> 软件管理 >> 运行环境中查看,发现 Linux 面板的运行环境中可以安装nginx、Apach…

mysql报错注入_网站SQL注入渗透测试手法介绍

国庆即将到来,前一期讲到获取网站信息判断所属环境以及各个端口的用处和弱口令密码利用方法,这期仍有很多客户找到我们想要了解针对于SQL注入攻击的测试方法,这一期我们来讲解下注入的攻击分类和使用手法,让客户明白漏洞是如何产生的,会给网站…

阿里云网站域名申请及备案

1. 2. 注册域名 转载于:https://www.cnblogs.com/liangfc/p/9469028.html

为什么打不开_电脑为什么打不开指定的网站?什么是DNS解析我要如何设置DNS

每天都浏览的一个网站突然间打不开了,明明网络没有问题,打开其它的网站都是正常的,为什么就突然打不开了呢?电脑为什么打不开指定的网站?什么是DNS解析我要如何设置DNS这时候我们要了解一下什么是DNS?DNS也…

Win2003下实现Web虚拟网站

Win2003下实现Web虚拟网站一、IP地址法 一般情况下,一块网卡只设置了一个IP地址。如果我们为这块网卡绑定多个IP地址,每个IP地址对应一个Web站点,那么同样可以实现“一机多站”的目的。 假定[url]www.ghq.com[/url]、study.ghq.com 和 …

ASP.NET网站国际化策略

1 问题提出 现在很多网站项目开发要求同时支持多国语言,所以在用户界面及程序的设计和开发中需采取国际化策略,以达到代码改动量小、网站部署便利,用户群广泛的目的。 2 解决策略 .NET Framework 为开发全球通用的应用程序…

如何让虚拟目录里面的webconfig不继承网站的设置

必須在上一层虚拟目录(如根目录)所在的Web.config加上 如&#xff1a;<location path"." allowOverride"false" inheritInChildApplications"false"> </location> 方法如下&#xff1a; 程序代码 <location path"." al…