我正在接手一个项目,从头开始替换一个古老的遗留系统。在我上任之前,公司聘请了一位顾问,他整理了系统的基本草图并大力推动 SOA。这导致了一长串“实体服务”,目的是将它们组合成更复杂的服务组合。例如,想要获得委员会信息的用户会点击“委员会”服务,然后调用“个人”服务来获取其成员,并调用“会议”服务来获取其会议,等等。
我理解这样做的灵活性,但我担心的是性能。在我看来,以如此精细的服务粒度构建的系统在翻译服务消息上花费了太多资源,并且性能将无法接受。在我看来,仍然可以使用基本的可重用对象来获得灵活性增益,尽管在这种情况下,与技术无关的接口的好处会失去以获得性能。
更多背景信息:请求此软件的组织目前没有需要集成的稳定的第三方软件套件。该软件将取代所有套件。目前也没有外部消费者需要访问提供的网站界面之外的数据——所有服务调用都来自我们系统内的其他部分。在这种情况下选择 SOA 似乎完全基于“准备”的概念。
所以我的问题是——在不牺牲性能的情况下,稳定的服务可以接受什么样的粒度级别?我是否对我们将所有实体实现为服务所带来的性能影响持怀疑态度?功能是否应该仅在需要时作为 Web 服务提供,而将“准备”的重点放在设计业务层上,以便以后将服务丢弃在其之上?