avatar
文章
255
标签
89
分类
13

主页
归档
标签
分类
Michael Blog
搜索
主页
归档
标签
分类

Michael Blog

两个人|
持续交付发布可靠软件的系统方法(交付生态圈)第十三章:组件和依赖管理
发表于2020-05-20
《持续交付发布可靠软件的系统方法》读书笔记 持续交付让应用程序处于随时可发布的状态。在大型重构或添加复杂功能时,要继续保持应用的可发布状态,需要对大型应用组件化。组件是指应用程序中的一个规模相当大的代码结构,它具有一套定义良好的API,而且可以被另一种实现方式代替。一个基于组件的软件系统,通常其代码库被分成多个相互分离的部分,每个部分通过有限的定义良好的接口提供一些服务与其他组件进行有限的交互。有人把组件称为模块。基于组件的设计是一种良好的架构,具有松耦合性。 保持应用程序可发布团队不断地增加新特性,可以给每次新特性创建新的分支,当新特性完成后,再将它合并到主分支。这将会导致合并周期变长,无法做到持续集成,这种方法不是最好的。提倡每个人都应该提交到主干。可是这样又该如何保证主干一直保持可发布状态呢?有如下四种策略: 将新功能隐藏起来,直到它完成为止。一种方法是把新功能直接放进主干,但对用户不可见,比如通过单独的URL来访问,通过Web服务器配置不允许访问其入口;另一种方法是通过配置项开关来管理。把功能半成品与系统其他部分一同发布是一个好实践。 将所有的变更都变成一系列的增量小修改,而 ...
持续交付发布可靠软件的系统方法(交付生态圈)第十二章:数据管理
发表于2020-05-20
《持续交付发布可靠软件的系统方法》读书笔记 应用程序可以通过删除前一个版本,使用新版本替换旧版本的方式部署,但是大多数系统,数据无法使用这种方式进行变更,一旦某个系统发布到了生产环境中,关联的数据将不断增加。数据往往是系统中最有价值的部分。当我们需要对数据系统进行结构修改或者内容修改时,就需要相关的策略。对数据的修改是不可避免的,关键在于将数据迁移过程自动化。目前有一些工具对数据迁移提供了较多支持,它们还允许对数据库进行版本化管理。另一个重要部分是测试数据的管理。 数据库脚本化任何数据库的修改都应该通过自动化过程来管理。包括数据库的初始化,数据库所有的迁移都需要脚本化,并将脚本提交到版本控制库中。几乎所有的数据管理系统都支持通过自动化脚本进行数据存储的初始化工作。 清除原有的数据库 创建数据库结构、数据弯路实例以及模式等 向数据库加载数据 在大多数据项目中,数据库的使用要复杂得多。 增量式修改绝大多数据系统,对数据库更新时,要保留它们的数据。由于在部署时需要保留数据库中的已有数据,所以需要有回滚策略,以便部署失败时使用。这就需要对数据库进行版本控制。 在数据库中创建一个数据,用来 ...
持续交付发布可靠软件的系统方法(交付生态圈)第十四章:版本控制进阶
发表于2020-05-20
《持续交付发布可靠软件的系统方法》读书笔记 版本控制用来维护应用程序每次修改的完整历史,包括源代码、文档、数据库定义、构建脚本和测试等。团队可以在一个代码版本控制库上一起开发应用程序的不同部分。一旦团队人数超过一定数量,就需要规划版本控制库的使用,让开发更加高效。 分支与合并分支,即为选择的基线创建一个副本,该副本与原基线相互独立,开发者能在两个工作流上同时开发。团队为什么使用分支? 物理上:系统物理配置而分支,即为文件、组件和子系统而分支 功能上【最常见】:系统功能配置而分支,即为特性、逻辑修改、缺陷修复和功能增加,以及其他可交付的功能而分支 环境上:系统运行环境而分支,即由构建平台和运行时平台的不同而分支 组织上:团队的工作量而分支,即为活动/任务、子项目、角色和群组而分支 流程上:团队的工作行为而分支,支持不同规章政策、流程和状态而分支 在开发中,经常会遇到分支合并的情况,除非那些为了发布或者技术预研而创建的分支。两次合并时间间隔越长,每个分支上工作的人越多,合并发生冲突的可能性就越大。以下两种方法来减小冲突: 创建更多的分支来减少在每个分支上的修改。这只是将痛苦 ...
持续交付发布可靠软件的系统方法(基础篇)第三章:持续集成
发表于2020-05-20
《持续交付发布可靠软件的系统方法》读书笔记 持续集成要求每当有人提交代码时,就对整个应用进行构建,并对其执行全面的自动化测试集合,一旦出现问题,开发团队应停下手中的工作,修复问题。持续集成的目标是:让正在研发的软件一直处于可工作的状态。 实施持续集成的先决条件 版本控制,与项目相关的所有内容都必须提交到一个版本控制库中(产品代码、测试代码、数据库脚本、构建与部署脚本、以及所有用于创建安装运行和测试该应用的程序的东西) 自动化构建:必须满足人和计算机都能通过命令行自动执行应用的构建、测试以及部署过程 团队共识:持续集成是一种实践,需要团队所有成员都遵循规则 一个基本持续集成系统 第一次在持续集成工具上执行构建时,可能会缺少一些必须的软件及配置,请将所操作的工作记录下来,并放在自己项目的知识共享库中,应花一些时间将应用程序所依赖的所有软件和配置项提交到版本控制系统中,并将重建全新环境的整个活动变成一个自动化的过程 查看一下是否有构建正在运行,如果有,等它运行完。如果它失败了,则与团队其他人一起将它修复,后再提交自己的代码 一量构建完成且测试全部通过,就从版本控制库中将该版本的代码更新到自 ...
持续交付发布可靠软件的系统方法(基础篇)第一章:软件交付的问题
发表于2020-05-20
《持续交付发布可靠软件的系统方法》读书笔记 软件构成部分:可执行的代码、配置信息、运行环境、数据 不同环境下只进行一次编译 对环境的任何修改都应该作为配置信息管理,配置信息的更改都需要经过测试 如果运行环境需要修改,则修改后的环境也需要进行测试。环境包括:操作系统配置、应用程序依赖的软件集、网络配置及任何基础设置、外部系统 数据结构发生变化,同样需要经过测试 反馈流程:指完全以自动化的方式尽可能地测试每一次变更 创建可执行代码的流程 单元测试 质量检测:测试覆盖率以及其他与技术相关的度量项 功能测试验收 性能、有效性、安全性等非功能测试 探索性测试,给客户/最终应用演示 自动化测试反馈【commit阶段】 运行速度快 尽可能全面,75%代码库覆盖率 环境中立,相对生产环境简单廉价 如果出现问题,绝不发布【commit之后测试】 运行速度慢一些,适合并行执行 即使有些测试问题,也可以发布应用程序 运行环境尽可能与生产相同 不同版本、不同环境的配置放在版本控制中 开发人员都拥有自己的专属开发环境 无论部署在什么目标环境都应采用同一种部署方法 开发环境是特例,可以有多变性部 ...
持续交付发布可靠软件的系统方法(基础篇)第二章:配置管理
发表于2020-05-20
《持续交付发布可靠软件的系统方法》读书笔记 配置管理指一个过程,通过该过程,所有与项目有关的产物,以及它们之间的关系都被唯一定义、修改、存储与检索。 使用版本控制 对所有内容进行版本控制(所需的支撑软件配置信息,操作系统配置信息、DNS区域文件和防火墙配置等) 配置管理是持续集成交付过程的基础。 软件配置管理灵活性:先专注于提供具有高价值且可配置程度低的功能,冒烟测试就是一种缓解配置验证问题的方法配置分类 推荐应使构建打包生成的包,面向所有环境,并不植入配置信息 应用程序的配置管理 将特定于测试环境或生产环境的实际配置信息存放于与源代码分离的单独代码库,需要注意配置信息的版本,一定要与相应的应用软件的版本相切尔西 不要把密码放在版本控制系统中 获取配置信息:文件系统、从某个中心仓库中获取配置信息 配置信息:区分应用、版本、环境,都需要满足以下: 新增一个环境,能为这个配置应用的新环境指定一套新的配置信息 新建应用程序的一个新版本,确保在部署新版本时,使用新的配置,但是一量需要回滚时,还能够使用旧版本的配置 将新版本从一个环境移到另一个环境,确保新环境上的新配置里有效 重定向到一个数 ...
持续交付发布可靠软件的系统方法(基础篇)第四章:测试策略的实现
发表于2020-05-20
《持续交付发布可靠软件的系统方法》读书笔记 项目在一开始阶段,测试人员就会与开发人员及客户一起写自动化测试。这些测试应该在开发前就写好。以上这些测试仅仅是系统进行功能测试,容量、安全性及其非功能性试也应尽早建立,为它们写自动化测试套件。确保不符合需求的问题尽早暴露。 业务导向且支持开发过程的测试在开发一个用户故事之前,应写好验收测试,采取完美的自动化形式。系统的验收测试应运行在类生产环境(UAT)验收测试有价值的特性: 它加快了反馈速度 减少了测试人员的工作负荷 让测试人员集中精力做探索性测试和高价值的活动 这些验收测试也是一组回归测试套件 行为驱动开发,可以以这些测试中自动生成需求说明文档 并不是所有的东西都需要自动化。我们倾向于将自动化验收测试限于完全覆盖Happy Path的行为,并仅覆盖其它一些极其重要的部分。每一种测试都应该覆盖应用程序的80%验收测试一般都是端对端测试,但是这样很多时候验收测试的失败并不是因为真正的缺陷,而是因为界面的变更,这将导致增大了验收测试脚本的维护。有两种方法解决这个问题: 在测试与用户界面之间增加一个抽象层,以便减少因用户界面变更而导致的 ...
持续交付发布可靠软件的系统方法(部署流水线)第七章:提交阶段
发表于2020-05-20
《持续交付发布可靠软件的系统方法》读书笔记 提交阶段的运行应该少于5分钟,一定不要超过10分钏提交阶段的首要目标是创建可部署的产物 提交阶段的原则与实践 提供快速有用的反馈 何时令提交阶段失败 编译错误 测试失败(包括单元覆盖率低于60%) 精心对待提交阶段 提交阶段中有构建用的脚本和运行单元测试、静态分析等脚本。 随着项目的进行,不断改进提交阶段的脚本的质量、设计和性能 确保将脚本做成模块化,将那些经常使用且很少变化的常见任务与需要修改的任务分开 将部署流水线中不同阶段所用的代码分别写在不同脚本中 不要写出与具体环境相关的脚本,即要把具体环境配置与构建脚本分离 让开发人员也拥有所有权如果必要的话,即使是很普通的变更也都应该由开发人员和运维人员来执行 在超大项目团队中指定一个构建负责人 监督和指导对构建的维护 鼓励和加强构建纪律 在团队开始接触持续集成时,构建纪律还没建立起来时,提醒作用 团队成员轮流当,比如每星期轮换一次 提交阶段结果提交阶段的输入是源代码,输出是二进制包和报告(测试结果和代码分析报告) 制品库 制品库仅保存某些版本,而不是全部。如果在部署流水线某个 ...
持续交付发布可靠软件的系统方法(部署流水线)第九章:非功能需求的测试
发表于2020-05-20
《持续交付发布可靠软件的系统方法》读书笔记 性能、吞吐量、容量概念性能:对处理单一事务所花时间的一种度量,既可以单独衡量,也可以在一定的负载下衡量。吞吐量:系统在一定时间内处理事务的数量,通常它受限于系统中的某个瓶颈容量:一定的负载下,当每个单独请求的响应时间维持在可接受范围内时,系统所能承担的最大吞吐量。非功能性:有效性、容量、安全性、可维护性等。 非功能需求管理将非功能需求与功能需求一样对待。 创建一些具体任务来管理非功能需求 有必要的话,向功能需求中加入非功能需求的验收条件 如何为容量编程 为何要做容量测试高德纳著名格言:在97%的时间里,我们都应该忘记那种小的效率提升:过早优化是所有罪恶之根。然而,我们也不能让另外非常关键的3%的机会与我们擦肩而过。一个优秀程序员不会因为这个原则而对其置之不理,他们非常聪明,只会在识别出那段关键代码后,才会非常细心地去查看。在找到解决方案之前,必须先找出问题的根源。容量测试会告诉我们是否存在问题,以便我们可以修复它。不要枉自猜测,而要先进行度量。 解决容量问题现代软件系统中,最昂贵的是网络通信或磁盘存储,在性能和应用程序的稳定性方面,跨进程 ...
持续交付发布可靠软件的系统方法(部署流水线)第五章:部署流水线解析
发表于2020-05-20
《持续交付发布可靠软件的系统方法》读书笔记 什么是部署流水线部署流水线是指软件从版本控制到用户手中这一过程的自动化表现形式。价值流图 产品可行性评估 产品探索 产品计划与评估 开发 最后测试与审核 发布 3天 1周 7天 10天 10天 10天 3天 7周 1周 2天 2小时 开发到发布的流水线:会有很多次构建通过这一流程走向最后的发布 流水线各个阶段:交付团队->版本控制库->构建和单元测试->自动化验收测试->用户验收测试->发布 一般而言,只要某个构建使这个流程任一阶段失败,都会停止,不会进入下一个阶段。 提交阶段【自动化测试(主要是单元测试),代码分析】 自动化验收测试阶段【功能与非功能测试】 手工测试阶段【对自动化测试的补充,探索性测试,集成测试等】 发布阶段【部署到生产环境或试运行环境】 最基本的部署流水线 部署流水线的相关实践 只生成一次二进制包。对于不需要编译的语言,二制包指的是所有源文件的集合。这些二进制包应保存在文件系统的某个位置,让流水线后续阶段能够轻松访问到,但不要放在版本控制库中。二进制包应与 ...
1…8910…26
avatar
Michael Pan
日积硅步以致千里,记录日常工作与学习
文章
255
标签
89
分类
13
Follow Me
最新文章
Fabric:开源AI工作流与Prompt辅助框架详解2025-12-08
15个实用开源AI项目汇总:从PPT生成到语音克隆2025-12-08
大语言模型各类版本详解:Base、Instruct、MoE、量化、Thinking 等到底是什么意思?2025-11-26
使用vLLM部署Qwen3-Next-80B-A3B-Instruct大模型完整指南2025-11-24
生产级大语言模型平台系统设计:多期落地方案与实践2025-11-18
分类
  • AI14
    • DevOps1
    • SRE1
      • DevOps1
    • 开发1
  • DevOps2
    • Kubernetes1
  • devops1
标签
AI平台 Vue.js Docker vault GitHub 运维 知识图谱 模型版本 windows python infra 性能优化 MoE AI ai cursor LLM Fabric DevOps SRE FastAPI Longhorn tool kubernetes MCP Cursor 大数据 大模型推理 uv AI开发 Ollama jenkins LLM Proxy Open Source PyPI OpenAI API nginx Python Productivity 自动化
归档
  • 十二月 20252
  • 十一月 20254
  • 九月 20251
  • 八月 20254
  • 七月 20254
  • 六月 20251
  • 五月 20251
  • 四月 20252
网站资讯
文章数目 :
255
本站访客数 :
9207
本站总访问量 :
10505
最后更新时间 :
3 天前
©2023 - 2025 By Michael Pan
搜索