Şirketiniz için en uygun mimarileri tasarlıyoruz.

Teknoloji

.NET sisteminizi durdurmadan, parça parça güncelleyin

Çoğu .NET sisteminde .NET Framework kodu, WCF servisleri ve daha küçük bir yük için yazılmış veri erişimi bir arada bulunur. Bunları bir reverse proxy arkasında modern .NET’e taşır, sistemi yavaşlatan noktaları düzeltir ve her adımı geri alınabilir tutarız.

Görüşme talep edin Sistem Modernizasyonu’nu inceleyin

Süre
Aşama başına 4 ila 12 hafta
Model
Aşamalı program
Çıktı
Modern .NET üzerinde ölçülmüş servisler

Bu hizmete ihtiyaç duyduğunuzun işaretleri

Bunların her biri kodda, loglarda ya da bir panoda görülebilir.

  • Sistemin bir kısmı hâlâ .NET Framework ve IIS üzerinde çalışıyor; bu yüzden geri kalanıyla birlikte Linux container’larına taşınamıyor.
  • WCF servisleri kritik akışların ortasında duruyor ve kimse sözleşmelerine dokunmak istemiyor.
  • Yük altında yanıt süreleri fırlıyor ama CPU düşük kalıyor; kodun her yerinde .Result ya da .Wait() çağrıları var.
  • Tek bir sayfa onlarca sorgu gönderiyor ya da tek bir EF sorgusu ekranda görünenden çok daha fazla satır döndürüyor.
  • Arka plan işleri web isteklerinin içinde Task.Run ile çalışıyor ve süreç yeniden başladığında kayboluyor.
  • Her proje diğer bütün projelere referans veriyor; faturalamadaki bir değişiklik raporlamanın derlemesini bozuyor.
  • Loglar var ama trace yok; yavaş bir isteği API’den veritabanına kadar kimse izleyemiyor.

.NET sistemleri neden tıkanır, yeniden yazım neden nadiren işe yarar

Bir .NET sistemi nadiren dil yüzünden yavaşlar. Asıl neden, daha küçük bir yükte zararsız olan alışkanlıklardır: async çağrıları bloklamak, döngü içinde lazy loading, her özelliğin paylaştığı tek bir DbContext, web isteklerine gizlenmiş işler. Bu kodu değiştirmeden yeni bir runtime’a taşımak sorunları da beraberinde taşır.

Akla ilk gelen çözüm, en yeni sürümde baştan yazmaktır. Bu, eski sistem değişmeye devam ederken özellik geliştirmeyi aylarca dondurur. Biz kademeli yolu seçeriz: eski uygulamanın önüne YARP gibi bir reverse proxy konur, rotalar modern .NET’e birer birer taşınır ve iki taraf birlikte çalışırken kimlik doğrulama ile oturum System.Web adapters üzerinden paylaşılır. Herhangi bir rota, tek bir yönlendirme değişikliğiyle eski koda geri döner.

Bu hizmet .NET’in içindeki mühendisliği kapsar. Soru daha genişse, örneğin karma bir sistemde önce hangi parçaların modernize edileceğiyse, doğru çerçeve Sistem Modernizasyonu programıdır.

Kapsama girenler ve girmeyenler

Dahildir

  • .NET Framework’ten güncel uzun süreli destek (LTS) sürümüne yükseltme yolu
  • Geçiş boyunca ortak kimlik doğrulamayla, YARP üzerinden kademeli yönlendirme
  • WCF, Web Forms, .NET Remoting ve yalnızca Framework’te bulunan diğer API’ler için değiştirme planı
  • EF ve EF Core sorgu incelemesi: N+1 desenleri, change tracking, split query’ler, indeksler
  • Bloklayan çağrıların kaldırıldığı ve thread pool davranışının yük altında ölçüldüğü async incelemesi
  • Arka plan işlerinin retry ve idempotency ile hosted service’lere ya da bir kuyruğa taşınması
  • Derlemede denetlenen modül sınırları, Linux container imajları, OpenTelemetry

Dahil değildir

  • Sistemin başka bir dile taşınması
  • WinForms ya da WPF ile yazılmış masaüstü istemcilerin yükseltilmesi
  • Mevcut ekranların görsel olarak yeniden tasarlanması
  • Devirden sonra sistemin üretimde işletilmesi

İş nasıl ilerler

  1. Hafta 1 ila 2Sistemi haritalayın. Kod depolarına, pipeline’lara ve panolara salt okunur erişimle kullanılan her projeyi, hedef framework’ü ve yalnızca Framework’e özgü API’yi listeleriz. Kritik yollar gerçek yük altında ölçülür; böylece yükseltme sırası riske göre belirlenir.
  2. Hafta 2 ila 4Proxy’yi yerleştirin. Eski uygulamanın önüne bir YARP proxy, yanına da modern bir .NET host konur. Başlangıçta her istek doğrudan geçer ve OpenTelemetry trace’leri iki tarafı da kapsar.
  3. Hafta 4 ila 12Rota rota taşıyın. Rotalar, servisler ve işler küçük gruplar halinde taşınır; her biri bir anahtarın arkasındadır ve trafik kaydırılmadan önce eski davranışla karşılaştırılır. Sorgu ve async düzeltmeleri aynı pull request’lerde, öncesi ve sonrası ölçülerek gelir. Her aşama çalışan bir sistemle biter.
  4. Süreç boyuncaErişimi dar tutun. Erişim varsayılan olarak salt okunurdur; değişiklikleri yayına almak için gereken yazma yetkisi aşama bitince kaldırılır.

Elinize ne geçiyor

Tüm çıktılar sizindir: kod, raporlar, diyagramlar ve kaynak dosyaları, hepsi kendi depolarınızda.

Yükseltme haritası
Her proje; hedef framework’ü, engelleyen bağımlılıkları ve yükseltme sırasındaki yeriyle.
Yönlendirme katmanı
Eskiyle yeniyi yan yana çalıştıran, her rota için geri dönüş anahtarı olan YARP yapılandırması ve dağıtım kodu.
Karar kayıtları
WCF’in yerine ne geleceği ya da modül sınırlarının nereden geçeceği gibi her önemli seçim için kısa bir kayıt.
Benchmark’lı düzeltmeler
Gözden geçirilmiş pull request’ler olarak sorgu, async ve bellek tahsisi değişiklikleri; BenchmarkDotNet ya da yük testi sonuçlarıyla.
Trace ve panolar
Mevcut altyapınızda OpenTelemetry trace, metrik ve logları; gecikme ve thread pool baskısı için panolar.
İşletim kılavuzu
Dağıtımın nasıl yapılacağı, bir rotanın nasıl geri alınacağı ve bir şey yavaşladığında dotnet-counters ile dotnet-trace’in nasıl kullanılacağı.

Hangi durumda doğru hizmet değil

  • Bir iki yıl içinde kapatılacak sistemler. Onları hâlâ Windows’un bir bileşeni olarak desteklenen .NET Framework 4.8 üzerinde tutmak, taşımaktan daha az maliyetlidir.
  • Başka bir teknolojiyle baştan yazıma çoktan karar vermiş ekipler. Biz .NET kodunun yerine başka bir şey koymayız; onu taşır ve iyileştiririz.
  • .NET’e özgü olmayan yavaşlıklar; örneğin yetersiz boyutlandırılmış bir veritabanı. Performans ve Ölçeklenebilirlik tüm katmanlara birlikte bakar.

Sık sorulanlar

Hangi .NET sürümünü hedeflemeliyiz?

Genellikle güncel LTS sürümünü. İki yılda bir yeni bir LTS sürümü çıkar ve üç yıl desteklenir; bu yüzden derleme ve testler, bir sonraki yükseltmeyi rutin bir işe dönüştürecek şekilde kurulur.

WCF servislerimize ne olacak?

Onları kimin çağırdığına bağlı. İç servisler genellikle gRPC’ye ya da sade HTTP API’lerine taşınır. Dış çağıranları değişemeyen servisler, WCF’in sunucu tarafının modern .NET’e açık kaynak uyarlaması olan CoreWCF üzerinde çalışabilir.

Yükseltme sırasında özellik geliştirmeye devam edebilir miyiz?

Evet. Eski uygulama, henüz taşınmamış her rotaya hizmet vermeyi sürdürür; yeni özellikler doğrudan yeni tarafta geliştirilebilir. Taşınan bir rota sorun çıkarırsa proxy onu geri gönderir.

Ekibimizin ne kadar zamanını alır?

Mühendisleriniz her değişikliği gözden geçirip birleştirir ve ilk rotalarda bizimle birlikte çalışır; böylece desen onların olur. Daha uzun programlarda bir gömülü mimar ekiple haftada 2 ila 3 gün çalışır.

Bir aşama bittiğinde ne olur?

Kod, karar kayıtları ve işletim kılavuzu sizde kalır; yazma yetkisi kaldırılır. Ekibiniz kalan rotaları aynı desenle kendisi taşıyabilir ya da bir sonraki aşamayı bizimle planlayabilir.

Önce kısa bir teknik sohbetle başlayalım

Otuz dakika. .NET sisteminizi anlatırsınız, işi yürütecek mimar nereden başlayacağımızı söyler.

Görüşme talep edininfo@futureformative.net