News

More on the new REST service for 'Tasks'

Related products: Integrations and Data Exchange AIMMS PRO and Cloud Platform

This product update will dive a little deeper into the new ‘REST Service for running solve jobs and other asynchronous jobs’ about which we informed you in an earlier product update.

Why did we build it?

For three reasons:

  1. As part of our integration vision: enabling our software to fully participate in an increasingly connected IT landscape, using common standards such as REST, OpenAPI and OAuth.

  2. Specifically to replace the current PRO API that requires more programming and only support Java and .net.

  3. As part of our modernization of the AIMMS PRO code, turning it into a collection of micro-services connected through APIs.

How do we envisage this will be used?

Knowing the creativity of AIMMS app developers, we know we will be surprised with the number of ways in which this new functionality will be used. Some applications that we have already identified are:

  • Automating the execution of a large number of optimization runs to conduct a scenario analysis.
  • Incorporating an AIMMS optimization into an analytics workflow consisting of all sorts of other technologies.
  • Embedding an AIMMS optimization into an interactive software product or application to perform ‘behind the scenes’ AIMMS optimizations.

What are key features I need to know about?

  • Supports creation, inspection and deletion of Tasks. An overview of Tasks currently running can be retrieved using a REST call.
  • Includes OpenAPI spec to enable automated development of the REST client.
  • Tasks are queued and, depending on the configuration and contract form, multiple Tasks can be handled concurrently.
  • For now uses API keys for authentication, created in the PRO Portal. In future this will be changed to a more sophisticated authentication/authorization method.

What is a ‘Task’?

‘Task’ is a new term that we introduced so that we can differentiate between Sessions and Tasks.

Within the AIMMS context you might be familiar with the concept of a solve session. This refers to an AIMMS run-time session with a specific AIMMS model loaded. When a user of AIMMS PRO (on our cloud platform or on-premise) requests an optimization (typically by ‘hitting’ some kind of ‘optimize’ command or button), a separate solve session is launched, the optimization job is executed and when done this solve session is terminated. Same mechanism applies when a solve job is submitted using the ‘old’ PRO API: the solve session is started, solve job is performed, solve session is terminated.

We introduced the new concept of a Task so that we could run a sequence of tasks on the same session, thus avoiding the session launch times. This is particularly helpful when running a large number of optimization jobs that each require little time on the same model. After completing a Task the Session is used for the next Task in the queue for the same model. The Session is terminated when there are no more Tasks for that model in the queue.

What else do I need to know as app developer?

  • Only available on our cloud platform, no plans to offer this for the on-premise version of AIMMS PRO.
  • Requires a commercial arrangement; and in most cases we can arrange trials.
  • Reference documentation can be found here.
  • And of course you can always ask questions here in the community or email our User Support team.

 

 

 

 

 

Jan-Wilem-

  • Only available on our cloud platform, no plans to offer this for the on-premise version of AIMMS PRO.

Does this also exclude external to AIMMS Azure instances?


Hi Fenris, thanks for your question. I am afraid that at this point this also excludes ‘external to AIMMS Azure instances’.

The main reason for this is the deployment complexity of the software that runs the AIMMS cloud platform. For example, 7 or so different AKS clusters each running different Docker containers for the various services in which we broke down the AIMMS PRO application. Providing and supporting all the code that configures this environment to/for others would not really be manageable for us.

Longer-term we intend to explore alternative deployment models for our cloud product, possible on customer-owned tenants. For that exploration I would be quite curious to learn more about your case and what made you ask the question about ‘external to AIMMS Azure instances’. So maybe we can get in touch about this?

Regards,

Jan-Willem


@Jan-Willem - Sree and I will follow-up with you via our work accounts.


Hi @Fenris Wulf 

Well, technically, even outside our cloud platform you can run your own docker cluster using our AIMMS EO docker image (https://github.com/aimms/aimms-eo), directly running dex::api::RESTServiceHandler to handle incoming requests one at a time.

However, on our cloud platform you can just publish an app and then directly start using the Task REST service to fire tasks from your app, effectively allowing modelers to instantly expose their model via a REST API. We then take care of all the infrastructure on our cloud platform necessary to run them at scale.

Setting this up yourself leaves it completely up to you to set up such infrastructure yourself with things such as load-balancing task requests between multiple nodes, or implementing more advanced task queueing approaches across all nodes in the cluster. This will require additional expertise in your team outside of the realm of optimization modeling and mathematical optimization, and potentially substantially slow down the time-to-market of the services you want to expose.


Didn't find what you were looking for? Try searching on our documentation pages:

AIMMS Developer & PRO | AIMMS How-To | AIMMS SC Navigator