buonzz/frontier

Front Controller of multiple web applications.

v1.0.0 2014-07-05 03:00 UTC

README

This web application is basically designed as "front" for your other web applications. What? a web application in front of web application? Why on earth would anyone want that?

There are several reasons for this:

Security

Let's say you have a web application in your web server. In usual scenario, you are exposing that web server in Internet in able for the users to reach the web application. The problem with that is, your web server can be also targeted by many bad guys out there. And if you had missed a single security hole in your application, your whole web server is compromised.

The ideal setup should be, the web server is not accessible outside -- it can be only accessed via LAN by other computers in your own network. But then, how the outside users can access the web applications hosted in there?

Simple, put a dummy web server that is exposed to outside, this web server is the one who will fetch the contents from the "real" web servers via LAN. The Frontier application is designed to do just that -- fetch contents from other servers. The dummy server has no other function aside from fetching contents from internal web servers. That way, any guy can hit the Frontier but wont getting anything out of it, since its simply not accessing anything at all aside from fetching contents from the internal servers.

This will protect your actual web applications from brute force attacks, since the Frontier will filter every malicious request, protecting the real web applications from any security breach attempts.

Scalability

Frontier by default randomly selects from the list of web servers for each contents that its going to fetch. This gives you automatic load balancing in case you have many web servers. Since your users is not seeing directly the real web servers, you can add as many of it internally. You just need to update the configuation file of Frontier app, so that it can fetch from those contents.

Frontier can be also installed in multiple publicly accesible web servers, so that when the server its being hosted is getting overwhelmed, it will automatically "failover" the requests its receiving to another web server.

Smart Caching

Frontier caches your contents in Redis - a very fast data-structure storage. This means all similar requests doen't have to hit the web applications always. It first checks the local cache before fetching contents from your web applications.

Fault-Tolerance

Frontier is designed to survive almost any kind of disaster that could happen in your IT infrastructure. This are the scenarios on which Frontier will help you a lot:

What if the primary database went offline because of maintenance of unexpected issue? Frontier will use the local cache copy it has, during those downtime, your users will still be able to browse your sites, but not the recent copy of it.

What if the internal web servers got offline and cant serve contents? Frontier will automatically detect defective web server (i.e. returns internal server error, runtime errors or doesn't respond at all). In cases that Frontier detects any problems in any web server, it will stop fetching any of those and will keep pinging it, until its working fine.

What if the server on which the Frontier is being hosted itself went down? Frontier is designed so that it will redirect it to another Frontier web server or any link you specified in cases such as Runtime Error or any unexpected Exception. Its advised that you have multiple public-facing web servers on which Frontier will be installed, then setup load-balancing among those.

User Agent Detection

Frontier has the capability to detect the browser and device the user is using. You can configure Frontier which site to fetch contents from, depending on the device the user is using.

GeoIP

Frontier has the capability to detect the geographical location of the visitor, you can configure which site you want to serve depending on the country of the user.

Logging and Analytics

Frontier will store its analytics data and provide it to you like Page views, unique visitors and other sort of things you wanted to know about your traffic

Split-URL Testing

Frontier allows you to serve two version of the site to the users. This is commonly used when you wanted to try out some new features in some of your users, while serving the old version to other users. You can then analyze the performance of each site on the stats result of the split-url testing.

Requirements

  • cURL Extension
  • PHP >= 5.4
  • Redis
  • MCrypt
  • Composer

Installation

composer create-project buonzz/frontier