软件系统设计指南
-
当前系统设计工具严重不足
22人们经常错误地将系统设计等同于简单地绘制软件架构图。另一个误解是将其仅与 BDUF(预先进行大型设计)、UML(统一建模语言)、TOGAF 等特定架构框架或各种文档类型(例如 HLD(高级设计)、SA.
-
每个架构师都应该读的八本经典书籍
163 1 3K格雷戈尔·霍普在本文讨论了8本被视为软件架构师必读的经典书籍。以下是所提及的关键书籍的摘要:1、维特鲁威(公元前 20 年)的《建筑学》:虽然与软件架构没有直接关系,但这部古代文献被提及,具有历史背景.
-
10篇本周Java工程和Spring精彩文摘
40 4K10篇本周Java工程、Spring、SpringBoot精彩文摘1. Spring Security 和 JWT 入门将 JWT 与 Spring Security 结合使用可简化身份验证过程、增强.
-
学习系统设计11个课题
20如何开始 [系统设计]。 阅读这些文章: 11)#Redis 用例: 10) #幂等API: 9)#Actor模型: 8)#RSocket: 7)#一致性哈希 解释: 6)#协议缓冲区与 #JSON .
-
卧槽:油管用MySQL支持24.9亿用户
49Vitess是一个由YouTube开发并开源的数据库解决方案,用于解决大规模MySQL部署中的扩展性问题。最初,PayPal的三名员工尝试创建一个约会网站,但失败了。他们转向创建视频分享网站YouTu.
-
高可用高可靠系统设计中的重试机制
64 5K重试机制是许多现代软件系统的关键组件。它允许我们的系统自动重试失败的操作,以从暂时性错误或网络中断中恢复。通过自动重试失败的操作,重试机制可以帮助软件系统从意外故障中恢复并继续正常运行。今天,我们就来.
-
分布式系统阅读清单
303 13K计算机科学家在研究分布式系统理论时使用三种模型类型:同步模型半同步模型异步模型同步模型意味着系统内发送的每条信息都有一个已知的通信上限(发送和接收信息之间的最大延迟)以及节点或代理之间的处理速度。这意.
-
系统设计中的限制性与灵活性
223 2 5K集合论中的罗素悖论以及软件系统设计中过度宽容规则的问题。 罗素悖论揭示了集合论中的自指矛盾,表明过度宽容的规则可能导致难以处理的边缘情况。 软件系统中的过度宽容规则也可能引发意想不到的问题,挑战系统的.
-
系统设计面试概念术语要点
210 14K以下是系统设计学习中的要点:CAP 定理基本要素:一致性、可用性、分区容错性。分区容错性:由于通信网络固有的不可靠性,因此必须具备。一致性和可用性之间的选择:一致性:所有节点同时看到相同的数据。需要在.
-
设计软件最重要的目标是可理解性?
106 1 2K当您设计一款软件时,设计时最重要的一点就是可理解性。安全性、性能和正确性都很重要,但它们次优于可理解性。被误解的软件会产生Bug缺陷如果软件的实施者和维护者对软件存在误解,那么软件最终就会出现缺陷。主.
-
系统分析和设计指南
189 13K系统分析是系统设计中“做什么”之前的“如何” 。它提供了构建一个能够有效且高效地解决预期问题的系统的基本路线图。“想象一下你正在建造一座梦想之家。如果没有详细的蓝图,你不会开始敲钉子,对吧?“软件开发.
-
优化 REST API 设计:最佳实践
76 4K在深入研究设计 RESTful API 的最佳实践之前,我们先简要探讨一下 API 协议的一些基本方面。REST(代表性状态转移):REST 是一种用于设计网络应用程序的架构风格,通常用于构建 API.
-
什么是遗传算法
86 6K遗传算法 (GA) 是更大类别的进化算法 (EA) 的子集,是计算机科学和运筹学中使用的一种元启发式算法,其灵感来自于自然选择的过程。遗传算法经常采用受生物学启发的算子,包括变异、交叉和选择,以产生优.
-
案例研究:将结帐系统拆分为太多服务
99该项目应该用现代的、可扩展的、松散耦合的实现来取代现有的、单一的、难以扩展的结账系统。 为了实现这一目标,选择微服务架构作为软件系统的目标架构。微服务应该由一些核心服务来编排。此外,还有一个 Java.
-
软件架构中10个反模式
232 1 11K发现常见的架构反模式,学习如何避免它们并克服设计陷阱!获得宝贵的见解、实用的建议和实际示例,以构建更好的软件架构并改进现有架构。反模式1:#货物崇拜在不了解流程、技术或方法为何以及如何运作的情况下采用.
-
什么是系统设计 – 学习系统设计
199 3K系统设计被定义为为系统的不同组件、接口和模块创建架构并提供有助于在系统中实现这些元素的相应数据的过程。系统设计是任何分布式系统设计背后的核心概念。系统设计涉及识别数据源,它是描述、创建和规划框架以满足.
-
编程120句格言
142 6K1.一个人的常量就是另一个人的变量。2.函数延迟绑定;数据结构诱导绑定。寓意:在编程过程的后期对数据进行结构化。3.句法糖会导致分号癌。4.每个程序都是其他程序的一部分,很少有合适的程序。5.如果一个.
-
什么是系统工程师:技能、角色和职责
236 3K每一项复杂技术的背后,系统工程师都扮演着关键的角色。系统工程师的任务是设计、实施和维护复杂的 IT 基础设施,这是我们当今看到的技术的基础。这些系统的范围从计算机网络、软件应用程序到大规模硬件配置。这.
-
构建弹性架构的 5 个技巧
115 2K如何构建弹性架构和系统?提供五个建议:1、后备措施您需要考虑为您使用的任何外部服务提供后备方案。例如,这可以是支付网关或简单的 URL 缩短器。为什么?如果您依赖这些外部服务并且它们变得不可用,这可能.
-
亚马逊DynamoDB大规模分布式事务原理
164 4KDynamoDB 的一个杀手级功能是任何规模的可预测性。请阅读Marc Brooker 的文章以充分理解此功能。这篇论文出现在 7 月的 USENIX ATC 2023 上。与这种可预测性原则相一致,. -
Metadata:分布式系统设计要点和建议
143 6K这些建议提示都是分布式系统研究人员和从业人员几十年来的集体成果。提示分为三类:功能、性能和容错:功能: 应用抽象 减少协调 拥抱单调性 表现: 偏爱偏序而不是全序 杠杆时间 使用间接和代理 模拟估算 .
-
有关软件架构的完整书籍列表
389 7K这个github项目列举了一个全面的列表,您应该挑选一些有关您感兴趣的主题的书籍。决定读什么是你的事。这些书籍仅根据书面评论的数量进行排序。然而,还有其他重要因素值得考虑。下面从第二列开始分别是:国际.
-
本周Github有趣项目Voyager等
208 2K本周Github有趣的项目、工具和库包:1、VoyagerVoyager是一个用于在内存向量集合上执行快速近似近邻搜索的库。 Voyager 针对 Spotify 的快速生产使用进行了调整,可对内存中.
-
解决个人偏见的三个抽象层方法
248重点以抽象层方式思考,能够清晰地解决问题并避免个人偏见。我们有三个抽象层:自然层、中间层和人类层。 自然层是为物理和化学定律设计的,包括塑料、横梁、轮胎、玻璃、灯泡、电线等。 人类层是为人类设计的,人.
-
牛X软件工程师应该知道的概念
550如果你知道以下概念的含义,你就是一个伟大的工程师,: #幂等 #幺半群 #解耦 #依赖注入 - 单元 #函数式编程 #异步编程 #并行编程 #线程 #同步锁 #最终一致性 #精确一致性 .
-
为什么仅有计算机科学学位是不够的?
206 2K目前向有抱负的软件工程师传授计算机科学知识的方法与业界对他们毕业后的期望之间存在着巨大差距。虽然应届毕业生可能擅长理解算法的复杂性,如在排序列表中进行二进制搜索的 O(log(n)),但许多人在从头开.
-
24 条系统设计面试问答题
130以下 24 条系统设计原则可以帮助你通过面试:1.如果需要缩放单个组件,请查看水平缩放2.要处理流量峰值,请评估使用自动扩展进行动态资源分配的情况3.如果系统需要高性能的高可用性,可考虑使用负载平衡器.
-
形式化验证和 TLA+ 入门
215 1 3K这篇文章的目的是让读者了解: 为什么存在形式化方法以及为什么这些方法在分布式系统领域特别重要。 TLA+ 简介,包括它如何表示数据和时间的概念模型。 从这里开始,您应该能够阅读 TLA+ 上的更多高级.
-
16 个系统设计面试的概念
306 4K要在系统设计方面表现出色,最关键的方面之一是深入了解基本的系统设计概念,例如负载平衡、缓存、分区、复制、数据库和代理。1. 域名系统 (DNS)当您在 Web 浏览器中输入域名时,DNS 负责查找关联.
-
量化交易中比机器学习算法更重要的系统方法
163一些量化通常通过寻找ML算法来进行交易,这些算法确实能让他们从市场中获利。但,这些只是整个结构的第1阶段(初学者)和第1级(技术)工作。真正的系统方法涉及多个层面: - 结构 - 功能 - 功能的形式.