编程知识 购物 网址 新闻 笑话 | 软件 日历 阅读 图书馆 China
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
vbs/VBScript DOS/BAT hta htc python perl 游戏相关 VBA 远程脚本 ColdFusion ruby专题 autoit seraphzone PowerShell linux shell Lua Golang Erlang 其它教程 CSS/HTML/Xhtml html5 CSS XML/XSLT Dreamweaver教程 经验交流
站长资讯 .NET新手 ASP.NET C# WinForm Silverlight WCF CLR WPF XNA VisualStudio ASP.NET-MVC .NET控件开发 EntityFramework WinRT-Metro Java C++ PHP Delphi Python Ruby C语言 Erlang Go Swift Scala R语言 Verilog 其它语言 架构设计 面向对象 设计模式 领域驱动 Html-Css JavaScript jQuery HTML5 SharePoint GIS技术 SAP OracleERP DynamicsCRM K2 BPM 信息安全 企业信息 Android开发 iOS开发 WindowsPhone WindowsMobile 其他手机 敏捷开发 项目管理 软件工程 SQLServer Oracle MySQL NoSQL 其它数据库 Windows7 WindowsServer Linux
   -> 架构设计 -> 架构必会的性能指标及分析策略 -> 正文阅读

[架构设计]架构必会的性能指标及分析策略

  不管是java还是.net基础设施必不可少。
MQ:
  如果发现MQ是瓶颈。不管用的是rabbitmq还是kafka,其他的也好。作为生产者要确认超时时间、重试机制、异步线程池。消费方要做两件事:发现和解决。发现的主要是通过积压阈值最快发现问题。解决的方法主要有:短期方案:增大线程数,增加服务器。长期需要优化逻辑。积压阈值的设置主要取决于对积压的容忍程度,比如我们的服务对延时很敏感,那么设置积压阈值为50或者100。这样有问题可以快速发现。
缓存:
   缓存的话,不管是tair还是redis或者memcached。我们对缓存的写入成功和数据存在性都不能强依赖。所以基本要做到缓存读取不成功就需要再次查DB。而且不管出什么问题,对程序来说,就是抛异常了。所以一定要异常捕获。数据要用异步线程池异步写入。监控要做好。我们有个服务要做一层缓存。我们组的兄弟比较担心,问我了解不了解冷热启动的概念。这个其实需要去咨询维护服务的人怎么定义这个概念。一般来讲:冷启动数据是从磁盘加载的,热启动是从内存加载的。
超时和重试:
  为了防止别的服务出问题,一定优化好超时时间和重试机制。超时时间的定义一般设置为一个请求处理99.9%的耗时时间的5到10倍。这是因为考虑到跨机房等网络耗时的问题。虽然运维的同事会告诉说跨机房之间的时延也就是1ms或者2ms的事情,但是实际值要大于这个值,所以一般设置超时时间是100ms起步。很多请求设置了这个值还是超时了,没关系,就是截获一个异常然后重试。如果服务不重要,比如展示的时候,去取一个展示的key的字典值,也可以不重试。一般的RPC组件默认重试是3次。
  一般超时的异常有以下特征:

java.lang.reflect.UndeclaredThrowableException
at com.sun.proxy.$Proxy67.xxxx(Unknown Source)
at 

Caused by: org.apache.thrift.TException: tthrift remote(IP:端口) invoke(xxxx) timeout, traceId:-2093033244087395764, timeout:100

  Unknown Source:远程问题的特征之一
  timeout是超时的特征
服务隔离:
  服务隔离是为了减少损失的影响范围,避免雪崩效应。比如我们有一些外部的依赖:我们依赖微信支付的稳定性、支付宝支付的稳定性、银联支付的稳定性。那么我需要按照这几种通道做物理隔离,可以部署相同的代码但是部署在不同的机器群。
组件版本及时升级:
  比如httpclient4.3的版本有个bug并发量大的时候会阻塞。之前在乐视的时候,部门有个小组的服务就发生过这样的线上问题。
