1. Kong

Kong官网
Kong开源
Openresty + Lua 技术栈
Kong是一个云原生,快速,可扩展和分布式微服务抽象层(也称为API网关,API中间件或在某些情况下为Service Mesh)。 作为2015年的开源项目,其核心价值在于高性能和可扩展性。
Kong积极维护,广泛应用于从创业公司到Global 5000以及政府组织等公司的生产。

Features

  • Cloud-Native: Platform agnostic, Kong can run from bare metal to
    Kubernetes.
  • Dynamic Load Balancing: Load balance traffic across multiple upstream
    services.
  • Hash-based Load Balancing: Load balance with consistent hashing/sticky
    sessions.
  • Circuit-Breaker: Intelligent tracking of unhealthy upstream services.
  • Health Checks: Active and passive monitoring of your upstream services.
  • Service Discovery: Resolve SRV records in third-party DNS resolvers like
    Consul.
  • Serverless: Invoke and secure AWS Lambda or OpenWhisk functions directly
    from Kong.
  • WebSockets: Communicate to your upstream services via WebSockets.
  • OAuth2.0: Easily add OAuth2.0 authentication to your APIs.
  • Logging: Log requests and responses to your system over HTTP, TCP, UDP,
    or to disk.
  • Security: ACL, Bot detection, whitelist/blacklist IPs, etc…
  • Syslog: Logging to System log.
  • SSL: Setup a Specific SSL Certificate for an underlying service or API.
  • Monitoring: Live monitoring provides key load and performance server
    metrics.
  • Forward Proxy: Make Kong connect to intermediary transparent HTTP proxies.
  • Authentications: HMAC, JWT, Basic, and more.
  • Rate-limiting: Block and throttle requests based on many variables.
  • Transformations: Add, remove, or manipulate HTTP requests and responses.
  • Caching: Cache and serve responses at the proxy layer.
  • CLI: Control your Kong cluster from the command line.
  • REST API: Kong can be operated with its RESTful API for maximum
    flexibility.
  • Geo-Replicated: Configs are always up-to-date across different regions.
  • Failure Detection & Recovery: Kong is unaffected if one of your Cassandra
    nodes goes down.
  • Clustering: All Kong nodes auto-join the cluster keeping their config
    updated across nodes.
  • Scalability: Distributed by nature, Kong scales horizontally by simply
    adding nodes.
  • Performance: Kong handles load with ease by scaling and using NGINX at
    the core.
  • Plugins: Extendable architecture for adding functionality to Kong and
    APIs.

img
点评: 开源版本功能基本够用

2. Gravitee

Gravitee官网
Gravitee开源
Java技术栈
Gravitee.io – API Management – OpenSource API Gateway
网关是Gravitee.io平台的核心组件。 您可以将其与“智能”代理进行比较,以了解其目标。
与传统的HTTP代理不同,网关能够根据您的需要将策略(即规则)应用于HTTP请求和响应,这意味着您可以通过添加转换,安全性和许多其他疯狂功能来增强请求和响应处理!

主要功能特性

  • REST API:通过 Web UI 执行的每个操作都使用内部的 Rest API
  • 一键部署:只需单击一下,API 就会部署到每个 Gravitee.io 网关,并且可以随时使用
  • 高可扩展:可以轻松地将新的 Gravitee.io 网关添加到集群中。并且数据已同步,无需浪费时间进行配置
  • 自定义策略:Gravitee.io 提供了许多开箱即用的策略(速率限制、CORS、IP过滤等)。如果还不够,可以自己进行开发
  • 健康检测:作为 API 提供商,请为你的服务添加运行状况检查,并向你的用户提供有关 API 可用性的反馈

img
img
点评: 功能非常全,自带的dashboard也非常好用

3. Zuul

