SlideShare a Scribd company logo
Building a cloud management
platform using megam.io
Yeshwanth Kumar
Platform Engineer
Megam systems
Agenda :
1. Introduction to cloud orchestration
2. Megam’s Cloud Management Platform
3. Architecture
4. Cloud In A Box
5. Demo
What is cloud orchestration?
In the world of software, orchestration is the entity that
manages complex cross domain (system, enterprise,
firewall) processes, and that handles exceptions.
How does cloud orchestration help?
➔ Rapid application deployment
➔ end-to-end automation
➔ Multiple cloud support, so no vendor lock-ins
megam’s Cloud Management Platform
megam’s Cloud Management Platform
➔ Omni scheduler (VM, containers, unikernel…)
➔ Launching apps/services
➔ Namespace grouping (organization &
domain)
➔ Metering and monitoring, logs
➔ SCM and continuous integration
https://console.megam.io
Architecture:
Megam’s architecture
● REST-ful
● Stateless
● Asynchronous
● Loosely coupled
● API Driven
● Declarative
Web & CLI
API Gateway server
RabbitMQ
PaaS Engine - megamd
Gulpd agent
Gateway Server - Powerful REST API
● Scala
● Play framework
● Stateless
● Super secure - HMAC based auth
● Adheres to CAMP/TOSCA
Gateway Server
Robust functional techniques
match use_functional() {
case Some(succ) => “Yay! easy to scale, me :)”
case None => “me :(”
}
Functional concise code high scalability
API Gateway server
Error handling - scalaz
Why ValidationNel?
def create(email: String, input: String): ValidationNel[Throwable, Option[EventsResult]] = {
(mkGunnySack(email, input) leftMap { err: NonEmptyList[Throwable] =>
new ServiceUnavailableError(input, (err.list.map(m => m.getMessage)).mkString("n"))
}).toValidationNel.flatMap { gs: Option[GunnySack] =>
(riak.store(gs.get) leftMap { t: NonEmptyList[Throwable] => t }).
flatMap { maybeGS: Option[GunnySack] =>
maybeGS match {
case Some(thatGS) => (parse(thatGS.value).extract[EventsResult].some).successNel[Throwable]
case None => {
play.api.Logger.warn(("%-20s -->[%s]").format("Events created. success", "Scaliak returned => None.
Thats OK."))
(parse(gs.get.value).extract[EventsResult].some).successNel[Throwable];
}
Transport layer
A Request that comes to megam_gateway gets funnelled
HTTPRequest
(Headers, Body)
|
 /
|
(becomes)
FunneledRequest(maybeEmail,clientAPIHmac, clientAPIDate,
clientAPIPath, clientAPIBody)
Transport layer -
marshalling/unmarshalling
toJSON
override implicit val writer = new JSONW[AccountResult]
{
override def write(h: AccountResult): JValue = {
JObject(
JField(IdKey, toJSON(h.id)) ::
JField(FirstNameKey, toJSON(h.first_name)) ::
JField(LastNameKey, toJSON(h.last_name))
}
}
fromJSON
override implicit val reader = new JSONR[AccountResult] {
override def read(json: JValue): Result[AccountResult] = {
val idField = field[String](IdKey)(json)
val firstNameField = field[String](FirstNameKey)(json)
val lastNameField = field[String](LastNameKey)(json)
val phoneField = field[String](PhoneKey)(json)
● Store validated schema
Declarative based platform
Assemblies
Assembly Assembly
Components Components Components
#tosca_definitions_version: tosca_simple_yaml_1_0
description: Template for deploying a spring app
node_templates:
orion:
type: tosca.app.java
properties:
# omitted here for sake of brevity
requirements:
- host: megam_host
- domain: megambox.com
- source: https://github.com/megamsys/spring-mvc.git
JSON
Assembly
{
“name”: “assembly_name”,
“components” : [“component_1”, “”],
“inputs” : [ “any_global_inputs(tab, sheet, id)”, “ ”],
“operations” : “restart/reboot”,
“groups” : {
“placement_policy” : {
“ha_policy” :{
“scaling_policy” :{
}
}
Components
{
“name”: “component_1”,
“tosca_type”: “tosca.web.Java”,
“requirements” : {
“host”: “cloud_setting_id },
“inputs” : {
“domain”: “megam.co”,
“port”: “6379”,
“username”: “ ”,
“password”: ” “,
“version”: “ “ ,
“source”: “ “ ,
},
“service_inputs”: {
“dbname”: “ “,
“dbpassword”: “ “ },
“status”: “RUNNING”, }
Workings..
Data from UI
(JSON )
Controller
Models GunnySack
serialize
CloudPublish
(RabbitMQ)
reqFunneled
db
Async, it is! - Leveraging message brokers
- RabbitMQ
● open source
● More flexibility for namespace groupings
● Independant control of each apps, services and VMs
Megam queues -
➔ CloudStandup
➔ CloudPerNode
megamd engine/scheduler
➔ Multiple transport protocols - mini servers that run
concurrently (http, queues) in its own space
➔ Extensible provisioner approach (Docker, vm,
unikernel, lxc ....)
➔ Action based
➔ Recoverable actions (good/bad) with state rollback
facility though
Workings...
Queue engine
Provisioner Action
Launch
Store (Riak)
reqData from Queue
(JSON)
Concurrency - goroutines vs akka
workers
func (self *Server) ListenAndServe() error {
log.Info("Starting admin interface on port")
//var etcdServerList [2]string
var queueInput [3]string
queueInput[0] = "cloudstandup"
queueInput[1] = "events"
self.Checker()
// Queue input
for i := range queueInput {
listenQueue := queueInput[i]
queueserver := queue.NewServer(listenQueue)
go queueserver.ListenAndServe()
}
control app state on the cloud - gulpd agent
● start
● stop
● restart
● apply policy - Bind
- HA
Full working of megam
UI
CLI
API Gateway RabbitMQ megamd
app1(gulpd)
app2(gulpd)
app3(gulpd)
cloudstandup
app1.megam.com
app2.megam.com
app3.megam.com
Chef
Docker
What does megam provide?
Hybrid
Megam IaaS Megam CIB
● Easy to move from public to private cloud
Demo
Lets launch application, service & bind
them seperately..
Thank you
Questions?
Yeshwanth Kumar
Platform Engineer
Megam Systems
(www.megam.io)
Twitter: @megamsys Docs: docs.megam.io
Devcenter: devcenter.megam.io

More Related Content

Viewers also liked

Behavioristic psychology & game theory
Behavioristic psychology & game theoryBehavioristic psychology & game theory
Behavioristic psychology & game theoryJungHwan Park
 
O vos omnes pau casals
O vos omnes pau casalsO vos omnes pau casals
O vos omnes pau casals
Nombre Apellidos
 
2015_PERSPECTIVE
2015_PERSPECTIVE2015_PERSPECTIVE
2015_PERSPECTIVEJan Timmer
 
splines
 splines splines
splines
rajyalakshmi M
 
The world's most dangerous train system india
The world's most dangerous train system indiaThe world's most dangerous train system india
The world's most dangerous train system indiaJayakrishnan kichu
 
Ieee 2015 2016 vlsi titles
Ieee 2015 2016 vlsi titlesIeee 2015 2016 vlsi titles
Ieee 2015 2016 vlsi titlespgembeddedsystem
 

Viewers also liked (8)

ashwin resume
ashwin resumeashwin resume
ashwin resume
 
Behavioristic psychology & game theory
Behavioristic psychology & game theoryBehavioristic psychology & game theory
Behavioristic psychology & game theory
 
O vos omnes pau casals
O vos omnes pau casalsO vos omnes pau casals
O vos omnes pau casals
 
2015_PERSPECTIVE
2015_PERSPECTIVE2015_PERSPECTIVE
2015_PERSPECTIVE
 
splines
 splines splines
splines
 
The world's most dangerous train system india
The world's most dangerous train system indiaThe world's most dangerous train system india
The world's most dangerous train system india
 
STUD2014061015290600743071141029130043
STUD2014061015290600743071141029130043STUD2014061015290600743071141029130043
STUD2014061015290600743071141029130043
 
Ieee 2015 2016 vlsi titles
Ieee 2015 2016 vlsi titlesIeee 2015 2016 vlsi titles
Ieee 2015 2016 vlsi titles
 

Similar to Building a cloud management megam.io

Re-Design with Elixir/OTP
Re-Design with Elixir/OTPRe-Design with Elixir/OTP
Re-Design with Elixir/OTP
Mustafa TURAN
 
Apache Samza 1.0 - What's New, What's Next
Apache Samza 1.0 - What's New, What's NextApache Samza 1.0 - What's New, What's Next
Apache Samza 1.0 - What's New, What's Next
Prateek Maheshwari
 
Divide and Conquer – Microservices with Node.js
Divide and Conquer – Microservices with Node.jsDivide and Conquer – Microservices with Node.js
Divide and Conquer – Microservices with Node.js
Sebastian Springer
 
Madrid meetup #7 deployment models
Madrid meetup #7   deployment modelsMadrid meetup #7   deployment models
Madrid meetup #7 deployment models
Mario Alberto Martinez Lopez
 
Play Framework
Play FrameworkPlay Framework
Play Framework
Harinath Krishnamoorthy
 
Let's play with adf 3.0
Let's play with adf 3.0Let's play with adf 3.0
Let's play with adf 3.0
Eugenio Romano
 
Node.js for enterprise - JS Conference
Node.js for enterprise - JS ConferenceNode.js for enterprise - JS Conference
Node.js for enterprise - JS Conference
Timur Shemsedinov
 
Angular for Java Enterprise Developers: Oracle Code One 2018
Angular for Java Enterprise Developers: Oracle Code One 2018Angular for Java Enterprise Developers: Oracle Code One 2018
Angular for Java Enterprise Developers: Oracle Code One 2018
Loiane Groner
 
Protractor framework architecture with example
Protractor framework architecture with exampleProtractor framework architecture with example
Protractor framework architecture with example
shadabgilani
 
Testing Your Application On Google App Engine
Testing Your Application On Google App EngineTesting Your Application On Google App Engine
Testing Your Application On Google App Engine
IndicThreads
 
Testing your application on Google App Engine
Testing your application on Google App EngineTesting your application on Google App Engine
Testing your application on Google App Engine
Inphina Technologies
 
Google app-engine-cloudcamplagos2011
Google app-engine-cloudcamplagos2011Google app-engine-cloudcamplagos2011
Google app-engine-cloudcamplagos2011
Opevel
 
Open Source ERP Technologies for Java Developers
Open Source ERP Technologies for Java DevelopersOpen Source ERP Technologies for Java Developers
Open Source ERP Technologies for Java Developers
cboecking
 
Pyramid Deployment and Maintenance
Pyramid Deployment and MaintenancePyramid Deployment and Maintenance
Pyramid Deployment and Maintenance
Jazkarta, Inc.
 
Monitoring Kubernetes with Prometheus (Kubernetes Ireland, 2016)
Monitoring Kubernetes with Prometheus (Kubernetes Ireland, 2016)Monitoring Kubernetes with Prometheus (Kubernetes Ireland, 2016)
Monitoring Kubernetes with Prometheus (Kubernetes Ireland, 2016)
Brian Brazil
 
Dive into DevOps | March, Building with Terraform, Volodymyr Tsap
Dive into DevOps | March, Building with Terraform, Volodymyr TsapDive into DevOps | March, Building with Terraform, Volodymyr Tsap
Dive into DevOps | March, Building with Terraform, Volodymyr Tsap
Provectus
 
Monitoring Weave Cloud with Prometheus
Monitoring Weave Cloud with PrometheusMonitoring Weave Cloud with Prometheus
Monitoring Weave Cloud with Prometheus
Weaveworks
 
Google App Engine
Google App EngineGoogle App Engine
Google App Engine
cloudcampnigeria
 
Hashicorp-Terraform_Packer_Vault-by Sushil
Hashicorp-Terraform_Packer_Vault-by SushilHashicorp-Terraform_Packer_Vault-by Sushil
Hashicorp-Terraform_Packer_Vault-by Sushil
Sushil Kumar
 
The enterprise manager command line interface2
The enterprise manager command line interface2The enterprise manager command line interface2
The enterprise manager command line interface2
Kellyn Pot'Vin-Gorman
 

Similar to Building a cloud management megam.io (20)

Re-Design with Elixir/OTP
Re-Design with Elixir/OTPRe-Design with Elixir/OTP
Re-Design with Elixir/OTP
 
Apache Samza 1.0 - What's New, What's Next
Apache Samza 1.0 - What's New, What's NextApache Samza 1.0 - What's New, What's Next
Apache Samza 1.0 - What's New, What's Next
 
Divide and Conquer – Microservices with Node.js
Divide and Conquer – Microservices with Node.jsDivide and Conquer – Microservices with Node.js
Divide and Conquer – Microservices with Node.js
 
Madrid meetup #7 deployment models
Madrid meetup #7   deployment modelsMadrid meetup #7   deployment models
Madrid meetup #7 deployment models
 
Play Framework
Play FrameworkPlay Framework
Play Framework
 
Let's play with adf 3.0
Let's play with adf 3.0Let's play with adf 3.0
Let's play with adf 3.0
 
Node.js for enterprise - JS Conference
Node.js for enterprise - JS ConferenceNode.js for enterprise - JS Conference
Node.js for enterprise - JS Conference
 
Angular for Java Enterprise Developers: Oracle Code One 2018
Angular for Java Enterprise Developers: Oracle Code One 2018Angular for Java Enterprise Developers: Oracle Code One 2018
Angular for Java Enterprise Developers: Oracle Code One 2018
 
Protractor framework architecture with example
Protractor framework architecture with exampleProtractor framework architecture with example
Protractor framework architecture with example
 
Testing Your Application On Google App Engine
Testing Your Application On Google App EngineTesting Your Application On Google App Engine
Testing Your Application On Google App Engine
 
Testing your application on Google App Engine
Testing your application on Google App EngineTesting your application on Google App Engine
Testing your application on Google App Engine
 
Google app-engine-cloudcamplagos2011
Google app-engine-cloudcamplagos2011Google app-engine-cloudcamplagos2011
Google app-engine-cloudcamplagos2011
 
Open Source ERP Technologies for Java Developers
Open Source ERP Technologies for Java DevelopersOpen Source ERP Technologies for Java Developers
Open Source ERP Technologies for Java Developers
 
Pyramid Deployment and Maintenance
Pyramid Deployment and MaintenancePyramid Deployment and Maintenance
Pyramid Deployment and Maintenance
 
Monitoring Kubernetes with Prometheus (Kubernetes Ireland, 2016)
Monitoring Kubernetes with Prometheus (Kubernetes Ireland, 2016)Monitoring Kubernetes with Prometheus (Kubernetes Ireland, 2016)
Monitoring Kubernetes with Prometheus (Kubernetes Ireland, 2016)
 
Dive into DevOps | March, Building with Terraform, Volodymyr Tsap
Dive into DevOps | March, Building with Terraform, Volodymyr TsapDive into DevOps | March, Building with Terraform, Volodymyr Tsap
Dive into DevOps | March, Building with Terraform, Volodymyr Tsap
 
Monitoring Weave Cloud with Prometheus
Monitoring Weave Cloud with PrometheusMonitoring Weave Cloud with Prometheus
Monitoring Weave Cloud with Prometheus
 
Google App Engine
Google App EngineGoogle App Engine
Google App Engine
 
Hashicorp-Terraform_Packer_Vault-by Sushil
Hashicorp-Terraform_Packer_Vault-by SushilHashicorp-Terraform_Packer_Vault-by Sushil
Hashicorp-Terraform_Packer_Vault-by Sushil
 
The enterprise manager command line interface2
The enterprise manager command line interface2The enterprise manager command line interface2
The enterprise manager command line interface2
 

Building a cloud management megam.io

  • 1. Building a cloud management platform using megam.io Yeshwanth Kumar Platform Engineer Megam systems
  • 2. Agenda : 1. Introduction to cloud orchestration 2. Megam’s Cloud Management Platform 3. Architecture 4. Cloud In A Box 5. Demo
  • 3. What is cloud orchestration? In the world of software, orchestration is the entity that manages complex cross domain (system, enterprise, firewall) processes, and that handles exceptions.
  • 4. How does cloud orchestration help? ➔ Rapid application deployment ➔ end-to-end automation ➔ Multiple cloud support, so no vendor lock-ins
  • 6. megam’s Cloud Management Platform ➔ Omni scheduler (VM, containers, unikernel…) ➔ Launching apps/services ➔ Namespace grouping (organization & domain) ➔ Metering and monitoring, logs ➔ SCM and continuous integration https://console.megam.io
  • 8. Megam’s architecture ● REST-ful ● Stateless ● Asynchronous ● Loosely coupled ● API Driven ● Declarative Web & CLI API Gateway server RabbitMQ PaaS Engine - megamd Gulpd agent
  • 9. Gateway Server - Powerful REST API ● Scala ● Play framework ● Stateless ● Super secure - HMAC based auth ● Adheres to CAMP/TOSCA
  • 10. Gateway Server Robust functional techniques match use_functional() { case Some(succ) => “Yay! easy to scale, me :)” case None => “me :(” } Functional concise code high scalability
  • 11. API Gateway server Error handling - scalaz Why ValidationNel? def create(email: String, input: String): ValidationNel[Throwable, Option[EventsResult]] = { (mkGunnySack(email, input) leftMap { err: NonEmptyList[Throwable] => new ServiceUnavailableError(input, (err.list.map(m => m.getMessage)).mkString("n")) }).toValidationNel.flatMap { gs: Option[GunnySack] => (riak.store(gs.get) leftMap { t: NonEmptyList[Throwable] => t }). flatMap { maybeGS: Option[GunnySack] => maybeGS match { case Some(thatGS) => (parse(thatGS.value).extract[EventsResult].some).successNel[Throwable] case None => { play.api.Logger.warn(("%-20s -->[%s]").format("Events created. success", "Scaliak returned => None. Thats OK.")) (parse(gs.get.value).extract[EventsResult].some).successNel[Throwable]; }
  • 12. Transport layer A Request that comes to megam_gateway gets funnelled HTTPRequest (Headers, Body) | / | (becomes) FunneledRequest(maybeEmail,clientAPIHmac, clientAPIDate, clientAPIPath, clientAPIBody)
  • 13. Transport layer - marshalling/unmarshalling toJSON override implicit val writer = new JSONW[AccountResult] { override def write(h: AccountResult): JValue = { JObject( JField(IdKey, toJSON(h.id)) :: JField(FirstNameKey, toJSON(h.first_name)) :: JField(LastNameKey, toJSON(h.last_name)) } } fromJSON override implicit val reader = new JSONR[AccountResult] { override def read(json: JValue): Result[AccountResult] = { val idField = field[String](IdKey)(json) val firstNameField = field[String](FirstNameKey)(json) val lastNameField = field[String](LastNameKey)(json) val phoneField = field[String](PhoneKey)(json) ● Store validated schema
  • 14. Declarative based platform Assemblies Assembly Assembly Components Components Components #tosca_definitions_version: tosca_simple_yaml_1_0 description: Template for deploying a spring app node_templates: orion: type: tosca.app.java properties: # omitted here for sake of brevity requirements: - host: megam_host - domain: megambox.com - source: https://github.com/megamsys/spring-mvc.git
  • 15. JSON Assembly { “name”: “assembly_name”, “components” : [“component_1”, “”], “inputs” : [ “any_global_inputs(tab, sheet, id)”, “ ”], “operations” : “restart/reboot”, “groups” : { “placement_policy” : { “ha_policy” :{ “scaling_policy” :{ } } Components { “name”: “component_1”, “tosca_type”: “tosca.web.Java”, “requirements” : { “host”: “cloud_setting_id }, “inputs” : { “domain”: “megam.co”, “port”: “6379”, “username”: “ ”, “password”: ” “, “version”: “ “ , “source”: “ “ , }, “service_inputs”: { “dbname”: “ “, “dbpassword”: “ “ }, “status”: “RUNNING”, }
  • 16. Workings.. Data from UI (JSON ) Controller Models GunnySack serialize CloudPublish (RabbitMQ) reqFunneled db
  • 17. Async, it is! - Leveraging message brokers - RabbitMQ ● open source ● More flexibility for namespace groupings ● Independant control of each apps, services and VMs Megam queues - ➔ CloudStandup ➔ CloudPerNode
  • 18. megamd engine/scheduler ➔ Multiple transport protocols - mini servers that run concurrently (http, queues) in its own space ➔ Extensible provisioner approach (Docker, vm, unikernel, lxc ....) ➔ Action based ➔ Recoverable actions (good/bad) with state rollback facility though
  • 20. Concurrency - goroutines vs akka workers func (self *Server) ListenAndServe() error { log.Info("Starting admin interface on port") //var etcdServerList [2]string var queueInput [3]string queueInput[0] = "cloudstandup" queueInput[1] = "events" self.Checker() // Queue input for i := range queueInput { listenQueue := queueInput[i] queueserver := queue.NewServer(listenQueue) go queueserver.ListenAndServe() }
  • 21. control app state on the cloud - gulpd agent ● start ● stop ● restart ● apply policy - Bind - HA
  • 22. Full working of megam UI CLI API Gateway RabbitMQ megamd app1(gulpd) app2(gulpd) app3(gulpd) cloudstandup app1.megam.com app2.megam.com app3.megam.com Chef Docker
  • 23. What does megam provide? Hybrid Megam IaaS Megam CIB ● Easy to move from public to private cloud
  • 24. Demo Lets launch application, service & bind them seperately..
  • 25. Thank you Questions? Yeshwanth Kumar Platform Engineer Megam Systems (www.megam.io) Twitter: @megamsys Docs: docs.megam.io Devcenter: devcenter.megam.io