Komputasi tanpa server minangka salah sawijining tren paling penting ing komputasi awan. Prinsip operasi dhasar yaiku infrastruktur ora dadi perhatian DevOps, nanging panyedhiya layanan. Skala sumber daya kanthi otomatis nyetel muatan lan nduweni tingkat pangowahan sing dhuwur.
Fitur umum liyane yaiku kecenderungan kanggo nyilikake lan fokus kode, mula komputasi tanpa server kadhangkala diarani fungsi minangka layanan (FaaS).
Secara historis, panyedhiya maya pisanan sing nawakake FaaS karo AWS Lambda yaiku Amazon, mula jenenge. Panyedhiya layanan awan liyane uga nawakake sing padha:
Fungsi Cloud saka Google
Fungsi Azure saka Microsoft
Kabeh perusahaan kasebut nyedhiyakake komputasi tanpa server, skala otomatis, lan mung mbayar apa sing sampeyan gunakake, nanging ngunci pelanggan menyang produk kepemilikan. Nanging, ana alternatif gratis lan open source kanggo komputasi tanpa server. Wigati dicathet:
platform Apache OpenWhisk, dikembangake ing inkubator dening IBM,
Spring Cloud Fungsi, minangka bagéan saka ekosistem Spring Framework sing cukup sugih, sing uga bisa digunakake minangka fasad kanggo AWS Lambda, Fungsi Azure lan OpenWhisk,
Kabeh mau pancen bebas saka awan, yaiku, bisa diinstal ing awan apa wae, kalebu dhewe, umum utawa pribadi, lan mesthi ing Exoscale.
Cara kerjane proyek Fn
Fn adhedhasar Docker, kasusun saka rong komponen utama:
Program CLI dirancang kanggo ngatur kabeh aspek infrastruktur Fn, lan sesambungan karo server Fn,
Server Fn dhewe minangka aplikasi biasa sing dikemas ing wadhah Docker.
Fungsi sing disebarake ing Fn uga dieksekusi ing wadhah sing kapisah, sing ngidini sampeyan ndhukung akeh basa pamrograman, contone ... Clojure!
Argumen fungsi dikirim menyang input standar (STDIN), asil ditulis menyang output standar (STDOUT). Yen argumen utawa nilai bali dudu nilai sing prasaja (kayata obyek JSON), bisa diowahi nggunakake lapisan abstraksi sing diwenehake dening Fn dhewe ing wangun Function Development Kit (FDK).
Kanggo penak, set template sing dibangun ditawakake kanggo nggampangake penyebaran FaaS ing dhaptar ekstensif macem-macem basa lan versi (Go, macem-macem versi Java, Python, lsp.).
Nggawe FaaS gampang kanthi ngetutake diagram iki:
Nyebarake fungsi nggunakake Fn CLI: file konfigurasi aplikasi kanggo Fn digawe adhedhasar cithakan sing dipilih.
Kita muter fungsi kita dhewe, maneh nggunakake CLI Fn: gambar wadhah diselehake ing repositori tartamtu, sawise server diwenehi kabar babagan orane lan panggonan gambar iki.
Prinsip ngirim fungsi menyang Fn
Instalasi lokal lan nguji fungsi tanpa server
Ayo miwiti nginstal Fn ing mesin lokal. Pisanan, Docker wis diinstal, kaya sing dibutuhake Fn. Yen kita ana ing Debian/Ubuntu:
Saiki kita siyap kanggo miwiti nggunakake fungsi nggunakake CLI. Kanggo kesederhanaan, kita bakal nggunakake lingkungan peluncuran sing dibangun, kayata Node:
$ fn init --runtime node --trigger http hellonode
Creating function at: /hellonode
Function boilerplate generated.
func.yaml created.
Direktori anyar bakal digawe hellonode kanggo luwih ngembangake fungsi Fn karo sawetara file konfigurasi dhasar. Ing direktori sing mentas digawe, sampeyan bisa nggawe aplikasi miturut standar basa utawa runtime sing dipilih:
# Каталог с 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
Fn nggawe struktur proyek awal, nggawe file func.yaml, ngemot setelan sing dibutuhake kanggo Fn, lan nyetel cithakan kanggo kode ing basa sing sampeyan pilih.
Ing kasus runtime Node, iki tegese:
$ 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}
})
Saiki kita bakal nyoba fungsi lokal kanthi cepet kanggo ndeleng cara kerjane kabeh.
Pisanan, kita bakal miwiti server Fn. Kaya sing wis kasebut, server Fn minangka wadhah Docker, mula, sawise wiwitan, bakal njupuk gambar saka registri 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
Kanggo mbukak fungsi kita, kudu "digulung". Iki mbutuhake имя приложения: Ing Fn, kabeh aplikasi kudu ditemtokake minangka spasi jeneng kanggo fungsi sing gegandhengan.
Fn CLI bakal nggoleki file kasebut func.yaml ing direktori saiki sing bakal digunakake kanggo ngatur fungsi kasebut. Dadi pisanan sampeyan kudu pindhah menyang direktori kita 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
Minangka sampeyan bisa ndeleng saka output printah, gambar wadhah Docker anyar digawe ngemot fungsi kita. Fungsi wis siyap diarani, lan kita duwe rong cara kanggo nindakake:
nggunakake printah Fn invoke
telpon langsung via http
Telpon invoke liwat Fn iku mung niru karya liwat HTTP kanggo tes, sing trep kanggo tes cepet:
Server Fn mbukak fungsine ing port 8080 lan URL fungsi katon cocog karo pola kasebut t/app/function, nanging ora rampung. Liwat HTTP, sawijining fungsi ora diarani langsung, nanging liwat pemicu sing disebut, sing, miturut jenenge, "miwiti" panggilan fungsi. Pemicu ditetepake ing `func.yml proyek:
Kabeh mlaku! Wektu kanggo pindhah menyang eksperimen skala lengkap lan nerbitake FaaS ing server!
Nginstal layanan fungsi tanpa server ing infrastruktur sampeyan dhewe
Ayo cepet nginstal mesin virtual nggunakake Exoscale CLI. Yen sampeyan durung nyiyapake, sampeyan bisa nggunakake guide wiwitan cepet kita. Iki minangka alat keren sing bakal nambah produktivitas sampeyan. Aja lali yen sampeyan kudu ngatur aturan kanggo mbukak port 8080 ing Grup Keamanan! Printah ing ngisor iki bakal mbukak mesin virtual sing resik, siap dadi tuan rumah fungsi kita:
Banjur sampeyan bisa ssh menyang mesin virtual lan nginstal server Fn remot:
$ 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)
Banjur instal Docker lan server Fn kanthi cara sing padha kaya sing wis rampung ing mesin lokal, miwiti server:
Fn siyap nampa fungsi! Kanggo transfer fungsi diangkah menyang server remot, kita bakal nggunakake printah deploy saka komputer lokal kanthi ngilangi gendera --local.
Kajaba iku, Fn mbutuhake sampeyan nemtokake lokasi server Fn lan registri Docker. Opsi kasebut bisa disetel liwat variabel lingkungan FN_API_URL и FN_REGISTRY mungguh, nanging uga nawakake cara sing luwih trep kanggo gampang ngatur nggawe lan ngatur konfigurasi kanggo penyebaran prajurit.
Ing istilah Fn, konfigurasi kanggo penyebaran diarani context. Printah ing ngisor iki bakal nggawe konteks:
Sampeyan bisa ndeleng konteks sing kasedhiya kaya iki:
$ fn list contexts
CURRENT NAME PROVIDER API URL REGISTRY
default default http://localhost:8080/
exoscale default http://185.19.30.175:8080 nfrankel
Lan pindhah menyang konteks sing mung digawe kaya iki:
$ fn use context exoscale
Now using context: exoscale
Saka kene, pangiriman fitur Fn bakal ndownload gambar Docker nggunakake akun DockerHub sing dipilih (ing kasusku - nfrankel), banjur ngabari server remot (ing conto iki - http://185.19.30.175:8080) babagan lokasi lan versi gambar paling anyar sing ngemot fungsi sampeyan.
$ 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 .
Siklus Urip Fungsi ing Komputasi Tanpa Server Berbasis Fn
Kaluwihan komputasi tanpa server ing kapasitas sampeyan dhewe
Komputasi tanpa server minangka solusi sing trep kanggo ngetrapake bagean mandiri saka aplikasi kanthi cepet sing sesambungan karo aplikasi utawa layanan mikro sing luwih rumit.
Iki asring amarga biaya sing didhelikake kanggo ngunci vendor sing dipilih, sing gumantung saka kasus panggunaan lan volume tartamtu, bisa nyebabake biaya sing luwih dhuwur lan nyuda keluwesan ing mangsa ngarep.
Arsitektur awan multi-cloud lan hibrida uga nandhang sangsara ing kasus iki, amarga sampeyan bisa kanthi gampang nemokake dhewe ing kahanan sing pengin nggunakake komputasi tanpa server, nanging amarga kabijakan perusahaan bisa uga ora bisa.
Fn cukup gampang digunakake lan bisa nyedhiyakake antarmuka FaaS sing meh padha, kanthi overhead cilik. Ngilangi sembarang kunci vendor lan bisa diinstal sacara lokal utawa ing panyedhiya solusi awan sing trep sing dipilih. Ana uga kebebasan kanggo milih basa pamrograman.
Artikel iki mung nyakup dhasar Fn, nanging nggawe runtime dhewe cukup prasaja, lan arsitektur sakabèhé bisa disebarake luwih akeh nggunakake Fn load balancer, utawa kanthi nyelehake Fn ing mburi proxy kanggo pangayoman.