- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
这是我目前在这个问题上的发现,这些是正确的还是缺少某个方面?
微服务有两大原则:
对于共享数据库(如非解耦)架构,这两个原则都没有涵盖。这是由于以下事实:
为避免上述问题:解耦数据库可以与微服务一起使用,而不是共享数据库。所以每个微服务都应该有自己的数据库。这也将简化系统的扩展,提供更多的系统可用性,因为“只有”一个真正受影响的服务会失败。
更新:微服务的另一个好处是它可以提高开发的灵 active 和速度。由于正确分解了微服务,因此可以独立开发和部署,并与其他服务并行。
最佳答案
值得一提的是,微服务不必共享相同的模式,通常称为 Integration Database antipattern。 .但实际上,只要每个微服务使用自己的模式,您就可以在同一个关系数据库中使用不同的模式。这里重要的是能够随时轻松地将一些微服务数据移动到不同的物理服务器。部署和备份 1 个数据库要比部署和备份 7 个左右的数据库简单,这意味着如果您刚刚开始项目并且不想花太多时间管理一堆数据库,则此选项是一个不错的选择.但是您和您的团队必须非常自律,以确保微服务只与来自它们自己的模式的数据对话。
另一件事是耦合。你不能让微服务完全隔离,这意味着它们仍然会在一定程度上相互依赖。仅举一个简单的 Product、Order、Shipment 服务的例子。这些服务必须相互了解,无法将它们完全分开。但是您可以通过使用 certain design strategies 使它们暂时分离 .当服务以这种方式解耦时,它们中的每一个都可以在一段时间内不可用(例如重新部署),而不会影响其他服务。
Due to the more monolithic architecture which goes with shared databases a failure can affect many servers since they are all tied together, even a complete system failure can happen due to the coupling.
即使您的微服务不共享同一个数据库,时间耦合也会产生同样的效果。要遵循的简单规则:不要从一个微服务同步调用另一个微服务,而是使用异步事件和命令。
关于database - 在微服务上解耦数据库的原因是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41739975/
我是一名优秀的程序员,十分优秀!