<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Chronicle Software on foojay.io - Friends of OpenJDK</title><link>https://foojayio.github.io/website/today/category/chronicle-software/</link><description>Recent content in Chronicle Software on foojay.io - Friends of OpenJDK</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Fri, 17 May 2024 09:46:41 +0000</lastBuildDate><atom:link href="https://foojayio.github.io/website/today/category/chronicle-software/index.xml" rel="self" type="application/rss+xml"/><item><title>A Modern Approach to Middleware with Chronicle</title><link>https://foojayio.github.io/website/today/a-modern-approach-to-middleware-with-chronicle/</link><pubDate>Fri, 17 May 2024 09:46:40 +0000</pubDate><guid>https://foojayio.github.io/website/today/a-modern-approach-to-middleware-with-chronicle/</guid><description>&lt;p&gt;&lt;strong&gt;Financial institutions today face significant challenges in updating their legacy middleware systems which are crucial for supporting millions of lines of code serving critical business functions. Prior to multicast support in modern switching hardware that became prevalent in the early 2000s, message middleware was largely done via proprietary protocols that converged onto TCP/IP. IBM&amp;rsquo;s Websphere MQ was a leader in this space.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Point to point middleware based on TCP/IP requires extra processing power and network bandwidth proportional to the number of consumers, and unreliable or slow consumers can negatively impact performance of the publisher. To combat these challenges, software vendors utilized IP multicast to create messaging platforms that supported topic based publish/subscribe networks.&lt;/p&gt;</description></item><item><title>The High Availability Features of Microservices using Chronicle Services</title><link>https://foojayio.github.io/website/today/the-high-availability-features-of-microservices-using-chronicle-services/</link><pubDate>Thu, 25 Apr 2024 13:36:34 +0000</pubDate><guid>https://foojayio.github.io/website/today/the-high-availability-features-of-microservices-using-chronicle-services/</guid><description>&lt;p&gt;&lt;strong&gt;In low-latency microservices, ensuring system resilience without compromising performance is vital.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This article explores how &lt;a href="https://chronicle.software/services/" title="Chronicle Services" target="_blank" rel="noopener noreferrer"&gt;Chronicle Services&lt;/a&gt;
, a Java-based framework optimised for low-latency microservices, meets these critical requirements by integrating HA, performance, and data persistence.&lt;/p&gt;
&lt;h2 id="h2-0-stateful-and-stateless-services"&gt;Stateful and Stateless Services&lt;/h2&gt;
&lt;p&gt;A &lt;a href="https://chronicle.software/services/" title="Chronicle Service" target="_blank" rel="noopener noreferrer"&gt;Chronicle Service&lt;/a&gt;
 application consists of a number of processing units known as Services, which interact with each other using events posted on &lt;a href="https://chronicle.software/queue-enterprise/" title="Chronicle Queues" target="_blank" rel="noopener noreferrer"&gt;Chronicle Queues&lt;/a&gt;
