云原生(Cloud Native)技术概述
概念
云原生是一套构建和运行应用程序的方法论,它充分利用云计算交付模型的优势,核心目标是实现应用的敏捷、弹性、可扩展和高可用。四大核心支柱:
- 容器化:以Docker为代表,将应用及其所有以来打包成一个标准化的单元,实现环境一致性。
- 动态编排:以Kubernetes为代表,自动化容器的部署、管理、扩展和修复。
- 微服务:将单体应用拆分为一组小的、松耦合的服务,每逢服务独立开发、部署和扩展。
- DevOps和持续交付:通过自动化工具链和文化,实现快速、频繁、可靠的软件交付
中间件(Middleware)的云原生演进
传统中间件(如消息队列、API网关、缓存)在云原生时代发生根本性的变化。
特点:
- 服务化与轻量级:从笨重的单体中间件(如IBM WebSphere)演变为轻量级的、可独立部署的微服务(如Redis,RabbitMQ)
- 容器化:中间件本身被容器化,可以通过Kubernetes进行编排和管理。
- Operator模式:使用Kubernetes Operator来管理有状态应用(如数据库、消息队列),实现运维的自动化(如利用ETCD Operator可完成本分、恢复、升级等复杂操作)。
- Sidecar模式:通过Sidecar容器(如Envoy)将中间件能力(如服务发现、负载均衡、熔断)下沉到基础设施层,对应透明。
代表性技术:
- 服务网格:Istio,Linkerd(集成了服务发现、负载均衡、熔断、限流、观测等所有网络中间件功能)
- 消息队列:Apache Kafka、RabbitMQ、NATS
- API网关:Kong,Apache APISIX,Envoy
- 缓存:Redis,Memcached
无服务器计算 Serverless
Serverless(无服务器计算)是一种原生开发模型,开发者无需关心服务器(底层基础设施)的运维,只专注于编写业务代码,服务器管理、容量规划、扩缩容等工作全部由云平台自动完成。
Serverless应用需要按需使用中间件服务,推动了“数据库即服务”、“消息队列即服务”等托管中间件的变革。
函数计算
函数计算(Function as a Service, FaaS)是Serverless中最具代表的执行模型。
核心概念:
- 事件驱动:函数由特定事件触发执行,例如HTTP请求、消息队列中的消息、文件上传、定时器等。
- 极致弹性:根据请求量毫秒级自动扩缩容,从零实例扩展到成千上万个实例,空闲时自动缩容为零。
- 按需付费:只在中世纪执行函数时按执行时长和资源消耗付费,空闲时不产生任何费用。
优势:降低运维负担、成本优化、开发敏捷
挑战:
- 冷启动延迟:实例从零启动需要时间,可能影响响应速度
- 状态管理:函数本身应是无状态的,状态需要存储在外部的数据库或存储服务中
- 调试和观测:分布式和瞬态的特性使得调试和追踪变得更复杂
代表性技术:
- 公有云服务:AWS Lambda、Google Cloud Functions、Azure Functions
- 开源框架:Knative(基于Kubernetes的Serverless框架)、OpenFaaS
可观测行 Observability
可观测行是指除监控Monitoring外,通过系统外部输出的信息(如日志、指标和追踪)来理解系统内部状态的能力。
三大支柱:
- 日志 Logs:离散的、带时间戳的事件记录,用于记录详细上下文信息,如错误信息,调试信息。云原生工具如ELK Stack,Loki,Fluentd
- 指标Metrics:一段时间内可聚合的数字数据,用于衡量系统性能,如CPU使用率、请求QPS、错误率。云原生工具如Prometheus事实标准、Grafana可视化
- 追踪Traces:记录单个请求在分布式系统中流转的完整路径,用于分析延迟性能瓶颈。云原生工具如Jaeger,Zipkin
关联与协同
云原生技术栈是一个有机整体,容器化和Kurbernetes编排是基石,Serverless提供了最新应用开发范式,现代化中间件提供支撑服务,可观测行保证整个系统稳定、高效运行。
完整的应用生命周期势力:开发者编写一个函数(Serverless),该函数通过API网关(中间件)暴露,调用其他微服务,并将状态写入Redis(中间件),通过OpenTelemetry手机日志、指标和追踪数据,在Promethus和Grafana上展示。