|
|
2021-8-15 tarihinde yayınlandı 21:55:14
|
|
|

Hizmet sistemimizin bir dizi fonksiyonel hizmet sağladığını, gelecekte daha fazla yeni fonksiyonel hizmetin ekleneceğini, fonksiyonel hizmetlerin değiştirilebileceğini veya kaldırılabileceğini hayal edin. Böyle bir hizmet sistemi için yaygın temel gereksinim, fonksiyonel hizmetler eklenir/kaldırılırken/güncellenirken hizmet sisteminin işleyişinin durdurulamamasıdır. Genellikle, "sıcak değiştirme eklentileri" her hizmeti bir eklenti dll'sine kapsülleyerek çok kolay uygulanabilir, ancak eklentilerin "sıcak değişimi" ("dinamik değişim") bir sorun haline gelir. Bunun nedeni, bir eklenti DLL'yi hizmet sisteminden kaldırdığımızda, hizmet sistemi aslında dll'nin temel referansını hâlâ elinde tutuyor ve dll'yi silmeye veya üzerine yazmaya çalıştığınızda Windows "dll kullanılıyor" gibi bir mesaj veriyor.
Peki bu sorunu nasıl çözebiliriz? Bence en az iki seçenek var:
(1) AppDomain kullanın. Eklentileri yeni bir AppDomain'e yükleyip ardından AppDomain'i kaldırmak, eklenti dll'lerini hizmet sisteminden temiz şekilde kaldırır. Bu yaklaşımın dezavantajı, birçok AppDomain'i yönetmeniz gerektiği (çünkü çok sayıda işlevsel hizmetiniz var) ve AppDomain'ler arasında iletişimin uzaktan yapılmasıdır, bu da sistemimize gereksiz birçok sorun getiriyor. İlgileniyorsanız bu seçeneği de deneyebilirsiniz, ben ise ikinciyi tercih ediyorum.
(2) Eklenti Dll'yi belleğe kopyalayın ve ardından Dll'yi belleğe yükleyin. Bu şekilde, sabit diskteki DLL'ler istediğim zaman üzerine yazılabilir veya silinebilir. Daha önce eklenti DLL'yi doğrudan sabit diskten yüklerdik, şöyle:
Şimdi, bir köşeye dönmemiz gerekiyor:
Bu, eklentilerin "dinamik değişimi" sorununu çözer.
|
Önceki:Spring Cloud, tüm istek arayüz loglarını MongoDB'ye kaydederÖnümüzdeki:.NET/C#, altı çizgili alan isimlerini büyük hump formlarına dönüştürür
|