问:如何同步千万级数据?
答:建议首先弄清楚技术场景,不同的技术场景,落地的方法是不一样的。还有千万级数据同步,是秒级同步的峰值是千万级,还是每天总共同步千万级,要有具体的峰值TPS的。峰值TPS不一样,采取的技术手段也不一样的。
1、如果是非实时的同步数据,且只是同步表结构的相关数据,无需做任何数据的逻辑加工。建议可以采用sqlloader、goldengate之类的工具解决。
2、如果是非实时的同步数据,并不是简单的同步表结构的数据,需要做相关数据的逻辑加工(比如涉及到业务逻辑加工)。有两种不同的解决方法:2.1、纯java:可以用定时任务Timer、Quartz、Elastic-job之类的解决,如果峰值TPS很大(需要根据业务场景,压测情况而定),可能需要用MQ。
2.2、大数据:建议可以采用主库数据同步到备库,外加ETL、Hive相关的技术解决。
3、如果是实时的同步数据,且只是同步表结构的相关数据,基本不需要做任何数据的逻辑加工。建议可以用otter(阿里)、databus(linkedin)之类的开源中间件解决。这两者的核心技术原理是基于数据库的binlog增量数据,进行实时数据同步。
4、如果是实时同步数据,但不能使用otter,databus同步实时增量数据(比如:大企业的网络不能随便开墙、运维权限受限等等)。可以基于更新时间戳算法、MQ、批量处理、多线程等相关技术自行开发实时数据同步中间件。
京东是怎么支持那么多订单量快速查询的
答:订单往年的历史数据做归档的,用户查订单,一般是查询一年内的订单的,尤其是近一周的历史数据。 超过一年之外的数据,一般都会被历史归档,那么数据层的压力就减少很多 ,查询分页 下一页预热
ThreadLocal的问题
答:首先,要搞清楚ThreadLocal的用途,它主要用在多层架构传参、线程安全等方面,它可以和线程绑定的,设置相应的参数、传递参数。在多层架构的开发中,中间件开发及很多业务场景中的公共参数可以用它来传递。
其次,建议可以从以下几个方面整体掌握ThreadLocal:
1、建议多读Threadlocal的底层源码,掌握它的底层数据结构,其实它的数据结构有些复杂。
2、熟悉底层的哈希算法(用到了黄金分割数算法)、哈希冲突(用了线性探测算法解决哈希冲突)、弹性扩容(理解加载因子、扩容阈值的作用)
3、理解弱引用(TnreadLocal的key是弱引用)、垃圾回收、防止内存泄露(ThreadLocal底层其实有不少关于内存泄露的处理,get、set、remove都会间接或直接的清理key为空的Entry对象)
4、熟悉使用过程中存在的一些坑(主要是防止内存泄露、防止存储大对象、防止创建多个实例)
网关设计
- 拿到所有的请求参数
- 遍历请求参数,检查是否带XSS 攻击脚本,是否带SQL注入脚本
- 检查请求是否带有随机token参数
- 检查请求是否带有referer请求头-从哪个地方来的
- 根据ip地址在redis里进行计数,防止DDoS攻击