摘要: Semaphore,如今通常被翻译为"信号量",过去也曾被翻译为"信号灯",因为类似于现实生活中的红绿灯,车辆是否能通行取决于是否是绿灯。同样,在编程世界中,线程是否能执行取决于信号量是否允许。 信号量是由著名的计算机科学家迪杰斯特拉(Dijkstra)于1965年提出的,直到1980年管程被提出, 阅读全文
posted @ 2023-09-14 01:36 架构狂人 阅读(11) 评论(0) 推荐(0) 编辑
摘要: Java程序员几乎都了解Spring。 它的IoC(依赖反转)和AOP(面向切面编程)功能非常强大、易用。而它背后的字节码生成技术(在运行时,根据需要修改和生成Java字节码的技术)就是一项重要的支撑技术。 Java字节码能够在JVM(Java虚拟机)上解释执行,或即时编译执行。其实,除了Java, 阅读全文
posted @ 2023-09-14 01:34 架构狂人 阅读(42) 评论(0) 推荐(0) 编辑
摘要: Yarn作为分布式集群的资源调度框架,它的出现伴随着Hadoop的发展,使Hadoop从一个单一的大数据计算引擎,成为一个集存储、计算、资源管理为一体的完整大数据平台,进而发展出自己的生态体系,成为大数据的代名词。 Yarn的发展过程 所以在我们开始聊Yarn的实现原理前,有必要看看Yarn发展的过 阅读全文
posted @ 2023-06-30 01:07 架构狂人 阅读(38) 评论(0) 推荐(0) 编辑
摘要: 紧接着我们来聊聊可扩展性。 可扩展性是指,软件系统具备面对未来需求变化而进行扩展的能力。系统可根据新的需求做出少量或者不需要修改,无需对整个系统进行重构或重建。 由于软件系统变化多端,新的需求不断提出,因此可扩展性非常重要。为解决可扩展性带来的问题,面向对象思想的提出,设计模式的诞生更是将可扩展性发 阅读全文
posted @ 2023-06-23 19:01 架构狂人 阅读(85) 评论(0) 推荐(0) 编辑
摘要: 接着,我们聊聊复杂度的第二个要求高可用。 参考维基百科,先来看看高可用的定义。 系统无中断地执行其功能的能力,代表系统的可用性程度,是进行系统设计时的准则之一。 这个定义的关键在于“ 无中断”,但恰好难点也在“无中断”上面,因为无论是单个硬件还是单个软件,都不可能做到无中断,硬件会出故障,软件会有b 阅读全文
posted @ 2023-06-23 19:00 架构狂人 阅读(33) 评论(0) 推荐(0) 编辑
摘要: 今天我们来谈一谈系统复杂度的根源之【高性能】 对性能的不懈追求一直是人类科技持续发展的核心动力。例如计算机,从电子管计算机到晶体管计算机,再到集成电路计算机,运算性能从每秒几次提高到每秒几亿次。然而,随着性能的提升,相应的方法和系统复杂度也逐渐增加。现代计算机CPU集成了数亿颗晶体管,其逻辑复杂度和 阅读全文
posted @ 2023-06-23 18:59 架构狂人 阅读(66) 评论(0) 推荐(0) 编辑
摘要: 架构设计的误区 架构设计的目的并不是简单地因为架构重要或者因为流程规定需要做架构设计,也不是为了追求高性能、高可用、可扩展等"高XX"的目标。架构设计的目的是为了实现系统的长期可维护性、可扩展性、可靠性和安全性,以满足业务需求和未来的变化。 以下是架构设计的一些主要目的: 系统的长期可维护性:良好的 阅读全文
posted @ 2023-06-21 11:39 架构狂人 阅读(51) 评论(0) 推荐(0) 编辑
摘要: 架构到底是指什么 对于技术人员来说,“架构”是一个再常见不过的词了。我们会对新员工培训整个系统的架构,参加架构设计评审,学习业界开源系统(例如MySQL和Hadoop)的架构,研究大公司的架构实现(例如微信架构和淘宝架构)…… 虽然“架构”这个词很常见,但如果深究一下,“架构”到底是指什么,大部分人 阅读全文
posted @ 2023-06-21 02:03 架构狂人 阅读(18) 评论(0) 推荐(0) 编辑
摘要: 架构设计的历史背景 在探讨架构设计的历史背景时,了解软件开发进化的历史是一个重要的起点。了解软件开发的演变过程可以帮助我们更好地理解架构设计的起源和发展。现在,让我们来简要回顾一下软件开发的历史,并探索软件架构出现的背景。 首先,我们可以回顾软件开发的初期阶段。在计算机科学的早期,软件开发主要集中在 阅读全文
posted @ 2023-06-21 02:02 架构狂人 阅读(79) 评论(0) 推荐(0) 编辑