论面向服务架构设计及其应用

在准备架构师考试过程中发现可供参考的论文范围非常少且内容陈旧给学习带来很大烦恼,通过考试后把我准备的论文共享出来水平有限但内容格式迎合考试,希望给大家一个参考。范文以“论面向服务架构设计及其应用”为题书写,希望对大家有所帮助。

【摘要】

2017年5月,我参加了某省质量技术监督局“生产制造一体化监管平台”项目(以下简称一体化平台),担任系统架构师职务,负责整体架构设计与中间件选型。该系统以监管企业生产制造为主线,旨在帮助各级监督部门解决监管企业生产、报审、送检、勘验、巡检和执法等问题。本文以一体化平台为例,论述了面向服务架构主要的技术和标准及每种技术和标准的具体内容,并说明在构建面向服务架构中遇到的问题及具体实施效果。实践证明采用面向服务架构设计,降低了系统的耦合度、使软件具有了更好的开放性和扩展性满足了客户业务要求,使开发工作取得了成功。一体化平台于2018年10月验收上线,目前已稳定运行1年时间,得到了各级监管部门和企业一致认可和好评。

【背景】

质量技术监督在生产领域、市场流通领域等方面都起到至关重要的作用,关乎到企业生产和人民日常生活。某省质量技术监督局在信息化方面起步较早,先后建设了数套专项系统,但缺乏对业务的统一监管,为贯彻落实国家市场监督总局《关于加快推进质量体系监管信息化建设要求》,一体化平台的建设工作受到各级领导的关注。项目建设目标覆盖省、市、县区三级质量监管部门及全省三十多万家企业,为工业生产、报审、送检、勘验、巡检和执法工作提供支持。我所在公司长期从事相关行业的软件开发,对质量监督领域有着丰富经验,因此顺利中标承建了该项目,初期投入15名技术人员和5名测试人员,由我担任架构师职务,负责软件架构设计和中间件选型。

项目启动后通过对业务的梳理,初步将一体化平台划分为四大模块,其中政务服务模块针对的是通过互联网访问系统的企业用户,在功能上主要包括报审、送检、公示和政策法规宣传等功能;而其它三个模块针对的是通过电子政务外网访问系统的监管部门和事业单位用户,其中运行管理模块主要功能包括审批、勘验、颁证、建档;企业监管模块主要功能包括巡检、执法;电子监察模块主要功能包括实时监控、预警纠错和效能评估。

【论点】

在架构设计开始阶段,我意识到选择合适的架构风格对架构设计的重要性。由于客户单位已投入使用的数套业务系统,因建设年代不同、委托开发公司不同,导致这些系统的开发语言、架构设计、执行标准都各不相同,成为了各自为政的信息孤岛。客户为适应新形势下的监管工作急需进行业务整合,要求一体化平台打通从生产到监管的全业务流。而这其中就涉及到与特种设备、单兵监控、检验检疫及档案归档等多套专项系统进行交互。因此在综合考虑了标准化、松耦合、粗粒度服务和可移植性等多方面因素后,我决定使用Java作为开发语言,并采用面向服务的架构设计(Service-Oriented Architecture,SOA),来满足客户对系统的要求。下面说明实现SOA主要的技术和标准及每种技术和标准的具体内容。

【回应论点一】

SOA是一个组件模型,它将应用程序的不同功能单元进行拆分,并通过服务之间定义良好的接口联系起来,它强调服务共享和重用。与 SOA 紧密相关的技术主要有 UDDI、WSDL和SOAP。其中UDDI(统一描述、发现和集成)提供了一种服务发布、查找和定位的方法,是服务的注册规范,主要包含数据模型、API和注册服务三项内容;WSDL(服务描述语言)是对服务进行描述的语言,它有一套基于 XML 的语法定义,包含服务实现定义和服务接口定义;SOAP(简单对象访问协议)定义了服务请求者和服务提供者之间的消息传输规范。SOAP 用 XML 来格式化消息,用HTTP来承载消息。通过SOAP应用程序可以在网络中进行数据交换和远程过程调用。SOAP主要包括封装、编码规则、RPC和绑定四个部分。

SOA主要的实现方式有WebService、ESB和服务注册表,本次在项目中使用的是WebService方式实现SOA。在该方式中包含三个重要角色,分别是服务提供者、服务请求者和服务注册中心,下面说明具体的构建过程及遇到的问题和实施效果。

【回应论点二】

