# Challenges and Solution Directions of Microservice Architectures: A Systematic Literature Review
## 2 Microservice Architecture  
Microservices are autonomous services that are smaller and more convenient to work with compared to other architectural styles [6]. The autonomy of the services refers to the ability to change and be deployed independently. Microservices are structured around business logic and can be developed, deployed, tested, and operated independently, are often operated by independent teams. Furthermore, microservices can be written in different programming languages and use different technologies [6].  
MSA consists of crucial building blocks such as main business services, infrastructural services, discovery mechanisms, and communication infrastructure [9]. Each block is isolated from other blocks and communicates with them using a lightweight protocol. Therefore, they are easy to evolve in time with respect to the needs of business or technology.  
Microservices are to some extent considered a natural extension of SOA, which gives importance to autonomous and lightweight services [10]. It extends some points in SOA based on a few principles. First, microservices are organized around business capabilities and this makes it easy to identify service and team boundaries. Second, infrastructure automation plays a critical role for MSA. It is directly related to the continuous delivery and continuous integration pipeline. Developers must always be convinced that the application works properly so automated test and deployment processes must be defined and implemented. Third, MSA allows the system to grow in a natural way. This is achieved by applying iterative and incremental approaches to satisfy business requirements. Thus, applications continuously change and optimize.  
Microservices change the way software is designed from start to finish. Therefore, microservices conform to the evolutionary design in which the business predicts that certain functions may fail in the future. Scalable business models need applications that can be restructured and increased as scenarios evolve. Since every microservice is a small business process and represents a small aspect of business functionality, it is easy to change the workflow [11]. Accordingly, MSA development is the result of an evolutionary process. The process begins with identifying and then implementing microservices. Then, it continues with using DevOps practices and shaping the organization accordingly. The next step is to have a self-service, on-demand, and elastic infrastructure. Following this step, it is important to set up continuous integration and continuous deployment (CI and CD) pipeline with automation. With such an infrastructure, advanced deployment techniques can be set up and the firm becomes ready to use microservices [12].  
MSA should be used in situations where its benefits outweigh its cost. While all functionalities are put into a single process in monolithic applications, each functionality set is placed in a separate service in the MSA. Hence, monolithic applications are scaled by replicating themselves on multiple servers. However, microservices are scaled by distributing across servers and replicating as needed. Microservices are not the best solution in any case [13]. Use cases and conditions should be evaluated well, and decisions should be made--this way, the greatest advantage is obtained from the microservices. In addition, since autonomous services can be deployed independently and benefit from the flexibility of the cloud and the rapid provision of resources, cloud-based platforms can be easily used in MSA development [5; 14].