集群(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脚本,自动更新代码,一键同步更新

```#!/bin/bash
cd git仓库
git pull;
yarn install --production;
rsync -av --exclude-from=/opt/ssh/blog_exclude.list git仓库 代码发布地址
rsync -avz -e ssh /var/www/blog/ root@负载均衡服务器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

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

  1. 基于NFS实现多WEB服务器负载均衡

    实现环境: 实现原理: 共四台服务器 A,B,C,D 服务器A (CentOS 6.7): IP地址: 192.168.3.67 角色: DNS服务 说明: 为两台web服务器做域名轮询 服务器B,C ...

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

    1.先上原理图 2.说明 两个mysql采用主主同步的方式进行部署. 在安装mysql的服务器上安装客户端(目前是这么做,以后想在zookeeper扩展集成),客户端实时监控mysql应用的可用性,可 ...

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

    通过我们会用Nginx的upstream做基于http/https端口的7层负载均衡,由于Nginx老版本不支持tcp协议,所以基于tcp/udp端口的四层负载均衡一般用LVS或Haproxy来做.至 ...

  4. koa : Express出品的下一代基于Node.js的web框架

    https://www.liaoxuefeng.com/wiki/001434446689867b27157e896e74d51a89c25cc8b43bdb3000/001434501579966a ...

  5. 基于Consul+Upsync+Nginx实现动态负载均衡

    基于Consul+Upsync+Nginx实现动态负载均衡 1.Consul环境搭建 下载consul_0.7.5_linux_amd64.zip到/usr/local/src目录 cd /usr/l ...

  6. Docker实践4: 基于nginx对后端的weblogic负载均衡

    为什么要用Nginx(抄了一段) 1.nginx相对于apache的优点: 轻量级,同样起web服务,比apache占用更少的内存及资源 抗并发,nginx处理请求是异步非阻塞的,而apache则是阻 ...

  7. 从一个开发的角度看负载均衡和LVS--FullNat

    从一个开发的角度看负载均衡和LVS 在大规模互联网应用中,负载均衡设备是必不可少的一个节点,源于互联网应用的高并发和大流量的冲击压力,我们通常会在服务端部署多个无状态的应用服务器和若干有状态的存储服务 ...

  8. 搞懂分布式技术9:Nginx负载均衡原理与实践

    搞懂分布式技术9:Nginx负载均衡原理与实践 本篇摘自<亿级流量网站架构核心技术>第二章 Nginx负载均衡与反向代理 部分内容. 当我们的应用单实例不能支撑用户请求时,此时就需要扩容, ...

  9. Nginx负载均衡配置简单配置方法

    http://www.jb51.net/article/121235.htm Nginx作为负载均衡服务器,用户请求先到达nginx,再由nginx根据负载配置将请求转发至不同的Web服务器.下面通过 ...

随机推荐

  1. linux下ftp、telnet的安装和使用

    1.ftp的安装和使用 一般在各种linux的发行版中,默认带有的ftp软件是vsftp. 使用如下命令#rpm -qa | grep vsftpd可以检测出是否安装了vsftpd软件,如果没有安装, ...

  2. 规划设计系列3 | SketchUp+实景三维,方案现状一起看

    将SketchUp中建立的模型与实景三维模型进行集成,既可以充分发挥实景三维在地理空间记录方面的优势,又可以去除SketchUp在周边环境设计上的不足. 同时借助Wish3D Earth丰富的场景浏览 ...

  3. softmax函数python实现

    import numpy as np def softmax(x): """ 对输入x的每一行计算softmax. 该函数对于输入是向量(将向量视为单独的行)或者矩阵(M ...

  4. HTML5 Canvas 绘制星条旗

    代码: <!DOCTYPE html> <html lang="utf-8"> <meta http-equiv="Content-Type ...

  5. JAVA Eclipse开发Android如何让超出界面的部分自动显示滚动条

    在原有布局的最外围添加一层ScrollView,注意原有布局的声明也要删了 <ScrollView xmlns:android="http://schemas.android.com/ ...

  6. 摄像机Rtsp地址格式大全

    各厂家rtsp地址格式如下:  一. 海康.中威摄像机 格式1 主码流:rtsp://admin:12345@192.168.1.64:554/Streaming/Channels/1 子码流:rts ...

  7. glob (programming) and spool (/var/spool)

    http://en.wikipedia.org/wiki/Glob_(programming) In computer programming, in particular in a Unix-lik ...

  8. Android推断是否有sd卡

    推断手机上是否有SD卡存在.作为经常用法,写到工具类里,用时直接调用.代码例如以下: public static boolean hasSdcard(){ String state = Environ ...

  9. 一文了解@Conditional注解说明和使用

    ​ @Conditional:Spring4.0 介绍了一个新的注解@Conditional,它的逻辑语义可以作为"If-then-else-"来对bean的注册起作用. @Con ...

  10. 一起学Django之Day01

    创建项目 SimilarFacedeMacBook-Pro:PycharmProjects similarface$ django-admin startproject StudyDjango 创建A ...