<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Rob Austin on foojay.io - Friends of OpenJDK</title><link>https://foojayio.github.io/website/today/author/rob-austin/</link><description>Articles written by Rob Austin on foojay.io - Friends of OpenJDK</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Wed, 29 May 2024 08:58:16 +0000</lastBuildDate><atom:link href="https://foojayio.github.io/website/today/author/rob-austin/index.xml" rel="self" type="application/rss+xml"/><item><title>Top 7 Java Microservices Frameworks</title><link>https://foojayio.github.io/website/today/top-7-java-microservices-frameworks/</link><pubDate>Wed, 29 May 2024 08:58:16 +0000</pubDate><guid>https://foojayio.github.io/website/today/top-7-java-microservices-frameworks/</guid><description>&lt;h3 id="h3-0-history-of-microservices"&gt;&lt;strong&gt;History of Microservices&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;The concept of microservices has its roots in Service Oriented Architecture (SOA), which was prominent in the early 2000s. However, the term &amp;ldquo;microservices&amp;rdquo; itself didn&amp;rsquo;t appear until around 2012, when it started being discussed at software architecture events and on software architecture blogs.&lt;/p&gt;
&lt;p&gt;Early pioneers of microservices include companies like Netflix, Amazon, and eBay. For instance, in 2009, Netflix started to transition from a monolithic architecture to a microservices architecture to better handle their rapidly scaling customer base. Other major companies followed, realizing that the monolithic architecture model had limitations when dealing with large-scale, complex systems.&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>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>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>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>Is There a Best OS to Develop a Java Application on?</title><link>https://foojayio.github.io/website/today/is-there-a-best-os-to-develop-a-java-application-on/</link><pubDate>Wed, 22 Feb 2023 11:43:40 +0000</pubDate><guid>https://foojayio.github.io/website/today/is-there-a-best-os-to-develop-a-java-application-on/</guid><description>&lt;p&gt;&lt;em&gt;&lt;strong&gt;One subject that often evokes a lot of debate is which is the best OS to develop a Java application on. This article gives my view on the issue.&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Java runs very well on Windows, macOS and Linux Distributions.&lt;/p&gt;
&lt;p&gt;I work for &lt;a href="https://ga-dev-tools.web.app/campaign-url-builder/" title="Chronicle Software" target="_blank" rel="noopener noreferrer"&gt;Chronicle Software&lt;/a&gt;
, and much of our software is open-source Java libraries, so we don&amp;rsquo;t, or rather we can&amp;rsquo;t, require our customers to run on a particular operating system. You may be surprised to hear that we don&amp;rsquo;t mandate which operating system our staff should use either. We let them use the one that causes the least friction, the one that they are most productive with.&lt;/p&gt;</description></item><item><title>Why Core-to-Core Latency Matters</title><link>https://foojayio.github.io/website/today/why-core-to-core-latency-matters/</link><pubDate>Thu, 02 Feb 2023 11:16:43 +0000</pubDate><guid>https://foojayio.github.io/website/today/why-core-to-core-latency-matters/</guid><description>&lt;p&gt;A few years ago we had a global shortage of microchips; now, I feel there is a worldwide shortage of software developers.&lt;/p&gt;
&lt;p&gt;Like many other software companies, &lt;a href="https://bit.ly/3JE97nx" title="Chronicle Software" target="_blank" rel="noopener noreferrer"&gt;Chronicle Software&lt;/a&gt;
 is rapidly expanding and interviewing candidates. We usually ask candidates to demonstrate &lt;em&gt;a good knowledge of core Java&lt;/em&gt;, then we cover slightly more advanced concepts, such as the use of volatile memory, memory barriers and fences.&lt;/p&gt;
