서버리스란 무엇일까요?
여기 서버가 있습니다.
이 서버에서 서비스를 하기 위해서 우리가 해야 할 일들은 다음과 같습니다. (클릭)
오프레이팅 시스템을 관리하고, 런타임, 컨테이너, 라이브러리를 깔고 여러분이 작성한 애플리케이션을 올리게 되죠
관리도 많이 들고, 비용도 많이 듭니다. 확장도 어렵습니다.
그래서 우리는 클라우드를 도입하게 됩니다.(클릭)
그럼, 하위 두개의 관리사항이 없어지죠(클릭)
애플리케이션을 배포하고 서비스 하고 확장하기 위해 컨테이너 영역만 신경 쓰면 됩니다.
하드웨어와 기본 OS를 신경 안 써도 되게 되었습니다.
하지만, 컨테이너의 확장에 관해 신경 써야 하고, 아직 요청이 없어 서비스가 대기상태에서 비용은 지불됩니다.
결국.. 서버는 신경 쓰지 않고 순수 서비스만 집중하고자 하는 아키텍처가 생기게 됩니다.
이것이 서버리스 아키텍처입니다.
서버리스를 말 그대로 풀이하자면 서버가 없다는 말이죠.
비록 서버리스 아키텍처로 구현했다 하지만, 사실 고객에게 서비스 하기위해서 수행되는 서버는 수없이 많이 있을 겁니다.
우리가 서버리스라 부르는 이유는
서버에 대해 신경쓰지 않을 수 있기 때문입니다.
로드밸런싱, 서비스 확장, 스케일 업/다운, 인증, 인가, 보안, 모든것이 개발자는 신경 쓰지 않아도 됩니다.
또한 단위가 매우 작기 때문에 서비스가 준비되는 시간이 몇 밀리세컨드안에 시작 가능하고
비용 또한 사용한 시간만 지불되기 때문에 대기하고 있는 시간에는 비용이 차징이 안 됩니다.
예전에 모놀리틱 아키텍처라고 모든 서비스가 묶여서 하나의 큰 덩어리로 이루어져 있다면
이를 세부적으로 잘라 작은 서비스 하나 하나 마이크로서비스로 만들어 서비스 하는 방식에서
마이크로 서비스에서 사용되는 작은 function 단위로 개발하는 방식이 서버리스 아키텍처 방식입니다.
기존의 클라우드 서비스와 비교하자면,
여기 보라색이 오라클에서 관리하는 영역이고
파란색이 스케일 업/다운 부분
그리고 녹색이 사용자가 관리해야 할 부분입니다.
IaaS는 하드웨어까지는 프로바이더가 관리하고
Container 서비스는 OS 까지.
그리고 PaaS는 애플리케이션의 런타임까지 관리합니다.
PaaS에서는 애플리케이션의 스케일 업/다운이 단위가 되고,
FaaS에서는 애플리케이션 내의 작은 단위인 Function 이 스케일 업/다운의 단위가 됩니다.
고객이 필요로하는 자원 및 용량 만 공급자가 자동으로 관리합니다.
그래서 서비스만 신경 쓰면 됩니다.
필요로 하는 자원 및 용량은 Function 단위로 주어집니다.
Serverless는 서버가 필요 없다는 것을 의미하지는 않습니다.
서버리스의 포인트는 더 이상 서버에 대해서 생각하지 않는 것입니다.
Functions-as-a-Service 라고 FaaS 플랫폼은 servlerless 아키텍처의 중심입니다.
Function은 그 자체로 일을 수행할 수 있는 작은 단위입니다. 어떤 입력을 받고 기능을 수행한 다음 아웃풋을 내는 형태이죠.
이 작은 다위가 FaaS 플랫폼의 하나의 유닛으로 디플로이 되고,
FaaS 플랫폼은 인프라스트럭처에 프로비져닝 하고 function code를 배포하고, 스케일 업/다운, 빌링, 인증, 인가 와 같은 보안을 제공합니다.
매우 빠르고 스케일도 매우 클 수 있으며 어떤 언어나 플랫폼에서도 수행할 수 있습니다.
최근 클라우드는 다음과 같은 형태의 애플리케이션 서비스 타입을 제공하고 있습니다.
Oracle Compute 같은 Infrastructure Cloud 인 VM에서 서비스 하는 방법
Oracle Application Container 같은 Platform Cloud 인 PaaS에서 서비스 하는 방법
Oracle Container Service 같은 Docker 같은 Container에서 서비스 하는 방법
그리고 마지막으로 애플리케이션을 Function 으로 서비스하는 방법입니다.
각각의 타입에 따라
사용자가 관리해야 할 영역이 다릅니다.
그 만큼 프로바이더가 관리해주는 영역도 다릅니다.
FaaS는 서버에 관한 영역은 프로바이드에게 맡기고
오직 서비스를 위한 코드만 집중하면 됩니다.
예를 들어 FaaS의 자동 스케일링 특성으로 인해 개발자는 복잡한 모니터링, 메트릭 및 프로비저닝 코드를 많이 작성할 필요가 없습니다.
서비스만 집중하기 때문에 서비스의 업데이트 주기도 빨라지게 되고, 양질의 서비스를 구현할 수 있습니다.
오직 서비스에만 신경 쓰기 위해서 만들어진 서버리스 플랫폼은
당연히 주요 포커싱이 코드입니다.
코드에만 신경 쓰면 된다는 얘기죠.
FaaS는 앱을 작고 고립 된 형태로 나누어 구성할 것을 권장합니다. 작고 고립 된 기능은 해당 기능에만 집중하고 관리하기 쉽기 때문에 FaaS 앱 개발에 적합합니다.
하지만 FaaS 자체 만으로는 충분하지 않습니다.
현재상태를 보고 다음을 처리하기 위한 무언가 필요합니다.
기본적으로 Functions는 Stateless 로 상태를 가지고 있지 않습니다.
output을 통해서 다른 function과의 관계를 정의 할 수 있어야 합니다.
FaaS 플랫폼은 앱이 특별한 코드를 작성하지 않아도 요청에 따라 유기적으로 확장 할 수 있게 해줍니다.
그리고 소매업에서 발생될 수 있는 계절적 변화에 따른 요청뿐만 아니라 어떤 이슈에 의해 갑작스럽고 급격한 요청에도 대응이 가능합니다.
서버가 없으면 컴퓨팅의 경제성도 바뀝니다.
두 가지 기본 원칙은 다음과 같습니다.
- 코드가 실행되지 않는 동안 비용을 지불하지 않아도 됩니다.
- 당신이 지불 할 때 소비 된 자원에 대해 1 초 단위로 지불합니다. 일반적으로 RAM을 100ms 단위로 증가시킵니다.
2차 효과도 있습니다.
- 개발자는 인프라 및 소프트웨어 수명주기를 관리하는 대신 고객의 삶을 향상시키는 코드 작성에 집중할 수 있습니다. 더 생산적인 개발자 = 더 행복한 개발자 =보다 생산적인 개발자.
- FaaS는 VM만을 사용하는 것보다 작업 부하를 훨씬 더 조밀하게 처리 할 수 있습니다. 이를 통해 하드웨어를보다 효율적으로 사용할 수 있으므로 가격 대비 성능이 향상됩니다.
- 복잡성이 플랫폼으로 옮겨지고 처리됩니다. 예를 들어 FaaS의 자동 스케일링 특성으로 인해 개발자는 복잡한 모니터링, 메트릭 및 프로비저닝 코드를 많이 작성할 필요가 없습니다.
1 초 미만의 청구, 원활한 확장 및 작고 재사용 가능한 기능의 결합은 우리가 개발에 대해 생각하는 방식을 바꿀 것입니다. 툴과 프랙티스가이 세분화 된 해결책을 따라 잡으면 저조한 코드가 잘못 작성되어 재정적 인 영향이 즉각적으로 드러날 것이며 개발자는 값 비싼 라이브러리와 함수 사용을 중단하게됩니다. 이것은 학문으로서 소프트웨어 공학의 성숙에 엄청난 긍정적 인 영향을 미칠 잠재력을 가지고 있습니다.
Functions-as-a-Service는 서버리스 아키텍처의 중심입니다.
Function은 그 자체로 수행할 수 있는 작은 단위이며
이러한 Function이 하나의 유닛으로 Funcions-as-a-Service에 배포가 됩니다.
FaaS의 특징은
먼저 서버에 관해서 알 필요가 없다는 것입니다.
두번째로 이벤트 드리븐이입니다. 즉, 이벤트가 있을 때에 수행한다는 의미입니다.
이벤트를 통해서 호출되기 때문에 매우 가용성이 좋습니다.
그리고 Function 이 수행하기 위해 준비되는 기간이 밀리센컨드 단위로 매우 빠릅니다.
또한 호출될 때만 과금이 되기고 비용은 초단위로 결정지어지므로 서비스 운영 비용이 줄어듭니다.
Service-as-a-Serviceless 또는 Serverless는 기본 인프라에 대한 관심이 낮고 코드 작성에 더 많은 관심을 기울이는 급속도로 증가하는 움직임입니다.
이벤트 기반 서비스 내에서 코드를 시작합니다.
사람들은 주로 람다를 생각합니다. Azure와 Google Functions도 있습니다. 클라우드 제공 업체는 모두 독점적입니다.
전략 : 오픈 소스 및 커뮤니티 기반.
Iron.io를 인수하여 클라우드 중립 서버리스 솔루션을 구축 한 최초의 회사입니다. 신뢰성을 제공합니다.
클라우드 중립. 어디서나 쿠버네테스 에서 뛰게 될 것입니다. 독점 금지는 없습니다.
Docker에서 지역 개발을 할 수 있습니다. 데스크톱에서 디버그하십시오. 클라우드 서비스에 배포 할 때 서버리스가됩니다.
오라클이 생각하는 이상적인 Function 플랫폼은
우선 오픈소스이어야 합니다. 특정 밴더에 종속되어서는 안되고
자신의 랩탑 컴퓨터나 자사의 서버에서 수행할 수 있고 동일한 Function이 클라우드에도 수행되어야 합니다.
그래서 접근성이 쉽고 사용하기 편리해야 합니다.
자신의 컴퓨터에서 테스트 하고 클라우드로 옮겨서 수행할 수 있어야 합니다.
Docker 기반에 쿠버네테스나 도커 스웜같은 여러가지 툴로 디플로이 되어야 합니다.
이러한 특성의 FaaS를 위해서 이번달에 오라클은 Fn 프로젝트를 발표했습니다.
Fn 은 오픈소스 Function-as-a-Service 플랫폼입니다.
이번에 달에 발표 되었습니다.
아파치 2.0 라이센스를 따르구요
기존의 서버리스 플랫폼인 iron.io 의 구성원들이 만들었습니다.
fn 프로젝트는 다음의 3가지로 구성됩니다.
Fn Server
Function Development Kit
Fn Flow.
Fn 서버 – Function as a Service를 실현한 서버입니다.
클라우드에서도 노트 PC에서도 실행 가능 컨테이너 네이티브로 개발 됨
개발과 테스트 배포까지 자신의 노트북에서 하고
배포를 다시 클라우드에 해서 고객에게 서비스 할 수 있습니다.
두번째르 FDK 개발킷입니다.
쉽게 Funcation 을 개발하도록 도와주는 것으로서 Java 도 지원이 되고 파이썬, go 언어, php, 루비등 폴리그랏 프로그래밍을 지원합니다.
세번째로는 FnFow 입니다.
Function들의 워크플로를 정의하고 모니터링 할 수 있습니다.
Fn Server 는
Function as a service를 수행하는 서버이며
Docker Native 합니다.
Docker 를 기반으로 서비스 되며
자신의 pc에서도 클라우드에서도 서비스 됩니다.
개발과 TEST를 자신의 노트북에서 합니다.
Function 을 개발하기 위한 폴리그랏 플랫폼을 제공합니다.
기본적으로 Java 를 지원을 합니다.(클릭)
그리고 여러가지 파이선, 노드, 루비, 펄, 고언어 등등.
야물 파일에 언어의 타입만 기록해 주면 배포되고 수행됩니다.
FDK로 Hello World 를 출력하는 예제입니다.
사용하려는 언어만 정해주면 소스 템플릿을 제공하고
로직을 넣고
build 와 deploy 만 하면 서비스가 수행될 수 있습니다.
각각 언어에 필요한 라이브러리는
자동으로 docker에서 받아서 자동으로 구성해 줍니다.
Fn Flow는 워크 플로우 문제를 해결합니다.
크기가 작고 확장 가능한 기능을 만들 수있는 좋은 방법이 있지만 더 복잡한 앱을 작성하려면 어떻게해야할까요?
각 Function을 수행하고 결과에 따라 분기하고, 또 join 하고 하는 과정으로 도와줍니다.
예를 들어 여행앱을 작성한다고 생각해 봅시다.
비행기를 예약하고
호텔을 예약하고
렌터카를 예약하고
완료 메일을 보냅니다.
이는 모두 각기 다른 언어로 작성 가능합니다.
코드 작성과 작동 여부에 대한 피드백을 받는 동안 기다려 하는 오랜시간 만큼
개발자에게 생산성이 떨어지는 것은 없습니다.
이전에는 컴파일 하고, 테스트 또는 CI는 실행되기를 기다렸지만
현재는 코드가 클라우드에 업로드 및 배포되기를 기다리고 있습니다.
복잡한 앱의 경우 시간이 오래 걸리므로 집중력을 잃고 흐름을 잃게 됩니다.
클라우드 까지 가지 않고 자신의 노트북에서 개발/테스트 환경을 제공함으로써
수분에서 수초에 이르기까지 피드백주기를 낮추고 생산성을 높일 있습니다.
1. Fn Java FDK (기능 개발 키트)는 높은 충실도의 Junit 호환 테스트 환경을 제공하므로 코드를 배포하기 전에 높은 수준의 확신을 얻을 수 있습니다.
2. Fn은 오픈 소스이므로 배포 할 클라우드 서비스에서 실행될 랩톱에서 똑같은 서버를 실행할 수 있습니다.
3. 클라우드 배포는 Docker 이미지 레이어를 활용하여 새로운 배포를 위해 전송되는 데이터의 양을 최소화합니다.
이렇게 개발이 끝난 Function 들을 가지고
이제 Function들의 상태를 제어 해야 합니다.
이는 Fn Flow에서 가능합니다.
Java는 이미 비동기 함수를 구성하는 메커니즘을 가지고 있습니다. Java 8에서 도입되고 Java 9에서 개선 된 CompletionStage API는 안전하고 멋진 프리미티브 API를 제공합니다.
이를 통해 동시성, 팬 아웃, 팬 인 및 기타 분산 프로그래밍 프리미티브를 지정할 수있는 비동기 계산 그래프를 작성할 수 있습니다.
자, 그럼 여기서 오늘 발표 한 내용을 한번 요약해 보도록 하겠습니다.
오라클은 서버리스 아키텍처를 위해 fn 프로젝트를 발표했습니다.
Docker 베이스로 여러 오케스트레이터 툴의 사용이 가능합니다.
그리고 JAVA 뿐만 아니라 폴리그랏 프로그래밍을 지원합니다.
가장 익숙한 언어가 자바라면, Java에서 작고 재사용 가능한 기능을 개발하고 플랫폼에서 규모, 배포 및 모든 인프라 관련 문제를 처리하도록하십시오.
Function 들은 Trigger 를 통해서 호출이 됩니다.
현재 Oracle이 가지고 있는 여러 서비스들에서 Trigger를 할 수 있습니다.
Kafka Event Bus,
API Platform
Database,
MySQL
Cache
WebHook
Management Cloud Service,
Message Cloud Service 등등.
거의 모든 서비스에서 FaaS를 호출 할 수 있습니다.
여러 서비스에서 트리거링 되어 Function은 호출되고
이는 워크플로를 가지고 있으며
Docker 와 여러 오케스트레이션 툴에 의해서 스케일 업/다운 될것입니다.