问题标签 [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 投票
0 回答
78 浏览

mysql - 数据库如何原子地写日志?

“计算机系统设计原理”的 LOG第 9.3.2 节中,是一个将日志原子地(具有全有或全无语义)写入磁盘以实现预写日志协议的过程。但本书并未讨论有关LOG. 我想知道在实践中LOG程序是如何实现的,比如Mysql、Oracle等。

0 投票
1 回答
28220 浏览

object-oriented-analysis - 学习解决系统设计面试问题的资源

除了更常见的算法和基于知识的问题外,系统设计问题是科技公司在面试中倾向于提出的一种问题。该术语涵盖了抽象的面向对象设计

画出垄断游戏的类图

以及更多脚踏实地的以性能为导向的问题,例如

您将如何为大型 Facebook 游戏设计事件记录系统?

如今,越来越多的这些问题涉及并发和分布式计算的主题。这类问题的问题是——很难找到好的资源。与算法问题不同,没有在线评委可以立即告诉您您是否做对了。在careercup 等网站上发布的问题没有答案或不可靠。涉及系统设计的书籍范围太广,无法用于准备面试。那么:你如何准备好几年没有设计系统的系统设计问题?网上有教程吗?问题 - 答案(解释) - 类型指南?

0 投票
4 回答
913 浏览

uml - 传统的基于代码的工程和模型驱动的工程方法之间有什么区别?

我在文献中找到了这一段,但我不明白它的含义

设计实践正在从传统的基于代码的工程(在开发生命周期中具有强大的工作分工)转变为模型驱动的工程方法,在这种方法中,设计流程中的所有人都可以对模型发表意见。

任何帮助将不胜感激

0 投票
3 回答
25094 浏览

architecture - 设计一个通用的作业调度器

我正在尝试设计一个通用的作业调度程序来扩展我的架构知识和在面试中思考系统设计问题的能力。到目前为止,我想出的内容如下。你能指出我应该在哪里工作以全面解决这类问题吗?

我在网上阅读了很多资源,但在前进时需要一些具体的指导。

为 X 公司(当今最大的技术公司之一)设计一个通用的作业调度程序。

用例

创建/读取/更新/删除作业

调查过去运行的作业(作业类型、花费的时间、详细信息)

约束

每秒将在系统上运行多少作业?

= 用户数/小时的作业数 + 机器数/小时的作业数

= 1m * 0.5 /天/24/3600 + 1m/50*20/24/3600

~= 12 个作业/秒

系统需要存储多少数据?

推理:我只是存储作业执行细节,实际工作(脚本执行)是在其他机器上完成的,收集的一些数据是结束时间、成功/失败状态等。这些> 都可能只是文本,可能带有用于说明目的的图形。我将通过作业调度程序将 > > 所有作业的数据存储在系统中(即过去 10 年)

=(设置作业详细信息的页面大小 + 收集的有关作业的数据大小)* 作业数 * 365 > 天 * 10 年 = 1 MB * 900 000 * 365 * 10

~= 3600 000 000 MB

= 3600 000 GB

=3600 TB =3.6 PB

抽象设计

根据上面的信息,我们不需要太多的机器来保存数据。我会将设计分解为以下内容:

应用层:服务请求,显示 UI 细节。

数据存储层:就像一个大哈希表:存储键值对的映射(键是按日期时间组织的作业,它们运行,而值将显示这些作业的详细信息)。这是为了能够轻松搜索历史和/或计划的作业。

瓶颈:

流量:12 个作业/秒并不太具有挑战性。如果这个峰值,我们可以使用负载平衡器将作业分配到不同的服务器以执行。

数据:在 3.6 TB 时,我们需要一个可以轻松查询的哈希表,以便快速访问已在应用程序中执行的作业。

缩放抽象设计

此作业调度程序的本质是每个作业都具有以下几种状态之一:待处理、失败、成功、终止。无业务逻辑 返回少量数据。

为了处理流量,我们可以有一个每秒处理 12 个请求的应用程序服务器和一个备份,以防万一失败。将来,我们可以使用负载均衡器来减少发往每台服务器的请求数量(假设>1台服务器正在生产中)这样做的好处是减少请求/服务器的数量,提高可用性(以防一台服务器发生故障,并且很好地处理峰值流量)。

对于数据存储,要存储 3.6 TB 的数据,我们需要几台机器将其保存在数据库中。我们可以使用 noSQL 数据库或 SQL 数据库。鉴于后者具有更广泛的使用和社区支持,这将有助于解决问题并且目前被大公司使用,我会选择 mySQL db。

随着数据的增长,我会采用以下策略来处理它:

1)在哈希上创建唯一索引

