Pagtukod sa atong kaugalingong serverless base sa Fn

Pagtukod sa atong kaugalingong serverless base sa Fn

Pag-compute nga walay server — 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 Apache OpenWhisk, nga gihimo sa usa ka incubator sa IBM,
  • Mga Function sa Spring Cloud, isip kabahin sa dato nga Spring Framework ecosystem, nga magamit usab isip usa ka facade para sa AWS Lambda, Azure Functions, ug OpenWhisk,
  • Proyekto Fn, 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.

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

O 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 | sh

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

Karon 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.java

Ang 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
668ce9ac0ed8d7cd59da49228bda62464e01bff2c0c60079542d24ac6070f8e5

Aron 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-trigger

Sama 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 ang among dali nga giya sa pagsugodKini 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-securitygroup

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

Andam 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 nfrankel

Mahimo 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: exoscale

Sugod 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"}

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

Pagpalit kasaligan nga pag-host alang sa mga site nga adunay proteksyon sa DDoS, mga server sa VPS VDS 🔥 Pagpalit og kasaligang website hosting nga adunay proteksyon sa DDoS, VPS VDS servers | ProHoster