Week 15, year 2020

  • Microservices and [Micro]services - The week began as busy as ever. And then I learned that one more task — beyond everything else on my plate — must be accomplished. Which task? The one you are reading. Why? For the record, at Uber, we’re moving many of our microservices to what @copyconstruct calls macroservices (wells-sized services). Exactly b/c testing and maintaining thousands of … Microservices and [Micro]services Read More » The post Microservices and [Micro]services appeared first on Kalele. [Kalele]
  • Unit Testing Dependencies: The Complete Guide - In this article, we’ll review the types of unit testing dependencies. This is more of a reference article, to which I’ll be referring in future posts. Still, this topic is important for establishing the common vocabulary. [Enterprise Craftsmanship]
Permalink | From 06 April 2020 to 12 April 2020 | Last updated on: Fri, 16 Jul 2021 03:27:21 GMT

Week 14, year 2020

  • Eventuate Tram supports Java 14 and @SpringBoot 2.2.6.RELEASE - Eventuate Tram supports Java 14 and @SpringBoot 2.2.6.RELEASE #AllTestsGreenOnJDK14 We just upgraded the development branches of a couple of example applications to Java 14 and @SpringBoot 2.2.6.RELEASE: Eventuate Tram Customers and Orders - Spring Boot - demonstrates how to maintain data consistency in an Spring Boot, JPA-based microservice architecture using choreography-based sagas. Eventuate Tram Sagas Customers and Orders - Spring Boot - demonstrates how to maintain data consistency in an Spring Boot, JPA-based microservice architecture using orchestration-based sagas. When the Eventuate Tram libraries, which are currently RC, are released the changes will be merged into master. [Eventuate, Inc]
  • Eventuate for Spring Boot and now Micronaut - upgrade information - Upgrading to the upcoming release of Eventuate Eventuate is a platform that solves the distributed data management problems inherent in a microservice architecture. It makes it straightforward to use patterns such as Sagas, CQRS and Event Sourcing and enables you focus on your business logic. The latest versions of Eventuate Local (0.32.0.RC4), Eventuate Tram (0.24.0.RC4), Eventuate Tram Sagas (0.13.0.RC4) now support both Spring Boot and Micronaut. We plan to make .RELEASE versions shortly. Here are the Eventuate Micronaut example applications: Eventuate Tram Customers and Orders - Micronaut - demonstrates how to maintain data consistency in an Micronaut, JPA-based microservice architecture using choreography-based sagas. Eventuate Tram Sagas Customers and Orders - Micronaut - demonstrates how to maintain data consistency in an Micronaut, JPA-based microservice architecture using orchestration-based sagas. Eventuate Customers and Orders - Micronaut - demonstrates how to maintain data consistency in an Micronaut, JPA-based microservice architecture using Micronaut, Event Sourcing, choreography-based sagas and CQRS. There are numerous other example applications for Spring Boot. Please note that adding support for Micronaut required changing the names of both Maven artifacts and packages. In order to upgrade to these versions, you must edit your source code. To simplify the process, we created a Python-based upgrade script that makes all but one of the needed renames for Eventuate Local, Tram and Saga applications. It would be great if you try it and provide feedback. [Eventuate, Inc]
Permalink | From 30 March 2020 to 05 April 2020 | Last updated on: Wed, 23 Jun 2021 11:07:56 GMT

