{"id":160,"date":"2022-12-19T17:12:00","date_gmt":"2022-12-19T17:12:00","guid":{"rendered":"http:\/\/blog.firatyasar.com\/?p=160"},"modified":"2023-03-19T17:14:57","modified_gmt":"2023-03-19T17:14:57","slug":"software-design-pattern-part-iv","status":"publish","type":"post","link":"https:\/\/blog.firatyasar.com\/?p=160","title":{"rendered":"Software Design Patterns &#8211; Part IV"},"content":{"rendered":"\n<h3 id=\"42b5\"><strong>Microservices Architecture<\/strong><\/h3>\n\n\n\n<p id=\"13ae\">Mikroservis mimarisi sekt\u00f6rde h\u0131zl\u0131 bir \u015fekilde monolitik uygulmalalara ve servis odakl\u0131 mimarilere alternatif oldu. Bu mimari hala geli\u015fimini s\u00fcrd\u00fcrmektedir. Sekt\u00f6rde bu mimarinin ne oldu\u011fu ve nas\u0131l implement edildi\u011fi konular\u0131nda \u00e7ok fazla kafa kar\u0131\u015f\u0131kl\u0131\u011f\u0131 da mevcuttur.<\/p>\n\n\n\n<p id=\"0596\">Bu mimaride birden fazla ana konsept bulunur;<\/p>\n\n\n\n<p id=\"3791\"><strong>Ba\u011f\u0131ms\u0131z Da\u011f\u0131t\u0131lm\u0131\u015f Birimler (Separately Deployed Units)<\/strong><br>Mikroservis mimarisinin bile\u015fenleri ba\u011f\u0131ms\u0131z bir \u015fekilde deploy edilir. Bu yap\u0131 da\u011f\u0131t\u0131m\u0131n efektif bir \u015fekilde olmas\u0131n\u0131, \u00f6l\u00e7eklendirme yeteneklerinin artmas\u0131n\u0131 ve bile\u015fenlerin uygulamadan ayr\u0131lmas\u0131n\u0131 kolayla\u015ft\u0131r\u0131r.<\/p>\n\n\n\n<p id=\"f93d\"><strong>Servis Bile\u015feni (Service Component)<\/strong><br>Bu mimaride anla\u015f\u0131lmas\u0131 gereken en \u00f6nemli konsept service bile\u015feni kavram\u0131d\u0131r. Servis bile\u015fenlerini tek bir mod\u00fcl veya uygulaman\u0131n b\u00fcy\u00fck bir par\u00e7as\u0131 olarak d\u00fc\u015f\u00fcnmek gerekir. Servis bile\u015fenleri bir veya birden fazla mod\u00fcl bar\u0131nd\u0131r\u0131r. Bu mod\u00fcller tek ama\u00e7l\u0131 fonksiyonlar\u0131 veya bir i\u015f uygulamas\u0131n\u0131n ba\u011f\u0131ms\u0131z b\u00fcy\u00fck par\u00e7as\u0131n\u0131 temsil eder.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img src=\"https:\/\/miro.medium.com\/v2\/resize:fit:1400\/1*5IoCdx_jkaKCLbltBzLEvQ.png\" alt=\"\"\/><\/figure>\n\n\n\n<p id=\"a720\"><strong>Da\u011f\u0131t\u0131k Mimari (Distributed Architecture)<br><\/strong>Bu mimarideki t\u00fcm bile\u015fenler birbirinden tamamen ba\u011f\u0131ms\u0131zd\u0131r ve birbirleriyle \u00e7e\u015fitli uzaktan eri\u015fim protokolleriyle (REST, JMS, AMQP, SOAP vb.) konu\u015furlar. Mikroservis mimarisi iki ana kaynaktan geli\u015fmi\u015ftir; Katmanl\u0131 mimari kullan\u0131larak geli\u015ftirilen monolitik uygulamalar ve servis temelli mimari kullan\u0131larak geli\u015ftirilen da\u011f\u0131t\u0131k uygulamalard\u0131r. Monolitik uygulamalar\u0131n mikroservis mimariye olan d\u00f6n\u00fc\u015f\u00fcm\u00fc s\u00fcrekli da\u011f\u0131t\u0131m ve s\u00fcrekli geli\u015ftirmenin etkisiyle olmaktad\u0131r. Monolitik uygulama bile\u015fenlerinin birbirlerine fazla ba\u011f\u0131ml\u0131 olmas\u0131, uygulamada yap\u0131lacak de\u011fi\u015fikliklerin, testlerin ve uygulaman\u0131n\u0131 da\u011f\u0131t\u0131lmas\u0131n\u0131 zorla\u015ft\u0131r\u0131r. Mikroservis mimarisi bu s\u0131k\u0131nt\u0131lar\u0131 uygulamay\u0131 tek tek da\u011f\u0131t\u0131lan, gel\u015fi\u015ftirilen ve test edilen birden fazla servise b\u00f6lerek \u00e7\u00f6zmeye y\u00f6neliktir.<\/p>\n\n\n\n<p id=\"f1c6\">En yayg\u0131n ve pop\u00fcler topolojiler \u015funlard\u0131r:&nbsp;<em>API REST-tabanl\u0131<\/em>,&nbsp;<em>uygulama REST-tabanl\u0131&nbsp;<\/em>ve&nbsp;<em>merkezi mesajla\u015fma<\/em>.<\/p>\n\n\n\n<ul><li>API REST tabanl\u0131 topoloji, bir t\u00fcr API arac\u0131l\u0131\u011f\u0131yla k\u00fc\u00e7\u00fck, kendi kendine yeten tekil servislerin oldu\u011fu web siteleri i\u00e7in uygundur.<\/li><\/ul>\n\n\n\n<figure class=\"wp-block-image\"><img src=\"https:\/\/miro.medium.com\/v2\/resize:fit:1400\/1*Du5bpMHMt1xhEnzxGABiJA.png\" alt=\"\"\/><\/figure>\n\n\n\n<ul><li>Uygulama REST-tabanl\u0131 topolojinin API REST-tabanl\u0131 topolojiden fark\u0131, istemci istekleri bir API katman\u0131ndan de\u011fil de bir uygulama ekran\u0131ndan gelmesidir. Uygulaman\u0131n kullan\u0131c\u0131 aray\u00fcz\u00fc katman\u0131 ayr\u0131 bir web uygulamas\u0131 olarak da\u011f\u0131t\u0131l\u0131r. Bu uygulama, ba\u011f\u0131ms\u0131z da\u011f\u0131t\u0131lm\u0131\u015f servis bile\u015fenlerine bir REST tabanl\u0131 aray\u00fczden ula\u015f\u0131r.<\/li><\/ul>\n\n\n\n<figure class=\"wp-block-image\"><img src=\"https:\/\/miro.medium.com\/v2\/resize:fit:1400\/1*HdDEYaT26Y0Iz-ZpXSD-NQ.png\" alt=\"\"\/><\/figure>\n\n\n\n<ul><li>Bir di\u011fer yayg\u0131n yakla\u015f\u0131m merkezi mesajla\u015fma topolojisidir. Bu topoloji uzaktan eri\u015fim i\u00e7in REST kullanmak yerine merkezi mesajla\u015fma sistemi kullan\u0131r. Buradaki mesajla\u015fma, herhangi bir orkestrasyon, d\u00f6n\u00fc\u015ft\u00fcrme veya karma\u015f\u0131k bir y\u00f6nlendirme yapmaz.<\/li><li>Merkezi mesajla\u015fma topolojisi genellikle daha b\u00fcy\u00fck i\u015f uygulamalar\u0131nda veya kullan\u0131c\u0131 arabirimi ile hizmet bile\u015fenleri aras\u0131ndaki ta\u015f\u0131ma katman\u0131 \u00fczerinde daha karma\u015f\u0131k kontrol gerektiren uygulamalarda bulunur. Bu topolojinin REST-tabanl\u0131 topolojiye g\u00f6re avantajlar\u0131; geli\u015fmi\u015f kuyruk mekanizmalar\u0131, asenkron mesajla\u015fma, uygulaman\u0131n izlenmesi, hata y\u00f6netimi ve daha iyi genel y\u00fck dengeleme ve \u00f6l\u00e7eklenebilirliktir.<\/li><\/ul>\n\n\n\n<figure class=\"wp-block-image\"><img src=\"https:\/\/miro.medium.com\/v2\/resize:fit:1400\/1*HhXDNc2-O-T7KRaJYHePQg.png\" alt=\"\"\/><\/figure>\n\n\n\n<p id=\"c3e8\">Mikroservis mimarisindeki kar\u015f\u0131la\u015f\u0131lan zorluklar\u0131n ba\u015f\u0131nda servis bile\u015fenlerinin ayr\u0131nt\u0131 seviyesinin belirlenmesidir. Daha b\u00fcy\u00fck servis bile\u015fenleri ve daha b\u00fcy\u00fck altbile\u015fenler, mikroservis mimarisinin getirdi\u011fi faydalar\u0131n (Da\u011f\u0131t\u0131m, \u00f6l\u00e7eklenebilirlik, test edilebilirlik ve gev\u015fek ba\u011fl\u0131l\u0131k) fark\u0131na var\u0131lmas\u0131n\u0131n \u00f6n\u00fcne ge\u00e7ebilir. Daha k\u00fc\u00e7\u00fck servis bile\u015fenleri, servislerin orkestrasyon gereklili\u011fini ortaya \u00e7\u0131kar\u0131r.<\/p>\n\n\n\n<p id=\"f88b\">Mikroservis mimarisi, servis temelli mimarilerde ve monolitik uygulamalarda kar\u015f\u0131la\u015f\u0131lan sorunlara cevaplar sunar. Ana uygulama bile\u015fenleri daha k\u00fc\u00e7\u00fck, ba\u011f\u0131ms\u0131z bir \u015fekilde da\u011f\u0131t\u0131lan birimlere b\u00f6l\u00fcnd\u00fc\u011f\u00fcnden, mikro servis mimarisi modeli kullan\u0131larak olu\u015fturulan uygulamalar genellikle daha sa\u011fl\u0131kl\u0131d\u0131r, daha iyi \u00f6l\u00e7eklenebilirlik sa\u011flar ve s\u00fcrekli da\u011f\u0131t\u0131m\u0131 kolay bir \u015fekilde destekler.<\/p>\n\n\n\n<p id=\"00c2\">Bu mimarinin bir di\u011fer avantaj\u0131 ise e\u015f zamanl\u0131 da\u011f\u0131t\u0131md\u0131r. Geleneksel yap\u0131daki ayl\u0131k veya haftal\u0131k yap\u0131lan da\u011f\u0131t\u0131mlar\u0131 ortadan kald\u0131r\u0131r. De\u011fi\u015fiklikler servis bazl\u0131 oldu\u011fu i\u00e7in sadece de\u011fi\u015fiklik yap\u0131lan servisin da\u011f\u0131t\u0131lmas\u0131 yeterlidir.<\/p>\n\n\n\n<p id=\"2453\"><em>De\u011ferlendirme k\u0131sm\u0131 okudu\u011fum kitapta 6 ana ba\u015fl\u0131k alt\u0131nda toplan\u0131yor. Bu \u015fekildeki anlat\u0131m ho\u015fuma gitti\u011fi i\u00e7in ben de ayn\u0131 yap\u0131da de\u011ferlendirme k\u0131sm\u0131n\u0131 olu\u015fturdum.<\/em><\/p>\n\n\n\n<p id=\"6082\">Mikroservis Mimarinin De\u011ferlendirilmesi;<\/p>\n\n\n\n<ul><li><strong>\u00c7eviklik<\/strong>: Y\u00fcksek<br>&#8211; Ayr\u0131 olarak da\u011f\u0131t\u0131lan birimler sayesinde servis bile\u015fenlerindeki de\u011fi\u015fiklikler tek tek ve izole bir \u015fekilde yap\u0131l\u0131r. Bu da da\u011f\u0131t\u0131m\u0131n h\u0131zl\u0131 ve kolay bir \u015fekilde yap\u0131lmas\u0131n\u0131 sa\u011flar.<\/li><li><strong>Da\u011f\u0131t\u0131m Kolayl\u0131\u011f\u0131<\/strong>: Y\u00fcksek<br>&#8211; Servisler genel olarak birbirinden ayr\u0131 \u015fekilde da\u011f\u0131t\u0131l\u0131r ve bu durum g\u00fcn i\u00e7erisinde herhangi bir saatte da\u011f\u0131t\u0131m yap\u0131lmas\u0131 avantaj\u0131n\u0131 sa\u011flar. Ba\u015far\u0131s\u0131z olan da\u011f\u0131t\u0131mlar kolay bir \u015fekilde geri d\u00f6nd\u00fcr\u00fclebilir.<\/li><li><strong>Testedilebilirlik<\/strong>: Y\u00fcksek<br>&#8211; B\u00fct\u00fcn bir uygulamay\u0131 test etmektense belirli bir servis bile\u015fenini test etmek \u00e7ok daha kolayd\u0131r. Servis bile\u015fenlerinin birbiriyle d\u00fc\u015f\u00fck seviyede ba\u011fl\u0131l\u0131\u011f\u0131 sayesinde, yap\u0131lan da\u011f\u0131t\u0131mlar uygulaman\u0131n di\u011fer k\u0131s\u0131mlar\u0131n\u0131 nadiren bozar. Yap\u0131lan ufak bir de\u011fi\u015fiklikte bile t\u00fcm uygulamay\u0131 test etme gereklili\u011fi yoktur.<\/li><li><strong>Performans<\/strong>: D\u00fc\u015f\u00fck<br>&#8211; Mikroservis mimarisinin da\u011f\u0131t\u0131k do\u011fas\u0131ndan \u00f6t\u00fcr\u00fc y\u00fcksek performans beklenen uygulamalara uygun de\u011fildir.<\/li><li><strong>\u00d6l\u00e7eklenebilirlik<\/strong>: Y\u00fcksek<br>&#8211; Uygulaman\u0131n ayr\u0131 birimlere b\u00f6l\u00fcnmesi sayesinde her servis bile\u015feni tek tek \u00f6l\u00e7eklendirilebilir ve bu da uygulaman\u0131n d\u00fczg\u00fcn bir \u015fekilde \u00f6l\u00e7eklendirilmesi olana\u011f\u0131n\u0131 sa\u011flar.<\/li><li><strong>Geli\u015ftirme kolayl\u0131\u011f\u0131<\/strong>: Y\u00fcksek<br>&#8211; Servis bile\u015fenlerinin izole olmas\u0131, geli\u015ftirmeyi kolayla\u015ft\u0131r\u0131r. Bir servis \u00fczerinde yap\u0131lan geli\u015ftirmeler uygulaman\u0131n di\u011fer bile\u015fenlerini etkilemez. Bu da geli\u015ftiriciler ve geli\u015ftirici tak\u0131m\u0131 aras\u0131nda ihtiya\u00e7 duyulan kordinasyonu iyi y\u00f6nde azalt\u0131r.<\/li><\/ul>\n\n\n\n<p id=\"4132\">Yaz\u0131m\u0131n devam\u0131nda&nbsp;<a href=\"https:\/\/medium.com\/p\/c7016bd988b9\">Uzay Tabanl\u0131 Mimariden (Space-based Architecture)<\/a>&nbsp;bahsedece\u011fim.<\/p>\n\n\n\n<p id=\"5157\">Kaynak\u00e7a: Software Architecture Patterns \u2014 Mark Richards<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Microservices Architecture Mikroservis mimarisi sekt\u00f6rde h\u0131zl\u0131 bir \u015fekilde monolitik uygulmalalara ve servis odakl\u0131 mimarilere alternatif oldu. Bu mimari hala geli\u015fimini s\u00fcrd\u00fcrmektedir. Sekt\u00f6rde bu mimarinin ne oldu\u011fu ve nas\u0131l implement edildi\u011fi konular\u0131nda \u00e7ok fazla kafa kar\u0131\u015f\u0131kl\u0131\u011f\u0131 da mevcuttur. Bu mimaride birden fazla ana konsept bulunur; Ba\u011f\u0131ms\u0131z Da\u011f\u0131t\u0131lm\u0131\u015f Birimler (Separately Deployed Units)Mikroservis mimarisinin bile\u015fenleri ba\u011f\u0131ms\u0131z bir \u015fekilde\u2026 <span class=\"read-more\"><a href=\"https:\/\/blog.firatyasar.com\/?p=160\">Read More &raquo;<\/a><\/span><\/p>\n","protected":false},"author":1,"featured_media":148,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[1],"tags":[],"_links":{"self":[{"href":"https:\/\/blog.firatyasar.com\/index.php?rest_route=\/wp\/v2\/posts\/160"}],"collection":[{"href":"https:\/\/blog.firatyasar.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.firatyasar.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.firatyasar.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.firatyasar.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=160"}],"version-history":[{"count":2,"href":"https:\/\/blog.firatyasar.com\/index.php?rest_route=\/wp\/v2\/posts\/160\/revisions"}],"predecessor-version":[{"id":162,"href":"https:\/\/blog.firatyasar.com\/index.php?rest_route=\/wp\/v2\/posts\/160\/revisions\/162"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.firatyasar.com\/index.php?rest_route=\/wp\/v2\/media\/148"}],"wp:attachment":[{"href":"https:\/\/blog.firatyasar.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=160"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.firatyasar.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=160"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.firatyasar.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=160"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}