倊倇倇倥倸 96 - 倱倚俷倚倗倸倢俷倳倉俴倗倢們們倧倄們倉
個倓倠倅倩倛倹倝俷倇倣俷倢倉倆倩俱個値倄倕俷倰倊倢倶
倲倕俱倇倡倹俷倳倊倎倕倡倉倰俷倥倒倊倚俷倡倄倕俷倳倉倎倓値倊倅倢 倰倛倕倧倝倰倎倥倒俷倰倚倥倒俷俴倓倢俷倅倸倣倶 俲倝俷倓倠倊倊個倓倡倊倝倢俱倢倘倰倇倸倢倉倡倹倉
倕倩倸俹倥俱倕倡倊們倢倉倡倸俷倇倥倸倲倅债倠倇倣俷倢倉 倇値倹俷倅倡倗俸們倕俷倴個倳倉倰俱倹倢倝倥倹倛倉倡俷倱倇倹倅倡倗倳倛俽倸 倰俲倢 倒俱們倧倝俲倦倹倉倉倗倄俲們倡倊倅倡倗倰倝俷倱倓俷倶 俴倗倢們倰倛倉倧倸倝倒倕倹倢倇倥倸倚倠倚們們倢倉倢倉倆倢倲倆們倰俲倹倢們倢倰倛們倧倝倉俴倕倧倸倉俻倡倄倍倡倸俷
倰俲倢倇倨倸們倰倇倰倕倧倝倄倰倉倧倹倝倱倕倠俸値倅倗値俽俽倢倃倳倛倹俱倡倊倲個倓倰俸俱倅值倉倥倹們倢俱倰俱値倉倴個
倳倉個倥 2008 倒倢倞倩 (Yahoo) 俱倣倕倡俷倆倩俱俱倩倰俱値倕 (Google) 倉倹倝俷倳倛們倸倴倏倱倓俷倊倄俲倒倥倹倝倒倸倢俷倊倹倢俴倕倡倸俷 倚倸倗倉倱倊倸俷俱倢倓倅倕倢倄俲倝俷倰倚値倓值俺倰倝倉俸値倉俱倣倕倡俷倚倡倸倉俴倕倝倉倝倒倸倢俷倛倉倡俱
倓倠倊倊倱倉倠倉倣倰俹倎倢倠倊倨俴俴倕 (Personalized Recommendation System) 倆倩俱倊倝倓值倄倊倓値倛倢倓們倝俷倗倸倢倰個倷倉倝倢倗倨倈倚倣俴倡俽倇倥倸俸倠倎倕値俱倚倆倢倉俱倢倓倃值 倱倕倠倐倢倓倠倝倡倉倛倉倡俱倝倦倹俷倉倥倹俱倷倅俱倝倒倩倸倊倉倊倸倢俲倝俷倰俲倢
倚倢們倰倄倧倝倉倱倕倹倗... 倇倡倹俷倇倥們 倓倗們倆倦俷倅倡倗倰俲倢倰倝俷 倱倇倊俸倠俱値倉倉倝倉俱倡倉倇倥倸倝倝倏倏値倘
倱倅倸俴倗倢們俴倧倊倛倉倹倢俱倕倡倊倉倹倝倒倉値倄俸倉倉倸倢倳俸倛倢倒
倰俲倢倓倩倹倄倥倗倸倢倇値倘倇倢俷倰倓倧倸倝俷 "俱倢倓倰倓倥倒倉倓倩倹倱倊倊倰倎値倸們倎倩倉" (Incremental Learning) 倇倥倸倰倎値倸俷俺倥倹倱倉倠倇倥們倴個倰們倧倸倝俴倓倩倸 們倡倉俱倷倰個倷倉倱俴倸俴倝倉倰俻個倅值倇倥倸倒倡俷倰倕倧倝倉倓倢俷 俸倠倳倛倹倰倝倢倴個倳俺倹俷倢倉俸倓値俷俱倡倊俲倹倝們倩倕們倛倢倘倢倕俲倝俷倒倢倞倩倒倡俷倴俷 倅倡倗倰俲倢倰倝俷俱倷倒倡俷倴們倸們倥俴倣倅倝倊倇倥倸俺倡倄倰俸倉
們倡倉倰倛們倧倝倉俱倡倊俱倢倓倰倄値倉俴倕倣倇倢俷倳倉個倸倢倄俷倄値倊倇倥倸們倧倄倚倉値倇 倰俲倢倅倹倝俷倉倣倇倥們倊倨俱倰倊値俱倰倚倹倉倇倢俷倇倥倸倒倡俷倴們倸倰俴倒們倥倳俴倓倰倄値倉們倢俱倸倝倉
倒倢俱倰倛倕倧倝倰俱値倉
倕倩倸俹倥倎倸倉倕們倛倢倒倳俸倝倝俱們倢倒倢倗倰倛倒倥倒倄 倰倝倉倛倕倡俷倎値俷倎倉倡俱倰俱倹倢倝倥倹 倛倕倡倊倅倢倕俷個倕倸倝倒倚們倝俷倳倛倹倗倸倢俷倰個倕倸倢
倌倸倢倉倴個倴們倸俱倥倸倉倢倇倥 倰俲倢倕倧們倅倢俲倦倹倉 倱倗倗倅倢倰倓値倸們俱倕倡倊們倢倚倄倳倚倝倥俱俴倓倡倹俷
倰俲倢倰倝倧倹倝們們倧倝倴個倰個値倄倱倕倷個倇倷倝個 倱倕倹倗倎値們倎值倇倥倸倝倒倩倸倰倗倷倊倴俻倅值倇倥倸俴倨倹倉倰俴倒倝倒倸倢俷俴倕倸倝俷倱俴倕倸倗
GitHub
倰倗倷倊倴俻倅值倇倥倸倰倎値倸俷倰個値倄倅倡倗倴倄倹倴們倸俱倥倸倰倄倧倝倉 倱倛倕倸俷倓倗們倅倡倗倱倕倠倍倢俱倲俴倹倄俲倝俷倰倛倕倸倢倲個倓倱俱倓們倰們倝倓值 倚倣倛倓倡倊倌倩倹倊倓値倛倢倓倚倢倒倰倇俴倉値俴倝倒倸倢俷倕倩倸俹倥 俱倢倓倴倄倹倰俲倹倢倴個倇倸倝俷倳倉 GitHub 倄倩倗倸倢們倥俲倝俷倰倕倸倉倳倛們倸倝倠倴倓倌倨倄俲倦倹倉們倢倊倹倢俷 倆倧倝倰個倷倉俱倢倓倎倡俱倌倸倝倉倱倕倠倛倢倱倓俷倊倡倉倄倢倕倳俸倴個倳倉倅倡倗
倰們倧倸倝倗倢倉倉倥倹倰倝俷 倰俲倢倰倎値倸俷倰俸倝倲個倓倰俸俱倅值倛倉倦倸俷倇倥倸倇倣倳倛倹個倓倠倇倡倊倳俸們倢俱倳倉倰倗倷倊倉倥倹
們倡倉俴倧倝倰倏倓們倰倗値倓值俱倚倣倛倓倡倊 Web Server 倇倥倸倰俲倥倒倉倄倹倗倒 Python 俺倧倸倝倗倸倢 "Tornado"
倚値倸俷倇倥倸倇倣倳倛倹倰俲倢倱個倕俱倳俸倇倥倸倚倨倄俴倧倝 俴倣倝倈値倊倢倒倲個倓倰俸俱倅值倉倥倹倰俲倥倒倉倄倹倗倒倐倢候倢俸倥倉倇倡倹俷倛們倄
倅倡倗倰俲倢倰倝俷俱倷倰個倷倉俴倉俸倥倉 倰俴倒倰倓倥倒倉倇倥倸倏倩倸倅倡倹倉俱倸倝倉俸倠們倢倰倓倥倒倉倅倸倝倱倕倠倇倣俷倢倉倇倥倸倝倰們倓値俱倢 倳倉 GitHub 倇倥倸倰倅倷們倴個倄倹倗倒倲俴倹倄倐倢候倢倝倡俷俱倔候 俱倢倓倴倄倹倰倛倷倉倅倡倗倝倡俱候倓俸倥倉倚倥倸倰倛倕倥倸倒們倇倣倳倛倹倓倩倹倚倦俱倝倊倝倨倸倉倝倒倸倢俷倊倝俱倴們倸倆倩俱
倅倝倉倉倡倹倉倰俲倢俴倕値俱倰俲倹倢倴個倄倩 倱倕倠倰倎倥倒俷倱俴倸俱倗倢倄倅倢倄倩倴們倸俱倥倸倊倓倓倇倡倄 倰俲倢俱倷倆倩俱倄倦俷倄倩倄倄倹倗倒俴倨倃倐倢倎俲倝俷倲俴倹倄倱倕倠倱倉倗俴値倄倇倥倸俻倸倝倉倝倒倩倸倰倊倧倹倝俷倛倕倡俷
倰倓倥倒倊俷倸倢倒 倇倓俷倎倕倡俷 倱倕倠倚俷倸倢俷倢們
倲倄倒倰俹倎倢倠倗値倈倥俱倢倓俸倡倄俱倢倓俱倡倊 Non-blocking 倱倕倠 Event-driven 倉倡倹倉 倰倓倥倒俱倴倄倹倗倸倢倰個倷倉倴倝倰倄倥倒倓倠倄倡倊倝倡俸俹倓値倒倠
倄倹倗倒倚倢倒倅倢倇倥倸俴倕倨俱俴倕倥倝倒倩倸倳倉倗俷俱倢倓倰倇俴倲倉倲倕倒倥們倢倉倢倉 倰俲倢們倝俷倝倝俱倇倡倉倇倥倗倸倢倰俸倹倢俲倝俷倲個倓倰俸俱倅值倉倥倹倅倹倝俷倰個倷倉倒倝倄倍倥們倧倝倓倠倄倡倊倇倷倝個 俴倗倢們倰俲倹倢倳俸倳倉倰倓倧倸倝俷 Computer Architecture (倚倆倢個倡倅倒俱倓倓們俴倝們倎値倗倰倅倝倓值) 倱倕倠 Network Programming (俱倢倓倰俲倥倒倉倲個倓倱俱倓們倰俴倓倧倝俲倸倢倒) 俲倝俷俴倉俴倉倉倥倹 倝倒倩倸倳倉倓倠倄倡倊倇倥倸倉倸倢倇倦倸俷
倕倩倸俹倥倆倦俷俱倡倊們倥俴倗倢們俴値倄倱倗倊倛倉倦倸俷倗倸倢倝倒倢俱俸倠倕俷倴個倱俸們 倰俲倥倒倉倲俴倹倄俺倸倗倒倲個倓倰俸俱倅值倉倥倹倚倡俱倛倉倸倝倒 倱倅倸倄倹倗倒俷倢倉倇倥倸倓倡倄倅倡倗 倰俲倢倰倕倒倇倣倴倄倹倱俴倸俱倄 "Follow" 倅値倄倅倢們倌倩倹倳俺倹俴倉倉倥倹倴倗倹
倱倕倠倅倝倉倉倥倹 倇倡倉倇倥倇倥倸倰俲倢倕倷倝俱倝値倉倰俲倹倢 GitHub 們倨們俲倗倢倊倉俲倝俷倛倉倹倢倰倗倷倊俱倷倰倄倹俷倱俸倹俷倰倅倧倝倉倰倕倷俱倶 俲倦倹倉們倢
倊倡俽俺倥倇倥倸倰俲倢倅値倄倅倢們倴倗倹 倰倎値倸俷俸倠倝倡個倲倛倕倄倲個倓倰俸俱倅值倳倛們倸 3 倓倢倒俱倢倓倰們倧倸倝倴們倸俱倥倸倉倢倇倥倇倥倸倌倸倢倉們倢
"倛倧們?"
倕倩倸俹倥倰倕値俱俴値倹倗倰倕倷俱倉倹倝倒 俴倗倢們倚倉倳俸倰倓値倸們俱倸倝倅倡倗俲倦倹倉
倝倡俸俹倓値倒倠倇倥倸倰俲倥倒倉 Tornado 俴倉倉倡倹倉 們倥倌倕俷倢倉倳倛們倸倝倥俱倱倕倹倗倰倛倓倝?
倰俲倢倰倕倧倸倝倉倰們倢倚值俴倕値俱倰俲倹倢倴個倄倩
俴倕倡俷倲個倓倰俸俱倅值 (Repository) 倳倛們倸 3 倝倡倉 倰倓倥倒俷倓倢倒倝倒倩倸倅倓俷倛倉倹倢
倚倢倒倅倢俲倝俷倰俲倢倴個倛倒倨倄倝倒倩倸倇倥倸俺倧倸倝倲個倓倰俸俱倅值倱倓俱
[Redis]
俺倧倸倝倇倥倸倴們倸倰俴倒倴倄倹倒値倉們倢俱倸倝倉
倰俲倢俱倄倰俲倹倢倴個倝倸倢倉俴倣倝倈値倊倢倒倲個倓倰俸俱倅值 倛倓倧倝倴倏倕值 README
倱倕倠倱倉倸倉倝倉 們倡倉倒倡俷俴俷倰個倷倉倐倢候倢俸倥倉倇倥倸俴倨倹倉倰俴倒
[俺倧倸倝倲個倓倰俸俱倅值: Redis (Remote Dictionary Server)]
[俴倣倱倉倠倉倣倲個倓倰俸俱倅值:]
[倉倥倸俴倧倝倓倠倊倊俸倡倄倰俱倷倊俲倹倝們倩倕倱倊倊 Key-Value 個倓倠倚値倇倈値倐倢倎倚倩俷 倱倊倊倲倝倰倎倉俻倝倓值倚 倰俲倥倒倉倄倹倗倒倐倢候倢 C]
[倚値倸俷倇倥倸倱倅俱倅倸倢俷俸倢俱倀倢倉俲倹倝們倩倕倇倡倸倗倴個倇倥倸倰俱倷倊俲倹倝們倩倕倕俷倞倢倓值倄倄値倚俱值 俴倧倝 Redis 倰倕倧倝俱倇倥倸俸倠倰俱倷倊俲倹倝們倩倕倇倡倹俷倛們倄倴倗倹倳倉 '倛倉倸倗倒俴倗倢們俸倣' (Memory)]
[倉倡倸倉倛們倢倒俴倗倢們倗倸倢 們倡倉們倥俴倗倢們倰倓倷倗倳倉俱倢倓倝倸倢倉倰俲倥倒倉倇倥倸倴倓倹俴倩倸倱俲倸俷 俱倢倓倝倸倢倉倰俲倥倒倉俲倝俷倞倢倓值倄倄値倚俱值倰個倷倉倱倊倊俱倕倴俱 倱倅倸俱倢倓倝倸倢倉倰俲倥倒倉俲倝俷倛倉倸倗倒俴倗倢們俸倣俴倧倝倓倠倊倊倝値倰倕倷俱倇倓倝倉値俱倚值 俴倗倢們倰倓倷倗俲倝俷倇倡倹俷倚倝俷倝倒倸倢俷倉倥倹倅倸倢俷俱倡倉俴倉倕倠倓倠倄倡倊俺倡倹倉]
[們倡倉倱俱倹個倡俽倛倢倝倠倴倓?]
[倳倉倚倆倢倉俱倢倓倃值倇倥倸 Web Application 倅倹倝俷倓倝俷倓倡倊倌倩倹倳俺倹俷倢倉倎倓倹倝們俱倡倉俸倣倉倗倉們倛倢倘倢倕 (High Concurrency) 俱倢倓倝倸倢倉倰俲倥倒倉倀倢倉俲倹倝們倩倕們倡俱俸倠倰個倷倉俴倝俲倗倄倇倥倸倳倛俽倸倇倥倸倚倨倄 倰們倧倸倝倌倩倹倳俺倹倉倡倊倛們倧倸倉倉倡倊倱倚倉倓倹倝俷俲倝俲倹倝們倩倕倎倓倹倝們俱倡倉 倞倢倓值倄倄値倚俱值俲倝俷倀倢倉俲倹倝們倩倕倱倊倊倰倄値們俸倠倓倡倊倐倢倓倠倴們倸倴倛倗 倇倣倳倛倹俱倢倓倅倝倊倚倉倝俷倕倸倢俺倹倢 倛倓倧倝倆倦俷俲倡倹倉倓倠倊倊倕倸們]
[Redis 倆倩俱倝倝俱倱倊倊們倢倰倎倧倸倝倓倡倊們倧倝俱倡倊倚倆倢倉俱倢倓倃值倉倥倹倲倄倒倰俹倎倢倠 們倡倉倇倣倛倉倹倢倇倥倸倰個倷倉俺倡倹倉倱俴俺 (Cache Layer) 俴倗倢們倰倓倷倗倚倩俷 俱倡倹倉俱倕倢俷倓倠倛倗倸倢俷倱倝個倎倕値倰俴俺倡倉俱倡倊倀倢倉俲倹倝們倩倕倛倕倡俱 俲倹倝們倩倕倒倝倄倞値倅倇倥倸們倥俱倢倓倰倓倥倒俱倳俺倹倊倸倝倒倶 俸倠倆倩俱倝倸倢倉俸倢俱倛倉倸倗倒俴倗倢們俸倣俲倝俷 Redis 倴倄倹倲倄倒倅倓俷 倰倓倷倗個倢倉倚倢倒倏倹倢倱倕倊 俺倸倗倒倕倄倐倢倓倠俲倝俷倀倢倉俲倹倝們倩倕倛倕倡俱倴倄倹倝倒倸倢俷們倛倢倘倢倕]
[倱倉倗俴値倄倛倕倡俱俲倝俷們倡倉俴倧倝倝倠倴倓?]
[1. 倛倉倸倗倒俴倗倢們俸倣俴倧倝倇倨俱倚値倸俷: 倒倝們倱倕俱俴倗倢們俴俷倇倉俲倝俷俲倹倝們倩倕 (俲倹倝們倩倕倛倢倒倰們倧倸倝倴倏倄倡倊) 倰倎倧倸倝倱倕俱俱倡倊俴倗倢們倰倓倷倗俲倡倹倉倚倩俷倚倨倄]
[2. 倲俴倓俷倚倓倹倢俷俲倹倝們倩倕倇倥倸倛倕倢俱倛倕倢倒: Redis 倴們倸倴倄倹倰俱倷倊倱俴倸 Key-Value 倈倓倓們倄倢 倱倅倸們倡倉倓倝俷倓倡倊倲俴倓俷倚倓倹倢俷俲倹倝們倩倕倱倊倊 String, Hash, List, Set, Sorted Set 們倢倳倛倹倳倉倅倡倗 倛們倢倒俴倗倢們倗倸倢倉倡俱倎倡倂倉倢倚倢們倢倓倆俸倡倄俱倢倓俲倹倝們倩倕俻倡倊俻倹倝倉倴倄倹倅倡倹俷倱倅倸倓倠倄倡倊倀倢倉俲倹倝們倩倕 俻倦倸俷俺倸倗倒倰倎値倸們個倓倠倚値倇倈値倐倢倎俱倢倓倇倣俷倢倉倴倄倹們倢俱]
[3. 倲們倰倄倕倰倈倓倄倰倄倥倒倗 (Single-thread Model): 俴倨倃倝倸倢倉倴們倸倌値倄倛倓倝俱 倲們倰倄倕倰俴倓倧倝俲倸倢倒倛倕倡俱俲倝俷 Redis 倰個倷倉倱倊倊倰倈倓倄倰倄倥倒倗 們倡倉倳俺倹倰倇俴倲倉倲倕倒倥 IO Multiplexing 倰倎倧倸倝倛倕倥俱倰倕倥倸倒俷俱倢倓倰倚倥倒倰倗倕倢倚倕倡倊 Context 俲倝俷 Multi-thread 倳倉俱倢倓俸倡倄俱倢倓俴倣俲倝倇倢俷倰俴倓倧倝俲倸倢倒倚倸倗倉倳倛俽倸 俱倢倓倳俺倹倰倈倓倄倰倄倥倒倗俱倕倡倊倇倣俷倢倉倴倄倹倰倓倷倗俱倗倸倢倱倕倠俻倡倊俻倹倝倉倉倹倝倒俱倗倸倢]
[們倡倉俸倠倰俲倹倢們倢倰倅値們倰倅倷們俺倸倝俷倗倸倢俷倅倓俷倴倛倉?]
[倳倉 Tech Stack 俲倝俷倝値倉倰倇倝倓值倰倉倷倅個倡俸俸倨倊倡倉 倰倓倢倒倡俷俲倢倄 "們倥倄倎倡倊倚倗値倚" 倇倥倸倰倓倷倗倱倕倠倒倧倄倛倒倨倸倉倎倝俸倠俸倡倄俱倢倓俱倡倊俷倢倉倇倥倸倅倹倝俷俱倢倓個倓倠倚値倇倈値倐倢倎倓倠倄倡倊倗値俱倔倅 倰俺倸倉 俱倢倓倱俴俺倛倉倹倢倰倗倷倊, 俱倢倓俸倡倄俱倢倓 Session 倌倩倹倳俺倹, 倓倠倊倊俸倡倄倝倡倉倄倡倊, 倅倡倗倉倡倊倱倊倊倰倓倥倒倕倴倇們值, Message Queue... 俱倢倓們倢倆倦俷俲倝俷 Redis 俸倠倰倅値們倰倅倷們俺倸倝俷倗倸倢俷倉倥倹倴倄倹倝倒倸倢俷倚們倊倩倓倃值倱倊倊 們倡倉倴們倸倴倄倹們倢倱倇倉倇倥倸倀倢倉俲倹倝們倩倕倰倄値們 倱倅倸俸倠們倢倰個倷倉俴倩倸倛倩倇倥倸倄倥倇倥倸倚倨倄 倰倎倧倸倝倚倓倹倢俷倚倆倢個倡倅倒俱倓倓們 Backend 倇倥倸倓倝俷倓倡倊倌倩倹倳俺倹俷倢倉倓倠倄倡倊們倛倢倘倢倕倴倄倹倝倒倸倢俷倱倇倹俸倓値俷]
倕倩倸俹倥倝倸倢倉倇倨俱倅倡倗倝倡俱候倓倝倒倸倢俷倅倡倹俷倳俸
倄倗俷倅倢俲倝俷倰俲倢倰倊値俱俱倗倹倢俷俲倦倹倉倰倓倧倸倝倒倶
倕們倛倢倒倳俸倰倓値倸們倆倥倸俱倓倠俺倡倹倉倲倄倒倴們倸倓倩倹倅倡倗
們倧倝倇倥倸俸倡倊倰們倢倚值倰倓値倸們倚倡倸倉倓倠倓値俱倰倕倷俱倉倹倝倒
"倝倡俸俹倓値倒倠..."
倰倚倥倒俷倱倛倊倎倓倸倢倒倢俱俸倠俴倗倊俴倨們倰倕倷倄倕倝倄倝倝俱們倢俸倢俱倕倣俴倝
"倉倥倸們倡倉俴倗倢們俴値倄倓倠倄倡倊倝倡俸俹倓値倒倠俺倡倄倶!"
倰俲倢倕倨俱倎倓倗倄俸倢俱倰俱倹倢倝倥倹 倚倝俷們倧倝倒倡倉倲倅债倠 倲倉倹們倅倡倗倰俲倹倢倴個俸倉倛倉倹倢倱倇倊俸倠倅値倄俸倝俴倝們倎値倗倰倅倝倓值
倀倢倉俲倹倝們倩倕倳倉倛倉倸倗倒俴倗倢們俸倣 (In-memory Database)!
俴倝倉倰俻個倅值倉倥倹倴們倸倳俺倸倰倓倧倸倝俷倳倛們倸倆倝倄倄倹倢們 倱倅倸倴們倸倰俴倒們倥倳俴倓倇倣倝倝俱們倢倴倄倹倰個倷倉倓倠倊倊倱倕倠倚倨倄倒倝倄俲倉倢倄倉倥倹們倢俱倸倝倉
倲倄倒倰俹倎倢倠俱倢倓倓倝俷倓倡倊倲俴倓俷倚倓倹倢俷俲倹倝們倩倕倇倥倸倛倕倢俱倛倕倢倒俲倉倢倄倉倥倹!
倉倥倸倛們倢倒俴倗倢們倗倸倢們倡倉倴們倸倳俺倸倱俴倸倱俴俺 (Cache) 倱倅倸們倡倉俴倧倝倀倢倉俲倹倝們倩倕倇倥倸們倥倏倡俷俱值俺倡倉俴倓倊倰俴倓倧倸倝俷倳倉倅倡倗們倡倉倰倝俷!
倱倕倹倗倎倝們倢倓倗們俱倡倊倲個倓倰俸俱倅值 Tornado 倰們倧倸倝倗倢倉...