- 博客(62)
- 收藏
- 关注
原创 Envoy XDS协议学习
Envoy xds学习资料地址envoy官网资料连接接口说明xds分为增量接口和全量接口SotW:state of the world 即全量的数据Incremental: 增量的数据具体接口Listener: Listener Discovery Service (LDS)SotW: ListenerDiscoveryService.StreamListenersIncremental: ListenerDiscoveryService.DeltaListenersRout
2023-11-04 12:33:26
489
原创 goland dlv 进行remote debug实验
背景因为平时服务都运行在linux服务器上面,有时测试环境出现问题,需要在测试环境进行debug,因此进行如下实验,验证如何使用goland+dlv进行远程调测工具goland、dlv工具安装goland直接安装即可dlv安装:直接go install...
2022-04-23 18:55:53
1491
原创 golang sql源码学习记录
sql总结golang只实现了框架,用于如何连接数据库,具体的数据库连接的驱动,由各类数据库实现,如postgresql为pg,mysql为mysql,整体实现为driver目录下定义各种接口,接口定义得比较细致,可能一个函数就对应一个接口,sql目录下实现整体框架,DB结构体为整体入口,Open函数会创建DB,使用DB调用各类操作函数接口接口定义在driver目录下driver.Driver,具体驱动实现该接口Open(name string) (Conn, error), 用于新开一个连
2022-04-10 16:22:49
950
原创 golang http连接池实现
连接池golang http1.1默认开启连接池在Transport里面实现关闭连接池将DisableKeepAlives设置为true或者将MaxIdleConnsPerHost设置小于0的值func (t *Transport) tryPutIdleConn(pconn *persistConn) error { if t.DisableKeepAlives || t.MaxIdleConnsPerHost < 0 { return errKeepAlivesDis
2022-02-26 18:27:56
2823
原创 golang http1.1 超时
涉及的结构体Client、Request、Response、TransportClientTimeout参数,通过context来整体控制超时,Request里面的ctx如果也有超时限制,则谁先超时,就使用哪个,即如果ctx先超时,则使用ctx的,如果timeout先超时,则将ctx重新赋值Requestctx context.Context,在Client的Timeout已经说了...
2022-02-26 17:10:20
962
原创 golang http1.1代码实现
涉及结构体Client、Transport、Dailer、Request、ResolverRequestctx context.Context 可以设置超时时间ClientTimeout:整体超时设置,与Request的ctx取较小超时时间TransportTLSHandshakeTimeout:tls握手的超时时间,通过AfterFunc实现,超时后,直接返回tlsHandshakeTimeoutErrorDisableKeepAlives:如果为true,不会有conn连接
2022-02-24 23:42:59
1005
原创 golang http 1.1 max body实现
http1.1没有实现max body的设置,不像rpc可以直接设置接受和发送的body最大大小,具体可以参考grpc 客户端、服务端 发送、接收消息大小,是按照有多大就发送多大的内容,容易导致服务撑死可以通过io.LimitReader读取body,然后判断返回的err是不是io.EOF来进行限制r := io.LimitReader(body)d, err := ioutil.ReadAll(r)if err != io.EOF { return ...}...
2022-02-11 13:04:58
715
原创 api-server 源码学习
apiserver实现server的实现在apiserver/pkg/server/handler.go里的direct实现使用go-restfule实现路由功能所有的都是NewRESTStorage资源创建,从main函数开始,到db层kube-apiserver/apiserver.go里的main函数kube-apiserver/app/server.go里的NewAPIServerCommand函数Run函数CreateServerChain函数cr
2022-02-08 22:17:18
920
原创 grpc 客户端、服务端 发送、接收消息大小
客户端最大发送消息大小,默认值defaultClientMaxSendMessageSize为math.MaxInt32(4G),可以通过grpc.WithDefaultCallOptions(MaxCallRecvMsgSize(x))进行大小设置最大接收大小,默认值defaultClientMaxReceiveMessageSize为1024 * 1024 * 4(4M),可以通过grpc.WithDefaultCallOptions(grpc.MaxCallRecvMsgSize(x))进行大小
2022-02-07 11:02:19
4190
原创 k8s 健康检查probe,exec方式,docker puase后不能隔离路由
问题服务配置的健康检查为脚本的方式使用docker pause命令的方式,将容器里面的所有进程挂住readiness失败,不会将endpoint从service里面隔离出,客户端调用会导致偶现挂住原因k8s这种场景下,不会认为健康检查是失败的,不会记录失败次数,只是不断重试,然后上报event代码的实现func (pb *prober) probe(probeType probeType, pod *v1.Pod, status v1.PodStatus, container v
2022-01-25 20:45:31
768
原创 k8s - leader election 实现
leader electionlock type 锁类型leasesendpointsleasesconfigmapsleasesleases类型实现对应的struct,leaderelection/resourcelock/leaselock/LeaseLockendpointsleases实现endpoints和leases两种方式MultiLock: 用作迁移,里面有两种场景,Primary、SecondaryendpointsLock通过在endpoints里
2022-01-23 23:04:21
1546
原创 k8s里的Visitor模式学习
Visitor模式visitor模式在k8s源代码里面比较场景,刚接触,理解起来有点绕,体会其本质后,发现就是callback的一种实现示例代码type Callback func()type Visitor interface { Visit(callback Callback)}type A struct { visitor Visitor}func (a *A) Visit(callback Callback) { fmt.Println("start execute A"
2021-12-21 23:36:31
161
原创 kubelet学习
kubelet学习整体由Kubelet结构体为出发点,结构体里包含各种manager,实现对应功能podManager:具体结构实现为basicManager(pod_manager.go)workQueue:pod的生命周期处理Kubelet的syncLoopIteration函数通过各种chan,获取需要处理的pods,交给podManager处理configCh:配置发生变化的pods使用两级生产者-消费者模型一级生产-消费生产者:各种source,当前有3类s
2021-12-19 23:24:52
281
原创 k8s网络学习记录
记录service的实现KUBE-SERVICES链在PREROUTING里面有,在OUTPUT链也有,原因:根据iptables的文档,如果数据包是直接由本地应用产生的,那么OUTPUT链就会触发。iptables里的地址伪装也就是(MASQUERADE),不仅针对发送请求,而且针对返回请求,这样就实现了源地址的替换,能实现转发 。发送时,将源IP替换成本地IP,发送出去,请求回来后,把返回的源IP替换成本地IP,这样就实现了转发ExternalIP和NodePort实现路由轮训
2021-12-13 14:36:52
1765
原创 yum install brctl报错
安装brctl,如果使用下面命令会报错,找不到包yum install brctl实际应该执行下面的命令# -y 表示全部问题自动回答为是yum install bridge-utils -y
2021-12-12 10:43:44
1018
原创 goland标准化设置
背景goland默认启动不能满足当前开发的代码开发标注,特使用该博客进行记录设置import规范ctl + alt + s进入设置选择Edit -> Code Style -> Go -> Imports,勾选以下选项Move all imports in a single declarationGroup stdlib importsMove all stdlib imports in single groups...
2021-12-02 10:32:25
267
原创 su不用输入密码
su命令作用su 为switch user背景平时开发在测试环境调测,因为操作系统都是被加固的,su切换用户需要输入命令,很麻烦,如何su切换不输入命令勒,操作如下操作判断当前有没有wheel用户,默认是有的cat /etc/group | grep wheel将当前用户加入wheel用户组,下面是以toase用户为例usermod -g wheel toase判断是否加入成功,执行下面的命令即可id toase修改/etc/pam.d/su文件,将下面注释掉的
2021-12-01 23:37:49
2129
原创 golangci-lint检查项说明
golangci-lint说明集成各项golang的静态检查工具英文原版说明地址内容涉及到编码风格(style)、错误处理(error)、会导致代码(bugs)、检查测试代码(test)、metalinter、sql相关判断(sql)、影响性能(performance)、圈复杂度(complexity)、注释(comment)、包引用(import)、模块管理(module)、代码格式化(format)默认启动检查工具名字描述预设作用deadcode发现未使用的代码
2021-11-25 19:51:01
2341
原创 git 配置代理
配置代理找到gitconfig的地址,可以通过everything软件查询,默认安装是在C:\Program Files (x86)\Git\etc下加入http.proxy这个参数,格式为http://user_name:pwd@domain_name:port如果出现SSL certificate problem: self signed certficate in certificate chain,则加入http.sslVerify,设置其值为false执行完,这三步就好了,可以通过```
2021-10-14 19:13:05
382
原创 golang runtime Caller、Callers、CallersFrames、FuncForPC、Stack作用
参考如何在Go的函数中得到调用者函数名-鸟窝Caller获取调用函数信息参数作用:0表示调用函数本身Callers获取程序计算器,第二个参数会返回程序计算器列表,return值是个数CallersFrames获取栈的全部信息,通过和Callers配合来使用FuncForPC通过reflect的ValueOf().Pointer作为入参,获取函数地址、文件行、函数名等信息Stack获取栈信息...
2021-08-16 16:23:22
1484
原创 nginx 配置学习记录
概览配置存在nginx.conf里面,如果不知道该配置在哪,可以通过ps nginx进程查看或者通过find命令查找分为全局配置、events配置、http配置、server配置4部分http配置里面配置upstream(上游的)、server里面定义location:upstream里面定义后端地址已经可以实现健康检查location里面定义具体的路由配置信息,通过proxy_pass 转到upstream里去,从而找到对应的后端配置upstream里面的max_fails和fa
2021-07-28 11:07:44
55
原创 sublime记录
PrettyJsonctrl+shift+p,然后输入install package输入PrettyJson等待安装完成快捷键为ctrl+alt+j安装完成,快捷键不生效点击Preferences->Key Bindings添加如下行,然后保存,重试即可{ "keys":["ctrl+alt+j"], "command": "pretty_json" }参考...
2021-06-30 16:09:57
74
原创 docker 代理设置
如何设置docker的代理参考docker官方文档以下是root操作的前提,如果没有root权限,请在命令前面加上sudo为docker service创建目录文件 mkdir -p /etc/systemd/system/docker.service.d ```创建代理配置文件http-proxy.conftouch /etc/systemd/system/docker.service.d/http-proxy.conf在http-proxy.conf里面加入如下配
2021-06-26 09:19:25
484
原创 最长回文子串
题目最长回文子串示例 1:输入:s = “babad”输出:“bab”解释:“aba” 同样是符合题意的答案。说明使用动态规划法,状态转移使用左右index left, right进行探测,检查s[left, right]是否为回文串,则需要判断s[left+1, right-1]为回文串,如果s[left+1, right-1]为回文串,则只要s[left] == s[right]即可如何判断s[left+1, right-1]为回文串,使用逆序进行操作即可,即先判断s[left+1,
2021-06-23 10:31:13
65
原创 无重复字符的最长子串
题目给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度示例 1:输入: s = “abcabcbb”输出: 3解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。题解使用滑动窗口实现实际就为操作左右两个index left, right,right一直增加,left为当right出现重复的时候,left调为之前老的index+1而且old index必须大于等于left index(即存在的必须在left ~ right之间)代码func lengthOf
2021-06-23 09:45:13
65
原创 golang interface “坑记录“
问题最近使用golang写一个分布式任务系统,需要将过程中的变量存储到数据库,以用于任务执行过程中,进程挂了,调度到另一个实例上去, 过程中的变量需要被存储。该变量的获取存在两种场景:直接从内存中获取,任务被重新调度,需要从数据库里获取,在内存中使用interface获取发现获取不到的现象,具体如下面示例代码的GetB,解决办法是内存通过type实现,或者reflect实现,如果存储到数据库的使用json marshal unmarshal即可示例代码func main() { data := ne
2021-06-12 12:55:21
270
3
原创 golang 标准库json Marshal、Unmarshal坑
int类型使用json Marshal,然后使用Unmarshal后,会转换成float64 – 向上取demo demo := make(map[string]interface{}, 5) demo["a"] = 1 mv, err := json.Marshal(demo) if err != nil { fmt.Println("marshal failed, ", err.Error()) return } result := make(map[string]interf.
2021-06-09 11:37:40
889
原创 bit、byte、KB、M、G、T相互关系
关系1t = 1024G(2^10) = 10241024 M = 102410241024kb =1024102410241024*8bit在线转换工具1byte = 8bit1KB = 1024byte1M = 1024kb1G = 1024M说明内存寻址以byte为单位golang各种数据类型需要的字节数uint32为4byte,存储所有的uint32需要的内存为16G,原因如下uint有1 << 32 个,即2^32个,4102410241024 个4byte,即1
2021-06-02 11:28:27
2083
原创 windows-造作无法完成,因为其中的文件夹或文件已在另一个程序中打开
使用window的资源监视器查找当在使用该文件的句柄,win10和win7的界面有变化,大致差不多具体如何操作请参考
2021-05-29 11:08:47
209
原创 grpc系列-初探grpc 路由注册和转发实现
grpcgrpc将按照系列来讲,本次博客,从大体来讲,主要包括路由注册、路由转发、unary和stream的差异点后面主要会讲述优雅停机、binlog、channelz、HTTP2.0特性、intercepter、proto(包含编码、以及代码生成)总结google实现的rpc框架,开发者定义proto文件,即接口文件,通过命令生成具体代码路由通过method识别,前面一截是service name、后面一截是method name,通过.作为分隔unary是定义好整个请求流程,业务只需要
2021-05-23 01:07:55
2350
原创 linux PATH新增目录
PATH是什么新增方式/etc/profile文件作用实现在/etc/profile里面新增下面的一行,xxxx为具体的目录export PATH=$PATH:xxxx执行下面命令source /etc/profile
2021-05-20 00:02:27
180
原创 leetcode-搜索旋转排序数组-33
题目整数数组 nums 按升序排列,数组中的值 互不相同 。在传递给函数之前,nums 在预先未知的某个下标 k(0 <= k < nums.length)上进行了 旋转,使数组变为 [nums[k], nums[k+1], …, nums[n-1], nums[0], nums[1], …, nums[k-1]](下标 从 0 开始 计数)。例如, [0,1,2,4,5,6,7] 在下标 3 处经旋转后可能变为 [4,5,6,7,0,1,2] 。给你 旋转后 的数组 nums 和一个整数
2021-05-18 21:03:35
143
原创 GOPROXY 中国代理
中国代理提供商地址七牛https://goproxy.cn阿里http://mirrors.aliyun.com/goproxy/
2021-05-17 23:44:49
436
原创 golang源代码阅读,sync系列-Pool
目录总结问题问题解答使用源码分析结构体Put函数pinpinSlow函数runtime_procPin函数和runtime_procUnpin函数procPinprocUnpinshared,结构体poolDequeue概览结构体pushHead函数popHead函数popTail函数Get函数getSlow函数清理函数poolCleanup注册poolCleanup到触发点poolCleanup函数总结可以缓存变量实例的池子,每个pool存储一种类型的变量实例,支持并发内部存储结构,使用了链表、队
2021-05-16 13:27:00
360
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人