The times are definitely changing. Solution architecture has been quite a lethargic discipline for some years. Three-layered architectures were dominant. There were not many unknowns. Scalability was usually just vertical (more powerful machines) or horizontal (more parallel machines). 100k concurrent users were more than enough for 95% of use cases out there.
However, with the massive expansion of Internet access for both humans and devices, we are now in the situation where the new norm is not 100k but 100m+ of users that can reach your service point.
It's time for some serious upgrade of skills for solution architects.
But where to start from?
Some clever people out there wrote some clever books based on their experience. Not everyone can be part of Netflix or Amazon development teams where the real scalability action is happening. But we can learn from people that are part of such teams.
Here I want to recommend you 4 books and one online tutorial that I found extremely useful. If you belong to the new wave of millennial or vanguard architects, you should read them!
A great overview of microservices architecture coming from the first hand experience.
You can find lots of details about an ecosystem of tools and techniques that need to be understood in order to apply
The author took a pragmatic but possibly risky approach. Besides explaining all the concepts, he recommended some of the tools to be used in orchestrating and registering services such as Zookeeper, Consul, Swagger etc. This approach is very valuable to us who need to build microservice-based architectures as it gives us starting point to go from. If new & better tools come along, and they always do, they can put an expiration timestamp on the book. But there is enough timeless material in this book to make it the true Bible of microservices.
If you are not patient enough to go through 280 pages of Building Microservices, you can look at Jonas Boner's view of microservices world in just 50 pages.
It's a great introduction to the microservices concepts. Plus the PDF version is free to download!
Jonas is also the author of the Reactive Manifesto. In this book he is applying elements of the manifesto to the microservices, which are actually fitting very nicely. When building scalable distributed systems, you must take into consideration responsiveness, resiliency, elasticity and message-based communication.
No matter if you are building a monolithic or a modular system, there are certain things you should know about scalability rules.
Going from no scalability to infinite scalability is an art that takes you down the paths of X axis (scale out),
Z axis (split similar things) and Y axis (split different things). This book is all about that, how to reach infinite scalability.
Again, if you are really impatient then go for the shorter verion of their book, called Scalability Rules. There you'll find a nice summary of 50 things to keep in mind when designing your next system.
This is where the rubber hits the road. New wave of architects will probably be deploying their apps somewhere in the cloud. AWS has a lot to offer! What used to be just a simple queuing or a simple storage service is now an extensive list of services that can manage almost anything you throw at them. AWS knowledge goes well hand in hand with the previous microservices-related books. AWS Lambda and API Gateway is where your microservices on Amazon can come to life. AWS is offering you lots of auto scalling options out of the box, but still don't dismiss "The Art of Scalability" book just yet. Learn the scalability theory and then let the AWS do the practice for you.
One more resource is worth mentioning. Chris Richardson did a great 7-part series tutorial on designing microservices with lots of practical tips. Definitely worth reading!
Of course there are many more books out there that belong to the essential reading of a solution architect. Time is limited and not everything can be read. I believe these resources I mentioned above can quickly bring you up to speed with the new and exciting way of designing software systems.