我在微软使用 TypeScript 开发了 Azure Storage JS SDK,SDK 可以在前端浏览器环境中使用,或者后端 Node.js 使用。
说实话,一旦开始使用 TS,就很难再回到 JS。尤其是需要多人协作的大型项目。无论 JS 前端还是 Node.js 后端,TS 可以避开很多 JS 的坑。比如 TS 编译可以选择输出的 ECMA 版本,以及输出的 JS 模块规范。结合 Visual Studio Code 对 TS 完美支持,开发过程还是很不错的。
我现在正在做一个基于 Node.js 的轻量化开源的 Azure Storage 实现[Azurite](
https://github.com/azure/azurite),使用 TypeScript。线上的 Azure Storage 对象存储服务是一个典型的分布式系统,而 Azurite 第一个 preview 版本则是 Node.js 典型单进程架构,但得益于 Node.js 高效的 IO 性能,测试中数据上传下载最高可以到达 250MB/s,此时单核 CPU 已经被吃满。
由于整个系统的瓶颈在于 CPU,现在正在做分布式化的探索,但可能会遇到不同节点的竞争问题,比如同时访问并修改同一个 blob 的属性。现在初步预计的方向有三种,1) 分布式锁 2) 数据库事务 3) 通过优化数据结构避免竞争。基本上这三种都有成熟的第三方库。有兴趣的同学可以一起讨论或贡献代码。