Levon's Blog

微信: L6241425

服务的优雅关闭(Graceful Shutdown)是指,当服务需要停止时,它不是被“一刀切”地瞬间杀死,而是会先完成当前正在处理的任务、释放占用的资源后,再自行有序地退出。

优雅重启(Graceceful Restart)本质上是“优雅关闭”后紧跟着一个“优雅启动”的过程,常用于服务更新或配置重载,目标是在整个过程中不中断或尽可能少地影响对外服务。

阅读全文 »

问题提问

先同问提问自己问题,去寻找答案。

  • 怎么找到自己的网关?

  • nslookup 在不同的场景为什么显示不一样?

  • telnet 命令的使用方法和作用,什么情况下都可以用吗,和 ping 的区别是什么?

阅读全文 »

在现代软件开发中,依赖注入(Dependency Injection,简称 DI)已经成为一种广泛采用的设计模式。具体的做法可以遵守一个重要的设计准则:所有依赖应该在组件初始化时传递给它,这就是依赖注入(Dependency injection)。

在众多工具中,Wire 以其简洁、强大和易用性脱颖而出,成为 Go 语言项目中的宠儿。

阅读全文 »

1. 服务网格

服务网格(Service Mesh)是一种将服务之间的通信从应用层解耦到基础设施层的技术。在服务网格中,通过代理服务之间的流量来实现基础设施层的抽象。

500
阅读全文 »

decimal 对于浮点数的计算提供了极大的便利性,让我们在使用浮点数进行大小计算的时候不用担心精度丢失的问题,decimal库能处理小数点后 2^31 位数字,对于绝大多数的项目精度要求是足够的,简而言之,decimal 可以解决我们绝大多数的浮点数精度计算场景。

由于golang中默认是没有decimal类型的,所以要解决上述的问题,需要使用第三方库包decimal。

github 地址:https://github.com/shopspring/decimal

阅读全文 »

1. gorm

1.1 初始化连接

1
2
3
4
5
6
dsn := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=utf8mb4&parseTime=True&loc=Local",  
c.Mysql.User, c.Mysql.Password, c.Mysql.Host, c.Mysql.Port, c.Mysql.Name)
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
if err != nil {
logx.Must(err)
}
阅读全文 »

1. 日志

1.1 日志级别

waring

没人看警告,也许将来会出问题,但这听起来像是别人的问题。

我们尽可能的消除警告级别,它要么是一条信息性消息,要么是一个错误。我们参考Go语言设计额哲学,所有警告都是错误,其他语言的warning都可以忽略,除非IDE或者在CICD流程中强制他们为eror,然后逼着程序员们尽可能去消除。

同样的,如果想要最终消除 warning可以记录为error,让代码作者重视起来。

阅读全文 »

1. 分布式缓存

1.1 中间件选型

  • Redis 和 Memcache 最大的区别其实是 redis 单线程(新版本双线程),memcache 多线程,所以 QPS 可能两者差异不大,但是吞吐会有很大的差别,比如大数据 value 返回的时候,redis qps 会抖动下降的的很厉害,因为单线程工作,其他查询进不来(新版本有不少的改善)。
  • 纯 kv 可以走 memcache,比如我们的关系链服务中用了 hashs 存储双向关系,但是我们也会使用 memcache 档一层来避免hgetall 导致的吞吐下降问题。 我们系统中多次使用 memcache + redis 双缓存设计。
阅读全文 »
0%