三种微服务治理方式

author author     2023-02-02     802

关键词:

1、应用程序中包含微服务治理逻辑

在微服务架构中,服务间不再是在朴素的进程内通信,取而代之的是通过轻量级的网络协议进行通信。那么,如何找到服务提供方?如何超时重试?当存在多个服务提供方时如何实现负载均衡?许多复杂的微服务治理问题逐步涌现出来。

倘若上述问题都需要微服务本身通过代码去解决,这样的解决方案无疑会消耗开发人员的时间和精力。类似的问题在大部分的微服务场景中都会出现,显然也会带来更多的代码重复。

在分布式服务早期,许多互联网企业就经历过这一过程,微服务之间的调用是通过硬编码对方的服务地址来实现的。如果有多个地址,调用端往往会自己编写一个简单的负载均衡算法、接口路由策略等,配合一些超时重试功能来实现微服务间的调用。这种方式的扩展性很差,一旦服务提供方的实例进行扩缩容或地址变更,服务调用方就需要通过更新服务的提供方节点列表并重新发布服务来保证正常通信。而且当一个基础服务被多个调用方依赖时,变更将是一场灾难。

三种微服务治理方式_微服务

2、将微服务治理逻辑封装成SDK

硬编码的微服务治理方式有很大的弊端,比如重复的代码、额外的工作量,并且每个微服务的开发人员不同,对微服务治理的逻辑和理解也不同,导致微服务治理的方案也参差不齐,因此第一种微服务治理方式的效果并不理想。此时在各大互联网公司中逐步演化出了一种新型微服务治理方式。

第二种微服务治理方式是将微服务治理逻辑封装成SDK,开发人员使用统一的SDK或框架来实现服务发现、负载均衡、限流和熔断等微服务治理功能。一些微服务框架开始流行,这其中比较著名的当属Dubbo和Spring Cloud了。Dubbo和Spring Cloud都是优秀的微服务框架,配套组件功能齐全。由于局限于Java语言(Dubbo后来发布了Go版本,可以实现与Java版本的互相通信),很多其他语言的开发者抱怨跨语言的微服务治理成为盲区。

Nginx成为跨语言的微服务之间通信的首选,无成熟微服务治理框架的微服务之间或者跨语言的微服务之间使用HTTP这个应用最广泛的网络协议进行通信,通过域名访问并使用Nginx代理来做转发、负载均衡和健康检查。通过Nginx可以收集微服务之间调用的日志,并对日志做访问和调用分析。微服务的扩缩容等功能通过变更Nginx的配置来实现,这是现在很多互联网公司的做法。

三种微服务治理方式_微服务_02

3、将微服务治理逻辑独立到应用进程之外

第二种微服务治理方式虽然解决了重复代码和维护成本的问题,但还是有以下缺点。

  • 对业务进程有侵入。虽然统一封装成了SDK,但微服务治理逻辑还是与业务代码在一个应用程序内,当SDK升级时,应用也需要发布更新。
  • 存在跨语言问题。
  • 虽然很多微服务治理框架号称开箱即用,但也有一定的接入和学习成本,每个开发人员学习和理解的程度不同,使用起来并不能达到理想的效果。

为了解决上述问题,诞生了一种新的方案:将微服务治理逻辑彻底从业务进程中剥离出来,这就是Sidecar模式。在Sidecar模式下,开发人员的业务代码进程和微服务治理进程是互相独立的,不需要耦合,并且与开发语言无关,业务应用的升级和治理逻辑的Sidecar升级互相不影响。尤其是在微服务改造过程中,原有的老旧系统不需要做任何更改,搭配Sidecar即可。

三种微服务治理方式_微服务_03

在微服务容器化的今天,Istio凭借Sidecar的无侵入式接入以及和Kubernetes相结合的特点迅速成为微服务治理的首选。

此外,Nginx作为一款由C++编写的高性能代理,也具有一定的Sidecar属性,但它在微服务治理方面的功能还是有些欠缺。例如,Nginx的访问日志仅记录请求到达Nginx和Nginx请求到达上游节点的情况,调用方的请求到达Nginx之前的访问情况并无记录,如果网络出现抖动,请求可能无法到达Nginx,或者从Nginx发出的请求无法到达上游服务,这时就无法判断客户端调用超时是因微服务的性能问题引起还是因网络问题引起。Nginx支持基于令牌桶的限速,但不支持灵活的限流和熔断机制等高级的服务治理功能。

掌握这几种微服务模式助你成为更出色的工程师

导读:对于很多工程师来说,进入微服务领域是很困难的。99%的服务属于五类之一,通过这种方式划分责任考虑如何通过管道服务一起管理特性,就像在Unixshell脚本中一样。所有的微服务有什么共同之处,域驱动设计之父EricEva... 查看详情

springcloud入门

SpringCloud1、   springcloud概述SpringCloud是一种微服务架构,依赖于SpringBoot,主要用于服务治理(解耦),其中每一个服务都可以独立运行,服务之间没有依懒关系2、   Eureka注册中心搭建1、pom.xml配置<parent>... 查看详情

