The Architecture of Open Source applications [0]. I suggest also to check, but they are more specific, Enterprise Integration Patterns [1]. Building Big Data systems, Data Intensive applications [2], [3].
The best way to learn is practice - open source project or lending an appropriate job.<p>[0] <a href="http://aosabook.org/en/index.html" rel="nofollow">http://aosabook.org/en/index.html</a><p>[1] <a href="http://martinfowler.com/books/eip.html" rel="nofollow">http://martinfowler.com/books/eip.html</a><p>[2] <a href="http://www.manning.com/marz/" rel="nofollow">http://www.manning.com/marz/</a><p>[3] <a href="http://shop.oreilly.com/product/0636920032175.do" rel="nofollow">http://shop.oreilly.com/product/0636920032175.do</a>
You might be interested in <i>Concepts, Techniques and Models of Computer Programming</i> by Peter Van Roy and Seif Haridi (<a href="http://www.amazon.com/Concepts-Techniques-Models-Computer-Programming/dp/0262220695" rel="nofollow">http://www.amazon.com/Concepts-Techniques-Models-Computer-Pr...</a>). It presents an overview of different programming models, and expounds on the right way to approach problems with these different models. I found the chapters on concurrency useful myself.<p>While not a book, an alternative strategy that might be helpful would be to explore some projects like TorqueBox (Ruby) or Immutant (Clojure) that pull together a lot of different solutions (web server, application server, messaging, caching, transactions and scheduling) into a suite.
One of the best books on architecture: <a href="http://www.amazon.com/Domain-Driven-Design-Tackling-Complexity-Software/dp/0321125215" rel="nofollow">http://www.amazon.com/Domain-Driven-Design-Tackling-Complexi...</a>