前言
上周有幸和淘宝前端团队的七念老师做了一些NodeJS方面上的交流(实际情况其实是他电话面试了我╮(╯-╰)╭),我们主要聊到了我参与维护的一个线上NodeJS服务,关于它的现状和当下的不足。他向我提出的一些问题带给了我很大启发,尽管回答的不是很好。问题大意是,对于你意识到的这些不足,你将尝试怎样去改进它们?甚至,如果给你一个机会来重新设计这个系统服务,你将如何做?相比现在有什么的改进?
为什么说这些问题对我产生了启发,是因为这些问题是我不曾考虑过的。或者说考虑过,但没有这么严肃的考虑过。这里的“严肃”指的是具体到线上,细节,容灾容错等方面。而在电话之后我重新尝试回答这些问题的过程中又收获了不少新的知识。
这篇文章与以往的文章不同,并不是阐述某一个问题的最佳解决方案,也不会落实到具体的代码上。而是分享在探寻答案过程中收获的心得、留下的困惑还有一点个人的经验。至于这些能否拿来回答最初的那些问题我没有十足的把握,也许能,但肯定不是最佳答案。因为后端架构实在一个很有深度的话题,也是一个极其成熟的技术方向。即使有了理论方面的积累,面对千变万化的业务需求难免还是灵活的对方案进行改进,而无论是理论还是实践经验都是我欠缺的。
这段话本来应该是写在结尾,感觉顺嘴也就挂在了开头。
最后,本文的部分内容和图片参考自图书Node.js design patterns的第七章内容Scalability and Architectural Patterns。其实书中该章中的大部分内容也并非原创,但是它做了很好的汇总和迁移,具体我会在之后说明。所以如有雷同,不是巧合。
正文
一个怎样的后端服务才能算得上优秀?或者放低身段说合格?再把这个问题翻译翻译,优秀或者合格的标准是什么?
假设现在需要你用NodeJS搭建一个http服务,我猜测你会借助express框架用不到10行的代码完成这项工作。不能说这么做是错的,但这样简易的程序是脆弱的:一旦部署上线之后,可能瞬间就被大量涌入的请求击垮,更不要提各种潜在的漏洞危险。退一步说,即使线上程序经过了这一关考验,如果你要更新程序怎么办?不得不让用户中断访问一段时间?
延伸阅读
- ssh框架 2016-09-30
- 阿里移动安全 [无线安全]玩转无线电——不安全的蓝牙锁 2017-07-26
- 消息队列NetMQ 原理分析4-Socket、Session、Option和Pipe 2024-03-26
- Selective Search for Object Recognition 论文笔记【图片目标分割】 2017-07-26
- 词向量-LRWE模型-更好地识别反义词同义词 2017-07-26
- 从栈不平衡问题 理解 calling convention 2017-07-26
- php imagemagick 处理 图片剪切、压缩、合并、插入文本、背景色透明 2017-07-26
- Swift实现JSON转Model - HandyJSON使用讲解 2017-07-26
- 阿里移动安全 Android端恶意锁屏勒索应用分析 2017-07-26
- 集合结合数据结构来看看(二) 2017-07-26