Return-Path: X-Original-To: apmail-incubator-cloudstack-dev-archive@minotaur.apache.org Delivered-To: apmail-incubator-cloudstack-dev-archive@minotaur.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 4EE04DC1A for ; Wed, 15 Aug 2012 06:05:05 +0000 (UTC) Received: (qmail 66117 invoked by uid 500); 15 Aug 2012 06:05:05 -0000 Delivered-To: apmail-incubator-cloudstack-dev-archive@incubator.apache.org Received: (qmail 65656 invoked by uid 500); 15 Aug 2012 06:05:04 -0000 Mailing-List: contact cloudstack-dev-help@incubator.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: cloudstack-dev@incubator.apache.org Delivered-To: mailing list cloudstack-dev@incubator.apache.org Received: (qmail 65621 invoked by uid 99); 15 Aug 2012 06:05:03 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 15 Aug 2012 06:05:03 +0000 X-ASF-Spam-Status: No, hits=-5.0 required=5.0 tests=RCVD_IN_DNSWL_HI,SPF_HELO_PASS,SPF_PASS X-Spam-Check-By: apache.org Received-SPF: pass (athena.apache.org: domain of kelven.yang@citrix.com designates 66.165.176.89 as permitted sender) Received: from [66.165.176.89] (HELO SMTP.CITRIX.COM) (66.165.176.89) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 15 Aug 2012 06:04:56 +0000 X-IronPort-AV: E=Sophos;i="4.77,771,1336363200"; d="scan'208";a="34691848" Received: from sjcpmailmx02.citrite.net ([10.216.14.75]) by FTLPIPO01.CITRIX.COM with ESMTP/TLS/RC4-MD5; 15 Aug 2012 02:04:35 -0400 Received: from SJCPMAILBOX01.citrite.net ([10.216.4.72]) by SJCPMAILMX02.citrite.net ([10.216.14.75]) with mapi; Tue, 14 Aug 2012 23:04:35 -0700 From: Kelven Yang To: "cloudstack-dev@incubator.apache.org" Date: Tue, 14 Aug 2012 23:04:32 -0700 Subject: [Discuss] CloudStack architecture to a loosely-coupled component oriented distributed architecture Thread-Topic: [Discuss] CloudStack architecture to a loosely-coupled component oriented distributed architecture Thread-Index: Ac16q9e23Udub4czSp6HHipODFfqxg== Message-ID: In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: user-agent: Microsoft-MacOutlook/14.2.3.120616 acceptlanguage: en-US Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-Virus-Checked: Checked by ClamAV on apache.org I know everyone is recently busy and excited for the first Apache release of CloudStack, hopefully we still have some bandwidth for discussions about architecture fine-tunes, here is one for discussion. Conceptually, current CloudStack works very much like an JaveEE application server container, given the scale of all our current cloud deployments with CloudStack, I think CloudStack has done a great job. Running as an application server container, it brings us a lot of benefits like easy to deploy, efficient resource utilization, etc, but in the mean time, as modules inside a container are too easy to be involved tightly, over time, as we add more and more features, the complexity of overall system increases dramatically. Moving forward, it makes a lot of sense to reshape CloudStack from a module container to be a component oriented distributed platform. Component Component is an independent deployment unit in a distributed environment(i.e., CloudStack), it usually runs as a separated process, can be independently scaled and has independent communication endpoint. It should have simple bindings to the distributed environment instead of requiring a complex container, to communicate with other components in the system, it should use bi-directional principal for loose-coupling and service-oriented, which is, using light-weight messaging event notification in one direction and service-oriented interaction at another direction. Module Module is a logic software unit that encapsulates software functions with well defined programming interface, a component contains one or more software modules Component Service Software service that is provided at component level, usually in shape of web service or REST-ful service Messaging A process for components to notify each other by exchanging messaging events Messaging event A package of information that is uni-casted or broadcasted to the destination component(s) Service discovery A process for component to discover services and endpoint bindings within the environment, it could be either through a directory service provided at infrastructure level or through auto-discovery Under component oriented principal, at high level CloudStack core can be fine-tuned to a number of (not limited to) components API component Implements CloudStack API, it also initiates logic orchestration flows (i.e., deploy a VM) which will be notified and picked up in Orchestration engine component Orchestration Engine component This components is the heart to drive all async-flows currently active in the system, it orchestrates high-level flow through messaging among networking/storage/compute components. Data service component This components provides the data service for objects within the Cloud. Networking component A component to implement networking provisioning Storage Component A component to implement storage provisioning Compute Component A component to implement hypervisor VM provisioning Fabric Monitoring Component A component dedicated for monitoring on fabric resources, for example, monitoring of hypervisor host status =20 Fabric Admin Component A component that implements fabric resource administration. Service Framework Component (module?) A component(or a module inside Orchestration Engine?) to provide service to launch component service in a VM and auto-scale the component service. At middleware level, we will need a messaging event delivery platform and middleware level synchronization system, possible candidates could be Redis and Apache ZooKeeper. Kelven