. The Chronicle Queue is an extremely fast shared memory inter-process communication; it also has an enterprise version that facilitates replication of queues over the network.&lt;/p&gt;</description></item><item><title>Achieving High Throughput Without Sacrificing Latency</title><link>https://foojayio.github.io/website/today/achieving-high-throughput-without-sacrificing-latency/</link><pubDate>Fri, 02 Feb 2024 09:39:47 +0000</pubDate><guid>https://foojayio.github.io/website/today/achieving-high-throughput-without-sacrificing-latency/</guid><description>&lt;h2 id="h2-0-latency-and-throughput"&gt;Latency and Throughput&lt;/h2&gt;
&lt;p&gt;In discussions on performance, it is common to encounter the terms &lt;em&gt;Latency&lt;/em&gt; and &lt;em&gt;Throughput&lt;/em&gt; to describe the characteristics of a software component.&lt;/p&gt;
&lt;p&gt;We can define these terms as follows:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Latency&lt;/strong&gt; is a measure of the time taken for one thing to occur. For example, it could be the time taken to respond to a change in the price of a financial instrument that could influence the decision on whether to buy, or sell. It could be the time taken for a component monitoring some external device to respond to an indication of a change in the status of that device (like a change in temperature reported from a thermometer).&lt;/p&gt;</description></item><item><title>Microservices Architecture: Navigating the Buzz</title><link>https://foojayio.github.io/website/today/microservices-architecture-navigating-the-buzz/</link><pubDate>Wed, 24 Jan 2024 20:05:53 +0000</pubDate><guid>https://foojayio.github.io/website/today/microservices-architecture-navigating-the-buzz/</guid><description>&lt;p&gt;Lately I&amp;rsquo;ve been exploring what all the talk around &amp;lsquo;&lt;a href="https://semaphoreci.com/blog/microservice-architecture" title="microservices architecture" target="_blank" rel="noopener noreferrer"&gt;microservices architecture&lt;/a&gt;
&amp;rsquo; is really about. From it popping up in every other social media debate to it increasingly becoming a must-have skill on job listings, what is it that has caused this strong divide between the proponents of the traditional monolithic approach and those who have embraced the microservices paradigm.&lt;/p&gt;
&lt;p&gt;In this article I&amp;rsquo;m here to break it down for you as I outline the benefits, some common challenges, and offer some insights from microservices experts for those considering this approach.&lt;/p&gt;</description></item><item><title>Strategies for Managing State in Chronicle Services</title><link>https://foojayio.github.io/website/today/strategies-for-managing-state-in-chronicle-services/</link><pubDate>Fri, 01 Dec 2023 08:41:44 +0000</pubDate><guid>https://foojayio.github.io/website/today/strategies-for-managing-state-in-chronicle-services/</guid><description>&lt;h2 id="h2-0-introduction"&gt;Introduction&lt;/h2&gt;
&lt;p&gt;In distributed, microservice-based applications, the management of state is one of the most important, yet difficult aspects of design.&lt;/p&gt;
&lt;p&gt;Ensuring the accuracy and consistency of state without introducing excessive complexity that affects performance or flexibility to support evolving requirements requires careful thought.&lt;/p&gt;
&lt;p&gt;This article discusses issues around state management and shows how the &lt;a href="https://chronicle.software/services/" title="Chronicle Services" target="_blank" rel="noopener noreferrer"&gt;Chronicle Services&lt;/a&gt;
 framework provides support to deal with these in ways that maintain a resilient and high performing microservices architecture.&lt;/p&gt;</description></item><item><title>Preserving Software Continuity: Empowering Failover Strategies for Uninterrupted Operations</title><link>https://foojayio.github.io/website/today/preserving-software-continuity/</link><pubDate>Thu, 16 Nov 2023 07:53:49 +0000</pubDate><guid>https://foojayio.github.io/website/today/preserving-software-continuity/</guid><description>&lt;p&gt;In today&amp;rsquo;s ever-changing and fast-paced digital landscape, maintaining uninterrupted business continuity is of utmost importance.&lt;/p&gt;
