CSC/ECE 517 Fall 2015/ossA1550RAN
A1550 - Web Socket Implementation in Apache Ambari
Ambari-Web uses simple ajax polling mechanism to fetch data from Ambari-Server. Constant polling is done to show current service status, alerts, service graphs, etc on Ambari-Web. With this mechanism, the performance of Ambari-Server can be affected on a large size cluster with multiple active browser sessions due to continuous heavy requests being made.
WebSocket is a protocol providing full-duplex communication channels over a single TCP connection. Implementing Web-Socket between Ambari-Web and Ambari-Server will be helpful to address this scenario.
What is Apache Ambari
Apache Ambari is a software project of the Apache Software Foundation, is aimed at making Hadoop management simpler by developing software for provisioning, managing, and monitoring Apache Hadoop clusters. Ambari provides an intuitive, easy-to-use Hadoop management web UI backed by its RESTful APIs. Ambari was a sub-project of Hadoop but is now a top-level project in its own right.
Current Implementation
Project Goals, Benefits and Challenges
Goals:
1. Understand architecture of Ambari-Server and Ambari-web
2. Replace the current pull-based mechanism with the push-based mechanism via Web-Socket
3. Write test cases for the Web Socket implementation to test the functionalities of WebSocket Client and WebSocket Server
Benefits:
1. Web Socket will allow Ambari-Server to perform robustly an a large cluster with multiple browser sessions and when continuous heavy requests are being made
Challenges:
1. Ambari server uses Jetty 8.x version, while support for Web Socket was made available after Jetty 9.x
2. Ambari has a huge codebase with multiple modules and multiple frameworks and design patterns adopted. Understanding the flow of the project and taking care of dependencies is a huge challenge
3. For testing the code requires a cluster of around 3 nodes. Running 3 virtual machines requires a high performance machine.
Learning Outcomes
Github Location
https://github.com/apache/ambari
Forked Repository:
https://github.com/nisarg64/ambari
References
https://en.wikipedia.org/wiki/Apache_Ambari
https://cwiki.apache.org/confluence/display/AMBARI/Ambari
https://issues.apache.org/jira/secure/attachment/12559939/Ambari_Architecture.pdf