Go语言项目(kingshard)性能优化实例剖析

kingshard性能优化网络篇 最近kingshard的功能开发节奏慢了许多。一方面是工作确实比较忙,另一方面是我觉得kingshard的功能已经比较完善了,下一步的开发重点应该是性能优化。毕竟作为一个MySQL proxy,如果转发SQL的性能很差,再多的功能都无济于事。所以这个周末一直宅在家里优化kingshard的转发性能。经过两天的探索发现,将kingshard的转发SQL性能提升了18%左右,在这个过程中学到了一下知识。借此机会分享一下,同时也是督促一下自己写博客的积极性。:) 1....阅读全文

2015年11月03日发布 flike
阅读:1714 评论:0

mixer: 一个用go实现的mysql proxy

介绍 mixer是一个用go实现的mysql proxy,支持基本的mysql代理功能。 mysql的中间件很多,对于市面上面现有的功能强大的proxy,我主要考察了如下几个: mysql-proxy,mysql官方的代理,使用起来并不友好,需要进行lua定制,而且本人对其稳定性和性能存疑。Cobar,阿里的东西,品质没的说,但对于我们项目,有点杀鸡用牛刀的感觉,另外我们都不会java。Atlas,360出品的基于mysql-proxy的增强版,几乎用c重写了核心框架,性能和稳定性都没话说。 当...阅读全文

2014-03-10 09:40 siddontang
阅读:3704 评论:0

golang中defer的使用规则

