of such serverless zone could enable having several
distinct patterns that vary in degree of management
related to specific aspects still perceived as serverless-
style hosting, which in its turn allows flexibly select-
ing component hosting options as well as verifying
whether a given application’s topology conforms to
the serverless architectural style.
Another interesting point worth emphasizing is
how the introduced hosting patterns can be com-
posed with patterns from other pattern languages, e.g.,
microservice patterns or enterprise integration pat-
terns. For example, a well-known API Gateway pat-
tern (Richardson, 2018) can be implemented differ-
ently based on which hosting pattern is chosen. As
a result, when deciding on application’s components
one can think about a composition of patterns, e.g.,
an API Gateway combined with the Serverful Hosting
pattern can be implemented by installing Kong Gate-
way on a Linux-based VM, whereas the API Gateway
combined with the Serverless Hosting pattern can be
implemented by simply using AWS API Gateway ser-
vice. Similar composition reasoning can be applied
when deciding on other pattern compositions too, e.g.,
implementation of a Message Filter pattern (Hohpe
and Woolf, 2004) can be different depending on
which hosting pattern is chosen. However, when
speaking about concrete solutions, the more provider-
managed a hosting pattern is, the more it is coupled
with available provider offerings, essentially, raising
a need for having a knowledge base defining con-
crete solutions for hosting patterns (and pattern com-
positions) to facilitate the overall decision-making
process. For example, the Provider-managed Con-
tainer Hosting Pattern is mainly related to provider-
managed container services such as AWS Fargate,
making it less pervasive than other patterns, at least
in the context of currently-available cloud offerings.
6 RELATED WORK
Cloud-related patterns have been widely studied.
Fehling et al. (Fehling et al., 2014a) introduce cloud
computing patterns supporting developers in building
cloud-native applications, viz., applications built for
running in cloud and structured to fully exploit its po-
tentials. Other examples in this direction (Erl et al.,
2015; Pahl et al., 2018; Davis, 2019) also provide pat-
terns for structuring cloud-native applications. Hohpe
and Woolf (Hohpe and Woolf, 2004) introduce en-
terprise integration patterns (EIPs), which are also
used to structure cloud-native applications (Yussupov
et al., 2020). The above works differ from ours as
they propose patterns for designing cloud applica-
tions, whereas our patterns focus on their hosting.
Similar considerations apply to patterns intro-
duced in the domain of serverless computing. Taibi
et al. (Taibi et al., 2020) and Zambrano (Zambrano,
2018) elicit patterns for architecting serverless appli-
cations. Hong et al. (Hong et al., 2018) present pat-
terns for improve the security of cloud-hosted ser-
vices, based on serverless computing. Hence, these
works also focus on designing cloud applications,
whereas we focus on how to host them.
Jamshidi et al. (Jamshidi et al., 2015) instead pro-
pose a catalog of patterns for migrating on-premise
applications to the cloud. The catalog of migration
patterns is refined in the subsequent work (Jamshidi
et al., 2017), which also proposes a concrete method
for enacting pattern-based migration of on-premise
application to the cloud. These patterns (Jamshidi
et al., 2015; Jamshidi et al., 2017) differ from our
hosting patterns, as they focus on adapting existing
service-based applications to allow migrating them to
the cloud, rather than on how to actually deploy such
applications. They can, however, be used in conjunc-
tion with the hosting patterns we propose: developers
may first exploit migration patterns to enable deploy-
ing applications in the cloud, and then implement our
patterns for hosting the application components.
To the best of our knowledge, the only exist-
ing work organizing knowledge on application de-
ployment into patterns focuses on deployment model
types. Endres et al. (Endres et al., 2017) distinguish
two possible approaches for specifying the deploy-
ment of an application, viz., declarative vs. impera-
tive application deployment. Intuitively, the declar-
ative deployment consists in specifying the desired
state for an application, by relying on a deployment
engine to automatically determining and enacting the
sequence of operations for enforcing such state. The
imperative deployment instead consists in explicitly
specifying the sequence of operations to enact for de-
ploying an applications. These patterns are, hence,
complementary to our hosting patterns: developers
can use our patterns to derive the required deployment
steps for a given component, whose actual specifica-
tion can then be either declarative or imperative, de-
pending on the developers’ needs.
Another important aspect related to patterns is
how to find suitable patterns and traverse to related so-
lutions in different interconnected pattern languages.
Falkenthal et al. (Falkenthal and Leymann, 2017) in-
troduce the concept of solution languages which facil-
itate the navigation from the level of patterns to con-
crete solutions, e.g., implementation of a pattern us-
ing specific technologies. Leymann et al. (Leymann
and Barzen, 2020) propose an approach and tool
From Serverful to Serverless: A Spectrum of Patterns for Hosting Application Components
277