Atomic Architecture

An Architectural Vision for Better Information Systems

Malcolm Sparks, CTO@JUXT

Who am I?

 

1982-1991 BASIC, 68000
1991-1996 C, C++, UNIX
1996-2009 Java, XML
2009-2023 Clojure

Malcolm Sparks, CTO@JUXT

@malcolmsparks (GitHub, X, LinkedIn, etc.)

Languages

Who am I?

 

1997 Server-side Java, CORBA, RMI, Servlets
1998 Enterprise JavaBeans
1999-2003 J2EE App Servers, Servlet/JSP containers
2006+ REST (Restlet, WebMachine)
2010 plugboard, Liberator
2014 bidi, yada
2019+ jinx, pick, reap, tick, grab...
2020-2023 Site (part of XTDB family)

Projects

  • Founded 2013
  • Clojure, Functional Programming roots
  • Web Development, Information Systems (mostly in Finance)

Motivation

Status Quo

Within this research setting, we found that differences in architectural complexity could account for 50% drops in productivity, three-fold increases in defect density, and order-of-magnitude increases in staff turnover.

Source: System design and the cost of architectural complexity, Sturtevant (2013) https://dspace.mit.edu/handle/1721.1/79551

Principle 1 Shared State
Principle 2 Domain Operations
Principle 3 Data Consistency
Principle 4 API Only
Principle 5 Access Control
Principle 6 Event Logging
Principle 7 Bitemporality

For the last decade, the tech sector has been on a mission to decrease its dependence on central SQL-monoliths. The mainstay of these efforts were focused on microservices and its “loose coupling” and “separation of concerns” as guiding principles.

https://itnext.io/loosely-coupled-monoliths-and-where-to-find-them-4004fac8ecc1

the issue comes from the interaction between two processes happening in parallel. Remember that the point of this (increasingly complex) exercise is to decrease coupling, ie: reduce the amount of implied information between subsystems.

https://itnext.io/microservices-and-the-myth-of-loose-coupling-9bbca007ac1a

some_list = [10, 20, 30, 40]

print("Original List:", some_list)
some_list.append(100)
some_list[0] = 0
some_list.pop(1)
print("Manipulated List:", some_list)

 

Scripting

re-frame

'Atom'

from https://martinfowler.com/articles/data-mesh-principles.html

https://dev.solita.fi/2020/09/23/centralised-schema-management-microservices.html

Principle 1 Shared State
Principle 2 Domain Operations
Principle 3 Data Consistency
Principle 4 API Only
Principle 5 Access Control
Principle 6 Event Logging
Principle 7 Bitemporality

Domain Operations

update-customer-profile

confirm-payment

check-inventory-levels

modify-order-status

verify-account

schedule-delivery

reset-password

issue-ticket

track-shipment

update-order

create-invoice

adjust-billing

process-return

initiate-transfer

validate-membership

escalate-issue

generate-report

review-application

authorize-transaction

notify-user

Principle 1 Shared State
Principle 2 Domain Operations
Principle 3 Data Consistency
Principle 4 API Only
Principle 5 Access Control
Principle 6 Event Logging
Principle 7 Bitemporality

Data Consistency

Principle 1 Shared State
Principle 2 Domain Operations
Principle 3 Data Consistency
Principle 4 API Only
Principle 5 Access Control
Principle 6 Event Logging
Principle 7 Bitemporality

API Only

Principle 1 Shared State
Principle 2 Domain Operations
Principle 3 Data Consistency
Principle 4 API Only
Principle 5 Access Control
Principle 6 Event Logging
Principle 7 Bitemporality

Access Control

Access Control

Executive Order 14028, “Improving the Nation’s Cybersecurity”, pushes agencies to adopt zero trust cybersecurity principles and adjust their network architectures accordingly.

https://zerotrust.cyber.gov/zero-trust-maturity-model/  May 12, 2021

Principle 1 Shared State
Principle 2 Domain Operations
Principle 3 Data Consistency
Principle 4 API Only
Principle 5 Access Control
Principle 6 Event Logging
Principle 7 Bitemporality

Event Logging

Principle 1 Shared State
Principle 2 Domain Operations
Principle 3 Data Consistency
Principle 4 API Only
Principle 5 Access Control
Principle 6 Event Logging
Principle 7 Bitemporality

Bitemporality

 

Wrap Up

  • Evaluate moving state from services to a central store: "stateless microservices"
  • Adopt OpenAPI
  • Adopt OAuth2
  • Evaluate GraphQL
  • Evaluate JSON-LD
  • Buy a copy of 'Data Mesh'

Recommendations

Questions?

Malcolm Sparks, CTO@JUXT

mal@juxt.pro

@malcolmsparks (GitHub, X, LinkedIn, etc.)