37
A Dropbox-like Personal Cloud for OpenStack Swift Pedro García López Adrián Moreno Martínez Cristian Cotes González OpenStack Summit May 2014 - Atlanta

A Dropbox-like Personal Cloud for OpenStack Swift...A Dropbox-like Personal Cloud for OpenStack Swift Pedro García López Adrián Moreno Martínez Cristian Cotes González OpenStack

  • Upload
    others

  • View
    16

  • Download
    0

Embed Size (px)

Citation preview

Page 1: A Dropbox-like Personal Cloud for OpenStack Swift...A Dropbox-like Personal Cloud for OpenStack Swift Pedro García López Adrián Moreno Martínez Cristian Cotes González OpenStack

A Dropbox-like Personal Cloud for OpenStack Swift

Pedro García López Adrián Moreno Martínez Cristian Cotes González

OpenStack Summit May 2014 - Atlanta

Page 2: A Dropbox-like Personal Cloud for OpenStack Swift...A Dropbox-like Personal Cloud for OpenStack Swift Pedro García López Adrián Moreno Martínez Cristian Cotes González OpenStack

CloudSpaces project ● Open Service Platform for the Next Generation

of Open Personal Clouds: http://cloudspaces.eu

● Objectives:

o Interoperability and privacy

● Partners:

o URV, Eurecom, EPFL, eyeOS (Web Desktop), TISSAT (cloud provider), NEC.

Page 3: A Dropbox-like Personal Cloud for OpenStack Swift...A Dropbox-like Personal Cloud for OpenStack Swift Pedro García López Adrián Moreno Martínez Cristian Cotes González OpenStack

Personal Cloud We understand it as… ● Storage

● Synchronization

● Sharing

Page 4: A Dropbox-like Personal Cloud for OpenStack Swift...A Dropbox-like Personal Cloud for OpenStack Swift Pedro García López Adrián Moreno Martínez Cristian Cotes González OpenStack

Our motivations

● Not a cloud open-source solution available StackSync and OpenStack

● Users lack control of their data Privacy, Client-side encryption, secure sharing…

● Vendor lock-in Interoperability

Page 5: A Dropbox-like Personal Cloud for OpenStack Swift...A Dropbox-like Personal Cloud for OpenStack Swift Pedro García López Adrián Moreno Martínez Cristian Cotes González OpenStack

Big picture

Page 6: A Dropbox-like Personal Cloud for OpenStack Swift...A Dropbox-like Personal Cloud for OpenStack Swift Pedro García López Adrián Moreno Martínez Cristian Cotes González OpenStack

First stage ● Metadata separated from data → StackSync Server → OpenStack Swift

Data flow

Metadata DB

Metadata flow

Desktop client

OpenStack Swift StackSync Server

Page 7: A Dropbox-like Personal Cloud for OpenStack Swift...A Dropbox-like Personal Cloud for OpenStack Swift Pedro García López Adrián Moreno Martínez Cristian Cotes González OpenStack

StackSync Server StackSync Server

Second stage ● MOM (RabbitMQ) → push notifications

● Elastic sync protocol

Data flow

Metadata DB

Metadata flow (Push)

Desktop client

OpenStack Swift

StackSync Server

RabbitMQ

Page 8: A Dropbox-like Personal Cloud for OpenStack Swift...A Dropbox-like Personal Cloud for OpenStack Swift Pedro García López Adrián Moreno Martínez Cristian Cotes González OpenStack

Current stage ● API as a Swift’s proxy

module ● Website ● Android app

Data flow

Metadata DB

Metadata flow (push)

Desktop client

OpenStack Swift RabbitMQ

StackSync API

Mobile client

Metadata flow

StackSync Server StackSync Server StackSync Server

Page 9: A Dropbox-like Personal Cloud for OpenStack Swift...A Dropbox-like Personal Cloud for OpenStack Swift Pedro García López Adrián Moreno Martínez Cristian Cotes González OpenStack

Lifecycle and architecture

Page 10: A Dropbox-like Personal Cloud for OpenStack Swift...A Dropbox-like Personal Cloud for OpenStack Swift Pedro García López Adrián Moreno Martínez Cristian Cotes González OpenStack

Lifecycle

Client 1

OpenStack Swift RabbitMQ

StackSync Server StackSync Server StackSync Server

Client 2

Client 3

Page 11: A Dropbox-like Personal Cloud for OpenStack Swift...A Dropbox-like Personal Cloud for OpenStack Swift Pedro García López Adrián Moreno Martínez Cristian Cotes González OpenStack

Data flow

Metadata DB

Metadata flow (push)

Desktop client

