一开始我们就在 Azure 租一个 node , 程序後端(以下称API)、Nginx、MongoDB 都在里面,完全是轻轻松松的会发生 single point of failure
後来发现这样,要 deploy 後端程序时候,就要把服务暂停才行。所以就把 API 跟 MongoDB 拆开,然後多加了几个 API 的 instance。
本来因为 array 很方便,我们本来就开了一个储存对话的 collection,两个人间的对话就是一个 document。後来开始有人越用越多後,才发现一个 document 的大小有上限 (16M),居然有人可以聊到达到这个上限。虽然算是 corner case,但也让我们发现目前的 schema 不可行,於是存对话的部分,改成了一个新的 collection,一个 document 就是一个讯息加上一个对话 ID。
後端跟资料库分开後,资料库这边维持现状好一阵子。
後来用户又持续增长,效能开始出问题後,就开始研究要怎麽不用花太多钱改善效能。这也是有钱大公司跟没钱小团队的最大差别。毕竟现在都是 host 在云端,只要有钱,按几个键提升主机的规格,效能马上改善。
虽然透过增加 index 可以改善,但我们遇到一个问题是,尖峰时段 MongoDB 会用超过 VM 的可用 memory (Out of memory) ,此时就会慢到不行,也就只好认明提升 instance 的规格。我们每次都是出事了才提升规格,目前已经改了好几次。难以想像以前要自己在办公室放主机的时代要多麻烦,哈哈。
後来看了 Mongo 官方建议。发现推荐的形式是要有至少三个 instance: primary、replica、arbiter。
我们才加到三个 insance。这也让我们大幅降低跟资料库有关的 downtime。
光是 mongo 就好多可以写,哈哈。下次写最终形态的改善。
最新文章会分享在脸书:https://www.facebook.com/gigi.wuwu/
欢迎留言讨论
>>: 铁人赛 Day6 -- 一定要知道的 CSS (三) - Flex 属性的应用
闲话家常 今天来到了铁人赛的第四天了,我们继续来聊聊资料结构,秉持着一天弄懂一个观念,相信30天的铁...
Initial Access 针对初始访问阶段,恶意攻击者会利用各种方法进入工控场域,因此 Ini...
在讲解 this 之前,先来看一段程序码,观察它的执行过程 var myName = 'weiwei...
前面把java跟python部分完成後, 接下来要继续写js和html的步骤来完成1分k视觉化。 (...
今天,我们要来说到背景服务的部分,当我们在完全关闭APP的情况下,所有工作也会停止,那麽我们就需要用...