documented and undocumented design practices and
solutions, and study their effects, including identifi-
cation of several surprising takeaways. As part of this
paper, we have designed and implemented a highly
configurable e-commerce application (an e-shop solu-
tion), which is designed in a way that its architecture
can be easily reconfigured to support thorough evalua-
tion of the impact of various design decisions on mul-
tiple performance related quality attributes (through-
put, response time and scalability). When designing
this application, we paid special attention to the se-
lection of real use cases and realistic architecture de-
sign, being overall as close as possible to a produc-
tion version of such an application. The highly con-
figurable architecture of this application gives us a
unique opportunity to provide comparison of multiple
versions of the same application using microservice
architecture to evaluate and isolate impact of differ-
ent design decisions, which is rarely seen in existing
work. Software architects can benefit from our work
while designing their own applications when facing
the same design decisions. With the help of this work
they shall now be able to make better-informed deci-
sions and choose the right architectural patterns lead-
ing to desired quality of the application, or avoid un-
documented problems caused by chosen architecture
or used PaaS cloud services.
For the purpose of effective benchmark execution,
we also implemented an automated client application
that can reconfigure the deployed application, initial-
ize sample data seeding on the server based on user
requirements, execute any mix of workload, display
key performance metrics and export detailed perfor-
mance counters in JSON format. This application was
used for our benchmarks discussed in this paper.
For the implementation of the sample application,
we have decided to use Microsoft technologies and
cloud services. The application is developed in .NET
framework using Azure Service Fabric (Mic, 2018),
which is an open-source application platform for sim-
plified management and deployment of microservices
that can run in Microsoft Azure cloud, on-premise in-
frastructure and any other cloud infrastructure. This
platform was chosen because of its robustness (Mi-
crosoft uses internally this technology to operate large
scale services in Microsoft Azure, eg. Azure SQL
Database, Cosmos DB and others), and rich platform
services, which simplify microservice development.
On the other hand, the features that we used can be
manually implemented in other frameworks and the
same results can be obtained by hosting small web ap-
plications communicating with each other via REST
APIs, hosted in Docker and orchestrated by Kuber-
netes. Overall our results are generally valid indepen-
dently of the platform as the used patterns are plat-
form independent and can be applied also to differ-
ent cloud provider (Amazon, Google Cloud) offer-
ing container hosting services and managed NoSQL
databases.
Overall, we have evaluated 105 different bench-
mark scenarios using 4 cluster configurations (5, 10,
15, 20 nodes cluster) involving 4 different storage ser-
vices in the PaaS cloud, 2 communication strategies
(synchronous and asynchronous) and 11 design pat-
terns.
The paper is structured as follows. After the dis-
cussion of related work in Section 2, outline of the
background in Section 3, and outline of key architec-
tural decisions that influenced the separation of ser-
vices in Sections 4, Sections 5, 6 and 7 are dedi-
cated to the presentation and evaluation of architec-
tural concerned with service storage, communication
between microservices and application resilience. We
conclude the paper in Section 8.
2 RELATED WORK
When designing microservice architectures, software
architects are currently often relying on known de-
sign patterns and tactics (Gamma et al., 1995; Fowler,
2002), which are however not validated in the con-
text of microservices or PaaS cloud. Alderado et
al. point to an absence of repeatable empirical re-
search on the design and development of microser-
vice applications (Aderaldo et al., 2017). New design
guidelines for microservice architectures are emerg-
ing (Sill, 2016; Wolff, 2016; Nadareishvili et al.,
2016; Newman, 2015), which however do not con-
tain evaluated performance impacts of recommended
patterns on realistic implementations. At the same
time catalogs of design patterns for the design of PaaS
cloud applications are becoming available (Erl et al.,
2013; Wilder, 2012; Homer et al., 2014; Mic, 2017),
but without measured impacts of their combinations
and their use in a context of microservices. Vali-
dations of microservice architecture design patterns
are published by companies that have deployed mi-
croservices (Richardson, 2017; Net, 2015) and want
to share their experience with transition to microser-
vice design but not mentioning PaaS cloud deploy-
ment. Instead they focus on their currently deployed
architecture, its behavior and sometimes related per-
formance characteristics rather than transferable take-
aways. Due to the size of their projects, they cannot
afford to implement multiple variants of their applica-
tion using different design patterns and compare per-
formance of those to isolate the impact of used de-
ICSOFT 2019 - 14th International Conference on Software Technologies
620