Hello everybody. I have 3 years of experience with Java programming and web programming. I have used Tomcat during these years with a jsf-like framework.
Recently I got really pissed off by server downtime due to hardware failure and also by redeployments of my application on Tomcat each time I put new features or bugfixes. My clients were more pissed off than me. So I promised to myself that my next web-app will be highly available.
It is quite easy to achieve such a feature with a stateless application: I could just go with frameworks like Spring or Play and replicate my app on multiple servers. The only concern would be replicating also the database and maybe rsyncing data folders. Even though almost anything can be achieved with a stateless architecture, I personally prefer stateful apps. I have some basic knowledge of JavaEE and plan on building some experience with it. A few friends of mine told me, though, that managing a cluster of application servers requires decent skills and could also be time consuming. Something a developer would not want to worry about. Is that true? I thought I could just install Wildfly or any other AS on multiple servers, setup the cluster and don't worry too much about it.
In your experience, do you think it's really that bad to manage a cluster of AS with multiple apps? Of course, as a developer I would love to just use a PaaS like heroku or amazon and forget about the hardware, the servers and the whole platform. But with such services I feel like in prison, I really like to have control of the underlying layer of the application. I also have the feeling that once you start developing on these platforms, you are bound to them, because your code is specifically tailored to work on them.
If you build a cluster using the same hardware which is prone to failure, you are not going to end-up ahead. If you (and your clients) want a reliable solution, it will need to be built on a reliable platform.
... as a developer I would love to just use a PaaS like heroku or amazon and forget about the hardware, the servers and the whole platform. But with such services I feel like in prison, I really like to have control of the underlying layer of the application. I also have the feeling that once you start developing on these platforms, you are bound to them, because your code is specifically tailored to work on them.
I use Amazon EC2 and S3 and I have not had to make any changes to my applications. Do you have any specific examples?
posted 5 years ago
Hello Ron! Well... for example on Google App Engine I would be bound to its specific database. On heroku I would be bound only to some supported parts of JavaEE. Or, when using Spring I would have to optimize the architecture of the software around the usage of web dynos and worker dynos.
If I understood well Amazon is an IaaS rather than a PaaS, so that would explain why it's so elastic. I also noticed that there is JavaEE support on CloudBees.
With Amazon, if you only need Tomcat 7, you can use the Elastic Beanstalk service and just create an instance and drop your WAR file there.
If you need something more, then there are preconfigured instances , or you can roll your own by creating an EC2 instance with your favorite OS, then add Wildfly, MySQL, etc. to build-up a platform that will suit your needs.
If you are new to Amazon, you will get one year of Free Tier services, so you can test drive micro instances of the various computing (and other) services and see if they work for you.
There are many options for cloud-based platforms - I am only suggesting Amazon because I and familiar with them, and because you can give them a try for free.
posted 5 years ago
I just tried a free Amazon EC2 t2 micro instance. It's really nice! Thank you for the advice.
This would give me relief from worrying about the server and the hardware. Still, I would have to do all the linux administration and application server management. So this brings us to the initial question: does in your experience managing one or more application servers take much time and skills, for somebody like me who is a developer and not a sysadmin?
Amazon manages the updates for the instances. Depending on the update, a reboot may be required. Generally, you can schedule when the reboot occurs so that you can manage the availability of your application. More information at the Amazon EC2 Maintenance Help Page.