- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我必须将基于 Windows 的多线程应用程序(使用全局变量和 RDBMS 进行存储)移动到 NLB(即网络负载平衡器)集群。立即想到的常见架构问题是
最佳答案
我将首先回答问题的持久连接部分,因为它更容易。所有优秀的网络负载平衡解决方案(包括 Microsoft 内置于 Windows Server 的 NLB 服务,还包括像 F5 BigIP 这样的负载平衡设备)都能够在连接期间“坚持”从客户端到特定集群节点的各个连接。在 Microsoft 的 NLB 中,这称为“Single Affinity”,而其他负载均衡器将其称为“Sticky Sessions”。有时会有一些警告(例如,如果向集群添加新成员,Microsoft 的 NLB 会中断连接,尽管单个连接永远不会从一台主机移动到另一台主机)。
回复:全局变量,它们是负载平衡系统的祸根。大多数负载平衡应用程序的设计者会进行大量重新架构以尽量减少对共享状态的依赖,因为它会阻碍负载平衡应用程序的可扩展性和可用性。大多数这些方法归结为两步策略:首先,将共享状态移动到高度可用的位置,其次,更改应用程序以最大限度地减少必须访问共享状态的次数。
我见过的大多数集群应用程序都会在 RDBMS 中存储共享状态(甚至是共享的、易失的状态,如全局变量)。这主要是为了方便。您也可以使用 in-memory database以获得最佳性能。但是,将 RDBMS 用于所有共享状态( transient 和持久)的简单性,加上使用现有数据库工具实现高可用性,往往适用于许多服务。 RDBMS 的性能当然比内存中的全局变量慢几个数量级,但是如果共享状态很小,您无论如何都会读取 RDBMS 的缓存,并且如果您要进行网络跳跃来读取/写入数据差异相对较小。您还可以通过优化数据库架构以实现快速读取/写入,例如通过删除不需要的索引并使用 NOLOCK 对所有不需要精确、高达毫秒级精度的读取查询产生重大影响。
我并不是说 RDBMS 永远是共享状态的最佳解决方案,只是改善共享状态访问时间通常不是负载平衡应用程序获得性能的方式——相反,它们通过消除对共享状态的需要来获得性能在每个请求上同步访问(尤其是写入)共享状态。这是我上面提到的第二件事:更改您的应用程序以减少对共享状态的依赖。
例如,对于简单的“计数器”和类似的指标,应用程序通常会将它们的更新排队,并有一个线程负责从队列中异步更新共享状态。
对于更复杂的情况,应用程序可能会从悲观并发(预先检查资源是否可用)切换到 Optimistic Concurrency (假设它是可用的,然后如果您最终完成工作,例如,将相同的项目出售给两个不同的客户!)。
Net-net,在负载平衡的情况下,蛮力解决方案通常不能像创造性地思考您对共享状态的依赖并提出创造性的方法来防止在每个请求上都必须等待同步读取或写入共享状态.
我不会在你的场景中使用 MSCS(微软集群服务)。 MSCS 是一种故障转移解决方案,这意味着即使其中一个集群节点出现故障,它也能很好地保持单服务器应用程序的高可用性,但您将无法从真正的负载平衡服务中获得可扩展性和简单性。我怀疑 MSCS 确实有共享状态的方法(在共享磁盘上),但它们需要设置一个 MSCS 集群,其中涉及设置故障转移、使用共享磁盘以及其他不适合大多数负载平衡应用程序的复杂性。最好使用数据库或专门的内存解决方案来存储共享状态。
关于windows - 开发集群感知的非基于 Web 的企业应用程序的常见问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1673843/
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
是否了解线程的同步和异步? 线程同步:多个线程同时访问同一资源,等待资源访问结束,浪费时间,效率低 线程异步:在访问资源时在空闲等待时同时访问其他资源,实现多线程机制 是否了解网
常见问题 cat系统的定位 cat本质上一个实时监控系统,主要体现在监控报表Transaction、event、problem、heartbeat等,cat系统定制的监控模型以及定制的实时分
我正在使用PowerShell中的GUI并尝试制作表单,以便在构建表单之后,用户可以与表单的一部分(+/-按钮)进行交互,以向该表单动态添加一组控件现有集的下方。 例如,将有一个组合框(下拉菜单)用于
尝试读取/解析输入时,我的C程序出现问题。 救命? 这是一个常见问题解答条目。 StackOverflow有许多与读取C语言中的输入有关的问题,答案通常集中在特定用户的特定问题上,而没有真正描绘出整个
当我尝试读取/解析输入时,我的C程序出现问题。 救命? 这是一个常见问题解答条目。 StackOverflow有许多与读取C语言中的输入有关的问题,答案通常集中在特定用户的特定问题上,而没有真正描绘出
当我尝试读取/解析输入时,我的C程序出现问题。 救命? 这是一个常见问题解答条目。 StackOverflow有许多与读取C语言中的输入有关的问题,答案通常集中在特定用户的特定问题上,而没有真正描绘出
当我尝试读取/解析输入时,我的C程序出现问题。 救命? 这是一个常见问题解答条目。 StackOverflow有许多与读取C语言中的输入有关的问题,答案通常集中在特定用户的特定问题上,而没有真正描绘出
当我尝试读取/解析输入时,我的C程序出现问题。 救命? 这是一个常见问题解答条目。 StackOverflow有许多与读取C语言中的输入有关的问题,答案通常集中在特定用户的特定问题上,而没有真正描绘出
当我尝试读取/解析输入时,我的C程序出现问题。 救命? 这是一个常见问题解答条目。 StackOverflow有许多与读取C语言中的输入有关的问题,答案通常集中在特定用户的特定问题上,而没有真正描绘出
当我尝试读取/解析输入时,我的C程序出现问题。 救命? 这是一个常见问题解答条目。 StackOverflow有许多与读取C语言中的输入有关的问题,答案通常集中在特定用户的特定问题上,而没有真正描绘出
我不知道如何在 C++ 项目中使用 TDD,但我决定先使用“Google Mock Framework”。 但我有一个问题: 当我完成测试时,是否必须从 TDD 的宏、类等中清理我的代码? 换句话说,
我从 sourceForge 获得的这个源文件中有 26 个错误。它是 Stanford CS106B library 的一部分所以应该不会有任何错误。 错误示例: C2059:语法错误:'publi
处理现有的展开/折叠“FAQ” Accordion 页面并希望“展开/折叠”功能正常工作。 我设法让页面开始时所有内容都折叠起来,但是当我单击任何列展开然后单击另一列时,原始列不会折叠。 重要的是,我
可以从 MySQL 数据库获取“常见问题解答”。我有一个存储问题和答案的表。每天在我的网站上我们都会收到数千个问题。 现在我统计一下,我的数据库中有 142,283 个问题。我的想法是通过创建常见问题
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我有以下 html。它由 bootstrap 和 css url 文件组成。它有两个 Accordion 项目选项卡。但是打开的时候发现有javascript错误。当我单击 Accordion 时,它
我观看/阅读/搜索了许多教程,但都没有成功。我坚持 this tutorial . 我正在尝试将带有 JS(可能仅 CSS)的 toogle acordion 效果应用到 div 而不定位。 有两种显
我讨厌问这个问题,因为它已经被问了一百万次,但答案似乎从来都不令人满意,而且大多数线程似乎都没有得到公认的答案就被放弃了。 这正是我需要做的(由于业力低,恶意网址是故意的): http://examp
我正在使用 CRNA v0.44 。我正在进行两个屏幕注册。我在第一个屏幕上,现在我想使用 react 导航转到第二个屏幕。 但是出现错误: undefined is not an object (e
我是一名优秀的程序员,十分优秀!