
开源框架学习
文章平均质量分 94
水中加点糖
天下武功,无坚不破,唯快不破。https://github.com/puhaiyang
展开
-
使用Spring AI中的RAG技术,实现私有业务领域的大模型系统
RAG,即,检索增强生成。它是大模型和信息检索技术的结合技术。百度百科上的解释为:当模型需要生成文本或者回答问题时,它会先从一个庞大的文档集合中检索出相关的信息,然后利用这些检索到的信息来指导文本的生成,从而提高预测的质量和准确性。“让大模型为行业赋能”。RAG的工作流程可参考SpringAI中的这张图:即:在用户向大模型检索某个信息时,会携带关于所需要检索的背景知识,这样以让大模型可以参考已有知识来进行应答。使用SpringAI内置的RAG和功能可以快速实现一个针对私有业务领域。原创 2024-11-12 19:00:00 · 2528 阅读 · 0 评论 -
【即见未来,为何不拜】聊聊分布式系统中的故障监测机制——Phi Accrual failure detector
昨天在看tcp拥塞控制中的(Bottleneck Bandwidth and Round-trip propagation time)算法时,发现了这一特点:在BBR以前的拥塞控制算法中(如Reno、Cubic、Vegas),都依赖于丢包事件的发生,在高并发时则会看到网络波动的现象。而在BBR诞生后,由于其基于数学模型的思想,BBR通过对包延迟的实时计算,持续对瓶颈带宽进行估算,使得网络又快又稳。又看了些BBR的相关资料后,笔者内心有被其中的数学机制。原创 2024-10-17 22:40:18 · 1071 阅读 · 0 评论 -
还在人工代码review?reviewdog和PMD了解一下
一般来讲,通过代码review可发现的问题主要有以下几类:代码规范,如常量名应使用大写驼峰命名……代码漏洞,如代码空指针……业务代码缺陷,如用户登录成功后应提示“登录成功”实际代码为“登录失败”……本文将介绍一种代码merge request提交后自动进行代码review的方案。通过既定的规则扫描,实现对增量代码的代码自动review与评论,为项目中的代码review提个速原创 2024-08-05 22:40:37 · 1194 阅读 · 0 评论 -
使用frrouting、gns3、pim实现ipv6组播(三)
ipv6下实现组播收发包。ospfv3、pimv6、pim sm asm。模拟器支持私有vm、qemu、virtalbox、docker镜像、kvm等各种镜像,丰富的网络与GUI可视化界面解压kvm包,然后执行如下命令启动。原创 2024-07-28 16:54:37 · 1078 阅读 · 1 评论 -
Frrouting快速入门——北向接口事务cli与gRPC(二)
在前文中我们使用frrouting内置的CLI工具vtysh实现了ospf组网通信。使用cli的方式配置网络的过程稍微有一点繁琐,但它整体还算简单且可靠,也是目前配置frrouting使用最多的方式。比如在sonic中,sonic的配置模块与FRR通信也使用的是CLI的方式进行配置的传递。原创 2024-07-15 21:42:36 · 1863 阅读 · 0 评论 -
Frrouting快速入门——OSPF组网(一)
FRR是FRRouting的简称,是一个开源的路由交换软件套件。其作者源自老牌项目quaga的成员,也可以算是的新版本。FRR支持的协议众多,也有较为完备的北向接口。FRR的安装方式多种多样,如仅仅把它当做工具使用,使用docker运行FRR是一个不错的选择。docker方式运行frr时需要注意:较新版本FRR的docker仓库由quay.io维护,并没有在dockerhub中。原创 2024-07-04 21:06:57 · 2835 阅读 · 0 评论 -
使用mininet快速入门ONOS路由交换技术与原理-路由篇
但在芸芸网络的世界中,主机间的通信除了二层域外更多的还是纷繁复杂的三层ip路由通信。上篇文章使用mininet搭建了一个简单的网络拓扑,并实现了同一交换机下同网段多主机的通信,其中涉及到的通信知识主要以二层mac地址通信为主。路由协议可分为静态路由协议和动态路由协议,在动态路由协议中,根据路由协议的作用范围主要又分为IGP与EGP。其中EGP中的BGP协议根据其强悍的设计可支撑起各数以亿记的路由条目,同是也是动态路由协议中最为复杂的一个。而本文将结合BGP路由协议,通过一小示例实现SDN下不同网段多主机通信原创 2024-02-29 21:50:57 · 1834 阅读 · 0 评论 -
使用mininet快速入门ONOS路由交换技术与原理-交换篇
onos-2.7.0ideamininet提供了多种方式模拟openfllow交换机与主机,如命令行和python脚本方式。另外还可使用mininet源码中的miniedit构建需要模拟的拓扑信息,miniedit软件截图如下:如要使用miniedit,可将mininet代码clone,,运行对应位置的miniediy.py即可。原创 2024-01-18 22:22:10 · 2427 阅读 · 0 评论 -
SDN控制器-ONOS中的最终一致性存储
ONOS中设备信息的存储基于GOSSIP协议实现,节点间进行数据交换主要有定时随机传播和数据变更后主动广播两种方式。通信的实现上基于atomix组件(底层基于NETTY)使得用户无需关心具体的通信过程。在节点数据交换的过程中,主要使用PUSH的方式进行数据交换。首次PUSH时本节点仅传递本节点的摘要信息(基于时间戳)推送到对端节点,对端节点收到摘要数据后进行对比,将新的数据PUSH到源节点。原创 2023-12-17 17:00:21 · 460 阅读 · 0 评论 -
map、sync.map、concurrent-map适用场景与源码解析
在go中进行KV存储时,常用map、sync.map、concurrent-map这3种map实现。项目中选型时具体应该使用哪个需要分析具体的业务场景,可参考sync.map中的这段话:最后,再简单总结一下:项目中选型时,应优先考虑使用原生map进行KV存储;多个协程的并发读写场景,应优先考虑在map中加上互斥锁(Mutex)或读写锁(RWMutex)实现,这样对map的编码方式改动也最小。并发场景为读多写少的场景,则可考虑sync.map;原创 2023-08-27 23:03:44 · 669 阅读 · 0 评论 -
使用thrift进行RPC通信(附c程序示例)
为了实现不同语言的程序跨进程、跨主机通信,一般可以采用mq或rpc框架来实现。对于异步通知的场景可以使用mq,如zeroMQ。但对于某些实时性较强且同步的应用场景,使用成熟的rpc框架来实现也是一种比较更好的选择。开源的rpc框架有很多,其中跨语言的rpc框架以使用google公司采用protobuf协议的grpc框架,和facebook公司的thrift框架最为知名。原创 2023-05-17 21:37:22 · 1350 阅读 · 0 评论 -
java-raft框架之atomix进行分布式管理
atomix的api远不止本例中的两个,还有其他很多的api。如分布式锁、分布式事务、分布式自增id、分布式队列、分布式信息号等,这些在atomix中都有实现,详细可见atomix的类方法:也正如当前所说,当前基于JAVA实现的atomix已经停止维护了。如果要在生产环境中使用atomix,可以移步atomix的官网,获取在k8s环境下的新版atomix的使用方式,依然很强大。原创 2023-01-30 22:44:54 · 1173 阅读 · 0 评论 -
SDN控制器-ONOS源码编译与mininet快速入门
sdn快速入门,使用ONOS源码方式编译。ONOS-2.7.0+Bazel+Mininet快速入门。原创 2022-11-21 13:28:09 · 3454 阅读 · 8 评论 -
疫情宅在家,研究一下fastjson中字段智能匹配的原理
fastjson智能匹配的原理。fastjson中下划线是如何自动转驼峰的。原创 2022-09-08 22:32:15 · 1582 阅读 · 0 评论 -
使用antlr快速解析SQL
使用antlr快速解析SQL原创 2021-12-26 22:04:27 · 8911 阅读 · 3 评论 -
使用spring-integration快速实现mysql分布锁
正如上篇文章spring自带分布式锁-[jdbc-lock-registry]源码解析所说的那样:对于并发不是很高,并对性能追求不是很迫切,又不想引入其他第三方组件的情况下,使用数据库来实现分布式锁也是一种很不错的实现方式。这里将快速演示如何在常见的spring boot项目中,通过引入spring-integration来快速实现一个mysql的分布式锁。依赖引入首先在maven中引入所需要的依赖 <!--mysql数据库驱动--> <depend原创 2021-07-30 21:01:42 · 2111 阅读 · 3 评论 -
spring自带分布式锁-[jdbc-lock-registry]源码解析
在查看spring cloud task源码的时候发现它是通过使用spring自带的分布式锁实现的。分布式锁一直以来都是分布式系统中很重要的一种技术,最常见的主要还是基于redis或zookeeper实现的分布式锁。spring自带的常用分布式锁介绍文档如下:jdbc-lock-registryredis-lock-registryzk-lock-registry对于并发不是很高,并对性能追求不是很迫切,又不想引入其他第三方组件的情况下,使用数据库来实现分布式锁也是一种很不错的实原创 2021-06-30 15:22:31 · 2541 阅读 · 1 评论 -
[源码解析]之-ElasticJob如何做到单分片任务只在一个节点运行的?
这篇文章是之前体验elastic-job时搭了一个elasticjob多节点环境,当时对elasticjob是如何做到多节点中只运行一个定时任务挺疑惑的,所以就跟着源码看了看并做了一个简单的记录。在了解与体验了spring cloud data flow后觉得elasticjob优秀是优秀,但与spring cloud data flow相比能更好地运行在kuernetes上总觉得不怎么适用于当时公司的定时任务场景,于是这篇文章也就没有发出来。但最近由于公司项目由于数据存储那块原有架构感觉快扛不住了,于原创 2021-04-19 20:47:33 · 1982 阅读 · 0 评论 -
[源码解析]之-spring cloud task启动执行流程详解
前言在采用spring cloud task实现定时任务默认是允许并发执行的,也就是同一时刻运行同时运行多个同一task实例但是task的一般业务场景都是不允许并发执行的,为此spring cloud task官方的文档中也有对此的说明并提供了配置详情点此链接进行查看Restricting Spring Cloud Task Instances其主要内容如下:Spring Cloud Task lets you establish that only one task with a given原创 2021-04-03 12:03:08 · 1100 阅读 · 0 评论 -
定时任务框架elastic-job快速体验与思考
前言一个业务系统中很容易会遇到需要定时任务来执行某一操作的需求。如果刚开始时系统足够简单,为了开发快速与便捷,用spring中的schedule注解来实现定时任务也完全够了随着业务功能的增加,如果需要定时任务的高可用,则可以使用quartz,但如果希望有job的管理界面并支持分布式,那么quartz目前还不能满足。也正因为quartz不能满足分布式处理定时任务的原因,于是便有了众多的定时任务框架,如xxl-job、elastic-job等尽管xxl-job和elastic-job都是由国人开发的两款开原创 2021-02-21 22:53:55 · 1520 阅读 · 0 评论 -
sentinel源码解析之-sentinel dashboard与客户端连接建立过程
sentinel 源码解析之sentinel dashboard与sentinel客户端连接过程原创 2020-10-15 11:19:13 · 3473 阅读 · 1 评论 -
采用springboot+flowable快速实现工作流
前言 工作流框架大家一定不陌生,各种OA系统里我们常常用到。对于JAVA领域来说一说起工作流框架第一浮现我在脑海中的便是大名鼎鼎的Activiti了。很久以前学习Activiti框架时我也曾记录过一篇文章。见链接:工作流框架Activiti常用功能初探 尽管当时只是学习了一下在之后的相关工作和项目中并没有用到,通过学习后了解了下, 仅对于知识广度进行了扩宽。...原创 2018-04-07 23:04:21 · 251790 阅读 · 152 评论 -
Spring Cloud中restTemplate是如何通过服务名主求到具体服务的?
最近的项目是基于spring cloud中,其中对于服务的调用,是通过restTemplate来发送http请求调用的,但请求地址为http://SERVICE-NAME/questpath,如下面这样:@RestController@RequestMapping(value = "hello")public class HelloController { private String...原创 2018-03-25 17:38:48 · 18150 阅读 · 4 评论 -
mybatis-plus timestamp返回为null问题排除
问题是这样的:在开发时,为了节约时间,我选择了mybatis框架来开发,然后又在网上找了一个许多人都推荐的mybatis-plus来作为持久层框架。于是乎我按照官方的DEMO下了一个springBoot的mybatis-plus版本的DEMO,地址为:https://gitee.com/baomidou/mybatisplus-spring-boot 这个DEMO是基于H2数据库的,跑原创 2018-01-28 17:21:47 · 12679 阅读 · 8 评论 -
springBoot配置文件加载原理探究
尽管用springBoot做开发已经有很长一段时间了,在开发时一般都是直接将application.properties或application.yml,放在开发环境的resources下的,运行起来感觉也没什么问题。但是由于项目最终都是要通过打包,最终打包为一个jar包运行的。但如果一个项目由于环境不同需要对配置文件修改时,直接将在IDE中修改配置文件再重新打成一个JAR包很耗费时间。最原创 2017-10-24 22:32:02 · 10786 阅读 · 1 评论 -
ebean报错:NotifyOfCommit failed. L2 Cache potentially not notified解决办法
问题描述公司中的一个项目用的ebean框架,有一次在程序的JAR包关闭过程中发现了如下错误[Thread-2] INFO com.bigdata.datacenter.datasync.server.mysql.MysqlSubjectServer - 扫描程序关闭中...[Thread-2] ERROR com.avaje.ebeaninternal.server.transaction.Tr...原创 2018-07-07 21:15:45 · 912 阅读 · 0 评论 -
spring项目中多数据源无法切换的原因分析
暂存,空了来补上原创 2019-02-28 09:36:30 · 4883 阅读 · 14 评论 -
spring cloud config拉取配置文件原理
一直对spring cloud config是如何从git中加载到配置文件的挺感兴趣的,正好最近不是很忙来跟踪个代码简单研究学习下对于spring cloud config的教程和demo可以直接从spring的官网进行学习,https://spring.io/projects/spring-cloud-config官方文档我主要是看的这两个文档:https://cloud.spr...原创 2019-08-22 11:06:25 · 2549 阅读 · 0 评论 -
使用canal client-adapter完成mysql到es数据同步教程(包括全量和增量)
使用canal client-adapter完成mysql到es数据同步教程环境说明canal 版本mysql版本canal环境安装开启mysql的bin_loges安装kibana安装canal server安装与运行环境配置完毕后的验证mysql中创建测试库和测试表及数据es索引验证及创建目标索引canal adapter在idea中测试运行canal maven installcanal a...原创 2019-08-31 22:03:00 · 19830 阅读 · 17 评论 -
[canal源码解析]之esAdapter etl功能
在上一篇使用canal client-adapter完成mysql到es数据同步教程(包括全量和增量)编辑的时候看到了esAdapter中对于etl功能的代码,由于之前自己也写过类似的功能点,为此这里我打算再看下阿里的大佬是如何写全量同步代码的,作为学习与借鉴CommonRestetl类的入口controller类为:com.alibaba.otter.canal.adapter.laun...原创 2019-09-02 16:28:57 · 4063 阅读 · 0 评论 -
在vm下用ubuntu 18.04安装minikube(5分钟完成kubernetes搭建)
原本想用kubeadm来安装k8s,结果折腾了半天没有成功,在看了下k8s的官方文档后发现还有个叫做minikube的东西可以用来快速安装k8s集群。虽然是一个假的k8s集群,但对于开发的我用来研究学习用也够了,而且也只需要一台机器就够了,感觉很方便。先上安装好后minikube并访问dashboard的截图:安装环境说明软件环境:vm(cpu有2核或以上并开启了虚拟化,内存2G以...原创 2019-09-18 18:18:51 · 5279 阅读 · 4 评论 -
为什么mybatis的mapper没有实现类(原理探究)
下午想到了一个JAVA中的一个很基础的问题,java中接口是不能实例化的,想到这点,让我想起了mybatis框架中的mapper的用法,我们有用mapper时,全都是没有实现类的,只有一个mapper接口,而我们在调用的时候,通过spring注入到适当的service或其他类中就可以用了,那么它的原理是什么呢,mapper调用时又是在哪里进行了实现的呢?带着这个问题,我重新复习了下mybatis的用法,为了测试方便,我在mysql上建了一个user表,并插入了3条记录,并写了一个简单的mybatis例子原创 2017-08-20 10:37:53 · 16797 阅读 · 13 评论