云原生本质是在于弹性地利用云平台的资源。云原生计算基金会(CNCF, Cloud Native Computing Foundation)将云原生生态圈划分为上下五层及共用两层,上下五层包括应用定义与开发层、编排与治理层、运行时层、供应保障层及云设施层,共用层包括观察与分析、平台。
一、应用定义与开发层
应用定义与开发层包括数据库与数据分析、流式处理、软件配置管理、应用定义、持续集成/持续交付等几个方面。
1.1 数据库与数据分析
包括数据库与大数据分析工具,涉及关系型数据库、NoSQL、NewSQL、数据库中间层及大数据处理方案。
1.1.1 关系型数据库
包括Oracle、SQL Server、MySQL、MariaDB、PostgreSQL、DB2等,以ACID事务模型为支撑,关系型数据库是核心数据存储选型的首选。
1.1.2 NoSQL
包括MongoDB、Couchbase、Redis、Cassandra、HBase、Neo4j等。分面向文档、面向列簇、面向key-value、面向图等。NoSQL数据库在数据的分布式处理方面表现更加优秀,如redis作为缓存,Neo4j作为关系分析的数据库,MongoDB作为储存Schema易变型数据的数据库。
1.1.3 NewSQL
NewSQL兼容SQL的同时,更加擅长分布式处理。TiDB是其中的优秀代表,TiDB采用key-value存储引擎,可以动态平滑地进行数据迁移,自动水平伸缩,在线修改Schema,索引变更,是完整的数据存储方案。
1.1.4 大数据处理方案
包括Hadoop、Spark、Druid(大数据实时处理分布式系统)等。
1.2 流式处理
包括消息中间件及流式实时计算框架
1.2.1 消息中间件
包括RabbitMQ、Kafka、RocketMQ等。RabbitMQ基于消息索引查询,功能完善,但分布能力和性能不足。Kafka及早期的RocketMQ采用日志追加的存储引擎,分布能力和性能强大,但对消息控制能力不足。新一代的RocketMQ以及OpenMessaging(也是由阿里巴巴孵化)正在平衡这两种情况。
1.2.2 流式实时计算框架
包括storm、Flink,对于实时PV、UV等需求是个不错的选择。
1.3 软件配置
软件配置管理SCM,包括SVN和Git。一般企业使用GitLab来搭建自己的软件配置管理系统。个人开发者、开源项目可以使用GitHub或码云来管理源代码。
1.4 应用定义
如java的Maven等。
1.5持续集成及持续交付
常见的持续集成及持续交付工具包括Jenkins、Bamboo、CircleCI、Travis等。
二 编排与治理层
包括调度与编排、分布式协调与服务发现、服务管理等。
2.1 调度与编排
调度是将分布式系统中的空闲资源合理分配给需要的进程并采用容器进行封装的过程。
编排是对系统中的容器进行健康检查、自动扩缩容、自动重启、滚动发布等的过程。
Kubernetes、Mesos、Swarm等属于此范畴。
2.1.1 Kubernetes
出色的容器编排系统,面向云原生paas平台。
2.1.2 Mesos
开源集群管理器,善于构建一个可靠的平台,面向“大数据+编排调度”平台,用来运行多任务关键工作负载,包括docker容器、遗留应用程序(如java)和分布式数据服务(如spark、kafka、Cassandra、Elastic)。
Mesos和Kubernetes都是为帮助应用程序在群集环境中运行而创建的,Kubernetes更加专注于运行容器群集,具有更多功能。
如果您同意Google的意见或没有具体的方式来布局集群,Kubernetes是一个很好的选择,可以为您处理许多幕后烦恼。与此同时,Mesos具有更多的灵活性,更强大的调度功能,并且能够与更多种类的调度器配合使用,并且已经从原始创建中进行了修改,以更好地支持容器。
2.2 分布式协调与服务发现
分布式系统一般通过一个高可靠的注册中心对分布式服务进行协调与发现,包括Zookeeper、Spring Cloud中的Eureka,CNCF的CoreDNS、etcd等。
2.3 服务管理
包括远程通信、反向代理、服务治理等方面。
其中远程通信要依托高性能和跨语言的通信框架,包括gRPC、Thrift、Avro等,集序列化和通信功能于一体。
反向代理包括硬件的F5和软件的HAProxy、Nginx等。
服务治理包括负责网关的Zuul,负责客户端负载均衡的Ribbon,负责熔断的Hystrix;Scala语言开发的Finagle,国内的Dubbo等;Service Mesh是新兴的服务治理概念,是指服务网格,Istio框架是这方面的代表,Kubernetes掌控编排,Istio掌控服务治理是未来的方向。
三 运行时层
包括云原生存储、容器和云原生网络,分布对于传统应用的文件系统、进程和网络环境。
3.1 云原生存储
是指合适云服务的分布式文件存储系统,包括HDFS、Ceph、ClusterFS等。广泛应用于存放日志、图片、文档等。
3.2 容器
docker是使用最广泛的容器。
3.3 云原生网络
主要解决为每个容器(或Pod)分配独立IP地址。软件定义网络SDN是最佳方案。CNI是容器网络接口标准,主要实现有Flannel、Calico、OVS、weave等。
四 供应保障层
主要包括宿主机管理工具、基础设施自动化工具、容器仓库、镜像安全和密钥管理。
4.1 宿主机管理工具
包括监控自动化工具和流程自动化工具,自动化运维工具的目标不再是安装应用及其相关环境,而是安装云原生应用所需的环境。
4.1.1 监控自动化工具
可以对服务器CPU、内存、磁盘IO、网络IO进行探测监控,包括Nagios、Zabbix。
4.1.2 流程自动化工具
对服务器进行维护,实现应用上线部署等日常操作的自动化和标准化,包括Ansible、Puppet、Chef、SaltStack等。
4.2 基础设施自动化工具
包括Docker的包管理工具Infrakit,及简化Kubernetes部署的Helm工具。通过Helm Charts帮助安装和更新复杂的Kubernetes应用,支持版本管理和控制。
4.3 容器仓库
Harbor可以帮助用户迅速搭建一个企业级的Docker Registry服务。
4.4 镜像安全和密钥管理
Clair、Twistlock等工具可以检查容器中应用的漏洞。
五 云设施层
主要包括AWS、Azure、阿里云、腾讯云等公有云和OpenStack、VMware等私有云。
六 观察与分析
包括对系统指标的监控,对链路调用的追踪,对分布式日志的收集。
6.1 监控
对物理服务器指标采集和报警工具包括Nagios、Zabbix。对容器指标采集工具有CAdvisor等。存储海量采集信息的时序数据库Prometheus、InfluxDB等。Grafana用于监控分析的图形工具来展示数据。
6.2 对链路调用的追踪
OpenTracing是调用链的标准协议,遵循该协议的开源解决方案有ZipKin、JAEGER,及国产开源项目SkyWalking等。另外未遵循该协议的开源方案有PinPoint、Open-Falcon、CAT等。
6.3 日志收集
用于采集标准输出并将日志输入其它流的工具有Fluentd、Flume、FileBeat、Logstash等。然后这些工具将日志通过各种缓冲管道进行处理,写入日志中心。日志中心的存储介质可以是Elasticsearch、HBase等。Elastic公司提供的搜索引擎Elasticsearch、日志收集工具Logstash和图形界面Kibana所组成的一站式开源解决方案(ELK),也有Splunk这样的一体化商业日志解决方案。
七 平台
平台是指基于云的整合平台。包括围绕Mesos打造的DC/OS;以及可以整合Mesos和Kubernetes的Rancher平台。