
序-好记性不如烂笔头
什么是稳定性保障

稳定性保障工作做什么


梳理异常情况
顺便提一下,根据异常的分类,平日里大家习惯性将稳定性保障工作分为日常稳定性保障和大促稳定性保障。
日常稳定性保障主要针对业务功能异常。此类稳定性保障工作伴随着每次业务需求开发同步进行,发布要先于业务功能发布。日常的业务功能变更一般不会引起基础设施异常,因此日常稳定性保障较少涉及基础设施的保障。
配置监控告警



基线核对是将历史数据作为预期进行对比核对,这种方式依赖历史数据的正确性,投入少,实效低,可发现大的资金问题。
两两核对将上游作为预期,进行对比核对,精准度高,时效性高,成本比较高,难以覆盖全面。
业务逻辑核对将业务专家的经验作为预期进行核对,需要大量人力投入,对经验的依赖度高,但是精准度高,时效性高。

预估影响面
预定解决方案

预演就是预先演练一遍。包括功能预演、活动预演、预案预演等。
功能预演:提前将功能演示一遍,保证功能的正确性。注意核心功能的覆盖率,尤其是未参加过大促的新功能。
活动预演:主要面向某些大型活动进行提前预演。例如预售。

1、对上游:询问预估流量,即他们要求我们的保障值。上游需要调用我们的服务,因此我们提供的服务量级需要满足他们的诉求。简言之,我们的水渠需要能够容纳得住从他们那里流下来的水流量。
2、对自身:梳理自身上下游链路,基于自身预估,根据上游诉求,预估对下游的诉求。
3、对下游:提供自己的预估容量,要求下游提供足够的容量。
自身容量如何预估呢?一般是通过以下几个方法进行:
1、梳理业务变化对流量影响:业务逻辑每年都在变化,进而对流量有所影响。因此要梳理去年同一大促结束到今年大促之前这段时间内的业务变化,预估其对流量的影响量。
2、参考往年同一大促容量值:梳理往年同一大促的流量、峰值发生时间、整体流量走势;参考预估,没有影响流量的业务变化的情况下(理想情况),基本可以直接用来作为预估值。
3、参考同年之前的大促容量值:梳理同年前一次大促的流量参考预估。对比往年两次大促的流量比例来预估,例如,如果去年618与双11的的流量比是1:2,那么可以将今年618的容量乘以2的值来作为今年双11的容量预估值。
4、结合上游诉求:收集到所有上游的诉求保障值,总结归纳。再对比自身预估容量。一般是两者取大。但是如果差异很大,就需要再认真核对,可能有预估错误或者遗漏。

对下游的诉求保障值如何预估呢?
1、根据代码逻辑总结容量公式:代码链路梳理,汇总出对下游每个接口的调用场景和次数,最终得到下游每个接口的总调用量的公式,入参是自身容量,出参就是下游接口的容量。不过这个方法有个缺点就是一旦调用链路发生变化就需要及时更新,有一定的维护成本。优点就是精确度高。
2、参考历年容量:这个方式同上文自身容量的预估方式。可参考往年大促调用量预估今年容量。

1、应用适配改造:要走通压测链路,涉及改动较多,包括应用系统改造、nginx升级、中间件改造、缓存端升级、DB端升级等等。
2、构造压测数据:压测数据构造需要根据具体的业务。例如价保的压测,需要构造的压测数据是处于价保有效期内的订单。如果要压到申请链路,还要构造优惠制造差价。
3、创建压测模型:所谓压测模型是指压测数据的分布情况,压测模型要能够反应线上真实流量占比。要覆盖到所有链路,不同业务的流量占比等同线上真实情况,中心机房和单元机房的流量比例也要按照线上比例分配。
4、进行压测:压测分为单链路压测和全链路压测,单链路压测是指仅仅对自己关注的系统进行压测;全链路压测是从用户发起请求开始到整个业务逻辑结束的全部链路压测。压测入口也分为http接口压测和端上接口压测,具体根据系统情况而定。
5、观测与总结:在压测的过程中,要时刻盯盘,观测系统水位。压测后总结梳理出压测报告。

