11.1 Modern Products

No one calls modern products programs anymore. A modern product can consist of dozens of programs, hundreds of internet services, and a bunch of APIs provided by the cloud data center in which the product is deployed.
Many modern products (if not all) work on the Client-Server paradigm. That's when there's an app on your device (phone, laptop, computer) responsible for communicating with the user (you), and all the critical functionality is on a remote server where all the important stuff happens.
Sometimes your client might communicate with several independent servers, or a server of one product might reach out to a server of another product. This creates a sort of global network of clients and servers, all working together.
So, maybe it's better to describe the modern application model as the Client-Internet-Server paradigm. There's a lot of complex communication going on. There are even so-called "smart communication channels" that decide where to send your request and when.
11.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 site/web application running in a browser
- Server client — an app running on another server
Each of these can be further broken down. For example, a web client is a site or web application, which means it consists of a Browser and Site that loads into it. Browsers aren't all the same and can function differently.
But even if we take the most common browser, there's still the site loading into it. A site usually consists of three things:
- HTML
- CSS
- JavaScript
Sounds simple, right? But no one writes websites using just HTML and JavaScript anymore. Now, full-fledged frameworks like React, Angular, or Vue are used for site development. And they're not just sites anymore; they're fully-fledged web applications, complete with bundling, testing, and paradigms.
Simple CSS isn't used anymore either; there are CSS preprocessors that help generate it, and even full CSS frameworks. Heck, there are even entire CSS frameworks for email to make sure your email looks nice if someone's viewing it in a browser or most email clients.
No one's writing in plain JavaScript anymore either; all major web apps are written in TypeScript, which then compiles to JavaScript. You get the idea...
11.3 Internet and Infrastructure
Client-server communication — what could be simpler? But even that's changed.
First, your product will most likely be hosted in one of the modern data centers. Many companies worldwide offer various hosting services for your products, either on their servers or your physical servers. Any whim for your money.

A physical server is no longer physical. Modern data centers offer renting virtual servers. It's like a virtual computer, and there can be dozens on one physical server. It's convenient for upgrading the 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 everyone's moving to the cloud — where your product isn't just deployed on a virtual server in a data center, but actively uses a wide range of infrastructure and services from these data centers.
Need a server for backup storage? There's a whole handy infrastructure in the cloud for that. Need a database with 99.9999999% reliability? There's one too. Kafka, RabbitMQ, NoSQL? Everything's already available and easy to set up. Just pay the money.
These data centers and clouds are becoming part of your product. For example, Amazon has tons of data centers worldwide, so they offer CDN service: your public content will be cached at all Amazon data centers, and your users worldwide will receive it faster.
Or API calls from your app can be routed through Amazon's Gateway API service, offering a very flexible setup for working with your services. You can distribute load to different services, fend off DDoS attacks, automate file uploads, set smart caching, and much more.
This means there's a bunch of "smart communications" between the client application and your services that you can configure and should configure. Even if you never do it yourself, you should know they exist and can significantly impact your program's performance.
And we haven't even touched on routers, 5G towers, satellites, and ocean-floor internet cables. You're streaming video from your server to your client, and it starts glitching because the client's connection is bad and keeps dropping. Guess who's going to solve that problem?
11.4 Server
The term server-side encompasses many different concepts, so it's useful to know the most popular ones.
Physical Server
A physical server is equipment that acts as a separate computer with resources (CPU, memory, storage) used to process data and run various software applications. These servers are installed in data centers, providing power for hosting websites, applications, databases, and other services.
Virtual Server
A virtual server is a software-emulated server that runs on a physical server's environment. Using virtualization technologies, one physical server can be divided into several isolated virtual servers, each with its operating system and capable of being independently rebooted and configured.
Server Program (example: Nginx)
A server program like Nginx is server software used to handle requests to web resources. Nginx is well-known as a web server that can also function as a mail proxy server and reverse proxy server in microservices architectures and as a load balancer.
Database Server
A database server is a specialized server used for managing databases and processing queries to them. It provides centralized data storage and processing, offering data access over a network. Database servers support transaction processing, data searching, and modification while ensuring data reliability and security. Examples of database servers include MySQL, PostgreSQL, Oracle Database, and Microsoft SQL Server.
Somewhere in a data center, on one of those virtual servers, your React and Node.js project will be running, working with the database, handling requests from Nginx, and sending logs of its actions to Splunk.
But thanks to your code, millions of users will be happy with your product. They'll use it, pay money for it, and the product owner will be happy too. The company's stock will rise, you'll get bonuses in stocks, and you'll be happy too. It's like a cycle of happiness in nature or something :)
GO TO FULL VERSION