微服务是一种软件开发技术- 面向服务的体系结构(SOA)架构样式的一种变体,它提倡将单一应用程序划分成一组小的服务,服务之间互相协调、互相配合,为用户提供最终价值。每个服务运行在其独立的进程中,服务与服务间采用轻量级的通信机制互相沟通(通常是基于HTTP的RESTful API)。每个服务都围绕着具体业务进行构建,并且能够独立地部署到生产环境、类生产环境等。另外,应尽量避免统一的、集中式的服务管理机制,对具体的一个服务而言,应根据上下文,选择合适的语言、工具对其进行构建。总结一下,微服务主要特点如下:
- 微服务主要针对后端业务开发。
- 后端服务被分割为多个相对独立的微服务(模块)。
- 微服务之间可以相互调用。
- 微服务独立编程和实现,甚至不同的微服务可以使用完全不同的开发语言来实现。
- 微服务独立部署,各个微服务互不相关。
微服务优点
- 易于开发和维护。由于微服务单个模块就相当于一个项目,开发这个模块我们就只需关心这个模块的逻辑即可,代码量和逻辑复杂度都会降低,从而易于开发和维护。
- 技术栈不受限。比如订单微服务和电影微服务原来都是用java写的,现在我们想把电影微服务改成nodeJs技术,这是完全可以的,而且由于所关注的只是电影的逻辑而已,因此技术更换的成本也就会少很多。
- 部署简单快捷。在开发中发现了一个问题,如果是单体架构的话,我们就需要重新发布并启动整个项目,非常耗时间,但是微服务则不同,哪个模块出现了bug我们只需要解决那个模块的bug就可以了,解决完bug之后,我们只需要重启这个模块的服务即可,部署相对简单,不必重启整个项目从而大大节约时间。
- 按需伸缩。我们上面说了单体架构在想扩展某个模块的性能时不得不考虑到其它模块的性能会不会受影响,对于我们微服务来讲,完全不是问题,电影模块通过什么方式来提升性能不必考虑其它模块的情况。
微服务在app自动化领域的应用
通常我们关注的app自动化主要focus在移动端脚本,而往往忽略了后端需求,比如远程控制设备,调度设备,实时更新脚本等等。一般情况都是另外独立开发一个后端服务来实现所有功能,不仅成本高,周期长,后期维护更是麻烦。不难发现有很大一部分后端需求是一致的,比如设备管理,脚本管理等等。所以我们可以把后端分割为SaaS(所有后端通用的需求)和微服务(个性化的需求)两部分,一般情况下使用SaaS就足够了,如果有其他需求则直接编写微服务脚本实现,简单快捷,成本低,维护更是方便。下面以冰狐智能辅助的微服务为例进行实际分析。(点击这里查看微服务实战demo)
微服务架构
冰狐智能辅助的微服务使用JS脚本实现,支持模块化管理、高并发访问、数据库访问,主要用于扩展后端服务,或者创建其他独立的业务逻辑。 可用于实现移动端和服务端访问请求,以及通用的业务处理和数据查询服务等,架构图如下:
由上图可知,冰狐智能辅助的微服务主要由移动端接口、服务等接口、业务处理服务、数据查询服务和微服务脚本组成,下面分别介绍。
微服务脚本
冰狐智能辅助的微服务脚本使用的是js,一个微服务可以由一个或者多个js脚本组成,直接独立编写js,独立部署,非常方便。
移动端接口
当移动端脚本开发者需要调用自定义的后端服务功能时使用callMicroService,比如访问后端数据库、获取用户和设备相关信息等。移动端接口可以指定脚本和函数名(默认函数名为main),params直接透传给微服务脚本相应的函数,函数的返回值即为接口返回值。
服务端接口
当开发者需要让第三方调用开发者自定义的后端服务功能或者直接使用冰狐SaaS时使用该接口。第三方服务端可以调用open api:/api/call_micro_service来调用微服务。服务端接口可以指定脚本和函数名(默认函数名为main),query参数params直接透传给微服务脚本相应的函数,函数返回值为接口返回值。
业务处理服务
当用户需要从外部录入数据或者需要触发某个行为或者调度设备时可以使用业务处理服务,实际处理过程由微服务脚本完成。若需要让用户点击界面执行某个业务,则可以创建业务处理服务,可以让用户输入参数,然后触发云端的微服务(服务参数直接透传给微服务脚本)。
数据查询服务
当用户需要查看系统内部数据时(可以类比于数据报表功能),可以使用数据查询模块来实现,比如查询所有上传的用户资料等。
实战demo
实战demo请点击这里
总结
本文详细讲解了微服务的基本概念,和其在app自动化领域的应用,并给出了基于冰狐智能辅助的微服务实战demo。