paint-brush
Bulut Yerel Uygulamalar için Mikro Hizmet Mimarisinin Benimsenmesiile@samsey
1,690 okumalar
1,690 okumalar

Bulut Yerel Uygulamalar için Mikro Hizmet Mimarisinin Benimsenmesi

ile Donsamsey11m2023/12/19
Read on Terminal Reader
Read this story w/o Javascript

Çok uzun; Okumak

Bu zorluklar, artan karmaşıklıkla başa çıkmayı, ağ gecikmesini etkili bir şekilde yönetmeyi, hizmet keşfini verimli bir şekilde ele almayı, yapılandırma yönetimi endişelerini uygun şekilde ele almayı ve güvenlik önlemlerinin alındığından emin olmayı içerebilir. Genel olarak, mikro hizmetler yerel uygulamalar için avantajlar sunarken, bunların tam potansiyelini kullanmak için ilgili zorlukları etkili bir şekilde ele almak çok önemlidir.

People Mentioned

Mention Thumbnail
Mention Thumbnail

Company Mentioned

Mention Thumbnail
featured image - Bulut Yerel Uygulamalar için Mikro Hizmet Mimarisinin Benimsenmesi
Donsamsey HackerNoon profile picture
0-item
1-item

Yazılım mimarisi dünyasında mikro hizmetler, iyi tanımlanmış arayüzler aracılığıyla birlikte çalışan bağımsız hizmetleri içeren bir stildir. Öte yandan yerel uygulamalar, bulut ortamlarının ölçeklenebilirliğinden, esnekliğinden ve çevikliğinden en iyi şekilde yararlanması için özel olarak tasarlanmış ve geliştirilmiştir.


Uygulamalarda mikro hizmetlerin kullanılması söz konusu olduğunda dikkate alınması gereken çok sayıda avantaj vardır. Bunlar arasında geliştirme döngüleri, test ve hata ayıklama süreçleri, gelişmiş esneklik ve modülerliğin yanı sıra gelişmiş hata toleransı ve performans da yer alıyor. Ancak bu yaklaşımın beraberinde getirdiği zorlukların da olduğunu kabul etmek önemlidir.


Bu zorluklar, artan karmaşıklıkla başa çıkmayı, ağ gecikmesini etkili bir şekilde yönetmeyi, hizmet keşfini verimli bir şekilde ele almayı, yapılandırma yönetimi endişelerini uygun şekilde ele almayı ve güvenlik önlemlerinin alındığından emin olmayı içerebilir.


Genel olarak, mikro hizmetler yerel uygulamalar için avantajlar sunarken, bunların tüm potansiyelini kullanmak için ilgili zorlukları etkili bir şekilde ele almak çok önemlidir.


Docker, mikro hizmetleri geliştirmek, yürütmek ve dağıtmak için bir araç olarak popülerlik kazandı. Bir hizmeti çalıştırmak için gerekli tüm bileşenleri kapsayan, bağımsız ortamlar olan konteynerlerin oluşturulmasını ve yürütülmesini sağlayan bir platform görevi görür. Kod kitaplıkları, bağımlılıklar ve yapılandırma ayarları buna dahildir.


Docker'ın en büyük avantajı, hizmetleri, işletim sistemlerinden veya temel altyapılarından bağımsız olarak Docker'ı destekleyen makinelere sorunsuz bir şekilde dağıtılabilen taşınabilir konteynerler halinde paketleme yeteneğinde yatmaktadır. Ek olarak Docker, bu konteynerlerin yaşam döngüsünü etkili bir şekilde yönetmek için bir dizi özellik ve araç sunar.


Bunları oluşturmak ve çalıştırmaktan durdurmaya, yeniden başlatmaya, kaldırmaya veya güncellemeye kadar.

Yerel Uygulamalar için Mikro Hizmetleri Kullanmanın Avantajları Vardır:

