开发者社区> 问答> 正文

云计算之路-阿里云上:希望从今天开始乌云变蓝天

博文原文: 云计算之路-阿里云上:希望从今天开始乌云变蓝天

真没想到云计算之路上的天气如此糟糕,比杭州的交通还要糟糕;今天上海晴空万里,希望从今天开始“云”上的天气也一直晴空万里。

昨天发布了博文 云计算之路-柳暗花明:为什么memcached会堵车之后,去参加了阿里云客户交流会,哪知14:00左右会议刚开始,网站又出现访问速度慢的问题。。。

立即采取前天的措施,关闭memcached服务器,立即恢复正常。。。但是,没过多久问题又出现。。。

同样的方法,为什么前天能解决问题而昨天不能?这里的不同之处是前天关闭memcached服务器之后,正在走出访问高峰期,而昨天正在走入访问高峰期。

那为什么关闭memcached服务器之后会立即恢复正常?我们的猜测是:在关闭memcached服务器之前,所有web服务器都与memcached服务器之间保持着很多TCP连接进行大量网络通信,memcached服务器的网络处理能力很可能是瓶颈。关闭memcached服务器之后,直接走数据库(RDS),网络瓶颈不存在了。

但是关闭memcached服务器之后,压力会转嫁给数据库服务器与web服务器的CPU。数据库服务器用的是RDS,刚刚的,这点转嫁过来的压力小case。怎么会转嫁给CPU呢,因为memcached缓存的不是直接数据库查询结果,而是实体对象,这些实体对象不仅包含数据库查询结果,还包含对数据库查询结果的处理,比如一些正则表达式处理。而跑web服务器的云服务器CPU一直是瓶颈,在出问题的期间都伴随着CPU占用大、波动大,所以我们才用了4台4核做负载均衡。我们猜测关闭memcached服务器之后请求处理速度慢可能是CPU处理能力的原因。

于是,我们进行了这样的假设:把云服务器想像成一个黑盒子,黑盒包装着印着“CPU占用不得高于某值,TCP连接数不得高于某值”。(注:这只是假设,不代表虚拟机有这样的限制。这是一种解决问题的手段,做科学研究有时也会先提出假设再证明这个假设)

然后,我们的解决思路就围绕这个假设展开——1. 如何提高单台web服务器的CPU处理能力/减少CPU处理压力;2. 如何减少单台云服务器的网络连接负载(TCP连接数)?

解决方法一

之前,我们有个非常错误的想法——以为通过负载均衡(阿里云SLB)可以减少提高单台web服务器的CPU处理压力。所以也尝试过在出问题时向负载均衡添加更多云服务器,结果证明解决不了问题。

对于瞬间的并发请求,SLB无用武之地。SLB只转发请求,并不拆分请求。假如4台web服务器每台能支撑的并发请求数是500,SLB一次收到了800的并发请求,一股脑儿转发给其中一台web服务器,这台web服务器趴下了(扛不住);SLB下一次收到了1000的并发请求,一股脑儿转发给另一台web服务器,那台也趴下了;接下来SLB收到了1200的并发请求,第3台web服务器也趴下了。如果把这4台web服务器合并为1台,能支撑的并发请求数是2000,就能轻松应对。

于是,我们把4台web服务器中的2台由4核4G升级为8核8G,把另外2台从SLB中摘掉。负载均衡由原来的4台4核4G变为2台8核8G。



解决方法二

在所有云服务器(虚拟机)中,memcached服务器是网络连接负载最高的,因为所有web服务器都与之通信。数据库用的是RDS,是物理机,不在考虑范围。

我们想到了一个终极方法,将couchbase直接安装在两台web服务器上,web服务器与memcached服务器之间通过127.0.0.1接口进行本地通信,通过couchbase的集群功能让两台memcached服务器的数据保持同步。

web.config中memcached客户端配置变为这样:

<enyim.com>
    <memcached protocol="Binary">
        <servers>
            <add address="127.0.0.1" port="11211" />            
        </servers>
        <socketPool minPoolSize="10" maxPoolSize="300" connectionTimeout="00:00:01" deadTimeout="00:00:01" />
    </memcached>
