【戯れ言】サーバOSをどうするか?

ここ数日、風邪で体調が激悪です。
しかし、今一番大切な作業をしていて休むわけにもいかず、身体に鞭を打っています。
そんなわけで、ブログの記事投稿や研究などは全てお休み中です。
申し訳ないです。

さて、現在サーバの改修を社内で検討していて、OSを何にするか迷っています。
基本的に…

・弱小企業なので、お金はかけられない
・技術者は私しかおらず、今後が心配なので「誰でもさわれるもの」が良い
・出来るだけ手間のかからないもの

で、こう考えていくと、まずWindowsServerはあり得ない。それから商用Linux(RHEL)もNGです。今まではFreeBSDを使っていましたが、「誰でも」という点で分が悪い。何を隠そう私もFreeBSDは分からないので、もうぶっちゃけコミュニティ版のLinuxしか選択肢がないです。
ここまではまあいいとして、問題はディストリビューション。私は基本的にFedora使いで、自宅鯖などで元祖からずっと使っています。それ以前はTurboLinux Serverだったのですが、無償版がなくなってから使っていないし、もうデスクトップしかやる気ないみたいですし(というか今後はない?)。まあTueboLinuxはもうどうでも良いのですが、Fedoraに関しては、会社で使うのはどうなんだろう、という感じで踏み切れずにいます。2~3年前にインストールした最新版がもうサポート切れになったりとか。最新機能を試すにはいいディストリビューションなのですが…
そこで考えるのがCent OS。最近人気あるみたいですね。レンタルサーバでもけっこう入っていますし。RHELのコミュニティ版という位置づけで、Fedoraよりは業務に耐えそうな気がしますので、ちょっと検討してみたいと思います。

年内はサーバ絡みでばたばたとして終わりそうです。いろいろ出来るようになるのは来年からですかね。
ちょうど案件で国際化が必要なものが出てきたので、Cakeの国際化機能を使うチャンスが来たようです。前々から興味はあったのですが、使う機会がなかったため、楽しみです。

【戯れ言】休日出勤(まだ会社)

今日は、ネットワーク回線を整備するために、休日出勤をしていました。

いや~、大変です。
今まで二人三脚でやっていて、一人にインフラを全部任せていたのですが、辞められてしまい私一人でやることになってしまいました。サイト制作は現在ストップしてもらっていますが、人が作ったサーバ環境やらインフラやらをさわるのは本当に辛い…訳分からん、というのが本音です。

しかも、私の守備範囲はギリギリLinuxなのですが(汗)、社内環境はFreeBSDでさっぱりわからんです。確かに信頼性とかではFreeBSDの方が上だと思いますが、いじれないのは問題なので、ちょうど良い機会なのでPHPやPostgreSQLなど新しいソフトウェアに改修を図りつつOSも新しいバージョンのLinuxに置き換えていこうかと。最新型ではありませんが比較的良いスペックなので、VPNとか仮想化とかいろいろやっていこうかなと思っています。まあ7~8台あるので、順番に少しずつしか出来ないでしょうけど。でもこれで技術を磨けば、ホスティング事業なんかも出来るかもしれないですし、サーバのことも良く分かるようになるので、スキルアップと思って楽しく取り組んでいこうと思います。

そして、ちょうど事件があって…社内のあるドメインが本日失効したらしく、スタッフが使っているサービスやらメールやらが全く使えなくなりました。再取得では時間がかかるだろうということで、急遽新ドメインを取得し、電撃的にDNSやメール・Apacheを設定し、なんとか1時間ちょっとで全て復旧! 我ながら良い仕事をしたと思います。
ちょうど社長とうち合わせをしていた最中で、社長は隣で見ていたのですが、「すげー!」の連発だった。まあ、トップレベルDNSの更新が早かったので運も良かったんだろうと思いますが、普段あまり見てもらえない仕事っぷりを見せられて良いアピールできたかな?(笑)

【追記】

