{"id":80031,"date":"2020-05-02T13:42:49","date_gmt":"2020-05-02T11:42:49","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/top-fakapov-czian"},"modified":"2020-05-02T13:42:49","modified_gmt":"2020-05-02T11:42:49","slug":"top-fakapov-czian","status":"publish","type":"post","link":"https:\/\/prohoster.info\/en\/blog\/administrirovanie\/top-fakapov-czian","title":{"rendered":"Top Blunders of Cian","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Top Blunders of Cian\" src=\"\/wp-content\/uploads\/2020\/05\/61cf8d25f1f3e858a3b9541cb026cf3c.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nHello everyone!\u00a0<\/p>\n<p>My name is Nikita, and I am the team lead for the engineers at Cian. One of my responsibilities in the company is to reduce the number of infrastructure-related incidents in production to zero.<br \/>\nWhat follows has caused us a lot of pain, and the aim of this article is to prevent others from repeating our mistakes or at least minimize their impact.\u00a0<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h3>Preface<\/h3>\n<p>\nA long time ago, when Cian was made up of monoliths, with no hints of microservices, we measured resource availability by checking 3-5 pages.\u00a0<\/p>\n<p>If they respond \u2014 everything is fine; if they don\u2019t respond for a long time \u2014 it\u2019s an alert. How long they must be down to be considered an incident was determined by people in meetings. The engineering team was always involved in investigating incidents. Once the investigation was complete, we wrote a postmortem \u2014 a kind of report sent via email in the format: what happened, how long it lasted, what we did at the time, and what we will do in the future.\u00a0<\/p>\n<h3>Key site pages or how we understand when we hit rock bottom<\/h3>\n<p>\u00a0<br \/>\nTo better understand the priority of an error, we identified the most critical pages for business functionality on the site. We count the number of successful\/unsuccessful requests and timeouts for these pages. This allows us to measure uptime.\u00a0<\/p>\n<p>Suppose we determined that there are several super-important sections of the site responsible for the core services \u2014 searching and submitting listings. If the number of failed requests exceeds 1%, it is a critical incident. If during peak hours the error rate exceeds 0.1% for 15 minutes, it is also considered a critical incident. These criteria cover most incidents; the others fall outside the scope of this article.<\/p>\n<p><img decoding=\"async\" alt=\"Top Blunders of Cian\" src=\"\/wp-content\/uploads\/2020\/05\/f5d76b1784c9a52ae1dc4728f1509ccc.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Top incidents at Cian<\/h3>\n<p>\nSo, we have indeed learned to identify when an incident occurs.\u00a0<\/p>\n<p>Now, each incident is described in detail and reflected in a Jira epic. By the way, for this, we created a separate project and named it FAIL \u2014 only epics can be created there.\u00a0<\/p>\n<p>If we gather all the failures from the last few years, the leaders are:\u00a0<\/p>\n<ul>\n<li>incidents related to mssql;<\/li>\n<li>incidents caused by external factors;<\/li>\n<li>admin errors.<\/li>\n<\/ul>\n<p>\nLet's take a closer look at admin errors, as well as some other interesting failures.<\/p>\n<h4>Fifth place \u2014 \"Bringing order to DNS\"<\/h4>\n<p>\nIt was a gloomy Tuesday. We decided to tidy up the DNS cluster.\u00a0<\/p>\n<p>We wanted to migrate the internal DNS servers from BIND to PowerDNS, dedicating completely separate servers for this purpose, where nothing but DNS would be present.\u00a0<\/p>\n<p>We placed one DNS server in each location of our data centers, and the moment came to transfer the zones from BIND to PowerDNS and switch the infrastructure to the new servers.\u00a0<\/p>\n<p>At the height of the migration, out of all the servers <a class=\"wpil_keyword_link\" href=\"https:\/\/prohoster.info\/en\/server\/\"   title=\"servers\" data-wpil-keyword-link=\"linked\"  data-wpil-monitor-id=\"1484\">servers<\/a>, which were specified in the local caching BINDs across all servers, only one remained, located in the data center in Saint Petersburg. This data center was initially declared non-critical for us, but suddenly became a single point of failure.<br \/>\nJust during this migration period, the channel between Moscow and Saint Petersburg went down. We effectively lost DNS for five minutes and came back up when <a class=\"wpil_keyword_link\" href=\"https:\/\/prohoster.info\/en\/\"   title=\"a host provider\" data-wpil-keyword-link=\"linked\"  data-wpil-monitor-id=\"1206\">a host provider<\/a> the issue was resolved.\u00a0<\/p>\n<p><b>Conclusions: <\/b><\/p>\n<p>If previously we overlooked external factors during the preparation for work, we now included them in the list of what to anticipate. Now we strive for all components to be n-2 redundant, and during work, we can lower this level to n-1.<\/p>\n<ul>\n<li>While drafting the action plan, note the points where the service could fail, and think through a scenario where everything goes 'as bad as it could', in advance.<\/li>\n<li>Distribute internal DNS servers across different geolocations\/data centers\/racks\/switches\/inlets.<\/li>\n<li>On each server, set up a local caching DNS server that redirects requests to the main DNS servers, and in case it is unavailable, will respond from the cache.\u00a0<\/li>\n<\/ul>\n<p><\/p>\n<h4>The fourth point is 'Organizing Nginx'<\/h4>\n<p>\nOne fine day, our team decided that 'enough is enough', and the process of refactoring the Nginx configs began. The main goal is to bring the configs to an intuitive structure. Previously, everything was 'historically developed' and had no logic to it. Now each server_name has been moved to a file with the same name, and all configs are organized into folders. By the way, the config contains 253,949 lines or 7,836,520 characters and takes up almost 7 megabytes. The top level of the structure:\u00a0<\/p>\n<p>                        <b class=\"spoiler_title\">Nginx structure<\/b><\/p>\n<pre><code class=\"plaintext\">\u251c\u2500\u2500 access\n\u2502 \u00a0 \u251c\u2500\u2500 allow.list\n...\n\u2502 \u00a0 \u2514\u2500\u2500 whitelist.conf\n\u251c\u2500\u2500 geobase\n\u2502 \u00a0 \u251c\u2500\u2500 exclude.conf\n...\n\u2502 \u00a0 \u2514\u2500\u2500 geo_ip_to_region_id.conf\n\u251c\u2500\u2500 geodb\n\u2502 \u00a0 \u251c\u2500\u2500 GeoIP.dat\n\u2502 \u00a0 \u251c\u2500\u2500 GeoIP2-Country.mmdb\n\u2502 \u00a0 \u2514\u2500\u2500 GeoLiteCity.dat\n\u251c\u2500\u2500 inc\n\u2502 \u00a0 \u251c\u2500\u2500 error.inc\n...\n\u2502 \u00a0 \u2514\u2500\u2500 proxy.inc\n\u251c\u2500\u2500 lists.d\n\u2502 \u00a0 \u251c\u2500\u2500 bot.conf\n...\n\u2502 \u00a0 \u251c\u2500\u2500 dynamic\n\u2502 \u00a0 \u2514\u2500\u2500 geo.conf\n\u251c\u2500\u2500 lua\n\u2502 \u00a0 \u251c\u2500\u2500 cookie.lua\n\u2502 \u00a0 \u251c\u2500\u2500 log\n\u2502 \u00a0 \u2502 \u00a0 \u2514\u2500\u2500 log.lua\n\u2502 \u00a0 \u251c\u2500\u2500 logics\n\u2502 \u00a0 \u2502 \u00a0 \u251c\u2500\u2500 include.lua\n\u2502 \u00a0 \u2502 \u00a0 \u251c\u2500\u2500 ...\n\u2502 \u00a0 \u2502 \u00a0 \u2514\u2500\u2500 utils.lua\n\u2502 \u00a0 \u2514\u2500\u2500 prom\n\u2502 \u00a0 \u00a0 \u00a0 \u251c\u2500\u2500 stats.lua\n\u2502 \u00a0 \u00a0 \u00a0 \u2514\u2500\u2500 stats_prometheus.lua\n\u251c\u2500\u2500 map.d\n\u2502 \u00a0 \u251c\u2500\u2500 access.conf\n\u2502 \u00a0 \u251c\u2500\u2500 ..\u00a0\n\u2502 \u00a0 \u2514\u2500\u2500 zones.conf\n\u251c\u2500\u2500 nginx.conf\n\u251c\u2500\u2500 robots.txt\n\u251c\u2500\u2500 server.d\n\u2502 \u00a0 \u251c\u2500\u2500 cian.ru\n\u2502 \u00a0 \u2502 \u00a0 \u251c\u2500\u2500 cian.ru.conf\n\u2502 \u00a0 \u2502 \u00a0 \u251c\u2500\u2500 ...\n\u2502 \u00a0 \u2502 \u00a0 \u2514\u2500\u2500 my.cian.ru.conf\n\u251c\u2500\u2500 service.d\n\u2502 \u00a0 \u251c\u2500\u2500 ...\n\u2502 \u00a0 \u2514\u2500\u2500 status.conf\n\u2514\u2500\u2500 upstream.d\n\u00a0\u00a0\u00a0\u00a0\u251c\u2500\u2500 cian-mcs.conf\n\u00a0\u00a0\u00a0\u00a0\u251c\u2500\u2500 ...\n\u00a0\u00a0\u00a0\u00a0\u2514\u2500\u2500 wafserver.conf<\/code><\/pre>\n<p>It has significantly improved, but during the renaming and redistribution of the configs, some of them had incorrect extensions and did not get included in the include directive *.conf. As a result, some hosts became inaccessible and returned a 301 to the homepage. Since the response code was not 5xx\/4xx, this was not noticed immediately, but only by morning. After that, we started writing tests to check the infrastructure components.<\/p>\n<p><b>Conclusions:<\/b>\u00a0<\/p>\n<ul>\n<li>Properly structure your configs (not just nginx) and think through the structure at the early stages of the project. This will make them clearer for the team, which in turn will reduce TTM.<\/li>\n<li>For some infrastructure components, write tests. For example: check that all key server_name return the correct status, along with the response body. It suffices to have just a few scripts on hand that check the main functions of a component, so you don't have to frantically recall what else needs to be tested at 3 AM.\u00a0<\/li>\n<\/ul>\n<p><\/p>\n<h4>Third place \u2014 \"Suddenly ran out of space in Cassandra\"<\/h4>\n<p>\nThe data was steadily growing, and everything was fine until the repairs of large keyspaces in the Cassandra cluster started failing because compaction could not process them.\u00a0<\/p>\n<p>One gloomy day, the cluster nearly turned into a pumpkin, namely:<\/p>\n<ul>\n<li>there was about 20% space left across the cluster;<\/li>\n<li>it is not possible to fully add nodes because cleanup does not pass after adding a node due to lack of space on partitions;<\/li>\n<li>performance gradually declines, as compaction does not work;\u00a0<\/li>\n<li>the cluster operates in emergency mode.<\/li>\n<\/ul>\n<p>\n<img decoding=\"async\" alt=\"Top Blunders of Cian\" src=\"\/wp-content\/uploads\/2020\/05\/1d036fbc500a49a285fa4b0014e2a70d.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nThe exit \u2014 we added another 5 nodes without cleanup, after which we started systematically removing nodes from the cluster and reintroducing them as empty nodes, where space had run out. The time spent was significantly more than desired. There was a risk of partial or complete unavailability of the cluster.\u00a0<\/p>\n<p><b>Conclusions:<\/b><\/p>\n<ul>\n<li>No more than 60% of storage should be utilized on each partition of all Cassandra servers.\u00a0<\/li>\n<li>They should be loaded no more than 50% in terms of CPU.<\/li>\n<li>Don't neglect capacity planning, and it should be thought out for each component based on its specifics.<\/li>\n<li>The more nodes in the cluster, the better. Servers containing a small amount of data are quicker to reallocate, and such a cluster is easier to revive.\u00a0<\/li>\n<\/ul>\n<p><\/p>\n<h4>Second place \u2014 'Data disappeared from Consul key-value storage.'<\/h4>\n<p>\nFor service discovery, we, like many, use Consul. However, we also use its key-value store for blue-green deployments of the monolith. It holds information about active and inactive upstreams, which swap places during deployment. A deployment service was written to interact with the KV. At some point, the data from the KV disappeared. We restored it from memory but with a number of errors. Consequently, during deployment, the load on the upstreams was distributed unevenly, and we encountered many 502 errors due to CPU overload on the backends. As a result, we moved from Consul KV to Postgres, from which it is not as easy to delete data.\u00a0\u00a0<\/p>\n<p><b>Conclusions:<br \/>\n<\/b><\/p>\n<ul>\n<li>Services without any authorization should not contain critical data necessary for the site's operation. For example, if you have no authorization in ES, it's better to block access at the network level from everywhere it isn't needed, leaving only the necessary access, and also set action.destructive_requires_name: true.<\/li>\n<li>Work out a backup and recovery mechanism in advance. For instance, prepare a script (e.g., in Python) that can both back up and restore data.<\/li>\n<\/ul>\n<p><\/p>\n<h4>First place \u2014 'Captain Obvious.'\u00a0<\/h4>\n<p>\nAt some point, we noticed an uneven load distribution on Nginx upstreams when there were more than 10 servers in the backend. Because round-robin directed requests to the first upstream in order, and each Nginx reload started over, the first upstreams always received more requests than the others. Consequently, they operated slower, affecting the entire site. This became increasingly noticeable as traffic volumes grew. Simply updating Nginx to include random did not work; we had to rewrite a lot of Lua code that had not functioned on version 1.15 at that time. We had to patch our Nginx 1.14.2 to add support for random. This solved the problem. This bug deserves the title of 'Captain Obvious.'<\/p>\n<p><b>Conclusions:<\/b><\/p>\n<p>It was very interesting and engaging to investigate this bug).\u00a0<\/p>\n<ul>\n<li>Set up monitoring so it helps identify such fluctuations quickly. For example, you can use ELK to monitor the RPS of each backend of every upstream, tracking their response times from the perspective of Nginx. This helped us identify the problem.\u00a0<\/li>\n<\/ul>\n<p>\nMost failures could have been avoided with a more meticulous approach to what you're doing. Always remember Murphy's Law:\u00a0<i>Anything that can go wrong will go wrong, <\/i>and build components with this in mind.\u00a0<br \/>\n<br \/>Source: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/cian\/blog\/499542\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0412\u0441\u0435\u043c \u0434\u043e\u0431\u0440\u0430!\u00a0 \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u041d\u0438\u043a\u0438\u0442\u0430, \u044f \u0442\u0438\u043c\u043b\u0438\u0434 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0438\u043d\u0436\u0435\u043d\u0435\u0440\u043e\u0432 \u0426\u0438\u0430\u043d. \u041e\u0434\u043d\u043e\u0439 \u0438\u0437 \u043c\u043e\u0438\u0445 \u043e\u0431\u044f\u0437\u0430\u043d\u043d\u043e\u0441\u0442\u0435\u0439 \u0432 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u043d\u0438\u0436\u0435\u043d\u0438\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0438\u043d\u0446\u0438\u0434\u0435\u043d\u0442\u043e\u0432, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0445 \u0441 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043e\u0439 \u043d\u0430 \u043f\u0440\u043e\u0434\u0435, \u0434\u043e \u043d\u0443\u043b\u044f. \u0422\u043e, \u043e \u0447\u0435\u043c \u043f\u043e\u0439\u0434\u0435\u0442 \u0440\u0435\u0447\u044c \u0434\u0430\u043b\u0435\u0435, \u043f\u0440\u0438\u043d\u0435\u0441\u043b\u043e \u043d\u0430\u043c \u043c\u043d\u043e\u0433\u043e \u0431\u043e\u043b\u0438, \u0438 \u0446\u0435\u043b\u044c \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438 \u2014 \u043d\u0435 \u0434\u0430\u0442\u044c \u0434\u0440\u0443\u0433\u0438\u043c \u043b\u044e\u0434\u044f\u043c \u043f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u044c \u043d\u0430\u0448\u0438\u0445 \u043e\u0448\u0438\u0431\u043e\u043a \u0438\u043b\u0438 \u0445\u043e\u0442\u044f \u0431\u044b \u043c\u0438\u043d\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438\u0445 \u0432\u043b\u0438\u044f\u043d\u0438\u0435.\u00a0 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":80032,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-80031","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=\"\u0412\u0441\u0435\u043c \u0434\u043e\u0431\u0440\u0430! \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u041d\u0438\u043a\u0438\u0442\u0430, \u044f \u0442\u0438\u043c\u043b\u0438\u0434 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0438\u043d\u0436\u0435\u043d\u0435\u0440\u043e\u0432 \u0426\u0438\u0430\u043d.\" \/>\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\/top-fakapov-czian\" \/>\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\udd47\u0422\u043e\u043f \u0444\u0430\u043a\u0430\u043f\u043e\u0432 \u0426\u0438\u0430\u043d | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0412\u0441\u0435\u043c \u0434\u043e\u0431\u0440\u0430! \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u041d\u0438\u043a\u0438\u0442\u0430, \u044f \u0442\u0438\u043c\u043b\u0438\u0434 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0438\u043d\u0436\u0435\u043d\u0435\u0440\u043e\u0432 \u0426\u0438\u0430\u043d.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/en\/blog\/administrirovanie\/top-fakapov-czian\" \/>\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=\"2020-05-02T11:42:49+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-05-02T11:42:49+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\udd47Top Blunders at Cian | ProHoster","description":"Hello everyone! My name is Nikita, I\u2019m the team lead of the engineers at Cian.","canonical_url":"https:\/\/prohoster.info\/en\/blog\/administrirovanie\/top-fakapov-czian","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\udd47\u0422\u043e\u043f \u0444\u0430\u043a\u0430\u043f\u043e\u0432 \u0426\u0438\u0430\u043d | ProHoster","og:description":"\u0412\u0441\u0435\u043c \u0434\u043e\u0431\u0440\u0430! \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u041d\u0438\u043a\u0438\u0442\u0430, \u044f \u0442\u0438\u043c\u043b\u0438\u0434 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0438\u043d\u0436\u0435\u043d\u0435\u0440\u043e\u0432 \u0426\u0438\u0430\u043d.","og:url":"https:\/\/prohoster.info\/en\/blog\/administrirovanie\/top-fakapov-czian","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":"2020-05-02T11:42:49+00:00","article:modified_time":"2020-05-02T11:42:49+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"80031","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":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 12:47:44","updated":"2026-02-09 16:50:24","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\/80031","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=80031"}],"version-history":[{"count":2,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/posts\/80031\/revisions"}],"predecessor-version":[{"id":158728,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/posts\/80031\/revisions\/158728"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/media\/80032"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/media?parent=80031"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/categories?post=80031"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/tags?post=80031"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}