用NodeJS开发云计算时代Web服务的真正技术难点

因为前一阵子做项目用NodeJS/express开发了一个测试服务(代码现已从github删除,无非就是一个查询MySQL的REST/JSON接口的Web服务实现),一些感想:


(1)基于NodeJS的Web服务开发实在不要太简单,其url routing、json序列化、express中间件配置,用起来都特别方便。OpenResty的作者春哥非常鄙视Node的嵌套callback的风格,但我觉得OpenResty本身的Lua编程也极其的束缚手脚,一点都不爽;


(2)但真正的技术难点在于:当用Node来查询MySQL数据库时,异步IO机制似乎无法与传统的SQL数据库CRUD/ACID事务很好的匹配上。尤其在涉及一个请求处理可能涉及到多次操纵/查询数据库表的时候。当然,如果仅仅是一次sql查询,代码还是足够清晰简单可维护的。


Web服务的客户端请求通常分为读与写两种类型。写就是通过表单收集数据,当然也可以用Ajax POST。而读通常对应于Web数据的可视化展现,甚至会涉及到复杂的Web图表/报告导出。


对于传统的MySQL 关系数据库而言,sql查询可能涉及到复杂的JOIN操作。如果为了适配异步IO框架,变成了多步操作的话,通常ACID事务性质很难正确保持。——如果做到了,那么我估计数据库后台的TPS并发性能很差的。


现在全栈开发喜欢讲一个MEAN,意思是对Node开发而言,可以改用MongoDB,而不是MySQL。我觉得对于一个普通的JSON Request Body数据来说,用MongoDB自然是小事一桩。但MongoDB本身在水平扩展的情况下也会遇到维护性问题。而且写操作是简单了,复杂的查询分析可能又会变得复杂了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值