仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 429|回复: 6
打印 上一主题 下一主题

[其他Linux] 来一发了解web服务器和数据库的负载平衡和反向代办署理

[复制链接]
小妖女 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 15:48:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
功能实在太强了,在配合exec参数或者通过管道重定向到xargs命令和grep命令,可以完成非常复杂的操作,如果同样的操作用图形界面的工具来完成,恐怕要多花十几陪的时间。
可是若该网站均匀每秒的哀求是200屡次,那末成绩就来了:这已是最好的web服务器了,我该怎样办?一样的情形也合用于数据库。要办理这类成绩,就必要懂得“负载平衡”的道理了。
web服务器怎样做负载平衡
为web服务器做负载平衡合用的的较多的体例是DNS重定向和反向代办署理,其他的体例道理也是很相似。
我们屡次ping一下百度,会发明复兴的IP会有所分歧,比方第一次的了局为:
.代码以下:

正在Pingbaidu.com[220.181.111.86]具有32字节的数据:
来自220.181.111.86的复兴:字节=32工夫=27msTTL=51
来自220.181.111.86的复兴:字节=32工夫=27msTTL=51
来自220.181.111.86的复兴:字节=32工夫=27msTTL=51

过一会再Ping一次,了局大概就变了:
.代码以下:

正在Pingbaidu.com[220.181.111.85]具有32字节的数据:
来自220.181.111.85的复兴:字节=32工夫=27msTTL=51
来自220.181.111.85的复兴:字节=32工夫=27msTTL=51
来自220.181.111.85的复兴:字节=32工夫=29msTTL=51

利用nslookup命令能够看到多个ip与baidu.com对应。在这里用到的就是DNS重定向手艺,道理很复杂:DNS服务器保留某域名对应的多个IP,客户端收回DNS哀求时DNS服务器依据算法将IP发还给客户端;发送回的通常为一个IP地点汇合,可是每次的排序分歧,第一次的第一个IP为201.11.11.1,第二次的第一个多是201.11.11.2,客户端利用的是第一个IP――复杂地说,就是客户端每次猎取的域名的IP大概分歧。分歧的IP对应分歧的web服务器,可是这些web服务器的内容应当是一样的。
我们从下图了解反向代办署理:


客户端向反向代办署理发送HTTP哀求报文(若该网站有域名,域名的IP是反向代办署理服务器的外网IP),反向代办署理将哀求报文随机发送给一个web服务器,web服务器将HTTP呼应报文发送给反向代办署理,反向代办署理再将这报文前往给客户端。既然如许复杂,我们就能够动手完成一个复杂的反向代办署理。
在linuxmint15下安装apache和nginx服务器,在apache的80端口的文档根目次下创立文件index.html,内容以下:
.代码以下:

<html>
<head>
<title>index</title>
</head>
<body>
<h1>hello,iamapache</h1>
</body>
</html>

在nginx的8080端口的文档根目次下创立文件index.html,内容以下:
.代码以下:

<html>
<head>
<title>index</title>
</head>
<body>
<h1>hello,iamnginx</h1>
</body>
</html>

创立源文件simple_reverse_proxy.py,内容以下:
.代码以下:

#!/usr/bin/python
#-*-encoding:utf8-*-

这是一个复杂的反向代办署理服务器

