微服务架构是软件开发中最热门的趋势之一。作为首席技术官,你需要知道何时使用它们。但是你也需要对这个话题有更深的理解,才能真正掌握你的项目。通过进一步了解微服务中的设计模式,您将确切地知道微服务是如何工作的,以及开发人员如何使它们更加高效、可扩展和安全。满足最流行的微服务设计模式。
在上一篇关于微服务的文章中,我们介绍了这种流行软件架构的基础知识。有了这些知识,你就知道微服务最适合哪种项目了。但是一旦你决定去做,就会有更多的决定要做。这就是为什么你应该学习设计模式。
微服务中的设计模式是什么?
如您所知,微服务是一个很大程度上独立的应用程序组件,其任务是系统中的特定功能。多个微服务,每个微服务负责应用程序的另一个功能,与客户端和其他中间层一起构成基于微服务的体系结构。
这种类型的设置有许多优点,例如能够用不同的技术编写任何服务并独立部署它们,以及提高性能。但也带来了一些挑战,包括复杂的管理和配置。
设计模式的存在旨在解决微服务中这种常见的挑战,并提供经过验证的解决方案,让你的架构更高效,整个管理过程更经济、更麻烦。因此,理解它们是更好地理解微服务的好方法——高于实际编码,但足够具体,能够理解微服务的内部工作原理。
为什么要学习设计模式?
选择正确的设计模式可以决定基于微服务的项目的成败。它们是微服务不是万能药的最好证明。要真正受益于它们,你需要正确使用它们。
如果您不关心微服务设计模式:
您的应用程序可能性能不佳。
整个系统会不稳定,
它可能会面临可伸缩性问题,
它可能通过向公众公开微服务的端点或通过其他方式危害安全性。
你可能有更多的维护和调试工作要做,而不是更好的准备。
微服务设计模式的类型
微服务中的设计模式几乎存在于架构的每个方面。一些最重要的问题可以分为以下几个方面:
沟通
它涉及微服务和客户端应用程序之间的通信方法。
内部沟通
这些设计模式构成了微服务之间的各种通信方式。
安全
各种安全相关问题,如安全层的组织、不同类型用户对特定微服务的授权和访问级别等。
有效
确保所有微服务都准备好满足系统需求,并确保尽可能少的停机时间。这包括确保微服务可以在另一台计算机上重新启动,或者是否有足够的计算机可用,以及微服务可以自行报告其当前状态、检查其运行状况等。
服务发现
它指的是微服务用来寻找对方并知道其位置的方法。
配置
设置参数并监控整个系统的性能,以便在进行过程中不断优化。
在本文接下来的部分,我们将集中讨论第一种类型,并讨论三种最流行的通信模式——直接模式、应用编程接口网关以及前端和后端。它们提供了一个很好的机会来理解基于微服务的架构是如何工作的,以及开发人员的选择如何影响其性能。
直接方式
这是基于微服务架构的最基本的设置。在这种模式下,客户端应用程序直接向微服务发送请求,如下图所示。每个微服务都有一个公共端点,客户端可以与之通信。
然而,API网关模式仍然无法避免可伸缩性问题。当架构围绕一个客户端时,这就足够了。但是,如果有多个客户端应用程序,API网关最终可能会膨胀,因为它吸收了来自不同客户端应用程序的所有不同需求。最终,它可能成为一个单一的应用程序,并面临许多与直接模式相同的问题。
因此,如果您计划让基于微服务的系统具有多个客户端或不同的业务域,那么您应该从一开始就考虑使用前端和后端模式。
前端后端
网关API本质上是BFF模式的变体。它还在微服务和客户端之间提供了一个附加层。但它不是一个单一的入口点,而是为每个客户端引入了多个网关。
借助BFF,您可以添加一个根据每个客户端的需求定制的API,从而消除了将它们全部放在一个地方所带来的巨大扩展。结果模式如下图所示。
值得一提的是,这种特定的模式仍然可以扩展到特别复杂的应用程序。您还可以为特定的业务域创建不同的网关。这个模型足够灵活,可以应对任何一种基于微服务的情况。
这是否意味着每个基于微服务的架构都应该使用BFF模式?不一定。设计越复杂,需要的设置和配置就越多。不是每个应用程序都需要这样做。但是,如果您想要创建一个应用程序生态系统或计划在未来扩展它,您可以选择更复杂的通信模式来实现未来的可扩展性。
如果你想了解更多关于BFF的知识,你必须阅读我们前端案例研究的后端——这是一个应用生态系统的故事,它是通过使用模式来重塑的。
其他值得注意的设计模式
正如我前面提到的,设计模式存在于微服务的所有方面。考虑到不同的因素,开发商往往被迫在两者之间做出选择。在其他情况下,它们可以组合或一起使用。
对于内部通信,一些最流行的模式包括REST、gRPC、messagebroker或远程过程调用。在安全性方面,访问控制列表可以用于每个微服务或网关,或者作为独立的微服务。说到可用性,我们可以使用基于DNS或基于硬件的负载平衡。服务发现可以在客户端或服务器端执行。至于配置,可以外化,也可以集中。名单还在继续。
另请参阅:gRPC的实用介绍
结论
随着微服务的日益普及,出现了新的设计模式来帮助解决各种开发挑战,并使体系结构更加高效。尽可能多地了解它们是值得的,但归根结底,还是要为特定的软件生态系统选择合适的软件。说到这一点,相信你的开发人员,但是确保你知道他们的选择和他们对你的软件的影响。
本文:http://jiagoushi.pro/node/1088
讨论:请加入知识星球或小号
感谢关注、转发、点赞、观看。