ソフトウェア開発」カテゴリーアーカイブ

Softlayerを勉強してきた

以前のエントリで AWS をいじり始めたという話をしましたが、AWS だけでなく、Softlayer の研修も IBM で受けてきました。

会社では Microsoft の Windows Azure も利用している部署もあるのでより取り見取りですね。
私としては、これまでなんとなーく AWS が一番デファクト的な位置づけだと考えていたのですが、
単純にそれはその他を知らないだけという話でもあるかもしれないと考え、少し周りを調べ始めています。

AWS

AWS は言わずと知れたクラウドですね。

EC2 をはじめとして様々なサービスが提供されているので幅広い用途に使うことが出来ます。
個人的にはこのサービスの豊富さとその規模からくる価格メリット。そして成長・進化のスピードが AWS の強みに感じています。

まぁ、ろくに AWS を使っているわけではないので偉そうなことはあまりいうことは出来ませんが。

 

Softlayer

Softlayer は、もともとは独立したクラウドベンダーでしたが、IBM が現在は買収しています。
特徴的なのは、機器構成の自由度がかなりあるところです。

AWS で時々話があがるのは、インスタンスがどこに作られるかわからないので、同居しているインスタンスによってパフォーマンスに当たり外れがあるという話です。

Softlayer では、仮想ホストを共有する通常の形以外に、自分だけでホストを占有するタイプの仮想を選ぶことが出来ます。
(これをPrivateクラウドと呼ぶので混乱させているような気がしないでもない)
さらには、物理サーバーそのものを同じように Softlayer ポータルから借りることもできてしまいます

企業案件等でパフォーマンスがシビアに要求されるケースでは、ハイパーバイザーのオーバーヘッドを嫌がることもあると思います。
そういう意味では、Softlayer は自分たちで構成をゴリゴリと組みたいけどオンプレミスとして保持したくないというようなケースにおいては最適なのかもしれません。

もちろん、その場合のユーザー側の責任範囲は大きくなりますが。

一方で、サービス面に関しては AWS のほうが充実している印象を受けています。

クラウドで DB を利用しようとした場合、AWS であれば RDS を利用することが出来ます。
Softlayer ではバックアップを含めた運用管理は、よりオンプレミスに近い構築能力を要求されるとともに、Oracle 等を利用しようとした場合にはライセンスを用意する必要が出てしまいます。

クラウドの場合、やめようと思った時にやめられるのも利点ですが、こういったライセンスを時間貸しで利用できないのは、それが本来の形とはいえ辛いですね。
まぁ、MySQL や MongoDB 等のオープンソース系で行けばいいだけの話なのかもしれませんが。

AWS にしろ Softlayer にしろ、日々進化しているのである一時を切り出して優劣をつけていくのはなかなか難しい気もします。
ただ、それぞれの提供している特色というか特徴といったものがこの二つは分かれているので、すみわけは出来そう。

一方で、Microsoft の Azure は正直私が不勉強でよくわかっていないところが多いです。
どうなんだろうな

Surface Pro 3 での Virtual Box 起動エラー

開発環境を少しずつ整理している Surface Pro 3 ですが、仮想環境としては Hyper-V ではなく Virtual Box を利用しようとしています。
理由としては、Vagrant とかいじりたいからです。

仮想環境の用途としては、主に実行・テスト環境的な形ですね。

Windows で動作させるのが結構面倒なものもあるので仮想環境上に開発環境を持っている人も多くいるようですが、
一番の懸念は、適当にあれこれと試した結果、レジストリやらフォルダやらが滅茶苦茶になってしまうのが嫌なんですよ。

あれこれと試してみたいんだけど、試した結果どんどんと OS が重くなってしまうのでは困りものですから。

まぁ、そんな理由で仮想環境を建てようとしたのですが・・・・

20140827_vvox_error

こんな感じでエラーになってしまいます。

環境としては、

Surface Pro 3
Virtual Box 4.3.14
Ubuntu

という条件です。

