- 博客(93)
- 资源 (2)
- 收藏
- 关注
原创 开启 Keep-Alive 可能会导致http 请求偶发失败
大家好,我是蓝胖子,说起提高http的传输效率,很多人会开启http的Keep-Alive选项,这会http请求能够复用tcp连接,节省了握手的开销。但开启Keep-Alive真的没有问题吗?我们来细细分析下。
2024-04-03 15:50:40 1376
原创 一文搞定防盗链设计
大家好,我是蓝胖子,在涉及到图片或者视频链接时,通常都会提到防盗链,这一节我将会从防盗链的含义到落地,向大家展示如何设计资源的防盗链。
2024-04-02 10:16:22 629
原创 https安全性 带给im 消息加密的启发
更进一步,还可以设计一组只有im客户端和服务端知道的密钥,让客户端在进行摘要计算时,加上密钥,也就是通过类似hmac的消息认证算法,进行摘要计算,这样在对端接收到报文后,正常情况下,通过相同的消息认证算法和密钥会得到相同的摘要结果,如果计算的摘要结果和报文中的摘要结果不一致,那么说明报文不是从信任的客户端发来的,直接拒绝,这样便达到了。接着,便是服务端和客户端用相同的计算密钥的算法,以客户端和服务端的随机数A,B和pre master key生成相同的会话密钥,用于后续的通信进行对称加密。
2024-04-01 15:09:11 941
原创 花了100块大洋搞懂 ipv6的用户如何访问ipv4 服务器
大家好,今天蓝胖子花了100多块搞懂了 ipv6的用户如何访问ipv4 服务器,将收获与大家分享下。ipv4和ipv6的协议栈不同,这意味着,其对应的ip包的封装和解析不同,那么只支持ipv4的机器就无法直接与ipv6的服务器进行通信。但目前已经有越来越多人使用ipv6进行通信,如果仅仅让服务器支持ipv4,这无疑会损失一大部分用户,特别是针对于海外业务。如何让服务器便捷支持ipv4和ipv6都能同时进行访问,就成了我们需要思考的问题。这里我给出几个靠谱方案来解决此类问题。首先要知道一个http网络请求的流
2024-03-28 17:21:06 4126 1
原创 MYSQL 同步到ES 如何设计架构保持一致性
最后,我来总结下,采用canal去做MySQL 到ES的数据同步,我们的确是可以做到高可靠性的,但是要注意的canal的消息消费是有可能出现重复消息的,不过由于目前我们部门没有对消息进行统计的需求,仅仅是将数据进行更新或者插入,存在即更新,没有即插入,所以是幂等,可以不用太过关注。
2024-03-21 15:56:29 482
原创 为什么延迟删除可以保证MYSQL 与redis的一致性?
看过很多保持MYSQL 与redis保持一致性的文章都提到了延迟删除,其实脱离任何业务场景的设计都是不切实际的,所以我会本着一个通用的读写场景去分析。
2024-03-20 11:43:11 429
原创 golang sync.Map之如何设计一个并发安全的读写分离结构?
首先是一个初始的sync.Map 结构,我们往其中写入数据,数据会写到dirty中,同时,由于sync.Map 刚刚创建,所以read map还不存在,所以这里会先初始化一个read map。在 golang中,想要并发安全的操作map,可以使用sync.Map结构,sync.Map 是一个适合读多写少的数据结构,今天我们来看看它的设计思想,来看看为什么说它适合读多写少的场景。如下,是golang 中sync.Map的数据结构,其中 属性read 是 只读的 map,dirty 是负责写入的map,
2024-03-19 16:10:21 656 1
原创 Elasticsearch 主副分片切换过程中对业务写入有影响吗
🍊🍉🍋 先说下结论,只要集群中的工作节点过半,有候选的master节点,挂掉的节点中不同时包含索引的主分片和副分片,那么ES是可以做到让业务无感知的进行主副分片切换的。蓝胖子会先讲解下ES集群写入文档的原理,并对异常情况进行分析,最后来模拟集群写入过程中节点宕机的情况来对这个问题展开讨论。
2024-03-16 00:43:10 955
原创 MYSQL 是如何保证binlog 和redo log同时提交的?
redo log是innodb引擎层产生的日志, MYSQL从磁盘读取数据的单位是一页,当修改页中某条数据时,该行所在的数据页就变成了脏页,由于脏页并不会立马刷新到磁盘,所以redo log会记录下数据页进行了哪些变动,用于服务崩溃时的数据恢复。redo log是固定大小的,由多个文件组成一个环形的结构,
2024-03-14 13:01:00 909
原创 Elasticsearch 如何保证写入过程中不丢失数据的
在本文开始前,首先明白一个点,平时我们说的组件数据不丢失究竟是在指什么,如果你往ES写入数据,ES返回给你写入错误,这个不算数据丢失。如果你往ES写入数据,ES返回给你成功,但是后续因为ES节点重启或宕机导致写入的数据不见了,这个才叫数据丢失。4, 在文件系统缓存中的segment总归还是要写入磁盘,默认每30分钟,或者当translog的日志量达到某个量级时,segment会进行落盘,同时删掉translog日志。1,写入时,ES会首先往一块内存缓存中写入数据,这快内存缓存在ES中叫。
2024-03-12 18:23:30 828
原创 你应该打好你的日志,起码避免被甩锅
举一个场景,蓝胖子之前在服务中做过邮寄服务,由于邮寄需要依靠第三方的接口,并且整个邮寄的逻辑比较复杂,会有许多邮寄过滤条件,并且后续的产品功能持续有对这部分过滤逻辑进行修改,如何在对第三方接口进行容错,如何后续的迭代过程中对 过滤代码进行容错,保证出错后能有办法恢复出错用户的邮寄就成了要思考的问题。,例如,要记录某个用户做了支付行为,你应该要记录用户的id,订单号,甚至可以更详细点,把订单的价格,购买的商品信息都记录下来,以便后续排查问题时能直接通过日志找到用户的支付记录。
2024-03-10 00:59:37 888
原创 prometheus 原理(架构,promql表达式,描点原理)
大家好,我是蓝胖子,提到监控指标,不得不说prometheus,今天这篇文章我会对prometheus 的架构设计,promql表达式原理和监控图表的绘图原理进行详细的解释。来让大家对prometheus的理解更加深刻。
2024-03-09 17:28:20 1213
原创 如何避免MYSQL主从延迟带来的读写问题?
GTID 的全称是,全局事务 ID,是一个事务在提交的时候生成的,是这个事务的唯一标识。MYSQL开启 GTID 模式的方式是 在启动一个 MySQL 实例的时候,加上参数和。每个事务是和GTID 值一一对应的,每个MYSQL实例会维护一个GTID 集合,来表示实例执行过的事务。在slave节点上,通过可以看到 GTID集合,如下图所示,,表示这对主备关系使用了 GTID 协议。,是备库收到的所有日志的 GTID 集合。,是备库所有已经执行完成的 GTID 集合。
2024-03-08 17:34:44 766 1
原创 万字长文讲解Golang pprof 的使用
大家好,我是蓝胖子,说到golang的性能分析,不得不提的就是其自身拥有的pprof,它提供了从cpu,内存,阻塞情况,协程,线程,乃至程序运行轨迹trace的分析,可以说相当强大了。今天我将会用较长的篇幅阐述 应该如何使用pprof工具来 对cpu,内存,阻塞情况,协程,线程 这几个维度去进行分析。其实总结出来Golang pprof的使用方式,可以用下面的思维导图来表示,
2024-03-07 17:35:26 2662
原创 【可观测性系列】OpenTelemetry Collector 配置文件介绍
🎬作者简介:大家好,我是蓝胖子🥇☁️博客首页:CSDN主页蓝胖子的编程梦⭐️热门专题:我的服务监控实践 ,500行代码手写Docker🌄每日一句:成功的速度,要超过爸妈老去的速度。大家好,我是蓝胖子,前面我讲解了OpenTelemetry Collector的部署模式,这一节我们继续看看OpenTelemetry Collector相关的内容。OpenTelemetry Collector有对遥测数据预处理的功能,如何处理,处理的流程定义都是通过一个配置文件完成的,我们来看看它的配置由什么组成
2024-02-05 13:49:57 1319
原创 【可观测性系列】 OpenTelemetry Collector的部署模式分析
*🌄每日一句:白日莫闲过,青春不再来大家好,我是蓝胖子,在前面我介绍了下OpenTelemetry的概念,但是究竟在项目中应该如何来使用OpenTelemetry 来帮助我们完成可观测性的构建?接下来,我将会谈谈有关 OpenTelemetry如何落地的一些问题。
2024-02-02 17:24:26 1057 1
原创 【可观测性系列】 Opentelemetry 介绍
大家好,我是蓝胖子,随着微服务的流行,服务的可观测性概念被越来越多人提及到,究竟什么是可观测性?我们应该如何构建服务的可观测性?我将会在这篇文章中逐步提及到,并对和可观测性相关的工具 Opentelemetry做一个大致的介绍。
2024-02-02 11:09:32 1193
原创 【可观测系列】链路追踪落地过程中的挑战与解决方案
大家好,我是蓝胖子,关于链路追踪的demo的讲解文章其实很多,但是想把链路追踪真正融入到生产环境却不是那么容易,今天我们来聊聊链路追踪技术在实际落地过程中不得不解决的两个问题。
2024-02-01 15:17:11 1125
原创 【可观测系列】上个厕所的时间了解链路追踪基本概念
大家好,我是蓝胖子,随着微服务的普及,在面对日益复杂的架构和请求链路时,链路追踪技术就显得更加重要,今天我们花5分钟的时间,来掌握和链路追踪相关的基本概念。不会涉及到具体的技术框架和落地,本文主要是对链路追踪中涉及的专业术语做一个简短的介绍。不同链路追踪的SDK可能对相关的专业术语有不同的称谓,但它们所代表的含义和内容基本一致。
2024-01-30 17:13:06 799 1
原创 都是星光赶路人
不知不觉已经快工作五年了,工作以后就感觉时间一年比一年快,仿佛昨天才刚毕业,就像陈鸿宇歌中的那样,多少遗憾自负存念想,唯有时间不可挡。五年,思考了很多,也想明白了许多。正好借着年末,将所想所得一吐为快。
2023-12-13 11:05:05 1024
原创 【elasticsearch系列】5分钟掌握查询原理--lucene常见查询类型原理分析
大家好,我是蓝胖子,在上一节我提到要想彻底搞懂elasticsearch 慢查询的原因,必须搞懂lucene的查询原理,所以在上一节我分析了lucene查询的整体流程,除此以外,还必须要搞懂各种查询类型内部是如何工作,比如比较复杂的查询是将一个大查询分解成了小查询,然后通过对小查询的结果进行合并得到最终结果。今天就来看看几种比较常见的查询其内部的工作原理。
2023-12-12 15:48:32 1003
原创 【Elasticsearch系列】5分钟掌握查询原理-lucece查询逻辑介绍
通过本篇文章,应该可以对lucene的查询过程有了大概的了解,但其实对于elasticsearch的慢查询分析还远远不够,因为像布尔查询,wilcard之类的比较复杂的查询,我们还得弄懂,它们底层是究竟如何把一个大查询分解成小查询的。才能更好的弄懂查询耗时的原因,所以在下一节,我会讲解这些比较常见的查询类型的内部重写和查询逻辑。
2023-12-08 17:36:36 1268
原创 【Elasticsearch系列】不幸中的万幸 —— 一次elasticsearch 查询瞬间超时案例分析
其实,你可以看到,整个排查过程是比较顺畅的,但是要完成这一系列比较顺畅的排查动作前提是要有比较完善的监控机制。无论是对组件还是机器乃至应用服务的监控,我们都设有比较完善的监控图表用于保留问题现场。对于慢查询日志则是直接发往了钉钉群,这也有利于快速对慢查询进行发现和修改以及对慢查询进行检索。有了这些监控机制,当问题发生时,只需要分层的去观察不同层的监控情况,问题便能迎刃而解了。对于如何落地一个能用于生产环境的监控机制,欢迎收看我直接的服务监控实践系列。
2023-12-04 16:45:39 1554
原创 【Elasticsearch系列】日志收集之logstash 配置文件语法介绍
使用条件表达式,在条件表达式中定义不同的输出插件,达到根据不同内容输出到不同组件的目的,以下是配置案例,通过判断日志的等级,等级为error或者日志类型是es的日志时,则输出到报警服务中。output {http {logstash的配置文件语法还算是很简单的,灵活的使用条件表达式可以定义多个输出源,想要掌握logstash更多的配置还是要去官网掌握一些插件的用法,不过在看懂语法的基础上,学习插件的用法就是水到渠成的事情了。
2023-11-27 15:03:06 832
原创 【mysql系列】mysql group by 执行原理及千万级别count 查询优化
大家好,我是蓝胖子,前段时间mysql经常碰到慢查询报警,我们线上的慢sql阈值是1s,出现报警的表数据有 7000多万,经常出现报警的是一个group by的count查询,于是便开始着手优化这块,遂有此篇,记录下自己优化过程中的心得。优化慢sql前,肯定是要懂sql的查询逻辑,所以我先介绍下group by 语句的执行逻辑。
2023-11-17 17:30:13 454
原创 【自动化运维系列】shell 语法介绍
首先看下shell中对变量的定义,其中分为环境变量和局部变量。环境变量在子shell进程中是可见的,可以通过export 关键字进行定义,如下所示,局部变量是指在某个shell中生效的变量,这个变量在其他shell中是无效。变量的定义可以通过如下方式进行定义,变量名=变量值,注意点一:变量名和变量值之间用等号紧紧相连,之间没有任何空格注意点二:当变量中有空格时必须用引号(单引号,双引号都可以)括起,否则会出现错误这一节简单的介绍了shell最基本的语法,掌握了这些,便可以简单的写一些最基本的脚本了。
2023-11-13 16:38:18 309
原创 【自动化运维系列】Ansible工具组件及语法介绍
Ansible 与主机之间沟通的模式是通过ssh协议,执行相关的命令。这其中涉及到Ansible 的组成架构的问题,学习一门技术或工具首先得对它的架构有所了解。我们来看看Ansible的组成架构是什么样的。虽然我是极力建议使用Ansible编写对线上服务的部署任务时,尽量采用playbook方式,这样能文档化任务。但是一些简单的命令又想批量的在主机上运行,还是可以用到Ad-hoc方式执行。我们简单的看看其使用规则,-m 参数 指定使用的模块,-a 参数指定模块使用到的命令。举几个简单的例子,
2023-11-09 14:10:44 285
原创 【自动化运维系列】jenkins原理篇——成员权限管理
大家好,我是蓝胖子,前面几节我讲述了jenkins的语法以及我是如何使用jenkins对测试和正式环境进行发布的。但正式环境使用jenkins还有一点很重要,那就是权限管理。正式环境的权限往往不能对所有人开放,以及要做到每次发布都是谁在操作 都有迹可循,这样才能方便以后排查问题。所以,今天我们就来看看jenkins的权限管理应该如何来做。
2023-11-07 15:58:31 556
原创 【自动化运维系列】jenkins实践篇(2)—— 自动打tag的可回滚发布模式
大家好,我是蓝胖子,在上一篇我简单介绍了如何基于特定分支做自动编译和发布,在生产环境中,为了更加安全和快速回滚,我采取的是通过对代码打tag的方式来进行部署,下面我将详细介绍整个发布过程的逻辑。
2023-11-01 18:00:06 1327
原创 【自动化运维系列】jenkins实践篇(1)——基于分支的自动发布
而对于正式环境而言,则不采用这种机制,为了保证正式环境的安全,还需要保证代码的快速回滚,基于此,正式环境我将采用打tag的方式进行发布,每次发布后会生成一个tag,回滚时则可以基于tag快速回滚。关于tag的发布模式将在下一篇文章再展开,现在我们先来看看如何。第二,之前脚本缺少检测机制,决定改善脚本,首先在部署前,脚本需要检测对应的服务的配置文件是否符合标准,我们的配置文件是json格式,其次在部署完成后,检测服务是否正常启动,如果没有启动,则尝试再次部署,直到失败3次后将不再重试。基于分支做自动发布。
2023-10-24 18:08:16 936
原创 【自动化运维系列】jenkins 原理篇——pipeline流水线 声明式语法详解
这一节,基本上对jenkins的pipeline脚本语法做了比较完整的介绍,在以后再看pipeline脚本时,可能还会接触到许多插件提供的函数或更多的指令,但是它们都逃不开pipeline脚本的基本结构,掌握了基础语法,后面才能更上一层楼。
2023-10-20 18:35:24 1296
原创 【算法系列】快速排序 O(nlgn)
即 lt + 1 == k -1 ,此时我们找到了第k大的元素,可以直接返回。即lt+ 1 > k -1 ,说明第k大的元素在基点的左侧,即要在[l…lt]区间继续寻找。
2023-10-13 16:09:25 132
原创 【算法系列】归并排序O(nlgn)
大家好,我是蓝胖子,我一直相信编程是一门实践性的技术,其中算法也不例外,初学者可能往往对它可望而不可及,觉得很难,学了又忘,忘其实是由于没有真正搞懂算法的应用场景,所以我准备出一个系列,囊括我们在日常开发中常用的算法,并结合实际的应用场景,真正的感受算法的魅力。代码已经上传github。
2023-10-11 13:51:30 126
原创 【算法系列】堆的原理以及实现O(lgn)
大家好,我是蓝胖子,我一直相信编程是一门实践性的技术,其中算法也不例外,初学者可能往往对它可望而不可及,觉得很难,学了又忘,忘其实是由于没有真正搞懂算法的应用场景,所以我准备出一个系列,囊括我们在日常开发中常用的算法,并结合实际的应用场景,真正的感受算法的魅力。今天我们就来看看堆这种数据结构。源码已经上传到github。
2023-09-27 17:30:01 233
原创 【容器系列】k8s 自动扩缩容HPA原理及adapter配置详解
探索HPA配置的含义过程中,其实可以发现k8s在针对HPA扩容依据的拓展方式上,就是规定了3组api group(metrics.k8s.io,external.metrics.k8s.io,custom.metrics.k8s.io),并且用基本一致的http请求,让第三方(prometheus adapter)在声明为api service 的时候指定为对应的api group,然后解析请求路径和参数来进而对prometheus查询 即完成了对HPA扩容指标的查询。
2023-09-22 18:07:28 1332 2
原创 【算法系列】布隆过滤器原理及实现
大家好,我是蓝胖子,我一直相信编程是一门实践性的技术,其中算法也不例外,初学者可能往往对它可望而不可及,觉得很难,学了又忘,忘其实是由于没有真正搞懂算法的应用场景,所以我准备出一个系列,囊括我们在日常开发中常用的算法,并结合实际的应用场景,真正的感受算法的魅力。今天,我们就来学习下布隆过滤器的原理以及作用。代码已经上传到github。
2023-09-20 10:23:07 183 1
原创 【算法系列】位图(bitmap)原理以及实现
大家好,我是蓝胖子,我一直相信编程是一门实践性的技术,其中算法也不例外,初学者可能往往对它可望而不可及,觉得很难,学了又忘,忘其实是由于没有真正搞懂算法的应用场景,所以我准备出一个系列,囊括我们在日常开发中常用的算法,并结合实际的应用场景,真正的感受算法的魅力。今天,我们就来学习下位图bitmap的原理以及作用。代码已经上传github。
2023-09-19 18:01:20 282
原创 【Elasticsearch系列】elasticsearch wildcard 慢查询原因分析(深入到源码!!!)
大家好,我是蓝胖子,前段时间线上elasticsearch集群遇到多次wildcard产生的性能问题, elasticsearch wildcard 一直是容易引发elasticsearch 容易宕机的一个风险点, 但究竟它为何消耗cpu呢?又该如何理解elasticsearch profile api的返回结果呢?在探索了部分源码后,我将在这篇文章一一揭晓答案。
2023-09-05 14:20:03 1003
模仿简书的练习项目
2018-10-30
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人