Redis Alternatifleri

  1. KısayolKısayol reportŞikayet pmÖzel Mesaj
    unbalanced
    unbalanced's avatar
    Kayıt Tarihi: 14/Haziran/2006
    Erkek

    Selamlar

    300 kaydi isleyen bir uygulama ve ayni serverda olan ve bu kayitlarin hepsini anlik okuyan baska bir uygulama var. Daha dogrusu suan gelistiriyoruz. Yani bir cache mekanizmasi

    Uygulamayi server'da test ederken, console'da kapandigini farkettim. event viewer'dan bakinca söyle bir hata gördüm

     

    Application: MyAssembly.Console.exe
    CoreCLR Version: 6.0.1322.58009
    .NET Version: 6.0.13
    Description: The process was terminated due to an unhandled exception.
    Exception Info: StackExchange.Redis.RedisTimeoutException: 
    Timeout awaiting response (outbound=3KiB, inbound=0KiB, 5891ms elapsed, timeout is 5000ms), command=GET,
     next: GET ONEETH, inst: 0, qu: 0, qs: 322, aw: False, bw: SpinningDown, rs: ReadAsync, ws: Idle, in: 0, in-pipe: 0,
     out-pipe: 0, last-in: 21, cur-in: 0, sync-ops: 0, async-ops: 15213131, serverEndpoint: 127.0.0.1:6379, conn-sec: 589.14, mc: 1/1/0, mgr: 10 of 10 available, 
    clientName: WIN-N3L34NRTGMU(SE.Redis-v2.6.90.64945), IOCP: (Busy=0,Free=1000,Min=2,Max=1000), WORKER: (Busy=2,Free=32765,Min=2,Max=32767)
    , POOL:Threads=5,QueuedItems=122,CompletedItems=24506132), v: 2.6.90.64945 
    (Please take a look at this article for some common client-side issues that can cause timeouts: 
    https://stackexchange.github.io/StackExchange.Redis/Timeouts)
    

     

    Arkadas arastirirken söyle bir sey bulmus:

    Hata mesajınıza baktığımda, gözüme çarpan iki şey var:

    Hatanın in: Hatanın 65536 kısmı, sunucu tarafından gönderilen ve yerel soketinizin arabelleğinde duran ve uygulamanızın bu verileri okumasını bekleyen çok sayıda veriniz olduğu anlamına gelir. Bu genellikle uygulamanızda bir performans sorunu olduğunu gösterir: örneğin yüksek / ani CPU patlamaları veya bellek sayfalamasına neden olan bellek baskısı.

    WORKER: (Busy=3,Free=679,Min=1,Max=682) kısmı Threadpool ayarlarınızın ayarlanması gerektiğini gösterir. "Meşgul" değeri "Min" değerinden büyük olduğunda, yanıtları işlerken gecikmeler yaşayacaksınız çünkü threadpool meşgul olduğunda ne kadar hızlı yeni iş parçacığı oluşturacağını kısıtlar.

     

    Redis ile fazla calismadim belki cesitli ayarlarini yapmak lazim. Ama bizim islemlerimizde sikinti cikarmadan memory tabanli bir sey gerekiyor. Verileri memory bellegine bir kere ekledikten sonra artik tüm degerleri güncelliyor. Yani initial durum haric herhangi bir ekleme yok, sadece güncelleme var ve bu degerleri 210-250 ms'de bir tek tek okuyor

    Toparlarsam; redis alternatifi memory kayit icin iki uygulamanin da ayni anda kullanabilecegi bir sistem ariyorum. SignalR gibi bir sey kullanip data tasiya bilirim ama 1 milisaniyenin bile önemi oldugundan mümkün mertebe en light way sekilde yapmayi amacliyorum.

    Kodlar da söyle pek bir seyi yok zaten. 

    Bir örnekte Lazy kullanmislar ve lock kullanmislar ama bilemedim

    var multiplexer = ConnectionMultiplexer.Connect("127.0.0.1:6379");
                
    services.AddSingleton<IConnectionMultiplexer>(multiplexer);
    services.AddSingleton<IRedisConnector, RedisConnector>();

     

        public class RedisConnector : IRedisConnector
        {
            IDatabase _db;
            public RedisConnector(IConnectionMultiplexer multiplexer)
            {
                _db = multiplexer.GetDatabase(0);          
            }  
    
            public async Task<string> ReadValue(string key)
            {
                RedisKey redisKey = new(key);
                RedisValue redisValue = await _db.StringGetAsync(redisKey);
                return redisValue.ToString();
            }
    
            public async Task WriteValue(string key, string value)
            {
                RedisKey redisKey = new(key);
                RedisValue redisValue = new(value);
                await _db.StringSetAsync(redisKey, redisValue);
            }
        }

     


    Ülkesini Seven Her Türk Vatandasi, Ülkesinin Sessiz Istilasi'na karsi durmak zorunda.
  2. KısayolKısayol reportŞikayet pmÖzel Mesaj
    TeRRoR
    TeRRoR's avatar
    Kayıt Tarihi: 06/Nisan/2007
    Erkek

    memcache, hazelcast birde redis'den ayrılan ekibin 2020 yılında redis yapsak nasıl yapardık kafasıyla yaptıkları bir şey vardı adını hatırlayamadım. bunlara bakabilirsin. ama tam olarak neden redis'i değiştirmeyi istediğini anlayamadım. docker'a koysan unuturusun redisi, azıcık confige kafa yoracan senin durumuna göre :)


    herkes programcı olmak zorunda değildir, lütfen bir zorunluluk gibi programlama dilleri öğrenmeye çalışmayın. yabancı dil filan öğrenin amq.// s.kimin etini yerim, kasaba minnet etmem.// ince düşünene kalın girer.//
  3. KısayolKısayol reportŞikayet pmÖzel Mesaj
    enesshn18
    enesshn18's avatar
    Kayıt Tarihi: 15/Mayıs/2011
    Erkek

    Ehcache i alternatif olarak dusunebilirsin hocam. Kullanimi kolay ve anlaşılır 


    barmak bassak olurmu gadasını aldığım :D
  4. KısayolKısayol reportŞikayet pmÖzel Mesaj
    TeRRoR
    TeRRoR's avatar
    Kayıt Tarihi: 06/Nisan/2007
    Erkek
    enesshn18 bunu yazdı

    Ehcache i alternatif olarak dusunebilirsin hocam. Kullanimi kolay ve anlaşılır 

    abi jvm tabanlı olunca birde jvm heap sik sok işleri başına dert açabiliyor :/


    herkes programcı olmak zorunda değildir, lütfen bir zorunluluk gibi programlama dilleri öğrenmeye çalışmayın. yabancı dil filan öğrenin amq.// s.kimin etini yerim, kasaba minnet etmem.// ince düşünene kalın girer.//
  5. KısayolKısayol reportŞikayet pmÖzel Mesaj
    All hail to Tux
    sandman
    sandman's avatar
    Kayıt Tarihi: 01/Eylül/2005
    Erkek

    Sabah sakin kafayla uzun uzun yazarım, mevcut sorununu redis ayarlarıyla düzeltebilirsin

    cache servisi secerken bir kaç kriter var active/active node lazım mı, bilgileri belli bir düzen(sıra) ile tutacak mısın, hangi dil ve platformu kullanacaksın gibi.

    redis'e en iyi alternatif şu anda hazelcast, küçük bir iş yapmıyorsan memcache'e girme. 


    Mühendis kahveyi projeye dönüştüren bir insan evladıdır.
  6. KısayolKısayol reportŞikayet pmÖzel Mesaj
    unbalanced
    unbalanced's avatar
    Kayıt Tarihi: 14/Haziran/2006
    Erkek

    cevaplar icin tesekkürler ancak yazma firsatim oldu.

    Bir kac düzenleme yaptim redis'te suana kadar henüz hata olusmadi. 

       var multiplexer = ConnectionMultiplexer.Connect(new ConfigurationOptions
                {
                    AbortOnConnectFail = false,
                    ConnectRetry = 5,
                    DefaultDatabase = 0,
                    EndPoints = { { "127.0.0.1", 6379 } }
                });

    su sekilde bir option ekledim, abortonconnectfail propertysi, timeout durumunda exception firlatmayacak ve tekrar baglanma olayini 5 kere deneyecek. 

    Bir de yazma degil de okumada sikinti oluyor. Yazma alaninda redis %0-0.5 islemci kullanirken, isin icine okuma girince %18-25 civarinda oluyor. 

    Zaten bizdeki sikinti da okumadan kaynakli. (oradaki metoddan exception geliyor)

    Hesaplama ve redisten okuma kisminin cagrilmasini biraz daha iyilestirdim. 

    Planim su aslinda

    yazdigimiz socket app'i baska bir servera tasimak ve oradaki redis'i disari acip cesitli clientlardan o redis'e erisimini saglamak. 

    Performans acisindan nasil davranis sergiler bilmiyorum ancak olmadi aklimdaki diger düsünce de bir eventbus mimarisi kullanmak geliyor.

     

    redis'e alternatif olarak direk memcache'i aradim zaten, hatirladigim kadariyla bir projede kullanmistim eskiden. Ama Ehcache ya da hazelcast ilk kez duydum, onlari arastirayim.

    Sistemi biraz daha büyüttügümüzde toplamda atiyorum en fazla 3000 kayit olur. Burada sorun yeni kayit olusturmadan ziyade, update ve read islemleri. Görünen o ki, redis'te update iyi calisiyor ama read'de sikinti olabiliyor.

    Suana kadar bir sikinti olmadi, belki @sandman dedigin gibi ayarlarla ilgili bir sikinti var. Yazini bekliyorum.

    Birden fazla node olayini cok ileriki asamalarda düsünebilirim yani cok fazla client olursa o zaman mantikli olur. Kücükten basliyorum bakalim

     

    su link surda kalsin da multiple node'larda bakarim :)  https://stackoverflow.com/a/44499302/1022138 

    unbalanced tarafından 31/Oca/23 00:29 tarihinde düzenlenmiştir

    Ülkesini Seven Her Türk Vatandasi, Ülkesinin Sessiz Istilasi'na karsi durmak zorunda.
  7. KısayolKısayol reportŞikayet pmÖzel Mesaj
    TeRRoR
    TeRRoR's avatar
    Kayıt Tarihi: 06/Nisan/2007
    Erkek

    windows değilde linux makinaya kurup test etsene bi abi


    herkes programcı olmak zorunda değildir, lütfen bir zorunluluk gibi programlama dilleri öğrenmeye çalışmayın. yabancı dil filan öğrenin amq.// s.kimin etini yerim, kasaba minnet etmem.// ince düşünene kalın girer.//
  8. KısayolKısayol reportŞikayet pmÖzel Mesaj
    unbalanced
    unbalanced's avatar
    Kayıt Tarihi: 14/Haziran/2006
    Erkek
    TeRRoR bunu yazdı

    windows değilde linux makinaya kurup test etsene bi abi

    server var ancak henüz linux kurmadim, prod.'u linux + docker ile yapmayi planliyorum. 

    Son düzenlemelerden sonra suana kadar hala problem cikarmadi. Demek ki bir degistirdigim ayarla ilgiliydi sorun.

     

     


    Ülkesini Seven Her Türk Vatandasi, Ülkesinin Sessiz Istilasi'na karsi durmak zorunda.
  9. KısayolKısayol reportŞikayet pmÖzel Mesaj
    unbalanced
    unbalanced's avatar
    Kayıt Tarihi: 14/Haziran/2006
    Erkek
    Unhandled exception. Unhandled exception. StackExchange.Redis.RedisTimeoutException: The timeout was reached before the message could be written to the output buffer, 
    and it was not sent, command=SET, timeout: 5000, inst: 0, qu: 163, qs: 0, aw: False, bw: CheckingForTimeout, last-in: 0, cur-in: 0, sync-ops: 0, async-ops: 164,
    serverEndpoint: 127.0.0.1:6379, conn-sec: n/a, mc: 1/1/0, mgr: 10 of 10 available, clientName: WIN-N3L34NRTGMU(SE.Redis-v2.6.90.64945), IOCP: (Busy=0,Free=1000,Min=2,Max=1000),
    WORKER: (Busy=1,Free=32766,Min=2,Max=32767), POOL: (Threads=9,QueuedItems=0,CompletedItems=560), v: 2.6.90.64945 (Please take a look at this article for some common client-side issues
    that can cause timeouts: https://stackexchange.github.io/StackExchange.Redis/Timeouts) at MyProject.Redis.RedisConnector.WriteValue(String key, String value, Int32 dbNo) in .....\MyProject\MyProject.Redis\RedisConnector.cs:line 42 at MyProject.Business.Core.CoreFunctions.<>c__DisplayClass10_0.<<_abc_OnSocketValueReceived>b__0>d.MoveNext() in ...\MyProject\MyProject.Business\Core\CoreFunctions.cs:line 77 --- End of stack trace from previous location --- at System.Threading.Tasks.Task.<>c.b__128_1(Object state) at System.Threading.ThreadPoolWorkQueue.Dispatch() at System.Threading.PortableThreadPool.WorkerThread.WorkerThreadStart() at System.Threading.Thread.StartCallback()

     

    Suan uygulama daha hizli calisiyor ama redis uygulamanin hizina yetisemiyor gibi :) 

    Kendi bilgisayarimda 16 core var ve burda hic hata vermeden calisiyor. Ancak server'a attigimda bir kac saniye sonra redise yazamiyor. Serverdaki makinede 2 core var. 

    Ilk mesajda yazdigim WriteValue metodunu core sinifinda await ile cagirdim olmadi, simdi bir threadpool ile denedim yine olmadi. 

    Event asiri fazla tetikleniyor. Atiyorum her 1 ms'de belki 50 istek gidiyor... redis bunlari isleyemiyor. Henüz alternatiflerine bakmadim, redisle cözebilirsem süper olacak.

    Lock koyarsam muhtemelen sikinti cikarmayacaktir ancak, benim isime gelmez, cünkü ben hic bir veriyi kacirmadan anlik yazmak (güncellemek) ve sürekli okumak istiyorum.  (iki farkli program var, sikinti yazma kisminda olusuyor)

    Fikirlerinizi bekliyorum. @sandman senden ayarlari hala alamadik :)) 

     

     

     

     

     

    unbalanced tarafından 05/Şub/23 03:56 tarihinde düzenlenmiştir

    Ülkesini Seven Her Türk Vatandasi, Ülkesinin Sessiz Istilasi'na karsi durmak zorunda.
  10. KısayolKısayol reportŞikayet pmÖzel Mesaj
    unbalanced
    unbalanced's avatar
    Kayıt Tarihi: 14/Haziran/2006
    Erkek

    hazelcast'in Hazelcast Jet isminde bir servisi var belki ise yarayabilir

    https://hazelcast.com/products/stream-processing/ 

    ya da influxdata  ya bakacagim. Benim olay biraz time series'e giriyor. Cünkü zaman bazli veriler aliyorum

    Baska servisler de var ama bir cogu cloude bazli calisiyor (aws, azure vs). Ama ben sistemi kendi VPS'ime kurmayi planliyorum ve direk localde calissin. Biraz arastirma yaptim, kullandigim VPS firmasinin da azure gibi bir local network yaratma imkani var.

    Yani benim atiyorum 3 tane VPSim olsun, birinde redis server kurulu olsun, diger 2 makineyle, redis server'a local ag üzerinden ulasabiliyorum (henüz test etmedim ama bir protokol ekleyip yapilabiliyormus anladigim kadariyla).

    Suan icin tek sorunum, datayi düzgünce kaydedip paralel ya da paralele yakin sekilde datayi okumak.


    Ülkesini Seven Her Türk Vatandasi, Ülkesinin Sessiz Istilasi'na karsi durmak zorunda.
  11. KısayolKısayol reportŞikayet pmÖzel Mesaj
    MhmdAlmz
    MhmdAlmz's avatar
    Kayıt Tarihi: 09/Ağustos/2015
    Erkek

    Reis benim sunucuda da sürekli kapanıyor. Cevapları bende merak ediyorum. Socket.io ile dağıtık redis kullanıyorum bende. Sessionlar rediste tutuluyor. Her gün olmasa da arada bir bir anda tüm session düşüyor loglara bakıyorum redis uçmuş. Ram mi şişiyor dedim kendi kendime bir ara rami 128 den 256 çıkardık problem hala devam etti. Bu iş transaction sayısı artınca oldu yanlız. Az session varken bir problem olmuyordu. Her kod get or add ile dolu :D

     

     

    Bu arada okuma işleminde çok kaynak tüketiyor olması şaşırttı beni. Belki data büyüktür ama bende hiç böyle sorun olmadı. Redis de ortalama 1 GB lık veri var read kısmı çatır çatır çalışıyor. Sunucu da öyle aman aman sunucular değil. 


    Andolsun kuşluk vaktine ve dindiği zaman o geceye ki, Rabbin sana veda etmedi ve darılmadı! Ve kesinlikle senin için sonu önünden (ahiret dünyadan) daha hayırlıdır. ileride Rabbin sana verecek de hoşnut olacaksın! O, seni bir yetim iken barındırmadı mı? Seni, yol bilmez iken (doğru) yola koymadı mı? Seni bir yoksul iken zengin etmedi mi? Öyle ise, sakın yetime kahretme (onu horlama)! El açıp isteyeni de azarlama! Fakat Rabbinin nimetini anlat da anlat!
Toplam Hit: 3488 Toplam Mesaj: 21
redis memory cache