Many of the articles and talks about microservices architecture leave out an important concept. They mention the influencers to microservices, but leave out one of the major influencers of microservices architecture: the mobile web and mobile native applications. One of the major influences to microservices architecture is the mobile web and the proliferation of native mobile applications. You can't create a service in an efficient manner with frameworks that were written for monolithic web applications. The frameworks themselves were developed to develop monolithic websites.
Additionally, in this day and age, web clients are more often than not, thick web clients they do not need a full web framework running on the server or a full enterprise application stack. The common denominator for traditional web applications, thick web applications, mobile web applications, and native mobile applications is JSON with HTTP calls and JSON over WebSockets.
Java EE and Spring grew up to support monolithic web applications or three tiered architectures loosely based on early incantations of the J2EE blueprints. There are efforts to adapt them to be more reactive and more microservices driven and these efforts have provided fruit, but the reality is they bring along with them a lot of legacy baggage to support a more monolithic web application development style. There is a lot of lipstick on that pig.
Frameworks like Akka, QBit, Vert.x, Ratpack, Node.js, Restlets are more streamlined to support the communication/service backends of mobile application development which is more of a reactive microservices architecture approach to development focused on WebSocket, and HTTP calls with JSON and not on a classic three-tiered web application now named a monolith by the microservices architecture crowd (a term I do not like).
The main influencers of reactive microservices architecture is mobile applications (native and mobile web), richer web application, cloud computing, NoSQL movement, continuous X (integration and deployment), and the backlash to traditional eat-the-world SOA.
The so-called Monolithic applications are not really needed when the focus of the business logic has been moved forward to the client. We are going back to more of a first round Client/Server world, with thicker clients, and this is a major reason for microservices which is often missed. In other words, Mobile and thick Web Applications are the biggest driver of microservices architecture. This is not to say there are not other influencers, but you can't leave out the elephant in the room.
Performance matters again when you are developing a mobile application and you are paying for the CPU hour in the cloud. Performance matters again when you write an app that might need to scale to 100 million or more users.
Microservices is less of a radical approach and more of getting back to basics. Data should live near the business logic that works on that data. Sure data should be safe, but that can be accomplished by replication and backup. This is how things were done back in the day, and this is the direction we are moving back to now. There is operational data that lives in the service (small data), and there is big data which we use to mine trends which are then used to tweak our microservices.
OOP is all about keeping the data and logic together in a cohesive manner. We are leaving the world of stored procedure style sort-of OOP and moving back to traditional OOP. Domain driven development should be the norm again. Like it was when we started with OOP. Microservices is back to basics. Mobile web is the key driver for microservices.