A’ togail ar frithealaiche fhèin stèidhichte air Fn

A’ togail ar frithealaiche fhèin stèidhichte air Fn

Coimpiutaireachd gun fhrithealaiche aon de na gluasadan as follaisiche ann an coimpiutaireachd sgòthan. Is e am prionnsapal obrachaidh bunaiteach nach ann air DevOps a tha bun-structar, ach air solaraiche na seirbheis. Bidh sgèileadh ghoireasan ag atharrachadh gu fèin-ghluasadach airson luchdachadh agus tha ìre atharrachaidh àrd aige.

Is e feart cumanta eile gu bheil e buailteach còd a lughdachadh agus a chuimseachadh, agus is e sin as coireach gu bheilear ag ainmeachadh coimpiutaireachd gun fhrithealaiche uaireannan mar sheirbheis (FaaS).

Gu h-eachdraidheil, b ’e Amazon a’ chiad sholaraiche sgòthan a thairg FaaS le AWS Lambda, agus mar sin an t-ainm. Bidh solaraichean seirbheis sgòthan eile cuideachd a’ tabhann feadhainn coltach ris:

  • Gnìomhan Cloud bho Google
  • Gnìomhan Azure bho Microsoft

Bidh na companaidhean sin uile a’ toirt seachad coimpiutaireachd gun fhrithealaiche, sgèileadh fèin-ghluasadach, agus cha phàigh iad ach airson na bhios tu a’ cleachdadh, ach bidh iad a’ glasadh luchd-ceannach a-steach don toradh seilbh aca. Ach, tha roghainnean eile an-asgaidh agus fosgailte airson coimpiutaireachd gun fhrithealaiche. 'S fhiach toirt fa-near:

  • àrd-ùrlar Apache OpenWhisk, air a leasachadh ann an goireadair le IBM,
  • Gnìomhan Cloud Spring, mar phàirt de eag-shiostam Spring Framework a tha gu math beairteach, a dh'fhaodar a chleachdadh cuideachd mar aghaidh airson AWS Lambda, Gnìomhan Azure agus OpenWhisk,
  • Pròiseact Fn, le taic bho Oracle.

Tha iad uile gu tur neo-eisimeileach bho sgòthan, is e sin, faodar an cur a-steach ann an sgòth sam bith, a’ toirt a-steach do chuid fhèin, poblach no prìobhaideach, agus gu dearbh ann an Exoscale.

Mar a tha am pròiseact Fn ag obair

Tha Fn gu tur stèidhichte air Docker, air a dhèanamh suas de dhà phrìomh phàirt:

  • Prògram CLI air a dhealbhadh gus gach taobh de bhun-structar Fn a riaghladh, agus ag eadar-obrachadh leis an t-seirbheisiche Fn,
  • Tha am frithealaiche Fn fhèin na thagradh cunbhalach air a phacaigeadh ann an soitheach Docker.

Tha na gnìomhan a tha air an cleachdadh ann am Fn cuideachd air an cur an gnìomh ann an soithichean fa leth, a leigeas leat taic a thoirt do mhòran chànanan prògramaidh, mar eisimpleir... Clojure!

Tha argamaidean gnìomh air an toirt seachad gu cuir a-steach àbhaisteach (STDIN), tha toraidhean air an sgrìobhadh gu toradh àbhaisteach (STDOUT). Mura h-e luachan sìmplidh a th’ anns na h-argamaidean no na luachan tilleadh (leithid rud JSON), faodar an tionndadh le bhith a’ cleachdadh còmhdach tarraing a thug Fn fhèin seachad ann an cruth Kit Leasachaidh Gnìomh (FDK).

Airson goireasachd, thathas a’ tabhann seataichean de theamplaidean togte gus cleachdadh FaaS a chleachdadh ann an liosta farsaing de dhiofar chànanan agus na dreachan aca (Rach, dreachan eadar-dhealaichte de Java, Python, msaa).

Tha e furasta FaaS a chruthachadh le bhith a’ leantainn an diagram seo:

  • A’ cleachdadh a’ ghnìomh a’ cleachdadh an Fn CLI: tha faidhle rèiteachaidh tagraidh airson Fn air a chruthachadh stèidhichte air an teamplaid taghte.
  • Bidh sinn a’ cuir a-mach ar gnìomh fhèin, a-rithist a’ cleachdadh CLI Fn: tha ìomhaigh an t-soithich air a chuir ann an stòr sònraichte, agus às deidh sin thèid fios a chuir chun t-seirbheisiche mu bhith ann agus suidheachadh na h-ìomhaigh seo.

A’ togail ar frithealaiche fhèin stèidhichte air Fn
Tha am prionnsapal airson gnìomhan a lìbhrigeadh gu Fn

