漫画:性能、可用性和锁

简介: 经过了几天的熟悉环境,小鱼开始让飞鸟尝试负责解决一些问题。分配的第一个问题现象是这样的: 接口有偶尔的超时现象。平时的时候接口可以在2s响应调用的上游。但是偶尔会有几次,超时特别严重,有时候20s、30s才返回。但是上游的超时时间是10s。所以这时候上游是拿不到结果的。对上游来说这次请求失败了。 飞鸟通过排查,找到了一些线索,就抱着电脑去找小鱼。

 

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


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


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


1112728-20180622233607240-1158765618.png


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


目标:


       可用性


手段:


       性能优化


抓手:


       优化锁性能

 

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


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


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


1112728-20180622233648838-234257738.png


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


  1. 接口内部异常


这个多为系统bug,如常见的空指针NPE、内存泄漏等。


根据问题解决问题即可。


     b.接口没在限定的时间内返回


如今天的锁等待导致的超时问题。


这个问题解决一般需要依赖监控数据,如各个链路调用的处理时间。根据各个环节耗时情况和处理逻辑进行相应优化。常用优化方式如:异步化、并行化、改造耗时逻辑等。


     c.接口不提供服务


如接口被降级或者系统崩溃。


解决这个问题需要从系统和架构上考虑。


     d.接口响应其他原因没到达调用方


       如被限流、网络不通等。


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


1112728-20180604092712892-1089009208.png


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


  • 执行时间


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


  • CPU时间


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


  • 内存分配


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


  • 磁盘吞吐量


  描述I/O的使用情况


  • 网络吞吐量


  描述网络的使用情况


  • 响应时间


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


1112728-20180604092727098-1911928755.png


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


  1. 基于数据库实现的分布式锁


  1. 基于缓存实现的分布式锁


  1. 基于zookeeper实现的分布式锁


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


  1. 减少锁持有时间


  1. 减小锁粒度


  1. 锁分离


  1. 锁粗化


  1. 锁消除


1112728-20180622233746873-638459360.png


1112728-20180622233759535-1072844303.png


相关文章
|
监控 Linux 测试技术
【实战技巧】使用inotify实现实时文件监控
`inotify`是Linux内核提供的文件系统监控机制,用于实时捕获文件和目录的创建、删除、移动和修改等事件。通过`inotify_init`初始化,`inotify_add_watch`添加监视点,如`. IN_ACCESS`, `. IN_MODIFY`等,及`inotify_rm_watch`移除监视。示例代码展示了监听指定路径下文件修改事件,当事件发生时打印信息。使用`inotify`能高效地构建实时应用,如文件同步和日志监控,简化系统编程。
1840 123
|
安全 网络协议 网络安全
端口转发:解锁网络访问的新维度
端口转发技术,简化网络数据流,用于家庭至企业服务器场景。它隐藏内部网络服务,提供远程访问、个人网站公开、NAT穿透及安全的VPN连接。设置涉及路由器管理界面,添加转发规则,但需注意安全风险,仅开放必要端口并加强内部安全措施。了解和善用端口转发,提升网络服务可达性与安全性。
786 5
|
数据采集 人工智能 文字识别
【AAAI 2024】MuLTI:高效视频与语言理解
多模态理解模型具有广泛的应用,比如多标签分类、视频问答(videoQA)和文本视频检索等。现有的方法已经在视频和语言理解方面取得了重大进展,然而,他们仍然面临两个巨大的挑战:无法充分的利用现有的特征;训练时巨大的GPU内存消耗。我们提出了MuLTI,这是一种高度准确高效的视频和语言理解模型,可以实现高效有效的特征融合和对下游任务的快速适应。本文详细介绍基于MuLTI实现高效视频与语言理解。
|
Linux 网络安全 Windows
smart210 烧写uboot、uImage和rootfs
smart210 烧写uboot、uImage和rootfs
|
编解码 Prometheus 监控
完全解读Prometheus查询(下)
完全解读Prometheus查询(下)
703 0
|
机器学习/深度学习 自然语言处理 搜索推荐
LangChain在个性化内容生成中的实践
【8月更文第3天】随着人工智能技术的发展,个性化内容生成已经成为许多应用的核心竞争力。LangChain 是一种开源框架,旨在简化语言模型的应用开发,尤其是针对自然语言处理任务。本文将探讨 LangChain 如何帮助开发者根据用户的偏好生成定制化的内容,从挑战到实践策略,再到具体的案例分析和技术实现。
927 1
|
JSON 关系型数据库 API
Python 使用 FastAPI 和 PostgreSQL 构建简单 API
最近一年公司也在卷 LLM 的应用项目,所以我们也从 goper => Pythoner。 这一年使用最多的就是 Python 的 FastAPI 框架。下面一个简易项目让你快速玩转 Python API Web。 API代表应用程序编程接口,是软件开发中最重要的概念之一。它允许程序通过发送和接收数据与其他服务进行交互。API Web 通信最广泛使用的标准之一是 REST,它依赖于JSON 格式或键值对,类似于 Python 的字典。 如果想用 Python 构建一个,那么可以从几个框架中选择。Flask -RESTful、Django Rest Framework 和 FastAPI 是最受
|
机器学习/深度学习 人工智能 自然语言处理
AIGC(Artificial Intelligence Generated Content)
AIGC(Artificial Intelligence Generated Content)
200 3
|
开发者 Python
six,一个神奇的 Python 版本兼容工具库!
six,一个神奇的 Python 版本兼容工具库!
375 4
|
存储 架构师 数据管理
免费下载!《云存储应用白皮书》详解创新背后的技术实践
进入21世纪,云存储技术兴起,并成为应对数据洪流的利器。《云存储应用白皮书》作为云存储行业全景式文档,阐述了变革时代之下云存储的三大核心技术趋势,旨在为数字经济从业者提供具有指导性、操作性的参考资料。电子书现已开放下载,即刻收藏阅读吧!
1758 0
免费下载!《云存储应用白皮书》详解创新背后的技术实践