在一个公司怎么知道我之前的工作工作了4年,知道公司怎么知道我之前的工作的核心秘密,自己出去自己干违法么

  维秘训练营揭秘:核心训练才能练出超级性感模特

维秘训练营揭秘:核心训练才能练出超级性感模特

}

党的信息工作与党的执政能力建設研究党的,研究,探索,党 的,建设研究,工作研究,研究工作,信息工作,工作信息,执政能力

}

李猛(ynuosoft)Elastic-stack产品深度用户,ES认证工程師2012年接触Elasticsearch,对Elastic-Stack开发、架构、运维等方面有深入体验实践过多种Elasticsearch项目,最暴力的大数据分析应用最复杂的业务系统应用;业余为企业提供Elastic-stack咨询培训以及调优实施。

本文内容涉及到MongoDB与Elasticsearch两大阵营可能会引起口水之争,仅代表个人经验之谈非阵营之说,围绕两个话题展开:

MongoDB本身定位与关系型数据库竞争但工作中几乎没有见到哪个项目会将核心业务系统的数据放在上面,依然选择传统的关系型数据库

公司怎么知道我之前的工作所在物流速运行业,业务系统复杂且庞大用户操作者很多,每日有大量业务数据产生同时业务数据会有很多佽流转状态变化,为了便于记录追踪分析系统操作日志记录项目应运而生,考虑到原有的日均数据量操作日志数据基于MongoDB存储。

操作日誌记录系统需要记录两种数据如下说明:

1)变更主数据,什么人在什么时间在系统哪个模块做了什么操作数据编号是什么,操作跟踪編号是什么

2)变更从数据,实际变更数据的变化前后此类数据条数很多,一行数据多个字段变更就记录多条

  • 业务系统新增或者编辑數据,产生操作日志记录发送到Kafka集群基于dataid字段作为key;

  • 新增或编辑数据实际存储到MySQL数据库;

  • canal集群订阅MySQL集群,按照业务系统模块配置监控的數据库与表;

  • canal将监控到的变更业务数据发送到Kafka集群基于dataid字段作为key;

  • 操作日志系统从Kafka获取主记录数据与从记录数据;

  • 操作日志系统写入数據到MongoDB,同时需要反查询

图示:操作日志记录业务流程说明

  • Router路由服务器部署了3个节点;

  • Config配置服务器部署了3个节点;

  • Shard分片服务器部署了9个节點;

  • 主操作记录设计3个分片;

  • 从操作记录设计3个分片。

MongoDB的信徒们可能怀疑我们没有使用好或者我们的运维能力欠缺,或者认为我们有Elasticsearch的高手在不是这样的,弃用MongoDB选择Elasticsearch其实并非技术偏见问题而是我们的实际场景需求,原因如下:

  • MongoDB内部采用B-Tree作为索引结构此索引基于最左優先原则,且必须保证查询顺序与索引字段的顺序一致才有效这个即是优点,但在现在复杂业务场景也是致命的;

  • 业务系统查询操作日誌记录会有很多过滤条件且查询条件是任意组合的,现有MongoDB是不支持的或者说所有关系型数据库都不支持,如果要支持得创建好多组匼的B+数索引,想法很不理智这个我们已经在文中探讨过,详细可以阅读;

  • 同时主记录与从记录中有很多字符类的数据这些数据查询即偠支持精确查询,也要支持全文检索这几个方面MongoDB功能很单一,性能也很糟糕业务系统查询时经常超时,反倒是Elasticsearch非常合适

  • 分片与副本實现问题,MongoDB集合数据在设计时是需要绑定到具体的机器实例的哪些分片分布在哪些节点上,哪些副本分布在哪些节点上这些都需要在配置集群时就要绑定死,跟传统的关系型数据库做分库分表本质上没有什么两样其实现在很多数据产品的集群还是这种模式偏多,比如Redis-clusterClickHouse等。而Elasticsearc的集群与分片和副本没有直接的绑定关系可以任意的平衡调整,且节点的性能配置也可以很容易差异化;

  • 操作日志数据量增加佷快单日写入超过千万条,不用多久运维人员就需要对服务器进行扩容,且相对Elasticsearch复杂很多;

  • MongoDB单集合数据量超过10亿条此情况下即使简單条件查询性能也不理想,不如Elasticsearch倒排索引快;

  • 公司怎么知道我之前的工作对于ES与MongoDB技术栈的经验积累不同Elasticsearc在很多项目中运用,非常核心的項目也是大量运用对于其技术与运维经验更丰富,而MongoDB如果除去核心业务场景几乎找不到合适的切入口,实际没有人敢在核心项目中使鼡MongoDB这就很尴尬。

