SlideShare a Scribd company logo
1 of 33
Microservices Architecture
ddemirel / 28.02.2018
Nedir?
Bir uygulama geliştirme mimarisidir.
Birbirleriyle gevşek bağ ile bağlı uygulama parçacıklarının oluşturduğu mimari olarak
da tanımlanabilir.
Microservices mimarisi büyük, karmaşık uygulamaların sürekli delivery/deploy
yapılabilmesini mümkün kılar. Ayrıca şirketin ileriye dönük teknoloji gelişimini
kolaylıkla yapılabilmesine imkan sunar.
Microservislerin mimarisel bazı problemleri vardır. Microservices mimarisini anlamak
ve uygulamak için çeşitli patternler vardır. Bunun amacı vardır:
1- Uygulamanız için microservices mimarisinin uygun olup olmadığına karar
vermenize yardımcı olmak
2- Microservices mimarisinin başarıyla kullanımanıza yardımcı olmak
Microservisin Amacı/Özellikleri
En temel amaç geliştirmeyi hızlandırmaktır. Bunu sağlayan en önemli unsur ise
continuous delivery/deployment’tır.
Microservices başarılı/hızlı uygulama geliştirmeyi iki şekilde sağlar;
1- Testi basitleştirip ve servislerin bağımsız olarak konumlanmasını sağlayarak
2- Takım organizasyonunu, her biri bir veya daha fazla hizmetten sorumlu küçük,
özerk takımlar şeklinde yapılandırarak sağlar.
Bu otomatik olarak sağlanan bir şey değildir. Bunu sağlamadaki en büyük unsur
uygulamayı servislere dikkatli bir şekilde ayırmaktır.
Microservisin Amacı/Özellikleri
Bir servis küçük bir takımın geliştirip test edebileceği kadar küçük olmalıdır. Bunu
sağlamak için «Single Responsibility Principle»(Tek Sorululuk Prensibi) bize yol
gösterici olabilir.
Uygulama aynı zamanda yeni eklenen ya da değişikliğe sebep olan gereksinimlerin
çoğunu tek bir servisi etkileyecek şekilde parçalanmalıdır. Bunun nedeni birden çok
ekip üzerinde koordinasyon gerektiren birden fazla servisi etkileyen değişikliklerin
geliştirmeyi yavaşlatmasıdır.
Patternler
• Decomposition – Ayrıştırma
• Deployment
• Cross Cutting Concerns
• Communication Style
• External API
• Service Discovery
• Reliability – Güvenilirlik
• Data Management
• Security
• Testing
• Observability
• UI
Decomposition – Ayrıştırma
• Decompose by business capability
• İş sorumluluklarına göre ayırma. Birçok organizasyonda bu konu multi-level
hiyerarşi ile ayrılmıştır. Örneğin ; Ürün/Hizmet geliştirme, Ürün/Hizmet teslimi,
Talep Yönetimi vb.
• Decompose by subdomain
• Domain-Driven-Design yaklaşımı ile ayrıştırma yapılır. DDD uygulamayı
domain olarak varsayar. Bir domain birden fazla alt domainlerden oluşur. Her
bir sub domain uygulamanın modüllerini ifade eder. Alt domainler aşağıdaki
yaklaşımla tasarlanır;
• Core : İşin en değerli ve en önemli bölümlerini ifade eder
• Supporting : Uygulamanın ana konularıyla alakalı süreçlerdir.
• Generic : İşe özgü olmayan ve temel olması gereken konulardır
Deployment
• İhtiyaçlar
• Servisler birçok farklı dil,framework ve framework versiyonu ile yazılmıştır
• Servisler verim ve kullanılabilirlik açısından birden fazla servisten oluşur
• Servisler birbirinden bağımsız olarak deploy edilebilmeli ve scale edilebilmeli
• Servis instansları diğerlerinden izole olmalı
• Bir servisi hızlıca build edip yükleyebilmelisiniz
• Bir hizmetin kullanabileceği sistem kaynalarını sınırlayabilmelisiniz
• Her servis instansını izleyebilmelisiniz
• Deploymentı güvenli yapabilmelisiniz
• Uygulamayı olabildiğince düşük maaliyetle deploy edebilmelisiniz
• Yöntemler
• Multiple service instances per host(physical or virtual)
• Service instance per host
• Service instance per VM
• Service instance per Container
• Serverless deployment
• Service deployment platform
Cross Cutting Concerns
• Örnekler:
• Externalized configuration
• Logging
• Health checks
• Metrics
• Distrubuted tracing
• Bunlar gibi generic CCC’lerin yanında uygulamaya özel CCC konuları da çıkabilir.
Örneğin RDBMS kullanan bir uygulamada connection pool kullanmak gibi.
• Bu konuların uygulamanın tasarım aşamasında oturtulması gereklidir ileriye dönük
refactoring yapmak maliyetli olabilir.
• Bunlara bağlı olarak:
• Yeni bir microservices oluşturmak hızlı ve kolay olmalıdır
• Yeni microsevice CCC’leri kapsayacak şekilde olmalıdır
Communication Style
• Servisler istemcilerden gelen istekleri yerine getirmelidir. Hatta bu istekleri yerine
getirirken diğer servisler ile çalışması gerekebilir. Bu durumda süreçler arası iletişim
yapmaları gerekmektedir.
• Remote procedure invocation
• REST,gRPC,Apache Thrift
• Messaging
• Apache Kafka, RabbitMQ
• Domain-specific protocol
• Email : SMTP, IMAP
• Media Streaming : RTMP, HLS, HDS
External API - API Gateway / Backend for Front-End
• Faydaları
• Encapsulate internal services
• Load Balancing
• Authentication
• Monitoring
• Caching
• Örneğin microservices mimarisi ile online store geliştiriyoruz ve ürün detay sayfası
implemente ediyoruz. Bu sayfanın iki farklı arayüz ile hizmet vermesi isteniyor:
• HTML5/Javascript based web page
• Rest API ile çalışan Native Android ve Iphone client
• Ayrıca uygulama 3.parti uygulamaların kullanması için ürün detaylarını Rest API ile
servis etmelidir.
• Ürün detay sayfasında birçok bilgiye ihtiyaç vardır:
• Temel bilgiler : Başlık, yazar, fiyat
• Satış geçmişi
• Stok durumu
• Satın alma opsiyonları : hard copy/e-book
• Genellikle bu kitapla birlikte satın alınan ürünler
• Kitap yorumları
• Satıcılar
External API - API Gateway / Backend for Front-End
• Microservices mimarisi kullanıldığı için ürün bilgileri birden fazla hizmete
yayılmıştır. Örneğin;
• Product Info Service - basic information about the product such as title, author
• Pricing Service - product price
• Order service - purchase history for product
• Inventory service - product availability
• Review service - customer reviews
• Sonuç olarak ürün ayrıntılarını gösteren uygulama bu servislerin tümünden bilgi
almak zorundadır.
External API - API Gateway / Backend for Front-End
• Microservices mimarisi kullanan bir uygulamanın clientleri servislere nasıl erişir?
• Farklı clientler farklı datalara ihtiyaçları vardır. Örneğin masaüstü bilgisayardan
açılan ürün detayları sayfasında mobil uygulamadan daha çok veri vardır.
• Farklı clientler için farklı network performans problemleri oluşabilir.
• Servis instanslarının sayıları dinamik olarak değişebilir(host+port)
• Servislerin ayrıştırılması zamanla değişebilir ve bunun clientlerdan bağımsız
olması gerekir
• Servisler farklı iletişim protokolleri kullanabilir
External API - API Gateway / Backend for Front-End
• Bu durumlar için clientlerin apilere erişirken tek giriş noktasını bilmesi gerekir.
Gateway istekleri iki şekilde karşılayabilir; proxy ya da route
External API - API Gateway / Backend for Front-End
• Gateway’ler her cliente ortak bir apı sunmak yerine cliente uygun apileri sunabilir.
• Gatewayler ayrıca güvenlik katmanı olarak da kullanılabilir.
External API - API Gateway / Backend for Front-End
• Clientler servislerin nasıl bölümlendiğiniden izole eder
• Clientlerin servis adreslerini bilmesini gerekliliğini ortadan kaldırır
• Her istemci için uygun API’yi sağlar
• Complexitiyi artırabilir, doğru yönetilmesi gereken bir modeldir
• Request/response süreleri artabilir. Ama bu süre ihmal edilebilecek kadar azdır.
Service Discovery
• Client-side discovery
• Server-side discovery
• Service registry
• Self registration
• 3rd party registration
Reliability
• Circuit Breaker
• Servislerde endpointlerde oluşacak hataların sistemi tamamen kilitlemesini
önlemek için kullanılmaktadır.
• Eğer servis enpointinde belirli sayıda hata gerçekleşirse o endopointe gelen
requestleri belirli süre engelliyoruz, o süre sonunda tekrar kontrol ediliyor eğer
hata düzelmişse normal akışına devam ediyor.
• Bu sayede endpointin kullandığı sistem kaynaklarını gereksiz kullanmayı ve
sistem içerisindeki cascade hatalar oluşmasının önüne geçiyoruz
• Retry : Genelde farklı sistemlere bağlı işlem yaparken bazı durumlarda geçici
hatalar oluşabilir. Bu hataları elemine etmek için retry mekanizması
kullanılarbilir. Örneğin ilk hatadan sonra 3 defa daha deneme yaparak 3.nü n
sonunda başarılı cevap alabiliriz.
• Fallback : Retry sürecini işlettik ve hala hata alıyorsak ve daha önce bir alternatif
yöntem (vazgeçip başka bir yol izlemek) stratejisi belirlediysek bunu devreye
sokabiliriz.
Reliability
Data Management
• Servisler serbestçe geliştirilebilecek ve ölçeklendirilebilecek yapıda olmalıdır. Bunun
için servisler gevşek bir şekilde (loosely coupled) olmalıdır.
• Bazı işlemler birden fazla serviste veri değişikliğini zorunlu kılmaktadır.
• Bazı işlemler birden fazla servisin sahip olduğu veriyi sorgulamalıdır.
• Bazı işlemler birden fazla servisin sahip olduğu veriyi sorgulayıp birleştiriyor
olabilir.
• Veritabanları bazen çoğaltılıp ölçeklenebilir.
• Farklı servislerin farklı depolama gereksinimleri olur. Bazı servisler RDBMS, bazıları
NoSQL, bazıları ise GraphDB’ye ihtiyaç duyabilir.
Data Management
• Solutions
• Database per Service
• Shared database
• Saga
• API Composition
• CQRS
• Event sourcing
• Transaction log tailing
• Database triggers
• Application events
Data Management - SAGA
• SAGA – Distrubuted Transaction
• Her servisin local transactionalarının bir sırasıdır.
• Her servis kendi verisini güncller ve bir sonraki işlemi tetikleyecek message
veya event yayınlar.
• Herhangi bir servisin işlemi başarısız olursa SAGA önceki işlemleri geri alacak
bir dizi telafi işlemi gerçekleştirir.
• Order Service bekleme durumunda
bir sipariş oluşturur
• Customer Service sipariş için kredi
reserv eder
• Order Service reservasyon işlemi
sonucuna göre siparişi onaylar ya
da iptal eder
• CreateOrder saga içinde OrderCreated eventi
yayınlanır, CustomerService CreditReserved ya
da CreditLimitExceeded eventi yayınlar.
Data Management – API Composition
• Birden farklı servisten gelen dataları barındıran sorgulara ihtiyaç olduğunda bunu
en efektif olarak yapmak için API Composer pattern uygulanabilir.
Data Management – CQRS
• CQRS – Command Query Responsibility Segregation
• Uygulama command-side ve query-side olmak üzere ikiye ayrılır. Command-
side insert,update vb. işleri yapar. Query-side ise commandlar sonucu oluşan
eventler ile sorgu datalarını günceller.
Data Management – Event Sourcing
• Temel prensip olarak doğrudan tablolarda entity olarak verileri saklamak yerine
domainler üzerinde gerçekleşen olayları saklamaktır. Yani sipariş oluşturma
sonucunda sipariş için bir tabloya kaydetmek yerine sipariş oluşturuldu eventini
sipariş bilgisi ile birlikte saklar.
• Bu model özellikle dağıtık sistemlerde veri tutarlılığını saklamak için önemli bir
çözümdür. Verinin eventlerini replay ettiğinizde hangi aşamada ne durumda
olduğunu her zaman elde edebilirsiniz.
Security
• Access Token
Testing
• Service Component Test
• Uçtan uca servisleri test etmek zor ve yavaştır. Bunun için servisleri yalıtılmış
olarak kendi başlarına test etmek gerekir.
• Bu kolay ve hızlıdır.
• Bu bazı durumlarda testlerin development ortamında başarılı fakat production
ortamında hatalı olmasına sebep olabilir.
Testing
• Service Integration Contract Test
• Bu patternde her servis kendini kullanan servislerin ona sağladığı test
paketlerini uygulayarak entegrasyon testini sağlamış olur.
Observability
• Log aggregation
• Application metrics
• Audit logging
• Distributed tracing
• Exception tracking
• Health check API
• Log deployments and changes
Observability – Log aggregation
Observability – Distributed tracking
Microservices with Spring Cloud
• Microservices uygulamalarında ihtiyaç duyulan önceki slaytlarda belirttiğimiz
gereksinimleri Spring Boot uygulamalarında kolayca kullanabilmeyi sağlayan
kütüphanedir.
Auth
Admin
Dashboard
Spring Cloud Demo
Kaynak
• http://microservices.io
• https://cloud.spring.io

