golang
正版两只羊
golang,php,c++,区块链(ethereum,fabric),微服务等
展开
-
grpc 报错解决 code = Unavailable desc = transport is closing
最近遇到 grpc 客户端报错rpc error: code = Unavailable desc = transport is closing,原因是连接长时间没有使用,被服务端断开,但是看过grpc源码的都知道,如果failfast 设置为false的话,应该会重试的;并且 连接关闭之后grpc.clientConn也会维护这个状态,所以不应该出现这个问题才对,这个是个很奇怪的事情...原创 2020-03-05 15:21:16 · 27674 阅读 · 2 评论 -
记一次服务注册&服务发现的问题和解决(etcd和k8s同时结合使用情况下)
目录背景分析原因总结背景早先的都采用基于grpc+etcd做服务注册和服务发现,都是正常的 后来有部分服务采用k8s部署,为了新旧兼容,服务会按照老方式把宿主机的ip注册到etcd上,k8s体系类使用体系类的服务发现,k8s体系外的依然使用原来的方式,互不影响 但是有服务基于k8s部署之后,发现client调用接口超时,而直接通过ip调用却是正常 且多数是发生在...原创 2019-11-27 18:20:51 · 2235 阅读 · 2 评论 -
mysql连接池长连接机制无效的问题排查-(go-sql-driver的问题)
背景:golang的mysql库采用的是驱动模型Go官方提供了database/sql包来给用户进行和数据库打交道的工作,database/sql库实际只提供了一套操作数据库的接口和规范,例如抽象好的SQL预处理(prepare),连接池管理,数据绑定,事务,错误处理等等。官方并没有提供具体某种数据库实现的协议支持。和具体的数据库,例如MySQL打交道,还需要再引入MySQL的驱动...原创 2019-08-28 21:26:54 · 1933 阅读 · 3 评论 -
以太坊的共识算法解读
TechNeo 技术沙龙第20期有幸参加 51cto这次组织的技术分享,当时接到消息的时候只有两天了, ppt做的比较仓促TechN目录在这里:PPT 放在 这里了: https://download.csdn.net/download/liangzhiyang/10368696好像博客没有上传 附件的功能,只能放到 这里了,吐槽一下这个里面有分享的视频:http://mdsa.51cto.co...原创 2018-04-23 16:59:36 · 1521 阅读 · 2 评论 -
各编程语言的值语义和引用语义的区别详解(golang,c++,php,solidity)
最近在使用 solidity(以太坊ethereum的智能合约的语言)的语言的时候,发现一些问题,只要是solidity语言中array和struct类型在storage和memory情况下的引用语义的理解问题另外对于不同语言的引用语义的理解其实是不一样的,这一点对于新人来说就比较坑~对于值语义,各个语言没有差别的,这个很好理解但是对于引用语义,这里以c++和php中的引用类型中的...原创 2018-03-12 20:55:05 · 1268 阅读 · 0 评论 -
go-ethereum源码分析-consensus - 共识
源码包路径:github.com/ethereum/go-ethereum/consensus/共识算法引擎接口的定义如下type Engine interface { // Author retrieves the Ethereum address of the account that minted the given // block, which may be different ...原创 2018-03-02 15:40:32 · 1448 阅读 · 0 评论 -
关于golang的context.WithTimeout的cancel的说明
简介context是一个在go中时常用到的程序包,google官方开发。特别常见的一个应用场景是由一个请求衍生出的各个goroutine之间需要满足一定的约束关系,以实现一些诸如有效期,中止routine树,传递请求全局变量之类的功能。使用context实现上下文功能约定需要在你的方法的传入参数的第一个传入一个context.Context类型的变量。 比如:上层需要指定超时的情况: ctx,原创 2017-03-24 17:25:40 · 20479 阅读 · 0 评论 -
grpc的invoke(一次请求)正常执行流程
请先阅读 grpc的dial正常执行流程和 grpc服务异常情况的执行流程默认配置情况下(还有其它没有提到的配置都取默认值):设置了balancer(etcd等)没有设置WithBlock,即dialOptions.block = false没有设置FailOnNonTempDialError,即dialOptions.copts.FailOnNonTempDialError =原创 2017-03-15 17:09:21 · 9682 阅读 · 0 评论 -
grpc服务异常情况的执行流程
请先阅读 grpc的dial正常执行流程 默认配置情况下(还有其它没有提到的配置都取默认值):设置了balancer(etcd等)没有设置WithBlock,即dialOptions.block = false没有设置FailOnNonTempDialError,即dialOptions.copts.FailOnNonTempDialError = false原创 2017-03-13 17:07:03 · 6461 阅读 · 0 评论 -
grpc的dial正常执行流程
请先阅读 grpc源码注解(golang)以下基于默认配置情况下(还有其它没有提到的配置都取默认值):设置了balancer(etcd等)没有设置WithBlock,即dialOptions.block = false没有设置FailOnNonTempDialError,即dialOptions.copts.FailOnNonTempDialError = falsegr原创 2017-03-13 17:04:32 · 10964 阅读 · 0 评论 -
grpc源码注解(golang)
grpc源码注解(通过阅读源码的一些理解)最近在看grpc的源码(基于golang),为了方便自己阅读以及理解,增加了一些注解。这里分享出来,希望对大家有些帮助,也是督促自己啦地址: https://github.com/liangzhiyang/annotate-grpc-go目前client端基本流程都ok了(还有server端等等)会持续更新~~接原创 2017-03-09 16:47:33 · 6035 阅读 · 2 评论 -
golang的垃圾回收(GC)机制
请先阅读 golang的goroutine调度机制然后再到这里 golang的垃圾回收采用的是 标记-清理(Mark-and-Sweep) 算法就是先标记出需要回收的内存对象快,然后在清理掉;在这里不介绍标记和清理的具体策略,只介绍 GC过程是怎么调度的以及stw相关这个算法,会导致 stw (stop the world)的问题,中断用户逻辑触发GC机制1.原创 2016-09-26 14:35:52 · 18556 阅读 · 0 评论 -
golang的goroutine调度机制
一直对goroutine的调度机制很好奇,最近在看雨痕的golang源码分析,感觉豁然开朗,受益匪浅;去繁就简,再加上自己的一些理解,整理了一下~~调度器主要基于三个基本对象上,G,M,P(定义在源码的src/runtime/runtime.h文件中)1. G代表一个goroutine对象,每次go调用的时候,都会创建一个G对象2. M代表一个线程,原创 2016-09-26 14:28:08 · 28841 阅读 · 20 评论