OpenStack Swift RabbitMQ

StackSync API

Mobile client

Metadata flow StackSync Server

Desktop client

Page 12: A Dropbox-like Personal Cloud for OpenStack Swift...A Dropbox-like Personal Cloud for OpenStack Swift Pedro García López Adrián Moreno Martínez Cristian Cotes González OpenStack

Tasks

● File system watcher

● Chunking, compression, and encryption

Page 13: A Dropbox-like Personal Cloud for OpenStack Swift...A Dropbox-like Personal Cloud for OpenStack Swift Pedro García López Adrián Moreno Martínez Cristian Cotes González OpenStack

Features ● File versioning ● File sharing ● OS integration

● Overlay icons ● Notifications

Page 14: A Dropbox-like Personal Cloud for OpenStack Swift...A Dropbox-like Personal Cloud for OpenStack Swift Pedro García López Adrián Moreno Martínez Cristian Cotes González OpenStack

Data flow

Metadata DB

Metadata flow (push)

Desktop client

OpenStack Swift RabbitMQ

StackSync API

Mobile client

Metadata flow StackSync Server

StackSync server

Page 15: A Dropbox-like Personal Cloud for OpenStack Swift...A Dropbox-like Personal Cloud for OpenStack Swift Pedro García López Adrián Moreno Martínez Cristian Cotes González OpenStack

Operations

● getAccount

● getChanges

● commit

● …

{ "is_folder":false, "mimetype":"application/pdf", "status":"NEW", "parent_file_id":73990274, "file_id":-534824681, "path":"/documents/", "filename":"StackSync_Guide.pdf", "checksum":-2678858962222278590, "user":"John Doe", "client_modified":"2013-03-08 10:36:41.997", "size":775412, "version":1, "server_modified":"2013-03-08 10:36:41.997" }

Page 16: A Dropbox-like Personal Cloud for OpenStack Swift...A Dropbox-like Personal Cloud for OpenStack Swift Pedro García López Adrián Moreno Martínez Cristian Cotes González OpenStack

Syncing conflicts ● Two users modify the same file at the same time ● Whichever version is processed first wins ● The loser creates a conflicted copy of the file with his

changes

StackSync Server User 1

User 2

Page 17: A Dropbox-like Personal Cloud for OpenStack Swift...A Dropbox-like Personal Cloud for OpenStack Swift Pedro García López Adrián Moreno Martínez Cristian Cotes González OpenStack

Workspace ● Represents the relation between files and users ● Every user has its own workspace ● Every shared folder has its workspace ● A workspace maps into a Swift container

Workspace 2

Shared workspace

Workspace 1

Container 2

Shared container

Container 1 OpenStack Sw

ift

User 1

User 2

Page 18: A Dropbox-like Personal Cloud for OpenStack Swift...A Dropbox-like Personal Cloud for OpenStack Swift Pedro García López Adrián Moreno Martínez Cristian Cotes González OpenStack

Encryption settings Plain

Server-side encryption

Client-side encryption

Page 19: A Dropbox-like Personal Cloud for OpenStack Swift...A Dropbox-like Personal Cloud for OpenStack Swift Pedro García López Adrián Moreno Martínez Cristian Cotes González OpenStack

Swift mappings StackSync OpenStack Swift

user user

workspace

installation tenant

container

admin tenant admin

file N chunks

Page 20: A Dropbox-like Personal Cloud for OpenStack Swift...A Dropbox-like Personal Cloud for OpenStack Swift Pedro García López Adrián Moreno Martínez Cristian Cotes González OpenStack

Sharing process 1. Send share proposal 2. Notify the addressee 3. Proposal gets accepted 4. Create container and

set up ACL X-Container-Read and X-Container-Write

User 1 User 2

StackSync Server

OpenStack Swift

Page 21: A Dropbox-like Personal Cloud for OpenStack Swift...A Dropbox-like Personal Cloud for OpenStack Swift Pedro García López Adrián Moreno Martínez Cristian Cotes González OpenStack

Data flow

Metadata DB

Metadata flow (push)

Desktop client

OpenStack Swift RabbitMQ

StackSync API

Mobile client

Metadata flow StackSync Server

RabbitMQ

Page 22: A Dropbox-like Personal Cloud for OpenStack Swift...A Dropbox-like Personal Cloud for OpenStack Swift Pedro García López Adrián Moreno Martínez Cristian Cotes González OpenStack

RabbitMQ

● Communication between clients and server

● Push notifications

● Load-balancing

● Multicast messages per workspace

