Google Cloud 架构框架的性能优化支柱中,这一原则提供了一些建议,可帮助您推广模块化设计。模块化组件和清晰的接口可以实现灵活伸缩、独立更新和未来的组件分离。
原则概览
了解应用组件与系统组件之间的依赖关系,以设计可伸缩的系统。
无论最初部署的是单体架构还是微服务架构,模块化设计都能实现灵活性和弹性。通过将系统分解为具有明确接口的定义明确的独立模块,您可以扩展各个组件以满足特定需求。
有针对性地进行伸缩可通过以下方式帮助优化资源利用率并降低费用:
- 仅向每个组件预配必要的资源,并向需求较低的组件分配较少的资源。
- 在高流量时段添加更多资源,以保持用户体验。
- 移除利用率低的资源,而不影响性能。
模块化还可以提高可维护性。较小的自包含单元更易于理解、调试和更新,这有助于缩短开发周期并降低风险。
虽然模块化具有显著优势,但您必须评估潜在的性能权衡。模块之间的通信增加可能会导致延迟和开销。力求在模块化与性能之间取得平衡。高度模块化的设计可能并不适用于所有情况。如果性能至关重要,则可能需要采用更紧密耦合的方法。系统设计是一个迭代过程,您需要在此过程中不断审核和优化模块化设计。
建议
如需提倡模块化设计,请考虑以下部分中的建议。
设计松散耦合
设计松散耦合的架构。具有最少依赖项的独立组件有助于您构建可伸缩且弹性佳的应用。在规划服务边界时,您必须考虑可用性和可伸缩性要求。例如,如果某个组件的要求与其他组件不同,您可以将该组件设计为独立服务。针对不太重要的子进程或不会影响主要服务响应时间的服务,实现顺畅失败方案。
并发和并行设计
设计应用以支持同时执行多项任务,例如在用户与您的系统互动时处理多个用户请求或运行后台作业。将大型任务拆分为多个较小的块,以便多个服务实例同时处理。借助任务并发功能,您可以使用自动扩缩等功能来增加以下产品中的资源分配:
平衡模块化以实现灵活的资源分配
尽可能确保每个组件仅针对特定操作使用必要的资源(例如内存、存储空间和处理能力)。资源过度分配可能会导致不必要的费用,而资源分配不足可能会影响性能。
使用定义完善的接口
确保模块化组件通过清晰、标准化的接口(例如 API 和消息队列)有效通信,以减少转换层或外来流量带来的开销。
使用无状态模型
无状态模型有助于确保您可以独立于之前的请求处理每个请求或与服务的交互。此模型有助于实现可伸缩性和可恢复性,因为您可以增加、缩减或重启服务,而不会丢失正在处理的请求或进程所需的数据。
选择互补技术
选择与模块化设计相辅相成的技术。评估编程语言、框架和数据库是否支持模块化。
如需了解详情,请参阅以下资源: