{"id":434,"date":"2023-10-05T20:59:00","date_gmt":"2023-10-05T18:59:00","guid":{"rendered":"https:\/\/djax.se\/blog\/?p=434"},"modified":"2023-10-05T20:59:00","modified_gmt":"2023-10-05T18:59:00","slug":"att-tanka-pa-nar-system-skall-kopplas-ihop","status":"publish","type":"post","link":"https:\/\/djax.se\/?p=434","title":{"rendered":"Att t\u00e4nka p\u00e5 n\u00e4r system skall kopplas ihop"},"content":{"rendered":"\n<p>Alla digitaliseringsresor bygger p\u00e5 osp\u00e4nnande integration av samtliga mjukvaror. Det \u00e4r h\u00e4r komplexiteten underskattas.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>Your integration strategy is the key architectural component to organizational agility.<\/p>\n<\/blockquote>\n\n\n\n<p>Det finns hur m\u00e5nga program som helst att k\u00f6pa, i alla m\u00f6jliga storlekar och former, men integration <a href=\"https:\/\/martinfowler.com\/articles\/cant-buy-integration.html\" data-type=\"link\" data-id=\"https:\/\/martinfowler.com\/articles\/cant-buy-integration.html\">kan du inte g\u00e5 ut och k\u00f6pa<\/a>.<\/p>\n\n\n\n<p>I de allra flesta organisationer finns en stor samling mjukvaror. F\u00f6rhoppningsvis har varje mjukvara ett prim\u00e4rt syfte som knappt \u00f6verlappas av n\u00e5got annat program. Men oundvikligen blir en del av informationen \u00e4nd\u00e5 dubbelt representerad tv\u00e4rg\u00e5ende genom flera system, s\u00e5som anv\u00e4ndare eller artiklar. <\/p>\n\n\n\n<p>Ge upp direkt att f\u00f6rs\u00f6ka underh\u00e5lla skapandet, \u00e4ndringen och borttagandet av denna redundanta data med manuella processer. Information som finns representerad p\u00e5 flera st\u00e4llen (som inte erh\u00e5ller den p\u00e5 automatiskt vis via integration) \u00e4r det som h\u00e5rdast b\u00f6r jagas och utrotas. En <a href=\"https:\/\/en.wikipedia.org\/wiki\/Database_normalization\">normalisering <\/a>p\u00e5 organisationsniv\u00e5.<\/p>\n\n\n\n<p>Det som f\u00f6ljer \u00e4r fr\u00e5gest\u00e4llningar som b\u00f6r st\u00e4llas inf\u00f6r all systemintegration. Bygger du microtj\u00e4nster eller saker i molnet ang\u00e5r detta dig ocks\u00e5 f\u00f6r d\u00e5 har du frivilligt valt att introducera n\u00e4tverkshopp \ud83d\ude42<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Datamodellen<\/h2>\n\n\n\n<p>Vilka abstraktioner arbetar systemen med? \u00c4r det sj\u00e4lvklart att x \u00e4r samma som x i det andra systemet? Finns det begr\u00e4nsningar i hur det ena systemet representerat x som inte finns i det andra systemet?<\/p>\n\n\n\n<p>\u00c4r det m\u00f6jligt att ut\u00f6ka systemens modeller av n\u00e5gon annan \u00e4n systemutvecklaren?<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>We need to invert the mindset, from thinking of how to solve integration problems with our tools to instead thinking of how to build the right interfaces to maximize agility<\/p>\n<cite><a href=\"https:\/\/martinfowler.com\/articles\/cant-buy-integration.html#TreatIntegrationAsStrategicToYourBusiness\" data-type=\"link\" data-id=\"https:\/\/martinfowler.com\/articles\/cant-buy-integration.html#TreatIntegrationAsStrategicToYourBusiness\">Brandon Byars<\/a><\/cite><\/blockquote>\n\n\n\n<p>Kan systemen \u00e4ndras och uppdateras oberoende av det andra systemet? Med andra ord \u00e4r gr\u00e4nssnittet stabilt och v\u00e4lformat till r\u00e4tt abstraktionsniv\u00e5 utan att systemen har sina fingrar l\u00e5ngt inne i varandra och f\u00f6r evigt kr\u00e4ver en stel synkroniserad dans vid varje f\u00f6r\u00e4ndring?<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u00d6verf\u00f6ringss\u00e4tt<\/h2>\n\n\n\n<p>Kan b\u00e5da systemet initiera \u00f6verf\u00f6ringen till det andra n\u00e4rsomhelst? Eller pollar ett av systemen det andra? Finns det risk att n\u00e5gon h\u00e4ndelse missas mellan pollningarna?<\/p>\n\n\n\n<p>Vilken garanti finns att meddelandet kommer fram? Du k\u00e4nner v\u00e4l till hur sv\u00e5rt det \u00e4r att garantera att ett meddelande kommer fram exakt en g\u00e5ng?<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<pre class=\"wp-block-code\"><code><strong>At-most-once delivery<\/strong>. This means that a message will never be delivered more than once but messages might be lost.\n<strong>At-least-once delivery<\/strong>. This means that we'll never lose a message but a message might end up being delivered to a consumer more than once.\n<strong>Exactly-once delivery<\/strong>. The <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-tertiary-color\"><strong>holy grail<\/strong><\/mark> of messaging. All messages will be delivered exactly one time.<\/code><\/pre>\n<cite><a href=\"https:\/\/jack-vanlightly.com\/blog\/2017\/12\/15\/rabbitmq-vs-kafka-part-4-message-delivery-semantics-and-guarantees\">https:\/\/jack-vanlightly.com\/blog\/2017\/12\/15\/rabbitmq-vs-kafka-part-4-message-delivery-semantics-and-guarantees<\/a><\/cite><\/blockquote>\n\n\n\n<p>Batchas flera \u00f6verf\u00f6ringar ihop eller sker s\u00e4ndning realtidsliknande?<\/p>\n\n\n\n<p>Har systemen uttalade s\u00e4tt (API) att integrera mot andra mjukvaror? Eller skall \u00e4ndringar detekteras <a href=\"https:\/\/debezium.io\/documentation\/faq\/#what_is_change_data_capture\">direkt i databasen<\/a>?<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>An ugly system is one in which there are special interfaces for everything you want to do. Unix is the opposite. It gives you the building blocks that are sufficient for doing everything. That&#8217;s what having a clean design is all about<\/p>\n<cite>Linus Torvalds<\/cite><\/blockquote>\n\n\n\n<p>I fallet n\u00e4r data skall h\u00e5llas synkroniserad, hur vet vi att den \u00e4r det efter en viss tid har f\u00f6rflutit? Skall data g\u00e5 \u00e5t b\u00e5de h\u00e5len eller kan l\u00f6sningen f\u00f6renklas genom att det ena systemet enbart &#8221;speglas&#8221; fr\u00e5n det andra?<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Kommunikationss\u00e4tt<\/h2>\n\n\n\n<p>Kan systemen prata samma &#8221;protokoll&#8221; direkt med varandra eller beh\u00f6vs ytterligare n\u00e5gon \u00f6vers\u00e4ttningsmjukvara emellan? (applicera d\u00e5 alla fr\u00e5gest\u00e4llningar i detta inl\u00e4gg p\u00e5 \u00f6verf\u00f6ringen mellan k\u00e4llsystemet och bryggan samt fr\u00e5n bryggan till m\u00e5lsystemet)<\/p>\n\n\n\n<p>Kan mottagande system \u00f6verbelastas av s\u00e4ndaren?<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Driften<\/h2>\n\n\n\n<p>Klarar b\u00e5da systemen att det andra f\u00f6rsvinner en kort eller l\u00e5ng stund? Vad h\u00e4nder med meddelanden som borde skickats under denna tid?<\/p>\n\n\n\n<p>Sparas de och skickas om automatiskt eller manuellt? \u00c4r det ens relevant att skicka om meddelandet eller skall ett nytt skapas?<\/p>\n\n\n\n<p>Hur skall respektive systems \u00f6verf\u00f6ringar \u00f6vervakas? Vad blir konsekvensen av en integration som fallerar?<\/p>\n\n\n\n<p>Ansvarar systemet som blir anropat f\u00f6r att inte l\u00e4mna sig sj\u00e4lv i ett icke-logiskt skick ifall anropet av n\u00e5gon anledning inte exekveras f\u00e4rdigt framg\u00e5ngsrikt?<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Implementationen<\/h2>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>General purpose languages excel at programming over time<\/p>\n\n\n\n<p>The ecosystems with general purpose programming languages evolve at a rapid clip. Advances in testing tools, IDEs, observability tools, and better abstractions benefit from the sheer scale of the community such languages operate in. Low-code platforms have much smaller ecosystems, limiting the ability to advance at the same pace.<\/p>\n<cite><a href=\"https:\/\/martinfowler.com\/articles\/cant-buy-integration.html#TreatIntegrationAsStrategicToYourBusiness\" data-type=\"link\" data-id=\"https:\/\/martinfowler.com\/articles\/cant-buy-integration.html#TreatIntegrationAsStrategicToYourBusiness\">Brandon Byars<\/a><\/cite><\/blockquote>\n\n\n\n<p>Anv\u00e4nd vanliga programmeringsspr\u00e5k och l\u00e4r dig de vanliga designm\u00f6nstren f\u00f6r integration.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/www.enterpriseintegrationpatterns.com\/patterns\/messaging\/\"><img loading=\"lazy\" decoding=\"async\" width=\"874\" height=\"489\" src=\"http:\/\/localhost:8081\/wp-content\/uploads\/2023\/10\/firefox_09Lm5tylZl.png\" alt=\"\" class=\"wp-image-449\" srcset=\"https:\/\/djax.se\/wp-content\/uploads\/2023\/10\/firefox_09Lm5tylZl.png 874w, https:\/\/djax.se\/wp-content\/uploads\/2023\/10\/firefox_09Lm5tylZl-300x168.png 300w, https:\/\/djax.se\/wp-content\/uploads\/2023\/10\/firefox_09Lm5tylZl-768x430.png 768w\" sizes=\"auto, (max-width: 874px) 100vw, 874px\" \/><\/a><\/figure>\n\n\n\n<p>2003 kom boken <em>Enterprise Integration Patterns<\/em> ut som beskriver alla m\u00f6nster i bilden ovan. Den kan k\u00e4nnas dammig nu men faktum \u00e4r att den tillsammans med lite nya &#8221;<a href=\"https:\/\/learn.microsoft.com\/en-us\/azure\/architecture\/patterns\/\">Cloud Design Patterns<\/a>&#8221; \u00e4r lika aktuell i dagens systemutveckling d\u00e5 det fastslagits att varenda minsta applikation skall vara distribuerade p\u00e5 n\u00e5got s\u00e4tt.  Antingen med en frontend i webbl\u00e4saren, mikrotj\u00e4nster, koppling till LLM eller en samling ihopkopplade l\u00f6sningar hos molnleverant\u00f6ren.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>You can\u2019t buy integration, but that\u2019s OK; it\u2019s worth the investment to build it yourself. After all, it may be the most strategic software in your portfolio<\/p>\n<cite><a href=\"https:\/\/martinfowler.com\/articles\/cant-buy-integration.html#TreatIntegrationAsStrategicToYourBusiness\" data-type=\"link\" data-id=\"https:\/\/martinfowler.com\/articles\/cant-buy-integration.html#TreatIntegrationAsStrategicToYourBusiness\">Brandon Byars<\/a><\/cite><\/blockquote>\n\n\n\n<h2 class=\"wp-block-heading\">Mera l\u00e4sning<\/h2>\n\n\n\n<p><a href=\"https:\/\/martinfowler.com\/articles\/cant-buy-integration.html#GeneralPurposeLanguagesExcelAtProgrammingOverTime\">You Can&#8217;t Buy Integration<\/a><\/p>\n\n\n\n<p><a href=\"https:\/\/learn.microsoft.com\/en-us\/azure\/architecture\/patterns\/\">Cloud Design Patterns<\/a><\/p>\n\n\n\n<p><a href=\"https:\/\/www.enterpriseintegrationpatterns.com\/patterns\/messaging\/\">Enterprise Integration Patterns<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Alla digitaliseringsresor bygger p\u00e5 osp\u00e4nnande integration av samtliga mjukvaror. Det \u00e4r h\u00e4r komplexiteten underskattas. Your integration strategy is the key architectural component to organizational agility. Det finns hur m\u00e5nga program som helst att k\u00f6pa, i alla m\u00f6jliga storlekar och former, men integration kan du inte g\u00e5 ut och k\u00f6pa. I de allra flesta organisationer finns [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":440,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5],"tags":[],"class_list":["post-434","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-systemutveckling"],"_links":{"self":[{"href":"https:\/\/djax.se\/index.php?rest_route=\/wp\/v2\/posts\/434","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/djax.se\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/djax.se\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/djax.se\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/djax.se\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=434"}],"version-history":[{"count":0,"href":"https:\/\/djax.se\/index.php?rest_route=\/wp\/v2\/posts\/434\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/djax.se\/index.php?rest_route=\/wp\/v2\/media\/440"}],"wp:attachment":[{"href":"https:\/\/djax.se\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=434"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/djax.se\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=434"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/djax.se\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=434"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}