社内勉強会(2)

社内勉強会で「javaScriptによるテスト駆動開発」を行いました。

テスト駆動開発の中でjavaScriptを選んだのは以下の理由です。

1.他の言語と比べてデバッグがしにくい
2.エラーが発生しても画面から得られる情報が少ない
3.テストコードを書き、少しづつ開発を行っていく手法が向いている

調べる前は、JsUnitが鉄板かな?と思っていたのですが、
JsTestDriverを使う事をお勧めします。

nginx + php-fpmを使う上での注意(大きなファイルのダウンロード)

ownCloudはapacheを標準としていて、nginxは「Other Web Servers」の取り扱いです。それでも導入手順は書かれています。

http://doc.owncloud.org/server/5.0/admin_manual/installation/installation_others.html

ただし、この設定だと1GBを超えるファイルをダウンロードできません(クライアントソフトを通してもNG)。
ownCloudだけでなく、PHP自体が1GBを超える出力をできなくなります。
続きを読む

ownCloud試用その後

takekoshiです。
owncloudを社内で使うべく試験導入しました。いくつかの問題がありつつも、今のところは使えなくはないというところです。社内にファイルサーバを置けばいいんですが、地震対策やらを考えるとデータセンターに置ける物はデータセンターに置きたいです。

■使用感
◇容量よりファイル数
全体として、容量よりファイル数がボトルネックになります。(クライアントソフト経由でも)WebDAVですべてを行っているため、容量の大きいものは単に転送量が多いだけですが、1ファイルごとにhttpアクセスが発生、dbへのセッション確立もそのたびに行っている様子です。

