1、微服务应该具备的功能
微服务,可以拆分为“微”和“服务”二字。“微”即小的意思,那到底多小才算“微”呢?可能不同的团队有不同的答案。从参与微服务的人数来讲,单个微服务从架构设计、代码开发、测试、运维的人数加起来是8~10人才算“微”。那么何为“服务”呢?按照“微服务”概念提出者Martin Fowler给出的定义:“服务”是一个独立运行的单元组件,每个单元组件运行在独立的进程中,组件与组件之间通常使用HTTP这种轻量级的通信机制进行通信。
2、微服务具有以下的特点
1)按照业务来划分服务,单个服务代码量小,业务单一,易于维护。
2)每个微服务都有自己独立的基础组件,例如数据库、缓存等,且运行在独立的进程中。
3)微服务之间的通信是通过HTTP协议或者消息组件,且具有容错能力。
4)微服务有一套服务治理的解决方案,服务之间不耦合,可以随时加入和剔除服务。
5)单个微服务能够集群化部署,并且有负载均衡的能力。
6)整个微服务系统应该有一个完整的安全机制,包括用户验证、权限验证、资源保护等。
7)整个微服务系统有链路追踪的能力。
8)有一套完整的实时日志系统。
3、微服务具有以下的功能
1)服务的注册和发现。
2)服务的负载均衡。
3)服务的容错。
4)服务网关。
5)服务配置的统一管理。
6)链路追踪。
7)实时日志。
Dubbo
阿里巴巴在2011年开源了Dubbo框架,虽然在2013年停止更新,但在2017年9月又重启维护并发布了新版本。目前已有很多的公司将自己的业务建立在Dubbo之上,同时阿里云也推出了企业级分布式应用服务EDAS,为Dubbo提供应用托管。
Dubbo采用Zookeeper作为注册中心,RPC作为服务调用方式,致力于提供高性能和透明化的RPC远程服务调用方案。它与Spring无缝集成,基于服务提供方(服务端)与服务调用方(客户端)角色构建简单模型,其优点是使用方便、学习成本低。
① 服务提供方发布服务到服务注册中心。
② 服务消费方从服务注册中心订阅服务。
③ 注册中心通知消息调用方服务已注册。
④ 服务消费方调用已经注册的可用服务。
⑤ 监控计数。
Spring Cloud
Spring Cloud基于Spring Boot实现,使用HTTP的RESTful风格API作为调用方式。它所包含的多个子项目共同构建了微服务架构体系。
1)Netflix Eureka
Spring Cloud 的服务注册中心提供服务注册、服务发现、负载均衡等功能。
2)Netflix Hystrix
当某个服务发生故障之后,则触发熔断机制(Hystrix)向服务调用方返回结果标识错误,而不是一直等待服务提供方返回结果,这样就不会使得线程因调用故障服务而被长时间占用不释放,避免了故障在分布式系统中的蔓延。
3)Netflix Zuul
代理各模块提供的服务,统一暴露给第三方应用。提供动态路由、监控、弹性、全等的边缘服务。
4)Config Server
分布式架构下多微服务会产生非常多的配置文件,分布式配置中心(Config Server)将所有配置文件交由GIT或SVN进行统一管理,避免出错。
Spring Boot
在使用Spring开发时,通常需要完成Spring框架及其他第三方工具配置文件的编写,非常麻烦。Spring Boot通过牺牲项目的自由度来减少配置的复杂度,约定一套规则,把这些框架都自动配置集成好,从而达到“开箱即用”。
Spring Clould与Dubbo比较
1、从微服务关注点比较Spring Cloud和Dubbo
Spring Cloud拥有很多的项目模块,包含了微服务系统的方方面面。
Dubbo是一个非常优秀的服务治理和服务调用框架,但缺少很多功能模块,例如网关、链路追踪等。
在项目模块上,Spring Cloud占据着更大的优势。
Spring Cloud的更新速度非常块,基本每个月会发一次版本的迭代。从GitHub的代码仓库来看,Spring Cloud几乎每天都有更新。阿里巴巴于2011年10月开源了Dubbo,开源后的Dubbo发展迅速,大概每2~3个月有一次版本更新。然而,从在2013年3月开始,Dubbo暂停了版本更新,并只在2014年10月发布了一个小版本,修复了一个bug,之后长期处于版本停止更新的状态。直到2017年9月,阿里巴巴中间件部门重新组建了Dubbo团队,把Dubbo列为重点开源项目,并在2017年9~11月期间,一直保持每月一次版本更新的频率。
2、从学习成本上比较Spring Cloud和Dubbo
Dubbo的版本趋于稳定,文档完善,可以即学即用,没有太大难度。
Spring Cloud 基于Spring Boot开发,需要开发者先学会Spring Boot。
Spring Cloud版本迭代快,需要快速跟进学习。
Spring Cloud文档大多是英文的,要求学习者有一定的英文阅读能力。
Spring Cloud文档很多,不容易快速找到相应的文档。
3、从开发风格上比较Spring Cloud和Dubbo
Dubbo 更倾向于Spring Xml的配置方式,Dubbo官方也推荐这种方式。
Spring Cloud基于Spring Boot,Spring Boot采用的是基于注解和JavaBean配置方式的敏捷开发。
4、从开发速度上比较Spring Cloud和Dubbo
Spring Cloud具有更高的开发和部署速度。
5、从通信方式上来比较Spring Cloud和Dubbo
Spring Cloud 的通信方式大多数是基于HTTP Restful风格的,服务与服务之间完全无关、无耦合。由于采用的是HTTP Rest,因此服务无关乎语言和平台,只需要提供相应API接口,就可以相互调用。
Dubbo 的通信方式基于远程调用,对接口、平台和语言有强依赖性。如果需要实现跨平台调用服务,需要写额外的中间件,这也是Dubbo存在的原因。
Dubbo和Spring Cloud拥有各自的优缺点。Dubbo更易上手,并且广泛使用于阿里巴巴的各大站点,经历了“双11”期间高并发、大流量的检验,Dubbo框架非常成熟和稳定。Spring Cloud服务框架严格遵守Martin Fowler 提出的微服务规范,社区异常活跃,它很可能成为微服务架构的标准。