23
Containers @ Wrapp Powered by AWS EC2 Container Service Jude D’Souza Solutions Architect @ Wrapp Phone: +46 767085740 Email: [email protected]

Wrapp: Transitioning to ECS

Embed Size (px)

Citation preview

Page 1: Wrapp: Transitioning to ECS

Containers @ WrappPowered by AWS EC2 Container Service

JudeD’SouzaSolutionsArchitect@WrappPhone:+46767085740Email: [email protected]

Page 2: Wrapp: Transitioning to ECS

AboutMe…q JudeD’Souza– Stockholm,Swedenß Karachi,Pakistan

[email protected]

q MS– DistributedSystemsKTHRoyalInstituteofTechnology,Stockholm,Sweden

q [email protected]

q Passionforbuildinglargescaledistributedsystems

Page 3: Wrapp: Transitioning to ECS

AboutWrapp…Wrapp deliverspersonaloffersandrewardsbasedonwhereyoushop,dineandthebrandsyoufollow.

q Microservice Architecture

q Infrastructureq 13ECSClustersq 50+Instancesq 90+Services

q TechnologyStackq OperatingSystem- Ubuntuq Consul,Registrator,AWS(EC2,ECS,Lambda),Docker,HAProxyq Monitoring– Sensu,Riemannq Logs- Logentries andSumoq Languages- Go,Python,Java

Page 4: Wrapp: Transitioning to ECS

Agenda• ArchitecturebeforeECS

– ServiceOrchestration– ServiceDiscovery– ServiceDeployments– ServiceAvailability&Scalability– ContainerRegistry

• TransitiontowardsECS– Microservice Architecture@Wrapp

• WhyECS?

• NextChallenges

• QA

Page 5: Wrapp: Transitioning to ECS

Howwedidit…BeforeECS(1/3)

ServiceOrchestrationq Viarunlist configs

Oninstanceboot:q Determineautoscaling groupq Pullrunlist forautoscaling groupq Runcontainersspecifiedinconfigq Addthesetosupervisor

misc ops api

miscAutoscaling group

opsAutoscaling group

api Autoscaling group

PULLRUNLISTCONFIGS

SampleRunlist configurationfile

ü ServiceOrchestrationServiceDeploymentsServiceAvailability&ScalabilityContainer Registry

Page 6: Wrapp: Transitioning to ECS

ServiceDeployments

q Find instanceswhereserviceisrunning(viaserf)

q SSHintotheseinstances

q Dorollingdeploy (Terminatecontainer,Launchcontainerwithnewversion)

misc ops api

miscAutoscaling group

- misc-i-abc 10.0.0.1 rewards/http/9090- misc-i-def 10.0.1.1 rewards/http/9090- misc-i-ghi 10.0.2.1 rewards/http/9090- ....- ....

Sampleserfdataforservices

SERFCLUSTER

opsAutoscaling group

apiAutoscaling group

Howwedidit…BeforeECS(2/3)

ü ServiceOrchestrationü ServiceDeploymentsServiceAvailability&ScalabilityContainer Registry

Page 7: Wrapp: Transitioning to ECS

ServiceAvailabilityq Supervisord

ServiceScalabilityq Serviceitselfcan'tscaleq Scaleonly byscalingautoscaling group

misc ops api

miscAutoscaling group

SERFCLUSTER

opsAutoscaling group

apiAutoscaling group

misc

Howwedidit…BeforeECS(3/3)

ContainerRegistryq Hostingourowncontainerregistryq Backedbys3

ü ServiceOrchestrationü ServiceDeploymentsü ServiceAvailability &Scalabilityü Container Registry

Page 8: Wrapp: Transitioning to ECS

TransitiontoECS

ServiceOrchestrationq Runlistsq SupervisorServiceDeploymentsq SupervisorServiceAvailabilityq SupervisorServiceScalabilityq EC2AutoscalingContainerRegistryq Self-hosting

ServiceDiscoveryq Serfq HAProxy

ServiceDiscoveryq Consulq Registratorq HAProxy

ServiceOrchestrationServiceDeploymentsServiceAvailabilityServiceScalability (withlambda)

AWSContainerRegistry

+Servicestats(cpu +memory)

+Servicemonitoring+ServiceProvisioning

Page 9: Wrapp: Transitioning to ECS

WrappMicroserviceArchitecture

PUBLICSUBNET

PRIVATESUBNET

ElasticLoadBalancer

api api api

Microservices

ZONEA ZONEB ZONEC

api.wrapp.com DNS

Page 10: Wrapp: Transitioning to ECS

Opsweb– ToolingaroundcontrollingourInfrastructure

ClusterOverview

Page 11: Wrapp: Transitioning to ECS

Opsweb– ToolingaroundcontrollingourInfrastructure

ServicesOverview

Page 12: Wrapp: Transitioning to ECS

Opsweb– ToolingaroundcontrollingourInfrastructure

InstancesOverview

