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延后加载;

安全

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

公共系统提取

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

调度系统建设

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

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

转载于:https://www.cnblogs.com/zhaowinter/p/6715105.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/282351.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

将域名绑定到ip上,并实现访问不同二级子域名对应不同目录

一、将域名绑定到ip上1、环境介绍:阿里云服务器ESC(美国硅谷) 2、购买域名 3、备案 注:由于我买的是美国地区服务器,所以不用备案,如果买的国内服务器,这里需要添加一个备案操作。 4、域名实名认…

ABP vNext微服务架构详细教程(补充篇)——单层模板(中)

框架搭建2聚合服务这里我们将聚合服务命名为Domain.Core和基础服务层一致,我们先通过命令创建单层模板项目Domain.Core,这里我们删除wwwroot、Data、Entities、Localization、ObjectMapping文件夹及其所有子文件,并删除package.json文件和Ser…

谈一谈synchronized关键词

1.使用 java中的每一个对象都可以作为synchronized的锁进行代码同步,常见的形式 同步代码块锁是synchronized括号内的对象普通成员方法上,锁是当前的对象,synchronized(this)静态方法上,锁是当前类的Class对象2. 原理 synchronize…

系统学习redis之二——redis集群搭建

redis单点部署: 安装命令: # cd /usr/local/ # wget http://download.redis.io/releases/redis-4.0.1.tar.gz #下载安装包 # yum -y install gcc psmisc #安装依赖包 # tar xf redis-4.0.1.tar.gz # cd /usr/lo…

业务技术协同线上化的研发管理实战

摘要:2017年1月13日举办的【云栖计算之旅】线下沙龙第4期研发管理专场,阿里巴巴B2B事业群产品专家代平为大家带来了题为业务技术协同线上化的研发管理实战的演讲。本文主要从管理产品研发的理念开始谈起,着重说明了云效指挥部的六大步骤&…

Linux中写脚本,同时去开启我们自己设定的多个服务(含定时脚本实现)

场景介绍: 在Linux中,我们通常开启服务需要使用systemctl start 服务名 命令,这样,如果开启一个服务还好,但是如果同时开启多个服务,难免会感到麻烦,这时,我们可以自定义一个脚本&a…

Android之利用EventBus进行数据传递

在项目中,不可避免的要在两个页面之间进行数据的传递,就算不传递,也需要进行刷新之类的,我们根据Google提供的库类方法,也是可以做的,主要有广播broadcastreceiver,startactivity方法或者是appl…

负载均衡环境搭建实战之nginx和tomcat

Linux基本环境负载均衡的环境需要在linux下搭建完成,所以有一个基础的linux系统是必须的,这里建议大家按照http://edu.51cto.com/course/10209.html中的基础linux环境来安装,这样能少走弯路。JDK安装1、 下载对应版本的Java1.7,a)…

Java java.lang.SecurityException: Prohibited package name

java.lang.SecurityException: Prohibited package name 提示java错误: Exception in thread "main" java.lang.SecurityException: Prohibited package name: java.xxx 问题所在:package java.xx; 定义包时不能以java.的形式定义转载于:https…

桌面应用如何判断win11操作系统

背景Windows 11 操作系统已经正式发布快有一年了,在 .Net 开发中,我们获取操作系统版本,经常使用 Environment.OSVersion.Version.Major 和 Minor(6.1 Windows 7, 10.0 Windows 10),但是当 Win11 出现以后…

Nginx 网站定义自己的错误页面

场景: 为了给用户较好的交互和感官,我们通常需要对错误页面进行友好提示。 环境介绍: LNMP(linux(centos7.4)Nginx Mysql5.6 php7.0)实现: 这里,我直接对nginx的子配置文…

Python中的变量

1、声明变量: 1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 namewupeiqi 上述代码声明了一个变量,变量名为:name,变量name的值为“wupeiqi” 变量的作用: 为了方便操作,需要把这些数据分别用一个简…

车辆调度

为什么80%的码农都做不了架构师?>>> 车辆调度系统 大体上分为4个部分吧 1.调度车辆:你调度的时候需要的车辆,方便给你运输啥的 2.调度任务:你为啥会调度车辆,肯定要有一个任务 3.客户:那这个…

threeJS 实用

texture可以是图片和canvas,并且最终是作为material的map属性来渲染。texture的构造函数中有一个参数image(图片,canvas),使用图片的时候需要使用imageLoader加载到图片产生一个image对象,然后设置成为text…

C#爬虫-Selenium ChromeDriver 设置代理

背景开发爬虫程序,如果不做代理设置,本机的外网IP很容易被网站封掉,导致不能持续进行数据抓取。而Selenium作为动态网页抓取的利器,我们有必要了解一下,如何对它进行代理设置,并正常访问网页。解决办法1、首…

Nginx 设置,设置已经解析的域名,在nginx中没有定义相应server时的默认访问

场景介绍: 因为业务需求,我们需要对域名进行解析,这里我对域名进行了如下解析但是,因为业务需求,我可能在nginx中只定义了kuman.xiaobudiu.top 和 www.xiaobudiu.top 的相应server的子配置文件,如图那么问题…

第一次作业--四则运算题目生成程序

功能简介: 1.获取用户所要生成算术的个数 2.随机生成算式和式子的答案 3.生成算式和答案的txt文件来保存算式和答案 思路: 生成里的运算数分为三个部分,整数,如果是分数就再分为分子和分母,然后为这三个部分创建数组&a…

ABP vNext微服务架构详细教程(补充篇)——单层模板(上)订正篇

简介在之前的《ABP vNext微服务架构详细教程》系列中,我们已经构建了完整的微服务架构实例,但是在开发过程中,我们会发现每个基础服务都包含10个类库,这是给予DDD四层架构下ABP的实现方案,但是实际使用中我们会发现&am…

MyBatis Plus轻松实现数据读写分离

在现代应用程序中,数据库是至关重要的组成部分。为了提高性能和可用性,常见的数据库优化策略之一是将数据库读和写操作分离,以降低数据库服务器的负载。MyBatis Plus是一个流行的Java持久化框架,它提供了读写分离的支持,结合Spring Boot 集成多数据源的特性可以帮助你轻松…

javascript基础修炼(4)——UMD规范的代码推演

javascript基础修炼(4)——UMD规范的代码推演 1. UMD规范 地址:https://github.com/umdjs/umd UMD规范,就是所有规范里长得最丑的那个,没有之一!!!它是为了让模块同时兼容AMD和CommonJs规范而出现的&#x…