ZStack v2.0.2 release

Hello everyone, I am Yongkang You, the COO of ZStack. Today I am happy to announce that ZStack v2.0.2 is released.

Read more >>

ZStack v1.3 release

Hello everyone, I am Frank Zhang, the architect of ZStack. Today I am happy to announce that ZStack v1.3 is released.

Read more >>

ZStack v1.2 release

Hello everyone, I am Frank Zhang, the architect of ZStack. Today I am happy to announce that ZStack v1.2 is released.

Read more >>

ZStack v1.1 release

Hello everyone, I am Frank Zhang, the architect of ZStack. Today I am happy to announce that ZStack v1.1 is released.

New Features And Enhancements

Installation And Upgrade

1. Ansible Optimization

In this version, we create customized deployers for all ZStack agents(i.e. kvmagent, backup storage agent) directly using Ansible SDK, instead of regular Ansible playbook YAML files. As the result, the speed of agent deployment gets significantly improved, because the deployer that is a Python application will try best to avoid unnecessary time-costing steps such as accessing YUM repo; the logging also gets better, each task will post messages to a logging URL before and after execution, and the error message will clearly state the error instead of flooding out all tasks status, which regular Ansible playbook YAML files normally do.

2. Console Proxy APIs

Two new APIs are added for console proxy, ReconnectConsoleProxyAgent and QueryConsoleProxyAgent.

Users can use ReconnectConsoleProxyAgent to redeploy console proxy agents:

        >>>ReconnectConsoleProxyAgent 

or use QueryConsoleProxyAgent to query agents' status:

       >>>QueryConsoleProxyAgent 

3. API Timeout Management

As ZStack consists of a lot of microservices which communicate with each other through async-messages, it's very hard to control API timeout because the API has no idea about internal messages entailed by itself. In this version, we add a central API timeout management framework that can connect an API to all entailed internal messages and HTTP requests, and that can propagate the API's timeout to the descendants. All APIs have default configurations, users can change a configuration by editing the zstack.properties file, for example:

    ApiTimeout.org.zstack.header.image.APIAddImageMsg= org.zstack.header.storage.backup.DownloadImageMsg, org.zstack.storage.backup.sftp.SftpBackupStorageCommands$DownloadCmd, org.zstack.storage.ceph.backup.CephBackupStorageBase$DownloadCmd; 6h

This example changes the timeout of API org.zstack.header.image.APIAddImageMsg to six hours. However, this way is discouraged. In 1.2 version, we will allow users to configure APIs' timeout through a new API.

4. Garbage Collector

In this version, the VM related garbage collectors are enabled. Users can destroy a VM anytime no matter the connection status of the host. For example, you can delete a VM even the network connection to the host where the VM is running is lost. The garbage collector will save user operations which cannot be completed in current situation and re-execute them once the host's network connection recovers. The garbage collector can be triggered by time-based poll and events, for example, a host reconnect event and host delete event can both trigger a VM deleting garbage collector.

5. 15M Tiny Tryout Image

A new 15 tiny image is ready for quickly try out creating VMs. The image supports runtime attaching/detaching volumes and networks. The ACPID daemon is also included so you can gracefully shutdown a VM. You can download the image from:

    http://download.zstack.org/templates/zstack-image-1.2.qcow2

6. New Virtual Router Image

The virtual router image is upgraded to 1.1 version, you can download it from:

    http://download.zstack.org/templates/zstack-virtualrouter-1.1.0.qcow2

NOTE: Users still using the old 0.9 version are not necessary to upgrade. However, we suggest all new users using the new version.

7. Installation

You can install the 1.1 release by:

    wget http://download.zstack.org/releases/1.1/1.1.0/0331/zstack-installer-1.1.0-0331.bin -O zstack-installer-1.1.0.bin
    bash zstack-installer-1.1.0.bin

8. Upgrade

To upgrade your ZStack to 1.1, do:

    wget http://download.zstack.org/releases/1.1/1.1.0/0331/zstack-installer-1.1.0-0331.bin -O zstack-installer-1.1.0.bin
    bash zstack-installer-1.1.0.bin -u

9. Upgrade Virtual Router Provider To Flat Network Provider

If you are currently using a flat network with a previous ZStack version, you can upgrade the L3 network using the flat network provider so you won't need the virtual router VM anymore. Assume the UUID of your L3 network is 1a82c2691978476fa6cefa36bb9d4bfd, please follow the below steps:

1. Obtain the UUID of the virtual rotuer provider

    >>>QueryNetworkServiceL3NetworkRef l3NetworkUuid=1a82c2691978476fa6cefa36bb9d4bfd
    {
        "inventories": [
            {
                "l3NetworkUuid": "1a82c2691978476fa6cefa36bb9d4bfd",
                "networkServiceProviderUuid": "5d21ea0f39c04d6fb68cfaf5a37db4ad",
                "networkServiceType": "DNS"
            },
            {
                "l3NetworkUuid": "1a82c2691978476fa6cefa36bb9d4bfd",
                "networkServiceProviderUuid": "5d21ea0f39c04d6fb68cfaf5a37db4ad",
                "networkServiceType": "DHCP"
            }
        ],
        "success": true
    }

2. Detach the virtual router provider from the L3 network

        >>>DetachNetworkServiceFromL3Network  l3NetworkUuid=1a82c2691978476fa6cefa36bb9d4bfd networkServices='{"5d21ea0f39c04d6fb68cfaf5a37db4ad":["DHCP","DNS"]}'
         {
             "inventory": {
                 "createDate": "Jan 30, 2016 3:01:03 PM",
                 "dns": [
                     "8.8.8.8"
                 ],
                 "ipRanges": [
                     {
                         "createDate": "Jan 30, 2016 3:01:04 PM",
                         "endIp": "192.168.201.199",
                         "gateway": "192.168.200.1",
                         "l3NetworkUuid": "1a82c2691978476fa6cefa36bb9d4bfd",
                         "lastOpDate": "Jan 30, 2016 3:01:04 PM",
                         "name": "ipr-dk7p",
                         "netmask": "255.255.252.0",
                         "startIp": "192.168.201.180",
                         "uuid": "ec5fd87dd80243fdabeeace847c04427"
                     }
                 ],
                 "l2NetworkUuid": "9ec8cad681d1424fa7eda2447edae142",
                 "lastOpDate": "Jan 30, 2016 3:01:03 PM",
                 "name": "l3-etpz",
                 "networkServices": [],
                 "state": "Enabled",
                 "system": false,
                 "type": "L3BasicNetwork",
                 "uuid": "1a82c2691978476fa6cefa36bb9d4bfd",
                 "zoneUuid": "4a3a78b1b9f049948b79cf9e667f0af2"
             },
             "success": true
         }

the parameter networkServices is a map where the key is a networkServiceProviderUuid and the value is a list of networkServiceType, which you obtain in the step 1

3. Get the flat network provider UUID

        >>>QueryNetworkServiceProvider type=Flat
        {
            "inventories": [
                {
                    "attachedL2NetworkUuids": [
                        "9ec8cad681d1424fa7eda2447edae142"
                    ],
                    "createDate": "Jan 30, 2016 11:56:32 AM",
                    "description": "Flat Network Service Provider",
                    "lastOpDate": "Jan 30, 2016 11:56:32 AM",
                    "name": "Flat Network Service Provider",
                    "networkServiceTypes": [
                        "DHCP",
                        "Userdata"
                    ],
                    "type": "Flat",
                    "uuid": "17864f985e584a9ba4cd81de215212ce"
                }
            ],
            "success": true
        }

4. Get L2 UUID for the L3 network

        >>>QueryL3Network fields=l2NetworkUuid, uuid=1a82c2691978476fa6cefa36bb9d4bfd
        {
            "inventories": [
                {
                    "l2NetworkUuid": "9ec8cad681d1424fa7eda2447edae142"
                }
            ],
            "success": true
        }