Zuul官网
Zuul开源
Java技术栈
Zuul is a gateway service that provides dynamic routing, monitoring, resiliency, security, and more.
Zuul是一种网关服务,可提供动态路由,监控,弹性,安全性等。

  • Authentication and Security – identifying authentication requirements for each resource and rejecting requests that do not satisfy them.
  • Insights and Monitoring – tracking meaningful data and statistics at the edge in order to give us an accurate view of production.
  • Dynamic Routing – dynamically routing requests to different backend clusters as needed.
  • Stress Testing – gradually increasing the traffic to a cluster in order to gauge performance.
  • Load Shedding – allocating capacity for each type of request and dropping requests that go over the limit.
  • Static Response handling – building some responses directly at the edge instead of forwarding them to an internal cluster
  • Multiregion Resiliency – routing requests across AWS regions in order to diversify our ELB usage and move our edge closer to our members
    点评: 用Spring Cloud全家桶首选

4. Tky

Tyk官网
Tyk开源
Golang技术栈
Tyk Open Source API Gateway written in Go
Tyk是一个轻量级的开源API网关,管理平台使您能够控制访问API的人员,访问API以及访问API的方式。 Tyk还将记录用户如何与您的API进行交互以及出现问题时的详细分析。
Key Features of Tyk
Tyk offers powerful, yet lightweight features that allow fine grained control over your API ecosystem.

  • RESTFul API – Full programmatic access to the internals makes it easy to manage your API users, keys and Api Configuration from within your systems
  • Multiple access protocols – Out of the box, Tyk supports Token-based, HMAC Signed, Basic Auth and Keyless access methods
  • Rate Limiting – Easily rate limit your API users, rate limiting is granular and can be applied on a per-key basis
  • Quotas – Enforce usage quotas on users to manage capacity or charge for tiered access
  • Granular Access Control – Grant api access on a version by version basis, grant keys access to multiple API’s or just a single version
  • Key Expiry – Control how long keys are valid for
  • API Versioning – API Versions can be easily set and deprecated at a specific time and date
  • Blacklist/Whitelist/Ignored endpoint access – Enforce strict security models on a version-by-version basis to your access points
  • Analytics logging – Record detailed usage data on who is using your API’s (raw data only)
    Webhooks – Trigger webhooks against events such as Quota Violations and Authentication failures
  • IP Whitelisting – Block access to non-trusted IP addresses for more secure interactions
  • Zero downtime restarts – Tyk configurations can be altered dynamically and the service restarted without affecting any active request
    img
    点评: 功能较全,但是授权方面是个问题

5. GO Gateway

GO Gateway网关官网
GO Gateway网关开源
Golang技术栈
Gateway 是一个基于HTTP协议的restful的API网关。可以作为统一的API接入层。

Features

  • 流量控制(Server或API级别)
  • 熔断(Server或API级别)
  • 负载均衡
  • 服务发现
  • 插件机制
  • 路由(分流,复制流量)
  • API 聚合
  • API 参数校验
  • API 访问控制(黑白名单)
  • API 默认返回值
  • API 定制返回值
  • API 结果Cache
  • JWT Authorization
  • API Metric导入Prometheus
  • API 失败重试
  • 后端server的健康检查
  • 开放管理API(GRPC、Restful)
  • 支持websocket
  • 支持在线迁移数据
    img
    img
    点评: 全开源,自主可控性高

6. GOKU API Gateway

GOKU API Gateway官网
GOKU API Gateway开源
Golang技术栈
GoKu API Gateway CE,中文名:悟空API网关(开源版),是eoLinker旗下的API网关,帮助企业进行API服务治理、API性能安全维护,为企业数字化赋能。
GoKu API Gateway CE,支持OpenAPI与微服务管理,支持私有云部署,实现API转发、请求参数转换、数据校验等功能,提供图形化界面管理,能够快速管理多个API网关,提高API业务安全性。

产品功能

  • 管理
    访问统计 统计API的访问数据,及时了解API使用情况
    图形化界面 通过界面即可设定网关的各项参数
    企业人员管理 为企业内部人员分配操作权限
    OPEN API 提供完善的OPEN API,方便企业接入内部系统

  • 性能与安全
    负载均衡 合理分配流量,提高业务的处理能力
    权限控制 针对不同用户设定不同的访问权限
    集群部署 支持集群部署,提高系统可用性

  • 请求转发
    支持REST API支持接入REST API
    API整合 通过不同的URL访问同一个API
    超时重试 超过预设的时间没有得到返回结果,则重新发起请求

  • 告警机制
    告警邮件 通过邮件接收告警信息
    告警推送 通过API接受告警信息

  • 拓展
    插件支持 提供官方插件,支持自定义插件
    导入eoLinker AMS数据支持导入eoLinker AMS的API文档

  • 日志系统
    请求日志 通过日志详细记录请求过程
    告警日志 通过API接受告警信息
    插件日志 通过日志详细记录插件使用过程

