{"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\/et\/blog\/administrirovanie\/stroim-sobstvennyj-serverless-na-osnove-fn","title":{"rendered":"We are building our own serverless based on Fn","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"We are building our own serverless based on 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\">Serveriteta arvutus<\/a><\/noindex> \u2014 \u00fcks k\u00f5ige silmatorkavamaid suundi pilveteenustes. Peamine p\u00f5him\u00f5te on see, et infrastruktuuri eest hoolitseb mitte DevOps, vaid teenusepakkuja. Ressursside automaatne skaleerimine kohandub koormusega ja omab k\u00f5rgendatud muutmiskiirus.<\/p>\n<p><\/p>\n<p>\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; (FaaS).<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>Ajalooliselt oli esimene pilveteenuste pakkuja, kes pakkus FaaS-i AWS Lambda kaudu, Amazon, kust see nimetus p\u00e4rineb. Teised pilveteenuste pakkujad pakuvad ka analooge:<\/p>\n<p><\/p>\n<ul>\n<li>Google'i Cloud Functions<\/li>\n<li>Microsofti Azure Functions<\/li>\n<\/ul>\n<p><\/p>\n<p>K\u00f5ik need ettev\u00f5tted pakuvad serveriteta arvutust, automaatset skaleerimist ja tasu ainult tegelikult kasutatud ressursside eest, kuid nad seovad kliente oma omandi\u00f5igusega tootele. Siiski on olemas tasuta avatud l\u00e4htekoodiga alternatiive serveriteta arvutuse korraldamiseks. Tasub m\u00e4rkida:<\/p>\n<p><\/p>\n<ul>\n<li>Platvorm <noindex><a rel=\"nofollow\" href=\"https:\/\/openwhisk.apache.org\/\">Apache OpenWhisk<\/a><\/noindex>, mida arendab IBM-i inkubaator,<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/cloud.spring.io\/spring-cloud-function\/\">Spring Cloud Functions<\/a><\/noindex>, osana varsin rikkaasta Spring Framework -ekosysteemist\u00e4, jota voidaan k\u00e4ytt\u00e4\u00e4 my\u00f6s AWS Lambdan, Azure Functionsin ja OpenWhiskin julkisivuna,<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/fnproject\">Fn-projekti<\/a><\/noindex>, jota tukee Oracle.<\/li>\n<\/ul>\n<p><\/p>\n<p>Kaikki ne ovat t\u00e4ysin riippumattomia pilvist\u00e4, ts. ne voidaan asentaa mihin tahansa pilveen, mukaan lukien oma, julkinen tai yksityinen, ja tietenkin Exoscaleen.<\/p>\n<p><\/p>\n<h2 id=\"kak-proekt-fn-ustroen\">Miten Fn-projekti toimii<\/h2>\n<p><\/p>\n<p>Fn perustuu t\u00e4ysin Dockeriin ja koostuu kahdesta p\u00e4\u00e4komponentista:<\/p>\n<p><\/p>\n<ul>\n<li>CLI-ohjelmasta, joka on tarkoitettu hallitsemaan kaikkia Fn-infrastruktuurin n\u00e4k\u00f6kohtia ja vuorovaikutusta Fn-palvelimen kanssa,<\/li>\n<li>Itse Fn-palvelin, tavallinen sovellus, joka on pakattu Docker-konttiin.<\/li>\n<\/ul>\n<p><\/p>\n<p>Fn:ss\u00e4 k\u00e4ytt\u00f6\u00f6n otetut funktiot suoritetaan my\u00f6s erillisiss\u00e4 konteissa, mik\u00e4 mahdollistaa useiden ohjelmointikielten k\u00e4yt\u00f6n, esimerkiksi\u2026 Clojure!<\/p>\n<p><\/p>\n<p>Funktioiden argumentit v\u00e4litet\u00e4\u00e4n standardiin sy\u00f6tteeseen (STDIN), ja tulokset kirjoitetaan standardiin ulostuloon (STDOUT). Jos argumentit tai palautusarvot eiv\u00e4t ole yksinkertaisia arvoja (esim. JSON-objekti) \u2014 ne voidaan muuttaa Fn:n tarjoaman funktioiden kehityspaketin (FDK) avulla.<\/p>\n<p><\/p>\n<p>Mugavuse huvides pakuvad sisseehitatud \u0161abloonide komplekti, mis lihtsustavad FaaS-i k\u00e4ivitamist mitmesugustes keeltes ja nende versioonides (Go, erinevad Java versioonid, Python jne).<\/p>\n<p><\/p>\n<p>FaaS-i loomine on lihtne, j\u00e4rgides seda skeemi:<\/p>\n<p><\/p>\n<ul>\n<li>K\u00e4ivitame funktsiooni CLI Fn abil: luuakse rakenduse konfigureerimisfail Fn jaoks, mis p\u00f5hineb valitud \u0161abloonil.<\/li>\n<li>T\u00f5ukame oma funktsiooni, samuti CLI Fn abil: konteineripilt paigutatakse m\u00f5nda registrisse, p\u00e4rast mida teavitatakse serverit selle olemasolust ja asukohast.<\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"We are building our own serverless based on Fn\" src=\"\/wp-content\/uploads\/2019\/11\/5add8b58c80e976cd61a156fdd0fba11.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<em>Fn-s funktsioonide kohaletoimetamise p\u00f5him\u00f5te<\/em><\/p>\n<p><\/p>\n<h2 id=\"lokalnaya-ustanovka-i-testirovanie-besservernyh-funkciy\">Kohalik installatsioon ja serverivabade funktsioonide testimine<\/h2>\n<p><\/p>\n<p>Alustame Fn-i paigaldamist kohalikule masinale. Esiteks installime Dockerit, nagu n\u00f5uab Fn. Eeldatakse, et kasutame 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>V\u00f5i kasutage pakihaldurit\/ Dockerit vastavalt oma s\u00fcsteemile. seej\u00e4rel saab minna otse Fn CLI installatsiooni juurde. N\u00e4iteks, kasutades curl-i:<\/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>Kui t\u00f6\u00f6tate OSX-is, kus on installitud Homebrew, saate minna teise teed:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ brew install fn\n\n==&gt; Laadimine https:\/\/homebrew.bintray.com\/bottles\/fn-0.5.8.high_sierra.bottle.tar.gz\n==&gt; Laadimine aadressilt 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 faili, 16.7MB<\/code><\/pre>\n<p><\/p>\n<p>N\u00fc\u00fcd on k\u00f5ik valmis meie funktsiooni esialgseks seadistamiseks CLI abil. Lihtsuse huvides kasutame sissehitatud keskkonda, n\u00e4iteks Node:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ fn init --runtime node --trigger http hellonode\n\nFunktsiooni loomine aadressil: \/hellonode\nFunktsiooni mall genereeritud.\nfunc.yaml loodud.<\/code><\/pre>\n<p><\/p>\n<p>Loodud on uus kataloog <code>hellonode<\/code> meie Fn funktsiooni edasise arenduse jaoks koos m\u00f5ningate p\u00f5hikonfiguratsioonifailidega. Uues loodud kataloogis saate luua oma rakenduse, j\u00e4rgides valitud keele v\u00f5i keskkonna standardeid:<\/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 loob projekti algstruktuuri, genereerib faili <code>func.yaml<\/code>, mis sisaldab Fn-i jaoks vajalikke seadistusi ja seab \u00fcles koodimalli, kasutades valitud keelt.<\/p>\n<p><\/p>\n<p>Node'i keskkonna korral t\u00e4hendab see:<\/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>N\u00fc\u00fcd kontrollime kiiresti meie funktsiooni kohalikult, et n\u00e4ha, kuidas k\u00f5ik t\u00f6\u00f6tab.<\/p>\n<p><\/p>\n<p>Esiteks k\u00e4ivitame Fn serveri. Nagu juba mainitud, on Fn server Docker konteiner, seega p\u00e4rast k\u00e4ivitamist t\u00f5mbab ta pildi Docker registrist.<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ fn start -d                    # k\u00e4ivita kohalik server taustal\n\nKohalikult ei leitud pilti 'fnproject\/fnserver:latest'\nlatest: T\u00f5mbamine fnproject\/fnserver'ist\nff3a5c916c92: T\u00f5mbamine l\u00f5petatud\n1a649ea86bca: T\u00f5mbamine l\u00f5petatud\nce35f4d5f86a: T\u00f5mbamine l\u00f5petatud\n\n...\n\nOlekuraport: Uuem pilt on t\u00f5mmatud fnproject\/fnserver:latest\n668ce9ac0ed8d7cd59da49228bda62464e01bff2c0c60079542d24ac6070f8e5<\/code><\/pre>\n<p><\/p>\n<p>\u0414\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043d\u0430\u0448\u0435\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0435\u0435 \u043d\u0430\u0434\u043e &#171;\u0432\u044b\u043a\u0430\u0442\u0438\u0442\u044c&#187;. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f <code>rakenduse nimi<\/code>: Fn-s peavad k\u00f5ik rakendused olema m\u00e4\u00e4ratud nimede ruumide kaudu seotud funktsioonide jaoks.<\/p>\n<p><\/p>\n<p>Fn CLI otsib faili <code>func.yaml<\/code> praeguses kataloogis, mida rakendatakse funktsiooni seadistamiseks. Seega peame esmalt minema oma katalooge. <code>hellonode<\/code>.<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ cd hellonode\n$ fn deploy --app fnexo --local  # juurutame funktsiooni kohaliku nimega fnexo.\n                                 # kohalik valik ei lae pilti kaugregistrisse,\n                                 # k\u00e4ivitab selle otse\n\nJuurutamine hellonode rakendusele: fnexo\nT\u00f5stetud versiooniks 0.0.2\nKuvatakse pilt nfrankel\/hellonode:0.0.3 .\nKasutades hellonode funktsiooni pilti nfrankel\/hellonode:0.0.3...\nRakendus fnexo on edukalt loodud\nFunktsioon hellonode koos nfrankel\/hellonode:0.0.3 on edukalt loodud\nK\u00e4ivitatud on hellonode-trigger k\u00e4ivitus<\/code><\/pre>\n<p><\/p>\n<p>Nagu n\u00e4ha k\u00e4su v\u00e4ljundist, luuakse uus Docker konteineri pilt, mis sisaldab meie funktsiooni. Funktsioon on kutsumiseks valmis, ja meil on kaks v\u00f5imalust seda teha:<\/p>\n<p><\/p>\n<ul>\n<li>kasutades k\u00e4sku Fn <code>invoke<\/code><\/li>\n<li>kutsudes otse <code>http<\/code><\/li>\n<\/ul>\n<p><\/p>\n<p>Kutse <code>invoke<\/code> Fn lihtsalt simuleerib HTTP t\u00f6\u00f6tlust testimiseks, mis on kiire kontrolli jaoks mugav:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ fn invoke fnexo hellonode      # kutsume v\u00e4lja hellonode funktsiooni rakenduses fnexo\n\n{\"message\":\"Hello World\"}<\/code><\/pre>\n<p><\/p>\n<p>Funktsiooni otse kutsumiseks tuleb teada t\u00e4is-URLi:<\/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 server pakub oma funktsioone l\u00e4bi sadama 8080, ja tundub, et funktsiooni URL vastab skeemile <code>t\/app\/function<\/code>, \u043d\u043e \u043d\u0435 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e. \u0427\u0435\u0440\u0435\u0437 HTTP \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0435 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e, \u0430 \u0447\u0435\u0440\u0435\u0437 \u0442\u0430\u043a \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u044b\u0439 trigger, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u043e\u0433\u043b\u0430\u0441\u043d\u043e \u0441\u0432\u043e\u0435\u043c\u0443 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044e &#171;\u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442&#187; \u0432\u044b\u0437\u043e\u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0438. \u0422\u0440\u0438\u0433\u0433\u0435\u0440\u044b \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u044e\u0442\u0441\u044f \u0432 <code>`func.yml<\/code> projekti:<\/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    # triggeri URL<\/code><\/pre>\n<p><\/p>\n<p>Saame muuta triggeri nime nii, et see vastaks funktsiooni nimele, see lihtsustab k\u00f5ike:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">triggers:\n- name: hellonode-trigger\n  type: http\n  source: \/hellonode    # vastab funktsiooni nimele<\/code><\/pre>\n<p><\/p>\n<p>Seej\u00e4rel k\u00e4ivitame funktsiooni tarnimise uuesti ja kutsume selle v\u00e4lja uuest triggerist:<\/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>K\u00f5ik t\u00f6\u00f6tab! On \u00f5ige aeg liikuda praktiliste katsete juurde ja avaldada meie FaaS serveris!<\/p>\n<p><\/p>\n<h2 id=\"ustanovka-servisov-besservernyh-funkciy-na-sobstvennoy-infrastrukture\">Serverivabade funktsioonide teenuste paigaldamine oma infrastruktuurile<\/h2>\n<p><\/p>\n<p>Korraldame kiiresti virtuaalmasina seadistamise Exoscale CLI abil. Kui te pole seda veel seadistanud \u2014 v\u00f5ite kasutada <noindex><a rel=\"nofollow\" href=\"https:\/\/community.exoscale.com\/documentation\/tools\/exoscale-command-line-interface\/\">meie kiire k\u00e4ivitamise juhend<\/a><\/noindex>. See on suurep\u00e4rane t\u00f6\u00f6riist, mis t\u00f5stab veelgi teie tootlikkust. <strong>\u00c4rge unustage seadistada reeglit portaali 8080 avamiseks Security Group'is!<\/strong> J\u00e4rgmised k\u00e4sud k\u00e4ivitavad puhta virtuaalmasina, mis on valmis meie funktsioonide majutamiseks:<\/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>Seej\u00e4rel saab SSH kaudu virtuaalmasinale siseneda ja installida Fn-i kaugrestori:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ exo ssh fn-server\n\nHosti '185.19.30.175 (185.19.30.175)' autentsust ei saa kindlaks teha.\nECDSA v\u00f5tme s\u00f5rmej\u00e4lg on SHA256:uaCKRYeX4cvim+Gr8StdPvIQ7eQgPuOKdnj5WI3gI9Q.\nKas olete kindel, et soovite j\u00e4tkata \u00fchenduse loomist (jah\/ei)? jah\nHoiatus: '185.19.30.175' (ECDSA) lisati alatiseks tuntud hostide nimekirja.\nTere tulemast Ubuntu 18.04 LTS (GNU\/Linux 4.15.0-20-generic x86_64)<\/code><\/pre>\n<p><\/p>\n<p>Seej\u00e4rel installime Dockeri ja Fn-serveri, nagu on juba tehtud kohalikul masinal, ja k\u00e4ivitame serveri:<\/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 on valmis funktsioonide vastuv\u00f5tmiseks! Funktsioonide suunamiseks kaugrestorisse kasutame k\u00e4sku <code>deploy<\/code> kohalikult arvutilt, j\u00e4ttes v\u00e4lja lipu <code>--local<\/code>.<\/p>\n<p><\/p>\n<p>Lisaks n\u00f5uab Fn, et m\u00e4\u00e4rata Fn-serveri ja Dockeri registri asukoht. Need parameetrid saab seada keskkonnamuutujate kaudu <code>FN_API_URL<\/code> ja <code>FN_REGISTRY<\/code> seega, kuid on pakutud ka mugavamat viisi konfiguratsioonide loomise ja haldamise h\u00f5lpsaks juhtimiseks.<\/p>\n<p><\/p>\n<p>Fn-i m\u00f5istes nimetatakse implementatsiooni konfiguratsiooni <code>context<\/code>. J\u00e4rgmine k\u00e4sk loob konteksti:<\/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>Saate vaadata saadaval olevaid kontekste j\u00e4rgmiselt:<\/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>Ja vahetada just loodud konteksti j\u00e4rgmiselt:<\/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>Alates sellest kohast hakkab Fn-i funktsioonide pakkumine laadima Docker-pilte, kasutades valitud konto DockerHubis (minu puhul \u2014 <code>nfrankel<\/code>), seej\u00e4rel teavitab eemalat serverit (selles n\u00e4ites \u2014 <code>http:\/\/185.19.30.175:8080<\/code>) teie funktsiooni viimasest pildist ja versioonist asukohast.<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ fn deploy --app fnexo .   # t\u00e4idetakse lokaalselt kataloogist hellonode\n\nDeploying function at: \/.\nDeploying hellonode to app: fnexo\nBumped to version 0.0.5\nBuilding image nfrankel\/hellonode:0.0.5 .<\/code><\/pre>\n<p><\/p>\n<p>L\u00f5puks:<\/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=\"We are building our own serverless based on Fn\" src=\"\/wp-content\/uploads\/2019\/11\/51a7b88cd6bf4953740cfac937b0acc2.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<em>Fn-p\u00f5histes serverivabades arvutustes on funktsiooni eluts\u00fckkel<\/em><\/p>\n<p><\/p>\n<h2 id=\"preimuschestva-besservernyh-vychisleniy-na-svoih-moschnostyah\">Serverless-arvutuse eelised oma j\u00f5udluse alusel<\/h2>\n<p><\/p>\n<p>Serverless-arvutused on mugav lahendus rakenduse iseseisvate osade kiireks juurutamiseks, mis suhtlevad keerukamate rakenduste v\u00f5i mikroteenustega.<\/p>\n<p><\/p>\n<p>Sageli on see seotud varjatud kulude probleemiga, mis on seotud valitud teenusepakkujaga, mis s\u00f5ltub konkreetsest kasutusjuhust ja mahust, mis v\u00f5ib tulevikus viia k\u00f5rgemate kulude ja madalama paindlikkuseni.<\/p>\n<p><\/p>\n<p>Multicloud ja h\u00fcbriidpilvaarhitektuurid kannatavad samuti, kuna v\u00f5ib tekkida olukord, kus on soov kasutada serverless-arvutusi, kuid ettev\u00f5tte poliitika t\u00f5ttu ei pruugi see olla v\u00f5imalik.<\/p>\n<p><\/p>\n<p>Fn on piisavalt lihtne kasutada ja v\u00f5ib pakkuda peaaegu sama FaaSi liidest v\u00e4ikeste kuludega. See eemaldab teenusepakkujaga seotud sidemed, kuna saate seda installida kohapealselt v\u00f5i valida endale sobiva pilveteenuse pakkuja. Samuti on olemas vabadus programmeerimiskeele valikul.<\/p>\n<p><\/p>\n<p>Artiklis on tutvustatud ainult Fn p\u00f5hialuseid, kuid oma t\u00e4itmis\u00fcsteemi loomine on piisavalt lihtne ja \u00fcldist arhitektuuri saab laiendada Fn koormuse tasakaalustaja abil v\u00f5i paigutades Fn vahepealseks kaitseks.<\/p>\n<p>Allikas: <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 4.9.10 - aioseo.com -->\n\t<meta name=\"description\" content=\"\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 &quot;\u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043a\u0430\u043a \u0443\u0441\u043b\u0443\u0433\u0430&quot;\" \/>\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\/et\/blog\/administrirovanie\/stroim-sobstvennyj-serverless-na-osnove-fn\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 4.9.10\" \/>\n\t\t<meta property=\"og:locale\" content=\"et_EE\" \/>\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:description\" content=\"\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 &quot;\u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043a\u0430\u043a \u0443\u0441\u043b\u0443\u0433\u0430&quot;\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/et\/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\udd47 Loome oma serverless'i Fn-i p\u00f5hjal | ProHoster","description":"Serverless-arvutamine on \u00fcks k\u00f5ige m\u00e4rgatavamaid suundi pilveteenustes. Selle p\u00f5hiprintsiip on see, et infrastruktuur ei s\u00f5ltu DevOps'ist, vaid teenusepakkujast. Ressursside automaatne skaleerimine kohandub koormusest ja pakub kiiret muutmise kiirus. Teine levinud joon on suund v\u00e4iksemate ja fokuseeritud koodide suunas, mist\u00f5ttu nimetatakse serverless-arvutamist m\u00f5nikord \"funktsioon teenusena\".","canonical_url":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/stroim-sobstvennyj-serverless-na-osnove-fn","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"et_EE","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:description":"\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 &quot;\u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043a\u0430\u043a \u0443\u0441\u043b\u0443\u0433\u0430&quot;","og:url":"https:\/\/prohoster.info\/et\/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"},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/52562","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/comments?post=52562"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/52562\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media?parent=52562"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/categories?post=52562"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/tags?post=52562"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}