本文由公众号EAWorld翻译发表,转载需注明出处。

作者:Richard Li

译者:白小白

原文:http://t.cn/E6cZoyG

现时的云原生应用由多种异构的服务或者微服务组成,服务间、服务与客户端之间的通信需要跨越浩繁的通信协议和拓扑结构。Ambassador就是部署在这样不断增长的异构的工作负载环境之下,也因此我们对于这种境况有着直接的认知。

我们着力于将Ambassador打造成全球最棒的云原生API网关。为此,我们很兴奋可以发布Ambassador的0.52版本,并在新版中新增了如下的新能力:支持gRPC-Web协议。gRPC-Web基于原生的gRPC,其设计主旨服务于浏览器/服务器通信。在此要对 Gert van Dijk 和 Rotem Tamir 的工作表示感谢。

支持先进的负载均衡控制。现在的Ambassador可以原生支持向物理IP地址的流量路由,而非DNS主机名称。

支持会话亲和性(即粘滞会话)。Ambassador可以基于Cookie、HTTP头或者来源IP地址,将来自同一个终端用户的HTTP请求归集到一个特定的Kubernetes Pod里。

由于实施了一些架构迁移的工作,对会话亲和性和先进的负载均衡控制的支持还属于抢先版本状态,稍后将会介绍。

一、gRPC-Web支持

今时今日的云服务通过大批的通信协议进行暴露。Ambassador几乎支持流行的7层协议的每一层,包括HTTP,HTTP/2,gRPC,WebSocket,以及最新支持的gRPC-Web。并且,即使开发者所使用的协议并不被直接支持,Ambassador也支持原生的TCP路由方式。

gRPC-Web协议面向前端开发者提供了很多的便利:高性能,双向的流式通信以及广泛的类库支持。由于浏览器的限制 ,gRPC-Web并不与gRPC直接兼容。但可以设置服务端代理来解决在gRPC-Web请求和gRPC HTTP/2响应之间的翻译转换问题。

感谢Envoy对于gRPC-Web的支持,Ambassador现在可以通过设置 enable_grpc_web: True注解来支持gRPC-Web。需要注意的是,这是一个全局设定。

二、先进的负载均衡控制

Ambassador一直提供广泛的路由选项,可以基于主机、HTTP方法、HTTP头,可以采用正则表达式等等。我们知道,对路由施加灵活的细粒度的控制 对适应广泛的使用场景至关重要。但目前Ambassador仅为运维人员提供了有限的控制,来将请求路由到不同的endpoint。过去,Ambassador直接将请求路由到Kubernetes service,由后者将请求分发到不同的Pod。这种方案工作良好,便于推理和测试。对Kubernetes service的Curl请求遵循与Ambassador请求同样的路由路径。Kubernetes网络

在一个典型的Kubernetes集群中,由kube-proxy路由Kubernetes service请求。稍显困扰的是,kube-proxy并不是典型形态的代理,只是基于iptables规则为service实现虚拟IP的一个进程。这种架构为路由带来了额外的复杂性:不仅引入了少量的延迟,而且iptables并不是为路由设计的,因此负载均衡策略受限于轮询的调度模型。

尽管存在实现的复杂性,这样的方案仍旧为Ambassador使用者提供了压倒性的优势:简便性。服务发现和负载均衡都交给Kubernetes解决,可以很直接的使用类似Curl这样的常规工具进行路由的测试。Ambassador 0.52的负载均衡

在Ambassador 0.52版本中,我们引入了一套新的负载均衡控制机制。相关的控制选项是可选的,所以如果不做任何设置的变动,将以原本行之有效的方式来实施负载均衡控制。如果设置了AMBASSADOR_ENABLE_ENDPOINTS环境变量,将会启用新的控制机制:Ambassador会监视所有Kubernetes endpoint的状态变更,而不仅仅关注Kubernetes service本身。

有了这些状态信息,Ambassador可以基于设置来使用不同的负载均衡算法,绕过Kube-proxy将请求直接路由到Kubernetes endpoint。

以下的示例映射表展现了我们如何添加load_balancer注解:apiVersion: ambassador/v1

