📖
Genel Bilgiler
  • Genel
  • Yazılım Teknolojiileri
    • SOLID
    • Mimariler ve Mimari Paternleri
    • MVC, MVP, MVVM
    • Mikroservis Yaklaşımı
    • DDD
    • Nesne Yönelimli Programlama
    • Hangi Programlama Dili Hangi Framework Öğrenilmeli?
    • Programlama Dilleri Üzerine tecrübeler
    • Microsoft .NET Teknolojileri
    • Microsoft .NET CORE 3.x ile Katmanlı Mimari Tasarımı
    • Test
    • Hangi Geliştirme ve Deployment Ortamı (Windows vs Linux)
    • Veri Tabanları ve Veri Tabanı Mimarileri
    • Asysnc/Awake
    • Oyun Geliştirme
      • WebAssembly vs Asm.ts
      • Unity ve Devler Ligi
      • Godot Oyun Motoru
      • Three.js ve Alternetif Javascript 3D Kütüphaneler/Framework' ler
    • Aspect Oriented Programming
  • Sanallaştırma
    • Sanallaştırma (Hypervisor ve Container & Docker)
    • Kubernetes
  • Yazılım Kültürleri
    • DevOps
    • Jenkins
    • SAST, DAST, SCA, Pentest
    • Glusterfs
    • Yazılım Üzerine Tartışmalar/Sohbetler
    • TUBITAK BILGEM YTE
  • Metro/Tren Sinyalizasyonu
  • Yapay Zeka (Artificial Intelligence)
  • Embedded Realtime Linux
  • Süper Bilgisayarlar Neden Süperler
  • Lock Free Tasarım
  • Git ile Çalışmak
  • CPU, APU, PPU, NPU, TPU ...
  • CANBUS
  • MERHABA (HELLO)
Powered by GitBook
On this page
  • Mikroservis
  • Mikroservis Mimari, Domain Driven Design ve Bounded Context
  • Scale Up (Dikey Ölçekleme), Scale Out (Yatay Ölçekleme)
  • MİKROSERVİS SORUNLARI
  • Servis Çeşitleri
  • MİKROSERVİS LOGLAMA ÖRNEK MİMARİ
  • API GATEWAY
  • SERVICE REGISTERATION and DISCOVERY
  • Mikroservis ve Event-Driven Haberleşme Demosu
  • 2020

Was this helpful?

  1. Yazılım Teknolojiileri

Mikroservis Yaklaşımı

PreviousMVC, MVP, MVVMNextDDD

Last updated 5 years ago

Was this helpful?

Mikroservis

Küçük, bağımsız, otonom, diğer mikroservislerle sıkı sıkıya bağımlılığı bulunmayan, tek başına çalışabilen, kendine ait veri tabanı olan, geliştirme sürecinden kuruluma kadar bağımsız olan, yatayda ve dikeyde kendi başına ölçeklenebilen uygulamalara denir.

Martin Fowler, 2013 yılında bir makale ile tanımladığı mimaridir. SOA mimarisinin kurumsallığına farklı bir bakış açısı getirip daha tanecikli, bağımlılıkları azaltan bir mimari kurgulamıştır.

While Microservice is a useful architecture - many, indeed most, situations would do better with a monolith.

Mr Fowler da dediği gibi mikroservisler kullanışlı olsa da bir çok hatta epey çok senaryoda monolitik çözüm daha iyi olacağını belirtiyor.

Don’t start with a monolith when your goal is a microservices architecture

Tubitak BİLGEM YTE tarafından Ocak 2020 de gerçekleştirilen Mikroservis etkinliğinde konunun detaylarına yönelik bilgiler bulabilirsiniz. Anahtar kelimeleri yakalayarak internette araştırdığınız daha geniş bilgiler elde edebilirsiniz. Sunumları da sitelerinde paylaşıyorlar.

Mikroservis mimariler de yapılan iş/işlemler belirten transaction için 2 temel tasarım kalıbı yöntemlerini (Two-Phase Commit ve Saga) anlatan yazılar.

Güzel bir konu başlığı : f(f(f(f(f(f(f(f(f...(f(x)...))))))))) = f(x)

CAP Teoremi, ACID Prensipleri,

Mikroservis mimarisinde geliştirme yapma sürecimizi hızlandırmak için framework kullanmamız gerekir. Böylece hedefimiz olan uygulamamızı geliştirmeye odaklanabiliriz. Python dili için Django framework veya Flask, Java için JSP (Java Server Pages, Servlet kullanır) veya Servlet, Spring Framework veya Spring Boot, C# dili için .NET Core platformları tercih edilebilir. Tabii seçenekler bu kadarla sınırlı değildir. İnternette ayrıntılı bilgiler ve karşılaştırmalar bulabilirsiniz.

Mikroservis Mimari, Domain Driven Design ve Bounded Context

Scale Up (Dikey Ölçekleme), Scale Out (Yatay Ölçekleme)

Scale Up (Dikey Ölçekleme), server donanım kaynaklarınızı arttırmak. Örneğin CPU çekirdek sayısı arttırımı, RAM arttırımı gibi.

