タグ

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

  • 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

  • Go言語と暗号技術(AESからTLS)

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

  • Service meshとは何か

    Microservicesの世界においてService meshは大きなキーワードになった.KubeCon 2017やKubeCon 2018 EUにおいても多くのセッションをService mesh(もしくはその代表格であるIstio)が占めており注目の高さも伺える.もちろんMicroservicesを進めるMercariにおいても導入を検討しており今後重要なコンポーネントの1つになると考えている.記事ではそもそもなぜService meshという考え方が登場したのか,なぜ重要なのか? その実装としてのIstioとは何で何ができるのか? について簡単にまとめてみる. 参考文献 Service meshを一番理想的な形でサービスに使い始めその考え方を広めたのはLyftだ(と思う).LyftはIstioのコアのコンポーネントであるEnvoyを開発しそれを用いてService meshを構築

  • 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

  • SREとしてMercariに入社した | SOTA

    1月16日よりMercariにてSRE/BSE(Backend System Engineer)として働いてる. これまではとある会社で社内向けのPaaSエンジニアとして働いてきた(ref. PaaSエンジニアになった).PaaSの目標である「アプリケーション開発者の効率を最大化」を突き詰めながら少人数のチームでいかにScalableなプラットフォームを構築するかに注力してきた.Cloud FoundryやDockerといったインフラの最前線とも言える技術やアーキテクチャに触れ,かつその中で自分の技術的な柱である自動化に取り組むことができたのは非常に刺激的で自分に大きなプラスになった. その一方でPaaSというプラットフォームはその性質上サービスそのものからは中立的になることが避けられない(だからこそScalabilityを実現できるのだが).よりサービスに近い部分,サービスの成長に直結す

  • GolangでAPI Clientを実装する

    特定のAPIを利用するコマンドラインツールやサービスを書く場合はClientパッケージ(SDKと呼ばれることも多いが記事ではClientと呼ぶ)を使うことが多いと思う.広く使われているサービスのAPIであれば大抵はオフィシャルにClientパッケージが提供されている.例えば以下のようなものが挙げられる. https://github.com/aws/aws-sdk-go https://github.com/Azure/azure-sdk-for-go https://github.com/PagerDuty/go-pagerduty https://github.com/hashicorp/atlas-go 特別使いにくい場合を除けば再実装は避けオフィシャルに提供されているものを使ってしまえばよいと思う(まともなものなら互換性などをちゃんと考慮してくれるはずなので).一方で小さなサービ

    bojovs
    bojovs 2016/11/01
  • Apache Kafkaに入門した

    Apache kafka 最近仕事でApache Kafkaの導入を進めている.Kafkaとは何か? どこで使われているのか? どのような理由で作られたのか? どのように動作するのか(特にメッセージの読み出しについて)? を簡単にまとめておく(メッセージングはまだまだ勉強中なのでおかしなところがあればツッコミをいただければ幸いです). バージョンは 0.8.2 を対象に書いている. Apache Kafkaとは? 2011年にLinkedInから公開されたオープンソースの分散メッセージングシステムである.Kafkaはウェブサービスなどから発せられる大容量のデータ(e.g., ログやイベント)を高スループット/低レイテンシに収集/配信することを目的に開発されている.公式のトップページに掲載されているセールスポイントは以下の4つ. Fast とにかく大量のメッセージを扱うことができる Scal

  • Docker社を訪問した

    Google I/O 2015のためにサンフランシスコを訪れたついでにDocker社に遊びに行った.Docker社はサンフランシスコのダウンタウンを南に下った475 Brannan St.にある(ちなみに275にはGitHub社がある). 迎えてくれたのはNathan.Nathanとは昨年東京で開催されたCommunities meetup Chef, Docker, Openstack, Puppetで出会った.その後もtwitterで絡んでおり今回訪問させてもらうことになった. まず,近くにカフェ(Blue Bottleで焙煎された豆を使っていた)がありコーヒーを片手に近況などをゆっくり話した.NathanはDocker Machineをメインに担当していて,最近追加した機能や今後の予定などについて語ってくれた.今はv0.3.0に向けてRCを出して絶賛テスト中とのこと.Docker M

  • Herokuの'docker:release'の動き

    Herokuの'docker:release'の動き Introducing ‘heroku docker:release’: Build & Deploy Heroku Apps with Docker HerokuDockerを使ったツールを提供し始めた.一通り触ってコードもちょっと読んでみたので現時点でできること,内部の動きについてまとめる. TL;DR Herokuのデプロイ環境とおなじものをDockerでつくれる Buildpackを使わないでDockerfileからSlugを作れる 自分の好きなDockerイメージをHeroku上で動かせるようになるわけではない. 何ができるのか まず何ができるようになったのかについて簡単に書く.プラグインをインストールするとDockerコマンドが使えるようになる. $ heroku plugins:install heroku-docker

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

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

  • わかりやすいREADME.mdを書く

    GitHubなどに自分のツールやライブラリを公開するとき,README.mdは重要な役割を担っている.レポジトリを訪れたユーザが自分のツールを使ってくれるか否かの第一歩はREADME.mdにかかっている,と言っても過言ではない.実際自分が使う側になったときも,まずREADME.mdを読んで判断していると思う. 成功しているプロジェクトを参考にしつつ,自分が実践していることをまとめておく.ここに書いていることはあくまで(自分の中で)最低限的なものである.プロジェクトが成長していくにつれてREADMEはあるべき姿に成長していくべきだと思う. READMEの役割 README.mdには大きく2つの役割がある. プロジェクト,ツールの使い方,インストール方法 プロジェクト,ツールの宣伝 元々READMEは前者の役割しかなかったが,GitHubの仕組み上,後者の役割も徐々に重要になっている. さらに

  • libswarmの現状と将来 | SOTA

    libswarmの現状と将来 DockerCon14で新たに発表されたDockerによる新しいOSSであるlibswarmをざっと触ってみたので,現状何ができて,将来的にどういったことができそうになるかを簡単にまとめておく. TL;DR libswarmを使うと複数ホストやサービス(自社サーバー,DigitalOcean,Amazon EC2,Orchardなど)に存在するDockerコンテナを,1つのホストに存在しているかのように扱うことができるようになる.Dockerホストを抽象化したのに対して,libswarmは複数ホストを抽象化する. libswarmを使ったswarmdコマンドを使って,UNIXのパイプのように複数ホストやサービスを連鎖的につなげる. デモ libswarmで何ができるのかは,DockerCon14でのデモ動画“Orchard + libswarm demo f

  • SerfでHAProxyの更新 on Vagrant

    SerfでHAProxyの更新 on Vagrant Serfの典型的な使い方として紹介されることの多い,HAProxyの登録/更新をやってみた.これは既に何人かの方が試みているし,SerfのGithubのdemoページでも紹介されている. hashicorp/serf/demo/web-load-balancer “Serf+HAProxyで作るAutomatic Load Balancer” “Synapse と Serf でサービスディスカバリ” これらが何をやっているかを簡単に書くと,1つのProxyサーバ(ロードバランサ)と複数のWebサーバという構成において,Webサーバの増減に応じてロードバランサの設定を自動で書き換えるというもの. これをVagrantで複数サーバを立ち上げて,自分で手を動しつつ触ってみた. tcnksm/sample-serf-haproxy Vagran

  • HerokuのAPIデザイン

    Herokuが自ら実践しているAPIデザインガイドをGithubに公開した. “HTTP API Design Guide” このガイドは些細なデザイン上の議論を避けて,ビジネスロジックに集中すること目的としている.Heroku特有なものではなく,一般にも十分適用できる知見となっている. 最近は,モバイル向けにAPIをつくることも多いため,勉強もかねて抄訳した.なお内容は,HTTP+JSONのAPIについて基的な知識があることが前提となっている. 適切なステータスコードを返す それぞれのレスポンスは適切なHTTPステータスコード返すこと.例えば,“成功"を示すステータスコードは以下に従う. 200: GETやDELETE,PATCHリクエストが成功し,同時に処理が完了した場合 201: POSTリクエストが成功し,同時に処理が完了した場合 202: POSTやDELETE,PATCHリク

  • Go言語のコードレビュー

    SoundCloudが2年半ほどGo言語を利用したプロダクトを番で運用した知見をGopherConで発表していた(“Go: Best Practices for Production Environments”).その中で“CodeReviewCommentsというGoogleでのGo言語のコードレビューにおいてよくあるコメントをまとめたサイトが紹介されていた. 最近Go言語を書くようになり,使えそうなのでざっと抄訳してみた.“リーダブルコード”的な視点も含まれており,Go以外の言語でも使えそう. gofmtでコードの整形をすること コメントは文章で書くこと.godocがいい感じに抜き出してくれる.対象となる関数(変数)名で初めて,ピリオドで終わること // A Request represents a request to run a command. type Request str

  • logspoutでDockerコンテナのログの集約・ルーティング

    logspoutでDockerコンテナのログの集約・ルーティング progrium/logspout logspoutは,ホスト内で動かした全てのDockerコンテナの出力を集約して,好きなところに飛ばす(ルーティングする)ためのツール.開発者はDokkのJeff Lindsay. 以下の2つの特徴がある コンテナとして起動(ステートレス) HTTP APIによるルーティングの設定 ログを貯めて管理したり,検索するといったことはできない.コンテナのログをリアルタイムで好きなところに飛ばすだけ. これだけだが,Dockerのログの問題をいい感じに解決してくれそう. Dockerのログのしくみ まず,簡単にDockerのログのしくみを説明する. 現時点(2014年5月)でDockerはコンテナ内で吐き出されたstdout/stderrを取得することができる.コンテナのプロセスがstdoutとs

  • 公式のDocker client for OSXがリリース

    公式のDocker client for OSXがリリース 2014.01.02にOSXdocker clientがリリースされた.DockerGoで書かれているので,OSX上で自分でビルドして使ってる人もいたが,今回は公式のバイナリリリース.さらに,Homebrewのhomebrew-binaryレポジトリにFormulaも追加され,すぐに使えるようになった. clientなので,VMもしくはリモートに立てたDocker deamonに対してローカルからコマンドが叩けるようになったということ.とりあえず,ローカルにVM立てて触ってみた. tcnksm/docker-osx まず,dokcer clientのインストール. $ brew update $ brew tap homebrew/binary $ brew install docker Vagrantfileは以下のようにす

  • serverspecとdocker-apiでDockerfileをTDD

    serverspecとdocker-apiDockerfileをTDD いくつかDockerfileを書いてきた.今書いているDockerfileは短くてシンプルなものばかりだが,もっと長く複雑化した時に不安になりそうだ.不安を解消するにはテストしかない.さらにテスト駆動的にDockerイメージを開発できたら素敵だ.つまり, テストを書く Dockerイメージを作成して,テストの実行 -> RED Dockerfileの編集 Dockerイメージを作成して,テストの実行 -> GREEN テストを… の流れができるとよい. ということで,RSpecを使ってTDDでDockerfileを開発するというのをやってみた,tcnksm/docker-rspec.今回実現したのは以下. Docker Remote APIDockerfile特有のコマンド(e.g, CMDやEXPOSE)のRSp

  • すぐにDockerを試したい人のための基礎コマンド

    すぐにDockerを試したい人のための基礎コマンド Docker 虎の巻 Dockerの基礎のまとめが良かったので翻訳してみた.原典は,Docker Cheat Sheet.このまとめは説明は十分にあるが,例がほとんどない.実例を使って,コンテナとイメージに関する基礎コマンドをまとめてみる. OS X で試したい Vagrantを使う.バージョン1.4からはDockerのprovisioningに対応してるのでそれを使う. Download Vagrant - Vagrantより.dmgをダウンロードしてきてインストール. vagrant init precise64 http://files.vagrantup.com/precise64.box Vagrantfileを以下のようにすれば,すぐにDockerを使える. Vagrant.configure("2") do |config|

  • 1