Stàladh agus deuchainn ionadail air gnìomhan gun fhrithealaiche

Feuch an tòisich sinn a’ stàladh Fn air an inneal ionadail. An toiseach, tha Docker air a chuir a-steach mar a dh ’fheumar le Fn. A’ gabhail ris gu bheil sinn air Debian/Ubuntu:

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

No cleachd manaidsear pacaid / Docker a rèir an t-siostam agad. An uairsin faodaidh tu a dhol dìreach gu stàladh an Fn CLI. Mar eisimpleir, a 'cleachdadh curl:

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

Ma tha thu air OSX le Homebrew air a chuir a-steach, faodaidh tu a dhol an rathad eile:

$ 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

Tha sinn a-nis deiseil airson ar gnìomh a chleachdadh an toiseach a’ cleachdadh an CLI. Airson sìmplidh, cleachdaidh sinn àrainneachd cur air bhog, leithid Node:

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

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

Thèid eòlaire ùr a chruthachadh hellonode gus ar gnìomh Fn a leasachadh tuilleadh le cuid de fhaidhlichean rèiteachaidh bunaiteach. Taobh a-staigh an eòlaire a chaidh a chruthachadh às ùr, faodaidh tu an tagradh agad a chruthachadh a rèir inbhean a’ chànain no an ùine ruith a thagh thu:

# Каталог с 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

Bidh Fn a’ cruthachadh structar tùsail a’ phròiseict, a’ cruthachadh faidhle func.yaml, anns a bheil na roghainnean riatanach airson Fn, agus a’ suidheachadh an teamplaid airson a’ chòd sa chànan a thagh thu.

A thaobh ùine ruith Node, tha seo a’ ciallachadh:

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

A-nis nì sinn deuchainn gu sgiobalta air ar gnìomh gu h-ionadail gus faicinn mar a tha a h-uile càil ag obair.

An toiseach, tòisichidh sinn am frithealaiche Fn. Mar a chaidh ainmeachadh roimhe, is e inneal Docker a th’ anns an fhrithealaiche Fn, mar sin, às deidh tòiseachadh, thèid e agus bheir e an ìomhaigh bho chlàr 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

Gus ar gnìomh a ruith, feumaidh e a bhith “air a sgaoileadh”. Feumaidh seo имя приложения: Ann am Fn, feumaidh a h-uile aplacaid a bhith air a shònrachadh mar ainmean-àite airson gnìomhan co-cheangailte.

Lorgaidh Fn CLI am faidhle func.yaml anns an eòlaire làithreach a thèid a chleachdadh gus an gnìomh a rèiteachadh. Mar sin feumaidh tu a dhol chun chlàr againn an toiseach 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

Mar a chì thu bhon toradh àithne, tha ìomhaigh ùr Docker container air a chruthachadh anns a bheil ar gnìomh. Tha an gnìomh deiseil airson a bhith air a ghairm, agus tha dà dhòigh againn air a dhèanamh:

  • a’ cleachdadh an àithne Fn invoke
  • a 'gairm gu dìreach tro http

Dùbhlan invoke tro Fn bidh e dìreach ag aithris obair tro HTTP airson deuchainnean, a tha goireasach airson deuchainn sgiobalta:

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

{"message":"Hello World"}

Gus gnìomh a ghairm gu dìreach, feumaidh fios a bhith agad air an URL slàn:

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

{"message":"Hello World"}

