当前位置: 首页 > news >正文

系统架构设计师【论文-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得以妥善解决,没有影响到项目的运行情况。也在项目的实施过程中,发现了自己的一些短板,例如在安全性处理方面,还需要从服务部署层面、三方安全软件集成方面提升,由于自己从事的几乎都是政府职能项目,安全性是尤为需要考虑的质量属性,今后也会在这方面深入研究,力求使自己的架构实施能力更加全面、稳固,为国家政府信息化建设规划贡献自己的一份力。

相关文章:

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

论微服务架构及其应用(2016年 试题4) 近年来,随着互联网行业的迅猛发展,公司或组织业务的不断扩张,需求的快速变化以及用户量的不断增加,传统的单块(Monolithic)软件架构面临着越来越多的挑战,…...

面试题:String 、StringBuffer 、StringBuilder的区别

String、StringBuffer、和StringBuilder都是用于处理字符串的操作类,但它们之间存在一些关键性的差异: 1.不可变性与可变性: String:字符串常量,是不可变的。一旦创建,其内容就不能被改变。对字符串的任何…...

TLS指纹跟踪网络安全实践(C/C++代码实现)

TLS指纹识别是网络安全领域的重要技术,它涉及通过分析TLS握手过程中的信息来识别和验证通信实体的技术手段。TLS(传输层安全)协议是用于保护网络数据传输的一种加密协议,而TLS指纹则是该协议在实际应用中产生的独特标识&#xff0…...

小白学RAG:大模型 RAG 技术实践总结

节前,我们组织了一场算法岗技术&面试讨论会,邀请了一些互联网大厂朋友、今年参加社招和校招面试的同学。 针对大模型技术趋势、大模型落地项目经验分享、新手如何入门算法岗、该如何准备面试攻略、面试常考点等热门话题进行了深入的讨论。 汇总合集…...

Doris Connector 结合 Flink CDC 实现 MySQL 分库分表

1. 概述 在实际业务系统中为了解决单表数据量大带来的各种问题,我们通常采用分库分表的方式对库表进行拆分,以达到提高系统的吞吐量。 但是这样给后面数据分析带来了麻烦,这个时候我们通常试将业务数据库的分库分表同步到数据仓库时&#x…...

ModbusTCP、TCP/IP都走网线,一样吗?

在现代通信技术中,Modbus/TCP和TCP/IP协议是两种广泛应用于工业自动化和网络通信领域的协议。尽管它们都运行在网线上,但它们在设计、结构和应用场景上有着明显的区别。 Modbus/TCP协议是什么 Modbus/TCP是一种基于TCP/IP的应用层协议,它是Mo…...

网络学习(13)|Spring Boot中获取HTTP请求头(Header)内容的详细解析

文章目录 方法一:使用HttpServletRequest实现原理代码示例优点缺点适用场景 方法二:使用RequestContextHolder实现原理代码示例优点缺点适用场景 方法三:使用RequestHeader注解实现原理代码示例优点缺点适用场景 总结 在Spring Boot应用中&am…...

【漏洞复现】宏景eHR pos_dept_post SQL注入漏洞

0x01 产品简介 宏景eHR人力资源管理软件是一款人力资源管理与数字化应用相融合,满足动态化、协同化、流程化、战略化需求的软件。 0x02 漏洞概述 宏景eHR pos_dept_post 接囗处存在SQL注入漏洞,未经过身份认证的远程攻击者利用此漏洞执行任意SQL指令,…...

82. 删除排序链表中的重复元素 and II

