Dhisida server-la'aan noo gaar ah oo ku salaysan Fn

Dhisida server-la'aan noo gaar ah oo ku salaysan Fn

Kombuyuutar aan server lahayn waa mid ka mid ah isbeddellada ugu caansan ee xisaabinta daruuraha. Mabda'a hawlgalka aasaasiga ah ayaa ah in kaabayaasha aysan ahayn welwelka DevOps, laakiin bixiyaha adeegga. Qeexida kheyraadka si toos ah ayey ula qabsataa rarka waxayna leedahay isbedel sare.

Muuqaal kale oo caan ah ayaa ah u janjeera in la yareeyo oo diiradda la saaro, taas oo ah sababta xisaabinta server-la'aanta mararka qaarkood loogu yeero adeeg ahaan (FaaS).

Taariikh ahaan, bixiyaha daruuriga ah ee ugu horreeya ee bixiya FaaS AWS Lambda wuxuu ahaa Amazon, markaa magaca. Bixiyeyaasha kale ee adeegga daruuriga ah ayaa sidoo kale bixiya kuwa la mid ah:

  • Hawlaha Cloud ee Google
  • Hawlaha Azure ee Microsoft

Dhammaan shirkadahani waxay bixiyaan xisaabinta server-la'aanta ah, otomaatig ah, waxayna bixiyaan oo kaliya waxaad dhab ahaantii isticmaashid, laakiin waxay ku xiraan macaamiisha alaabtooda gaarka ah. Si kastaba ha ahaatee, waxaa jira ilo furan oo bilaash ah oo furan oo loogu talagalay xisaabinta server-la'aanta. Waxaa xusid mudan:

  • madal Apache OpenWhisk, oo ay samaysay IBM,
  • Hawlaha Cloud Cloud, iyada oo qayb ka ah nidaamka deegaanka qaab-dhismeedka gu'ga hodanka ku ah, kaas oo sidoo kale loo isticmaali karo waji ahaan AWS Lambda, Hawlaha Azure iyo OpenWhisk,
  • Mashruuca Fn, oo ay taageerto Oracle.

Dhammaantood waxay si buuxda uga madaxbannaan yihiin daruuraha, taas oo ah, waxaa lagu rakibi karaa daruur kasta, oo ay ku jiraan kuwaaga, mid guud ama mid gaar ah, iyo dabcan Exoscale.

Sida mashruuca Fn u shaqeeyo

Fn waxay si buuxda ugu saleysan tahay Docker, waxay ka kooban tahay laba qaybood oo waaweyn:

  • Barnaamijka CLI waxaa loogu talagalay in lagu maareeyo dhammaan dhinacyada kaabayaasha Fn, oo uu la falgalo server-ka Fn,
  • Seerarka Fn laftiisa waa codsi caadi ah oo lagu baakadeeyay weelka Docker.

Hawlaha la geeyey Fn waxaa sidoo kale lagu fuliyaa weelal kala duwan, taas oo kuu ogolaaneysa inaad taageerto luuqado badan oo barnaamijyo ah, tusaale ahaan ... Clojure!

Doodaha shaqada waxaa loo gudbiyaa gelinta caadiga ah (STDIN), natiijooyinka waxaa loo qoraa wax soo saarka caadiga ah (STDOUT). Haddii dooda ama qiimayaasha soo celinta aysan ahayn qiimayaal fudud (sida shayga JSON), waxaa lagu beddeli karaa iyadoo la adeegsanayo lakabka la taaban karo ee ay bixiso Fn lafteeda qaab ah Qalabka Horumarinta Function (FDK).

Si ay ugu habboonaato, habab ku dhex dhisan oo qaabaysan ayaa la bixiyaa si ay u fududeeyaan geynta FaaS liis ballaaran oo luuqado kala duwan ah iyo noocyadooda (Go, noocyo kala duwan oo Java ah, Python, iwm.).

Sameynta FaaS way fududahay adiga oo raacaya jaantuskan:

  • Gelitaanka shaqada iyadoo la adeegsanayo Fn CLI: faylka qaabeynta arjiga ee Fn ayaa la sameeyay iyadoo lagu saleynayo qaabka la doortay.
  • Waxaan soo saareynaa shaqadayada, mar labaad annaga oo adeegsanayna CLI Fn: sawirka weelka waxaa la dhigayaa meel kayd ah, ka dib serverka waxaa la ogeysiiyaa jiritaanka iyo meelaynta sawirkan.

Dhisida server-la'aan noo gaar ah oo ku salaysan Fn
Mabda'a gaarsiinta hawlaha Fn

Rakibaadda maxalliga ah iyo tijaabinta hawlaha server-la'aanta

