云原生时代,微服务到底应该怎么玩儿?

jdclouddeveloper jdclouddeveloper     2023-04-30     621

关键词:

技术图片

在微服务诞生之初,并没有太多方案的选择:选一个注册中心用来做服务注册和发现,通过客户端SDK进行负载均衡和容错,再搭配上日志、监控、调用链全套观测手段,一套微服务架构便建立起来了。

作为最流行的业务开发语言,Java体系里诞生了很多微服务架构,例如Spring Cloud。使用Spring Cloud,Spring技术栈的开发人员可以快速的开发和管理微服务,丰富的功能让其他语言体系的开发者们羡慕不已。

在云原生时代,Kubernetes快速普及,除了解决微服务所需要的应用编排、伸缩、保活等功能外,Kubernetes里本身还带了服务发现、配置管理、负载均衡和网关。既然这样,那么是否就可以不再注重注册中心和服务治理框架,只基于Kubernetes构建微服务系统呢?

很多公司进行了这方面的尝试,尝试后发现从治理功能丰富度、大规模集群效率等方面,还是有不太满意的地方。于是,后来又诞生了治理功能更为丰富的服务网格架构,让Kubernetes的服务治理能力极大增强,这些项目很快便得到了大范围的关注,例如Istio。

那么,在云原生时代,我们的微服务体系到底应该怎么建设和维护呢?

Kubernetes良好的应用编排能力,使其成为微服务部署、伸缩、管理的最佳工具。假如是为新增业务做技术选型,建议都直接使用Kubernetes和容器来部署和管理应用,而不是还使用物理服务器或者虚拟机。而关于服务治理,目前会有如下选择:

只使用Kubernetes:

Kubernetes里本身具备服务发现、配置管理、负载均衡和网关,这使得看起来只使用Kubernetes就可以把微服务系统搭建起来。不过,这种方式存在问题。例如:

  • 流量治理能力不足——缺乏熔断能力,没有灰度控制能力;
  • 大规模使用时的性能问题——基于Kubernetes Service的服务发现过程需要经过Iptables或IPVS的查找过程,集群规模大时性能影响会比较明显。

另外,很多观测功能也都需要一定的代码集成才可以发挥作用。

使用Kubernetes部署+Spring Cloud(或Dubbo等)服务治理:

这种方式是笔者认为目前最成熟的一种方式,可以充分利用Kubernetes和Spring Cloud(或Dubbo等)自身的优点。这种方式性能好、功能完备,也已经有大量稳定的线上案例。不过这里面也会涉及到一个问题:语言和框架的依赖——Java以外的其他语言都缺乏完备的服务治理框架。

使用Kubernetes部署+Istio(或Linkerd等)服务治理:

服务网格是这两年赢得最多关注的方式,彻底把业务和服务治理逻辑切分开。这种方式没有语言和框架依赖,应用不用修改代码逻辑,只要接入网格就可以使用网格提供的全套流量管理、策略管理、观测能力和安全能力。京东云内部已经有上百个线上服务运行在服务网格里,利用网格技术减少了这些服务接入安全、观测、流量管理等功能的接入成本,通过此过程也积累了很多优化和运维经验。不过,网格架构的复杂性,和经过两层网络代理引入的延迟,仍然是不可回避的问题。

下面让我们再详细看一下后两种方式。

Kubernetes部署+Spring Cloud服务治理

对于Java业务研发工程师而言,采用这种方式的感觉是Spring Cloud太“简单”了,而Kubernetes太“难”了。

Spring Cloud很“简单”。标准的Spring Boot开发方式,引入几个包,服务发现、负载均衡、熔断就都有了。业务研发工程师便开开心心拆分服务去了。等拆完服务真上线跑一段时间,才发现Spring Cloud太难了。监控线上系统是否存在异常这个工作,比之前监控单体服务复杂好几个量级。一旦线上有点问题,想查一查,都不知道该上哪个服务去查。调用链看起来很强大,用起来又不那么容易。还可能出现过这样的尴尬:老板听说上完了微服务:老板听说上完了微服务,问以后上线是不是可以像互联网公司那样灰度发布了,结果才发现Spring Cloud官方竟然没提供这个能力。

Kubernetes很“难”。一堆概念,什么Pod、CNI、Replication Controller、Persistent Volume…而且,随便搞个事情都需要写一长串yaml,各种事情还都用命令行操作。但实际上,Kubernetes使应用交付大大简化了。以前最复杂的服务依赖管理、弹性伸缩、故障恢复等能力,Kubernetes都提供了支持。而且是你只用声明你期望达到什么目标,Kubernetes就能自动帮你完成这背后的各种具体操作步骤。

