In the ever-evolving world of IT, scalability and agility are key factors of an architecture that delivers a competitive advantage. Event-driven microservices are rising as the paradigm to deliver those critical factors, and Hazelcast Platform doesn’t just meet but defines the gold standard in boosting microservices-based projects. This platform is a crucial foundation for developers navigating towards responsive, efficient, and resilient solutions. In this discussion, we dissect the symbiotic relationship between Hazelcast Platform and event-driven microservices.

Embracing Event-Driven Microservices

Modern enterprise landscapes demand more from their IT infrastructures. Systems must shift from reactive to predictive; similarly, they must be robust and adaptive. Enter event-driven microservices, an architecture designed to untangle monolithic systems into a highly scalable and responsive network of interconnected services.

From expediting the time-to-market of essential applications to reducing the total cost of ownership (TCO), there are many virtues of event-driven microservices architecture. Yet, with increased agility comes a different sort of planning that requires mapping the entire workflow across a set of independently managed functions. The key is to view each microservice as just an isolated step that is responsible for its own specialized task. The more you think of each microservice as a limited independent stage, the better you can get out of a monolithic application mindset that you’re trying to get away from in the first place.

The Business Case for Event-Driven Microservices

The transition to event-driven microservices is not just a technical journey but one rooted in business imperatives. Faster time-to-market, transparency in business logic, enhanced performance and scale, and a significant reduction in TCO make a compelling argument for enterprises to embrace this modern paradigm.

Business Imperatives Driving Event-Driven Microservices Adoption

As enterprises modernize their applications, the motives to adopt an event-driven microservices architecture are clear and compelling:

  • Enhancing time-to-market: Systems built on event-driven microservices can be continually updated to reflect the ever-changing business requirements, reducing the gap between idea conception and market delivery.
  • Amplifying transparency: With event-driven microservices, business logic is clear and readily visible in each microservice, making it easier to understand, extend, and/or modify capabilities.
  • Improving throughput and scale: The modular structure of event-driven microservices allows for greater parallelism at the microservice level, allowing the deployment of more microservices to overcome bottlenecks and gain throughput and scale.
  • Reducing TCO: By simplifying the overall architecture into a set of task-specific services, maintenance and upgrades become easier to manage, versus redeploying an entire complex, monolithic application.

The Development Challenges of Microservices

For developers, the transition to microservices is often compared to a chess game—every move requires careful planning. Development challenges include achieving SLAs in responsiveness, handling stateful storage, managing updates with minimal disruption, and the orchestration complexity that arises from interacting with a multitude of services.

High Performance in a Microservices World: The Hazelcast Advantage

In the world of microservices, speed is everything. Hazelcast Platform offers an in-memory data store that delivers unparalleled performance. By embedding Hazelcast into the microservices deployment, developers can experience ultra low-latency data retrieval, catering to the high-performance stateful storage and message passing of an event-driven microservices architecture.

Streamlining Inter-Service Communication with Hazelcast

The next frontier of microservices efficiency is inter-service communication. Hazelcast Platform, with its high-speed stream processing engine, paves the way for seamless service-to-service communication, which not only simplifies the communication process but also enhances the responsiveness and real-time nature of microservices systems. Because it’s a distributed system, Hazelcast Platform can provide local stateful storage for each microservice and seamlessly share global messages with others.

Tackling Coordination Complexity

By leveraging events as the mechanism for passing work from microservice to microservice, you simplify the coordination for applications requiring a high degree of parallelism. Hazelcast Platform supports Kafka-like structures, like topics and queues, that can be used as triggers to signal work for the next microservice in the workflow.

Hazelcast As Your Event-Driven Microservices Engine: The Unbeatable Features

What makes Hazelcast Platform a trailblazer in event-driven microservices? Its robust features and benefits cater to the most pressing needs of microservices architects and developers.

Easy to Develop and Deploy

The simplicity of developing applications using Hazelcast Platform is a game-changer. Its cloud-native architecture combines multiple capabilities, including fast data storage, distributed compute, and stream processing. Since it’s all in a single runtime to minimize time spent on low-value integration code, developers can focus on business logic without worrying about the complexities of distributed applications.

Unmatched Performance at Scale

Hazelcast’s ultra-fast performance is a result of years of engineering excellence. It can easily handle enormous transaction volumes, making it the go-to for banking and data science initiatives, including machine learning for fraud detection.

Business-Critical Reliability and Security

Built-in redundancy, efficient WAN Replication, strong data consistency, and an extensive security framework make Hazelcast Platform an solid foundation for mission-critical applications. Its reliability and security features ensure that applications running on Hazelcast are resilient to failures and secure from unauthorized access.

Real-World Deployments: Hazelcast in the Trenches of Event-Driven Microservices

What seems great on paper transforms into tangible business value in real-world deployments. Hazelcast Platform has been the bedrock of many success stories, demonstrating the profound impact it has in elevating enterprises’ microservices architecture to new heights of efficiency and excellence.

Seizing Customer Opportunities with Real-Time Offers

In the age of personalization, Hazelcast enables enterprises to leverage event-driven microservices to analyze customer interactions and provide real-time, customized offers that enhance customer engagement.

Payment Processing Redefined

Hazelcast’s event-driven microservices prowess redefines payment processing by breaking the monolith and distributing it into discrete tasks. The benefits are two-fold – handle greater scale with the resilience required by a 24/7 system, and simplifying deployment so that new capabilities can be added with much less risk.

Mainframe Optimization: The Hazelcast Approach

In an era where IT budgets are scrutinized, Hazelcast brings an event-driven microservices perspective to mainframe operations. Its platform enables enterprises to extract optimum value from existing mainframes by handling the workloads that don’t have to be run in the mainframe, thus reducing the MIPS cost.

Looking Ahead: The Future of Event-Driven Microservices with Hazelcast

The journey of microservices with Hazelcast Platform promises continuous innovation and business transformation. As enterprises seek scalable, efficient, and secure IT architectures, the synergy of event-driven microservices and Hazelcast Platform is the guide to a future where technology is a tool and a transformative force.

For IT professionals, the message is clear – in the realm of event-driven microservices, Hazelcast is not just a technology platform, but also a strategic partner in your quest to harness the power of modern IT architectures.

Ready to modernize your applications? Let’s get started today.

Introduction

The impact of solutions built on the Hazelcast Platform is visible in many aspects of our daily lives. It is a key technology that enables high-performance, scalable, and resilient systems for leading businesses you interact with. Whether you order food for online delivery, send money to a friend, purchase with a credit card, or play an online video game, Hazelcast Platform likely drives a significant part of the operations. You turn to the Hazelcast Platform to accelerate business speed by taking instant action on data-driven initiatives. Many of you have added real-time responsiveness to your systems with the Hazelcast Platform. Real-time systems are especially sensitive to downtime, so resilience is critical in a technology designed for 24/7 operations. These systems are easier to build, deploy, and maintain if you leverage a technology like Hazelcast Platform, designed to support real-time systems with stringent demands in a simplified, cost-effective way.

Data consistency in a fault-tolerant and scalable distributed system is critical in many applications today. Getting high performance and strong consistency takes time and effort. RDBMSs give you consistency but are extremely slow (relatively). Other distributed, consistent systems could be faster. Hazelcast Platform provides consistency across a distributed system to ensure accurate data.

As new trends emerge in the market, requirements for performance, scale, and resilience will continue to rise. As you pursue application modernization initiatives, rethink how software and data are deployed to create more business value. Moving from monolithic to event-driven architectures, especially those that leverage microservices, is just one example of gaining more speed from your digital operations. Leveraging the right technologies for these initiatives is also important because you can only get the advantages you seek if you explore innovations in the market.

Advanced artificial intelligence initiatives, especially those that entail large language models, will need more processing power and data. However, you remain cost-conscious, so there are better answers than an ever-expanding technology stack. Modern, scalable, and highly efficient software-based technologies like Hazelcast Platform are needed to extract the most power from hardware to overcome the cost and complexity challenges they face when trying to move forward with their existing architecture.

Advanced CP / CP Map

Advanced CP ensures strong consistency for key/value data structures, such as “maps,” in a distributed system. This means that any updates made to the data structure are immediately reflected across all nodes in the system, ensuring that all nodes always have access to the most up-to-date information. Furthermore, Advanced CP is designed to provide this level of consistency without sacrificing performance. This is achieved by a highly efficient consensus algorithm that can quickly and accurately determine the correct system state, even during network delays or failures. Advanced CP is a reliable and robust solution for managing key/value data in distributed systems. It allows you to build highly available, scalable, and fault-tolerant applications while ensuring your data is always accurate and up-to-date. We will focus our resources on improving Advanced CP in our Enterprise Edition, enabling us to offer you access to the latest and most advanced features and functionality.

Our enterprise edition provides additional support for mission-critical applications, including higher performance, advanced security features, and improved scalability. By investing in our Enterprise Edition, we can provide you with technology you can rely on for your most critical applications. Our goal is to continue delivering high-quality and innovative software that meets your needs, and we are confident that our enterprise edition will enable us to do just that.

Data consistency in a fault-tolerant and scalable distributed system is critical in many applications today. Getting high performance and strong consistency takes time and effort. RDBMSs give you consistency but are extremely slow (relatively). Other distributed, consistent systems could be faster. Hazelcast Platform provides consistency across a distributed system to ensure accurate data.

