一次简单的业务服务拆分讨论

探讨了在业务系统中,如何优雅地集成日志记录与ElasticSearch,以实现高效的数据检索与聚合分析。文章深入分析了日志存储位置的选择、服务高可用性的保障、日志通用化设计及分布式任务调度系统的必要性。

场景:用户每次操作,需要会有一次记录入库,现在需要各种聚合计算查询。

难点:mysql内存、CPU计算能力有限,故而考虑引入ElasticSearch。

结果:将这个查询当做服务,使用dubbo开放给业务方调用。

 

实现场景很简单

 

但是问题出来了,es-statistics服务挂了,这时候业务日志就丢失了

有些日志是可以丢失,有些敏感日志不能丢失,假如业务的是用户打款日志的,就要高度依赖这个log的数据。

于是这里引入了一个log表:

 

仔细思考下,这个表应该放在哪里?es-statistics服务库还是业务库?

两者各有利弊!

如果放在业务库,优点很明显,服务如果挂了,数据不会丢失。缺点也明显,这个表可能我业务库用不到,多出来的一块业务存储;

如果放在es-statistics服务库,优点很明显,对业务的0入侵,缺点也明显,服务挂了,数据还是会丢失;

这里我提供了下我的想法,按照目前的场景,我更倾向于放在es-statistics服务库。

1.如果放在业务库,这时候服务挂了,数据虽然还在,但是业务方需要自己同步数据重新写入es-statistics服务,需要考虑从什么时候开始写,如何避免重复写入,业务调用方怎么区分唯一性?

2.如果该服务对接了多个业务调用方,那每个业务调用方都需要考虑这些事情。

3.可以提高服务的可用度

4.尽量减少服务端的发布

所以针对第3点和第4点,我们继续对这个服务做优化。

现在的情况是,只是打款的一个操作日志,假如明天产品说,也需要对退款做一次统计报表,你这个log表是不是就嘻嘻了?这时候就技术哥哥再加一张log4refund表,后天产品又说,我要对差评的做一次统计表,小哥又加一张log4rate表?大后天呢?需求是无穷无尽的。而且每次加一张表,就需要发布重启一次。

所以,我们重新设计了log表,将log尽量做成通用化,所以的操作内容,序列化为json,统一用一个大字段存储。

这时候问题由来了,虽然log表兼容了各种业务类型,但是插入log表以后再存储到ES的地方还是要区分各个业务的数据的。每次还是需要发布重启。

既然如此,何不把插入数据库的逻辑和插入ES的逻辑拆分出来?

提高服务的可用性,排除网络和机器等硬性限制,我们尽量使服务越简单越好,最好就一行代码。这个服务只做一件事情,就是插入数据库。我们重新开一个任务,跑这个log表的数据,使用工厂模式,不同的业务type类型,实例化不同的对象,插入到不同索引的ES中。

至于如何跑这个es-task,我们可以在log表中再加入一个created字段,根据时间增量的跑这个数据。

到这里,基本上这个设计差不多结束了,insert(log)服务越简单越好,不用依赖其他框架,不必每次都重启,服务线上同时部署多个点的话,基本可以不用管。后面再设想一步,甚至我可以把insert(log)服务和log表都可以去掉,在业务方和es-statistics直接开通一个消息队列,业务方插入消息,es-statistics接受消息转化自己的数据。

或者不使用消息队列,那就业务方将insert(log)服务和自己业务当做一个事务,如果insert(log)调用失败,回滚自身业务数据,当然这里也要考虑假如业务调用方调用服务的结果是超时了,实际上insert(log)是执行成功的,这就需要考了一个唯一键,具体的优化交给大家慢慢思考。

最后,es-task怎样能快速的将log表的数据消化了,瓶颈可能是单个点跑,速度提升不起来,这里就需要一套分布式任务调度系统,下次我再抽时间整理下整个逻辑。

 

潮汐研究作为海洋科学的关键分支,融合了物理海洋学、地理信息系统及水利工程等多领域知识。TMD2.05.zip是一套基于MATLAB环境开发的潮汐专用分析工具集,为科研人员与工程实践者提供系统化的潮汐建模与计算支持。该工具箱通过模块化设计实现了两大核心功能: 在交互界面设计方面,工具箱构建了图形化操作环境,有效降低了非专业用户的操作门槛。通过预设参数输入模块(涵盖地理坐标、时间序列、测站数据等),用户可自主配置模型运行条件。界面集成数据加载、参数调整、可视化呈现及流程控制等标准化组件,将复杂的数值运算过程转化为可交互的操作流程。 在潮汐预测模块中,工具箱整合了谐波分解法与潮流要素解析法等数学模型。这些算法能够解构潮汐观测数据,识别关键影响要素(包括K1、O1、M2等核心分潮),并生成不同时间尺度的潮汐预报。基于这些模型,研究者可精准推算特定海域的潮位变化周期与振幅特征,为海洋工程建设、港湾规划设计及海洋生态研究提供定量依据。 该工具集在实践中的应用方向包括: - **潮汐动力解析**:通过多站点观测数据比对,揭示区域主导潮汐成分的时空分布规律 - **数值模型构建**:基于历史观测序列建立潮汐动力学模型,实现潮汐现象的数字化重构与预测 - **工程影响量化**:在海岸开发项目中评估人工构筑物对自然潮汐节律的扰动效应 - **极端事件模拟**:建立风暴潮与天文潮耦合模型,提升海洋灾害预警的时空精度 工具箱以"TMD"为主程序包,内含完整的函数库与示例脚本。用户部署后可通过MATLAB平台调用相关模块,参照技术文档完成全流程操作。这套工具集将专业计算能力与人性化操作界面有机结合,形成了从数据输入到成果输出的完整研究链条,显著提升了潮汐研究的工程适用性与科研效率。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值