云原生
简介
- 应用原生被设计为在云上以最佳方式运行,充分发挥云的优势,是上云的最短路径。
- 云原生的关键技术:
- 微服务架构
- 容器
- 容器编排
- 服务网格
- 声明式API
- 不可变基础设施
- DevOps
概念
声明式API
- 只声明期望的状态,不需要具体执行细节。
- 系统负责将实际状态调整为期望状态。
- 区别于命令式API需要发出具体执行的命令。
- 如K8s,使用yaml替代命令行操作。
不可变基础设施
- 基础设施即代码,使用配置文件而非命令行。
- 配置文件可以被版本控制,如git。
- 区别于可变基础设施,如允许管理员ssh到服务器修改配置和安装依赖环境。
DevOps
- 指开发、运维、测试团队深度合作,辅以高度自动化的研发工具链,以实现快速可靠交付的目的。
- 在人员组织上,运维在项目初期就介入到开发中,了解架构和技术路线,从而制定运维方案。开发也会在运维初期参与部署。
- 在工具链上,容器、K8s、CICD、git等。
CI/CD
- CI(Continuous Integration)持续集成
- 是指开发经常性进行系统集成,自动化构建并验证,以便快速发现错误。
- CD(Continuous Delivery)持续交付
- 是指在持续集成的基础上,可以随时自动化地将应用发布到生产环境上。
- CI/CD工具,如Gitlab、Jenkins、Tekton等。
- 流水线:将CI/CD任务分解成多个阶段和步骤,并按顺序执行这些步骤。
- 流水线常见步骤:拉取代码、静态分析、编译、单元测试、打包、推送仓库、部署等。
服务网格
- 服务网格(Service Mesh)
- 定义:管理分布式应用各服务之间通信的基础设施层。
- 功能:实现服务发现、负载均衡、流量管理、熔断器、监控和日志等。
- 关键原理:通过独立部署的Sidecar代理流量。
- Sidecar:
- 与主进程容器在同一个Pod内运行的独立容器,代理出入流量。
- 对比于传统方式(通过sdk实现服务治理相关功能)。
- 可以做到对应用无侵入,独立升级。
- 优势:
- 解耦服务治理和业务应用本身,无论开发与部署。
- 异构系统的统一治理,无需针对每种开发语言提供一套sdk。
- 劣势:
- 延迟:多加了一层代理,增加毫秒级延迟。
- 运维复杂度:需要部署和管理sidecar代理。
- 常见解决方案:Istio。
云原生技术生态
- CNCF(Cloud Native Computing Foundation),云原生基金会
- 2015年google联合其他公司成立,致力于托管和运营云原生项目。
- CNCF项目如k8s、istio、gRPC、ETCD、gitlab、apisix、prometheus等。