Thread-Per-Core

The Thread-per-core (TPC) architecture is a cutting-edge design pattern that has emerged as a powerful solution for improving hardware utilization and efficiency in multi-core CPUs. This design pattern assigns a separate thread to each CPU core, enabling the CPU to avoid resource contention and optimize its performance by simultaneously running independent tasks on each core. This significantly improves hardware efficiency and utilization, with a corresponding increase in the system’s overall performance. The benefits of this architecture are particularly relevant for FinOps initiatives, which aim to optimize financial operations by reducing costs and improving efficiency. By providing greater output with fewer resources, TPC can help organizations achieve their FinOps objectives more effectively. With the TPC architecture, we are committed to ongoing enhancements to optimize your performance further. This technology is the next step in our journey toward providing faster and more scalable solutions. As the technology evolves, we expect to see even greater hardware utilization and efficiency improvements in future releases.

Tiered Storage

Tiered Storage combines the speed of Hazelcast Platform fast data storage with the scale of SSD-based storage to deliver a balanced, cost-effective solution. By leveraging the strengths of in-memory and SSD-based storage, you can handle large data sets required by AI applications at an affordable cost. With Tiered Storage, you can achieve cost-effective scalability without compromising performance or efficiency. It is built on a tiered approach, where data is stored at different tiers based on frequency of access. This allows you to optimize performance while keeping costs low. Overall, Tiered Storage is a powerful and constructive solution that offers you a flexible and scalable storage solution with optimal performance at an affordable cost. It is an essential tool for businesses requiring efficient and effective management of large data sets, particularly those leveraging AI.

User Code Namespaces

User Code Namespaces provide a container for Java classpath resources, such as user code, and accompanying artifacts, such as property files and other resources. This helps you effectively manage access to resources in different namespaces through static or dynamic configuration. This is an Enterprise feature that extends and replaces the now deprecated User Code Deployment functionality. 

Connector Updates

  • Kafka Connect Source connector is now generally available, thus Kafka Connect sources can scale across the whole cluster instead of just a single member.
  • Mongo SQL Connector (SQL over MongoDB) is now generally available. With the addition of security support, you can now secure your data connection with TLS when creating MongoDB mappings over SQL.
  • JDBC SQL Connector (SQL over JDBC) is now generally available. In addition to MySQL and PostgreSQL, the JDBC SQL connector now also supports Oracle and Microsoft SQL Server databases.

Getting Started

Hazelcast Platform 5.4 is available today and several resources can help you get started:

In the ever-changing world of software development, the event-driven microservices architecture has emerged as a game-changer for its ability to enhance agility, scalability, and development pace. Yet, beneath the silver lining of this modular approach lies a complex web of system interdependencies that, if not planned properly, can result in performance bottlenecks. But don’t be daunted by the journey of optimizing an event-driven microservices ecosystem for peak performance.

Let’s delve into three useful techniques that could redefine the benchmarks of your event-driven microservices architecture, offering not just an incremental uptick in efficiency, but a giant leap towards a future-ready infrastructure.

Revisiting Scalability through Smart-Size Microservices

Scalability has been a key advantage of microservices, allowing us to scale only those components that demand it without the bulk of the system getting bogged down. However, the art of scaling is nuanced. Often, the reflex is to scale out, adding more instances to meet burgeoning demand. But does each microservice need to be scaled in parallel, or can we be more discerning with our scaling resources?

Consider the concept of “smart-size microservices.” Assigning a specific level of scalability to each of your microservices, not strictly linear to their usage numbers, is an optimal move. This technique involves profiling the usage patterns and response time of each microservice, then crafting a strategic scaling strategy that aligns with the business demand. Think about it — why deplete resources into scaling a metrics dashboard microservice at the same level as your payment gateway, which handles a distinctly different volume and criticality of transactions?

This practice requires a more nuanced choreographed (or orchestration, if you are not going the event-driven route) layer that can dynamically adjust the scaling limits based on real-time analytics. It’s a sensical step toward squeezing the maximum performance from your microservices, just where you need it.

microservices-architecture-scalability
Scalability: Benefit of Microservices Architecture

 

Embracing Event-Driven Architectures for Real-Time Responsiveness

Event-driven microservices are often the foundation of business reactivity, responding to requests as soon as they arrive. Many traditional microservices architectures are shackled to synchronous communication, which is fine for non-time-sensitive processing in data pipelines. Transitioning to an event-driven model can sever this binding using a choreographed approach to coordinating your microservices communications.

Event-driven architectures (EDAs) are tailored for real-time responsiveness. They ensure that your microservices are informed of significant events across the system and can act upon them instantly. This minimizes the need for repetitive request/response cycles, exponentially increasing efficiency.

The implementation of EDAs varies, but a common enabler is a robust message-broker layer, such as Apache Kafka or RabbitMQ, in conjunction with a distributed compute and/or stream processing technology like Hazelcast Platform, providing a reliable and scalable communication system. By decoupling producers from consumers and introducing temporal dependencies, EDAs can usher in the responsiveness that resonates across your system.

Note the Efficiency Drivers

Non-functional requirements (NFRs), often an afterthought in the software development life cycle, are the underlying factors in performance. These requirements define the operational aspects of a system—availability, reliability, security, and maintainability. In a nutshell, they are the quiet contributors to your system’s efficiency and resilience.

While understandably exciting, a myopic focus on delivering features can inadvertently compromise the delivery of a performant system. Design decisions isolated from non-functional considerations tend to rattle the system at its core. Ensuring that your microservices ecosystem adheres to NFRs from the get-go is no longer optional—it’s imperative.

This involves a rigorous assessment of the underlying infrastructure, code complexity, database queries, and external dependencies to meet the NFR benchmarks. The payoff is substantial; a system architected with NFRs in mind requires less nurturing in production, resulting in a more robust, cost-effective microservices ecosystem. Interestingly, these requirements are often more easily addressed by choosing the most appropriate technologies for your environment. This might ultimately be more cost-effective than spending a significant amount of time refactoring your existing systems to meet your needs. Hazelcast Platform provides availability, reliability, security, and maintainability to ensure you spend more time on business value and less on addressing the NFRs.

Implementation Maps – Forging Your Path to Performance

Embracing these techniques is not a one-size-fits-all prescription. The journey towards an optimized event-driven microservices architecture is a labyrinth, unique to every organization. For some, revising scalability might be the catalyst, leading to the subtle reshaping of your microservices. For others, it could be the seismic shift towards the real-time responsiveness of event-driven architectures.

In all likelihood, it will be a variety of approaches, intertwining to elevate the performance of your event-driven microservices architecture. Each technique brings with it inherent complexities and trade-offs, which, when navigated intelligently, can lead to efficiency levels that will resonate with your users and stakeholders alike.

In this era of digital dominion, your event-driven microservices ecosystem is more than a collection of software artifacts. It is your conduit to the future—a future where agility, scalability, and performance are not merely internal metrics, but the cornerstones of your competitive edge. As you chart your course and meticulously calibrate each component, remember that in a microservices architecture, every component can further your success.

The future of application development continues to be focused on microservices, with event-driven architectures as the pattern that delivers new advantages. Consider the techniques described above, and transform your event-driven microservices from a framework of potential into a powerhouse of efficiency and business value.

Learn more about event-driven microservices and Hazelcast Platform.

The tech world appreciates the term “microservices,” which is often associated with a promise of agile, forward-thinking software architectures. Migrating from monolithic systems to microservices is a seismic shift, one that holds the potential to redefine how businesses operate in the digital space. Yet, for many, it’s shrouded in a veil of new thinking and seemingly complex procedures, leaving them hesitant to embrace the change.

This high-level overview of microservices is a guide as you navigate the deep waters of microservices adoption, translating the dense tech-talk into actionable strategies, and demystifying the transformative approach for enterprises of every scale.

Microservices 101: A Framework for Flexibility

At its core, microservices signify a departure from the traditional monolithic architecture, where the entire software system operates as a single service. The microservices architecture breaks down this monolithic application into a suite of independently deployable services, each organized around a specific business capability. These services communicate through networks, typically HTTP-based REST APIs or messaging queues.

This intricately simple model allows for unparalleled flexibility in the field of software development and deployment. Want to roll out an update to a specific service without impacting the entire setup? Microservices empower you to do just that. Scaling applications? Microservices do so elastically, ensuring resources are allocated where and when they are most needed.

In a world where agility can make or break a business, microservices provide a robust framework for systems to dynamically evolve with market forces and technological advancements.

Unveiling the Myths: Overcoming Perceived Challenges

Despite the appeal and the evident advantages, the road to microservices isn’t without potholes. Many organizations are deterred by misconceptions that lurk around this architectural transformation.

The Steep Learning Curve: A Gentle Climb, Not a Sudden Leap

The anticipated learning curve of microservices isn’t as daunting as it seems. Contrary to the “from-scratch” ethos some associate with the switch, many existing best practices, such as modularity and unit testing, serve as stepping stones that carry over. What changes is the mindset and, to a certain extent, the underlying communication mechanisms—both of which are distinctly trainable.

Moreover, the transition need not be instantaneous. Employing a gradual approach, like the “strangler pattern,” allows organizations to phase out their monolithic applications over time, mitigating the perceived risk and easing the learning curve for developers.

Performance Paranoia: A Myth of Diminished Speed

A common misgiving is the belief that the microservices architecture inevitably leads to a performance slowdown due to the intricately dispersed nature of the system. In reality, when properly implemented with the right set of technologies, microservices can enhance performance. Measuring and monitoring the efficiency of microservices is vital, but it’s no more challenging than doing the same with a monolithic system.

Tools that enable quick debugging and pinpointing of performance bottlenecks, such as distributed tracing and advanced service meshes, stand as a testament to how the switches in architecture need not come at the cost of degradation in performance.

High Upfront Investment: The Long-Term ROI Story

Businesses often shy away from microservices, fearing exorbitant costs at the outset. However, what may seem like an expensive overhaul reaps dividends in the long term. Microservices’ pay-as-you-go model, coupled with elasticity in resource deployment, drastically reduces wastage and significantly optimizes resource costs.

Technological solutions that simplify the integration and management of microservices, like Hazelcast Platform, not only lower the barrier to entry but also drive efficiency, thereby enhancing the return on investment.

Forging the Path Ahead: Best Practices and Tools

Transitioning to microservices is not only about the technical adoption but also the cultural and operational shift. Here are some best practices that can turn the tide in favor of this architectural transformation.

Decentralization and Autonomy. Services in a microservices architecture are independently deployable. Each service can be developed, deployed, and scaled without relying on a central authority, allowing for faster iterations and reduced coordination overhead.

Management and Monitoring. Distributed systems require comprehensive monitoring and management to ensure performance and health. Leveraging tools that offer a holistic view of the system, such as Prometheus for monitoring and Grafana for dashboards, is indispensable.

Security and Compliance. The distributed nature of microservices mandates a thorough security and compliance framework. This may seem like a case against microservices, but if each microservice is managed by a distinct team, then the security management can be compartmentalized to only allow access to other microservices that need data. Granted, that might sound like an overly simplified of security, but if you break down a microservices architecture into a set of individual need-to-know permissions (i.e., a role-based access control model at the microservice level) instead of a monolithic security model, that will help you frame how your data can be protected. Of course, if you have a standard data store with all the characteristics you need (high performance, resilience, scale, etc.) to store state and messages for your microservices, that will further simplify your security model.

In embracing microservices, businesses are not merely adopting a new architecture; they are committing to a newfound operational philosophy—one rooted in versatility and unbounded scalability. By dispelling the myths that shroud the topic and aligning with the best practices, enterprises can unleash the full potential of this modern IT paradigm.

The Future is Modular: Embracing Microservices on a Wider Scale

The trajectory of technology points to a future that is inherently modular and adaptable. Monolithic architectures, with their inherent limitations, are becoming obsolete relics, unable to match the dynamic pace of the modern business ecosystem.

As enterprises increasingly lean on cloud-native technologies and practices, the microservices architecture is set to become the de facto approach to building resilient, scalable, and future-proof systems. The path ahead might seem challenging, but the benefits are worth the investigation and journey.

Navigating the waters of microservices requires a blend of foresight, the right tools, and a commitment to a culture of continuous improvement. It’s more than just a technical shift; it’s a strategic pivot that spells the difference between leading and lagging in the digital transformation race.

In conclusion, as the digital domain expands and redefines the contours of global commerce, microservices are more than just a buzzword. They represent a blueprint for IT scalability, an artillery for innovation, and an assurance of adaptability in the ceaseless march of technology.

If you are looking to distinguish yourself in a fiercely competitive market, the question isn’t if you should adopt microservices, but rather when and how. It’s a journey brimming with opportunities, challenges, and, most importantly, a transformative promise that’s poised to shape the future.

Join us on April 3rd for a hands-on virtual workshop on “Building Event-Driven Microservices.” Sign-up today.

Microservices have become more than just the latest buzzword in the software development landscape. This architectural approach has redefined how modern applications are designed, deployed, and scaled, and its adoption continues to surge among companies aspiring for greater flexibility, agility, and robustness in their IT systems. For software engineers, developers, and tech enthusiasts, understanding microservices is not merely a trend but a vital learning curve that enhances professional capabilities in a rapidly evolving digital environment.

Here, we’ll explore the compelling tides of microservices, diving deep into what they are and how they work, dissecting their comparative advantages over monolithic architectures, and providing a cohesive breakdown of how they can propel your development efforts to new heights with unparalleled scalability, resilience, and more.

Unpacking Microservices

Microservices, in essence, is an architectural style that structures an application as a collection of largely independent services. Unlike monolithic systems, microservices allow each service to be developed, managed, and scaled independently, promoting cross-functional agility and rapid iteration. To appreciate the microservices model, one must grasp the assembly line analogy, where each microservice acts as a specialized station delivering a specific slice of functionality much akin to a finely tuned orchestration of technical prowess.

The fundamental essence of a microservices system lies in its capacity to fragment complex application processes into smaller, manageable components. This modularity encapsulates services that are self-contained and focused on specific tasks, which can communicate with other services through APIs or message-brokering systems.

Each microservice should be designed to execute a unique business objective. In some cases the microservice handles a purely technical objective, delivering the results of a database query. While there are no rigid prerequisites for their construction, microservices thrive on the foundational principles of independence and interconnectivity. They leverage state-of-the-art technologies, diverse programming languages, and deployment strategies to orchestrate these self-contained entities into a harmonious and powerful whole.

A stark illustration defining microservices comes in contrast to the monolith. The monolithic architecture harbors complexity through the coupling of code and entwined components, often presenting deployment and scaling challenges. In contrast, microservices offer a highly scalable landscape where individual components can be expanded and contracted to meet fluctuating demands, absent any ripple effects on the system’s overall performance.

Microservices vs Monolithic Architecture
This diagram compares microservices architecture with monolithic architecture. Microservices are generally easier to build, deploy, and scale due to their smaller size and distributed nature.

The Microservices Advantage: What Makes Them Shine?

Microservices tout many advantages over their monolithic counterparts, including a level of simplicity from a development and deployment standpoint, as well as an easier way to scale.

The granular nature of microservices enables scalability at a component level, granting the autonomy to scale services as necessary without the baggage of extra overhead costs. This distributed agility ensures that applications can handle growing workloads with ease, responding dynamically to mounting traffic surges.

Microservices fortify systems by compartmentalizing failure. In a monolithic structure, the downfall of one component could cascade through the entire system, leading to catastrophic outages. Conversely, in a microservices environment, the failure of a single service remains contained, and redundancy can be built in to allow continued operation, guaranteeing users access to undisrupted functionalities.

The modularity of microservices heralds a new era of agility in software development. Each service, akin to a LEGO brick, can be altered, enhanced, or replaced without disturbing the entire application, fostering a culture of rapid development and deployment. Moreover, this modularity eases the burden of maintenance, as issues within a specific service can be addressed with surgical precision, minimizing the scope of impact.

The granular scale at which microservices operate translates to cost savings and optimal resource utilization. Service-based scaling eradicates the need to upscale an entire application to accommodate growth, ensuring that only the necessary parts are expanded.

Tips for Transitioning to Microservices

Adopting a microservices architecture isn’t a leap but a strategic transition that demands meticulous planning, skillful execution, and a culture of continuous improvement.

  • Start Small, Then Expand. The journey to microservices begins with a single step—select a discrete part of your existing system that can be segregated into a microservice. Over time and through experience, expand your microservices portfolio thoughtfully, addressing each new service with a thorough understanding of its contribution to the broader application.
  • Prioritize Communication/Collaboration. The success of microservices hinges on the robustness of their communication and the collaboration that binds them. Foster clear channels of interaction between services, leveraging synchronous and asynchronous communication patterns that suit your application’s unique requirements.
  • Master the Art of Monitoring and Maintenance. As with any paradigm shift, monitoring and maintaining microservices is key to achieving long-term success. Embrace tools and practices that offer real-time visibility into service health, usage patterns, and response times, empowering you to proactively manage and fine-tune your microservices ecosystem.

Embracing Microservices for a Future-Proofed Development Journey

As you continue your journey of technological evolution, microservices emerge as more than just an architectural concept. They are the bedrock of a future-proof development journey, a navigation tool in a world of digital transformations, and a potent accelerant for businesses seeking to carve their mark in the digital domain.

In this unfolding narrative, microservices promise opportunities for extreme scalability, resilience, and innovation, offering a blueprint for the agile, fault-tolerant, and high-performing applications of tomorrow. So, prepare to embark on a voyage of discovery, arm yourself with the knowledge of microservices, and let its principles guide you to new frontiers of technological excellence.

Why Hazelcast Platform

Hazelcast Platform can play a key role in microservices deployments. Its features and advantages are well suited to support a microservices architecture.

  • Effortless Development and Deployment. Hazelcast Platform offers a straightforward approach to application development. Leveraging a cloud-native framework that delivers key compute and storage capabilities that eliminate the need for complex integration coding, it empowers developers to concentrate on the core functionality of their applications, sidestepping the hurdles associated with the development of distributed applications.
  • Unrivaled Performance at Scale. Hazelcast Platform provides unmatched speed and efficiency to help developers avoid time-consuming optimization and tuning efforts. Designed to effortlessly manage vast volumes of transactions, it is the preferred solution for sectors such as banking and retail, where it significantly enhances capabilities in areas like machine learning for detecting fraudulent activities and delivering relevant offers.
  • Essential Reliability and Security for Business Operations. With intra-cluster replication, efficient WAN Replication, and comprehensive security measures, Hazelcast positions itself as a powerful foundation for applications of critical importance. Its advanced reliability and security protocols ensure that systems operating on Hazelcast Platform remain fault tolerant and are protected against unauthorized intrusion.

Join us on April 3rd for a hands-on virtual workshop on “Building Event-Driven Microservices.” Sign-up today.

Hazelcast Platform offers a unique advantage over other solutions offering in-memory and stream processing separately. It combines both technologies into a single runtime, which results in a seamless developer experience. All API calls can be made within the Hazelcast namespace, simplifying the development process. The real benefit of this implementation becomes evident when data is loaded into Hazelcast Platform for processing. The ability to process data, which is commonly referred to as building data pipelines, is crucial.

Data Pipeline

A data pipeline (also called a pipeline) is a series of steps for processing data consisting of three elements:

  • One or more sources: Where does the data come from?
  • Processing stages: What actions are taken against the data?
  • At least one sink: Where are data results sent from the last processing stage?

Pipelines are an essential component in the modern data processing ecosystem. They are mainly used to move data from one location to another while processing it in between. Pipelines provide a seamless way to process data stored in one location and send the result to another, such as from a data lake to an analytics database or into a payment processing system. 

One of the most significant benefits of using pipelines is that they can be used to process data without manual intervention, which saves time and reduces the likelihood of errors. Additionally, pipelines can automate the movement and processing of data, resulting in a more streamlined and efficient workflow.

Moreover, pipelines can also be used to process data multiple times and send it to different locations. For example, the same source and sink can be used so that the pipeline only processes data. This can be useful to avoid unnecessary data duplication and processing.

Batch and Stream Processing

Depending on the data source, pipelines can be used for the following patterns:

  • Batch processing: Processes a finite amount of static data for repetitive tasks such as daily reports.
  • Stream processing: Processes an endless stream of data, such as events, to deliver results as the data is generated.

What are transforms and how to use them?

Hazelcast Platform is a distributed computing platform offering a range of data processing transformations. Depending on the user’s specific needs, these transforms can be used to analyze, filter, aggregate, or manipulate data sets.

Some available transforms in Hazelcast Platform include map, filter, flatmap, aggregate, and group-by. The map transform transforms each element in a data set by applying a user-defined function. The filter transform is used to select elements that meet a certain condition. The flatmap transform transforms each element in a data set into zero or more elements. The aggregate transform performs calculations on a data set and returns a single result. The group-by-transform groups elements in a data set based on a specific attribute.

Learning how to use these transforms can help improve data processing efficiency and enable users to extract valuable insights from large data sets. By leveraging transforms, users can better understand their data and make more informed decisions.

Hazelcast Platform transforms are organized into two categories by state.  Stateless and stateful concepts in programming refer to how a system or program manages and stores information. 

Stateless

A stateless system or program does not track data between requests or sessions. Each request is processed independently, and the system does not rely on any information from previous requests. Stateless systems are simpler and more scalable, but they may not be suitable for certain applications that require persistent data. 

Stateless transforms do not have any notion of state, meaning that all items must be processed independently of previous items.

These methods transform the input into the correct shape that further, more complex ones require. The key feature of these transforms is that they do not have side effects and treat each item in isolation.

Stateful

On the other hand, a stateful system or program maintains information or state between requests or sessions. This means the system relies on information from previous requests to process new ones. For example, an e-commerce website may store items in a user’s shopping cart between requests. Stateful systems are more complex and less scalable, but they are often necessary for applications that require persistent data, such as banking or healthcare systems.

Stateful transforms accumulate data, and the output depends on previously encountered items.

For example, using stateful transforms, one could count how many items have been encountered in a stream and emit the current count with every new item. To do so, Hazelcast Platform maintains a current state of the number of total items encountered so far.

Regarding maintaining state, it’s important to note the difference between streaming and batch jobs. Windowing is only applicable to streaming jobs because it involves an element of time. On the other hand, one-time aggregation over the entire dataset is only possible in batch pipelines.

Deep dive into “mapUsing…” transforms

The “mapUsing…” transforms are a specific subset of stateless transforms. Developers can use these transforms to perform complex data manipulations, such as converting data to different formats, combining data from multiple sources, and performing calculations on data. This flexibility makes “mapUsing…” transforms an essential tool for developers who need to manipulate data in various ways.

Overall, these transforms are a valuable tool for any developer who needs to manipulate data flexibly and efficiently. With their ability to customize data mappings, developers can easily create complex transformations that meet specific requirements, making them a popular choice among developers.

Java Lambda Expressions

A developer must understand Java Lambda Expressions to utilize transforms fully.

Java Lambda Expressions are a powerful feature introduced in Java 8 that allows developers to write more concise and readable code. A Lambda Expression is a short code block representing a single-method interface. 

Here’s a brief tutorial on how to use Lambda Expressions in Java:

  • Syntax: The basic syntax of a Lambda Expression is as follows:
  1. (argument) -> (body)

For example:

  1. (x, y) -> x + y
  • Interfaces: Lambda Expressions can only be used with interfaces with a single abstract method, also known as functional interfaces. For example, the java.util.function package contains several built-in functional interfaces, such as Predicate, Consumer, and Supplier.

  • Functional Interfaces: To use a Lambda Expression, developers need to create an instance of a functional interface that matches the Lambda Expression signature. For example, if a functional interface with a single method takes two arguments and returns a Boolean, a developer can use a Lambda Expression like so:
  1. Predicate<Integer> isEven = (n) -> (n % 2 == 0);
  • Type Inference: In Java 8, a developer can use type inference to let the compiler deduce the type of the Lambda Expression parameters. For example, instead of writing:
  1. Predicate<Integer> isEven = (Integer n) -> (n % 2 == 0);

A developer can write:

  1. Predicate<Integer> isEven = (n) -> (n % 2 == 0);
  • Method References: Lambda Expressions can also be used with method references, which allow a developer to refer to an existing method by its name instead of writing a Lambda Expression that calls the method. For example:
  1. List<String> names = Arrays.asList("Alice", "Bob", "Charlie");
  2. names.forEach(System.out::println);
mapUsingIMap

The mapUsingIMap transform is an advanced feature that allows you to retrieve each incoming item efficiently from its corresponding IMap1. With this transformation, you can seamlessly combine the lookup result with the input item, providing a detailed and comprehensive view of your data. This feature is especially useful for complex data transformations or large datasets. By utilizing this transform, you can simplify your data processing pipeline and improve the overall efficiency of your workflow. Experience the benefits of this powerful feature today and take your data processing to the next level.

  1. StreamStage<Order> orders = pipeline
  2.   .readFrom(KafkaSources.kafka(.., "orders"))
  3.   .withoutTimestamps();
  4. StreamStage<OrderDetails> details = orders.mapUsingIMap("products",
  5.   order -> order.getProductId(),
  6.   (order, product) -> new OrderDetails(order, product));

In the code snippet above, line 1 declares the “orders” object that receives the Kafka message, which we can assume is a new order. On line 4, the “details” object accesses the product information for the order using the ‘orders.mapUsingIMap(“products”,’. On line 5, the transform retrieves the specific product data by matching the “order” with the “order.getProductId(),”. Line 6 uses the “order” and “product” objects to create a new OrderDetails object.

* IMap – Distributed maps, also known as maps or IMaps, are a type of data structure that store key-value pairs and are designed to be partitioned across a cluster. This means that each node in the cluster stores a portion of the data rather than the data being stored on a single machine. This approach provides several benefits, including improved scalability and fault tolerance.

mapUsingReplicatedMap

The mapUsingReplicatedMap transform is a data processing technique that uses a ReplicatedMap2 instead of an IMap to store and process data. ReplicatedMap2 is a distributed data structure that provides high availability, fault tolerance, and scalability by replicating data across multiple nodes. It is like the IMap data structure but with additional features such as automatic data replication, conflict resolution, and event listeners. The mapUsingReplicatedMap transform is particularly useful when data consistency and availability are critical, such as in distributed systems, real-time applications, and high-traffic websites. Using ReplicatedMap2 instead of IMap, the transform ensures that data is always available and consistent, even in node failures or network outages.

  1. StreamStage<Order> orders = pipeline
  2.   .readFrom(KafkaSources.kafka(.., "orders"))
  3.   .withoutTimestamps();
  4. StreamStage<OrderDetails> details = orders.mapUsingReplicatedMap("products",
  5.   order -> order.getProductId(),
  6.   (order, product) -> new OrderDetails(order, product));

For a detailed breakdown of the code snippet above, see mapUsingIMap.

* ReplicatedMap – A Replicated Map is a distributed data structure that stores key-value pairs in a cluster of computers. The data stored in this structure is replicated to all cluster members, ensuring that all nodes have an identical copy of the data. This replication provides high-speed access to fully replicated entries, as any node in the cluster can respond to a read request, eliminating the need for communication with other nodes. Additionally, the replication of data ensures that the system is highly available, as a node failure does not cause data loss and can be easily recovered by replicating the data from the surviving nodes.

mapUsingService

The mapUsingService transform is a versatile function that takes an input and applies a mapping using a service object, an external HTTP-based service, or a library loaded and initialized during runtime, like a machine learning model.

This function is particularly useful when you need to perform complex mappings that would require a significant amount of manual effort. By leveraging the capabilities of a service object, you can streamline your data transformation process and save valuable time and resources.

Using mapUsingService allows you to take advantage of the latest technologies and innovations in data mapping. For example, you can use a machine learning model to automatically generate mappings based on patterns in your data, which can lead to more accurate and reliable results.

The service itself is defined through a ServiceFactory object. The main difference between this operator and a simple map is that the service is initialized once per job. This makes it useful for calling out to heavy-weight objects that are expensive to initialize (such as HTTP connections).

Let’s imagine an HTTP service that returns details for a product and that we have wrapped this service in a ProductService class:

  1. interface ProductService {
  2.   ProductDetails getDetails(int productId);
  3. }

In the code snippet above, line 1 declares an interface “ProductService.” Line 2 declares a method “getDetails” that takes in an integer for “productId” which returns the “ProductDetails” object.

We can then create a shared service factory as follows:

  1. StreamStage<Order> orders = pipeline
  2.   .readFrom(KafkaSources.kafka(.., "orders"))
  3.   .withoutTimestamps();
  4. ServiceFactory<?, ProductService> productService = ServiceFactories
  5.   .sharedService(ctx -> new ProductService(url))
  6.   .toNonCooperative();

In the code snippet above, line 1 declares the “orders” object populated from a Kafka pipeline containing order messages (lines 2-3). Line 4 declares a “productService” object that returns ServiceFactory, which implements the ProductService interface.

“Shared” means that the service is thread-safe and can be called from multiple threads, so Hazelcast Platform will create just one instance on each member and share it among the parallel tasks.

We also declared the service “non-cooperative” because it blocks HTTP calls. A developer must do this to ensure the performance of the pipeline and all the jobs running on the cluster.

We can then perform a lookup on this service for each incoming order:

  1. StreamStage<OrderDetails> orderDetails = orders.mapUsingService(productService,
  2.   (service, order) -> {
  3.     ProductDetails productDetails = service.getDetails(order.getProductId);
  4.     return new OrderDetails(order, orderDetails);
  5.   }
  6. );

In the code snippet above, line 1 declares the “orderDetails” variable populated from the “orders” object in the previous code snippet via the “mapUsingService” method. On line 2, the “service” and “order” variables map to the “ProductService” and “Order” objects, respectively. On line 3, the “productDetails” object is populated with “ProductDetails” data from the “service” based on the corresponding “order.getProductId”. Line 4 returns the new “OrderDetails” object with the “order” and “orderDetails” variables populated.

mapUsingServiceAsync

The mapUsingServiceAsync transform is identical to mapUsingService with one important distinction: the service, in this case, supports asynchronous calls, which are compatible with cooperative concurrency and don’t need extra threads. It also means we can simultaneously have multiple requests in flight to maximize throughput. Instead of the mapped value, this transform expects the user to supply a CompletableFuture<T> as the return value, which will be completed at some later time. CompletableFuture is a class introduced in Java 8 that allows us to write asynchronous, non-blocking code. It is a powerful tool to help us write more efficient and responsive code.

For example, if we extend the previous ProductService as follows:

  1. interface ProductService {
  2.   ProductDetails getDetails(int productId);
  3.   CompletableFuture<ProductDetails> getDetailsAsync(int productId);
  4. }

In the code snippet above, line 1 declares an interface “ProductService.” Line 2 declares a method “getDetails” that takes an integer parameter for “productId,” which returns the “ProductDetails” object. Line 3 declares a method “getDetailsAsync” that takes an integer parameter for “productId,” which returns the “CompletableFuture<ProductDetails>” object.

We still create the shared service factory as before:

  1. StreamStage<Order> orders = pipeline
  2.   .readFrom(KafkaSources.kafka(.., "orders"))
  3.   .withoutTimestamps();
  4. ServiceFactory<?, ProductService> productService = ServiceFactories
  5.   .sharedService(ctx -> new ProductService(url));

In the code snippet above, line 1 declares the “orders” object populated from a Kafka pipeline containing order messages (lines 2-3). Line 4 declares a “productService” object that returns ServiceFactory, which implements the ProductService interface.

The lookup instead becomes async, and note that the transform also expects to return.

  1. StreamStage<OrderDetails> orderDetails = orders.mapUsingServiceAsync(productService,
  2.   (service, order) -> {
  3.     CompletableFuture<ProductDetails> futureProductDetails = service.getDetailsAsync(order.getProductId);
  4.     return futureProductDetails.thenApply(orderDetails -> new OrderDetails(order, orderDetails));
  5.   }
  6. );

In the code snippet above, line 1 declares the “orderDetails” variable populated from the “orders” object in the previous code snippet via the “mapUsingServiceAsync” method. On line 2, the “service” and “order” variables map to the “ProductService” and “Order” objects, respectively. On line 3, the “futureProductDetails” variable is populated with “ProductDetails” data from the “service” based on the corresponding “order.getProductId”. Line 4 returns the new “OrderDetails” object with the “order” and ”orderDetails” variables populated.

The main advantage of async communication is that we can simultaneously have many invocations to the service in flight, resulting in better throughput.

mapUsingServiceAsyncBatched

The mapUsingServiceAsyncBatched transform is like the previous one. Still, instead of sending one request at a time, we can send in so-called “smart batches” (for a more in-depth look at the internals of the Hazelast stream processing engine, see Cooperative Multithreading3). Hazelcast Platform will automatically group items as they come, allowing us to send requests in batches. For example, this can be very efficient for a remote service, where instead of one roundtrip per request, it can send them in groups to maximize throughput. 

* Cooperative Multithreading – Hazelcast Platform doesn’t start a new thread for each concurrent task. The execution of a task can be suspended purely on the Java level. The underlying thread executes, returning control to the framework code that manages many coroutines on a single worker thread. We use this design to maximize CPU utilization.

If we would extend our ProductService as follows:

  1. interface ProductService {
  2.     ProductDetails getDetails(int productId);
  3.     CompletableFuture<ProductDetails> getDetailsAsync(int productId);
  4.     CompletableFuture<List<ProductDetails>> getAllDetailsAsync(List<Integer> productIds);
  5. }

In the code snippet above, line 1 declares an interface “ProductService.” Line 2 declares a method “getDetails” that takes an integer parameter for “productId,” which returns the “ProductDetails” object. Line 3 declares a method “getDetailsAsync” that takes an integer parameter for “productId,” which returns the “CompletableFuture<ProductDetails>” object. Line 4 declares a method “getAllDetailsAsync” that takes a List<Integer> parameter for “productIds,” which returns the “CompletableFuture<List<ProductDetails>>” object.

We still create the shared service factory as before:

  1. StreamStage<Order> orderList = pipeline
  2.   .readFrom(KafkaSources.kafka(.., "orders"))
  3.   .withoutTimestamps();
  4. ServiceFactory<?, ProductService> productService = ServiceFactories
  5.   .sharedService(ctx -> new ProductService(url));

For a detailed breakdown of the code snippet above, see mapUsingServiceAsync.

We can then rewrite the transform as:

  1. StreamStage<OrderDetails> orderDetails = orders.mapUsingServiceAsyncBatched(productService,
  2.   (service, orderList) -> {
  3.     List<Integer> productIds = orderList
  4.       .stream()
  5.       .map(o -> o.getProductId())
  6.       .collect(Collectors.toList())
  7.   CompletableFuture<List<ProductDetails>> futureProductDetails = service
  8.       .getDetailsAsync(order.getProductId());
  9.   return futureProductDetails.thenApply(productDetailsList -> {
  10.       List<OrderDetails> orderDetailsList = new ArrayList<>();
  11.         for (int i = 0; i < orderList; i++) {
  12.           new OrderDetails(order.get(i), productDetailsList.get(i)))
  13.         }
  14.       };
  15.   });
  16. })

In the code snippet above, line 1 declares the “orderDetails” variable populated from the “orders” object in the previous code snippet via the “mapUsingServiceAsyncBatched” method. On line 2, the “service” and “orderList” variables map to the “ProductService” and “Order” objects, respectively. On line 3, the “productIds” variable is populated from “orderList.” Line 7, the “futureProductDetails” variable is populated from the “service.getDetailsAsync” method. Line 9, the “futureProductDetails,” a  CompletableFuture<List<ProductDetails>> object, returns the new “OrderDetails” object by mapping the “order” and “productDetailsList.”

Combining the results will require additional code. However, if the service can batch efficiently, this approach should improve throughput.

mapUsingPython

With the mapUsingPython transform, you can leverage the power of Python to unlock insights from your data and accelerate your data-driven decision-making process. The Hazelcast Platform can call Python code to execute a mapping step in the pipeline. To do so, the Hazelcast Platform servers must run on Linux or Mac operating systems with Python installed. Additionally, the hazelcast-jet-python module must be deployed on the classpath by being present in the lib directory. It is important to note that Hazelcast Platform supports Python versions 3.5-3.7.

The developer is expected to define a function, conventionally named transform_list(input_list), that takes a list of strings and returns a list whose items match positionally one-to-one with the input list. Hazelcast Platform will call this function with batches of items the Python mapping stage receives. If necessary, the developer can also use a custom name for the transforming function.

Internally, the Hazelcast Platform launches Python processes that execute the function. It launches as many of them as requested by the localParallelism setting on the Python pipeline stage. It prepares a local virtual Python environment for the processes to run in, and they communicate with it over the loopback network interface using a bidirectional streaming gRPC call.

Some simple Python work that fits into a single file can tell Hazelcast Platform just the name of that file, which is assumed to be a Python module file that declares transform_list:

  1. StreamStage<String> sourceStage = sourceStage();
  2. StreamStage<String> pythonMapped = sourceStage.apply(PythonTransforms.mapUsingPython(
  3.   new PythonServiceConfig().setHandlerFile("path/to/handler.py")));

In the code snippet above, line 1 declares the “sourceStage” variable. Line 2 declares the “pythonMapped” variable that is set to the “sourceStage” object with the “PythonTransforms.mapUsingPython” method. Line 3 creates a new “PythonServiceConfig” object and sets the path to the Python file to run.

And here’s an example of handler.py:

  1. def transform_list(input_list):
  2.   return ['reply-' + item for item in input_list]

In the code snippet above, line 1 declares the Python function “transform_list,” which takes “input_list” as a parameter. After line 1, the developer would add Python code to process the data passed to the function via “input_list.” Line 2 shows a simple return statement to Hazelcast.

An entire Python project that a developer wants to use from Hazelcast Platform, name its base directory, and Hazelcast Platform will upload all of it (recursively) to the cluster as a part of the submitted job. In this case, a developer must also name the Python module that declares transform_list:

  1. StreamStage<String> sourceStage = sourceStage();
  2. StreamStage<String> pythonMapped = sourceStage.apply(PythonTransforms.mapUsingPython(
  3.   new PythonServiceConfig().setBaseDir("path/to/python_project")
  4.     .setHandlerModule("pipeline_handler"))
  5. );

In the code snippet above, line 1 declares the “sourceStage” variable. Line 2 declares the “pythonMapped” variable that is set to the “sourceStage” object with the “PythonTransforms.mapUsingPython” method. Line 3 creates a new “PythonServiceConfig” object and sets the path to the Python file to run. Line 4 sets the Python file (does not include the “.py” extension).

Python code often uses non-standard libraries. Hazelcast Platform recognizes the requirements.txt file to satisfy all listed requirements.

Hazelcast Platform supports two bash scripts, init.sh and cleanup.sh, that can be used for a job’s initialization and cleanup phases. These scripts run once per job, regardless of the parallelism of the Python stage, and they execute within an already activated virtual environment context.

Getting requirements.txt working in production back-end environments where public internet access is unavailable can be challenging. To overcome this, a developer can pre-install all the requirements to the global or user-local Python environment on all Hazelcast Platform servers. Alternatively, a developer can take full control by writing logic in init.sh that installs the dependencies in the local virtual environment. For instance, they can utilize pip with the –find_links option.

 

Our community has been core to Hazelcast since it was founded more than a decade ago. As our product has evolved from an in-memory data grid and stream processing engine to a unified real-time data platform, community members have been our most prominent champions guiding us over the years. Throughout this time, the adoption of Hazelcast Platform Community Edition has grown significantly, especially in the last two years with the introduction of v5.0.

In keeping with the true ethos of open-source, we’ve never sought to monetize the Hazelcast Platform Community Edition, nor do we plan to monetize anything developed by contributors or third-party projects.

Today, we’re announcing some changes that may affect some of our open-source users. The goal is to tightly align our R&D investment priorities with the needs of our Global 2000 customers and the global community.

Why the Change

The simple answer is “focus.”

Hazelcast R&D must serve its community and commercial users. When use cases are considered, each group’s respective needs diverge. For example, compare the requirements of a frequent Community Edition use case, such as session caching, with a mission-critical enterprise use case, such as cross-border payment processing or real-time fraud detection.

Further, the AI era is increasing the expectations for critical functionality such as:

  • AI processing
  • Faster data integration at a lower cost
  • RTO/RPO-zero goals, and
  • Simplicity of use

As a result, we must align our R&D to continue supporting our community and the advanced needs of our enterprise customers.

What Is Not Changing
  • Our license will remain Apache 2.0
  • The delivery of Community Edition releases on a major/minor schedule
  • Our continued support of the global community through developer relations activities
What Is Changing in Hazelcast Platform Community Edition

CVE Patches
With the release of Hazelcast Platform 5.4, Enterprise customers will receive Common Vulnerabilities and Exposures (CVEs) patches as soon as they are ready to ensure they comply with their industry’s regulatory requirements. In the Community Edition, patches to CVEs will be remedied in major and minor releases only (e.g. x.0, x.1, x.2, etc.). 

Kubernetes Support
To focus on the needs of managing all aspects of Hazelcast Platform, especially the Enterprise Edition features for mission-critical environments, our engineering resources will focus on delivering the highest quality Kubernetes functionality to our customers. With the release of Hazelcast Platform 5.5, Hazelcast Operator and its cluster creation capabilities will no longer be available in the Community Edition.

Customers can also expect ongoing maintenance and support for Helm Charts in the Enterprise Edition of Hazelcast Platform. Beginning with Hazelcast Platform 5.4, Helm Charts in the Community Edition will become community-driven.

CP Subsystem
The current iteration of the CP Subsystem in Hazelcast Platform provides strong data consistency in an in-memory architecture only. Because of its limited scope and lack of persistence, the open-source version of CP Subsystem is not recommended for mission-critical, production deployments. As a result, the existing CP Subsystem will be deprecated from the Community Edition and will no longer be supported as of Hazelcast Platform 5.5.

With Hazelcast Platform 5.4 Enterprise Edition, customers will gain access to a new, advanced version of the CP Subsystem with Persistence. The new capabilities of our Advanced CP Subsystem, a requirement for production environments, will ensure we deliver strong data consistency while supporting recovery goals in the event of a site-wide failure. 

Visit Hazelcast Platform Feature Comparison Page to learn about the differences between the Enterprise Edition and Community Edition.

When Does it Change
  • Most of the changes will begin with our next release, Hazelcast Platform 5.4. The remaining updates will be implemented with the release of Hazelcast Platform 5.5.
  • Hazelcast will continue to honor existing customer agreements to support Hazelcast Platform Community Edition and work closely with customers on a transition plan.

Contact us to learn more.

I love sharing our customer stories and celebrating the successes of our innovative customers and users. Today, I’m spotlighting BNY Mellon, a global authority at the center of finance. It has nearly $50 trillion in assets for its clients, which include more than 90% of the companies in the Fortune 100. The global financial services company is known for investing in what’s next and exploring every opportunity to give its clients an edge.

A few months ago, I had the opportunity to meet Michael Goldverg, Managing Director & Distinguished Engineer at BNY Mellon at the Current Kafka Summit in San Jose, where he presented. Michael is an innovative technology leader who’s been expanding the use of the community edition of Hazelcast Platform for more than 8 years to help BNY Mellon do more—faster. 

He shared his story and views about the rapidly evolving stream processing platform market, as well as how he and his team have evolved their use of our high-performance, resilient, and scalable unified real-time data platform. BNY Mellon uses the Hazelcast Platform for ultra-low latency data storage and compute to optimize business operations in real time and enable ultra-fast intelligent action in the era of AI.

Enjoy the video interview and keep reading for more highlights from the conversation:

BNY Mellon Requires Fast Data Access to Speed Up Application Response Times 

Access to the freshest, most up-to-date information about entitlements or permissions about who has access to what, when, and where is a mission-critical and enterprise-wide process for banks and financial services companies. It’s a highly regulated function (SOX, GLBA, and Basel II) and a value-added capability that employees use to gain business insights, boost customer experience, improve operational efficiency, mitigate risk, and reduce fraud. 

Hundreds of systems are integrated with the entitlements system, so it’s essential to enable fast access to the latest entitlement information using a high-performant, resilient, and scalable data store. Unfortunately, many entitlement systems rely on slow databases that don’t meet these requirements. 

At BNY Mellon, there was increasing demand on the entitlement system, and as a result, the system’s performance was slow. Like many of our customers, to speed up application response times, the bank started using the open source version of Hazelcast Platform as a real-time fast data store – or caching layer – by pulling entitlement data from two systems, one of which is an Oracle database, to continuously refresh it in real-time and ensure the most up-to-date information is available at all times. According to Michael, Hazelcast’s fast data storage capabilities reduced response times from “multiple seconds to a few milliseconds.” 

“Within a couple of weeks, we created a data abstraction layer with the Hazelcast Platform that provides extremely efficient data processing. It underpins business-critical applications, enabling instant action even during peak demand,” Goldverg says. “It was a very straightforward answer to a fairly complex problem.”

Instead of building, integrating, maintaining, and operating multiple technologies for our real-time architecture, we simplified our application development and modernization by using a unified real-time data platform.

About Hazelcast Platform
Hazelcast Platform is a unified real-time data platform that simplifies application development and modernization to accelerate time-to-market while reducing maintenance overhead and lowering TCO. The software platform uniquely combines a distributed compute engine and a fast data store into a single runtime to process both streaming data and stored data. 

It enables three approaches for application modernization: 

  1. real-time data storage and compute with continuous data updates and enrichment, 
  2. real-time action through an event-driven architecture, and 
  3. real-time intelligent action with AI/ML-based automation including fast and easy-to-deploy ML inference capabilities. 

Hazelcast Platform supports the major cloud providers, namely AWS, Azure, and GCP.

“Instead of building, integrating, maintaining, and operating multiple technologies for our real-time architecture, we simplified our application development and modernization by using a unified real-time data platform,” says Goldverg. “It uniquely combines a distributed compute engine and a fast data store into a single runtime to process both streaming data and stored data. It minimizes operational disruptions and fast recovery with resilience and provides elastic scalability and faster time-to-market with a low TCO.”   

BNY Mellon Experienced the Value of Operating on Data In Real-Time
Over time, BNY Mellon’s usage grew beyond fast data storage to include high-speed, data-colocated compute and event processing, Goldverg says. “It was quite exciting to see what else we could do with the product. Over time, we were able to do a lot more.” 

The prime example of this is BNY Mellon’s use of the Hazelcast Platform is for stream processing and leveraging real-time events. BNY increasingly saw the need to operate quickly on data flowing in from real-time events. “Operating on data in real-time opened up a lot of opportunities,” said Goldverg, including fraud prevention use cases. 

Effective use of stream processing is a common challenge, and other companies will face many of the same difficulties overcome by BNY Mellon. 

For instance, to take advantage of stream processing capabilities, what’s needed is for data to come in continuously—not in batches.

“As we saw how data arrived, we saw more opportunities to perform processing as soon as data came in,” Goldverg says. “The seeds are there” for BNY to offer that business capability to clients now.

“Don’t think of Hazelcast Platform as just a cache for storing and reading data. It’s a high performance distributed storage and compute platform for ultra fast data processing. You can use it to reduce processing time from minutes to milliseconds. Instead of retrieving the data and then computing it, you can push the processing where the data resides. We are further optimizing data processing by analyzing streaming data, from multiple sources including Kafka, before it is stored instead of processing in batches.”  

What BNY Mellon has accomplished with stream processing is just the beginning.

Exploring Flink vs. Hazelcast for Stream Processing 

BNY Mellon is constantly reviewing new technologies. But “Hazelcast Platform is already doing what other new products are just now starting to do,” Goldverg says.

Flink, for instance, “is less mature and complex to ramp up and use,” as are other newer products. “The Hazelcast Platform is a solid streaming platform. It’s much more mature, stable, proven and highly performant for complex data operations for use in business-critical applications where you can’t afford to have downtime. It’s ready to use with enterprise-grade features, resiliency, scalability and high availability. And, it’s easier for developers to ramp up and use.”  

“What BNY Mellon has accomplished with stream processing is just the beginning,” says Goldverg.

Advice for Getting Started with Stream Processing
Goldverg’s tips for others when using the Hazelcast Platform, especially around stream processing:

  • Start small. With success, you’ll become proficient with the Hazelcast Platform and learn to solve problems. The open source version of Hazelcast Platform is great for test, development, and experimentation.
  • Test to validate. Don’t rely on manual testing. Write tests that define what you want the system to do so you can rapidly test.
  • Define performance goals. The Hazelcast Platform is all about performance. Define goals and gradually iterate to success.
  • At Hazelcast We Bring Passion for Customers

At Hazelcast, among our five values is the “customers for life” philosophy we embrace daily. We are committed to building strong relationships with our customers and users to ensure their application modernization initiatives are successful. From our users to customers – including our esteemed product strategy board (PSB) – we value all feedback to drive innovation and improvement.

We’re thrilled to have leaders like Michael as a customer, user, and member of our PSB. Innovators like him are simplifying building, running, and maintaining high-performance applications to accelerate their company’s time-to-market, at a lower TCO. 

For more on what makes Hazelcast so impactful, hear directly from Michael about BNY Mellon’s use of the Hazelcast Platform enabled it to shift data processing speeds from minutes to milliseconds.

Real-time machine learning refers to the application of machine learning algorithms that continuously learn from incoming data and make predictions or decisions in real-time. Unlike batch machine learning, where data is collected over a period and processed offline in batches, real-time ML operates instantaneously on streaming data, allowing immediate responses to changes or events.

End-to-end, real-time machine learning pipeline using Hazelcast Platform.

Common use cases include fraud detection in financial transactions, predictive maintenance in manufacturing, recommendation systems in e-commerce, and personalized content delivery in media. Challenges in building real-time ML capabilities include managing high volumes of streaming data efficiently, ensuring low latency for timely responses, maintaining model accuracy and performance over time, and addressing privacy and security concerns associated with real-time data processing. This article delves into these concepts and provides insights into how organizations can overcome these challenges to deploy effective real-time ML systems.

Now we have explained the difference between batch ML and real-time ML, it’s worth mentioning that in real-life use cases, you can have batch ML, real-time ML or in between batch and real-time. For example, you can have scenarios where you have real-time inference with batch features, real-time inference with real-time features, or real-time inference with batch features and real-time features. Continuous machine learning is beyond the scope of this article, but you can apply real-time feature solutions to continuous machine learning (CML), too. 

Hybrid approaches that combine real-time and batch-learning aspects offer a flexible solution to address various application requirements and constraints. Here are some expanded examples: 

Use cases

Batch

Real-time

Fraud Detection in Banking

Initially, a fraud detection model can be trained offline using a large historical dataset of transactions. This batch training allows the model to learn complex patterns of fraudulent behaviour over time, leveraging the entirety of available historical data.

Once the model is deployed, it learns in real-time as new transactions occur. Each transaction is processed in real-time, and the model is updated periodically (e.g., hourly or daily) using batches of recent transaction data. This real-time updating ensures that the model can quickly adapt to emerging fraud patterns without sacrificing computational efficiency.

Recommendation Systems in E-commerce

A recommendation system may be initially trained offline using a batch of historical user interaction data, such as past purchases, clicks, and ratings. This batch training allows the model to effectively learn user preferences and item similarities.

Once the model is deployed, it can be fine-tuned in real-time as users interact with the system. For example, when a user makes a purchase or provides feedback on a product, the model can be updated immediately to adjust future recommendations for that user. This real-time personalization enhances user experience and engagement without requiring retraining the entire model with each interaction.

Natural Language Processing (NLP) Applications

NLP models, such as sentiment analysis or language translation models, can be trained offline using large corpora of text data. Batch training allows the model to learn semantic representations and language structures from diverse text sources.

Once deployed, the model can be fine-tuned in real-time using user-generated text data, such as customer reviews or live chat interactions. Real-time fine-tuning enables the model to adapt to domain-specific or user-specific language nuances and evolving trends without retraining from scratch.

In each of these examples, the hybrid approach combines the depth of analysis provided by batch learning with the adaptability of real-time learning, resulting in more robust and responsive machine learning systems. The choice between real-time and batch-learning elements depends on the application’s specific requirements, such as data volume, latency constraints, and the need for continuous adaptation.

What are the main components of a real-time ML pipeline?

A real-time ML pipeline typically consists of several components working together to enable the continuous processing of data and the deployment of ML models with minimal latency. Here are the main components of such a pipeline:

  1. Data Ingestion: This component collects data from various sources in real-time. It could involve streaming data from sensors, databases, APIs, or other sources.
  2. Streaming Data Processing and Feature Engineering: Once the data is ingested, it needs to be processed in real-time. This component involves streaming data processing frameworks that handle the data streams efficiently. Features extracted from raw data are crucial for building ML models. This component transforms the raw data into meaningful features that the ML models can use. Feature engineering might include techniques like normalization, encoding categorical variables, and creating new features. 
  3. Model training: Training typically occurs at regular intervals, with the frequency varying between near-real-time, which involves more frequent time frames than batch training or online-real-time training.
  4. Model Inference: This component involves deploying the ML models and making real-time predictions. The deployed models should be optimised for low latency inference and must scale well to handle varying loads.
  5. Scalability and Fault Tolerance: Real-time ML pipelines must be scalable to handle large volumes of data and fault-tolerant to withstand failures gracefully. This often involves deploying the pipeline across distributed systems and implementing mechanisms for fault recovery and data replication. 

Challenges for building real-time ML pipelines

  • Low Latency Requirement: Real-time pipelines must process data and make predictions within strict time constraints, often in milliseconds. Achieving low latency requires optimizing every pipeline component, including data ingestion, pre-processing, model inference, and output delivery.
  • Scalability: Real-time pipelines must handle varying workloads and scale to accommodate increasing data volumes and computational demands. Designing scalable architectures involves choosing appropriate technologies and distributed computing strategies to ensure efficient resource utilization and horizontal scalability.
  • Feature Engineering: Generating features in real-time from streaming data can be complex and resource-intensive. Designing efficient feature extraction and transformation pipelines that adapt to changing data distributions and maintain model accuracy over time is a key challenge. 
  • Security: Robust authentication, authorization, and secure communication mechanisms are essential for real-time ML. Effective incident response and monitoring capabilities enable organizations to detect and respond promptly to security incidents, bolstering the overall resilience of real-time ML pipelines against security threats. By addressing these security considerations comprehensively, organizations can build secure real-time ML pipelines that effectively protect sensitive data and assets.
  • Cost Optimization: Building and operating real-time ML pipelines can be costly, especially when using cloud-based infrastructure or third-party services. Optimizing resource utilization, selecting cost-effective technologies, and implementing auto-scaling and resource provisioning strategies are essential for controlling operational expenses.
  • Robustness and Fault Tolerance: Real-time pipelines must be resilient against failures and ensure continuous operation under adverse conditions. Implementing fault tolerance mechanisms, such as data replication, checkpointing, and automatic failover, is critical for maintaining system reliability and availability.
  • Integration with Existing Systems: Integrating real-time ML pipelines with existing IT infrastructure, data sources, and downstream applications requires careful planning and coordination. Ensuring compatibility, interoperability, and seamless data flow between different system components is essential for successful deployment and adoption.

Addressing these challenges requires a combination of domain expertise, software engineering skills, knowledge of distributed systems, machine learning algorithms, and cloud computing technologies. Opting for solutions that streamline operations by minimizing the number of tools involved can be a game-changer. This approach slashes integration efforts and trims down maintenance costs and operational overheads while ushering in lower latency—a crucial factor in real-time ML applications. By consolidating feature processing and storage into a single, high-speed key-value store, with a real-time ML model serving, Hazelcast simplifies the AI landscape, reducing complexity and ensuring seamless data flow.

The future of real-time ML

The future of real-time machine learning (ML) is closely intertwined with advancements in vector databases and the emergence of Relative Attribute Graphs (RAGs). Vector databases provide efficient storage and querying capabilities for high-dimensional data, making them well-suited for managing the large feature spaces common in ML applications. RAGs, on the other hand, offer a novel approach to representing and reasoning about complex relationships in data, enabling more sophisticated analysis and decision-making in real-time ML pipelines.

In the context of finance and fintech, the integration of vector databases and RAGs holds significant promise for enhancing various aspects of real-time ML applications. One example is in fraud detection and prevention. Financial institutions constantly monitor transactions and identify suspicious activities to mitigate fraud risk. By leveraging vector databases to store and query high-dimensional transaction data efficiently, combined with RAGs to model intricate relationships between transactions, real-time ML algorithms can detect anomalies and fraudulent patterns in real time with greater accuracy and speed.

Another application area is in personalized financial recommendations and portfolio management. Traditional recommendation systems often struggle to capture individual users’ nuanced preferences and goals. However, by leveraging vector representations of user preferences and financial assets stored in vector databases, and utilizing RAGs to model the relative attributes and interdependencies between different investment options, real-time ML algorithms can generate personalized recommendations that better align with users’ financial objectives and risk profiles. For example, a real-time ML system could analyze a user’s financial history, risk tolerance, and market conditions to dynamically adjust their investment portfolio in response to changing market conditions and personal preferences.

Furthermore, in algorithmic trading, real-time ML models powered by vector databases and RAGs can enable more sophisticated trading strategies that adapt to evolving market dynamics and exploit complex interrelationships between different financial instruments. By analyzing historical market data stored in vector databases and incorporating real-time market signals represented as RAGs, algorithmic trading systems can make more informed and timely trading decisions, optimizing trading performance and risk management.

Overall, the future of real-time ML in finance and fintech is poised to benefit significantly from advancements in vector databases and RAGs. By leveraging these technologies, organizations can build more intelligent, adaptive, and efficient real-time ML pipelines that enable enhanced fraud detection, personalized financial services, and algorithmic trading strategies.

So here you have three options for distributed computing using Hazelcast. We look forward to your feedback and comments about this blog post! Share your experience with us in the Hazelcast community Slack and the Hazelcast GitHub repository. Hazelcast also runs a weekly live stream on Twitch, so give us a follow to get notified when we go live.

Provisioning, deploying, and scaling applications in the cloud has always been a struggle of simplicity and complexity. Hazelcast prides itself on its cloud-agnostic approach, offering an enriching experience for application architects and developers.

Unpacking Cloud Flexibility: A Vision of Freedom

Navigating the tapestry of cloud-hosting services, the buzzword ‘cloud agnostic’ resonates deeply with organizations yearning for technological sovereignty. A cloud-agnostic approach abstracts the application from the underlying cloud infrastructure, offering the liberty to switch from one cloud platform to another without significant overhead or application re-engineering.

The allure of cloud-agnostic systems is not merely about independence but also future-proofing. As the cloud market evolves and competitive tides ebb and flow, organizations with cloud-agnostic systems can pivot swiftly, capitalizing on innovations and cost-effective offerings while mitigating the risks of vendor lock-in.

The Dividends of Cloud Agnostic

By standing at an agnostic vantage point, applications backed by Hazelcast Platform enjoy a trove of benefits:

  • Seamless Migration and Scalability: Transitioning from one cloud provider to another moves from the realm of fear and complexity to one of simplified architectural choices; services built on Hazelcast Platform can cloud shift, scale out or in, adapting to the changing demands with grace without undue vendor lock-ins.

  • Resource Efficiency and Cost Optimization: With the ability to leverage the best-priced components across different cloud environments, organizations can experience significant cost savings. Hazelcast’s cloud-agnostic platform enables elastic use of cloud resources, ensuring that expenses are aligned with actual resource consumption.

  • Reduced Vendor Lock-In and Resilience: Resilience and disaster recovery strategies become more robust with a cloud-agnostic approach. The flexibility to distribute workloads across different cloud providers or their regions minimizes the impact of service outages and provides high availability at a reduced cost.

By purchasing Hazelcast Platform through your company’s preferred cloud service provider (CSP) marketplace, you can retire quotas by transacting through a preferred CSP marketplace(s)*. 

Harnessing Cloud Flexibility with Hazelcast

Hazelcast, renowned for its advanced in-memory computing and cloud-native capabilities, steps into the cloud-agnostic arena armed with a suite of tools and integrations that herald a new era of cloud computing adaptability.

A Platform with Benefits and No Cloud Borders

Hazelcast’s cloud-agnostic ethos is deeply embedded in its DNA, with features that allow it to seamlessly blend with a variety of cloud ecosystems:

  • Multi-Cloud Deployments: With Hazelcast, applications can be deployed across a spectrum of cloud providers, including AWS, Google Cloud Platform, and Microsoft Azure, ensuring the widest possible footprint for global deployments.

  • Commitments Burn Down: By purchasing Hazelcast Platform through your company’s preferred cloud service provider (CSP) marketplace, you can retire quotas by transacting through a preferred CSP marketplace(s)*.

  • Integration Prowess: Built-in integrations with major cloud providers and container orchestration systems like Kubernetes and Red Hat OpenShift empower developers to sail through the challenges of multi-cloud environments.

  • Operational Elegance: The evolution of Hazelcast’s cloud strategy has seen the birth of the Hazelcast Platform Operator for Kubernetes. This tool automates the deployment and management of Hazelcast clusters, aligning the intricacies of cloud management with the simplicity of sustainable operations.

Real-World Cloud Odyssey: A Glimpse of Success

Taking inspiration from real-world deployments, we can highlight the impact of Hazelcast’s cloud freedom on modern applications:

Banking on Elasticity and Security

A leading financial institution turned the tables on high-performance computing by deploying Hazelcast Platform across its cloud and on-premises environments. A hybrid, cloud-agnostic strategy allowed the enterprise to maintain strict data locality regulations while scaling to meet massive bursts in transaction volumes during peak hours.

Redefining Real-Time in Retail

In the bustling world of e-commerce, a retail giant leveraged Hazelcast’s cloud agnosticism to deliver real-time inventory and pricing updates across multiple cloud environments, ensuring a consistent global shopping experience that responded to local needs and fluctuations in traffic.

The Duality of Cloud-Agnostic Adoption

While the cloud-agnostic approach offers an attractive landscape of opportunity, it’s not without its share of hazards. Organizations venturing into this paradigm shift face challenges that demand adept navigation:

Navigating the Cloud-Less Travel

Maintaining cloud-agnostic systems requires robust architectural practices and careful consideration of cloud-specific services that an application may use. It’s a delicate balance of homogeneity and heterogeneity in a technological ecosystem.

Fostering a Cloud-Agnostic Culture

Employing the expertise to operate in a cloud-agnostic way is as much about culture as it is about technology. An organization must instigate a mindset that values adaptability and embraces the agility that cloud agnosticism brings.

Addressing the Compliance Conundrum

One must pay attention to the implications of industry-specific compliance regulations. A cloud-agnostic approach should align with the highest standards of security and privacy without compromise.

Conclusion: Your Cloud’s Future, Unchained

As the tech horizons expand and the clouds gather, Hazelcast Platform’s cloud-agnostic approach emerges as a beacon of modern cloud computing. It empowers enterprises to model their cloud strategies with the colors of agility, cost optimization, and resilience.

For application architects and developers charting the course for their cloud future, embracing the cloud-agnostic features of Hazelcast Platform is not just a leap of faith; it’s an assured step towards a horizon where the clouds are no longer barriers but boundless opportunities. It’s cloud computing, unfettered.

Contact us to speak with a Hazelcast expert about how Hazelcast Platform can augment your cloud strategy.

* Per your company’s marketplace agreement with the respective CSP(s).