系统架构设计师【论文-2016年 试题4】: 论微服务架构及其应用(包括写作要点和经典范文)

论微服务架构及其应用(2016年 试题4)

近年来,随着互联网行业的迅猛发展,公司或组织业务的不断扩张,需求的快速变化以及用户量的不断增加,传统的单块(Monolithic)软件架构面临着越来越多的挑战,已逐渐无法适应互联网时代对软件的要求。在这一背景下,微服务架构模式(Microservice Architecture Pattern)逐渐流行,它强调将单一业务功能开发成微服务的形式,每个微服 务运行在一个进程中;采用 HTTP 等通用协议和轻量级 API 实现微服务之间的协作与通信。 这些微服务可以使用不同的开发语言以及不同数据存储技术,能够通过自动化部署工具独立 发布,并保持最低限制的集中式管理。
【问题 1】
请围绕“论微服务架构及其应用”论题,依次从以下三个方面进行论述。

  • 1.概要叙述你参与管理和开发的、采用微服务架构的软件开发项目及在其中所担任的主要工作。
  • 2.与单块架构相比较,微服务架构有哪些特点?请列举至少 4 个特点并进行说明。
  • 3.结合你参与管理和开发的软件开发项目,描述该软件的架构,说明该架构是如何采用微服务架构模式的,并说明在采用微服务架构后,在软件开发过程中遇到的实际问题和解决方案。

写作要点

一、叙述你参与管理和开发的、釆用微服务架构的软件开发项目,并明确指出在其中承担的主要任务和开展的主要工作。
二、与单块架构相比,微服务架构具有如下特点:
(1)通过服务实现组件化。单个微服务实现简单,能够聚焦一个指定的业务功能或业务需求。
(2)功能明确,易于理解。微服务能够被一个开发人员理解、修改和维护,这样小团队能够更关注自己的工作成果,并降低沟通成本。
(3)围绕业务功能构建开发团队。采用微服务架构,可以围绕业务功能构建开发团队,这样更符合企业的分工与组织结构,便于管理。
(4)支持多种开发语言与多种平台。不同的微服务能使用不同的语言开发,运行在不同的操作系统平台上,通过标准的协议和数据格式进行交互与协作。
(5)离散化数据管理。在微服务架构中,无法创建或维护统一的数据模型或结构,全局数据模型将在不同的系统之间有所区别,需要进行数据模型的离散化管理。
(6)基础设施自动化。微服务强调以灵活的方式集成自动部署,通过持续身集成工具实现基础设施自动化。
三、考生需结合自身参与软件开发项目的实际状况,描述该软件的架构,并明确说明软件架构为什么属于微服务架构,具有微服务架构的哪些特征。并结合项目开发实际,说明采用微服务架构模式后对软件开发过程的影响以及遇到的问题,包括服务的定义与划分、服务之间的协作关系、服务部署、服务管理等。

经典范文

摘要
2020年6月,我单位联合xxx、xxx有限公司开发了省xxx综合应用管理平台,作为公司核心技术骨干,我担任了系统架构师的职务,主要负责xxx应用系统架构体系设计及核心组件的开发工作。该系统按照省机关业务类型划分,依次包含基础功能支撑板块、平台资源管理板块、煤炭能源板块、油气板块、新能源能源板块、电力板块、安全监管板块、经济运行板块、智能数据分析业务以及数据可视化板块,业务范围依次涵盖省煤炭、电力、油气、新能源等能源领域。

本文首先介绍构建xxxx应用系统的项目背景,然后分析了微服务技术架构对于该项目的必要性,并以能源云应用系统作为例,结合微服务架构的特性与实际情况,分别讨论了微服务技术架构的应用情况。实践证明,在大型的应用系统构建过程中,使用微服务技术架构,能够实现各应用分区自治、庞大业务的有效管理及业务功能灵活拓展的优势。

正文
xxx综合应用管理平台,是机关响应国家“十四五”规划所采取的数字信息化措施的开创性项目,旨在深化运用国家以及省市政务信息资源,加强政务信息共享,实现数据编目、数据整合、能源应用服务,规范政务信息资源社会化增值开发利用工作,合理规划政务信息的采集(煤炭、油气、新能源、电力等领域),加强政务信息资源管理。项目的总体目标为:理清能源数据家底,形成能源数据资源目录;实现省能源数据的统一综合管控;基于能源大数据,支撑能源全产业的决策与分析;通过省级数据共享与开放平台向兄弟单位共享能源数据、向社会企业与公众开放脱敏数据。

在项目早期,我们组织了相关承建企业及核心用户,一起进行了项目需求的评审,拟在确定项目的研发计划、细化项目需求,从而进一步确定采取的系统软件架构。项目整体涉及了能源领域的众多业务,体系繁杂且比较庞大,部分业务有着相似的数据支撑组件而部分业务之间又不存在过多的信息交互,基于此,我提出了项目整体采取微服务架构体系构建的方案,并陈述了按照业务板块划分、基础业务拆分方式规划微服务的必要性。在专家评审过程中,通过以往采用微服务架构体系规划项目的经验,最终确定了该系统架构设计方案。

微服务架构体系作为目前IT领域主流的技术,有服务化、强韧性、可观测性和自动化四类设计原则。通过服务化的设计原则,应用被分解为多个服务,可分别选择不同的技术,单个服务模块很容易开发、理解和维护,无需协调其他服务对本服务的影响;通过强韧性的设计原则,微服务可以分布式云化部署,负载均衡管理请求的分发,避免单机失败对整体服务的影响,以及弹性调整资源容量;通过可观测性的设计原则,能够对系统进行健康检查、指标监控、日志管理和链路追踪,提高系统运维、管理和排错能力;通过自动化的设计原则,可实现系统的自动化部署、自动化扩展伸缩、自动化运维、持续交付和集成,有效减少人工操作的工作量。

系统开发过程中,主要采取SpringCloud Alibaba技术架构作为微服务架构的实现方案,系统采取jenkins+docker一体化部署方式实现微服务的部署,前端采用Vue 3.0开发架构,通过nginx实现HTTP请求的动态负载及业务服务的调用层次抽象管理。采用该体系具备众多优势,下面就其特点、开发过程及系统上线后的实际情况进行结合,从而说明本项目采取此方案的好处、遇到的问题及其解决方案。

一、以微服务独立部署,实现各应用的独自管理,却又可以简便的进行交互。

每个服务都是一个独立的项目,可以独立部署,不依赖于其他服务,耦合性低。在系统构建过程中,我结合项目整体需求将应用系统拆分为了众多微服务,按照业务领域、使用用户类型对象进行划分,包含以提供基础数据支撑的平台服务,主要提供用户管理、能源企业管理、企业部门管理及业务数据字典管理等服务;以提供能源领域服务的四大板块服务,包括煤炭、油气、新能源、电力;以提供综合数据应用管理的上层众多汇总型服务。按照这种方式划分,由三个承建企业依次划分职责,同步开发,大大的提高了项目整体完成的效率。若服务之间需要进行通信,只需基于微服务体系的消息交互标准,以Rest标准化接口通过FeignAPI组件实现远程服务调用,通过nacos构建的统一网关,实现方便快捷的交互。

二、服务的快速启动

合理拆分之后服务由于依赖的库及代码量的减少,能够极大的提高服务的启动速度。虽然合理拆分能够提高系统启动速度,但也增加了系统服务的数量。基于此,我通过采取构建统一的打包平台方案,选取了jenkins+docker镜像结合的解决方案,通过docker将每一个微服务打包为至少一个能独立运行的容器,并通过docker-compose描述这些镜像服务的关系,使用jenkins进行脚本的统一集成,所有服务均以可视化方式展现在jenkins平台,很好的解决了服务数量增多之后的管理问题。

三、职责专一,由专门的承建企业负责专门的工作职能

本项目涉及领域众多、周期长,服务的拆分有利于团队之间的分工。在项目开发计划中,我们将服务划分过后,由不同的企业负责不同的服务,例如我司承建四大能源领域板块的构建等, 在项目开发过程中,除了特殊的业务流程需要服务之间进行信息交互外,大部分情况下均无需在意其他团队的开发进度。

四、服务可以动态按需扩容

当某个服务的访问量较大时,我们只需要简单的增加服务的申请资源或者增加服务实例数量,即可0成本的实现服务扩容。在应用部署的早期,我们将所有的服务实例均部署为3个,通过nginx实现一级均衡的同时,也采取了微服务的Ribbon负载体系。例如对于煤炭服务的访问,可动态负载到该3个不同的煤炭服务实例,该3个部署实例位于不同的服务器上,动态负载的同时也保障了服务不会出现单点故障问题。但随着系统用户(各省市机关、各企业用户)的加入及业务数据日益累计,整个系统出现了一定的性能问题。经过排查分析,发现煤炭企业用户会在每天下午2点左右集中上报生产数据,导致同一时刻大量的报表填报请求,导致出现了性能瓶颈,需要进行扩容,通过修改jenkins配置文件,增加打包镜像数量将原有的3个报表服务实例扩容一倍解决了问题。