kind: Mappingname: qotm_mapping

prefix: /qotm/

service: qotm

load_balancer:

policy: round_robin

需要注意的是,可以在Ambassador模块中添加注解,来使默认的负载均衡策略全局有效。会话亲和性

除了默认的round_robin策略,Ambassador 0.52还可以基于ringhash策略支持会话亲和性(即“粘滞会话”)。在此过程中需要为路由指定客户端的唯一标识。可以支持任意的HTTP头,Cookie或者实际的来源IP地址。抢先版本

我们在0.52中将先进的负载均衡控制机制作为抢先版本发布,以进行更广泛的测试并收集反馈。我们尤其感兴趣的是,在不同的工作负载和Kubernetes集群环境下,启用这一特性有怎样的效果。我们希望 endpoint数多于service数,这样就可以对Kubernetes的API服务器产生持续增长的工作负载。我们热切的期待你的反馈,无论是积极的或者是负面的都可以,只要是关于这一特性的。

三、Ambassador 0.52版本的其他改变

在新版的Ambassador中,我们还提供了对大量的用户反馈Bug的修复,并提供了诸多的加强。Ambassador现在支持HTTP/1.1请求和gRPC后端服务之间的桥接。

在使用HTTP API的时候,为extauth过滤器添加了一个tracing header。(在使用gRPC API的时候,已经添加了这样的tracing header)

