作者简介:大家好,我是码炫码哥,前中兴通讯、美团架构师,现任某互联网公司CTO,兼职码炫课堂主讲源码系列专题
代表作:《jdk源码&多线程&高并发》,《深入tomcat源码解析》,《深入netty源码解析》,《深入dubbo源码解析》,《深入springboot源码解析》,《深入spring源码解析》,《深入redis源码解析》等
联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬。码炫课堂的个人空间-码炫码哥个人主页-面试,源码等
释放21集全网最深ConcurrentHashMap的vip视频,复现每一行源码
背景
- Kubernetes 实现自动化基础设施部署和资源管理,降低运维成本,增强业务弹性。
- Kubernetes 在应用部署和弹性方面有巨大优势,但对服务治理、网关、认证鉴权和可观测支持不足。
- 许多产品和传统中间件改革来弥补 Kubernetes 的不足,迁移到云原生和 Kubernetes。
- 服务网格是下一代微服务治理,下沉基础设施层进行通用治理,支持异构系统。
- 服务网格从理论到实践依赖 Kubernetes 容器编排,得到广泛关注和生产使用。
- Istio 是最流行的服务网格,提供标准的声明式 API,像 Kubernetes 抽象基础设施。
- Nacos 深度集成 Spring 生态和 Dubbo,现在集成 Istio,让用户各场景使用。
- Nacos 紧跟技术潮流,不错过 Kubernetes 和服务网格红利。
- Kubernetes 改变了资源管理和部署运维方式,Nacos 也在演进来适应新技术。
- Kubernetes 降低运维成本,提高业务弹性。服务网格和 Nacos 为用户提供更好的技术体验。
- 云原生技术 Kubernetes 和服务网格带来产业变革,Nacos 接入其生态为用户带来价值。
什么是服务网格
要深入理解服务网格的概念,明确服务网格要解决的问题,以及认识服务网格带来的业务价值,需要从应用架构的演进发展从头开始讲起。
单体架构向微服务体系架构的演进
近年来,随着业务体系不断发展和扩大,单体应用已经完成了向微服务架构的转变。应用按照功能维度、业务领域进行了服务拆分,各个不同的业务团队专注于自身负责的服务,每个微服务独立迭代且互相不影响。 这种拆分业务域的思想,不仅加快了业务发展速度,而且带来了更敏捷的开发体验。
凡事都有两面性, 微服务在提升业务应用的迭代速度和敏捷性的同时,也给服务治理带来了更多的挑战 。原先是单体应用,所有的服务都在⼀个进程中,服务之间的调用就是方法调用,整条请求的处理流程就在当前线程中,调试、排查问题非常方便。改造成微服务架构之后,原先单体中的服务变成⼀个个独立部署运行的服务,方法调用变成了远程调用。
服务发现
首先要解决的问题就是服务发现问题 ,Consumer 服务如何在运行时发现 Provider 服务,并且独立部署的服务节点的 ip 地址是不固定的,意味着需要⼀种动态发现的能力。注册中心的出现就是来解决微服务架构中服务发现问题,每个微服务在 部署发布 时会向 注册 中心登记自己的节点网络 ip,在 下线 时也会及时向注册中心进行 注销 操作。同时,每个微服务也会向注册中心 订阅 自己依赖的 其他微服务的节点信息 ,当订阅的微服务的节点信息发生变化时能够实时收到并更新本地连接池。
负载均衡
解决了服务之间如何发现的问题之后,Consumer 服务在处理请求时就可以从注册中心获取的节点信息列表中选择⼀个 ip 地址对 Provider 服务发起网络调用。为了 最大化资源利用率,最小化请求RT ,需要从节点池中 选择出⼀个最佳的节点,这就是负载均衡 。如果微服务的副本所占的硬件资源不同时,需要给予硬件资源充足的节点更多的流量。如果微服务的副本所处的地域不同时,需要优先访问与调用端所处地域相同的节点。如果业务有 Session 粘性的诉求,需要同⼀用户的请求始终访问同⼀个节点。如果微服务在启动之后需要预热,需要将流量逐步引流到该节点
熔断限流
单体应用中的 整个调用链 在当前进程中,面对 突发的流量洪峰 ,我们只需 对应用入口处进行熔断、限流&n