API 网关的功能用途及实现方式

1. API 网关诞生背景

前言

API 经济生态链已经在全球范围覆盖, 绝大多数企业都已经走在数字化转型的道路上,API 成为企业连接业务的核心载体, 并产生巨大的盈利空间。快速增长的 API 规模以及调用量,使得企业 IT 在架构上、模式上面临着更多的挑战。

API 是什么

API 网关是一个服务器,是系统的唯一入口。从面向对象设计的角度看,它与外观模式类似。API 网关封装了系统内部架构,为每个客户端提供一个定制的 API。它可能还具有其它职责,如身份验证、监控、负载均衡、缓存、请求分片与管理、静态响应处理。API 网关方式的核心要点是,所有的客户端和消费端都通过统一的网关接入微服务,在网关层处理所有的非业务功能。通常,网关也是提供 REST/HTTP 的访问 API。服务端通过 API-GW 注册和管理服务。

1. API 开放数量不断增加

毋庸置疑,随着企业的数据化进展,微服务改造,不同领域的 API 层出不穷,早在 2014 年 ProgrammableWeb 便预测 API 矢量可达到 100,000 到 200,000,并会不断增长。API 开发数量的增加给边缘系统带来机会,也随即演变了 API 网关的出现。大规模的 API 管理系统成为核心的发展趋势。

The API Economy Disruption and the Business of APIs,Nordic APIs

2. API 服务平台多样化

最初的 API 主要针对不同单体应用的网络单元之间信息交互,现已演变到服务间快速通讯。随着人工智能 EI,IOT 的不断演进,依赖 API 的平台不断更新,如 Web,Mobile,终端等,未来将会出现更多的服务体系。包括不限于:

  • 浏览器
  • IOS
  • Android
  • macOS
  • Windows
  • Linux
  • IOT
  • 其他移动端
  • 小程序
  • 终端设备(如智慧零售、工业的终端等)
  • ......

3. 逐步替换原有企业的服务模式,API 即商品

卖计算,卖软件,卖能力,最终的企业的销售模式会逐步转变,能力变现,释放数据价值,依托不同的 API 管理平台创造新的盈利。

API 网关诞生背景

随着 API 的整体趋势发展,每个时期都面临着不同的挑战,架构也随之变化,具体如下图:

  1. 1960-1980:阿帕网、ATTP、TCP
  2. 1980-1990:点对点
  3. 1990-2000:消息中间件、ESB(企业服务总线,Enterprise service bus),SOA(面向服务的架构)
  4. 2000 至今:Integration as a service,RESTful services,API 管理,云上编排

API economy From systems to business services

从最原始的“传输协议通讯” -> “简单的接口集成” -> “消息中间件” -> “标准 REST”, 可以看到 API 的发展更趋向于简洁, 集成,规范化, 这也促使更多的系统边界组件不断涌现,在承载了万亿级的 API 经济的背景下, API 网关应运而生。

如果没有合适的 API 管理工具, API 经济不可能顺利开展。 同时提出了对于 API 管理系统的生命周期定义: planning(规划), design(设计), implementation(实施), publication(发布),operation(运维), consumption(消费), maintenance(维护) and retirement of APIs(下架)

如果没有合适的 API 管理工具, API 经济不可能顺利开展。 同时提出了对于 API 管理系统的生命周期定义: planning(规划), design(设计), implementation(实施), publication(发布),operation(运维), consumption(消费), maintenance(维护) and retirement of APIs(下架)

-- Magic Quadrant for Full Life Cycle API Management,Gartner, 2016-10-27