1.服务提供者,主要完成服务的设计、描述、定义和发布工作。通过对客户业务的分析梳理,并综合考虑粗粒度、松耦合、自包含等特点对服务进行了设计。同时为了避免服务间通信量过大、交互频繁,尽量减少了服务的数量。经设计初步提炼出送检、勘验、建档和年审四项主要服务。其中送检服务和勘验服务由原质检系统和单兵监控系统提供,建档服务和年审服务由一体化平台提供。其中建档服务实现提供对来自多个系统的企业信息进行汇总,并按照档案局要求标准进行编目、分类、案卷等标准化操作保存为电子档案以备查阅;年审服务实现验证许可证到期处理,如已到期须从新审定,合格者自通过之日起12个月内有效,对有特殊情况暂不能进行年审的可延续3月有效期,对受到违规处罚的撤销年审资格接受整改。以上服务设计完成后,首先使用WSDL进行服务描述,然后使用UDDI技术将其发布到服务注册中心,公布定位服务的方法。

2.服务注册中心,服务注册中心是连接服务提供者和服务请求者的纽带,服务提供者在此发布服务描述,服务请求者在此查找需要的服务。虽然在某些情况下服务注册中心是可选角色,但注册中心的存在可使服务提供者和服务消费者进一步解耦。本项目为了保证系统中各服务间松耦合和相互独立性,在架构设计中使用了该技术,注册中心内包含已发布的送检、勘验、建档和年审四项服务,其描述信息主要包括服务功能描述、参数描述、接口定义等相关内容。

3.服务请求者,服务的请求者即是服务的消费者,通过服务注册中心可查找、绑定和调用服务。在审批过程中涉及到两处体外循环阶段,分别是专家实地勘验生产环境阶段和送检产品到质检中心检验阶段。一体化平台利用服务注册中心获取对应的服务接口、参数和返回值实现动态绑定。在勘验阶段调取服务并根据返回踏勘报告内容拟定整改意见,通知企业限期整改完成;同样的方式在送检产品阶段调取服务获取产业检验报告,并根据报告参数与国家标准进行对比判断是否符合审批标准。在服务调用期间请求者不需要关心服务提供者的业务处理和技术实现,只需需关注自身业务,简化了开发流程提升了工作效率。

【结尾】

实践证明SOA架构的使用,降低了系统的耦合度,使软件具有了更好的开放性和扩展性,各方面均表现优异。但在开发过程中也遇到过问题,由于SOAP是基于XML方式通信效率较低,在企业每年11月集中年审时,服务间猛增的消息交互造成了大量积压,导致企业报审不能得到及时处理。我组织了客户和参与厂商进行了专项讨论,最终根据我提出的压缩消息体和增加硬件负载的方式及时解决了该问题,没有对项目造成实质影响。

通过项目组全体成员的共同努力,一体化平台于2018年10月完成验收工作正式上线,截至目前系统运行稳定运维工作量可控,得到了用户的一致认可和好评。通过这个项目本人更进一步了解到系统架构设计的重要性,同时积累了很多宝贵的经验。在今后的工作中我将不断总结和提升专业技术能力,争取为我国信息化事业贡献一份力量。

热门文章

暂无图片
编程学习 ·

SpringBoot解决跨域

第一种:书写解决跨域的类public class AccessControlAllowOriginFilter implements Filter {@Overridepublic void init(FilterConfig filterConfig) throws ServletException {}@Overridepublic void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) …
暂无图片
编程学习 ·

php编写的旅游网站

使用PHP编写一个简单的旅游网站! wampserver集成环境编写php+mysql使用最新的Bootstrap(v4.5.0)框架详细的前端功能详细的用户后台管理具体又详细的文件上传函数文件提取链接:https://pan.baidu.com/s/1EeS4o4FnoSWLQ8f_oFg0CQ 提取码:idqm
暂无图片
编程学习 ·

MySQL不完全干货教程(持续更新中)

已经有很多教程面面俱到、事无巨细,但实际上能用到的、消化的内容很少。本文聚焦于常见的使用场景,给出MySQL用法和基本原理说明。为便于实践和消化,同时提供了很多案例和脚本。 为了读者进一步深入学习、掌握自我升级的方法,提供了一些权威文档的参考。希望能帮助MySQL初中…
暂无图片
编程学习 ·

设计模式

设计模式 >**设计模式简介** 设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。…
暂无图片
编程学习 ·

C++排雷:16. #pragma warning的几种用法

#pragma warning只对当前文件有效(对于.h,对包含它的cpp也是有效的),而不是对整个工程的所有文件有效。当该文件编译结束,设置也就失去作用。 #pragma warning(push)是保存当前的编译器警告状态;#pragma warning(push, n) 存储当前报警设置,并设置报警级别为n。n为从1到…
暂无图片
编程学习 ·

leetcode:208. 实现 Trie (前缀树)

链接:https://leetcode-cn.com/problems/implement-trie-prefix-tree/ 实现一个前缀树(节点),一个前缀树节点需要保存它可能的26个孩子的信息,以及这个节点是不是一个单词的结尾。 C++代码: class Trie {Trie * children[26];bool isWord = false; public:/** Initialize…
暂无图片
编程学习 ·

线程

