房多多 Service Mesh 实践

640?wx_fmt=jpeg


什么是 Service Mesh

640?wx_fmt=png

Service Mesh 是一个基础设施层,用于处理服务间通信。云原生应用有着复杂的服务拓扑,Service Mesh 保证请求可以在这些拓扑中可靠地穿梭。在实际应用当中,Service Mesh 通常是由一系列轻量级的网络代理组成的,它们与应用程序部署在一起,但应用程序不需要知道它们的存在。
Service Mesh 是位于 TCP / IP 之上的抽象层的网络模型。 它假设底层的 L3/L4 网络存在并且能够从点到点传送字节。它也假定这个网络和环境的其他方面一样是不可靠的,因此 Service Mesh 也必须具备处理网络故障的能力。
在某些方面,Service Mesh 有点类似 TCP/IP。TCP 对网络端点间传输字节的机制进行了抽象,而 Service Mesh 则是对服务节点间请求的路由机制进行了抽象。


Service Mesh 在房多多的需求背景

640?wx_fmt=png

房多多在2018年Q3的时候已经完成大部分服务容器化,房多多容器化的网络方案主要是 Overlay 和 Macvlan,Overlay 网络提供给 nodejs 服务使用,Macvlan 主要给 Java 服务使用。关于 Macvlan 网络性能的测试可以参照网上的一些论文,一般来说,Macvlan 网络可以达到物理网络 95% 以上的性能。我们把 Dubbo 服务挂在 Macvlan 的网络下实现 Dubbo 服务与原有虚拟机服务的互联互通。在把 Dubbo 服务容器化的过程中,发现 Dubbo 对容器的支持并不好,获取网卡 IP 的逻辑也有问题,在多块网卡的容器中,Dubbo 框架经常会随机的获取 IP。官方提供了一个使用环境变量告诉框架要注册的 IP 的方案:
  • DUBBO_IP_TO_REGISTRY --- Registering to the IP address of the registration center

  • DUBBO_PORT_TO_REGISTRY --- Registering to the port of the registration center

  • DUBBO_IP_TO_BIND --- Listening IP addresses

  • DUBBO_PORT_TO_BIND --- Listening ports

640?wx_fmt=jpeg
这个方案并不是很优雅,需要每个服务都维护一个环境变量用于告诉框架需要注册的 IP,所以我们采用了只挂载 Macvlan 网络的方案。
既然 Dubbo服务都挂载到 Macvlan 网络了,有些服务同时提供 HTTP 和 Dubbo服务,如何实现对 HTTP 服务的代理就成了我们考虑的问题,这时候 Service Mesh 进入了我们的视野。
此外,由于此时大部分流量的负载均衡还依赖 Nginx 转发,在 AppID 400+ 的背景下,运维团队和业务团队迫切的需要更高效的方案来解决配置管理和沟通成本的问题,构建房多多 Service Mesh 体系就显得尤为重要,Envoy 是一个成熟稳定的项目,也能够满足近期的需求,在现阶段我们并没有人力去动 Envoy,所以我们直接使用了 Envoy。
为了使 Service Mesh 支持 Overlay 网络和 Macvlan 网络,我们把 Envoy 的一块网卡挂载在 Macvlan 网络中,另一块网卡挂载在 Overlay 网络中,这样 Envoy 就成为内部网关服务,托管内部调用流量。
640?wx_fmt=jpeg


构建数据平面配置的 XDS 服务

640?wx_fmt=png

XDS 服务主要功能是给数据平面提供服务的集群配置、路由配置等信息,并且需要实现微服务架构中降级和限流的配置功能。
由于历史原因,还有相当多的业务无法从 VM 迁移到容器,需要有一个同时兼容容器和 VM 的数据平面服务,目前 XDS 服务的支持的功能如下:
  • 集群数据来源同时包括容器内部 DNS 和发布系统的 VM 数据

  • 支持多个 vhost 配置

  • 支持路由配置

  • 支持速率控制和网关错误重试

640?wx_fmt=jpeg



研发效率的提升和改进

640?wx_fmt=png

在房多多,Service Mesh 体系的建设大幅提高了研发效率,节省了大量维护配置所花费的时间,降低了人为配置产生 bug 的可能性,研发流程的改进如下图:
640?wx_fmt=jpeg
同时也降低了框架开发成本和业务改动的成本,每次推动业务升级框架都需要比较长的一段时间,业务无法及时用上新框架的功能,多种框架版本也加重运维负担,Service Mesh 帮我们解决了很多痛点。
  • 代理层实现服务发现,对于开发而言只需要开发一个单机的应用,降低框架开发成本

  • 降级和限流都在代理层实现,规则灵活,方便修改策略

  • 基础架构的升级无需依赖业务


小结和规划

640?wx_fmt=png

得益于云原生架构,Service Mesh 可以使用云原生的基础设施,基础设施能力的改进可以直接赋能业务,而不像传统的框架一样,基础设施的升级和改进无法提高传统框架的服务能力。
房多多的 Service Mesh 还处于初级阶段,后面可以做的事情还有很多,比如蓝绿发布,类似 API 网关的 API 版本部署,配置镜像等。
本文转载自公众号:房多多技术, 点击查看原文


Kubernetes实战培训

640?


Kubernetes实战培训将于2019年3月8日在深圳开课,3天时间带你系统掌握Kubernetes,学习效果不好可以继续学习 本次培训包括:云原生介绍、微服务;Docker基础、Docker工作原理、镜像、网络、存储、数据卷、安全;Kubernetes架构、核心组件、常用对象、网络、存储、认证、服务发现、调度和服务质量保证、日志、监控、告警、Helm、实践案例等。
640?wx_fmt=png
内容概要:本文档介绍了一个多目标规划模型,该模型旨在优化与水资源分配相关的多个目标。它包含四个目标函数:最小化F1(x),最大化F2(x),最小化F3(x)和最小化F4(x),分别对应于不同的资源或环境指标。每个目标函数都有具体的数值目标,如F1的目标值为1695亿立方米水,而F2则追求达到195.54亿立方米等。此外,模型还设定了若干约束条件,包括各区域内的水量限制以及确保某些变量不低于特定百分比的下限。特别地,为了保证模型的有效性和合理性,提出需要解决目标函数间数据尺度不一致的问题,并建议采用遗传算法或其他先进算法进行求解,以获得符合预期的决策变量Xi(i=1,2,...,14)的结果。 适合人群:对数学建模、运筹学、水资源管理等领域感兴趣的科研人员、高校师生及从业者。 使用场景及目标:①适用于研究涉及多目标优化问题的实际案例,尤其是水资源分配领域;②帮助读者理解如何构建和求解复杂的多目标规划问题,掌握处理不同尺度数据的方法;③为从事相关工作的专业人士提供理论参考和技术支持。 阅读建议:由于文档涉及到复杂的数学公式和专业术语,在阅读时应先熟悉基本概念,重点关注目标函数的具体定义及其背后的物理意义,同时注意理解各个约束条件的设计意图。对于提到的数据尺度不一致问题,建议深入探讨可能的解决方案,
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值