从分布式架构到云原生架构 ############################# 发展趋势 ======== 趋势:: 软件改变世界 开源改变软件 云吞噬开源 互联网:: Web 1.0 业务模式 基于流量点击赢利的单方面信息发布的 由 All in One 的「单体式」应用架构 Web 2.0 业务模式 由用户主导而生成内容的 更加灵活的「分布式应用」架构 移动互联网时代 智能手机的出现以及 4G 标准的普及 互联网应用由 PC 端迅速转向更加自由的移动端 概念:SOA、DevOps、容器、CI/CD、微服务、Service Mesh 产品:Docker、Kubernetes、Mesos、Spring Cloud、gRPC、Istio 「云原生」架构 云原生生态圈 ============ 应用定义与开发层-Application and Development -------------------------------------------- * 数据库:: 1. 关系型DB Oracle SQL Server MySQL PostgreSQL DB2 MariaDB 2. NoSQL MongoDB-面向文档 Couchbase-面向列簇 Redis-面向k/v Cassandra HBase Neo4j-面向图 3. NewSQL TiDB-PingCAP 兼容SQL,更擅长分布式处理 4. 大数据处理方案 Hadoop Spark Druid * 流式处理:: 1. Streaming&Message 2. 消息中间件 CloudEvent NATS RabbitMQ Kafka OpenMessaging-阿里 3. 流式实时计算框架 Storm Flink 应用定义&镜像构建:: Application Definition & Image Build 应用定义 Helm 持续集成&持续交付:: Continuous Integration & Delivery 持续交付 Argo 编排&治理-Orchestration&Management ---------------------------------- * 调度与编排(Scheduling&Orchestration):: Kubernetes MeshOS Swarm Nomad * 分布式协调与服务发现(Coordination & Service Discovery):: CoreDNS-CNCF etcd-CNCF zookeeper Eureka-netflix * 远程过程调用(Remote Procedure Call):: gRPC-CNCF Thrift-Apache SofaRPC * 服务代理(Service Proxy):: Envoy-CNCF contour-CNCF BFE-baidu,CNCF Nginx Haproxy traefik f5-硬件 * API网关(Api Gateway):: apisix kong * 服务网格(Service Mesh):: Istio Linkerd 运行时-Runtime -------------- 云原生存储(Cloud-Native Storage):: ROOK-CNCF 容器运行时(Container Runtime):: containerd-CNCF cri-o gVisor kata SmartOS 云原生网络(Cloud-Native Network):: CNI-CNCF flannel Calico weave 供应保障层-Provisioning ----------------------- 自动化&配置(Automation&Configuration):: Ansible Puppet Chef Apollo KubeEdge 容器仓库(Container Registry):: Harbor-CNCF Dragonfly-CNCF 安全与规格(Security & Compliance):: TUF-CNCF falco-CNCF Notary-CNCF OpenPolicyAgent-CNCF Clair Twistlock 密钥管理(Key Management):: Spiffe-CNCF Spire-CNCF Vault 可观察性与分析-Observability and Analysis ----------------------------------------- 监控-Monitoring:: Prometheus-CNCF Thanos-CNCF InfluxDB Grafana OpenMetrics 日志-Loging:: Fluentd-CNCF Elastic logstash 跟踪-Tracing:: Jaeger-CNCF OpenTracing-CNCF SkyWalking OpenTelemetry zipkin 混沌工程-Chaos Engineering:: ChaosMesh ChaosToolKit ChaosKube ChaosBlade 观察分布式服务 ============== 核心概念:: 日志(Logging) 日志描述的是一些不连续的离散事件 指标(Metrics) 指标可以累加,具有原子性 追踪(Tracing) 又称分布式追踪 组合:: 追踪+日志 分布式追踪系统的早期形态 在单次请求范围内处理信息 日志+指标 日志分析系统的常规架构 解析现有日志获取相关指标 追踪+指标 指明基于追踪系统的数据分析指标 应用间的关系以及数据流向 分布式追踪:: 来源 Google于2010年发布的论文 Dapper, a Large-Scale Distributed Systems Tracing Infrastructure 核心实现方法 请求上下文中增加span_id和parent_id 用于记录请求的上下文关系 常见的开源解决方案:: Apache Zipkin OpenTracing Jaeger OpenCensus OpenTelemetry 云原生基石-Kubernetes ===================== 核心组件:: etcd 协同存储、负责保存整个集群的状态 api-server 提供资源操作的唯一入口 提供认证、授权、访问控制、API注册和发现等机制 controller manager 负责维护集群状态 执行故障检测、自动扩展、滚动更新等操作 Scheduler 负责资源调度 按调度策略将Pod调度到相应的机器 Kubelet 负责维护容器的生命周期 负责对容器存储接口(CSI)进行管理 负责对容器网络接口(CNI)进行管理 容器运行时(Docker) 镜像管理 Pod和容器的运行 Proxy 负责提供集群内部的服务发现和负载均衡 插件:: CoreDNS 为集群提供DNS服务 Ingress Controller 为服务提供外网入口 Prometheus 负责资源监控 Dashboard 提供GUI Federation 提供跨可用区集群 分层架构:: 1. 核心层 对外提供api构建高层应用 对内插件式应用执行环境 2. 应用层 负责部署和路由 可部署的应用包括 * 无状态应用 * 有状态应用 * 批处理任务 * 集群应用等 路由类型有 * 服务发现 * DNS解析 3. 管理层 负责自动化 * 自动扩展 * 动态部署 策略 * RBAC * ResourceQuota * NetworkPolicy 4. 接口层 kubectl命令行工具 客户端SDK 5. 云原生生态系统 接口层之上 负责容器集群管理调度 6. Kubernetes内部 CRI CSI CNI 镜像仓库 云供应商 身份供应商 设计哲学:: 设计模式 命令式->声明式 ServiceMesh =========== 前期:: Sidecar ServiceMesh期:: 不再将代理视为单独的组件 强调这些代理连接而成的网络 强调服务间通信网络的整体 参考 ==== * 架构新纪元(一):从分布式架构到云原生架构: https://www.infoq.cn/article/fAjL7MEGbjKJtS75MN4E * 架构新纪元(三):云原生的生态圈: https://www.infoq.cn/article/RKZMdz4HOtqGUCuWmTUZ * 架构新纪元(四):观察分布式服务: https://www.infoq.cn/article/zp1SuoGdo09du04eliCU * 架构新纪元(五):云原生生态的基石 Kubernetes: https://www.infoq.cn/article/xT2yhmyewicXrecS8mQI/