ThoughtWorks数字平台战略:构建数字平台 助力企业创新
上QQ阅读APP看书,第一时间看更新

交付基础设施解读

下面我们来看看,在“交付基础设施”这顶帽子下面,架构师/技术领导者们究竟应该关心哪些问题,又有哪些最佳实践应该被纳入他们的视线。

交付基础设施

快速交付

弹性基础设施

持续交付流水线

部署运行时

监控

安全

API和架构治理

构建生态系统

开发者体验(DX)

服务边界

事件驱动架构

公共网关

微服务SOA拓扑

数据自服务

获取洞见

数据流水线设计

实时架构和API

数据湖设计

数据即产品

细粒度授权

创新实验基础设施和监控体系

有序地创新

数据采集

金丝雀发布

Toggle架构

路由技术

埋点和可视化

客户触点技术

一致的体验

统一客户视角

内容战略

个性化

移动应用持续交付

跨渠道引流

1 弹性基础设施

允许交付随需获得计算能力。在微服务语境下,这种弹性有两层常见的含义:在生产环境下,服务可以随负载动态获得和释放计算资源,从而更高效地使用计算资源,更自动化地应对负载变化;在研发环境下,开发、测试、运维等不同角色可以随需动态获得完整的环境,从而统一环境、标准化研发实践、规范化研发能力,并且给研发提供体验更好的开发环境。

为了实现弹性基础设施,一方面基础设施需要支持弹性,例如使用支持弹性计算的公有/私有云,并且有对生产环境的监控和自动化手段;另一方面应用本身需要有可扩展性,例如服务能分别独立部署、无状态化、容器化、有透明的前端负载均衡机制。有状态服务(比如数据库服务)的弹性伸缩问题是特别需要考虑的重要挑战。

2 持续交付流水线

用持续交付实践打通微服务的开发、构建、验证和部署流程。在数字化、服务化的背景下,众多互相依赖的微服务形成的系统架构,对构建、验证和部署造成更大的压力:各个服务有独立的代码库和构建流程,又需要随时能组合成可用的软件;构建产物需要有统一的存储管理;完整的运行时环境应该能按需获得;配置和部署应该能快速准确地完成。

为了应对这些挑战,交付基础设施中应该包含完整的持续交付概念:流水线、环境管理、构建产物管理等。应该鼓励对服务虚拟化,最好是每个主机运行一个微服务,而不共享使用主机。应该包含配置自动化工具,例如Chef、Puppet等。在服务化的背景下,持续交付流水线需要体现服务间的依赖关系和团队间的协作关系,设计一个运转良好的流水线不是容易的任务。

3 部署运行时

交付基础设施应该包含生产系统所使用的运行时环境,并把生产环境前向拉通到验证和研发环节。为了在研发流程的出口得到服务化友好的交付物,最好是在整个开发过程中一直使用与生产环境近似的环境。例如开发人员应该使用全套环境随时验证,自动化测试和手工测试都基于全套环境开展。在这种情况下,环境的设置、管理、更新不可能由每个开发人员和测试人员自己进行,所以环境的管理更新必定是集中进行的,环境的设置必定是自动化的。

在《技术栈管理:云时代的研发环境》一文中,我们已经介绍过“一个平台、两个PaaS服务、三个运行时环境”的技术栈管理理念。特别需要注意的是,如何将生产数据拉通到验证和研发环节。

4 监控

在微服务架构中,系统由多个小服务组成,且广泛使用异步通信,使问题和故障更难定位。因此交付基础设施需要提供全面可靠的监控机制,帮助交付团队了解系统的整体状况。监控的实现涉及日志、服务指标跟踪、业务语义综合监控等方式。在云环境下如何划分和管理监控的层级,监控系统如何无侵入的在各个微服务体系中收集故障和信息,如何有效管理监控的反馈环,如何在前后端分离和移动应用情况下收集和监控客户端日志,都是常见的挑战。

5 安全

当数字化、服务化IT系统的数量剧增,安全的设置会变得更加复杂。在微服务架构下,系统的安全性需要有一个整体的考虑。例如单点登录、服务间的身份验证和授权、各种防御措施等安全考量不应该下放到交付团队,而应该被涵盖在交付基础设施中统一提供、统一管理、统一更新。

交付基础设施还应该鼓励安全实践内建(Build Security In),例如团队应该熟悉OWASP安全列表和测试框架、需求分析中应该包含安全需求和恶意用户需求、测试过程中应该包含安全性测试、应该进行自动化安全性测试并纳入持续交付流水线。这些流程与工作方法虽然不能完全以软件代码的形式承载,但它们同样是交付基础设施的重要组成部分。