OpenSergo Spring Cloud Alibaba 带来的服务治理能力

news2024/11/24 14:55:33

作者:十眠、牧思

Spring Cloud 应用为何需要服务治理

随着微服务技术的发展,微服务(MicroServices) 的概念早已深入人心,越来越多的公司开始使用微服务架构来开发业务应用。

如果采用得当,微服务架构可以带来非常大的优势。微服务架构的最大好处是它可以提升开发效率和系统整体的稳定性:

  • 开发部署简单:单个微服务的功能可以更快地更改,因为可以独立部署、影响范围更小,启动和调试单个微服务的时间成本相比于单体应用也大大减少。

  • 横向扩展简单:根据业务的高峰低谷周期快速的横向扩展非常简单,因为单个微服务通常很小,可以随着系统整体负载的变化更快地启动和停止。

  • 架构升级灵活:单个微服务的“内部架构”可以迅速升级,因为微服务之间松散耦合,只面向定义好的通讯接口进行编程。这使开发团队能够基于自身的技术背景和偏好灵活选择,而不会直接影响其他应用程序、服务或团队。

  • 更好的容错性:微服务之间可以实现更好的故障隔离,单个服务内的内存泄露等故障不容易影响其他服务,相比单体应用一个组件故障会拖垮整个系统。

但是微服务在实施过程中,也很容易遇到一些难点。如果微服务治理得不恰当,反而有可能适得其反,不仅不能享受到微服务架构带来的好处,反而会因为微服务带来的系统复杂性,造成开发、运维部署的复杂度增加,进而影响开发迭代的速度,甚至影响系统的整体稳定性,比如:

  • 服务之间使用远程调用进行通讯,这比进程内的直接调用复杂很多。由于通讯链路的复杂性,可能会出现很多不确定的问题,会出现远程调用不可用或者延迟较高的情况,开发人员需要能够处理这些偶发问题,避免影响业务。

  • 随着业务的发展,微服务之间的拓扑图开始变得复杂,排查问题变得困难,搭建完整的开发测试环境成本也越来越大。

  • 当功能涉及到多个微服务模块时,迭代时需要谨慎地协调多个开发团队的迭代排期,才能保证迭代能够按时交付,达到敏捷开发的效果。

因此, 微服务落地的成功与否,很大程度上取决于能否很好的对这些微服务进行治理,对于传统的 Spring Cloud 应用,并没有提供开箱即用的服务治理机制,用户只能通过自己去实现 Spring Cloud 中的各种扩展点来实现服务治理。与其让用户费心费力去自己写代码实现扩展点,不如 Spring Cloud Alibaba 直接来代替用户做这些事情,用户只需导入 Spring Cloud Alibaba 中的 starter,即可快速给自己的 Spring Cloud 应用添加对应的微服务治理能力。

Spring Cloud Alibaba 新版本服务治理能力预览

最新发布的 Spring Cloud Alibaba 2.2.10-RC1 新版本,基于社区 2.2.x 分支进行的构建发布,其中 2.2.10-RC1 版本通过首次给 Spring Cloud 生态带来了微服务治理能力,并给 Spring Cloud Alibaba 应用带来了 Proxyless Mesh 的能力,让 Spring Cloud Alibaba 应用更好的拥抱服务网格。详细的新版本预览内容如下:

2.2.10-RC1 是在 Spring Cloud Hoxton.SR12、Spring Cloud 2.3.12.RELEASE 的基础上,支持 Istio 以及 OpenSergo 控制面下发的服务治理规则,对 Spring Cloud 生态中的 Ribbon 负载均衡器以及 Spring MVC, Spring WebFlux 的各种拦截器做了增强,实现了服务治理的部分能力,属于一个重大特性发布的新版本 [ 1]

该版本主要支持了标签路由与鉴权这两种服务治理的能力,并且支持对接多种控制平面的实现,除了目前服务网格的事实标准 Istio,新版本也支持社区最新推出的 OpenSergo 控制平面以及服务治理生态,详细的能力如下所示:

流量路由

我们可以基于流量路由标准来实现各种业务场景,如标签路由、金丝雀发布、同机房优先路由等。

  • 标签路由

标签路由是按照标签为维度对目标负载进行划分,符合条件的流量匹配至对应的目标,从而实现标签路由的能力。当然基于标签路由的能力,赋予标签各种含义我们就可以实现各种流量路由的场景化能力。

  • 金丝雀发布

金丝雀发布是一种降低在生产中引入新软件版本的风险的技术,方法是在将更改推广到整个基础架构并使其可供所有人使用之前,缓慢地将更改推广到一小部分用户。金丝雀发布是一种在黑与白之间,能够平滑过渡的一种发布方式。让一部分用户继续用旧版本,一部分用户开始用新版本,如果用户对新版本没有什么反对意见,那么逐步扩大范围,把所有用户都迁移到新版本上面来。一直都有听说,安全生产三板斧的概念:可灰度、可观测、可回滚。那么灰度发布能力就是帮助企业软件做到快速迭代验证的必备能力。在 K8s 中金丝雀发布的最佳实践如下:第一步:新建灰度 Deployment,部署新版本的镜像,打上新版本的标签。第二步:配置针对新版本的标签路由规则。第三步:验证成功,扩大灰度比例。第四步:若验证成功,将稳定版本的应用更新成最新镜像;若验证失败,把灰度的 Deployment 副本数调整到 0 或删除该 Deployment。

  • 全链路灰度

当企业的发展,微服务的数量会逐渐增多。在有一定规模的一定数量的微服务情况下,一次发版可能涉及到的服务数量会比较多,微服务链路也相当较长。全链路灰度可以保证特定的灰度流量可以路由到所有涉及到的灰度版本中。

  • 同可用区优先路由

当企业的对稳定性的要求变高时,企业的应用会选择部署在多个可用区中提高应用的可用性,避免某个可用区出现问题后导致影响应用的可用性。当应用在不同的可用区部署时,应用间跨可用区调用可能会被因为远距离调用造成的网络延迟影响,同可用区优先路由会让我们的 Consumer 应用优先调用当前可用区内的 Provider 应用,可以很好地减少这种远距离调用造成的影响,同时当某个可用区出现问题后,我们只需在流量入口处将当前可用区的流量隔离掉,其他可用区的流量不会访问至当前可用区的节点,可以很好地控制某个可用区出现问题后的影响面。

服务鉴权

正常生产场景,微服务应用都具有安全要求,不会让任意的服务都可直接调用。因此需要对调用该应用的上游应用进行服务鉴权,保证应用自身的安全。配置服务鉴权规则后,应用间合法的调用关系如下图所示:

在这里插入图片描述

设置所有 Path 的鉴权可以对 Provider 的所有 Path 设置鉴权规则,例如 Provider 所有 Path 的鉴权规则设置为拒绝 Consumer 1调用(黑名单),则允许 Consumer 2、3调用(白名单)。设置指定 Path 的鉴权在设置所有 Path 的鉴权基础上,还可以设置 Consumer 指定 Path 的鉴权规则,例如按所有 Path 的鉴权方式,Consumer 2、3可以访问 Provider 的所有Path,但 Provider 的 Path2 涉及一些核心业务或数据,不希望 Consumer 2 调用,可以将 Path 2 对 Consumer 2 的鉴权方式设置为黑名单(拒绝调用),则 Consumer 2 只能访问 Provider 的 Path 1 和 Path 3。

通过 OpenSergo 探索治理能力的标准化

在这里插入图片描述

OpenSergo 是开放通用的,覆盖微服务及上下游关联组件的微服务治理项目,是阿里巴巴微服务治理的最佳实践。OpenSergo 从微服务的角度出发,涵盖流量治理、服务容错、服务元信息治理、安全治理等关键治理领域,提供一系列的治理能力与标准、生态适配与最佳实践,支持 Java, Go, Rust 等多语言生态。

OpenSergo 控制平面(Control Plane)作为 OpenSergo CRD 的统一管控组件,承载服务治理配置转换与下发的职责。

  1. 安装 K8s 环境,请参考 K8s 的**安装工具 [ 2] **小节
  2. 在 K8s 上安装并启用 OpenSergo Control Plane,请参考 OpenSergo 官方提供的 OpenSergo 控制面安装文档 [ 3]

在这里插入图片描述

  1. 通过 OpenSergo 控制面也定义了特定的**流量路由规则 TrafficRouter [ 4] **。TrafficRouter 将特定特征的流量映射至特定特征所对应的工作负载上,社区目前的设计TrafficRouter主要是基于 **Istio VirtualService [ 5] **进行补充与扩展。

如下是一个 OpenSergo 控制面对应的流量路由规则

kubectl apply -f - << EOF
apiVersion: traffic.opensergo.io/v1alpha1
kind: TrafficRouter
metadata:
  name: service-provider
  namespace: default
  labels:
    app: service-provider
spec:
  hosts:
    - service-provider
  http:
    - match:
        - headers:
            tag:
              exact: v2
      route:
        - destination:
            host: service-provider
            subset: v2
            fallback:
              host: service-provider
              subset: v1
    - route:
        - destination:
            host: service-provider
            subset: v1
EOF

这条 TrafficRouter 指定了一条最简单的流量路由规则,将请求头 tag 为 v2 的 HTTP 请求路由到 v 2版本,其余的流量都路由到 v1 版本。如果 v2 版本没有对应的节点,则将流量 fallback 至 v1 版本。上述详细示例代码可以在社区 Github 上**示例代码 [ 6] **中获取。

OpenSergo 总结与展望

在 Java 生态中,OpenSergo 紧接着会支持 Apache Dubbo 的流量路由与全链路灰度场景,同时 Sentinel2 会做一个能力的升级,能力实现从流量防护场景升级至支持微服务治理场景。在多语言生态中,OpenSergo 后续会探索 Dubbo、Kratos、CloudWego 以及 Mesh 等更多场景的治理能力支持与覆盖,与企业与社区共建微服务治理的最佳实践。

在这里插入图片描述

OpenSergo 社区现在处于高速发展阶段,从微服务治理标准定义,到 Control Plane 的实现,再到 Java/Go/C++/Rust 等多语言 SDK 与治理功能的实现,再到各个微服务生态的整合与落地、最佳实践,都还有大量的演进工作,欢迎社区一起参与标准完善与代码贡献。

在这里插入图片描述

OpenSergo 开源贡献小组正在火热招募贡献者。如果您有时间,有热情,有意愿,欢迎联系社区加入开源贡献小组,一起共同完善 OpenSergo 和 Sentinel,一起主导微服务治理技术与标准演进。Now let’s start hacking!

相关链接

[1] 新版本

https://github.com/alibaba/spring-cloud-alibaba/releases

[2] 安装工具

https://kubernetes.io/zh-cn/docs/tasks/tools/

[3] OpenSergo 控制面安装文档

https://opensergo.io/zh-cn/docs/quick-start/opensergo-control-plane/

[4] 流量路由规则 TrafficRouter

https://github.com/opensergo/opensergo-specification/blob/main/specification/zh-Hans/traffic-routing.md

[5] Istio VirtualService

https://istio.io/latest/docs/reference/config/networking/virtual-service/

[6] 示例代码

https://github.com/alibaba/spring-cloud-alibaba/tree/2.2.x/spring-cloud-alibaba-examples/governance-example/label-routing-example

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/333756.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

IDEA与eclipse桌面配置基础(笔记)