插件系统

  • 用户鉴权
    Basic鉴权 通过Basic鉴权访问API
    Apikey鉴权 通过Apikey鉴权访问API
    OAuth2.0 鉴权通过OAuth2.0鉴权访问API
    JWT鉴权 通过JWT鉴权访问API

  • 流量管控
    流量控制 限制单位时间内的最大访问次数
    数据缓存 缓存后,用户请求时网关直接返回结果
    请求大小限制 在大小限制内的请求才能通过访问

  • 安全防御
    IP黑白名单 根据IP判断请求合法性
    防重放攻击 保证请求的唯一性
    跨域插件 设定特定的响应头部实现跨域
    返回头部 自定义网关的返回头部

  • 参数处理
    参数映射 实现参数A转换成参数B
    额外参数 转发时可自动添加预设的额外参数
    参数校验 通过校验规则的参数方可正常发送
    格式转换 参数的json格式与xml格式相互转换

  • 响应机制
    熔断机制 达到熔断条件网关停止对该API的转发,返回预设内容
    服务降级 达到降级条件网关停止对该API的转发,返回降级内容
    默认返回 当匹配不到URI时,网关返回预先设定的值

img
点评:开源版基本不能投产,商业版功能丰富

7. Ocelot

Ocelot官网
Ocelot开源
.NET技术栈
Ocelot是一个.NET API网关。 该项目针对的是使用.NET运行面向微服务/面向服务的体系结构的人,这些体系结构需要统一的入口点。
但是,它可以与任何说HTTP并在ASP.NET Core支持的任何平台上运行的东西一起使用。

Features

  • Routing
  • Request Aggregation
  • Service Discovery with Consul & Eureka
  • Service Fabric
  • WebSockets
  • Authentication
  • Authorisation
  • Rate Limiting
  • Caching
  • Retry policies / QoS
  • Load Balancing
  • Logging / Tracing / Correlation
  • Headers / Query String / Claims Transformation
  • Custom Middleware / Delegating Handlers
  • Configuration / Administration REST API
  • Platform / Cloud Agnostic
    img

其他API网关

小豹API网关(收费)

小豹API网关官网
Java技术栈
功能特性介绍

  • 认证 支持4种认证方式,包括:Baisc认证、JWT认证、微信小程序Token认证、NULL认证(放行)
  • 鉴权 支持2种授权方式,包括:基于接入应用进行授权、NULL授权(放行)
  • 流量管控 支持2种流程管理,包括:1、基于客户端应用进行流量管控,防止客户端恶意获取数据。 2、基于API的流量管理,保护上游服务。
  • 缓存 缓存API后端服务返回的数据,降低后端服务压力。
  • 安全防护 保护API的安全是API网关重任。 1、客户端身份认证;2、只有授权的应用才能访问对应的API。3、公私钥算法保护API接口调用和数据传输安全。4、IP白名单、黑名单机制。5、通过组件二次开发可以扩展很多定制安全功能,如:设备id,地理位置、敏感数据二次检验等。
  • 服务路由 识别请求参数和路径转发上游API服务。
  • 日志记录 默认以分钟纬度对API调用情况进行汇总记录,也支持配置第三方服务记录完整的API调用详细信息,方便自定义审计和统计。
  • 服务注册和暴露 支持Http rest、Webservice服务注册和暴露。
  • 负载均衡 支持网关内部负载均衡,用户可以选择注册代理和服务实例地址。
  • 服务编排 将多个后端服务聚合成一个API暴露,减小客户端开发复杂度,快速生产新的API。
  • 超时控制 通过API配置访问超时时间,超时后立即返回,避免工作线程长时间等等。
  • 灰度发布 产品支持让指定部分客户端应用使用新版本API,其他应用继续使用以前的API,当新版本的API逐渐稳定后,所有用户能平滑过渡到新版本的API。使用灰度发布能够及早获得用户的意见反馈,完善产品功能,提升产品质量。让用户参与产品测试,加强与用户互动,降低产品升级所影响的用户范围。
  • 熔断 后端服务N秒内连续50%调用出现超时或者异常,系统自动熔断该服务,M秒后尝试恢复链路;该机制可以有效避免无效等等。
  • 动态配置更新 运行时变更API、分组、组件等配置,自动同步、及时生效。
  • API系统迁移 支持API以系统维度接入API网关,自动纪录API,让API系统迁移自动化。
  • 高可用 产品支持企业级高可用部署,避免单点故障。
  • 高性能 网关无状态,支持横向扩展,运行时弱依赖持久层,最大化提升网关整体性能。
  • 分布式缓存(redis) 当系统API缓存量大时,可使用redis集群提高系统的响应。
  • 自定义组件开发 采用组件化的架构,可根据需求通过开发组件匹配企业需求。
  • 管理中心 API网关后台管理中心简洁明了,方便API网关管理员对API进行管理,数据面板方便了解系统运行情况。
  • 监控中心 监控中心对API运行情况一目了然,通过分析API异常告警辅助系统运维。
  • 微信小程序支持 对小程序类型的客户端应用进行了特殊处理,简化小程序对微信用户进行认证,后端服务只需要关系业务逻辑。

