自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(85)
  • 资源 (7)
  • 收藏
  • 关注

原创 go-zero 3—客户端负载均衡算法及实现

本篇文章已经被 go-zero 团队的 微服务实践 公众号收录;go-zero 客户端负载均衡主要用了 P2C 和 EWMA算法P2Cp2c(pick of 2 choices)随机从众多数据中选择两个EWMAEWMA(exponentially weighted averages)指数移动加权平均,体现的是一段时间内的平均值(可以调节参数,使算法更灵活)

2021-08-04 20:17:29 1206

原创 强制删除kubernetes资源

k8s 资源上有 finalizers 和等待其它资源回应,导致删除不了资源, 可以试试下面的命令。

2024-04-25 18:32:56 17

原创 python 通过 ast 替换代码

python 通过 ast 替换代码

2024-03-17 17:03:36 437

原创 golang 参数校验方法设计

设计规则,对参数自动化校验,不用再 对参数每一个都拿出来比较了

2021-10-14 16:35:57 495 1

原创 go-zero 2—并发处理数据包 mr(mapReduce) 的原理讲解

自己实现的代码地址https://github.com/wanmei002/goutil/blob/master/mr/mapreduce.go如果觉的自己golang 功底不强的话,可以先看我的实现代码:汉字注释,省略了一些go-zero的相互依赖,没有像go-zero兼容那么多的需求,相对简单原理这里用到了一个概念mapReduce, 那什么是 mapReduce 呢?这里简单的说下我的理解:mapReduce 是一种分布式处理数据并合并数据的概念,如果你想并发处理大量数据,你需要把很多数

2021-07-30 19:07:02 2285

原创 go-zero 1—rpc服务的创建和rpc服务之间的调用,并介绍go-zero 服务启动的流程

创建一个 go-zero grpc 服务并介绍了下 服务启动的流程

2021-06-24 19:21:53 3920

原创 grpc 使用etcd 用于服务注册和服务发现出现的问题以及解决的方法

问题一获取 etcd client golang代码的时候,出现了如下问题:github.com/coreos/bbolt: github.com/coreos/[email protected]: parsing go.mod:module declares its path as: go.etcd.io/bboltbut was required as: github.com/coreos/bbolt进入项目 github.com/coreos/bbolt发现 go.mod 文件内 module go

2021-06-16 19:09:41 1660 1

原创 gRPC-11 etcd实现服务注册和服务发现

原理1. 首先为服务起一个名字,启动的时候,把信息存储到`etcd`中 1.1 比如: key是服务名 值是ip。 多个相同的服务让key的前缀一样,这样 读取etcd的时候就可以通过前缀来读取 1.2 生成租约,并设置比较短的过期时间,把 etcd 中存储的值跟租约绑定,这样租约如果没有在有效的时间内续期(很可能已经不能提供服务了),则 etcd 保存的值就会过期 1.3 定期更新租约的过期时间2. 客户端注册相关服务的解析器,在解析器中拼接 etcd的key的前缀,获取提供服务的i

2021-06-07 15:42:26 910

原创 gRPC-10 客户端负载均衡

代码地址https://github.com/wanmei002/grpc-learn/tree/master/ch09介绍我工作中,请求一个接口,会先从去负载均衡器中获取一个ip,然后直接拿着ip去访问接口,在这里呢我们相当于把负载均衡器集成到客户端服务中,客户端发起请求的时候,会获得一个ip列表,根据特定的算法,选取一个IP, 向服务端发起请求逻辑...

2021-06-07 14:55:34 403

原创 gRPC-09 传递header信息/元数据 [golang版]

gRPC 一元模式和流模式 header头信息的写入和读取

2021-06-01 18:25:23 3253

原创 kafka消费组代码的实现[golang版]

