In our day to day work, we keep hearing all sorts of terms and names that relate to technology, software development, and frameworks. But sometimes we don’t have time to look up what they refer to. In this 2 part series, I did some research that will provide useful information for you to get familiar with these concepts 💡
Reactive Programming
This is something you might already be working with, without knowing that it’s called ‘reactive programming’. According to ‘Reactive Manifesto‘ this term refers to a project that provides a very good user experience, due to it being responsive. That means it needs to respond to customer requests in a timely fashion, basically as quickly as possible.
The key element of a reactive project is that its architecture is ‘message driven’. How such a system works is that the service provider is emitting a series of messages that a certain consumer is interested in. When the consumer sees the messages, it reacts to it accordingly. Other properties of a reactive project are: resilience (the system is still responsive even in case of a failure) and elastic (it can adapt its resources to handle high incoming load).
You can find more useful information about this topic in the following videos:
- Reactive for the Impatient– a good introduction to the topic
- Reactive Programming– an in-depth look with examples
Apache Kafka
As I just discussed message driven systems, I will stay on the topic and discuss a bit about Apache Kafka. In a nutshell, this platform allows messages to be created and consumed between producers and consumers.
The producers will create the message, or event, which consists of a key, a value, a timestamp and some additional optional metadata. The message will be published on certain queues, called topics. Each consumer that is interested in the messages published on a topic will subscribe to it, and therefore it will have access to the topic messages. Each topic can have any number of producers and consumers. And what’s interesting, is that the events are not deleted when they are consumed ❌
The system entities, like the topics, can be configured via the Admin API. The producers will use the Producer API to create and publish the messages. The consumers will subscribe to the required topic and effectively read the events using the Consumer API.
But of course, there is much more to it. Good learning resources if you are interested in this topic are:
- The Kafka official documentation
- How to Perform Contract Testing in Kafka/PubSub
- A Deep Dive into Apache Kafka– a lengthy video with good examples
Cloud Native
Cloud native applications, as the name suggests, are built while having in mind that they will run on the cloud. These applications are not built as a monolith that handles all the desired functionality. Instead, the functionality is broken up into independent microservices, which interact with each other to offer the desired functionality. They run inside containers. The results of such architecture are speed, high availability, scalability, and resilience. Further explanation on this topic can be found in this Cloud Native 101 video 🎥
A Cloud Native Computing Foundation was created and it defined what cloud native applications should be. They organize a series of KubeCon + CloudNativeCon conferences, where companies which have adopted the cloud native model gather and share their experiences.
Containers
As mentioned, containers are widely used in cloud native computing. A container can be seen as a standalone entity in which the application can run. It is a process that runs on a physical machine, and it can easily be run on a VM. It contains all the files, dependencies, and configurations the application needs in order to run efficiently. Probably the most widely used container is Docker 🐳 Containers need to be managed (created & deployed) or orchestrated. The most frequently used container orchestration tool is Kubernetes.
Of course, containers can be easily used in testing. Whether it is backend testing or Selenium testing, you can use containers to set up a test environment in which to run your tests, and of course, to actually run them.
There is a lot of useful information available both on containers and orchestration, so check these out:
- Containers for beginners
- A comparison of Kubernetes and Docker
- What is a container?
- Container and Kubernetes
- 9 steps to awesome with Kubernetes
That’s it for this article, but don’t forget there is a second installment coming soon! Stay tuned 👀
Very helpful. Thanks for sharing.