イベント

DMMエンジニア女子会に参加してきました♪

IMG_7941

LTの内容が女子力高いヾ(*´∀`*)ノ

・中の人が話すDMM.comラボの話
・社内向けに恋愛ゲーム作ってみた
・女子力を高めるgitの使い方
・人狼BOT

過去の恋愛遍歴や、社内のイケメン情報など、
女子っぽい話題が盛り込まれた楽しいLTでした。

私もイベント告知をさせていただいたのですが…
女子力は母のおなかの中に忘れてきたみたいです。

DMM女子会後姿

インフラエンジニア交流会とは違い!
用意された軽食も女子っぽい♪

サンドイッチに刺さっている旗はメンバーの手作り!
用意されたお皿もかわいかった(*ノωノ)

IMG_7943

交流タイムでは、たくさんの女子たちとお話ができて、
キラキラなパワーをもらいました!

お越しいただいたみなさま、ありがとうございました!
誘ってくれたメンバーのみんな、ありがとうございます!

2回目も開催する?!ようなので、
ご興味もたれた方はぜひ遊びにきてくださいねー!

また、女子会でも告知させていただきましたが、
インフラエンジニア交流会を6月に開催する予定です。

こちらも詳細が決まりましたら、お知らせしますので、
ぜひぜひ!遊びに来てください!

DMM女子会集合写真

Kafka, MQ, NewtMQ, RabbitMQ, STOMP

 インフラ統括本部の大山裕泰です。以前に STOMP と rabbitmq-stomp について紹介しました。
 STOMP は AMQP などに比べて非常にシンプルなプロトコルのため、高速なメッセージ転送が行えると期待していまいたが、とてもイマイチな結果でした。
 「これはきっと実装の問題に違いない!」と推測し、ちょうど STOMP 1.2 対応の C 実装サーバも知られていなかったので、STOMP プトロコルによる高速なメッセージ転送を行う MQ サーバ NewtMQ (にゅーとえむきゅー) を C で実装してみました。

 - https://github.com/newtmq/newtmq-server

 こちら の簡易ベンチマークツールを使って、大量のメッセージを送受信するのに要する時間を計測しました。
 

 
 こちらの図は、それぞれのサーバで 64 ~ 32K のサイズのメッセージを 10 万回送受信する処理が完了するまでにかかった時間を比較しています。
 また、全てのブロックサイズにおける転送時間の平均において、送信処理と受信処理の内訳を表した図が以下になります。青が送信処理時間、緑が受信処理時間を表しています。
 

 
 NewtMQ が 4 割弱ほど RabbitMQ (AMQP) より早い結果になりました。
 Kafka の結果が悪いのは、Publisher から送られたメッセージをストレージに格納するために他の結果と比べて処理に時間がかかっているものと考えられます。
 なお、Kafka のベンチマークでは Publisher の ‘acks’ パラメータ の値を 0 に設定しています。’acks’ パラメータによって Publisher が送信したメッセージに対する応答メッセージ (Ack) を待ち受けるかどうかを設定します。Kafka Protocol 0.8.x までは、デフォルトで Ack を無視していましたが、0.9.0 からはデフォルトで Ack を待ち受けるようになりました。STOMP では、同様の確認応答を無視しており公平を期するために、ここでは ‘acks’ パラメータを明示的に 0 に設定しています。

 ここでは STOMP も Kafka も送信処理は確認応答を受け取らない設定をしている(リクエスト投げっぱなし)なので、むしろ重要なのは受信処理時間です。以下に、各ブロックサイズでの受信処理時間の結果を示します。

 メッセージサイズが小さいケースにおいて、Kafka が圧倒的に早いです。しかしメッセージサイズに比例して処理時間が大きくなります。恐らく Kafka のログ (メッセージを保持する箱) がファイルシステムのページキャッシュに乗っているケースでは高速になり、メッセージサイズが大きくなるにつれてページキャッシュに乗り切らなくなり、処理時間が増えているものと思われます。

 尚、検証した環境は以下のとおりです。
 
サーバスペック

CPU : Intel Core i7-6700 CPU @ 3.40GHz
RAM : 32GB
HDD : Intel SSD (512GB)
OS : Ubuntu14.04
rabbitmq-server : 3.6.1-1
rabbitmq-stomp : 3.6.1
Kafka : 2.11-0.9.0.1

クライアントスペック

CPU : Intel Core i5 @ 2.7 GHz
RAM : 16GB
Ruby : 2.2.2p95
stomp (RubyGem) : 1.3.5
bunny (RubyGem) : 2.3.1
ruby-kafka (RubyGem) : 0.3.6

 ただここで得た結果は、それぞれのソフトウェアの特徴のごく一部を切り出して比較したにすぎません。これによって NewtMQ が RabbitMQ や Kafka より良いということは決して言えません。
 ここで示した一部の性能は NewtMQ よりも Kafka の方が上回っていますし、RabbitMQ や Kafka が積み上げてきた実績には NewtMQ は遠く及びません。また機能面でも大きな差があります。

 Kafka ではクラスタによるハイアベイラブルでスケーラブルな環境 を組むことができ、またメッセージをストレージに格納させることで大容量のデータをキューに滞在させ、それらを高速に処理させることができます。
 また RabbitMQ は柔軟なメッセージルーティングを実現する機能性に加え、AMQP の実装としての高い実績を有しており、また rabbitmq-stomp も topic 転送や AMQP キューとの連携などといった多数のオリジナル拡張機能を有した高い機能性を持っています。
 更に、分散システムの中核を成す MOM においては高い信頼性と拡張性が要求されます。RabbitMQ ではメッセージの永続化、及び Lazy Queueクラスタリング 機能によってこうした要求に応えています。
 他にも 遠隔ノードへのメッセージ転送動的なメッセージルーティング など、メッセージ転送に関する様々な機能を提供してくれています。
 
 しかし実際に利用しているユーザ側としては「あるサービスから別のサービスにメッセージが正しく、早く、安定して転送できればそれで良い(他には特にいらん)」と考えるユーザが大部分なんじゃないかということを個人的な実感として思うようになりました。
 こうしたサプライヤー側の過剰とも言えなくもない機能やサービスは MOM の分野に限ったことではなく SDN やクラウドなどの分野においても個人的な実感として感じます。
 もちろん、ユーザ側の要件が複雑化していった際にはこうした恩恵にあずかるわけですが MOM の分野においては、ネットワークやストレージ、データベースなどと比べれば、いざダメだとなった時の乗り替えは比較的容易かと思います。

STOMP は柔軟性や機能性に欠けるプロトコルですが、広帯域・高信頼なネットワークに閉じた環境において、高速なメッセージの受け渡しを実現することができると踏んでおり、これを実現するために NewtMQ を作りました。今回の結果にって、こうした可能性が見えてきたんじゃないかと思っています。
(とはいえ、まだ全然使えるシロモノには仕上がっていませんので、メジャーバージョンが出るくらいまでは、どうか暖い目で見ていてくださいmm)

linux, コラム

連休直前にノートPCのバッテリーが充電できなくなった。
故障した機材は、ThinkPad X1 Carbon 3rd Generation + Ubuntu 15.10。
ちょうど Ubuntu 16.04 LTS が出たばかりだよねえ。
さらに我々の部署の新しい標準PC(4th Generation)が入荷してきたぞ、ということでセットアップしてみたよ。

BIOSの設定

ThinkPadは電源を入れた直後に、F1キーを押せばBIOSセットアップ、F12キーでboot元を選択できる。
まずは、F1キーを押して、BIOSの設定変更。

  • USB接続機器からbootできる設定になっていることを確認
  • 仮想化テクノロジーが標準だとdisableになってるので、enableにする
  • Secure Boot をdisableにする

インストールメディアの準備

USBキーからインストールするのがお手軽。
ISOイメージをダウンロードしてきて、ブータブルUSBキーを作るツールで書きこんでやればOK。
Ubuntuで使えるツールでは以下なんだけど、、、、、、

  • usb-creator-gtk(ブータブルUSBキーの作成)
  • unetbootin
  • mkusb

usb-creator-gtk は、ここ数年バグってて使いものにならないんだよね。
案の定今回もうまく起動できるUSBキーは作れなかった模様。

unetbootin で作ったUSBは起動できたけど、起動直後に、「SYSLINUX 6.03 EDO …. Boot Error」 というメッセージが出て途中で止まっちゃう。
調べてみると、今のunetbootinに含まれているSYSLINUXに問題があって、機種によってこういうエラーが出るんだとか。

mkusbで作ったUSBキーでも起動できず。

さあ困った。
WindowsとかでUSBキーを作れば良いのかなあ。

あきらめて素直にDVD-Rに焼いて、DVDドライブから起動したら問題なく起動したよ。
なんかすごく時間を無駄にしたけど結果オーライ。

インストール

インストールメディアから起動できてしまえば後は素直にインストールできる。
今回はハードディスクを全部使う設定でGo。

ノートPCによっては無線LANのドライバーがなかったりすることもあるけど、X1 Carbonではインストール直後から問題なく無線LANは使えた。
Bluetooth、音量コントロール、画面の輝度コントロールなんかも問題なし。

インストールの後は生活環境を整えていく。

Aの横をCtrlキーにする

gnome-tweak-tool をインストール。

sudo apt-get install gnome-tweak-tool

Caps Lock を Ctrl として扱う、にチェックを入れる。

zsh

まずはシェルを変更。zshがどう良いかはググってくださいませ。

sudo apt-get install zsh
chsh

以前の環境から設定ファイルとhistoryファイルをホームディレクトリ以下にコピー。

日本語環境整備

zipアーカイブ中に日本語ファイル名があると、素のunzipコマンドだと変なファイル名になってしまうので、Japanese Teamによる追加パッケージを追加。
以下のURLを参考に。

https://www.ubuntulinux.jp/japanese

wget -q https://www.ubuntulinux.jp/ubuntu-ja-archive-keyring.gpg -O- | sudo apt-key add -
wget -q https://www.ubuntulinux.jp/ubuntu-jp-ppa-keyring.gpg -O- | sudo apt-key add -
sudo wget https://www.ubuntulinux.jp/sources.list.d/xenial.list -O /etc/apt/sources.list.d/ubuntu-ja.list
sudo apt-get update
sudo apt-get upgrade
sudo apt-get ubuntu-defaults-ja

SKK

SKKがあまりにも手に馴染んでしまっていて他の日本語入力を使えないんだよねえ。
SKKを使うやり方はいろいろあるけど、最近のUbuntu的には fcitx-skk を使うのがお勧めかしら。

sudo apt-get install fcitx-skk

インストール後は fcitx の再起動。
右上のキーボードをクリック→再起動。

skkを追加。
右上のキーボードをクリック→現在の入力メソッドの設定。
「+」ボタンを押して、skk を追加。

以前使ってたユーザー辞書をコピー。具体的には以下のファイルをコピーすればOK。

~/.config/fcitx/skk/user.dict

Emacs

世の中的にはvimなのかもしれないが、おじさんはemacsが慣れてるのよ。
w3mモードもついでに入れとく。

sudo apt-get install emacs
sudo apt-get install w3m-el

以前の環境から、 .emacs や自前の elisp ファイルをコピー。

Atom

markdown を読み書きするときは、Emacs より Atom のほうがプレビューできて便利。

sudo add-apt-repository ppa:webupd8team/atom
sudo apt-get update
sudo apt-get install atom

以前の環境から ~/.atom ディレクトリをコピー。

Firefox

以前の環境から ~/.mozilla ディレクトリをコピー。

Chromium

艦これは、Chromiumでやるほうが便利。
flashのプラグインもインストール。

sudo apt-get install chromium-browser

sudo apt-get install pepperflashplugin-nonfree
sudo update-pepperflashplugin-nonfree --install

以前の環境から、 ~/.config/chromium ディレクトリをコピー。
艦これが動くことも一応確認。

Skype

Ubuntuソフトウェアセンターのソフトウェアソースから「Canonicalパートナー」をソースに追加。

sudo apt-get update
sudo apt-get install Skype

以前の環境から、 ~/.Skype ディレクトリをコピー。

ScudCloud

Slackクライアントも追加。

https://launchpad.net/~rael-gc/+archive/ubuntu/scudcloud
sudo apt-add-repository -y ppa:rael-gc/scudcloud
sudo apt-get update
sudo apt-get install scudcloud

以前の環境から、 ~/.config/scudcloud ディレクトリをコピー。

指紋認証

以下のURLを参考にインストール。

http://zecheru.com/thinkpad-fingerprint-ubuntu-14-04/?v=24d22e03afb2

sudo apt-add-repository ppa:fingerprint/fingerprint-gui
sudo apt-get update
sudo apt-get install libbsapi policykit-1-fingerprint-gui fingerprint-gui

インストールしたら、fingerprint-gui を起動して、Fingerタブから指紋登録、、、、、と思ったら、4th Generation の指紋デバイスがうまく認識されてないな。
3rd Generation のときは、ログイン、スクリーンロック解除、sudo、なんかで普通に使えて便利だったんだけどなあ。
継続課題ってことで。。。。

gpointing-device-setting

ThinkPad の TackPad や TrackPoint の微調整をするときに便利に使えるツールなんだけど 16.04 では標準パッケージから外れてるっぽい。

マウストタッチパッドの設定で、ポインターの速度を速くして、タッチパッドをオフにしただけど、そんなに困ってないので、継続課題ってことで。
真ん中のボタンも正常に動作はしている。

4Kディスプレイ接続

3rd Generationと同じように普通に4Kディスプレイに表示できた。
手元のDELLのモニタだと、SSTモードだと駄目で、MSTを有効にする必要はあった。

ただ、起動時に接続していれば問題なく使えて、その状態からケーブルを抜いても問題ないんだけど、起動した後で4Kディスプレイに接続すると画面が固まることもある。
これも前と一緒の症状だな。

使ってみた感想

以前の環境の画面は 1920×1080 で、文字が小さいけど画面が広くて便利、と思ってたんだけど、今度の環境は 2560×1440。
さらに画面が広くなって、文字もすごーくちっちゃい!!
目が大変か、と思ったけど、意外と慣れるね。
でも画面が広いとマウスでのカーソル移動が大変。
タイル型ウィンドウマネージャーとか使ってみたほうが良いのかもなあ。

細かいソフトウェアのアップデートはあるので注意しなきゃいけないこともありそう。
たとえば、OpenSSHは、バージョンが7.2になって、ssh-dss のような Legacy なプロトコルは標準だと使えないようになってる。
まあ設定ファイルを書くか、コマンドラインで -oHostKeyAlgorithms=+ssh-dss のような指定をすれば大丈夫だけどね。

とりあえず生活環境が整ったので、連休後半はサーバをいじるよ!!

(参考)インストールの後のその他の設定

このへんを見るのがお勧め!!

Ubuntu 16.04 LTSをインストールした直後に行う設定 & インストールするソフト

PAGE TOP