自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(49)
  • 收藏
  • 关注

原创 网络异常之后为什么MOA地址列表错乱了?

xxoo-im-connector 业务的问题由于缺失关键日志可能无法提供决定性的证据,但是根据现象我们对各种可能性进行了推断分析,最终定位可能是 Jedis 对异常处理不完善导致的。最后在总结一下,由于 redis 协议比较简单,在协议层面没有设计唯一的id来关联请求和响应,所以请求和响应的关联完全依赖“顺序”,对于连接和处理逻辑正常的情况下,根据“顺序”关联是没有问题的,但是一旦出现异常情况,“顺序”就无法保证了,对于应用层面就会出现请求和响应错乱的情况。

2022-10-11 22:59:00 340 1

原创 是什么引起数据库响应超时?

我们最后总结一下问题原因:业务写入突增导致MySQL服务对应的底层EBS实例IOPS飙升,短时间超出限额6000导致性能受限,引起业务超时;EBS实际的IOPS可以通过VolumeIdleTime指标做更精确的计算。

2022-09-20 15:04:52 1103

原创 A tour of gRPC:09 - gRPC Interceptor 拦截器

​好了,我们接下来进行一个小测试,看我们的拦截器是否起到了身份验证和鉴权,我们先用一个user 权 限的账号(种子用户设置在 server/main.go 中) 尝试进行 createLaptop。​拦截器可以在server和client上添加,服务端拦截器会在实际方法被调用前先执行,它有多种用途,例如:日志记录,跟踪,速率限制,身份验证和授权。​11. 将之前 main/client.go 中的逻辑,抽到新建的 client/laptop_client.go 中。可以看到拦截器的运行符合预期。...

2022-08-31 16:49:36 334 1

原创 A tour of gRPC:08 - gRPC 反射 与 Evans 客户端

在上一篇中,我们尝试了 bindirectional-straming 并且测试了它的跨语言调用能力,在本篇中,我们将 尝试开启 server 端的反射功能,并依据反射功能和 evans 客户端进行rpc测试。gRpc 反射是服务器的拓展,帮助客户构造请求而不需要我们事先生成stub,这使得我们可以再server完成后立刻进行远程调用测试,而不需手动构建客户端。​至此为止,我们已经在服务端成功开启了 gRPC 的反射功能,接下来我们安装 Evans 客户端。​接着,我们收到了来自服务端的返回。

2022-08-24 15:57:12 425

原创 A tour of gRPC:07 - gRPC bidirectional straming 双向流

​同上,可以看到,client 发送完3条create laptop后,server 返回了评分的提示,此时client 再次发送y 后,server 接收到后会进行评分,并进行返回。​可以看到,client 发送完3条create laptop后,server 返回了评分的提示,此时client 再次发送y后, server 接收到后会进行评分,并进行返回。也就是说,client和server在一次连接中都发送了多次消息。​7. 接下来实现客户端,在 Generator 中添加一个新随机生成分数的方法。.

2022-08-11 17:18:23 231

原创 A tour of gRPC:06 - gRPC client straming 客户端流

在上一篇中,我们尝试了使用serverstraming的调用形式,在创建了十个Laptop并发送了一个筛选条件后,由server多次返回符合筛选条件的结果,并且验证了这种调用形式的跨语言调用能力。在本篇中,我们将尝试使用clientstraming即client发送多次内容,而server在接收完所以内容后,返回一次响应。本次我们将利用clientstraming这种调用形式实现图像传输的功能。...

2022-08-02 15:15:47 131

原创 A tour of gRPC:05 - gRPC server straming 服务端流

在上一篇中,我们实现了gRPC中的unarycall,即客户端发一个请求,服务端回复一个响应。并尝试了它在跨语言的情型下调用。在本篇中,我们将尝试实现serverstraming即客户端发送一个请求,服务端回复多个响应,并同样尝试跨语言的调用。...

2022-07-28 14:46:39 157

原创 执行ls /dev/pts为什么这么慢?

服务器的安全agent新增了一个扫描插件,插件上线以后,DBA反馈客户端访问Redis出现了耗时高的情况。赶紧开始救火啦~

