软考架构师高级

论基于构件的软件开发方法及其应用

试题一 论基于构件的软件开发方法及其应用

基于构作的软件开发(Component-Based Software Development,CBSD)是一种基于分布对象技术、强调通过可复用构件设计与构造软件系统的软件复用途径。基于构件的软件系统中的构件可以是COTS(Commercial-Off-the-Shelf)构件,也可以是通过其它途径获得的构件(如自行开发)。CBSD将软件开发的重点从程序编写转移到了基于已有构件的组装,以更快地构造系统,减轻用来支持和升级大型系统所需要的维护负担,从而降低软件开发的费用。

请围绕“基于构件的软件开发方法及其应用”论题,依次从以下三个方面进行论述。

1.概要叙述你参与管理和开发的软件项目,以及你在其中所承担的主要工作。

2.详细论述基于构件的软件开发方法的主要过程。

3.结合你具体参与管理和开发的实际项目,请说明具体实施过程以及碰到的主要问题。

摘要:

2022年3月,我负责了某公司基于云原生理念的“自动化运维系统”的建设项目,由我担任系统架构设计师,负责系统架构设计工作,在该项目的实施过程中,我们选择了基于构件的软件开发方法,在整个开发过程中主要包含需求分析、选择可用的构件、构件定制化、构件组装,通过选择合适的开源构件和根据企业需求定制化构件,实现系统功能的快速实现和稳定运行。该项目总投入近450万,历时15个月,于2023年6月交付至今,不仅帮助运维人员高效、安全的管理云上应用和后端服务器资源,同时帮助开发和测试人员实现应用的快速迭代和测试,大大提升了团队之间的协作效率,消除了运维和开发之间的壁垒,得到了用户的一致好评。

正文:

随着云原生技术的发展,企业也逐渐引入相关技术,在基础设施层,越来越多的企业开始购买云上服务器,如应用服务器企业可选择阿里云的ECS服务器,数据库服务器企业可选择阿里云的RDS,DNS服务企业可选择阿里云的域名解析,云上资源购买十分方便,在页面中点击几下即可购买成功,但在实际工作中,不能随意购买,需要结合企业成本和服务器资源使用情况来综合考量,避免资源浪费,所以对云上资源的成本、资源使用情况的可视化管理就很重要。同时,随着容器技术和微服务架构的发展,企业应用也都选择微服务架构,采用容器的方式部署在kubernets集群中,在这种情况下,应用的快速发布、容器资源管理、监控告警就显得尤为重要。

为了实现云上资源的可视化管理和基于云原生应用的快速发布,我所在的公司决定开发一个“自动化运维”系统,我们称之为云平台,并在2022年3月正式启动该项目的建设工作,我被任命为系统架构设计师,负责系统架构设计工作该项目总投入450万元人民币,建设周期从2022年3月至2023年6月截止,历时15个月。该系统主要包括应用中心、发布中心、监控中心、成本中心、容器中心、权限管理和变更管理七大模块,应用中心是整个系统的数据中心,其他模块的功能都围绕“应用”来进行资源的展示和操作;发布中心以“应用”为单位,向用户提供应用的快速发布功能;监控中心以“应用”为单位,向用户提供应用的监控告警功能;成本中心以“应用”为单位,向用户展示每个应用的成本;容器中心以“应用”为单位,展示应用的相关容器资源;权限管理是对用户分类,使得不同的用户可看到不同的模块;变更管理主要对云上资源的变更进行管控,避免对云上资源的误操作导致系统故障。

基于构件的软件开发方法的过程为需求分析、获取可用的构件、体系结构设计、构件定制化开发和构件组装。下面将从以上步骤分别介绍该系统的实现过程。

在需求分析阶段,主要通过用例图进行分析,包含识别用例参与者、合并需求获得用例、细化用例描述、调整用例模型,整个系统的参与者包含开发、测试、运维、项目经理、公司领导层,开发希望系统能够实现自动化发布,将自己的新代码快速部署上线,进行验证;测试希望能对新代码进行快速测试,在测试过程中,快速查找日志;运维希望能总览所有的云上资源,实现对云上资源的自动化管理和实现云上资源的监控告警;项目经理和公司领导希望能够总览应用的资源、成本等信息。

在构件选择阶段,代码的版本管理使用Gitlab,应用的发布和版本变更使用Jenkins,由于我们平台是基于云原生技术的,所以服务架构选择微服务架构,每个服务以容器的方式运行,所以负载均衡选择Kubernetes的Service资源,应用的部署选择Kubernetes的Deployment资源,应用的弹性伸缩选择Kubernets的HPA资源,关系型数据库选择Mysql,缓存数据库选择Redis,搜索数据库选择Elasticsearch,由于所有微服务的接口访问都要进行登陆验证,所以用户信息管理和登陆认证需要独立开发一个构件,同时在监控告警和消息通知中,都要调用钉钉的消息通知接口来进行各种消息的发送,消息发送也独立开发一个构件,认证构件和消息构件是供所有微服务使用的自主研发的构件。

在体系结构设计阶段,我们选择微服务的方式,将整个系统拆分为多个微服务,多个微服务之间通过Grpc协议进行通信,微服务的开发语言选择 golang进行开发,微服务的定义选择proto文件,基于proto进行接口定义的优点有:适应各种语言,可以根据 proto生成golang、python、java、python等多种语言的代码;proto即是接口定义文件,不需要再单独书写接口文档,提高团队协作效率;后端开发框架选择开源的kratos框架,该框架功能齐全,通过kratos创建框架代码后,开发人员只需要关注自己的业务代码即可。

构件定制化阶段,由于在构件选择阶段,我们将认证和消息发送设计为自主开发,所以主要设计这两个构件的功能和对外接口,书写详细文档,标明其他微服务如何调用这两个构件,同时,这两个构件也为全公司的其他系统提供服务。

在构件组装阶段,根据业务需求,在不同的微服务中使用不同的构件,进行构件的组装。例如在应用中心,主要进行应用信息的增删改和快速检索,所以在该服务中,主要使用mysql存储数据,使用elasticsearch存储以应用为维度的整体信息,方便用户快速检索;在发布中心,主要负责应用的快速发布和上线,在该服务中,使用gitlab进行业务代码的管理,使用jenkins进行应用的发布流程执行。通过微服务的业务逻辑将相应的构件功能进行组装,完成系统功能。

经过近15个月的项目开发,“自动化运维系统”顺利投入使用,开发人员和测试人员可通过该系统实现应用发布的自动化,无需运维人员的协助,消除了运维和开发的固有壁垒;运维人员可通过该系统高效管理云上资源,实时查看云上资源的使用率和成本,减少资源浪费,提高资源使用率。当然,在本项目中还有一些不足之处,在进行云上资源成本统计时,最初我们通过阿里云的费用接口来拉取各个产品的成本,由于产品很多,写了很多逻辑,后来通过和阿里云的技术人员沟通,可以在阿里云平台上将所有产品的费用一键转储到oss中,直接通过oss的sdk即可快速查询所有产品的费用,后来我们开发人员快速修改下成本获取的逻辑,并没有对项目产生什么影响。由于架构合理且考虑周全,进展顺利,得到了公司技术人员的认可,大大提高了技术团队的协作效率。

留言

您的邮箱地址不会被公开。 必填项已用 * 标注

版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。