A microservice is an encapsulation of closely related functional capabilities within a domain set which should be available, secured, persisted, mutated, and maintained autonomously and atomically.
As I see it, microservices are the evolution of service oriented architecture (SOA) and domain driven design (DDD) concepts.
Autonomous
To be autonomous, means that a microservice requires no dependencies outwardly, or inward from outside dependents, to be available, secured, persisted, mutated, and maintained; However, a microservice can and will likely have dependencies and dependents in order to eventually fulfill its functional responsibilities.
Atomic
Perhaps the most overlooked, misunderstood, and important concept of a microservice is the atomic behavior required. When delivering / deploying a change to a microservice, all changes should be deployed successfully and turn on at once, or none at all. This behavior ensures integrity of data, security, and logic as mutation occurs.
