For long, the conventional approach to build software systems has been the monolithic architectural style, in which all logic (e.g. user interface, back-end, connections to database, etc.) is derived as a single deployable software artifact. Assembling everything to a single file should not create the illusion of an easy development. Instead, the complexity of a single repository that increases constantly over time makes the code maintenance challenging, not to mention the painful task of integrating new features.
To drastically overcome drawbacks such above, the microservice architectural style has been proposed, which encourages to develop a single application as a suite of small services, each running in its process and communicating with lightweight mechanisms, often an HTTP resource API. These services are built around business capabilities and areindependently deployable by fully automated deployment machinery. There is a bare minimum of centralized management of these services, which may be written in different programming languages and use different data storage technologies. As microservices are mostly based on APIs, theycome withspecialized design patterns that are optimized to deal with intense interservice synchronous and asynchronous communication, with distributed data management, with service failures and recovery in a random fashion and many more.
One constantly increasing trend for building microservices is with the aid of Golang (or simply Go). Go is one of the fastest-growing languages developed by Google as anew solution to bring software engineering closer to cloud principles, one aspect that current languages fail to cover with ease. Another major problem of current programming languages is that of maintaining and updating an already large codebase. This, in turn, means huge binaries with long build/compile-time, not to mention the extra effort for maintenance. The result often is a non-flexible code base that cannot easily adapt to modern and flexible cloud environments.
Hence, it is evident that the evolvement of programming languages is not at a similar pace as with that of cloud, implying the need for a new language with competitive advantages, such as:
- Quick and lightweight software building
- The software should run well on modern multi-core hardware
- The software should work well in a networked environment
- The language should be a pleasure to use
Go envisions to fulfill the objectives above. It seeks to reinvent programming in the most practical of ways, e.g. it builds and improves a lot on the existing C/Java/C#-style syntax, and it solves or leaves out many of the open features in traditional languages to makes the developer’s life much easier.
From the website (https://golang.org/doc/) it is clearly stated that “Go is expressive, concise, clean, and efficient. Its concurrency mechanisms make it easy to write programs that get the most out of multicore and networked machines, while its novel type system enables flexible and modular program construction. Go compiles quickly to machine code yet has the convenience of garbage collection and the power of run-time reflection. It’s a fast, statically typed, compiled language that feels like a dynamically typed, interpreted language”
It is understood that Golang, as a new language brought closer to the cloud, matches perfectly with microservices architecture, which due to its distributed nature is inherently close to the cloud. Its speed, simplicity, and reliability make it the perfect choice for plenty of use cases, one of them being microservices. This is the main motivation for designing and offering this training course, with the description of the flow described in short below.
- This specific Code.Learn program lasts 2 weeks (2 Fridays & 2 Saturdays) and consists of 24 hours of lectures and hands-on exercise on real case studies and projects.
Key Objectives – Curriculum
An indicative outline of the training is the following:
Introduction to Golang (4 hours depending on the background)
- Setting up a development environment
- Overview of language features with shortcode examples
- Programming fundamentals (e.g. variables, constants, Booleans, numbers, Strings)
- Collection types (e.g. arrays, slices, maps)
- Flow control
- Error handling
- Object-oriented aspects (e.g. key concepts, custom types, overriding methods, interfaces)
- Concurrent programming (Goroutines, channels, ranging over channels)
- File handling (JSON, XML, Go binary files, custom, archive)
- Survey of Go standard library
- Go commands
Introduction to Microservices (4 hours)
- Definition of Microservices
- Comparison of microservices against monolith approach (pros & cons)
- A brief overview of key architectural components: API Gateway, Service Discovery, Centralized Configuration Server, Load Balancer
Microservices with Golang (16 hours)
- RESTful APIs with Golang
- gRPC (server streaming, client streaming, bi-directional streaming, advanced features)
- Embedding datastore to a Go microservice and serve RESTful
- Test HTTP services with GoConvey
- Add health checks to a Go microservice
- Service Discovery
- Load Balancing
- Centralized Configuration
- Messaging with AMQP
- Circuit Breakers and Resilience
- Distributed Tracing
- GraphQL with Go
- Implement microservices with Go-micro, a microservice framework for Go
Computer scientists, software engineers, and developers that want to boost their career are welcome to participate in this code.learn program and unlock the full potentiality of the topics taught by upskilling their future career.
Experience in microservice architecture and Golang is not mandatory, although desirable.