总结
我在从html页面生成PDF时遇到问题。我正在使用PDFkit。在安装它的过程中,我注意到我需要wkhtmltopdf。所以我也安装了它。我做了PDFkit的文档所说的一切......现在我在尝试加载PDF时遇到了这个错误。这里是错误:commandfailed:"/usr/local/bin/wkhtmltopdf""--margin-right""0.75in""--page-size""Letter""--margin-top""0.75in""--margin-bottom""0.75in""--encoding""UTF-8""--margin-left""0.75in""-
我在我的项目目录中完成了compasscreate.和compassinitrails。几个问题:我已将我的.sass文件放在public/stylesheets中。这是放置它们的正确位置吗?当我运行compasswatch时,它不会自动编译这些.sass文件。我必须手动指定文件:compasswatchpublic/stylesheets/myfile.sass等。如何让它自动运行?文件ie.css、print.css和screen.css已放在stylesheets/compiled。如何在编译后不让它们重新出现的情况下删除它们?我自己编译的.sass文件编译成compiled/t
我花了三天的时间用头撞墙,试图弄清楚为什么简单的“rake”不能通过我的规范文件。如果您遇到这种情况:任何文件夹路径中都不要有空格!。严重地。事实上,从现在开始,您命名的任何内容都没有空格。这是我的控制台输出:(在/Users/*****/Desktop/LearningRuby/learn_ruby)$rake/Users/*******/Desktop/LearningRuby/learn_ruby/00_hello/hello_spec.rb:116:in`require':cannotloadsuchfile--hello(LoadError) 最佳
关闭。这个问题需要detailsorclarity.它目前不接受答案。想改进这个问题吗?通过editingthispost添加细节并澄清问题.关闭8年前。Improvethisquestion在首页我有:汽车:VolvoSaabMercedesAudistatic_pages_spec.rb中的测试代码:it"shouldhavetherightselect"dovisithome_pathit{shouldhave_select('cars',:options=>['volvo','saab','mercedes','audi'])}end响应是rspec./spec/request
在Rails4.0.2中,我使用s3_direct_upload和aws-sdkgems直接为s3存储桶上传文件。在开发环境中它工作正常,但在生产环境中它会抛出如下错误,ActionView::Template::Error(noimplicitconversionofnilintoString)在View中,create_cv_url,:id=>"s3_uploader",:key=>"cv_uploads/{unique_id}/${filename}",:key_starts_with=>"cv_uploads/",:callback_param=>"cv[direct_uplo
使用Ruby1.9.2运行IDE提示说需要gemruby-debug-base19x并提供安装它。但是,在尝试安装它时会显示消息Failedtoinstallgems.Followinggemswerenotinstalled:C:/ProgramFiles(x86)/JetBrains/RubyMine3.2.4/rb/gems/ruby-debug-base19x-0.11.30.pre2.gem:Errorinstallingruby-debug-base19x-0.11.30.pre2.gem:The'linecache19'nativegemrequiresinstall
我知道全局变量$!包含最新的异常对象,但我对下面的语法感到困惑。谁能帮助我理解以下语法?rescue$! 最佳答案 此构造可防止异常停止您的程序并使堆栈跟踪冒泡。它还会将该异常作为值返回,这很有用。a=get_me_datarescue$!在此行之后,a将保存请求的数据或异常。然后您可以分析该异常并采取相应措施。defget_me_dataraise'Nodataforyou'enda=get_me_datarescue$!puts"Executioncarrieson"pa#>>Executioncarrieson#>>#更现实的
我在我正在处理的一些代码中发现了这一点。它旨在解决从磁盘读取key文件的要求。在生产环境中,key文件的内容位于环境变量中。旧代码:key=File.read('path/to/key.pem')新代码:key=File.read('|echo$KEY_VARIABLE')这是如何工作的? 最佳答案 来自IOdocs:Astringstartingwith“|”indicatesasubprocess.Theremainderofthestringfollowingthe“|”isinvokedasaprocesswithappro
我今天看到了一个ruby代码片段。[1,2,3,4,5,6,7].inject(:+)=>28[1,2,3,4,5,6,7].inject(:*)=>5040这里的注入(inject)和之前看到的完全不一样,比如[1,2,3,4,5,6,7].inject{|sum,x|sum+x}请解释一下它是如何工作的? 最佳答案 没有魔法,符号(方法)只是可能的参数之一。这是来自文档:#enum.inject(initial,sym)=>obj#enum.inject(sym)=>obj#enum.inject(initial){|mem
我是Cucumber测试的新手。我创建了两个特征文件:events.featurepartner.feature并将我的步骤定义放在step_definitions文件夹中:./step_definitions/events.rbpartner.rbCucumber似乎在所有.rb文件中查找步骤信息。有没有办法限制该功能查看特定的步骤定义文件?我之所以要这样做,是因为即使我使用了--guess标志,我也会遇到不明确的匹配错误。我之所以要这样做,有以下几个原因。我正在测试CMS,并希望在不同的功能中测试每种不同的内容类型(事件和合作伙伴)。事件.特征Feature:AddpartnerA