
— usa sa labing mamatikdan nga mga uso sa cloud computing. Ang kinauyokan nga prinsipyo mao nga ang imprastraktura responsibilidad sa service provider, dili sa DevOps. Ang resource scaling awtomatikong mo-adjust sa load ug mo-scale dayon.
Laing komon nga bahin mao ang tendensiya nga i-minimize ug i-focus ang code, mao nga ang serverless computing usahay gitawag nga "function as a service" (FaaS).
Sa kasaysayan, ang Amazon mao ang unang cloud service provider nga nagtanyag og FaaS uban sa AWS Lambda, busa mao kini ang ngalan. Ang ubang cloud service providers nagtanyag usab og susamang mga tanyag:
- Mga Function sa Cloud gikan sa Google
- Mga Function sa Azure gikan sa Microsoft
Kining tanan nga mga kompanya nagtanyag og serverless computing, automatic scaling, ug pay-as-you-go nga presyo, apan ilang gi-lock ang mga kustomer sa ilang kaugalingong mga produkto. Bisan pa, adunay libre, open-source nga mga alternatibo para sa serverless computing. Angayan nga matikdan:
- Plataporma , nga gihimo sa usa ka incubator sa IBM,
- , isip kabahin sa dato nga Spring Framework ecosystem, nga magamit usab isip usa ka facade para sa AWS Lambda, Azure Functions, ug OpenWhisk,
- , gisuportahan sa Oracle.
Tanan sila hingpit nga cloud-agnostic, nagpasabut nga mahimo kini ma-install sa bisan unsang cloud, lakip ang imoha, publiko o pribado, ug siyempre, sa Exoscale.
Giunsa paglihok ang proyekto sa Fn
Ang Fn gibase sa Docker ug gilangkoban sa duha ka nag-unang sangkap:
- Programa sa CLI nga gidisenyo aron madumala ang tanang aspeto sa imprastraktura sa Fn ug makig-uban sa Fn server,
- Ang Fn server mismo usa ka regular nga aplikasyon nga giputos sa usa ka Docker container.
Ang mga gimbuhaton nga gi-deploy sa Fn gipatuman usab sa managlahing mga sudlanan, nga nagtugot kanamo sa pagsuporta sa lainlaing mga pinulongan sa programming, sama sa… Clojure!
Ang mga argumento sa function ipasa ngadto sa standard input (STDIN), ug ang mga resulta isulat ngadto sa standard output (STDOUT). Kon ang mga argumento o mga return value dili mga simpleng value (pananglitan, usa ka JSON object), mahimo kining i-transform gamit ang abstraction layer nga gihatag mismo sa Fn sa porma sa usa ka function development kit (FDK).
Para sa kasayon, gitanyag ang built-in nga mga template set aron mapadali ang pag-deploy sa FaaS sa lain-laing mga pinulongan ug sa ilang mga bersyon (Go, lain-laing mga bersyon sa Java, Python, ug uban pa).
Sayon ra ang paghimo og FaaS, sunda kini nga diagram:
- Ang pag-deploy sa usa ka function gamit ang Fn CLI makamugna og application configuration file para sa Fn base sa pinili nga template.
- Among gilunsad ang among kaugalingong function, gamit pag-usab ang Fn CLI: ang container image gibutang sa usa ka piho nga repository, pagkahuman ang server gipahibalo sa paglungtad ug lokasyon niini nga imahe.

