【書評】「大規模サービス技術入門」

エンタープライズシステムを扱うSE, SIerにはぜひとも読んでもらいたい書籍。

数年ぶりに読み返して、良い本だなーと改めて思ったので紹介しておきます。

[Web開発者のための]大規模サービス技術入門 ―データ構造、メモリ、OS、DB、サーバ/インフラ (WEB+DB PRESS plusシリーズ)

[Web開発者のための]大規模サービス技術入門 ―データ構造、メモリ、OS、DB、サーバ/インフラ (WEB+DB PRESS plusシリーズ)

 

 

内容は、負荷分散にまつわるOSの動作原理、DBの分散方法、大規模データを処理するための基礎知識、実践的なアルゴリズムをシステムに組み込む実装、検索エンジンの仕組み、システム全体を見渡すためのインフラ設計の知識・・・と多岐にわたる。

はてなの夏のインターンで講義した内容を書籍にまとめた本ですが、この内容をきちんと押さえている方はそう多くはないはず。とはいえ、システムを扱うならこの内容くらいは一般常識として知っておいてもらわないとぶっちゃけやばいです。

 

全部重要ですが、特に、大切なポイントをさらっておきます。詳細を知りたい方は本書を購入してみてください。(私はいまでもこの本をたまに眺めるので買って損はしないはずです)

 

(できるかぎりくだけた感じで書いておきます。)

(1)OSの動作原理

①OSのキャッシュ

ディスクIOは低速(メモリはディスクの10^5倍以上高速)。なので、できる限りメモリで計算したい。じゃあどうするの?→「キャッシュ」。キャッシュってどんな仕組みなの?→一般的には「LRU」という仕組み。LRUとは、一番古いものを廃棄して、一番新しいものを残す。つまり、最近読んだものはキャッシュに残って、昔読んだものが破棄されていく。

補足:

Linuxは、メモリが空いていれば全部キャッシュする。

なので、例えば、sarコマンドなどで、キャッシュされている容量を確認すると、「99%」とか表示されて、「やばい、メモリが全く足りねーじゃねーか!」とか慌てることはないです。だって、OSがメモリの空いているところにどんどんキャッシュしているだけですから。

 

仮想メモリ機構

仮想メモリ機構…聞いたことはあるけどいまいちピンとこないという方も少なくないのではないでしょうか。仮想メモリ機構とは、「論理なリニアアドレスを物理的なアドレスへ変換する」という仕組みです。

なのでそんなことするの?って思うかもしれませんが、一番の目的は、「OSが物理ハードウェアを抽象化したい」からです。

プロセスというのは、メモリのどこを使っているのかということを気にせずに、必ずここから始めるという形(絶対的な場所)で定義したいからです。(その方が扱いやすいから)

実際に、UNIXの共有ライブラリは、プロセス内のある決まった番地に割り当てられるようになっている。なので、OSはメモリを直接プロセスに渡すのではなく、いったんカーネルの中でメモリの仕組みを抽象化してます。(つまり、仮想化)。これが「仮想メモリ機構」です。

 

(2)スケーラビリティ

単にサーバを増やすだけじゃダメ。

<主なポイント>

①CPU負荷のスケーリングは簡単

 ・同じ構成のサーバを増やす(Web, APサーバなどが該当 )

②IO負荷のスケーリングは難しい

 ・同期を取るのが難しいから。

  (例えば、DBを増やした場合、増やした台数分のDBをすべて同期とらないとダメだもんね。)

 

(3)ボトルネックの見極め方

ロードアベレージを確認(topコマンドなどで確認)

 (ロードアベレージ:システム全体の負荷状況を示す指標)

 ・ロードアベレージが高い→CPU, IOのどっちが原因か調査

 ・ロードアベレージが低い→ソフトウェア設定や、NWの原因を疑う。

②CPU, IOのどっちがボトルネックになっているか確認

 ・sarやvmstatコマンドで確認

  →CPU負荷が原因の場合:「サーバの増設やプログラム改修で対応」

  →IO負荷が原因の場合:「メモリの増設やプログラム改修で対応」

 

本書を読んでもっと詳細を知りたい方は下記の本もなかなか良いです。

[24時間365日] サーバ/インフラを支える技術 ?スケーラビリティ、ハイパフォーマンス、省力運用 (WEB+DB PRESS plusシリーズ)

[24時間365日] サーバ/インフラを支える技術 ?スケーラビリティ、ハイパフォーマンス、省力運用 (WEB+DB PRESS plusシリーズ)

 

 

 

