架构师必须要清楚的概念(架构师成长之路)
通过前面的文章,已经把高层架构设计所涉及到的各个部分基本讲清楚了。
接下来看看概要设计阶段要做什么以及如何做。
概要设计阶段要做的事情很多,把它总结梳理了一下,分成了如下十个大的方面,像写设计文档这些,都不算在内。
一:继续架构设计
前面咱们讲了很多高层架构设计方面的内容,相对而言,高层架构设计跟业务的联系不是那么紧密。
除了这些之外,还有很多跟具体业务相关的架构设计的内容,这些就放到概要设计阶段和详细设计阶段来做。
因此,在概要设计阶段,需要继续架构设计,又分成两个方面:
1:对前面整体的技术架构,结合实际应用情况进一步细化
高层架构设计相对还是比较粗略,具体落地,还显得空泛,因此,需要我们进一步结合实际应用情况,对架构设计进行细化。
比如:前面讲缓存架构提到的:缓存使用中,具体使用什么数据类型、存储数据的格式等等
前面已经确定缓存使用Redis,那这里就要结合着业务,来确定到底使用什么类型,这个时候,架构师的技术功底就要受到考验了,最起码要对Redis的一些基本技术有所理解:
比如:你肯定得知道Redis的Value支持五种类型,每种类型都干些什么,特点是什么,使用上有什么限制等等的。然后再结合着具体业务,来进行选择使用。可能就需要深入地理解适合应用Redis的地方:
(1) 缓存
(2) 取最新N个数据的操作,如:可以将最新的50条评论的ID放在List集合
(3)排行榜类的应用,取TOP N操作,前面操作以时间为权重,这个是以某个条件为权重,比如按顶的次数排序
(4) 计数器应用
(5) 存储关系:比如社交关系,比如Tag等
(6)获取某段时间所有数据排重值,使用set,比如某段时间访问的用户ID,或者是客户端IP
(7) 构建队列系统,List可以构建栈和队列,使用zset可以构建优先级队列
(8) 实时分析系统,比如:访问频率控制
(9) 模拟类似于HttpSession这种需要设定过期时间的功能
(10)Pub/Sub构建实时消息系统
(11)记录日志
2:做一些跟业务相关的典型业务系统的架构设计
概要设计阶段,会进一步考虑一些跟业务和具体实现相关的架构,比如一些典型业务系统的架构设计:像什么 秒杀、实时统计报表等等
二:继续技术选型
这个大的部分在前面整体技术架构部分已经选好了,这里主要选择一些跟实际功能实现相关的技术,整体技术架构设计的时候不会考虑这么细。
比如:文件上传下载用什么组件、excel读写用什么框架、Image的压缩转换等等的。
三:继续确定具体技术栈
针对已选型的技术,确定落地的技术栈,比如:要使用redis,那用哪个版本?使用什么客户端的技术?jedis还是lettuce?是使用原生API还是使用Spring提供的Template?客户端使用哪个版本?等等。
如果是微服务架构,这个可能会更麻烦一些,假如选择的是SpringCloud,那么它不同的版本所包含的技术组件是不一样的,组合方式也不一样,直接会影响到整个技术实现。
也就是需要进一步对整个技术体系进行确定。
四:架构原型实现和架构验证
这个这里没法具体演示,基本方法就是构建一个最简单的、但是有代表性的业务,然后用这个架构和选定的技术,进行实现,以此来验证架构是否达到预期。
如果我们使用的是已经使用过的架构体系,技术的组合方式也已经通过其它项目或产品的验证,那么,这个步骤可以省略。这个就看公司或者团队自身的技术积累和沉淀了。
五:技术预研
这个不一定是每个项目都需要的,主要是针对项目中的重难点技术点、不确定的技术点,进行实际开发前的技术研究,以确保在现有的架构设计和技术体系下,能合理的实现这些功能点或技术点。
方法:抽象构建demo,能用于解决技术问题,不要涉及太多业务,聚焦于技术上的解决方案,但最后要能应用到项目中。
比如说现在项目中有一个功能要求实现以图搜图,如果这个功能以前没有实现过,那就需要预先研究一下,看看如何来实现这个功能,另外还要看看能不能达到用户的要求。
六:继续分服务、分模块
这里会更细致地考虑模块的层级和拆分,进一步完善整个业务的拆分。
构建初步的系统工程结构 和 包结构。
七:应用的基础框架设计
这个是进行具体开发的基础,应该要先做。
这里会设计具体的功能,只不过是把一些具体的、通用的功能做了一定的抽象和封装,并考虑未来具体应用,该如何简单的来使用这些功能。
当然,每个公司和团队,都会有一些积累和沉淀,这里就是在这些积累的基础之上,结合具体的项目,进一步完善整个基础框架或基础功能包。
八:初步定义API
结合着每个模块要实现的业务来定义。
这个有很多的规则、方法、技巧和经验总结,后面可以给大家详细讲讲如何进行API设计。
九:初步定义实体对象
这个方法比较简单,主要依据是需求调研和需求分析。
属性来源:业务单据、控制数据、暂存数据
相当于基本的vo(ValueObject)就有了。
十:初步定义数据库表结构
前面定义的实体对象可以看作是数据库的逻辑设计,基本上只需要把它们转化成物理设计,就可以得到初步的数据库表结构了。
当然,转化后还是需要进行一些微调,比如:有些字段是不需要在数据库中存储的。
有关于概要设计阶段,具体要做的事情还有基本方法,就先聊到这里。
如果你觉得本系列文章还不错,能够给你一些启发和思考的话,请关注、点赞、收藏加转发,让更多的朋友加入到我们的行列,谢谢啦!
更多架构师之路干货文章,已在路上,稍后就到!
,
免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com