重构系统的套路-提高并发能力

提高系统并发能力,总结起来有三点:异步,缓存,并行。

异步

比如我们在某段业务逻辑中加了一个同步写kafka的操作,tp99瞬间多了30毫秒,这样在整个监控曲线看起来非常扎眼,于是我们需要将这个同步改成异步。

对于老系统需要在业务进行梳理,如果业务场景中不关心返回值,这样完全可以做成异步。

如果业务关心返回值,比如订单逻辑,很多下游服务需要传入本次主订单ID与下游服务进行连接,这样写主订单就必须变成了一个同步逻辑,但是主要关心的还是这个OrderId,我们可以建立一个OrderId生成器,这样单独的一个OrderId服务性能更好,可以将整个业务逻辑串起来。

缓存

为了提升整个逻辑链路的响应时间,我们应该将数据离访问更近,这样响应更快。

有了缓存,我们可能产生某种依赖,将尽可能多的数据放入缓存,而没有好好的进行梳理和分析。

这样缓存数据可能越来越大,内存成本越来越高,当一段促销造成的流量越来越大,如果没有进行合理的扩容,则会造成想不到的问题。

比如我们的营销活动放到redis做缓存,每个营销活动其实是有很多聚合信息,并且每个活动有失效期的,这样比较适合缓存场景的,但是某天产品同学的运营策略变了,在双11我们需要提前做一些预热,这样用户领取的优惠券的周期就变长了,如果简单的是放到了redis,其实整体的活动信息在高峰来时,原有的redis容量就造成了一定的性能影响。

并行

下游的服务我们通过建立线程池,进行异步处理,于是我们需要关心设置合理的线程池。

梳理系统的代码,将很多同步的for,while的循环改成基于Future的同步模型,提升整体并行度,达到一定的性能提升。

原文地址:https://www.cnblogs.com/xiguain/p/9237415.html

时间: 2024-10-12 17:53:34

重构系统的套路-提高并发能力的相关文章

重构系统的套路-写有组织的代码

如果一个项目经历了快速发展,势必在业务发展背后留下了一个很无序,结构混乱的代码,无序而混乱的代码势必造成很大的bug修复及扩展成本. 说到搭建系统都在谈论高并发,大数据,而易于维护和可扩展性则被大部分人抛之脑后,增加最基础的面向对象思想和设计模式帮助我们组织好易于维护和阅读的代码. 不要好高骛远看一下高并发,高可用的东西,做好以下这些最基础的东西,你的系统在可读性和可维护可扩展方面将会提升一倍的能力,将大家的人效从每次bug产生梳理代码的过程中解放出来,建立标准建立原则才是架构师首先要做的. 进

重构系统的套路-微服务化

服务拆分 根据业务或组织架构进行基本服务拆分,每个服务实例会拥有专属的网络地址.独立的计算资源,并且独立部署.客户端通过访问服务实例的地址来调用服务 API.不同服务也可以相互调用. 统一配置管理 一个服务可能会跑多个实例,每个服务实例都会需要做配置.为了方便统一调整配置,我们可以把配置中心化,每个服务实例都去找配置管理器(Configuration Manager)拿配置.当配置更新的时候,我们也可以让服务实例再去拿新的配置. 命名服务 多服务实例带来的问题:网络地址(比如 IP)很容易因为扩

提高服务器性能和并发能力

从哲学上说,消除瓶颈是提高服务器性能和并发能力的唯一途径.如果你能够消除所有的瓶颈,你就能够最大的发挥硬件性能,让系统的性能和并发数到达最佳.采用多线程多核编程,使用事件驱动或异步消息机制,尽量减少阻塞和等待操作(如I/O阻塞.同步等待或计时/超时等).原理:1.多线程多核编程,消除cpu瓶颈.2.采用IOCP或epoll,利用状态监测和通知方式,消除网络I/O阻塞瓶颈.3.采用事件驱动或异步消息机制,可以消除不必要的等待操作.4.如果是Linux,可以采用AIO来消除磁盘I/O阻塞瓶颈.5.在

STM 软件事务内存——本质是为提高并发,通过事务来管理内存的读写访问以避免锁的使用

