{"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\/sv\/blog\/administrirovanie\/stroim-sobstvennyj-serverless-na-osnove-fn","title":{"rendered":"Bygger v\u00e5rt eget serverless baserat p\u00e5 Fn","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Bygger v\u00e5rt eget serverless baserat 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\">Serverless ber\u00e4kningar<\/a><\/noindex> \u2014 \u00e4r en av de mest framtr\u00e4dande trenderna inom molnber\u00e4kning. Huvudprincipen \u00e4r att infrastrukturen ligger i tj\u00e4nsteleverant\u00f6rens h\u00e4nder, inte hos DevOps. Resurserna skalas automatiskt baserat p\u00e5 belastningen och har en h\u00f6g anpassningshastighet.<\/p>\n<p><\/p>\n<p>En annan vanlig egenskap \u00e4r trenden att minimera och fokusera koden, varf\u00f6r serverless ber\u00e4kningar ibland kallas \"funktion som en tj\u00e4nst\" (FaaS).<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>Historiskt sett var Amazon den f\u00f6rsta molntj\u00e4nstleverant\u00f6ren som erbj\u00f6d FaaS med AWS Lambda, d\u00e4rifr\u00e5n kom termen. Andra molntj\u00e4nstleverant\u00f6rer erbjuder ocks\u00e5 motsvarigheter:<\/p>\n<p><\/p>\n<ul>\n<li>Cloud Functions fr\u00e5n Google<\/li>\n<li>Azure Functions fr\u00e5n Microsoft<\/li>\n<\/ul>\n<p><\/p>\n<p>Alla dessa f\u00f6retag tillhandah\u00e5ller serverless ber\u00e4kningar, automatisk skalning och endast betalning f\u00f6r faktiskt anv\u00e4nda resurser, men de binder kunderna till sina propriet\u00e4ra produkter. Det finns \u00e4nd\u00e5 gratis alternativ med \u00f6ppen k\u00e4llkod f\u00f6r att organisera serverless ber\u00e4kningar. Det \u00e4r v\u00e4rt att n\u00e4mna:<\/p>\n<p><\/p>\n<ul>\n<li>Plattformen <noindex><a rel=\"nofollow\" href=\"https:\/\/openwhisk.apache.org\/\">Apache OpenWhisk<\/a><\/noindex>, som utvecklas i ett inkubatorprojekt av IBM,<\/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 ganska rikliga ekosystemet i Spring Framework, vilket ocks\u00e5 kan anv\u00e4ndas som en fasad till AWS Lambda, Azure Functions och OpenWhisk,<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/fnproject\">Projektet Fn<\/a><\/noindex>, som st\u00f6ds av Oracle.<\/li>\n<\/ul>\n<p><\/p>\n<p>Alla dessa \u00e4r helt oberoende av moln, vilket inneb\u00e4r att de kan installeras i valfritt moln, inklusive ditt eget, offentligt eller privat, och sj\u00e4lvklart \u00e4ven i Exoscale.<\/p>\n<p><\/p>\n<h2 id=\"kak-proekt-fn-ustroen\">Hur projektet Fn \u00e4r uppbyggt<\/h2>\n<p><\/p>\n<p>Fn \u00e4r helt baserat p\u00e5 Docker, och best\u00e5r av tv\u00e5 huvudkomponenter:<\/p>\n<p><\/p>\n<ul>\n<li>CLI-programmet, som anv\u00e4nds f\u00f6r att hantera alla aspekter av Fn-infrastrukturen, och interagerar med Fn-servern,<\/li>\n<li>Sj\u00e4lva Fn-servern, en vanlig applikation, packad i en Docker-container.<\/li>\n<\/ul>\n<p><\/p>\n<p>Funktioner som distribueras i Fn k\u00f6rs ocks\u00e5 i separata containrar, vilket g\u00f6r det m\u00f6jligt att st\u00f6dja ett stort antal programmeringsspr\u00e5k, till exempel\u2026 Clojure!<\/p>\n<p><\/p>\n<p>Argumenten f\u00f6r funktionerna skickas via standardinmatning (STDIN) och resultaten skrivs till standardutmatning (STDOUT). Om argumenten eller returnerade v\u00e4rden inte \u00e4r enkla v\u00e4rden (till exempel JSON-objekt) kan de omvandlas med hj\u00e4lp av ett abstraktionslager som tillhandah\u00e5lls av Fn i form av ett funktionsutvecklingspaket (FDK).<\/p>\n<p><\/p>\n<p>F\u00f6r att underl\u00e4tta erbjuds inbyggda mallar som f\u00f6renklar distributionen av FaaS p\u00e5 en l\u00e5ng lista av olika spr\u00e5k och deras versioner (Go, olika versioner av Java, Python etc.).<\/p>\n<p><\/p>\n<p>Att skapa FaaS \u00e4r enkelt genom att f\u00f6lja detta schema:<\/p>\n<p><\/p>\n<ul>\n<li>Vi distribuerar funktionen med CLI Fn: en konfigurationsfil f\u00f6r applikationen skapas f\u00f6r Fn baserat p\u00e5 den valda mallen.<\/li>\n<li>Vi rullar ut v\u00e5r egen funktion, \u00e5terigen med CLI Fn: en containerbild placeras i ett repository, efter vilket servern meddelas om existensen och placeringen av denna bild.<\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Bygger v\u00e5rt eget serverless baserat p\u00e5 Fn\" src=\"\/wp-content\/uploads\/2019\/11\/5add8b58c80e976cd61a156fdd0fba11.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<em>Principen f\u00f6r funktioner i Fn<\/em><\/p>\n<p><\/p>\n<h2 id=\"lokalnaya-ustanovka-i-testirovanie-besservernyh-funkciy\">Lokal installation och testning av serverl\u00f6sa funktioner<\/h2>\n<p><\/p>\n<p>L\u00e5t oss b\u00f6rja med att installera Fn p\u00e5 den lokala maskinen. F\u00f6rst installeras Docker, som kr\u00e4vs av Fn. Vi f\u00f6ruts\u00e4tter att vi anv\u00e4nder 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 s\u00e5 kan du anv\u00e4nda en paketmanager\/f\u00e5 Docker byggen enligt ditt system. Sedan kan vi g\u00e5 direkt till installationen av Fn CLI. Till exempel, med hj\u00e4lp av 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>Om du arbetar med OSX som har Homebrew installerat, kan du g\u00e5 en annan v\u00e4g:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ brew install fn\n\n==&gt; Downloading https:\/\/homebrew.bintray.com\/bottles\/fn-0.5.8.high_sierra.bottle.tar.gz\n==&gt; Downloading from https:\/\/akamai.bintray.com\/b1\/b1767fb00e2e69fd9da73427d0926b1d1d0003622f7ddc0dd3a899b2894781ff?__gda__=exp=1538038849~hmac=c702c9335e7785fcbacad1f29afa61244d02f2eebb\n######################################################################## 100.0%\n==&gt; Pouring fn-0.5.8.high_sierra.bottle.tar.gz\n  \/usr\/local\/Cellar\/fn\/0.5.8: 5 files, 16.7MB<\/code><\/pre>\n<p><\/p>\n<p>Nu \u00e4r allt klart f\u00f6r den f\u00f6rsta distributionen av v\u00e5r funktion med hj\u00e4lp av CLI. F\u00f6r enkelhetens skull kommer vi att anv\u00e4nda den inbyggda milj\u00f6n f\u00f6r k\u00f6rning, till exempel Node:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ fn init --runtime node --trigger http hellonode\n\nCreating function at: \/hellonode\nFunction boilerplate generated.\nfunc.yaml created.<\/code><\/pre>\n<p><\/p>\n<p>En ny katalog kommer att skapas <code>hellonode<\/code> f\u00f6r vidareutveckling av v\u00e5r Fn-funktion med n\u00e5gra grundl\u00e4ggande konfigurationsfiler. Inne i den nyss skapade katalogen kan du skapa din applikation enligt standarderna f\u00f6r det spr\u00e5k eller den milj\u00f6 du valt:<\/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 skapar en initial projektstruktur, skapar en fil <code>func.yaml<\/code>, som inneh\u00e5ller n\u00f6dv\u00e4ndiga inst\u00e4llningar f\u00f6r Fn, och installerar en mall f\u00f6r koden p\u00e5 det spr\u00e5k du valt.<\/p>\n<p><\/p>\n<p>F\u00f6r Node-milj\u00f6n betyder detta:<\/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>Nu ska vi snabbt testa v\u00e5r funktion lokalt f\u00f6r att se hur allt fungerar.<\/p>\n<p><\/p>\n<p>F\u00f6r att b\u00f6rja kommer vi att starta Fn-servern. Som redan n\u00e4mnts \u00e4r Fn-servern en Docker-beh\u00e5llare, d\u00e4rf\u00f6r kommer den efter start att h\u00e4mta en bild fr\u00e5n Docker-registret.<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ fn start -d                    # startar den lokala servern i bakgrunden\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>F\u00f6r att k\u00f6ra v\u00e5r funktion m\u00e5ste den \"deployas\". F\u00f6r detta kr\u00e4vs <code>applikationsnamn<\/code>: i Fn m\u00e5ste alla applikationer anges som namnrymd f\u00f6r relaterade funktioner.<\/p>\n<p><\/p>\n<p>Fn CLI kommer att s\u00f6ka efter filen <code>func.yaml<\/code> i den aktuella katalogen, som kommer att anv\u00e4ndas f\u00f6r att konfigurera funktionen. S\u00e5 vi m\u00e5ste f\u00f6rst g\u00e5 till v\u00e5r katalog <code>hellonode<\/code>.<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ cd hellonode\n$ fn deploy --app fnexo --local  # deployar funktionen lokalt, applikationsnamnet \u00e4r fnexo.\n                                 # parametrarna local laddar inte upp bilden till fj\u00e4rrregistret,\n                                 # utan k\u00f6r den direkt\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 man kan se fr\u00e5n kommandot \u00e4r en ny Docker-beh\u00e5llarbild som inneh\u00e5ller v\u00e5r funktion skapat. Funktionen \u00e4r redo att anropas och vi har tv\u00e5 s\u00e4tt att g\u00f6ra det:<\/p>\n<p><\/p>\n<ul>\n<li>genom att anv\u00e4nda kommandot Fn <code>invoke<\/code><\/li>\n<li>anropas direkt via <code>http<\/code><\/li>\n<\/ul>\n<p><\/p>\n<p>Anrop <code>invoke<\/code> genom Fn emulerar bara HTTP-arbetet f\u00f6r tester, vilket \u00e4r bekv\u00e4mt f\u00f6r snabba kontroller:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ fn invoke fnexo hellonode      # anropar funktionen hellonode applikationen fnexo\n\n{\"message\":\"Hello World\"}<\/code><\/pre>\n<p><\/p>\n<p>F\u00f6r att anropa funktionen direkt m\u00e5ste vi k\u00e4nna till den fullst\u00e4ndiga 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-servern tillhandah\u00e5ller sina funktioner via port 8080, och URL:en f\u00f6r funktionen verkar \u00f6verensst\u00e4mma med m\u00f6nstret <code>t\/app\/function<\/code>, men inte helt. Genom HTTP anropas funktionen inte direkt utan via s\u00e5 kallade triggar som, enligt sitt namn, \"utl\u00f6ser\" anropet av funktionen. Triggar definieras i <code>`func.yml<\/code> projektet:<\/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 f\u00f6r triggen<\/code><\/pre>\n<p><\/p>\n<p>Vi kan \u00e4ndra namnet p\u00e5 triggen s\u00e5 att det \u00f6verensst\u00e4mmer med namnet p\u00e5 funktionen, detta f\u00f6renklar allt:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">triggers:\n- name: hellonode-trigger\n  type: http\n  source: \/hellonode    # \u00f6verensst\u00e4mmer med namnet p\u00e5 funktionen<\/code><\/pre>\n<p><\/p>\n<p>Sedan k\u00f6r vi funktionen p\u00e5 nytt och anropar den fr\u00e5n den nya triggen:<\/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>Allt fungerar! Det \u00e4r dags att g\u00e5 vidare till praktiska experiment och publicera v\u00e5r FaaS p\u00e5 servern!<\/p>\n<p><\/p>\n<h2 id=\"ustanovka-servisov-besservernyh-funkciy-na-sobstvennoy-infrastrukture\">Installation av serverl\u00f6sa funktioner p\u00e5 egen infrastruktur<\/h2>\n<p><\/p>\n<p>L\u00e5t oss snabbt installera en virtuell maskin med CLI Exoscale. Om du inte redan har konfigurerat den - du kan anv\u00e4nda <noindex><a rel=\"nofollow\" href=\"https:\/\/community.exoscale.com\/documentation\/tools\/exoscale-command-line-interface\/\">v\u00e5r guide f\u00f6r snabbstartning<\/a><\/noindex>. Det \u00e4r ett h\u00e4ftigt verktyg som ytterligare \u00f6kar din produktivitet. <strong>Gl\u00f6m inte att s\u00e4tta upp en regel f\u00f6r att \u00f6ppna port 8080 i s\u00e4kerhetsgruppen!<\/strong> F\u00f6ljande kommandon kommer att starta en ren virtuell maskin, redo f\u00f6r att hosta v\u00e5ra funktioner:<\/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>Sedan kan vi logga in via ssh p\u00e5 den virtuella maskinen och installera Fn-servern:<\/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>D\u00e4refter installerar vi Docker och Fn-servern p\u00e5 samma s\u00e4tt som tidigare p\u00e5 den lokala maskinen, startar servern:<\/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 \u00e4r redo att ta emot funktioner! F\u00f6r att \u00f6verf\u00f6ra funktioner till den fj\u00e4rrservern kommer vi att anv\u00e4nda kommandot <code>deploy<\/code> fr\u00e5n den lokala datorn, utan flaggan <code>--local<\/code>.<\/p>\n<p><\/p>\n<p>Dessutom kr\u00e4ver Fn att du anger platsen f\u00f6r Fn-servern och Docker-registret. Dessa parametrar kan st\u00e4llas in genom milj\u00f6variabler <code>FN_API_URL<\/code> och <code>FN_REGISTRY<\/code> respektive, men det finns ocks\u00e5 ett mer bekv\u00e4mt s\u00e4tt att enkelt hantera skapandet och hanteringen av konfigurationer f\u00f6r distribution.<\/p>\n<p><\/p>\n<p>I termerna av Fn kallas konfiguration f\u00f6r distribution <code>context<\/code>. N\u00e4sta kommando kommer att skapa en kontext:<\/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 de tillg\u00e4ngliga kontexterna s\u00e5 h\u00e4r:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ fn list contexts\n\nCURRENT NAME      PROVIDER      API URL                      REGISTRY\n    default       default       http:\/\/localhost:8080\/\n    exoscale      default       http:\/\/185.19.30.175:8080    nfrankel\n<\/code><\/pre>\n<p><\/p>\n<p>Och v\u00e4xla till den nyss skapade kontexten s\u00e5 h\u00e4r:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\"> $ fn use context exoscale\n\n Now using context: exoscale<\/code><\/pre>\n<p><\/p>\n<p>Fr\u00e5n den h\u00e4r platsen kommer Fn-funktionerna att ladda Docker-bilder med hj\u00e4lp av det valda DockerHub-kontot (i mitt fall \u2014 <code>nfrankel<\/code>), varefter den kommer att meddela den fj\u00e4rrserver som i detta exempel \u2014 <code>http:\/\/185.19.30.175:8080<\/code>) om platsen och versionen av den senaste bilden som inneh\u00e5ller din funktion.<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ fn deploy --app fnexo .   # k\u00f6rs p\u00e5 den lokala maskinen fr\u00e5n mappen hellonode\n\nImplementerar funktion i: \\\/.\nImplementerar hellonode till app: fnexo\nH\u00f6jt till version 0.0.5\nBygger bild nfrankel\\\/hellonode:0.0.5 .<\/code><\/pre>\n<p><\/p>\n<p>Till sist:<\/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=\"Bygger v\u00e5rt eget serverless baserat p\u00e5 Fn\" src=\"\/wp-content\/uploads\/2019\/11\/51a7b88cd6bf4953740cfac937b0acc2.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<em>Livscykeln f\u00f6r en funktion inom serverl\u00f6s databehandling baserat p\u00e5 Fn<\/em><\/p>\n<p><\/p>\n<h2 id=\"preimuschestva-besservernyh-vychisleniy-na-svoih-moschnostyah\">F\u00f6rdelarna med serverl\u00f6s databehandling p\u00e5 egna resurser<\/h2>\n<p><\/p>\n<p>Serverl\u00f6s databehandling \u00e4r en bekv\u00e4m l\u00f6sning f\u00f6r snabb implementering av oberoende delar av en applikation som interagerar med mer komplexa applikationer eller mikrotj\u00e4nster.<\/p>\n<p><\/p>\n<p>Detta \u00e4r ofta kopplat till dolda kostnader f\u00f6r att binda sig till en vald leverant\u00f6r, vilket kan leda till h\u00f6gre kostnader och minskad flexibilitet i framtiden beroende p\u00e5 den specifika anv\u00e4ndningsscenariot och volymen.<\/p>\n<p><\/p>\n<p>Multicloud- och hybrida molnarkitekturer lider ocks\u00e5 av detta, eftersom man l\u00e4tt kan hamna i en situation d\u00e4r man skulle vilja anv\u00e4nda serverl\u00f6s databehandling, men p\u00e5 grund av f\u00f6retagspolicy kan det vara om\u00f6jligt.<\/p>\n<p><\/p>\n<p>Fn \u00e4r tillr\u00e4ckligt enkelt att anv\u00e4nda, kan ge n\u00e4stan samma FaaS-gr\u00e4nssnitt med l\u00e5ga kostnader. Det eliminerar alla leverant\u00f6rsbundningar, och det kan installeras lokalt eller p\u00e5 vilken molnleverant\u00f6r som helst som man v\u00e4ljer. Det finns ocks\u00e5 frihet att v\u00e4lja programmeringsspr\u00e5k.<\/p>\n<p><\/p>\n<p>Artikeln ger bara grunderna f\u00f6r Fn, men att skapa sin egen exekveringsmilj\u00f6 \u00e4r tillr\u00e4ckligt enkelt, och den \u00f6vergripande arkitekturen kan utvidgas med en Fn-lastbalanserare, eller genom att placera Fn bakom en proxy f\u00f6r skydd.<\/p>\n<p>K\u00e4lla: <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.4 - 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\/sv\/blog\/administrirovanie\/stroim-sobstvennyj-serverless-na-osnove-fn\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.4\" \/>\n\t\t<meta property=\"og:locale\" content=\"sv_SE\" \/>\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\/sv\/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\udd47Bygger v\u00e5r egen serverless baserat p\u00e5 Fn | ProHoster","description":"","canonical_url":"https:\/\/prohoster.info\/sv\/blog\/administrirovanie\/stroim-sobstvennyj-serverless-na-osnove-fn","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sv_SE","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\/sv\/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\/sv\/wp-json\/wp\/v2\/posts\/52562","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/comments?post=52562"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts\/52562\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/media?parent=52562"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/categories?post=52562"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/tags?post=52562"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}