Managing Containers with Helix
Kanak Biscuitwala Jason Zhang Apache Helix Committers @ LinkedIn
helix.apache.org @apachehelix
Managing Containers with Helix Kanak Biscuitwala Jason Zhang - - PowerPoint PPT Presentation
Managing Containers with Helix Kanak Biscuitwala Jason Zhang Apache Helix Committers @ LinkedIn helix.apache.org @apachehelix Intersection of Job Types Oracle Oracle DB DB Intersection of Job Types Oracle Oracle DB DB Backup Backup
Kanak Biscuitwala Jason Zhang Apache Helix Committers @ LinkedIn
helix.apache.org @apachehelix
Backup Backup
Backup Backup HDFS ETL ETL
Backup Backup HDFS ETL ETL
A B
nearline C batch A1 A1 A2 A3 B1 C1 C2 C3 B2 B3 C2 B4 B5 C2 C4
A B C A1 A1 A2 A3 B1 C1 C2 C3 B2 B3 C2 B4 B5 C2 C4
DB Backup ETL
Machine
Container Process VM
Task Task Process No Isolation
Machine
Container Process VM
Task Task Process 128 MB 128 MB 128 MB Process Process Process No Isolation VM-based Isolation
Machine
Container Process VM
Task Task Process 256 MB 64 MB 128 MB 128 MB 128 MB Process Process Process Process Process No Isolation VM-based Isolation Container-based Isolation
Machine
Container Process VM
64 MB 64 MB 64 MB 128 MB 128 MB 256 MB
64 MB 64 MB 128 MB 256 MB 128 MB 64 MB
Machine
Container
64 MB 64 MB 128 MB 256 MB 128 MB 64 MB
Machine
Container A A A B B C Process
64 MB 64 MB 128 MB 256 MB 128 MB 64 MB
Machine
Container A A A B B C Process
64 MB 64 MB 128 MB 256 MB 128 MB 64 MB
Machine
Container A A A B B C Process
256 MB
Machine
Container Process
256 MB Process 1
Machine
Container Process
256 MB Process 1
Machine
Container Process
384 MB
Machine
Container Process
384 MB Process 1
Machine
Container Process
384 MB 128 MB
Machine
Container Process
384 MB Process 1 128 MB
Machine
Container Process Process 2
64 MB 64 MB 128 MB 256 MB 128 MB 64 MB
Machine
Container A A A B B C Process
64 MB 64 MB 128 MB 128 MB
Machine
Container A A B B Process
64 MB 64 MB 128 MB 128 MB
Machine
Container A A B B Process 256 MB C 64 MB A
64 MB 64 MB 128 MB 256 MB 128 MB 64 MB
Machine
Container SLAVE SLAVE MASTER B B C Process
64 MB 64 MB 128 MB 128 MB
Machine
Container SLAVE SLAVE B B Process
Machine
Container Process 256 MB 50% 256 MB 50%
Machine
Container Process
Machine
Container Process 128 MB 33% 128 MB 33% 128 MB 33%
Container-Based Solution Utilization Application requirements define container size Fault Tolerance New container is started Scaling Workload is repartitioned and new containers are brought up Discovery Existence
Machine
Container A A B Task B C C
Machine
Container Task
Task 1
Machine
Container Task
Task 1
Machine
Container Task
Task 1
Machine
Container Task Task 1
Machine
Container Task Task 1
384 MB 128 MB
Machine
Container Task
384 MB Task 1 128 MB Task 2
Machine
Container Task
384 MB Task 1 Task 2
Machine
Container Task
Task 1 Leader Task 2 Leader Task 3 Leader Task 2 Standby Task 3 Standby Task 1 Standby Task 2 Standby Task 1 Standby Task 3 Standby
Machine
Container
Task 1 Leader Task 2 Leader Task 2 Standby Task 3 Standby Task 1 Standby Task 3 Standby Task 3 Leader
Machine
Container
Task 1 Leader Task 2 Leader Task 2 Standby Task 3 Standby Task 1 Standby Task 3 Standby Task 3 Leader
Machine
Container
Task 1 Leader Task 2 Leader Task 2 Standby
Machine
Container
Task 1 Standby
Task 1 Leader Task 2 Leader Task 2 Standby
Machine
Container
Task 1 Standby
T4 T5 T6 T1 T2 T3
Machine
Container Task
T4 T5 T6 T1 T2 T3
Machine
Container Task
T4 T5 T6 T1 T2 T3
Machine
Container Task
T4 T5 T6 T1 T2 T3
Machine
Container Task
Container Solution Task + Container Solution Utilization Application requirements define container size Tasks are distributed as needed to a minimal container set as per SLA Fault Tolerance New container is started Existing task can assume a new state while waiting for new container Scaling Workload is repartitioned and new containers are brought up Tasks are moved across containers Discovery Existence Existence and state
Capacity Planning Provisioning Fault Tolerance State Management
Allocating physical resources for your load Deploying and launching tasks Staying available, ensuring success Determining what code should be running and where
Controller NODES (Participants) Spectators Controller Controller Manage TASKS
Rebalancer Task Assignment
Constraints Nodes “single master” “no more than 3 tasks per machine”
ResourceAssignment computeResourceMapping( RebalancerConfig rebalancerConfig, ResourceAssignment prevAssignment, Cluster cluster, ResourceCurrentState currentState);
Based on the current nodes in the cluster and constraints, find an assignment of task to node
ResourceAssignment computeResourceMapping( RebalancerConfig rebalancerConfig, ResourceAssignment prevAssignment, Cluster cluster, ResourceCurrentState currentState);
Based on the current nodes in the cluster and constraints, find an assignment of task to node
Dynamic Container Allocation Container Isolation Automated Service Deployment Resource Utilization Monitoring
Based on some constraints, determine how many containers are required in this system
Fixed CPU Memory Bin Packing
We’re working on integrating with monitoring systems in order to query for usage information
Based on some constraints, determine how many containers are required in this system
TargetProviderResponse evaluateExistingContainers( Cluster cluster, ResourceId resourceId, Collection<Participant> participants); class TargetProviderResponse { List<ContainerSpec> containersToAcquire; List<Participant> containersToRelease; List<Participant> containersToStop; List<Participant> containersToStart; }
Fixed CPU Memory Bin Packing
We’re working on integrating with monitoring systems in order to query for usage information
Rebalancer Task Assignment
Constraints Nodes
Target Provider
Rebalancer Task Assignment
Constraints Nodes
Target Provider
Given the container requirements, ensure that number
YARN Mesos Local
Given the container requirements, ensure that number
ListenableFuture<ContainerId> allocateContainer(ContainerSpec spec);
deallocateContainer(ContainerId containerId);
startContainer(ContainerId containerId, Participant participant);
stopContainer(ContainerId containerId);
YARN Mesos Local
Rebalancer Task Assignment
Constraints Nodes
Target Provider Container Provider
Capacity Planning Provisioning Fault Tolerance State Management
Target Provider Container Provider Existing Helix Controller (enhanced by Provisioner) Existing Helix Controller (enhanced by Provisioner)
Resource Provider
submit job Resource Provider Client
submit job Resource Provider Controller Container
Provisioner Rebalancer
Client
App Launcher
submit job Resource Provider Controller Container
Provisioner Rebalancer
Client container request
App Launcher
submit job Resource Provider Controller Container
Provisioner Rebalancer
Client container request Participant Container
Participant Launcher Helix Participant App App Launcher
submit job Resource Provider Controller Container
Provisioner Rebalancer
Client container request Participant Container
Participant Launcher Helix Participant App App Launcher
assign tasks
HDFS/Common Area
Client Resource Manager Application Master Container Node Manager Node Manager submit job node status node status container request assign work status App Package grab package
HDFS/Common Area
Client Resource Manager Application Master Container Node Manager Node Manager submit job node status node status container request assign tasks status
Helix Controller Rebalancer Helix Participant App
App Package grab package
HDFS/Common Area
Scheduler Slave
Scheduler Mesos Master Slave Machine Slave Machine Mesos Slave Mesos Slave
node status node status Mesos Executor grab executor Executor Package
Scheduler Slave
Helix Controller
Scheduler Mesos Master Slave Machine Slave Machine Mesos Slave Mesos Slave
node status node status assign tasks
HDFS/Common Area
Mesos Executor grab executor Helix Executor Package
Helix Participant/App
P1 Backup P2 Backup HDFS ETL ETL
P0 Backup ETL
P1 Backup P2 Backup HDFS ETL ETL
P0 Backup
Client Resource Manager submit job container request assign work status node status Application Master Node Manager
Helix Controller Rebalancer
Container Node Manager node status
Helix Participant
Oracle Partition 0 Partition 1
P1 Backup ETL
appConfig: { config: { k1: v1 } } appPackageUri: 'file://path/to/myApp-pkg.tar' appName: myApp services: [DB, ETL] # the task containers serviceConfigMap: {DB: { num_containers: 3, memory: 1024 }, ... ETL: { time_to_complete: 5h, ... }, ...} servicePackageURIMap: { DB: ‘file://path/to/db-service-pkg.tar', ... } ...
appConfig: { config: { k1: v1 } } appPackageUri: 'file://path/to/myApp-pkg.tar' appName: myApp services: [DB, ETL] # the task containers serviceConfigMap: {DB: { num_containers: 3, memory: 1024 }, ... ETL: { time_to_complete: 5h, ... }, ...} servicePackageURIMap: { DB: ‘file://path/to/db-service-pkg.tar', ... } ...
TargetProvider specification
public class MyQueuerService extends StatelessParticipantService { @Override public void init() { ... }
public void onOnline() { ... }
public void onOffline() { ... } }
public class BackupTask extends Task { @Override public ListenableFuture<Status> start() { ... }
public ListenableFuture<Status> cancel() { ... }
public ListenableFuture<Status> pause() { ... }
public ListenableFuture<Status> resume() { ... } }
public class StoreStateModel extends StateModel { public void onBecomeMasterFromSlave() { ... }
}
class ¡RoutingLogic ¡{ ¡ ¡ ¡ ¡public ¡void ¡write(Request ¡request) ¡{ ¡ ¡ ¡ ¡ ¡ ¡partition ¡= ¡getPartition(request.key); ¡ ¡ ¡ ¡ ¡ ¡List<Participant> ¡nodes ¡= ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡routingTableProvider.getInstance( ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡partition, ¡“MASTER”); ¡ ¡ ¡ ¡ ¡ ¡nodes.get(0).write(request); ¡ ¡ ¡ ¡} ¡
¡ ¡ ¡ ¡ ¡partition ¡= ¡getPartition(request.key); ¡ ¡ ¡ ¡ ¡ ¡List<Participant> ¡nodes ¡= ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡routingTableProvider.getInstance(partition); ¡ ¡ ¡ ¡ ¡ ¡random(nodes).read(request); ¡ ¡ ¡ ¡} ¡ }
Oracle Oracle Oracle
DB
Change Capture
Change Consumers Index Search Index User Writes
Data Replicator
Backup/Restore
ETL
HDFS
Analytics
Jason zzhang@apache.org Kanak kanak@apache.org Website helix.apache.org Dev Mailing List dev@helix.apache.org User Mailing List user@helix.apache.org Twitter @apachehelix