◇CPU食い
一番使うサーバリソースはCPUです。一人が同期を始めると、ロードアベレージが1ぐらい上がります。その間、ディスクIOはほとんど発生しません。ファイルサーバなのに意外でした。WebDAVリクエストを処理するためにPHPがCPUを使用しています。
CPUを食いつぶすのはどうにもならないようです( https://wiki.archlinux.org/index.php/Owncloud_(%E6%97%A5%E6%9C%AC%E8%AA%9E) )。
ディスクIOは十分少ないのでssh操作ができなくなる等の問題はなく、ユーザからは「同期中クライアントの数に比例して同期が遅くなる」という負荷のかかりかたです。

◇MySQLも負荷が上がる
PHPが一番負荷が上がりますが、MySQLも負荷が上がります。ただ、重いクエリがあるわけではなく、同期中はhttpd接続のたびに細かい処理を繰り返しているようです。

◇同期が終われば静か
同期中は負荷が高めですが(mysqlもhttpdもブン回ります)、同期が終わってしまえばほとんど負荷はありません。更新有無確認のために、30秒に1回クライアントから接続がやってきます、

◇ファイル共有で人数分のネットワーク帯域を使用
複数人でフォルダ共有する場合、ファイルアップロードする→共有関係者全員がダウンロードする、で人数分のネットワーク帯域を使用します。100Mbpsでも10人で共有すれば一人当たり10Mbpsで、案外と帯域を使います。

◇何らかのタイミングで共有ファイル全部同期し直し
何かのタイミングで共有ファイルをすべて同期しなおす動作が発生します。
・ユーザが所属するグループを変更(追加)する
・共有ディレクトリを増やす
のどちらかで発生しているようです。

■サーバ設定まわり
◇MyISAMになっていた
デフォルトエンジンがMyISAMになっていたせいか、全部MyISAMでした。InnoDBに変更しました。効果のほどはわかりません。

◇一部にバグ
oc_queuedtasks.parametersはvarchar(256)で定義されています。json_encode()でデータが格納されますが、ファイルパスが含まれるため、ファイルパスが長いと256文字に切られる(mysqlデフォルトの場合)ので、json_decode()ができずエラーになります。
次のalter文で回避できます。

ALTER TABLE oc_queuedtasks MODIFY COLUMN parameters longtext NOT NULL

この不具合がどう影響するかまでは調べてません。

◇KeepAliveの効果は不明
KeepAliveのOn/Offは、速度的には大した影響がないようです。

◇apacheでもnginxでも変わらなさそう
最初はapacheで動かしていましたが、nginx + php-fpmに変更しました。負荷の程度は変わらなかったです。
nginxプロセスは静か、php-fpmプロセスが重いので、APサーバとして重くwebサーバとしては関係なしというものと思われます。

◇BASIC認証はかけられない
BASIC認証をかけるとリダイレクトがループしました。仕様のようです。
https://github.com/owncloud/core/issues/107

■ファイル競合
◇競合した場合は、競合ファイルが作られる。
同一ファイルを同時に編集した場合、
aaaaa.txt
に対して
aaaaa_conflict-20131028-144730.txt
がつくられます。先にサーバにUPしたほうが勝ちになり、あとからupしたほうが競合ファイルとしてつくられます。
ただし、編集ではなく削除した場合は削除のほうが勝ちになる様子です。
編集しないでファイルロックを持っている場合(サクラエディタで開きっぱなしなど)、他で編集されると同期エラーが出ます。ローカルファイルの更新が失敗している様子です。

ownCloudを試してみました

takekoshiです。
オンラインストレージにownCloudが良さげということで試してみました。公式サイトを見ると非常に多機能で楽しくなってきます。
ググる限りではdropboxの代わりのような言われ方をしていますが、商用版もあるので共有フォルダに期待できます。ユーザ権限にグループの概念があり、グループ単位でフォルダ共有できます。

続きを読む

社内勉強会(1) – MySQLのトランザクション

今月から社内勉強会は、社員が持ち回りで講師を担当することになりました。
初回のテーマは「MySQLのトランザクション」です。
MySQLにほぼ限定した形でトランザクションについて発表をしました。

資料は以下の5章立てになっています。
1.トランザクションとは
2.ストレージエンジン
3.トランザクションの開始と終了
4.ACID特性
5.オートコミット

日頃の業務では、実行したSQLの動作確認をした際に、意図した結果が得られない場合に処理を戻せるように、「begin」で書き始めてトランザクションを開始するようにしています。
しかし、そもそもトランザクションは「失敗した時に戻すための機能」ではありません。
普段から使ってはいるけれど深くは知らなかったトランザクションについてちょっとだけ知識を深めるよい機会になったと思います。

なお、「2.ストレージエンジン」の中で、MySQLで利用できるストレージエンジンはInnoDBとMyISAMの2つだけであるかのように書かれていますが、この代表的な2つ以外にもいくつかのストレージエンジンが存在します。ただし、ほとんど使われません。

「FuelPHP&CodeIgniter ユーザの集い」でLTしてきました

「FuelPHP&CodeIgniter ユーザの集い」に参加してきました。

http://atnd.org/events/43750

TLさせていただいたので資料を掲載します。

下書き原稿のほうが読みやすいと思いますので”ノーマル版”も張っておきます。

コミュニティがしぼんでしまったCodeIgniterですが、意外なことに話の半分がCIでした。ライセンス問題も解決の取っ掛かりを作っていただけているので、ここから盛り上げることもできるかもしれないと感じます。

アルゴリズム+データ構造勉強会(10)~(15)

takekoshiです。いまさらですが春に行っていたA+D勉強会の資料のこりをUPしました。

最後は8クイーン問題を力技で解きますが、第15回最終ページにデータ構造を工夫して楽に解く方法が示されています。人に教わった方法ですが、かなり鮮やかな解き方になっています。

AWSを使う時の勘所とかメモ的なこと

どうもこんにちは、弓道部の子を電車で見ると「正規空母だ」と言う気持ちがわかったchariです。

アロハでもちょこちょこAWSは使っているのですが、

構築時に普段のオンプレとは違う部分で気にする必要があるのでよく忘れてまた嵌りそうなことをメモしてみます。

■EC2

- Security Groupsというもので各インスタンス間などのポート開放をする必要がある。

これをしないと外部からのhttpのアクセスなどが出来ないです。

わかりやすく言うとデフォルトでiptablesのポートが22以外閉まってる感じですね。

 

- Amazon LinuxとCentOSどっちがいいか。

当初はCentOSを使っていたのですがAmazonLinuxでいい気がしてきました。

AWSのコマンドラインツール入ってたりとAWSに特化した部分があるためです。(使いこなせてないですが(汗)

 

■RDS

以下のサイトを参考にして設定等してました。

参考サイト:Amazon RDSを使う

 

- Multi-AZ配備

レプリケーションと似た機能ではあるのですが、

ちょっと違うのでどういうものか理解した上で設定するか決めた方がいいと思います。

 

- Security Groups

ここでもポート開放必要なのでお忘れなく。

 

まだまだ、覚えることはいっぱいありそうで楽しそうです。

皆さんも是非AWS触ってみてください。