什么是微服务架构
“微服务”一词源于Martin Fowler的名为Microservices的博文。简单地说,微服务是系统架构上的一种设计风格,它的主旨是将一个原本独立的系统拆分成许多个小型服务,这些小型服务都在各自独立的进程中运行,服务之间通过RPC/RESTFul API进行通信协作。
微服务九大特征
- 服务组件化
- 按业务组织团队
- 做“产品”的态度
- 智能端点与哑管道
- 去中心化治理
- 去中心化管理数据
- 基础设施自动化
- 容错设计
- 演进式设计
Spring Cloud 微服务架构原理
微服务化后,微服务间我们通过 http restful api 通信,问题是调用的服务是一个集群,我们怎么知道应该请求哪一个服务?这里引入Eureka 来解决,微服务将自己的相关信息注册到Eureka Server, 同时又能拿到别的服务的信息,这样本地客户端我们再通过ribbon决策出请求哪一个服务,做负载均衡。然后我们再通过 hystrix 做好熔断,避免个别服务问题导致整个系统雪崩的问题。微服务化后,服务实例变多了,这些实例很多配置都是相同的,这里我们使用 Spring Cloud Config 来统一做配置,避免配置复杂繁琐不一致的问题。以前我们通过nginx这类反向代理软件来做网关路由,这类需要手动的去维护路由规则和可用服务列表,比较麻烦。spring cloud 提供zuul网关来帮我们简化这部分工作,可用的服务列表直接从eureka里取,不需要手动维护了。
Spring Cloud 常用组件
- 服务发现——Netflix Eureka
- 客服端负载均衡——Netflix Ribbon
- 断路器——Netflix Hystrix
- 服务网关——Netflix Zuul
- 分布式配置——Spring Cloud Config
Spring Cloud vs Dubbo
- Spring Cloud是Dubbo的超集,定位为一套完整的微服务解决方案,而Dubbo只是专注于RPC和服务治理。
- Dubbo 采用RPC 长链接通信,比Spring Cloud 的http restful 性能要好些,对响应时间要求很高的系统Dubbo有优势
- Dubbo 的注册中心依赖 zeekeeper,如果 zeekeeper 出问题就不可用了,而Spring Cloud 的Eureka支持高可用集群
- Spring Cloud 基于 Spring Boot ,易用性强于Dubbo