Docker for Mac と Docker ToolBoxの違いって?
時間がないので超雑に調べる
Docker ToolBox
仮想VMでDocker用のホストを立ち上げ、Docker環境を簡単に利用できるようにしたツール。
- 実際に入るもの
- VirtalBox(アプリケーション -> Dockerフォルダではなく、VirtualBoxとして入ります) -Dockerホストを仮想環境で動かすため
- docker-machine
- Mac上からDocker用ホストを管理するためのコマンドラインツール
- コマンドを使ってVirtualBox VM である default ホストをプロビジョニングできる
- Docker用ホストの起動/停止/作成やssh、scpでのアクセスができるようになります
- docker
- docker-compose
- アプリケーションを複数のDockerコンテナを使って構成したい場合に便利なツール
- Dockerを操作するために必要なシェルもろもろ
実際homebrewでインストールしてみたらdocker,docker-machineのコマンドが普通に叩けた
Docker for Mac
- Dockerホストの軌道にVirtualBoxではなく、HyperKitというMacネイティブの仮想化環境を利用している。
- /Applicationsにインストールされる。
- Docker社が公開したオープンソースの軽量な仮想化ツール「Hyperkit」で動く(VirtualBoxは使わない)
- Docker for Mac アプリケーションは、 docker-machine は使わず直接VMを作成し、管理する
- インストール時に /usr/local/bin に dockerとdocker-composeにシンボリックリンクが貼られる
結局どうなの
要するに、Docker toolboxはVMを利用していて、 Docker for Mac は仮想化ツールで動いている? 若干わかったような気はする。
PostgreSQL is なに?
概要
オープンソースの関係データベース管理システム (RDBMS)である。
同じオープンソースのRDBMSであるMySQLと比較してなにがいいのかを調べてみる。
それぞれの特徴を一言でまとめると
- RDBMSに求められるものが過不足なく搭載されているのはPostgreSQL。
- 大規模なシステムでスケールさせる上で性能を限界まで引き出せるのはMySQL
DML(データ操作言語)を比較
select文
- 大量データのソートが必要なSELECT文だとMySQLは遅くなる
- PostgreSQLと比較するとMySQLはソートのアルゴリズムがそれほど優れていない
- ただ、新規10件、100件のデータ(TOP n レコード)を取得するようなものは早い
update文
- PostgreSQLはUPDATEする際には変更前の行に削除フラグのようなものを立てたうえで、変更後のデータを持った新しい行を追加している
- いっぽうでMySQLは、UPDATE対象となる行の値を直接上書きしているのでUPDATEはMySQLの方が早い
テーブル結合(JOIN)
- MySQLはネステッドループ結合しかサポートしていない。複雑なアルゴリズムはサポートしない思想のため
- PostgreSQLはネステッドループ結合, ハッシュ結合, ソートマージ結合全てをサポートしている
トランザクション処理の分離レベル
- MySQLはデフォルトがREPEATABLE-READとなっている
- PostgreSQLはREAD-COMMITTEDがデフォルト
- ファントムリードやノンリピータブルが起こる可能性はある
- REPEATABLE-READに変更したとしてもネストキーロックとは違う方法でファントムリードを防いでいるのでロック競合が起こりづらい
レプリケーションの論理型と物理型
- MySQLの場合、レプリケーションは論理型または物理型のいずれかを選べるようになっている(デフォルトは物理型)
- PostgreSQLは物理型のみ
PostgreSQLにしかないもの
- パラレルクエリがある。処理速度をより速くするために、複数のCPUを活用してクエリを実行するもの
- サードパーティのOSSツールであるPostGISがある点でPostgreSQLが選ばれたりする。MySQLのものより機能が豊富
所感
PostgreSQLについて名前しかわからないぐらいなので調べ他のですが、 そもそもDBというものの仕組みを詳しく知らなかったので、知識不足を実感。 もっと知っていればいい具合に比較できたかと思う。 記事のまとめのようになってしまったが、DBの知識は多くつけられたと思う。
参考記事: PostgreSQLとMySQL、使うならどっち? データベース専門家が8つの視点で徹底比較! - エンジニアHub|若手Webエンジニアのキャリアを考える!
CORS is なに?
ざっくり概要
オリジン間リソース共有(Cross-Origin Resource Sharing)といい、
異なるオリジンサーバーのリソースにアクセスできるようにする仕組みのことである。
なんで必要なの
通常、異なるオリジンサーバーの情報にアクセスしようとすると
Same-Origin Policy(日本語では同一生成元ポリシー)が適用され、エラーが起こり通信が拒否される。
しかし信頼関係のあるサーバー同士で同じリソースを使用したい場合も適用されてしまうので、CORSが利用される。
CORSの利用
ブラウザがリクエストヘッダ(Access-Control-Allow-Origin)にアクセス元の情報を追加する。
アクセスを受けるWEBサーバーは、HTTPレスポンスヘッダにアクセスした側の情報を追加する。
そしてブラウザのアクセスが許可され、表示される。
(多分すごく簡潔にいうとこれで良いと思ったのですが、間違っている可能性あり。)
参考:
memcached is なに?
memcachedとは分散型メモリキャッシュシステムのことである
分散型メモリキャッシュシステムとは
数十~数千台のサーバーに搭載される物理メモリを連携させて、巨大な論理メモリとして利用する技術である。
なんのために作られたのか?
webアプリケーションの多くは、RDBMS(Relational DataBase Management System)にデータを格納し、サーバーからデータを引き出しブラウザに表示させている。
しかしアクセスが集中すると負荷が上がりレスポンスが悪化、WEBサイトの表示遅延などの影響が出てしまう。
これに対しmemcachedはデータベースの問い合わせ結果を一時的にキャッシュし、データベースのアクセス回数を減らし高速化や負荷軽減をする。
特徴
- 単純なテキストプロトコル
- データは全てメモリ上にのみ保存される
- 揮発性のKVS
- 分散はクライアント側で制御される
参考:
DHCP is なに?
DHCP(Dynamic Host Configuration Protocol)とは、LANなどの閉じたネットワーク内で、自動的にコンピューターにIPを割り当てる仕組みのこと。
DHCPサーバーを構築すれば新規端末を追加した際にIPアドレスを設定しなくても、ネットワークに接続すれば通信ができるようになる。
DHCPは、TCP/IPのあプリケーション層のプロトコルであり、トランスポート層はUDPを用いる。
ポート番号として、DHCPサーバーに67,クライアント用に68を利用する。
実際にどのような動作をするのかを以下にまとめる
①DHCPDISCOVER
クライアントは、ネットワークに接続した時点でIPアドレスを要求するDHCPDISCOVERパケットをDHCPサーバーに送る。
この時点ではDHCPサーバーのIPアドレスも知らないので、IPヘッダの送信元のIPアドレスを0.0.0.0,宛先IPアドレスを255.255.255.255(ブロードキャストアドレス)とする。
フレームの宛先MACアドレスもブロードキャストアドレスで送信する。
②DHCPOFFER
ブロードキャストでパケットを受信したDHCPサーバーはそのPCが属するサブネットの中で未使用のIPアドレスを選択し、DHCPOFFERを返送する。
この時、複数のDHCPサーバがネットワーク上にある場合、OFFERを複数受信することになる。
③DHCPREQUEST
クライアントはこれを受け取るとDHCPREQUESTをブロードキャストする。
これで複数のDHCPサーバからOFFERを受信した場合にも、全てのサーバに"応答が届く。なお、DHCPREQUESTにはどのサーバーからのDHCPOFFERを選択したのかが設定される。
④DHCPACK
DHCPサーバーはDHCPREQUESTを受け取ったら、自身が選択されたことを同じユーザーIPアドレスが返送されたことで確認する。そして割り当てるIPアドレスやデフォルトゲートウェイのIPアドレスなどをDHCPACKにより返送する。DHCPREQUESTが正しくなければPANKを返送する。
PACKを正常に受信したクライアントは、指定されたユーザIPアドレスを自分のIPアドレスとして保存し、以降はこのIPアドレスで通信を行うように設定するPNAKが返信された時は、再度DISCOVERの送信からやり直される。
なお、クライアントはIPアドレスが不要になった時点で、IPアドレス開放パケットをDHCPサーバに送ることでIPアドレスを返却する。
DHCPサーバーは自分で構築したことはなく、通常の業務ではあまり使用しない知識なのですが理解が曖昧だったので調べてかいてみました。