On Thu, Dec 15, 2011 at 4:48 PM, Christopher Schultz <
ch...@christopherschultz.net> wrote:

> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
>
> Hernan,
>
> On 12/15/11 12:47 PM, hernan wrote:
> > As separate process, I thought a java "server" process with the
> > wrapper that receive requests, launch a new process an response
> > with the result. The servlet (thread) calls the process using some
> > kind of client/server mechanism implemented in java (may be
> > sockets).
>
> So in order to avoid calling Runtime.exec() from Tomcat, you're going
> to write another service that mimics quite a bit of what Tomcat does,
> and then call Runtime.exec() from that? Hrm.
>
> So, you'd have this:
>
> Client -> Tomcat -> GLPK Service -> Java Wrapper (GLPK)
>
> That seems entirely unnecessary.
>
> > I agree, just doing Runtime.exec(binary), the disadvantage with
> > Runtime is that I'll not use java classes to comunicate
> > input/output of the process.
>
> Aah... so GLPK generates output that is better consumed as serialized
> Java objects? What about on-disk artifacts or some kind of non-binary
> output? I'm just thinking out loud. I hate Java serialization in most
> cases.
>
> > I've run successfully using syncronized methods, but I have to
> > handle concurrent requests and I don't want to serialize them
> > because the response times may be very different between them and I
> > don't want some user have to wait a lot for a "simple" request.
>
> Yup. Makes sense. That pretty much rules-out in-process use of GLPK.
>
> Are there any plans from the GLPK folks to make their code threadsafe?
> That would certainly be nice...
>
> > This is the main concern for me. For that reason I prefeer run glpk
> > in a different os process. I see two big ways: serving each servlet
> > request with a different process or run a different process/es
> > dedicated only to glpk. The first way is what I have to learn, but
> > it seems that tomcat does not support. In the second, I have more
> > job coordinating processes and manipulating input/output.
>
> I would start-out just using Runtime.exec() and communicating via
> stdin/stdout with (I guess) serialized Java objects. That seems so
> disgusting to me, but it's slightly less odious than writing a TCP/IP
> service wrapper to essentially do the same thing.
>
> > In my experience GLPK is stable, and I've been doing some
> > (serialized) tests on java wrapper and they run successfully. But
> > I'm not 99% sure that will be perfect, and mainly I don't trust in
> > the program/programmer (me) that uses the library. I don't want
> > that tomcat crash due to some request.
>
> That's a good policy.
>
> > Connecting apache htttpd server with tomcat, can I run several
> > tomcat instances and run each http request in a different tomcat
> > instance?
>
> Uh, yes, but not the way you want to. It sounds like you want to run
> Tomcat like an inetd-style service, which is going to get you nowhere.
> It takes Tomcat so long to start up that you may as well just
> serialize access to your GLPK library. Actually, I'll bet Tomcat can't
> even be used as an inetd-style service.
>
> > I know that this is not the tomcat philosophy, but I just want to
> > know if it is possible or is common this approach for this kind of
> > situations.
>
> Er... you may be able to beat it into shape, but it will be horribly
> unstable and just a terrible all-around idea. Look elsewhere.
>
> > My principal requirements are: stability (main concern),
> > scalability, serving concurrent requests (no more than 100
> > concurrent requests). If possible: flexibility/maintainability.
> >
> > I think that your option #4 is the appropriate in this situation.
>
> Do you have any opportunities for batch-processing these requests?
> That way, an HTTP request essentially amounts to a queuing operation.
> You have a single-threaded, background process that does the "real"
> work (possibly by running multiple, parallel copies of GLPK) and
> deposits an artifact for each task somewhere (database, on-disk file,
> etc.). That might simplify the architecture. *shrug*
>
> This doesn't seem like a simple thing to do in general. Is there high
> demand for linear-physics-via-HTTP processing?


Finally, I'm just using Runtime.exec() to execute a c++ program that uses
glpk, and using stdin/stdout to communicate them. The whole system is
running tomcat, axis2, java and c/c++.

I don't know about the demand for linear-physics-via-HTTP, it's only about
a service for inventory and order management.

Thanks a lot for your comments and suggestions!!!

Regards,
HernĂ¡n

Reply via email to