Multi-Tenant Architecture

Multitenancy refers to a principle in software architecture where a single instance of the  software runs on a server, serving multiple client organizations (tenants). Multitenancy is contrasted with a multi-instance architecture where separate software instances (or hardware systems) are set up for different client organizations. With a multitenant architecture, a software application is designed to virtually partition its data and configuration, and each client organization works with a customized virtual application instance. Multitenancy is also regarded as one of the essential attributes of cloud computing.

Differentiation from Virtualization:

In a multitenancy environment, multiple customers share the same application, running on the same operating system, on the same hardware, with the same data-storage mechanism. The distinction between the customers is achieved during application design, thus customers do not share or see each other's data. Compare this with virtualization where components are abstracted enabling each customer application to appear to run on a separate physical machine.

Approaches to Managing Multi-Tenant Data:
  1. Separate Databases
  2. Shared Database, Separate Schemas
  3. Shared Database, Shared Schema
Hybrid Multi-Tenant Database Architecture:
  1. Single Tenant - While this approach offers customers a separate custom database, it does not allow for a scalable solution thereby requiring software vendors to maintain multiple highly variable database schemas making software upgrades more difficult and restricting the ability of the vendor to maintain one core code base.
  2. Multi-Tenant with Identical Schemas - While this approach offers substantial scalability, it limits the breadth of configuration options for each individual customer forcing them to cope with limited business process support from the application.
  3. Multi-Tenant with Custom Schemas - While this approach offers a wide range of configuration options for the customer, it limits the vendor's ability to maintain one core code base and/or forces the vendor to introduce customer specific complexity into the master code line potentially impacting performance.
ref:

Convert your web application to a multi-tenant SaaS solution - http://www.ibm.com/developerworks/cloud/library/cl-multitenantsaas/

An Open Multi-Tenant Architecture to Leverage SMEs - http://www.europeanjournalofscientificresearch.com/ISSUES/EJSR_65_4_14.pdf

A Multi-Tenant Architecture for Business Process Execution - http://people.apache.org/~hemapani/research/papers/ode-multi-tenancy.pdf

Securing Multi-Tenancy and Cloud Computing - http://www.juniper.net/us/en/local/pdf/whitepapers/2000381-en.pdf

SaaS strategies for Software Delivery - http://msdn.microsoft.com/en-us/library/aa479069.aspx

AngularJS - OpenSource JavaScript Framework

AngularJS is an open-source JavaScript framework. Its goal is to augment browser-based applications with Model–View–Controller (MVC) capability, reduce the amount of JavaScript needed to make web applications functional. These type of apps are also known as Single-Page Applications.

The Philosophy of Angular:


Angular is built around the belief that declarative programming is better than imperative programming when it comes to building UIs and wiring software components together, while imperative code is excellent for expressing business logic.


Design goals:

  1. Decouple DOM manipulation from app logic. This improves the testability of the code.
  2. Regard app testing as equal in importance to app writing. Testing difficulty is dramatically affected by the way the code is structured.
  3. Decouple the client side of an app from the server side. This allows development work to progress in parallel, and allows for reuse of both sides.
  4. Guide developers through the entire journey of building an app: from designing the UI, through writing the business logic, to testing.
  5. Make common tasks trivial and difficult tasks possible.
Notable Features:
  1. Two Way Data-Binding
  2. Templates
  3. MVC
  4. Dependency Injection
  5. Derivatives
Notable Angular Directives:
  1. ng-repeat: Instantiate an element once per item from a collection.
  2. ng-show & ng-hide: Conditionally show or hide an element, depending on the value of a boolean expression.
  3. ng-switch: Conditionally instantiate one template from a set of choices, depending on the value a selection expression.

ref:


AngularJS Home Page - http://angularjs.org/


AngularUI Home Page - http://angular-ui.github.com/


AngularJS Wiki - http://en.wikipedia.org/wiki/AngularJS



Developing an AngularJS Application with HTML5 Socket.IO - http://www.html5rocks.com/en/tutorials/frameworks/angular-websockets/