机器人也上云-创业团队的阿里云实践心得

本文正在参加“最佳上云实践”评选,来给我们投票吧:(编号11)

机器人也上云

想到机器人,相信很多人会联想到斯瓦辛格主演的《终结者》系列电影。那部系列片里描绘了完全存在于云端的人工智能“SkyNet”。从科幻小说,到科幻电影,到真正的科技实践中,云计算都是解决包括人工智能在内的机器人相关技术的关键和基础。
我们是一个负责实施机器人 Pepper 本地化的创业小团队,我们选择阿里云全面部署我们的业务,成了自然而然的选择。但是,究竟如何使用云计算,或者说怎么让“机器人上云”,我们还是做了不少工程思想和技术应用上的小革新的。

项目背景

我们是一个标准意义上的创业团队。人员不富裕,项目很紧急等等凡是创业团队会遇到的问题,我们都有遇到。选择云计算在某种意义上,是快速搭建业务,技术性回避创业团队人员匮乏劣势的一个最佳选择。事实上,我们至今为止,整个平台开发团队(负责所有云上业务的团队)还是一个10人以下规模的小团队。而我们需要面对的项目,包括短期内搭建多环境架构的研发体系、建立基本业务平台、内部运营平台、基础数据平台、海外 AWS Base 的服务平台的整体迁移等十数个大小项目。

在这些项目中,最能体现使用阿里云计算所带来的效率最大化、可用性最优的项目是多环境网络架构和 AWS 服务整体迁移两项。本文将侧重介绍这两方面相关内容。

网络架构

俗话说,麻雀虽小五脏俱全。如果需要以工程化的要求来进行团队合作开发,一些标准的工程环境是必不可少的。众所周知,一般的在线工程环境包括:测试环境(QA)、预发布环境(Staging)、生产环境(Production)三大部分。我们在阿里云上完整构建了上述环境,下面是整体网络的一个概览图:

  1. 测试环境:

    测试环境是一个独立的 VPC,拥有独立的配属于测试环境的一级域名(只做 VPC 内解析,不做公网解析)、内网 DNS、中间件和阿里云基础服务。

    为了测试环境的安全和日常使用的便利,我们通过 OpenVPN 打通测试环境和办公网络,后续视业务房展会考虑专线接入。

  2. 预发布环境:

    预发布环境和线上环境同属于一个 VPC,公用同一套阿里云基础服务,但是 DNS、配置中心和中间件是独立的。预发布环境的域名和线上保持一致,测试验证的时候需要手动绑定(或者使用),这样做是为了尽量保持预发布环境和生产环境的高度一致。

  3. 生产环境:

    在生产环境中,我们除了使用了包括负载均衡、容器服务、RDS等大量的阿里云基础服务之外,还基于云监控和 ELK 构建了我们的监控系统,详见监控方案章节。

  4. API网关:

    由于我们整体使用了前后端分离的架构,在我们的网络架构里还有一个特点是基于 Zuul 搭建了一套API网关。定义了统一的前后端交互协议,包括采用 JWT 协议来鉴权,以 RESTful 风格作为接口标准等等。

Docker 容器服务实践

近年来 Docker 已然成为了 DevOps 圈里的大热门。作为一个自认为追求效率的小而美的团队,响应热点显然不是我们的目的,真正帮助到团队、能够提升生产效率,才是我们选择这一技术的根本原因。

