It is an innovative idea of design this application stack in the cloud era. According to openstack.org, OpenStack is a cloud operating system that controls large pools of compute, storage, and networking resources throughout a datacenter, all managed through a dashboard that gives administrators control while empowering their users to provision resources through a web interface.
Google designed BigQuery as a cloud service for running fast queries against massive datasets, but with lofty ambitions there’s always room to take a step back. Now, users that don’t require super speed can run batch queries, and can connect to the service using Microsoft Excel.
Google BigQuery Service allows you to run SQL-like queries against very large datasets, with potentially billions of rows. This can be your own data, or data that someone else has shared for you. BigQuery works best for interactive analysis of very large datasets, typically using a small number of very large, append-only tables. For more traditional relational database scenarios, you might consider using Google Cloud SQL instead. You can use BigQuery through a web UI called the BigQuery browser tool, the bq command-line tool, or by making calls to the REST API using various client libraries in multiple languages, such as Java, Python, etc.
BigQuery offers the following features:
Speed – Analyze billions of rows in seconds.
Scale – Terabytes of data, trillions of records.
Simplicity – SQL-like query language, hosted on Google infrastructure.
Sharing – Powerful group- and user-based permissions using Google accounts.
Security – Secure SSL access.
Multiple access methods – Connect to BigQuery using the BigQuery browser, the bq command-line tool, the REST API, or Google Apps Script.
Moore’s Law is going to slow down because of the capacity of silicon technology; meaning that computer power is not going to be exponentially increased. The two basic problems are heat and leakage. If the chip is too small, it is so intense that can melt the chip. Leakage: if it is too small and so intense, the chip may not handle the electron running inside the chip. Prof. Michio Kaku, physicist, is trying to explain why it would be happened. Intel also admitted by start moving to 3D chip, he noted. He also gives some candidates for post-silicon era. They are molecule computer and quantum computer.
Token ring is one among mutual exclusion algorithm in distributed systems that does not involve with a server or coordinator. A token is passed from one node to another node in a logical order. A node received token has a proper right to enter the critical section. If a node being holding token does not require to enter critical section or access a shared resource, it just simply passes the token to the next node.
Distributed algorithm in mutual exclusion takes advantage of multicast protocol to broadcast the requested message to enter the critical section. Once a node sent requested message to every node on the network, every node must send back a message stated that it allows that node to enter the critical section. The node sent requested message must receive a gaining access message from every node on the network before it can actually access to a shared resource. If one node fails to send a gaining access message, then the node cannot access the shared resource.
Because there is no centralized coordinator, it is likely that two or more node send request message simultaneously. However, logically the arrival time stamp of each request message is never been the same. We can use Lamport clock algorithm for this scenario.
Semaphore and Monitor that protected critical section in single system are no longer appropriated in distributed systems. So in distributed systems, we must use a special algorithm to achieve mutual exclusion. There are 3 basic algorithms to be considered and work as a baseline for developing another mutual exclusion algorithm in distributed systems. Those 3 are:
Token ring algorithm
Please refer to these articles for better understanding of mutual exclusion:
Monitor and Semaphore is somehow the same. However, monitor adds more abstract layer to semaphore. Semaphore refers to operation level while monitor refers to class level which is the combination of many operations and variables.
By definition, a monitor is a collection of procedures and data that are all grouped together in a class. Just as semaphore, monitor ensures that a particular thread can exclusively access to a shared resource at a specific time. Monitor may implement semaphore and condition variable over the critical section to provide the best total single flow of modifying the resources.
Mutual Exclusion is required both in single system and distributed systems to protecting the shared resource from being modified concurrently. In this article, we will discuss the mutual exclusion in single system by using Semaphore. Finally we will follow by giving Java example. Before reading this article, it is highly recommended you read the Principle of Mutual Exclusion.
Semaphore is a flag that railroad engineers would use when trains enter a shared track. Semaphore here refers to a mechanism to ensure only one thread or process to access a shared resource. To implement semaphore in Java, synchronized(this) keyword should be used to surround critical section. The code from previous article will look like this.
Mutual Exclusion is a process that prevents multiple threads or processes from accessing shared resources at the same time. The problem is coming from the fact that in both distributed systems and single system, several threads or processes share a resource but cannot use it concurrently. Mutual Exclusion, Synchronization and Data Coordination are commonly use interchangeably; or just MUTEX for short.
This will guide you to the root of the problem and give you solution.
Let see the two blocks of code that runs in parallel called foo() and bar().
In previous post you may understand the architecture of single thread and thread per request in distributed systems. Here we will see another architecture called Thread Pool. Thread pool pre-defines a number of thread running in its pool. Let’s say we have 2 threads in the pool, then the server is capable of running only 2 requests at the same time. Other requests must wait in queue until the 2 threads in the pool finish their work. In real world applications, we see a lot of servers fall into this category. For example, Apache web server, IIS server, etc. The advantages and disadvantages are discussed below: