想问一些高并发服务器的问题

meluo
  • 216

1.现在我们一般都用nginx 做代理 做负载均衡,但是如果nginx 挂啦怎么办?
2.nginx 一般可以承受万级的并发,但是如果我现在访问量的是百万级的,那我该怎么办?
3.dns做负载均衡 配置多个ip 以后,这个ip 下的服务器挂啦以后怎么办。
4.从某种意义上来说,nginx 从 tcp/ip 模型的应用层角度去解决高并发的,lvs 应该是从网络层去做的,传输层有没有好的方案?
5.数据库如何去做负载均衡?

回复
阅读 3.5k
3 个回答
十三
  • 192
  • 1、用keepalived自己做高可用,或者使用云服务商的一些高可用产品,花费也不高的。
  • 2、流量分发。
  • 3、及时更新吧。
  • 4、高并发也分场景,有流量高并发场景,也有争抢临界资源高并发的场景,因此解决高并发并不是只通过nginx和lvs这些产品去做负载均衡和流量转发,还需要做其他的工作来减轻服务器压力,比如CDN、动静分离、缓存中间件、消息队列.....
  • 5、HAproxy可以做mysql的负载均衡,在数据库集群的基础上可以再做读写分离和分库分表,当然也可以用第三方的中间件,如MyCat。

“如何构建一个高性能、高并发的服务” 是一名Web开发者的奋斗目标。如果能真正做到这点,基本就可以算得上是架构师、大神级别了。个人觉得,有这么些优化的方向:
1、浏览器端:这块考验的是前端研发的能力。比如合理减少并发请求、图片合并(Sprite)、帮助后端承担部分计算量等等。
2、传输过程:使用CDN。通过缓存,一方面提升访问效率,一方面减少服务器端请求量。
3、智能调度:主要有三种策略 权重、轮询、主备,将请求调度到不同的服务器集群(LVS + Server List是一个服务器集群,条件允许,可以有多个,对外就一个IP,通过DNS调度到这些不同的IP)
4、服务器集群:LVS。它主要也是做调度的,所以请求量大,也不会耗费它多少性能。要是怕单点故障,可以搞个备份(keepalived实现双机热备)。LVS也可以配置多种调度策略,分别把请求调度到多个不同的真实服务器。
5、代码优化:这个没啥好说了,看程序猿的能力了。
6、缓存:合理使用缓存,将一些实时性要求不是很高的数据进行缓存,省得每次请求都查询一次数据库、计算归并一次。memcache、redis都行
7、数据库:读写分离、根据业务合理分表、分库。也可以架个keepalived 双机热备。MySQL推出了个集群(MySQL Cluster),不过我没有真正上线使用过。听说不太稳定。你可以研究研究。

暂时想到这些。大神们可以补充。如有错误,望指正。
(比较遗憾,我也是“纸上谈兵”,并没有真正去部署过。因为还没有遇到并发数那么高的项目,也不会有那些设备让我折腾)

  1. 同机房可做 lvs + keepalived
  2. 通过 DNS(或者 anycast)分散请求到不同服务器
  3. 聪明的客户端会尝试下一个 IP,笨的就访问不了啦。及时更新 DNS 吧
  4. lvs 不是传输层的么?网络层有 anycast
  5. 传统 SQL 数据库的话,读写分离、分库分表。新型数据库可以组建集群
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