&lt;p&gt;Enter &lt;a href="https://chronicle.software/services/" title="Chronicle Service" target="_blank" rel="noopener noreferrer"&gt;Chronicle Services&lt;/a&gt;
, a robust mechanism dedicated to upholding application integrity even in the face of service disruptions.&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s examine the world of failover strategies and explore how they safeguard software continuity.&lt;/p&gt;
&lt;h3 id="h3-0-stateless-vs-stateful-services"&gt;Stateless vs. Stateful Services&lt;/h3&gt;
&lt;p&gt;It&amp;rsquo;s important to appreciate the difference between stateless and stateful services. Your choice of failover approach is highly influenced by this understanding, especially if the aim is to resume services seamlessly from where they were interrupted.&lt;/p&gt;</description></item><item><title>Chronicle Services: Building Fast Microservices with Java</title><link>https://foojayio.github.io/website/today/chronicle-services-building-fast-microservices-with-java/</link><pubDate>Wed, 13 Sep 2023 13:47:47 +0000</pubDate><guid>https://foojayio.github.io/website/today/chronicle-services-building-fast-microservices-with-java/</guid><description>&lt;h3 id="h3-0-low-latency"&gt;Low Latency?&lt;/h3&gt;
&lt;p&gt;In computing, latency is defined as the length of time to perform some task. This could be the time it takes to respond to an interrupt from hardware or the time it takes for a message sent by one component to be available to its recipient.&lt;/p&gt;
&lt;p&gt;In many cases, latency is not seen as a primary non-functional concern when designing an application, even when considering performance. Most of the time, after all, computers seem to do their work at speeds that are well beyond human perception, typically using scales of milliseconds, microseconds, or even nanoseconds.&lt;/p&gt;</description></item><item><title>Building High-Performance Java Microservices with EDA</title><link>https://foojayio.github.io/website/today/6-considerations-when-building-high-performance-java-microservices-with-eda/</link><pubDate>Wed, 16 Aug 2023 21:34:18 +0000</pubDate><guid>https://foojayio.github.io/website/today/6-considerations-when-building-high-performance-java-microservices-with-eda/</guid><description>&lt;p&gt;&lt;strong&gt;Event-Driven Architecture (EDA) is a design principle focused on the creation, detection, and reaction to events.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Renowned for its resilience and low latency, EDA is a reliable choice for developing robust, high-performing microservices.&lt;/p&gt;
&lt;p&gt;Moreover, this method can be helpful in improving productivity and making the process of cloud migration smoother.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://foojayio.github.io/website/today/6-considerations-when-building-high-performance-java-microservices-with-eda/Screenshot-2023-08-10-at-5.13.36-PM-1024x607.png" alt="" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;In this article we will outline 6 key considerations and tactics for developing such services.&lt;/p&gt;
&lt;h3 id="h3-0-1-crafting-event-based-microservices"&gt;1) Crafting Event-Based Microservices&lt;/h3&gt;
&lt;p&gt;Within EDA, microservices interact with each other through events. An event is simply an immutable indication that something has happened. Microservices register their interest in a subset of events and perform their processing by reacting to these events when they occur. On completion of handling of an event, microservices will usually post one or more events reflecting the result of this processing, which will trigger further downstream microservices.&lt;/p&gt;</description></item><item><title>The IKEA Effect</title><link>https://foojayio.github.io/website/today/the-ikea-effect/</link><pubDate>Wed, 26 Jul 2023 13:00:04 +0000</pubDate><guid>https://foojayio.github.io/website/today/the-ikea-effect/</guid><description>&lt;p&gt;&lt;strong&gt;The &lt;a href="https://theconversation.com/the-ikea-effect-how-we-value-the-fruits-of-our-labour-over-instant-gratification-113647" title="IKEA effect" target="_blank" rel="noopener noreferrer"&gt;IKEA effect&lt;/a&gt;
 is a fascinating phenomenon whereby consumers place a (sometimes disproportionately) higher value on things that they have either made themselves, or to which they&amp;rsquo;ve contributed towards making.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This can have a significant influence on perceived value &amp;ndash; to the extent that people might value imperfect things they&amp;rsquo;ve helped create, more than they would value the equivalent, perfect, but ready-made, product. Those who have pained memories of tussling with Allan keys and occasionally incomprehensible schematics for self-assembly furniture will no doubt have raised eyebrows. Of course, the effect only applies to items that are successfully assembled, of course. If people fail to build an item using the instructions provided, or it takes too long or is too difficult, due either to the complexity of the instructions or the inexperience of the user, then they do not ascribe the same value to the item.&lt;/p&gt;</description></item><item><title>Optimise CPU Performance Through Isolation and System Tuning</title><link>https://foojayio.github.io/website/today/how-to-optimise-cpu-performance-through-isolation-and-system-tuning/</link><pubDate>Thu, 29 Jun 2023 06:36:39 +0000</pubDate><guid>https://foojayio.github.io/website/today/how-to-optimise-cpu-performance-through-isolation-and-system-tuning/</guid><description>&lt;h4 id="what-are-the-challenges-of-tuning-your-cpu-and-system-for-optimal-performance-with-linux-and-how-does-chronicle-tune-address-them"&gt;What are the challenges of tuning your CPU and system for optimal performance with Linux, and how does Chronicle Tune address them?&lt;/h4&gt;
