当前位置: 首页 > news >正文

简单实现web服务器负载均衡

负载均衡建立在现有网络结构之上,提供了一种有效方式扩展服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。

本篇讲述如何利用反向代理来实现web服务器负载均衡。

以上负载均衡架构图,优点是架构较简单,缺点是没有根据业务权重设计负载。

以上负载均衡是通过均衡服务器的实际承载,响应请求数量,传输数据流量,来实现负载均衡。

各负载服务器通过svn服务器实现同步,这样他们也必须处理同步可能带来的问题。

数据库作读写分离,合理加上内存数据库。

一、下面以apache为例,简单说明负载均衡的实现。

Apache加载以下三个模块

LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
LoadModule proxy_http_module modules/mod_proxy_http.so

添加以下内容:

Listen 192.168.1.30:80
<VirtualHost 192.168.1.30:80>
	ProxyRequests Off
	Proxypass / balancer://proxy/ 
	<Proxy balancer://proxy>
		ProxySet lbmethod=byrequests
		Order Deny,Allow
		Allow from all
		BalancerMember http://192.168.1.31
		BalancerMember http://192.168.1.32
		BalancerMember http://192.168.1.33
	</Proxy>
</VirtualHost>

这里你还可以通过不同的算法实现负载均衡,比方说按照请求次数,或者按照流量均衡,这里用到的指令是lbmethod

lbmethod可能的取值有:
lbmethod=byrequests 按请求数均衡(默认值)
lbmethod=bytraffic 按流量均衡
lbmethod=bybusyness 按繁忙程度均衡

Apache还有其他策略,本篇就不多描述,当然你还可以使用nginx等等


二、服务器内容同步,可以利用svn来实现。

首先在一个服务器建立一个svn库,用于存放最新的程序,具体步骤可以参考《windows 搭建本地svn服务器》。

以后每次更新都将最新的文件发布到svn库中。

然后在负载服务器上更新即可。

因为每个负载服务器都是独立开来的,这里需要注意几个问题:

1、内容同步

主要是数据库,还好大都数据库有读写锁机制。另外一个就是上传的文件,如果是用户上传可以考虑放到一个公共的资源服务器。后台文件可以考虑svn同步更新。

2、会话同步

因为是不同服务器,一般session都以文件或者内存形式保存在本地。考虑使用memcached来共享session。

下面以php为例:

;修改php设置文件:
session.save_handler = memcache
session.save_path = "tcp://192.168.1.33:11211"


三、数据库作读写分离,合理利用内存数据库。

web服务器访问的瓶颈的很大原因在于数据库读写上,这时候可以除了做数据库查询优化,索引优化等,还可以考虑将数据库读写分离,如果内容更新太快且保存的价值不大,或者内容长时间不更新,而且经常都要读取等等,都可以考虑使用内存数据库,如memcached。


相关文章:

  • Android编程之ActivityManager: Segmentation fault
  • C# 网络编程之网页简单下载实现
  • mac 下对 iterm 终端 设置代理
  • 如何理解c和c++的复杂类型声明
  • silverlight中datagrid数据到处excel
  • Android编程之如何取得View的当前位置
  • Android4.0内存Dex数据动态加载技术
  • C# 网络编程之网页自动登录 (一).使用WebBrower控件模仿登录
  • 文章收录1
  • windows服务器应对高并发和DDOS攻击
  • 公开课可下载资源汇总
  • 将solr3.5整合到Tomcat6.x中
  • 自己写Lucene分词器原理篇——ChineseAnalyzer简单讲解
  • 一个Java程序员应该掌握的10项技能
  • 自己写Lucene分词器示例篇——写一个简单点额分析器
  • 实现windows 窗体的自己画,网上摘抄的,学习了
  • 【node学习】协程
  • Essential Studio for ASP.NET Web Forms 2017 v2,新增自定义树形网格工具栏
  • Laravel核心解读--Facades
  • React系列之 Redux 架构模式
  • ViewService——一种保证客户端与服务端同步的方法
  • 编写高质量JavaScript代码之并发
  • 不用申请服务号就可以开发微信支付/支付宝/QQ钱包支付!附:直接可用的代码+demo...
  • 高程读书笔记 第六章 面向对象程序设计
  • 机器学习学习笔记一
  • 融云开发漫谈:你是否了解Go语言并发编程的第一要义?
  • 详解移动APP与web APP的区别
  • 在electron中实现跨域请求,无需更改服务器端设置
  • 长三角G60科创走廊智能驾驶产业联盟揭牌成立,近80家企业助力智能驾驶行业发展 ...
  • ​业务双活的数据切换思路设计(下)
  • #QT(串口助手-界面)
  • $var=htmlencode(“‘);alert(‘2“); 的个人理解
  • (20)目标检测算法之YOLOv5计算预选框、详解anchor计算
  • (delphi11最新学习资料) Object Pascal 学习笔记---第7章第3节(封装和窗体)
  • (八)Flask之app.route装饰器函数的参数
  • (翻译)Quartz官方教程——第一课:Quartz入门
  • (分享)自己整理的一些简单awk实用语句
  • (附源码)apringboot计算机专业大学生就业指南 毕业设计061355
  • (附源码)ssm考试题库管理系统 毕业设计 069043
  • (数据结构)顺序表的定义
  • (转)编辑寄语:因为爱心,所以美丽
  • .helper勒索病毒的最新威胁:如何恢复您的数据?
  • .net 4.0发布后不能正常显示图片问题
  • .NET Core WebAPI中使用swagger版本控制,添加注释
  • .NET Core引入性能分析引导优化
  • .NET Project Open Day(2011.11.13)
  • .Net Remoting常用部署结构
  • .net Stream篇(六)
  • .NET/C# 中你可以在代码中写多个 Main 函数,然后按需要随时切换
  • @Autowired自动装配
  • @LoadBalanced 和 @RefreshScope 同时使用,负载均衡失效分析
  • @ModelAttribute使用详解
  • [ JavaScript ] JSON方法
  • [2013AAA]On a fractional nonlinear hyperbolic equation arising from relative theory
  • [Angular] 笔记 8:list/detail 页面以及@Input