Ubuntu は、公式のVHDからでも、手動でHDD作ってISOからやろうとしても同じエラーが表示されます。
というか、そもそも仮想PCの起動が出来ていない感じがするのでOSとか関係ないかもしれません。

ただ、別のPCでWindows8.1 環境があるのですが、そちらでは問題なく Virtual Box が動作している。ちょっとバージョンは失念してしまっているけど。
なので、単純なホストOS側の問題とは限らないと思うんだけどなぁ~。

これにずっと躓いていて、一向に Surface 上で物事が進まずに苛立ちを感じていました。

あれこれ公式のフォーラムを探していたのですが、よく解決方法がわからず、検索の方向性を変えて「Surfaceで」という感じで調べてみたら…

VirtualBoxのインストールエラー
http://qiita.com/nmatsui/items/80aff4e7f085d8d6de83

ヒットした。

そして、指示に従って 4.3.12 で試してみたところあっさりと起動しました。

うーん、Surface の何に引っかかったんだろう?
いずれにしても、ずいぶんと時間がかかってしまったな。

Docker 1.0 Release ! と言うことでインストールしてみた

Dockerが1.0としてリリースされました。

IT’S HERE: DOCKER 1.0
http://blog.docker.com/2014/06/its-here-docker-1-0/

これまで気になっていたけど手を出してこなかった

  • Vagrant
  • Docker

を触ってみたい!
参考にしたのはこちら

Windows + Vagrant + VirtualBox + Docker
http://syonx.hatenablog.com/entry/2014/02/18/010757

ちなみに仕事では、Docker や Vagrant, VirtualBox は全く触っていないんだけど、それはそれ。これはこれだ。

まず、VirtualBox や Vagrant をWindows へインストールするのには、普通にインストーラーを使用してもいいのだが、どうやらChocolatey なるものがあるらしい!
と言うことで、早速インストールだ!

> @powershell -NoProfile -ExecutionPolicy unrestricted -Command "iex ((new-object net.webclient).DownloadString('https://chocolatey.org/install.ps1'))" && SET PATH=%PATH%;%systemdrive%\chocolatey\bin

Chocolatey のインストールは、見ての通りPowershell を使用したコマンドラインによって行える。面白い形ですね。

無事にインストールが完了したら、まずはVirtualBox, Vagrant をインストールしてみる

>cinst virtualbox
>cinst vagrant

Vagrant のインストールは、実は一度タイムアウトのエラーが出て失敗したのだが、
もう一度コマンドを叩いたら無事にインストール出来た。

ここまで来て、参考HPに書いてある vagrantfile が存在せず、手順を進めることができない。
Vagrantfileを公開しておく事に関して幾つかの問題があって公開をやめてしまったようだ。

公式を見る限り、Windows環境で使うためには、Boot2Dockerを利用することを推奨している。

Installation Microsoft Windows
https://docs.docker.com/installation/windows/

Boot2Docker
https://github.com/boot2docker/boot2docker

Windows向けにはInstallerが提供されている

https://github.com/boot2docker/windows-installer/releases

これにはVirtualBoxも含まれている。ちなみに同梱されているVirtualBoxは4.3.12
さっき Chocolatey 経由で落としてきたものと同じ。

Boot2Dockerに関しては、インストーラにしたがって入れればOK。
とりあえず、Hello World してみた

docker@boot2docker:~$ docker run busybox echo hello world
Unable to find image 'busybox' locally
Pulling repository busybox
a9eb17255234: Pulling image (latest) from busybox, endpoint: https://cdn-registr
a9eb17255234: Download complete
511136ea3c5a: Download complete
42eed7f1bf2a: Download complete
120e218dd395: Download complete
hello world

うむ。
バージョンを表示する

docker@boot2docker:~$ docker version
Client version: 1.0.0
Client API version: 1.12
Go version (client): go1.2.1
Git commit (client): 63fe64c
Server version: 1.0.0
Server API version: 1.12
Go version (server): go1.2.1
Git commit (server): 63fe64c

うむ。

