Hi All,
just wanna report I committed a poc for the multi (nested) container
scenario into my sandbox. The poc (see readme below) shows a tenant
aware useradmin (with multitenant storage) at the platform level. The
tenantmanager (also a tenant aware) spawns a nested container for each
tenant and publishes only(!) the relevant useradmin for that admin
into this container along with a global logservice and some bundles
that are 'tenant specific'.
Pros:
* relatively easy as-full-as-you-want isolation a tenants
* a nice 'tenant lifecycle' and layer of indirection for manageability
* tenant aware code only at platform layer. app developer need not worry
* ...?
Cons:
* heavy(?) I got OOM at 500 tenant with 256M memory in poc setup
* portable to other OSGi impl (?) Should be but needs factory.
* ...?
Obviously this is just a first poc and needs a lot more testing but in
the meanwhile I'd like to hear your thoughts, pros and cons. I'd
also like to create a poc using framework hooks to so we can properly
evaluate the two solutions.
Regards,
Bram
--------------------------------
PoC for nested Tenant Management
--------------------------------
basic design:
* TenantManager is a tenant aware service that
1) spawns a new osgi container for each tenant registered
2) delegates platform packages to the tenant container
3) proxies (only relevant!) services (log/useradmin) to the tenant
4) monitors container to take action (eg refresh)
5) TODO: publishes tenant services in parent container (eg a REST
service?)
* This UserAdmin FS storage is now tenant aware that
1) create a storage dir per tenant (based on id)
2) leverages PAX user admin through extender pattern
-> useradmin per tenant
-> application dev model in tact
implementation notes/todos:
* set of delegated packages is static (should be extendable)
* list proxied services is static (should be extendable)
* currently deploys four bundles into each tenant container
- Apache Felix Dependency Manager;
- Apache Felix Dependency Manager Shell
- Apache Felix Shell Service
- Apache Felix Remote Shell
- Amdatu UserAdmin Commands
* currently proxies global logservice into each tenant container
* currently proxies relevant useradmin into tenant container
* JVM with Xmx=256 went OOM at about 500 tenants
1) Starting this up:
* Copy the amdatu-tm folder into devserver layout
* Copy startup from this folder to devserver root
* startup
2) inside parent container
-> tmcreate 245
tmcreate <tenantId> <tenantName>
-> tmcreate 245 jan
-> tmlist
'123' - 11
'245' - jan
-> tmdelete 123
Tenant deleted: 123
note: use integers for tenantid as it is used to register a remote
shell on that port
note: refresh in the parent container will restart all tenants
3) Inside tenant container
* telnet 127.0.0.1 245
Felix Remote Shell Console:
============================
-> ps
START LEVEL 1
ID State Level Name
[ 0] [Active ] [ 0] System Bundle (3.0.6)
[ 1] [Resolved ] [ 1] Apache Felix Dependency Manager (3.0.0.SNAPSHOT)
[ 2] [Active ] [ 1] Apache Felix Dependency Manager Shell
(3.0.0.SNAPSHOT)
[ 3] [Active ] [ 1] Apache Felix Shell Service (1.4.2)
[ 4] [Active ] [ 1] Apache Felix Remote Shell (1.1.2)
[ 5] [Active ] [ 1] Amdatu UserAdmin Commands (0.1.0.SNAPSHOT)
-> uacreate 123
User created: 123
-> ualist
'123
-> uadelete 123
User deleted: 123
->
On Fri, Dec 10, 2010 at 3:25 PM, Bram de Kruijff <bdekruijff at gmail.com>
wrote:
> Hi Ivo,
>
> Good points, thanks. Please feel free to add things on the wiki. I'm on
> mobile atm so just two quicks notes:
>
> I would not call the management server the provisioning server as
> provisioning is only part of its responsibilities. On the other hand I do
> like the notion of "provisioning a tenant onto a node"!
>
> The data sharing use case I would aproach as a data (web) service. Either
> owned by one or even 3rd party. This removes the data sharing at the
> platform level requirement, which I fear would be a swamp of complexity. At
> the same time it opens up the data for reuse for any consumer on the web, so
> its much more RESTfull.
>
> Enjoy the weekend!
> Regards,
> Bram
>
> On Dec 10, 2010 2:57 PM, "Ivo Ladage-van Doorn"
> <Ivo.Ladage-vanDoorn at gxsoftware.com> wrote:
>> Hi Bram,
>>
>> I think this is a good starting point for the multi-tenancy discussion.
>> And of course I have some remarks/additions:
>>
>> Configuration, Management - I would think that the application should
>> support configuration per tenant. For example, if one tenant decides to
>> reduce the session timeout to 5 minutes, it should not affect the other
>> tenants. Some configuration on the other hand might be shared among all
>> tenants hosted by the same application and if so, should be read-only to
>> them as changing it would affect other tenants.
>> Regarding management; I think tenant management should be separated from
>> the Amdatu runtime and managed by the provisioning server. The provisioning
>> server needs to be tenant aware, as it should decide what tenants run on
>> what nodes and if tenants run in isolates OSGi containers and/or VMs
>> (dependent on their contract for example; gold contract = isolated container
>> and VM). As a consequence a Tenant in the Amdatu runtime is read-only; it is
>> managed by the provisioning server (which may, and probably will, run on the
>> Amdatu platform).
>>
>> Sharing information - Some tenants will want to share content. Think of
>> big publishers with multiple magazines. Each magazine would be a tenant, but
>> they still want to share articles with each other. There could even be
>> authorization involved; one tenant adds articles while other tenants can
>> only read them and incorporate them into their website, but not change them.
>>
>> Licensing - Multiple tenants hosted by the same application may have
>> different licenses. Dependent on their license, some
>> services/functionality/content will or will not be available to them.
>>
>> Logging - I think logging should be separated, as each tenant would want
>> to see only log entries that are relevant to them. More importantly, log
>> files may contain information that are absolutely forbidden to be seen by
>> others (as we experienced with some customers; we were not even allowed to
>> read log files at all, they first has to be censured)
>>
>>
>> Regards, Ivo
>>
>> -----Original Message-----
>> From: amdatu-developers-bounces at amdatu.org
>> [mailto:amdatu-developers-bounces at amdatu.org] On Behalf Of Bram de Kruijff
>> Sent: vrijdag 10 december 2010 13:22
>> To: amdatu-developers at amdatu.org
>> Subject: [Amdatu-developers] Multi-tenancy (and more) design
>>
>> Hi all,
>>
>> I just created a mechanisms section under architecture on the wiki and
>> have put down an initial analysis on multi-tenancy. IMHO we must
>> address these concerns asap and I would appreciate you feedback and
>> contributions :)
>>
>> Regards,
>> Bram
>>
>> ps. http://www.amdatu.org/confluence/display/Amdatu/Principle+Mechanisms
>> ps. Working on a proof of concept for embedded containers. In a
>> sandbox near you soon.
>> _______________________________________________
>> Amdatu-developers mailing list
>> Amdatu-developers at amdatu.org
>> http://lists.amdatu.org/mailman/listinfo/amdatu-developers
>>
>> _______________________________________________
>> Amdatu-developers mailing list
>> Amdatu-developers at amdatu.org
>> http://lists.amdatu.org/mailman/listinfo/amdatu-developers
>