4、集群Session一致性问题
1、Session Sticky
Session sticky就是把同一个用户在某一个会话中的请求,都分配到固定的某一台服务器中,这样我们就不需要解决跨服务器的session问题了,常见的算法有ip_hash算法,即上面提到的两种散列算法 。
- 优点:实现简单;
- 缺点:应用服务器重启则session消失 。
Session replication就是在集群中复制session,使得每个服务器都保存有全部用户的session数据 。
- 优点:减轻负载均衡服务器的压力,不需要要实现ip_hasp算法来转发请求;
- 缺点:复制时网络带宽开销大,访问量大的话Session占用内存大且浪费 。
Session数据集中存储就是利用数据库来存储session数据,实现了session和应用服务器的解耦 。
- 优点:相比Session replication的方案,集群间对于宽带和内存的压力大幅减少;
- 缺点:需要维护存储Session的数据库 。
Cookie base就是把Session存在Cookie中,由浏览器来告诉应用服务器我的session是什么,同样实现了session和应用服务器的解耦 。
- 优点:实现简单,基本免维护 。
- 缺点:cookie长度限制,安全性低,带宽消耗 。
- Nginx目前支持的负载均衡算法有wrr、sh(支持一致性哈希)、fair(lc) 。但Nginx作为均衡器的话,还可以一同作为静态资源服务器 。
- Keepalived + ipvsadm比较强大,目前支持的算法有:rr、wrr、lc、wlc、lblc、sh、dh
- Keepalived支持集群模式有:NAT、DR、TUN
- Nginx本身并没有提供session同步的解决方案,而Apache则提供了session共享的支持 。
上面我们总是假设数据库负载正常,但随着访问量的的提高,数据库的负载也在慢慢增大 。那么可能有人马上就想到跟应用服务器一样,把数据库一份为二再负载均衡即可 。
但对于数据库来说,并没有那么简单 。假如我们简单的把数据库一分为二,然后对于数据库的请求,分别负载到A机器和B机器,那么显而易见会造成两台数据库数据不统一的问题 。那么对于这种情况,我们可以先考虑使用读写分离和主从复制的方式 。
这个结构变化后也会带来两个问题:
- 主从数据库之间数据同步问题 。
- 应用对于数据源的选择问题 。
- 使用MySQL自带的Master + Slave的方式实现主从复制 。
- 采用第三方数据库中间件,例如MyCat 。MyCat是从Cobar发展而来的,而Cobar是阿里开源的数据库中间件,后来停止开发 。MyCat是国内比较好的MySql开源数据库分库分表中间件 。
数据库做读库的话,常常对模糊查找力不从心,即使做了读写分离,这个问题还未能解决 。以我们所举的交易网站为例,发布的商品存储在数据库中,用户最常使用的功能就是查找商品,尤其是根据商品的标题来查找对应的商品 。对于这种需求,一般我们都是通过like功能来实现的,但是这种方式的代价非常大,而且结果非常不准确 。此时我们可以使用搜索引擎的倒排索引来完成 。
搜索引擎具有的优点:它能够大大提高查询速度和搜索准确性 。引入搜索引擎的开销
- 带来大量的维护工作,我们需要自己实现索引的构建过程,设计全量/增加的构建方式来应对非实时与实时的查询需求 。
推荐阅读
- 浅析网站域名空间的2个知识点 网站域名空间是什么
- 整理营销推广必备的网站工具大全 网络推广工具有哪些
- 关于企业网站要做SEO的原因分析 什么是企业网站seo
- 提升网站打开速度的5个方法 怎样提升网站打开速度
- 网站推广的几大技巧 如何进行网站推广
- 免费网站制作的4个功能 如何免费网站制作
- 浅析网站收录的简介 如何让网站收录
- 分享19个做网站的网站程序 网站程序有哪些
- 分享免费的SEO针对资源 seo网站如何诊断
- 做好网站数据分析的几个方法 怎样做好网站数据分析