Dağıtılmış işlem çerçevesinin şifresini çözme-Fescar

1. Dağıtılmış işlem

Önceden dağıtılmış işlemler olmadan dağıtılmış işlemleri kullanamazdım, çünkü bu çok fazla karmaşıklık yaratırdı. İnternette birçok açık kaynak dağıtılmış işlem çerçevesi olmasına rağmen, bunlar çok olgun değiller ve çok fazla iş doğrulamasına sahip değiller. Dağıtılmış ileti kuyruğu ara yazılımları gibi çok sayıda olgun çözüme sahip diğer dağıtılmış ara yazılımlara benzemez: Apache Kafka, Apache RocketMQ, Apache Pulsar, bu üçü Apache üst düzey projelerdir; başka bir örnek dağıtılmış görev planlamasıdır, ayrıca XXL-JOB, Elastic-Job gibi birçok açık kaynak birçok şirket tarafından kullanılmaktadır.

2. Fescar'ı tanıma

Fescar hakkında konuşmadan önce, işte ünlü 2PC: XA İşlemlerine kısa bir giriş. XA protokolünde iki aşama vardır:

Birinci aşama: işlem yöneticisi, işlemde yer alan her veri tabanının bu işlemi önceden gerçekleştirmesini ve gönderilip gönderilemeyeceğini yansıtmasını gerektirir İkinci aşama: işlem koordinatörü, her veri tabanının verileri işlemesini veya verileri geri almasını ister.

Avantajlar: Verilerin güçlü tutarlılığını sağlamaya çalışın ve uygulama maliyeti düşüktür.Büyük ana veri tabanlarında kendi uygulaması vardır. MySQL 5.5'ten desteklenir.

Dezavantajları:

  • Tek nokta problemi: İşlem yöneticisinin tüm süreçteki rolü çok önemlidir.Örneğin, ilk aşama tamamlanmışsa ve ikinci aşama tamamlanmak üzereyken işlem yöneticisi aşağı inerse, kaynak yöneticisi Engellendi ve veritabanının kullanılamaz hale gelmesine neden oldu.
  • Eşzamanlı engelleme: Hazır olduktan sonra, kaynak yöneticisindeki kaynak gönderim tamamlanıncaya ve kaynak serbest bırakılıncaya kadar engellenmiştir.
  • Veri tutarsızlığı: İki aşamalı kesinleştirme protokolü, dağıtılmış verilerin güçlü tutarlılığı için tasarlanmış olsa da, yine de veri tutarsızlığı olasılığı vardır.Örneğin, ikinci aşamada, koordinatörün bir işlem gerçekleştirme bildirimi gönderdiğini, ancak bildirimin ağ sorunlarından kaynaklandığını varsayalım. Katılımcıların yalnızca bir kısmı kesinleştirme işlemini aldı ve gerçekleştirdi ve geri kalan katılımcılar bildirimi almadıkları için bloke durumundaydı. Şu anda veri tutarsızlığı meydana geldi.
  • Yalnızca tek bir veritabanı türü için kullanılabilir, çapraz veritabanı türleri, önbellek veya dosyalar gibi diğer kaynaklar desteklenmez.

Genel olarak, XA protokolü nispeten basit ve düşük maliyetlidir, ancak tek nokta sorunu ve yüksek eşzamanlılığı destekleyememesi (eşzamanlı engelleme nedeniyle) hala en büyük zayıflıklarıdır.

XA protokolünün birçok sorunu olduğu görülebilir, bu nedenle dağıtılmış bir işlem çözümü olarak tartışıldığında acımasızca öldürülür, ancak XA, işi istila etmemesi (veritabanı seviyesi) ve işte ek kod yazmaya gerek olmaması açısından iyi bir avantaja sahiptir. , İşe daha fazla dikkat edin.

