{"id":1901,"date":"2018-07-26T14:00:35","date_gmt":"2018-07-26T14:00:35","guid":{"rendered":"http:\/\/capture.ccio.us\/?p=1901"},"modified":"2018-07-31T23:29:43","modified_gmt":"2018-07-31T23:29:43","slug":"tame-truly-asynchronous-messaging-environment","status":"publish","type":"post","link":"https:\/\/capture.club\/portal\/2018\/07\/26\/tame-truly-asynchronous-messaging-environment\/","title":{"rendered":"TAME: Truly Asynchronous Messaging Environment"},"content":{"rendered":"<body><p><\/p><img decoding=\"async\" class=\"aligncenter wp-image-1902 size-medium\" src=\"http:\/\/capture.ccio.us\/wp-content\/uploads\/2018\/07\/1-300x169.jpg\" alt=\"TAME: The Truly Asynchronous Architecture. \" width=\"300\" height=\"169\" loading=\"lazy\">\n<p>When we talk about asynchronous communication on the internet, we\u2019re not really talking about pure asynchronicity.\u00a0 \u00a0When a JavaScript client makes a standard <a href=\"https:\/\/en.wikipedia.org\/wiki\/Ajax_(programming)\">AJAX<\/a> request, it is waiting for a response \u2014 a single response \u2014 and that completes that particular communication event.\u00a0 The reason this is called \u201casynchronous\u201d is because it happens after the page has loaded, and may re-occur at any given time.\u00a0 Still, it remains a basic 1:1 relationship of request:response.\u00a0 While this is effective for most <a href=\"https:\/\/en.wikipedia.org\/wiki\/Single-page_application\">Single Page Applications (SPA)<\/a>, it does not often lend itself to the more non-linear and\/or time consuming tasks of Machine Learning, Predictive Analytics, Data Warehousing, Deep Learning, and so on.\u00a0 These types of solutions require a non-linear communication methodology capable of carrying on an extended conversation with any given set of internal or external services, and communicate amongst themselves internally to share relevant discoveries that may be uncovered during a time consuming \u2014 or on-going \u2014 set of tasks.<\/p>\n<h3>TAME rises\u2026<\/h3>\n<p>With this in mind, Capture Club developed the concept of a <strong>Truly Asynchronous Messaging Environment (TAME)<\/strong> several years ago when tasked with integrating a variety of disparate systems.\u00a0 These systems had different data models, authentication schemes, end point access gateways, APIs, and so on.\u00a0 We needed to be able to kick-off processes that may take some time, and be able to \u201cpeek\u201d into that process at any given time, and provide status updates.\u00a0 We needed to accommodate users of varying skill sets and with varying backgrounds.\u00a0 In this case, we extended the TAME protocol and used the <a href=\"http:\/\/capture.ccio.us\/zen\/\">ZEN<\/a> interface to provide periodic status updates to the users via a variety of communication methods.\u00a0 The users could interact with ZEN by simply typing into a search box, or using <a href=\"https:\/\/en.wikipedia.org\/wiki\/Natural_language_processing\">Natural Language Processing<\/a>.\u00a0 On the back end, the TAME architecture enabled users to interact with remote web sites, creating or modifying active advertising campaigns from a single location.\u00a0 From their, the system would push values out to sites like TradeDesk, etc, allowing campaign managers to rapidly modify the attributes of a given campaign.<\/p>\n<h3>TAME, untamed\u2026<\/h3>\n<p>TAME relies on a communication model similar to, but distinct from, the way chat servers operate.\u00a0 When an agent needs to run an extended task requiring more than 1 response, it opens a private, secure channel with the orchestrator.\u00a0 The orchestrator is an elected leader, similar to the concept used in Apache\u2019s <a href=\"https:\/\/zookeeper.apache.org\/\">Zookeeper<\/a>.\u00a0 It\u2019s important to note here that this is not a hub-&gt;spoke relationship.\u00a0 The orchestrator is a task like any other, but it asserts an ad hoc leadership for the duration of the event.\u00a0 Generally speaking, the orchestrator would be the first task initiated.\u00a0 This task would use data gathered from other running tasks to produce the final result.\u00a0 The beauty of TAME is that it still very happily completes a single request:response event, but can also carry on the conversation for an indefinite period of time, all the while running a variety of supplementary tasks concurrently.<\/p>\n<\/body>","protected":false},"excerpt":{"rendered":"<p>When we talk about asynchronous communication on the internet, we\u2019re not really talking about pure asynchronicity.\u00a0 \u00a0When a JavaScript client makes a standard AJAX request, it is waiting for a response \u2014 a single response \u2014 and that completes that particular communication event.\u00a0 The reason this is called \u201casynchronous\u201d is because it happens after the [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"pagelayer_contact_templates":[],"_pagelayer_content":"","footnotes":""},"categories":[],"tags":[],"class_list":["post-1901","post","type-post","status-publish","format-standard","hentry"],"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/capture.club\/portal\/wp-json\/wp\/v2\/posts\/1901","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/capture.club\/portal\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/capture.club\/portal\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/capture.club\/portal\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/capture.club\/portal\/wp-json\/wp\/v2\/comments?post=1901"}],"version-history":[{"count":0,"href":"https:\/\/capture.club\/portal\/wp-json\/wp\/v2\/posts\/1901\/revisions"}],"wp:attachment":[{"href":"https:\/\/capture.club\/portal\/wp-json\/wp\/v2\/media?parent=1901"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/capture.club\/portal\/wp-json\/wp\/v2\/categories?post=1901"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/capture.club\/portal\/wp-json\/wp\/v2\/tags?post=1901"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}