基于node开发的web应用,负载均衡的简单实践
集群(cluster)是一组相互独立的、通过高速网络互联的计算机,它们构成了一个组,并以单一系统的模式加以管理。一个客户与集群相互作用时,集群像是一个独立的服务器。
负载均衡(Load Balance),其意思就是分摊到多个操作单元上进行执行
阿里云负载均衡
负载均衡好处
- 节省成本,一个服务器性能再好也是有瓶颈的,而且性能越高的服务器成本也越大。
- 极大的提高了并发量和响应速度。
实践例子
学无止境网
该web应用,由两个服务器一起提供的服务
实现负载均衡遇到的问题
- nginx负载均衡策略
- 多台服务器代码同步
- 多台服务器数据库同步
- node服务,代码更新后,服务重启
- 源的代码更新问题和数据升级
- 用户上传的图片等静态资源同步
Nginx反向代理及负载均衡
- 轮询
- 权重
- ip_hash
- url_hash
- 等等...
这里使用最简单的轮询机制,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
- 自动监听文件变化,重启node服务
- 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 "发布成功"
```
- 将git仓库和正式应用的代码地址分离
- 更新git仓库地址
- 下载程序依赖
- 将git仓库更新后的代码复制到正式发布目录
- 将代码同步更新到负载均衡服务器
- 重启服务
数据库同步
阿里 云数据库
文档地址
性能最高,有备份有容灾,功能强大,但是收费
mysql
mysql远程连接配置
配置相对简单,数据库会有性能瓶颈,免费
分布式数据库
研究中
静态资源同步
当用户通过负载均衡,被定位到了不同的服务器。这时候,上传文件时,将会把文件上传到不同的服务器中。当用户被分配到了其他服务器时,就会找不到这个文件了。所以我们需要同步负载均衡的服务器的文件。
方案一:自己实现统一文件上传管理系统,所有用户文件统一上传到一个地方。
方案二:使用阿里云的NAS文件系统管理
方案三:使用NFS系统
阿里云 NAS文件系统管理
阿里云文件存储(Network Attached Storage,简称 NAS)是面向阿里云 ECS 实例、HPC 和 Docker 等计算节点的文件存储服务,提供标准的文件访问协议,您无需对现有应用做任何修改,即可使用具备无限容量及性能扩展、单一命名空间、多共享、高可靠和高可用等特性的分布式文件系统。
缺点
缺点:收费
优点
- 配置相对简单
- 弹性伸缩,按量收费
- 阿里出品
NFS (Network FileSystem)
缺点
- 配置相对复杂
- server宕机了所有客户端都不能访问
- 在高并发下NFS效率/性能有限
- 数据是通过明文传送,安全性一般
- 对数据完整性不做验证
- 多台机器挂载NFS服务器时,连接管理维护麻烦
优点
- 免费,免费的就是好
- 节省存储空间
- 实现了多台服务器共享文件
原文地址:
https://tianshengjie.cn/artic...
来源:https://segmentfault.com/a/1190000016904024
基于node开发的web应用,负载均衡的简单实践的更多相关文章
- 基于NFS实现多WEB服务器负载均衡
实现环境: 实现原理: 共四台服务器 A,B,C,D 服务器A (CentOS 6.7): IP地址: 192.168.3.67 角色: DNS服务 说明: 为两台web服务器做域名轮询 服务器B,C ...
- 基于zookeeper的MySQL主主负载均衡的简单实现
1.先上原理图 2.说明 两个mysql采用主主同步的方式进行部署. 在安装mysql的服务器上安装客户端(目前是这么做,以后想在zookeeper扩展集成),客户端实时监控mysql应用的可用性,可 ...
- Nginx基于TCP/UDP端口的四层负载均衡(stream模块)配置梳理
通过我们会用Nginx的upstream做基于http/https端口的7层负载均衡,由于Nginx老版本不支持tcp协议,所以基于tcp/udp端口的四层负载均衡一般用LVS或Haproxy来做.至 ...
- koa : Express出品的下一代基于Node.js的web框架
https://www.liaoxuefeng.com/wiki/001434446689867b27157e896e74d51a89c25cc8b43bdb3000/001434501579966a ...
- 基于Consul+Upsync+Nginx实现动态负载均衡
基于Consul+Upsync+Nginx实现动态负载均衡 1.Consul环境搭建 下载consul_0.7.5_linux_amd64.zip到/usr/local/src目录 cd /usr/l ...
- Docker实践4: 基于nginx对后端的weblogic负载均衡
为什么要用Nginx(抄了一段) 1.nginx相对于apache的优点: 轻量级,同样起web服务,比apache占用更少的内存及资源 抗并发,nginx处理请求是异步非阻塞的,而apache则是阻 ...
- 从一个开发的角度看负载均衡和LVS--FullNat
从一个开发的角度看负载均衡和LVS 在大规模互联网应用中,负载均衡设备是必不可少的一个节点,源于互联网应用的高并发和大流量的冲击压力,我们通常会在服务端部署多个无状态的应用服务器和若干有状态的存储服务 ...
- 搞懂分布式技术9:Nginx负载均衡原理与实践
搞懂分布式技术9:Nginx负载均衡原理与实践 本篇摘自<亿级流量网站架构核心技术>第二章 Nginx负载均衡与反向代理 部分内容. 当我们的应用单实例不能支撑用户请求时,此时就需要扩容, ...
- Nginx负载均衡配置简单配置方法
http://www.jb51.net/article/121235.htm Nginx作为负载均衡服务器,用户请求先到达nginx,再由nginx根据负载配置将请求转发至不同的Web服务器.下面通过 ...
随机推荐
- python的依赖性安全性检查
1.safety 安装: pip install safety 使用: 检查整个系统的依赖包安全性safety check检查某个项目的依赖性安全safety check -r requirement ...
- GIS可视化——热点格网图
一.简介 原理:按照格网大小将区域进行划分,由一个矩形格网替代当前范围内的数据,由格网中心数字代替格网的权重(可以为格网中数据的数量,数据某权重的平均值.最大值.最小值等), 由格网之间颜色的不同表达 ...
- 常用jar包之commons-digester使用
常用jar包之commons-digester使用 学习了:https://blog.csdn.net/terryzero/article/details/4332257 注意了, digester. ...
- js 展开&收缩 二种
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Linux下自动备份MySQL数据库详细操作步骤(转载)
环境说明操作系统:CentOSIP:192.168.150.214Oracle数据库版本:Oracle11gR2用户:root 密码:123456端口:3306数据库:ts_0.ts_1.ts_2.t ...
- 我是如何通过一个 XSS 探测搜狐内网扫描内网并且蠕动前台到最后被发现的
我是如何通过一个 XSS 探测搜狐内网扫描内网并且蠕动前台到最后被发现的!(附带各种 POC) | WooYun-2014-76685 | WooYun.orghttp://wooyun.org/bu ...
- 谈 API 的撰写 - 子系统
在做一个系统时,有一些子系统几乎是必备的:配置管理,CLI,以及测试框架. 配置管理 我们先说配置管理.一个系统的灵活度,和它的配置管理是离不开的.系统中存在的大量的预置的属性(下文简称 proper ...
- vue 组件创建与销毁
vue 组件(如对话框组件)实时创建与销毁: 使用v-if <search-history :show="showSearchHistory" @close="sh ...
- 一个JavaScript Function Outliner插件 第三个版本 让你的JavaScript代码也支持折叠
下面我只以英文的vs2008版本作为实例,演示一下打开vs2008 然后一次点击:Tools->Options (工具->选项)会弹出选项设置框在左边的树目录里展开Environment- ...
- C#.Net调试时调无法“编辑并继续”
‘启用编辑并继续’的作用是允许用户在调试的过程中修改源代码,并且修改的代码会编译到调试进程中立刻生效. 在调试时,无法查到变量的值,也无法编辑,若编辑会跳出如下弹框: 解决方法: 1:如下图,选择De ...