{"id":33707,"date":"2019-10-31T21:54:17","date_gmt":"2019-10-31T18:54:17","guid":{"rendered":"https:\/\/prohoster.info\/blog\/inogda-bolshe-eto-menshe-kogda-umenshenie-nagruzki-privodit-k-uvelicheniyu-zaderzhki\/"},"modified":"2019-10-31T21:54:17","modified_gmt":"2019-10-31T18:54:17","slug":"inogda-bolshe-eto-menshe-kogda-umenshenie-nagruzki-privodit-k-uvelicheniyu-zaderzhki","status":"publish","type":"post","link":"https:\/\/prohoster.info\/en\/blog\/administrirovanie\/inogda-bolshe-eto-menshe-kogda-umenshenie-nagruzki-privodit-k-uvelicheniyu-zaderzhki","title":{"rendered":"Sometimes less is more. When reducing load leads to increased latency","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Like in <noindex><a rel=\"nofollow\" href=\"https:\/\/mahdytech.com\/2019\/01\/13\/curious-case-999-latency-hike\/\">most posts<\/a><\/noindex>, a problem arose with the distributed service, let\u2019s call this service Alvin. This time I didn\u2019t discover the issue myself; it was reported to me by the guys from the client side.<\/p>\n<p>One day I woke up to an unhappy email due to high latencies from Alvin, which we planned to launch soon. Specifically, the client faced a 99th percentile latency around 50 ms, significantly above our latency budget. This was surprising as I had thoroughly tested the service, especially for latencies, as this is a frequent complaint.<\/p>\n<p>Before handing Alvin over for testing, I conducted many experiments with 40k requests per second (QPS), all showing latency of less than 10 ms. I was ready to state that I disagreed with their results. But upon a closer look at the email, I noticed something new: I hadn't tested the conditions they mentioned; their QPS was much lower than mine. I tested at 40k QPS, while they only did so at 1k. I ran another experiment, this time with a lower QPS, just to appease them.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nSince I\u2019m writing about this in a blog \u2014 you probably already guessed: their numbers turned out to be correct. I checked my virtual client over and over again, always with the same result: a low number of requests not only increases latency but also increases the number of requests with latency over 10 ms. In other words, if at 40k QPS about 50 requests per second exceeded 50 ms, then at 1k QPS there were 100 requests per second above 50 ms. Paradox!<\/p>\n<p><img decoding=\"async\" alt=\"Sometimes less is more. When reducing load leads to increased latency\" src=\"\/wp-content\/uploads\/2019\/05\/d181859376e2befad9ed631e8f8ff168.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h1>Narrowing down the search<\/h1>\n<p>\nWhen faced with a latency problem in a distributed system with many components, the first step is to create a shortlist of suspects. Let\u2019s dig a little deeper into the architecture of Alvin:<\/p>\n<p><img decoding=\"async\" alt=\"Sometimes less is more. When reducing load leads to increased latency\" src=\"\/wp-content\/uploads\/2019\/05\/9b10198772b0e53890eb94d5e5c9afd0.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nA good starting point is a list of executed input-output transitions (network calls\/disc searches, etc.). Let\u2019s try to find out where the delay is. Besides the obvious input-output with the client, Alvin takes an additional step: it calls the data store. However, this store operates in the same cluster as Alvin, so the latency there should be lower than with the client. So, the list of suspects:<\/p>\n<ol>\n<li>Network call from the client to Alvin.\n<\/li>\n<li>Network call from Alvin to the data store.\n<\/li>\n<li>Disk search in the data store.\n<\/li>\n<li>Network call from the data store to Elvin.\n<\/li>\n<li>Network call from Elvin to the client.<\/li>\n<\/ol>\n<p>\nLet's try to cross out some points.<\/p>\n<h3>The data store is not at fault.<\/h3>\n<p>\nFirst, I transformed Elvin into a ping-ping server that does not process requests. Upon receiving a request, it returns an empty response. If the latency decreases, then the issue lies with Elvin's implementation or the data store\u2014nothing extraordinary. In the first experiment, we get the following chart:<\/p>\n<p><img decoding=\"async\" alt=\"Sometimes less is more. When reducing load leads to increased latency\" src=\"\/wp-content\/uploads\/2019\/05\/bd8fed2b2cc0d07946d1c4a868ae36b3.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAs we can see, using a ping-ping server shows no improvements. This means that the data store does not increase latency, and the list of suspects is cut in half:<\/p>\n<ol>\n<li>Network call from the client to Alvin.\n<\/li>\n<li>Network call from Elvin to the client.<\/li>\n<\/ol>\n<p>\nGreat! The list is quickly shrinking. I thought I almost figured out the reason.<\/p>\n<h3>gRPC<\/h3>\n<p>\nNow it's time to introduce a new player: <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/grpc\/grpc\">gRPC<\/a><\/noindex>. This is an open-source library from Google for inter-process communication. <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Remote_procedure_call\">RPC<\/a><\/noindex>. Although <code>gRPC<\/code> it is well optimized and widely used, this is the first time I used it in a system of this scale, and I expected my implementation to be suboptimal\u2014mildly speaking.<\/p>\n<p>The presence of <code>gRPC<\/code> in the stack raised a new question: could it be my implementation or the library itself <code>gRPC<\/code> causing the latency issue? Adding a new suspect to the list:<\/p>\n<ol>\n<li>The client calls the library, <code>gRPC<\/code>\n<\/li>\n<li>Library <code>gRPC<\/code> on the client performs the library's network call <code>gRPC<\/code> on the server\n<\/li>\n<li>Library <code>gRPC<\/code> contacts Elvin (no operation in the case of a ping-pong server).<\/li>\n<\/ol>\n<p>\nTo give you an idea of what the code looks like, my implementation of the client\/Elvin is not much different from typical client-server <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/grpc\/grpc\/tree\/v1.19.0\/examples\/cpp\/helloworld\">async examples.<\/a><\/noindex>.<\/p>\n<blockquote><p><i>Note: the list above is somewhat simplified, as <code>gRPC<\/code> it allows for a custom (template?) threading model where the execution stack <code>gRPC<\/code> and user implementation intertwine. For simplicity, let's stick to this model.<\/i><\/p><\/blockquote>\n<p><\/p>\n<h3>Profiling will fix everything.<\/h3>\n<p>\nAfter ruling out the data stores, I thought I was almost done: 'Now it's easy! We'll apply profiling and find out where the latency occurs.' I <noindex><a rel=\"nofollow\" href=\"https:\/\/mahdytech.com\/2019\/01\/13\/curious-case-999-latency-hike\/\">am a big fan of precise profiling,<\/a><\/noindex>because CPUs are very fast and are usually not the bottleneck. Most latency happens when the CPU has to stop processing to do something else. Precise CPU profiling is designed just for this: it accurately records all <noindex><a rel=\"nofollow\" href=\"https:\/\/www.tutorialspoint.com\/what-is-context-switching-in-operating-system\">context switches<\/a><\/noindex> and helps understand where delays occur.<\/p>\n<p>I took four profiles: one for high QPS (low latency) and one with a ping-pong server at low QPS (high latency), both on the client side and the server side. And just in case, I also took a sample CPU profile. When comparing profiles, I usually look for anomalous call stacks. For example, on the bad side with high latency, there are many more context switches (10 times or more). But in my case, the number of context switches was nearly the same. To my dismay, there was nothing significant.<\/p>\n<h1>Additional debugging<\/h1>\n<p>\nI was in despair. I didn't know what other tools to use, and my next plan was essentially to repeat the experiments with different variations rather than clearly diagnosing the problem.<\/p>\n<h3>What if<\/h3>\n<p>\nFrom the very beginning, I was concerned about the specific latency time of 50 ms. That's a very high latency. I decided to cut pieces out of the code until I could figure out exactly which part was causing the issue. Then came the experiment that worked.<\/p>\n<p>As usual, in hindsight, everything seems obvious. I placed the client on one machine with Elvin \u2014 and sent a request to <code>localhost<\/code>. And the increase in latency disappeared!<\/p>\n<p><img decoding=\"async\" alt=\"Sometimes less is more. When reducing load leads to increased latency\" src=\"\/wp-content\/uploads\/2019\/05\/2d8466625a264abe2110a65592ee0da8.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nSomething was wrong with the network.<\/p>\n<h3>Acquiring networking skills<\/h3>\n<p>\nI must admit: my knowledge of networking technologies is terrible, especially considering that I work with them daily. But the network was the main suspect, and I needed to learn how to debug it.<\/p>\n<p>Fortunately, the internet loves those who want to learn. A combination of ping and tracert seemed like a good start for debugging transport issues.<\/p>\n<p>First, I ran <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.microsoft.com\/en-us\/sysinternals\/downloads\/psping\">PsPing<\/a><\/noindex> on Elvin's TCP port. I used the default settings \u2014 nothing special. Out of more than a thousand pings, none exceeded 10 ms except the first one for warm-up. This contradicts the observed 50 ms latency increase in the 99th percentile: for every 100 requests, we should see about one request with a latency of 50 ms.<\/p>\n<p>Then I tried <noindex><a rel=\"nofollow\" href=\"https:\/\/support.microsoft.com\/en-ca\/help\/314868\/how-to-use-tracert-to-troubleshoot-tcp-ip-problems-in-windows\">tracert<\/a><\/noindex>: maybe the issue lies with one of the nodes on the route between Elvin and the client. But the tracer also came back empty-handed.<\/p>\n<p>Thus, the cause of the latency was not my code, not the gRPC implementation, and not the network. I was starting to worry that I would never understand this.<\/p>\n<h3>Now, which OS are we on?<\/h3>\n<p>\n<code>gRPC<\/code> is widely used in Linux, but it's an exotic option for Windows. I decided to run an experiment that worked: I created a Linux virtual machine, compiled Alvin for Linux, and deployed it.<\/p>\n<p><img decoding=\"async\" alt=\"Sometimes less is more. When reducing load leads to increased latency\" src=\"\/wp-content\/uploads\/2019\/05\/ee74c16de7e1ac6c286e401660e94ca1.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAnd here's what happened: the ping-pong server on Linux did not have the same latencies as the corresponding Windows node, even though the data source did not differ. It turns out the problem lies in the gRPC implementation for Windows.<\/p>\n<h3>Nagle's Algorithm<\/h3>\n<p>\nThroughout this time, I thought I was missing a flag. <code>gRPC<\/code>Now I understand that what was actually missing was <code>gRPC<\/code> the Windows flag. I found the internal RPC library, which I was sure worked well with all installed flags <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.microsoft.com\/en-us\/windows\/desktop\/winsock\/windows-sockets-start-page-2\">Winsock<\/a><\/noindex>. Then I added all these flags to gRPC and deployed Alvin on Windows, in the fixed ping-pong server under Windows!<\/p>\n<p><img decoding=\"async\" alt=\"Sometimes less is more. When reducing load leads to increased latency\" src=\"\/wp-content\/uploads\/2019\/05\/ce3a4066c78f9f6a63fd68578224d6e5.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<i>Almost<\/i> ready: I started removing the added flags one by one until the regression came back, so I could precisely identify its cause. It was the infamous <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.microsoft.com\/en-us\/windows\/desktop\/api\/winsock\/nf-winsock-setsockopt\">A detailed guide has been published on tuning the Linux environment for maximum HTTP request processing performance.<\/a><\/noindex>Nagle's Algorithm switch.<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Nagle%27s_algorithm\">Nagle's Algorithm<\/a><\/noindex> aims to reduce the number of packets sent over the network by delaying message transmission until the packet size exceeds a certain number of bytes. While this may be pleasant for the average user, it is destructive for real-time servers, as the OS will hold back some messages, causing delays at low QPS. This flag was set in the Linux implementation for TCP sockets, but not for Windows. I <code>gRPC<\/code> The significant latency at low QPS was caused by OS optimization. Looking back, profiling did not reveal the delay because it was done in kernel mode and not in <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/grpc\/grpc\/commit\/1dce1009e67ea4b5934a61b1bcf8a217bd12cc76\">I fixed<\/a><\/noindex>.<\/p>\n<h1>Conclusion<\/h1>\n<p>\nuser mode. <noindex><a rel=\"nofollow\" href=\"https:\/\/blog.codinghorror.com\/understanding-user-and-kernel-mode\/\">I don't know if Nagle's algorithm can be observed through ETW captures, but that would be interesting.<\/a><\/noindex>As for the localhost experiment, it likely did not involve the actual network code, and Nagle's algorithm did not trigger, so the latency issues disappeared when the client accessed Alvin via localhost.<\/p>\n<p>Next time you see an increase in latency when reducing the number of requests per second, Nagle's algorithm should be on your list of suspects!<\/p>\n<p>Like in most posts, there was a problem with the distributed service, let's call this service Alvin.<br \/>\n<br \/>Source: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/451904\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041a\u0430\u043a \u0438 \u0432 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0435 \u043f\u043e\u0441\u0442\u043e\u0432, \u043f\u043e\u044f\u0432\u0438\u043b\u0430\u0441\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0441 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u043e\u0439 \u0441\u043b\u0443\u0436\u0431\u043e\u0439, \u043d\u0430\u0437\u043e\u0432\u0451\u043c \u044d\u0442\u0443 \u0441\u043b\u0443\u0436\u0431\u0443 \u042d\u043b\u0432\u0438\u043d. \u041d\u0430 \u044d\u0442\u043e\u0442 \u0440\u0430\u0437 \u044f \u043d\u0435 \u0441\u0430\u043c \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u043b \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443, \u043c\u043d\u0435 \u0441\u043e\u043e\u0431\u0449\u0438\u043b\u0438 \u0440\u0435\u0431\u044f\u0442\u0430 \u0441 \u043a\u043b\u0438\u0435\u043d\u0442\u0441\u043a\u043e\u0439 \u0447\u0430\u0441\u0442\u0438. \u041e\u0434\u043d\u0430\u0436\u0434\u044b \u044f \u043f\u0440\u043e\u0441\u043d\u0443\u043b\u0441\u044f \u043e\u0442 \u043d\u0435\u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u0438\u0441\u044c\u043c\u0430 \u0438\u0437-\u0437\u0430 \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u0437\u0430\u0434\u0435\u0440\u0436\u0435\u043a \u0443 \u042d\u043b\u0432\u0438\u043d\u0430, \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043c\u044b \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043b\u0438 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0432 \u0431\u043b\u0438\u0436\u0430\u0439\u0448\u0435\u0435 \u0432\u0440\u0435\u043c\u044f. \u0412 \u0447\u0430\u0441\u0442\u043d\u043e\u0441\u0442\u0438, \u043a\u043b\u0438\u0435\u043d\u0442 \u0441\u0442\u043e\u043b\u043a\u043d\u0443\u043b\u0441\u044f \u0441 \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u043e\u0439 99-\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u043d\u0442\u0438\u043b\u044f \u0432 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":25389,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-33707","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.1.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041a\u0430\u043a \u0438 \u0432 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0435 \u043f\u043e\u0441\u0442\u043e\u0432, \u043f\u043e\u044f\u0432\u0438\u043b\u0430\u0441\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0441 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u043e\u0439 \u0441\u043b\u0443\u0436\u0431\u043e\u0439, \u043d\u0430\u0437\u043e\u0432\u0451\u043c \u044d\u0442\u0443 \u0441\u043b\u0443\u0436\u0431\u0443 \u042d\u043b\u0432\u0438\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\/inogda-bolshe-eto-menshe-kogda-umenshenie-nagruzki-privodit-k-uvelicheniyu-zaderzhki\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\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\u0418\u043d\u043e\u0433\u0434\u0430 \u0431\u043e\u043b\u044c\u0448\u0435 \u2014 \u044d\u0442\u043e \u043c\u0435\u043d\u044c\u0448\u0435. \u041a\u043e\u0433\u0434\u0430 \u0443\u043c\u0435\u043d\u044c\u0448\u0435\u043d\u0438\u0435 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u044e \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0438 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041a\u0430\u043a \u0438 \u0432 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0435 \u043f\u043e\u0441\u0442\u043e\u0432, \u043f\u043e\u044f\u0432\u0438\u043b\u0430\u0441\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0441 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u043e\u0439 \u0441\u043b\u0443\u0436\u0431\u043e\u0439, \u043d\u0430\u0437\u043e\u0432\u0451\u043c \u044d\u0442\u0443 \u0441\u043b\u0443\u0436\u0431\u0443 \u042d\u043b\u0432\u0438\u043d.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/en\/blog\/administrirovanie\/inogda-bolshe-eto-menshe-kogda-umenshenie-nagruzki-privodit-k-uvelicheniyu-zaderzhki\" \/>\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:54:17+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T18:54:17+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\udd47Sometimes more is less. When reducing load leads to increased latency | ProHoster","description":"\ud83e\udd47Sometimes less is more. When reducing load leads to increased latency | ProHoster","canonical_url":"https:\/\/prohoster.info\/en\/blog\/administrirovanie\/inogda-bolshe-eto-menshe-kogda-umenshenie-nagruzki-privodit-k-uvelicheniyu-zaderzhki","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\u0418\u043d\u043e\u0433\u0434\u0430 \u0431\u043e\u043b\u044c\u0448\u0435 \u2014 \u044d\u0442\u043e \u043c\u0435\u043d\u044c\u0448\u0435. \u041a\u043e\u0433\u0434\u0430 \u0443\u043c\u0435\u043d\u044c\u0448\u0435\u043d\u0438\u0435 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u044e \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0438 | ProHoster","og:description":"\u041a\u0430\u043a \u0438 \u0432 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0435 \u043f\u043e\u0441\u0442\u043e\u0432, \u043f\u043e\u044f\u0432\u0438\u043b\u0430\u0441\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0441 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u043e\u0439 \u0441\u043b\u0443\u0436\u0431\u043e\u0439, \u043d\u0430\u0437\u043e\u0432\u0451\u043c \u044d\u0442\u0443 \u0441\u043b\u0443\u0436\u0431\u0443 \u042d\u043b\u0432\u0438\u043d.","og:url":"https:\/\/prohoster.info\/en\/blog\/administrirovanie\/inogda-bolshe-eto-menshe-kogda-umenshenie-nagruzki-privodit-k-uvelicheniyu-zaderzhki","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:54:17+00:00","article:modified_time":"2019-10-31T18:54:17+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"33707","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 16:23:19","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 02:35:31","updated":"2026-01-21 16:23: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\/33707","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=33707"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/posts\/33707\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/media\/25389"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/media?parent=33707"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/categories?post=33707"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/tags?post=33707"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}