More Related Content

What's hot

Platform Engineering: Manage your infrastructure using Kubernetes and Crossplane
Platform Engineering: Manage your infrastructure using Kubernetes and CrossplanePlatform Engineering: Manage your infrastructure using Kubernetes and Crossplane
Platform Engineering: Manage your infrastructure using Kubernetes and CrossplaneAhmed AbouZaid
 
Event driven autoscaling with KEDA
Event driven autoscaling with KEDAEvent driven autoscaling with KEDA
Event driven autoscaling with KEDANilesh Gule
 
Helm - Application deployment management for Kubernetes
Helm - Application deployment management for KubernetesHelm - Application deployment management for Kubernetes
Helm - Application deployment management for KubernetesAlexei Ledenev
 
Kubernetes #1 intro
Kubernetes #1   introKubernetes #1   intro
Kubernetes #1 introTerry Cho
 
The Evolution of Distributed Systems on Kubernetes
The Evolution of Distributed Systems on KubernetesThe Evolution of Distributed Systems on Kubernetes
The Evolution of Distributed Systems on KubernetesBilgin Ibryam
 
Anton Grishko "Multi-cloud with Google Anthos, Kubernetes and Istio. How to s...
Anton Grishko "Multi-cloud with Google Anthos, Kubernetes and Istio. How to s...Anton Grishko "Multi-cloud with Google Anthos, Kubernetes and Istio. How to s...
Anton Grishko "Multi-cloud with Google Anthos, Kubernetes and Istio. How to s...Fwdays
 
