常见微服务保护技术对比

简介: 常见微服务保护技术对比Sentinel

常见微服务保护技术对比

既然上面我们分析了种种方案,那么对应这些方案又有哪些技术可以去落地呢?目前能结合SpringCloud支持微服务保护的技术一般是:Hystrix、Sentinel,在此我们横向比对下面两种常见技术:

对比指标

Sentinel

HyStrix

隔离策略

信号量隔离

线程池隔离/信号量隔离

熔断降级策略

慢调用比例/异常比例/异常数

失败比率

实时指标实现

滑动窗口

滑动窗口(基于RxJava)

规则配置

支持多种数据源

支持多种数据源

扩展性

多个扩展点

插件形式

基于注解的支持

支持

支持

限流

基于QPS、支持基于调用关系的限流

优先的支持

流量整形

支持冷启动、排队等待模式

不支持

系统自适应保护

支持

不支持

控制台

开箱即用、可配置规则、查看秒级监控、机器发现等

不完善

常见框架适配

Servlet、SpringCloud、Dubbo、gRPC等

Servlet、SpringCloud Netflix

在种种差异中,我们重点关注红色标注的部分:

隔离策略

  • 线程池隔离:同上述线程隔离案例,给不同业务分配不同线程池,这种方案可以杜绝雪崩问题;但是因为tomcat之外的线程池开销也使得系统开销增加,频繁的上下文切换将给系统性能带来额外的损失。
  • 信号量隔离:不会给业务单独创建线程池(统一使用tomcat一个容器),而是限制每个业务能使用的线程数量。统计当前业务使用的线程数,当达到指定数量后(类似计数器)触发隔离。相较于线程池隔离性差一点。

熔断降级策略

  • 慢调用比例/异常比例/异常数:统计调用中慢性能的比例、异常的比例、或异常数量均可触发熔断降级。
  • 失败比例:只能根据异常请求比例触发熔断降级策略。

限流

  • 基于QPS/调用链路:基于调用的QPS、调用链路都可以做到限流。
  • 有限的控制:没有专门的限流方案,基于线程池隔离做的,线程池有多少线程数就限制到多少。

流量整形

  • 慢调用/排队等待:避免突发流量的暴增而引起系统崩溃,而Hystrix则没有解决方案

控制台

  • Sentinel有较为完善的控制台,界面化操作实时生效,而Hystrix只能查看一下服务状态,不可动态调整。

对比可以发现Hystrix的重点在于隔离、熔断为主的容错机制,而Sentinel的侧重点在于:多样化的流量控制、熔断降级、系统保护、实时监控和控制台。同时基于HyStrix停止维护,加上Sentinel在阿里巴巴经过双十一的高峰流量验证,目前国内主流保护还是选择了后者。因为后续的章节中我们也将借助于Sentinel为大家实践微服务保护相关的知识点。

2.2 Sentinel介绍

Sentinel 是面向分布式、多语言异构化服务架构的流量治理组件,主要以流量为切入点,从流量控制、流量路由、熔断降级、系统自适应保护等多个维度来帮助用户保障微服务的稳定性。

丰富的应用场景:阿里巴巴 10 年双十一积累的丰富流量场景,包括秒杀、双十一零点持续洪峰、热点商品探测、预热、消息队列削峰填谷等多样化的场景

易于使用快速接入:简单易用,开源生态广泛,针对 Dubbo、Spring Cloud、gRPC、Zuul、Reactor、Quarkus 等框架只需要引入适配模块即可快速接入

多样化的流量控制:资源粒度、调用关系、指标类型、控制效果等多维度的流量控制

可视化的监控和规则管理:简单易用的 Sentinel 控制台

2.3 Sentinel本地安装与启动

相较于前面Nacos的下载、shell指令的启动,Sentinel为开发者提供开箱即用的jar包,您可以从 release 页面 下载最新版本的控制台 jar 包。也可以直接使用提供的:📎sentinel-dashboard-1.8.4.jar.zip

注意:启动 Sentinel 控制台需要 JDK 版本为 1.8 及以上版本;jar包需放在非中文路径下

使用指令启动:java -jar sentinel-dashboard.jar

Sentinel同时支持其余配置项来修改启动端口、用户名、密码:

配置项

默认值

说明

server.port

8080

服务端口

server.dashboard.auth.username

sentinel

默认用户名

server.dashboard.auth.password

sentinel

默认密码

如修改启动端口则可使用下述指令:

java -Dserver.port=8080 -jar sentinel-dashboard.jar