&lt;p&gt;While it is important to have a high-level understanding of these concepts when writing concurrent code, it&amp;rsquo;s surprising how few Java developers with 10+ years of experience have a deep knowledge of the underlying hardware. An initial goal of Java was to &amp;ldquo;write once, run anywhere&amp;rdquo;, but does that mean we should not be sympathetic to the hardware?&lt;/p&gt;</description></item><item><title>How to Leverage Method Chaining to Add Smart Message Routing</title><link>https://foojayio.github.io/website/today/how-to-leverage-method-chaining-to-add-smart-message-routing/</link><pubDate>Wed, 04 Jan 2023 08:33:43 +0000</pubDate><guid>https://foojayio.github.io/website/today/how-to-leverage-method-chaining-to-add-smart-message-routing/</guid><description>&lt;p&gt;This article explores how to use method chaining to add routing information to serialised data structures in a lightweight fashion, where the routing information can be read separately by an intelligent message router.&lt;/p&gt;
&lt;p&gt;We are going to use the open-source serialisation library &lt;a href="https://chronicle.software/wire/" title="Chronicle Wire" target="_blank" rel="noopener noreferrer"&gt;Chronicle Wire&lt;/a&gt;
. Let&amp;rsquo;s assume we have some data that we want to send to a particular destination; we don&amp;rsquo;t want to pollute our business data structures with the routing information. In the future, the routing information could be removed or changed based on external factors such as system failover or horizontal scaling.&lt;/p&gt;</description></item><item><title>Challenges when Developing a GUI for FIX</title><link>https://foojayio.github.io/website/today/challenges-when-developing-a-gui-for-fix/</link><pubDate>Wed, 21 Dec 2022 08:06:18 +0000</pubDate><guid>https://foojayio.github.io/website/today/challenges-when-developing-a-gui-for-fix/</guid><description>&lt;p&gt;In this article, we explore the challenges in developing a Graphical User Interface (GUI) for Financial Information Exchange (FIX) data.&lt;/p&gt;
&lt;p&gt;FIX is both a protocol and a message format, but to create a FIX GUI we will focus just on the message format.&lt;/p&gt;
&lt;p&gt;A FIX message is a standard message format for transmitting financial and investment banking data.&lt;/p&gt;
&lt;p&gt;Below is an example of a FIX message, where the &amp;ldquo;|&amp;rdquo; character is sent as &amp;lsquo;\1&amp;rsquo;:&lt;/p&gt;</description></item><item><title>Why the Cool Kids Use Event Loops</title><link>https://foojayio.github.io/website/today/why-the-cool-kids-use-event-loops/</link><pubDate>Wed, 14 Dec 2022 10:17:48 +0000</pubDate><guid>https://foojayio.github.io/website/today/why-the-cool-kids-use-event-loops/</guid><description>&lt;h3 id="h3-0-a-discussion-on-the-benefits-of-event-loops-in-java"&gt;A Discussion On the Benefits of Event Loops in Java.&lt;/h3&gt;
&lt;p&gt;When I was working in software development back in the 1990s, nearly all the software libraries that I worked on made use of event loops. This was because at the time most hardware had just one single CPU.&lt;/p&gt;
&lt;p&gt;Back in the day, I remember the excitement when threads were introduced into our development framework. It was revolutionary that we could now run two things at once, or rather appear to run two things at once, since a lot of the hardware at that time still only had a single core, hence our threaded code was never really truly concurrent.&lt;/p&gt;</description></item><item><title>Learn How to Develop Event-Driven Architectures</title><link>https://foojayio.github.io/website/today/learn-how-to-develop-event-driven-architectures/</link><pubDate>Wed, 07 Dec 2022 15:25:16 +0000</pubDate><guid>https://foojayio.github.io/website/today/learn-how-to-develop-event-driven-architectures/</guid><description>&lt;p&gt;Previously, I wrote &lt;a href="https://foojayio.github.io/website/today/high-performance-java-serialisation/" title="an article on Open source Chronicle Wire"&gt;an article on Open source Chronicle Wire&lt;/a&gt;
, that discusses how we could serialise an application&amp;rsquo;s state into different message formats.&lt;/p&gt;
&lt;p&gt;Now in this article, I&amp;rsquo;m going to look at how we can use Open source &lt;a href="https://chronicle.software/queue/" title="Chronicle Queue " target="_blank" rel="noopener noreferrer"&gt;Chronicle Queue&lt;/a&gt;
and &lt;a href="https://chronicle.software/wire/" title="Chronicle Wire" target="_blank" rel="noopener noreferrer"&gt;Chronicle Wire&lt;/a&gt;
 to structure applications to use Event-Driven Architecture (EDA).&lt;/p&gt;
&lt;p&gt;EDA is a design pattern in which decoupled components (often microservices) can asynchronously publish and subscribe to events.&lt;/p&gt;</description></item><item><title>High-Performance Java Serialisation to Different Formats</title><link>https://foojayio.github.io/website/today/high-performance-java-serialisation/</link><pubDate>Wed, 12 Oct 2022 14:15:06 +0000</pubDate><guid>https://foojayio.github.io/website/today/high-performance-java-serialisation/</guid><description>&lt;p&gt;Java serialisation is a popular mechanism where you are able to serialise and deserialise complex object graphs; for example where object A can contain a reference to object B, which in turn has a reference back to object A.&lt;/p&gt;
&lt;p&gt;The problem is that this rich functionality comes at a performance cost.&lt;/p&gt;
&lt;p&gt;However, if you do not need to serialise these types of recursive graphs, you can instead use an open source solution called Chronicle Wire.&lt;/p&gt;</description></item></channel></rss>