1. Hızlandırılmış geliştirme ve dağıtım döngüleri: Mikro hizmetler, uygulamanızı yönetilebilir birimlere bölerek bağımsız ve paralel geliştirme, test ve dağıtıma olanak tanır. Bu kolaylaştırılmış yaklaşım, özelliklerin ve güncellemelerin sunulması için gereken zamanı ve çabayı azaltır. Aynı zamanda entegrasyon ve dağıtım (CI/CD) uygulamalarının benimsenmesini de kolaylaştırır.


Ayrıca mikro hizmetler, derleme süreleri, karmaşık bağımlılıklar ve riskli dağıtımlar gibi uygulamalarla ilgili zorlukların azaltılmasına yardımcı olur.


2. Artan Ölçeklenebilirlik: Mikro hizmetler uygulamanızı ölçeklendirme avantajı sunar. Uygulamanın geri kalanını aksatmadan hizmet örneklerini gerektiği gibi kaldırabilirsiniz. Bu esneklik, değişen iş yüklerinin yönetilmesine ve kaynak kullanımının optimize edilmesine yardımcı olur. Ek olarak mikro hizmetler, her hizmeti gereksinimlere ve tercihlere göre uyarlayan teknolojilerden ve çerçevelerden yararlanmanıza olanak tanır.


3. Gelişmiş hata toleransı ve esneklik: Mikro hizmetler, arızaları izole ederek ve etkilerini en aza indirerek mevcut uygulamaya katkıda bulunur. Bir hizmet bir sorunla karşılaşırsa, sorunlu hizmet hızla onarılırken veya değiştirilirken diğer hizmetler normal şekilde çalışmaya devam edebilir.


Ayrıca mikro hizmetler, devre kesiciler, yeniden denemeler, zaman aşımları ve geri dönüşler gibi hata mekanizmalarının uygulanmasını kolaylaştırır. Bu modeller art arda gelen arızaları önler. Performansın bozulmasını sağlayın.


4. Teknolojiyi seçmek ve dahil etmek daha kolay hale gelir: Mikro hizmetler, uygulamanız ile çeşitli iç ve dış sistem ve hizmetler arasında entegrasyon ve uyumluluğa olanak tanır. Bunu API'ler gibi tanımlanmış ve standartlaştırılmış arayüzleri kullanarak başarıyorlar.


Mikro hizmetlerden yararlanılarak, kullanılan temel teknolojiler veya platformlar ne olursa olsun bileşenler arasındaki iletişim kusursuz hale gelir. Ek olarak mikro hizmetler, sunucusuz işlevler, veritabanları, mesajlaşma sistemleri ve analiz araçları dahil olmak üzere bulut sağlayıcılarının mevcut ve gelişmekte olan teknolojilerinden ve hizmetlerinden yararlanmanıza olanak tanır.

Mikro Hizmetleri Native Uygulamalar İçin Kullanırken Ortaya Çıkan Zorluklar Vardır. Bu Zorluklar şunları içerir:

1. Artan karmaşıklık ve iletişim yükü: Mikro hizmetleri uygulamanıza dahil etmek karmaşıklığı artırır. Farklı makineler ve ağlar arasındaki hizmetlerin yönetilmesini ve koordine edilmesini gerektirir. Bu, ağ gecikmesi, bant genişliği, güvenilirlik ve güvenlik gibi sorunların ele alınmasını içerir.


Ayrıca hizmet keşfi, yük dengeleme, yönlendirme ve senkronizasyon gibi görevler için protokoller ve mekanizmalar uygulanmalıdır. Hizmetleri ve bunların etkileşimlerini izlemek ve sorun gidermek de zaman alıcı ve zorlu bir görev olabilir.


2. Test etme ve hata ayıklamayla ilgili zorluklar: Mikro hizmetler, yalnızca her hizmeti ayrı ayrı değil, uyumlu bir birim olarak tüm sistemi test etmeniz ve hata ayıklamanız gerektiğinden, test etmeyi ve hata ayıklamayı daha zorlu hale getirir.


