在过去的一年里,数万新用户选择了 LeanCloud,开发者在我们的平台上创建了数万新应用。尽管在 6 月遇到了一些因外部因素带来的困难,2019 年仍然是 LeanCloud 实现整体盈利的第一年。这离不开用户的长期支持,同时健康的财务对于为用户提供持续、稳定、不断改进的服务也是至关重要的。

在过去一年里我们正式推出了 LeanCloud 国际版,全面支持域名绑定,并为对稳定性、可控性、灵活性有更高要求的用户开发了全新的独立部署方案。多人对战 Client Engine 正式上线,同时为规模较大的游戏提供了独立部署选项。云引擎新增了云队列和 MySQL 支持。其他服务和 SDK 也有大量改进和优化。

国际版正式运行

为了适应用户的需求变化以及产品下一步的发展,让 LeanCloud 正式成为国际化的产品,我们推出了 LeanCloud 国际版。 国际版使用独立的顶级域名 leancloud.app 和账户体系,由 LeanCloud 的境外公司作为主体运营,费用使用美元结算。 我们已经初步完成了网站、控制台、文档的国际化,也提供英语技术支持,让英文环境的开发者也可以使用 LeanCloud。

全面支持域名绑定

为了确保能长期稳定为开发者提供服务,按照相关法律法规和有关部门的要求,我们推动了使用 LeanCloud 服务的应用绑定自有域名。 绑定自有域名也有利于从域名层面做好应用隔离,确保业务稳定。 为了保证安全性,API 域名必须启用 SSL(云引擎域名、文件域名推荐启用 SSL),我们也推出了自动管理功能,支持 SSL 证书的自动申请和自动续期。

存储服务

全新独立部署方案

为了满足众多企业客户对平台稳定性、后端可控性以及功能多样性方面的要求,我们推出了新的独立部署方案,希望减少使用中的限制,给开发者更大的灵活性,同时也提供一个更加稳定可靠的完整后端,满足业务系统的更高要求。

新的独立部署方案里,我们会使用「独立的存储集群 + 独立的 API 集群 + 独立的扩展服务集群」的模式来构建一个完整的、物理隔离的公有云系统,供单个用户和应用独享使用。 这里的「扩展服务」是指基于存储到云端的结构化数据,解决特定业务需求的垂直服务,例如并行计算(原离线分析功能)、全文检索(原应用内搜索功能)等。

新的 API Server 是完全重新开发的,我们针对单应用独立部署的使用场景进行了功能裁剪和架构优化,取消了共享集群方式下的一些请求限制(例如数据导入导出、并发线程上限等),增加了更多数据处理接口(例如提供了索引操作和聚合查询的 REST API),同时还有更好的并发处理性能和弹性伸缩能力。

云引擎

云队列

我们推出了云队列服务。云队列提供了一种在云引擎之外调度云函数的能力,它基于云引擎已有的「云函数」这个概念实现了重试、去重、结果查询、延时任务、定时任务等功能,是对云函数功能的一个补充。尚未运行的任务会以一种可靠的方式暂存在云队列,即使你的云引擎因部署、过载、崩溃而重启,任务也不会丢失,云队列会等待你的云引擎实例恢复正常后继续运行它们。我们也基于云队列重新实现了定时任务,它兼容之前的绝大部分用法,并支持以 JSON 形式向云函数传递自定义的参数,以及配置在超时情况下的行为(重试或放弃)。对了,我们还移除了定时任务的个数限制。

MySQL

我们在华北节点推出了高可用、高性价比的 MySQL 数据库托管方案
开发者可以在云引擎中使用通用的 MySQL 客户端类库,访问完整的 MySQL 功能。

其他

云引擎统计结果展示也进行了优化,现在开发者可以在控制台按照总览、网站托管请求以及单个云函数来分别查看请求数(按分钟聚合)和响应时间的变化趋势,还可以看到整体的 CPU、内存以及流量消耗,希望在程序运行状况和代码优化上给大家提供更多参考信息。

云引擎命令行工具也发布了 0.21.0 版,修复了一些 bug,也支持指定 --prod 参数直接部署到生产环境,以及本地调试静态网站项目。

云引擎 Java 环境支持指定 Java 版本,开发者可以选用 Java 8、11、12、13、14 来开发项目。

云引擎 Node.js 环境新增了 internal 选项,用来禁止在客户端调用云函数。
我们还推出了一个常用功能和示例汇总代码仓库,其中包括推荐的最佳实践和常用的代码片段,每个文件中都有较为详细的注释,适合云引擎的开发者阅读、参考,也可以将代码片段复制到你的项目中使用。

推送和即时通讯

Android 混合推送现已支持 vivooppo小米推送国际版,可以覆盖更多终端用户。

