首页 > 其他分享 >架构设计

架构设计

时间:2023-02-20 12:33:05浏览次数:43  
标签:架构设计 模块 扫描 支持 编排 https MySQL

架构设计:

 

 

 

 

 

 

 

 

 

第二版:

 

实现了第一版收集的需求。

解决了之前agg单点,不能横向扩展,不能并发执行,没有高可用的问题

解决了文件打包,文件编排,扫描一致性问题

              i)   编排。类似spark 的driver,executer,有向无环图。参考:https://spark.apache.org/

              ii)服务注册与发现。参考:https://blog.csdn.net/CSDN2497242041/article/details/117999871

              iii)单机进程组协调管理。

              解决了目标和需求里的哪些点。参考:

              1,文件对单台机器只下载一次(不会下载多次)
              2,支持扫描编排
              3,支持文件打包
              4,可以横向扩展扩容,MySQL,mongo,http微服务均可以横向扩展扩容
              5,良好的扩展性,支持动态增减扫描引擎。服务注册与发现机制,及声明式编排部署,支持动态增减扫描引擎
              6,高可用性。服务注册发现,MySQL,mongo,http 都是高可用的

 

          目标

               支持200w的扫描能力,能够扫完每天s新增的,并能够支持Q2商业用户的量( MySQL,mongo,http微服务均可以横向扩展扩容)

               支持WEB用户扫描(数据库字段,或额外表,甚至格外机器)

               支持基础的回扫策略(含义是重投front吗)

               支持中等规模业务量,可以保证技术故障情况下的可用性,故障发生时可以通过手动切换到备用资源,故障发生时保证数据不丢失(自动切换,数据不丢失)

 

                1. 保证web用户扫描进度有较好的体验;(支持优先级,扫描细粒度编排。可根据表中数据与扫描平均速度做进度条)
                2. 保证商业用户API调用,每个文件平均的最短返回时间;(可水平扩容,降低数据量,从而优化到需求时间)

                3. 灵活扩容,运维友好(灵活扩容)
                4. 保证最少的US3下载次数(一个机器只下载一次)

                 5. 扫描流程变更时可以快速调整,而不是大规模改代码和部署变更 (支持扫描编排)

需求

    • 良好的扩展性,支持动态增减扫描引擎;支持每天200w/day的扫描量,并支持扩展到300w/day以上的能力(支持)
    • 高可用,设计时应当考虑扫描服务的可用性;(支持)
    • 支持限流、熔断(在front端?)
    • 多租户支持?账户系统
    • 扫描时支持优先级(支持)
    • 支持微服务编排,支持灵活的扫描策略;支持编排能力,允许持续改进扫描流程(支持)
    • 运维友好,监控关键指标并告警;整个系统业务运行具被可观测性(支持)
    • [WWW]支持WEB调用,能够高优先级扫描;扫描进度支持,(支持,进度可读MySQL计算)
    • 支持扫描完成后主动通知用户 notify(支持)
    • 降低单个文件扫描下载次数,尽量做到最多两次下载(linux、windows各一次)(支持)
    • 文件类型识别,web 脚本走webshell检测(支持,已经支持定向投递和编排)
    • 支持沙箱静态检测能力(Q3?)(支持)
    • 富文本检测 (支持)
    • 调度策略可用性,保证at least once (支持,write ahead log)
    • 自动化可控样本分发服务SDS上线
    • 支持大文件扫描,支持FTP接入
    • 多引擎虚拟化?
    • 任务系统对S提供接口,集成S的多引擎

 

三,FAQ

       1,重试队列是啥?怎么实现的? 

             重试队列,用MySQL表 write ahead log

             后台协程做checkpoint

             成功的扫描。

              master往下走

              写表成功(1,2,3,4)所谓重做,就是重新投递路由模块

              下边操作失败(返回)

               操作

               操作

 

          2,web用户,或其他用户,被卡,或者失败补偿时如何处理。保证高体验性?

                设置超时时间,超时后自动失败,调高优先级重新投递路由模块开启新的扫描

                

 

           3,整体扫描时间是多少?

              扫描最短时间取决于最慢的扫描引擎

 

           4,win1,lin1,lin2

                 lin1和lin2还没有返回值,正在扫

                 win1断开,失联,获取不到信息状态

                 路由模块怎么处理这种情况?

 

                 1,win1断开,路由模块一定知道失败了。控制模块知道失败了,同步情况下,lin1和lin2返回成功也忽略了。

                 2,win1断开,路由模块一定知道失败了。控制模块知道失败了,异步情况下,lin1和lin2已经入库,checkpoint重做表时,发现lin1和lin2已经扫了,就只重扫win1

 

评审答疑:

agg使用MySQL如何解决扩展和并发及高可用的?

MySQL的表,支持两个时间复杂度是O(1)的操作,分别是select max(id) from table. select min(id) from table。这样任意一个表,相当于是取到了表头和表尾的下标,头尾指针向中间扫。所以一种扫描策略也可以并发

然后有了首尾下标后,min(id) = 1,比如取前10条加写锁处理。这时候第二个进程再取1到10加写锁,我记得是会返回失败。然后第二个进程就可以从10+1=11,取到20了。 因为加锁失败的速度很快,第一个进程文件没扫描完,第二个进程已经开始进入11到20的处理了

 

 

 

 

如图测试环境复现:

前两条会快速失败,只有第三条才成功,因为第三条的id已经大于4了。第一条语句只把id为1和4的两条数据加了行锁。这样就可以集群交替并发,而且保障事务等。

           

 

