Software architectures
The software architecture of an application is beyond the scope of this book. However I will discuss some common things which can be found on an awesome company's servers.
At the time of this writing, it's safe to assume a server will be running one or more of:
- a web framework (Rails, NodeJS)
- an application binary (a compiled Go, Rust program)
- an SQL database (MySQL, PostgreSQL)
- an in-memory database (Redis, memcached)
- a document database (RethinkDB, CouchDB)
- a data visualization tool (Grafana, Munin, Kibana)
- a container orchestration tool (Kubernetes, Nomad, Rancher)
- a message queue (RabbitMQ, Mosquitto, Resque)
... and more.
There's an unbelievable amount of different frameworks, tools, databases, etc. Every company is different, so there's never an expectation for you to know them all. However if you know one, you practically know the others in its category because the concepts are relatively similar.
As a sysadmin/SRE/DevOp, your job is to ensure those things remain up-to-date (with prompt security and bug fixes), to ensure they keep running, and to help programmers get their jobs done, which includes testing and deploying code to various environments (staging, production, beta).
Your tool belt should include the ability to write clear and useful automation for installing, updating, and deploying software to servers. It should include the ability to understand logs and debug real-world problems.
It's also important to understand how these things work together, and how they communicate. Is their traffic tunneled through Wireguard? Are they exchanging information through a Unix Domain Socket? or perhaps they're sending small but frequent UDP packets?
To re-iterate, if you want to get a job at an awesome company, other than having to know a million things, your ability to learn quickly, understand concepts and apply them intelligently, will help you much more throughout your career as opposed to mastering only 1 specific software and calling it a day.