深度 | 从Go高性能日志库zap看如何实现高性能Go组件

深度 | 从Go高性能日志库zap看如何实现高性能Go组件 导语:zap是uber开源的Go高性能日志库。本文作者深入分析了zap的架构设计和具体实现,揭示了zap高效的原因。并且对如何构建高性能Go语言库给出自己的建议。 作者简介:李子昂,美图公司架构平台系统研发工程师,从事长连接服务和分布式存储组件的研发和支持。 摘要 日志在整个工程实践中的重要性不言而喻,在选择日志组件的时候也有多方面的考量。详细、正确和及时的反馈是必不可少的,但是整个性能表现是否也是必要考虑的点呢?美图技术团队在长期的实...阅读全文

2020-11-04 16:19:27 高可用架构
阅读:897 评论:0

灵魂一问:数据库连接池到底该怎么配?

来自公众号:新世界杂货铺好家伙,我直接好家伙!GitHub不愧是全球最大的同性交友网站,资源丰富且质量高!连接池的配置应该按照什么原则来?这个问题在笔者心中疑惑良久,直到在GitHub上发现了About Pool Sizing这篇文章。看完之后一扫笔者心中阴霾,神清气爽。妈妈再也不用担心我在项目中瞎配连接池啦!以下内容为笔者根据原文翻译总结所得。原文提到开发人员经常会将连接池配置错误,而要想正确配置连接池需要理解一些原则,即使这些原则可能违反人类直觉。1万并发用户访问假设你有一个需要每秒处理2万...阅读全文

2020-12-27 21:32:33 新世界杂货铺
阅读:1057 评论:0

Gopher China 2020 大会(附 PPT 传送门)

2020 传送门: https://github.com/gopherchin...历届:https://github.com/gopherchina/conferenceGopher China 大会官网:https://gopherchina.org/Gopher China 是中国最权威、最实力、最干货的 Go 大会,致力于为中国广大的 Gopher 提供最好的技术交 流大会。自2015年主办以来,连续 5 年都获得了非常好的口碑,每一年的大会从质到量都有一次新的突破。2020年第六届 G...阅读全文

2021-01-03 16:32:34 ftopia2020
阅读:6611 评论:0

缓存原理与微服务缓存自动管理

抛开业务谈技术都是在耍流氓。—— Kevin Wan为什么需要缓存?先从一个老生常谈的问题开始谈起:我们的程序是如何运行起来的?程序存储在 disk 中程序是运行在 RAM 之中,也就是我们所说的 main memory程序的计算逻辑在 CPU 中执行来看一个最简单的例子:a = a + 1load x: x0 = x0 + 1load x0 -> RAM上面提到了3种存储介质。我们都知道,三类的读写速度和成本成反比,所以我们在克服速度问题上需要引入一个 中间层。这个中间层,需要高速存取的速度,...阅读全文

2021-01-04 23:32:32 kevinwan
阅读:859 评论:1

基于redisgo的redis客户端的封装示例

redisgo包 redisgo是一款go语言的redis客户端库。 为了简化对redis的操作,可以使用redisgo对redis常用命令进行封装。 首先在Github上面创建一个仓库redisgoExample 然后git clone将项目克隆到本地,比如说我的阿里云CentOS8服务器下, git clone https://github.com/ccf19881030/redisgoExample.git 如下图所示: 克隆redisgoExample 当然运行go项目的前提是需要安装g...阅读全文

2020-12-31 02:32:40 雪域迷影
阅读:683 评论:0

【经验】相比RESTFUL API,我全面拥抱GraphQL的原因

背景 是什么让我放弃了restful api?了解清楚后我全面拥抱GraphQL REST作为一种现代网络应用非常流行的软件架构风格,自从Roy Fielding博士在2000年他的博士论文中提出来到现在已经有了20年的历史。它的简单易用性,可扩展性,伸缩性受到广大Web开发者的喜爱。 是什么让我放弃了restful api?了解清楚后我全面拥抱GraphQL REST 的 API 配合JSON格式的数据交换,使得前后端分离、数据交互变得非常容易,而且也已经成为了目前Web领域最受欢迎的软件架构...阅读全文

2021-01-20 19:33:27 笔名辉哥
阅读:550 评论:0

go那些事儿|defer必掌握知识

目录defer执行时机defer执行顺序defer与return谁先谁后函数包含多个Panic,defer中recover处理那个Panic函数返回值遇到deferdefer遇到Panicdefer遇到Panic,但是并不捕获异常的情况defer遇到Panic,并捕获异常练习:defer面试题闲聊欢迎加入我的公众号【迈莫coding】 一起pk大厂defer执行时机return 语句执行完之后,如果有 defer 语句,再执行 defer 语句发生 Panic ,也会触发 defer 执行def...阅读全文

2021-01-22 22:12:44 mb6008e9b926b5d
阅读:308 评论:0

go为什么这么快?(再探GMP模型)

进程、线程、协程 进程:进程是系统进行资源分配的基本单位,有独立的内存空间,单切换代价极高,进程间通信也比较麻烦 线程:线程是CPU调度和分派的基本单位,线程依附于进程,与其他线程共享进程的资源,仅有自己的(程序计数器,一组寄存器的值,和栈),线程切换代价小(但是线程之间的切换可能会设计用户态和内核态的切换),由于共享进程资源,所以线程之间通信比较方便。 协程:协程是一种用户态的轻量级线程,协程的调度完全由用户控制,协程切换只需要保存和恢复任务的上下文,没有内核的开销。协程间通信也比较简单(协程...阅读全文

2021-02-21 14:32:40 gurlan
阅读:991 评论:0

微服务框架相关技术整理

微服务整体框架 开发前后台分离:前台与后台之间,通过Restful风格接口通信(HTTP协议) 内部服务:Dubbo( RPC框架) 外部服务:SpringCloud Zuul(提供Restful API接口) 在这里插入图片描述 微服务应用开发 在这里插入图片描述 API Gateway API Gateway:网关,统一应用请求接口.API 网关在微服务们的最前端,让 API 网关变成由应用所发起的每个请求的入口,简化客户端实现和微服务应用程序间的沟通方式。 API Gateway两种方式:...阅读全文

2021-03-02 14:38:09 攻城狮Chova
阅读:618 评论:0