A Glossary of Some Software Terminology
Ian Hellström | 8 December 2016 | 1 min read
Continuous integration, Docker, Jenkins, Vagrant, DevOps, PaaS, serverless… If you are sometimes confused as to what the latest buzzwords in the tech industry mean, you have come to the right place
The glossary below is obviously not complete nor do I intend to make it so. If you get your knickers in a twist because your tool is not listed, tough luck. If you’re not happy with the list of tools/alternatives I have provided, please go to Slant for pros and cons on many of them, or use your favourite search engine and some search-fu.
Sofware Development
Version Control
What? | Software to record every single change to source code |
So what? | It enables multiple developers to work on the same projects at the same time and go back in time (in terms of revisions) |
Tools |
Subversion git Mercurial Perforce TFS |
Prerequisites | N/A |
Buzzwords | revision control, source control, repository, SCM, VCS, GitHub, Bitbucket |
Build Automation
What? | Software to manage the compilation process, including library dependencies and automated tests |
So what? | It’s a pain to manually keep track of all project files, libraries, compiler flags, and automatically run all tests |
Tools |
make Maven (Java) Gradle sbt (Scala) Leiningen (Clojure) MSBuild (.NET) Rake (Ruby) |
Prerequisites | version control |
Buzzwords | dependency management, unit testing |
Continuous Integration (CI)
What? | Software to manage all developers’ modifications and merge these into the mainline |
So what? | Frequent check-ins of source code changes minimize the number of potential conflicts due to divergent branches |
Tools |
Bamboo Codeship Jenkins Snap CI Team City Travis CI |
Prerequisites | build automation |
Buzzwords | XP, integration testing, feature toggle, merge hell, integration hell |
Continuous Delivery (CD)
What? | Approach in which small changes to software are integrated and tested frequently to ensure that each modification can be deployed |
So what? | It’s the software development practice that goes with CI and it aims to ‘make releases boring’ |
Tools | N/A |
Prerequisites | continuous integration |
Buzzwords | DevOps, continuous deployment |
Configuration Management
What? | Software to manage all necessary configurations to deploy to production |
So what? | Manually deploying and maintaining too many servers is a Herculean task that borderlines on Sisyphean |
Tools |
Ansible Chef Puppet Salt |
Prerequisites | continuous integration |
Buzzwords | DevOps, deployment management |
Continuous Deployment (CD)
What? | Software to continuously deliver every release to production |
So what? | To ‘do’ continuous delivery you need tools to deploy to production; continuous delivery and continuous deployment are often conflated |
Tools |
Bamboo Codeship DeployBot Go CD Octopus Deploy Snap CI Team City Travis CI |
Prerequisites | continuous delivery, configuration management |
Buzzwords | DevOps |
Virtualization and Containers
Virtual Machine (VM)
What? | Software to isolate applications (software) on the same hardware, in which each image has its own OS |
So what? | Near-complete separation of applications, in which only the hypervisor stands between the physical hardware and the simulated (virtual) environment |
Tools |
Hyper-V QEMU VirtualBox VMware |
Prerequisites | N/A |
Buzzwords | hypervisor, emulator |
Container
What? | Software to isolate applications (software) on the same hardware, in which all images on the same hardware share the same (host) OS |
So what? | VMs have their own OS but containers share the OS without the need for a hypervisor, so it’s more lightweight than a VM |
Tools |
Docker LXC LXD rkt ThinApp |
Prerequisites | N/A |
Buzzwords | OS-level virtualization |
Container Orchestration
What? | Software to abstract away the entire infrastructure to automatically provision, discover, and monitor containers in a cluster |
So what? | It makes managing many containers in a cluster manageable |
Tools |
Amazon ECS Azure Container Service Docker Swarm Kubernetes Marathon |
Prerequisites | N/A |
Buzzwords | service discovery, load balancing, self-healing, automatic scaling, DC/OS |
VM Provisioner
What? | Software to provide reproducible VM instances |
So what? | Creation of portable, disposable development environments can avoid the ‘works on my machine’ excuse |
Tools |
Cobbler Foreman Packer Vagrant |
Prerequisites | configuration management, VMs, containers, DevOps |
Buzzwords | machine image |
By the way, there is a difference between Packer and Vagrant, but for our purposes they are left in the same bucket.
Unikernel
What? | Software to provide an image of an application as well as a near-minimal set of the required OS features |
So what? | Even though containers are more lightweight than VMs, they still contain an entire OS rather than just the features that are really needed |
Tools | An overview is available here |
Prerequisites | N/A |
Buzzwords | single address space operating system |
Software Architectural Patterns
Monolith
What? | A stand-alone application that incorporates everything from data storage to the user interface |
So what? | The traditional, non-modular way to build applications |
Buzzwords | mainframe |
Multi-Tiered Application
What? | An application that decomposes the different components into common layers |
So what? | Modularity enables re-use of code; layers in three tiers: data access, (business) logic, presentation |
Buzzwords | modular, three-tiered, object-oriented design, OOP |
Service-Oriented Architecture (SOA)
What? | Decomposition of applications into services that communicate via a network |
So what? | Autonomous services with clear boundaries and a shared schema enable an enterprise to decouple applications |
Buzzwords | SOAP, JMS, ESB, messaging, client-server, enterprise |
Microservices
What? | Independently deployable, asynchronous services that do one thing and do it well |
So what? | Services in a SOA share schema, which means that individual services cannot be deployed separately |
Buzzwords | REST, API, DevOps, containers, Lagom |
Event-Driven Architecture (EDA)
What? | Application architecture, for which applications produce, detect, consume, and react to events |
So what? | It enables automatic activation of (micro)services in a distributed system based on events to maintain consistency among (micro)services across boundaries |
Buzzwords | message-driven architecture, event stream processing (ESP), complex event processing (CEP), actor model |
Event Sourcing (ES)
What? | Store state as a sequence of events |
So what? | Events are (immutable) facts, which means that by simply replaying events we can reconstruct state, which is not possible with CRUD applications |
Buzzwords | stream processing, journal, transaction log |
CQRS
What? | Command Query Responsibility Segregation |
So what? | A splitting of read (query) and write (command) data models and/or storage systems, so that both can scale (almost) independently |
Buzzwords | event sourcing, command query separation (CQS) |
Serverless
What? | An accepted misnomer for (ephemeral) hosted services |
So what? | It takes microservices to the extreme: by having (third-party) services hosted ‘in the cloud’ you do not have to worry about the infrastructure, including scalability |
Buzzwords | API gateway, functions as a service (FaaS), containers, AWS Lambda |
XaaS: X as a Service
What? | Cloud-hosted environments for X: software, infrastructure, platform, database/storage, infrastructure, etc. |
So what? | By having your X in the cloud you don’t have to worry about the details of maintaining and running X |
Buzzwords | cloud, serverless computing, SPI model (i.e. Saas, PaaS, IaaS) |