{"id":52562,"date":"2019-11-11T00:00:00","date_gmt":"2019-11-10T21:00:00","guid":{"rendered":"https:\/\/prohoster.info\/blog\/blog_prohoster\/stroim-sobstvennyj-serverless-na-osnove-fn"},"modified":"2020-02-18T14:00:19","modified_gmt":"2020-02-18T11:00:19","slug":"stroim-sobstvennyj-serverless-na-osnove-fn","status":"publish","type":"post","link":"https:\/\/prohoster.info\/no\/blog\/administrirovanie\/stroim-sobstvennyj-serverless-na-osnove-fn","title":{"rendered":"Vi bygger v\u00e5r egen serverless basert p\u00e5 Fn","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Vi bygger v\u00e5r egen serverless basert p\u00e5 Fn\" src=\"\/wp-content\/uploads\/2019\/11\/e24cdf9b43a3323d617f33b2c1b44e51.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%91%D0%B5%D1%81%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80%D0%BD%D1%8B%D0%B5_%D0%B2%D1%8B%D1%87%D0%B8%D1%81%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F\">Serverl\u00f8se beregninger<\/a><\/noindex> \u2014 en av de mest bemerkelsesverdige trendene innen skyberegninger. Hovedprinsippet er at infrastrukturen ikke er et ansvar for DevOps, men for tjenesteleverand\u00f8ren. Ressursene skaleres automatisk til belastningen og har en h\u00f8y grad av endringshastighet.<\/p>\n<p><\/p>\n<p>En annen felles egenskap er en tendens til \u00e5 minimere og fokusere koden, s\u00e5 derfor blir serverl\u00f8se beregninger noen ganger kalt \u00abfunksjon som en tjeneste\u00bb (FaaS).<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>Historisk sett var Amazon den f\u00f8rste leverand\u00f8ren av skybaserte tjenester som tilb\u00f8d FaaS med AWS Lambda, og det er her navnet stammer fra. Andre skybaserte tjenesteleverand\u00f8rer tilbyr ogs\u00e5 sine egne varianter:<\/p>\n<p><\/p>\n<ul>\n<li>Cloud Functions fra Google<\/li>\n<li>Azure Functions fra Microsoft<\/li>\n<\/ul>\n<p><\/p>\n<p>Alle disse selskapene tilbyr serverl\u00f8se beregninger, automatisk skalering og betaling for faktisk brukte ressurser, men de binder ogs\u00e5 kundene til sitt propriet\u00e6re produkt. Det finnes imidlertid gratis alternativer med \u00e5pen kildekode for \u00e5 organisere serverl\u00f8se beregninger. Det er verdt \u00e5 merke seg:<\/p>\n<p><\/p>\n<ul>\n<li>Plattformen <noindex><a rel=\"nofollow\" href=\"https:\/\/openwhisk.apache.org\/\">Apache OpenWhisk<\/a><\/noindex>, utviklet av IBM i et inkubatorprogram,<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/cloud.spring.io\/spring-cloud-function\/\">Spring Cloud Functions<\/a><\/noindex>, som en del av det ganske rike \u00f8kosystemet til Spring Framework, som ogs\u00e5 kan brukes som et fasade p\u00e5 AWS Lambda, Azure Functions og OpenWhisk,<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/fnproject\">Prosjekt Fn<\/a><\/noindex>, st\u00f8ttet av Oracle.<\/li>\n<\/ul>\n<p><\/p>\n<p>Alle disse er helt uavhengige av skyer, det vil si at de kan installeres i hvilken som helst sky, inkludert din egen, offentlig eller privat, og selvf\u00f8lgelig i Exoscale.<\/p>\n<p><\/p>\n<h2 id=\"kak-proekt-fn-ustroen\">Hvordan Fn prosjektet fungerer<\/h2>\n<p><\/p>\n<p>Fn er helt basert p\u00e5 Docker og best\u00e5r av to hovedkomponenter:<\/p>\n<p><\/p>\n<ul>\n<li>CLI-programmet, som er ment \u00e5 administrere alle aspekter av Fn-infrastrukturen, og som interagerer med Fn-serveren,<\/li>\n<li>Selve Fn-serveren, et vanlig program pakket i en Docker-kontainer.<\/li>\n<\/ul>\n<p><\/p>\n<p>Funksjoner som distribueres i Fn kj\u00f8res ogs\u00e5 i separate beholdere, noe som gj\u00f8r det mulig \u00e5 st\u00f8tte en rekke programmeringsspr\u00e5k, for eksempel\u2026 Clojure!<\/p>\n<p><\/p>\n<p>Funksjonsargumenter blir sendt til standard input (STDIN), resultatene skrives til standard output (STDOUT). Hvis argumentene eller returverdiene ikke er enkle verdier (for eksempel JSON-objekter) \u2014 kan de bli konvertert ved hjelp av et abstraksjonslag som tilbys av Fn i form av et funksjonsutviklingssett (FDK).<\/p>\n<p><\/p>\n<p>For brukervennlighet tilbys innebygde malsett som forenkler distribusjonen av FaaS p\u00e5 en omfattende liste over forskjellige spr\u00e5k og deres versjoner (Go, forskjellige versjoner av Java, Python osv.).<\/p>\n<p><\/p>\n<p>\u00c5 opprette FaaS er enkelt, f\u00f8lg denne planen:<\/p>\n<p><\/p>\n<ul>\n<li>Distribuer funksjonen ved hjelp av CLI Fn: En konfigurasjonsfil for applikasjonen opprettes for Fn, basert p\u00e5 den valgte malen.<\/li>\n<li>Distribuerer egen funksjon, igjen ved hjelp av CLI Fn: Docker-imaget plasseres i et lager, hvoretter serveren blir informert om eksistensen og plasseringen av dette imaget.<\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Vi bygger v\u00e5r egen serverless basert p\u00e5 Fn\" src=\"\/wp-content\/uploads\/2019\/11\/5add8b58c80e976cd61a156fdd0fba11.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<em>Prinsipp for distribusjon av funksjoner i Fn<\/em><\/p>\n<p><\/p>\n<h2 id=\"lokalnaya-ustanovka-i-testirovanie-besservernyh-funkciy\">Lokal installasjon og testing av serverl\u00f8se funksjoner<\/h2>\n<p><\/p>\n<p>La oss begynne \u00e5 installere Fn p\u00e5 den lokale maskinen. F\u00f8rst installeres Docker, slik det kreves av Fn. Vi antar at vi bruker Debian\/Ubuntu:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ sudo apt-get update\n$ sudo apt-get install docker.io<\/code><\/pre>\n<p><\/p>\n<p>Eller bruk pakkeadministratoren\/byggingen av Docker i henhold til systemet ditt. Deretter kan vi g\u00e5 rett til installasjonen av Fn CLI. For eksempel, med curl:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ curl -LSs https:\/\/raw.githubusercontent.com\/fnproject\/cli\/master\/install | sh<\/code><\/pre>\n<p><\/p>\n<p>Hvis du jobber p\u00e5 OSX med installert Homebrew, kan du ta en annen rute:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ brew install fn\n\n==&gt; Downloader https:\/\/homebrew.bintray.com\/bottles\/fn-0.5.8.high_sierra.bottle.tar.gz\n==&gt; Downloader fra https:\/\/akamai.bintray.com\/b1\/b1767fb00e2e69fd9da73427d0926b1d1d0003622f7ddc0dd3a899b2894781ff?__gda__=exp=1538038849~hmac=c702c9335e7785fcbacad1f29afa61244d02f2eebb\n######################################################################## 100.0%\n==&gt; Hellende fn-0.5.8.high_sierra.bottle.tar.gz\n  \/usr\/local\/Cellar\/fn\/0.5.8: 5 filer, 16.7MB<\/code><\/pre>\n<p><\/p>\n<p>N\u00e5 er alt klart for den f\u00f8rste distribusjonen av funksjonen v\u00e5r ved hjelp av CLI. For enkelhets skyld vil vi bruke det innebygde milj\u00f8et for \u00e5 kj\u00f8re, for eksempel Node:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ fn init --runtime node --trigger http hellonode\n\nOppretter funksjon i: \/hellonode\nFunksjonens mal er generert.\nfunc.yaml er opprettet.<\/code><\/pre>\n<p><\/p>\n<p>En ny katalog vil bli opprettet <code>hellonode<\/code> for videre utvikling av Fn-funksjonen v\u00e5r med noen grunnleggende konfigurasjonsfiler. Inne i den nyskapte katalogen kan du lage applikasjonen din, i henhold til standardene for det valgte spr\u00e5ket eller kj\u00f8ringsmilj\u00f8et:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\"># \u041a\u0430\u0442\u0430\u043b\u043e\u0433 \u0441 node \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a:\n\n   hellonode\n   \u251c\u2500\u2500 func.js\n   \u251c\u2500\u2500 func.yaml\n   \u2514\u2500\u2500 package.json\n\n# \u0421\u0432\u0435\u0436\u0435\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u043e\u0435 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0435 Java11 \u0442\u0430\u043a\u043e\u0435:\n\n   hellojava11\n   \u251c\u2500\u2500 func.yaml\n   \u251c\u2500\u2500 pom.xml\n   \u2514\u2500\u2500 src\n       \u251c\u2500\u2500 main\n       \u2502   \u2514\u2500\u2500 java\n       \u2502       \u2514\u2500\u2500 com\n       \u2502           \u2514\u2500\u2500 example\n       \u2502               \u2514\u2500\u2500 fn\n       \u2502                   \u2514\u2500\u2500 HelloFunction.java\n       \u2514\u2500\u2500 test\n           \u2514\u2500\u2500 java\n               \u2514\u2500\u2500 com\n                   \u2514\u2500\u2500 example\n                       \u2514\u2500\u2500 fn\n                           \u2514\u2500\u2500 HelloFunctionTest.java<\/code><\/pre>\n<p><\/p>\n<p>Fn oppretter en grunnleggende prosjektstruktur og lager filen <code>func.yaml<\/code>, som inneheld n\u00f8dvendige installasjonar for Fn, og set opp mal for koden p\u00e5 spr\u00e5ket du valde.<\/p>\n<p><\/p>\n<p>I tilfelle av Node-runtime, betyr dette:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ cat hellonode\/func.js\n\nconst fdk=require('@fnproject\/fdk');\n\nfdk.handle(function(input){\n  let name = 'World';\n  if (input.name) {\n    name = input.name;\n  }\n  return {'message': 'Hello ' + name}\n})<\/code><\/pre>\n<p><\/p>\n<p>No skal vi raskt sjekke funksjonen v\u00e5r lokalt for \u00e5 sj\u00e5 korleis alt fungerer.<\/p>\n<p><\/p>\n<p>For \u00e5 begynne med, skal vi starte Fn-serveren. Som tidlegare nemnt, er Fn-serveren ein Docker-container, s\u00e5 den vil g\u00e5 og ta bildet fr\u00e5 Docker-registeret etter at den er starta.<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ fn start -d                    # startar lokal server i bakgrunnen\n\nUnable to find image 'fnproject\/fnserver:latest' locally\nlatest: Pulling from fnproject\/fnserver\nff3a5c916c92: Pull complete\n1a649ea86bca: Pull complete\nce35f4d5f86a: Pull complete\n\n...\n\nStatus: Downloaded newer image for fnproject\/fnserver:latest\n668ce9ac0ed8d7cd59da49228bda62464e01bff2c0c60079542d24ac6070f8e5<\/code><\/pre>\n<p><\/p>\n<p>For \u00e5 starte funksjonen v\u00e5r m\u00e5 den \u00ablanseres\u00bb. For dette kreves <code>namn p\u00e5 applikasjonen<\/code>: i Fn m\u00e5 alle applikasjonar definerast som namnrom for tilknyttede funksjonar.<\/p>\n<p><\/p>\n<p>Fn CLI vil leita etter fila <code>func.yaml<\/code> i den gjeldande katalogen, som vil bli brukt til \u00e5 konfigurere funksjonen. S\u00e5 vi m\u00e5 f\u00f8rst g\u00e5 til katalogen v\u00e5r <code>hellonode<\/code>.<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ cd hellonode\n$ fn deploy --app fnexo --local  # ruller ut funksjonen lokalt, applikasjonsnavnet - fnexo.\n                                 # parameteren local lastar ikkje opp bildet til fjernregisteret,\n                                 # men k\u00f8yre det direkte\n\nDeploying hellonode to app: fnexo\nBumped to version 0.0.2\nBuilding image nfrankel\/hellonode:0.0.3 .\nUpdating function hellonode using image nfrankel\/hellonode:0.0.3...\nSuccessfully created app:  fnexo\nSuccessfully created function: hellonode with nfrankel\/hellonode:0.0.3\nSuccessfully created trigger: hellonode-trigger<\/code><\/pre>\n<p><\/p>\n<p>Som ein kan sj\u00e5 fr\u00e5 utskrifta av komandoen, blir det laga eit nytt containerbilde for Docker som inneheld funksjonen v\u00e5r. Funksjonen er klar til \u00e5 bli kalla, og vi har to m\u00e5tar \u00e5 gjere dette p\u00e5:<\/p>\n<p><\/p>\n<ul>\n<li>ved \u00e5 bruke kommandoen Fn <code>invoke<\/code><\/li>\n<li>ogs\u00e5 ved \u00e5 kalle direkte gjennom <code>http<\/code><\/li>\n<\/ul>\n<p><\/p>\n<p>Kall <code>invoke<\/code> gjennom Fn simulerer eigentleg HTTP-arbeid for testing, noko som er praktisk for raske sjekkar:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ fn invoke fnexo hellonode      # kallar funksjonen hellonode i applikasjonen fnexo\n\n{\"message\":\"Hello World\"}<\/code><\/pre>\n<p><\/p>\n<p>For \u00e5 kalle funksjonen direkte, m\u00e5 ein kjenne den fullstendige URL-en:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ curl http:\/\/localhost:8080\/t\/fnexo\/hellonode-trigger\n\n{\"message\":\"Hello World\"}<\/code><\/pre>\n<p><\/p>\n<p>Fn-serveren gir funksjonane sine gjennom port 8080, og URL-en for funksjonen ser ut til \u00e5 f\u00f8lge m\u00f8nsteret <code>t\/app\/function<\/code>, men ikke helt. Via HTTP kalles funksjonen ikke direkte, men gjennom en s\u00e5kalt trigger, som i henhold til sitt navn \u00abstarter\u00bb anropet av funksjonen. Triggere defineres i <code>`func.yml<\/code> prosjektet:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">schema_version: 20180708\nname: hellonode\nversion: 0.0.3\nruntime: node\nentrypoint: node func.js\nformat: json\ntriggers:\n- name: hellonode-trigger\n  type: http\n  source: \/hellonode-trigger    # URL til triggeren<\/code><\/pre>\n<p><\/p>\n<p>Vi kan endre navnet p\u00e5 triggeren for \u00e5 samsvare med funksjonsnavnet, dette vil forenkle alt:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">triggers:\n- name: hellonode-trigger\n  type: http\n  source: \/hellonode    # samsvar med funksjonsnavnet<\/code><\/pre>\n<p><\/p>\n<p>S\u00e5 starter vi distribusjonen av funksjonen igjen og kaller den fra den nye triggeren:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ fn deploy --app fnexo hellonode --local\n$ curl http:\/\/localhost:8080\/t\/fnexo\/hellonode\n\n{\"message\":\"Hello World\"}<\/code><\/pre>\n<p><\/p>\n<p>Alt fungerer! Det er p\u00e5 tide \u00e5 g\u00e5 videre med eksperimentene og publisere v\u00e5r FaaS p\u00e5 serveren!<\/p>\n<p><\/p>\n<h2 id=\"ustanovka-servisov-besservernyh-funkciy-na-sobstvennoy-infrastrukture\">Installerer serverl\u00f8se funksjoner p\u00e5 din egen infrastruktur<\/h2>\n<p><\/p>\n<p>La oss raskt sette opp en virtuell maskin ved hjelp av Exoscale CLI. Hvis du ikke har satt det opp enn\u00e5 \u2013 kan du bruke <noindex><a rel=\"nofollow\" href=\"https:\/\/community.exoscale.com\/documentation\/tools\/exoscale-command-line-interface\/\">v\u00e5r guide for rask oppstart<\/a><\/noindex>. Dette er et flott verkt\u00f8y som vil \u00f8ke produktiviteten din ytterligere. <strong>Ikke glem \u00e5 sette opp en regel for \u00e5 \u00e5pne port 8080 i sikkerhetsgruppen!<\/strong> F\u00f8lgende kommandoer vil starte en ren virtuell maskin, klar for hosting av funksjonene v\u00e5re:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ exo firewall create fn-securitygroup\n$ exo firewall add fn-securitygroup ssh --my-ip\n$ exo firewall add fn-securitygroup -p tcp -P 8080-8080 -c 0.0.0.0\/0\n$ exo vm create fn-server -s fn-securitygroup<\/code><\/pre>\n<p><\/p>\n<p>Deretter kan du logge inn via ssh p\u00e5 den virtuelle maskinen og installere Fn-serveren:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ exo ssh fn-server\n\nThe authenticity of host '185.19.30.175 (185.19.30.175)' can't be established.\nECDSA key fingerprint is SHA256:uaCKRYeX4cvim+Gr8StdPvIQ7eQgPuOKdnj5WI3gI9Q.\nAre you sure you want to continue connecting (yes\/no)? yes\nWarning: Permanently added '185.19.30.175' (ECDSA) to the list of known hosts.\nWelcome to Ubuntu 18.04 LTS (GNU\/Linux 4.15.0-20-generic x86_64)<\/code><\/pre>\n<p><\/p>\n<p>Deretter installerer vi Docker og Fn-serveren p\u00e5 samme m\u00e5te som vi gjorde p\u00e5 den lokale maskinen, og starter serveren:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ sudo apt-get update\n$ sudo apt-get install docker.io\n$ sudo systemctl start docker\n$ curl -LSs https:\/\/raw.githubusercontent.com\/fnproject\/cli\/master\/install | sh\n$ sudo fn start\n\n...\n\n    ______\n   \/ ____\/___\n  \/ \/_  \/ __ \n \/ __\/ \/ \/ \/ \/ \n\/_\/   \/_\/ \n    v0.3.643<\/code><\/pre>\n<p><\/p>\n<p>Fn er klart til \u00e5 motta funksjoner! For \u00e5 m\u00e5lrette funksjoner til den eksterne serveren, vil vi bruke kommandoen <code>deploy<\/code> fra den lokale datamaskinen, og hopper over flagget <code>--local<\/code>.<\/p>\n<p><\/p>\n<p>I tillegg krever Fn at du angir plasseringen av Fn-serveren og Docker-registeret. Disse parameterne kan settes via milj\u00f8variabler <code>FN_API_URL<\/code> og <code>FN_REGISTRY<\/code> henholdsvis, men det tilbys ogs\u00e5 en mer praktisk m\u00e5te for enkel administrasjon av konfigurasjoner for distribusjon.<\/p>\n<p><\/p>\n<p>I Fn-termer er konfigurasjonen for distribusjon kalt <code>context<\/code>. Den f\u00f8lgende kommandoen vil opprette konteksten:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ fn create context exoscale --provider default --api-url http:\/\/185.19.30.175:8080 --registry nfrankel<\/code><\/pre>\n<p><\/p>\n<p>Du kan se tilgjengelige kontekster slik:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ fn list contexts\n\nN\u00c5V\u00c6RENDE NAVN      LEVERAND\u00d8R      API URL                      REGISTER\n    default       default       http:\/\/localhost:8080\/\n    exoscale      default       http:\/\/185.19.30.175:8080    nfrankel\n<\/code><\/pre>\n<p><\/p>\n<p>For \u00e5 bytte til konteksten som nettopp ble opprettet, gj\u00f8r du slik:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\"> $ fn use context exoscale\n\n N\u00e5 bruker vi konteksten: exoscale<\/code><\/pre>\n<p><\/p>\n<p>Fra dette punktet vil Fn-funksjonsleveransen laste ned Docker-bilder ved \u00e5 bruke den valgte kontoen p\u00e5 DockerHub (i mitt tilfelle \u2014 <code>nfrankel<\/code>), hvoretter den vil varsle den eksterne serveren (i dette eksemplet \u2014 <code>http:\/\/185.19.30.175:8080<\/code>) om plasseringen og versjonen av det siste bildet som inneholder funksjonen din.<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ fn deploy --app fnexo .   # kj\u00f8res p\u00e5 lokal maskin fra mappen hellonode\n\nDistribuerer funksjonen til: \/.\nDistribuerer hellonode til app: fnexo\nOppgradert til versjon 0.0.5\nBygger bilde nfrankel\/hellonode:0.0.5 .<\/code><\/pre>\n<p><\/p>\n<p>Til slutt:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ curl http:\/\/185.19.30.175:8080\/t\/fnexo\/hellonode\n\n{\"message\":\"Hello World\"}<\/code><\/pre>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Vi bygger v\u00e5r egen serverless basert p\u00e5 Fn\" src=\"\/wp-content\/uploads\/2019\/11\/51a7b88cd6bf4953740cfac937b0acc2.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<em>Livssyklus for funksjoner i serverl\u00f8s beregning basert p\u00e5 Fn<\/em><\/p>\n<p><\/p>\n<h2 id=\"preimuschestva-besservernyh-vychisleniy-na-svoih-moschnostyah\">Fordeler med serverl\u00f8s beregning p\u00e5 egne ressurser<\/h2>\n<p><\/p>\n<p>Serverl\u00f8s beregning er en praktisk l\u00f8sning for rask implementering av uavhengige deler av applikasjonen, som samhandler med mer komplekse applikasjoner eller mikrotjenester.<\/p>\n<p><\/p>\n<p>Ofte er dette knyttet til skjulte kostnader ved \u00e5 forplikte seg til en valgt leverand\u00f8r, noe som, avhengig av spesifikke bruksomr\u00e5der og volum, kan f\u00f8re til h\u00f8yere kostnader og lavere fleksibilitet i fremtiden.<\/p>\n<p><\/p>\n<p>Multisky- og hybridcloud-arkitekturer lider ogs\u00e5 i slike tilfeller, da man gjerne kan finne seg i en situasjon der man \u00f8nsker \u00e5 bruke serverl\u00f8s beregning, men p\u00e5 grunn av bedriftspolitikk kan dette v\u00e6re umulig.<\/p>\n<p><\/p>\n<p>Fn er ganske enkelt \u00e5 bruke, kan gi nesten samme FaaS-grensesnitt, med sm\u00e5 kostnader. Det fjerner alle forpliktelser til leverand\u00f8rer, og kan installeres lokalt eller hos hvilken som helst \u00f8nsket leverand\u00f8r av skybaserte l\u00f8sninger. Det finnes ogs\u00e5 frihet til \u00e5 velge programmeringsspr\u00e5k.<\/p>\n<p><\/p>\n<p>Artikkelen presenterer bare grunnlagene for Fn, men \u00e5 lage ditt eget kj\u00f8ringsmilj\u00f8 er ganske enkelt, og den generelle arkitekturen kan utvides med bruk av en Fn-lastbalanserer, eller ved \u00e5 plassere Fn bak en proxy for beskyttelse.<\/p>\n<p>Kilde: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/southbridge\/blog\/475044\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0411\u0435\u0441\u0441\u0435\u0440\u0432\u0435\u0440\u043d\u044b\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u2014 \u043e\u0434\u043d\u0430 \u0438\u0437 \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u0437\u0430\u043c\u0435\u0442\u043d\u044b\u0445 \u0442\u0435\u043d\u0434\u0435\u043d\u0446\u0438\u0439 \u0432 \u043e\u0431\u043b\u0430\u0447\u043d\u044b\u0445 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f\u0445. \u041e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u043f\u0440\u0438\u043d\u0446\u0438\u043f \u0440\u0430\u0431\u043e\u0442\u044b \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u2014 \u0437\u0430\u0431\u043e\u0442\u0430 \u043d\u0435 DevOps\u2019\u043e\u0432, \u0430 \u043f\u043e\u0441\u0442\u0430\u0432\u0449\u0438\u043a\u0430 \u0443\u0441\u043b\u0443\u0433. \u041c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u043e\u0434\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u0434 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0443 \u0438 \u043e\u0431\u043b\u0430\u0434\u0430\u0435\u0442 \u0432\u044b\u0441\u043e\u043a\u043e\u0439 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c\u044e \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f. \u0414\u0440\u0443\u0433\u0430\u044f \u043e\u0431\u0449\u0430\u044f \u0447\u0435\u0440\u0442\u0430 \u2014 \u0442\u0435\u043d\u0434\u0435\u043d\u0446\u0438\u044f \u043a \u043c\u0438\u043d\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u0438 \u0444\u043e\u043a\u0443\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u043a\u043e\u0434\u0430, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0431\u0435\u0441\u0441\u0435\u0440\u0432\u0435\u0440\u043d\u044b\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u0438\u043d\u043e\u0433\u0434\u0430 \u043d\u0430\u0437\u044b\u0432\u0430\u044e\u0442 &#171;\u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043a\u0430\u043a \u0443\u0441\u043b\u0443\u0433\u0430&#187; [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-52562","post","type-post","status-publish","format-standard","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.5 - aioseo.com -->\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/no\/blog\/administrirovanie\/stroim-sobstvennyj-serverless-na-osnove-fn\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.5\" \/>\n\t\t<meta property=\"og:locale\" content=\"nn_NO\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u0421\u0442\u0440\u043e\u0438\u043c \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 serverless \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 Fn | ProHoster\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/no\/blog\/administrirovanie\/stroim-sobstvennyj-serverless-na-osnove-fn\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-11-10T21:00:00+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-02-18T11:00:19+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Bygg din egen serverl\u00f8sning basert p\u00e5 Fn | ProHoster","description":"","canonical_url":"https:\/\/prohoster.info\/no\/blog\/administrirovanie\/stroim-sobstvennyj-serverless-na-osnove-fn","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"nn_NO","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u0421\u0442\u0440\u043e\u0438\u043c \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 serverless \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 Fn | ProHoster","og:url":"https:\/\/prohoster.info\/no\/blog\/administrirovanie\/stroim-sobstvennyj-serverless-na-osnove-fn","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-11-10T21:00:00+00:00","article:modified_time":"2020-02-18T11:00:19+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"52562","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-24 04:03:20","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 20:41:24","updated":"2026-01-24 04:03:20","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/no\/wp-json\/wp\/v2\/posts\/52562","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/no\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/no\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/no\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/no\/wp-json\/wp\/v2\/comments?post=52562"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/no\/wp-json\/wp\/v2\/posts\/52562\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/no\/wp-json\/wp\/v2\/media?parent=52562"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/no\/wp-json\/wp\/v2\/categories?post=52562"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/no\/wp-json\/wp\/v2\/tags?post=52562"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}