专注收集记录技术开发学习笔记、技术难点、解决方案
网站信息搜索 >> 请输入关键词:
您当前的位置: 首页 > 高性能WEB开发

关于Web应用负载均衡及数据共享的几个小问题

发布时间:2010-05-20 14:01:29 文章来源:www.iduyao.cn 采编人员:星星草
关于Web应用负载均衡及数据共享的几个问题
我想对web应用进行负载均衡,有一些问题想请教:
1. 几个web应用是不是连接同一个数据库?
2. 比如我的应用中有秒杀活动,商品的份数是一定的,绝对不能超支,那这几个web应用中应该如何进行数据同步的控制??
3. 应用中有一些数据统计和处理的操作,比如从某张表中查询某些信息,统计以及相关操作后就删掉了,那又怎么控制这几个应用不会相互影响呢?我对这个问题的想法是:关于数据处理的部分是可以独立出来的,单独跑,不和用户业务逻辑处理放在一起。不知道大家有什么别的思路。
4. 在没有用负载均衡之前,我用了一些static静态缓存,很方便,但负载均衡之后就不能用static静态缓存了,有没有一些好的缓存技术可以推荐,服务端用的,MemCache?JSC?可以多个应用同时使用并且能保证其中任何一个应用更新之后,其他应用都能及时收到最新的缓存。

谢谢大家!!
------解决方案--------------------
引用:
我想对web应用进行负载均衡,有一些问题想请教:

按一般性做法回答你:

1. 几个web应用是不是连接同一个数据库?
—— 是!分库设计是另一个高度的事情了。

2. 比如我的应用中有秒杀活动,商品的份数是一定的,绝对不能超支,那这几个web应用中应该如何进行数据同步的控制??
—— Web应用跟服务端一般来说是两个层面的东西;秒杀功能本身应该是独立服务端应用,由秒杀服务端进行独立处理,然后批量回写数据库。
—— 秒杀服务端考虑采用队列方式接收处理请求,极端情况下每个商品一个队列,每个队列有专门的单个服务器提供服务。如该服务崩溃,新的服务线程接管该队列处理,重新来过。
—— 可限制队列长度(如商品可秒杀数量×120%),超过长度的直接抛弃。

3. 应用中有一些数据统计和处理的操作,比如从某张表中查询某些信息,统计以及相关操作后就删掉了,那又怎么控制这几个应用不会相互影响呢?我对这个问题的想法是:关于数据处理的部分是可以独立出来的,单独跑,不和用户业务逻辑处理放在一起。不知道大家有什么别的思路。
—— 有策略问题,最简单的策略就是:全部依赖数据库(无缓存);
—— 面临更高并发要求时,就要权衡代价,1是牺牲一定的即时性(资讯发布类多为这种);2是使用带同步机制的缓存(要注意同步是有代价的)。

4. 在没有用负载均衡之前,我用了一些static静态缓存,很方便,但负载均衡之后就不能用static静态缓存了,有没有一些好的缓存技术可以推荐,服务端用的,MemCache?JSC?可以多个应用同时使用并且能保证其中任何一个应用更新之后,其他应用都能及时收到最新的缓存。
—— 首先尽量区分缓存的类型,第一级别的是可以直接HTML化的,这类通过Ngnix+磁盘共享来解决;
—— 应用级缓存主要是靠MemCache这类支持同步机制的解决;
—— 此外还有内存数据库;
—— 最后才是数据库级别。
------解决方案--------------------
引用:
Quote: 引用:

第二个问题  秒杀服务独立的原因就是为了避免服务器之间的同步与交互。这样很多变量就可以直接存在内存里,而不用存到数据库中,也不用考虑cache的有效性。反正把你要的东西全存内存,把关键的交易数据存在本地盘。可以减少很多很多不必要的麻烦 。

那就相当于还是没有用负载均衡……??本来是想着因为请求太多,一个Tomcat处理不过来,才做负载的……


只要算法得当,tomcat肯定不会处理不过来。

通常在软件内存中计算的,网络先瓶颈,有没有负载均衡根本无所谓。


------解决方案--------------------
引用:
Quote: 引用:

第四个问题,如果用了memcache,显然memcache是按key 进行分布式缓存(如果有必要的话);否则的话,系统中就只有一个mem cache.

如果使用MemCache,并且负载均衡中的多个应用所使用的MemCache都存在一个地方(不分布),那么负载均衡中的多个应用如果同时进行 cache.put ("counter", cache.get("counter") +1);  之类的操作,会如何?如果有问题,有什么解决方案?


1. 尽可能回避这种操作
2. 这种操作一般都是计数器,牺牲实时性。即每个计数器本地先计,然后再定时写到后面的memcache中
3. 用消息机制汇总再写memcache

最后说一下,不要企图寻找万全的解决方案,那根本不存在。
------解决方案--------------------
引用:
Quote: 引用:

我想对web应用进行负载均衡,有一些问题想请教:

按一般性做法回答你:

1. 几个web应用是不是连接同一个数据库?
—— 是!分库设计是另一个高度的事情了。

2. 比如我的应用中有秒杀活动,商品的份数是一定的,绝对不能超支,那这几个web应用中应该如何进行数据同步的控制??
—— Web应用跟服务端一般来说是两个层面的东西;秒杀功能本身应该是独立服务端应用,由秒杀服务端进行独立处理,然后批量回写数据库。
—— 秒杀服务端考虑采用队列方式接收处理请求,极端情况下每个商品一个队列,每个队列有专门的单个服务器提供服务。如该服务崩溃,新的服务线程接管该队列处理,重新来过。
—— 可限制队列长度(如商品可秒杀数量×120%),超过长度的直接抛弃。


对第2点,如果这样设计,估计得自己写个专门的组件了。例如:如果某个服务崩溃,让新的服务线程接管。这得有全局调度器,调度器得追踪各个任务是否崩溃……
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。

其他相似内容:

热门推荐: