https://hatena.co.jp/recruit/intern/2022
Web αʔϏεΠϯϑϥೖ#hatenaintern
View Slide
׆ס铺紶מחַיWeb
泘域!Web αʔϏεͷΠϯϑϥͱ- ΠϯϑϥͰҙ͍ࣝͯ͠Δ͜ͱ- αʔόʔઃܭ- αʔόʔߏங- ΫϥυαʔϏεͷར༻- αʔόʔӡ༻- ·ͱΊ
ؕ٤نٚכע=
WebWeb- ΞϓϦέʔγϣϯ- ϛυϧΣΞ- OS- Ծαʔόʔ- ϋʔυΣΞ(ཧαʔόʔͳͲ)- ωοτϫʔΫ- ϑΝγϦςΟ(ϥοΫɺిݯɺۭௐɺͦΕΒΛઃஔɾӡ༻͢ΔσʔληϯλʔͳͲ)
泘域- Web αʔϏεͷΠϯϑϥͱ!ΠϯϑϥͰҙ͍ࣝͯ͠Δ͜ͱ- αʔόʔઃܭ- αʔόʔߏங- ΫϥυαʔϏεͷར༻- αʔόʔӡ༻- ·ͱΊ
ؕ٤نٚך䙫閁יַ׆כ( )( )( )( )( )כַֹئ٭لت䬠❠ג״מؕ٤نٚ㲔杯յ禴䧏
⺎榫䓪˝ ꤃㲹ֿ颯׀י塛ױםַبتطّ㲔杯ג״˝ ַחךئ٭لت⮵榫ך׀
䦡䍖䓪˝ 靷蕔מ⺬יقنؚ٭ُ٤ت䷉ャג״˝ 䒍鸵מئ٭لت⮵榫ך׀
㱦⪒䓪˝ ٗ٭ا٭ס车Ⳃظ٭ذ⟊閾ג״˝ 㱦䑏יئ٭لت⮵榫ך׀
Ⲗ曍䓪˝ ꄋꊤ氳յ☔氳յ侇ꝴ氳ؤتع⯡峎ג״˝ םئ٭لتס䡗Ꝏמחםֿ
刎鬁䓪˝ ئ٭لت䡗Ꝏמכםֹ邾ꥭ䓪ס㘃㛻כ梪㗞ס㚺㵚䑴ג״˝ ئ٭لتס釐僶מ碛企ׂ䑴ֻ׆כֿך׀
泘域- Web αʔϏεͷΠϯϑϥͱ- ΠϯϑϥͰҙ͍ࣝͯ͠Δ͜ͱ!αʔόʔઃܭ- αʔόʔߏங- ΫϥυαʔϏεͷར༻- αʔόʔӡ༻- ·ͱΊ
ئ٭ف٭錃銶Web
N( ) Web3 ΞʔΩςΫνϟ┌──────────────┐ ┌──────────────┐ ┌──────────────┐│ │ │ │ │ ││ Proxy Server ├───►│ App Server ├───►│ DB Server ││ │ │ │ │ │└──────────────┘ └──────────────┘ └──────────────┘
Web┌──────────────┐ ┌──────────────┐ ┌──────────────┐│ │ │ │ │ ││ Proxy Server ├───►│ App Server ├───►│ DB Server ││ │ │ │ │ │└──────────────┘ └──────────────┘ └──────────────┘ProxyApachenginx
تآ٭ٚلٛطؔס澬⟊1( )( )
( )App
( )DB
⫛Ꝏ1.2.
⫛Ꝏסقذ٭٤/
/( )keepalived VIP DNSDB/VIP FQDN
VIP┌────────────────┐│ │┌───►│ Active Server ││ │ ││ └────────────────┘┌────────────────┐ │ ▲│ │ VIP │ ││ Client ├───────┘ │ VRRP│ │ │└────────────────┘ ▼┌────────────────┐│ ││ Standby Server ││ │└────────────────┘
ٝوٛقذ٭٤DNSApp
ٞ٭غفٚ٤ئ٭✳榫㕙⺬┌────────────────┐│ │┌──►│ Server A ││ │ ││ └────────────────┘││┌──────────┐ ┌───────────────────────────┐ │ ┌────────────────┐│ │ │ │ │ │ ││ Client ├─────────►│ Server-side load balancer ├────┼──►│ Server B ││ │ │ │ │ │ │└──────────┘ └───────────────────────────┘ │ └────────────────┘│││ ┌────────────────┐│ │ │└──►│ Server C ││ │└────────────────┘
ٞ٭غفٚ٤ب٤ء2
ئ٭ف٭ئؕغٞ٭غفٚ٤ب٤ءDNSSPOF
ٞ٭غفٚ٤ئ٭˝ 刎鬁ם⮆丆亠䌋˝ ىٜتزؘشؠמ⺎榫䓪ס䥵⟊
ٞ٭غفٚ٤ئ٭┌────────────────┐│ │┌──►│ Server A ││ │ ││ └────────────────┘││┌──────────┐ ┌───────────────────────────┐ │ ┌────────────────┐│ │ │ │ │ │ ││ Client ├─────────►│ Server-side load balancer ├────┼──►│ Server B ││ │ │ │ │ │ │└──────────┘ └───────────────────────────┘ │ └────────────────┘│││ ┌────────────────┐│ │ │└──►│ Server C ││ │└────────────────┘
DNSDNS FQDN IP 1DNS
DNSQ1: server.example.comA1: 192.0.2.1┌─────────────────┐ ┌────────────────┐ ┌────────────────┐│ │ │ │ │ ││ DNS Server │◄────────────►│ Client A ├────────►│ Server X ││ │ │ │ │ 192.0.2.1 ││ │ │ │ ┌────►│ │└─────────────────┘ └────────────────┘ │ └────────────────┘▲ ▲ ▲ ││ │ │ ┌────────────────┐ │ ┌────────────────┐│ │ │ │ │ │ │ ││ │ │ │ Client B ├───┼────►│ Server Y ││ │ └────────────────►│ │ │ │ 192.0.2.2 ││ │ Q2: server.example.com│ │ │ │ ││ │ A2: 192.0.2.2 └────────────────┘ │ └────────────────┘│ │ ││ │ ┌────────────────┐ │ ┌────────────────┐│ │ │ │ │ │ ││ │ │ Client C ├───┼────►│ Server Z ││ └──────────────────────►│ │ │ │ 192.0.2.3 ││ Q3: server.example.com│ │ │ │ ││ A3: 192.0.2.3 └────────────────┘ │ └────────────────┘│ ││ ┌────────────────┐ ││ │ │ ││ │ Client D │ │└────────────────────────────►│ ├───┘Q4: server.example.com│ │A4: 192.0.2.1 └────────────────┘
ؠٚؕؓ٤عئؕغٞ٭غفٚ٤ب٤ءSPOF
؞ٔشبٖ˝ 鵭䈱⺸┕յ靷蕔鬭峎յعٚنؔشؠꄈס⯡峎ֿ泘氳˝ Ⲗ冽ע냕ַֿبتطّס邾ꥭꝧ氦յ鷞榫ؤتعֿ㘃ⱶ⺎耆䓪ֵֿ˝ ؞ٔشبֿٖⲖ׀ַֹמؓوٛآ٭ب٘٤錃銶
؞ٔشبٖס❆Proxy લஈͷΩϟογϡ ProxyʙApp ؒͷΩϟογϡ AppʙDB ؒͷΩϟογϡ│ │ ││ │ ▼│ │ ┌───────┐│ │ │ ││ ▼ ┌►│ Redis ││ ┌───────┐ ┌─────────┐ ┌───────┐ │ │ │ ┌───────┐▼ │ │ │ │ │ │ │ └───────┘ │ │┌────────┐ ┌─────┐ ┌────┤ │ ┌────┤ │ ┌────┤ │ │ │ ││ │ │ │ │ │ │ │ │ │ │ │ ├─┘ │ ││ Client ├────►│ CDN ├─────►│ LB │ Proxy ├────►│ LB │ Varnish ├────►│ LB │ App │ │ DB ││ │ │ │ │ │ │ │ │ │ │ │ ├──────────────►│ │└────────┘ └─────┘ └────┤ │ └────┤ │ └────┤ │ │ ││ │ │ │ │ │ │ │└───────┘ └─────────┘ └───────┘ └───────┘
ProxyCDN (Content Delivery Network)WebDDoSAkamai, CloudFront, Fastly, Cloud are
Proxy AppHTTPVarnish, nginx
App DBKVS (Key-Value Store)Redis, memcached
泘域- Web αʔϏεͷΠϯϑϥͱ- ΠϯϑϥͰҙ͍ࣝͯ͠Δ͜ͱ- αʔόʔઃܭ!αʔόʔߏங- ΫϥυαʔϏεͷར༻- αʔόʔӡ༻- ·ͱΊ
ئ٭ف٭啶疣˝ 擻杼ئ٭ف٭˝ ♞䘶ئ٭ف٭˝ ؤ٤طػ˝ ؤ٤طػ؛٭آتعٝ٭ب٘٤
ئ٭ف٭סٚؕنئؕؠٜ- ܭը- ௐୡ- ಋೖ- ߏங- ӡ༻ɾอक- ഇغ
擻杼ئ٭ف٭˝ 榫鵍מ⺬ג刎鬁םـ٭غؘؗؓ啶䡗˝ ـ٭غؘؗؓס䓪耆نٜמ孨榫ך׀˝ ٍعٜؾشؠ꣘չױךؤ٤عٞ٭ٜך׀
擻杼ئ٭ف٭ס鐐갭˝ ףׂتآ٭ٜך׀םַ˝ 鐧鷼յ㵵⪌מ侇ꝴ氳յ☔氳ؤتعֿ־־˝ ـ٭غؘؗؓٛخ٭تס⛷Ⱍֿ⭳יױַⲖ曍䓪ֿ䖾ַ1
♞䘶ئ٭ف٭Web ( )- ΞϓϦέʔγϣϯ- ϛυϧΣΞ- OS- Ծαʔόʔ- ϋʔυΣΞ(ཧαʔόʔͳͲ)- ωοτϫʔΫ- ϑΝγϦςΟ1
♞䘶䤗软CPUXen, KVM
♞䘶ئ٭ف٭סْٛشع/( )
.../OS
ؤ٤طػDocker!
ؤ٤طػכ♞䘶ئ٭ف٭כס鷿ַOSOSOSCPU
ؤ٤طػ؛٭آتعٝ٭ب٘٤Kubernetes, ECS
KubernetesEKS, GKE, AKS Kubernetes!Kubernetes
ًشع־㳃槹յאס⩝˝ 擻杼ئ٭ف٭˝ לדׄꝎׂ㱦㲊י牧⥸־ֿꄆ釐ն㛻⮉מْ٤طػ٤ت˝ ♞䘶ئ٭ف٭˝ ֹױׂⳂ־םׄף⛼泡˝ ؤ٤طػ˝ ⺬כי僿䏨ג敯䛜מםֹמ禴䧏٬⹜兠
泘域- Web αʔϏεͷΠϯϑϥͱ- ΠϯϑϥͰҙ͍ࣝͯ͠Δ͜ͱ- αʔόʔઃܭ- αʔόʔߏங!ΫϥυαʔϏεͷར༻- αʔόʔӡ༻- ·ͱΊ
ئ٭لتס䡗Ꝏמכםֹ鐐갭/
ؓوٛآ٭ب٘٤ס邾ꥭ˝ ٓؿٛبشؠؓ٭؞طؠزٔ˝ 㚺催ס䏅ꮶֿ㛻׀ׂםյꝧ氦鵭䈱ֿ⛥┖˝ لٜغظوٞؕמ侇ꝴֿ־־յףׂٛٛ٭تך׀םַ
ُؕؠٞئ٭لتؓ٭؞طؠزٔס䫑榫!
/˝ 鷞榫٬⟊㱤ס☔氳յ侇ꝴ氳ؤتعֿ㘃ֻ˝ 敯䛜ס䤧䭂כ禴䧏ֿꦘׂם˝ 㵚䑴ֿ鷐כج؞ٖٛطؔؕ٤بظ٤عמ氦㷣⺎耆䓪냕ׂם
ؠٚؗغئ٭لتס⮵榫Amazon Web Services Google Cloud
XaaSIaaSPaaSSaaS
鞊♳⪦僗ٓظٜIaaS PaaS SaaSOS OS OS OS
/˝ ْٛشع˝ ُؾ٭ةغئ٭لتמꝧ氦ؤتعյ鷞榫ؤتعס⯡峎˝ Ⳃ氳םٛخ٭ت澬⟊מ䦡䍖䓪ס⺸┕˝ 䏼ꄈ鐐ꄋמؤتع僃鸵˝ ┩槡╈מ㰆㏇ظ٭ذج٤ذ٭⮵榫׆כך愤㲹㵚瓀ֿ⺎耆˝ ظْٛشع˝ بتطّסؤ٤عٞ٭ٜتذُؕثס⯆˝ ئ٭لتס犉哕氳ם孨榫מبتطّ⪒⛮ס邾ꥭ˝ ي٤ر٭ٞشؠؕ٤
泘域- Web αʔϏεͷΠϯϑϥͱ- ΠϯϑϥͰҙ͍ࣝͯ͠Δ͜ͱ- αʔόʔઃܭ- αʔόʔߏங- ΫϥυαʔϏεͷར༻!αʔόʔӡ༻- ·ͱΊ
ئ٭ف٭鷞榫˝ ظ٭ذס畘杼˝ 泃釱˝ ꤃㲹㵚䑴
ظ٭ذס畘杼˝ ظ٭ذס㱦⪒䓪յ⺎榫䓪䥵⟊׆כֿ泘氳˝ ظ٭ذס䮇㜊بتطّ꤃㲹מ⤓ֻ˝ 嫎氳紶ⳉؤ٤وٚؕؓ٤ت㵚瓀ס㵚䑴䑒釐˝ 泘氳מ䑴י僃鸵ם䣆嫎鹟䥃˝ فشؠؓشوյؓ٭ؕهյٝوٛآ٭ب٘٤e- J-SOX
فشؠؓشو˝ 䳩⛼ِتبتطّ꤃㲹յٜؗؔت䚉刌םלס꤀מظ٭ذ䐝仾ג״מ˝ ظ٭ذ⪒⛮㚺催䄐⮆ظؔتؠط٭وםלյ擻杼氳מ樟ם㕙䢥מ㲊僿氳מ⟊㰆˝ 䐝仾وٞجت乃傴י㲊僿氳מ澬鏀׆כֿꄆ釐
ؓ٭ؕه˝ ꄆ釐䗯㕔Ꝏ僿ꝴמגזי⟊㰆٬孨榫˝ Ꝏ僿⟊㰆ֿ䑒釐םظ٭ذط٭وظؔتؠյْظؔؓ鋗ꎰי⟊畘յ泃削䗯㕔ꝧ炐םלյ䑒釐םכ׀מꞦ鈋⺎耆מ˝ ⟊㰆僿ꝴס畘杼յ䷉؆寕⸻סꡔ塛յꞦ鈋ٞءס畘杼םלס㱦⪒䓪姲״
ٝوٛآ٭ب٘٤˝ ؾشع٠٭ؠ鵟יٜٛؓذّؕמظ٭ذ邾邮˝ 䐝仾⛼哅ס䑒釐ֿםׂյ⮉僀ֻ׆כך泘氳鷼䡗ך׀˝ فشؠؓشوכ⛍יַֿظ٭ذס䷉؆滭䮇סⲖ冽עםַ׆כמ嫰䙫
泃釱/
/CPU
ؓوٛآ٭ب٘٤泃釱˝ ꞊䑏ׇכ˝ قنؚ٭ُ٤تעⶇ⮆־յ꤃㲹⸉㍔ע⛰־յ塜ׂ嚀耆יַ־˝ 泃釱䧗嘅˝ ⭚杼侇ꝴյٞءյىٜتزؘؠؙ٤غَؕ٤عםל
ئ٭لت泃釱˝ ꞊䑏ׇכ˝ ئ٭لت䬠❠ך׀יַ־յ䒍鸵מ✳ֻיַ־˝ 泃釱䧗嘅˝ ٝتَ٤تؤ٭غյٝؕط٤بםל
ج؞ٖٛطؔ泃釱˝ ꞊䑏ׇכ˝ ┘塜מ⮵榫יַםַ־յ耗䍏םبتطّךעםַ־˝ 泃釱䧗嘅˝ 泃削ٞءյِغؘٜؗؓ٬ٚؕهٚٛס耗䍏䓪䗯㕔םל
لةؾت泃釱˝ ꞊䑏ׇכ˝ ئ٭لتע䡗Ꝏיַ־յ⮵沟ע⭳יַ־˝ 泃釱䧗嘅˝ ئ٭لت⮵榫縖丗ס㘃峎յؤتعםל
ꝧ氦قنؚ٭ُ٤ت泃釱˝ ꞊䑏ׇכ˝ ꝧ氦յظوַٞؕ梪㗞禴䧏ך׀יַ־˝ 泃釱䧗嘅˝ ٛٛ٭ت값䈱յلٜغ٬ظوٞؕסٛ٭غذّؕםל
꤃㲹㵚䑴&&
泘域- Web αʔϏεͷΠϯϑϥͱ- ΠϯϑϥͰҙ͍ࣝͯ͠Δ͜ͱ- αʔόʔઃܭ- αʔόʔߏங- ΫϥυαʔϏεͷར༻- αʔόʔӡ༻!·ͱΊ
ױכ״Web