There are more than 21 billion Java virtual machines today running predominantly monolithic applications. Many could take advantage of cloud native architectures, but rebuilding them for this new environment would be complex, time-consuming, and could require taking employees from other, more value-adding tasks, noted Moti Rafalin, CEO and co-founder of a new company publicly launched Tuesday, vFunction.
This company has created a system to transform monolithic Java applications into microservices, using what it claims is a scalable, repeatable factory model.
“You can’t leverage true cloud infrastructure, like Kubernetes, or serverless, or all the great things that the cloud has to offer, without a complete refactoring of these applications. The problem is, refactoring is really difficult,” said Rafalin. “The more you modernize, the more value you would get from the cloud. If you only re-host, yes, you can shut down your data center, but you’re not going to get much value out of that. If you re-platform, yes, you’re going to get some benefits from DevOps, but you’re still not breaking the application into microservices. You’re not getting the elasticity, the engineering velocity, the cost savings, and so in order to get the true benefits, you need to do that type of refactoring. There’s no effective technology to do that, and that is what we set out to do almost three years ago.”
vFunction operates on-premises, rather than in the cloud, with the customer installing a server locally. It then transforms monolithic applications into microservices by first performing a dynamic analysis on the running application, via an agent installed on the application server. vFunction also performs a static analysis on the application binary and, combining both, identifies individual services.
“The goal is to really collect data about the application in production, so we can identify true services that correlate with specific user flows,” explains Rafalin. “The idea is to decompose this monolith into what otherwise would be a domain-driven design exercise.”
From there, the user can determine what services should be split into individual microservices or otherwise broken down further, via a graphical user interface.
“It’s not a black box, right? It’s very important to understand that it is giving all this visibility to the architect or senior developer, but there they are in the driver’s seat,” said Rafalin. “They make decisions in terms of what they want to do with this application. Once they feel comfortable with the design, they click a button and it creates a service specification file for each of those microservices.”
vFunction then automates the creation of the individual microservices, copying the necessary source code and automating their creation. It puts everything into a directory, which can then be uploaded separately to a repository. As for the deployment of the code, vFunction is entirely agnostic, and the microservices can be deployed on any Kubernetes or cloud native platform. An added benefit of the dynamic analysis, Rafalin mentioned, is that vFunction also identifies “dead code” that users can get rid of because it is no longer being used.
The company says that it has put all of this into practice and offers up a case study of one unnamed “global financial data services leader,” which it says was able to decompose an application into eight separate services, from around 100,000 lines of code and 250 classes, 15 times faster than it would otherwise.
Currently, vFunction works only with Java, but Rafalin says that .NET may be on the horizon for next year.
“The market opportunity is enormous on the Java side,” said Rafalin. “It’s basically the backbone of most enterprises, so there’s plenty to do there, but the algorithms and our technology works at a very fundamental level. It is definitely transferable to other languages.”