启动后访问控制台:http://localhost:8080/#/login,账户密码均为:sentinel

2.4 服务整合Sentinel

1 引入Sentinel依赖

在order-service服务中新增sentinel的pom依赖,如下:

<!--引入Sentinel依赖-->
<dependency>
  <groupId>com.alibaba.cloud</groupId>
  <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>

2 配置控制台

spring: 
  cloud:
    sentinel:
      transport:
        dashboard: localhost:8080

3 访问验证

注意:服务启动依赖Nacos,需先将Nacos启动:startup.cmd -m standalone

访问order-service服务任意接口:http://localhost:8088/order/101,去控制台实时监控即可查看如下:

目录
相关文章
|
2天前
|
监控 负载均衡 安全
构建高效微服务架构的五大核心技术实践
【4月更文挑战第2天】 在当今软件开发领域,微服务架构已成为构建复杂系统的首选模式。它通过将大型单体应用拆分成一系列小型、自治的服务来提高可维护性和扩展性。本文深入探讨了构建高效微服务架构的五大核心技术实践,包括服务拆分策略、API网关设计、服务发现与注册、熔断机制以及分布式追踪与监控。文章不仅分享了实践中的经验教训,还提供了实施这些技术时的具体建议和最佳实践。
|
2天前
|
Kubernetes 开发者 Docker
基于容器技术的微服务架构
基于容器技术的微服务架构
40 0
|
2天前
|
Java 关系型数据库 数据库
微服务设计|基于SpringCloud微服务技术的旅游信息平台的设计与实现
微服务设计|基于SpringCloud微服务技术的旅游信息平台的设计与实现
|
2天前
|
SpringCloudAlibaba Dubbo 应用服务中间件
【微服务】微服务初步认识 - 微服务技术如何学习 · 认识微服务架构
【微服务】微服务初步认识 - 微服务技术如何学习 · 认识微服务架构
12 0
|
2天前
|
负载均衡 持续交付 API
构建高效微服务架构的五大关键技术
【5月更文挑战第13天】在当前软件开发领域,微服务架构已经成为一种流行趋势。本文将探讨构建高效微服务架构的五大关键技术,包括容器化部署、服务发现与注册、API网关、负载均衡以及持续集成与持续部署。这些技术可以帮助开发团队更快速、更可靠地构建和部署微服务应用,提高系统的可扩展性和可维护性。
|
2天前
|
负载均衡 API 数据库
构建高效微服务架构的五大关键技术
【5月更文挑战第4天】 随着云计算和容器化技术的成熟,微服务架构已成为软件开发的主流模式。本文将详细探讨实现高效微服务架构的五个关键技术点:服务拆分策略、API网关设计、服务发现与注册、熔断机制以及分布式事务管理。这些技术点是确保微服务系统可扩展性、灵活性及稳定性的基石,对于后端开发者而言,掌握它们至关重要。文章将提供具体的实施建议和最佳实践,帮助读者构建和维护高性能的微服务系统。
|
2天前
|
消息中间件 监控 微服务
【专栏】随着技术发展,未来将探索服务网格、容器化和云原生技术,以提升微服务架构的效能
【4月更文挑战第27天】本文探讨了构建高效微服务架构的后端开发最佳实践。微服务以服务独立、去中心化、自治和轻量级通信为核心原则,带来可扩展性、独立性、技术灵活性和团队协作优势。实践中,要注意服务拆分粒度、选择合适的通信协议(如RESTful、RPC、消息队列)、处理数据一致性与分布式事务、实施服务治理和监控,以及确保安全性与权限控制。随着技术发展,未来将探索服务网格、容器化和云原生技术,以提升微服务架构的效能。
|
2天前
|
前端开发 JavaScript 搜索推荐
微服务项目|基于SpringCloud微服务技术的旅游信息平台的设计与实现
微服务项目|基于SpringCloud微服务技术的旅游信息平台的设计与实现
164 1
|
2天前
|
Kubernetes 负载均衡 持续交付
探索现代微服务架构下的容器化技术
【4月更文挑战第13天】 在当今软件开发领域,微服务架构和容器化技术已成为推动云原生应用发展的关键因素。本文将深入探讨微服务与容器化结合的优势、面临的挑战以及实践中的解决方案。我们将通过具体案例分析,揭示如何利用容器化技术优化微服务部署、扩展和管理,同时保证系统的高可用性和弹性。文章的目的在于为开发者和技术决策者提供一种系统化的方法来构建和维护高效的微服务环境。
|
2天前
|
消息中间件 监控 Java
微服务技术发展
微服务技术发展