1. ULUSAL BULUT BİLİŞİM ve BÜYÜK VERİ
SEMPOZYUMU B3S’17 19-20 EKİM 2017 Antalya / TÜRKİYE
1 of 28
Downloaded 12 times
More Related Content
Sinema Seans Bilgi ve Rezervasyon Sisteminin Mikro Servis Yaklaşımıyla Geliştirilmesi
1. 1
SİNEMA SEANS BİLGİ VE REZERVASYON
SİSTEMİNİN MİKRO SERVİS YAKLAŞIMIYLA
GELİŞTİRİLMESİ
Tolga KAPROL
tolgakaprol@tr.net
TRnet Bilgi ve İletişim Hizmetleri A.Ş.
TÜBİTAK
2. 2
Anahtar Kelimeler
1. Mikro Servis
2. Ölçekleme
3. DevOps
4. Bilgisayar Mimarisi
5. Güvenlik
6. Servis Amaçlı Mimari
TÜBİTAK
3. 3
MİKRO SERVİS NEDİR?
• Mikro servis yaklaşımıyla geliştirilmiş yazılımlar Amazon,
LinkedIn, Netflix gibi küresel oyuncularda olduğu kadar
Türkiye’de de Gitti Gidiyor gibi büyük çapta trafik karşılayan
İnternet portallarında kullanılmaktadır.
• Bu geliştirme metodolojisi büyük, karmaşık ve yatay olarak
büyütülebilir uygulamaları küçük, bağımsız ve karşılıklı
haberleşme içinde bulunan geliştirme dilinden bağımsız
programlama arayüzleri ile birbirine bağlamayı
hedeflemektedir.
TÜBİTAK
4. 4
MİKRO SERVİS VE DOCKER DÜNYASI
Mikro servis yaklaşımı ve bu yaklaşımla geliştirilen
uygulamaların konteyner içinde çalıştırılması bulut bilişim
açısından devrimsel bir gelişmedir. Özellikle konteyner bazlı
sanallaştırma yaklaşımları hipervizörlere yüksek performanslı
bir alternatif oluşturmuştur.
TÜBİTAK
5. 5
MİKRO SERVİS VE DOCKER DÜNYASI
Docker, konteyner temelli olan sanallaştırma yaklaşımlarından
birini sunan çözümdür. Yapılan performans araştırmalarında
bu çözümün işlemci, bellek ve I/O üzerinde çok az etkide
bulunduğu tespit edilmiştir. Bu yüzden de Docker kendisini
“hafif sıklet sanallaştırma platformu” olarak tanıtmaktadır.
TÜBİTAK
6. 6
MİKRO SERVİS UYGULAMASININ GENEL TASARIMI
• Bu çalışma kapsamında gerçeklenen SSBRS uygulaması; sinema
salonları, bu salonlardaki film seansları, gösterim tarihleri ve film
detaylarının paylaşıldığı aynı zamanda seanslarla ilgili rezervasyon
yapılabilen bir mikro servis mimarisine sahip bir web uygulamasıdır.
• SSBRS, Python 3 ile geliştirilmiş veritabanı olarak MongoDB
kullanılmıştır. MongoDB bağlantısı için Mongo Engine adında
Python için geliştirilmiş Object Data Mapper(ODM) kullanılmıştır.
• Uygulamadaki her bir iş bileşeni ayrı mikro servis olarak planlanmış
diğer servislerden bağımsız olarak çalışabilmesi sağlanmıştır.
TÜBİTAK
7. 7
MİKRO SERVİS UYGULAMASININ GENEL
TASARIMI
• Mikro servisler arası haberleşme isteklerinin tasarımı
uygulama geliştirilmeden önce Swagger 2.0 YAML
formatında tasarlanmıştır.
• Swagger formatında HTTP REST haberleşme yönetimini
gerçekleştiren tüm gerekli bileşenler formatta belirtilen
koşullarla tanımlanabilmektedir.
TÜBİTAK
8. 8
Swagger’da belirtilen parametreler uçbirimin uç adresinin
URL formatında ifadesi, REST servisini çalıştığı baz adres
gibi temel teknik kriterlerin yanı sıra REST üzerindeki her
bir HTTP isteğinin parametreleri, her isteğin kabul ettiği ve
cevap olarak döndüğü veri yapıları gibi tüm teknik detaylar
bu dosyada tanım olarak yer almaktadır.
MİKRO SERVİS UYGULAMASININ GENEL
TASARIMI
TÜBİTAK
9. 9
TÜBİTAK
Swagger, server side proje geliştirme sırasında yazılan endpointleri
kulanacak farklı clientlar olması durumunda api de bulunan end
pointlerin kullanımını request response örnekleri içeren dökümanlar
yazmak için kullanılır.
10. 10
TÜBİTAK
Projdeki mikro servislerin Swagger API dokümantasyonu ile hem
makine hem insan tarafından okunabilir hale getirilmesi sağlanmıştır.
Uygulamanın kaynak kodu içerisindeki ilgili controllerların sahip
olduğu HTTP istek metodları da aşağıda görülebilmektedir.
13. 13
TÜBİTAK
İlgili fonksiyonlar ve sahip oldukları metodlar swagger tarafından
generate edilmiş ve geliştirici tarafından ek açıklamalar yapılmasına
olanak sağlamıştır.
15. 15
MİKRO SERVİS UYGULAMASININ GENEL
TASARIMI
Tüm mikro servisler önünde son kullanıcı için web
uygulaması çalışacaktır. Bu uygulama ilgili mikro servislerden
gerekli sorgulamaları yaparak ön yüzde kullanıcılara
sunacaktır. Bu açıdan mikro servis uygulaması n-katmanlı bir
mimari özelliği göstermektedir. Mikro servisleri farklılaştıran
en tipik özelliklerinden biri orta katmandaki mikro servislerin
tek bir bütün olarak değil ayrı ayrı olarak tanımlanmasıdır.
TÜBİTAK
16. 16
Python programlama dili kullanılarak geliştirilmiş mikro
servisleri basit HTTP web servisleri olarak
çalıştırılabilmektedir. Uygulama için minimalistik bir Linux
dağıtımı olan Alpine Linux kullanılmıştır. Resmi Docker
imajı 5 MB olan Alpine imajı kullanarak uygulamanın
kurulum, başlatılma ve disk üzerinde kapladığı alanın
azaltılması sağlanmıştır.
UYGULAMANIN ÇALIŞTIRILMASI
TÜBİTAK
17. 17
• Uygulama geliştirme aşamasında da geliştirme ortamı olarak
bu imajlar üzerinde çalışan Python 3 yorumlayıcısı
kullanılmıştır.
• NoSQL veritabanı için resmi MongoDB Docker imajı
kullanılmıştır.
• Uygulamanın geneli beş mikro servis, bir web uygulama ve
bir veritabanı sunucusu olarak toplam yedi ayrı konteyner
olarak çalışmaktadır.
UYGULAMANIN ÇALIŞTIRILMASI
TÜBİTAK
18. 18
Uygulama Docker ve Docker-compose kurulu herhangi bir
linux kutusunda docker-compose up -d komutu ile
çalıştırılabilmektedir. Karmaşık ve bir çok adımdan oluşan
kurulum yönergeleri her seferinde yeniden tekrarlanabilen ve
ev sahibi sistemin kurulumundan bağımsız olarak
çalışabilecek duruma getirilebilmektedir. Bu durum
uygulamanın taşınabilirliği konusunda sistem yöneticilerine
önemli bir avantaj getirmektedir.
UYGULAMANIN ÇALIŞTIRILMASI
TÜBİTAK
19. 19
BULGULAR VE PERFORMANS TESTİ
• Uygulama geliştirilme aşamasından önce hazırlanan Swagger
YAML dosyası sayesinde servisin dokümantasyonu geliştirme
öncesinde tamamlanmıştır.
• Mikro servis mimarisi uygulamanın bileşenlerini net bir şekilde
birbirinden ayırmıştır. Uygulamanın cevap vereceği istekler ve
cevap formatı öneceden belirlendiği için uygulamanın oldukça iyi
tanımlanmış olduğu söylenebilir. Uygulama geliştirme sürecine
herhangi bir geliştiricinin dahil olması oldukça kolaylaşmıştır.
Bu durum literatürde de sıklıkla bahsedilen bir olgudur.
• İhtiyaç duyulduğunda ilgili herhangi bir mikro servisin yeni baştan
yazılması, yeni bir programlama diline aktarılması mümkündür.
• Uygulamanın minimalistik bir yapıda hazırlanmış olması sistemin
hızlıca geliştirme ortamında çalıştırılabilmesine olanak sağlamıştır.
Geliştirme ortamında yapılan geliştirmelerin bir dakikadan kısa bir
sürede yeni bir Docker imajı oluşturularak çalıştırılması
sağlanmıştır.
TÜBİTAK
20. • Geliştirme, test ve gerçek ortamda yayına alma işlemlerinin
birer komuta indirgenebildiği görülmüştür, böylece bu
yaklaşımın sürekli birleştirme ve sürekli yayınlama
operasyonları için de kolaylık sağladığı tespit edilmiştir.
• Uygulamaların yayına alınmasının otomasyonsuz
zorlaştığı görülmüştür. Monolitik uygulamalarda bir
uygulamanın yayına alınması yeterli iken, uygulamanın
karmaşıklığına göre kurulumun zorlaştığı tespit edilmiştir.
Bu zorluk oranı aşağıdaki matematiksel ifade ile
gösterilebilir:
BULGULAR VE PERFORMANS TESTİ
TÜBİTAK
21. 21
KZ = MSS / MUS
Mikro Servis Sayısının Kurulum Zorluğunu Arttırması
BULGULAR VE PERFORMANS TESTİ
TÜBİTAK
22. 22
• SSBRS’deki her bir mikro servis fonksiyonel testi tasarlanan
sistemin kalitesini ölçek için gerçekleştirilmiştir. Performans
testi sonuçları testin gerçeklendiği sisteme, sistemin
kullanım alışkanlıklarına göre değişebilmektedir.
• Uygulamanın performansını ölçümleyebilmek için
sistemdeki kompleks senaryolardan biri olan salon arama
fonksiyonu kullanılmıştır.
• Performans testi Amazon EC2 Container Service, Amazon
SNS/SQS ve NoSQL veritabanı kullanılarak
gerçeklenmiştir.
MİKROSERVİS PERFORMANS TESTİ
TÜBİTAK
23. 23
TEST İÇİN KULLANILAN ARAÇLAR VE
AÇIKLAMALARI
Aracın Adı Açıklaması
Apache JMeter Java tabanlı fonksiyonel davranışları test için kullanılan ve ölçümleme yapan uygulama
influxDb Açık Kaynaklı Zaman Serisi Veritabanı
Grafana Açık Kaynaklı Metrik Analiz ve Görselleştirme Aracı
Cloud Watch Amazon Web Servis Üzerinde Çalışan Servisler için Oluşturulmuş İzleme Servisi
Apache JMeter Java tabanlı fonksiyonel davranışları test için kullanılan ve ölçümleme yapan uygulama
influxDb Açık Kaynaklı Zaman Serisi Veritabanı
MİKROSERVİS PERFORMANS TESTİ
Performans testi çok farklı alanlardaki
parametreleri ölçüm yapmaya olanak
sağlamaktadır. Bu testler, yük testi ve stres testi gibi
TÜBİTAK
24. 24
SONUÇ
• Bu çalışma kapsamında literatürde yer alan mikro servis
yaklaşımları incelenmiş ve SSBRS geliştirilmiştir. SSBRS’te her
bir farklı işlev farklı mikro servisler tarafından işlenebilecek
şekilde uygulama geliştirilmesi tamamlanmıştır.
• SSBRS’in, mikro servis mimarisinin yanı sıra konteyner
teknolojisi içinde çalışıyor olması, yazılım geliştirme sürecinden
kurulum, yönetim gibi aşamalarda alışılagelmiş çözümlere göre
hissedilir kolaylık getirmiştir.
TÜBİTAK
25. 25
SONUÇ
• Literatür araştırmasında da mikro servis uygulamalarının büyük
çaplı internet projelerinde hızla büyüdüğü bununla paralel
otomatik ölçeklendirme ve konteyner gibi kavramların da
beraberinde büyüdüğü ortaya çıkmıştır. Ülkemizde de anlık
binlerce işlemin gerçekleştiği özellikle elektronik ticaret
sistemlerinde de bu yaklaşımın önem kazandığı ve hızla monolitik
uygulamalardan mikro servislere geçiş yapıldığı görülmüştür.
TÜBİTAK
26. 26
KAYNAKLAR
1.Internet: Fulton III, S. (2015), “What led amazon to its own microservices architecture.” URL:
http://www.webcitation.org/query?url=https%3A%2F%2Fthenewstack.io%2Fled-amazon-microservices-architecture%2F&date=2017-07-09 Son Erişim
Tarihi: 09.07.2017.
2.Gucer, V. and Narain, S. (2015). Creating Applications in Bluemix Using the Microservices Approach, ABD: IBM Redbooks.
3.İnternet: Netflix (2017). Netflix Conductor. URL:
http://www.webcitation.org/query?url=https%3A%2F%2Fgithub.com%2FNetflix%2Fconductor&date=2017-07-09 , Son Erişim Tarihi 09.07.2017
4.İnternet: Dayıbaşı, O. (2017), Gitti Gidiyor’ da DevOps Süreçleri Nasıl İşletiliyor? URL:
http://www.webcitation.org/query?url=https%3A%2F%2Fmedium.com%2Fcloud-and-servers%2Fgitti-gidiyor-da-devops-
s%25C3%25BCre%25C3%25A7leri-nas%25C4%25B1l-i%25CC%2587%25C5%259Fletiliyor-ebee292a7545&date=2017-07-09 , Son Erişim Tarihi:
09.07.2017
5.İnternet: M. Fowler and J. Lewis. (2014) Microservices,
hhttp://www.webcitation.org/query?url=http%3A%2F%2Fmartinfowler.com%2Farticles%2Fmicroservices.html&date=2017-07-09 , Son Erişim Tarihi
09.07.2017
6.İnternet: Docker Inc., Docker (2017) http://www.webcitation.org/query?url=https%3A%2F%2Fdocker.com+&date=2017-07-09 Son Erişim Tarihi:
09.07.2017
7.Villari, M., Fazio, M., (2016, December), Osmotic Computing: A New Paradigm for Edge/Cloud Integration, IEEE Cloud Computing, pp. 76-83.
8.Stubbs, J, Moreira, W. and Dooley, R.. (2015) Distributed Systems of Microservices Using Docker and Serfnode. Science Gateways (IWSG), 2015 7th
International Workshop on. IEEE
9.Newman, S. (2015) Building Microservices. ABD: O’Reilly and Associates.
10.Felter, W., Ferreira, A., Rajamony, R., and Rubio, J., (2014) An Updated Performance Comparison of Virtual Machines and Linux Containers, ABD:
IBM Research Division, Austin Research Laboratory, Tech. Rep.
11.Fehling, C., Leymann, F., Retter, R., Schupeck, W., and Arbitter, P. (2014) Cloud Computing Patterns, ABD: Springer
12.Clark, J. K., (2016), Microservices, SOA, and APIs: Friends or Enemies?, ABD: IBM developerWorks
13.Casap, N. J . R., (2016) Microservices 101, Bolivia: Jalasoft
14.İnternet: Eventuate. (2016) Event-driven microservices.,
http://www.webcitation.org/query?url=http%3A%2F%2Feventuate.io%2Fwhyeventdriven.html&date=2017-07-09, Son Erişim Tarihi: 09.07.2017
15.Clark, J. K., (2015), Microservices in Integration Architecture, MuCon 2015, Sy 14
16.Issarny, V., Georgantas and N., Hachem (2011), Service-oriented Middleware for the Future Internet: State of the Art and Research Directions, Brezilya:
Brazilian Computer Society
17.Sun Y., (2013), A Low-Delay, Lightweight Publish/Subscribe Architecture for Delay-Sensitive IOT Services, 2013 IEEE 20th International Conference
on Web Services
18.Lamport, L., (1978) The Implementation of Reliable Distributed Multiprocess Systems, ABD: Massachusets Computer Associates
19.Tilkov, S. (2012). Breaking the Monolith, QCon London 2012
20.Dragoni, N. (2017), Microservices: Yesterday, Today, and Tomorrow, ABD: Cornell University
21.Li, H., (2006), CiteSeerx: an architecture and web service design for an academic document search engine. Proceedings of the 15th international
conference on World Wide Web. ACM
22.Villamizar, M, (2015) Evaluating the Monolithic and the Microservice Architecture Pattern to Deploy Web Applications in the Cloud. Computing
Colombian Conference (10CCC), 2015 10th. IEEE.
TÜBİTAK
27. 27
26.Kecskemeti, G, Marosi, A, and Kertesz A. (2016) The ENTICE Approach to Decompose Monolithic Services into
Microservices. High Performance Computing & Simulation (HPCS), 2016 International Conference on IEEE.
27.Ramparany, F., (2014) Handling Smart Environment Devices, Data and Services at the Semantic Level with the FI-
WARE Core Platform. Big Data, 2014 IEEE International Conference on. IEEE.
28.Martin, R C. (2002) Agile Software Development: Principles, Patterns, and Practices. ABD: Prentice Hall.
29.Wampler, D. (2007) Aspect-oriented Design Principles: Lessons from Object-oriented Design, Proceedings of the 2007
AOSD conference.
30.Sametinger, J. (1997) Software Engineering with Reusable Components. ABD: Springer Science & Business Media.
31.Nelson, B. J.(1981) Remote Procedure Call. ABD: Carnegie-Mellon University Department of Computing Sciences.
32.McCamant, S. and Ernst, M. (2003) Predicting Problems Caused by Component Upgrades. Vol. 28. No. 5.
33.Kephart, J. O. and Chess, D. (2003) The Vision of Autonomic Computing. Computer 36.1 41-50.
34.Varanasi, B. and Belida S. (2015) Documenting Rest Services. ABD: Spring REST. Apress, 91-104.
35.Balalaie, A., Heydarnoori, A. and Jamshidi P.(2015) Microservices Migration Patterns. Sharif University of Technology,
Iran
36.Vresk, T. and Čavrak, I. (2016) Architecture of an Interoperable IoT Platform Based on Microservices. Information and
Communication Technology, Electronics and Microelectronics (MIPRO), 2016 39th International Convention on. IEEE.
37.Daya, S. (2016) Microservices from Theory to Practice: Creating Applications in IBM Bluemix Using the Microservices
Approach. ABD: IBM Redbooks,
38.İnternet: Alpine Linux Development Team (2017) Alpine Linux, URL:
http://www.webcitation.org/query?url=https%3A%2F%2Falpinelinux.org&date=2017-07-09, Son Erişim Tarihi: 09.07.2017
39.İnternet: Docker Inc (2017) Alpine Linux Docker Image, URL:
http://www.webcitation.org/query?url=https%3A%2F%2Falpinelinux.org&date=2017-07-09, Son Erişim Tarihi: 09.07.2017
40.İnternet: Docker Inc (2017), Alpine Linux Python 3 Docker Image, URL:
http://www.webcitation.org/query?url=https%3A%2F%2Fhub.docker.com%2F_%2Fpython%2F&date=2017-07-09, Son
Erişim Tarihi: 09.07.2017
41.İnternet: Docker Inc (2017), MongoDB Docker Image, URL:
http://www.webcitation.org/query?url=https%3A%2F%2Fhub.docker.com%2F_%2Fmongo%2F&date=2017-07-09, Son
Erişim Tarihi: 09.07.2017
42.İnternet: Docker Inc. (2017) Install Docker. URL:
http://www.webcitation.org/query?url=https%3A%2F%2Fdocs.docker.com%2Fengine%2Finstallation%2F&date=2017-07-
09, Son Erişim Tarihi: 09.07.2017
43.İnternet: Docker Inc. (2017) Docker Compose. URL:
TÜBİTAK