在eclipse中配置jdk Window–>Preferences–>java–>installed JREs–>add–>Standard VM–>选择jdk安装路径就好了 设置字符集编码为utf-8&#xff0c;防止中文乱码 设置字符集编码为UTF-8&#xff1a;Window–>Preferences–>General–>Workspace…

第四次工业革命新十年:看跨越智能化鸿沟的联想范式

十年前&#xff0c;GE推出全球第一个工业互联网平台Predix&#xff1b;同年&#xff0c;在2013汉诺威工业博览会上&#xff0c;德国正式推出工业4.0概念。由此&#xff0c;全球开启了以工业4.0和工业互联网为核心的第四次工业革命浪潮&#xff0c;智能技术成为了第四次工业革命…

4N25光耦合器:简单的应用电路

4N25光耦合器&#xff1a;简单的应用电路 介绍 4N25是一款6引脚光电晶体管耦合器。本文根据其传动特性介绍了 4N25 的非线性和线性应用。 4N25概述 光电耦合器4N25的内部电路结构如图1所示。 图1.4N25内部电路结构 该芯片为双列直插式器件&#xff0c;外引线为6根&#xff0…

Dart语法学习-基础-类

Classes Using constructors 使用构造函数创建对象。 构造函数名称可以是 ClassName 或 ClassName.identifier。 例如&#xff0c;以下代码使用 Point() 和 Point.fromJson() 构造函数创建 Point 对象&#xff1a; class Point {var x;var y;Point(int this.x, int this.y);…

Java --- Integer.parseInt()

parseInt() 方法是java.lang 包下Integer 类的一个方法。 Java Integer parseInt() 方法共有三种不同类型&#xff0c;可以根据其参数进行区分。 用法: 以下是 parseInt() 方法的声明&#xff1a; public static int parseInt (String s) public static int parseInt (Strin…

捐赠物品管理系统-php mysql

目 录 第一章 引言 1 1.1研究背景 1 1.2研究现状 1 1.3 系统相关技术与环境简介 1 1.3.1 PHP 1 1.3.2 Apache 2 1.3.3 MySQL数据库 2 1.3.4 运行环境 Windows 3 1.3.5 appserv 3 1.3.6 Dreamweave8 3 1.3.7 EditPlus 4 第二章 需求分析…

前端必备开发编译器详解

一、前言 前端开发编译器有很多&#xff0c;例如&#xff1a;WebStorm、VS Code、HBuilder X、Sublime Text等等。在这里就不一一介绍了&#xff0c;这里主要讲解VS Code和HBuilder X 编译器。 二、VS Code Visual Studio Code (简称 VS Code) 是一款免费开源的现代化轻量级…

论文阅读:Tube Convolutional Neural Network (T-CNN) for Action Detection in Videos

Tube Convolutional Neural Network (T-CNN) for Action Detection in Videos 文章目录Tube Convolutional Neural Network (T-CNN) for Action Detection in Videos摘要及贡献相关工作Generalizing R-CNN from 2D to 3D框架结构Tube Proposal Network&#xff08;TPN&#xff…

leetcode刷题之背包问题(01背包)

01 背包 概念&#xff1a;有n件物品和一个最多能背重量为w 的背包。第i件物品的重量是weight[i]weight[i]weight[i]&#xff0c;得到的价值是value[i]value[i]value[i]。每件物品只能用一次&#xff0c;求解将哪些物品装入背包里物品价值总和最大。 方法1&#xff1a;暴力回溯…

综合办公系统(OA+HR+CRM)

综合办公管理系统是集OA办公系统、HR人力资源管理系统和CRM客户关系管理系统于一体的综合系统。 其架构为&#xff1a; 功能介绍 一、OA办公系统 OA办公系统主要包括个人办公、会议室管理、车辆管理、新闻公告、资产管理和文档管理模块 &#xff08;1&#xff09;个人办公 内部…

6年软件测试经历:成长、迷茫、奋斗

