Thank you, Richard

A given transaction involves processing a user request, making two or three 
requests to the database, and returning around 500 kB to the user.

I certainly don’t need to load fonts in the LC process. Can that be turned off?

I like the idea of maintaining a queue of running LC processes and growing or 
shrinking it as needed based on request load.

How does the http server know which process to access?

I know that node.js has a pretty simple code for launching a CGI process and 
listening for a result. I don’t know how it would do that with an 
already-running process.

Sent from my iPhone

> On Feb 28, 2018, at 12:22 PM, Richard Gaskin via use-livecode 
> <use-livecode@lists.runrev.com> wrote:
> 
> jonathandlynch wrote:
> 
> > I have another server question. I really like scripting with LC,
> > because I can make improvements very quickly. This is important
> > because of my very limited free time.
> >
> > But, I want to be able to handle many many concurrent server requests,
> > the way node.js does.
> 
> Good timing.  Geoff Canyon and I have been corresponding about a related 
> matter, comparing performance of LC Server with PHP.
> 
> PHP7 is such a radical improvement over PHP5 that it's almost unfair to 
> compare it any scripting language now.  But it also prompts me to wonder: is 
> there anything in those PHP speed improvements which could be applied to LC?
> 
> 
> But that's for the future, and for CGI.  In the here-and-now, you're 
> exploring a different but very interesting area:
> 
> > Would it work to have node take In a request, launch an LC cgi
> > executable to process the request, set an event listener to wait
> > for LC to send the results back to Node, then have node return
> > the results to the user?
> >
> > This is not unlike using Apache to launch LC CGI processes, but
> > the asynchronous nature of node would, presumably, tie up fewer
> > system resources and allow for larger concurrency. This could mean
> > having a couple thousand LC processes running at any one time - would
> > that be okay as long as the server had enough RAM?
> >
> > In general, would this work for a system that hand to handle, say,
> > 10,000 server requests per minute?
> 
> A minute's a long time.  That's only 167 connections per second.
> 
> Likely difficult for any CGI, and certainly for LC (see general performance 
> relative to PHP, and the 70+% of LC boot time spent initializing fonts that 
> are almost never used in CGIs - BZ# 14115).
> 
> But there are other ways beyond CGI.
> 
> A couple years ago Pierre Sahores and I traded notes here on this list about 
> tests run with LC socket servers.  There's a lot across multiple threads, but 
> this may be a good starting point:
> http://lists.runrev.com/pipermail/use-livecode/2016-March/225068.html
> 
> One thing is clear:  if high concurrency is a requirement, use something 
> dedicated to manage comms between connected clients and a pool of workers.
> 
> My own tests were measuring lchttpd against Apache, a different model but 
> instructive here because it's still about socket comms.  What I found was 
> that an httpd written in LC was outmatched by Apache two-fold.  But that also 
> means that a quickly-thrown-together httpd script in LC was about half as 
> fast as the world's most popular httpd written in C by hundreds of 
> contributors specializing in that task.
> 
> So, promising for certain tasks. :)
> 
> The key with my modded fork of the old mchttpd stack was rewriting all socket 
> comms to use callbacks.  The original used callbacks only for incoming POST, 
> but I extended that to include all writes as well.
> 
> Applying this to your scenario:
> 
>    client      client      client
>   --------    --------    --------
>      \           |          /
>       ........internet.......
>        \         |       /
> |----------- HTTP SERVER -----------|
> |     /           |          \      |
> |  worker       worker      worker  |
> |-----------------------------------|
> 
> 
> While LC could be used in the role of the HTTP SERVER, that would be 
> wasteful.  It's not an interesting job, and dedicated tools like Node.js and 
> NginX will outperform it many-fold.  Let the experts handle the boring parts. 
> :)
> 
> The value LC brings to the table is application-specific.  So we let a 
> dedicated tool broker comms between external clients and a pool of workers, 
> where the workers could be LC standalones.
> 
> That's where much of Pierre's experiments have focused, and where the most 
> interesting and productive use of LC lies in a scenario where load 
> requirements exceed practical limitations of LC as a CGI.
> 
> The boost goes beyond the RAM savings from having a separate LC instance for 
> each CGI request:  as a persistent process, it obviates the font-loading and 
> other init that take up so much time in an LC CGI.
> 
> As with the lchttpd experiments, using callbacks for all sockets comms 
> between the LC-based workers and the HTTP SERVER will be essential for keep 
> throughput optimal.
> 
> 
> TL;DR: I think you're on the right track for a possible solution that 
> optimizes your development time without prohibitively impeding scalability.
> 
> 
> The suitability of this comes down to:  what exactly does each transaction do?
> 
> 167 transactions/sec may not be much, or it might be a lot.
> 
> If a given transaction is fairly modest, I'd say it's probably worth the time 
> to put together a test system to try it out.
> 
> But if a transaction is CPU intensive, or heavily I/O bound, or otherwise 
> taking up a lot of time, the radical changes in PHP7 may make it a better 
> bet, esp. if run as FastCGI.
> 
> Can you tell us more about what a given transaction involves?
> 
> -- 
> Richard Gaskin
> Fourth World Systems
> Software Design and Development for the Desktop, Mobile, and the Web
> ____________________________________________________________________
> ambassa...@fourthworld.com                http://www.FourthWorld.com
> 
> _______________________________________________
> use-livecode mailing list
> use-livecode@lists.runrev.com
> Please visit this url to subscribe, unsubscribe and manage your subscription 
> preferences:
> http://lists.runrev.com/mailman/listinfo/use-livecode

_______________________________________________
use-livecode mailing list
use-livecode@lists.runrev.com
Please visit this url to subscribe, unsubscribe and manage your subscription 
preferences:
http://lists.runrev.com/mailman/listinfo/use-livecode

Reply via email to