タグ

ブックマーク / r7kamura.github.io (9)

  • Flynn Overview - r7km/s

    Flynn という、コンテナを複数ホストで動作させるPaaS実装の全体像。 strowger リバースプロキシ。 ユーザからTCP/UDPリクエストを受け付けて適切なホスト (の中で動いているDockerコンテナ) に委譲する。 HAProxyやNginxのようなものだが、再起動や設定ファイルの再読込無しで動的に設定が変更できるという特徴がある。 controllerからHTTP経由でリクエストを受けて、ルーティング情報を表示したり変更したりする。 gitreceived git-push(1) を受け付けて適当な処理を行うためのSSHサーバ実装。 受け取ったコードをslugbuilderというツールで実行可能な形式 (=slug) にコンパイルしたあと、Shelfと呼ばれるファイルサーバにslugをアップロードする。 アップロード後、controllerに対してアプリがpushされた

    Flynn Overview - r7km/s
    ryotarai
    ryotarai 2014/07/17
  • Gitreceive - r7kamura per second

    gitreceive という、git push時に任意の処理を実行する為のツールがある。 Dokku の中で同様の仕組みが使われており、 git push時にbuildpacksでアプリをbuildDockerコンテナの中で動かす、 という機能を実現している。 認証機能 gitreceiveはSSH公開鍵登録用インターフェース、 及び公開鍵を利用した簡易的な認証機能を持っているが、 公開鍵を登録したユーザからのPushのみを許可するというもので、 Pushするアプリケーションごとに別々の権限を与えるということは出来ない。 forced command gitreceiveはSSHのforced commandと呼ばれる機能を利用している。 forced commandを使うと「SSH接続時に何をするか」という情報を、 クライアント側ではなくサーバ側で指定出来る。 OpenSSHでは、au

    ryotarai
    ryotarai 2014/07/01
  • GHQ - r7km/s

    ghqというレポジトリ管理ツールを使ってみた。 Installation Goがインストールされていてかつ環境変数$GOPATHが設定されている環境で、go getを使ってインストールできた。 手元の環境を調べてみると、Goのversionは1.2.1、環境変数$GOPATHは$HOME/.goに設定されていた。 $ go get github.com/motemen/ghq $ go version go version go1.2.1 darwin/amd64 $ echo $GOPATH /Users/r7kamura/.go $ cat /Users/r7kamura/.zshrc.local | grep GO export GOPATH=$HOME/.go export PATH=$PATH:$GOPATH/bin $ which ghq /Users/r7kamura/.go

    GHQ - r7km/s
    ryotarai
    ryotarai 2014/06/22
  • Private PaaS Beach - r7kamura per second

    デプロイこそが全て。 Dokku https://github.com/progrium/dokku/ Dokkuを使えばmini-Herokuのような環境を簡単に構築出来る。 Dokkuを利用して構築したホストに対してgit pushでコードをデプロイすると、 HerokuBuildpacksの仕組みを利用して環境が構築され、 Dockerのコンテナ上でアプリが起動し、nginxの設定が更新される。 Dokkuのホスト上でnginxがHTTPリクエストを待ち受けており、 サブドメインを元に適切なコンテナにリクエストを渡すという仕組みになっている。 Digital Ocean https://www.digitalocean.com/ Dokkuを試しに使ってみるにはDigital Oceanを利用するのが便利。 最初からDokkuがインストールされた状態のイメージが用意されているこ

    Private PaaS Beach - r7kamura per second
    ryotarai
    ryotarai 2014/03/10
    via Pocket
  • Includable YAML - r7kamura per second

    YAMLの定義内で別のファイルに書いたYAMLを参照出来るようにしてみた。 YAMLに加える変更 YAMLの各要素には任意のタグを埋め込むことができ、またその振る舞いを定義出来る。 # test.rb require "yaml" YAML.add_domain_type(nil, "include") do |type, val| YAML.load_file(val) end # 折角なので再度YAMLに加工して出力してみる puts YAML.load_file("api.yml").to_yaml Includeする側 例えば、レシピデータを返すREST APIの仕様をYAMLで定義するというユースケースを考える。 レシピのスキーマをrecipe.ymlに書いて、各APIから定義を使い回すことにする。 # api.yml /recipes: GET: response: array

    ryotarai
    ryotarai 2014/02/17
    via Pocket
  • Device Specific API Design - r7kamura per second

    The Netflix Tech Blog: Embracing the Differences : Inside the Netflix API Redesign Netflixの開発者ブログで触れられているように、Netflixは以下の4つの方針に沿って彼らのAPIを再構築した。 デバイスごとの差異を受け入れる コンテンツの収集と整形を分ける クライアントとサーバの境界線を再定義する 変化を促進する デバイスごとの差異を受け入れる REST APIのように1つの汎用的なインターフェースで全ての要件を満たそうというアプローチは、 APIへの理解が簡単になる一方、後から変更することは難しくなり、また非効率な処理を生み出しやすくなる。 この手のアプローチが重視しているのは、API提供者側の開発コストを下げることであり、 API利用者の利便性を第一に考えたものではないと彼らは考える。 API

    ryotarai
    ryotarai 2014/02/17
    via Pocket
  • Apiary - r7kamura per second

    API(とそれに携わる開発者)の規模が拡大してくると、ドキュメントの整備や、仕様と実装の一貫性の維持、 クライアントとの知識の共有など、考慮すべき問題が沢山出てくる。 これらの問題に対する現実的な解決策を探るため、 ApiaryというAPI開発支援用のサービスを簡単に俯瞰することにした。 ここでは紹介しないが、他に RAML、 JSON Schema、 Swagger、 WADL、 Autodoc などが関連するものとして挙げられる。 Apiary http://apiary.io/ Apiaryは、API Blueprintと呼ばれる言語でAPIのインターフェース仕様書を記述する、という開発方法を提唱している。 API BlueprintはMarkdownを拡張した言語で、特殊な記述を用いて幾つかのメタ情報を付与出来る形になっている。 Markdownを採用することで人間にとって読み書き

    ryotarai
    ryotarai 2014/02/14
    via Pocket
  • faraday-lazyable - r7kamura blog

    faraday-lazyableという、 HTTPリクエストを遅延評価させるためのライブラリを作った。 遅延評価はある種の複雑性を持ち込むが、ビジネスの要求に合わせて正しく使っていきたい。 遅延評価 HTTPリクエストにおける遅延評価とは何か。 遅延評価というのは、評価しなければならない値が存在するとき、 実際の計算を値が必要になるまで行わないことをいう。 HTTPリクエストを遅延評価するというのは、つまりHTTPクライアントはすぐにレスポンスオブジェクトを返すが、 レスポンスオブジェクトに対してメソッドが呼ばれたときに初めてHTTP通信を発生させるということを意味している。 Faraday Faradayとは何か。 faraday-lazyableは、FaradayというRuby製のHTTPクライアントのプラグインとして実現されている。 FaradayはRackのようにプラグイン(=この

    faraday-lazyable - r7kamura blog
    ryotarai
    ryotarai 2014/02/03
    “HTML生成はキャッシュされるようになったが、 ユーザに画面を表示するたびにHTTP通信が発生してしまうという事実がある。 HTTP通信というのはアプリの行う処理の中でもかなり遅い部類に入るもので、 例えば1回の通信で10
  • Autodoc - r7kamura blog

    闇Advent Calendar 1日目の記事として、最近の開発における心の闇に触れます。 最近開発した Autodoc というツールについて簡単に説明した後、 この手のツールの開発にあたって考えていた、 創作活動の在り方や、社会の斥力、25歳定年説などについて触れようと思います。 Autodocとは Rack applicationで実装されたAPIに対して、RSpecで書かれたテストを元にAPIドキュメントを生成するもの。 テストを実行すると、テスト中に発行したリクエストやレスポンス、そのテストに付けられたメッセージを元に、 良い感じに情報をまとめ、Markdown形式でAPIドキュメントを記したファイルを生成してくれる。 例えばGitHubではMarkdownファイルを適当に描画してくれるので、 下図のようにGitHub上で簡単にドキュメントを閲覧出来るようになる。 テストの書き方

    Autodoc - r7kamura blog
    ryotarai
    ryotarai 2013/12/02
  • 1