赞
踩
首先是项目工程无节制的变得臃肿庞大,今天增加一个业务,明天扩展一个模块,系统复杂度增加,大几十万行代码,几十个开发人员,service层,dao层代码大量被copy使用,经常有各种代码合并冲突要处理,非常耗时间。经常是我改动了自己的代码,但别人调用了我的接口,导致他的代码也出现问题,需要重新测试,很麻烦。
每次发布都是几十万行代码的系统一起发布,大家都提心吊胆准备上线,几十万行代码的上线每次要做很多检查,需要处理很多异常问题,每个人都高度紧张,被搞得几乎崩溃。
而且我现在有个新业务,打算把相关依赖升级一下,比如升级到最新的spring版本,还不行,因为可能会导致别人的代码报错,不敢随便改技术。并且一个web工程每次启动都需要好几分钟时间,本地IDE里面调试一次代码都很痛苦。
其次随着用户访问流量的增加,系统负载压力加大,变得不堪重负,通过增加实例数,增加硬件扩容能够带来的效果已经微乎其微,故障频发,效率低下。系统质量也越来越难以保证,测试周期也变得越来越长,无法满足公司业务的发展需要。
- Netflix Eureka 注册中心
- Spring Cloud Config 配置中心
- Netflix Hystrix 熔断组件
- Netflix Ribbon 负载均衡
- Netflix Zuul 网关服务
- Feign是声明式的web service客户端,它让微服务之间的调用变得更简单了,类似controller调用service
-
- 随着Spring Cloud Netflix 不再开发新的组件,项目进入维护模式
- Nacos 注册中心 + 配置中心,对标 Eureka + Spring Cloud Config 。
- Sentinel 服务保障,对标 Hystrix熔断组件 。
- Dubbo 服务调用( 包括负载均衡 ),对标 Ribbon + Feign 。
- Gateway 网关服务。
常见负载均衡策略:轮询、随机、权重轮询、ip hash、根据响应时间计算、最优策略等。
服务降级、熔断、限流是微服务架构保证高可用的得力助手,之所以出现这三兄弟,是因为我们的微服务与微服务直接相互调用,错综复杂,调用链路很长,如果微服务体系中某个服务宕机,就会造成微服务系统瘫痪
常见主流的技术: HyStrix、Sentinel、Resilience4j(国外使用)
网关的功能
针对所有请求进行登陆统一鉴权(登录态)、限流、缓存、日志(用户打点)。
可以根据不同的请求路径pattern,来进行请求的鉴权、转发、和拒绝。
协议转化。针对后段多种不同的协议,在网关层统一处理后以HTTP对外提供服务。
提供统一的错误码。
请求转发,并且可以基于网关实现内网与外网的隔离。Gateway(网关-Gateway - 知乎)
目前主流的网关(Gateway,与zuul)
Gateway和ZUUL介绍:网关-Gateway - 知乎
目前主流技术为getway,zuul已经跟不上时代步伐了,因为他底层采用的是servlet,servlet是一种阻塞io,满足不了高并发场景,而且不支持任何长连接,而getway后期新秀,底层采用netty做支撑,是一种异步非阻塞io,处理请求能力远远强于 servlet
常见配置中心技术支持有: springCloud config,nacos(主流并替换个config)。
总之服务总线就像一个妈妈管着一群孩子一样,通过妈妈向所有孩子或者某个孩子传达消息,从而改变孩子的某些行为或功能。
所以说,不管是从微服务一站式解决方面来说,还是从项目长期维护上面来说,alibaba
替代springcloud
已经成为了一种必然趋势
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。