- 博客(46)
- 资源 (7)
- 收藏
- 关注
原创 【Golang源码分析】Golang如何实现自举 - 程序入口点(五)
根据上一章的内容得知,其实不同系统的可执行文件都有自己的格式。只要生成对应的格式后,并且有执行权限就可以执行。 那么问题来了,所说的程序入口点到底是什么?可编译性语言,不同的语言的入口点不一样,大多数的都叫main。那么不能叫其他的吗?main真的是入口点吗?好像有很多问题需要探索,需要去挖掘。 既然这么多问题,就带着问题来看看go1.3的入口点是什么?1.程序入口点 说到程序入口点,这个其实很容易理解,就是程
2021-11-08 15:42:39 899
原创 【Golang源码分析】Golang如何实现自举 - 6l的链接过程(四)
接到催更的信息,其实还是很高兴。本来忙了很长一段时间为生活奔波,想给自己一个假期。后来脑子里响起了莎士比亚的一句话“如果一年到头如假日,岂不像连日工作那样疲乏?”,然后还是决定放下安逸的生活,继续去探索。 经过最近一段时间的忙碌,对生活也多了一些重新的认识。人活着不要盲目,不要止步不前,不要高估自己的实力,也不要低估自己的能力,多一些自我审视,反复review或许在生活上、工作上走的会更远~ 一顿感概之后还是要回归主题,上一篇文章说到了
2021-11-04 17:52:51 661
原创 【Golang源码分析】Golang如何实现自举 - 6g的编译过程(三)
很长的一段时间没有写文章了,因为忙着出版书籍,以及双减的影响有些懈怠。Golang自举这个系列还是接着之前的《【Golang源码分析】Golang如何实现自举 - dist介绍》一文中继续写,由于linux下go1.3编译*.c文件会调用gcc,编译go文件会调用“/mnt/pkg/tool/linux_amd64/6g”,所以本篇文章主要研究6g,以及go1.3源码编译过程。1.g6简单回顾 在go1.3中其实一部分go的源代码还处于c源码实现,其中一部分
2021-11-03 16:15:18 717
原创 深入容器之可观测性稳定性实践
前言 随着k8s集群在集团的大规模应用,k8s集群在集团大大小小几十个,有的分布在IDC机房,有的使用云上资源。了解过k8s的老师应该知道k8s发现问题主要使用事件进行发现,但是统一收集事件就变得困难重重。针对这种现状集群的统一管理和稳定性建设变得极为棘手,IaaS团队着手研发了一套事件中心。事件中心除传统Kubernetes事件外,还采集主机硬件错误、内核错误、docker错误等。从事件中心上线后收集80+线上线下集群问题,定位硬件问题数十起,每日发现应用问题数百起。
2021-09-25 15:07:58 885
原创 【kubernetes源码分析】解析apiserver资源类型(一)
前言 2021年开始第4个月了,由于工作过于繁忙的缘故很久没有开始文章的写作。其实一直以来我个人把写文章这件事,当作推进自己学习成长的一种方式。 这篇文章是kubernetes源码分析的第一个主题,后续会陆续更新。大致的纲要为client-go、控制器、调度器、自定义控制器、operator、网络几个方面。 当操作资源与apiserver进行通信时,平时都是直接编写YAML资源文件,通过kubectl来提交创建对应等资源对象,那么它究竟
2021-04-09 18:18:19 751
原创 【Golang源码分析】Golang如何实现自举 - dist介绍(二)
前言 根据《Golang如何实现自举(一)》的相关引导,知道了go1.3的go编译是需要go_bootstrap、然而生成go_bootstrap,需要dist工具进行生成。那么本期主要关注dist工具。1.dist工具介绍 其实dist工具是属于go的一个引导工具,它负责构建C程序(如Go编译器)和go工具的初始引导副本。它也可以作为一个包罗万象用shell脚本替换以前完成的零工。通过“go tool dist”命令可以操作该工具。该工具不同系统下对应在p
2021-01-11 20:41:09 871
原创 【Golang源码分析】Golang如何实现自举(一)
前言 在写一篇文章之前,某位大佬勾起了我对学习这个主题的欲望。刚好那天带着病痛,后来根据一个Makefile字符集的问题,拿着开始研究。发现研究、研究不疼了,果然和周星驰电影《国产凌凌漆》一样精神麻醉才是最好的麻醉药。今年以来也没有给自己立啥学习目标,刚好研究Golang自举动,可以作为我今年的学习目标。该篇文章只是个开始,后续会继续迭代。 大家都知道在Go早起其实编译器并不是go去编写的,后期自举实现了编译。不过在学习Golang自举之前要了解一下Golan
2021-01-10 15:50:24 2415
原创 【Mysql源码分析】基于行的复制实现之“主从复制”
前言 经过对《【Mysql源码分析】基于行的复制实现之“主从关系建立”》了解了主从复制的一些原理,本章内容会深入对binlog、relaylog做讲解。并对流程做深入了解。 在开始交接之前,我们带着几个问题切入:如何查看binlog和relaylog事件?relaylog是如何写入?binlog是如何同步?binlog格式如何解析?1.如何查看binlog和relaylog 在mysql中可以通过如下命令可以查看都有哪些binlog日志,如图1-1:mysql> show
2020-10-24 23:54:48 448 1
原创 【Mysql源码分析】基于行的复制实现之“主从关系建立”
前言 经常听到别人说Mysql的SBR、RBR、MBR,如果不清楚,那么可以跟着文章一起来学习。由于涉及到主从的内容比较多,需要拆分成多篇内容来概述,这章先从基础知识和主从关系建立开始讲起。还会出一篇文章详细讲解从主同步。1.了解什么是SBR、RBR、MBR?2.了解下主从配置该如何配置?3.了解主从关系如何建立?1.配置Mysql主从 在本文中,分为一主一从。主监听的端口为3306,从监听的端口为3309。1.1主服务配置master配置,配置文件my.cnf:[mysqld]po
2020-10-17 18:53:06 407 2
原创 【Mysql源码分析】mysql协议分析(一)
前言 在近期的mysql学习过程中,一直想做的一件事就是分析下mysql的协议。了解Mysql协议也是深入了解Mysql的过程。本章的内容由于篇幅过大,会拆分成两章来讲述。Mysql版本:8.0.20抓包工具:Wireshark1.Mysql协议分析 在分析mysql之前我们首先要把mysql的ssl关掉,抓包过程中TLS解析比较麻烦。1.1 关闭Mysql SSL 可以通过配置my.cnf文件加入skip_ssl指令关闭ssl,配置如下:[mysqld]skip_ssl图1-
2020-08-25 00:27:53 1786 2
原创 【Mysql源码分析】mysql词法分析
前言 最近在集中学习mysql源码,刚好分了几个主题,涉及到词法解析、语法解析、查询器、优化器等。刚好把准备的PPT内容摘出来整理成相应的文章。Mysql版本: 8.0.20调试工具 : lldb系统环境 : MacOS 10.14.3在了解词法解析之前,我们带着几个问题来切入:(1)什么是词法解析?(2)Mysql 8.0.20词法解析有什么优化?(3)Mysql 8词法解析都有什么过程?1.什么是词法解析? 词法分析(lexical analysis)是计算机科学中将字符序列转换
2020-08-07 19:50:38 1341
原创 【Golang源码分析】解析执行命令complie(二)词法解析
前言:当我们使用编程语言编写代码时,我们都知道代码都是写给人看的,只是除了人能看外编译器可以编译和执行。而这些复杂的代码其实是一堆堆字符串,只是我们训练编译器拆分解读。而编译器将一堆堆代码的字符串分组的过程,我们把这个过程称之为词法解析。本文中工具:lex:3.1golang : 1.13.4 darwin/amd64dlv: 1.3.2编译过程一般分为 6 步:扫描、语法分析、语义分析、源代码优化、代码生成、目标代码优化。下图来自《程序员的自我修养》词法解析相关知识:说到词法解
2020-08-06 23:01:06 1058
原创 【Golang源码分析】深度解析执行命令(一)go build
前言:让我们一起来了解下go build命令都做了些啥;并进行源码追踪其过程;在golang早期版中编译器,连接器都是用C开发的。后期版本中go的编译器连接器都用go重写了一套,这一套都是开源的,我们都可以阅读;golang版本: go1.13.4 darwin/amd64调试工具: dlvdlv如果不太会用的可以看一下我前一篇文章:https://ttc.zhiyinlou.com/#/articleDetail?id=486go...
2020-08-06 22:59:53 1970
原创 【Mysql源码分析】MySQL为什么有时候会选错索引及成本计算
前言 在一次Mysql分享中提到过,会将相关的一些知识点整理成相应的文章。由于前段时间忙的不可开交,一直没有时间去整理这些相关内容。但是必定说出来的话,就要去落实。本章内容主要以实践为主,最好是跟着动手实践。这样才能逐步掌握其中奥秘。那么我们开始吧!!!1.安装数据库 在做这个实践之前,我们要先安装一下mysql数据库,这边是通过源码的形式进行安装。方便后续的调试跟踪。1.1通过git下载mysql源码:#cd /Users/edz/Desktop/src-source/mysql-serve
2020-07-29 02:04:43 985 2
原创 【协议分析】深入了解DNS
引言: 写这篇文章主要是因为准备搞一个httpDNS和http2对组内的分享,然后刚好花一些时间去画图。并且整理一些素材,刚好就把整理的一些内容整理成具体的文章。 在我们学习之前我们可以去思考一些问题:1)DNS是干嘛用的?为什么要有DNS?2)DNS是怎么获取到IP?3)DNS是怎么通信,通信协议是什么?针对这些问题我们可以展开我们的话题。1.DNS是干嘛用的?为什么要有DNS? 说到DNS,其实可以用一词概述域名系统,域名系统(Domain Name System缩写DNS,Dom
2020-05-20 19:11:26 815
原创 【黑客编程】外挂编程技术揭秘(四) 完结篇
引言: 发现快一个月没有写文章了,从写ttc文章以来,一直有一个想法就是把外挂揭秘系列的更新完成。延续到现在半年过去了。一直专注于做其他的一些事情没有针对这个系列做更新。前几天做了一次早读课技术分享,其实早读课的一些内容也是从研究外挂里面提取出来的。当时讲的不够细致,刚好借着这个机会写一篇文章回顾下知识点。之前一直是想把封包和驱动保护放在两个章节一块讲了,这次可以合到一起。1.驱动保护原理 说到驱动保护可能很多人都不知道。其实就windows应用而言,游戏也是一个窗口,窗口与窗口之间是可以直接通过
2020-05-15 17:52:34 3340
原创 centos6.9安装nginx安装http3
前言: 安装nginx支持http3时对版本是软件的有一些要求的,安装过程中如果版本不差异会导致编译存在问题。还有就是安装过程中会有一些依赖支持库; gcc版本:大于 gcc-4.7 pcre版本: pcre-8.00 nginx版本: nginx-1.17.9 或 nginx-1.16.x cmake版本: 大于 cmake-3.0 golang版本: go1.13.x...
2020-04-14 19:18:01 1063
原创 排查API的connection reset by peer和Timeout exceeded问题
前言这是一次实际生产中遇到的问题,根据问题模拟反复试验。看完这部分代码,您可以直接了解backlog的工作原理,已经系统调优时该怎么调,不至于胡乱设置。排查API的connection reset by peer问题:晚上22点~早上6点会偶尔出现,16:00出现过一次;Client.Timeout exceeded大量出现;分析问题原因:connection reset by p...
2020-03-29 20:22:19 3306
原创 PHP常驻内存下phpredis扩展的一个BUG
前言本文主要是一次线上异常排查内容。排查2020 03-24 23:14分tw挂掉后,英语偶线现取不到数据问题:2020 03-24 23:14 tw挂了一台,30秒没连接上redis;有一定机率从redis拿不到数据偶发;没有错误,拿不到数据;怀疑对象etcd配置问题; - 确认过相关配置(排除)twemproxy可能变更节点;-查看过对应日志(排除)经过排查twemp...
2020-03-26 14:23:10 1123
原创 【协议分析】rpcx网络协议分析之kcp数据传输
前言:KCP是一个可靠的协议,它的延迟率比起tcp低很多。在游戏和视频推流领域广泛使用。在TCP是为流量设计的(每秒内可以传输多少KB的数据),讲究的是充分利用带宽。而 KCP是为流速设计的(单个数据包从一端发送到一端需要多少时间),以10%-20%带宽浪费的代价换取了比 TCP快30%-40%的传输速度。文章中内容解析了整个kcp的传输数据数据包组成。系统: mac OS 1...
2020-03-24 20:52:43 2700
原创 【协议分析】rpcx网络协议分析之tcp
前言:最近在学习rpcx,为了更清楚搞懂rpcx的各种协议组成。对rpcx的协议做了一个深入学习。系统: mac OS 10.14.3golang: go1.12 darwin/amd64调试工具:lldb抓包工具:tcpdump(一)tcpdump工具使用tcpdump是一个网络抓包工具,tcpdump支持针对网络层、协议、主机、网络或端口的过滤。并提供an...
2020-03-19 02:05:22 1295
原创 【Codis源码】codis-proxy处理流程下(三)
前言:接着上一章讲,上一章讲了loopReader。这一块会延续上一章节继续往下讲。golang版本: go1.13.5 darwin/amd64codis版本:codis 3.2调试工具:dlvcodis源码:https://github.com/CodisLabs/codis/(一)proxy处理流程上一章中讲proxy流程时只讲了session连接部分,这一章把完整的流程串...
2020-03-14 22:31:27 620
原创 【Codis源码】codis-proxy处理流程上(二)
前言:客户端连接的 Redis 代理服务, 实现了 Redis 协议。代理部分极为关键,它负责转发请求,以及汇总数据结果。codis-proxy的处理流程比较长,本章节会先叙述一部分,比如说loopReader。剩下的下一个章节继续叙述。golang版本: go1.13.5 darwin/amd64codis版本:codis 3.2参考资料:RESP协议:https://redis....
2020-03-11 23:42:22 731
原创 【Codis源码】初识codis与Codis-FE源码(一)
前言:codis 是一个分布式的redis解决方案,对于上层业务来说,连接到Codis Proxy和连接原生的Redis Server没有显著区别。上层可以像使用单机的redis一样使用。Codis 底层会处理请求的转发, 不停机的数据迁移等工作, 所有后边的一切事情, 对于前面的客户端来说是透明的, 可以简单的认为后边连接的是一个内存无限大的 Redis 服务。codis是有golang +...
2020-03-09 23:22:34 777
原创 【Redis源码】bloomfilter布隆过滤器(十五)
前言:布隆过滤器有很多使用场景比如说反垃圾邮件,从数十亿的垃圾邮件列表中判断某邮件是否为垃圾。或者说解决缓存击穿问题。或者在一些去重场景中都可以使用到,例如推送新闻不重复。布隆过滤器是redis的一个插件功能,redis4.0之后提供了插件功能才正式登场。redis版本:redis4.0.0bloomfilter版本: v1.1.1参考资料:redis modulesAPI:http...
2020-03-09 14:21:00 884 1
原创 【Redis源码】集群之分布式cluster原理(十四)
前言:接着上一章开始讲,上一章我们讲到如果配置一个cluster,以及cluster的基础命令。以及初始化一个cluster的流程。本章继续讲一些cluster原理。版本:redis4.0.0(一)消息结构1.1 数据包类型以下是数据包的类型:#define CLUSTERMSG_TYPE_PING 0 /* Ping包类型 */#define CLUSTERMS...
2020-03-09 01:33:27 482
原创 【Redis源码】集群之分布式cluster建立集群关系(十三)
前言:redis在redis3.0版本之后推出redis cluster模式集群,redis cluster是官方提供的分布式解决方案。当一个redis节点挂了可以快速切到另一个节点中。当遇到单机内存、并发瓶颈时可以考虑使用redis cluster。集群的内容会比较长,这一章会分为两篇作为描述:《集群之分布式cluster建立集群关系》与《集群之分布式cluster原理》redis版本:...
2020-03-04 01:11:04 1608
原创 【Redis源码】集群之哨兵sentinel故障转移 (十二)
前言:各位看官大家好,这个主题内容比较长然后接着上一章就拆成了两个部分。那么我们接着上一章内容开始说。上一章中我们说到哨兵定时器sentinelTimer它们作用。sentinelTimer方法中执行哨兵模式中的任务。包括执行定期操作比如PING、分析主服务和从服务的INFO命令、故障转移等等。那么这一章我们就先从sentinelTimer开始说起。(一) 基本结构1.1 sentinelT...
2020-02-28 03:31:15 918
原创 【Redis源码】集群之哨兵sentinel初识(十一)
前言:说到哨兵之前,可以思考一个问题。为什么有哨兵机制?这一点其实可以从主从复制的优缺点作为考虑。主从复制其实有一个致命的弱点就是它是非高可用的,比如说当主节点出现故障时,那么此时我的写入就会出现问题,切换需要重新配,就无法做到高可用。此时其实就可以用到哨兵进制,哨兵自动发现故障,并通过选举算法重新选举新主完成转移和通知实现高可用。参考资料:https://redis.io/topic...
2020-02-27 02:50:29 439
原创 【Redis源码】集群之主从复制replication(十)
前言:说到主从大家应该都不陌生,也应该都清楚主从解决服务的哪些问题。单台服务器的支撑能力是有限的,为了提高我们的QPS或者说数据的容灾。主从服务则起到了相应的作用。不过主从复制也会有一些缺点,比如说“高可用问题”,“单服务器资源有限问题”。针对高可用问题我们后续解析redis集群的哨兵,针对单服务器问题,我们会解析redis Cluster分布式应用。redis版本: 4.0.0...
2020-02-23 21:12:43 521
原创 【Redis源码】位图SETBIT、BITCOUNT(九)
前言:位图并不是一个特殊的数据结构,位图其实就是一个字符串,位图这种结构占用空间特别小。如果是数亿以上的用户如果存储活跃,如果是用key/value去存储每个节点都需要数G去存储,存储是很大问题。如果换做位图去存储则可以大大节约空间,不过适应于用户ID连续性的。除此之外也可以用作比如说点赞的存储。redis版本:4.0.0(一)命令解析 命令原形 ...
2020-02-14 00:34:13 773
原创 【Redis源码】ziplist压缩表(八)
前言:压缩表是一个连续内存空间的线性结构,元素之间紧挨着存储,没有任何空隙。redis为了节省空间,当使用zset和hash容器对象时再元素个数较少时采取了压缩表(ziplist)进行存储。redis版本:4.0.01.压缩表结构介绍压缩表构成如下:zlbytes :压缩表字节长度,类型uint32_t占用4个字节,需要存储此值才能调整整个...
2020-02-12 01:50:57 379
原创 【Redis源码】字符串详解(七)
前言:学过C的人应该都知道C的字符串是以字节数组存在,然后以\0结尾。计算字符串的长度使用strlen函数,这个标准库函数的复杂程度是O(n)。它需要对字节数组进行扫描遍历计算长度。作为redis单线程的应用是这种形式是比较消耗性能的。Redis实现了字节的字符串叫sds(Simple Dynamic String),它是一个带着长度的信息的结构体,属于柔性字符串。版本:redis...
2020-02-08 14:44:32 440 2
原创 【Redis源码】发布与订阅(六)
redis版本:4.0.0(一)发布与订阅功能介绍:官方文档: https://redis.io/topics/pubsubRedis是一个快速稳定的发布/订阅消息传递系统。发布与订阅命令: 命令 备注 命令原形 PSUBSCRIBE 订阅一个或多个给定匹配模式的频道 ...
2020-02-06 00:03:40 407
原创 【Redis源码】详细的RDB和AOF持久化过程(五)
(一)分析RDB和AOF的优劣势:优劣势官方介绍:https://redis.io/topics/persistence持久化详细介绍:http://oldblog.antirez.com/post/redis-persistence-demystified.html1.RDB:RDB的优点:1)RDB是redis数据非常紧凑的单文件时间点表示。RDB文件非常适合备份...
2020-01-16 14:53:38 612
原创 【Redis源码】轻松看懂rdb文件(四)
前言:该篇内容为我对redis的学习记录,欢迎指正批评。redis版本:4.0.0、一.数据存储格式:二.查看rdb文件查看文件16进制编码#od -A x -t x1c -v dump.rdbRDB文件格式如下:0000000 52 45 44 49 53 30 30 30 38 fa 09 72...
2020-01-15 02:11:31 1069 1
原创 【Redis源码】dict字典学习(三)
前言:该篇内容为我对redis的学习记录,欢迎指正批评。redis版本:4.0.0一.redis 数据库流程结构二.结构解析typedef struct client { uint64_t id; /* 客户端唯一增量ID. */ int fd; /* 客户端socket fd. */ redi...
2020-01-14 15:50:39 330
原创 【Redis源码】Redis命令INCR、DECR、INCRBY、DECRBY学习(二)
前言:该篇内容为我对redis的学习记录,欢迎指正批评。文中只是放了部分调试内容,完整的可以根据流程图跟踪。redis版本:4.0.0调试工具:lldb一.redis incr命令调用流程DECR和INCR和类似只是一个是增加一个是减少。其余两个命令也大同小异;二.源码分析4个命令相应源码,t_string.c中:void incrCommand(...
2020-01-14 15:44:01 1309
原创 【外挂编程】外挂编程技术揭秘(三)DLL注入
引言:一个礼拜没有更新这个主题文章了,这周三看到一个微信推送。某某某博士由于写外挂被抓。当时心里那是一个崩溃,不过之前写了这个主题,还是会继续写完,不能半途而废。不过了解这本技术的千万不要拿去捞偏门。我刚写这篇文章的时候在想这个主题要不要改一改。叫《我们一起写外挂吧,会被抓那种》,^ - ^,玩笑了。开始我们今天的内容吧,我们还是继续讲内存挂,不过我们今天的主题是讲注入。文中介绍的注入...
2020-01-13 18:01:56 13618 2
原创 【Redis源码】Redis命令set学习(一)
前言:该篇内容为我对redis的学习记录,欢迎指正批评。文中只是放了部分调试内容,完整的可以根据流程图跟踪。redis版本:4.0.0调试工具:lldb一.redis set命令调用流程二.源码分析(1)源码解析服务端对命令的解析是绑定在server.c中的redisCommandTable全局参数中,redisCommandTable为一个结构体...
2020-01-12 10:25:40 681
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人