热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

云原生可移植性的神话

云原生可移植性的神话原文链接:https:thenewstack.iomyth-cloud-native-portability作者:BilginIbryam译者:殷龙飞随着大量新

云原生可移植性的神话

原文链接:https://thenewstack.io/myth-cloud-native-portability/
作者:Bilgin Ibryam
译者:殷龙飞

云原生可移植性的神话

随着大量新平台和支持工具的出现,云原生势头正在增长。 这些新平台为开发人员提供了越来越多的功能 ,可以以自动化的方式快速开发,部署和管理大量微服务 。

但这种云原生的势头的增长同样会伴随着成本的增加,最好做好为此付出代价的准备。

最近我写了一篇由Kubernetes等云原生平台提供的“ 开发人员新的分布式原语”,以及这些原语如何与开发应用程序的编程原语相结合。 例如,下面看看开发人员必须了解和使用多少 Kubernetes 概念才能有效地运行单个容器化应用程序:

云原生可移植性的神话

请记住,此图表不包含DevOps团队的Ops部门必须管理的支持Kubernetes的对象。 在操作之前也不需要额外的应用程序支持工具(用于日志管理,监视,跟踪,服务网格等)。

更有可能的是,开发人员必须编写与容器中的应用程序代码相同数量的YAML代码。 更重要的是,应用程序本身将依赖于比以往更多的平台。 云原生应用程序期望平台执行运行状况检查,部署,放置,服务发现,运行定期任务( cron 作业)或调度原子工作单元(作业),自动扩展,配置管理等。

因此,您的应用程序已放弃并将所有这些职责委托给平台,并期望以可靠的方式处理它们。 事实上,现在您的应用程序和相关团队在很多不同的级别上依赖于平台:代码,设计,体系结构,开发实践,部署和交付管道,支持过程,恢复方案,你能想到的一切。

打赌生态系统,而不是平台

上图显示了代码在Kubernetes微服务环境中的小巧程度。 但是,当我们谈论基于生产就绪的微服务系统时,这种情况远未完成。 任何规模庞大的系统都需要集中监控,度量收集,跟踪,服务网格,集成构建和部署工具,管道等工具。

云原生可移植性的神话

微服务需求层次

该平台只是冰山一角,为了在云原生世界取得成功,您需要成为完全集成的工具和公司生态系统的一部分。 因此,赌注绝不是单一平台,项目或很酷的库或一家公司。 它涉及整个协同工作的整个项目生态系统,以及在未来十年左右合作并致力于事业的公司(供应商和客户)的整个生态系统。 我认为这两个方面同样重要:

  • 技术 :考虑到向云原生过渡是一个多年的旅程,只有长期成功才能带来好处,重要的是打赌有可能在未来5到10年内发展的技术,而不是从过去5到10年的历史。
  • 文化 :cloud-native是通过微服务,容器,持续交付和DevOps的组合实现的。 而成为云原生需要的不仅仅是为您的应用程序添加少量依赖项/库(也不是在某些会议中如何推广它)。 您可能不得不改变团队结构和固定程序,工作习惯和编码实践,并习惯于消耗仍然非常活跃的技术空间。 如果您的公司文化在某种程度上更接近于开发或仅使用云原生平台和相关工具的公司的文化,那就更容易了。 诸如提出拉取请求与提交错误报告,检查上游源代码以及为即将推出的新功能打开讨论之类的小事情 等到新闻的下一次会议公告可以对团队是否喜欢平台工作产生影响。 文化一致性和人文因素与技术优势同等重要。

以下内容并不代表完整的格局,但我将尝试将我想到的主要云原生生态系统分组:

Mesosphere和Apache Mesos

作为Apache Software Foundations的一部分, Apache Mesos 具有其优势(成熟的社区)和缺点(缓慢进度)。 它诞生于2009年左右,是一个成熟的框架,它最近增加了对容器(我的意思是docker格式)和类似概念(如Pods / Task组)的支持。

Cloud Foundry和Spring Cloud

Cloud Foundry 再次诞生于2009年左右, 是云原生世界的先驱之一。 当 Spring Cloud与Cloud Foundry一起使用时, 该平台与应用程序本身融为一体。 服务发现,负载平衡,配置管理,重试,超时等一些功能在服务中执行(在本例中为JVM)。 这是Kubernetes等平台所采取的相反方法,其中所有这些职责都委托给平台或其他支持容器(例如 envoy , linkerd , traefik )。 我在过去比较过Kubernetes 和 Spring Cloud(请注意,不是的Cloud Foundry) 。

