【Problem Açıklama】 Kullanıcılar APP'yi kullandığında sayfa çok takılı kalıyor ve rastgele tıklama yapıyorlar, çünkü arayüz tekrar gönderme yapmaz, hizmet katmanında birkaç aynı istek olur, bir iş parçacığı tamamlanmış olarak eklenmez, diğer iş parçacığı boş olarak kontrol edilir. Bu yüzden bir tane de taktım. Başlangıçta herkesin bir tane vardı, ancak bir satış görevlisinin üç tane vardı ve bu da iş mantığı hatalarına yol açıyordu. Kötü amaçlı gönderimlerin işlenmesi ön uç kısmında yapılabilir ve arka uç kısmında olgun çözümler de olabilir.
【Çözüm】1. İşlemlerin aynı potente sorununu çözmek için benzersizlik kısıtlamaları kullanın, benzersizlik kısıtlamaları belirleyin ve tekrarlanan taahhütler senaryosu varsa, veritabanı düzeyinde benzersizlik kısıtlamalarına istisnalar atılır ve iş mantığı yok edilmez. Birden fazla alanın bileşimine yönelik benzersizlik kısıtlamaları da kabul edilebilir.
Bağlantı girişi görünür.
Yukarıdakiler, veritabanı düzeyinde tekrarlanma karşıtı ayarlar yapmak içindir.
2. Kod seviyesinde çoğaltma önleyici ayarları gerçekleştirin. Çoğu zaman, veritabanının benzersizlik kısıtlamasının veri eklemenin verimliliğini etkilediği söylenir, çünkü her ekleme veritabanı düzeyinde bir yargı gerektirir. Bu nedenle, kod seviyesine bakılırsa, kod seviyesinde yaygın uygulama önce seçip sonra eklemektir, ancak yüksek eşzamanlılık senaryosu varsa, tekrar tekrar yapılan commitler olacaktır. Mantık koduna senkronize ekleyebilirsiniz, böylece yüksek eşzamanlılık senaryolarında önce seçin, sonra insert etki eder. Ama verimlilik yüksek değil ve paralellik seri oluyor. DCL kilit mekanizması kullanılabilir. (Kopyalama vaka modunda tek bir nesne oluşturma yönteminin çok benzer olduğunu fark ettiniz mi, önce nesnenin var olup olmadığını değerlendirin, yoksa yaratın, yoksa yaratmayın), doğal DCL kilit mekanizması daha verimlidir.
#分布式锁 Dağıtılmış kilitler de sorunu çözmek için kullanılabilir; bu da Redis ve Zookeeper tarafından yaygın olarak kullanılır. Bu bölüm, Redis kullanılarak dağıtık kilitlerin nasıl uygulanacağını açıklar. Redis'te bir setNx komut işlemi vardır, eğer yoksa, bu bir küme değerdir ve 1 döner. Eğer varsa, ayarlanmaz ve 0 döndürür. Redis'in tek iş parçacığı özelliği kullanılarak, yüksek eşzamanlılık sahnesi mesaj kuyruğu üzerinden seri haline getirilir. Ancak, dağıtılmış kilitlerde bazı tuzaklar var, bu yüzden dikkatli olmalısınız.
Bağlantı girişi görünür. 3. MVCC mekanizması mı?
3.1 MVCC mekanizması nedir? MVCC, çok versiyonlu bir eşzamanlılık kontrol mekanizmasıdır.
3.2 Hangi sorunlar çözülebilir? Kilitleme mekanizması eşzamanlı işlemleri kontrol edebilir, ancak sistem yükü büyüktür ve MVCC çoğu durumda sıra seviyesindeki kilitlerin yerini alabilir, bu da sistem yükünü azaltabilir ve performansı artırabilir.
Bağlantı girişi görünür.
4. Mesajlarda ayrıca bir kimlik etkisi sorunu vardır
Örneğin, mesajların tekrar tekrar tüketilmesini nasıl önleyebilirim?
MQ'daki mesaj ara yazılımında bunlar anlaşılmalı ve anlaşılmalıdır.
|