Envoy架构概览(9):访问日志,MongoDB,DynamoDB,Redis

本文涉及的产品
云数据库 MongoDB,独享型 2核8GB
推荐场景:
构建全方位客户视图
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: Envoy架构概览(9):访问日志,MongoDB,DynamoDB,Redis

访问日志

HTTP连接管理器和tcp代理支持具有以下功能的可扩展访问日志记录:


  • 每个连接管理器或tcp代理的任意数量的访问日志。
  • 异步IO刷新架构。 访问日志记录不会阻塞主要的网络处理线程。
  • 可定制的访问日志格式使用预定义的字段以及任意的HTTP请求和响应头。
  • 可自定义的访问日志过滤器,允许将不同类型的请求和响应写入不同的访问日志。

访问日志配置。

MongoDB


Envoy支持具有以下功能的网络级别MongoDB嗅探过滤器:


  • MongoDB格式的BSON解析器。
  • 详细的MongoDB查询/操作统计信息,包括路由集群的计时和分散/多次计数。
  • 查询记录。
  • 每个通过$ comment查询参数的callsite统计信息。
  • 故障注入。

MongoDB过滤器是Envoy的可扩展性和核心抽象的一个很好的例子。 在Lyft中,我们在所有应用程序和数据库之间使用这个过滤器。 它提供了对应用程序平台和正在使用的特定MongoDB驱动程序不可知的重要数据源。


MongoDB代理过滤器配置参考。

DynamoDB

Envoy支持具有以下功能的HTTP级别DynamoDB嗅探过滤器:


  • DynamoDB API请求/响应解析器。
  • DynamoDB每个操作/每个表/每个分区和操作统计。
  • 4xx响应的失败类型统计信息,从响应JSON分析,例如ProvisionedThroughputExceededException。
  • 批量操作部分失败统计。

DynamoDB过滤器是Envoy在HTTP层的可扩展性和核心抽象的一个很好的例子。 在Lyft中,我们使用此过滤器与DynamoDB进行所有应用程序通信。 它为使用中的应用程序平台和特定的AWS SDK提供了宝贵的数据不可知的来源。


DynamoDB筛选器配置。

Redis


Envoy可以充当Redis代理,在集群中的实例之间对命令进行分区。在这种模式下,Envoy的目标是保持可用性和分区容错度的一致性。将特使与Redis Cluster进行比较时,这是重点。 Envoy被设计为尽力而为的缓存,这意味着它不会尝试协调不一致的数据或保持全局一致的群集成员关系视图。


Redis项目提供了与Redis相关的分区的全面参考。请参阅“分区:如何在多个Redis实例之间分割数据”。


Envoy Redis的特点:

  • Redis协议编解码器。
  • 基于散列的分区。
  • Ketama发行。
  • 详细的命令统计。
  • 主动和被动健康检查。

计划的未来增强:

  • 额外的时间统计。
  • 断路。
  • 请求折叠分散的命令。
  • 复制。
  • 内置重试。
  • 跟踪。
  • 哈希标记。

配置


有关过滤器配置的详细信息,请参阅Redis代理过滤器配置参考。


相应的集群定义应该配置环哈希负载平衡。


如果需要进行主动健康检查,则应该使用Redis健康检查对群集进行配置。


如果需要被动健康检查,还要配置异常检测。


为了进行被动健康检查,将超时,命令超时和连接关闭映射连接到5xx。来自Redis的所有其他响应被视为成功。


支持的命令


在协议级别,支持管道。 MULTI(事务块)不是。尽可能使用流水线来获得最佳性能。


在命令级别,Envoy仅支持可靠地散列到服务器的命令。因此,所有支持的命令都包含一个密钥。受支持的命令在功能上与原始Redis命令相同,除非可能出现故障。


有关每个命令用法的详细信息,请参阅官方的Redis命令参考。

Command Group
DEL Generic
DUMP Generic
EXISTS Generic
EXPIRE Generic
EXPIREAT Generic
PERSIST Generic
PEXPIRE Generic
PEXPIREAT Generic
PTTL Generic
RESTORE Generic
TOUCH Generic
TTL Generic
TYPE Generic
UNLINK Generic
GEOADD Geo
GEODIST Geo
GEOHASH Geo
GEOPOS Geo
HDEL Hash
HEXISTS Hash
HGET Hash
HGETALL Hash
HINCRBY Hash
HINCRBYFLOAT Hash
HKEYS Hash
HLEN Hash
HMGET Hash
HMSET Hash
HSCAN Hash
HSET Hash
HSETNX Hash
HSTRLEN Hash
HVALS Hash
LINDEX List
LINSERT List
LLEN List
LPOP List
LPUSH List
LPUSHX List
LRANGE List
LREM List
LSET List
LTRIM List
RPOP List
RPUSH List
RPUSHX List
EVAL Scripting
EVALSHA Scripting
SADD Set
SCARD Set
SISMEMBER Set
SMEMBERS Set
SPOP Set
SRANDMEMBER Set
SREM Set
SSCAN Set
ZADD Sorted Set
ZCARD Sorted Set
ZCOUNT Sorted Set
ZINCRBY Sorted Set
ZLEXCOUNT Sorted Set
ZRANGE Sorted Set
ZRANGEBYLEX Sorted Set
ZRANGEBYSCORE Sorted Set
ZRANK Sorted Set
ZREM Sorted Set
ZREMRANGEBYLEX Sorted Set
ZREMRANGEBYRANK Sorted Set
ZREMRANGEBYSCORE Sorted Set
ZREVRANGE Sorted Set
ZREVRANGEBYLEX Sorted Set
ZREVRANGEBYSCORE Sorted Set
ZREVRANK Sorted Set
ZSCAN Sorted Set
ZSCORE Sorted Set
APPEND String
BITCOUNT String
BITFIELD String
BITPOS String
DECR String
DECRBY String
GET String
GETBIT String
GETRANGE String
GETSET String
INCR String
INCRBY String
INCRBYFLOAT String
MGET String
MSET String
PSETEX String
SET String
SETBIT String
SETEX String
SETNX String
SETRANGE String
STRLEN String


失败模式


如果Redis抛出一个错误,我们把这个错误作为响应传递给这个命令。 Envoy将错误数据类型的Redis响应视为正常响应,并将其传递给调用者。


特使也可以产生自己的错误来回应客户。

Error Meaning
no upstream host The ring hash load balancer did not have a healthy host available at the ring position chosen for the key.
upstream failure The backend did not respond within the timeout period or closed the connection.
invalid request Command was rejected by the first stage of the command splitter due to datatype or length.
unsupported command The command was not recognized by Envoy and therefore cannot be serviced because it cannot be hashed to a backend server.
finished with n errors Fragmented commands which sum the response (e.g. DEL) will return the total number of errors received if any were received.
upstream protocol error A fragmented command received an unexpected datatype or a backend responded with a response that not conform to the Redis protocol.
wrong number of arguments for command Certain commands check in Envoy that the number of arguments is correct.


在MGET的情况下,每个不能被获取的单独的密钥将产生错误响应。 例如,如果我们获取五个键和两个键的后端超时,我们会得到一个错误的响应,每个代替值。

$ redis-cli MGET a b c d e

1) "alpha"

2) "bravo"

3) (error) upstream failure

4) (error) upstream failure

5) "echo"

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
4月前
|
存储 监控 数据库
Django 后端架构开发:高效日志规范与实践
Django 后端架构开发:高效日志规范与实践
77 1
|
4月前
|
缓存 NoSQL 网络安全
【Azure Redis 缓存】Azure Redis服务开启了SSL(6380端口), PHP如何访问缓存呢?
【Azure Redis 缓存】Azure Redis服务开启了SSL(6380端口), PHP如何访问缓存呢?
|
24天前
|
存储 NoSQL MongoDB
【赵渝强老师】MongoDB复制集的体系架构
MongoDB的复制集是一种集群技术,由一个Primary节点和多个Secondary节点组成,实现数据的高可用性。Primary节点处理写入请求,Secondary节点同步数据。当Primary节点故障时,Secondary节点可通过选举成为新的Primary节点。视频讲解和示意图详见正文。
|
24天前
|
NoSQL 编译器 Linux
【赵渝强老师】Redis的安装与访问
本文基于Redis 6.2版本,详细介绍了在CentOS 7 64位虚拟机环境中部署Redis的步骤。内容包括安装GCC编译器、创建安装目录、解压安装包、编译安装、配置文件修改、启动服务及验证等操作。视频讲解和相关图片帮助理解每一步骤。
|
2月前
|
存储 Prometheus NoSQL
大数据-44 Redis 慢查询日志 监视器 慢查询测试学习
大数据-44 Redis 慢查询日志 监视器 慢查询测试学习
28 3
|
3月前
|
设计模式 SQL 安全
PHP中的设计模式:单例模式的深入探索与实践在PHP的编程实践中,设计模式是解决常见软件设计问题的最佳实践。单例模式作为设计模式中的一种,确保一个类只有一个实例,并提供全局访问点,广泛应用于配置管理、日志记录和测试框架等场景。本文将深入探讨单例模式的原理、实现方式及其在PHP中的应用,帮助开发者更好地理解和运用这一设计模式。
在PHP开发中,单例模式通过确保类仅有一个实例并提供一个全局访问点,有效管理和访问共享资源。本文详细介绍了单例模式的概念、PHP实现方式及应用场景,并通过具体代码示例展示如何在PHP中实现单例模式以及如何在实际项目中正确使用它来优化代码结构和性能。
49 2
|
2月前
|
NoSQL MongoDB Docker
求助,有没有大神可以找到arm64架构下mongodb的3.6.8版本的docker镜像?
在Docker Hub受限的情况下,寻求适用于ARM架构的docker镜像资源或拉取链接,以便在x86架构上获取;内网中的机器为ARM架构,因此优先请求适合ARM的Docker镜像或Dockerfile,非常感激您的帮助。
|
2月前
|
安全 NoSQL 网络安全
漏洞检测与防御:Redis未授权访问漏洞复现
漏洞检测与防御:Redis未授权访问漏洞复现
88 0
|
3月前
|
存储 监控 数据可视化
SLS 虽然不是直接使用 OSS 作为底层存储,但它凭借自身独特的存储架构和功能,为用户提供了一种专业、高效的日志服务解决方案。
【9月更文挑战第2天】SLS 虽然不是直接使用 OSS 作为底层存储,但它凭借自身独特的存储架构和功能,为用户提供了一种专业、高效的日志服务解决方案。
164 9
|
4月前
|
网络安全
【Azure Service Bus】启用诊断日志来获取客户端访问Azure Service Bus的IP地址 [2024-03-26 实验结果失败]
【Azure Service Bus】启用诊断日志来获取客户端访问Azure Service Bus的IP地址 [2024-03-26 实验结果失败]