来自与主要 ISV 的 DevOps Hackfest 的经验教训





2.00/5 (1投票)
微软与一家主要的独立软件供应商 (ISV) 合作,识别并改进该供应商的 DevOps 实践,重点关注监控。
微软与一家主要的独立软件供应商 (ISV) 合作,识别并改进该供应商的 DevOps 实践,重点关注监控。他们共同开发了一个解决方案,提供了多项 DevOps 优势,包括应用程序性能监控、自动化部署和使用遥测技术。
客户简介
该 ISV 是领先的软件制造商,其软件可帮助客户通过单一界面构建和管理网站和移动网站、运行电子邮件营销活动以及发布内容到社交论坛。
该公司已增加对云服务的投资,并正在将新旧产品迁移到软件即服务 (SaaS) 模型,在此模型中,他们为客户托管系统。这带来了巨大的潜力,也带来了新的挑战。
问题陈述
尽管该 ISV 没有官方的 DevOps 策略,但员工一直在使用多项 DevOps 实践,例如持续集成和交付、基础设施即代码以及自动化测试。这些实践带来了更好的流程透明度和更快的交付速度。
然而,即使在实施了这些 DevOps 实践之后,他们认为仍有改进的空间。随着向云服务的迁移,随着客户采用他们的 SaaS 产品,运营的负担正在增加。
考虑到这一点,他们与微软携手合作,举办了一场 Hackfest,以识别 SaaS 管道中潜在的改进点。
解决方案、步骤和交付
首先,微软和 ISV 的联合团队使用了价值流图 (VSM),这是一种识别应用程序管道中优势和潜在改进点的方法。这项实践源自精益制造,并易于应用于 IT 服务交付,以优化流程并改善协作。
VSM 练习的重点在于描绘将想法转化为产品或服务的整个过程,记录产品负责人、开发、测试、运营等部门需要采取的所有必要步骤。
这项练习应绘制出应用程序开发管道中各个步骤之间的平均工作时间和等待时间,清晰地展示每个步骤的完成时间以及到下一个步骤开始前的时间。
该团队根据传统的应用程序生命周期管理 (ALM) 原则执行了价值流图,这些原则涵盖计划、开发/测试、发布和监控/学习。通过包含 DevOps 实践,他们可以将其提升到一个新的水平。

通过这项练习,他们了解到,如果优先处理,他们当前的流程能够让他们在不到 9 天的时间内将新功能和修复部署到生产环境,并且他们从常规冲刺中部署的平均周期为 26 天。
白板截图显示了针对特定 SaaS 应用程序的 VSM 练习结果。使用更传统的技术,如白板进行 VSM 工作,有助于提升团队体验,并取得非常明显、切实的成果。