Page 23: A Dropbox-like Personal Cloud for OpenStack Swift...A Dropbox-like Personal Cloud for OpenStack Swift Pedro García López Adrián Moreno Martínez Cristian Cotes González OpenStack

StackSync Server StackSync Server StackSync Server

Page 24: A Dropbox-like Personal Cloud for OpenStack Swift...A Dropbox-like Personal Cloud for OpenStack Swift Pedro García López Adrián Moreno Martínez Cristian Cotes González OpenStack

Data flow

Metadata DB

Metadata flow (push)

Desktop client

OpenStack Swift RabbitMQ

StackSync API

Mobile client

Metadata flow StackSync Server

StackSync API

Page 25: A Dropbox-like Personal Cloud for OpenStack Swift...A Dropbox-like Personal Cloud for OpenStack Swift Pedro García López Adrián Moreno Martínez Cristian Cotes González OpenStack

StackSync API ● Located in the proxy’s pipeline

● Used by website & mobile clients

● Communicates with StackSync server to get metadata and authorization

● Activates when the X-StackSync-API header is set

Page 26: A Dropbox-like Personal Cloud for OpenStack Swift...A Dropbox-like Personal Cloud for OpenStack Swift Pedro García López Adrián Moreno Martínez Cristian Cotes González OpenStack

StackSync API Auth ● Module located before the API

● OAuth 1.0a implementation

● Sets the user information in the wsgi environment for the API

Page 27: A Dropbox-like Personal Cloud for OpenStack Swift...A Dropbox-like Personal Cloud for OpenStack Swift Pedro García López Adrián Moreno Martínez Cristian Cotes González OpenStack

GET /api/file/4688390 Header: X-StackSync-API: v1

Page 28: A Dropbox-like Personal Cloud for OpenStack Swift...A Dropbox-like Personal Cloud for OpenStack Swift Pedro García López Adrián Moreno Martínez Cristian Cotes González OpenStack

Performance

Page 29: A Dropbox-like Personal Cloud for OpenStack Swift...A Dropbox-like Personal Cloud for OpenStack Swift Pedro García López Adrián Moreno Martínez Cristian Cotes González OpenStack

Traffic overhead

Page 30: A Dropbox-like Personal Cloud for OpenStack Swift...A Dropbox-like Personal Cloud for OpenStack Swift Pedro García López Adrián Moreno Martínez Cristian Cotes González OpenStack

Push vs pull

Page 31: A Dropbox-like Personal Cloud for OpenStack Swift...A Dropbox-like Personal Cloud for OpenStack Swift Pedro García López Adrián Moreno Martínez Cristian Cotes González OpenStack

Server elasticity

Time (minutes)

Num

ber o

f ins

tanc

es N

umber of requests

Page 32: A Dropbox-like Personal Cloud for OpenStack Swift...A Dropbox-like Personal Cloud for OpenStack Swift Pedro García López Adrián Moreno Martínez Cristian Cotes González OpenStack

Using StackSync

Page 33: A Dropbox-like Personal Cloud for OpenStack Swift...A Dropbox-like Personal Cloud for OpenStack Swift Pedro García López Adrián Moreno Martínez Cristian Cotes González OpenStack

Deployment scenarios

OpenStack Swift

StackSync Server

OpenStack Swift OpenStack Swift

Private Hybrid Public

On premises

On cloud provider

StackSync Server StackSync Server

Page 34: A Dropbox-like Personal Cloud for OpenStack Swift...A Dropbox-like Personal Cloud for OpenStack Swift Pedro García López Adrián Moreno Martínez Cristian Cotes González OpenStack

Current deployments

● Universitat Rovira i Virgili

● Tissat (Data center)

● Rediris (Spanish university network)

Page 35: A Dropbox-like Personal Cloud for OpenStack Swift...A Dropbox-like Personal Cloud for OpenStack Swift Pedro García López Adrián Moreno Martínez Cristian Cotes González OpenStack

Community

● Available for:

● Documentation available at stacksync.org

● Easy to deploy for swifters

Page 36: A Dropbox-like Personal Cloud for OpenStack Swift...A Dropbox-like Personal Cloud for OpenStack Swift Pedro García López Adrián Moreno Martínez Cristian Cotes González OpenStack

Conclusions ● StackSync is a ready-to-use Personal Cloud

for OpenStack Swift

● What’s next ● Advanced privacy features

● Interoperability

● iOS and OS X clients

Page 37: A Dropbox-like Personal Cloud for OpenStack Swift...A Dropbox-like Personal Cloud for OpenStack Swift Pedro García López Adrián Moreno Martínez Cristian Cotes González OpenStack

Thanks for your attention!

github.com/stacksync

stacksync.org