3. So what's the ruckus about?
3
Months
3
Apps
0
Buffer
Grady Cloud
GRADY = Grails Rapid Application
Development for Ymens
4. But what is a cloud ready application?
SaaS
Online
Internet
Subscription
based
Automated
Updates
Recurring
Billing
Configurable
Efficient Scalable
5. And which are the typical cloud challenges?
Multi-tenancy
User Identity
Management
Single Sign
On
Access
Management
Network
Dependence
Integration &
Interoperability
Data Mobility
& Portability
Data Privacy
& Security
Legacy
Migration
6. So what is our “simple” answer?
Plugins
Bootstrap
[Magic]
Groovy
Grails GRADY
Rapid Development framework, based on open
source technologies seamlessly glued together
7. How do we isolate tenant data?
Separate DB Shared
Schema
Separate
Schema
Multi
Tenant
Single DB
Plugin
Multi Tenancy: Data Architecture
8. How do we manage identities?
Authentication Spring Security
Authorization Spring Security
Account
Management Spring Security
Audit Logging Hibernate Envers
The 4 A’s of
Cloud Identity
9. Much ado about nothing? We did it again!
4th of October: official launch date
Smarter! Better! Faster!
Adopt Grady company wide
Core to our Cloud Broker Platform
Foster Innovation through Rapid Prototyping
No silver bullet. Beware of the tradeoffs!
3
Months
3
Apps
0
Buffer
Grady Cloud
10. And we are…
þ A young team with mixed backgrounds
using an heterogeneous tech stack.
þ An agile team who believes in an iterative,
incremental and sustained pace of
development.
þ A self-organizing team oriented towards
products, customers and innovation.
þ A growing team.
And hiring ☺
11. Before I go
@Audited
@MultiTenant
class Product {
enum Type {
SUBCRIPTION, USAGE, TRIAL
}
String name
String description
String category
Float price
Type type
static mapping = {
}
static constraints = {
name unique: 'tenantId', nullable: false, blank: false, maxSize: 50
category nullable: false, blank: false, maxSize: 50
price min: 0.0f, scale: 3
type inList: [Type.SUBCRIPTION, Type.USAGE, Type.TRIAL]
description blank: true, widget: 'textarea'
tenantId display: false
}
}
13. Grails & Groovy
q Grails:
þ OSS, Groovy-based high-productivity framework inspired by Ruby on
Rails and following the "coding by convention" paradigm
þ Grails applications can run in standard Java servlet containers.
q Groovy:
þ OOP language for the Java platform
þ Dynamic language with features similar to those of Python, Ruby, Perl,
and Smalltalk
þ Can be used as a scripting language for the Java Platform, is
dynamically compiled to Java Virtual Machine (JVM) bytecode, and
interoperates with other Java code and libraries.
15. Core Plugins
q Spring Security Core: Secure applications using the powerful
Spring Security library
þ Spring Security Configuration Info: Provides a basic UI to view the
security configuration
þ Spring Security LDAP: Support for LDAP and Active Directory
authentication
þ Spring Security OpenID: Support for OpenID authentication
q Hibernate Envers:
þ Plugin to integrate grails with Hibernate Envers
þ Easy Entity Auditing. All that you have to do is annotate your persistent
class or some of its properties, that you want to audit, with @Audited
q Multi Tenant Single DB:
16. Twitter Bootstrap & Less
q Bootstrap:
þ Developed by Twitter as a framework to encourage consistency across
internal tools
þ No.1 project on GitHub with 71,000+ stars and 26,000+ forks
þ The most popular HTML, CSS, and JS framework for developing
responsive, mobile first projects on the web
q Less:
þ CSS pre-processor, meaning that it extends the CSS language, adding
features that allow variables, mixins and functions
þ Make CSS that is more maintainable, themable and extendable
17. Multi Tenancy: Data Architecture
q Separate DB: Each tenant has its own set of data that remains logically isolated
from data that belongs to all other tenants.
þ Metadata associates each database with the correct tenant, and database security
prevents any tenant from accidentally or maliciously accessing other tenants' data.
q Separate Schema: House multiple tenants in the same database, with each
tenant having its own set of tables that are grouped into a schema created
specifically for the tenant.
þ When a customer first subscribes to the service, the provisioning subsystem creates a
discrete set of tables for the tenant and associates it with the tenant's own schema.
þ A significant drawback of the separate-schema approach is that tenant data is harder
to restore in the event of a failure. If each tenant has its own database, restoring a
single tenant's data means simply restoring the database from the most recent backup.
q Shared Schema: The same database and the same set of tables to host
multiple tenants' data.
þ A Tenant ID column associates every record with the appropriate tenant
þ The shared schema approach has the lowest hardware and backup costs, because it
allows you to serve the largest number of tenants per database server
þ However, it may incur additional development effort in the area of security, to ensure
that tenants can never access other tenants' data, even in the event of unexpected
bugs or attacks
18. Tradeoffs: No Silver Bullet
q Grails
þ Tight Coupling
þ Anti-patterns
þ (Some) Immature Plugins
q Twitter Bootstrap
þ A dark future where the entire web looks like the Bootstrap example
page
þ Heavy-handed, Prescriptive
19. Grady: Initial Goals
Requirement Description
Rapid Prototyping Quickly generate/implement a vertical prototype of the
application
Scaffolding Generate CRUD code up yo UI Layer
Dynamic Form Generation Generate/Render forms based on data model
Configuration Based Validation Validate input in forms based on configuration and data model
constraints
Support for Dictionaries Sets of predefined values to be reused across the application
Object Relational Mapping Map domain model to underlying persistence based on
configuration/convention
Support for Workflows Support for wizards and basic support for workflows
User Management Basic user management
Access Management Basic authorization
Authentication HTTP basic access authentication and Digest authentication
Reporting Built-in reporting capabilities
Flexible Data Model Flexible schema or schemaless persistence
21. So what's the ruckus about?
“Smarter. Faster. Better. These are today's words when talking about
business. And, about development too. Nowadays, we’re all in the cloud
and some of us have already faced a simple question without a simple
answer: how to build better apps faster? There are a multitude of
challenges arising when trying to achieve this ambitious goal while
maintaining a productive pace for delivery and innovating at the same time.
How do I isolate tenant data, how do I manage identities across federated
clouds, how can I migrate legacy apps, how do I ensure single sign on in
heterogeneous cloud environments (of course everything Smarter. Faster.
Better.) We now have a simple answer to some of these technical
questions: our own rapid development framework, based on open source
technologies seamlessly glued together, of course, for cloud-ready
applications - because this is what we do. We're inviting you to a practical
discussion on how the R&D department can play a major role in delivering
every business' goal: time to market. Smarter. Better. Faster.”
Vlad, R&D Monica, Marketing