Buenas compañer@s!Estoy desarrollando una aplicación para Android en la requiero cierta velocidad computacional y viendo que en mi móvil (un SGS II) no va todo lo rápido que quiero opté por GWT y mediante un servicio REST me configuré todo para que cuando hiciera una petición GET me devolviese el resultado que buscaba en JSON.
Hasta aquí todo muy bonito pero el problema es que los servidores que ofrece Google con GWT no me gustan demasiado porque son algo lentos y mi intención es usar otro servidor. Si quiero usar GWT creo que tengo que usar los servidores de Google a la fuerza, así que mi pregunta es que si alguien conoce alguna otra forma de hacer esto, es decir, necesito cargar una aplicación en Java en un servidor y configurarle un servicio REST para que me devuelva los datos que se han ejecutado en la aplicación del servidor. Prefiero que sea JSON ya que estoy más acostumbrado a él, pero si es XML no me importa. ¿Alguien me puede guiar un poco? Gracias!!! Saludos!!!
¿Por qué usas GWT para generar JSON? No tiene sentido, GWT es una librería gráfica.
Tampoco necesitas usar los servidores de Google con GWT. Necesitas usar los servidores de Google con AppEngine (que es probablemente lo que estás haciendo) pero AppEngine no necesita GWT.
www.heroku.com + tu lenguaje favorito = profit, pero es básicamente lo mismo que AppEngine sólo que sin tecnología propietaria de Google, con más control y a mi gusto mejor (especialmente el workflow.)
Si eso perdón, es App Engine. El problema es que se me queda algo chico el servidor de google. ¿Usando heroku es más rapido? El problema es que la aplicación tarda unos 20s en completar la tarea y si no tengo un servidor muy rápido, como se hagan 10 peticiones a la vez cascará seguro
#3 siempre puedes pasar a pagar a Google.
Prueba Heroku, es gratis de probar y a mí me va como un tiro.
Si te tarda 20 segundos en realizar la tarea en AppEngine, una de tres:
- La tarea es mastodóntica.
- Lo has programado mal.
- Tienes algo mal configurado/programado y te está arrancando la instancia del servidor cada vez que realizas la petición.
La 3 es posible. En arrancar (y más sobre la JVM) tarda un rato largo.
Si en AppEngine te tarda eso, el mismo problema vas a tener el Heroku (o en cualquier lado.)
Bueno, la cosa es áun peor... Tarda 20s en el portátil que tengo (que no es gran cosa, un dual core a 2Ghz con 3Gb de RAM). Los servidores de google me dan timeout a no ser que le ponga 800 iteraciones, así que van peor que mi portátil. La cuestión es que se hace un for de unas 4000 iteraciones y en cada una tiene que hacer ciertos cálculos. Es cierto que se podría mejorar el código y tendré que hacerlo. Mi pregunta era que como GWT es muy muy muy lento no sé si es por el tema de convertir tanto código java a html y javascript o es que los servidores de por sí son malos. Igual que veo sitios donde puedo pagar por servidores desde 10€ hasta 300€ y si en este caso podría ir mejor la cosa.
O si como me comentas sea el servidor que sea me va a petar y los servidores de google no son tan lentos como parece, entonces ya cambiaría un poco la cosa.
#5 pero por qué usas GWT?
El código se debe convertir de Java a JS, pero eso sólo se hace en la fase de compilación y sólo para la parte gráfica.
Lo que tú ejecutas en tu servlet es Java puro y duro.
Ya pueden ser jodidas las operaciones que estás realizando para que tarde tanto en realizar 4000 míseras iteraciones xD
Lo de GWT es que me había confundido con otra aplicación ajena a la que te comento aquí. Pues sí más o menos parecen jodidas las operaciones jeje. Entonces, ¿qué me recomiendas hacer? ¿Sigo con los servidores de google o lo intento con otros?
Antes que nada, y por lo que estoy leyendo, yo intentaría depurar al maximo el codigo, ya que como te comentan, si te va mal en un servidor, en el otro tambien.
4000mil iteraciones y en cada una calculos y mas calculos, no soy capaz de imaginarme que estas haciendo xD
Tu problema no son las 4000 iteraciones, sino que metes dentro de cada iteracion. Si usas algun motor de DB relacional (por poner un ejemplo) y en cada iteracion le metes un triple join por la derecha de tablas con un numero moderado de registros... Pues tu servicio va a morir igual.
En AppEngine te da timeout, porque cada hilo solo puede ejecutarse durante un numero limitado de ciclos. Precisamente, para evitar que metas cosas como un bucle infinito que deje tostada la maquina.
Te recomiendo que optimices tu algoritmo (te podemos echar una mano), y si no tiene mucha solucion, pues que te pases a una arquitectura distribuida donde puedas tener X servicios atendiendo peticiones y X "curritos" resolviendolas por detras de forma paralela.
La opción de usar C++ no sé hasta que punto podría ser viable. La cuestion es que después de ejecutar cada iteración guarda los datos generados en una clase que luego al final del todo serializo. Intenté pasar todos los datos generados a un xml pero eran tan sumamente grande que petaba al generarlo.
La cuestión es que si lo programase en C++ luego no sabría como pasar los datos a Java.
PandragoQ eso que me dices, ¿como funcionaría a la hora de que mi aplicación recibiese muchas peticiones?
Prueba a explicar lo que estás haciendo con pseudocódigo, te podemos echar una mano. Hay soluciones para lo que estás describiendo, pero sin verlo no me voy a montar la película.
#10 Pues depende de lo que necesites, y de los medios de que dispongas.... Yo, asi a bote pronto, las arquitecturas que estoy montando siguen el siguente stack:
- Stunnel como terminador SSL.
- HAProxy balanceando entre los frontales (sirven HTML, JS, CSS e imagenes).
- Los frontales montados con lighttpd y con mod_proxy, encargado de balancear el backend.
- El backend, a base de servicios HTTP REST, en Ruby (sin rails).
- Memcached por un tubo, y MongoDB como capa de persistencia, montado en replica sets.
En Java, puedes hacer un interfaz con software que hagas en C, lo mas comodo es usando sockets.
Mejor que cuentes con un poco mas de detalle, de que va la pelicula.