我们的系统也从第一代平台开始到现在第四代平台更换中,对这四代平台做一个简单的介绍: 第一代平台,主要是集中式,以快速上线为目的;第二代平台主要是分布式改造,缓解各服务压力;第三代平台主要做服务端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延后加载;

安全

  1. 服务端: 这方面没做过,可以直接购买阿里云或百度云的云盾服务;
  2. 数据安全: 数据库安全同上;注意经常备份;处理好并发控制等;
  3. 客户端安全: 升级网站协议为HTTPS;

公共系统提取

当我们的产品系统开发的越来越多的时候,将一些公共系统提取出来显得尤为必要,就像前端的组件化一样.一方面资源信息共享,一方面减少了开发量,加快开发效率,还促进了分工.

调度系统建设

当子系统越来越多的时候,就需要建设调度系统,来帮助管理员维护子系统间的负责通信,功能调度等.

当然后面其实还有很多内容,监控报告分析,发布与回滚(灰度发布)等等.

node服务成长之路的更多相关文章

  1. 绝版Node--Sequlize搭建服务(Node全栈之路)

    绝版Node--Sequlize搭建服务(Node全栈之路) 参考资料:https://itbilu.com/nodejs/npm/VkYIaRPz-.html 准备环境:Mysql,Node 前沿: ...

  2. 绝版Node--Sequlize搭建服务(Node全栈之路 二)

    在Node全栈之路(一),也就是上篇文章中,我们讲到了sequlize的基本增删该查,这篇文章,我们在上篇文章的基础上继续探讨,讲一下关于sequlize创建的表之间的对应关系 参考资料:https: ...

  3. Web前端工程师成长之路

    一.何为Web前端工程师?        前端工程师,也叫Web前端开发工程师.他是随着web发展,细分出来的行业.Web前端开发工程师,主要职责是利用(X)HTML/CSS/JavaScript/D ...

  4. 【腾讯Bugly干货分享】JSPatch 成长之路

    本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/579efa7083355a9a57a1ac5b Dev Club 是一个交流移动 ...

  5. java 成长之路[轉載u]

    分享总结title: java 成长之路tags:grammar_cjkRuby: true 经验差异 1-3年 要求 建议 3-5年 建议 5年+ 经验差异 最近一年比较忙,经历了创业公司的倒闭.这 ...

  6. java 成长之路

    分享总结 title: java 成长之路 tags: grammar_cjkRuby: true 经验差异 1-3年 要求 建议 3-5年 建议 5年+ 经验差异 最近一年比较忙,经历了创业公司的倒 ...

  7. aehyok.com的成长之路三——框架结构

    前言 首先奉上个人网站地址传送门:aehyok.com. aehyok.com的成长之路一——开篇 中主要阐述了自己为什么建立自己的网站,以及个人网站的大致方向. aehyok.com的成长之路二—— ...

  8. linux小白成长之路10————SpringBoot项目部署进阶

    [内容指引] war包部署: jar包部署: 基于Docker云部署. 一.war包部署 通过"云开发"平台初始化的SpringBoot项目默认采用jar形式打包,这也是我们推荐的 ...

  9. 阿里技术分享:阿里自研金融级数据库OceanBase的艰辛成长之路

    本文原始内容由作者“阳振坤”整理发布于OceanBase技术公众号. 1.引言 OceanBase 是蚂蚁金服自研的分布式数据库,在其 9 年的发展历程里,从艰难上线到找不到业务场景濒临解散,最后在双 ...

随机推荐

  1. Spring框架中 配置c3p0连接池 完成对数据库的访问

    开发准备: 1.导入jar包: ioc基本jar jdbcTemplate基本jar c3p0基本jar 别忘了mysql数据库驱动jar 原始程序代码:不使用配置文件方式(IOC)生成访问数据库对象 ...

  2. mfc---手动给toolbar按钮添加消息View中

    手动给toolbar按钮添加消息View中: .h: afx_msg void OnButtonBG(); .cpp: ON_COMMAND(ID_BUTTON_BG,OnButtonBG) .cpp ...

  3. Linked List Cycle && Linked List Cycle II

    Given a linked list, return the node where the cycle begins. If there is no cycle, return null. Note ...

  4. cocos studio UI 1.6.0.0 修改导出项目路径

    因为cocos studio UI 1.6.0.0版本没有自动修改默认导出路径的功能,新建项目后默认导出的路径还是上一个项目的,每次导出都要重新设置路径很麻烦.于是考虑是否可以找到默认配置文件,终于还 ...

  5. Source Map入门教程

    部署前端之前,开发者通常会对代码进行打包压缩,这样可以减少代码大小,从而有效提高访问速度.然而,压缩代码的报错信息是很难Debug的,因为它的行号和列号已经失真.这时就需要Source Map来还原真 ...

  6. ubuntu auto mount自动挂载硬盘

    Ubuntu 挂载的文章在网上也不少,推荐一个: http://wenku.baidu.com/link?url=N2c7axijp_KYaYkt2CrZFNZPzzS8xBHLQSTUcI2F85I ...

  7. 2017 Android 面试题 [ 基础与细节 ]

    2017 Android 面试题 [ 基础与细节 ] 感谢@chuyao抛出的这些问题,平时业务代码写多了,很多基础的东西变得含糊不清了,这次裸辞出来找工作确实没有之前顺利,顺便求上海Android开 ...

  8. Jmeter BeanShell 时间格式化处理

    工作中碰到的,记录下 在XML格式的请求数据中,Soap接口请求中的日期参数格式是这样的"2016-07-20T18:03:00" 在日和时之间多了一个T 所以在Jmeter--& ...

  9. Linux(CentOS6.7) 安装MySql5.7数据库

    linux(CentOS6.7) 环境Mysql 5.7.17安装教程分享给大家,供大家参考,具体内容如下: 1系统约定安装文件下载目录:/data/softwareMysql目录安装位置:/usr/ ...

  10. Exchange无法发送邮件 未找到匹配的连接器来路由外部收件人解决办法

    使用命令行管理程序创建发送连接器 本示例创建发送连接器,用于集线器传输服务器 HubA 向 Internet 发送电子邮件.   复制 New-SendConnector -Name "In ...