2022-07-20 16:19:29 474

原创 A tour of gRPC:04 - gRPC unary call 一元调用

在上一篇中,我们尝试了proto 的序列化功能,并尝试进行了跨语言的序列化。而在本篇中,我们将尝 试实现一个简单的gRPC 一元调用(unary call),通过client调用server的创建方法创建一个Laptop对 象,并存储在server的内存中,并同样尝试跨语言的调用。1. 编写一个laptop_service.proto,让proto帮助我们生成stub​该proto 包含三个部分CreateLaptopRequest (创建请求)CreateLaptopResponse (创建响应)Lapt

2022-07-12 14:51:46 545

原创 A tour of gRPC:03 - proto序列化/反序列化

在上一篇中,我们安装配置了protoc,编写了一些简单的message,并使用protoc自动生成了代码。在本篇中,我们将尝试proto的序列化功能,并且尝试在不同的语言之间进行序列化和反序列化。

2022-07-07 14:56:02 563

原创 A tour of gRPC:02 - 从proto生成代码

在上一部分,我们了解了gRPC的一些基础理论,接下来我们将尝试编写proto文件,并通过配套的生成 器生成Java和golang的代码。在实践的部分我将尝试构建一个笔记本销售平台,方便我们在实践中进行 学习。1. 新建项目2. 创建 proto 文件夹3. 添加 processor_message.proto 文件夹 并 添加一下内容:​如何定义协议信息?使用 message 后面跟消息名称,在其消息块内,定义其所有字段,格式如下:a. 消息名称格式应为大驼峰命名b. 字段名格式应为小写蛇形c. 数据类型有

2022-06-29 15:58:37 309

原创 A tour of gRPC:01 - 基础理论

在实际工程中后端服务实现方式往往不止一种,并且由于技术或者业务的限制,通常会存在着多种语言 编写的服务。而服务间为了相互通讯就必须使用一种统一的 API 契约达成一种一致的协议。该协议要规 定诸如:通讯信道,身份验证机制、负载格式、数据模型和如何处理异常情况。当然我们希望通讯可以做到高效(快速且轻量),由于微服务间服务信息交换的数量通常是巨大的,所以通信也理应越快越好。同时在例如移动应用或其他网速和带宽是有限的情景下,有一个轻量级的通信协议与后端服务进行交互非常重要。最后,我们也希望通信尽可能的简单,例如我

2022-06-23 14:55:42 204

原创 域成员服务器怎么会突然脱域?

大概去年Q4的时候,写了一个脚本用来监控每台虚拟化宿主机上的虚拟机数量,包括总数量、运行状态的数量,非运行状态的数量。 当时的主要初衷是有团队成员创建虚拟机的时候,同组内的同学可以及时收到zabbix通知级别的告警,本来只是写着玩,在管理方面也许能起到辅助作用。没想到这个通知级别的告警这次竟起到了大的作用。问题发现4月28日 19:11分,组内一名同学注意到了1条通知级别告警,内容是"一台虚拟化宿主机上的虚拟机数量突然变成0了"。​但是并没有服务或者服务器down的告警。于是该同学打

2022-05-25 15:44:52 2154

原创 如何评估服务是否内存泄漏了?

0. 问题最近业务方发布了 user-authentication 服务,但是不到一天就被 OOM killer 杀死了,从监控上看发布后内存占用在持续增加。​哪里吃内存了?首先看 GC 日志,Java Heap 和 Metaspace 很正常,所以怀疑是堆外内存泄漏了,而这个版本加了一个 sec-crypto JNI库,自然成了重点怀疑对象,通过看代码也很快定位到了没有ReleaseStringUTFChars的问题,所以很快做了修复发版。如果没有明显的怀疑对象,如何排查堆外内存泄漏

2022-05-23 11:12:17 2310

原创 Google Guava中EventBus使用不当会导致什么故障?

