{"id":33935,"date":"2019-10-31T21:55:27","date_gmt":"2019-10-31T18:55:27","guid":{"rendered":"https:\/\/prohoster.info\/blog\/serverless-po-stoechkam\/"},"modified":"2019-10-31T21:55:27","modified_gmt":"2019-10-31T18:55:27","slug":"serverless-po-stoechkam","status":"publish","type":"post","link":"https:\/\/prohoster.info\/en\/blog\/administrirovanie\/serverless-po-stoechkam","title":{"rendered":"Serverless in racks","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Serverless in racks\" src=\"\/wp-content\/uploads\/2019\/05\/cea6dc9da0a3a1b0241246cdf3eba900.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nServerless is not about the physical absence of servers. It is not a 'killer' of containers, nor a fleeting trend. It is a new approach to building systems in the cloud. In today's article, we will touch on the architecture of Serverless applications, look at the role of the Serverless service provider, and open-source projects. Finally, we will discuss the issues of applying Serverless.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nI want to write the backend of an application (even an online store). It could be a chat, a content publishing service, or a load balancer. In any case, there will be a lot of headaches: I'll have to prepare the infrastructure, define the application's dependencies, and think about the host's operating system. Then I\u2019ll need to update small components that do not affect the rest of the monolith. And let's not forget about scaling under load.<\/p>\n<p>What if we take ephemeral containers, in which the required dependencies are already preinstalled, and the containers are isolated from each other and the host OS? We can break the monolith into microservices, each of which can be updated and scaled independently of the others. By placing the code in such a container, I will be able to run it on any infrastructure. That's much better. <\/p>\n<p>But what if I don't want to configure containers? I don\u2019t want to think about scaling the application. I don\u2019t want to pay for idle running containers when the load on the service is minimal. I just want to write code. To focus on business logic and release products to market at lightning speed. <\/p>\n<p>Such thoughts led me to serverless computing. Serverless in this case means <em>not the physical absence of servers, but the absence of headaches over infrastructure management.<\/em><\/p>\n<p>The idea is that the application's logic is broken down into independent functions. They have an event-driven structure. Each function performs a single 'micro-task'. All that is required from the developer is to upload the functions to the console provided by the cloud provider and link them to event sources. The code will be executed on demand in an automatically prepared container, and I will only pay for execution time. <\/p>\n<p>Let's figure out what the application development process will look like now.<\/p>\n<h2>From the developer's perspective<\/h2>\n<p>\nEarlier, we started talking about an application for an online store. In the traditional approach, the core logic of the system is handled by a monolithic application. And the server with the application is running constantly, even when there is no load.<\/p>\n<p><strong>To transition to serverless, we break the application down into micro-tasks.<\/strong> For each of them, we write its own function. These functions are independent of each other and do not store any state information (stateless). They can even be written in different languages. If one of them \u201cfails,\u201d the entire application will not stop. The architecture of the application will look like this:<\/p>\n<p><img decoding=\"async\" alt=\"Serverless in racks\" src=\"\/wp-content\/uploads\/2019\/05\/f62c5c08bbf587766198dbb807123273.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nSplitting into functions in Serverless is similar to working with microservices. However, a microservice can perform multiple tasks, while a function ideally should perform only one. Let\u2019s imagine we have a task to collect statistics and display them upon user request. In a microservice approach, this task is handled by one service with two entry points: one for writing and one for reading. In serverless computing, these will be two separate, unconnected functions. The developer saves computational resources, for example, if statistics are updated more frequently than they are retrieved. <\/p>\n<p>Serverless functions must execute within a short time frame (timeout) defined by the service provider. For example, AWS has a timeout of 15 minutes. This means that long-lived functions will need to be modified to meet these requirements \u2014 this is what differentiates Serverless from other popular technologies today (containers and Platform as a Service).<\/p>\n<p><strong>We assign an event to each function.<\/strong> An event is a trigger for an action:<\/p>\n<p><strong>Event<\/strong><br \/>\n<strong>The action performed by the function<\/strong><\/p>\n<p>An image of a product has been uploaded to the storage<br \/>\nCompress the image and upload it to the directory<\/p>\n<p>The address of the physical store has been updated in the database<br \/>\nLoad the new location into the maps<\/p>\n<p>The client pays for the product<br \/>\nInitiate the payment processing<\/p>\n<p>Events can consist of HTTP requests, streaming data, message queues, and so forth. The sources of events are data changes or new data appearances. Additionally, functions can be triggered by a timer.<\/p>\n<p>The architecture has been developed, and the application is almost serverless. Next, we move on to the service provider.<\/p>\n<h2>From the service provider's side<\/h2>\n<p>\nTypically, serverless computing is offered by cloud service providers. They are called differently: Azure Functions, AWS Lambda, Google Cloud Functions, IBM Cloud Functions. <\/p>\n<p>We will use the service through the provider's console or personal account. The function code can be uploaded in one of the following ways:<\/p>\n<ul>\n<li>write the code in built-in editors via the web console,<\/li>\n<li>upload an archive with the code,<\/li>\n<li>work with public or private git repositories.<\/li>\n<\/ul>\n<p>\nHere, we configure the events that trigger the function. Different providers may have different sets of events.<\/p>\n<p><img decoding=\"async\" alt=\"Serverless in racks\" src=\"\/wp-content\/uploads\/2019\/05\/98676fa23a9911aae5758ecdb2cd9a03.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>The provider has built and automated a Function as a Service (FaaS) system on its infrastructure:<\/p>\n<ol>\n<li>The function code is stored on the provider's side.<\/li>\n<li>When an event occurs, containers with a prepared environment are automatically deployed on the server. Each instance of the function has its own isolated container.<\/li>\n<li>From the storage, the function is sent to the container, executed, and returns the result.<\/li>\n<li>As the number of parallel events increases, so does the number of containers. The system automatically scales. If users do not call the function, it will be inactive.<\/li>\n<li>The provider sets the idle time for containers: if functions do not appear in the container within this time, it is destroyed.<\/li>\n<\/ol>\n<p>\nThus, we get Serverless 'out of the box.' We will pay for the service on a pay-as-you-go model, only for the functions that are used and only for the time they were used.<\/p>\n<p>To familiarize developers with the service, providers offer up to 12 months of free testing, but limit the total computation time, number of requests per month, funds, or consumed resources.<\/p>\n<p>The main advantage of working with a provider is the ability not to worry about infrastructure (servers, virtual machines, containers). For its part, the provider can implement FaaS using either its own developments or open-source tools. We'll discuss those next.<\/p>\n<h2>From the open source side<\/h2>\n<p>\nIn the last couple of years, the open-source community has been actively working on Serverless tools. Major market players are contributing to the development of serverless platforms:<\/p>\n<ul>\n<li><strong>Google<\/strong> offers developers its open-source tool \u2015 <noindex><a rel=\"nofollow\" href=\"https:\/\/cloud.google.com\/knative\/\">Knative<\/a><\/noindex>. Developed with the participation of IBM, RedHat, Pivotal, and SAP;<\/li>\n<li><strong>IBM<\/strong> worked on the Serverless platform <noindex><a rel=\"nofollow\" href=\"https:\/\/openwhisk.apache.org\/\">OpenWhisk<\/a><\/noindex>, which later became an Apache Foundation project;<\/li>\n<li><strong>by Microsoft<\/strong> partially opened the code of the platform <noindex><a rel=\"nofollow\" href=\"https:\/\/azure.microsoft.com\/en-us\/services\/functions\/\">Azure Functions<\/a><\/noindex>.<\/li>\n<\/ul>\n<p>\nDevelopment is also ongoing toward serverless frameworks. <noindex><a rel=\"nofollow\" href=\"https:\/\/kubeless.io\/\">Kubeless<\/a><\/noindex> and <noindex><a rel=\"nofollow\" href=\"https:\/\/fission.io\/\">Fission<\/a><\/noindex> is deployed within pre-prepared Kubernetes clusters, <noindex><a rel=\"nofollow\" href=\"https:\/\/www.openfaas.com\/\">OpenFaaS<\/a><\/noindex> works with both Kubernetes and Docker Swarm. The framework acts as a kind of controller \u2014 it prepares the runtime environment inside the cluster on request, then executes the function there.<\/p>\n<p>Frameworks allow for customizing tools to fit specific needs. For instance, in Kubeless, the developer can configure the function execution timeout (the default value is 180 seconds). Fission attempts to solve the cold start problem by keeping some containers running at all times (though this incurs costs for resource idle time). OpenFaaS offers a range of triggers to choose from: HTTP, Kafka, Redis, MQTT, Cron, AWS SQS, NATs, and others.<\/p>\n<p>Getting started instructions can be found in the official framework documentation. Working with them requires a bit more skill than with a provider \u2014 at a minimum, the ability to launch a Kubernetes cluster via the CLI. At most, you might need to integrate other open-source tools (such as a queue manager like Kafka).<\/p>\n<p>Regardless of how we work with Serverless \u2014 through a provider or with open-source solutions \u2014 we will encounter a number of advantages and disadvantages of the Serverless approach.<\/p>\n<h2>From the perspective of advantages and disadvantages<\/h2>\n<p>\nServerless builds upon the ideas of container infrastructure and microservices architecture, enabling teams to work in a polyglot mode without being tied to a single platform. System construction is simplified, and fixing errors becomes easier. The microservices architecture allows for adding new functionalities to the system much faster than in the case of a monolithic application.<\/p>\n<p><strong>Serverless further reduces development time,<\/strong> allowing the developer to focus solely on the business logic of the application and writing code. As a result, the time to market for developments is shortened.<\/p>\n<p><strong>As a bonus, we get automatic scaling under load,<\/strong> and we only pay for the resources we use and only when they are being used.<\/p>\n<p>Like any technology, Serverless has its drawbacks.<\/p>\n<p><em>For instance, one drawback could be the cold start time (averaging up to 1 second for languages like JavaScript, Python, Go, Java, Ruby).<\/em><\/p>\n<p>On one hand, the cold start time actually depends on many variables: the language in which the function is written, the number of libraries, the amount of code, and interactions with additional resources (like databases or authentication servers). Since the developer controls these variables, they can reduce the start time. However, on the other hand, the developer cannot manage the time it takes to launch a container\u2014this is entirely dependent on the provider.<\/p>\n<p>A cold start can turn into a warm start when a function reuses a container that was previously launched by another event. This situation will occur in three cases:<\/p>\n<ul>\n<li>if clients frequently use the service and the number of requests to the function increases;<\/li>\n<li>if the provider, platform, or framework allows keeping some containers running at all times;<\/li>\n<li>if the developer triggers functions on a timer (for example, every 3 minutes).<\/li>\n<\/ul>\n<p>\nFor many applications, a cold start is not an issue. One must consider the type and tasks of the service. A one-second start delay is not always critical for a business application, but it can be critical for medical services. In this case, the serverless approach may no longer be suitable.<\/p>\n<p><em>The next downside of serverless is the short lifespan of functions (the timeout within which the function must complete).<\/em><\/p>\n<p>However, if it's necessary to deal with long-living tasks, a hybrid architecture can be used\u2014to combine serverless with another technology.<\/p>\n<p><em>Not all systems will be able to operate under the serverless model.<\/em><\/p>\n<p>Some applications will still need to retain data and state during execution. Some architectures will remain monolithic, and some functions will be long-living. However, just as cloud technologies and then containers once were, serverless is a technology with a great future.<\/p>\n<p>In this regard, I would like to smoothly transition to the issue of applying the serverless approach.<\/p>\n<h2>From the perspective of application<\/h2>\n<p>\nIn 2018, the percentage of serverless usage <noindex><a rel=\"nofollow\" href=\"https:\/\/media.flexera.com\/documents\/rightscale-2019-state-of-the-cloud-report-from-flexera.pdf\">increased by one and a half times<\/a><\/noindex>. Among the companies that have already implemented the technology into their services are market giants like Twitter, PayPal, Netflix, T-Mobile, Coca-Cola. It should be understood that serverless is not a panacea, but rather a tool for solving a specific range of tasks:<\/p>\n<ul>\n<li><strong>To reduce resource idle time.<\/strong> There's no need to keep a virtual machine running for services with little traffic.<\/li>\n<li><strong>Process data \"on the fly.\"<\/strong> Compress images, remove backgrounds, change video encoding, work with IoT sensors, and perform mathematical operations.\n<\/li>\n<li><strong>\"Glue\" other services together.<\/strong> A Git repository with internal programs, a Slack chatbot with Jira and a calendar.<\/li>\n<li><strong>Balance the load.<\/strong> Let's pause here for a detailed explanation.<\/li>\n<\/ul>\n<p>\nSuppose there is a service that receives 50 visitors. A virtual machine with weak hardware is set up for it. Periodically, the load on the service increases significantly. In that case, the weak hardware struggles to keep up.<\/p>\n<p>A load balancer can be integrated into the system to distribute the load across, say, three virtual machines. At this stage, we cannot accurately predict the load, so we keep some resources running \"in reserve.\" And we end up overpaying for idle time. <\/p>\n<p>In such situations, we can optimize the system using a hybrid approach: keeping one virtual machine behind the load balancer and linking to a Serverless Endpoint with functions. If the load exceeds a threshold, the balancer starts function instances that handle part of the request processing.<\/p>\n<p><img decoding=\"async\" alt=\"Serverless in racks\" src=\"\/wp-content\/uploads\/2019\/05\/79262c19faba29a4639a05e3097f7914.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nThus, Serverless can be used where processing a large number of requests is infrequent but intensive. In this case, running several functions for 15 minutes is more cost-effective than keeping a virtual machine or server running all the time.<\/p>\n<p>Despite all the advantages of serverless computing, before implementation, it's essential to assess the application's logic and understand which tasks Serverless can address in each specific case. <\/p>\n<h2>Serverless and Selectel<\/h2>\n<p>\nAt Selectel, we have already <noindex><a rel=\"nofollow\" href=\"https:\/\/kb.selectel.ru\/42078178.html?utm_source=habr.com&amp;amp;utm_medium=referral&amp;amp;utm_campaign=Functions_Serverless_Article_170519\">simplified working with Kubernetes<\/a><\/noindex> through our control panel. Now we are building our own FaaS platform. We want developers to solve their tasks using Serverless through an easy-to-use, flexible interface.<\/p>\n<p>If you have ideas about what the ideal FaaS platform should look like and how you want to use Serverless in your projects, please share them in the comments. We will take your suggestions into account during the platform's development.<br \/>\n\u00a0<br \/>\nMaterials used in this article:<\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.rightscale.com\/lp\/state-of-the-cloud\">The percentage of Serverless usage has increased by one and a half times (full report from RightScale)<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/mikhail.io\/serverless\/coldstarts\/aws\/\">How cold start time depends on the application language<\/a><\/noindex><\/li>\n<\/ul>\n<p>Source: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/selectel\/blog\/452266\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>Serverless \u2015 \u044d\u0442\u043e \u043d\u0435 \u043f\u0440\u043e \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432. \u042d\u0442\u043e \u043d\u0435 \u00ab\u0443\u0431\u0438\u0439\u0446\u0430\u00bb \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432 \u0438 \u043d\u0435 \u043c\u0438\u043c\u043e\u043b\u0435\u0442\u043d\u044b\u0439 \u0442\u0440\u0435\u043d\u0434. \u042d\u0442\u043e \u043d\u043e\u0432\u044b\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u043a \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044e \u0441\u0438\u0441\u0442\u0435\u043c \u0432 \u043e\u0431\u043b\u0430\u043a\u0435. \u0412 \u0441\u0435\u0433\u043e\u0434\u043d\u044f\u0448\u043d\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043a\u043e\u0441\u043d\u0435\u043c\u0441\u044f \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b Serverless-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439, \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u043a\u0430\u043a\u0443\u044e \u0440\u043e\u043b\u044c \u0438\u0433\u0440\u0430\u0435\u0442 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440 Serverless-\u0443\u0441\u043b\u0443\u0433\u0438 \u0438 open-source \u043f\u0440\u043e\u0435\u043a\u0442\u044b. \u0412 \u043a\u043e\u043d\u0446\u0435 \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043c \u043e \u0432\u043e\u043f\u0440\u043e\u0441\u0430\u0445 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044f Serverless. \u042f \u0445\u043e\u0447\u0443 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u0435\u0440\u0432\u0435\u0440\u043d\u0443\u044e \u0447\u0430\u0441\u0442\u044c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f (\u0434\u0430 \u0445\u043e\u0442\u044c \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442-\u043c\u0430\u0433\u0430\u0437\u0438\u043d\u0430). [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":25594,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-33935","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.2 - aioseo.com -->\n\t<meta name=\"description\" content=\"Serverless \u2015 \u044d\u0442\u043e \u043d\u0435 \u043f\u0440\u043e \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432.\" \/>\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\/en\/blog\/administrirovanie\/serverless-po-stoechkam\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2\" \/>\n\t\t<meta property=\"og:locale\" content=\"en_US\" \/>\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\udd47Serverless \u043f\u043e \u0441\u0442\u043e\u0435\u0447\u043a\u0430\u043c | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"Serverless \u2015 \u044d\u0442\u043e \u043d\u0435 \u043f\u0440\u043e \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/en\/blog\/administrirovanie\/serverless-po-stoechkam\" \/>\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-10-31T18:55:27+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T18:55:27+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\udd47Serverless by steps | ProHoster","description":"Serverless is not about the physical absence of servers.","canonical_url":"https:\/\/prohoster.info\/en\/blog\/administrirovanie\/serverless-po-stoechkam","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"en_US","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\udd47Serverless \u043f\u043e \u0441\u0442\u043e\u0435\u0447\u043a\u0430\u043c | ProHoster","og:description":"Serverless \u2015 \u044d\u0442\u043e \u043d\u0435 \u043f\u0440\u043e \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432.","og:url":"https:\/\/prohoster.info\/en\/blog\/administrirovanie\/serverless-po-stoechkam","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-10-31T18:55:27+00:00","article:modified_time":"2019-10-31T18:55:27+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"33935","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-21 17:17:19","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 02:31:21","updated":"2026-01-21 17:17:19","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/posts\/33935","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/comments?post=33935"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/posts\/33935\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/media\/25594"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/media?parent=33935"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/categories?post=33935"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/tags?post=33935"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}