自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(161)
  • 资源 (1)
  • 收藏
  • 关注

原创 翻车了,被读者找出 BUG

还好我们线上系统有一层保护机制,否则可能要出事。如果在 singleflight 层面去解决这个问题,暂时我还没有想到很好的办法,如果读者朋友们有好的方法,欢迎私信我。在看分享,我会更加感激不尽~搜索关注微信公众号"捉虫大师",后端技术分享,架构设计、性能优化、源码阅读、问题排查、踩坑实践。

2023-06-12 17:39:01 360

原创 使用增强版 singleflight 合并事件推送,效果炸裂!

hello,大家好啊,我是小楼。最近在工作中对 Go 的 singleflight 包做了下增强,解决了一个性能问题,这里记录下,希望对你也有所帮助。singleflight 直接翻译为”单(次)飞(行)“,它是对同一种请求的抑制,保证同一时刻相同的请求只有一个在执行,且在它执行期间的相同请求都会 Hold 直到执行完成,这些 hold 的请求也使用这次执行的结果。举个例子,当程序中有读(如 Redis、MySQL、Http、RPC等)请求,且并发非常高的情况,使用 singleflight 能得到比较好的

2023-05-19 16:15:26 234

原创 一文吃透 Go 内置 RPC 原理

本文介绍了 Go 内置的 RPC Client 和 Server 端原理,能窥探出一点点 RPC 的设计,如果让你实现一个 RPC 是不是有些可以参考呢?本来草稿中贴了很多代码,但我觉得那样解读很难读下去,于是就删了又删。

2023-03-02 19:40:46 346

原创 一文读懂Go Http Server原理

用 Go 起一个 Http Server 非常简单Go Http Server 本质是一个大循环,每当有一个新连接时,会起一个新的协程来处理每个连接的处理也是一个大循环,这个循环里做了读取请求、寻找路由、执行逻辑三件大事在看分享,我会更加感激不尽~搜索关注微信公众号"捉虫大师",后端技术分享,架构设计、性能优化、源码阅读、问题排查、踩坑实践。

2023-01-12 19:16:22 430

原创 请求量太大扛不住怎么办?进来学一招

这个方法很简单,但是有一些要注意的地方,得做好监控,比如调用方单个请求的QPS、RT,实际批量请求的QPS、RT,这样才好计算出处理协程开多少个合适,还有队列写入失败、队列长度等等监控,当容量不足时及时做出调整。

2022-12-23 17:16:50 1132

原创 一言不合就重构

服务健康检查是应对分布式应用下某些服务节点不健康问题的一种解法。如下图,消费者调用提供方集群,通常通过注册中心获取提供方的地址,根据负载均衡算法选取某台具体机器发起调用。假设某台机器意外宕机,服务消费方不能感知,就会导致流量有损,如果此时有一种检测服务节点健康状态并及时剔除的机制,就能大大增加线上服务的稳定性。本文从健康检查的背景,原组件存在的问题,以及我们的理想态出发,调研了业界的方案,结合实际情况,选择了适合的方案,并总结之前系统的问题,设计一个更加合理的新系统,从开发闭环到上线。

2022-11-30 19:50:28 385 1

原创 有趣的 Go HttpClient 超时机制

根据 Go 源码的注释:Context 简单来说是一个可以携带超时时间、取消信号和其他数据的接口,Context 的方法会被多个协程同时调用。Context 有点类似 Java 的ThreadLocal,可以在线程中传递数据,但又不完全相同,它是显示传递,ThreadLocal 是隐式传递,除了传递数据之外,Context 还能携带超时时间、取消信号。Background :空的实现,啥也没做TODO:还不知道用什么 Context,先用 TODO 代替,也是啥也没做的空 Context。

2022-11-15 19:26:24 1884 1

原创 参加了个算法比赛,真是一言难尽啊

