{"id":30785,"date":"2019-10-31T21:37:25","date_gmt":"2019-10-31T18:37:25","guid":{"rendered":"https:\/\/prohoster.info\/blog\/stroitelnye-bloki-raspredelennyh-prilozhenij-nulevoe-priblizhenie\/"},"modified":"2019-10-31T21:37:25","modified_gmt":"2019-10-31T18:37:25","slug":"stroitelnye-bloki-raspredelennyh-prilozhenij-nulevoe-priblizhenie","status":"publish","type":"post","link":"https:\/\/prohoster.info\/nl\/blog\/administrirovanie\/stroitelnye-bloki-raspredelennyh-prilozhenij-nulevoe-priblizhenie","title":{"rendered":"Bouwstenen voor gedistribueerde applicaties. Nulbenadering","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Bouwstenen voor gedistribueerde applicaties. Nulbenadering\" src=\"\/wp-content\/uploads\/2019\/04\/88d4e363538bdfc67690c8339dca790b.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>De wereld staat niet stil. Vooruitgang cre\u00ebert nieuwe technologische uitdagingen. De architectuur van informatiesystemen moet evolueren in overeenstemming met de veranderende eisen. Vandaag gaan we het hebben over gebeurtenisgestuurde architectuur, concurrentie, paralleliteit, asynchroniciteit en hoe je vredig met al deze zaken kunt leven in Erlang.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2 id=\"vvedenie\">Inleiding<\/h2>\n<p><\/p>\n<p>Afhankelijk van de omvang van het te ontwerpen systeem en de eisen daarvoor, kiezen wij, ontwikkelaars, een manier van informatiewisseling in het systeem. In de meeste gevallen kan een schema met een broker, bijvoorbeeld op basis van RabbitMQ of Kafka, een werkbare optie zijn voor de interactie tussen diensten. Maar soms is de stroom van gebeurtenissen, SLA en het niveau van controle over het systeem zodanig dat een kant-en-klare messagingoplossing niet geschikt is. Natuurlijk kan het systeem wat complexer worden door de verantwoordelijkheid voor het transportniveau en het opzetten van een cluster op zich te nemen, bijvoorbeeld met ZeroMQ of nanomsg. Maar als het systeem voldoet aan de doorvoer- en capaciteitsvereisten van een standaard Erlang-cluster, vereist de vraag naar het toevoegen van een extra entiteit een grondige studie en economische rechtvaardiging.<\/p>\n<p><\/p>\n<p>Het onderwerp van reactieve gedistribueerde applicaties is vrij uitgebreid. Om binnen het formaat van een artikel te blijven, zullen we ons vandaag alleen richten op homogene omgevingen gebaseerd op Erlang\/Elixir. Het ecosysteem Erlang\/OTP laat toe om met de minste inspanning een reactieve architectuur te realiseren. Maar in elk geval hebben we een communicatielaag nodig. <\/p>\n<p><\/p>\n<h2 id=\"teoreticheskiy-bazis\">Theoretische basis<\/h2>\n<p><\/p>\n<p>Het ontwerp begint met het bepalen van doelen en beperkingen. Het belangrijkste doel ligt niet in de ontwikkeling om de ontwikkeling. We moeten een veilige en schaalbare tool krijgen, waarop we moderne applicaties van verschillende niveaus kunnen bouwen en, belangrijkste, ontwikkelen: vari\u00ebrend van enkele servers die een klein publiek bedienen en later kunnen uitgroeien tot clusters van 50-60 knooppunten, tot federaties van clusters. Dus het primaire doel is het maximaliseren van de winst door de kosten van ontwikkeling en eigendom van het eindproduct te verlagen.<\/p>\n<p><\/p>\n<p>Laten we vier belangrijke vereisten voor het eindproduct opstellen:<\/p>\n<p><\/p>\n<ul>\n<li><strong>met<\/strong>gebeurtenisgestuurd.<br \/>\nHet systeem is altijd bereid om een stroom van gebeurtenissen te verwerken en de nodige acties uit te voeren;<\/li>\n<li><strong>M<\/strong>schaalbaarheid.<br \/>\nLosse blokken kunnen zowel verticaal als horizontaal worden geschaald. Het hele systeem moet de mogelijkheid hebben voor onbeperkte horizontale groei;<\/li>\n<li><strong>groot aantal partitions.<\/strong>fouttolerantie.<br \/>\nAlle niveaus en diensten moeten in staat zijn om automatisch te herstellen bij storingen;<\/li>\n<li><strong>G<\/strong>egarandeerde responstijd.<br \/>\nTijd is kostbaar en gebruikers mogen niet te lang wachten.<\/li>\n<\/ul>\n<p><\/p>\n<p>Vergeet het oude sprookje over \u201cThe little engine that could\u201d, ook bekend als \u201cDe trein die het kon\u201d? Om het ontworpen systeem succesvol uit de prototypefase te laten komen en progressief te zijn, moet de basis voldoen aan minimale eisen. <strong>KON<\/strong>.<\/p>\n<p><\/p>\n<p>Aan messaging als een infrastructuurtool en basis voor alle diensten wordt nog een punt toegevoegd: gebruiksgemak voor programmeurs.<\/p>\n<p><\/p>\n<h3 id=\"orientirovannost-na-sobytiya\">Gebeurtenisgerichtheid.<\/h3>\n<p><\/p>\n<p>Om een applicatie te laten groeien van \u00e9\u00e9n <a class=\"wpil_keyword_link\" href=\"https:\/\/prohoster.info\/nl\/server\/dts-los-angeles\/\"   title=\"de server\" data-wpil-keyword-link=\"linked\"  data-wpil-monitor-id=\"3480\">de server<\/a> tot een cluster, moet de architectuur zorgen voor losse koppeling. Dit wordt bereikt door een asynchrone model. Daarbij zorgen de afzender en ontvanger voor de informatiebelasting van het bericht en maken zich geen zorgen over de overdracht en routering binnen het systeem.<\/p>\n<p><\/p>\n<h3 id=\"masshtabiruemost\">Schaalbaarheid<\/h3>\n<p><\/p>\n<p>Schaalbaarheid en effici\u00ebntie van het systeem gaan hand in hand. De componenten van de applicatie moeten in staat zijn om alle beschikbare bronnen te benutten. Hoe effici\u00ebnter we de capaciteiten kunnen benutten en hoe optimaler onze verwerkingsmethoden zijn, des te minder geld we uitgeven aan hardware. <\/p>\n<p><\/p>\n<p>Binnen \u00e9\u00e9n machine cre\u00ebert Erlang een hoogconcurrerende omgeving. De balans tussen concurrentie en paralleliteit kan worden ingesteld door het aantal systeemthreads dat beschikbaar is voor de Erlang VM en het aantal planners dat deze threads benut.<br \/>\nErlang-processen hebben geen gedeelde toestand en werken in een niet-blokkerende modus. Dit zorgt voor relatief lage latentie en een hogere doorvoer dan traditionele applicaties die zijn gebouwd op blokkerende synchronisatie. De planner van Erlang zorgt voor een eerlijke verdeling van CPU en IO, en het ontbreken van blokkeringen stelt de applicatie in staat om zelfs in piekbelastingen of bij storingen te reageren. <\/p>\n<p><\/p>\n<p>Op cluster level bestaat er ook een probleem met de benutting. Het is belangrijk dat alle machines in de cluster gelijkmatig belast zijn en dat het netwerk niet overbelast is. Stel je de situatie voor: gebruikersverkeer komt binnen op de inkomende load balancers (haproxy, nginx, enz.), die de verzoeken zo gelijkmatig mogelijk verdelen over een set beschikbare backends. Binnen de infrastructuur van de applicatie is de service die de vereiste interface implementeert \u2013 dit is slechts de laatste mijl, en deze moet een aantal andere services aanroepen om op het oorspronkelijke verzoek te kunnen antwoorden. Interne verzoeken vereisen ook routering en balans.<br \/>\nOm datastromen effectief te beheren, moet messaging ontwikkelaars een interface bieden voor het beheersen van de routering en het verdelen van de belasting. Daardoor kunnen ontwikkelaars, gebruikmakend van microservice-patronen (aggregator, proxy, chain, branch, enz.), zowel standaard taken als zeldzaam voorkomende problemen oplossen. <\/p>\n<p><\/p>\n<p>Vanuit zakelijk perspectief is schaalbaarheid een van de instrumenten voor risicobeheer. Het belangrijkste is om aan de wensen van klanten te voldoen en daarbij de apparatuur optimaal te gebruiken:<\/p>\n<p><\/p>\n<ul>\n<li>Bij een grotere capaciteit van de apparatuur als gevolg van vooruitgang. Het zal niet idle zijn vanwege de tekortkomingen van de software. Erlang schaalt uitstekend verticaal en kan altijd alle CPU-kernen en beschikbare geheugen benutten;<\/li>\n<li>In cloudomgevingen kunnen we het aantal apparaten beheren op basis van de huidige of verwachte belasting en SLA garanderen.<\/li>\n<\/ul>\n<p><\/p>\n<h3 id=\"otkazoustoychivost\">Resilience<\/h3>\n<p><\/p>\n<p>Laten we twee axioma's beschouwen: \"Fouten zijn onaanvaardbaar\" en \"Fouten zullen altijd gebeuren\". Voor een bedrijf betekent een softwarefout verlies van geld, wat nog erger is - het verlies van reputatie. Door te balanceren tussen mogelijke verliezen en de kosten van het ontwikkelen van fouttolerante software, kan vaak een compromis worden gevonden.<\/p>\n<p><\/p>\n<p>Op korte termijn bespaart een architectuur met ingebouwde fouttolerantie kosten voor de aanschaf van kant-en-klare clusteringoplossingen. Deze zijn duur en bevatten ook fouten.<br \/>\nOp lange termijn betaalt een fouttolerante architectuur zich multiple times terug in alle fasen van ontwikkeling.<br \/>\nMessaging binnen de codebasis is nog in ontwikkeling en stelt ons in staat om de interactie tussen componenten binnen het systeem gedetailleerd uit te werken. Dit vereenvoudigt het reageren op en beheren van storingen, aangezien alle betrokken componenten fouten verwerken en het uiteindelijke systeem weet hoe het automatisch kan terugkeren naar een normale toestand na een storing zoals bedoeld.<\/p>\n<p><\/p>\n<h3 id=\"otzyvchivost\">Responsiviteit<\/h3>\n<p><\/p>\n<p>Ongeacht storingen moet de applicatie reageren op verzoeken en voldoen aan de SLA. De realiteit is dat mensen niet willen wachten, dus moet het bedrijf zich aanpassen. Van een toenemend aantal applicaties wordt hoge responsiviteit verwacht.<br \/>\nResponsieve applicaties werken in een bijna realtime modus. Erlang VM functioneert in een modus voor zachte realtime. Voor sommige gebieden, zoals aandelenhandel, gezondheidszorg en industri\u00eble apparatuurbeheer, is een strikte realtime modus belangrijk.<br \/>\nResponsieve systemen verbeteren de gebruikerservaring en zijn nuttig voor het bedrijf.<\/p>\n<p><\/p>\n<h2 id=\"predvaritelnyy-itog\">Tussentijdse conclusie<\/h2>\n<p><\/p>\n<p>Bij het plannen van dit artikel wilde ik mijn ervaring delen over het cre\u00ebren van een berichtbroker en het bouwen van complexe systemen daarop. Maar het theoretische en motiverende deel is behoorlijk uitgebreid geworden.<br \/>\nIn het tweede deel van het artikel zal ik de nuances van de implementatie van uitwisselingspunten, sjablonen voor berichtuitwisseling en hun toepassing bespreken.<br \/>\nIn het derde deel zullen we algemene vragen over de organisatie van diensten, routering en balancering behandelen. We zullen het hebben over de praktische kant van schaalbaarheid en foutbestendigheid van systemen.<\/p>\n<p><\/p>\n<p>Einde van het eerste deel.<\/p>\n<p><\/p>\n<p>Foto <noindex><a rel=\"nofollow\" href=\"https:\/\/unsplash.com\/photos\/SRjZtxsK3Os\">@lucabravo<\/a><\/noindex>.<\/p>\n<p>Bron: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/446028\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041c\u0438\u0440 \u043d\u0435 \u0441\u0442\u043e\u0438\u0442 \u043d\u0430 \u043c\u0435\u0441\u0442\u0435. \u041f\u0440\u043e\u0433\u0440\u0435\u0441\u0441 \u0441\u043e\u0437\u0434\u0430\u0435\u0442 \u043d\u043e\u0432\u044b\u0435 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0432\u044b\u0437\u043e\u0432\u044b. \u0412 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0438 \u0441 \u0438\u0437\u043c\u0435\u043d\u0438\u0432\u0448\u0438\u043c\u0438\u0441\u044f \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f\u043c\u0438, \u0434\u043e\u043b\u0436\u043d\u0430 \u044d\u0432\u043e\u043b\u044e\u0446\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c. \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0433\u043e\u0432\u043e\u0440\u0438\u0442\u044c \u043e \u0441\u043e\u0431\u044b\u0442\u0438\u0439\u043d\u043e-\u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0435, \u043a\u043e\u043d\u043a\u0443\u0440\u0435\u043d\u0442\u043d\u043e\u0441\u0442\u0438, \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438, \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e\u0441\u0442\u0438 \u0438 \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u0432 Erlang \u043c\u043e\u0436\u043d\u043e \u0441\u043e \u0432\u0441\u0435\u043c \u044d\u0442\u0438\u043c \u0436\u0438\u0442\u044c \u043c\u0438\u0440\u043d\u043e. \u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0412 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u0443\u0435\u043c\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0438 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u0439 \u043a \u043d\u0435\u0439, \u043c\u044b, [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":22770,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-30785","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.3 - aioseo.com -->\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\/nl\/blog\/administrirovanie\/stroitelnye-bloki-raspredelennyh-prilozhenij-nulevoe-priblizhenie\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"nl_NL\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u0421\u0442\u0440\u043e\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0431\u043b\u043e\u043a\u0438 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439. \u041d\u0443\u043b\u0435\u0432\u043e\u0435 \u043f\u0440\u0438\u0431\u043b\u0438\u0436\u0435\u043d\u0438\u0435 | ProHoster\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/nl\/blog\/administrirovanie\/stroitelnye-bloki-raspredelennyh-prilozhenij-nulevoe-priblizhenie\" \/>\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:37:25+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T18:37:25+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47 Bouwstenen van gedistribueerde applicaties. Nulbenadering | ProHoster","description":"","canonical_url":"https:\/\/prohoster.info\/nl\/blog\/administrirovanie\/stroitelnye-bloki-raspredelennyh-prilozhenij-nulevoe-priblizhenie","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"nl_NL","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u0421\u0442\u0440\u043e\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0431\u043b\u043e\u043a\u0438 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439. \u041d\u0443\u043b\u0435\u0432\u043e\u0435 \u043f\u0440\u0438\u0431\u043b\u0438\u0436\u0435\u043d\u0438\u0435 | ProHoster","og:url":"https:\/\/prohoster.info\/nl\/blog\/administrirovanie\/stroitelnye-bloki-raspredelennyh-prilozhenij-nulevoe-priblizhenie","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:37:25+00:00","article:modified_time":"2019-10-31T18:37:25+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"30785","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-02-22 15:31:13","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 03:29:56","updated":"2026-02-22 15:31:13","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/posts\/30785","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/comments?post=30785"}],"version-history":[{"count":1,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/posts\/30785\/revisions"}],"predecessor-version":[{"id":162006,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/posts\/30785\/revisions\/162006"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/media\/22770"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/media?parent=30785"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/categories?post=30785"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/tags?post=30785"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}