  The microservice architectural style has gained much attention from both
academia and industry recently as a novel way to design, develop, and deploy
cloud-native applications. This concept encourages the decomposition of a
monolith into multiple independently deployable units. A typical
microservices-based application is formed of two service types: functional
services, which provide the core business logic, and infrastructure services,
which provide essential functionalities for a microservices ecosystem. To
improve developers' productivity, many software frameworks have been developed
to provide those reusable infrastructure services, allowing programmers to
focus on implementing microservices in arbitrary ways. In this work, we made
use of four open source frameworks to develop a cloud-based application in
order to compare and evaluate their usability and practicability. While all
selected frameworks promote asynchronous microservice design in general, there
are differences in the ways each implements services. This leads to
interoperability issues, such as message topic naming convention. Additionally,
a key finding is the long startup times of JVM-based services that might reduce
application's resiliency and portability. Some other advantages come directly
from the programming language, such as the ability of Go to generate native
binary executables, which results in very small and compact Docker images (up
to 78\% smaller compared to other languages).
