热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

SpringCloudforAlibaba之Sentinel集成(4)

一、Sentinel相关   Sentinel 是什么随着微服务的流行,服务和服务之间的稳定性变得越来越重要。   Sentinel是面向分布式服务架构的轻量级流量控制产品,以资源

一、 Sentinel 相关  

 Sentinel 是什么

  随着微服务的流行,服务和服务之间的稳定性变得越来越重要。

      Sentinel 是面向分布式服务架构的轻量级流量控制产品,以资源为维度,以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度来帮助您保护服务的稳定性。

  Sentinel 与Hystrix 对比

     详细的对比,可以看这里 (Sentinel 与 Hystrix 的对比)https://yq.aliyun.com/articles/623424 ,

    总结一句话:Sentinel 更轻量,性能更强,适用场景、框架更多,更灵活!

 Sentinel 的源码与 原理解读

     可以看看 简书(六道木)的文章: https://www.jianshu.com/nb/34444279 

     理解了 Sentinel 的相关概念,node、调用链,降级等源码,大部分还是比较容易懂的。 带预热功能的滑动窗口代码,本人惭愧,有点不是太明白。

   


二、 Sentinel 控制台启动

 下面,我们开始在原有的工程代码上面,接入Sentinel 控制功能。

  1.  下载 Sentinel dashboard 控制台。

     直接在github 上的Sentinel开源项目 的release 页面 https://github.com/alibaba/Sentinel/releases,下载jar包sentinel-dashboard-1.6.3.jar 

    下载后,进入 jar的目录页面,控制台输入: java -Dserver.port=7070 -Dcsp.sentinel.dashboard.server=localhost:7070 -Dproject.name=sentinel-dashboard -jar sentinel-dashboard-1.6.3.jar  启动

  dashboard 工程,其实内嵌了Sentinel client组件,会定期像控制台发送心跳信息,除了配置控制台的web端口,还有配置控制台的相关信息  

参数说明:
server.port=7070 ## 控制台web端口
csp.sentinel.dashboard.server=localhost:7070 ##控制台访问url
project.name=sentinel-dashboard ##控制台项目名称

   2. 启动后页面

     启动后,在浏览器输入: http://127.0.0.1:7070 ,默认用户名、密码:sentinel / sentinel  可以进入页面,显示如下:

                       

   可以点击左边相关菜单,查看相关页面进行体验。


三、 项目接入Sentinel组件

   1. 简单接入Sentinel

      简单接入Sentinel ,以dubbo为例, 需要引入 sentinel-core、 sentinel-apache-dubbo-adapter(包含了core包)、sentinel-transport-simple-http,

     实际引入包如下:

    


com.alibaba.csp
sentinel-transport-simple-http
${sentinel.version}


com.alibaba.csp
sentinel-apache-dubbo-adapter
${sentinel.version}

sentinel-transport-simple-http 包是客户端向 dashboard 发送心跳、本项目流量统计信息
sentinel-apache-dubbo-adapter 包是对dubbo的适配 ,provider端 主要代码为:SentinelDubboProviderFilter ,在服务提供端的filter, 对入口流量进行控制

2. sentinel 配置

  sentinel 启动的时候,需要配置 几个基础信息:

       1.  project.name : 项目名称

      2. csp.sentinel.api.port: 本地端口,用于接收 dashboard 请求 ,

      3. csp.sentinel.dashboard.server :  控制台dashboard,用于对控制台发送心跳、统计信息

   配置方式:

        1. 可以在启动的时候通过 JVM -D 参数指定, 在IDE 里面,可以配置

        2.  main启动的时候,通过System.setProperty 设置。效果等同1,比较容易复制粘贴。

       3.  除 project.name 以及日志的配置项(如 csp.sentinel.log.dir)之外,其余参数还可通过 properties 文件指定,路径为 ${user_home}/logs/csp/${project.name}.properties

       4. 接入alicloud-sentinel-starter 组件,就可以配置在配置文件了,(实际效果也是读取配置,进行第2步,这个后续讲) 

    第1种配置太复杂,不利于IDE里面批量启动, 第3种,配置分几个地方,改起来不方便 。 目前我在 IDE里面调试,启动应用,用的第2种。

   代码如下:

@EnableDiscoveryClient
@SpringBootApplication
public class ProductDemoApplication {
static{
initSentinelProperty();
}
private static void initSentinelProperty(){ //启动设置相关配置
System.setProperty("java.net.preferIPv4Stack","true"); //启动错误时,官方推荐只用ipv4 的ip
System.setProperty("project.name","product-demo");
System.setProperty("csp.sentinel.api.port","7081");
System.setProperty("csp.sentinel.api.port","127.0.0.1:7070");
}
public static void main(String[] args) {
SpringApplication.run(ProductDemoApplication.class, args);
}
} 

配置后,启动应用。 启动后,一定要对应用访问、调用相关资源,否则sentinel不会启动心跳逻辑,dashboard不会显示。

 

3. 结合dashboard 进行限流示例

  1. 启动product-demo,order-demo ,访问order-demo,底层调用product-demo 的服务,调用几次后,会再dashboard看到相关数据。

 

  

 访问资源后,在Sentinel 控制台,出现了相关资源、实时监控数据信息。

  2. 对资源 /test/testProductByName/哈哈   设置限流,QPS为2 ,其他拒绝,请求多次后,浏览器显示:  Blocked by Sentinel (flow limiting)

规则设置:

             

 

 在 Sentinel 里面显示图表如下:

 

 4. 总结

   Sentinel 基本使用非常简单,AliCloud 对很多框架做了适配,简单引入相应的adapter即可。具体的使用,可以参考 sentinel的wikii :https://github.com/alibaba/Sentinel/wiki/%E4%B8%BB%E9%A1%B5 

    然而,在生产中使用,还需要进行相应的其他配置与改造,这个后续学习。



