月度归档:2015年07月

2015 年 7 月 22 日:实时通信和推送服务故障说明

7 月 22 日周三 20 点 10 分,我们的实时通信服务 CPU 消耗升高,消息处理延时增加,也影响到与它关联的消息推送服务,慢慢导致最终推送队列出现了任务堆积,部分消息无法在第一时间推送出去。一小时后(21 点 15 分)也有用户给我们反馈,在终端用户那里能感受到,聊天过程中会有明显的间歇性卡顿。我们工程师一直在密切关注服务状态,紧急追查原因,最终在 2 小时之后彻底解决这一问题。

导致这次故障的原因,与当天凌晨 7 点我们为实时通信服务的 java 进程调整了 GC 相关参数有关。经过持续的 JVM 监控分析,我们发现线上实时通信服务的 GC 配置比较简单,还有优化空间,所以决定将原来的吞吐量优先收集器改为 CMS 收集器,以使业务运行更流畅。到了晚上随着实时通信服务压力增大,我们发现该调整并未达到预期效果,FGC 更加频繁,且 GC 过后老代内存比例依然较高,这反而拖累了用户线程的处理能力;影响还波及到消息推送服务,使消息推送的速度急剧下降。

GC 参数调整之后,我们工程师一直在关注服务状态,晚上 8 点后突发的实时通信压力让新参数的弊端一下子暴露出来,但是因为当时正好是部分客户的业务高峰,我们担心重启服务会带来大面积的中断和重连,这与间歇性卡顿下的可用相比,可能会造成更大的损失,所以我们只能密切关注服务端状态变化,择机行事。等晚上 10 点左右压力回落之后,我们立刻重启了实时通信服务,回滚了 java 进程的 GC 参数,同时将推送服务的处理容限临时提高至 200% 来加速处理队列中已积压的任务。

因为只调整了实时通信服务的 java 进程 GC 参数,所以数据存储、云代码、统计分析、网站等其他服务均未受到任何影响。

继续阅读

互联网二线城市的崛起 — 7/19 LeanCloud 南昌用户沙龙回顾

吴老师段子讲的好,传统企业 boss 占了一半人数

互联网+ 热潮席卷而来,一线城市的创业战场硝烟不断,但高额的运营成本和复杂的商业环境让更多人将目光放到了潜力巨大的二、三线城市。不少主场创业团队凭借对当地的充分了解和所掌握的广泛资源,慢慢获得了大量的市场份额,更有团队逐渐拼杀进了一线城市。

南昌作为南方重要的省会城市,在中国的 IT 技术版图里也被定义为重要的外包基地,先后孵化了先锋软件、泰豪集团等知名 IT 公司。在这些以 ERP、OA 类产品为主导的软件公司的带动下,再加上对日外包之风,南昌软件外包基地逐渐成型。近几年来,随着地宝网、圈圈网、江西华邦等一批互联网企业的兴起,以及移动互联网大潮的到来,南昌也慢慢培育起了互联网氛围,目前已建立起先锋创业咖啡厅、玩聚咖啡厅、99 创咖等。同时,资本市场也慢慢将目光投向了这里,真格基金、顺为基金等都在时刻关注着南昌的一举一动。本土创业基金在移动电商、农业电商、O2O、K12 教育等方面有着很多的成功案例。

LeanCloud 专注为应用开发提供一站式的后端云服务,此次联合南昌开发者团队,为南昌的开发者们带来了最新的互联网产品研发技术和经典的客户案例。本次沙龙分享主题从传统行业为什么需要开发移动应用切入,围绕着用户的消费习惯、拓宽新市场和辐射更多消费阶层的方式、互联网 O2O 崛起后对传统行业的冲击这三个方面,展开了详细讲述与分析。

继续阅读

2015 年 7 月 8 日—云引擎「在线编辑函数」功能暂时不可用的故障说明(已更新)

从昨天(7 月 8 日)晚间开始,我们发现云引擎「在线定义函数」的编辑功能出现故障,用户无法在线实时修改自定义函数。受影响的功能仅限于「在线定义函数」这一项,云引擎的其他功能(如部署、运行等)以及 LeanCloud 的其他服务(如数据存储、聊天、推送等)均不受影响。

从故障发现之时起,我们的工程师一直在查找和定位原因,惭愧地是到 7 月 9 日下午 2 点左右还没有完全解决。因此我们做了代码回滚,从 2 点 47 分开始「在线定义函数」功能又可以正常使用了。等我们找出引起该问题的具体原因,会给大家做进一步的更新。

谢谢大家对 LeanCloud 的理解与支持!

2015 年 7 月 13 日 更新:

我们的工程师最终在 7 月 10 日晚上 6 点找出了问题根源:

0.5.5 版 JavaScript SDK 中,我们为了兼容 Promise+ 模式,将 save 保存操作变为异步调用,导致它在多 appId/appKey 切换的场景下会产生超时错误。而云引擎正是这种使用方式,所以出现了自定义函数不能保存的情况;但对于账户下只有一个应用的用户而言,因为不涉及切换 appId/appKey,所以并不会受到影响。我们通过回滚云引擎代码暂时解决了这一问题,以后会再择机将其整体升级到最新版。

LeanEngine 中使用 WebSocket

一直以来 HTTP 协议都是使用「请求/响应」的模型,在 Web 应用越来越复杂的今天,这种模型的限制越来越明显。

很多场景下,我们想要服务器主动发送通知给浏览器,甚至我们想在浏览器中实现一个实时对战的网络游戏。这个时候 HTML5 规范中的 WebSocket 可以很好地满足我们的需求。

对于使用 LeanEngine 的用户,我们也可以直接在 LeanEngine 环境中使用 WebSocket,来构建应用了。下面我们以 LeanEngine NodeJS 运行时环境为例,实现一个 WebSocket echo server(echo server 是指返回任何接收到信息的服务)。

继续阅读