自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

crossoverJie专栏

会crossover的程序猿

  • 博客(183)
  • 收藏
  • 关注

原创 为自己搭建一个分布式 IM(即时通讯) 系统

前言大家新年快乐!新的一年第一篇技术文章希望开个好头,所以元旦三天我也没怎么闲着,希望给大家带来一篇比较感兴趣的干货内容。老读者应该还记得我在去年国庆节前分享过一篇《设计一个百万级的消息推送系统》;虽然我在文中有贴一些伪代码,依然有些朋友希望能直接分享一些可以运行的源码;这么久了是时候把坑填上了。目录结构:本文较长,高能预警;带好瓜子板凳。于是在之前的基础上我完善了一些...

2019-01-02 08:10:42 5758 2

原创 设计一个百万级的消息推送系统

前言首先迟到的祝大家中秋快乐。最近一周多没有更新了。其实我一直想憋一个大招,分享一些大家感兴趣的干货。鉴于最近我个人的工作内容,于是利用这三天小长假憋了一个出来(其实是玩了两天

2018-09-25 08:32:59 769 2

原创 1K star+ 的项目是如何炼成的?

前言首先标题党一下,其实这篇文章主要是记录我的第二个过 1K star 的项目 Java-Interview,顺便分享下其中的过程及经验。需求选择Java-Interview之所以要做这个项目主要是当时我正在面阿里的两个部门,非常幸运的是技术面都过了。其中的过程真是让我受益匪浅更是印象深刻,所以就想把期间的问题记录下来,加上自己的理解希望能对其他朋友起到帮助。...

2018-05-15 08:40:52 426

原创 秒杀架构实践

前言之前在 Java-Interview 中提到过秒杀架构的设计,这次基于其中的理论简单实现了一下。 本次采用循序渐进的方式逐步提高性能达到并发秒杀的效果,文章较长请准备好瓜子板凳(liushuizhang��)。本文所有涉及的代码:https://github.com/crossoverJie/SSMhttps://github.com/crossoverJie...

2018-05-09 10:05:29 1064

原创 五分钟k8s入门到实战-应用配置

ConfigMap.png背景在前面三节中已经讲到如何将我们的应用部署到 k8s 集群并提供对外访问的能力,x现在可以满足基本的应用开发需求了。现在我们需要更进一步,使用 k8s 提供的一些其他对象来标准化我的应用开发。首先就是 ConfigMap,从它的名字也可以看出这是用于管理配置的对象。ConfigMap不管我们之前是做 Java、Go 还是 Python 开发都会使用到配置文件,而 Con...

2023-09-27 08:08:34 300

原创 Go 语言史诗级更新-循环Bug修复

背景前两天 Golang 的官方博客更新了一篇文章:Fixing For Loops in Go 1.22看这个标题的就是修复了 Go 循环的 bug,这真的是史诗级的更新;我身边接触到的大部分 Go 开发者都犯过这样的错误,包括我自己,所以前两年我也写过类似的博客:简单的 for 循环也会踩的坑先来简单回顾下使用使用 for 循环会碰到的问题:list:=[]*Demo{{"a"},{"b...

2023-09-25 08:08:26 91

原创 Github的一个奇技淫巧

Github的一个奇技淫巧.png背景前段时间给 VictoriaLogs 提交了一个 PR:https://github.com/VictoriaMetrics/VictoriaMetrics/pull/4934本来一切都很顺利,只等合并了,但在临门一脚的时候社区维护人员问我可否给 git commit 加上签名。于是我就默默的调试到了凌晨四点????image.png以前我也没怎么注意过这个选项,经...

2023-09-19 08:08:11 32

原创 五分钟k8s实战-使用Ingress

ingress.png背景前两章中我们将应用部署到了 k8s 中,同时不同的服务之间也可以通过 service 进行调用,现在还有一个步骤就是将我们的应用暴露到公网,并提供域名的访问。这一步类似于我们以前配置 Nginx 和绑定域名,提供这个能力的服务在 k8s 中成为 Ingress。通过这个描述其实也能看出 Ingress 是偏运维的工作,但也不妨碍我们作为研发去了解这部分的内容;了解整个系统...

2023-09-15 08:08:10 268

原创 Golang 基础面试题 01

Golang 面试题合集.png背景在之前的文章中分享了 k8s 相关的面试题,本文我们重点来讨论和 k8s 密切相关的 Go 语言面试题。这几年随着云原生的兴起,大部分后端开发者,特别是 Java 开发者都或多或少的想学习一些 Go 相关的技能,所以今天分享的内容比较初级,适合 Go 语言初学者。image.png本文内容依然来自于这个仓库https://github.com/bregman-a...

2023-09-13 08:08:07 179

原创 k8s入门到实战--跨服务调用

service.png背景在做传统业务开发的时候,当我们的服务提供方有多个实例时,往往我们需要将对方的服务列表保存在本地,然后采用一定的算法进行调用;当服务提供方的列表变化时还得及时通知调用方。student:url:-192.168.1.1:8081-192.168.1.2:8081这样自然是对双方都带来不少的负担,所以后续推出的服务调用框架都...

2023-09-08 08:08:45 456

原创 k8s 入门到实战--部署应用到 k8s

k8s 入门到实战 01.png本文提供视频版:背景最近这这段时间更新了一些 k8s 相关的博客和视频,也收到了一些反馈;大概分为这几类:公司已经经历过服务化改造了,但还未接触过云原生。公司部分应用进行了云原生改造,但大部分工作是由基础架构和运维部门推动的,自己只是作为开发并不了解其中的细节,甚至 k8s 也接触不到。还处于比较传统的以虚拟机部署的传统运维为主。其中以第二种占大多数,虽然公司进行了...

2023-09-06 08:09:00 779

原创 使用 SQL 的方式查询消息队列数据以及踩坑指南

Pulsar-sql.png背景为了让业务团队可以更好的跟踪自己消息的生产和消费状态,需要一个类似于表格视图的消息列表,用户可以直观的看到发送的消息;同时点击详情后也能查到消息的整个轨迹。消息列表点击详情后查看轨迹原理介绍由于 Pulsar 并没有关系型数据库中表的概念,所有的数据都是存储在 Bookkeeper 中,为了模拟使用 SQL 查询的效果 Pulsar 提供了 Presto (现在已经...

2023-08-31 08:08:43 842

原创 VictoriaLogs:一款超低占用的 ElasticSearch 替代方案

image.png背景前段时间我们想实现 Pulsar 消息的追踪流程,追踪实现的效果图如下:实现其实比较简单,其中最重要的就是如何存储消息。消息的读取我们是通过 Pulsar 自带的 BrokerInterceptor 实现的,对这个感兴趣的朋友后面会单独做一个分享。根据这里的显示内容我们大概需要存储这些信息:客户端地址消息发布时间分发消费者、订阅者名称ACK 消费者、订阅者名称消息 ID最终...

2023-08-25 08:08:26 432

原创 k8s 常见面试题

前段时间在这个视频中分享了 https://github.com/bregman-arie/devops-exercises 这个知识仓库。这次继续分享里面的内容,本次主要以 k8s 相关的问题为主。k8s 是什么,为什么企业选择使用它k8s 是一个开源应用,给用户提供了管理、部署、扩展容器的能力,以下几个例子更容易理解:你可以将容器运行在不同的机器或节点中,并且可以将一些变化同步给这些容器,简单...

2023-08-18 08:08:47 808

原创 新手如何快速参与开源项目

image.png前言开源这件事情在软件开发领域一直是一个高频话题,我们工作中不管是使用到的工具还是第三方库都离不开开源的支持。近期由于工作的原因,我需要经常和 Apache Pulsar 社区沟通,同时也会将日常碰到的问题反馈给社区,包括一些 bug ,一些我能修的也是顺带就提了一些 PR。之前或多或少我也参与过其他的开源社区,但和现在的还是有些许的不同:以前我更多的是个人开源项目,偶尔也会有其...

2023-08-07 08:15:10 35

原创 从 Pulsar Client 的原理到它的监控面板

image.png背景前段时间业务团队偶尔会碰到一些 Pulsar 使用的问题,比如消息阻塞不消费了、生产者消息发送缓慢等各种问题。虽然我们有个监控页面可以根据 topic 维度查看他的发送状态,比如速率、流量、消费状态等信息。image.png但也有几个问题:无法在应用维度查看他所依赖的所有 topic 的各种状态。监控的信息还不够,比如发送/消费延迟、发送/消费失败等数据。总之就是缺少一个全...

2023-08-03 08:15:02 37

原创 使用 ChatGPT 碰到的坑

最近在使用 ChatGPT 的时候碰到一个小坑,因为某些特殊情况我需要使用 syslog 向 logbeat 中发送日志。由于这是一个比较古老的协议,确实也没接触过,所以就想着让 ChatGPT 帮我生成个例子。原本我已经在 Go 中将这个流程跑通,所以其实只需要将代码转换为 Java 就可以了,这个我还是很信任 ChatGPT 的;现在我挺多结构化数据的转换都交给了 ChatGPT,省去了不...

2023-07-19 08:06:08 631

原创 Grafana 的奇技淫巧

Grafana 是一款强大的可视化工具,不止是用于 Prometheus 做数据源,还可以集成数据库、日志等作为数据源整体使用。最近我在配置一个监控面板,其中的数据由 Prometheus 和 MySQL 组成;简单来说就是一个指标的查询条件是从数据库中来的。pulsar_subscription_back_log_no_delayed{topic=~"$topic",subscription=~...

2023-06-26 08:04:21 54

原创 在这个大环境下我是如何找工作的

蛮久没更新了,本次我想聊聊找工作的事情,相信大家都能感受到从去年开始到现在市场是一天比一天差,特别是在我们互联网 IT 行业。已经过了 18 年之前的高速发展的红利期,能做的互联网应用几乎已经被各大公司做了个遍,现在已经进入稳定的存量市场,所以在这样的大背景下再加上全世界范围内的经济不景气我想每个人都能感受到寒意。我还记得大约在 20 年的时候看到网上经常说的一句话:今年将是未来十年最好的一年。由...

2023-06-20 08:15:12 66

原创 云原生背景下如何配置 JVM 内存

image.png背景前段时间业务研发反馈说是他的应用内存使用率很高,导致频繁的重启,让我排查下是怎么回事;在这之前我也没怎么在意过这个问题,正好这次排查分析的过程做一个记录。首先我查看了监控面板里的 Pod 监控:发现确实是快满了,而此时去查看应用的 JVM 占用情况却只有30%左右;说明并不是应用内存满了导致 JVM 的 OOM,而是 Pod 的内存满了,导致 Pod 的内存溢出,从而被 k8...

2023-05-15 08:08:53 257

原创 从源码彻底理解 Prometheus/VictoriaMetrics 中的 relabel/metric_configs 配置

背景最近接手维护了公司的指标监控系统,之后踩到坑就没站起来过。。本次问题的起因是我们配置了一些指标的删除策略没有生效:-action:drop_metricsregex:"^envoy_.*|^url\_\_\_\_.*|istio_request_bytes_sum"与这两个容易引起误解的配置relabel_configs/metric_relabel_configs有关...

2023-03-13 08:08:32 123

原创 通过 Pulsar 源码彻底解决重复消费问题

背景最近真是和 Pulsar 杠上了,业务团队反馈说是线上有个应用消息重复消费。而且在测试环境是可以稳定复现的,根据经验来看一般能稳定复现的都比较好解决。定位问题接着便是定位问题了,根据之前的经验让业务按照这几种情况先排查一下:通过排查:1,2可以排除了。没有相关日志存在异常,但最外层也捕获了,所以不管有无异常都会 ACK。第三个也在消费的入口和提交消息出计算了时间,最终发现都是在2s左右 ACK...

2023-02-27 08:08:45 91

原创 一个诡异的 Pulsar InterruptedException 异常

背景今天收到业务团队反馈线上有个应用往 Pulsar 中发送消息失败了,经过日志查看得知是发送消息时候抛出了 java.lang.InterruptedException 异常。和业务沟通后得知是在一个 gRPC 接口中触发的消息发送,大约持续了半个小时的异常后便恢复正常了,这是整个问题的背景。前置排查拿到该问题后首先排查下是否是共性问题,查看了其他的应用没有发现类似的异常;同时也查看了 Puls...

2023-02-23 08:08:49 76

原创 Istio 升级后踩的坑

背景前段时间我们将 istio 版本升级到 1.12 后导致现有的应用监控有部分数据丢失(页面上显示不出来)。一个是应用基础信息丢失。再一个是应用 JVM 数据丢失。接口维度的监控数据丢失。修复基础信息首先是第一个基础信息丢失的问题,页面上其实显示的是我们的一个聚合指标istio_requests_total:source:rate1m。聚合后可以将多个指标合并为一个,减少系统压力具体可以参考 I...

2023-02-20 08:08:56 95

原创 Pulsar负载均衡原理及优化

前言前段时间我们在升级 Pulsar 版本的时候发现升级后最后一个节点始终没有流量。虽然对业务使用没有任何影响,但负载不均会导致资源的浪费。和同事沟通后得知之前的升级也会出现这样的情况,最终还是人工调用 Pulsar 的 admin API 完成的负载均衡。这个问题我尝试在 Google 和 Pulsar 社区都没有找到类似的,不知道是大家都没碰到还是很少升级集群。我之前所在的公司就是一个版本走到...

2023-02-07 08:08:39 156

原创 2022 年度总结

一转眼 2022 年又过去了,不多不少距离上次写年终总结过去了 365 天;今年的艰难情况想必大家都亲身经历过了;如果要举行卖惨大会的话今年也许我能排的上号。生活今年对大家影响最大的事应该都是疫情了,在年底的最后几天家里的老人还是没顶住疫情的冲击离开了,原以为成年后我已经看淡了生老病死,直到我现在敲下这几行字时才发现这么难过。悲伤的事暂且不提,还是聊聊今年生活上的好事吧。健身首先是健身这个我念叨了...

2023-01-18 08:08:52 202

原创 对 Pulsar 集群的压测与优化

前言这段时间在做 MQ(Pulsar)相关的治理工作,其中一个部分内容关于消息队列的升级,比如:一键创建一个测试集群。运行一批测试用例,覆盖我们线上使用到的功能,并输出测试报告。模拟压测,输出测试结果。本质目的就是想直到新版本升级过程中和升级后对现有业务是否存在影响。一键创建集群和执行测试用例比较简单,利用了 helm 和 k8s client 的 SDK 把整个流程串起来即可。压测其实稍微麻烦一...

2023-01-16 08:08:32 344

原创 面试的时候别再说你不会设计模式了

前言最近不出意外的阳了,加上刚入职新公司不久,所以也没怎么更新;这两天好些后分享一篇前段时间的一个案例:最近在设计一个对某个中间件的测试方案,这个测试方案需要包含不同的测试逻辑,但相同的是需要对各个环节进行记录;比如统计耗时、调用通知 API 等相同的逻辑。如果每个测试都单独写这些逻辑那无疑是做了许多重复工作了。基于以上的特征很容易能想到模板方法这个设计模式。这是一种有上层定义框架,下层提供不同实...

2022-12-27 08:08:32 359

原创 彻底理解闭包实现原理

前言闭包对于一个长期写 Java 的开发者来说估计鲜有耳闻,我在写 Python 和 Go 之前也是没怎么了解,光这名字感觉就有点"神秘莫测",这篇文章的主要目的就是从编译器的角度来分析闭包,彻底搞懂闭包的实现原理。函数一等公民一门语言在实现闭包之前首先要具有的特性就是:First class function 函数是第一公民。简单来说就是函数可以像一个普通的值一样在函数中传递,也能对变量赋值。先...

2022-10-24 08:08:09 171

原创 手写编程语言-如何为 GScript 编写标准库

在本文开始之前插播一个题外话,最近我正在找工作,如果重庆或远程有相关坑位介绍的话请私信我一下;同时还有两个测试妹子,有测试相关坑位也请联系我。非常感谢,事成后请吃大餐。版本更新最近 GScript 更新了 v0.0.11 版本,重点更新了:Docker 运行环境新增了 byte 原始类型新增了一些字符串标准库 Strings/StringBuilder数组切片语法:int[] b = a[1: l...

2022-10-15 17:10:18 241

原创 用自己的编程语言实现了一个网站(增强版)

gscript08-min.jpg前言前段时间在《用自己的编程语言实现了一个网站》用介绍了用 GScript 写的一个简单“网站”,虽然是打上引号的;页面长这样:GScript-index.jpg看起来确实非常的挫,其实之前一直也想做一个 GScript 的在线 playground ,于是国庆期间学了一点 皮毛 Vue 加上老弟的帮忙(他是前端开发),最终完成了下面这个网站:https://g...

2022-10-08 08:15:09 144

原创 手写编程语言-递归函数是如何实现的?

前言本篇文章主要是记录一下在 GScript 中实现递归调用时所遇到的坑,类似的问题在中文互联网上我几乎没有找到相关的内容,所以还是很有必要记录一下。在开始之前还是简单介绍下本次更新的 GScript v0.0.9 所包含的内容:支持可变参数优化 append 函数语义优化编译错误信息最后一个就是支持递归调用先看第一个可变参数://formatsaccordingtoaformatspe...

2022-09-27 08:08:34 106

原创 手写编程语言-实现运算符重载

前言先带来日常的 GScript 更新:新增了可变参数的特性,语法如下:intadd(strings,int...num){println(s);intsum=0;for(inti=0;i<len(num);i++){intv=num[i];sum=sum+v;}returnsum;}intx=add("abc",1,2...

2022-09-19 08:09:02 82

原创 里程碑!用自己的编程语言实现了一个网站

前言在上一篇《终于实现了一门属于自己的编程语言》 介绍了自己写的编程语言 GScript ,在文中提到希望最终可以使用 GScript 开发一个网站。到目前为止确实是做到了,首页地址:https://gscript.crossoverjie.top/index要称为一个网站确实有点勉强,不过也是一个动态网页,因为返回的是 HTML,所以在当前阶段只要不嫌麻烦其实也能写一个“合格”的网站,有点像以前...

2022-09-14 08:10:24 72

原创 终于实现了一门属于自己的编程语言

前言都说程序员的三大浪漫是:操作系统、编译原理、图形学;最后的图形学确实是特定的专业领域,我们几乎接触不到,所以对我来说换成网络更合适一些,最后再加上一个数据库。这四项技术如果都能掌握的话那岂不是在 IT 行业横着走了,加上这几年互联网行业越来越不景气,越底层的技术就越不可能被替代;所以为了给自己的 30+ 危机留点出路,从今年上半年开始我就逐渐开始从头学习编译原理。功夫不负有心人,经过近一个月的...

2022-09-07 08:15:39 170

原创 一门语言的作用域和函数调用是如何实现的

前言上次利用 Antlr 重构一版 用 Antlr 重构脚本解释器 之后便着手新增其他功能,也就是现在看到的支持了作用域以及函数调用。intb=10;intfoo(intage){for(inti=0;i<10;i++){age++;}returnb+age;}intadd(inta,intb){inte=foo(10);e=e+...

2022-08-17 08:08:25 64

原创 用 Antlr 重构脚本解释器

前言在上一个版本实现的脚本解释器 GScript 中实现了基本的四则运算以及 AST 的生成。当我准备再新增一个 % 取模的运算符时,会发现工作很繁琐而且几乎都是重复的;主要是两步:需要在词法解析器中新增对 % 符号的支持。在语法解析器遍历 AST 时对 % token 实现具体逻辑。其中的词法解析和遍历 AST 完全是重复工作,所以我们可否能够简化这两步呢?AntlrA...

2022-08-08 08:08:52 90

原创 用位运算为你的程序加速

前言最近在持续优化之前编写的 JSON 解析库 xjson,主要是两个方面的优化。第一个是支持将一个 JSONObject 对象输出为 JSON 字符串。这点在上个版本中只是利用自带的 Print 函数打印数据:funcTestJson4(t*testing.T){str:=`{"people":{"name":{"first":"bob"}}}`fi...

2022-08-01 08:10:40 74 1

转载 JetBrains IDE 中的隐藏宝石技巧

原文链接在日常使用 Goland 时,团队收集了一些可以帮助我们专注于创造的同时减少重复工作的小技巧。如果你是在 IDEA 中使用的 Go 插件,或者其他 IntelliJ 的产品,同样也有这些特性。行排序当你在查看文本文件时,行排序非常有用;按照字母排序后能够帮我们更好的阅读,同时也容易找到重复的行。在菜单栏中使用 Edit | Sort Lines or Edit |...

2022-07-28 08:15:06 56

原创 XJSON 是如何实现四则运算的?

前言在上一篇中介绍了 xjson 的功能特性以及使用查询语法快速方便的获取 JSON 中的值。同时这次也更新了一个版本,主要是两个升级:对转义字符的支持。性能优化,大约提升了30%⬆️。转义字符先说第一个转义字符,不管是原始 JSON 字符串中存在转义字符,还是查询语法中存在转义字符都已经支持,具体用法如下:str=`{"1a.b.[]":"b"}`get=G...

2022-07-12 08:15:34 102

空空如也

空空如也

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

TA关注的人

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