go-kit微服务成渣之路
使用go语言,围绕go-kit工具箱从0开始学习微服务
焗个面包
没有人在年少的时候想做个普通人
展开
-
(六)go-kit集成jaeger实现服务链路追踪
前言微服务架构是一个分布式架构,实际开发中,我们按照业务要求划分服务单元,一套系统往往由多个业务单元构成。在这个场景中,一个请求肯能要经历多个业务单元的处理才能完成响应,如果出现了异常或者错误,很难定位。在往常的查询中我们往往会采取查询日志的办法定位问题,这种方法是个办法,但不是个好办法,我们需要一件工具来解放自己,在这种背景下就可以引入我们的链路追踪工具。安装jaeger通过docker安装jaeger环境:sudo docker run -d -e COLLECTOR_ZIPKIN_HTTP_PO原创 2020-06-02 13:28:56 · 787 阅读 · 0 评论 -
(五)go-kit 利用prometheus和grafana实现 API监控
前言我们的服务上线了,除了从日志可以查看一些运行情况外,其实现在服务接口对于我们来说是一个黑盒,我们不知道每个服务接口的延时,被调用次数等等指标的运行情况,我们更需要历史的指标数据知道我们的系统瓶颈在哪,然后对应去做相关的优化,如果想实时知道这些指标,就需要我们的api监控。本文代码地址地址(github地址)[https://github.com/lightTrace/cells/tree/master/cell-monitor]metric插件这里在/cell/register/middlewa原创 2020-06-02 11:36:45 · 1303 阅读 · 0 评论 -
(四)go-kit服务注册与发现
前言为什么需要服务注册与发现?在微服务架构下,原单体服务被拆分为多个服务独立部署,维护数量过多的服务地址,运维人员无法高效工作。所以,在微服务架构中引入了服务注册中心,用于接受和维护各个服务地址的地址信息。客户端或者网关可以通过注册中心查询目标服务地址,动态实现服务访问,并且在此基础上实现服务负载均衡。本文代码地址:gtihub地址1. 启动consul镜像本文基于consul进行服务注册,先基于docker启动一个consul,在docker目录下新建docker-compose-consul.原创 2020-06-02 11:10:47 · 799 阅读 · 0 评论 -
(三)go-kit服务接口限流
前言限流这层按说是应该在网关那做的,这里为了学习go kit暂时放在这里在middleware/rate.go使用gokit的endpointMiddleWare定义一个限流中间件,在main函数里面将要限流的接口用这个函数装饰一下,这个接口就能实现限流相关功能,本项目地址github地址1.限流原理常见的限流方法有令牌桶和漏桶令牌桶令牌桶算法的原理是系统会以一个恒定的速度往桶里放入令牌,而如果请求需要被处理,则需要先从桶里获取一个令牌,当桶里没有令牌可取时,则拒绝服务。漏桶漏桶算法思路很原创 2020-05-29 15:44:04 · 792 阅读 · 0 评论 -
(二)go-kit自定义error处理
前言本文介绍go-kit自定义error处理,本文地址github地址,这样做的目的是返回自定义的文本错误,将http状态码直接写进http status code里面,这有利于日志错误分类的收集和统计1.自定义一个解码函数MyErrorEncoder在util/myerror.go里面实现官方的error接口,便于实现我们自己定义的error方法,并且自定义一个解码函数MyErrorEncoderfunc MyErrorEncoder(_ context.Context, err error, w原创 2020-05-29 15:18:18 · 542 阅读 · 0 评论 -
(一)go-kit构建http服务
使用go-kit构建一个http服务1.创建servicegokit的设计理念,是将Service将作为核心业务逻辑实现部分。本文使用UserService实现IUserService接口获取用户姓名和更新用户姓名的服务,使用map模拟数据库存储更新数据2.创建endpoint使用endpoints.go创建请求、响应模型,即GetUserNameRequest,GetUserNameResponse…,gokit采用装饰着模式,把Service应该执行的逻辑封装到Endpoint方法中执行。原创 2020-05-29 14:59:17 · 1211 阅读 · 0 评论 -
(序)开箱go-ki从0开始搭建微服务
前言笔者目前从事go后端的微服务开发,用的是公司自研的框架,这个框架有好有坏,在业务的快速发展期让我们能迅速迭代业务,但是以成熟的微服务体系来看一些基础设施并不完善,而且我来的时候框架都做好了,主要是堆业务代码和性逻辑代码能优化。其实目前说起微服务,Java springcloud那套体系还是挺成熟的,而具体到go上面,对于我自己来说有点茫然,然后调研了几个go成熟的微服务框架,感觉从go kit这个微服务工具箱从0开始搭建自己的微服务会好些,使用go kit感觉会灵活些,扩展也比较方便,对于改造原有原创 2020-05-26 22:27:09 · 722 阅读 · 0 评论