Frameworks and Libraries
Software Stack Details:
Spring Ecosystem: Our primary application framework is based on the Spring ecosystem, which provides a comprehensive suite of tools and libraries to build enterprise-grade applications:
Spring Boot: Simplifies the process of building production-ready applications by providing default configurations, reducing boilerplate code, and offering embedded servers.
Spring Cloud Gateway: Acts as an API gateway for our microservices architecture, handling routing, load balancing, and providing cross-cutting concerns like security and rate limiting.
Spring Cache: Enhances our application's performance by providing seamless caching capabilities. It abstracts the underlying caching frameworks, allowing us to switch between them effortlessly.
Spring Data: Facilitates easier database interactions, offering data access using both relational and NoSQL databases. It reduces boilerplate code and integrates with various database technologies seamlessly.
AVRO: We use AVRO as the data serialization framework, particularly when dealing with Apache Kafka. AVRO provides a compact and efficient way to serialize data, and its schema evolution capabilities ensure that our Kafka topics can handle changing data structures over time without breaking compatibility.
Lombok: Lombok is an integral part of our development toolkit. It helps reduce boilerplate code in our Java applications by providing annotations to auto-generate getters, setters, constructors, and other common methods, leading to cleaner and more maintainable code.
Frontend - React and Material-UI: Our web applications are built using the React framework, known for its component-based architecture and efficient rendering capabilities. We've paired React with Material-UI, a popular UI framework that adheres to Google's Material Design principles. This combination ensures our applications are both visually appealing and highly responsive.
OpenJDK: Our applications run on OpenJDK, an open-source implementation of the Java Platform, Standard Edition. OpenJDK provides the performance and stability required for our enterprise applications while ensuring we stay compliant with open-source licenses.
Liquibase: Database schema changes are managed using Liquibase. This tool allows us to track, version, and deploy database changes alongside our application code using a git-like revision system. By representing database changes as code, Liquibase ensures that our database schema evolves consistently across different environments.
Distributed Task-Scheduler: To handle scheduled tasks across our distributed systems, we've developed our own distributed task scheduler. This scheduler ensures that tasks are executed reliably across our microservices, even in the face of network partitions or service failures.
Testcontainers: Our testing strategy incorporates Testcontainers, a Java library that provides lightweight, throwaway instances of common databases, Selenium web browsers, or anything else that can run in a Docker container. This ensures our integration tests have consistent and isolated environments, leading to more reliable testing outcomes.