软考高级系统架构设计师(八) 基于中间件的开发实际项目

news2024/11/17 5:23:53

目录

中间件的用途

中间件技术 

中间件的特点

中间件的十大优越性 

企业应用集成

轻量级架构

Struts框架

spring

Hibernate

实际项目举例

产品逻辑大图

gRPC的接口规范

关键中间件交互

整体架构设计

大数据素材底层处理

业务交互大图

底层数据素材加工大图


中间件的用途

中间件技术 

属于可复用软件的范畴

中间件的特点

中间件的十大优越性 

企业应用集成

 

轻量级架构

Struts框架

工作流程:

spring

企业级应用程序一站式解决方案

Hibernate

让开发摆脱麻烦的JDBC代码, 将精力更多集中在编写数据表示和 业务逻辑上

 用struts, spring,hibernate构造轻量级WEB框架:

实际项目举例

产品逻辑大图

核心功能服务: 由于涉及的功能模块众多,150+http(s)接口给页面提供数据

中间件技术: 整体平台依赖的中间件技术众多, 分别包括:

  • kafka消息。 使用kafka消息实现与第三方系统的异步交互,包括通过kafka消息,将财务结算数据同步给财务系统,将广告数据同步给第三方基础平台系统等等;
  • hive数据。 大数据处理业务中,存在多种大数据处理场景,如 从第三方hive表中拿数据,然后进行加工,清洗,处理等,或者将从MySQL,缓存,hive,第三方接口等多处数据源拿来的数据经过统一处理,然后写入hive表中供后续业务逻辑使用。 hive表数据处理通常采用离线数据处理方式, 如 定时任务 方式处理, 每小时、每2小时、或者每天处理一次; 处理的数据量级也多种多样,如 几十上百条的小批量多频次处理, 或者百万千万级别的每天增量数据处理等等。hive适合用来做批量数据统计分析。
  • 定时任务。 定时任务顾名思义,是按不同的频率来定时运行,通常用来离线加工数据。 业务系统中涉及100+个定时任务, 分别来处理不同数据源,不同量级,不同业务场景下的数据。
  • HDFS文件。用于大规模数据的分布式读写,特别是读多写少的场景。
    存储非常大的文件并且对延时没有要求 。HDFS文件在业务系统中,用于大批量写入数据,供第三方系统(如下游业务系统引擎等)读取。 业务场景中, 首先会从第三方拿到大批量广告素材数据, 然后本系统进行过滤、填充、筛选后, 然后调用第三方接口进行素材数据审核。 将符合业务要求的审核广告素材数据, 通过定时任务一次性写入HDFS文件中,写入的字段包括 素材ID、流量包ID、审核状态等信息。 
  •  ClickHouse. 以下简称CH表,列式存储数据库,一款面向 OLAP 的数据库,ClickHouse支持类SQL语言,提供了传统关系型数据的便利。实际使用中,CH表的上游表是hive表,通过配置公司统一提供的IDP任务,即可按业务需求将hive表中的数据,自动同步到CH表中。CH表中的数据成为下游报表引擎的数据源。
  • 数据库。业务中采用了主从的MySQL数据库,中间件采用mybatis。 由于业务上涉及多张表的增删改查,以及对于某张表可能会新增列字段等等操作,业务代码中采用了统一封装,既防止了SQL注入风险,又方便程序的扩展。
  • 缓存Redis。业务中采用缓存Redis集群来存储给下游业务的核心业务数据。 在业务实现中,首先通过定时任务,将MySQL数据库中的业务数据,如应用数据,广告位数据,内容位数据,屏蔽规则数据,媒体数据等,写入Redis缓存。 由于业务数据量百万级别,且业务数据存在实时变动的可能,整体同步一次数据,定时任务需要执行40多分钟,存在影响后续逻辑的风险。 为了加快缓存的同步,业务上进行了一次整体缓存同步的优化,将定时任务执行时间从40多分钟,减少到20分钟以内。 具体的做法包括: 采用异步多线程,并行处理应用数据,广告位数据,内容位数据,屏蔽规则数据,媒体数据等; redis的写入方式改成Pipeline管道写入方式。 
  • 报表引擎。报表引擎是公司架构组提供的一组底层服务,作为业务方可直接接入调用即可。 报表引擎对应的接口,调用传参数主要包括需要数据的维度、时间端、升序、倒序排序等等。 
  • grpc。rpc 远程过程调用, 不需要了解底层网络技术的协议,简单的理解是一个节点请求另一个节点提供的服务。RPC 只是一套协议,基于这套协议规范来实现的框架都可以称为 RPC 框架,比较典型的有 Dubbo、Thrift 和 gRPC。 GRPC是一种现代化开源的高性能RPC框架。

