A Broad Overview of Application Architecture

Yung L. Leung
FAUN — Developer Community 🐾
6 min readJan 13, 2019

--

In a previous article, I gave a Broad Overview of IT Infrastructure. I expressed my goal to understand how software fits in the physical world. Here, I continue building upon that by discussing the architecture of an application.

The basic functions of an application are essentially data management, application & presentation logic. Data management is how the data is stored (i.e. JSON) and accessed (i.e.: SQL). Application logic is how the data is changed for use (i.e.: filter, concatenation, computation, etc.). Presentation logic is how the data is displayed and interacted with by a client (i.e.: what events there are & how they are handled).

These three basic functions bring about the different types of application architectures. Application architecture asks the question, “Who should manage data, run the application & present the information”. The answer is the server, client or both.

Server — based architecture involves having data management & manipulation by the server, so that the client can only interact with the application & database from afar. For example, Dropbox is a file sharing app where the users can upload their files through a Dropbox website, to be shared with others via Dropbox servers.

Cloud Computing

Client — based architecture is when the entirety of an application is localized within a client’s computer. For example, Bit Torrent is a client — side file sharing application where users can choose what files to share from their computer.

Peer to Peer Computing

Client — server architecture is when data management is performed by the server, presentation is done by the client & data manipulation is shared between the server and client. For example, Microsoft Outlook is an email manager application enabling users to store their emails from multiple accounts in part on Microsoft’s Exchange Server & in part, offline on their computer.

Client-Server Computing

So, the distribution of data management, application & presentation logics is what makes up the Application Architecture. But, for any sophisticated application to be interactive, there must be programs that interface between clients & servers. This application programming interface (API) acts as a middleware that exchanges client requests & server responses. For example, applications such as WhatsApp, Instagram, Snapchat would not work without APIs that interacted between them and a smartphone’s microphone, photo database, camera & GPS.

An API is the software that connects Apps to its servers.

Aside from APIs, an App can run because of all the different kinds of software it uses as it runs. This software stack consists of an operating system (or runtime environment), a database management system, a server & application framework.

The operating system or runtime environment provides to the App the computer’s resources (i.e. memory). An application framework is a framework for implementing a standardized coding structure (i.e. Model -View-Controller (MVC), Components).

When a company is born out from the development of an application, in order to run a business, software is required to run a Web Page, Marketing, Sales & Manufacturing. It is possible to have each business application built from different software stacks.

A way to run all of these applications within the same computer system is to build virtual machines (VM). VMs are emulations of computer systems. For example, you can have a single computer run VM’s for Linux, Windows & MacOS. So, you start off with a single host server and you end up with multiple servers for each business application (Web Page, Manufacturing…). The problem with VMs is that they are slow and costly in terms of space (GB). This is because each VM is running its own OS.

If there was some way to contain the dependencies of each application within a single environment of an OS, instead of running a separate OS per application, then it would be possible to run each application instantaneously at the fraction of the size of a single OS.

A container (i.e.: Docker) is a program that that can contain an application and its OS or runtime environment dependencies. In this manner, containers enable the scalability of multiple applications.

An alternative from employing multiple software developer teams to build each part of the business (Webpage, Manufacturing, …) is to focus on the development of your primary application, while delegating the other parts of the business to micro — services. A micro — service is a single function mini-application that can be used to interact with your application via an API.

In this case, instead of having your machine run multiple containers or multiple VMs, your machine runs only your App. Through the internet, it acquires services from providers of other mini — apps, each of which runs on their own servers. And so, you can start off with a simple app that enables friends to connect with each other (i.e. Facebook), but end up with an app that grows in complexity with features (i.e.: messenger, groups & marketplace) via micro — services.

References:

Join our community Slack and read our weekly Faun topics ⬇

If this post was helpful, please click the clap 👏 button below a few times to show your support for the author! ⬇

--

--

Developer with a passion for clean code & good UI/UX design. Inspired by the life of Jobs & Wozniak & realized through solving puzzles & building apps.