前言 测试工作6年&#xff0c;经历过不同产品、共事过不同专业背景、能力的同事&#xff0c;踩过测试各种坑、遇到过各种bug。测试职场生涯积极努力上进业务和技术能力快速进步过、也有努力付出却一无所得过、有对测试生涯前景充满希望认为一片朝气蓬勃过、也有对中年危机思考不…

【笔记】移动端自动化:adb调试工具+appium+UIAutomatorViewer

学习源&#xff1a; https://www.bilibili.com/video/BV11p4y197HQ https://blog.csdn.net/weixin_47498728/category_11818905.html 一、移动端测试环境搭建 学习目标 1.能够搭建java 环境 2.能够搭建android 环境 &#xff08;一&#xff09;整体思路 我们的目标是Andr…

小红书情人节大赏!热门话题各出奇招,看看哪个品牌打动了你?

情人节热度狂飙&#xff0c;实时热度值破万 以爱之名&#xff0c;传递爱意。每年情人节向来是不容错过的热门话题。我们发现&#xff0c;临近情人节&#xff0c;小红书平台的相关内容热度飙升。据千瓜数据关键词热度查询&#xff0c;2月初“情人节”热搜词热度值就已破万。 截止…

1.ORB-SLAM2中的多线程调度解析

目录 0.先修知识 1.ORB - SLAM2中的线程 2.ORBSLAM2中的互斥锁示例 0.先修知识 需要了解C中开辟多线程的方式&#xff0c;了解C中不同锁的使用方法 学习C&#xff1a;C进阶&#xff08;五&#xff09;多线程编程原理及多线程编程方法https://blog.csdn.net/qq_41694024/artic…

Java 网络编程详解

1、什么是网络编程 在网络通信协议下&#xff0c;不同计算机上运行的程序&#xff0c;可以进行数据传输。 应用场景&#xff1a;     1、即时通信 2、网游对战 3、邮件等等 Java中可以使用java.net包下的技术轻松开发出常见的网络应用程序 2、网络编程三要素 2.1 IP地址 要…

HCNP路由交换学习指南丨学习笔记丨07.BGP

07.BGP1. BGP 的基本概念1.1 BGP 对等体关系类型1.2 IBGP 水平分割原则1. BGP 的基本概念 关于 自治系统&#xff08;Autonomous System&#xff0c;AS&#xff09; 的传统定义&#xff1a;由一个单一的机构或组织所管理的一系列 IP 网络及其设备所构成的集合。 自治系统的简单…

jsp羽毛球场馆管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 jsp 羽毛球场馆管理系统 是一套完善的web设计系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为 TOMCAT7.0,Myeclipse8.5开发&#xff0c;数据库为Mysql&#xff0c;…

通达信MACD面积背离指标公式,思路来自于缠论背驰

MACD面积背离指标公式的思路来自于缠论的MACD面积背驰&#xff0c;但是背驰的定义有一些限制条件&#xff0c;编写指标不一定能满足&#xff0c;这里就不纠结了&#xff0c;编写的指标称为MACD面积背离。另外编写这个指标公式需要对缠论有一些了解&#xff0c;如果没有相关基础…

数据结构笔记堆

1.堆的定义//堆是一颗完全二叉树&#xff0c;堆一般由优先队列来实现堆分为两种:1.大顶堆中父亲结点的值大于或者等于孩子结点的值&#xff0c;以它为根结点的子树&#xff0c;它是最大值(顶点是最大值&#xff0c;顶点指的是树的根结点或者子树的根结点)2.小顶堆的父亲结点的值…

详解 matplotlib.pyplot ,Python 初学者真能看懂

Matplotlib 是一个 Python 中的 2D 绘图库&#xff0c; pyplot 模块是一个方便使用 Matplotlib 的接口。 下面是 pyplot 模块中的五个重要的知识点&#xff1a; 【创建图形】&#xff1a; pyplot 模块提供了许多简单易用的函数来创建图形&#xff0c;如 plot、scatter、bar、h…