Posts

Showing posts from 2018

The Network Becomes Programmable

Kubernetes 1.12 & Service Mesh - The Network Becomes Programmable The introduction of stable support for service mesh architectures in Kubernetes 1.12 marked the beginning of the "network as code" era. Suddenly, cross-cutting concerns like security, observability, and traffic management could be handled at the infrastructure level rather than in application code. While not part of Kubernetes itself, Istio's maturation alongside Kubernetes 1.12 created a powerful combination that fundamentally changed how we think about microservices communication. yaml apiVersion: networking.istio.io/v1alpha3 kind: VirtualService metadata:   name: user-service spec:   hosts:   - user-service   http:   - match:     - headers:         version:           exact: canary     route:     - destination:     ...

Functional Programming Meets Enterprise Java

Spring Framework 5.1 - Functional Programming Meets Enterprise Java Spring Framework 5.1 represented the maturation of reactive programming in the Java ecosystem. What had been experimental in previous versions became production-ready, and the functional programming paradigms that had been creeping into Java finally felt natural and powerful. The introduction of the functional web framework provided an alternative to annotation-based controllers that was both more explicit and more performant. This wasn't about replacing the traditional approach—it was about giving developers choice and enabling new patterns. java @Configuration public class RouterConfig {         @Bean     public RouterFunction<ServerResponse> routes(UserHandler userHandler) {         return RouterFunctions             .route(GET("/users"), userHandler::listUsers...

Reactive Revolution

Spring Boot 2.0 - Reactive Revolution Spring Boot 2.0 represented a fundamental shift in how we think about building scalable applications. The introduction of Spring WebFlux and reactive programming wasn't just a new feature—it was a new paradigm that challenged everything we thought we knew about handling concurrent requests. Reactive programming had been a theoretical concept for many developers, but Spring Boot 2.0 made it practical and accessible. The promise was compelling: handle thousands of concurrent requests with minimal resources by embracing asynchronous, non-blocking operations. java @RestController public class UserController {         private final UserService userService;         @GetMapping("/users")     public Flux<User> getUsers() {         return userService.findAll()           ...