【服务网格架构】Envoy架构概览(9):访问日志,MongoDB,DynamoDB,Redis

简介: 【服务网格架构】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"

相关文章
|
5月前
|
存储 调度 C++
16 倍性能提升,成本降低 98%! 解读 SLS 向量索引架构升级改造
大规模数据如何进行语义检索? 当前 SLS 已经支持一站式的语义检索功能,能够用于 RAG、Memory、语义聚类、多模态数据等各种场景的应用。本文分享了 SLS 在语义检索功能上,对模型推理和部署、构建流水线等流程的优化,最终带给用户更高性能和更低成本的针对大规模数据的语义索引功能。
488 50
|
5月前
|
缓存 运维 监控
Redis 7.0 高性能缓存架构设计与优化
🌟蒋星熠Jaxonic,技术宇宙中的星际旅人。深耕Redis 7.0高性能缓存架构,探索函数化编程、多层缓存、集群优化与分片消息系统,用代码在二进制星河中谱写极客诗篇。
|
6月前
|
存储 监控 NoSQL
Redis高可用架构全解析:从主从复制到集群方案
Redis高可用确保服务持续稳定,避免单点故障导致数据丢失或业务中断。通过主从复制实现数据冗余,哨兵模式支持自动故障转移,Cluster集群则提供分布式数据分片与水平扩展,三者层层递进,保障读写分离、容灾切换与大规模数据存储,构建高性能、高可靠的Redis架构体系。
|
7月前
|
存储 NoSQL 算法
Redis的集群架构与使用经验
本文介绍了Redis的集群架构与使用经验,包括主从复制、哨兵集群及Cluster分片集群的应用场景与实现原理。内容涵盖Redis主从同步机制、数据分片存储方式、事务支持及与Memcached的区别,并讨论了Redis内存用尽时的处理策略。适用于了解Redis高可用与性能优化方案。
|
9月前
|
存储 NoSQL MongoDB
Docker中安装MongoDB并配置数据、日志、配置文件持久化。
现在,你有了一个运行在Docker中的MongoDB,它拥有自己的小空间,对高楼大厦的崩塌视而不见(会话丢失和数据不持久化的问题)。这个MongoDB的数据、日志、配置文件都会妥妥地保存在你为它精心准备的地方,天旋地转,它也不会失去一丁点儿宝贵的记忆(即使在容器重启后)。
1039 4
|
9月前
|
NoSQL Linux Redis
每天百万访问也不怕,Redis帮你搞定UV统计
本文介绍了使用Redis实现高性能UV统计系统的方法。Redis凭借其内存数据库特性,支持毫秒级响应和自动去重,非常适合高并发场景下的访客统计。核心思路是利用Redis的Set数据结构作为"每日签到墙",通过记录用户访问ID实现自动去重,并设置24小时过期时间。文章提供了Python代码示例,展示如何记录用户访问和获取当日UV统计数据,还可扩展实现多页面UV统计。相比传统数据库方案,Redis方案更加轻量高效,是中小型网站实现流量统计的理想选择。
683 0
|
11月前
|
存储 NoSQL Redis
阿里面试:Redis 为啥那么快?怎么实现的100W并发?说出了6大架构,面试官跪地: 纯内存 + 尖端结构 + 无锁架构 + EDA架构 + 异步日志 + 集群架构
阿里面试:Redis 为啥那么快?怎么实现的100W并发?说出了6大架构,面试官跪地: 纯内存 + 尖端结构 + 无锁架构 + EDA架构 + 异步日志 + 集群架构
阿里面试:Redis 为啥那么快?怎么实现的100W并发?说出了6大架构,面试官跪地: 纯内存 + 尖端结构 +  无锁架构 +  EDA架构  + 异步日志 + 集群架构
|
存储 NoSQL 安全
【赵渝强老师】MongoDB的Journal日志
MongoDB通过Journal日志保证数据安全,记录检查点后的更新,确保数据库从异常中恢复到有效状态。每个Journal文件100M,存于--dbpath指定的journal子目录。默认已启用Journal日志,可通过--journal参数手动启用。WiredTiger存储引擎使用128KB内存缓冲区,异常关机时可能丢失最多128KB的数据。视频讲解和详细步骤参见附录。
392 17
|
存储 运维 NoSQL
【赵渝强老师】Redis的慢查询日志
Redis慢查询日志用于记录执行时间超过预设阈值的命令,帮助开发和运维人员定位性能问题。每条慢查询日志包含标识ID、发生时间戳、命令耗时及详细信息。配置参数包括`slowlog-max-len`(默认128)和`slowlog-log-slower-than`(默认10000微秒)。实战中可通过`slowlog get`获取日志、`slowlog len`查看长度、`slowlog reset`重置日志。建议线上环境将`slowlog-max-len`设为1000以上,并根据并发量调整`slowlog-log-slower-than`。需要注意的是,慢查询只记录命令执行时间。
630 5

推荐镜像

更多