- 博客(56)
- 收藏
- 关注
原创 APM-基于Quickwit以及OTLP协议的轻量级Java日志系统
基于Quickwit, Jaeger, Minio, Grafana, Promethues构建的Java轻量级日志系统
2025-03-26 13:50:24
908
原创 APM-基于Grafana生态以及OTLP协议的Java轻量级日志监控系统
Granfa家族产品+OpenTelemetry协议实现SpringBoot日志和链路追踪
2025-03-25 14:03:19
832
原创 Logstash同步MySQL到ES
软件版本ES: 7.10.2MySQL: 5.7Logstash和ES安装在Windows中, MySQL安装在虚拟机中。
2025-03-07 14:34:07
665
原创 Alloy代替Prometheus的exporter采集指标
这里不暴露端点, 因为用Prometheus做存储, Prometheus Exporter探测的功能使用Alloy代替了。Alloy本身提供了多种平台与服务的指标抓取、处理、分发能力,并通过prometheus进行远端收集与分析;等,内置功能支持直接配置采集端点即可使用,简化了安装各种端点组件来使用,使部署与实施变得更容易。添加仪表盘, 导入Prometheus数据。如果要添加其它的指标收集参考。
2025-03-07 13:42:30
623
原创 ALG(Alloy+Loki+Grafana)轻量级日志系统
Docker Compose搭建ALG(Alloy+Loki+Grafana)轻量级日志系统
2025-03-06 17:50:02
1524
原创 SpringBoot集成Flink-CDC
CDC是Change Data Capture(变更数据获取)的简称。核心思想是,监测并捕获数据库的变动(包括数据或数据表的插入、更新以及删除等),将这些变更按发生的顺序完整记录下来,写入到MQ以供其他服务进行订阅及消费CDC主要分为基于查询和基于Binlog基于查询的都是Batch模式(即数据到达一定量后/一定时间才行会执行), 同时也因为这种模式, 那么延迟是必然高的, 而基于Streaming则是可以做到按条的粒度, 每条数据发生变化, 那么就会监听到Flink社区开发了flink-cdc-conne
2024-11-05 16:48:55
1498
1
原创 调度框架-Quartz-单机Quartz使用以及Job持久化
Quzrtz的Job持久化到MySQL, 并实现Job增删改查, 单次调用Job
2024-07-31 19:51:02
603
1
原创 分布式事务与Seata落地
事务指的就是一个操作单元, 在这个操作单元中的所有操作最终要保持一致的行为, 要么所有操作都成功, 要么所有的操作都被撤销。本地事务四大特性: ACIDA: 原子性(Atomicity), 一个事务中的所有操作, 要么全部完成, 要么全部不完成C: 一致性(Consistency), 在一个事务执行之前和执行之后数据库都必须处于一致性状态I: 隔离性(Isolation), 在并发环境中, 当不同的事务同时操作相同的数据时, 事务之间互不影响D: 持久性(Durability), 指的是只要事务成功结束,
2024-07-24 03:13:56
1093
1
原创 Spring系列-04-事件机制,监听器,模块/条件装配
什么时候需要自定义?想自己在合适的时机发布一些事件, 让指定的监听器来以此作出反应, 执行特定的逻辑自定义事件到底有什么刚需吗?讲道理,真的非常少。很多场景下, 使用自定义事件可以处理的逻辑, 完全可以通过一些其它的方案来替代, 这样真的会显得自定义事件很鸡肋运行示例论坛应用, 当新用户注册成功后, 会同时发送短信、邮件、站内信, 通知用户注册成功, 并且发放积分。
2024-07-22 13:54:32
1333
原创 Java数据脱敏
敏感数据在存储过程中为是否为明文, 分为两种这里指的是数据库中存储的是明文数据, 返回给前端的时候脱敏Mybatis中使用插件, 需要实现拦截器接口Invocation类这个类包含了一些拦截对象的信息拦截签名Mybatis插件的粒度是精确到方法级别的, 那么疑问来了, 插件如何知道轮到它工作?签名机制解决的就是这个问题, 通过在插件接口上使用注解标注来解决这个问题插件的作用域Mybatis插件能拦截哪些对象/Mybatis插件能在哪个生命周期阶段起作用?如下Executor是SQL执行器, 包
2024-06-26 17:43:30
1441
原创 Spring系列-03-BeanFactory和Application接口和相关实现
SpringFramework 中的容器最核心的是 BeanFactory 与 ApplicationContext
2024-05-25 01:07:03
405
1
原创 Spring系列-02-Bean类型, 作用域, 实例化, 生命周期
本身是一个接口,它本身就是一个创建对象的工厂。如果 Bean 实现了接口,则它本身将不再是一个普通的Bean ,不会在实际的业务逻辑中起作用,而是由创建的对象来起作用getObject(): 返回创建的对象getObjectType(): 返回创建的对象的类型(即泛型类型)isSingleton(): 创建的对象是单实例Bean还是原型Bean,默认单实例@Nullable@NullableClass<?
2024-05-22 02:56:00
1079
1
原创 Spring系列-01-IOC的依赖查找和依赖注入
假定现在有一下需求, 开始使用的数据源是MySQL, 后续数据源变动为Oracle, 那么我们的代码就需要改动每次切数据源都需要改动, 那么进行优化。
2024-05-20 14:47:34
1005
原创 Ubuntu安装和使用
查看当前桌面的环境商店中安装 Tweaks安装美化拓展安装chrome-gnome-shell是为了在浏览器里面能一键安装插件,名字中的“chrome”并不代表只能使用谷歌浏览器,火狐等其他浏览器也可以正常使用。下载主题这里以McMojave主题为例子mcOS 11CatalinaMcMojave下载主题文件进入.local/share/themes, 如果没有看到.local,就开启显示隐藏文件, 如果没有看到themes,就新建themes目录提取下载的主题,并复制这些提取的主题文件夹到。
2024-03-24 19:56:56
1167
原创 WSL使用
例如查出来的位置为C:\Users\Admin\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu22.04LTS_79rhkp1fndgsc\LocalState\ext4.vhdx。打开目录发现Ubuntu-22.04移动到了"E:\software\WSL\Ubuntu\temp-Ubuntu\ext4.vhdx", 但是"E:\software\WSL\Ubuntu\Ubuntu-22.04"目录不见了。
2024-03-24 19:48:46
1344
原创 sentinel中StatisticSlot数据采集的原理
在固定的时间窗口内,可以允许固定数量的请求进入;超过数量就拒绝或者排队,等下一个时间段进入, 如下图时间窗长度划分为1秒单个时间窗的请求阈值为3上述存在一个问题, 假如9:18:04:333-9:18:05:000产生了2个请求, 9:18:05:000-9:18:05:333产生了3个请求, 那么也就是说9:18:04:333-9:18:05:333这一秒内产生5个请求, 正常来说这里已经超出了阈值。
2024-03-24 17:21:50
2217
原创 sentinel熔断降级
熔断器分类和原理异常熔断器负责异常数/异常比例请求结束时统计异常数和请求总数, 判断是否达到阈值, 达到阈值更改熔断器状态RT熔断器:负责的是响应时间计算请求结束和请求开始的差值, 和阈值比较, 判断是否达到阈值, 达到阈值更改熔断器状态熔断器大体流程计数对比阈值熔断器验证状态流转OPEN: 熔断器打开, 系统进入熔断状态HALF_OPEN: 熔断器半开, 系统放行部分请求, 如果请求通过, 熔断器切回关闭状态, 如果请求出现异常, 熔断器切回打开, 继续熔断。
2024-03-18 16:44:57
1058
原创 sentinel基本流控
三个角色1. 监听器 PropertyListener2. 监听器管理者 SentinelProperty 3. 规则管理者 RuleManager
2024-03-18 16:41:19
1105
原创 sentinel系统负载自适应流控
系统负载自适应规则的核心类是 SystemRuleManager,它负责管理系统负载自适应规则的加载、更新和监听。当系统负载自适应规则发生变化时,SystemRuleManager 通过观察者模式通知相应的 RulePropertyListener 进行更新
2024-03-18 16:37:10
1256
原创 sentinel黑白名单权限控制
上述代码已经实例化了黑白名单监听器,并且已经将监听器交由 SentinelProperty 进行管理, 我们知道监听器监听的是规则, 那么还需要初始化规则。因为没必要, 看下述案例, 发现本质都是一样的, 换汤不换药罢了。, 将规则集合参数携带过去, 最终才能正常进入 for 循环遍历规则集合,将其组装成 Map 结构。监听器来感知黑白名单规则的变化, 将此监听器放入。方法就会进行规则的初始化, 具体的方法实现如下。进行规则初始化是不会成功的, 所以这里又调用。之后,我们会再执行一条初始化规则的代码.
2024-03-18 16:35:20
1041
原创 ThreadLocal, InheritableThreadLocal和TransmittableThreadLocal
ThreadLocal,InheritableThreadLocal,TransmittableThreadLocal
2024-03-07 23:24:36
850
2
原创 sentinel中监听器的运用--规则管理
规则通用的三个字段, 设置抽象类实现Rule接口, 对下述字段复用规则id资源名称限制来源限制来源指的是诸如黑名单值、白名单值等, 也就是说限制哪些来源访问// 实现规则 Rule 接口// 规则id// 资源名称// 限制来源, 多个用逗号隔开, 比如黑名单规则, 限制userId是1和3的访问, 那么就写setLimitApp(1,3)@Override为什么limitApp不使用?其实两者都是可行的, 你可以使用逗号分隔, 也可以使用, 只要能满足需求即可。
2024-02-22 16:09:04
1079
原创 观察者模式, 发布-订阅模式, 监听器模式
观察者模式是一种行为型设计模式, 定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。
2024-02-21 21:36:48
1144
原创 sentinel的资源数据指标是如何采集
之前的NodeSelectorSlot和ClusterBuilderSlot已经完成了对资源调用树的构建, 现在则是要对资源进行收集, 核心点就是这些资源数据是如何统计
2024-02-19 18:10:56
889
原创 ProcessSlot构建流程分析
首先初始化Builder,负责管控责任链整体,Sentinel要求Builder只能存在一个,而且是外部系统优先原则,因此,我们可以自己编写一个以接口为名称的SPI文件来替代默认的 DefaultSlotChainBuilder。然后通过Builder初始化完整的责任链,这里仍然是通过SPI机制进行初始化,因此也可以额外扩展,比如外部系统自定义一个Slot且插入到完整责任链当中,这里值得注意的是责任链是有顺序的,如果顺序没指定正确,则可能造成意想不到的效果。顺序可以通过@Spi注解的order属性。
2024-02-03 14:53:55
983
原创 JDK和Spring的SPI机制原理分析
Java SPI(Service Provider Interface)是 Java 提供的一种轻量级的服务发现机制。它可以让开发者通过约定的方式,在程序运行时动态地加载和替换接口的实现,从而提高程序的扩展性和灵活性Java SPI 实际上是“基于接口的编程+策略模式+配置文件”组合实现的动态加载机制要使用Java SPI,需要遵循如下约定:当服务提供者提供了接口的一种具体实现后,在jar包的目录下创建一个以接口全限定名为命名的文件,内容为实现类全限定名接口实现类所在的jar包放在主程序的。
2024-02-02 17:24:40
1061
1
原创 sentinel的Context创建流程分析
限流:通过限制请求速率、并发数或者用户数量来控制系统的流量,防止系统因为流量过大而崩溃或无响应的情况发生。熔断:在系统出现故障或异常时将故障节点从系统中断开,从而保证系统的可用性。降级:在系统过载的情况下保证核心功能的可用性。熔断和限流的区别在于:熔断是针对故障节点的,将故障节点从系统中断开,而降级是针对整个系统的,系统在过载的情况下关闭一些非核心功能,仍能提供核心功能的可用性。资源: 资源是被 Sentinel 保护和管理的对象规则:用来定义资源应该遵循的约束条件资源和规则的关系。
2024-02-01 16:05:11
1103
原创 gateway集成sentinel配置nacos持久化GatewayFlowRule规则后--GatewayFlowRule规则失效(规则的时间单位和时间粒度失效)
其实笔者在写这块的时候, 参考了大量的博客, 但是那些博客实现了持久化是有缺陷的, sentinel-dashboard中操作缺失能同步到nacos, 但是这里的规则是有问题的, 无法使用的, 和我们理想中的效果大相径庭, 排查的思路大概如下。
2024-01-30 23:10:59
1500
3
原创 阿里云redis集群模式导致的gateway网关限流不生效
问题现象: 阿里云redis集群无法限流, 提示一下异常Error in execution;翻译过来大致的意思就是看一下gateway网关中使用的lua脚本, 位于gateway依赖包下的gateway原Lua脚本如下下边这版是删除了部分注释代码, 以及添加了部分注释的核心问题就在这里将KEYS[1]和 KEYS[2]赋值给了变量, 然后传递给了后续的代码然而, 为了保证脚本里面的所有操作都在相同slot进行,会对Lua脚本做如下。
2024-01-26 19:51:50
1209
原创 gateway网关限流
gateway集成redis实现用户+接口维度的限流, 并将限流所产生的key存入到redis的指定的索引库, 不和原业务的key的产生影响(不会在原业务索引库产生大量的key), 以及集成了sentinel做接口层面的限流, 并实现持久化
2024-01-12 14:59:23
1205
原创 多线程下子线程无法获取request的值
由于子线程无法获取请求对象, 导致出现了空指针解决方式有3种线程共享手动传值设置servletRequestAttributes。
2024-01-01 06:19:17
1667
1
原创 MySQL-18.主从复制
在实际工作中,我们常常将Redis作为缓存与MySQL配合来使用,当有请求的时候,首先会从缓存中进行查找,如果存在就直接取出。如果不存在再访问数据库,这样就提升了读取的效率,也减少了对后端数据库的访问压力。Redis的缓存架构是高并发架构中非常重要的一环。此外,一般应用对数据库而言都是“读多写少”,也就说对数据库读取数据的压力比较大,有一个思路就是采用数据库集群的方案,做主从架构、进行读写分离,这样同样可以提升数据库的并发处理能力。
2023-09-27 20:23:56
93
1
原创 MySQl-17.其它的数据库日志
中继日志只在主从服务器架构的从服务器上存在。从服务器为了与主服务器保持一致,要从主服务器读取二进制日志的内容,并且把读取到的信息写入本地的日志文件中,这个从服务器本地的日志文件就叫中继日志。然后,从服务器读取中继日志,并根据中继日志的内容对从服务器的数据进行更新,完成主从服务器的数据同步。搭建好主从服务器之后,中继日志默认会保存在从服务器的数据目录下从服务器名-relay-bin.序号。从服务器名- relay-bin.index,用来定位当前正在使用的中继日志。
2023-09-26 22:12:58
110
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人