Pagtukod sa atong kaugalingong serverless base sa Fn
Pag-compute nga walay server mao ang usa sa labing inila nga uso sa cloud computing. Ang sukaranan nga prinsipyo sa operasyon mao nga ang imprastraktura dili ang kabalaka sa DevOps, apan sa service provider. Ang pag-scale sa kahinguhaan awtomatikong mo-adjust sa load ug adunay taas nga rate sa pagbag-o.
Ang laing komon nga bahin mao ang kalagmitan sa pagpamenos ug pag-focus sa code, mao nga ang serverless computing usahay gitawag function as a service (FaaS).
Sa kasaysayan, ang una nga cloud provider nga nagtanyag sa FaaS sa AWS Lambda mao ang Amazon, busa ang ngalan. Ang ubang mga cloud service provider nagtanyag usab og susama nga mga:
Cloud Functions gikan sa Google
Azure Functions gikan sa Microsoft
Ang tanan niini nga mga kompanya naghatag og serverless computing, auto-scaling, ug nagbayad lang sa aktuwal nimong gigamit, apan ilang gi-lock ang mga kustomer sa ilang proprietary nga produkto. Bisan pa, adunay libre ug bukas nga gigikanan nga mga alternatibo alang sa serverless computing. Kini angay nga matikdan:
Mga Function sa Spring Cloud, isip kabahin sa usa ka medyo adunahan nga Spring Framework ecosystem, nga mahimo usab nga gamiton isip facade alang sa AWS Lambda, Azure Functions ug OpenWhisk,
Ang tanan niini hingpit nga independente sa mga panganod, nga mao, mahimo silang ma-install sa bisan unsang panganod, lakip ang imong kaugalingon, publiko o pribado, ug siyempre sa Exoscale.
Giunsa ang proyekto sa Fn molihok
Ang Fn hingpit nga gibase sa Docker, naglangkob sa duha ka nag-unang mga sangkap:
Ang programa sa CLI nga gidisenyo aron pagdumala sa 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 sudlanan sa Docker.
Ang mga gimbuhaton nga gipakatap sa Fn gipatuman usab sa lain nga mga sudlanan, nga nagtugot kanimo sa pagsuporta sa daghang mga programming language, pananglitan... Clojure!
Ang mga argumento sa function gipasa sa standard input (STDIN), ang mga resulta gisulat sa standard output (STDOUT). Kung ang mga argumento o pagbalik nga mga kantidad dili yano nga mga kantidad (sama sa usa ka butang nga JSON), mahimo silang mabag-o gamit ang usa ka layer sa abstraction nga gihatag sa Fn mismo sa porma sa usa ka Function Development Kit (FDK).
Alang sa kasayon, ang mga built-in nga set sa mga templates gitanyag aron mapadali ang pag-deploy sa FaaS sa usa ka halapad nga lista sa lain-laing mga pinulongan ug ang ilang mga bersyon (Lakaw, lain-laing mga bersyon sa Java, Python, ug uban pa).
Ang paghimo og FaaS sayon pinaagi sa pagsunod niini nga diagram:
Ang pag-deploy sa function gamit ang Fn CLI: usa ka application configuration file para sa Fn gimugna base sa pinili nga template.
Gilunsad namo ang among kaugalingong function, pag-usab gamit ang CLI Fn: ang sudlanan nga imahen gibutang sa usa ka piho nga repository, pagkahuman ang server gipahibalo sa paglungtad ug pagbutang niini nga imahe.
Ang prinsipyo sa paghatud sa mga gimbuhaton sa Fn
Lokal nga pag-instalar ug pagsulay sa walay server nga mga gimbuhaton
Atong sugdan ang pag-instalar sa Fn sa lokal nga makina. Una, gi-install ang Docker, ingon nga gikinahanglan sa Fn. Sa pag-ingon nga naa kami sa Debian/Ubuntu:
Andam na kami karon nga i-deploy ang among function gamit ang CLI. Alang sa kayano, mogamit kami usa ka built-in nga palibot sa paglansad, 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 pagabuhaton hellonode sa dugang nga pagpalambo sa atong Fn function uban sa pipila ka mga batakang configuration files. Sa sulod sa bag-ong gibuhat nga direktoryo, mahimo nimong buhaton ang imong aplikasyon nga nagsunod sa mga sumbanan sa imong gipili nga sinultian o oras sa pagdagan:
# Каталог с 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.java
Ang Fn nagmugna sa inisyal nga istruktura sa proyekto, nagmugna og file func.yaml, nga naglangkob sa gikinahanglan nga mga setting para sa Fn, ug nagtakda sa template alang sa code sa pinulongan nga imong gipili.
Sa kaso sa runtime sa Node, kini nagpasabut:
$ 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 dali namong sulayan ang among function sa lokal aron makita kung giunsa ang tanan molihok.
Una, atong sugdan ang Fn server. Sama sa nahisgutan na, ang Fn server usa ka sudlanan sa Docker, busa, pagkahuman sa pagsugod, moadto kini ug kuhaon ang imahe gikan sa rehistro sa Docker.
$ 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
668ce9ac0ed8d7cd59da49228bda62464e01bff2c0c60079542d24ac6070f8e5
Aron mapadagan ang among gimbuhaton, kinahanglan kini "giligid". Nagkinahanglan kini имя приложения: Sa Fn, ang tanan nga mga aplikasyon kinahanglan nga espesipiko isip mga namespace alang sa mga may kalabutan nga mga gimbuhaton.
Pangitaon sa Fn CLI ang file func.yaml sa kasamtangan nga direktoryo nga gamiton sa pag-configure sa function. Busa una kinahanglan nimo nga moadto sa among 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-trigger
Sama sa imong makita gikan sa command output, usa ka bag-ong Docker container image ang gihimo nga naglangkob sa among function. Ang function andam na nga tawagan, ug kami adunay duha ka paagi sa pagbuhat niini:
gamit ang Fn command invoke
direkta nga pagtawag pinaagi sa http
Hagit invoke pinaagi sa Fn kini yano nga nagsundog sa trabaho pinaagi sa HTTP alang sa mga pagsulay, nga kombenyente alang sa dali nga pagsulay:
Ang Fn server nagbutyag sa iyang mga gimbuhaton sa port 8080 ug ang function URL makita nga mohaum sa sumbanan t/app/function, apan dili sa bug-os. Pinaagi sa HTTP, ang usa ka function dili direkta nga gitawag, apan pinaagi sa usa ka gitawag nga trigger, nga, sumala sa ngalan niini, "nagsugod" sa tawag sa function. Ang mga trigger gihubit sa `func.yml proyekto:
Ang tanan nagtrabaho! Panahon na aron magpadayon sa tibuuk nga mga eksperimento ug imantala ang among FaaS sa server!
Pag-install sa mga serbisyo nga wala’y server nga function sa imong kaugalingon nga imprastraktura
Dali ta mag-install ug virtual machine gamit ang Exoscale CLI. Kung wala pa nimo kini ma-set up, mahimo nimong gamiton among dali nga giya sa pagsugod. Kini usa ka cool nga himan nga makadugang sa imong pagka-produktibo. Ayaw kalimti nga kinahanglan nimo nga i-configure ang usa ka lagda aron maablihan ang port 8080 sa Security Group! Ang mosunod nga mga sugo maglunsad og usa ka limpyo nga virtual machine, andam sa pag-host sa atong mga gimbuhaton:
Unya mahimo nimong ssh sa virtual machine ug i-install ang hilit nga 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 i-install ang Docker ug ang Fn server sa samang paagi nga nahimo na sa lokal nga makina, sugdi ang server:
Andam na ang Fn nga makadawat og mga function! Alang sa gipunting nga pagbalhin sa mga gimbuhaton sa usa ka hilit nga server, among gamiton ang mando deploy gikan sa lokal nga kompyuter pinaagi sa pagtangtang sa bandila --local.
Dugang pa, gikinahanglan ka sa Fn nga ipiho ang lokasyon sa Fn server ug rehistro sa Docker. Kini nga mga kapilian mahimong itakda pinaagi sa mga variable sa palibot FN_API_URL и FN_REGISTRY matag usa, apan nagtanyag usab usa ka labi ka dali nga paagi aron dali nga madumala ang paghimo ug pagdumala sa mga pag-configure alang sa pag-deploy.
Sa mga termino sa Fn, ang configuration alang sa deployment gitawag context. Ang mosunod nga sugo maghimo sa konteksto:
Mahimo nimong tan-awon ang mga magamit nga 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 ibalhin sa konteksto nga bag-o lang gibuhat sama niini:
$ fn use context exoscale
Now using context: exoscale
Gikan dinhi, ang Fn feature delivery mag-download sa mga imahe sa Docker gamit ang pinili nga DockerHub account (sa akong kaso - nfrankel), ug dayon ipahibalo ang hilit nga server (sa kini nga pananglitan - http://185.19.30.175:8080) mahitungod sa lokasyon ug bersyon sa pinakabag-o nga hulagway nga naglangkob sa imong function.
$ 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 .
Function Lifecycle sa Fn-Based Serverless Computing
Mga bentaha sa serverless computing sa imong kaugalingong kapasidad
Ang serverless computing usa ka sayon nga solusyon alang sa dali nga pagpatuman sa mga independente nga bahin sa usa ka aplikasyon nga nakig-uban sa mas komplikado nga mga aplikasyon o microservices.
Kini kasagaran tungod sa tinago nga gasto sa pag-lock sa gipili nga vendor, nga, depende sa piho nga kaso sa paggamit ug gidaghanon, mahimong mosangpot sa mas taas nga gasto ug pagkunhod sa pagka-flexible sa umaabot.
Ang multi-cloud ug hybrid cloud nga mga arkitektura nag-antus usab sa kini nga kaso, tungod kay dali nimo makit-an ang imong kaugalingon sa usa ka sitwasyon diin gusto nimo nga gamiton ang serverless computing, apan tungod sa mga polisiya sa korporasyon dili kini mahimo.
Ang Fn sayon ra gamiton ug makahatag ug halos parehas nga interface sa FaaS, nga adunay gamay nga overhead. Giwagtang niini ang bisan unsang vendor lock-in ug mahimong ma-install sa lokal o sa bisan unsang kombenyente nga cloud solution provider nga imong gusto. Adunay usab kagawasan sa pagpili sa usa ka programming language.
Kini nga artikulo naglangkob lamang sa mga sukaranan sa Fn, apan ang paghimo sa imong kaugalingon nga runtime yano ra, ug ang kinatibuk-ang arkitektura mahimong ma-deploy nga mas kaylap gamit ang Fn load balancer, o pinaagi sa pagbutang sa Fn luyo sa usa ka proxy alang sa proteksyon.