QMQ

极简化ES数据同步,终于从繁琐重复的代码里脱身了

社会主义新天地 提交于 2021-01-20 21:02:51
一、背景 Elasticsearch是最近几年非常热门的分布式搜索和数据分析引擎,携程内部不仅使用ES实现了大规模的日志平台,也广泛使用ES实现了各个业务场景的搜索、推荐等功能。 本文聚焦在业务搜索的场景分享了我们在做数据同步方面的思考和实践,希望能对大家有所启发。 二、现状调研 数据同步是个很麻烦的事情,在各种论坛、分享中被大家反复讨论。 我们的需求大致包括全量、增量地从Hive、MySQL、Soa服务、Mq等不同类型的数据源获取数据,部分数据还需要进行一定的计算或者转换,然后近实时地同步到ES中,以被用户搜索到。 为了讨论方便,假定本文的场景是文章搜索的场景: 索引内容为文章,主要的信息保存在article表里; 每个文章关联了tag,保存在article_tag表里; tag表里的tagName也需要进入ES索引,以便使用标签名字搜索文章。 在以前同步这样的数据进入ES,单条文章的数据组装伪代码如下: List<Long> tagIds = articleTagDao.query("select tagId from article_tags where articleId=?", articleId); List<TagPojo> tags =tagDao.query("select id, name from tags whereid in (?)");

面试阿里P6,竟被MySQL难倒,再次二面,进入天猫团队(Java岗)

馋奶兔 提交于 2020-10-21 04:50:44
爱因斯坦说过“耐心和恒心总会得到报酬的”,我也一直把这句话当做自己的座右铭,这句箴言在今年也彻底在我身上实现了。 每一个程序员都拥有一座大厂梦,我也不例外,去年面试阿里P6,竟然被MySQL问倒了,很多相关性的问题都没有答上来,才2面就凉凉了。回去之后也潜心复习了,准备了二战,如今终于进入了阿里,被天猫团队录用。 01 阿里面试题之MySQL 请解释关系型数据库概念及主要特点? 请说出关系型数据库的典型产品、特点及应用场景? 请详细描述 SQL 语句分类及对应代表性关键字。 什么是 MySQL 多实例,如何配置 MySQL 多实例? 如何加强 MySQL 安全,请给出可行的具体措施? 误操作执行了一个 drop 库 SQL 语句,如何完整恢复? 详述 MySQL 主从复制原理及配置主从的完整步骤。 MySQL 如何实现双向互为主从复制,并说明应用场景? MySQL 如何实现级联同步,并说明应用场景? MySQL 主从复制故障如何解决? 02 二战阿里,天猫团队面试题(3轮技术面+HR面) 阿里面试技术题: 自我介绍呗 项目介绍呗(先自己介绍项目,然后再聊天) junit用法,before,beforeClass,after,afterClass的执行顺序 分布式锁 nginx的请求转发算法,如何配置根据权重转发 用hashmap实现redis有什么问题(死锁,死循环

RocketMQ系列:mqadmin命令行之集群操作

故事扮演 提交于 2020-10-09 15:18:38
简介 本文主要介绍clusterList和clusterRT命令 命令 clusterList:查看集群列表 clusterRT:测试集群的响应耗时 例子 clusterList 1)帮助 ./mqadmin clusterList -h 2)查看集群基本信息 ./mqadmin clusterList -n nameserver1:9876 3) 查看集群更多信息 ./mqadmin clusterList -n nameserver1:9876 -m 4) 查询集群信息,间隔10秒刷新当前信息。 ./mqadmin clusterList -n nameserver1:9876 -m -i 10 clusterRT bug: -s参数必须制定,不指定命令无法执行 1)帮助 ./mqadmin clusterRT -h 2)查看指定cluster的的响应时间(每次发一条消息,单条消息大小为10Bytes) #RT为响应时间(单位为ms),successCount为发送成功的,failCount为发送失败的。 ./mqadmin clusterRT -n nameserver1:9876 -c CLUSTERNAME -s 10 -a 1 3)查看指定cluster的的响应时间(每次发5条消息,单条消息大小为100Bytes) #RT为响应时间(单位为ms)

