I started the open source project simple-saas a few days ago, hosted at Google Code. The idea is to help my start-up processing times and provide a multi-language remote processing system with cloud computing in mind.
- Client/server software with JSON serialization with objects support. We use jsonpickle for this under python. Idea of any client communicate with any server. For example, PHP frontend communicating with a Python or Java server calling a service.
- No need to change anything on existing classes.
- Map&Reduce type of processing with less overhead.
- Objects are mapped in mapping servers running database software OctopusDbm with those mapping being in memory and therefore pretty fast. We mapp against application name, which can be any string you choose, defining domains in string, etc…
Last night I was in process of how to map the services and objects, so came up with the following design to connect to a server:
from simplesaas.client import Service myService = Service(sHostName, 'module.package.MyClass') client = myService.getClient(iClientId) print client.Name |
You can add any arguments and keyword arguments to the Service() instantiation and calling of method that the class and method on remote server needs. The module in the server just needs to be in the python path.
and this to connect without having to define a server to connect to:
from simplesaas.cloud import ServiceCloud myService = ServiceCloud('module.package.MyClass', sApp='myDomain:myApplication') client = myService.getClient(iClientId) print client.Name |
sApp is a string that can be anything, so we can define just application name or a combination of domain, application, language, etc…
The mapping server will have:
sApp => sHostName
The mapping will be included in mapping servers with a script and calling Octopus data operations.
I thought about allowing possibility of not defining an application and client will connect to same host where client is. But I think is not good design since later on, when that application is taken to a distributed environment then code must be changed. You can define a constant in your environment to define, say, a “main” application with a constant or similar.
There will be a config.py file in the simple-saas package installation where we define:
- Tuple with list of mapping servers
- OctopusDbm user, password, port and environment
You can define just one OctopusDbm server or two which could be replicated.
Let me know what you think about this design, flaws, things should be different, etc…
Tonight will go through the map and reduce functionalities., probably focused on patterns of design. First pattern will be getting a list and each server processing a sublist of that list, being able to make requests at any time and later on getting results.
Tweet This Post
Plurk This Post
Digg This Post
Ping This Post

Recent Comments