Scale Out (Yatay Ölçekleme), sisteminize yeni serverlar eklemek.

Kodunuz mevcut kaynaklara göre kendini scale edebilir.

Array içerisinde arama işleminde seçilen algoritma bile önemlidir. Adım adım, sequential yani O(n) adım olur. Scale etmez. Daha büyük arrayler de binary Search kullanırsın. Daha hızlı olabilir. Hep ortaya bakarak bir eleman aranır. Ama verin sort edilmesi de gerekirse? Veri eklenirken mi yoksa okunurken mi zaman kaybedilmeli? Okumayı mı yoksa Yazmayı mı scale edeceksiniz. Okuma daha fazla gerçekleşiyorsa Binary ve Sorted array olması tercih edebilirsiniz.

Array mi Collection mi kullanmak?

Array ler sabit boyutlu ama collection lar kendini kopyalayarak büyüyebilirler. Başlangıçta 100 eleman ile açılırlarken 100 eleman dolunca 200 elemanlı açar ve kendi eskisini içine kopyalar.

Mikroservis Ortamında Scale Etme

Servisleriniz cache tutuyorsa scale edilebiliniyor mu?

Load balancer bir önceki cookie ile hangi servera gittiklerini bilirler. Bunu siz yapmalısınız Kubernetes yapmaz. Servisiniz request based cache tutuyorsa ve bir önceki requestin nereye gittiğini tutmuyorsanız cache bağımlılığınız veya session bilgilerine bağımlılığınız uygulamanızı scale olmasına engel olacak.

Servislerde cache/session bilgisi tutmuyorum gelen gidiyor şeklinde tasarım yaparsak ama gene de bir yerde cache yapacağız. Mesela Redis ile başka bir yerde tutabiliriz. Bu tür tasarımlarda bottleneck (sıkışma) olacaktır. Tasarımlarınızda bunu nereye koyacağınızı düşünmek zorunda kalacaksınızdır. Redis de sıkışma olacak çok sıkışmasın diye başka Redis ler de koyacaksınız.

Çok fazla thread yaparsanız çok fazla context switch yaparsınız. O nedenle thread spin etmeyi tercih edersiniz.

Veri tabanı nasıl scale ederiz?

Okumayı önemsiyorsanız, Balanced Red tree, Red Black Tree (indexing) kullanarak veri tabanlarını daha iyi scale edebilirsiniz. İndexleyince yeni veri eklendikçe indekslerin güncellenmesi de yazma yükü getirecektir.

MİKROSERVİS SORUNLARI

Mikroservislere geçildiğinde aşağıdaki konular üzerinde de çalışma yapılması gerekir.

  • Service Discovery

  • State Management

  • Service Lifecycle Management

  • Health Reporting

  • Resource Usage Reporting

Servis Çeşitleri

Stateless Services

  • Database' ler gibi harici depolama biriminde kalıcı olarak state saklayarak

  • Mevcuttaki web ve worker role uygulamalar

Stateful Services

  • Replikalar ve local persistence üzerinden state güvenirliğinin sağlanması

  • Algoritmanın kompleksliğinin azaltılması

MİKROSERVİS LOGLAMA ÖRNEK MİMARİ

Sistemin izlenebilirliği de önemli bir konu olduğundan aşağıdaki mimarileri incelemekte fayda var.

"Clientlardan topladıkları logları elkstack sunucumuza yollamakla yükümlü aracımız Beats , toplanan bu logları bir sunucu içinde derleyip üzerinde yapılması gereken bir dönüştürme ve anlam kazandırma işlemini gerçekleştiren aracımız Logstash ,bu logları indexlendirerek aranabilir ve analiz edilebilir hale dönüştüren aracımız Elasticsearch ve tüm bu yapılan detaylı çalışmayı bizlere görselleştiren aracımız Kibana olarak karşımıza çıkmaktadır." şeklinde güzelce özetleyen aşağıdaki yazıyı incelemeniz faydalı olacaktır.

API GATEWAY

Sistemimize dışardan erişen client' ların yapımıza tek noktadan erişmesini sağlayan ve arkadaki karmaşık mimariyi bilmesini gerektirmeyen çok kullanılan servislerdendir. Mikroservisler arasında haberleşmeyi, servislerden toplanan bilgilerin bir araya getirilerek (aggregator) sunumlaştırılması gibi temel işlemlerin yaptırılması için kullanılmaktadır. Ayrıca servislerimize ulaşılabilmesi için api gateway üzerinden authentication (Kimlik Doğrulama) ve authorizationunu (Yetkilendirme) yaparak tek bir noktadan güvenlik kontrolleri yapılmış olunur. Ayrıca, service discovery özelliği sayesinde mikroservislerin lokasyonlarının IP bilgileri vs tespit edilmesini sağlar. Böylece servislerin nerede deploy edildiğinin bir önemi kalmamaktadır.

Konuyla ilgili daha ayrıntı bilgiler için aşağıdaki yazılardan faydalanabilirsiniz.

