![ThoughtWorks数字平台战略:构建数字平台 助力企业创新](https://wfqqreader-1252317822.image.myqcloud.com/cover/816/933816/b_933816.jpg)
交付基础设施解读
下面我们来看看,在“交付基础设施”这顶帽子下面,架构师/技术领导者们究竟应该关心哪些问题,又有哪些最佳实践应该被纳入他们的视线。
交付基础设施
![](https://epubservercos.yuewen.com/28A00C/10691553404398901/epubprivate/OEBPS/Images/figure_0010_0001.png?sign=1738890171-2LQnphTTYhsJabVlzp3HpeIsdhE7vG2g-0-78c9a87bfc0d1d0952bd14942485ed31)
快速交付
弹性基础设施
持续交付流水线
部署运行时
监控
安全
API和架构治理
![](https://epubservercos.yuewen.com/28A00C/10691553404398901/epubprivate/OEBPS/Images/figure_0010_0002.png?sign=1738890171-VTB0mNtPYVCmhpdsiSSvUqsCIh2FmcLp-0-ab85985c1a5d12f338fbaa577188e17a)
构建生态系统
开发者体验(DX)
服务边界
事件驱动架构
公共网关
微服务SOA拓扑
数据自服务
![](https://epubservercos.yuewen.com/28A00C/10691553404398901/epubprivate/OEBPS/Images/figure_0010_0003.png?sign=1738890171-OwBYHp2LkYF5iMSX6kQhfBA9bu73fwKs-0-12d7df9d00a1bda1a0365a697afcde93)
获取洞见
数据流水线设计
实时架构和API
数据湖设计
数据即产品
细粒度授权
创新实验基础设施和监控体系
![](https://epubservercos.yuewen.com/28A00C/10691553404398901/epubprivate/OEBPS/Images/figure_0010_0004.png?sign=1738890171-QpYXG0F39EW2PBKGcjZaXPVpMUzFO0rH-0-fdab103edf90e4e6185d2c783407acfd)
有序地创新
数据采集
金丝雀发布
Toggle架构
路由技术
埋点和可视化
客户触点技术
![](https://epubservercos.yuewen.com/28A00C/10691553404398901/epubprivate/OEBPS/Images/figure_0010_0005.png?sign=1738890171-AnslmniSAb9OMF1oCuHrjGJaPYeEdz9S-0-85eee13d51ca80106972c20f3ea06e36)
一致的体验
统一客户视角
内容战略
个性化
移动应用持续交付
跨渠道引流
1 弹性基础设施
允许交付随需获得计算能力。在微服务语境下,这种弹性有两层常见的含义:在生产环境下,服务可以随负载动态获得和释放计算资源,从而更高效地使用计算资源,更自动化地应对负载变化;在研发环境下,开发、测试、运维等不同角色可以随需动态获得完整的环境,从而统一环境、标准化研发实践、规范化研发能力,并且给研发提供体验更好的开发环境。
为了实现弹性基础设施,一方面基础设施需要支持弹性,例如使用支持弹性计算的公有/私有云,并且有对生产环境的监控和自动化手段;另一方面应用本身需要有可扩展性,例如服务能分别独立部署、无状态化、容器化、有透明的前端负载均衡机制。有状态服务(比如数据库服务)的弹性伸缩问题是特别需要考虑的重要挑战。
2 持续交付流水线
用持续交付实践打通微服务的开发、构建、验证和部署流程。在数字化、服务化的背景下,众多互相依赖的微服务形成的系统架构,对构建、验证和部署造成更大的压力:各个服务有独立的代码库和构建流程,又需要随时能组合成可用的软件;构建产物需要有统一的存储管理;完整的运行时环境应该能按需获得;配置和部署应该能快速准确地完成。
为了应对这些挑战,交付基础设施中应该包含完整的持续交付概念:流水线、环境管理、构建产物管理等。应该鼓励对服务虚拟化,最好是每个主机运行一个微服务,而不共享使用主机。应该包含配置自动化工具,例如Chef、Puppet等。在服务化的背景下,持续交付流水线需要体现服务间的依赖关系和团队间的协作关系,设计一个运转良好的流水线不是容易的任务。
3 部署运行时
交付基础设施应该包含生产系统所使用的运行时环境,并把生产环境前向拉通到验证和研发环节。为了在研发流程的出口得到服务化友好的交付物,最好是在整个开发过程中一直使用与生产环境近似的环境。例如开发人员应该使用全套环境随时验证,自动化测试和手工测试都基于全套环境开展。在这种情况下,环境的设置、管理、更新不可能由每个开发人员和测试人员自己进行,所以环境的管理更新必定是集中进行的,环境的设置必定是自动化的。
在《技术栈管理:云时代的研发环境》一文中,我们已经介绍过“一个平台、两个PaaS服务、三个运行时环境”的技术栈管理理念。特别需要注意的是,如何将生产数据拉通到验证和研发环节。
4 监控
在微服务架构中,系统由多个小服务组成,且广泛使用异步通信,使问题和故障更难定位。因此交付基础设施需要提供全面可靠的监控机制,帮助交付团队了解系统的整体状况。监控的实现涉及日志、服务指标跟踪、业务语义综合监控等方式。在云环境下如何划分和管理监控的层级,监控系统如何无侵入的在各个微服务体系中收集故障和信息,如何有效管理监控的反馈环,如何在前后端分离和移动应用情况下收集和监控客户端日志,都是常见的挑战。
5 安全
当数字化、服务化IT系统的数量剧增,安全的设置会变得更加复杂。在微服务架构下,系统的安全性需要有一个整体的考虑。例如单点登录、服务间的身份验证和授权、各种防御措施等安全考量不应该下放到交付团队,而应该被涵盖在交付基础设施中统一提供、统一管理、统一更新。
交付基础设施还应该鼓励安全实践内建(Build Security In),例如团队应该熟悉OWASP安全列表和测试框架、需求分析中应该包含安全需求和恶意用户需求、测试过程中应该包含安全性测试、应该进行自动化安全性测试并纳入持续交付流水线。这些流程与工作方法虽然不能完全以软件代码的形式承载,但它们同样是交付基础设施的重要组成部分。