Hizmetlerinizin birbiriyle uyumlu ve tutarlı olduğundan ve çeşitli senaryolar ve uç durumlarla başa çıkabildiğinden emin olmanız gerekir. Ayrıca uygulamanızın karmaşık ve maliyetli olabilecek gerçek ortamını ve koşullarını simüle etmeniz ve kopyalamanız gerekir.


3. Uygulamanızda standardizasyon ve yönetim eksikliği: Her hizmetin teknolojileri, çerçeveleri, dilleri ve araçları kullanma özgürlüğü olduğundan, bu durum tekrarlanan çabalarda tutarsızlıklara ve parçalanmış bir kod tabanına yol açabilir.


Sonuç olarak, bu hizmetlerin sürdürülmesi ve güncellenmesi zorlu hale gelebilir. Bu sorunu çözmek için hizmetlerinize yönelik uygulamalar, yönergeler ve politikalar oluşturmak ve uygulamak çok önemlidir. Bunlar, kodlama standartlarını, belgeleme gerekliliklerini, sürüm oluşturma protokolleri test prosedürlerini ve dağıtım stratejilerini içerebilir.


4. Verilerin güvenliği ve bakımı zorluklar yaratır: Her hizmetin kendi veri deposu ve erişim kontrolü olduğundan, veri ihlali, sızıntı ve yolsuzluk riski artar. Ek olarak, hizmetler ve bunlara karşılık gelen veriler için kimlik doğrulama, yetkilendirme ve şifrelemeyi yönetmek karmaşık hale gelebilir.


Bu endişeleri gidermek için hizmetlerinizin güvenliğine öncelik vermek ve düzenleme ve standartlara uygunluğu sağlamak hayati önem taşımaktadır. İşlemler, efsaneler ve olay kaynağı bulma gibi stratejilerin uygulanması da veri tutarlılığının korunmasına yardımcı olabilir.

Mikro Hizmetler için Docker'ı Kullanma

Oluşturmak, çalıştırmak ve dağıtmak istiyorsanız mikro hizmetler Docker size yardımcı olacak bir araç olabilir. Bu bölümde Docker'ın imajlar, konteynerler, birimler ve ağlar gibi kavramlarını inceleyeceğiz. Ayrıca mikro hizmetleri etkili bir şekilde tanımlamak ve düzenlemek için Docker Compose'dan yararlanma konusunda da rehberlik sağlayacağız.


Ek olarak, Docker'ı mikro hizmetler bağlamında kullanmaya yönelik bazı uygulamaları ve kullanışlı ipuçlarını tartışacağız.

Görseller ve Kapsayıcılar

Docker alanında görüntü, bir hizmetin düzgün çalışması için gereken her şeyi içeren bir paket görevi görür. Buna kod parçacıkları, kitaplıklar, bağımlılıklar ve yapılandırma ayarları dahildir. Bir Docker görüntüsünün oluşturulduktan sonra değişmez olarak kabul edildiğini, yani değiştirilemeyeceğini belirtmekte fayda var.


İhtiyaçlarınıza uygun özel bir görüntü oluşturmak için yapım talimatlarını özetleyen bir Docker dosyası oluşturma seçeneğiniz vardır. Alternatif olarak Docker Hub gibi platformlarda veya diğer güvenilir kaynaklarda bulunan mevcut görüntüleri de kullanabilirsiniz.


Docker kapsayıcısı, Docker görüntüsünün bir örneğini temsil eder. Ana makineden ve kendi dosya sistemine, ağına ve işlemlerine sahip diğer kaplardan bağımsız olarak çalışır. Bir Docker kapsayıcısını başlatmak için, bir görüntüye dayalı olarak bir kapsayıcı oluşturup başlatan docker run komutunu kullanabilirsiniz.


Alternatif olarak, mevcut bir konteyneri sırasıyla başlatmak veya durdurmak için docker start ve docker stop komutlarından yararlanma seçeneğiniz vardır. Gerektiğinde bir konteyneri silmek için docker rm komutu kullanılabilir.

