Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
200万ドメインを超えるレンタルサーバのコンテンツキャッシュ機能の裏側/2_million_m...
Search
Takuma Kume
July 29, 2018
Technology
3.2k
9
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
200万ドメインを超えるレンタルサーバのコンテンツキャッシュ機能の裏側/2_million_more_than_the_domain_the_back_of_the_rental_server_content_cache
July Tech Festa 2018 (
https://2018.techfesta.jp/
)
Takuma Kume
July 29, 2018
More Decks by Takuma Kume
See All by Takuma Kume
SRE/インフラエンジニアの市場価値とキャリアパス/Market value and career path for SRE-infrastructure engineers
takumakume
2
1.7k
【新卒研修】共通言語としてのSRE/SRE as a common language
takumakume
0
320
DDoSとの終わりなき戦い2025/endless_battle_with_ddos_attack_2025
takumakume
3
200
事業部CTOの現在地(パネルディスカッション)/Current-location-of-Division-CTO
takumakume
0
250
ロリポップ! for Gamersを支えるインフラ/lolipop for gamers infrastructure
takumakume
0
1.9k
ロリポップ! for Gamersの立ち上げ/lolipop for gamers launch
takumakume
0
3.1k
ホモグラフドメインを検出してみた/detect homograph domain
takumakume
0
850
ソフトウェアの継続的アップデートをコンテナ化によって加速させる/Accelerate continuous software updates with containerization
takumakume
0
5.8k
KubernetesにおけるSBOMを利用した脆弱性管理/Vulnerability_Management_with_SBOM_in_Kubernetes
takumakume
2
3.3k
Other Decks in Technology
See All in Technology
HolmesGPTで始めるSREエージェント入門!プラットフォームの障害調査はAIにお任せ 〜
leveragestech
PRO
0
110
TiDBファミリーにDWHが新登場!! TiDB最新情報 / TiDB update 202609
yoshiakiyamasaki
0
150
VS Code × GitHub Copilot での Fabric 開発
ryomaru0825
1
140
生成AIを使って「人が」考える技術 ― AI時代の人機共想と実践ノウハウ|UNITT AC2026
ishiirikie
0
410
【データ横丁主催】AI Agentがコンテキストを使って仕事をした後、何が残るのか― 組織の経験を次の判断に引き継ぐ「Agent Memory」
shisyu_gaku
2
230
データ品質を壊しながらSnowflakeのAIに分析させてみた
kawanago
0
250
【ゲームメーカーズスクランブル2026】『Shadowverse: Worlds Beyond』UIとアニメーションで実現する最高のユーザー体験を叶えるプロトタイピング
cygames
PRO
1
700
DORA_Metrics.pdf
wagnerfusca
1
130
[Kiro Meetup #7] Kiro Crew Dive Deep
konippi
0
420
AIに書かせて、プラットフォームで縛る ― EKSプラットフォームで実践した責任境界と権限設計
elmodev09
1
1k
「今盗んで、後で解く」に備える ― AWSのポスト量子暗号入門
yama3133
2
270
Antigravity SDK for the Java Developer
glaforge
0
230
Featured
See All Featured
How to optimise 3,500 product descriptions for ecommerce in one day using ChatGPT
katarinadahlin
PRO
3
3.8k
Leadership Guide Workshop - DevTernity 2021
reverentgeek
1
370
Chasing Engaging Ingredients in Design
codingconduct
0
340
From Legacy to Launchpad: Building Startup-Ready Communities
dugsong
0
340
The Impact of AI in SEO - AI Overviews June 2024 Edition
aleyda
6
1.2k
Evolving SEO for Evolving Search Engines
ryanjones
0
300
Stop Working from a Prison Cell
hatefulcrawdad
274
21k
Why Our Code Smells
bkeepers
PRO
340
58k
Fashionably flexible responsive web design (full day workshop)
malarkey
409
67k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
1.3k
Done Done
chrislema
187
17k
Introduction to Domain-Driven Design and Collaborative software design
baasie
1
1k
Transcript
!UBLVNBLVNF(.01FQBCP *OD +VMZ5FDI'FTUB ສυϝΠϯΛ͑ΔϨϯλϧαʔόͷ ίϯςϯπΩϟογϡػೳͷཪଆ
(.0ϖύϘϗεςΟϯάࣄۀ෦ ΠϯϑϥΤϯδχΞ ٱถഅ!UBLVNBLVNF
None
ֹ݄ԁ͔Βར༻Ͱ͖Δʂ
ֹ݄ԁ͔Βར༻Ͱ͖Δʂ ඵؒສઍϦΫΤετΛॲཧʂ
ֹ݄ԁ͔Βར༻Ͱ͖Δʂ ສαΠτҎ্ӡ༻தʂ ඵؒສઍϦΫΤετΛॲཧʂ
None
ίϯςϯπΩϟογϡػೳ 3FWFSTF1SPYZ 8FSWFS ௨ৗ
ίϯςϯπΩϟογϡػೳ 3FWFSTF1SPYZ 8FSWFS 3FWFSTF1SPYZ $BDIF4FSWFS 8FSWFS Ωϟογϡ ίϯςϯπΩϟογϡ͋Γ
ίϯςϯπΩϟογϡػೳ 3FWFSTF1SPYZ $BDIF4FSWFS 8FSWFS Ωϟογϡ ίϯςϯπΩϟογϡ͋Γ 8FSWFSͷલஈͰΩϟογϡͯ͠ ߴʹԠ͢Δɻ
ίϯςϯπΩϟογϡػೳ 3FWFSTF1SPYZ $BDIF4FSWFS 8FSWFS Ωϟογϡ ίϯςϯπΩϟογϡ͋Γ OHJOY IUUQE ύϑΥʔϚϯεͷߴ͍OHJOYͰϦΫΤετ Λॲཧ͢Δɻ
8FSWFSͷલஈͰΩϟογϡͯ͠ ߴʹԠ͢Δɻ
ίϯςϯπΩϟογϡػೳ 3FWFSTF1SPYZ $BDIF4FSWFS 8FSWFS Ωϟογϡ ίϯςϯπΩϟογϡ͋Γ OHJOY IUUQE ύϑΥʔϚϯεͷߴ͍OHJOYͰϦΫΤετ Λॲཧ͢Δɻ
1)1ͷॲཧͰߴෛՙʹͳΓ͍͢ 8&#αʔόͷෛՙݮ 8FSWFSͷલஈͰΩϟογϡͯ͠ ߴʹԠ͢Δɻ
ฒྻສϦΫΤετ #FODI.BSLFS "QBDIF#FODI 3FWFSTF1SPYZ 8FSWFS 3FWFSTF1SPYZ $BDIF4FSWFS 8FSWFS Ωϟογϡ 8PSE1SFTTαΠτ
8PSE1SFTTαΠτ
3FWFSTF1SPYZ 8FSWFS 3FWFSTF1SPYZ $BDIF4FSWFS 8FSWFS Ωϟογϡ 8PSE1SFTTαΠτ 8PSE1SFTTαΠτ ύϑΥʔϚϯεഒʂ
3FWFSTF1SPYZ 8FSWFS 3FWFSTF1SPYZ $BDIF4FSWFS 8FSWFS Ωϟογϡ 8PSE1SFTTαΠτ 8PSE1SFTTαΠτ ύϑΥʔϚϯεഒʂ ແྉఏڙ
ͳͥ࡞ͬͨͷ͔ʁ
ࠃ࠷ Ϩϯαό ࠷
ੈͷதʹଟ͘ͷ $%/ࣄۀऀ͕ଘࡏ͢Δ ίϯςϯπΩϟογϡͱ͍͑$%/
ϩϦϙοϓʂͰ֎෦$%/αʔϏε͏ *OUFSOFU 3FWFSTF1SPYZ $BDIF4FSWFS 8FSWFS $%/ࣄۀऀ%$ ΞΫηε ϩϦϙοϓʂ
*OUFSOFU 3FWFSTF1SPYZ $BDIF4FSWFS 8FSWFS $%/ࣄۀऀ%$ ΞΫηε ΦϦδϯͷαʔόʹΞΫηε Ωϟογϡର֎ͷίϯςϯπ ΩϟογϡظݶΕ ϩϦϙοϓʂ
ϩϦϙοϓʂͰ֎෦$%/αʔϏε͏
*OUFSOFU 3FWFSTF1SPYZ $BDIF4FSWFS 8FSWFS $%/ࣄۀऀ%$ ΞΫηε ϩϦϙοϓʂ ΠϯλʔωοτΛߦ͖དྷ͢Δඞཁ͕͋Δ ϩϦϙοϓʂͰ֎෦$%/αʔϏε͏
ίϯςϯπΩϟογϡػೳͷ߹ *OUFSOFU 3FWFSTF1SPYZ $BDIF4FSWFS 8FSWFS ΞΫηε ϩϦϙοϓʂ
ίϯςϯπΩϟογϡػೳͷ߹ *OUFSOFU 3FWFSTF1SPYZ $BDIF4FSWFS 8FSWFS ΞΫηε ߴ ϩϦϙοϓʂ
$%/োน͕ߴ͍
$%/োน͕ߴ͍ υϝΠϯΛ$%/ʹ͚ΔͨΊͷ%/4ͷઃఆ ͦͦ%/4ͱʁ $%/ػೳ͕ଟ͘ઃఆ͕ෳࡶ ඇΤϯδχΞͷํʹͱ͍ͬͯ͠ αʔϏεʹΑͬͯར༻ྉ͕ۚൃੜ͢Δ ϩϦϙοϓʂΤϯδχΞҎ֎ͷํʑ͔Β ଟ͘͝ར༻͍͍ͯΔ
ίϯςϯπΩϟογϡػೳʁ
None
Άͪͬ
Άͪͬ ଟػೳΑΓ؆୯Λ༏ઌ
͜͜·Ͱͷ͓͞Β͍ ίϯςϯπΩϟογϡػೳΛϦϦʔε ࠃ࠷ϨϯαόΛࢦ͢ʂ ֎෦$%/Λซ༻͢ΔΑΓɺંฦ͠ ͷ௨৴Ͱ݁͢Δɻ ୭Ͱ؆୯ʹઃఆͰ͖Δʂ $%/͕͍͠ͱײ͡Δ͓٬༷Ͱ؆୯ ʹઃఆ͕Մೳɻ
͜͜·Ͱ໘ന͘ͳ͍Ͷʁ
ຊ େنϗεςΟϯάͳΒͰͷ ίϯςϯπΩϟογϡػೳΛ ࢧ͑ΔΠϯϑϥٕज़ʹ͍ͭͯ ͓͠·͢ʂ
ઃܭ લఏ ࣮ ·ͱΊ ຊͷྲྀΕ ίϯςϯπΩϟογϡͷ֓ཁɾ։ൃܦҢ ࠓίί ίϯςϯπΩϟογϡͷػೳͱΠϯϑϥʹٻΊͨ͜ͱ
ઃܭ લఏ ࣮ ·ͱΊ ίϯςϯπΩϟογϡͷػೳͱ ΠϯϑϥʹٻΊͨ͜ͱ
ΩϟογϡϞʔυ
ΩϟογϡϞʔυ 81Ωϟογϡػೳ ੩తΩϟογϡػೳ
81Ωϟογϡػೳ 8PSE1SFTT༻ʹ࠷దԽͨ͠Ωϟογϡػೳ ϩϦϙοϓʂͷ͓٬༷ͷଟ͘8PSE1SFTTΛ ར༻͍ͯ͠Δ ੩తΩϟογϡػೳ ը૾+4 $44ͳͲͷ੩తίϯςϯπΛରʹ ͨ͠Ωϟογϡػೳ 8PSE1SFTTҎ֎Λར༻͍ͯ͠Δํ͚ ҆ఆͨ͠αΠτදࣔʹد༩
ΩϟογϡϞʔυ
ͯ͢ͷίϯςϯπΛΩϟογϡͨ͠߹ɿ 8PSE1SFTTͷϩάΠϯޙͷཧը໘͕Ωϟο γϡ͞Εͨ߹ʹҙਤ͠ͳ͍ใ͕࿙ΕΔ ಠࣗձһ੍8&#ΞϓϦέʔγϣϯͰɺผͷ ձһͷϖʔδ͕ݟ͑ͯ͠·͏ ϚωʔδυͳΩϟογϡػೳΛఏڙ ΩϟογϡϞʔυ ͳͥΩϟογϡϞʔυΛ͚Δඞཁ͕͋Δʁ
υϝΠϯͷઃఆʹԠͨ͡ ػೳͷϋϯυϦϯά
طଘͷߏ 3FWFSTF1SPYZ 8FSWFS *OUFSOFU 8FSWFS 4JUF" 4JUF# 4JUF$ 4JUF% ͓٬༷ͷίϯςϯπ
طଘͷߏ 3FWFSTF1SPYZ 8FSWFS *OUFSOFU 8FSWFS 4JUF" 4JUF# 4JUF$ 4JUF% ͓٬༷ͷίϯςϯπ
ສαΠτ
υϝΠϯͷઃఆʹԠͯ͡ϓϩΩγઌΛมߋ͍ͨ͠ 3FWFSTF1SPYZ 8FSWFS *OUFSOFU 8FSWFS IUUQTTJUFBDPN 4JUF" 4JUF#
4JUF$ 4JUF% ͓٬༷ͷίϯςϯπ $BDIF4FSWFS PS ίϯςϯπΩϟογϡػೳ 0/ʁ0''ʁ
3FWFSTF1SPYZ 8FSWFS *OUFSOFU 8FSWFS IUUQTTJUFBDPN 4JUF" 4JUF# 4JUF$
4JUF% ͓٬༷ͷίϯςϯπ $BDIF4FSWFS PS ΩϟογϡͷϞʔυ 81Ωϟογϡʁ ੩తΩϟογϡʁ υϝΠϯͷઃఆʹԠͯ͡ৼΔ͍Λ੍ޚ͍ͨ͠
εέʔϥϏϦςΟ
εέʔϥϏϦςΟ αʔόΛՃ͚ͨͩ͠Ͱউखʹػೳ͕εέʔϧ ͢ΔΠϯϑϥΞʔΩςΫνϟʹ͍ͨ͠ $BDIF4FSWFS $BDIF4FSWFS $BDIF4FSWFS 3FWFSTF1SPYZ
ߴՄ༻ੑ
ߴՄ༻ੑ αʔόյΕΔ յΕͯશࣗಈͰαʔϏεͷঢ়ଶ͕෮چ͢Δ ΠϯϑϥΞʔΩςΫνϟʹ͍ͨ͠ $BDIF4FSWFS $BDIF4FSWFS $BDIF4FSWFS 3FWFSTF1SPYZ
ޮతͳΩϟογϡ
ޮతͳΩϟογϡ ୯७ʹ$BDIF4FSWFSΛฒͯࢄ͢Δͱ 3FWFSTF1SPYZ $BDIF 4FSWFS $BDIF 4FSWFS $BDIF 4FSWFS $BDIF
4FSWFS $BDIF 4FSWFS $BDIF 4FSWFS 8FSWFS ΩϟογϡώοτԼ σΟεΫྖҬͷফඅ FYBNQMFDPN FYBNQMFDPN
ޮతͳΩϟογϡ υϝΠϯຖʹॲཧ͢Δ$BDIF4FSWFSΛݶఆ͍ͨ͠ 3FWFSTF1SPYZ $BDIF 4FSWFS $BDIF 4FSWFS $BDIF 4FSWFS $BDIF
4FSWFS $BDIF 4FSWFS $BDIF 4FSWFS 8FSWFS Ωϟογϡώοτ্ σΟεΫྖҬͷઅ FYBNQMFDPN FYBNQMFDPN
͜͜·Ͱͷ͓͞Β͍ ΩϟογϡϞʔυ 81 ੩తΩϟογϡ υϝΠϯͷઃఆʹԠͨ͡ػೳͷϋϯυϦϯά εέʔϥϏϦςΟ ߴՄ༻ੑ ޮతͳΩϟογϡ ίϯςϯπΩϟογϡͷػೳͱ
ɹɹɹɹɹɹɹɹΠϯϑϥʹٻΊͨ͜ͱ
͜ΕΒΛಉ࣌ʹຬͨ͢ ج൫Λ࣮͢Δඞཁ͕͋Δ
࣮ લఏ ઃܭ ·ͱΊ ίϯςϯπΩϟογϡػೳͷ࣮
͜͜Ͱ#FFS څਫ
ΩϟογϡϞʔυͷ࣮
ΩϟογϡϞʔυͷ࣮ http { : proxy_cache_path /var/cache/nginx/cache levels=1:2 \ keys_zone=zone1:1024m inactive=10m;
proxy_cache_valid 200 10m; proxy_cache_valid 404 1m; server { : proxy_cache zone1; proxy_cache_key $proxy_scheme://$host$ $is_args$args; proxy_pass $proxy_scheme://${Origin Server}; } } OHJOYඪ४ͷOHY@IUUQ@QSPYZ@NPEVMFΛར༻
http { : proxy_cache_path /var/cache/nginx/cache levels=1:2 \ keys_zone=zone1:1024m inactive=10m; proxy_cache_valid
200 10m; proxy_cache_valid 404 1m; server { : proxy_cache zone1; proxy_cache_key $proxy_scheme://$host$request_uri$is_args$args; proxy_pass $proxy_scheme://${Origin Server}; } } OHJOYඪ४ͷOHY@IUUQ@QSPYZ@NPEVMFΛར༻ DBDIFͷอଘઌαΠζɺ༗ޮظؒ ΩϟογϡϞʔυͷ࣮
http { : proxy_cache_path /var/cache/nginx/cache levels=1:2 \ keys_zone=zone1:1024m inactive=10m; proxy_cache_valid
200 10m; proxy_cache_valid 404 1m; server { : proxy_cache zone1; proxy_cache_key $proxy_scheme://$host$request_uri$is_args$args; proxy_pass $proxy_scheme://${Origin Server}; } } OHJOYඪ४ͷOHY@IUUQ@QSPYZ@NPEVMFΛར༻ εςʔλείʔυʹ ΑͬͯอଘظؒΛม͑Δ ΩϟογϡϞʔυͷ࣮
http { : proxy_cache_path /var/cache/nginx/cache levels=1:2 \ keys_zone=zone1:1024m inactive=10m; proxy_cache_valid
200 10m; proxy_cache_valid 404 1m; server { : proxy_cache zone1; proxy_cache_key $proxy_scheme://$host$request_uri$is_args$args; proxy_pass $proxy_scheme://${Origin Server}; } } OHJOYඪ४ͷOHY@IUUQ@QSPYZ@NPEVMFΛར༻ [POFΛͬͯΩϟογϡ͢Δ ΩϟογϡϞʔυͷ࣮
http { : proxy_cache_path /var/cache/nginx/cache levels=1:2 \ keys_zone=zone1:1024m inactive=10m; proxy_cache_valid
200 10m; proxy_cache_valid 404 1m; server { : proxy_cache zone1; proxy_cache_key $proxy_scheme://$host$request_uri$is_args$args; proxy_pass $proxy_scheme://${Origin Server}; } } OHJOYඪ४ͷOHY@IUUQ@QSPYZ@NPEVMFΛར༻ Ωϟογϡͷอଘɾ୳ࡧͷΩʔ ΩϟογϡϞʔυͷ࣮
ΩϟογϡϞʔυͷ࣮ http { : proxy_cache_path /var/cache/nginx/cache levels=1:2 \ keys_zone=zone1:1024m inactive=10m;
proxy_cache_valid 200 10m; proxy_cache_valid 404 1m; server { : proxy_cache zone1; proxy_cache_key $proxy_scheme://$host$request_uri$is_args$args; proxy_pass $proxy_scheme://${Origin Server}; } } OHJOYඪ४ͷOHY@IUUQ@QSPYZ@NPEVMFΛར༻ Ωϟογϡ͕ͳ͍߹ɾ༗ޮظݶΕͷ߹ʹ ΞΫηε͢ΔΦϦδϯαʔό
ΩϟογϡϞʔυͷ࣮ http { : server { : location /login {
proxy_no_cache 1; proxy_cache_bypass 1; } } } OHJOYඪ४ͷOHY@IUUQ@QSPYZ@NPEVMFΛར༻ Ωϟογϡ͠ͳ͍ ΩϟογϡΛ୳ࡧ͠ͳ͍
Ωϟογϡػೳ : location / { : set $do_not_cache 0; if
($http_cookie ~ '(wordpress_|comment_author|wp-postpass)') { set $do_not_cache 1; } proxy_no_cache $do_not_cache; proxy_cache_bypass $do_not_cache; proxy_cache zone1; proxy_cache_key "$proxy_scheme://$host$request_uri$is_args$args"; proxy_pass $proxy_scheme://${Origin Server}; } DPPLJFʹಛఆͷจࣈྻ͕ ͋Δ࣌Ωϟογϡ͠ͳ͍ 81Ωϟογϡػೳͷྫ Ұ෦ ɿ
ͬͯΔ͠ ͋Μ·໘ന͘ͳ͍Ͱ͢ΑͶʂ
Ҏ߱ͰɺϨϯαόʹ͓͚Δ ՝Λόʔϯͱղܾ͢Δ ιϑτΣΞͷΛ ͍͖ͯ͠·͢
υϝΠϯʹԠͨ͡ ػೳͷϋϯυϦϯάͷ࣮
Γ͍ͨ͜ͱ 3FWFSTF1SPYZ 8FSWFS *OUFSOFU 8FSWFS IUUQTTJUFBDPN 4JUF" 4JUF#
4JUF$ 4JUF% ͓٬༷ͷίϯςϯπ $BDIF4FSWFS PS ίϯςϯπΩϟογϡػೳ 0/ʁ0''ʁ ΩϟογϡͷϞʔυ 81Ωϟογϡʁ ੩తΩϟογϡʁ
ͲͷΑ͏ʹ࣮͢Δ͔ʁ
طଘͷߏΛ͏গ͠ৄ͘͠ 3FWFSTF1SPYZ 8FSWFS *OUFSOFU 8FSWFS 4JUF" 4JUF# 4JUF$ 4JUF% ͓٬༷ͷίϯςϯπ
3FWFSTF1SPYZ 8FSWFS *OUFSOFU 8FSWFS 4JUF" 4JUF# 4JUF$ 4JUF% ͓٬༷ͷίϯςϯπ
ඦ طଘͷߏΛ͏গ͠ৄ͘͠
3FWFSTF1SPYZ 8FSWFS *OUFSOFU 8FSWFS 4JUF" 4JUF# 4JUF$ 4JUF% ͓٬༷ͷίϯςϯπ
ສαΠτ طଘͷߏΛ͏গ͠ৄ͘͠
3FWFSTF1SPYZ 8FSWFS *OUFSOFU 8FSWFS 4JUF" 4JUF# 4JUF$ 4JUF% ͓٬༷ͷίϯςϯπ
සൟʹ૿ݮ͢Δ طଘͷߏΛ͏গ͠ৄ͘͠
Ϩϯλϧαʔόͷ߹ 3FWFSTF1SPYZ 8FSWFS *OUFSOFU 8FSWFS 4JUF" 4JUF# 4JUF$ 4JUF%
େྔͷ૿ݮ͢ΔυϝΠϯΛ ͲͷΑ͏ʹϓϩΩγ͍ͯ͠Δ͔ʁ
େྔυϝΠϯͷϓϩΩγ 3FWFSTF1SPYZ 8FSWFS *OUFSOFU 8FSWFS IUUQTTJUFBDPN 4JUF" 4JUF#
4JUF$ 4JUF% ͓٬༷ͷίϯςϯπ ສαΠτҎ্ͷ ϓϩΩγͷઃఆΛ ॻ͘ͷݱ࣮తͰͳ͍
େྔυϝΠϯͷಈతͳϓϩΩγ 3FWFSTF1SPYZ 8FSWFS *OUFSOFU 8FSWFS IUUQTTJUFBDPN 4JUF" 4JUF#
4JUF$ 4JUF% ͓٬༷ͷίϯςϯπ OHJOY OHY@NSVCZ
ฐࣾͷ!NBUTVNPUPSZ͕։ൃ͍ͯ͠Δ OHJOYʹΈࠐΉ͜ͱͰϓϩηεͷىಈ ϦΫΤετͷλΠϛϯάͰNSVCZͷεΫϦ ϓτΛ࣮ߦͰ͖Δ NSVCZΈࠐΈ͚ͷܰྔ3VCZ࣮ OHY@NSVCZ
େྔυϝΠϯͷಈతͳϓϩΩγ 3FWFSTF1SPYZ 8FSWFS *OUFSOFU 8FSWFS IUUQTTJUFBDPN 4JUF" 4JUF#
4JUF$ 4JUF% ͓٬༷ͷίϯςϯπ OHJOY OHY@NSVCZ
େྔυϝΠϯͷಈతͳϓϩΩγ 3FWFSTF1SPYZ 8FSWFS *OUFSOFU 8FSWFS IUUQTTJUFBDPN 4JUF" 4JUF#
4JUF$ 4JUF% ͓٬༷ͷίϯςϯπ υϝΠϯͱ8FSWFSͷඥ͚ͮ σʔλϕʔε υϝΠϯTJUFBDPN αʔό8FSWFS OHJOY OHY@NSVCZ
େྔυϝΠϯͷಈతͳϓϩΩγ 3FWFSTF1SPYZ 8FSWFS *OUFSOFU 8FSWFS IUUQTTJUFBDPN 4JUF" 4JUF#
4JUF$ 4JUF% ͓٬༷ͷίϯςϯπ υϝΠϯͱ8FSWFSͷඥ͚ͮ σʔλϕʔε υϝΠϯTJUFBDPN αʔό8FSWFS OHJOY OHY@NSVCZ NSVCZΛͬͯ ίϯςϯπΩϟογϡػೳͷ ϋϯυϦϯάΛߦ͏ʂ
ػೳͷϋϯυϦϯά 3FWFSTF1SPYZ 8FSWFS *OUFSOFU 8FSWFS IUUQTTJUFBDPN 4JUF" 4JUF#
4JUF$ 4JUF% ͓٬༷ͷίϯςϯπ $BDIF4FSWFS PS ίϯςϯπΩϟογϡػೳ 0/ʁ0''ʁ ΩϟογϡͷϞʔυ 81Ωϟογϡʁ ੩తΩϟογϡʁ ίϯςϯπΩϟογϡػೳ 0/ʁ0''ʁ ΩϟογϡͷϞʔυ 81Ωϟογϡʁ ੩తΩϟογϡʁ 3FWFSTF1SPYZ 8FSWFS $BDIF4FSWFS
ػೳͷϋϯυϦϯά 3FWFSTF1SPYZ 8FSWFS *OUFSOFU 8FSWFS IUUQTTJUFBDPN 4JUF" 4JUF#
4JUF$ 4JUF% ͓٬༷ͷίϯςϯπ $BDIF4FSWFS σʔλϕʔε υϝΠϯTJUFBDPN αʔό8FSWFS ΩϟογϡPO ΩϟογϡλΠϓ81
ػೳͷϋϯυϦϯά 3FWFSTF1SPYZ 8FSWFS *OUFSOFU 8FSWFS IUUQTTJUFBDPN 4JUF" 4JUF#
4JUF$ 4JUF% ͓٬༷ͷίϯςϯπ $BDIF4FSWFS σʔλϕʔε υϝΠϯTJUFBDPN αʔό8FSWFS ΩϟογϡPO ΩϟογϡλΠϓ81 ΩϟογϡͷϞʔυ 81Ωϟογϡʁ ੩తΩϟογϡʁ ΩϟογϡͷϞʔυ 81Ωϟογϡʁ ੩తΩϟογϡʁ
ػೳͷϋϯυϦϯά 3FWFSTF1SPYZ 8FSWFS *OUFSOFU 8FSWFS IUUQTTJUFBDPN 4JUF" 4JUF#
4JUF$ 4JUF% ͓٬༷ͷίϯςϯπ $BDIF4FSWFS σʔλϕʔε ΩϟογϡͷϞʔυ 81PS੩త ʹΑͬͯڍಈΛม͍ͨ Ωϟογϡର֎ ظݶΕͷ߹ʹ ΞΫηε͢Δ ΦϦδϯαʔόͷใ υϝΠϯTJUFBDPN αʔό8FSWFS ΩϟογϡPO ΩϟογϡλΠϓ81
ػೳͷϋϯυϦϯά 3FWFSTF1SPYZ 8FSWFS *OUFSOFU 8FSWFS IUUQTTJUFBDPN 4JUF" 4JUF#
4JUF$ 4JUF% ͓٬༷ͷίϯςϯπ $BDIF4FSWFS σʔλϕʔε OHY@NSVCZ υϝΠϯTJUFBDPN αʔό8FSWFS ΩϟογϡPO ΩϟογϡλΠϓ81
ػೳͷϋϯυϦϯά 3FWFSTF1SPYZ 8FSWFS *OUFSOFU 8FSWFS IUUQTTJUFBDPN 4JUF" 4JUF#
4JUF$ 4JUF% ͓٬༷ͷίϯςϯπ $BDIF4FSWFS σʔλϕʔε υϝΠϯTJUFBDPN αʔό8FSWFS ΩϟογϡPO ΩϟογϡλΠϓ81 OHY@NSVCZ OHY@NSVCZΛ͑ ͬͱεϚʔτʹͰ͖Δ
ػೳͷϋϯυϦϯά 3FWFSTF1SPYZ 8FSWFS *OUFSOFU 8FSWFS IUUQTTJUFBDPN 4JUF" 4JUF#
4JUF$ 4JUF% ͓٬༷ͷίϯςϯπ $BDIF4FSWFS σʔλϕʔε OHY@NSVCZ υϝΠϯTJUFBDPN αʔό8FSWFS ΩϟογϡPO ΩϟογϡλΠϓ81 3FWFSTF1SPYZ σʔλϕʔε υϝΠϯTJUFBDPN αʔό8FSWFS ΩϟογϡPO ΩϟογϡλΠϓ81 %#͔Βऔಘͨ͠σʔλΛ
ػೳͷϋϯυϦϯά 3FWFSTF1SPYZ 8FSWFS *OUFSOFU 8FSWFS IUUQTTJUFBDPN 4JUF" 4JUF#
4JUF$ 4JUF% ͓٬༷ͷίϯςϯπ $BDIF4FSWFS σʔλϕʔε OHY@NSVCZ υϝΠϯTJUFBDPN αʔό8FSWFS ΩϟογϡPO ΩϟογϡλΠϓ81 σʔλϕʔε υϝΠϯTJUFBDPN αʔό8FSWFS ΩϟογϡPO ΩϟογϡλΠϓ81 3FWFSTF1SPYZ $BDIF4FSWFS %#͔Βऔಘͨ͠σʔλΛ NSVCZͰ IUUQϔομʹ ༩ͯ͠ൖ )551ϔομ
ػೳͷϋϯυϦϯά 3FWFSTF1SPYZ OHJOY OHY@NSVCZ 8FSWFS 8FSWFS 4JUF" 4JUF# 4JUF$ 4JUF%
$BDIF4FSWFS IUUQTTJUFBDPN σʔλϕʔε αʔό8FSWFS ΩϟογϡPO ΩϟογϡλΠϓ81
ػೳͷϋϯυϦϯά 3FWFSTF1SPYZ OHJOY OHY@NSVCZ 8FSWFS 8FSWFS 4JUF" 4JUF# 4JUF$ 4JUF%
$BDIF4FSWFS IUUQTTJUFBDPN σʔλϕʔε IUUQϔομΛՃ αʔό8FSWFS ΩϟογϡPO ΩϟογϡλΠϓ81 9-0-*10161453&".8FC4FSWFS 9-0-*101$"$)&5:1&81 h = Nginx::Headers_in.new h['X-LOLIPOP-UPSTREAM'] = 'Web Server1' h['X-LOLIPOP-CACHE-TYPE'] = 'WP' ࣮ࡍ%#͔Βऔಘͨ͠
ػೳͷϋϯυϦϯά 3FWFSTF1SPYZ OHJOY OHY@NSVCZ 8FSWFS 8FSWFS 4JUF" 4JUF# 4JUF$ 4JUF%
$BDIF4FSWFS IUUQTTJUFBDPN σʔλϕʔε αʔό8FSWFS ΩϟογϡPO ΩϟογϡλΠϓ81 9-0-*10161453&".8FC4FSWFS 9-0-*101$"$)&5:1&81 if ($http_x_lolipop_cache_type = "WP") { # WPΩϟογϡػೳͷڍಈ : } IUUQϔομΛՃ IUUQϔομΛͱʹ ΩϟογϡػೳͷڍಈΛมߋ
ػೳͷϋϯυϦϯά 3FWFSTF1SPYZ OHJOY OHY@NSVCZ 8FSWFS 8FSWFS 4JUF" 4JUF# 4JUF$ 4JUF%
$BDIF4FSWFS IUUQTTJUFBDPN σʔλϕʔε IUUQϔομΛͱʹϓϩΩγ αʔό8FSWFS ΩϟογϡPO ΩϟογϡλΠϓ81 9-0-*10161453&".8FC4FSWFS 9-0-*101$"$)&5:1&81 IUUQϔομΛͱʹ ΩϟογϡػೳͷڍಈΛมߋ proxy_pass $proxy_scheme://$http_x_lolipop_upstream; IUUQϔομΛՃ
ػೳͷϋϯυϦϯά 3FWFSTF1SPYZ OHJOY OHY@NSVCZ 8FSWFS 8FSWFS 4JUF" 4JUF# 4JUF$ 4JUF%
$BDIF4FSWFS IUUQTTJUFBDPN σʔλϕʔε IUUQϦΫΤετϔομΛՃ IUUQϦΫΤετϔομΛͱʹϓϩΩγ αʔό8FSWFS ΩϟογϡPO ΩϟογϡλΠϓ81 9-0-*10161453&".8FC4FSWFS 9-0-*101$"$)&5:1&81 IUUQϦΫΤετϔομΛͱ ʹΩϟογϡػೳͷڍಈΛมߋ proxy_pass $proxy_scheme://$http_x_lolipop_upstream; NSVCZͰσʔλϕʔε͔Βऔಘͨ͠ΛIUUQ ϔομʹຒΊࠐΉ $BDIF4FSWFSଆຒΊࠐ·ΕͨIUUQϔομΛ ࢀর͚ͩͰυϝΠϯຖͷৼΔ͍ͷ੍ޚ͕Մೳ IUUQϔομʹΑΔใͷͳͷͰɺ$BDIF 4FSWFS௨ৗͷOHJOYͰΑ͍ͷͰγϯϓϧ
3FWFSTF1SPYZ OHJOY OHY@NSVCZ σʔλϕʔε ϦΫΤετ ύϑΥʔϚϯεେৎʁ
ύϑΥʔϚϯεྼԽΛ࠷খݶʹ ͑ΔςΫχοΫΛ͝հ͠·͢ʂ
Ωϟογϡͷಋೖ
Ωϟογϡͷಋೖ 3FWFSTF1SPYZ .Z42- ϦΫΤετ 3FEJT OHJOY OHY@NSVCZ
Ωϟογϡͷಋೖ 3FWFSTF1SPYZ .Z42- ϦΫΤετ 3FEJT OHJOY OHY@NSVCZ ᶃ ᶃ3FEJT͔ΒใΛऔಘ
Ωϟογϡͷಋೖ 3FWFSTF1SPYZ .Z42- ϦΫΤετ 3FEJT OHJOY OHY@NSVCZ ᶃ ᶄ ᶃ3FEJT͔ΒใΛऔಘ
ᶄᶃͰଘࡏ͠ͳ͚Ε.Z42-͔ΒใΛऔಘ
Ωϟογϡͷಋೖ 3FWFSTF1SPYZ .Z42- ϦΫΤετ 3FEJT OHJOY OHY@NSVCZ ᶃ ᶅ ᶄ
ᶃ3FEJT͔ΒใΛऔಘ ᶄᶃͰଘࡏ͠ͳ͚Ε.Z42-͔ΒใΛऔಘ ᶅᶄͰऔಘͨ͠ใΛ࣍ճϦΫΤετͷͨΊʹ 3FEJTʹॻ͖ࠐΈ
ϖύϘͰɺσʔλετΞΛ ֊Խͯ͠Λ͍͍ײ͡ʹ͢Δ NSCHFNΛެ։͍ͯ͠·͢ ֦ுػߏ 3VCZͰ͍͏HFN
NSVCZNTE MPDBMNFNDBDIF ΠϯϝϞϦ,74 3FEJT .Z42- ॲཧίετ͕͍ॱʹGFUDI ࣍ճҎ߱ͷGFUDIͷͨΊʹΩϟογϡ .VMUJ4UBHF%BUBTUPSF https://github.com/pepabo/mruby-msd NTE͕͍͍ײ͡ʹߴͳσʔλετΞ͔ΒGFUDI͢Δ
NSVCZNTE redis = Msd::Store::Redis.new mysql = Msd::Store::MySQL.new( 'SELECT host FROM
table WHERE domain = ?', 'localhost', 'root', 'password', 'DBName' ) msd = Msd::Client.new msd.configure do |c| c.stores = [redis, mysql] end msd.fetch('site-a.com') # => "Web Server1"
NSVCZNTE redis = Msd::Store::Redis.new mysql = Msd::Store::MySQL.new( 'SELECT host FROM
table WHERE domain = ?', 'localhost', 'root', 'password', 'DBName' ) msd = Msd::Client.new msd.configure do |c| c.stores = [redis, mysql] end msd.fetch('site-a.com') # => "Web Server1" ଓ
NSVCZNTE redis = Msd::Store::Redis.new mysql = Msd::Store::MySQL.new( 'SELECT host FROM
table WHERE domain = ?', 'localhost', 'root', 'password', 'DBName' ) msd = Msd::Client.new msd.configure do |c| c.stores = [redis, mysql] end msd.fetch('site-a.com') # => "Web Server1" ଓ σʔλετΞΛొ
NSVCZNTE redis = Msd::Store::Redis.new mysql = Msd::Store::MySQL.new( 'SELECT host FROM
table WHERE domain = ?', 'localhost', 'root', 'password', 'DBName' ) msd = Msd::Client.new msd.configure do |c| c.stores = [redis, mysql] end msd.fetch('site-a.com') # => "Web Server1" ଓ σʔλετΞΛొ σʔλΛΩϟογϡͭͭ͠GFUDI͢Δ
3FWFSTF1SPYZ OHJOY OHY@NSVCZ .Z42- 3FEJT ϦΫΤετ ϦΫΤετຖʹίωΫγϣϯΛ ுΔͷίετ͕ߴ͍ ίωΫγϣϯ
ίωΫγϣϯͷ͍ճ͠
OHY@NSVCZʹNSVCZͷϑοΫϙΠϯτ͕ଘࡏ͢Δ https://github.com/matsumotory/ngx_mruby/tree/master/docs/directives mruby_init_worker /path/to/init.rb; mruby_init_worker_code " # ίʔυ "; mruby_set
$variable /path/to/variable.rb; mruby_access_handler /path/to/access.rb; mruby_access_handler /path/to/access.rb cache; nginx.conf # Workerϓϩηεىಈ࣌ # cacheΦϓγϣϯΛ͚ͭΔͱnginxىಈ࣌ʹmrubyΛόΠτίʔυ # _code ͷσΟϨΫςΟϒΠϯϥΠϯͰmrubyͷίʔυΛهड़Ͱ͖Δ # mrubyͷ࣮ߦ݁ՌΛnginxͷมʹ֨ೲ͢Δ # ϦΫΤετ։࢝࣌ʹ࣮ߦ͞ΕΔ
OHY@NSVCZʹNSVCZͷϑοΫϙΠϯτ͕ଘࡏ͢Δ https://github.com/matsumotory/ngx_mruby/tree/master/docs/directives mruby_init_worker /path/to/init.rb; mruby_init_worker_code " # ίʔυ "; mruby_set
$variable /path/to/variable.rb; mruby_access_handler /path/to/access.rb; mruby_access_handler /path/to/access.rb cache; nginx.conf # Workerϓϩηεىಈ࣌ # cacheΦϓγϣϯΛ͚ͭΔͱnginxىಈ࣌ʹmrubyΛόΠτίʔυ # _code ͷσΟϨΫςΟϒΠϯϥΠϯͰmrubyͷίʔυΛهड़Ͱ͖Δ # mrubyͷ࣮ߦ݁ՌΛnginxͷมʹ֨ೲ͢Δ # ϦΫΤετ։࢝࣌ʹ࣮ߦ͞ΕΔ
OHY@NSVCZʹNSVCZͷϑοΫϙΠϯτ͕ଘࡏ͢Δ https://github.com/matsumotory/ngx_mruby/tree/master/docs/directives mruby_init_worker /path/to/init.rb; mruby_init_worker_code " # ίʔυ "; mruby_set
$variable /path/to/variable.rb; mruby_access_handler /path/to/access.rb; mruby_access_handler /path/to/access.rb cache; nginx.conf # Workerϓϩηεىಈ࣌ # cacheΦϓγϣϯΛ͚ͭΔͱnginxىಈ࣌ʹmrubyΛόΠτίʔυ # _code ͷσΟϨΫςΟϒΠϯϥΠϯͰmrubyͷίʔυΛهड़Ͱ͖Δ # mrubyͷ࣮ߦ݁ՌΛnginxͷมʹ֨ೲ͢Δ # ϦΫΤετ։࢝࣌ʹ࣮ߦ͞ΕΔ
OHY@NSVCZʹNSVCZͷϑοΫϙΠϯτ͕ଘࡏ͢Δ https://github.com/matsumotory/ngx_mruby/tree/master/docs/directives mruby_init_worker /path/to/init.rb; mruby_init_worker_code " # ίʔυ "; mruby_set
$variable /path/to/variable.rb; mruby_access_handler /path/to/access.rb; mruby_access_handler /path/to/access.rb cache; nginx.conf # Workerϓϩηεىಈ࣌ # cacheΦϓγϣϯΛ͚ͭΔͱnginxىಈ࣌ʹmrubyΛόΠτίʔυ # _code ͷσΟϨΫςΟϒΠϯϥΠϯͰmrubyͷίʔυΛهड़Ͱ͖Δ # mrubyͷ࣮ߦ݁ՌΛnginxͷมʹ֨ೲ͢Δ # ϦΫΤετ։࢝࣌ʹ࣮ߦ͞ΕΔ
OHY@NSVCZʹNSVCZͷϑοΫϙΠϯτ͕ଘࡏ͢Δ https://github.com/matsumotory/ngx_mruby/tree/master/docs/directives mruby_init_worker /path/to/init.rb; mruby_init_worker_code " # ίʔυ "; mruby_set
$variable /path/to/variable.rb; mruby_access_handler /path/to/access.rb; mruby_access_handler /path/to/access.rb cache; nginx.conf # Workerϓϩηεىಈ࣌ # cacheΦϓγϣϯΛ͚ͭΔͱnginxىಈ࣌ʹmrubyΛόΠτίʔυ # _code ͷσΟϨΫςΟϒΠϯϥΠϯͰmrubyͷίʔυΛهड़Ͱ͖Δ # mrubyͷ࣮ߦ݁ՌΛnginxͷมʹ֨ೲ͢Δ # ϦΫΤετ։࢝࣌ʹ࣮ߦ͞ΕΔ
ίωΫγϣϯΛ͍ճ͢ https://github.com/matsumotory/ngx_mruby/tree/master/docs/directives mruby_init_worker /path/to/init.rb; mruby_init_worker_code " # ίʔυ "; mruby_set
$variable /path/to/variable.rb; mruby_access_handler /path/to/access.rb; mruby_access_handler /path/to/access.rb cache; nginx.conf # Workerϓϩηεىಈ࣌ # cacheΦϓγϣϯΛ͚ͭΔͱnginxىಈ࣌ʹmrubyΛόΠτίʔυ # _code ͷσΟϨΫςΟϒΠϯϥΠϯͰmrubyͷίʔυΛهड़Ͱ͖Δ # mrubyͷ࣮ߦ݁ՌΛnginxͷมʹ֨ೲ͢Δ # ϦΫΤετ։࢝࣌ʹ࣮ߦ͞ΕΔ mruby_init_worker /path/to/init.rb; # Workerϓϩηεىಈ࣌ # ϦΫΤετ։࢝࣌ʹ࣮ߦ͞ΕΔ mruby_access_handler /path/to/access.rb;
OHJOY 3FEJT 8PSLFSىಈ࣌ʹ3FEJTͱଓ͠ίωΫγϣϯΛอଘ͢Δ
OHJOY XPSLFS 3FEJT ίωΫγϣϯ 8PSLFSىಈ࣌ʹ3FEJTͱଓ͠ίωΫγϣϯΛอଘ͢Δ 8PSLFSϓϩηεͷ ىಈ
OHJOY XPSLFS 3FEJT mruby_init_worker_code " Userdata.new.redis = Redis.new('127.0.0.1', 6379) ";
ίωΫγϣϯ 8PSLFSىಈ࣌ʹ3FEJTͱଓ͠ίωΫγϣϯΛอଘ͢Δ 8PSLFSϓϩηεͷ ىಈ NSVCZVTFSEBUBͱ͍͏NSCHFNΛͬͯɺNSVCZεΫϦϓτ͔Βࢀর Ͱ͖ͳ͍NSVCZͷάϩʔόϧมʹ3FEJTͷίωΫγϣϯΛ֨ೲ ൺֱత҆શʹάϩʔόϧมʹΦϒδΣΫτΛ֨ೲͰ͖Δ
OHJOY XPSLFS 3FEJT 8PSLFSىಈ࣌ʹଓͨ͠3FEJTͷίωΫγϣϯΛ͏
OHJOY XPSLFS 3FEJT 8PSLFSىಈ࣌ʹଓͨ͠3FEJTͷίωΫγϣϯΛ͏ ϦΫΤετ ΞΫηε mruby_access_handler_code " Userdata.new.redis.get('hoge') ";
OHJOY XPSLFS 3FEJT 8PSLFSىಈ࣌ʹଓͨ͠3FEJTͷίωΫγϣϯΛ͏ ϦΫΤετ ΞΫηε mruby_access_handler_code " Userdata.new.redis.get('hoge') ";
8PSLFSىಈ࣌ʹଓͨ͠ίωΫγϣϯΛऔΓग़ͯ͠ɺར༻͢Δɻ NSVCZͷΠϯλϓϦλ͕8PSLFSͰ͍ճ͞Ε͍ͯΔͨΊΞΫηε͕Մೳ ͦͷͨΊɺผͷ8PSLFS͔ΒผͷΠϯλϓϦλͳͷͰࢀরͰ͖ͳ͍
OHJOY XPSLFS 3FEJT 8PSLFSىಈ࣌ʹଓͨ͠3FEJTͷίωΫγϣϯΛ͏ ϦΫΤετ ΞΫηε mruby_access_handler_code " Userdata.new.redis.get('hoge') ";
ίωΫγϣϯΛுͬͨޙʹ3FEJT͕࠶ىಈ͞ΕΔͳͲɺ ίωΫγϣϯ͕அ͞ΕΔ͜ͱΛఆͯ͠࠶ଓॲཧͷ࣮ඞཁɻ NSVCZNTE࣮ࡁΈ
εέʔϥϏϦςΟ ߴՄ༻ੑ
εέʔϥϏϦςΟ ߴՄ༻ੑ ໘ͳखॱͳ͘؆୯ɺࣗಈʹ
3FWFSTF1SPYZ $BDIF 4FSWFS $BDIF 4FSWFS $BDIF 4FSWFS $BDIF 4FSWFS $BDIF
4FSWFS $BDIF 4FSWFS ϓϩΩγ͕ਖ਼ৗͳαʔόΛೝࣝͯ͠ ಈతʹϓϩΩγઌΛܾΊΔ
$POTVM OHY@NSVCZ CZ)BTIJ$PSQ
)BTIJ$PSQ͕։ൃ͍ͯ͠ΔιϑτΣΞ ػೳɿ αʔϏεσ ΟεΧόϦ ϔϧενΣοΫ ͳͲͳͲ DPOTVM
DPOTVMͷΠϕϯτʹൃՐͯ͠ɺ༧Ί༻ҙ͠ ͨςϯϓϨʔτΛͬͯϑΝΠϧΛੜͰ ͖Δɻ αʔόͷ૿ݮ ϔϧενΣοΫͷ݁Ռ DPOTVMUFNQMBUF
$POTVMΛ͏ͱͲ͏ͳΔʁ
3FWFSTF1SPYZ DPOTVM DPOTVM DBDIFTFSWFS DPOTVM DBDIFTFSWFS $POTVMΛ͏ͱͲ͏ͳΔʁ
3FWFSTF1SPYZ DPOTVM DPOTVM DBDIFTFSWFS DPOTVM DBDIFTFSWFS TFSWJDFDBDIFTFSWFS $POTVMͰTFSJWDFΛఆٛ ϔϧενΣοΫ TFSWJDFΛఆٛͯ͠ϔϧενΣοΫ͕Ͱ͖Δ
{ "service": { "name": "cache-server", "checks": [ { "script": "ϔϧενΣοΫίϚϯυ", } ] } }
3FWFSTF1SPYZ DPOTVM DPOTVM DBDIFTFSWFS DPOTVM DBDIFTFSWFS # curl -s http://localhost:8500/v1/health/service/
\ cache-server | jq '.[].Node.Node' "cache-server-1" "cache-server-2" TFSWJDFDBDIFTFSWFS ϔϧενΣοΫ DPOTVM"1*ʹΞΫηε͢ΔͱαʔϏεʹଐ͢Δ ϊʔυΛಘΔ͜ͱ͕Ͱ͖Δɻ ϔϧενΣοΫ݁ՌಘΔ͜ͱ͕Ͱ͖Δɻ αʔϏεʹଐ͢ΔϊʔυͷҰཡϔϧενΣοΫ݁ՌΛಘΒΕΔ
DPOTVMUFNQMBUFΛͬͯɺ ಈతʹϑΝΠϧΛੜ͢Δ
3FWFSTF1SPYZ OHJOY XJUIOHY@NSVCZ DPOTVM DPOTVM DBDIFTFSWFS DPOTVM DBDIFTFSWFS TFSWJDFDBDIFTFSWFS DPOTVMUFNQMBUFΛͬͯɺಈతʹϑΝΠϧΛੜ͢Δ
DPOTVMUFNQMBUF
3FWFSTF1SPYZ OHJOY XJUIOHY@NSVCZ DPOTVM DPOTVM DBDIFTFSWFS DPOTVM DBDIFTFSWFS TFSWJDFDBDIFTFSWFS DPOTVMUFNQMBUF
{{ range service "cache-server|passing" }} - {{ .Address }} {{ end }} servers.yml.ctmpl DPOTVMUFNQMBUFΛͬͯɺಈతʹϑΝΠϧΛੜ͢Δ ϩʔυ ςϯϓϨʔτϑΝΠϧ
3FWFSTF1SPYZ OHJOY XJUIOHY@NSVCZ DPOTVM DPOTVM DBDIFTFSWFS DPOTVM DBDIFTFSWFS TFSWJDFDBDIFTFSWFS DPOTVMUFNQMBUF
{{ range service "cache-server|passing" }} - {{ .Address }} {{ end }} servers.yml.ctmpl TFSWJDF ϔϧενΣοΫঢ়ଶ OPEFͷ*1ΞυϨε DPOTVMUFNQMBUFΛͬͯɺಈతʹϑΝΠϧΛੜ͢Δ ϩʔυ ςϯϓϨʔτϑΝΠϧ
3FWFSTF1SPYZ OHJOY XJUIOHY@NSVCZ DPOTVM DPOTVM DBDIFTFSWFS DPOTVM DBDIFTFSWFS TFSWJDFDBDIFTFSWFS DPOTVMUFNQMBUF
{{ range service "cache-server|passing" }} - {{ .Address }} {{ end }} - cache-server-1ͷIPΞυϨε - cache-server-2ͷIPΞυϨε servers.yml.ctmpl servers.yml DPOTVMUFNQMBUFΛͬͯɺಈతʹϑΝΠϧΛੜ͢Δ ϩʔυ औಘ ੜ ςϯϓϨʔτϑΝΠϧ
3FWFSTF1SPYZ OHJOY XJUIOHY@NSVCZ DPOTVM DPOTVM DBDIFTFSWFS DPOTVM DBDIFTFSWFS TFSWJDFDBDIFTFSWFS DPOTVMUFNQMBUF
{{ range service "cache-server|passing" }} - {{ .Address }} {{ end }} - cache-server-1ͷIPΞυϨε - cache-server-2ͷIPΞυϨε - cache-server-3ͷIPΞυϨε servers.yml.ctmpl servers.yml αʔόΛ૿ઃͨ͠ͱ͖ DPOTVM DBDIFTFSWFS ςϯϓϨʔτϑΝΠϧ
3FWFSTF1SPYZ OHJOY XJUIOHY@NSVCZ DPOTVM DPOTVM DBDIFTFSWFS DPOTVM DBDIFTFSWFS TFSWJDFDBDIFTFSWFS DPOTVMUFNQMBUF
{{ range service "cache-server|passing" }} - {{ .Address }} {{ end }} - cache-server-1ͷIPΞυϨε - cache-server-2ͷIPΞυϨε servers.yml.ctmpl servers.yml αʔό͕μϯͨ͠ͱ͖ ϔϧενΣοΫ ςϯϓϨʔτϑΝΠϧ
αʔόͷ૿ݮ࣌ʹ ਖ਼ৗͳαʔόҰཡΛ ಈతੜ͢Δ͜ͱ͕Ͱ͖ͨʂ
NSVCZΛΈ߹ͤͯ ಈతʹઃఆΛಡΈࠐΉ
3FWFSTF1SPYZ OHJOY XJUIOHY@NSVCZ DPOTVM DPOTVM DBDIFTFSWFS DPOTVM DBDIFTFSWFS TFSWJDFDBDIFTFSWFS NSVCZΛΈ߹ͤͯಈతʹઃఆΛಡΈࠐΉ
DPOTVMUFNQMBUF mruby_init_worker_code " servers = YAML.load( File.open('servers.yml').read ) Userdata.new.servers = servers "; nginx.conf DPOTVM DBDIFTFSWFS
3FWFSTF1SPYZ OHJOY XJUIOHY@NSVCZ DPOTVM DPOTVM DBDIFTFSWFS DPOTVM DBDIFTFSWFS TFSWJDFDBDIFTFSWFS DPOTVMUFNQMBUF
mruby_init_worker_code " servers = YAML.load( File.open('servers.yml').read ) Userdata.new.servers = servers "; nginx.conf DPOTVM DBDIFTFSWFS XPSLFSϓϩηεىಈ࣌ʹ ੜ͞Εͨ:".-Λϩʔυ *1ΞυϨεͷྻΛอଘ NSVCZΛΈ߹ͤͯಈతʹઃఆΛಡΈࠐΉ
3FWFSTF1SPYZ OHJOY XJUIOHY@NSVCZ DPOTVM DPOTVM DBDIFTFSWFS DPOTVM DBDIFTFSWFS TFSWJDFDBDIFTFSWFS DPOTVMUFNQMBUF
mruby_init_worker_code " servers = YAML.load( File.open('servers.yml').read ) Userdata.new.servers = servers "; nginx.conf DPOTVM DBDIFTFSWFS XPSLFSϓϩηεىಈ࣌ʹ ੜ͞Εͨ:".-Λϩʔυ *1ΞυϨεͷྻΛอଘ DPOTVMUFNQMBUFͰϑΝΠϧੜޙʹOHJOYSFMPBEΛ࣮ࢪͯ͠ϩʔυ͢Δʂ OHJOY SFMPBE NSVCZΛΈ߹ͤͯಈతʹઃఆΛಡΈࠐΉ
NSVCZͷੈքʹϓϩΩγઌͷ αʔόҰཡΛ͢͜ͱ͕Ͱ͖ͨʂ
NSVCZͰಈతʹ6QTUSFBNΛ ܾఆ͢Δ
NSVCZͰಈతʹ6QTUSFBNΛܾఆ͢Δ 3FWFSTF1SPYZ DBDIFTFSWFS DBDIFTFSWFS DBDIFTFSWFS 8FC4FSWFS ίϯςϯπΩϟογϡػೳແޮ࣌
NSVCZͰಈతʹ6QTUSFBNΛܾఆ͢Δ 3FWFSTF1SPYZ DBDIFTFSWFS DBDIFTFSWFS DBDIFTFSWFS 8FC4FSWFS ίϯςϯπΩϟογϡػೳ༗ޮ࣌ ͲΕ͔̍
NSVCZΛΈ߹ͤͯಈతʹઃఆΛಡΈࠐΉ upstream dynamic_cache_server { server 127.0.0.1:80; mruby_upstream_keepalive 64; } mruby_set_code
$upstream " : if result.enable_contents_cache? servers = Userdata.new.servers port = Nginx::Connection.new.local_port index = SecureRandom.random_number(servers.size) upstream = Nginx::Upstream.new("dynamic_cache_server") upstream.server = "#{servers[index]}:#{port}" "dynamic_cache_server" else result.upstream end "; proxy_pass $upstream; # DB͔Βऔಘͨ͠ίϯςϯπΩϟογϡػೳͷར༻༗ແ # DB͔Βऔಘͨ͠υϝΠϯʹඥͮ͘Web Server nginx.conf
NSVCZΛΈ߹ͤͯಈతʹઃఆΛಡΈࠐΉ upstream dynamic_cache_server { server 127.0.0.1:80; mruby_upstream_keepalive 64; } mruby_set_code
$upstream " : if result.enable_contents_cache? servers = Userdata.new.servers port = Nginx::Connection.new.local_port index = SecureRandom.random_number(servers.size) upstream = Nginx::Upstream.new("dynamic_cache_server") upstream.server = "#{servers[index]}:#{port}" "dynamic_cache_server" else result.upstream end "; proxy_pass $upstream; # DB͔Βऔಘͨ͠ίϯςϯπΩϟογϡػೳͷར༻༗ແ # DB͔Βऔಘͨ͠υϝΠϯʹඥͮ͘Web Server μϛʔͷ6QTUSFBN OHY@NSVCZͰॻ͖͑Δ nginx.conf
NSVCZΛΈ߹ͤͯಈతʹઃఆΛಡΈࠐΉ upstream dynamic_cache_server { server 127.0.0.1:80; mruby_upstream_keepalive 64; } mruby_set_code
$upstream " : if result.enable_contents_cache? servers = Userdata.new.servers port = Nginx::Connection.new.local_port index = SecureRandom.random_number(servers.size) upstream = Nginx::Upstream.new("dynamic_cache_server") upstream.server = "#{servers[index]}:#{port}" "dynamic_cache_server" else result.upstream end "; proxy_pass $upstream; # DB͔Βऔಘͨ͠ίϯςϯπΩϟογϡػೳͷར༻༗ແ # DB͔Βऔಘͨ͠υϝΠϯʹඥͮ͘Web Server OHJOYͷมʹNSVCZͷ࣮ߦ݁ՌΛ֨ೲ͢Δ nginx.conf
NSVCZΛΈ߹ͤͯಈతʹઃఆΛಡΈࠐΉ upstream dynamic_cache_server { server 127.0.0.1:80; mruby_upstream_keepalive 64; } mruby_set_code
$upstream " : if result.enable_contents_cache? servers = Userdata.new.servers port = Nginx::Connection.new.local_port index = SecureRandom.random_number(servers.size) upstream = Nginx::Upstream.new("dynamic_cache_server") upstream.server = "#{servers[index]}:#{port}" "dynamic_cache_server" else result.upstream end "; proxy_pass $upstream; # DB͔Βऔಘͨ͠ίϯςϯπΩϟογϡػೳͷར༻༗ແ # DB͔Βऔಘͨ͠υϝΠϯʹඥͮ͘Web Server mruby_init_worker_code " servers = YAML.load( File.open('servers.yml').read ) Userdata.new.servers = servers "; ىಈ࣌ʹऔಘͨ͠$BDIF4FSWFSҰཡ nginx.conf
NSVCZΛΈ߹ͤͯಈతʹઃఆΛಡΈࠐΉ upstream dynamic_cache_server { server 127.0.0.1:80; mruby_upstream_keepalive 64; } mruby_set_code
$upstream " : if result.enable_contents_cache? servers = Userdata.new.servers port = Nginx::Connection.new.local_port index = SecureRandom.random_number(servers.size) upstream = Nginx::Upstream.new("dynamic_cache_server") upstream.server = "#{servers[index]}:#{port}" "dynamic_cache_server" else result.upstream end "; proxy_pass $upstream; # DB͔Βऔಘͨ͠ίϯςϯπΩϟογϡػೳͷར༻༗ແ # DB͔Βऔಘͨ͠υϝΠϯʹඥͮ͘Web Server ଓઌͷϙʔτ൪߸ nginx.conf
NSVCZΛΈ߹ͤͯಈతʹઃఆΛಡΈࠐΉ upstream dynamic_cache_server { server 127.0.0.1:80; mruby_upstream_keepalive 64; } mruby_set_code
$upstream " : if result.enable_contents_cache? servers = Userdata.new.servers port = Nginx::Connection.new.local_port index = SecureRandom.random_number(servers.size) upstream = Nginx::Upstream.new("dynamic_cache_server") upstream.server = "#{servers[index]}:#{port}" "dynamic_cache_server" else result.upstream end "; proxy_pass $upstream; # DB͔Βऔಘͨ͠ίϯςϯπΩϟογϡػೳͷར༻༗ແ # DB͔Βऔಘͨ͠υϝΠϯʹඥͮ͘Web Server μϛʔͰఆٛͨ͠6QTUSFBN nginx.conf
NSVCZΛΈ߹ͤͯಈతʹઃఆΛಡΈࠐΉ upstream dynamic_cache_server { server 127.0.0.1:80; mruby_upstream_keepalive 64; } mruby_set_code
$upstream " : if result.enable_contents_cache? servers = Userdata.new.servers port = Nginx::Connection.new.local_port index = SecureRandom.random_number(servers.size) upstream = Nginx::Upstream.new("dynamic_cache_server") upstream.server = "#{servers[index]}:#{port}" "dynamic_cache_server" else result.upstream end "; proxy_pass $upstream; # DB͔Βऔಘͨ͠ίϯςϯπΩϟογϡػೳͷར༻༗ແ # DB͔Βऔಘͨ͠υϝΠϯʹඥͮ͘Web Server 6QTUSFBNͷαʔόΛॻ͖͑Δ nginx.conf
NSVCZΛΈ߹ͤͯಈతʹઃఆΛಡΈࠐΉ upstream dynamic_cache_server { server 127.0.0.1:80; mruby_upstream_keepalive 64; } mruby_set_code
$upstream " : if result.enable_contents_cache? servers = Userdata.new.servers port = Nginx::Connection.new.local_port index = SecureRandom.random_number(servers.size) upstream = Nginx::Upstream.new("dynamic_cache_server") upstream.server = "#{servers[index]}:#{port}" "dynamic_cache_server" else result.upstream end "; proxy_pass $upstream; # DB͔Βऔಘͨ͠ίϯςϯπΩϟογϡػೳͷར༻༗ແ # DB͔Βऔಘͨ͠υϝΠϯʹඥͮ͘Web Server 6QTUSFBNͷαʔόΛॻ͖͑Δ ϥϯμϜʹΩϟογϡαʔόΛ1ฦ͢ nginx.conf
NSVCZΛΈ߹ͤͯಈతʹઃఆΛಡΈࠐΉ upstream dynamic_cache_server { server 127.0.0.1:80; mruby_upstream_keepalive 64; } mruby_set_code
$upstream " : if result.enable_contents_cache? servers = Userdata.new.servers port = Nginx::Connection.new.local_port index = SecureRandom.random_number(servers.size) upstream = Nginx::Upstream.new("dynamic_cache_server") upstream.server = "#{servers[index]}:#{port}" "dynamic_cache_server" else result.upstream end "; proxy_pass $upstream; # DB͔Βऔಘͨ͠ίϯςϯπΩϟογϡػೳͷར༻༗ແ # DB͔Βऔಘͨ͠υϝΠϯʹඥͮ͘Web Server ࠷ޙʹࢀরͨ͠ͷ͕มʹ֨ೲ͞ΕΔ nginx.conf
NSVCZΛΈ߹ͤͯಈతʹઃఆΛಡΈࠐΉ upstream dynamic_cache_server { server 127.0.0.1:80; mruby_upstream_keepalive 64; } mruby_set_code
$upstream " : if result.enable_contents_cache? servers = Userdata.new.servers port = Nginx::Connection.new.local_port index = SecureRandom.random_number(servers.size) upstream = Nginx::Upstream.new("dynamic_cache_server") upstream.server = "#{servers[index]}:#{port}" "dynamic_cache_server" else result.upstream end "; proxy_pass $upstream; # DB͔Βऔಘͨ͠ίϯςϯπΩϟογϡػೳͷར༻༗ແ # DB͔Βऔಘͨ͠υϝΠϯʹඥͮ͘Web Server ࠷ޙʹࢀরͨ͠ͷ͕มʹ֨ೲ͞ΕΔ ϓϩΩγ͢Δ nginx.conf
NSVCZΛΈ߹ͤͯಈతʹઃఆΛಡΈࠐΉ upstream dynamic_cache_server { server 127.0.0.1:80; mruby_upstream_keepalive 64; } mruby_set_code
$upstream " : if result.enable_contents_cache? servers = Userdata.new.servers port = Nginx::Connection.new.local_port index = SecureRandom.random_number(servers.size) upstream = Nginx::Upstream.new("dynamic_cache_server") upstream.server = "#{servers[index]}:#{port}" "dynamic_cache_server" else result.upstream end "; proxy_pass $upstream; # DB͔Βऔಘͨ͠ίϯςϯπΩϟογϡػೳͷར༻༗ແ # DB͔Βऔಘͨ͠υϝΠϯʹඥͮ͘Web Server ίϯςϯπΩϟογϡػೳ͕ແޮͷ߹ %#͔Βऔಘͨ͠8FC4FSWFSΛฦ͢ nginx.conf
DPOTVMͱOHY@NSVCZͷΈ߹ͤͰ αʔόͷ૿ݮʹ߹Θͤͯࣗಈతʹ ϓϩΩγઌΛܾఆ͢ΔΈ͕Ͱ͖ͨ
ޮతͳΩϟογϡ
ޮతͳΩϟογϡ ୯७ʹ$BDIF4FSWFSΛฒͯࢄ͢Δͱ 3FWFSTF1SPYZ $BDIF 4FSWFS $BDIF 4FSWFS $BDIF 4FSWFS $BDIF
4FSWFS $BDIF 4FSWFS $BDIF 4FSWFS 8FSWFS ΩϟογϡώοτԼ σΟεΫྖҬͷফඅ FYBNQMFDPN FYBNQMFDPN
ޮతͳΩϟογϡ υϝΠϯຖʹॲཧ͢Δ$BDIF4FSWFSΛݶఆ͍ͨ͠ 3FWFSTF1SPYZ $BDIF 4FSWFS $BDIF 4FSWFS $BDIF 4FSWFS $BDIF
4FSWFS $BDIF 4FSWFS $BDIF 4FSWFS 8FSWFS Ωϟογϡώοτ্ σΟεΫྖҬͷઅ FYBNQMFDPN FYBNQMFDPN
υϝΠϯຖʹΩϟογϡαʔόΛ ݶఆ͍͚ͨͩ͠Ͱͳ͘ ʴ αʔόͷεέʔϧʹࣗಈରԠ͍ͨ͠ ʴ Մ༻ੑΛҡ͍࣋ͨ͠
NSVCZͰ؆୯ͳΞϧΰϦζϜΛ࣮
3FWFSTF1SPYZ $BDIF 4FSWFS $BDIF 4FSWFS $BDIF 4FSWFS $BDIF 4FSWFS $BDIF
4FSWFS $BDIF 4FSWFS FYBNQMFDPN
3FWFSTF1SPYZ $BDIF 4FSWFS $BDIF 4FSWFS $BDIF 4FSWFS $BDIF 4FSWFS $BDIF
4FSWFS $BDIF 4FSWFS FYBNQMFDPN F Y B N Q M F D P N υϝΠϯͷઌ಄͔Β̑จࣈநग़
3FWFSTF1SPYZ $BDIF 4FSWFS $BDIF 4FSWFS $BDIF 4FSWFS $BDIF 4FSWFS $BDIF
4FSWFS $BDIF 4FSWFS FYBNQMFDPN F Y B N Q M F D P N ਐͷ"4$**ίʔυΛऔಘ υϝΠϯͷઌ಄͔Β̑จࣈநग़
3FWFSTF1SPYZ $BDIF 4FSWFS $BDIF 4FSWFS $BDIF 4FSWFS $BDIF 4FSWFS $BDIF
4FSWFS $BDIF 4FSWFS FYBNQMFDPN F Y B N Q M F D P N ਐͷ"4$**ίʔυΛ͢ υϝΠϯͷઌ಄͔Β̑จࣈநग़
3FWFSTF1SPYZ $BDIF 4FSWFS $BDIF 4FSWFS $BDIF 4FSWFS $BDIF 4FSWFS $BDIF
4FSWFS $BDIF 4FSWFS FYBNQMFDPN F Y B N Q M F D P N <> <> <> <> <> <> "SSBZ DPOTVMUFNQMBUFʹΑΔ:".-ੜˠ:".-MPBE ˠ"SSBZ
3FWFSTF1SPYZ $BDIF 4FSWFS $BDIF 4FSWFS $BDIF 4FSWFS $BDIF 4FSWFS $BDIF
4FSWFS $BDIF 4FSWFS FYBNQMFDPN F Y B N Q M F D P N <> <> <> <> <> <> "SSBZ MFOHUI
3FWFSTF1SPYZ $BDIF 4FSWFS $BDIF 4FSWFS $BDIF 4FSWFS $BDIF 4FSWFS $BDIF
4FSWFS $BDIF 4FSWFS FYBNQMFDPN F Y B N Q M F D P N <> <> <> <> <> <> "SSBZ
αʔόͷ૿ݮ͕ൃੜͨ͠߹
3FWFSTF1SPYZ $BDIF 4FSWFS $BDIF 4FSWFS $BDIF 4FSWFS $BDIF 4FSWFS $BDIF
4FSWFS $BDIF 4FSWFS FYBNQMFDPN F Y B N Q M F D P N <> <> <> <> <> <> "SSBZ
3FWFSTF1SPYZ $BDIF 4FSWFS $BDIF 4FSWFS $BDIF 4FSWFS $BDIF 4FSWFS $BDIF
4FSWFS $BDIF 4FSWFS FYBNQMFDPN F Y B N Q M F D P N <> <> <> <> <> <> "SSBZ MFOHUI DPOTVMUFNQMBUFͰઃఆϑΝΠϧ͕࠶ੜ OHJOYSFMPBE
3FWFSTF1SPYZ $BDIF 4FSWFS $BDIF 4FSWFS $BDIF 4FSWFS $BDIF 4FSWFS $BDIF
4FSWFS $BDIF 4FSWFS FYBNQMFDPN F Y B N Q M F D P N <> <> <> <> <> <> "SSBZ
NSVCZΛͬͨ؆୯ͳΞϧΰϦζϜͷ ࣮ʹΑͬͯ ޮతͳΩϟογϡΛ࣮ݱͨ͠ʂ
·ͱΊ
·ͱΊ ίϯςϯπΩϟογϡػೳΛϦϦʔεͨ͠ ંฦ͠Ͱߴɾઃఆ؆୯ NSVCZΛ׆༻ͯ͠େنϨϯαόڥʹඞཁͳཁ݅ Λຬͨͨ͠ NSVCZNTE NSVCZVTFSEBUBΛ༻͍ͨύϑΥʔϚ ϯε্5JQTΛհͨ͠ DPOTVMͱNSVCZΛΈ߹ͤͯɺαʔόͷঢ়ଶʹ߹ ΘͤͯಈతʹมԽ͢ΔΠϯϑϥΞʔΩςΫνϟΛ
࣮ݱͨ͠
܅ϖύϘͰಇ͔ͳ͍͔ʁ ࠷৽ͷ࠾༻ใΛνΣοΫˠ !QC@SFDSVJU
͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