<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:media="http://search.yahoo.com/mrss/"><channel><title><![CDATA[Just Enough Architecture]]></title><description><![CDATA[Structures, Stories, Guidance for Strategists & Enterprise Architects]]></description><link>https://just.graphica.com.au/</link><image><url>https://just.graphica.com.au/favicon.png</url><title>Just Enough Architecture</title><link>https://just.graphica.com.au/</link></image><generator>Ghost 5.46</generator><lastBuildDate>Sat, 16 May 2026 05:43:50 GMT</lastBuildDate><atom:link href="https://just.graphica.com.au/rss/" rel="self" type="application/rss+xml"/><ttl>60</ttl><item><title><![CDATA[GSMA/LF Networking Anuket - Reference Models]]></title><description><![CDATA[An update on Anuket Reference Model contributions and general discussion on value of models]]></description><link>https://just.graphica.com.au/anuket-reference-models/</link><guid isPermaLink="false">6469847f76e6920438e6d148</guid><category><![CDATA[models]]></category><category><![CDATA[Anuket]]></category><category><![CDATA[enterprise architecture]]></category><category><![CDATA[LF Networking]]></category><category><![CDATA[mult-cloud]]></category><category><![CDATA[storage]]></category><dc:creator><![CDATA[John Hartley]]></dc:creator><pubDate>Fri, 10 Mar 2023 02:27:14 GMT</pubDate><media:content url="https://just.graphica.com.au/content/images/2023/03/universal-turing-machine-01.png" medium="image"/><content:encoded><![CDATA[<img src="https://just.graphica.com.au/content/images/2023/03/universal-turing-machine-01.png" alt="GSMA/LF Networking Anuket - Reference Models"><p>Lets start with a couple of quotes:</p><ul><li>&quot;Many companies attack the enterprise architecture excercise with lots of drawings and analysis of both existing and hoped-for systems capabilites. &#xA0;... While the architecure for a new building is captured in blue-prints, enterprise architecture is often represented in principles, policies, and technology choices. Thus the conept can be difficult for managers to get their arms around. We have found that a simple picture, which we refer to as the &quot;core diagram&quot; helps managers debate and eventually come to understand their company&apos;s enterprise architecture.&quot;</li></ul><p>This is an &quot;oldie&quot; taken from &quot;Enterprise Architecture as Strategy&quot;. The reason I am referencing it, is due to its statement of the value of a &#xA0;&quot;simple picture&quot; and &quot;core diagram&quot;.</p><p>This blog is broadly about &quot;models&quot; and why they are valuable (some don&apos;t even get out of bed for less than $10,000 a day ;-) ). The examples are primarily taken from work I contributed to the &quot;LNF/GSMA Anuket Reference Model&quot;.</p><p><strong>Status: March 2023</strong> - Writing done, now reviewing. </p><hr><h2 id="models-work-and-value">Models, Work and Value</h2><p>It is always good to have a clear understanding of subject at hand, so from the Oxford Dictionary.</p><p>Model (noun) - via <a href="https://www.oxfordlearnersdictionaries.com/definition/english/the-oxford-english-dictionary?ref=just.graphica.com.au">Oxford</a> on iPhone:</p><ul><li>a three-dimensional representation of a person or things or of a proposed structure, typically on a smaller scale than the original</li><li>a thing used as an example to follow or imitate</li><li>a simplified description, especially a mathemetical one, of a system or process, to assist calculations and predictions</li><li>a person employed to display clothes by wearing them</li><li>a particular design or version of a product</li></ul><p>If your an architect of &quot;things&quot; (buildings, systems, towns, enterprises), then you need to be a modeller.</p><p>The reason for modelling (confirmed via <a href="https://soapbox.graphica.com.au/something-topical-chatgpt/?ref=just.graphica.com.au">ChatGPT</a> ;-) ) is that it:</p><ul><li>is Essential for Understanding and Communications - I put these together, as it could be that a person has a complete understanding and the only model is the one that they maintain in their head, but if they want to communicate and share that understanding or get input into whether their model is correct then it has to be communicated and so the model moves from idea to artifact or object. Which leads to ...</li><li>is Essential for Analysis - once formulated and communicated the model supports analysis and can be used to validate and test whether the real system will behave and perform as expected and importantly the analysis includes validation and elaboration of the model itself. The result is an improved (better) model, with broader coverage of scenarios for analysis and in it&apos;s ability to support understanding across the target audience</li><li>can Predict - a model can provide direct predication/s. This is distinct from analysis, where the model is an input into a stakeholder/audience prediction rather than a source of prediction. A simple example from Newtoninan physics: v = u + at where v == final velocity, u == initial velocity, a == acceleration, t == time, provides a prediction (proven many times over, in its domain) of the velocity that an object will be moving at after acellerating for some time.</li><li>is Economically Prudent - it is cheaper and faster to first create and validate via a model than via the real thing. &#xA0;However be aware that only the real thing can be used to determine if the model was correct or not. This is evident with every systems investment, where you will need a model of the goal, a model of the cost and a model of the timeline (plan). Without these very few (or should I say a vanishingly small number ;-) ) will be provided funding to go from model to realisation.</li></ul><p>These points get to the value of a model (and indirectly to the value of doing architecture).</p><p>In the realm of IT Architecture, Enterprise Architecture and Business Architecture, what are the common characteristics of models:</p><ul><li>Invariant Models - these are models of domain which are invariant within a domain and the same model is used across multiple organisations and instances. Well know examples include TMF Open Digital Architecture &#xA0;(<a href="https://www.tmforum.org/oda/?ref=just.graphica.com.au">ODA</a>) (Telco) or the BIAN (Banking Industry Architecture Network) <a href="https://bian.org/servicelandscape-11-0-0/?ref=just.graphica.com.au">Models</a> (Banking) which are Enterprise Architecture Industry Models and the &quot;Canonical Web Architecture&quot; for a generalised view of Web Application Architecture. As the model is &#xA0;invariant it is very useful for: analsysis of relative performance across cases, as a starting point for understanding and realisation of specific implementation and for analysis of implementation alternatives (option definition and selection). While at IBM, I was co-author in definition of BizADS (Business Architecture Description Standard), which aimed to define a model for the general description of business. This was another example of an invariant model, starting with generic demand and intent and executing a plan, transform and operate cycle:</li></ul><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://just.graphica.com.au/content/images/2023/03/bizads-demand-intent-01.png" class="kg-image" alt="GSMA/LF Networking Anuket - Reference Models" loading="lazy" width="712" height="634" srcset="https://just.graphica.com.au/content/images/size/w600/2023/03/bizads-demand-intent-01.png 600w, https://just.graphica.com.au/content/images/2023/03/bizads-demand-intent-01.png 712w"><figcaption>IBM BizADS - Defined a model for business</figcaption></figure><ul><li>Specific Model - these are models which are specific to an organisation or particular implementation. The focus here is to help understand and communicate the specifics of a particular organisation or systems. This is the type of model that is shown in the case studies of &quot;Enterprise Archtecture as Strategy&quot; (quoted at the beginning of this blog) &quot;core diagram&quot;. Here is an example for &quot;bitCo&quot;. The aim was to distill: its ownership and publicly stated charter and the key business measures against this, the product BitCo sells and its go to market model, as well as it key suppliers and partners:</li></ul><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://just.graphica.com.au/content/images/2023/03/bitco-core-diagram-01.png" class="kg-image" alt="GSMA/LF Networking Anuket - Reference Models" loading="lazy" width="960" height="720" srcset="https://just.graphica.com.au/content/images/size/w600/2023/03/bitco-core-diagram-01.png 600w, https://just.graphica.com.au/content/images/2023/03/bitco-core-diagram-01.png 960w" sizes="(min-width: 720px) 720px"><figcaption>Example - Specific Model Enterprise Model</figcaption></figure><ul><li>Scope, Focus &amp; Abstraction - there are a common set of modelling tools that are used irrespective of what is being modelled. This includes process and data modeling. Case in point is UML (Unified Modeling Language) based tools for systems implementation models as well as enterprise and business domain modeling (both TMF ODA Telco and BIAN Banking Models use UML). The difference is scope and focus. &#xA0;The opening quote says: &quot;While the architecure for a new building is captured in blue-prints, enterprise architecture is often represented in principles, policies, and technology choices&quot;. Many times I have seen &quot;Solution Architecuture&quot; (&amp; hence modelling) as being equivalent to &quot;building architecuture&quot;, while &quot;Enterprise Architecture&quot; is more akin to &quot;Town Planning&quot; and using &quot;Building&quot; architecture as metaphor for Enterprise Architecture indicates lack of understanding. I choose to disagree, there is a common set of tools and techniques across all these architecture endevours. The important aspect is to have clearly defined scope and focus and a well understood level of abstraction. With the Anuket Storage model (covered below) the scope is a particular technical sub-system, while for Multi-Cloud Interaction focus is cross-organisation / cross-cloud boundaries and hence at a much high level of abstraction. Both have common attributes.</li><li>Formal and Informal Models - A formal model is one that compiles to some specification and typically is supported by a tool, which can enforce syntax of the specification and extract some of the semantics from the model. An informal model is made from an arbitary set of elements and there is no enforced layout/connectivity and the meaning is in the eye of the beholder. I would love to only work with formal models, so that I could also use the model as basis for tool supported analysis, round trip engineering and prediction. There is one problem though.... typically formal models are the domain of modelling experts and are not greeted with the same positiviely by broader stakeholder community. Also when initially formulating an idea and strategy imposing formal approach may inhibit rather then help. So each approach has its merits.</li><li> &quot;Models, Work and Value&quot; - so now we have view of the various types of models, lets cover who they are used by and why they are valuable. The &quot;work&quot; in this is because while you might model a model ship as a hobby the IT/enterprise/business architecture models are typically done for work and are developed and used by multiple stakeholders. Their value is in their utility to these stakeholders. So a model&apos;s ability to aid communications and understanding is critical. The (now superseded) IEEE 1471 &quot;Recommendation for Practice for Architectural Description of Software-Intensive Systems&quot; provided an excellent articulation of architectural description which encompassed &quot;stakeholder&quot; and &quot;concern&quot; as fundemental part of the conceptual model. The value of the model rests in its ability to address the concerns of its stakeholders:</li></ul><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://just.graphica.com.au/content/images/2023/03/ieee-1471-01.png" class="kg-image" alt="GSMA/LF Networking Anuket - Reference Models" loading="lazy" width="691" height="575" srcset="https://just.graphica.com.au/content/images/size/w600/2023/03/ieee-1471-01.png 600w, https://just.graphica.com.au/content/images/2023/03/ieee-1471-01.png 691w"><figcaption>IEEE 1471 - UML Conceptual Model for Architecture Description</figcaption></figure><p>So lets now look at some of the Anuket Models, I was involved in defining.</p><hr><h2 id="storage-model">Storage Model</h2><p>Storage, what could be simpler ?</p><p>One of the nice things about using Clouds is that it is simple. One of the things that becomes apparent when building clouds are: the simplicity has a lot of complexity being managed behind the scenes and that the design decision made as part of the build have huge impact of how easy the platform is to manage once in operation.</p><p>While working on building a tenanted private cloud solution, I was asked to look at the storage sub-system and the alternate capabilities and way of delivering these. I worked with a number storage subject matter experts, who&apos;s job was just storage systems. The result was getting well immersed in the subject. It became apparent that it is very hard to capture the variety solutions and technology easily, there were:</p><ul><li>Layers - physical, operating systems, applications</li><li>Consumption Models - block, file, object</li><li>Characteristics and Qualities - shared, non-shared, performance, reliability, security</li><li>Technologies - the multitude of ways that storage can be delivered and</li><li>Perspective - are we looking this this from consumer or provider persepective.</li></ul><p>As with most things &quot;virtual&quot; the entire technical stack then comes back around full circle. So what might be provided by a high level solution at the hypervisor/virtualisation layer gets consumed at a low level physical layer within the virtual machine or for performance reasons the hypervisor may allow cut through back down to the native physical layer. A simple concrete example is that a virtual disk image sits on a file system of the host machine, but is consumed as block storage by virtual machine.</p><p>The &quot;General Cloud Storage Model&quot; (section &quot;3.6 Storage&quot;) aims to capture these aspects of storage in a way that covered consumer &amp; provider perspectives , that was invariant of any technology while providing a taxonomy into which the alternate storage technologies could be mapped:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://just.graphica.com.au/content/images/2023/03/rm-chap3.6-general-cloud-storage-model-01.png" class="kg-image" alt="GSMA/LF Networking Anuket - Reference Models" loading="lazy" width="1280" height="720" srcset="https://just.graphica.com.au/content/images/size/w600/2023/03/rm-chap3.6-general-cloud-storage-model-01.png 600w, https://just.graphica.com.au/content/images/size/w1000/2023/03/rm-chap3.6-general-cloud-storage-model-01.png 1000w, https://just.graphica.com.au/content/images/2023/03/rm-chap3.6-general-cloud-storage-model-01.png 1280w" sizes="(min-width: 720px) 720px"><figcaption>General Cloud Storage Model - Consumer -&gt; Provider, Physical -&gt; Logical + Virtualisation</figcaption></figure><p>The model was refined over a number of Anuket releases (Moselle &amp; Nile). The Anuket specification (section &quot;3.6 Storage&quot;) provides:</p><ul><li>model overview,</li><li>example stereotypical storage deployment scenarios (Software Defined Storage, Virtual NAS (or vNAS), Storage for K8S &amp; OpenStack &#xA0;and even PXE boot storage) as well as</li><li>architectural considerations for provision of cloud storage.</li></ul><p>I will not repeat these here, see the Anuket Reference model for details.</p><p>The model helped:</p><ul><li>capture the details of storage delivery</li><li>provides a good basis for understanding the multitude of ways that this can be achieved and</li><li>provides a basis for reviewing these and determining which is best approach in a given scenario.</li></ul><p>The &quot;General Cloud Storage Model&quot; was third iteration of attempting to provide a Storage model, it has much broader coverage than prior iterations. </p><p>Iteration zero and one are various diagrams and a spreadsheet of technical analysis. A generalist architect trying to understand the world of the storage specialist.</p><p>The second iteration was included within Anuket as &#xA0;&quot;Storage for Tenant Consumption&quot; model &quot;Lakelse&quot; release and only covered the tenant consumption and tiering perspective. &#xA0;This provides a view of the &quot;what&quot; but not the &quot;how&quot;.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://just.graphica.com.au/content/images/2023/03/rm-ch3.6-storage-model-02-1.png" class="kg-image" alt="GSMA/LF Networking Anuket - Reference Models" loading="lazy" width="549" height="543"><figcaption>&quot;Storage for Tenant Consumption&quot;</figcaption></figure><p>The target audience for the Anuket storage model is cloud providers and architects. As storage is a foundational part of any infrastructure solution. Having been involved in building a number of cloud solutions it is apparent that the default storage choices do not result in a good outcome in many cases with the result of need to do significant rebuilds.</p><p>In general, the data held within an enterprise storage solution is the most valuable IT asset and its integrity and managability is critcal. Currently the total storage capacity worldwide and storage demand is measured in &quot;zetta-bytes&quot;:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://just.graphica.com.au/content/images/2023/03/storage-capacity-zetabytes-01-1.png" class="kg-image" alt="GSMA/LF Networking Anuket - Reference Models" loading="lazy" width="974" height="560" srcset="https://just.graphica.com.au/content/images/size/w600/2023/03/storage-capacity-zetabytes-01-1.png 600w, https://just.graphica.com.au/content/images/2023/03/storage-capacity-zetabytes-01-1.png 974w" sizes="(min-width: 720px) 720px"><figcaption>The &quot;Zetta-Byte Era&quot; Storage Growth</figcaption></figure><p>The impact of this is that the storage systems are getting so large, that the management of the storage and the protection of the data contained becomes more and more difficult, as you cannot simply &quot;copy&quot; data from one place to another. So &#xA0;if you need to rebuild the storage sub-system, simply moving the stored contents becomes multi-day preparation activity.</p><p>So we need to prepare by architecting for our future storage scenarios carefully, which the &quot;Anuket Reference Model&quot; can help with.</p><p>As a model it is an example of a:</p><ul><li>Invariant Model - as it can be support analysis of many storage deployment variations</li><li>Focus - is to support understanding and decision making</li><li>Stakeholders &amp; Concerns - Cloud Architects - the options and considerations for provision of storage within multi-tenanted cloud solution, Implementors / Builders of Cloud infrastructure - have clear scope and expection of capabilities that will be delivered by storage solution/s, Tenants - have clear model of alternate storage capabilities that are available for consumption and be able to clearly distinguish and select what best fits their scenario &amp; Product Owner - have clear model of a alternate capabilities, cost and considerations, against which they can establish priorities for funding and delivery.</li></ul><p>NOTE: #1: The original Turing machine had an &quot;infinite tape&quot; (see model picture at start of blog)</p><p>NOTE #2: Thank you to Mat Devanny from NetApp on the storage education.</p><hr><h2 id="multi-cloud-interactions-model">Multi-Cloud Interactions Model</h2><p>The Multi-Cloud Interactions Model:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://just.graphica.com.au/content/images/2023/03/rm-chap-8-multicloud-interactions-03.png" class="kg-image" alt="GSMA/LF Networking Anuket - Reference Models" loading="lazy" width="736" height="209" srcset="https://just.graphica.com.au/content/images/size/w600/2023/03/rm-chap-8-multicloud-interactions-03.png 600w, https://just.graphica.com.au/content/images/2023/03/rm-chap-8-multicloud-interactions-03.png 736w" sizes="(min-width: 720px) 720px"><figcaption>Multi-Cloud InteractionsModel - Commercial Cloud Provision and Consumption</figcaption></figure><p>The impetus for the Multi-Cloud Interactions Model was to address the question, &quot;How could I expand my Cloud offering to leverage external cloud providers and services?&quot;.</p><p>The question was raised by Product Owner of an internal private Cloud platform who wanted to be able to integrate with and leverge capabilities avaliable from public Cloud Providers (initially IaaS - Infrastructure-as-a-Service capabilities provided by AWS, Azure, Google etc).</p><p>The focus of the teams efforts had been almost exclusively with <a href="https://www.etsi.org/technologies/689-network-functions-virtualisation?ref=just.graphica.com.au">ETSI NFVi</a> style VNF/Application orchestration (MANO - Management and Orchestration) capabilities and the scope of question limited to &quot;Should I consume public cloud using each cloud providers exposed API (AWS APIs for example), use an abstraction layer (such as Apache JClouds) or build my my own abstraction layer?&quot;. </p><p>A model that outlined overall scope of the problems was needed. The Multi-Cloud Interactions Model took a broader view than just considering application orchestration, covering the overall life cycle, including:</p><ul><li>Commercial Aspects - Accounts and payments</li><li>Technical Aspects - Connectivity, Resource Managemet, Application Mangement</li><li>End Consumption and Use - Catalog and usage transactions/conversations/communications</li></ul><p>With the initial framework in place it was then possible to look at different scenarios as alternate instansiations of the constituent parts. This helps with understanding the composability that a set of APIs would need to support.</p><p>The model allows illustration of alternate simple XaaS scenarios:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://just.graphica.com.au/content/images/2023/04/rm-chap8-multi-cloud-interactions-simple-stereo-types-03.png" class="kg-image" alt="GSMA/LF Networking Anuket - Reference Models" loading="lazy" width="1239" height="636" srcset="https://just.graphica.com.au/content/images/size/w600/2023/04/rm-chap8-multi-cloud-interactions-simple-stereo-types-03.png 600w, https://just.graphica.com.au/content/images/size/w1000/2023/04/rm-chap8-multi-cloud-interactions-simple-stereo-types-03.png 1000w, https://just.graphica.com.au/content/images/2023/04/rm-chap8-multi-cloud-interactions-simple-stereo-types-03.png 1239w" sizes="(min-width: 720px) 720px"><figcaption>Mult-Cloud Interactions Model - Simple Stereotype Instansiations</figcaption></figure><p>And alternate ways to achieve objective, either through technical means, such using API brokerage to operate across multiple cloud providers:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://just.graphica.com.au/content/images/2023/04/rm-chap8-multi-cloud-interactions-api-brokerage-stereo-type-02.png" class="kg-image" alt="GSMA/LF Networking Anuket - Reference Models" loading="lazy" width="567" height="508"><figcaption>API Broker Managed Multi-Cloud - Achieving Mutli-Cloud via Technical Model</figcaption></figure><p>Or via commercial model such as Cloud Brokerage:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://just.graphica.com.au/content/images/2023/04/rm-chap8-multi-cloud-interactions-cloud-brokerage-stereo-type-02.png" class="kg-image" alt="GSMA/LF Networking Anuket - Reference Models" loading="lazy" width="879" height="522" srcset="https://just.graphica.com.au/content/images/size/w600/2023/04/rm-chap8-multi-cloud-interactions-cloud-brokerage-stereo-type-02.png 600w, https://just.graphica.com.au/content/images/2023/04/rm-chap8-multi-cloud-interactions-cloud-brokerage-stereo-type-02.png 879w" sizes="(min-width: 720px) 720px"><figcaption>Cloud Broker Managed Multi-Cloud - Achieving Multi-Cloud via Commerical Model</figcaption></figure><p>Illustrating these alternate way of achieving ends helps in choosing the right model &#xA0;for a given organisation and the implications of this.</p><p>As a model the &quot;Multi-Cloud Interactions Model&quot; is:</p><ul><li>Invariant - the model is generic and allows definition of specific cases through alternate instansiations</li><li>Informal - the grouping of interactions is by high level classification and not detailed specification</li><li>Focus - strategic to help determine current and future stance and capability gaps</li><li>Stakeholders &amp; Concerns - Cloud Strategist - organisational capabilities and gaps, market offerings and differentiation opportunities, strategic planning and risk analysis.</li></ul><p>Within LNF / GSMA Anuket Reference team the next increment for the &quot;Multi-Cloud Interactions Model&quot; will be to map current technologies, standards, open source initiatives and market offerings to help with understanding what is currently available to be leverage, where there are gaps and what existing initiatives might be candidates for endorsement (as per Architecture Reference Model 1 - OpenStack for Multi-tenant VNF management &amp; Architecture Reference Model 2 - Kubernetes for Multi-tenant CNF management).</p><p>There is also a desire to bring together the coverage of the &quot;Multi-Cloud Interfactions Model&quot; with the &quot;Infrastruture Life-Cycle Model&quot;. As many of the interactions defined in the &quot;Multi-Cloud Interactions Model&quot; are part of the &quot;Operate &amp; Manage&quot; chevrons of the Infrastructure Life-Cycle Model&quot;, as well as parts of the iteractions get re-used / re-purposed to support the &quot;Build&quot; &amp; &quot;Provision&quot; part of the infra-structure life-cycle. </p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://just.graphica.com.au/content/images/2023/04/an5-design-lcm-positioning-02.png" class="kg-image" alt="GSMA/LF Networking Anuket - Reference Models" loading="lazy" width="1270" height="505" srcset="https://just.graphica.com.au/content/images/size/w600/2023/04/an5-design-lcm-positioning-02.png 600w, https://just.graphica.com.au/content/images/size/w1000/2023/04/an5-design-lcm-positioning-02.png 1000w, https://just.graphica.com.au/content/images/2023/04/an5-design-lcm-positioning-02.png 1270w" sizes="(min-width: 720px) 720px"><figcaption>Infrastructure Life-Cycle Model - from Plan to Retire</figcaption></figure><p>These two different views which have some areas of overlapping concern is typical when creating models, as the model inevitably reflects the focus of the author (in these cases myself ;-). So while the interactions was primarily concerned with integration and API requires to operate cloud across different organisations, the infrastructure life-cycle model was concerned with the process of building clouds and automating this and its operation. </p><hr><h2 id="wind-up">Wind Up</h2><p>Model are not diagrams and architecture is more than models.</p><p>The purpose of this blog was to provide an update on some modeling that I have been contributing to Linux Foundation Network / GSMA <a href="https://cntt.readthedocs.io/projects/rm/en/stable-nile/index.html?ref=just.graphica.com.au">&quot;Anuket Reference Model&quot;</a>. The aim is to help Communications Service Providers (CSP) with the building and operation of Clouds, as these are the platforms that they are already using to build their current and future services on top of.</p><p>When thinking about models it is essential to think about the stakeholders and the purpose / concerns that they are addressing.</p><p>If you do this then the model will prove its worth.</p><p>The model should help in getting alignment and most importantly help reduce risk and deliver the modelled target economically.</p><p>Formal and in-formal models both have their place. While the examples here are informal, you can see my blog <a href="https://just.graphica.com.au/intelligent-network-design/">&quot;an5 - Intelligent Network Design&quot;</a> for a formal model that applies AI to the problem of network design using a network modelling language.</p><p>Remember that the model is an intermediate step toward the end goal, so yes love the model (architects tend to do this), but drive toward the goal.</p><p>This blog is more about modelling than the actual models, for more information on the Anuket Reference Model go to the LFN &#xA0;<a href="https://cntt.readthedocs.io/projects/rm/en/latest/index.html?ref=just.graphica.com.au">source</a> and <a href="https://www.gsma.com/newsroom/wp-content/uploads//NG.126-v3.0-1.pdf?ref=just.graphica.com.au">GSMA Cloud Infrastructure Reference Model</a> (Currently Version 3). The team would like to hear from people who would like to contribute.</p><p>NOTE: I believe this blog post is more informative than the <a href="https://soapbox.graphica.com.au/something-topical-chatgpt/?ref=just.graphica.com.au">ChapGPT</a>, response to the question of &quot;What is the value of architecture model?&quot;.</p><hr><p><strong><em>References &amp; Links:</em></strong></p><p>Enterprise Architecture as Strategy - Creating a Foundation for Business Execution: Jeanne W. Ross, Peter Weill, David C. Robertson (HBA Press - 2006), available to read via <a href="https://www.researchgate.net/publication/236972734_Enterprise_Architecture_as_Strategy_-_Creating_a_Foundation_for_Business_Execution?ref=just.graphica.com.au">ResearchGate</a></p><p><a href="https://en.wikipedia.org/wiki/Linda_Evangelista?ref=just.graphica.com.au">Linda Evangelista</a> - a model, &#xA0;credited for saying &quot;We don&apos;t wake up for less than $10,000 a day.&quot;</p><p><a href="https://lfnetworking.org/?ref=just.graphica.com.au">LF Networking</a> - LF (Linux Foundation) Networking which has: The primary mission (the &#x201C;Mission&#x201D;) of the LF Networking Fund (the &#x201C;Directed Fund&#x201D;) is to raise, budget and spend funds and coordinate support for open source and/or open specification projects involved with the movement or communication of data on a network (including, but not limited to, data plane, control plane, analytics, orchestration, and automation technologies for enterprise, cloud, and carrier networks, collectively the &#x201C;Scope&#x201D;) ..</p><p><a href="https://www.gsma.com/?ref=just.graphica.com.au">GSMA</a> - An industry mobile communcations body, historically &quot;Groupe Speciale Mobile&quot; Association - GSMA is a global organisation unifying the mobile ecosystem to discover, develop and deliver innovation foundational to positive business environments and societal change. Our vision is to unlock the full power of connectivity so that people, industry, and society thrive.</p><p><a href="https://anuket.io/?ref=just.graphica.com.au">Anuket</a> - formed via amalgamtion of CNTT, OPNFV under auspices of LFN &amp; GSMA - Anuket delivers a common model, standardized reference infrastructure specifications, and conformance and performance frameworks for virtualized and cloud native network functions, enabling faster, more robust onboarding into production, reducing costs and accelerating communications digital transformations</p><p><a href="https://www.gsma.com/newsroom/wp-content/uploads//NG.126-v3.0-1.pdf?ref=just.graphica.com.au">&quot;Official Document NG.126 &#x2013; Cloud Infrastructure Model&quot;</a> - the GSMA published version of Anuket Reference Model</p><p><a href="https://www.etsi.org/technologies/689-network-functions-virtualisation?ref=just.graphica.com.au">ETSI NFV</a> - the ETSI NFV &amp; NFVi works defined the initial models for Network Function Virtualisation with the ETSI NFVi Architecture providing a key industry reference model. ETSI reference architecture include definition of MANO (Management &amp; Orchestration). Anuket is more focused on implementation.</p><p><a href="https://en.wikipedia.org/wiki/Zettabyte_Era?ref=just.graphica.com.au">Zettabyte Era</a> - our alarming data traffice and storage consumption trend.</p><p><a href="https://community.hitachivantara.com/blogs/hubert-yoshida/2019/10/02/storage-supplydemand-crisis-in-a-zettabyte-world?ref=just.graphica.com.au">Storage Supply/Demand Crisis in a Zettabyte World</a> - the growth in storage demand is greater than our ability to sustain supply... better empty the trash.</p><p><a href="https://www.oxfordlearnersdictionaries.com/definition/english/model_1?q=model&amp;ref=just.graphica.com.au">Model</a> from Oxford Learners Dictonary - my definition come from the Oxford Dictionary on iPhone, it is pretty similar</p><p><a href="https://en.wikipedia.org/wiki/IEEE_1471?ref=just.graphica.com.au">IEEE 1471</a> - &quot;IEEE Recommendation for Practice for Architectural Description of Software-Intensive Systems&quot; provided an excellent definition of architecture models covering: view, viewpoint, concerns and stakeholders (accepted in 2000)</p><hr><p>Picture: &quot;Univeral Tuning Machine&quot; from: <a href="https://web.mit.edu/manoli/turing/www/turing.html?ref=just.graphica.com.au">https://web.mit.edu/manoli/turing/www/turing.html</a> with its infinite length tape storage</p>]]></content:encoded></item><item><title><![CDATA[JavaScript & Canonical Web Architecture]]></title><description><![CDATA[In 2022, how should I build my Web Application ? An example of using canonical web architecture to help drive decision process and and introduction to the architectural and structural aspects of JavaScript and modern Web Development.]]></description><link>https://just.graphica.com.au/web-architecture/</link><guid isPermaLink="false">6469847f76e6920438e6d147</guid><category><![CDATA[javascript]]></category><category><![CDATA[web architecture]]></category><category><![CDATA[enterprise architcture]]></category><dc:creator><![CDATA[John Hartley]]></dc:creator><pubDate>Wed, 05 Oct 2022 08:00:25 GMT</pubDate><media:content url="https://just.graphica.com.au/content/images/2022/10/web-architecture-cropped-02.png" medium="image"/><content:encoded><![CDATA[<img src="https://just.graphica.com.au/content/images/2022/10/web-architecture-cropped-02.png" alt="JavaScript &amp; Canonical Web Architecture"><p>In late 1998 and early 2000 I wrote material on &quot;Standard Operating Environments&quot; (SOE) for a big Telco&apos;s &quot;Enterprise Architecture&quot;. They wanted to contain technology proliferation, avoid systems interoperability issues and build teams having common set of technical skills to ease moving people across projects. Back then there where two completing Web Application development frameworks:</p><ul><li>Java Application Servlets &#xA0;and Java Server Pages - build on top of Sun Java and supported by tools such as IBM WebSphere, WebLogic, Apache Tomcat and JBOSS Application Servers and</li><li>Microsoft .NET - in all its expanding guises and including: IIS, MTS, ActiveX/COM/DCOM/COM+ and ASPs (Active Server Pages) or .NET</li></ul><p>My brain goes foggy looking back at the evolving set of Microsoft and other technologies. Many of the concepts of JSP and ASP architectures were made available via an Open Source alternative:</p><ul><li>LAMP (Linux, Apache, MySQL and PHP) - where <a href="https://www.php.net/?ref=just.graphica.com.au">PHP</a> provided an open source variation of JSPs and ASPs</li></ul><p>Last time I attempted using web development tools in any depth (in 2010) I found CSSs (cascading style sheets) completely non-intuiative. Now though through a process of slow osmosis, I kind of &quot;get&quot; how CSSs work. In 2010 I also looked at &quot;AJAX&quot;, purchasing two very fat O&apos;Reilly books:</p><ol><li><a href="https://www.oreilly.com/library/view/javascript-the-definitive/9781491952016/?ref=just.graphica.com.au">JavaScipt</a> - The Definitive Guide (5th Edition) (C)opyright 2006 (Javan Rhinoceros) - now up to 7th Edition (2020)... &amp;</li><li>Ajax &#xA0;- The Definitive Guide (1st Edition) (C)opyright 2008 (Wooly Monkey)</li></ol><p>The learning curve looked steep and was far removed from the HTML form based templates of prior tooling.</p><p>Fast forward to 2022, once more I have a need for some Web development as part of a short Proof of Concept (PoC) project. I have a programmer allocated to assist (or two if including myself ;-) ), so what technology should we use ?</p><p>Read on to find out, how &quot;architecture decision&quot; drove selection of development approach and for an architectural introduction to JavaScript and its tooling.</p><p><strong>Status: Mid Nov 2022 </strong>- First cut of prototype UI completed and intial draft of blog completed</p><p>NOTE: &quot;JavaScript&quot; - &#xA0;trademark is owned by Oracle (was owned by Sun)</p><hr><h2 id="the-canonical-web-architecture">The Canonical Web Architecture</h2><p>Having been in deep freeze on Web application development for over ten years I need to:</p><ol><li>Determine what language and tools to use,</li><li>Develop a UI that uses a Thrift based server for resouce access and</li><li>Built and deploy the solution on Ubuntu platforms</li></ol><p>Developing the Web application quickly (!!) is only constant from &quot;way back when&quot;. </p><p>Lets start from the lens of &quot;A Canonical Web Architecture&quot;:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://just.graphica.com.au/content/images/2022/10/web-architecture-and-javascript-03-4.png" class="kg-image" alt="JavaScript &amp; Canonical Web Architecture" loading="lazy" width="1112" height="481" srcset="https://just.graphica.com.au/content/images/size/w600/2022/10/web-architecture-and-javascript-03-4.png 600w, https://just.graphica.com.au/content/images/size/w1000/2022/10/web-architecture-and-javascript-03-4.png 1000w, https://just.graphica.com.au/content/images/2022/10/web-architecture-and-javascript-03-4.png 1112w" sizes="(min-width: 720px) 720px"><figcaption>A Canonical Web Architecture - Invariant Architecture Model</figcaption></figure><p>This defines a &quot;high level&quot; view of Web Application architecture, with these common components:</p><ul><li>Browser - which has JavaScript Engine and HTML renderer</li><li>[Optional: Web Server] - which could be external to application server to provide &quot;reverse proxy&quot; and SSL termination</li><li>Application Server - which could be either a framework server, such as Apache Tomcat or JBOSS for Java based web applications or NodeJS for JavaScript based web applications</li><li>[Optional: Database Layer] - for persistence, not required in my case, as I am using micro-services layer (&quot;External Systems&quot; pattern) </li><li>[Optional: External Systems] - in my case this is exposed as Thift based micro-services (written in Java).</li></ul><p>The architecture does not look simple... nor potentially quick to implement. If I proceeded based on historical frameworks, then I would end up installing: Apache Web Server (or NGINX), Apache Tomcat (or JBOSS) and this is before even writing a single line of application code.</p><p>To strip out complication and make this as simple as possible, my determination was to avoid unnecessary infrastructure components and layers. &#xA0;Ideally the architecture would be just have an &quot;Application Server&quot; directly exposing the Web URI, with caveat that I can put a reverse proxy in front of this in future if needed.</p><p>That strips the Canonical Web Architecture down to single &quot;Application Server&quot; plus the Thrift micro-services server. Stripping out the &quot;platform infrastructure&quot; and using micro-service is consistent with &quot;server-less&quot; paradigm. Its not that there are no servers, rather that that this logic is now managed within the application framework and as part of application development and deployment. </p><p>Next decision.. what should I build the &quot;server-less&quot; Web application with in 2022 ?</p><hr><h2 id="server-less-application-for-web-ui">Server-less Application for Web UI</h2><p>In a classic Web Application framework the Web Server or Application Server is responsible for handling the HTTP/S protcol and passes request to the Web application through callbacks with Request/Response parameters.</p><p>In the case of JSP, ASP &amp; PHP the call back is passed to a &quot;template form&quot; which extracts data from the Request and completes the form, by getting data from database or other systems, passing this back response as HTTP/XML payload.</p><p> The basic architecture is the same irrespective of Language or Framework:</p><!--kg-card-begin: html--><pre><code>---
--- Java Servlet
---
public interface Servlet {
 ...
 void service(ServletRequest req, ServletResponse res) throws ServletException, IOException
 ...
}
---
--- NodeJS
--- 1. First request handler
const RequestListener = function (req, res) { ... }
--- 2. Now pass to server creation function
const server = http.createServer(RequestListener);
---
--- or using JavaScript ES6 &quot;arrow function&quot; shorthand for this same thing
---
const server = http.createServer( (req, res) =&gt; { ... });
---
--- C# .NET 
---
public virtual void ProcessRequest (System.Web.HttpContext context);
--
--- where HttpContext wraps both request &amp; repsonse object
---
public sealed class HttpContext : IServiceProvider</code></pre><!--kg-card-end: html--><p>The goal is to strip back the infrastructure needs and keep our UI application simple by having the &quot;application&quot; being the &quot;Application Server&quot; as much as possible. &#xA0;Doing a quick review of options, candidates for developing the UI could be:</p><ul><li>Go - has some nice features (multiple return values, delayed execution), is supported by Thrift and relatively easy to learn if you have previously used C/C++ or Java.</li><li>Java - is a general purpose language with lots of class libraries, but these are targetted for creating WAR files for deployment into a Java application server. Though deployment via embedded Jetty is also possible and more consistent with minimalistic approach. </li><li>JavaScript - is the programming language for the browser and so knowlege of this is required for Web UI development. Its structure shares a lot with Scheme Lisp dialect, having &quot;eval/apply&quot; functions that allow code to be treated as data and it has &apos;C&apos; like syntax. Server client code is generated by Thrift.</li><li>PHP - is hugely prevalent and supported as target for Thrift generated client library, but no &quot;simple&quot; serverless deployment option is available. A web app needs to use either NGINX or Apache Web Server.</li><li>Python - has many advocates and it is supported by Thrift. However in using it for creating test Thrift clients, I found the syntax and indentation based structuring construct, too fiddly and prone to errors ... This is personal opinion, likely readily refuted, but as I am the &quot;second developer&quot; of target UI my opioion gets airplay ;-) .</li><li>Ruby on Rails - has reputation for providing UI development innovation (as well as naming innovation ;-) , as this is &quot;Rails&quot; framework written in Ruby programmming language). Uses Ruby (an OO based programming language for &#xA0; Model View Controller (MVC) for Web UI development.</li></ul><p>All these options are mature and have large user bases. The criteria for selection and use include:</p><ul><li>Learning Curve - for language and framework / libraries (which is obviously bias&apos;ed toward current developer skill set: Java, C/C++, Lisp).</li><li>Adoption &amp; Support - extent of use and availability of documentation, knowledge and expertise.</li><li>Openess and Community - is it &quot;open&quot;, does it have clear standards process attached to it and does it have an active community involved in its onging development.</li><li>Utility, Tools and Libraries - are there development tools, &#xA0;does it have libraries required for development of our UI and can it be readily integrated with Thrift micro-services and can I use the knowledge elsewhere (i.e. applicable for client-side and server-side programming).</li><li>Small Footprint - low infrastructure need and ease of deployment (conceptually &quot;serverless&quot; not AWS Lamba &quot;serverless).</li></ul><p>So before venturing an opinion I looked at what the current trends are in the market (see below Appendies for details). </p><p>This showed that PHP, Java, JavaScript have strongest market support across a range of different areas. Putting the options into a simple &quot;Decision Model&quot; for assessment (Just Enough Architecture in action) with criteria for: </p><ul><li>Scoring - Exceeds or Better = 1, Meets = 0, Does not Meet or Worse = -1</li><li>Mandatory/Screening Criteria - Thrift support and Small Footprint deployment</li></ul><p>The result was:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://just.graphica.com.au/content/images/2022/10/web-tools-01-2.png" class="kg-image" alt="JavaScript &amp; Canonical Web Architecture" loading="lazy" width="1800" height="560" srcset="https://just.graphica.com.au/content/images/size/w600/2022/10/web-tools-01-2.png 600w, https://just.graphica.com.au/content/images/size/w1000/2022/10/web-tools-01-2.png 1000w, https://just.graphica.com.au/content/images/size/w1600/2022/10/web-tools-01-2.png 1600w, https://just.graphica.com.au/content/images/2022/10/web-tools-01-2.png 1800w" sizes="(min-width: 720px) 720px"><figcaption>Web UI Tool - Assessment for Simple UI</figcaption></figure><p>JavaScript scored highest, even with low learning curve score (as target developers were JavaScript novices), based on &quot;Small Footprint&quot; and &quot;Utility (Front End/Back End skills reusability) scoring.</p><p>NOTE #1: The low score for &quot;Learning Curve&quot; is evidenced by the two fat O&apos;Reilly titles, that got put on the shelf some time back and my electing to tackle my last Web UI development task using PHP. PHP is much simpler, both conceptually and in practice, with easy to grasp HTML template model. In this case though PHP is not an option as it needs to be deployed via a Web Server, failing the mandatory &quot;Small Footprint&quot; criteria. Ditto for Java and &quot;Ruby on Rails&quot;. The higher scores for JavaScript, Go and Java for Openess and Community is that they have formal process and corporate support to evolve, rather than pure community model or strong central controller. While the &quot;Learning Curve&quot; criteria is coloured as it could lends itself to personal bias, in this case did not really impact scoring.</p><p>NOTE #2: The &quot;Decision Model&quot; architecture work product should have screening critieria (for inclusion/exclusion) and clearly defined scoring criteria for assessment. This is preferable to &quot;Pros/Cons&quot; assessment which typically do not use consistent criteria across the alternates. If you have a set of &#xA0;Pros/Cons turn each of these into an assessment criteria which can then be applied consistently to each option. For a complex assessment, &#xA0;group criteria together into categories of concern and use weighting to apply to scores and overall groups.</p><p>NOTE #3: If we update scoring for Java based on use of embedded Jetty then it, would now pass mandatory screening criteria and come in with better scope than Go. So Java scores better than newer more fashionable options.</p><hr><h2 id="javascript-language-engines-and-frameworks">JavaScript Language, Engines and Frameworks</h2><p>Opting to use JavaScript, here are some basic facts and about the language and tools for JavaScript development.</p><h4 id="some-history">Some history..</h4><p>JavaScript was developed at Netscape back in 1995. It is an interpreted language with roots in Scheme Lisp and &apos;C&apos; style syntax. The original interpreter was embedded in the Netscape brower and subsequently reversed engineered by Microsoft. The Microsoft JScript JavaScript interpreter was realeased in 1996. Due to resulting variations in behaviour Netscape choose to submit the language into a standardization process via the European Computer Manufacturers Association (ECMA) in 1997. The result was the first version of the &quot;ECMAScript&quot;, as JavaScript was a registered trademark of Sun, who where early partner in its development with Netscape. The ECMScript specification has contined to evolve, with most current version being &quot;13th Edition &#x2013; ECMAScript 2022&quot;. These editions are abbreviated as &quot;ES6&quot; for 6th Edition or more recently by year &quot;ES2017&quot;.</p><h4 id="javascript-engines">JavaScript Engines</h4><p>There are now three major JavaScript execution <a href="https://en.wikipedia.org/wiki/JavaScript_engine?ref=just.graphica.com.au">engines</a>:</p><ul><li>V8 Engine - developed by Google and used in Google Chrome and Microsoft Edge browers and for the NodeJS server side JavaScript execution environment</li><li>MonkeySpider - is the evolution of the Mozilla engine and is used in FireFox browser</li><li>JavaScriptCore - is the Apple engine and used in the Safari browser</li></ul><h4 id="javascript-tools-and-frameworks">JavaScript Tools and Frameworks</h4><p>When JavaScript was introduced in the browser, it was common to serve up a JavaScript payload having URI references to externally sourced code. These external code snippets would be pulled by the JavaScript engine from external web servers:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://just.graphica.com.au/content/images/2022/10/web-architecture-and-javascript-externel-sources-01-2.png" class="kg-image" alt="JavaScript &amp; Canonical Web Architecture" loading="lazy" width="1109" height="449" srcset="https://just.graphica.com.au/content/images/size/w600/2022/10/web-architecture-and-javascript-externel-sources-01-2.png 600w, https://just.graphica.com.au/content/images/size/w1000/2022/10/web-architecture-and-javascript-externel-sources-01-2.png 1000w, https://just.graphica.com.au/content/images/2022/10/web-architecture-and-javascript-externel-sources-01-2.png 1109w" sizes="(min-width: 720px) 720px"><figcaption>Web Architecture - Serving JavaScript</figcaption></figure><p>Serving JavaScript that contains references to external libraries raises multiple issues:</p><ul><li>Security - as external environment cannot be trusted (addressed by disallowing use of URI to serverr different to the originating source server)</li><li>Dependency Failure - as the library reference could either fail to load or the version of the referenced library could change, breaking the overall JavaScript program.</li></ul><p>These same issues occur in server-side based JavaScript environments as well. The issue is inherent to JavaScript programs, as distribution is always via source code. With Javascript source is directly executed and there is no intermediate compiled object code. &#xA0;The JavaScript development tools help to manage the building of JavaScript programs using the source code based modules. The development process and example applicable tools are illustrated here (just focusing on the coding and building): </p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://just.graphica.com.au/content/images/2022/10/web-architecture-and-javascript-dev-process-01-1.png" class="kg-image" alt="JavaScript &amp; Canonical Web Architecture" loading="lazy" width="1179" height="594" srcset="https://just.graphica.com.au/content/images/size/w600/2022/10/web-architecture-and-javascript-dev-process-01-1.png 600w, https://just.graphica.com.au/content/images/size/w1000/2022/10/web-architecture-and-javascript-dev-process-01-1.png 1000w, https://just.graphica.com.au/content/images/2022/10/web-architecture-and-javascript-dev-process-01-1.png 1179w" sizes="(min-width: 720px) 720px"><figcaption>JavaScript Tool Chain - JavaScript coding and build</figcaption></figure><p>The diagram uses V8, NodeJS, Yarn, Sass, Gulp, JQuery &amp; Git to show the roles of various tools. In taxonomy of tools, I use Java development as an analogy, where &quot;==&quot; means simillar to not equivalent. From above diagram, have:</p><ul><li>V8 - the JavaScript engine, the barebones to run a JavaScript program (== Java VM)</li><li>NodeJS - a service side JavaScript runtime environment, provides the V8 engine, a set of libraries and other tool to make V8 useful (== Java JRE/JDK)</li><li>Yarn - a JavaScript Package manager. Manages code libraries (as web accessible repository) used to build your JavaScript program and pulls these down into your local build environemt (== Maven for a Java project, except that Maven maintains a repository of jar files, rather than source files)</li><li>Sass - is pre-processor for &quot;sass&quot; based cascading style sheets (CSSs). Sass provides a languge for definition and processing of css files. The reason this exists is that CSS were originally mostly hand crafted as part of HTML template definition, now css have become part of sophisticated HTML rendering and needed extension to lend itself to programatic manipulation. Sass if one of a number of css preprocessors (== ??, no Java equivalent)</li><li>Gulp - a JavaScript build tool that brings together all the &quot;bits&quot; of your JavaScript program, so it has everything required to create a consolidated downloadable (to client side/browser) set of JavaScript programs. It also supports changing library namespaces referenced names to avoid clashes and to reduce the size of the JavaScript program (== Java ANT)</li><li>JQuery - is just an example of a JavaScript library, it is the most widely used libraries as it is provides DOM (Document Object Model). You need it to serve, manipulate and tranverse HTML documents on client &amp; server sides &#xA0;(== Apache Xerces2 Java XML Parser, one of many DOM/XML/HTML libraries)</li><li>Git - git is git is git and as JavaScript libraries are distributed as source code (no Jar files here thank you) the library manager like Node Package Manager and Yarn all pull code directly from git based respositorise (== git :-) is agnostic to language of source code)</li></ul><p>Finally as many of the JavaScript tools are written in JavaScript, these also require a JavaScript runtime environment. &#xA0;So it does not matter if you are creating client-side or server-side JavaScript programs, you will need JavaScript runtime environment for your JavaScript tooling. Hence why &quot;2. Build&quot; &quot;chevron&quot; in the &quot;JavaScript Tool Chain&quot; diagram above has &quot;greyed-out&quot; V8 and NodeJS logos. In this case NodeJS is there to run the tools, rather than being the used tool.</p><h4 id="dependency-management-across-libraries">Dependency Management across Libraries</h4><p>This needs to be addressed by JavaScript program build tools. This is the role of the JavaScript Package Manager. The packae manger provide a function analogous to that of Maven when building Java applications.</p><p>As part of the JavaScript program build process, the &quot;package.json&quot; file provides specification of which JavaScript libraries at what version are required to build the program. This is used by both NodeJS and Yarn. Taking directives from the &quot;package.json&quot; file, the build process brings in all the required JavaScript code into local build environment. Here is an example Yarn &quot;package.json&quot; from an Open Source <a href="https://gitlab.com/zebity/commento/-/tree/master/frontend?ref=just.graphica.com.au">&quot;Commento&quot;</a> project:</p><!--kg-card-begin: html--><pre><code>{
  &quot;name&quot;: &quot;commento&quot;,
  &quot;version&quot;: &quot;1.0.0&quot;,
  &quot;main&quot;: &quot;index.js&quot;,
  &quot;repository&quot;: &quot;git@gitlab.com:commento/commento.git&quot;,
  &quot;author&quot;: &quot;Adhityaa &lt;c.adhityaa@gmail.com&gt; Anton Linevych anton@linevich.net&quot;,
  &quot;license&quot;: &quot;MIT&quot;,
  &quot;private&quot;: true,
  &quot;devDependencies&quot;: {
    &quot;chartist&quot;: &quot;0.11.0&quot;,
    &quot;fixmyjs&quot;: &quot;2.0.0&quot;,
    &quot;gulp&quot;: &quot;4.0.2&quot;,
    &quot;gulp-clean-css&quot;: &quot;3.9.4&quot;,
    &quot;gulp-concat&quot;: &quot;2.6.1&quot;,
    &quot;gulp-eslint&quot;: &quot;5.0.0&quot;,
    &quot;gulp-html-minifier&quot;: &quot;0.1.8&quot;,
    &quot;gulp-rename&quot;: &quot;1.3.0&quot;,
    &quot;gulp-sass&quot;: &quot;4.0.1&quot;,
    &quot;gulp-sourcemaps&quot;: &quot;2.6.4&quot;,
    &quot;gulp-uglify&quot;: &quot;3.0.0&quot;,
    &quot;highlightjs&quot;: &quot;9.10.0&quot;,
    &quot;html-minifier&quot;: &quot;3.5.7&quot;,
    &quot;jquery&quot;: &quot;3.2.1&quot;,
    &quot;normalize-scss&quot;: &quot;7.0.1&quot;,
    &quot;sass&quot;: &quot;1.5.1&quot;,
    &quot;uglify-js&quot;: &quot;3.4.1&quot;,
    &quot;vue&quot;: &quot;2.5.16&quot;
  },
  &quot;dependencies&quot;: {
    &quot;eslint&quot;: &quot;^5.10.0&quot;
  }
}
</code></pre><!--kg-card-end: html--><p>This file provide an equivalent to the Java/Eclipse/Maven &quot;.pom&quot; file, which defines all the libraries that are needed to be pulled into the Java compilation process.</p><p>Next pulling all the JavaScript files together...</p><h4 id="javascript-modules">JavaScript Modules</h4><p>Historically JavaScript had no concept of modules, you simply had files and Javascript and you could concatenate these together prior loading to execution engine or have different &lt;script&gt;...&lt;/script&gt; embedded tags in your html to load different JavaScript files.</p><p>JavaScript&apos;s initial modularity mechanism was introduced through writing loading utilities which then applied the result to the &quot;eval&quot; function (this submits string to the JavaScript interpreter). This evolved into the &quot;require()&quot; statement to import and exposing definitions through &quot;module.export&quot; object. This practice was adopted by NodeJS and become know as &quot;CommonJS module&quot;. As JavaScript continued to evolve through ECMA proces ES6 introduced modules into the language through the import/export declarations. Thus ES6 import/export are part of JavaScript Language, while Node &quot;require&quot; &amp; &quot;module.export&quot; are operations on objects.</p><p>Much of the information you find via google search is illustrated using examples with &quot;require&quot;. There are are significant differences in behaviour between the &quot;CommonJS module&quot; and ES6 (this is covered in section on asynchronous and Promises in &quot;JavaScript - The Language&quot; below). In Node how a given set of directories is managed is via the &quot;package.json&quot; file, which can have a entry for:</p><ul><li>&quot;type&quot;: &quot;module&quot; &#x2013; treat all .js files in this directory and below (until there is another &quot;package.json&quot; file as ES6 modules and enable &quot;strict&quot; mode (i.e. enforce ES6 language compliance, including import/export declaration support)</li><li>&quot;type&quot;: &quot;commonjs&quot; &#xA0;- enable module/modules based modules through &quot;require&quot; and &quot;module&quot; classes.</li></ul><p>Note that in Node:</p><ul><li>you can &quot;import&quot; legacy &quot;CommonJS module&quot; based code (this needs awareness of &quot;package.json&quot; placement within your source hiearchy to behave correctly,</li><li>but you cannot use &quot;require&quot; based import within ES6 modules (.js files).</li></ul><p>Node behavior is also controllable using different file extensions, with .mjs for ES6 modules and .cjs for &quot;CommonJS module&quot; code. Personally I do not think using file extension naming is a good idea and expect that all new JavaScript will end up being ES6 compliant.</p><p>For browser, control of module type is via script tag: &lt;script type=&quot;module&quot;&gt; for ES6 compliance.</p><p>So to code and simple example...</p><p>Here is example of import for Node code. As my &quot;resouce interface&quot; is via Thrift based server, I needed to import the Thrift compiler generated code (thrift generated code uses &quot;commonjs&quot;) which was imported into my ES6 UI module:</p><!--kg-card-begin: html--><pre><code>---
--- The ES6 Imports for EX.js using the thrift generated code
--- NOTE: The ../gen-nodejs is the directory for the Thrift generated code
--- The directory structure used here is important to ensure correct behaviour
--- EX-PROJECT
---   /gen-nodejs      &lt;<== generated code (commonjs) --- packjage.json <<="=" package.json to turn on "common.js" ---- ex "module" (es6 strict) ex.js ui (es6) ex-pages.js support $ cat . ... import * as ini from 'ini'; fs 'fs'; thrift 'thrift'; ldtypes '.. gen-nodejs ex_thrfit_types.js'; ld exthrift.js'; express 'express'; pages '. x-pages.js'; the corresponding "package.json" file that is in same directory (. ) module note: this type="=" (ie es6) { "type" : "module", "dependencies": "ini": "^3.0.1", "express": "^4.18.2", "thrift": "^0.16.0" } and which up above at level .. common.js not es6 strict "commonjs", }<></==></code></pre><!--kg-card-end: html--><p>NOTE: you need to use Thrift compiler &quot;--gen js:node,es6&quot; flags to get this result.</p><p>To bring together all the JavaScript module into working code you can use:</p><ul><li>Node &amp; Node Package Manager - for simple Server Side JavaScript and</li><li>Node, Yarn, Gulp and Saas - for larger &quot;AJAX&quot; Web UI projects</li></ul><hr><p>So in summary:</p><ul><li>A JavaScript module is simply a JavaScript file that is flagged as such (explicity via package.json, script attribute or filename convention or or implicity via inclusion of require/import/export directives)</li><li>You can import a module with &quot;require&quot; class invocation or ES6 &quot;import&quot; declaration</li><li>You can define exposed variables, functions, classes etc within a JavaScript file using &quot;module.export&quot; (&amp; &quot;export&quot;) and ES6 &quot;export&quot;</li><li>There are behaviour differences in &quot;commonjs&quot; &amp; ES6 &quot;module&quot; mechanims </li><li>You can use ES6 &quot;import&quot; to import &quot;commonjs&quot; modules, but you cannot use &quot;commonjs&quot; &quot;require&quot; within ES6 modules.</li><li>You can control the module type using &quot;package.json&quot;, file name extensions and &lt;script type=&quot;module&quot;&gt; tag</li><li>Other build tools such as: Yarn, Gulp, Saas will be applicable depending on your project needs and if your Web UI is just using Server Side JavaScript or both Server Side and Client Side (browser based) JavaScript.</li></ul><hr><h2 id="javascriptthe-language">JavaScript - the Language</h2><p>As a language JavaScript itself should look pretty famillar to any C/C++ &amp; Java developer. The &quot;learning curve&quot; scoring relates more the JavaScript execution model than its does to the core language itself. The ES6 updates provided many signficant extensions to the language with introduction of explicit classes (vs. prototype based templates) including inheritance via the &quot;class&quot; and &quot;extends&quot; keywords and with the &quot;strict&quot; directive abandoned full backward compatability with original JavaScript specification.</p><p>Examples of this need to flag &quot;strict&quot; compliance was the introducion of many new reservered words including: class, extends, const, let which could have been used as identifiers in older JavaScript programs and so would break these if executed with &quot;strict&quot; compliance.</p><p>The complication of JavaScript is that it was designed to run in browser and so has an asynchronous threaded execution model based on an event loop (just like many GUI frameworks).</p><p>This &quot;asynchronous&quot; model can cause surprises if you are not well aware of it as function that you would typically expect to act synchronously (reading a file) returns before the completion and you need to allow for this in your code.</p><p>Before ES6 this was typically managed via inclusion of callback functions for return of result and with ES6 JavaScript uses &quot;Promises&quot; as a generic way of handling management of asynchromous completion of requests.</p><p>Specific examples of differences in the asynchronous behavior can be seen when using the &quot;CommonJS module&quot; vs the ES6 &quot;module&quot;:</p><ul><li>CommonJS module - require is executed synchronously while</li><li>ES6 import - is handled asynchronously.</li></ul><p>With ES2017 the async, await keywords where introduced to provide more control of the asynchronous execution model and allow programmer control the behaviour and avoid need for Promise.</p><p>Here is a trivial example using ES6 Promise to for a request to Thrift server:</p><!--kg-card-begin: html--><pre><code>//
// 1. Open Connection to Thrift Server
//