Aynu bilowno ku rakibida Fn mashiinka deegaanka. Marka hore, Docker waxaa lagu rakibay sida uu rabo Fn. Haddii aan u maleynayo inaan joogno Debian/Ubuntu:

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

Ama isticmaal maamulaha xirmada/Docker dhis si waafaqsan nidaamkaaga. Markaa waxaad toos u aadi kartaa rakibida Fn CLI. Tusaale ahaan, adoo isticmaalaya curl:

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

Haddii aad ku jirto OSX oo lagu rakibay Homebrew, waxaad u mari kartaa dariiqa kale:

$ 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

Waxaan hadda diyaar u nahay inaan marka hore geyno shaqadayada anagoo adeegsanayna CLI. Si ay u fududaato, waxaan u isticmaali doonaa bey'ad ku dhex dhisan, sida Node:

$ fn init --runtime node --trigger http hellonode

Creating function at: /hellonode
Function boilerplate generated.
func.yaml created.

Hagaha cusub ayaa la abuuri doonaa hellonode si aan u sii horumarino shaqadayada Fn oo leh qaar ka mid ah faylasha qaabeynta aasaasiga ah. Gudaha hagaha cusub ee la sameeyay, waxaad samayn kartaa codsigaaga adoo raacaya heerarka luuqadaada aad dooratay ama wakhtiga runtime:

# Каталог с 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 wuxuu abuuraa qaab dhismeedka mashruuca bilowga ah, wuxuu abuuraa fayl func.yaml, oo ka kooban goobaha lagama maarmaanka u ah Fn, oo dejinaya qaabka koodka luqadda aad dooratay.

Xaaladda Runtime Node, tani waxay ka dhigan tahay:

$ 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}
})

Hadda waxaan si dhakhso ah u tijaabin doonaa shaqadayada gudaha si aan u aragno sida wax walba u shaqeeyaan.

Marka hore, waxaan bilaabi doonaa server-ka Fn. Sidii aan horayba u soo sheegnay, server-ka Fn waa weel Docker ah, sidaa darteed, bilawga ka dib, way tagi doontaa oo sawirka ka qaadan doontaa diiwaanka 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

Si aan hawsheenna u socodsiino, waa in "lala baxaa". Tani waxay u baahan tahay имя приложенияGudaha Fn, dhammaan codsiyada waa in lagu qeexaa meelo magacyo ah oo loogu talagalay hawlaha la xiriira.

Fn CLI waxay raadin doontaa faylka func.yaml tusaha hadda jira ee loo isticmaali doono in lagu habeeyo shaqada. Markaa marka hore waxaad u baahan tahay inaad tagto hagahayaga 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

Sida aad ka arki karto soo-saarka amarka, sawirka weelka cusub ee Docker ayaa la sameeyay oo ka kooban shaqadeena. Hawshu waxay diyaar u tahay in loogu yeedho, waxaana leenahay laba siyaabood oo loo sameeyo:

  • adoo isticmaalaya amarka Fn invoke
  • si toos ah uga waca http

Wac invoke iyada oo loo marayo Fn waxay si fudud ugu dayanaysaa shaqada HTTP ee imtixaannada, taas oo ku habboon tijaabinta degdegga ah:

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

{"message":"Hello World"}

Si aad toos ugu wacdo hawl, waxaad u baahan tahay inaad ogaato URL-ka buuxa:

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

{"message":"Hello World"}

