Varnish Cache로 캐시가 있는 지도 서버를 만들어 봤습니다.
13064 단어 CacheVarnishOpenMapTiles
개시하다
길거리 지도를 개방한 온라인 회의State of the Map Japan 2020에서 Georepublic의 송택 씨의 발표를 보았습니다. Open Street Map으로 국내를 대상으로 하는 지도 발표 서버의 캐시 서버로Varnish Cache를 사용하는 것을 알았습니다. 저도 만져보고 싶습니다.다음은 그 총결산이다.
하고 싶은 거.
지도는 백엔드에서 OpenMapTiles를 사용하여 발송됩니다.
Varnish Cache에서 타일의 이미지 (raster) 데이터를 캐시하고 싶기 때문에, 프론트 데스크톱에서 Nginx를 설정합니다. 이미지 (raster) 에 대한 요청이라면 캐시 서버에 요청을 건너뛰십시오.vector에 대한 요청이라면 OpenMapTiles에 직접 요청을 보냅니다.User --- Nginx(80) --- (raster) varnish(6081) ---- OpenMapTiles(8080)
|
---(vector)-------------------- OpenMapTiles(8080)
컨디션 Platform: GCP Compute Engine
マシンタイプ: n2-standard-4(vCPU x 4、メモリ 16 GB)
イメージ: ubuntu-minimal-1804-bionic-v20200131 (Ubuntu v.18)
ディスクサイズ: 110 GB (HHD)
절차.
Docker, docker-compose의 Install
참고여기 기사..curl https://get.docker.com | sh
usermod -aG docker $USER
systemctl start docker
systemctl enable docker
# docker-compose latest: 1.27.4
curl -L https://github.com/docker/compose/releases/download/1.27.4/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
# confirm docker, docker-compose
docker -v
# result like: Docker version 19.03.8, build afacb8b7f0
docker-compose -v
# result like: docker-compose version 1.27.4, build 8d51620a
OpenMapTiles 설치 및 Tile 만들기
OpenMapTiles는 지도의 타일로 만들어져 편지를 배달할 수 있는 편리한 도구로 이번에는 이것을 사용한다.git clone https://github.com/openmaptiles/openmaptiles.git
cd openmaptiles
# ZoomレベルをMin0, Max15にしたかったので.envを編集
vi .env
# modify MIN_ZOOM, MAX_ZOOM as
# MIN_ZOOM=0
# MAX_ZOOM=15
# 以下のコマンドでTileデータが作成されるが、作成に6時間~12時間程度かかるので
# セッションが切れても困らないようにScreen等張っておく
# こちらが終わると、data配下にjapan.mbtilesが作成され、それがタイル本体になる
./quickstart.sh japan
# quickstart.sh が終わり次第、以下コマンドでタイルサーバの起動が可能
make start-tileserver
이렇게 하면 http://idaddress:808080/Tile 서버에 접근할 수 있습니다
Varnish Cache의 설치 & 설정
참조정식 절차로 진행sudo apt install curl gnupg apt-transport-https
curl -sL https://packagecloud.io/varnishcache/varnish60lts/gpgkey | sudo apt-key add -
# aptレポジトリ追加
sudo add-apt-repository 'deb https://packagecloud.io/varnishcache/varnish60lts/ubuntu/ bionic main'
sudo apt update
sudo apt install varnish
# バージョン確認
varnishd -V
# varnishd (varnish-6.0.4 revision 14d4eee6f0afc3020a044341235f54f3bd1449f1)
# Copyright (c) 2006 Verdens Gang AS
# Copyright (c) 2006-2019 Varnish Software AS
설정(시작) 파일은/etc/system/multi-user입니다.target.wants/varnish.서비스니까 봐봐.[Unit]
Description=Varnish Cache, a high-performance HTTP accelerator
After=network-online.target nss-lookup.target
[Service]
Type=forking
KillMode=process
# Maximum number of open files (for ulimit -n)
LimitNOFILE=131072
# Locked shared memory - should suffice to lock the shared memory log
# (varnishd -l argument)
# Default log size is 80MB vsl + 1M vsm + header -> 82MB
# unit is bytes
LimitMEMLOCK=85983232
# Enable this to avoid "fork failed" on reload.
TasksMax=infinity
# Maximum size of the corefile.
LimitCORE=infinity
ExecStart=/usr/sbin/varnishd \
-a :6081 \
-T localhost:6082 \
-p feature=+http2 \
-f /etc/varnish/default.vcl \
-s malloc,256m
ExecReload=/usr/sbin/varnishreload
[Install]
WantedBy=multi-user.target
ExecStart 매개변수를 사용하여 시작 설정을 시작할 수 있습니다.
-a에서는 Varnish Listen의 포트를 설정할 수 있지만 이번에는 이동 Cache의 포트에 특별히 얽매이지 않아 기본 6081호로 진행됩니다.
다음은 - f가 설정한/etc/varnis/default입니다.vcl 확인해 보세요.vcl 4.0;
# Default backend definition. Set this to point to your content server.
backend default {
.host = "127.0.0.1";
.port = "8080";
}
sub vcl_recv {
# Happens before we check if we have this in cache already.
#
# Typically you clean up the request here, removing cookies you don't need,
# rewriting the request, etc.
}
sub vcl_backend_response {
# Happens after we have read the response headers from the backend.
#
# Here you clean the response headers, removing silly Set-Cookie headers
# and other mistakes your backend does.
}
sub vcl_deliver {
# Happens when we have all the pieces we need, and are about to send the
# response to the client.
#
# You can do accounting or modifying the final object here.
}
백엔드 default에서 캐시를 지정하는 원본 백엔드 서버입니다.
이번 백엔드 OpenMap Tiles의 서버는localhost:8080에서 시작되었기 때문에 이 설정에 따라 문제가 없을 것입니다.
그럼 시동 걸어볼게요.# サービスファイルを反映するには systemctl daemon-reload が必要
systemctl daemon-reload
systemctl start varnish
systemctl status varnish
시스템ctl status varnish에 있습니다.서비스에 설정된 인자가 시작되었는지 확인하십시오
Nginx 설치 및 설정
참조여기.에 Nginx 설치
설정이지만 이번에는 캐시 격자 (그림) 만 생각하고 있습니다. 따라서 다음은/etc/nginx/conf.d/default입니다.conf를 편집하고 Nginx를 다시 시작합니다.
nginx의 설정은 아래 사이트를 참고하였다.
・OpenMacTiles/Tileserver-GL/Maputnik 기반의 Macbox Vector Tile OSS 설치 환경 요약
Nginx는 80번 포트Listen에 있습니다. 요청이 png 이미지라면Varnish Cache가 이동하는 6081번 포트에 요청을 보내고, 그렇지 않으면 OpenMapTiles가 이동하는 8080번 포트에 직접 요청을 보냅니다.server {
listen 80;
server_name localhost;
location / {
proxy_set_header Host $http_host;
proxy_pass http://localhost:8080;
}
location ~ ^/.*\.png {
proxy_set_header Host $http_host;
proxy_pass http://localhost:6081;
}
}
Nginx를 다시 시작해서 http:///idaddress/TileServerGL 화면으로 나오면 완전 OK입니다.
부하 테스트
모처럼 Cache 서버를 만들어 특정 이미지가 얼마나 앞당겨졌는지 부하 테스트를 해보자.
이번에는 아파치 벤치를 통해 자신이 소유한 컴퓨터가 클라우드에 구축된 이 같은 환경에 대한 부하 테스트를 실시했다.
(ip 주소는 [ip-address]로 대체)
Varnish
# 同時接続数100で1000回アクセス
$ ab -c 100 -n 1000 http://[ip-address]/styles/klokantech-basic/6/55/27.png
This is ApacheBench, Version 2.3 <$Revision: 1843412 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking [ip-address] (be patient)
Completed 100 requests
Completed 200 requests
Completed 300 requests
Completed 400 requests
Completed 500 requests
Completed 600 requests
Completed 700 requests
Completed 800 requests
Completed 900 requests
Completed 1000 requests
Finished 1000 requests
Server Software: nginx/1.18.0
Server Hostname: [ip-address]
Server Port: 80
Document Path: /styles/klokantech-basic/6/55/27.png
Document Length: 1680 bytes
Concurrency Level: 100
Time taken for tests: 10.359 seconds
Complete requests: 1000
Failed requests: 0
Total transferred: 2033545 bytes
HTML transferred: 1680000 bytes
Requests per second: 96.54 [#/sec] (mean)
Time per request: 1035.882 [ms] (mean)
Time per request: 10.359 [ms] (mean, across all concurrent requests)
Transfer rate: 191.71 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 68 266 195.1 215 1243
Processing: 68 358 500.1 202 4735
Waiting: 68 325 444.8 201 4735
Total: 185 624 557.2 428 4979
Percentage of the requests served within a certain time (ms)
50% 428
66% 472
75% 510
80% 615
90% 1471
95% 1817
98% 2135
99% 2948
100% 4979 (longest request)
Varnish가 없어요.
$ ab -c 100 -n 1000 http://[ip-address]/styles/klokantech-basic/6/55/27.png
This is ApacheBench, Version 2.3 <$Revision: 1843412 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking [ip-address] (be patient)
Completed 100 requests
Completed 200 requests
Completed 300 requests
Completed 400 requests
Completed 500 requests
Completed 600 requests
Completed 700 requests
Completed 800 requests
Completed 900 requests
Completed 1000 requests
Finished 1000 requests
Server Software: nginx/1.18.0
Server Hostname: [ip-address]
Server Port: 80
Document Path: /styles/klokantech-basic/6/55/27.png
Document Length: 1680 bytes
Concurrency Level: 100
Time taken for tests: 12.373 seconds
Complete requests: 1000
Failed requests: 0
Total transferred: 1945000 bytes
HTML transferred: 1680000 bytes
Requests per second: 80.82 [#/sec] (mean)
Time per request: 1237.316 [ms] (mean)
Time per request: 12.373 [ms] (mean, across all concurrent requests)
Transfer rate: 153.51 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 55 263 245.8 194 1311
Processing: 83 748 1214.8 227 7220
Waiting: 83 714 1194.4 225 5502
Total: 180 1011 1243.8 446 7352
Percentage of the requests served within a certain time (ms)
50% 446
66% 529
75% 1213
80% 1357
90% 3132
95% 4073
98% 4969
99% 5269
100% 7352 (longest request)
단일 이미지에 대한 액세스를 통해 원래 액세스의 약 67% 통신 시간에 액세스할 수 있음
총결산
이상은 대체로 절차서이지만Varnish Cache로 캐시를 하면서 지도를 보낼 수 있습니다.백엔드 +nginx에 앱을 내놓는 것도 좋지만 캐시까지 넣으면 좋을 것 같아요.여러분도 꼭 해보세요.
Reference
이 문제에 관하여(Varnish Cache로 캐시가 있는 지도 서버를 만들어 봤습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/mottie0911/items/4e9bbb41588717ece139
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
지도는 백엔드에서 OpenMapTiles를 사용하여 발송됩니다.
Varnish Cache에서 타일의 이미지 (raster) 데이터를 캐시하고 싶기 때문에, 프론트 데스크톱에서 Nginx를 설정합니다. 이미지 (raster) 에 대한 요청이라면 캐시 서버에 요청을 건너뛰십시오.vector에 대한 요청이라면 OpenMapTiles에 직접 요청을 보냅니다.
User --- Nginx(80) --- (raster) varnish(6081) ---- OpenMapTiles(8080)
|
---(vector)-------------------- OpenMapTiles(8080)
컨디션 Platform: GCP Compute Engine
マシンタイプ: n2-standard-4(vCPU x 4、メモリ 16 GB)
イメージ: ubuntu-minimal-1804-bionic-v20200131 (Ubuntu v.18)
ディスクサイズ: 110 GB (HHD)
절차.
Docker, docker-compose의 Install
참고여기 기사..curl https://get.docker.com | sh
usermod -aG docker $USER
systemctl start docker
systemctl enable docker
# docker-compose latest: 1.27.4
curl -L https://github.com/docker/compose/releases/download/1.27.4/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
# confirm docker, docker-compose
docker -v
# result like: Docker version 19.03.8, build afacb8b7f0
docker-compose -v
# result like: docker-compose version 1.27.4, build 8d51620a
OpenMapTiles 설치 및 Tile 만들기
OpenMapTiles는 지도의 타일로 만들어져 편지를 배달할 수 있는 편리한 도구로 이번에는 이것을 사용한다.git clone https://github.com/openmaptiles/openmaptiles.git
cd openmaptiles
# ZoomレベルをMin0, Max15にしたかったので.envを編集
vi .env
# modify MIN_ZOOM, MAX_ZOOM as
# MIN_ZOOM=0
# MAX_ZOOM=15
# 以下のコマンドでTileデータが作成されるが、作成に6時間~12時間程度かかるので
# セッションが切れても困らないようにScreen等張っておく
# こちらが終わると、data配下にjapan.mbtilesが作成され、それがタイル本体になる
./quickstart.sh japan
# quickstart.sh が終わり次第、以下コマンドでタイルサーバの起動が可能
make start-tileserver
이렇게 하면 http://idaddress:808080/Tile 서버에 접근할 수 있습니다
Varnish Cache의 설치 & 설정
참조정식 절차로 진행sudo apt install curl gnupg apt-transport-https
curl -sL https://packagecloud.io/varnishcache/varnish60lts/gpgkey | sudo apt-key add -
# aptレポジトリ追加
sudo add-apt-repository 'deb https://packagecloud.io/varnishcache/varnish60lts/ubuntu/ bionic main'
sudo apt update
sudo apt install varnish
# バージョン確認
varnishd -V
# varnishd (varnish-6.0.4 revision 14d4eee6f0afc3020a044341235f54f3bd1449f1)
# Copyright (c) 2006 Verdens Gang AS
# Copyright (c) 2006-2019 Varnish Software AS
설정(시작) 파일은/etc/system/multi-user입니다.target.wants/varnish.서비스니까 봐봐.[Unit]
Description=Varnish Cache, a high-performance HTTP accelerator
After=network-online.target nss-lookup.target
[Service]
Type=forking
KillMode=process
# Maximum number of open files (for ulimit -n)
LimitNOFILE=131072
# Locked shared memory - should suffice to lock the shared memory log
# (varnishd -l argument)
# Default log size is 80MB vsl + 1M vsm + header -> 82MB
# unit is bytes
LimitMEMLOCK=85983232
# Enable this to avoid "fork failed" on reload.
TasksMax=infinity
# Maximum size of the corefile.
LimitCORE=infinity
ExecStart=/usr/sbin/varnishd \
-a :6081 \
-T localhost:6082 \
-p feature=+http2 \
-f /etc/varnish/default.vcl \
-s malloc,256m
ExecReload=/usr/sbin/varnishreload
[Install]
WantedBy=multi-user.target
ExecStart 매개변수를 사용하여 시작 설정을 시작할 수 있습니다.
-a에서는 Varnish Listen의 포트를 설정할 수 있지만 이번에는 이동 Cache의 포트에 특별히 얽매이지 않아 기본 6081호로 진행됩니다.
다음은 - f가 설정한/etc/varnis/default입니다.vcl 확인해 보세요.vcl 4.0;
# Default backend definition. Set this to point to your content server.
backend default {
.host = "127.0.0.1";
.port = "8080";
}
sub vcl_recv {
# Happens before we check if we have this in cache already.
#
# Typically you clean up the request here, removing cookies you don't need,
# rewriting the request, etc.
}
sub vcl_backend_response {
# Happens after we have read the response headers from the backend.
#
# Here you clean the response headers, removing silly Set-Cookie headers
# and other mistakes your backend does.
}
sub vcl_deliver {
# Happens when we have all the pieces we need, and are about to send the
# response to the client.
#
# You can do accounting or modifying the final object here.
}
백엔드 default에서 캐시를 지정하는 원본 백엔드 서버입니다.
이번 백엔드 OpenMap Tiles의 서버는localhost:8080에서 시작되었기 때문에 이 설정에 따라 문제가 없을 것입니다.
그럼 시동 걸어볼게요.# サービスファイルを反映するには systemctl daemon-reload が必要
systemctl daemon-reload
systemctl start varnish
systemctl status varnish
시스템ctl status varnish에 있습니다.서비스에 설정된 인자가 시작되었는지 확인하십시오
Nginx 설치 및 설정
참조여기.에 Nginx 설치
설정이지만 이번에는 캐시 격자 (그림) 만 생각하고 있습니다. 따라서 다음은/etc/nginx/conf.d/default입니다.conf를 편집하고 Nginx를 다시 시작합니다.
nginx의 설정은 아래 사이트를 참고하였다.
・OpenMacTiles/Tileserver-GL/Maputnik 기반의 Macbox Vector Tile OSS 설치 환경 요약
Nginx는 80번 포트Listen에 있습니다. 요청이 png 이미지라면Varnish Cache가 이동하는 6081번 포트에 요청을 보내고, 그렇지 않으면 OpenMapTiles가 이동하는 8080번 포트에 직접 요청을 보냅니다.server {
listen 80;
server_name localhost;
location / {
proxy_set_header Host $http_host;
proxy_pass http://localhost:8080;
}
location ~ ^/.*\.png {
proxy_set_header Host $http_host;
proxy_pass http://localhost:6081;
}
}
Nginx를 다시 시작해서 http:///idaddress/TileServerGL 화면으로 나오면 완전 OK입니다.
부하 테스트
모처럼 Cache 서버를 만들어 특정 이미지가 얼마나 앞당겨졌는지 부하 테스트를 해보자.
이번에는 아파치 벤치를 통해 자신이 소유한 컴퓨터가 클라우드에 구축된 이 같은 환경에 대한 부하 테스트를 실시했다.
(ip 주소는 [ip-address]로 대체)
Varnish
# 同時接続数100で1000回アクセス
$ ab -c 100 -n 1000 http://[ip-address]/styles/klokantech-basic/6/55/27.png
This is ApacheBench, Version 2.3 <$Revision: 1843412 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking [ip-address] (be patient)
Completed 100 requests
Completed 200 requests
Completed 300 requests
Completed 400 requests
Completed 500 requests
Completed 600 requests
Completed 700 requests
Completed 800 requests
Completed 900 requests
Completed 1000 requests
Finished 1000 requests
Server Software: nginx/1.18.0
Server Hostname: [ip-address]
Server Port: 80
Document Path: /styles/klokantech-basic/6/55/27.png
Document Length: 1680 bytes
Concurrency Level: 100
Time taken for tests: 10.359 seconds
Complete requests: 1000
Failed requests: 0
Total transferred: 2033545 bytes
HTML transferred: 1680000 bytes
Requests per second: 96.54 [#/sec] (mean)
Time per request: 1035.882 [ms] (mean)
Time per request: 10.359 [ms] (mean, across all concurrent requests)
Transfer rate: 191.71 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 68 266 195.1 215 1243
Processing: 68 358 500.1 202 4735
Waiting: 68 325 444.8 201 4735
Total: 185 624 557.2 428 4979
Percentage of the requests served within a certain time (ms)
50% 428
66% 472
75% 510
80% 615
90% 1471
95% 1817
98% 2135
99% 2948
100% 4979 (longest request)
Varnish가 없어요.
$ ab -c 100 -n 1000 http://[ip-address]/styles/klokantech-basic/6/55/27.png
This is ApacheBench, Version 2.3 <$Revision: 1843412 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking [ip-address] (be patient)
Completed 100 requests
Completed 200 requests
Completed 300 requests
Completed 400 requests
Completed 500 requests
Completed 600 requests
Completed 700 requests
Completed 800 requests
Completed 900 requests
Completed 1000 requests
Finished 1000 requests
Server Software: nginx/1.18.0
Server Hostname: [ip-address]
Server Port: 80
Document Path: /styles/klokantech-basic/6/55/27.png
Document Length: 1680 bytes
Concurrency Level: 100
Time taken for tests: 12.373 seconds
Complete requests: 1000
Failed requests: 0
Total transferred: 1945000 bytes
HTML transferred: 1680000 bytes
Requests per second: 80.82 [#/sec] (mean)
Time per request: 1237.316 [ms] (mean)
Time per request: 12.373 [ms] (mean, across all concurrent requests)
Transfer rate: 153.51 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 55 263 245.8 194 1311
Processing: 83 748 1214.8 227 7220
Waiting: 83 714 1194.4 225 5502
Total: 180 1011 1243.8 446 7352
Percentage of the requests served within a certain time (ms)
50% 446
66% 529
75% 1213
80% 1357
90% 3132
95% 4073
98% 4969
99% 5269
100% 7352 (longest request)
단일 이미지에 대한 액세스를 통해 원래 액세스의 약 67% 통신 시간에 액세스할 수 있음
총결산
이상은 대체로 절차서이지만Varnish Cache로 캐시를 하면서 지도를 보낼 수 있습니다.백엔드 +nginx에 앱을 내놓는 것도 좋지만 캐시까지 넣으면 좋을 것 같아요.여러분도 꼭 해보세요.
Reference
이 문제에 관하여(Varnish Cache로 캐시가 있는 지도 서버를 만들어 봤습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/mottie0911/items/4e9bbb41588717ece139
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Platform: GCP Compute Engine
マシンタイプ: n2-standard-4(vCPU x 4、メモリ 16 GB)
イメージ: ubuntu-minimal-1804-bionic-v20200131 (Ubuntu v.18)
ディスクサイズ: 110 GB (HHD)
Docker, docker-compose의 Install
참고여기 기사..
curl https://get.docker.com | sh
usermod -aG docker $USER
systemctl start docker
systemctl enable docker
# docker-compose latest: 1.27.4
curl -L https://github.com/docker/compose/releases/download/1.27.4/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
# confirm docker, docker-compose
docker -v
# result like: Docker version 19.03.8, build afacb8b7f0
docker-compose -v
# result like: docker-compose version 1.27.4, build 8d51620a
OpenMapTiles 설치 및 Tile 만들기
OpenMapTiles는 지도의 타일로 만들어져 편지를 배달할 수 있는 편리한 도구로 이번에는 이것을 사용한다.
git clone https://github.com/openmaptiles/openmaptiles.git
cd openmaptiles
# ZoomレベルをMin0, Max15にしたかったので.envを編集
vi .env
# modify MIN_ZOOM, MAX_ZOOM as
# MIN_ZOOM=0
# MAX_ZOOM=15
# 以下のコマンドでTileデータが作成されるが、作成に6時間~12時間程度かかるので
# セッションが切れても困らないようにScreen等張っておく
# こちらが終わると、data配下にjapan.mbtilesが作成され、それがタイル本体になる
./quickstart.sh japan
# quickstart.sh が終わり次第、以下コマンドでタイルサーバの起動が可能
make start-tileserver
이렇게 하면 http://idaddress:808080/Tile 서버에 접근할 수 있습니다Varnish Cache의 설치 & 설정
참조정식 절차로 진행
sudo apt install curl gnupg apt-transport-https
curl -sL https://packagecloud.io/varnishcache/varnish60lts/gpgkey | sudo apt-key add -
# aptレポジトリ追加
sudo add-apt-repository 'deb https://packagecloud.io/varnishcache/varnish60lts/ubuntu/ bionic main'
sudo apt update
sudo apt install varnish
# バージョン確認
varnishd -V
# varnishd (varnish-6.0.4 revision 14d4eee6f0afc3020a044341235f54f3bd1449f1)
# Copyright (c) 2006 Verdens Gang AS
# Copyright (c) 2006-2019 Varnish Software AS
설정(시작) 파일은/etc/system/multi-user입니다.target.wants/varnish.서비스니까 봐봐.[Unit]
Description=Varnish Cache, a high-performance HTTP accelerator
After=network-online.target nss-lookup.target
[Service]
Type=forking
KillMode=process
# Maximum number of open files (for ulimit -n)
LimitNOFILE=131072
# Locked shared memory - should suffice to lock the shared memory log
# (varnishd -l argument)
# Default log size is 80MB vsl + 1M vsm + header -> 82MB
# unit is bytes
LimitMEMLOCK=85983232
# Enable this to avoid "fork failed" on reload.
TasksMax=infinity
# Maximum size of the corefile.
LimitCORE=infinity
ExecStart=/usr/sbin/varnishd \
-a :6081 \
-T localhost:6082 \
-p feature=+http2 \
-f /etc/varnish/default.vcl \
-s malloc,256m
ExecReload=/usr/sbin/varnishreload
[Install]
WantedBy=multi-user.target
ExecStart 매개변수를 사용하여 시작 설정을 시작할 수 있습니다.-a에서는 Varnish Listen의 포트를 설정할 수 있지만 이번에는 이동 Cache의 포트에 특별히 얽매이지 않아 기본 6081호로 진행됩니다.
다음은 - f가 설정한/etc/varnis/default입니다.vcl 확인해 보세요.
vcl 4.0;
# Default backend definition. Set this to point to your content server.
backend default {
.host = "127.0.0.1";
.port = "8080";
}
sub vcl_recv {
# Happens before we check if we have this in cache already.
#
# Typically you clean up the request here, removing cookies you don't need,
# rewriting the request, etc.
}
sub vcl_backend_response {
# Happens after we have read the response headers from the backend.
#
# Here you clean the response headers, removing silly Set-Cookie headers
# and other mistakes your backend does.
}
sub vcl_deliver {
# Happens when we have all the pieces we need, and are about to send the
# response to the client.
#
# You can do accounting or modifying the final object here.
}
백엔드 default에서 캐시를 지정하는 원본 백엔드 서버입니다.이번 백엔드 OpenMap Tiles의 서버는localhost:8080에서 시작되었기 때문에 이 설정에 따라 문제가 없을 것입니다.
그럼 시동 걸어볼게요.
# サービスファイルを反映するには systemctl daemon-reload が必要
systemctl daemon-reload
systemctl start varnish
systemctl status varnish
시스템ctl status varnish에 있습니다.서비스에 설정된 인자가 시작되었는지 확인하십시오Nginx 설치 및 설정
참조여기.에 Nginx 설치
설정이지만 이번에는 캐시 격자 (그림) 만 생각하고 있습니다. 따라서 다음은/etc/nginx/conf.d/default입니다.conf를 편집하고 Nginx를 다시 시작합니다.
nginx의 설정은 아래 사이트를 참고하였다.
・OpenMacTiles/Tileserver-GL/Maputnik 기반의 Macbox Vector Tile OSS 설치 환경 요약
Nginx는 80번 포트Listen에 있습니다. 요청이 png 이미지라면Varnish Cache가 이동하는 6081번 포트에 요청을 보내고, 그렇지 않으면 OpenMapTiles가 이동하는 8080번 포트에 직접 요청을 보냅니다.
server {
listen 80;
server_name localhost;
location / {
proxy_set_header Host $http_host;
proxy_pass http://localhost:8080;
}
location ~ ^/.*\.png {
proxy_set_header Host $http_host;
proxy_pass http://localhost:6081;
}
}
Nginx를 다시 시작해서 http:///idaddress/TileServerGL 화면으로 나오면 완전 OK입니다.부하 테스트
모처럼 Cache 서버를 만들어 특정 이미지가 얼마나 앞당겨졌는지 부하 테스트를 해보자.
이번에는 아파치 벤치를 통해 자신이 소유한 컴퓨터가 클라우드에 구축된 이 같은 환경에 대한 부하 테스트를 실시했다.
(ip 주소는 [ip-address]로 대체)
Varnish
# 同時接続数100で1000回アクセス
$ ab -c 100 -n 1000 http://[ip-address]/styles/klokantech-basic/6/55/27.png
This is ApacheBench, Version 2.3 <$Revision: 1843412 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking [ip-address] (be patient)
Completed 100 requests
Completed 200 requests
Completed 300 requests
Completed 400 requests
Completed 500 requests
Completed 600 requests
Completed 700 requests
Completed 800 requests
Completed 900 requests
Completed 1000 requests
Finished 1000 requests
Server Software: nginx/1.18.0
Server Hostname: [ip-address]
Server Port: 80
Document Path: /styles/klokantech-basic/6/55/27.png
Document Length: 1680 bytes
Concurrency Level: 100
Time taken for tests: 10.359 seconds
Complete requests: 1000
Failed requests: 0
Total transferred: 2033545 bytes
HTML transferred: 1680000 bytes
Requests per second: 96.54 [#/sec] (mean)
Time per request: 1035.882 [ms] (mean)
Time per request: 10.359 [ms] (mean, across all concurrent requests)
Transfer rate: 191.71 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 68 266 195.1 215 1243
Processing: 68 358 500.1 202 4735
Waiting: 68 325 444.8 201 4735
Total: 185 624 557.2 428 4979
Percentage of the requests served within a certain time (ms)
50% 428
66% 472
75% 510
80% 615
90% 1471
95% 1817
98% 2135
99% 2948
100% 4979 (longest request)
Varnish가 없어요.
$ ab -c 100 -n 1000 http://[ip-address]/styles/klokantech-basic/6/55/27.png
This is ApacheBench, Version 2.3 <$Revision: 1843412 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking [ip-address] (be patient)
Completed 100 requests
Completed 200 requests
Completed 300 requests
Completed 400 requests
Completed 500 requests
Completed 600 requests
Completed 700 requests
Completed 800 requests
Completed 900 requests
Completed 1000 requests
Finished 1000 requests
Server Software: nginx/1.18.0
Server Hostname: [ip-address]
Server Port: 80
Document Path: /styles/klokantech-basic/6/55/27.png
Document Length: 1680 bytes
Concurrency Level: 100
Time taken for tests: 12.373 seconds
Complete requests: 1000
Failed requests: 0
Total transferred: 1945000 bytes
HTML transferred: 1680000 bytes
Requests per second: 80.82 [#/sec] (mean)
Time per request: 1237.316 [ms] (mean)
Time per request: 12.373 [ms] (mean, across all concurrent requests)
Transfer rate: 153.51 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 55 263 245.8 194 1311
Processing: 83 748 1214.8 227 7220
Waiting: 83 714 1194.4 225 5502
Total: 180 1011 1243.8 446 7352
Percentage of the requests served within a certain time (ms)
50% 446
66% 529
75% 1213
80% 1357
90% 3132
95% 4073
98% 4969
99% 5269
100% 7352 (longest request)
단일 이미지에 대한 액세스를 통해 원래 액세스의 약 67% 통신 시간에 액세스할 수 있음
총결산
이상은 대체로 절차서이지만Varnish Cache로 캐시를 하면서 지도를 보낼 수 있습니다.백엔드 +nginx에 앱을 내놓는 것도 좋지만 캐시까지 넣으면 좋을 것 같아요.여러분도 꼭 해보세요.
Reference
이 문제에 관하여(Varnish Cache로 캐시가 있는 지도 서버를 만들어 봤습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/mottie0911/items/4e9bbb41588717ece139
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
# 同時接続数100で1000回アクセス
$ ab -c 100 -n 1000 http://[ip-address]/styles/klokantech-basic/6/55/27.png
This is ApacheBench, Version 2.3 <$Revision: 1843412 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking [ip-address] (be patient)
Completed 100 requests
Completed 200 requests
Completed 300 requests
Completed 400 requests
Completed 500 requests
Completed 600 requests
Completed 700 requests
Completed 800 requests
Completed 900 requests
Completed 1000 requests
Finished 1000 requests
Server Software: nginx/1.18.0
Server Hostname: [ip-address]
Server Port: 80
Document Path: /styles/klokantech-basic/6/55/27.png
Document Length: 1680 bytes
Concurrency Level: 100
Time taken for tests: 10.359 seconds
Complete requests: 1000
Failed requests: 0
Total transferred: 2033545 bytes
HTML transferred: 1680000 bytes
Requests per second: 96.54 [#/sec] (mean)
Time per request: 1035.882 [ms] (mean)
Time per request: 10.359 [ms] (mean, across all concurrent requests)
Transfer rate: 191.71 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 68 266 195.1 215 1243
Processing: 68 358 500.1 202 4735
Waiting: 68 325 444.8 201 4735
Total: 185 624 557.2 428 4979
Percentage of the requests served within a certain time (ms)
50% 428
66% 472
75% 510
80% 615
90% 1471
95% 1817
98% 2135
99% 2948
100% 4979 (longest request)
$ ab -c 100 -n 1000 http://[ip-address]/styles/klokantech-basic/6/55/27.png
This is ApacheBench, Version 2.3 <$Revision: 1843412 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking [ip-address] (be patient)
Completed 100 requests
Completed 200 requests
Completed 300 requests
Completed 400 requests
Completed 500 requests
Completed 600 requests
Completed 700 requests
Completed 800 requests
Completed 900 requests
Completed 1000 requests
Finished 1000 requests
Server Software: nginx/1.18.0
Server Hostname: [ip-address]
Server Port: 80
Document Path: /styles/klokantech-basic/6/55/27.png
Document Length: 1680 bytes
Concurrency Level: 100
Time taken for tests: 12.373 seconds
Complete requests: 1000
Failed requests: 0
Total transferred: 1945000 bytes
HTML transferred: 1680000 bytes
Requests per second: 80.82 [#/sec] (mean)
Time per request: 1237.316 [ms] (mean)
Time per request: 12.373 [ms] (mean, across all concurrent requests)
Transfer rate: 153.51 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 55 263 245.8 194 1311
Processing: 83 748 1214.8 227 7220
Waiting: 83 714 1194.4 225 5502
Total: 180 1011 1243.8 446 7352
Percentage of the requests served within a certain time (ms)
50% 446
66% 529
75% 1213
80% 1357
90% 3132
95% 4073
98% 4969
99% 5269
100% 7352 (longest request)
이상은 대체로 절차서이지만Varnish Cache로 캐시를 하면서 지도를 보낼 수 있습니다.백엔드 +nginx에 앱을 내놓는 것도 좋지만 캐시까지 넣으면 좋을 것 같아요.여러분도 꼭 해보세요.
Reference
이 문제에 관하여(Varnish Cache로 캐시가 있는 지도 서버를 만들어 봤습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/mottie0911/items/4e9bbb41588717ece139텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)