因此,如果要采用这种方案,这里会有一些建议:

  • 先把整套部署、治理、观测系统建设完善之后再去做微服务拆分;
  • 利用专门的团队或者直接利用云服务完成整套系统的建设和运维;
  • 系统建设完善后,业务运维尽量交给业务研发自己进行。

为了使业务研发工程师能更容易地使用Kubernetes和Spring Cloud构建微服务系统。京东云微服务平台产品做了下面这些改进:

  • 一个平台,全界面操作,可以完成整套部署、治理、观测等线上运维工作;
  • 具备日志、监控、调用链、依赖图谱等全角度观测能力;
  • 屏蔽Kubernetes底层技术细节,托管注册中心、配置中心、调用链分析等后端服务,让研发工程师的关注点可以回归业务本身;
  • 扩展标准Spring Cloud能力,增加路由治理和服务鉴权功能,可以更精确的控制调用。

点击【阅读】可查看微服务平台上如何通过K8S管理Spring Cloud应用。

Kubernetes部署+Istio服务治理

对于业务研发工程师而言,如果Kubernetes已经很难,那么Istio就更难了。Istio的难主要体现在如下方面。

  • 概念复杂:又是很多新概念,Virtual Service、Destination Rule、Subset、Service Entry… …
  • 架构复杂:包含太多的系统组件,Pilot、Mixer、Galley、Security、Gateways、Kiali…
    …组件之间的关系又很复杂。
  • 保证稳定性困难:社区版本发布频率快,每个版本都有不少稳定性问题。如果线上出现问题,等下一版解决吧等不起,自己改吧又太复杂不知道该怎么改。

如果要采用服务网格方案,这里会有一些建议:

  • 先做完微服务化和容器化之后再考虑引入服务网格技术。不要因为网格没有架构依赖,想通过网格解决十几年前的大型单体应用的服务治理问题;
  • 利用专门的团队或者直接利用云服务完成整套系统的建设和运维;
  • 先从访问量不大的边缘系统尝试网格,延迟敏感的应用慎用网格。

为了使Istio服务网格技术能更容易落地,京东云的云服务网格产品做了如下改进:

  • 建立完备的测试系统,可以通过长时间实际业务的压测及时发现版本问题并及时优化和回归,保证Istio版本的稳定性。
  • 界面上可以通过几个简单配置后自动完成安装、升级等复杂操作。
  • 对Istio的复杂概念和使用过程进行了简化,可以更容易的使用网格的各种功能。

点击https://docs.jdcloud.com/cn/mesh/basic-example了解如何快速的建立服务网格系统并快速体验。

欢迎点击“京东云”了解更多精彩内容

技术图片

技术图片

云原生微服务的下一站,微服务引擎mse升级

简介:管好微服务,成为云原生时代的新难题。管好微服务,成为云原生时代的新难题。从建好微服务到管好微服务,差的虽是一个字,连接起两边的却需要大量的微服务落地经验。因为软件架构的核心挑战... 查看详情

云原生时代,程序员应该掌握哪些能力?

云原生可以说是目前最火热的一个技术概念,它改变了我们对开发、部署和操作应用程序的思考方式。越来越多的编程语言、框架开始拥抱云原生,例如Spring推出了面向云原生的技术SpringNative、RedHat开源了Java云原生服务... 查看详情

身为程序员,就应该了解微服务的未来发展趋势:云原生应用架构

...、无侵入治理等方面进行变革和演进。本篇我们将讲解云原生架构、ServiceMesh技术、无服务器架构(Serverless)技术。云原生应用架构云原生应用架构的3个特征包括:容器化、微服务、DevOps。通俗地讲,就是将现代... 查看详情

微服务之如何从零搭建(吹牛逼篇)(代码片段)

...这不微服务刚兴起没有几年,现如今已经在全力向云原生时代过度了,有人称其为后微服务时代。云原生时代的里程碑应该是从kubernetes,江湖人称K8s,在2017年底彻底赢得容器编排战争开始的吧。现如今K8s被公认... 查看详情

微服务为什么要用云原生网关

文章目录微服务为什么要用云原生网关微服务(网关)的发展微服务发展大事记微服务网关的变化Kubernetes微服务技术趋势及痛点云原生时代的高要求和可选择精细化运营的需求架构升级的痛点云原生网关的优势云原生网... 查看详情

现在大家都在说的云原生到底是啥?

