微服务治理中的挑战与Go语言实践

2 下载量 98 浏览量 更新于2024-08-31 收藏 2.63MB PDF 举报
"微服务治理中的探索与实践" 微服务治理是当前IT行业中一个非常重要的议题,随着微服务架构的广泛应用,微服务治理的复杂性问题也日益突出。本文将从微服务治理的两个痛点入手,探讨微服务化带来的挑战和Go语言在服务发现框架Discovery中的实践历程。 微服务化带来的挑战 微服务化的两个痛点是:如何拆分微服务,微服务的边界怎么划分制定;二是微服务上了规模之后如何管理。微服务化以后,服务拆分的比较多,调用链也比较长,调用链很容易受到一个坏节点的影响,导致用户端出现超时的现象。另外,负载不均衡会导致热点问题,并影响资源调度;单个节点不可用,如果限流或者熔断手段做的不好可能有雪崩效应;微服务代理的分布式事务问题和分布式一致性问题,以及编排、日志、链路追踪等问题。 微服务治理的复杂性问题包括:如何保证注册和发现;如何保证多机房高可用;如何保证低延迟等等。微服务化以后,服务调用链路变得非常复杂,如何保证注册和发现是一个非常重要的问题。 Go语言在服务发现框架Discovery中的实践历程 2015年到2017年,B站的微服务也是基于Zookeeper,Zookeeper是一个CP系统,可以保证一致性,在网络分区的情况下保证可用性。但是Zookeeper有一个问题,就是难以支持跨机房。如果机房1和机房2由于某些不稳定的原因发生网络断开,providerB去往ZKFollower的注册是无法实现的。 2018年,我们开始自研了服务发现框架,目前该框架已经在B站大规模使用了。这是一个AP的系统,ServiceProvider注册以后,所有的注册、健康检测、取消注册都会通过DiscoveryServer异步同步到其它DiscoveryServer,然后来保证最终的一致。DiscoveryServer一定要满足网络分区时的自我保护,保证健康的服务节点可用。 客户端与DiscoveryServer是通过HTTPLongPolling来连接的。这种方式开发比较简单,客户端可以实时地获取服务的注册信息。 微服务治理的复杂性问题可以通过服务发现框架来解决,服务发现框架可以保证注册和发现、多机房高可用、低延迟等等。微服务化以后,服务调用链路变得非常复杂,如何保证注册和发现是一个非常重要的问题。 微服务治理是一个非常复杂的问题,需要我们从多方面入手,探讨微服务化带来的挑战和Go语言在服务发现框架Discovery中的实践历程。