Docker自身がGoで書かれているのでGoのバージョンまで出ている。
一応、VirtualBoxのマネージャで見てみても動いている事が分かる

さて、よくよく考えてみると、Vagrantが放置されている。

Boot2Docker は、Docker インストール済みのイメージを使うだけ。
Vagrant は Docker がインストールされた Ubuntu をインストールするだけなので、
Ubuntu を普通に Vagrant を使ってインストールすればいいのでは?ということでやってみる。

参考:VagrantでUbuntuをインストール
http://qiita.com/awakia/items/895b3d61311b19737237

OSのイメージとしては以下のページから好きなものを選んでvagrantに食わせてあげればいい

http://www.vagrantbox.es/

Ubuntu だけでそれなりに色々とあって、何を選ぶとどうなのか?というのはさっぱりわからないが、とりあえず、最新っぽいやつを入れてみることにした

C:\Dev\docker>vagrant box add ubuntu https://cloud-images.ubuntu.com/vagrant/tru
sty/current/trusty-server-cloudimg-i386-vagrant-disk1.box
==> box: Adding box 'ubuntu' (v0) for provider:
box: Downloading: https://cloud-images.ubuntu.com/vagrant/trusty/current/tru
sty-server-cloudimg-i386-vagrant-disk1.box
box: Progress: 100% (Rate: 930k/s, Estimated time remaining: --:--:--)
==> box: Successfully added box 'ubuntu' (v0) for 'virtualbox'!

OKOK

では、Vagrant up しよか

C:\Dev\docker>vagrant up
Vagrant could not detect VirtualBox! Make sure VirtualBox is properly installed.

Vagrant uses the `VBoxManage` binary that ships with VirtualBox, and requires
this to be available on the PATH. If VirtualBox is installed, please find the
`VBoxManage` binary and add it to the PATH environmental variable.

なぬ。

パスが通っていないか?

インストール時にPath変数の値が省略形で書き込まれているので、これを修正して実行するとちゃんと動いた

うん、VirtualBox上でも動いているな。名前はちょっとあれだけど…

あ、Ubuntu 上での Docker 試してなかった。
まぁ、今日はこの辺りまでとしよう。

何れにしても、本題は Docker へのアプリのデプロイ周りになってくるので、この辺りはもう少しいじってみてというところだろうか。
Chocolatey の考え方ややり方と言うのは、それほど複雑ではないのでなんか参考に出来そうな気がする。

インストールやデプロイ周りはどうしても面白くないトラブルが無くならないので
簡単に出来る部分は簡単にする手法を見習って取り入れて行きたいところだ。

実践 Vagrant
実践 Vagrant

posted with amazlet at 14.06.10
Mitchell Hashimoto
オライリージャパン
売り上げランキング: 42,962
Docker入門 Immutable Infrastructureを実現する
技術評論社 (2014-04-25)
売り上げランキング: 336

expressプロジェクトの作り方がいつの間にか変わっていた

ちょこちょことnode.js周りをいじっているのですが、なにぶん行き当たりばったりなもので、
少し勉強しようと買って放置してしまっていたKindle本を読み返してます

Nodeクックブック
Nodeクックブック

posted with amazlet at 14.05.31
David Mark Clements
オライリージャパン
売り上げランキング: 356,390

これまでは大抵、expressを利用してきたので、久々にレシピにそって作ってみようと思ったのですが。。。

$ express profiler
-bash: express: command not found

あれ?以前は普通にこれでプロジェクトが作れたはずなんだけど・・・。
クックブックにもそう書いてあるし。
はて???

と、公式を見てみたら

$ npm install -g express-generator

と書いてあり、これまでの express をインストールしてexpressコマンドを叩くのではなく、
express-generator をインストールする必要があるみたい。

というか、どちらかというと公式の書き方を見る限りでは、express コマンド叩くと言うよりは
package.json に記述して npm install 叩く事を推奨しているのかな?

go

きっかけはすっかり忘れてしまったけど、少し go を勉強している。

