欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

软件架构应关心的若干要素

程序员文章站 2022-04-09 18:53:45
本篇文章主要分析,架构师在设计系统架构时,应关心哪些关键要素? 一 业务场景 A公司是一家服装公司,主要提供服装一体化服务(服装设计,服装销售,售后服务等),该公司主要通过淘宝,天猫,京东等平台进行销售,由于公司 良好的服装质量,高效的服务水平和良好的信誉等,使得公司的销售量不断地增长,到了第五年, ......

      本篇文章主要分析,架构师在设计系统架构时,应关心哪些关键要素?

一  业务场景


       a公司是一家服装公司,主要提供服装一体化服务(服装设计,服装销售,售后服务等),该公司主要通过淘宝,天猫,京东等平台进行销售,由于公司

良好的服装质量,高效的服务水平和良好的信誉等,使得公司的销售量不断地增长,到了第五年,公司的销售呈现指数型增长....,为了迎合指数型的业务需

求,公司高层决定使用互联网技术来迎合指数型的业务需求。

        该项目由cto全程负责,并向ceo汇报,cto指定小张为该项目业务负责人,小红为该项目技术负责人,他们两人定期向cto汇报。其中,cto主要负

责系统的系统架构,项目管理,团队组建,关键业务沟通等工作,小张主要负责业务相关的事,如需求调研,需求文档编写等,小红主要负责项目落地开发,

如核心模块开发,及时解决团队开发出现的技术性问题。

        如此,cto做出了如下的业务架构,该项目命名为:线上仓储系统(onlinewms)

       (1)通过线上平台提供的接口,抓取用户订单

       (2)将抓取的订单存储到仓储系统

       (3)将订单相关信息传递给sap(可以理解为财务系统)

       (4)当货物发送后,在wms系统上,通过物流接口查询订单状态(发送,未发送,已收货,退货等)

软件架构应关心的若干要素

 

二   架构师应关心的若干要素


 1.明确系统功能(what)

在业务架构中,系统架构师一定要非常了解且明确系统要解决的核心业务,在设计前,建议考虑如下问题:

项目需求是什么?

项目需求是基于什么背景下提出的?

项目需求的核心业务是什么?

项目需求的难点和痛点是什么?

....

在充分考虑如上问题后,就是问题答案的寻找和求证过程:

答案寻找?

如上系列问题,均可在需求文档中找到,因为一般情况,需求文档都会有详细描述,需求文档的来源一般经过几个阶段:

需求提出=》需求调研=》需求初稿=》需求评审=》需求修改=》需求定稿

答案求证?

系统架构师在充分研读需求文档后,对需求基本有所了解,然而这些所谓的了解,是需要与需求提出者,需求撰写者等关键人物确认的

确认的,这个过程也叫答案的求证过程,只有该过程确定后,方可进行下一环节。

2.定义系统边界(scope)

在充分明确需求后,就要定义系统边界了,首先来了解一下,什么叫系统边界。

系统边界:指本次项目由哪些系统构成(或子系统构成)。

cto为onlinewms系统定义了四个边界:线上接口(订单的来源),物流接口(订单状态查询),wms系统(订单管理,衣物存储等),sap系统

(财务相关)

 很容易看出,这几个边界定义还是比较明显的,职责分工明确,无重叠业务。

 软件架构应关心的若干要素

3.定义系统之间的交互方式

cto为onlinewms系统定义了四个边界,且这四个边界的交互方式是以接口的方式进行的。

4.接口设计规范

关于接口设计规范,请参考我的另一篇文章  

5.系统难点

该系统,从线上抓单,且将订单及时地存储到wms系统是一大难点和挑战点,尤其在双十一,双十二等高峰时段,成千上万的高并发量,

10w-1000w的订单量等都完全有可能导致系统崩溃。然而,该难点却有很多可以捕捉的特点,归结如下:

(1)存在高并发量特征

(2)存在大规模订单特征

(3)存在系统响应及时特征

(4)存在高并发、大规模订单集中于某个时间段,而非长时间(如1年)特征

.......

6.业务模块与非业务模块拆分

该系统中,存在业务模块与非业务模块,需要进行拆分,如非业务模块授权管理、日志记录等需要从业务中拆分开发来,可以采用aop技术

实现,如spring aop,aspectj等。

7.模块解耦

该系统中,模块之间存在必要的依赖关系,为了尽可能的降低这些依赖关系,可以采用di(依赖注入技术)来解决,如spring框的di。

8.技术选型

涉及到前端框架,后端框架,orm框架等。

在选择框架时,尽量选择主流且被广泛使用的框架,尽量不要选择不太主流或太新的框架。

在框架组合时,防止过大,也防止过小,如ssh,ssm,springboot+springcloud+redis+mongo+mq+dubbo等,要根据具体的业务场景来选择。

9.开发团队

在组建团队时,要充分考虑风险,如团队人员突然离职造成项目延误等风险,建议采用职能组织架构结构来组建团队。如一个技术开发经理,2个高级开发,3个中级,4个初级等,

这样搭配的好处是,当技术开发经理突然离职(一般技术开发经理很少离职),2个高级开发可以顶替上去;若有一个高级开发离职,两个中级可以顶替上去....如此,就算某个人离职,

对项目影响都不会太大。

10.项目管控

管理项目计划,项目进度,开发团队人员情绪、处理开发技术问题等。

三  版权区


  •    转载博客,必须注明博客出处
  •    博主网址:http://www.cnblogs.com/wangjiming/
  •    如您有新想法,欢迎提出,邮箱:2098469527@qq.com