4.26号凌晨3点业务服务开始报警,现象表现为消费用户消息的kafka集群出现堆积,导致用户在聊天室房间内的状态更新延迟,最终用户在聊天室房间的IM长链接断开,用户在聊天室中无法发消息,无法上麦。在问题排查过程中,了解问题流程图如下:其中主要分为5个模块,分别为:用户、im长链接器、kafka、im-session服务、api服务。当用户与im-connector建立完长链接以后,用户进入、退出聊天室以及与聊天室的心跳事件均会通过im-connector写入下游的kafka.

2022-05-20 11:40:37 1456

原创 当家里小神兽睡醒乱爬导致摔下床后,我决定做点啥

去年3月底的时候小麦子来到了我家,到今天已经1岁1个月多了,现在这个小家伙已经能熟练爬,也能扶墙走几步了。前些天,小麦子一个人睡觉,大人们都在忙事情,结果这家伙自己醒了并且悄悄摸摸爬起来,结果不小心摔下了床。于是我在思考,是否可以利用相关的识别技术来帮助自动监控小麦子睡觉情况呢?现在有大量成熟的案例,虽然不是搞python的,但是相信应该也问题不大,毕竟网上相关的教程和例子太多了。需求希望利用家里的老旧手机作为无线监控设备,能够自动识别小麦子睡醒状态并发出报警响铃。方案前端由于不

2022-05-12 17:07:52 184

原创 如何优化前端页面的LCP?

1. 背景介绍hubble平台是陌陌内部的一个监控平台,hubble的前端项目采用Vue+Echarts+ElementUI编写,是典型的单页面应用。随着项目的长期迭代导致项目体积愈来愈大,打开首屏速度缓慢,为了提升用户体验,了解用户的真实使用情况,引入了google推荐的页面性能指标测量sdk web-vitals, 并着重优化了LCP指标。2. 什么是LCP?根据W3C Web性能工作组的讨论和Google的研究,发现度量页面主要内容的可见时间有一种精准且简单的方法,就是查看 “绘制面积

2022-04-21 17:29:59 2817

原创 记一次CPU持续增长的问题解决

背景线上服务在一次功能变更上线的约一周后, 出现了服务超时问题直观考虑Q1: 由于服务本身定位是下游的保障服务, 服务质量受上游流量影响, 对上流的突发大流量请求, 偶尔会有超时情况出现;A1: 查看上游请求流量, 发现在时间上吻合, 确实存在突增的上游流量, 查看此时流量已经下降, 继续观察超时发生情况;约几分钟后, 发现超时请求量下降, 但仍然存在。和前几天同时段相比, 有所升高, 先重启服务, 后续定位。后续定位考虑到最新的服务变更, 以及上线后约一周才出现的问题。所以

2022-04-12 14:44:54 304

原创 Java AOT之GraalVM native image介绍以及简单长连接服务实践

Java语言有20多年的发展历史,拥有众多优秀的特性如面向对象、安全、解释性、平台无关等,该语言以及其强大的生态使其成为最重要的网络编程语言。但是随着近年来技术架构的发展,微服务逐渐趋向云原生及Serverless化,使得Java也面临如下挑战:启动缓慢、内存占用大、预热问题。Java服务启动时首先要启动一个JVM虚拟机,然后虚拟机会加载字节码,中间还包括类的加载解析初始化。JVM运行字节码运行时有解释执行和编译两种执行方式:当系统刚启动时,JVM会以解释执行并检测热点代码,热点代码会通过c1c2编译器

2022-03-24 17:53:41 3955 1

原创 高可用演练中堆叠切换失败分析

背景描述**办公网是通过堆叠技术和端口聚合技术规划设计的高可用办公网络,为检验高可用实际效果,在网络项目实施后按照计划对其进行高可用测试,结果发现21层的堆叠高可用在切换的过程中,出现无法高可用负载用户流量的情况,具体原因请阅读后续分析。组网介绍 交换机设备级别高可用采用堆叠; 交换机链路级别高可用采用LACP动态聚合; AC高可用采用MM集群双主模式负载; 出口Gateway设备级别高可用采用Keepalived; 出口Gateway链路级别高可用..

2022-03-17 16:49:16 510

原创 SQL注入-“错误”的语句为什么会得到“正确”的结果?

