タグ

ブックマーク / deeeet.com (29)

  • Kubernetesがいかに自動化の考え方を変えたか? | SOTA

    先日Japan Container Days v18.12の基調講演で話をさせていただく機会があった.内容としてはMercari のMicroservices Platformの基盤として「なぜ」Kubernetesを選択したか?ついて現状や今後の展望を踏まえて紹介をした. Microservices Platform on Kubernetes at Mercari 「なぜ」の回答としては,CRDやAdmission webhookといった拡張機構を使うことで今後起こりうる様々なWorkloadに特化したPaaSや抽象化レイヤーを書いていけるExtensibilityの高さとそのBuilding BlockとしてのEcosystemの強さを挙げた. このトークのExtensibilityの文脈で話したくて時間がなかったのが「Kubernetesがいかに我々の自動化に対する考え方を変えたか

  • Golangのエラー処理とpkg/errors

    GoConでは毎回エラー処理について面白い知見が得られる.Go Conference 2014 autumn においては(実際のトークではないが)居酒屋にて@JxckさんがRob Pike氏から以下のようなテクニックを紹介してもらっていた. Errors are values - The Go Blog Golang Error Handling lesson by Rob Pike これはWrite(やRead)のエラー処理が複数続く場合にerrWriter を定義して複数のエラー処理を一箇所にまとめてコードをすっきりとさせるテクニックであった. そして今回の Go Conference 2016 spring のkeynoteにおいてもDave Cheney氏から(僕にとっては)新たなエラー処理テクニックが紹介された. Gocon Spring 2016 実際に使ってみて/コードを読ん

  • Kubernetes YAMLの壁

    Kubernetes に入門しようする人を躊躇させる原因のひとつは間違いなくYAMLによる設定ファイルだろう.Kubernetesにアプリケーションをデプロイするとき,例えそれがシンプルなサーバーアプリケーションであっても,多くのYAMLファイルを手で記述する必要がある.初心者を慄かせるその大量のYAMLはよくwall of YAMLYAMLの壁)などと揶揄される. 初心者でなくてもKubernetesYAMLは煩わしい.YAML自体は単なるKubernetes APIへのリクエストボディであり慣れてしまえば実はそんなに難しくない.しかし記述する内容のほとんどがBoilerplateであり何度も書いていると飽き飽きする(実際にはほとんどがコピペだが).あるアプリケーションの開発環境と番環境のYAMLファイルをいかに効率的に管理するかについて決定的な方法もない. そもそもKuberne

  • Kubernetes上でgRPCサービスを動かす

    Kubernetes上でgRPCサービスを動かすことが多くなってきている.が適切にロードバランスをする,リクエストを落とさずサービスをデプロイするためにいくつか注意することがあるので簡単にまとめておく. 以下の2つを意識する. Kubernetes ServiceはL4のLoad balancer(LB)であること gRPCはコネクションを使いまわすこと KubernetesのPodは死んだり作られたりを繰り返す.KubernetesのPodにはそれぞれ内部IPがアサインされるが,このIPはPodが新しく作成される度に変わる.IPが変わってもPodにアクセスするためにKubernetesではServiceをつくる.ServiceはPodを抽象化しVirtual IP(VIP)を提供する.VIPを使うことでPodのIPが変わってもPodにアクセスすることができる. VIPはNetwork i

  • コマンドラインツールを作るときに参考にしている資料 | SOTA

    コマンドラインツールについて語るときに僕の語ること - YAPC::Asia Tokyo 2014 コマンドラインツールが好きで昔からつくってきた. 今年のYAPCで,そのコマンドラインツールをつくるときにどういうことを意識して作っているのか?どのような流れで開発しているのか?といったことを語る機会をもらえた. 具体的な内容については,是非トークを聴きに来てもらうとして, スライドをつくるにあったって過去に読んだ資料や,よく参考にしている記事を集め直したので,その一部を参考資料としてまとめておく. UNIXという考え方 UNIXという考え方 Mike GancarzによるUNIXの思想や哲学をまとめた.古いが全然色あせてない. コマンドラインツールの作り方を書いたではないが,これらの思想の上で動くツールはこの思想に準拠して作られるべきだと思う.何度も読んで考え方を染み付かせた. 小さい

  • sync.ErrGroupで複数のgoroutineを制御する

    Golangの並行処理は強力である一方で同期処理を慎重に実装する必要がある.“Go 言語における並行処理の構築部材”にまとめられているようにGolangは様々な方法でそれを実装することができる.実現したいタスクに合わせてこれらを適切に選択する必要がある. この同期処理の機構として新たにgolang.org/x/sync/errgroupというパッケージが登場した.実際に自分のツールで使ってみて便利だったので簡単に紹介する. 使いどころ 時間のかかる1つのタスクを複数のサブタスクとして並行実行しそれらが全て終了するのを待ち合わせる処理(Latch)を書きたい場合にerrgroupは使える.その中でも「1つでもサブタスクでエラーが発生した場合に他のサブタスクを全てを終了しエラーを返したい」(複数のサブタスクが全て正常に終了して初めて1つの処理として完結する)場合が主な使いどころである. 実例

  • Go1.7のcontextパッケージ

    Go1.7ではgolang.org/x/net/contextがcontextパッケージとして標準パッケージに仲間入りする.そしていくつかの標準パッケージではcontextパッケージを使ったメソッド/関数も新たに登場する.contextパッケージは今後さらに重要な,Gopherは普通に扱うべき,パッケージになると考えられる.記事ではそもそもcontextパッケージとは何か?なぜ登場したのか?なぜ重要なのか?どのように使うべきか?についてまとめる. contextパッケージが初めて紹介されたのは2014年のThe Go Blogの記事 “Go Concurrency Patterns: Context”である.この記事ではなぜGoogleがcontextパッケージを開発したのか,どのように使うのか具体的な検索タスクを例に解説されている.まだ読んだことがない人はそちらを先に読むと良い. co

  • Writing An Interpreter In Goを読んだ

    Thorsten Ballによる“Writing An Interpreter In Go”を読んだ. 技術界隈のブログを見ているとたまにSteve Yeggeの「If you don’t know how compilers work, then you don’t know how computers work」という言葉に出会う.その度に学生のときにコンパイラの授業を受けなかったこと後悔し,社会人になって挑戦しようとして挫折したことを思い出して悲しい気持ちになる.@rui314さんのCコンパイラをスクラッチから開発してみたを読んではかっこいいなと思いつつ僕には無理だなあと心が折れていた. どの言語を書いていてもコンパイラ(もしくはInterpreter)は切っても離せないものであり内部の動きがどうなっているかを知っておきたいという欲求はプログラマーなら誰しもあると思う(少なくとも僕に

    razokulover
    razokulover 2017/05/21
    読んでみよ
  • 2016年振り返り

    最初に今年やったことなどをつらつらと書いてみる. 2月.Dave Cheneyが中心となりGo1.6のRelease Partyが世界各地で開催されることになった(Go 1.6 release party).東京でもやりたかったのでOrganizerとなりHatenaのオフィスを借りて開催した.8月のGo1.7のリリース時は特に世界規模でやる流れはなかったがフォーマットだけは借りて再びHatenaのオフィスで開催した.この時リリースの概要をまとめたスライドを作ったが@bradfitzがそれを改変して別のMeetupの発表資料に使ってくれた嬉しかった.2017年2月にリリース予定のGo1.8のリリース時は再び世界規模でやるかってのをDaveと話したのでぜひ参加してください. 5月.みんなのGo言語の執筆を主に行っていた.自分はコマンドラインツールに関する章を担当した.今まで発表やブログ記事の

  • GolangのGCを追う

    Go1.5とGo1.6でGoのGCのレイテンシが大きく改善された.この変更について「ちゃんと」理解するため,アルゴリズムレベルでGoのGCについて追ってみた. まずGoのGCの現状をパフォーマンス(レイテンシ)の観点からまとめる.次に具体的なアルゴリズムについて,そして最後に実際の現場でのチューニングはどうすれば良いのかについて解説する. GoのGCの今 最初にGoのGCの最近の流れ(2016年5月まで)をまとめる. Go1.4までは単純なStop The World(STW)GCが実装されていたがGo1.5からは新たなGCアルゴリズムが導入された.導入の際に設定された数値目標は大きなヒープサイズにおいてもレイテンシを10ms以下に抑えることであった.Go1.5で新たなアルゴリムが実装されGo1.6で最適化が行われた. 以下は公開されているベンチマーク.まずはGo1.5を見る. Gophe

  • Go言語でファジング

    この記事はGo Advent Calendar 2015の21日目の記事です. 今年もGoコミュニティーから多くのツールが登場した.その中でも異彩を放っていたのがGoogleのDynamic testing toolsチームの@dvyukov氏によるgo-fuzzである. go-fuzzはGo関数のファジングを行うツールである.このツールはとても強力で標準パッケージで100以上,golang.org/x/パッケージで40以上,その他を含めると300以上のバグを発見するという実績を残している(cf. Trophies). 記事ではこのgo-fuzzの紹介を行う. ファジングとは? Fuzz testing - Wikipedia, the free encyclopedia ソフトウェアの脆弱性検出におけるファジングの活用 「ファジング」とはソフトウェアのテスト手法である.テスト対象となる

    razokulover
    razokulover 2015/12/21
    よさそう
  • Go言語でLet's EncryptのACMEを理解する

    Let’s Encrypt TL;DR Let’s EncryptのベースのプロトコルであるACMEを理解する. まずACMEをベースとしたCAであるboulderをローカルで動かす.次にACMEのGo言語クライアントライブラリであるericchiang/letsencrypt(非公式)を使い実際にboulderと喋りながら証明書発行を行い,コードとともにACMEが具体的にどのようなものなのかを追う. はじめに 証明書というのは面倒なもの,少なくともカジュアルなものではない,というイメージが強い.それは有料であることや自動化しにくいなどといったことに起因している(と思う).そのようなイメージに反して近年登場する最新の技術/プロトコルはTLSを前提にしているものが少なくない(e.g., HTTP2). このような背景の中で登場したのがLet’s Encryptと呼ばれるCAである.Let’s

    razokulover
    razokulover 2015/12/08
    月刊deeeetきてたのか。見逃してた。
  • Go言語とHTTP2

    http2 in Go 1.6; dotGo 2015 - Google スライド 2015年の5月にRFCが出たばかりのHTTP2が2016年の2月にリリース予定のGo1.6で早くも利用可能になることになっている.HTTP2の勉強も兼ねてGo言語におけるHTTP2実装を追ってみる. 以下ではまず実際にHTTP2サーバを動かしChromeで接続してみる.次に現状コードがどのように管理されているかを追う.最後に実際にコードを動かしながらHTTP2の各種機能を追う.なお参照するコードはすべて以下のバージョンを利用している(まだWIPなのでコードなどは今後変わる可能性があるので注意). HTTP2とは? HTTP/2に関してはスライドやブログ記事,Podcastなど非常に豊富な情報がインターネット上に存在する.そもそもHTTP2とは何か?なぜ必要なのか?などを理解したい場合は参考に挙げた記事など

    razokulover
    razokulover 2015/11/19
    勉強になる
  • Go言語と暗号技術(AESからTLS)

    最近マスタリングTCP/IP SSL/TLS編や暗号技術入門を読んでいた.理解を深めるためにGo言語で標準のcryptoパッケージを触り/実装を読みながら読んだ. cryptoパッケージは他の標準パッケージと同様に素晴らしい.Go言語にはどのような暗号化手法が実装されているのか実例を含めてざっとまとめる.なお文に書ききれなかったものを含め全ての実装例はtcnksm/go-cryptoにある. 共通鍵暗号 まずは共通鍵暗号をみる.共通鍵暗号は暗号化と復号化に同じ鍵を用いる暗号化方式である.共通鍵暗号はブロック暗号とストリーム暗号の2種類に分けることができる.ブロック暗号は特定の長さ単位で暗号化を行う方式であり,ストリーム暗号はデータの流れを順次処理していく方式である. Go言語にはブロック暗号としてDES(Data Encryption Standard),DESを繰り返すtriple-D

  • プレゼンするときに考えていること

    僕はカンファレンスで喋るのが好きだ.好きだが決して得意ではない.むしろ喋るのは苦手なほうだと思う. 実際に自分でやるまではプレゼンは才能だと思っていた.大学の研究発表などで実際に自分でプレゼンをするようになり,大学の研究室で指導されまくった結果,プレゼンは技術だと認識した(もちろん才能もある).技術であるということは学ぶことができる.それに気づいてからはたくさんプレゼンに関するを読んだ.昔は発表前に必ず何か一冊プレゼンに関するを読みそれを積極的に取り入れるようにした. 得意でないなりに学んで,発表を繰り返した結果なんとなく毎回考えること/意識することが固まってきた.今後のために簡単にまとめておく. 聴衆は貴重な時間を割いて会場に来る オーガナイザーは貴重な時間を割いてカンファレンスを準備している 聴衆が誰かを妄想する 早めに準備する.早めに準備する.早めに準備する.早めに… Keyno

    razokulover
    razokulover 2015/09/25
    いい話だ。全然関係ないけど逆茂木型、茂木健一郎みたいなもじゃもじゃ髪じゃなくて直毛ストレートのサラサラヘアーのことだと思った。
  • Go言語のツールが最新バージョンであるかをユーザに伝えるためのgo-latestというパッケージをつくった

    Go言語のツールが最新バージョンであるかをユーザに伝えるためのgo-latestというパッケージをつくった tcnksm/go-latest Webアプリケーションとは異なり,コマンドラインツールやモバイルアプリはバージョンアップがユーザに委ねられる.そのため一度リリースしてしまうとバージョンアップをしてもらうのが難しくなる(バグを含めてしまった場合にロールバックもできない cf. “Mobile First Development at COOKPAD #deploygate”).とにかくしっかりテストをしてそもそもバクを含めないというのも大切だが,完璧なソフトウェアは存在しないので,アップデートは常に必要になる. モバイルアプリとは異なり,Go言語でツールを書いきバイナリとして配布した場合は,最新のバージョンがすでに存在していることをユーザに伝える仕組みはそもそもない.ので,最新のバー

  • Dockerの諸問題とRocket登場の経緯

    2014年の後半あたりからDockerDocker Inc.への批判を多く見かけるようになった(もちろんもともと懸念や嫌悪を表明するひとはいた).それを象徴する出来事としてCoreOSチームによる新しいコンテナのRuntimeであるRocketのリリースと,オープンなアプリケーションコンテナの仕様の策定を目指したApp Containerプロジェクトの開始があった. CoreOS is building a container runtime, Rocket 批判は,セキュリティであったり,ドキュメントされていない謎の仕様やバグだったり,コミュニティの運営だったり,と多方面にわたる.これらは具体的にどういうことなのか?なぜRocketが必要なのか?は具体的に整理されていないと思う.これらは,今後コンテナ技術を使っていく上で,オーケストレーションとかと同じくらい重要な部分だと思うので,ここ

  • CoreOSに入門した

    CoreOS is Linux for Massive Server Deployments · CoreOS CoreOS + Docker Meetup Tokyo #1に参加してCoreOSにめっちゃ感動したので,CoreOSに入門していろいろ触ってみた. まず,CoreOSの概要とそれを支える技術について説明する.次に実際にDigitalOcenan上にVagrantを使って実際にCoreOSクラスタを立てて,CoreOSで遊ぶ方法について書く. CoreOSとは何か CoreOSは,GoogleやFacebook,Twitterといった企業が実現している柔軟かつスケーラブル,耐障害性の高いインフラの構築を目的としたLinuxディストリビューションである.軽量かつ使い捨てを前提にしており,クラウドなアーキテクチャのベストプラクティスを取り入れている.CoreOSの特徴は大きく4つ挙

  • PaaSエンジニアになった

    今まではモバイルアプリ向けのAPIの開発に携わりつつ,CIやデプロイ自動化といったDeveloper Productivity的なことをメインとしていたが,PaaSチームにジョインした.後に自分がどういうことを考えて舵を取ったかを見返すために簡単に今思っていることを綴ってみる. PaaSという選択 “実践Heroku入門”の’はじめに’にしつこく書かれているようにPaaSの大きな目標は「アプリケーション開発者の効率を最大化」することにある.もともとDeveloper Productivity的なことが好きでいろいろやってきたが,その究極的な形がPaaSではないかと思う. PaaSといってもプライベートPaaSだが,素晴らしいアイディアがあり,それを簡単にリリースでき,かつスケールもできる,そういうプラットフォームを社内にもっているのは大きな強みになると思う.どうすれば開発者にとって使いやす

  • "Microservices"を読んだ

    James Lewis氏とMartin Fowler氏による“Microservices”を読んだ.以前ざっと目を通したが,最近よく耳にするようになったのでちゃんと読んだ.以下はそのメモ. 概要 “Microservices” とはソフトウェアシステムの開発スタイルである 近年このスタイルでの開発を見てきて良い結果が出ている 初出は2012年の3月の“Micro services - Java, the Unix Way” Microserviceは一連の小さなサービスで1つのアプリケーションを開発する手法 それぞれのサービスは自身のプロセスで動いており,軽量な機構(e.g., HTTP API)を通じて情報をやりとりする これらのサービスは独立して自動デプロイされる 一枚岩として構築されるMonolithicスタイルのアプリケーションと比較すると分かりやすい 一般的なエンタープライズのア