zoukankan      html  css  js  c++  java
  • 10倍请求压力来的时候,你的系统会被拖垮吗

      最近把了老系统改造成基于Spring Cloud Alibaba为基础的微服务框架,接着便进行线上压力测试。

      结果如下:在请求压力的高峰期间并且MQ中间件故障的情况,触发了降级机制,结果降级机制触发了之后运行了一小会,突然系统就完全卡死,无法响应任何请求。

      这个系统的整体架构如下:简单来说就是又一个非常核心的行为,就是往MQ里写数据,但是往这个MQ里写的数据非常核心并且关键的,绝不容许有任何丢失。

      所以最初就设计了一个降级机制:如果MQ中间件一旦故障,那么这个系统就会立马把核心数据写入到本地的磁盘文件。

      在高峰期并发量比较高的情况下,如果接收到一条数据就直接写磁盘,性能绝对是比较差的。

      所以我们的设计是:一旦MQ中间件发生故障,不是直接写本地磁盘,而是采用内存缓冲+批量刷盘的机制。

      在内存缓冲设计的时候,分为两个区域,一个是current区域用来提供系统写数据,另外一个是ready区域,用来提供给线程把数据刷到磁盘去。

      每一块内存区域的缓冲大小都是512kb,系统接收到数据就会写缓冲区域,因此内存一定会写满。

      在current区域写满了之后,就会交换current区域和ready区缓冲区,交换过后ready承载了之前current区的内容。

      此时后台线程就可以将ready缓冲区的数据通过Java NIO的API,直接高性能的Append写入到本地磁盘文件。

      

    终极目标:世界大同
  • 相关阅读:
    解决JDBC连接MySQL 8时得异常:java.sql.SQLException: The server time zone value '�й���׼ʱ��' is unrecognized or represents more than one time zone.
    洛谷P2604(最大流+最小费用最大流)
    poj2411(状压dp)
    二轮前水题计划
    最近挖的坑
    关于我
    future
    mysql学习笔记
    vue踩坑记
    XSS漏洞学习笔记
  • 原文地址:https://www.cnblogs.com/gdouzz/p/14541226.html
Copyright © 2011-2022 走看看