Sentinel

一文探讨 RPC 框架中的服务线程隔离

北城以北 提交于 2020-10-29 08:54:23
Kirito 推荐语:最近秋招开始了,很多学生开始准备起了秋招,有很多人想知道进一些有名的互联网公司实习有什么要求,正好最近跟一位阿里春招的实习小伙子聊了一些 RPC 相关的知识点,于是我把这篇他的思考转发过来,给大家参考下,我觉得有这样的实力,进大厂实习应该是没有问题的。以下是原文: 自从春招实习之后,眼界真的就一下子开阔起来了,也感觉到了以前的自己好菜啊(虽然现在也是,笑~)。果然学习之路不能停! 微服务如今应当是一个优秀的程序员必须学习的一种架构思想,而RPC框架作为微服务的核心,不说读一遍源码吧,起码它的实现原理还是应该知道的。 然而目前的RPC服务框架,大多存在一个问题,就是当服务提供端Provider应用中,有的服务流量大,耗时长,导致线程池资源被这些服务占尽,从而影响同一应用中的其他服务正常提供。为此,这次博文主要介绍一下我对于这方面的思考。 前言 在进入正文之前,可以先看一下阿里中间件岛风大佬的这篇博文( 传送门 ),这篇博文复现了Dubbo应用中,线程池耗尽的场景。这其实在线上是十分普遍,解决方法无非是根据业务调整参数,或者引入其他的限流、资源隔离框架,例如Hystrix、Sentinel等,使得资源间互不干扰。其实本身Dubbo也可以对不同的服务配置不同的业务线程池(通过配置protocol)从而实现服务的资源隔离,但是这种方式的弊端在于,一旦服务增多

大家久等了,改造版阿里巴巴 sentinel 控制台终于开源了

妖精的绣舞 提交于 2020-10-29 07:45:42
前言 最近几天,好几个小伙伴在后台询问,改造后的 sentinel-dashboard 什么时候开源。讲真,不是不想给大家放出来,是因为一些地方还没有完善好,怕误导了大家,在经过了一个星期业余时间的努力,终于把基础版本搞定了。小伙伴们终于可以进行拉取测试了。 历程 首先回顾一下改造之路: SpringBoot 2.0 + Sentinel 动态限流实战 SpringBoot 2.0 + Nacos + Sentinel 流控规则集中存储 SpringBoot 2.0 + InfluxDB+ Sentinel 实时监控数据存储 阿里巴巴 Sentinel + InfluxDB + Chronograf 实现监控大屏 最终架构 持续学习 sentinel 的学习已经告一段落,后面会持续学 InfluxDB ,它是目前比较流行的时间序列数据库。 那么什么是时间序列数据库?最简单的定义就是数据格式里包含Timestamp字段的数据,比如某一时间环境的温度、湿度,以及机器的CPU的使用率等等。 随着物联网的发展,作为一名程序员,时序数据库是必不可少的一项必备技能。所以,在开源 sentinel-dashboard 项目下,会持续提交一些 InfluxDB 的学习笔记以及使用场景,有兴趣的小伙伴可以一起加入进来。 源码 https://gitee.com/52itstyle/sentinel

Redis ==> 集群的三种模式

假装没事ソ 提交于 2020-10-29 07:16:50
一、主从同步/复制   通过持久化功能,Redis保证了即使在服务器重启的情况下也不会丢失(或少量丢失)数据,因为持久化会把内存中数据保存到硬盘上,重启会从硬盘上加载数据。 但是由于数据是存储在一台服务器上的,如果这台服务器出现硬盘故障等问题,也会导致数据丢失。   为了避免单点故障,通常的做法是将数据库复制多个副本以部署在不同的服务器上,这样即使有一台服务器出现故障,其他服务器依然可以继续提供服务。为此, Redis 提供了复制(replication)功能,可以实现当一台数据库中的数据更新后,自动将更新的数据同步到其他数据库上 。   在复制的概念中,数据库分为两类,一类是主数据库(master),另一类是从数据库(slave)。主数据库可以进行读写操作,当写操作导致数据变化时会自动将数据同步给从数据库。而 从数据库一般是只读的,并接受主数据库同步过来的数据 。一个主数据库可以拥有多个从数据库,而一个从数据库只能拥有一个主数据库。 主从数据库的配置:   主数据库不用配置,从数据库的配置文件(redis.conf)中可以加载主数据库的信息,也可以在启动时,使用 redis-server --port 6380 --slaveof 127.0.0.1 6379 命令指明主数据库的 IP 和端口。从数据库一般是只读,可以改为可写,但写入的数据很容易被主同步没,所以还是只读就可以

redis集群哪三种?

