BBSSDK数据同步存储原理

BBSSDK是一套能快速实现discuz论坛移动化的一套解决方案。今天主要讲讲这个产品的数据同步存储原理。

主要从这三个方面:一.存储机制;二.版本控制;三.同步原理。

一、存储机制

首先要理清我们有哪些内容,在对内容进行各种不同程度的存储和持久化。

根据内容类型我们分为:文本和多媒体。主要同步的内容就是文本内容,多媒体内容基本通过URL的形式进行访问,存储方式可以在用户的服务器端和我们提供的(或第三方提供的)对象存储系统。

文本内容又拆分为不同的等级:高频内容,低频内容,冷内容。

高频内容我们根据业务也进行进一步的拆分,核心的业务比如论坛版块、用户组、最新热帖等。进行主要的内容同步。而一些不是核心业务的内容比如家园、博客就没有在我们项目的同步规划内。


低频内容包括有用户,陈贴等,通过异步激活的方式进行数据的同步。


冷内容比如僵尸用户,历史广告数据等,这部分内容就在用户的论坛上而不参与BBSSDK线上逻辑。


理清了需要存储的数据,就需要对各种等级数据进行存储。在存储方案中有两种选择nosql和RDBS,考虑到没有复杂的事务性操作和读写效率,最终选择了mongodb作为线上数据存储服务。mongodb在热数据的查询和raw的快速写入,由于其在数据读写方面由于充分使用速度快的内存而占据优势。一些更高频内容(比如板块列表等)又在redis里面进行持久化,方便高并发的同时减少磁盘的IO。


二、版本控制

怎么去处理内容?当前内容是否最新?需要我们去维护一套内容的版本信息。在用户服务器需要一套,这样可以通知或提交最新的内容;平台也需要一套,知道这些通知或内容是否值得去获取和存储。


由于版本控制要保持内容的最终一致性,这就必须要有一个原子时钟。这个时钟就以用户服务器里的DB时间为标准。


用户服务器根据DB的触发器记录状态缓存在版本信息表里,后提交(或平台发送心跳获取)版本信息通知平台来获取数据。平台根据请求体或返回体里面的时间,或每次成功返回的头信息去维护平台自己的版本信息库。


三、同步原理

同步原理分三个部分:1.传输方式,2.时效性,3.安全性


1.传输方式,选择了http(s)的方式进行数据的推拉同步,首先http的兼容性高,只要是discuz的论坛搭建在虚拟空间也支持,不需要额外的环境配置;二是由于http是TCP协议稳定性好,缺点也就是耗费网络IO增加用时。


2.时效性,涉及到网络同步总会有延迟,怎么做到用户无感知延迟的内容同步?用户的网站千差万别,有些时候总会遇到不可避免的因素,导致获取消息的不及时,怎么解决最终内容的一致性?主要从三个方面进行:a.初始化方式;b.通知队列的消耗方式;c.心跳轮询机制。


a.初始化方式

在论坛插件安装成功后,会发送一个通知给平台。平台根据队列开启线程发起初始化。


初始化由于内容上我们进行了各种颗粒的切割,所以这个初始化不是整个论坛的全量数据同步。而是获取必要的配置信息,再加上高频的热内容同步在平台上。类似CDN的初始化流程。


b.通知队列的消耗方式

在通知队列中的每条通知需要描述当前任务的属性:包含权重,任务细节等。当消费者消耗通知队列的时候,去判断当前任务在版本描述中是否值得去获取,再通过http请求去获取内容,如果遇到不可避免因素导致内容获取失败,就需要对当前任务进行指数型递增下一次的执行时间。这样在不影响健康论坛运行的同时保持问题论坛内容的一致性。


如果一个论坛一直在发送通知而获取不到内容。在一个时间段达到一定数量级,我们可以判断当前论坛已经假死。为保证平台资源的合理利用,对问题论坛进行临时关闭,拉高指数重试,这样如果问题论坛还需要平台提供服务就需要再次提交初始化请求。


c.心跳轮询机制

在定长的时间内,平台会发送请求去目标论坛进行最新版本信息的获取。如果目标论坛没有返回。在多次无效的情况下,平台会判定目标网站已经关闭服务不再发起心跳轮询。


如果论坛用户是卸载了插件应用,就需要重新安装论坛插件,再次初始化服务。


如果论坛用户只是临时关闭服务或论坛出现短暂问题,插件在前端埋下的钩子会在定时内会通过前端用户触发发送平台服务器请求,去唤醒论坛服务,后激活心跳轮询保持服务的正常运行。



3.安全性,a.通信的安全:考虑到信息资产的安全所有的交互都是带签名验证的。这种验证方式使用的是请求体加秘钥的hash算法。秘钥通过mob管理后台进行获取,配置在插件端;b.内容存储安全:平台使用mongdb副本集的方式进行内容的存储。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,100评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,308评论 3 388
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,718评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,275评论 1 287
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,376评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,454评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,464评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,248评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,686评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,974评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,150评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,817评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,484评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,140评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,374评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,012评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,041评论 2 351

推荐阅读更多精彩内容

  • 点击查看原文 Web SDK 开发手册 SDK 概述 网易云信 SDK 为 Web 应用提供一个完善的 IM 系统...
    layjoy阅读 13,733评论 0 15
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,945评论 25 707
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,644评论 18 139
  • //国外Cascalog 2.0 In Depthhttp://www.samritchie.io/cascalo...
    葡萄喃喃呓语阅读 306评论 0 1
  • 自己认同写作能力的主要,曾经五年日记的坚持,至今匆匆过了二十多年,荒废时间了! 订阅了时间的朋友,结识了笑来老师,...
    魏sir阅读 206评论 0 0