Mbangun serverless kita dhewe adhedhasar Fn

Mbangun serverless kita dhewe adhedhasar Fn

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,
  • Proyek Fn, didhukung dening Oracle.

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.

Mbangun serverless kita dhewe adhedhasar Fn
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:

$ sudo apt-get update
$ sudo apt-get install docker.io

Utawa gunakake manajer paket / mbangun Docker miturut sistem sampeyan. Banjur sampeyan bisa langsung nginstal Fn CLI. Contone, nggunakake curl:

$ curl -LSs https://raw.githubusercontent.com/fnproject/cli/master/install | sh

Yen sampeyan nggunakake OSX kanthi Homebrew diinstal, sampeyan bisa nggunakake cara liya:

$ 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.7MB

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:

$ fn invoke fnexo hellonode      # вызываем функцию hellonode приложения fnexo

{"message":"Hello World"}

Kanggo nelpon fungsi kanthi langsung, sampeyan kudu ngerti URL lengkap:

$ curl http://localhost:8080/t/fnexo/hellonode-trigger

{"message":"Hello World"}

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:

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 триггера

Kita bisa ngganti jeneng pemicu supaya cocog karo jeneng fungsi, iki bakal nyederhanakake kabeh:

triggers:
- name: hellonode-trigger
  type: http
  source: /hellonode    # совпадает с именем функции

Banjur kita miwiti ngirim fungsi maneh lan nelpon saka pemicu anyar:

$ fn deploy --app fnexo hellonode --local
$ curl http://localhost:8080/t/fnexo/hellonode

{"message":"Hello World"}

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:

$ 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-securitygroup

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:

$ 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.643

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:

$ fn create context exoscale --provider default --api-url http://185.19.30.175:8080 --registry nfrankel

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 .

Akhire:

$ curl http://185.19.30.175:8080/t/fnexo/hellonode

{"message":"Hello World"}

Mbangun serverless kita dhewe adhedhasar Fn
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.

Source: www.habr.com

Add a comment