问题标签 [system-design]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
553 浏览

design-patterns - 使用策略模式支持从多个来源上传文件

我正在开发一个需要我重构文件上传功能的网络应用程序项目。我们的文件上传功能支持多种上传文件来源,例如git reponexus URLzip 文件,我们还希望将来支持更多,例如 perforce。在当前的实现中,应用程序有多个端点来处理不同的方法,例如getNexusFile(), getGitFile(), getZipFile(); 在每种方法下,都有从指定来源检索文件的实现。

我的想法是将所有这些方法合并为一个getUploadFile()使用Strategy Pattern调用的方法。与策略模式一样,可以在运行时选择算法,因此在我指定正确的策略后,可以无视从不同来源上传的文件。对于每个来源,我都会为其制定策略。

我的问题是:这是设计模式的好习惯吗?有没有更好的方法来模拟这个问题?

0 投票
2 回答
72 浏览

arrays - 如何在一个相当大的数组中获得最大数量的连续整数(分布在多台机器上)

我在一次采访中被问到这个问题。第一部分相当简单,我必须编写代码来获取数组中连续整数的最大数量。以下是我写的代码:

第二部分是关于它的后续问题:

您将如何修改此逻辑以适用于存储在多台机器中的数组?

0 投票
2 回答
535 浏览

architecture - 网址缩短器的系统设计

https://www.hiredintech.com/classrooms/system-design/lesson/55的约束视频中,叙述者必须估计每月应处理的请求。在达到每月生成 100 万个新网址的数字后(由于缩短),他陈述了以下近似值:-

1) 每个 url 的平均生命周期为 2 周

2) 20% 的网址产生 80% 的流量

考虑到上述情况,他做了一些“快速计算”,得出了每月要处理 1 BN 个请求的数字。

谁能说说他是怎么计算出这样一个数字的?

0 投票
2 回答
538 浏览

algorithm - 如何设计一个可以查询最近 n 小时内排名靠前的结果的系统

我在一次采访中被问到这个问题。细节是假设我们收到数百万个事件。每个事件都有一个时间戳和其他详细信息。系统设计要求最终用户能够查询最近 10 分钟或 9 小时或可能是 3 个月内最频繁的记录。

事件可以看如下

0 投票
0 回答
47 浏览

java - 要插入的表是在运行时决定的,所有可能的表都有不同的字段

我们有一个父类型,可以说业务部门的名称(例如航空,国防),基于部门,我们有动态表格,要求提供部门特定数据,并且在提交时我们需要将该数据存储在航空表中(因为用户选择了航空),航空表也具有与国防或生物技术不同的领域。

我们希望利用 Java 中的设计原则和反射来避免样板代码并使其尽可能动态

我们也使用休眠,因此我们需要动态地以 valueObject VO 结束,这样我们就可以调用

也只是为了说明可能的样板的规模,我们有 26 个这样的父类型(此处为部门)。

任何可以帮助的想法都会受到赞赏。

0 投票
1 回答
581 浏览

java - 当消费者从rabbitmq中的通道获取消息时,预取消息驻留在哪里

我有以下 rabbitmq 的配置

prefetchCount:1 确认模式:自动。

我有一个交换器,一个队列连接到该交换器,一个消费者连接到该队列。根据我的理解,如果队列有多条消息,将执行以下步骤。

  1. 在通道上排队写入数据。
  2. 由于 ack-mode 是自动的,一旦队列在通道上写入消息,消息就会从队列中删除。
  3. 消息到达消费者,消费者开始对该数据执行。
  4. 由于 Queue 已获得对先前消息的确认。Queue 将下一个数据写入 Channel。

现在,我的疑问是,假设消费者还没有完成之前的数据。下一个数据队列写入通道会发生什么?

另外,假设 prefetchCount 是 10,并且我只有一次消费者附加到队列,这 10 条消息将驻留在哪里?

0 投票
1 回答
65 浏览

java - 设计非实时、非阻塞、结果相关的系统

语境:

1)我们有一个调度程序,它通过以阻塞方式调用另一个 rest-call 来获取作业并处理它们。

2)调度程序线程需要等待休息调用完成并根据结果依次执行一些其他任务。

3) 对于实时性没有任何限制。

问题陈述:

1)我们想要的是在进行外部调用后立即释放调度程序线程,因为外部调用需要大量时间才能完成。

2)我们应该被告知从外部调用收到的结果,因为我们需要根据结果进行一些处理。

我心中的想法:

1)我们可以将事件推送到队列中,而不是使用同步Http调用来调用外部系统。

2)另一个系统的API使用者将从队列中读取事件并执行长时间运行的任务。并且后期处理将结果推送回不同主题的队列。

3)我们的系统现在可以从队列(第二个主题)中读取响应并执行必要的操作。

这是我的设计方法之一

我需要关于我们是否可以以某种方式改进设计的建议。

1)这可以在不引入队列的情况下完成吗?

2)有没有更好的方法来实现异步处理?

0 投票
1 回答
94 浏览

elasticsearch - Elasticsearch:2 亿个别名?

我观看了Shay Banon 的演讲,他提出了一种有趣的设计模式来创建“每用户索引”。他谈到了创建单个索引并使用带有路由键的别名来表示每个用户的“索引”。您可以创建的别名数量是否有限制?

我看到这篇文章有人在创建 100 万个索引时遇到问题,并解释了索引模板如何成为优化事物的好主意。

我正计划从事类似的工作,但规模约为 2 亿个别名。今天这可能吗?有人有任何数字吗?

我应该考虑完全不同的设计还是相同的模式?

0 投票
2 回答
330 浏览

microservices - 单体到微服务

我们正计划从单体架构迁移到基于微服务的架构。现在我有责任从单体中谈论一个模块。

现有单体:

1) 代码耦合非常紧密。

2) 使用不同的参数递归调用 API。

3)我计划提取的模块中的一些调用包含对系统的调用,大约需要 9 分钟才能完成。不幸的是,这是一个同步的。

注意事项:

1) 我从单个 api 迁移开始,这是一个非常重要的迁移,但表现不佳。2) 这个 api 包含对另一个系统的并行调用,用于执行一堆任务。所有呼叫都是阻塞且耗时的(考虑平均响应时间为 5-6 分钟)

迁移到基于微服务的架构:在将上述 api 从单体应用迁移到单独的微服务时,我想到了两种方法,同时解决了由于阻塞调用时间而阻塞线程的问题。

a) 分阶段进行

b) 立即将 API 移动到微服务:

  • 最初,它将与单体共享公共数据源,并通过在新微服务和需要时间处理请求的模块之间引入 kafka 来解决阻塞调用的问题。

    优势:

    1) 后备在单体应用中可用

    坏处:

    1) 最初数据源在系统之间共享。

完成这些复杂任务的最佳方法应该是什么?

0 投票
1 回答
1261 浏览

networking - websocket可以耗尽webserver的连接池吗

我见过很多人写过 Ajax(polling) vs websocket。我没有看到任何人在下面提到 websocket 的缺点。

正如我们所知,对于每个 http 请求,网络服务器都需要连接。网络服务器可以支持的最大并发连接数,除此之外,如果请求到来,请求将不得不等到任何连接收费。

I case of simple http request(poll based),当一个请求由服务器连接被放入池中并且该连接可以用于下一个请求,所以在简单的http请求中不太可能,一个请求将等待一个联系。

但是在 websocket 中,连接永远不会放回 webserver 的池中,因此下一个请求将不得不一直等待连接将非常频繁。

所以,我想知道,我是在想正确还是错过了什么。我是对的,这是如何解决的?这个问题曾经发生过吗?