和drools规则引擎做了实时的日志处理服务。... } }).setParallelism(redisSinkParallelism).name(name).uid(name); 后来发现这样做对内存消耗比较大...Accumulator,通过flink的agg操作做统计,减轻了内存消耗的压力。...小结 本系统提供了一个基于flink的实时数据处理参考,对接了kafka、redis和elasticsearch,通过可配置的drools规则引擎,将数据处理逻辑配置化和动态化。...对于处理后的数据,也可以对接到其他Fink,为其他各类业务平台提供数据的解析、清洗和标准化服务。
除了应用了 Rete 核心算法,开源软件 License 和 100% 的Java实现之外,Drools还提供了很多有用的特性。...其中包括实现了JSR94 API和创新的规则语义系统,这个语义系统可用来编写描述规则的语言。...IKExpression 简介IK Expression 是一个开源的、可扩展的, 基于java 语言开发的一个超轻量级的公式化语言解析执行工具包。...Groovy 与 Java 平台非常融合,包括大量的java类库也可以直接在groovy中使用。...cacheKey 是用来指定缓存的 key,如果你的脚本特别长,默认使用脚本作为 key 会占用较多的内存并耗费 CPU 做字符串比较检测,可以使用 MD5 之类唯一的键值来降低缓存开销。
1.五大常用规则引擎 1.1 Drools:企业级规则引擎扛把子 官网:https://www.drools.org/ 适用场景: 金融风控规则(上百条复杂规则) 保险理赔计算 电商促销体系 实战:折扣规则配置...算法实现 支持复杂的规则网络 完善的监控管理控制台 缺点: 学习曲线陡峭 内存消耗较大 需要依赖Kie容器 适合:不差钱的大厂,规则复杂度高的场景 1.2 Easy Rules:轻量级规则引擎之王 官网....evaluate("user.age > 18 && order.amount > 100"); 引擎 耗时 Aviator 220ms Groovy 1850ms 编译优化: // 开启编译缓存...支持异步、并行、条件分支 热更新规则 缺点: 新框架文档较少 社区生态待完善 适合:需要灵活编排的复杂业务流 2 五大规则引擎横向评测 性能压测数据(单机1万次执行): 引擎 耗时 内存占用 特点 Drools...内存溢出 // 设置无状态会话(避免内存积累) KieSession session = kContainer.newStatelessKieSession(); QLExpress安全漏洞 // 禁用危险方法
而在业务风控中需要使用到规则决策的场景更多,由于涉及规则的保密性,这里就不展开了。总之,基于这个出发点,安全部决定开发出一个通用的规则引擎平台,来满足以上场景。...groovy可以和spring完美结合,并且可以自定义各种组件实现插件化开发。 当规则集变得复杂起来时,使用drools管理起来有点力不从心。...当然还有另外一种方式是将drools和groovy结合起来,综合双方的优点,也是一种不错的选择,大家可以尝试一下。...使用预加载的方式加载已有的规则,并将加载后的对象缓存起来,每次规则变更时重新load整条规则,极大的提升了引擎的执行效率 计数器引入AtomicLongFieldUpdater工具类,来减少计数器的内存消耗...现在整个平台的数字化做的比较弱,没法形成数据驱动业务。而风控的运营往往是需要大量的数据去驱动规则的优化的,比如规则阈值的调试、规则命中率、风险大盘等都需要大量数据的支撑。
风控引擎:主要处理风控请求,有预处理、规则引擎和模型执行服务,风控引擎所需要的数据是由数据服务模块提供的。 数据服务:主要有实时流量统计、风险画像、行为设备数据、外部数据访问代理,RiskGraph。...由于携程的业务种类非常多,而且每种业务都有其特性,在进入风控系统(Aegis)后,为了便于整个风控系统对数据进行处理,风控前端有一个适配器模块,把各个业务的数据都按照风控内部标准化配置进行转换,以适合风控系统使用...这样携程风控引擎 ,实现了 规则上线的高效携程风控实时引擎 通过使用 规则引擎Drools,使其具有非常高的灵活性、可配置性,并且由于是java语法的,规则人员自己就可以制定规则并迅速上线。...数据服务层的核心思想就是充分利用内存(本地、Redis) 1、本地内存(大量固定数据,如ip所在地、城市信息等) 2、充分利用Redis高性能缓存 由于实时数据流量服务、风险画像数据服务的数据是直接存储在...Redis中,由于风控系统能够知道这些数据发生变化的Message,所以这些数据被持久化到DB中也是ok的,当然,这些数据也有一个TTL参数来保证其新鲜度。
风控引擎:主要处理风控请求,有预处理、规则引擎和模型执行服务,风控引擎所需要的数据是由数据服务模块提供的。 数据服务:主要有实时流量统计、风险画像、行为设备数据、外部数据访问代理,RiskGraph。...由于携程的业务种类非常多,而且每种业务都有其特性,在进入风控系统(Aegis)后,为了便于整个风控系统对数据进行处理,风控前端有一个适配器模块,把各个业务的数据都按照风控内部标准化配置进行转换,以适合风控系统使用...这样携程风控引擎实现了规则上线的高效携程风控实时引擎,通过使用规则引擎Drools,使其具有非常高的灵活性、可配置性,并且由于是java语法的,规则人员自己就可以制定规则并迅速上线。...数据服务层的核心思想就是充分利用内存(本地、Redis): 本地内存(大量固定数据,如ip所在地、城市信息等); 充分利用Redis高性能缓存。...Redis中,由于风控系统能够知道这些数据发生变化的Message,所以这些数据被持久化到DB中也是ok的,当然,这些数据也有一个TTL参数来保证其新鲜度。
为了让开发人员从大量的规则代码的开发维护中释放出来,把规则的维护和生成交由业务人员,为了达到这种目的通常我们会使用规则引擎来帮助我们实现。...当用户在 Drools 中添加或更新规则相关信息时,该信息会以一个或多个事实的形式插入 Drools 引擎的工作内存中。Drools 引擎将这些事实与存储在生产内存中的规则条件进行模式匹配。...在下一次事实集合发生变化时(绝大多数的结果都不需要变化)通过从内存中取值,避免了大量的重复计算。...3.2 规则的设计3.2.1 决策表设计催收系统自研了一套决策表的解决方案,将drl中的条件和结果语句抽象成结构化数据进行存储并在前端做了可视化页面提供给业务人员进行编辑不需要编写规则脚本。...催收系统虽然使用的drools7.x版本,但是使用的方式依然使用的是5.x的程序化构建器方法(Knowledge API)催收系统目前规则固定页面上只能编辑无法新增规则,只能通过初始化数据库表的方式新增规则
这时候我们就需要集成规则引擎对这些判断进行线上化的管理 二、规则引擎选型 目前开源的规则引擎也比较多,根据原有项目依赖以及短暂接触过的规则引擎,我们着重了解了一下几个 drools: -社区活跃,持续更新...根据drl文件生成规则的工作内存,通过KieSession或者StatelessKieSession与工作内存交互。整个流程并不复杂。...但是,这样并不能满足我们线上化判断,或者频繁更改规则的诉求。于是我们在实践中需要对drools更高阶的使用方式。...以下是我了解过的四种动态的方案: drt文件,创建模板,动态生成drl文件,也是我们目前所用的方式。 excel文件导入,实际上和模板文件类似,依然无法直接交给业务人员来使用。...在这种情况下,如果使用静态的drl文件来实现这些规则,需要数百规则文件,维护量大,且每次修改后使规则生效的代价较大。在此背景下,我们尝试drools高阶应用,既规则动态化实践。
实时计算 要将任意维度的历史数据(可能半年或更久)实时统计出结果,需要将数据提前安装特殊结果准备好(由于事件的维度数量不固定的,选取统计的维度也是随意的,所以不是在关系数据库中建几个索引就能搞定的),需要利用空间换时间...计算的性能消耗极少,优势明显 redis lua 把保存维度,计算频数,过期维度数据等操作,使用lua脚本结合在一起,可以减少网络IO,提供性能 mongodb mongodb本身的聚合函数统计维度,支持很多比如...,这样可以使用内存计算,速度较快。...但是redis为了性能牺牲了很多空间,数据重复存储,会占用很多内存。...的详细文档,请参考官方http://docs.jboss.org/drools/release/6.4.0.Final/drools-docs/html_single/index.html 部署 系统默认采用
,无需重启系统即使生效,减少沟通成本和避免重复开发,总之就是要更加 自动化 和 易配置 采集实时数据,根据实时事件做实时推送,总之就是要 实时 技术选型 数据采集、转换、存储 采集:状态类的数据主要放在各个业务系统的关系型数据库中...,由于历史原因有postgres和mysql,需要实时采集表的数据变更,这里使用kafka connector读取mysql的binlog或postgres的xlog,另外还有标签系统计算出来的标签,在...kafka connector有以下优点: 提供大量开箱即用的插件,比如我们直接用debezium就能解决读取mysql和pg数据变更的问题 伸缩性强,对于不同的connector可以配置不同数量的task...劣势: 单机全内存方案,需要整合其他分布式和存储。 以内存实现时间窗功能,无法支持较长跨度的时间窗。 无法有效支持定时触达(如用户在浏览发生一段时间后触达条件判断)。...规则配置控制台:提供可视化配置界面(运营规则配置、数据采集规则配置、字段元数据配置等) 报表服务:提供报表查询功能 运营位服务:提供外部接口,根据条件匹配运营位(如启动图、首页banner图片等) 总结与展望
压测下的惨痛教训:GraalVM 拯救冷启动AI 微服务通常需要加载大量的 Tensor 依赖库和模型分词器(Tokenizer),导致 Spring Boot 应用启动时间长达 30~60 秒,内存占用高达...5.1 处理反射与动态代理(AI 库的痛点)Jackson 反序列化、OkHttp 的内部类大量使用反射。需要生成 reflect-config.json。...可观测性:AI 链路的全链路追踪由于 AI 调用涉及外部第三方 API(如 OpenAI),传统的 Trace 只能看到 HTTP 出口,无法感知“Prompt 长度”和“Token 消耗”。...客服待命”消息或基于规则引擎(如 Drools)的硬编码回复,确保前端界面不报错。...成本可视化:Token 计费是运维盲区,务必在日志和监控中打印 prompt_tokens 和 completion_tokens,防止内部刷量导致巨额账单。
2.1 Drools5简述 上面已经提到Drools是通过规则编译、规则收集和规则的执行来实现具体功能的。...Drools7目前依旧包含上面提的Drools5的API,因此本实例直接使用Drools7的jar包。...和 StatelessKnowledgeSession) StatefulKnowledgeSession 接收外部插入的数据fact对象(POJO),将编译好的规则包和业务数据通过fireAllRules...使用完成需调用dispose()方法以释放相关内存资源。...StatelessKnowledgeSession 对StatefulKnowledgeSession的封装实现,与其对比不需要调用dispose()方法释放内存,只能插入一次fact对象。
老李意识到,业务规则和系统代码之间必须彻底解耦。这时候,他想到了Drools。三、是什么"工欲善其事,必先利其器。"...业务人员可直接画决策表CEP(复杂事件处理):支持时间窗口内的事件流分析,适合实时风控用一句大白话解释:Drools就是一个可热加载、声明式的业务判断大脑,你把规则写在外部文件里,引擎负责把规则和数据撮合...洞见一:Rete算法是Drools性能的命门,也是内存杀手结论:规则数量级上千条时,Beta节点内存会指数级增长。建议按业务域拆分KieBase,避免将全部规则塞进同一个Session。...洞见三:Drools在AI时代的新定位观点:LLM擅长理解模糊意图,Drools擅长精确确定性执行。两者结合是未来智能决策系统的黄金搭档——用AI生成规则草稿,经人工校验后推送到Drools执行。...电信、大型企业URuleJava国产可视化RETE★★★✅Web设计器国内中小企业EasyRulesJava轻量级顺序匹配★★❌❌简单业务逻辑GoRulesRust+多语言云原生决策表★★✅可视化编辑器微服务
寻找性能瓶颈 性能瓶颈的表象:资源消耗过多、外部处理系统的性能不足、资源消耗不多但程序的响应速度却仍达不到要求。...资源消耗 CPU、文件IO、网络IO、内存 外部处理系统的性能不足:所调用的其他系统提供的功能或数据库操作的响应速度不够。...文件IO消耗分析 Linux在操作文件时,将数据放入文件缓存区,直到内存不够或系统要释放内存给用户进程使用。所以通常情况下只有写文件和第一次读取文件时会产生真正的文件IO。...内存消耗分析 -Xms和-Xmx设为相同的值,避免运行期JVM堆内存要不断申请内存 对于Java应用,内存的消耗主要在Java堆内存上,只有创建线程和使用Direct ByteBuffer才会操作JVM...采用合理的缓存失效算法:如果放入太多对象在缓存池中,反而会造成内存的严重消耗, 同时由于缓存池一直对这些对象持有引用,从而造成Full GC增多,对于这种状况要合理控制缓存池的大小,避免缓存池的对象数量无限上涨
具备泛化能力:面对未见过的表述,也能基于常识和训练数据推理。不可完全确定:输出具有概率性,需配合约束或后处理。...融合架构原理: 数据分离:结构化数据(金额、签约方)给 Drools 做规则匹配,非结构化文本(合同原文)给大模型做柔性处理;决策触发:Drools 的输出作为大模型的执行条件,仅规则通过时,大模型才做优化...)审核员的 “规则手册”存储所有已编译的刚性业务规则Fact(事实)待审核的 “原始材料”待匹配的结构化业务数据(如合同金额、签字状态)Working Memory(工作内存)审核员的 “工作台”临时存放...Working Memory(工作内存)通俗定义:审核员的“工作台”,所有待审核的Fact都放在这里,方便审核员(推理引擎)随时拿取和规则手册比对,审核完成后工作台会清空。...**违约责任不明确**:由于原合同中没有明确的违约责任条款,一旦发生争议,双方可能难以迅速定位责任方并采取相应 措施,这可能导致纠纷升级或影响合同的正常履行。 2.
它适用于存在大量相似或相同对象的情况,通过共享这些对象的内部状态,可以减少内存的消耗。...当需要使用对象时,通过传递外部状态来定制对象的行为。 使用享元模式具有以下优点: 减少内存消耗:通过共享对象的内部状态,减少了创建相似对象的开销。...提高性能:由于共享对象,可以减少对象创建的时间和内存消耗,从而提高系统性能。 然而,享元模式也有一些缺点: 对象共享可能引入线程安全问题:如果多个线程同时使用共享对象,可能需要考虑线程安全性。...在Java中,可以使用享元模式来优化对象的创建和内存消耗,特别是在需要大量相似对象的场景中,如连接池、线程池、字形缓存等。...亨元模式的核心思想是什么?它是如何通过共享对象来减少内存消耗的? 请解释享元模式中的内部状态和外部状态的概念。 享元模式和单例模式有什么区别? 请描述享元模式的优点和缺点。
一、什么是享元模式 享元模式是一种结构型设计模式,旨在通过共享对象来最大限度地减少内存使用和创建相似对象的开销。它适用于存在大量相似或相同对象的情况,通过共享这些对象的内部状态,可以减少内存的消耗。...当需要使用对象时,通过传递外部状态来定制对象的行为。 使用享元模式具有以下优点: 减少内存消耗:通过共享对象的内部状态,减少了创建相似对象的开销。...提高性能:由于共享对象,可以减少对象创建的时间和内存消耗,从而提高系统性能。 然而,享元模式也有一些缺点: 对象共享可能引入线程安全问题:如果多个线程同时使用共享对象,可能需要考虑线程安全性。...在Java中,可以使用享元模式来优化对象的创建和内存消耗,特别是在需要大量相似对象的场景中,如连接池、线程池、字形缓存等。...亨元模式的核心思想是什么?它是如何通过共享对象来减少内存消耗的? 请解释享元模式中的内部状态和外部状态的概念。 享元模式和单例模式有什么区别? 请描述享元模式的优点和缺点。
适用场景:享元工厂适用于需要大量相似对象,并且希望通过共享来减少内存消耗和提高性能的情况。它在多次创建和销毁对象的场景中特别有用。...享元工厂在享元模式中扮演着关键的角色,它管理着享元对象的创建、共享和池化,以提高系统的效率和性能。通过享元工厂,可以有效地重用已存在的对象,降低内存开销,适用于需要大量相似对象的情况。...提高性能:由于对象共享和重用,享元模式可以显著提高系统性能。减少对象的创建和销毁开销,使系统更加高效。支持大量对象:享元模式适用于需要管理大量对象的情况,而不会因为对象过多而导致内存不足或性能下降。...共享状态的变化只需在一个地方进行维护,而不需要修改大量对象的状态。节省资源:由于对象共享,系统中创建的对象数量较少,因此节省了资源,包括CPU时间和内存。...例如,多个按钮对象具有相同的样式和行为。状态外部化:当对象的状态可以被外部化,并且可以在多个对象之间共享时,可以考虑使用享元模式。共享的状态信息通常存储在享元对象之外,可以在多个对象之间共享。
注意,这种方法,一定要确保电脑的内存能够承受测试的数据,不然会报出oom异常。 通过以上的简介,大概知道了内存的消耗和如何查看消耗的内存了。...总结,需要用到Kryo序列化机制的场景,算子内部使用了外部的大对象或者大数据结构。那么可以切换到Kryo序列化,序列化速度更快,和获得更小的序列化数据,减少内存的消耗。...,实际上是Spark应用程序把数据文件通过driver发送给每一个节点的每一个task,很明显,这样会造成大量的网络IO操作,大量消耗节点上的内存。...其实很容易想到,把一份大数据文件发送给每个节点就OK了,单个节点的所有task共享一份数据,这样就会节省大量的网络IO操作和节省大量内存消耗。...这样做的创新性是避免了大量数据的网络传输造成网络IO和内存的消耗。因此引出一个叫“数据本地化”的概念。 数据本地化对于Spark Job性能有着巨大的影响。
闭包保持了回调函数的上下文,使得回调函数可以访问外部的processData函数。 4. 缓存和记忆化 闭包还可以用于实现缓存和记忆化功能。...内存消耗 闭包会导致内存占用增加,因为它们会保留对外部变量的引用,即使外部函数执行完毕。这可能会导致内存占用过高。...内存泄漏 由于闭包会持有对外部变量的引用,如果不正确地处理闭包的使用,可能会导致内存泄漏。如果一个闭包长时间存在,但不再需要,它会一直持有对外部变量的引用,使这些变量无法被垃圾回收。...性能影响 闭包可能对性能产生一定的影响,特别是在涉及大量变量或复杂词法环境的情况下。闭包的创建和执行可能消耗更多的时间和资源。...由于闭包保留了这个结果,闭包的执行可能会耗费更多的时间和资源。 为了减少闭包的缺点,我们可以采取以下措施: 优化内存使用:在闭包中避免持有大量数据或不必要的引用。确保只 保留必要的变量和引用。