Makalemde, uygulama düzeyinde birkaç dağıtılmış işlem tanıttım, ancak bunlar iş için aşağı yukarı müdahaleci. Örneğin, TCC'mizde, yaygın olarak kullanılan bazı TCC çerçevelerinin, mevcut işletmeleri dönüştürmek için dene, onayla, iptal et ve diğer arayüzleri yazması gerekir. Yerel mesaj tablosu modu kullanılıyorsa, ek tabloların eklenmesi gerekir. RocketMQ gibi işlem mesajları kullanılıyorsa, mesaj kuyruğunu kullanmayan bazı işletmelerin mesaj kuyruğunu değiştirmesi gerekecektir. Saga modu benimsenirse ileri ve geri arayüzler de yazmamız gerekir. Görülebileceği gibi, hangi dağıtılmış işlem şeması benimsenirse, belirli iş dönüşümü ve işletmeye girme maliyetleri olacaktır.

Fescar, XA'nın müdahaleci olmayan avantajlarını diğer uygulama katmanı işlem protokollerinin yüksek performans avantajlarıyla birleştirir ve temelde iş koduna müdahale edilmeden uygulama katmanında iki aşamalı protokol işlemini gerçekleştirir.

2.1 Fescar ve XA

Fescar, iki aşamalı kesinleştirme protokolünün dağıtılmış bir işlemi olmasına rağmen, yukarıdaki XA'nın bazı eksikliklerini çözer:

  • Tek nokta sorunu: Fescar (0.4.1) şu anda tek bir sunucu olmasına rağmen, Fescar resmi olarak tek nokta sorununu çözecek olan HA-Cluster'ı 0.5.x'te başlatmayı bekliyor.
  • Eşzamanlı engelleme: Fescar'ın ikinci aşamasında, yerel işlem ilk aşamada kaynakları serbest bırakmak için taahhüt edilmiştir. Bu, XA'nın kaynakları iki hazırlama ve işleme aşamasında kilitlemesi gibi değildir ve Fescar ve commit eşzamansız işlemlerdir. Performansı artırmanın anahtarı.
  • Tutarsız veriler: Bazı kesinleştirme başarısız olursa, fescar-server mevcut işlem moduna ve şube işleminin iade durumunun sonucuna göre farklı yeniden deneme stratejileri gerçekleştirecektir. Ve fescar'ın yerel işlemi ilk aşamada gerçekleştirilecektir Aslında, yalnızca veri tabanına bakıldığında, veri tabanı kesinleştirme sırasında zaten tutarlıdır.
  • Yalnızca tek bir veritabanı için kullanılabilir: Fescar, AT ve MT olmak üzere iki mod sağlar. AT modunda, işlem kaynağı, ACID'yi destekleyen herhangi bir veritabanı olabilir. MT modunda, işlem kaynağı sınırsızdır ve bir önbellek, bir dosya veya başka bir şey olabilir. Elbette bu iki mod da karıştırılabilir.

Aynı zamanda, Fescar aynı zamanda sıfıra yakın iş saldırısı avantajını da korur: İstediğimiz amaca ulaşmak için Fescar'ın veri proxy'sini yapılandırın, bir açıklama ekleyin ve bir Undolog tablosu ekleyin.

3. Fescar genel tasarımı

Fescar'ın tasarımının özü, rol sınıflandırmasıdır. Veritabanındaki hem XA hem de Fescar'ın iki rolü vardır: TM (işlem yöneticisi) ve RM (kaynak yöneticisi) ve Fescar'ın ayrıca bir TC'si (işlem koordinatörü) vardır. Öncelikle TC yoksa sadece TM ve RM varsa ne olacağına bir bakalım. Burada basit bir örnek vereceğim, Xiao Ming aşağıdaki şekilde gösterildiği gibi bir ürün satın almak için web sitesine gitti:

Xiaoming burada aslında TM (işlem yöneticisi) ve mallar ve hesaplar aslında RM'mizdir (kaynak yöneticisi) Normal şartlar altında, sorulan soru olmayabilir ve hesap ve envanter başarıyla düşülebilir. Xiaoming envanteri düşürmeyi başarır ancak hesabı düşürürken başarısız olursa, envanter kaynaklarımızı geri almamız gerekir. Xiao Ming, önceki aşamada düşülen malları telafi etmek için envanteri şu anda bilgilendirecek. Ancak, envanter geri alındığında envanter hizmeti kararsızdı ve geri alma bu sefer başarısız oldu. Genel olarak konuşursak, Xiao Ming başarılı olana kadar tekrar denemeye devam edecek. Yani Xiao Ming'in her zaman engellendiği ve hiçbir şey yapamadığı bir sorun var. Bu, ikinci aşama tamamlama / geri alma her zaman TM'yi engelleyeceği için de görülebilir.Netease DDB'nin XA protokolü, bu durum için bir asenkron evre işlemi yapacaktır. Ancak Fescar'da her şey TC tarafından yapılıyor.Tabii ki, TC sadece ikinci aşama başarısız tekrar denemesini yapmakla kalmayacak, aynı zamanda ikinci aşamada RM'nin tüm taahhütlerini ve geri dönüşlerini yapacak, böylece TM'miz daha az iş yapacaktır.

Fescar'da TM, RM ve TC arasındaki ilişki aşağıdaki resmi diyagramda gösterilmektedir:

  • TM: İşlemin başlatıcısı. TC'ye küresel bir işlemin başlangıcını, gerçekleştirilmesini ve geri alınmasını anlatmak için kullanılır.
  • RM: belirli işlem kaynakları, her RM TC'ye bir şube işlemi olarak kaydedilecektir.
  • TC: İşlemin koordinatörü. İşlem kaydı, gönderim ve geri alma işlemlerimizi almak için kullanılan Fescar-servr olarak da kabul edilebilir.

Bu üç rol arasındaki işbölümü açıktır ve bu Fescar'ımızın gerçek özüdür.Ardından, Fescar'ı nasıl kullanacağınızla ilgili olarak size bu üç rol hakkında daha derin bir anlayış vereceğim.

4. Fescar'ı hızlı bir şekilde başlatın

Fescar'ın github https://github.com/fescar-group/fescar-samples adresinde basit bir örnek sağlanmıştır, burada bu örneği indirmemiz gerekiyor.

4.1 TC Fescar sunucusu oluşturma

Her şeyden önce, Fescar-Server'ı kurmak için çağrılabilecek bir işlem koordinatörü oluşturuyoruz.Resmi web sitesinin örneği, Nacos artı fescar-server'ın çalışması için oluşturulmuş jar paketini kullanmaktır. Burada bize kolaylık sağlamak için, fescar https://github.com/alibaba/fescar kodunu doğrudan indirebiliriz.

Sunucumuzu bulun:

Ana yöntemi doğrudan çalıştırın; bu, yerel olarak 8091 bağlantı noktası numaralı bir fescar-sunucu hizmeti başlatmamıza yardımcı olacaktır. Servis kaydı yapmak istiyorsak, kayıt defteri.conf altında türü değiştirebiliriz.

0.4.1 sürümünde, nacos, eureka, redis ve zk olmak üzere dört hizmet kaydının desteklendiği görülebilir. Şu anda, hizmet kaydı için redis kullanımıyla ilgili bir sorun var, ayrıca düzeltme için yetkiliye bir PR'dan bahsetmiştim. Elbette kolaylık sağlamak için aslında dosyayı seçiyoruz ve doğrudan bağlanmamız bizim için en uygun olanı.

Ana yöntemi çalıştırdıktan sonra Sunucu başlatıldı günlüğü görünürse, TC'mizin (işlem koordinatörümüz) başarıyla başladığı anlamına gelir.

4.2 ÇB'yi Tanı

Yukarıdaki işlem koordinatörü kuruldu. Yapmamız gereken bir sonraki şey TM ve RM'yi çalıştırmak ve ilgili işlemleri işlem koordinatörümüze devretmek. Şu anda fescar-sample projesini açmamız gerekiyor: Bu projede kullanılan RPC Dubbo olduğu için, varsayılan servis kayıt merkezi Nacos ve yerel olarak bir Nacos kurmamız gerekiyor. Spesifik kurulum kendimiz tarafından araştırılabilir.Bunu burada tartışmayacağım.

