- 博客(33)
- 收藏
- 关注
翻译 Go避免使用大堆造成的高GC开销
原文链接:Avoiding high GC overhead with large heapsGo的Garbage Collector(GC)在分配的内存量相对较小时工作得非常好,但是如果堆较大,GC最终可能会占用大量的CPU,在极端情况下,它甚至可能无法跟上节奏。What‘s the problem?GC的工作就是确定哪些内存可以释放,它是通过扫描内存查找内存分配的指针来完成这个工作的。简...
2019-01-19 00:16:00
3395
翻译 [译] Go内存模型
The Go Memory ModelThe Go Memory ModelIntroductionGo的内存模型指定了一个数据共享、可见条件,这个条件保证在一个goroutine中写入一个数据,另外的goroutine对相同的数据读取时可见。Advice程序对多个goroutines同时访问的数据的修改,必须序列化对该数据的访问(包括读和写)。要对数据进行序列化访问,可以使用chann...
2018-11-05 00:03:23
627
翻译 [译]Go调度器
The Go SchedulerThe Go scheduler译者注:本文提到的P(processor)虽然数量上与CPU核数相等,但它并不完全等同于CPU的processor,严格意义上,它应该是一个包含CPU核信息以及一些其他信息,如goroutine runqueue信息等的数据结构或调度器。所以本文都使用上下文指代它(原文中为context)。介绍Go1.1提供的一个大功能之...
2018-11-03 23:30:12
333
翻译 [译]MongoDB数据建模介绍
翻出一篇很早以前翻译的文章。数据建模介绍(Data Modeling Introduction)官方文档:data models不像SQL数据库一样,MongoDB中的数据有着灵活的模式。MongDB collection中的数据不强制document的数据结构。这种灵活性有助于将document映射到实体或者对象。每个document可以匹配描绘实体的相应数据字段,即使数据可能会发生变化。...
2018-10-20 22:36:49
1535
翻译 [译]城里新来的孩子——Go的sync.Map
原文地址:The new kid in town — Go’s sync.Map对Go1.9中新加入的类型sync.Map的学习和探索性分析。Go1.9出来后,我就迫不及待的开始尝试接触sync包中新加入的sync.Map容器了。首先,为什么要将它加入到标准库中?它又应该在哪里使用?不幸的是,答案是:除非遇到后面两种情况你真的不需要使用它。a). 你已经在使用常规的类型安全的map的应用程...
2018-04-01 14:07:38
5382
1
原创 [原]可能被忽略的Golang细节——range
range关键字是Go语言中一个非常有用的迭代array,slice,map, string, channel中元素的内置关键字。range的使用range的使用非常简单,对于遍历array,*array,string它返回两个值分别是数据的索引和值,遍历map时返回的两个值分别是key和value,遍历channel时,则只有一个返回数据。各种类型的返回值参考下表: rang...
2018-04-01 14:03:07
9073
1
原创 goroutine退出方式的总结
goroutine的退出机制大家都知道goroutine是Go语言并发的利器,通过goroutine我们可以很容易的编写高并发的程序。但是goroutine设计的退出机制是由goroutine自己退出,不能在外部强制结束一个正在执行的goroutine(只有一种情况正在运行的goroutine会因为其他goroutine的结束被终止,就是main函数退出或程序停止执行)。关于goroutine
2018-01-07 23:26:25
19640
3
翻译 [译]defer, panic, recover
原文地址:Defer, Panic, and RecoverGo有普通的流程控制机制:if, for, switch, goto等。它还有Go特有的语句来在单独的goroutine中执行程序。在这里我想讨论一些不太常见的特性:defer, panic和recover。deferdefer语句将一个函数调用压入到一个列表中。列表中存储的函数调用,将在执行defer语句的外围函数返回后
2018-01-07 23:24:23
356
原创 [原]kubernetes1.1版本上遇到的坑
最近又开始倒腾kubernetes了,翻出了大概两年前kubernetes刚刚release 1.0时我们在1.0,1.1版本上踩过的坑的笔记。虽然现在都已经release 1.9.0了,当年踩过的坑,现在部署也都已经遇不到了,但是发现基础的东西还在,解决问题的方式还是需要考虑那些方方面面。所以在此把一些仍然可以在遇到问题时参考的在此分享出来,也算是对过去的付出有个交代。1. flannel网
2018-01-07 23:19:54
681
翻译 [译]Go并发模式:context
原文地址: Go Concurrency Patterns: ContextIntroduction在Go server中,新的请求通常都会起一个新的goroutine处理,这个goroutine又通常会起一些额外的goroutines来访问后端,例如database,RPC服务等。这一系列处理一个请求的goroutines通常需要访问请求相关的数据,例如最终用户的身份,Authorization
2018-01-02 23:21:21
1565
原创 Go 交叉编译
Go交叉编译Go在1.5版本中改进了对交叉编译的支持,包括统一了编译器、链接器等。使得跨平台交叉编译相当简单,一条命令即能轻松搞定。
2017-03-22 22:39:45
8103
1
原创 Go语言如何在不牺牲运行时性能的情况下提高表达性
今天看了一篇很有趣的博文,讲使用Go写代码时。对于更新数组,一个小小的改动却能大大提高代码的效率。而自己平时最经常使用的居然是效率最低的一种方式。不得不感慨Go虽然入门容易,但是像C一样也是博大精深,细节无处不在,平时需要注意的地方,需要深挖的地方太多太多。这里把文章翻译撸一下给大家分享下,文章很短,可能只需要你马桶上5分钟的时间,你就将Get一个很牛逼的技能。
2017-02-02 23:24:57
471
原创 Go sqlx包 + postges pq包实现postgres的批量插入、更新
当有大量数据需要插入时,批量操作省去了大量建立、关闭连接的操作,将多次数据库写IO操作合并成一次操作,省去了很多不必要的时间消耗,将显著提高写效率。
2017-01-26 11:59:43
9470
2
翻译 工程师都不应该写ETL:构建高级数据科学部门指南
本文详细分析了传统数据科学部门存在的一些问题。传统的数据科学部门中,数据工程师承担了过多业务相关的繁杂琐事,工程师对一些具体业务、需求的不甚了解造成了工程师实际并不太适合做这些事情,这严重拖累了工程师,限制了工程的天赋。本文提出了一种全栈式模式的方式,重新定义了数据科学部门中数据科学家和数据工程师的职责。
2016-12-17 22:20:22
1626
原创 Mac上使用Sphinx + latex输出中文PDF
由于Sphinx对中文支持不是很友好,当需要将中文rst文档转换成PDF时,需要一些额外的配置。Latex有跟多的格式支持,所以本文选择首先将rst编译成latex格式文档,再通过latex的工具输出PDF。Mac上的Latex叫MacTex,如果不是安装完整的包,实际使用中也会有一些坑。本文介绍了如何通过在Mac上安装basic-latex,将Sphinx编写的中文rst文档转换成PDF。
2016-10-13 23:07:54
4449
翻译 更多Go Interface细节
前面一篇主要介绍了Go interface的一些基础知识。本文着重介绍了如何判断一个interface中存储的数据的原始类型,并将interface中数据转换到对应数据类型的变量中。另外,如struct的匿名域一样,interface也支持在interface中嵌套interface来继承方法,增加interface的灵活性。Go的语法逻辑是如此之美!
2016-09-16 21:40:35
760
翻译 棒棒哒的Go Interface
Golang中的Interface是一件相当精妙的设计,编程时灵活的使用Interface是一种相当美妙的体验。能够让你的代码变得更加灵活,完美...
2016-09-16 01:01:00
1127
原创 黑科技——通过docker+xware在群辉DSM 6.0系统实现迅雷远程下载
迅雷跟群辉的合作关系终止,所以DSM5.4开始即不在支持迅雷远程下载,相应软件也遭下架。网上有不少如果从终端切换到Linux root权限下修改相应配置文件,安装软件,最终实现支持迅雷远程下载的教程。但是这些步骤相当繁琐,对Linux没有一定了解的用户可能即使面对一篇有详细截图的教程也不知道在干嘛。就算是Linux老司机看了也觉得有点烦琐。但是这些都不要紧,现在这里有一个更简单的方式,谁叫咱们是玩儿docker的呢。
2016-09-10 00:49:38
28369
翻译 Go语言中异步拆分io.Reader
在Go语言中处理任何stream数据时,我已经深陷io.Reader和io.Writer的灵活性中不能自拔。同时我在有一点上又或多或少的受了些折磨,挑战我的reader interface在你看来可能会觉得很简单:那就是怎么样拆分读操作。我甚至不知道使用“拆分(split)”这个词是否正确,我就是想通过io.Reader多次读取接收到的东西,有时候可能还需要并行操作。
2016-08-26 00:26:10
7760
原创 Golang访问SQL Like数据库(三)——sql package + Postgres driver源码走读
Golang官方没有提供数据库驱动,只是为开发数据库驱动定义了一些标准接口,开发者可以根据官方定义的标准接口来开发相应的数据库驱动。这样做的好处是:只要是按照标准接口开发的代码,需要迁移数据库时不需要任何的修改。
2016-08-08 02:50:35
1840
6
原创 Golang访问SQL like数据库(二)——sql package主要数据结构及方法
接上一篇,sql package的主要实现是database/sql, sql 中比较重要的数据结构是:type DBtype Rowtype Rowstype StmtType Txsql.Registersql.Register接口用于注册数据库驱动。第三方开发的数据库,需要在init中调用这个接口来完成本驱动的注册。接口声明为:func Register(name string,
2016-08-08 02:46:28
4732
9
原创 Golang访问SQL like数据库(一)——思想、driver需实现接口
Golang官方没有提供数据库驱动,只是为开发数据库驱动定义了一些标准接口,开发者可以根据官方定义的标准接口来开发相应的数据库驱动。这样做的好处是:只要是按照标准接口开发的代码,需要迁移数据库时不需要任何的修改。
2016-08-08 02:39:22
2209
翻译 使用Go构建RESTful的JSON API
这篇文章不仅仅讨论如何使用Go构建RESTful的JSON API,同时也会讨论如何设计好的RESTful API。如果你曾经遭遇了未遵循良好设计的API,那么你最终将写烂代码来使用这些垃圾API。希望阅读这篇文章后,你能够对好的API应该是怎样的有更多的认识。JSON API是啥?在JSO
2016-06-09 23:18:30
35318
4
原创 K8S实战——SIG PIPE问题造成kubernetes集群工作不正常的分析
本文简单介绍在实际使用K8S集群的过程中,因为Go的SIG PIPE bug造成较老版本的Docker,flannel,kubernetes相关进程运行一段时间后就退出造成集群工作不稳定的问题的发现、分析过程,最后针对解决问题部分为后续的集群监控、报警埋了一个伏笔。
2016-06-05 22:30:42
6565
原创 kubernetes理论之kubernetes组成
本文结合kubernetes架构图,简要的的介绍了kubernetes的组件,以及各个组件之间的关系。
2016-04-26 23:02:08
2868
原创 Kubernetes之kubectl常用命令
kubernetes是Google开源的一个容器管理、调度的paas平台,在日常基于kubernetes的容器集群管理中,熟练使用kubectl工具进行容器的创建,删除、扩容、缩容以及状态查询对于集群管理相当重要。本文简单的介绍了一些kubernetes集群日常管理中常用的命令的使用方式。
2016-04-25 22:09:48
162945
10
原创 通过systemd配置Docker
Docker1.9.1安装后默认没有/etc/sysconfig/docker文件,造成习惯使用老版本的用户不知道在什么地方配置一些Daemon默认启动项。本文以配置--insecure-registry为例介绍了如何通过systemd配置Docker。
2016-01-13 23:10:39
8172
原创 CentOS7 上部署Elasticsearch,Fluentd and Kibana
Elasticsearch,Fluentd和Kibana(EFK)组合允许收集,索引,搜索和可视化日志数据(visualize log data)。是目前比较主流的日志中心化,可视化并提供索引,搜索,分析的开软软件组合。本文介绍了如何搭建一个简单EFK环境,供学习,开发使用。
2016-01-06 21:38:04
5922
1
原创 在CentOS7上搭建私有的Docker Registry
Registry是一个无状态的,高可扩展的服务器端应用程序,用于存储和分发Docker Image。使用Registry可以严格控制image的存储位置;控制image的分发路径以及在内部开发流程中更紧密的集成image的存储和分发。本文详细的介绍了如果在Centos7上安装一个私有的Docker Registry。
2016-01-02 23:25:57
4090
原创 吐槽Scrum,说说Agile
Agile号称可以用一半的时间完成非敏捷模式两倍的工作。但是实际工作过程中,我们会发现,我们实施了Scrum,却没有得到敏捷,甚至越走越慢。本篇在吐槽我所经历过的Scrum的基础上,讨论了一下我所觉得的一些不正确的Scrum方式可能导致Agile不能真正得到实施。希望能抛砖引玉,集思广义,收集更多的不正确方式,以及正确的方式。
2015-12-03 07:55:33
4725
原创 用sphinx写文档
Sphinx是一个开源的文档工具。最开始被设计用于创建新的Python文档,后来被广泛应用与Python项目。Sphinx使用reStructuredText做为文档标记语言。很多开源项目都使用Sphinx写官方文档,在日常的工作,学习、生活中,我们不仅可以用Sphinx写项目文档,还可以利用reStructuredText所见及所得特性,以及Sphinx其他方便的功能写博客,记笔记等。
2015-10-08 23:43:20
1751
原创 SSH隧道
在日常使用环境中,我们常常由于网络拓扑结果,或者其他一些原因的限制,造成访问特定主机比较困难。通过SSH端口转发,我们可以轻松的突破一些网络限制,访问目标主机,给日常工作,学习带来相当大的便利。
2015-10-07 21:37:59
884
原创 Puppet概述
最近开发一个基于Vmware ESXi大规模部署虚拟Rack的工具,为了保证更好的扩展型,健壮性,以及提供更好的用户交互方式和接口。研究学习了目前比较主流的大规模配置、管理工具的设计思想。希望能参考借鉴先进的设计方式,举一反三,不断进步。这篇文章简要的总结了Puppet的组成,以及数据交互方式。
2015-09-06 21:17:32
775
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人