无人久伴 提交于 2020-10-29 06:47:42
redis的三种集群方式 redis有三种集群方式:主从复制,哨兵模式和集群。 1.主从复制 主从复制原理: 从服务器连接主服务器,发送SYNC命令; 主服务器接收到SYNC命名后,开始执行BGSAVE命令生成RDB文件并使用缓冲区记录此后执行的所有写命令; 主服务器BGSAVE执行完后,向所有从服务器发送快照文件,并在发送期间继续记录被执行的写命令; 从服务器收到快照文件后丢弃所有旧数据,载入收到的快照; 主服务器快照发送完毕后开始向从服务器发送缓冲区中的写命令; 从服务器完成对快照的载入,开始接收命令请求,并执行来自主服务器缓冲区的写命令;( 从服务器初始化完成 ) 主服务器每执行一个写命令就会向从服务器发送相同的写命令,从服务器接收并执行收到的写命令( 从服务器初始化完成后的操作 ) 主从复制优缺点: 优点: 支持主从复制,主机会自动将数据同步到从机,可以进行读写分离 为了分载Master的读操作压力,Slave服务器可以为客户端提供只读操作的服务,写服务仍然必须由Master来完成 Slave同样可以接受其它Slaves的连接和同步请求,这样可以有效的分载Master的同步压力。 Master Server是以非阻塞的方式为Slaves提供服务。所以在Master-Slave同步期间,客户端仍然可以提交查询或修改请求。 Slave

【拉勾回顾】Redis缓存雪崩面试题

爱⌒轻易说出口 提交于 2020-10-29 06:02:09
文章内容输出来源:拉勾教育Java高薪训练营 写在前沿 工作几年,一直都没有去体系化的学习,很多东西没有复杂的工作场景经验,最后还是决定报了拉勾的高薪训练营,在这里也是实实在在的学习到了很多,学完掌握程度也比之前深了很多,而且还有定期的内推,多了更多的机会,真的对我有了很大的帮助提升。特别感谢温柔可爱的小竹子班主任和认真负责帅气的老可乐导师给予我的帮助! 缓存雪崩 缓存层承载着大量的请求,有效保护了存储层。但是如果由于缓存大量失效或者缓存整体不能提供服务,导致大量的请求到达存储层,会使存储层负载增加,这就是缓存雪崩的场景。 解决缓存雪崩 1.保持缓存层的高可用性 使用Redis 哨兵模式或者Redis 集群部署方式,即便个别Redis 节点下线,整个缓存层依然可以使用。除此之外,还可以在多个机房部署 Redis,这样即便是机房死机,依然可以实现缓存层的高可用。 2.限流降级组件 无论是缓存层还是存储层都会有出错的概率,可以将它们视为资源。作为并发量较大的分布式系统,假如有一个资源不可用,可能会造成所有线程在获取这个资源时异常,造成整个系统不可用。降级在高并发系统中是非常正常的,比如推荐服务中,如果个性化推荐服务不可用,可以降级补充热点数据,不至于造成整个推荐服务不可用。常见的限流降级组件如 Hystrix、Sentinel 等。 3.缓存不过期 Redis 中保存的 key

GitHub标星1w+超牛的微服务项目,开发脚手架

感情迁移 提交于 2020-10-28 16:47:11
Cloud-Platform 是国内首个基于Spring Cloud微服务化开发平台,具有统一授权、认证后台管理系统,其中包含具备用户管理、资源权限管理、网关API 管理等多个模块,支持多业务系统并行开发,可以作为后端服务的开发脚手架。代码简洁,架构清晰,适合学习和直接项目中使用。核心技术采用Spring Boot 2.1.2以及Spring Cloud (Greenwich.RELEASE) 相关核心组件,采用Nacos注册和配置中心,集成流量卫兵Sentinel,前端采用vue-element-admin组件,Elastic Search自行集成。 码云开源地址: 私信我【666】获取码云开源地址 github开源地址: 私信我【666】获取开源地址 模块说明 架构摘要 中台化前端 集成d2admin中台化前端,优化前端架构和功能布局,支撑中台服务化的应用开发。 JWT鉴权 通过JWT的方式来进行用户认证和信息传递,保证服务之间用户无状态的传递。 监控 利用Spring Boot Admin 来监控各个独立Service的运行状态;利用Hystrix Dashboard来实时查看接口的运行状态和调用频率等。 负载均衡 将服务保留的rest进行代理和网关控制,除了平常经常使用的node.js、nginx外,Spring Cloud系列的zuul和ribbon

Sentinel: 使用注解限流

