Operations 10 min read

FunTester’s 2021 Leap: 100k+ QPS Performance & Distributed Testing Insights

The 2021 year‑end summary details FunTester’s rapid growth, the expansion of its public account, major performance upgrades reaching over 100 k QPS, the design of a distributed testing framework, dynamic load models, log‑replay innovations, and the author’s deep dive into Go, Java and Groovy.

FunTester
FunTester
FunTester
FunTester’s 2021 Leap: 100k+ QPS Performance & Distributed Testing Insights

Year‑End Overview

At the end of 2021 the author reflects on the progress of the FunTester brand, which now hosts more than 730 original articles and over 7,200 followers. The focus shifted from daily posting to higher‑quality content, covering problem‑solving at work, personal learning experiments, and non‑technical reflections.

FunTester Testing Framework Enhancements

The framework was extended in two main areas: raw performance and distributed testing models. Single‑node performance now exceeds 100 k QPS, matching leading load‑testing tools, and resource consumption was optimized in data collection and marking functions.

Benchmark comparisons: "10 k QPS, K6, Gatling and FunTester ultimate showdown" and "Single‑node 120 k QPS – FunTester revenge".

Distributed request amplifier implementation and full‑link traffic modeling were also introduced.

Distributed Testing Design

Inspired by the ngrinder framework, a draft distributed architecture was created. Three test‑case patterns are supported:

Assemble a test case object using FunTester’s model and execute it.

Use built‑in cases, parameterize them, and invoke via reflection.

Execute Groovy scripts directly through the GroovyScriptEngine.

Relevant articles detail each pattern and Docker‑based validation.

Dynamic Load Models

The dynamic model was expanded to allow on‑the‑fly pressure adjustments. Features include:

Pause‑and‑resume capability triggered by external signals.

Real‑time increase or decrease of thread count during a test, enabling multiple scenarios in a single run.

Future work aims at injecting new pressure models dynamically to cover more complex traffic compositions.

QPS Model Re‑implementation

The original QPS controller, which relied on extra threads and a custom sleep mechanism, was replaced by a timer‑based approach using goreplay for higher precision. Java implementations still face thread‑overhead concerns, prompting further optimization.

Log Replay and High‑Performance Queues

After experimenting with goreplay, the author adopted Disruptor as a high‑throughput message queue for log replay, achieving 88 k QPS in a million‑record scenario.

Article: "High‑Performance Queue Disruptor in Testing".

Article: "Design Draft for Million‑Level Log Replay Engine".

Programming Language Journey

2021 marked a significant shift to Go. The author rewrote many Java features in Go, built HTTP and WebSocket services, integrated LevelDB, and created a minimal load‑testing framework in fewer than 20 lines of code. Parallel articles cover Go HTTP client practices, fasthttp, WebSocket implementations, and performance comparisons between Java and Go.

Java and Groovy work continued, focusing on reflection, JSON handling, and dynamic method addition, though overall skill growth was modest.

Asynchronous Keyword Extension

Inspired by Go’s go keyword, a custom fun keyword was introduced for Java/Groovy, enabling closure‑based asynchronous execution with a predefined thread pool and graceful shutdown via daemon threads.

def ft = {
    output("创建线程")
    fun {
        int i = 0
        ringBuffer.publishEvent {e, s ->
            e.setRequest(getHttpPost(url,params))
        }
        i++
    }
}

5.times {ft()}

Additional Activities

The author also explored unit testing with Spock, created over 50 custom emojis, produced tutorial videos, and experimented with various utility demos such as Automa, DelayQueue, ThreadLocal, and Redis operations in JMeter.

Original Source

Signed-in readers can open the original source through BestHub's protected redirect.

Sign in to view source
Republication Notice

This article has been distilled and summarized from source material, then republished for learning and reference. If you believe it infringes your rights, please contactadmin@besthub.devand we will review it promptly.

Distributed SystemsJavaGoPerformance TestingLoad TestingTesting frameworklog replaydynamic model
FunTester
Written by

FunTester

10k followers, 1k articles | completely useless

0 followers
Reader feedback

How this landed with the community

Sign in to like

Rate this article

Was this worth your time?

Sign in to rate
Discussion

0 Comments

Thoughtful readers leave field notes, pushback, and hard-won operational detail here.