用于多个简单api客户端的云架构模式(200-500次api调用/天)



我必须编写一个连接到多个api服务器、执行任务并断开连接的api客户端系统。它做了两件简单的事情,但需要大规模地完成(即:目标是每天200-500米的API出站客户端呼叫):

(1) 简单客户端连接到API服务器(http://rest),发送查询,接收响应(基于文本),保存响应以备将来使用,然后转到下一个服务器/查询。

一旦开始收到回复,就会有一个单独的过程:

(2) 解析响应中的文本,并将它们添加到用于报告的大文件/队列中

我目前有一个C#测试系统,在一台机器上运行20个控制台应用程序,每个控制台应用程序中有20个线程客户端来执行工作。我需要能够根据需要扩大规模。做到这一点的最佳方法是什么。。。我确信这个简单的问题存在一个可靠的模式?

到目前为止,我的想法是:

->设计一个管理系统,根据给定小时内要查询的API服务器的数量,协调虚拟机的供应(不试图重新设计轮子-如果合适,将挂钩到任何现有的框架,如厨师/木偶等)

->有一个中央系统,用于从api客户端收集数据(可能是一个节点实例,将数据传递给RabbitMQ,以便稍后拾取/处理)

->具有单独的管理系统,该管理系统对从API客户端接收的数据的文本解析进行编排。

->由于该项目是受网络延迟限制的,所以我认为只要有良好的网络支持,开发语言就并没有真正的相关性。

我的主要问题是:

(1) 什么是最合适的语言/框架来实现这一点,以实现精益/成本效益高的系统。。。例如,如果多个Windows虚拟机的占用空间/开销/成本比在linux中做同样的事情大,那么旋转它们就没有意义了?(所以在这种情况下,我可以使用mono框架-获得我的团队所知道的C#的好处,但linux虚拟机的成本更低…)

(2) 我认为必须旋转多个虚拟机才能做到这一点是否正确(尽管每个虚拟机都运行X个客户端应用程序)?

(3) 我想到的另一种方法是用Javascript编写客户端,原因是api客户端的瓶颈是网络和api服务器的响应时间,而不是客户端,所以它可能非常适合异步工作。。。。在这种情况下,我可以让一个节点服务器运行比我在一堆微窗口虚拟机中运行的api客户端多100倍的api客户端?

(4) 最后,我是在重新发明轮子吗。。。亚马逊或Azure上有什么东西可以让我插入,为我的需求提供一个现成的框架吗?

欢迎所有意见、建议和指导。

非常感谢。

我不是亚马逊提供服务的专家。以下是您可以根据需要在Azure上使用的内容:

  1. 工作者角色-这是一个非常可扩展的虚拟机。您可以按条件缩小或自动缩放
  2. AppFabric和Microservices-用于更复杂的部署和更精细的开发基础设施
  3. Azure功能-一个有趣的可扩展且经济高效的处理选项。看看吧

在选择语言方面,如果你的应用程序不是太复杂,而且在不久的将来不会太复杂,我会使用Node.js。C#更适合于具有复杂体系结构的更坚固的系统。Azure支持这两个平台。

拥有一个用于从api客户端收集数据的中央系统(可能是一个节点实例,将数据传递给RabbitMQ以备将来使用拾取/处理)

如果您需要非常大的吞吐量,RabbitMQ可能不够。在Azure上,您可以使用EventHub。点击此处了解更多信息。

"最后,我是不是在重新发明轮子?"这是一个很好的问题-你可能是。从你的描述来看,你有很多对服务器和虚拟机的专有管理。根据您的工作负载,您可能根本不需要管理任何传统虚拟机。如果可以的话,尽量避免这种情况。有一些伟大的技术使服务器管理(补丁、安全、服务器管理等)成为许多工作负载的过去:事件驱动的计算框架,如AWS Lambda。

考虑使用API网关模式和微服务架构模式的无服务器实现,使用以下AWS服务:

  1. AWS Lambda是一项计算服务,您可以在其中将代码上传到AWS Lambda,该服务可以使用AWS基础设施代表您运行代码。上传代码并创建我们称之为Lambda函数后,AWS Lambda将负责配置和管理用于运行代码的服务器。重量很轻。每月前100万个请求是免费的

  2. "Amazon API网关是一项完全管理的服务,使开发人员能够轻松发布、维护、监控和保护任何规模的API。"每百万次调用3.5美元。扩展、安全和管理均内置。Lambda支持通过API网关指定HTTP端点,以触发Lambda功能。

AWS Lambda提供了一种无需管理即可构建后端的简单方法服务器。API网关和Lambda一起可以强大地创建和部署无服务器Web应用程序。在本演练中,您将学习如何创建Lambda函数并构建API网关API以启用Web客户端同步调用Lambda函数。

如果您的工作负载需要,您还可以集成用于数据转换的DataPipeline和用于排队/消息传递的简单排队服务。

如果你正在做任何有状态和大规模的事情,Service Fabric可能是比Azure Functions/Lambda或Worker Roles更好的选择。

https://azure.microsoft.com/en-us/services/service-fabric/

相关内容

  • 没有找到相关文章

最新更新