在过去的一年里,数万新用户选择了 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 功能。
云引擎统计结果展示也进行了优化,现在开发者可以在控制台按照总览、网站托管请求以及单个云函数来分别查看请求数(按分钟聚合)和响应时间的变化趋势,还可以看到整体的 CPU、内存以及流量消耗,希望在程序运行状况和代码优化上给大家提供更多参考信息。
云引擎命令行工具也发布了 0.21.0 版,修复了一些 bug,也支持指定 --prod
参数直接部署到生产环境,以及本地调试静态网站项目。
云引擎 Java 环境支持指定 Java 版本,开发者可以选用 Java 8、11、12、13、14 来开发项目。
云引擎 Node.js 环境新增了 internal
选项,用来禁止在客户端调用云函数。
我们还推出了一个常用功能和示例汇总代码仓库,其中包括推荐的最佳实践和常用的代码片段,每个文件中都有较为详细的注释,适合云引擎的开发者阅读、参考,也可以将代码片段复制到你的项目中使用。
Android 混合推送现已支持 vivo、oppo、小米推送国际版,可以覆盖更多终端用户。
我们还对即时通讯和推送服务做了一些其他改进和优化,以便为开发者提供更稳定的服务、更灵活的功能:
unique
参数,更贴合大多数应用的使用场景。mention_all
和 mention_client_ids
参数)了。flow_control
参数)进行更精细的控制。为了更好服务较大规模的游戏开发者,我们推出了多人对战 GameServer 的独立部署版本。独立部署的后端服务节点(集群),让业务完全独享所有的物理资源,以便给开发者带来更好的稳定性和灵活度。
相比于共享集群模式,独立部署的 GameServer 有如下优势:
此外,游戏解决方案迎来了以下改进:
我们对控制台进行了改版,目前存储服务部分已经完成并上线。新版本的控制台,我们将存储相关的功能(如 LiveQuery、离线分析和应用内搜索)合并到了一起,对普通的结构化数据存储、文件、用户系统进行了拆分,并且将数据展示与权限设置、索引和性能优化等内容集中起来,希望控制台逻辑更清晰,可以给开发者带来便利。上文提到的云引擎统计结果展示界面的改进,就是基于新版控制台重新实现的。
此外,控制台新增了激活归档应用和注销账号功能,个人实名认证也切换到了基于支付宝客户端的方案。我们也重新设计了官网的价格页面,更加清晰、全面地展示各项服务的价格方案。
2019 年各 SDK 也发布了不少新版本,除了跟进上文提到的各服务的新功能外,主要还有以下改进:
新推出的统一的 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 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 SDK 的主要改进有:
debug.enable()
和 debug.disable()
。AV.File#save
方法增加了 keepFileName
参数允许保留文件的文件名。AV.Object#revert
方法撤销部分或全部修改了但未保存(save)的改动。MESSAGE_UPDATE
与 MESSAGE_RECALL
事件现在会额外返回一个 reason 参数来指示修改、撤回的原因(如果有的话)。C# SDK 的主要改进有:
在这一年里,许多用户通过工单、论坛、邮件等各种渠道向我们反馈问题和意见,也有用户向我们开源的 SDK 提交代码。上面提到的很多新功能、改进、优化都源于用户的反馈。感谢大家的帮助和信赖,我们期待在新的一年里为用户提供更好的产品和服务。
本文参与了 SegmentFault思否征文「2019 总结」,欢迎正在阅读的你也加入。