专栏名称: HULK一线技术杂谈
HULK是360的私有云平台,丰富的一线实战经验,为你带来最有料的技术分享
目录
相关文章推荐
医馆界  ·  纯中医治疗率达90%,从ICU回归中医经典, ... ·  5 小时前  
医馆界  ·  纯中医治疗率达90%,从ICU回归中医经典, ... ·  5 小时前  
美股投资网  ·  本周美股大事件合集 ·  昨天  
福建晋江市中医院  ·  健康养生 | ... ·  2 天前  
51好读  ›  专栏  ›  HULK一线技术杂谈

Go编程实践

HULK一线技术杂谈  · 公众号  ·  · 2018-11-14 18:00

正文

请到「今天看啥」查看全文



  • writer

对底层写操作的封装,写的对象可以是文件、队列、ES等,当前提供如下writer实现:


  1. FileWriter写文件

  2. FileWithSplitWriter写文件,可自动按照天、小时为单位分文件写入

  3. ConsoleWriter写终端

  4. buffer


对写操作加buffer提升写性能,实现时有如下要点:


  1. 实现为writer的装饰者

  2. 提供单独的goroutine做autoflush

  3. formater


formater是将要记录的log内容发往writer之前做一次格式化,例如添加统一的log日期、终端输出添加颜色等,当前有如下实现:


  1. simpleFormater在消息前面加上loglevel和时间

  2. webFormater在simpleFormater的基础上添加clientIp和logId

  3. consoleFormater为终端输出添加颜色

  4. logger


这个是程序中记录log要使用到的对象,当前提供了simpleLogger这个实现,是一种同步的方式(写操作阻塞程序执行)


  • async

将写入操作放到单独的goroutine中从而提升程序性能,实现要点如下:


  1. asyncLogger实现为对logger的装饰者

  2. 提供单独的goroutine做写操作


更详细的使用,可以参考:

https://www.jianshu.com/p/20d0f74c3c08


2

shardmap

项目地址:
https://github.com/goinbox/shardmap

go中的原生map在多个goroutine同时读写时是需要加锁的,为了提升性能,核心思想是减少锁粒度,shardmap就是这样开发的:

go1.8之后的官方包中提供了sync.Map用于解决map的并发读写问题,但我自己测试没有shardmap性能好,读者有兴趣可以自己试下。







请到「今天看啥」查看全文