We have an application that has served us and our clients well from some 20 years now. Pretty good track record but it's obviously showing it's age in some areas.
We are looking for advise and suggestions for bringing the product to the next level. The idea is to address some issues without throwing away or rewriting 10,000's of lines of code.
Here is what we have today: The application server side (actually dozens of programs and CGIs) runs on Linux (CentOS specifically) where interactive operations are handled via browsers (lots of javascript/jquery, some ajax calls, mostly server side rendering). The server side is almost exclusively written in C. We have our own proprietary forms engine that handles data retrieval, posts and launching of programs. MySQL is used as our database.
The application is financial in nature and handles 100's of thousands of transactions and customer records. The core of the product is solid. By core I'm talking about our business logic, batch processing, etc. It's the interfaces and the periphery where we need retooling.
We could use more granular access/permissions model, better access to data and processes though APIs and we need to be able to develop these components more rapidly than possible with our current system.
To preserve our investment and not fix what is not broken, we are investigating what changes can be made to address these concerns but still keep most of the libraries and programs written in C.
One idea we have is to replace our front end with a Node.js based application. The application will initially provide API (Rest based json data) services for read and update of data as well as business logic process endpoints. It would also manage access to data (read and write) and processes via some roles based permissions model.
Eventually the existing interfaces will be redone to use these APIs and possibly do more client side rendering and better interactivity via socket-io and client side javascript frameworks.
Finally, my questions:
- Does this idea have merit?
- If not, what other approaches should we consider?
- What other considerations are there for this project?
- Will Node.js used in this fashion scale?
- What server side js framework should we consider? Express seems promising but maybe some other more "opinionated" framework would be better.
For ready only operations, I expect that all server side activity will be handled in the Node.js application. For business logic, maybe database writes, I expect we will hand off the processing to a separate program. We assume the aysnc/await ability will allow this w/o performance degradation. Add-on integration might be possible but as our libraries aren't thread safe that might have limited usefulness.
Thanks in advance for your comments/ideas/suggestions.
Does this idea have merit?
- Yes.What other considerations are there for this project?
-- There are many. But your approach has the desirable benefit of being incremental.Will Node.js used in this fashion scale?
-- That's hard to say. The only way to know for sure is to hook up a node.js instance to your existing infrastructure and see if it holds up. However, node is designed to handle a large number of concurrent requests. You can read up on its "event loop" to find out more.