本文来源于我在InfoQ中文站翻译的文章,原文地址是:http://www.infoq.com/cn/news/2016/02/introducing-frock

Urban Airship是一家帮助领导品牌吸引其移动用户的公司,他们能够帮助这些公司在客户下载完应用后就与公司建立起高价值的关系。

眼下,Urban Airship已经有了数量庞大的客户群,涵盖的领域有零售业、媒体与娱乐、运动与旅游、医疗等。这些公司都通过Urban Airship来增强其与客户的连结性。近日。来自于Urban Airship的开发人员开源了他们所使用的一款开发工具:frock。该框架用于简化模拟服务套件的管理。

假设你在工作中使用了面向服务的架构,那么frock是很值得你去尝试的一个工具。

解决开发环境的复杂性

Urban Airship使用了微服务,这对于一家SaaS公司来说是很常见的模式:我们有许多服务,每一个服务都包装了少量的功能,而且每一个服务都能通过定义良好的协议为其它服务所请求。这对于可伸缩性与稳定性来说是很棒的,只是对于开发人员与其环境来说却产生了问题。我们的团队从事Go的开发工作(Go是Urban Airship Engagement仪表盘产品),它是最早期的Urban Airship代码基之中的一个,包括了大量的功能:消息生成与报告、账单与使用报告。以及服务管理(比方说前不久公布的Urban Airship Connect)。

Go会调用大量的服务。这导致团队的开发环境产生了许多问题。之前,我们的环境包括了一个单体的、执行于Vagrant之上的虚拟机。它依赖于仪表盘的全部服务。这么做有许多问题:

  • 速度很慢。

    服务与依赖的数量许多,包括几种不同的数据库都须要保持在执行状态才行。

  • 很脆弱。我们的团队缺少JVM专家。

    上游对服务的改动会破坏我们的开发环境,导致我们许多人都不敢更新。

  • 导致开发人员无法继续工作。当开发人员的环境被破坏后,他们经常无法继续工作。

    环境的复杂性意味着这样的破坏是会经常发生的。这会浪费大量的时间。并导致开发人员很沮丧。

  • 难以将数据导入到环境中。

    在开发阶段。你须要多种多样的数据来測试代码。

    之前的环境通常要求你手工执行測试数据。这是通过与持有数据的服务进行直接的通信来做到的。

frock就是用来帮助我们解决上述全部难题的优秀工具。

何为frock?

我们能够通过frock使用自己定义的数据来模拟服务,使用团队习惯的语言与执行时来编写模拟服务:JavaScript与Node.js。

frock的核心仅仅提供了例如以下一些功能:

  • 高度可配置的路由,这使得我们能够轻松拦截对服务的调用。
  • 基于插件的架构,它并未对怎样编写模拟服务进行强制性约束。
  • 针对常见任务的开箱即用的通用插件。即一个静态文件server与一个代理server。
  • 支持HTTP与Socket服务。
  • HTTP中间件支持,能够自己定义服务或路由的行为。比方说,它提供了一个延迟中间件,能够延迟请求的时间。

全部这一切都是通过一个JSON配置文件(依据约定,该文件名称为frockfile.json)来配置的。而且通过包括了全部自己定义模拟服务的仓库进行共享。frock从grunt与gulp获得了灵感,其配置就位于你的项目其中。对于HTTP模拟来说,一个frockfile会包括一个简单的服务与路由定义。比方说:

{"servers": [{"port": 8080,"routes": [{"path": "/api/devices","methods": ["GET"],"handler": "frock-static","options": {"file": "./fixtures/devices.json","contentType": "application/json"}},{"path": "*","methods": "any","handler": "frock-proxy","options": {"url": "http://localhost:8052"}}]}]
}

这是我们frockfile中服务定义的一个高度简化的版本号。在訪问Go仪表盘时。你实际上会命中一个高可用的代理:该代理会在内部将流量导向不同的服务,其中的主服务是Go。只是一些API路由则是由二级服务所处理的。

相比于在本地执行这个二级服务,我们能够通过frock选择这个路由,并使用模拟的版本号将其替换掉。在上述代码演示样例中,模拟的仅仅是个静态文件,它由frock-static通用静态server插件所处理。全部其它的请求则会直接转向本地执行的Go开发server,server的端口是8052。

编写frock插件

实际上。frock是我们解决这一问题的第2个平台,第1个平台是个名为“multimock”的工具。它是个单体Python应用,能够创建出多个服务线程,并在到达自己定义处理器之前将其传递给一些通用的转换函数。它能够解决不少问题,只是我们还是重写了它,最后才有了frock。为什么要这么做呢?这是由于在multimock中编写插件是很困难的事情。在编写frock时,我们的核心原则是“插件的编写应该保持简单,内建的假设越少越好”。frock通过对插件施加极少的限制来实现这个目标,而且将Node.js HTTP模块的简单性直接应用到了实现中。例如以下代码展示了最简单的一个frock HTTP插件,它仅仅是向命中路由的不论什么请求响应了“hello world!”而已:

// file ./hello-world.js
module.exports = createPluginfunction createPlugin (frock, logger, options) {return handlerfunction handler (req, res) {res.end('hello world!')}
}

假设之前编写过Node.js的请求处理器。那么上述代码就很easy理解了;该frock插件仅仅包括了一个返回路由处理器的工厂函数。

在上述frockfile演示样例中。我们将这个插件替换为静态文件server:

{"servers": [{"port": 8080,"routes": [{"path": "/api/devices","methods": ["GET"],"handler": "./hello-world"},{"path": "*","methods": "any","handler": "frock-proxy","options": {"url": "http://localhost:8052"}}]}]
}

如今,对http://localhost:8080/api/devices的不论什么请求都会返回“hello world!”。

frock对我们的帮助作用

大的特性公布经常都是很复杂的:你经常要等待依赖的服务就绪。还要阅读怎样使用这些服务的规范。在快节奏的项目中,这意味着你要不断追赶集成的日期。当终于全部组件都就位后。你希望他们能够彼此调用成功。

Connect就是这样一个项目,frock能够帮助Web团队构建出令我们充满自信的项目,而且能够很好地实现集成。

事实上。上面所介绍的关于frock的一切都不是什么革命性的功能,只是frock却能够帮助我们以一种更简单的方式做到这些。

建议各位读者尝试一下,你会发现它在你的开发环境中是很实用的。frock README包括了一个高速起步指南,另一个内容丰富的文档与演示样例代码,能够帮助你高速起步。在项目中使用frock并实现自己的插件。

微服务API模拟框架frock介绍相关推荐

  1. vivo亿级微服务 API 网关架构实践

    一.背景介绍 网关作为微服务生态中的重要一环,由于历史原因,中间件团队没有统一的微服务API网关,为此准备技术预研打造一个功能齐全.可用性高的业务网关. 二.技术选型 常见的开源网关按照语言分类有如下 ...

  2. 【微服务】之六:轻松搞定SpringCloud微服务-API网关zuul

    通过前面几篇文章的介绍,我们可以轻松搭建起来微服务体系中比较重要的几个基础构建服务.那么,在本篇博文中,我们重点讲解一下,如何将所有微服务的API同意对外暴露,这个就设计API网关的概念. 本系列教程 ...

  3. api网关选型_微服务 API 网关 APISIX 发布 0.5 版本,达到可用状态

    项目介绍 APISIX (https://github.com/iresty/apisix)  是一个云原生.高性能.可扩展的微服务 API 网关. APISIX 基于 OpenResty 和 etc ...

  4. 微服务 API 网关架构演进 Spring Cloud Gateway ShenYu APISIX

    目录 后台服务网关 Spring Cloud Gateway 遇到问题 Apache ShenYu Higress fizz-gateway-community 企业案例 前台流量网关 APISIX ...

  5. [微服务/API时代的前端开发] BFF入门--5个实用的BFF使用案例

    5个实用的BFF使用案例 前言 API Gateway 服务器端渲染(Server Side Rendering) 会话管理(Session Management) 上传文件 WebSocket.Se ...

  6. [微服务/API时代的前端开发] BFF超入门--Netflix、Twitter、Recruit选择BFF的理由

    前言 在本系列"微服务/API时代的前端开发"中,我们将介绍当前备受关注的BFF(Backends For Frontends).这一篇,我们将主要介绍BFF的概要和例子,作为&q ...

  7. vivo 微服务 API 网关架构实践

    一.背景介绍 网关作为微服务生态中的重要一环,由于历史原因,中间件团队没有统一的微服务API网关,为此准备技术预研打造一个功能齐全.可用性高的业务网关. 二.技术选型 常见的开源网关按照语言分类有如下 ...

  8. 又肝了下微服务 API 网关“金刚”,也是蛮香的~

    " 摘要: 原创出处 http://www.iocoder.cn/Kong/install/ 「芋道源码」欢迎转载,保留摘要,谢谢! 1. 概述 2. 快速安装 3. Kong 控制台 4. ...

  9. Kong 1.0 GA 版本正式发布,微服务 API 网关

    Kong 1.0 GA 版本已正式发布,这是一款可扩展.快速且开源的微服务 API 网关,用于管理.保护与连接混合及云原生架构.Kong 运行于全部服务之前,并可以通过插件实现各种扩展,例如身份验证. ...

最新文章

  1. Linux/Unix好书推荐
  2. QCon 2015 阅读笔记 - 团队建设
  3. 最简单的matplotlib写法
  4. mysql 多表备份_mysql备份与恢复多库多表备份
  5. VC2013 代码图,依赖项关系图,等出错解决办法.
  6. leetcode 1189 python
  7. JavaScript之对象序列化详解
  8. 【Elasticsearch】es 一个数据精度引发的血案
  9. [Android ] linux命令英文缩写的含义(方便记忆)
  10. oracle表和对象基础维护笔记
  11. python 字符串 string模块导入及用法
  12. IE 和FF的一个细小差别
  13. 白话布隆过滤器BloomFilter
  14. 线上幽灵:世界头号黑客米特尼克自传(体验头号黑客传奇人生,洞悉头号黑客思维模式!启明,绿盟,安天,安全宝,百度,腾讯,阿里……众安全专家一致推荐!)...
  15. 关于Unity中unitypackage文件的图标显示及打开方式异常问题的解决
  16. 2022-2028年全球与中国机身导线行业产销需求与投资预测分析
  17. java mq编程_MQ java 基础编程
  18. 高版本Chrome网页直接播放海康威视大华RTSP流方案,不需服务器转码转流,支持H.265、H.264及2K/4K高清视频
  19. 1 Introduction  介绍
  20. PLC定位不准的问题及解决方法

热门文章

  1. boost::filesystem模块实现为错误报告测试用例提供了一个模板
  2. boost::enable_current_exception用法测试程序
  3. boost::core::bit_cast的测试程序
  4. ITK:将2D图像堆叠为3D图像
  5. DCMTK:DcmAttributeMatching的单元测试
  6. OpenGL PN三角形的分化
  7. C语言煎饼排序Pancake sort算法(附完整源码)
  8. 取消mysql自动备份文件_MySQL自动备份并清理多少天前的备份文件
  9. pytorch 时间序列预测,梯度裁剪
  10. 01_Win10下CUDA的安装、查看并升级Nvidia显卡驱动、安装CUDA、设置环境变量、测试CUDA是否安装成功