文章 62
浏览 15135
Sentinel核心架构源码剖析

Sentinel核心架构源码剖析

笔记链接: https://note.youdao.com/s/ChW1Ja5q

Sentinel规则持久化源码分析

Sentinel规则持久化源码分析

该文章已经加密。

手写mini springIoc

手写mini springIoc

背景 每次在工作中使用 spring,总会被其流畅代码思路和迷人的架构模式以及设计模式吸引,也看过一阵子源码,但总觉得了解的是是而非,所以想着何不自己手写一个 springIoc 用来梳理巩固自己所学的知识,以及自我充电 Spring 核心 **控制反转 (**IoC,Inversion of Control)(本篇文章实现) 传统的 Java 开发模式中,当需要一个对象时,我们使用 new 或者通过 getInstance 等直接或者间接调用构造方法创建一个对象,而在 Spring 开发模式中,Spring 容器使用工厂模式为我们创建了所需要的对象,不需要我们自己去创建了,直接调用 Spring 提供的对象就可以了,这就是控制反转,相信我们在用 Spring 的时候,用 XML 或者注解了解过 面向切面编程(AOP)(后续实现) 在面向对象编程(OOP)中,我们将事务纵向抽成一个个的对象,而在面向切面编程中,我们将一个个的对象某些类似的方面横向抽成一个切面,对这个切面进行一些如权限控制,事务管理,日志记录等公用操作处理的过程,就是面向切面编程的思想。 面向切面编程也是 Spring ....

spring Security使用

spring Security使用

SpringSecurity SpringSecurity 是一个基于 Spring 开发的非常强大的权限验证框架,其核心功能包括: 认证 (用户登录) 授权 (此用户能够做哪些事情) 攻击防护 (防止伪造身份攻击) 我们为什么需要使用更加专业的全新验证框架,还要从 CSRF 说起。 CSRF 跨站请求伪造攻击 我们时常会在 QQ 上收到别人发送的钓鱼网站链接,只要你在上面登陆了你的 QQ 账号,那么不出意外,你的号已经在别人手中了。实际上这一类网站都属于恶意网站,专门用于盗取他人信息,执行非法操作,甚至获取他人账户中的财产,非法转账等。而这里,我们需要了解一种比较容易发生的恶意操作,从不法分子的角度去了解整个流程。 我们在 JavaWeb 阶段已经了解了 Session 和 Cookie 的机制,在一开始的时候,服务端会给浏览器一个名为 JSESSION 的 Cookie 信息作为会话的唯一凭据,只要用户携带此 Cookie 访问我们的网站,那么我们就可以认定此会话属于哪个浏览器。因此,只要此会话的用户执行了登录操作,那么就可以随意访问个人信息等内容。 比如现在,我们的服务器新增了一....

Sentinel控制台规则配置详解

Sentinel控制台规则配置详解

1. Sentinel 控制台介绍 Sentinel 提供一个轻量级的开源控制台,它提供机器发现以及健康情况管理、监控(单机和集群),规则 管理和推送的功能。 Sentinel 控制台包含如下功能: **查看机器列表以及健康情况:收集 Sentinel 客户端发送的心跳包,用于判断机器是否在线。 ** **监控 (单机和集群聚合):通过 Sentinel 客户端暴露的监控 API,定期拉取并且聚合应用监控信 息,最终可以实现秒级的实时监控。 ** **规则管理和推送:统一管理推送规则。 ** 鉴权:生产环境中鉴权非常重要。这里每个开发者需要根据自己的实际情况进行定制。 阿里云提供了 企业级的 Sentinel 控制台,应用高可用服务 AHAS ** 实时监控 监控接口的通过的 QPS 和拒绝的 QPS** ** 簇点链路 用来显示微服务的所监控的 API ** 流控规则 流量控制(flow control),其原理是监控应用流量的 QPS 或并发线程数等指标,当达到指定的阈值时对流 量进行控制,以避免被瞬时的流量高峰冲垮,从而保障应用的高可用性。 同一个资源可以创建多条限流规则。Flo....

spring SpEL 结合AOP玩出花样

spring SpEL 结合AOP玩出花样

背景 最近接到一个需求,需要收集系统产生的行为日志和用户操作行为的日志,有个详情字段,可以需要自定义扩展,按简单方式实现可以通过 AOP 注解,如果仅仅是这样实现的话,日志详情需要耦合在业务代码逻辑中,不太优雅,想着能不能直接有个表达式,通过方法参数组装,这时候想到了 SpEL 表达式机制 Spel 概述 Spring 表达式语言全称为“Spring Expression Language”,缩写为“SpEL”,类似于 Struts2x 中使用的 OGNL 表达式语言,能在运行时构建复杂表达式、存取对象图属性、对象方法调用等等,并且能与 Spring 功能完美整合,如能用来配置 Bean 定义。 一.SpEl 基础 简述: ** SpEL 是一个支持运行时查询和设置属性值、方法调用、访问数组、属性、构造器等的表达式语言。通过使用标准化语法,SpEL 集成了对象图导航、运算符重载、列表投影、选择和聚合等丰富特性。 ** 示例: 简单写个 helloWorld @Test void testHelloWorld() { ExpressionParser parser = new SpelE....

LongAdder与直接使用CAS(Compare-And-Swap)操作相比,其效率之所以较高?

LongAdder与直接使用CAS(Compare-And-Swap)操作相比,其效率之所以较高?

<span class="ne-text">LongAdder</span> 与直接使用 CAS 操作相比之所以效率较高,主要原因在于它减少了线程间对同一变量的竞争,从而减少了 CAS 操作的重试次数,提高了性能。接下来将详细解释,并尝试用文字描述来代替示例图。 CAS 操作的问题 CAS 操作是一种乐观锁,它包含三个操作数:内存位置、预期原值及新值。CAS 操作的基本步骤是这样的: 系统先检查内存位置的当前值是否与预期原值相同; 如果相同,系统会将该位置的数据更新为新值; 如果不同,操作失败,并且通常会再次尝试,直到成功为止。 在高并发环境下,若多个线程同时对同一个变量进行更新,它们会不停地执行 CAS 操作。因为这些操作都在争夺同一个变量,导致大多数线程的 CAS 操作失败,并且不得不重试,这会造成大量的 CPU 资源浪费 LongAdder 的工作原理 <span class="ne-text">LongAdder</span> 通过内部分散计数器来减小热点冲突。其基本原理如下: <span class="ne-text"&g....

SDS数据结构

SDS数据结构

前言 之前工作中学习应用 Redis,只停留再 API 应用层,知其然,不知其所然,近在用 Redis 做大量的测试应用,发现关注与性能,后面激发自己想了解为啥 Redis 性能这么快,字符串结构是怎样,基于此,在网上找了下资料和看了下 <Redis5 设计与源码分析 >,有所感,记录下 Redis 用途 Redis 是目前最流行的键值对( key-value)数据库,以出色的性能著称,官方提供的数据是可以支持 100 000 以上的 +QPS。Redis 具有高性能的主要原因如下。 1 ) Redis 是基于内存的存储数据库,绝大部分的命令处理只是纯粹的内存操作,内存的读写速度非常快。 2) Redis 是单进程线程的服务(实际上一个正在运行的 Redis Server 肯定不止一个线程,但只有一个线程来处理网络请求),避免了不必要的上下文切换,同时不存在加锁/释放锁等同步操作。 3 ) Redis 使用多路 I/O 复用模型(select、poll、epoll),可以高效处理大量并发连接。 4 ) Redis 中的数据结构是专门设计的,增、删、改、查等操作相对简单。 简....

人民有信仰 民族有希望 国家有力量