spring-cloud微服务之路(一):基础知识

一:什么是微服务

        微服务一词源于Martin Fowler的名为Microservices的博文,简单的说,微服务是一种设计风格,它将原本独立的系统根据模块拆分成很多小型服务,每一个服务都是一个独立的应用,服务之间通过HTTP的restful api进行通信协作,每个服务有自己独立的数据库、业务逻辑、自动化测试案例和部署方案。由于通过restful api进行通信,所以这些微服务不用局限于使用哪个语言开发,任何语言都可以。

二:与单体应用的区别

        早期开发是,一般都是构建一个单体应用,里面包含了数据库、前端、后台三个部分,在项目初期,可能功能不多,并且由于所有的业务逻辑都在一个应用中,开发、测试、部署、都比较容易简单,但是随着企业的发展,业务不断的增多,并且手机、ipad、电脑多个展示端的出现,这对于系统后端向前端的支持需要更多的接口。单体应用由于面对的业务需求更为广泛,不断扩大的需求会使得单体应用越来越臃肿,而且由于单体应用部署在一个进程内,往往我们修改一个很小的功能就需要停止整个服务器来重新部署,维护成本越来越高,且难以控制。

       为了解决以上难题,微服务架构诞生并被广泛关注。微服务强调的是,我们将系统中不同功能模块拆分成多个不同的服务,这些服务都能够独立部署和运行,一般都是部署在docker容器中,因为docker容器的沙盒特性,每个微服务的更新和状态都不会影响其他服务的运行,假使一个微服务down掉,也不影响用户对其他模块的访问,增加了系统的健壮性和稳定性。

三:微服务的优缺点

        事物都有两面性,微服务也一样,有自己的有点也有缺点。

        优点:1、通过分解单体应用成模块应用,降低了开发难度(使用spring boot 进行微服务开发真的很方便)。

                  2、每个微服务可以分给独立的项目进行开发,也不局限于使用哪个语言,自由开发。

                  3、微服务独立部署,不再考虑本服务的部署是否会对其他服务造成影响,这种改变可以加快部署速度,使得持续化部署变成可能。

                  4、将模块和整体应用进行剥离后,大大降低两者之间的耦合度,个别微服务挂掉不会对整个服务产生毁灭性的打击。

        缺点:1、运维的新挑战,微服务架构中运维人员需要维护更多的进程数量。

                  2、分布式事务的一致性,虽然我们拆分了业务,但是业务逻辑不会拆分,只是从以前的代码通信变成了服务间的通信,这样会带来事务的一致性的问题,并且分布式事务本身的实现难度就非常大,所以在微服务中我们更强调在各服务之间进行“无事务”的调用,而对于数据一致性,只要求数据在最后的处理状态是一致的即可,若在过程中发现错误,通过补偿机制来进行处理,使得错误数据能够达到最终的一致性。

                  3、分布式的复杂性,比如网络延迟、异步消息等。

四:Spring Cloud简介

        Spring Cloud是一个基于Spring boot实现的微服务架构开发工具。它为微服务架构中设计的配置管理、服务治理、熔断器、智能路由、微代理、控制总线、全局锁、决策竞选、分布式会话等操作提供了一种简单的开发方式。

        Spring Cloud包含多个子项目:

        1、Spring Cloud Config:配置管理工具,支持使用Git存储配置内容,并支持客户端配置信息加解密、动态刷新等内容。

        2、Spring Cloud Netfix:核心组件包含如下

                2.1、Eureka:服务治理组件,包含服务注册中心、服务注册和发现的实现。

                2.2、Hystrix:容错管理组件,实现断路器模式,帮助服务依赖中出现的延迟和为故障提供强大的容错能力。

                2.3、Ribbon:客户端负载均衡的服务调用组件。

                2.4、Feign:基于Ribbon和Hystrix的声明式调用组件。

                2.5、Zuul:网关组件,提供只能路由、访问过滤等功能。

        3、Spring Cloud Starter:Spring Cloud 的基础组件,它是基于Spring Boot 风格项目的基础依赖模块。

        4、Spring Cloud Bus:事件、消息总线,用于传播集群中的状态变化或事件,以触发后续的处理,比如配置文件的动态刷新。

        5、Spring Cloud Consul:服务注册和发现组件,这个组件和Eureka的区别是Consul强调CAP原则中的CP(强一致性),牺牲了可用性,Eureka强调了CAP原则中的AP(强可用性)牺牲了一致性,我们可以根据需求自由选择之一。

        6、Spring Cloud Security:安全工包,提供在Zuul代理中对OAuth2客户端请求的中继器。

        ............

五:Spring Cloud 版本说明

       大家可能发现Spring Cloud 的版本和常见的不一样,不是一堆数字什么的,这是因为Spring Cloud 的版本采用伦敦地铁站的名字,根据字母表的顺序来对应版本顺序。如果没有特殊说明,本博客均采用Spring Boot 1.5.7 RELEASE 和 Spring Cloud Dalston.SR3 版本。


你可能感兴趣的:(spring-cloud)