传统的消费模型消息队列的消息被消费了,数据则从队列里删除,并且下游的多个 consumer 都要抢这条消息。发布/订阅模型允许消息被多个 consumer 消费,但是订阅者必须订阅所有分区kafka为规避上面的缺点,引入了 消费组 模型。kafka消费组 模型以下是自己的理解:比如订阅了两个主题,每个主题的分区是2,则消费组启动 4 个消费实例,每个消费实例对应一个分区,这样避免了 消费实例的竞争。同时也避免了发布/订阅模型 消费实例必须订阅所有分区的问题。上代码import (

2021-05-31 18:45:46 5282 6

原创 gRPC-08传递取消操作 [golang版]

代码地址超时取消https://github.com/wanmei002/grpc-learn/tree/master/ch06单方面取消https://github.com/wanmei002/grpc-learn/tree/master/ch07简单介绍取消请求又分超时取消请求 和 单方面的主动取消。取消主要是用 context.Context[golang版] 来远程传递取消操作。可以用grpc 的 status.Code() 来获取错误码,不同的错误码对应不同的错误。完整的错误码列表可

2021-05-31 14:19:25 664 2

原创 gRPC-07 客户端拦截器的实现

代码地址https://github.com/wanmei002/grpc-learn/tree/master/ch05介绍客户端拦截器主要是 内置客户端发送数据前和接收数据后的一些通用逻辑的实现。下图单词拼错了;拦截器: interceptor直接上代码吧一元拦截器拦截 grpc 的一元模式需要实现 grpc/interceptor.go/type UnaryClientInterceptor func(ctx context.Context, method string, req, r

2021-05-30 19:41:21 223

原创 gRPC-06 服务端拦截器的实现

代码地址https://github.com/wanmei002/grpc-learn/tree/master/ch05拦截器简述在远程方法执行之前或执行之后都需要做一些通用逻辑。gRPC有拦截器相关逻辑(相当于 gin 框架的 Use)。或做一些日志、身份验证、性能等需求,可以在拦截器里实现。服务端拦截器一元拦截器一元拦截器需要实现 grpc.interceptor.type UnaryServerInterceptor func(ctx context.Context, req interf

2021-05-25 15:00:49 219

原创 gRPC-05 双端流的实现

代码地址https://github.com/wanmei002/grpc-learn/tree/master/ch04双端流的描述客户端可以在建立的连接上间歇性发送数据;服务端接收数据,可选择性的发送响应数据给客户端,就像聊天室功能一样。proto service 声明service Product { rpc AddProduct(stream Order) returns (stream Ret);}message Order { string name = 1;

2021-05-20 17:40:18 227

原创 gRPC-04 客户端流的实现

代码地址https://github.com/wanmei002/grpc-learn/tree/master/ch03客户端流的描述

2021-05-19 16:26:49 166 2

原创 gRPC-03 gRPC服务端流的实现

gRPC 服务端流的实现和客户端接收流的实现

2021-05-18 15:11:11 406

原创 gRPC-02 gRPC底层原理简单解析

gRPC底层原理简单解析

2021-05-17 19:30:31 1606

原创 go-zero 单体应用框架学习—4 监听端口

框架运行起来先说下思路:注册必要的中间件给每个路由处理函数用中间件处理给路由生成字典树开始监听端口启动入口入口函数 server.Start() ,实际上运行的是 Server.opts.start。在 go-zero/rest/engine.go 文件中的 bindRoute 方法, 这个里面注册了中间件,并对路由处理函数用中间件处理。中间件原理请看这篇文章 ```go func (c Chain) Then(h http.Handler) http.Handler {

2021-05-13 15:34:51 451

原创 go-zero 单体应用框架学习—3 路由生成字典树

找到实现 http.Handler 接口的结构体顺着入口函数 server.Start(),找到了 router.NewRouter() 创建的对象实现了 http.Handler 接口创建的对象为 router.patRouter 结构体的实例这个结构体有两个方法Handle 路由生成字典树ServeHTTP 方法实现了 http.Handler 接口,这个方法里有路由匹配,匹配失败的逻辑type patRouter struct { trees map[string]*sea

2021-05-13 14:23:23 448

原创 go-zero 单体应用框架学习—2 中间件的添加和原理

中间件的添加在 server.Server 结构体有个一方法 Use // Use adds the given middleware in the Server. func (e *Server) Use(middleware Middleware) { e.ngin.use(middleware) } type Middleware func(next http.HandlerFunc) http.HandlerFunc

2021-05-11 13:44:10 1711 2

原创 go-zero 单体应用框架原理学习—1 路由相关的存储

大纲路由和对应处理方法的存储找到路由匹配的方法(gin go-zero 都是生成字典树)找到实现 http.Handler 接口的结构体上面结构体实现 ServeHTTP 这个方法这个方法里面有路由的匹配,匹配到路由执行对应的方法中间件的添加中间件的运行这一节我们先看看 go-zero 路由是怎么存储的入口方法里有一个 handler.RegisterHandlers(server, ctx),这里面有对应的请求方法 路由 处理路由的方法的存储。存储的结构体为:type

2021-05-11 12:20:08 1270 2

原创 第五课 golang的流程控制

for 循环Loop: for i:=0; i< 10; i++ { for j:=0; j<10; j++ { if i == 5 { continue Loop } fmt.Println("i:",i, ";j:",j) } }switchi := 10 switch { case i==4: fmt.Println("4444") case i==5: fmt.Println("5555") default:

2021-04-24 11:46:07 38

原创 go-zero框架threading包—安全运行goroutine

go-zero threading包里面主要两个方法:GoSafe(用协程运行方法)RunSafe(带panic捕捉)先上两个方法开启go协程运行这个函数// GoSafe runs the given fn using another goroutine, recovers if fn panics.func GoSafe(fn func()) { go RunSafe(fn)}增加捕捉panic方法// RunSafe runs the given fn, recov

2021-04-22 11:52:55 1082

原创 golang 第四课 结构体(struct)、interface{}、方法(func)详解

精讲了 golang 的方法 结构体(struct),接口(interface{}), 希望能帮助到你

2021-04-20 11:58:22 2035

原创 第二课 golang的常量、枚举、类型的讲解

本章主要讲解了 golang 的常量声明 枚举声明 值类型 和 引用类型的声明和赋值

2021-04-17 17:19:32 314

原创 第三节课 运算、字符串连接、类型转换、断言

第三节数字运算/字符串的简单连接获取值类型的指针类型转换int() string() []byte() []rune()类型断言数据的底层原理

2021-04-16 18:39:59 81

原创 第一课 golang 的安装

golang 的安装安装包的下载官网包的下载地址https://golang.google.cn/dl/国内包的下载地址https://studygolang.com/dl国内下载地址比较快点配置环境PATH:GOPATH:GOROOT:

2021-04-12 19:55:46 101

原创 golang strings包的总结

strings 包的学习strings.Index(s, substr string) index返回 substr 在 s 中的位置,是以 ascii 码为单位的,如果有汉字,一个汉字当三个字节如果想把汉字也当成一个长度,可以用以下自己封装的函数func Utf8Index(str1, str2 string) int { i := strings.Index(str1, str2) if i < 0 { return i } buf

2021-04-11 20:47:29 350 2

原创 郑州大河宸院三期信息汇总

@[TOC]大河宸院三期信息汇总规划图交房时间合同是2023年9月交房,很多置业顾问说可能会提前几个月交小区周围情况北面: 安置房小区。南面:大河宸院四期:建筑最高13层。西面:2栋安置房。东面:公交终点站和商业用地小学 中学情况小区西南是小学,惠济区运河小学(网上有这个学校的招标信息,上面写着 2022年5月工程完工)中学是郑州市第七十九中学(惠济区的朋友说教学质量不太好)地铁目前开通可2号线惠济区政府站,距离小区路程(不是直线距离)1.2km。 步行大约12分钟...

2021-03-18 11:29:58 5375 13

原创 git 保存本地,不提交到远程仓库

git update-index --assume-unchanged filename

2020-09-17 14:18:57 1097

原创 elasticsearch 中的基本概念和基本的工作流程

Elasticsearch解决了分布式(搜索、索引),高性能(近实时),高可用(海量数据,堆机器)的检索服务,可以服务数百台机器处理大数据一次简单的搜索流程索引-> 分析 -> 检索索引 : 将收集到的数据建立倒排索引并存储分析 : 将用户输入的 keyword 分解为索引服务可识别的词缀检索 : 将对应 token 与索引库中的倒排索引进行对比,并返回检索结果。es 数据分布式数据的存储访问在多个节点(node)的多个分片(shard)上。es 自动将分片数据分

2020-09-03 10:46:41 351

原创 基于本地消息表的分布式事务解决方案总结

什么是分布式事务一个应用系统操作两个数据库(两个不同的主节点上), 要使数据强一致性, 此时就不能用传统的事务来解决强一致性, 此时需要用到分布式事务CAP原则C consistency(一致性), A (availability)可用性 P(paratiton tolerance)区分容错性。 CAP原则指CAP三者不能同时满足,要么能同时满足AP 要么同时满足CP(P 是分布式的基础, 不能实现P就谈不上分布式系统了)基于本地消息表常用的分布式事务解决方案场景用户支付完成后,会调

2020-07-20 11:58:47 387

原创 vscode远程编写golang代码

先远程连接 linux没有远程连接 linux的同学可以参考我的这篇博文vscode远程连接linux服务器先用vscode 连接远程linux服务器开始安装go插件安装 go 插件 ,点击 install in SSH: 服务器上重启vscode, 随便写一个go 程序,vscode 右下角会有下面的弹出框, 点击 Install All安装 所有的 gotools 插件 (可能需要翻墙),如果安装失败 可以试试把我安装编译好的程序放到GOPATH/bin 目录下(或者 PATH 目

2020-06-30 10:16:44 1897

原创 elasticSearch(7.8) 入门

es 基础概念索引 : 含有相同属性的文档集合 相当于数据库的 database分片 : 每个索引都有多个分片, 每个分片是一个 Lucene 索引 (应该采用分块索引)备份 : 拷贝一份分片就完成了分片的备份类型 : 索引可以定义一个或多个类型, 文档必须属于一个类型 相当数据库里的 table文档 : 是可以被索引的基本数据单位 相当于table 里的一行记录es 基本语法 RESTFUL API语法风格api 基本格式: http://:/<索引>/<类型

2020-06-29 14:14:18 1564

原创 备忘 vscod连接远程服务器

默认已有环境安装有vscode安装有 gitvscode远程连接服务器需要用到ssh, 如果是win7请把git安装目录下的 bin 目录加入环境变量PATH中,win10自带ssh服务, 如果win10 连接失败,请在 设置->应用和功能->管理可选功能 选项里是否安装有ssh服务,如果没有 点击添加功能 安装 openSSH服务vscode安装插件在扩展中搜索 Remote-SSH插件并安装ctrl+shift+p 搜索 Remote-SSHctrl+shif

2020-06-29 10:33:28 5101

原创 golang 实现字符串匹配算法Trie

package mainimport "fmt"type TrieNode struct { Date string Children map[string]*TrieNode IsEndingChar bool}type GoTrie struct { Root *TrieNode}func (this *GoTrie) Insert(text string) { p := this.Root for i:=0; i < len(text); i++ { in

2020-06-16 14:17:09 1102

原创 优化快速排序-golang版

我们先用图把思想描述下用代码实现package mainimport "fmt"func main(){ arr := [...]int{5,2,7,2,4,8,1,3} quickSort(arr[:], 0, len(arr)-1) fmt.Println(arr)}//思想:// 1. 随机取一个数 找到这个数在列表中的位置(左边的都比它小,右边的都比它大)// 2. 然后把左边、右边的重复 1 步骤func quickSort(sc []int, begin, end

2020-06-10 09:09:50 212

原创 总结下golang的time包

time 包时间格式 2016-01-02 15:04:05获取 time 包里 Time 对象获取当前时间 time.Now()获取指定时间 func ParseInLocation(layout, value string, loc *Location)(Time, error)time.ParseInLocation("2006-01-02 15:04:05", "2020-06-06 10:59:59", time.Local)获取时间戳fmt.Println(tim

2020-06-07 12:11:13 245

原创 gRPC-01 初入 golang gRPC

gRPC相关工具的下载 和 简单的gRPC server的代码编写和client 代码编写

2020-05-21 01:03:21 387

concurrent_spider.rar

golang 简单实现并发版爬虫,压缩包中包含有代码工作流程图,先看流程图,在看代码,简单易懂,希望这个小项目对你有所帮助

2020-04-09

concurrent.rar

golang 爬虫并发版代码,包含并发版爬虫的工作流程图,比较简单好理解,可以对 goroutine 有更深的理解

2020-04-09

ueditor.rar

go实现百度富文本框,后端功能主要实现了ueditor初始化信息,上传图片的功能,借鉴与ueditor php版

2019-12-26

bind_router_to_controller.go

golang websocket源码解读,含有 ListenAndService 主要源码 和 默认路由的源码实现

2019-12-14

simple_server.go

简单的用golang 发起一个http 服务,并处理获取到的数据, 也包含 发送简单的 json 到客户端

2019-12-01

blance.zip

golang抽象工厂模式简单实现负载均衡, 主要是实现简单的思想,可以借鉴

2019-11-07

go_base_syntax.md

golang的基础语法总结,适合简单看过语法的同学,没有 struct interface,后续会更新

2019-11-07

空空如也

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

TA关注的人

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