标签: system-design

在微服务环境中提供静态文件?

为部署在微服务架构(生产中)中的应用程序提供静态文件的首选方式是什么?

为简单起见,假设我有 3 个应用程序服务器和一个将请求转发到这些服务器的负载平衡器。

  • 负载平衡器是否应该存储文件并根据要求立即提供它们?或者..
  • 负载平衡器是否应该将静态文件请求转发到不同的应用程序实例(每个请求到不同的实例)?

是否有最佳实践?

system-design microservices devops

6
推荐指数
1
解决办法
813
查看次数

系统设计:处理对DB的大量写入的策略

从系统设计/可伸缩性的角度来看,在处理需要大量写入数据库中特定表的系统时,有哪些行业标准策略.

为简单起见,假设该表是产品的库存表,并且具有"产品名称"列和"计数"列,并且每次将新产品购买到系统时它只增加+1.每隔2天有数百万用户购买不同的产品,我们必须跟踪每种产品的最新数量,但不一定要严格实时,也许可以接受5分钟的延迟.

我的选择是:

1)主从复制,其中主DB处理所有写入,而从属处理读取.但这并没有解决写得很重的问题

2)根据产品名称范围或其散列值对数据库进行分片.但是,如果某个特定产品(例如Apple)在短时间内收到大量更新,那么它仍然会遇到相同的数据库.

3)批量更新?使用某种缓存并每隔X秒写入表格,累计计算我们在这些X秒内收到的任何数据?这是一个有效的选项,我使用什么缓存机制?如果上次读取和下次写入之间发生崩溃怎么办?如何恢复丢失的计数?

4)我忘记了任何其他明显的选择?

任何见解都表示赞赏!

architecture scalability system-design

6
推荐指数
2
解决办法
982
查看次数

流处理架构

我正在设计一个系统,其中有一个主要的对象流,并且有多个工人从该对象产生一些结果.最后,有一些特殊/独特的工作者(根据图论)的某种"接收器",它获取所有结果,并将它们处理成写入某个DB的最终对象.

工人可能依赖于其他一些工人的结果(因此,等待他们的结果)

现在,我面临几个问题:

  1. 可能是一名工人比另一名工人慢得多.你怎么处理那件事呢?添加更慢类型的更多工作者(=缩放)?(也许是动态的)
  2. 假设W_B依赖于W_A.如果W_B由于某种原因而关闭,则流程将停止,系统将停止工作.所以我想让系统以某种方式绕过这个工人.
  3. 此外,最终工作人员如何决定何时对结果进行操作?假设它有A和B的结果,但缺少C的结果.可能是C下降或者此刻它只是非常慢.它怎么能做出决定?

值得一提的是,它不是实时应用程序,而是离线处理系统(即您可以访问数据库并更改记录),但与此同时,它必须以"高速度"处理相对大量的对象".

关于技术,
我正在使用Java开发系统,但我并没有受到特定技术的限制.

如果你能帮助我完成系统的总体设计,我会很高兴的.

非常感谢!

java stream-processing bigdata system-design event-stream-processing

6
推荐指数
1
解决办法
122
查看次数

websocket 连接如何通过负载均衡器工作?

请原谅我的无知,因为我在负载均衡器和 websockets 方面的经验有限。我试图了解客户端如何通过 websockets 连接到位于负载均衡器后面的服务器集群。

我对负载均衡器的理解是它们就像反向代理。它们接受来自客户端的请求,将它们路由到集群中的服务器,当服务器回复负载均衡器时,负载均衡器将该信息转发给客户端。在这方面,他们就像是在服务器和客户端之间玩电话的中间人。

现在将 websockets 添加到组合中。如果客户端尝试通过 websockets 进行通信。负载均衡器不需要打开 2 个 websockets 连接吗?一个与客户端,一个与服务器?这听起来不会扩展,除非还有一组负载平衡器。

我的第二个猜测是负载均衡器并没有真正“中继”信息,它们只是一个路由器,为客户端提供服务器的 IP,然后直接在服务器和客户端之间进行通信。

看到的有关这方面的信息都忽略了这部分的解释。如果有人能解释我遗漏了什么,我将不胜感激。

load-balancing system-design websocket

6
推荐指数
1
解决办法
867
查看次数

Twitter 扇出设计

