初创公司用 AWS 搭建高扩展性的架构 -- 如何用一周搭建好您公司的技术架构 张侠博士亚马逊 AWS 首席云计算企业顾问 CSDN 2015 年 7 月 23 日
今天的内容 讨论初创公司提的业务和技术要求 为您的初创公司搭建一个技术架构 为您初创公司成长腾飞做好技术准备 学习 AWS 云上的高扩展性架构设计思路
祝贺你, 新公司成立了! 客户市场 产品服务 商业模式 创业基金 人员团队 技术平台
初创公司的技术优先级 快速验证产品服务 为机会窗口而争分夺秒 小的技术团队没有历史包袱 关注于提供方案解决问题 避免工程大而全和返工 规避风险准备迎接高速成长
做出抉择 : 语言 框架 工具 1. 操作系统 : Linux: CentOS, Red Hat, SUSE, Ubuntu 2. 移动端 : ios, Android; HTML5 3. 网站前端 :PHP/ASP/JSP HTML/CSS 4. 前端框架 :Flex, jquery, Sencha 5. 开发工具 :Eclipse, SVN, SDK/IDE 6. 技术框架 :Struts, Springs, Hibernate; Velocity; Ruby on Rails 7. 开发语言 : Java, PHP, Python, Ruby, Net, Node.js, GO 8. 负载均衡 : 软件 : Nginx, Squid; 硬件 : F5, Ctrix Netscaler; 9. 数据库 : RDB: MySQL; NoSQL: MangoDB 10. 缓存 : Memcached, Redis 11. 内容发布 :CDN, DNS 12. 其它 : Lucent LAMP
常见架构工具的选择 PHP/ASP
架构的考虑 高性能 高可用 可扩展性 安全性 易于管理 成本可控 快速交付
高扩展性架构 支持客户 业务 访问 和数据的高速成长 难于规划, 成长无上限 扩展时性能不能受影响 无缝 : 只需平滑增加资源 高效 : 维持每个用户的低成本 其他要求 : 高可用性
AWS 平台上的新创企业
AWS 何帮助创业公司? 敏捷 快速 灵活 低启动成本, 随用随付费 不再需要猜测容量 集中精力创新 摆脱无差异化的体力活 数分钟就可全球化部署 IT 整体成本降低
在 AWS 构建系统的原则 设计时考虑任何系统都会失效 松耦合和无状态设计 设计可扩展性和自动缩放 安全贯穿设计始终体现在每层中 不要过多担心约束和失败 多考虑平行分布式处理 充分使用各种不同的服务
第一天 开发和私测
首台服务器 Server Image (AMI) Amazon Route 53 DNS service www.example.com Elastic IP THE server (e.g. Apache, MySQL)
第 2 天 推出和公测
需要更大的服务器 加大块存储容量 (EBS) 使用正确的虚机类型 (EC2 instance type) 按需改变虚机大小 (EC2 instance sizes) 了解方案非长期永久, 具过渡性质 还没有容错设计
分开网站应用和数据层 更多容量 每层分别扩展 细调每层的实例 实例类型 存储 注重安全 使用防火墙 Security groups 数据库置于 VPC 私有子网
应该如何选择数据库? SQL? NoSQL?
为什么通常使用关系型数据库? SQL 非常成熟, 功能丰富 许多现成的代码 工具和知识 扩展设计思路明确方法可行 * 现实 : 你将逐渐使用多种数据库 你将遇到一些工作负载, 使用 NoSQL 是更加适合的 为每项工作选择最合适的工具 * 对频繁读取的 apps
经验分享 : 关系型数据库很复杂 我们的经验关系型数据库如果想实现高可扩展性, 管理运营起来都往往很困难 管理不善的关系型数据库常常是数据不匹配和 IT 系统宕机下线的原因 针对初创企业团队小人员少尤为如此
AWS 托管的关系型数据库 关系型数据库 MySQL, Aurora, PostgreSQL, Oracle, SQL Server Amazon RDS 全面托管 Aurora
提高效率
部署静态内容 Amazon S3: 高可用性易扩展的对象存储 任何格式的静态文件 (JavaScript, CSS, images, videos) 用户可以直接上传 S3 URLs 可以从 S3 直接提供 让网站服务器集中处理动态内容
Amazon CloudFront 全世界分布的边缘站点 在边缘站点提供缓存 减少延迟 Reduce latency Reduce load on origin servers Static and dynamic content Even few seconds caching of popular content can have huge impact 优化连接 优化连接路径 重复使用连接 对于不能缓存的内容也有帮助 CloudFront
CloudFront 用于静态和动态内容 css/* js/* Images/* S3 bucket Static content Amazon Route 53 CloudFront distribution Default(*) EC2 instance(s) Dynamic content
数据库缓存 从内存读取速度更快 减少数据库的工作负载 3. And store in cache 1. If data in cache, return result Amazon ElastiCache Application server 2. If not in cache, read from DB RDS database
Amazon ElastiCache: 内存中的缓存 部署简单 完全托管 自动替换失效的节点 负责升级补丁管理 好的弹性扩展 兼容性 ElastiCache
第 3 天 客户上线
高可用性 Amazon Route 53 DNS service Amazon CloudFront www.example.com Web server S3 bucket for static assets ElastiCache node 1 RDS DB instance Availability Zone A
高可用性 Amazon Route 53 DNS service Amazon CloudFront www.example.com Web server Web server S3 bucket for static assets ElastiCache node 1 RDS DB instance Availability Zone A
高可用性 Amazon Route 53 DNS service Amazon CloudFront Elastic Load Balancing www.example.com Web server Web server S3 bucket for static assets ElastiCache node 1 RDS DB instance Availability Zone A
弹性负载均衡 托管的负载均衡服务 容错 健康检查 分布在多个可用区 弹性 - 自动扩展容量 ELB
高可用性 Amazon Route 53 DNS service Amazon CloudFront Elastic Load Balancing www.example.com Web server Web server S3 bucket for static assets ElastiCache node 1 RDS DB instance Availability Zone A
高可用性 Amazon Route 53 DNS service Amazon CloudFront Elastic Load Balancing www.example.com Web server Web server S3 bucket for static assets ElastiCache node 1 RDS DB instance Availability Zone A RDS DB standby
数据层高可用 Amazon Route 53 DNS service Amazon CloudFront Elastic Load Balancing www.example.com Web server Web server S3 bucket for static assets ElastiCache node 1 RDS DB instance Availability Zone A RDS DB standby
数据层高可用 Amazon Route 53 DNS service Amazon CloudFront Elastic Load Balancing www.example.com Web server Web server S3 bucket for static assets ElastiCache node 1 RDS DB instance Availability Zone A RDS DB standby ElastiCache node 2
用户访问 User Session Elastic Load Balancing 问题 : 状态通常存于本地磁盘 ( 没有共享 ) 简单解决 : ELB Session stickiness 更好方案 : DynamoDB Web server Logged in Web server Logged out
Amazon DynamoDB 托管的文件和键 - 值存储 易启动, 易扩展 到百万 IOPS 读和写 一致 快速的性能 持久性 : 特别适合存储 session data DynamoDB http://docs.aws.amazon.com/aws-sdk-php/guide/latest/feature-dynamodb-session-handler.html https://github.com/aws/aws-dynamodb-session-tomcat
第 4 天 让我们病毒式成长!
使用弹性 IT 代替猜测计算容量 Capacity Demand Capacity Unhappy Customers Demand Waste $$$ Traditional AWS Cloud Startups pre-aws
高可用数据层 Amazon Route 53 DNS service Amazon CloudFront Elastic Load Balancing www.example.com Web server Web server S3 bucket for static assets ElastiCache node 1 RDS DB instance Availability Zone A RDS DB standby ElastiCache node 2
高可用数据层 Amazon Route 53 DNS service Amazon CloudFront Elastic Load Balancing www.example.com Web server Web server S3 bucket for static assets ElastiCache node 1 RDS DB instance Availability Zone A RDS DB standby ElastiCache node 2
数据层高可用 Amazon Route 53 DNS service Amazon CloudFront Elastic Load Balancing www.example.com Web server Web server S3 bucket for static assets ElastiCache node 1 RDS DB instance Availability Zone A RDS DB standby ElastiCache node 2
自动缩放 Trigger auto-scaling policy 根据需要自动缩放计算实例 Amazon CloudWatch Feature Control Integrated to Amazon CloudWatch Instance types Details Define minimum and maximum instance pool sizes and when scaling and cool down occurs. Use metrics gathered by CloudWatch to drive scaling. Run Auto Scaling for on-demand and Spot Instances. Compatible with VPC. aws autoscaling create-auto-scaling-group --auto-scaling-group-name MyGroup --launch-configuration-name MyConfig --min-size 4 --max-size 200 --availability-zones us-west-2c, us-west-2b
准备工作 将应用分解成许多小的 功能单一的 松耦合的 无状态的构建单元
实际这意味着什么? 只在实例存储上保存暂时的数据 只要超过单一 http 调用的数据均需持久保存 然后进行存储 User uploads Amazon S3 Application Data User Sessions AWS DynamoDB Amazon RDS
然后 将应用分解成许多小的 功能单一的 松耦合的 无状态的构建单元 You can now Scale out with ease
然后 将应用分解成许多小的 功能单一的 松耦合的 无状态的构建单元 We can also Scale back with ease
进一步走捷径 这种架构虽然简单, 但你仍需 : 配置具体参数 将代码部署到多个实例 管理开发测试生产多个环境 (Dev, Test, Prod) 维护应用的多个版本 解决方案 : 使用 AWS Elastic Beanstalk
AWS Elastic Beanstalk (EB) 容易部署 监控和扩展的三层 web 应用 数据库架构 基础架构由 Elastic BeanStalk 管理和部署 你仍然掌控 预配置应用容器 容易更改配置 支持下述平台 :
使用 SQS 实现松耦合 将任务部署到队列服务 Amazon Simple Queue Service (SQS) SQS 通过队列服务为后端系统提供缓冲 异步处理 自己把握节奏 移除关键路径的延迟 Tight coupling Put Message Get Message Front End EC2 Instance SQS Back End EC2 Instance
第 5 天 增加更多功能
你的应用 Deployment & Management Security & Administration Elastic Beanstalk OpsWorks Cloud Formation Code Deploy Code Pipeline Code Commit CloudWatch Config Cloud Trail IAM Directory KMS Application Mobile SQS SWF App Stream Elastic Transcoder SES Cloud Search SNS Push Notifications Mobile Analytics Cognito Cognito Sync Database Analytics Enterprise Applications RDS DynamoDB ElastiCache RedShift EMR Kinesis Data Pipeline WorkSpaces WorkMail WorkDocs Network Compute Storage VPC Direct Connect Route 53 EC2 ECS Lambda ELB Auto Scaling EBS S3 Glacier CloudFront AWS 全球基础架构
AWS 的服务 本性可扩展和高可用 可扩展和高可用 自动化可配置与合适的架构配合 Elastic Load Balancing Amazon DynamoDB Amazon EC2 Amazon CloudFront Amazon Redshift Amazon VPC Amazon Route53 Amazon RDS Amazon S3 Amazon Elasticache Amazon SQS Amazon SES Amazon CloudSearch AWS Lambda
在扩大团队时保持对创新的关注 30% 70% On-Premise Infrastructure Your Business Managing All of the Undifferentiated Heavy Lifting AWS Cloud-Based Infrastructure More Time to Focus on Your Business 70% Configuring Your Cloud Assets 30%
第 6 天 继续快速成长
扩展关系型数据库 增强 RDS 实例 大的实例类型 更多存储 / 更多 PIOPS 只读副本 read replica ( 主 Master 从 Slave) 扩展到超出单一 DB 实例的计算容量 对 Amazon RDS for MySQL, PostgreSQL and Amazon Aurora 适用 写 => 主 master 复制有延迟 能容忍过期数据的读 => 只读副本 ( 从 ) read replica (slave) 高一致性的读 => 主 master
数据层高可用 Amazon Route 53 DNS service Amazon CloudFront Elastic Load Balancing www.example.com Web server Web server S3 bucket for static assets ElastiCache node 1 Availability Zone A RDS DB instance RDS DB standby ElastiCache node 2 Availability Zone B
数据层高可用 Amazon Route 53 DNS service Amazon CloudFront Elastic Load Balancing www.example.com Web server Web server S3 bucket for static assets ElastiCache node 1 Availability Zone A RDS DB instance RDS DB standby ElastiCache node 2 Availability Zone B
数据层高可用 Amazon Route 53 DNS service Amazon CloudFront Elastic Load Balancing www.example.com Web server Web server S3 bucket for static assets ElastiCache node 1 Availability Zone A RDS DB instance RDS DB standby ElastiCache node 2 Availability Zone B
如果你的 app 需要常写? 挑战 : 你迟早会达到主节点写操作或存储的极限 解决方案 : 联合 Federation ( 根据数据功能分到多个数据库上 ) 分片 Sharding ( 将一组数据分到多台主机上 )
数据库联合 将数据库表分成多个小的自立的数据库 跨功能函数查询很困难 对于单一较大的函数 表的帮助不大 Forums DB Users DB Products DB
分片水平扩展 将行的子集存入数据库分片 应用层面更加复杂 扩展性实际上无上限 运营的复杂性 User ShardID 002345 A 002346 B 002347 C 002348 B 002349 A Shard C Shard A Shard B
NoSQL 数据存储 牺牲关系型数据库的查询和性能, 以获取 更加灵活的数据模型 水平伸缩和可以预测的性能 DynamoDB 每个表可以预置读 / 写性能
大规模无缝扩展 分布式系统可以对读写均实现扩展 切片 Sharding + 复制 Replicas 自动分区 : 数据大小增加 增加预设容量 table
总结
无用户数上限的架构 Amazon Route 53 DNS service www.example.com Elastic Load Balancing SES Lambda CloudSearch SQS S3 bucket for static assets RDS read replica RDS read replica ElastiCache node 1 ElastiCache node 2 RDS DB instance RDS DB standby ElastiCache node 3 ElastiCache node 4 RDS read replica RDS read replica Availability Zone a Availability Zone b DynamoDB
复习总结 保持简洁和无状态 多使用托管的自缩放的服务 将 EC2 实例置于多可用区的自动缩放组内 选择合适的数据库类型 在多个层次巧用缓存 使用管理工具自动化部署
下一步? 请您阅读 : aws.amazon.com/documentation aws.amazon.com/architecture aws.amazon.com/start-ups 寻求帮助 : forums.aws.amazon.com aws.amazon.com/support
亚马逊 AWS 云创计划 AWS 云服务资源包 中国区云服务 - 5 千元至 10 万元 海外区云服务 - 1 千美元至 1 万 5 千美元 一对一技术咨询创业公司与 AWS 解决方案架构师进行一对一授课 AWS 技术支持 商用级别 AWS 技术支持 1 个月至 2 年 中国区服务 最高至 6 万元 海外区服务 最高至 1 万美元 AWS 专业培训支持 AWS 技术专业人员培训 AWS Essentials 在线学习免费进入自主学习实验室 ( 价值 80 美元 )
Thank You 关于亚马逊 AWS, 更多请访问网站 http://www.amazonaws.cn 博客 blog.csdn.net/awschina 微博 www.weibo.com/amazonaws 微信 AWS China