Most Organizations that started in the early 2 thousands or before, have their Systems implemented as big Monolithic code bases.
Most likely the Application is running in one computer that works as Application Server, and other computer that works as Database Server.
In many cases, both Application and Database are running in the same machine.
Also, it is very common for these Organizations to have more than one Application running in the same machine. As the Database Server is only one, the Database is made of Schemas, each schema serving each of the Applications. For many years IBM has dominated this market, providing not only the hardware, but the software to run these Systems.
In this setup, the mainframe computer acts as System Server and all users across the organization, work in basic computers called client terminals. Is from here that the term client-server architecture was taken.
These clients are connected to the mainframe with an internal network. In the old times, there were no access from/to the outside world. Then in the 90's, many small companies took advantage of the benefits of the personal computer. It was common to find small/medium companies, like the one I was working for, that were running in old IBM as-360 with as many as 50 client terminals where Departments such like Sales, Accounting, Operations, Marketing, etc. were every day entering data and pulling out reports.
The capacity of this mainframe was limited by the size of the hard drive. At some moment, the company grew in sales and operations, then making us to back up monthly operations data, then clearing it up from the DB to have space available for next month. It was a very painful process, as backing up meant using a Windows PC and as back up storage, I used floppy disks. As floppy disk storage capacity is very small, I most of the time needed around 400 of them. The process of backing up took me about 3 days and it was a nightmare.
I was asking my boss to buy a new mainframe to avoid such complications, but there were not enough budget for this. At some moment I got approved to implement a new architecture. We would be stopping the old IBM 360 and replacing it for a modern Server; this new Server was nothing but a Dell Desktop PC running Windows NT. Then we replaced all client terminals with Windows based PCs. and Novell as Network Manager.
The journey to a Distributed System begun.
Replacing an old machine by a new PC Server was not even close to be done. We needed to replace all the IBM old System to keep Sales, Operations, Accounting, Marketing, Payroll , etc. working. We found a suite of products tailored for small to medium organizations that were made to run in Windows machines. Few months later, I got running in this PC a Sales and Inventory tracking App, an Accounting App, a Payroll App, a Banking App, etc. And along with those, we had Microsoft Word, Excel, Powerpoint and Outlook to support daily operations. All these Apps were part of the suites and could be handled independently from each other. At some moment, one single PC acting as Server, was not enough, so I put to work other 2, having 3 PCs connected to the same network, each one running some of these Apps. In this very moment, i had put a Distributed System to work.
It was Distributed because instead of having one single ERP System like the one that came along with the IBM 360 machine, I had multiple smaller Systems running in these 3 PCs acting as Servers. At this moment, the key benefits of this implementation just to mention a few:
- Each one of the Smaller Systems can be Upgraded or replaced by other without affecting all others.
- Data Back Up was more easy as each System had its own DB so dumping data was more straight forward.
- Upgrading the hardware was more easy as each smaller App was easy to move from one machine to another.
Of course, this scenario has changed dramatically since then. Nowadays, we have the Internet with the TCP/IP protocol as the Network for internal or external inter connections, we have this concept of "Virtualization" that is nothing but building virtual machines inside physical ones and we have this concept of "Cloud" that is nothing but a Virtual environment where you can get virtual machines of any size to put your Systems to work and serve your clients.
A Distributed System is in most cases the best solution for any Organization, however, the important thing here is to determine how distributed this System has to be in terms of hardware and software. I will be talking about it in the next page.