GitOps 101 Presentation.pdf
GitOps 101 Presentation.pdfGitOps 101 Presentation.pdf
GitOps 101 Presentation.pdfssuser31375f
 
Microservices Docker Kubernetes Istio Kanban DevOps SRE
Microservices Docker Kubernetes Istio Kanban DevOps SREMicroservices Docker Kubernetes Istio Kanban DevOps SRE
Microservices Docker Kubernetes Istio Kanban DevOps SREAraf Karsh Hamid
 
Monolith to Microservices - O’Reilly Oscon
Monolith to Microservices - O’Reilly OsconMonolith to Microservices - O’Reilly Oscon
Monolith to Microservices - O’Reilly OsconChristopher Grant
 
Monoliths and Microservices
Monoliths and Microservices Monoliths and Microservices
Monoliths and Microservices Bozhidar Bozhanov
 
DevOps Transition Strategies
DevOps Transition StrategiesDevOps Transition Strategies
DevOps Transition StrategiesAlec Lazarescu
 
Understanding MicroSERVICE Architecture with Java & Spring Boot
Understanding MicroSERVICE Architecture with Java & Spring BootUnderstanding MicroSERVICE Architecture with Java & Spring Boot
Understanding MicroSERVICE Architecture with Java & Spring BootKashif Ali Siddiqui
 
Creating MuleSoft API Template Project Using Maven Archetype
Creating MuleSoft API Template Project Using Maven ArchetypeCreating MuleSoft API Template Project Using Maven Archetype
Creating MuleSoft API Template Project Using Maven ArchetypeManish Kumar Yadav
 
