上一主题 下一主题
ScriptCat,新一代的脚本管理器脚本站,与全世界分享你的用户脚本油猴脚本开发指南教程目录
返回列表 发新帖
楼主: 李恒道 - 

【论文随笔】论软件系统分层架构

[复制链接]
  • TA的每日心情
    慵懒
    2024-10-28 07:07
  • 签到天数: 193 天

    [LV.7]常住居民III

    712

    主题

    5959

    回帖

    6758

    积分

    管理员

    非物质文化遗产社会摇传承人

    积分
    6758

    荣誉开发者喜迎中秋油中2周年生态建设者

    发表于 2023-11-1 22:54:02 | 显示全部楼层 | 阅读模式

    2021年,我司研发了《即时通讯系统》,该系统支持用户进行一对一、一对多、多对多等模式的通话,主要的模块有用户模块、群组模块、广播模块、监控模块、信息加密模块、审核内容模块等,在本次项目中笔者担任系统架构师一职,负责系统架构。

    以该项目问题,论述了软件系统分层架构的具体实现,主要可以分为接入层,逻辑层,持久层三个层面,接入层主要用于处理用户的响应,并由逻辑层进行实际的业务处理;逻辑层负责系统实际功能的运行;持久层负责将数据进行持久化到存储设备中等。最后系统顺利按计划进行交付并通过验收,经系统用户反馈使用体验良好。

    正文

    笔者在一个私人企业任职,所在公司由于内部员工的交流协作以及拓展公司的业务范畴,应公司的业务需求研发了《即时通讯系统》,在本次项目中担任项目的系统架构师,主要负责系统架构方面。

    该项目主要以用户的通信功能作为核心,可以进行一对一的单点通信,一对多的广播通信,多对多的群组通信等,还支持同步、异步、半同步等多种模式的消息投递方式,主要的模块有用户模块、群组模块、广播模块、监控模块、信息加密模块、审核内容模块等。同时还开放了外部接口,方便其他系统或网页拓展相关功能,完成即时通讯功能的植入。

    经过研讨和商论,需要对系统架构的分层架构进行合理划分,提出一个合理的系统架构,并确保已标识的构件可以映射到架构中,层次是否清晰,构件的相互关系及设计是否合理,架构是否满足了功能需求及非功能需求,经过详细的分析与设计,最终将架构分为三层:表现层、逻辑层、持久层。

    该系统最终经过设计决定采用了Spring Cloud微服务架构,并采用微服务网关不仅仅只是为用户提供了单一的系统入口,还可以将用户请求的HTTP协议转换为微服务内部协议,完成传输协议的转换,数据格式的转换,消息过滤,消息路由等功能。同时微服务网关还可以实现对微服务的心跳,保证微服务的可用性,微服务网关还可以对服务进行服务熔断,流量限流,服务降级等功能。同时为了解决微服务相互通信难以找到服务对象的问题,采用了服务发现机制,并在内网部署了DNS内部解析,方便容器以较为通用的格式查找对应的微服务实例,也方便进行透明负载均衡的处理。

    表现层

    表现层的主要功能是为用户显示最终的结果信息,接收用户请求,页面跳转,逻辑下沉等功能,采用MVC架构实现,通过控制器接受用户的请求信息,选择相应的视图,并调用对应的业务模型,业务模型返回相应的数据,再将数据传递给视图,视图得到数据渲染出最后的结果信息页面,返回给用户进行展示。在本系统中采用了模板渲染的技术,将视图与控制器以及模型进行解耦,由于该系统为即时通讯系统,对实时性的需求较高,所以经过团队的研讨,最终决定采用了Websocket通信,保证了客户端与服务器端的长连接通信。由于即时通讯系统对读写的要求较高,所以可以适当在非实时的业务功能部分采用CDN进行缓存,当启用CDN时,用户访问系统会被分配到最近的边缘节点,由边缘节点负责返回用户所需要的结果信息,保护了核心节点的网络带宽及提高了用户的响应速度,并可以将一部分较为简单的计算由CDN的边缘节点部分进行计算,批量发给核心节点进行更新等操作,节省了核心节点的资源消耗。

    逻辑层

    逻辑层主要功能是处理业务的核心逻辑,可以分为业务逻辑组件,业务逻辑实体,业务逻辑工作流,业务逻辑框架。业务逻辑组件分为接口和实现类,接口定义了业务逻辑组件的实现类的标准函数接口。通常按模块对组件进行划分,一个模块就是一个对应组件,一个组件由多个DAO组成。业务逻辑工作流是以预定义的规则传递文档,信息,任务的过程自动进行,从而实现某个预期的业务目标或帮助用户完成。业务逻辑实体是对业务数据及相关功能的状态访问,通常来自于多个表,实体可以通过IO参数传递并且是可序列化的,保持自身的状态,业务逻辑层是系统的核心组件,以容器的形式存在,便于开发,复用,拓展等。在该层采用了微服务的架构设计,以功能进行划分为不同小且独立的微服务,每个微服务都可以进行独立部署,且微服务对异构型支持良好,可以根据相关业务的需求选择合适的编程语言及相关工具、框架等,如微服务既可以选择使用中央存储结构也可以使用独立存储结构,微服务之间可以以同步/异步/工作流等方式进行相互通信,同时由于即时通信系统对可靠性要求较高,所以核心的业务部分需采用消息订阅队列的形式进行相互传递,消息订阅队列将会对未成功响应的消息进行持久化处理,防止在异常或错误的情况下导致消息丢失,同时可以进行异常数据过滤等,大大保证了系统的可靠性和安全性。

    持久层

    持久层是将数据持久化到存储设备中,及对外部资源的访问,如与数据库进行通信等,由于采用了微服务架构,每个微服务都可以使用适合自己业务需求的数据库,同时即时通讯系统会产生大量的数据,应当在数据压力较大的服务采用分布式数据库,其支持高并发访问,同时数据存储结构松散,支持不同类型的数据,易于拓展和部署,支持海量数据的存储和检索。同时可以使用主从集群以及操作-查询分离模式进一步提高系统的性能,并解决了单点故障及峰值流量的问题。但由于即时通讯系统涉及大量的数据查询和写入,此时可以采用数据缓存机制,将实时性不强的业务数据在查询时优先利用数据缓存返回,减少数据库的压力,提高系统效率。同时针对用户较为敏感的核心数据,可以采用密钥表的方式进行处理,当需要读取对用敏感的保密字段时,只需在进行数据库操作时提前开启密钥表即可,在操作完毕后关闭密钥表,即可完成数据库中敏感字段的保密与安全防护功能。

    总结

    该系统已经上线一年,在企业中获得了一致好评,但在依然出现了一些问题,例如跨应用的事务一致性较为难解决,对此采用了两阶段提交保证了跨应用事务的数据一致性。

    在该系统中通过表现层对用户展示最终的业务信息,通过逻辑层实现了对系统中核心关系的处理,通过持久化层实现了对象持久化到存储设备当中,软件系统分层架构的应用为系统的开发提供了强有力的支持,在本次的系统开发的过程中,在软件系统分层架构的具体应用时,也让我发现了自身的许多问题和不足,在今日的日子里会积极扩充自己的知识和能力,完善该系统的架构,同时为今日架构涉及过程中做到更加完善。

    混的人。
    ------------------------------------------
    進撃!永遠の帝国の破壊虎---李恒道

    入驻了爱发电https://afdian.net/a/lihengdao666
    个人宣言:この世界で私に胜てる人とコードはまだ生まれていません。死ぬのが怖くなければ来てください。
  • TA的每日心情
    擦汗
    2024-3-25 15:30
  • 签到天数: 135 天

    [LV.7]常住居民III

    4

    主题

    109

    回帖

    206

    积分

    荣誉开发者

    积分
    206

    荣誉开发者油中2周年

    发表于 2023-11-2 11:29:45 | 显示全部楼层
    划重点,系统架构师
    可恃唯我
    回复

    使用道具 举报

  • TA的每日心情
    慵懒
    2024-10-28 07:07
  • 签到天数: 193 天

    [LV.7]常住居民III

    712

    主题

    5959

    回帖

    6758

    积分

    管理员

    非物质文化遗产社会摇传承人

    积分
    6758

    荣誉开发者喜迎中秋油中2周年生态建设者

    发表于 2023-11-2 11:35:30 | 显示全部楼层
    cocang 发表于 2023-11-2 11:29
    划重点,系统架构师

    在考系统架构师的那个考试
    每天就在对着电脑瞎几把编
    实际我他妈就一前端切图仔
    混的人。
    ------------------------------------------
    進撃!永遠の帝国の破壊虎---李恒道

    入驻了爱发电https://afdian.net/a/lihengdao666
    个人宣言:この世界で私に胜てる人とコードはまだ生まれていません。死ぬのが怖くなければ来てください。
    回复

    使用道具 举报

    发表回复

    本版积分规则

    快速回复 返回顶部 返回列表