为什么选择 Docker

  1. 契机

    在为我们的项目做技术选型的时候,适逢阿里云容器服务上线,我们发现阿里云的容器服务支持 Docker Compose,提供了完整的配置和容器部署托管方案,同时还提供了镜像加速、镜像仓库等功能方便中国用户使用的利器并且兼容标准的 Docker API。

  2. 成本

    这里说的不是虚拟化节约的服务器成本,而是采用了 Docker 容器环境,使得团队成员间、各环境间,协调开发资源、环境时节省了大量的时间成本。选择 Docker 非常重要的一点就是它改变了传统基于代码包的部署方式,而是可以基于完整的 OS 镜像进行部署。在以往的从业经验中,遇到过非常多因为系统配置不一致、软件版本不一致、代码包不一致导致的 Bug 甚至严重的线上故障,而通过使用 Docker 镜像部署的方式,使得我们的测试、预发布、生产环境的代码保持高度一致,大大减少环境配置差异所带来的线上故障。

  3. 架构

    容器化的部署架构,可以使项目更多的采用“微服务”理念的独立服务来实现各个功能。我们采用前后端分离的架构体系,服务端使用 Spring Cloud 构建各种微服务,通过 API 网关暴露给机器人、Web 站点前端和移动客户端。

  4. 集成

    在创业团队只有一个运维人员、一个测试人员的前提下,如何快速、高质量的持续交付产品是一个挑战,而Docker 有效地帮助解决了这个问题。(后文相关章节详述)

  5. 弹性

    对于创新项目来说,业务的增长有非常多的不确定性,业务推广期的访问峰值和调整期的谷值对于服务器压力的不同需求是需要考虑的现实问题。Docker 可以使服务具备快速扩容或缩容的能力,以应对这类弹性需求。

部署机制 && 持续集成

Docker 在我们的部署机制里,是由始至终的一贯角色。我们利用阿里云的 Docker 镜像的私有化托管服务来统一存储我们定制的镜像。在开发环境,我们使用官方的 PC 端 Docker 应用来部署调试服务;在云端三大环境,我们直接 pull 寄存于托管服务的镜像,在阿里云的容器服务中直接启动镜像。而操作线上的镜像创建、集成、打包、测试等一系列动作的工作,我们交给自己的 Jenkins 服务来实现。

即使配置好的 Jenkins 和阿里云提供的容器服务配合,已经大大简化了工作。但是 Docker 的使用依然不是一下子就对所有开发人员那么友好的。因为虽然 Docker 好处很多,但其发展到今天,已经形成了相对复杂的使用、配置、部署的体系,本身还是有一定的学习成本的。为了进一步降低开发人员学习 Docker 的难度,我们定义了一条应用规范和一些标准 Dockerfile 模板。大多数情况下开发人员只需要将 Dockerfile 放到项目中的指定文件路径即能顺利使用这个容器服务了。

全栈 Docker

我们有一个为了部署纯前端小程序的标准 Dockerfile 模板,根据这个模板可以轻松建立一个 nginx 的定制化 docker 镜像。我们将前端代码打包输出至项目的 dist 目录,将该目录置入镜像中,通过必要的 nginx conf 文件的配置,我们就可以轻松获得一个前端部署的标准容器。由此,我们将前端工程师的工作和其他所有工程师一样全部纳入同一个 Docker 化的工程体系中,从而实现了“全栈” Docker 的目标。

Docker环境下的日志查看

在实践中我们未将 Docker 容器直接暴露给开发人员,那么如何做日志查看呢?

  • 针对测试环境和预发环境,我们提供了一个脚本可以方便的使用 docker logs 查询日志。
  • 在线上环境,我们将日志接入了 SLS 并使用正则表达式解析日志,开发人员则可以通过 SLS 控制台查看线上日志。

Docker环境下的微服务

我们的微服务使用的是 Spring Cloud 中的 Netflix 相关组件,注册中心使用的是 Eureka Server。
为什么不用阿里开源的 Dubbo+Zookeeper 方案?是因为我们的系统里有不少异构系统,RESTful API 的暴露方式方便各种语言接入。而 Dubbo 没有完整的网关和流控的解决方案,所以从快速的搭建业务系统的角度我们选择了 Spring Cloud。
我们参考了阿里云社区的这篇文章(点击查看详情),但依然在实践中解决了遇到的不少问题,比如以下这些:

  • 由于 Docker 容器每次重新部署,容器 IP 都可能变化,因此对于客户端配置 Eureka Server 的地址带来了一些麻烦。我们一开始将 Eureka Server 也通过容器服务暴露自定义域名访问,但是经常会遇到超时问题。我们的解决方案是将 Eureka Server 通过 constraint 固定到具体的节点上,并向节点暴露端口,client 直接配置节点 IP。
  • 容器 IP 变更带来的另一个问题是由于 Eureka Server 的缓存(保护)机制,在每次容器 IP 变更的会存在脏链接,因此我们为 Eureka Server 增加了如下配置:
eureka.server.enable-self-preservation=false //关闭自主保护

eureka.server.eviction-interval-timer-in-ms=4000 //缩短清理间隔到4秒

eureka.client.healthcheck.enabled=true //开启健康检查
  • 在研发阶段我们有本地调用测试环境服务的需求,由于注册到 Eureka Server 的 IP 是 Docker 容器的 IP,本地无法直接调用。为了解决这个问题我们把注册到 Eureka Server 的地址改为了自定义的内网域名,并将此域名在容器服务中配置暴露。本地通过容器服务的域名代理来请求 Spring Cloud 服务,从而解决了这个问题。

监控方案

目前的我们通过阿里云 云监控平台 搭建自己的监控报警系统。

对于不同的业务需求,我们将监控报警系统分为以下 4 类:

  1. 基础资源监控

    我们在主机上安装云监控平台的监控插件,插件会自动向监控平台上报数据。而云监控平台会对数据进行分析处理,形成可视化图表,当主机一些主要指标异常时,云监控平台会根据事先的设定,向相关人员报警。一般会以主机为单位收集以下方面的数据:

    名称 监控详情 报警阀值
    磁盘使用率 磁盘使用率 连续3次 5分钟硬盘使用率 > 80%
    Disk_inode 磁盘inode使用率 连续3次 5分钟磁盘inode使用率 > 80%
    CPU CPU使用率 连续3次 5分钟CPU使用率 > 60%
    MEM 内存使用率 连续3次 5分钟内存使用率 > 80%
    Total_processes 进程总数监控 连续3次 5分钟总进程数 > 500
    Total_TCP 活动TCP连接总数 连续3次 5分钟总进程数 > 300
    CPU负载(5m) 系统upload,5分值平均值 连续3次 5分钟upload > 8
    OSS_Inet/OSS_Onet OSS资源出站总流量 连续3次 1小时流量> 10Mb
    CDN CDN出入站流量 连续3次 5分钟出站流量 > 100Mbyte
    DB_连接使用 RDS实例连接数占比 连续1次 5分钟内最大连接占比> 60%
    CS_CPU 容器维度CPU使用率 连续3次 5分钟容器CPU使用率 >= 60%
    CS_MEM 容器维度MEM使用率 连续3次 5分钟容器MEM使用率 >= 60%
  2. 节点监控( API 监控)

    云监控平台提供了 API 接口,以满足我们自定义的数据收集。相关 SDK 的详细文档可以查看阿里云官方的相关介绍(点击查看详情)。

    我们的运维工程师负责编写相关的数据上报脚本,如下图:

  3. 站点监控

    站点监控主要是指站点的健康情况的监控。技术上类似于黑盒测试,通过模拟真实的用户访问请求(利用 curl)来实现 HTTP 请求的监控。目前以杭州,青岛,北京三地的机房节点来模拟不同地域的访问,以监控服务的健康情况。

    我们通过添加统一的 HTTP Request Header User-Agent: Alimonitor, 以区分正常的用户行为。一般间隔5分钟发送一次该请求。请求主要使用 GET,POST,HEAD 三重常用的 HTTP Method。通过对返回的 HTTP Status Code 和页面内容的校验,我们可以监控到站点不同的健康状态。

    另外我们还模拟了端到端的响应,同样可以实现对各地到中心服务器的响应延迟的监控。

  4. 应用监控

    我们利用 Elasticsearch 平台进行数据收集,并使用 Kibana 展示数据或生成报表,还可以通过 elastalert 触发报警。

    具体实现方面,我们是由 logstash 收集来自所有前端代理的日志(nginx_access_log),并以 grok process 的方式入库到 Elasticsearch,之后再由 Kibana 来制作监控的 PV 图表,服务器报警图表等可视化数据图表。

    而在处理入库的日志时,我们会根据 Rule Types 进行 elastalert 的邮件(Telegram)通道的报警。

