什么是云原生?是炒做仍是软件开发的将来?

21CTO导读:最近有很多有关云原生态开发的讨论,它能够解决啥事?或者这是另外一种技术时尚?继续阅读本文,能够得到一些技术看法。

图片


很长一段时间以来,云原生Cloud Native就成了软件开发中热门的话题之一。一些开发人员认为它只是炒做,在失去吸引力后在一段时间就后消失;而对于另外一部分人的观点认为,这就是软件开发的将来。编程


不管将来还会带来什么,云原生软件确是软件行业最大的趋势之一。它在改变着咱们思考软件开发,部署和运营软件产品的方式。服务器


那么,究竟什么是“云原生”?架构


云原生的不一样定义


Cloud native不只仅是云提供商并使用它来运行现有的应用程序。它会影响应用程序的设计,实现,部署和操做。app


提供流行的Spring框架和云平台的软件公司Pivotal将云原生描述为:框架

“云原生是一种构建和运行应用程序的方法,可充分利用云计算模型的优点。”分布式


来源:什么是云原生应用程序? - Pivotalide

云原生计算基金会是一个旨在建立和推进云原生编程范式采用的组织,它将云原生定义为:微服务

“云原生计算使用开源技术栈:工具


  1. 容器。每一个部分(应用程序,进程等)都打包在本身的容器中。这有利于再现性,透明度和资源隔离。测试

  2. 动态编排。主动安排和管理容器以优化资源利用率。

  3. 微服务为导向。应用程序被拆分为微服务。这将显著提升应用程序的总体灵活性和可维护性。“




来源:常见问题(FAQ) - Cloud Native Foundation

你们看,这两种定义有些类似,但从略微不一样的角度来看这个主题。咱们能够将云原生的定义归纳为如下词句:

“将软件应用程序构建为微服务,并在容器化和动态调度平台上运行,利用云计算模型优点的部署方式。”

老实说:“利用云计算模型的优点”听起来确实不错,但若是是云的新手,咱们仍然想知道这究竟是什么,以及它如何影响实施与部署软件的方式。这至少是我第一次阅读有关云原生计算的感觉。


咱们来看看云原生的不一样部分。


容器


容器的基本思想是将软件与执行它所需的一切打包到一个可执行的软件包中,例如Java VM,Application服务器和应用程序自己。而后,你能够在虚拟化环境中运行此容器,并将包含的应用程序与其环境隔离开来。


这种方法的主要好处是应用程序独立于环境,而且容器具备高度可移植性。你能够在开发,测试或生产环境上轻松运行相同的容器。若是应用程序设计还支持水平扩展,还能够启动或中止容器的多个实例,还能够根据当前用户需求添加或删除应用程序的实例。


Docker是目前最受欢迎的容器实现。它的确很是受欢迎,以至于Docker和容器这两个术语常常互换使用。但请记住,Docker项目只是容器概念的一个实现,能够在未来被进行替换。


若是你想尝试Docker,应该从免费的社区版开始。咱们将它安装在本地桌面上,就能够开始构建本身的容器定义并将第一个应用程序部署到容器中。当你完成部署后,能够将容器交给一个质量保障的同事,将其部署到生产环境中去。


若是你的应用程序在测试或生产环境中工做,或者须要更新某些依赖项,也不用再担忧——容器包含应用程序所需的全部内容,你只需启动它便可。


管弦乐做曲家


将包含全部依赖项的应用程序部署到容器中只是第一步。它解决了咱们之前的部署问题,但若是想从云平台中充分受益,那么开发者还将面临新的挑战。


根据系统的当前负载启动附加或关闭正在运行的应用程序节点,这作到并不是易事。


你须要:


  • 监控系统,

  • 触发容器的启动或关闭,

  • 确保全部必需的配置参数都到位,

  • 平衡活动应用程序实例之间的负载量,

  • 在容器之间共享身份验证机密。


手动完成这些操做须要花费不少精力,而且对于系统负载的意外调整反应也会比较慢。开发者须要拥有适当的工具来自动完成这些工做。这就是构建不一样解决方案的原:一些流行的工具备Docker Swarm,Kubernetes,Apache Mesos和亚马逊的ECS。