异构数据系统迁移主要围绕这两大块内容展开:

  • 上层应用系统迁移,原来是针对MongoDB的语法规则现在要修改为面向Elasticsearch语法規则;

原有MongoDB集群采用了15台服务器,其中9台是数据服务器迁移到Elastic集群需要多少台服务器?我们采取简单推算办法如假设生产环境上某个MongoDB集合的数据有10亿条数据, 我们先在测试环境上从MongoDB到ES上同步100万条数据,假设这100万条数据占用磁盘10G那生产上环境上需要1个T磁盘空间,然后根据業务预期增加量扩展一定冗余根据初步评估,Elastic集群设置3台服务器 配置8c/16g内存/2T机械磁盘。服务器数量一下从15台缩减到3台且配置也降低不尐。

系统操作日志是时序性数据写完整后基本上无需再次修改。操作日志记录查询主要是当月的居多后续的历史性数据查询频率很低,根据评估核心数据索引按月创建生成, 业务查询时候必须带上操作时间范围后端根据时间反推需要查询哪些索引,Elastic-Api支持多索引匹配查询完美利用Elastic的特性解决跨多个月份的查询合并。对于非核心数据索引按年创建索引生成足以。

图示:Elastic操作日志索引创建规则

Elasticsearch不是关系型数据库不具备事务的机制。操作日志系统的数据来源都是Kafka消费数据是有顺序机制的,有2种场景特别注意如下:

  • 主数据先到操作ㄖ志系统,从数据后到从数据写的时候先拼凑主数据记录和Binlog字段数据;

  • 从数据先到操作日志系统,主数据后到主数据更新从索引的相關的索引字段。

Elasticsearch索引数据更新是近实时的刷新机制数据提交后不能马上通过Search-Api查询到,主记录的数据如何更新到从记录呢而且业务部门鈈规范的使用,多条主记录的dataId和tracId可能一样

由于主数据与从数据关联字段是dataId和traceId。如果主数据与从数据在同时达到操作日志系统基于update_by_query 命令肯定失效不 准确, 主从数据也可能是多对多的关联关系dataId 和traceId不能唯一决定一条记录。

Elasticsearch其实也是一个NoSQL数据库 可以做key-value缓存。这时新建一个Elastic索引作为中间缓存 原则是主数据与从数据谁先到缓存谁,索引的 _id=(dataId+traceId) 通过这个中间索引可以找到主数据记录的Id或者从记录Id, 索引数据模型多如下detailId为从索引的_id的数组记录。

前面我们讲过主记录和从记录都是一个Kafka的分区上我们拉一批数据的时候,操作ES用的用到的核心API:

#批量获取从索引的记录

#批量删除中间临时索引

选择DataX作为数据同步工具由以下几个因素:

  • 历史型数据操作日志记录数据属于历史性的数据,記录产生之后几乎无需二次修改等同于离线数据;

  • 非持续性迁移。项目全部完工之后原有的MongoDB集群会全部销毁,不会有二次迁移需求;

  • 數据量问题原有MongoDB操作日志数据量有几十亿条,迁移过程不能太快也不能太慢速度太快,MongoDB集群会出现性能问题速度太慢,项目周期太長增加运维的成本与复杂度。否则可以选择Hadoop作为中转平台的迁移;

  • DataX源码特定场景改造如日期类型的转换、索引主键_id的生成、索引主键_id映射,支持重复同步;

  • 多实例多线程并行主数据同步部署多个实例,从数据同步也部署多个实例单实例中配置多个Channel。

图示:DataX同步数据礻意图

临时修改索引的一些设置当数据同步完之后再修改回来,如下:

操作日志项目采用Springboot构建增加了自定义配置项,如下:

  • 第一次上線的时候先将2个写入标识设置为true,双写MongoDB和ES;

  • 对于读提供2个不同接口,前端自由的切换;

  • 等数据迁移完没有差异的时候,重新更改flag的徝

弃用MongoDB使用ElasticSearch作为存储数据库,服务器从原来的15台MongoDB变成了3台ElasticSearch,每月为公司怎么知道我之前的工作节约了一大笔费用同时查询性能提高叻10倍以上,而且更好的支持了各种查询得到了业务部门的使用者,运维团队和领导的一致赞赏

整个项目前后历经几个月,多位同事参與设计、研发,数据迁移、测试、数据验证、压测等各个环节技术方案不是一步到位,中间也踩了很多坑最终上线了。ES的技术优秀特点很多灵活的使用,才能发挥最大的威力


特别推荐一个分享架构+算法的优质内容,还没关注的小伙伴可以长按关注一下:
如有收獲,点个在看诚挚感谢
}

我要回帖

更多关于 公司怎么知道我之前的工作 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信