过程虽然曲折,但最终还是解决了这个入门题,而且还尝试着用几种方法来解,虽然不尽如人意,但终究还是有点收获。当然我们组的小伙伴也很给力,做出来3道题,我们最终的成绩是排名进了前10%,虽然我只贡献了一点点(没完全做出来也有得分,按通过的用例算,我这题大概拿到了90%的分),也算是可以了,而且还有一道题也可能是因为这个输入被卡了,所以如果这两道卡的题都做出来,估计排名能进前三。初赛算是过了,接下来准备复赛,如果复赛还有好玩的事情,我再来写一篇文章,哈哈。这一言难尽的比赛,大家给个赞鼓励下吧。

2022-09-02 13:01:49 257

原创 如何给注册中心锦上添花?

本文信息点有点多,但深度不够,很多地方只是一笔带过,一方面本文的宗旨就是点到即可,这也正好符合后端启示录的特点,另一方面每个点都可以展开独立成一篇甚至多篇文章,如果读者朋友对其中某些点感兴趣,我们可以私下交流。搜索关注微信公众号"捉虫大师",后端技术分享,架构设计、性能优化、源码阅读、问题排查、踩坑实践。...

2022-08-25 19:44:31 483

原创 如何组装一个注册中心

注册(register),将服务提供方注册到注册中心注销(unregister),将注册的服务从注册中心中删除订阅(subscribe),服务消费方订阅需要的服务,订阅后提供方有变更将通知到对应的消费方注册、注销可以是服务提供方的进程发起,也可以是其他的旁路程序辅助发起,比如发布系统在发布一台机器完成后,可调用注册接口,将其注册到注册中心,注销也是类似流程,但这种方式并不多见,而且如果只考虑实现一个注册中心,必然是可以单独运行的,所以通常注册、注销由提供方进程负责。看看这个领域有没有相关标准。...

2022-07-27 09:52:43 172

原创 抓到Dubbo异步调用的小BUG,再送你一个贡献开源代码的机会

hello,大家好呀,我是小楼。最近一个技术群有同学at我,问我是否熟悉Dubbo,这我熟啊~他说遇到了一个Dubbo异步调用的问题,怀疑是个BUG,提到BUG我可就不困了,说不定可以水,哦不…写一篇文章。遇到问题,尤其不是自己遇到的,必须要复现出来才好排查,截一个当时的聊天记录:他的问题原话是:注意几个重点:听到这个描述,我的第一反应是这个返回结果定义为boolean肯定有问题!《Java开发手册》中就强调了RPC接口返回最好不要使用基本类型,而要使用包装类型:但这个是业务编码规范,如果RPC框架不能使用

2022-07-04 11:12:06 147

原创 这不会又是一个Go的BUG吧?

hello,大家好呀,我是小楼。最近我又双叒叕写了个BUG,一个线上服务死锁了,不过幸亏是个新服务,没有什么大影响。出问题的是Go的读写锁,如果你是写Java的,不必划走,更要看看本文,本文的重点在于Java和Go的读写锁对比,甚至看完后你会有一个隐隐的感觉:Go的读写锁是不是有BUG?背景简单抽象一下:一个server服务(Go语言实现),提供了一个http接口,另有一个client服务来调用这个接口,整体架构非常简单,甚至都不用画架构图你也能够理解。这两个服务上线运行了一段时间都没什么问题,突然有一天c

2022-06-21 11:44:14 139

原创 我是一个Dubbo数据包...

hello,大家好呀,我是小楼。前几天不是写了这篇文章《发现一个开源项目优化点,点进来就是你的了》嘛。文章介绍了Sentinl的自适应缓存时间戳算法,从原理到实现都手把手解读了,而且还发现Sentinel-Go还未实现这个自适应算法,于是我就觉得,这简单啊,把Java代码翻译成Go不就可以混个PR?甚至在文章初稿中把这个描述为:「有手就可以」,感觉不太妥当,后来被我删掉了。过了几天,我想去看看有没有人看了我的文章真的去提了个PR,发现仍然是没有,心想,可能是大家太忙(懒)了吧。于是准备自己来实现一遍,周末我

