Pagtukod sa atong kaugalingong serverless base sa Fn

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:

  • plataporma Apache OpenWhisk, gihimo sa usa ka incubator sa IBM,
  • 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,
  • Proyekto Fn, gisuportahan sa Oracle.

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.

Pagtukod sa atong kaugalingong serverless base sa Fn
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:

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

O gamita ang package manager/Docker build sumala sa imong sistema. Dayon mahimo ka nga diretso sa pag-instalar sa Fn CLI. Pananglitan, gamit ang curl:

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

Kung naa ka sa OSX nga na-install ang Homebrew, mahimo ka moadto sa laing paagi:

$ 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

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:

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

{"message":"Hello World"}

Aron direkta nga tawagan ang usa ka function, kinahanglan nimo mahibal-an ang tibuuk nga URL:

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

{"message":"Hello World"}

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:

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 trigger name aron mohaum sa function name, kini makapasayon ​​sa tanan:

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

Dayon gipadagan namo pag-usab ang paghatud sa function ug gitawag kini gikan sa usa ka bag-ong trigger:

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

{"message":"Hello World"}

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:

$ 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

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:

$ 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

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:

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

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 .

Sa katapusan:

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

{"message":"Hello World"}

Pagtukod sa atong kaugalingong serverless base sa Fn
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.

Source: www.habr.com

Idugang sa usa ka comment