1. Flink开发环境安装

1.1 前置安装

开发工具IDEA
Docker环境(Flink平台运行在docker中)
jdk支持
Maven支持
netcat支持

jdk,Maven推荐OSX用brew安装,Windows用Chocolatey安装
netcat在Windows上用Chocolatey安装,命令为”choco install netcat”

1.1 docker-compose 安装flink

docker-compose.yml

运行

浏览器打开 http://127.0.0.1:8081 可以看到dashboard

2. 编写一个简单的流处理 job

假设这个job项目名称为helloword
这个job用nc程序监听一个tcp服务,使其可以输入文本流
计算单词出现次数

2.1 Maven 初始化项目

设建立的项目
groupId为com.iamle.flink
artifactId为helloword

如果是 Windows,建议使用 Git Bash 终端执行mvn

2.2 IDEA打开helloword

删除自动生成的 BatchJob.java、StreamingJob.java
新建SocketWindowWordCount.java

pom.xml 入口类
com.iamle.flink.StreamingJob 改为
com.iamle.flink.SocketWindowWordCount

2.3 编译项目jar

在项目中的target目录中得到 helloword-1.0-SNAPSHOT-shaded.jar

3. 提交job

先运行流的输入服务

方式1
打开 http://127.0.0.1:8081/#/submit dashboard后
在Submit new job中上传helloword-1.0-SNAPSHOT-shaded.jar
upload后>勾选>Submit

在nc终端,随便输入一些字符串后回车
在名为taskmanager的docker实例标准终端中可以看到计算结果(可以用kitematic打开docker容器实例查看其标准终端)

4. 官方示例

flink官方示例

[TOC]

1. 前言

在web开发,api开发过程中,我们需要访问本地开发环境,测试环境,准生产环境,线上环境
为了使用同一个域名去访问不同环境下的服务器,通常有2种方式
1. dns解析方式,较多时候使用hosts的方式进行dns解析
2. proxy代理方式

wwek经常使用SwitchHosts,同时推荐wproxy和ZanProxy
下面是相关常见工具推荐

2. Proxy代理类

2.1 wproxy

wproxy官网
wproxy开源
HTTP, HTTPS, WebSocket debugging proxy
whistle(读音[ˈwɪsəl],拼音[wēisǒu])是基于Node实现的跨平台抓包调试代理工具,有以下基本功能:

查看HTTP、HTTPS请求响应内容
查看WebSocket、Socket收发的帧数据
设置请求hosts、上游http/socks代理
修改请求url、方法、头部、内容
修改响应状态码、头部、内容,并支持本地替换
修改WebSocket或Socket收发的帧数据
内置调试移动端页面的weinre和log
作为HTTP代理或反向代理
支持用Node编写插件扩展功能
img

2.2 ZanProxy

