集群(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. JAVA Eclipse开发Android如何让屏幕保持为竖直或水平状态

    在Manifest.xml文件中找到activity部分,添加下面这一行 android:screenOrientation="landscape" landscape是横向,po ...

  2. Foreach嵌套Foreach速度慢优化方案

    有时候这样的效率还可以,但是只要牵涉到操作数据库,那就GAMEOVER.. 最近在维护项目,一个Foreach循环,4分半才能出来结果. 代码: foreach ($content as $key = ...

  3. codeforces 486C Palindrome Transformation 贪心求构造回文

    点击打开链接 C. Palindrome Transformation time limit per test 1 second memory limit per test 256 megabytes ...

  4. MFC的运行机理分析+ASC码问题

    Win32程序是从WinMain开始执行的,但是MFC把WinMain给封装了,不会出现在你的代码里面,他已经编译到mfc80.dll了(VS2005)了. 在MFC中的执行顺序是这样的,首先Wind ...

  5. url删除指定字符

    var str = "http://www.xxx.com/?pn=0"; // 删除指定字符 pn=0 // 我将这个字符串里所可能想到的各种情况都列举出来 var a = [ ...

  6. Android中使用HttpURLConnection实现GET POST JSON数据与下载图片

    Android中使用HttpURLConnection实现GET POST JSON数据与下载图片 Android6.0中把Apache HTTP Client全部的包与类都标记为deprecated ...

  7. gitbook 的资源同步到 github中(方便维护和备份)

    进入SETTINGS -> Github -> Select a Repository. 到这一步为止,我们可以先去我们的github,创建一个仓库先,推荐同名.然后回来gitbook中, ...

  8. oracle 推断字符是否为字母

    create or replace function ischar(chr varchar2) return varchar2 is   ischr varchar2(5); begin   sele ...

  9. 【WPF学习笔记】之如何点击“新建”按钮,在面板中加载一条条的“用户控件”的信息:动画系列之(四)

    ...... 承接上一系列动画三. 在主界面后台代码设置嵌套第二个用户控件. using System; using System.Collections.Generic; using System. ...

  10. Linux下Kafka单机安装配置方法

    Kafka是一个分布式的.可分区的.可复制的消息系统.它提供了普通消息系统的功能,但具有自己独特的设计.这个独特的设计是什么样的呢? 首先让我们看几个基本的消息系统术语: •Kafka将消息以topi ...