系统架构
天涯兰的博客
技术专家、IT技术图书作译家
展开
-
论技术原理的相通性示例之三:Master可用性
在分布式架构中,Master/Slave架构是主流架构之一,通常表现为一主多从的服务器部署结构,其中Master是整个架构的核心节点。Master/Slave架构中关于Master存在一个普遍性的问题,即如何确保Master的高可用性。通常,我们可以采用热备方案实现Master的高可用。在热备方案中,存在一个Active Master和若干个Standby Master,当Active Mas...原创 2020-03-17 10:15:11 · 496 阅读 · 0 评论 -
论技术原理的相通性示例之二:分布式协调
很多时候,我们会基于Dubbo介绍注册中心这一服务化架构中的基础组件。而讲到注册中心就不得不提及分布式协调。对于分布式协调,我们需要了解到的是它不仅仅可以实现注册中心,还可以适用于很多场景。对于这些不同的场景,我们只需要把握针对分布式协调的基本知识体系,分析原理和解决问题的思路都是高度一致的。分布式协调实现的主流工具是Zookeeper,其核心是一个精简的文件系统,提供基于目录节点树方式的数据...原创 2020-03-16 13:49:07 · 433 阅读 · 0 评论 -
论技术原理的相通性示例之一:RPC架构
我们在面试时,经常会被问到“RPC架构核心组件有哪些?”、“Dubbo框架的基本原理是怎么样的?”这样的问题。很多读者可能对这些问题有一定的了解,有些则可能没有什么思路。但对于那些能够回答这些问题的人而言,知道的可能也仅仅是针对这些问题的答案,也就是对于已经接触过或使用过的工具框架而言肯定多少能明白其中的原理,但是如果是那些没有用过的工具和框架呢?工具和框架发展日新月异,例如上面提到的Dubbo框...原创 2020-03-16 10:49:47 · 617 阅读 · 0 评论 -
架构风格之事件处理风格
在一些软件系统中会存在这样的需求,当系统中的某个组件因为用户操作或内部行为发布一个事件到事件中心,该组件知道这个事件在将来的某一个时间点会被其他某个组件所消费,但是并不知道这个组件具体是谁、也不关心什么时候被消费。同样,调用该事件的组件也不一定需要知道该事件是由哪个组件所发布。满足以上场景的系统代表着一种松耦合的架构,通常被称为事件系统,这种设计风格也就是我们要讨论的事件处理风格。1. 事件处...原创 2019-08-09 23:44:21 · 1319 阅读 · 0 评论 -
架构风格之分布式风格
现代软件开发一大现状和问题就是容易形成信息孤岛,即每个业务部门和产品线根据自身的业务需求设计相应的架构体系并进行实现,这些独立的系统保存着业务系统的核心数据并运行于独立的进程环境中。涉及到组织架构、团队文化、技术体系等因素,仅仅通过系统内部重构很大程度上只能缓解而不能消除信息孤岛的产生,这就需要使用某种手段进行业务服务整合,分布式架构风格的目的就在于此。分布式作为一种基础架构风格为不同系统之间的交...原创 2019-08-09 23:51:55 · 904 阅读 · 0 评论 -
架构师的视角
架构视角面向质量,主要回答“好不好”这个问题。架构视角并不像架构视图比较容易抽象,因为一个系统的质量属性包含很多内容,我们从中筛选出四个通用而又重要的架构视角,分别是安全性、性能、可用性和可扩展性并采用与架构视图同样的建模方式对每个视角进行展开。1. 安全性视角安全性体现的是控制、监控和审计对资源的访问性和执行能力,以及从安全漏洞中恢复的能力。在主流的信息化系统、面向服务和中间件系统中通常...原创 2019-08-07 21:03:03 · 603 阅读 · 0 评论 -
设计模式在Mybatis中的应用
掌握设计模式的难度在于每个模式看上去都能够理解但就是不知道如何应用,固然在日常开发过程中多尝试应用设计模式有助于提高自身的设计能力,但通过阅读源代码的方式来加深对设计模式的理解和掌握是一条捷径。目前非常主流的开源ORM框架Mybatis(http://www.mybatis.org/)中大量用到了设计模式,这里举几个典型的场景分析如何将设计模式应用到Mybatis框架设计中,包括建造者模式、工厂模...原创 2019-08-14 21:54:47 · 519 阅读 · 0 评论 -
服务定位架构模式
1. 服务定位基本理念系统集成(System Integration)是应用系统架构设计的一个重要课题,无论何种行业和应用,系统都可能需要集成对第三方服务的访问。这些第三方服务可能来自外部供应商,也可能来自于同一组织的不同团队,更广义上来讲,同一团队内部也可能需要进行服务的发现和整合,以便不同技术体系结构下的各个模块和组件之间的集成。系统集成需要解决的主要问题是如何获取并管理第三方服务。第...原创 2019-08-23 22:06:23 · 3036 阅读 · 0 评论 -
架构模式 - 微内核模式
1. 微内核模式简介微内核(Microkernel)架构模式结构如下图所示,有时也被称为插件架构模式(Plug-in Architecture Pattern),通过插件向核心应用添加额外的功能,可以实现功能的独立和分离。微内核架构包含两部分组件,即内核系统(Core system)和插件(Plug-in Component)。微内核架构的内核系统通常提供系统运行所需的最小功能集,插件是独...原创 2019-08-12 12:14:21 · 2870 阅读 · 0 评论 -
架构风格之系统结构风格
软件开发都会经历从混沌到结构的过程。一方面,人、业务、复杂度与时间演进一般成正比,随着系统存在时间的推移,各个因素相互作用会导致系统复杂度呈指数化上升,理解、维护和改进系统比开发系统需要花费更大的代价,以至推倒重来、重复造轮子的事情在软件行业并不少见,出现这种现象的很大一个原因就在于对系统结构把握的不合理。可以认为粗粒度抽象和分离是设计过程中提供系统较高层次结构化的基本思路。1. 系统结构划分...原创 2019-08-09 22:45:00 · 784 阅读 · 0 评论 -
软件设计原则的应用
在上一篇《软件设计原则》中我们介绍了面向对象原则、组件设计原则以及其他一些原则,本篇主要介绍这些软件设计原则的具体应用。主要以组件设计原则在Dubbo中的应用来展示软件设计原则中的分包原则如何在一个分布式服务器框架中发挥指导性的设计作用。Dubbo(http://dubbo.io/)是Alibaba开源的一个分布式服务框架,在互联网行业应用和扩展十分广泛。Dubbo的核心功能为我们进行分布式系...原创 2019-08-09 12:06:33 · 564 阅读 · 0 评论 -
系统架构设计基础(三)
现在我们来看架构9.0,我们也引入了一个特定场景下的技术,称之为批量数据处理。现在大家都说是处在一个大数据的时代,大数据处理有多种类型的,实际上很多大数据的处理的技术并不是说需要实时的,也就是它不是一种实时处理的技术,它是一种离线的批量处理的技术。对于批量处理而言,当然你可以做一些自己的一些功能,比方说我怎么样能够统计用户的行为,怎么样去分析日志,怎么样产生一些统计分析的报表,这些统计分析报表上你...原创 2019-08-02 23:15:56 · 546 阅读 · 1 评论 -
架构师的视图
架构视图面向需求,主要回答“有没有”这个问题。架构设计是一项综合性的活动,要完整展示架构包含的内容实属不易。架构视图为我们提供了六大视图,下图展示了这六大视图以及架构设计与这些视图之间的关系,所有视图都是围绕架构设计展开,但又各自具备侧重点。通过完备的架构视图,系统架构就从一种抽象的概念转变成能够供干系人触碰的软件实体。我们基于定义、切入点和架构设计这一建模方式对每个视图进行展开。1....原创 2019-08-03 10:10:29 · 829 阅读 · 0 评论 -
服务的三种类型
技术平台在构成过程中可以采用大量成熟的技术理念和工具,基本思路就是实现服务化。一般认为服务有以下三种主要的表现类型:1. 工具服务工具服务(Utility Service)代表可重用服务,区别业务模型。作为应用程序与技术基础设施之间的交叉点,工具服务的特点是业务领域无关,本质是面向技术、具备高可重用性的低层处理服务,因此能够遵循独立开发和管理生命周期。工具服务的识别遵循下图中的模式,以...原创 2019-08-04 20:29:07 · 21029 阅读 · 0 评论 -
领域驱动的架构风格
作为高层次的设计维度,面向领域的策略设计同样涉及系统的体系架构。关于架构体系结构,各种架构风格和模式同样适用于领域驱动设计,但领域驱动设计在设计思想上有其独特的考虑,本节将针对领域驱动设计特有的架构风格展开讨论,包括架构的分层、事件驱动以及架构风格的组合。1. 架构分层(1)领域驱动设计核心组件设计架构分层的前提是明确系统的核心组件,分层体现的就是对这些核心组件的层次和调用关系的梳理。...原创 2019-08-04 20:33:15 · 646 阅读 · 0 评论 -
软件设计原则
1. 面向对象原则(1)开闭原则所谓开闭原则(Open Closed Principle, OCP)指的就是“软件实体应当对扩展开放,对修改关闭”,简单讲就是软件系统中包含的各种组件应该在不修改现有代码的基础上,引入新功能。开闭原则中“开”,是指对于组件功能的扩展是开放的,是允许对其进行功能扩展的;开闭原则中“闭”,是指对于原有代码的修改是封闭的,即不应该修改原有的代码。(2)里氏替换...原创 2020-04-06 16:38:45 · 1357 阅读 · 0 评论 -
系统架构设计基础(一)
今天我们来聊一下系统架构设计的相关基本概念。系统架构这个词现在用的非常多,大家可能平时都在用在讲。那么这个词我觉得用的也比较淡,什么事情可能不能扯上一点系统架构。但是回过头去想,这种架构确实也不是一个高大上的东西,你可能每天都在接触,每天都在应用。如果那方面你没有去总结,另一方面,你可能也没有把这个事情提高到系统架构设计这么高度去看问题,这篇就是希望帮助大家去理一下思路,看一下什么叫做系统架构...原创 2019-07-28 18:15:36 · 1844 阅读 · 0 评论 -
单块系统的问题
在软件技术发展过程的很长一段时间内,软件系统都表现为一种单块系统。时至今日,很多单块系统仍然在一些行业和组织中得到开发和维护。所谓单块系统,简单讲就是把一个系统所涉及的各个组件都打包成一个一体化结构并进行部署和运行。在Java EE领域,这种一体化结构很多时候就体现为一个WAR包,而部署和运行的环境就是以Tomcat为代表的各种应用服务器。下图展示的就是一个典型的单块系统,我们可以看到在应用服务器...原创 2020-04-06 16:38:26 · 818 阅读 · 0 评论 -
分布式系统的基本特征
所谓分布式系统,是指硬件或软件组件分布在不同的网络计算机上,彼此之间仅仅通过消息传递进行通信和协调的系统。我们从这个定义中可以看出分布式系统包含两个区别于单块系统的本质性特征,一个是网络,分布式系统的所有组件都位于网络之中,对于互联网应用而言,则位于更为复杂的互联网环境中;另一个是通信和协调,与单块系统不同,位于分布式系统中的各个组件只有通过约定、高效且可靠的通信机制进行相关协作才能完成某一项业务...原创 2019-08-09 11:53:12 · 6212 阅读 · 0 评论 -
系统架构设计基础(二)
我们找一个切入点,讲到性能方面的解决方法往往就是缓存。我们可以看到这张图,其中Node4里面放了一个分布式缓存,分布式缓存是可以被Frontend服务调用,也可以被Core服务调用,当然他们两个之间都是共享分布式缓存服务的,当然缓存不一定做出分布式。那么假设我们采用的是分布式玩这个机制,这样的话我们可以应付服务之间服务调用之间或者服务本身的性能瓶颈。性能瓶颈来自于很多方面,比方说数据库缓慢,或者说...原创 2019-07-29 19:38:40 · 399 阅读 · 0 评论