任意时间延时消息原理讲解:设计与实现

点点圈 提交于 2020-08-05 00:59:33
场景 延时消息即消息发送后并不立即对消费者可见,而是在用户指定的时间投递给消费者。比如我们现在发送一条延时1分钟的消息,消息发送后立即发送给服务器,但是服务器在1分钟后才将该消息交给消费者。 这种延时消息有一些什么应用场景呢?比如在电商网站上我们购物的时候,下单后我们没有立即支付,这个时候界面上往往会提醒你如果xx分钟还未支付订单将被取消。对于这么一个功能如果不使用延时消息,那我们就需要使用类似定时任务的功能,比如每分钟我们跑一个定时任务对订单表进行扫描,将未支付订单扫出,如果从下单时间到现在已经超过了45分钟则将该订单取消。但是定时扫描有一个问题是效率不高,如果订单很多将会严重的影响db的性能。如果使用延时消息就没有这样的问题了,只需要发送一条延时xx分钟的的延时消息即可,在消息里携带有订单号,xx分钟后消费者收到该消息检查对应订单状态做出对应处理,这种方式将大大减轻对db的压力,实现起来也更优雅。 上面描述的是一种延时时间固定的场景,还有一些是要指定时间执行。比如买了一张一周后北京去东京的机票,那么在乘机时间到来之前可能要发送数次提醒的短信给用户,那么我们也可以在用户下单后发送一条延时消息,延时到乘机时间之前发送。 需求 有了场景,我们首先来分析一下需求: 延时时间是不固定的,比如我们无法预测用户订未来多久的机票,所以我们不能仅仅提供几种不同延时单位的延时功能。

【高并发】为何高并发系统中都要使用消息队列?这次彻底懂了!