推荐阅读
  • Maven Web项目创建时JSP文件常见错误及解决方案
    Maven Web项目创建时JSP文件常见错误及解决方案 ... [详细]
  • 优化后的标题:深入探讨网关安全:将微服务升级为OAuth2资源服务器的最佳实践
    本文深入探讨了如何将微服务升级为OAuth2资源服务器,以订单服务为例,详细介绍了在POM文件中添加 `spring-cloud-starter-oauth2` 依赖,并配置Spring Security以实现对微服务的保护。通过这一过程,不仅增强了系统的安全性,还提高了资源访问的可控性和灵活性。文章还讨论了最佳实践,包括如何配置OAuth2客户端和资源服务器,以及如何处理常见的安全问题和错误。 ... [详细]
  • 在日常的项目开发中,测试环境和生产环境通常采用HTTP协议访问服务。然而,从浏览器的角度来看,这种访问方式会被标记为不安全。为了提升安全性,当前大多数生产环境已经转向了HTTPS协议。本文将详细介绍如何在Spring Boot应用中配置SSL证书,以实现HTTPS安全访问。通过这一过程,不仅可以增强数据传输的安全性,还能提高用户对系统的信任度。 ... [详细]
  • 在对WordPress Duplicator插件0.4.4版本的安全评估中,发现其存在跨站脚本(XSS)攻击漏洞。此漏洞可能被利用进行恶意操作,建议用户及时更新至最新版本以确保系统安全。测试方法仅限于安全研究和教学目的,使用时需自行承担风险。漏洞编号:HTB23162。 ... [详细]
  • Web开发框架概览:Java与JavaScript技术及框架综述
    Web开发涉及服务器端和客户端的协同工作。在服务器端,Java是一种优秀的编程语言,适用于构建各种功能模块,如通过Servlet实现特定服务。客户端则主要依赖HTML进行内容展示,同时借助JavaScript增强交互性和动态效果。此外,现代Web开发还广泛使用各种框架和库,如Spring Boot、React和Vue.js,以提高开发效率和应用性能。 ... [详细]
  • 在Java Web服务开发中,Apache CXF 和 Axis2 是两个广泛使用的框架。CXF 由于其与 Spring 框架的无缝集成能力,以及更简便的部署方式,成为了许多开发者的首选。本文将详细介绍如何使用 CXF 框架进行 Web 服务的开发,包括环境搭建、服务发布和客户端调用等关键步骤,为开发者提供一个全面的实践指南。 ... [详细]
  • 提升Android开发效率:Clean Code的最佳实践与应用
    在Android开发中,提高代码质量和开发效率是至关重要的。本文介绍了如何通过Clean Code的最佳实践来优化Android应用的开发流程。以SQLite数据库操作为例,详细探讨了如何编写高效、可维护的SQL查询语句,并将其结果封装为Java对象。通过遵循这些最佳实践,开发者可以显著提升代码的可读性和可维护性,从而加快开发速度并减少错误。 ... [详细]
  • 本文详细介绍了如何在Java Web服务器上部署音视频服务,并提供了完整的验证流程。以AnyChat为例,这是一款跨平台的音视频解决方案,广泛应用于需要实时音视频交互的项目中。通过具体的部署步骤和测试方法,确保了音视频服务的稳定性和可靠性。 ... [详细]
  • Spring框架的核心组件与架构解析 ... [详细]
  • 为了确保iOS应用能够安全地访问网站数据,本文介绍了如何在Nginx服务器上轻松配置CertBot以实现SSL证书的自动化管理。通过这一过程,可以确保应用始终使用HTTPS协议,从而提升数据传输的安全性和可靠性。文章详细阐述了配置步骤和常见问题的解决方法,帮助读者快速上手并成功部署SSL证书。 ... [详细]
  • 在List和Set集合中存储Object类型的数据元素 ... [详细]
  • 2021年Java开发实战:当前时间戳转换方法详解与实用网址推荐
    在当前的就业市场中,金九银十过后,金三银四也即将到来。本文将分享一些实用的面试技巧和题目,特别是针对正在寻找新工作机会的Java开发者。作者在准备字节跳动的面试过程中积累了丰富的经验,并成功获得了Offer。文中详细介绍了如何将当前时间戳进行转换的方法,并推荐了一些实用的在线资源,帮助读者更好地应对技术面试。 ... [详细]
  • C++ 开发实战:实用技巧与经验分享
    C++ 开发实战:实用技巧与经验分享 ... [详细]
  • Presto:高效即席查询引擎的深度解析与应用
    本文深入解析了Presto这一高效的即席查询引擎,详细探讨了其架构设计及其优缺点。Presto通过内存到内存的数据处理方式,显著提升了查询性能,相比传统的MapReduce查询,不仅减少了数据传输的延迟,还提高了查询的准确性和效率。然而,Presto在大规模数据处理和容错机制方面仍存在一定的局限性。本文还介绍了Presto在实际应用中的多种场景,展示了其在大数据分析领域的强大潜力。 ... [详细]
  • REST与RPC:选择哪种API架构风格?
    在探讨REST与RPC这两种API架构风格的选择时,本文首先介绍了RPC(远程过程调用)的概念。RPC允许客户端通过网络调用远程服务器上的函数或方法,从而实现分布式系统的功能调用。相比之下,REST(Representational State Transfer)则基于资源的交互模型,通过HTTP协议进行数据传输和操作。本文将详细分析两种架构风格的特点、适用场景及其优缺点,帮助开发者根据具体需求做出合适的选择。 ... [详细]
author-avatar
日月阁文玩都汇
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有