Questions tagged «scalability»

可伸缩性是系统,网络或进程以有能力的方式处理不断增长的工作量的能力,或者为了适应这种增长而进行扩展的能力。

4
为什么NoSQL数据库比SQL更可伸缩?
最近,我读了很多有关noSQL DBMS的文章。我了解CAP定理,ACID规则,BASE规则和基本理论。但是没有找到关于为什么NoSQL比RDBMS更容易扩展的资源(例如,在需要大量数据库服务器的系统中)吗? 我猜想,保留约束和外键会浪费资源,而在分发DBMS时,它要复杂得多。但是我希望还有更多。 有人可以解释一下noSQL / SQL如何影响可伸缩性吗?
98 sql  nosql  scalability 

8
将网站设计为高度可扩展的最佳方法是什么?
对于需要高度可扩展性的网站(例如Facebook之类的社交网络),设计网站的最佳方法是什么? 我是否应该具有网站查询的Web服务以获取所需的数据? 要么 该网站应该直接查询数据库吗?(可以使用内置的语言构造来自动填充表格等)。 我认为Web服务是更好的设计,因为它提供了集中的数据访问,并且诸如缓存之类的东西变得更易于控制,但是其他人怎么看?

2
如何设计可扩展的通知系统?[关闭]
我需要写一个通知系统管理员。 这是我的要求: 我需要能够在可能完全不同的不同平台上发送通知(例如,我需要能够发送SMS或电子邮件)。 有时,对于给定平台的所有收件人,通知可能是相同的,但是有时,可能是每个平台(或多个)每个收件人的通知。 每个通知可以包含特定于平台的有效负载(例如,MMS可以包含声音或图像)。 系统需要可伸缩,我需要能够发送大量通知而不会导致应用程序或服务器崩溃。 这是一个分为两个步骤的过程,首先,客户可以输入消息并选择要发送到的平台,然后创建通知,以便稍后进行实时处理。 然后,系统需要将通知发送到平台提供商。 就目前而言,尽管我得到了一些结论,但是我不知道它的可扩展性或它是否是一个好的设计。 我有以下对象(使用伪语言): 通用Notification对象: class Notification { String $message; Payload $payload; Collection<Recipient> $recipients; } 如果我有1.000.000收件人,则以下对象的问题是什么?即使Recipient对象很小,也会占用太多内存。 我还可以为每个收件人创建一个通知,但是某些平台提供商要求我批量发送该通知,这意味着我需要定义一个包含多个收件人的通知。 每个创建的通知可以存储在诸如DB或Redis的持久性存储中。 稍后汇总此内容以确保其可伸缩性是否很好? 在第二步中,我需要处理此通知。 但是,如何区分通知给正确的平台提供商的通知呢? 我应该使用诸如MMSNotification扩展对象之类的对象abstract Notification吗?或类似的东西Notification.setType('MMS')? 为了允许同时处理大量通知,我认为像RabbitMQ这样的消息传递队列系统可能是正确的工具。是吗? 这将使我可以排队很多通知,并有几个工作人员弹出通知并进行处理。但是,如果我需要如上所述对收件人进行批处理怎么办? 然后我想象NotificationProcessor的,我我可以添加对象NotificationHandler的每个NotificationHandler将负责连接平台提供商和执行通知。 我也可以使用EventManager允许插入行为。 有任何意见或建议吗? 感谢您抽出宝贵的时间。 注意:我曾经使用过PHP,并且它可能是我选择的语言。 编辑 (根据morphunreal的答案) 您每秒发送多少消息(定义当前/初始级别,定义在重新设计之前系统应处理的最大级别) 系统具有哪些硬件限制(内存,CPU等可供系统使用) 硬件将如何扩展(即添加更多服务器,云计算等) 哪些语言/系统将生成通知? 它是我自己的事情,我负责以编程方式创建通知,但该通知是通过用户界面构建的。 生成器是否知道消息的收件人(?),还是通过其他某种方式提供消息(例如,某些警报类型的业务规则将发送给某些收件人) 应该可以为特定收件人,一组收件人(例如,使用标签系统)或整个平台创建通知。 是否有添加CC / BCC /阅读收据的业务规则 是。请注意,这实际上是特定于平台的,read或cc并非在所有平台上都可用。 …


4
像亚马逊这样的公司如何避免访问数据库层的瓶颈?
如果您想象一家像亚马逊(或任何其他大型电子商务网站应用程序)的公司正在大规模运营一家在线商店,而其仓库中的实物数量有限,那么他们如何优化这一点,以至于没有一个瓶颈?当然,它们必须具有多个具有复制功能的数据库,以及许多独立处理负载的服务器。但是,如果多个用户由不同的服务器提供服务,并且两个用户都试图将相同的商品添加到他们的购物车中,而该商品仅剩一个,则该商品的剩余数量必须有一些“真相来源”。这是否意味着至少,所有访问单个商品的产品信息的用户都必须串行查询同一数据库? 我想了解如何使用分布式计算来经营这么大的商店,而又不会在包含库存信息的单个数据库上造成巨大的瓶颈。

