【详解】为什么选择Kubernetes作为云平台的微服务治理框架

本文涉及的产品
MSE Nacos 企业版免费试用,1600元额度,限量50份
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
任务调度 XXL-JOB 版免费试用,400 元额度,开发版规格
简介: 本文讲的是【详解】为什么选择Kubernetes作为云平台的微服务治理框架,很多同学在做技术选型的时候,往往过于关注技术/功能上的比较,陷入技术细节和功能特性上的争论。

如何做开源技术选型?

本文讲的是【详解】为什么选择Kubernetes作为云平台的微服务治理框架,很多同学在做技术选型的时候,往往过于关注技术/功能上的比较,陷入技术细节和功能特性上的争论。比如A产品有个X功能,看起来很棒,B产品有个Y功能,也不错,选哪个,好纠结……或者A产品的当前版本看起来不错,B就很一般,可是B的Roadmap里写,下一个版本会有个很强大的功能出来,是不是要再等等看,好纠结……

有时候勉强选了A,又看到B发展的也不错,心里不踏实。

其实在我们看来,技术/功能只是技术选型过程中需要考量的诸多维度中的一个,只要这些开源产品大体上能满足我们的需求,架构上没有明显的缺陷,开发语言和现有团队比较匹配、Roadmap比较完善,就没什么大问题,就可以进入其他维度的考量。

我们认为,技术/功能在技术选型中的权重,可能只有四分之一。有很多技术/功能上非常领先的开源项目,并没有得到很好的发展,比如ZFS,比如CloudStack,令人惋惜,这里不一一列举。那么技术选型过程中,除了技术/功能之外,我们还应该关注哪些事情呢?

项目的运作模式

开源项目的运作模式中,我们重点关注以下三点:

1、使用哪种开源License
2、开发模式和测试模式
3、被一家公司掌控还是松散的社区决策?