5. Attach the flat network provider to the L2 network

       >>>AttachNetworkServiceProviderToL2Network l2NetworkUuid=9ec8cad681d1424fa7eda2447edae142 networkServiceProviderUuid=17864f985e584a9ba4cd81de215212ce
       {
           "inventory": {
               "attachedL2NetworkUuids": [
                   "9ec8cad681d1424fa7eda2447edae142"
               ],
               "createDate": "Jan 30, 2016 11:56:32 AM",
               "description": "Flat Network Service Provider",
               "lastOpDate": "Jan 30, 2016 11:56:32 AM",
               "name": "Flat Network Service Provider",
               "networkServiceTypes": [
                   "DHCP",
                   "Userdata"
               ],
               "type": "Flat",
               "uuid": "17864f985e584a9ba4cd81de215212ce"
           },
           "success": true
       }

6. Attach the flat network provider to the L3 network

     >>>AttachNetworkServiceToL3Network l3NetworkUuid=1a82c2691978476fa6cefa36bb9d4bfd networkServices='{"17864f985e584a9ba4cd81de215212ce":["DHCP","Userdata"]}'
      {
          "inventory": {
              "createDate": "Jan 30, 2016 3:01:03 PM",
              "dns": [
                  "8.8.8.8"
              ],
              "ipRanges": [
                  {
                      "createDate": "Jan 30, 2016 3:01:04 PM",
                      "endIp": "192.168.201.199",
                      "gateway": "192.168.200.1",
                      "l3NetworkUuid": "1a82c2691978476fa6cefa36bb9d4bfd",
                      "lastOpDate": "Jan 30, 2016 3:01:04 PM",
                      "name": "ipr-dk7p",
                      "netmask": "255.255.252.0",
                      "startIp": "192.168.201.180",
                      "uuid": "ec5fd87dd80243fdabeeace847c04427"
                  }
              ],
              "l2NetworkUuid": "9ec8cad681d1424fa7eda2447edae142",
              "lastOpDate": "Jan 30, 2016 3:01:03 PM",
              "name": "l3-etpz",
              "networkServices": [
                  {
                      "l3NetworkUuid": "1a82c2691978476fa6cefa36bb9d4bfd",
                      "networkServiceProviderUuid": "17864f985e584a9ba4cd81de215212ce",
                      "networkServiceType": "DHCP"
                  },
                  {
                      "l3NetworkUuid": "1a82c2691978476fa6cefa36bb9d4bfd",
                      "networkServiceProviderUuid": "17864f985e584a9ba4cd81de215212ce",
                      "networkServiceType": "Userdata"
                  }
              ],
              "state": "Enabled",
              "system": false,
              "type": "L3BasicNetwork",
              "uuid": "1a82c2691978476fa6cefa36bb9d4bfd",
              "zoneUuid": "4a3a78b1b9f049948b79cf9e667f0af2"
          },
          "success": true
      }

