微服务后时代是什么? 炒得最火的就是 Cloud Native. 顾名思义, 云原生就是面向云设计的应用, 自从 2013 年 Matt Stine 提出概念后, 更多是一套技术体系和方法论, 官方定义一直在演变, 但核心还是通过基础云平台, 云中间件, 微服务, 容器编排调度, Devops 的优化整合, 来帮助企业提高研发效率, 做到业务更快交付.
抽空读完《未来架构 - 从服务化到云原生》, 结合笔记也谈谈对云原生的一些简单理解
目录
云原生诞生背景是什么?
云原生能帮助研发解决什么问题?
云原生应用的定义是什么?
云原生当前生态圈是怎么样的?
云原生生态的基石 kubernetes
云原生诞生背景是什么?
信息技术 3 个阶段: 软件 -> 开源 -> 云服务
后台架构演进: 3 层 MVC -> 分布式服务 SOA -> 云原生架构
当前互联网业务核心挑战: 业务快速迭代, 业务组合复杂, 海量用户, 流量突增, 7*24 小时高可用(云原生必须擅长解决这些问题)
新技术促进分水岭: 容器 docker, 编排调度 kubernetes
云原生能帮助研发解决什么问题?
参考来自 Matt Stine: https://pivotal.io/cn/cloud-native
云原生应用的定义是什么?
云计算本质: 按需分配资源和弹性计算
云原生应用特点: 核心是利用按需分配和弹性伸缩来设计的应用, 让应用更适合在云平台运行
云原生十二要素: Heroku 团队提出的云应用设计理念
1,Codebase 基准代码: 同一应用对应一份基准代码, 可在各环境部署, 推荐 Git 管理
2,Dependencies 依赖: 显示声明依赖组件, 推荐 Maven
3,Config 配置: 将配置存储在环境变量, 与语言和运行系统无关
4,Backing Services 后端服务: 服务应作为松耦合资源, 如修改配置就可把 MySQL 切成 tidb
5,Build/Release/Run 构建 / 发布 / 运行: 应用发布基于基准代码的构建, 保证运行和基准代码同步
6,Processes 进程: 应用需作为无状态进程运行, 确保水平伸缩
7,Port Build 端口绑定: 通过端口绑定对外服务, 而非共享内存等
8,Concurrency 并发: 应用可通过水平伸缩来实现提高并发
9,Disposability 已处理: 可快速启动和优雅关闭, 确保云调用的服务可用性
10,Dev/Prod parity 开发和线上环境等价: 保持开发, 测试, 现上环境等价, 通过 Jenkins 工具规避差异
11,Log 日志: 使用日志流处理, 不用本地日志, 推荐 ELK
12,Admin Processes 管理进程: 定时任务脚本也应准守这些规则
云原生十二要素进阶: 新增 3 个要素
1,API first: 设计出合理并且高兼容的应用接口是首要任务
2,Telemetry: 可通过遥测感知应用运营状态, 而不用登陆机器
3,Authentication and Authorization: 建议用 OAuth2.0 和 RBAC 授权来保证应用安全
云原生当前生态圈是怎么样的?
CNCF:2015 年 Google 牵头创立云原生计算基金会(www.cncf.io), 致力于云原生技术普及和可持续发展, 发布了标志性作品 k8s, 也维护云原生全景图
CNCF Landscape: https://github.com/cncf/landscape
App Definition and Development 应用定义开发层
1,Database & Data Analytics: 关系型数据 oracle,MySQL.. ,Nosql 数据库 MongoDB,Redis...,NewSql 数据库 tidb..., 大数据处理 hadoop,spark...
2,Streaming: 消息中间件 kafka,rabbitmq..., 流式计算框架 strom,flink....
3,SCM Software Config Management: 推荐 Git 主流
4,App Definition: 解决怎么描述一个应用, 没有 Maven 很意外
5,CI/CD: 持续集成交付 jenkins,bamboo...
Orchestration & Management 编排与治理层
1,Scheduling & Orchestration: 调度 (资源自动合理分配) 与编排(对容器内应用治理), 核心就是 Kubernetes...
2,Coordination & Service Discovery: 提供高可用注册中心服务, zk,CoreDns,etcd...
3,Service Management: 远程通信 gRPC,Thrift..., 反向代理 Hginx,HAProxy, 服务治理 zuul, 还有比较火的 Istio Envoy 也属于这个范畴
Runtime 运行时层
1,Cloud-Native Storage: 云服务分布式文件系统 hdfs,ClusterFs.. 提供日志, 图片, 文档存放, 弱化单机磁盘存储
2,Container Runtime: 云原生应用选择容器作为轻量级运行载体, 推荐 docker 主流
3,Cloud-Native Network: 云原生网络解决每个容器独立 IP 问题, 推荐 CNI(Container Network Interface)容器网络接口标准
Provisioning 供应保障层
1,Host Management / Tooling: 对物理 / 虚拟机 (Node) 的管理, 核心是运维工具 Ansible,Puppet...
2,Infrastruction Automation: 基础设施自动化工具, 像 Docker 包管理 Infrakit, 简化 k8s 部署 Helm...
3,Container Registries: 容器仓库负责镜像存储分发(docker push/pull), 推荐 Harbor 主流
4,Secure Images: 提供保障镜像安全工具 Clair,Twistlock...
5,Key Management: 提供秘钥管理 Confidant...
Cloud 云设施层
1,Public: 公有云平台, 像著名的 AWS,Azure, 阿里云, 腾讯云...
2,Private: 私有云方案, 像 vmware,openstack...
Observability and Analysis: 对各层系统的监控分析
1,Monitoring: 服务器指标 Zabbix, 容器指标 CAdvisor, 时序指标 Prometheus, 指标分析 Garfana. 采集 ->存储 ->分析 ->告警自动化流程
2,Logging: 不应该写本地磁盘, 推荐 ELK(Elasticsearch,Logstash,Kibana)主流
3,tracing: 调用链追踪, 实践最有效的定位应用问题方案, 推荐 zipkin,jaeger...
云原生生态的基石 kubernetes
CNCF 整个技术栈都是围绕 k8s 建立, 不仅是解决了容器的编排问题, 更进一步可以说对云原生应用提供了定义规范
kubernetes 核心组件
1,K8s Master: 管理配置中心
2,K8s Node:Pod 运行的正真主机, 一般为物理机, 非 k8s 来管理.
3,API Server: 为各角色配置和验证数据
4,etcd: 配置管理
5,Controller Manager: 操作管理
6,Scheduler: 调度器
7,Pod: 最小的操作单元, 管理, 创建, 销毁等. 对应逻辑主机, 有独立 ip 和 port.
8,Kube-Proxy:Node 节点接入层
9,Kubectl: 集群命令管理工具
10,cAdvisor: 容器监控数据采集
11,Namespace: 资源和对象操作集合, 用来隔离对象:
kubernetes 分层设计
1,Infrastruction: 包括 CRI(runtime),CNI(network),CSI(storage), 仓库镜像等
2,Nucleus:k8s 核心 API, 对外构建应用, 对内提供插件环境
3,Application Layer: 负责部署路由, 包含批处理任务, 集群管理, DNS 路由解析等
4,Governance Layer: 负责自动化管理策略, 如核心 HPA 等
5,Interface Layer:kubectl 工具, 客户端 sdk
kubernetes 相关原语
1, 对象: 在 k8s 中几乎一切都是对象, 本质是一个持久化实体, k8s 通过这些实体来描述集群(有哪些应用运行在哪些 Node, 使用什么资源, 重启升级策略等)
2, 对象描述(Spec): 对象期望属性, 通过. YAML 文件描述, 通过 kubectl 创建运行
3, 对象状态(Status): 对象实际属性, 任何状况下, k8s 会尽量确保 Status 和 Spec 一致
4, 服务发现: 解决 Pod 内应用寻址问题, 核心 Service,Ingress,Custom Load balancer3 种方式
5, 权限控制: k8s 集群作为多租户平台, 需提供网络隔离 (CNI 插件), 资源隔离(namespace/pod), 身份隔离(RBAC) 等安全机制
6 Sidecar 模式: 通过松耦合 Sidecar 进程来辅助应用非功能需求, 如流量控制, 权限认证等
来源: https://www.qcloud.com/developer/article/1479646