2. API 网关核心功能

  • API 生命周期管理
    • planning(规划)
    • design(设计)
    • implementation(实施)
    • publication(发布)
    • operation(运维)
    • consumption(消费)
    • maintenance(维护)
    • retirement(下架)
  • API 网关基础功能
    • 认证
    • 鉴权
    • 服务发现和集成
    • 负载均衡
    • 日志
    • 链路追踪
    • 监控
    • 重试
    • 限流
    • QoS
    • 熔断器
    • 映射
    • 缓存
    • Header、query 字符串 等 转义
    • API 文档
    • API 测试
    • SDK 生成
  • API 多版本、多环境管理
  • 插件
  • API 集中式 metrics、logging、tracing 管理
  • 安全
    • HTTPS
    • IP 黑白名单
  • 高可用
    • 可热重启
  • 高性能
  • 可扩展性
    • 无状态横向扩展

3. API 网关的用途

OpenAPI

企业需要将自身数据、能力等作为开发平台向外开放,通常会以 rest 的方式向外提供。最好的例子就是淘宝开放平台、腾讯公司的 QQ 开发平台、微信开放平台。

Open API 开放平台必然涉及到客户应用的接入、API 权限的管理、调用次数管理等,必然会有一个统一的入口进行管理,这正是 API 网关可以发挥作用的时候。

微服务网关

在微服务架构中,有一个组件可以说是必不可少的,那就是微服务网关,微服务网关处理了负载均衡,缓存,路由,访问控制,服务代理,监控,日志等。

API 网关在微服务架构中正是以微服务网关的身份存在。

API 中台

上述的微服务架构对企业来说有可能实施上是困难的,企业有很多遗留系统,要全部抽取为微服务改动太大,对企业来说成本太高。

但是由于不同系统间存在大量的 API 服务互相调用,因此需要对系统间服务调用进行管理,清晰地看到各系统调用关系,对系统间调用进行监控等。

API 网关可以解决这些问题,我们可以认为如果没有大规模的实施微服务架构,那么对企业来说微服务网关就是企业的 API 中台。

4. API 网关的价值

通过 API 网关,可以封装后端各种服务,以 API 的形式,提供给各方使用。API 网关产品的优势总结如下:

  • API 全生命周期管理:协助开发者轻松完成 API 的创建、维护、发布、监控等整个生命周期的管理。
  • 丰富的服务治理能力:支持 API 限流,参数校验,元数据维护,SDK 生成,批量操作等能力,协助开发者高效管理服务。
  • 可观察性:通过 API 网关,支持对调用次数,前后端错误次数等丰富监控指标的可视和告警能力;通过全面的监控告警,保证用户服务的可用性。
  • 可运营性:支持 企业 OpenAPI 定价,账单等运营功能
  • 服务安全:通过接入多种认证方式,确保用户 API 的访问安全性;通过严格的流量控制,避免用户服务的过载。
  • 前后端业务解耦
  • 多类型后端打通

5. API 网关的实现方式

主流 API 网关

  • Istio(以及最新出的 Envoy Gateway)
  • Linkerd
  • NGINX 及其商业版
  • KONG
  • Traefik
  • APISIX
  • RedHat 3scale
  • Netflix Zuul
  • Spring Cloud Gateway
  • Amazon API Gateway
  • 阿里云 API 网关(其最新开源的 Higress 是基于 Envoy Gateway 的)
  • 腾讯云 API 网关
  • MuleSoft

OpenAPI

对于定位 OpenAPI 平台的 API 网关,目前只能选择专业的 API 网关作为解决方案。

微服务网关

对于定位为「微服务网关」的 API 网关,业务有多种实现方式:

Service Mesh

典型的如 Istio,架构如下:


通用反向代理

基于 NGINX 或 NGINX + LUA + OpenResty 的实现。典型如:

  • Nginx 及其 商业版
    • NGINX Controller(API 管理、App 交付)
    • NGINX Plus(API Gateway,负载均衡,仪表板)
    • NGINX Ingress Controller
    • NGINX Service Mesh
  • KONG
  • Traefik
  • 3scale

API 网关框架

  • Netflix Zuul,zuul 是 spring cloud 的一个推荐组件
  • Spring Cloud Gateway

公有云解决方案

其实公有云的解决方案也是基于以上方案的定制化开发并产品化后发布到公有云上,主流的也是基于:NGINX + LUA + OpenResty, 或者最新的可能是基于 Istio Gateway 的实现

  • Amazon API Gateway
  • 阿里云 API 网关
  • 腾讯云 API 网关

其他方案

  • 基于 Netty、非阻塞 IO 模型。
  • 基于 Node.js 的方案。这种方案是应用了 Node.js 的非阻塞的特性。
  • 基于 Java,如 MuleSoft
本文转载于网络 如有侵权请联系删除

相关文章

  • 超超超高频面试题,快来混个脸熟(二)

    这套题是某大厂为在校生举办的活动,据说是大厂高频面试原题,我代大家刷一刷,给大家伙混个脸熟160.相交链表两个指针走,走到尽头换一个头开始遍历相遇或者走到头时两个指针走的路程一定一样//go funcgetIntersectionNode(headA,headB*ListNode)*ListNode{ A,B:=headA,headB forA!=B{ ifA==nil{ A=headB }else{ A=A.Next } ifB==nil{ B=headA }else{ B=B.Next } } returnA } 复制199.二叉树的右视图层序遍历,把一行放入队列,用队列的大小来指导循环次数把每一行的最后一个数放入列表,最终返回这个列表//cpp classSolution{ public: vector<int>rightSideView(TreeNode*root){ vector<int>ans; if(!root)returnans; queue<TreeNode*>q; q.push(root); while(!q.empty()){

  • 为什么每个企业都需要关注微博?

    在做企业网站推广的过程中,我们不断的采用各种渠道,为目标企业获得流量,特别是借助新媒体平台的力量,但仍然有诸多中小企业,对微博并不感冒,而实际上,善用微博营销,它非常有利于辅助我们企业做全方面的数字营销工作。那么,为什么每个企业需要关注微博?根据以往网络推广的经验,我们将通过如下内容,进一步说明:1、微博价值之品牌宣传品牌的重要性不言而喻。微博缩短了用户与企业的距离,让企业走进用户,参与用户讨论,聆听用户声音,第一时间知晓用户的想法,逐步完善自己的不足;让用户体验企业的服务和态度,公开谈论企业好与坏,分享自己的体验,而这信息又会迅速的被其他人看到或转载传播,企业主动的转播那些已经产生的好的用户评价,这些来自用户的声音更容易让更多人认同,提高企业的美誉度和信赖度。2、微博价值之客户管理首先,在微博这个开放透明的平台上,企业要更加重视用户的声音,因为他们的行为影响的远不止一个人,而是成百上千的人。一个用户投诉,拼命的在每条微博上投诉,留言,会给企业带来极大的恐慌,掉粉无数,影响极大。其次,寻找意见领袖,就是让那些乐于为别人提供信息、传播信息的“活跃分子”为企业传递声音。他们在小众圈子里有一

  • SpringCloud入门(3)OpenFeign

    Feign的目的是为了编写Java客户端变得更加容易,大白话就是可以让我们像平常controller调service一样方便,没有前两篇文章那么繁琐,具体可以看下面的例子。1引入OpenFeign建立一个父open-feign模块,在其模块下再建立一个子feign-server模块,为了导入OpenFeign模块,需要修改父模块的pom文件,其实就是加入了依赖<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency> 复制这样就能够把OpenFeign引入,最终的项目结构如下2配置文件和主启动类没有什么特殊情况,服务都是注册进Eureka中,然后再编写自己的端口和服务名称即可。eureka: client: service-url: defaultZone:http://localhost:8001/eureka/ se

  • JPA操作遇到的问题(仅供自我学习)Spring boot使用Jpa的@Modifying的clearAutomatically = true的作用

    进行删除时报错:NoEntityManagerwithactualtransactionavailableforcurrentthread-cannotreliablyprocess'remove'call;nestedexceptionisjavax.persistence.TransactionRequiredException:NoEntityManagerwithactualtransactionavailableforcurrentthread-cannotreliablyprocess'remove'call使用JPA的方法报错: JPANoEntityManagerwithactualtransactionavailableforcurrentthread-cannotreliablyprocess‘remove’call原因是使用Update、Delete等修改数据库方法没有加上事务注解,加上@Transactional即可 @Override @Transactional publicvoiddeleteNoneRegion(L

  • Mybatis源码学习第七天(PageHelper分析)

    其实我本来是不打算写这个PageHelper的,但是后来想了想,还是写了吧!现在市场用Mybatis的产品分页应该差不多都是用PageHelper来实现的,毕竟Mybatis的分页rowbound...不说了之前说了,反正是没人用;分页插件的使用:中文文档:https://github.com/pagehelper/Mybatis-PageHelper/blob/master/README_zh.md使用手册:https://github.com/pagehelper/Mybatis-PageHelper/blob/master/wikis/zh/HowToUse.md注意事项:https://github.com/pagehelper/Mybatis-PageHelper/blob/master/wikis/zh/Important.md使用步骤:添加Maven依赖:<dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper</artif

  • elasticsearch单机版安装及安装过程踩的坑整理

    elasticsearch单机版安装及安装过程踩的坑整理环境及版本Linux版本:centos7.3JDK版本:1.8Elasticsearch版本:Linux用户:esuser说明:因为es不能使用root用户安装,所以我们需要创建新用户:esuser.本文中软件:编辑 ​编辑 ​开始安装1:创建es用户useradd用户名.如创建esuser这个用户:useraddesuser编辑 ​给已经创建的用户设置密码,命令:passwd密码。如给刚才创建esuser创建密码为123456.命令:passwd123456编辑 ​创建完成之后,需要重新设置密码。上传es的安装包2:Es下载:https://www.elastic.co/guide/en/elasticsearch/reference需要注意:es7以后需要高版本的jdk或者openJDK下图是es7对JDK版本的要求。编辑 ​因为凯哥本地的JDK是1.8,所以不能使用ES7+的凯哥使用ES6.8的。下图是6.8对JDK的要求。编辑 ​6.8下载地址:编辑 ​3:上传并解压下载后,使用esuser用户将下载的安装包上传到服务器中

  • 超越SiamRPN++,SiamMan达到目标跟踪新SOTA

    今天arXiv上新出论文SiamMan:SiameseMotion-awareNetworkforVisualTracking,提出的目标跟踪算法SiamMan在几大数据集上精度超越了SiamRPN++,GPU上运行速度可达到45fps。以下为作者信息: SiamMan算法架构图如下:使用孪生网络提取特征,后接分类、回归和定位三个分支。分类分支用于区分前景和背景,回归分支用于回归目标的边界框。比较特别的是,为了减少手动设计的锚框适应不同目标运动模式的影响,设计了定位分支,该分支旨在粗略地定位目标,以帮助回归分支生成准确的结果。同时,SiamMan将全局上下文模块引入到定位分支中,以捕获视频远程依赖关系,从而在目标大位移时具有更高的鲁棒性。此外,SiamMan设计了一个多尺度的可学习注意力模块,以指导这三个分支利用判别功能获得更好的性能。实验结果 作者在几个跟踪数据集上与state-of-the-art算法的精度比较:EAO综合了精度和鲁棒性,该文提出的算法超过了所有之前的算法。SianMask、SiamMask_E因为使用了分割结果拟合目标包围框,所有Accuracy略高,但整体上Si

  • Jersey 2.x 运行项目 原

    现在我们已经有可以可以运行的项目了,让我们队这个项目进行一些测试吧。你需要运行下面的一些命令行:mvncleantest这个命令将会对项目进行编译后运行单元测试。你应该会看到和下面类似的输出表示项目编译成功了:Testsrun:1,Failures:0,Errors:0,Skipped:0 [INFO]------------------------------------------------------------------------ [INFO]BUILDSUCCESS [INFO]------------------------------------------------------------------------ [INFO]Totaltime:2.742s [INFO]Finishedat:2018-03-27T15:05:50-04:00 [INFO]FinalMemory:17M/205M [INFO]------------------------------------------------------------------------复制上面的

  • 【AI快报】特斯拉挖走奥迪高管 | 谷歌很可能在I/O大会发布VR产品

    特斯拉挖走奥迪高管负责汽车生产计划提升5倍产量北京时间5月14日上午消息,特斯拉周五宣布,已聘请大众高管皮特·霍齐霍丁格(PeterHochholdinger)为汽车生产副总裁。特斯拉表示,霍齐霍丁格的任务将是优化特斯拉ModelS和ModelX的生产,提高产量,同时协助设计面向Model3车型、规模灵活、成本高效的生产项目。特斯拉目前计划在未来两年内使汽车产量提升5倍,达到50万辆。许多业内观察家认为,即使能招聘到关键的人才,实现这一目标也非常困难。来源:新浪科技谷歌正在研发与Echo竞争的语音助手产品 根据recode的消息,谷歌正在研发能与亚马逊的Echo竞争的语音助手产品。这一新产品将看起来很像谷歌的无线路由器Onhub,涉及谷歌的搜索和语音识别技术。谷歌内部人士把这一产品称为“Chirp”,在下周的开发者大会上,应该还不会见到相关产品,但是谷歌很有可能在年内公布这一产品。Recode说。来源:YahooI/O大会召开在即,谷歌很可能发布安卓VR科技博客Gizmodo和Engadget的联合创始人皮特·罗杰斯(PeterRojas)今天表示,在下周的I/O开发者大会召开期间,谷

  • 黑客是如何利用Joomla Google地图插件进行反射DDoS攻击的

    安全研究人员最近发现了大量利用JoomlaGoogle地图插件漏洞进行的反射DDoS攻击。 来自Akamai科技安全工程及响应团队(ProlexicSecurityEngineering&ResponseTeam,PLXsert)的研究人员发现Google地图插件中的一个漏洞,能够让攻击者将安装Google地图插件的Joomla服务器变成用于DDoS的工具。令人担心的是,这个被取名为“Joomla反射DDoS攻击”的方法成本非常低,非常容易运行。Joomla反射DDoS反射DDoS似乎成为了DDoS攻击者们的新时尚。2014年第四季度,Akamai观察到39%的DDoS攻击流量是使用的反射方法,这种方法利用了某种网络协议或者是程序漏洞,能够让DDoS攻击者将恶意流量反射到第三方服务器或者设备上。分布式反射拒绝服务攻击对地下罪犯非常常见。黑客利用了一个Joomla(一套在国外相当知名的内容管理系统)Google地图插件中的漏洞进行攻击,这个漏洞在2014年初被发现。“2014年2月,Joomla的Google地图插件中的多个漏洞被发现。其中一个漏洞能够让插件充当代理。有漏洞的服务

  • 测试影响分析(TIA),让测试更快的技术

    构建过程中,测试影响分析(TIA)是一种加快自动化测试的新式方法。它的工作原理就是通过获得新的代码变动,分析这些代码的调用关系图来判断应该调用那些自动化测试用例进行自动化测试。微软已经在这个方法上做了大量的工作,而且对于开发团队也可能有一些帮助。现代软件开发中有很多让人头疼的问题,其中一个问题就是在代码真正上线之前要完成非常多的测试。但是在执行过程中,开发人员会采用一种代价很高的应对策略,那就是不在自己的本地的工作站上面做任何测试,相反,它们依赖于稍后在集成服务器上运行的测试。当(shiftright)状况出现,就会无可避免的掉进无休止的代码修复中,不能自拔。当然,预集成前进行的所有测试内容都应该在持续集成(CI)构建中集成后立即进行测试。即使是最高级别的研发团队,在开发过程中可能也会遇到为了处理严重问题而临时进行快速提交的情况。这些团队也可能有人在约定的集成过程中希望“省事”,而不运行测试。幸运的是,CI服务器和一系列标准化的构建过程会很快捕获这些问题。目前已存在的各种加速测试技术中,包括利用多个服务器运行不同的测试模块,为那些慢速的远程服务提交测试替身(TestDouble)技术。

  • 激活数据价值,探究DataOps下的数据架构及其实践丨DTVision开发治理篇

    据中国信通院发布,2012年到2021年10年间,我国数字经济规模由12万亿元增长到45.5万亿元,在整个GDP中的比重由21.6%提升至39.8%。顺应时代发展新趋势,“数据”成为新的生产要素已是毋庸置疑的共识。如果说数据中台的崛起代表着企业数字化转型从流程驱动走向数据驱动,从数字化走向智能化。那么DataOps,则是实现数据中台的一个优秀的理念或方法论。DataOps的概念早在2014年即由LennyLiebmann提出,2018年DataOps正式被纳入Gartner的数据管理技术成熟度曲线当中,标志着DataOps正式被业界所接纳并推广起来。虽然目前在国内仍处于发展初期,但是DataOps的热度逐年上升,在可预见的未来2-5年内将得到更加广泛的实践应用。袋鼠云便是其中的一位探索者。作为全链路数字化技术与服务提供商的袋鼠云,从创立以来便一直深耕大数据领域。伴随着各行各业加速数智化转型的步伐逐年加快,对于数据治理、数据管理等方面的许多问题也逐渐显露。为此,在技术进步和客户数字转型需求的驱动下,袋鼠云打造的一站式大数据开发与治理平台——数栈DTinsight,基于DataOps理念开

  • cmd ping大包命令_cmd中ping命令无效

    大家好,又见面了,我是你们的朋友全栈君。在cmd中用PING命令时,出现’Ping’不是内部或外部命令,也不是可运行的程序或批处理文件。先了解一下内容:1、可执行文件、命令文件和批处理文件以.exe或者.com或者.bat为扩展名的文件分别被称为可执行文件、命令文件和批处理文件。2、外部命令和内部命令DOS命令可以分为外部命令和内部命令,内部命令包含在一个名为command.com的文件,在系统启动时候驻留在内存中。外部命令是保存在c:\windows\system32中的一些可以直接有效的文件的文件,包括.exe文件,.com文件,.bat文件。系统变量中path的作用是引导系统从path中设置的根目录开始,查找匹配的路径,并组成新的路径,从而执行文件。如果path变量设置不当就会使得系统无法查找到相关文件从而出错。系统默认的系统变量path的值是c:\windows\system32。也就是说用户在命令提示符后输入文件名后,系统会自动到c:\windows\system32的目录下去寻找文件,而不管用户在哪个命令提示符后输入。如果path的值中不包含c:\windows\syste

  • Nslookup命令_nslookup命令反解ip

    大家好,又见面了,我是你们的朋友全栈君。 1、nslookup作用nslookup用于查询DNS的记录,查询域名解析是否正常,在网络故障时用来诊断网络问题2、查询a.直接查询nslookupdomain[dns-server] //如果没有指定dns服务器,就采用系统默认的dns服务器。复制b.查询其他记录nslookup-qt=typedomain[dns-server] type: A-->地址记录 AAAA-->地址记录 AFSDBAndrew-->文件系统数据库服务器记录 ATMA-->ATM地址记录 CNAME-->别名记录 HINHO-->硬件配置记录,包括CPU、操作系统信息 ISDN-->域名对应的ISDN号码 MB-->存放指定邮箱的服务器 MG-->邮件组记录 MINFO-->邮件组和邮箱的信息记录 MR-->改名的邮箱记录 MX-->邮件服务器记录 NS-->名字服务器记录 PTR->反向记录 RP-->负责人记录 RT-->路由穿透记录 SRV-->TCP服务器

  • 四大主流平台运营规则揭秘

    做新媒体最怕什么? 文章没有阅读量吗? 不,是运营了大半年之后 账号既没粉丝也没阅读量!!   现在的新媒体平台辣么多规则辣么复杂 如何才能有效提升运营效率? 为了解决用户宝宝们的困扰 小易最近在各大平台潜水 问遍了周围的新媒体人 深扒了大神们的运营经验 终于总结出了四大主流平台背后的秘密 赶紧来get一下!      四大主流平台运营规则揭秘     (头条、百家、企鹅、大鱼)   ▶头条号     头条号2013年上线,是字节跳动公司发布的自媒体平台,主要特点:采用推荐算法进行内容分发。   想做好头条号首先要了解头条的推荐算法。简单来说,如果想在头条号产出爆文,最直接的办法就是蹭热点,头条号内容的阅读量,靠的是平台推荐,往往原创、蹭热点和话题性比较强的文章可以在头条获得更高的推荐量。   头条号虽然流量不错,但用户整体层次并不高,小易建议大家推送通俗易懂的内容,且内容不宜过长,没有内容时也可以选择推送图集,高质量的图片有时甚至比文章更有吸引力。   但是一定要避免低俗

  • MySQL体系结构

    MySQL体系结构             了解MySql必须牢牢记住其体系结构图,Mysql是由SQL接口,解析器,优化器,缓存,存储引擎组成的 1Connectors指的是不同语言中与SQL的交互2ManagementServeices&Utilities:系统管理和控制工具3ConnectionPool:连接池。管理缓冲用户连接,线程处理等需要缓存的需求4SQLInterface:SQL接口。接受用户的SQL命令,并且返回用户需要查询的结果。比如selectfrom就是调用SQLInterface5Parser:解析器。SQL命令传递到解析器的时候会被解析器验证和解析。解析器是由Lex和YACC实现的,是一个很长的脚本。 主要功能: a.将SQL语句分解成数据结构,并将这个结构传递到后续步骤,以后SQL语句的传递和处理就是基于这个结构的 b. 如果在分解构成中遇到错误,那么就说明这个sql语句是

  • 一则sql优化实现接口耗时降低30倍的优化案例

    业务场景: 也测的业务,如上图,通过捕获业务的涉及的接口如下: 查询接口耗时大于7s,已经是非常的慢 经验提示: 一般接口响应时间慢的问题,最简单的方式就是监控接口相关的sql是否存在问题 开启mysql的慢查询监控:   这两个sql加起来,大致等于接口的响应时间,证明问题猜的没错,问题就是这两个sql查询慢导致的问题7s左右 验证sql是否有问题:   查看这个表的执行计划:     发现d表走了全表扫描,直接查询60多万的数据,肯定会很慢 由于d表已经存在orgId存在索引,考虑给o表添加索引 ALTERtablet_debt_overviewADDINDEXIDX_orgId(`orgId`);   现在扫描的行数减少了,只扫描必要的4999行     另外的sql问题也解决了 不用压测,这个性能问题就可以解决 总结:所以在性能测试的过程中,不一定非要执行压测才能发现性能问题,一般在性能压测前,简单的执行一下业务,看看是否存在耗时比较长的业务,提前优化,提高压测的效率  

  • 第八周课程总结&amp;实验报告(六)

    实验四类的继承 一、实验目的 (1)理解异常的基本概念; (2)掌握异常处理方法及熟悉常见异常的捕获方法。 二、实验要求 (1)练习捕获异常、声明异常、抛出异常的方法、熟悉try和catch子句的使用。 (2)掌握自定义异常类的方法。 三、实验内容 (一)编写一个类,在其main()方法中创建一个一维数组,在try字句中访问数组元素,使其产生ArrayIndexOutOfBoundsException异常。在catch子句里捕获此异常对象,并且打印“数组越界”信息,加一个finally子句,打印一条信息以证明这里确实得到了执行。 (二)自定义异常类的使用 车站检查危险品的设备,如果发现危险品会发出警告。编程模拟设备发现危险品。 技术方案: 编写一个Exgeption的子类DangerException,该子类可以创建异常对象,该异常对象调用toShow()方法输出“危险物品”。编写一个Machine类,该类的方法checkBag(Goodsgoods)当发现参数goods是危险品时(goods的isDanger属性是true)将抛出DangerException异常。 程序在主类的ma

  • 适配器模式及C++实现

    适配器模式 适配器模式是很好理解的模式了,生活中也非常常见,什么插头2口转3口,什么USB转PS2,这都算是适配器模式。说白了,就是如果有一些东西提供的接口你很像用,但是你手头没有好的接口使用它,这个就需要一个适配器,将你需要的接口转换成你所拥有的接口。这样的好处也是显而易见,就是你不用改变你现在所拥有的接口,保证你在任何地方的用法都不需要修改,然后底层的实现由适配器调用需要的接口来具体实现。   常见的场景 使用第三方库的时候,第三方的库肯定不能适用所有的系统,所以需要一个适配器来转换。   优点 1.屏蔽了具体的实现方式,实现了依赖倒转。 2.可以把不统一的接口封装起来,使之成为统一的接口。 3.把本来不方便适用的接口转换成统一的接口。   缺点   C++实现   1#ifndef_ADAPTER_H_ 2#define_ADAPTER_H_ 3 4#include"Adaptee.h" 5 6 7classTarget 8{ 9public: 10Target(); 11virtual~Target(); 12 13virt

  • pandas之数据结构

    pandas数据结构 Series 创建 赋值 字典创建 数组运算 DataFrame 创建 索引 列索引 行索引 列赋值 属性 索引 pandas数据结构 这里需要谨记两点 pandas是基于numpy构建的。 pandas的数据结构实际上和Excel是一致的。 为什么这样说第二点呢? 因为在我看来,它的数据结构可以这样理解。 Series就相当于Excel的一列,有对应的行号。 DataFrame就相当于Excel表格,有行,有列,每一列还可以是不同的数据类型。 索引对象,就是这些行号,列号,以及Excel中绝对引用与相对引用。 如果按照上面这样想,就很容易理解了。 Series 创建 Series有一组数据(各种numpy数据类型)以及与之相关的数据标签(索引组成)。 就相当于Excel中的一列以及对应的行号。 In[1]:importnumpyasnp In[2]:importpandasaspd In[3]:frompandasimportSeries,DataFrame In[4]:ser=Series([-2,-4,3,-1,

  • Linux系统把/home重新挂载到其他硬盘或分区

    一开始没有做好规划,导致/home空间不足,再加上分区表不是GPT,导致无法扩展超过2T,因此需要重新划分一块更大的硬盘给/home。 1.把新挂载的4T硬盘进行分区和格式化 2.创建目录 sudomkdir/media/home 3.把/dev/sdb1挂载到/media/home sudomount/dev/sdb1/media/home 4.同步/home到/media/home,同步时间根据数据量大小决定,建议在系统空闲时操作 sudorsync-aXS/home/./media/home/. 5.同步完成后重命名/home sudomv/home/home_old 6.新建/home sudomkdir/home 7.取消/dev/sdb1挂载 sudoumount/dev/sdb1 8.重新挂载/dev/sdb1到home sudomount/dev/sdb1/home 9.查看/dev/sdb1的UUID blkid   10.把UUID复制下来,修改/etc/fstab文件,实现开机自动挂载 sudogedit/etc/fs

相关推荐

推荐阅读