好吧,在我工作的地方,我们维护了过去几十年编写的相当多的系统。
这些系统多种多样,包括多种操作系统(Linux、Solaris、Windows)、多种数据库(Oracle、sybase 和 mysql 的多个版本),甚至多种语言(C、C++、JSP、PHP 和许多其他语言)用过的。
每个系统都是相当自主的,即使是以将相同的数据输入多个系统为代价。
管理层最近决定,我们应该调查如何让所有系统愉快地相互交谈和共享数据。
请记住,虽然我们可以对任何单个系统进行软件更改,但对任何一个(或更多)系统进行完全重写并不是管理层可能会接受的事情。
这里几个开发人员的第一个想法是直截了当的:如果系统 A 需要来自系统 B 的数据,它应该连接到系统 B 的数据库并获取它。同样,如果它需要给 B 数据,它应该只是将它插入到 B 的数据库中。
由于使用的数据库(和版本)混乱,其他开发人员认为我们应该拥有一个新数据库,将来自所有其他系统的表结合起来,以避免不得不处理多个连接。通过这样做,他们希望我们能够合并一些表并摆脱冗余数据输入。
这大约是我被请来对整个混乱发表意见的时候了。
使用数据库作为系统通信手段的整个想法对我来说很有趣。业务逻辑必须放置在多个系统中(如果系统 A 想向系统 B 添加数据,则在插入之前更好地理解 B 的有关数据的规则),几个系统很可能必须进行某种形式的数据库轮询才能找到对其数据的任何更改,持续维护将是一件令人头疼的事情,因为对数据库模式的任何更改现在都会传播多个系统。
我的第一个想法是花时间为不同的系统编写 API/服务,一旦编写,就可以轻松地来回传递/检索数据。许多其他开发人员认为这比仅仅使用数据库要多得多,而且工作量要大得多。
那么让这些系统相互通信的最佳方式是什么?