五、服务的复用

每个服务都提供 REST API,所有的基础服务都按照尽可能高的内聚度进行抽取。类似于组件开发方法,可将一些底层的服务进行归纳总结,方便应用到以后的项目中,提高企业的生产效率。在本项目中,众多基础服务大部分均复用可以往团队开发的组件。譬如报表动态生成服务,该服务是以往能源产业几乎一致的需求服务,可通过该服务动态配置填报报表对象、填报周期、时间截止等。

经过我和团队的不懈努力,历时一年,项目终于于 XXX X年 XX 月通过顺利通过了验收,并得到了一致好评,运行至今,用户反馈良好,通过此类较大应用的开发使得公司的应用规划能力得以提升。但是,在实施过程中,也暴露了一些具体问题,例如微服务之间接口交互时,由于业务复杂,简单的消息调用无法满足繁忙场景,当交互频率增大到一个数量级时需要建立具有动态优先级调整机制的处理队列等等,这些问题通过引入消息队列组件Kafka得以妥善解决,没有影响到项目的运行情况。也在项目的实施过程中,发现了自己的一些短板,例如在安全性处理方面,还需要从服务部署层面、三方安全软件集成方面提升,由于自己从事的几乎都是政府职能项目,安全性是尤为需要考虑的质量属性,今后也会在这方面深入研究,力求使自己的架构实施能力更加全面、稳固,为国家政府信息化建设规划贡献自己的一份力。

更多内容请见: 备考系统架构设计师-核心总结(过关必备:包括架构设计补充知识、真题、论文等)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/29376.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于Java的冬奥会科普平台

开头语:你好,我是计算机学姐码农小野。如果你对冬奥会科普平台感兴趣或有其他技术需求,欢迎随时私信我。 开发语言:Java 数据库:MySQL 技术:Java、B/S架构 工具:MyEclipse、MySQL 系统展示…

Arcgis导入excel出现的问题

我手动添加了object-id字段也没有用,然后再excel里面又添加了一行,关闭后打开还是不行,额案后在网上看到了一种方法,很有效,予以记录。 1、我的文件是csv格式, 先在excel里面另存为xlsx格式 2、转换工具里…

【vue3 + element plus 】拖动排序实现(只能拖拽一次的问题、拖动后的位置不准确问题)

1.使用sortablejs插件 用于el-table列表拖动排序 import Sortable from sortablejs // 拖拽插件 mounted() { this.rowDrop() }, swap(arr, from, to) { // 在这方法中按需求修改排序规则即可if (from < 0 || from > arr.length || to < 0 || to > arr.length) r…

1 catboot:房价预测

学到的知识&#xff1a; 面对传统特征层面如何进行深度挖掘&#xff0c;衍生有价值的特征&#xff0c;让模型更好的理解数据&#xff1b;如何处理文本特征&#xff1b;如何对类别特征进行处理&#xff1b;类别特征与连续特征如何组合更加的高效&#xff1b;如何使用catboost, …

联华集团:IT团队如何实现从成本中心提升至价值中心|OceanBase 《DB大咖说》(十)

OceanBase《DB大咖说》第 10 期&#xff0c;我们邀请到了联华集团的CTO楼杰&#xff0c;来分享他如何思考 IT 业务价值&#xff0c;以及联华华商数据库的升级实践。 楼杰从大学毕业后就进入了联华工作&#xff0c;并一直扎根在近 20 年的&#xff0c;从一名底层的技术员成长为…

[每日一练]利用左右指定键连接实现经理的下属员工数量

该题目来自于力扣&#xff1a; 1731. 每位经理的下属员工数量 - 力扣&#xff08;LeetCode&#xff09; 题目要求&#xff1a; 表&#xff1a;Employees----------------------- | Column Name | Type | ----------------------- | employee_id | int | | name …

【区块链】POS(Proof of Stake)权益证明算法深度解析

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 POS&#xff08;Proof of Stake&#xff09;权益证明算法深度解析引言1. POS基本…

Bash sleep随机时间

在 Bash 中&#xff0c;如果你想让 sleep 命令等待一个随机的时间&#xff0c;你可以使用 $RANDOM 变量来生成一个随机数&#xff0c;然后将其转换为秒数。但是&#xff0c;$RANDOM 生成的数字范围是从 0 到 32767&#xff0c;这可能对于你想要的等待时间来说太大了。 为了得到…

【代码随想录】【算法训练营】【第42天】 [1049]最后一块石头的重量II [494]目标和 [474]一和零

