![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
后端开发
文章平均质量分 91
djqueue
Be a better man.
展开
-
grpc 打印日志到日志文件
在使用grpc时,有报错往往是一件很头疼的事情。虽然grpc的每个方法报错都会返回一些错误信息,但很多时候这些错误信息并不能引导我们直接发现问题的根本(尤其是排查一些连接层面的偶现问题时)。好在grpc的源码里也是有日志的,通过grpc源码中的日志,我们不但可以更深入的了解grpc的运行过程,也可以在遇到报错时更快速的定位问题。本篇我们就来研究一下,如何开启grpc的日志,并将其写入我们服务本身的日志文件中。如何开启grpc日志对于grpc这种使用者众多的开源项目,有问题最好的办法就是先看readm原创 2021-10-07 00:50:12 · 4626 阅读 · 1 评论 -
assigning the result of this type assertion to a variable could eliminate the followin assertion解决
今天给项目加上了golangci检测,结果运行gosimple的时候报了这样一个问题:xxx.go:289:10: S1034: assigning the result of this type assertion to a variable (switch err := err.(type)) could eliminate the following type assertions: xxx.go:291:14 (gosimple) switch err.(type) {原创 2020-10-20 23:48:13 · 4974 阅读 · 2 评论 -
如何用pprof检测golang代码中的死锁
用golang做的后端项目,为了实现高性能,通常会在运行过程中开启多个goroutine,并行处理并发请求。并发处理请求提升效率的同时,也引入了资源并发读写的场景,这通常会带来一些问题,比如同时读写一个map会导致程序panic,为此,我们需要为那些不应被多个goroutine同时访问的资源加锁。一个复杂的后端项目,通常会包含很多很多的锁,我们很难保证我们写的程序不出现死锁,或者长时间的锁等待。锁的问题不像业务逻辑的问题那么容易被发现,它有时可能只是阻塞了某个goroutine,这种情况下整体的功能原创 2020-08-07 19:55:44 · 9618 阅读 · 2 评论 -
golang项目 如何排查死锁
之前写过一篇如何用pprof检测golang代码中的死锁,讲了下如何发现代码中的死锁,发现了死锁怎么办?自然是要解之。。最近刚好解决了两个死锁,分享一下心得,希望能帮助到大家~我把死锁分为两种,一种为简单死锁,另一种为并发场景下的死锁,接下来我们分别来说一说。简单死锁所谓简单死锁,就是写代码的时候粗心大意写出来的,比如说我们写了一个这样的函数:函数A会在获取锁之后调用函数B,而B也要获取这个锁,这时候显然就会发生死锁,而且是百分百出现的。现在你看着我的这个图可能觉得,我怎么可能犯如此原创 2020-09-17 01:00:52 · 5499 阅读 · 1 评论 -
grpc进阶篇之resolver
当我们的服务刚刚成型时,可能一个服务只有一台实例,这时候client要建立grpc连接很简单,只需要指定server的ip就可以了。但是,当服务成熟了,业务量大了,这个时候,一个实例就就不够用了,我们需要部署一个服务集群。一个集群有很多实例,且可以随时的扩容,部分实例出现了故障也没关系,这样就提升了服务的处理能力和稳定性,但是也带来一个问题,grpc的client,如何和这个集群里的server建立连接?这个问题可以一分为二,第一个问题:如何根据服务名称,返回实例的ip?这个问题有很多种解决方案,我们可原创 2020-09-13 21:18:03 · 6930 阅读 · 3 评论 -
go gRPC初体验(win10+普通网络)
在公司实习的时候,发现代码里面有grpc,当时啥也不懂,也不知道咋用的,好在实习期间并没有需要新增rpc调用的地方,但还是觉得趁早弄明白比较好,以后总会用到。既然是初体验,肯定是从啥都没有开始的,网上很多文章,安装各种包、命令讲的不是很系统,所以本篇就记录一下从安装开始,到运行一个小case的全过程。首先声明一下,我是在win10上操作的,我觉得吧,什么东西,如果能在windows上搞通了...原创 2020-04-08 21:36:15 · 2996 阅读 · 2 评论 -
grpc进阶篇之retry拦截器
前言之前还在学校的时候,写过一篇go gRPC初体验,算是初步预习了一下grpc的用法,知道了如何使用grpc实现简单的rpc调用,当时写了一个demo,跑通了之后就觉得,应该够用了,然而到了公司之后才发现,grpc,远不止于此。。。于是我决定好好总结一下grpc的一些进阶知识,结合公司项目里的实际用法,分享给大家,帮助初学者们更好的掌握grpc。本篇,就先介绍一下grpc的retry拦截器。为什么要retryretry很好理解,就是重试,为什么需要重试?首先,grpc常用于移动端和跨机房调用的原创 2020-08-30 20:31:37 · 2533 阅读 · 0 评论