头图

微服务应该能够扩展的,并专注于单一职责。每个独立的模块化单元负责处理更大系统中的特定功能。对于大型应用程序来说,其构成的方式是模块化组件或服务(例如容器或无服务器计算)。

我们可以把微服务看成是由不同部门、预算和要求组成的业务。每年,这些要求都会伴随公司的需求而变化。随着时间的推移,您的应用程序也不再会面临同样水平的需求。可能有些方面提出了新的需求,而其他方面则需要您付出更多的精力来关注。此外,您的应用程序也需要按照不同的级别来扩展。那些已经使用了微服务的组织能够在不同领域进行扩展,并且不会对其他的领域造成影响,这就是微服务独立扩展所带来的好处。

我们都了解编程中的单一责任原则租户。微服务与其相似。它们需要做的是处理一件事情,并且把这件事情做好。不仅如此,您还可以获得更好的弹性和容错能力。微服务架构旨在通过将故障振荡到单个服务来防止系统范围的故障发生。 如果出现特定故障,我们可以知道故障发生在何处,并且可以在不影响其他任何事情的情况下去解决它。

另一方面,通过使用HashiCorpConsul 等服务网络解决方案,您也可以知道新的服务何时上线,并获得一个集中式系统,该系统会成为服务目录,定义这些服务的用途以及如何与它们通信。

为什么您应该考虑微服务?

  • 加快上市时间:微服务支持并行开发和部署各个组件,从而加快整体开发流程并减少交付新功能所需的时间。
  • 提升可扩展性:微服务可以独立扩展,从而使企业能够更有效地分配资源并更有效地处理不同的工作负载或流量模式。
  • 增强弹性:微服务的分散性降低了系统范围内故障的风险,确保持续的服务可用性和更好的整体系统可靠性。
  • 灵活性与适应性:微服务允许企业针对不同组件利用不同的技术和框架,从而更容易适应不断变化的需求或合并新技术。
  • 更轻松的维护和更新:微服务的模块化设计简化了系统维护和更新,因为可以升级或更换单个组件,而不会影响整个系统。

微服务最佳实践

保持微服务的小规模、专注且对单一业务功能负责是至关重要的。 这种方法允许您添加额外的功能并避免蔓延。 然而,关于理想化的尺寸并不存在固定的规则,因为它会根据具体应用及其要求而变化。

另外,您也需要考虑如何确保您的设计能够应对失败。虽然容错本质上是内置于运行多个服务和微服务的设计中,但它增加了额外的弹性,例如重试机制、断路器和舱壁。可以试想一下为什么船舶会设置有舱壁。这种设计是为了结构完整性,但如果出现问题,舱壁可以关闭并且让船不会沉没,对于微服务来说,我们可以借鉴这种模式。 许多基于事件驱动的架构使用所谓的死信队列。 如果消息无法传递,它将进入特定的队列,可以在其中进行检查以确定失败的原因。

微服务应该基于领域驱动的设计原则进行设计,这意味着基于业务能力对服务进行建模并使用通用语言来确保服务符合业务需求。 领域驱动设计侧重于基于深入的业务领域理解来创建软件系统。其原则有助于指导设计过程并确保软件与领域保持一致并为业务提供价值。 这些原则共同促进了对业务领域的深入理解,并有助于确保开发与业务需求和不断变化的要求紧密结合。

采用 API 优先的方法进行设计并实现 API 网关。这种方式提供中央连接点并且可以促进微服务和第三方子系统之间的通信。API 网关处理大部分路由,负责授权、身份验证和速率限制。 API 的设计模式对于微服务的模块化和可重用性至关重要。

以下是一些其他微服务最佳实践:

  • 自动化测试和部署:使用持续集成和持续部署(CI/CD) 管道等自动化工具测试和部署微服务,从而降低错误风险,确保服务快速、一致地部署。
  • 使用容器化:容器化提供了一种轻量级、可移植的方式来打包和部署微服务。 使用容器化可以帮助简化部署过程并提高应用程序的可扩展性和可移植性。
  • 监控和观察:微服务应该受到监控和记录,以确保它们按预期执行并识别任何问题或错误。 日志聚合器和应用程序性能监控 (APM) 工具可以做到这一点。 跟踪可以洞察分布式系统中的数据流。 这三个支柱有助于提供端到端的性能可见性。
  • 安全服务:应使用身份验证、授权和加密等最佳实践来保护微服务的安全,并且不要忘记容器安全性! 策略应强制执行微服务可以与其他服务对话的内容,以减少整体攻击面。安全性应该成为任何设计的一部分,并在开发的所有阶段进行检查,从而产生更加安全的应用程序并保护敏感数据。

Akamai
1 声望1 粉丝

Akamai 支持并保护网络生活。全球各大优秀公司纷纷选择 Akamai 来打造并提供安全的数字化体验,为数十亿人每天的生活、工作和娱乐提供助力。 我们横跨云端和边缘的计算平台在全球广泛分布,不仅能让客户轻松开发...