29 Ağustos 2022 Pazartesi

Deneysel Bir Ürün: Project Tye

    S.A. Arkadaşlar,

    Bugün, Microsoft'un deneysel olarak hizmete sunduğu ve açık kaynak olarak geliştirmeye devam ettiği bir proje olan "tye"dan bahsedeceğiz. .Net tabanlı mikroservis sistemleri geliştirmek, test etmek ve kolayca deploy etmeyi sağlayan bir araçtır. 4 haftalık release'lar yapmaya devam ederken, açık kaynak olması hasebiyle yeni fikir ve geliştirmelere açık olduklarını belirtiyorlar. Bu konudaki bazı geliştirme ve notlarımızı paylaşmaya karar verdik. Öyleyse başlayalım. 

    Tye ile yazılımış örneklerde genellikle sıfırdan oluşturulan örnek projelere denk geldim. Ben ise uzun süredir geliştiriyor olduğum çalışma projeme ekledim ve burada karşılaştığım bazı notları paylaşmak isterim.

    Her şeyden önce tye kurmamız lazım. Kurulumu gayet basit bir şekilde tamamlanmaktadır. Eğer daha önceden kurulmuş ise de versiyonunu güncelleyebilirsiniz. Ayrıntılara buradan göz atabilirsiniz. Ayrıca buradan da çok sorulan sorulara göz atabilirsiniz.

    Tye kullanmanın avantajlarından bazıları aşağıdaki gibidir.

- Kullanım kolaylığı

- Hot Reload özelliği mevcut (herhangi bir değişiklik sonucu tekrardan ayağa kalkması)

- Kolay bir şekilde debug etme şansı tanıması ("tye run --debug <service>")

- Tek komutla bütün bağımlılıklarla birlikte ayağa kaldırabilmesi

- Tek ayar dosyası ile k8s deploy etmesi

    Konuya başlamadan önce yukarıda da belirttiğimiz gibi .Net tabanlı servisler için geliştirilmiştir. Diğer dillere araştırdığım kadarıyla bir destekleri yok (pyhton ve nodejs tarafında çalışmaları var), ama ileride olur mu bilemiyorum. Hala deneysel olması sebebiyle bu normal olabilir ama bu şekilde kalması uzun vadede çok gerçekçi durmuyor.

    Şimdi de projede nasıl kullandığımıza gelelim. İlk önce "tye init" komutunu kullanarak ilk ayarlamaları yapmaya çalıştım. Var olan `docker-compose` dosyası değişti ve "tye run" dediğimde de proje ayağa kalkmadı. Zaten oluşan dosyada da hatalar vardı. Buradaki hatalara kabaca baksam da bunun yerine boş bir "tye.yaml" dosyası oluşturdum ve bu sefer "tye init --force" komutunu çalıştırdım. Varolan dosyayı tye dosyasını değiştirmek için --force komutunu kullandım ve artık dosyamız hazır. Aşağıya sadece bir servisin ayarını bırakıyorum.

- name: gateway-webapi
  project: src/Global/Gateway.WebApi/Gateway.WebApi.csproj
  bindings:
    - protocol: http
      port: 44382

 Şunu belirtmekte fayda var. Dosyanın oluşan ilk halinde "bindings" kısmı yoktu onları elle projedeki portlara uygun bir şekilde ayarladım. Onları otomatik bir şekilde yapmanın bir yolu var mı emin değilim.

    Ayarlar tamamlandı artık projeyi ayağa kaldırmanın zamanı geldi. "tye run" ile projeyi ayağa kaldırıyoruz. http://localhost:8000/ adresine gittiğimizde aşağıdaki gibi bir sayfa ile karşılaşmamız gerekiyor (yukarıda bahsettiğimiz proje için)

    Note: Henüz tüm ayarlar tamamlanmış değil, ilk önce servisleri ayağa kaldırdım.



    Şimdi de servislerimiz dışındaki bağımlılıkları tanımlama vakti geldi. Bu projede birden fazla kütüphane ve veritabanı kullanılmıştır. Şimdi de bu veritabanı ayarlarını yapalım. Aşağıdaya postgresql ayarı bırakıyorum.

- name: guidedb
  image: postgres
  env:
    - name: POSTGRES_USER
      value: postgres
    - name: POSTGRES_PASSWORD
      value: admin
    - name: POSTGRES_DB
      value: PhoneGuide
  bindings:
    - port: 5432

    Bu ayarlara ek olarak image dosyaları silinse bile veritabanındaki verilerin kalması için volume de tanımlayabilirsiniz. 

 volumes:
      - name: postgres-storage
        target: /var/lib/postgresql/data

    Diğer veritabanı için benzer ayarlar yapılır. Ayrıca rabbitmq, redis gibi araçlar için de benzer ayarlar kullanılmaktadır. Tekrardan ekranımıza göz atarsak aşağıdaki gibi yeni servislerin gelmiş olması lazım. Yukarıda belirttiğimiz dosyada mssql veritabanı için de ayar yaptık. 

    Note: Projeyi geliştirmeye devam ettiğimiz için yukarıdaki ve aşağıdaki ekran çıktıları değişiklik gösterebilir.


    Yukarıdaki ayarları github üzerinden geliştirmeye devam ediyor olacağım. Bu yazıyı ise şimdilik burada bitiriyoruz.

    Yazıyı aşağıdaki hadis-i şerif ile bitiriyoruz.
    "Kolaylaştırınız! Zorlaştırmayınız! Müjdeleyiniz, nefret ettirmeyiniz!" (Buharî, 3:72)

 

Hiç yorum yok:

Yorum Gönder