Birimler ve Ağlar

Docker terminolojisinde depolama için Docker konteynerine bağlanabilen bir birim kullanılır. Docker'daki birimler kullanılarak, yeniden başlatmalar veya güncellemeler sırasında veri sürekliliği sağlanırken konteynerler ve ana makine arasında rahatlıkla veri alışverişi yapılabilir.


Docker birimi oluşturmak, docker birimi oluşturma komutunu çalıştırarak veya docker run komutunda veya Docker dosyanızda birimler seçeneğini belirleyerek gerçekleştirilebilir.


Ek olarak, birimleri listelemek için docker birimi, belirli birimler hakkında bilgi edinmek için docker birimi incelemesi ve son olarak istenmeyen birimleri kaldırmak için docker birimi rm gibi komutlar vardır.


Docker ağı, Docker konteynerlerini ana makineye birbirine bağlayan bir ağ görevi görür. Docker ağını kullanarak konteynerler arasında izole iletişim sağlarken aynı zamanda konteynerlerin içinde çalışan hizmetlere erişim de sağlayabilirsiniz.


Docker ağı oluşturmak için "docker network create" komutunu kullanma veya ağları "docker run" komutunda veya Dockerfile'da belirtme seçeneğiniz vardır.


Ayrıca ağları yönetmek ve değiştirmek için "docker network", "docker network inspect" ve "docker network rm" gibi komutları kullanabilirsiniz.

Docker Kullanarak Basit Bir Mikro Hizmet Oluşturma ve Çalıştırma

Docker'ın mikro hizmetler için nasıl kullanılacağını göstermek amacıyla, bir JSON dosyasından rastgele bir alıntı döndüren basit bir mikro hizmet oluşturup çalıştıracağız. Mikro hizmet Python'da yazılacak ve Flask çerçevesini kullanacak. JSON dosyası, her biri bir yazar ve bir metin içeren bir dizi alıntı içerecektir.


Başlamak için mikro hizmetimiz için bir dizin oluşturalım ve içine iki dosya ekleyelim: app.py ve quote.json. App.py dosyası mikro hizmetimizin kodunu içerecek, tırnak işaretleri.json dosyası ise verileri depolayacaktır. İşte her dosyanın içeriği;


Python

# uygulama.py

şişeden içe aktarma Flask, jsonify

rastgele içe aktar


uygulama = Şişe( isim )


# JSON dosyasından alıntıları yükleyin

f olarak open("quotes.json") ile:

 quotes = f.read() quotes = json.loads(quotes)


# /quote uç noktası için bir rota tanımlayın

@app.route("/alıntı")

def alıntı():

 # Pick a random quote from the list quote = random.choice(quotes) # Return the quote as a JSON object return jsonify(quote)


JSON

# tırnak.json

 "author": "Albert Einstein", "text": "Imagination is more important than knowledge."


 "author": "Mahatma Gandhi", "text": "Be the change that you wish to see in the world."


 "author": "Mark Twain", "text": "The secret of getting ahead is getting started."


 "author": "Oscar Wilde", "text": "Be yourself; everyone else is already taken."


 "author": "Steve Jobs", "text": "Your time is limited, so don't waste it living someone else's life."


Daha sonra, mikro hizmetimiz için görüntünün oluşturulmasına ilişkin talimatları belirleyecek bir Docker dosyası oluşturmamız gerekiyor. Docker dosyası aşağıdaki gibi olacaktır:


Temel görsel olarak resmi Python görselini kullanın

Python'DAN:3.9


Çalışma dizinini /app olarak ayarlayın

İŞ DİZİNİ /uygulama


Dosyaları geçerli dizinden /app dizinine kopyalayın

KOPYALA. /uygulama


Gerekli bağımlılıkları yükleyin

Pip kurulum şişesini RUN


5000 numaralı bağlantı noktasını açığa çıkarın

5000'İ AÇIKLAMA


Uygulamayı çalıştırmak için komutu tanımlayın

