我正在运行一个 REST API 服务器,但我不太确定基础架构。另外,我可以做些啥来基准测试和提高速度?

Posted

技术标签:

【中文标题】我正在运行一个 REST API 服务器,但我不太确定基础架构。另外,我可以做些啥来基准测试和提高速度?【英文标题】:I am running a REST API server and I'm not too sure about the infrastructure. Also what can I do to benchmark and improve speed?我正在运行一个 REST API 服务器,但我不太确定基础架构。另外,我可以做些什么来基准测试和提高速度? 【发布时间】:2015-03-06 12:51:36 【问题描述】:

我的基础设施是:gandi 域、aws dns、route53 api.domain cname 指向一个启用自签名 ssl 的 elb(具有 1 个 elasticbeanstalk 实例)。 Elasticbeanstalk 实例是基于 docker 的。这意味着 nginx 转发到 docker 实例。 Docker 实例有提供静态文件的 nginx,以及到 golang 的反向代理(fastcgi 到端口 3000)。数据存储在 Amazon RDS 上,并使用 go-sql-driver 访问。

看起来太复杂了,最好的简化方法是什么?

【问题讨论】:

问题的标题和问题完全不同。您想对部署进行基准测试或简化部署吗? 我想进行基准测试然后改进(通过简化部署和任何其他必要手段) 【参考方案1】:

标题问题的答案“我如何进行基准测试(尝试过 ping、traceroute、pingdom)并提高速度?” 最好通过搜索“网站”来回答基准测试”或类似的。有许多网站基准测试工具。 (看看Siege、ab、boom、boom in Go 或 vegeta。还有更多,但这应该可以帮助您入门。)

“看起来过于复杂,简化的最佳方法是什么?”的答案是:

你需要它做什么?

对于一个简单的静态网站,您的设置过于复杂。对于分布式、故障冗余、高可用性站点来说,这远远不够。您需要根据自己的需求调整基础架构。

“route53 api.domain cname 指向一个自签名启用 ssl 的 elb(有 1 个 elasticbeanstalk 实例):” 你需要负载均衡器吗?您要添加更多端点吗?应用程序是否支持这种方式的负载平衡? (将自动处理请求,所有请求都是唯一的等)

"nginx forwards to docker instance:" 你想在 Go 应用程序中管理 SSL 证书,还是在 NginX 配置中管理?您现在运行它的方式可能是目前最简单的,但再次强调,这取决于您的需求。

“Docker 实例具有提供静态文件的 nginx,以及对 golang 的反向代理(fastcgi 到端口 3000):” 这听起来过于复杂(但是,这取决于关于你想要的)。这可以用 nginx 代替,只是在该路径上提供一个静态文件目录吗?你需要fastCGI吗?

" 数据存储在 Amazon RDS 上,并使用 go-sql-driver 访问:" 这对 AWS 来说很好,再次取决于您的要求(性能,合规性等)

希望对您有所帮助。

【讨论】:

感谢您的回答。这是我正在做的一家初创公司,如果它成功了,我的下一步就是扩大规模。我显然需要它具有故障冗余、高可用性、主读副本等等。 我承认,我选择了 ssl 的负载均衡器(起初)。我正在考虑最大化垂直缩放,并在时机成熟时处理水平缩放。关于原子性,我不太确定应用程序将如何执行。至于管理 ssl 证书,我宁愿选择最快的选项。我在 go 中开发了应用程序,认为如果一切顺利,可以添加一个聊天组件。听起来 elasticbeanstalk 可能不够用。不启动 EC2 实例,手动安装 go 最好吗? @macguy 没问题,请注意,我的回答基本上是一堆问题。这些不应被视为批评,并且您建议的设置中的所有组件可能都有正当理由。然而,值得问的是“我怎样才能简化这个?”一直在问。祝你创业顺利! 相反,当我这样说的时候相信我:我非常感激!我问所有这些问题是因为我边走边学,而且我真的不相信我目前的基础设施。我完全同意:不问这些问题,以后肯定会出问题。 @macguy “不启动 EC2 实例,最好手动安装 go 吗?”取决于亚马逊如何处理他们的容器运行时的东西。我现在正在玩 Google 的东西,我认为 CoreOS 和其他一些值得关注...这个空间正在快速发展 :-)

以上是关于我正在运行一个 REST API 服务器,但我不太确定基础架构。另外,我可以做些啥来基准测试和提高速度?的主要内容,如果未能解决你的问题,请参考以下文章

调用Azure REST API时如何使用分页

NGINX 反向代理背后的 Spring Boot API REST

REST API用于连接在线REST服务器

如何在 PowerShell 中使用 Rest API 创建服务更改

Django REST框架的嵌套API视图?

内容服务器 - 如何从 REST API 在文档(节点)中添加分类