AWS ECS和Docker Swarm

尽管Docker,公司(企业)仍然 搞清楚 它是要发展什么,卖什么,亚马逊创造了使用Docker技术作为一部分一个非常坚实的产品 AWS弹性容器服务 。 带有 Blox的 ECS(AWS的开源容器编排软件)本身可能不是什么大事,但当与所有其他AWS产品结合使用时,它是一个功能非常强大的集成平台。

更不用说从虚拟机时代起成为AWS支持者的Netflix正在向容器领域过渡 ,并正在推动Amazon ECS的创新。

CNCF和Kubernetes

Kubernetes是此类别中最新的平台之一,但同时也是有史以来最活跃,发展最快的开源项目之一。 与整合的 云原生计算基金会项目 和支持 公司相结合 ,使整个生态系统成为这一类别中非常有力的竞争者。

作为一个后来者(2014年),Kuebernetes的优势在于从一开始就以容器为中心的架构发展。 而且它基于一个已有十年历史的Google Borg,这意味着原则(不是实施)是成熟的,并在***别进行战斗测试。

云原生可移植性的神话

Sysdig 2017年Docker使用报告中的容器编排

正如您可以 从Sysdig 最近的 报告中 看到的结果 ,云原生用户似乎很欣赏这一切。

选择哪一个?

也许您在想,只要您将应用程序打包到容器中,就可以轻松地跨不同的云原生平台移植。 你错了。 无论您是从Mesos,Cloud Foundry,Kubernetes,Docker Swarm,ECS开始,您都必须投入大量资金来学习平台和支持工具,了解文化和工作方式,并与这个仍然快速变化的生态系统的技术和公司进行互动。

本文的目的不是要比较这些生态系统,而是要显示它们之间的差异,并证明如果需要,它将需要大量的时间和金钱来输入,或转移到另一个生态系统。

Kubernetes作为应用程序可移植层

云原生态系统在技术,流程和文化方面非常独特。 但即使在他们之间也有一些整合。 许多由一个平台推广的概念也在向其他平台传播。 例如,部署单元(Pod in Kubernetes)的概念现在出现在Mesos中,它也作为任务组存在于Amazon ECS中。 服务器端负载平衡(Kubernetes中的服务)和带有策略的调度/放置(Kubernetes Scheduler)的概念也存在于Docker Swarm,AWS ECS等中。但这是它走多远,从一个生态系统过渡到另外,需要付出很多努力。

那么如何避免与单一供应商锁定? 一种方法是坚持使用Kubernetes并接受它作为云和服务提供商之间的可移植性层。 Kubernetes如此受欢迎的原因之一是它不是单一的公司玩具,而是由多家大型科技公司支持,如谷歌,红帽( OpenShift ),Docker,Mesosphere,IBM,戴尔,思科等等。

另一个原因是有许多云公司提供Kubernetes作为服务。 如果您使用Kubernetes,那么您可以通过第三方服务提供商以最小的努力在Google容器引擎,Microsoft Azure,IBM Bluemix容器服务等云提供商之间移动您的应用程序,甚至可以在AWS上移动您的应用程序。 这意味着Kubernetes API是云平台之间应用程序的可移植性层,而不仅仅是容器。 一个容器本身就是云原生海洋中的一滴。

Cloud Foundry Foundation , Cloud Native Computing Foundation 和 Red Hat 是The New Stack的赞助商。

关于作者

云原生可移植性的神话

Bilgin Ibryam (@bibryam)是 Red Hat 的首席架构师,提交者和 ASF 成员。 他是一名开源传播者,博客作者,《Camel Design Patterns》 和 《Kubernetes Patterns》 书籍的作者。 在他的日常工作中,Bilgin 喜欢指导编码和领导开发人员成功构建云原生解决方案。 他目前的工作重点是应用程序集成、分布式系统、消息传递、微服务、devops 和一般的云原生挑战。 你可以在 Twitter、Linkedin 或他的 博客 上找到他 。


