微服务和云资源限制

Microservices and cloud resource limitations

我正处于从单个单一 Web 服务到使用 Spring Cloud/Spring Cloud Netflix 的微服务集合的大规模迁移的开始。通过我对微服务的研究,我了解到服务之间的分界线应该反映它们之间的关注点分离。影响分离的另一个因素是哪些服务需要单独扩展。

举一个具体的例子,根据所需的粒度级别,微服务环境可能会像这样结束:

或者它可能以括号中的每个关注领域结束,由它们自己的微服务表示,例如:

我相信微服务社区更喜欢第二种方法,我也倾向于同意。但是,我遇到的问题是托管和资源限制之一。

在迁移过程中,我想简化资源配置和更新服务的安装。由于我们使用 AWS 堆栈,Elastic Beanstalk 似乎是完美的选择。在研究 Elastic Beanstalk 时,我很沮丧地发现每个帐户最多只能有 25 个应用程序。不仅如此,EC2 还限制每个帐户每个区域 20 个实例。微服务架构似乎很快就会达到这个极限,尤其是当您为每个服务添加多个环境(暂存和生产)时,更不用说网站和内部工具了。

我在网络上看到了关于微服务的所有令人惊叹的内容,令我感到惊讶和有些失望的是,除了微服务的开发之外,还缺乏关于微服务实际托管的信息。我错过了什么吗?是否有任何关于在 AWS 上部署多个微服务的信息?

据我了解,Netflix自己的微服务托管使用AWS,除了向亚马逊申请额外的资源并砸钱之外,还有其他解决方案吗?他们的 Asgard 工具会帮助解决这个问题(可能通过处理服务之间的实例共享)还是会产生相同的结果?

如以上评论所述,如果您有合法用例,AWS 会提高您的限制 - 为什么不呢?他们从事向您出售服务的业务。

但是由于您除了增加这些限制之外还征求了其他建议,并且由于您处于设计解决方案的早期阶段,您应该考虑将您的微服务架构的一部分基于 Docker 或其他container/container 类似服务(我个人更喜欢 AWS 的容器服务)。根据您解决方案的性质,即使在 20 个 EC2 实例(每个区域)的限制内,如果您有足够大的实例 运行,您也可以容纳数十个(甚至数百个轻量级)docker 图片 运行 在分配的 20 个实例中的每一个上 - 因此在这 20 个 EC2 实例上可能有数百或数千个隔离的微服务 运行。

为您可能拥有的许多微服务中的每一个使用整个 EC2 映像最终可能会比需要的昂贵得多。

您还应该考虑将 AWS Lamba 至少用于您的微服务架构的一部分 - 它也是 AWS 提供的 'ultra-micro service' 工具。