컨테이너 (PaaS) 환경으로의 애플리케이션 전환 방법과 고려사항
컨테이너 (PaaS) 환경으로의 애플리케이션 전환 방법과 고려사항컨테이너 (PaaS) 환경으로의 애플리케이션 전환 방법과 고려사항
컨테이너 (PaaS) 환경으로의 애플리케이션 전환 방법과 고려사항Opennaru, inc.
 
DEVOPS 에 대한 전반적인 소개 및 자동화툴 소개
DEVOPS 에 대한 전반적인 소개 및 자동화툴 소개DEVOPS 에 대한 전반적인 소개 및 자동화툴 소개
DEVOPS 에 대한 전반적인 소개 및 자동화툴 소개태준 문
 

What's hot (20)

Monitoring with Prometheus
Monitoring with PrometheusMonitoring with Prometheus
Monitoring with Prometheus
 
Platform Engineering: Manage your infrastructure using Kubernetes and Crossplane
Platform Engineering: Manage your infrastructure using Kubernetes and CrossplanePlatform Engineering: Manage your infrastructure using Kubernetes and Crossplane
Platform Engineering: Manage your infrastructure using Kubernetes and Crossplane
 
Git flow
Git flowGit flow
Git flow
 
Event driven autoscaling with KEDA
Event driven autoscaling with KEDAEvent driven autoscaling with KEDA
Event driven autoscaling with KEDA
 
Introduction to Kubernetes
Introduction to KubernetesIntroduction to Kubernetes
Introduction to Kubernetes
 
Helm - Application deployment management for Kubernetes
Helm - Application deployment management for KubernetesHelm - Application deployment management for Kubernetes
Helm - Application deployment management for Kubernetes
 
Kubernetes #1 intro
Kubernetes #1   introKubernetes #1   intro
Kubernetes #1 intro
 
The Evolution of Distributed Systems on Kubernetes
The Evolution of Distributed Systems on KubernetesThe Evolution of Distributed Systems on Kubernetes
The Evolution of Distributed Systems on Kubernetes
 
Anton Grishko "Multi-cloud with Google Anthos, Kubernetes and Istio. How to s...
Anton Grishko "Multi-cloud with Google Anthos, Kubernetes and Istio. How to s...Anton Grishko "Multi-cloud with Google Anthos, Kubernetes and Istio. How to s...
Anton Grishko "Multi-cloud with Google Anthos, Kubernetes and Istio. How to s...
 
Microservices: an introduction
Microservices: an introductionMicroservices: an introduction
Microservices: an introduction
 
GitOps 101 Presentation.pdf
GitOps 101 Presentation.pdfGitOps 101 Presentation.pdf
GitOps 101 Presentation.pdf
 
Microservices Docker Kubernetes Istio Kanban DevOps SRE
Microservices Docker Kubernetes Istio Kanban DevOps SREMicroservices Docker Kubernetes Istio Kanban DevOps SRE
Microservices Docker Kubernetes Istio Kanban DevOps SRE
 
Monolith to Microservices - O’Reilly Oscon
Monolith to Microservices - O’Reilly OsconMonolith to Microservices - O’Reilly Oscon
Monolith to Microservices - O’Reilly Oscon
 
Monoliths and Microservices
Monoliths and Microservices Monoliths and Microservices
Monoliths and Microservices
 
DevOps Transition Strategies
DevOps Transition StrategiesDevOps Transition Strategies
DevOps Transition Strategies
 
Understanding MicroSERVICE Architecture with Java & Spring Boot
Understanding MicroSERVICE Architecture with Java & Spring BootUnderstanding MicroSERVICE Architecture with Java & Spring Boot
Understanding MicroSERVICE Architecture with Java & Spring Boot
 
Creating MuleSoft API Template Project Using Maven Archetype
Creating MuleSoft API Template Project Using Maven ArchetypeCreating MuleSoft API Template Project Using Maven Archetype
Creating MuleSoft API Template Project Using Maven Archetype
 
Kubernetes Introduction
Kubernetes IntroductionKubernetes Introduction
Kubernetes Introduction
 
컨테이너 (PaaS) 환경으로의 애플리케이션 전환 방법과 고려사항
컨테이너 (PaaS) 환경으로의 애플리케이션 전환 방법과 고려사항컨테이너 (PaaS) 환경으로의 애플리케이션 전환 방법과 고려사항
컨테이너 (PaaS) 환경으로의 애플리케이션 전환 방법과 고려사항
 
DEVOPS 에 대한 전반적인 소개 및 자동화툴 소개
DEVOPS 에 대한 전반적인 소개 및 자동화툴 소개DEVOPS 에 대한 전반적인 소개 및 자동화툴 소개
DEVOPS 에 대한 전반적인 소개 및 자동화툴 소개
 

Similar to Microservices Architecture

İleri Seviye T-SQL Programlama - Chapter 19
İleri Seviye T-SQL Programlama - Chapter 19İleri Seviye T-SQL Programlama - Chapter 19
İleri Seviye T-SQL Programlama - Chapter 19Cihan Özhan
 
Docker - Ankara Cloud Meetup
Docker - Ankara Cloud Meetup Docker - Ankara Cloud Meetup
Docker - Ankara Cloud Meetup Mustafa AKIN
 
Sinema Seans Bilgi ve Rezervasyon Sisteminin Mikro Servis Yaklaşımıyla Gelişt...
Sinema Seans Bilgi ve Rezervasyon Sisteminin Mikro Servis Yaklaşımıyla Gelişt...Sinema Seans Bilgi ve Rezervasyon Sisteminin Mikro Servis Yaklaşımıyla Gelişt...
Sinema Seans Bilgi ve Rezervasyon Sisteminin Mikro Servis Yaklaşımıyla Gelişt...Tolga Kaprol
 
