quartz/content/notes/software-architectures.md
Jet Hughes 8a667e5693 update
2022-05-27 14:12:53 +12:00

2.7 KiB

title aliases tags
software-architectures
info201

# of pieces?

  • one integrated piece
  • a few distinct components
  • many distict components

does it run:

  • on one machine
  • spread across multiple machines
  • in the cloud

these consdier ations dtermine the structure of the software we create

these have changed over time. from monolithic to distributed changes of distribution

Monolithic architecture

system includes all relevant code in one executable

  • e.g., UI, business logic, data management
  • self-contained
  • no significant separation of reponsibilities

easy to deploy, awkward to upgrade.

  • widely spaced "big bang releases" usually only seen in legacy systems now

Separation of reponsibilities

partition systems into logically separated parts. e.g., UI, business rules, data access, utilities

easier to upgrade

each part can be deployed ina different location

each part is more cohesive

  • related code all in one place
  • unrelated code cleanly separated
  • well definec interactions between parts
  • easier to design, devleop and maintain

can have "fake data" etc for development

Generic (old) info sys architecture

front middle back end client server

this is limiting and old. based more of hardware than software.

modern system example

modern system

Microservices

everything is a service

  • APIs that can be called over the internet
  • e.g. product service, customer service

small cohesive units of code

  • performs a single function
  • each with their "own" data
    • not necessarily its own database
  • as autonomous as possible
  • independent and effectively disposable
    • very scalable
    • auto matic load management
  • can run many redundant instances concurrently

A system is a collection of services

most common implementation architecture for modern distributed information systems and web apps

serverless computing

tradtional web app deployment usually still involves one or more identifiable servers

  • includes microservice baed aps
  • server may be virtualised
  • generally require per sserver configuration

serverless eliminates the "server" concept

  • just deploy code into the cloud
  • no server config needed
  • a form of utility computing
  • e.g., google app engine

Function as a service

logical extreme of serverless computing

deploy individual functions into the cloud

  • no real concept of a "app"
  • fits well with microservice acrchitecture
  • very lightwright - fast and scalable
  • application logic only ⇒ dont store any data

componentised highly distributed software

ideal for on-demand computing

e.g., AWS lambda, google cloud functions, microsoft azure functions etc