为部署在微服务架构(生产中)中的应用程序提供静态文件的首选方式是什么?
为简单起见,假设我有 3 个应用程序服务器和一个将请求转发到这些服务器的负载平衡器。
是否有最佳实践?
从系统设计/可伸缩性的角度来看,在处理需要大量写入数据库中特定表的系统时,有哪些行业标准策略.
为简单起见,假设该表是产品的库存表,并且具有"产品名称"列和"计数"列,并且每次将新产品购买到系统时它只增加+1.每隔2天有数百万用户购买不同的产品,我们必须跟踪每种产品的最新数量,但不一定要严格实时,也许可以接受5分钟的延迟.
我的选择是:
1)主从复制,其中主DB处理所有写入,而从属处理读取.但这并没有解决写得很重的问题
2)根据产品名称范围或其散列值对数据库进行分片.但是,如果某个特定产品(例如Apple)在短时间内收到大量更新,那么它仍然会遇到相同的数据库.
3)批量更新?使用某种缓存并每隔X秒写入表格,累计计算我们在这些X秒内收到的任何数据?这是一个有效的选项,我使用什么缓存机制?如果上次读取和下次写入之间发生崩溃怎么办?如何恢复丢失的计数?
4)我忘记了任何其他明显的选择?
任何见解都表示赞赏!
我正在设计一个系统,其中有一个主要的对象流,并且有多个工人从该对象产生一些结果.最后,有一些特殊/独特的工作者(根据图论)的某种"接收器",它获取所有结果,并将它们处理成写入某个DB的最终对象.
工人可能依赖于其他一些工人的结果(因此,等待他们的结果)
现在,我面临几个问题:
值得一提的是,它不是实时应用程序,而是离线处理系统(即您可以访问数据库并更改记录),但与此同时,它必须以"高速度"处理相对大量的对象".
关于技术,
我正在使用Java开发系统,但我并没有受到特定技术的限制.
如果你能帮助我完成系统的总体设计,我会很高兴的.
非常感谢!
java stream-processing bigdata system-design event-stream-processing
请原谅我的无知,因为我在负载均衡器和 websockets 方面的经验有限。我试图了解客户端如何通过 websockets 连接到位于负载均衡器后面的服务器集群。
我对负载均衡器的理解是它们就像反向代理。它们接受来自客户端的请求,将它们路由到集群中的服务器,当服务器回复负载均衡器时,负载均衡器将该信息转发给客户端。在这方面,他们就像是在服务器和客户端之间玩电话的中间人。
现在将 websockets 添加到组合中。如果客户端尝试通过 websockets 进行通信。负载均衡器不需要打开 2 个 websockets 连接吗?一个与客户端,一个与服务器?这听起来不会扩展,除非还有一组负载平衡器。
我的第二个猜测是负载均衡器并没有真正“中继”信息,它们只是一个路由器,为客户端提供服务器的 IP,然后直接在服务器和客户端之间进行通信。
看到的有关这方面的信息都忽略了这部分的解释。如果有人能解释我遗漏了什么,我将不胜感激。
粗略计算:\n想象一下,我有一些要求,经过一些计算,我发现我的服务器每秒会收到大约 100k 请求。我需要多少台服务器?假设\xe2\x80\x99s 表示服务器有 32 个 CPU,每个请求需要 100ms
\n谢谢
\n我试图了解不同的负载平衡策略是如何工作的。
一种方法是使用一致性哈希算法,将整个空间划分为多个虚拟节点,每个物理节点占用一组虚拟节点。
我不明白热分区问题将如何解决?是否有可能出现某个特定节点比其他节点更繁忙的情况?
有人可以添加他们处理类似用例的经验吗?任何指向正确文档/文献的指针都会有所帮助。
我正在为下一个任务寻找最佳实践解决方案。
我使用 ASP.NET Core 6.0。
我创建了一个可与公共 API 配合使用的 SDK。SDK通过Http请求与API进行通信。我使用HttpClient
类来发出 http 请求。
我的目标是构建一个 Nuget 包,以便消费者只需安装此 SDK 即可与公共 API 进行通信。
最后我们有两个项目:
问题:我必须在哪里实例化类的实例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,客户必须执行两个步骤:
HttpClient
到DI容器中是否可以减少步骤并让我的库的使用变得更容易?
我正在开发一个供个人使用的时间管理工具.我更喜欢使用键盘而不是鼠标,并且在界面上有一个通用文本框,它将像命令行一样.我刚开始考虑我需要什么命令,命令名称使用什么,如何传递开关和参数等等.
我想知道你们中有些人是否有过这方面的好读物; 描述您设计cli的选择,以及它们如何影响解释器的复杂性以及命令的可扩展性.如果描述是特定于语言或一般而言,则没有区别.但是,我的实现将使用javascript.
谢谢.
如果我想创建一个简单的欺诈证明和不可否认系统,我应该考虑哪些关键功能?对于这个问题,我主要关注数据库行的完整性。这不是安全权限问题。
以足球数据库为例,我要实现的一些关键功能是:
防止DBA使用传统SQL修改行数据。例如,如果数据库行已经存储了 2:1 作为结果,如果 DBA 将结果更改为 2:3,我们应该能够检测到修改。所有更改都应通过主应用程序完成。
防止使用后端更改将一行数据复制到另一行。我们应该能够检测到欺诈行为的变化。
我还应该考虑任何其他问题或功能来使我的系统更加防欺诈吗?我应该注意哪些最佳实践?任何指示将不胜感激。
提前谢谢了。
system-design ×10
architecture ×2
c# ×2
.net-6.0 ×1
asp.net-core ×1
bigdata ×1
caching ×1
devops ×1
java ×1
scalability ×1
twitter ×1
websocket ×1