云原生是一种构建和运行应用程序的方法,可以利用云计算模式的优势 —— 按需计算的能力和即用即付的定价模式。这些应用程序是以云计算平台的快速响应为基础构建和部署的,为企业提供跨云更高的灵活性,弹性和可移植性。
本博客解释了构建云原生应用程序的重要性、好处以及实现路径。
FANG(Facebook,Amazon,Netflix和Google)等早期技术采纳者在输送软件方面有一些共同点。他们在建设能力上投入巨资,使得他们能够定期发布新的功能(每周,每天,甚至在某些情况下可达到每小时)。他们已经实现了这种快速发布的节奏,同时支持其应用安全可靠地运行; 从而使他们能够更有效地回应客户的需求。
他们通过超越专门的自动化,并提供云原生实践来交付这些可预测的能力,实现了这种敏捷性。DevOps,持续交付,微服务和容器形成了云原生模式的四条主要原则。这四条原则有共同的总体目标,即通过自动化使应用程序开发和团队运营更高效。
从这点来看,这些技术只在软件驱动的公司才能得到成功的证明。更小,更灵活的公司也能通过这点实现价值。然而,就像 乔·贝达 (Kubernetes的创始人、 Heptio的CTO),也有极 少数的例子 被应用这些技术为中心的公司超出这个理念。
任何团队/公司在输送产品时都应该认真考虑采用云本身的做法,如果他们想要更快地输送软件,同时降低风险,并转而取悦他们的客户 。
云本地实践包括四个主要原则。
采用这些方法可以获得的好处包括:
现在,让我们看一下云本地堆栈的各种构建块,以帮助实现上述目标。在这里,我们根据工具和解决方案解决的问题不同对它们进行分组。我们从底层的基础设施层开始,然后是用于配置基础设施的工具,紧跟着是容器运行环境; 在此之上,我们有容器环境的管理集群工具,且在最顶层,我们有开发应用程序的工具和框架。
基础设施:最底层是基础设施层,它通常提供由云(AWS,GCP,Azure,OpenStack,VMware)带有的计算,存储,网络和操作系统。
供应:供应层由辅助供应的基础设施,管理图像和部署应用程序的自动化工具组成。Chef,Puppet和Ansible是DevOps工具,可以有能力管理其配置和环境。Spinnaker,Terraform和Cloudformation提供工作流以配置基础架构。Twistlock和Clair提供了硬化容器图像的能力。
运行:runtime提供应用程序运行的环境。它由应用程序与相关的存储、网络一起运行的容器引擎组成。containerd和rkt是使用最广泛的容器引擎。Flannel和OpenContrail为容器提供必要的覆盖网络,以便彼此之间、和外部世界都能进行交互,与此同时,Datera,Portworx,AppOrbit等可以提供必要的持久性存储,使得容器可以轻松移动到云端。
编排和管理:像Kubernetes,Docker Swarm和Apache Mesos这样的工具抽象了管理容器集群,这允许在多个主机之间轻松地调度和编排容器。etcd和Consul为发现提供服务注册,而AVI和特使提供代理,负载均衡等服务。
应用程序定义和开发:我们可以为跨多种语言的应用程序(Python,Spring / Java,Ruby,Node)构建微服务。Packer,Habitat和Bitnami为应用程序提供映像管理,以跨所有基础架构(容器或其他)运行。 Jenkins,TravisCI,CircleCI和其他构建自动化的服务器提供了建立持续集成和交付管道的能力。
像Datadog,New Relic和AppDynamic等所有现代监控平台都支持监控容器和微服务。
Splunk,Elasticsearch和fluentd有助于做日志聚合,而Open Tracing和Zipkin助于调试应用程序
文化:采用云原生实践需要思想上的转变,在这儿团队不再独立工作。软件交付管道的端到端自动化,只有在开发团队和IT运营团队之间存在共同责任,且协作增加的情况下才可能实现。
当我们把所有的东西放在一起时,我们可以得到完整的云原生景观,如下图所示。
我希望这篇文章体现一个想法,即云原生为什么重要,主要的益处是什么。正如您在上面的信息图中可能已经注意到的那样,已经有不少项目,工具和公司试图解决类似的问题。下一个问题很可能是“我要如何开始?哪些工具适合我?“等等。我将在接下来的博客文章中更多地介绍这些主题。敬请关注!
请让我们知道您在DZone上的 想法, 或者 在Twitter上联系chirag_jog或 velotio。