故事发生在前段时间准备内部CTF-SQL注入题目过程中。前景提要首先看下表的结构以及数据:题目是要求实现一个查询,然后通过注入获取到admin的商品及其密码,再看下我的查询语句:起因我尝试在name字段进行SQL注入,过程中拼接出这样一个SQL语句:​这个语句的后半部分比较奇怪,但是它的查询结果是“正确”的,得到了我们需要的admin的商品及其密码:​那我们就需要研究一下这个语句为什么可以得到这样的结果了。其一首先我们先看一下后半条union sele

2022-02-23 14:47:26 4036

原创 Wi-Fi 6 提升了哪些方面?

一、Wi-Fi 6介绍Wi-Fi 6,是Wi-Fi联盟定义的第六代Wi-Fi协议标准--802.11AX,相比Wi-Fi 5(第五代Wi-Fi标准协议),主要的提升有: 最大协商速率提升至9.6Gbps,Wi-Fi 5最大协商速率为3.5Gbps; 支持8用户并发传输数据,使用的技术是MU-MIMO; 支持对相邻的同频信道使用互不干扰,使用的技术是BSS着色技术; 对不同用户的数据帧进行聚合传输,提升了传输效率,使用的是OFDMA技术; 用户接入的安全协

2022-01-20 14:53:12 5633

原创 不是私密链接,如何继续前往?

当我们使用代理访问某些网站的时候,经常会看到如下提示,点击继续前往就可以正常访问该网站了,那么为什么有些网站无法点击继续前往呢?可以看到浏览器的提示为“因为此网站使用了HSTS”,那么什么是HSTS呢?HSTSHSTS是HTTP严格传输安全(HTTP Strict Transport Security)的缩写。是一套由互联网工程任务组发布的互联网安全策略机制。网站可以选择使用HSTS策略,来让浏览器强制使用HTTPS与网站进行通信,以减少会话劫持风险。HSTS的作用是强制客户端、浏览

2022-01-11 16:12:15 5421

原创 小声嘟囔:char 和 unsigned char 有那么大差距吗?

写在前面本篇水文记录在工作中遇到的实际问题,提醒大家写代码一定要细心。起因A 同学:这块代码一直有警告,我试着优优化一下(试着写个八哥)~点进去 UTF8String 看下定义,原来是 const char *顺手把代码中的 unsigned 删了 :这下警告消失了,界面干净清爽了许多~再试试功能,未发现有任何异常,对自己这次优化十分满意!十天后:B同学:你最近更新代码了吗,后端发现了大量的报错日志,原来每天几十 mb 的日志,现在涨到了每天 6个G!A同

2022-01-05 16:16:09 653

原创 实现一个javaagent需要几步?

最近在学习IAST技术,IAST的核心其实就是插桩,在java语言下,用到的技术就是javaagent,由于之前没有接触过javaaent,正好整理一下。在介绍javaagent之前,我想有必要向大家介绍一下JVMTI,因为javaagent是基于这个技术实现的JVMTIJVMTI(JVM Tool Interface)是 Java 虚拟机所提供的 native 编程接口,JVMTI可以用来开发并监控JVM,可以查看JVM的内部状态,并控制JVM应用程序的执行。JVMTI只是一套接口,我们.

2021-12-28 15:32:31 738

原创 重启iptables为啥内核参数不对了?

问题描述在一台服务器上重启iptables服务后,经过一段时间出现服务器丢包问题,看系统日志出现报错:nf_conntrack是啥Linux内核中有一个内核模块nf_conntrack用于做连接跟踪,当iptables添加了nat相关规则时此模块会被自动启用。顾名思义这个模块维护了一个连接跟踪表,当iptables做网络地址转换(nat)或设置一些跟连接状态(state)相关的规则时,此模块会被自动启用。该模块生效后,需要对部分参数做优化,如: net.netfilter.nf_c

2021-12-22 15:38:07 370

原创 Aeron 是如何实现的?—— Ipc 异常情况处理

接上文《Aeron是什么?》《Aeron中这么多空闲策略选哪个?》《Aeron是如何实现的?—— Conductor》《Aeron 是如何实现的?—— Ipc Publication》《Aeron 是如何实现的?—— Ipc Subscription》0. 简介上文分析了 Ipc Subscription 的逻辑,本文继续分析一下 ipc 场景异常情况处理。1. 两个心跳总的来说,Client 与 Driver 之间是通过心跳超时判断对方是否异常。