Pepper Cloud 从 AWS 到阿里云

Pepper Cloud 是指 Pepper 法国的技术团队为 Pepper 提供的云端服务,在欧美和日本市场上主要部署在 AWS 环境里。在中国,显然我们希望将 Pepper Cloud 迁移到阿里云的集群上,以便为中国用户提供更好的服务。

整个迁移是在充分评估测试和阿里云的大力支持下完成的,主要分为以下几个阶段:

  1. 评估阶段:

    我们罗列了海外 Pepper Cloud 使用的全部 AWS 服务,逐个对比之后,我们发现,阿里云基本可以覆盖所有服务。

  2. 验证阶段:

    我们通过一个 POC(原型验证)项目,对技术可行性做了验证。提出了从基础设施组件和中间件层面做抽象,兼容两种云环境,根据不同的环境参数选择使用哪个云服务的解决方案。

  3. 研发阶段:

    法国技术团队得益于阿里云新近推出的欧洲集群,快速便捷地构建了欧洲集群上的测试环境和预发布环境。

  4. 部署阶段:

    在阿里云欧洲集群上的服务,我们先完成了功能测试和 API 自动化测试。由于欧洲集群还暂不支持复制镜像,所以我们选择将欧洲的 ECS 镜像导出后,在中国的预发布环境中导入。

  5. 发布阶段:

    在国内的技术团队完成最后的预发布验证后,Pepper Cloud 中国版便轻松上线发布了。

只是第一步

至此完成的 AWS 迁移工作使得我们这个团队有了一个阶段性的里程碑,但让机器人上云还有很多具体工作要做,各个项目更有不少迭代需要推进。不过,基本上,我们利用了今天阿里云提供的种种便捷服务,已经为我们自己找到了高效的基建保障,为今后 Pepper 在中国长期开展业务,乃至我们团队整个机器人业务提供了最初的坚实的基础。

时间: 2024-12-02 12:43:48

机器人也上云-创业团队的阿里云实践心得的相关文章

如何上传文件到阿里云服务器?

如何上传文件到阿里云服务器?下面,武汉捷讯小编给大家分别针对Windows服务器与linux服务器分享上传文件的方法,希望对大家有所帮助.阿里云湖北服务中心:武汉捷讯信息技术有限公司 一.向Windows服务器上传下载文件方式  方法有很多种,此处介绍远程桌面的本地资源共享方法. 1.运行mstsc,连接远程桌面的时候,点"选项>>" 2."本地资源"-->详细信息. 3."磁盘驱动器"前面打钩. 4.连接远程电脑后,打开&qu

云栖大会阿里云助创业进“快消时代”

 本文讲的是云栖大会阿里云助创业进"快消时代"[IT168 云计算]10月14日-15日,阿里云2015云栖大会Computing Conference在杭州召开.大会吸引了来自全球约2万名开发者参加.阿里云及其合作伙伴在大会上发布了一系列新的云计算技术,200多家云上企业展示了量子计算.人工智能等前沿科技. 大会由杭州市政府和阿里巴巴集团联合主办,阿里云承办,共设置两个主论坛.约30场分论坛和3场开发者大赛.浙江省省长李强.阿里巴巴集团董事局主席马云出席大会并发表主题演讲. 作为中美

【IT技术】阿里RDS首席产品架构师何云飞:阿里云数据库的架构演进之路

专访阿里RDS首席产品架构师何云飞:阿里云数据库的架构演进之路 原文作者:pipihappy8888 http://www.itpub.net/thread-1887486-1-1.html 如果说淘宝革了零售的命,那么DT革了企业IT消费的命.在阿里巴巴看来,DT时代,企业IT消费的模式变成了"云服务+数据",阿里云将打造一个像淘宝电商一样多方共赢的云生态.而作为阿里云庞大帝国的重要成员,阿里云RDS为社交网站.电子商务网站.手机App提供了可靠的数据存储服务.好的架构不是设计出来的

