`
andrew913
  • 浏览: 188811 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

大家来谈谈关于负载均衡的设计

阅读更多
最近要搞一个负载均衡,看了下ipvs ( lvs ) 的介绍:但是非常遗憾,ipvs只是做了IP层的负载均衡,无法做到基于URL的负载。

我找了,网上都推荐ipvs+nginx来完成基于url的负载均衡。

自己总结了一下:大概是一下的模式:

    一台做做 IPVS的机器(或者加一台备份机器)=====》多台装有nginx的机器(做反向代理)==》N台web服务器

听网上说:IPVS只做ip层的解析,效率应该不成问题。而对于nginx,需要做应用层协议的解析(找到相应的URL,hostname等),效率要低些,听说一般的机器能承受2-3W个链接。下面是就web服务器,这里暂时不讨论。

我没看过nginx的源码,但是大概了解了下,估计就是一种数据转发,这种基于应用层的数据转发,效率都会有问题,应为一个有内容的链接都要经过两次的内核空间与用户空间的切换。这样一来效率就有所下降了。

我在想,能不能把nginx的这层的数据转发也做到内核空间里面去。
例如:当一台机器接受到从IPVS 转发过来的包的时候,通过SKB直接读取到应用层的数据,在根据这些内容做相应的转发,这在netfilter里面应该可以实现吧?

对于上面的内容我想做一些效率的优化:

1.只对某种端口的链接进行处理(例如HTTP等),这样可以大大减少过滤的包。

2.做一个hash表,记录连接的5元组等信息,这条连接在hash 表里面保存一段的时间。例如一个链接来了,马上对这个链接进行hash查找,如果在hash表里面,直接转发到相应的机器,以免过多的过滤而影响效率。
对于这一条,一般的http请求在三次握手后的两个包就会包含url等信息(除了https).所以我们需要过滤的包并不是很多。


这样一样来,就可以不用nginx 了,我感觉这样的效率应该要高于实现与用户空间的nginx.

大家来看看我这样设计有没有价值,我没搞过(只做过ipvs),只是随便想想的。希望大家来一起讨论下这个实现的一些问题。或者说市面上有没有相关的开源产品。

各路神仙都过来讨论讨论啊。
分享到:
评论
6 楼 andrew913 2009-08-10  
另一方面一定要考虑,如果这个模块死了,怎么办?按你的思路,负载均衡只有这一台机器,死了服务就挂了……

=========
做 ipvs 这里是要有一台做备份的。
而后面做七层解析解析的机器,挂了是没事的,做ip转发的机器是有监控功能。

如果内核代码健壮的话,挂的几率应该是小于用户空间的daemon进程的。

ps: 不能因为怕 kernel panic而否决内核实现的。
5 楼 Magicloud 2009-08-10  
andrew913 写道
Magicloud 写道
不要什么都放到内核空间,无法保证的代码健壮性只会导致死机。


这个我知道,但是我觉的这样的设计能大幅提升效率,只是一个思路而已。

后来去网上查了下

tcp splicing 已经实现了内核的代理,其实只要在内核做下负载均衡算法就可以了,代价不是很高。

后来又发现,l7sw貌似已经实现了我的想法。

具体代码还没看,准备马上去看下。

感觉有搞头。

使用内核空间无非就是为了提高效率,但反过来,提高效率却有其它许多种做法……
一方面我们要相信我们有能力做出稳定的内核模块;
另一方面一定要考虑,如果这个模块死了,怎么办?按你的思路,负载均衡只有这一台机器,死了服务就挂了……

现在流行分布式,据我所知也确实有分布式的负载均衡方案,既降低硬件成本,又不用使用内核空间。
4 楼 seen 2009-08-10  
从研发的乐趣来看,没什么搞头。基本上属于体力活。
3 楼 andrew913 2009-08-09  
而且这样搞,貌似可以顺带做些防DDOS的一些策略。
2 楼 andrew913 2009-08-09  
Magicloud 写道
不要什么都放到内核空间,无法保证的代码健壮性只会导致死机。


这个我知道,但是我觉的这样的设计能大幅提升效率,只是一个思路而已。

后来去网上查了下

tcp splicing 已经实现了内核的代理,其实只要在内核做下负载均衡算法就可以了,代价不是很高。

后来又发现,l7sw貌似已经实现了我的想法。

具体代码还没看,准备马上去看下。

感觉有搞头。
1 楼 Magicloud 2009-08-09  
不要什么都放到内核空间,无法保证的代码健壮性只会导致死机。

相关推荐

    Apache与Tomcat集群,伪静态,负载均衡

    负载均衡是一种分布式系统设计策略,其目的是将工作负载分散到多个计算资源上,以避免单一节点过载,确保服务的持续性和可用性。Apache可以配置为负载均衡器,通过mod_proxy_balancer模块,根据不同的策略(如轮询、...

    activemq配置组合队列(复制)、负载均衡

    然后,我们要谈谈负载均衡。在ActiveMQ中,可以通过网络连接器(Network Connector)实现负载均衡。网络连接器允许不同的ActiveMQ集群之间交换消息,从而达到负载均衡的效果。上述配置中的`networkConnector`就是...

    35_dubbo支持哪些负载均衡、高可用以及动态代理的策略?.zip

    首先,让我们来看一下Dubbo的负载均衡策略。负载均衡是分布式系统中确保服务平稳运行的关键组成部分,它能够有效地分配请求到不同的服务器,避免单点过载,提高系统的整体性能和可靠性。Dubbo内置了多种负载均衡算法...

    distributed-system-framework:这是一个基于Linux平台,C ++编写的分布式系统。服务器端采用了线程池+ Libevent的IO模型,并因此实现了简单的负载均衡。服务器端业务层使用了MVC的设计模式。数据存储方面对MySQL数据库C-API进行了C ++的类封装。

    在具体谈整个项目的工作流程前,先来谈谈客户端到底是如何如服务器建立连接的。在未实现负载均衡服务器前,通常我们会为客户端指定服务器的IP地址和端口,直接连接。但是这样存在的问题是服务器当并发量大到一定的...

    网站架构及高性能并发服务器设计

     用负载均衡技术建设高负载站点 20  大型网站的架构设计问题 25   开源平台的高并发集群思考 26  大型、高负载网站架构和应用初探 时间:30-45分钟 27  说说大型高并发高负载网站的系统架构 28 好的案例...

    大型门户网站站架构心得-腾讯-百度-新浪-谷歌网站

    再来谈谈“负载均衡”,这是保持系统稳定性和高可用性的基石。新浪新闻网站就广泛使用了负载均衡技术,通过将流量分散到多个服务器,防止单一节点过载,保证服务的持续性。同时,负载均衡还能实现故障转移,当某个...

    电梯毕业设计,很难搜集到的.zip

    接着,我们来谈谈CAD图纸在电梯设计中的应用。CAD(Computer-Aided Design)技术在现代工程设计中起着至关重要的作用。在电梯设计中,设计师会利用CAD软件绘制电梯的结构图、电气布局图、曳引机安装图、控制系统电路...

    集合go的编程技巧 分布式 数据库MySQL Linux操作系统讲解 设计模式 主流的框架设计,结构设计.zip

    分布式系统涉及节点间的通信、负载均衡、数据一致性、容错性和扩展性等问题。学习如何使用Go语言构建分布式系统,如使用gRPC进行RPC通信,理解CAP定理以及Paxos和Raft等一致性算法,对于开发大规模系统至关重要。 ...

    谈谈微服务架构和开源.pdf

    此外,文档提到了一些微服务架构中的组件和服务,如代理层的接入层,包括LVS、NGINX、HA-Proxy和Apache等,这些组件往往被用于实现负载均衡和反向代理。API网关(API GW)作为服务层和客户端之间的中介,提供了路由...

    网站设计与管理精品课件

    此外,课程还可能涉及网站性能优化,如代码优化、缓存策略、负载均衡等。网络安全也是重要的部分,包括防火墙配置、防止SQL注入和跨站脚本攻击等。最后,可能还会介绍一些现代Web开发的趋势,如响应式设计、AJAX异步...

    谈谈微服务中的APIGateway-Savorboard-博客园1

    5. **负载均衡**:在客户端与微服务之间进行负载均衡。 6. **安全控制**:提供统一的身份验证和授权机制。 7. **流量控制**:实施限流策略,防止系统过载。 8. **缓存**:提高数据响应速度,减轻后端压力。 9. **...

    互联网高频Java后端面试题20道(适合1~3年)V1.0.76.docx

    在互联网应用中,常见的负载均衡实现方式包括硬件负载均衡器、软件负载均衡器(如 Nginx、HAProxy)以及云服务提供的负载均衡解决方案。解析:负载均衡是大型系统中不可或缺的一部分,它能够提高系统的整体性能和...

    本专生WEB网站SSH框架毕业设计学生选课系统实现

    2. 性能优化:考虑到选课期间可能会有大量并发访问,系统需要具备良好的负载均衡和缓存策略,以保证在高流量下的稳定运行。 3. 安全性:系统需要保护学生的个人信息和选课数据,防止未授权的访问和修改。这包括使用...

    云平台架构专题:谈谈服务治理(24页).pdf

    服务发现允许系统动态识别和定位服务实例,而负载均衡则将请求分发到不同的服务实例上,以避免单点过载,提高整体系统的容错能力。这通常通过自动化工具如DNS或专门的服务注册与发现组件来实现。 【配置中心化及...

    毕业设计 计算机专业- JAVA社区网络服务系统(源代码+论文)

    8. **性能优化**:缓存技术(如Redis)可以提高数据访问速度,负载均衡和集群部署能应对高并发访问。 9. **测试**:单元测试、集成测试确保代码质量,性能测试评估系统承载能力。 10. **论文撰写**:论文需要阐述...

    springcloud-model之Feign.zip

    Ribbon是Netflix的一个负载均衡器,主要用于客户端的负载均衡。在Spring Cloud中,Ribbon常与Eureka结合使用,从服务注册中心获取服务列表,然后根据策略选择一个服务实例进行调用。Ribbon提供了多种策略,如轮询、...

    谈谈业务中使用分布式的场景1

    **应用服务层**:为解决并发量带来的性能瓶颈,可以采用应用系统集群,通过负载均衡分配请求到多台服务器。同时,session共享问题需要通过服务器插件或中间件(如Redis)解决。服务化拆分是另一个有效手段,通过...

    高性能高并发服务器架构大全

    大家对于这种情况如何来设计数据库呢?把一个表分成多个表么?那么查询和插入数据库又有什么技巧呢? 谢谢,村里面的兄弟们! 183  方案探讨,关于工程中数据库的问题. 184  web软件设计时考虑你的性能解决...

    微服务 springcould_03

    接下来,我们谈谈Spring Cloud中的负载均衡和熔断机制。Ribbon是客户端负载均衡器,可以与Eureka结合使用,自动选择一个可用的服务实例进行请求。Hystrix是断路器库,它防止因服务故障而导致的级联失败,通过隔离...

    Java企业级开发课程设计

    3. **性能优化**:通过缓存技术(如Spring Cache)和负载均衡策略,可以提高系统的响应速度和并发处理能力。 4. **测试**:单元测试和集成测试是保证代码质量的重要手段,JUnit和Mockito等工具可以帮助我们编写和...

Global site tag (gtag.js) - Google Analytics