Hi manhood,

I have a blog and I have written several posts about node but I haven't 
covered the architecture of our product and I haven't given much details 
about our project. I have rather focused my posts on tools and libraries 
that we have developed to ease node.js programming and that we have 
published in open source. As you will see in the blog, I've also had 
contentious discussions with other noders because I've often been promoting 
a "different" approach to node programming.

My blog: https://bjouhier.wordpress.com/

Open source projects: 
https://github.com/Sage/streamlinejs
https://github.com/Sage/ez-streams
https://github.com/bjouhier/galaxy
https://github.com/bjouhier/node-lol (we don't use this one in our ERP :-)

In our V7, we have done several big changes to our application. We have:

   1. rewritten all our clients: a new web client, a new mobile client, new 
   Office add-ins. We are dropping our win32 fat client completely.
   2. replaced our Java web stack (almost all of it) with a new stack based 
   on node.js,
   3. rewrittten a new admin module (technical admin + user admin + 
   management of UI personalization) in node.js + mongodb
   4. introduced a search service based on Elastic Search.
   5. upgraded our traditional ERP kernel (C + proprietary 4GL language) to 
   fully support Service Oriented development (putting service orientation at 
   the heart of the product, not delegating it to some kind of middleware 
   tier).
   
 We have made a big bet on JavaScript 4 years ago: our new clients (except 
the Office add-ins) are HTML and JavaScript (lots of jQuery initially but 
we decided to drop support for old browsers and we are now going directly 
to DOM APIs for performance - we sometimes have to display big data sets). 
But we also chose JavaScript for the server side (a lucky move as node got 
a lot of traction). The idea was not so much to share code between browser 
and server (we share a few modules) but to build a strong common technical 
culture and keep things simple.

Node is really central in our new architecture because our node server acts 
as a smart proxy between all the pieces of the puzzle. All the requests 
from all clients go through our node server, which acts as a smart proxy 
and connects to all our backend components. Our node server does not 
connect directly to the ERP database (Oracle or MSSQL) but it talks to our 
ERP engines (a C interpreter that executes proprietary 4GL code) through a 
proprietary binary protocol. We also wrote our own load balancer in node.js.

Our new architecture is very RESTful (in the HATEOAS sense of it ). I'll 
blog about it when I get the time.

Our JS code is all written with CommonJS modules (node's flavor, and we 
have a small infrastructure that makes it work transparently and 
efficiently client side). All the server side async code is written with 
streamline.js (a language tool that I published in Jan 2011).

We are using a few 3rd party modules (mongodb-native, pdfkit, commander). 
We are using qunit (node-qunit server side) for unit tests. I'm not a big 
fan of smallish 3rd party modules that solve little problems that we can 
easily solve ourselves but when there is a big problem to solve (fast 
mongodb driver, PDF generation) and a good module for it (with the right 
license) I go with it.

The callback model was a showstopper for us: too fragile, too difficult to 
read and maintain (we started with it).  We needed something simple and 
robust. We also had to be able to bring new developers quickly up-to-speed 
on the project. IMO the callback model is cool for systems guys who write 
low level I/O code but not for application developers who write lots of 
rather mundane business logic. These guys don't care about async I/O, they 
care about writing their logic in a natural and maintainable way. If we 
hadn't found a solution to this problem (streamline.js, fibers came out a 
few days later) I am not sure that we would have continued with node (note: 
we tried promises too but they did not cut it).

This was a difficult project and it took 4 years to complete it. But most 
of the difficulty did not come from node itself (I think we had the right 
approach to keep it simple) but from the complexity of the existing ERP 
product. We are in a world that expects strong backward compatibility and 
when you make such big changes to the technology stack, it takes a lot of 
energy to put all the pieces back together and catch up with every feature 
that used to be there before.

The nice thing is that we made it. The product has been released and well 
received by partners, customers and analysts. We still have a lot of work 
to do but we have caught up and we have a great platform that should allow 
us to innovate at a fast pace. JavaScript is a jewel: simple, accessible, 
and versatile (functional, O-O, procedural - you pick what's best for your 
problem and you can mix and match). Looking back, node was a great choice 
and I would do it again 100 times.

Hope this helps.

Bruno

On Thursday, September 18, 2014 8:26:32 PM UTC+2, manwood wrote:
>
> Bruno - interesting, do you have any blogs, or can you give me any detail 
> on how you're using it? Where does it fit in your architecture? 
>
> Thanks
>
> On Wednesday, September 17, 2014 10:50:08 PM UTC+1, Bruno Jouhier wrote:
>>
>> We (Sage) have been using node.js heavily in the new version of our mid 
>> market ERP product (Sage ERP X3 V7). This is not "large enterprise", rather 
>> mid-market but the fact that node has been chosen by an ERP vendor may help 
>> you sell your story. 
>>
>> Bruno
>>
>> On Tuesday, September 16, 2014 11:21:25 PM UTC+2, manwood wrote:
>>>
>>> I'm looking to build a case for using NodeJs at work (a fairly 
>>> conservative and risk averse environment). 
>>>
>>> Can people point me to any examples of large enterprises, or high 
>>> traffic web applications, using currently NodeJs? 
>>>
>>> Ideally I'm looking for blogs or discussions around proper, real-world 
>>> architectures and tech stacks, any problems they've overcome, lessons 
>>> learned, stories from the trenches etc. 
>>>
>>> I have seen FogCreek's Trello for example - I'm looking for more like 
>>> this.
>>>
>>> Thanks
>>>
>>

-- 
Job board: http://jobs.nodejs.org/
New group rules: 
https://gist.github.com/othiym23/9886289#file-moderation-policy-md
Old group rules: 
https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines
--- 
You received this message because you are subscribed to the Google Groups 
"nodejs" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/nodejs/37c681c6-f424-499a-a3ab-ede20f1f27a4%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to