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 年的发展历程里,从艰难上线到找不到业务场景濒临解散,最后在双 ...
随机推荐
- c风格字符串,字符串字面值,c++字符串
C风格字符串:本质上就是以空字符null为结束符的数组 可以简单的理解为:有'\0'的是c风格字符串,无'\0'的是普通字符数组 字符串字面值:是一串常量字符,字符串字面值常量用双引号括起来的零个或多 ...
- C#的for循环使用方法
for循环是程序语言开发中常见的技法之一,这类循环可以执行指定的次数,并维护它自己的计数器,要定义for循环,需要下述信息:1.初始化计数器变量的一个起始值;2.继续循环的条件,它应涉及到计数器变量; ...
- 使用ocupload和POI一键上传Excel并解析导入数据库
使用的工具如下: JQuery ocupload jquery.ocupload-1.1.2.js Apache POI poi-3.9.jar 如果是Maven项目添加依赖如下: <depe ...
- bat文件的一些小技巧
bat文件的简介: bat文件是dos下的批处理文件.批处理文件是无格式的文本文件,它包含一条或多条命令.它的文件扩展名为 .bat 或 .cmd.在命令提示下键入批处理文件的名称,或者双击该批处理文 ...
- IP头、TCP头、UDP头详解以及定义
一.MAC帧头定义 /*数据帧定义,头14个字节,尾4个字节*/typedef struct _MAC_FRAME_HEADER{ char m_cDstMacAddress[6]; //目的m ...
- wemall doraemon中Android app商城系统向指定URL发送GET方法的请求代码
URL的openConnection()方法将返回一个URLConnection对象,该对象表示应用程序和 URL 之间的通信链接.程序可以通过URLConnection实例向该URL发送请求.读取U ...
- 当前最上层的视图控制器vc 和 当前最上层的导航控制器nav
在处理 URL Router 跳转的时候,我们经常需要得到 当前最上层的视图控制器 和 当前最上层的导航控制器 来进行视图跳转或者方法调用.- (UIViewController *)currentV ...
- iOS程序进入后台,延迟指定时间退出
程序进入后台,延迟指定时间退出 正常程序退出后,会在几秒内停止工作:要想申请更长的时间,需要用到beginBackgroundTaskWithExpirationHandlerendBackgroun ...
- ORM-Dapper学习<一>
ORM 框架简介 对象-关系映射(Object/Relation Mapping,简称ORM),是随着面向对象的软件开发方法发展而产生的.面向对象的开发方法是当今企业级应用开发环境中的主流开发方法,关 ...
- solr query的post方式
众所周知, solr 是通过 GET 方式来进行查询的. 那么solr 是否支持POST 方式进行查询呢? 通过一番调研,发现SOLR其实是支持POST方式进行查询的. 方式为: 使用form 方式提 ...