【書評】「なぜ、システム開発は必ずモメるのか? 49のトラブルから学ぶプロジェクト管理術」

良い本に巡り会えたのでご紹介。

なぜ、システム開発は必ずモメるのか?  49のトラブルから学ぶプロジェクト管理術

なぜ、システム開発は必ずモメるのか? 49のトラブルから学ぶプロジェクト管理術

 

 

この手のタイトルは巷に流布してますが、本書は個性あふれるキャラクターの会話形式を取りつつ、ポイントを押さえた内容となっており、「あー、あるある」と共感しながらさくっと読めてしまう素晴らしい本です。

 

机に向かってガッツリと勉強したい!っていうよりも、「システム開発(特に、Water Fall)全体を俯瞰したい!その中でどんなところでつまずくことがあるのか」という点を押さえたい人に向いているかと。

 

特に、IT裁判での事例や標準やベストプラクティスを参照しているのがGood。

裁判では客観的な意見を重要とするので、この手の事例を頭に入れていると、

実務における意思決定のヒントになります。

 

「CHAPTER1 要件定義」と「CHAPTER2 プロジェクト計画と管理」の約100ページまでが特に秀逸。プロジェクトでコケるポイントをよくとらえている。(実際、プロジェクトがデスマーチへと化す可能性があるのはこの点ですからね。)

 

100ページくらいをさらっとみたい方は、本屋で軽く立ち読みする程度で良いかと思いますが、あまり高い本ではないですし、章立てになっており、1章5分くらいで読めるので、隙間時間を活用したいなら購入しても良いのではないでしょうか。

 

Oracle認定Javaプログラマ(OCJ-P) SE 6 1発合格

タイトルの通り、Oracle認定Javaプログラマ(OCJ-P) SE 6 の1発合格方法です。

 

本試験は、Javaプログラマの登竜門の位置づけであり、基本的な内容ばかりです。

 

現在は、Oracle認定Javaプログラマ(OCJ-P)の部分が細分化され、Bronze,Silver,Goldが新設されていますが、複数回テストを受けるのは面倒なので、「Oracle認定Javaプログラマ(OCJ-P) SE 6」の受験をおすすめします。

資格の価値は、 「OCJ-P = Gold SE 7」と考えてもらってOKですので。

 

勉強時間と利用したテキストは下記の通り。

- 勉強時間:25時間

- 使ったテキスト:通称紫本と黒本

SUN教科書 Javaプログラマ(SJC-P) 5.0・6.0両対応(試験番号310-055、310-065)

SUN教科書 Javaプログラマ(SJC-P) 5.0・6.0両対応(試験番号310-055、310-065)

 
徹底攻略Oracle認定JavaプログラマSE 6問題集 [CX-310-065]対応 (ITプロ/ITエンジニアのための徹底攻略)

徹底攻略Oracle認定JavaプログラマSE 6問題集 [CX-310-065]対応 (ITプロ/ITエンジニアのための徹底攻略)

 

 

テストは、多くのプログラムを読まなければならないので、やや疲れます。

人間デバッグ的な問題も多く出題されるので、細かい点までもチェックしなければなりません。一種のSEの性格診断かと思ってしまうほどです笑。

 

テスト問題は、問題集の内容を把握しておけば、問題なく解けます。

問題を覚えるというよりは、どのような観点で出題されるのかといった点を把握しておくことが大切なテストです。

 

 Javaの基本的な部分の復習と体系的な学習を目的にしている方には、おすすめです。

市場価値は全くありませんが、Javaを利用するなら受けてみてはいかがでしょうか。

 

LPIC-3 Core 1発合格勉強方法

今回はLPIC-3 Coreの合格方法です。

 

LPIC-3 Coreは下記の1つだけパスすれば取得できます。

・LPI 301 Core Exam

 

勉強時間と利用したテキストは下記の通り。

- 勉強時間:20時間

- 使ったテキスト:通称あずき本&黒本

Linux教科書 LPIC レベル3

Linux教科書 LPIC レベル3

 
徹底攻略LPI問題集 Level3 [301/302]対応 (ITプロ/ITエンジニアのための徹底攻略)

徹底攻略LPI問題集 Level3 [301/302]対応 (ITプロ/ITエンジニアのための徹底攻略)

 

 

LPIC-3 Core の難易度は、LPIC-2 よりもはるかに難しいです。というより、わからない用語が多過ぎで、テキストもスムーズに進みませんでした。

ですので、ひとつひとつ調べながらの作業が必要になるかと思います。