// Import the general and generated service functions
import * as thrift from &apos;thrift&apos;;
import * as ex from &apos;../gen-nodejs/EX.js&apos;;

const host = &quot;127.0.0.1&quot;;
const port = &quot;9090&quot;;

let lastErr = null;
let exRes = null;
let exPromise = null;

// Check if we have a Promise
function isPromise(prom) {
  return prom != null &amp;&amp; typeof prom.then === &apos;function&apos;;
}

// Handle error/exception case
ferr = function(err) { console.log(&quot;ERR&gt;&gt; EX: &quot;, err); lastErr = err; };

// get our connection to Thrift based server
let connection = thrift.createConnection(host, port, {
  transport : thriftTransport,
  protocol : thriftProtocol
});
connection.on(&apos;error&apos;, ferr);

// create our client which provide handle to call our service methods
const exClient = thrift.createClient(ex, connection);

//
// 2. Now call async thrift service (exService):
//

let arg1 = {...};
let arg2 = {...};

exPromise = exClient.exService(arg1, arg2)
              .then((res) =&gt; { console.log(&apos;DBG&gt;&gt; exService got: &apos;, res);
                               if (! (isPromise(res))) exRes = res;
                               return res;})
              .catch(ferr);
               
if (isPromise(exPromise)) {
  console.log(&apos;DBG&gt;&gt; Yep - got promise as expected!&apos;);
else {
  console.log(&apos;DBG&gt;&gt; What, no promise!!!&apos;);
}

//
// Explanation:
//   a. call the Thrift service function (exService) via client handle
//   b. using &quot;then&quot; method set up the function that will receive result
//   c. allow for error/exception case using &quot;catch&quot; method
//   d. NOTE: while this looks like a &quot;try/catch&quot; clause, it acts asychronously, so we squirel the results in the lastErr / exRes variables for later retrieval
//.  e. NOTE: the isPromise function looks to see if the returned object
//              is a promise. The only thing that defines an object
//              as a promise is that is has a &quot;then&quot; method,
//              so we just test to see if the object has a &quot;then&quot; method
//</code></pre><!--kg-card-end: html--><p>That is it for JavaScript, as this was not supposed to be a tutorial on JavaScript, but a review of main architecture and concepts.</p><p>An experienced Java developer will find the core language pretty familiar. The ES6 additions mean that JavaScript now has full object oriented development capabilities.</p><p>The only other JavaScript concept that might be a bit foreign is in the use of &quot;closures&quot;. This uses functions that encapsulate lexically scoped identifiers so these can be accessed outside of the initial local scope of the function definition. These should be famillar to Java developers who have used its &quot;lamba&quot; enhancements and to someone who has used Scheme Lisp.</p><hr><h2 id="and-on-to-ajax-or-fat-book-2">And on to AJAX (or fat book #2)</h2><p>As discussed above you can build a Web Application using straight JavaScript server-side programming model. But JavaScript&apos;s origins were to help create more dynamic Web pages via client-side programming using the JavaScript engine on the Browser.</p><p>This has evolved over the years from simple scripting of traditional HTML web pages to <a href="https://en.wikipedia.org/wiki/Ajax_(programming)?ref=just.graphica.com.au">AJAX</a> and beyond.</p><p>So what is AJAX ? The original acronym stands for &quot;Asynchronous Javascript And Xml&quot;. </p><p>The &quot;asynchronous&quot; is in relation to typical http/s request where a request is made and the user waits until all the data is loaded and then the browser renders the result. With JavaScript on the browser this can execute (behaviour is controllable) on its own execution thread that is independent from the main user thread. This allow the JavaScript to make further request asynchronously and so decouples the http rendering from the request made back to server via the JavaScript program.</p><p>In original AJAX these request are made through the <a href="https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest?ref=just.graphica.com.au">XMLHTTPRequest</a> method which is used to make further HTTP requests (GET, POST, UPDATE, DELETE etc) with results returned via XML in response body.</p><p>That is the XML part, but XMLHTTPRequest does not mandate XML for payload and any data format can be returned with JSON now being the preferred format, as working with JSON in JavaScript is very easy and JSON representation is very close to JavaScript object representation.</p><p>As part of the evolution the XMLHTTPRequest has now been supplanted by &quot;<a href="https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API?ref=just.graphica.com.au">fetch</a>&quot; request as perferred way to get data.</p><p>NOTE: while AJAX has &quot;asychronous&quot; in its acronym, both the JavaScript in browser and in Node use an event loop model to achieve their asynchronous model. &#xA0;The result is that by default there is only a single thread within the engine executing. This simplifies things for programmers as they do not need worry about ensuring thread safety across multiple executing thread.</p><h3 id="the-structural-components">The structural components</h3><p>So in 2010 looking at the combination of &quot;AJAX - The Definitive Guide&quot; and &quot;JavaScript - The Definitive Guide&quot; this all seemed too daunting and not a way to fast track Web UI development. I retreated to PHP, which served my purpose. Revisiting this in 2022, is AJAX still as complicated as &quot;fat book #2&quot; would have you believe ?</p><p>Happily, I believe the answer is no. To make something large and complex you need to follow a simple strategy:</p><ol><li>Understand the scope of ambition</li><li>Identify key use cases which will test the structural concepts</li><li>Look to distill the essential abstractions and foundation on which you can build</li><li>Start with the simple core and build up from this</li><li>Expect to have to refactor/refine if things get to complicated or you cannot readily accommodate new needs</li><li>Try not to underestimate the difficulting ahead (most troubled projects start with failure to anticipate the complexity ahead of them).</li></ol><p>The problem with &quot;fat book #2&quot; is that it starts with a survey of ways of doing things that runs to 200 pages and then go into details on how to implement lots of different user interface elements. It fails to to capture (2) &amp; (3), so the reader is lost before even starting.</p><p>It is important understand that AJAX did not relie on new technologies, it simply used the existing technology in a new way. &#xA0;The core of this was usage model was:</p><ul><li>Document Object Model (DOM) - provided structural view of html document, which JavaScript uses to supports navigation and manipulation of the document. If you create your initial document programatically on server side, then it is easier to think about its manipulate on client side later ...</li><li>Browser Events - allow you to hook JavaScript invocation to browser events (button press. mouse entry/exit, mouse click, page load etc). This allows you to control via JavaScript how the page responds to events </li><li>Uses CSS to control page behaviour, not just its &quot;look&quot; / &quot;style&quot; - examples of this is that CSS can be used to make things visible/invisible, within viewport or out of viewport</li><li>html &lt;div&gt; tags - to identify html structural elements (ie DOM hiearchy) that can be replaced/manipulated via Document Object Model (DOM) and can be assigned CSS styles. Note that div does not mark out document semantic structure (like: header, body, nav etc), just its DOM structural aspects, so div is not likely to go away soon</li><li>fetch (was XMLHTTPRequest) to get data and your client side JavaScript program behave asychnonously to the currently rendered html page</li></ul><p>These are the core structural elements that were used to create AJAX web applications and now simply &quot;web applications&quot; as the AJAX qualification has become redundant.</p><p>As always you can do this from scratch or you can leverage existing frameworks and tools to create your client-side scripted web application.</p><h3 id="frameworks-and-web-standards">Frameworks and Web Standards</h3><p>There a number of client side JavaScript and CSS frameworks and libraries available. A survey of these (by popularity/adoption) is given in the appendices.</p><p>For my pretty simple UI needs I have elected to:</p><ol><li>Modularise HTML elements generation to simplify html responses from NodeJS express and allow easy application of CSS definition to elements</li><li>Provide limited fetch and browser event support to allow request of asynchronous request with </li><li>DOM element replacement to display last request result (returned via JavaScript Promises)</li></ol><p>One aspect of Web Programming in 2022 that is now different is that it is all HTML from now on, as w3c.org XHTML efforts have not been adopted by the browser vendors (<a href="https://html.spec.whatwg.org/dev/?ref=just.graphica.com.au">WHATWG</a> - Apple, Google, Microsoft &amp; Mozilla). To quote:</p><ul><li>&quot;The XML syntax for HTML was formerly referred to as &quot;XHTML&quot;, but this specification does not use that term (among other reasons, because no such term is used for the HTML syntaxes of MathML and SVG).&quot;</li></ul><p>So while WHATWG &quot;living standard&quot; may sound like &quot;not stable&quot;, the rally around HTML provides greater certainty than the XML driven mania of XHTML, XFORM, XFRAME etc... XHTML is dead long live HTML.</p><p>NOTE: more details likely to follow as UI development evolves.</p><hr><h2 id="realising-canonical-web-architecture-in-2022">Realising Canonical Web Architecture in 2022</h2><p>Adoption of JavaScript for both server-side and client-side development has proved to be viable.</p><ul><li>NodeJS with <a href="https://expressjs.com/?ref=just.graphica.com.au">express</a> has allowed rapid development of Web Application, while avoiding need for seperate HTTP and Application Servers</li><li>Using <a href="https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch?ref=just.graphica.com.au">fetch</a> and <a href="https://jquery.com/?ref=just.graphica.com.au">JQuery</a> can achieve asynchronous retreival and render the results</li><li>Thrift compiler still generates &quot;CommonJS module&quot; code (even with --gen js,node,es6 flags), but using &quot;package.json&quot; type flag and ability to import &quot;commonjs&quot; module via ES6 &quot;import&quot; means you can work around this</li><li>Understanding the ES6 changes NodeJS thread and asychronous Promise model and how these impact Thrift integration was area requiring most &quot;exploration&quot; to get working (documentation is poor)</li><li>80% of what you find via google has past its &quot;use by date&quot;, as is much of &quot;fat book #2&quot; :-) </li><li> But &quot;fat book #1&quot; 7th Edition is both thinner than 5th Edition, technically current and a better place to go for introduction to modern Web Application Development (Chapter 15: JavaScript in Web Browsers)</li></ul><p>The first cut of our prototype Web UI is done, using JavaScript only and the learning curve barrier for AJAX development initially faced in 2010, was no longer an impediment. This is due to API improvements and starting simple with no dynamic content and then adding this once once comfortable with DOM and JavaScript.</p><p>As always the problem I found was that while there is lots of small technically detailed material, there not much in the way of high level architectural and conceptual context to make wading through the technical details productive. Hence this post.</p><p>Closing:</p><ul><li>expect a refresh with additional technical details on this blog as PoC UI gets further improvments in look, feel and function and</li><li>follow up in <a href="https://tips.graphica.com.au/?ref=just.graphica.com.au">&quot;Just Enough Architecture - Technical Tips&quot;</a> blog on <a href="https://tips.graphica.com.au/apache-thrift-with-javascript/?ref=just.graphica.com.au">Thrift with JavaScript</a> where there is a gap in the documentation required to get this doing quickly. </li></ul><hr><p><strong>References and Links:</strong></p><p><a href="https://en.wikipedia.org/wiki/Jakarta_Servlet?ref=just.graphica.com.au">Java/Jakarta Servlets</a> and <a href="https://en.wikipedia.org/wiki/Jakarta_Server_Pages?ref=just.graphica.com.au">JSP</a>s - helped to create the greate divide between Java and .NET and now packaged as Java Enterprise Edition or <a href="https://www.oracle.com/au/java/technologies/java-ee-glance.html?ref=just.graphica.com.au">Java EE</a></p><p>Microsoft <a href="https://en.wikipedia.org/wiki/.NET_Framework?ref=just.graphica.com.au">.NET</a> &#xA0;and <a href="https://en.wikipedia.org/wiki/Active_Server_Pages?ref=just.graphica.com.au">ASP</a>s - Microsoft provided the Active Server Page and ASP.NET as an alternative to Java and JSPs. Now open sourced as <a href="https://dotnet.microsoft.com/en-us/apps/aspnet?ref=just.graphica.com.au">ASP.NET</a></p><p><a href="https://en.wikipedia.org/wiki/PHP?ref=just.graphica.com.au">PHP</a> - while there was battle going on with Java &amp; .NET, PHP quietly become the most popular way to develope forms based Web applications. Can be officially found at <a href="https://www.php.net/?ref=just.graphica.com.au">php.net</a> (the .net that beats .NET, in &quot;server side languge&quot; <a href="https://w3techs.com/technologies/overview/programming_language?ref=just.graphica.com.au">use share</a> according to <a href="https://w3techs.com/?ref=just.graphica.com.au">w3tech.com</a> survey)</p><p><a href="https://en.wikipedia.org/wiki/V8_(JavaScript_engine)?ref=just.graphica.com.au">V8 JavaScript</a> Engine - to execute JavaScript requires an engine. &#xA0;On the Server side the Google Open Sourced V8 Javascript Engine is likely the most used and embedded engine. It is also used as JavaScript engine in the Chrome Browser</p><p><a href="https://nodejs.org/en/?ref=just.graphica.com.au">NodeJS</a> - NodeJS is a JavaScript runtime framework, for executing JavaScript on server. It includes a combination of V8 JavaScript engine with a set of libraries (http &amp; express - libraries provide alternate ways to build HTTP servers with NodeJS) and an package manager (Node Package Manager). The use of NodeJS to provide the runtime environment does not dictate what other JavaScript framework / component libraries you might wish to use. With NodeJS you can have server-side JavaScript and with browser have client side JavaScript code. The server side and client side JavaScript enviornments are independent. &#xA0;There are many AJAX implementations that do not use Server-Side JavaScript.</p><p><a href="https://expressjs.com/?ref=just.graphica.com.au">express</a> - a simple JavaScript http server developement framework, helps realise the ambition of having Web Application that is the Application Server.</p><p><a href="https://jquery.com/?ref=just.graphica.com.au">JQuery</a> - DOM object manipulation for JavaScript</p><p><a href="https://thrift.apache.org/?ref=just.graphica.com.au">Apache Thrift</a> - a back to the future distributed systems development tool using IDL (remember <a href="https://datatracker.ietf.org/wg/oncrpc/about/?ref=just.graphica.com.au">SUN/ONC RPC / XDR</a> etc ?) to generate client and server stubs and avoid having to worry about JSON/XML and all that other on the wire packaging nonsense.</p><p>C# <a href="https://learn.microsoft.com/en-us/dotnet/api/system.web.ihttphandler.processrequest?view=netframework-4.8&amp;ref=just.graphica.com.au#system-web-ihttphandler-processrequest(system-web-httpcontext)">IHttpHandler.ProcessRequest(HttpContext) Method</a> - handles http request in C#, though generally .NET framework uses ASP templates</p><p><a href="https://en.wikipedia.org/wiki/Serverless_computing?ref=just.graphica.com.au">Serverless</a> computing - a appliation development pattern that removes need to for knowledge or visibility into the applicaiton deployment infrastructure (such as Web Servers and J2EE application servers).</p><p><a href="https://w3techs.com/?ref=just.graphica.com.au">w3tech.com</a> - collects web infrastructure and tooling data using web crawling</p><p><a href="https://www.statista.com/?ref=just.graphica.com.au">Statista</a> - quotes survery results...</p><ul><li><a href="https://www.statista.com/statistics/1124699/worldwide-developer-survey-most-used-frameworks-web/?ref=just.graphica.com.au">Frameworks</a> - &quot;Most used web frameworks among developers worldwide, as of 2022&quot;</li><li><a href="https://www.statista.com/statistics/793628/worldwide-developer-survey-most-used-languages/?ref=just.graphica.com.au">Programming Languages</a> - &quot;Most used programming languages among developers worldwide as of 2022&quot;</li></ul><p><a href="https://mitpress.mit.edu/9780262510875/structure-and-interpretation-of-computer-programs/?ref=just.graphica.com.au">Structure and Interpretation of Computer Programs</a> - by Abelson &amp; Sussman, provides a deep dive into conceptual models for programming and computing using Scheme Lisp for illustration. JavaScript has many properties that similar to Scheme and chapter 4 - Metalinguistic Abstraction provides details of the &quot;eval/apply&quot; loop which is consistent with JavaScript interpreter. Available as <a href="https://web.mit.edu/6.001/6.037/sicp.pdf?ref=just.graphica.com.au">pdf</a>.</p><p><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript?ref=just.graphica.com.au">JavaScript</a> Reference - Documentation on Mozilla &#xA0;Developer Network</p><p><a href="https://www.ecma-international.org/technical-committees/tc39/?tab=general&amp;ref=just.graphica.com.au">ECMAScript</a> Standard - managed by ECMA International Technical Committee TC39, which manages the language evolution <a href="https://tc39.es/process-document/?ref=just.graphica.com.au">process</a></p><p><a href="https://www.oreilly.com/library/view/javascript-the-definitive/9781491952016/?ref=just.graphica.com.au">JavaScript - The Definitive Guide</a> - while you can get by doing google search for all your JavaScript related questions, this &quot;fat book #1&quot; has much to commend it and is much more current (in 7th Edition guise) and well written than much of what you will find on the web via google and complements the reference material on &quot;Mozilla Developer Network&quot; nicely</p><p><a href="https://www.amazon.com/Building-Web-Applications-UML-2nd/dp/0201730383?ref=just.graphica.com.au">Building Web Applications with UML</a> - more about Web Application Architecture in general than &quot;building with UML&quot; (1st Edition being assumed source for &quot;Canonical Web Architecture&quot; as referenced by &quot;Developing Agent-Oriented Information Systems for the Enterprise&quot; - Jaelson Castro, Manuel Kolp &amp; John Mylopoulos, see below, however I first came across this via Grady Booch blog, which is no longer available on line...). 2nd Edition does not have &quot;Canonical Web Architecture&quot; figure.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://just.graphica.com.au/content/images/2022/11/canonical-web-architecture-conallen-lowres-01.png" class="kg-image" alt="JavaScript &amp; Canonical Web Architecture" loading="lazy" width="556" height="213"><figcaption>Assumed from: Conallen reference via &quot;Developing Agent-Oriented Information Systems...&quot;</figcaption></figure><p><a href="https://en.wikipedia.org/wiki/Ajax_(programming)?ref=just.graphica.com.au">AJAX</a> - &quot;Asychronous Javascript And Xml&quot; - a web programming model that used the browsers JavaScript engine to create dynamic web content. This is significantly different from traditional web HTTP/HTML model where request resulted in &quot;static&quot; pages and any dynamic behaviour was through downloading of Java, Flash and ActiveX programs using the HTML &lt;object&gt; tag. Now all of these binary program models are obselete, thanks to JavaScript in the browser and alternate programming models like AJAX.</p><p><a href="https://tips.graphica.com.au/apache-thrift-with-javascript/?ref=just.graphica.com.au">Thrift with JavaScript</a> - my notes on getting these to work..</p><hr><h1 id="appendices">Appendices</h1><h2 id="web-development-programming-tools-usage">Web Development &amp; Programming Tools Usage</h2><p>The following usage and survey data provide some useful hints in current trends and usage of Web Development Tools.</p><p><a href="https://w3techs.com/?ref=just.graphica.com.au">w3tech.com</a> data is based on doing web crawling and so provides a view of what is out there, while statista is based on surveys and so give current trends and focus:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://just.graphica.com.au/content/images/2022/10/w3tech-server-side-01.png" class="kg-image" alt="JavaScript &amp; Canonical Web Architecture" loading="lazy" width="589" height="412"><figcaption>Server-Side Programming Languages - shows PHP dominance</figcaption></figure><p>PHP&apos;s continued dominance as the most prevalent language for server-side programming is readily apparent but down from the 80% it had in 2013. ASP.NET has seen singificant decline from 19% in 2013. Ruby has lifted signficantly from &lt; 1% to 5.7% and Java has staged a comeback from 2.8% in 2013 to 4.5%. JavaScript did not make the cut in 2013 but is now appearing.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://just.graphica.com.au/content/images/2022/10/w3tech-client-side-01.png" class="kg-image" alt="JavaScript &amp; Canonical Web Architecture" loading="lazy" width="589" height="199"><figcaption>Client-Side Programming - Only a remant of Flash Left</figcaption></figure><p>The turning off of Flash, first by force by Apple and then its withdrawal by Adobe leaves only JavaScript on the client.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://just.graphica.com.au/content/images/2022/10/w3tech-web-servers-01.png" class="kg-image" alt="JavaScript &amp; Canonical Web Architecture" loading="lazy" width="589" height="522"><figcaption>Web Servers - with NodeJS</figcaption></figure><p>NodeJS appearing in the Web Server category is interesting as this is indicative of it support for &quot;server-less&quot; application server paradigm and its initial motiviation for providing non-blocking I/O model specifically tuned for web applications. Note, no other &quot;server-less&quot; delivery vehicle is on list (including AWS Lamba).</p><p>And now the survey results from Statista:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://just.graphica.com.au/content/images/2022/10/statista-web-frameworks-01.png" class="kg-image" alt="JavaScript &amp; Canonical Web Architecture" loading="lazy" width="809" height="1146" srcset="https://just.graphica.com.au/content/images/size/w600/2022/10/statista-web-frameworks-01.png 600w, https://just.graphica.com.au/content/images/2022/10/statista-web-frameworks-01.png 809w" sizes="(min-width: 720px) 720px"><figcaption>Statista: Web Programming Frameworks - Nearly all JavaScript based</figcaption></figure><p>The survey results are hugely slanted to JavaScript based frameworks, paints a signficantly different view that the w3tech.com one, which give much more wait to Ruby, while PHP is not here at all.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://just.graphica.com.au/content/images/2022/10/statista-programming-language-01.png" class="kg-image" alt="JavaScript &amp; Canonical Web Architecture" loading="lazy" width="804" height="1140" srcset="https://just.graphica.com.au/content/images/size/w600/2022/10/statista-programming-language-01.png 600w, https://just.graphica.com.au/content/images/2022/10/statista-programming-language-01.png 804w" sizes="(min-width: 720px) 720px"><figcaption>Statista: Most used programming languages - Again showing JavaScript</figcaption></figure><p>On Programming Languages JavaScript is again the most popular, with Python, Java and PHP showing significant share. The appearance of &quot;HTML/CSS&quot; is clear indication of importance of CSS plays in creating &quot;lovely looking&quot; pages (like this one ;-) ).</p><p>For productive JavaScript development there are a large number of libraries available. Here is the usage based on web crawling:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://just.graphica.com.au/content/images/2022/10/w3tech-javascript-libraries-01.png" class="kg-image" alt="JavaScript &amp; Canonical Web Architecture" loading="lazy" width="601" height="1318" srcset="https://just.graphica.com.au/content/images/size/w600/2022/10/w3tech-javascript-libraries-01.png 600w, https://just.graphica.com.au/content/images/2022/10/w3tech-javascript-libraries-01.png 601w"><figcaption>JavaScript Libraries - JQuery is essential</figcaption></figure><p>Again there is discrepencies between web crawl and survery, but both have JQuery as essential, which other libraries are discretionary and likely a choice of one vs another will be required.</p>]]></content:encoded></item><item><title><![CDATA[An Assurance Coverage Model]]></title><description><![CDATA[A simple Assurance coverage model to help communicate coverage and identify future scope/ambition for coverage.]]></description><link>https://just.graphica.com.au/an-assurance-capability-model/</link><guid isPermaLink="false">6469847f76e6920438e6d145</guid><category><![CDATA[assurance]]></category><dc:creator><![CDATA[John Hartley]]></dc:creator><pubDate>Mon, 03 Oct 2022 02:16:13 GMT</pubDate><media:content url="https://just.graphica.com.au/content/images/2022/10/assurance-coverage-zoom-01.png" medium="image"/><content:encoded><![CDATA[<img src="https://just.graphica.com.au/content/images/2022/10/assurance-coverage-zoom-01.png" alt="An Assurance Coverage Model"><p>In telco there is an old adage that you create a service once and you assure it forever. Over the last five years Assurance has moved from &quot;ITIL&quot; focused to &quot;Closed Loop Automation&quot; to &quot;Intent Based Network Operations&quot;. </p><p>To gauge the maturity of current and proposed Assurance capabilities, I use a coverage model, which generates a &quot;heat map&quot; of capabilities and on a per technology basis.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://just.graphica.com.au/content/images/2022/10/assurance-coverage-model-03-2.png" class="kg-image" alt="An Assurance Coverage Model" loading="lazy" width="1920" height="1712" srcset="https://just.graphica.com.au/content/images/size/w600/2022/10/assurance-coverage-model-03-2.png 600w, https://just.graphica.com.au/content/images/size/w1000/2022/10/assurance-coverage-model-03-2.png 1000w, https://just.graphica.com.au/content/images/size/w1600/2022/10/assurance-coverage-model-03-2.png 1600w, https://just.graphica.com.au/content/images/2022/10/assurance-coverage-model-03-2.png 1920w" sizes="(min-width: 720px) 720px"><figcaption>Assurance Coverage Model - What have you got . what are looking to target ?</figcaption></figure><hr><h2 id="coverage-model">Coverage Model</h2><p>The coverage model includes coverage of key ITIL processes:</p><ul><li>Alarm / Metric Collection - collecting data from systems that is basis for monitoring</li><li>Incident Management - handing of incidents where focus is on faster restoration of service/s, which could be triggered from system or consumer/customer of service</li><li>Change Management - where focus is on managing planned change in system and</li><li>Service Request - which is focused on taking requests and manageing these</li></ul><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://just.graphica.com.au/content/images/2022/10/assurance-coverage-model-processes-01-1.png" class="kg-image" alt="An Assurance Coverage Model" loading="lazy" width="2000" height="289" srcset="https://just.graphica.com.au/content/images/size/w600/2022/10/assurance-coverage-model-processes-01-1.png 600w, https://just.graphica.com.au/content/images/size/w1000/2022/10/assurance-coverage-model-processes-01-1.png 1000w, https://just.graphica.com.au/content/images/size/w1600/2022/10/assurance-coverage-model-processes-01-1.png 1600w, https://just.graphica.com.au/content/images/size/w2400/2022/10/assurance-coverage-model-processes-01-1.png 2400w" sizes="(min-width: 720px) 720px"><figcaption>Assurance Coverage Model - Key ITIL Processes</figcaption></figure><p>The model detail includes activities required to provide:</p><ul><li>Data Augmentation - to enrich the information that is availabe</li><li>Aggregation - to aggregate multiple events resulting from alarms storm and providing summary view of this</li><li>Root Cause Analysis - to determine underlying cause of failure / discrepancy</li><li>Service Impact Analysis - to understand impact of failure / discrepancy</li><li>Parent / Child Relationships - to show the relationships across alarms / incidents and discrepancies</li><li>Notifications - to inform required parties / systems of events / incidents</li><li>Reporting - provides aggregated reports of activitiy within monitored systems</li><li>Problems Management - takes broader set of data to try to provide correlating events / changes that could contribute to problem</li><li>Performance / Optimisation Management - looks at metrics and overall aggregate per formance of the network</li><li>Closed Loop Automation - network ambition and coverage, that could be driven by events / alarms for automated break / fix automation (with notification to change management) or if looking at aggregate performance and optimisation is more likely to be served by.</li><li>Intent Based Operation - which operates based on definition and mesurement of intent and having agents that can proposal actions drive systems to operating with defined intent thresholds.</li></ul><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://just.graphica.com.au/content/images/2022/10/assurance-coverage-model-capabilities-03-4.png" class="kg-image" alt="An Assurance Coverage Model" loading="lazy" width="488" height="1594"><figcaption>Assurance Coverage Model - Capabilities / Functions</figcaption></figure><hr><h2 id="use-of-model">Use of Model</h2><p>The purpose of the model is not to &quot;go all green&quot; rather it is get an overall view of capabilities and there maturity within the different domains that might exist at the CSP. The example has domains: Applications, IT Systems / NFVi, Environmental, Optical, Ethernet, IP/MPLS &amp; Wireless.</p><figure class="kg-card kg-image-card"><img src="https://just.graphica.com.au/content/images/2022/10/assurance-coverage-model-domains-01.png" class="kg-image" alt="An Assurance Coverage Model" loading="lazy" width="1442" height="432" srcset="https://just.graphica.com.au/content/images/size/w600/2022/10/assurance-coverage-model-domains-01.png 600w, https://just.graphica.com.au/content/images/size/w1000/2022/10/assurance-coverage-model-domains-01.png 1000w, https://just.graphica.com.au/content/images/2022/10/assurance-coverage-model-domains-01.png 1442w" sizes="(min-width: 720px) 720px"></figure><p>The purpose is to identify the targets for coverage and what capabilities would be needed to meet these.</p><p>This is consistent with current ITIL practice, which is not to for complete ITIL coverage but to target your coverage based on benefit and prioritities.</p><p>NOTE: The heat map spreadsheet is available by request.</p><hr><p><strong>References and Links:</strong></p><p><a href="https://en.wikipedia.org/wiki/ITIL?ref=just.graphica.com.au">ITIL</a> - Information Technology Infrastructure Library (ITIL) was an initiative of UK Governments IT Agency to define clear processes and management of IT systems. This was expanded and adopted by Telecommunciations Industry. The &quot;library&quot; is now mantained by <a href="https://www.axelos.com/certifications/itil-service-management/?ref=just.graphica.com.au">Axelos</a>.</p><p>Closed Loop Automation - is closely related to Intent Based systems, but lacked formal specification of the intent. Initial objectives were defined in IBM&apos;s <a href="https://en.wikipedia.org/wiki/Autonomic_computing?ref=just.graphica.com.au">Autonomic Computing</a> initative (2001). This <a href="https://web.archive.org/web/20110916160342/http://www.research.ibm.com/autonomic/manifesto/autonomic_computing.pdf">outlined</a> a sense and respond framwwork with primary goals of: Self Configuration, Self Healing, Self Optimisation and Self Protection.</p><p><a href="https://inform.tmforum.org/topics/intent-based-networking/?ref=just.graphica.com.au">Intent Based Network Operations</a> - is currently one of TmForums strategic focus items in moving to automous network operations. To operate on intent requires clear way to specify and measure performance relative to objective and have agents that can propose actions when there is a divergence. So currently Intent based operations work best in context of overall network performance and operations</p>]]></content:encoded></item><item><title><![CDATA[an5 - Intelligent Network Design]]></title><description><![CDATA[Introduction to an5 network modelling language and AI network design solver prototype.]]></description><link>https://just.graphica.com.au/intelligent-network-design/</link><guid isPermaLink="false">6469847f76e6920438e6d146</guid><category><![CDATA[Network Design]]></category><category><![CDATA[business architecture]]></category><category><![CDATA[Artificial Intelligence]]></category><category><![CDATA[value chain]]></category><category><![CDATA[search]]></category><category><![CDATA[and/or trees]]></category><category><![CDATA[heuristic search]]></category><category><![CDATA[contstraint satisfaction problems]]></category><dc:creator><![CDATA[John Hartley]]></dc:creator><pubDate>Tue, 20 Apr 2021 10:44:04 GMT</pubDate><media:content url="https://just.graphica.com.au/content/images/2021/04/monkey-banana-01.png" medium="image"/><content:encoded><![CDATA[<img src="https://just.graphica.com.au/content/images/2021/04/monkey-banana-01.png" alt="an5 - Intelligent Network Design"><p><strong>STATUS - Mar 2023 - </strong>updated an5 to have simpler and clearer goal description using &quot;goal&quot;, &quot;constraint&quot; and &quot;handler&quot; keywords</p><p><strong>STATUS - Jan 2022 - </strong>update example to reflect JSON support, as it trendy ;-) , but not necessarily easier to read</p><p><strong>STATUS - 18 April 2021 - </strong>coded prototype and completed testing and measurement</p><hr><p>Telecommunications services is a commodity business. In brief moments something new and shiny pops up that can command a premium price: the phone call, the telegram, the internet, mobile communications. Each of these growth driving cycles is then followed by need to drive out cost as commoditisation sets in and service providers try to find new and better ways automate operations, while improving customer experience. This focus on automation is key to profitability.</p><p>Within the network operations space there are three main process areas: Network Design and Build, Fulfilment and Assurance all having need for systems that support or perform some level of network design.</p><p>In general each of design &amp; build, fulfilment &amp; assurance focus on a set of tightly constrained areas to apply automation and then chain the various &quot;little blocks&quot; of automation into larger business processes.</p><p>This works to the extent that the structure of what is being managed does not change. If the structure does change, like in the case of a change in the underlying network technology or service topology then it is back to the drawing board to re-create the &quot;little blocks&quot; so they can be reassembled.</p><p>The &quot;little blocks&quot; are things like:</p><ul><li>Create an ethernet access service from location A to location B (a MEF example)</li><li>Enable an alternate network path, when main path is experiencing unusually heavy load (a typical closed loop assurance response model)</li><li>Connect VNF within NFVi platform up to internet ingress/egress point (an SDN / VNF example)</li></ul><p>In each of the these cases the approach is to:</p><ol><li>Find the right template</li><li>Apply the template allowing for specific considered conditions including input parameters, defined variations and resource allocations</li><li>If the template does not allow for condition then fall out into manual work queue</li></ol><p>Things that &quot;little block&quot; approach cannot readily do are:</p><ul><li>Design to rebuilt an NFVi underlay network to support sharing of hypervisor attached storage across multiple Virtual Infrastructure Managers (VIM) - this is often a multi-month rebuild, requiring full redesign</li><li>Create a new template to apply to a MEF ethernet access service, &#xA0;after the &#xA0;access technology has changed from FTTP (fibre to the premise) to FTTN (fibre to the node) - this requires the network engineer and the fulfilment developer to create new templates and potentially revised process to handle the new network topology.</li></ul><p>Problems like these need an intelligent network design capability. &quot;Intelligent&quot; as this work is typically done by people with specialist knowledge and experience in network design.</p><p>My hypothesis is that if you start to apply Artificial Intelligence to the &quot;bigger&quot; network design problem then most of the &quot;little block&quot; problems will be solved at the same time, as these are mostly the final degenerate and terminating cases of the larger &quot;Intelligent Network Design&quot; problem.</p><p>This blog posting is about the architecture, implementation and testing of a prototype &quot;intelligent network design&quot; framework.</p><p>The purpose is to:</p><ul><li>Provide an example of using AI solution to network build domain and how this is different to typical telco automation</li><li>Outline the key architectural structures of the framework</li><li>Determine if the problem is tractable</li><li>Gauge interest and get feedback in doing further development of the framework</li><li>See how this could be used to support network planning and design (see diagram from Automation Life-Cycle context)</li></ul><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://just.graphica.com.au/content/images/2023/03/an5-design-lcm-positioning-02.png" class="kg-image" alt="an5 - Intelligent Network Design" loading="lazy" width="1270" height="505" srcset="https://just.graphica.com.au/content/images/size/w600/2023/03/an5-design-lcm-positioning-02.png 600w, https://just.graphica.com.au/content/images/size/w1000/2023/03/an5-design-lcm-positioning-02.png 1000w, https://just.graphica.com.au/content/images/2023/03/an5-design-lcm-positioning-02.png 1270w" sizes="(min-width: 720px) 720px"><figcaption>an5 - initial testing target Cloud Plan/Design</figcaption></figure><hr><h2 id="introduction">Introduction</h2><p>I did an analysis on why Fulfilment systems in telecoms were so expensive to keep up to date. The result is that Fulfilment systems can be significant inhibitors to meeting &quot;speed to market&quot; objectives. </p><p>I found that these systems:</p><ul><li>dealt with abstractions that were little higher than procedural programming languages</li><li>additional dynamic catalog driven process, allowed behaviour more like what is readily achievable with object oriented programming languages (greater abstraction and polymorphism), but this was not easily achieved, </li><li>they did not make use of inventory data to find alternate solutions</li><li>implementation typically centred around trying to codify network service and configuration designs provided by network engineers, which</li><li>broke when there was any change in the structure of the underlying network (topology changes or network vendor devices changes).</li></ul><p>The answer seemed to lie in having Fulfilment systems that were able to accomodate service topology changes, which in turn meant they needed better path finding capabilities. Path tracing is built on top of network inventory.</p><p>I documented some of this in my blog <a href="https://just.graphica.com.au/telco-topology/">&quot;Telco Inventory &amp; Topology - Enabler for Automation&quot;</a>. &#xA0;Around 2016 Network Orchestration was being introduced as a way to try to decouple the network facing part of fulfilment from the customer facing part (the old Service Order Management vs Customer Order Management demarcation). </p><p>Two common technologies for Orchestration are:</p><ul><li>OASIS <a href="https://www.oasis-open.org/committees/tc_home.php?wg_abbrev=tosca&amp;ref=just.graphica.com.au">TOSCA</a> , which is backed to ETSI and comes from IT world &amp;</li><li>Netconf/YANG from IETF with heavy backing by CISCO / Tail-f, from the IP network world.</li></ul><p>Today most Orchestrators still use similar template driven process flows as traditional service order management systems, but now with inventory (or cut down Configuration Management DB - CMDB version of this) and activation more tightly coupled.</p><p>While it is relatively simple to implement a better network path tracing mechanism on top of a network graph, this only works when the edges in the graph already exist. If the edges don&apos;t exists then the graph based algorithm are not applicable.</p><p>A couple of cases where this exact situation occurs, at both a very small level and a larger level are the:</p><ul><li>need to apply a physical jumper link in network to realise a full circuit (such as occurs with cable patch panels, fibre distribution hubs and data centre rack building)</li><li>need to run a new access tails to a given location (new estate building).</li></ul><p>These problems either fall into the realm of network design or special purpose code that handles the design / assign logic for the particular case.</p><p>It seemed like there was a need to test a more general means to solve these type of problems, using an AI solution search based approach. As the search is not constrained to an existing network this will involve some &quot;groping in the dark&quot; to find a way get get from the known connection point to target point. Any such solution must be able to achieve this whether the &quot;groping&quot; is with physical or logical network constructs.</p><p>An AI based based solution is required, as the problem needs to build the constraints (i.e. network) not just resolve them. This will then allow the more typical service establishment fulfilment request to operate, but now with generated templates rather than hand crafted one. The design activity can then become one of verification.</p><hr><h2 id="needs-and-principles">Needs and Principles</h2><p>If you are considering mostly network path design and follow on activation then the target architecture will need to use graph based inventory model and leverage the built in path search capabilities. The gap is that this presumes that the network design (and hence resulting graph representation) is already available. So ...</p><p><strong>Decision #1 -</strong> Need to have architecture that is able to build paths from scratch not just navigate across existing paths.</p><p><strong>Resolution -</strong> Need to implement a network design generating system, which is domain of AI planning and constraint based solvers.</p><p><strong>Key Use Case -</strong> build a network from a collection of network components, using AI constraints based solver.</p><p><strong>Decision #2 &#xA0;-</strong> Need to have a way to represent the problem space that is specific to the network design. Existing network representation models are generally not suitable for use with planning solvers (ITU X509), are focused on network configuration (Netconf/YANG) and do not have sufficiently rich network representation (Oasis TOSCA) or are targeted to a different problem such network simulation languages [14] or are just a syntactical representation choices such as JSON.</p><p>To resolve this I started to try to specify a network using JSON. It quickly became evident that trying to represent the domain problem via JSON was not intuitive. In fact it tended to obscure the problem. It seemed that the best way to generate JSON would be to write a small Java code prototype and then use it to generate the JSON output from the Java class / instance representation, rather than start with JSON and try to consume this as input into representational model. &#xA0;So a chicken and egg problem.</p><p>As the domain needs to represent a network (a form of graph) the representation needed to support, the following types:</p><ul><li>Network - a collection of edge and nodes</li><li>Network Element - a node within graph theory which could be a physical or logical network element</li><li>Link - to represent the network edge and in networking this should be something that is used to link Network Elements together</li><li>Path - a sequence network elements and links</li><li>Interface - to create a network there needs to be a flexible way to specify interfaces that define how the elements/links that make up a path can be connected together</li></ul><p><strong>Resolution - </strong> Define a network modelling language that can describe the network parts as well as the build goals and template.</p><p>The defined language was - <strong>an5</strong> &#xA0;(<strong>a</strong> <strong>n</strong>ETOWK LANGUAGE WITH <strong>5</strong> CLASSES). This would then allow specification of components and interface compatibilities. The interface compatibilities are used to determine how the network can be built by plugging together the building blocks. The an5 language structure allows specification of an interface including cardinality and signatures:</p><ul><li>common - the common signature definition (plug = rj45)</li><li>provides - what the interface provides (sex = female)</li><li>needs - what the interface needs (sex = male)</li><li>service - what service will be enabled as a result of successfully binding against an interface</li></ul><p>The an5 language was derived from Java including similar semantics for interfaces and class inheritance, but language is mostly declarative, without need to implement methods (though this might change with need to add resource allocation behaviours).</p><p><strong>Key Use Case -</strong> be able to write network specification using an5, compile this and then use generated package to define network build &quot;programs&quot;</p><p>The following is an example of an an5 specification for:</p><ul><li>Computer with PCIe slots</li><li>NIC with Ethernet Ports</li><li>Ethernet Switch</li><li>cat6 cables</li></ul><!--kg-card-begin: html--><pre><code>/*
  What: A small test example of set of classes
     that can be used to assemble a data centre network.
     It is example of set of a nETWORK LANGUAGE WITH 5 CLASSES
     definitions, not instances.
     
  By: John Hartley - Graphica Software/Dokmai Pty Ltd
    

*/

package an5.generic.dctypes;

@Model(
  spec = &quot;an5&quot;,
  version = &quot;0.2&quot;
)

interface pcie_interface {
  common = { &quot;type=pcie&quot;, &quot;width=(1|4|8|16)&quot;, &quot;gen=([1-4]\\.*)&quot;};
}

interface pcie_slot extends pcie_interface {
  needs = {&quot;form=(card)?&quot;};
  provides = {&quot;form=slot&quot;};
  binding = &quot;slot-%I+1&quot;;
  string name;
}

class computer extends element exposes pcie_slot {
  reflects pcie_slot[] slot;
  string name;
}

interface rj45_plug {
  common = { &quot;plug=rj45&quot;};
}

interface baset_sink extends rj45_plug {
  needs = { &quot;cable=(cat([3-8].?))?&quot;,
            &quot;gender=male&quot;, &quot;media=copper&quot;};
  provides = {&quot;plug=rj45&quot;, &quot;gender=female&quot;};
}
 
interface ethernet_port_baset extends baset_sink {
  common = { &quot;service=ethernet&quot;};
  binding = &quot;p-%I+1&quot;;
  string name,
         MAC;
}

interface ethernet_lag {
  common = { &quot;service=(ethernet)+&quot; }
  binding = &quot;lag-%I&quot;;
  string name;
}

interface ethernet_vlan {
  common = { &quot;service=(ethernet_vlan){0,4096}&quot; }
  needs = { &quot;service=ethernet&quot; };
  binding = &quot;vlan-%I&quot;;
  string name;
}

class ethernet_lag_link extends link exposes ethernet_lag {
  reflects ethernet_port_base_t[] ports;
}

class ethernet_vlan_link extends link exposes ethernet_lag, ethernet_vlan {
  reflects ethernet_lag lags[];
  reflects ethernet_port_base_t ports[];
}

interface pcie_card extends pcie_interface {
  needs = {&quot;form=(slot)?&quot;};
  provides = {&quot;form=card&quot;};
}

class pcie_nic extends element exposes pcie_card, ethernet_port_baset {
  reflects pcie_card card;
  reflects ethernet_port_baset port[];
}

class switch extends element exposes ethernet_port_baset, ethernet_vlan, ethernet_lag {
  reflects ethernet_port_baset port[];
  reflects ethernet_vlan vlan[];
  reflects ethernet_lag lag[];
  string name;
}
 
interface catx_link extends rj45_plug {
  provides = {&quot;cable=(cat([3-8].?))?&quot;, &quot;gender=male&quot;,
            &quot;media=copper&quot;};
  needs = {&quot;plug=rj45&quot;, &quot;gender=female&quot;};
}

interface cat6_link extends catx_link {
  provides = {&quot;cable=cat6&quot;};
}
  
class cat6_cable extends link exposes catx_link {
  string type = &quot;physical&quot;,
         colour,
         label;
   int length;
   reflects catx_link a, b;
}

/* new 0.2 spec */
goal class ethernet_lan extends network {
  @mandatory switch[] fabric;
  @mandatory computer[] hosts;
  object[] uses;
  service = { &quot;ethernet&quot;, &quot;(ethernet_vlan)*&quot; };
  handler = &quot;an5.solve.an5CreateNetwork&quot;;

  constraint class ethernet_node extends element {
    @mandatory computer host;
    @mandatory switch ether;
    object[] uses;
   }
}

/* old 0.1 spec
abstract class ethernet_lan extends network {
  @mandatory switch[] fabric;
  @mandatory computer[] hosts;
  object[] uses;
  service = { &quot;ethernet&quot;, &quot;(ethernet_vlan)*&quot; };
}

abstract class ethernet_node extends element {
  @mandatory computer host;
  @mandatory switch ether;
  object[] uses;
 } */</code></pre><!--kg-card-end: html--><p>The compiler takes (Java like) an5 specification as input and will generate compiled code for efficiency. As the an5 syntax specification is very Java like this means it it easy and possible to generate Java code directly and avoid having to create an intermediary meta-model for an5 representation (see Decision #6). This has benefits in ease of debugging models but also in overall performance of solve engine.</p><p><strong>Decision #3 -</strong> Need to seperate out the generic CSP solver and its search algorithms from the network domain level problem reduction logic, combinatorial generators, scoring and domain knowledge based optimisation.</p><p><strong>Resolution -</strong> Create generic AND/OR solver (see Nilsson [1] &amp; Winston [2]) for main control structure and have this invoke domain level template. The class level structure is illustrated here:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://just.graphica.com.au/content/images/2021/04/an5-generic-domain-seperation-01-1.png" class="kg-image" alt="an5 - Intelligent Network Design" loading="lazy" width="1127" height="604" srcset="https://just.graphica.com.au/content/images/size/w600/2021/04/an5-generic-domain-seperation-01-1.png 600w, https://just.graphica.com.au/content/images/size/w1000/2021/04/an5-generic-domain-seperation-01-1.png 1000w, https://just.graphica.com.au/content/images/2021/04/an5-generic-domain-seperation-01-1.png 1127w" sizes="(min-width: 720px) 720px"><figcaption>Solver Genric vs Domain Seperation</figcaption></figure><p><strong>Example Use Case</strong> - Create Network by connecting 3 computers to 1 switch/router:</p><ul><li>R(n) = J(R(switch/router), 3 x Computer)) - &quot;create resulting network R(n) by joining J(network, 3 x elements) the set of elements to an initial network R(switch/router)&quot; or</li><li>R(n) = C(J(R(switch/router), 1 x Computer), J(R(switch/router), 1 x Computer), J(R(switch/router), 1 x Computer))) - &quot;create a network by connecting C(J(R(n)), J(R(n)) ..) multiple networks created by joining J(R(switch/router), 1 x Computer) a set of individual networks with have a common central hub (switch/router).</li></ul><p>This shows that there are alternate ways to reduce the initial problem into a set of smaller problems. &#xA0;In the top case the result is an OR tree only, while in the lower case the result is an AND/OR tree structure. In general the solution will require AND/OR based resolutions. Research has also found that using AND/OR can result in significant reduction in the search space size in comparison to using OR tree solvers only (see Dechter [3][4]).</p><p><strong>Decision #4 -</strong> Need to be able to provide delayed resource allocation as a result of binding to interfaces. This is essential in context of using AI search as allocation of resource at the time of initial binding could result in consumption of resources prior to determination that the search path is a successful one. So need to delay allocation until the search completes with set of valid results and only then commit resources from the finite pool. Typical example is things like IP address or VLAN Id allocation.</p><p><strong>Resolution -</strong> Define state model for interface binding that allows for binding to be &quot;un-committed&quot; unless explicitly committed.</p><p>The binding state model is:</p><ul><li>&quot;Open&quot; =&gt; &quot;Base Match&quot; == un-committed Binding against base definition with no open unmatched items</li><li>&quot;Open&quot; =&gt; &quot;Reflecting&quot; == un-committed partial Binding against base definition or uncommitted Binding with open unmatched items, with resulting open items and/or service outcome being re-exposed as new interface</li><li>&quot;Base Match&quot; or &quot;Reflecting&quot; =&gt; &quot;Committed&quot; == commit previously un-committed Binding, doing any required resource allocation and remove any Reflecting interface from available pool</li></ul><p>The Interface and Binding model is critical to allowing specification of virtual services such as Ethernet VLAN and aggregate links such a Ethernet LAG.</p><p>NOTE #1: That the semantics of network service such as Ethernet VLAN or Ethernet LAG is coded as an5 language specification and not through the solver runtime (see Decision #5)</p><p><strong>Decision #5 -</strong> Network protocol interoperability and interface compatibility should only be specified through an5 language specification and not built into the an5 runtime engine</p><p><strong>Resolution -</strong> provide Interface and associated binding mechanism that:</p><ul><li>allow rich specification of &quot;plug-ability&quot; across the components and</li><li>allow instantiation of new services and protocols as a result of binding across these interfaces and</li><li>support being able to dynamically add new &quot;binding with associated service &amp; protocols&quot; back into the set of available interfaces for further level of &quot;plug-ability&quot;.</li></ul><p>The other mechanism included in Interface binding is use of &quot;regular expressions&quot; to allow variations across interfaces for compatibility variations (i.e. PCIe Gen 1, 2, 3 &amp;4).</p><p><strong>Key Use Cases -</strong> Use the interface and binding to support recursive layering of an5 interface and binding to achieve protocol layering such : as physical to data link layer and ethernet to IP layering.</p><p>Here is a sample of a set of matching interface / binding specifications and classes that use them:</p><!--kg-card-begin: html--><pre><code>// A set of an5 interface spec
// for baseT ethernet with VLAN and LAG support
//

interface rj45_plug {
  common = { &quot;plug=rj45&quot;};
}

interface base_t_sink extends rj45_plug {
  needs = { &quot;cable=(cat([3-8].?))?&quot;,     &lt;&lt;== Regular expressions
            &quot;gender=male&quot;, &quot;media=copper&quot;};
  provides = {&quot;plug=rj45&quot;, &quot;gender=female&quot;};
}
 
interface ethernet_port_base_t extends base_t_sink {
  common = { &quot;service=ethernet&quot;};        &lt;&lt;== Service outcome
  binding = &quot;p-%I+1&quot;;                    &lt;&lt;== Naming substitution rules
  string name,
         MAC;
}

interface ethernet_lag {
  common = { &quot;service=(ethernet)+&quot; }  &lt;&lt;== Binding cardinality
  binding = &quot;lag-%I&quot;;
  string name;
}

interface ethernet_vlan {
  common = { &quot;service=(ethernet_vlan){0,4096}&quot; } &lt;&lt;== Binding cardinality
  needs = { &quot;service=ethernet&quot; };
  binding = &quot;vlan-%I&quot;;
  string name;
}

class ethernet_lag_link extends link exposes ethernet_lag {
  reflects ethernet_port_base_t[] ports;
}

class ethernet_vlan_link extends link exposes ethernet_lag, ethernet_vlan {
  reflects ethernet_lag lags[];
  reflects ethernet_port_base_t ports[];
}
</code></pre><!--kg-card-end: html--><p>NOTE #2: in defining the interface/binding specification I reviewed Canonical JuJu which provides a means of defining component dependencies through interfaces. However JuJu did have have sufficient control mechanisms and could not accommodate the recursive exposure mechanism required to allow reflection of bound interface to participate in further protocol layers and aggregation cases.</p><p><strong>Decision #6 -</strong> In deciding to use a specification language (Decision #3) for problem space specifications, there is need to determine how to represent this within the application layer implementation. The typical approach is to define a meta-model representation within the application layer and then create an interpreter to operate on this. As an5 provides an object oriented specification language leveraging Java, the alternative was to leverage the Java meta-model (as used by underlying Java Virtual Machine).</p><p><strong>Resolution -</strong> Leverage Java meta-model and JVM, as this already supports using compiled code for performance and has an introspection interface to allow runtime interpretation of generated models (from compiler). Another candidate considered was to use JavaScript, however this result in use of fully interpreted model, which in context of very large combinatorial and search space calculations would have significant performance impact.</p><p><strong>Decision #7</strong> - More clearly distinguish the Goal specification from the network componentry parts. This was based on feedback that is was hard to see how an5 helped with specification of &quot;target&quot;. This was related to an5 leveraging Java and not wanting to introduce to many language elements.</p><p><strong>Resolution</strong> - Add &quot;goal&quot;, &quot;constraint&quot; and &quot;handler&quot; keyboards (and retire Java &quot;abstract&quot;) so that is very easy and simpler to specify goal (an5 v0.2 - March 2023). See example here:</p><!--kg-card-begin: html--><pre><code>/* new 0.2 spec */
goal class ethernet_lan extends network {
  @mandatory switch[] fabric;
  @mandatory computer[] hosts;
  object[] uses;
  service = { &quot;ethernet&quot;, &quot;(ethernet_vlan)*&quot; };
  handler = &quot;an5.solve.an5CreateNetwork&quot;;

  constraint class ethernet_node extends element {
    @mandatory computer host;
    @mandatory switch ether;
    object[] uses;
   }
}

/* old 0.1 spec
abstract class ethernet_lan extends network {
  @mandatory switch[] fabric;
  @mandatory computer[] hosts;
  object[] uses;
  service = { &quot;ethernet&quot;, &quot;(ethernet_vlan)*&quot; };
}

abstract class ethernet_node extends element {
  @mandatory computer host;
  @mandatory switch ether;
  object[] uses;
 } */</code></pre><!--kg-card-end: html--><hr><h2 id="architecture">Architecture</h2><p>The architecture for an5, was developed iteratively and not top down:</p><ul><li>The first step was some paper based network definitions and instance models, to try to get idea of how to represent the problem. </li><li>Next there was an attempt to represent these with JSON, then</li><li>Use a specific language to represent the problem space.</li></ul><p>As a result of this it became apparent that there was need to do some prototype development and testing to validate the overall ambition for &quot;Intelligent Network Design&quot;, as it was to easy to miss the hidden details that needed to be dealt with and get missed in just doing architecture.</p><p>So the set of needs and decision outlined above, arose out of initial analysis and practical verification with principle of using &quot;Just Enough Architecture&quot; ;-) .</p><p>The overall goal for an5 are to provide:</p><ul><li>a general purpose network representation language and model to support planning, design, simulation and ultimately automated provisioning of IT &amp; network platforms and services (see Cloud Automation/Life Cycle Management diagram in introduction)</li><li>intelligent solvers that can &quot;build networks&quot;, &quot;connect to networks&quot;, &quot;join networks together&quot;, &quot;connect elements within network&quot; and &quot;find paths across network&quot;</li><li>provide network builder that allows fast &quot;snap together&quot; network assembly capabilities that can act as seed into intelligent network design solvers</li></ul><p>The basic architecture packaging consists of:</p><ul><li>an5 - <strong>a</strong> <strong>n</strong>ETWORK LANGUAGE WITH <strong>5</strong> CLASSES - the core (and still evolving) network specification and template language</li><li>compiler - the an5 compiler generates Java code for the models. The generated models are packaged into Java class archives</li><li>model - the core an5 Java class library, which contains the base classes inherited by the generated an5 classes</li><li>solver - the Intelligent Network Design solvers</li><li>cases - the case analysis and repository to support case detection for use in providing search optimisation by solvers</li><li>learner - statistics and correlation analysis to identify and put probabilities against network build cases </li></ul><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://just.graphica.com.au/content/images/2021/04/an5-packages-01-1.png" class="kg-image" alt="an5 - Intelligent Network Design" loading="lazy" width="1013" height="621" srcset="https://just.graphica.com.au/content/images/size/w600/2021/04/an5-packages-01-1.png 600w, https://just.graphica.com.au/content/images/size/w1000/2021/04/an5-packages-01-1.png 1000w, https://just.graphica.com.au/content/images/2021/04/an5-packages-01-1.png 1013w" sizes="(min-width: 720px) 720px"><figcaption>an5 Core Packages - Representation (model), AI Solver and UI Network Builder</figcaption></figure><p>For the initial testing and validation the focus is on: compiler, &#xA0;model and solver, which form the MVP core of framework.</p><p>In creating the prototype solver the architecture has had to leverage a number of techniques and disciplines which I will outline in the Compiler and Solver package summaries.</p><h3 id="compiler">Compiler</h3><p>The compiler implementation is based on <a href="https://www.antlr.org/?ref=just.graphica.com.au">antlr</a>. Antlr provides a mature Java based lex/yacc style compiler generator. Antlr generates a parse tree and supports tree walking call backs for symbol table build and code generation.</p><p>As per Decision #2 an5 is Java derived and so could be implemented quickly re-using (hacking ;-) ) an existing antlr grammar for Java (significantly reduced), rather than starting from scratch.</p><h3 id="solver">Solver</h3><p>To implement any real world AI solution requires using a large number of techniques. The an5 prototype implementation - required assembling most of the basis AI building blocks as outlined in classic AI text &quot;Artificial Intelligence by Patrick Henry Winston&quot; [2] including:</p><ul><li>&quot;Semantic Nets&quot; for representation,</li><li>&quot;Generate-and-Test Method&quot; for combinatorial generator. This initial proof has three generators,</li><li> which use &quot;The Problem Reduction Method&quot; to take bigger network design problem and break it down into smaller set of sub-problems, which in turn are represented by AND/OR trees (see Decision #3)</li><li>&quot;Blind Methods&quot;, &quot;Heuristically Informed Methods&quot;, &quot;The Best Path&quot;, &quot;Redundant Paths&quot; search method are all used to help manage the combinatorial search space that is always lurching when there is need to search for potential solutions (formally NP-Complete problems).</li></ul><p>When using an AI solver the generator may create sets of cases that are different from initial expectations. This was the case for the network design generation. To help understand the solver behaviour it was instrumented to collect run-time statistics as well has having skeleton &quot;why&quot; and &quot;what&quot; solution behaviour introspection.</p><h3 id="summary">Summary</h3><p>The initial prototype only implements a portion of outlined architecture (compiler, model &amp; solver).</p><p>While the current implementation is based on classic queue based Solver, it would be relatively easy &#xA0;to use AND/OR problem breakdown to distribute solver process across a distributed set of hosts to support solving &quot;big problems&quot;</p><p>The key question that needs to be addressed before implementing an &quot;Intelligent Network Design&quot; solution is to ensure that the problem is not intractable, due to combinatorial explosion.</p><p>To check this a paper based analysis and implementation testing was done, using a simple network design as outlined in the following &quot;The Monkey and Banana - Test Case&quot; and &quot;Tractability - Combinatorial Analysis and Optimisation&quot; sections.</p><hr><h2 id="the-monkey-and-banana-test-case">The Monkey and Banana - Test Case</h2><p>To test the an5 representation and solver I used a network variation of &quot;the monkey and banana&quot; problem as observed by Wolfgang Kohler, back in 1917 [15].</p><p>In the monkey and banana problem you must be able to solve the problem of &quot;how can &#xA0;the monkey get the bananas?&quot;. The problem space has set of rooms with boxes, a monkey, a stick and a bunch of bananas that are too high to reach directly. To get the bananas the monkey needs to:</p><ul><li>move boxes under the banana</li><li>stand on boxes with stick</li><li>reach the bananas with the stick</li></ul><p>The network equivalent as to connect 3 computers (boxes) to the network switch (bananas):</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://just.graphica.com.au/content/images/2021/04/an5-test-network-02.png" class="kg-image" alt="an5 - Intelligent Network Design" loading="lazy" width="2000" height="812" srcset="https://just.graphica.com.au/content/images/size/w600/2021/04/an5-test-network-02.png 600w, https://just.graphica.com.au/content/images/size/w1000/2021/04/an5-test-network-02.png 1000w, https://just.graphica.com.au/content/images/size/w1600/2021/04/an5-test-network-02.png 1600w, https://just.graphica.com.au/content/images/size/w2400/2021/04/an5-test-network-02.png 2400w" sizes="(min-width: 720px) 720px"><figcaption>Create Ethernet (underlay) Network with 3 compute hosts</figcaption></figure><p>I selected this case as:</p><ul><li>it had the situation which is analogous to the &quot;monkey and banana&quot; case against which the original STRIPS[13] constraint based solver was tested,</li><li>but with an additional layer of combinatorial generation that is needed in network domain</li><li>dealt with simple physical and logical interface cases to allow test and development of this domain layer</li><li>it was sufficiently non-trivial to allow testing against different search algorithms including Depth First, Breadth First, Branch and Bound, A*, British Museum (depending on search space size) and AND/OR tree based search</li><li>it required problem reduction method to be applied</li></ul><p>The test implementation provides the following search options (see Winston [2]) and domain optimisation choices:</p><!--kg-card-begin: html--><pre><code>public class an5SearchControl {
  public static class SearchOptions { public static final int DEPTH = 0x001,
                                      BREADTH = 0x002, BOUND = 0x004, SCORE = 0x008,
		                              COST = 0x010, REMOVE_LOCAL_EQUIVALENTS = 0x020,
                                      BIND_ALL = 0x040, BIND_UNIQUE = 0x080,
		                              THREAD = 0x100, TIMEBOX = 0x200,
                                      OPTIMAL = 0x400, KEEP_REMOVED = 0x800; }
....
}</code></pre><!--kg-card-end: html--><h2 id="tractability-combinatorial-analysis-and-optimisation">Tractability - Combinatorial Analysis and Optimisation</h2><p>The basic building blocks of AI problem solving using problem reduction and search are need for:</p><ul><li>Set of basic rules to allow problem reduction - to break bigger problem into set of smaller ones</li><li>Generator - a combinatorial generator that should provide each of possible solutions for a given state of the problem solving and</li><li>Search Engine - that controls the application of problem reduction, invokes generator and manages search for solutions.</li></ul><p>The big enemy of AI search is combinatorial explosion, where the number of search alternates is to large to handle, making the problem intractable. To counter this the generator and search engine do not generate all solutions at once. Rather it generates a set of candidates and then tests and trims these so only a subset of the total number of search paths are expanded.</p><p>Even the simple test case outlined above would be intractable without apply some level of optimisation. Optimisations fall into a number of categories:</p><ul><li>Generic Search Control - applicable to any search space problem and operate by providing alternate search algorithms including: Depth First Search, Breadth First Search, Branch and Bound, Score &amp; Cost based Search</li><li>Domain Optimised - where the search optimisation if based on applying some pruning based on the problem domain of the search</li><li>Case Based - where search is optimised based on historical or statistical analysis of paths which have most likelihood to provide preferred or right solution. These are ones which leverage machine learning techniques.</li></ul><p>The other aspect of search based solutions is that with large search spaces you can not guarantee that you will find the optimal or best solution and so search is finished on finding the first solution or constrained to run for a fixed time.</p><p>In the case of above our &quot;monkey and banana test&quot; the set of combinations that need to be generated is equal to:</p><p>Combinations to generate = N(h) x N(s) x N(n) x N(p) x N(c)</p><p>where:</p><ul><li>H(h) - numbers hosts</li><li>N(s) - number of PCI slots per host</li><li>N(n) - number of NICs</li><li>N(p) - number ports per NIC</li><li>N(c) - number of cables</li></ul><p>This is a lot of multipliers ... here what it looks like if we go from 1 host + nic -&gt; 12 hosts + nics:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://just.graphica.com.au/content/images/2021/04/combinatorial-gen-01.png" class="kg-image" alt="an5 - Intelligent Network Design" loading="lazy" width="888" height="563" srcset="https://just.graphica.com.au/content/images/size/w600/2021/04/combinatorial-gen-01.png 600w, https://just.graphica.com.au/content/images/2021/04/combinatorial-gen-01.png 888w" sizes="(min-width: 720px) 720px"><figcaption>Combinatorial Explosion - from 0 to 9 Trillion with 12 Computer in Simple Network</figcaption></figure><p>So even with the seemingly trivial &quot;monkey + banana&quot; network at 12 hosts the problem becomes intractable to comprehensive search.</p><p>In practice you can solve with 8 hosts but at 9 hosts memory allocation fails, due to needs of generator and at 10 hosts the size of combination space results in Java int (32 bit integer) overflow. At 7 &amp; 8 hosts the solver spends all its time just generating the combinations, not searching them.</p><p>NOTE: you cannot have an array index of type long (64 bit integer), as it is not possible to allocate a block of memory this large. </p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://just.graphica.com.au/content/images/2021/04/an5-solver-timing-01.png" class="kg-image" alt="an5 - Intelligent Network Design" loading="lazy" width="928" height="669" srcset="https://just.graphica.com.au/content/images/size/w600/2021/04/an5-solver-timing-01.png 600w, https://just.graphica.com.au/content/images/2021/04/an5-solver-timing-01.png 928w" sizes="(min-width: 720px) 720px"><figcaption>Solver timings combinations&#xA0;</figcaption></figure><p>Looking at the combinatorial behaviour shows that the largest number combination sets comes with &quot;cable to NIC card&quot; step, after which problem becomes trivial (direct connection of cable to switch) again:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://just.graphica.com.au/content/images/2021/04/solver-depth-analysis-01-1.png" class="kg-image" alt="an5 - Intelligent Network Design" loading="lazy" width="927" height="661" srcset="https://just.graphica.com.au/content/images/size/w600/2021/04/solver-depth-analysis-01-1.png 600w, https://just.graphica.com.au/content/images/2021/04/solver-depth-analysis-01-1.png 927w" sizes="(min-width: 720px) 720px"><figcaption>Solver Combinations vs Depth</figcaption></figure><p>As expected from the simple network topology the best search strategy in this case is just a &quot;Depth First Search&quot; as both best Scored and Cost based search end up selecting Depth First Path and so just add the overhead of calculation.</p><p>NOTE: That in general the network construction search cannot come up with an optimal scoring or cost algorithm as the estimate for &quot;distance&quot; to solution is never know prior to reaching a solution.</p><p>So without some other optimisation the network build is intractable.</p><p>In observing the behaviour it was apparent that the AI Solver was doing things that would not be required in real world. In particular the generator was doing a great job of building all the combination of ways that you could plug the various compatible interfaces together. So for 1 Computer it would generate every next solution combination set of:</p><p>C(h,n) = (h1-n1, h1-n2, h1-n3 ... h1-nX, h2-n1, h2-n2, h3-n3 ... h2-nX, .... hY-nX) where:</p><ul><li>C(h,n) - set of combination of hosts (h) and NICs (n) consisting of pairs:</li><li>h1-n1 .. - host #1 with NIC #1, host #1 with NIC #2 etc</li></ul><p>In additional it was also generating combinations of multiple NIC cards within single host (as each host was defined as having 4 slots).</p><p>In practice in the real world NICs and cables are treated as &quot;commodity&quot; devices and the result of assembling a path using any particular instance of an object of the same class of will result in the same outcome, irrespective of which instance I use.</p><p>In simple terms this means that if I have 10 Cat6 cables available to plug from a NIC port to a switch port then there is no advantage to generating all the 10 NIC port to cable to switch port combinations, as the result is same for each of the very large number of combinations. So instead you can just generate the first instance and make the cable un-available for further combinations.</p><p>To test this I created a &quot;Local Equivalent Removal&quot; &#xA0;option within the Domain solver layer. The algorithm was &quot;Local&quot; as it operated solely within scope of a given interface bind request and removed cases of binds which have class template equivalency.</p><p>If you do not prune the &quot;Local Equivalents&quot; the result is a huge number of essentially identical search trees. Avoidance and/or caching for reuse of these cases is described in Dechter[4] as part of AND/OR search analysis.</p><p>Practically the use of &quot;Local Equivalent Removal&quot; was to stop the combinatorial explosion in its tracks with each new depth step now having breadth of 1. So the Domain optimisation results in a reduction from 10 to power of 12 (=power(10,12) in Excel) to 1. Thats a better return than on BitCoin !</p><p>This is a huge reduction and illustrates how application of domain knowledge takes the problem from intractable to solvable in trivial time (less than a second in practice).</p><p>There is a lot of scope for application of Domain knowledge in this context as well as Case Based optimisation. </p><p>Importantly there is good reason to believe that solving network design automation using AI techniques will yield positive results.</p><h2 id="conclusion-next-steps">Conclusion &amp; Next Steps</h2><p>The an5 language provides a way to specify both network building blocks and templates. The generated class library is then easily used to &quot;write&quot; a network solver. The simple solver definition below was used for the &quot;Monkey and Banana&quot; testing. This is now mostly a declarative exercise, using the an5 device library specification shown in Decision #2 (above):</p><!--kg-card-begin: html--><pre><code>/**
 @what An example network create test file
 
 @author John Hartley - Graphica Software/Dokmai Pty Ltd
