小说网站怎么做词,百度投放广告流程,郓城网站建设费用,企业网站建设专业服务1. 背景与需求分析
门户平台需要实现对服务信息的高效查询#xff0c;包括通过关键字搜索服务以及基于地理位置进行服务搜索。面对未来可能的数据增长和性能需求#xff0c;选择使用 Elasticsearch 来替代 MySQL 的全文检索功能。这一选择的背景与需求可以总结为以下几点包括通过关键字搜索服务以及基于地理位置进行服务搜索。面对未来可能的数据增长和性能需求选择使用 Elasticsearch 来替代 MySQL 的全文检索功能。这一选择的背景与需求可以总结为以下几点 关键字查询用户可能需要通过服务的名称、描述、分类等信息进行关键字搜索且搜索性能对用户体验至关重要。MySQL 提供了有限的全文检索能力但在大数据量、高并发下的性能不如专门的搜索引擎。 地理位置查询系统要求支持基于用户地理位置的服务搜索Elasticsearch 的 geo 查询功能专门用于解决此类地理坐标相关的查询MySQL 在这方面的支持较为有限。 数据增长预期虽然当前数据量较小但考虑到未来服务数据的增长可能从几千条增长到几万或几十万条需要一个能够横向扩展、应对海量数据的搜索解决方案。 查询实时性与并发性能门户系统的用户访问量较大尤其是面向 C 端用户要求搜索查询不仅需要高效还要在数据更新后能及时反映变化。因此对索引同步的实时性和查询性能有较高要求。
基于以上需求采用了 Elasticsearch 作为搜索引擎同时引入了 Canal MQ 方案以实现索引的实时同步。
2. 技术方案设计
2.1 Elasticsearch 全文检索与地理位置查询
Elasticsearch 是一个分布式搜索引擎基于 Lucene 构建提供强大的全文检索、结构化查询和地理位置查询功能。选择它的原因包括 高效全文检索基于倒排索引的数据结构Elasticsearch 能够快速处理海量文本数据支持各种查询方式如模糊匹配、同义词匹配等。 地理位置查询Elasticsearch 内置支持地理位置查询能够高效处理基于地理坐标的距离计算和范围过滤查询特别适用于服务场景中需要根据用户当前位置进行服务推荐的需求。 分布式架构Elasticsearch 通过分片和副本机制实现了良好的水平扩展能力能够应对未来的数据增长和高并发查询。
2.2 Canal MQ 实现索引同步
为了确保 Elasticsearch 的索引与数据库保持一致项目采用了 Canal MQ 的方式进行数据同步。
Canal会定时读取数据库的binlog日志解析出增加、修改及删除的数据内容并将其写入MQ。
同步程序监听MQ收到消息后根据消息内容请求ES同步索引数据。 Canal 的作用Canal 是阿里巴巴开源的一款工具专门用于解析 MySQL 的 binlog 日志模拟 MySQL 从库的增量数据同步。在项目中Canal 会实时监听数据库的增、删、改操作并解析出具体的操作数据。 MQ 的作用Canal 将解析后的数据变动事件如新增、修改、删除操作以消息的形式推送到消息队列MQ。MQ 起到了缓冲作用确保系统的消息异步处理能力。当数据库发生大量数据变动时消息可以在队列中被有序处理避免 Elasticsearch 的索引更新被短时间内大量请求压垮。 数据同步逻辑监听到 MQ 中的消息后系统中的同步程序会根据消息内容决定对 Elasticsearch 的操作 对新增的数据进行索引添加。对修改的数据进行索引更新。对删除的数据进行索引移除。
这种异步处理机制大大提高了系统的稳定性和扩展性尤其是在高并发和高频率数据变更的场景下能够有效减轻数据库的负担。
2.3 Canal简介
2.3.1 Canal是什么
canal [kənæl]译意为水道/管道/沟渠主要用途是基于 MySQL 数据库增量日志解析对数据进行同步如下图 Canal可与很多数据源进行对接将数据由MySQL同步到ES、MQ、DB等各个数据源。
Canal的意思是水道/管道/沟渠它相当于一个数据管道通过解析MySQL的binlog日志完成数据同步工作。
官方文档https://github.com/alibaba/canal/wiki
2.3.2 MySQL主从数据同步的原理
MySQL主从集群由MySQL主服务器(master)和MySQL从服务器(slave)组成MySQL主从数据同步是一种数据库复制技术进行写数据会先向主服务器写写成功后将数据同步到从服务器流程如下
1、主服务器将所有写操作INSERT、UPDATE、DELETE以二进制日志binlog的形式记录下来。
2、从服务器连接到主服务器发送dump 协议,请求获取主服务器上的binlog日志。
MySQL的dump协议是MySQL复制协议中的一部分。
3、MySQL master 收到 dump 请求开始推送 binary log 给 slave
4、从服务器解析日志根据日志内容更新从服务器的数据库完成从服务器的数据保持与主服务器同步。 2.3.3 Canal实现数据同步的原理
Canal伪装成从服务器向主服务器发送dump 协议。
1、Canal模拟 MySQL slave 的交互协议伪装自己为 MySQL slave 向 MySQL master 发送dump 协议
MySQL的dump协议是MySQL复制协议中的一部分。
2、MySQL master 收到 dump 请求开始推送 binary log 给 slave (即 canal )
一旦连接建立成功Canal会一直等待并监听来自MySQL主服务器的binlog事件流当有新的数据库变更发生时MySQL master主服务器发送binlog事件流给Canal。
3、Canal会及时接收并解析这些变更事件并解析 binary log。
通过以上流程可知Canal和MySQL master主服务器之间建立了长连接。