【普及分享】云计算=/=云主机,阿里云=低价低端

[普及分享]云计算=/=云主机,阿里云=低价低端 最近几年云计算很火热,什么云都有,好多厂商都宣称的所谓云主机,其实和云计算没半毛钱关系! 云计算只是一个编程模型,把平常用一台计算机计算的活分布式在很多台计算机上计算,而所有厂商所宣称的云主机只不过是虚拟机! 在中国最有名最便宜的云主机是什么?那就是阿里云. 笔者试用阿里云1核1G内存1M带宽的云主机,刚开机还可以,但是运行2天后,机器变得非常卡! 随便开任意软件都非常慢,只能说是面向低端市场的,阿里云都做不到高端市场,我想普通IDC厂商更是如此

以云计算的名义 驻云科技牵手阿里云

本文讲的是以云计算的名义 驻云科技牵手阿里云一次三个公司的牵手 可能会改变无数企业的命运 2017年4月17日,对于很多人来说可能只是个平常的工作日,但是对于国内无数的企业来说却可能是个会改变企业命运的日.驻云科技联合国内云服务提供商阿里云及国外知名机器学习及IT云服务公司ServiceAide,共同举行了战略合作签约仪式暨新闻发布会,并宣布将会在国内携手推出集机器学习.大数据处理及云计算于一身的下一代IT服务管理系统-Cloud Service Management (CSM).三方的成功牵手

一分钟了解阿里云产品:阿里云开放云搜索初探

前阶段申请了阿里云开放云搜索(Aliyun OpenSearch)的邀请码,今早收到通过验证了,于是准备试试云搜索.   阿里云搜索使用很简单,和Lucene一样,包括索引文档字段几个概念.每个索引可以当成数据库的一个数据库,一条文档当成数据库的一条记录,一个字段就是数据库的一个字段.   开放搜索目前支持四种形式的搜索模板,资讯类,小说类,应用类和社区类.模板在这儿就是规定好了索引的字段,也可以自定义.下面我来详细介绍下:   我想测试一下,就把自己的博客写的这十几篇POST发上去建立索引吧,

一分钟了解阿里云产品:阿里云解析五大热点技术问题分析

在上一篇文章中,我们为大家介绍云解析的概况,阿里云解析是阿里云为全网域名开放的域名智能解析服务,那在使用过程中,经常遇到的热门技术问题有哪些呢?     快速设置解析:   https://help.aliyun.com/document_detail/dns/quick-start/hichina.html?spm=5176.docdns/simple-intruduction/gaishu.6.98.CXGSmO   域名解析防护:   https://help.aliyun.com/doc

云时代,阿里云带给你无限可能,助你腾飞!相信你也可以

本是一个什么都不懂的小白,通过百度,QQ聊天等不断摸索,自己申请了域名,主机,服务器,花不到100块自己搭建起了企业网站(ahytech.cn目前还在备案中),真的要给自己点个赞. 云时代,阿里云带给你无限可能,助你腾飞!相信你也可以 复制打开链接即刻领取优惠幸运券 http://dwz.cn/alven_12

一分钟了解阿里云产品:阿里云解析概述

在阿里云的众多产品中,有一个产品叫做阿里云解析.什么是阿里云解析呢?让我们来一起认识一下吧.   什么是阿里云解析呢?   阿里云解析是阿里云为全网域名开放的域名智能解析服务.阿里云解析做为云计算服务的入口,将逐步与阿里云已有云产品进行融合打通,成为云产品大家庭中不可或缺的一份子,ECS.RDS.CDN.SLB等为用户提供高效可靠的计算.存储.网站加速和负载均衡服务,阿里云解析则提供强大稳定的解析调度入口,可以确保用户能有顺畅的访问体验,并为用户提供一站式的服务体验.   阿里云解析是万网DNS