常见的3种微服务治理方式

author author     2023-03-07     718

关键词:

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

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

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

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

常见的3种微服务治理方式_治理

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

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

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

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

常见的3种微服务治理方式_微服务_02

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

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

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

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

常见的3种微服务治理方式_治理_03

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

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

[技术发展-27]:互联网平台的常见算法与新的治理办法

目录前言:第1章概述1.1大数据时代的关注点1.2常见的算法类型1.3信息服务算法存在的问题第2章 算法治理2.2治理的基本原则2.3治理目标第三章算法治理的规则3.1背景与内容框架 3.2总则 3.3服务范围​编辑 3.4用户保护3.5监管... 查看详情

服务线上治理

...进行调整,保证线上服务正常运行,接下来讨论线上服务常见的预案,以及如何保证预案的自动触发和自动调整。故障快速定位和止损的理想处理方式是将故障定位和预案执行打通,当出现故障时,能够判断出故障的大体类型以... 查看详情

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

...Front)在过去十年中,微服务已经逐渐成为了一种常见的架构模式。在这种方法中,许多小型、自动、松散耦合的服务通过分布式网络 查看详情

微服务

...,而总体件应用程序在一定程度上使用不同的语言,并不常见。当总体的组件切割的到多个服务,在当建立他们的时候,我们有一个选择。你想用Node.js的建立一个 查看详情

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

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

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

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

有货微服务治理实践(代码片段)

服务依赖???????在分布式架构中,服务间的依赖非常常见,一个业务调用通常依赖多个基础服务。如下图,对于同步调用,当会员服务不可用时,订单服务请求线程被阻塞,当有大批量请求调用会员服务时,最终可能导致整个会... 查看详情

简答题

...式。RPC采用客户端与服务端模式,双方通过约定的接口(常见为通过IDL定义或者是代码定义)以类似本地方法调用的方式来进行交互,客户端根据约定传输调用函数+参数给服务端(一般是网络传输TCP/UDP),服务端处理完按照约... 查看详情

基于springcloud的微服务构建学习-3服务治理:springcloudeureka

基于SpringCloud的微服务构建学习-3服务治理:SpringCloudEureka什么是服务治理  服务治理可以说是微服务架构中最为核心和基础的模块,它主要用来实现各个微服务实例的自动化注册与发现。为什么需要服务治理模块  在最初构... 查看详情

常见的微服务架构方案

 背景:工业领域,服务可能涉及多种语言,C++,Java,C#,python最先考虑thrift,但thrift毕竟只是RPC框架,不包含服务治理的内容,且这个开源项目的维护状况并不算好,因此写个原型之后,仍然passZerocIce表现优异,基于RPC框架Ic... 查看详情

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

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

《springcloud从入门到入土》第3章:服务治理:springcloudeureka

简介:SpringCloudEureka是SpringCloudNetflix微服务套件中的一部分,他基于NetflixEureka做了二次封装,主要负责完成微服务架构中的服务治理功能。SpringCloud通过为Eureka增加了SpringBoot风格的自动化配置,我们只需通过引入简单的依赖和注... 查看详情

微服务架构下的服务治理

...一、如何理解ApacheDubbo二、ZooKeeperzookeeper的特性Watcher机制常见应用场景分析分布式锁集群选主统一命名服务统一配置管理统一集群管理三、ApacheDubbo集成zookeeper实现服务注册实现步骤实现原理四、ApacheDubbo的高级应用集群容错配... 查看详情

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

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

dubbo-admin正式支持3.0服务治理(代码片段)

简介:Dubbo相信大家并不陌生,是一款微服务开发框架,它提供了RPC通信与微服务治理两大关键能力。大家在日常开发中更多使用的是Dubbo提供的RPC通信这一部分能力,而对其提供的服务治理的能力使用相对少一些... 查看详情

服务治理:springcloudeureka

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

服务治理:springcloudeureka

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

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

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