gRPC的接口规范

a. 当我们要创建gRPC服务时,通常第一步是在.proto文件中定义接口。使用这个.proto文件可以用protoc编译器生成客户端和服务端代码。服务端和客户端共享.proto文件。 客户端代码的生成,无需编写客户端代码,可以在具有许多服务的应用程序中节省大量大量开发时间。

b. 在.proto文件中清晰的描述了接口的入参以及出参,并且基于这个文件生成各中语言都能进行通信的接口,从而实现不同语言之间的通信。

c. 通过protoc生成的代码会确保客户端或者服务端发送的数据合乎规范,在各个平台和实现之间是一致的。

gRPC的优点 包括: 高效的二进制编码机制、清晰的接口规范、对流的支持。

实际业务场景中,分为两个方面的grpc使用:

1、 作为服务端,创建grpc服务,通过proto文件定义接口,入参,出参,并实现grpc接口的逻辑。 同时将接口即proto文件提供给第三方调用。

2、作为客户端,通过proto文件,生成客户端代码,去调用第三方业务提供的grpc接口来获取数据。

本人负责的业务系统中,存在若干grpc接口,提供不同场景、不同维度的数据,同时也会作为客户端,去调用第三方提供的grpc接口来获取数据。 

  • kconf. 公司内部提供出来的配置平台。 在上面可以进行各种k/v配置,然后在程序代码用引用kconf包,并且可以增删改查kconf中的配置。 支持的数据格式多种多样,如 boolean, int, float/double, hashmap/hashset,List链表,自定义对象等等。 在实际的业务开发中,通常有几种主要用途: 

1、作为开关。 比如,配置值为TRUE时, 新增的逻辑生效;配置值为FALSE时,跳过新逻辑;

2、逐渐放量开关。 比如,配置值为20%,则20%流量/用户会看到新业务功能; 配置值为50%,则会有50%流量/用户会看到新业务功能; 观察一段时间,新功能正常, 会逐渐增大值,直到100%,这样新业务功能就完成了全部生效,系统发布全部完成了。

3、作为配置型常量数据。 比如, 业务中会用到一些相对固定不变的业务数据, 这些业务数据又想实现方便的改动(不需要改动代码、进行发布上线等一系列复杂操作),以及改动后可以实时生效, 就会将这些业务常量数据 配置到kconf中,然后在业务代码中做使用。

存储层: 涉及的存储中间件较多,有 MySQL,hive表,缓存,图片/视频存储等等; 涉及的表众多, MySQL数据库的表有100+,涉及的hive表有50+; 且需要多数据源同时处理。

整体MySQL数据库采用主从结构,核心逻辑、实时性要求高的逻辑会直接对主库操作。 

hive表则是作为大数据存储来使用,并结合离线任务来做大数据的加工处理后,作为底层存储。  公司级别也会提供hive对应的公共平台、接口, 可以方便实现同其他数据源的迁移, 比如 hive表数据导入MySQL表,MySQL表数据导入hive表,hive表数据导入ClickHouse表等等。 由于不同的业务线都会有类似的操作需求, 所以架构组会将这类操作统一封装后,提供统一的公共平台, 有需要的业务线只需要在上面配置离线数据任务IDP即可。 

关键中间件交互

整体架构设计

大数据素材底层处理

重点与难点:

  • 素材过滤。  上游第三方业务系统的素材数量量级非常大(百万千万/天), 素材是全量的素材, 需要根据业务需求, 对全量素材进行多个条件过滤筛选, 筛选出符合业务需求的素材。 筛选的条件有多种,且随着业务发展,可能存在变动。 故而业务过滤 一方面需要满足业务需求, 另一方面也需要针对多种素材进行适配,方便后续扩展。  整个素材过滤逻辑处理,为了避免写多个if/else语句造成业务逻辑过于耦合,实现时采用了策略模式。 实际过滤条件众多, 这里为了便于说明讨论,简化为过滤条件A,B,C,D4个条件。 

策略设计模式的特点:

1、提供一个策略接口

2、提供多个策略接口的实现类

3、提供一个策略上下文

策略设计模式优点:

1、可以自由切换算法(具体实现)

2、避免了多条件的判断(干掉了if else)