Ang prinsipyo sa paghatag og mga gimbuhaton sa Fn
Pag-instalar ug pagsulay sa mga gimbuhaton nga walay server sa lokal nga paagi
Sugdan nato ang pag-install sa Fn sa lokal nga makina. Una, atong i-install ang Docker, sumala sa gikinahanglan sa Fn. Kini nagpasabot nga kita anaa sa Debian/Ubuntu:
$ sudo apt-get update
$ sudo apt-get install docker.ioO gamita ang package manager/Docker build nga angay sa imong sistema. Dayon mahimo ka nang mopadayon direkta sa pag-install sa Fn CLI. Pananglitan, gamit ang curl:
$ curl -LSs https://raw.githubusercontent.com/fnproject/cli/master/install | shKon nagpadagan ka sa OSX nga naka-install ang Homebrew, mahimo kang mogamit ug laing pamaagi:
$ brew install fn
==> Downloading https://homebrew.bintray.com/bottles/fn-0.5.8.high_sierra.bottle.tar.gz
==> Downloading from https://akamai.bintray.com/b1/b1767fb00e2e69fd9da73427d0926b1d1d0003622f7ddc0dd3a899b2894781ff?__gda__=exp=1538038849~hmac=c702c9335e7785fcbacad1f29afa61244d02f2eebb
######################################################################## 100.0%
==> Pouring fn-0.5.8.high_sierra.bottle.tar.gz
/usr/local/Cellar/fn/0.5.8: 5 files, 16.7MBKaron andam na ta nga i-deploy ang atong function gamit ang CLI. Para mas sayon, mogamit ta og built-in runtime, sama sa Node:
$ fn init --runtime node --trigger http hellonode
Creating function at: /hellonode
Function boilerplate generated.
func.yaml created.Usa ka bag-ong direktoryo ang himoon hellonode Aron mapalambo pa ang atong Fn function, maghimo kita og pipila ka mga batakang configuration file. Sulod sa bag-ong gibuhat nga directory, mahimo nimong buhaton ang imong aplikasyon, nga nagsunod sa mga sumbanan sa imong gipili nga pinulongan o runtime environment:
# Каталог с node выглядит так:
hellonode
├── func.js
├── func.yaml
└── package.json
# Свежеустановленное окружение Java11 такое:
hellojava11
├── func.yaml
├── pom.xml
└── src
├── main
│ └── java
│ └── com
│ └── example
│ └── fn
│ └── HelloFunction.java
└── test
└── java
└── com
└── example
└── fn
└── HelloFunctionTest.javaAng Fn nagmugna sa inisyal nga istruktura sa proyekto, nagmugna og usa ka file func.yaml, nga adunay sulod nga gikinahanglan nga mga setting para sa Fn, ug nagtakda sa template para sa code sa pinulongan nga imong gipili.
Sa kaso sa Node runtime, kini nagpasabot:
$ cat hellonode/func.js
const fdk=require('@fnproject/fdk');
fdk.handle(function(input){
let name = 'World';
if (input.name) {
name = input.name;
}
return {'message': 'Hello ' + name}
})Karon atong dali nga sulayan ang atong function sa lokal aron makita kung giunsa molihok ang tanan.
Una, atong ilunsad ang Fn server. Sama sa nahisgotan na, ang Fn server usa ka Docker container, busa kung ilunsad na, kuhaon niini ang imahe gikan sa Docker registry.
$ fn start -d # запускаем локальный сервер в фоне
Unable to find image 'fnproject/fnserver:latest' locally
latest: Pulling from fnproject/fnserver
ff3a5c916c92: Pull complete
1a649ea86bca: Pull complete
ce35f4d5f86a: Pull complete
...
Status: Downloaded newer image for fnproject/fnserver:latest
668ce9ac0ed8d7cd59da49228bda62464e01bff2c0c60079542d24ac6070f8e5Aron mapadagan ang atong function, kinahanglan nato kining ilunsad. Nagkinahanglan kini og имя приложенияSa Fn, ang tanang aplikasyon kinahanglan nga ipiho isip mga namespace para sa mga may kalabutan nga gimbuhaton.
Mangita ang Fn CLI sa file func.yaml sa kasamtangang direktoryo, nga gamiton sa pag-configure sa function. Busa una, kinahanglan natong moadto sa atong direktoryo. hellonode.
$ cd hellonode
$ fn deploy --app fnexo --local # выкатываем функцию локально, имя приложения - fnexo.
# параметр local не заливает образ в удаленный реестр,
# запуская его напрямую
Deploying hellonode to app: fnexo
Bumped to version 0.0.2
Building image nfrankel/hellonode:0.0.3 .
Updating function hellonode using image nfrankel/hellonode:0.0.3...
Successfully created app: fnexo
Successfully created function: hellonode with nfrankel/hellonode:0.0.3
Successfully created trigger: hellonode-triggerSama sa imong makita sa output sa sugo, usa ka bag-ong imahe sa Docker container ang gihimo nga adunay sulod sa atong function. Ang function andam na nga tawagon, ug aduna kitay duha ka paagi sa pagbuhat niini:
- gamit ang Fn command
invoke - direkta nga pagtawag pinaagi sa
http
Hagit invoke Ang paggamit sa Fn mosundog lang sa operasyon sa HTTP para sa mga pagsulay, nga sayon para sa dali nga pagsusi:
$ fn invoke fnexo hellonode # вызываем функцию hellonode приложения fnexo
{"message":"Hello World"}Para direktang tawagan ang usa ka function, kinahanglan nimong masayran ang kompletong URL:
$ curl http://localhost:8080/t/fnexo/hellonode-trigger
{"message":"Hello World"}Ang Fn server nagpakita sa mga gimbuhaton niini sa port 8080, ug ang URL sa gimbuhaton daw mohaom sa eskema. t/app/function, apan dili hingpit. Ang usa ka function dili direktang gitawag pinaagi sa HTTP, apan pinaagi sa gitawag nga trigger, nga, sama sa gisugyot sa ngalan niini, "magsugod" sa function call. Ang mga trigger gihubit sa `func.yml proyekto:
schema_version: 20180708
name: hellonode
version: 0.0.3
runtime: node
entrypoint: node func.js
format: json
triggers:
- name: hellonode-trigger
type: http
source: /hellonode-trigger # URL триггераMahimo natong usbon ang ngalan sa trigger aron mohaom sa ngalan sa function, kini makapasimple sa tanan:
triggers:
- name: hellonode-trigger
type: http
source: /hellonode # совпадает с именем функцииDayon atong padaganon pag-usab ang function delivery ug tawagon kini gikan sa usa ka bag-ong trigger:
$ fn deploy --app fnexo hellonode --local
$ curl http://localhost:8080/t/fnexo/hellonode
{"message":"Hello World"}Nagtrabaho na ang tanan! Panahon na aron mopadayon sa mga eksperimento sa tinuod nga kalibutan ug i-publish ang atong FaaS sa server!
Pag-instalar sa mga serbisyo sa function nga walay server sa imong kaugalingong imprastraktura
Atong dali nga i-set up ang usa ka virtual machine gamit ang Exoscale CLI. Kung wala pa nimo kini ma-set up, mahimo nimo gamiton Kini usa ka nindot nga himan nga dugang nga makadugang sa imong produktibidad. Ayaw kalimti ang pag-configure og rule aron maablihan ang port 8080 sa Security Group! Ang mosunod nga mga sugo maglunsad og limpyo nga virtual machine nga andam na sa pag-host sa atong mga gimbuhaton:
$ exo firewall create fn-securitygroup
$ exo firewall add fn-securitygroup ssh --my-ip
$ exo firewall add fn-securitygroup -p tcp -P 8080-8080 -c 0.0.0.0/0
$ exo vm create fn-server -s fn-securitygroupDayon mahimo ka nga mag-log in pinaagi sa ssh sa virtual machine ug i-install ang remote Fn server:
$ exo ssh fn-server
The authenticity of host '185.19.30.175 (185.19.30.175)' can't be established.
ECDSA key fingerprint is SHA256:uaCKRYeX4cvim+Gr8StdPvIQ7eQgPuOKdnj5WI3gI9Q.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '185.19.30.175' (ECDSA) to the list of known hosts.
Welcome to Ubuntu 18.04 LTS (GNU/Linux 4.15.0-20-generic x86_64)Dayon among gi-install ang Docker ug ang Fn server sa parehas nga paagi sama sa among gibuhat sa lokal nga makina, ug gisugdan ang server:
$ sudo apt-get update
$ sudo apt-get install docker.io
$ sudo systemctl start docker
$ curl -LSs https://raw.githubusercontent.com/fnproject/cli/master/install | sh
$ sudo fn start
...
______
/ ____/___
/ /_ / __
/ __/ / / / /
/_/ /_/ /_/
v0.3.643Andam na ang Fn nga modawat og mga gimbuhaton! Aron ibalhin ang mga gimbuhaton ngadto sa usa ka hilit nga server, atong gamiton ang sugo deploy gikan sa lokal nga kompyuter, nga wala ang bandila --local.
Dugang pa, ang Fn nagkinahanglan sa pagtino sa lokasyon sa Fn server ug sa Docker registry. Kini nga mga parameter mahimong itakda pinaagi sa mga environment variable. FN_API_URL и FN_REGISTRY subay niana, apan usa ka mas sayon nga paagi ang gitanyag usab aron dali nga madumala ang paghimo ug pagdumala sa mga konpigurasyon sa deployment.
Sa termino sa Fn, ang configuration para sa deployment gitawag og contextAng mosunod nga sugo maghimo og konteksto:
$ fn create context exoscale --provider default --api-url http://185.19.30.175:8080 --registry nfrankelMahimo nimong tan-awon ang magamit nga mga konteksto sama niini:
$ fn list contexts
CURRENT NAME PROVIDER API URL REGISTRY
default default http://localhost:8080/
exoscale default http://185.19.30.175:8080 nfrankel
Ug aron mobalhin sa konteksto nga bag-o lang gibuhat, buhata kini:
$ fn use context exoscale
Now using context: exoscaleSugod dinhi, ang paghatud sa bahin sa Fn mag-download sa mga imahe sa Docker gamit ang napili nga account sa DockerHub (sa akong kaso, nfrankel), ug dayon ipahibalo ang remote server (niini nga pananglitan, http://185.19.30.175:8080) mahitungod sa lokasyon ug bersyon sa pinakabag-ong imahe nga adunay sulod nga imong feature.
$ fn deploy --app fnexo . # выполняется на локальной машине из каталога hellonode
Deploying function at: /.
Deploying hellonode to app: fnexo
Bumped to version 0.0.5
Building image nfrankel/hellonode:0.0.5 .Sa katapusan:
$ curl http://185.19.30.175:8080/t/fnexo/hellonode
{"message":"Hello World"}
Siklo sa Kinabuhi sa Function sa Serverless Computing gamit ang Fn
Mga benepisyo sa on-premises serverless computing
Ang serverless computing usa ka kombenyente nga solusyon para sa dali nga pagpatuman sa independente nga mga bahin sa usa ka aplikasyon nga nakig-uban sa mas komplikado nga mga aplikasyon o microservices.
Kasagaran kini tungod sa tinago nga gasto sa pag-apil sa usa ka pinili nga supplier, nga, depende sa piho nga gamit ug gidaghanon, mahimong mosangpot sa mas taas nga gasto ug pagkunhod sa pagka-flexible sa umaabot.
Ang mga arkitektura sa multi-cloud ug hybrid cloud nag-antos usab niini nga kaso, tungod kay dali ka nga makit-an ang imong kaugalingon sa usa ka sitwasyon diin gusto nimong mogamit og serverless computing, apan tungod sa mga palisiya sa korporasyon, kini mahimong dili mahimo.
Sayon ra gamiton ang Fn ug makahatag og halos parehas nga FaaS interface nga gamay ra ang gasto. Wala nay vendor lock-in; mahimo nimo kining i-install sa lokal o sa imong gusto nga cloud provider. Gawasnon ka usab sa pagpili sa imong programming language.
Kini nga artikulo naghisgot lang sa mga sukaranan sa Fn, apan ang paghimo sa imong kaugalingong runtime medyo sayon ra, ug ang kinatibuk-ang arkitektura mahimong mapadako pa pinaagi sa paggamit sa Fn load balancer, o pinaagi sa pagbutang sa Fn sa luyo sa usa ka proxy para sa proteksyon.
Source: www.habr.com
