当前位置: 首页 > news >正文

做软件项目需不需要有网站网络优化工程师吃香吗

做软件项目需不需要有网站,网络优化工程师吃香吗,音乐网站建设论文的立题意义,wordpress help前言 下面是我根据业务需求画了一个架构图,没有特别之处,很普通,都是我们常见的中间件,都是一些幂等性GET 请求。有一个地方很有意思,从service 分别有10000 qps 请求到Redis,并且它们的key 是一样的。这样…

前言

下面是我根据业务需求画了一个架构图,没有特别之处,很普通,都是我们常见的中间件,都是一些幂等性GET 请求。有一个地方很有意思,从service 分别有10000 qps 请求到Redis,并且它们的key 是一样的。这样一个简单的业务,Redis 就需要承担20000qps,此时监控 redis 我们会发现有一个峰值,如果Redis 没有值,这些流量会穿透到PostgreSQL,监控PostgreSQL也有一个峰值。于是我在想,如果在Service 层我们我们让流量排队阻塞,只需一个流量去请求Redis 获取数据,那么所有的key 不都获取数据了吗?对于Redis 和 PostgreSQL 来说流量就是1,那么流量的收缩比就是20000:2也就是10000:1,这是很高效的。

描述了那么多,这个方案可以用来解决缓存击穿,实际上它超越了这个问题。这个方案这么好,我们该怎么实现了,在这里我们用 Singleflight 去实现。接下来我将着重讲解 Singleflight 。

一、什么是Singleflight

字面解释就是单飞模式,我通常叫它归并回源策略。它的主要目的是确保在任何给定时间内,对昂贵或重复操作的调用只有一次。当多个 goroutine 请求相同资源时,singleflight 可确保函数只执行一次,并且结果由所有调用者共享。这种模式在不适合缓存或结果会经常变化的情况下特别有用。

二、Singleflight是如何工作的

单飞机制非常简单,它提供了一个Group,每个Group 代表一类工作,我们需要做的就是这类工作中,需要防止重复操作。

  1. 首次启动,第一次请求资源时,会初始化Group并且对计算资源函数进行调用

  2. 并发请求处理,如果在初始请求仍在处理过程中,又有其他对同一资源的请求提出,单飞会保留这些调用。

  3. 结构共享,一旦第一个请求完成,结果将返回给原始调用者,并同时与所有其他等待的调用者共享。

  4. 防止重复,整个过程中,要保证一类工作函数只会调用一次,防止重复工作。

三、Singleflight 的优点

  1. 效率:通过确保只有一个请求完成工作,可避免对服务和数据库造成不必要的负载。

  1. 简单:singleflight 抽象了处理对同一资源的并发请求的复杂性,使您的代码更简洁、更易懂。

  1. 资源优化: 它有助于优化内存和 CPU 的使用,因为相同的计算不会重复多次。

四、Singleflight 的redis 请求

  wg := &sync.WaitGroup{}wg.Add(10)for i := 0; i < 10; i++ {go func() {defer wg.Done()v, _, _ := group.Do("key1", func() (interface{}, error) {client := redis.NewClient(&redis.Options{Addr: "127.0.0.1:6379"},)a := client.Get(context.Background(), "a")return a, nil})fmt.Println(v)}()
​}wg.Wait()

output:

用wireshark 抓包可以看到

只有一个客户端发起了请求,所有的客户端都返回了数据

五、Singleflight 方法讲解

  1. Do:这个方法执行一个函数,并返回函数执行的结果。你需要提供一个 key,对于同一个 key,在同一时间只有一个在执行,同一个 key 并发的请求会等待。第一个执行的请求返回的结果,就是它的返回结果。函数 fn 是一个无参的函数,返回一个结果或者 error,而 Do 方法会返回函数执行的结果或者是 error,shared 会指示 v 是否返回给多个请求。

  2. DoChan:类似 Do 方法,只不过是返回一个 chan,等 fn 函数执行完,产生了结果以后,就能从这个 chan 中接收这个结果

  3. Forget:告诉 Group 忘记这个 key。这样一来,之后这个 key 请求会执行 f,而不是等待前一个未完成的 fn 函数的结果。

Do 和 DoChan 最终都会调用 doCall,只不过 Do 是同步,如果一个key 处理的很慢就可能造成阻塞,DoChan 是异步调用的,这个地方一定要注意不同的key 的数据,每个不同的key 都要开一个goroutine  ,数量多的话就会造成系统的内存OM掉了。这个地方大家一定要注意了,建议用协程池。

http://www.yidumall.com/news/108539.html

相关文章:

  • django 做网站的代码百度关键词挖掘
  • 网上接单平台有哪些啊?东莞网站推广及优化
  • 使用ftp修改网站图片郑州网站推广公司电话
  • 个人做理财网站seowhy论坛
  • 网站做短信接口具体方法大兴今日头条新闻
  • 厦门响应式网站建设今日小说排行榜百度搜索风云榜
  • 公司网站建设外包流程新闻软文范例大全
  • 用插件做网站怎样制作一个网站
  • 网站制作怎么学去哪学微信推广引流加精准客户
  • 怎么给网站做spm拓客团队怎么联系
  • 网站的建设意义深圳做网站的公司
  • 湖南网站建设小公司排名房地产销售怎么找客户
  • 泸州做网站aso苹果关键词优化
  • 深圳珠宝网站设计网站流量统计软件
  • 电商购物南宁seo排名优化
  • 手绘风网站中国培训网的证书含金量
  • 黔东南企业网站建设最新新闻实时新闻
  • 闽侯县住房和城乡建设局网站备案域名交易平台
  • 公司查询天眼官网班级优化大师app下载
  • 无锡网络公司无锡网站设计上海排名seo公司
  • 宁波海曙建设局网站现在疫情怎么样了最新消息
  • 广州大型网站制作公司如何建立一个网站平台
  • 网站建设行业有什么认证吗windows优化大师有用吗
  • 地产网站怎么做人工智能培训班
  • 自学网站开发设计优化设计电子课本下载
  • 番禺网站建设哪家好长沙百度推广优化排名
  • 蛋糕店网站模板金蝶进销存免费版
  • 如何建设基层网站正规百度推广
  • 中国建设行业峰会官方网站搜索引擎优化简称seo
  • 网站营销概念有效的网站推广方式