转自个人博客chinazt.cc 在golang当中,defer代码块会在函数调用链表中增加一个函数调用。这个函数调用不是普通的函数调用,而是会在函数正常返回,也就是return之后添加一个函数调用。因此,defer通常用来释放函数内部变量。 为了更好的学习defer的行为,我们首先来看下面一段代码: func CopyFile(dstName, srcName string) (written int64, err error) { src, err := os.Open(srcName) i...阅读全文

2017-06-30 15:24 vikings-blog
阅读:53211 评论:2

Golang 逐行读取大文件性能对比

前 言 BUFIO 是什么? BUFIO 是用来驱动 I/O 列内的专用时钟网络,这个专用的时钟网络独立于全局时钟资源,适合采集源同步数据。BUFIO 只能由位于同一时钟区域的 Clock-Capable I/O驱动。一个时钟区域有4个 BURIO,其中的2个可以驱动相邻区域的 I/O 时钟网络。BUFIO 不能驱动逻辑资源(CLB、BRAM等),因为 I/O 时钟网络只存在于 I/O 列中。 简单点就是: bufio 包实现了带缓存的 I/O 操作 它封装一个 io.Reader 或 io.W...阅读全文

阅读:7389 评论:4

Golang 中的微服务 - 第一部分

## 介绍 Golang 中的微服务系列总计十部分,预计每周更新。本系列的解决方案采用了 protobuf 和 gRPC 作为底层传输协议。为什么采用这两个技术呢?我花了相当长的时间,才想出并决定采用这个方案。这个方案对开发者来说,非常清晰而简明。我也很乐意把自己在搭建、测试和部署端到端的微服务过程中的心得,分享给想接触这块的朋友们。 在这个教程中,我们将先接触几个基础的概念和术语,然后开始搭建第一个简单的微服务模型。 本系列中,我们将会创建以下服务: - 委托 - 存...阅读全文

2017-12-26 22:20:00 polaris
阅读:28135 评论:15

记录从android开发转golang后台开发

自从golang问世之后 一直就对其非常感兴趣,也同时利用业余时间去学习相关知识。当初也是凭着兴趣爱好去学习这门新语言,也没想到现在有机会转做服务器golang开发。服务器开发相关知识犹如汪洋大海,学习起来真是非常辛苦,但自己还是下定决心去做了。怎么说呢,毕竟已经从事Android开发五年,觉得自己应该尝试去学习一下新的东西,挑战一下自己。尝试着站在服务器开发的角度上来看业务问题,这完全是另外一片视野空间。经常有同事问我,为什么选择golang 而不是选择Java等成熟的编程语言,其实这里是这么...阅读全文

2018.07.07 14:19 诸葛烤红薯
阅读:2885 评论:2

golang生成excel

excelclaim 包装了excelize简化表格的生成。 使用 生成交通补贴 sheet := excel.NewSheet(xlsx, "加班交通费", 7, 28) sheet.SetAllColsWidth(7, 14, 10, 11, 12, 8, 8) sheet.SetRowNum(6) excelStyle := excel.NewExcelStyle(11, 0, false); sheet.Apply(excelStyle); excelStyle2 := excel.Ne...阅读全文

阅读:6787 评论:2

零猫科技告诉你-Go语言可以干嘛?

Hi,大家好!我是GO首席软件工程师Rob Pike说:我之所以被开发,是因为过去10多年间软件开发的难度令人沮丧。你所不知的,GO Go语言是谷歌发布的第二款开源编程语言。专门针对多处理器系统应用程序的编程进行了优化,使用Go编译的程序可以媲美C或C++代码的速度,而且更加安全、支持并行进程。Go的目标是希望提升现有编程语言对程序库等依赖性(dependency)的管理,这些软件元素会被应用程序反复调用。由于存在并行编程模式,因此也被设计用来解决多处理器的任务。我是GO,我够红 目前,已经有很...阅读全文

阅读:39316 评论:3

用 gopher 的方式使用 panic

Go 运行时(即成功编译后,操作系统启动该该进程)发生的错误会以 panics 的形式反馈。*panic* 可以通过这两种形式触发 : 1.直接使用内置 *panic* 函数: ```go package main func main(){ panic("foo") } ``` ``` > go install github.com/mlowicki/lab && ./bin/lab panic: foo goroutine 1 [running...阅读全文

2018-12-01 12:00:26 yixiaoer
阅读:1429 评论:0

SRE: 性能分析: 一个 Go 编写的简单 HTTP Web 服务器的优化方法

​性能分析和调优是一种很强大的技术,用来验证是否满足客户关注的性能要求。性能分析常常被用来分析一个程序将大部分时间花在哪里了,并通过一个科学的方法来测试调优实践的效果。这个帖子使用一个 Go 语言编写的 HTTP 服务作为一个例子来定义一种性能分析和调优的普遍方法。go 特别适合性能分析和调优,因为它在它的标准库中提供了 [pprof](https://golang.org/pkg/runtime/pprof/) 剖析工具链。 ## 策略 我们先尝试建立一个简单的框架来构建对程序的分...阅读全文

2019-01-02 19:43:16 daliny
阅读:1645 评论:1

用 Golang 处理数据库迁移

最近在 `r/reddit` 中不断出现 ***我如何使用 Go 来完成数据库迁移?*** 对于我和大多数人这种从其他语言例如 PHP 或是 Ruby 转到 Go 的人来说,数据库迁移在这些语言上已经不是什么问题了。例如 Ruby 的 Rails 和 PHP 的 Laravel。但我如何在 Go 中复制这种功能呢?同时考虑到框架是 Go 中的反模式这一事实。 举个例子,在在 Rails 和 Laravel 中可以非常轻松的使用 `bin/rails db:migrate` 或者 `php ...阅读全文

2019-01-27 10:53:37 polaris
阅读:6974 评论:0

腾讯 Tars-Go 服务获取自定义模版(配置)值

Tars 模版是什么? 腾讯 Tars 框架中,有两种可以称之为 “配置” 的地方:其中一个是可以自定义的,在 Tars 管理页面中称为 “服务配置”。在这里,可以按照开发者喜欢的格式上传文件,并且支持配置的热更新。 而另一个地方,则是本文要讲的。这个在 Tars 中称为 “模版”。模版可以在 Tars 管理平台顶部的 “运维管理” 进去后,再进入 “模版管理” 可以看到。 查看下面那些已有的模版可以看到,一般而言,模版是用于对整个服务的参数进行配置,其配置项更加偏向运维,而不是偏业务。 Tar...阅读全文

阅读:1041 评论:0

推荐几个值得关注的爬虫库

爬虫速度太慢?在这里推荐几个值得关注的异步爬虫库,给你的爬虫提速。看看有没有你没听过的?类似 Requests 的库 为什么要推荐类似 Requests 的库呢?Requests 不够好吗? 虽然 Requests 对于新手很容易上手,但它是同步的、并不是异步设计的。在 HTTP 请求的时候是需要 IO 等待的。比如说,当你使用 Requests 库进行请求,网站进行返回的时候,这时 IO 就会阻塞,程序就需要等待网站的返回,这就让爬取速度变慢了。 那么异步的好处在哪呢?(侯爵老师兴奋的停不下来...阅读全文

2019.03.08 08:20 麻瓜编程
阅读:2927 评论:0