我正在研究棕色迁移策略(来自pluralsight课程),您可以在其中创建1个API/monolith表。我目前所在的团队正在从一个巨石迁移到一个将在AWS上生存的微服务架构。
这是我遇到的一个问题/疑问:
我有两个表(连接),以及一个使用这两个表创建对象的Oracle存储过程。当然,Oracle是非常高效的。
但是,如果我将这两个表中的每一个放在单独的REST API中,那么创建结果对象将涉及:-从表1中获取1/3的数据-从表2中获取1/2的数据-使用Java从这两个数据集(数百万条记录)构造结果。
我听到了两个关于这个问题的回应: 1)不用担心,你在云上拥有几乎无限的计算能力,例如/一个EC2实例/微服务。如果你的应用程序接口/服务必须做一些繁重的工作(获取/处理数百万条记录),那就给它的EC2实例提供大量的能力(cpus、内存、存储等)。
还有..。
2)将'both‘表移到同一个api中。
我不确定答案1,至于答案2,有时会涉及多个表,例如10+!同样,在解决方案2中,当您可能需要获取多个1000/1000s的records+时,也会出现同样的问题!
欢迎提出任何建议!!:)
发布于 2019-06-25 13:36:33
好吧,微服务并不意味着一个服务可以有一个端点。根据需求,一个微服务可能有几个端点。如果您只需将多个表放入一个服务,就可以从您的服务中获得更多收益,那么就这么做吧。
另一方面,Oracle PL/SQL比在Java代码中组合它们要高效得多。如果您将它们放在两个或更多不同的服务中,您将不得不更加注意应用程序中的许多事情以及性能,因为您的表有数百万个条目。
更新:
关于您的第一个解决方案,即使您要在AWS上部署此解决方案,而且实际上AWS具有无限的处理能力,但这将花费您一大笔钱。AWS的处理能力并不便宜。特别是,如果你能做点什么来降低成本。
发布于 2019-06-25 13:20:33
我不知道您的确切架构,但您应该直接在Oracle上执行像表连接这样的操作,而不是分别访问每个表,然后从Java代码组合/聚合。采用这种方法应该比你目前正在做的事情更有效率。即使这些表驻留在不同的Oracle实例上,执行跨数据库查询、连接/聚合,然后将单个结果集返回给Java代码可能会更有效。
https://stackoverflow.com/questions/56747239
复制相似问题