Buluta Ilk Adım Analizi
Buluta Ilk Adım AnaliziBuluta Ilk Adım Analizi
Buluta Ilk Adım AnaliziGokhan Boranalp
 
Docker Nedir, Ne İşe Yarar, Nasıl Kullanılmalıdır?
Docker Nedir, Ne İşe Yarar, Nasıl Kullanılmalıdır? Docker Nedir, Ne İşe Yarar, Nasıl Kullanılmalıdır?
Docker Nedir, Ne İşe Yarar, Nasıl Kullanılmalıdır? Mustafa AKIN
 
Microsoft Azure ITPro - Microsoft Azure'a Giriş- Bölüm 1
Microsoft Azure ITPro - Microsoft Azure'a Giriş- Bölüm 1Microsoft Azure ITPro - Microsoft Azure'a Giriş- Bölüm 1
Microsoft Azure ITPro - Microsoft Azure'a Giriş- Bölüm 1Önder Değer
 
agem_intern_report
agem_intern_reportagem_intern_report
agem_intern_reportMeliz Ersoy
 
Ağ i̇şleti̇m si̇stemleri̇ne örnekler
Ağ i̇şleti̇m si̇stemleri̇ne örneklerAğ i̇şleti̇m si̇stemleri̇ne örnekler
Ağ i̇şleti̇m si̇stemleri̇ne örneklerAlonelaz
 
Azure Cloud Engineer - Bölüm 2
Azure Cloud Engineer - Bölüm 2Azure Cloud Engineer - Bölüm 2
Azure Cloud Engineer - Bölüm 2Önder Değer
 
Bulutbilisim sunum
Bulutbilisim sunumBulutbilisim sunum
Bulutbilisim sunumugurbudak
 
Web servisi güvenliği
Web servisi güvenliğiWeb servisi güvenliği
Web servisi güvenliğiEmrah Gürcan
 
Solarwinds SAM ve Patch Manager
Solarwinds SAM ve Patch ManagerSolarwinds SAM ve Patch Manager
Solarwinds SAM ve Patch ManagerKavi International
 
System Center 2012 R2 ile Gelen Yenilikler
System Center 2012 R2 ile Gelen YeniliklerSystem Center 2012 R2 ile Gelen Yenilikler
System Center 2012 R2 ile Gelen YeniliklerMustafa
 
sunum_Service Oriented Architecture (SOA)_off2007
sunum_Service Oriented Architecture (SOA)_off2007sunum_Service Oriented Architecture (SOA)_off2007
sunum_Service Oriented Architecture (SOA)_off2007Efe Eyüboğlu
 
Microsoft Azure Sanal Ağ Temelleri
Microsoft Azure Sanal Ağ TemelleriMicrosoft Azure Sanal Ağ Temelleri
Microsoft Azure Sanal Ağ TemelleriMustafa
 
Microsoft Azure Sql Server HADR
Microsoft Azure Sql Server HADRMicrosoft Azure Sql Server HADR
Microsoft Azure Sql Server HADRÖnder Değer
 

Similar to Microservices Architecture (20)

12factor apps
12factor apps12factor apps
12factor apps
 
İleri Seviye T-SQL Programlama - Chapter 19
İleri Seviye T-SQL Programlama - Chapter 19İleri Seviye T-SQL Programlama - Chapter 19
İleri Seviye T-SQL Programlama - Chapter 19
 
Devnot - Dev Summit 2018
Devnot - Dev Summit 2018Devnot - Dev Summit 2018
Devnot - Dev Summit 2018
 
Docker - Ankara Cloud Meetup
Docker - Ankara Cloud Meetup Docker - Ankara Cloud Meetup
Docker - Ankara Cloud Meetup
 
Sinema Seans Bilgi ve Rezervasyon Sisteminin Mikro Servis Yaklaşımıyla Gelişt...
Sinema Seans Bilgi ve Rezervasyon Sisteminin Mikro Servis Yaklaşımıyla Gelişt...Sinema Seans Bilgi ve Rezervasyon Sisteminin Mikro Servis Yaklaşımıyla Gelişt...
Sinema Seans Bilgi ve Rezervasyon Sisteminin Mikro Servis Yaklaşımıyla Gelişt...
 
Buluta Ilk Adım Analizi
Buluta Ilk Adım AnaliziBuluta Ilk Adım Analizi
Buluta Ilk Adım Analizi
 
Docker Nedir, Ne İşe Yarar, Nasıl Kullanılmalıdır?
Docker Nedir, Ne İşe Yarar, Nasıl Kullanılmalıdır? Docker Nedir, Ne İşe Yarar, Nasıl Kullanılmalıdır?
Docker Nedir, Ne İşe Yarar, Nasıl Kullanılmalıdır?
 
Linkle mimari
Linkle mimariLinkle mimari
Linkle mimari
 
Microsoft Azure ITPro - Microsoft Azure'a Giriş- Bölüm 1
Microsoft Azure ITPro - Microsoft Azure'a Giriş- Bölüm 1Microsoft Azure ITPro - Microsoft Azure'a Giriş- Bölüm 1
Microsoft Azure ITPro - Microsoft Azure'a Giriş- Bölüm 1
 
agem_intern_report
agem_intern_reportagem_intern_report
agem_intern_report
 
Sukru_TRSUG2016
Sukru_TRSUG2016Sukru_TRSUG2016
Sukru_TRSUG2016
 
