数字化技术(信息技术)的本质目的是创造价值,它的载体是软件,提供价值的是功能特性。越早发布功能特性,便能越快创造价值。采用逐渐增加功能特定的增量式开发方法,能让我们在最等时间内开发出最小可用(MVP)产品。
围绕它周围的优秀技术实践,可以让我们开发出运行良好的软件,并且设计也是好的。这个过程需要自上而下的为之付诸行动。
源自 Ron Jeffries 的《软件开发本质论》
based on: MDB & https://martinfowler.com/articles/agileFluency.html
来自(《深入核心的敏捷开发》)
区域 | 阶段 | 成效 | 借鉴 | 典型投资 | 时长 |
---|---|---|---|---|---|
专注 | 引入改变 | 对团队工作更好的可见性;调整方向的能力 | 团队的发展,工作流程的设计 | Scrum, Kanban, 非技术的 XP 实践 | 3 - 6 个月 |
执行 | 掌握实践 | 低缺陷和高生产率 | 技术技能学习期间的生产率变低 | XP, DevOps 运动 | 6 - 18 个月 |
优化 | 消除约束 | 更高价值的交付,更好的产品决策 | 将业务决策与专业技能转移给团队所花费的社交资本. | 精益软件开发,精益创业,超越预算 | +1-3 年 |
强化 | 强化整体 | 跨团队学习,更好的组织决策 | 发展组织管理的新方式的时间及风险 | 组织设计,复杂性理论 | 迭代改进,持续进行 |
区域 | 阶段 | 组织转变 | 转变 | 成效 | 典型投资(示例) | 时长 |
---|---|---|---|---|---|---|
专注 | 引入改变 | 组织文化 | 面向客户价值进行衡量和决策…...从而产生转变业务战略的需要。 | 透明和协作带来更好的跨职能决策机制,资源能够向更高价值的工作聚焦。 | 精益原则,IT、运维与业务的协作 | 3 - 6 个月 |
执行 | 掌握实践 | 组织职能 | 企业级流程、实践、技术和工具,与客户价值交付相一致。 | 产品/服务周期时间缩短,部署更多数字服务(例如 IoT)能力的增强。频繁变更并快速获取数据的能力,促成更具适应性的商业模式。 | 设计思维、数据战略、人才招聘、技术战略和路线图 | 6 - 18 个月 |
优化 | 消除约束 | 组织结构 | 关键业务能力投放在最需要的地方,模糊性和自主性影响领导力风格。 | 价值交付的速度和技术采用的简便性带来了更高的回报,高价值的新业务模式逐步浮现。 | 适应性领导力、产品专业知识、适应性架构、开发者体验 | +1-3 年 |
强化 | 强化整体 | 组织节奏 | 新的工作方式变得制度化,但组织的迭代和持续演进成为新常态。规划通过数据自动流转、测试和验证。 | 创新和产品卓越重塑市场,形成独特的收入模式。组织在各个方面的高响应力成为其核心能力,创造出亲密的客户互动。 | 平台商业模式、实验文化、智能生态 | 迭代改进,持续进行 |
源自张松的《精益软件度量:实践者的观察与思考》
ThoughtWorks Tech Lead 模型
来自《第五项修炼:学习型组织的艺术与实践》中的 8 种应用策略
跨职能团队(cross-functional teams)是指把各种工作领域具有不同知识、技能的员工组合起来识别和解决共同的问题的团队。
跨职能团队的成员通常来自几个部门,任务是解决需各个部门共同协作才能解决的问题。跨职能团队可能会设计与实施质量改进方案、开放新产品和技术、提高作业效率或把各个职能部门联系起来以增强产品创新、服务创新的能力。
DevOps(英文 Development 和 Operations 的组合)是一组过程、方法与系统的统称,用于促进开发(应用程序/软件工程)、技术运营和质量保障(QA)部门之间的沟通、协作与整合。
DevSecOps 是糅合了开发、安全及运营理念以创建解决方案的全新方法,是 DevOps 与 SecOps 的结合。 DevSecOps 的作用和意义建立在 每个人都对安全负责 的理念之上,其目标是在不影响安全需求的情况下快速的执行安全决策,将决策传递至拥有最高级别环境信息的人员。
原则:
Business + Development + Operations = BizDevOps
也就是基于算法的 IT 运维(Algorithmic IT Operations),是由 Gartner 定义的新类别,源自业界之前所说的 ITOA (IT Operations and Analytics)。
相似的有: MLOps
MLOps 是数据科学家和操作专业人员之间进行协作和交流的一种做法,可帮助管理生产机器学习生命周期。
GitOps是一种正在流行的DevOps最佳实践,最早是由Weaveworks公司于2017年提出。它结合了基础设施即代码(IaC),版本控制系统(通常是Git),持续集成/持续交付(CI/CD),将Git仓库作为声明基础设施和应用代码的唯一事实来源,并通过Pull Request(PR)来自动化地管理基础设施的开发和部署,并对整个过程的状态变化进行持续监控,审计等。
ChatOps 是指由对话驱动的开发。 将工具植入到对话当中,使用被关键插件和脚本改良过的聊天机器人,团队能够自动执行任务和协作,效果更好、成本更低、速度更快。
相关案例:
基于 Go 的 ChatOps 实践: 利用钉钉的企业内部机器人的回调机制,可以部署一套 HTTP 服务端来接收消息请求,根据用户定制的特定消息内容执行相应的 Git 工作流或 CI/CD 流水线。
Chat samples:
Users 命令: /pr
Robot 回复: 当前仓库的 PullRequest 列表...
[#709] fix: typo
[author] username
Users 命令: /jenkins test micro-server 709
Robot 回复: 开始测试 PullRequest 709
CIBot 回复:
[jenkins] micro-server ci
-------------------------
任务:#666
状态:开始
持续时间:0 分 1 秒
执行人:Host 76.76.21.21
Users 命令: /approve 709
Robot 回复: 审核通过 PullRequest #709
Users 命令: /merge 709
Robot 回复: 合并 PullRequest #709
Gitee 回复: User 接受了 Owner/repo 的 Pull Request !709 fix: typo
Users 命令: /deploy micro-server
Robot 回复: 生产发布 micro-server
CDBot 回复:
[jenkins] micro-server cd
-------------------------
任务:#233
状态:开始
持续时间:0 分 1 秒
执行人:Host 76.76.21.21
# 友好地提供帮助
Users 命令: /help
Robot 回复: 当前支持指令列表, 带 * 需要特定人员发起
/pr - 展示仓库发起中的 PR
/jenkins - 在指定 PR 下发起后端测试
/pass - * 测试通过指定 PR
/approve - * 审核通过指定 PR
/merge - * 合并指定 PR
/test - 在仅有一个 PR 的状态下发起后端服务测试
/deploy - * 发布服务至生产环境
/help - 显示此帮助内容
DesignOps 是对人员、流程以及工艺的编排和优化,以扩大设计的价值和规模影响。
设计运营(DesignOps)帮助我们规划:
设计运营(DesignOps)帮助我们规划:
最后,设计运营(DesignOps)可以帮助我们如何思考:
NoOps (no operations) 是一种理念,IT 环境可以从基础架构进行自动化和抽象化,不需要专门的团队来管理内部软件。
参考来源:什么会和“Ops”碰撞出火花?
成熟度模型 是一种工具,可以帮助人们评估行为、实践和流程在产生预期结果方面的有效性。该模型定义了一系列的结构化级别,这些级别可以让组织沿着更系统地组织和成熟的流程的道路前进。
成熟度模型所针对的都不是简单的问题和行动,而是一系列复杂的流程与行为。
度量是什么?
度量不是什么?
来源:《敏捷度量实战:如何度量并改进团队绩效》
工具 | 措施 | 度量 |
---|---|---|
New Relic | 应用程序监控 | 页面响应时间,运行时间,响应时间,错误率 |
HyperSpin | 可用性 | 运行时间,响应时间 |
Splunk | 可靠性 | 错误率,故障平时间隔时间 |
OWASP ZAP | 安全性 | 动态分析问题 |
SonarQube | 可维护性 | CLOC,代码覆盖,问题,复杂性 |
Checkmark | 安全性 | 静态分析问题 |
- | 项目跟踪系统 | 源代码管理 | CI 和部署工具 | 应用程序监控 |
---|---|---|---|---|
良好设计 | x | x | x | |
良好架构 | x | x | x | |
技术领先 | x | x | x | |
修改需求 | x | x | x | |
工作协作 | x | |||
个人动机 | x | |||
面对面交谈 | x | |||
持续交付 | x | x | ||
更有效 | x | x | x | |
频率交付 | x | x | ||
软件运行 | x | |||
满足客户 | x | |||
简单性 | x | x |
Demo App: https://github.com/cwhd/measurementor
来源《精益软件度量:实践者的观察与思考》。
目标:
GitHub 解释版:
出自:Dreyfus 技能模型
——《丰田模式:精益制造的 14 项管理原则》
如《知识炼金术》所说的知识分布盘点:
内部 | 外部 | |
---|---|---|
个体 | 个人总结 个体经验(隐性知识) | 外部专家、顾问 其它外部人员 |
团体 | 团队协作工作文档分享 团队的规则、经验与 "诀窍" 团队工作流程、制度与规范 | 其他团队的 "诀窍" 其他团队的经验与规则 |
组织 | 知识库系统(显性知识) 约定俗成的经验或规则 公司流程、制度与规范 | 其他组织的知识 社会的经验与规则 |
来自《企业知识的创造》
从……到…… | 隐性知识 | 显性知识 |
---|---|---|
隐性知识 | 社会化 | 外显化 |
显性知识 | 内隐化 | 组合化 |
《知识炼金术》 中提出的 PDA 模型:
知识图谱(Knowledge Graph),在图书情报界称为知识域可视化或知识领域映射地图,是显示知识发展进程与结构关系的一系列各种不同的图形,用可视化技术描述知识资源及其载体,挖掘、分析、构建、绘制和显示知识及它们之间的相互联系。
过程:
最小权限原则,要求在计算环境的某个抽象层上,每个模块(如用户、进行或者程序)只能按照合法规定访问必需的信息和资源。
优点:
源自《演进式架构》
演进式架构以支持增量的、非破坏的变更作为第一原则,同时支持在应用程序结构层面的多维度变化。
常见的多个架构维度:
适应度函数是一种特定类型的目标函数,用于总结作为单个品质因数的给定设计解决方案与实现设定目标的接近程度。适应度函数用于遗传编程和遗传算法,以指导模拟向最优设计解决方案。 —— 维基百科
分支
—— 《演进式架构》一书所列表的架构特性
可访问性 | 可问责性 | 准确性 | 适应性 |
可负担性 | 敏捷性 | 可审计性 | 自治性 |
兼容性 | 可组合性 | 可配置性 | 正确性 |
可定制性 | 可调试性 | 可降级性 | 可确定性 |
可信赖性 | 可部署性 | 可发现性 | 分布性 |
有效性 | 高效性 | 可用性 | 可扩展性 |
容错性 | 保真性 | 灵活性 | 可检查性 |
完整性 | 互通性 | 可学习性 | 可维护性 |
移动性 | 可修改性 | 模块性 | 可操作性 |
可移植性 | 精确性 | 可预测性 | 过程能力 |
可证性 | 可恢复性 | 相关性 | 可靠性 |
重现性 | 弹性 | 响应性 | 可复用性 |
安全 | 伸缩性 | 无缝性 | 自我维持性 |
安全性 | 简单性 | 稳定性 | 标准合规性 |
可持续性 | 可裁剪性 | 可测试性 | 及时性 |
前移(左移,Shifting Left)原则的核心思想是,将那些通常在较晚阶段完成的工作,尽早提前完成。
Availability % | Downtime per year | Downtime per quarter | Downtime per month | Downtime per week | Downtime per day |
---|---|---|---|---|---|
90% ("one nine") | 36.53 days | 9.13 days | 73.05 hours | 16.80 hours | 2.40 hours |
95% ("one and a half nines") | 18.26 days | 4.56 days | 36.53 hours | 8.40 hours | 1.20 hours |
97% | 10.96 days | 2.74 days | 21.92 hours | 5.04 hours | 43.20 minutes |
98% | 7.31 days | 43.86 hours | 14.61 hours | 3.36 hours | 28.80 minutes |
99% ("two nines") | 3.65 days | 21.9 hours | 7.31 hours | 1.68 hours | 14.40 minutes |
99.5% ("two and a half nines") | 1.83 days | 10.98 hours | 3.65 hours | 50.40 minutes | 7.20 minutes |
99.8% | 17.53 hours | 4.38 hours | 87.66 minutes | 20.16 minutes | 2.88 minutes |
99.9% ("three nines") | 8.77 hours | 2.19 hours | 43.83 minutes | 10.08 minutes | 1.44 minutes |
99.95% ("three and a half nines") | 4.38 hours | 65.7 minutes | 21.92 minutes | 5.04 minutes | 43.20 seconds |
99.99% ("four nines") | 52.60 minutes | 13.15 minutes | 4.38 minutes | 1.01 minutes | 8.64 seconds |
99.995% ("four and a half nines") | 26.30 minutes | 6.57 minutes | 2.19 minutes | 30.24 seconds | 4.32 seconds |
99.999% ("five nines") | 5.26 minutes | 1.31 minutes | 26.30 seconds | 6.05 seconds | 864.00 milliseconds |
99.9999% ("six nines") | 31.56 seconds | 7.89 seconds | 2.63 seconds | 604.80 milliseconds | 86.40 milliseconds |
99.99999% ("seven nines") | 3.16 seconds | 0.79 seconds | 262.98 milliseconds | 60.48 milliseconds | 8.64 milliseconds |
99.999999% ("eight nines") | 315.58 milliseconds | 78.89 milliseconds | 26.30 milliseconds | 6.05 milliseconds | 864.00 microseconds |
99.9999999% ("nine nines") | 31.56 milliseconds | 7.89 milliseconds | 2.63 milliseconds | 604.80 microseconds | 86.40 microseconds |
部署或测试模式 | 零停机时间 | 实际生产流量测试 | 根据条件向用户发布 | 回滚时长 | 对硬件和云费用的影响 |
---|---|---|---|---|---|
重新创建 版本 1 已终止,版本 2 已发布。 | x | x | x | 速度快,但会由于停机时间而中断 | 无需额外设置 |
滚动更新 版本 2 逐步推出并取代版本 1。 | ✓ | x | x | 慢 | 可能需要对超额配置升级进行额外设置 |
蓝绿 版本 2 与版本 1 一同发布;流量在经过测试后会切换到版本 2 | ✓ | x | x | 即时 | 需要同时维护蓝色和绿色环境 |
Canary 版 版本 2 面向部分用户发布,随后全面发布。 | ✓ | ✓ | x | 快 | 无需额外设置 |
A/B 版本 2 在特定条件下面向一部分用户发布。 | ✓ | ✓ | ✓ | 快 | 无需额外设置 |
影子 版本 2 接收实际流量而不影响用户请求。 | ✓ | ✓ | x | 不适用 | 需要维护并行环境才能捕获和重放用户请求 |
维度:
未来的软件开发模型(《云研发:研发即代码》)
出自:《架构金字塔》