Ich habe Probleme über mehrere Umgebungen (dh unterschiedliche Azure Redis Instanzen) ähnlich zu diesem Beitrag: ServiceStack.Redis: Unable to Connect: sPort:ServiceStack.Redis Verbindungsprobleme mit Azure Redis
Aber natürlich können wir nicht redis Servern verschieben oder ändern, da wir abhängig sind Azure Redis. Wenn es sich um ein Latenzproblem handelt, sind wir vielleicht ...
Wir haben eine ältere Version von SS (4.0.42.0) verwendet und seitdem auf den neuesten Stand gebracht (4.0.56.0) und sehen die gleichen zeitweiligen Probleme.
Hier ist ein Hintergrund: - Das Problem tritt erst nach mindestens 2K Anfragen (manchmal mehr oder weniger). Ja, wir verwenden die neueste SS-Lizenz. - Es ist sehr intermittierend, die meisten Anfragen sind erfolgreich, aber diejenigen, die fehlschlagen, scheitern in der Regel in kleinen Mengen (1-5 oder so), dann verschwindet das Problem für eine Weile - Ich habe RedisPoolManager, PooledRedisClientManager mit den gleichen Ergebnissen versucht. - Ich habe einen Client-Statistik-Bericht für jede Anfrage erstellt und sichergestellt, dass der Pool genügend Clients enthält, keine sind fehlerhaft usw. Selten sehe ich mehr als 2-3 Clients zu einer Zeit von 40. -
Verschiedene Ausnahmen: - IOException
mit Nachricht Unable to read data from the transport connection: An existing connection was forcibly closed by the remote host
und ein Stacktrace, das eine Erwähnung von RedisClient enthält. Hier ist die vollständige Fehler dump:
"exception": { "message": "Unable to read data from the transport connection: An existing connection was forcibly closed by the remote host.", "source": "System", "targetSite": "Int32 Read(Byte[], Int32, Int32)", "stackTrace": " at System.Net.Sockets.NetworkStream.Read(Byte[] buffer, Int32 offset, Int32 size)\r\n at System.Net.FixedSizeReader.ReadPacket(Byte[] buffer, Int32 offset, Int32 count)\r\n at System.Net.Security._SslStream.StartFrameHeader(Byte[] buffer, Int32 offset, Int32 count, AsyncProtocolRequest asyncRequest)\r\n at System.Net.Security._SslStream.StartReading(Byte[] buffer, Int32 offset, Int32 count, AsyncProtocolRequest asyncRequest)\r\n at System.Net.Security._SslStream.ProcessRead(Byte[] buffer, Int32 offset, Int32 count, AsyncProtocolRequest asyncRequest)\r\n at System.Net.Security.SslStream.Read(Byte[] buffer, Int32 offset, Int32 count)\r\n at System.IO.BufferedStream.ReadByte()\r\n at ServiceStack.Redis.RedisNativeClient.ReadLine()\r\n at ServiceStack.Redis.RedisNativeClient.ReadData()\r\n at ServiceStack.Redis.RedisClient.<>c__DisplayClass1c
1.b__1b (RedisClient r) \ r \ n bei ServiceStack.Redis.RedisClient.Exec [T] (Func 2 action)\r\n at ServiceStack.Redis.RedisClientManagerCacheClient.Get[T](String key)\r\n at API.ServiceInterface.RequestExtensions.GetUserSession(IRequest req, Boolean createIfNotExists) in F:\\src\\CCCAPI CD (DevLab)\\ServiceInterface\\Extensions\\RequestExtensions.cs:line 26\r\n at API.WebHost.AuthImpl.HandleBlacklistedUserSessions(IRequest req, IResponse httpResponse) in F:\\src\\CCCAPI CD (DevLab)\\WebHost\\Authentication\\AuthImpl.cs:line 30\r\n at ServiceStack.ServiceStackHost.ApplyPreRequestFilters(IRequest httpReq, IResponse httpRes)\r\n at ServiceStack.Host.RestHandler.ProcessRequestAsync(IRequest httpReq, IResponse httpRes, String operationName)", "type": "IOException", "innerException": { "message": "An existing connection was forcibly closed by the remote host", "source": "System", "targetSite": "Int32 Read(Byte[], Int32, Int32)", "stackTrace": " at System.Net.Sockets.NetworkStream.Read(Byte[] buffer, Int32 offset, Int32 size)", "type": "SocketException" } }
-Ein weiterer Ausnahme, die wir sehen, ist Ausnahme Typ ServiceStack.Redis
mit Meldung Unable to Connect: sPort: 50447
(das interessante daran ist, dass die Port-Änderungen, und ist nie die wirkliche Azure Redis SSL-Port, der verwendet werden soll, ist es wie der Pool-Manager scheint vielleicht nicht die richtige zu diesem Client übergeben?) hier ist die vollständige Dump.: "exception": { "message": "Unable to Connect: sPort: 50447", "source": "ServiceStack.Redis", "targetSite": "ServiceStack.Redis.RedisException CreateConnectionError()", "stackTrace": " at ServiceStack.Redis.RedisNativeClient.CreateConnectionError()\r\n at ServiceStack.Redis.RedisNativeClient.SendExpectData(Byte[][] cmdWithBinaryArgs)\r\n at ServiceStack.Redis.RedisClient.<>c__DisplayClass1c
1.b__1b (RedisClient R) \ r \ n bei ServiceStack.Redis.RedisClient.Exec [T] (Func 2 action)\r\n at ServiceStack.Redis.RedisClientManagerCacheClient.Get[T](String key)\r\n at API.ServiceInterface.RequestExtensions.GetUserSession(IRequest req, Boolean createIfNotExists) in F:\\src\\CCCAPI CD (DevLab)\\ServiceInterface\\Extensions\\RequestExtensions.cs:line 26\r\n at API.WebHost.AuthImpl.HandleBlacklistedUserSessions(IRequest req, IResponse httpResponse) in F:\\src\\CCCAPI CD (DevLab)\\WebHost\\Authentication\\AuthImpl.cs:line 30\r\n at ServiceStack.ServiceStackHost.ApplyPreRequestFilters(IRequest httpReq, IResponse httpRes)\r\n at ServiceStack.Host.RestHandler.ProcessRequestAsync(IRequest httpReq, IResponse httpRes, String operationName)", "type": "RedisException", "innerException": { "message": "An existing connection was forcibly closed by the remote host", "source": "System", "targetSite": "Void Write(Byte[], Int32, Int32)", "stackTrace": " at System.Net.Sockets.NetworkStream.Write(Byte[] buffer, Int32 offset, Int32 size)", "type": "SocketException" }
im mit dieser einer kämpfen ... jede Hilfe würde geschätzt werden.
Nicht, was ich gehofft hatte, da wir so an Azure gefesselt sind - ich habe das Auto Retry Timeout auf einen absurden Wert (20s) erhöht und hoffe, dass das ausreicht, um die Auswirkungen dieser Probleme vorübergehend zu mildern. Wenn es sich wirklich um ein serverseitiges Problem handelt, finde ich es merkwürdig, dass es keine Berichte gibt, die uns darauf aufmerksam machen, dass es ein Drosselung/Fehler/Lade-Problem gibt. Wir haben bereits versucht, die Kapazität der Azure Redis-Instanzen weit über das hinaus zu erhöhen, was wir brauchten - ohne Glück. Vielen Dank für die klare Erklärung. Wir werden in Erwägung ziehen, ein Ticket mit Azure zu hinterlegen. – jglassco
Ein Follow-up zu diesem Problem: Ich habe Azure ein Support-Ticket gesendet - sie haben zugegeben, dass ein Problem mit Azure Redis und dem ServiceStack-Client vorliegt. Das Cache-Support-Team hat unsere Redis-Instanzen manuell gepatcht und das Problem ist verschwunden. Ich würde mir vorstellen, dass sie diesen Patch in naher Zukunft automatisch einfügen werden, aber jetzt müssen wir es anfordern (für Standard-Instanzen hatte Premium bereits den Patch, anscheinend). – jglassco
@jglassco Tolles Thx für die Folge. Ich gehe davon aus, dass der gemanagte Redis-Dienst seinen Windows-Port ausführt, nicht ideal, da Redis am besten unter Linux läuft. – mythz