前言
搜索其实是一个很复杂的场景,且如何将搜索从 0 构建到 1 其实也蛮有挑战的,尤其要保证构建的整个闭环架构合理、服务稳定、性能高效,这是需要下功夫思考和实践才能想清楚的。
分层
数据源层
索引层
es 构建和调优
搜索业务层
搜索微服务架构
搜索必备配套服务
搜索体系监控和报警
详解
1、数据源层
这一层可能和搜索关系不大,但是要做索引对这一层还是需要有一定的基础。
例如:如何高效的从 hdfs 上索引数据、如何通过游标方式全量索引 mysql 上的数据、如何监听 mysql 对应的 binlog 文件数据、如何针对 mysql 构建高效索引完成增量索引更新等
这块就需要对诸如:hdfs、hbase、mysql、TiDB 等各种数据源有一定的认识和了解
2、索引层
这一层就和搜索有密切的关联。
需要考虑如何设计一套兼容多数据源、多数据格式、动态配置格式化套件、动态配置索引信息等,这里就考验相关项目设计和编写能力。
有了相关设计,还需要考虑和业务相关的事情,尽可能的在离线索引阶段就将一些线上过滤、判断、计算等逻辑处理了,这样最大限度的提升搜索的新能和降低搜索的使用成本。
3、es 构建和调优
首先 es 相关底层索引、搜索以及一些日常问题原理要有一定的认知,这样才有在线上使用 es 的基本前提。
再需要考虑如何构建一个线上可以使用的 es 环境,以及如何根据不同的环境将 es 性能保证最优。这里就可以参考我之前写的 Elasticsearch 调优和系列篇。
4、搜索业务层
这里就涉及到核心业务编码能力,如何将业务需求转义为编码可实现的能力。
5、搜索微服务体系架构
随着业务线的增多以及大规模的应用,搜索服务越来越复杂,此时就需要考虑将这种复杂的业务场景查分成各个子业务的微服务架构,因为各个业务对应不同的业务逻辑和搜索逻辑,拆分开反倒是更加好维护一些,可以将其中公共的地方抽象出来。
这里就涉及到搜索微服务如何选型,技术体系是什么,为什么这么做。这个有时间的话我可以单独写一个系列,这块其实也比较复杂。
6、搜索必备配套服务
一个完整的搜索服务,可不仅仅是一个简单的 es crud 功能,它需要配套:垂直分词服务、意图服务、正排服务、queryparse 服务、纠错服务等等。
每一个配套服务在一个复杂的业务与场景是都是必不可少的,而每一个服务又是一个单独的项目体系。
这些后续我也会单独的写一个专题系列,将各个子服务单独梳理一遍。
7、搜索体系报警和监控
作为架构师,最重要的就是要实时掌控自己负责的整个架构运行情况,这就不得不涉及到相应的 报警和监控体系。
监控目前我们使用的是 ELK 相关的配套组件,比较好用,而且是和 es 绑定比较紧密的,用起来也相对来说比较顺手,各种报表制作和使用也相对容易一些。
报警目前使用的是 elastAlert,也是基于 es 的一个第三方的 python 组件,自己又封装了一层,构建了一个配置服务项目,统一再这里配置发布,就会针对不同的组或者人员来定制化发送报警
总结:
以上每一个环节都可以列出来很多东西,由于写作时间有限,但我觉得还是很有必要写下来留作自己以后复习的资料而且也为他人提供一点微薄的指导思路,所以还是下定决心准备筹备一下了。尽情期待!