2021-12-14 15:00:01 1364

原创 Aeron 是如何实现的?—— Ipc Subscription

最近我们用 Aeron 实现了 Mesh agent 与 sdk 之间的共享内存通信,但是在使用过程中越来越感觉到 Aeron 框架太重了,其中很大部分功能完全用不到,有些想要自定义的逻辑很难在现有框架中实现。所以我们计划深入到 Aeron 源码中,看看它是如何实现的,最终尝试实现一个轻量的 Mesh 共享内存通信类库。上文分析了 Ipc Publication 的逻辑,本文继续分析 Ipc Subscription 的逻辑。

2021-12-08 15:15:45 269

原创 Aeron是如何实现的?—— Ipc Publication

最近我们用 Aeron 实现了 Mesh agent 与 sdk 之间的共享内存通信,但是在使用过程中越来越感觉到 Aeron 框架太重了,其中很大部分功能完全用不到,有些想要自定义的逻辑很难在现有框架中实现。所以我们计划深入到 Aeron 源码中,看看它是如何实现的,最终尝试实现一个轻量的 Mesh 共享内存通信类库。上文分析了 Conductor 的逻辑,本文继续分析 Ipc Publication 的逻辑。1. Driver Conductor - add[Exclusive

2021-11-24 15:08:42 398

原创 Aeron是如何实现的?—— Conductor

接上文《Aeron是什么?》《Aeron中这么多空闲策略选哪个?》0. 简介最近我们用 Aeron 实现了 Mesh agent 与 sdk 之间的共享内存通信,但是在使用过程中越来越感觉到 Aeron 框架太重了,其中很大部分功能完全用不到,有些想要自定义的逻辑很难在现有框架中实现。所以我们计划深入到 Aeron 源码中,看看它是如何实现的,最终尝试实现一个轻量的 Mesh 共享内存通信类库。再回过头来看一下这张架构图:Media Driver 组件负责管理数据通过媒介(UDP 或

2021-11-10 17:43:58 454

原创 Aeron中这么多空闲策略选哪个?

接上文Aeron提供了一系列等待策略,一般是应用于消息订阅程序,用来定义没有消息可以处理的时候应用线程应该做什么。1. IdleStrategy 类型空闲策略接口定义了两个方法: idle:空闲的动作,比如 sleep; reset:重置内部状态 通过这两个方法就能实现不同的空闲策略。1.1 SleepingIdleStrategy调用 LockSupport.parkNanos(this.sleepPeriodNs) 让出一段 CPU 时间。1.

2021-11-02 15:31:50 424

原创 Aeron是什么?

Aeron是一个开源高性能消息传输机制(单向),支持高效可靠的UDP单播、UDP多播和IPC消息传输。1. 架构Aeron 主要由三部分组成:Media Driver、Publications 和 Subscriptions1.1 Media DriverMedia Driver 负责管理 publications 和 subscriptions 所使用的用来发送和接收数据的 Media(UDP或IPC)。各组件作用: Driver Conductor Driver Condu

2021-10-27 14:27:33 1123

原创 有人在恶意提权吗?

背景早上收到一条疑似提权的报警,原始数据如下,uid非0,euid为0,代表用户6834通过执行sg命令提升了权限。排查对sg比较陌生,于是查看sg命令的用途解释为:可以以不同的组ID执行命令。这时才联想到了su,从命名上可以看出一个是switch user,一个是switch group,以不同组ID执行命令的前提是可以切换到不同组,即sg命令需要拥有root权限,查看sg的权限位,链到了newgrp上,有suid标志位,条件达成。suid是一种特殊的权限,可以暂时将程序所有者的权

2021-09-08 14:30:28 987

原创 如何做好Clickhouse集群的监控覆盖?

前言常言道,兵马未至,粮草先行。在clickhouse上生产环境之前,我们就得制定好相关的监控方案,包括指标采集、报警策略、图形化监控大盘。有了全面有效的监控,我们就仿佛拥有了千里眼顺风耳,对于线上任何风吹草动都能做到及时感知,在必要的情况下提前介入以避免线上故障。clickhouse监控采集方案业界做法业界常用的监控方案一般是基于clickhouse-exporter(node-exporter) + prometheus + grafana组成的监控方案。以上为监控方案示意图,其

2021-08-30 16:23:44 444

原创 为什么Kafka的数据不写了?

背景服务器上有个go程序,用来抓取网卡eth2上的dns数据包,后写入kafka集群。但是每运行一小时左右后往kafka集群的写入量就变为零,因此针对这奇怪的现象进行了些许排查····· 程序处理流程如下图:使用到的库是github.com/confluentinc/confluent-kafka-go/kafkagithub.com/google/gopacketgithub.com/google/gopacket/layersgithub.com/google/gopacke

2021-08-25 15:53:33 1050

原创 如何评价Netty封装的io_uring?

linux AIO 简史在继续 io_uring 的旅行之前,让我们先回顾一下 linux 中的各种异步 IO,也就是 AIO。1. glibc aio官方地址:Perform I/O Operations in Parallel(官方文档用的字眼比较考究)glibc 是 GNU 发布的 libc 库,该库提供的异步 IO 被称为 glibc aio,在某些地方也被称为 posix aio。glibc aio 用多线程同步 IO 来模拟异步 IO,回调函数在一个单线程中执行。该实现备受非

2021-08-09 15:18:00 822

原创 jackson1处理特殊字符有什么问题?

说明处理json是我们日常开发经常需要面对的问题,在经历过多种json工具的使用校验下,目前我们主要选择使用jackson作为处理json的工具。目前jackson主要的两个大版本为jackson1 和jackson2,jackson1已经将近是10年前的产物了,最新的一次更新也已经是5年前,可谓是古董级别的项目。下面主要来聊聊使用jackson1特殊字符所遇到的问题。jackson1 支不支持特殊字符?这里的特殊字符怎么定义?是指使用4个字节表示的表情,比如emoji

2021-08-02 16:11:54 975

原创 比redis-rdb-tools快10倍的rdb分析工具

背景为了满足快速分析rdb的情况,对rdr进行测试调研。测试环境测试机器:本机macbook pro工具:rdr,redis-rdb-toolsrdb文件:dump_7709.rdb,Redis实例大小3G,rdb文件大小1G+git地址:https://github.com/xueqiu/rdr/blob/master/README.md具体测试1、show格式测试./rdr show dump_7709.rdb此模式通过分析rdb,通过默认端口8080进行展示,访问格

2021-07-20 13:36:57 764

原创 频繁创建基于Etcd实现的分布式锁会有什么问题?

今天的主角是CPU压缩组件,它是Go语言开发的。CPU压缩组件是做什么的?业务申请实例时所要的CPU配额往往比实际使用要大很多,使得K8s集群因为CPU分配率饱和无法再创建新的实例,最终导致集群的资源利用率处于非常低的水平。为了让集群的CPU分配率和CPU使用峰值更接近,更进一步提升集群整体的利用率,我们引入了CPU压缩机制。CPU压缩组件会根据业务晚高峰的实际CPU使用动态调整实例的request,解决业务申请值和实际使用有偏差的问题。问题描述突然收到CPU压缩组件所在机器的内存报警。

2021-07-19 11:18:01 772

原创 为什么nginx主机的io使用率会100%?

起因有业务反馈构建容器镜像失败,查看代理日志和监控发现 4xx、5xx 响应码有增长,起初怀疑是后端服务响应慢,排查后没有发现异常,然后发现了 nginx 主机的 io 很高,iostat 看utilization 到 100%,iotop 查看只有 nginx 在大量写磁盘,第一反应是 proxy buffer 落盘了基本信息我们的镜像仓库共有新旧两套,通过 nginx 上配置的规则做转发,主 nginx001/002 是万兆网卡,此时两台主机都出现了 io 爆满的情况,备用 nginx

2021-07-05 16:35:06 1856

空空如也

空空如也

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

TA关注的人

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