特別、go を使って何かをしたいと言うよりは、どんなものだろうか?という好奇心が理由と言っても差し支えない状態。
さしあたり、チュートリアル的なものが用意されているのでそちらをチマチマと動かしている感じだ。

An Introduction to Programming in Go.
http://www.golang-book.com/

ちょっと、お?と思ったのはCのようにポインタという概念が存在している事だ。
最近私が興味でいじる言語はGCが実装されているものが多かったりして、ちょっと懐かしい感じ。
いや、仕事ではC++とかもいじるのでそういう意味では懐かしい訳ではないんだけど、
うん。懐かしく感じたんですよ。

まだ全部は終えてはいないんだけど、何となくは理解出来たと思うから、
どこかのタイミングで簡単なツールを作ってみようかなと考えている。

スクリプト言語は確かに簡易で、変化にもの凄く柔軟に対応出来ると思う。
ただ、動かす環境は構築する必要があって、go のように build して exe にする事が出来れば
何も考えずに持って行く事が出来る(んじゃないかな?)

まぁ、Windows環境で行うならC#なりで書けばいいじゃないかと言う話はもちろんあって、
それはそれでいいとは思うんだ。

まぁ、でも、色々いじってみた方が楽しいじゃん?

理由なんてそれで十分だろうと正直思ったりもする。
あくまで個人用のツールであればだけどね。

Elasticsearchにjdbc-river経由で漏れが発生した件

少し前にエントリーした件ですが、解決というか結果からすると回避する事が出来ました。

まず、ログを調べようと考え、config/logging.yml上でログをデバッグ出力に変更。

#es.logger.level: INFO
es.logger.level: DEBUG

実際に取込んでみたところ、出力されるログには

[2014-04-25 09:58:00,343][INFO ][org.xbib.elasticsearch.river.jdbc.strategy.simple.SimpleRiverMouth] bulk [225] success [100 items] [20ms]
[2014-04-25 09:58:00,358][INFO ][org.xbib.elasticsearch.river.jdbc.strategy.simple.SimpleRiverMouth] bulk [226] success [100 items] [15ms]
[2014-04-25 09:58:00,362][INFO ][org.xbib.elasticsearch.river.jdbc.strategy.simple.SimpleRiverMouth] new bulk [227] of [100 items], 1 outstanding bulk requests
[2014-04-25 09:58:00,373][DEBUG][org.xbib.elasticsearch.river.jdbc.strategy.simple.SimpleRiverSource] merged 22709 rows
[2014-04-25 09:58:00,378][INFO ][org.xbib.elasticsearch.river.jdbc.strategy.simple.SimpleRiverMouth] bulk [227] success [100 items] [16ms]
[2014-04-25 09:58:00,382][DEBUG][org.xbib.elasticsearch.river.jdbc.strategy.simple.SimpleRiverFlow] … fetched, flushing

見たいに書かれて、22709件実施したと出る。
ただし、実際にElasticsearch側へ登録されたデータ件数はもっと少ない状態でした。

river側は処理したが、データ不正かなにかによってElasticsearch側ではじかれたのか?
それともまさかUpdateされた?と思って地道に失敗したレコードの一部を特定。
単独でjdbc-riverを実施してみると・・・

問題なく登録される。

以前話に聞いた、大量件数を実施した時に問題が起こるって奴なのか?と再び考え、
たかだか2万件程度で問題が無いと思いつつも/config/elasticsearch.ymlに下記の設定を追加
ちなみに、参考にさせていただいたのはこちら

threadpool.index.queue_size: -1
threadpool.bulk.queue_size: -1

参考サイトには、キューが足りなくなったときと書いてあった。デフォルトでは30。
ログを見る限り、多分「outstanding」で示された数がそれに当たるんだろうけど、
それらは30に達しているようには見えない。
最高でも17〜18程度に見える。
そう考えると、これの影響は内容に思えるのだが、なぜかこれを設定する事で件数はあった。

ちょうど、jdbc-riverを見てたら話題になっていた

