- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我们正在将基于 Identity Server 3 (https://github.com/IdentityServer/IdentityServer3) 的无状态服务迁移到服务结构。
该项目在正常开发负载下的本地开发盒和生产集群上运行良好,但当以每秒大约 20-30 个请求投入生产时,它很快停止响应请求,并且 ARR 中配置的运行状况检查变得不健康。
该服务以 IIS ARR(应用程序请求路由)集群为前端,该集群执行 SSL 卸载。
身份服务器日志输出以下两个错误,一个似乎与入站请求相关,另一个与对用于身份服务器持久性的 Azure 存储的出站请求相关。
Microsoft.WindowsAzure.Storage.StorageException: The client could not finish the operation within specified timeout. ---> System.TimeoutException: The client could not finish the operation within specified timeout.
--- End of inner exception stack trace ---
at Microsoft.WindowsAzure.Storage.Core.Executor.Executor.EndExecuteAsync[T](IAsyncResult result) in c:\Program Files (x86)\Jenkins\workspace\release_dotnet_master\Lib\ClassLibraryCommon\Core\Executor\Executor.cs:line 50
at Microsoft.WindowsAzure.Storage.Core.Util.AsyncExtensions.<>c__DisplayClass1`1.<CreateCallback>b__0(IAsyncResult ar) in c:\Program Files (x86)\Jenkins\workspace\release_dotnet_master\Lib\ClassLibraryCommon\Core\Util\AsyncExtensions.cs:line 66
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()
at Collabco.Myday.Identity.IdSvr.BaseStore`1.<ExecuteQueryAsync>d__21.MoveNext() in C:\Dev\myday-identity\IdentityServer\IdSvr\BaseStore.cs:line 258
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()
at Collabco.Myday.Identity.IdSvr.ScopeStore.<GetScopesAsync>d__3.MoveNext() in C:\Dev\myday-identity\IdentityServer\IdSvr\ScopeStore.cs:line 43
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at IdentityServer3.Core.Endpoints.DiscoveryEndpointController.<GetConfiguration>d__11.MoveNext() in c:\local\identity\server3\IdentityServer3\source\Core\Endpoints\Connect\DiscoveryEndpointController.cs:line 73
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Threading.Tasks.System.Web.Http910180.TaskHelpersExtensions.<CastToObject>d__3`1.MoveNext() in c:\local\identity\server3\IdentityServer3\source\Core\Configuration\DiscoveryOptions.cs:line 0
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Web.Http.Controllers.ApiControllerActionInvoker.<InvokeActionAsyncCore>d__0.MoveNext() in c:\local\identity\server3\IdentityServer3\source\Core\Configuration\DiscoveryOptions.cs:line 0
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Web.Http.Controllers.ActionFilterResult.<ExecuteAsync>d__2.MoveNext() in c:\local\identity\server3\IdentityServer3\source\Core\Configuration\DiscoveryOptions.cs:line 0
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Web.Http.Dispatcher.HttpControllerDispatcher.<SendAsync>d__1.MoveNext() in c:\local\identity\server3\IdentityServer3\source\Core\Configuration\DiscoveryOptions.cs:line 0
Request Information
RequestID:
RequestDate:
StatusMessage:
我们看到的另一个异常(exception)是:
System.ObjectDisposedException: Cannot access a disposed object.
Object name: 'System.Net.HttpListenerRequest'.
at System.Net.HttpListenerRequest.CheckDisposed()
at System.Net.HttpListenerRequest.get_LocalEndPoint()
at System.Net.HttpListenerRequest.get_IsLocal()
at Microsoft.Owin.Host.HttpListener.RequestProcessing.OwinHttpListenerContext.GetServerIsLocal()
at Microsoft.Owin.Host.HttpListener.RequestProcessing.CallEnvironment.get_ServerIsLocal()
at Microsoft.Owin.Host.HttpListener.RequestProcessing.CallEnvironment.PropertiesTryGetValue(String key, Object& value)
at Microsoft.Owin.Host.HttpListener.RequestProcessing.CallEnvironment.TryGetValue(String key, Object& value)
at Microsoft.Owin.OwinContext.Get[T](String key) in c:\local\identity\server3\IdentityServer3\source\Core\Configuration\DiscoveryOptions.cs:line 0
at System.Web.Http.Owin.OwinHttpRequestContext.get_IsLocal() in c:\local\identity\server3\IdentityServer3\source\Core\Configuration\DiscoveryOptions.cs:line 0
at System.Web.Http.Owin.OwinHttpRequestContext.get_IncludeErrorDetail() in c:\local\identity\server3\IdentityServer3\source\Core\Configuration\DiscoveryOptions.cs:line 0
at System.Net.Http.System.Web.Http910180.HttpRequestMessageExtensions.CreateErrorResponse(HttpRequestMessage request, HttpStatusCode statusCode, Func`2 errorCreator) in c:\local\identity\server3\IdentityServer3\source\Core\Configuration\DiscoveryOptions.cs:line 0
at System.Web.Http.ExceptionHandling.DefaultExceptionHandler.Handle(ExceptionHandlerContext context) in c:\local\identity\server3\IdentityServer3\source\Core\Configuration\DiscoveryOptions.cs:line 0
at System.Web.Http.ExceptionHandling.DefaultExceptionHandler.HandleAsync(ExceptionHandlerContext context, CancellationToken cancellationToken) in c:\local\identity\server3\IdentityServer3\source\Core\Configuration\DiscoveryOptions.cs:line 0
at System.Web.Http.ExceptionHandling.LastChanceExceptionHandler.HandleAsync(ExceptionHandlerContext context, CancellationToken cancellationToken) in c:\local\identity\server3\IdentityServer3\source\Core\Configuration\DiscoveryOptions.cs:line 0
at System.Web.Http.ExceptionHandling.ExceptionHandlerExtensions.<HandleAsyncCore>d__0.MoveNext() in c:\local\identity\server3\IdentityServer3\source\Core\Configuration\DiscoveryOptions.cs:line 0
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Web.Http.Dispatcher.HttpControllerDispatcher.<SendAsync>d__1.MoveNext() in c:\local\identity\server3\IdentityServer3\source\Core\Configuration\DiscoveryOptions.cs:line 0
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Web.Http.Owin.PassiveAuthenticationMessageHandler.<SendAsync>d__0.MoveNext() in c:\local\identity\server3\IdentityServer3\source\Core\Configuration\DiscoveryOptions.cs:line 0
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Web.Http.HttpServer.<SendAsync>d__0.MoveNext() in c:\local\identity\server3\IdentityServer3\source\Core\Configuration\DiscoveryOptions.cs:line 0
在移除负载后大约 5-10 分钟后,没有回收任何东西,服务恢复正常。在不稳定期间,Service Fabric 也未检测到任何故障。
有人有什么想法吗?
最佳答案
解决这个问题的方法是:
最重要的因素似乎是第 3 个因素,尽管通过实现我首先执行的第 1 个因素注意到了一些改进,这确实很明显。
为此,我在存储库类(身份服务器术语中的基存储类)上使用静态构造函数,它具有以下依赖于 StorageAccount 实例的代码。除了最后一行之外的所有内容都已存在。
var tableServicePoint = System.Net.ServicePointManager.FindServicePoint(storageAccount.TableEndpoint);
tableServicePoint.UseNagleAlgorithm = false;
tableServicePoint.Expect100Continue = false;
tableServicePoint.ConnectionLimit = 1000;
以下文章对此有所帮助:https://azure.microsoft.com/en-gb/documentation/articles/storage-performance-checklist/
总而言之,我的结论是默认连接限制(2 或 10 个不同的文档冲突)导致对表存储的请求排队并最终超时并最终导致服务失败。
要确认使用 Azure Web 应用程序时无需设置连接限制,因此 Service Fabric/owin 自托管项目的工作方式在影响 Azure 存储的连接使用方面存在一些不同。
关于owin - Service Fabric Stateless Identity Server 3 服务在负载下失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40043198/
我已经用 Java 创建了无状态 session bean。现在我想调用另一个无状态 session bean 的方法。我的代码中缺少一些东西。通常调用方法的方式不适合这里。在另一个无状态 sessi
我的组件中有以下代码,我希望无状态组件能够访问这部分代码: 主要成分: function createApp(store, communityIds) { const App = React.crea
最近,Facebook 发布了一种名为 Hacklang 的新语言,它通过 HHVM 编译为机器码。 所以我想知道,Hacklang 仅仅是一种状态语言吗? 谢谢。 最佳答案 PHP 是无状态的,除非
我花了一整天的时间了解什么是无状态架构。我读了很多帖子和答案,比如 Can My Web App Implement User Login and Remain Stateless? Pros and
我正在尝试使用 Hibernate 无状态 session 进行批量插入 class Book { String title; String author; Double pr
我正在尝试过滤 (javax.servlet.Filter) 我所有 Web 服务端点上的所有传入 SOAP 请求。这些 Web 服务是从 @Stateless EJB 创建的并使用 Message
我正在关注 EJB cookbook ,来自 packt,使用以下代码: package packt; import javax.ejb.Stateless; import javax.ejb.Loc
我遇到了内存泄漏问题,因为 EJB 没有从池中删除。 ejb 是 3.0 并且是无状态的。 In my jboss jmx-console 4.3, the statistics of a parti
我目前正在创建一个 EJB3 数据访问类来处理我的 Java EE 6 应用程序中的所有数据库操作。现在,由于 Java EE 6 提供了新的 ApplicationScoped 注释,我想知道我的
我正在学习使用 JAX-RS 进行一些 Restful api 开发,但我的资源类存在问题。 我的理解是我的资源类应该是 RequestScoped,但是,当它是 RequestScoped 时,我对
我听说“ RESTful API 应该是无状态的。所有状态信息都应该保存在客户端 ”。 但是当我从网页发出 AJAX 调用时,我注意到 session ID cookie 总是被发送到服务器。使用该
Laravel Socialite有一个“无状态”模式,它禁止将任何内容存储到 session 中。从阅读源代码来看,它并没有做任何不同的事情——它只是不存储或检索这些值。 作为其中的一部分,它 as
我正在维护一些运行良好的旧 JEE 代码,但正在使用一些静态帮助器类,其中实体管理器从调用 EJB 的方法中传递,如下所示: public class StaticHelper { publi
我正在关注 this tutorial它还使用 EJB: package exercise1; import java.util.Random; import javax.ejb.Stateless;
我想知道的是我是否从正确的角度接近这个问题。 我有一个我正在构建的 asp.net 应用程序。我正在使用 Masterpage 来查看应用程序的整体外观(您可以在下面看到代码)。 我想让菜单系统使用像
我想知道为什么我们在使用 TransactionAttributeType 时要使用无状态注释,如下所示: @TransactionAttribute(TransactionAttributeType
我正在用 golang 构建一个应用程序,我希望它具有容错能力。我研究了不同的算法,如 RAFT 和 Paxos 以及它们在 golang 中的实现(etcd 的 raft,hashicorp 的 r
我正在尝试使用 React Native 创建一个组件,如下所示: export class IndicatorOverlay extends Component { render() {
我在 bean 中有一些代码用于监视连接句柄: @Stateless public class MyClass { private CloseableHttpAsyncClient devic
我习惯于为服务、DAO 或 Controller 对象创建 Spring bean 作为单例。好吧,这对我来说似乎很自然。现在我的一个同事喜欢把所有这样的对象都做成原型(prototype)。 反对的
我是一名优秀的程序员,十分优秀!