{"id":300,"date":"2005-04-25T00:01:00","date_gmt":"2005-04-25T08:01:00","guid":{"rendered":"http:\/\/netmesh.info\/jernst\/uncategorized\/the-4-point-architecture-for-distributed-software"},"modified":"2011-04-20T16:11:11","modified_gmt":"2011-04-20T23:11:11","slug":"the-4-point-architecture-for-distributed-software","status":"publish","type":"post","link":"https:\/\/upon2020.com\/blog\/2005\/04\/the-4-point-architecture-for-distributed-software\/","title":{"rendered":"The 4-Point Architecture for Distributed Software"},"content":{"rendered":"<p>There is client-server software, and there is peer-to-peer software. Are these two architectures all we ever need for distributed software?<\/p>\n<p>I&#8217;d like to suggest that some of the world&#8217;s most successful distributed software architectures are neither client-server nor peer-to-peer when you look at them closely. They follow an architectural pattern that I&#8217;d like to call the <em>4-Point Architecture<\/em>.<\/p>\n<p>Consider <strong>e-mail<\/strong>, a distributed and network-centric application if there ever was one. To accurately describe how e-mail gets sent from my computer to your computer, we need four computers in the picture (the &#8220;four points&#8221; of this architecture):<\/p>\n<p><a href=\"http:\/\/upon2020.com\/wp-content\/uploads\/2005\/04\/4-point-smtp.gif\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/upon2020.com\/wp-content\/uploads\/2005\/04\/4-point-smtp.gif\" alt=\"\" title=\"4-point-smtp\" width=\"528\" height=\"241\" class=\"aligncenter size-full wp-image-550\" srcset=\"https:\/\/upon2020.com\/blog\/wp-content\/uploads\/2005\/04\/4-point-smtp.gif 528w, https:\/\/upon2020.com\/blog\/wp-content\/uploads\/2005\/04\/4-point-smtp-300x136.gif 300w\" sizes=\"auto, (max-width: 528px) 100vw, 528px\" \/><\/a><\/p>\n<p>In this case, My Computer first hands the e-mail message to my SMTP server through one of several possible protocols (e.g. SMTP, POP, &#8230;). The SMTP server then uses SMTP to send the message to your SMTP server, which in turn holds the message until Your Computer downloads it using a protocol such as POP.<\/p>\n<p>In this architecture, we have elements of both peer-to-peer and client-server: either SMTP server can initiate communication to another SMTP server, which makes them peer-to-peer. (However, SMTP is not a symmetrical protocol, which means we run client-server on top of peer-to-peer.) The relationship between an SMTP server and its client computer is clearly a client-server relationship.<\/p>\n<p>If we redraw the picture in a more generic manner, we arrive at this: (and I will get to the labeling in a second)<\/p>\n<p><a href=\"http:\/\/upon2020.com\/wp-content\/uploads\/2005\/04\/4-point1.gif\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/upon2020.com\/wp-content\/uploads\/2005\/04\/4-point1.gif\" alt=\"\" title=\"4-point\" width=\"528\" height=\"241\" class=\"aligncenter size-full wp-image-551\" srcset=\"https:\/\/upon2020.com\/blog\/wp-content\/uploads\/2005\/04\/4-point1.gif 528w, https:\/\/upon2020.com\/blog\/wp-content\/uploads\/2005\/04\/4-point1-300x136.gif 300w\" sizes=\"auto, (max-width: 528px) 100vw, 528px\" \/><\/a><\/p>\n<p>The 4-Point Architecture is also used by the following technologies:<\/p>\n<ul>\n<li><strong>Jabber\/<a href=\"http:\/\/www.xmpp.org\/\" target=\"_blank\">XMPP<\/a><\/strong> presence and instant messaging. Jabber clients log into Jabber servers using an asymmetrical protocol. Jabber servers talk to each other using a symmetrical protocol. Same picture.<\/li>\n<li><strong>Modern P2P file sharing<\/strong> networks. It turns out that virtually all of them distinguish between regular nodes and super nodes. While the communication between nodes may allow for an entirely peer-to-peer form of communication, in practice only subsets of this protocol are used, making peer-super-peer relationships client-server and super-peer-super-peer relationships peer-to-peer. While dynamic reassignment of roles may take place, they still use the 4-Point Architecture at any point in time.<\/li>\n<li>Update April 25: Of course, blogs work the same way as well: we edit locally on our PCs but publish on visible servers with a defined address.<\/li>\n<li>There are lesser-known ones as well, including what we have in our product.<\/li>\n<\/ul>\n<p>We could call this architecture a mix of client-server and peer-to-peer. However, it comes with some rules that cannot adequately be described without looking at all 4 points of the architecture:<\/p>\n<ul>\n<li>The computers in the first row must be addressable and routable by any other computer in the first row. As a result, they must belong to the &#8220;bright&#8221; internet (i.e. those parts of the internet that can be reliably addressed and found)<\/li>\n<li>No computer in the second row needs to be addressable and routable. To communicate, they must be able to initiate a connection to a bright point, but there is no requirement that a bright node initiate a connection on its own. Therefore, the computers in the second row may belong to the &#8220;dark&#8221; internet (i.e. those parts of the internet that may have rapidly changing IP addresses, are moved quickly from network to network, such as laptops, and generally do not have a well-defined DNS name).<\/li>\n<li>Any dark point only interacts with exactly one bright point (at least for a given application or protocol). It is extremely rare that a dark point interacts with more than one bright point (for a given protocol) for reasons other than basic availability of bright points. Thus the relationship between a bright point and its dark points is a fairly stable one.<\/li>\n<li>No dark point ever interacts directly with another dark point, they always go through their respective bright points first.<\/li>\n<\/ul>\n<p>Why do I think this 4-Point Architecture is important? It&#8217;s important because it is a generally-useful, proven architecture for distributed applications that includes all kinds of devices, not just &#8220;bright&#8221; servers. Some of its benefits are:<\/p>\n<ul>\n<li>It clearly assigns responsibilities: bright points must be stable and available, for example, while dark points need not be.<\/li>\n<li>It enables reliable communication between unreliable dark points that may not even be able to route to each other directly, regardless how much work one was willing to put in.<\/li>\n<li>It allows organizations to specialize: operating a bright point requires a different set of expertise than operating a dark point.<\/li>\n<li>It allows local innovation: if somebody invents IMAP, they can install it locally (between their bright and dark points), without impacting the rest of the network.<\/li>\n<li>It provides clear guidance where to attach logging, approval, quota and so forth functionalities and procedures.<\/li>\n<li>It reduces the requirements on the dark nodes, which are often relatively underpowered devices (e.g. cell phones can send e-mail without having to support the entire SMTP protocol).<\/li>\n<\/ul>\n<p>Watch the 4-Point Architecture to become more prominent going forward in many places &#8230; it simply makes too much sense not to.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>There is client-server software, and there is peer-to-peer software. Are these two architectures all we ever need for distributed software? I&#8217;d like to suggest that some of the world&#8217;s most successful distributed software architectures are neither client-server nor peer-to-peer when you look at them closely. They follow an architectural pattern that I&#8217;d like to call&hellip;<\/p>\n","protected":false},"author":7,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"webmentions_disabled":false,"footnotes":""},"categories":[58],"tags":[],"class_list":["post-300","post","type-post","status-publish","format-standard","hentry","category-big_picture","kind-"],"kind":false,"_links":{"self":[{"href":"https:\/\/upon2020.com\/blog\/wp-json\/wp\/v2\/posts\/300","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/upon2020.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/upon2020.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/upon2020.com\/blog\/wp-json\/wp\/v2\/users\/7"}],"replies":[{"embeddable":true,"href":"https:\/\/upon2020.com\/blog\/wp-json\/wp\/v2\/comments?post=300"}],"version-history":[{"count":2,"href":"https:\/\/upon2020.com\/blog\/wp-json\/wp\/v2\/posts\/300\/revisions"}],"predecessor-version":[{"id":524,"href":"https:\/\/upon2020.com\/blog\/wp-json\/wp\/v2\/posts\/300\/revisions\/524"}],"wp:attachment":[{"href":"https:\/\/upon2020.com\/blog\/wp-json\/wp\/v2\/media?parent=300"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/upon2020.com\/blog\/wp-json\/wp\/v2\/categories?post=300"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/upon2020.com\/blog\/wp-json\/wp\/v2\/tags?post=300"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}