ZanProxy官网
ZanProxy开源
An extensible proxy for PC/Mobile/APP developer
Zan Proxy是一个用Node.js编写的HTTP代理服务器,可用于修改请求地址和模拟响应数据。
它同时也是一个自定义DNS解析和请求监控的工具。 该代理服务器有人性化的界面,简单易用。我们还为开发者提供了高级插件机制来自定义代理行为。

主要特性
支持HTTP,HTTPS和Websocket代理
支持自定义请求转发,可转发到本地文件
支持远程规则,可以在项目内共享规则
支持mock响应数据
支持自定义DNS解析
支持自定义插件,可定制代理行为
图形化配置,上手容易
img

2.3 anyproxy

anyproxy官网
anyproxy开源
A fully configurable http/https proxy in NodeJS
AnyProxy是一个基于NodeJS的,可供插件配置的HTTP/HTTPS代理服务器。
img

2.4 Charles

Charles官网
Charles is an HTTP proxy / HTTP monitor / Reverse Proxy that enables a developer to view all of the HTTP and SSL / HTTPS traffic between their machine and the Internet. This includes requests, responses and the HTTP headers (which contain the cookies and caching information).
Charles是一个HTTP代理/ HTTP监视器/反向代理,使开发人员能够查看其机器和Internet之间的所有HTTP和SSL / HTTPS流量。 这包括请求,响应和HTTP标头(包含cookie和缓存信息)。
OSX上的http/https抓包工具,算是人人皆知,单机使用非常好用
img

2.5 Telerik Fiddler

Fiddler官网
The free web debugging proxy for any browser, system or platform
Fiddler是一个http协议调试代理工具,它能够记录并检查所有你的电脑和互联网之间的http通讯,设置断点,查看所有的“进出”Fiddler的数据(指cookie,html,js,css等文件)。 Fiddler 要比其他的网络调试器要更加简单,因为它不仅仅暴露http通讯还提供了一个用户友好的格式。
老牌Windows上的http/https抓包工具,算是人人皆知,单机使用非常好用

2.6 mitmproxy

mitmproxy官网
mitmproxy开源
mitmproxy is a free and open source interactive HTTPS proxy.
具有交互式TLS功能的拦截HTTP代理,适用于渗透测试人员和软件开发人员。
img

3. Hosts类

3.1 SwitchHosts

SwitchHosts官网
SwitchHosts开源
这是一个用于快速切换 hosts 文件的小程序,基于 Electron 开发,同时使用了 React、Ant Design 以及 CodeMirror 等框架/库。
功能特性
快速切换 hosts
hosts 文件语法高亮
在线 hosts 方案
系统托盘图标快速切换
macOS: 支持 Alfred workflow 快速切换
img

4. Proxy辅助

Proxifier

Proxifier官网
Proxifier是一个跨平台的设置代理客户端,支持socks和http代理协议,它可以拦截任意客户端的所有网络请求,并把请求代理到指定的代理服务器。
用在一些不支持设置代理的客户端软件就特别适用
Proxifier官方只有Windows和Mac版

什么书讲的什么

《设计数据密集型应用》 又名《数据密集型应用系统设计》

乍一看本书是教你写后端应用呢,实际的内容比这个高到哪里去了 

当我们在设计后端应用的时候,围绕的往往根本还是数据处理、存储、展示,那么这“数据大陆”的全貌是什么呢?


第一部分

在单机数据库中数据库系统会面临哪些挑战

数据库有哪些模型,有哪些查询方式

底层的存储结构是什么,如何高效的检索数据

编码格式

第二部分

在分布式数据库中会涉及的基本概念

分布式系统中会有哪些麻烦事,如何化解

一致性和共识分布式系统中的核心


第三部分

在大数据运用中实事数据(业务表亦或事实表)数据是如何衍生的

批处理

流处理

以及“数据大陆”未来发展

最后作者还在数据隐私保护方面做了一些讨论


本书抽丝剥茧,高屋建瓴。从问题的根本开始,掌握这些“源头”可以让架构选型和设计做的更好

比较难能可贵的是本书不是一堆各种术语堆砌,而是循序渐的让你从麻烦到破解,从而引导你“攻破”麻烦,然后你就自然而然的能看懂“术语”了。

