首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

干货 | 携程基于 GraphQL 的前端 BFF 服务开发实践

所有面向外部用户的 GraphQL 服务,我们会限制只能调用其他后端 API,以避免出现密集计算或者架构复杂的情况。只有面向内部用户的服务,才允许 GraphQL 服务直接访问数据库或者缓存。...3.1 面向数据网络(Data Graph),而非面向数据接口 我们注意到有相当多 GraphQL 服务,其实是披着 GraphQL 的皮,实质还是 RESTful API 服务。... String,它表示错误信息 这种模式,即便在 RESTful API 中也很常见。...这样的好处是可以很快的对原客户端调用的API进行替换。...这种将串行调用从客户端移到服务端的做法可以有效的降低端到端的次数,是 BFF 层常见的优化手段。但是如果我们有多个节点一起查询时,可能会出现同一个接口被调用多次的问题。

2.5K20

office365 E5调用api使E5开发者续订 修复版AutoApi (不使用服务器)

microsoft graphapi,一次调用10个api,5个onedrive的api还有4个outlook的api,剩下一个是组的api,调用一次后延时等待五分钟再重复调用。...而后者的方法是建立在前者的基础上的,因此我将他们的教程融合了起来,并对其中的个别词语进行了微调。...记录ID 下面会用到 点击左边管理的证书和密码,点击+新客户端密码,点击添加,复制新客户端密码的值 记录这个值 下面会用到 点击左边管理的API权限,点击+添加权限,点击常用Microsoft...API里的Microsoft Graph(就是那个蓝色水晶), 点击委托的权限,然后在下面的条例搜索以下12个 最后点击底部添加权限 Calendars.ReadWrite 、 Contacts.ReadWrite...Github项目地址 第一步,fork本项目 登陆/新建github账号,回到本项目页面,点击右上角fork本项目的代码到你自己的账号,然后你账号下会出现一个一模一样的项目

6.8K11
您找到你想要的搜索结果了吗?
是的
没有找到

API慢请求问题排查记录「1」

前言记录一次线上出现API请求偶现严重慢请求的问题解决过程需要了解的词keep-aliveHTTP keep-alive,又称为HTTP持久连接(HTTP persistent connection)...patch,原理可见这篇文章现象具体现象为在前端页面中的前几次API请求中,大概率出现一次慢请求(4s左右)通过Apifox进行接口压力测试也能轻易复现问题,且在一轮3600次的请求中,慢请求基本只出现在前几次请求中图片排查思路整体思路为先由...API服务从请求尾端向前查,同步可从客户端往后查监控首先看一看经过初步的接口压力测试,我们的接口耗时监控的情况:图片完全没有异常的慢请求,最大耗时也仅在45mspprof考虑到监控埋点的范围有限,再使用...(*Engine).ServeHTTP前产生:图片在16:46:57时就已经输出了请求的部分信息,但由于url,源ip等信息本身就在http包体的前部,可能后续的网络包还在网关等位置出现了问题,这里我们也不能断定是服务端的问题客户端排查做完以上的服务端排查...ip地址来确认负载均衡指向的机器,很快我们发现慢请求都出现在同一台用于负载均衡的服务器上,去除该问题节点后请求恢复了正常(后续找相关同学确认是LB机器重试未响应的超时时间),耗时稳定在50ms左右总结整体的排查思路没有错

1.1K40

Microsoft 365 E5 Renew X 部署教程

主要功能 用户端 两种可选的调用权限:用户未登录作为守护程序调用(需要客户端密码)、程序以登录用户身份直接调用(需要账户密码) API种类齐全:41/30个可选的Microsoft Graph REST...API Beta中的API(未来可能会继续添加) 完全随机的API调用模式:从已选定的API序列中随机抽取一个或几个进行调用(个数和API随机) 完全随机的API调用时间间隔:随机区段1000s-2000s...可控的站点注册通道更容易控制系统用户数量 自定义页面:支持自定义HTML静态页面,可设置支付宝、微信收款码 显示ICP备案:支持ICP备案文字显示,可在国内备案建站 无人值守 运行自动暂停:可自动暂停有错误率过高的账号...E5 Renew X镜像 docker pull hanhongyong/ms365-e5-renew-x 运行MS365 E5 Renew X镜像,得到容器 没编辑配置文件的话 默认密码是123456...docker run -d -p 1066:1066 -v /root/Deploy:/app/Deploy hanhongyong/ms365-e5-renew-x:latest 其中-p为暴露服务器的端口

