当前位置: 首页 > news >正文

【翻译】Mashape是如何管理15000个API和微服务的(三)

https://stackshare.io/mashape...

伸缩挑战

在2013年的时候,当大批自运行的第三方API被加到Mashape的市场的时候我们遇到了伸缩的问题。

在2012 7月份和2013 7月份我们的API数量增长了50倍。
http://i.imgur.com/0JaNhEM.png
clipboard.png

不止是通过我们代理的请求数量在暴涨,Mashape开始要管理比其他市场更多的API。那时,市场有3500个公开API需要他的管理。

API市场需要快速扩容。我们的API代理是用Node.js构建的,后端是用重型Java构建的。他是一个单体应用架构,并且我们的Node.js代理不能处理大流量尖峰。

那时经常需要加班,并消耗了大量的AWS资源。我们的银行账号少了不少钱,CEO也掉了不少头发。

我们需要找到处理大流量的方案,同时需要保证可靠性和安全。我们想要从单体应用迁移到更灵活的方式。

http://i.imgur.com/C75mgO7.png
clipboard.png

我们一直想创建我们自己的API网关;目标是以下内容:

  1. 以月和年为单位可预测的稳定性,不是天。

  2. 容易在多个地理位置进行扩展并保持高效,而且以极小的开销。

  3. 通过一些简单插件达到组件化和易扩展。

  4. 独立:支持各种环境,框架和语言。

  5. 能方便使用RESTful API进行配置。

基本上就是API管理界的“ElasticSearch”。我们的CTO开始寻找方案,并偶然遇到了一位CloudFlare的工程师,将我们带入了神奇的OpenResty世界。在Nginx上层构建让开发者可以用Lua扩展Nginx功能,Lua是一种被许多大流量网站使用的嵌入式脚本语言。

CloudFlare用Lua脚本构建安全和缓存。我想我们可以做同样的事,只是聚焦在API和微服务管理。Nginx已经是公认的稳定和值得信赖的HTTP服务器,这对于我们的原始需求非常合适。使用了OpenResty后,我们开始构建Kong。

Kong的诞生(API网关)

2013年,Mashape使用Nginx/OpenResty来实现市场上发布API的功能。计费、鉴权、流控和速率限制已经变成了用Lua写的定制OpenResty插件。我们叫他Kong(是的,像“金刚”,就像我们自己的名字:MashAPE)。
http://i.imgur.com/2azlel3.png

今天Kong能有效的管理约15000 API。为我们内部的微服务和我们市场上用户的API服务,处理峰值流量,高并发场景,每月能处理十亿以上API调用。

我们构建了我们自己的“ElasticSearch”来做API管理;很像是Elastic的方式,用RESTful接口在Lucene上层加了一层语法糖,Kong就是在Nginx上包装了一层。

下面是一些在应用市场上操作Kong的例子。

当一个API从图形界面被填加到Mashape平台上,它会发送一条POST请求给Kong:

curl -i -X POST \
  --url http://localhost:8001/apis/ \
  --data 'name=mockbin' \
  --data 'upstream_url=http://mockbin.com/' \
  --data 'request_host=mockbin.com'

然后,基于API提供者的需要,一组各式各样的插件会被添加到他的上层。举个例子,如果用户需要秘钥验证:

curl -i -X POST \
  --url http://localhost:8001/apis/mockbin/plugins/ \
  --data 'name=key-auth'

用户管理很容易;Consumer对象允许一个抽象实体代表用户,应用,客户端或者访问API的系统。他们可以被很容易的用RESTful接口创建和管理。

curl -i -X POST \
  --url http://localhost:8001/consumers/ \
  --data "username=Jason"

Kong的RESTfulAPI允许我们管理市场上成千上万的API。使用简单专一的代码库,我们能保持我们的微服务和系统互相独立。Kong本身,基于其插件的本质,可以被描述为为服务架构的典范。在他的核心,只有不超过千来行代码,包括处理数据库抽象,路由和插件管理。插件可以保存在不同的代码库并在一个被代理请求的任意生命周期已几行代码的代价插入。我们对这种非常独特的API管理网关感到自豪。

