Web 技术研究所

我一直坚信着,Web 将会成为未来应用程序的主流

后端也应该异步化

  貌似大家都很讨厌在后端程序中实现「异步」这种东西。最大的障碍就是大多数编程语言中实现「异步」比较麻烦,没人会想在业务代码中写出一坨异步代码。但有很多业务是请求数据库服务器查询多张表后再回到程序中处理数据,这种情况同步地查询每张表真的好么?
  如果机器总是处于一个 CPU 饱和的状态下运行,那么异步带来的额外开销反而会让服务器变得更慢。如果机器的 CPU 并不饱和,而是 IO 饱和,那么虽然异步 IO 不会让服务器变慢,但也只是单纯地占用资源,完全无法提升性能。只有当机器处于 CPU 和 IO 同时不饱和的情况下,异步 IO 才会带来性能提升。
  虽然结论很明显,但是我还是觉得后端程序应该尽可能地使用异步。也许是因为我写 node 比较多的缘故吧?我觉得程序优化的根本方向是更快地响应用户请求。对于节省服务器资源的优化应该是基于不影响程序响应速度的前提下进行的。以前和某前辈讨论优化时就听到过一个说法「所有能通过加机器来解决的问题都不是问题」。既然如此,就应该充分利用机器资源让程序跑得更快。
  如果一个 Web 服务器总是把 CPU 跑满,那它本身就是病态的。这样只能勉强带动业务的服务器状态经不起任何攻击,甚至无法承受流量的波动,服务器处于这种状态下工作是非常危险的。健康的服务器状态应该是有余力应对更多请求的,所以异步 IO 在正常情况下都可以让程序跑更快。或者我的想法是将异步 IO 在框架层作为一个可以降级的开关,可以视机器的负载动态地切换同异步。
  其实不仅是 node 吧,C# 可能更适合写异步,Python 3.5 也支持了 async/await 了,是不是将来应该把异步这件事重视起来呢?
网名:
3.80.55.*
电子邮箱:
仅用于接收通知
提交 悄悄的告诉你,Ctrl+Enter 可以提交哦
神奇海螺
[查看全部主题]
各类Web技术问题讨论区
发起新主题
本模块采用即时聊天邮件通知的模式
让钛合金F5成为历史吧!
次碳酸钴的技术博客,文章原创,转载请保留原文链接 ^_^