importBaseHTTPServer
importurllib2
HOST_NAME=127.0.0.1
PORT_NUMBER=8081#端口
SERVER_URL=(http://127.0.0.1:80,http://127.0.0.1:8080)
server_choice=0
classMyHandler(BaseHTTPServer.BaseHTTPRequestHandler):
defdo_GET(s):
"""responsetoaGETrequest"""
globalserver_choice
url=SERVER_URL[server_choice]
printurl
server_choice=(server_choice+1)%2
headers={User-Agent:Mozilla/4.0(compatible;MSIE5.5;WindowsNT)}
try:
req=urllib2.Request(url,None,headers)
response=urllib2.urlopen(req)
html=response.read()
#printhtml
s.send_response(200);
s.send_header("Content-type","text/html")
s.end_headers()
s.wfile.write(html)
except:
s.send_response(404);
s.send_header("Content-type","text/html")
s.end_headers()
s.wfile.write(<h2>404</h2>)
if__name__==__main__:
server_class=BaseHTTPServer.HTTPServer
httpd=server_class((HOST_NAME,PORT_NUMBER),MyHandler)
try:
httpd.serve_forever()
exceptKeyboardInterrupt:
pass
httpd.server_close()


启动apache、nginx,并运转simple_reverse_proxy.py。我们在扫瞄器中翻开http://127.0.0.1:8081,我们能够看到:


革新一下能够看到:



而simple_reverse_proxy.py会有以下信息输入:
.代码以下:

bash>>./simple_reverse_proxy.py
http://127.0.0.1:80
127.0.0.1--[05/Sep/201319:25:02]"GET/HTTP/1.1"200-
http://127.0.0.1:8080
127.0.0.1--[05/Sep/201319:25:43]"GET/HTTP/1.1"200-

固然,开源天下里已有良多优异的反向代办署理服务器了,比方Nginx。
只需了解了反向代办署理的道理,更庞大的架构也简单往完成。
数据库的负载平衡
关于年夜型网站,一个数据库体系一定会碰到没法包袱大批的读哀求、写哀求的情形。那末我们怎样来经由过程负载平衡来完成高并发的读写哀求呢?
这个中一个很好的办法就是读写分别:将底本针对一个数据库服务器的读写哀求分红读哀求和写哀求,向一个(大概多个)数据库服务器发送写哀求,向别的一个(或多个)服务器发送读哀求,这能够分明的进步呼应工夫。不外个中有一个难点,就是必需坚持多个数据库服务器中的数据是分歧的,不必忧虑,良多数据库体系已完成了这个功效。上面是一个架构示例:


上图中实在有一个写写抵触的成绩,设想以了局景:
该体系用于寄存某网站的用户注册信息,该网站不同意用户名不异,且以用户名为独一主键,以是在双数据库架构中必需触及到事件的处置。如今在这个负载平衡的数据库架构中,用户A要注册用户名为xiaoming,这个写哀求分派给了dbserver1;与此同时用户B一样注册用户名xiaoming,假如写哀求分派给了dbserver1,就不会有成绩产生,但是假如分派给dbserver2呢?两个dbserver分离寄存了分歧用户的用户名不异的用户信息!办理的办法很复杂,写哀求的分派不克不及用随机算法,应当利用哈希映照,比方注册的用户名首字母为x时,写哀求分派各dbserver2,其他写哀求一概分派给dbserver1。
别的一个成绩,这类架构为开辟使用供应了很年夜的天真性,就是这类架构不合用于某些ORM框架,办理办法就是在这个架构上再加上一层――“数据库代办署理”。比方关于MySQL,就有MySQLProxy如许的办理计划。

要明白学好linux不是一件一蹴而就的事,一定要能坚持使用它,特别是在使用初期。
若相依 该用户已被删除
沙发
发表于 2015-1-18 16:13:06 | 只看该作者
其实当你安装了一个完整的Linux系统后其中已经包含了一个强大的帮助,只是可能你还没有发现和使用它们的技巧。
简单生活 该用户已被删除
板凳
发表于 2015-1-26 23:50:53 | 只看该作者
学习Linux应具备的。[书籍+网络资源]
灵魂腐蚀 该用户已被删除
地板
发表于 2015-2-11 03:49:08 | 只看该作者
学习Linux应具备的。[书籍+网络资源]
老尸 该用户已被删除
5#
发表于 2015-3-11 00:17:21 | 只看该作者
主流Linux发行版都自带非常详细的文档(包括手册页和FAQ),从系统安装到系统安全,针对不同层次的人的详尽文档,仔细阅读文档后40%问题都可在此解决。
再现理想 该用户已被删除
6#
发表于 2015-3-17 16:56:26 | 只看该作者
任何人都可以根据自己的喜好来定制适合自己的操作系统,Linux?是抢占式多任务多用户操作系统.
愤怒的大鸟 该用户已被删除
7#
发表于 2015-3-24 15:06:25 | 只看该作者
一些显而易见的小错误还是用vi改正比较方便。以后的大一点的程序就得在Linux下调试了,因为有的头文件在VC里面说找不到。?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-9-21 06:41

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表