Ağ i̇şleti̇m si̇stemleri̇ne örnekler
Ağ i̇şleti̇m si̇stemleri̇ne örneklerAğ i̇şleti̇m si̇stemleri̇ne örnekler
Ağ i̇şleti̇m si̇stemleri̇ne örnekler
 
Azure Cloud Engineer - Bölüm 2
Azure Cloud Engineer - Bölüm 2Azure Cloud Engineer - Bölüm 2
Azure Cloud Engineer - Bölüm 2
 
Bulutbilisim sunum
Bulutbilisim sunumBulutbilisim sunum
Bulutbilisim sunum
 
Web servisi güvenliği
Web servisi güvenliğiWeb servisi güvenliği
Web servisi güvenliği
 
Solarwinds SAM ve Patch Manager
Solarwinds SAM ve Patch ManagerSolarwinds SAM ve Patch Manager
Solarwinds SAM ve Patch Manager
 
System Center 2012 R2 ile Gelen Yenilikler
System Center 2012 R2 ile Gelen YeniliklerSystem Center 2012 R2 ile Gelen Yenilikler
System Center 2012 R2 ile Gelen Yenilikler
 
sunum_Service Oriented Architecture (SOA)_off2007
sunum_Service Oriented Architecture (SOA)_off2007sunum_Service Oriented Architecture (SOA)_off2007
sunum_Service Oriented Architecture (SOA)_off2007
 
Microsoft Azure Sanal Ağ Temelleri
Microsoft Azure Sanal Ağ TemelleriMicrosoft Azure Sanal Ağ Temelleri
Microsoft Azure Sanal Ağ Temelleri
 
Microsoft Azure Sql Server HADR
Microsoft Azure Sql Server HADRMicrosoft Azure Sql Server HADR
Microsoft Azure Sql Server HADR
 

More from Dilaver Demirel

More from Dilaver Demirel (14)

Git - Code Versiyon Yönetim Sistemi
Git - Code Versiyon Yönetim SistemiGit - Code Versiyon Yönetim Sistemi
Git - Code Versiyon Yönetim Sistemi
 
Unit test
Unit testUnit test
Unit test
 
Software/Yazılım Test
Software/Yazılım TestSoftware/Yazılım Test
Software/Yazılım Test
 
SDLC - Software Development Life Cycle
SDLC - Software Development Life CycleSDLC - Software Development Life Cycle
SDLC - Software Development Life Cycle
 
Yazılım Prensipleri ve Code Review Check List
Yazılım Prensipleri ve Code Review Check ListYazılım Prensipleri ve Code Review Check List
Yazılım Prensipleri ve Code Review Check List
 
Oracle Weblogic Server
Oracle Weblogic ServerOracle Weblogic Server
Oracle Weblogic Server
 
Java Server Faces
Java Server FacesJava Server Faces
Java Server Faces
 
Pentaho BI
Pentaho BIPentaho BI
Pentaho BI
 
JVM ve VisualVm
JVM ve VisualVmJVM ve VisualVm
JVM ve VisualVm
 
Apache Maven
Apache MavenApache Maven
Apache Maven
 
Aspect Oriented Programming
Aspect Oriented ProgrammingAspect Oriented Programming
Aspect Oriented Programming
 
NodeJS ve MongoDB
NodeJS ve MongoDBNodeJS ve MongoDB
NodeJS ve MongoDB
 
NodeJS Nedir
NodeJS NedirNodeJS Nedir
NodeJS Nedir
 
Jpa
JpaJpa
Jpa
 