Adeegga Fn wuxuu daaha ka qaadaa shaqadiisa dekedda 8080 oo URL-ka shaqada wuxuu u muuqdaa inuu ku habboon yahay qaabka t/app/function, laakiin si buuxda maaha. Iyada oo HTTP ah, shaqada si toos ah looguma yeedho, laakiin iyada oo loo marayo waxa loogu yeero kicinta, kaas oo, sida magaceedu yahay, "bilaabanayo" wicitaanka shaqada. Kiciyeyaasha ayaa lagu qeexaa gudaha `func.yml mashruuca:

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

Waxaan u bedeli karnaa magaca kiciya si aan u dhigno magaca shaqada, tani waxay fududayn doontaa wax walba:

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

Ka dib waxaan dib u socodsiineynaa gaarsiinta shaqada oo aan ka wacnay kiciye cusub:

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

{"message":"Hello World"}

Wax walba way shaqaynayaan! Waa waqtigii loo gudbi lahaa tijaabooyinka buuxa oo aan ku daabacno FaaS serverka!

Ku rakibida adeegyada shaqo la'aanta ee kaabayaashaaga

Aynu si degdeg ah u rakibno mishiin dalwaddii annagoo adeegsanayna Exoscale CLI. Haddii aadan weli dejin, waad isticmaali kartaa Hagaha bilowga degdega ah. Tani waa qalab qabow oo kordhin doona wax soo saarkaaga xitaa in ka badan. Ha iloobin inaad u baahan tahay inaad dejiso qaanuun si aad u furto dekedda 8080 ee Kooxda Amniga! Amarradan soo socda ayaa soo saari doona mashiinka farsamada gacanta oo nadiif ah, oo diyaar u ah inuu martigeliyo hawlahayaga:

$ 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

Markaa waxaad ku shubi kartaa mashiinka farsamada oo aad ku rakibi kartaa server-ka fog ee Fn:

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

Kadibna ku rakib Docker iyo server-ka Fn si la mid ah sidii hore loogu sameeyay mashiinka maxalliga ah, billow serverka:

$ 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 wuxuu diyaar u yahay inuu helo hawlo Ku wareejinta bartilmaameedka ah ee shaqooyinka loo diro server fog, waxaan isticmaali doonaa amarka deploy ka kombuyuutarka maxaliga ah adigoo ka saaraya calanka --local.

Intaa waxaa dheer, Fn waxay kaaga baahan tahay inaad qeexdo goobta Fn server iyo diiwaanka Docker. Ikhtiyaaradan waxa lagu dejin karaa doorsoomayaasha deegaanka FN_API_URL и FN_REGISTRY siday u kala horreeyaan, laakiin sidoo kale waxay bixisaa hab ku habboon oo si fudud loogu maareeyo abuurista iyo maaraynta qaabaynta hawlgelinta.

Marka la eego shuruudaha Fn, qaabaynta meelaynta ayaa loo yaqaan context. Amarka soo socda ayaa abuuri doona macnaha guud:

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

Waxaad arki kartaa xaaladaha la heli karo sida tan:

$ fn list contexts

CURRENT NAME      PROVIDER      API URL                      REGISTRY
    default       default       http://localhost:8080/
    exoscale      default       http://185.19.30.175:8080    nfrankel

U beddelo macnaha guud ee hadda uun loo abuuray:

 $ fn use context exoscale

 Now using context: exoscale

Laga bilaabo halkan, gudbinta muujinta Fn waxay soo dejisan doontaa sawirada Docker iyadoo la adeegsanayo koontada DockerHub ee la doortay (xaaladkayga - nfrankel), ka dibna ogeysii serverka fog (tusaale ahaan - http://185.19.30.175:8080) ku saabsan goobta iyo nooca sawirkii ugu dambeeyay ee ka kooban shaqadaada.

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

Ugu dambeyntii:

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

{"message":"Hello World"}

Dhisida server-la'aan noo gaar ah oo ku salaysan Fn
Shaqada Nolol-maalmeedka ee Ku-saleysan Fn-Serverless Computing

Faa'iidooyinka xisaabinta server-la'aanta ah ee awooddaada

Xisaabinta server-la'aanta ah waa xal ku habboon in si degdeg ah loo hirgeliyo qaybo madaxbannaan oo arjiga ah oo la falgala codsiyada kakan ama adeeg-yaraha.

Tani waxay badanaa sabab u tahay kharashka qarsoon ee lagu xirayo iibiyaha la doortay, taas oo ku xidhan kiiska isticmaalka gaarka ah iyo mugga, waxay keeni kartaa kharashyo badan iyo dabacsanaanta hoos u dhaca mustaqbalka.

Dhaqdhaqaaqyada daruuriga ah ee badan iyo isku-dhafka ah ayaa sidoo kale ku dhibtoonaya kiiskan, sababtoo ah waxaad si sahlan u heli kartaa naftaada xaalad aad jeceshahay inaad isticmaasho xisaabinta server-ka, laakiin sababtoo ah siyaasadaha shirkadaha waxaa laga yaabaa inaysan suurtagal ahayn.

Fn aad bay u fududahay in la isticmaalo oo waxa ay bixin kartaa ku dhawaad ​​isla FaaS interface, oo leh wax yar oo ka sarreeya. Waxay meesha ka saaraysaa quful kasta oo iibiye ah waxaana lagu rakibi karaa gudaha ama bixiyaha xalalka daruuraha ee ku habboon ee aad dooratay. Waxa kale oo jirta xorriyadda doorashada luuqadda barnaamijka.

Maqaalkani waxa uu daboolayaa oo kaliya aasaaska Fn, laakiin abuurista wakhtigaaga run-gudbinta aad ayey u fududahay, guud ahaan qaab dhismeedka waxaa loo geyn karaa si ballaaran iyadoo la adeegsanayo isku-dheellitirka culeyska Fn, ama adigoo Fn gadaasha wakiil ka ah ilaalinta.

Source: www.habr.com

Add a comment