SlideShare uma empresa Scribd logo
1 de 23
Sarc Summit Summer 2016
by sarc.io
June 11
삵
LUA를 이용한 스마트한 웹서버 만들기
Part1. Apache + LUA
Ray. Lee
sleepred@gmail.com
Sarc Summit Summer 2016
by sarc.io
Apache + LUA삵
• Overview
• Apache + LUA
• mod_lua 소개
• mod_lua Hook & Build-in functions
• mod_lua 활용하기
• 정리
Sarc Summit Summer 2016
by sarc.io
Apache + LUA삵
Prologue
• 전세계적으로 다양한 웹서비스 보급
• Trends - Cloud, Social Networking Service, Mobile↑
• 웹에 접속할 수 있는 사용자 ↑ Device ↑↑
• 웹서버의 이용 빈도의 급격한 증가
• 웹 컨텐츠의 증가 → 튜닝이 상당히 중요함
◆ Total number of websites : 2016년 5월 기준 by netcraft.com
- http://news.netcraft.com/archives/2016/05/26/may-2016-web-server-survey.html
Sarc Summit Summer 2016
by sarc.io
Apache + LUA삵
Prologue - Issue
• Security, Perfermance, 대용량 처리, 운영 기술 문제
• 웹컨텐츠의 최적화만으로는 대응이 어려움
• 웹서버 소프트웨어 자체의 확장으로 대응
Stability
Security
Availability
웹서버 확장
Perfermance
Sarc Summit Summer 2016
by sarc.io
Apache + LUA삵
Prologue – 웹서버 확장
• 확장의 문턱이 높음(Apache의 경우)
• C언어로 구현 (생산성이 문제)
• Compile 이나 유지보수의 문제
• Apache 내부 메커니즘의 깊은 이해가 필요
최근의 Needs
C언어의 고속성과 경량화 유지보수성과 생산성
Solution?
Apache + Lua
• Script에 의한 기능 확장의 Interface를 구현
• 웹서버의 내부 기능의 확장을 Script로 구현 가능
• 고속으로 동작하는 구현체가 필요
Sarc Summit Summer 2016
by sarc.io
Apache + LUA삵
Apache HTTP Server
• Apache HTTP Server?
• Top Open Source Communities – ASF Project
• 현재는 Apache Software Foundation에서 오픈 소스로 공개하여 관리하고 있음
• 전세계 인터넷의 60% 이상의 웹서버에서 Apache 가 사용됨
◆ Apache HTTP Server project
- http://httpd.apache.org
◆ Apache Software Foundation
- http://www.apache.org
Sarc Summit Summer 2016
by sarc.io
Apache + LUA삵
Apache 2.4
• Apache HTTP Server 2.4
• 2012년 12월 2.4.1 릴리즈 -> 7년만에 안정화판 릴리즈
• Nginx를 의식한 구현 및 개선
• 성능 개선, 메모리 사용량 감소 등등
• Default MPM이 변경 → Prefork에서 envent_mpm으로
• 다양한 모듈이나 기능 추가 개선
• mod_sed, mod_lua, bufferedlogs, rotatelogs 등
◆ 시장점유율 : 2016년 5월 기준 by w3techs
-
https://w3techs.com/technologies/overview/web_serv
er/all
◆ 시장점유율 : 2016년 5월 기준 by netcraft.com
- http://news.netcraft.com/archives/2016/05/26/may-
2016-web-server-survey.html
Sarc Summit Summer 2016
by sarc.io
Apache + LUA삵
LUA 란?
◆ Application & Framework
◆ Game ◆ Web Server
mod_lua
ngx_lua
Sarc Summit Summer 2016
by sarc.io
Apache + LUA삵
LUA ?
• LUA ?
• 루아란 포르투갈어로 '달'이라는 뜻으로, 브라질에서 개발됨
• 가벼운 인터프린터 언어. 쉽고 가볍게 C/C++에 내장됨
• WOW의 유저 UI 스크립트 언어로 유명해짐
• LUA 특징
• 오픈 소스
• 이식성이 좋다. (C 언어와 호환성이 좋음)
• 런타임 속도가 빠르다.
(스크립트 언어 중에는 제일 성능이 좋음)
※ Lua official site : http://www.lua.org
Sarc Summit Summer 2016
by sarc.io
Apache + LUA삵
mod_lua
• mod_lua
• Apache에서 Lua를 동작하게 해주는 모듈
• Lua는 매우 가볍고 빠르다. (Script 언어중 ↑)
• CGI 처럼 사용할 수 있음 (like mod_php, mod_perl..)
• Apache Module 구현을 지원 (Apache Hook 함수 제공)
• Apache 2.3(2.4)에 추가된 신기능 (Nginx를 의식해서 만들어짐?)
• Lua의 Apache 모듈 구현 지원 방안
• Lua Script로 Apache를 Hook 시켜주는 인터페이스 제공
• Lua Script 내부에서 Apache의 내부 처리를 구현 가능
• request_rec 를 인자로 사용 가능
• apache2 모듈 이용가능
• C 기반 모듈에 비해 개발 생산성이 높고, 유지보수가 쉬움
Sarc Summit Summer 2016
by sarc.io
Apache + LUA삵
mod_lua 설치
• mod_lua 설치
• Apache 2.4 부터 지원
• '–enable-lua' 컴파일 옵션을 통해서 설치
• httpd.conf 설정
./configure
--prefix=$(설치 경로}
--enable-lua
......
LoadModule lua_module modules/mod_lua.so
<IfModule mime_module>
AddHandler lua-script .lua
</IfModule>
Sarc Summit Summer 2016
by sarc.io
Apache + LUA삵
Hello.lua
1
2
3
4
5
6
7
8
9
10
11
function handle(r)
r.content_type = "text/html"
r:puts([[
<html>
<head><title>hello</title></head>
<body><h1>Hello, I'm Lua</h1></body>
</html>
]])
end
Sarc Summit Summer 2016
by sarc.io
Apache + LUA삵
mod_lua - request_rec
• The request_rec structure
• apache의 request_rec 구조체의 wrapper
• 클라이언트의 요청 정보 등 Apache의 데이터를 참조하는 데 사용
• r.hostname (호스트명), r.uri (URI)와 같이 참조
※ The request_rec structure : http://www.modlua.org/api/request
Sarc Summit Summer 2016
by sarc.io
Apache + LUA삵
mod_lua - LuaHook
• LuaHook*
• mod_lua는 Apache의 동작을 Hook하는 핸들러를 정의할수 있으며, 핸들러 정
의는 Apache의 동작 중 커스트마이징하려고 하는 타이밍에 의해 아래 Directive
를 Apache 설정 파일에 기술하는 방식
• 호출 순서 : LuaQuickHandler → LuaHookTranslateName →
LuaHookMapToStorage → LuaHookAccessChecker → LuaHookFixups
Hook phas mod_lua directive Description
Quick handler LuaQuickHandler Reqeust 가 호출되었을때, 최초로 호출되는 hook
Translate name LuaHookTranslateName URI로부터 파일명을 선택하는 타이밍
Map to storage LuaHookMapToStorage
physical, cached , external/proxied 등 Storage를 선
택하는 타이밍
Check Access LuaHookAccessChecker
클라이언트가 리소스에 접속할 수 있는지 검증하는
타이밍
Check User ID LuaHookCheckUserID 사용자 ID를 검증하는 타이밍
Check Authorization
LuaHookAuthChecker or LuaAuthz
Provider
사용자 ID 등 사용자 권한을 인증하는 타이밍
Fixups LuaHookFixups content 처리 전 최후의 타이밍
Logging LuaHookLog content 처리 후 로그 처리의 타이밍
Sarc Summit Summer 2016
by sarc.io
Apache + LUA삵
mod_lua – apache2 package
• apache2 Package
• 실행중인 Apache의 정보를 가져올 수 있는 패키지.
• 현재 버전 번호와 Apache의 동작을 제어하는 다음의 상수를 참조 할 수 있음.
• 상수는 주로 다음을 핸들러 함수의 return 문에 지정하여 사용.
구분 설명
apache2.OK
요청 처리의 종료를 나타냄. lua 스크립트에 직접
응답을 생성하는 경우에 지정
apache2.DONE
LuaHookLog 지시문에서 로그 처리를 Hook 할 때
OK 대신 지정
apache2.DECLINED
Apache의 기본 동작을 처리함. lua script로
Apache의 동작/설정 등을 변경하고, 응답은
Apache의 content를 반환 시 지정
apache2.HTTP_MOVED_TEMPORARILY HTTP status code (302) 반환
※ apache2 Package : http://httpd.apache.org/docs/current/mod/mod_lua.html#apache2
Sarc Summit Summer 2016
by sarc.io
Apache + LUA삵
mod_lua Example(1)
Example) Under Construction ..
Sarc Summit Summer 2016
by sarc.io
Apache + LUA삵
mod_lua Example(1)
1
2
3
4
5
6
7
8
9
function construction(r)
ctime = os.date("%H")
if tonumber(ctime) > 19 and tonumber(ctime) > 22 then
r.headers_out["Location"] = "http://27.122.xxx.xx:8001/image
s/uc.html" // sorry server 
return apache2.HTTP_MOVED_TEMPORARILY
else
return apache2.DECLINED
end
End
웹사이트
정기 점검
1 LuaHookTranslateName ${INSTALL_PATH}/conf/extra/lua/construction.lua
construction
• httpd-lua.conf
• construction.lua
Sarc Summit Summer 2016
by sarc.io
Apache + LUA삵
Build-in functions
• Build-in functions
• FILESYSTEM FUNCTIONS
• ENCODING/DECODING FUNCTIONS
• SYSTEM FUNCTIONS
• EXPRESSION PARSING
• REQUEST PARSING FUNCTIONS
• REQUEST RESPONSE FUNCTIONS
• REQUEST MANIPULATION
• DEBUGGING FUNCTIONS
• exists_config_define
• loaded_modules, module_info
• mpm_query
• scoreboard_process, scoreboard_worker
• server_info, state_query
• DATABASE FUNCTIONS
※ Built-in functions : http://www.modlua.org/api/builtin
Sarc Summit Summer 2016
by sarc.io
Apache + LUA삵
mod_lua Example(2)
Example) Server Status..
Sarc Summit Summer 2016
by sarc.io
Apache + LUA삵
mod_lua Example(2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
-- Fetch server data
local mpm = "prefork" -- assume prefork by default
if r.mpm_query(14) == 1 then
mpm = "event" -- this is event mpm
elseif r.mpm_query(3) >= 1 then
mpm = "worker" -- it's threaded, we'll assume worker mpm
End
local maxServers = r.mpm_query(12);
local maxThreads = r.mpm_query(6);
……
-- Fetch process/thread data
for i=0,maxServers,1 do
server = r.scoreboard_process(r, i);
……
end
end
……
1 LuaMapHandler ^/lua-status$ ${INSTALL_PATH}/conf/extra/lua/server-st
atus.lua
• httpd-lua.conf
• server-status.lua
Sarc Summit Summer 2016
by sarc.io
Apache + LUA삵
정리!
• Apache + LUA = mod_lua
• Apache 2.4에서도 아직 experimental state 이지만, Apache 버전이 올라가면서
(2.4.20 버전 기준) 완성도가 높아짐
• Apache 2.4에 기본 모듈에 포함되어 있으며, Apache 모듈에 쉽게 접근 가능하
여 웹서버 확장 및 기능 추가시 유용하게 사용할 수 있음
• mod_lua 생산성, 유지보수성을 중요시 한다면, 최선의 선택
성능도 스크립트 언어 중에서 가장 띄어남
• 성능이 최우선시 되어야 된다면, mod_hell (C언어)의 대안으로
mod_mruby(Apache 내부처리를 Ruby로 제어) 검토 해볼 수 있음
• Nginx 를 사용한다면, Lua를 사용하여 더 쉽고 강력하게 확장가능
LuaJIT, 다양한 ngx_lua API 제공 등
→ Part2. NGINX + lua … Coming soon ^^
Sarc Summit Summer 2016
by sarc.io
Apache + LUA삵
Reference
• Reference
• Apache HTTP Server : http://httpd.apache.org/
• mod_lua :
https://httpd.apache.org/docs/trunk/mod/mod_lua.html
http://www.modlua.org/
• Lua Reference Manual : http://www.lua.org/manual/
• Lua official site : http://www.lua.org
• Lua user group : http://lua-users.org/
Sarc Summit Summer 2016
by sarc.io
Apache + LUA삵
Q / A
Q / A

Mais conteúdo relacionado

Mais procurados

Building secure applications with keycloak
Building secure applications with keycloak Building secure applications with keycloak
Building secure applications with keycloak Abhishek Koserwal
 
Kafka monitoring using Prometheus and Grafana
Kafka monitoring using Prometheus and GrafanaKafka monitoring using Prometheus and Grafana
Kafka monitoring using Prometheus and Grafanawonyong hwang
 
Spring boot - an introduction
Spring boot - an introductionSpring boot - an introduction
Spring boot - an introductionJonathan Holloway
 
Introduction to Spring Boot!
Introduction to Spring Boot!Introduction to Spring Boot!
Introduction to Spring Boot!Jakub Kubrynski
 
Continuous DB Changes Delivery With Liquibase
Continuous DB Changes Delivery With LiquibaseContinuous DB Changes Delivery With Liquibase
Continuous DB Changes Delivery With LiquibaseAidas Dragūnas
 
[124]네이버에서 사용되는 여러가지 Data Platform, 그리고 MongoDB
[124]네이버에서 사용되는 여러가지 Data Platform, 그리고 MongoDB[124]네이버에서 사용되는 여러가지 Data Platform, 그리고 MongoDB
[124]네이버에서 사용되는 여러가지 Data Platform, 그리고 MongoDBNAVER D2
 
Keepalived+MaxScale+MariaDB_운영매뉴얼_1.0.docx
Keepalived+MaxScale+MariaDB_운영매뉴얼_1.0.docxKeepalived+MaxScale+MariaDB_운영매뉴얼_1.0.docx
Keepalived+MaxScale+MariaDB_운영매뉴얼_1.0.docxNeoClova
 
Spring Boot—Production Boost
Spring Boot—Production BoostSpring Boot—Production Boost
Spring Boot—Production BoostVMware Tanzu
 
Spring Boot & Actuators
Spring Boot & ActuatorsSpring Boot & Actuators
Spring Boot & ActuatorsVMware Tanzu
 
Secure your app with keycloak
Secure your app with keycloakSecure your app with keycloak
Secure your app with keycloakGuy Marom
 
Introduction to Spring Framework
Introduction to Spring FrameworkIntroduction to Spring Framework
Introduction to Spring Framework Serhat Can
 
OAuth2 and Spring Security
OAuth2 and Spring SecurityOAuth2 and Spring Security
OAuth2 and Spring SecurityOrest Ivasiv
 
[오픈소스컨설팅] 아파치톰캣 운영가이드 v1.3
[오픈소스컨설팅] 아파치톰캣 운영가이드 v1.3[오픈소스컨설팅] 아파치톰캣 운영가이드 v1.3
[오픈소스컨설팅] 아파치톰캣 운영가이드 v1.3Ji-Woong Choi
 
RPC에서 REST까지 간단한 개념소개
RPC에서 REST까지 간단한 개념소개RPC에서 REST까지 간단한 개념소개
RPC에서 REST까지 간단한 개념소개Wonchang Song
 
Spring boot
Spring bootSpring boot
Spring bootsdeeg
 
OpenId Connect Protocol
OpenId Connect ProtocolOpenId Connect Protocol
OpenId Connect ProtocolMichael Furman
 

Mais procurados (20)

Building secure applications with keycloak
Building secure applications with keycloak Building secure applications with keycloak
Building secure applications with keycloak
 
Kafka monitoring using Prometheus and Grafana
Kafka monitoring using Prometheus and GrafanaKafka monitoring using Prometheus and Grafana
Kafka monitoring using Prometheus and Grafana
 
Spring boot - an introduction
Spring boot - an introductionSpring boot - an introduction
Spring boot - an introduction
 
Introduction to Spring Boot!
Introduction to Spring Boot!Introduction to Spring Boot!
Introduction to Spring Boot!
 
Continuous DB Changes Delivery With Liquibase
Continuous DB Changes Delivery With LiquibaseContinuous DB Changes Delivery With Liquibase
Continuous DB Changes Delivery With Liquibase
 
[124]네이버에서 사용되는 여러가지 Data Platform, 그리고 MongoDB
[124]네이버에서 사용되는 여러가지 Data Platform, 그리고 MongoDB[124]네이버에서 사용되는 여러가지 Data Platform, 그리고 MongoDB
[124]네이버에서 사용되는 여러가지 Data Platform, 그리고 MongoDB
 
Keepalived+MaxScale+MariaDB_운영매뉴얼_1.0.docx
Keepalived+MaxScale+MariaDB_운영매뉴얼_1.0.docxKeepalived+MaxScale+MariaDB_운영매뉴얼_1.0.docx
Keepalived+MaxScale+MariaDB_운영매뉴얼_1.0.docx
 
Spring Boot—Production Boost
Spring Boot—Production BoostSpring Boot—Production Boost
Spring Boot—Production Boost
 
Spring Boot & Actuators
Spring Boot & ActuatorsSpring Boot & Actuators
Spring Boot & Actuators
 
Spring Boot
Spring BootSpring Boot
Spring Boot
 
Secure your app with keycloak
Secure your app with keycloakSecure your app with keycloak
Secure your app with keycloak
 
Introduction to Spring Framework
Introduction to Spring FrameworkIntroduction to Spring Framework
Introduction to Spring Framework
 
Spring boot
Spring bootSpring boot
Spring boot
 
OAuth2 and Spring Security
OAuth2 and Spring SecurityOAuth2 and Spring Security
OAuth2 and Spring Security
 
Spring security
Spring securitySpring security
Spring security
 
[오픈소스컨설팅] 아파치톰캣 운영가이드 v1.3
[오픈소스컨설팅] 아파치톰캣 운영가이드 v1.3[오픈소스컨설팅] 아파치톰캣 운영가이드 v1.3
[오픈소스컨설팅] 아파치톰캣 운영가이드 v1.3
 
RPC에서 REST까지 간단한 개념소개
RPC에서 REST까지 간단한 개념소개RPC에서 REST까지 간단한 개념소개
RPC에서 REST까지 간단한 개념소개
 
Liquibase
LiquibaseLiquibase
Liquibase
 
Spring boot
Spring bootSpring boot
Spring boot
 
OpenId Connect Protocol
OpenId Connect ProtocolOpenId Connect Protocol
OpenId Connect Protocol
 

Semelhante a LUA를 이용한 스마트한 웹서버 만들기 (Ray. Lee)

Trace End-User Request (조동진)
Trace End-User Request (조동진)Trace End-User Request (조동진)
Trace End-User Request (조동진)삵 (sarc.io)
 
Apache Htrace overview (20160520)
Apache Htrace overview (20160520)Apache Htrace overview (20160520)
Apache Htrace overview (20160520)Steve Min
 
Private PaaS with Docker, spring cloud and mesos
Private PaaS with Docker, spring cloud and mesos Private PaaS with Docker, spring cloud and mesos
Private PaaS with Docker, spring cloud and mesos uEngine Solutions
 
[제14회 JCO 컨퍼런스] 개발자를 위한 서버이중화 by JAVACAFE
[제14회 JCO 컨퍼런스] 개발자를 위한 서버이중화 by JAVACAFE  [제14회 JCO 컨퍼런스] 개발자를 위한 서버이중화 by JAVACAFE
[제14회 JCO 컨퍼런스] 개발자를 위한 서버이중화 by JAVACAFE 흥래 김
 
Open standard open cloud engine (3)
Open standard open cloud engine (3)Open standard open cloud engine (3)
Open standard open cloud engine (3)uEngine Solutions
 
SOSCON 2017 - Backend.AI
SOSCON 2017 - Backend.AISOSCON 2017 - Backend.AI
SOSCON 2017 - Backend.AIJoongi Kim
 
AngularJS In Production
AngularJS In ProductionAngularJS In Production
AngularJS In ProductionMooYeol Lee
 
[오픈소스컨설팅] OpenShift PaaS Platform How-to
[오픈소스컨설팅] OpenShift PaaS Platform How-to[오픈소스컨설팅] OpenShift PaaS Platform How-to
[오픈소스컨설팅] OpenShift PaaS Platform How-toJi-Woong Choi
 
Cloudera session seoul - Spark bootcamp
Cloudera session seoul - Spark bootcampCloudera session seoul - Spark bootcamp
Cloudera session seoul - Spark bootcampSang-bae Lim
 
JBoss RHQ와 Byteman을 이용한 오픈소스 자바 애플리케이션 모니터링
JBoss RHQ와 Byteman을 이용한 오픈소스 자바 애플리케이션 모니터링JBoss RHQ와 Byteman을 이용한 오픈소스 자바 애플리케이션 모니터링
JBoss RHQ와 Byteman을 이용한 오픈소스 자바 애플리케이션 모니터링Ted Won
 
[개방형 클라우드 플랫폼 오픈세미나 오픈클라우드 Pub] 3.open shift 분석
[개방형 클라우드 플랫폼 오픈세미나 오픈클라우드 Pub] 3.open shift 분석[개방형 클라우드 플랫폼 오픈세미나 오픈클라우드 Pub] 3.open shift 분석
[개방형 클라우드 플랫폼 오픈세미나 오픈클라우드 Pub] 3.open shift 분석Tommy Lee
 
JCO 11th 클라우드 환경에서 Java EE 운영 환경 구축하기
JCO 11th 클라우드 환경에서 Java EE 운영 환경 구축하기JCO 11th 클라우드 환경에서 Java EE 운영 환경 구축하기
JCO 11th 클라우드 환경에서 Java EE 운영 환경 구축하기Ted Won
 
[Open Technet Summit 2014] 쓰기 쉬운 Hadoop 기반 빅데이터 플랫폼 아키텍처 및 활용 방안
[Open Technet Summit 2014] 쓰기 쉬운 Hadoop 기반 빅데이터 플랫폼 아키텍처 및 활용 방안[Open Technet Summit 2014] 쓰기 쉬운 Hadoop 기반 빅데이터 플랫폼 아키텍처 및 활용 방안
[Open Technet Summit 2014] 쓰기 쉬운 Hadoop 기반 빅데이터 플랫폼 아키텍처 및 활용 방안치완 박
 
Cloud life seminar open shift,이준영(배포용)
Cloud life seminar   open shift,이준영(배포용)Cloud life seminar   open shift,이준영(배포용)
Cloud life seminar open shift,이준영(배포용)Software in Life
 
[오픈소스컨설팅] ARM & OpenStack Community
[오픈소스컨설팅] ARM & OpenStack Community[오픈소스컨설팅] ARM & OpenStack Community
[오픈소스컨설팅] ARM & OpenStack CommunityOpen Source Consulting
 
Apache spark 소개 및 실습
Apache spark 소개 및 실습Apache spark 소개 및 실습
Apache spark 소개 및 실습동현 강
 
주니어 개발자의 서버 로그 관리 개선기
주니어 개발자의 서버 로그 관리 개선기주니어 개발자의 서버 로그 관리 개선기
주니어 개발자의 서버 로그 관리 개선기Yeonhee Kim
 
마이크로서비스 아키텍처로 개발하기
마이크로서비스 아키텍처로 개발하기마이크로서비스 아키텍처로 개발하기
마이크로서비스 아키텍처로 개발하기Jaewoo Ahn
 

Semelhante a LUA를 이용한 스마트한 웹서버 만들기 (Ray. Lee) (20)

Trace End-User Request (조동진)
Trace End-User Request (조동진)Trace End-User Request (조동진)
Trace End-User Request (조동진)
 
Apache Htrace overview (20160520)
Apache Htrace overview (20160520)Apache Htrace overview (20160520)
Apache Htrace overview (20160520)
 
Private PaaS with Docker, spring cloud and mesos
Private PaaS with Docker, spring cloud and mesos Private PaaS with Docker, spring cloud and mesos
Private PaaS with Docker, spring cloud and mesos
 
[제14회 JCO 컨퍼런스] 개발자를 위한 서버이중화 by JAVACAFE
[제14회 JCO 컨퍼런스] 개발자를 위한 서버이중화 by JAVACAFE  [제14회 JCO 컨퍼런스] 개발자를 위한 서버이중화 by JAVACAFE
[제14회 JCO 컨퍼런스] 개발자를 위한 서버이중화 by JAVACAFE
 
Open standard open cloud engine (3)
Open standard open cloud engine (3)Open standard open cloud engine (3)
Open standard open cloud engine (3)
 
RHAMT 소개
RHAMT 소개RHAMT 소개
RHAMT 소개
 
SOSCON 2017 - Backend.AI
SOSCON 2017 - Backend.AISOSCON 2017 - Backend.AI
SOSCON 2017 - Backend.AI
 
AngularJS In Production
AngularJS In ProductionAngularJS In Production
AngularJS In Production
 
[오픈소스컨설팅] OpenShift PaaS Platform How-to
[오픈소스컨설팅] OpenShift PaaS Platform How-to[오픈소스컨설팅] OpenShift PaaS Platform How-to
[오픈소스컨설팅] OpenShift PaaS Platform How-to
 
Cloudera session seoul - Spark bootcamp
Cloudera session seoul - Spark bootcampCloudera session seoul - Spark bootcamp
Cloudera session seoul - Spark bootcamp
 
JBoss RHQ와 Byteman을 이용한 오픈소스 자바 애플리케이션 모니터링
JBoss RHQ와 Byteman을 이용한 오픈소스 자바 애플리케이션 모니터링JBoss RHQ와 Byteman을 이용한 오픈소스 자바 애플리케이션 모니터링
JBoss RHQ와 Byteman을 이용한 오픈소스 자바 애플리케이션 모니터링
 
[개방형 클라우드 플랫폼 오픈세미나 오픈클라우드 Pub] 3.open shift 분석
[개방형 클라우드 플랫폼 오픈세미나 오픈클라우드 Pub] 3.open shift 분석[개방형 클라우드 플랫폼 오픈세미나 오픈클라우드 Pub] 3.open shift 분석
[개방형 클라우드 플랫폼 오픈세미나 오픈클라우드 Pub] 3.open shift 분석
 
JCO 11th 클라우드 환경에서 Java EE 운영 환경 구축하기
JCO 11th 클라우드 환경에서 Java EE 운영 환경 구축하기JCO 11th 클라우드 환경에서 Java EE 운영 환경 구축하기
JCO 11th 클라우드 환경에서 Java EE 운영 환경 구축하기
 
2015 oce garuda
2015 oce garuda2015 oce garuda
2015 oce garuda
 
[Open Technet Summit 2014] 쓰기 쉬운 Hadoop 기반 빅데이터 플랫폼 아키텍처 및 활용 방안
[Open Technet Summit 2014] 쓰기 쉬운 Hadoop 기반 빅데이터 플랫폼 아키텍처 및 활용 방안[Open Technet Summit 2014] 쓰기 쉬운 Hadoop 기반 빅데이터 플랫폼 아키텍처 및 활용 방안
[Open Technet Summit 2014] 쓰기 쉬운 Hadoop 기반 빅데이터 플랫폼 아키텍처 및 활용 방안
 
Cloud life seminar open shift,이준영(배포용)
Cloud life seminar   open shift,이준영(배포용)Cloud life seminar   open shift,이준영(배포용)
Cloud life seminar open shift,이준영(배포용)
 
[오픈소스컨설팅] ARM & OpenStack Community
[오픈소스컨설팅] ARM & OpenStack Community[오픈소스컨설팅] ARM & OpenStack Community
[오픈소스컨설팅] ARM & OpenStack Community
 
Apache spark 소개 및 실습
Apache spark 소개 및 실습Apache spark 소개 및 실습
Apache spark 소개 및 실습
 
주니어 개발자의 서버 로그 관리 개선기
주니어 개발자의 서버 로그 관리 개선기주니어 개발자의 서버 로그 관리 개선기
주니어 개발자의 서버 로그 관리 개선기
 
마이크로서비스 아키텍처로 개발하기
마이크로서비스 아키텍처로 개발하기마이크로서비스 아키텍처로 개발하기
마이크로서비스 아키텍처로 개발하기
 

LUA를 이용한 스마트한 웹서버 만들기 (Ray. Lee)

  • 1. Sarc Summit Summer 2016 by sarc.io June 11 삵 LUA를 이용한 스마트한 웹서버 만들기 Part1. Apache + LUA Ray. Lee sleepred@gmail.com
  • 2. Sarc Summit Summer 2016 by sarc.io Apache + LUA삵 • Overview • Apache + LUA • mod_lua 소개 • mod_lua Hook & Build-in functions • mod_lua 활용하기 • 정리
  • 3. Sarc Summit Summer 2016 by sarc.io Apache + LUA삵 Prologue • 전세계적으로 다양한 웹서비스 보급 • Trends - Cloud, Social Networking Service, Mobile↑ • 웹에 접속할 수 있는 사용자 ↑ Device ↑↑ • 웹서버의 이용 빈도의 급격한 증가 • 웹 컨텐츠의 증가 → 튜닝이 상당히 중요함 ◆ Total number of websites : 2016년 5월 기준 by netcraft.com - http://news.netcraft.com/archives/2016/05/26/may-2016-web-server-survey.html
  • 4. Sarc Summit Summer 2016 by sarc.io Apache + LUA삵 Prologue - Issue • Security, Perfermance, 대용량 처리, 운영 기술 문제 • 웹컨텐츠의 최적화만으로는 대응이 어려움 • 웹서버 소프트웨어 자체의 확장으로 대응 Stability Security Availability 웹서버 확장 Perfermance
  • 5. Sarc Summit Summer 2016 by sarc.io Apache + LUA삵 Prologue – 웹서버 확장 • 확장의 문턱이 높음(Apache의 경우) • C언어로 구현 (생산성이 문제) • Compile 이나 유지보수의 문제 • Apache 내부 메커니즘의 깊은 이해가 필요 최근의 Needs C언어의 고속성과 경량화 유지보수성과 생산성 Solution? Apache + Lua • Script에 의한 기능 확장의 Interface를 구현 • 웹서버의 내부 기능의 확장을 Script로 구현 가능 • 고속으로 동작하는 구현체가 필요
  • 6. Sarc Summit Summer 2016 by sarc.io Apache + LUA삵 Apache HTTP Server • Apache HTTP Server? • Top Open Source Communities – ASF Project • 현재는 Apache Software Foundation에서 오픈 소스로 공개하여 관리하고 있음 • 전세계 인터넷의 60% 이상의 웹서버에서 Apache 가 사용됨 ◆ Apache HTTP Server project - http://httpd.apache.org ◆ Apache Software Foundation - http://www.apache.org
  • 7. Sarc Summit Summer 2016 by sarc.io Apache + LUA삵 Apache 2.4 • Apache HTTP Server 2.4 • 2012년 12월 2.4.1 릴리즈 -> 7년만에 안정화판 릴리즈 • Nginx를 의식한 구현 및 개선 • 성능 개선, 메모리 사용량 감소 등등 • Default MPM이 변경 → Prefork에서 envent_mpm으로 • 다양한 모듈이나 기능 추가 개선 • mod_sed, mod_lua, bufferedlogs, rotatelogs 등 ◆ 시장점유율 : 2016년 5월 기준 by w3techs - https://w3techs.com/technologies/overview/web_serv er/all ◆ 시장점유율 : 2016년 5월 기준 by netcraft.com - http://news.netcraft.com/archives/2016/05/26/may- 2016-web-server-survey.html
  • 8. Sarc Summit Summer 2016 by sarc.io Apache + LUA삵 LUA 란? ◆ Application & Framework ◆ Game ◆ Web Server mod_lua ngx_lua
  • 9. Sarc Summit Summer 2016 by sarc.io Apache + LUA삵 LUA ? • LUA ? • 루아란 포르투갈어로 '달'이라는 뜻으로, 브라질에서 개발됨 • 가벼운 인터프린터 언어. 쉽고 가볍게 C/C++에 내장됨 • WOW의 유저 UI 스크립트 언어로 유명해짐 • LUA 특징 • 오픈 소스 • 이식성이 좋다. (C 언어와 호환성이 좋음) • 런타임 속도가 빠르다. (스크립트 언어 중에는 제일 성능이 좋음) ※ Lua official site : http://www.lua.org
  • 10. Sarc Summit Summer 2016 by sarc.io Apache + LUA삵 mod_lua • mod_lua • Apache에서 Lua를 동작하게 해주는 모듈 • Lua는 매우 가볍고 빠르다. (Script 언어중 ↑) • CGI 처럼 사용할 수 있음 (like mod_php, mod_perl..) • Apache Module 구현을 지원 (Apache Hook 함수 제공) • Apache 2.3(2.4)에 추가된 신기능 (Nginx를 의식해서 만들어짐?) • Lua의 Apache 모듈 구현 지원 방안 • Lua Script로 Apache를 Hook 시켜주는 인터페이스 제공 • Lua Script 내부에서 Apache의 내부 처리를 구현 가능 • request_rec 를 인자로 사용 가능 • apache2 모듈 이용가능 • C 기반 모듈에 비해 개발 생산성이 높고, 유지보수가 쉬움
  • 11. Sarc Summit Summer 2016 by sarc.io Apache + LUA삵 mod_lua 설치 • mod_lua 설치 • Apache 2.4 부터 지원 • '–enable-lua' 컴파일 옵션을 통해서 설치 • httpd.conf 설정 ./configure --prefix=$(설치 경로} --enable-lua ...... LoadModule lua_module modules/mod_lua.so <IfModule mime_module> AddHandler lua-script .lua </IfModule>
  • 12. Sarc Summit Summer 2016 by sarc.io Apache + LUA삵 Hello.lua 1 2 3 4 5 6 7 8 9 10 11 function handle(r) r.content_type = "text/html" r:puts([[ <html> <head><title>hello</title></head> <body><h1>Hello, I'm Lua</h1></body> </html> ]]) end
  • 13. Sarc Summit Summer 2016 by sarc.io Apache + LUA삵 mod_lua - request_rec • The request_rec structure • apache의 request_rec 구조체의 wrapper • 클라이언트의 요청 정보 등 Apache의 데이터를 참조하는 데 사용 • r.hostname (호스트명), r.uri (URI)와 같이 참조 ※ The request_rec structure : http://www.modlua.org/api/request
  • 14. Sarc Summit Summer 2016 by sarc.io Apache + LUA삵 mod_lua - LuaHook • LuaHook* • mod_lua는 Apache의 동작을 Hook하는 핸들러를 정의할수 있으며, 핸들러 정 의는 Apache의 동작 중 커스트마이징하려고 하는 타이밍에 의해 아래 Directive 를 Apache 설정 파일에 기술하는 방식 • 호출 순서 : LuaQuickHandler → LuaHookTranslateName → LuaHookMapToStorage → LuaHookAccessChecker → LuaHookFixups Hook phas mod_lua directive Description Quick handler LuaQuickHandler Reqeust 가 호출되었을때, 최초로 호출되는 hook Translate name LuaHookTranslateName URI로부터 파일명을 선택하는 타이밍 Map to storage LuaHookMapToStorage physical, cached , external/proxied 등 Storage를 선 택하는 타이밍 Check Access LuaHookAccessChecker 클라이언트가 리소스에 접속할 수 있는지 검증하는 타이밍 Check User ID LuaHookCheckUserID 사용자 ID를 검증하는 타이밍 Check Authorization LuaHookAuthChecker or LuaAuthz Provider 사용자 ID 등 사용자 권한을 인증하는 타이밍 Fixups LuaHookFixups content 처리 전 최후의 타이밍 Logging LuaHookLog content 처리 후 로그 처리의 타이밍
  • 15. Sarc Summit Summer 2016 by sarc.io Apache + LUA삵 mod_lua – apache2 package • apache2 Package • 실행중인 Apache의 정보를 가져올 수 있는 패키지. • 현재 버전 번호와 Apache의 동작을 제어하는 다음의 상수를 참조 할 수 있음. • 상수는 주로 다음을 핸들러 함수의 return 문에 지정하여 사용. 구분 설명 apache2.OK 요청 처리의 종료를 나타냄. lua 스크립트에 직접 응답을 생성하는 경우에 지정 apache2.DONE LuaHookLog 지시문에서 로그 처리를 Hook 할 때 OK 대신 지정 apache2.DECLINED Apache의 기본 동작을 처리함. lua script로 Apache의 동작/설정 등을 변경하고, 응답은 Apache의 content를 반환 시 지정 apache2.HTTP_MOVED_TEMPORARILY HTTP status code (302) 반환 ※ apache2 Package : http://httpd.apache.org/docs/current/mod/mod_lua.html#apache2
  • 16. Sarc Summit Summer 2016 by sarc.io Apache + LUA삵 mod_lua Example(1) Example) Under Construction ..
  • 17. Sarc Summit Summer 2016 by sarc.io Apache + LUA삵 mod_lua Example(1) 1 2 3 4 5 6 7 8 9 function construction(r) ctime = os.date("%H") if tonumber(ctime) > 19 and tonumber(ctime) > 22 then r.headers_out["Location"] = "http://27.122.xxx.xx:8001/image s/uc.html" // sorry server  return apache2.HTTP_MOVED_TEMPORARILY else return apache2.DECLINED end End 웹사이트 정기 점검 1 LuaHookTranslateName ${INSTALL_PATH}/conf/extra/lua/construction.lua construction • httpd-lua.conf • construction.lua
  • 18. Sarc Summit Summer 2016 by sarc.io Apache + LUA삵 Build-in functions • Build-in functions • FILESYSTEM FUNCTIONS • ENCODING/DECODING FUNCTIONS • SYSTEM FUNCTIONS • EXPRESSION PARSING • REQUEST PARSING FUNCTIONS • REQUEST RESPONSE FUNCTIONS • REQUEST MANIPULATION • DEBUGGING FUNCTIONS • exists_config_define • loaded_modules, module_info • mpm_query • scoreboard_process, scoreboard_worker • server_info, state_query • DATABASE FUNCTIONS ※ Built-in functions : http://www.modlua.org/api/builtin
  • 19. Sarc Summit Summer 2016 by sarc.io Apache + LUA삵 mod_lua Example(2) Example) Server Status..
  • 20. Sarc Summit Summer 2016 by sarc.io Apache + LUA삵 mod_lua Example(2) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 -- Fetch server data local mpm = "prefork" -- assume prefork by default if r.mpm_query(14) == 1 then mpm = "event" -- this is event mpm elseif r.mpm_query(3) >= 1 then mpm = "worker" -- it's threaded, we'll assume worker mpm End local maxServers = r.mpm_query(12); local maxThreads = r.mpm_query(6); …… -- Fetch process/thread data for i=0,maxServers,1 do server = r.scoreboard_process(r, i); …… end end …… 1 LuaMapHandler ^/lua-status$ ${INSTALL_PATH}/conf/extra/lua/server-st atus.lua • httpd-lua.conf • server-status.lua
  • 21. Sarc Summit Summer 2016 by sarc.io Apache + LUA삵 정리! • Apache + LUA = mod_lua • Apache 2.4에서도 아직 experimental state 이지만, Apache 버전이 올라가면서 (2.4.20 버전 기준) 완성도가 높아짐 • Apache 2.4에 기본 모듈에 포함되어 있으며, Apache 모듈에 쉽게 접근 가능하 여 웹서버 확장 및 기능 추가시 유용하게 사용할 수 있음 • mod_lua 생산성, 유지보수성을 중요시 한다면, 최선의 선택 성능도 스크립트 언어 중에서 가장 띄어남 • 성능이 최우선시 되어야 된다면, mod_hell (C언어)의 대안으로 mod_mruby(Apache 내부처리를 Ruby로 제어) 검토 해볼 수 있음 • Nginx 를 사용한다면, Lua를 사용하여 더 쉽고 강력하게 확장가능 LuaJIT, 다양한 ngx_lua API 제공 등 → Part2. NGINX + lua … Coming soon ^^
  • 22. Sarc Summit Summer 2016 by sarc.io Apache + LUA삵 Reference • Reference • Apache HTTP Server : http://httpd.apache.org/ • mod_lua : https://httpd.apache.org/docs/trunk/mod/mod_lua.html http://www.modlua.org/ • Lua Reference Manual : http://www.lua.org/manual/ • Lua official site : http://www.lua.org • Lua user group : http://lua-users.org/
  • 23. Sarc Summit Summer 2016 by sarc.io Apache + LUA삵 Q / A Q / A