高广鹏 发布于 08月14, 2017

Golang 包依赖管理

Problem

Go 程序通常由很多来源不同的包构成,每个包都从GOPATH或标准库中导入。为了项目可以正常使用这些包,我们可能需要这么做:

  • 将依赖的包copy到项目源码路径下,重写代码中report的包名。
  • 将依赖的包copy到项目源码路径下,将项目路径加入到GOPATH。
  • 在文件中写入存储库版本,然后将现有GOPATH的包更新为该版本。

虽然项目间会有略微不同,但大方向上是这样的。

这里最大的问题是每个项目依赖的包都不同,还有些其他问题,例如:

  • 大多数人都不喜欢修改report路径或将依赖包放到他们的仓库中
  • 需要每个项目有不同的GOPATH

阅读全文 »

王浩宇 发布于 08月08, 2017

Hulk容器服务的镜像CI解决方案

前言

巧妇难为无米之炊,玩容器,“镜像”就是下锅的米,我们私有云Hulk平台的容器服务,向用户提供UI页面化的一整套的镜像定制、制作、管理、私有镜像仓库的服务,这套服务的背后技术实现,Jenkins算是“引擎”,本文简要介绍这其中的技术方案;

阅读全文 »

许四两 发布于 07月03, 2017

读SRE Google运维解密有感(四)-聊聊问题排查

前言

这是读“SRE Google运维解密”有感第四篇,之前的文章可访问www.addops.cn来查看。
今天我们来聊聊“问题排查”这个话题,本人到目前为止还在参与一线运维的工作,遇到过很多“稀奇古怪”的线上故障和问题,结合SRE中给出的一些方法,来说说“问题排查”那点事。

阅读全文 »

许四两 发布于 07月02, 2017

读SRE Google运维解密有感(三)-聊聊值班

前言

这是读“SRE Google运维解密”有感第三篇,之前的文章可访问www.addops.cn来查看。
我们今天来聊聊“on call”也就是运维值班制度, 本人到目前为止也还在参与一线运维的值班,对运维值班体系也有一些感悟和心得,再参考SRE的“on call”中的方法来说说这个让运维同学“又爱又恨”的值班。

阅读全文 »

籍鑫璞 发布于 06月29, 2017

异常检测机制

前言

传统的异常检测系统通过设置一个固定的阈值来保证监控项处于正常水平,一旦超过设定的阈值,就会触发报警来提醒人们的注意。

静态阈值法适用于在一定范围内波动的监控项,比如磁盘使用率,CPU使用率等,但是如果遇到网络流量这种不具有明显上限,波动比较剧烈的情况,单纯利用静态阈值法如果设置的阈值比较小,会出现很多误报的情况,增加人工成本;而如果将阈值设置的比较大,又会出现漏报的情况。

所以我们提出了一个应对复杂场景的异常检测算法,它不仅考虑同期数据的情况,也会将周期性纳入考虑范围,通过设置动态阈值的方法来对异常数据进行检测。

阅读全文 »

籍鑫璞 发布于 06月20, 2017

从手写数字识别的模型入手tensorflow

通过上一篇《一篇文章,带你了解tensorflow的奥秘》,相信你对tensorflow的核心概念以及编程模式有了有了一定的了解,今天我们将结合一个手写数字识别(MNIST)模型来进一步了解tensorflow的使用。

阅读全文 »

籍鑫璞 发布于 05月27, 2017

一篇文章,带你了解tensorflow的奥秘

最近在乌镇举办的人工智能峰会上,AlphaGo 2.0作为1.0的升级版,和现世界排名第一的柯洁进行了三局厮杀,且不说结果如何,人工智能,尤其是深度学习领域已经在悄然间走进了我们的视野之中。AlphaGo一路连克世界冠军井山裕太、朴廷桓、李世石以及柯洁等众多高手,一时间成为大家茶余饭后的话题。作为支撑AlphaGo复杂训练任务的深度学习框架tensorflow,和其他深度学习框架如caffe、CNTK等相比有什么优势?怎么样才能对它有大体的认识和了解呢?希望通过这篇文章,能够让你对上面的问题有了比较全面的了解。

阅读全文 »

霍明明 发布于 03月18, 2017

Jenkins 与 Docker 的持续集成实践一

持续集成(CI/CD)是一种软件开发实践。用于帮助团队成员频繁、快速的集成,测试他们的工作成果,以尽快发现集成错误。 更频繁、更早的集成意味着更早的发现问题。通过持续集成,及时发现和解决代码故障,提高代码质量,减少故障处理成本等等。

阅读全文 »

高广鹏 发布于 03月17, 2017

Golang 实现tar.gz打包

可以解决常见的”archive/tar: write too long"问题。

官方对tar包func FileInfoHeader的描述是这样的

FileInfoHeader creates a partially-populated Header from fi. If fi describes a symlink, FileInfoHeader records link as the link target. If fi describes a directory, a slash is appended to the name. Because os.FileInfo's Name method returns only the base name of the file it describes, it may be necessary to modify the Name field of the returned header to provide the full path name of the file.

事实上FileInfoHeader无法保证Header字段在写入WriteHeader前是完整的,通常Size字段只设置在常规文件中。当在遇到非常规文件时,虽然Hearder中的Size为0,却会尝试将一个Size非零的文件加入tar包。此时Go就会返回ErrWriteTooLong来阻止创建一个损坏的tar包.

阅读全文 »