基于node开发的web应用,负载均衡的简单实践

集群(cluster)是一组相互独立的、通过高速网络互联的计算机,它们构成了一个组,并以单一系统的模式加以管理。一个客户与集群相互作用时,集群像是一个独立的服务器。

负载均衡(Load Balance),其意思就是分摊到多个操作单元上进行执行

阿里云负载均衡

架构文档

负载均衡好处

  1. 节省成本,一个服务器性能再好也是有瓶颈的,而且性能越高的服务器成本也越大。
  2. 极大的提高了并发量和响应速度。

实践例子

学无止境网
该web应用,由两个服务器一起提供的服务

实现负载均衡遇到的问题

  1. nginx负载均衡策略
  2. 多台服务器代码同步
  3. 多台服务器数据库同步
  4. node服务,代码更新后,服务重启
  5. 源的代码更新问题和数据升级
  6. 用户上传的图片等静态资源同步

Nginx反向代理及负载均衡

  1. 轮询
  2. 权重
  3. ip_hash
  4. url_hash
  5. 等等...

这里使用最简单的轮询机制,session存放在数据库,解决了session服务器之间不同步的问题。


upstream tianshengjie{
    server ip地址;
    server ip地址 max_fails=2 fail_timeout=10s;
}

server {
    listen 80 default_server;
    server_name 47.99.90.167 www.tianshengjie.cn tianshengjie.cn;
    location / {
        proxy_pass http://tianshengjie;
        proxy_cache_key $http_range$uri$is_args$args;

        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

服务部署


forever start -c nodemon app.js --exitcrash

forever

A simple CLI tool for ensuring that a given script runs continuously
守护node进程程序

nodemon

  1. 自动监听文件变化,重启node服务
  2. exitcrash,当node服务奔溃后,重启

代码同步

使用shell脚本,自动更新代码,一键同步更新

cd git仓库
git pull;
yarn install --production;
rsync -av --exclude-from=/opt/ssh/blog_exclude.list git仓库 代码发布地址
rsync -avz -e ssh /var/www/blog/ [email protected]负载均衡服务器ip:负载均衡服务器发布代码目录
cd 代码发布地址 ;
forever stop  app.js;
npm run start;
echo "发布成功"
  1. 将git仓库和正式应用的代码地址分离
  2. 更新git仓库地址
  3. 下载程序依赖
  4. 将git仓库更新后的代码复制到正式发布目录
  5. 将代码同步更新到负载均衡服务器
  6. 重启服务

数据库同步

阿里 云数据库

文档地址
性能最高,有备份有容灾,功能强大,但是收费

mysql

mysql远程连接配置
配置相对简单,数据库会有性能瓶颈,免费

分布式数据库

研究中

静态资源同步

当用户通过负载均衡,被定位到了不同的服务器。这时候,上传文件时,将会把文件上传到不同的服务器中。当用户被分配到了其他服务器时,就会找不到这个文件了。所以我们需要同步负载均衡的服务器的文件。

方案一:自己实现统一文件上传管理系统,所有用户文件统一上传到一个地方。
方案二:使用阿里云的NAS文件系统管理
方案三:使用NFS系统

阿里云 NAS文件系统管理

阿里云文件存储(Network Attached Storage,简称 NAS)是面向阿里云 ECS 实例、HPC 和 Docker 等计算节点的文件存储服务,提供标准的文件访问协议,您无需对现有应用做任何修改,即可使用具备无限容量及性能扩展、单一命名空间、多共享、高可靠和高可用等特性的分布式文件系统。

配置挂载

缺点

缺点:收费

优点
  1. 配置相对简单
  2. 弹性伸缩,按量收费
  3. 阿里出品

NFS (Network FileSystem)

配置文档

缺点
  1. 配置相对复杂
  2. server宕机了所有客户端都不能访问
  3. 在高并发下NFS效率/性能有限
  4. 数据是通过明文传送,安全性一般
  5. 对数据完整性不做验证
  6. 多台机器挂载NFS服务器时,连接管理维护麻烦

优点

  1. 免费,免费的就是好
  2. 节省存储空间
  3. 实现了多台服务器共享文件

原文地址:
https://tianshengjie.cn/artic...

来源:https://segmentfault.com/a/1190000016904024

原文地址:https://www.cnblogs.com/qixidi/p/10164174.html

时间: 2024-11-08 23:49:12

基于node开发的web应用,负载均衡的简单实践的相关文章

利用lvs-nat实现两台web服务器负载均衡的简单案例

写在前面:如果此文有幸被某位朋友看见并发现有错的地方,希望批评指正.如有不明白的地方,愿可一起探讨. 案例拓扑图 配置主机1 安装ipvsadm # yum -y install ipvsadm # ipvsadm -A -t 10.170.2.80:80 -s rr # ipvsadm -a -t 10.170.2.80:80 -r 192.168.3.101 -m # ipvsadm -a -t 10.170.2.80:80 -r 192.168.3.102 -m # echo 1 > /p

基于zookeeper的MySQL主主负载均衡的简单实现

1.先上原理图 2.说明 两个mysql采用主主同步的方式进行部署. 在安装mysql的服务器上安装客户端(目前是这么做,以后想在zookeeper扩展集成),客户端实时监控mysql应用的可用性,可用时想zookeepercreateNode,当网络不可用或者mysql应用不可用时,建立的znode消失. 在客户端,通过改造proxool数据库连接池的方式,在建立连接之前,从zookeeper中去取真实的数据库URL,如果有多个URL,即有多个服务时,采用随机算法去拿连接(以后准备扩展权重).

LVS详解及基于LVS实现web服务器负载均衡

前言 LVS(Linux Virtual Server)Linux虚拟服务器,是一个虚拟的服务器集群系统.本项目在1998年5月由章文嵩博士成立,是中国国内最早出现的自由软件项目之一.通过LVS提供的负载均衡技术和Linux操作系统可实现一个高性能.高可用的服务器群集,从而以低成本实现最优的服务性能. 集群基础 集群简介 集群(Cluster)是一组相互独立的.通过高速网络互联的计算机,它们构成了一个组,并以单一系统的模式加以管理.一个客户与集群相互作用时,集群像是一个独立的服务器.集群配置是用

LAMP平台基于NFS实现web服务器负载均衡

前言 随着访问量的逐渐增大,一台web服务器可能已经无法满足需求,这就需要增加web服务器的数量了,于是问题就来了:如何保证两台服务器数据同步呢?本文将讲解如何基于NFS实现web服务器的负载均衡及数据同步. NFS服务介绍 NFS(Network File System)网络文件系统,允许一个系统通过网络共享目录和文件,通过使用NFS,用户和程序可以像访问本地文件一样访问远端系统上的文件.NFS本身没有提供数据传输的功能,必须借助于远程过程调用(RPC)协议来实现数据的传输. 配置文件 NFS

CentOS 6.5实现LAMP+NFS双web服务负载均衡

CentOS 6.5实现LAMP+NFS双web服务负载均衡 环境说明: CentOS 6.5最小化安装,安装相应的组件: [[email protected] ~]# yum groupinstall -y"Development tools" [[email protected] ~]# yum groupinstall -y"Server Platform Development" 准备三台主机: httpa: 192.168.1.217  搭建web服务器

分布式进阶(十九) 基于集群的动态反馈负载均衡策略

基于集群的动态反馈负载均衡策略 基于动态反馈机制的集群负载均衡算法研究 目前应用最为广泛的集群计算技术主要分为三大类:高可用性集群技术.高性能计算集群技术和负载均衡集群技术. 德国的CarlAdamPetri于1962年在他的博士论文<自动机通信>中提出了Petri网的概念,它是一种适合于描述异步.并发.分布式系统的图形数学工具. 动态WRR调度算法 这是一个目前普遍使用的调度算法,算法在WRR的基础上加入了根据服务器端的负载信息周期性地调整服务器性能权值的过程.其基本思想是:根据CPU利用率

公司网络web服务器负载均衡解决方案

公司网络web服务器负载均衡解决方案 随着公司产品业务的推广发展壮大,对服务器的硬件性能.相应速度.服务稳定性.数据可靠性的要求越来越高.今后服务器的负载将难以承受所有的访问.从公司的实际情况,运营成本网络安全性考虑,排除使用价格昂贵的大型服务器.以及部署价格高昂的专用负载均衡设备. DNS轮询负载均衡解决方案虽然成本低廉但是安全性能不是很好,加上公司产品的特殊性需要用户验证的体系,在会话保持方面是一大缺陷,会话保持,如果是需要身份验证的网站,在不修改软件构架的情况下,这点是比较致命的,因为DN

Nginx基于TCP/UDP端口的四层负载均衡(stream模块)配置梳理

Nginx基于TCP/UDP端口的四层负载均衡(stream模块)配置梳理 通常我们会用Nginx的upstream做基于http/https端口的7层负载均衡,由于Nginx老版本不支持tcp协议,所以基于tcp/udp端口的四层负载均衡一般用LVS或Haproxy来做.至于4层负载均衡和7层负载均衡的区别,可以参考:http://www.cnblogs.com/kevingrace/p/6137881.html.然而Nginx从1.9.0版本开始,新增加了一个stream模块,用来实现四层协

apache基于mod_jk模块实现代理及负载均衡Tomcat Cluster

一.基于mod_jk模块实现apache代理tomcat 上篇博文已经学习了nginx代理和负载均衡tomcat及apache基于mod_proxy模块代理tomcat; 现在来学习下apache基于mod_jk模块实现代理及负载均衡Tomcat Cluster 1.基于httpd代理tomcat时可以使用httpd的两个模块 1)mod_jk:第三方模块 mod_jk是ASF的一个项目,是一个工作于apache端基于AJP协议与Tomcat通信的连接器,它是apache的一个模块,是AJP协议