云原生是一个组合词,可以拆分为“云”和“原生”两个词,“云”我们都知道,即在线网络,传统的应用原本都跑在本地服务器上,很有可能需要停机更新,且无法动态扩展,“云”表示应用程序运行在分布式的云环境中,可... 查看详情

.net平台系列21:云原生时代.net5雄霸天下

...务、容器化、DevOps、ServerLess、FaaS,这两年最火的当属云原生CloudNative!当下大部分企业还在追逐微服务架构落地,而下一代的架构云原生已如火如荼。CloudNative云原生  何谓云原生?技术的变革,一定是思想先行,云原 查看详情

|云原生时代下微服务架构进阶之路-snap-e

通过本篇文章您可以了解到以下内容:回顾Snap-E简介Snap-E具体实施流程Snap-E的具体例子总结回顾首先让我们做一个简单的回顾:在上一篇文章中我们谈到了Boris,我们了解到,Boris是一个动手实践的过程,这个... 查看详情

为云原生而生,java微服务框架之-quarkus

1、认识Quarkus定位:云原生时代的微服务框架官网:https://quarkus.io/主办单位:RedHat开源协议:ApacheSoftwareLicense2.0最新版本:1.4.2介绍,官网首页原文:SUPERSONICSUBATOMICJAVAAKubernetesNativeJavastacktailoredforOpenJDKHotSpotandGraalVM,craftedf 查看详情

拥有新时代的通信协议,引领云原生迈向更高的舞台解密dubbo3是如何从微服务升华到云原生领域(代码片段)

感谢2020云原生微服务给我带来了云原生的希望!Dubbo3拥抱云原生升级总体路线我们会侧重于下面红色填充的部分,针对于Dubbo3云原生技术的领域的探索和研究:看Dubbo3带来了什么?要是说到Dubbo想必大家应该知道&... 查看详情

阿里云日志服务sls,打造云原生时代智能运维

...阿里云资深技术专家、日志服务技术负责人简志提出“云原生时代,企业业务数字化是对工程师们严峻的挑战。作为运维工程师,我们应该充分利用AIOps的技术与能力,将数据中心升级为企业的创新中心”。云原生时... 查看详情

scrum到底怎么玩儿?

...-Talk是由Worktile特别推出的线上分享活动,聚焦互联网时代更高效的工作流,横跨TMT、电商、律师、教育等各行业,覆盖研发、产品、设计、市场、运营、HR、行政等各职业。每期邀请一位相关领域的大牛嘉宾,通... 查看详情

云原生分布式微服务的基础概念(代码片段)

...的发展,用户的需求变化以及软硬件的提升,云原生的时代已来临。大厂面试也除了对计算机基础的考察外,也开始进行架构、设计方面的考察,微服务和分布式理论等也开始成为迈入大厂的必备技能。以下是个... 查看详情

硬核科普:到底啥是云原生?(代码片段)

本文主要根据课程什么是云原生?_哔哩哔哩_bilibili总结而来,其他参考文章如下:《云原生人才计划之Kubernetes技术图谱》发布!-知乎(zhihu.com)kubernetes-阿里云与CNCF联合推出的云原生技术公开课_哔哩哔哩_bilibili什... 查看详情

硬核科普:到底啥是云原生?(代码片段)

本文主要根据课程什么是云原生?_哔哩哔哩_bilibili总结而来,其他参考文章如下:《云原生人才计划之Kubernetes技术图谱》发布!-知乎(zhihu.com)kubernetes-阿里云与CNCF联合推出的云原生技术公开课_哔哩哔哩_bilibili什... 查看详情

云原生语境下,如何重新解读微服务?

百家号矩阵管理工具,矩阵管理多个平台,现在新媒体平台也越来越多,像搜狗号,爱奇艺号等等都是近几年才出来的平台,更别说那些主流平台了,这些平台加起来也有30多个,这么多平台应该怎么去进行管理和运营呢?百家... 查看详情

云原生:云计算时代命题之终极解决方案

云原生:云计算时代命题之终极解决方案https://blog.csdn.net/broadview2006/article/details/80131068 2017年08月17日14:35:05  CloudNative?云原生?很多人一看到这个词就懵了,到底什么是云原生?  云原生这个词其实由来已久,IT行... 查看详情

云原生架构重要组成部分之微服务(代码片段)

...了该技术架构,随着技术与理念的升级迭代,云原生概念应世而起,现在火的一塌糊涂。做为新时代的程序员,我们要抓住云原生的浪潮。这篇文章呢大致分为四部分,第一部分简单谈一下什么是云原生,... 查看详情