*/

import java.util.ArrayList;
import java.util.List;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.fasterxml.jackson.databind.module.SimpleModule;

import an5.model.*;
import an5.solve.*;
import an5.generic.dctypes.*;


public class BuildMiniNetwork {
  public static void main(String[] args){

    /* lots of Jackson JSON Serialize/DeSerialize initialisation */
    ...
    ...
    
    /* Switch */
    String swdef = &quot;{\&quot;an5name\&quot;:\&quot;switch\&quot;,\&quot;name\&quot;:\&quot;simple-switch\&quot;,\&quot;reflects\&quot;:[{\&quot;name\&quot;:\&quot;port\&quot;,\&quot;policy\&quot;:\&quot;STATIC\&quot;,\&quot;size\&quot;:24}]}&quot;;
    
    /* 12 x Computer */
    String[] cpdef = {&quot;{\&quot;an5name\&quot;:\&quot;computer\&quot;,\&quot;name\&quot;:\&quot;hal-1\&quot;,\&quot;reflects\&quot;:[{\&quot;name\&quot;:\&quot;slot\&quot;,\&quot;policy\&quot;:\&quot;STATIC\&quot;,\&quot;size\&quot;:4}]}&quot;,
	  &quot;{\&quot;an5name\&quot;:\&quot;computer\&quot;,\&quot;name\&quot;:\&quot;hal-2\&quot;,\&quot;reflects\&quot;:[{\&quot;name\&quot;:\&quot;slot\&quot;,\&quot;policy\&quot;:\&quot;STATIC\&quot;,\&quot;size\&quot;:4}]}&quot;,
    ...
    ...
	  &quot;{\&quot;an5name\&quot;:\&quot;computer\&quot;,\&quot;name\&quot;:\&quot;hal-12\&quot;,\&quot;reflects\&quot;:[{\&quot;name\&quot;:\&quot;slot\&quot;,\&quot;policy\&quot;:\&quot;STATIC\&quot;,\&quot;size\&quot;:4}]}&quot;};
    
    /* 12 * NIC */
    String[] nicdef = {&quot;{\&quot;an5name\&quot;:\&quot;pcie_nic\&quot;,\&quot;reflects\&quot;:[{\&quot;name\&quot;:\&quot;port\&quot;,\&quot;policy\&quot;:\&quot;STATIC\&quot;,\&quot;size\&quot;:2}]}&quot;,
	      &quot;{\&quot;an5name\&quot;:\&quot;pcie_nic\&quot;,\&quot;reflects\&quot;:[{\&quot;name\&quot;:\&quot;port\&quot;,\&quot;policy\&quot;:\&quot;STATIC\&quot;,\&quot;size\&quot;:2}]}&quot;,
    ...
    ...
	      &quot;{\&quot;an5name\&quot;:\&quot;pcie_nic\&quot;,\&quot;reflects\&quot;:[{\&quot;name\&quot;:\&quot;port\&quot;,\&quot;policy\&quot;:\&quot;STATIC\&quot;,\&quot;size\&quot;:2}]}&quot;};
    
    /* 13 * Cat6 */
    String[] cabdef = {&quot;{\&quot;an5name\&quot;:\&quot;cat6_cable\&quot;,\&quot;type\&quot;:\&quot;physical\&quot;,\&quot;length\&quot;:100};&quot;,
	      &quot;{\&quot;an5name\&quot;:\&quot;cat6_cable\&quot;,\&quot;type\&quot;:\&quot;physical\&quot;,\&quot;length\&quot;:100};&quot;,
    ...
    ...
	      &quot;{\&quot;an5name\&quot;:\&quot;cat6_cable\&quot;,\&quot;type\&quot;:\&quot;physical\&quot;,\&quot;length\&quot;:100};&quot;};

    AN5CL_switch sw1 = null;
    AN5CL_computer cp[] = {null, null, null, null, null, null, null, null, null, null, null, null};
    AN5CL_pcie_nic nic[] = {null, null, null, null, null, null, null, null, null, null, null, null};
    AN5CL_cat6_cable cab[] = {null, null, null, null, null, null, null, null, null, null, null, null, null};
	    
    try {
      sw1 = new AN5CL_switch(new ObjectMapper().readTree(swdef));
      for (i = 0; i &lt; cpdef.length; i++) {
        cp[i] = objectMapper.readValue(cpdef[i], AN5CL_computer.class);
      }
      for (i = 0; i &lt; nicdef.length; i++) {
        nic[i] = objectMapper.readValue(nicdef[i], AN5CL_pcie_nic.class);
      }
      for (i = 0; i &lt; cabdef.length; i++) {
        cab[i] = objectMapper.readValue(cabdef[i], AN5CL_cat6_cable.class);
      }
    } catch (JsonMappingException e1) {
      // TODO Auto-generated catch block
      e1.printStackTrace();
    } catch (JsonProcessingException e1) {
      // TODO Auto-generated catch block
      e1.printStackTrace();
    }

    an5Object[] use = {sw1,
    		           cp1, cp2, cp3, cp4, cp5, cp6,
    		           cp7, cp8, cp9, cp10, cp11, cp12,
    		           nic1, nic2, nic3, nic4, nic5, nic6,
    		           nic7, nic8, nic9, nic10, nic11, nic12,
    		           cab1, cab2, cab3, cab4, cab5, cab6,
    		           cab7, cab8, cab9 , cab10, cab11, cab12, cab13};
    List<an5object> parts = new ArrayList&lt;&gt;();
    for (an5Object ob : use) parts.add(ob);
    
    AN5TP_ethernet_lan  netPrototype = new AN5TP_ethernet_lan();
    an5Network netResult = (an5Network)netPrototype.createInstance();
    
    an5Template netTemplate = new an5CreateNetwork(null, netPrototype, parts, netResult);
    

    an5SearchControl ctrl = new an5SearchControl();    
    
    int offFlags3 = an5SearchControl.SearchOptions.COST;
    int onFlags1 = an5SearchControl.SearchOptions.DEPTH;

    ctrl.turnOff(offFlags3);
    ctrl.turnOn(onFlags1);
    
    an5Goal makeNet = new an5Goal(netTemplate, ctrl);
    int res = makeNet.solve();
    
    System.out.println(&quot;Result was: &quot; + ctrl.resultString(res));
    ctrl.dumpStats(System.out);
    
    for (an5GoalTree t: makeNet.found) {
      an5FoundGoal resGoal = (an5FoundGoal)t;
      if (resGoal.goal instanceof an5JoinNetwork) {
    	an5JoinNetwork jn =  (an5JoinNetwork)(resGoal.goal);
    	an5Network no = jn.joinNet;
    	no.dumpJSON(System.out);
      }
    }
    System.out.println(&quot;switch reports as&quot; + sw1.toString());
  }

}</an5object></code></pre><!--kg-card-end: html--><p>NOTE: All classes with name AN5TP_ are generated templates and all classes with names AN5CL_ are generated classes. The classes with prefix &quot;an5&quot; are from the model or solver class library.</p><p>As the code is mostly declarative it could be readily used to provide a more complete &quot;Intelligent Network Design&quot; automation tool by building an interpretive interface on top of this to support a web UI.</p><p>The initial an5 implementation has successfully proven the concept of being able to provide an &quot;Intelligent Network Design&quot; using classic AI representation, combinatorial generation and AND/OR solver with flexible control.</p><p>Of particular importance is that it shows that applying a very simple and protocol neutral optimisation you can take the problem from intractable to solvable in near real time.</p><p>In practice this means that you it is viable to apply AI to classic fulfilment problems as part of re-thinking the approach to fulfilment.</p><p>Using features such as:</p><ul><li>Case Based Heuristic where you could constrain the search size to find solutions to larger design problems by using reference case sets</li><li>Allowing solver to run for bounded time you could find multiple solutions, then select &quot;best&quot; and &quot;preferred&quot; solution and convert these to templates automatically by converting from solution instance to class based templates</li><li>These class based template in turn can be feed into &quot;Case Based Heuristics&quot;</li></ul><p>In this initial proof of concept only the &quot;Create Network&quot; and &quot;Connect Element&quot; solvers were used with an OR tree control framework.</p><p>The prototype implementation is around 7,000 lines of Java and Antlr code and the example &quot;dc-types&quot; specification generated code is around 500 lines of Java.</p><p>Next steps could include:</p><ul><li>Adding additional solvers</li><li>Complete interface specification &quot;regular expression&quot; binding</li><li>Add partial interface binding and service reflection to support layered protocols implementation</li><li>Refine an5 language syntax to include interface specification details (currently these are just sets of name/value pair strings and not validated by compiler)</li><li>Refine an5 language to support nested templates target network specifications (ie specify network outcome + connectivity constraint templates within single template class - initial update done with an5 V0.2 March 2023)</li><li>Add full AND/OR solving support</li><li>Add case based heuristic support</li><li>Add automatic template generation for application in search optimisations. This would meet goal of being able to provide behaviour consistent with existing template / parameter (+ process) fulfilment systems. With solver based solution there would not be need for explicit process definition, as process would be based on dependency needs.</li><li>Add JSON dump/load classes (using Jackson or similar library) (done Jan 22)</li><li>Add distributed solver and control framework</li><li>Provide UI based network builder leveraging interface / binding model to allow snap together designs based on an5 device libraries</li><li>Test an5 with more network models and build up set of device and network model libraries</li><li>Add interface to device layer so an5 can plug into lower level technologies such as YANG for configuration, JuJu for automated platform building and TOSCA based orchestration engines.</li></ul><p>So prototype has &#xA0;proven the viability of the concept, but there is still lots to do. I have put the code up on <a href="https://github.com/zebity/an5?ref=just.graphica.com.au">github</a> and believe that an5 is good candidate for Open Source development. &#xA0;So if there are other programming and network design savvy people who would like to help flesh out the framework, please muck in ;-) .</p><p>&quot;Intelligent Network Design&quot; is needed to help telco improve their speed to market and make significant impact in reducing cost for network design and fulfilment systems development.</p><hr><p><strong>References and Links:</strong></p><p>[1] Principles of Artificial Intelligence - Nils J. Nilson &#x2013; defined AND/OR tree problem representation</p><p>[2] Artificial Intelligence (3rd Ed) - Patrick Henry Winston - creating an5 and its solver required piecing together most of the parts (representation, generate &amp; test, search) &#xA0;outlined in the first 5 chapters of this classic AI text. You can also see Patrick&apos;s lecture that cover the same topics on MIT OpenCourseWare <a href="https://www.youtube.com/watch?v=TjZBTDzGeGg&amp;ref=just.graphica.com.au">videos</a> </p><p>[3] Reasoning with Probabilistic and Deterministic Graphical Models - Exact Algorithms (2nd Edition) - Rina Dechter</p><p>[4] AND/OR Tree Search for Constraint Optimization - Radu Marineescu &amp; Rina Dechter , <a href="https://www.ics.uci.edu/~csp/r119.pdf?ref=just.graphica.com.au">paper</a> on impact of introducing AND/OR into search</p><p>[5] Game-Tree Search Using Proof Numbers: The First Twenty Years - Akihiro Kishimoto, &#xA0;Mark H.M. Winands, Martin Muller &amp; Jahn-Takeshi Saito</p><p> [6] Network Design Automation - Treating Networks like Programs and Chips -George Varghese - other people are thinking about<a href="http://cseweb.ucsd.edu/~varghese/networkdesignautomationvision.pdf?ref=just.graphica.com.au"> this</a>...</p><p>[7] SAT v CSP - Toby Walsh - <a href="https://www.cse.unsw.edu.au/~tw/wcp00.pdf?ref=just.graphica.com.au">paper</a> provides review of semantics and mapping between Propositional Satisfiability (SAT) and Constraint Satisfaction Problems</p><p>[8] Juju - Canonical Infrastructure Automation</p><p>[9] Compilers - Principles, Techniques and Tools - Aho, Sethi &amp; Ullman</p><p>[10] Modern Compiler Implementation in Java - Appel</p><p>[11] lex &amp; yacc (2nd Ed)- John R Levin, Tony Mason &amp; Doug Brown</p><p>[12] The Java Language Specification, Third Edition</p><p>[13] <a href="https://en.wikipedia.org/wiki/Stanford_Research_Institute_Problem_Solver?ref=just.graphica.com.au">STRIPS</a>: A New Approach to the Application of Theorem Proving to Problem Solving - Richard E. Fikes &amp; Nils J. Nilsson - original <a href="https://ai.stanford.edu/~nilsson/OnlinePubs-Nils/PublishedPapers/strips.pdf?ref=just.graphica.com.au">paper</a> on STRIPS (<strong>ST</strong>anford <strong>R</strong>esearch <strong>I</strong>nstitute <strong>P</strong>roblem <strong>S</strong>olver) constraint based solver</p><p>[14] <a href="https://www.ijarcce.com/upload/june/3-Network%20Simulation%20Tools%20Survey.pdf?ref=just.graphica.com.au">Network Simulation Tools Survey </a>- Mrs. Saba Siraj, Mr. Ajay Kumar Gupta &amp; Mrs Rinku-Badgujar</p><p>[15] The Mentality of Apes - <a href="https://en.wikipedia.org/wiki/Wolfgang_K%C3%B6hler?ref=just.graphica.com.au">Wolfgang Kohler</a> - the source of the &quot;monkey and banana&quot; problem and assumed source of the title picture.</p><p>[16] <a href="https://just.graphica.com.au/telco-topology/">&quot;Telco Inventory &amp; Topology - Enabler for Automation&quot;</a> - provides a PoV on role of inventory in core Telco processes</p><p>[17] OASIS <a href="https://www.oasis-open.org/committees/tc_home.php?wg_abbrev=tosca&amp;ref=just.graphica.com.au">Tosca</a> - Topology and Orchestration Specification for Cloud Applications</p><p>[18] Netconf/YANG (IETF RFC <a href="https://tools.ietf.org/html/rfc6020?ref=just.graphica.com.au">6020</a>, 7950 and others), &#xA0;and Cisco/Tail-f - YANG is a data definition language for network configuration. Cisco / Tail-f have leveraged this to provide an intent based orchestration <a href="https://developer.cisco.com/docs/nso/?ref=just.graphica.com.au#!core-concepts">offering</a></p><p>[19] Wolfgang K&#xF6;hler&#x2019;s the Mentality of Apes and the Animal Psychology of his<br>Time - Gabriel Ruiz - provide a <a href="https://www.researchgate.net/publication/271906531_Wolfgang_Kohler%27s_the_Mentality_of_Apes_and_the_Animal_Psychology_of_his_Time?ref=just.graphica.com.au">review</a> of Kohler&apos;s work</p><p>[20] <a href="https://www.researchgate.net/publication/221048834_Is_CBR_a_Technology_or_a_Methodology?ref=just.graphica.com.au">Is CBR a Technology or a Methodology?</a> - Ian Watson - provides a survey of &quot;Case Based Reasoning&quot; which uses case database to drive problem solving</p><p>[21] an5 - github <a href="https://github.com/zebity/an5?ref=just.graphica.com.au">respository</a></p><p>[22] an5 - <a href="https://wiki.anuket.io/display/HOME/2022-09-14+-+%5BAnuket+Reference+Model+Workstream%5D+Agenda+and+Meeting+Minutes?ref=just.graphica.com.au">presentation</a> to Linux Foundation Networking / GSMA - Anuket Reference Model team</p><hr><p>NOTE: The &quot;monkey and banana&quot; image can be found via google search &quot;wolfgang kohler monkey photo&quot;, however I cannot find definitive paper/book from which this was taken.</p>]]></content:encoded></item><item><title><![CDATA[An Introduction to 5G Architecture]]></title><description><![CDATA[The 5G architecture has some unique features like network slicing and full virtualisation that opens opportunities for new value services within the network.]]></description><link>https://just.graphica.com.au/an-introduction-to-5g-architecture/</link><guid isPermaLink="false">6469847f76e6920438e6d144</guid><category><![CDATA[5g]]></category><category><![CDATA[business architecture]]></category><category><![CDATA[NFVi]]></category><dc:creator><![CDATA[John Hartley]]></dc:creator><pubDate>Mon, 28 Oct 2019 05:28:35 GMT</pubDate><media:content url="https://just.graphica.com.au/content/images/2020/10/5g-arch-ov-01-1.png" medium="image"/><content:encoded><![CDATA[<img src="https://just.graphica.com.au/content/images/2020/10/5g-arch-ov-01-1.png" alt="An Introduction to 5G Architecture"><p>This introduction to 5G architecture, provides a capabilities view as context to consider how 5G can enable alternate network service delivery models. &#xA0;The purpose is to translate the technical capabilities &#xA0;5G provides into a small set of basic build blocks, to highlight how 5G differs from 4G/LTE. </p><p>The article is the first of two, this one looks at the architecture and <a href="https://just.graphica.com.au/5g-business-model/">Part 2</a> looks at the business model.</p><hr><p>As this is about the architecture, here is my &#x201C;simple&#x201D; illustration of 5G Architecture and why &#x201C;it&#x2019;s different this time&#x201D;:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://just.graphica.com.au/content/images/2020/10/5g-arch-ov-01.png" class="kg-image" alt="An Introduction to 5G Architecture" loading="lazy" width="1185" height="564" srcset="https://just.graphica.com.au/content/images/size/w600/2020/10/5g-arch-ov-01.png 600w, https://just.graphica.com.au/content/images/size/w1000/2020/10/5g-arch-ov-01.png 1000w, https://just.graphica.com.au/content/images/2020/10/5g-arch-ov-01.png 1185w" sizes="(min-width: 720px) 720px"><figcaption>5G Architecture - Business Architecture View</figcaption></figure><p>The 5G network architecture provides a wireless &quot;Access Network&quot; with (tracing left to right):</p><ul><li>a Radio Area Network (RAN),</li><li>IP network underlay / overlay networks (RAN Edge, Pre-Aggregation, Aggregation) providing connectivity</li><li>via &quot;IP / MPLS / Transport Network&quot; to</li><li>Central Control (3GPP) applications including (for illustrative purposes here): Enhanced/Evolved Packet Core (EPC), IP Multimedia Sub-System (IMS) and Unified Data Management (UDM - provides 5G functions simillar to Home Location Register (HLR) &amp; its friend Visitor Location Register (VLR) for roaming support).</li></ul><p>As users we experience this via our phones (EUD&#x2019;s End User Devices) which: connect and authenticate with the Wireless Network via the UDM, where our SIM / IMSI / Phone Numbrer subscriber information is provisioned, opening communications traffic for voice (to other subscribers and phones systems) or data services (browse the Internet) via IMS which provides a gateway to various cloud services available. &#xA0;All very Monty <a href="http://www.montypython.net/scripts/diseases.php?ref=just.graphica.com.au">Pythonesque</a> at this level to the technical experts ;-) .</p><p>The communications services providers (CSPs) deploy their network assets at various &quot;Deployment Sites&quot;. Moving from right to left the sites go from Central Data Centre (per State) to Regional Data Centres to Edge Sites (even more broadly deployed and smaller footprint sites) to Deep Edge Sites (very small footprint sites that could exist at the wireless antenna bases).</p><p>In the current wireless network (3G/4G/LTE) the access networks are mostly built from physical networking elements (NEs).</p><p>In 5G the same topology exists but rather than having sites populated with physical NEs, instead each site contains Network Function Virtualisation infrastructure (NFVi). These NFVi PoDs (built from general purpose computing and networking components) host Virtual Network Functions (VNFs) and Cloud Native Network Functions (CNFs). In the 5G architecture the NFVi is not just a &quot;nice to have&quot;, rather the telco equipment manufactors (TEMs) for 5G Cores are building their solutions as cloud native (containerized) components that can be deployed dynamically across the distributed NFVi infrastructure. The 5G core is being built with the same technologies (Kubernetes, OpenStack, Ceph etc) that &#xA0;web-scalers and digital natives build their cloud applications on. The result is a distributed Network Cloud.</p><p>Another significant change introduced with 5G are &#x201C;Network Slices&quot;. This allows a single set of physical infrastructure to provide completely isolated and independent wireless networks across it. These network slices work from the Radio Access Network (RAN) all the way through to the Central Data Centre deployed VNFs / CNFs.</p><p>The &quot;Network Slices&quot; can support optimising the architecture&apos;s cost and operational and performance characteristics, by instantiating the CNF &amp; VNF components differently across the Network Cloud. This is illustrated in the model by the varying size of the deployed function across the different slices.</p><p>In traditional wireless network most of the &quot;Value&quot; processing components, are provided by &quot;Over The Top&quot; (OTT) functions residing at the Point of Interconnect (in central data centre) or as cloud based services on the Internet. &#xA0;In 5G architecture it is possible to provide gateways to these functions anywhere within the network topology. In the model these are illustrated as &#x201C;Gateways to Value&#x201D; (in 3GPP parlance this is provided by Packet Gateway and Service Capability Exposure Function - SCEF). The &quot;Value Engines&quot; that sit on top of the &quot;Access Network Slices&quot; provide a further layer of virtual function hosting for the &quot;Value&quot; services.</p><p>Thus the 5G architecture can provide alternate &#x201C;Paths to Value&#x201D;. The &quot;Value Engines&quot; could be hosted on the same NFVi infrastructure as the Access Network VNFs / CNFs or on its own virtualised infrastructure. &#xA0;The &quot;Value Engines&quot; could also be operated independently from the &quot;Access Network&quot; functions and might have completely different organisational owners. How to deploy the &quot;Value Engine&quot;, be this on shared or specific infrastructure or using alternate organisational providers is a business strategy decision that will have to consider: organisation capability &amp; ambition, security, performance and other concerns. &#xA0;The virtual &quot;Gateway to Value&quot; is a critical enabler for integration from Access Network to Value Engines.</p><p>The model illustrates the creation of alternate deployment architectures with alternate &#x201C;Paths to Value&#x201D; for:</p><ul><li>Latency Critical (lightning) &#x2013; functions typically needed for &#xA0;control systems and other use case where latency is critical and processing must occur as close to device a possible (autonomous vehicles or drone controls being favourite use cases),</li><li>Low Latency (racing car) &#x2013; functions &#xA0;an example might be car sat-nav systems, which must provide timely map data refresh to be useful</li><li>Enhanced Experience (hare) &#x2013; where user experience is significantly improved through provision of responsive UI, as happy customer is a retained customer</li><li>Traditional Path (snail) &#x2013; this follows all the way though to Point of Interconnect (POI) for value processing and provide the cheapest way to deploy functions.</li></ul><p>In a mature 5G deployment, the operational architecture variation are not instantiated statically rather they are provisioned and managed automatically via 5G slice aware orchestration and network management solutions.</p><p>In summary the 5G architecture is different because:</p><ul><li>All 5G Core network functions are provided by: VNF / CNF based software</li><li>NFVi CNF / VNF / Value Engine Hosting environments are provided ubiquitously across all sites</li><li>Network Slices allow sharing of physical infrastructure and cost / performance optimised deployment</li><li>Alternate Paths to Value allow cost / performance optimised architectures via Gateways to Value (CNFs/ VNFs) for access to Value add (OTT) services within the network rather than at Points of Interconnect (POI) at Data Centre sites</li><li>The architecture is managed dynamically through orchestration and automated network management.</li></ul><p>Oh - and yes, 5G will provide a much faster network connection for you when you purchase your new 5G handset.</p><hr><p><strong>References &amp; Links:</strong></p><p>The real <a href="https://www.3gpp.org/?ref=just.graphica.com.au">3GPP</a> Architecure - the 5G architecture is highly sophisicated in the capabilities it provides and the technical mechanisms it uses. See here for deeper details</p><p>5G Wiki - must have a <a href="https://en.wikipedia.org/wiki/5G?ref=just.graphica.com.au">wikipedia</a> link ;-0</p><p>5G at the <a href="https://www.mcg.org.au/whats-on/latest-news/2019/september/telstra-ericsson-and-the-mcc-install-5g-at-the-g?ref=just.graphica.com.au">&quot;G&quot;</a> - Ericsson and Telstra trial 5G at Melbourne Cricket Ground</p><p><a href="https://en.wikipedia.org/wiki/IP_Multimedia_Subsystem?ref=just.graphica.com.au">IMS</a> - Internet Multimedia Sub-System, is a part of overall 3GPP specified wireless communications stack, which amougst other parts includes SIP (Session Initiation Protocol) VoIP componentry</p><p>UDM - Universal Data Management provides the subscriber lookup services for SIM / IMSI / Phone Number as per Home Location Register (HLR) / Visitor Location Register (VLR) component of GSM wireless network</p><p><a href="https://www.google.com/url?sa=t&amp;rct=j&amp;q=&amp;esrc=s&amp;source=web&amp;cd=9&amp;ved=2ahUKEwiOp4eSt8DlAhWWXisKHUnPBZMQFjAIegQIAxAC&amp;url=ftp%3A%2F%2Fweb.3gpp.org%2Ftsg_sa%2FWG3_Security%2FTSGS3_80_Tallinn%2FSA_69_Input%2Fspecs%2F33187-d00.doc&amp;usg=AOvVaw1w5ffjVPwHEjqSPWWl39OY">SCEF</a> - Service Capabilities Exposure Function (3GPP - Requirements Document - 3GPP TS 33.187 V13.0.0 (2015-09))</p><p>Monty <a href="http://www.montypython.net/scripts/diseases.php?ref=just.graphica.com.au">Python</a> - How to Rid the World of All Known Diseases (a <a href="http://gatesfoundation.org/?ref=just.graphica.com.au">noble</a> ambition indeed)</p><p>Cloud Native Computing Foundation (<a href="https://www.cncf.io/?ref=just.graphica.com.au">CNCF</a>) - the new reference architecture for web-scale applications development</p><p><a href="https://just.graphica.com.au/5g-business-model/">&quot;5G for Growth &amp; Survival &#x2013; Why Telco&#x2019;s need 5G&quot;</a> - Part 2 of 5G articles this covers the business model</p><hr><p><strong>Icon Analogies &amp; Credits:</strong></p><ul><li><a href="https://www.flaticon.com/authors/freepik?ref=just.graphica.com.au">Snail</a> - your current 3G, 4G, LTE Architecture has Wireless Access Network terminated at POI, which provides Gateway to Value</li><li><a href="https://www.shutterstock.com/g/mila+kad?ref=just.graphica.com.au">Hare</a> - 5G option for better experience with shorter Path to Value than traditional wireless architecture</li><li><a href="https://www.flaticon.com/authors/eucalyp?ref=just.graphica.com.au">Racing Car</a> - 5G option for low latency applications with short Path to Value for critical functions</li><li>Lightning (MS Powerpoint) - 5G option for latency critical (Ultra Reliable Low Latency Communicatons - URLLC) shortest Path to Value for our favourite 5G enabled use cases including &quot;automonous cars&quot;, &quot;control networks&quot; etc</li></ul><hr><p>NOTE 1: This business architecture view is informed by discussion with Walter <a href="https://www.linkedin.com/in/walterkozlowski/?ref=just.graphica.com.au">Kozlowski</a> (Telstra Chief NFVi Architect) &amp; Paul <a href="https://www.linkedin.com/in/paul-bramich-6b91314/?ref=just.graphica.com.au">Bramich</a> (Ericsson GM Telstra Digital Solutions)</p><p>NOTE 2: While author is current employee of <a href="https://www.ericsson.com/en?ref=just.graphica.com.au">Ericsson</a> (Australia / New Zealand), this material (right and wrong) and opinions are the authors</p><p>NOTE 3: My reference to Monty Python brought to mind the scale of ambition of Bill &amp; Melinda Gates <a href="http://gatesfoundation.org/?ref=just.graphica.com.au">Foundation</a>, incredible in its (their) humanitarian purpose</p>]]></content:encoded></item><item><title><![CDATA[Trams, Telemetry, Agile & Architecture]]></title><description><![CDATA[NFVi telemetry enables multiple use cases. Having both strategic architecture and agile views of these will help guide successful delivery of an open source based telemetry solution.]]></description><link>https://just.graphica.com.au/trams-telemetry-agile/</link><guid isPermaLink="false">6469847f76e6920438e6d143</guid><category><![CDATA[telemetry]]></category><category><![CDATA[enterprise architcture]]></category><category><![CDATA[openstack]]></category><category><![CDATA[NFVi]]></category><category><![CDATA[Kubernetes]]></category><category><![CDATA[collectd]]></category><category><![CDATA[prometheus]]></category><category><![CDATA[kafka]]></category><dc:creator><![CDATA[John Hartley]]></dc:creator><pubDate>Mon, 30 Sep 2019 10:24:56 GMT</pubDate><media:content url="https://just.graphica.com.au/content/images/2019/09/bumblebee-01.png" medium="image"/><content:encoded><![CDATA[<img src="https://just.graphica.com.au/content/images/2019/09/bumblebee-01.png" alt="Trams, Telemetry, Agile &amp; Architecture"><p>Murphy&#x2019;s law hit again recently on a Melbourne Thursday. Earlier in the day there had been a tram <a href="https://www.ptv.vic.gov.au/news-and-events/news/2019/09/20/industrial-action-affecting-metropolitan-trams-between-10am-and-2pm-on-thursday-26-september-2019/?ref=just.graphica.com.au">strike</a>. I had a meeting to get to and tram services were only just resuming. My assumption, on leaving the office, was that I would catch a tram to get to my meeting in about 15 minutes.</p><p>I was now at one end of the CBD needing to get to a location in middle of town in around 17 minutes. Choices included: wait for tram, catch a taxi or walk fast / run to get to my meeting on time ?</p><p>With no trams in sight, I jumped into a taxi, asking for express route straight through town. The driver informed me that the direct route was closed and the detour took much longer and was traffic jammed. So out of taxi and onto &quot;plan C&quot;, a fast hike to next major tram intersection. On way I send a message that I might be a bit delayed due to tram strike.</p><p>At the intersection I can see trams going in various directions. I ask a service officer, providing assistance to disgruntled passengers, if he knows when the next tram will be heading up Collins St. His response, &#x201C;&#x2026; I do not know, but it should be within next 15 to 20 minutes &#x2026;&#x201D;. &#xA0;So wait or hike. Best to hike, as I might be a little late, but it allows me to act now and keeps me heading in the right direction, the alternative puts me at mercy of chance and luck.</p><p>On the way I thought about how this situation was analogous to many &#x201C;Enterprise Architecture vs Agile&#x201D; debates / discussions, the most recent being on the approach to telemetry within Network Function Virtualization infrastructure (NFVi).</p><hr><p>So to NFVi telemetry and architecture.</p><p>Telemetry is the underpinning of many machine learning and closed loop automation use cases which aim to significantly reduce cost of operating large telco networks. &#xA0;The simple view is that you feed the telemetry into a &quot;big data&quot; machine learning algorithm which then makes intelligent automatic remediation decisions, triggering actions such as: scaling up/down resources, moving workloads to alternate machines and taking healing actions by using alternate network paths. This focus on single use case, feeds well into agile delivery pipeline. It uses well understood technical components and the various fault use cases can be knocked off by feeding backlog and coding the actions.</p><p>A &#x201C;higher level&#x201D; architecture view illustrates that there are a broader set of concerns to be satisfied. Further analysis shows that the data needs for this core set of eight use case use much of the same set of underlying data (massaged and accumulated is various ways).</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://just.graphica.com.au/content/images/2019/09/telemetry-use-cases-summary-01-2.png" class="kg-image" alt="Trams, Telemetry, Agile &amp; Architecture" loading="lazy"><figcaption>Figure 1. NFVi Use Cases enabled by Telemetry</figcaption></figure><ol><li>Platform Assurance &#x2013; the immediate use case for &#x201C;closed loop assurance&#x201D;. Provides visibility of operational systems and uses metric and event data as feed to trigger remediation actions</li><li>Test &amp; Verification &#x2013; being able to meet non-functional requirements for performance is pretty much the life blood of NFV and performance and bench marking suites are typically fed from same metrics as assurance platforms</li><li>Platform Orchestration (NFVo) &#x2013; needs visibility of VNF/CNF stop / start and performance data to be able to make scaling and deployment decisions</li><li>Capacity Management &#x2013; requires rolled up summary of resource utilisation which is generated from underlying metrics collection</li><li>Charging / Licensing &#x2013; uses consumption and utilisation metrics for charging and VNF/CNF stop / start events for license audits</li><li>Analytics &#x2013; metric and events feed network analytics, along with other sources of enrichment data</li><li>Tenant Orchestration (&amp; other consumers) &#x2013; in multi-tenanted NFVi scenarios, it is desirable for tenants to get access a sub-set of underlying platform telemetry data</li><li>Tenant VNF / CNF Telemetry &#x2013; in addition to platform level telemetry VNF/CNF functions can also generate their own application specific telemetry</li></ol><p>Most discussions on NFVi telemetry focus on a single one or two of these use cases (typically #1 plus #3 or #4) in isolation. &#xA0;What happens in practice is that you have multiple teams putting their own instrumentation into infrastructure, blocked backlogs and work done to satisfy one use case needs to be redone for the other.</p><p>The obvious solution is to do a quick strategic architecture brushstroke &#x2026; a central collection point into which others can subscribe. This can be built on top of: rsyslog, Fluentd, collectd and Apache Kafka technologies providing ease of consumption and integration with real time support. The Central Collector provides data subscription point to all of the other functional uses cases, abstracted across OpenStack and Kubernetes based platforms and it meets the non-functional needs! Problem solved ;-) .</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://just.graphica.com.au/content/images/2019/09/telemetry-use-cases-central-collection-01.png" class="kg-image" alt="Trams, Telemetry, Agile &amp; Architecture" loading="lazy"><figcaption>Figure 2. NFVi Central Distribution Telemetry Model</figcaption></figure><p>The technical reality is a little different. &#xA0;OpenStack telemetry is currently (Pike, Queens, Rocky releases) in state of substantial flux and shifting from Ceilometer to collectd based collection. Riemann is used as feedback interface for many Orchestration solutions, including Cloudify. Prometheus time series database is used for collection of metrics within Kubernetes based platform while OpenStack has Gnocchi as its default time series database. Prometheus uses pull model for collection, while collectd &amp; Fluentd are &#x201C;pushers&#x201D;. Both collectd and Fluentd are highly configurable both in terms of what data is collected and where it is written to. While Kafka has a great consumption model, many of the available (via GitHub) code sets use direct integration from the collection agent (collectd / fluentd) to the destination target (Prometheus, &#xA0;Cloudify, Riemann, ZenOSS by way of examples) and so adding Kafka consumer requires writing additional code. Yes the details are messy!</p><hr><p>So to the tram question: Wait for the world to align to simple strategic view, start coding a Kafka generic distribution solution or focus on particular functional use case without concern for broader needs ?</p><p>This is where Enterprise Architecture and Agile approaches work best if they work together. The value in EA view is that it provides a quick basis for review and validation of first and subsequent steps towards strategic target, while Agile view should define what is immediately actionable.</p><p>In context of NFVi telemetry the right decision is totally dependent on priority of particular use cases. Organisation are at varying levels of maturity and have different priorities. In case of an Agile delivery pipeline entering a &#x201C;wait&#x201D; state should be avoided. &#xA0;Again in context of NFVi telemetry, there is usually more than sufficient issues or needs to ensure that delivery momentum can be maintained, even if there will need to be some adjustments on the way.</p><hr><p>So did hiking get me on to meeting on time ?</p><p>No - I was five minutes late, but by signalling ahead that I would be late I managed to get there five minutes before &#xA0;the other party. Calling ahead is an example of the virtue of transparency, a key agile tenant.</p><p>Would I have got there on time by tram ?</p><p>Who knows I might have but by the same token I could have been 30 minutes late and I did get a chance to think about NFVi telemetry while walking. &#xA0;If I was waiting, I would likely haven been occupied with looking at my phone for time and getting agitated about when the next tram was arriving.</p><hr><p><strong>Glossary:</strong></p><p>CNF - Cloud (Native) Network Function (a VNF built as a Container app for deployment in Kubernetes)</p><p>NFVi - Network Function Virtualisation infrastructure</p><p>NFVo - Network Function Virtualisation Orchestration</p><p>Telemetry Data - in this context covers both metric (performance) and event (syslog / snmp) data generated by NFVi platform and VNFs / CNFs running within this.</p><p>VNF - Virtualised Network Function</p><hr><p><strong>References:</strong></p><p><a href="https://www.etsi.org/deliver/etsi_gs/NFV/001_099/002/01.02.01_60/gs_NFV002v010201p.pdf?ref=just.graphica.com.au">ETSI </a>Network Function Virtualisation (NFV) - Architectural Framework</p><p>Some Telemetry Technical Stuff: </p><p>c<a href="https://collectd.org/?ref=just.graphica.com.au">ollectd</a> - Open Source metrics and log collection framework (for OpenStack)</p><p><a href="https://www.fluentd.org/?ref=just.graphica.com.au">Fluentd</a> - Another Open Source metrics and log collection framework (for Kubernetes)</p><p><a href="https://github.com/gnocchixyz/gnocchi?ref=just.graphica.com.au">Gnocchi</a> - Open Source time series database that was developed as part of Open Stack telemetry</p><p><a href="https://kafka.apache.org/?ref=just.graphica.com.au">Kafka</a> - Open Source Streaming Platform</p><p><a href="https://kubernetes.io/?ref=just.graphica.com.au">Kubernetes</a> - Open Source Container Deployment and Orchestration Solution</p><p><a href="https://www.openstack.org/?ref=just.graphica.com.au">OpenStack</a> - Open Source Multi-Tenant Infrastructure as a Service</p><p><a href="https://prometheus.io/?ref=just.graphica.com.au">Prometheus</a> - Open Source Time Series and Monitoring system</p><hr><p><em>NOTES 1: Authors <a href="https://tips.graphica.com.au/tool-and-tips-on-building-collectd/?ref=just.graphica.com.au">&quot;first step&quot;</a> on Open Source telemetry was to get some bugs in collectd resolved to allow deployment on Ubuntu 18.04 &amp; 19.04</em></p><p><em>NOTES 2: The instrumented bumblebee (picture) from Wikipedia <a href="https://en.wikipedia.org/wiki/Telemetry?ref=just.graphica.com.au">Telemetry</a> page (do bee&apos;s do architecture and are they agile...?)</em></p><p><em>NOTE 3: Look at what a bee can do and think about its size and energy efficiency relative to a &quot;big data ML system&quot;, we have a long way to go ;-)</em></p><p><em>NOTES 4: Tram drivers <a href="https://www.ptv.vic.gov.au/news-and-events/news/2019/09/20/industrial-action-affecting-metropolitan-trams-between-10am-and-2pm-on-thursday-26-september-2019/?ref=just.graphica.com.au">strike</a> for better pay..</em></p>]]></content:encoded></item><item><title><![CDATA[Open Source - Strategic Objectives]]></title><description><![CDATA[The definition of a "policy on Open Source" is a request that frequency get passed to the Enterprise Architecture team. So some thought about Policy in general and open source in particular.]]></description><link>https://just.graphica.com.au/open-source-strategic-objectives/</link><guid isPermaLink="false">6469847f76e6920438e6d142</guid><category><![CDATA[open source]]></category><category><![CDATA[enterprise architcture]]></category><category><![CDATA[Digital Strategy]]></category><category><![CDATA[policy]]></category><dc:creator><![CDATA[John Hartley]]></dc:creator><pubDate>Fri, 26 Jul 2019 01:22:45 GMT</pubDate><media:content url="https://just.graphica.com.au/content/images/2019/07/cathedral-and-bazaar-01.png" medium="image"/><content:encoded><![CDATA[<img src="https://just.graphica.com.au/content/images/2019/07/cathedral-and-bazaar-01.png" alt="Open Source - Strategic Objectives"><p>The request for the definition of a &quot;policy on Open Source&quot; &#xA0;gets frequently passed to the Enterprise Architecture team. So some thought about Policy in general and open source in particular.</p><ul><li>Policy (noun) (from <a href="https://www.oed.com/?ref=just.graphica.com.au">OED</a>)</li></ul><p><strong>plans, strategy</strong>, proposed action, blueprint, approach, scheme, strategem, programme, schedule, code, system, guidelines, intentions, notions, theory, line, position, stance, attitude</p><p><strong>practice</strong>, custom, procedure, want, way, tack, routine, matter of course, style, pattern, convention, mode, rule</p><hr><p>All sound and typically established with good intentions, though politicians are masters at siting policy as way of evading pointed questions on particular situtions.</p><p>The simple truth is that if you want a &quot;policy&quot; to be successful, especially if it is counter to current practice, then you will need to make an investment.</p><p>In the context of &quot;<a href="https://en.wikipedia.org/wiki/Open_source?ref=just.graphica.com.au">Open Source</a>&quot; this means more than just using open source software, it means participating. &#xA0;This will require investment in time, people and money. If you are going to invest, then you should have some objectives and expectation of the results. So lets lay out some simple expectations and objectives for use of Open Source within corporate IT.</p><hr><h1 id="misconceptions">Misconceptions</h1><ul><li>Open Source is about saving money on licensing costs</li></ul><h1 id="reality">Reality</h1><ul><li>Over the life of a software solution licensing might be 10% of TCO, largest cost is on ongoing SI and enhancement (change !!)</li><li>There is no difference in cost of configuration vs. cost of &#x201C;coding&#x201D; (and many Open Source developed packages are highly configurable in any case)</li></ul><h1 id="so-why-move-to-open-source">So why move to Open Source</h1><ul><li>Software development is not a support function, but critical enabler for business</li><li>Open Source projects provide a rich skills pool to drawn on as they are driven by highly skilled and motivated people and attract some of best systems development talent</li><li>Open Source and &quot;free&quot; software (free as per <a href="https://www.fsf.org/?ref=just.graphica.com.au">fsf</a>) have visible data schemas, allowing greater data visibility which is essential to achieve agility</li><li>Open Source solutions are mostly driven by operational needs and so are rooted in clear use cases and developed incrementally around these</li><li>Open Source solutions have functionality as good as proprietary solutions</li><li>The community functions as shared interest / collaboration environment, a functional that that previously achieved by vendor product management teams</li></ul><h1 id="so">So</h1><ul><li>You and your organistion will benefit by being more responsive and being better at the job than your competitors</li><li>Adoption of Open Source should be focused on people, talent and skills, not saving money on licensing costs</li></ul><h1 id="remember">Remember</h1><ul><li>Many open source projects have been going for many years and have code and knowledge base that are equivalent to proprietry solutions</li><li>Open Source projects are typically populated by participants who are doing their work as paid professionals and many large ICT companies have made large investments in Open Source for the same reasons outlined above </li></ul><hr><h1 id="sign-posts-for-success">Sign posts for success</h1><ul><li>Is ownership of software function close to business outcome owner ?</li><li>Or conversely how many layers are there from definition of intent to delivery of digital outcome ?</li><li>What is the ratio of evangalists and advisors on agile and open source vs the number of active participants ?</li><li>Are you delegating definition of needs and delivery against these to supplier or are your team active particpants ?</li><li>Are you and your supplier partner both activitely leveraging the same up stream open source projects ?</li><li>Can the team clearly articulate the desired objective and understand how this will be achieved (a sharp focus on particular use case is illustrative of this) ?</li><li>Are you in the Cathedral or the Bazaar :-) ?</li></ul><hr><h1 id="dangers-risks">Dangers &amp; Risks</h1><p>Yes there are dangers and risks with Open Source and some of the most commonly articulated are around security and unfettered technology proliferation. </p><p>These are valid concerns but the way to counter these is not to stop use of open source. Rather estabish the right life cycle management processes like: automatic and continuous &#xA0;security scanning and comprehensive automated functional and performance testing.</p><p>Apologies for introduction of another digital buzzword towards the end of this note, but DevOps should be used to counter these risks. In bringing IT closer to business &#xA0;the number one focus of DevOps should be to protect operational systems and ensure that there is on going ownership of the operational outcome by the development team.</p><p>Each of: Digital, Open Source adoption and DevOps bring accoutability closer to the owning party.</p><p>And back to Policy, in writing one try to reduce the gap from policy to result and ensure that there are clear goals and expectations around the policy.</p><hr><p><strong>References:</strong></p><p>Policy - Oxford English <a href="https://www.oed.com/?ref=just.graphica.com.au">Dictionary</a> &#xA0;(transcribed from iPhone Edition ;-) )</p><p>Open Source - has its roots in &quot;<a href="https://www.fsf.org/?ref=just.graphica.com.au">Free Software Foundation</a>&quot; established by <a href="https://stallman.org/?ref=just.graphica.com.au">Richard Stallman</a></p><p>10% of TCO - based on authors analysis (as leader of Enterprise Architecture team) of large investment in enterprise systems for large telco over 5 years</p><p><a href="http://www.catb.org/~esr/writings/cathedral-bazaar/cathedral-bazaar/index.html?ref=just.graphica.com.au">The Catheral and the Bazaar</a> - the open source musing on open source by <a>Eric Steven Raymond</a></p><hr><p><em>NOTE 1: In writing this piece I was wondering if this should be in the &quot;Industry Pages&quot; or the &quot;Just Enough Architecture&quot; pages, as both Open Source and Digital represent trends in &quot;Industry&quot; as well as a in how we approach &quot;Architecture&quot;</em></p>]]></content:encoded></item><item><title><![CDATA[Value Chains - A Great Scoping and Positioning Tool]]></title><description><![CDATA[<p>Enterprise architecture covers: business, information, applications &amp; infrastructure. &#xA0;With all this to cover how can we maintain agility. A signficant danger in enterprise architecture is getting caught up in analysis paralysis or being overwhelmed by scope.</p><p><a href="https://en.wikipedia.org/wiki/Value_chain?ref=just.graphica.com.au">Value Chains</a> (as defined by Porter) provide a good way to quickly define</p>]]></description><link>https://just.graphica.com.au/tools-value-chains/</link><guid isPermaLink="false">6469847f76e6920438e6d141</guid><category><![CDATA[value chain]]></category><category><![CDATA[business architecture]]></category><dc:creator><![CDATA[John Hartley]]></dc:creator><pubDate>Thu, 25 Jul 2019 07:18:55 GMT</pubDate><media:content url="https://just.graphica.com.au/content/images/2019/07/vintage-value-chain-01.png" medium="image"/><content:encoded><![CDATA[<img src="https://just.graphica.com.au/content/images/2019/07/vintage-value-chain-01.png" alt="Value Chains - A Great Scoping and Positioning Tool"><p>Enterprise architecture covers: business, information, applications &amp; infrastructure. &#xA0;With all this to cover how can we maintain agility. A signficant danger in enterprise architecture is getting caught up in analysis paralysis or being overwhelmed by scope.</p><p><a href="https://en.wikipedia.org/wiki/Value_chain?ref=just.graphica.com.au">Value Chains</a> (as defined by Porter) provide a good way to quickly define scope of activities within an organisation. The structure is clear and easily grasped:</p><ul><li>Core Activies: Inputs + Value Add Activities + Sales + Service</li><li>Supporting Activities: Facilities &amp; Infrastructure + People + Technology + Procurement</li></ul><p>While Porter&apos;s orginal value chain was concerned with the activities within the organisation, &quot;Industry Level&quot; value chains actually predate these and provide view of broader eco-system.</p><p>Within business architecture community a &quot;<a href="https://pubs.opengroup.org/architecture/togaf9-doc/arch/chap28.html?ref=just.graphica.com.au">Capability Model</a>&quot; has mostly equivalent content (in terms of activities identified) though it has a different struture than an Organistional level Value Chain. &#xA0;Other variations such as value streams, chains and business component models also contain simillar content.</p><p>The important thing to remember is that each of these are either organisational or eco-systems models and the model in itself is just a starting point.</p><hr><p>The model must have a clear audience and purpose, typically these can be:</p><ul><li>Rapidly communicate scope of business activities across a broad audience</li><li>Provide a framework for comparitive analysis across organisations within the same business segment,</li><li>Provide a framework for quantitiative analysis of business performance (investment allocation, hot spot analysis, maturity analysis, portfolio analysis),</li><li>Provide a framework to capture performance measures, point of interaction and coupling / dependencies across processes and organisational units</li></ul><p>There are a number approaches to developing value chains:</p><ul><li>Leverage existing asset - faster, likely more mature but potentially confronting to audience</li><li>Craft one - slow, frustrating to participants, can get lost in the modelling,</li><li>Generate it - as part of data analysis not as input into data analysis</li></ul><p>The &quot;Generate it&quot; approach has distinct advantage as it drives toward using the model for analytical purposes, rather than as an end in itself.</p><p>If you are intending to do cross organisational analysis then leveraging an existing asset is essential as this is likely to provide a consistency (immutability) across the different organistions required for comparitive analysis.</p><p>&quot;Crafting one&quot; runs into danger of only being applicable to current context and not supporting impact of transformation on the organistional structure.</p><hr><p>Some advise to practitioners to meet the goals of &quot;Just Enough Architecture&quot;...</p><ol><li>Don&apos;t fall in love with your model ;-) ...</li></ol><p>Here are examples of three industry value chains that cover the same industry (Media / Telco):</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://just.graphica.com.au/content/images/2019/07/media-value-chain-01.png" class="kg-image" alt="Value Chains - A Great Scoping and Positioning Tool" loading="lazy"><figcaption>Media / Telco Value - Industry Value Chain Examples</figcaption></figure><p>The important thing about the value chain is that is is mostly right and at this level they generally are. The value in the value chain is the analysis that sits behind it. Adopt one and do minimal updates.</p><p>2. Plan to keep the time in developing the first draft of the model short and sharp.</p><p>Remember the value chain and associated capability or compoment models are in themselves not the prime objectives. So keep time in developing a first cut (no more than a single &quot;Sprint&quot;) to a minimum with clear aims for its target use and attribution.</p><p>3. The value of value chain is its use to support quantitiative analysis and fact based decision process. So expect that this is where most of the time will be spent</p><p>The collection of data and infomation to establish a fact base, do analysis and render this via the value chain is what takes time and brings the insight. So you need to allow for this. It is also during this time that you can get to establish relationships with component owners and get insight on information. This is essential to get traction on objectives and analysis.</p><p>4. Iterative Elaboration is key to doing &quot;Just Enough&quot;. It is better to get first cut in place and then iterate to bring in addtional details and further attribution for next level of detailed analysis. Typically this iterative elaboration is also used to develope a more complete &quot;capability&quot; or &quot;component&quot; view of the business landscape.</p><hr><p>This is all simple and sound advise, but to often Enterprise Architecture looses sight of goals and gets mired in obsession around details, modelling concerns and internal bluster.</p><p>Just Enough Architecture requires that architecture is grounded in providing valuable input into decision making process and helping in a timely manner.</p><hr><p>A goal of data driven organistion is establish a process that is able to collect the analytical data in repeatable manner and re-render the analysis against this on an ongoing basis. Right now most organistional still rely on very labour intensive collection and analysis process using spreadsheets.</p><hr><p><strong>References:</strong></p><p><a href="https://en.wikipedia.org/wiki/Value_chain?ref=just.graphica.com.au">Value Chains</a> - originally defined by Michael Porter - &quot;Competitive Advantage&quot;. 1985, Ch. 1, pp 11-15. The Free Press. New York.</p><p><a href="https://www.bptrends.com/publicationfiles/FOUR%2004-009-ART-Value%20Chains-Brown.pdf?ref=just.graphica.com.au">Value Chains, Value Stream &amp; Value Nets</a> - Componentisation, service orientation, disaggregation &amp; platforms drive dis-intermediation based models which view eco-systems as set of interacting and collaborating parts, which can be wired together in many ways.</p><p><a href="https://pubs.opengroup.org/architecture/togaf9-doc/arch/chap28.html?ref=just.graphica.com.au">Capability Model &#xA0;&amp; Planning</a> - TOGAF defines capabilities across mutiple layers and recognises that the creation of capabilies is a process of evolution with increments and planning</p><p><a href="https://en.wikipedia.org/wiki/Component_business_model?ref=just.graphica.com.au">Component Business Model</a> - A modelling technique defined by PWC/IBM consultant <a href="https://www.bian.org/about-bian/management/guy-rackham/?ref=just.graphica.com.au">Guy Rackham</a>, &#xA0;which views business as a set of components, which encapsulate: people, process &amp; technology and expose service interfaces to support their interaction</p><hr><p><em>NOTE 1: See Industry Pages - for an example analysis <a href="https://just.graphica.com.au/media/">use</a> in Media / Communications..</em></p>]]></content:encoded></item><item><title><![CDATA[JEA == Just Enough Architecture]]></title><description><![CDATA[<!--kg-card-begin: markdown--><p>or John&apos;s Enterprise Architecture == JEA.</p>
<p>Provides structures, stories and guidance for Enterprise Architects and Digital Strategist.</p>
<p>Its &quot;Just Enough Architecture&quot; as in an Agile world it is critial that just the right amount of Enterprise Architcture is done...</p>
<ul>
<li>Not to much - as this results in</li></ul>]]></description><link>https://just.graphica.com.au/just-enough-architecture/</link><guid isPermaLink="false">6469847f76e6920438e6d140</guid><category><![CDATA[Introduction]]></category><category><![CDATA[enterprise architecture]]></category><category><![CDATA[Digital Strategy]]></category><dc:creator><![CDATA[John Hartley]]></dc:creator><pubDate>Wed, 23 Aug 2017 05:41:06 GMT</pubDate><media:content url="https://just.graphica.com.au/content/images/2017/08/IMG_2611.JPG" medium="image"/><content:encoded><![CDATA[<!--kg-card-begin: markdown--><img src="https://just.graphica.com.au/content/images/2017/08/IMG_2611.JPG" alt="JEA == Just Enough Architecture"><p>or John&apos;s Enterprise Architecture == JEA.</p>
<p>Provides structures, stories and guidance for Enterprise Architects and Digital Strategist.</p>
<p>Its &quot;Just Enough Architecture&quot; as in an Agile world it is critial that just the right amount of Enterprise Architcture is done...</p>
<ul>
<li>Not to much - as this results in bottle necks and potential irrelevance</li>
<li>Not to little - as this is likely to result in quality and cost issues</li>
</ul>
<p>Just Enough Architecture will cover the following areas:</p>
<ul>
<li>Context - where does Enterprise Architecture fit</li>
<li>Value Proposition - what is the purpose and value of Enterprise Architectue</li>
<li>Existenstial Angst - why is it that architects worry about their relevance and particuarly as everyone and thing is moving to agile models...</li>
<li>Agile and Enterprise Architecture - how does Enterprise Architecture work in an Agile delivery world where we have Agile Everything</li>
<li>Enterprise Architecture Metaphor - building cities and culture not the Tower of Babel</li>
<li>Real World Examples and Learnings - industry insights and examples and lessons learnt</li>
</ul>
<p>That is opening gambit for the Focus of this Blog, in addition there are assocated Blogs that cover:</p>
<ul>
<li><a href="https://just.graphica.com.au/">Industry</a> - Industry models and examples</li>
<li><a href="http://tips.graphica.com.au/?ref=just.graphica.com.au">Technology Tips</a> - in addition to writing the Blog we will also write a Blog of technical tips on getting this site up and running</li>
</ul>
<p>The objective is 1 or 2 posts a month and no more.</p>
<!--kg-card-end: markdown-->]]></content:encoded></item></channel></rss>