Wanted: New architectures for IoT and Augmented Reality

Software technology changes rapidly. Many new tools and techniques arrive in the software engineering realm to take on old and new problems. There are still big architecture and implementation holes yet to be addressed. For example, as a few billion more smart phones, tablets and internet connected sensing devices come online across the world, how are they all going to discover and utilize all the available resources collaboratively?

One of the current problems with most existing architectures is data gets routed through central servers in a data center somewhere.  Typically software systems are still built using client/server architectures. Even if an application is using multiple remote sources for data, it’s still really just a slight variation. Service and data lookups are done using a statically defined address rather than through discovery. Even remote sensing and home automation devices barely collaborate locally and require a local router to communicate with a remote server in a data center.

In the past month, I have been to both the Internet of Things World and Augmented World Expo (AWE). At both of these excellent conferences, there was at least some discussion about the need for a better infrastructure

  • to connect devices in a way to make them more useful through collaboration of resources and
  • to connect devices to provide capabilities to share experiences in real time.

But it was just talk about the need. No one yet is demonstrating any functional capabilities in this manner.

On a side note: I saw only one person, out of 3000 or so, at the AWE conference wearing a device for augmentation. It was Steve Mann who is considered the father of wearables. I dare say that most proponents of the technology are not ready to exhibit it nor is the infrastructure around to support its use effectively. There is great work progressing though.

Peer-to-peer architectures used in file sharing and the architecture Skype uses start providing directional guidance for what is to come in truly distributed architectures. Enhancing these architectures to include dynamic discovery of software and hardware resources and orchestrating dynamic resource utilization is still needed.

There are a few efforts in development beginning to address some of the internet-wide distributed computing platforms needed for data sharing, augmented reality and machine learning. Those of you thinking of batch jobs or wiring up business services as distributed computing, this is not what I’m talking about. I am talking about a small footprint software stack able to execute on many different hardware devices with the ability for those devices to communicate directly with each other.

If you know about development efforts in this vain, I would like to hear about them.


Scaling Social Networks in a Cloud

Usually we hear about web sites and web applications becoming popular, not being able to scale to handle growing load, then crashing and burning. There are plenty of examples. Large news web sites still struggle to handle load when major world events happen. Successful social networks struggle as well. Twitter.com has struggled in recent months to maintain performance. Due to usefulness or coolness some of these sites hang on to their user base, the users hoping things will get better in a reasonable amount of time. If problems are corrected quickly, existence is maintained. Twitter appears to be recovering.

Building networked applications is a bit of an art. However, if you anticipate (or hope) that your application or service will grow to accommodate millions of users, you have to architect it to scale from its inception. If you don’t, likely you’ll be added to the list of casualties.

There are published architectures for reference and lectures discussing how companies with a large internet presence have handled scalability. For example:

During the past couple weeks there have been success stories about popular services scaling successfully in Cloud Computing environments. Notable is the BumperSticker Facebook application,  built at LinkedIn, scaling to millions of users. This application was built using Ruby on Rails and deployed in Joyent’s Cloud. Joyent has a video posted describing how this application was built.

Sun Microsystem and Joyent announced a collaboration to offer free hosting (for a limited time) of social applications built for Facebook and OpenSocial environments. This is great news for developers and small companies without access to resources needed to handle scaling applications to huge numbers of users. We are witnessing the advent of companies now offering up new grid computing services as part of a business model and marketing it using one of the latest hot buzzwords, ‘Cloud Computing‘.

This should make it possible for more developers to implement and share new social applications where before it would be resource prohibitive. Some of the benefits of cloud computing offerings include:

  • low cost of entry into resources required to deploy scalable applications
  • no need to worry about hardware and support software maintenance

There are downsides as well. Some of them include:

  • locked into vendor agreements and configurations
  • doesn’t necessarily solve the scaling issues

Granted these types of services are of value to help host and scale applications to levels not previously possible by many individuals and small organizations. But, it is not a panacea for scaling social networks or individual services. It is not a substitute for architecting your software properly nor does it guarantee performance and reliability.  Also, when deploying your creation into one of these corporate citadels, be sure you understand the SLAs being provided and costs associated with resource usage of the deployed software (e.g. can you incur the cost of resources used to scale to 5 million users if that happens).

If you are building a new Social Network application and are looking for users, join the crowd.

If you think you have a new social application that can draw 1 million+ users make sure you’re prepared for it to scale whether you use the resources walled in a citadel of a large corporation or are hosting it yourself. Consider designing the application to scale first no matter where it is deployed. Then decide how it may be deployed,  whether in a data center, hosted web server farm or using a distributed execution platform such as Assimilator. If a Cloud is a corporate controlled data center, then there will be many isolated clouds. If somehow all computing resources connected to the internet are applied to deploying social networks, then many more clouds will dynamically form providing a much greater amount of available resources.

Cloud Computing Thoughts