7. Delete the virtual router VM

        >>QueryVirtualRouterVm
         {
             "inventories": [
                 {
                     "allVolumes": [
                         {
                             "createDate": "Jan 30, 2016 3:06:50 PM",
                             "description": "Root volume for VM[uuid:c5a966cb87d644649952daf683f89e26]",
                             "deviceId": 0,
                             "format": "qcow2",
                             "installPath": "/zstack_ps/rootVolumes/acct-36c27e8ff05c4780bf6d2fa65700f22e/vol-8eeaa9cb4c1045a2825f8815fed69d72/8eeaa9cb4c1045a2825f8815fed69d72.qcow2",
                             "lastOpDate": "Jan 30, 2016 3:06:59 PM",
                             "name": "ROOT-for-virtualRouter.l3.1a82c2691978476fa6cefa36bb9d4bfd",
                             "primaryStorageUuid": "4bff4e2d266f480ead596752d14ff3b5",
                             "rootImageUuid": "7bed05aa8ace4e5e8d6c55b284b66fb5",
                             "size": 467206656,
                             "state": "Enabled",
                             "status": "Ready",
                             "type": "Root",
                             "uuid": "8eeaa9cb4c1045a2825f8815fed69d72",
                             "vmInstanceUuid": "c5a966cb87d644649952daf683f89e26"
                         }
                     ],
                     "allocatorStrategy": "LeastVmPreferredHostAllocatorStrategy",
                     "applianceVmType": "VirtualRouter",
                     "clusterUuid": "10409d3e33b249c19746022930a541c7",
                     "cpuNum": 1,
                     "cpuSpeed": 2,
                     "createDate": "Jan 30, 2016 3:06:50 PM",
                     "defaultRouteL3NetworkUuid": "1a82c2691978476fa6cefa36bb9d4bfd",
                     "hostUuid": "415fa093b34e4a3d873368104b127115",
                     "hypervisorType": "KVM",
                     "imageUuid": "7bed05aa8ace4e5e8d6c55b284b66fb5",
                     "instanceOfferingUuid": "9cec7bd6324445a184351ffb7d32f970",
                     "lastHostUuid": "415fa093b34e4a3d873368104b127115",
                     "lastOpDate": "Jan 30, 2016 3:07:20 PM",
                     "managementNetworkUuid": "1a82c2691978476fa6cefa36bb9d4bfd",
                     "memorySize": 536870912,
                     "name": "virtualRouter.l3.1a82c2691978476fa6cefa36bb9d4bfd",
                     "platform": "Linux",
                     "publicNetworkUuid": "1a82c2691978476fa6cefa36bb9d4bfd",
                     "rootVolumeUuid": "8eeaa9cb4c1045a2825f8815fed69d72",
                     "state": "Running",
                     "status": "Connected",
                     "type": "ApplianceVm",
                     "uuid": "c5a966cb87d644649952daf683f89e26",
                     "vmNics": [
                         {
                             "createDate": "Jan 30, 2016 3:06:50 PM",
                             "deviceId": 0,
                             "gateway": "192.168.200.1",
                             "ip": "192.168.201.195",
                             "l3NetworkUuid": "1a82c2691978476fa6cefa36bb9d4bfd",
                             "lastOpDate": "Jan 30, 2016 3:06:50 PM",
                             "mac": "fa:4c:01:68:77:00",
                             "metaData": "7",
                             "netmask": "255.255.252.0",
                             "uuid": "c44e856aa88a42bc85ec30ce8c334c6c",
                             "vmInstanceUuid": "c5a966cb87d644649952daf683f89e26"
                         }
                     ],
                     "zoneUuid": "4a3a78b1b9f049948b79cf9e667f0af2"
                 }
             ],
             "success": true
         }

         >>>DestroyVmInstance uuid=c5a966cb87d644649952daf683f89e26
         {
             "success": true
         }

8. Reconnect all hosts

         >>>QueryHost
         {
             "inventories": [
                 {
                     "availableCpuCapacity": 7180,
                     "availableMemoryCapacity": 1997570048,
                     "clusterUuid": "4282fb61aa55458ea160de138e130298",
                     "createDate": "Jan 30, 2016 2:51:13 PM",
                     "hypervisorType": "KVM",
                     "lastOpDate": "Jan 30, 2016 3:03:20 PM",
                     "managementIp": "192.168.200.187",
                     "name": "host1",
                     "state": "Enabled",
                     "status": "Connected",
                     "totalCpuCapacity": 7182,
                     "totalMemoryCapacity": 2098233344,
                     "username": "root",
                     "uuid": "402f8304a50c410486e023512492316b",
                     "zoneUuid": "4a3a78b1b9f049948b79cf9e667f0af2"
                 },
                 {
                     "availableCpuCapacity": 14363,
                     "availableMemoryCapacity": 8321593344,
                     "clusterUuid": "10409d3e33b249c19746022930a541c7",
                     "createDate": "Jan 30, 2016 3:03:14 PM",
                     "hypervisorType": "KVM",
                     "lastOpDate": "Jan 30, 2016 3:03:52 PM",
                     "managementIp": "192.168.200.150",
                     "name": "host2",
                     "state": "Enabled",
                     "status": "Connected",
                     "totalCpuCapacity": 14364,
                     "totalMemoryCapacity": 8371924992,
                     "username": "root",
                     "uuid": "415fa093b34e4a3d873368104b127115",
                     "zoneUuid": "4a3a78b1b9f049948b79cf9e667f0af2"
                 }
             ],
             "success": true
         }

         >>>ReconnectHost uuid=402f8304a50c410486e023512492316b
         {
             "success": true
         }

         >>>ReconnectHost uuid=415fa093b34e4a3d873368104b127115
         {
             "success": true
         }