.net几种微服务框架,你用过吗?(代码片段)

...或者基于其它框架搭建微服务(比如abp)。本文将介绍几种微服务框架,供大家学习参考。一、ServiceFabric简介:ServiceFabric是一个微服务框架,它由微软开发并托管在Azure上。它提供了一种分布式系统的方式,允许开发人员在云... 查看详情

六种微服务架构的设计模式

聚合器微服务设计模式这是一种最常用也最简单的设计模式,如下图所示:聚合器调用多个服务实现应用程序所需的功能。它可以是一个简单的Web页面,将检索到的数据进行处理展示。它也可以是一个更高层次的组合微服务,对... 查看详情

微服务治理的手段

...除负载均衡第一种:随机算法第二种:权重优先级算法第三种:最小活跃调用算法第四种:一致性hash算法如果所 查看详情

服务治理:springcloudeureka

SpringCloudEureka主要负责完成微服务架构中服务治理功能。服务治理是微服务架构中最为核心和基础模块,主要用来实现各个微服务实例的自动注册和发现。服务注册微服务实例启动后向注册中心注册自己的服务,服务注册中心会... 查看详情

服务治理:springcloudeureka

SpringCloudEureka主要负责完成微服务架构中服务治理功能。服务治理是微服务架构中最为核心和基础模块,主要用来实现各个微服务实例的自动注册和发现。服务注册微服务实例启动后向注册中心注册自己的服务,服务注册中心会... 查看详情

couchbase的四种微服务架构(代码片段)

👇👇关注后回复 “进群” ,拉你进程序员交流群👇👇作者丨MarianPuhl译者丨马可薇策划丨万佳来源丨架构头条(ID:ArchFront)在过去十年中,微服务已经逐渐成为了一种常见的架构模式。在... 查看详情

springcloud——服务治理机制笔记

SpringCloud——服务治理机制笔记服务治理机制服务提供者服务注册服务提供者在启动的时候会通过发送REST请求的方式将自己注册到EurekaServer上,同时带上了自身服务的一些元数据信息。eureka.client.register-with-eureka=true:启动注册操... 查看详情

微服务架构下的服务治理:如何在springcloud框架中实现服务的注册与发现

...心在RPC远程过程调用协议中,有一个注册中心SpringCloud支持三种组册中 查看详情

服务线上治理

线上治理是根据量化分析的结果,通过相应的预案对线上服务的运行状况进行调整,保证线上服务正常运行,接下来讨论线上服务常见的预案,以及如何保证预案的自动触发和自动调整。故障快速定位和止损的理想处理方式是将... 查看详情

服务治理springcloudeureka——单片搭建(代码片段)

第3章服务治理SpringCloudEureka2.1框架简介SpringCloudEureka是SpringCloudNetflix 微服务套件中的一部分,它基于NetflixEureka做了二次封装,主要负责完成微服务架构中的服务治理功能。2.2服务治理服务治理可以说是微服务架构中࿰... 查看详情

一文理解分布式开发中的服务治理

我们在分布式开发中经常听到的一个词就是“服务治理”。在理解“服务治理”的概念之前让我们先理解什么是分布式系统,分布式系统之间如何通过RPC(RemoteProcedureCall,远程过程调用)方式通信,以及如何... 查看详情

服务治理springcloudeureka——服务发现与消费(代码片段)

承接上一篇《第3章服务治理SpringCloudEureka(二)——高可用注册中心》2.6服务发现与消费2.6.1简介在SpringCloud框架中,服务发现的任务由Eureka的客户端完成,而服务消费任务由Ribbon完成。Ribbon是一个基于HTTP和TCP的... 查看详情

简答题

...ESTful调用和 RPC调用有什么区别?如果让你设计一个RPC服务治理框架你会设计那些模块?是否了解过ServiceMesh,如果了解ServiceMesh是用来解决什么问题的?1、RESTful是一种软件架构风格,用于约束客户端和服务器交互,满足这些... 查看详情

2020-05-18【istio服务治理,k8s各个组件】

...理能力,用户只需要关注自己的业务逻辑开发,无须关注服务访问管理。Istio流量治理的方式是什么?在控制面:管理员通过命令或API创建流量规则,Pilot将该规则转换为Envoy标准形式后下发给Envoy。在数据面:Envoy拦截Pod本地容... 查看详情

三种存储方式

javaScript有三种数据存储方式,分别是:sessionStoragelocalStoragecookier相同点:都保存在浏览器端,同源的不同点:①传递方式不同cookie数据始终在同源的http请求中携带(即使不需要),即cookie在浏览器和服务器间来回传递。sessionSto... 查看详情

不改一行代码,轻松拥有企业级微服务治理|mse微服务治理专业版发布

简介:随着业务的发展,微服务拆分越来越复杂,微服务的治理也成了一个比较令人头疼的问题。有没有更加简单且高效的方法来解决微服务治理的难题?作者:十眠随着业务的发展,微服务拆分越来越复... 查看详情