加入收藏 | 设为首页 | 会员中心 | 我要投稿 西安站长网 (https://www.029zz.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 建站 > 正文

使用Go处理每分钟百万请求

发布时间:2019-07-03 13:09:43 所属栏目:建站 来源:MarcioCastilho
导读:副标题#e# 这篇文章在medium上很火,作者以实际案例来分析,讲得很好。 我们经常听说使用Go的goroutine和channel很容易实现高并发,那是不是全部代码都放在goroutine中运行就可以实现高并发程序了呢?很显然并不是。这篇文章将教大家如何一步一步写出一个简

我们需要找到另一种的方法。从一开始我们就开始讨论如何让请求处理程序的生命周期尽可能的短,并在后台产生处理。当然,这是在 RubyonRails必须要做的事情,否则,不管你是使用puma,unicorn还是 passenger,你的所有的可用的web worker都将阻塞。

那么我们就需要利用常见的解决方案来完成这项工作,比如Resque,Sidekiq, SQS等。当然还有其他工具,因为有很多方法可以实现。

因此,我们第二次改进是创建一个buffer channel,我们可以将一些作业请求扔进队列并将它们上传到S3,由于我们可以控制队列的最大长度,并且有足够的RAM来排队处理内存中的作业,因此我们认为只要在通道队列中缓冲作业就行了。

  1. var Queue chan Payload 
  2.  
  3. func init() { 
  4.     Queue = make(chan Payload, MAX_QUEUE) 
  5.  
  6. func payloadHandler(w http.ResponseWriter, r *http.Request) { 
  7.     ... 
  8.     // Go through each payload and queue items individually to be posted to S3 
  9.     for _, payload := range content.Payloads { 
  10.         Queue <- payload 
  11.     } 
  12.     ... 

(编辑:西安站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读