精华内容
下载资源
问答
  • 云原生”这个词被大量引用,尤其云服务商。不仅如此,云原生甚至还有自己的基金会:由Linux基金会于2015年推出的云原生应用基金会(CNCF)。“云原生”定义在一般用法中,“云原生一种构建和运行应用程序的...

    “云原生”这个词被大量引用,尤其是云服务商。不仅如此,云原生甚至还有自己的基金会:由Linux基金会于2015年推出的云原生应用基金会(CNCF)。

    “云原生”定义

    在一般用法中,“云原生”是一种构建和运行应用程序的方法,它利用了云计算交付模型的优势。“云原生”是关于如何创建和部署应用程序,和位置无关。 这意味着应用程序位于云中,而不是传统数据中心。

    CNCF将“云原生”定义的更为狭窄,意味着使用开源软件堆栈进行容器化,其中应用程序的每个部分都打包在自己的容器中,动态编排,以便每个部分都被主动调度和管理,以优化资源利用率和面向微服务的应用程序,以提高应用程序的整体灵活性和可维护性。

    咨询公司Deloitte的董事总经理Mike Kavis说:“云原生应用程序专门设计用于运行现代云计算平台所需的弹性和分布式特性。” “这些应用程序松散耦合,意味着代码不会硬连接到任何基础架构组件,因此应用程序可以按需伸缩,并采用不可变基础架构的抽象。通常,这些架构是使用微服务构建的,但这不是强制性要求。“

    云服务提供商Splunk的首席技术支持者Andi Mann表示,对于云原生应用程序而言,最大的不同之处在于应用程序的构建,交付和运维方式。“利用云服务意味着使用敏捷和可扩展的组件(如容器)来提供离散和可重用的功能,这些功能以良好描述的方式集成,甚至跨越多云等技术边界,这使得交付团队可以使用可重复的自动化和编排来快速迭代。”

    云原生应用程序开发通常包括DevOps,敏捷方法,微服务,云平台,Kubernetes和Docker等容器,以及持续交付,简而言之,每种新的和现代的应用程序部署方法。

    因此,你确实希望拥有平台即服务(PaaS)模型。PaaS不是必需的,但它使事情变得更容易。绝大多数云客户从基础架构即服务(IaaS)开始,这有助于从底层硬件中抽象出他们的应用程序。但PaaS增加了一个额外的层来抽象底层操作系统,因此你可以完全专注于应用程序的业务逻辑,而不必担心进行操作系统调用。

    云原生和本地部署应用程序之间的差异

    云原生应用程序开发采用与传统企业应用程序完全不同的体系结构。

    编程语言

    编写在公司服务器上运行的本地部署应用程序往往使用传统语言编写,如C/C ++,C#或其他Visual Studio语言(如果部署在Windows Server平台上)和企业级Java。如果它在大型机上,可能使用Cobol。

    云原生应用更有可能以网络为中心的语言编写,这意味着使用HTML,CSS,Java,JavaScript,.Net,Go,Node.js,PHP,Python和Ruby。

    可更新

    云原生应用程序始终是最新的,云原生应用始终可用。

    本地部署应用程序需要更新,并且通常由供应商按订阅提供,并且在安装更新时需要停机。

    弹性

    云原生应用程序通过在峰值期间增加的资源来利用云的弹性。如果你的基于云的电子商务应用程序使用频繁,你可以将其设置为使用额外的计算资源,直到峰值消退然后关闭这些资源。云原生应用可以根据需要调整增加资源和规模。

    本地部署应用程序无法动态扩展。

    多租户

    云原生应用程序在虚拟化环境中工作,并与其他应用程序共享资源没有问题。

    许多本地部署应用程序要么在虚拟环境中不能正常工作,要么根本不工作,必须要非虚拟化环境。

    连接资源

    本地部署应用程序与网络资源的连接相当严格,例如网络,安全性,权限和存储。其中许多资源需要进行硬编码,如果移动或更改了任何内容,它们就会中断。

    “网络和存储在云端完全不同。当你听到“重新平台化”一词时,通常是为了适应网络,存储甚至数据库技术的变化,以允许应用程序在云中运行,“Deloitte的Kavis说。

    停止时间

    云中存在比本地部署更大的冗余,因此如果云供应商遭受中断,则另一个冗余区域可以消除中断。

    本地部署应用程序可能已准备好故障转移,但如果服务器出现故障,应用程序可能会崩溃。

    自动化

    云计算的大部分都是自动化的,其中包括应用程序管理。 “云原生交付的好处,特别是速度和敏捷性,依赖于可靠,经过验证和经过审核的已知良好流程的基础,这些流程根据自动化和编排工具的需要而不是通过人工干预重复执行,”Splunk的Mann说。工程师应该考虑自动化是不止一次做的任何事情,以实现可重复性,自助服务,敏捷性,可扩展性以及审计和控制。

    本地部署应用程序必须手动管理。

    模块化设计

    本地部署应用程序往往在设计上是单一的。他们肯定会将一些工作卸载到库中,但最终它是一个包含大量子程序的大应用程序。云原生应用程序更加模块化,许多功能分解为微服务。这允许在不需要时关闭它们,并将更新推广到那个模块,而不是整个应用程序。

    无状态

    云的松耦合特性意味着应用程序与基础架构无关,这意味着它们是无状态的。云原生应用程序将其状态存储在数据库或其他外部实体中,因此实例可以来去,应用程序仍然可以跟踪应用程序在工作单元中的位置。 “这是松耦合的本质。不依赖于基础架构允许和应用程序以高度分布的方式运行,并且仍然保持其状态独立于底层基础架构的弹性性质,“Kavis说。

    大多数本地部署应用程序都是有状态的,这意味着它们会在运行代码的基础架构上存储应用程序的状态。因此,在添加服务器资源时可能会破坏应用程序。

    云原生的挑战

    Mann说,客户犯下的一个重大错误就是试图将旧的本地部署应用程序直接并迁移到云端。 “试图利用现有的应用程序,特别是单一的遗留应用程序 ,并将它们转移到云基础架构上将无法利用必要的云原生功能。”

    相反,你应该以新的方式开展新事物,或者将新的云原生应用程序放入新的云基础架构中,或者通过拆分现有的单块应用来从头开始使用云原生原则重构它们。(译者注:这个观点可能有点绝对,迁移到云,至少可以先开始利用云的一些优势,至少能提高资源利用率。对许多组织来说,重构应用程序也基本是不可能的。)

    你还需要放弃旧的开发方法。瀑布模型当然不会再用,甚至敏捷开发可能还不够。因此,你必须采用新的云原生方法,如最小可行产品(MVP)开发,多变量测试,快速迭代,以及在DevOps模型中跨组织边界密切合作。

    云原生有很多方面,包括基础架构服务,自动化/编排,虚拟化和容器化,微服务架构和可观察性。所有这些都意味着一种新的做事方式,这意味着在学习新方法时打破旧习惯。请以以有节奏的速度做到这一点。

    原文链接

    https://www.infoworld.com/article/3281046/cloud-computing/what-is-cloud-native-the-modern-way-to-develop-software.html

    译者 肖力

    新钛云服技术副总裁,十九年运维经验,曾就职盛大、金山。丰富的私有云和运维管理经验,是国内虚拟化实践先驱者和业内知名的虚拟化专家,主导参与G云、西山居以及多个私有云/专享云的建设运维。开源云联盟WG5工作组组长。云技术社区创始人,《深度实践KVM》等书作者。

    展开全文
  • 本文是翻译的国外的文章,原文连接:https://stackify.com/cloud-native/在相当长的一段时间里,云原生一直是软件开发中最热门的话题之一。一些开发人员认为它是炒作,一段时间...但是准确地说云原生是什么?云原生...

    1bbd4c7e1782d3448236c547c035311d.png
    本文是翻译的国外的文章,原文连接:https://stackify.com/cloud-native/

    在相当长的一段时间里,云原生一直是软件开发中最热门的话题之一。一些开发人员认为它是炒作,一段时间后就会失去牵引力并消失。但是,其他人认为它是软件开发的未来。
    无论未来会带来什么,云原生是目前软件行业最大的趋势之一。它已经改变了我们开发、部署和运维软件产品的思维方式。
    但是准确地说云原生是什么?

    云原生不仅仅是用云平台来运行你现有的应用程序。它影响到你的应用的设计、实现、部署和运维。
    提供了流行的Spring框架和云平台的软件公司Pivotal将云原生描述为:

    "云原生是一种构建和运维应用程序的方法,可以充分发挥云计算模式的优势。"
    来源:云原生应用是什么?——Pivotal

    云原生计算基金会是一个旨在创建和推动采用云原生编程模式的组织,它对云原生的定义是:
    云原生计算使用的开源软件栈是:

    • 容器化。每个部分(应用程序、流程等)都被封装在自己的容器中。这有助于实现可复制性、透明度和资源隔离。
    • 动态编排。容器被主动调度和管理,以优化资源利用率。
    • 面向微服务。应用程序被划分为微服务。这显著提高了应用程序的整体敏捷性和可维护性。"
      来源:Frequently Asked Questions (FAQ) – Cloud Native Foundation

    两个定义都很相似,但看题目的角度略有不同。你可以把这些定义总结为:
    "将软件应用程序构建为微服务,并在容器化和动态编排的平台上运行,以利用云计算模式的优势的一种方法。"
    说实话:"利用云计算模式的优势 "听起来很好,但如果你是云原生计算的新手,你可能还在想这是怎么回事,它如何影响你实现软件的方式。至少当我第一次读到云原生计算的时候,我是这么想的。
    我们来看看不同的部分。

    容器

    容器的基本思想是将你的软件与执行它所需的一切打包成一个可执行包,例如,一个Java虚拟机、一个应用服务器和应用本身。然后,你在虚拟化环境中运行这个容器,并将包含的应用程序与其环境隔离。
    这种方法的主要好处是,应用程序变得独立于环境,而且容器具有高度的可移植性。你可以轻松地在你的开发、测试或生产系统上运行同一个容器。而且如果你的应用设计支持水平扩展,你可以启动或停止一个容器的多个实例,根据当前用户的需求增加或删除应用的实例。
    Docker项目是目前最流行的容器实现。它如此流行,以至于Docker和容器这两个词经常被互换使用。但请记住,Docker项目只是容器概念的一种实现,未来可能会被取代。
    如果你想尝试一下Docker,你应该从免费的社区版开始。你可以在本地桌面上安装它,这样你就可以开始构建自己的容器定义,并将你的第一个应用程序部署到容器中。而当你完成后,你可以将容器交给同事,由他来做质量保证,之后再部署到生产中。
    你不再需要担心你的应用程序是否能在测试或生产环境中工作,或者你是否需要更新一些依赖关系。容器中包含了你的应用所需的一切,你只需要启动它。
    官方文档向你展示了如何在系统上运行Docker,并提供了一个很好的入门指南。

    编排

    将你的应用程序与所有依赖项部署到容器中只是第一步。它解决了你之前的部署问题,但如果你想从云平台中充分受益,你就会遇到新的挑战。
    根据你的系统当前的负载来启动额外的或关闭运行中的应用节点并不是那么容易。你需要:

    • 监控你的系统。
    • 触发容器的启动或关闭。
    • 确保所有必要的配置参数都已到位。
    • 平衡应用实例之间的负载
    • 在你的容器之间共享认证密钥。

    手动完成所有这些工作需要花费很多精力,而且对系统负载的意外变化反应太慢。你需要有合适的工具来自动完成这一切。这就是不同的编排解决方案的目的。几个流行的是Docker Swarm、Kubernetes、Apache Mesos和Amazon的ECS。

    微服务

    我们已经完成了所有的基础架构和管理,现在是时候谈谈云原生给系统架构带来的变化了。云原生应用程序被构建为一个微服务系统。我相信你已经听说过这种架构方式,我也在博客上写过一系列关于它的文章。
    这种架构风格的总体思路是实现一个由多个相对较小的应用组成的系统。这些被称为微服务。它们一起工作,提供你系统的整体功能。每个微服务正好实现一个功能,有一个明确的边界和API,并由一个相对较小的团队开发和运营。
    这种方法提供了几个好处。

    微服务的好处

    首先,实现和理解一个提供一种功能的小型应用程序要容易得多,而不是建立一个什么都能做的大型应用程序。这加快了开发速度,并使服务更容易适应变化的或新的需求。你需要少担心一个看似微小的变化所带来的意外副作用,你可以专注于手头的开发任务。
    它还可以让你更有效地进行扩展。当我谈到容器时,我说你可以简单地启动另一个容器来处理用户请求的增加。这就是所谓的水平扩展。你基本上可以对每一个无状态的应用程序做到这一点,与它的大小无关。只要应用程序不保留任何状态,你就可以将用户的下一个请求发送到任何可用的应用程序实例。
    即便如此,你也可以用单体应用或微服务系统来做,扩展微服务系统往往要便宜很多。你只需要扩展获得大量负载的微服务。只要系统的其他部分能够处理当前的负载,你就不需要添加其他服务的任何额外实例。
    单体应用是做不到这一点的。如果你需要增加一个功能的容量,你需要启动一个完整的单体的新实例。这看起来似乎没什么大不了的,但在云环境中,你要为硬件资源的使用付费。而且即使你只使用了单体的一小部分,你仍然需要为其他未使用的部分获取额外的资源。
    正如你所看到的,微服务让你更有效地使用云资源,减少云提供商的月度账单。

    微服务带来的挑战

    一如既往,你不会免费获得架构风格的好处。微服务消除了服务本身的一些复杂性,并提供了更好的可扩展性,但你现在正在构建一个分布式系统。这在系统层面上增加了很多复杂性。
    为了尽可能降低这种额外的复杂性,你应该尽量避免你的微服务之间的任何依赖关系。如果无法做到这一点,你需要确保依赖的服务能够找到对方,并有效地实现它们的通信。你还需要处理慢速或不可用的服务,以免它们影响到整个系统。我在微服务之间的通信中对微服务之间的通信做了更详细的介绍。
    系统的分布式特性也让你在生产中监控和管理系统的难度大大增加。你现在需要监控一个由微服务组成的系统,而不是几个单体,对于每个服务,可能有几个实例并行运行。你需要像过去那样监控更多的应用实例。你可以使用Retrace等工具来收集所有系统的信息。

    构建微服务

    你不需要使用特定的框架或技术栈来构建微服务。但它使微服务变得更加简单。它们为你提供了很多现成的功能,这些功能都经过了很好的测试,并且之前已经在生产环境中使用过。
    在Java世界里,有很多不同的选择。两个流行的是Spring Boot和Eclipse Microprofile。
    正如你从它的名字中可能猜到的那样,Spring Boot将著名的Spring框架与其他一些框架和库集成在一起,以处理微服务架构的额外挑战。
    Eclipse Microprofile遵循同样的理念,但使用的是Java EE。多个Java EE应用服务器厂商共同合作,提供了一套规范和多个可互换的实现。

    总结

    云原生计算的思想和概念引入了一种实现复杂、可扩展系统的新方法。即使你没有在云平台上托管你的应用,这些新理念也会影响你未来开发应用的方式。
    容器使应用程序的发布变得更加容易。你可以在开发过程中使用它们在团队成员之间共享应用程序,或者在不同的环境中运行它们。而在执行完所有测试后,你可以轻松地将同一个容器部署到生产环境中。
    微服务提供了一种新的方式来架构你的系统。它们带来了新的挑战,但它们也将注意力转移到每个组件的设计上。这改善了封装,并允许你实现可维护的组件,你可以快速适应新的需求。
    而如果你决定在生产中使用容器来运行微服务系统,你需要一个编排解决方案来帮助你管理系统。

    展开全文
  • 云原生是什么

    2020-12-13 12:44:20
    云原生从字面意思上来看可以分成云和原生两个部分。 云和本地相对的,传统的应用必须跑在本地服务器上,现在流行的应用都跑在云端,云包含了IaaS,、PaaS和SaaS。 原生就是土生土长的意思,我们在开始设计应用的...

    云原生概念

    云原生从字面意思上来看可以分成原生两个部分。

    是和本地相对的,传统的应用必须跑在本地服务器上,现在流行的应用都跑在云端,云包含了IaaS,、PaaS和SaaS。

    原生就是土生土长的意思,我们在开始设计应用的时候就考虑到应用将来是运行云环境里面的,要充分利用云资源的优点,比如️云服务的弹性分布式优势。

    云原生不是一个具体的产品,也绝非是把原先在传统IT架构中的东西搬上云,而是基于云的一种全新IT理念,必须是与之相关的包括应用的架构、应用的开发方式、应用的部署和维护方式都要做出改变,这样才能真正发挥出云的价值,包括弹性、动态调度、自动伸缩等,享受新IT技术带来的红利。

    云原生的四要素

    CNCF认为云原生系统应该具备三大特征:

    容器化封装:以容器为基础,提高整体开发水平,形成代码和组件重用,简化云原生应用程序的维护。在容器中运行应用程序和进程,并作为应用程序部署的独立单元,实现高水平资源隔离。

    自动化管理:统一调度和管理中心,从根本上提高系统和资源利用率,同时降低运维成本。

    面向微服务:通过松耦合方式,提升应用程序的整体敏捷性和可维护性。

    要充分理解云原生,必须对其每一个板块进行了解。而当前,业界对云原生的看法是非常一致的,那就是四要素:容器、微服务、DevOps、持续交付

    一个一个展开。

    容器,云原生的基石

    容器不是新概念,1979年就出现了。

    很多人会将Docker与容器划等号,其实不然,Docker只是容器理念最普及的一种应用技术。容器的英文单词是Container,有集装箱的含义,而借用集装箱技术会很好理解容器的优势。集装箱的特点,在于标准化,这样可以大量堆叠,装卸也很方便。容器也是这样。

    与容器做比较的是虚拟化技术。早期,大家认为硬件抽象层基于Hypervisor的虚拟化方式能够最大程度实现系统管理的灵活性,因为各种不同操作系统的虚拟机都能通过Hypervisor生成、运行、销毁。但是,随着时间推移发现,Hypervisor没有想象的那么好,因为它的原理是每个虚拟机都要安装一个完整的操作系统和大量的应用,而实际生产环境大家更关心的是自己部署的应用。显然,如果每次都部署一个完整的操作系统和大量关联的开发环境,开发效率、管理效率都会很低下。

    于是有了容器这种方式,简单说,它只把应用代码运行所需相关的环境打包、封装进了一个系统,就像集装箱一样,直接运走就行,不用关心船是什么样,到哪都可以跑起来。

    容器技术有四大特点:

    极其轻量:只打包了必要的Bin/Lib;

    秒级部署:根据镜像的不同,容器的部署大概在毫秒与秒之间(比虚拟机强很多);

    易于移植:一次构建,随处部署;

    弹性伸缩:Kubernetes、Swam、Mesos这类开源、方便、好使的容器管理平台有着非常强大的弹性管理能力。

    换句话说,使用容器,用户可以将微服务及其所需的各种配置、依赖关系和环境变量很方便的移动到全新的服务器节点上,而无需重新配置环境。

    在容器领域,Docker是最受欢迎的容器格式标准。同时,与Docker配合使用的Kubernetes则成为了容器编排和管理工具中的事实标准。

    微服务,改变产品开发方式

    微服务是什么?重点在“微”。它的核心是将单个应用程序作为一组小型服务来开发。原来一个产品的开发可能是拆成几个大的模块,然后由几个团队来做,然后再合,微服务的理念是把一个产品拆的更细,可能一个人、几个人负责一个服务的开发,每个服务之间都是独立的。

    每个服务都在自己的进程中运行,并使用轻量级机制(通常是基于HTTP的API)进行通信。这些服务是围绕业务功能构建,可以通过全自动部署机制独立部署,不需要集中管理,可以用不同的编程语言编写,并使用不同的数据存储技术。

    所以,微服务核心就是服务粒度要小,每个服务是针对一个单一职责的业务能力的封装,专注做好一件事情。但是又不能太小,否则易发生“服务爆炸”。通常在工程实践中,如果一个功能被两个或两个以上的服务调用,就可以被封装为服务。

    所以,微服务的优点很明显,小而美、松耦合、灵活、易集成,但是挑战也很明显,最大的问题在于服务如何切分。其实,早在1968年康威就提出了——康威定律,系统的服务划分应该是根据组织架构的功能来划分。这一点用在微服务领域也非常合适。

    这样按照组织架构划分的优势在于:

    1.内聚更强,所有遵循同一种业务准则的人内聚在一起,就容易解决问题。

    2.服务解耦,变更容易,更加敏捷。

    DevOps,内部协作更紧密

    DevOps,如果从字面上来理解,是Dev(开发)+Ops(运维)。

    实际上,可以把DevOps看作开发(软件工程)、技术运营和质量保障(QA)三者的交集。DevOps是一组过程、方法与系统的统称,用于促进开发(应用程序/软件工程)、技术运营和质量保障(QA)部门之间的沟通、协作与整合。

    为什么要整合?因为能帮助企业提升效率。

    众所周知,传统的软件组织将开发、IT运营和质量保障设为各自分离的部门。开发与运营之间存在着信息“鸿沟”──例如运营人员要求更好的可靠性和安全性,开发人员则希望基础设施响应更快,而业务用户的需求则是更快地将更多的特性发布给最终用户使用。

    每个部门需求都不同,怎么调和?DevOps的价值就体现在这。DevOps的引入能对产品交付、测试、功能开发和维护起到意义深远的影响。其最大的价值在于,透过自动化“软件交付”和“架构变更”的流程,能使得构建、测试、发布软件更加地快捷、频繁和可靠,这是每一个企业都期望的。

    因此,更深层次的理解,DevOps是一种重视“软件开发人员(Dev)”和“IT运维技术人员(Ops)”之间沟通合作的文化、运动。

    持续交付,云原生终极目标

    如何理解持续交付?听着比容器、微服务、DevOps更抽象。简单来说,它是一种状态,一种能力,就像生产线能持续交付产品一样。

    具体而言,持续交付是一种软件工程手法,它能让软件产品的产出过程在一个短周期内完成,保证软件可以稳定、持续的保持在随时可以发布的状况。它的目标在于让软件的构建、测试与发布变得更快以及更频繁。这种方式可以减少软件开发的成本与时间,减少风险。

    为什么要有持续交付?这是和曾经的软件开发方式相比的,过去的软件开发周期以月、季度、年来计算,今天呢?一个应用晚上线一个小时造成的损失都可能是巨大的,所以要小步快跑、快速迭代,这就是持续交付的价值所在,不断的交付,不断的修正。

    很显然,如果把云原生的四要素串联起来,持续交付才是最终目标。但要实现持续交付,容器、微服务、DevOps缺一不可。

    总结一下,云时代必须以全新的理念来看待软件架构和基础设施,只有从这个角度理解云原生才能得到正确的答案。未来必然是属于云原生的,所以,企业变革的绝不仅仅是工具,而是从思想到方法,再到工具的一整套理念。只有这样,才能更好迎接云时代的到来。

    展开全文
  • 大家言必称云原生,却鲜少有人告诉你到底什么是云原生,若是找资料来看,读完大多会感觉云绕雾罩,一知半解,总之虚得很;甚至会让你一度怀疑自己的智商,不过我对于读不懂的文章,一律归因于写文章的人太蠢,当然这...

    伴随云计算的滚滚浪潮,云原生(CloudNative)的概念应运而生,云原生很火,火得一塌糊涂,都0202年了,如果你还不懂云原生,那真的out了。

    大家言必称云原生,却鲜少有人告诉你到底什么是云原生,若是找资料来看,读完大多会感觉云绕雾罩,一知半解,总之虚得很;甚至会让你一度怀疑自己的智商,不过我对于读不懂的文章,一律归因于写文章的人太蠢,当然这不一定是事实,但这样的思考方式能让我避免陷入自我怀疑的负面情绪。

    bdec6ead591e52680e35b918ab16ce0e.png

    云原生之所以解释不清楚,是因为云原生没有确切的定义,云原生一直在发展变化之中,解释权不归某个人或组织所有。

    何谓云原生?

    技术的变革,一定是思想先行,云原生是一种构建和运行应用程序的方法,是一套技术体系和方法论。云原生(CloudNative)是一个组合词,Cloud+Native。Cloud表示应用程序位于云中,而不是传统的数据中心;Native表示应用程序从设计之初即考虑到云的环境,原生为云而设计,在云上以最佳姿势运行,充分利用和发挥云平台的弹性+分布式优势。

    Pivotal公司的Matt Stine于2013年首次提出云原生(CloudNative)的概念;2015年,云原生刚推广时,Matt Stine在《迁移到云原生架构》一书中定义了符合云原生架构的几个特征:12因素、微服务、自敏捷架构、基于API协作、扛脆弱性;到了2017年,Matt Stine在接受InfoQ采访时又改了口风,将云原生架构归纳为模块化、可观察、可部署、可测试、可替换、可处理6特质;而Pivotal最新官网对云原生概括为4个要点:DevOps+持续交付+微服务+容器

    e8053fe024359141011a736a29a294f9.png

    2015年云原生计算基金会(CNCF)成立,CNCF掺和进来后,最初把云原生定义为包括:容器化封装+自动化管理+面向微服务;到了2018年,CNCF又更新了云原生的定义,把服务网格(Service Mesh)和声明式API给加了进来。

    可见,不同的人和组织对云原生有不同的定义,相同的人和组织在不同时间点对云原生也有不同的定义,真是乱的一匹,搞得鄙人非常晕菜,我的应对很简单,选一个我最容易记住和理解的定义:DevOps+持续交付+微服务+容器。

    总而言之,符合云原生架构的应用程序应该是:采用开源堆栈(K8S+Docker)进行容器化,基于微服务架构提高灵活性和可维护性,借助敏捷方法、DevOps支持持续迭代和运维自动化,利用云平台设施实现弹性伸缩、动态调度、优化资源利用率。

    云原生构建应用简便快捷,部署应用轻松自如、运行应用按需伸缩。优点不一而足,缺点微乎其微;秒杀传统Web框架,吊打祖传IT模式,实在是保命**、评优晋级不可多得的终极绝密武器。

    云元素的四要素

    微服务:几乎每个云原生的定义都包含微服务,跟微服务相对的是单体应用,微服务有理论基础,那就是康威定律,指导服务怎么切分,很玄乎,凡是能称为理论定律的都简单明白不了,不然就忒没b格,大概意思是组织架构决定产品形态,不知道跟马克思的生产关系影响生产力有无关系。

    微服务架构的好处就是按function切了之后,服务解耦,内聚更强,变更更易;另一个划分服务的技巧据说是依据DDD来搞。

    容器化:Docker是应用最为广泛的容器引擎,在思科谷歌等公司的基础设施中大量使用,是基于LXC技术搞的,容器化为微服务提供实施保障,起到应用隔离作用,K8S是容器编排系统,用于容器管理,容器间的负载均衡,谷歌搞的,Docker和K8S都采用Go编写,都是好东西。

    DevOps:这是个组合词,Dev+Ops,就是开发和运维合体,不像开发和产品,经常刀刃相见,实际上DevOps应该还包括测试,DevOps是一个敏捷思维,是一个沟通文化,也是组织形式,为云原生提供持续交付能力。

    持续交付:持续交付是不误时开发,不停机更新,小步快跑,反传统瀑布式开发模型,这要求开发版本和稳定版本并存,其实需要很多流程和工具支撑。

    53ecf84d588f148355f4e29416ed5977.png

    如何云原生?

    首先,云原生借了云计算的东风,没有云计算,自然没有云原生,云计算是云原生的基础。

    随着虚拟化技术的成熟和分布式框架的普及,在容器技术、可持续交付、编排系统等开源社区的推动下,以及微服务等开发理念的带动下,应用上云已经是不可逆转的趋势

    云计算的3层划分,即基础设施即服务(IaaS)、平台即服务(PaaS)、软件即服务(SaaS)为云原生提供了技术基础和方向指引,真正的云化不仅仅是基础设施和平台的变化,应用也需要做出改变,摈弃传统的土方法,在架构设计、开发方式、部署维护等各个阶段和方面都基于云的特点,重新设计,从而建设全新的云化的应用,即云原生应用。

    1.本地部署的传统应用往往采用c/c++、企业级java编写,而云原生应用则需要用以网络为中心的go、node.js等新兴语言编写。

    2.本地部署的传统应用可能需要停机更新,而云原生应用应该始终是最新的,需要支持频繁变更,持续交付,蓝绿部署。

    3.本地部署的传统应用无法动态扩展,往往需要冗余资源以抵抗流量高峰,而云原生应用利用云的弹性自动伸缩,通过共享降本增效。

    4.本地部署的传统应用对网络资源,比如ip、端口等有依赖,甚至是硬编码,而云原生应用对网络和存储都没有这种限制。

    5.本地部署的传统应用通常人肉部署手工运维,而云原生应用这一切都是自动化的。

    6.本地部署的传统应用通常依赖系统环境,而云原生应用不会硬连接到任何系统环境,而是依赖抽象的基础架构,从而获得良好移植性。

    7.本地部署的传统应用有些是单体(巨石)应用,或者强依赖,而基于微服务架构的云原生应用,纵向划分服务,模块化更合理。

    可见,要转向云原生应用需要以新的云原生方法开展工作,云原生包括很多方面:基础架构服务、虚拟化、容器化、容器编排、微服务。幸运的是,开源社区在云原生应用方面做出了大量卓有成效的工作,很多开源的框架和设施可以通过拿来主义直接用,2013年Docker推出并很快成为容器事实标准,随后围绕容器编排的混战中,2017年诞生的k8s很快脱颖而出,而这些技术极大的降低了开发云原生应用的技术门槛。

    0b4c8471d6236eb2ea77ba6469098a17.png

    虽说云原生的推介文档有引导之嫌,但面对它列举的优点,作为杠精的我亦是无可辩驳。这么说的话,云原生也忒好了吧,应用是不是要立刻马上切换到云原生架构?我的观点是:理想很丰满,现实经常很骨感,需从应用的实际需要出发,目前的问题是否真的影响到业务发展,而推倒重来的代价能否承受得来。

    技术的趋势和影响

    软件设计有两个关键目标:高内聚、低耦合,围绕这2个核心目标,又提出了单一职责、开闭原则、里氏替换、依赖导致、接口隔离、最少知识等设计原则。

    软件工程师一直都在为这两个目标而努力奋斗,以求把软件编写得更加清晰、更加健壮、更加易于扩展和维护。

    但后来,人们发现有更多的诉求,希望开发软件变得更简单、更快捷,程序员希望更少编写代码,非专业人员也希望能开发程序,于是,更多的更傻瓜的编程语言被发明出来,更多的编程技术和编程思想被发明出来,比如库、组件、云基础设施。

    于是很多技术变成了屠龙之技,比如汇编,时代变了,建国后动物不能成精了,没有龙可以宰了,然后很多软件工程师摇身一变成了调参工程师、Call API砖家、用库包能手、拼组件达人,这是效率分工的结果,也是技术发展的使然。

    纵观近二十年的科技互联网发展历程,大的趋势是技术下沉,特别是近些年,随着云计算的发展和普及,基础设施越来越厚实,业务开发变得越来越容易,也越来越没有技术含量,而之前困扰小团队的性能、负载、安全性、扩展性问题都不复存在,这不禁让互联网行业的油腻大叔们噤若寒蝉,仿佛分分钟就要被卷入历史洪流而万劫不复。

    虽然不可否认技术的重要性在降低,但也还不至于那么悲观。遥想PC时代,当VB、Delphi、MFC出现的时候,也有类似论调,所见即所得,点点鼠标,就可以开发PC桌面程序,是不是很高端?那时候码农的担心相比现在恐怕是只多不少吧,但后来随着互联网兴起,出现了后端开发这个工种,码农很快找到了新的战场,网络、分布式、数据库、海量服务、容灾防错,于是又玩出一堆新花样。

    如果说PC时代的基础设施是控件库,互联网时代的基础实施是云,那AI时代基础设施是什么?又会有什么高端玩法?

    点击关注,第一时间了解华为云新鲜技术~

    展开全文
  • 云原生是过去一年里云计算最火的用词之一。几乎每一个云计算的产品厂商都会把自己的产品与云原生联系在一起。但是到底这个词是什么意思,它的具体含义是什么,其实却是非常含糊的。云原生这个词最早在2014年左右起源...
  • 大家言必称云原生,却鲜少有人告诉你到底什么是云原生,若是找资料来看,读完大多会感觉云绕雾罩,一知半解,总之虚得很;甚至会让你一度怀疑自己的智商,不过我对于读不懂的文章,一律归因于写文章的人太蠢,当然这...
  • ​在云计算上下文中,什么是云原生应用?并且“基于云(cloud-based)”与“云原生(cloud-based)”指的完全相同的架构吗?云原生开发意味着使用一套特定的方法和工具,或者简单地在特定环境上安装、运行和管理你...
  • 概述最近看了很多关于云原生的文章,大体意思是机器学习服务这个行业将迎来一次巨大的变革。从13年我刚入行以来,机器学习在15年左右经历了模型深度的变革,从浅层学习逐步发展到了深度学习。到了20年这个节点,机器...
  • 云原生从字面意思上来看可以分成云和原生两个部分。云和本地相对的,传统的应用必须跑在本地服务器上,现在流行的应用都跑在云端,云包含了IaaS,、PaaS和SaaS。原生就是土生土长的意思,我们在开始设计应用的时候...
  • 云原生这词在这几年突然火了,在很多人还不了解她是什么的时候频频被她刷屏。所以我经常说技术人是一个容易焦虑的群体,每天被一堆新的概念拉着走,扯着学。新语言多,新概念多,新技术多,没什么安全感。对于新概念...
  • 什么是云原生

    2020-10-10 19:24:08
    云原生从字面意思上来看可以分成云和原生两个部分。 云和本地相对的,传统的应用必须跑在本地服务器上,现在流行的应用都跑在云端,云包含了IaaS,、PaaS和SaaS。 原生就是土生土长的意思,我们在开始设计应用的...
  • 什么是云原生?

    2021-02-07 14:09:45
    云原生从字面意思上来看可以分成云和原生两个部分。 云和本地相对的,传统的应用必须跑在本地服务器上,现在流行的应用都跑在云端,云包含了IaaS,、PaaS和SaaS。 原生就是土生土长的意思,我们在开始设计应用的...
  • 什么是原生APP首先说明下什么是原生APP?原生APP又称Native App,开发针对苹果IOS封闭、Android开源等不同的手机操作系统用不同语言进行开发,如C语言java等,安卓手机需要针对上千款品牌手机型号的参数大小来调控...
  • 测试环境管理之困与阿里巴巴的解决之道在云原生时代下,软件的迭代速度越来越快,对测试的要求也越来越高,很多开发者开始使用Kubernetes来管理测试环境。在这个过程中,开发者会遇到很多困难,其中最主要的两个问题...
  • 云原生是过去一年里云计算最火的用词之一。几乎每一个云计算的产品厂商都会把自己的产品与云原生联系在一起。但是到底这个词是什么意思,它的具体含义是什么,其实却是非常含糊的。云原生这个词最早在2014年左右起源...
  • Kubernetes 管理基础设施环境,并通过 Kubernetes 完成日常的开发,测试以及生产发布活动,为了能够有效的帮助开发者提升在 Kubernetes 场景下的本地开发测试效率,阿里巴巴研发效能效团队面向原生 Kubernetes ...
  • 但是到底这个词是什么意思,它的具体含义是什么,其实却是非常含糊的。云原生指的是一个灵活的工程团队,遵循敏捷的研发原则,使用高度自动化的研发工具,开发专门基于并部署在云基础设施上的应用,以满足快速变化的...
  • 云原生GIS架构

    2021-02-19 14:15:53
    为什么说你的GIS软件架构不是云原生的?你将你的GIS服务器搬到了云端,那么您的GIS架构就是云原生的吗? 答:如果您只是将您的GIS服务器移动到AWS或Azure,那么您的SDI并不是云原生的...而这是什么意思呢? 扩展 ...
  • 一文带你了解云原生

    2021-02-23 22:45:14
    而今天要给大家带来的便是云原生技术~那么什么是云原生呢?我们将名词拆成两部分—云、原生,这些相对于本地应用来的,云相对于本地而言的,传统的应用都运行在本地机房的服务器上,而云的应用则运行在云端...
  • 云原生是过去几年里云计算最火的用词之一。几乎每一个云计算的产品厂商都会把自己的产品与云原生联系在一起。但是到底这个词是什么意思,它的具体含义是什么,其实却是非常含糊的。 云原生这个词最早在2014年左右...
  • 一、什么是云原生? CNCF给出了云原生应用的三大特征: 面向微服务:明确服务间的依赖,互相解耦。 容器化封装:以容器为基础,提高整体开发水平,形成代码和组件重用,简化云原生应用程序的维护。在容器中运行应用...
  • 最近看了很多关于云原生的文章,大体意思是机器学习服务这个行业将迎来一次巨大的变革。从13年我刚入行以来,机器学习在15年左右经历了模型深度的变革,从浅层学习逐步发展到了深度学习。到了20年这个节点,机器学习...
  • 云原生从字面意思上来看可以分成云和原生两个部分。 云和本地相对的,传统的应用必须跑在本地服务器上,现在流行的应用都跑在云端,包含IaaS、PaaS和SaaS。 原生就是土生土长的意思,我们在开始设计应用的时候就...
  • 随着容器技术的快速发展和广泛应用,毫无疑问云原生技术未来发展的必然趋势。作为国内最早布局容器技术的阿里云,无论在技术还是产品上,都取得了极大的成果。阿里云资深技术专家易立通过阿里云容器服务,分享容器...
  • 按照权威组织CNCF给出的官方定义,云原生是通过一系列的软件、规范和标准,帮助企业和组织在现代的动态环境,如公共云、私有云或混合云中构建并运行敏捷的、可扩展的应用程序。其中,容器、微服务、微服务治理、声明...
  • 我是微众银行大数据平台的工程师周可,接下来给大家分享的是基于 WeDataSphere 和 KubeSphere 这两个开源社区的产品去构建一个云原生机器学习平台 Prophecis。 Prophecis 是什么? 首先我介绍一下什么是 Prophecis ...
  • {"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],"search_count":[{"count_phone":4,...社区覆盖了云计算、大数据、人工智能、IoT、云原生、数据库、微服务、安全、开发与运维9大技术领域。","link1":...
  • {"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],"search_count":[{"count_phone":4,...社区覆盖了云计算、大数据、人工智能、IoT、云原生、数据库、微服务、安全、开发与运维9大技术领域。","link1":...

空空如也

空空如也

1 2 3 4 5
收藏数 81
精华内容 32
关键字:

云原生是什么意思