Cloud computing is becoming one of the next industry buzz words. It joins the ranks of terms including: grid computing, utility computing, virtualization, clustering, etc. Cloud computing overlaps some of the concepts of distributed, grid and utility computing, however it does have its own meaning if contextually used correctly. The conceptual overlap is partly due to technology changes, usages and implementations over the years. Trends in usage of the terms from Google searches shows Cloud Computing is a relatively new term introduced in the past year. There has also been a decline in general interest of Grid, Utility and Distributed computing.  Likely they will be around in usage for quit a while to come.  But Cloud computing has become the new buzz word driven largely by marketing and service offerings from big corporate players like Google, IBM and Amazon.

* distributed computing
* grid computing
* utility computing
* cloud computing

term trends graph

The term cloud computing probably comes from (at least partly) the use of a cloud image to represent the Internet or some large networked environment. We don’t care much what’s in the cloud or what goes on there except that we depend on reliably sending data to and receiving data from it. Cloud computing is now associated with a higher level abstraction of the cloud. Instead of there being data pipes, routers and servers, there are now services. The underlying hardware and software of networking is of course still there but there are now higher level service capabilities available used to build applications. Behind the services are data and compute resources. A user of the service doesn’t necessarily care about how it is implemented, what technologies are used or how it’s managed. Only that there is access to it and has a level of reliability necessary to meet the application requirements.

In essence this is distributed computing. An application is built using the resource from multiple services potentially from multiple locations. At this point, typically you still need to know the endpoint to access the services rather than having the cloud provide you available resources. This is also know as Software as a Service. Behind the service interface is usually a grid of computers to provide the resources. The grid is typically hosted by one company and consists of a homogeneous environment of hardware and software making it easier to support and maintain. (note: my definition of a grid is different from the wikipedia definition, but homogeneous environments in data centers is typically what I have run across). Once you start paying for the services and the resources utilized, well that’s utility computing.

Cloud computing really is accessing resources and services needed to perform functions with dynamically changing needs. An application or service developer requests access from the cloud rather than a specific endpoint or named resource. What goes on in the cloud manages multiple infrastructures across multiple organizations and consists of one or more frameworks overlaid on top of the infrastructures tying them together. Frameworks provide mechanisms for:

  • self-healing
  • self monitoring
  • resource registration and discovery
  • service level agreement definitions
  • automatic reconfiguration

The cloud is a virtualization of resources that maintains and manages itself. There are of course people resources to keep hardware, operation systems and networking in proper order. But from the perspective of a user or application developer only the cloud is referenced. The Assimilator project is a framework that executes across a heterogeneous environment in a local area network providing a local cloud environment. In the works is the addition of a network overlay to start providing an infrastructure across the Internet to help achieve the goal of true cloud computing.

Assimilator 1.1 Release

I just released Assimilator 1.1 on Sourceforge. This release contains:

  • corrected cybenode.sh script to properly accept parameter designating codebase location
  • JMX interface added to Monitor, Cybernode and Webster core services
  • drag and drop of oar files onto console service graph to deploy services added
  • corrected oar deployment code to handle operational strings with Include tags allowing deployment of dependent operational strings.
  • removed old viewer and opmon utility code, documentation and build file references.
  • changed helloworld example files and documentation to consistently use steps 1-6.
  • new webster using MINA 1.1.4 (JDK 5 version) and integrated it
  • moved jini ServiceStarter class to assimilator and modified it to add loggers from top level config file (we had a really hard time get jini loggers to turn on properly before and this should fix it), quite a bit or exception refactoring and other general refactoring
  • moved all the script and config files to use the new service starter and new webster.

The new distribution file can be downloaded here.

In the works is a network overlay for Assimilator so that distributed services can be managed over the internet.

Assimilator Introduction

Just a quick introduction to the Assimilator project that I have been working on. I will discuss it to some extent here as the project develops. Assimilator is and open source project hosted at SourceForge. It represents the next step in evolutionary development of distributed computing. It provides a platform for distributed application development which includes key capabilities required to execute distributed applications. Application development using this platform does not require development of handling the difficult aspects of distributed computing. The platform enables applications to be built as a collection of services that can be executed on a network where resources are available and may dynamically change. Service lookup and discovery, distributed events and transactions, service provisioning and deployment, and service management are all provided by the platform.

The open source environment allows free usage of the platform and encourages feedback from users on how to enhance features, extend capabilities and eradicate defects. Open source allows greater distribution of the platform hopefully leading to wider adoption of its use. Custom applications built with the platform will demonstrate platform capabilities and provide a means for individuals and organizations to generate revenue.

The primary goals of the project include:

  • Develop a distributed computing platform capable of dynamically managing and monitoring services in a network.
  • Develop the platform in and for the open source community to drive adoption of its use.
  • Develop the platform with the intent that it can be used for easy development of distributed applications.

Network includes running across the internet and on any device connected to it. The current version executes in WANs and work is underway to get it working across the internet. At which point it becomes feasible to start building social network applications and gaming environments that utilize available resources across peered devices.


Distributed computing and all its aspects continue to become more prevalent at a continually accelerating pace. In this blog I will capture some of the ideas in this area by others and myself. Also, how it is influencing and should influence the sharing of knowledge and development of a consciousness though social participation and usage of tools for sharing and increasing open computing resources.