干货 | API开放提升效率和安全性攻略


API开放常见问题

每个开发人员在工作都会经常涉及各种API,基于这些API实现了形形色色丰富的功能。除了提供给内部其他服务使用的API,越来越多企业以API的方式将特有的数据或能力暴露出去,被其他公司或者最终用户调用,然后根据一定方式进行计费实现企业创收。很多企业在进行API开放时,往往定义了一个签名校验算法后就将API开放出去,并以为万事大吉了。但是经过一段时间却出现了很多意料之外的问题。例如:
  • API提供者无法清晰掌握每个调用方的使用情况。

  • 有些调用方的使用量有时会变得很大,影响API稳定性。

  • 开放的API和调用方逐渐增多,致使有哪些API在开放,谁能调用哪些API的管理变得比较混乱。

  • 有些调用方传参方式总是不对,导致开发同学在联调时花费大把时间。

  • 经常会有一些莫名其妙的流量尝试攻击。

以上的每一个问题都需要花不少时间来解决,搞得API开发的同学苦不堪言。但其实所有成熟公有云提供商都拥有API网关这款产品,且功能大同小异。而当我们在选择API网关的时候,第一位要考虑的就是 稳定性安全性性能。接着还需要考虑所支持的功能的丰富度、使用的难易程度、使用状况及可观测性等。几乎所有的API网关产品都支持互联网后端地址,不需要一定要把服务部署到公有云上。你的服务可以仍然部署在你的私有云或者其他家公有云,将你的服务地址注册到你选好的云API网关上,用户从API网关作为入口访问你的服务即可,只用非常小的一次性研发投入和一些配置工作。
除了选择公有云服务,也有很多开源项目可供大家选择。从功能的完毕程度来看,Kong是个不错的选择(https://konghq.com/kong/)。如果对nginx+lua插件的方式比较不习惯,喜欢java开发的话则可以使用zuul(https://github.com/Netflix/zuul)或者spring cloud gateway(https://github.com/spring-cloud/spring-cloud-gateway)来进行开发实现。
而下面我们将以京东云API网关为例,看看怎么利用这类产品对API的开放进行加速和各方面的强化。

API管理

清晰的API管理工具和流程能降低API的维护成本,提高开放效率。
京东云API网关以分组和API两级管理API。可以按分组的方式来管理权限,流量,版本,发布,SDK和文档等,同时又可以按API来定义具体的接口细节、后端配置、转换配置。
大部分API网关产品都支持版本和发布环境的概念,这些概念有助于更好的管理即将发布的API。京东云API网关的版本指API定义的变化历史,和git仓库一样,每一次的变化都基于一个已有的版本进行,并且可以针对一个具体的API版本来生成这个版本对应的SDK和文档,然后部署到某个发布环境。京东云API网关预设了测试、预发、线上三个发布环境,用于区分新版本的测试环境和供API调用者使用的生产环境。而要提供新的API,首先需要把API定义出来,再部署到测试环境。部署之后,可以通过API调试界面在页面进行简单调试,也可以下载SDK后编程实现。

权限管理

因为一般会有多个API开放给多个调用方,谁能调用哪些往往需要频繁调整,所以权限管理也是比较麻烦的一个工作。如果把权限相关配置放在API提供方的程序里,将非常不灵活,维护成本也会很高,但是利用API网关就可以实现API实现逻辑与API鉴权逻辑的分离。当鉴权逻辑主要交给API网关来进行后,API的实现就变得更加纯粹。
在鉴权方面,各家API网关产品支持的授权模式都不完全相同。目前,京东云API网关支持的授权模式有订阅密钥、API网关签名和京东云用户签名三种。订阅密钥的方式为在请求头传一个订阅密钥,不仅使用成本低,还能保证中等程度的安全性;签名密钥则会根据用户的AK/SK,利用京东云自定义的加密算法对数据进行传输校验,从而保证很高的准确性和安全性。由于API网关已经做了用户侧的验证,因此API提供方只需要验证其收到的请求是来自于API网关即可。关于验证的方式,国外的API网关产品较多使用客户端证书,而国内的API网关一般采用SecretKey签名的方式,京东云API网关也是采用后端签名的方式进行验证。
而在创建授权的时候,也可以配置访问授权、API分组及发布环境之间的任意绑定关系,使得一个调用者可以只调用某个分组,也可以调用多个分组,还可以限制其只能调用某个分组的线上环境,而测试和预发环境则只允许测试Key进行访问。

流量管理

如果希望给调用者做授权,同时想要保证他按照我们期望的频次来调用。需要对已授权的调用操作进行流控限制时,只需要配置一条流控策略并绑定到对应的API分组上即可。这里配置了两个流控值,即API分组次数限制和单Access Key次数限制。API分组的次数限制用来保护API提供者的后端服务,这个值小于后端服务可支撑的上限即可;单Access Key次数限制用来限制单个API调用者,可以按需设置。

监控和日志

当API被调用了以后,查看调用统计和日志就变得很重要了。在京东云的API网关中,能够看到请求量、失败量和响应时间等。此外,还可以看到API调用的具体日志,从而对API进行安全可控的管理。


除了上述这些丰富的功能,API网关产品还支持各种便利开发过程的功能,例如Mock后端服务。需要开发新功能时,可以在API网关上配置API接口后使用Mock后端发布到测试环境,这样即使后端功能还未开发好,前端以及移动端的开发也可以使用Mock地址来进行开发和联调,大大提升了开发效率。
以京东云API网关为例,我们看到了如何使用API网关产品轻松地对API开放进行加速和强化,从而解决了企业在API开放过程中出现的一系列问题。选择一款合适的API网关产品,将能够带领用户在API经济热潮下快速找到正确的前进方向,为企业赋能,使企业更好的预见未来,拥抱未来!


点击"京东云"了解更多产品信息




转载于:https://juejin.im/post/5d5624c8e51d453c11684c47

### 回答1: Spark Streaming 和 Flink 都是流处理框架,但在一些方面有所不同。 1. 数据处理模型 Spark Streaming 基于批处理模型,将流数据分成一批批进行处理。而 Flink 则是基于流处理模型,可以实时处理数据流。 2. 窗口处理 Spark Streaming 的窗口处理是基于时间的,即将一段时间内的数据作为一个窗口进行处理。而 Flink 的窗口处理可以基于时间和数据量,可以更加灵活地进行窗口处理。 3. 状态管理 Spark Streaming 的状态管理是基于 RDD 的,需要将状态存储在内存中。而 Flink 的状态管理是基于内存和磁盘的,可以更加灵活地管理状态。 4. 容错性 Flink 的容错性比 Spark Streaming 更加强大,可以在节点故障时快速恢复,而 Spark Streaming 则需要重新计算整个批次的数据。 总的来说,Flink 在流处理方面更加强大和灵活,而 Spark Streaming 则更适合批处理和数据仓库等场景。 ### 回答2: Spark Streaming 和 Flink 都是流处理框架,它们都支持低延迟的流处理和高吞吐量的批处理。但是,它们在处理数据流的方式和性能上有许多不同之处。下面是它们的详细比较: 1. 处理模型 Spark Streaming 采用离散化流处理模型(DPM),将长周期的数据流划分为离散化的小批量,每个批次的数据被存储在 RDD 中进行处理,因此 Spark Streaming 具有较好的容错性和可靠性。而 Flink 采用连续流处理模型(CPM),能够在其流处理过程中进行事件时间处理和状态管理,因此 Flink 更适合处理需要精确时间戳和状态管理的应用场景。 2. 数据延迟 Spark Streaming 在处理数据流时会有一定的延迟,主要是由于对数据进行缓存和离散化处理的原因。而 Flink 的数据延迟比 Spark Streaming 更低,因为 Flink 的数据处理和计算过程是实时进行的,不需要缓存和离散化处理。 3. 机器资源和负载均衡 Spark Streaming 采用了 Spark 的机器资源调度和负载均衡机制,它们之间具有相同的容错和资源管理特性。而 Flink 使用 Yarn 和 Mesos 等分布式计算框架进行机器资源调度和负载均衡,因此 Flink 在大规模集群上的性能表现更好。 4. 数据窗口处理 Spark Streaming 提供了滑动、翻转和窗口操作等灵活的数据窗口处理功能,可以使用户更好地控制数据处理的逻辑。而 Flink 也提供了滚动窗口和滑动窗口处理功能,但相对于 Spark Streaming 更加灵活,可以在事件时间和处理时间上进行窗口处理,并且支持增量聚合和全量聚合两种方式。 5. 集成生态系统 Spark Streaming 作为 Apache Spark 的一部分,可以充分利用 Spark 的分布式计算和批处理生态系统,并且支持许多不同类型的数据源,包括Kafka、Flume和HDFS等。而 Flink 提供了完整的流处理生态系统,包括流SQL查询、流机器学习和流图形处理等功能,能够灵活地适应不同的业务场景。 总之,Spark Streaming 和 Flink 都是出色的流处理框架,在不同的场景下都能够发挥出很好的性能。选择哪种框架取决于实际需求和业务场景。 ### 回答3: Spark Streaming和Flink都是流处理引擎,但它们的设计和实现方式有所不同。在下面的对比中,我们将比较这两种流处理引擎的主要特点和差异。 1. 处理模型 Spark Streaming采用离散流处理模型,即将数据按时间间隔分割成一批一批数据进行处理。这种方式可以使得Spark Streaming具有高吞吐量和低延迟,但也会导致数据处理的粒度比较粗,难以应对大量实时事件的高吞吐量。 相比之下,Flink采用连续流处理模型,即数据的处理是连续的、实时的。与Spark Streaming不同,Flink的流处理引擎能够应对各种不同的实时场景。Flink的实时流处理能力更强,因此在某些特定的场景下,它的性能可能比Spark Streaming更好。 2. 窗口计算 Spark Streaming内置了许多的窗口计算支持,如滑动窗口、滚动窗口,但支持的窗口计算的灵活性较低,只适合于一些简单的窗口计算。而Flink的窗口计算支持非常灵活,可以支持任意窗口大小或滑动跨度。 3. 数据库支持 在处理大数据时,存储和读取数据是非常重要的。Spark Streaming通常使用HDFS作为其数据存储底层的系统。而Flink支持许多不同的数据存储形式,包括HDFS,以及许多其他开源和商业的数据存储,如Kafka、Cassandra和Elasticsearch等。 4. 处理性能 Spark Streaming的性能比Flink慢一些,尤其是在特定的情况下,例如在处理高吞吐量的数据时,在某些情况下可能受制于分批处理的架构。Flink通过其流处理模型和不同的调度器和优化器来支持更高效的实时数据处理。 5. 生态系统 Spark有着庞大的生态系统,具有成熟的ML库、图处理库、SQL框架等等。而Flink的生态系统相对较小,但它正在不断地发展壮大。 6. 规模性 Spark Streaming适用于规模小且不太复杂的项目。而Flink可扩展性更好,适用于更大、更复杂的项目。Flink也可以处理无限制的数据流。 综上所述,Spark Streaming和Flink都是流处理引擎,它们有各自的优缺点。在选择使用哪一个流处理引擎时,需要根据实际业务场景和需求进行选择。如果你的业务场景较为复杂,需要处理海量数据并且需要比较灵活的窗口计算支持,那么Flink可能是更好的选择;如果你只需要简单的流处理和一些通用的窗口计算,Spark Streaming是更为简单的选择。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值