对Java程序员来说,我们对面向对象的编程(OOP)自然都是烂熟于胸的,但语言也极大地影响了我们构建面向对象应用程序的方式.(现在的OOP已经和Alan Kay当初创造这个词时候的初衷大不相同了,他的主要思想是采用消息传递并消灭所有状态数据(他认为,系统是由一些类似于生物细胞那样的对象构成的,这些对象通过消息传递进行通信,且无需持有任何状态)--go语言) 对于Java程序员来说,当我们顺着指针或引用找到某个实例的时候,实际上是登录到了持有其状态的一块内存上,于是在那个位置上操纵数据也就成了自然

【心灵鸡汤】浪子助你提高解决问题能力

今天我们聊聊开心的话题 :) 我们都知道无论在什么行业,学习能力才是发展的最重要的,用潜力来说也可以. 但是学习能力是什么,其实很虚,企业如何为你的学习能力买单发工资.我觉得可以用解决问题的能力来衡量 我们从几张截图开始我们的话题 截图一: 截图二: 截图三: 善用互联网的搜索工具 作为新手难免是遇到问题就到各个技术群里去询问,这个很正常,我也是这么经历过来的.但是一般都有工作,谁又能及时给予帮助,基本不可能了.所以还要要靠自己,我们就那第一张截图来说,根据提示:no input file sp

如何提高编程能力

一. 1. 扎实的基础.数据结构.离散数学.编译原理,这些是所有计算机科学的基础,如果不掌握他们,很难写出高水平的程序.据我的观察,学计算机专业的人比学其他专业的人更能写出高质量的软件.程序人人都会写,但当你发现写到一定程度很难再提高的时候,就应该想想是不是要回过头来学学这些最基本的理论.不要一开始就去学OOP,即使你再精通OOP,遇到一些基本算法的时候可能也会束手无策. 2. 丰富的想象力.不要拘泥于固定的思维方式,遇到问题的时候要多想几种解决问题的方案,试试别人从没想过的方法.丰富的想象力是

使用通用权限管理系统组件的随想 - 提高开发能力、规范开发、快速见效

本人供职于国内一家比较知名的物流公司,一直从事于基层公司物流软件的规划和设计开发工作,在长期的工作实践中深深地体会到作为不是专业的软件行业而又从事软件开发行业的业余性的软件开发设计人员来说,在工作中需要克服的困难和面对的艰辛有多大多难. 对与专业的软件开发设计公司来说,毋庸置疑的一点是都会有自己成熟稳定的开发框架和组件,并且是在不断的完善中,对供职其中的开发设计人员在完成业务性的开发设计工作外日常工作的一个重心就在于了解.熟悉进而创新性的完善他.作为软件开发设计人员都知道,任何一个软件系统都离不

面试最让你手足无措的一个问题:你的系统如何支撑高并发?

这篇文章,我们聊聊大量同学问我的一个问题,面试的时候被问到一个让人特别手足无措的问题:你的系统如何支撑高并发? 大多数同学被问到这个问题压根儿没什么思路去回答,不知道从什么地方说起,其实本质就是没经历过一些真正有高并发系统的锤炼罢了. 因为没有过相关的项目经历,所以就没法从真实的自身体会和经验中提炼出一套回答,然后系统的阐述出来自己复杂过的系统如何支撑高并发的. 所以,这篇文章就从这个角度切入来简单说说这个问题,用一个最简单的思路来回答,大致如何应对. 当然这里首先说清楚一个前提:高并发系统各不

程序员提高编程能力万无一失的办法

那就是去读别人写的代码.读那些你常用的库.编程框架的源代码,读那些你景仰的大牛的源代码,读代码里的测试(测试本身就是一种有效的文档):读代码.改代码.运行代码. 其实,所谓写程序,大部分的时间都是花在读代码上,“写”的部分耗时极少:所以把“读”的技能训练好了,是很有好处的. 提高编程能力万无一失的办法 编注:这篇文章最初于 2010 年 5 月为 Fuel Your Coding 网站而写.不幸的是,那个网站已经不复存在了,所以我将这篇文章重新发布.为了紧跟时代步伐,我想过对其进行更新,但我又觉