CMD ["python", "app.py"]


İmajı oluşturmak için Dockerfile’ın bulunduğu dizinden terminalde aşağıdaki komutu çalıştırmamız gerekiyor:


docker build -t alıntı hizmeti.


-t seçeneği görüntünün adını ve etiketini (bu durumda alıntı hizmeti) belirtir. . yapının içeriğini (bu durumda geçerli dizin) belirtir.


Container'ı çalıştırmak için terminalde aşağıdaki komutu çalıştırmamız gerekiyor:


docker run -d -p 5000:5000 --name fiyat teklifi-hizmet teklif-hizmeti


-d seçeneği, kabı arka planda çalıştığı anlamına gelen bağımsız modda çalıştırır. -p seçeneği, konteynerin 5000 numaralı bağlantı noktasını ana makinenin 5000 numaralı bağlantı noktasıyla eşleştirerek hizmete ana makineden erişmemizi sağlar.


--name seçeneği konteynere bir ad atar; bu durumda, quote-service. Son argüman görüntünün adı ve etiketidir, bu durumda alıntı hizmetidir.


Hizmeti test etmek için, hizmetin /quote uç noktasına JSON formatında rastgele bir teklif döndürmesi gereken bir GET isteği göndermek üzere Curl veya Postman gibi bir araç kullanabiliriz. Örneğin Curl kullanarak terminalde aşağıdaki komutu çalıştırabiliriz:


Kıvır http://localhost:5000/quote


Çıktı şunun gibi olmalı:


JSON

"yazar": "Mark Twain",

"text": "İleriye gitmenin sırrı başlamaktır."



Docker Oluşturma

Docker Compose, bir YAML dosyası kullanarak mikro hizmetleri tanımlamanın ve yönetmenin bir yolunu sağlar. Docker Compose ile konteyner oluşturma, başlatma, durdurma ve güncelleme gibi görevleri kolaylıkla gerçekleştirebilirsiniz. Ayrıca mikro hizmetlerinizin yönetimini basitleştirmek için hizmet keşfi, yük dengeleme, ölçeklendirme ve ağ oluşturma gibi işlevler de sunar.


Docker Compose'u kullanmak için Dockerfile'ımızla aynı dizinde docker-compose.yml adında bir dosya oluşturmamız gerekiyor. Docker-compose.yml dosyası, görüntü, bağlantı noktaları, birimler, ağlar ve bağımlılıklar gibi mikro hizmetlerimizin yapılandırmasını içerecektir.


Örneğin, teklif hizmetini kullanan ve teklifi bir web sayfasında görüntüleyen başka bir mikro hizmet eklemek istediğimizi varsayalım. Mikro hizmet Node.js'de yazılacak ve Express çerçevesini kullanacaktır. docker-compose.yml dosyası aşağıdaki gibi olacaktır:


Docker Compose dosya biçimi sürümünün sürümünü belirtin: "3.9"


Uygulama hizmetlerimizi oluşturan hizmetleri (konteynerleri) tanımlayın:

Teklif Hizmeti

fiyat teklifi hizmeti:

 # Build the image from the Dockerfile in the current directory build: . # Expose the port 5000 ports: - "5000:5000" # Assign a name to the container container_name: quote-service


Web Hizmeti

internet servisi:

 # Use the official Node.js image as the base image image: node:14 # Set the working directory to /app working_dir: /app # Copy the files from the web directory to the /app directory volumes: - ./web:/app # Install the required dependencies command: npm install && node app.js # Expose the port 3000 ports: - "3000:3000" # Assign a name to the container container_name: web-service # Specify the dependency on the quote service depends_on: - quote-service


Web dizini iki dosya içerecektir: app.js ve index.html. App.js dosyası web hizmetimizin kodunu, index.html dosyası ise web sayfamızın HTML'sini içerecektir. Dosyaların içeriği aşağıdaki gibidir:


JavaScript

// uygulama.js

const express = require("express");

const axios = require("axios");


const uygulaması = express();