链接直达: 保留重复元素 不保留重复元素 题目: 1: 给定一个已排序的链表的头 head , 删除所有重复的元素,使每个元素只出现一次 。返回 已排序的链表 。示例 1:输入:head [1,1,2] 输出:[1…...

C++ 判断目标文件是否被占用(独占)(附源码)

在IM软件中发起文件发送时,如果要发送的是某word文件,并且该word文件被office打开,则会提示文件正在被占用无法发送,如下所示: 那文件被占用到底是如何判断出来的呢?其实很简单,调用系统API函数CreateFile,打开该文件(OPEN_EXISTING),传入FILE_SHARE_READ共享读标记…...

计划任务 之 一次性的计划任务

计划任务 作用:定时自动完成特定的工作 计划任务的分类: (1)一次性的计划任务 例如下周三对系统的重要文件备份一次 (2)周期性重复计划任务 例如每天晚上12:00备份一次 一次性的任务计划&#xff1a…...

非比较排序之计数排序

目录 一、什么是计数排序 二、思路 三、代码实现 一、什么是计数排序 计数排序是一种非比较型的排序算法,它通过统计待排序数据中每个元素出现的次数,然后根据这个次数来进行排序。计数排序的具体步骤如下: 首先找出待排序数据中的最大值…...

Django路由与会话深度探索:静态、动态路由分发,以及Cookie与Session的奥秘

系列文章目录 Django入门全攻略:从零搭建你的第一个Web项目Django ORM入门指南:从概念到实践,掌握模型创建、迁移与视图操作Django ORM实战:模型字段与元选项配置,以及链式过滤与QF查询详解Django ORM深度游&#xff…...

第7章 用户输入和 while 循环

第7章 用户输入和 while 循环 7.1 函数 input()的工作原理7.1.1 编写清晰的程序7.1.2 使用 int()来获取数值输入7.1.3 求模运算符 7.2 while 循环简介7.2.1 使用 while 循环7.2.2 让用户选择何时退出7.2.3 使用标志7.2.4 使用 break 退出循环7.2.5 在循环中使用 continue7.2.6 …...

xshell远程无法链接上VM的centos7

1、现象如下, 2.1解决办法:查证后发现这个默认的设置为vmnet0 2.2解决办法:重启win10的虚拟机网卡(先禁用再启用) 3.参考文章:Xshell连接不上虚拟机centos7_centos7的nat模式可以ping通网络,但是用xshell连…...

拥抱AI-图片学习中的卷积神经算法详解

一、定义 卷积神经算法(Convolutional Neural Networks, CNN)是深度学习领域中的一种重要算法,特别适用于处理图像相关的任务。以下是卷积神经算法的详细解释: 1. 基本概念 定义:卷积神经网络是一类包含卷积计算且具…...

超详解——深入详解Python基础语法——基础篇

目录 1 .语句和变量 变量赋值示例: 打印变量的值: 2. 语句折行 反斜杠折行示例: 使用括号自动折行: 3. 缩进规范 缩进示例: 4. 多重赋值(链式赋值) 多重赋值的应用: 5 .多…...

系统架构设计师【论文-2017年 试题2】: 论软件架构风格(包括写作要点和经典范文)

题目:论软件架构风格 (2017年 试题2) 软件体系结构风格是描述某一特定应用领域中系统组织方式的惯用模式。体系结构风格 定义一个系统家族,即一个体系结构定义一个词汇表和一组约束。词汇表中包含一些构件和 连接件类型&#xff…...

Spring Boot 事务传播机制详解

Spring Boot 事务传播机制详解 1. 事务传播机制概述 Spring Boot 中的事务传播机制用于处理多个事务方法之间相互调用时的事务行为,保证数据的完整性和一致性。当务传播机制定义了在调用一个事务方法时,当前事务该如何传播或传递。Spring Boot 中的事务…...

【机器学习】生成对抗网络 (Generative Adversarial Networks | GAN)

生成对抗网络 (Generative Adversarial Networks | GAN) 介绍 生成对抗网络 (Generative Adversarial Networks,简称GAN) 是一种强大的深度学习模型,用于生成具有逼真感的图像、音频和文本等内容。GAN 的核心理念是通过训练两个神经网络,生…...

[ADS信号完整性分析]深入理解IBIS AMI模型设计:从基础到实践

在高速数字设计领域,信号完整性(SI)分析对于确保系统性能至关重要。IBIS AMI(Algorithmic Model Interface)模型作为一种强大的工具,能够帮助设计师在系统层面上评估和优化SERDES(串行器/解串器…...

Plotly : 超好用的Python可视化工具

文章目录 安装:开始你的 Plotly 之旅基本折线图:简单却强大的起点带颜色的散点图:数据的多彩世界三维曲面图:探索数据的深度气泡图:让世界看到你的数据小提琴图:数据分布的优雅展现旭日图:分层数…...

Linux电话本的编写-shell脚本编写

该电话本可以实现以下功能 1.添加用户 2.查询用户 3.删除用户 4.展示用户 5.退出 代码展示: #!/bin/bash PHONEBOOKphonebook.txt function add_contact() { echo "Adding new contact..." read -p "Enter name: " name …...

蓝牙开发 基础知识

零、基础知识 0.1、Android 应用可通过 Bluetooth API 执行以下操作 扫描其他蓝牙设备查询本地蓝牙适配器的配对蓝牙设备建立 RFCOMM 通道通过服务发现连接到其他设备与其他设备进行双向数据传输管理多个连接 0.2、蓝牙进行通信的四大必需任务 设置蓝牙查找局部区域内的配对…...

QNX 7.0.0开发总结

1 QNX编译 1.1 基本概念 QNX可以直接使用Linux Makefile编译库和二进制,在Makefile文件中指定CCaarch64-unknown-nto-qnx7.0.0-g,或者CCx86_64-pc-nto-qnx7.0.0-g,保存退出后,运行source /qnx_sdk_path/qnxsdp-env.sh,…...

Golang使用讯飞星火AI接口

一、API申请 https://www.bilibili.com/video/BV1Yw411m7Rs/?spm_id_from333.337.search-card.all.click&vd_source707ec8983cc32e6e065d5496a7f79ee6 注册申请,需要在此页面获取appid、apisecret、apikey https://www.xfyun.cn/ https://console.xfyun.cn/ser…...

矫正儿童发音好帮手

《言语构音语音训练手册——下颌、唇部、舌部构音运动障碍》教辅书 儿童言语构音语音问题越来越受到家长的关注,大多数家长受到儿童说话晚、口齿不清、发音错误等问题的困扰,国外报道2岁儿童言语构音语音障碍达到17%,3岁达4%~7.5%&#xff0…...

wordpress主题导航主题v4.16.2哈哈版

1.下载授权接口源码onenav-auth-api-v2.zip ,在宝塔新建一个网站,域名为 auth.iotheme.cn,设置wordpress伪静态,申请ssl证书。将上面源码解压后上传到此网站根目录。 2. 在宝塔根目录etc下 hosts 中添加 127.0.0.1 auth.iotheme.…...

内存分布图

1.基本数据类型和常量存放在常量池中。 2.类的成员存放在堆中,如果成员是其他类对象也存放在堆中 3.数组和数组的内容放在堆中 4.类对象存放在栈中。 5.单独的对象存放在栈中。 6.引用数据类型存放在堆或栈中。 Java中对象到底存在堆中还是栈中_java对象在堆还…...

如何发布自己的NPM插件包?

安装 Node.js : 如果没有安装的,Nodejs下载安装:http://nodejs.cn/download/ 首先确保你已经安装了 Node.js 和 npm。你可以通过运行以下命令来检查是否已经安装: node -v npm -v初始化项目: 创建一个新的项目文件夹…...

怎么导入文章到wordpress/谷歌浏览器直接打开

NEW关注Tech逆向思维视频号最新视频→【摆脱焦虑告别烦恼,家装变局让消费者更从容】出品|连线Insight文|张霏编辑|李信从闪购到美团优选再到团好货,美团进军电商的野心从未停止。据连线Insight近期获悉,原网…...

辽宁建设官方网站/百度关键词优化策略

前语:不要为了读文章而读文章,一定要带着问题来读文章,勤思考。在此,建议大家为本公众号加“星标”。如文章写得好,望大家阅读后在右下边“在看”处点个赞,以示鼓励!作者:LiWenD 来源&#xff…...

海口网站建设fwlit/域名注册信息查询

文章目录⛄引言一、Redis 实现好友关注 -- Feed流实现推送到粉丝收件箱⛅Feed 流实现方案⚡推送到粉丝收件箱三、Redis 实现好友关注 -- 实现分页滚动查询 实时获取信息⛵小结⛄引言 本博文参考 黑马 程序员B站 Redis课程系列 在点评项目中,有这样的需求&#xff…...

wordpress自定义分享/百度竞价优缺点

.net平台的rabbitmq使用封装 前言 RabbitMq大家再熟悉不过,这篇文章主要整对rabbitmq学习后封装RabbitMQ.Client的一个分享。文章最后,我会把封装组件和demo奉上。 Rabbitmq的关键术语 1、绑定器(Binding):根据路由规则绑定Queue和Exchange。…...

网站轮播图怎么做/有什么公司要做推广的

ffmpeg拉取RTSP流 正常操作不会有问题 但是如果途中, 把RTSP的流断了, 发现 会卡死 在avformat_find_stream_info函数中, 把这个函数注释掉的话就会卡死在av_read_frame中 ,大概需要30m才会返回 网上搜了下 无论是 设置超时方…...

房山 网站建设/短视频剪辑培训班速成

留存折损—–两个不同节点的留存之间的比值,用于判断留下用户的留存情况,即真实用户的留存。 换一种维度去分析留存,不拘泥于留存的绝对值,将留存统一化,提炼客观的参考标准。 常见的留存疑惑:** 我的游…...