Kurumsal WeChat organizasyon yapısının senkronizasyonu ve optimizasyonu için fikirler ve pratik alıştırmalar

Yazar Hu Teng

Düzenle Xiaozhi

Kurumsal düzeyde bir WeChat olarak, hızlı iş geliştirme bağlamında, yinelemeli optimizasyon gereksinimleri giderek daha acil hale geliyor. Kurumsal WeChat'in ilk sürümünün tam senkronizasyon çözümü, hızlı iş büyümesi karşısında zaten mücadele ediyor. Karşılaştığı sorunlar göz önüne alındığında, organizasyon yapısı senkronizasyonu nasıl optimize edilir? Bu, WeChat ekibinden başka bir teknik gerçek savaş.

Önüne yaz

Kurumsal WeChat'in hızlı gelişimi sürecinde, büyük kuruluşlar art arda kullanıma katılmıştır.Kurumsal WeChat'in ilk sürümü tam bir senkronizasyon çözümünü benimser.Bu çözüm, büyük kuruluşlarda hem trafik hem de performansta sorunlara sahiptir. Her senkronizasyon büyük miktarda veri tüketir ve iPhone 5'lerde kullanılır. 10w + üye yapı paketini çıkarırken, bir bellek uyarısı verecek ve uygulama çökecektir.

Hızlı iş gelişimini tam senkronizasyon çözümleriyle desteklemek zordur ve senkronizasyon çözümlerini optimize etmek giderek daha fazla gereklidir. Bu makale, tam senkronizasyon şemasında karşılaşılan sorunları analiz eder, bir organizasyon yapısı artımlı senkronizasyon şeması önerir ve artımlı senkronizasyon şemasına ulaşmak için mobil terminalin fikirlerini ve zorluklarını açıklar.

Kurumsal WeChat iş geçmişi

Kurumsal WeChat'te organizasyon yapısı çok önemli bir modüldür.Kullanıcılar, şirketin organizasyon yapısını görüntülemek için ana sayfa sekmesinde "Adres Defteri" ni seçebilir ve "Adres Defteri" üzerinden şirketin tüm üyelerini bulabilir ve onlarla başlatabilir. Konuşma veya görüntülü ve sesli arama.

Organizasyon yapısı çok önemli ve hassas bir bilgidir.Kurumsal düzeyde bir ürün olan kurumsal WeChat, kullanıcı gizliliği ve güvenliğini her zaman önemli bir konuma getirir. Kurumsal yapı bilgileri için, kurumsal yöneticiler, yalnızca kişisel bilgilerin gizlenmesini desteklemekle kalmayıp aynı zamanda adres defteri görüntüleme izinleri gibi işlemleri de destekleyen yüksek tanecikli gizlilik koruması işlem izinlerine sahiptir.

Kurumsal WeChat'te, organizasyon yapısı özellikleri şunlardır:

1. Çoklu ağaç yapısı. Yaprak düğümler üyeleri temsil eder ve yaprak olmayan düğümler departmanları temsil eder. Bir departmanın en fazla bir üst departmanı vardır, ancak üyeler birden fazla departmana ait olabilir.

2. Mimari gizleme işlemi. Kuruluş yöneticileri, yönetim arka planında beyaz liste ve kara liste ayarlayabilir. Beyaz liste, tüm kuruluş yapısını görüntüleyebilir ve diğer üyeler bunları kuruluş yapısında göremez. Kara listenin üyeleri yalnızca kendi gruplarını ve tüm üst departmanlarını görebilir ve geri kalanlar kara listenin üyelerini görebilir.

3. Organizasyon yapısı operasyonu. Kurumsal yöneticiler departmanları ekleyebilir / silebilir, üyeleri ve diğer işlemleri web ve uygulama taraflarında ekleyebilir / silebilir / taşıyabilir / düzenleyebilir ve işlem sonuçları şirketin tüm üyelerine zamanında senkronize edilir.

Tam senkronizasyon şeması sorunu

Bu bölüm, tam senkronizasyon şemasının uygulanmasını ve karşılaşılan sorunları kabaca açıklamaktadır.

Tam senkronizasyon şeması prensibi

1.0 çağında, kurumsal WeChat kurumsal e-posta adres defteri senkronizasyon çözümünü istikrar ve hızlı yineleme açısından genişletti ve tam ölçekli bir senkronizasyon çözümünü benimsedi.

Temel fikir, sunucunun tüm düğümleri göndermesi ve istemcinin değiştirilen düğümleri bulmak için yerel verileri karşılaştırmasıdır. Buradaki düğüm bir kullanıcı veya bir departman olabilir.Kurumsal yapı bir ikili ağaç yapısı olarak kabul edilir ve altındaki kullanıcılar ve departmanlar düğümlerdir.Aynı kullanıcı birden fazla departman altında mevcutsa, çoklu düğüm olarak kabul edilir.

