源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

理解web服务器和数据库的负载均衡以及反向代理

  • 时间:2022-07-04 21:22 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:理解web服务器和数据库的负载均衡以及反向代理
但是若该网站平均每秒的请求是200多次,那么问题就来了:这已经是最好的web服务器了,我该怎么办?同样的情景也适用于数据库。要解决这种问题,就需要了解“负载均衡”的原理了。 [b]web服务器如何做负载均衡[/b] 为web服务器做负载均衡适用的的较多的方式是DNS重定向和反向代理,其他的方式原理也是很类似。 我们多次ping一下百度,会发现回复的IP会有所不同,例如第一次的结果为:
[url=http://127.0.0.1:8081]http://127.0.0.1:8081[/url],我们可以看到: [img]http://files.jb51.net/file_images/article/201404/2014426130700192.png?201432613716[/img] 刷新一下可以看到: [img]http://files.jb51.net/file_images/article/201404/2014426130734813.png?201432613743[/img] 而simple_reverse_proxy.py会有以下信息输出:
[u]复制代码[/u] 代码如下:
bash >> ./simple_reverse_proxy.py http://127.0.0.1:80 127.0.0.1 - - [05/Sep/2013 19:25:02] "GET / HTTP/1.1" 200 - http://127.0.0.1:8080 127.0.0.1 - - [05/Sep/2013 19:25:43] "GET / HTTP/1.1" 200 -
当然,开源世界里已经有很多优秀的反向代理服务器了,例如Nginx。 只要理解了反向代理的原理,更复杂的架构也容易去实现。 数据库的负载均衡 对于大型网站,一个数据库系统肯定会遇到无法负担大量的读请求、写请求的情况。那么我们怎么来通过负载均衡来实现高并发的读写请求呢? 这其中一个很好的方法就是读写分离:将原本针对一个数据库服务器的读写请求分成读请求和写请求,向一个(或者多个)数据库服务器发送写请求,向另外一个(或多个)服务器发送读请求,这可以明显的提高响应时间。不过其中有一个难点,就是必须保持多个数据库服务器中的数据是一致的,不用担心,很多数据库系统已经实现了这个功能。下面是一个架构示例: [img]http://files.jb51.net/file_images/article/201404/2014426130807138.png?201432613819[/img] 上图中其实有一个写写冲突的问题,想象以下场景: 该系统用于存放某网站的用户注册信息,该网站不允许用户名相同,且以用户名为唯一主键,所以在单数据库架构中必须涉及到事务的处理。现在在这个负载均衡的数据库架构中,用户A要注册用户名为xiaoming,这个写请求分配给了db server 1;与此同时用户B同样注册用户名xiaoming,如果写请求分配给了db server1,就不会有问题发生,可是如果分配给db server 2呢?两个db server分别存放了不同用户的用户名相同的用户信息!解决的方法很简单,写请求的分配不能用随机算法,应该使用哈希映射,例如注册的用户名首字母为x时,写请求分配各 db server2,其他写请求一律分配给db server 1。 另外一个问题,这种架构为开发应用提供了很大的灵活性,就是这种架构不适用于某些ORM框架,解决方法就是在这个架构上再加上一层——“数据库代理”。例如对于MySQL,就有MySQL Proxy这样的解决方案。
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部