IBM 全栈开发【3】:云原生 + 开发运维 + Agile + NoSQL
近期在学习 IBM 全栈应用开发微学士课程,故此记录学习笔记。
1. 云原生入门
云原生应用是一种构建和运行在云上的应用程序。云原生应用由协同工作的微服务组成,以充分利用云计算的优势。
云计算,简称「云」,是一种基于互联网的计算方式,通过这种方式,共享的软硬件资源和信息可以按需求提供给计算机各种终端和其他设备。
- NIST 将其定义为:一种实现对可配置计算资源的共享池进行便捷、按需网络访问的模式,这些资源可快速调配和释放,只需极少的管理工作或服务提供商的互动
- 计算资源包括网络、服务器、存储、应用程序和服务
云模式由五个基本特征、四种部署模式和三种服务模式组成:
- 五个基本特征:按需自助服务、广泛网络访问、资源池共享、快速弹性伸缩、可度量服务
- 四种部署模式:私有云、社区云、公有云、混合云
- 三种服务模式:基础设施即服务(IaaS)、平台即服务(PaaS)、软件即服务(SaaS)
1.1. 现代软件开发
- 以服务形式交付
- 集中托管并通过互联网访问
- 网络应用程序、SaaS
1.2. 云原生堆栈
- 应用程序代码:持有云原生应用程序
- 应用程序运行时:中间件
- 应用程序和数据服务:数据库、消息队列、缓存
- 调度和协调:控制面板,比如 Kubernetes
- 云基础设施:定义环境
1.3. 使用案例
云中的一切都应采用云原生方法构建,以充分利用云的优势。
应用代码需要使用以下工具:
- 标准化的日志
- 标准化的事件
- 多个微服务和云原生应用程序可使用的标准目录
- 微服务的标准化跟踪
1.4. CNCF
云原生计算基金会(CNCF)是一个非营利性组织,致力于促进云原生计算的采用和技术进步。CNCF 的使命是通过开源、中立和可持续的项目来推动云原生计算的采用。
CNCF 通过为参与公司的项目提供营销和支持来帮助他们。CNCF 还通过培训和认证来支持开发人员。
1.5. 混合云
混合云是指在私有云和公有云之间创建连接的计算环境。 混合云允许应用程序和数据在私有云和公有云之间移动。
公共云由外部提供商管理,在一个硬件平台上有多个租户,可包括多个地点的服务器;私有云由企业管理,通常在企业的数据中心中,由企业拥有和使用。
内部部署的私有云属于单个组织,由其托管和管理自己的云空间。
1.6. 实践与方法
- 测试驱动开发(TDD):在编写代码之前编写测试
- 行为驱动开发(BDD):关注从外部看到的系统行为,而非系统内部的工作方式
- 持续集成/持续交付(CI/CD):一种软件开发方式;你可以构建和部署软件,以便随时将其发布到生产中
- 敏捷开发(Agile):一种迭代的项目管理方法,可帮助团队快速响应并向客户交付价值
- Scrum:一种进行增量产品开发的管理框架
- 微服务架构:一种单一应用程序由多个松散且可独立部署的小型服务组成的方法,每个服务通过 API 进行通信
- 容器(Container):独立的、包罗万象的可执行软件单元
2. 开发运维和 CI / CD
2.1. 开发运维(DevOps)
DevOps 是一种软件开发方法,旨在通过自动化软件交付流程来加快软件交付速度。DevOps 是开发(Dev)和运维(Ops)的组合。
Patrick Debois 是 DevOps 的创始人。
他如此形容 DevOps:「敏捷开发环境的延伸,旨在加强整个软件交付的过程。「
DevOps 推动文化和技术变革,促进开发和运维团队之间的协作,简化流程,自动化任务,并持续交付高质量的软件。
DevOps 提高了效率和客户价值,要求组织学习和文化转型。
其核心目标是自动化软件交付。
DevOps 诞生前,开发和运维团队之间的沟通和协作很少。开发团队开发软件,然后将其交付给运维团队,运维团队负责部署和维护软件。这种模式导致了开发和运维团队之间的隔阂,从而导致了低效率、低质量的软件交付。
各自为政行不通,因此 DevOps 的目标是将开发和运维团队合并为一个团队,并遵循敏捷开发原则,以便更快地交付更高质量的软件。
2.1.1. DevOps 的要求
- 改变文化:重视开放、信任和透明度
- 新的应用设计:无需为增加一项功能而重新部署整个系统
- 利用自动化:加快并提高应用交付的一致性
- 可编程平台:持续部署
2.1.2. 这些不是 DevOps!
- DevOps 不单单是简单地将开发和运营结合起来
- DevOps 不是一种工具或技术
- DevOps 不是一个独立的团队
- DevOps 不是一刀切的解决方案
- DevOps 不只是自动化
2.1.3. 工具
版本控制
- 管理和跟踪更改
- 实现团队协作
- 维护记录
- Git 实现了无缝代码管理
- GitLab 和 GitHub 是两个流行的 Git 托管服务
CI/CD
- 自动构建、测试和部署流程
- 整合变更并自动发布
- CI 工具:构建和测试
- Concourse CI
- Circle CI
- Travis CI
- CD 工具:自动化应用发布
- Spinnaker
- Go CD
- Argo CD
- CI / CD 工具
- Jenkins
- Tekton
- GitLab CI/CD
- GitHub Actions
配置管理
- 自动配置软件和基础设施,确保一致性并简化环境管理
- Ansible
- Chef
- Puppet
- SaltStack
容器化和容器协调
- 可在容器中打包和部署应用程序,从而实现轻松扩展和高效资源管理
- Docker
- Kubernetes
监控和日志记录
- 监视应用程序性能、健康状况并分析日志
- Prometheus
- Grafana
- ELK Stack
- Mesmo
- New Relic
合作和交流
- 促进团队成员之间有效的团队合作、知识共享和协调
- Slack
- Microsoft Teams
- Atlassian Jira
- Trello
- Asana
2.2. CI/CD
持续集成(CI)确保变更通过必要的测试;将测试变更集成到主分支中。
持续交付(CD)确保快速安全的部署;将变更交付到类似生产的环境中。
CI / CD 不是一个过程,而是两个不同的过程:CI 不断将代码整合回 main/master/trunk 分支,CD 将整合后的代码部署到生产环境。
- CI 包括计划、编码、构建和测试阶段
- CD 包括发布、部署和运行阶段
持续部署(Continuous Deployment)是生产自动化,专门用于实际持续推送到生产环境的情况。
它与持续交付不同,后者是将代码部署到类似生产的环境中,比如开发服务器,但不会自动部署到生产环境。
2.2.1. CI 的优势
- 更快的代码更改反应时间
- 更改代码...
剩余内容已隐藏