Asimio.net is a side project I have been working on for a few years now to catch up or play with technology that I don’t necessarily use as part of my daily job.
It’s a rental property information services provider that allows to search for vacant properties and registered users to list their properties, upload photos and save searches.
Asimio.net is built as a set of Debian packages bundling everything needed to run, including JRE, Tomcat, the apps themselves, Java Service Wrapper, etc..
- asimio web: a web application that allows to search for vacant properties that meet certain criteria. It also allows registered users to list their properties, upload photos and save searches.
- asimio jobs: a batch application that schedules jobs for processing third party feeds, send emails to users with newly added properties that matches certain criteria, expire listings among a few others.
- asimio db updater: a standalone application implementing zero-downtime database deployment by splitting database migrations into two sets of changes: expansions and contractions scripts.
- asimio crawlers: a batch application running as a service that fetches and transforms 3rd party feeds.
I acknowledge this is a not a perfect setup by any means, but I’m also constrained budget-wise, keep in mind this is a non-profitable side project.
As shown in the previous image, these apps are hosted in economic OpenVZ containers found on lowendbox.com, specifically 2x vpsdime.com and 1x www.chicagovps.net.
There are also some SPOFs, some a limitation of my OpenVZ containers (or my lack of knowledge), such as it preventing me from creating VIPs for Keepalived + Nginx configuration. Some are on my side, like running only one instance of asimio-web, asimio-jobs, Solr and HornetQ. I still try to fix them every now and then.
Architecture has also evolved over time, these app deployments are now done via a single Jenkins click, where before it was a manual scp, stop service, remove old version, …. The database is now migrated/updated via upgrade/downgrade changes set without breaking existing client apps. They are now built, including everything they need to run, in an attempt to comply with 12 Factor methodology.
And lastly, the tech stack for these apps includes Spring for DI, MVC, Webflow, transaction management and security, Hibernate as JPA provider and Ehcache for method and Hibernate’s 2nd level caching.
For the UX, they use a mix of JSP, Freemarker, Sitemesh and DWR.
asimio jobs relies on Quartz to schedule jobs.
HornetQ is used as the JMS broker to help processing 3rd party feeds and Solr for indexing and search for properties.
And well, they all use JUnit, Mockito and Harmcrest for Unit and Integration Tests.
In the coming weeks, I’ll add some entries about implementation details, stay tuned.