Java web 负载均衡 和 缓存?
?
1 apache + tomcat ?- 最常见和常用的方式?
apache在前端,接受请求后,通过mod_jk中配置的不同worker分发请求到不同的tomcat进一步处理。
一般是1个apache + n个tomcat ,基于tomcat自身的集群功能和mod_jk。
2 nginx + tomcat - 主流方式之一?
nging在前端,加上后端的tomcat(数量一般小于5),构成负载均衡集群方案。
?
实例: http://hi.baidu.com/hxsnoopy/blog/item/9f0011ef9cfe15fece1b3e38.html?
?
?
3 第三方工具: ?
- http://www.terracotta.org 商业方案?
?
Terracotta DSO, an advanced distributed-computing technology aimed at meeting special clustering requirements.
?
Terracotta Distributed Shared Objects (DSO) is at the core of operations in Terracotta clusters that require object identity, Terracotta object-graph roots, and other DSO technology.?
Terracotta DSO documentation describes the function, implementation, and usage of DSO in a Terracotta cluster.
?
?
4 服务器方案
- 单物理主机
- 一个apache + 多个tomcat ,使用ajp mod_jk ?实例: http://hi.baidu.com/luodaijun/blog/item/5bbe4cfb5ffef864034f56a1.html?
- 虚拟化 ?:
- 多物理主机方案
- 非虚拟化:
- 虚拟化 ?: 每台物理主机虚拟化,获得多台逻辑主机 ;在逻辑主机上部署不同的服务器,构建cluster 。
?
5 负载均衡的策略
- 基于DNS - DNS轮询,成本低?
- 反向代理 - mod_jk2 ?
- 基于NAT(Network Address Translation) - 虚拟化技术 , LVS - Linux Virtual Server?
- 硬件负载均衡 - 已较少使用,被软件方案替代
?
?
?
PS: 缓存经常:与负载均衡等话题一起出现的话题之一?
- 缓存的层次:
数据库层:空间换时间 ; 方式:普通表,内存表
应用层: 常见有 数据库查询结构缓存,磁盘文件数据缓存,耗时计算的数据缓存;?
按架构 分为 嵌入式 和 分布式 ;
分布式缓存 可分:
按应用切分数据到不同缓存服务器,
按规则(hash, route)把数据存储到不同的缓存服务器,
代理模式:应用在获取数据的时候都由代理透明的处理,缓存机制有代理服务器来处理
工具:Memcache、共享文件服务器、MemcacheDb、Tokyo Tyrant;以及语言相关的其他实现。
前端:主要对静态文件缓存,如CDN技术,squid等 ; 工具:squid,Varnish Cache,ncache
客户端:浏览器缓存?
- 缓存:更新 - 被动,主动,二者结合 ;过期 - 时间过期,基于规则的过期 ?
- 缓存评价:速度、及时性、命中率
- 缓存方案:Memcached, Tokyo Tyrant?
?
- 对于负载的分发有多种算法,下面是一些较为常用的算法:
round-robin轮循
random随机
weight-based权重
minimumload最小负载
lastaccesstime最后访问时间
programmaticparameter-based负载均衡器根据方法中的参数来选择服务器