推荐阅读
  • 本文总结了初学者在使用dubbo设计架构过程中遇到的问题,并提供了相应的解决方法。问题包括传输字节流限制、分布式事务、序列化、多点部署、zk端口冲突、服务失败请求3次机制以及启动时检查。通过解决这些问题,初学者能够更好地理解和应用dubbo设计架构。 ... [详细]
  • 2021最新总结网易/腾讯/CVTE/字节面经分享(附答案解析)
    本文分享作者在2021年面试网易、腾讯、CVTE和字节等大型互联网企业的经历和问题,包括稳定性设计、数据库优化、分布式锁的设计等内容。同时提供了大厂最新面试真题笔记,并附带答案解析。 ... [详细]
  • 大厂首发!思源笔记docker
    JVMRedisJVM面试内存模型以及分区,需要详细到每个区放什么?GC的两种判定方法GC的三种收集方法:标记清除、标记整理、复制算法的 ... [详细]
  • SpringBoot整合SpringSecurity+JWT实现单点登录
    SpringBoot整合SpringSecurity+JWT实现单点登录,Go语言社区,Golang程序员人脉社 ... [详细]
  • Java如何导入和导出Excel文件的方法和步骤详解
    本文详细介绍了在SpringBoot中使用Java导入和导出Excel文件的方法和步骤,包括添加操作Excel的依赖、自定义注解等。文章还提供了示例代码,并将代码上传至GitHub供访问。 ... [详细]
  • Sleuth+zipkin链路追踪SpringCloud微服务的解决方案
    在庞大的微服务群中,随着业务扩展,微服务个数增多,系统调用链路复杂化。Sleuth+zipkin是解决SpringCloud微服务定位和追踪的方案。通过TraceId将不同服务调用的日志串联起来,实现请求链路跟踪。通过Feign调用和Request传递TraceId,将整个调用链路的服务日志归组合并,提供定位和追踪的功能。 ... [详细]
  • ElasticSerach初探第一篇认识ES+环境搭建+简单MySQL数据同步+SpringBoot整合ES
    一、认识ElasticSearch是一个基于Lucene的开源搜索引擎,通过简单的RESTfulAPI来隐藏Lucene的复杂性。全文搜索,分析系统&# ... [详细]
  • 如何使用PLEX播放组播、抓取信号源以及设置路由器
    本文介绍了如何使用PLEX播放组播、抓取信号源以及设置路由器。通过使用xTeve软件和M3U源,用户可以在PLEX上实现直播功能,并且可以自动匹配EPG信息和定时录制节目。同时,本文还提供了从华为itv盒子提取组播地址的方法以及如何在ASUS固件路由器上设置IPTV。在使用PLEX之前,建议先使用VLC测试是否可以正常播放UDPXY转发的iptv流。最后,本文还介绍了docker版xTeve的设置方法。 ... [详细]
  • {moduleinfo:{card_count:[{count_phone:1,count:1}],search_count:[{count_phone:4 ... [详细]
  • docker安装到基本使用
    记录docker概念,安装及入门日常使用Docker安装查看官方文档,在"Debian上安装Docker",其他平台在"这里查 ... [详细]
  • Java工程师书单(初级,中级,高级)
    简介怎样学习才能从一名Java初级程序员成长为一名合格的架构师,或者说一名合格的架构师应该有怎样的技术知识体系,这是不仅一个刚刚踏入职场的初级程序员也是工作一两年之后开始迷茫的程序 ... [详细]
  • elixirerlang通过AyandaDubeFIPS(联邦信息处理标准)[1]是由NIST(美国国家标准技术研究院)定义 ... [详细]
  • 线程安全解析(附带JVM内存结构和锁机制说明)
    2019独角兽企业重金招聘Python工程师标准一、JVM内存结构和保存的变量属性(JVM调优和算法不涉及)1.堆、栈、方法区、程序计数器、本地方法栈--重点说堆、栈、方法区 ... [详细]
  • k8shelm官网:https:helm.sh点击charts:https:artifacthub.iopackagessearch?sortrelevance&page11.1h ... [详细]
  • Android日历提醒软件开源项目分享及使用教程
    本文介绍了一款名为Android日历提醒软件的开源项目,作者分享了该项目的代码和使用教程,并提供了GitHub项目地址。文章详细介绍了该软件的主界面风格、日程信息的分类查看功能,以及添加日程提醒和查看详情的界面。同时,作者还提醒了读者在使用过程中可能遇到的Android6.0权限问题,并提供了解决方法。 ... [详细]
author-avatar
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有