回顾云原生
云计算和 GPT的关系就是电和电动机的关系。 - 王坚
传统单体应用具有显而易见的缺点:庞大,复杂,发布周期长等等,越来越无法适应现代软件开发的需求。
虚拟化技术的出现,使得应用可以在虚拟化平台上运行。如 OpenStack,其构建了隔离的虚拟化物理机环境(虚拟机)供应用运行,应用运行在虚拟机如同运行在真实的服务器上。
相比于单体应用,虚拟化技术主要解决了资源利用的问题。一台服务器创建多个虚拟机,更高效的利用了服务器资源。
虚拟化技术部分解决了应用运行的问题,更加合理的应用服务器资源。但是,虚拟化构建的虚拟机是包括操作系统的,意味着每个虚拟机都非常的大,启动一个虚拟机,运行的不仅是单体应用更包括操作系统。带来的问题是,相比于应用,虚拟机中的操作系统反而成了使用资源大户。
容器技术的出现将操作系统层下放到服务器,构建的容器只包括应用。说容器技术,其实是新瓶装旧酒,背后用到的是操作系统支持的资源隔离 namespace 和资源限制 cgroups 技术。当然,容器确实提供了新的东西:镜像 image 和构建镜像的 Dockerfile。提供了完整的运行应用的解决方案:Dockerfile 中定义应用运行的基础镜像,环境和应用。Docker 根据 Dockerfile 的配置信息构建应用镜像 image,image 是一个独立的静态沙箱,通过 Docker 启动 image ,启动起来的是运行应用的沙箱(容器)。
容器的出现进一步解决了资源利用的问题。
随之而来也带来了一些变化,应用越来越细,做的事情越来越专,越来越专就要定义应用之间的边界,降低耦合。然而,应用越来越细,“总的应用”所实现的需求是一样的,必然导致容器越来越多,如何编排和管理容器自然成了必须解决的问题。
单体应用在微服务转变过程中,出现了微服务的定义 - 十二因素应用:
(具体可参考:云原生关乎文化,而不是容器,迁移到云原生应用架构,Kubernetes Handbook)
继续往下走,容器越来越多之后,对容器的编排和管理就变得很复杂,如容器的负载均衡,容器应用的服务注册和发现,容器的调度等等。这些是单纯的容器技术没办法做的事。
Kubernetes 的出现解决了容器编排和管理的问题,其相当于在操作系统之上构建了一层平台/云操作系统,该云操作系统负责容器的编排和管理(注:Kubernetes 并不是唯一一个容器编排管理系统,类似的还有 Swarm 和 Mesos,只不过 Kubernetes 成了容器编排管理系统的绝对赢家)。
Kubernetes 解决了容器的编排和管理问题,对于开发者而言,其只需要关注应用本身提供的服务,大大加快了应用的开发速度。
当然,光是加快应用的开发速度是不够的,应用的测试,应用的部署,应用的发布等等都需要提高。
2015 年 Google 主导成立了云原生计算基金会(CNCF:CNCF is the open source, vendor-neutral hub of cloud-native computing, hosting projects like Kubernetes and Prometheus to make cloud-native universal and sustainable),围绕着云操作系统 Kubernetes,在 CNCF 下,一系列生态应运而生。这些生态扩展了丰富的功能,其中包括实现基于 Kubernetes 的 CI/CD(持续集成/持续发布)构建:
从上图可以看到,另一个重点在于云原生下的日志收集和监控也被集成在 CI/CD 中,基于日志的收集和监控相对于云原生来说非常重要,有必要将它摘出来单独讲。
不同于传统单体应用,微服务的调用链更长,交互更复杂。有时候在 A 点看到的问题,出错却在 X 点,追踪,分析问题就变得很困难。因而,日志收集和分析就显得尤为重要。
(有一点需要注意的是,微服务调用链更长,交互更复杂,如果不定义好应用的边界和减少耦合,很容易出现 云原生面条 的情况,那将会是另一种形式的痛苦。)
Prometheus 是一个功能丰富的开源监控和警报工具。其包含一个内部数据存储用来收集指标,如生成的时间序列数据。Prometheus 还拥有众多插件,允许它将数据暴露给各种外部解决方案,并从其他数据源导入数据,包括所有主要公有云监控解决方案。
Grafana 是一个优秀的仪表盘、分析和数据可视化工具。它没有 Prometheus 的全功能数据收集能力,但 Prometheus 又没有 Grafana 的数据呈现界面。事实上,他们最好是结合在一起使用 ——Prometheus 负责数据收集和汇总,Grafana 负责数据展示。它们共同创造了一个强大的组合,涵盖了数据收集、基本警报和可视化。
Kibana 是世界上最流行的开源日志分析平台 ELK Stack 中的 K ,它为用户提供了一个工具,用于在存储在 Elasticsearch 集群中的日志数据之上探索、可视化和构建仪表板,也可以结合 Prometheus 一起使用。
OpenShift 是由 RedHat 提供的非常优秀的云操作系统(OpenShift Container Platform: RedHat's private, on-premise cloud application deployment and hosting platform),其集成了 Prometheus 和 Grafana 用于日志收集,监控和分析,详细可参考 OpenShift Container Platform Monitor.
简单回顾了一点云原生的发展史,展望未来该做点什么呢?
我想主要有几点:
- 从源码层面深入了解 Kubernetes,打好深度关。
- 从 CNCF Landscape 层面了解云原生生态,打好广度关。
- 参与云原生社区,贡献绵薄之力。