漫画:性能、可用性和锁

    经过了几天的熟悉环境,小鱼开始让飞鸟尝试负责解决一些问题。分配的第一个问题现象是这样的:

    接口有偶尔的超时现象。平时的时候接口可以在2s响应调用的上游。但是偶尔会有几次,超时特别严重,有时候20s、30s才返回。但是上游的超时时间是10s。所以这时候上游是拿不到结果的。对上游来说这次请求失败了。

    飞鸟通过排查,找到了一些线索,就抱着电脑去找小鱼。

    接口超时造成的上游请求失败是一个可用性的问题。为了解决这个问题,就需要优化系统,提高响应速度,这是一个性能的问题。具体到问题里,因为用到了锁,对性能造成了影响。可以通过优化这个锁性能来解决。即:

目标:

        可用性

手段:

        性能优化

抓手:

        优化锁性能

      可用性和性能不同的人有不同的理解。

      可用性一般指正常运行时间占总时间的百分比。对上游来说,超时是一种不可用状态。

      性能是指系统或服务在具体事情的时候表现如何。严格来说可用性也是性能的一个指标。

对于单接口来说,接口不可用大体分为下面四个方面:

  1. 接口内部异常 这个多为系统bug,如常见的空指针NPE、内存泄漏等。 根据问题解决问题即可。
  2. 接口没在限定的时间内返回 如今天的锁等待导致的超时问题。 这个问题解决一般需要依赖监控数据,如各个链路调用的处理时间。根据各个环节耗时情况和处理逻辑进行相应优化。常用优化方式如:异步化、并行化、改造耗时逻辑等。
  3. 接口不提供服务 如接口被降级或者系统崩溃。 解决这个问题需要从系统和架构上考虑。
  4. 接口响应其他原因没到达调用方

       如被限流、网络不通等。

       解决这个问题系统要做好服务治理和全链路监控。

性能方面,今天就先说一下一些性能参考指标:

  • 执行时间

  一段代码从开始运行到运行结束所使用的时间。

  • CPU时间

  (算法)函数或者线程占用CPU的时间。

  • 内存分配

  程序在运行时占用的内存空间

  • 磁盘吞吐量

  描述I/O的使用情况

  • 网络吞吐量

  描述网络的使用情况

  • 响应时间

  系统对某用户行为或者动作做出响应的时间

  最后说一下锁,分布式锁比传统的线程锁和进程锁开销要大很多,但是它解决了跨JVM来进行共享资源的访问问题。目前主要有三种实现:

  1. 基于数据库实现的分布式锁
  2. 基于缓存实现的分布式锁
  3. 基于zookeeper实现的分布式锁

    不管是哪种锁,一旦用到锁,就说明是阻塞式的。所以再并发度上一般来说都会比无锁的情况低一点。锁优化的思路和方法总结一下,有以下几种:

  1. 减少锁持有时间
  2. 减小锁粒度
  3. 锁分离
  4. 锁粗化
  5. 锁消除

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏后端云

Openstack两个容易混淆的概念

az是在region范围内的再次切分,只是工程上的独立,例如可以把一个机架上的机器划分在一个az中,划分az是为了提高容灾性和提供廉价的隔离服务。选择不同的re...

1104
来自专栏py+selenium

逻辑漏洞之并发测试【1】

并发测试主要测试场景:签到、每天领积分等,测试是否并发发送请求服务器可多次响应。

1681
来自专栏后端之路

关于移动端静态资源缓存的说明

目前移动端使用vue+webpack的架构 存在一个较为困惑的问题如果线上发布了之后,移动端不会自动刷新。 目前vue使用大量 Lazy Loading Rou...

2339
来自专栏BestSDK

微软发布 Windows 10 SDK build 15042

微软向开启了快速更新的 PC 平台开发者们推送了 Windows 10 SDK build 14046 预览版本,带来了一些微小的新特性。 ? 微软表示该 SD...

2824
来自专栏数据和云

墨菲定律:一个参数Drop_caches导致集群数据库实例崩溃

李真旭@killdb Oracle ACE,云和恩墨技术专家 个人博客:www.killdb.com 在墨菲定律里,我们知道,有可能发生的故障就一定会发生,哪怕...

2927
来自专栏BeJavaGod

为你的网站加上SSL,可以使用HTTPS进行访问

苹果在之前就说了,api接口得用https,不然不给上架,这是对于我来说无所谓,毕竟我们就是一个网站嘛~ 有没有s无所谓,但是我们要追求极高的造诣,那么加个s装...

3015
来自专栏java一日一条

Java 开发必须掌握的线上问题排查命令

作为一个合格的开发人员,不仅要能写得一手还代码,还有一项很重要的技能就是排查问题。这里提到的排查问题不仅仅是在coding的过程中debug等,还包括的就是线上...

1073
来自专栏蘑菇先生的技术笔记

Redis高可用分布式内部交流(九)

3177
来自专栏韩伟的专栏

高性能服务器架构思路( 五 ) : 分布式缓存

在高性能的服务器架构中,常用的缓存和分布两种策略,往往是结合到一起使用的。只有清楚的理解这些技术的原理,并且和实际的业务场景结合起来,才能真正的做出满足应用要求...

3.4K0
来自专栏大数据和云计算技术

HBase2.0 vs HBase1.x 延时比较

hbase2.0已经正式发布,对比之前1.x版本,2.0在读写链路上做了完善的优化,offheap、netty rpc等,这里做个小测试实验对比1.x和2.0在...

1253

扫码关注云+社区