3、扩展性好可以定义新的算法提供给使用者(增加新功能时只需要增加代码而不需要修改代码)

于是4个过滤条件,可以实现为4个策略接口的实现类。  后面需求变更,比如新增了2个过滤条件, 那么只需要新增2个策略接口的实现类即可,既不影响原有的实现,避免改坏之前的业务逻辑, 有方便新增了新的业务逻辑。 

  • 素材加工。  从第三方拿到原始素材,往往都缺少业务需要的信息,比如,图片素材,需要对图片的大小,长宽等进一步裁剪,需要进一步补充title,标题,图片描述等等信息。 故而素材加工逻辑中,首先会调用第三方裁剪接口,进一步修剪图片; 然后调用引擎侧接口拿到title,标题,图片描述等等信息,填充原始素材信息。 填充完毕后, 将加工后的素材批量写入MySQL素材库,供后续逻辑使用。 

由于从第三方拿到的素材种类比较多,除了图片,视频外,还需要覆盖各个业务场景,以及不同业务场景下的素材,需要进一步填充的信息也不同。 故而素材加工逻辑中需要重点考虑对各种各样素材的正确处理。

  • 素材审核。 素材审核,顾名思义,是将加工后的素材 给媒体审核,只有审核通过的素材才能最终在终端展示。 业务场景中,素材审核分为两种,一种是页面上审核,一种是将素材送去第三方审核。 

页面上审核场景下,加工后的素材存储在MySQL素材库中。 审核逻辑会拿到待审核的素材,展示在页面上,供媒体人员审核。 素材审核通过、审核拒绝后,都会实时将审核结果更新到MySQL素材库中。

另一种素材审核方式,将素材送去第三方审核,即通过调用第三方提供的接口方式,将待审核的素材送去第三方。 然后会实现一个定时任务,离线调用第三方的审核状态接口,来获取最终的素材审核状态。 同样, 素材审核通过、审核拒绝后,都会实时将审核结果更新到MySQL素材库中。

  • 素材写入hdfs。 由于素材数据量级巨大,且需要全部同步给第三方引擎侧使用, 这里采用定时任务,实现离线写入。 即定时任务每隔一段时间执行一次,将全量审核通过的素材写入hdfs文件中,写入的核心字段包括素材ID,审核状态,素材所属流量包等等。 

业务交互大图

底层数据素材加工大图

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

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

相关文章

这些年你走了多少弯路?接口性能测试你真的懂了?进阶测试...

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 性能测试关注 响…

java + opencv对比图片不同

1,去官网下载opencv,下载的时候需要注册一个 Oracle 账户,分分钟就能注册。然后安装。我下的是4.7的。 2,找到jar包放进项目里 3,项目结构,比较简单 4,把下载的文件放进C盘 5,主类代…

未来独角兽!安全狗入选2023年福建省数字经济核心产业领域创新企业名单

