- 博客(98)
- 资源 (2)
- 收藏
- 关注
原创 软件架构设计(十七) 到底什么是中台?
中台是一套结合互联网技术和行业特性,将企业核心能力以共享服务形式沉淀,形成“大中台,小前台”的组织和业务机制,供企业快速低成本的进行业务创新的企业架构。中台又可以进一步细分,比如业务中台,数据中台,XX中台。本质上,都是对企业通过能力在不同层面的沉淀,并对外能力开发。就这样子理解其实很抽象,难以理解,我们再来看看百科对于中台的概念。可以看到,概念也比较抽象,但是提到了中台是前台和后台之间的组织单元。而所谓的成本中心,订单中心,商品中心这类独立且可供企业多个事业部调用的服务,就可以称之为中台。
2023-09-11 08:18:33
546
原创 软件架构设计(十六) Web架构设计(三)
上一节我们了解到了,应用集成之后,压力集中在了数据库,而数据库缓解压力的方式有提升数据库本身性能和减少操作数据库的IO操作从而提升效率。提升数据库本身主要有数据库主从复制,做读写分离提升效率。还有一种就是按照业务进行数据库和表的拆分(垂直分库,水平分表),也就是我们的分库分表操作。减少数据库的IO操作,因为数据库的数据通常是放在磁盘上,所以读写操作数据库需要进行大量的I/O操作。而减少操作就是使用缓存技术,将查询的数据缓存起来,下次查询之后直接从缓存查询,不再走数据库,从而大大的提升了查询的性能。
2023-09-11 08:16:42
283
原创 软件架构设计(十五) Web架构设计(二)
上一次我们知道了,当Web架构不满足业务需求时,可能需要不同的架构去支撑,因此出现了架构的演化。但是演化过程中可能遇到一些不同的问题,会有一些不同的技术去解决.当我们有多台应用服务器做集群时, 一个问题是客户端的请求如何分发到对应的服务器上去, 这需要使用负载均衡技术来解决. 而另一个是用户每次访问到的服务器不一样, 如何维护session的一致性的问题. 我们先来了解一下这个问题是如何产生的。
2023-09-11 08:15:05
256
原创 软件架构设计(十四) Web架构设计(一)
而我们的服务器其实通常是放在一个机房的,也就是固定在某个区域, 而用户在离这个区域很远时访问的距离就会比较远, 速度相对较慢, 此时就会有CDN技术, 会将内容分发到不同的CDN站点, 作为镜像站点, 当请求到来时指向离用户最近的CDN站点, 从而提升访问效率, 如果本地CDN没有, 才会从真正的服务器资源.当分库分表之后仍然没法满足业务需求时,此时我们就需要考虑到缓存技术了,要尽量减少直接对数据库的查询,而将查询结果缓存下来,让下次访问时直接命中缓存,从而减少数据库的查询压力。
2023-09-11 08:12:57
277
原创 软件架构设计(十三) 构件与中间件技术
有些功能块其实是在服务端实现的,但是客户端要实现这个功能,你直接去调用远程的功能块时,会面临比如说网络问题,调用时怎么具体操作,等等一系列问题。就应运而诞生了中间件技术这样的技术,它在客户端构建起了服务端的一个代理对象,从而调用调用本地代理对象实现调用远程服务端。假设服务端有一个对象A存在,那么在客户端就有一个对象代理,代理的就是服务端的对象A。并且客户端把请求通过本地的转换机制,然后传递到远程服务端,通过一系列的解析解读之后,连接到服务端这一边来,然后服务端完成执行,再返回回去,最终返回给客户端。
2023-09-11 08:11:09
310
原创 软件架构设计(十二) 构件与中间件技术-构件概念
构件框架是一种专用的体系结构(通常围绕一些关键的机制),同时,也是一组固定的作用于构件层次机制的策略。当您理解这个构件是怎么一回事了,它能不能达到我们的要求,是不是完全匹配我们的需求, 假设这个构件不能完全满足需求,有些功能有,有些没有,此时就需要修改构件了.构件是一组通常需要同时部署的原子构件,构件和原子构件之间的区别在于,大多数原子构件永远不会单独被部署,尽管它们可以被单独部署。构件的定义不同地方的不同人,对它有不同的解读,解读的方向可能有些不一样,认可度比较高的就是定义1.—>修改构件—>组装构件.
2023-09-11 08:09:30
794
原创 软件架构设计(十一) 软件产品线
软件产品线是从DSSA(特定领域架构)扩展而来的,我们从事软件开发,当您有了多年的经验之后,往往会沉淀到某一个特定领域,然后做这个领域的行业软件。此时,您会把一些共性的东西开发出来,稳定下来。如果以后再开发同类型的系统时,做一些小修小改或者应用层面上的补充的个性化开发,就能够解决问题。在这个理论基础之上,由于DSSA的关注点还是架构这个层级,所以后面进一步演化出了软件产品线技术。软件产品线技术将DSSA,领域工程,软件架构,软件工程这一系列的技术把它给联通起来。变成一个比较可行的方法论。
2023-09-11 08:08:27
438
原创 软件架构设计(十) 架构评估(复审)-方法论
我们上一节讲到了为什么么要进行架构的评估, 以及架构评估有哪些质量属性,本节正式来学习架构评估的一些方法论。再讲到架构评估之前,还需要了解几个概念,也就是风险点,非风险点,敏感点,权衡点等。
2023-09-06 07:58:45
1200
原创 软件架构设计(九) 架构评估(复审)
我们上一节讲到了架构的复审,也说明架构复审对应了现在的架构评估。我们学习架构评估之前先了解一下为什么要进行架构评估呢?架构苹果到底评估什么?架构评估该如何评估?我们先了解这几个为什么之后,理解了这几个为什么去学习会更加有效。
2023-09-06 07:56:53
666
原创 软件架构设计(七) 特定领域软件架构
架构描述语言(ADL)是这样的一种形式化语言,它在底层语义模型的支持下,为软件系统的概念体系结构建模提供了具体语法和概念框架。基于底层语义的工具为体系结构的表示、分析、演化、细化、设计过程等提供支持。其实即便是有着丰富的开发经验的程序员,也几乎全部都没有用过这些工具。使用类似流程图方式,来描述哪些架构如何关联在一起。考的不多,知道即可。
2023-09-06 07:54:41
218
原创 软件架构设计(六) 软件架构风格-MDA(模型驱动架构)
MDA的最外围,则代表MDA可以应用在各式不同的领域环境中,诸如电子商务(E-Commerce),电信(Telecom),医疗保健(HealthCare),运输(Transportation),航空(Space),制造(Manufacturing),金融(Finance)等领域。重要的是,它们代表了对系统不同层次的抽象,从不同的视角来看待我们的系统,将高层次的PIM 转换到PSM 的能力提升了抽象的层次。传统的开发过程从模型到模型的变换,或者从模型到代码的变换是手工完成的。这就是一种典型的实现。
2023-09-06 07:52:48
908
原创 软件架构设计(五) 软件架构风格-微服务
在容器技术出来之前,服务部署模式主要以物理机或虚拟机为主,虽然服务可以被拆分成很小的服务(也就是微服务),但是考虑到操作系统的部署成本,最终这些服务还是会被合并部署。我们将服务按照业务拆分变成一个个微小的服务之后,会产生之前成倍的服务数量,那么如何实现进行服务治理,实现自动化部署与持续集成,DevOps等。另外,应当尽量避免统一的、集中式的服务管理机制,对具体的一个服务而言,应根据业务上下文,选择合适的语言、工具对其进行构建。微服务顾名思义,就是很小的服务,所以它属于面向服务架构的一种。
2023-09-06 07:51:01
521
原创 软件架构设计(四) 基于服务的架构(SOA)
服务总线为应用系统之间的互联互通提供了一个基于网络的,中心化的连接中枢,它可以通过一整套标准化的协议适配器(如JMX协议,SOAP协议等)来支持应用之间在信息,事件,服务级别上动态互联互通,被接入的应用甚至还可以通过流程化的编排,把这些基础服务聚合成更大粒度的复杂服务,并通过UDD i这类协议暴露出去 ,供第三方查阅和调用。有了服务描述之后,我们讲服务的描述信息和IP地址和端口等存储在注册中心里,而服务提供者根据服务描述向注册中心查找对应的服务,拿到IP和端口号,从而发起请求的调用。
2023-09-06 07:49:47
888
原创 软件架构设计(三) B/S架构风格-层次架构(一)
层次架构风格从之前的两层C/S到三层C/S,然后演化为三层B/S架构,三层B/S架构之后仍然在往后面演化,我们来看一下层次架构演化过程中都有了哪些演化的架构风格呢?而我们先简单了解一下之前的层次架构风格中分层的各个层次的作用。
2023-09-01 07:43:59
1406
原创 软件架构设计(二) 软件架构风格其他风格简介
开环:给定一个值,然后由控制器对这个值进行发送指令,就是使用执行器去执行这个事情,然后把这个控制量提交到了被控制对象,完了之后,控制对象按控制的情况进行执行,这就是开环。开环对应的有遥控器控制频道,你按下1频道,就会跳转到1频道。容易产生问题,就是万一你发送过去了,但是没有接收到,没有一个反馈机制,它可能就丢失了。
2023-09-01 07:42:04
315
原创 软件架构设计(一) 软件架构的概念
在讲到软件架构的概念时,首先我们要了解到,架构是在做什么样的事情,它在整个软件开发周期中所属什么样的位置。之前学习软件工程时,我们学到了开发模型,里面涉及到需求分析,概要设计,详细设计,编码,测试。但事实上,没有提到架构这个东西。为什么这么重要的东西没有在软件开发模型体现呢,其实是因为软件架构的兴起是滞后于软件开发模型的。比如瀑布模型,是用结构化的方式设计的,也就是面向过程的程序,那时候是没有涉及到架构的概念的。其实架构设计就放在原来的需求分析之后,软件设计之前。
2023-09-01 07:38:41
160
原创 (六)、Springboot+Redis实现通用消息队列stater
其实除了主流的各大消息中间件ActiveMQ, RocketMQ,RabbitMQ,Kafka之外,其实Redis也是支持消息队列功能的。而有时候我们不需要引入消息队列中间件,跟缓存中间件Redis一起一起共用一个Redis作为消息中间件也是可以的,这样就少用了一个组件。
2023-08-29 08:16:20
675
原创 软件工程(二十) 系统运行与软件维护
时至今日,你想去开发一个系统,想完全不涉及到已有的系统,基本是不可能的事情。但是对于已有系统我们有一个策略。比如我们是淘汰掉已有系统,还是继承已有系统,或者集成已有系统,或者改造遗留的系统呢,都是不同的策略。比如你开发是用的Java语言还是python语言,你使用的框架是spring家族还是flask等,就是技术维度。新的稳定的技术的技术水平就比老的技术水平(技术维度)高一些。主要是看您现在的系统的业务流程是否能符合现有的业务流程需要,就是能否体现它的业务价值。
2023-08-28 07:22:55
1010
原创 软件工程(十八) 行为型设计模式(四)
允许一个对象在其内部改变时改变它的行为状态变成类状态模式主要用来解决对象在多种状态转换时,需要对外输出不同的行为的问题。比如订单从待付款到待收货的咋黄台发生变化,执行的逻辑是不一样的。所以我们将状态抽象为一个接口或者抽象类,对不同状态进行封装成单独的实体,用于实现各种状态处理的逻辑。再设计一个上下文类,它组合了状态接口,用于发送请求。针对不同的状态提供不同的处理方法即可。其实我们可以看出来,状态模式和策略模式非常像,都有一个Context类,都有一个接口或抽象类被Context组合。
2023-08-28 07:20:00
1374
原创 软件工程(十七) 行为型设计模式(三)
定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并自动更新联动,广播消息基于上面的类图,我们来实现一个监听器。类图中的Subject对应我们的被观察对象接口(IObservable),Observer对应我们的监听器接口(IListener)我们实现被观察对象出现变化,然后通知所有的监听器实现类, 此接口我们参考JDK的观察者实现观察者模式其实就是被观察对象看里面包含了注册和删除监听的方法,所以会对所有的监听器进行管理。
2023-08-28 07:16:42
875
原创 软件工程(十六) 行为型设计模式(二)
提供一种方法来顺序访问一个聚合对象中的各个元素,而不是暴露该对象的内部状态数据集,迭代,循环其实迭代器模式在我们的不同语言中,均对其实现了,就是我们的各种集合,List,Set等都是迭代器模式的实现。就是把一个集合中的元素一个一个的遍历迭代出来。
2023-08-28 07:14:21
86
原创 软件工程(十五) 行为型设计模式(一)
通过多个对象处理的请求,减少请求的发送者与接收者之间的耦合。将接受对象起来,在链中传递请求,直到有一个对象处理这个请求。传递职责由类图可以比较容易的看出来,其实就是自己关联自己,形成了一个链,并且自己有不同的实现类,实现类就是在链路上的一环又一环。比如请假需要经过层层职级不一样的人进行审批。
2023-08-27 08:01:38
798
原创 软件工程(十四) 设计模式之结构型模式(二)
将对象组合成树形结构以表示“整体-部分”的层次结构,使得用户对单个对象和组合对象的使用具有一致性。树形目录结构由类图其实可以看出,组合模式就是将具有父子关系的结构,组装形成一棵树,并且根据规范,树干节点和叶子节点均需要实现统一接口或者继承同一个抽象类。只是各自实现树干和叶子节点的特有功能。下面我们以菜单目录和菜单为例,使用组合模式组装菜单。如果通过断点,我们可以非常清晰的看清楚整棵树的结果,非常的清晰的表示了父子结构,展示了整体和部分的逻辑。
2023-08-27 07:59:42
1150
原创 软件工程(十三) 设计模式之结构型设计模式(一)
前面我们记录了创建型设计模式,知道了通过各种模式去创建和管理我们的对象。但是除了对象的创建,我们还有一些结构型的模式。
2023-08-27 07:57:58
1252
原创 软件工程(十一) 系统设计分类
模式通俗来讲就是套路,比如武侠小说跳悬崖之后必有奇遇,这就是一套套路,也是一种模式。很多时候我们会有一些模式化的东西,却解决一些现有的问题,是一种很不错的策略,这就是设计模式。
2023-08-27 07:52:15
1449
原创 软件工程(十) 需求工程之需求开发与管理
前面提到需求工程相关概念时,知道了需求开发分为需求的获取->需求分析->需求定义->需求验证四个阶段。需求获取主要是通过跟客户访谈,电话沟通,开会,问卷等获取原始需求,然后将原始需求进行分析整合就是需求分析。而将整合后的需求,落地成真正的需求规格说明书,形成SRS时至关重要的一步,也就是需求定义的过程。需求定义有哪些方法呢?严格定义法结构化方法,适用于需求明确场景所有需求都能够被预先定义开发人员与用户之间能够准确而清晰的交流采用图形/文字可以充分体现最终系统原型法适合于需求不明确。
2023-08-27 07:50:54
1217
原创 软件工程(六) 面向对象分析(OOA)之UML图特点
面向对象分析里面有一个非常重要的工具叫UML,UML不仅在工作中非常重要,在考试当中也是非常重要的,即作为上午综合体,又大概率又会出现在下午的案例分析中,作为一个25分的大题。UML叫做统一建模语言,它主要用于需求分析和软件的设计,来做一些模型的制作。比如我们要开发一个系统,如果我们用纯粹的文字表达和表述,可以想象相关人员理解会多么困难。所以将收集到的相关信息用图形直观的展示出来,UML就是做这么一个事情。从而便于大家的沟通和后续的设计和开发。
2023-08-27 07:40:39
933
原创 (四)、Springboot+Redisson实现分布式锁封装为starter
Springboot+Redisson实现注解版分布式锁,封装分布式锁为一个starter
2023-08-22 06:58:19
541
原创 (2)、将SpringCache扩展功能封装为starter
将扩展SpringCache实现自定义TTL封装为spring-boot-starter, 形成独立的模块,开箱即用
2023-08-21 07:38:23
156
原创 (1)、扩展SpringCache一站式解决缓存击穿,穿透,雪崩
扩展SpringCache, 使其支持自定义ttl, 自定义RedisConnectionFactory, 自定义RedisTemplate, 自定义CacheManager
2023-08-21 07:32:02
328
原创 软件工程(五) 结构化需求与面向对象需求分析
前面提到需求工程相关概念时,知道了需求开发分为需求的获取->需求分析->需求定义->需求验证四个阶段。需求获取主要是通过跟客户访谈,电话沟通,开会,问卷等获取原始需求,然后将原始需求进行分析整合就是需求分析。而将整合后的需求,落地成真正的需求规格说明书,形成SRS时至关重要的一步,也就是需求定义的过程。需求定义有哪些方法呢?严格定义法结构化方法,适用于需求明确场景所有需求都能够被预先定义开发人员与用户之间能够准确而清晰的交流采用图形/文字可以充分体现最终系统原型法适合于需求不明确。
2023-05-19 08:11:28
670
Linux运维相关书籍(约30本)
2019-06-14
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人