看看网友的评价
本书为数据系统的设计、实现、与评价提供了很好的概念框架。读完并理解本书内容后,读者可以轻松看破大多数的技术忽悠,与技术砖家撕起来虎虎生风🤣。 —— Vonng
提纲挈领  —— 介错
我想给这本书打一百颗星。(截取) ——  brokilon    


那么哪里可以看呢
你可以在线免费阅读: https://github.com/Vonng/ddia/ (非官方的中文翻译版)要买纸值的看豆瓣:https://book.douban.com/subject/30329536/ (原作者授权中文翻译出版)

2018年微服务服务治理现状

目前就2种方案

1. 服务治理框架方案,基于业务代码侵入式的方案

单语言最全 Java体系的 Spring Cloud 全家桶套餐 优:成熟大规模验证 劣: 单语言,其他语言接入麻烦
支持多语言的 Tars(腾讯) 服务治理框架 优:腾讯十余年的服务治理经验的开源输出,框架本身完整 劣:只能在平台上玩,外部生产案例较少
其他语言自实现的,如PHP的Swoole方案,Golang的Gokit、GoMicro等 优: 自主可控,随意定制 劣: 需要基础架构团队来hold
其他的一些RPC框架,因为不是一套的服务治理框架这里不谈

本方案最大的劣势是业务代码侵入,要潜入一大堆业务无关的代码,维护客户端的成本也非常巨大

2. ServiceMesh服务网格方案,以Istio为代表的以SideCar(边车)流量代理的方案

Istio背后由IBM和Google共同支持,被誉为下一代的服务治理框架
全套解决方案,服务治理需要的功能统统都有,默认需要运行在Kubernetes上

宜人贷有部分业务已经线上使用 (宜人贷Kubernetes 容器云实践方案 https://mp.weixin.qq.com/s/Mn0TWdiuJSiYw5DlBlT61g)
支付宝公司蚂蚁金服也在持续探索中 (蚂蚁金服大规模微服务架构下的Service Mesh探索之路 http://www.servicemesher.com/blog/the-way-to-service-mesh-in-ant-financial/)
其他有实践的公司: 优信二手车

据公开的资料显示,唯品会,新浪微博都是采用SideCar(边车)流量代理的方式做的多语言接入
Sidecar就是ServiceMesh的雏形

本方案最大的优势是0业务代码侵入,现有业务项目可以直接接入,同时天下没有免费的午餐,最大的劣势是复杂,需要懂操作系统,懂网络,懂容器,懂Kubernetes
后续如果Istio在云上成熟,配套的管理工具成熟,能一定程度降低门槛,让业务开发在OPS上解放出来。

学习推荐

  • IBM 微讲堂 Istio 系列 https://developer.ibm.com/cn/os-academy-istio/
    目标听众:对微服务治理感兴趣的企业决策者、技术调研者、架构师、技术开发人员、运维人员等。
  • 免费的Istio在线实验平台 https://www.katacoda.com/courses/istio
  • 中文用户 ServiceMesher 社群 http://www.servicemesher.com/blog/

在很多开发环境,只有NFS存储支持,NFS容易搭建获得。
NFS本身不支持 Storage Classes 的动态申请存储空间
需要一个 nfs-client-provisioner 从而让NFS也具有 Storage Classes 动态分配申请存储空间的能力

安装NFS Server 服务器端

略过,自己搭建,我使用的是群晖提供的NFS服务
10.8.8.2:/volume1/k8s

Rancher(K8S) node节点

所有node安装mount nfs客户端支持
yum install -y nfs-utils

mount -t nfs 10.8.8.2:/volume1/k8s /mnt/
确保node节点可以挂载nfs

启用额外的Rancher Catalogs

Global 》 Catalog 》
Helm Stable(Enable)
Helm Incubator (Enable)
注意启用后需要等10多分钟才能看到Catalogs里面的内容

启用nfs-client-provisioner 从而支持NFS Storage Classes

Global 》 Catalog 》 Launch
搜索 nfs-client-provisioner 》 View Details
add Answer
nfs.server:10.8.8.2
nfs.path:/volume1/k8s

设置

Global 》 Cluster 》 Storage 》Storage Classes 》
nfs-client 》 Set as default

好了现在可以愉快的部署Catalogs 或者 helm 的应用了, 需要持久化的应用能自动的在NFS共享中开辟新的文件夹存储空间了