IT Product Model
1. Modern products
Nobody calls modern products “programs” anymore. A modern product can include dozens of programs, hundreds of Internet services, and lots of APIs provided by a cloud data center (also called data processing centers), where it is deployed.
Many modern products (if not all) work under the Client-Server paradigm. This is when your device (phone, laptop, computer) runs a program that is responsible for communicating with the user (you), while the critical functionality is located on a dedicated server, where everything important happens ➡️🖥️
Sometimes your client can communicate with several independent servers, or a server of one product can call a server of another product. This results in a kind of global network of clients and servers, and they all work with each other.
That’s why the modern application model might be better described by the Client-Internet-Server paradigm. There has become way too much complex communication there. So-called “smart communication channels” have even appeared, which independently decide whom to send your request to and when.🛰️📡
2. Clients
Client programs can be roughly divided into 4 categories:
- 🖥️ Desktop client — a program running on a computer.
- 📲 Mobile client — an app for iOS or Android.
- 🌐 Web client — a website/web app running in a browser.
- 🌍 Server client — an application that runs on another server.
And each of them, in turn, can be broken down further. For example, a web client is a website or a web app, which means it consists of a Browser and a Website that is loaded into it. Browsers are not all the same and can behave differently.
But even if we take the most common browser, there is still the website being loaded into it. A website usually consists of three things:
- 📄 HTML
- 🎨 CSS
- ⚡ JavaScript
“There’s nothing simpler,” you might say. But today nobody builds websites with just HTML and JavaScript. For website development people now use not just libraries, but full-fledged frameworks such as React, Angular, or Vue ⚛️. And they’re not really “websites” anymore, but full web applications with their own builds, tests, and paradigms.
Nobody uses plain CSS anymore either. CSS preprocessors already exist to help generate it, as well as entire CSS frameworks. And what’s more, even for email messages there are special CSS frameworks so that your email looks nice both in a browser and in most email clients 💌.
Few people write in plain JavaScript anymore, too — all large web applications are built in TypeScript, which is then compiled to JavaScript. Well, you get the idea...
3. The Internet and infrastructure
Communication between a client and a server — what could be simpler? But even in their relationship everything has changed.
Your product will most likely be hosted in one of the modern data centers. Many companies around the world offer various hosting services for your products, whether on their servers or on your own physical servers. Any whim, as long as you pay.
A physical server is no longer physical. All modern data centers offer rental of virtual servers. A virtual server is a kind of virtual computer, and a single physical server can host dozens of them. It’s convenient when it comes to upgrading a server. If you need more memory, you can add it to your virtual server in a few minutes ⏱️.
But even that approach is becoming outdated. Now moving to the cloud is in vogue — this is when your product is not just deployed on a virtual server in a data center, but actively uses a large set of infrastructure and services provided by those data centers.
Need a server to store backups? There’s ready-made, convenient infrastructure in the cloud for that. Need a database with 99.9999999% reliability? That exists too. Kafka, RabbitMQ, NoSQL? Everything is already there and easy to set up. Just pay the money.
And these data centers and clouds are starting to become part of your product. For example, Amazon has tons of data centers all over the world, so they offer a CDN service: your public content will be cached across all Amazon data centers, and your users around the world will receive it faster 🛰️.
Or calls to your application’s API can be routed through the Amazon Gateway API service, which lets you configure how your services operate very flexibly. You can distribute load across different services, fend off DDoS attacks, automate file uploads, configure smart caching, and much more 🛡️.
As a result, many “smart communications” emerge between the client application and your services, and they can and should be configured. Even if you never do it personally, you should know they exist and can significantly affect how your program works.
And we haven’t even touched on topics like routers, 5G towers, satellites, and Internet cables on the ocean floor. You send a video stream from your server to your client, and it glitches because the client has a bad connection and it keeps dropping. Guess who will be solving that problem? You 😅
4. Server
The word "server" can refer to completely different things. It will be useful for you to learn about the most common ones.
🖥️ Physical server
A physical server is hardware that is essentially a separate computer with resources (CPU, memory, storage), used for data processing and for running various software applications. These servers are installed in data centers, where they provide capacity for hosting websites, applications, databases, and other services.
🪐 Virtual server
A virtual server is a software-emulated server that runs within a physical server environment. Using virtualization technologies, one physical server can be split into multiple isolated virtual servers, each of which has its own operating system and can be independently rebooted and configured.
🕹️ Server program (for example, Nginx)
A server program, such as Nginx, is server-side software used to handle requests to web resources. Nginx is widely known as a web server, and it can also act as a mail proxy server and a reverse proxy server in microservice architectures, as well as a load balancer.
💾 Database server
A database server is a specialized server used to manage databases and handle queries to them. It provides centralized data storage and processing, granting access to data over the network. Database servers support transaction processing, searching and modifying data, while ensuring reliability and security of information storage. Examples of database servers include MySQL, PostgreSQL, Oracle Database, and Microsoft SQL Server.
And somewhere in a data center, on one of the virtual servers, your project on Kotlin 2.3 and Ktor will be running. It will work with a database, accept requests through Nginx, Apache HTTP Server, or a load balancer in AWS Elastic Load Balancing or Google Cloud Load Balancer, and send its logs to monitoring systems like Prometheus + Grafana, Elastic Stack (ELK), or Splunk 📈.
But it’s thanks to your code that millions of users of your product will be happy. They will use the service, pay money for it, and ultimately the product owner will be happy too. The company’s stock will rise, you’ll get bonuses in shares — and you’ll be happy 💸. A real cycle of happiness in the industry :)