Read more >>

ZStack v1.0 release

Hello everyone, I am Frank Zhang, the architect of ZStack. Today I am happy to announce that ZStack v1.0 is released.

Read more >>

ZStack Zhaitech Cooperation

Cooperation with the machine learning startup -- Zhaitech

Read more >>

Announcing ZStack v0.9

Hello everyone, I am Frank Zhang, the architect of ZStack. Today I am happy to announce that ZStack v0.9 is released. In this release, ZStack introduces two new features:

Read more >>

ZStack v0.9 RC2 发布

ZStack 0.9 RC2版本今天发布,欢迎大家测试试用。在这个版本里,ZStack新加了两大重量级的功能:

Read more >>

Announcing ZStack v0.9 RC2

Hello everyone, I am Frank Zhang, the architect of ZStack. Today I am happy to announce that ZStack v0.9 is in the release cycle. Today we release 0.9 RC2 for you test. In this release, ZStack introduces two new features:

Read more >>

Announcing ZStack v0.8

Hello everyone, I am Frank Zhang, the architect of ZStack. Today I am happy to announce that ZStack v0.8 is released. In this release, ZStack introduces four new features:

Read more >>

Announcing ZStack v0.8 RC2

Hello everyone, I am Frank Zhang, the architect of ZStack. Today I am happy to announce that ZStack v0.8 is in the release cycle. Today we release 0.8 RC2 for you test. In this release, ZStack introduces four new features:

Read more >>

Announcing ZStack v0.7.1

Hello everyone, I am Frank Zhang, the architect of ZStack. Today I am happy to announce that ZStack v0.7.0.1 is released. This release contains two bugs fixes. Both for zstack-ctl, which may affect remote node installation on Ubuntu and DB upgrade if the database has password enabled.

Read more >>

Announcing ZStack v0.7

Hello everyone, I am Frank Zhang, the architect of ZStack. Today I am happy to announce that ZStack v0.7.0 is released.

Read more >>

Announcing ZStack v0.7 RC2

Hello everyone, I am Frank Zhang, the architect of ZStack. Today I am happy to announce that ZStack v0.7.0 is in the release cycle. Today we release 0.7.0 RC2 for you test.

Read more >>

Intel is ZStack's partner now

Today we are glad to announce that Intel, the world's largest and highest valued semiconductor chip maker, becomes ZStack's partner! Intel has been investigating many resources in the cloud computing, including help open source technology to create enterprise-ready IaaS infrastructure. ZStack, as its leading IaaS technology brings a lot of potential for future enterprise cloud, gets much attention from Intel and finally becomes Intel's partner in IaaS area.

Read more >>

ZStack Roadmap

Since the first release 0.6, we received a lot of feedback from our users and customers. Many people want us to post a roadmap so they can plan their production environment in line with our feature development process. Here I would like to share an initial version. Feedback is welcome(please post them in the comments).

Read more >>

Announcing ZStack v0.6.2 Release

Hello everyone, I am Frank Zhang, the architect of ZStack. Today I am happy to announce that ZStack v0.6.2 is released. In this version, we fixed a few bugs reported by users; a detailed bug list can be found at the end of the note.

Read more >>

Announcing ZStack v0.6.1 Release

Hello everyone, I am Frank Zhang, the architect of ZStack. Today I am happy to announce that ZStack v0.6.1 is released. In this version, we fixed a bug that may cause the failure of adding host in the certain circumstance. The installation script has been updated to the latest version.

Read more >>

Announcing ZStack v0.6 Release

Hello everyone, I am Frank Zhang, the architect of ZStack. Today I am happy to announce that ZStack v0.6 is released. ZStack is open source IaaS software aiming to solve issues of complexity, stability, scalability, and flexibility all of which are plaguing current IaaS software. As a new project in this field, ZStack learned a lot from IaaS pioneers and has built an architecture that tackles issues mentioned before.

Read more >>

Why Do We Need New IaaS Software Other Than OpenStack

Three years ago, when I was working on another IaaS software, my friend joked: "you guys are making a product killing IT administrators' job." I did think so then. In my opinion, enterprises could be liberated from boring tasks of maintaining old-fashion datacenters, by adopting IaaS technology and moving every underlying infrastructure to software-defined datacenter. Thereby, manpower is transferred to more revenue-driven work such as applications that drive companies' core business, and leaves only a few in operations team in charge of running the entire infrastructure. However, three years later, IaaS software has not impacted the administrators' job. Ironically, it has created a lot of new jobs. Nowadays, businesses adopting private clouds based on IaaS need not only an operations team to daily maintain their infrastructure, but also a dev team or a consultant company to maintain the IaaS software itself. This may be good for engineers, as people with such skills are easier to get good pay (searching OpenStack on online hiring websites will prove this), but sad for developers like me who are supposed to create something to relieve life.

Read more >>

ZStack's Scalability Secrets Part 1: Asynchronous Architecture

ZStack offers an architecture that 99% tasks are executed asynchronously, which is a key design that a single management node can manage hundreds of thousands of physical servers, millions of virtual machines, and handle tens of thousands of concurrent tasks.

Read more >>

ZStack's Scalability Secrets Part 2: Stateless Services

Every ZStack service is stateless. Making services high available and scaled out can be as easy as starting redundant service instances then load balancing them; furthermore, ZStack encloses all services into a single process called management node, which makes deploying and managing services extremely simple.

Read more >>

ZStack's Scalability Secrets Part 3: Lock-free Architecture

Lots of tasks in IaaS software need to execute in sequence; for example, when a task of starting a virtual machine is running, a stopping task of the same virtual machine must wait for the previous starting task to finish. On the other side, some tasks should be able to run in parallel; for example, 20 tasks of creating virtual machines on the same host can run simultaneously. Synchronization and fine-grained parallelization in a distributed system are not easy and usually require a distributed coordination software. Rising to the challenge, ZStack offers a lock-free architecture built on queues, allowing tasks to control their parallelism level easily from 1(synchronized) to N(parallel).

Read more >>

The In-Process Microservices Architecture

To tackle challenges such as significant operations overhead, duplication of effort, testability that microservices usually faces, and to achieve the benefits such as code decoupling, easy to scale-out that microservices brings in, ZStack encompasses all services in a single process called management node, building a in-process microservices architecture.

Read more >>

The Versatile Plugin System

Current IaaS software are more like cloud controller software that still lack lots of features to be complete cloud solutions. As an evolving technology, predicting what features will make up a complete solution is hard, so an IaaS software cannot build all features it will need from the very beginning. Given those facts, the architecture of an IaaS software must be able to keep core orchestration stable from adding new features. ZStack, with a versatile plugin system, allows features to be implemented as plugins(both in-process or out-of-process) which can not only extend ZStack's functionality, but also hook into business logic to change default behaviours.

Read more >>

The Workflow Engine

Tasks in IaaS software normally have long execution paths; an error may happen at any given step. In order to keep the integrity of the system, an IaaS software must provide a mechanism that can roll back prior executed steps. With a workflow engine, every step in ZStack wrapped in individual flow can be rolled back on error. Besides, key execution paths can be configured by assembling workflows in configuration files, which decouples the architecture further.

Read more >>

The Tag System

Tags in ZStack not only help users aggregate resources but also control behaviors of the software. ZStack has a complete specification defining category, form, and usage of tags. Besides users, plugins can create their tags too, in order to record metadata and extend properties of existing resources; by all these means, tags can help plugins to introduce new features without changing ZStack's database schema, diminishing the need for database migration in software upgrade.

