As you can read in our introductory post here, we love sharing knowledge. Today we will look at some content from our Java sync.
Here, we present three themes we discussed in 2022 that are very relevant based on what clients are doing and what is happening in the tech industry. We will continue iterating on them in 2023 and may share more deep-dive content on some of those in the future!
Distributed systems containing serverless functions, microservices, and larger/monolithic services are everywhere. Specific topics around this theme kept coming up, including:
- Issues that can come up when services are scaled horizontally with a lack of orchestration, leading to performance and concurrency issues
- The granularity of events in Event-based systems: We prefer specific events with a small payload, such as “..Renamed” instead of “…Updated”.
- The practical use of Hexagonal Architecture and related structures is an excellent enabler for building well-designed larger services within a distributed system. Using ACL (Anti-Corruption Layer) for integrations in practice, and where this sits in a Hexagonal architecture.
- An ever-recurring topic is the size and scope of services. We discuss this with clients and internally when working on our platform. We often use practices related to DDD Bounded Context in our workshops to guide this.
Topics around architecture are part of our core focus. We will extend our ZinderLabs Book Library to include more books on this topic!
Logging and metering
Monitoring status and behavior is more complex but critical when working on distributing systems. Of course, there are tools to help us. We discussed the different characteristics and use cases of such systems, such as:
- Collecting logs, traces, and metrics
- Transforming, filtering, and forwarding
- Performance profiling
- Health endpoints
- Mapping full flows through distributed systems with SpanId and TraceId’s
- Dashboards and visualization (graphs, dependency diagrams, timeline views…)
- Practicality: ease of setup / integration / configuration of the different tools
We also dove into the more “active” use case of replaying events and rebuilding state in distributed systems.
Related techs we looked at or are currently using include fluentbit, Logstash encoder, Zipkin, Grafana, Datadog, Elk stack.
Lots of ground to cover here! This field keeps evolving and we will stay on this topic in the future.
Of course, we build many APIs within these distributed systems. These can be Rest API’s of async event-based data contracts. These integration points are essential to design well with a clear contract because a lot of development time goes into integrating with them.
Some of the topics we discussed:
- Code generation and documentation
- Mapping entities to DTO’s and related caveats
- API design: nesting, crud vs. use-case orientation
Related techs we looked at or are currently using: Swagger, OpenAPI, Webflux, GraphQL
There are a lot of approaches, and there’s no one-size-fits-all solution. As consultants, we like to say, “It depends.”
In addition, we discussed various techs, approaches, and tech news. We looked at the release of JDK 18, Spring Boot & Spring Framework update highlights, and some notable bugs such as the Log4j bug.
We use this input to feed our Tech Radar and keep it up to date: which techs are interesting? Where will we invest in some R&D? What will be part of our core stack? An example is tracking trends such as the popularity of Frontend techs used in combination with Java.