タグ

ブックマーク / thinkit.co.jp (47)

  • [Think IT] サーバが重いってどういうこと? (1/3)

    サーバが重いってどういうこと? 著者:ウノウ  尾藤 正人   2007/10/4 2007年10月の連載ランキング1位(一覧を見る) サーバ管理者だけではなく誰でも一度は経験したことがある「サーバが重い」という現象。一言で「重い」というのは簡単ですが、重いというのは具体的にどういうことなのでしょうか。 ここでいう重い・軽いは単一のベクトルで判断できるような簡単な代物ではなく、様々な要素によって発生する現象です。処理が重いからといって闇雲にハードウェアを増強するのは賢いやり方とはいえません。例えば、メモリ不足が高負荷の原因なのに、CPUを高速なものに変えても効果はほとんどないでしょう。 このような無駄な投資を避けるためにも、負荷の原因を特定して素早く対応策を講じるのはサーバ管理者にとって重要なスキルになります。記事ではサーバ負荷の特定の仕方と対策の仕方について、簡単な概要を説明します。

  • [Think IT] 第8回:それぞれが持つビュー機能 (1/3)

    ビューとは「定義したSELECT文の処理結果集合を、あたかも通常のテーブルのようにあつかう」ための機能です。アプリケーションから複雑なSQL文を発行しなくても良いようにしたり、データベースモデル設計でいうところの「外部モデルの実装形態」として使用します。データベース設計者によっては、頻繁に使用されることも多いのではないでしょうか。 ただし、ビューは検索対象に使用する際には実テーブルと同じようにあつかえますが、更新対象として使用する際には実テーブルのようにはあつかえません。そこで今回は、PostgreSQLMySQLそれぞれが持つビューの機能について特に更新処理に着目し、具体的な例を交えながら解説します。 PostgreSQLでは、単純にCREATE VIEW文にて作成したビューを更新することができません。ここでは詳しく触れませんが、PostgreSQLのビューは「ルール」という仕組みを利

  • [ThinkIT] 第6回:query_cache_sizeの違いによるパフォーマンス比較 (1/3)

    MySQLサーバには、MySQLクライアントからのクエリとその実行結果をキャッシュし、次回から同じ内容のクエリが要求された場合にキャッシュから応答する、クエリキャッシュという仕組みがあります。キャッシュから応答させることによってデータベースへアクセスする負荷を軽減し、また応答速度自体の向上も狙ったものです。 デフォルト状態ではクエリキャッシュを使用しない設定になっています。以下のように現在の「クエリキャッシュに使用するメモリ量の最大値」であるquery_cache_sizeを確認してください。

  • [ThinkIT] 第1回:Webブラウザを使ったテストツールSeleniumとは (1/3)

    この連載は、WebアプリケーションのテストツールであるSelenium(セレニウム)についてサンプルを用いながら概要と基的な使い方を解説していきます。連載第1回の今回は、Seleniumの概要について紹介します。 Seleniumとは、Webブラウザを使ってWebアプリケーションをテストするツールです。この「Webブラウザを使って」というのが非常に大きなポイントで、人が手でWebブラウザを操作する代わりにSeleniumがWebブラウザを操作してくれるのです。 そして単純に操作するだけでなく、例えばエラーメッセージが正しく表示されているかといった検証も行うことができます。つまり、今まで人手を必要としていたWebブラウザを使った試験が自動化できるものなのです。そのため数百項目もあるテストも、クリック1回で実施できます。 より重要なことは「自動化することによって試験を繰返し実施できる」こと

  • [ThinkIT] 第5回:グローバル変数の制御と更新履歴ファイル (1/2)

    前回の「第4回:JavaScriptライブラリの作成」で作成したCalcライブラリでは、オブジェクトの初期化で特に複雑な処理は不要でしたが、より高度なライブラリになると多数の関数を定義したりループを回したりと、初期化処理の中で変数を必要になるシーンが増えてきます。 JavaScriptの変数スコープは「{}」で囲われたブロック単位でなく、関数単位になります。関数外でvar宣言した変数も全てグローバル変数として定義されるため、例えばライブラリ中で リスト5:calc.cgiサンプルCGI(Webサービス側) という初期化コードを記述した場合、tmpとiの2つのグローバル変数を利用(汚染)することになります。 ライブラリは他のプログラムと併せて利用するためのものですから、ライブラリ外のプログラムが変数tmpやiを別の用途で利用していた場合に影響が出てしまう可能性があります。 ライブラリの初期化

  • [ThinkIT] 第7回:技術共有と向上を目指すユニークなウノウの取り組み (1/3)

    前回まではウノウでの具体的な開発手法について紹介しました。最終回の今回は視点を広げ、開発者同士での情報共有や技術向上を目的として行っているユニークな施策と、その目的について解説します。 まずウノウでは「ペアプログラミング」の時間を設けています。これは、プログラミングを2人1組で行っており、お互いの知識の交換によってプログラミングのスキルやコードの質の向上をさせることを目的としています。 具体的には1人がコードを書き、もう1人が横で指摘しながら作業を行います。1人でのコーディング作業とは異なり常に他人にみられているという状況のため、集中力も必要となります。 さらにぺアの相手に対して、記述しているコードの内容について説明を行いながら作業を進めます。この方法によって、複雑で説明をすることが難しい箇所が減ったり、実は簡単になる箇所が発見できたりと、結果としてコードの品質が向上する効果が得られます。

  • [ThinkIT] 第3回:運用管理を各種ツールで自動化 (1/3)

    Webサービスは、サービスそのものを作るよりも運用の方がコストがかかるといわれています。このため、コストを削減するには運用部分を極力自動化する必要があります。 そこで今回はオープンソースソフトウェアを利用し、コスト削減と運用監視の両面を目的とした手法を紹介します。 一口に「監視」といっても、サーバを運用する際に注目すべき点は様々です。実際にウノウでは、以下のような項目を監視しています。 日々のパッケージのアップデート アプリケーションの脆弱性などの確認やアップデートを行います。 サーバの生存監視 正常にサービスが提供されているかの、サーバの死活を監視します。異常があった場合は即座に通知されるのがベストです。 サーバのリソース監視 サーバがどの程度のリソースを使用しているかを監視します。サーバの負荷測定、ボトルネック検証や増強計画などで効果を発揮します。 アプリケーションのログ監視 アプリケ

    aki77
    aki77 2007/03/16
  • [ThinkIT] 第2回:JavaScriptの復習 (1/2)

    前回はJavaScriptの「プロパティ」「空のオブジェクト」「オブジェクト」について復習しました。引き続き「関数オブジェクト」「クラス」「空のクラス」「コンストラクタ」「プロトタイプ」について解説していきます。 JavaScriptでは関数も関数オブジェクトというオブジェクトです。関数オブジェクト自体をプロパティに代入することも可能ですし、関数オブジェクト自体がプロパティを持つことも可能です。 実際に、リスト3のsayMyNameに格納されているものが、関数オブジェクトです。このように、オブジェクトのプロパティに格納された関数オブジェクトのことをメソッドと呼びます。 リスト3:プロパティを定義(再掲) var amachang = { name: '天野',                   // nameプロパティ sayMyName: function() {         //

  • [ThinkIT] 第6回:BTS(Bug Tracking System)の利用 (1/3)

    システム開発を進めるにあたり、バグやタスクなどを管理して、現在発生しているバグの数や担当者といったステータスを把握する必要があります。また、ある程度以上の規模のWebアプリケーションを開発する場合、数人のチームで開発を進めるケースが多く、開発を円滑に進めていくためにスタッフ間での情報共有が重要になってきます。 「Bug Tracking System(以下、BTS)」は、これらの問題を解決するためにプロジェクトのバグを管理し、修正状況を追跡できるよう可視化を行うシステムです。現在、BTSとして様々なソフトウェアが公開されており、ソフトウェアを開発する上での必須アイテムになりつつあります。 BTSの多くはWebブラウザ経由でアクセス可能なソフトウェアで、その中から今回はウノウで採用している「Trac」について説明します。 Tracは、BTSとWiki、Subversionリポジトリビューワー

    aki77
    aki77 2007/02/27
  • [ThinkIT] 第3回:Subversionによるバージョン管理(後編) (1/3)

    ウノウでは表1の通り、サービスに使われているプログラムはもちろん、その他の必要なプロジェクトファイルなども例外なく、すべてSubversionでバージョン管理しています。 Subversionでは、テキスト形式のファイルだけではなく、その他のバイナリ形式のファイルもまとめて管理することが可能です。ただしバイナリ形式のファイルの場合は、変更内容(差分)を参照することはできません。またワード(拡張子がdoc)やエクセル(拡張子がxls)のファイルは、バイナリ形式のファイルとなります。 筆者の会社では、エンジニアが開発サーバにログインしてサービスの開発を行っています。開発サーバには、SubversionとWebサーバがインストールされており、「共通の開発環境」と「個人の開発環境」の2つがまったく別の環境になるように構築しています。 両方の環境とも、Subversionのリポジトリからチェックアウ

  • [ThinkIT] 第1回:サーバ導入の物理面を考える (1/3)

    一口に「Webサービス」といっても、銀行のオンライン決済やオンラインコマースサイト、CGMを駆使したサイトなど、その種類は様々です。これからWebサービスをはじめようという場合、そこで運営するサービスそのものだけでなく、Webサーバの構成や管理といった面も考えなくてはなりません。 連載では、ウノウが提供しているユーザ数10万人程度のCGMサービス「フォト蔵」を例に、3回にわけて「ウノウ流」サーバ構築方法と運用方法について紹介していきます。第1回の今回はサーバマシンの選択から設置方法までの物理面について解説します。 実際に利用できるWebサーバの選択肢として、自社サーバやハウジングサービス、レンタルサーバなどの種類があります。当初Webサービスの展開が進められた時期には、社内にサーバルームを設け、システム担当社員によって管理する自社サーバが一般的でした。 その後、運用管理面での負担やコスト

  • 【SaaS】SaaSの本質を見極める

    2006年のIT業界におけるバズワード(はやり言葉)の1つに「SaaS(Software as a Service)」がある。同じく2006年、IT業界を超えて大きな話題となった「Web 2.0」の一要素としてSaaSは考えられ、2007年も引き続き注目すべきキーワードであるといえるだろう。連載では、SaaSの定義からはじめ、SaaS導入の際の留意事項や進化を続けるSaaSの今後について、数回にわたり解説していく。 SaaSとは一言でいえば、ソフトウェアの開発ベンダーがソフトウェアの機能をインターネットを通じ、サービスとして提供するソフトウェアのデリバリモデルである。従来のソフトウェアとは異なり、ユーザはライセンスを買い取る必要がなく、利用料金を期間(毎月、半年など)に応じて支払うことになる。ユーザが支払う利用料金には、保守費用や運用管理費用、バージョンアップ費用が含まれており、こうした

    aki77
    aki77 2007/01/10
  • [ThinkIT] 第2回:データを徹底活用する全文検索機能の仕組みと製品比較 (1/3)

    第1回では、昨今のビジネスシーンにおいて、既存のデータを徹底活用するためのツールとして全文検索機能の重要性を説明し、その実現手段の1つとしてLudiaの概要を解説しました。 第2回では、まず全文検索機能に要求される事項と考慮すべきトレードオフの観点を説明します。次に商用製品を含めた製品比較を行い、オープンソース「Ludia」にどのような特徴があり、どの程度の機能があるのかを解説します。

    aki77
    aki77 2006/12/25
  • [ThinkIT] 第2回:Subversionによるバージョン管理(前編) (1/3)

    今回は、Subversionによるバージョン管理方法とウノウでの導入事例について前編と後編にわけて紹介していきます。 Subversionとは、無償で利用できるバージョン管理システムです。現在もオープンソースで活発に開発が進んでおり、執筆時点の最新バージョンは1.4.2となります。バージョン管理システムとは、ソースコードや仕様書などを含むドキュメントなど、時間とともに内容が変化するファイルを管理するシステムの総称です。 Subversionと同じようなバージョン管理システムとしては、CVS(Concurrent Version System)が有名ですが、SubversionではこのCVSで使いにくかった点を改良した次世代バージョン管理システムというコンセプトで開発が続けらています。筆者が実際にどちらも利用してみた結論として、導入をおすすめするバージョン管理システムは、やはり「Subver

  • [ThinkIT] 第1回:複数人による開発の要所を押さえる (1/3)

    PHPは生産性の高い開発言語として広く普及しました。現在も多くのWebアプリケーション開発でPHPが採用されており、その手軽さも手伝って実績を伸ばし続けています。手軽に開発できることから、個人での開発もでき、独自の開発手法が多く存在し、複数人では統一が難しいといわれています。 そのため複数人による開発では、確固とした開発手法がとられてない事例が多いのも事実です。開発手法が確立されてない場合、規模が大きくなるとすぐに破綻してしまいます。それを避けるには、開発手法を確立しておく必要があります。 連載では複数人によるPHPを用いたWebアプリケーション開発において、実際に筆者の所属するウノウ株式会社が行っている手法を例に効率的な開発手法を解説していきます。連載の内容はPHPだけでなくRubyPerlのような他の言語にも適用できます。また1人で開発を行う時に非常に有効な方法です。実際に筆者が

  • [ThinkIT] 第6回:データベースの負荷分散とまとめ (1/3)

    Webサーバーも順調に増えた、となると次はデータベースが悲鳴を上げる頃です。データベースの増設と行きましょう。 はてなではデータベースにはMySQLを利用しています。MySQLは組み込みでレプリケーションをサポートしているので、これを使わない手はありません。レプリケーションを行い、マスターDBのコピーであるスレーブDBサーバーを作り2台構成にします。 レプリケーションは、データベースを複数台に増やし、且つその複数のデータベースが保持するデータを同期させるための仕組みです。レプリケーションされたデータベースのうち、元々あったデータベースが親、それ以外が子という親子関係になります。 親はマスター、子はスレーブと呼ばれ、マスターへの更新処理と同じ処理をスレーブに伝播させることでデータの同期が行われます。実際にはマスターからスレーブへ処理が伝播するのではなく、スレーブがポーリングを行ってマスターと

  • [ThinkIT] 第5回:サーバの追加とロードバランシング (1/2)

    さて、サービスがオープンしてしばらく経ってくるとトラフィックも増えて、アプリケーションサーバーの負荷が高くなってくることでしょう。そこで、アプリケーションサーバーを増やすことになります。同じ構成のアプリケーションサーバーをもう一台作って対応します。 ここでふと気づくわけですが、Webサーバーがproxy×1+mod_perl×1の場合は、クライアントから受け付けたリクエストを振り分けて処理するといったことは意識する必要がありませんでした。 しかし、proxy×1+mod_perl×2になると、リクエストを受け取ったリバースproxy側では、どちらのアプリケーションサーバーにリクエストを転送するかを考慮する、つまりロードバランシングをする必要が出てきます。 結論から言うと、ロードバランシングもリバースproxyでやってしまうことができます。 Apache 2.2にはmod_proxy_bal

  • [ThinkIT] 第4回:Backend Evolution(後編) (1/2)

    前回は「リバースproxyとは」と「Webサーバーのメモリ使用率」について解説しました。今回は前回の続きとして、「HTTPのKeepAlive」と「リバースproxyの構築」について解説していきます。 話は変わって、KeepAliveです。 1つのWebページをブラウザーが表示するにあたっては、htmlに加えてページ中に配置された複数の画像やスクリプトファイル、つまり複数のドキュメントをサーバーからダウンロードする必要があります。 この複数のリクエストを取得するのに、サーバーとクライアントの間で複数のコネクションを張ってやりとりするのは効率が良くありません。 サーバー側でKeepAlive設定が有効になっている場合、クライアントは、1つ目のドキュメントのダウンロードが完了したあとも接続を維持します。これにより必要なコンテンツを1つのコネクションで取得できるようになり、クライアントから見ても

  • [ThinkIT] 第3回:Backend Evolution(前編) (1/2)

    ここから、はてなブックマークのシステムが、サービスリリース当時からどのように変化していったかを述べつつ、サーバーの増設という視点で要所の解説をしていきます。 はてなブックマークがオープンした当初は、利用していたサーバーは3台でした。それぞれの用途は、

  • [ThinkIT] 第6回:ストレージエンジンの処理性能比較 (1/3)

    今回は、第5回までに紹介してきたストレージエンジンの中からMyISAM/InnoDBArchiveCSV/Memoryを選び、簡単な性能試験を行いました。その内容と結果について解説します。なお、試験に使用したバージョンはMySQL 5.0.22です。

    aki77
    aki77 2006/10/11