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