Week 11, year 2020

  • Using VLINGO/PLATFORM On AWS Fargate - I consider myself a refugee from the old JEE architectures. Threading was handled (naively, for the most part) by the container. Requests were synchronous, transactions distributed. The applications were deployed to a private data center, so scaling the ponderous beast was handled by scaling out (nodes to a weblogic cluster) and scaling up (increasing memory … Using VLINGO/PLATFORM On AWS Fargate Read More » The post Using VLINGO/PLATFORM On AWS Fargate appeared first on Kalele. [Kalele]
  • Event Modeling Traditional Systems - “Show me your flowcharts and conceal your tables, and I shall continue to be mystified. Show me your tables, and I won’t usually need your flowcharts; they’ll be obvious” – Fred Brooks, author Mythical Man-Month This fundamental insight is an idea that will allow us to use a much simpler methodology by which to describe systems - almost any information systems. By focusing on state and not the logic of a system, we can infer what it is doing instead of being burdened by the minutia of the details of automation. This is the premise of Event Modeling: shed the low-value aspects of system design the industry has adopted. It extends “specification by example” into the realm of system design. [Event Modeling Introduction on Event Modeling]
Permalink | From 09 March 2020 to 15 March 2020 | Last updated on: Fri, 15 Nov 2024 23:19:28 GMT

Week 10, year 2020

  • DDD Weekly: Issue #65 - Core Domain Patterns [blog] Nick Tune. I find assessing bounded contexts for business differentiation and complexity a very practical and approachable starting point. For teams who have little understanding of how their architecture connects to the business model, I’ve found this technique to be incredibly useful at enabling developers to reason more about the business perspective, and especially the evolution over time. How to Become a Great Software Architect [video] Eberhard Wolff. [DDD Weekly]
  • EF Core and DDD: New online course - My new online training course DDD and EF Core: Preserving Encapsulation went live. [Enterprise Craftsmanship]
Permalink | From 02 March 2020 to 08 March 2020 | Last updated on: Mon, 7 Jun 2021 09:11:14 GMT

Week 9, year 2020

  • Are You A Techie? - Are you a technical person? I am often asked that question. Why? Does the answer matter? I believe most are curious and ask simply to understand how to communicate with me. Or, perhaps the person is trying to figure out which box to tick next to my name. I get that. But, really, aren’t we … Are You A Techie? Read More » The post Are You A Techie? appeared first on Kalele. [Kalele]
  • Eventuate explained using microservices patterns - Eventuate explained using microservices patterns A while back I came up with this diagram that explains Eventuate using microservice architecture patterns. Let’s look at each of the patterns in turn starting with the Database per Service pattern. Database per Service pattern A key characteristic of the Microservice Architecture is loose coupling. There are two types of coupling: design-time coupling - changing one service requires other services to change. Services must be loosely coupled from a design-time perspective in order to ensure that teams are loosely coupled and, therefore, productive. runtime coupling - the failure of one service prevents another service from handling a request. Services must also be loosely coupled from a runtime perspective in order to maximize availability. This requirement for loose coupling significantly impacts the database architecture and creates the need for the Database per Service pattern. At a minimum, to avoid design time coupling, services must not share database tables. And, ideally, to reduce runtime coupling, each service should have its own database server. Distributed data management patterns The Database per Service pattern creates distributed data management challenges. There are two key distributed data management patterns that solve these problems: Saga pattern - implements transactions that span services CQRS pattern - implements queries that span services Transaction management with the Saga pattern Some update operations (a.k.a. commands) need to update data in multiple services. Such an operation typically doesn’t use traditional distributed transactions (2PC) since that’s a type of runtime coupling. Instead, a command that spans services must be implemented using the Saga pattern. A saga is a series of local transactions that are coordinated by the participating services exchanging messages. As I describe in this series of blog posts about sagas there are two types of saga coordination mechanisms: choreography-based sagas - services collaborate by exchanging domain events orchestration-based sagas - a centralized coordinator sending command messages to participants, which respond with reply messages Implementing queries with the CQRS pattern Some queries need to retrieve data from multiple services. Since each database is private, the data can only be retrieved using each service’s API. One option is to use API Composition and simply invokes query operations on the services. However, sometimes API composition is inefficient and instead the application must use the CQRS pattern. The CQRS pattern maintains an easily queryable replica of the data using domain events published by the services that own the data. How Eventuate solves these distributed data management challenges Eventuate is a family of frameworks that solve the distributed data management challenges in microservice architecture. By using Eventuate, you can easily implement the Saga and CQRS patterns in your application. Eventuate also provides the messaging primitives for general purpose transactional messaging between services. The following diagram shows the Eventuate family of frameworks: There are the following frameworks: Eventuate Tram Sagas - an orchestration-based saga framework Eventuate Tram - a transactional message framework Eventuate Local - an event sourcing framework Let’s look at the capabilities of these frameworks. Orchestration-based sagas The Eventuate Tram Sagas framework implements orchestration-based sagas. It provides an easy to use Java-based domain-specific language for the defining the steps of your saga and their compensating transactions. The saga execution engine is embedded within your services, which simplifies the architecture and improves scalability and availability. Choreography-based sagas and CQRS Eventuate makes it easy to implement event-driven microservices that use choreography-based sagas and CQRS. It provides an API for publishing and consuming events. Services can use Eventuate to publish events as part of a database transaction that updates business entity. Other services can use Eventuate to consume events with automatic duplicate detection, which ensures that your message handlers are idempotent. Eventuate provides different event-driven programming models Explicit event publishing - use for applications that persist business entities using traditional (e.g. JDBC/JPA) persistence. The Eventuate Tram framework provides APIs for publishing and consuming events. Event sourcing - an event-centric way of writing your business logic and persisting your business objects. Event sourcing is useful for application that need to maintain the history of changes to business entities. The Eventuate Local framework is Eventuate’s event sourcing framework. Foundational messaging patterns These higher level capabilities are built on several foundational patterns: Transactional Outbox - publish a message as part of the database transaction that updates business entities. This pattern is essential for maintaining consistency. Without it, there is a risk of either updating the database without sending a message or sending a message without the corresponding database update. Idempotent Consumer - detect and discard duplicate messages by tracking the messages that have already been processed. This pattern handles the scenario where a failure causes the message broker to deliver a message more than once. This patterns are implemented by both the Eventuate Tram and Eventuate Local frameworks. Learn more To learn more please take a look at the following resources: Read Eventuate Getting Started Guide Read Chris Richardson’s microservice patterns book [Eventuate, Inc]
Permalink | From 24 February 2020 to 01 March 2020 | Last updated on: Fri, 16 Jul 2021 03:27:21 GMT

Week 8, year 2020

  • CQRS + Event Sourcing – Step by Step - A common issue I see is understanding the flow of commands, events and queries within a typical CQRS Event Sourcing based system. The following post is designed to clear up what happens at each step. Hopefully, this will help you to reason about your code and what each part does. What is CQRS and what […] [Learn CQRS and Event Sourcing]
Permalink | From 17 February 2020 to 23 February 2020 | Last updated on: Mon, 7 Jun 2021 09:09:40 GMT