为什么使用springCloud


随着互联网的兴起,也就是16年前后,服务架构开始从单一的系统向微服务架构转变,当时我们公司也开始技术整型,准备进入微服务的热潮,那一年兴起的还有就是现金分期和房价。
当时我还在架构组,我们架构师负责搭建公司的微服务环境,4月份进入公司就开始研究Devops,想使用http请求来实现对svn和jenkins联合工作实现自动打包和发布部署应用的功能带界面的管理系统。那时候流行的微服务框架是阿里的dubbo。我知道我们组当时刚刚上线了一个配管和网关两个项目。后来我们的devops死了,我还是接手配管,配管没有什么实质性工作,是在一个开源项目上改改后上线的,我也只是做了一些功能上优化的功能,例如加了一个接入系统心跳监控的功能。在运维配管工作的同时,我又开始接手去做了一个dubbo的邮件服务和一个唯一id生成的dubbo服务。说下这个唯一id生成服务是干什么用的,他是为了我同事的一个dubbo埋点功能做的服务,为什么要做dubbo埋点,是因为我们要做监控系统,这个监控系统要监控所有的dubbo服务,那么我们就要收集dubbo服务的调用日志,获得dubbo服务的调用链。
现在我们来整理下我刚才说的,总的来说,我上面说的我的这些工作都是为了实现使用dubbo框架来构建微服务来搭建环境,我们要用到的系统用:
1、配管系统,应对多服务集中管理配置的需求。
2、监控系统,监控微服务的健康状况,很简单,就是做了一个无用的接口,定时给配管发送一个字符串,我在配管中根据发送间隔和告警策略发送告警。这个其实监控的很片面,只要系统就像只判断了还活着,至于健不健康根本监控不到,例如,如果数据库连接中断了,根本监控不到。
3、dubbo埋点,因为我们要获得微服务的调用链,做服务监控和运行状况分析。我们的想法是生成一个唯一Id,然后在每个服务调用的时候把每一串请求都用这个唯一Id标识上,但是dubbo框架并不支持,所以,我们架构师的策略是修改dubbo包,加入我们的埋点,实话说,两个人做这个,但是最终没有上线。
4、网关:网关的开发我并没有参加 ,但是后面我参加需要和外部系统交互的项目使用到了网关。这个项目是一个内部系统,但是他要和外部系统进行信息流的交互,而网关就是外交部。我们把需要提供的功能封装成dubbo服务,网关作为消费者去调用我们的服务,外部系统使用http协议再去和网关做交互。说白了就是dubbo使用的是rpc协议,不支持http协议,我们为了和外部交互,要使用网关转一下。而且dubbo的消费者和提供者并非是0耦合的,他们需要调用一个公共的接口jar包,可以说耦合度很高。

5、除了这些,还有一个必备的ZK注册中心,虽然搭建是一劳永逸的,但是zk在使用过程中还是存在一些新手搞不定的问题。


说到这里,我们会发现,微服务想法非常棒,但是真正实操起来就很骨干了,为了支持dubbo系列的微服务,我们要做很多基础组件系统作为支持。而且,dubbo还需要内部接口包共享,这样就要就要求使用者如果想要使用maven包仓库,那么消费者和服务提供者就必须有一个可以共享jar包的私服,进行jar包的deploy和update。所以,我猜这也是dubo成为微服务的过客而springCloud兴起的原因。


springCloud不是指单独的一个框架,而是我上面说到的一系列,他都给我们做了支持。就像他的名字一样,cloud:他为微服务提供了一个运行的生态环境。
1、他使用springBoot的actuator做健康监控,而且支持使用者通过继承AbstractHealthcator抽象类,重写doHealthCheck方法来定制化健康监控端点,同时提供http接口对外暴露系统健康状况。
当然,他不止监控了健康状况,还监控了jvm运行情况等,使用项目根路径加/actuator可以查看他监控的具体内容的查看路径
2、Spring Boot Admin 则提供了可视化actuator监控到的内容,主要功能点:
显示应用程序的监控状态
应用程序上下线监控
查看 JVM 和线程信息
可视化的查看日志及下载日志文件
动态切换日志级别
HTTP 请求信息跟踪等实用功能
将 actuator 提供的数据进行可视化
3、springCloud使用eureka来做注册中心,就是dubbo服务中的zk角色。
eureka分为服务端即:注册中心,和客户端,就是dubbo框架中的服务提供者和服务消费者
eureka客户端框架和dubbo框架不同的是,eureka支持的消费者和提供者之间的请求是restFul和http,而且两者是完全解耦的,不需要同时引用接口jar包
eureka支持actuator监控,用户可以通过定制健康端点,添加健康检查配置来通知注册中心自身服务的健康状态是up还是down
eureka服务端也支持集群部署,多个eureka服务只需要一套程序的不同application.properties文件就可以,只要相互之间配置上集群其他服务的地址,他们之间就可以进行注册内容复制。客户端访问任意一台服务,获得的服务提供者信息都是相同的。
eureka的服务信息是使用currentHashMap存储在内存的,所以不需要额外的数据库服务。
4、springCloud中可以使用ribbon做客户端负载均衡,通过配置eureka注册中心信息,支持从eureka获取服务提供方的信息列表
ribbon也可以单独使用
5、eureka客户端提供的是restful和http交互,springCloud提供了openFeign框架,是对feign做的封装,使其支持springCloud环境友好使用。
6、服务容错
7、springCloud使用zuul做网关
8、springCloud使用Sleuth关联整个请求链路,做链路跟踪
9、springCloud使用apollo做配置中心。apollo是携程提供的,应该是自己内部用,开源出来的,应为有实战经验,所以用很多实用的功能。
10、安全认证
11、灰度发布

相关推荐