{"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\/de\/blog\/administrirovanie\/stroim-sobstvennyj-serverless-na-osnove-fn","title":{"rendered":"Wir bauen unser eigenes serverless auf Basis von Fn","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Wir bauen unser eigenes serverless auf Basis von 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\">Serverlose Berechnungen<\/a><\/noindex> \u2014 ist einer der auff\u00e4lligsten Trends in der Cloud-Computing. Das Grundprinzip besteht darin, dass die Infrastruktur nicht die Sorge der DevOps ist, sondern des Dienstanbieters. Die Skalierung der Ressourcen passt sich automatisch an die Last an und verf\u00fcgt \u00fcber eine hohe \u00c4nderungsrate.<\/p>\n<p><\/p>\n<p>Ein weiteres gemeinsames Merkmal ist der Trend zur Minimierung und Fokussierung des Codes, weshalb serverlose Berechnungen manchmal als \u201eFunction as a Service\u201c (FaaS) bezeichnet werden.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>Historisch gesehen war der erste Anbieter von Cloud-Diensten, der FaaS mit AWS Lambda anbot, Amazon, von wo der Name stammt. Andere Cloud-Dienstanbieter bieten ebenfalls Entsprechungen an:<\/p>\n<p><\/p>\n<ul>\n<li>Cloud Functions von Google<\/li>\n<li>Azure Functions von Microsoft<\/li>\n<\/ul>\n<p><\/p>\n<p>All diese Unternehmen bieten serverlose Berechnungen, automatische Skalierung und Zahlung nur f\u00fcr tats\u00e4chlich genutzte Ressourcen an, binden jedoch die Kunden an ihr propriet\u00e4res Produkt. Es gibt jedoch kostenlose Open-Source-Alternativen, um serverlose Berechnungen zu organisieren. Erw\u00e4hnenswert sind:<\/p>\n<p><\/p>\n<ul>\n<li>Die Plattform <noindex><a rel=\"nofollow\" href=\"https:\/\/openwhisk.apache.org\/\">Apache OpenWhisk<\/a><\/noindex>, entwickelt im Inkubator von IBM,<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/cloud.spring.io\/spring-cloud-function\/\">Spring Cloud Functions<\/a><\/noindex>, als Teil eines recht umfangreichen \u00d6kosystems des Spring Frameworks, das auch als Fassade f\u00fcr AWS Lambda, Azure Functions und OpenWhisk verwendet werden kann,<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/fnproject\">Das Projekt Fn<\/a><\/noindex>, unterst\u00fctzt von Oracle.<\/li>\n<\/ul>\n<p><\/p>\n<p>Alle sind vollst\u00e4ndig cloudunabh\u00e4ngig, das hei\u00dft, sie k\u00f6nnen in jeder Cloud installiert werden, einschlie\u00dflich Ihrer eigenen, \u00f6ffentlichen oder privaten, und nat\u00fcrlich in Exoscale.<\/p>\n<p><\/p>\n<h2 id=\"kak-proekt-fn-ustroen\">Wie das Projekt Fn aufgebaut ist<\/h2>\n<p><\/p>\n<p>Fn basiert vollst\u00e4ndig auf Docker und besteht aus zwei Hauptkomponenten:<\/p>\n<p><\/p>\n<ul>\n<li>CLI-Programmen, die zur Verwaltung aller Aspekte der Fn-Infrastruktur und zur Interaktion mit dem Fn-Server entwickelt wurden,<\/li>\n<li>Dem eigentlichen Fn-Server, einer normalen Anwendung, die in einem Container f\u00fcr Docker verpackt ist.<\/li>\n<\/ul>\n<p><\/p>\n<p>Funktionen, die in Fn bereitgestellt werden, werden ebenfalls in einzelnen Containern ausgef\u00fchrt, wodurch eine Vielzahl von Programmiersprachen unterst\u00fctzt wird, zum Beispiel\u2026 Clojure!<\/p>\n<p><\/p>\n<p>Die Argumente der Funktionen werden \u00fcber die Standard-Eingabe (STDIN) \u00fcbergeben, die Ergebnisse werden auf die Standard-Ausgabe (STDOUT) geschrieben. Wenn die Argumente oder R\u00fcckgabewerte keine einfachen Werte sind (z. B. JSON-Objekt), k\u00f6nnen sie \u00fcber die von Fn bereitgestellte Abstraktionsschicht mithilfe des Function Development Kits (FDK) umgewandelt werden.<\/p>\n<p><\/p>\n<p>Zur Vereinfachung werden vorgefertigte Vorlagen angeboten, die die Bereitstellung von FaaS in einer breiten Palette von Programmiersprachen und deren Versionen (Go, verschiedene Java-Versionen, Python usw.) erleichtern.<\/p>\n<p><\/p>\n<p>FaaS ist einfach zu erstellen, indem Sie diesem Schema folgen:<\/p>\n<p><\/p>\n<ul>\n<li>Bereitstellung der Funktion \u00fcber die Fn CLI: Eine Konfigurationsdatei f\u00fcr die App wird basierend auf der gew\u00e4hlten Vorlage erstellt.<\/li>\n<li>Rollen Sie Ihre eigene Funktion wieder \u00fcber die Fn CLI aus: Das Container-Image wird in ein Repository eingestellt, woraufhin der Server \u00fcber dessen Existenz und Standort informiert wird.<\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Wir bauen unser eigenes serverless auf Basis von Fn\" src=\"\/wp-content\/uploads\/2019\/11\/5add8b58c80e976cd61a156fdd0fba11.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<em>Prinzip der Bereitstellung von Funktionen in Fn<\/em><\/p>\n<p><\/p>\n<h2 id=\"lokalnaya-ustanovka-i-testirovanie-besservernyh-funkciy\">Lokale Installation und Testung von serverlosen Funktionen<\/h2>\n<p><\/p>\n<p>Lassen Sie uns mit der Installation von Fn auf dem lokalen Computer beginnen. Zuerst wird Docker installiert, wie von Fn gefordert. Wir nehmen an, dass wir auf Debian\/Ubuntu arbeiten:<\/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>Oder verwenden Sie den Paketmanager beziehungsweise die Docker-Installation entsprechend Ihrer Systemarchitektur. Anschlie\u00dfend k\u00f6nnen Sie direkt zur Installation der Fn CLI \u00fcbergehen. Beispielsweise mit 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>Wenn Sie unter OSX mit installiertem Homebrew arbeiten, k\u00f6nnen Sie auch einen anderen Weg einschlagen:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ brew install fn\n\n==&gt; Herunterladen https:\/\/homebrew.bintray.com\/bottles\/fn-0.5.8.high_sierra.bottle.tar.gz\n==&gt; Herunterladen von https:\/\/akamai.bintray.com\/b1\/b1767fb00e2e69fd9da73427d0926b1d1d0003622f7ddc0dd3a899b2894781ff?__gda__=exp=1538038849~hmac=c702c9335e7785fcbacad1f29afa61244d02f2eebb\n######################################################################## 100.0%\n==&gt; Auspacken fn-0.5.8.high_sierra.bottle.tar.gz\n  \/usr\/local\/Cellar\/fn\/0.5.8: 5 Dateien, 16.7MB<\/code><\/pre>\n<p><\/p>\n<p>Jetzt ist alles bereit f\u00fcr die erste Bereitstellung unserer Funktion mit der CLI. Zur Vereinfachung verwenden wir die integrierte Runtime-Umgebung, zum Beispiel Node:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ fn init --runtime node --trigger http hellonode\n\nFunktion wird erstellt unter: \/hellonode\nFunktionsvorlage generiert.\nfunc.yaml erstellt.<\/code><\/pre>\n<p><\/p>\n<p>Ein neues Verzeichnis wird erstellt <code>hellonode<\/code> f\u00fcr die weitere Entwicklung unserer Fn-Funktion mit einigen grundlegenden Konfigurationsdateien. Innerhalb des neu erstellten Verzeichnisses k\u00f6nnen Sie Ihre Anwendung gem\u00e4\u00df den Standards der von Ihnen gew\u00e4hlten Programmiersprache oder Laufzeitumgebung entwickeln:<\/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 erstellt die anf\u00e4ngliche Projektstruktur, erstellt die Datei <code>func.yaml<\/code>, der die erforderlichen Einstellungen f\u00fcr Fn enth\u00e4lt und eine Vorlage f\u00fcr den Code in der von Ihnen gew\u00e4hlten Sprache festlegt.<\/p>\n<p><\/p>\n<p>Im Falle der Node-Laufzeit bedeutet dies:<\/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': 'Hallo ' + name}\n})<\/code><\/pre>\n<p><\/p>\n<p>Jetzt werden wir schnell unsere Funktion lokal \u00fcberpr\u00fcfen, um zu sehen, wie alles funktioniert.<\/p>\n<p><\/p>\n<p>Zun\u00e4chst starten wir den Fn-Server. Wie bereits erw\u00e4hnt, handelt es sich bei dem Fn-Server um einen Docker-Container, der nach dem Start das Image aus dem Docker-Registry abruft.<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ fn start -d                    # starten Sie den lokalen Server im Hintergrund\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: Newer image for fnproject\/fnserver:latest heruntergeladen\n668ce9ac0ed8d7cd59da49228bda62464e01bff2c0c60079542d24ac6070f8e5<\/code><\/pre>\n<p><\/p>\n<p>Um unsere Funktion auszuf\u00fchren, muss sie \u201ebereitgestellt\u201c werden. Dazu ist erforderlich, <code>den Anwendungsnamen<\/code>: In Fn m\u00fcssen alle Anwendungen als Namensr\u00e4ume f\u00fcr die zugeh\u00f6rigen Funktionen definiert werden.<\/p>\n<p><\/p>\n<p>Das Fn-CLI sucht nach einer Datei <code>func.yaml<\/code> im aktuellen Verzeichnis, die zur Konfiguration der Funktion verwendet wird. Daher wechseln wir zun\u00e4chst in unser Verzeichnis <code>hellonode<\/code>.<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ cd hellonode\n$ fn deploy --app fnexo --local  # wir deployen die Funktion lokal, der Anwendungsname ist fnexo.\n                                 # Der Parameter local l\u00e4dt das Image nicht in das entfernte Registry hoch,\n                                 # sondern startet es 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>Wie aus der Ausgabe des Befehls zu sehen ist, wird ein neues Container-Image f\u00fcr Docker erstellt, das unsere Funktion enth\u00e4lt. Die Funktion ist bereit f\u00fcr den Aufruf, und wir haben zwei M\u00f6glichkeiten, dies zu tun:<\/p>\n<p><\/p>\n<ul>\n<li>unter Verwendung des Fn-Befehls <code>invoke<\/code><\/li>\n<li>die Funktion direkt \u00fcber <code>http<\/code><\/li>\n<\/ul>\n<p><\/p>\n<p>Aufruf <code>invoke<\/code> \u00fcber Fn emuliert einfach die HTTP-Verarbeitung f\u00fcr Tests, was praktisch ist f\u00fcr eine schnelle \u00dcberpr\u00fcfung:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ fn invoke fnexo hellonode      # wir rufen die Funktion hellonode der Anwendung fnexo auf\n\n{\"message\":\"Hallo Welt\"}<\/code><\/pre>\n<p><\/p>\n<p>Um die Funktion direkt aufzurufen, muss die vollst\u00e4ndige URL bekannt sein:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ curl http:\/\/localhost:8080\/t\/fnexo\/hellonode-trigger\n\n{\"message\":\"Hallo Welt\"}<\/code><\/pre>\n<p><\/p>\n<p>Der Fn-Server stellt seine Funktionen \u00fcber Port 8080 bereit, und anscheinend entspricht die URL der Funktion dem Schema <code>t\/app\/function<\/code>, aber nicht vollst\u00e4ndig. \u00dcber HTTP wird die Funktion nicht direkt aufgerufen, sondern \u00fcber einen sogenannten Trigger, der gem\u00e4\u00df seines Namens den Aufruf der Funktion \u201eausl\u00f6st\u201c. Trigger werden in <code>`func.yml<\/code> Projekt definiert:<\/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 des Triggers<\/code><\/pre>\n<p><\/p>\n<p>Wir k\u00f6nnen den Namen des Triggers \u00e4ndern, damit er dem Namen der Funktion entspricht, das vereinfacht alles:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">triggers:\n- name: hellonode-trigger\n  type: http\n  source: \/hellonode    # stimmt mit dem Namen der Funktion \u00fcberein<\/code><\/pre>\n<p><\/p>\n<p>Dann starten wir die Bereitstellung der Funktion erneut und rufen sie \u00fcber den neuen Trigger auf:<\/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\":\"Hallo Welt\"}<\/code><\/pre>\n<p><\/p>\n<p>Alles funktioniert! Jetzt ist es an der Zeit, praktische Experimente durchzuf\u00fchren und unseren FaaS auf dem Server zu ver\u00f6ffentlichen!<\/p>\n<p><\/p>\n<h2 id=\"ustanovka-servisov-besservernyh-funkciy-na-sobstvennoy-infrastrukture\">Installation von Serverless-Funktion-Diensten auf der eigenen Infrastruktur<\/h2>\n<p><\/p>\n<p>Lassen Sie uns schnell eine virtuelle Maschine mit der Exoscale CLI einrichten. Wenn Sie diese noch nicht konfiguriert haben \u2013 k\u00f6nnen Sie unsere <noindex><a rel=\"nofollow\" href=\"https:\/\/community.exoscale.com\/documentation\/tools\/exoscale-command-line-interface\/\">Schnellstartanleitung verwenden<\/a><\/noindex>. Es ist ein gro\u00dfartiges Werkzeug, das Ihre Produktivit\u00e4t weiter steigern wird. <strong>Vergessen Sie nicht, eine Regel zum \u00d6ffnen des Ports 8080 in der Sicherheitsgruppe einzurichten!<\/strong> Die folgenden Befehle starten eine saubere virtuelle Maschine, die bereit ist, unsere Funktionen zu hosten:<\/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>Dann k\u00f6nnen Sie sich per SSH auf die virtuelle Maschine einloggen und den Fn-Server installieren:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ exo ssh fn-server\n\nDie Authentizit\u00e4t des Hosts '185.19.30.175 (185.19.30.175)' kann nicht festgestellt werden.\nECDSA-Schl\u00fcsselfingerabdruck ist SHA256:uaCKRYeX4cvim+Gr8StdPvIQ7eQgPuOKdnj5WI3gI9Q.\nSind Sie sicher, dass Sie mit der Verbindung fortfahren m\u00f6chten (ja\/nein)? ja\nWarnung: Permanently added '185.19.30.175' (ECDSA) to the list of known hosts.\nWillkommen bei Ubuntu 18.04 LTS (GNU\/Linux 4.15.0-20-generic x86_64)<\/code><\/pre>\n<p><\/p>\n<p>Dann installieren wir Docker und den Fn-Server ebenso, wie wir es bereits auf der lokalen Maschine gemacht haben, und starten den Server:<\/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 ist bereit, Funktionen zu empfangen! Um Funktionen auf den entfernten Server zu \u00fcbertragen, verwenden wir den Befehl <code>deploy<\/code> von einem lokalen Computer aus und lassen das Flag weg <code>--local<\/code>.<\/p>\n<p><\/p>\n<p>Dar\u00fcber hinaus muss Fn den Standort des Fn-Servers und des Docker-Registries angeben. Diese Parameter k\u00f6nnen \u00fcber Umgebungsvariablen eingestellt werden <code>FN_API_URL<\/code> und <code>FN_REGISTRY<\/code> entsprechend, aber es wird auch eine bequemere M\u00f6glichkeit angeboten, um die Erstellung und Verwaltung von Konfigurationen f\u00fcr die Bereitstellung zu erleichtern.<\/p>\n<p><\/p>\n<p>In den Begriffen von Fn wird die Konfiguration f\u00fcr die Bereitstellung als <code>context<\/code>. Der folgende Befehl erstellt den 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>Sie k\u00f6nnen die verf\u00fcgbaren Kontexte wie folgt einsehen:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ fn list contexts\n\nAKTUELLER NAME      ANBIETER      API URL                      REGISTRIERUNG\n    default       default       http:\/\/localhost:8080\/\n    exoscale      default       http:\/\/185.19.30.175:8080    nfrankel\n<\/code><\/pre>\n<p><\/p>\n<p>Und um zum gerade erstellten Kontext zu wechseln, so:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\"> $ fn use context exoscale\n\n Jetzt wird der Kontext verwendet: exoscale<\/code><\/pre>\n<p><\/p>\n<p>Ab diesem Punkt wird die Fn-Deployment-Funktion Docker-Images mithilfe des gew\u00e4hlten Kontos auf DockerHub laden (in meinem Fall \u2014 <code>nfrankel<\/code>), bevor es den entfernten Server (in diesem Beispiel \u2014 <code>http:\/\/185.19.30.175:8080<\/code>) \u00fcber den Standort und die Version des letzten Images informiert, das Ihre Funktion enth\u00e4lt.<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ fn deploy --app fnexo .   # wird auf der lokalen Maschine aus dem Verzeichnis hellonode ausgef\u00fchrt\n\nFunktion wird bereitgestellt unter: \/.\nHelleonode wird an die App: fnexo bereitgestellt\nAuf Version 0.0.5 erh\u00f6ht\nBild nfrankel\/hellonode:0.0.5 wird erstellt.<\/code><\/pre>\n<p><\/p>\n<p>Schlie\u00dflich:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ curl http:\/\/185.19.30.175:8080\/t\/fnexo\/hellonode\n\n{\"message\":\"Hallo Welt\"}<\/code><\/pre>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Wir bauen unser eigenes serverless auf Basis von Fn\" src=\"\/wp-content\/uploads\/2019\/11\/51a7b88cd6bf4953740cfac937b0acc2.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<em>Der Lebenszyklus einer Funktion in serverlosen Berechnungen basierend auf Fn<\/em><\/p>\n<p><\/p>\n<h2 id=\"preimuschestva-besservernyh-vychisleniy-na-svoih-moschnostyah\">Vorteile von serverlosen Berechnungen auf Ihrem eigenen Infrastruktur<\/h2>\n<p><\/p>\n<p>Serverlose Berechnungen sind eine bequeme L\u00f6sung f\u00fcr die schnelle Einf\u00fchrung unabh\u00e4ngiger Teile einer Anwendung, die mit komplexeren Anwendungen oder Mikrodiensten interagieren.<\/p>\n<p><\/p>\n<p>Oft ist dies mit versteckten Kosten aufgrund der Bindung an einen bestimmten Anbieter verbunden, was, abh\u00e4ngig vom spezifischen Anwendungsfall und Volumen, zu h\u00f6heren Kosten und verminderten Flexibilit\u00e4t in der Zukunft f\u00fchren kann.<\/p>\n<p><\/p>\n<p>Multicloud- und hybride Cloud-Architekturen leiden ebenfalls in solchen F\u00e4llen, da man leicht in eine Situation geraten kann, in der man serverlose Berechnungen nutzen m\u00f6chte, dies aber aufgrund von Unternehmensrichtlinien nicht m\u00f6glich ist.<\/p>\n<p><\/p>\n<p>Fn ist einfach zu handhaben und kann nahezu die gleiche FaaS-Oberfl\u00e4che bieten, mit minimalen Kosten. Es befreit von jeglicher Anbieterbindung und kann lokal oder bei einem beliebigen Cloud-Anbieter Ihrer Wahl installiert werden. Sie haben auch die Freiheit, die Programmiersprache zu w\u00e4hlen.<\/p>\n<p><\/p>\n<p>Der Artikel behandelt nur die Grundlagen von Fn, aber das Erstellen Ihrer eigenen Laufzeitumgebung ist einfach, und Sie k\u00f6nnen die gesamte Architektur mit einem Fn-Load-Balancer erweitern oder Fn hinter einem Proxy zur Sicherung betreiben.<\/p>\n<p>Quelle: <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.1.1 - 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\/de\/blog\/administrirovanie\/stroim-sobstvennyj-serverless-na-osnove-fn\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"de_DE\" \/>\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\/de\/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\udd47Wir bauen unser eigenes serverloses System auf Fn | ProHoster","description":"","canonical_url":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/stroim-sobstvennyj-serverless-na-osnove-fn","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"de_DE","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\/de\/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\/de\/wp-json\/wp\/v2\/posts\/52562","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/comments?post=52562"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts\/52562\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/media?parent=52562"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/categories?post=52562"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/tags?post=52562"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}