近日,福建省数字福建建设领导小组办公室公布了入选2023年全省数字经济核心产业领域创新企业名单。 作为国内云原生安全领导厂商,安全狗凭借综合安全能力入选名单,荣膺“未来独角兽”称号。 厦门服云信息科技有限公司(品牌名&#…

7DGroup性能实施项目日记4

经过了一个十一假期,我们的日记虽然没有更新,但我们的项目并没有停止。 虽然这个项目是一个依托性能培训的项目,但对我来说,这和真实的项目并无二致。我们花了几万(根据一期的培训,估计在3万-4万左右&…

高速电路设计系列分享-基本概念

目录 概要 整体架构流程 技术名词解释 1.带宽的理解 2.了解转换器的精度 技术细节 小结 概要 提示:这里可以添加技术概要 本文主要熟悉一些基本概念。随笔,加一些网上用语,只做学习之用,不用深入分析。 整体架构流程 提…

最佳的SCADA软件推荐

前言 发现优化工业运营效率并最大化投资回报率的最佳“监控和数据采集 (SCADA)、工业物联网 (IIoT)、人工智能 (AI) 等”数字化转型技术,使商业组织能够提高运营效率并促进公用事业管理。当配备…

浏览器插件开发(一)入门之自制屏蔽某度广告的插件

一:浏览器扩展介绍: 浏览器扩展是一个小软件定义模块的网页浏览器,通常称为浏览器插件,大部分浏览器允许安装拓展,其作用有用户界面修改,广告拦截和Cookie管理等 包含基本平台信息的应用程序清单JSON文件 …

第十章 总结【编译原理】

第十章 总结【编译原理】 前言推荐第十章 总结10.1 概述10.2 局部优化10.2.1基本块及流图10.2.2基本块的DAG表示及其应用 10.3 循环优化*10.4数据流分析 最后 前言 2023-6-26 18:54:31 以下内容源自《【编译原理】》 仅供学习交流使用 推荐 第九章 总结及作业(4…

态路小课堂丨三种实现光模块更高传输速率的技术你知道吗?

TARLUZ态路 随着云计算、大数据的快速兴起,数据中心以及电信运营商对光模块的传输速率要求越来越高。从1998年发展至今,光模块一直朝着更高的速率、更小的封装不断升级。光模块一般采用增加波长数、增加信号传输通道数量和提高单通道速率技术方案实现光模…

公众号内添加投票链接制作投票的软件网络投票器

手机互联网给所有人都带来不同程度的便利,而微信已经成为国民的系统级别的应用。 现在很多人都会在微信群或朋友圈里转发投票,对于运营及推广来说找一个合适的投票小程序能够提高工作效率,提高活动的影响力。 那么微信做投票的小程序哪个比较…

.vm文件发邮件时js未生效,无法控制显示隐藏

需求起因 最近在做一个发邮件的功能,是后端发邮件,不过邮件内容是由前端来写。 邮件内容包括姓名、手机号、邮箱,这三个参数都是不一定有的,如果没有某个参数时,那一行内容就不显示。 写法没错,但就是js…

npm详解

1.npm支持多个源(没列全,有兴趣的可以自己去了解一下其他源) (1)官方源:https://registry.npmjs.org (2)淘宝源:https://registry.npm.taobao.org (3&#x…

《Java核心卷1》慢慢啃!读第3,4章 | 第12版

提醒:全文约6000字,是一份比较单纯的学习笔记,知识点基本采用条目的形式列出,起到查漏补缺和备忘录的作用,而对内容之间的逻辑结构并未进行仔细梳理。本文内容包括: Java的基本程序设计结构面向对象程序设计…

jmeter压力测试实战分析详解,一定要看完哦

目录 1.从压力测试说起 2.压力测试到底要关注什么 3.你想要的到底是个什么东西 4.面试总问的jvm调优到底是要干什么 5.常用的压力测试工具及命令 6.性能诊断到底难在哪里? 7.到底是加机器还是优化服务? 总结: 1.从压力测试说起 压力测…

59 KVM Skylark虚拟机混部-概述、架构及特性

文章目录 59 KVM Skylark虚拟机混部-概述、架构及特性59.1 Skylark概述59.1.1 问题背景59.1.2 总体介绍 59.2 架构及特性59.2.1 总体实现框架59.2.2 功耗干扰控制59.2.3 LLC/MB干扰控制59.2.4 CPU干扰控制 59 KVM Skylark虚拟机混部-概述、架构及特性 59.1 Skylark概述 59.1.…

Android SPI

1.SPI SPI全称Service Provider Interface,服务提供方接口,是Java提供的一套用来被第三方实现或者扩展的API,它可以用来启用框架扩展和替换组件。服务通常指一个接口或者一个抽象类,服务提供方是对这个接口或者抽象类的具体实现&…

kafka常见问题

1.为什么要用mq(mq的作用)? 2.引入mq会多哪些问题? 3. 如何解决这些问题? 1.1实现异步发送 有些复杂的业务系统,一次用户请求可能会同步调用N个系统的接口,需要等待所有的接口都返回了&#…

虹科分享 | 高考大数据可视化志愿填报分析-基于虹科Domo BI工具

高考是中国教育系统中一项极为重要的考试,它不仅是学生完成高中学业的重要标志,也是进入大学的门槛。每年高考都会吸引数百万学生参加,同时也吸引了各地高校和招生部门的关注。高考招生数据是教育研究和政策制定的重要依据,通过对…

技术管理第二板斧建团队-知人善用

1、什么是知人善用 知人善用就是指技术 Leader 怎么用对人?用好人?核心在于怎么给事情安排对的人?怎么给人安排合适的事情?其中,“人”与“事”相辅相成,如果把事情安排给对的人,不光会取得好结…

干货丨如何实现WinApp的UI自动化测试?自动化工具如何选择人?

WinApp(WindowsAPP)是运行在Windows操作系统上的应用程序,通常会提供一个可视的界面,用于和用户交互。例如运行在Windows系统上的Microsoft Office、PyCharm、Visual Studio Code、Chrome,都属于WinApp。常见的WinApp&…