Buradaki resmi örnekte, iş ilişkisi aşağıdaki gibidir:

İşletmenin TM'iz olduğunu görebilir ve ilgili kodu bulabilirsiniz:

Koddan, dağıtılmış bir işlem başlatmak için @GlobalTransactional ek açıklamasını eklememiz gerektiğini biliyoruz.Elbette, Fescar aynı etkiyi elde etmek için bir API de sağlıyor. Ayrıca, Registry.conf'daki Type'ı dosyaya değiştirmemiz gerekir.

Örnekte değilse, ancak bizim gerçek işimizde, iş kodunu değiştirmeye hiç gerek yoksa, bu ek açıklamayı doğrudan dağıtılmış işlem başlatıcımıza ekleyin.

Bu GloblTranscational ek açıklaması tam olarak ne yapıyor? Aslında, bu ek açıklamaya sahip olanlar GlobalTransactionalInterceptor adlı bir özelliğe gidecek ve daha sonra bu özellik, aynı zamanda TM'nin temel yöntemi olan TrascationTemplate sınıfındaki excute yöntemine girecek:

Yukarıdaki kod kısmen silinir ve yalnızca temel işlem seçilir. TrascationTemplate, aslında Fescar tarafından sağlanan bir API'dir.Eğer ek açıklamalar kullanılmazsa, onu da taklit edebiliriz. Beş ana adım olduğu görülebilir:

  • Geçerli bağlamda bir işlem olup olmadığını öğrenin, bu adım ThreadLocal aracılığıyla uygulanır, varsa, akımı alın, yoksa varsayılanı alın.
  • İşlemi başlatmak için bu adım, bir GloabTranscation kaydettirmek için TC'ye (işlem koordinatörü) bir istek göndermektir. Buradaki zaman aşımı, bu süre zarfında geri alma veya taahhüt olmadığı anlamına gelir ve TC, geri alma yapmamıza yardımcı olur.
  • iş yapmak.
  • Yöntem bir istisna atarsa, geri alma. Buraya istisnalar atmaya dikkat etmeliyiz.Çoğu zaman istisnaları yakalayacağız. Sonuç olarak, burada hiçbir istisna atılmayacak, bu yüzden geri alma olmayacak. Buradaki geri dönüş, ayrıca TC'ye bir geri alma isteği başlatmak içindir ve RM'yi geri almamıza yardımcı olur.
  • Herhangi bir anormallik yoksa, TC'ye bir taahhütte bulunun, TC, RM'ye eşzamansız olarak bir gönderim isteği göndermemize yardımcı olacaktır.
  • TM'nin temel süreci esas olarak bu 5 adımdır ve diğer ayrıntılı açıklamalar sonraki kodda yansıtılacaktır.

    4.3 RM'yi Anlamak

    Yukarıdaki İşletmemiz bir iş talebini başlattığında, RM sürecimize geliriz Depolama ve Sipariş hizmetlerimiz artık dağıtılmış bir işlemde olduklarını nasıl bilirler? Bunun RPC çerçevesinin yardımıyla yapılması gerekiyor.Burada Dubbo kullanıyoruz. Fescar, aşağıdaki şekilde gösterildiği gibi Dubbo için bir filtre sağlar:

    Burada xid'imizi dağıtılmış işlem kimliğimiz olan rpcContext'ten alacağız. Varsa, bu isteğin dağıtılmış bir işlemde olduğunu kanıtlarsa, XID, RootContext'e (fescar'ın yerel bağlamı) yerleştirilecektir. . Dubbo değilseniz, RPC'nizi de bu yönteme göre uyarlayabilirsiniz.

    RM'de ne yapmalıyız? Sadece aşağıdaki iki adımı uygulayın:

  • Veri kaynağını Fescar proxy olarak değiştirin
  • Günlük geri dönüşünü kaydetmek için geçerli veritabanına bir Undolog tablosu ekleyin.
  • Fescar'da yalnızca dataSource proxy'si değil, aynı zamanda aşağıda gösterildiği gibi bağlantı ve ifade de var:

    Herkes SQL'imizin belirli bir şekilde yürütülmesinin İfade'ye dayanması gerektiğini bilir.Fescar'ın İfade Proxy'sinde aşağıdaki kodlar vardır:

    Çalıştırma yönteminin ExecuteTemplate.execute olduğunu görebilirsiniz. Yürütme yönteminde, Undolog'umuz yürüttüğümüz ifade türüne göre kaydedilecektir. Özel yürütme süreci için aşağıdaki resmi resme bakın:

    Genel olarak, RM'mizin iki ana temel süreci vardır: Biri dağıtılmış işlemlerin nasıl tanımlanacağı, diğeri ise orijinal basit SQL yürütme sürecimizin veri kaynağı aracımız aracılığıyla daha fazla şey yapmasına izin vermektir.

    5. Özet

    Bu makaleyi yazmanın amacı sadece herkesin Fescar'ı tanımasını sağlamak değil, aynı zamanda daha fazla kişiye mükemmel bir dağıtılmış işlem çerçevesinin ne yapması gerektiğini bilmesini sağlamaktır. Fescar'ın güncel sürümü 0.4.1 ve HA-Cluster, SpringCloud entegrasyonu gibi pek çok özellik henüz piyasaya sürülmedi. Bu nedenle, çevrimiçi kullanırsanız, Fescar tek nokta sorunlarıyla karşılaşabilirsiniz, bu nedenle çevrimiçi kullanım çok tavsiye edilmez. Fescar'ın mevcut planı, HA-Cluster'ı 0.5.x sürümünde başlatmaktır ve tek nokta sorunu o zaman çözülecektir.

    Bu makalenin ilkesi şu anda görece yüzeyseldir.Eğer onu derinlemesine anlamanız gerekiyorsa, burada en son bir ilgili mimari video derleyeceğim ve Java mülakat materyallerini burada tamamlayacağım, bu da hala dağıtımda mücadele edenlere kesinlikle yardımcı olacaktır.

    Elde etme yöntemi: ileri + arka planda "Java bilgileri" özel mesajını takip edin

    39 yaşındaki TVB oyuncusu "Love Home" a yeni bir rolle katılıyor ve Liu Dan ile bir ilişkisi var.
    önceki
    Volkswagen Tarok Pickup Konsept Otomobili Ben Xiaokang'a Yardım Etmek İçin Çıktı
    Sonraki
    Koca yöneticileri ve aile içi şiddeti "yemek" çalmak için tekmelendi! 49 yaşındaki oyuncu gece geç saatlerde netizenleri spekülasyon yapmaya kışkırtıyor
    Programcıda genellikle göz ardı edilen teknik kelime dağarcığı devam ediyor
    Bir adam, uçağın ambar kapısından kalkmasını engelledi ama gerçek insanları ağlattı ...
    Oynayabilir! Bu merkezi girişim, dinozorlar çağına giden bir kuyu kazmak için zaman aldı ...
    1L petrol 1328.93KM Honda Çin Enerji Tasarrufu Yarışması
    Zaobao | Chuanmei Grubu 4 milyar ABD doları topladı; Ali "Luohantang" ın kurulmasını savunuyor
    Balayı için üç kişilik ön ödeme? TVB'nin erkek yıldızı ve kız arkadaşı geziye çıkıyor
    BAPE x adidas yeni ortak sürüşü sınırlı pozlama! Çıkış tarihi birlikte yayınlandı!
    Brilliance Renault Guangzhou Otomobil Fuarı serisi, Guanjing ve diğer modeller görücüye çıktı
    Başınızın üzerindeki klima braketi ne kadar süreyle asılı kaldı? 16 yıldır faydalı oldu!
    Kesinlikle konuşmak ister misin? 35 yaşındaki popüler erkek tanrı, kız arkadaşıyla evlenme niyetinde olmadığını açıkça söyledi.
    Porsche markası ilk Çin Uluslararası İthalat Fuarı'na katıldı
    To Top