四,记录输出:

        一,哪里可以做

               1,MySQL可以做vstask打包,但需要提供golang用哪一个mysql客户端?

                     gorm就可以,gorm是支持事务的,参考https://www.kancloud.cn/sliver_horn/gorm/1861176

               2,DAG可以用,怎么实现?

                     第一版,可根据扫描策略,每个扫描策略实现自己的dag流程。

         二,哪里需要改进

               1, 如果同步,http长连接时间的问题,这里怎么解决?如果异步怎么做编排?

                      可以使用类netty的网络通信模型,路由模块和扫描中控模块分别设置两个收发消息的结构,inbox和outbox,使用异步的AIO通信模型。

                      参考:https://blog.csdn.net/Android_xue/article/details/102919623

                                 https://blog.csdn.net/u011564172/article/details/60143168

                                  https://blog.csdn.net/u010374412/article/details/103478654

                                https://github.com/ColZer/DigAndBuried/blob/master/spark/spark-network-netty.md

                                 https://masterwangzx.com/2020/07/23/RpcMessage/

                                 

                       

 

         三,还需要cover哪些需求与场景

               1,引擎对文件是能并行扫的吗?还是会锁文件,导致串行扫描。哪些引擎会?

                     5-16请教,有可能有冲突

               2,多个引擎同时并发扫大量文件,最多能支持多少个文件的同时扫描。(比如多少进程。)

        四,需要补充

                这个架构,扫200w,需要多少资源,机器,cpu 内存

 

                之前架构资源需求量,及实现业务量: 实现了每天20w-30w的扫描能力,使用了

                linux:

                 1个   2c2g

                  2个 4c8g

                   4个 16c16g

                   8个 4c4g

                   12个 2c4g

                  共10+64+32+24=130核cpu

                       2+16+64+32+48=162g内存

                  windows:

                 4个  16c16g

                 4个   8c8g

                 16个  4c4g

                  共 64+32+64=160核cpu

                       64+32+64=160g内存

 

                   共,290核cpu,322g内存

 

 

 

第一版后,收集到的新需求:


1. 保证web用户扫描进度有较好的体验;
2. 保证商业用户API调用,每个文件平均的最短返回时间;
3. 灵活扩容 
4. 保证最少的US3下载次数 
商业API调用,扫描要达到分钟及响应
1:优先级扫描 
二次扫优先级 
文件类型check 
,在分发之前 
架构更细化到流程图 
每个case覆盖到 
扫描流程变更时可以快速调整,而不是大规模改代码和部署变更 
 商业用户分钟级别,api级别的响应时间


windows容器化研究


wine   windows虚拟机


扫描流程逻辑覆盖

 

标签:架构设计,模块,扫描,支持,编排,https,MySQL
From: https://www.cnblogs.com/mmgithub123/p/17136927.html

相关文章

  • 【系统架构设计师】计算机组成与体系结构 ② ( 冯诺依曼结构 | 哈佛结构 | 常见的芯片
    文章目录​​一、冯诺依曼结构​​​​二、哈佛结构​​​​三、常见的芯片​​一、冯诺依曼结构冯诺依曼结构:指令存储器与数据存储器应用场景:PC机,使用i3,i......
  • 【系统架构设计师】计算机组成与体系结构 ① ( 计算机组成 | CPU | 存储器 | 总线 | I
    文章目录​​一、计算机组成与体系结构​​​​二、计算机组成结构​​​​三、CPU组成​​​​1、运算器​​​​2、控制器​​一、计算机组成与体系结构计算机组成与体......
  • 技术面试 - 评估系统架构设计能力
    技术面试-评估系统架构设计能力2023-02-17号一.在技术面试之中,需要避免常见的坑面试官排斥候选人提出的不一样的思路如果对方在技术思路上,和面试官已知的思路不一......
  • 5分钟了解系统架构设计(7)
    最近梳理了之前学习的架构设计相关的一些课程学习总结,将其整理成了一个大纲脑图,以每篇5分钟系列展现出来,希望对你有所帮助。高可用,是近年来IT应用系统的常见需求。本篇,我......
  • 计数系统架构设计(转)
    本文主要节选和总结自沈剑大佬的计数系统架构实践一次搞定|架构师之路和文章的评论,略有删改一、问题描述很多业务都有“计数”需求,以微博为例:微博首页的个人中心部分......
  • Kubernetes架构设计Concepts之理解Kubernetes API之理解Kubernetes对象
     首先我说下为什么去翻译这些文章,当然也有一些不少文章是翻译的,但是没有对照,或者是全中文的,这个时候你就不好判断理解,特别是比如:从代码角度和运维角度,代码角度呢,我们看到......
  • 5分钟了解系统架构设计(6)
    最近梳理了之前学习的架构设计相关的一些课程学习总结,将其整理成了一个大纲脑图,以每篇5分钟系列展现出来,希望对你有所帮助。秒杀抢购,是近年来电商系统的常见考点,本篇,我们......
  • 关于架构设计
    业务架构原则从在软件开发的角度来看,在项目前期做好业务架构设计,对整个项目的开发都有重要的意义。由于业务和公司战略息息相关,其业务架构设计不是研发架构师能决定,当公司......
  • 5分钟了解系统架构设计(5)
    最近梳理了之前学习的架构设计相关的一些课程学习总结,将其整理成了一个大纲脑图,以每篇5分钟系列展现出来,希望对你有所帮助。如何设计一个高性能的系统架构,这是面试中一般......
  • 关于技术能力的思考和总结-架构设计(二)
    目录技术架构思考方法0--->11--->01--->21--->N-1<--->1M*N--->M+N总结这篇文章我其实更想跟大家聊聊一些常用的思考方法,思考问题的方式对了,往往可以帮助大家少走弯路。......