1.线程 1.什么叫做线程,跟进程之间的关系 进程:独立的cup空间运行 线程:进程中的一个执行流程,一个进程中可以包含多个线程,这些线程共享该进程提供的资源 2.创建线程(两种方式) 让这类继承Thread类 class XXX extends Thread{ public void run() Thread xx = new Threa…
暂无图片
编程学习 ·

系统整理springCloud (一),搭建父项目,管理jar包

一,应用springCloud 有一段时间了,Boot由1到2,springCloud 也到了H版本,alibaba 也已孵化维护自己版本,在这里对springCloud做一个系统的整理,版本为boot2版本。首先建立父工程cloud-parent加入jar包<!-- 统一管理jar包版本 --> <properties><project.bui…
暂无图片
编程学习 ·

Andoid服务(Service)

Android服务(Service) 服务是一个后台运行的组件,执行长时间运行且不需要用户交互的任务。应用被销毁时也依然可以工作服务的两种状态:started:通过startServer()启动的服务,一旦启动,服务可以在后台一直运行 bound:通过bindServer()绑定的服务,Bound状态的服务,提供…
暂无图片
编程学习 ·

云管理服务AWS Organizations正式在AWS中国区域上线

近期, AWS中国(宁夏)区域(由西云数据运营)和AWS中国(北京)区域(由光环新网运营)正式上线了云管理服务AWS Organizations。作为一种管理服务,AWS Organizations可集中控制和管理多个AWS账户,无论是初创公司还是大型企业均可以使用,而不需要额外付费。随着企业或机构…
暂无图片
编程学习 ·

Mysql数据库索引

Mysql数据库索引 遇见问题: 向数据库中插入数据时,报java.sql.SQLIntegrityConstraintViolationException: Duplicate entry ‘16666661111’ for key ‘index_user_name’原因: 要插入的数据中username列是唯一索引,不允许有重复数据值 解决方案 将唯一索引变为普通索引 m…
暂无图片
编程学习 ·

Java继承多态面试题

1.多态的实现原理2.面向对象的特征之一——多态2.1多态的定义多态是同一个行为具有不同的表现形式或形态的能力。允许不同类的对象对同一消息做出响应,同一消息可以根据发送的对象不同采用不同的行为方式。对于面向对象,多态分为编译时多态和运行时多态,编译时多态是静态的,…
暂无图片
编程学习 ·

04 | 如何处理消费过程中的重复消息?

1.应用场景见: https://blog.csdn.net/william_n/article/details/1040254082.学习/操作2.1 阅读文档你好,我是李玥。上节课我们讲了如何确保消息不会丢失,课后我给你留了一个思考题,如果消息重复了怎么办?这节课,我们就来聊一聊如何处理重复消息的问题。在消息传递过程中…
暂无图片
编程学习 ·

手动连接线上presto

命令如下: java -jar presto-cli-0.237-executable.jar --server https://presto.ludp.lenovo.com:30070 --catalog hive --truststore-path /opt/jdk1.8.0_25/jre/lib/security/keystore.jks --truststore-password changeit在之前可以先测试一下网络 ping presto.ludp.lenov…
暂无图片
编程学习 ·

git学习日志-标签

git也可以像svn一样打标签,以此来标记发布节点,以示重要性。 对标签的操作,一般包括: 1. 列出标签 2. 创建标签 3. 删除标签 4. 检出标签 一、列出标签 执行git tag命令,就可以看到当前仓库中已经打过的标签。注意: 这个命令会以字母顺序列出标签。 也可以加上-l或--list…
暂无图片
编程学习 ·

python隐秘的角落——笛卡尔之心

随着网剧《隐秘的角落》的热播,让法国数学家、哲学家笛卡尔重回大众视野,他的心形线也在剧情中抢尽风头。 在隐秘的角落剧中,少年宫奥数老师张东升,在课上给同学们讲了这么一个故事: 数学家笛卡尔流落到瑞典,邂逅了美丽的公主克里斯蒂娜。国王知道了这件事后,强行拆散了…
暂无图片
编程学习 ·

近三位数增长,苏宁银行金融科技之花结出普惠金融之果

文|曾响铃来源|科技向令说(xiangling0815)美联储无限QE,2020年中国不设GDP目标,2万亿直达基层扶危纾困……国内疫情已经基本控制,经济基本面迎来全面复苏阶段,作为市场中最活跃的存在之一,小微企业在复苏过程中,面临的融资难等问题也被热议。在中国有一群喊着帮助小微企…
暂无图片
编程学习 ·

spring IOC容器 Bean 管理——基于注解方式

IOC 操作 Bean 管理(基于注解方式) ​ 1、什么是注解 ​ (1)注解是代码特殊标记,格式:@注解名称(属性名称=属性值, 属性名称=属性值…) ​ (2)使用注解,注解作用在类上面,方法上面,属性上面 ​ (3)使用注解目的:简化 xml 配置 ​ 2、Spring 针对 Bean 管理中创建对…