Frequently Asked Questions (FAQ)
What is unique about vFunction?
vFunction is the first and only AI-driven platform for developers and architects that intelligently and automatically transforms complex monolithic Java and .NET applications into miniservices/ microservices, restoring engineering velocity and optimizing the benefits of the cloud. Designed to eliminate the time, risk and cost constraints of manually modernizing business applications, vFunction delivers a scalable, repeatable factory model purpose-built for cloud native modernization.
What’s the difference between vFunction Assessment Hub and vFunction Modernization Hub?
vFunction Assessment Hub (vAH) is an assessment tool that analyzes, accurately identifies, and measures the negative impact of technical debt. vAH calculates app complexity based on code modularity and dependency entanglements, measures the risk of changes impacting stability based on the depth and length of the dependency chains, and then aggregates and benchmarks debt, risk, and complexity to assess the overall technical debt level. It then uses its AI to quantify the ROI of refactoring the app.
From there, one can invoke vFunction Modernization Hub (vMH) to automatically transform complex monolithic applications into microservices, utilizing both deep domain-driven observability via a passive JVM agent and sophisticated static and dynamic analysis. vMH analyzes architectural flows, classes, usage, memory, and resources to detect and unearth critical business domain functions buried within a monolith.
What languages does vFunction support?
vFunction supports Java applications (1.6+) and support for .NET applications is currently in Beta.
A wide variety of application servers including Oracle WebLogic, IBM WebSphere, Tomcat, Red Hat JBoss, and more are supported along with a large number of JVMs and JDKs – see the support matrix document.
Does vFunction need access to the source code?
All analysis is conducted independently on vFunction Platform based on dynamic code analysis and static analysis of the bytecode, and requires no source code access. Once a service needs to be extracted, vFunction generates a “Service Spec,” which is a list of all classes, configuration files and dependent JARs that compose the service. It then copies the relevant sources and configuration files with their package structure and tests (if available)–so at this point access to the code repository and build systems is required. vFunction then creates a pom.xml for the service. From there, you can compile and deploy that new service on AWS, Azure, OpenShift, Google Cloud, or any other cloud platform of their choice.
What about modernizing the database? I have a lot of stored-procedures and really need to clean this up?
vFunction focuses on modernizing the application layer business logic within the JVM; however, it also analyzes transactions, connections, and database table access and considers these to be constraints that impact service separation. vFunction relies on analyzing traffic to/from the databases via JDBC, so it sees, for instance, calls to stored procedures—but it currently does not analyze anything that they trigger within the database. In this way, it can significantly help you break your data into multiple databases.
How does vFunction identify services and does it relate to Domain-Driven-Design services?
vFunction combines static and dynamic code analysis, together with data science and graph theory algorithms to identify the proposed services for extraction. It builds the full call tree and among other things, optimizes the best entry point to create the most exclusive service. Its runtime analysis requires the application to perform as many user flows as possible in order to cover the functionality of the application or alternatively collect data in production for a sufficient period of time to achieve such coverage.
Because vFunction takes a “user’s perspective” to identify services, the automatically identified services resemble actual business domains that one would come up with through a Domain-Driven-Design exercise, such as Event Storming.
That said, if for some reason, the system fails to identify a service you want to extract, it allows you to provide a cue to start building the service by entering a class or a method (through its search feature) that serves as a starting point for that service. It would then automatically calculate the interdependencies and exclusivity of that service, enabling you to extract it.
Does vFunction automatically create the API to a service?
Yes. In cases where there are no existing endpoints for the service, vFunction will automatically create these endpoints as RESTful endpoints using Spring REST or JAX-RS. You just need to add a call to the service from the monolith, and re-run the analysis.
Related eBook: Application Modernization Patterns & Anti-Patterns
What does Service Exclusivity mean within the vFunction platform?
Service Exclusivity within the vFunction platform means the degree to which classes, resources, methods and variables are exclusive to that service. If you have 100% class exclusivity, this means those classes exist only within that service domain. This lack of tight coupling between services makes it comparatively easier to separate and extract that service.
Can a service be extracted even if it doesn’t get to 100% exclusivity?
Absolutely. For example, a Read-Only database table that is read from two different services may impact the exclusivity of those services, yet a Read-Only table shouldn’t prevent us from extracting those services. In some cases, a manual intervention may be required, for example if there is a database transaction that needs to be broken up. In these cases, either a developer is required to break up the dependency, or an architect can make an informed decision to alter the architecture and circumvent the dependency.
What if I’m left with non-exclusive classes?
Non-exclusive classes that are left at the end of the analysis are effectively your refactoring to-do list. They serve more than a single service, but are not a utility used by many. The recommendation in this case is to start by duplicating the class between the services (which vFunction does automatically) and then refactoring them at a later time.
Does vFunction support tracking JTA and XA transactions?
Yes. vFunction tracks access to database tables, JDBC transactions, and also JTA and XA transactions as those relate to relational databases.
Does vFunction support re-platforming of the Java container/application server?
It depends on which target platform is required. vFunction mitigates risk and unknown variables in this way by keeping the exact same Java container for the microservice as a first step (e.g. from WebSphere to WebSphere). Since vFunction extracts a lightweight service in terms of the required context, it enables you to migrate to a lighter container such as Apache Tomcat, Spring Boot, and others. If the starting platform is Spring, vFunction can automatically generate microservices configured for Spring Boot.
How long does a typical vFunction engagement take?
Installing vFunction is simple and straightforward depending on your network configuration and security constraints, since there has to be a connection between the JVM agent and the vFunction server (all installed locally). A vFunction engineer can remotely support you during the installation. Once the system is installed properly, you will either run the application in production or perform automatic testing in a QA or staging environment to cover as many flows of the system as possible. If no automatic testing is available, manual testing can be performed. This can take anywhere between one hour to one day or until sufficient coverage is met. After data is collected, you will schedule a workshop with a vFunction solution architect over a few days period. During the workshop, services are identified, refined, selected for decomposition, and a service spec is created for extraction of a new service or set of services.
What if I already know how I want to break the system up into services? Do I still need vFunction to extract only the identified services to rewrite or rearchitect?
vFunction identifies services based on how they are currently written, and will minimize constraints and increase the exclusivity of the services; however, architects are encouraged to use the information exposed by the platform to modify the automatically identified services to match their desired target architecture, taking into account the constraints that may arise from these modifications. Many customers selectively extract a set of services and/or iteratively refactor the monolith to a new architecture one service at a time.
Can vFunction analyze a production system?
Yes. Many customers deploy vFunction in production and leave its agent to collect data over a period of hours to days, with only 1-2% performance overhead on the application. The vFunction dashboard and UI allows the project team to continuously monitor and manage the various applications in the modernization pipeline.
What if my application runs on multiple JVMs?
In this case, you can install the vFunction JVM agent on multiple JVMs, run serial measurements on those JVMs, and then merge the results to get a unified view of the system on the vFunction platform.
Does vFunction fit a particular set of Java applications?
vFunction tracks information in a very fundamental way (native JVM agent, memory interactions etc.) and therefore is a very generic solution for any Java application.
How does vFunction ensure data security?
vFunction is installed locally and behind your organization’s firewall – whether on premise or on your secure cloud tenancy, so no data leaves your secure environment.
Where do I find vFunction installation guides?
Contact us at email@example.com and we will be happy to provide you access to our installation guides.