Microservices Architecture

  • 2. Nedir? Bir uygulama geliştirme mimarisidir. Birbirleriyle gevşek bağ ile bağlı uygulama parçacıklarının oluşturduğu mimari olarak da tanımlanabilir. Microservices mimarisi büyük, karmaşık uygulamaların sürekli delivery/deploy yapılabilmesini mümkün kılar. Ayrıca şirketin ileriye dönük teknoloji gelişimini kolaylıkla yapılabilmesine imkan sunar. Microservislerin mimarisel bazı problemleri vardır. Microservices mimarisini anlamak ve uygulamak için çeşitli patternler vardır. Bunun amacı vardır: 1- Uygulamanız için microservices mimarisinin uygun olup olmadığına karar vermenize yardımcı olmak 2- Microservices mimarisinin başarıyla kullanımanıza yardımcı olmak
  • 3. Microservisin Amacı/Özellikleri En temel amaç geliştirmeyi hızlandırmaktır. Bunu sağlayan en önemli unsur ise continuous delivery/deployment’tır. Microservices başarılı/hızlı uygulama geliştirmeyi iki şekilde sağlar; 1- Testi basitleştirip ve servislerin bağımsız olarak konumlanmasını sağlayarak 2- Takım organizasyonunu, her biri bir veya daha fazla hizmetten sorumlu küçük, özerk takımlar şeklinde yapılandırarak sağlar. Bu otomatik olarak sağlanan bir şey değildir. Bunu sağlamadaki en büyük unsur uygulamayı servislere dikkatli bir şekilde ayırmaktır.
  • 4. Microservisin Amacı/Özellikleri Bir servis küçük bir takımın geliştirip test edebileceği kadar küçük olmalıdır. Bunu sağlamak için «Single Responsibility Principle»(Tek Sorululuk Prensibi) bize yol gösterici olabilir. Uygulama aynı zamanda yeni eklenen ya da değişikliğe sebep olan gereksinimlerin çoğunu tek bir servisi etkileyecek şekilde parçalanmalıdır. Bunun nedeni birden çok ekip üzerinde koordinasyon gerektiren birden fazla servisi etkileyen değişikliklerin geliştirmeyi yavaşlatmasıdır.
  • 5. Patternler • Decomposition – Ayrıştırma • Deployment • Cross Cutting Concerns • Communication Style • External API • Service Discovery • Reliability – Güvenilirlik • Data Management • Security • Testing • Observability • UI
  • 6. Decomposition – Ayrıştırma • Decompose by business capability • İş sorumluluklarına göre ayırma. Birçok organizasyonda bu konu multi-level hiyerarşi ile ayrılmıştır. Örneğin ; Ürün/Hizmet geliştirme, Ürün/Hizmet teslimi, Talep Yönetimi vb. • Decompose by subdomain • Domain-Driven-Design yaklaşımı ile ayrıştırma yapılır. DDD uygulamayı domain olarak varsayar. Bir domain birden fazla alt domainlerden oluşur. Her bir sub domain uygulamanın modüllerini ifade eder. Alt domainler aşağıdaki yaklaşımla tasarlanır; • Core : İşin en değerli ve en önemli bölümlerini ifade eder • Supporting : Uygulamanın ana konularıyla alakalı süreçlerdir. • Generic : İşe özgü olmayan ve temel olması gereken konulardır
  • 7. Deployment • İhtiyaçlar • Servisler birçok farklı dil,framework ve framework versiyonu ile yazılmıştır • Servisler verim ve kullanılabilirlik açısından birden fazla servisten oluşur • Servisler birbirinden bağımsız olarak deploy edilebilmeli ve scale edilebilmeli • Servis instansları diğerlerinden izole olmalı • Bir servisi hızlıca build edip yükleyebilmelisiniz • Bir hizmetin kullanabileceği sistem kaynalarını sınırlayabilmelisiniz • Her servis instansını izleyebilmelisiniz • Deploymentı güvenli yapabilmelisiniz • Uygulamayı olabildiğince düşük maaliyetle deploy edebilmelisiniz • Yöntemler • Multiple service instances per host(physical or virtual) • Service instance per host • Service instance per VM • Service instance per Container • Serverless deployment • Service deployment platform
  • 8. Cross Cutting Concerns • Örnekler: • Externalized configuration • Logging • Health checks • Metrics • Distrubuted tracing • Bunlar gibi generic CCC’lerin yanında uygulamaya özel CCC konuları da çıkabilir. Örneğin RDBMS kullanan bir uygulamada connection pool kullanmak gibi. • Bu konuların uygulamanın tasarım aşamasında oturtulması gereklidir ileriye dönük refactoring yapmak maliyetli olabilir. • Bunlara bağlı olarak: • Yeni bir microservices oluşturmak hızlı ve kolay olmalıdır • Yeni microsevice CCC’leri kapsayacak şekilde olmalıdır
  • 9. Communication Style • Servisler istemcilerden gelen istekleri yerine getirmelidir. Hatta bu istekleri yerine getirirken diğer servisler ile çalışması gerekebilir. Bu durumda süreçler arası iletişim yapmaları gerekmektedir. • Remote procedure invocation • REST,gRPC,Apache Thrift • Messaging • Apache Kafka, RabbitMQ • Domain-specific protocol • Email : SMTP, IMAP • Media Streaming : RTMP, HLS, HDS
  • 10. External API - API Gateway / Backend for Front-End • Faydaları • Encapsulate internal services • Load Balancing • Authentication • Monitoring • Caching • Örneğin microservices mimarisi ile online store geliştiriyoruz ve ürün detay sayfası implemente ediyoruz. Bu sayfanın iki farklı arayüz ile hizmet vermesi isteniyor: • HTML5/Javascript based web page • Rest API ile çalışan Native Android ve Iphone client • Ayrıca uygulama 3.parti uygulamaların kullanması için ürün detaylarını Rest API ile servis etmelidir. • Ürün detay sayfasında birçok bilgiye ihtiyaç vardır: • Temel bilgiler : Başlık, yazar, fiyat • Satış geçmişi • Stok durumu • Satın alma opsiyonları : hard copy/e-book • Genellikle bu kitapla birlikte satın alınan ürünler • Kitap yorumları • Satıcılar
  • 11. External API - API Gateway / Backend for Front-End • Microservices mimarisi kullanıldığı için ürün bilgileri birden fazla hizmete yayılmıştır. Örneğin; • Product Info Service - basic information about the product such as title, author • Pricing Service - product price • Order service - purchase history for product • Inventory service - product availability • Review service - customer reviews • Sonuç olarak ürün ayrıntılarını gösteren uygulama bu servislerin tümünden bilgi almak zorundadır.
  • 12. External API - API Gateway / Backend for Front-End • Microservices mimarisi kullanan bir uygulamanın clientleri servislere nasıl erişir? • Farklı clientler farklı datalara ihtiyaçları vardır. Örneğin masaüstü bilgisayardan açılan ürün detayları sayfasında mobil uygulamadan daha çok veri vardır. • Farklı clientler için farklı network performans problemleri oluşabilir. • Servis instanslarının sayıları dinamik olarak değişebilir(host+port) • Servislerin ayrıştırılması zamanla değişebilir ve bunun clientlerdan bağımsız olması gerekir • Servisler farklı iletişim protokolleri kullanabilir
  • 13. External API - API Gateway / Backend for Front-End • Bu durumlar için clientlerin apilere erişirken tek giriş noktasını bilmesi gerekir. Gateway istekleri iki şekilde karşılayabilir; proxy ya da route
  • 14. External API - API Gateway / Backend for Front-End • Gateway’ler her cliente ortak bir apı sunmak yerine cliente uygun apileri sunabilir. • Gatewayler ayrıca güvenlik katmanı olarak da kullanılabilir.
  • 15. External API - API Gateway / Backend for Front-End • Clientler servislerin nasıl bölümlendiğiniden izole eder • Clientlerin servis adreslerini bilmesini gerekliliğini ortadan kaldırır • Her istemci için uygun API’yi sağlar • Complexitiyi artırabilir, doğru yönetilmesi gereken bir modeldir • Request/response süreleri artabilir. Ama bu süre ihmal edilebilecek kadar azdır.
  • 16. Service Discovery • Client-side discovery • Server-side discovery • Service registry • Self registration • 3rd party registration
  • 17. Reliability • Circuit Breaker • Servislerde endpointlerde oluşacak hataların sistemi tamamen kilitlemesini önlemek için kullanılmaktadır. • Eğer servis enpointinde belirli sayıda hata gerçekleşirse o endopointe gelen requestleri belirli süre engelliyoruz, o süre sonunda tekrar kontrol ediliyor eğer hata düzelmişse normal akışına devam ediyor. • Bu sayede endpointin kullandığı sistem kaynaklarını gereksiz kullanmayı ve sistem içerisindeki cascade hatalar oluşmasının önüne geçiyoruz • Retry : Genelde farklı sistemlere bağlı işlem yaparken bazı durumlarda geçici hatalar oluşabilir. Bu hataları elemine etmek için retry mekanizması kullanılarbilir. Örneğin ilk hatadan sonra 3 defa daha deneme yaparak 3.nü n sonunda başarılı cevap alabiliriz. • Fallback : Retry sürecini işlettik ve hala hata alıyorsak ve daha önce bir alternatif yöntem (vazgeçip başka bir yol izlemek) stratejisi belirlediysek bunu devreye sokabiliriz.
  • 19. Data Management • Servisler serbestçe geliştirilebilecek ve ölçeklendirilebilecek yapıda olmalıdır. Bunun için servisler gevşek bir şekilde (loosely coupled) olmalıdır. • Bazı işlemler birden fazla serviste veri değişikliğini zorunlu kılmaktadır. • Bazı işlemler birden fazla servisin sahip olduğu veriyi sorgulamalıdır. • Bazı işlemler birden fazla servisin sahip olduğu veriyi sorgulayıp birleştiriyor olabilir. • Veritabanları bazen çoğaltılıp ölçeklenebilir. • Farklı servislerin farklı depolama gereksinimleri olur. Bazı servisler RDBMS, bazıları NoSQL, bazıları ise GraphDB’ye ihtiyaç duyabilir.
  • 20. Data Management • Solutions • Database per Service • Shared database • Saga • API Composition • CQRS • Event sourcing • Transaction log tailing • Database triggers • Application events
  • 21. Data Management - SAGA • SAGA – Distrubuted Transaction • Her servisin local transactionalarının bir sırasıdır. • Her servis kendi verisini güncller ve bir sonraki işlemi tetikleyecek message veya event yayınlar. • Herhangi bir servisin işlemi başarısız olursa SAGA önceki işlemleri geri alacak bir dizi telafi işlemi gerçekleştirir. • Order Service bekleme durumunda bir sipariş oluşturur • Customer Service sipariş için kredi reserv eder • Order Service reservasyon işlemi sonucuna göre siparişi onaylar ya da iptal eder • CreateOrder saga içinde OrderCreated eventi yayınlanır, CustomerService CreditReserved ya da CreditLimitExceeded eventi yayınlar.
  • 22. Data Management – API Composition • Birden farklı servisten gelen dataları barındıran sorgulara ihtiyaç olduğunda bunu en efektif olarak yapmak için API Composer pattern uygulanabilir.
  • 23. Data Management – CQRS • CQRS – Command Query Responsibility Segregation • Uygulama command-side ve query-side olmak üzere ikiye ayrılır. Command- side insert,update vb. işleri yapar. Query-side ise commandlar sonucu oluşan eventler ile sorgu datalarını günceller.
  • 24. Data Management – Event Sourcing • Temel prensip olarak doğrudan tablolarda entity olarak verileri saklamak yerine domainler üzerinde gerçekleşen olayları saklamaktır. Yani sipariş oluşturma sonucunda sipariş için bir tabloya kaydetmek yerine sipariş oluşturuldu eventini sipariş bilgisi ile birlikte saklar. • Bu model özellikle dağıtık sistemlerde veri tutarlılığını saklamak için önemli bir çözümdür. Verinin eventlerini replay ettiğinizde hangi aşamada ne durumda olduğunu her zaman elde edebilirsiniz.
  • 26. Testing • Service Component Test • Uçtan uca servisleri test etmek zor ve yavaştır. Bunun için servisleri yalıtılmış olarak kendi başlarına test etmek gerekir. • Bu kolay ve hızlıdır. • Bu bazı durumlarda testlerin development ortamında başarılı fakat production ortamında hatalı olmasına sebep olabilir.
  • 27. Testing • Service Integration Contract Test • Bu patternde her servis kendini kullanan servislerin ona sağladığı test paketlerini uygulayarak entegrasyon testini sağlamış olur.
  • 28. Observability • Log aggregation • Application metrics • Audit logging • Distributed tracing • Exception tracking • Health check API • Log deployments and changes
  • 29. Observability – Log aggregation
  • 31. Microservices with Spring Cloud • Microservices uygulamalarında ihtiyaç duyulan önceki slaytlarda belirttiğimiz gereksinimleri Spring Boot uygulamalarında kolayca kullanabilmeyi sağlayan kütüphanedir. Auth Admin Dashboard