Skip to content

Instantly share code, notes, and snippets.

@nota-ja
nota-ja / gist:7788733
Last active December 30, 2015 06:19
HM9000の使い方

 このgistは Cloud Foundry Advent Calendar 2013 の4日目の記事です。

 cloud Foundry では,最近,コンポーネントのGoでの書き換えが進んでいます。

 最も早く登場したのが,Gorouter。そしてCFのクライアントも,vmc(Ruby実装)→cf(Ruby実装)という変遷を経て,gcfが正式版となりました。また,本当につい最近(11月下旬に),CFの心臓ともいえるNATSサーバーに,gnatsdが採用されました。

 HM9000は,正式採用こそまだですが,CFのデプロイ・セットを定義しているcf-releaseには既に含まれており,BOSHでデプロイすることも可能です。但し,ある設定を行わないと,デプロイしても期待通りに機能しません。

 それは,HM9000の設定ではなく,Cloud Controller V2 (CCv2)の設定です。 具体的には,hm9000_noopという設定です。 (例: https://github.com/cloudfoundry/cloud_controller_ng/blob/9fc43437094383ec036b87a9767cfe5b0d201132/config/cloud_controller.yml#L123 )

@nota-ja
nota-ja / gist:7847007
Last active December 30, 2015 15:18
HM9000 の backend storage である etcd を触ってみる

 このgistは Cloud Foundry Advent Calendar 2013 の8日目の記事です。

 昨日の記事がまさかのyoutubeだったのですが,私はそこまでやれないので,平常運転(gistのみ)で行きます。

 話を戻します。

 前回の私の記事に書いた通り,HM9000は,Cloud Foundry の core component の一つ,Health Manager のGolang実装です。

 (本来これは前回書いておくべきことでしたが) Cloud Foundry における Health Manager の役割は,

@nota-ja
nota-ja / gist:7873363
Last active December 30, 2015 19:19
gibsonを使ってみる

 このgistは Cloud Foundry Advent Calendar 2013 の9日目の記事です。

 昨日の記事が思わぬ大作になってしまったので,今日は軽めで行きたいと思います。

 本家cloudfoundryのGitHubに,gibsonというリポジトリーがあります。READMEを読むと,Routerに対して,アプリへのrouteを登録/登録解除する,Goで書かれたライブラリー/ツールとのことです。何のためにそんなものが必要なのかは今のところ不明ですが,今日はこれを動かしてみることにします。

 まずGitHubからgibsonをcloneして,registrarというツールをinstallします。

cd $GOPATH/src/github.com/cloudfoundry
git clone https://github.com/cloudfoundry/gibson.git
@nota-ja
nota-ja / main.go
Last active December 30, 2015 23:39
massregistrar: Cloud Foundry の Router にダミーの 'router.register' を送りつけるツール。ベースにしたgibsonの実装は https://github.com/cloudfoundry/gibson/tree/97491e15e747fbc21e5b515eab9311c731e41dd2
package main
import (
"flag"
"log"
"math/rand"
"os"
"strconv"
"strings"
"time"
@nota-ja
nota-ja / gist:7901938
Last active December 30, 2015 23:39
gibsonを使ってmassregistrarを作る (「Gorouter と Ruby Router v2 の性能比較」 その1)

 このgistは Cloud Foundry Advent Calendar 2013 の10日目の記事です。

 昨日の記事で少し思わせぶりなことを書いてしまいましたが,実はここで紹介したgibsonを使って,Gorouter と Ruby Router v2 の性能比較をしようと考えていました。

 作業に時間がかかることはわかっていたので,確言はできなかったのですが,案の定,時間がなくてこの体たらくです。

 しょうがないので,「Gorouter と Ruby Router v2 の性能比較」を何回かに分けて記事にしようと思います。

 今日はその第1回「gibsonを使ってmassregistrarを作る」です。

@nota-ja
nota-ja / gist:7959093
Last active December 31, 2015 08:09
Gorouter と Ruby Router v2 の改造 (「Gorouter と Ruby Router v2 の性能比較」 その2)

 このgistは Cloud Foundry Advent Calendar 2013 の13日目の記事です。大幅に遅れてすみません..。

 今日は,「Gorouter と Ruby Router v2 の性能比較」の2回目として,Gorouterと Ruby Router v2 の改造を行います。

 が,その前に,前回の記事で作ったmassregistrarを修正しましたhttps://gist.github.com/nota-ja/7901644/revisions3f9cdbfのところの差分を見てもらうとわかりますが,主な修正点は,1) バックエンドのダミーアプリのURLの数もコマンドライン・オプションで指定するようにしたこと, 2) IPアドレスごとにポートとURLの対応付けを行う処理を1回しか行わないようにしたこと, の2点です。後者の修正で,前回の記事で書いた問題は解消しています。

 さて,今回の本題に戻ります。前回説明したように,Cloud Foundry のRouterの主な機能はプロキシー動作です。

  • クライアントからアプリへのリクエストを受け付け,
  • それを適切なアプリに転送し,
@nota-ja
nota-ja / gist:8082495
Last active July 6, 2018 01:54
Gatlingを使った性能測定 (「Gorouter と Ruby Router v2 の性能比較」 その3)

 このgistは Cloud Foundry Advent Calendar 2013 の19日目の記事です。またしても大幅に遅れて本当に申し訳ありません。

 今日は,「Gorouter と Ruby Router v2 の性能比較」の3回目として,Gatling を使って Gorouterと Ruby Router v2 の負荷テストを行います。

準備

 まずは準備から。

 (準備1) Gatlingのインストール。面倒なので詳細は省きます。以下のURL等を参考にしました。

@nota-ja
nota-ja / gist:8100666
Last active January 1, 2016 05:49
Cloud Controller NG の API ドキュメント生成を試してみる

 このgistは Cloud Foundry Advent Calendar 2013 の23日目の記事です。今回はかなり軽めに。

 Cloud Controller NG (以下「CCng」) の document_api については,輪読会などでも何度か「壊れていて使えない」と言ってきましたが,この間再度試してみようと思ってREADMEを読んだら,気になる記述が。

API documentation

To genenerate the API documentation

bundle exec rspec spec/api/ --format RspecApiDocumentation::ApiFormatter
open doc/api/index.html
<!DOCTYPE html>
<html>
<head>
<title>Cloud Foundry API</title>
<meta charset="utf-8">
<link rel="stylesheet" href="//netdna.bootstrapcdn.com/bootstrap/3.0.0/css/bootstrap.min.css"></link>
<style>
body {
margin-left: auto;
margin-right: auto;
Defined route: 'get' '/v2/spaces/:guid/services' -> 'VCAP::CloudController::SpacesController': 'enumerate_services' / {}
Defined route: 'get' '/v2/spaces/:guid/service_instances' -> 'VCAP::CloudController::SpacesController': 'enumerate_service_instances' / {}
Defined route: 'post' '/v2/spaces' -> 'VCAP::CloudController::SpacesController': 'create' / {}
Defined route: 'get' '/v2/spaces' -> 'VCAP::CloudController::SpacesController': 'enumerate' / {}
Defined route: 'get' '/v2/spaces/:guid' -> 'VCAP::CloudController::SpacesController': 'read' / {}
Defined route: 'put' '/v2/spaces/:guid' -> 'VCAP::CloudController::SpacesController': 'update' / {}
Defined route: 'delete' '/v2/spaces/:guid' -> 'VCAP::CloudController::SpacesController': 'delete' / {}
Defined route: 'get' '/v2/spaces/:guid/developers' -> 'VCAP::CloudController::SpacesController': '' / {#<Proc:0x000000030fb128@/home/nsnt/gitrepos/cloud_controller_ng/lib/cloud_controller/rest_controller/routes.rb:52>}
Defined route: 'put' '/v2/spaces/:guid/developers/:o