监控与学习
ISV 仅监控在线服务的可用/不可用状态,并且仅收集非常基础的使用遥测数据。基于这一结论,Hackfest 团队重点关注了两个监控领域:
- 应用程序性能监控。他们希望通过监控应用程序的性能来更好地了解正在运行的服务。他们从 DevOps 中了解到,了解应用程序的运行状况对于缩短发生故障时的恢复时间至关重要。这也有助于确保用户不仅能够访问应用程序,而且能够从中获得预期的性能和体验。通过应用程序性能监控,团队可以深入了解应用程序,并收集详细的性能数据和应用程序异常,工程师可以利用这些数据来优化和排除服务故障—在需要时为负责修复问题的团队提供正确的信息。
- 使用遥测技术。该团队计划收集使用遥测数据,以收集有关用户行为和应用程序功能使用情况的数据。DevOps 已证明,在就新旧应用程序功能做出决策时,使用正确的数据非常重要。这些数据是通过监控正在运行的应用程序的使用情况,然后进行分析以了解如何最好地改进应用程序来收集的。
该团队决定通过 Hackfest 解决方案来加强反馈循环(监控和学习),并提供使用遥测技术和深入的应用程序监控。
Hackfest
两家公司选择使用 Visual Studio Application Insights,这是一个 Azure 应用程序遥测服务,来了解 ISV 服务的用法、健康状况和可用性。
Application Insights 提供自动化的 Web 测试,可以从世界任何 Azure 数据中心运行,以确保各种市场的可用性。可以轻松地从门户创建 Web 测试。这对于简单场景效果很好;然而,在这种情况下,测试的数量和属性非常不稳定,并且可能因租户而异。因此,Hackfest 团队需要能够以编程方式描述 Web 测试。
解决方案概述
通过使用 Application Insights,团队能够通过 XML 架构来描述 Web 测试。
<WebTest Name="WebTest1" Id="0000-0000-0000-0000" Enabled="True" CssProjectStructure="" CssIteration="" Timeout="0" WorkItemIds="" xmlns="http://microsoft.com/schemas/VisualStudio/TeamTest/2010" Description="" CredentialUserName="" CredentialPassword="" PreAuthenticate="True" Proxy="default" StopOnError="False" RecordedResultFile="" ResultsLocale=""> <Items> <Request Method="GET" Guid="a5f10126-e4cd-570d-961c-cea43999a200" Version="1.1" Url="http://microsoft.com" ThinkTime="0" Timeout="300" ParseDependentRequests="True" FollowRedirects="True" RecordResult="True" Cache="False" ResponseTimeGoal="0" Encoding="utf-8" ExpectedHttpStatusCode="200" ExpectedResponseUrl="" ReportingName="" IgnoreHttpStatusCode="False" /> </Items> </WebTest>
为了自动化 Web 测试的部署,Azure Resource Manager 可以部署 `Microsoft.Insights/webtests` 类型的 Application Insights 测试资源。
Azure Resource Manager Application Insights 可能如下所示:
{
 "name": "Test1",
 "apiVersion": "2015-05-01",
 "type": "microsoft.insights/webtests",
 "location": "Central US",
 "tags": {
	"[concat('hidden-link:', resourceId('microsoft.insights/components/appinsightsresource')))]": "Resource"
	},
"dependsOn": [
	"[concat('microsoft.insights/components/', parameters('appName'))]"
	],
"properties": {
"Name": "Test1",
"Description": "A healthy descriptive piece of text",
"Enabled": true,
"Frequency": 300,
"Timeout": 30,
"Kind": "ping",
"Locations": [{ "Id": "us-il-ch1-azr" }],
"Configuration": {
	"WebTest": "<WebTest Name="WebTest1" Id="0000-0000-0000-0000" Enabled="True" CssProjectStructure=""
	CssIteration="" Timeout="0" WorkItemIds="" xmlns="http://microsoft.com/schemas/VisualStudio/TeamTest/2010" 
	Description="" CredentialUserName="" CredentialPassword="" PreAuthenticate="True" Proxy="default" 
	StopOnError="False" RecordedResultFile="" ResultsLocale=""><Items><Request Method="GET" 
	Guid="a5f10126-e4cd-570d-961c-cea43999a200" Version="1.1" Url="http://microsoft.com" ThinkTime="0" 
	Timeout="300" ParseDependentRequests="True" FollowRedirects="True" RecordResult="True" Cache="False" 
	ResponseTimeGoal="0" Encoding="utf-8" ExpectedHttpStatusCode="200" ExpectedResponseUrl="" 
	ReportingName="" IgnoreHttpStatusCode="False" /></Items></WebTest>"
},
"SyntheticMonitorId": "Test1"
}
}
有关动态 Web 测试创建的指南可在 Azure 资源上找到。要获取 Azure Resource Manager (ARM) 模板,请访问 Azure 快速入门模板库。
结论
Hackfest 结束时,经过五天的工作,团队构建了一个可以用于 ISV 大部分在线服务并作为现有方法一部分进行部署的解决方案。
通过添加强大的监控解决方案,他们将能够收集在线服务的用法数据,用于评估其应用程序即将进行的改进。这将闭合价值流图练习所发现的不完整的反馈循环。
开发和运营可以从该解决方案中获得多方面的收益:
- 更快的部署。他们可以通过在规划阶段纳入监控需求,并与其他功能一起开发它们来实现这一点。这样,当运营部门接收新版本进行部署时,测试将已经定义好,并且部署将通过 ARM 自动化。
- 更好的沟通。通过强大的监控解决方案,开发和运营团队在发现错误和需要修复时可以进行更好的沟通。当开发和运营部门对正在发生故障或性能不佳的情况有清晰的了解时,平均恢复时间 (MTTR) 可以缩短。
- 通用性。通过通用化新解决方案,它可以用于不同的服务,并成为 ISV 应用程序基础的一部分。这可以帮助所有团队,并减少未来开发和维护监控解决方案所需的时间。


