1、微服务的特点
1)按业务划分为一个独立运行的程序,即服务单元。
2)服务之间通过http协议相互通信。
3)自动化部署。
4)可以用不同的编程语言。
5)服务集中化管理。
6)微服务是一个分布式系统。
2、微服务架构与SOA架构区别
1)SOA架构中通常使用XML方式实现通信,在高并发情况下,XML会比较冗余,所以微服务使用json代替了xml方式。
2)SOA架构的底层实现通过WebService和ESB,WebService底层采用soap协议通讯。
3、微服务的优势
1)服务按照业务进行拆分,编码也是按照业务拆分,代码的可读性和可扩展性增加。
2)由于微服务系统是分布式系统,服务与服务之间没有任何的耦合。随着业务的增加,可以根据业务再拆分服务,具有极强的横向扩展能力。随着用户数量的增加,并发量增加,可以将微服务集群化部署,从而增强服务的负载能力。
3)服务与服务之间通过http协议通信,单个微服务内部高度耦合,服务与服务之间完全独立,无耦合。
4)微服务的修改和测试对其他服务没有影响,只需要测试并部署被修改的那个服务,这就大大减少了测试和部署的时间。
5)微服务在CAP理论汇总采用的是AP架构,即具有高可用和分区容错的特点。
4、分布式系统CAP理论
分布式系统中有一个著名的CAP理论,即同时满足“一致性”、“可用性”、“分区容错”是一件不可能的事。
Consistency:指数据的强一致性。如果写入某个数据成功,之后读取,读到的都是新的写入的数据;如果写入失败,之后读取的都不是写入失败的数据。
Aviaibility:指服务的可用性。
Partition-tolerance:指分区容错。
单体服务通常是CA系统,微服务系统通常是AP系统,其数据一致性通常采用两阶段提交的策略实现。
5、微服务的三大难题
1)服务故障的传播性
2)服务的划分
3)分布式事务
6、Spring Cloud与Dubbo
1)Spring Cloud是基于Spring Boot的。包含以下组件:
Eureka:服务注册与发现组件(Spring Cloud也支持Consul和Zookeeper)
Hystrix:熔断组件,除了有一些基本的熔断器功能外,还能够实现服务降级、服务限流的功能
Ribbon:负载均衡组件,通常和Eureka、Zuul、RestTemplate、Feign配合使用。
Zuul:路由网关。内部服务的API接口通过Zuul网关统一对外暴露,内部服务的API接口不直接暴露,防止了内部服务敏感信息对外暴露。还可以拦截请求,实现角色权限判断。
以上组件都来自Netflix公司,统一称为Spring Cloud Netflix。
Spring Cloud Config:配置文件统一管理(读取仓库配置文件信息然后管理)
Spring Cloud Security:用户验证与权限控制
Spring Cloud Sleuth:分布式链路追踪组件,通过它可以知道服务之间依赖管理,并实时观察链路的调用情况。
2)Dubbo是阿里巴巴开源的一个分布式服务框架,集成了Apache的Zookeeper组件,用于服务注册和发现。
3)区别:
Spring Cloud的通信方式大多基于HTTP Restful风格的,服务与服务之间解耦无关,各服务无关乎语言平台,只需要对应的API接口即可相互调用;Dubbo的通信方式基于远程调用,对接口、平台和语言有强依赖性。如果需要实现跨平台调用服务,需要额外中间件;
Spring Cloud在模块完备性上远超过Dubbo,如Dubbo不具备网关、链路追踪等模块。
参考书籍:深入理解Spring Cloud与微服务构建