とはいえ、所詮はテストなので、「問題からポイントを押さえること」を常に意識することが大切です。

 

LPIC-3までくると、そろそろモチベも下がりつつあるかと思いますが、「これを取ったら一応はLinuxの基礎は知ってます」と言えるので、気合いで乗り切ってください。笑

 

LPIC-2 1発合格勉強方法

LPIC-2の1発合格方法の紹介です。

 

LPIC-2を取得するには下記2つの試験をパスする必要があります。

(一度に受験する必要はなく、別々に受験することができます)

・201試験: LPI Level2 Exam 201
・202試験: LPI Level2 Exam 202

 

勉強時間と利用したテキストは下記の通り。

- 勉強時間:40時間(それぞれ20時間)

- 使ったテキスト:通称あずき本&黒本

 

Linux教科書 LPICレベル2 第4版

Linux教科書 LPICレベル2 第4版

 
徹底攻略 LPI問題集 Level2 [Version 3.5]対応 (ITプロ/ITエンジニアのための徹底攻略)

徹底攻略 LPI問題集 Level2 [Version 3.5]対応 (ITプロ/ITエンジニアのための徹底攻略)

 

 

難易度は、LPIC-1と同じくらい。

ただ、まとまった時間を確保できなかったため、結果としてLPIC-1よりも時間を要することになりました。やはり、まとまった時間で短期集中がベストですね。

 

SEとしては、LPIC-2の知識くらいは持っておいた方が良いのではないかと思います。

実際に手を動かすことはない方でも、用語とその意味くらいは理解しておかないとコミュニケーションとれませんからね。

円滑なコミュニケーションを取るには、前提知識は必須です。用語がわからん、ってことになるとその時間がもったいない。前提知識はマナーです。

 

LPICは、レベル2までで終わりに使用かと思ってたのですが、

ただの興味からレベル3も取得することになります。

レベル3のエントリは次回書きます。

 

LPIC-1 1発合格勉強方法

今日のエントリは、LPIC-1です。

 

この試験は、下記の2つをパスする必要があります。

①101試験: LPI Level1 Exam 101

②102試験: LPI Level1 Exam 102

 

合格方法は下記になります。

 

- 勉強時間:30時間(それぞれ15時間)

- 使ったテキスト:通称あずき本&黒本

Linux教科書 LPICレベル1 第4版 (CD-ROM付)

Linux教科書 LPICレベル1 第4版 (CD-ROM付)

 
徹底攻略 LPI問題集 Level1 [Version 3.5]対応 (ITプロ/ITエンジニアのための徹底攻略)

徹底攻略 LPI問題集 Level1 [Version 3.5]対応 (ITプロ/ITエンジニアのための徹底攻略)

 

 

Linuxについては、大学の授業で軽く触れた程度であったため、教科書→問題集の方法を取りました。

 

まずは、あずき本で全体概要を把握します。各章の問題よりも章末問題が◎です。

隅々まで理解しようとするのではなく、「用語に慣れる」イメージでOKです。

 

本格的に取り組むべきは、問題集の黒本。これを完璧にすれば必ず合格できます。

 

実践的なスキルも身につけたい人は、コマンドを叩きながらテキストを進めるとよいかもしれません。私は、手っ取り早く試験をパスしたかったので、机上勉強のみで乗り切りました。

 

SEの第一歩としては受けてみることをお勧めします。

 

 

 

 

オラクルマスターゴールドDBA11g 一発合格勉強方法

今回のエントリは、オラクルマスターゴールドDBA11gの一発合格体験記になります。

 

- 勉強時間:30時間

- 利用したテキスト:通称白本

 シルバーでの的中率の高さに驚き、ゴールドでも利用しました。ゴールドでもものすごい的中率でした笑

 

ゴールドは約800ページという分厚い本であったため、効率を意識し、

いきなり問題から着手し、ほぼ解説を読んで理解する方法をとりました。

 

内容は、オラクルが提供するツールの利用方法であったり、バックアップの取得についてが主になります。

(暗記がメインであったため、シルバーを勉強しているときの方が楽しかったというのが本音です。)

 

暗記メインのテストなので、短期集中で取り組んだほうが良いでしょう。

実際、私も2週間集中※で勉強し合格しました。

※ちょうど仕事が忙しかった時期であったため、夜0時からテキストを開く、という日々でした。

 

「いつやるの?今でしょ!

 

もはや死後になりつつある語ですが、この言葉の威力は凄まじいものがあると思います。

目標を決め、毎日少しでも良いから取り組む、といった姿勢はやっぱり大切ですね。