</enyim.com>

以前我们自己托管服务器时,也是这样部署的,单台8核8G既跑web又跑memcached。

这两个方法是在今天早上睡醒后想到了,然后一跃而起,在早上8点之前完成了部署。

正因为有了这两个解决措施,才敢展望:希望从今天开始乌云变蓝天!

展开
收起
cnblogs 2013-04-26 11:44:57 14500 0
16 条回答
写回答
取消 提交回答
  • 推荐回答:

    官方帮助文档地址:阿里云帮助中心

    更多参考: 阿里云官方(新用户需官网注册查看)

    2021-04-19 00:17:26
    赞同 展开评论 打赏
  • 感谢分享

    官方帮助文档地址:阿里云帮助中心

    更多参考: 阿里云官方(新用户需官网注册查看)

    2021-04-19 00:02:38
    赞同 展开评论 打赏
  • Re云计算之路阿里云上:希望从今天开始乌云变蓝天
    哪天我也能像楼主这样哈
    2013-05-02 19:00:29
    赞同 展开评论 打赏
  • 回25楼cnblogs的帖子
    你们的服务器空间多大?多少G?最大的一台呢?
    2013-05-02 18:38:06
    赞同 展开评论 打赏
  • Re云计算之路阿里云上:希望从今天开始乌云变蓝天
    俺继续关注看看怎么样
    2013-04-29 11:36:47
    赞同 展开评论 打赏
  • 回 楼主(cnblogs) 的帖子
    之前的说错了 - - 删掉……

    谢谢楼主的帖子 我们的用memcache也遇到了效率过于地下的问题 晚上按照楼主的方法调试下

    还有楼主于每遇到memcache内存占用不断增长的问题?我们memcache在重启完之后的一段时间里内存占用都很平稳 但是几天过后就会出现内存占用不断增加的问题 不知楼主遇到没 所有项目的过期时间都检查过 没有问题

    -------------------------

    回 23楼(cnblogs) 的帖子
    这两天我们从centos的1.4.15换成了官方公布的1.4.5 看看效果

    总是莫名奇妙的就出现内存增长 而且都是在稳定很长一段时间后才会出现 怀疑可能是memcache的bug

    -------------------------

    回 25楼(cnblogs) 的帖子
    我们分开跑的 初期曾经考虑过couchbase不过后来放弃了

    现在是memcached Redis 两个搭配起来用
    2013-04-29 11:00:24
    赞同 展开评论 打赏
  • Re云计算之路阿里云上:希望从今天开始乌云变蓝天
    我用的centos 6.2 64位 discuz X2.5程序 ,WDCP一键安装包环境,安装了Memcached

    结果,经常出现mysql连接不上,然后Memcached就关闭了,无论怎么重装系统、配置环境,论坛程序,都是这样,不知道是不是你所说的“60”的原因~~
    2013-04-26 21:32:08
    赞同 展开评论 打赏
  • 祝福!
    2013-04-26 18:48:57
    赞同 展开评论 打赏
  • 于瞬间的并发请求,SLB无用武之地。SLB只转发请求,并不拆分请求。假如4台web服务器每台能支撑的并发请求数是500,SLB一次收到了800的并发请求,一股脑儿转发给其中一台web服务器,这台web服务器趴下了(扛不住);SLB下一次收到了1000的并发请求,一股脑儿转发给另一台web服务器,那台也趴下了;接下来SLB收到了1200的并发请求,第3台web服务器也趴下了。如果把这4台web服务器合并为1台,能支撑的并发请求数是2000,就能轻松应对。





    关于这部分,感觉有问题啊。SLB不可能这么2的吧,连最基本的轮询都没有?
    再说了,你的dns轮询呢。。

    -------------------------

    今天的高峰应该也快了吧,有压力否

    2013-04-26 14:07:18
    赞同 展开评论 打赏
  • 你这个方案和我们正在开发的方案差不多,我们不光把memcache放到了web服务器上,而且还在每个web上架设了myslq做为本机缓存使用,RDS用两个,一个主库保存网站数据,一个缓存库,保存session数据(没有使用独立的memcache服务器)和其他一些缓存和访问统计数据,SLB中关闭会话保持功能,这样SLB会把每次访问比较均衡给转发给web,不会造成某台主机连接量单独过高

    -------------------------

    原本我们也是设计单独一个memcache服务器,保存缓存数据和session数据,后来考虑到稳定性和可能的故障机率,决定使用RDS来存session和一些计算后的缓存数据,一些配置信息等常规的小量的缓存数据则直接缓存到web服务器内存中

    -------------------------

    回 11楼(akira) 的帖子
    SLB是有轮询的,造成负载不均衡的原因应该是开启了SLB中的会话保持功能,SLB开启会话保持功能后,访问量多了以后很有可能会造成负载不均衡现象,因为同一用户始终被转发到同一台web服务器上,这样访问量达时间长了就可能造成某台服务器累积的用户越来越多,造成过载,可以考虑关闭会话保持功能,这样每次请求都会被均衡,但关闭会话保持后就必须使用分布式session,可以考虑使用RDS保存session数据,如果RDS内存够用,可以使用内存表,速度、性能都可以
    2013-04-26 14:03:35
    赞同 展开评论 打赏
  • 阿里还是需要强化啊
    2013-04-26 13:45:31
    赞同 展开评论 打赏
  • 关注了~~~~~~
    2013-04-26 12:49:07
    赞同 展开评论 打赏
  • 回 2楼(dns2008) 的帖子
    文中的500是一个假设

    -------------------------

    回 3楼(billz) 的帖子
    高的时候会冲到100%

    -------------------------

    回 6楼(billz) 的帖子
    早就重视了,正是因为CPU高的问题,我们才将SLB中的2台云服务器增加到4台。
    后来准备了多台云服务器,出问题就向SLB中加云服务器以缓解CPU压力。

    “感觉这阿里云slb下的cpu占用超过60-70%以后就很容易出问题。而且是各种各样稀奇古怪的问题。”
    非常感谢!这里很重要的信息!

    -------------------------

    回 10楼(alilab) 的帖子
    在web上用mysql进行缓存,可能会出现磁盘IO瓶颈

    -------------------------

    回 11楼(akira) 的帖子
    我们没有使用dns轮询

    -------------------------

    回 13楼(alilab) 的帖子
    我们从来没有开启过SLB的会话保持功能

    -------------------------

    回 17楼(akira) 的帖子
    今天的高峰轻松扛过

    -------------------------

    回 21楼(twl007) 的帖子
    我们使用memcached,内存占用一直很稳定

    -------------------------

    回 24楼(twl007) 的帖子
    我们用的是couchbase跑memcached

    -------------------------

    回 27楼(myfaday) 的帖子
    目前有19台云服务器,总磁盘空间没有统计过
    2013-04-26 12:40:58
    赞同 展开评论 打赏
  • Re云计算之路阿里云上:希望从今天开始乌云变蓝天
    原来cpu占用到多少?

    -------------------------

    Re回3楼billz的帖子
    引用第5楼cnblogs于2013-04-26 12:41发表的 回 3楼(billz) 的帖子 :
    高的时候会冲到100%

    cpu占用能到那么高你都不重视?前面几天那不是瞎改么?!
    感觉这阿里云slb下的cpu占用超过60-70%以后就很容易出问题。而且是各种各样稀奇古怪的问题。
    2013-04-26 12:27:24
    赞同 展开评论 打赏
  • 我想问的是,为什么每台主机的并发能力如此差?你的配置也不低,怎么就500并发就挂了?
    2013-04-26 11:54:37
    赞同 展开评论 打赏
  • 哈哈   沙发~
    2013-04-26 11:49:52
    赞同 展开评论 打赏
滑动查看更多
问答排行榜
最热
最新

相关电子书

更多
云计算中的数据安全 立即下载
汇聚云计算的生态核能——云市场,云上APP Store 立即下载
天气风险管理的过去、现在与未来——基于大数据和云计算的天气风险管理 立即下载