我目前正在尝试 Zeromq 并构建一个面向分布式服务的架构。每个服务都需要操作公共(public)数据库中的数据。
最好的方法是什么:
- 在定义模型的所有服务中使用共享库。每个服务都连接到数据库
- 使用抽象数据库的数据服务。所有其他服务都通过此服务访问数据。可以使用 Protocol Buffer 传输数据。
第二个选项对我来说似乎更干净,但我担心会对性能产生影响,因为每个数据请求都需要多一次网络通信。
将来可能会有数据库以外的数据源。这就是为什么我想到了第二种选择,但我担心它会过度设计。
最佳答案
既然你要“做对”,构建一个分布式的面向服务的系统,用 Zeromq 启动,我想说你应该走完全程,把一个服务放在数据库前面。
关于性能,请记住 Knuth 的建议:过早的优化是万恶之源。最好选择更清洁的选项,然后根据需要进行优化,除非您事先知道将会遇到性能问题。 此外,如果将来有需要,抽象数据库应该可以让您更轻松地进行扩展(例如通过分发、缓存等)。
话虽这么说,如果您正在考虑的另一个选项是共享库,并且假设它也是实现速度更快的选项,那么您始终可以以这种方式开始并稍后更改它 - 只需更改共享库即可工作使用服务而不是直接使用数据库,并且您的所有服务都应该没问题。关于architecture - ZeroMQ 服务和数据访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5442161/