泄露秘密 提交于 2020-04-15 10:57:03
【推荐阅读】微服务还能火多久?>>> 写在前面 很多高并发系统中都会使用到消息队列中间件,那么,问题来了,为什么在高并发系统中都会使用到消息队列中间件呢?立志成为资深架构师的你思考过这个问题吗? 本文集结了众多技术大牛的编程思想,由冰河汇聚并整理而成,在此,感谢那些在技术发展道理上默默付出的前辈们! 场景分析 现在假设这样一个场景,用户下单成功需要给用户发短信,如果没有消息队列,我们会选择同步调用发短信的接口并等待短信发送成功。现在假设短信接口实现出现了问题或者短信发送短时间内达到了上限,这个时候是选择重试几次还是放弃发送呢?这里的设计会很复杂。如果使用了消息队列,我们选择将发短信的操作封装成一条消息发送到消息队列,消息队列通知一个服务去发送一条短信,即使出现了上述的问题,可以选择把消息重新放到消息队列里等待处理。 消息队列的好处 通过上述了例子,我们看到消息队列完成了一个异步解耦的过程,短信发送时我们只要保证短信发到消息队列成功就可以了,接下来就可以去做别的事情;其次,设计变得更简单,在下单的场景下,我们不用过多考虑发送短信的问题,交给消息队列管理就行了,可能短信发送会有延迟,但是保证了 最终的一致性。 消息队列特性 业务无关,只做消息分发。 FIFO,先投递先到达。 容灾:节点动态增删和消息持久化。 性能:吞吐量提升,系统内部通信效率提高。 高并发系统为何使用消息队列? (1

蚂蚁P7面经总结,被MySQL难倒了,奋发图强后二次面试入职蚂蚁金服

回眸只為那壹抹淺笑 提交于 2020-03-22 17:17:11
3 月,跳不动了?>>> 爱因斯坦说过“耐心和恒心总会得到报酬的”,我也一直把这句话当做自己的座右铭,这句箴言在今年也彻底在“我”身上实现了。 每一个程序员都拥有一座大厂梦,我也不例外,去年面试蚂蚁金服,竟然被MySQL问倒了,很多相关性的问题都没有答上来,才2面就凉凉了。回去之后也潜心复习了,准备了二战,如今终于进入了蚂蚁金服,被录用。 以下展示的阿里面试题(含答案)、学习包、实战文档等,均可以分享给大家,需要的朋友,私信我【面试】即可哦! 01 蚂蚁金服面试题之MySQL 之前的阿里面试题都有做总结,具体面试题内容整理成了文档,本文是针对MySQL系列的,所以下面只展示了自己第一次面试阿里时被吊打问到的一些MySQL难题,其他专题内容(含答案)的文档资料,私信我【面试】即可领取。 1、请解释关系型数据库概念及主要特点? 2、请说出关系型数据库的典型产品、特点及应用场景? 3、请详细描述 SQL 语句分类及对应代表性关键字。 4、什么是 MySQL 多实例,如何配置 MySQL 多实例? 5、如何加强 MySQL 安全,请给出可行的具体措施? 6、误操作执行了一个 drop 库 SQL 语句,如何完整恢复? 7、详述 MySQL 主从复制原理及配置主从的完整步骤。 8、MySQL 如何实现双向互为主从复制,并说明应用场景? 9、MySQL 如何实现级联同步,并说明应用场景? 10

深度剖析如何实现事务消息

亡梦爱人 提交于 2020-01-06 23:26:16
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 这是一篇从去年写到今年的文章,希望大家会喜欢 1.背景 分布式事务一直是一个老生常谈的一个话题,在我的公众号下面下面已经写过很多篇分布式事务相关的文章了,但是依旧没有将其完全剖析。在之前的文章中我也多次提到我们可以使用消息队列来实现我们的分布式事务,但是大多都是一笔带过,很多读者都对这一块产生了很多疑问,希望读完这篇文章能让你理解如何用消息队列实现分布式事务。 当然首先要回顾一下我们的一些基本概念: CAP CAP定理,又被叫作布鲁尔定理。对于设计分布式系统来说(不仅仅是分布式事务)的架构师来说,CAP就是你的入门理论。 C (一致性):对某个指定的客户端来说,读操作能返回最新的写操作。对于数据分布在不同节点上的数据上来说,如果在某个节点更新了数据,那么在其他节点如果都能读取到这个最新的数据,那么就称为强一致,如果有某个节点没有读取到,那就是分布式不一致。 A (可用性):非故障的节点在合理的时间内返回合理的响应(不是错误和超时的响应)。可用性的两个关键一个是合理的时间,一个是合理的响应。合理的时间指的是请求不能无限被阻塞,应该在合理的时间给出返回。合理的响应指的是系统应该明确返回结果并且结果是正确的,这里的正确指的是比如应该返回50,而不是返回40。 P (分区容错性):当出现网络分区后,系统能够继续工作

微服务架构分布式事务解决方案设计思路

和自甴很熟 提交于 2019-11-29 08:16:28
第一节:了解常用的分布式解决方案 一、分布式事务方案:最终一致性、事务补偿、TCC、两阶段提交、最大能力通知等。具体结合业务场景。很多大型企业自主研发了自己的分布式事务解决方案,如:支付宝 XTS,去哪儿 QMQ。 1.基于可靠消息的最终一致性解决方案(异步确保型)(适用场景比较广) 2.TCC事务补偿性方案(try-confirm-cancel)(也属于两阶段型的,但区别于2PC协议的两阶段提交) 3.最大努力通知型方案(一般跨平台通知比较常用) ###第二节:解决方案效果展示(结合支付系统真实应用场景) 一.场景(如上图) 1、基于可靠消息最终一致性方案 场景:对应支付系统会计异步记账业务;银行通知结果信息存储与驱动订单处理。 2、TCC方案 场景:对应支付系统的订单账户操作:订单处理、资金账户处理、积分账户处理。 3、最大努力通知型方案 场景:对应支付系统的商户通知业务场景 ###二、用到的技术: dubbo、spring、springMVC、mybatis、druid jdk7(或jdk8)、mysql5.6、tomcat、兼容JMS标准的MQ(activeMQ) 第三节:常用分布式事务方案介绍 ###一、事务介绍 1.由一组操作构成的可靠、独立的工作单元。 2.ACID: atomicity(原子性) 、consistency(一致性)、isolation(隔离性)