0%

在go服务器中,通常 每个传入的请求都会在自己的goroutine中进行处理. 请求处理程序通常会启动额外的goroutine来访问数据库 或者第三方服务.
处理请求的一组goroutine通常需要访问特定于请求的值: 例如userid, request_id, token,timeout…,当请求被取消或者超时时,所有处理该请求的goroutine都应该快速退出. 以便系统可以快速回收他们正在使用的任何资源.

context 是 go 1.14 引入 的一个概念. 用于解决上述问题.

阅读全文 »

什么是 API网关

API网关是一个服务器,是系统的唯一入口. 从面向对象设计的角度看,它与外观模式类似.

API网关封装了系统内部架构,为每个客户端提供一个定制的API.它可能还具有其它职责,如身份验证、监控、负载均衡、缓存、协议转换、限流熔断、静态响应处理.

API网关方式的核心要点是: 所有的客户端和消费端都通过统一的网关接入微服务,在网关层处理所有的非业务功能. 通常,网关也是提供REST/HTTP的访问API.

阅读全文 »

记录一些比较优秀的博客,值得学习. 😄

阅读全文 »

sync.Pool是sync包下的一个组件,可以作为临时取还对象的一个 池子.

作用: 对于很多需要重复分配、回收内存的地方,sync.Pool 是一个很好的选择.频繁地分配、回收内存会给 GC 带来一定的负担,严重的时候会引起 CPU 的毛刺,sync.Pool 可以将暂时不用的对象缓存起来m待下次需要的时候直接使用,不用再次经过内存分配,复用对象的内存,减轻 GC 的压力,提升系统的性能.

使用场景:

  1. 当多个 goroutine 都需要创建同⼀个对象的时候,如果 goroutine 数过多,导致对象的创建数⽬剧增,进⽽导致 GC 压⼒增大.形成”并发⼤-占⽤内存⼤-GC 缓慢-处理并发能⼒降低-并发更⼤”这样的恶性循环.
  2. 关键思想就是对象的复用,避免重复创建.销毁.
阅读全文 »

Clickhouse 是一个 用于联机分析(OLAP)的 列式存储数据库管理系统(DBMS).

阅读全文 »

参考 Gin 的实现

gin 在 internal/json包中实现了多个 json 包的序列化能力, 默认使用官方encoding/json包. 如何保证这些包不会冲突呢?

这里用到了 go build -tags 的能力.

阅读全文 »

分层架构是一种架构风格,本质是避免耦合,使边界清晰.
六边形架构 遵循了分层架构的所有约束与特性,其实使用 端口与适配器这个名字更加合适.因为六边形架构的 边数没有意义.

六边形架构能够充分地区分 领域模型与 输入输出设备之间的界限.

六边形架构

阅读全文 »