クラウドってちゃんと説明できますか?
クラウドってなんだろう
現在のテクノロジーの進歩について、クラウドというバズワードなしに語ることはできません。なんとなく、クラウドって理解しているけれど、はっきり説明してくださいって言われたら、説明するの難しくないですか。私も自信をもって、説明できなかったので、調べてみました。そうすると結構、クラウドの定義って曖昧なんですね。
よくオンプレミス(企業などが情報システムを自社で保有し、自社の設備において運用すること)の対義語として、クラウドという言葉がよく用いられます。しかし本当にオンプレミスの対義語は厳密にクラウドなのでしょうか。レンタルサーバについて考えてみます。レンタルサーバというサービスが開始された当時(2000年以前)、クラウドという言葉は存在していませんでした。クラウドという言葉は2006年以降に使われ始めた言葉です。つまりクラウドは、「クラウドサービスは、従来は利用者が手元のコンピュータで利用していたデータやソフトウェアを、ネットワーク経由で、サービスとして利用者に提供するものです。」
という説明は非常に不十分です。オンプレミスの対義語はクラウドではありません。クラウドは仮想化技術が用いられているかどうかが非常に重要なポイントでしょう。
クラウドは端的にいうと「仮想化技術が用いられているサーバ群」でクラウドサービスは「仮想化技術が用いられているサーバ群を利用し、オンデマンドで利用できるサービス」と定義できると思います。
仮想化ってなんだろう
クラウドは仮想化技術なしに語れません。それでは仮想化とは一体何なのでしょうか。
仮想化とは端的にいうと「一つの物理サーバを一つのOSが占有するのではなく、複数のOSで1つの物理サーバを共有すること」です。このことさえ知っていれば、仮想化のメリット、つまりクラウドのメリットが理解できます。
メリット1:余っているハードウェアコンポーネントをフルに活用し、コスト削減
仮想化されたサーバ(仮想化マシン)は複数のOSに対して、サーバーの容量を割り当てることができます。つまり物理サーバの購入時のイニシャルコストやサーバが消費する電気料金、設置スペースなどラニングコストが削減され、コストダウンに繋がります。
メリット2:物理サーバとOSの異差を吸収でき、保守性が高まる
仮想化されていない物理サーバとOSは密接に紐付いており、新たな物理サーバに変更しようとしても、OSが物理サーバにサポートされていない可能性があり、変更に制限がありました。しかし、仮想化マシンとOSとの間に制約はなく、自由に物理サーバを変更することが可能です。
メリット3:高いか可用性が災害対策につながる
仮想化マシンの実態はファイル群です。つまり仮想化マシンをコピーして、物理サーバを変更したり、一時的な仮想マシンの状態を保存したり(スナップショット)も可能です。
仮想化に関する技術は現在勉強中です。下記の書籍を参考にし、現在勉強を進めています。詳しい仮想化に関する内容は別途の記事でまとめたいと思います。
DB設計のデータモデリングに関する備忘録
当ブログでは技術関係の記事は書かない予定でしたが、学んだ内容を自分でアウトプットしたほうが、知識の定着が良いのでたまに技術よりの記事も書きます。学んだ内容をわかりやすく解説しようとは思っていません。あくまで学んだ知識の備忘録としてまとめています。それ故、記事のタイトルもてきとーです。
現在、学んでいる本はこちら。
わかりやすすぎます。三回は読みます、はい。
プロセス中心アプローチ
成果物:DFD(Data Flow Diagram)
データの一元管理ができていないので、DB設計が難しい
データ中心アプローチ
データを先に考え、1事象を1か所に管理する方法。DB設計ではこちらを利用すべき。
スキーマ
「オブジェクトの集合」または「データベースの構造」
DB設計フロー
概念設計→論理設計→物理設計の手順で行う。概念設計、論理設計の一連の流れをデータモデリングと定義する。
概念設計:業務分析を行い、システムに依存しない正規化されたデータモデルを作成
論理設計:アプリケーションの性能要求の考慮し、必要があればデータモデルの非正規化を行う。また、データベースの論理構造や索引(インデックス)を決定する。
物理設計:システム要件に合わせて、物理的な検討をする。
データモデリング手法
トップダウンアプローチ:経営層の方々と打ち合わせをしながら業務分析を行い、エンティティを抽出し、ER図を作成
ボトムアップアプローチ:実際の実務ではトップダウンアプローチの成果物である概略ER図(リレーションシップが洗い出されている)を用いて、属性の洗い出しを正規化を行いながら進める。改修案件などの場合は現在使用しているシステムの画面や帳簿などを参考する。
トップダウンアプローチ
1.エンティティを洗い出す
・業務分析資料やエンドユーザの説明の中から、名詞を洗い出す。
・洗い出した名詞を分類し、エンティティとすべきか検討する。
2.リレーションシップを洗い出す
・エンティティで文章を作る
・カーディナリティ(基数)を定義する
・オプショナリティを定義する。
3.属性を洗い出す
4.洗い出した属性の検証
・一つのオカレンスに対して複数値を持つ場合は、別途新しいエンティティを定義
・他の値から導き出せる属性は削除する
4.オカレンスを識別する属性または属性の組み合わせを見つける
・識別子(主キー)は「一意である」、「NULLを持たない」、「永続性がある」の三つの性質を持たなければならない
ボトムアップアプローチ
- データを洗い出し、データ項目を定義する(未正規系)
- データの正規化を行う
- 概念データモデル(概念ER図)を作成する
正規化
正規化とは、データの重複を排除し、「1つの事実は1箇所にのみ存在させる」というデータの一元化を実現する方法。第一正規化から第五正規化までの5つの状態に分けられるが、一般的に第三正規化までしか行わない。
第一正規化:繰り返し項目の排除
第二正規化:主キーの一部の属性に従属する属性の分離(主キーが複数の属性の組み合わせになっている場合)
第三正規化:主キー以外の属性に従属する属性の分離
ネットワークと暗号化技術に関する備忘録
こちらの記事の続きです。はい。
スイッチの仕組み
スイッチ:MACアドレス(物理アドレス)に基づいてデータ転送を行うネットワーク機器。MACアドレステーブルを保持する。
MACアドレス(物理アドレス):48ビットのLANポートのアドレス。原則として変更できない。上位24ビットはベンダーコードで、下位24ビットはベンダーが製造したシリアル番号
ARP(Address Resolution Protocol):IPアドレスに対応するMACアドレスを求めるプロトコル
ルータの仕組み
ルータ:ネットワークの相互接続を行い、ネットワーク間のデータの転送を行う。
ルーティング:最適なルートを学習し、データの転送を行うこと。最適ルートはルーティングテーブルに保存される。
ブロードバンドルータ:家庭向けのインターネット接続用ルータ。インターネットに接続する役割とスイッチの機能を持つ。
共通鍵暗号方式
暗号化と復号化を同じ鍵を用いて行う。暗号鍵の配送が問題で、配送時に暗号鍵が第三者に知られてしまうと暗号化する意味がなくなる。仕組みが簡単で鍵の生成負荷は少ない。
公開鍵暗号方式
暗号化と復号化に用いる鍵を分ける。暗号化するための暗号鍵を公開鍵としてデータ送信者に伝える。復号鍵は第三者に知られないよう、鍵生成者(データ受信者)のみ知っている。データ送信者は暗号鍵を用い、データを暗号化し、送信する。データ受信者は自分だけが知っている復号鍵を用い、データを平文化する。公開鍵から復号鍵の解読ができないわけではないので、セキュリティ強度を高めるために鍵の生成負荷が大きくなる。
デジタル署名
公開鍵暗号方式を利用し、データが改ざんされていないこと、データの送信者を確認するために用いられる仕組み。送信するデータから計算したハッシュ値を送信者の秘密鍵で暗号化したもの。受信者は公開鍵でデジタル署名を復号できれば、データ送信者が対応するペアの公開鍵を持っていることとデータが改ざんされていないことを保証できる。
証明書
デジタル署名も公開鍵暗号方式を用いたデータのやり取りも公開鍵が本物であることが前提。公開鍵が本物であることを保証するのが証明書である。証明書は認証局によって以下の手順を踏み、生成してもらう。
1.公開鍵と秘密鍵のペアを作成
2.公開鍵と所有者情報を認証局に送り、証明書の発行申請
3.認証局が審査を行い、証明書を生成。認証局が発行した証明書を認証局がデジタル署名し、証明書を申請した組織に発行。
4.利用する組織は受け取った証明書を利用するサーバにインストール
SSL(Secure Socket Layer)
証明書を用いた暗号通信。共通鍵暗号方式を取り入れることによって、高速な処理を可能にする。
1.証明書を持つサーバーの公開鍵をクライアント端末が取得。
2.公開鍵をクライアント端末が生成した共通鍵を暗号化し、サーバに配送する。
3.暗号化された共通鍵を秘密鍵で復号化し、以後は共通鍵を用いて暗号化通信を行う。
フレームワークというやつが嫌い
結構どうでもいい話だけど、普段思っていることを書いてみる。
コンサルティングファームなどではよく用いられているけど、僕はフレームワークっていうやつがあんまり好きじゃない。なんでかと考えたときに、フレームワークはただのツールなのに、フレームワークを使うこと自体が目的化している人、フレームワークを使うだけで満足している人が多くいる気がするから。
フレームワークを使う本当の目的は、自分の考えの抜け漏れを無くすことや新たな視点を得ることにあるはずだ。だから、フレームワークを使うことが目的化してしまっている人をみるとすごく残念に感じる。フレームワークの利用に限らず、手段が目的化している例ってたくさんあるけどね。例えば、「起業」にしたってそう。起業は自分が手に入れたい生活や成し遂げたい夢があって、それを達成するための手段のはずなのに、「起業」すること自体が目的化してしまっている人がたくさんいる、いや、もう少し厳密にいうと、僕の周りにはたくさんいた気がする。でもそういう人たちって、物事の本質が見れていないので、失敗しちゃうんだろうなーって思う。
結局、僕は薄っぺらいミーハーな人が好きじゃないんだと思う。こんなしょうもないことを考えて、フレームワークを使わないっていう判断をしている自分も超薄っぺらいけどね。
今後、実際に事業戦略を考えていきたいと思っている。だから、こんなくだらない理由でフレームワークを使うことを避けるのではなく、どんどん覚えて積極的に利用していこうと思う。
ネットワークの設定に関する備忘録
エンジニアをやっていて、非常に幸せだと思うのは、どれだけ学んでも知らないことがたくさんあるということです。知識欲の旺盛な人にエンジニアという職業をおすすめしたいです。逆に知識欲の少ない人はエンジニアにならない方がいいです。知識の量が自分の市場価値と直結してきますから。
私の職業はアプリケーションエンジニアです。リファレンスがあれば、ある程度のものが作れるぐらいのスキルはあります。しかし、ネットワークに関する知識が非常に乏しいので勉強中です。
せっかくなので、現在利用している書籍の備忘録として、自分が知らなくて、新たに学んだことを簡単にまとめます。この書籍は本当にわかりやすいです。
ネットワーク
LAN:Local Area Network
WAN:Wide Area Network
ネットワークアーキテクチャ
- アプリケーション層
- トランスポート層
- インターネット層
- ネットワークインターフェース層
IPアドレス
IPアドレス(32ビット) = ネットワークアドレス + ホストアドレス
現在はネットワークアドレスとホストアドレスを区切るために、クラスフルアドレスは用いられておらず、区切れが柔軟に設定できるサブネットマスクが用いられれてる。(アドレスの無駄をなくすため)
ネットワークに接続するとは「ケーブルなどを用いて物理的に接続している」ことと、「IPアドレスを設定する」ことの二つの条件を満たすことをいう。
NAT:Network Address Translation
閉じたネットワーク内のプライベートアドレスをグローバルアドレスに変換する仕組み。変換後のアドレスとプライベートアドレスを保持するテーブルによって参照。NATの仕組みがないとインターネットから通信先のホストが判別できない。
DNS:Domain Name Service
電話帳の仕組み。DNSサーバーはリソースレコードと呼ばれる6つのタイプのレコードを持つ。nslookupコマンドでリソースレコードを参照できる。
DNSラウンドロビン:負荷分散の仕組み。単純に複数台のWEBサーバーに順番にアクセスを分散させる。サーバがダウンしても検知できなかったり、効率的な負荷分散が実現できないので、現在はロードバランサーを用いるのが主流。
ポート番号
アプリケーションを選別する番号。ウェルノウンポート、登録済みポート、ダイナミック/プライベートポートからなる。ポート数は全部で0~65535。複数タブでWEBサイトを表示できるのはダイナミック/プライベートポートがたくさんあるからである。
「ポートを開ける」とはインターネット側から始めた開始されてた通信を、家庭内ネットワークの特定PCのアプリケーションへと転送できるようにすることを指す。「ポートを解放する」、「ポートフォワーディング」、「ポートマッピング」、「ポート転送」とも表現する。
TCP:Transmission Control Protocol
適切なアプリケーションへデータを受け渡すためのプロトコル。まず、3ウェイハンドシェイクという手法を用い、TCPコネクションを確立する。コネクションを切断するときにも同じ手法を用いる。また、TCPでは以下の三つの制御機能を駆使して、正確かつ効率的にデータを通信する。
- ウィンドウ制御:TCPヘッダあるウィンドウ情報を元に、どのくらいのTCPセグメントを一度に送信できるか制御する。
- 再送制御:失われたTCPセグメントを再送する仕組み
- 輻輳(ふくそう)制御:ネットワークが混雑しているときに、一度に送信するTCPセグメントを調節する仕組み
UDP:User Datagram Protocol
TCPと同じく、適切なアプリケーションへデータを受け渡すためのプロトコル。TCPよりヘッダ情報が少ないため、通信効率が良く、コネクションも確立しないので、複数の相手にデータを送信することが可能。IP電話やスカイプなどで利用されている。
デフォルトゲートウェイ
デフォルトゲートウェイはルーターで、LAN側のIPアドレスを設定する。この設定を間違えるの違うネットワークへの接続ができなくなる。
VRRP:Virtual Router Redundancy Protocol
ルータがダウンしたときに、自動的に別のルータに切り替える仕組み。VRRPでは、複数のルータをまとめて、仮想ルータとし、この仮想ルータのIPアドレスをホストに設定する。
DHCP:Dynamic Host Cofiguration Protocol
TCP/IPの設定を自動化する仕組み。DHCPを利用するためには、DHCPサーバが必要。DHCPは以下の四つのプロセスによって、自動的にTCP/IPを設定する。
- DHCPDISCOVER:DHCPサーバを探し出すため、クライアント端末はブロードキャストでDHCPDISCOVERを送信する。
- DHCPPOFFER:DHCPDISCOVERを受け取ったDHCPサーバはクライアント端末にDHCPPOFFERを返す。ここに配布可能なIPアドレスなどの情報が含まれている。
- DHCPREQUEST:DHCPPOFFERを受け取った端末はDHCPREQUESTをブロードキャストして、実際のIPアドレスを要求する。ブロードキャストしているのは、複数のDHCPサーバがあることを考慮するため。
- DHCPACK:DHCPサーバがクライアント端末に対してTCP/IP情報を利用することを了承する。
ネットワークトラブルの原因を調べる方法
ネットワークトラブルの切り分けは、「ユーザーに近い部分」から見ていく。
- LANケーブルが正しく接続されているか確認
- ルータ、スイッチなどのネットワーク機器に電源が入っているか確認
- PCのTCP/IP設定が正しいか確認:ipconfigコマンド
- デフォルトゲートウェイと通信できることを確認:pingコマンド
- DNSサーバによる名前解決ができるか確認:nslookupコマンド
- インターネット上の特定のサーバと通信できるか確認:ping,tracertコマンド
- 利用しているアプリケーションの設定が正しいか確認する