Quarkus (Java) vs Fiber (Go): Performance Benchmark in Kubernetes

แชร์
ฝัง
  • เผยแพร่เมื่อ 21 พ.ย. 2024

ความคิดเห็น • 496

  • @AntonPutra
    @AntonPutra  3 หลายเดือนก่อน +15

    ► What should I test next?
    ► AWS is expensive - Infra Support Fund: buymeacoffee.com/antonputra
    ► Benchmarks: th-cam.com/play/PLiMWaCMwGJXmcDLvMQeORJ-j_jayKaLVn.html&si=p-UOaVM_6_SFx52H

    • @ooijaz6063
      @ooijaz6063 3 หลายเดือนก่อน +1

      Are you sure that both apps are using same amount of connections in pool? Connection pool often makes most of the performance diff in this kind of benchmark. Quarkus defaults to 20 concurrent connections, and pgpool to 4 or runtime.NumCPU() from what I have read.
      Have you check performance for more than 20 connections in a pool?

    • @AntonPutra
      @AntonPutra  3 หลายเดือนก่อน +2

      @@ooijaz6063 I used the defaults, but for the next tests, I'll double-check how many connections are actually opened on the PostgreSQL side.

    • @111segasonic
      @111segasonic 3 หลายเดือนก่อน +1

      Perhaps you could also try helidon SE instead of quarkus. Helidon was built from the ground up by Oracle labs to use the latest java tech like virtual threads to serve requests

    • @AntonPutra
      @AntonPutra  3 หลายเดือนก่อน +1

      @@111segasonic thanks i'll try it out

    • @Comeyd
      @Comeyd 2 หลายเดือนก่อน

      I’d love to see Rust thrown into the mix as well!

  • @avalagum7957
    @avalagum7957 3 หลายเดือนก่อน +268

    Wow, this is really good. The setup (kubernetes cluster, prometheus, grafana ...) deserves another video.

    • @AntonPutra
      @AntonPutra  3 หลายเดือนก่อน +36

      Thanks! Just in case, the source code with all of these components is in my GitHub: github.com/antonputra/tutorials/tree/main/lessons/201/monitoring.

    • @rajivkumar-ub6uj
      @rajivkumar-ub6uj 3 หลายเดือนก่อน +7

      Hey, can you make a video on how to setup this in local? May be with k8s supplied with docker desktop if relevant?

    • @AntonPutra
      @AntonPutra  3 หลายเดือนก่อน +6

      @@rajivkumar-ub6uj i think so, the easiest way is just package everything as docker compose or perhaps just use local minuke cluster. i'll think about it

    • @rajivkumar-ub6uj
      @rajivkumar-ub6uj 3 หลายเดือนก่อน +3

      @@AntonPutra yes, compose is the best way for larger audience. Would appreciate if you can share the compose config for this, thanks in advance

    • @AntonPutra
      @AntonPutra  3 หลายเดือนก่อน +1

      @@rajivkumar-ub6uj ok

  • @PanicAtProduction
    @PanicAtProduction 3 หลายเดือนก่อน +110

    A benchmark must be like this. State of art. Good job!

    • @AntonPutra
      @AntonPutra  3 หลายเดือนก่อน +1

    • @ChengPhansivang
      @ChengPhansivang 2 หลายเดือนก่อน

      What is state of art mean ?

    • @AntonPutra
      @AntonPutra  2 หลายเดือนก่อน

      @@ChengPhansivang i guess something that people can relate to :)

  • @renbangbprd7236
    @renbangbprd7236 2 หลายเดือนก่อน +37

    Please do Java Spring Boot (Native) vs Spring Boot (JDK) VS Quarkus (Native) vs Quarkus (JDK)

    • @AntonPutra
      @AntonPutra  2 หลายเดือนก่อน +4

      ntoed!

    • @stealth-350
      @stealth-350 22 วันที่ผ่านมา +4

      And add Micronaut (Native & JDK) to this chain, plz

  • @ДеянДелчев-ы9з
    @ДеянДелчев-ы9з 3 หลายเดือนก่อน +118

    I am go fanboy but I really like applications written in Quarkus. My first language was Java and it is mind-blowing how fast and light Quarkus feels compared to Spring

    • @AntonPutra
      @AntonPutra  3 หลายเดือนก่อน +14

      some people say it is slower than jvm based, I'll see if I can test it

    • @lufenmartofilia5804
      @lufenmartofilia5804 3 หลายเดือนก่อน +9

      You would be surprised how far spring came his way. With that being said, for long running app spring boot as none aot compiled would remain faster thanks to the jit compiler. Quarkus is really only good of you need fast startup or low ram consumption

    • @awesomesuprise9141
      @awesomesuprise9141 2 หลายเดือนก่อน

      @@lufenmartofilia5804 good point

    • @AntonPutra
      @AntonPutra  2 หลายเดือนก่อน +2

      @@lufenmartofilia5804 will test, when you say long running, how long?

    • @chrisfreel
      @chrisfreel 2 หลายเดือนก่อน +1

      @AntonPutra long running is at least 10,000 tx before you start measuring. In the real world, weeks or months...

  • @ninjaasmoke
    @ninjaasmoke 2 หลายเดือนก่อน +20

    Finally! A detailed comparison that just doesn’t test the /hello-world endpoint

    • @AntonPutra
      @AntonPutra  2 หลายเดือนก่อน

      haha, thanks!

  • @TweakMDS
    @TweakMDS 3 หลายเดือนก่อน +31

    This second test scenario is absolute perfection in testing real world applications. It's easy to get excited about a performance difference of like 400% (for example) in a synthetic benchmark, but by including database, storage and (de)serializing, it gives a much more nuanced picture of how it would actually scale and perform. In this case I would say both applications performed well and comparable. I'd be interested in a bit of a deeper dive in these applications by including opentelemetry and seeing what functions might bottleneck.

    • @AntonPutra
      @AntonPutra  3 หลายเดือนก่อน +4

      Thanks. Well, in some tests, I used OpenTelemetry clients with this Prometheus client in both Go and Java. I'm wondering what else you would instrument besides these function calls to S3 and the database. I might include it in the following videos.
      example - github.com/antonputra/tutorials/blob/main/lessons/201/go-app/images.go#L50-L62

    • @TweakMDS
      @TweakMDS 3 หลายเดือนก่อน

      @@AntonPutra Must have missed that detail, very well done and thanks for the reply!

    • @AntonPutra
      @AntonPutra  3 หลายเดือนก่อน

      @@TweakMDS thanks!

    • @GBXS
      @GBXS 2 หลายเดือนก่อน

      But it doesn't do that much. The programs doesn't change any data. It just uploads it.

    • @AntonPutra
      @AntonPutra  2 หลายเดือนก่อน +2

      @@GBXS I'm thinking about adding an additional test with Kafka consumer/producer and perhaps a simple ETL pipeline. Any suggestions?

  • @jorgetovar621
    @jorgetovar621 3 หลายเดือนก่อน +22

    This is definitely the best DevOps channel.

  • @SeySvK
    @SeySvK 3 หลายเดือนก่อน +47

    Love these benchmark videos, nice work

    • @AntonPutra
      @AntonPutra  3 หลายเดือนก่อน +2

      thank you! :)

  • @GabrielPozo
    @GabrielPozo 3 หลายเดือนก่อน +12

    Love these benchmark videos, your work is amazing!

    • @AntonPutra
      @AntonPutra  3 หลายเดือนก่อน

      ❤️

  • @DillPL
    @DillPL 3 หลายเดือนก่อน +37

    Interesting comparison, BUT:
    - the first tests does not test the startup time itself (should be

    • @AntonPutra
      @AntonPutra  3 หลายเดือนก่อน +19

      I try to improve each time I create benchmarks. Next time, I will definitely use the v2 Go SDK and apply some other recommendations from your side. Thank you for taking the time to leave this feedback.

    • @DillPL
      @DillPL 3 หลายเดือนก่อน +5

      @@AntonPutra glad I could help and you haven't taken it as a personal attack or something :D
      I really value your videos and open source code for every video!
      Looking forward to seeing more of them.

    • @AntonPutra
      @AntonPutra  3 หลายเดือนก่อน +10

      @@DillPL thank you! i actually implemented your suggested idea in the new video and reduced the size by 6 mb (45 -> 39) :) - th-cam.com/video/56TUfwejKfo/w-d-xo.html
      will try other tips next as well and finally update that sdk lol

  • @cewa44
    @cewa44 หลายเดือนก่อน +2

    From the whole video I have profited so much in percentails. You have clear so much

  • @RayAndrewsDev
    @RayAndrewsDev หลายเดือนก่อน

    I really admire the effort you put into describing why you chose your testing methodology as well as the testing itself

  • @gasha1137
    @gasha1137 หลายเดือนก่อน +4

    бро ты красавчик, ничего лишнего, все по делу, качество и битрейт на высоте, видосик красивый, респект!

    • @AntonPutra
      @AntonPutra  หลายเดือนก่อน +1

      spasibo❤️

  • @mayboroda
    @mayboroda 2 หลายเดือนก่อน +2

    First of all, this is the best content on youtube so far.
    Well done. Thank you!

    • @AntonPutra
      @AntonPutra  2 หลายเดือนก่อน

      thank you! :)

  • @Serizon_
    @Serizon_ หลายเดือนก่อน +1

    this is so professional!
    I love it!
    please do bun vs deno v2
    since deno has gotten npm compatibility , the only difference now between bun and deno (aside from being written in zig and rust) is the speed (I think , both have gotten very nice std library)
    please do a benchmark comparing everything!

  • @slansky6626
    @slansky6626 19 วันที่ผ่านมา +1

    Excelent video, thank you so much!
    Do you think you could show this same benchmark comparing quarkus and go pushing both to its limits as you've done in your other videos?? I'm really curious about how they both compare on performance under heavy loads. My guess is quarkus would break first but I wonder how big is the difference. (I'd expect both are kinda close)
    Excelent work, and I'm very excited for your future videos!

  • @Bourn77
    @Bourn77 3 หลายเดือนก่อน +14

    please do c# vs Java, use minimal api with AOT for c# and GraalVM or whatever AOT thing Java has.

    • @AntonPutra
      @AntonPutra  3 หลายเดือนก่อน +3

      ok will do soon!

  • @siya.abc123
    @siya.abc123 3 หลายเดือนก่อน +73

    Would love to see C# vs Go

    • @krzysi3k-yt
      @krzysi3k-yt 3 หลายเดือนก่อน +7

      C# vs Go vs Java would be nice

    • @AntonPutra
      @AntonPutra  3 หลายเดือนก่อน +2

      any specific test scenarios? or the same

    • @krzysi3k-yt
      @krzysi3k-yt 3 หลายเดือนก่อน +7

      @@AntonPutra your current test scenarios are very good so I wouldn't change anything. Regarding C# I would use LTS version (dotnet 8) which is the fastest one amongst other versions according to Microsoft.

    • @AntonPutra
      @AntonPutra  3 หลายเดือนก่อน +8

      @@krzysi3k-yt ok, I'll maybe do it next

    • @1wsm1
      @1wsm1 3 หลายเดือนก่อน +3

      Rust - same tests

  • @ManuelMartinez-nl5cy
    @ManuelMartinez-nl5cy 3 หลายเดือนก่อน +2

    Great videos like the rest of what you do. I'm using your video sto improve my knowledge on cloud/kubernetes area.❤❤

    • @AntonPutra
      @AntonPutra  3 หลายเดือนก่อน +1

      thank you!❤

  • @or1699
    @or1699 3 หลายเดือนก่อน +1

    Great video! The benchmarks were really helpful. Keep up the great work!

    • @AntonPutra
      @AntonPutra  3 หลายเดือนก่อน

      thank you! will do

  • @KhoaH11
    @KhoaH11 3 หลายเดือนก่อน +5

    Nice work! The explanation around the benchmark is easy to understand and full of information there. IMHO, you should start to build your own courses on Udemy :)

    • @AntonPutra
      @AntonPutra  3 หลายเดือนก่อน +1

      thanks! maybe

  • @AndrewGraaff-n4g
    @AndrewGraaff-n4g 6 วันที่ผ่านมา +1

    Great video. Did you use the Reactive version of Java or the OS Thread version? If the Blocking version it would be interesting to see what would happen if you ran those on virtual threads. And what were the results of the reactive version.

    • @AntonPutra
      @AntonPutra  6 วันที่ผ่านมา

      thanks, it's been a while, but you can find a link to the source code in the description

    • @AndrewGraaff-n4g
      @AndrewGraaff-n4g 5 วันที่ผ่านมา

      @@AntonPutra I did. There are 2 versions and it looks like the regular hardware thread version was used. Since these workloads are all IO it would be better to use virtual threads (annotate with @RunOnVirtualThread) or the reactive version. But maybe the reactive version was used. I have always seen better performance on Quarkus than Go so these results are a bit surprising.

    • @AndrewGraaff-n4g
      @AndrewGraaff-n4g 5 วันที่ผ่านมา

      @@AntonPutra But your work is amazing. And I shall surely learn from it, especially the observability.

  • @pi3ni0
    @pi3ni0 3 หลายเดือนก่อน +8

    Nice job, I would like to see Test 2, but with higher RPS

    • @AntonPutra
      @AntonPutra  3 หลายเดือนก่อน +4

      Okay, I might just include additional screenshots under lesson '201' in my GitHub repo

    • @pi3ni0
      @pi3ni0 3 หลายเดือนก่อน

      @@AntonPutra It would be great, thank you Anton!

  • @xelesarc1680
    @xelesarc1680 3 หลายเดือนก่อน +29

    Please test dotnet lastest 8 vs go thanks

    • @AntonPutra
      @AntonPutra  3 หลายเดือนก่อน +6

      ok, comming next

    • @metaltyphoon
      @metaltyphoon 3 หลายเดือนก่อน

      @@AntonPutraensure to use Minimal APIs and compile it AOT.

  • @dweblinveltz5035
    @dweblinveltz5035 หลายเดือนก่อน +1

    Very nice video! Seems like if cost-cutting is of great concern, you'd lean towards go to keep CPU utilization down. I would love to see a similar comparison video between Java and JavaScript/Node.js.

    • @AntonPutra
      @AntonPutra  หลายเดือนก่อน

      thanks! noted

  • @yuriimalikov9855
    @yuriimalikov9855 หลายเดือนก่อน

    Love your videos! What tool do you use for creating those amazing animations and mounting videos?

  • @Nick-yd3rc
    @Nick-yd3rc 3 หลายเดือนก่อน +5

    Interestingly, in your Test scenario 2, your Quarkus app is spiking in DB latency while having constant times in between, as if the Postgres client would be idling to gather the queries (or waiting on a lock?) and send them in bursts.

    • @nisem0no
      @nisem0no 3 หลายเดือนก่อน +1

      If this is indeed the case it does make the results a bit harder to pull conclusions from.

    • @AntonPutra
      @AntonPutra  3 หลายเดือนก่อน

      yeah, I noticed it

  • @helloworld7796
    @helloworld7796 หลายเดือนก่อน

    Okay, you got me now. I will start trying prometheus and grafana. The question I have is which tools do you use for load testing? You are using word "client" for this. I assume you use some kind of tools, like jmeter, k6 or?

  • @oleksandrkovtunov
    @oleksandrkovtunov หลายเดือนก่อน

    The explanation why java reduces memory usage is pretty simple: gc

    • @framegrace1
      @framegrace1 หลายเดือนก่อน

      Go has gc too...
      The explanation is because java uses a fixed heap. Normal java reserves the memory from the system upfront and you will see no change for all the run.
      The Quarkus optimizations makes the internal HEAP metrics visible to K8s. But the particularities of java are still visible in those behaviours as defaulting to reserve a lot of memory upfront.

    • @oleksandrkovtunov
      @oleksandrkovtunov หลายเดือนก่อน

      @@framegrace1 the java GC could be different at different jvm implementations. But basically it works by simple principle. The jvm perform gc then it see that heap is overused. It based on heap limit.
      So, in this case jvm application started and used some heap. The heap usage isn't reached the GC limit - so don't need to perform gc. When traffic comes to jvm application - it increases the count of created objects and as consequence - increased heap usage. And when heap usage limit is reached then jvm perform gc and all objects created at start of application has been deleted.
      I don't know how GO gc works and looks like it has partially different implementation.

  • @jordanrothschild8310
    @jordanrothschild8310 11 วันที่ผ่านมา +1

    Great video! The test seems a bit unfair to Java, as much of the time was likely spent serializing JSON, which can vary significantly based on the library used. It would be interesting to see results with a more complex application that uses intricate data structures, as Go’s garbage collector introduces pauses and latency, while Java is known for its efficiency in these scenarios.
    Now, on the topic of environments and the test setup, I have a few questions. Is it statistically valid to compare a test run on Kubernetes with minimal requests? For the comparison to hold up with few requests, each application's runtime environment would need to be exactly the same, which can be difficult to guarantee given the cluster load and where each pod is deployed.
    It might actually be easier to run the test on your local machine, where you can control the resource allocation. However, I noticed you’re using a Mac, so factors like virtualization might make the results diverge even further from what you’d see in a production environment

  • @phyohtetpaing44
    @phyohtetpaing44 3 หลายเดือนก่อน +22

    There was a non-blocking Netty server implemented with Spring Reactive Web, which is more efficient.
    for databae approach use R2DBC the reactive nonblocking data repository.
    btw spring also support graalvm and it is not outdated.

    • @AntonPutra
      @AntonPutra  3 หลายเดือนก่อน

      ok thanks, it's not outdated just it's been around for a long time

    • @yohanebergerkouokamkuisu4238
      @yohanebergerkouokamkuisu4238 2 หลายเดือนก่อน +2

      Quarkus uses non-blocking netty

  • @Gohel95
    @Gohel95 หลายเดือนก่อน +1

    great demo. as Java dev it hurts seeing java losing even with quarks native build 😢😢

    • @AntonPutra
      @AntonPutra  หลายเดือนก่อน +1

      I'll make some more with improved Java soon

  • @henryong7788
    @henryong7788 3 หลายเดือนก่อน +16

    Seems like Java 21 was used but Virtual threads wasn't used for the Quarkus application. Wasn't that the whole point to using newer Java version with the performance improvements and non-blocking reactivity APIs?

    • @AntonPutra
      @AntonPutra  3 หลายเดือนก่อน +9

      yeah, i used java 21. I'll make sure to test virtual threads next time, maybe try to compare different java frameworks as well

    • @henryong7788
      @henryong7788 3 หลายเดือนก่อน +2

      ​@@AntonPutrahey, thanks for making this video.
      Just that needed to point out the code looks to be done in a older/traditional method even though Quarkus has annotations that resolves traditional blocking calls that modern programming languages like Go probably already has underlying.
      Great detailed video as always!
      Maybe I'll try this out on my local machine to test out too!

    • @AntonPutra
      @AntonPutra  3 หลายเดือนก่อน +8

      @@henryong7788 I'll soon be comparing Quarkus with Spring Boot, and I'll make sure to use the latest language features.

    • @EricSouzarys
      @EricSouzarys 3 หลายเดือนก่อน +4

      Virtual Threads are not better in performance compared to fully reactive code.
      Quarkus fully reactive or Spring fully reactive will always beat virtual threads, both in performance and resources usage.

    • @AntonPutra
      @AntonPutra  3 หลายเดือนก่อน +1

      @@EricSouzarys good to know thanks

  • @vishnugovindan8550
    @vishnugovindan8550 หลายเดือนก่อน +3

    What about micronaut? Would love some benchmarks on this 😊

    • @AntonPutra
      @AntonPutra  หลายเดือนก่อน +1

      ok, i'll take a look, i'll get back to java soon

  • @igorgladun5009
    @igorgladun5009 27 วันที่ผ่านมา

    Great video! Python vs Node plz with the same scenario :)

  • @mantovani96
    @mantovani96 3 หลายเดือนก่อน +1

    Loved the video, subscribed!

    • @AntonPutra
      @AntonPutra  3 หลายเดือนก่อน

      thanks!!

  • @harshwardhanparmar8258
    @harshwardhanparmar8258 2 หลายเดือนก่อน +1

    Amazing video, great job !!

    • @AntonPutra
      @AntonPutra  2 หลายเดือนก่อน

      thank you!

  • @robertoaraneda6006
    @robertoaraneda6006 หลายเดือนก่อน +2

    thanks for sharing.. can you do it with nodejs :P?

  • @bonk1463
    @bonk1463 3 หลายเดือนก่อน +1

    hey good test! can you test with go-chi instead of Fiber? go-chi is more optimized in terms of memory usage so that might explains why Java was using less memory in that first test.
    Overall, good video! Keep it up

    • @AntonPutra
      @AntonPutra  2 หลายเดือนก่อน +1

      Thank you! I used Chi for one of my projects, but I think memory usage doesn’t play a major role in the user experience, such as client latency etc..

  • @jesulobajohn8468
    @jesulobajohn8468 หลายเดือนก่อน

    I've been seeing these videos for a while ​and all I see is my railway bills

    • @AntonPutra
      @AntonPutra  หลายเดือนก่อน

      😂 i have some aws credit

  • @marcwinner567
    @marcwinner567 3 หลายเดือนก่อน

    Love these benchmarks! 🎉

    • @AntonPutra
      @AntonPutra  2 หลายเดือนก่อน

      thanks! i try to add some extra

  • @GreenVanGeek
    @GreenVanGeek หลายเดือนก่อน

    Nice video. One comment. Scale up/down is increase or decrease the machine resources like CPU and memory. Scale in/out y horizontal scaling ;)

  • @yuryburkouski
    @yuryburkouski 3 หลายเดือนก่อน +1

    good test after previous tries ;) but I would not accentuate memory consumption at the start of compiled java, as it does not affect anything. Also it looks like cpu doesn't do anything, so no reason to seriously compare 3% with 5%. But latency values are valuable! PS: looking at the low cpu consumption test I got an idea to test cpu intensive application. Try to create something like a redis (hashmap is fast, lets use treemap and its concurrent versions), the app will add, update and get some data, for example count of values that are greater than received in a controller. PPS: interesting to see how regular java 21 works with virtual threads, but I heard that java file io on linux is synchronous and only 22 will be modern, so it could be a reason why you got these values in the current test. Also testing regular java in a container is tricky, it’s better to test different Xmx-Xms values first, I mean starting java under the memory limit of 500mb is not the same as with 2000mb (so using compiled java leaves that headache, but compiled has lower throughput and latency :) )

    • @AntonPutra
      @AntonPutra  3 หลายเดือนก่อน

      Thanks, I appreciate your feedback.

  • @havefun599
    @havefun599 3 หลายเดือนก่อน +2

    Like always you rock, can you make a video about database architecture for production like MySql Replication Group etc, Thank you

    • @AntonPutra
      @AntonPutra  3 หลายเดือนก่อน

      thank you! let me see

  • @nabeelmemon6852
    @nabeelmemon6852 2 หลายเดือนก่อน

    Interesting. These tests could be extended to compare Hotspot VM, Generational ZGC and a few other switches. Can you make a video of your entire testing setup (focusing on docker, kubernetes, prometheus and grafana) from scratch? I think it's totally worth it.

  • @robertomoreno7906
    @robertomoreno7906 หลายเดือนก่อน

    Nice comparison! Though I wouldn't ever compare Go vs Java native for long time runners as this one. It is true that the metrics of java at startup time would be much (much) worst but bear in mind that java has been built thinking in the startup as an edge case scenario and the JVM does a lot optimisations while the program is running, it would be interesting if java is able to beat Go in the long run. In the short run I think that there is no possible discussion and Java Native is just a work around.

  • @zeroows
    @zeroows 3 หลายเดือนก่อน +1

    Add rust and javascript to the mix. Thank you for your channel

    • @AntonPutra
      @AntonPutra  3 หลายเดือนก่อน

      will do, i'm thinking about webassembly vs js, what do you think?

  • @gabrielmartinez2455
    @gabrielmartinez2455 3 หลายเดือนก่อน

    C# vs Go would be amazing to see. Maybe add to test 2 some simple reads from the database, and maybe add test 3 with some simple data structure or general purpose calculations to see how well each language performs. Amazing content. I am currently writing a high performance C# application for the government with .Net 8 and it is incredibly fast. I wonder if .net 8 has been improved so much that might even beat Java at this point.

    • @AntonPutra
      @AntonPutra  3 หลายเดือนก่อน

      Can you elaborate on using simple data structures or general-purpose calculations to evaluate how well each language performs? I don't really want to run fibonacci anymore lol

    • @gabrielmartinez2455
      @gabrielmartinez2455 3 หลายเดือนก่อน

      @@AntonPutra You can try to implement 3 different types of algorithms (In addition to the 2 tests you already did in your previous video).
      1- Searching Algorithms (linear search) - ex: Create a List of 1 million objects (person: {Id, Name} - Id: must be unique integer 1 to 1,000,000. Name: generate random string. Populate your list with 1 objects (Person). Test: Generate a random Int value from 1 to 1million and find the Person object (by ID) using the random generated Int, and get the Name, then find the object in the list (by Name) compare and validate both ID match
      2- Sorting Algorithms (sort the entire 1 million object (person) by name.
      3 - File I/O Operations - generate random Int value from 1 to 1 million, find the Person in the List, write the Person's name to the first line in a file, if file already contains a line replace with the new name.
      Leverage ChatGPT to create the code for you in both languages. Just some ideas, lol

    • @AntonPutra
      @AntonPutra  3 หลายเดือนก่อน +1

      @@gabrielmartinez2455 thanks! i'll try it

  • @furylao8107
    @furylao8107 หลายเดือนก่อน

    really nice approach to monitoring performance. can you make a similar video but with java profiling tool to detect which specific part of the code must be reworked?

  • @Jollyrogger805
    @Jollyrogger805 2 หลายเดือนก่อน +1

    I work on both Java and go, your results are similar to my observations. Java consumes memory due to too much of autoconfigurations which involves hell lot of classes + some of jdk had garbage collection issue but if you develop an enterprise ready application in go with distributed tracing, logging, metrics, database writes heavy operation etc, their performance is almost equivalent. I had to manually write all those functionalities in go Lang due to lack of autoconfiguration and libraries

    • @nojerome497
      @nojerome497 2 หลายเดือนก่อน +2

      Very good point. Java frameworks like Quarkus are doing a lot to make large scale application development easier. All of that stuff it's doing will affect runtime performance.

  • @shamilAliyev92
    @shamilAliyev92 3 หลายเดือนก่อน +11

    Could you do the same test for Kotlin and Java ? Or Kotlin and Go. Please 🙏

    • @AntonPutra
      @AntonPutra  3 หลายเดือนก่อน +3

      ok let me see

    • @belkocik
      @belkocik 3 หลายเดือนก่อน +2

      ​@@AntonPutra Would love see a Quarkus and Kotlin benchmarks compared to Spring Boot and Kotlin

    • @AntonPutra
      @AntonPutra  3 หลายเดือนก่อน

      @@belkocik 🫡

  • @awesomesuprise9141
    @awesomesuprise9141 2 หลายเดือนก่อน

    Wonderful content Anton!

    • @AntonPutra
      @AntonPutra  2 หลายเดือนก่อน

      thank you!

  • @Kessra
    @Kessra 2 หลายเดือนก่อน +1

    Small improvement suggestion: In Java you could use a record instead of a class. This shouldn't have a big impact on the test results but at least spares you a bit of typing.
    It would have been great to include a base Java and a Spring/Spring Boot comparison deployed into a java21 image container here as well just to see how much of an impact Quarkus and the native container optimization really yields. So far I couldn't convince anyone at our company to try out Quarkus.
    Just a question out of interest: Are you going to create a benchmark framework where similar tasks are done by various language implementations and then release your findings to the public? I just stumbled across an other video and then this one was recommended to me, and to me it looks like your videos basically doing that but just with a smaller and more comprehensible scope. So a combination of runtime analysis of different languages for various tasks would definitely be helpful, I guess

    • @AntonPutra
      @AntonPutra  2 หลายเดือนก่อน

      thanks, yes i'll get to Java soon and I'll try to improve a few things

    • @MovinduLochanaWijethunge
      @MovinduLochanaWijethunge 2 หลายเดือนก่อน

      @@AntonPutra Can you try using both Spring Boot Native and Quarkus to see how much of a performance difference they have

    • @AntonPutra
      @AntonPutra  2 หลายเดือนก่อน

      @@MovinduLochanaWijethunge yes will do

  • @madmasontv7254
    @madmasontv7254 2 หลายเดือนก่อน

    Thanks for you video! I really like it. Could you do the same tests for Spring vs Quarkus?

    • @AntonPutra
      @AntonPutra  2 หลายเดือนก่อน +1

      thanks, will do, but first rust vs go

  • @germandavid2520
    @germandavid2520 3 หลายเดือนก่อน +2

    Would be cool to see in a future video the framework web for Kotlin called Ktor.

    • @AntonPutra
      @AntonPutra  2 หลายเดือนก่อน +1

      noted!

  • @kamurashev
    @kamurashev 3 หลายเดือนก่อน +4

    It would be interesting to see what happens if you push requests to the limits and how high that limits are.
    Additionally for the Java it can be build to native image with spring boot as well. It sometimes not that smooth though but honestly I expect it to perform better with spring boot.

    • @ooijaz6063
      @ooijaz6063 3 หลายเดือนก่อน +5

      Idk, native image crashes randomly and have lower performance than jited code atm. It's good only (if not crashes) for low traffic applications on serverless.

    • @kamurashev
      @kamurashev 3 หลายเดือนก่อน

      @@ooijaz6063 I haven’t loaded my test app extensively but for me it worked ok and had better performance.

    • @ooijaz6063
      @ooijaz6063 3 หลายเดือนก่อน +2

      It may change though with strong adoption of virtual threads in next few years and servlet api will be good again.

    • @AntonPutra
      @AntonPutra  3 หลายเดือนก่อน

      I have the same limits for both: github.com/antonputra/tutorials/blob/main/lessons/201/deploy/java-app/deployment.yaml#L27-L33, and I run them on dedicated nodes using the ESXi Hypervisor.

    • @kamurashev
      @kamurashev 3 หลายเดือนก่อน +5

      @@AntonPutra I do understand, what I wanted to say is what happens if you push client requests higher and higher. The load seemed to be not that high, so the light load conditions were tested but what would happen under high load? It can be really detrimental in real world.

  • @samsurya283
    @samsurya283 หลายเดือนก่อน

    Woow amazing effort Man, how about Rust vs Go ?

  • @john33john33
    @john33john33 3 หลายเดือนก่อน +2

    a good indeed comparison.
    only one thing wanna further look into,
    how do same test behave at high throughput like 500 / 1000+ req/s

    • @AntonPutra
      @AntonPutra  3 หลายเดือนก่อน

      Thanks, I may include screenshots or just improve my tests in the future.

  • @kentra-io
    @kentra-io หลายเดือนก่อน +1

    Very informative!
    How about comparing performance of java vs python stream processors in Apache Flink?

    • @AntonPutra
      @AntonPutra  หลายเดือนก่อน

      thanks, yes, i was thinking about spark/flink and different apis: python, java, scala, etc.

  • @HeyItsSahilSoni
    @HeyItsSahilSoni หลายเดือนก่อน

    Thia is all good, checking how well it performs, but if its not throttling, anything is fine as long as client latency is not out of whack.
    I think some stress testing will also give good comparision, like you did with node and go

    • @AntonPutra
      @AntonPutra  หลายเดือนก่อน +1

      'll come back to java soon with improved benchmarks

  • @humanardaki7911
    @humanardaki7911 2 หลายเดือนก่อน +5

    "There are no solutions. There are only trade-offs" Thomas Sowell
    servers are cheaper than developer time

    • @AntonPutra
      @AntonPutra  2 หลายเดือนก่อน

      true

    • @andreipushkin_globant
      @andreipushkin_globant 2 หลายเดือนก่อน +1

      Not always true. Paying for each CPU cycle in the cloud you can easily get out of budget on scale. That is why optimization and algorithm knowledge is valuable again - it helps to save money.

  • @alche8411
    @alche8411 หลายเดือนก่อน +6

    Great job!
    But a few comments:
    Spring supports building native images as well, and they have maven/gradle plugins and a dedicated project Spring Native for this case. Actually, we are using it in production and building most of the Spring apps in native images.
    Summary: GO is faster, then JVM based stuff, well no surprise here :)
    In general, Quarkus doesn't give anything interesting compared to Spring, it's just a bit more modern and doesn't have much legacy stuff.
    What might be interesting to look at in this regard is Micronaout, because it does a fundamentally different Framework (compile-time and supports native images out of the box in comparison with runtime Spring with additional projects and layers for native support). Most likely Micronaout will show similar to GO numbers.

    • @AntonPutra
      @AntonPutra  หลายเดือนก่อน

      thank you for your feedback. i'll get back to the java world soon, maybe next week, and make a few improvements

  • @alvinxyz7419
    @alvinxyz7419 3 หลายเดือนก่อน +1

    this is very neat, i love it

    • @AntonPutra
      @AntonPutra  3 หลายเดือนก่อน

      thank you!

  • @yangshijie
    @yangshijie หลายเดือนก่อน

    i like this working. You are so nice!!

    • @AntonPutra
      @AntonPutra  หลายเดือนก่อน

      thank you!

  • @ПавелАвдеев
    @ПавелАвдеев 3 หลายเดือนก่อน +5

    I'd be interesting to compare Hotspot (various GC) vs GraalVM(Quarkus, SpringBoot)

    • @AntonPutra
      @AntonPutra  3 หลายเดือนก่อน +2

      ok let me see

    • @terribleprogrammer
      @terribleprogrammer 3 หลายเดือนก่อน

      It would be interesting to test long term throughput in this comparison.

    • @AntonPutra
      @AntonPutra  2 หลายเดือนก่อน

      @@terribleprogrammer how long? day, 2, a week?

    • @terribleprogrammer
      @terribleprogrammer 2 หลายเดือนก่อน

      @@AntonPutra one week would be interesting. You can also mix up jvm, graalvm and go Lang in a single video

    • @AntonPutra
      @AntonPutra  2 หลายเดือนก่อน

      @@terribleprogrammer ok, i'll see if it makes any difference and if it does i'll make something

  • @hectors.1644
    @hectors.1644 3 หลายเดือนก่อน

    Very Nice! great analysis

    • @AntonPutra
      @AntonPutra  3 หลายเดือนก่อน

      thank you!!

  • @KushLemon
    @KushLemon 2 หลายเดือนก่อน

    Enjoyable video. Subscribed.

    • @AntonPutra
      @AntonPutra  2 หลายเดือนก่อน

      thank you! more to come

  • @whiletrue1-wb6xf
    @whiletrue1-wb6xf 3 หลายเดือนก่อน +1

    Great work ! What about C++ vs GO ?

    • @AntonPutra
      @AntonPutra  3 หลายเดือนก่อน

      will do! :) any specific frameworks on c++?

    • @eugehacks
      @eugehacks 2 หลายเดือนก่อน

      @@AntonPutra drogon framework is very very fast and well written

  • @namila007
    @namila007 3 หลายเดือนก่อน +1

    great video!!

    • @AntonPutra
      @AntonPutra  3 หลายเดือนก่อน

      thank you!

  • @alexanderv5975
    @alexanderv5975 หลายเดือนก่อน

    Hi. Nice video indeed. Can you explain why Java uses significantly less memory under load then in idle run?

  • @ionutale1950
    @ionutale1950 3 หลายเดือนก่อน +1

    nice comprarison, this could work great on a batch.
    how is it going to compare on an app, that has peaks during a specific time of the day?

    • @AntonPutra
      @AntonPutra  3 หลายเดือนก่อน

      Thanks! There is a very small difference in terms of scalability; both are small with a fast startup time. I think Go is a little more efficient, so potentially you would need fewer compute resources.

    • @ionutale1950
      @ionutale1950 3 หลายเดือนก่อน +1

      ​@@AntonPutra the way java is using memory with GraalVM is very smart, is like observing the needs, then optimise the RAM needs.
      This could suggest that we could provision the JAVA container with a smaller POD in term of RAM.
      My concern is: how well does java handle random peaks?
      if we have 200 req/s, than right after the RAM stabilises suddenly we get 500 req/s, how well does JAVA handle that peak?
      is java going to panic and ask for wayyyy more memory than it actually needs?
      if this is the case, than the JAVA app may actually crash for insuficient container memory.
      Does it make any sense, what i've just said?

    • @AntonPutra
      @AntonPutra  3 หลายเดือนก่อน

      @@ionutale1950 yes, it does. i'll try to configure the client next time to simulate such spikes when I compare spring boot with quarkus

  • @pauluslestyo7646
    @pauluslestyo7646 3 หลายเดือนก่อน +2

    It's great if you can benchmark framework from bun runtime like Hono and ElysiaJS

    • @AntonPutra
      @AntonPutra  3 หลายเดือนก่อน

      ok noted!

  • @korbendallasmultipass1524
    @korbendallasmultipass1524 3 หลายเดือนก่อน

    Would be good to see a native build test with GraalVM in comparison. Furthermore can Quarkus use Mutiny as Reactive Framework - maybe this would bring the two closer together as well.

    • @AntonPutra
      @AntonPutra  3 หลายเดือนก่อน

      ok noted!

  • @picatchumm64
    @picatchumm64 3 หลายเดือนก่อน

    Hi, Nice job, thank you.
    idea for next benchmark test : Kubernetes vs K3s

    • @premierde
      @premierde 3 หลายเดือนก่อน

      They are platform so how would you like to compare?. If I have some nodes & VMs then I will stick to K8s, otherwise K3s.

    • @AntonPutra
      @AntonPutra  3 หลายเดือนก่อน +1

      ok, I'll see if it makes sense. I'll create some benchmarks or maybe just make comparisons.

    • @picatchumm64
      @picatchumm64 3 หลายเดือนก่อน

      @@AntonPutra I was thinking about CPU and memory benchmarks on the NODE, i.e. what Kubernetes vs K3s eats of the Node performance.
      Otherwise, I just discovered the ClickHouse and meilisearch databases, it seems really good. (sorry for my English)

    • @AntonPutra
      @AntonPutra  3 หลายเดือนก่อน

      @@picatchumm64 ok, got it, basically infrastructure test, how well both can handle load etc, and which one is more efficient/cost effective

  • @helloworld7796
    @helloworld7796 หลายเดือนก่อน

    I do think you should do some kind of load testing on the cheap 5$ instances. For example how many requests these cheap vps can handle before they crash, using golang, rust, php etc.

  • @Virus00000000000001
    @Virus00000000000001 หลายเดือนก่อน +1

    Could you try GraalVM next?

    • @AntonPutra
      @AntonPutra  หลายเดือนก่อน

      yes soon

  • @LawZist
    @LawZist 3 หลายเดือนก่อน

    Great Benchmark! can you share the promQL for the metrics? is it some plugin or you wrote it by yourself? thanks

    • @AntonPutra
      @AntonPutra  3 หลายเดือนก่อน +1

      thanks! it's just open source and i actually have dedicated youtube tutorials how to measure, cpu/memory/vpc etc..
      here is a dashboard and promql queries for this specific video - github.com/antonputra/tutorials/blob/main/lessons/201/dashboard.json
      java metrics - github.com/antonputra/tutorials/blob/main/lessons/201/java-app/src/main/java/com/antonputra/ImageResource.java#L51-L59
      golang metrics - github.com/antonputra/tutorials/blob/main/lessons/201/go-app/metrics.go#L13-L27

    • @LawZist
      @LawZist 3 หลายเดือนก่อน

      @@AntonPutra is there any reason to prefer summary over histogram? And can you please share the link for your measure tutorials? Thanks a lot!

    • @AntonPutra
      @AntonPutra  3 หลายเดือนก่อน +1

      @@LawZist use summary in edge cases when you have a single instance of the app and you can only scale vertically, cause it's not possible to aggregate them over multiple instances, for example to get p90 percentile for 5 replicas of your app. With summary prometheus compute p90 on the client itself. Use histogram in all other cases
      th-cam.com/video/WUBjlJzI2a0/w-d-xo.html
      th-cam.com/video/VjFFzGFyVlY/w-d-xo.html
      th-cam.com/video/dMca4jHaft8/w-d-xo.html
      th-cam.com/video/ff_XHm96PKQ/w-d-xo.html

    • @LawZist
      @LawZist 3 หลายเดือนก่อน

      @@AntonPutra thanks!!

  • @ramencombo
    @ramencombo หลายเดือนก่อน +1

    Why does Java's memory usage is high when it is idle? Also will it also go high when it is idle after processing requests?

  • @S4ntia60
    @S4ntia60 22 วันที่ผ่านมา

    JIT optimization are taken out in quarkus graalVM builds for obvious reasons. While the benefits of being lower level from Graal are great, JIT optimizations are not to be underestimated and they start to trigger later on the execution so they will be less visible at first

    • @AntonPutra
      @AntonPutra  21 วันที่ผ่านมา +1

      ok, i was thinking of comparing them directly

  • @dukim632
    @dukim632 3 หลายเดือนก่อน

    this is a great video! tnx!

    • @AntonPutra
      @AntonPutra  3 หลายเดือนก่อน

      my pleasure!!

  • @ugurata
    @ugurata 29 วันที่ผ่านมา

    Java runtimes were historically designed to consume the resources of the whole VM so may be you can compare a Java app running on a JVM (not a native image but a hotspot JVM) on a VM with 4 cores and 4 GB RAM vs a go app running on Kubernetes using that same VM

  • @ZzooD
    @ZzooD 2 หลายเดือนก่อน +1

    It would be interesting to see a test to failure, who and under what load will start throttling

    • @AntonPutra
      @AntonPutra  2 หลายเดือนก่อน

      yes will do with improved java next time

  • @esatozturk5439
    @esatozturk5439 2 หลายเดือนก่อน

    Perfect work 👍

    • @AntonPutra
      @AntonPutra  2 หลายเดือนก่อน

      thank you!❤️

  • @kawin-vir
    @kawin-vir 3 หลายเดือนก่อน +2

    Would be nice to see Go (Fiber) vs Bun (Elysia)

    • @AntonPutra
      @AntonPutra  3 หลายเดือนก่อน +1

      ok noted!

  • @sarabwt
    @sarabwt 2 หลายเดือนก่อน +1

    It would be interesting if you compare go vs java non native, as non native should have better performance than native. You compile java to native only if you are building a CLI or a lambda, when you need fast startup.

    • @AntonPutra
      @AntonPutra  2 หลายเดือนก่อน

      ok noted!

  • @Sasha192_
    @Sasha192_ 5 วันที่ผ่านมา +1

    Please make a comparison for Java Vert.x vs Golang Fiber

  • @bibahbibah5108
    @bibahbibah5108 3 หลายเดือนก่อน +2

    i wona see spring boot native image vs Quarkus vs go
    spring native is framework like Quarkus so it's nice to compare this 2 framework

    • @AntonPutra
      @AntonPutra  3 หลายเดือนก่อน +1

      ok noted!

  • @muray82
    @muray82 หลายเดือนก่อน

    It would be good to change a bit what the application is doing. In our company we have a piece of code that is meant to validate if we don't have any delays in network stack. To do so we tell the app to generate random 1000 bytes and sent that to client. With that nothing is cached.

  • @sanchitwadehra
    @sanchitwadehra หลายเดือนก่อน

    Dhanyavad

    • @AntonPutra
      @AntonPutra  หลายเดือนก่อน

      my pleasure!

  • @vivekchaudhary5728
    @vivekchaudhary5728 3 หลายเดือนก่อน +1

    can you please do a GO vs node.js Lambda testing? with cold start time, memory usage and other metrics

    • @AntonPutra
      @AntonPutra  3 หลายเดือนก่อน

      ok i already have some lambda benchmarks in that playlist but i'll refresh it soon

  • @Ayush-lj6pq
    @Ayush-lj6pq 3 หลายเดือนก่อน +2

    Please make a tutorial on Golang.

    • @AntonPutra
      @AntonPutra  3 หลายเดือนก่อน +1

      i have couple...
      How to Monitor/Instrument Golang with Prometheus (Counter - Gauge - Histogram - Summary) - th-cam.com/video/WUBjlJzI2a0/w-d-xo.html
      OpenTelemetry Golang Tutorial (Tracing in Grafana & Kubernetes & Tempo) - th-cam.com/video/ZIN7H00ulQw/w-d-xo.html

  • @RiccardoPasquini
    @RiccardoPasquini 2 หลายเดือนก่อน +1

    I would also compare compile time of quarkus native and go executables....

    • @AntonPutra
      @AntonPutra  หลายเดือนก่อน

      ok noted

  • @antonkuranov
    @antonkuranov หลายเดือนก่อน

    Java native images give slower performance at runtime than normal jars because of the lack of hotspot optimizations at runtime. To achieve a similar performance it should be optimized through a previous profiling process.

    • @AntonPutra
      @AntonPutra  หลายเดือนก่อน

      Thanks for the feedback, someone already mentioned that. I'll run some tests in the near future

  • @rolandbayor4444
    @rolandbayor4444 3 หลายเดือนก่อน +1

    I run some tests a while ago just benchmarking algorithms with different languages. To my surprise Java always run them faster than GO

    • @AntonPutra
      @AntonPutra  3 หลายเดือนก่อน +2

      Well, when you deploy to Kubernetes, you have cgroups and other constraints that could affect performance. But as soon as I find a use case where Java performs better, I'll make an updated video-maybe something like a Kafka consumer/producer data pipeline. I'll see.

  • @adesopekingsley9967
    @adesopekingsley9967 3 หลายเดือนก่อน +1

    I subscribed...❤

    • @AntonPutra
      @AntonPutra  2 หลายเดือนก่อน

      thank you!

  • @k1zmt
    @k1zmt หลายเดือนก่อน

    It would be interesting to add C, Rust, NodeJS and Python to the mix.

  • @Petoj87
    @Petoj87 หลายเดือนก่อน

    c# vs java would be nice :) as they both use byte code, JIT and GC :)

  • @miguelalzate4850
    @miguelalzate4850 3 หลายเดือนก่อน

    I would like a test that includes all programming languages up to now and allows for ranking them.

    • @AntonPutra
      @AntonPutra  2 หลายเดือนก่อน

      there are a lot of variables especially in the cloud, noise neighbors etc so it would be hard to compare all of them...

  • @r1nlx0
    @r1nlx0 หลายเดือนก่อน

    Is this using graalvm oracle or graalvm community edition ? very interest on comparing graalvm oracle AOT & JVM based vs golang

    • @AntonPutra
      @AntonPutra  หลายเดือนก่อน

      it should be the community version. i'll make some more java content in the near future.