{"id":100221,"date":"2021-05-21T10:23:03","date_gmt":"2021-05-21T08:23:03","guid":{"rendered":"https:\/\/prohoster.info\/blog\/novosti-interneta\/optimizacziya-linux-dlya-obrabotki-1-2-mln-json-zaprosov-v-sekundu"},"modified":"2021-05-21T10:23:03","modified_gmt":"2021-05-21T08:23:03","slug":"optimizacziya-linux-dlya-obrabotki-1-2-mln-json-zaprosov-v-sekundu","status":"publish","type":"post","link":"https:\/\/prohoster.info\/sl\/blog\/news\/optimizacziya-linux-dlya-obrabotki-1-2-mln-json-zaprosov-v-sekundu","title":{"rendered":"Optimizacija Linux za obdelavo 1.2 milijona JSON poizvedb na sekundo","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Objavljeno je podrobno vodilo za optimizacijo okolja Linux za dosego maksimalne zmogljivosti obdelave HTTP zahtevkov. Predlagane metode so omogo\u010dile pove\u010danje zmogljivosti obdelovalnika JSON na osnovi knji\u017enice libreactor v okolju Amazon EC2 (4 vCPU) s 224 tiso\u010d API zahtevki na sekundo pri privzetih nastavitvah Amazon Linux 2 z jedrom 4.14 do 1,2 milijona zahtevkov na sekundo po optimizaciji (pove\u010danje 436 %), prav tako pa so pripeljale do zmanj\u0161anja zakasnitev pri obdelavi zahtevkov za 79 %. Predlagane metode niso specifi\u010dne za libreactor in delujejo tudi pri uporabi drugih http stre\u017enikov, vklju\u010dno z nginx, Actix, Netty in Node.js (libreactor je bil uporabljen pri testih, saj je re\u0161itev na njegovi osnovi pokazala najbolj\u0161o zmogljivost).      <center><img decoding=\"async\" alt=\"Optimizacija Linux za obdelavo 1.2 milijona JSON poizvedb na sekundo\" src=\"\/wp-content\/uploads\/2021\/05\/908fb8d92e84a3e7557af7f6c622298e.png\" style=\"display:block;margin: 0 auto;\" \/><\/center>    <\/p>\n<p>Glavne optimizacije:  <\/p>\n<ul>\n<li class=\"l\"> Optimizacija kodeksa libreactor. Osnova je bila razli\u010dica R18 iz nabora Techempower, ki je bila izbolj\u0161ana z odstranitvijo kode za omejevanje \u0161tevila uporabljenih jeder CPU (optimizacija je omogo\u010dila 25-27% pospe\u0161itev), sestavljanjem v GCC z mo\u017enostmi '-O3' (pove\u010danje 5-10%) in '-march-native' (5-10%), zamenjavo klicev read\/write z recv\/send (5-10%) in zmanj\u0161anjem stro\u0161kov pri uporabi pthreads (2-3%). Skupno pove\u010danje zmogljivosti po optimizaciji kode je zna\u0161alo 55%, prepustnost pa se je pove\u010dala z 224k req\/s na 347k req\/s.\n<li class=\"l\"> Deaktivacija za\u0161\u010dite pred ranljivostmi, povzptanimi s spekulativnim izvr\u0161evanjem navodil. Uporaba parametrov pri nalaganju jedra 'nospectre_v1 nospectre_v2 pti=off mds=off tsx_async_abort=off' je omogo\u010dila pove\u010danje zmogljivosti za 28%, prepustnost pa se je pove\u010dala z 347k req\/s na 446k req\/s. Posami\u010dno je pove\u010danje od parametra 'nospectre_v1' (za\u0161\u010dita pred Spectre v1 + SWAPGS) zna\u0161alo 1-2%, 'nospectre_v2' (za\u0161\u010dita pred Spectre v2) - 15-20%, 'pti=off' (Spectre v3\/Meltdown) - 6%, 'mds=off tsx_async_abort=off' (MDS\/Zombieload in TSX Asynchronous Abort) - 6%. Nastavitve za za\u0161\u010dito pred napadi L1TF\/Foreshadow (l1tf=flush), iTLB multihit, Speculative Store Bypass in SRBDS, ki ne vplivajo na zmogljivost, ostajajo nespremenjene, saj se niso kri\u017eale z testirano konfiguracijo (npr. specifi\u010dne za) <a class=\"wpil_keyword_link\" href=\"https:\/\/prohoster.info\/sl\/vps\/abuzoustojchivye-vps\/\"   title=\"KVM\" data-wpil-keyword-link=\"linked\"  data-wpil-monitor-id=\"4395\">KVM<\/a>, vgrajeno virtualizacijo in druge modele CPU).\n<li class=\"l\"> Deaktivacija mehanizmov nadzora in blokiranja sistemskih klicev z ukazom 'auditctl -a never,task' in dolo\u010danjem mo\u017enosti '--security-opt seccomp=unconfined' pri zagonu docker kontejnerja. Skupno pove\u010danje zmogljivosti je zna\u0161alo 11%, prepustnost pa se je pove\u010dala z 446k req\/s na 495k req\/s.\n<li class=\"l\"> Izklju\u010ditev iptables\/netfilterja z nalaganjem povezanih modulov jedra. Idejo o izklopu po\u017earnega zidu, ki ni bil uporabljen v specifi\u010dni stre\u017eni\u0161ki re\u0161itvi, je spodbudila profiliranje, iz katerega je razvidno, da je za izvajanje funkcije nf_hook_slow porabljalo 18% \u010dasa. Opozarja se, da nftables deluje u\u010dinkoviteje kot iptables, vendar se v Amazon Linux \u0161e vedno uporablja iptables. Po izklju\u010ditvi iptables je pridobitev zmogljivosti zna\u0161ala 22%, propustnost pa se je pove\u010dala s 495k req\/s na 603k req\/s.\n<li class=\"l\"> Zmanj\u0161anje migracij obdelovalcev med razli\u010dnimi jedri CPU za pove\u010danje u\u010dinkovitosti uporabe procesorskega predpomnilnika. Optimizacija je bila narejena na ravni vezave procesov libreactor na jedra CPU (CPU Pinning), kot tudi preko zaklenitve omre\u017enih obdelovalcev jedra (Receive Side Scaling). Na primer, izvedeno je bilo izklopitev irqbalance in izrecna nastavitev vezav vrstic na CPU v \/proc\/irq\/$IRQ\/smp_affinity_list. Za uporabo istega jedra CPU za obdelavo procesa libreactor in omre\u017ene vrste prihajajo\u010dih paketov je bil uporabljen lastni BPF-obdelovalec, povezan preko nastavitve zastavice SO_ATTACH_REUSEPORT_CBPF pri ustvarjanju socket. Za vezavo na CPU vrstic odhodnih paketov so bile spremenjene nastavitve \/sys\/class\/net\/eth0\/queues\/tx-&lt;n&gt;\/xps_cpus. Skupna pridobitev zmogljivosti je zna\u0161ala 38%, propustnost pa se je pove\u010dala s 603k req\/s na 834k req\/s.\n<li class=\"l\"> Optimizacija obdelave prekinitev in uporaba polinga (polling). Vklju\u010ditev na\u010dina adaptive-rx v gonilniku ENA in manipulacija s sysctl net.core.busy_read sta omogo\u010dila pove\u010danje zmogljivosti za 28% (prepustnost se je pove\u010dala z 834k req\/s na 1.06M req\/s, zakasnitve pa so se zmanj\u0161ale z 361\u03bcs na 292\u03bcs).\n<li class=\"l\"> Izklju\u010ditev sistemskih storitev, ki povzro\u010dajo nepotrebne zaklepe v omre\u017enem skladu. Izklju\u010ditev dhclient in nastavitev <a class=\"wpil_keyword_link\" href=\"https:\/\/prohoster.info\/sl\/lir\/ipv4\/\"   title=\"IP-naslove\" data-wpil-keyword-link=\"linked\"  data-wpil-monitor-id=\"683\">IP-naslove<\/a> ro\u010dno je pripeljala do pove\u010danja zmogljivosti za 6%, propustnost pa se je pove\u010dala s 1.06M req\/s na 1.12M req\/s. Razlog za vpliv dhclient na zmogljivost je analiza prometa z uporabo raw-socket.\n<li class=\"l\"> Boj proti Spin Lock. Prehod omre\u017enega sklada v na\u010din 'noqueue' preko sysctl 'net.core.default_qdisc=noqueue' in 'tc qdisc replace dev eth0 root mq' je privedel do pove\u010danja zmogljivosti za 2%, prepustnost pa se je pove\u010dala z 1.12M req\/s na 1.15M req\/s.\n<li class=\"l\"> Kon\u010dne manj\u0161e optimizacije, kot sta izklop GRO (Generic Receive Offload) z ukazom \u00abethtool -K eth0 gro off\u00bb in zamenjava algoritma nadzora zasi\u010denosti cubic z reno s pomo\u010djo sysctl \u00abnet.ipv4.tcp_congestion_control=reno\u00bb. Skupno pove\u010danje zmogljivosti je zna\u0161alo 4%. Propustnost se je pove\u010dala s 1.15M req\/s na 1.2M req\/s.          <\/ul>\n<p>Poleg izvedenih optimizacij \u010dlanek obravnava tudi metode, ki niso privedle do pri\u010dakovanega pove\u010danja zmogljivosti. Na primer, se je izkazalo, da so neu\u010dinkovite:    <\/p>\n<ul>\n<li class=\"l\"> Lo\u010den zagon libreactor se ni razlikoval po zmogljivosti od zagona v vsebniku. Zamenjava writev z send, pove\u010danje maxevents v epoll_wait ter eksperimenti z razli\u010dicami in zastavicami GCC niso vplivali (u\u010dinek je bil opazen le za zastavici \u00ab-O3\u00bb in \u00ab-march-native\u00bb).\n<li class=\"l\"> Posodobitev jedra Linux na razli\u010dice 4.19 in 5.4, uporaba \u010dasovnikov SCHED_FIFO in SCHED_RR, manipulacije s sysctl kernel.sched_min_granularity_ns, kernel.sched_wakeup_granularity_ns, transparent_hugepages=never, skew_tick=1 in clocksource=tsc pa prav tako niso vplivale na zmogljivost.\n<li class=\"l\"> V gonilniku ENA vklju\u010ditev na\u010dinov Offload (segmentation, scatter-gather, rx\/tx checksum), sestavljanje z zastavico \u00ab-O3\u00bb ter uporaba parametrov ena.rx_queue_size in ena.force_large_llq_header nista imela vpliva.\n<li class=\"l\"> Spremembe v omre\u017enem stacku niso privedle do pove\u010danja zmogljivosti:\n<ul>\n<li>Izklop IPv6: ipv6.disable=1<\/li>\n<li>Izklop VLAN: modprobe -rv 8021q<\/li>\n<li>Izklop preverjanja vira paketa\n<ul>\n<li>net.ipv4.conf.all.rp_filter=0<\/li>\n<li>net.ipv4.conf.eth0.rp_filter=0<\/li>\n<li>net.ipv4.conf.all.accept_local=1 (negativen u\u010dinek)<\/li>\n<\/ul>\n<\/li>\n<li>net.ipv4.tcp_sack=0<\/li>\n<li>net.ipv4.tcp_dsack=0<\/li>\n<li>net.ipv4.tcp_mem\/tcp_wmem\/tcp_rmem <\/li>\n<li>net.core.netdev_budget<\/li>\n<li>net.core.dev_weight<\/li>\n<li>net.core.netdev_max_backlog<\/li>\n<li>net.ipv4.tcp_slow_start_after_idle=0 <\/li>\n<li>net.ipv4.tcp_moderate_rcvbuf=0<\/li>\n<li>net.ipv4.tcp_timestamps=0<\/li>\n<li>net.ipv4.tcp_low_latency=1<\/li>\n<li>SO_PRIORITY<\/li>\n<li>TCP_NODELAY<\/li>\n<\/ul>\n<p>Izvor: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/www.opennet.ru\/opennews\/art.shtml?num=55186\">opennet.ru<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u043d\u043e \u0434\u0435\u0442\u0430\u043b\u044c\u043d\u043e\u0435 \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u043e \u043f\u043e \u0442\u044e\u043d\u0438\u043d\u0433\u0443 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f Linux \u0434\u043b\u044f \u0434\u043e\u0441\u0442\u0438\u0436\u0435\u043d\u0438\u044f \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0439 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 HTTP-\u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432. \u041f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0435 \u043c\u0435\u0442\u043e\u0434\u044b \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u043b\u0438 \u043f\u043e\u0434\u043d\u044f\u0442\u044c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430 JSON \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 libreactor \u0432 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0438 Amazon EC2 (4 vCPU) c 224 \u0442\u044b\u0441\u044f\u0447 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 API \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0443 \u043f\u0440\u0438 \u0448\u0442\u0430\u0442\u043d\u044b\u0445 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u0445 Amazon Linux 2 \u0441 \u044f\u0434\u0440\u043e\u043c 4.14 \u0434\u043e 1.2 \u043c\u043b\u043d \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0443 \u043f\u043e\u0441\u043b\u0435 \u043f\u0440\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":100222,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[702],"tags":[],"class_list":["post-100221","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-news"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.4 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u043d\u043e \u0434\u0435\u0442\u0430\u043b\u044c\u043d\u043e\u0435 \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u043e \u043f\u043e \u0442\u044e\u043d\u0438\u043d\u0433\u0443 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f Linux \u0434\u043b\u044f \u0434\u043e\u0441\u0442\u0438\u0436\u0435\u043d\u0438\u044f \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0439 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 HTTP-\u0437\u0430\u043f\u0440\u043e\u0441\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\/sl\/blog\/news\/optimizacziya-linux-dlya-obrabotki-1-2-mln-json-zaprosov-v-sekundu\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.4\" \/>\n\t\t<meta property=\"og:locale\" content=\"sl_SI\" \/>\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\u041e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f Linux \u0434\u043b\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 1.2 \u043c\u043b\u043d JSON-\u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0443 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u043d\u043e \u0434\u0435\u0442\u0430\u043b\u044c\u043d\u043e\u0435 \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u043e \u043f\u043e \u0442\u044e\u043d\u0438\u043d\u0433\u0443 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f Linux \u0434\u043b\u044f \u0434\u043e\u0441\u0442\u0438\u0436\u0435\u043d\u0438\u044f \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0439 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 HTTP-\u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/sl\/blog\/news\/optimizacziya-linux-dlya-obrabotki-1-2-mln-json-zaprosov-v-sekundu\" \/>\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=\"2021-05-21T08:23:03+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2021-05-21T08:23:03+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\udd47Optimizacija Linux za obdelavo 1.2 milijona JSON zahtevkov na sekundo | ProHoster","description":"Objavljeno je podrobno vodilo za optimizacijo okolja Linux za dosego maksimalne zmogljivosti obdelave HTTP zahtevkov.","canonical_url":"https:\/\/prohoster.info\/sl\/blog\/news\/optimizacziya-linux-dlya-obrabotki-1-2-mln-json-zaprosov-v-sekundu","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sl_SI","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\u041e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f Linux \u0434\u043b\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 1.2 \u043c\u043b\u043d JSON-\u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0443 | ProHoster","og:description":"\u041e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u043d\u043e \u0434\u0435\u0442\u0430\u043b\u044c\u043d\u043e\u0435 \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u043e \u043f\u043e \u0442\u044e\u043d\u0438\u043d\u0433\u0443 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f Linux \u0434\u043b\u044f \u0434\u043e\u0441\u0442\u0438\u0436\u0435\u043d\u0438\u044f \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0439 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 HTTP-\u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432.","og:url":"https:\/\/prohoster.info\/sl\/blog\/news\/optimizacziya-linux-dlya-obrabotki-1-2-mln-json-zaprosov-v-sekundu","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":"2021-05-21T08:23:03+00:00","article:modified_time":"2021-05-21T08:23:03+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"100221","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-05-21 09:18:54","updated":"2026-02-08 20:24:03","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/posts\/100221","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/comments?post=100221"}],"version-history":[{"count":2,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/posts\/100221\/revisions"}],"predecessor-version":[{"id":164272,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/posts\/100221\/revisions\/164272"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/media\/100222"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/media?parent=100221"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/categories?post=100221"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/tags?post=100221"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}