node服务成长之路
我们的系统也从第一代平台开始到现在第四代平台更换中,对这四代平台做一个简单的介绍: 第一代平台,主要是集中式,以快速上线为目的;第二代平台主要是分布式改造,缓解各服务压力;第三代平台主要做服务端SOA治理,后台统一账户中心;第四代微服务化改造,已达到灰度上线、动态部署集中管理的目的。
引自这里 六年程序生涯
最近面试node,在一些小型企业都会问到这个问题:如果让你部署一个网站,从在阿里云买服务器到最后的上线后期维护,你一个人搞的定吗?你用node部署整个网站,整个流程需要注意哪些点.这个问题当时回答上了一部分,后来自己考量,在这里做个总结.如果有哪位觉得下面说的不对或者有补充,欢迎提出.
引子这段话是这个问题的一部分答案.我这里总结为以下几个阶段: 稳定地快速上线=> 高并发 => 安全 => 公共系统提取(多为用户系统) => 多系统之间的交互(调度系统的建设) => 其他
稳定地快速上线
这一阶段更多的是有时间作为摸底,所以很少有优化,更多情况下是跑通整个流程,尽可能的减少bug,先快速上线再说.这一阶段最重要的是做好功能测试.
高并发
处理高并发的方法从大方向上分为两种:一种是加快响应速度;另一种是减少请求数量.服务器上线以后,很容易遇到高并发的问题,node本身就是处理高并发的好手,在这方面有得天独厚的优势;以下是几种处理高并发的方法:
加快响应速度
- node的特点是异步IO,事件循环,在网络IO及文件IO中优先选择异步方式进行,能用数据流(pipe)的尽量使用数据流;
- 数据库读写分离,尽量使用索引查询;避免向客户端返回大数据,尽可能使用分页;
- nodejs子开启子进程,用于处理非主线任务(有条件另开服务器);
- 代码优化:可以搭配node压力测试工具进行代码优化apache bench;ab测试是对接口的测试,通过他我们可以完整的将一个接口在request/response间的每一步需要的时间打印出来,通过修改并发数进行测试对比,从而判断出哪段代码需要优化.这里有个小工具可能会好一些.
减少请求数量
分散请求数量.这里有个名词是负载均衡,标准是nginx.快速而又不经济的做法,可以通过更多的服务器做负载均衡;对于多核CPU,我们可以同时启动多个Nodejs进程,外部通过nginx做负载均衡;
静态资源减少请求数量
- 对于静态资源可以尽可能的走CDN或者部署到压力较小的服务器上,优先CDN,用户体验好,服务端压力小,缺点烧钱;
- 可以缓存,静态资源客户端缓存也有着减少服务器请求;
- 合并请求,减少请求数量,多指css/js;
- 页面优先只加载首屏资源或者模板资源,剩余使用ajax延后加载;
安全
- 服务端: 这方面没做过,可以直接购买阿里云或百度云的云盾服务;
- 数据安全: 数据库安全同上;注意经常备份;处理好并发控制等;
- 客户端安全: 升级网站协议为HTTPS;
公共系统提取
当我们的产品系统开发的越来越多的时候,将一些公共系统提取出来显得尤为必要,就像前端的组件化一样.一方面资源信息共享,一方面减少了开发量,加快开发效率,还促进了分工.
调度系统建设
当子系统越来越多的时候,就需要建设调度系统,来帮助管理员维护子系统间的负责通信,功能调度等.
当然后面其实还有很多内容,监控报告分析,发布与回滚(灰度发布)等等.
node服务成长之路的更多相关文章
- 绝版Node--Sequlize搭建服务(Node全栈之路)
绝版Node--Sequlize搭建服务(Node全栈之路) 参考资料:https://itbilu.com/nodejs/npm/VkYIaRPz-.html 准备环境:Mysql,Node 前沿: ...
- 绝版Node--Sequlize搭建服务(Node全栈之路 二)
在Node全栈之路(一),也就是上篇文章中,我们讲到了sequlize的基本增删该查,这篇文章,我们在上篇文章的基础上继续探讨,讲一下关于sequlize创建的表之间的对应关系 参考资料:https: ...
- Web前端工程师成长之路
一.何为Web前端工程师? 前端工程师,也叫Web前端开发工程师.他是随着web发展,细分出来的行业.Web前端开发工程师,主要职责是利用(X)HTML/CSS/JavaScript/D ...
- 【腾讯Bugly干货分享】JSPatch 成长之路
本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/579efa7083355a9a57a1ac5b Dev Club 是一个交流移动 ...
- java 成长之路[轉載u]
分享总结title: java 成长之路tags:grammar_cjkRuby: true 经验差异 1-3年 要求 建议 3-5年 建议 5年+ 经验差异 最近一年比较忙,经历了创业公司的倒闭.这 ...
- java 成长之路
分享总结 title: java 成长之路 tags: grammar_cjkRuby: true 经验差异 1-3年 要求 建议 3-5年 建议 5年+ 经验差异 最近一年比较忙,经历了创业公司的倒 ...
- aehyok.com的成长之路三——框架结构
前言 首先奉上个人网站地址传送门:aehyok.com. aehyok.com的成长之路一——开篇 中主要阐述了自己为什么建立自己的网站,以及个人网站的大致方向. aehyok.com的成长之路二—— ...
- linux小白成长之路10————SpringBoot项目部署进阶
[内容指引] war包部署: jar包部署: 基于Docker云部署. 一.war包部署 通过"云开发"平台初始化的SpringBoot项目默认采用jar形式打包,这也是我们推荐的 ...
- 阿里技术分享:阿里自研金融级数据库OceanBase的艰辛成长之路
本文原始内容由作者“阳振坤”整理发布于OceanBase技术公众号. 1.引言 OceanBase 是蚂蚁金服自研的分布式数据库,在其 9 年的发展历程里,从艰难上线到找不到业务场景濒临解散,最后在双 ...
随机推荐
- Mr.聂 带你成为web开发大牛——入门篇(上)
作为一名IT届的后生,当初也经历过懵懂无知的实习期,对那种无力感深有体会.在这,希望能用我这几年的开发经验,让各位即将踏入或者刚刚踏入web开发领域的新人们少走些弯路.鉴于这是入门篇,下面我就从零为大 ...
- linux网络编程1 最简单的socket编程
下面是socket编程的服务器端 先看一个图,1 #include<stdio.h> #include<stdlib.h> #include<string.h> # ...
- JavaScript前端最全API集锦
一.节点1.1 节点属性Node.nodeName //返回节点名称,只读Node.nodeType //返回节点类型的常数值,只读Node.nodeValue //返回Text或Comme ...
- Struts 基本概念,优点及不同版本之间的关系
strutx 1.x struts 是 apache 基金会的一个开源项目. struts 是一套实现 MVC的框架. MVC = 程序分层设计的思想 = Model(数据访问层1) / View(视 ...
- SQL函数和SQL Server2008
1.绝对值 SQL:select abs(-1) value O:select abs(-1) value from dual 2.取整(大) S:select ceiling(-1.00 ...
- java日期处理函数
java中获取本年第一天的日期 public static Timestamp getYearFirstDay() { Calendar calendar = Calendar.getInstance ...
- SQL Server里书签查找的性能伤害
在我的博客上,以前我经常谈到SQL Serverl里的书签查找,还有它们带来的很多问题.在今天的文章里,我想从性能角度进一步谈下书签查找,还有它们如何拉低你整个SQL Server性能. 书签查找—— ...
- CSS 去掉点li 的点
转:http://blog.sina.com.cn/s/blog_63b13c300100jyek.html 方法一: <ul> <li style="list-style ...
- 2.sparkSQL--DataFrames与RDDs的相互转换
Spark SQL支持两种RDDs转换为DataFrames的方式 使用反射获取RDD内的Schema 当已知类的Schema的时候,使用这种基于反射的方法会让代码更加简洁而且效果也很好. 通 ...
- require include php5中最新区别,百度上好多错的。
二者报错机制不同,include是warning 继续执行程序,require会报致命错误,中断程序运行. 前者有返回值,后者则没有. 注意了,php5里有一个区别没了,之前说的是require是无条 ...