微服务


如今咱们已经有了全部基础架构和管理工具,是时候讨论云原生引入系统架构的变化了。


将云原生应用程序构建为微服务系统,相信你已经据说过这种架构方法了 。


这种架构风格的通用概念是将一个由多个相对较小的应用程序组成系统,它被称之为微服务。它们之间协同工做提供系统的总体功能。


每一个微服务都实现了一个功能,具备明肯定义的边界和API,可由相对较小的团队开发和管理、操做。


这种方法提供以下几个好处:


微服务的好处


首先,实现和理解一种功能较小的应用程序要容易得多,不用再构建一个要完成全部任务的大型应用程序。这不只加快了开发速度,让服务适应变动或新需求变得更容易。开发者须要关注看似微小变化的意外反作用,以便专一于手头的开发任务。


微服务还让人们可以有更有效地扩展。咱们在前面谈到容器时,说到能够简单地启动另外一个容器来处理用户请求的增长,这称为水平缩放。对于每一个无状态应用程序,你均可以这样作,这与其应用大小无关。只要应用程序不保留任何状态,你就能够将用户的下一个请求发送到任何可用的应用程序实例中。


即使如此,咱们仍然可使用单体应用程序来实现。但扩展微服务系统的成本一般要低不少。开发者只须要扩展支持大负载的微服务便可。若是系统能够处理得好当前负载,咱们就不须要添加服务的任何其它实例。


咱们用笨重的应用就作不到这一点。好比须要扩展一个功能的容量,则须要启动完整应用的新实例。这可能看起来也不是什么大问题,但在云环境中,别忘了须要为硬件资源的使用付费。即便你只用应用的一小部分,仍然须要为其余未使用的部分获取额外的资源。


微服务可以让你更有效地使用云资源,并有效减小云服务商的帐单。


引入微服务的挑战


一般就是这样,人们没法免费得到架构风格的好处。


微服务从服务自己中消除了一些复杂性,并提供了更好的可扩展性,若是你如今正在构建一个分布式系统,微服务会增长系统级别的复杂性。以下图:


图片


为了尽量下降这种额外的复杂性,你应该避免微服务之间存在任何的依赖关系。


若是现象不可避免,须要确保相关服务相互发现,并有效地实现其通讯。开发者还须要处理反映缓慢或不可用的服务,以使它们不要影响系统总体。


系统的分布式特性也使得在生产中监视和管理系统变得困难。


运营者如今须要监控微服务系统而再也不是几个总体系统,而且对于每一个服务,可能有多个并行运行的实例。人们须要监控更多应用程序实例。咱们能够经过使用Retrace,K8s等工具从全部系统来收集信息。


构建微服务


咱们并不须要使用特定的框架或技术栈来构建微服务。


它让开发变得容易多了。它为开发者提供了许多即用型功能,这些功能通过了充分测试,而且已在生产环境中使用过。


好比在Java中,有许多不一样的选项可用。两个流行的是Spring Boot和Eclipse Microprofile。Spring Boot将Spring框架与其它几个框架/库集成在一块儿,以应对微服务架构的更多挑战。


Eclipse Microprofile遵照相同的理念,但它使用Java EE架构,即多个Java EE应用程序服务器协同工做,它提供了一组规范和多个可互换的技术实现。


小结


云原生计算的思想和概念,引入了实现避免复杂,高度可扩展系统的新方法。即使 你没有在云平台上托管应用程序,这些新想法也会影响你未来开发应用程序的方式。


容器技术使分发应用程序变得更加容易。你在开发过程当中能够和团队成员之间共享应用程序,也可在不一样环境中测试运行。执行完全部测试后,你能够轻松地将同一容器部署到生产环境中。


微服务提供了一种构建系统的新方法。虽然引入了新的挑战,但它将咱们的注意力转移到每一个组件的设计上。这样能够有效改善封装,让人们实现可维护的组件,更好地快速适应新的产品需求。


若是你决定用容器在生产中运行微服务系统,须要一个帮助管理系统的编排解决方案,那还有kubernates,jenkins等工具。


微服务如此神奇,让咱们一块儿发现更多。

相关文章
相关标签/搜索