Bidh am frithealaiche Fn a’ nochdadh a ghnìomhan air port 8080 agus tha coltas gu bheil URL a’ ghnìomh a’ freagairt ris a’ phàtran t/app/function, ach chan ann gu h-iomlan. Tro HTTP, chan eil gnìomh air a ghairm gu dìreach, ach tro inneal-brosnachaidh ris an canar, a tha, a rèir an ainm, “a’ tòiseachadh ”a’ ghairm gnìomh. Tha luchd-brosnachaidh air am mìneachadh ann an `func.yml pròiseact:

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

Is urrainn dhuinn an t-ainm brosnachaidh atharrachadh gus a bhith co-ionnan ri ainm a’ ghnìomh, nì seo a h-uile dad nas sìmplidhe:

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

An uairsin bidh sinn a’ ruith lìbhrigeadh na gnìomh a-rithist agus ga ghairm bho inneal-brosnachaidh ùr:

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

{"message":"Hello World"}

Tha a h-uile dad ag obair! Tha an t-àm ann gluasad air adhart gu deuchainnean làn-sgèile agus ar FaaS fhoillseachadh air an fhrithealaiche!

A’ stàladh seirbheisean gnìomh gun fhrithealaiche air a’ bhun-structair agad fhèin

Feuch an cuir sinn a-steach inneal brìgheil gu sgiobalta a’ cleachdadh an Exoscale CLI. Mura h-eil thu air a stèidheachadh fhathast, faodaidh tu a chleachdadh an stiùireadh tòiseachaidh luath againn. Is e inneal fionnar a tha seo a mheudaicheas do chinneasachd eadhon nas motha. Na dì-chuimhnich gum feum thu riaghailt a rèiteachadh gus port 8080 fhosgladh sa Bhuidheann Tèarainteachd! Cuiridh na h-òrdughan a leanas air bhog inneal brìgheil glan, deiseil airson ar gnìomhan a chumail:

$ 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

An uairsin faodaidh tu ssh a-steach don inneal brìgheil agus stàlaich am frithealaiche Fn iomallach:

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

An uairsin stàlaich Docker agus am frithealaiche Fn san aon dòigh ’s a chaidh a dhèanamh mu thràth air an inneal ionadail, tòisich am frithealaiche:

$ 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

Tha Fn deiseil airson gnìomhan fhaighinn! Airson gnìomhan cuimsichte a ghluasad gu frithealaiche iomallach, cleachdaidh sinn an àithne deploy bhon choimpiutair ionadail le bhith a’ fàgail a’ bhratach air falbh --local.

A bharrachd air an sin, tha Fn ag iarraidh ort suidheachadh an fhrithealaiche Fn agus clàr Docker a shònrachadh. Faodar na roghainnean sin a shuidheachadh tro chaochladairean àrainneachd FN_API_URL и FN_REGISTRY fa leth, ach tha e cuideachd a’ tabhann dòigh nas freagarraiche airson cruthachadh agus riaghladh rèiteachaidhean airson cleachdadh.

Ann an teirmean Fn, canar an rèiteachadh airson cleachdadh context. Cruthaichidh an òrdugh a leanas an co-theacsa:

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

Faodaidh tu coimhead air na co-theacsan a tha rim faighinn mar seo:

$ fn list contexts

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

Agus gluais chun cho-theacsa a chaidh a chruthachadh dìreach mar seo:

 $ fn use context exoscale

 Now using context: exoscale

Às an seo, bidh lìbhrigeadh feart Fn a ’luchdachadh sìos ìomhaighean Docker a’ cleachdadh a ’chunntas DockerHub taghte (na mo chùis - nfrankel), agus an uairsin cuir fios chun t-seirbheisiche iomallach (san eisimpleir seo - http://185.19.30.175:8080) mu shuidheachadh agus dreach na h-ìomhaigh as ùire anns a bheil an gnìomh agad.

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

Mu dheireadh:

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

{"message":"Hello World"}

A’ togail ar frithealaiche fhèin stèidhichte air Fn
Cuairt-beatha gnìomh ann an coimpiutaireachd gun fhrithealaiche stèidhichte air Fn

Buannachdan coimpiutaireachd gun fhrithealaiche aig do chomas fhèin

Tha coimpiutaireachd gun fhrithealaiche na fhuasgladh goireasach airson pàirtean neo-eisimeileach de thagradh a chuir an gnìomh gu sgiobalta a bhios ag eadar-obrachadh le tagraidhean no microservices nas iom-fhillte.

Tha seo gu tric mar thoradh air cosgais falaichte glasadh a-steach don neach-reic taghte, a dh ’fhaodadh, a rèir a’ chùis cleachdaidh sònraichte agus an tomhas-lìonaidh, leantainn gu cosgaisean nas àirde agus sùbailteachd nas lugha san àm ri teachd.

Bidh ailtireachd sgòthan ioma-sgòthan agus tar-chinealach cuideachd a’ fulang anns a’ chùis seo, oir faodaidh tu thu fhèin a lorg gu furasta ann an suidheachadh far am bu mhath leat coimpiutaireachd gun fhrithealaiche a chleachdadh, ach air sgàth poileasaidhean corporra is dòcha nach bi e comasach.

Tha Fn gu math furasta a chleachdadh agus is urrainn dha cha mhòr an aon eadar-aghaidh FaaS a thoirt seachad, le glè bheag os cionn. Bidh e a’ cuir às do ghlasadh reiceadair sam bith agus faodar a chuir a-steach gu h-ionadail no ann an solaraiche fuasgladh sgòthan goireasach sam bith de do roghainn. Tha saorsa ann cuideachd ann a bhith a’ taghadh cànan prògramaidh.

Chan eil an artaigil seo a’ còmhdach ach bunaitean Fn, ach tha cruthachadh an ùine ruith agad fhèin gu math sìmplidh, agus faodar an ailtireachd iomlan a chleachdadh nas fharsainge le bhith a’ cleachdadh cothromachadh luchdan Fn, no le bhith a’ cur Fn air cùl neach-ionaid airson dìon.

Source: www.habr.com

Cuir beachd ann