Questions tagged «distributed-computing»

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

1
分布式队列问题有哪些解决方案?
我正在尝试了解有关解决分布式队列问题的各种方式的更多信息。因此,我想知道已经有哪些产品,服务,实现和研究论文。 一个实现将面临许多挑战,并将被迫进行权衡: 它的订购顺序是否牢固? 它有幂等的位置吗? 我们是否可以拥有比一台计算机上容纳的队列更多的队列? 队列中的数据量是否可以超过一台计算机上容纳的数据量? 在可能丢失数据之前,有多少台计算机可能崩溃? 它可以承受网裂吗? 固定网络拆分后,能否自动协调数据? 客户崩溃时能否保证交货? 是否可以保证同一封邮件不会多次发送? 节点是否可以在任何给定时间崩溃,重新启动并且不发出垃圾? 您是否可以在不停机的情况下向正在运行的群集中添加节点或从中删除节点? 您可以在不停机的情况下升级正在运行的群集中的节点吗? 它可以在异构服务器上正常运行吗? 您可以将队列“粘贴”到一组服务器吗?(例如:“这些队列仅在欧洲数据中心中被允许”) 如果可以的话,是否可以确保将数据副本至少放置在两个数据中心中? 我不幻想任何实现都可以对所有这些说“是”。我只想了解各种实现;他们如何工作,进行了哪些权衡以及也许为什么要决定自己的特定权衡。 另外,如果上面的列表中我可能错过了任何挑战。

8
分布式计算到底是什么?[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 5年前关闭。 究竟什么构成分布式计算,它与并行/并发计算有何不同? 在多个并行线程中尝试使用互斥量和信号量尝试同步访问资源是否会在分布式计算领域构成问题?

2
在分布式,事件源系统中维护一致性的模式?
我最近一直在阅读事件源,非常喜欢它背后的想法,但是仍然遇到以下问题。 假设您有N个并发进程,它们接收命令(例如Web服务器),结果生成事件并将它们存储在集中存储中。我们还假设通过依次应用来自存储的事件,所有瞬态应用程序状态都保留在各个进程的内存中。 现在,我们有以下业务规则:每个不同的用户必须具有唯一的用户名。 如果两个进程收到一个针对相同用户名X的用户注册命令,则它们都将检查X是否不在其用户名列表中,该规则将对这两个进程进行验证,并且它们都会在存储中存储“具有用户名X的新用户”事件。 现在,由于违反了业务规则(存在两个具有相同用户名的不同用户),我们进入了不一致的全局状态。 在传统的N服务器<-> 1 RDBMS样式系统中,数据库被用作同步的中心点,这有助于防止此类不一致。 我的问题是:事件源系统通常如何解决此问题?它们是否只是简单地按顺序处理每个命令(例如,将可写入存储的处理量限制为1)?

3
负载均衡器返回什么?
当用户点击负载均衡器并且负载均衡器确定要转发到哪个Web服务器时,接下来会发生什么?负载平衡器是否将请求及其所有数据转发到Web服务器,是否接收Web服务器的响应并将其返回给用户? 还是更像是重定向,负载平衡器实际上只是将所选服务器的IP地址返回给浏览器,而浏览器必须打开与给定服务器的新连接? 我的直觉是说不会是后者,因为那意味着所有Web服务器IP地址都是公开的,而且我认为出于安全原因,最好只将负载平衡器地址公开给公众。但是,我又不确定,因为如果您SSL termination在负载均衡器上启用,是否不需要通过重定向服务器重新建立SSL?


1
处理异步相互通信的最佳实践?
最近完成了一个处理信用卡处理的项目。我面临的困难之一是处理通知消息的延迟/可能失败。最复杂的示例是: 发送付款请求的外部系统 我的系统将该请求转换为对支付网关的请求 将用户发送到网关 等待用户执行付款 用户返回我的系统,但是一直被保留,直到系统收到成功/失败通知 根据故障将用户发送回外部系统 更加困难的事实是,一旦发送通知失败,网关将尝试每15分钟发送通知数小时。 我使用未决事务的数据库记录解决了它,然后从返回中加上成功的延迟侦听器(用于通知和事务处理)来检测返回的成功和失败... 相当困难! 但是,这一定已经解决了无数次,所以最佳实践是什么? 我看到我的未来将是编写所有这些系统之间的处理程序,并管理时间延迟和可能的网络故障,因此我希望遵循最佳实践。 书籍/文章推荐会很棒。 提前致谢!

3
我们是否已经全面采用微服务,又回到了非常古老的方法?
在软件架构和设计方面,微服务如何与中间件“堆叠”(双关语意)?我来自Java,似乎当您摆脱作为API的直接REST并抽象出不同的层和连接参数时,至少在Java中,您几乎已经完全回到了一些非常古老的想法。我们已经回到虚拟化……而JVM 已经是虚拟的。 以一种不可知论的方式,您可以并且我会争论将RESTful API抽象到CORBA的优点。或者,以Java为中心的方式,使用JMS或MDB。 EJB在Java上曾经是一个大问题,但在某种程度上它被认为是集群效果,但是现在,我们又回到了起点吗? 还是微服务提供了CORBA甚至更好的MDB所缺少的功能?当我读(TLDR)Martin Fowler解释微服务时,如果可以的话,它是解决一个严重问题的很好的解决方案。更确切地说,是一种封闭的方法,它引入了一定程度的复杂性,只能解决问题。如果这些服务确实是微服务,并且数量众多,则每个服务的运行和维护成本都为一美元。 此外,如果许多微服务中的一个微服务更改了其API,那么依赖该服务的所有内容都会中断。它并不显得松散连接,它似乎敏捷的对立面。还是我滥用这些话? 当然,在这些极端之间有很多不确定的选择。 鲨鱼与大猩猩...走吧! (对于书呆子来说,这具有讽刺意味,完全不是我的意图。这个问题是从表面上考虑的。如果这个问题可以改善,请这样做,或者发表评论,我会解决的。 ) 设想在docker上运行的多个微服务都在一台机器上互相交谈...疯狂。难以维护或管理,几乎不可能更改任何东西,因为任何更改都会级联并导致不可预见的错误。这些服务分散在不同的计算机上如何更好?而且,如果它们是分布式的,那么肯定可以解决某些非常非常古老的技术,至少在一定程度上解决了分布式计算的问题。 为什么水平缩放如此普遍,或者至少是可取的?
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.