后端开发流程
团队规模和流程的关系
- 需求阶段:每个人都有自己的想法,团队决策需要有一个过程
- 开发阶段:多人/多端协作开发,每个人有自己的安排,相互配合需要有一个流程
- 测试阶段:产物怎样交付,测试如何开展,BUG怎么修都需要流程
- 发布阶段:怎样确保发布过程平稳丝滑,版本和流量如何控制,需要有规范
- 运维阶段:线上问题如何应急响应,处理用户反馈和线上问题需要有流程
传统的瀑布模型
瀑布模型(Waterfall Model)是一种经典的软件开发生命周期模型,它描述了软件开发过程中的各个阶段和活动。瀑布模型最早由W.W. Royce于1970年提出,并逐渐成为软件工程领域的重要概念。
瀑布模型将软件开发过程划分为一系列线性的、有序的阶段,每个阶段按照顺序进行,并且在一个阶段完成后才能进入下一个阶段。以下是瀑布模型的典型阶段:
- 需求分析:在这个阶段,软件开发团队与客户合作,收集和分析用户需求。团队定义系统的功能、性能和约束条件,以确保对需求有全面的了解。
- 系统设计:在这个阶段,基于需求分析的结果,软件架构师和设计师开始制定系统的整体设计方案。他们决定系统的组件、模块和接口,并制定详细的技术规格说明。
- 编码与单元测试:在这个阶段,程序员根据设计文档开始编写代码。每个程序员负责实现特定模块或功能,并进行单元测试以验证其正确性。
- 集成与系统测试:在编码阶段完成后,将所有的模块进行集成,并进行系统级别的测试。这包括验证系统组件之间的协作、性能测试、功能测试和用户验收测试。
- 部署与维护:在通过系统测试后,软件被交付给客户并部署到生产环境中。在此阶段,软件开始正式运行,维护人员会负责修复漏洞、提供支持和进行升级。
瀑布模型的特点包括:
- 线性流程:每个阶段按照顺序进行,且通常不允许返回前一阶段。
- 明确定义的阶段:每个阶段都有明确的输入和输出,以及特定的目标和活动。
- 强调文档:在每个阶段都会生成详细的文档,包括需求文档、设计文档、测试计划等。
- 高风险:在瀑布模型中,风险主要集中在开发后期,因为在这个阶段才会进行系统级别的测试。
尽管瀑布模型在过去被广泛使用,但它也存在一些限制。由于它的线性性质,很难应对需求变更或错误的处理,而且客户在系统开发周期中只能在早期提供反馈。因此,现代的软件开发趋向于采用迭代和增量的方法,如敏捷开发,以更好地应对变化和快速交付的需求。
敏捷开发
以小团队快速迭代、团队成员之间合作更紧密,以人为本,注重和用户沟通
在实践中探索更好的软件开发方法,身体力行的同时也帮助他人
- 个体和互动 高于 流程和工具
- 工作的软件 高于 详尽的文档
- 客户合作 高于 合同谈判
- 响应变化 高于 遵循计划
The Scaled Agile Framework SAFe
是一套管理框架,多个scrum合作配合
精益产品开发、敏捷软件开发、系统思考
现代Scrum
- 敏捷教练 Scrum Master
- 产品负责人 Product Owner
- 敏捷团队 Scrum Team
- 敏捷发布火车 Agile Release Train
云原生
应用和运行时容器共同作为交付产物
云原生(Cloud-Native)是一种软件开发和部署的方法论,旨在充分利用云计算环境的优势,并将应用程序设计为适应云环境的方式。云原生应用程序在设计、构建和部署时考虑了云计算的特性,以实现高度可伸缩性、弹性、可靠性和可维护性。
云原生的核心原则和特征包括:
- 微服务架构:云原生应用程序采用微服务架构,将复杂的应用程序拆分为多个小型、自治的服务。每个服务都可以独立开发、部署和扩展,使得整个系统更具灵活性和可伸缩性。
- 容器化:云原生应用程序通常使用容器技术(如Docker)将每个微服务封装到独立的容器中。容器提供了隔离环境,使得应用程序可以在不同的平台和环境中运行,实现高度可移植性。
- 动态编排和自动化:云原生应用程序使用编排工具(如Kubernetes)来自动化管理和调度容器。通过编排工具,可以自动处理容器的部署、伸缩、故障恢复等操作,提高应用程序的弹性和可靠性。
- 持续交付和部署:云原生应用程序采用持续集成和持续交付(CI/CD)的实践,通过自动化流程实现频繁的软件发布。这样可以快速响应需求变化、减少发布时间,并降低错误引入的风险。
- 弹性和可伸缩性:云原生应用程序具备弹性和可伸缩性,能够根据负载变化自动扩展或收缩资源。通过自动伸缩,应用程序可以根据需求调整资源的使用,提供更好的性能和用户体验。
- 日志和监控:云原生应用程序通过日志和监控系统来实时追踪应用程序的运行状态和性能指标。这些数据可以用于故障排除、性能优化和资源管理。
云原生的好处包括:
- 敏捷性和快速交付:云原生应用程序通过自动化流程和弹性架构,使得软件开发和部署过程更加迅速和敏捷,能够更快地响应市场需求。
- 可伸缩性和弹性:云原生应用程序可以根据负载变化自动扩展或收缩资源,确保应用程序在高峰期保持高性能,同时在低负载期节省成本。
- 可靠性和容错性:云原生应用程序通过微服务架构和容器化技术,实现了组件的自治和隔离,减少单点故障,提高应用程序的可靠性和容错性。
- 可移植性和云端优势:云原生应用程序使用容器技术,使得应用程序在不同的云平台或环境中可以轻松迁移和部署,充分利用云计算提供的弹性、可扩展性和管理便利性。
总而言之,云原生是一种以云计算为基础的软件开发和部署方法,通过采用微服务架构、容器化、自动化等技术和实践,提供了高度可伸缩性、弹性、可靠性和可维护性的应用程序。它能够帮助企业更好地适应快速变化的市场需求,并充分发挥云计算的优势。
-
传统虚拟机
- 在物理主机中虚拟出多个虚拟机,每个虚拟机拥有自己的操作系统
- 运维人员负责维护和交付虚拟机
- 每个虚拟机中都要安装相应的依赖环境
-
容器化
- 容器是在操作系统中虚拟出来的
- 通过cgroup, namespace和Union Mount等技术实现了容器之间的相互隔离,同时容器只有很低的开销
- 应用和其依赖作为一个整体,打包成镜像交付
-
单体架构
- 多个模块共同组成一个服务,服务体量较大
- 模块之间直接调用,不需要RPC通信
- 服务整体扩缩容量
- 多人开发-个代码仓库, 需要充分集成测试
-
微服务架构
- 各个功能在不同的服务中
- 不同模块需要进行RPC通信
- 不同模块可以独立扩缩容
- 每个服务的代码仓库仅由少部分人维护
发布模式
蛮力发布、金丝雀发布、滚动发布、蓝绿发布、红黑发布