Microservices are a key component of the SAS Viya architecture. In this post, I’ll introduce and explain the benefits of microservices. In a future post we’ll dig deeper into the microservices architecture.
What are microservices?
When we look at SAS Viya architecture diagrams, we can find, among the new core components, microservices.
Microservices are self-contained, lightweight pieces of software that
- Do one thing.
- Depend on one another to the least extent possible.
- Are deployed independently.
- Provide a language-agnostic API.
- Can run one or more instances of these processes at any given time.
Note that the prefix “micro” doesn’t mean small in CPU or memory consumption. Rather, it refers to the software performing a single function or being narrow in scope.
Let’s compare to SAS 9
The SAS 9 Web Infrastructure Platform services and the overall platform are tightly coupled to metadata structures and schemas. Every maintenance action takes a bit of effort: can you apply a fix to a single application without first stopping the whole infrastructure? Can you upgrade one component and leave all of the other ones at the previous release? Can you…?
To address these and other issues, SAS R&D decomposed the metadata server, the Web Infrastructure Platform, and many web applications. As a result, we got many functional units. Each one is a microservice.
Let’s have a look at the following examples.
In SAS 9.4 we can open the SAS Management Console to manage users and groups:
In SAS Viya, we can do the same using the SAS Environment Manager web application:
You may think we simply switched to a different, web-based client. Actually, the real difference lies in the backend implementation. With SAS 9, the metadata server was responsible for servicing that functionality in addition to a host of other features. With SAS Viya, we have a dedicated microservice for it: the Identities microservice.
Here’s another example. We want to edit an option in the configuration of an application, like the address of the Open Street Map server to use with Visual Analytics geo maps. With SAS 9, we use the SAS Management Console to interact, as usual, with the metadata server.
With SAS Viya, we set the property with Environment Manager. And, guess what? We are using the Configuration microservice.
If you are curious and want to see a list of all the microservices deployed in your SAS Viya environment, you can, again, use the Environment Manager.
Note that in all these examples, the Environment Manager is simply serving as the GUI to a particular microservice supporting the associated feature.
What are the benefits of Microservices?
The move to a microservice-oriented architecture brings many benefits to all stakeholders, first and foremost to SAS users and SAS administrators.
Microservices are independently updatable
It is now easier for you to manage and maintain your environment. Hot fixes for a specific microservice are released just as normal updates, and the official installation process is documented in the SAS Viya Administration guide.
After applying the normal “good IT practices” such as testing and performing a safety backup, applying a fix to a microservice can be as easy as running 3 commands:
sudo systemctl sas-viya-microservicename-default stop
sudo yum update microserviceRPM
sudo systemctl sas-viya-microservicename-default start
Start-up times are shorter
Each microservice is self-contained, so they can all be started in parallel, without having to orchestrate complex dependency chains. There are a couple of exceptions to this rule, plus trying to start 50+ processes all at once could be too resource-intensive for most servers. That’s why the SAS-Viya-All-Services orchestration script starts services in batches and not all at once; still, a complete restart of the SAS Viya platform only takes a few minutes.
Microservices must be capable of handling scenarios where services on which they depend are not running or may be responding with too much latency. You can start/stop almost any microservice and all of the other ones will not care. If they require services provided by other ones that are not running, they usually “wait and retry” or “move over.” As an example, I stopped the Folders microservice, used by the Content pane of Environment Manger. The latter did not crash or fail: the display is simply empty.
Just as with the previous point, there are a few exceptions: almost everything requires the SASLogon and Identities microservices, so, if they are down, nothing works.
Scalability and High Availability
When microservices are spun up, they self-register, making themselves available for processing requests. This way, supporting failover is as easy as ensuring you have at least two instances of the associated microservice up and running. It is possible to scale further for increased capacity/performance, and you can do so at the microservice level, based on the specific demand for each function (e.g., you likely won’t need as many instances of the Import VA SPK microservice as you do for the Authorization microservice).
Microservices are “open”
Microservices can run in different environments – bare OS, Cloud Foundry, Docker. Also, they are accessible to non-SAS developers through REST APIs. As an example, let’s say I’d like to retrieve the same properties for the SAS Administrators group that were shown above in Environment Manager. It’s as easy as calling a REST endpoint: http://<myserver>/identities/groups/SASAdministrators
The result can be in either XML or json.
In fact, even microservices communicate with one another using REST interfaces!
I hope this blog has been helpful.
Feel free to add comments or questions below.