Tam senkronizasyon şeması, birinci senkronizasyon ve birinci olmayan senkronizasyon olmak üzere ikiye ayrılır:

  • İlk senkronizasyon için, sunucu tüm düğüm bilgisinin sıkıştırılmış bir paketini gönderecektir.İstemci bunu açtıktan sonra, tam yapı ağacı elde edilir ve görüntülenir.

  • İlk olmayan senkronizasyon iki adıma bölünmüştür:

  • Sunucu, tüm düğümlerin karma değerini gönderir. İstemci, silinen düğümü bulmak için yerel verileri karşılaştırır ve belleğe kaydeder ve yeni düğüm için talep edilecek belirli bilgileri karşılaştırır ve bulur.

  • İstemci, yeni eklenen düğümün belirli bilgilerini ister. Belirli bilgiler başarıyla talep edildikten sonra, senkronizasyon işleminin atomikliğini sağlamak için yerel veritabanının ekleme / güncelleme / silme işlemi gerçekleştirilir.

  • müşteri geribildirimi

    İlk sürüm piyasaya sürüldükten sonra, kurumsal yapıyla ilgili çok sayıda hata şikayeti alındı.

    • Veri tüketimi çok yüksek.

    • İstemci mimarisi web mimarisiyle tutarsızdır.

    • Organizasyon yapısı zaman içinde senkronize değildir.

    Bu sorunlar büyük şirketlerde daha belirgindir.

    Problem analizi

    Büyük işletmelerin senkronizasyonunu desteklemek için tam senkronizasyon çözümünün zorluğunun arkasındaki nedenleri araştırın. Bunun nedeni, sunucunun karma değerlerin tam dağıtımını benimsemiş olmasıdır. Çözümün aşağıdaki sorunları vardır:

  • Çok fazla gereksiz bilgi çekin. Yalnızca bir üye bilgisi değişikliği olsa bile, sunucu karma düğümlerin tamamını yayınlayacaktır. Yüzbinlerce kişinin yaşadığı büyük işletmeler için bu tür trafik tüketimi oldukça fazladır, bu nedenle büyük işletmelerde güncelleme sıklığını olabildiğince azaltmak gerekir, ancak mimari verilerin zaman içinde güncellenmesine neden olacaktır.

  • Büyük şirketler bilgi edinme eğilimindedir. Tam senkronizasyon çözümünde, ilk senkronizasyon mimarisi tek seferde tam mimari ağacının sıkıştırılmış paketini çekecektir ve bu paketin süper büyük işletmeler için verileri onlarca megabayttır ve dekompresyondan sonra yüzlerce megabayt olabilir.Yetersiz belleğe sahip alt uç cihazlar için mimari ilk kez yüklenebilir. Yetersiz bellek nedeniyle çökme. İlk olmayan senkronizasyon Yeni eklenen düğümleri karşılaştırırken ve belirli bilgiler talep ederken, veri hacmi çok büyük olabilir ve istek zaman aşımı ile karşılaşılabilir.

  • İstemci geçersiz verileri filtreleyemez. İstemci, karma değerinin özel anlamını anlamaz, bu nedenle karma değeri yerel olarak karşılaştırılırken geçersiz karma filtrelenemez ve organizasyon yapısı görüntüleme hataları meydana gelebilir.

  • Organizasyon yapısı senkronizasyon programını optimize etmek gittikçe daha fazla gereklidir.

    Optimizasyon fikirleri arıyor

    Senkronizasyon şemasının optimizasyon noktalarını ararken, orijinal şemanın acı noktalarını ve mantıksız noktalarını bulur ve şemayı ayarlayarak bu sorundan kaçınırız.

    Organizasyon yapısının senkronizasyonundaki zorluklar

    Organizasyon yapısını doğru bir şekilde senkronize etmek ve en az kaynağı tüketmek çok zordur. Asıl zorluklar şunlardır:

    • Organizasyon yapısı büyük miktarda veriye sahiptir. Bir mesaj / kişi senkronizasyonu için veri miktarı genellikle yüzden fazla değildir ve aktif WeChat kuruluşunda on binlerce hatta yüz binlerce düğümü olan birçok işletme vardır, bu da tek seferde senkronize edilen veri miktarının kolayca onbinlerce olabileceği anlamına gelir. . Mobil terminalin trafik tüketimi kullanıcılar için çok önemlidir ve bellek sınırlıdır.Trafik tüketimini azaltmak ve bellek kullanımını azaltmak ve mimari ağacının tam senkronizasyonunu sağlamak kurumsal WeChat'in hedefleridir.

    • Mimari kurallar karmaşıktır. Organizasyon yapısı görüntülenecek tüm yapı ağacına senkronize edilmelidir ve kurumsal WeChat karmaşık gizli kurallar içerir.Güvenlik nedenleriyle, istemci gizli üyeler almamalıdır.

    • Değişiklikler sık ve büyük değişikliklerdir. Organizasyon yapısının ayarlanmasında, yeni departmanların kurulduğu ve bazı üyelerin yeni departmanlara taşındığı durumlar vardır ve ayrıca bir departmanın feshedildiği durumlar da vardır. Ve çalışanların istifası da organizasyon yapısı aracılığıyla senkronize edilecek, bu da süper büyük işletmelerin temelde her gün değişeceği anlamına geliyor.

    Teknik seçim-artan güncelleme planı önerin

    Yukarıda bahsedilen sorunlar, büyük işletmelerde daha belirgin hale gelecektir. Birkaç tur plan tartışmasından sonra, artan güncellemeler elde etmek için orijinal plana iki özellik ekledik:

  • Artış. Sunucu, organizasyon yapısı değişikliğinin geçmişini kaydeder ve istemci, yapıyı aşamalı olarak senkronize etmek için sürüm numarasını kullanır.

  • Parçalanma. Senkronizasyon organizasyon yapısının arayüzü, eşik değerinin parçalanmasını ve çekilmesini destekler.

  • Yeni çözümde, sunucunun bir düğüm için depolama yapısı şu şekilde basitleştirilebilir:

    vid, düğüm kullanıcısının benzersiz kimlik kimliğini, departman kimliği, düğümün departman kimliğini ve is_delete, düğümün silinip silinmediğini belirtir.

    • Düğüm silinirse, sunucu gerçekte düğümü silmez, ancak is_delete öğesini true olarak işaretler.

    • Düğüm güncellenirse, sunucu kaydedilen sırayı artıracak ve istemci bir sonraki senkronizasyonunda senkronizasyon yapabilecektir.

    Bunların arasında seq, sürüm numarası olarak anlaşılabilecek artırılmış bir değerdir. Organizasyon yapısının düğümü her güncellendiğinde, sunucu ilgili düğümün sıra değerini artırır. İstemci, sunucuyu eski bir sıra aracılığıyla ister ve sunucu, artımlı güncellemeyi tamamlamak için bu sıra ile en son sıra arasındaki tüm değişiklikleri istemciye gönderir.

    Resim:

    Artımlı senkronizasyon şemasını önererek, problemi teknik seçim seviyesinden çözdük, ancak fiili operasyonda birçok problemle karşılaşacağız.Aşağıda şema prensibini ve fiili operasyonda karşılaşılan problemleri açıklayacağız.

    Artımlı senkronizasyon şeması

    Bu bölüm temel olarak istemcideki artımlı senkronizasyon mimarisi şemasının ilkesini ve uygulamasını açıklar ve temel kavramları açıklar.

    Artımlı senkronizasyon şeması prensibi

    Kurumsal WeChat'te artımlı senkronizasyon çözümünün temel fikri şudur:

    Sunucu artımlı düğümler gönderir ve artımlı düğümleri parçalar halinde çekmek için gönderme eşiklerini destekler.Sunucu istemcinin farkını hesaplayamazsa, farklılıkları karşılaştırmak için istemciye tam düğüm sayısı gönderilir.

    Artımlı senkronizasyon şeması dört adımda özetlenebilir:

  • İstemci yerel sürüm numarasını iletir ve değiştirilen düğümü çeker.

  • İstemci, değiştirilen düğümü bulur ve düğümün belirli bilgilerini alır.

  • Müşteri verileri işler ve sürüm numarasını depolar.

  • Tüm yapının senkronizasyonunun tamamlanıp tamamlanmadığını belirleyin Tamamlanmamışsa, 1. adımı tekrarlayın. Tüm yapının senkronizasyonu tamamlandıysa, yerel senkronizasyon durumunu temizleyin.

  • Çeşitli sınır koşullarını ve anormal koşulları göz ardı ederek, artımlı senkronizasyon şemasının akış şeması şu şekilde özetlenebilir:

    Şimdi, artımlı senkronizasyon çözümündeki temel kavramlara ve tüm sürece bir göz atalım.

    versiyon numarası

    Senkronize sürüm numarası, birden çok sürüm numarasından oluşan bir dizedir.Sürüm numarasının özel anlamı istemci için şeffaftır, ancak sunucu için çok önemlidir.

    Sürüm numarasının bileşenleri şunlardır:

    Sürüm numarası geri alma

    Artımlı senkronizasyon, gerçek işlemde bazı sorunlarla karşılaşacaktır:

  • Sunucunun silinen kayıtları kalıcı olarak saklaması imkansızdır Silinen kayıtlar sunucu için anlamsızdır ve kalıcı depolama çok fazla sabit disk alanı kaplar. Ve çok fazla geçersiz veri, mimari okuma hızını da etkileyecektir. İs_delete düğümlerinin sayısı belirli bir eşiği aştığında, sunucu is_delete true olan tüm düğümleri fiziksel olarak silecektir. Şu anda, müşteri yerel karşılaştırma için tüm veri miktarını yeniden çekecektir.

  • Mimari gizleme kuralları değiştirildikten sonra, sunucunun artımlı düğümü hesaplaması zordur.Şu anda, tam düğüm sayısı verilecek ve istemci farkı karşılaştıracaktır.

  • İdeal olarak, sunucu tüm düğümleri gönderirse, istemci eski verileri atar ve tüm düğümlerin bilgilerini çeker ve yeni verilerle bunların üzerine yazar. Ancak, bunu mobil terminalde yapmak, çok fazla kullanıcı trafiği tüketecektir ve bu da kabul edilemez. Bu nedenle, sunucu tam sayıda düğüm gönderirse, istemcinin ekleme, silme ve değiştirme düğümlerini yerel olarak karşılaştırması ve ardından değiştirilen düğümün belirli bilgilerini çekmesi gerekir.

    Artımlı senkronizasyon durumunda, sunucu tam sayıda düğüm gönderirse, bu makalede bu durumu sürüm numarası geri alma olarak adlandırıyoruz ve etki, mimariyi senkronize etmek için boş bir sürüm numarası kullanan istemci tarafına benzer. İstatistiksel sonuçlardan, çevrimiçi sürüm senkronizasyonunun% 4'ünde sürüm numarası geri alınacaktır.

    Eşik parçası çekme

    İstemci tarafından iletilen sıra çok eski ise, artımlı veriler büyük olabilir. Şu anda, güncellenen tüm veriler bir defada iade edilirse, müşteri tarafından talep edilen veri miktarı büyük olacak, süresi uzun olacak ve başarı oranı çok düşük olacaktır. Bu senaryo için, istemci ve sunucunun bir eşik üzerinde anlaşması gerekir.İstenen güncelleme verilerinin toplam sayısı bu eşiği aşarsa, sunucu her seferinde eşiği aşmayan en fazla veriyi döndürür. İstemci, sunucu tarafından döndürülen veri miktarının eşiğe eşit olduğunu tespit ederse, sunucu tarafından gönderilen veri miktarı eşiğin altında olana kadar sunucudan tekrar veri talep edecektir.

    Düğüm yapısı optimizasyonu

    Tam senkronizasyon şemasında, düğümler hash ile benzersiz şekilde tanımlanır. Sunucu tarafından gönderilen tam karma liste, istemci yerel olarak depolanan tam karma listeyi karşılaştırır ve yeni bir karma değer varsa düğüm hakkında belirli bilgiler ister ve silinmiş bir karma değer varsa, istemci düğüm bilgisini siler.

    Tam senkronizasyon şemasında, müşteri karma değerin özel anlamını anlayamaz ve müşterinin verilen karma listeyi doğru şekilde işlememesine neden olabilecek aşırı hash çarpışması durumuyla karşılaşabilir.

    Artımlı senkronizasyon şemasında, hash değeri yerine protobuf yapısı kullanılır ve artımlı güncellemede düğümün protokolü şu şekilde tanımlanır:

    Artımlı senkronizasyon şemasında vid ve partyid, düğümleri benzersiz şekilde tanımlamak için kullanılır ve karma değer tamamen terk edilir. Bu şekilde, artımlı senkronizasyon sırasında müşteri düğümün spesifik anlamını tam olarak anlar ve aynı zamanda tam senkronizasyon şemasında karşılaşılan tekrarlanan karma değerlerin anormal durumundan da kaçınır.

    Ve seq'i düğüm yapısına getirin. Düğümdeki sıra, düğümün sürümünü temsil eder. Düğümün belirli bilgileri her güncellendiğinde, sunucu düğümün sırasını artıracaktır. İstemci, sunucu tarafından verilen düğüm sırasının istemcinin yerel sırasından daha büyük olduğunu bulur ve talep etmesi gerekir Geçersiz düğüm bilgisi talebini önlemek için belirli düğüm bilgileri.

    Tüm yapının senkronize olduğuna karar vermek

    Svr arayüzü, değiştirilen düğümlere toplu çekme eşikleri göndermeyi desteklediğinden, bir ağ işlemi, mimari senkronizasyonunun tamamlandığı anlamına gelmez. Peki mimari senkronizasyonunun tamamlandığına nasıl karar veriyorsunuz? İstemci ve sunucu arasında burada kararlaştırılan plan şudur:

    Sunucu tarafından verilen (yeni düğüm + silinmiş düğüm), istemci tarafından iletilen eşikten düşükse, mimari senkronizasyonun aşıldığı kabul edilir.

    Tüm mimarinin senkronizasyonu tamamlandıktan sonra, müşterinin önbelleği temizlemesi ve departmandaki kişi sayısını hesaplama ve üye arama popülerliğini hesaplama gibi bazı ek iş görevlerini gerçekleştirmesi gerekir.

    Artımlı senkronizasyon şeması-tam akış şeması

    Çeşitli sınır koşullarını ve anormal durumları hesaba katarak, artımlı senkronizasyon şemasının tam akış şeması şöyledir:

    Artımlı senkronizasyonun zorlukları

    Artımlı ve parçalayıcı özellikleri ekledikten sonra, yüz binlerce insanı olan büyük kuruluşlar için, mimari senkronizasyonun bütünlüğünün nasıl sağlanacağı ve sürüm numarası geri alma senaryosunda çözümlerin seçimi zor bir nokta haline geldi.

    Yukarıda belirtildiği gibi, gizli kural değiştikten ve arka planda geçersiz düğümlerin fiziksel olarak silinmesinden sonra, istemci çok eski bir sürümle senkronize edilirse, sunucu artımlı düğümü hesaplayamaz.Bu sırada, sunucu tüm düğümleri çıkarır ve istemcinin tüm düğümleri yerel olarak karşılaştırması gerekir. Veriler değiştirilen düğümü bulur Bu senaryo, sürüm numarası geri dönüşü olarak anlaşılabilir. Bu senaryoda, yüz binlerce düğümü olan çok büyük bir kuruluş için, sunucu çok fazla artımlı düğüm gönderirse, müşteri istek süresi çok uzun olacak ve başarı oranı çok düşük olacaktır, bu nedenle artışı çekmesi gerekir. düğüm. Üstelik, aşağı çekilen tüm düğümler için, istemci işlemi tam düğümlerin belirli bilgilerinin eski verilerin üzerine yazmasını isteyemez Bu durumda, sürüm numarası her geri alındığında trafik tüketimi çok büyüktür.

    Bu nedenle, yüz binlerce düğüm ile çok büyük işletmelerin artımlı senkronizasyonu için müşterinin zorluğu şudur:

  • http. Artımlı senkronizasyon sırasında, istemci bir ağ sorunu ile karşılaşırsa veya uygulama askıya alınırsa, ağ veya uygulama bir sonraki sefer devam ettiğinde, senkronizasyon önceki senkronizasyonun ilerleyişiyle devam edebilir.

  • Senkronizasyon sırasında normal ekran etkilenmeyecektir. Çok büyük kuruluşların senkronizasyonu uzun sürebilir ve normal organizasyon yapısı görünümü senkronizasyon sırasında etkilenmemelidir.

  • Kontrol senkronizasyonu zaman alıcıdır. Çok büyük bir kuruluşun sürüm numarasının geri alındığı senaryoyu senkronize etmek çok zaman alıyor, ancak işlemi hızlandırmanın ve senkronizasyonun zaman tüketimini azaltmanın yollarını bulmamız gerekiyor.

  • Fikirler

  • Mimari senkronizasyon başlar ve işlemeyi hızlandırmak için mimari ağaç bellekte önbelleğe alınır.

  • Sunucu, sürüm numarasının geri alınmasını gerektiren bir bayrak gönderirse, veritabanındaki düğüm bilgileri yerel olarak yedeklenecektir.

  • Sunucu tarafından yayınlanan tüm güncelleme düğümleri mimari ağacında sorgulanır, bulunursa yedekleme verileri resmi verilere dönüştürülür. Bulunmazsa, bu yeni bir düğümdür ve belirli bilgilerin mimari ağacına çekilmesi ve kaydedilmesi gerekir.

  • Tüm mimarinin senkronizasyonu bittiğinde, tüm yedekleme düğümleri db'de bulunur ve silinir ve önbellek ve senkronizasyon durumu temizlenir.

  • Sunucu tüm düğümleri gönderirse, istemcinin işlem sırası şeması:

    Sunucu bir sürüm numarası geri alma işareti gönderir

    Sunucu tarafından verilen sürüm numarası geri alma bayrağının çok önemli bir sinyal olduğu sıra diyagramından görülebilir.

    Sürüm numarası geri alma işareti yalnızca ilk senkronizasyonda yeni sürüm numarasıyla birlikte verilecektir. Tüm mimarinin senkronizasyonu sırasında, istemcinin etiketi önbelleğe alması ve sürüm numarasıyla birlikte veritabanında depolaması gerekir. Tüm mimarinin senkronizasyonu tamamlandıktan sonra, sürüm numarasının geri alınıp alınmadığına göre veritabanında silinecek düğümün silinmesine karar verilmesi gerekir.

    Yedek şema ağacı düzeni

    Şema ağacı yedeklemesi için en basit çözüm, verileri db olarak kopyalayıp yeni bir tabloda depolamaktır. Veri miktarı azsa hiç sorun olmaz ama mimari ağaçta çoğu zaman çok sayıda düğüm vardır.Mobil tarafta bu kadar basit ve kaba bir çözümün benimsenmesi tamamen istenmeyen bir durumdur.Yüzbinlerce kişinin olduğu bir işletmede, Bunu yapmak büyük performans sorunlarına neden olur.

    Değerlendirildikten sonra, WeChat kuruluşu tarafından benimsenen plan:

  • Mimari senkronize edildiğinde arka planda sürüm numarası geri alınmasını gerektiren bir bayrak yayınlanırsa, istemci önbellekteki ve db'deki tüm düğümleri bekleyen silme olarak işaretleyecektir (sıra diyagramında adımlar 8, 9).

  • Sunucu tarafından verilen güncelleme düğümü için, düğümün silinecek işareti mimari ağacında temizlenir (sıra diyagramında adım 10 ve 11).

  • Tüm mimarinin senkronizasyonu bittikten sonra, veritabanında silinmek üzere işaretlenmiş tüm düğümleri bulun ve silin (sıra diyagramında adım 13) ve önbelleğe alınmış tüm verileri temizleyin.

  • Ayrıca, artımlı senkronizasyon sürecinde, normal mimari ağaç görünümü etkilenmemelidir. Dolayısıyla mimari senkronizasyon sürecinde, db'de veri talep edecek bir üst katman varsa, silinmesi gereken düğümleri filtrelemek gerekir.

    Önbellek şema ağacı

    Çözüm, istemcinin tam düğüm karşılaştırmasından kaçınamayacağını belirler ve önemli bilgilerin bellekte önbelleğe alınması işlem hızını büyük ölçüde hızlandırır. Bellekteki yapı ağaç düğümü gövdesi şu şekilde tanımlanır:

    Burada mimari ağacını önbelleğe almak için std :: map kullanıyoruz ve anahtar olarak std :: pair kullanıyoruz. Düğümleri karşılaştırdığımızda, birçok sorgu işlemi söz konusudur ve harita sorgusu kullanmanın zaman karmaşıklığı yalnızca O (logn) olur.

    Artımlı senkronizasyon şemasının temel noktaları

    Bu bölüm, optimize edilmiş senkronizasyon şemasındaki kilit noktaları ayrı ayrı yazmaktadır.Bu kilit noktalar, yalnızca bu makalenin mimarisinin senkronizasyonu için değil, aynı zamanda çoğu senkronizasyon mantığı için de geçerlidir.

    Veri işlemenin tamamlandığından emin olduktan sonra, sürüm numarasını kaydedin

    Neredeyse tüm senkronizasyonlarda, sürüm numarası en önemli önceliktir.Sürüm numarası bozulduktan sonra, sonuçları çok ciddidir.

    Mimari senkronizasyonda en önemli nokta şudur:

    Veri işlemenin tamamlandığından emin olduktan sonra, sürüm numarasını kaydedin .

    Organizasyon yapısı senkronizasyonu senaryosunda, neden önce sürüm numarasını ve sonra verileri kaydedemiyorsunuz?

    Bu, organizasyon yapısı senkronizasyon verilerinin önemli bir özelliğini içerir: yapı düğümü verileri tekrar tekrar çekilebilir ve kapatılabilir.

    Gerçek operasyonda karşılaşılan gerçek sahneyi düşünün:

  • İstemci sunucudan yeni düğüm hakkında bilgi talep etmişse ve istemci şu anda yeni düğümü henüz eklemişse, sürüm numarası henüz kaydedilmemiştir ve istemci uygulaması sonlandırılır.

  • Şu anda, istemci yeniden başlatılır ve henüz işlenmiş olan düğümleri aşağı çekmek için aynı sürüm numarasını kullanır. Bu düğümleri yerel verilerle karşılaştırdıktan sonra, düğümün sırasının güncellenmediğini ve düğüm bilgilerini tekrar çekmeyeceğini göreceksiniz. Düğüm yinelemesine neden olur.

  • Önce sürüm numarasını kaydedip ardından belirli verileri kaydederseniz, yapı güncelleme verilerini kaybetme olasılığı olacaktır.

    Senkron atomisite

    Normal şartlar altında, senkronizasyon mantığı şu şekilde basitleştirilebilir:

    Kurumsal WeChat organizasyon yapısının senkronizasyonunda asenkron işlemler vardır.Senkronizasyon süreci atomikliği garanti etmezse, aşağıdaki şekilde gösterilen durum büyük olasılıkla gerçekleşir:

    Bu şekilde, senkronizasyonun ortasına kolayca sorunlara neden olabilecek başka bir senkronizasyon eklenir:

  • Çıktı sonucu kararsız. İki senkronizasyon hemen hemen aynı anda başlarsa, ancak ağ dalgalanmaları ve diğer koşullar nedeniyle, döndürülen sonuçlar farklı olabilir ve bu da hata ayıklamada büyük sorunlara neden olur.

  • Ara durum kafası karışır. Senkronizasyon sırasında işleme sunucusu tarafından döndürülen sonuç, senkronizasyon istendiğinde bir ara duruma bağlı olacaksa ve bu durum yeni bir senkronizasyon başlatıldığında sıfırlanacaksa, muhtemelen hayal edilemeyen bir istisnaya neden olacaktır.

  • Zamanlama bozuk. Tüm senkronizasyon süreci atomik olmalıdır.Eğer ortada başka senkronizasyon işlemleri eklenirse, tüm senkronizasyon sürecinin zamanlaması kaotik olacak ve bir istisna ortaya çıkacaktır.

  • Senkronizasyonun atomikliği nasıl sağlanır?

    Senkronizasyonu başlatırken senkronizasyonun yapıldığını belirtmek için bir bayrağı hatırlayabilir ve senkronizasyonu bitirirken bayrağı temizleyebiliriz. Başka bir senkronizasyon gelirse ve senkronizasyonun yapıldığı tespit edilirse, senkronizasyonu doğrudan iptal edebilir veya senkronizasyon başarılı olana kadar bekleyebilir ve başka bir senkronizasyon gerçekleştirebilirsiniz.

    Ek olarak, senkronizasyon zamanlamasını sağlamak için senkronizasyon serileştirilebilir Çoklu senkronizasyonların zamanlaması FIFO olmalıdır.

    Önbellek veri tutarlılığı

    Mobil cihazların senkronizasyon sürecinde iki tür önbellek vardır:

  • Hafıza önbelleği. Önbellek eklemenin amacı dosya GÇ işlemlerini azaltmak ve program işlemeyi hızlandırmaktır.

  • Disk önbelleği. Program sonlandırıldığında senkronizasyon durumunun kaybolmasını önlemek için disk önbelleği eklenir.

  • Bellek, çoklu önbellek senkronizasyonu ve ara senkronizasyon durumu sırasında verileri önbelleğe alır ve disk önbelleği, önbellek durumunun kaybını önlemek için ara senkronizasyon durumunu önbelleğe almak için kullanılır.

    Senkronizasyon süreci boyunca, önbellekteki verilerin veritabanındaki verilerdeki değişikliklere karşılık geldiğinden emin olmalıyız. Artımlı senkronizasyon durumunda, veritabanındaki bir düğümü her güncellememiz / silmemiz gerektiğinde, veri tutarlılığını sağlamak için ilgili önbellek bilgilerini güncellememiz gerekir.

    Veri karşılaştırmasını optimize edin

    Hafıza kullanımı

    Test yöntemi: Mimari aynı hesapla ilk kez yüklendiğinde tam senkronizasyon ve artımlı senkronizasyonun Uygulama belleği tepe değerini izlemek için Araç aracını kullanın.

    Bellek tepe testi sonuçları

    analiz

    Mimarideki düğüm sayısı arttıkça, tam senkronizasyon çözümünün bellek zirvesi artmaya devam edecektir.Aşırı durumlarda, yetersiz bellek uygulaması çökmeleri olacaktır (gerçek testlerde, 30w düğüm altında, iPhone 6 tam senkronizasyon çözümü çökmelidir). Artımlı senkronizasyon şemasında, toplam düğüm sayısı tepe belleği etkilemez, sadece senkronizasyon parçalarının sayısını arttırır.

    Optimizasyondan sonra, Tencent etki alanı altında, artımlı senkronizasyon çözümünün toplam Uygulama belleği kullanımı, tam senkronizasyon çözümünün yalnızca% 53,1'i kadardır ve kuruluş ne kadar büyükse, optimizasyon etkisi o kadar belirgin olur. Mimarideki toplam düğüm sayısına bakılmaksızın, artımlı senkronizasyon çözümü tüm mimariyi senkronize edebilir ve istenen etkiyi elde edebilir.

    Trafik kullanımı

    Test yöntemi: Yönetim tarafında üye üzerinde beş ek işlem gerçekleştirin, müşterinin trafik tüketimini günlük üzerinden analiz edin ve ortalamayı alın. Günlük, isteğin başlığını ve gövde boyutunu yazdıracak ve trafik kullanım değerini tahmin edecektir.

    Test sonuçları

    analiz

    Üye işlemlerinin eklenmesiyle, artımlı senkronizasyon çözümü yalnızca tek bir üyenin bilgilerini çeker, böylece mimaride kaç kişi olursa olsun trafik tüketimi benzerdir. Aynı işlem tam senkronizasyon şeması için de geçerlidir. Her değişiklik talep edildiğinde, sunucu tam bir karma liste yayınlar. Kuruluş ne kadar büyükse, o kadar fazla trafik tüketir. İşletmedeki düğüm sayısı 20w seviyesine ulaştığında, tam senkronizasyon çözümünün trafik tüketiminin artımlı senkronizasyon çözümünün yaklaşık 500 katı olduğu görülebilir.

    Optimizasyondan sonra, Tencent etki alanı altında, her artımlı senkronizasyon trafiği tüketimi, tam senkronizasyon planının yalnızca% 0,4'üdür ve kuruluş ne kadar büyükse, optimizasyon etkisi o kadar belirgin olur.

    Sonuna yaz

    Artımlı senkronizasyon şeması zamansız mimari senkronizasyonu ve aşırı trafik tüketimi sorunlarını ortadan kaldırır. Kullanıcı geri bildirimi ve veri analizi yoluyla, artımlı mimari, eşzamanlı olarak başlatıldıktan sonra istikrarlı bir şekilde çalışır ve istenen optimizasyon etkisini elde eder.

    yazar hakkında

    Hu Teng , Tencent mühendisi, WeChat kuruluşunun tüm sürecine sıfırdan katılmış olup, şu anda esas olarak kurumsal WeChat mobil terminal organizasyon yapısının ve harici bağlantıların geliştirilmesinden sorumludur.

    Bugünün Tavsiyesi

    Okumak için aşağıdaki resme tıklayın

    Teknik konuşma: KPI neden Sony'yi mahvetti ama OKR Google'ı yaptı?

    IFA 2018 Lenovo Yoga 7 PRO çıkış: Dünyanın İlk Desteği Dolby Vision/Panorama
    önceki
    "Bilgi" deki dört kötü adamdan hangisi en acımasız? Netizenler hepsinin Zhao Liying'e kaybettiğini söyledi
    Sonraki
    Andy Lau aniden konserin iptal edildiğini duyurdu, ağladı ve izleyicilerden özür diledi: Buna gerçekten dayanamıyorum
    Bir parça pamuk dolgulu elbise, bir kalp ve turuncu "halka" muhafızlar, Chenzhou'nun soğuk yağmurunda güzel bir manzara haline geldi.
    Meizu 16. derinlemesine deneyim: bu samimiyet, tanışmak için çok geç değil
    Amir Khan'ın Pekin arkadaşı, "Indian Thugs" ın galasına yardım etmek için Noel Baba'nın enkarnasyonu olan Wang Baoqiang'dır.
    "Gelen Çağrılar", "duyguların mihenk taşı" olarak adlandırılır, Tong Da, Ma Li için cep telefonunun sırrını açığa çıkarır.
    "Extreme Escape" in ilk iki oyunu PS4 / PSV / PC'ye gelecek
    Gelecekteki Uygulama teknolojisi ve mevcut büyük ön uç uygulaması size bir kez verilir
    Zhang Yuqi, bebeğini bir top kafa ile mutlu bir şekilde yürüyor, oğluna çok yakın, kolları açık, eski kocası görünmeyecek
    IFA 2018 Razer, E -Sporcular "Üç Kılıç Üstü" yayınladı: Dev Şeytanlar, Örümcekler ve Mamba Buraday
    Zhu Yilong ile sınıf arkadaşı, Wu Xiubo ile harika bir rekabet oynuyor, ünlü olduğundan daha fazlasını öğrenmeyi seviyor
    Gal Gadot'un "Wonder Woman 1984" finali duyurdu, yeni set çekimleri ortaya çıktı, çekimler altı ay sürdü
    Veya sadece yeni iPhone değil, Apple'ın sonbahar konferans önizlemesi
    To Top