其中最重要的是License。在很多技术人员的眼中,License问题依然没有得到足够的重视。(对这个问题感兴趣的同学可以移步 http://choosealicense.com/ 查看各种开源License的差异。)

开发模式,值得关注,但是一般知名的开源项目,在开发模式上都不会有太大的问题,更重要的是测试模式。很多开源项目自身不重视测试,把填坑的事情丢给参与厂商,这种项目,如果贵司不是动不动就能派出几十人上百人的大厂,必须慎用。会认真做测试框架、定期发测试报告的项目,必须好评。

项目运作是被一家公司掌控还是松散的社区决策,以前都说大教堂不如集市,那是因为以前大教堂基本上不搞开源,搞开源的大教堂和集市,就难说哪个好了,参与过OpenStack厂商扯皮的同学,应该对这个深有体会。

技术提供者的产业背景

在项目技术提供者的产业背景中,我们重点关注以下三点:

1、技术提供者的产业经验
2、自己有没有大规模使用?
3、是从自身需求沉淀出来的产品还是按设想的需求开发的产品?

现在都讲“吃自己的狗粮”,很多最为成功的产品,都是在自己内部的长期的、大规模的使用中反复锤炼,再发布给公众使用的,最好的例子就是AWS。从自身的实际需求出发的、给自己做的产品,往往会比按设想需求出发的、给客户做的产品更好。所以我们往往更加青睐大型互联网公司释放出来的开源项目,比如Netflix的一系列开源项目。

生态环境

在项目所处于的生态环境中,我们重点关注以下三点:

1、技术和技术提供者在产业链中的位置
2、与友商的合作/竞争关系
3、是众望所归还是单打独斗?

互联网时代,没有生态、就等于没有未来。良好的合作、清晰的分工界面,会让项目得到更好的发展,总想占点上下游的便宜,动别人的奶酪,或者妄图以一己之力对抗全行业,当然也有成功的,但是概率真的很低。

我们的选择

现在回到故事的大背景中,看下我们为什么选择Kubernetes作为普元新一代云平台的微服务治理框架。

首先,以下为我们在云计算项目中遇到的需求:

image

云计算技术经过近十年的变迁,需求重点已经从早期的虚拟化资源池管理、单体应用的“栈”管理,过渡到了微服务的“图”管理。

管理微服务时,我们需要对这些微服务和它们的调用关系进行注册、为其分配资源、创建一定数量的节点副本、并发布到集群中去,同时还要为其配置好网络和负载均衡,使这些微服务能够被外部访问;在这些微服务的运行过程中,需要始终保持其可用性,一旦有节点出现问题,需要立即创建新的节点将其替换掉;运行过程中需要对这些微服务进行监控和日志收集;在负载发生变化的时候,还要能够迅速调整资源分配。

大体上能满足这些需求的开源项目有Kubernetes、Mesos Marathon、Docker Swarm、OpenShift、Cloud Foundry等等。

我们重点看一下Kubernetes:

image

可以看到,Kubernetes使用了较为常见的Master-Slave架构,在容器之上又封装了一层Pod结构,很好地适应了多容器服务,也符合Unix的进程模型。Pod通过Label标识为服务(Service),概念简洁明了而且非常灵活。

经常有人问,Mesos资源调度能力更加强大,而且产品推出的时间比较久,更加成熟、稳定,为什么不选择Mesos?还有人拿出了下面这张对比图,证明Mesos的功能更为强大:
image

需要注意的是,这张图只对比了资源调度,而Kubernetes提供的是从资源调度,到服务发放、变更、退休,到网络管理的全方位能力,而Mesos仅仅是资源调度,服务管理要借助Marathon,而网络管理能力聊胜于无。其他类似的技术,同理,这里就不一一展开了(上面那张图来源于剑桥大学CambridgeSystems at Scale博客的一篇文章,感兴趣的同学可以移步 http://www.cl.cam.ac.uk/research/srg/netos/camsas/blog/2016-03-09-scheduler-architectures.html)。

再来看一下Kubernetes的Roadmap:

image

我们关注的功能,例如CustomMetrics、Multi-zone、Multi-scheduler、Node affinity等,都在Roadmap之中,还有Device Scheduling这种意想不到的功能,三个月一个版本,进度和我们自己的产品规划也比较吻合。

技术这关到这就算是过了,接下来我们看下Kubernetes项目的运作模式。

Kubernetes使用Apache License,没有对参与厂商做太多的限制。虽然很多厂商在积极贡献代码,但是控制权还是在Google手上,不会出现某些“集体决策”项目因为要不要做一个特性一堆厂商反复扯皮的问题。开源项目的研发过程做到开放透明自然不必多说,在此之上,Kubernetes还做到了接地气,在沟通协作上没有使用所谓的“极客工具”,而是直接使用了Slack、Zoom这样的流行App,每次会议的会议纪要都会发布到Google Docs上,让开发人员之外的技术爱好者也能很方便的获取项目进展的第一手资料。至于测试,有一伙人专门在搞测试框架,对测试的重视程度高于一般开源产品。

image

评估过了项目的运作模式,我们再来看一下技术提供者的产业背景。大家都知道近两年这一波容器浪潮的推手是Docker,Docker俨然成为容器的代名词,那么Google的位置又在哪里呢?以下为来自Wikipedia的截图:

image

很多同学可能没注意过,容器的两个根本核心技术之一,cgroups,发起者就是Google,最初的目的是用来管理Google复杂庞大的互联网服务,后来贡献给Linux,至今已经快十年了。而Kubernetes就是源自于Google内部使用、经过多年的锤炼的集群容器管理系统Borg,所以Kubernetes才能做到架构简洁、适应性强而且极具扩展性。有句话说好的架构不是设计出来的,而是进化出来的,这里的反面教材就是Docker,有些同学可能了解Docker的C/S架构和网络设计,带来了多少麻烦,这就是有没有产业经验的区别。

最后,我们来看生态。Kubernetes首先是和CoreOS联合,形成名为Tectonic的端到端容器管理解决方案,而CoreOS又是etcd、rkt、fleet、flannel等一系列优秀开源项目的领头羊,这些开源项目彼此之间做到了很好的对接,避免了使用开源软件时经常碰到的“裁剪”问题。而前段时间的一个新闻更是将Kubernetes所在的生态环境进一步强化:

image

总结

经过上文的分析,可以看到,Kubernetes在技术/功能、运作模式、产业背景、生态等四个维度有着较为均衡的优势,所以我们选择Kubernetes作为普元新一代云平台的微服务治理框架。下图中浅蓝色的模块基于Kubernetes的能力开发:
image

原文发布时间为:2016-04-27
本文作者: 宋潇男
本文来自云栖社区合作伙伴EAWorld,了解相关信息可以关注EAWorld。

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
2月前
|
人工智能 数据可视化 JavaScript
颠覆开发效率!国内首个微服务编排框架Juggle开源啦!
Juggle是国内首个开源的微服务编排框架,专注于解决企业微服务进程中接口重复开发、系统对接复杂等问题。它提供零代码、低代码和AI增强功能,通过可视化拖拽快速组装简单API为复杂接口,支持多协议、多语言脚本和流程多版本管理。相比国外框架如Conductor,Juggle更贴合国内需求,具备高效开发、企业级可靠性及信创适配等优势,助力企业实现敏捷创新与数字化转型。
颠覆开发效率!国内首个微服务编排框架Juggle开源啦!
|
9月前
|
XML JSON API
ServiceStack:不仅仅是一个高性能Web API和微服务框架,更是一站式解决方案——深入解析其多协议支持及简便开发流程,带您体验前所未有的.NET开发效率革命
【10月更文挑战第9天】ServiceStack 是一个高性能的 Web API 和微服务框架,支持 JSON、XML、CSV 等多种数据格式。它简化了 .NET 应用的开发流程,提供了直观的 RESTful 服务构建方式。ServiceStack 支持高并发请求和复杂业务逻辑,安装简单,通过 NuGet 包管理器即可快速集成。示例代码展示了如何创建一个返回当前日期的简单服务,包括定义请求和响应 DTO、实现服务逻辑、配置路由和宿主。ServiceStack 还支持 WebSocket、SignalR 等实时通信协议,具备自动验证、自动过滤器等丰富功能,适合快速搭建高性能、可扩展的服务端应用。
497 3
|
11月前
|
Kubernetes 负载均衡 微服务
Kubernetes 生态系统中的微服务治理
【8月更文第29天】随着微服务架构的普及,管理分布式系统的复杂性也随之增加。Kubernetes 作为容器编排的事实标准,为微服务架构提供了强大的支持。结合像 Istio 这样的服务网格工具,Kubernetes 能够有效地解决微服务治理中的诸多挑战,如服务发现、负载均衡、流量管理和安全策略等。
118 3
|
5月前
|
传感器 监控 安全
智慧工地云平台的技术架构解析:微服务+Spring Cloud如何支撑海量数据?
慧工地解决方案依托AI、物联网和BIM技术,实现对施工现场的全方位、立体化管理。通过规范施工、减少安全隐患、节省人力、降低运营成本,提升工地管理的安全性、效率和精益度。该方案适用于大型建筑、基础设施、房地产开发等场景,具备微服务架构、大数据与AI分析、物联网设备联网、多端协同等创新点,推动建筑行业向数字化、智能化转型。未来将融合5G、区块链等技术,助力智慧城市建设。
227 0
|
10月前
|
Dubbo Java 应用服务中间件
微服务框架Dubbo环境部署实战
微服务框架Dubbo环境部署的实战指南,涵盖了Dubbo的概述、服务部署、以及Dubbo web管理页面的部署,旨在指导读者如何搭建和使用Dubbo框架。
746 17
微服务框架Dubbo环境部署实战
|
9月前
|
Dubbo Java 应用服务中间件
Dubbo学习圣经:从入门到精通 Dubbo3.0 + SpringCloud Alibaba 微服务基础框架
尼恩团队的15大技术圣经,旨在帮助开发者系统化、体系化地掌握核心技术,提升技术实力,从而在面试和工作中脱颖而出。本文介绍了如何使用Dubbo3.0与Spring Cloud Gateway进行整合,解决传统Dubbo架构缺乏HTTP入口的问题,实现高性能的微服务网关。
|
8月前
|
分布式计算 Java 持续交付
如何选择合适的微服务框架
如何选择合适的微服务框架
158 0
|
10月前
|
Kubernetes Java Android开发
用 Quarkus 框架优化 Java 微服务架构的设计与实现
Quarkus 是专为 GraalVM 和 OpenJDK HotSpot 设计的 Kubernetes Native Java 框架,提供快速启动、低内存占用及高效开发体验,显著优化了 Java 在微服务架构中的表现。它采用提前编译和懒加载技术实现毫秒级启动,通过优化类加载机制降低内存消耗,并支持多种技术和框架集成,如 Kubernetes、Docker 及 Eclipse MicroProfile,助力开发者轻松构建强大微服务应用。例如,在电商场景中,可利用 Quarkus 快速搭建商品管理和订单管理等微服务,提升系统响应速度与稳定性。
309 5
|
10月前
|
存储 Java Maven
从零到微服务专家:用Micronaut框架轻松构建未来架构
【9月更文挑战第5天】在现代软件开发中,微服务架构因提升应用的可伸缩性和灵活性而广受欢迎。Micronaut 是一个轻量级的 Java 框架,适合构建微服务。本文介绍如何从零开始使用 Micronaut 搭建微服务架构,包括设置开发环境、创建 Maven 项目并添加 Micronaut 依赖,编写主类启动应用,以及添加控制器处理 HTTP 请求。通过示例代码展示如何实现简单的 “Hello, World!” 功能,并介绍如何通过添加更多依赖来扩展应用功能,如数据访问、验证和安全性等。Micronaut 的强大和灵活性使你能够快速构建复杂的微服务系统。
422 5
|
10月前
|
缓存 Java 应用服务中间件
随着微服务架构的兴起,Spring Boot凭借其快速开发和易部署的特点,成为构建RESTful API的首选框架
【9月更文挑战第6天】随着微服务架构的兴起,Spring Boot凭借其快速开发和易部署的特点,成为构建RESTful API的首选框架。Nginx作为高性能的HTTP反向代理服务器,常用于前端负载均衡,提升应用的可用性和响应速度。本文详细介绍如何通过合理配置实现Spring Boot与Nginx的高效协同工作,包括负载均衡策略、静态资源缓存、数据压缩传输及Spring Boot内部优化(如线程池配置、缓存策略等)。通过这些方法,开发者可以显著提升系统的整体性能,打造高性能、高可用的Web应用。
151 2