时间复杂度与空间复杂度,你了解多少
图片思路:代码最终是要加载到内存中实现new出对象,那么如果我们把可重用的功能提取出来,然后将这些通用功能在内存中通过入的方式实现构造出一个新的目标对象不就OK了么! Spring AOP(Aspect Oriented Programming) 恰恰提供从另一个角度来考虑程序结构以完善面向对象编程,如果说依赖注入的目的是让相互协作的组件保持一种较为松散的耦合状态的话,AOP则是将遍布应用各处的功能分离出来形成可重用的组件。在编译期间、装载期间或运行期间实现在不修改源代码的情况下给程序动态添加功能的一种技术。从而实现对业务逻辑的隔离,提高代码的模块化能力。 AOP 的核心其实就是动态代理,如果是实现了接口的话就会使用 JDK 动态代理,否则使用 CGLIB 代理,主要应用于处理一些具有横切性质的系统级服务,如日志收集、事务管理、安全检查、缓存、对象池管理等。 Spring主要提供了 Aspect 切面、JoinPoint 连接点、PointCut 切入点、Advice 增强等实现方式,AOP一般有5种环绕方式:
Canal 就是模拟了这个过程。 Canal模拟 MySQL slave 的交互协议,伪装自己为 MySQL slave ,向 MySQL master 发送 dump 协议; MySQL master 收到 dump 请求,开始推送 binary log 给 slave (即 canal );
Canal 解析 binary log 对象(原始为 byte 流); 对于引擎层,最核心的在于技术选型。需要结合业务需求、开源项目稳定性、开源项目功能特点综合分析,下文我们会仔细展开说明。 另外,对于生产环境使用的项目,必须做好配套的监控告警措施,保证线上的稳定性。 otter/canal都有现成的监控指标,我们需要将 同步延迟 等关键指标进行采集,并设置合理的告警阈值。 同时,对于一些没有现成的监控指标,比如 任务存活状态 等,我们可以通过 巡检 进行定时检查,避免由于同步任务挂起而影响上层业务。 4.数据订阅模块 4.1 技术选型 数据订阅实际上就是一种CDC(Change Data Capture)工具,目前开源产品中比较成熟的有Canal、DataX、DataBus、Debezium等。 整体而言,Canal、DataX、Debezium的使用人数多,社区活跃,框架也比较成熟。在满足应用场景的前提下,优先选择,代价适中。 DataX支持丰富,使用简单,但延迟较大(依赖获取频率),只需要手写规则文件,对复杂同步自定义性不强。 Debezium虽然比Canal支持更多类型的数据源,但是我们实际上只需要mysql,并不需要PostgreSQL这些的支持。 而Canal有几点特性我们非常需要,让我们决定使用Canal作为数据订阅引擎:
4.2 基本原理 数据订阅的原理基本一样,都是基于MySQL的主从复制原理实现。 MySQL的主从复制分成三步:
(编辑:江门站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |