原创: 张开涛 亿级流量网站架构;)
亿级流量网站架构
微信号 kaitao-1234567
功能介绍 技术架构,系列文章
2017-02-25
Kong是Mashape开源的高性能高可用API网关和API服务管理层。它基于OpenResty,进行API管理,并提供了插件实现API的AOP。Kong在Mashape 管理了超过15,000 个API,为200,000开发者提供了每月数十亿的请求支持。本文将从架构、API管理、插件三个层面介绍Kong。
按照康威定律,我们系统架构会拆的很散,系统由一堆服务组成,如下图所示:
如在访问库存服务、优惠券服务、价格服务时之前都会做一些特殊处理,如限流、缓存、日志、请求统计。而这些处理几乎是所有服务都需要的,这不就是我们常说的AOP嘛,当我们服务多起来的时候,应该将这些通用处理集中到一个地方进行管理,如下图所示:
即通过Kong统一管理通用功能。
Kong的安装请参考官网示例。Kong整体架构如下所示:
Kong的整体流程架构如下图所示:
1、添加API服务
首先我们需要通过Kong管理API向Kong注册API服务,如下所示:
curl –I –X POST \
--url http://kong:8001/apis/ \
--data ‘name=queryStockService’\
--data ‘upstream_url=http://stock.jd.local/’\
--data ‘request_host=api.jd.com’
--data ‘request_path=queryStock’
向Kong添加了一个API,全局唯一名字为queryStockService,当我们访问http://api.jd.com/queryStock时会upstream到http://stock.jd.local/queryStock处理,这不就是Nginx反向代理的功能,Kong实现了API的动态添加。
2、添加API消费者
我们的API中有些是公开的,所有人都可以访问,而有些API是私有的,只有授权才能访问。在开放平台中,只有授权的开发者才能访问API,且有些高级API是只针对部分开发者可用,还有如对不同开发者有不同的API调用次数限制,等等。在这些非公开场景下,需要有一个API消费者。
curl -i -X POST \
--url http://kong:8001/consumers/ \
--data "username=zhangkaitao"\
其会生成一个consumer_id “e5da92dd-fbe8-4031-bebf-34c741e209b1”,添加插件章节会用到该ID。
3、添加插件
插件可以是全局的,也可以是局部的。如限流插件,我们可以配置为全局限流。目前支持:所有API和所有消费者、所有API和特定消费者、所有消费者和特定API、特定消费者和特定API。
为queryStockService添加50次/秒的限流。特定API和所有消费者配置。
curl -X POSThttp://kong:8001/apis/queryStockService/plugins \
--data "name=rate-limiting"\
--data "config.second=50"
目前Kong的限流实现是基于计数器,默认是本地限流,可以配置为如使用Redis,实现集群限流。
为queryStockService添加密钥身份认证。
curl -i -X POST \
--url http://kong:8001/apis/queryStockService/plugins/ \
--data 'name=key-auth'
为消费者添加秘钥。
curl -i -X POST \
--url http://kong:8001/consumers/zhangkaitao/key-auth/\
--data 'key=myKey'
通过秘钥访问API。
curl -i -X GET \
--url http://api.jd.com/queryStock \
--header "Host: api.jd.com"\
--header "apikey: myKey"
特定API和特定消费者限流,需要配合身份认证模块。
curl -X POST http://kong:8001/apis/abc/plugins \
--data "name=rate-limiting"\
--data "consumer_id=e5da92dd-fbe8-4031-bebf-34c741e209b1"\
--data "config.second=1"
到此添加API、添加API消费、添加API插件就介绍完了。更多API管理请扫描如下二维码学习。
更多插件配置学习请扫描如下二维码学习。
身份认证:Kong提供了Basic Authentication、Key authentication、OAuth2.0 authentication、HMAC authentication、JWT、LDAP authentication认证实现。
安全:ACL(访问控制)、CORS(跨域资源共享)、动态SSL、IP限制、爬虫检测实现。
流量控制:请求限流(基于请求计数限流)、上游响应限流(根据upstream响应计数限流)、请求大小限制。限流支持本地、Redis和集群限流模式。
分析监控:Galileo(记录请求和响应数据,实现API分析)、Datadog(记录API Metric如请求次数、请求大小、响应状态和延迟,可视化API Metric)、Runscope(记录请求和响应数据,实现API性能测试和监控)。
转换:请求转换(在转发到upstream之前修改请求)、响应转换(在upstream响应返回给客户端之前修改响应)。
日志:TCP、UDP、HTTP、File、Syslog、StatsD、Loggly等。
也可以开发自己的插件,如缓存等。
Kong作为API网关提供了API管理功能,及围绕API管理实现了一些默认的插件,另外还具备集群水平扩展能力,从而提升整体吞吐量。Kong本身是基于OpenResty,可以在现有Kong的基础上进行一些扩展,从而实现更复杂的特性。
有一些特性Kong默认是缺失的,如API级别的超时、重试、fallback策略、缓存、API聚合、ABTest等,这些需要开发者自己定制和扩展。
如果你要做开放平台,你要做HTTP API网关,Kong是您的一个选择。
事情太多,最近原创的文章有点少。后续有时间会介绍Kong整体流程的实现。更多Kong的介绍请扫描如下二维码查看Kong文档进行学习。
=========阅读扩展=========
使用Nginx+Lua(OpenResty)开发高性能Web应用
==============友情推荐==============
张开涛
[](##) 人赞赏
Original url: Access
Created at: 2019-05-23 15:04:40
Category: default
Tags: none
未标明原创文章均为采集,版权归作者所有,转载无需和我联系,请注明原出处,南摩阿彌陀佛,知识,不只知道,要得到
java windows火焰图_mob64ca12ec8020的技术博客_51CTO博客 - 在windows下不可行,不知道作者是怎样搞的 监听SpringBoot 服务启动成功事件并打印信息_监听springboot启动完毕-CSDN博客 SpringBoot中就绪探针和存活探针_management.endpoint.health.probes.enabled-CSDN博客 u2u转换板 - 嘉立创EDA开源硬件平台 Spring Boot 项目的轻量级 HTTP 客户端 retrofit 框架,快来试试它!_Java精选-CSDN博客 手把手教你打造一套最牛的知识笔记管理系统! - 知乎 - 想法有重合-理论可参考 安宇雨 闲鱼 机械键盘 客制化 开贴记录 文本 linux 使用find命令查找包含某字符串的文件_beijihukk的博客-CSDN博客_find 查找字符串 ---- mac 也适用 安宇雨 打字音 记录集合 B站 bilibili 自行搭建 开坑 真正的客制化 安宇雨 黑苹果开坑 查找工具包maven pom 引用地 工具网站 Dantelis 介绍的玩轴入坑攻略 --- 关于轴的一些说法 --- 非官方 ---- 心得而已 --- 长期开坑更新 [本人问题][新开坑位]关于自动化测试的工具与平台应用 机械键盘 开团 网站记录 -- 能做一个收集的程序就好了 不过现在没时间 -- 信息大多是在群里发的 - 你要让垃圾佬 都去一个地方看难度也是很大的 精神支柱 [超级前台]sprinbboot maven superdesk-app 记录 [信息有用] [环境准备] [基本完成] [sebp/elk] 给已创建的Docker容器增加新的端口映射 - qq_30599553的博客 - CSDN博客 [正在研究] Elasticsearch, Logstash, Kibana (ELK) Docker image documentation elasticsearch centos 安装记录 及 启动手记 正式服务器 39 elasticsearch 问题合集 不断更新 6.1.1 | 6.5.1 两个版本 博客程序 - 测试 - bug记录 等等问题 laravel的启动过程解析 - lpfuture - 博客园 OAuth2 Server PHP 用 Laravel 搭建带 OAuth2 验证的 RESTful 服务 | Laravel China 社区 - 高品质的 Laravel 和 PHP 开发者社区 利用Laravel 搭建oauth2 API接口 附 Unauthenticated 解决办法 - 煮茶的博客 - SegmentFault 思否 使用 OAuth2-Server-php 搭建 OAuth2 Server - 午时的海 - 博客园 基于PHP构建OAuth 2.0 服务端 认证平台 - Endv - 博客园 Laravel 的 Artisan 命令行工具 Laravel 的文件系统和云存储功能集成 浅谈Chromium中的设计模式--终--Observer模式 浅谈Chromium中的设计模式--二--pre/post和Delegate模式 浅谈Chromium中的设计模式--一--Chromium中模块分层和进程模型 DeepMind 4 Hacking Yourself README.md update 20211011
Laravel China 简书 知乎 博客园 CSDN博客 开源中国 Go Further Ryan是菜鸟 | LNMP技术栈笔记 云栖社区-阿里云 Netflix技术博客 Techie Delight Linkedin技术博客 Dropbox技术博客 Facebook技术博客 淘宝中间件团队 美团技术博客 360技术博客 古巷博客 - 一个专注于分享的不正常博客 软件测试知识传播 - 测试窝 有赞技术团队 阮一峰 语雀 静觅丨崔庆才的个人博客 软件测试从业者综合能力提升 - isTester IBM Java 开发 使用开放 Java 生态系统开发现代应用程序 pengdai 一个强大的博主 HTML5资源教程 | 分享HTML5开发资源和开发教程 蘑菇博客 - 专注于技术分享的博客平台 个人博客-leapMie 流星007 CSDN博客 - 舍其小伙伴 稀土掘金 Go 技术论坛 | Golang / Go 语言中国知识社区
最新评论