Or just use mature solution like Rails for example it solves most of typical problems and has easy itegrations. If you need more flexibility then maybe Node.js or other ecosystem is better.
Generally theme about architecture is called System Design and there are resources to learn it for interviews/learning purposes but most of it only is applicable at very big scale and you might never need it. Read "Designing Data Intensive Applications" and look into [1] if still interested.
IMO better to invest time into data design/querying (caching) so that you won't think you need some vodoo to handle your traffic. Like 90%+ of sites/apps don't have 1000req/second and this should be handled by Python on Arduino so as long as your DB design is good you are fine.
For async processing it's worth taking a look into Temporal [2] as it looks as promising alternative to job ques and cronjobs.
I can also recommend [3] to learn some cloud patterns
[1] https://github.com/donnemartin/system-design-primer
[3] https://docs.microsoft.com/en-us/azure/architecture/patterns...
There's even intro about web services: http://aosabook.org/en/distsys.html
I am slightly frustrated since I can only find web service architecture resources when searching for software architecture on Google...
There's some tricks that's good to know that mostly emerge from language limitations so for novice it's good to learn some language specific patterns:
* Ruby [0]
* Node.js [1]
Then from more stable software except DBs is OS, Compilers and Games: * Games [2]
* Interpeters [3]
* Computation: [4]
* OS: don't really know.
Generally if you understand computation, computers/language and your domain you will come with good architecture. I haven't found any shortcuts yet. Fast iteration wins, so optimise mostly for that and ability to swap stuff that doesn't work, so contain crap as much as you can. Pure functions are by definition swappable and easy to test so abuse that. Use domain commands to mutate stuff and not updateEntity(X) and you will be good. Use turnOnEngine(car) instead of updateCar({ engine: true }). Also learn to use Facade[5] pattern -> this one makes gluing things much safer against abuse (limits API surface).It's also good to know about all the things one can optimise for to take decisions more consciously. So like maintainability, reusability, iteration speed, speed of delivery, observability, security etc.
Generally search for "How to design programs book/course" for more abstract stuff and "$MyLang patters/architecture book" or check blogs of some high profile software or their devs
[0] https://www.goodreads.com/en/book/show/13507787-practical-ob...
[1] https://www.goodreads.com/en/book/show/24514193-node-js-desi...
[2] https://gameprogrammingpatterns.com/contents.html
[3] https://craftinginterpreters.com/
There's usually no right or wrong answer - it's all about tradeoffs. I personally prefer to keep the stack and architecture as simple as possible, but many others prefer to rely on 3rd party code as much as possible, regardless of added complexity. Sometimes my choices bite me (I have to reinvent more wheels than I was expecting), sometimes the too-many-layers-of-abstraction approach will bite too (like errors you have no idea why they happen).
Compare different solutions available to the same problem, understand their tradeoffs, and then pick what better aligns to the needs of your project. If you're working with a team, you probably will not be making that decision alone, but the process could be the same.
You can’t beat this type of knowledge. And you learn even more things on the side. I am still blown away by the capabilities of eBPF and what the guy at Netflix does with it for instance. Or stuff like Falco. And if someone (here a devops let’s say) think your are like half bluffing you can show them exactly that you are not. And it also work to spot those that are bluffing and really just read a blog post about it.
Which comes back to the question: better to learn by doing and then you see more the real experts and can lean on them. Or continue yourself to be one.
So ya best way to get knowledge. Like we say there is no free lunch.