熊喵君的博客

Thinking will not overcome fear but action will.

基于 Golang 实现的负载均衡网关:gobetween 分析(二)

Metrics 采集技巧

0x00 前言 本文分析下 gobetween 的 metrics 采集方式。 0x01 ReadWriteCount 采集 以 ReadWriteCount 采集为例,在 proxy.go 中,封装了类型 io.Copy方法,将入流量 readN、出流量 writeN 通过 channel 向上层发送(需要考虑下性能问题?) func Copy(to io.Writer, from...

Docker 日常实践汇总

工作中的经验总结

0x00 前言 本文介绍下日常工作的一些基础 Docker 使用 0x01 docker 镜像制作和镜像打包 问题 作为一个入门级用户,很有可能写出下面的 Dockerfile: From centos:7 LABEL maintainer="panda<ringbuffer@126.com>" ADD requirements.txt / ADD xxxx...

Kratos 源码分析:CGI 框架 BM (三)

分析 CGI 框架 blademaster:路由

0x00 前言 本篇文章看下 bm 框架的路由注册及搭配拦截器的路由调用的实现细节。先看下路由是如何注册的。 bm 框架的默认生成 模板: bm 默认创建的 Engine 对象及启动 initRouter 初始化路由的方法及路由(Group)的创建 bm 的 handler 方法 ping 和 howToStart 的定义( handler 方法默认传入 bm 的 Co...

gRPC 应用篇之客户端 Connection Pool

连接池的实现分析 && 是否需要 Tcp/gRPC 客户端连接池 ?&& 通用连接池的实现

0x00 连接池 之前分析过 go-redis 的连接池实现:Go-Redis 连接池(Pool)源码分析,在项目应用中,连接池的最大好处是减少 TCP 建立握手 / 挥手的时间,实现 TCP 连接复用,从而降低通信时延和提高性能。 通常一些高性能中间件都提供了内置的 TCP 连接池,如刚才说的 go-redis,go-sql-driver 等等,关于连接池,一个良好的设计是对用户屏...

基于 Golang 实现的延迟队列的设计与分析(一)

分析美图开源的延迟队列 lmstfy:架构与设计思路

0x00 前言 延迟队列(Delay Queue)任务相关的业务场景如下: 场景一: 在订单系统中,一个用户某个时刻下单之后通常有 30 分钟的时间进行支付,如果 30 分钟之内没有支付成功,那么这个订单需要关闭;此外在未过期之前的 N 分钟需要通知用户进行支付 场景二: 用户某个时刻通过手机远程遥控家里的智能设备,设置在指定的时间(后)进行工作。这时就可以将用户指令发送到延时队列...

基于 Golang 实现的延迟队列的设计与分析(二)

分析美图开源的延迟队列 lmstfy:数据结构与实现

0x00 前言 延迟队列(Delay Queue)任务相关的业务场景如下: 场景一: 在订单系统中,一个用户某个时刻下单之后通常有 30 分钟的时间进行支付,如果 30 分钟之内没有支付成功,那么这个订单需要关闭;此外在未过期之前的 N 分钟需要通知用户进行支付 场景二: 用户某个时刻通过手机远程遥控家里的智能设备,设置在指定的时间(后)进行工作。这时就可以将用户指令发送到延时队列...

Kratos 源码分析:CGI 框架 BM (二)

分析 blademaster 中的拦截器实现及设计

0x00 前言 熟悉 gRPC 的开发者对拦截器 interceptor(中间件)不会陌生,gin 框架也提供了这种能力,下面代码默认启用了 Logger() 和 Recovery() 两个中间件。 func main() { r := gin.Default() r.GET("/ping", func(c *gin.Context) { c.Stri...

Kratos 源码分析:CGI 框架 BM (一)

分析基于 gin 改造的框架 blademaster:基础

0x00 前言 blademaster 是 Kratos 提供的 HTTP 框架,参考 gin 实现,但剥离了 gin 中的若干代码。其官方介绍是:基于 gin 二次开发,具有快速、灵活的特点,可以方便的开发中间件处理通用或特殊逻辑,Bm 基础库默认实现了 Log/Tracing/Metrics/BBR-Limiter 等,此外还提供了带熔断器的 Client 实现,非常实用。 0x...

基于 Golang 实现的负载均衡网关:gobetween 分析(一)

分析一款 Golang 实现的四层代理 CLB:主要逻辑

0x00 前言 前面分析过一款简单的反向代理实现:一个 Http(s) 网关的实现分析,这篇文章分析一款商用的 LB 开源项目:gobetween。它是一款 Pure-Golang 实现的四层代理网关,文档在此,本文来探索下其实现及核心的源码分析。 For a long time all of us have been using “traditional” load bala...

Golang 标准库:net/http 分析(一)

net/http 客户端之 transport 分析

0x00 前言 net/http 实现了 HTTP 客户端和服务端,分别对应 http.RoundTripper 和 http.Handler 两个接口。 http.RoundTripper:用来表示执行 HTTP 请求的接口,调用方将请求作为参数可以获取请求对应的响应 http.Handler 主要用于 HTTP 服务器响应客户端的请求 http.RoundTrippe...