AWS上的微服务架构AWS上的微服务架构张芸(VivianZhang)AWS专业服务咨询顾问张芸(VivianZhang)AWS专业服务咨询顾问AWS专业服务内容迭代开发战略分析设计转化运维改进增值计划自动运维DevOps云上系统架构设计业务应用迁移业务应用优化大数据分析安全管理上云评估IT规划和路线图成本收益分析风险评估和合规审查组织结构变更评估议程•什么是微服务•微服务带来的挑战和改变•AWS上的微服务•Gilt案例分享什么是微服务什么是微服务什么是微服务?•微服务是一种软件体系结构类型,复杂的应用程序由许多微小并且相互独立的服务组成:–这些服务相互之间通过与语言无关的API通信;–这些服务是微小的,高度松耦合,并且只关注在一个小的任务;–便于系统构建的模块化方法;–服务是自治并且完整的,控制所有组件,包括UI、中间件、存取和事务。单体应用对比微服务架构单体应用微服务架构UIBusinessLogicDataAccessLayerDBUICatalogServiceAccountServiceRecommendationServiceCustomerServiceDBDBDB扩展立方微服务架构的特性--MartinFowler通过服务的组件化通过服务的组件化围绕业务能力围绕业务能力产品,而不是项目产品,而不是项目聪明的端点和哑管道聪明的端点和哑管道分散的治理和数据管理分散的治理和数据管理基础设施自动化/考虑到失败的设计基础设施自动化/考虑到失败的设计进化的设计进化的设计微服务带来的挑战和改变微服务带来的挑战和改变文化的改变SoftwaredevelopmentSystemadministrationIToperationsReleasemanagementProjectmanagementDevOps组织--单体应用•按照技术能力组织UITeamDBATeamAppLogicTeamWebTierAppTierDBOrganizationalStructureApplicationArchitecture组织--微服务•按照业务职责组织LoginRegistrationOrderPersonalizationAccountsteamMobilePersonalizationteamMobileteam微服务所有权:需求、技术选择、开发、质量、部署、支持服务发现/服务注册ServiceServiceClientServiceServiceServiceServiceServiceRegistry1.Register2.Discovery3.ConnectAPIGatewayAccountServiceRecommendationServiceCustomerServiceAPIGateway基于HTML5和Javascript的浏览器原生的Android和iPhone应用单一入口点•访问多个微服务•聚合结果•转换结果•协议转换分散的数据存储•每个服务选择自己的数据存储技术•降低Schema改变的影响•独立的可伸缩性•数据封闭在服务API之内ElastiCacheAmazonRDSDynamoDBAmazonRDSAccountServiceCustomerServiceCatalogService每个Container/实例中一个服务•单独监控•单独扩展•清晰的所有权•不可变的部署AccountServicecontainerorinstanceCatalogServiceCustomerServicecontainerorinstancecontainerorinstance监控和日志•监控–外部指标:延迟、错误率、响应时间–内部指标:基本系统指标、操作系统、应用程序•日志–收集、汇聚、实时分析部署:持续部署和持续交付UserExperienceBusinessServicesDataAccessLayerPackagedVersionProductionReleaseCommitBuildTestRelease部署自动化构建管道CommitBuildTestReleaseCommitBuildTestRelease微服务和Docker微小轻量级虚拟化自治且完整自包含的结构持续交付持续部署快速自动部署只关注在一个小的任务每个Docker只运行一个任务高度松耦合隔离性好AWS上的微服务AWS上的微服务AWS对微服务的支持计算资源数据库应用程序服务自动化部署监控和日志EC2ELBAutoScalingLambdaECSAMI路由和服务发现、负载均衡DynamoDBRDSElastiCacheSQSSWFSESSNSAPIGatewayElasticBeanstalkCodeDeployCodePipelineCodeCommitCloudWatchCloudTrailKinesisCatalogServiceNRecommendationServiceNAccountServiceNAWS上的微服务架构一:EC2+ELB+ASGAPIGatewayAccountServiceRecommendationServiceCatalogServiceAccountServiceLBRecommendationServiceLBCatalogServiceLBAutoScalinggroupAutoScalinggroupAutoScalinggroupAWS上的微服务架构二:EC2+ECS+ELBDockerTaskContainerInstanceAmazonECSContainerECSAgentELBInternetELBUser/SchedulerAPIClusterManagementEngineTaskContainerDockerTaskContainerInstanceContainerECSAgentTaskContainerDockerTaskContainerInstanceContainerECSAgentTaskContainerAZ1AZ2Key/ValueStoreAgentCommunicationServiceAWS上的微服务架构三:APIGateway+LambdaStaticwebcontentservedfromAmazonS3LambdaWebclientAPIGatewayMobileclientAmazonAPIGatewayAmazonRDSAmazonDynamoDBAWSLambdaAmazonCloudFront不断加速的计算平台几周内部署使用数年几分钟之内部署使用数周几秒钟之内部署使用数分钟/小时几微秒之内部署使用数秒On-PremisesAmazonEC2AmazonECSAWSLambdaGilt案例分享Gilt案例分享Gilt的旅程从单体应用到微服务架构2007:一个RubyonRails的单体应用JobsRubyonRailsmemcachePostgres2015:微服务剖析一个服务以及技术选择gilt-service-framework,,Java,JavascriptLog4j,CloudwatchCaveor服务的规模每个服务的代码行数(对数比例)每个服务的源文件数量--(包括build、config、xml、Java、Scala、Ruby)服务部署--EC2实例和DockerEC2实例选择每个服务运行的实例数量采用的EC2实例类型服务发现ZooKeeperElasticLoadBalancing(ELB)在AWS之上的部署ExistingDataCentreDual10-Gbdirectconnectline,2-mslatency.“LegacyVPC”MobileCommonPerson-alisationAdminData(1)DeploytoVPC(2)“Department”accountsforelasticity&DevOps微服务的好处•减少团队之间的依赖关系:更快的从代码到产品•大量的并行活动•每个微服务选择自己的技术、语言、框架•优雅地降级服务•可自由使用地代码:容易创新、容易失败、继续前进云计算的好处•自动化DevOps•降低使用新技术的门槛(AmazonDynamoDB、AmazonKinesis、…)•隔离•费用可见•安全工具(IAM)•良好的文档•方便的弹性•方便的混合•良好的性能微服务+云计算