// index.html dosyasını kök rota olarak servis edin

app.get("/", (req, res) => {

res.sendFile(__dirname + "/index.html");

});


// /quote uç noktası için bir rota tanımlayın

app.get("/quote", async (req, res) => {

denemek

 // Call the quote service and get a random quote const response = await axios.get("http://quote-service:5000/quote"); const quote = response.data; // Return the quote as a JSON object res.json(quote);


yakalamak (hata)

 // Handle the error and return a status code


Bu makalede, mikro hizmetler ve yerel uygulamalar dünyasının yanı sıra bunları oluşturmak, çalıştırmak ve dağıtmak için Docker'ın nasıl kullanılabileceğini araştırdık. Tartışmamız boyunca uygulamalar için mikro hizmetlerin kullanılmasının getirdiği avantajları ve zorlukları inceledik.


Bunlar arasında geliştirme döngüleri, artan esneklik ve ölçeklenebilirlik, iyileştirilmiş hata toleransı, esneklik, daha kolay teknoloji seçimi ve entegrasyonu, ağ gecikmesi ve daha fazlası yer alır.


Ek olarak görüntüler, konteyner birimleri ve ağlar gibi Docker kavramlarına da aşina olduk. Ayrıca mikro hizmetleri tanımlamak ve düzenlemek için Docker Compose'u kullanmayı da araştırdık. Bu arada, Docker'ı mikro hizmet ortamında etkili bir şekilde kullanmaya yönelik bazı uygulamaları ve yararlı ipuçlarını paylaştık.


Bu, sözleşmelerin günlüğe kaydedilmesi stratejilerinin adlandırılması ve durum kontrollerinin uygulanmasına ilişkin önerileri içerir.


Genel olarak bu makale, Docker'ın geliştirme yaşam döngülerinde nasıl önemli bir rol oynayabileceğini gösterirken, yerel uygulamalarla birlikte mikro hizmetlere genel bir bakış sunmuştur.


Netflix, Uber, Spotify ve Airbnb gibi Docker'ı kullanarak mikro hizmet projelerini başarıyla uygulayan şirketlerden örnekler ve bahsediliyor. Bu kuruluşlar, uygulamalarının yeteneklerini genişletmek, performansı artırmak ve hizmetleri hızlı ve güvenilir bir şekilde sunmak için mikro hizmetleri ve Docker'ı benimsemiştir.


İçgörülerini ve önerilen yaklaşımlarını derinlemesine incelemek istiyorsanız blog gönderilerini, podcast'lerini ve sunumlarını keşfedebilirsiniz.


Mikro hizmetler ve Docker hakkındaki bilginizi genişletmekle ilgileniyorsanız, emrinizde kaynaklar ve öğrenme fırsatları vardır. Bunlara kitaplar, kurslar, öğreticiler ve belgeler dahildir. İşte bazı öneriler:


"Docker, Flask ve React ile Mikro Hizmetler"; Bu kitap, Python, Flask, React ve Docker kullanarak mikro hizmetlerin oluşturulması, test edilmesi ve dağıtılması konusunda rehberlik sağlar.


"Docker ve Kubernetes; Tam Kılavuz"; Bu kurs sizi Docker ve Kubernetes kullanarak uygulama geliştirme, çalıştırma ve dağıtma becerileriyle donatır.


"Docker ve Flask kullanarak Basit Bir Mikro Hizmet Oluşturun"; Bu eğitimde Docker ve Flask kullanarak mikro hizmetin nasıl oluşturulacağını öğreneceksiniz. Ayrıca Postman ve VS Code gibi araçları kullanan test ve hata ayıklama tekniklerini de kapsar.


“Docker Belgeleri”; Kurulum talimatlarından yapılandırma ayrıntılarına kadar Docker ile ilgili her şey hakkında bilgi için bu belge bir kaynak görevi görür.


Docker'ın yanı sıra mikro hizmetler dünyasını daha derinlemesine incelemek için bu seçenekleri keşfedin.