Company blog of Hazelcast, an in-memory data grid vendor, covering distributed systems, Java performance, stream processing and benchmarks.
HN commenters mostly link it in Hazelcast job postings and product comparisons, and to cite its technical posts, such as the one on green threads in Jet.
The truth is the original Hazelcast replication protocol was not a good fit for some data-structures.
We took the analysis seriously. I know every project and vendor claims that. Here is what we did in recent years:
1. Re-implemented concurrency primitives on top of Raft protocol. This includes Distributed Locks, Semaphores, AtomicLong, etc.
Raft provides linearizability and that's what you usually want for concurrency primitives.
See our epic blog post about locking: https://hazelcast.com/blog/long-live-distributed-locks/
or our Jepsen testing story: https://hazelcast.com/blog/testing-the-cp-subsystem-with-jepsen/
2. Added a FlakeID generator. This is on the opposite side of the consistency spectrum - it's a k-ordered Available (wrt CAP) ID generator.
It won't generate duplicates even when there is a split-brain. See: https://docs.hazelcast.org/docs/4.0.2/manual/html-single/index.html#flakeidgenerator
3. PNCounter - CRDT-based eventually consistent data structure, suitable for .. well, counting things:) See: https://en.wikipedia.org/wiki/Conflict-free_replicated_data_type
4. Significantly extended documentation, to be more explicit about Hazecast replication models and guarantees. The goal is clear: Avoid Surprises. See: https://docs.hazelcast.org/docs/4.0.2/manual/html-single/index.html#consistency-and-replication-model
Disclaimer: Obviously I am biased as I work for Hazelcast.
Locations: Palo Alto, CA | New York
Position: Senior Solutions Architect (fulltime)
Company: Hazelcast, Inc. (http://www.hazelcast.com)
Hazelcast is an in-memory data grid solution.
As a Sn. Solutions Architect, you will work directly with customers and users to help them understand how they can use Hazelcast to achieve better performance and reliablity. Sn. Solutions Architect is an Hazelcast evangelist who loves giving trainings, talking at the conferences, being active in the community and consulting on distributed computing problems.
Responsibilities
Work with Sales personnel to provide technical support and develop proof of concept applications.
Give trainings, speak at the trade shows and conferences.
Be active in the community. Blog and tweet about Hazelcast features/tips/news.
Collect feedback from the community, users and customers, shape the future of Hazelcast.
Provide architectural and advisory consulting for key accounts to ensure successful implementations.
Requirements
10+ years in software development.
Expertise in distributed caching, scalability and highly available systems.
Strong technical skills in Java, Spring, Hibernate and JEE.
Comfortable with Linux, Solaris, Unix and Windows.
~25% travel.
Please contact careers at hazelcast dot com.
The new features make the code easier to read. For example var:
List<Account> accounts = List.of(new Account(1), new Account(2)); var accounts = List.of(new Account(1), new Account(2)); It just reduces visual noise and boilerplate that you already know.
Java 8 is also a slow and old runtime. It performs terribly in 2025. Here’s a quote from 2020 and the gap has only gotten wider [0]:
> JDK 8 is an antiquated runtime. The default Parallel collector enters huge Full GC pauses and the G1, although having less frequent Full GCs, is stuck in an old version that uses just one thread to perform it, resulting in even longer pauses. Even on a moderate heap of 12 GB, the pauses were exceeding 20 seconds for Parallel and a full minute for G1. The ConcurrentMarkSweep collector is strictly worse than G1 in all scenarios, and its failure mode are multi-minute Full GC pauses.
You’re doing a disservice to everyone by continuing to use and glorify it.
[0] https://hazelcast.com/blog/performance-of-modern-java-on-data-heavy-workloads-part-1/
You might get more responses if you posted in Stackoverflow. But here is what I wanted to share:
You can keep the OS X as is. Load current JVM on all of them and connect them to a network.
Then write a program that uses Hazelcast (http://www.hazelcast.com/) that gives you a pseudo-distributed JVM cluster. It actually gives distributed Maps and Queues.
Then mount a bunch of Jetlang (http://code.google.com/p/jetlang/) Fibers into the distributed Map. The Jetlang fibers provide thread-less concurrency.
Then develop a simple function-independent task framework, to which you can pass a function and a parameter map as two arguments, which calls a Callable and returns an Object.
Now create a bunch of tasks, mount them into fibers and mount the fibers into the distributed map.
Finally write a simple countdown latch based task runner, you can safely run four per core, and run them on each mac, sit and watch.
Be careful, you can easily destroy a few database servers..
Hazelcast | Fully Remote, European Time Zones | QA/Quality Lead | https://hazelcast.com/
I'm a Director of Engineering at Hazelcast. We build distributed systems at scale. We're looking for QA Leads/Engineers to help test our distributed storage and compute engines. If you want to do exciting work on distributed systems (think jepsen), find consistency and concurrency issues and do performance testing at scale, Hazelcast might be the right fit for you! Contact me directly at can@hazelcast.com
One of the popular existing job scheduler is Quartz, it is solid and does work pretty well up to a limit. The problem arises where we need to scale-out from a single master DB, there are some workarounds for that, but each has its limitations. (https://hazelcast.com/blog/distributed-task-coordination-with-hazelcast/)
While there are some existing solutions like BigBen from Walmart, it might be possible that they were overkill for the task required.