我们还对即时通讯和推送服务做了一些其他改进和优化,以便为开发者提供更稳定的服务、更灵活的功能:

  • 即时通讯新增了客户端上下线 hook 支持,在客户端登录成功、登出成功、意外下线后调用。
  • 通过 SDK 新建对话默认启用 unique 参数,更贴合大多数应用的使用场景。
  • 通过 REST API 发送消息现在也支持提醒用户(mention_allmention_client_ids 参数)了。
  • 即时通讯的离线推送记录现在也加入到推送历史记录里面,可以在控制台一并查看。
  • 推送服务现在支持直接指定设备 ID 进行推送,比通过查询条件推送更快,延迟更低。
  • 开发者现在能对推送时间和推送速度(flow_control 参数)进行更精细的控制。

游戏解决方案

为了更好服务较大规模的游戏开发者,我们推出了多人对战 GameServer 的独立部署版本。独立部署的后端服务节点(集群),让业务完全独享所有的物理资源,以便给开发者带来更好的稳定性和灵活度。

相比于共享集群模式,独立部署的 GameServer 有如下优势:

  • 支持通过 hook 函数 的方式来编写服务端逻辑,业务扩展代码与 GameServer 在同一个进程内运行,与 Client Engine 方式相比在实时性上有显著提升。
  • 取消了部分使用限制,例如房间最大人数、最大消息下发频率、消息体大小限制等,在硬件能力许可范围内尽可能满足业务需求。
  • 对资源独占使用,支持自动扩容。

此外,游戏解决方案迎来了以下改进:

  • Client Engine 在完善底层架构、使用框架、文档之后,发布了正式版。
  • 排行榜增强了防作弊的策略,只放行可信环境的数据更新请求,避免被恶意刷榜。
  • 优化了游戏 SDK,简化了进入游戏大厅的逻辑,并且将消息序列化协议全部切换到 Protocol Buffers,进一步降低客户端的网络流量和传输延时。

控制台和官网

我们对控制台进行了改版,目前存储服务部分已经完成并上线。新版本的控制台,我们将存储相关的功能(如 LiveQuery、离线分析和应用内搜索)合并到了一起,对普通的结构化数据存储、文件、用户系统进行了拆分,并且将数据展示与权限设置、索引和性能优化等内容集中起来,希望控制台逻辑更清晰,可以给开发者带来便利。上文提到的云引擎统计结果展示界面的改进,就是基于新版控制台重新实现的。

此外,控制台新增了激活归档应用和注销账号功能,个人实名认证也切换到了基于支付宝客户端的方案。我们也重新设计了官网的价格页面,更加清晰、全面地展示各项服务的价格方案。

SDK

2019 年各 SDK 也发布了不少新版本,除了跟进上文提到的各服务的新功能外,主要还有以下改进:

Java

新推出的统一的 Java SDK 正式取代旧版的 Java SDK 和 Android SDK。
新版的 SDK 全面采用了 Reactive 编程风格,同时也兼容老的 Callback 方式。在 Android 平台上,新版 SDK 切换到了 AndroidX。

对于开发者担心的 Android 应用在客户端暴露 appKey 可能带来的潜在风险,我们现在允许应用程序只通过 appId 来完成 LeanCloud 服务初始化,从而避免了暴露应用核心配置信息的风险。

有些只使用推送服务的客户希望优化产品移动端体验,我们为此专门推出了精简版推送 SDK,显著优化了安装包大小(1.2 MB -> 180 KB)和启动时间(59 ms -> 5 ms)。

Swift & Objective C

Swift SDK 增加了对即时通讯、推送、云函数调用的支持,并完善了结构化存储方面的功能,在功能上基本对齐了 Android、Web 平台的 SDK。
有许多 iOS 平台的开发者已经从 Objective C SDK 迁移到 Swift SDK, 还有一些新应用直接基于 Swift SDK 开发。

Swift 语言的演进十分迅捷(swift),Swift SDK 同样如此,现已支持 Swift 5 和 Swift Package Manager。

Objective C SDK 也增加了一些功能,修复了许多 bug。

另外,为了精简代码和集中资源,Swift SDK 不再支持 iOS 10 之前的系统,Objective C SDK 不再支持 iOS 8 之前的系统。

JavaScript

JavaScript SDK 的主要改进有:

  • 小程序用户系统增加了 UnionId 支持。
  • 增加了手动启用、停用调试模式的开关:debug.enable()debug.disable()
  • AV.File#save 方法增加了 keepFileName 参数允许保留文件的文件名。
  • 增加了 AV.Object#revert 方法撤销部分或全部修改了但未保存(save)的改动。
  • MESSAGE_UPDATEMESSAGE_RECALL 事件现在会额外返回一个 reason 参数来指示修改、撤回的原因(如果有的话)。
  • 修复和完善了大量 TypeScript 定义。

C Sharp

C# SDK 的主要改进有:

  • 简化、统一 portable 和 Unity 初始化方式,现在只需要在代码中初始化,不需要在 Unity Editor 拖拽和设置。
  • 增加消息撤回/修改功能。

结语

在这一年里,许多用户通过工单、论坛、邮件等各种渠道向我们反馈问题和意见,也有用户向我们开源的 SDK 提交代码。上面提到的很多新功能、改进、优化都源于用户的反馈。感谢大家的帮助和信赖,我们期待在新的一年里为用户提供更好的产品和服务。

03-05 18:30