[ixpmanager] IXP Manager - Planning for v4
Barry O'Donovan
barry.odonovan at inex.ie
Mon Sep 8 17:10:05 IST 2014
Hi,
A lot has changed in the 3 to 5 years that the decision was made to use
certain libraries / technologies / methods on IXP Manager.
In previous major version changes we made some serious architecture
changes in one sweep. For example v2 -> v3 saw the complete migration
from Doctrine ORM v1 to v2 (which was a change from the Active Record
pattern to the Data Mapper pattern).
Today, IXP Manager is a very large project and to do such a sweeping
migration in one go would stifle development, break something that isn't
actually broken and take a lot of time.
But, sticking with older technologies and libraries has negative effects
also. It creates developer apathy (for which I can personally vouch
for). It also provides a major stumbling block for bringing on new
developers and contributors (who wants to learn Zend Framework 1 now
which has been EOL'd for sometime?).
So, our plan for v4 is to bring in new technologies without throwing
away everything we have.
IXP Manager is a MVC application that currently uses Doctrine2 as the
Model, Smarty as the View and ZF1 as the Controller. Doctrine2 is still
current and won't be changing.
Smarty will remain as the view engine for current / unmigrated
functionality. But Smarty is... oh my God... soooooo bad. v4 will
default to Twig [1] which is more modern and far better structured from
a programming point of view. Coupled with the new framework, it will
also allow for a nicer means of skinning. For the interested, Twig has
some very nice features including layouts, macros and also some nice
security features.
ZF1 has served us well but it's been EOL'd and is now quite outdated.
The new 'hotness' in PHP is Laravel [2], which I've been using to great
effect for a while now. Laravel show cases some of the new and best
functionality of PHP and using very modern techniques (such as IoC [7]).
But more importantly, Laravel will let us do things in a much different
and much more flexible manner for the IXPs using IXP Manager. Some of
these include:
- Job queues: built-in and simple (to use) support for job queues via
Beanstalkd and others. Queuing jobs will provide functionality that we
at INEX have been looking for (and it's also an FAQ from other IXPs) ->
reconfiguring services on demand (or, at least quicker than a twice
daily cronjob).
Put this together with:
- Events: Laravel allows us to trigger events and subscribe to them.
A key example of queue and event functionality would be that a change to
a VLAN interface (such as checking the RS client box) would trigger a
'vlan interface changed' event. One subscriber to this event would be
the route server configuration manager. Based on the VLAN change, this
event handler can then queue events. The route servers themselves would
monitor these queues and rebuild / reconfigure the route servers
appropriately 'on demand'.
Similar handlers for route collectors, DNS ARPA changes, etc. can offer
much more 'real time' control of all the services at an IXP.
IoC decouples logic from the controller. What this means is that IXPs
who want to do things differently than INEX (let's say use Cacti instead
of MRTG as an example), can swap out MRTG with Cacti with one line of
code (that's assuming we write contracts - interfaces - for such
handlers and a Cacti version is coded of course!). But that's the kind
of power and flexibility we're looking to bring in.
Other features Laravel provides includes:
- much much improved unit testing on controller actions. Right now, we
spin up Apache and MySQL to test controller actions. This is no longer
required with Laravel making tests easier to write, more robust and more
focused.
- a much nicer and more structured way of creating command line
interfaces rather than the quite clunky way we have of doing it currently.
- a much more natural way to develop REST API endpoints with json:api
compatible responses.
And that leads us to the front end. Right now, the front end and the
back end are tightly coupled. During the development lifetime of v4, we
want to move more towards an 'API is Everything' back end with a
decoupled front end.
This separation will again aid unit testing providing a more reliable
and robust IXP Manager. It will allow other IXPs to create their own
front end on member facing portals or, even, move to IXP Manager as
their back end system but retaining investment of current member portals
by adding new features from IXP Manager through API endpoints. It will
also allow existing systems in IXPs to integrate with IXP Manager to
provision services and ports for example.
One of the bigger tests of this plan will be the (long awaited and badly
needed) revamp of the member facing area. We're currently planning the
UI / UX of this to deliver key information to members in the best way
possible. This will include Bootstrap v3 which is 'fluid' from the
ground up so mobile browsers to wide screen browsers should be supported
naturally.
During the early stages of v4, we'll create the API endpoints necessary
to support the member portal functions and then create a front end on
that using Ember.js [3].
Other changes in v4 will include:
- a switch from package management via Git sub-modules to composer [4]
and Packagist [5] as is current standard practice;
- introduction of Bower [5] for front end asset management;
- and we'll need a task runner for pulling everything together - for
that we'll use Grunt [6] (although that'll mostly be a development /
release prep tool rather than an end user requirement.
So, that's what we're looking at! It won't happen overnight but we'll
continue our policy of release early, release often and we'll update the
documentation and provide complete upgrade instructions at the
appropriate times. Some of the above is also subject to change depending
on practical experience / issues as we move towards it.
Comments, ideas, etc. are all welcome.
- Barry
[1] http://twig.sensiolabs.org/
[2] http://laravel.com/
[3] http://emberjs.com/
[4] https://getcomposer.org/
[5] http://bower.io/
[6] http://gruntjs.com/
[7] http://laravel.com/docs/ioc
--
Kind regards,
Barry O'Donovan
INEX Operations
More information about the ixpmanager
mailing list