D baa s_in_xiaomi

3,566 views

Published on

DBaaS In Xiaomi

Published in: Internet
0 Comments
7 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
3,566
On SlideShare
0
From Embeds
0
Number of Embeds
7
Actions
Shares
0
Downloads
96
Comments
0
Likes
7
Embeds 0
No embeds

No notes for slide

D baa s_in_xiaomi

  1. 1. DBaaS In Xiaomi 李彬
  2. 2. About me • 2008 ~ 2011 就职于百度,负责十分、凤巢、北 斗等核心商业数据库 • 2011 ~ 2012 合伙创业 • 2012 ~ 至今 就职于小米,负责数据库团队建设、 数据库优化等工作,关注自动化运维,云技术等
  3. 3. Agende 为什么要做DBaaS 怎么做的 DBaaS使用示例 后续计划
  4. 4. 传统部署——运维驱动
  5. 5. 传统部署 用户 • 响应周期长 • 等待时间不可控 DBADBA • 重复、持续的工作 • 误操作、遗漏操作 • 很多事情还需要人工响应、处理 • 快速增长的集群带来的压力
  6. 6. DataBase As A Service • 把数据库做成标准化服务 目标目标 快 捷快 捷 简 单简 单 高可用高可用 低维护低维护
  7. 7. 可选方案 • 公有云 • 数据安全 • 可控性 • 私有云 • 无成熟的开源方案 • 自己动手,丰衣足食 数据 安全 成本 可控 性
  8. 8. 需求 覆盖面 数据库 生命 周期 数据库 生命 周期 常规 操作 常规 操作 可用性 无新增 单点 隐患 无新增 单点 隐患 容错 能力 容错 能力 扩展性 支持多 种类型 数据库 支持多 种类型 数据库 性能 无额外 性能 损耗 无额外 性能 损耗 易用性 使用 便捷 使用 便捷 维护 成本低 维护 成本低
  9. 9. 整体设计 服务 发现 服务器管理 服务部署 实例管理 数据管理 运行 状态 服务 发现 服务器管理 服务部署 实例管理 数据管理 运行 状态
  10. 10. 服务器管理 管理服务器 故障检测 类型管理 配置管理 管理资源 资源分配 使用情况记录 资源回收
  11. 11. 服务部署 生成镜像生成镜像 申请资源申请资源 部署应用部署应用 健康检查健康检查卸载应用卸载应用回收资源回收资源
  12. 12. 实例管理 角色管理角色管理 配置管理配置管理 实例启停实例启停 状态监控状态监控故障处理故障处理
  13. 13. 数据管理 数据 初始化 数据 初始化 数据迁移数据迁移 备份 恢复 备份 恢复 数据操作数据操作
  14. 14. 服务发现 • 数据库实例地址信息 • 数据库角色信息 • 感知数据库实例变更情况
  15. 15. 运行状态 性能指标性能指标 资源使用 情况 资源使用 情况 角色信息角色信息 报表报表
  16. 16. DBaaS Architecture
  17. 17. Framework • 每种数据库服务有自己的Framework • 实例管理 • 数据管理 • 故障管理
  18. 18. DBaaS MySQL
  19. 19. DBaaS MySQL特点 • 快速部署 • 1分钟内完成集群部署 • 单实例 & 多实例 • 可支持单机单实例部署,独占所有资源 • 也可单机多实例部署,提升硬件利用率 • 高可用 • 故障对服务透明 • 从库挂掉,自动重建一个从库实例,不影响访问 • 主库挂掉,1分钟内恢复主库功能 • 自动保持实例数不变
  20. 20. DBaaS MySQL特点 • 快速增加、减少只读实例 • 数据备份 • 可恢复到30天内的任意时间点 • 支持Proxy • 统一入口 • 负载均衡 • 服务发现 • 状态报告 • 资源使用情况 • 数据库运行报表
  21. 21. MySQL REST API • POST /v1/mysql • 创建并启动新的MySQL集群 • GET /v1/mysql/{appId} • 获取MySQL集群appId的信息 • DELETE /v1/mysql/{appId} • 删除MySQL集群 appId • DELETE /v1/mysql/{appId}/tasks/{taskId} • 删除MySQL集群appId的只读实例taskId • PUT /v1/mysql/{appId}/scaleout • 扩容数据库集群appId的只读实例数
  22. 22. 创建集群 POST /v1/mysql HTTP/1.1 Accept: application/json Content-Type: application/json; charset=utf-8 { "app_id": "/department/product/service", "instances":4, "mem":12000, "cpus":2, "disk":0 } HTTP/1.1 200 OK Content-Type: application/json { "id": "/department/product/service", "status": "ok", "message": "User: dbUser, Pass: dbPass" }
  23. 23. 创建示例
  24. 24. 删除集群 • DELETE /v1/mysql/{appid} DELETE /v1/mysql/department/product/service HTTP/1.1 Accept: application/json Content-Type: application/json; charset=utf-8 HTTP/1.1 200 OK Content-Type: application/json { "id": "/department/product/service", "status": "ok", "message": "Delete mysql app successful" }
  25. 25. 增加只读实例 • PUT /v1/mysql/{appId}/scaleout PUT /v1/mysql/department/product/service/scaleout HTTP/1.1 Accept: application/json Content-Type: application/json; charset=utf-8 { "instances": 6 } HTTP/1.1 200 OK Content-Type: application/json { "id": "/department/product/service", "status": "ok", "message": "MySQL scale out success" }
  26. 26. 减少只读实例 • DELETE /v1/mysql/{appId}/tasks/{taskId} DELETE /v1/mysql/department/product/service/tasks/department_product_service_mysql.7a4f4f ac-6031-11e5-b804-ecf4bbd357d4 HTTP/1.1 Accept: application/json Content-Type: application/json; charset=utf-8 HTTP/1.1 200 OK Content-Type: application/json { "id": "/department/product/service", "status": "ok", "message": "Delete mysql task department_product_service_mysql.7a4f4fac-6031- 11e5-b804-ecf4bbd357d4 successful" }
  27. 27. Proxy REST API • POST /v1/proxy • 创建新的Proxy集群 • GET /v1/proxy/{appId} • 获取数据库集群appId的Proxy信息 • DELETE /v1/proxy/{appId} • 删除Proxy集群 appId • PUT /v1/proxy/{appId}/scaleout • 扩容ProxyappId的实例数 • DELETE /v1/proxy/{appId}/tasks/{taskId} • 删除Proxy appId的实例taskId
  28. 28. 创建数据库Proxy POST /v1/proxy HTTP/1.1 Accept: application/json Content-Type: application/json; charset=utf-8 { "app_id": "/department/product/service", "instances":2, "mem":120, "cpus":2, "disk":0 } HTTP/1.1 200 OK Content-Type: application/json { "id": "/department/product/service", "status": "ok", "message": "Proxy deploy successful" }
  29. 29. 删除Proxy • DELETE /v1/proxy/{appId} DELETE /v1/proxy/department/product/service HTTP/1.1 Accept: application/json Content-Type: application/json; charset=utf-8 HTTP/1.1 200 OK Content-Type: application/json { "id": "/department/product/service", "status": "ok", "message": "Delete proxy app /department/product/service successful" }
  30. 30. 扩容Proxy实例数 • PUT /v1/proxy/{appId}/scaleout PUT /v1/proxy/department/product/service/scaleout HTTP/1.1 Accept: application/json Content-Type: application/json; charset=utf-8 { "instances": 3 } HTTP/1.1 200 OK Content-Type: application/json { "id": "/department/product/service", "status": "ok", "message": "Proxy scale out success" }
  31. 31. 删除Proxy实例 • DELETE /v1/proxy/{appId}/tasks/{taskId} DELETE /v1/proxy/department/product/service/tasks/department_product_service_proxy. 7a4f4fac-6031-11e5-b804-ecf4bbd357d4 HTTP/1.1 Accept: application/json Content-Type: application/json; charset=utf-8 HTTP/1.1 200 OK Content-Type: application/json { "id": "/department/product/service", "status": "ok", "message": "Delete proxy task department_product_service_proxy.7a4f4fac-6031-11e5- b804-ecf4bbd357d4 successful" }
  32. 32. DBaaS Redis
  33. 33. DBaaS Redis特点 • 快速部署 • 1分钟内完成集群部署 • 自动分片 • 主从关系 • 高可用 • 故障对业务透明 • 从实例挂掉,自动重建一个从实例 • 主实例挂掉,秒级完成切换 • 自动保持实例数不变
  34. 34. Redis REST API • POST /v1/redis • 创建并启动新的Redis cluster集群 • GET /v1/redis/{appId} • 获取Redis集群appId的信息 • DELETE /v1/redis/{appId} • 删除Redis集群 appId • DELETE /v1/redis/{appId}/tasks/{taskId} • 删除Redis集群appId的实例taskId
  35. 35. DBaaS带来的改变 • 对于用户 • 使用的是资源,而不再是具体的服务器 • 按需使用资源,可以节省成本 • 无需关注底层结构 • 自助式管理,交付周期短 • 降低数据库使用门槛,有利于提高开发、测试效率 • 对于运维人员 • 可以减少基础运维工作量 • 更多精力投入优化、开发 • 提高人机比,提高运维效率
  36. 36. Next…
  37. 37. 谢 谢! 虚位以待: • 高级运维研发工程师 • 高级数据库开发工程师 • 高级应用运维工程师 • 高级系统运维工程师 简历请砸向这里: libin_dba@xiaomi.com

×