DEV Community

Cover image for Week 12 of #100DaysOfCode: Exploring Spring Cloud and Microservices Infrastructure
Onatade Abdulmajeed
Onatade Abdulmajeed

Posted on

Week 12 of #100DaysOfCode: Exploring Spring Cloud and Microservices Infrastructure

Introduction

This week was another challenging but rewarding part of my #100DaysOfCode journey.

I continued going deeper into Microservices with Spring Boot, this time exploring how different Spring Cloud components help manage distributed systems.

I learned about Spring Cloud Config, Eureka, Zuul, Spring Cloud Stream, RabbitMQ, security, and JUnit testing. I also started exploring logging and monitoring Microservices, including centralized logging, distributed tracing, Prometheus, Spring Boot Actuator, and fault-tolerance concepts like the Circuit Breaker pattern.

These topics helped me understand that building Microservices is not just about creating separate services. You also need to think about configuration, service discovery, communication, security, monitoring, and reliability.

Some of the concepts were challenging, but I'm gradually connecting the different pieces and getting a better understanding of how modern backend systems are designed and managed.

Still learning. Still building. Still showing up. 💙

"Great things are done by a series of small things brought together."

— Vincent van Gogh

Day 73: Starting Spring Cloud

On day 73, I started the Scale Microservices with Spring Cloud Components chapter and began exploring how Spring Cloud helps handle common challenges in distributed systems.

What I Learned

  • Spring Cloud and how it provides tools for working with distributed systems

  • Spring Cloud Config and how it helps externalize and manage configuration across different services and environments

  • How profiles can be used to manage different configurations for different environments

  • How to set up a Config Server

This chapter is taking me deeper into the practical side of building and scaling Microservices. Instead of only learning what Microservices are, I'm now getting into the tools that help manage them in real-world systems.

Another day of learning and getting a better understanding of how these architectural components work together.

Day 74: Exploring Spring Cloud Config and Service Discovery

On Day 74, I continued learning about Spring Cloud Config and how configuration can be managed across Microservices.

What I Learned

  • Understanding the Config Server URL using application name, profile, and label

  • Accessing the Config Server from clients

  • Handling configuration changes using /refresh

  • Using Spring Cloud Bus to propagate configuration changes across multiple instances

  • Setting up high availability for the Config Server

  • Monitoring Config Server health

  • Using Eureka for service registration and discovery

  • Understanding how Ribbon can dynamically change service instances

I'm starting to see how Spring Cloud helps solve some of the challenges that come with managing, communicating with, and scaling distributed systems.

Another day of learning and getting a deeper understanding of how Microservices work in real-world environments.

Day 75: Exploring Service Discovery and API Gateways

On Day 75, I continued learning about Microservices with Spring Cloud, focusing on service discovery, API gateways, and testing.

What I Learned

  • Dynamic service registration and discovery with Eureka
  • Setting up a Eureka Server
  • Configuring high availability for Eureka
  • Using Zuul as an API Gateway
  • Started learning JUnit testing

I'm beginning to understand how tools like Eureka and Zuul help Microservices communicate, discover services, and manage requests in distributed systems.

I also started exploring JUnit, which is helping me understand the importance of testing when building reliable backend applications.

Another day of learning and getting closer to building more reliable and maintainable backend systems.

Day 76: Completing Spring Cloud Components

On Day 76, I completed the Spring Cloud Components chapter and learned how different Spring Cloud tools work together to build, communicate, and secure distributed systems.

What I Learned

  • Zuul as an API Gateway and its different filters
  • High availability with Zuul and Eureka
  • Spring Cloud Stream with RabbitMQ, Redis, and Kafka
  • The concept of Sources and Sinks in messaging
  • Protecting Microservices with Spring Cloud Security
  • Consumer-driven gateways

This chapter gave me a better understanding of how different Spring Cloud components work together to build and secure distributed applications.

Day 77: Exploring Logging and Monitoring Microservices

On Day 77, I started Chapter 13: Logging and Monitoring Microservices.

What I Learned

  • What logs are and the challenges of managing them across Microservices
  • Popular Java logging frameworks: Log4j, Logback, and SLF4J
  • Why centralized logging is important
  • Collecting and analyzing logs from multiple sources
  • Tracking transactions end-to-end
  • Keeping logs for long-term analysis and forecasting
  • Reducing dependency on local disk storage

As Microservices grow, managing logs across multiple services becomes more challenging. Centralized logging helps bring everything together and makes it easier to understand what's happening across the system.

Day 78: Completing Logging and Monitoring Microservices

On Day 78, I completed Chapter 13: Logging and Monitoring Microservices.

This chapter covered a lot around keeping distributed systems observable and reliable.

What I Learned

  • Selecting and designing logging solutions
  • Log shippers, stream processors, storage, and dashboards
  • Distributed tracing with Spring Cloud Sleuth
  • Monitoring challenges in Microservices
  • APM, Synthetic Monitoring, and Real User Monitoring
  • Monitoring tools like Prometheus and Spring Boot Actuator
  • Hystrix and the Circuit Breaker pattern for fault tolerance
  • Aggregating Hystrix streams with Turbine
  • Using Data Lakes to handle fragmented data

One thing that stood out to me is that building Microservices isn't enough. You also need to understand what's happening across the entire system and be able to detect, trace, and respond to problems.

Goals for Week 13

As I move into Week 13, my main focus will be on preparing for my exams while maintaining my #100DaysOfCode progress.

Here are my goals for Week 13:

  • Prepare thoroughly for my exams
  • Review the Microservices and Spring Cloud concepts I've covered so far
  • Continue with my current Spring Boot and Microservices studies where possible
  • Review Java and key backend concepts for my exams
  • Continue practicing LeetCode when I have available time
  • Keep applying for backend engineering opportunities
  • Stay consistent with #100DaysOfCode and continue documenting my journey

This week, my priority is balance. With exams coming up, I don't want to overload myself with too many new topics or projects.

Instead, I want to focus on understanding what I've already learned, preparing well for my exams, and maintaining steady progress.

After the exams, I can return to deeper practice and building with the Microservices concepts I've been learning.

Still learning. Still building. Still showing up.

Connect With Me

LinkedIn:

https://www.linkedin.com/in/onatade-abdulmajeed/

X (Twitter):

https://x.com/spider337761

Top comments (0)