前言 思路及算法思维&#xff0c;指路 代码随想录。 题目来自 LeetCode。 day 42&#xff0c;周二&#xff0c;坚持一下~ 题目详情 [1049] 最后一块石头的重量II 题目描述 1049 最后一块石头的重量II 解题思路 前提&#xff1a;最多只会剩下一块 石头&#xff0c;求此…

生命在于学习——Python人工智能原理(3.5)

三、深度学习 9、常见神经网络 常见的神经网络有卷积神经网络&#xff08;AlexNet、VGGNet&#xff09;、循环神经网络&#xff08;RNN&#xff09; 长短时记忆网络&#xff08;LSTM&#xff09;。 &#xff08;1&#xff09;AlexNet AlexNet于2012年由Hinton学生Alex提出&a…

SqlServer添加索引

1. 聚集索引&#xff08;Clustered Index&#xff09; 描述&#xff1a;表数据按照索引顺序实际存储。适用场景&#xff1a;数据经常需要排序或范围查询&#xff0c;比如按日期排序的查询。优点&#xff1a; 提高排序和范围查询性能。一个表只能有一个聚集索引&#xff0c;但可…

uniapp顶部导航栏实现自定义功能按钮+搜索框并监听响应事件

目录 第一步&#xff1a;先下载按钮需要展示的图标&#xff08;若不使用图标&#xff0c;直接使用文字可跳过这步&#xff09; 1、点击需要的图标&#xff0c;添加入库 2、点击旁边的购物车&#xff0c;在弹出的窗口中选择下载代码 3、解压下载的压缩包&#xff0c;将这几个…

文章解读与仿真程序复现思路——电网技术EI\CSCD\北大核心《考虑绿证—碳交易的多能互补综合能源系统电—热—气协同低碳优化调度 》

本专栏栏目提供文章与程序复现思路&#xff0c;具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 电网论文源程序-CSDN博客电网论文源…

【Seata】分布式事务解决方案——理论

目录 回顾什么是事务数据库事务的四大特性&#xff1a;ACID 分布式事务解释面临挑战分布式事务产生场景1. 单体架构中多数据源场景2. 分布式架构场景 分布式事务解决方案jta AtomikosLCN模式问题 Alibaba的Seata解决分布式事务问题 使用MQ解决分布式事务问题问题1&#xff1a;…

Thymeleaf 全局变量

在Spring Boot中&#xff0c;我们可以使用ThymeleafViewResolver的addStaticVariable方法来添加全局变量&#xff0c;这些全局变量可以在所有的Thymeleaf模板中直接使用&#xff0c;而不需要在每个视图控制器中重复定义。 以下是一个简单的例子&#xff0c;展示如何在Spring B…

【Java】已解决Java中的com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException异常

文章目录 一、分析问题背景二、可能出错的原因三、错误代码示例四、正确代码示例五、注意事项 已解决Java中的com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException异常 在Java中操作MySQL数据库时&#xff0c;我们经常会使用JDBC&#xff08;Java Database Connectivi…

wordpress商用付费主题与免费主题的区别

WordPress免费主题与WordPress付费主题&#xff0c;都可以用&#xff0c;但存在非常大的差别。从直观的感受&#xff0c;简单地说就是&#xff0c;WordPress免费主题能用&#xff0c;WordPress付费主题好用。如果涉及到其它的方面&#xff0c;WordPress商用付费主题与免费主题之…

js中!emailPattern.test(email) 的test是什么意思

test 是 JavaScript 正则表达式&#xff08;RegExp&#xff09;对象的方法之一&#xff0c;用于测试一个字符串是否与正则表达式匹配。正则表达式是一种用于匹配字符串的模式&#xff0c;通常用于验证输入数据、查找和替换文本等。 使用 test 方法 test 方法语法如下&#xf…

Microsoft Remote Desktop:随时随地,掌控你的桌面

Microsoft Remote Desktop是一款卓越的远程桌面连接工具&#xff0c;由微软公司精心打造&#xff0c;旨在为用户提供高效、安全且便捷的远程办公体验。 Microsoft Remote Desktop mac版获取 这款软件支持跨平台操作&#xff0c;无论是在Windows、macOS还是iOS等设备上&#xf…

Idea连接GitLab的过程以及创建在gitlab中创建用户和群组

上期讲述了如何部署GitLab以及修复bug&#xff0c;这期我们讲述&#xff0c;如何连接idea。 首先安装gitlab插件 下载安装idea上并重启 配置ssh免密登录 使用管理员打开命令行输入&#xff1a;ssh-keygen -t rsa -C xxxaaa.com 到用户目录下.ssh查看id_rsa.pub文件 打开复制…