查看: 3600|回复: 9
收起左侧

[技术原创] 系统级插件基础平台架构设计实现分享

[复制链接]
百度杀毒国内版
发表于 2015-5-19 14:23:13 | 显示全部楼层 |阅读模式
本帖最后由 百度杀毒国内版 于 2015-5-19 14:23 编辑

为了响应上层具体业务的快速发展变化,同时提供针对第三方的动态扩展需求,对于相对复杂的系统设计,我们一般会采取插件的机制来保证具体子业务的独立性和可扩展性。

如果此时只是一个独立进程级别的应用,架构会相对简单一些,但是一旦底层基础框架本身也是个多进程组成的服务体系,具体插件又存在多进程间的业务耦合,这时候插件机制的需求就会立刻复杂起来,如何清晰的保证整个系统作用域内的业务插件的全局任务调度,任务状态同步,业务插件本身动态部署的独立性等等会是一个比较复杂的问题,下面介绍一下我们在开发杀毒应用过程中底层使用的一套方案,希望可以和大家一起讨论精进。

首先说明一下目前杀毒产品本身的基本结构。

杀毒应用的总体结构是采用多进程配合方式,主要包括服务,托盘,客户端三部分,之所以这样划分也是从各自的业务特性来考虑的;

服务:提权、样本上传、加载查杀引擎,文件监控,主动防御等核心功能模块;

托盘:后台心跳、版本升级、单文件更新,用户风险气泡提示等;

主界面:主UI,查杀具体操作,配置更改,隐私保护日志查询等;

每个独立业务进程的底层核心就是插件管理器,所有核心功能模块都是按照插件规范动态加载的;

插件管理器在设计上主要经历了两个主要版本

V1主要是为了满足以下需求出现的:

•        为上层业务提供统一组件工作机制(各业务容器插件统一实现标准)
•        支持业务插件手动,同步,异步延迟加载;
•        支持业务插件的独立云控;
•        支持业务容器内各业务插件共享基础服务;
•        支持UI类子业务插件;
•        支持各业务插件可执行环境控制;
•        支持容器级业务插件单键控制;
V2随着后续业务的不断扩展,又增加了新的需求:
•        增加子业务组件动态部署机制(精简初始包,个性化子工具增加用户黏性);
•        支持业务插件下载,安装,更新,修复功能;
•        支持业务插件部署手动,静默,强制方式更新;
•        保证全局任务执行序列化执行和信息同步;
•        支持单一任务的多observer定制;
•        支持业务容器间共享全局服务;
•        支持第三方业务插件接入;

根据以上的产品需求,目前的插件管理器基本结构如下图:


由上图可见,整体结构主要包含如下几点:

1.        对于每个独立进程,上层业务主要包括业务容器和业务插件两大类,业务插件通过IPluginContext查询获取容器内基础服务;
2.        具体业务插件的加载动态配置生效,可实时云控,支持手动,同步,异步延迟加载等不同加载方式;
3.        各业务插件配置是物理独立的,可以完全独立云控,用以支持多个不同业务插件在同一时刻的各自灰度策略,
插件管理器会对落地的各独立配置进行汇总merge生成本地的一个全局插件状态配置;
4.        各业务进程存在独立PluginManager管理本进程内的具体加载的业务插件,同时保存有全部业务插件的静态配置信息;
5.        各业务进程存在独立TaskManager用于执行具体插件相关任务,如Active,Download,Install,Restore…等等,TaskManager通过IPC彼此打通,构成一个系统级的全局任务调度体系,通过global_mutex机制保证关键任务的序列化执行并通过ipc机制实时同步任务状态;
6.        不同的业务进程执行的具体任务是有区别的,这也与一开始的进程划分目的一致,比如托盘进程统一进行下载任务,
服务进程会进行核心插件的加载任务等等;
7.        任务的触发者并不一定是具体的执行者,但对上层业务是完全透明的;上层业务统一看到的只有PluginManager,而最终任务会由PluginManager交由TaskManager决策具体执行,如果非本业务进程应做的工作,实际会进行相关参数序列化打包最后IPC投递到具体业务进程执行并作为此任务的Observer接收任务的实时执行状态;
8.        全局服务管理器和容器作用域的服务管理器是为了提供进程作用域和容器作用域的基础服务共享而创建的,基于进程内的Com机制实现,完成组件创建,引用计数维护相关工作;
9.        对于UI类型插件的Active进行了专门的处理,由于UI插件本身的启动要求在主消息循环线程,因此统一采取queuserapc机制,内部封装同步机制支持上层需求;
10.        第三方应用接入工作量会很简单,只需要关注自身的proxyplugin足以;

以上就是杀毒应用现阶段采用的内部核心插件加载调度机制,有兴趣的同学可以一起讨论一下!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?快速注册

x
1094947421
发表于 2015-5-19 14:38:52 | 显示全部楼层
不喜欢云为主的杀软。
猥琐大叔
发表于 2015-5-19 14:40:59 | 显示全部楼层
这个界面太小了,不习惯,希望可以有个可以切换的大界面!和腾讯管家一样也好
欧阳宣
头像被屏蔽
发表于 2015-5-19 18:12:19 | 显示全部楼层
真健忘,你让人来这里发过了。
百度杀毒国内版
 楼主| 发表于 2015-5-21 14:58:40 | 显示全部楼层
1094947421 发表于 2015-5-19 14:38
不喜欢云为主的杀软。

这位同学还是喜欢更传统的引擎
xilinfeng2008
发表于 2015-5-21 15:02:30 | 显示全部楼层
欧阳宣 发表于 2015-5-19 18:12
真健忘,你让人来这里发过了。

你的版主呢??
旷月108
发表于 2015-5-21 15:54:46 | 显示全部楼层

头像又换了。。。
xilinfeng2008
发表于 2015-5-21 18:14:27 | 显示全部楼层
旷月108 发表于 2015-5-21 15:54
头像又换了。。。

卡饭一直这个头像啊?
神话哈
发表于 2015-5-24 09:46:34 | 显示全部楼层
百度杀毒国内版 发表于 2015-5-21 14:58
这位同学还是喜欢更传统的引擎

一断网就傻逼
猪头无双
头像被屏蔽
发表于 2015-5-24 12:16:43 | 显示全部楼层
本地库也是很重要的,没有本地库,云断网就废了
您需要登录后才可以回帖 登录 | 快速注册

本版积分规则

手机版|杀毒软件|软件论坛| 卡饭论坛

Copyright © KaFan  KaFan.cn All Rights Reserved.

Powered by Discuz! X3.4( 沪ICP备2020031077号-2 ) GMT+8, 2024-11-25 14:55 , Processed in 0.135380 second(s), 17 queries .

卡饭网所发布的一切软件、样本、工具、文章等仅限用于学习和研究,不得将上述内容用于商业或者其他非法用途,否则产生的一切后果自负,本站信息来自网络,版权争议问题与本站无关,您必须在下载后的24小时之内从您的电脑中彻底删除上述信息,如有问题请通过邮件与我们联系。

快速回复 客服 返回顶部 返回列表