IT product model
1. Modern products
Modern products are no longer called “programs.” A modern product can include dozens of programs, hundreds of Internet services, and many APIs provided by a cloud data center (also called data processing centers), where it is deployed.
Many modern products (if not all of them) 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 lives 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 the server of another product. This forms a kind of global network of clients and servers, and they all work with each other.
Therefore, the modern application model might be better described as the Client-Internet-Server paradigm. There has become far too much complex communication in between. So-called “smart communication channels” have even appeared, which decide on their own whom to send your request to, and when.🛰️📡
2. Clients
Client programs can roughly be divided into 4 categories:
- 🖥️ Desktop client — a program that runs on a computer.
- 📲 Mobile client — an app for iOS or Android.
- 🌐 Web client — a website/web application that runs in the browser.
- 🌍 Server client — an application that runs on another server.
And each of them can, in turn, be broken down into parts again. For example, a web client is a website or a web application, which means it consists of a Browser and a Website that gets 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 that gets loaded into it. A website usually consists of three things:
- 📄 HTML
- 🎨 CSS
- ⚡ JavaScript
“Nothing could be simpler,” you might say. Except today nobody writes websites using just HTML and JavaScript. For website development, people now use not just libraries but full-fledged frameworks such as React, Angular, or Vue ⚛️. And these are no longer just “sites,” but full web applications with their own builds, tests, and paradigms.
Pure CSS is no longer used either. CSS preprocessors already exist to help generate it, as well as entire CSS frameworks. What is more, even email messages have special CSS frameworks so your email looks good both in the browser and in most email clients 💌.
Few people write in plain JavaScript anymore—most 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 client and 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 for your money.
A physical server is no longer physical. All modern data centers offer virtual server rental. A virtual server is a kind of virtual computer, and a single physical server can host dozens of them. This is 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 this approach is becoming outdated. These days, moving to the cloud is in fashion—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.
You need a server to store backups—there is ready-to-use, convenient cloud infrastructure for that. You 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 start becoming part of your product. For example, Amazon has a ton of data centers around the world, so they offer a CDN service: your public content will be cached across all Amazon data centers, and your users worldwide will receive it faster 🛰️.
Or you can route calls to your application’s API through Amazon API Gateway, which allows very flexible configuration of how your services are handled. You can distribute load across different services, repel DDoS attacks, automate file uploads, set up smart caching, and much more 🛡️.
As a result, many “smart communications” emerge between the client application and your services, and you can and should configure them. Even if you never do this personally, you must know that they exist and can significantly affect how your program works.
And we have not 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 poor connection and the link keeps dropping. Guess who will have to solve this problem? You 😅
4. Server
The word “server” can hide completely different concepts. It will be useful for you to learn about the most common ones.
🖥️ Physical server
A physical server is hardware: a separate computer with resources (CPU, memory, storage) used to process data and ensure the operation of 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 several 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 and reverse proxy in microservice architectures, as well as a load balancer.
💾 Database server
A database server is a specialized server used to manage databases and process queries to them. It provides centralized storage of data and its processing, granting access to data over the network. Database servers support transaction processing, search, and data modification, while ensuring the reliability and security of information storage. Examples of database servers include MySQL, PostgreSQL, Oracle Database, and Microsoft SQL Server.
And so, somewhere in a data center, on one of the virtual servers, your project on Go 1.25 and the Go standard library will be running. It will work with a database (via database/sql and drivers), receive HTTP requests through the built-in net/http, and in front of it there might be Nginx, Apache HTTP Server, or a load balancer like AWS Elastic Load Balancing or Google Cloud Load Balancer.
But it is thanks to your code that millions of users of your product will be happy. They will use the service, pay money for it, and as a result the product owner will be happy too. The company’s stock will go up, you will get stock bonuses—and you will be happy 💸. A real cycle of happiness in the industry :)
GO TO FULL VERSION