Page 13: Wrapp: Transitioning to ECS

ServiceScalability(ConceptfromAmazon)

misc

miscAutoscaling group

ScalingAmazonECSServicesAutomaticallyUsingAmazonCloudWatchandAWSLambda:https://aws.amazon.com/blogs/compute/scaling-amazon-ecs-services-automatically-using-amazon-cloudwatch-and-aws-lambda/

CloudWatch AlarmSNSTopic AWSLambda

EC2ContainerService

ECSInstances

TriggerCloudWatch alarmfrom ECSMetrics(CPU/

Memory)

TriggerLambdafunctionfrom SNSTopic

+1DesiredCount inService

Page 14: Wrapp: Transitioning to ECS

Service(CPU/Memory)Provisioning

api

emails

rewardsauth

notifications

eventbus

TypicalECSInstance

ü MemoryallocationbyService

ü AllocateCPUUnitsbyService

ü EfficientResourceutilization(Container placement)

Page 15: Wrapp: Transitioning to ECS

ContainerLogging

TypicalECSInstance

q Logspout

q Rsyslog

q LogEntries

Logentries:https://logentries.comLogspout: https://github.com/gliderlabs/logspout

logspout

rsyslog

ContainerslaunchedviaECS

LogrouterforDocker

Forwardslogstologentries

Page 16: Wrapp: Transitioning to ECS

WhyECS?

q OurExperience

q Generally goodservice (ECSisoK)

q Greatsupport

q Wedon’tneed tohosttheseservicesourselvesonAWS

q Alwaysimprovingtomaketheirservicesbetterandbetter

ü Supportsbuilt-inservicediscovery,loadbalancingandrouting

ü WeaveFlux:Supportsbuilt-inservicediscovery,loadbalancingandrouting

ü DockerSwarm:Supportsorchestratingcontainers

ü Fleet - ContainerOrchestration

Page 17: Wrapp: Transitioning to ECS

api

8080

Consulserver-b

Consulserver-a

Consulserver-c

users

8082

auth

8081

users

8082

Registrator Registrator Registrator

ConsulAgentConsulAgentConsulAgent

Key/valuestore

Servicecatalog

10.0.0.1 10.0.0.2 10.0.0.3

ServiceDiscovery@Wrapp(1/2)HAConsulCluster

Page 18: Wrapp: Transitioning to ECS

ServiceDiscovery@Wrapp(2/2)

Consulserver-b

Consulserver-a

Consulserver-c

users

8083

Registrator

ConsulAgent

10.0.0.3

HAProxy

auth

8082

ConsulTemplate

frontend users-inbind users:80mode httpdefault_backend users

backend usersserver Server-a 10.0.0.1:8080 …server Server-c 10.0.0.3:8080 …

####

frontend auth-inbind auth:80mode httpdefault_backend auth

backend authserver Server-a 10.0.0.1:8081 …server Server-c 10.0.0.3:8081 …

>> curl users/v1/users/1{"name": "jude""gender": "male"

}

HAConsulCluster

DNSHack(192.168.x.x)

Page 19: Wrapp: Transitioning to ECS

NextChallenges(1/2)– Shortcomingsperceived…

Built-in(likekube-proxy,weave-proxy)?q ServiceDiscoveryq ServiceRoutingq ServiceLoadbalancing

Approach1:ELBPerservice?q Costly- 90+services,70+ELBs

Approach2:SingleELBforallservices?ü ServiceRoutingworksü ServiceLoadbalancingworksq Nohealthcheckperserviceq NowaytoreturnHTTP503

(butpossibleviahaproxy httpcheck option)

Benefits:q RemovestoolslikeConsulandRegistrator

ElasticLoadBalancer

8080 8081 8082

ECSBoto3:create_service()

Route53: ELB.dns = elb-services

frontend users-inbind users:80mode httpdefault_backend users

backend usersserver users elb-services:8080 …####

>> curl users/ping

SINGLEELBFORMULTIPLESERVICESAPPROACH

Page 20: Wrapp: Transitioning to ECS

NextChallenges(2/2)– Shortcomingsperceived…

Ø Cron schedulingq Setupecs taskstorunoncron schedule

Ø ECSEventstreamq Actionables oncertainevents(whendeploycompletes)

Ø ECSContainerLogging

Ø OptionallyIntegrateECSClusterwithEC2Autoscaling Group

Page 21: Wrapp: Transitioning to ECS

Summary

q TheWrapp ArchitecturebeforeECS

q TransitiontoECS

q ServiceDiscovery@WrappwithConsul,Registrator andHAProxy

q OurperceivedshortcomingsfromECSq Built-inServiceDiscoveryq Cron schedulingonTasksq Eventstream

Page 22: Wrapp: Transitioning to ECS

Questions

?

Contact:JudeD’SouzaEmail:[email protected]:+46767085740Twitter:Wrapp Tech@wrapp_tech

Page 23: Wrapp: Transitioning to ECS