Mevcut durum
Mikro hizmet mimarisinde bir çevrimiçi alışveriş web uygulaması uyguluyoruz (ve şimdi de sürdürüyoruz).
Şartlardan biri, işletmenin, deneyimlerini ve nihai siparişini özelleştirmek için müşterilerimizin sepetlerine ekledikleri kurallar uygulayabilmesidir. Oldukça açık bir şekilde, bir iş kuralları motoru devreye sokulmalıydı ve bunun için belirli bir "mikro hizmet" uyguladık (eğer hala böyle diyebilirsek).
Bir yıl boyunca, bu kural motoru gittikçe daha karmaşık hale geldi ve daha fazla veri (ör. Alışveriş sepetinin içeriği, aynı zamanda kullanıcı bilgileri, rolü, mevcut hizmetleri, bazı fatura bilgileri vb.) bu kuralları hesaplar.
Şu an için shopping-cart
mikro hizmetimiz tüm bu verileri diğer mikro hizmetlerden topluyor. Bu verilerin bir kısmı tarafından kullanılmasına shopping-cart
rağmen, çoğunlukla kural motorunu beslemek için kullanılır.
Yeni gereksinimler
Şimdi benzer uygulamalar için kural motorunu yeniden kullanmak için diğer uygulamalara / mikro hizmetlere ihtiyaç duyulmaktadır. Mevcut durumda, bu nedenle aynı tür verileri iletmeleri, aynı mikro hizmetleri çağırmaları ve kural motorunu çağırabilmek için (neredeyse) aynı kaynakları inşa etmeleri gerekecektir.
Olduğu gibi, bazı sorunlarla karşılaşacağız:
- herkes (kural motoru olarak adlandırılır), kendileri için ihtiyaç duymasalar bile verilerin getirilmesini yeniden uygulamak zorundadır;
- kural motoru talepleri karmaşıktır;
- bu yönde devam ederek, bu verileri birçok istek için ağın her yerine taşımamız gerekecek (μs A çağırma μs B'yi kural motorunu çağırıyor, ancak A zaten kural motorunun ihtiyaç duyduğu verilerin bazılarına sahip);
shopping-cart
tüm veri getirme nedeniyle çok büyük oldu;- Muhtemelen bir çok unutacağım…
Bu sıkıntılardan kaçınmak için ne yapabiliriz?
İdeal olarak, kural motoruna daha fazla karmaşıklık eklemekten kaçınırız. Bunun bir darboğaz haline gelmediğinden de emin olmalıyız - örneğin, bazı verilerin getirilmesi oldukça yavaştır (10s veya daha fazla), bu nedenle shopping-cart
, kuralları çağırmadan önce verilerin orada olma olasılığı daha yüksek olacak şekilde ön getirme uyguladık kullanın ve kabul edilebilir bir kullanıcı deneyimi sağlayın.
Bazı fikirler
- Kural motoru, ihtiyaç duyduğu verileri getirsin. Bu, tek sorumluluk ilkesini ( daha da fazla… ) ihlal ederek ona daha da karmaşıklık katacaktır ;
- Verileri almak için kural motorundan önce bir proxy μs uygulayın;
- Kural motorunun ihtiyaç duyduğu tüm verileri bir kerede almak için çağırdığı bir "veri getirici" μs uygulayın (bileşik sorgulama).
shopping-cart
, ancak diğer mikro hizmetlerin ihtiyaçlarına göre kolayca uyarlayabiliriz (yine de kullanıcılar, ürünler ve siparişle ilgilidir). Gördüğümüz gibi, onlar olacaktır iş uygulamak için yüklemler seçim yapabiliyor, özellikle de aynı giriş veri gerekir. Tüm veriler, alışveriş sepeti içeriğinin kendisi dışındaki diğer mikro hizmetler tarafından sağlanır. Verilerin getirilmesi kendi başına karmaşık değildir, ancak ~ 10 başka mikro hizmet çağırmanız ve kural motoru tarafından beklenen yapıyı korumanız gerektiğinde karmaşık hale gelir.