Sunday, June 10, 2018

 Public clouds offer different operating system images and container technologies  They have been continuously championing deep separation of resources for applications. Originally applications and services requiring storage and compute were monolithic and were deployed together as application server that was compute intensive and storage server that was storage intensive. Cloud introduced the notion of modular architecture and deep divisions of software on not just separate processes but also separate operating systems, containers, serverless resources and hosts such as OSv. The modules were executed on different virtual machines and those virtual machines ran on different OS images. The cloud providers often promoted virtualization technologies be it for compute or storage. While the users saw a shared-nothing architecture that looked like independent resources, the cloud providers virtualized and consolidated resources on platforms and software defined stacks. Such virtualization techniques focused on using existing technologies and features and provided platforms for application life cycle management to the cloud providers. There was no notion of administrators anymore as both the businesses as consumers of resources and the cloud providers as producers of resources maintained transparency and detail of the usages on pay as you go basis. In order to provide this virtualization starting from storage arrays to containers, vendors like Docker leveraged existing operating system features such as Linux containers and built their own containerization technologies. It was taken for granted that the operating system enabled virtualization over different hardware resources that the cloud providers - both public and hybrid needed. However, hypervisors provide more possibilities that the operating systems cannot provide to both the cloud providers and their clients.  In this article we focus on emerging trends.
Analysts love to put quadrants and stacks to explain their organization of emerging trends and improvements in existing participants of domain. This is a great practice to analyze everything out there and to categorize them for the purpose of viewing them in their context. Instead, we would like to bring to you the pockets of disruptive spaces that can emerge or is emerging from new and existing players.
We have seen GPU be a niche resource for Artificial Intelligence. We have seen object storage as a niche storage for all things big and small. We have seen containers, virtual machines, virtual storage, virtual networks, virtual data warehouses and even virtual datacenters. We have not seen a fabric that automatically determines the storage and compute setup needed for the computations and migrates them seamlessly leaving the programmer to develop only the algorithms and their variations. Is it possible to have a fabric that lets developers not have to think twice about writing O(N^2) algorithms for searching submatrices in a matrix? If they want, they can transform matrices into linear arrays and find ways to match patterns but how many need to do that today for scientific and commercial applications?
We have seen increased adoption of server-side technologies and the migration of server to the cloud but we have not seen simplification of software layers on the handheld devices. We have increased the battery power of mobile devices and the applications that run on it. There is a need for operating system, runtime and plethora of applications to power these.  But there is nothing solving the download and local install of applications on the handheld device where every experience on the software device is powered via software-as-a-service including the operating system, the mixing and matching of application portfolio and the reduction of hardware footprint on every handheld device. There is a Cicret bracelet that has yet to be commercially realized and introduces the notion of the handheld device as a mere projection on your skin so you can touch and play just like your phone. This notion that you don't need anything more than interactivity and you can help reduce the proliferation of hardware and software without compromising the popular user experience is motivation for another exciting trend
We have seen commoditization of IT in favor of business processes. We have seen commoditization of storage and compute in the form of cloud computing. We have seen virtualization over hybrid and vastly varying vendors of compute and storage. We have yet to see a universal and cheap T-shirt sized networked computers that can attach to various mobile units to offer programmable tasks such as monitoring on those remote units.
#codingexercise
Get the preorder successor of a node. A successor is one that comes after the node in the preorder traversal)
Node GetPreorderSuccessor(Node root, Node x)
{
Node result = null;
if (root == null || x == null || x == root) return result;
var list = new List<Node>();
ToPreOrder(ref list, root);
int index = root.indexOf(ref list, x);
if ( index >= 0 && index < list.Count()-1)
      return list[index+1];
return result;
}
static void ToPreOrder(ref List<Node> nodes, Node root)
{
if (root == null) return;
nodes.Add(root);
ToPreOrder(ref nodes, root.left);
ToPreOrder(ref nodes, root.right);
}
The logic for TREE-SUCCESSOR applies here too. The node that is not the root may have come from the previous frames left iteration or from the right iteration.

No comments:

Post a Comment