我正在阅读 Martin Kleppmann 所著的《设计数据密集型应用程序》一书。作者曾经解释过 Twitter 向用户发布推文(扇出)的不同方法。根据其中一种方法,当有人发布推文时,Twitter 会将此推文添加到发帖者所有关注者的主时间线缓存中,如下图所示。 在此输入图像描述

这是否意味着 Twitter 会为其所有追随者的用户维护实时缓存?维护的缓存会不会太多?

twitter caching system-design

6
推荐指数
1
解决办法
3049
查看次数

如何计算特定 QPS(每秒查询数)需要多少台服务器

粗略计算:\n想象一下,我有一些要求,经过一些计算,我发现我的服务器每秒会收到大约 100k 请求。我需要多少台服务器?假设\xe2\x80\x99s 表示服务器有 32 个 CPU,每个请求需要 100ms

\n

谢谢

\n

architecture system-design

6
推荐指数
2
解决办法
8660
查看次数

如何解决一致性哈希负载均衡中的热分区问题

我试图了解不同的负载平衡策略是如何工作的。

一种方法是使用一致性哈希算法,将整个空间划分为多个虚拟节点,每个物理节点占用一组虚拟节点。

我不明白热分区问题将如何解决?是否有可能出现某个特定节点比其他节点更繁忙的情况?

有人可以添加他们处理类似用例的经验吗?任何指向正确文档/文献的指针都会有所帮助。

load-balancing system-design consistent-hashing

6
推荐指数
0
解决办法
582
查看次数

在 NET 6.0 中使用 HttpClient 的最佳实践

我正在为下一个任务寻找最佳实践解决方案。

我使用 ASP.NET Core 6.0。

我创建了一个可与公共 API 配合使用的 SDK。SDK通过Http请求与API进行通信。我使用HttpClient类来发出 http 请求。

我的目标是构建一个 Nuget 包,以便消费者只需安装此 SDK 即可与公共 API 进行通信。

最后我们有两个项目:

  1. 消费项目
  2. SDK项目

问题:我必须在哪里实例化类的实例HttpClient

我的想法:如果我在Sdk项目中这样做,并且只使用:

HttpClient client = new HttpClient();
Run Code Online (Sandbox Code Playgroud)

不是很好。因为通过创建 HttpClient 类的实例是不好的做法new()。请参阅 https://learn.microsoft.com/en-us/dotnet/fundamentals/networking/http/httpclient-guidelines

根据 MS 的此指南,我必须在消费者项目中通过 DI 启动此实例:

services.AddHttpClient(); 
Run Code Online (Sandbox Code Playgroud)

如果我选择此选项,我认为客户将很难注册我的 SDK,客户必须执行两个步骤:

  1. 注册HttpClient到DI容器中
  2. 在容器中注册SDK

是否可以减少步骤并让我的库的使用变得更容易?

c# system-design dotnet-httpclient asp.net-core .net-6.0

6
推荐指数
1
解决办法
6285
查看次数

CLI设计和实现?

我正在开发一个供个人使用的时间管理工具.我更喜欢使用键盘而不是鼠标,并且在界面上有一个通用文本框,它将像命令行一样.我刚开始考虑我需要什么命令,命令名称使用什么,如何传递开关和参数等等.

我想知道你们中有些人是否有过这方面的好读物; 描述您设计cli的选择,以及它们如何影响解释器的复杂性以及命令的可扩展性.如果描述是特定于语言或一般而言,则没有区别.但是,我的实现将使用javascript.

谢谢.

command-line-interface system-design

5
推荐指数
1
解决办法
1773
查看次数

创建一个简单的不可否认/防欺诈系统

如果我想创建一个简单的欺诈证明和不可否认系统,我应该考虑哪些关键功能?对于这个问题,我主要关注数据库行的完整性。这不是安全权限问题。

以足球数据库为例,我要实现的一些关键功能是:

  1. 防止DBA使用传统SQL修改行数据。例如,如果数据库行已经存储了 2:1 作为结果,如果 DBA 将结果更改为 2:3,我们应该能够检测到修改。所有更改都应通过主应用程序完成。

  2. 防止使用后端更改将一行数据复制到另一行。我们应该能够检测到欺诈行为的变化。

我还应该考虑任何其他问题或功能来使我的系统更加防欺诈吗?我应该注意哪些最佳实践?任何指示将不胜感激。

提前谢谢了。

c# database-design system-design

5
推荐指数
1
解决办法
775
查看次数