微服务可谓是这几年比较热门的技术,从2017开始逐渐爆火,逐渐大大小小的公司纷纷将微服务技术引入并在实际业务中落地。
微服务的概念最早是在2014年由Martin Fowler和James Lewis共同提出:微服务是由单一应用程序构成的小服务,拥有自己的进程与轻量化处理,服务依业务功能设计,以全自动的方式部署,与其他服务使用HTTP API通讯。同时,服务会使用最小规模的集中管理 (例如Docker)技术,服务可以用不同的编程语言与数据库等。
为什么要用微服务?微服务真的那么好吗?
在认识这些之前,得了解单体架构的弊端。
以MVC架构为例,业务通常是通过部署一个WAR包到Tomcat中,然后启动Tomcat,监听某个端口即可对外提供服务。早期在业务规模不大、开发团队人员规模较小的时候,采用单体应用架构,团队的开发和运维成本都可控。
然而随着业务规模的不断扩大,团队开发人员的不断扩张,单体应用架构就会开始出现问题。大致有以下几个方面:
面向服务就是把传统的单机应用中通过JAR包依赖产生的本地方法调用,改造成通过RPC接口产生的远程方法调用。
微服务可以理解为面向服务的进一步发展。
在SOA的基础上,微服务主要有了以下的发展:
总结来说,微服务架构是将复杂臃肿的单体应用进行细粒度的服务化拆分,每个拆分出来的服务各自独立打包部署,并交由小团队进行开发和运维,从而极大地提高了应用交付的效率,并被各大互联网公司所普遍采用。
这里附上一张架构演进简略示意图:
微服务拆分具体该如何实施呢?
一个最有效的手段就是将不同的功能模块服务化,独立部署和运维。以社交App为例,可以认为首页信息流是一个服务,评论是一个服务,消息通知是一个服务,个人主页也是一个服务。
这种服务化拆分方式是纵向拆分,是从业务维度进行拆分。标准是按照业务的关联程度来决定,关联比较密切的业务适合拆分为一个微服务,而功能相对比较独立的业务适合单独拆分为一个微服务。
还有一种服务化拆分方式是横向拆分,是从公共且独立功能维度拆分。标准是按照是否有公共的被多个其他服务调用,且依赖的资源独立不与其他业务耦合。
仍然社交App举例,无论是首页信息流、评论、消息箱还是个人主页,都需要显示用户的昵称。假如用户的昵称功能有产品需求的变更,你需要上线几乎所有的服务,这个成本就有点高了。显而易见,如果我把用户的昵称功能单独部署成一个独立的服务,那么有什么变更我只需要上线这个服务即可,其他服务不受影响,开发和上线成本就大大降低了。
必须要认识到,微服务架构也是有成本的,架构复杂度提升,也会带来一些新的问题,这些微服务架构必须要解决的问题:
对于大部分公司而言,自研来解决微服务架构的一些问题,成本是很难接受的。不过,幸运的是,有不少业界开源方案可供选择。
前几年比较火的是阿里的Dubbo,后来一度停止维护,最近两年又起死回生,重新焕发生机。
后来又出现了Spring体系下的微服务方案Spring Cloud,并迅速流行起来。
Spring Cloud本身不是新的框架,它是一系列框架的有机组合,利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发。并非所有组件都由Spring提供,Netflix扮演了重要的角色。
注册中心
Eureka、熔断器
Hystrix、负载均衡组件
Ribbon、网关
Zuul等重要组件均由Netflix提供。
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总体结构图:
和SpringCloud Netflix的主要区别:
Spring Cloud Alibaba 各版本兼容表:
好了微服务和SpringCloub Alibaba的简介到此结束!
参考
【1】:小专栏:SpringCloudAlibaba微服务实战
【2】:Java日知录 SpringCloud Alibaba微服务实战
【3】:极客时间 从0开始学微服务 微博服务化专家的一线实战经验
【4】:微服务技术选型之路
【5】:Spring 社区的唯一一个国产开源项目 - Spring Cloud Alibaba 毕业了