路标。或者说包含的类别:
- 容器化
- 可以配合docker使用
- 不管应用服务的文件大小和依赖,都可以进行容器化
- 随时间推移,应用服务可以被分割,功能可以微服务化
- ci/cd
- 持续集成 持续发布,源码的更改会自动进行构建 测试 发布到各个平台:测试平台、最终平台、预发布平台、产品
- 自动化:自动发布,自动回滚,自动测试
- 服务编排
- k8s是市场领先的服务编排解决方案
- cncf提供了已认证过的k8s发布版本,确保api都是合规定的
- helm是k8s的包管理器,可以帮助构建更加复杂的k8s应用
- 可观察、可分析
- 这里的解决方案更多的是为了监控、日志、跟踪
- 推荐使用prometheus项目做监控、fluentd做日志、jaeger做跟踪
- 跟踪,也可以使用OpenTracing项目,兼容jaeger
- 服务代理、服务发现、服务网格
- 服务发现可使用CoreDNS,原因是快、灵活
- 服务网格可是用Envoy或是Linkerd
- 她们都提供了离线健康检查、路由、负载均衡
- 网络和策略
- calico、flannel、weave都兼容cni网络(container network interface)
- opa有着更加一般的目标:策略引擎支持 认证、准入控制、数据过滤
- 分布式数据库/分布式存储
- 目标是更高的弹性、更强的可伸缩性。mysql的可伸缩可使用vitess项目
- rook存储和k8s有良好的集成
- k8s的核心大脑:etcd可提供一个可靠的存储集群
- tikv是一个高性能分布式kv存储,ps 使用rust写的
- 流和消息
- 考虑高性能而不是json-rest,可选择grpc或nats
- grpc使用广泛,nats支持多模式消息系统(请求/应答,订阅/发布,负载均衡队列)
- 服务注册和运行时
- 最常用,且兼容oci规范的是containerd、rkt、cri-o
- harbor是一个容器仓库,可以存储、标记、扫描
- 软件发行
- "更新框架"的一个实现:Notary,用于 安全的软件发行
什么叫云原生:
应用程序要满足一下几点:
- 运行时可伸缩
- 运行在现代/动态环境:公有云、私有云、混合云
- 容器化、服务网格、微服务、不变的基础设施、申明式api
这些技术都是为了构建一个松耦合的系统:
- 有弹性、可管理、可视化
- 自动化
- 让工程师快速交付
- 降低投入