It is an issue with BulkProcessor class of ES. I patched the class and will release a fixed version of JDBC river soon.
https://github.com/jprante/elasticsearch-river-jdbc/issues/228

こちらはriver側のパラメータ指定で回避されたと報告されている。
受け渡す側のしきい値か、受け取る側のしきい値かの違いだとは思う。

どのしきい値に達したのかは、数からしてちょっと納得いかないものがあるがログくらいには出して欲しいものだ。
さしあたってなんとかなったけど、この辺りはもう少しなんとかしたいところだと思うので
今度ソースを当たってみよう。

高速スケーラブル検索エンジン ElasticSearch Server
Rafal Kuc Marek Rogozinski
KADOKAWA/アスキー・メディアワークス
売り上げランキング: 77,882

GWに何をしよう

既に始まってしまっていますが、GWへ突入しました。
私は、特に有休を取る訳ではなく暦通りに仕事へ行く事にしているので、
この4連休がGWのすべてと言えばすべてです。

とは言っても、我が家は嫁も私も人ごみの中に出かけるのはそれほど好きな訳でもなく、
さらに子供も小さいのでまだそれほど「〜へ行きたい!」という主張はしてこないんですよね。

あぁ、最近よくDVDレンタルで「リトルアインシュタイン」借りてくるんですが、
ちょうど借りてきている話が舞台がロシアで、

「シベリアいきたいー!」

って叫んでいる長男はいました。
今度、シベリア超特急でも借りてくればいいんですかね、きっと。

どこかへ家族で出かけると言うのもいいのですが、もう少しnodeやElasticsearch周りの知識をつけたいところ。
怠惰な私はすぐにゲームの誘惑へ負けてしまうのですが、どっかで見切りを付けなければ行けません。

そういう意味でも、ちょっとしっかりと考える必要がありますね。

ふーむ

 

シベリアかー

 

リトル・アインシュタイン/ひのとりを たすけよう [DVD]
ウォルトディズニースタジオホームエンターテイメント (2008-05-21)
売り上げランキング: 33,615

iOS アプリの社内配布メモ

前々から、iOSやAndroidで業務アプリを作った場合、どういう配布方法になるんだろうなぁ〜と疑問には思っていたんだけど、機会あって調べてみたのでメモ的に残しておく。
ちなみに調べたのはiOSだけで、Androidに関してはまだ調べてないのでそれはまた別の機会にでも。

Enterprise Program

AppStoreに公開するために加入するプログラムとして 「Developer Program」 があるのは知っていたけど、社内アプリケーション開発用に別途、「Developer Enterprise Program」が用意されていた。

プログラム比較一覧表
https://developer.apple.com/jp/programs/start/ios/

それぞれで出来る事に関しては、上記の公式を見ていただくと分かると思うが、ざっくりというと

  • AppStoreに公開するならDeveloper Programでいいけど、社内用アプリケーションはDeveloper Enterprise Programに入る必要がある
  • Developer Enterprise Program は、社内配布は制限無く出来るが、逆にApp Store への公開の権限を有していない
  • Developer Program で実機にセコセコと一台ずつインストールしていくという手もなくはないが、登録が面倒だし1年の有効期限がある

と言うところか。

ここで、結構気になるのは「社内への公開」と言うところだ。
たぶんだが、Enterprise 契約時に DUNS 番号を必要としている事から考えると、DUNS で定義された範囲内でのみの利用と言う位置づけなんだろうな。

普段業務アプリケーションを開発している私としては、お客様先へお客様のニーズにあったアプリケーションを開発して提供というシナリオが真っ先に思いついてしまう。
ところが、当然の事ながらその場合は「社内」という枠を超えてしまう。

こういうケースの場合、お客様が Developer Enterprise Program へ加入して、そのコード署名を使ってビルドしたアプリケーションを使ってもらう必要がありそうだ。

つまり、実際に開発した会社に対して、開発作業をアウトソーシングするような位置づけなのかな。