2022-06-08 13:00:56 120

原创 对不起,我错了,这代码不好写

hello,大家好呀,我是小楼。前几天不是写了这篇文章《发现一个开源项目优化点,点进来就是你的了》嘛。文章介绍了Sentinl的自适应缓存时间戳算法,从原理到实现都手把手解读了,而且还发现Sentinel-Go还未实现这个自适应算法,于是我就觉得,这简单啊,把Java代码翻译成Go不就可以混个PR?甚至在文章初稿中把这个描述为:「有手就可以」,感觉不太妥当,后来被我删掉了。过了几天,我想去看看有没有人看了我的文章真的去提了个PR,发现仍然是没有,心想,可能是大家太忙(懒)了吧。于是准备自己来实现一遍,周末我

2022-06-01 20:35:09 830

原创 发现一个开源项目优化点,点进来就是你的了

hello,大家好呀,我是小楼。最近无聊(摸)闲逛(鱼)github时,发现了一个阿里开源项目可以贡献代码的地方。不是写单测、改代码格式那种,而是比较有挑战的性能优化,最关键的是还不难,仔细看完本文后,有点基础就能写出来的那种,话不多说,发车!相信大家在日常写代码获取时间戳时,会写出如下代码:long ts = System.currentTimeMillis();读者中还有一些Gopher,我们用Go也写一遍:UnixTimeUnitOffset = uint64(time.Millise

2022-05-25 14:08:50 107

原创 太极限了,JDK的这个BUG都能被我踩到

hello,大家好呀,我是小楼。之前遇到个文件监听变更的问题,刚好这周末有空研究了一番,整理出来分享给大家。从一次故障说起我们还是从故障说起,这样更加贴近实际,也能让大家更快速理解背景。有一个下发配置的服务,这个配置服务的实现有点特殊,服务端下发配置到各个服务的本地文件,当然中间经过了一个agent,如果没有agent也就无法写本地文件,然后由client端的程序监听这个配置文件,一旦文件有变更,就重新加载配置,画个架构图大概是这样:今天的重点是文件的变更该如何监听(watch),我们当时的实现

2022-05-10 14:01:55 499

原创 灵感乍现,造了个与众不同的Dubbo注册中心扩展轮子

hello大家好呀,我是小楼。作为一名基础组件开发,服务好每一位业务开发同学是我们的义务(KPI)。客服群里经常有业务开发同学丢来一段代码、一个报错,而我们,当然要微笑服务,耐心解答。有的问题,凭借多年踩坑经验,一眼就能看出;有的问题,看一眼代码也能知道原因,但有的问题,还真就光凭看是看不出来的,这时,只能下载代码,本地跑跑看了。熟悉我的朋友都知道,我从事dubbo相关开(客)发(服)工作多年,所以我就来讲一个dubbo问题排查过程中的有趣的事。通常遇到看不能解决的问题时,先git拉取代码,再导

2022-04-28 09:55:40 165

原创 眼见不一定为实:调用链HBase倾斜修复

hello,大家好,我是小楼。今天给大家分享一个关于HBase数据倾斜的排查案例,不懂调用链?不懂HBase?没关系,看完包懂~背景最近HBase负责人反馈HBase存储的调用链数据偶尔出现极其严重的倾斜情况,并且日常的倾斜情况也比较大,讲的通俗点就是出现了热点机器。举个例子,有三台HBase机器存储调用链数据,其中大部分数据读写都在一台机器上,导致机器负载特别大,经常告警,这就是HBase倾斜,也叫热点现象。本文主要讲述了治理倾斜情况的过程,以及踩的几个坑。知识铺垫为什么会出现HBase倾斜的

2022-04-26 11:19:14 259

原创 Go能实现AOP吗?

hello~大家好,我是小楼,今天分享的话题是Go是否能实现AOP?背景写Java的同学来写Go就特别喜欢将两者进行对比,就经常看到技术群里讨论,比如Go能不能实现Java那样的AOP啊?Go写个事务好麻烦啊,有没有Spring那样的@Transactional注解啊?遇到这样的问题我通常会回复:没有、实现不了、再见。直到看了《Go语言底层原理剖析》这本书,开始了一轮认真地探索。Java是如何实现AOP的AOP概念第一次是在若干年前学Java时看的一本书《Spring实战》中看到的,它指的是一

2022-04-19 13:00:11 1418 1

原创 踩了个DNS解析的坑,但我还是没想通

hello大家好,我是小楼。最近踩了个DNS解析的小坑,虽然问题解决了,但排查过程比较曲折,最后还是有一点没有想通,整个过程分享给大家。背景最近负责的服务要置换机器。置换机器可能很多小伙伴不知道是干啥,因为大家平时接触不到,我简单解释一下什么是机器置换以及为什么需要机器置换。机器置换通俗地讲就是更换机器,把服务从一台机器迁移到另一台上去。为什么要机器置换呢? 表面原因可能是机器硬件故障、或者机器过了保修期。有些小伙伴可能就想问,我在公司也负责了很多服务,为啥从来没有置换过机器呢?原因可能是用了容

2022-04-12 12:56:19 1085

原创 参与开源项目很难吗?

hello大家好,我是小楼。流量真是个让人捉摸不透的东西,有时候写了一篇自己感觉牛的不行的文章,结果阅读数据惨淡,有时候觉数据可能没那么好的文章,实际数据却出乎意料。之前的文章《惨,给Go提的代码被批麻了》就是这样,我以为就一般吧吧,没想到却“火了”。这篇文章截止目前,发表的20天时间里,在掘金阅读量突破1w,知乎阅读量突破1.8w,头条阅读量破1.7w,微信公众号的阅读加上被转载的阅读也有1w,就连公司内网的阅读都有3k。可以说这个数据是我从写公众号以来最好的了,但我并不觉得它是我写得最好的文章

2022-03-31 19:16:45 308

原创 祖传代码如何优化性能?

hello大家好呀,我是小楼~今天又带来一次性能优化的分享,这是我刚进公司时接手的祖传(坏笑)项目,这个项目在我的文章中屡次被提及,我在它上面做了很多的性能优化,比如《记一次提升18倍的性能优化》这篇文章,比较偏向某个细节的优化,本文更偏向宏观上的性能优化,可以说是个老演员了。背景为了新朋友能快速进入场景,再描述一遍这个项目的背景,这个项目是一个自研的Dubbo注册中心,上一张架构图Consumer 和 Provider 的服务发现请求(注册、注销、订阅)都发给 Agent,由它全权代理Re

2022-03-22 19:34:03 187

原创 惨,给Go提的代码被批麻了

hello大家好,我是小楼。不知道大家还记不记得我上次找到了一个Go的Benchmark执行会超时的Bug?就是这篇文章《我好像发现了一个Go的Bug?》。之后我就向Go提交了一个PR进行修复,本想等着代码被Merge进去,以后也可以吹牛说自己是个Go的Contributor,但事情并不顺利,今天就来分享一下这次失败的代码提交。第一次提交在我意识到Bug时,就迫不及待想去修复,于是有了这一次提交。在说代码前,先说点关于Go仓库的问题,Go并没有直接托管在github,而是自建的Gerrit Cod

2022-03-08 10:19:09 113

原创 大厂偏爱的Agent技术究竟是个啥

搜索关注微信公众号"捉虫大师",后端技术分享,架构设计、性能优化、源码阅读、问题排查、踩坑实践。hello大家好,我是小楼,今天给大家分享一个关于Agent技术的话题,也是后端启示录的第3篇文章。通过本文你可以了解到如下内容:什么是Agent技术为了解释什么是Agent技术,我在网上搜了一圈,但没有找到想要的结果。反倒是搜到了不少Java Agent技术,要注意Java Agent技术指的是一种Java字节码修改技术,和本文要说的完全是两码事。既然搜不到,我就说下自己的理解吧。Agent技术.

2022-02-23 10:18:15 2782 2

原创 这个Dubbo注册中心扩展,有点意思

今天想和大家聊聊Dubbo源码中实现的一个注册中心扩展。它很特殊,也帮我解决了一个困扰已久的问题,刚刚在生产中用了,效果很好,迫不及待想分享给大家。Dubbo的扩展性非常灵活,可以无侵入源码加载自定义扩展。能扩展协议、序列化方式、注册中心、线程池、过滤器、负载均衡策略、路由策略、动态代理等等,甚至「扩展本身」也可以扩展。在介绍今天的这个注册中心扩展之前,先抛出一个问题,大家思考一下。如何低成本迁移注册中心?有时出于各种目的需要迁移Dubbo的注册中心,或因为觉得Nacos比较香,想从Zookeep

2022-02-11 13:07:42 695

原创 都2022年了,还在争论编程语言?

2021年最后一天,我在公众号发表了文章《Dubbo为什么用Go重写》,在各个平台的阅读量和打开率都挺高,也有各位大佬纷纷转载,在这里也顺便感谢各位大佬。虽然自己公众号没有开通留言,但我也会去看其他平台或转载文章的评论。我发现大家的注意力更多的是在编程语言上,比如下面这些:看了这些评论想起了一个段子:某女:你能让这个论坛的人都吵起来,我今晚就跟你走。某软件工程师:PHP是最好的语言!某论坛真的就炸锅了,各种吵架……某女:服了你了,我们走吧,你想干啥都行。某软件工程师:今天不行,我

2022-01-21 10:56:42 596 5

原创 服务探活的五种方式

几个月前,我在《4个实验,彻底搞懂TCP连接的断开》这篇文章中给自己挖了个坑:文中提到的实际问题就是服务探活,今天来填上这个坑。在微服务架构下,服务提供方(Provider)的节点一般不止一个,消费方(Consumer)根据负载均衡算法挑选一个健康的节点进行调用。识别Provider节点是否健康,这便是服务探活 要讨论的内容。健康的节点可定义为能正常响应Consumer请求的节点,不健康自然是不能正常响应Consumer请求的节点不健康的原因可能是物理上的断电、断网、硬件故障,也可能是网络延迟、

2022-01-13 11:20:13 3916 7

原创 Dubbo为什么要用Go重写

先说两句我常常在散步时思考很多技术上的「为什么问题」,有时一个问题会想很久,直到问题的每一个点都能说服自己时,才算完结。于是想把这些思考记录下来,形成文章,可以当做一个新的系列。这些文章中你可能看不到代码,但能窥探到一些容易被忽视的问题,以及问题更深层次的「为什么」。今天带来第1篇,Dubbo为什么要用Go重写?诞生于阿里巴巴,2011年开源的Dubbo已经走过了10个年头。在2019年,它被用Go重写并开源,如今两年过去,已经从当初的V1.0.0版本发展到了V3.0.0,截止目前star数3.8K

2021-12-31 11:29:07 592 1

原创 Sentinel-Go 源码系列(三)滑动时间窗口算法的工程实现

要说现在工程师最重要的能力,我觉得工程能力要排第一。就算现在大厂面试经常要手撕算法,也是更偏向考查代码工程实现的能力,之前在群里看到这样的图片,就觉得很离谱(大概率是假的~)。算法与工程实现在 Sentinel-Go 中,一个很核心的算法是流控(限流)算法。流控可能每个人都听过,但真要手写一个,还是有些困难。为什么流控算法难写?以我的感觉是算法和工程实现上存在一定差异,虽然算法好理解,但却没法照着实现。举个例子,令牌桶算法很好理解,只需给定一个桶,以恒定的速率往桶内放令牌,满了则丢弃,执行任务前

2021-12-20 13:01:09 287

原创 我好像发现了一个Go的Bug?

从一次重构说起这事儿还得从一次重构优化说起。最近在重构一个路由功能,由于路由比较复杂,需求变化也多,于是想通过责任链模式来重构,刚好这段时间也在 Sentinel-Go 中看到相关源码。用责任链模式,最大的好处是可以针对每次请求灵活地插拔路由能力,如:这样实现会在每次请求到来时去new 出整个责任链,可以预见对象会频繁的创建、销毁。对 Java 来说,对象池并不推荐,除非对象的创建特别费力,像一个连接对象,否则线程之间的锁竞争绝对比直接分配内存的消耗要多的多~但 Go 不一样,它内置的 syn

2021-12-08 13:05:47 231

原创 我在组内的Java问题排查分享

前言最近翻看以前写的 PPT, 发现了在2019年做的一次技术分享,关于 Java 问题排查,由于没什么公司机密可言,整理下分享给大家~线上问题处理流程直接放PPT截图吧,现在看来依然不过时问题排查可从三个方面入手知识:有些问题,思考一下就有答案,就像传说中多隆那样,回忆下就知道第83行代码有问题~工具:当然不是每个人都能做到过目不忘,也有可能这代码完全不是你写的,这时就需要靠工具来定位问题数据:程序运行时产生的数据,也能提供很多线索知识知识有很多方面,这里简单列举一下:语言(

2021-12-01 19:20:58 571 1

原创 记一次提升18倍的性能优化

背景最近负责的一个自研的 Dubbo 注册中心经常收到 CPU 使用率的告警,于是进行了一波优化,效果还不错,于是打算分享下思考、优化过程,希望对大家有一些帮助。自研 Dubbo 注册中心是个什么东西,我画个简图大家稍微感受一下就好,看不懂也没关系,不影响后续的理解。Consumer 和 Provider 的服务发现请求(注册、注销、订阅)都发给 Agent,由它全权代理Registry 和 Agent 保持 Grpc 长链接,长链接的目的主要是 Provider 方有变更时,能及时推送给相应的

2021-11-21 13:39:08 534

原创 skywalking内存泄露排查

背景介绍最近写的关于dubbo内存泄露稍微复杂了一点,很多人表示看不明白,想到之前遇到的比较简单的内存泄露问题,更容易入门,于是拿出来分享一下。为了做微服务的熔断降级限流,引入了sentinel组件,对于sentinel引入到公司内部使用只是做了一些简单的定制化,如持久化配置规则,监控数据收集展示,后台登录权限整合等等。在功能验证通过的情况下,也做了压测,性能符合要求,于是就推上了生产做线上灰度。刚开始没问题,直到有一天线上配置了一条降级规则,并且触发了,监控告警就炸了锅。开始是服务出现大量慢请求

2021-11-11 18:53:15 2271

原创 Sentinel-Go 源码系列(二)|初始化流程和责任链设计模式

上节中我们知道了 Sentinel-Go 大概能做什么事情,最简单的例子如何跑起来其实我早就写好了本系列的第二篇,但迟迟没有发布,感觉光初始化流程显得有些单一,于是又补充了责任链模式,二合一,内容显得丰富一些。初始化流程初始化做了什么Sentinel-Go 初始化时主要做了以下2件事情:通过各种方式(文件、环境变量等)载入全局配置启动异步的定时任务或服务,如机器 cpu、内存信息收集、metric log 写入等等初始化流程详解提供的 API上节例子中,我们使用了最简单的初始化方式f

2021-11-09 12:37:58 204

原创 Sentinel在docker中获取CPU利用率的一个BUG

Sentinel简介微服务治理中限流、熔断、降级是一块非常重要的内容。目前市面上开源的组件也不是很多,简单场景可以使用Guava,复杂场景可以选用Hystrix、Sentinel。今天要说的就是Sentinel,Sentinel是一款阿里开源的产品,只需要做较少的定制开发即可大规模线上使用。从使用感受上来说,它有以下几个优点:轻量级,对性能损耗几乎可以忽略不计,只有在单机上万QPS才稍有体现;开箱即用的控制台,可以动态灵活地配置各种限流降级规则,持久化规则需要定制插件;支持单机、集群限流,支持无侵

2021-11-04 19:29:13 286

原创 dubbo 配置 loadbalance 不生效?撸一把源码

背景很久之前我给业务方写了一个 dubbo loadbalance 的扩展(为了叙述方便,这个 loadbalance 扩展就叫它 XLB 吧),这两天业务方反馈说 XLB 不生效了我心想,不可能啊,都用了大半年了~排查于是我登上不生效的 consumer 机器进行排查,还好我留了一手,当 XLB 加载时,会打印一行日志看了下这个服务,并没有打印日志,说明 XLB 并没有加载成功于是,我就去问对应的开发,有按照我的文档配置 loadbalance 吗?答复:完全按照文档配置这下我就有点不相信了

2021-11-03 12:51:19 847

原创 从nacos客户端的TIME_WAIT说起

问题起因前段时间调研nacos,用来代替zookeeper当作dubbo的注册中心,使用的是nacos的1.1.4版本。还用了nacosSync,一款nacos提供的迁移工具,可将常见的注册中心上的服务同步到nacos上。这玩意很不好用,至少不是生产级别的工具。但这与本文无关,后面会专门写一篇文章来介绍这个同步工具的优缺点,以及生产级别还需要做哪些改造。开始测试时,总有服务莫名奇妙的下线了,一直找不到原因。后来在调研的过程中,nacos发布了1.2.0-beta.0版本,于是去github上看了1.2.0

2021-11-01 12:58:15 804

原创 AtomicStampedReference是怎样解决CAS的ABA问题

本文已收录 https://github.com/lkxiaolou/lkxiaolou 欢迎star。什么是ABA问题但凡对Java有一点深入就会知道 CAS,即 compareAndSwap。在Java中使用 Unsafe 类提供的native方法可以直接操作内存,其中就有对compareAndSwap的实现。public final native boolean compareAndSwapObject(Object var1, long var2, Object var4, Object .

2021-10-27 09:54:49 242

原创 4个实验,彻底搞懂TCP连接的断开

前言看到这个标题你可能会说,TCP 连接的建立与断开,这个我熟,不就是三次握手与四次挥手嘛。且慢,脑海中可以先尝试回答这几个问题:四次挥手是谁发起的?如果断电/断网了连接会断开吗?什么情况下没有四次挥手连接也会断开?这不是面试,而是遇到了实际问题,至于是什么问题,容我先卖个关子,本文也不会解答,后面会有一篇专门的文章来说遇到的问题是啥,所以在讲实际问题之前,先弄懂理论。正常断开我们由浅入深,先了解正常情况下 TCP 连接是如何断开的,下图为 TCP 三次握手与四次挥手的经典图(来自《TCP

2021-10-26 12:09:20 399

原创 Sentinel-Go 源码系列(一)|开篇

大家好呀,打算写一个 Go 语言组件源码分析系列,一是为了能学习下 Go 语言,看下别人是怎么写 Go 的,二是也掌握一个组件。本次选择了 Sentinel-Go,一是对 Java 版本的 Sentinel 算是有一些了解,也在生产上落地过,二是感觉他的代码应该不会太复杂(仅仅是感觉),三是在云原生越来越热的趋势下,用 Go 实现的限流降级容错应该是比较通用的。源码阅读本身是枯燥的,我尽量用容易理解的语言来描述,希望大家也多支持我的文章,点个赞、在看和关注就是对我最大的支持。背景Sentinel

2021-10-19 12:38:40 185

libguid40.dll和libmmd.dll

python MySQL模块所需的两个动态链接库文件

2013-04-25

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除