- 博客(92)
- 资源 (7)
- 收藏
- 关注
原创 docker 私有仓库的镜像删除
每次请求接口的 scope 不一样 都需要去请求一次 token 接口。以上面的 Www-Authenticate 信息为例子。header 头里的 sha256 在删除的时候需要。注意 header 头都需要,必需加全。比如我向获取所有镜像列表接口。返回的 header 头里有。aaa/bbbb 是镜像。
2024-09-27 17:07:26 812
原创 http2、grpc 的反向代理的实现
grpc 使用的是 http2, 如果要代理 grpc 请求,就需要开启 tls, tls 的生成请参考我以前的博客。看看使用的是不是 http2.Transport, 还有是不是启用的是 https 服务。采用golang 的自带的代理。transport 采用。
2024-10-10 17:48:55 389
原创 grpc NewClient 报错 name resolver error: produced zero addresses
grpc NewClient 报错 produced zero addresses
2024-05-29 20:13:55 805
原创 go-zero 3—客户端负载均衡算法及实现
本篇文章已经被 go-zero 团队的 微服务实践 公众号收录;go-zero 客户端负载均衡主要用了 P2C 和 EWMA算法P2Cp2c(pick of 2 choices)随机从众多数据中选择两个EWMAEWMA(exponentially weighted averages)指数移动加权平均,体现的是一段时间内的平均值(可以调节参数,使算法更灵活)
2021-08-04 20:17:29 1425
原创 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 2641
原创 go-zero 1—rpc服务的创建和rpc服务之间的调用,并介绍go-zero 服务启动的流程
创建一个 go-zero grpc 服务并介绍了下 服务启动的流程
2021-06-24 19:21:53 4449
原创 grpc 使用etcd 用于服务注册和服务发现出现的问题以及解决的方法
问题一获取 etcd client golang代码的时候,出现了如下问题:github.com/coreos/bbolt: github.com/coreos/bbolt@v1.3.6: 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 1761 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 986
原创 gRPC-10 客户端负载均衡
代码地址https://github.com/wanmei002/grpc-learn/tree/master/ch09介绍我工作中,请求一个接口,会先从去负载均衡器中获取一个ip,然后直接拿着ip去访问接口,在这里呢我们相当于把负载均衡器集成到客户端服务中,客户端发起请求的时候,会获得一个ip列表,根据特定的算法,选取一个IP, 向服务端发起请求逻辑...
2021-06-07 14:55:34 453
原创 kafka消费组代码的实现[golang版]
传统的消费模型消息队列的消息被消费了,数据则从队列里删除,并且下游的多个 consumer 都要抢这条消息。发布/订阅模型允许消息被多个 consumer 消费,但是订阅者必须订阅所有分区kafka为规避上面的缺点,引入了 消费组 模型。kafka消费组 模型以下是自己的理解:比如订阅了两个主题,每个主题的分区是2,则消费组启动 4 个消费实例,每个消费实例对应一个分区,这样避免了 消费实例的竞争。同时也避免了发布/订阅模型 消费实例必须订阅所有分区的问题。上代码import (
2021-05-31 18:45:46 5708 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 760 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 275
原创 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 248
原创 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 258
原创 gRPC-04 客户端流的实现
代码地址https://github.com/wanmei002/grpc-learn/tree/master/ch03客户端流的描述
2021-05-19 16:26:49 198 2
原创 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 505
原创 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 594
原创 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 1823 2
原创 go-zero 单体应用框架原理学习—1 路由相关的存储
大纲路由和对应处理方法的存储找到路由匹配的方法(gin go-zero 都是生成字典树)找到实现 http.Handler 接口的结构体上面结构体实现 ServeHTTP 这个方法这个方法里面有路由的匹配,匹配到路由执行对应的方法中间件的添加中间件的运行这一节我们先看看 go-zero 路由是怎么存储的入口方法里有一个 handler.RegisterHandlers(server, ctx),这里面有对应的请求方法 路由 处理路由的方法的存储。存储的结构体为:type
2021-05-11 12:20:08 1323 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 60
原创 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 1321
原创 golang 第四课 结构体(struct)、interface{}、方法(func)详解
精讲了 golang 的方法 结构体(struct),接口(interface{}), 希望能帮助到你
2021-04-20 11:58:22 2179
原创 第三节课 运算、字符串连接、类型转换、断言
第三节数字运算/字符串的简单连接获取值类型的指针类型转换int() string() []byte() []rune()类型断言数据的底层原理
2021-04-16 18:39:59 104
原创 第一课 golang 的安装
golang 的安装安装包的下载官网包的下载地址https://golang.google.cn/dl/国内包的下载地址https://studygolang.com/dl国内下载地址比较快点配置环境PATH:GOPATH:GOROOT:
2021-04-12 19:55:46 155
原创 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 398 2
原创 郑州大河宸院三期信息汇总
@[TOC]大河宸院三期信息汇总规划图交房时间合同是2023年9月交房,很多置业顾问说可能会提前几个月交小区周围情况北面: 安置房小区。南面:大河宸院四期:建筑最高13层。西面:2栋安置房。东面:公交终点站和商业用地小学 中学情况小区西南是小学,惠济区运河小学(网上有这个学校的招标信息,上面写着 2022年5月工程完工)中学是郑州市第七十九中学(惠济区的朋友说教学质量不太好)地铁目前开通可2号线惠济区政府站,距离小区路程(不是直线距离)1.2km。 步行大约12分钟...
2021-03-18 11:29:58 5898 13
原创 elasticsearch 中的基本概念和基本的工作流程
Elasticsearch解决了分布式(搜索、索引),高性能(近实时),高可用(海量数据,堆机器)的检索服务,可以服务数百台机器处理大数据一次简单的搜索流程索引-> 分析 -> 检索索引 : 将收集到的数据建立倒排索引并存储分析 : 将用户输入的 keyword 分解为索引服务可识别的词缀检索 : 将对应 token 与索引库中的倒排索引进行对比,并返回检索结果。es 数据分布式数据的存储访问在多个节点(node)的多个分片(shard)上。es 自动将分片数据分
2020-09-03 10:46:41 435
原创 基于本地消息表的分布式事务解决方案总结
什么是分布式事务一个应用系统操作两个数据库(两个不同的主节点上), 要使数据强一致性, 此时就不能用传统的事务来解决强一致性, 此时需要用到分布式事务CAP原则C consistency(一致性), A (availability)可用性 P(paratiton tolerance)区分容错性。 CAP原则指CAP三者不能同时满足,要么能同时满足AP 要么同时满足CP(P 是分布式的基础, 不能实现P就谈不上分布式系统了)基于本地消息表常用的分布式事务解决方案场景用户支付完成后,会调
2020-07-20 11:58:47 435
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人