容量规划的一些探讨与实践

之前产品线上发生过若干次因为tomcat连接池被耗尽而导致宕机的故障,而具体根源原因则各不尽相同。有因为调用和被调用的服务申请相同的分布式锁而导致死锁的,有因为发送内部或外部的JMS消息发生堵塞的,有因为某个存在性能问题的接口被较多调用导致的,还有某些超高频接口没有做好专门优化而导致的。。。

所有上述问题的本质解决,肯定是要针对各种问题根源,分别予以解决。解决死锁问题,外部接口做好严格的访问超时控制,非核心业务逻辑尽量异步处理,尽可能的通过增加cache来减少数据库压力等等。但除此之外,系统中任何一个业务点都可能拖垮整个系统,系统整体的脆弱程度值得深思。为什么瘸了腿的人会死?不,他应该还要能编程。

其实,这个问题的本质在于tomcat只有一个共享线程池,所有的业务请求都会分配给一个线程,直至请求处理完毕,线程才会被回收。任何一个长请求,都会长期侵占导致宝贵的tomcat连接池资源。这点其实在tomcat7上已经做了优化支持,tomcat7支持了异步处理。此特性将http线程池和业务service线程池做了分离,这样一个IO等待的业务请求,只会侵占业务service线程池。但这没有解决本质问题,因为虽然解决了http线程池的资源问题,但累积膨胀的业务service线程池,对jvm内存、cpu,数据库等仍是一个威胁。坏孩子和调皮的孩子其实放到哪里都是问题,他们需要被好好管理。需要控制他们的发言次数,这样哪些无辜的乖孩子才有机会发言,老师也才能听到有意义的反馈。

那么,我们需要做什么呢?

1.我们需要做好资源隔离,防止任何一个业务功能消耗过多的连接池资源,甚至,在必要的时候,可以完全禁止这个问题业务功能。

2.业务功能的流量阈值或开关,能够及时、动态的予以调整。

3.业务功能如果流量超限,可以定制的做异常处理。

解决问题一,我们设计了一个Aspect。它拦截了所有的业务功能请求,然后根据具体业务功能的流量阈值对请求进行控制。如果未超限,则放行,放行前增加计数,业务功能执行完成后回收计数;如果超限,则获取相应的异常处理策略进行处理。主要包含了流量计数器,阈值管理器和异常处理器这3个部分。

框架简图如下:

处理流程图如下:

解决问题二和三,即阈值和处理策略动态调整的问题。显然,配置文件是不合适的,那意味着要做应用重启。将配置信息保存到memcache中?那意味着每个业务请求都需要访问至少2次网络请求,这是不小的开销。那看来,如果能将这些信息冗余在服务器节点的内存里会性能不错,那内容如何获取和更新呢?服务器节点应该初始化的时候从一个中心节点拉取配置,然后通过长连接的方式监听在中心节点的配置变更时间,在发生变更新,从中心节点拉取相应新内容。中心节点最好还能是高可用的,高性能的,以及拥有良好的一致性。听起来美好,要真开发起来可还真不简单。幸运的是,牛人们早已为我们铺好大路了,那就是Zookeeper!它从核心上完美地解决了我们的需求。不过,到这里,其实还不够。我们的配置需要能持久保存,如果zookeeper真的挂了怎么办?最好有个漂亮的配置管理界面,你会喜欢在一个黑乎乎的界面上疯狂的敲打键盘吗,那是黑客帝国的剧情。此外,最好还能有非常方便的客户端编程接口API,不,甚至不要给我任何API,我添加几个注解就一切搞定最好,好吧,我们程序员就是懒!~

让我们来看看开源的配置管理服务框架吧,diamond(阿里),disconf(百度),qconf(奇虎360)。随都是师出名门,但由于研发年代、测重点都会略有不同。先看看Diamond和Disconf的对比:

推拉模型和编程模型上,disconf都更加符合我们的需求。可能后来者好是因为能站在前面巨人的肩膀上。下图的disconf的核心流程图:

更完整的的关于disconf的信息请大家看:

https://github.com/knightliao/disconf/wiki/%E5%88%86%E5%B8%83%E5%BC%8F%E9%85%8D%E7%BD%AE%E7%AE%A1%E7%90%86%E5%B9%B3%E5%8F%B0Disconf 。

至于qconf,基本特性同disconf差不多,当相关文档比较少,也没有特别详细,也就没有考虑了。感兴趣的同学可以看下:

https://github.com/Qihoo360/QConf/blob/master/README_ZH.md ,和http://v.youku.com/v_show/id_XOTI1NTI2ODI0.html(视频教程)

现在增加到并发拦截监控到公司监控系统。下图是一个某段时间内的监控结果。

本文章为作者原创

??禁止??

其他公众账号转载,若有转载,请标明出处

时间: 2024-11-21 02:42:57

容量规划的一些探讨与实践的相关文章

MySQL容量规划之tcpcopy应用之道

官方文档:https://github.com/session-replay-tools/mysql-replay-module tcpcopy可以将正式环境上来自客户端的请求复制一份到测试端并复现,想要真实的对MySQL进行容量规划,可以借助tcpcopy来将线上的流量 呈倍数的增长,将其复制到测试环境,从而快速定位测试环境出现瓶颈时负载情况,进而做好容量的全局把控 部署 伪装客户端IP:1.1.1.4 online server:1.1.1.1 target server :1.1.1.2