允许extauth建立原本不存在的header(#1313)。

可以使用Lua过滤器,在映射中嵌入简单的脚本。鸣谢Liam Costello的贡献。

启动性能改进。

使用C YAML解析器代替Python实现以改进解析性能(#1294,#1318)

加入xff_num_trusted_hops设置。如果用户使用了如CloudFlare这样的CDN服务,并且依赖X-Forwarded-For header来应对流量限速的使用场景,提供这样的设置将十分重要。

更新的核心设置文档覆盖了上面提到的新的选项(如Lua,gRPC HTTP/1.1 桥接等)。

四、即将到来的0.60中的重大变更

Ambassador 0.60将默认在8080端口侦听明文HTTP请求(取代原来的80端口),在8443端口侦听HTTPS请求(取代原来的443端口),以便在没有Root权限的情况下简化Ambassador的运行。如果你的现存服务依赖上述默认端口,需要修改相关的配置文件,Ambassador 0.52会在诊断服务中提出警报。

五、安装Ambassador 0.52

可以通过下面的Docker标签获得Ambassador 0.52版本:

quay.io/datawire/ambassador:0.52.0。

通过标签更新现有的部署清单,kubectl会将0.52版本安装到集群中。

也可以通过Helm安装:helm install stable/ambassador

六、升级到Ambassador 0.52

Ambassador的更新依赖Kubernetes的部署。在更新Ambassador之前,需要将Kubernetes部署清单指向quay.io/datawire/ambassador:0.52.0然后基于更新后的清单运行kubectl。Kubernetes会以滚动更新的方式将Ambassador更新到0.52版本。

七、后续

如果你在更新过程中遇到任何问题,可以发issue或者加入我们的Slack求助。提交Issue的地址:https://github.com/datawire/ambassador/

加入Slack的地址:http://d6e.co/slack

如果Ambassador工作良好,我们也很乐于得到这样的消息。可以在文末或者在我们的推特账号@getambassadorio留言。

grpc python 负载均衡_Ambassador 0.52 新特性:会话亲和性、负载均衡控制、gRPC-Web相关推荐

  1. .NET 4.0 Interop新特性ICustomQueryInterface (转载)

    .NET 4.0 Interop新特性ICustomQueryInterface 在.NET Framework v4.0发布的新功能中,在名字空间System.Runtime.InteropServ ...

  2. Tensorflow 2.0的新特性

    Tensorflow 2.0的新特性 几天前,Tensorflow刚度过自己的3岁生日,作为当前最受欢迎的机器学习框架,Tensorflow在这个宝座上已经盘踞了近三年.无论是成熟的Keras,还是风 ...

  3. C# 8.0 的新特性概览和讲解

    本文转自 https://blog.csdn.net/hez2010/article/details/84036742 C# 8.0 的新特性概览和讲解 前言 新的改变 可空引用类型(Nullable ...

  4. 高性能数据库引擎 CoolHash 产品宣言 Fourinone4.0版新特性(转)

    Fourinone4.0版新特性:一个高性能的数据库引擎CoolHash(酷哈嘻) 一.前言:如何写一个数据库 如果将操作系统和业务应用之间的软件都统称中间件的话,那么最重要的软件无疑是数据库,它比w ...

  5. Python 3.11 中的最佳新特性和修正

    更快的解释器,更易懂的错误,更强大的类型提示,以及其他一系列的加速和调整,现在都可以试用了. Python 每年都会发布新版本,上半年是功能锁定的测试版,年底是最终版本. Python 3.11 的特 ...

  6. .NET Framework 4.0的新特性

    本文将揭示.NET 4.0中的3个新特性:图表控件.SEO支持以及ASP.NET 4可扩展的输出缓存. 图表控件 微软向开发者提供了大量可免费下载的图表控件,可以在.NET 3.5 ASP.NET或W ...

  7. Python培训分享:Python新版本中的6个新特性

    Python在几年做了一个全面的升级,此次Python升级中有6个新特性,本期小编为大家介绍的Python培训教程就是关于介绍Python新版本中的6个新特性的,来看看下面的详细介绍. Python培 ...

  8. mysql 5.0 php_PHP 5.0的新特性

    PHP 5.0的新特性 最近,读者可以从PHP 4.x版本转移到PHP 5.0版本.正如读者期望的那样,在一个新的主要版本中,它做出了一些重要变更.在这个版本中,PHP后台的Zend引擎经过了完全的重 ...

  9. java 7.0 特性_JDK7.0语法新特性

    JDK7.0语法新特性 1,菱形语法(泛型实例化类型自动推断) List list = new ArrayList<>(); // <>这个真的很像菱形 2,在目前版本中,不可 ...

最新文章

  1. 苛评VCL: 接口与TObject
  2. 20135231 —— 第六周任务总结报告
  3. 报表学习总结(一)——ASP.NET 水晶报表(Crystal Reports)的简单使用
  4. seata xid是什么_使用Seata彻底解决Spring Cloud中的分布式事务问题!
  5. 关于placement new 和 placement delete的重载,以及basic_string重载new()实例
  6. CodeSmith实用技巧(九):重载Render方法来控制输出
  7. java常量数组吗_java – 如何在注释中使用数组常量
  8. 使用Linux 显示日历 cal -y (可以快速制作简易万年历)
  9. 树莓派---MAC下安装AndroidThings
  10. 整理好全球半导体公司,看看哪些你的上下游厂家
  11. 本特利传感器330103-00-05-10-02-00
  12. 记一次Pr安装转场插件导致AE报错问题解决
  13. android手机微信收藏功能实现,微信小程序收藏功能的实现代码
  14. Linux下查看网络流量常用方法
  15. 如何设计SaaS商业模式
  16. css安卓手机位置偏差,完美解决移动端使用rem单位时CSSSprites错位问题_html/css_WEB-ITnose...
  17. 【华为OD机试 2023最新 】 查找充电设备组合(C++ 100%)
  18. nexus4刷android ONE,牛!Nexus4刷入Ubunu Touch和安卓双系统
  19. python用matplotlib画玫瑰_用Python matplotlib 怎么画风向玫瑰图 ,能给出程序的?
  20. java录制声音(采集声卡音频数据)

热门文章

  1. kubernetes权威指南学习遇见的问题以及意见之二:Permission denied
  2. 首次c#蓝牙开发踩坑记录
  3. BZOJ 1006: [HNOI2008]神奇的国度( MCS )
  4. SQL Server存储过程作业(二)
  5. EXTJS Date 的转换格式化字符
  6. 几种分页方法效率比较
  7. 联合光伏:雨后复斜阳 关山阵阵苍
  8. 【书籍推荐】给大家分享和推荐前端相关书籍
  9. pl/sql developer安装配置
  10. POJ3349 Snowflake Snow Snowflakes(hash)