我想对web应用进行负载均衡,有一些问题想请教:
1. 几个web应用是不是连接同一个数据库?
2. 比如我的应用中有秒杀活动,商品的份数是一定的,绝对不能超支,那这几个web应用中应该如何进行数据同步的控制??
3. 应用中有一些数据统计和处理的操作,比如从某张表中查询某些信息,统计以及相关操作后就删掉了,那又怎么控制这几个应用不会相互影响呢?我对这个问题的想法是:关于数据处理的部分是可以独立出来的,单独跑,不和用户业务逻辑处理放在一起。不知道大家有什么别的思路。
4. 在没有用负载均衡之前,我用了一些static静态缓存,很方便,但负载均衡之后就不能用static静态缓存了,有没有一些好的缓存技术可以推荐,服务端用的,MemCache?JSC?可以多个应用同时使用并且能保证其中任何一个应用更新之后,其他应用都能及时收到最新的缓存。
谢谢大家!!
------解决方案--------------------
按一般性做法回答你:
1. 几个web应用是不是连接同一个数据库?
—— 是!分库设计是另一个高度的事情了。
2. 比如我的应用中有秒杀活动,商品的份数是一定的,绝对不能超支,那这几个web应用中应该如何进行数据同步的控制??
—— Web应用跟服务端一般来说是两个层面的东西;秒杀功能本身应该是独立服务端应用,由秒杀服务端进行独立处理,然后批量回写数据库。
—— 秒杀服务端考虑采用队列方式接收处理请求,极端情况下每个商品一个队列,每个队列有专门的单个服务器提供服务。如该服务崩溃,新的服务线程接管该队列处理,重新来过。
—— 可限制队列长度(如商品可秒杀数量×120%),超过长度的直接抛弃。
3. 应用中有一些数据统计和处理的操作,比如从某张表中查询某些信息,统计以及相关操作后就删掉了,那又怎么控制这几个应用不会相互影响呢?我对这个问题的想法是:关于数据处理的部分是可以独立出来的,单独跑,不和用户业务逻辑处理放在一起。不知道大家有什么别的思路。
—— 有策略问题,最简单的策略就是:全部依赖数据库(无缓存);
—— 面临更高并发要求时,就要权衡代价,1是牺牲一定的即时性(资讯发布类多为这种);2是使用带同步机制的缓存(要注意同步是有代价的)。
4. 在没有用负载均衡之前,我用了一些static静态缓存,很方便,但负载均衡之后就不能用static静态缓存了,有没有一些好的缓存技术可以推荐,服务端用的,MemCache?JSC?可以多个应用同时使用并且能保证其中任何一个应用更新之后,其他应用都能及时收到最新的缓存。
—— 首先尽量区分缓存的类型,第一级别的是可以直接HTML化的,这类通过Ngnix+磁盘共享来解决;
—— 应用级缓存主要是靠MemCache这类支持同步机制的解决;
—— 此外还有内存数据库;
—— 最后才是数据库级别。
------解决方案--------------------
只要算法得当,tomcat肯定不会处理不过来。
通常在软件内存中计算的,网络先瓶颈,有没有负载均衡根本无所谓。
------解决方案--------------------
第四个问题,如果用了memcache,显然memcache是按key 进行分布式缓存(如果有必要的话);否则的话,系统中就只有一个mem cache.
如果使用MemCache,并且负载均衡中的多个应用所使用的MemCache都存在一个地方(不分布),那么负载均衡中的多个应用如果同时进行 cache.put ("counter", cache.get("counter") +1); 之类的操作,会如何?如果有问题,有什么解决方案?
1. 尽可能回避这种操作
2. 这种操作一般都是计数器,牺牲实时性。即每个计数器本地先计,然后再定时写到后面的memcache中
3. 用消息机制汇总再写memcache
最后说一下,不要企图寻找万全的解决方案,那根本不存在。
------解决方案--------------------
我想对web应用进行负载均衡,有一些问题想请教:
按一般性做法回答你:
1. 几个web应用是不是连接同一个数据库?
—— 是!分库设计是另一个高度的事情了。
2. 比如我的应用中有秒杀活动,商品的份数是一定的,绝对不能超支,那这几个web应用中应该如何进行数据同步的控制??
—— Web应用跟服务端一般来说是两个层面的东西;秒杀功能本身应该是独立服务端应用,由秒杀服务端进行独立处理,然后批量回写数据库。
—— 秒杀服务端考虑采用队列方式接收处理请求,极端情况下每个商品一个队列,每个队列有专门的单个服务器提供服务。如该服务崩溃,新的服务线程接管该队列处理,重新来过。
—— 可限制队列长度(如商品可秒杀数量×120%),超过长度的直接抛弃。
对第2点,如果这样设计,估计得自己写个专门的组件了。例如:如果某个服务崩溃,让新的服务线程接管。这得有全局调度器,调度器得追踪各个任务是否崩溃……