及时下线不再使用的代码:
  可能在一个团队中很多程序bug都是因为存在太多的兼容逻辑和临时代码,写这些逻辑的人如果没有加上很好的注释,在用完的时候也没有及时清理。后来维护的人看到这段毫无道理的代码不敢动。程序里大量的IF和ELSE,很容易踩坑。招聘的时候卡的很严,很多面试者不服气,我也能写出来代码。但是会写代码和会写代码是不一样的。我们需求很急,但是宁愿不做也不要一个写出一堆问题代码,处处是坑,难以维护代码的程序员。
数据库:
  一个数据表的数据过多,对更新和查询性能都有影响。对于不再使用的数据要及时备份清走。一般数据库的容量剩余不到60%, 就要考虑分库分表了。一般一台物理机写入能力也不能高于QPS1500。所以对于主从延时不是很敏感的业务场景,一定要做好读写分离。虽然做了读写分离,如果读和写的代码在一个事务里,其实都是走的主库。杜绝慢查询。
梳理好依赖:
  开发一个系统,最忌讳的是没有灵魂。来什么需求都接。把系统搞得很乱。梳理好系统的边界和定位。我们应该依赖什么服务,是强依赖还是可以降级的弱依赖。调用系统的调用方需要什么东西,我们是应该给提供,还是让他们自己去解决。
总结:
  上面提到的哪一步没有做好,都可能引发蝴蝶效应。比如:一个MQ的消费能力差,积压了,生产者同步写入,写入等待。另外一个服务调用了这个接口,还把这个调用包裹到事务里,导致这个事务长时间不提交。这样的请求来几个,线程池满了,整个服务就挂了。如果别人调用这个服务,超时时间设置的过长,别的服务也跟着线程池满,挂掉了。如果没做好物理隔离,所有服务都挂了。
      
跑题时间:
  玛格丽特.米切尔写的《飘》英文原名是《gone with the wind》,意思是美国南部的奴隶制文明一去不返,中文的翻译完全没有这种韵味。女主人公斯嘉丽爱慕阿希礼的高贵气质,冒着生命危险为他做了很多的事情。而阿希礼只在斯嘉丽需要的时候给了她一把土。当时光沉淀了一切,斯嘉丽意识到自己爱上的只是自己想象出来的一个人,基于阿希礼。阿希礼只是空有一副皮囊,他的灵魂基于他的妻子梅兰。而斯嘉丽自己的丈夫白瑞德才更配的上自己的灵魂。爱情来的时候本来就是毫无道理,而自己困境中望着你,你一次次将我逼进绝望。我一次次从绝望中翻身的强大会将你从心里挤走。一个再坚强的女孩子最后也会爱上让自己不用坚强的人。
  喜欢做鱼头鸡汤。鱼肉可以做出很多种花样,而鱼头吃起来比较费劲,骨头多,做汤最好。鸡片入锅,加上水豆豉,枸杞、姜片、甘草。将鱼头放到笊篱里,水煮到笊篱里只剩鱼骨,将笊篱拿出。关火装盘即可。好汤关键是食材,食材越好,调料可以越少。
  世界上最遥远的距离是鱼和飞鸟的距离,一个在天际一个却深潜水底。我却偏偏想让他们在一起。即使不用一起成为汤,他们也可以在水面的一瞬间相遇。世界上最遥远的距离是我变成了你最喜欢的样子站在你面前,却不喜欢你。
  架构设计 最新文章
spring boot实现ssm(2)功能
java 企业站源码 兼容手机平板PC 自适应响应
Serverless无服务应用架构纵横谈
理论篇:关注点分离(Separation of concern
Struts 2 入门
spring boot实现ssm(1)功能
SpringMVC通过Redis实现缓存主页
网络应用的编程模型
应用服务器和Web服务器
java 企业网站源码 后台 springmvc SSM 前台
上一篇文章      下一篇文章      查看所有文章
加:2017-11-26 23:24:39  更:2017-11-26 23:24:41 
 
360图书馆 软件开发资料 购物精选 新闻资讯 Chinese Culture 三丰软件 开发 中国文化 阅读网 日历 万年历 2019年9日历
2019-9-16 19:13:37
多播视频美女直播
↓电视,电影,美女直播,迅雷资源↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  编程知识