S3・CloudFront

S3とは

AWSの中核にあるストレージサービス。


ストレージとは

訳すと貯蔵、保管。
データを保管・保存する場所のこと。


ストレージサービスとは

インターネット上で、ファイル保管用のスペースにデータを保存することができるサービス。
インターネット上にデータを保存できる場所があるってことですかね?




CloudFront

AWSが提供する高速・高パフォーマンスなコンテンツ配信サービス。


CloudFrontの仕組み

オリジンサーバ:配信するオリジナルのファイルを置いておくサーバ。
エッジサーバ:ユーザーへの配信を行うサーバ。


ユーザーをCloudFrontドメインへアクセスさせて、CloudFrontのエッジサーバを経由した配信を行えるようになる。


ユーザーからリクエストを受けたエッジサーバーは、要求されたファイルがキャッシュされているか確認する。

キャッシュされてない
→オリジンサーバからファイルをとって、そのファイルをユーザーに配信する。
ファイルをキャッシュする。

キャッシュされている
→オリジンサーバには見に行かず、エッジサーバでキャッシュされたファイルを配信する。

キャッシュ

キャッシュとは

よく利用するデータを蓄積させて、データ処理を速くする仕組み。

詳しく言うと、
一度開いたwebページのデータを、通信経路のどこかに保存しておいて、次に同じページを開くときに速く表示してくれる。

一度アクセスしたページはURLで覚えられている。

Apache・nginx

Apache

webサーバーのソフト。
コンピュータにApacheを入れると、そのコンピュータがwebサーバーをしての仕事ができるようになる。

webサーバー

webサーバーとは、ブラウザからページを調べた時に、そのページの情報を返してくれるサーバーのことを指す。
ただ、webサーバーは、本来はただのコンピュータのため、私たちがいつも使っているパソコンと変わらない。
普通のコンピュータにApacheやnginxなどのwebサーバーソフトを入れることによって、webサーバとなる。



nginx

エンジンエックス。
webサーバの一つ。
Apacheは大量の処理ができないため、大量のアクセスを処理できるようなwebサーバが欲しくて作られた。
シンプルな作りになっているため、自分で処理せずに他に割り振ることで、メモリ消費が比較的少ない。

GZIP

GZIPとは

データ圧縮方法の一つ。

詳しく言うと、
ブラウザに表示するためのデータ転送の時に、その内容を圧縮することで、転送量を減らして表示速度を高める手法。

簡単に言うと、
webページのサーバとユーザーのパソコン間で通信しているデータサイズを少なくすることで、速度を速くしている。




圧縮方法

テキストファイル内の似た文字列を見つけて、一時的にそれを置換することで、全体のファイルサイズを縮小している。
HTML・CSSは、タグなどの似た文字列を繰り返すため、GZIP圧縮に適している。

レンダリング

レンダリングとは

文字のデータを読み取って、実際の画面に映る画像や映像などに変換すること。
文字データが読み取られ、レンダリングされた結果、ブラウザ上に画像がでる。

レンダリング処理の回数を減らす = 最適化につながる。らしい。




JavaScriptを下にすることでなぜ速くなるのか

jsファイルは読み込んだ後、スクリプトを解析している間は他のファイルの読み込みをブロックする。
そのため、jsをページの上に指定すると、このブロックでロード時間が長くなる。

→画面の描画に影響の出ないjsはbodyの中の下に書くべし。

ローカル環境構築でのつまづき

コンテナ起動でつまづく

docker-compose -f ./local-docker-compose.yml up -dで起動させようとすると、

ERROR: for proxy  Cannot start service proxy: oci runtime error: container_linux.go:247: starting container process caused "process_linux.go:359: container init caused \"rootfs_linux.go:54: mounting \\\"/Users/proxy/nginx.conf\\\" to rootfs \\\"/mnt/sda1/var/lib/docker/aufs/mnt/\\\" at \\\"/mnt/sda1/var/lib/docker/aufs/mnt//etc/nginx/nginx.conf\\\" caused \\\"not a directory\\\"\""
: Are you trying to mount a directory onto a file (or vice-versa)? Check if the specified host path exists and is the expected type

proxyにエラーがでて起動しない。



解決

一旦マシーンを止める。

docker-machine stop default


もう一回マシーンを起動。

docker-machine start default


再チャレ。

docker-compose -f ./local-docker-compose.yml up -d

動いた。

もともと違うコンテナを起動してたから?
でもそのあとにそのコンテナを起動させたら動いた。んん?




リモートVMに接続できない

docker logs -f zo-internからのデバッグをしようとすると、Failed to connect to remote VM.
あぁ。
あれやこれや試したもののわからず、次の日にもう一回やったらなんかエラー出なくなったから接続できたっぽい。
あるある。




アクセスしようとするとエラー

500エラー。
Tableが存在しないとのこと。
もう一回ダンプを流し込んだらできた。

オフセットとは

オフセットとは

基準点からの距離で位置を表現したもの。
基準点からどのくらいズレているかを表したもの。



ページングのオフセット

offset = 1ページあたりの件数 ×(現在のページ - 1)