ブログなんか書いていたら、終電をまんまと逃しました(大汗)。
悔しいので、今から渋谷の街へ繰り出そうかと思います。
といっても、行くところといったらタイトーステーションでドラムを叩いて、マックへ行くくらいしか出来ないと思いますが(^^;;;。
あ~あ、車で来れば良かったなぁ…

【サイト技術】SaaSだのクラウドだの…

最近「SaaS」「クラウド」の2つの単語がネットニュース上を踊りまくっていますね。

恥ずかしい話なのですが、私は今日の今日までこの単語の意味をあまり知りませんでした(^^;;;。
記事を読んでもさっぱりと頭の中に入ってこない。あまり興味もなかった。
「これはすごい!」みたいな記事が良くあるんですけど、なんか良く分からない専門用語で塗り固められていて、イメージが出来なかったんです。

で、あまりにも五月蠅いのでちょっとネットで検索をしてみたんですが…
なんだ、なんのことはない、ただの「ASP」じゃないですか!

http://ja.wikipedia.org/wiki/SaaS
http://blogs.itmedia.co.jp/kurikiyo/2006/07/saasasp_a618.html
http://profile.allabout.co.jp/ask/qa_detail.php/7966

要約すれば、SaaSは「インターネットベースのマルチユーザ・アプリケーションサービス」な訳で、この考え方は現在のASPの形態と全く変わらないですよね。「クラウド(コンピューティング)」も結局はWeb2.0の基礎技術を定義づけたようなもので、SaaSのベースになっている技術がクラウドだとすれば「SaaS = ASP2.0」という解説は確かに納得です。

まあ、こういった技術用語は、詳しくない人にお金を出させるのに都合の良い言葉だったりするんですけどね(笑)。

【とりあえずAmazonで見つかった本】

アマゾンのサーバでエラーが起こっているかもしれません。一度ページを再読み込みしてみてください。

アマゾンのサーバでエラーが起こっているかもしれません。一度ページを再読み込みしてみてください。

アマゾンのサーバでエラーが起こっているかもしれません。一度ページを再読み込みしてみてください。

【お知らせ】ECWorks Blogを移転しました!!

予告通り、ブログを移転しました。
タイトルも「(仮)」ではなくなりました(笑)。
旧ブログの内容は全てこちらの方に移してありますので、今後こちらの方を見ていただけると幸いです。

ブログシステムも予告通りWordPressなんですけど、いろいろと苦労しました。
まずMySQLの新規インストールと設定に手間取りました。Postgresのほうが数倍は楽(笑)。
それから、これはと思うテーマがなくて、探し回ってしまいました。
以前のデザインはコントラストが低くて見にくかったと思うので、今回のはコントラスト超高めです。ワンポイントな画像などそのままになっているので、今後いろいろと手を入れていきたいと思います。

ちなみにWordPressなテーマなんですが、Tplcutterでは作成が難しいですね。
layout部分がヘッダやフッタが分かれて格納されるため、ここを上手い具合にやらなければいけないとか、全部のページに対してPHPでヘッダとフッタを呼び出す形式になるとか。逆に言えば、それさえクリアできれば、ディレクトリ構造などはそのままでいけるので、対応できそうですね。
せっかくなので、TplcutterをWP対応させて、もっとテーマを皆さんに作って貰えるようになったらいいかも、なんて(笑)。どのみち必要かなと思っていたある機能もこれで必要になりそうなので、対策を考えてみます。

PostgreSQLでMySQLの「auto increment」に対抗する方法

PostgreSQL使いがCakePHPでいろいろなサンプルを試していて、乗り越えなければいけない壁がいくつかあります。前述の記事で、bdo_source.phpの不具合を挙げましたが、それを解決したとしても、MySQLとの仕様の違いを克服する必要が多分にあります。

初っぱなでまず解決しなければならないのが「auto increment」です。CakePHPでは、idカラムを作りそれを主キーとして利用するのが一般的ですが、MySQLのようなauto incrementのオプションがありません。同機能を実現するには、若干工夫しなければなりません。

基本的にPostgreSQLでは、idに関しては次のようにテーブルを定義します。

DROP TABLE IF EXISTS users;
DROP SEQUENCE IF EXISTS users_id_seq;
CREATE SEQUENCE users_id_seq;
CREATE TABLE users (
  id    INTEGER  DEFAULT nextval('users_id_seq') PRIMARY KEY,
  created    TIMESTAMP NOT NULL,
  modified    TIMESTAMP NOT NULL, 
 
  name    VARCHAR(255) NOT NULL
);

ちなみにシーケンス名は、テーブル名と同じく複数形でないと、CakePHP側でうまくいかないようです。

CakePHP1.2+PostgreSQL8.3

 予告通り、PostgreSQL8.3を現状インストールされている8.2.5と入れ替え、CakePHP1.2で動かしてみました。とりあえず問題なく動いています。

 実は、動くまでに悪戦苦闘していまして…
 1.2でDBを動かすのは初めてだったのですが、1.1で問題なかったModelやControllerを持ってきても変なエラーが出ていたんです書いてあるはずのModelやControllerがないとか、pg_queryでエラーが出ているとか、云々。

 まず、ControllerやModelがない件は、redirectの仕様が若干違うらしく、1.1はパスの指定が最初から絶対値になっているため、例えば「www.foo.com/hoge」内で「'hoge/fuga'」にリダイレクトさせると「www.foo.com/hoge/fuga」となりますが、1.2は相対指定らしく、「www.foo.com/hoge/hoge/fuga」に飛んでしまうのです。なので、「'/hoge/fuga'」としたらちゃんと動くようになりました

 pg_queryの方は、結局はdatabase.php内のDATABASE_CONFIGクラス内で新しく加わったschemaプロパティの値を省略していたためにエラーが起きたようで、とりあえずpublicを入れたらすんなりと動きました(^^;。

 あと、Smartyテンプレート出力の後ろに、毎回クエリ結果が出てしまい、scaffold設定していないのに何でDB関連の表示があるのかとびっくりしたのですが、どうやら1.2からデバッグswが最初から入っているらしく、core.php内を修正したらちゃんと出なくなりました

 この辺は1.1→1.2に移行時の注意点でしょうか?
 Posgre8.3由来の不具合は、今のところ特に感じないです。まあ、まだ使い倒していないため、不具合を見つけられていないと思いますし、がりがり動かすようなアプリに入れたわけでもないため、まだパフォーマンスについては体感できていないです。

PostgreSQL8.3

 あれこれしている間に、Posgreのバージョンが上がってしまいました…

▼「PostgreSQL 8.3」が正式リリース、性能は最大30%向上
http://headlines.yahoo.co.jp/hl?a=20080205-00000007-zdn_ait-sci

 性能向上は、まあおまけ程度に考えた方が良いのかもしれませんね。ちゃんとした設定をしなければ効果が得られないと思いますから。とはいえ、非同期コミットでの性能向上とのことなので、普通に(どの程度を普通というのかはアレですが)DBを操作する場合で多少パフォーマンスが良くなるんじゃないでしょうか?

 問題は…新版を入れて問題が起きないか、これにつきますね。0.0はちょっと怖い(^^;。仕事で使っている案件には当然入れられませんけど、個人の実験用鯖には入れても良いかなとも思っていたり。CakePHPで動くかどうかの人柱にもなるでしょうし。家に帰ってからちょっとやってみましょう。

 というか…今後MySQL5.1にするか、Posgreのままでいくか、良い判断材料になりそう。MySQLはもともとレプリケーション機能が標準で備わっていて、5.1になってさらに強力になりましたが、Posgreはまだ標準でありませんので、pgpool等のアプリを別途入れないといけません。おそらく8.3.xに対応されるまではかなりの時間がかかるでしょうから、現時点でのPosgreのウィークポイントかなぁ。個人で鯖1個でやる分には全く関係ないけど、ちょっとでかいDBを持ちたい場合は困るかなぁ。Oracle入れろとか言われそうだけど、低コストでそれらしいDBを使いたい場合には、やっぱりレプリケーション機能は必要かなぁ…なんて考えています。
 個人的にはPosgreは好きです。SQLが分かりやすいし、正直InnoDBとかISAMとか訳わかんないし(汗)、制約とか(テーブル名やカラム名の文字制限とか、サブクエリとか)も少ないし。でも最近ではどちらも差がないと言われていますから、考え直すちょうど良い機会かと思います。

【追記】
性能向上についてなんですが、いろいろ調べていくうちに、実は凄いんじゃないかと思えてきました。
今回の目玉はHOT(Heap Only Tuples)という機能で、更新時の無駄が大幅に軽減されるとのこと。UPDATEすると、今までは以前のデータがVACUUMするまで経路が残ってしまうのですが、8.3からUPDATEすると即経路を付け直してゴミを破棄するため、ディスク使用量が少なくなるだけでなく、無駄な経路分重かったパフォーマンスが改善される、ということらしい。ベンチマークで倍の速度向上が得られているみたいで、これは凄い! 今後更新系のDBを構築する場合は8.3系にした方が良さそうです。
それから、レプリケーションが行えるpgpoolにIIが出ていて、こちらもなかなかの性能が出ている模様。
また、開発ツールとして「ENUM」というMySQL→PostgreSQLの移行ツールなどもリリースされるようですね。
意外とPostgreSQLは今アツいのかも