提倡模块化设计

Last reviewed 2024-12-06 UTC

Google Cloud 架构完善框架的性能优化支柱中的这一原则提供了一些建议,可帮助您推广模块化设计。模块化组件和清晰的接口可实现灵活的伸缩、独立更新和未来的组件分离。

原则概览

了解应用组件与系统组件之间的依赖关系,以便设计可伸缩的系统。

无论最初部署的是单体架构还是微服务架构,模块化设计都能实现灵活性和弹性。通过将系统分解为具有清晰接口的独立模块,您可以扩缩各个组件以满足特定需求。

有针对性的伸缩容有助于通过以下方式优化资源利用率并降低成本:

  • 仅为每个组件预配必要的资源,并为需求较低的组件分配较少的资源。
  • 在高流量时段添加更多资源,以保持良好的用户体验。
  • 移除利用率低的资源,同时不影响性能。

模块化还可提高可维护性。更小、更独立的单元更易于理解、调试和更新,从而缩短开发周期并降低风险。

虽然模块化具有显著优势,但您必须评估潜在的性能权衡。模块之间通信的增加可能会导致延迟和开销。力求在模块化和性能之间取得平衡。高度模块化的设计可能并不适合所有情况。如果性能至关重要,则可能需要采用更紧密的耦合方法。 系统设计是一个迭代过程,您可以在其中不断检查和优化模块化设计。

建议

如需推广模块化设计,请考虑以下各部分中的建议。

针对松散耦合进行设计

设计松散耦合的架构。 具有最少依赖项的独立组件可帮助您构建可伸缩的弹性应用。 在规划服务边界时,您必须考虑可用性和可伸缩性要求。例如,如果某个组件的要求与其他组件不同,您可以将该组件设计为独立服务。针对不太重要的子进程或不影响主要服务响应时间的服务,实施从容失败方案。

针对并发和并行性进行设计

设计应用时,应使其能够同时支持多项任务,例如在用户与系统互动时处理多项用户请求或运行后台作业。将大型任务分解为多个较小的块,以便多个服务实例可以同时处理这些块。借助任务并发,您可以使用自动扩缩等功能来增加以下产品中的资源分配:

平衡模块化以实现灵活的资源分配

尽可能确保每个组件仅使用特定操作所需的资源(如内存、存储空间和处理能力)。资源过度分配会导致不必要的费用,而资源分配不足则会影响性能。

使用定义完善的接口

确保模块化组件通过清晰、标准化的接口(例如 API 和消息队列)进行有效通信,以减少因转换层或无关流量而产生的开销。

使用无状态模型

无状态模型有助于确保您可以独立于之前的请求处理每个请求或与服务的交互。此模型有助于实现可伸缩性和可恢复性,因为您可以增加、缩减或重启服务,而不会丢失正在处理的请求或进程所需的数据。

选择互补技术

选择与模块化设计相辅相成的技术。评估编程语言、框架和数据库的模块化支持。

如需了解详情,请参阅以下资源: