如何避免微服务设计中的耦合问题

Distributed monolith (分布一体式)是一个幽默的词,用来暗指那些设计欠佳的架构。如果忽略了微服务设计实践,不仅会无法克服一体式带来的缺点,也会导致出现新的、复杂的问题或恶化已存在的问题。当你在自豪地称之为微服务架构的同时,由于设计上缺少足够目的性的,最终的架构与随机爆破而成的碎片没有什么区别。

避免分布一体式的第一步非常简单:避免同时实现微服务。一体式是简单的,因为无需考虑分布式系统存在的复杂性。一个数据库,一个日志存储位置,一个监控系统,更简单的问题定位,以及端到端测试等等。除非你有充分的理由去使用微服务,否则最好采用同样的理念。

本文将主要关注微服务设计中的松耦合的重要性。我将给出一些简单的、可以避免耦合和导致分布一体式架构设计的例子。

微服务中的松耦合?

两个系统中,如果修改任意一方的设计、实现或行为不会对另一方造成影响,则称两个服务是松耦合的。当涉及到微服务时有可能会发生耦合,即对一个微服务的修改,会立即直接或间接地影响到与其他所有微服务的协作。

下面看一些设计中存在耦合的场景。

数据库共享

数据库共享是实现耦合的一种常见方式。当一个服务修改其实现时,会导致修改另外一个服务的实现。

选择数据存储、方案、以及请求的语言等细节应该对客户端不可见,如果共享了数据库,则可能会暴露所有的实现细节。为什么要隐藏实现细节?这是因为如果暴露了实现细节,那么未来对实现细节进行调整时将有可能会导致客户端代码不可用,除非客户端也同步做了相应的修改(这种方式是不可行或不可持续的)。在图1的左侧,Customers 与 Orders共享了数据库,因此Orders可以访问Customers 的数据模型细节,当这些细节发生变化时,有可能会导致异常。

应该如何处理?

一种方式是像图1的右侧那样,让Customers 提供一个API,Orders客户以通过该API获取customer的数据。只要Customers的合同不变,则数据格式也不会发生变化。Orders 无需知道数据的来源,且Customers 可以自主决定将该数据替换为另一个流数据源,而无需担心对其他服务的影响。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
微服务设计文完整版.pdf》是一本关于微服务设计的完整文版的书籍。这本书主要介绍了微服务设计的基本概念、原理和实践方法。作者系统地讲解了微服务的架构模式、服务拆分和服务通信等关键内容。 首先,书详细介绍了微服务架构模式的基本原理和优势。微服务架构将一个大型的单体应用拆分为多个较小的服务,每个服务负责一个特定的业务功能。这种架构能够提高应用的可扩展性、灵活性和可维护性。 其次,书深入讨论了如何进行有效的服务拆分。作者介绍了几种常见的服务拆分策略,包括按业务功能拆分、按数据拆分、按访问模式拆分等。通过合理的服务拆分,可以降低服务间的耦合度,提高服务的独立性和可复用性。 此外,书还讲解了微服务之间的通信手段。作者介绍了常见的微服务通信协议,如HTTP、消息队列和RPC等,并详细介绍了它们的特点和适用场景。同时,作者还探讨了服务间的版本管理、故障处理和监控等重要问题。 最后,书提供了丰富的实践案例和经验分享。作者分享了自己在微服务设计和实施过程的实际经验,并提供了一些实用的技巧和工具。这些案例和分享可以帮助读者更好地理解和应用微服务设计的原理和方法。 总之,这本《微服务设计文完整版.pdf》是一本详实的微服务设计指南。它不仅介绍了微服务设计的基本概念和原理,还提供了实用的方法和工具,有助于读者理解和应用微服务设计的最佳实践,是一本值得阅读的参考书籍。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值