加入收藏 | 设为首页 | 会员中心 | 我要投稿 辽源站长网 (https://www.0437zz.com/)- 云专线、云连接、智能数据、边缘计算、数据安全!
当前位置: 首页 > 运营中心 > 建站资源 > 优化 > 正文

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

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

请注意,我们实例化了最大数量的worker,并将其保存到worker池中(就是上面的 WorkerPoolChannel)。由于我们已经将Amazon Elasticbeanstalk用于Docker化的Go项目,并且我们始终尝试遵循12要素方法来配置生产中的系统,因此我们从环境变量中读取这些值,这样我们就可以快速调整这些值以控制工作队列的数量和最大规模,而不需要重新部署集群。

  1. var (  
  2.   MaxWorker = os.Getenv("MAX_WORKERS")  
  3.   MaxQueue  = os.Getenv("MAX_QUEUE")  

在我们发布了这个版本之后,我们立即看到我们的所有的请求延迟都下降到了一个很低的数字,我们处理请求的效率大大提升。

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

在我们的弹性负载均衡器完全热身之后的几分钟,我们看到我们的ElasticBeanstalk应用程序每分钟提供近100万次请求。通常在早晨的几个小时里,流量高峰会超过每分钟100万个请求。

我们部署了新的代码,服务器的数量从100台减少到大约20台。

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

在恰当地配置了集群和自动缩放设置以后,我们在生成环境用4台EC2 c4就能完成工作了。如果CPU在连续5分钟内超过90%,弹性自动缩放系统就自动扩容一个新的实例。

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

结论

简单总是我的制胜法宝。我们可以设计一个拥有多队列,多后台进程和难以部署的复杂系统,但是相反我们决定利用Elasticbeanstalk的自动缩放和高效简单的方式去并发,Go语言很好的提供了这些功能。

经验告诉我们,用最合适的工具去完成工作。有时,当你的 RubyonRails系统需要实现一个非常强大的处理程序时,可以考虑在 Ruby生态系统之外寻找更简单且更强大的替代解决方案。

(编辑:辽源站长网)

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

推荐文章
    热点阅读