- 博客(6818)
- 资源 (9)
- 收藏
- 关注
原创 如何画出优秀的软件系统架构图?
其实,很多人之所以画不好架构图,最大的痛点就是不好把握到底要画哪些内容,画得太少担心没有展现关键信息,画得太多又觉得把握不住重点。应该按照什么样的标准来明确架构图要展现的内容呢?答案就是我在第1讲中介绍的4R架构定义。软件架构指软件系统的顶层(Rank)结构,它定义了系统由哪些角色(Role)组成,角色之间的关系(Relation)和运作规则(Rule)。4R是指4个关键词:Rank,Role,Relation和Rule。第一步,明确Rank。
2025-04-18 11:52:54
746
原创 架构实战:架构设计文档模板
在前面的专栏里,有同学留言说想看看具体的架构设计文档。由于信息安全的原因,再加上稍微复杂的系统,设计文档都是几十页,因此专栏无法直接给出详细的文档案例。但我认为提供一个架构设计文档模板还是很有必要的,可以方便你在实际进行架构设计的时候更好地编写相关文档。我还以前面讲过的“前浪微博”消息队列为例,给出架构设计中最重要的两个文档的模板和关键说明。这个案例文档仅给出一些关键内容供你参考,部分细节无法全面覆盖或者完全保证正确。
2025-04-18 11:47:42
462
原创 谈谈App架构的演进
专栏截止到上一期,架构设计相关的理念、技术、实践已经基本讲完,相信你一路学习过来会有一种感觉,这些内容主要都是讲后端系统的架构设计,例如存储高可用、微服务、异地多活等,都是后端系统才会涉及。事实上确实也是如此,通常情况下我们讲架构设计,主要聚焦在后端系统,但这并不意味着App、前端就没有架构设计了,专栏所讲述的整套架构设计理念,虽然是来源于我的后端设计经验,但一旦形成完善的技术理论后,同样适应于App和前端。复习完我们就可以进入今天的正题,我来谈谈App架构的演进,以及上面这些架构设计关键点是如何体现的。
2025-04-18 11:44:30
422
原创 再谈开源项目:如何选择、使用以及二次开发?
我在专栏特别放送第3期谈了如何高效地学习开源项目,主要聊了我在学习开源项目的一些看法和步骤。今天我们再聊开源项目,谈谈如何选择、使用以及二次开发。软件开发领域有一个流行的原则:DRY,Don’t repeat yourself。。开源项目的主要目的是共享,其实就是为了让大家不要重复造轮子,尤其是在互联网这样一个快速发展的领域,速度就是生命,引入开源项目可以节省大量的人力和时间,大大加快业务的发展速度,何乐而不为呢?
2025-04-18 11:39:45
791
原创 架构重构内功心法第三式:运筹帷幄
按照前3个步骤划分了架构重构的实施阶段后,就需要评估每个阶段所需要耗费的时间,很可能会出现有的阶段耗时可能只要1个月,而有的却需要6个月,虽然这可能确实是客观事实,但通常情况下,按照固定的步骤和节奏,更有利于项目推进。可以看到,真正的架构重构在第三阶段,第一阶段和第二阶段都是为了第三阶段做准备而已,但如果没有第一阶段和第二阶段的铺垫,直接开始第三阶段的架构重构工作,架构重构方案需要糅合第一阶段和第二阶段的一些事项(例如,业务降级、接入服务中心等),会导致架构重构方案不聚焦,而且异常复杂。
2025-04-18 11:36:43
612
原创 架构重构内功心法第一式:有的放矢
开始的时候,技术团队可能只针对具体的问题去解决,解决一个算一个,但如果持续时间较长,例如持续了半年甚至一年情况都不见好转,此时可能有人想到了系统的架构是否存在问题,讨论是否是因为架构原因导致了各种问题。其大概架构如下图所示,可以看出数据库主库是全局单点,一旦数据库主库不可用,两个集群的写业务都不可用了。即使是我们决定推倒到重来,完全抛弃旧的架构而去设计新的架构,新架构也会受到旧架构的约束和影响,因为业务在旧架构上产生的数据是不能推倒重来的,新架构必须考虑如何将旧架构产生的数据转换过来。
2025-04-18 11:28:28
383
原创 互联网架构模板:“平台”技术
当业务规模比较小、系统复杂度不高时,运维、测试、数据分析、管理等支撑功能主要由各系统或者团队独立完成。随着业务规模越来越大,系统复杂度越来越高,子系统数量越来越多,如果继续采取各自为政的方式来实现这些支撑功能,会发现重复工作非常多。因此我们自然而然就会想到将这些支撑功能做成平台,避免重复造轮子,减少不规范带来的沟通和协作成本。今天,我就来聊聊互联网架构模板的“平台”技术。由于每个平台本身都是一个庞大的体系,专栏只是介绍一下平台的核心职责和关键设计点,具体细节就不详细展开了。
2025-04-18 11:25:52
501
原创 互联网架构模板:“用户层”和“业务层”技术
上一期,我从计算机网络层的角度谈了应对“高性能”和“高可用”的整体架构设计。今天,我将从“用户层”和“业务层”的角度谈谈常见的应用场景和关键技术。
2025-04-18 11:22:47
567
原创 互联网架构模板:“网络层”技术
除了复杂度,互联网业务发展的另外两个关键特点是“高性能”和“高可用”。通常情况下,我们在设计高可用和高性能系统的时候,主要关注点在系统本身的复杂度,然后通过各种手段来实现高可用和高性能的要求,例如我前面介绍的计算高性能架构模式、存储高可用架构模式等。但是当我们站在一个公司的的角度来思考架构的时候,单个系统的高可用和高性能并不等于整体业务的高可用和高性能,互联网业务的高性能和高可用需要从更高的角度去设计,这个高点就是“网络”,所以我将相关措施统一划归为“网络层”。
2025-04-18 11:19:51
571
原创 互联网架构模板:“开发层”和“服务层”技术
上一期,我介绍了互联网架构模板中的存储层技术。关于这部分内容,我将逐层介绍每个技术点的产生背景、应用场景和关键技术,希望让你可以对整体的技术架构有一个全貌认知。今天我们来聊聊互联网架构模板的“开发层”和“服务层”技术。
2025-04-18 11:15:47
375
原创 互联网架构模板:“存储层”技术
很多人对于BAT的技术有一种莫名的崇拜感,觉得只有天才才能做出这样的系统,但经过前面对架构的本质、架构的设计原则、架构的设计模式、架构演进等多方位的探讨和阐述,你可以看到,其实并没有什么神秘的力量和魔力融合在技术里面,而是业务的不断发展推动了技术的发展,这样一步一个脚印,持续几年甚至十几年的发展,才能达到当前技术复杂度和先进性。抛开BAT各自差异很大的业务,站在技术的角度来看,其实BAT的技术架构基本是一样的。再将视角放大,你会发现整个互联网行业的技术发展,最后都是殊途同归。
2025-04-17 17:02:42
705
原创 互联网技术演进的模式
由于各行业的业务发展轨迹并不完全相同,无法给出一个统一的模板让所有的架构师拿来就套用,因此我以互联网的业务发展为案例,谈谈互联网技术演进的模式,其他行业可以参考分析方法对自己的行业进行分析。互联网业务千差万别,但由于它们具有“规模决定一切”的相同点,其发展路径也基本上是一致的。互联网业务发展一般分为几个时期:初创期、发展期、竞争期、成熟期。。
2025-04-17 17:01:06
987
原创 架构师应该如何判断技术演进的方向?
互联网的出现不但改变了普通人的生活方式,同时也促进了技术圈的快速发展和开放。在开源和分享两股力量的推动下,最近10多年的技术发展可以说是目不暇接,你方唱罢我登场,大的方面有大数据、云计算、人工智能等,细分的领域有NoSQL、Node.js、Docker容器化等。各个大公司也乐于将自己的技术分享出来,以此来提升自己的技术影响力,打造圈内技术口碑,从而形成强大的人才吸引力,典型的有,Google的大数据论文、淘宝的全链路压测、微信的红包高并发技术等。
2025-04-17 16:50:08
894
原创 微内核架构详解
微内核架构(Microkernel Architecture),也被称为插件化架构(Plug-in Architecture),是一种面向功能进行拆分的可扩展性架构,通常用于实现基于产品(原文为product-based,指存在多个版本、需要下载安装才能使用,与web-based相对应)的应用。例如Eclipse这类IDE软件、UNIX这类操作系统、淘宝App这类客户端软件等,也有一些企业将自己的业务系统设计成微内核的架构,例如保险公司的保险核算逻辑系统,不同的保险品种可以将逻辑封装成插件。
2025-04-17 16:25:22
190
原创 微服务架构最佳实践 - 基础设施篇
针对这些问题,今天我们看看微服务最佳实践应该如何去做。我会分两期介绍这部分内容,今天是微服务架构最佳实践的方法篇,下一期是基础设施篇。
2025-04-17 15:44:28
396
原创 深入理解微服务架构:银弹 or 焦油坑?
不过不能否认Martin在推动微服务起到的作用,微服务能火,Martin功不可没。微服务的定义相信你早已耳熟能详,参考维基百科,我就来简单梳理一下微服务的历史吧(?这几个问题是理解微服务的关键,否则如果只是跟风拿来就用,既不会用,也用不好,用了不但没有效果,反而还可能有副作用。今天我们就来深入理解微服务,到底是银弹还是焦油坑。
2025-04-17 15:29:22
774
原创 可扩展架构的基本思想和模式?
软件系统与硬件和建筑系统最大的差异在于软件是可扩展的,一个硬件生产出来后就不会再进行改变、一个建筑完工后也不会再改变其整体结构。例如,一颗CPU生产出来后装到一台PC机上,不会再返回工厂进行加工以增加新的功能;金字塔矗立千年历经风吹雨打,但其现在的结构和当时建成完工时的结构并无两样。相比之下,软件系统就完全相反,如果一个软件系统开发出来后,再也没有任何更新和调整,反而说明了这套软件系统没有发展、没有生命力。
2025-04-17 15:09:07
698
原创 如何应对接口级的故障?
前几讲我介绍了异地多活方案。它主要用来应对系统级的故障,例如机器宕机、机房故障和网络故障等问题。这些系统级的故障虽然影响很大,但发生概率较小。在实际业务运行过程中,还有另外一种故障影响可能没有那么大,但发生的概率较高,这就是今天我要跟你聊的接口级的故障。接口级故障的典型表现就是,系统并没有宕机、网络也没有中断,但业务却出现问题了,例如业务响应缓慢、大量访问超时和大量访问出现异常(给用户弹出提示“无法连接数据库”)。
2025-04-17 14:43:48
902
原创 异地多活设计4步走
上一期,基于异地多活架构设计复杂度最高的“跨城异地”,我结合自己的经验总结了异地多活设计的4个技巧及其核心思想,我认为掌握这些技巧是进入具体设计步骤的前提。今天,在掌握这4大技巧的基础上,我来讲讲跨城异地多活架构设计的4个步骤。
2025-04-16 11:17:19
672
原创 异地多活设计4大技巧
关键在于搭建高速网络将两个机房连接起来,达到近似一个本地机房的效果。架构设计上可以将两个机房当作本地机房来设计,无须额外考虑。关键在于数据不一致的情况下,业务不受影响或者影响很小,这从逻辑的角度上来说其实是矛盾的,架构设计的主要目的就是为了解决这个矛盾。主要是面向不同地区用户提供业务,或者提供只读业务,对架构设计要求不高。基于这个分析,跨城异地多活是架构设计复杂度最高的一种,接下来我将介绍跨城异地多活架构设计的一些技巧和步骤,今天我们先来看4大技巧,掌握这些技巧可以说是完成好设计步骤的前提。
2025-04-16 11:12:11
747
原创 业务高可用的保障:异地多活架构
无论是高可用计算架构,还是高可用存储架构,其本质的设计目的都是为了解决部分服务器故障的场景下,如何保证系统能够继续提供服务。但在一些极端场景下,有可能所有服务器都出现故障。例如,典型的有机房断电、机房火灾、地震、水灾……这些极端情况会导致某个系统所有服务器都故障,或者业务整体瘫痪,而且即使有其他地区的备份,把备份业务系统全部恢复到能够正常提供业务,花费的时间也比较长,可能是半小时,也可能是12小时。因为备份系统平时不对外提供服务,可能会存在很多隐藏的问题没有发现。
2025-04-16 11:05:32
763
原创 如何设计计算高可用架构?
计算高可用的主要设计目标是当出现部分硬件损坏时,计算任务能够继续正常运行。因此计算高可用的本质是通过冗余来规避部分故障的风险,单台服务器是无论如何都达不到这个目标的。所以计算高可用的设计思想很简单:通过增加更多服务器来达到计算高可用。计算高可用架构的设计复杂度主要体现在方面,即当任务在某台服务器上执行失败后,如何将任务重新分配到新的服务器进行执行。因此,计算高可用架构设计的关键点有下面两点。1.哪些服务器可以执行任务第一种方式和计算高性能中的集群类似,每个服务器都可以执行任务。
2025-04-16 11:01:08
736
原创 高可用存储架构:集群和分区
上一期我讲了高可用存储架构中常见的双机架构,分别为主备复制、主从复制、双机切换和主主复制,并分析了每类架构的优缺点以及适应场景。今天我们一起来看看另外两种常见的高可用存储架构:数据集群和数据分区。
2025-04-16 10:53:41
832
原创 高可用存储架构:双机架构
存储高可用方案的本质都是通过将数据复制到多个存储设备,通过数据冗余的方式来实现高可用,其复杂性主要体现在如何应对复制延迟和中断导致的数据不一致问题。常见的高可用存储架构有主备、主从、主主、集群、分区,每一种又可以根据业务的需求进行一些特殊的定制化功能,由此衍生出更多的变种。由于不同业务的定制功能难以通用化,今天我将针对业界通用的方案,来分析常见的双机高可用架构:主备、主从、主备/主从切换和主主。
2025-04-16 10:39:28
786
原创 -FMEA方法,排除架构可用性隐患的利器
FMEA(Failure mode and effects analysis,故障模式与影响分析)又称为失效模式与后果分析、失效模式与效应分析、故障模式与后果分析等,专栏采用“故障模式与影响分析”,因为这个中文翻译更加符合可用性的语境。FMEA是一种在各行各业都有广泛应用的可用性分析方法,通过对系统范围内潜在的故障模式加以分析,并按照严重程度进行分类,以确定失效对于系统的最终影响。FMEA最早是在美国军方开始应用的,20世纪40年代后期,美国空军正式采用了FMEA。
2025-04-16 10:35:25
873
原创 想成为架构师,你必须掌握的CAP细节
理论的优点在于清晰简洁、易于理解,但缺点就是高度抽象化,省略了很多细节,导致在将理论应用到实践时,由于各种复杂情况,可能出现误解和偏差,CAP理论也不例外。如果我们没有意识到这些关键的细节点,那么在实践中应用CAP理论时,就可能发现方案很难落地。而且当谈到数据一致性时,CAP、ACID、BASE难免会被我们拿出来讨论,原因在于这三者都是和数据一致性相关的理论,如果不仔细理解三者之间的差别,则可能会陷入一头雾水的状态,不知道应该用哪个才好。
2025-04-16 10:26:38
865
原创 想成为架构师,你必须知道CAP理论
CAP定理(CAP theorem)又被称作布鲁尔定理(Brewer’s theorem),是加州大学伯克利分校的计算机科学家埃里克·布鲁尔(Eric Brewer)在2000年的ACM PODC上提出的一个猜想。2002年,麻省理工学院的赛斯·吉尔伯特(Seth Gilbert)和南希·林奇(Nancy Lynch)发表了布鲁尔猜想的证明,使之成为分布式计算领域公认的一个定理。对于设计分布式系统的架构师来说,CAP是必须掌握的理论。为了更好地解释CAP理论,我挑选了Robert Greiner(
2025-04-16 10:24:13
807
原创 高性能负载均衡:算法
负载均衡算法数量较多,而且可以根据一些业务特性进行定制开发,抛开细节上的差异,根据算法期望达到的目的,大体上可以分为下面几类。接下来我介绍一下负载均衡算法以及它们的优缺点。
2025-04-16 10:21:39
520
原创 高性能负载均衡:分类及架构
单服务器无论如何优化,无论采用多好的硬件,总会有一个性能天花板,当单服务器的性能无法满足业务需求时,就需要设计高性能集群来提升系统整体的处理性能。高性能集群的本质很简单,通过增加更多的服务器来提升系统整体的计算能力。由于计算本身存在一个特点:同样的输入数据和逻辑,无论在哪台服务器上执行,都应该得到相同的输出。因此高性能集群设计的复杂度主要体现在任务分配这部分,需要设计合理的任务分配策略,将计算任务分配到多台服务器上执行。。对于任务分配器,现在更流行的通用叫法是“负载均衡器”。
2025-04-15 17:56:17
817
原创 单服务器高性能模式:Reactor与Proactor
我介绍了单服务器高性能的PPC和TPC模式,它们的优点是实现简单,缺点是都无法支撑高并发的场景,尤其是互联网发展到现在,各种海量用户业务的出现,PPC和TPC完全无能为力。今天我将介绍可以应对高并发场景的单服务器高性能架构模式:Reactor和Proactor。
2025-04-15 17:55:12
771
原创 单服务器高性能模式:PPC与TPC
高性能是每个程序员的追求,无论我们是做一个系统还是写一行代码,都希望能够达到高性能的效果,而高性能又是最复杂的一环,磁盘、操作系统、CPU、内存、缓存、网络、编程语言、架构等,每个都有可能影响系统达到高性能,一行不恰当的debug日志,就可能将服务器的性能从TPS 30000降低到8000;一个tcp_nodelay参数,就可能将响应时间从2毫秒延长到40毫秒。因此,要做到高性能计算是一件很复杂很有挑战的事情,软件系统开发过程中的不同阶段都关系着高性能最终是否能够实现。
2025-04-15 17:52:55
565
原创 高性能缓存架构
例如,一个论坛需要在首页展示当前有多少用户同时在线,如果使用MySQL来存储当前用户状态,则每次获取这个总数都要“count(*)”大量数据,这样的操作无论怎么优化MySQL,性能都不会太高。如果要实时展示用户同时在线数,则MySQL性能无法支撑。绝大部分在线业务都是读多写少。例如,微博、淘宝、微信这类互联网业务,读业务占了整体业务量的90%以上。以微博为例:一个明星发一条微博,可能几千万人来浏览。
2025-04-15 17:34:35
582
原创 高性能NoSQL
关系数据库经过几十年的发展后已经非常成熟,强大的SQL功能和ACID的属性,使得关系数据库广泛应用于各式各样的系统中,但这并不意味着关系数据库是完美的,关系数据库存在如下缺点。以微博的关注关系为例,“我关注的人”是一个用户ID列表,使用关系数据库存储只能将列表拆成多行,然后再查询出来组装,无法直接存储一个列表。
2025-04-15 16:22:39
628
原创 高性能数据库集群:分库分表
基于上述原因,单个数据库服务器存储的数据量不能太大,需要控制在一定的范围内。为了满足业务数据存储的需求,就需要将存储分散到多台数据库服务器上。今天我来介绍常见的分散存储的方法“分库分表”,其中包括“分库”和“分表”两大类。
2025-04-15 13:58:32
668
原创 高性能数据库集群:读写分离
从0开始学架构”专栏已经更新了13期,从各个方面阐述了架构设计相关的理论和流程,包括架构设计起源、架构设计的目的、常见架构复杂度分析、架构设计原则、架构设计流程等,掌握这些知识是做好架构设计的基础。在具体的实践过程中,为了更快、更好地设计出优秀的架构,除了掌握这些基础知识外,还需要掌握业界已经成熟的各种架构模式。大部分情况下,我们做架构设计主要都是基于已有的成熟模式,结合业务和团队的具体情况,进行一定的优化或者调整;即使少部分情况我们需要进行较大的创新,前提也是需要对已有的各种架构模式和技术非常熟悉。
2025-04-15 13:56:16
1110
原创 架构设计流程:详细方案设计
完成备选方案的设计和选择后,我们终于可以长出一口气,因为整个架构设计最难的一步已经完成了,但整体方案尚未完成,架构师还需继续努力。接下来我们需要再接再励,将最终确定的备选方案进行细化,使得备选方案变成一个可以落地的设计方案。所以今天我来讲讲架构设计流程第4步:详细方案设计。
2025-04-15 13:54:01
579
原创 架构设计流程:评估和选择备选方案
设计师挑选一个看起来最简单的方案。例如,我们要做全文搜索功能,方案1基于MySQL,方案2基于Elasticsearch。MySQL的查询功能比较简单,而Elasticsearch的倒排索引设计要复杂得多,写入数据到Elasticsearch,要设计Elasticsearch的索引,要设计Elasticsearch的分布式……全套下来复杂度很高,所以干脆就挑选MySQL来做吧。最牛派的做法和最简派正好相反,设计师会倾向于挑选技术上看起来最牛的方案。
2025-04-15 11:58:56
823
原创 架构设计流程:设计备选方案
上一期我讲了架构设计流程第1步识别复杂度,确定了系统面临的主要复杂度问题后,方案设计就有了明确的目标,我们就可以开始真正进行架构方案设计了。今天我来讲讲架构设计流程第2步:设计备选方案,同样还会结合上期“前浪微博”的场景,谈谈消息队列设计备选方案的实战。
2025-04-15 11:53:55
1089
原创 架构设计流程:识别复杂度
从今天开始,我将分4期,结合复杂度来源和架构设计原则,通过一个模拟的设计场景“前浪微博”,和你一起看看在实践中究竟如何进行架构设计。今天先来看架构设计流程第1步:识别复杂度。
2025-04-14 10:16:55
676
Linux系统技术可以学习一下
2024-01-26
播为主播提供一站式直播必备工具 包含弹幕助手、屏幕美化、语音播报、弹幕点歌等主播必备核心功能,目前已支持虎牙、斗鱼,抖音等、平台
2023-10-13
TestSyncMethods.java
2021-07-25
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人