薄いブログ

技術の雑多なことを書く場所

2018-01-01から1年間の記事一覧

CIにおけるMulti-stage Buildsのcache

CIの時間を短くする活動を行っており, 特にその一部のアプリケーションコンテナの継続的 docker buildの改善について書きたいと思います. CIにおけるMulti-stage Builds Multi-stage Buildsについては以下の記事を参照すると良いと思います. docs.docker.com…

GoでASTと戯れる

GoでAST(Abstract Syntax Tree)を使ってソースコードを解析, 生成を行うに際してライブラリを作ったりしたので紹介したいと思います. AST Goは標準で go/ast でASTを扱うことができます. 便利なものもありますし詳しく記述されているのでgo/astのgodocを見る…

コンテナイメージを小さくするために

CIの時間を短くする活動を行っており, 特にその一部のアプリケーションコンテナビルドの改善について書きたいと思います. TL;DR コンテナイメージを小さくするのは pull / push のコストを減らすため ベースイメージを小さいものにする (ex. alpine linux, d…

ちゃんと理解するdocker build cache

CIの時間を短くする活動を行っており, 特にその一部のアプリケーションコンテナの継続的 docker buildの改善について書きたいと思います. TL;DR dockerd の内部でイメージの子についての情報を持っている イメージ自体は親の情報しか持ってない cache対象の…

monorepoのdocker buildにおけるdockerignore

表題の通りなのですが, monorepoにおけるdocker buildの話です. build contextの話 まずこの問題を認識する上で必要なのがbuild contextの理解です. docs.docker.com Best practiceでも触れられている通り, build contextの概念は非常に重要です. When you i…

orisano/targd の話

github.com 上のツールを作ったので紹介します. 背景 Docker buildを高速に, そして小さいイメージを作るためにMulti-stage buildsを日々活用しています. コンテナベースのCIを使っていたり, アプリケーションをコンテナ前提で作っているとCIでDocker build…

orisano/minid の話

github.com 上のツールを作ったので紹介の記事です. 背景 僕はアプリケーションエンジニアとしてDockerfileをそこそこ書くことがあるのですが, 巷にあふれるDockerfileがRUN一つにまとめられているのがずっと不思議に思っていました. 見栄えも悪いし, これっ…

kubeletの負荷が問題になった話 (google/cadvisor)

orisano.hatenablog.com の続編です. 上の記事では以下の図の左側について書きましたが今回は右側についてです. google/cadvisorの高速化 上の図は非常に見づらいですが, 右側にgoogle/cadvisorというのが見えると思います. github.com google/cadvisorとい…

kubeletの負荷が問題になった話 (prometheus/common)

ある日, 同僚からkubeletのCPU負荷が高くて困っていると相談されたときの話です. 実際に監視しているそのkubeletのCPU使用率は高いことを確認し, 問題が起きているインスタンスの調査をはじめました. kubernetes/server.go at master · kubernetes/kubernete…

Socket.IOとGoの話

speakerdeck.com goでsocket.ioのclientを実装した話です. 背景 socket.io を使ったアプリケーションに負荷試験をしたいというのがありました. go で書きたいという気持ちとよく考えたら socket.io のことあまり知らないなという気持ちから実装してみようと…

go-swaggerを速くした話

orisano.hatenablog.com orisano.hatenablog.com github.com go-swaggerのgenerate serverを速くした話をします. 上の2つの記事であげたPRでgo-swaggerのコード生成を速くしました. 上の2つの記事ではどこが遅いか明らかになった状態からのことを書きまし…

go-openapi/swagを速くした話

github.com GitHub - go-openapi/swag: goodie bag in use in the go-openapi projects を速くしたときの話をしたいと思います. go-openapi/swag はgo-openapi と go-swagger のヘルパー関数が入っているライブラリです. 調査の結果, regexp.MustCompileが重…

go-openapi/loadsを速くした話

github.com GitHub - go-openapi/loads: openapi specification object model の速度を改善したときの話をしたいと思います. go-openapi/loadsはgoでopenapiのschemaを読み込むためのライブラリです. 調査の結果json.Unmarshalが重く,このライブラリのAnalyz…

PythonでUnicodeDecodeError/UnicodeEncodeErrorが出たときの原因調査法

Python2を使っているマルチバイト圏の人間なら一度は遭遇したことがあるであろうUnicodeDecodeError. スタックトレースに出る情報は UnicodeDecodeError: 'ascii' codec can't decode byte 0xe3 in position 0: ordinal not in range(128) こういう出力で正…