Hyper-v副本容量规划器

为了业务连续性和灾难恢复的目的,Windows Server 2012和Windows Server 2012 R2的Hyper-V管理员可以将其虚拟机从主服务器/集群复制到副本服务器/集群.适用于Hyper-V副本的容量规划器提供了服务器,存储和网络配置指导,这将允许IT管理员成功规划Hyper-V副本部署 可以通过如下地址获取Hyper-v副本容量规划器 https://www.microsoft.com/en-us/download/details.aspx?id=39057&ocid=a

浅谈容量测试与容量规划

在性能测试中,需要根据具体的性能需求和系统架构等情况,采用不同的测试策略,其中最常见的策略就有容量测试. 这篇博客,就来聊聊容量测试以及容量规划的一些内容... 一.什么是容量?如何理解? 在开始之前,有一点需要知道:系统的处理能力是有限的! 1.容量定义 所谓容量,即系统处于最大负载状态或某项指标达到所能接受的最大阈值下对请求的最大处理能力. 2.如何理解 ①.系统的容量(处理能力)是有限的: ②.容量是可度量的: 二.如何统计容量指标? 1.统计维度 一般来说,可以从如下两个维度来定量系统的

REST Service 探讨与实践

我们经常说的REST Service其实全称应该为RESTful Web Service,即REST Service 的实质还是Web Service,当这种Web Service符合REST的风格,就称这个Web Service为RESTful Web Service即REST Service. 什么是Web Service[1]? Web Service  技术, 能使得运行在不同机器上的不同应用无须借助附加的.专门的第三方软件或硬件, 就可相互交换数据或集成.为整个企业甚至多个组织之间的业

Exchange Server DB容量规划公式

数据库大小=邮箱数目磁盘上的邮箱大小数据库开销增长因子 磁盘上的邮箱大小=邮箱配额+空白空间+垃圾站大小 邮箱配额:每用户邮箱大小 空白空间:数据库中的邮箱每天发送和接受的邮件大小 垃圾站大小:(每日传入传出邮件平均邮件大小已删除项目保留期)+(邮箱配额大小0.012)+ (邮箱配额大小0.058) 已删除项目保留期默认为14天 数据库开销增长因子一般为20% 实例: ?现有2117用户,13个数据库,每日收发邮件100封,每邮箱配额500MB,平均邮件大小150K计算如下:?每个数据库用户数:

可伸缩性最佳实战(转)

come form: http://www.jdon.com/37793 异步 同步调用使得组件和组件之间紧密耦合起来,这样就使得要想伸缩应用就需要伸缩所有的组件,这不仅带来使得伸缩的成本增加,而且这种高度耦合性使得伸缩变得更加困难. 因此我们需要从应用角度划分出,哪些业务操作是紧密关联的,哪些是可以异步执行的,划分出那些可以异步执行的操作,然后将其进行异步化处理(比如通过JMS,事件队列,多播消息等或者线程池等),这样划分的好处就是系统可以应对更大的访问量,消弱访问峰值. 比如在同步的时候A调

如何做云端压力测试和业务容量的测试与规划

云智慧产品总监 陆兴海 高速增长的互联网业务要求产品开发.迭代和交付周期越来越短,而IT基础设施的广泛云化和第三方API接口的大量使用,使传统的基于内部环境搭建的压力测试方法和测试工具越来越难以满足应用功能可用和容量规划预估的需求. 企业该如何为频繁的市场活动和产品快速迭代进行有效而准确的压力测试呢?希望通过云端压力测试专家,云智慧压测宝产品总监陆兴海分享的两个客户案例,为企业的云端压力测试和业务容量规划带来一些有价值的参考. 压测宝云压测客户案例1:压测宝如何做业务容量的测试与规划? 云智慧有

优维DevOps系列沙龙全回顾:DevOps+SRE落地实践+DevOps最后一棒

5月6日,优维科技和数人云联合主办的DevOps&SRE系列活动<DevOps&SRE 超越传统运维之道>在深圳顺利举行. 优维科技CEO王津银.数人云CEO王璞.腾讯SNG运维负责人梁定安分别分享了<DevOps与传统的融合落地实践及案例分享><SRE在传统企业中的落地实践><DevOps最后一棒,有效构建海量运营的持续反馈能力>,为大家带来了一场异彩纷呈的技术盛宴. △场面爆满 除了DevOps.SRE相关的经验,还有具体落地的案例分享,

大规模排行榜系统实践及挑战

版权声明:本文由唐聪原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/154 来源:腾云阁 https://www.qcloud.com/community 排行榜满足了人的攀比.炫耀心理,几乎每个产品都会涉及.SNG增值产品部的QQ会员.QQ动漫.企鹅电竞.游戏赛事等大量业务都对排行榜有强烈需求,特别是企鹅电竞等业务的发展壮大对我们排行榜系统提出了更多要求和挑战.在过去的一年中,排行榜系统从无到有,接入的业务从单一的QQ