&lt;p&gt;CPU isolation and efficient system management are critical for any application which requires low-latency and high-performance computing. These measures are especially important for high-frequency trading systems, where split-second decisions on buying and selling stocks must be made.&lt;/p&gt;
&lt;p&gt;To achieve this level of performance, such systems require dedicated CPU cores that are free from interruptions by other processes, together with wider system tuning.&lt;/p&gt;</description></item><item><title>Building Custom Solutions vs. Buy-and-Build Software</title><link>https://foojayio.github.io/website/today/building-custom-solutions-vs-buy-and-build-software/</link><pubDate>Wed, 21 Jun 2023 14:41:33 +0000</pubDate><guid>https://foojayio.github.io/website/today/building-custom-solutions-vs-buy-and-build-software/</guid><description>&lt;h3 id="h3-0-the-challenges-of-building-a-fix-engine"&gt;The Challenges of Building a FIX Engine&lt;/h3&gt;
&lt;p&gt;The first day I was introduced to &lt;a href="https://en.wikipedia.org/wiki/Financial_Information_eXchange" target="_blank" rel="noopener noreferrer"&gt;Financial Information eXchange (FIX)&lt;/a&gt;
 was when I worked at an investment bank in London as a developer.&lt;/p&gt;
&lt;p&gt;I was told to write a feed handler to retrieve market data.&lt;/p&gt;
&lt;p&gt;Bear in mind that at this time, I knew nothing about FIX, apart from Googling it for about 10 mins on the internet.&lt;/p&gt;
&lt;p&gt;With a touch of overconfidence and slight arrogance, I set to work coding a direct socket connection to the remote FIX endpoint, &amp;ldquo;how hard could it be?&amp;rdquo;&lt;/p&gt;</description></item><item><title>Unique Identifiers Based on Timestamps in Distributed Applications</title><link>https://foojayio.github.io/website/today/unique-identifiers-based-on-timestamps-in-distributed-applications/</link><pubDate>Wed, 14 Jun 2023 11:22:03 +0000</pubDate><guid>https://foojayio.github.io/website/today/unique-identifiers-based-on-timestamps-in-distributed-applications/</guid><description>&lt;p&gt;At &lt;a href="https://chronicle.software/?utm_source=website&amp;amp;amp;utm_medium=foojay&amp;amp;amp;utm_campaign=unique-identifiers" title="Chronicle" target="_blank" rel="noopener noreferrer"&gt;Chronicle&lt;/a&gt;
 we build applications that must process very high numbers of events with minimum latency. Generating unique IDs for these events using the traditional method of UUIDs introduces an unacceptable time overhead into our applications, so an alternative approach is needed.&lt;/p&gt;
&lt;p&gt;I recently wrote &lt;a href="http://blog.vanillajava.blog/2021/12/system-wide-unique-nanosecond-timestamps.html" title="an article" target="_blank" rel="noopener noreferrer"&gt;an article&lt;/a&gt;
 on how timestamps can be used as unique identifiers, as they are much cheaper to generate than other methods of generating unique identifiers, taking a fraction of a microsecond.&lt;/p&gt;</description></item><item><title>Java is Very Fast, If You Don’t Create Many Objects</title><link>https://foojayio.github.io/website/today/java-is-very-fast/</link><pubDate>Thu, 01 Jun 2023 04:45:56 +0000</pubDate><guid>https://foojayio.github.io/website/today/java-is-very-fast/</guid><description>&lt;p&gt;This article looks at a benchmark passing events over TCP/IP at 4 billion events per minute using the net.openhft.chronicle.wire.channel package in &lt;a href="https://chronicle.software/wire/?utm_source=article&amp;amp;amp;utm_medium=foojay&amp;amp;amp;utm_campaign=java-is-fast" title="Chronicle Wire" target="_blank" rel="noopener noreferrer"&gt;Chronicle Wire&lt;/a&gt;
 and why we aim to avoid object allocations.&lt;/p&gt;
&lt;p&gt;One of the key optimisations is creating almost no garbage. Allocation is supposed to be a very cheap operation and garbage collection of very short lived objects is also very cheap.&lt;/p&gt;
&lt;p&gt;Does not allocating really make such a difference? What difference does one small object per event (44 bytes) make to the performance in a throughput test where GC pauses are amortised?&lt;/p&gt;</description></item><item><title>How to Automatically Create Microservices Architecture Diagrams</title><link>https://foojayio.github.io/website/today/automatically-creating-microservices-architecture-diagrams/</link><pubDate>Thu, 20 Apr 2023 08:01:21 +0000</pubDate><guid>https://foojayio.github.io/website/today/automatically-creating-microservices-architecture-diagrams/</guid><description>&lt;p&gt;In application development, microservices is an architectural style where larger applications are structured as a collection of smaller, independent, yet interconnected services.&lt;/p&gt;
&lt;p&gt;While this allows for highly maintainable and testable applications (as each service can be maintained independent of the larger application), the problem with this method is the inherent complexity of interactions between microservices.&lt;/p&gt;
&lt;p&gt;It can be difficult for developers and team members to visualise how these microservices are connected to each other. We have been looking for ways to produce architectural diagrams that illustrate these interactions.&lt;/p&gt;</description></item><item><title>"The More You Say, the Less People Remember...</title><link>https://foojayio.github.io/website/today/the-more-you-say-the-less-people-remember/</link><pubDate>Wed, 25 Jan 2023 07:56:39 +0000</pubDate><guid>https://foojayio.github.io/website/today/the-more-you-say-the-less-people-remember/</guid><description>&lt;h2 id="h2-0-the-fewer-the-words-the-greater-the-profit"&gt;&amp;hellip;The Fewer the Words, the Greater the Profit.&amp;quot;&lt;/h2&gt;
&lt;p&gt;These wise words were written by François Fénelon, a writer and theologian living during the 17th century.&lt;/p&gt;
&lt;p&gt;This is an article summarising different approaches to the development of IT solutions. Learn why the above quote is very relevant for developers in the 21st century.&lt;/p&gt;
&lt;h3 id="h3-1-business-driven-development"&gt;Business Driven Development&lt;/h3&gt;
&lt;p&gt;&lt;a href="https://en.wikipedia.org/wiki/Business-driven_development" title="Business-driven development " target="_blank" rel="noopener noreferrer"&gt;Business-driven development&lt;/a&gt;
is a meta-methodology for developing IT solutions that directly satisfy &lt;a href="https://en.wikipedia.org/wiki/Requirement" title="business requirements" target="_blank" rel="noopener noreferrer"&gt;business requirements&lt;/a&gt;
. This leads to increased flexibility and shorter turnaround times when changing the business and adapting the IT systems.&lt;/p&gt;</description></item><item><title>How Does Kafka Perform When You Need Low Latency?</title><link>https://foojayio.github.io/website/today/how-does-kafka-perform-when-you-need-low-latency/</link><pubDate>Wed, 18 Jan 2023 10:12:24 +0000</pubDate><guid>https://foojayio.github.io/website/today/how-does-kafka-perform-when-you-need-low-latency/</guid><description>&lt;p&gt;Most Apache Kafka benchmarks appear to test high throughput but not low latency.&lt;/p&gt;
&lt;p&gt;Kafka was traditionally used for high throughput rather than latency-sensitive messaging, but it does have a low-latency configuration. (Mostly setting linger.ms=0 and reducing buffer sizes).&lt;/p&gt;
&lt;p&gt;In this configuration, you can get below 1-millisecond latency a good percentage of the time for modest throughputs.&lt;/p&gt;
&lt;p&gt;Benchmarks tend to focus on clustering Kafka, in a high-throughput configuration.&lt;/p&gt;
&lt;p&gt;While this is perhaps the most common use case, how does it perform if you need lower latencies?&lt;/p&gt;</description></item></channel></rss>