SpingCloud Alibaba实战(1:微服务与SpringCloud Alibaba) 骑猪看日落 2022-11-16 10:40 166阅读 0赞 # 1、什么是微服务? # 微服务可谓是这几年比较热门的技术,从2017开始逐渐爆火,逐渐大大小小的公司纷纷将微服务技术引入并在实际业务中落地。 微服务的概念最早是在2014年由Martin Fowler和James Lewis共同提出:微服务是由单一应用程序构成的小服务,拥有自己的进程与轻量化处理,服务依业务功能设计,以全自动的方式部署,与其他服务使用HTTP API通讯。同时,服务会使用最小规模的集中管理 (例如Docker)技术,服务可以用不同的编程语言与数据库等。 ## 1.1、单体应用之痛 ## 为什么要用微服务?微服务真的那么好吗? 在认识这些之前,得了解单体架构的弊端。 以MVC架构为例,业务通常是通过部署一个WAR包到Tomcat中,然后启动Tomcat,监听某个端口即可对外提供服务。早期在业务规模不大、开发团队人员规模较小的时候,采用单体应用架构,团队的开发和运维成本都可控。 然而随着业务规模的不断扩大,团队开发人员的不断扩张,单体应用架构就会开始出现问题。大致有以下几个方面: * **部署效率低下** * **团队协作开发成本高** * **系统高可用性差** * **线上发布变慢** ## 1.2、面向服务(SOA) ## 面向服务就是把传统的单机应用中通过JAR包依赖产生的本地方法调用,改造成通过RPC接口产生的远程方法调用。 ## 1.3、微服务 ## 微服务可以理解为面向服务的进一步发展。 在SOA的基础上,微服务主要有了以下的发展: * **服务拆分粒度更细**。微服务可以说是更细维度的服务化,小到一个子模块,只要该模块依赖的资源与其他模块都没有关系,那么就可以拆分为一个微服务。 * **服务独立部署**。每个微服务都严格遵循独立打包部署的准则,互不影响。比如一台物理机上可以部署多个Docker实例,每个Docker实例可以部署一个微服务的代码。 * **服务独立维护**。每个微服务都可以交由一个小团队甚至个人来开发、测试、发布和运维,并对整个生命周期负责。 * **服务治理能力要求高**。因为拆分为微服务之后,服务的数量变多,因此需要有统一的服务治理平台,来对各个服务进行管理。 总结来说,微服务架构是将复杂臃肿的单体应用进行细粒度的服务化拆分,每个拆分出来的服务各自独立打包部署,并交由小团队进行开发和运维,从而极大地提高了应用交付的效率,并被各大互联网公司所普遍采用。 这里附上一张架构演进简略示意图: ![微服务架构演进略图][015d56e412c1e65c06095b011c75843b.png] # 2、微服务如何拆分 # ## 2.1、微服务拆分的两种方式 ## 微服务拆分具体该如何实施呢? 一个最有效的手段就是将不同的功能模块服务化,独立部署和运维。以社交App为例,可以认为首页信息流是一个服务,评论是一个服务,消息通知是一个服务,个人主页也是一个服务。 这种服务化拆分方式是**纵向拆分**,是从业务维度进行拆分。标准是按照业务的关联程度来决定,关联比较密切的业务适合拆分为一个微服务,而功能相对比较独立的业务适合单独拆分为一个微服务。 还有一种服务化拆分方式是**横向拆分**,是从公共且独立功能维度拆分。标准是按照是否有公共的被多个其他服务调用,且依赖的资源独立不与其他业务耦合。 仍然社交App举例,无论是首页信息流、评论、消息箱还是个人主页,都需要显示用户的昵称。假如用户的昵称功能有产品需求的变更,你需要上线几乎所有的服务,这个成本就有点高了。显而易见,如果我把用户的昵称功能单独部署成一个独立的服务,那么有什么变更我只需要上线这个服务即可,其他服务不受影响,开发和上线成本就大大降低了。 ## 2.2、微服务拆分需要解决的问题 ## 必须要认识到,微服务架构也是有成本的,架构复杂度提升,也会带来一些新的问题,这些微服务架构必须要解决的问题: * **服务如何定义**。对于单体应用来说,不同功能模块之前相互交互时,通常是以类库的方式来提供各个模块的功能。对于微服务来说,每个服务都运行在各自的进程之中,应该以何种形式向外界传达自己的信息呢?答案就是接口,无论采用哪种通讯协议,是HTTP还是RPC,服务之间的调用都通过接口描述来约定,约定内容包括接口名、接口参数以及接口返回值。 * **服务如何发布和订阅**。单体应用由于部署在同一个WAR包里,接口之间的调用属于进程内的调用。而拆分为微服务独立部署后,服务提供者该如何对外暴露自己的地址,服务调用者该如何查询所需要调用的服务的地址呢?这个时候你就需要一个类似登记处的地方,能够记录每个服务提供者的地址以供服务调用者查询,在微服务架构里,这个地方就是注册中心。 * **服务如何监控**。通常对于一个服务,我们最关心的是QPS(调用量)、AvgTime(平均耗时)以及P999(99.9%的请求性能在多少毫秒以内)这些指标。这时候你就需要一种通用的监控方案,能够覆盖业务埋点、数据收集、数据处理,最后到数据展示的全链路功能。 * **服务如何治理**。可以想象,拆分为微服务架构后,服务的数量变多了,依赖关系也变复杂了。比如一个服务的性能有问题时,依赖的服务都势必会受到影响。可以设定一个调用性能阈值,如果一段时间内一直超过这个值,那么依赖服务的调用可以直接返回,这就是熔断,也是服务治理最常用的手段之一。 * **故障如何定位**。在单体应用拆分为微服务之后,一次用户调用可能依赖多个服务,每个服务又部署在不同的节点上,如果用户调用出现问题,你需要有一种解决方案能够将一次用户请求进行标记,并在多个依赖的服务系统中继续传递,以便串联所有路径,从而进行故障定位。 # 3、微服务技术选型 # 对于大部分公司而言,自研来解决微服务架构的一些问题,成本是很难接受的。不过,幸运的是,有不少业界开源方案可供选择。 前几年比较火的是阿里的Dubbo,后来一度停止维护,最近两年又起死回生,重新焕发生机。 后来又出现了Spring体系下的微服务方案Spring Cloud,并迅速流行起来。 Spring Cloud本身不是新的框架,它是一系列框架的有机组合,利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发。并非所有组件都由Spring提供,Netflix扮演了重要的角色。 `注册中心`Eureka、`熔断器`Hystrix、`负载均衡组件`Ribbon、`网关`Zuul等重要组件均由Netflix提供。 ![SpingCloud微服务架构][SpingCloud] # 4、为什么要使用SpringCloud Alibaba # SpringCloud生态已经如此完善了。什么是SpringClou Alibaba? 为什么要使用SpringCloud Alibaba? 来自阿里云的说法: > Spring Cloud 本身是一套微服务规范,并不是一个拿来即可用的框架,而 Spring Cloud Alibaba 的开源为开发者们提供了这套规范的实现方式。同时,Spring Cloud Alibaba 提供的完整的微服务组件、中文文档和本地化的开源服务提高了开发者们接入微服务的速率,并降低了后续的运维难度。 简单说,Spring Cloud Alibaba是阿里开源的一套Sping Cloud规范的实现。 那么,第二点,为什么要使用SpringCloud Alibaba? 因为上面提到的SpringCloud官方版,或者说SpringCloud Netflix版一些重要组件如注册中心Euraka、Ribbon已经不再迭代更新了。 SpringCloud Alibaba恰逢其会开源孵化毕业,所以这两年热度迅速提升,甚至可以说是"SpringCloud2.0"。 来自阿里SpringCloud Alibaba总体结构图: ![img][] 和SpringCloud Netflix的主要区别: ![img][img 1] Spring Cloud Alibaba 各版本兼容表: ![img][img 2] 好了微服务和SpringCloub Alibaba的简介到此结束! -------------------- **参考** 【1】:[小专栏:SpringCloudAlibaba微服务实战 ][SpringCloudAlibaba_] 【2】:[Java日知录 SpringCloud Alibaba微服务实战][Java_ SpringCloud Alibaba] 【3】:[极客时间 从0开始学微服务 微博服务化专家的一线实战经验][_0_] 【4】:[微服务技术选型之路 ][Link 1] 【5】:[Spring 社区的唯一一个国产开源项目 - Spring Cloud Alibaba 毕业了][Spring _ - Spring Cloud Alibaba] [015d56e412c1e65c06095b011c75843b.png]: /images/20221022/6aa69ee63e454fbc9b00db1523a85495.png [SpingCloud]: /images/20221022/dbe63ac27c4441eaa33772cdb6d9de53.png [img]: /images/20221022/35444bf87cab481aa3e4fea3ee5a716e.png [img 1]: /images/20221022/c815c90a1e884d93ae35b5ebc4593c46.png [img 2]: /images/20221022/ca96de8e524d4272b01815c5453b51b6.png [SpringCloudAlibaba_]: https://xiaozhuanlan.com/msa-practice [Java_ SpringCloud Alibaba]: http://javadaily.cn/tags/SpringCloud [_0_]: https://time.geekbang.org/column/intro/115 [Link 1]: https://juejin.cn/post/6844903839968018446 [Spring _ - Spring Cloud Alibaba]: https://blog.csdn.net/weixin_43970890/article/details/100561905?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522161753106616780357221984%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=161753106616780357221984&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_v2~rank_v29-19-100561905.pc_search_result_no_baidu_js&utm_term=spring+cloud+alibaba
还没有评论,来说两句吧...