そういう立場ならばそういう立場でもいいのかもしれないけど、そうなるとお客様にMacを購入してもらって、そこでビルドとかになりかねないのではないかなぁ。
でも、そのためだけにMac購入してもらうとか、どんだけ無駄なんだ・・・。

この辺り、実は私の理解が謝っている恐れは十分あり得るんだけど、もし理解が正しかったとすればとても非効率な話に感じる。

うーん、なんか間違っているかもしれないな

Elasticsearch JDBC river での取りこぼし

先日の Elasticsearch 勉強会では、これまで知らなかった事を色々と勉強出来た。
勉強会が終わってから、勉強会中に話されていたが自分で理解出来ていなかった事をあれこれと消化しようとしています。

当初はログをぶち込んで Kibana で見る事によって何かしらの解析を行う事が出来ないか?という事を考えていたんだけど、
Elasticsearch を生かそうとした時には全文検索もちゃんと生かした方がいいと考えを改めた。
特に、基本語化等の自然言語処理系のお話はこれまで携わっていなかった分野なので素直に面白いと思ったのです。

と言う訳で、これまでは RDB に入れて Like 検索を行っていたような情報を Elasticsearch に入れて、フロントを適当に作ってしまえば誰かしら(not 自分)が幸せにならないかなぁと考えた。

Kibana を使うにあたって、既に RDB からのインポートと言う意味では JDBC river を試した事があったのでそれを利用して早速データを入れてみたんだけど・・・・

件数があわない

たかだか2万件ちょっとのデータなのだが、取込んでみると1万8千件位になってしまう。
これではちょっと困る。

先日の勉強会で、Couchbase からのデータ移行時に処理が追いつかずに Elasticsearch が取りこぼすような話があったんだけど、、、うーん。
当然の事ながら、Elasticsearch のログには特にエラーのようなものは出ていない。

元となっているRDB側のデータは少し変なデータが混ざっているかもしれなくて、それが悪さをしているのかもしれないけど、それにしてもエラーも何もでないのは困る。
(別なところにエラーが出ていてそれに気づいていない??)

JDBC river のソースはあるので、そちらを少しいじってみようかなと考えています。
river プラグイン側の問題なのか、それとも Elasticsearch 本体側ではじかれているのか。
せめてそれくらいはどこかしらにメッセージ出してくれてもいいじゃないか

まぁ、それはそれとして、あれこれと使ってみる上でやはり調べる事が多すぎて追いついていない状態です。
と言う訳で、AmazonでKindle版をポチりました。
お世話になりまする

高速スケーラブル検索エンジン ElasticSearch Server
Rafal Kuc Marek Rogozinski
KADOKAWA/アスキー・メディアワークス
売り上げランキング: 3,439

Elasticsearch 勉強会 #4

少し妻に頼み込んで、最近気になっている Elasticsearch 勉強会に行ってきた。
いやぁ、頼もしい妻で助かります。(大事なところ)

今回、初めてこの勉強会に参加した訳ですが、ここで使われている技術のほとんどは、
現在の私の業務上ではそれほど使う事がない技術ばかり。
そういう事もあって、とても新鮮な印象を受けました。

恐らく、全体の概要と言う形では他の参加者が記事にされると思うし、私に取っては整理が追いついていない事柄も多々あるのでここでは割愛。
ただ、今後調べてみたりした事に関しては随時記事にしていきたいと思っている。

特にこれまで Kibana に目が行き過ぎていたけど、今日の発表中にあった文字の「基本語化」という処理などは、あったらいいなと思う場面は幾つかありそう。
それらのソリューションに対して、今回の Couchbase や Hadoop , Hive などの技術を組み合わせて対応するというのは、素直に面白そうだなと思える。

なかなかこういった勉強会への参加は、子供が小さかったり家が遠かったりすると
参加が難しい現実があります。
いや、その辺りはうまい事家族内で折り合いが付けられればいいんですけどね。

とはいえ、勉強してなんぼの業界ではあるので学ぶ機会と言うのは増やしていきたいですね。