Web制作
【新人ディレクター向け vol.7】Web制作におけるセキュリティの基礎知識(前編)
こんにちは。ディレクターのジャックです。
入社してようやく3ヶ月が経ちました。月日が経つというのはあっという間ですね。
最近は、クライアント様との打ち合わせにもよく参加させていただいております。
その際に少なからず話題に上がるのは、技術の話。
たとえば、「システムのセキュリティを担保するためのサーバ構成は?」とか「このキャンペーンサイトの負荷対策ってどうしたら良い?」とかですね。
クライアント様との打ち合わせで技術的な話になった際に、「持ち帰ってエンジニアに確認します!」みたいなことにならないように、必要最低限の技術知識はディレクターにも必要になってきている感じがします。
そこで、今回はWebサイト構築では必要不可欠な負荷対策について簡単にお話したいと思います。
本日お話したいのは、memcached (memory cache daemon) についてです。
memcachedとは、データとオブジェクトをメモリ内にキャッシュするサーバで、データベースからのread回数を減少させる際に利用します。
特に、データベースを用いたWebサイトを高速化するためによく用いられます。
さて、早速インストールしてみましょう。
今回のインストール環境は「Ubuntu 14.04」です。
Ubuntuのインストール方法や設定については、今回の記事では割愛させていただきます。
$ sudo apt-get install memcached Reading package lists... Done Building dependency tree Reading state information... Done Suggested packages: libcache-memcached-perl libmemcached The following NEW packages will be installed: memcached 0 upgraded, 1 newly installed, 0 to remove and 15 not upgraded. Need to get 66.7 kB of archives. After this operation, 229 kB of additional disk space will be used. Get:1 http://archive.ubuntu.com/ubuntu/ utopic/main memcached amd64 1.4.14-0ubuntu9 [66.7 kB] Fetched 66.7 kB in 6s (10.2 kB/s) Selecting previously unselected package memcached. (Reading database ... 67907 files and directories currently installed.) Preparing to unpack .../memcached_1.4.14-0ubuntu9_amd64.deb ... Unpacking memcached (1.4.14-0ubuntu9) ... Processing triggers for man-db (2.7.0.2-2) ... Processing triggers for ureadahead (0.100.0-16) ...
serviceコマンドを利用することで、現在起動中のサービスを確認することができます。memcachedが起動されていることを確認しましょう。
$ service --status-all | grep memcached [ ? ] cryptdisks-early [ ? ] killprocs [ + ] memcached [ ? ] ondemand [ ? ] open-vm-tools [ ? ] pppd-dns [ ? ] rc.local [ ? ] sendsigs [ ? ] udev-finish [ ? ] umountfs [ ? ] umountnfs.sh [ ? ] umountroot [ ? ] virtualbox-guest-x11
続いて、設定ファイルを確認・変更してみましょう。
デフォルトの設定を利用するだけなら、特に編集作業を行う必要はありません。
$ sudo vi /etc/memcached.conf
実際の設定ファイルは下記となります。
# memcached default config file # 2003 - Jay Bonci <jaybonci@debian.org> # This configuration file is read by the start-memcached script provided as # part of the Debian GNU/Linux distribution. # Run memcached as a daemon. This command is implied, and is not needed for the # daemon to run. See the README.Debian that comes with this package for more # information. -d # Log memcached's output to /var/log/memcached logfile /var/log/memcached.log # Be verbose # -v # Be even more verbose (print client commands as well) # -vv # Start with a cap of 64 megs of memory. It's reasonable, and the daemon default # Note that the daemon will grow to this size, but does not start out holding this much # memory -m 64 # Default connection port is 11211 -p 11211 # Run the daemon as root. The start-memcached will default to running as root if no # -u command is present in this config file -u memcache # Specify which IP address to listen on. The default is to listen on all IP addresses # This parameter is one of the only security measures that memcached has, so make sure # it's listening on a firewalled interface. -l 127.0.0.1 # Limit the number of simultaneous incoming connections. The daemon default is 1024 # -c 1024 # Lock down all paged memory. Consult with the README and homepage before you do this # -k # Return error when memory is exhausted (rather than removing items) # -M # Maximize core file limit # -r
設定ファイルの変更をしたら、memcachedの再起動を行って下さい。
$ sudo service memcached restart
さあ、準備が整いましたね。実際に利用してみましょう。
telnetからmemcachedに接続し、データのread/write処理をします。
下記コマンドを入力して接続してみます。接続後、statsコマンドを入力すると接続ステータス情報が表示されます。
$ telnet 127.0.0.1 11211 Trying 127.0.0.1... Connected to 127.0.0.1. Escape character is '^]'. stats STAT pid 11852 STAT uptime 582 STAT time 1435156147 STAT version 1.4.14 (Ubuntu) STAT libevent 2.0.21-stable STAT pointer_size 64 STAT rusage_user 0.017610 STAT rusage_system 0.017610 STAT curr_connections 5 STAT total_connections 8 STAT connection_structures 6 STAT reserved_fds 20 STAT cmd_get 1 STAT cmd_set 1 STAT cmd_flush 0 STAT cmd_touch 0 STAT get_hits 1 STAT get_misses 0 STAT delete_misses 0 STAT delete_hits 0 STAT incr_misses 0 STAT incr_hits 0 STAT decr_misses 0 STAT decr_hits 0 STAT cas_misses 0 STAT cas_hits 0 STAT cas_badval 0 STAT touch_hits 0 STAT touch_misses 0 STAT auth_cmds 0 STAT auth_errors 0 STAT bytes_read 119 STAT bytes_written 110 STAT limit_maxbytes 67108864 STAT accepting_conns 1 STAT listen_disabled_num 0 STAT threads 4 STAT conn_yields 0 STAT hash_power_level 16 STAT hash_bytes 524288 STAT hash_is_expanding 0 STAT expired_unfetched 0 STAT evicted_unfetched 0 STAT bytes 71 STAT curr_items 1 STAT total_items 1 STAT evictions 0 STAT reclaimed 0 END
接続成功ですね。おめでとうございます!
memcachedにデータを保存する際は、setコマンドを利用します。
setコマンドのフォーマットは下記となります。
set [キー] [データ圧縮フラグ] [キャッシュの有効期限] [サイズ] <改行> [格納する値]
例えば、「lig」というキーに対して「jack」という「4バイト」の文字列を「非圧縮」で「600秒間(10分間)」保存する際は、下記コマンドを実行します。
set lig 0 600 4 jack STORED
パラメータの対応表は下記となります。
説明 | |
---|---|
キー | 格納するデータのキー |
データ圧縮フラグ | データの圧縮指定フラグ(1:zip圧縮/0:非圧縮) |
キャッシュの有効期限 | UNIXタイムスタンプ形式か現在からの秒数を指定 |
サイズ | 格納するデータ長をバイト単位で指定 |
memcachedへのデータ保存に成功したので、次はデータを取り出す作業です。
データを取り出す際には、getコマンドを利用します。
getコマンドのフォーマットは下記となります。
set [キー]
先ほど保存した、「lig」というキーの値を取得してみましょう。
get lig VALUE lig 0 4 jack END
「jack」という文字列が返却されましたね。成功です。
いかがでしたか?
今回はmemcachedの簡単な使い方をご紹介させていただきました。
次回は、LAMP環境下での利用方法をご紹介できればと思います。