Kısa ve öz güzel başka konulara da değinen alttaki link ve diğer yazılarını da göz gezdirmeniz faydalı olabilir.

SERVICE REGISTERATION and DISCOVERY

Mikroservis ve Event-Driven Haberleşme Demosu

2020

Innoq kurucularından da aşağıdaki gibi bir kelamda bulunmuş

Stefan Tilkov
LogoMicroservicesmartinfowler.com
LogoMicroservices Guidemartinfowler.com
LogoDon’t start with a monolithmartinfowler.com
LogoMicroservices vs. SOA — Is There Any Difference at All?Medium
LogoBest Practices for Event-Driven Microservice Architecture | HackerNoonhackernoon
LogoBest Practices for Event-Driven Microservice Architecture | HackerNoonhackernoon
LogoGitHub - suadev/turkish-microservice-architecture-book: Open Source Turkish Microservices eBook. Feel free to contribute.GitHub
LogoMicroservice Mimarisinde Haberleşme Teknikleri (RabbitMQ — .Net Core — CAP)Medium
LogoMicroservice Mimarisinde Haberleşme Teknikleri (RabbitMQ — .Net Core — CAP)Medium
LogoMicroservice Mimari’lerde Servisler Arası İletişim Nasıl Olmalı?Medium
LogoMikroServisler arasında bir Gökdoğan — gRPC Nedir ?Medium
https://microservices.dijitalakademi.gov.tr/#footer-topmicroservices.dijitalakademi.gov.tr
LogoNet Core ile “RabbitMQ” ya GirişMedium
LogoRabbitMQ Exchange Types — .Net Core ile GirişMedium
LogoRabbitMQ ve Exchange TürleriMedium
LogoBurak Selim Şenyurt | West-World'ün RabbitMQ ile Tanışmasının Zamanı Gelmişti
Logo.Net Core 3.1 ile MassTransit + RabbitMQMedium
LogoMicroservice Mimari’lerde Transaction Yönetimi Nasıl Yapılır?Medium
LogoXA Transactions (2 Phase Commit): A Simple Guide - DZone Integrationdzone.com
LogoMono-repo or multi-repo? Why choose one, when you can have both?Medium
LogoMethod Idempotence Nedir?Medium
LogoThe Potency of Idempotent with RabbitMQ and MongoDB UpsertCompose Articles
LogoCQRS (Command Query Responsibility Segregation) Nedir? | Gökhan Gökalp
LogoMicroservice Mimari’lerde Veritabanı TasarımıMedium
Decoupling Microservices
LogoOData (Open Data Protocol) -1Medium
LogoJFrog Artifactory nedir? Docker Registry YapılandırılmasıMedium
LogoJFrog Artifactory’i Docker Olarak KurmakMedium
LogoMicroservice Mimari ve DDD’nin Bounded Context Kavramı ÜzerineMedium
LogoModeling Microservices – Bounded ContextsYiğit Oğuz
LogoDomain Driven Design (DDD)Medium
LogoBackend For What? Backend For Frontend, BFF.Medium
Microservices Pattern: API gateway patternmicroservices.io
LogoElastic Stack ile Log Yönetimi ve İzleme [BEATS — LOGSTASH — ELASTICSEARCH-KIBANA ENTEGRASYONU]Medium
Logo“Logstash” nedir, nasıl yüklenir?Medium
LogoElasticsearch Nedir ?Medium
LogoELK Nedir? ElasticSearch-LogStash-Kibana KurulumuMedium
Asp.Net Core ElasticSearch Logging ve Kibana Kurulumu & Kullanımı
LogoDocker ile Elastic Stack KurulumuMedium
LogoApi GatewayMedium
Api Gateway Nedir?Mustafa Çağatay KIZILTAN
LogoMicroservices API Gateways — Ocelot for .NET Core + VideoMedium
LogoOcelot ile API Ağ Geçitlerini uygulamadocsmsft
LogoGitHub - dotnet-architecture/eShopOnContainers: Cross-platform .NET sample microservices and container based application that runs on Linux Windows and macOS. Powered by .NET 6, Docker Containers and Azure Kubernetes Services. Supports Visual Studio, VS for Mac and CLI based environments with Docker CLI, dotnet CLI, VS Code or any other code editor.GitHub
LogoBuilding Microservices Using an API Gateway | NGINXNGINX
LogoKong Api GatewayMedium
LogoBurak Selim Şenyurt | Peki ya Kong Kim?
LogoAPI Gateway çözümü olarak KONGMedium
LogoKONG Api Gateway ve Konga KurulumuMedium
Logo.Net Core ile Api GatewayMedium
Logo.Net Core Microservice Api GatewayMedium
Logo.Net Core Service Registration and Discovery (Eureka)Medium
LogoBuilding API Gateway Using Ocelot In ASP.NET Core - Service Discovery (Eureka)CsharpCorner
LogoGitHub - suadev/dotnet-istanbul-microservices-demo: This is the demo application that i created for my talk 'Microservice Architecture & Implementation with Asp.Net Core' at Dotnet İstanbul Meetup Group.GitHub