2.9K20

分布式监控系统Zabbix3.2添加自动发现磁盘IO并注册监控

] 单位: ms 储存值:差量(每秒速率) 名称: {#DISK_NAME}磁盘写的毫秒数 键值: disk.status[{#DISK_NAME},write.ms] 单位: ms 储存值:差量(每秒速率...| grep "\b$device\b" | head -1 | awk '{print $13}' #//花费在IO操作上的毫秒数 ;; esac  在客户端中的...添加图形显示 在图形原型中添加,注意名称中要带哪个磁盘的动态名称,不然会出现Disk IO 已注册的错误信息。...zabbix3 Cannot create graph: graph with the same name "Disk IO" already exists 在监控项中选择上面添加的6个监控项。 ?...测试效果 重启客户端的zabbix_agentd,然后在zabbix服务端对服务发现和写扇区次数进行测试。代码如下,有显示内容说明已经部署成功。 ?

1.1K100

基于ABP落地领域驱动设计-02.聚合和聚合根的最佳实践和原则

EF Core 提供 变更跟踪(Change Tracking)功能,实际上你不需要调用 _issueRepository.UpdateAsync(...) 方法,会自动进行保存。...所以,如果你想要编写独立于数据库提供程序的代码,应该总是为要更改的实体调用UpdateAsync()方法。 事务边界原则 一个聚合通常被认为是一个事务边界。...我们认为没有必要定义单独的方法来设置它们。如果以后需要,可以添加更改方法并将其设置器设置为私有。领域层是内部项目,并不会暴露给客户端使用,所以这种更改不会有问题。...对于 Web 应用程序或 HTTP API,应该给客户端返回什么 HTTP Status Code? ABP框架 Exception Handing 系统处理了这些问题。...异常Code("IssueTracking:CanNotOpenLockedIssue")被发送到客户端,因此它可以以编程方式处理错误情况。

2.9K30

Linkerd服务网格中重试与超时和金丝雀发布

当一个服务实例出现问题时,重试机制可以尝试将请求发送到其他实例,避免长时间的等待和失败。超时机制可以限制请求处理的最长时间,并确保调用者具有更可预测的性能。...,为了演示超时,我们将 /api/vote 路由超时时间设置为 0.5ms,这样基本上都无法满足要求就超时了,Linkerd 会将错误发送会客户端,成功率变为 0 了。...name: GET /api/vote timeout: 0.5ms isRetryable: true 应用上面的对象后,服务的有效和实际成功率就会都下降到 0,因为 /api...虽然某些集成(例如 Flagger)依赖于 SMI 和TrafficSplit方法,但使用 HTTPRoute是未来的首选方法。...这意味着每当网状客户端与web-svc服务通信时,它将使用此 HTTPRoute。您可能还注意到,该web-svc 服务再次出现在列表中,backendRefs权重为 90。

12810

Linkerd 通过 ServiceProfile 实现超时和重试

在部署 ServiceProfile 对象之前,我们只能看到 web 服务的聚合指标,部署后我们现在可以看到 /api/list 这条路由是 100% 成功的,/api/vote 路由有一些错误。...同样在服务配置文件之前,我们只知道 web 服务正在返回错误,现在我们错误是来自与 /api/vote 路由,另外的 [DEFAULT] 默认路由表示当服务配置文件中没有路由匹配请求时 Linkerd...但是,如果服务的一个实例出现问题,或者潜在问题只是暂时的,那么这个时候 Linkerd 就可以派上用场了,而且这些部分的、暂时的故障是分布式系统的最常出现的问题!...当预算用尽时,Linkerd 不会重试请求,而是会向客户端返回 504 错误。 综上所述:负载均衡、重试和超时都是为了在出现部分、暂时性故障的情况下保障应用程序的可靠性,并防止这些故障升级为全局中断。...,为了演示超时,我们将 /api/vote 路由超时时间设置为 0.5ms,这样基本上都无法满足要求就超时了,Linkerd 会将错误发送会客户端,成功率变为 0 了。

68420

Nebula Graph 源码解读系列|客户端的通信秘密——fbthrift

[Nebula Graph 源码解读系列|客户端的通信秘密——fbthrift] 概述 Nebula Clients 给用户提供了多种编程语言的 API 用于和 Nebula Graph 交互,并且对服务端返回的数据结构进行了重新封装...例子 这里以 Golang 客户端为例,展示 fbthrift 在 Nebula Graph 中的应用。...type PoolConfig struct { // 设置超时时间,0 代表不超时,单位 ms。...会检查空闲连接队列中是否有可用的连接,如果有则直接返回给 Session 供用户使用;如果没有可用连接并且当前的总连接数没有超过配置中限定的最大连接数,则新建一个连接给 Session;如果已经到达了最大连接数的限制,返回错误...最常用的接口是 execute(),如果在执行时发生错误客户端会检查错误的类型,如果是网络原因则会自动重连并尝试再次执行语句。

71530

记一次线上kafka一直rebalance故障

今天我司线上kafka消息代理出现错误日志,异常rebalance,而且平均间隔2到3分钟就会rebalance一次,分析日志发现比较严重。...kafkaConsumer调用一次轮询方法只是拉取一次消息。客户端为了不断拉取消息,会用一个外部循环不断调用消费者的轮询方法。每次轮询到消息,在处理完这一批消息后,才会继续下一次轮询。...服务端约定了和客户端max.poll.interval.ms,两次poll最大间隔。如果客户端处理一批消息花费的时间超过了这个限制时间,服务端可能就会把消费者客户端移除掉,并触发rebalance。...这里就出现了重复消费的问题。...客户端为了不断拉取消息,会用一个外部循环不断调用轮询方法poll()。每次轮询后,在处理完这一批消息后,才会继续下一次的轮询。

3.4K20

RocketMQ消息发送常见错误与解决方案

经过上面的步骤,基本就能解决该错误。 2、消息发送超时 ---- 消息发送超时,通常客户端的日志如下: ?...200ms就会启动快速失败,向客户端返回[TIMEOUT_CLEAN_QUEUE]broker busy,这个在本文的第3部分会详细介绍。...4.3.0及以上版本 如果客户端版本为4.3.0及其以上版本,由于其设置的消息发送超时时间为所有重试的总的超时时间,故不能直接通过设置RocketMQ的发送API的超时时间,而是需要对其API进行包装,...会不再继续排队,直接向客户端返回system busy,但由于rocketmq客户端目前对该错误没有进行重试处理,所以在解决这类问题的时候需要额外处理。...3.3 TIMEOUT_CLEAN_QUEUE 解决方案 由于如果出现TIMEOUT_CLEAN_QUEUE的错误客户端暂时不会对其进行重试,故现阶段的建议是适当增加快速失败的判断标准,即在broker

5.7K21

Typora自动上传图片至smms图床

最后点击一下验证图片上传选项 如果和我一样的话,就说明已经配置成功了,接下去就可以愉快的玩耍了 但是绝大多数人都还不能够,因为没有配置 PicGo,简单来说 typora 这个功能的原理就是启动 PicGo 客户端并且通过...PicGo-server 来调用 sm.ms 图床的上传 api,而现在 sm.msapi 是 V2 的,PicGo 上的 sm.ms 图床 api还是 V1 的,就调用不成功。...smms-user 都是可以的,只要配置好上传的接口就行 下面是我的这个插件对 sm.ms 的上传接口的配置,其中 API 地址和 POST 参数名可以在 sm.ms 官网找到,返回的是一串 JSON...to fetch 这个是因为端口的原因,typora 默认是去 36677 端口上传,所以 PicGo 也要将 server 的端口设置成 36677 ,而 PicGo 默认的端口也就是 36677,出现这个错误的原因可能是因为开了多个...,大部分情况下都是能正常上传的,所以就没有去管了,现在还没找到解决方法,感觉应该是 sm.ms 那边出的问题 更新:在给作者提出 issue 之后确定了应该是 web-uploader 这个插件出的问题

74020

HTTP调用超时咋办?重复请求又如何?

因此,出现读取超时不能随意假设服务端的处理情况,需要根据业务状态考虑如何进行后续处理。 读取超时只是Socket网络层面概念,是数据传输的最长耗时,故将其配置很短 比如100ms。...虽然Feign的默认读取超时时间是1秒,但客户端2秒后才出现超时错误。 说明客户端自作主张进行了一次重试,导致短信重复发送。...解决方案 把发短信接口从Get改为Post API设计规范:有状态的API接口不应定义为Get。根据HTTP协议规范,Get请求适用于数据查询,Post才是把数据提交到服务端用于修改或新增。...选择Get还是Post的依据,应该是API行为,而非参数大小。...尝试声明一个新的HttpClient放开相关限制,设置maxPerRoute为50、maxTotal为100,然后修改一下刚才的wrong方法,使用新的客户端进行测试: ?

3.4K10
领券