2) 通过添加更多内存垂直扩展 mySQL 数据库

3)通过分片对数据进行分区

4)采用主从复制策略,主从复制,保证数据冗余

结论

因此,这将是我对作业调度程序组件的设计。

0 投票
1 回答
3960 浏览

unicode - 如何在 Enterprise Architect 中设置使用 unicode 字体

我尝试通过 Enteprise Architect (EA) 绘制数据流图 (DFD)。我使用的是越南语,但 Enterprise Architect 第一次只显示真正的 unicode,然后显示错误。如果您使用 EA,让我们尝试一些 unicode 文本:"Sinh viên""Quản trị hệ thống""Kho đồ án"等。并弄清楚如何输入 unicode 字体和显示,打印这些文本为 true。

在此处输入图像描述

谢谢!

(我已经读过这个,但答案并没有找到真正的解决方案,尽管答案被接受了)

0 投票
6 回答
25534 浏览

cron - 如何设计分布式作业调度器?

我想设计一个作业调度器集群,其中包含几个主机来做 cron 作业调度。例如,一个需要run every 5 minutes提交到集群的作业,集群应该指出下一次运行哪个主机,确保:

  1. 容灾能力:如果不是所有的主机都宕机了,这个作业应该可以成功触发。
  2. 有效性:只有一个主机可以触发下一个作业运行。

由于容灾的原因,作业无法绑定到特定的主机。一种方法是所有主机轮询数据库表(当然有锁),这保证只有一个主机获得下一个作业运行。既然经常锁表,有没有更好的设计呢?

0 投票
1 回答
109 浏览

architecture - 使用 DAL 架构的用户会话

我正在从头开始设计一个系统。我正在考虑:

  1. 是否完全使用 DAL 与直接 DB 访问(例如 ORM)
  2. 如果我使用 DAL,我是直接通过我的应用程序还是在 DAL 中存储/管理我的用户会话?

基本架构是客户端 -> 应用程序后端 -> DAL -> DB

0 投票
1 回答
135 浏览

internet-explorer - 输入网址时,为何网页在手机浏览器上加载时间较长?

我想构建一个非常详细的答案,以准备软件工程面试,并真正了解“幕后”发生的事情。

我现在拥有的是:

当您输入 url 时,浏览器和服务器之间会发生 TCP 握手。一旦建立连接,对网页的请求就会通过数据中心的负载均衡器路由到服务器。该特定服务器会将网页返回给浏览器,浏览器根据网页中指定的 DOM 规则呈现它以供显示。因此,连接速度受以下因素影响: 1) 数据中心的位置 2) 负载均衡器使用的路由算法 3) 包含网页的服务器清除发送的请求所需的时间

这是我在一次采访中给出的答案,被认为是不够的。我知道这可能是初级的,并且正在坚定地尽可能多地理解这个过程。请问有人可以很好地解释这个问题吗?

0 投票
2 回答
395 浏览

uml - 我应该如何教 UML?

我需要了解要教多少 UML。我是关于系统分析和设计的“2 学分 100 级入门课程”的辅助人员(对我来说是矛盾的)。该文本是为典型的 300 级 3 学分课程编写的。本章涵盖了大约 7 个 UML 图,它已经非常简单了,我必须进一步简化它。我有一个星期,或两个课时,来涵盖它。

我得出的结论是,我可以扔掉这本书并很好地覆盖类图,这将向他们介绍许多基本的 OO 概念,或者我可以简单地针对这 7 个图的基本认识(甚至不期望它们创建任何图)。但是我觉得基本的识别对于这些全新的程序员来说毫无用处,而且这些图表会毫无意义地一起运行。非常感谢您的建议。

顺便说一下,这 7 个是:对象关系、用例、类、序列、状态转换、活动和业务流程建模。

0 投票
0 回答
299 浏览

c# - IIS下通过WCF服务访问windows应用

我正在开发一个用户与 IIS 服务器中托管的 WCF 服务交互的系统。然后,WCF 应用程序必须启动 winform 应用程序以及一些参数。此 winform 应用程序进行一些处理,然后加载安装在服务器中的应用程序(软件)。此应用程序将创建一些输出文档并将其放在用户可以访问的可共享文件夹中。[由于低点无法发布描述性图片:( ]

它在开发环境中运行良好,即正在创建输出,但是当我在 IIS 中部署它时,它开始抛出错误:

我尝试使用两种方法加载 WinForm:

  1. 加载 Winform,从 WCF 主机创建 WinForm 实例
  2. 使用 System.Process.Start() 加载 WinForm 的实例 (.EXE)

两个操作都失败了。如何使用 IIS 实现这一点。