六月ゝ 毕业季﹏ 提交于 2020-10-28 12:00:39
在前面我们对Sentinel做了一个详细的介绍,可以手动的通过Sentinel提供的SphU类来保护资源。这种做法不好的地方在于每个需要限制的地方都得写代码,从 0.1.1 版本开始,Sentinel 提供了 @SentinelResource 注解的方式,非常方便。 要使用注解来保护资源需要引入下面的Maven依赖: <dependency> <groupId>com.alibaba.csp</groupId> <artifactId>sentinel-annotation-aspectj</artifactId> <version>1.4.1</version> </dependency> 引入之后我们需要配置SentinelResourceAspect切面让其生效,因为是通过SentinelResourceAspect切面来实现的,我这边以Spring Boot中使用进行配置示列: import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import com.alibaba.csp.sentinel.annotation.aspectj.SentinelResourceAspect;

IT人的提升实操心得

对着背影说爱祢 提交于 2020-10-27 15:04:49
这里记录下第一次和大佬级别的人物对话,事先准备了一堆问题,可临了又说不出个所以然,忐忑呀,不过挑了几个重点的问题,骆总给我的回复也是一针见血,指出了我现阶段存在的种种问题,道破了困扰许久的问题,我相信我目前遇到的,存在的问题也是大多数求职进阶路上的coder们正在面临的,或者已经经历过了的,轻喷。 从事IT行业,不管是主动还是被动,大家或多或少看到了他的发展,也预料过他的前景吧,尤疫情之后,蓬勃生机常在,就20日晚蚂蚁公司整栋的狂欢,作为拼命一线的码农来说,一夜之间的百万财富,我预想得到他们的欢呼是有多么的歇斯底里,歌声是有多么的嘹亮,这么看来从事这个行业真的是西天取经的路。 但是不少人会说我卖职业诱惑,我想卖职业诱惑的事交给培训机构就行了,我不卖诱惑,也不贩卖焦虑。 提起职业焦虑,35岁的梦,IT人的痛,从前段时间的996.ICU到如今的软件园跳楼事件,真的莫名觉得惋惜,5年的工作经验,忍忍总会过去的,翻越大山的人,最后被小石子绊倒了。但愿天堂没有加班!文末我会针对职业焦虑阐述下自己的一些看法。 下面是我这次对话的记录总结,提醒我自己,也鞭策我自己。 第一:如何学习?怎么学习?怎么快速突破自己? 从事这个行业,我的工作年限不长,差半年到三年了,给我的第一感触就是需要花费大量的精力学习,不停的“缝缝补补”,不间断断的磕磕绊绊,但苦于市面上可获取知识的地方太多,渠道庞繁纷杂

阿里 双11 同款,流量防卫兵 Sentinel go 源码解读

*爱你&永不变心* 提交于 2020-10-27 12:47:51
简介: 本文主要分析阿里巴巴集团开源的流量控制中间件 Sentinel,其原生支持了 Java/Go/C++ 等多种语言,本文仅仅分析其 Go 语言实现。下文如无特殊说明,sentinel 指代 Sentinel-Go。 作者 | 于雨 apache/dubbo-go 项目负责人 本文作者系 apache/dubbo-go 项目负责人,目前在 dubbogo 项目中已内置可用 sentinel-go,如果想单独使用可参考 在 dubbo-go 中使用 sentinel 一文,若有其他疑问可进 dubbogo社区【钉钉群 23331795】进行沟通。 导读 :本文主要分析阿里巴巴集团开源的流量控制中间件 Sentinel,其原生支持了 Java/Go/C++ 等多种语言,本文仅仅分析其 Go 语言实现。下文如无特殊说明,sentinel 指代 Sentinel-Go。 1 基本概念 Resource 和 Rule 1.1 Resource // ResourceType represents classification of the resources type ResourceType int32 const ( ResTypeCommon ResourceType = iota ResTypeWeb ResTypeRPC ) // TrafficType describes

阿里 双11 同款,流量防卫兵 Sentinel go 源码解读

我与影子孤独终老i 提交于 2020-10-26 11:28:01
简介: 本文主要分析阿里巴巴集团开源的流量控制中间件 Sentinel,其原生支持了 Java/Go/C++ 等多种语言,本文仅仅分析其 Go 语言实现。下文如无特殊说明,sentinel 指代 Sentinel-Go。 作者 | 于雨 apache/dubbo-go 项目负责人 本文作者系 apache/dubbo-go 项目负责人,目前在 dubbogo 项目中已内置可用 sentinel-go,如果想单独使用可参考 在 dubbo-go 中使用 sentinel 一文,若有其他疑问可进 dubbogo社区【钉钉群 23331795】进行沟通。 导读 :本文主要分析阿里巴巴集团开源的流量控制中间件 Sentinel,其原生支持了 Java/Go/C++ 等多种语言,本文仅仅分析其 Go 语言实现。下文如无特殊说明,sentinel 指代 Sentinel-Go。 1 基本概念 Resource 和 Rule 1.1 Resource // ResourceType represents classification of the resources type ResourceType int32 const ( ResTypeCommon ResourceType = iota ResTypeWeb ResTypeRPC ) // TrafficType describes