使用 telepresence 在 k8s 环境中实现快速开发

随着容器化,微服务的概念逐渐成为主流,在日常的开发测试中,会遇到一些新的问题。例如如果服务跑在 istio 这样的 ServiceMesh 平台上,依赖于 k8s 的 sidecar 功能,在本地模拟这样的场景来调试和测试是比较复杂的。而 telepresence 帮助我们缓解了这样的问题。



烟然

通关仙剑四后的随笔,作于 2008 年。


记一次mesos集群停容器时间过长的问题排查

公司 mesos 集群某个 app 已经有数千的实例数,每次做滚动升级时,由于总资源不足,需要分批操作,每次起一批新版本实例,再停一批旧版本实例。目前停容器的策略是,先从服务发现中摘除需要停掉的节点,等待 60 秒后再停止容器,释放资源,但是实际上每次从发送停止容器的请求到容器资源被实际释放需要长达 6 分钟,导致滚动升级耗时过长。经过排查,最终确认问题出在我们使用 docker 的方式上,这里记录下分析和解决问题的过程。


为 mtcp 项目添加 udp 支持

mtcp 是一个用户态的 tcp 协议栈,结合 dpdk 可以实现高性能的收发包。mtcp 不支持 udp 协议,想要在 bind 里利用 mtcp 进行加速,需要改动源码以提供支持。


减小 golang 编译出程序的体积

Go 语言的优势是可以很方便地编译出跨平台的应用程序,而不需要为每一个平台做代码适配,也不像 JAVA 一样需要预先安装 JDK 环境。相应的问题就是 go 编译出的程序体积较大,和 c/c++ 不同,它将大多数依赖都以静态编译的方式编译进了程序中。


golang 交叉编译

golang 相比 c/c++ 的优势之一是更容易编写出跨平台的应用,而不需要为各个平台编写适配代码。和 JAVA 相比,对系统环境要求较低,不需要预先安装 JDK 等适配环境。


旅行、编程与写作

前段时间的精力主要放在了找工作上,压力也比较大,阅读和写博客的计划都有所耽误。后来难得利用换工作的间歇期去了云南的大理、丽江、香格里拉旅行,还看了《黑客与画家》这本书,对于工作、生活、理想的一些看法与感悟有了些许改变。


InfluxDB详解之TSM存储引擎解析(二)

上一篇文章主要介绍了 TSM 存储引擎一些相关的概念、组件以及数据存储的目录结构,文件组成结构等内容。这一篇将会尽量从 InfluxDB 源码的角度,深入讲解数据插入、查询、合并等操作的具体流程以及内部数据结构的设计。


go 程序中获取虚拟块设备的读写速度

最近在写程序时需要在 centos5 系统上获取 device mapper 中的虚拟块设备的读写信息。在这个过程中发现由于 go 跨平台的特性,有一些 api 是无法拿到特定平台上的一些特殊信息的,或者是需要一些小技巧来实现。


InfluxDB详解之TSM存储引擎解析(一)

InfluxDB 项目更新比较快,google 了一下网上的一些文档基本上都是简单介绍了一下,而且很多都已经过时了,比如其中使用的 TSM 存储引擎,甚至官方文档上的内容都不是最新的。在源码里的 README 中有最新的设计实现的一些概要说明。


golang 中使用 statik 将静态资源编译进二进制文件中

现在的很多程序都会提供一个 Dashboard 类似的页面用于查看程序状态并进行一些管理的功能,通常都不会很复杂,但是其中用到的图片和网页的一些静态资源,如果需要用户额外存放在一个目录,也不是很方便,如果能打包进程序发布的二进制文件中,用户下载以后可以直接使用,就方便很多。


使用gvm在不同go版本之间切换

Centos7上通过 yum 从 epel 仓库里直接安装的 go 版本还是 1.4.2,从源码编译安装最新的 go 版本比较麻烦,而且开发中有时需要调试在不同编译环境下可能存在的问题,不能忽略使用最新版本是存在某些 bug 的可能性。


linux下查看指定进程的所有连接信息

定位某个进程的网络故障时经常需要用到的一个功能就是查找所有连接的信息。通常查找某个端口的连接信息使用 ss 或者 netstat 可以轻松拿到,如果是主动与别的机器建立的连接信息则可以通过 lsof 命令来获得。


从0到1:遥远的理想国

已经记不清自己到底有多久没有认真读过一本非技术类的书籍了,大量的时间被花在职业相关的学习中,宅属性与日俱增。长此以往,渐渐发现个人的主观思想愈加匮乏,对事物的思考与理解能力逐渐下降,这真是一件令人细思极恐之事。