In “A Self-Evolved Microservice Framework in Go”, I described a framework that can evolve itself. It has two pieces, one is the lightweight framework, the other is the pluggable third-party components. You can call this architecture “small framework, big library”. In this article, I will talk about how to create…

Last year, I created a framework for Microservice, which is a powerful one but a little heavy. I wrote a series of articles talking about it, please read “Go Microservice with Clean Architecture” for detail. I also pointed out some drawbacks in the design and expected to come back and…

Have you ever encountered such a framework, it is very simple and lightweight, easy to use, but when your project becomes complex, it can evolve into a powerful heavyweight framework, without the need to rewrite the entire project? I have never seen it before.

Let us first look at the…

In my article “A Non-Intrusive Transaction Management Lib in Go — How to Use It”, I described how to use the transaction lib. In this article, I will focus on the Lib itself. Some of you may have read “Go Microservice with Clean Architecture: Transaction Support”, which described the old…

In the article, “Go Microservice with Clean Architecture: Transaction Support”, I talked about how to implement a non-intrusive transaction management system in the Clean Architecture. It allows you separating transaction code with business logic and not thinking about the transaction when writing business logic. But it has some drawbacks. First…

Service Resilience means that when the service’s operating environment has problems, such as network failure, service overload or some microservice downtime, the program can still provide some level of the services. Then, we say that the service is resilient. It is a very important part of Microservices and is widely…

In Microservice architecture, the calling chain is long and complex, to understand each component and the performance of it, you need something called distributed tracing. The idea is simple, you generate a unique ID at the beginning of each request, and carry it along the whole calling chain. The ID…

In Clean Architecture, each layer of the application ( use case, data service and domain model) only depends on interface of other layers instead of concrete types. At run-time, the the application container¹ is responsible for creating concrete types and inject them into each function, the technology it used is…

One philosophy of Clean Architecture is to isolate framework for the application, so the framework won’t take over your application and you decide when and where to use them. In this application, I purposely not using any libraries at the beginning so I can have a better control on the…

Good logging can provide informative log data and make it easy to find problems when doing debugging, thus greatly improve coding efficiency. The more automated information provided by the logger the better it is, also the log information needs to be presented in a concise way, so it is easy…

Jin Feng

Writing applications in Java and Go. Recent interests including application design and Microservice.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store