使用Go处理每分钟百万请求(5)
请注意,我们实例化了最大数量的worker,并将其保存到worker池中(就是上面的 WorkerPoolChannel)。由于我们已经将Amazon Elasticbeanstalk用于Docker化的Go项目,并且我们始终尝试遵循12要素方法来配置生产中的系统,因此我们从环境变量中读取这些值,这样我们就可以快速调整这些值以控制工作队列的数量和最大规模,而不需要重新部署集群。
在我们发布了这个版本之后,我们立即看到我们的所有的请求延迟都下降到了一个很低的数字,我们处理请求的效率大大提升。 在我们的弹性负载均衡器完全热身之后的几分钟,我们看到我们的ElasticBeanstalk应用程序每分钟提供近100万次请求。通常在早晨的几个小时里,流量高峰会超过每分钟100万个请求。 我们部署了新的代码,服务器的数量从100台减少到大约20台。 在恰当地配置了集群和自动缩放设置以后,我们在生成环境用4台EC2 c4就能完成工作了。如果CPU在连续5分钟内超过90%,弹性自动缩放系统就自动扩容一个新的实例。 结论 简单总是我的制胜法宝。我们可以设计一个拥有多队列,多后台进程和难以部署的复杂系统,但是相反我们决定利用Elasticbeanstalk的自动缩放和高效简单的方式去并发,Go语言很好的提供了这些功能。 经验告诉我们,用最合适的工具去完成工作。有时,当你的 RubyonRails系统需要实现一个非常强大的处理程序时,可以考虑在 Ruby生态系统之外寻找更简单且更强大的替代解决方案。
(编辑:ASP站长网) |