Kong与2015年4月(http://techcrunch.com/2015/04... 上线。那时经历了部分重写 - 并同时在建立了一个很强的用户和开发者社区。我们非常感谢全世界开发者的贡献,并为我们决定开源Kong而欣慰。我们通过改善许多用OpenResty的Lua包来回馈社区。

我们为许多linux发行版和云提供商生成了Kong的包,方便安装和部署。我们做成功的发行版是基于Docker的Kong,从发布开始已经有180000的下载量。

未来的路

每个月,我们都会向Kong发布更多的代码作为我们支持开源API开发者社区的一部分。我们努力让Kong达到1.0的里程碑,这能让所有人感到这个内部工具带给我们公司和社区的愉悦。

我们也在许多其他产品上工作,这些产品是我们提供给API开发者的服务家族的一部分,我们已经等不及下个月通告我们正要做的事。

我们的愿景

在我们的办公室我们有一副第一辆福特生产线的巨型照片,作为我们的灵感。

100年前第二次工业革命开始了。很多新发明中有两个最特别的:电力和装配线(感谢电力)。这个组合使大规模产品生产第一次实现。结果就是极大的降低了将产品推向市场的成本和时间。大规模生产迅速成为全球现象,开办价值上亿的公司。它改变了世界。

我们看到软件工业的今天与历史的关联:电力就是云计算,装配线就是API,你可以快速取得你需要构建你产品的组件/服务。这是历史的重现,我们想要做下一次革命的先锋,再一次改变世界。

http://i.imgur.com/kxGLik7.png
clipboard.png


本文来自微信公众号「麦芽面包,id「darkjune_think」
转载请注明。
微信扫一扫关注公众号。
图片描述

相关文章:

  • nodeJS中的包
  • oracle学习3
  • 即将到来的Android N,将具备这些新特性
  • 三层架构—简析
  • kibana 常用查询方法
  • 利用linux shell自己主动顶贴
  • 最全肌肉锻炼动图
  • C++标准转换运算符static_cast
  • 存储“芯”突破口 解析3D NADN产业竞争形势
  • 网络架构之路(一):目标
  • 数据分析学习笔记:数据可视化
  • 大数据和区块链之间的比较分析
  • JSVC技术
  • SDN/NFV促进网络趋同
  • 软件定义技术存在哪些限制?
  • JavaScript 如何正确处理 Unicode 编码问题!
  • 【挥舞JS】JS实现继承,封装一个extends方法
  • Bytom交易说明(账户管理模式)
  • Consul Config 使用Git做版本控制的实现
  • HTTP 简介
  • javascript 哈希表
  • PAT A1120
  • Spring Cloud Feign的两种使用姿势
  • UEditor初始化失败(实例已存在,但视图未渲染出来,单页化)
  • vue 配置sass、scss全局变量
  • vuex 学习笔记 01
  • 大数据与云计算学习:数据分析(二)
  • 官方解决所有 npm 全局安装权限问题
  • 基于 Ueditor 的现代化编辑器 Neditor 1.5.4 发布
  • 前端每日实战 2018 年 7 月份项目汇总(共 29 个项目)
  • 前端性能优化--懒加载和预加载
  • 深入浅出Node.js
  • 使用docker-compose进行多节点部署
  • 用jquery写贪吃蛇
  • 用jQuery怎么做到前后端分离
  • 正则表达式小结
  • nb
  • MiKTeX could not find the script engine ‘perl.exe‘ which is required to execute ‘latexmk‘.
  • [Shell 脚本] 备份网站文件至OSS服务(纯shell脚本无sdk) ...
  • ​LeetCode解法汇总2696. 删除子串后的字符串最小长度
  • ​草莓熊python turtle绘图代码(玫瑰花版)附源代码
  • #define
  • $GOPATH/go.mod exists but should not goland
  • $HTTP_POST_VARS['']和$_POST['']的区别
  • (1)(1.8) MSP(MultiWii 串行协议)(4.1 版)
  • (10)Linux冯诺依曼结构操作系统的再次理解
  • (function(){})()的分步解析
  • (ZT)出版业改革:该死的死,该生的生
  • (带教程)商业版SEO关键词按天计费系统:关键词排名优化、代理服务、手机自适应及搭建教程
  • (二)JAVA使用POI操作excel
  • (附源码)ssm高校社团管理系统 毕业设计 234162
  • (附源码)小程序 交通违法举报系统 毕业设计 242045
  • (经验分享)作为一名普通本科计算机专业学生,我大学四年到底走了多少弯路
  • (篇九)MySQL常用内置函数
  • (区间dp) (经典例题) 石子合并