6
从SQL迁移到NoSQL会以什么大小的数据受益?
作为关系数据库程序员(大部分时间),我阅读了有关关系数据库如何不扩展以及MongoDB等NoSQL解决方案如何扩展的文章。由于到目前为止我开发的大多数数据库都是中小型的,所以我从来没有遇到过一些索引,查询优化或模式重新设计尚未解决的问题。 我希望看到MySQL会遇到什么样的大小。多少行? (我知道这将取决于应用程序和存储的数据类型。让我知道的一个东西基本上是遗传学数据库,因此将有一个主表,带有3或4个查找表。主表将在其中包含其他内容,例如染色体参考和位置坐标。很可能会查询到染色体上两个药水之间的许多条目,以查看其中存储了什么。

2
内部使用网站:是否有针对SQLite的令人信服的案例?
许多Web框架(例如Flask或Django)都使用SQLite作为其默认数据库。 SQLite之所以引人注目,是因为它包含在python中,并且管理开销非常低。 但是,大多数高流量的公共生产站点最终都使用更重的数据库:mySQL,Oracle或postgresql。 问题: 假设: 站点流量适中,并且将同时进行对数据库的读/写访问 我们将结合使用SQLAlchemy和SQLite写锁(尽管此注释使我有些紧张) 该数据库可能包含60,000条记录 数据结构不需要在较重的数据库中发现的高级功能 对于作为中等流量内部公司工具的网站,是否存在令人信服的反对SQLite并发的案例?如果是这样,什么条件将导致SQLite出现并发问题? 我正在寻找已知的特定根本原因,而不是普遍的恐惧/未经证实的指责。

5
如何管理垃圾桶用户?
我创建了一个系统,希望它将有很多用户。我们担心我们的数据库将堆满使用高要求用户名的垃圾用户,或者他们只是注册而永不回来。 我知道这很常见,我自己做,因为我有3个Google帐户,但我只使用1。一个大型网站如何管理垃圾用户或永远不会像这样回来?

1
设计可伸缩的消息队列体系结构
我最近开始学习可伸缩和企业计算机体系结构的细微差别,其中的核心组件之一是消息传递队列。为了从任何编程范例中学到最多的知识,我试图实现自己的消息传递队列服务版本。 到目前为止,我的最初设计是在线程套接字侦听器上运行的,但是为了防止同一消息被两个单独的处理节点下载两次,消息队列索引寄存器在启动读取时被锁定,并在该寄存器被锁定后解锁。更新。这样,就不需要对其进行线程化,并且意味着基于正在运行消息传递队列服务的服务器的处理速度,可伸缩系统的大小存在上限。 解决此问题的方法是在多个服务器上运行消息队列服务,但这将增加两次下载同一条消息的可能性。防止发生此类问题的唯一方法是包括一个撤消回调(该撤消回调(在服务器甚至单个服务器上的线程已同步其信息并检测到此类重新发布之后)将命令处理节点停止其运行。当前作业,然后重新查询消息队列以获取下一条消息,但是同样,还会有一个上限,在该上限中,大多数正在发送的流量将是同步和吊销回调,从而导致瓶颈并减慢了信息处理的速度,因此许多处理节点将执行空操作并浪费时间。 我能想到的解决此问题的最后一种方法是,使每个消息队列服务器(以及每个服务器上的每个线程)在队列中查找的位置具有特定的偏移量,但这可能会基于类型的应用程序,特别是如果要求以特定顺序进行处理时。 因此,话虽这么说,是否有任何消息队列体系结构设计可以向我展示现有的企业级消息队列服务如何避免这些问题?

4
BDD是否可扩展到大中型项目?
在您阅读的有关BDD(行为驱动开发)的每个网站中,您都可以找到一个非常简单的好例子,向您展示定义需求的显而易见和容易。但是,尝试在大型产品(而不是计算器示例)中实施此过程,向我展示了事情可能变得(或将变得)非常复杂且难以理解。特别是在稍后更改请求意味着为此需要进行大量的工作来更正集成测试。 所以我想知道,BDD真的值得吗?它是否解决了其他技术无法解决的问题!

3
Node.js是否真的增加了可伸缩性?
我一直在阅读有关C10K问题的信息,特别值得注意的是引用异步服务器I / O的部分。http://www.kegel.com/c10k.html#aio 我相信,这可以通过允许线程处理用户请求,同时依靠I / O中断(事件)通知线程已完成的工作,而不是由线程负责完成工作来总结Node.js在服务器上的工作。完整的CPU工作。线程可以继续执行其他操作(非阻塞),并在完成工作时得到通知(例如,找到文件或压缩视频)。 因此,这意味着套接字更“可用”线程,因此服务器上的用户也可以使用该线程。 然后我发现了这一点:http : //teddziuba.com/2011/10/straight-talk-on-event-loops.html 这里的作者声称,尽管事件驱动框架(中断线程)可以释放线程,但实际上并没有减少CPU要做的工作量!这里的基本原理是,例如,如果用户请求压缩他们上传的视频,则CPU仍然必须实际执行此工作,并且在执行该操作时将处于阻塞状态(为简单起见,请在此处忘记并行性-除非您更了解!)。 我是一个简单的编码器,不是服务器管理员或类似的人。我只是想知道:Node.js是来自“云计算”之神的礼物还是全是热销的东西,实际上不会通过改善可扩展性来节省公司的时间和/或金钱吗? 非常感谢。

2
如何衡量软件的可扩展性?
我被要求就特定的应用程序可伸缩性做一些小型的技术介绍。该应用程序是使用Java,Spring MVC,Hibernate开发的。我可以访问应用程序源代码。 如何测量软件可伸缩性(使用源)以及在测量软件可伸缩性时需要注意哪些指标?

5
作为“最低开发商”与技术债务作斗争?
假设您在一家公司工作,而您所要做的就是为他们开发软件。您不了解总体情况,也可能不了解。您所拥有的是通过问题跟踪系统分配给您的任务。您得到了任务,使它们按照任务描述它们的方式工作,然后将其发回。像加2个整数: function add(a,b){return a + b;} 但是后来,随着项目的进行,您注意到随着add变得越来越复杂,您意识到它应该需要某种形式的体系结构,而不仅仅是添加参数并返回值的函数。但是,您不知道。首先,他们所需要的就是这么简单add。您没想到add会变得如此复杂。 该项目具有更多功能,而您最初没有想到这些功能。最后,您将不断堆积各种技巧和功能,以免破坏/重写现有代码。 您如何处理这些情况?作为“最低开发商”,您如何应对技术债务? 澄清: 您是层次结构中最低的“实施者”。 您看到了问题,但对此没有发言权。 我不是在量化技术债务或寻找工具。 关于第三个“重复” 重构和重写-您被锁定在任务上。您无需支付额外费用。 体系结构概述-您了解整个系统,但不了解体系结构。 代码冻结-不是您的电话。您不是管理者。 模块化-不了解架构。模块随需求的变化而变化。 自动化测试-不存在。

8
巨大的整体应用的危险
我现在从事的一个大型项目现在是高级设备的控制(及所有)应用程序,它是固件的核心。 该设备相当先进,具有比我在内存中所能说的更多的不同功能,其中98%由该庞大的可执行文件处理。一方面,该程序可维护性强,内部模块化程度高,文档正确,并且按目录和文件等对功能进行了合理隔离。 但是最后,它被全部集中到一个应用程序中,该应用程序执行从远程数据库通信,触摸屏处理,处理十二种各种通信协议,测量,几种控制算法,视频捕获,日出时间和复活节日期(认真地,通常,这是非常紧密相关的内容,通常仅通过一些在一些远模块之间滴加的数据才相关。 它可以通过几个单独的可执行文件相互通信来完成,例如,通过套接字进行通信,具有更特定的目的,可以根据需要加载/卸载等等。没有这种特定方式的原因。 一方面,它有效,而且还可以。该项目更加简单,无需维护多个二进制文件的构建。当您可以仅调用方法或读取变量而不是通过套接字或共享内存进行通信时,内部结构也更容易。 但另一方面,这东西的大小,规模让我感到无所适从,感觉就像是驾驶泰坦尼克号一样。我总是被教导要模块化,将所有内容都聚集到一个庞大的文件中感觉很不对。我知道的一个问题是,一个严重的崩溃(甚至无关紧要的)使所有模块崩溃了,但是代码质量确保在发行版中不会真正发生这种情况。否则,内部隔离和防御性编程可确保即使一半内部模块由于某种原因正常发生故障,该操作仍将大部分正确地运行。 我还忽略了哪些其他危险?为什么这使我感到恐惧?这只是对未知的非理性恐惧吗?这样进行严肃的大型项目是否可以接受?请平息我的担心,或者给我一个很好的理由将2.0版重构为多个较小的二进制文件。

3
当您无法重现环境时,如何进行测试和优化?
过去,我曾在多种环境中工作过。桌面应用程序,游戏,嵌入式内容,Web服务,命令行作业,网站,数据库报告等。所有这些环境都具有相同的特征:无论它们的复杂性如何,无论它们的大小如何,我都可以始终在我的机器上或开发环境中对应用程序的子集或分片进行测试。 今天我没有。今天,我发现自己处于主要关注可伸缩性的环境中。复制环境的成本过高。截取一部分环境,虽然很合理(某些部分需要模拟,或者不能在单实例模式下使用),但由于破坏了并发性和负载真正的系统遇到。即使是小的“测试”系统也有其缺陷。当您有2个节点和64个节点时,事情的表现会有所不同。 我通常的优化方法(度量,尝试某些操作,验证正确性,度量差异,重复)在这里不起作用,因为我无法有效地对问题的各个部分(并发鲁棒性和性能降低)进行第2步和第3步加载)。这种情况似乎并不独特。在这种环境下执行此类任务的常用方法是什么? 有一些相关的问题: 这个问题与硬件(如频谱分析仪)不可用有关,可以(相对)轻松地进行仿真。 这个问题是关于追踪仅存在于生产环境中的错误,这很有帮助-但是是另一种活动。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.