Read more >>

The Cascade Framework

Resources in a cloud have relations to each other. An operation to one resource may usually set off a chain effect to others; for example, when deleting a cluster, it makes sense to delete all hosts belonging to that cluster and to stop all VMs running on those hosts. Traditional IaaS software either hard code chain effects or simply deny those operations, for example, prohibiting users from deleting a cluster that has VM running. ZStack offers a cascade framework that can spread an operation from one resource to all related resources. Resources can choose to join the cascade framework by implementing a simple extension point, which decouples the framework from resources' business logic.

Read more >>

The Query API

A common challenge for users of IaaS software is how to find a wanted resource quickly and precisely; for example, finding the VM that has EIP(16.16.16.16) from 10,000 VMs. Most IaaS software solves this problem by ad-hoc query logic in APIs. ZStack, instead of ad-hoc, equips with a framework that can automatically generate queries for every field of every resource, and join queries that span multiple resources, helping users to manage enormous resources in the cloud.

Read more >>

Full Automation By Ansible

Agent is a common way that IaaS software manage devices; for example, ZStack uses Python agents to manage KVM hosts. With massive devices, installing and upgrading agents become huge challenges, so most IaaS software leave this problem to customers or distribution vendors, which leads to fragile solutions because of lacking support from IaaS software themselves. ZStack took this problem into account in the very beginning, tried out Puppet, Salt, and Ansible successively, and finally integrated with Ansible seamlessly and transparently. All ZStack agents are automatically deployed, configured, and upgraded by Ansible; users may not even notice their existences.

Read more >>

Networking Model 1: L2 and L3 Network

ZStack abstracts the networking model into L2 and L3 networks. An L2 network provides a type of L2 isolation method, while an L3 network basically represents a subnet associated with OSI layer 4 ~ layer 7 network services. The idea is to use terms and concepts with which administrators have been familiar to describe ZStack's networking model, allowing administrators to create networking topologies easily and precisely.

Read more >>

Networking Model 2: Virtual Router Network Service Provider

In ZStack's networking model, OSI layer 4 ~ 7 network services are implemented as small plugins from different service providers. The default provider, called virtual router provider, uses a customized Linux VM as a virtual appliance to provide network services including DHCP, DNS, SNAT, EIP, and Port Forwarding for every L3 network. The way of using virtual router VMs has advantages of no single failure point, and no special requirements for physical infrastructure so that users can realize various network services on commodity hardware without purchasing expensive equipments.

Read more >>

Storage Model: Primary Storage and Backup Storage

ZStack abstracts storage systems, by their logical functionality, into primary storage and backup storage. A primary storage is a storage pool on which VM volumes locate; a backup storage is the storage that users store image templates and backup volumes and snapshots. Primary storage and backup storage can be physically separate storage systems or the same storage system playing both roles, storage vendors can easily plug in their products by implementing corresponding storage plugins.

Read more >>

The Automation Testing System 1: Integration Testing

Testing is an important factor contributing to reliability, maturity, and maintainability of an IaaS software. Testing in ZStack is fully automated. The automation testing system consists of three parts: integration testing, system testing, and model-based testing. The integration testing system is built based on JUnit using simulators. With various utilities the integration testing system supplies, developers can quickly write test cases to validate a new feature or a bug fix.

Read more >>

The Automation Testing System 2: System Testing

ZStack's system testing system runs test cases in real hardware environment; like integration testing, the system testing is full automated and covers aspects of functional tests, stress tests, and performance tests.

Read more >>

The Automation Testing System 3: Model-based Testing

The model-based testing system is a sub-project in zstack-woodpecker. With finite-state machines and action selection strategies, it can generate random API operations that may run forever unless a defect is found, or pre-defined exit conditions are met. ZStack relies on model-based testing to test corner cases that hardly happen in real world, which compensates integration testing and system testing in terms of test coverage.

Read more >>