Mikroservis mimari ile uçtan uca yazılım geliştirme sürecinde performans optimizasyonu incelemeleri ve bulut bilişim
Performance optimization analysis in the end-to-end software development process with microservice architecture and cloud computing
Yazar: YASİN GÜLGÖR
Danışman: DR. ÖĞR. ÜYESİ SUZAN ÜRETEN
İSTANBUL BEYKENT ÜNİVERSİTESİ / Lisansüstü Eğitim Enstitüsü / Bilgisayar Mühendisliği Ana Bilim Dalı / Bilgisayar Mühendisliği Bilim Dalı
Derece: Yüksek Lisans, 2023
Konu: Bilgisayar Mühendisliği Bilimleri-Bilgisayar ve Kontrol = Computer Engineering and Computer Science and Control

Özet:
Bir yazılım uygulamasının ürün halini alması, problemin belirlenmesinden sistem ihtiyaçlarının tespitine, mimarisel yaklaşımın kararlaştırılmasından kullanılacak uygun teknolojinin seçimine, geliştirme aşamasından son kullanıcı için gerekli istemci donanım ve yazılımının belirlenmesine kadar oldukça maliyet ve efor gerektiren uzun ve zorlu bir süreçtir. Tüm bu süreçlerin sonunda ürün olarak piyasaya sürülen yazılım uygulamasının göstermiş olduğu performans ve kalite ne kadar yüksek ise kullanımı da o kadar kolay ve hızlı olmaktadır.
Mimarisel yaklaşımın kararlaştırılması aşamasında karşımıza çıkan mikroservis mimari bir uygulamanın tek bir büyük kod tabanı ile çalışması prensibine dayanan geleneksel monolitik mimarinin ortaya çıkardığı sorunlara çözüm olarak doğmuştur. Tek bir kod tabanında çalışan uygulamaların herhangi bir noktasında yapılan değişiklik, uygulama geneline etki edebilmektedir ve bir sorunla karşılaşıldığında tüm uygulanın yeniden başlatılması zorunluluğu doğabilmektedir. Bu nedenle büyük ölçekli uygulamaların geliştirilmesi, bakımı ve ölçeklendirilmesi mikroservis mimariye kıyasla çok daha zor olmaktadır. Mikroservis mimaride uygulama işlevleri küçük, bağımsız hizmetlere bölünür. Her hizmet tek başına çalışabilir ve diğer hizmetlere uyumlu olarak tasarlanır. Bu yaklaşım uygulamanın daha modüler hale gelmesini, daha kolay ölçeklenebilir olmasını ve her küçük, bağımsız hizmetin farklı programlama dilleri ile geliştirilebilmesine olanak sağlar. Mikroservis mimaride her hizmetin farklı amaç ve probleme uygun yazılım dili ile tasarlanabilir olması, özellikle pek çok farklı gereksinimi bir arada bulunduran büyük ölçekli uygulamalarda geleneksel monolitik mimariye karşı büyük avantaj sağlamaktadır. Bununla birlikte mikroservis mimari birçok hizmetin bir arada çalıştırılmasını gerektirdiğinden hizmetlerin birbiri ile iletişimi, güvenlik, veri yönetimi ve test gibi zorlukları da barındırır. Mimarinin başarıya ulaşması ancak iyi bir planlama ve doğru araçların kullanılması ile mümkündür. Başarılı bir yazılım geliştirme süreci için problemin belirlenmesi ve mimarisel tasarımın kararlaştırılması sonrası kodlama yöntemleri, test edilebilirlik, kaynak kod yönetimi, verimli algoritma kullanımı, güvenlik, donanım ve yazılım uyumluluğu, kaynak kullanımı ve ölçeklendirilebilirlik gibi faktörlerin dikkatle yönetilmesi gerekmektedir. Bu çalışmanın amacı büyük ölçekli sistemlerin vazgeçilmezi olan mikroservis mimari yaklaşımı ile geliştirilen uygulamaların, gereksinimlerin belirlenmesinden, istemci üzerinde son kullanıcıya hizmet verebilecek ürün aşamasına kadar olan süreçte, uygulamanın performans ve kalitesini etkileyebilecek unsurları tespit etmek, iyileştirmek ve optimum düzeyde bir uygulama geliştirmektir.
 Yazılım geliştirme sürecinde uygulamaların sanallaştırma, paketleme ve dağıtım aşamasında Docker, dağıtıma hazır hale gelen uygulama paketlerinin yönetimi aşamasında da Kubernetes teknolojileri kullanılarak, başarılı bir yazılım geliştirme sürecinde performansa etkileri analiz edilmiştir. Yapılan çalışmanın son bölümünde bilgi teknolojileri dünyasında son yıllarda büyük bir önem kazanan Bulut Bilişim teknolojileri ele alınmış, başarılı bir yazılım geliştirme süreci için verimliliği ve faydaları incelenmiştir.

Abstract:
The process of developing a software application into a product is a long and difficult process that requires a lot of cost and effort, from identifying the problem to determining the system requirements, from deciding the architectural approach to selecting the appropriate technology to be used, from the development stage to determining the required client hardware and software for the end user. The performance and quality of the software application released as a product in the market at the end of all these processes determine how easy and fast it is to use.
During the decision-making stage of the architectural approach, microservices architecture emerged as a solution to the problems posed by the traditional monolithic architecture, which is based on the principle of an application running on a single large codebase. Any changes made at any stage in applications running on a single codebase can affect the entire application, and when a problem occurs, the entire application may need to be restarted. Therefore, developing, maintaining, and scaling large-scale applications is much more challenging compared to microservices architecture. In the microservices architecture, application functionalities are divided into small, independent services. Each service can work autonomously and is designed to be compatible with other services. This approach allows the application to become more modular, easier to scale, and enables each small, independent service to be developed by using different programming languages. The ability to design each service with a different software language suitable for different purposes and problems provides a significant advantage over the traditional monolithic architecture, especially for large-scale applications that encompass multiple different requirements. However, microservices architecture also brings challenges such as communication between services, security, data management, and testing, as it requires running multiple services together. The success of the architecture can only be achieved through careful planning and the use of appropriate tools. For a successful software development process, after identifying the problem and determining the architectural design, factors such as coding methods, testability, source code management, efficient algorithm usage, security, hardware and software compatibility, resource utilization, and scalability need to be carefully managed. The aim of this study is to determine the factors that may affect the performance and quality of the application, from the determination of the requirements of the applications developed with the microservice architectural approach, which is essential for large-scale systems, to the product stage that can serve the end user on the client, to improve it and to develop an application at an optimum level. 
In the software development process, the effects on performance have been analyzed using Docker in the virtualization, packaging, and deployment stages, and Kubernetes technologies in the management stage of application packages ready for deployment. In the last section of the thesis, Cloud Computing technologies, which have gained significant impact in the IT world in recent years, have been addressed, and their efficiency and benefits have been examined for a successful software development process.