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 年的发展历程里,从艰难上线到找不到业务场景濒临解散,最后在双 ...
随机推荐
- 用js,css3 做的一个球
用css3属性很容易做一个立方体,但是要做一个球体,会相对复杂些 原理是:球可以看做是由无数个圆圈构成,然后就可以用圆圈来做球, 下面的例子是我做的一个小球,由72个圆圈组成.如果把每个圆圈的背景颜色 ...
- echarts动态添加数据(饼图为例)
$.ajax({type : "POST",async : false,url : '${ctx}/basic/bsAllPictureGuarantee/pictJson',da ...
- YARN学习笔记(一)——YARN的简介
YARN的简介 什么是YARN MRv1的架构和缺陷 经典MapReduce的局限性 解决可伸缩性问题 YARN的架构 一个可运行任何分布式应用程序的集群 YARN中的应用程序提交 YARN的其他特性 ...
- debian/ubuntu部署java应用小结
近期改的Java应用即将部署,为了强强联合,需要把Java应用部署到linux,我们选择了debian系列.小结一下部署的大致过程,如下: Ubuntu已经默认安装了OpenJDK,但还是比较倾向官方 ...
- Sort List leetcode
这个题一开始本想用快速排序的,但是想了20分钟都没有头绪,难点在于快速排序的随机访问无法用链表实现,不过如果可以实现快速排序partition函数就可以了,但是这可能比较复杂,于是改用其他排序方法,上 ...
- 关于使用lazytag的线段树两种查询方式的比较研究
说到线段树,想来大家并不陌生——最基本的思路就是将其规划成块,然后只要每次修改时维护一下即可. 但是尤其是涉及到区间修改时,lazytag的使用往往能够对于程序的质量起到决定性作用(Ex:一般JSOI ...
- 1692: [Usaco2007 Dec]队列变换(BZOJ1640强化版)
1692: [Usaco2007 Dec]队列变换 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 682 Solved: 280[Submit][Sta ...
- AVFoundation自定义拍照
0.AVCapture <AVFoundation/AVFoundation.h> 媒体采集需要的几个对象: 1.AVCaptureDevice: 代表抽象的硬件设备(如前置摄像头,后置 ...
- Android: Toolbar、AppBarLayout
ToolBar是google退出的一个应用程序动作条 包括: 设置导航栏图标 设置应用程序Logo 设置标题 设置子标题 添加各种自定义控件 添加动作条菜单 API:https://developer ...
- js手写图片查看器(图片的缩放、旋转、拖拽)
在做一次代码编辑任务中,要查看图片器.在时间允许的条件下,放弃了已经封装好的图片jq插件,现在自己手写js实现图片的缩放.旋转.推拽功能! 具体代码如下: <!DOCTYPE html> ...