Jump to content

big unigui application, and many concurrency users (50.000 max)


docjones
 Share

Recommended Posts

I'm thinking if it's possible have a unigui application (typical database application, inserts, querys, google maps,  etc) with many users at time 50.000.

what do you think ? , what kind of server or farm servers (CPD) will be necesary? . what about unigui scalability? any experiencies?

it will be necesary using a midleware like datasnap ?, or mormot ? 

unigui is enough mature to make a project of this nature? , or better i forget....

 

all comments will be welcome.

Link to comment
Share on other sites

  • Administrators

Good question.

 

Scalability is one the concerns when developing a web application.

 

uniGUI is constantly tested and analyzed for better scalability. In next build we will introduce our new Stress Test Tool with a highly new advanced feature which allows recording a session and playing it back using stress test tool. It highly improves test environment and allows simulating application scalability under heavy load.

 

That said, stability of core framework is not enough alone. Even if your server is stable like rock it is not wise to run thousands of session in a single process address space. Instead you must divide sessions among multiple processes.

With large number of sessions load balancing will be inevitable. Load balancing is something that we will  try add as soon as we can.

 

Load balancing will divide session load between more than one process, so instead of having 10.000 sessions in same process you will have 40 processes each running 250 sessions.

 

Processes can be in same server or distributed among multiple servers.

 

For a project which targets 50.000 simultaneous sessions load balancing is a must.

 

For database you will definitely need a middle tier with a very efficient connection pooling.

Link to comment
Share on other sites

Thanks Farshad

 

Seems that load balacing / scalability is the most complicated theme

I found several articles about load balancing using IIS + tomcat, http://blogs.mulesoft.com/load-balancing-tomcat-7-using-iis-7-5/  , but this don't seems very resource optimal. In example, if you need 10.000 instances,  and 250sessions x process , you need 40 tomcat instances.  Or Perhaps best method is using ARR

 

how are you planning add load balacing to unigui? , using any  unigui software proxie/redirector or through IIS?

 

For database, i'm thinking in a postgresql / mysql cluster, and mormot as database tier.

Link to comment
Share on other sites

Hi

 

We deployed a large Microsoft Sharepoint enviromnent for one of our corporate customers. The setup we did was able to handle 30000+ connections and ran on VMWare hosts. I would follow the same approach as Sharepoint is based on .NET which is even more resource intensive that Delphi/UniGUI/mormot.

 

What we did was to have 3 web frontends. Between these three frontends we had Microsoft NLB enabled. (You could look at a F5, but the cost is enourmous.) These frontends then connected to the rest of the sharepoint farm components. Also note that the database setup was key to the whole solution. The database itself ran on a MSSQL failover cluster. The hardware we had for that was 16 cores with 128GB RAM with enterpise storage connected. The solution was able to handle the connecting clients easily.

 

If you plan to do reporting, I would advise having a seperate reporting server. If you plan to have specific jobs that must run at specific times, I would suggest having a seperate server for that as well.

 

So my advise would be:

1. Make sure that the NLB between the UNIGUI frontends are setup correctly, especially if you are going to use virtual machines as front ends. VMWare for example needs extra configuration to be able to do NLB.

2. Make sure that the database server have enough resources. No delays should be on the storage side. Also keep in mind that constant database maintenance must be done to keep it optimized. You will therefor need a good DBA.

3. Reporting must be done on a seperate server

4. Scheduled or other tasks must also be done on a seperatele server.

5. Database backups must be done whenever the expected connections will be at it's lowest

6. If you need to do database synchronization between database/sites, you might consider using MSSQL or Oracle.

7. If you plan to run on the internet, I would suggest putting the frontends in a DMZ. I would also suggest using a reverse proxy solution to bump up security.

 

I hope this will help a bit, as I have had great success with this type of architecture.

 

Regards

Stiaan

  • Like 1
  • Upvote 2
Link to comment
Share on other sites

Many Thanks  Stiaan for sharing your experience and your advices. i see NBL or NBL + ARR is a very good solution.

 

post-454-0-89585600-1435924937_thumb.jpg

 

To avoid database bottleneck, cluster database , and/or database midleware tier like mormot  it's a must have.

Report server like reporting services is a good solution

may be if intensive reporting requiered, balancing some server's reports will be necesary.

Link to comment
Share on other sites

  • Administrators

Hi

 

We deployed a large Microsoft Sharepoint enviromnent for one of our corporate customers. The setup we did was able to handle 30000+ connections and ran on VMWare hosts. I would follow the same approach as Sharepoint is based on .NET which is even more resource intensive that Delphi/UniGUI/mormot.

 

What we did was to have 3 web frontends. Between these three frontends we had Microsoft NLB enabled. (You could look at a F5, but the cost is enourmous.) These frontends then connected to the rest of the sharepoint farm components. Also note that the database setup was key to the whole solution. The database itself ran on a MSSQL failover cluster. The hardware we had for that was 16 cores with 128GB RAM with enterpise storage connected. The solution was able to handle the connecting clients easily.

 

 

Are you using MS NLB along with uniGUI servers?

Link to comment
Share on other sites

Hi Farshad

 

Unfortunatelly, we are not using Microsoft NLB with UniGUI. I would have liked to try that though.

 

What I was getting at is that the design priciples used in a Sharepoint environment should work the same for UniGUI. I hope you agree with this statement??? ^_^

 

Regards

Stiaan

Link to comment
Share on other sites

  • 1 year later...

With large number of sessions load balancing will be inevitable. Load balancing is something that we will  try add as soon as we can.

...

For database you will definitely need a middle tier with a very efficient connection pooling.

 

Any plans on providing Redis backend for UniSession?

Link to comment
Share on other sites

I have the feeling that load balancers will have a hard time detecting a UniGUI browser session

and dispatching calls from the same browser session to the same back-end server.

 

The reason is that UniGUI does not use cookies - instead it puts the session id in each request.

 

Two workarounds come to my mind:

 

1) configure the load balancer to dispatch among the available back-end servers based on the browser IP address

 

2) modify UniGUI to set a cookie named JSESSIONID in the browser, without actually using it.

    This is what Tomcat does, and it should trigger Java-compatible load balancers into using "cookie based stickyness"

    i.e. always dispatch to the same server all requests containing a JSESSIONID cookie with the same contents.

    Of course any decent load balancer will have the option to configure the name of the cookie used for stickyness.

 

See for example

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...