打算断断续续地学习完《SpringCloud微服务》这本书。对于概念模块采取总结的方式做记录。
其中微服务模块的学习,也阅读了微博技术专家胡忠想先生的专栏《从0开始学微服务》。
一、微服务背景
1.微服务简介
微服务是一种架构风格。将单体应用划分为小型的服务单元,微服务之间使用Http的API进行资源访问与操作。
好处:服务独立部署、低耦合,服务可快速启动,更适合敏捷开发,可动态按需扩容,代码复用(服务都提供REST API)。
坏处:分布式部署,调用更复杂(易产生网络问题、容错问题、调用关系问题等)
因为当下微服务比较热门,通常我们在工作中,会根据业务或工作的需求建立不同的项目服务,而多个服务之间的关系是相互调用的,但每个服务又都是独立的,拥有自己独立的功能而不会太过臃肿。
SpringCloud是实现微服务架构的一系列框架的有序集合。
2.传统微服务
服务之间的调用:
此前的解决方案:基于Dubbo构建的微服务架构(阿里巴巴开源)===》服务调用方不再需要关注服务提供方的地址,只要从注册中心获取服务提供方的地址即可。
新解决方案:SpringCloud
Dubbo:关注的更细,只针对服务治理;基于Netty的TCP及二进制的数据传输,高性能。
SpringCloud:高更新,关注整个服务架构;基于Http,创建连接会造成性能损耗。
3.一次服务调用过程参考:
首先服务提供者(就是提供服务的一方)按照一定格式的服务描述,向注册中心注册服务,声明自己能够提供哪些服务以及服务的地址是什么,完成服务发布。
接下来服务消费者(就是调用服务的一方)请求注册中心,查询所需要调用服务的地址,然后以约定的通信协议向服务提供者发起请求,得到请求结果后再按照约定的协议解析结果。
而且在服务的调用过程中,服务的请求耗时、调用量以及成功率等指标都会被记录下来用作监控,调用经过的链路信息会被记录下来,用于故障定位和问题追踪。在这期间,如果调用失败,可以通过重试等服务治理手段来保证成功率。
4.微服务架构基本组件:
微服务架构下,服务调用主要依赖下面几个基本组件:
服务描述——服务对外描述(常用的服务描述方式包括 RESTful API、XML 配置以及 IDL 文件三种)(RESTful API 方式通常用于 HTTP 协议的服务描述,并且常用 Wiki 或者Swagger来进行管理)
注册中心——服务提供者注册其服务与地址,服务调用者向注册中心查询服务,发起请求。
一般来讲,注册中心的工作流程是:
服务提供者在启动时,根据服务发布文件中配置的发布信息向注册中心注册自己的服务。
服务消费者在启动时,根据消费者配置文件中配置的服务信息向注册中心订阅自己所需要的服务。
注册中心返回服务提供者地址列表给服务消费者。
当服务提供者发生变化,比如有节点新增或者销毁,注册中心将变更通知给服务消费者。
服务框架
服务监控
服务追踪
服务治理
二、SpringCloud介绍
模块:
Eureka:服务注册中心,做服务管理
Ribbon:基于客户端的负载均衡组件
Hystrix:容错框架,能防止服务的雪崩效应
Fegin:Web服务客户端,能简化http接口的调用
Zuul:API网关,提供路由转发、请求过滤等功能。
Config:分布式配置管理
Sleuth:服务跟踪
Stream:构建消息驱动的微服务应用程序的框架
Bus:消息代理的集群消息总线
三. 实战
环境:JDK、maven、eclipse
SpringCloud基于Springboot搭建。
四.Eureka注册中心
Spring Cloud Eurek是Spring Cloud Netfix微服务套件中一部分,基于Netfix Eureka做了二次封装,主要负责实现微服务架构中的服务治理功能。
是基于REST的服务,并提供了基于JAVA的客户端组件,将服务注册到Spring Cloud Eureka中进行统一管理。
微服务架构重要的一部分——服务治理。
Dubbo框架针对服务治理,服务治理必须要有——注册中心。
注册中心可使用:Eureka、zookeeper、Consul、Etcd。
(注册中心的概念:类似于12306网站是注册中心,顾客是调用的客户端,顾客会去12306时查票、购票。而程序当需要调用某一服务是,会去Eureka中拉去服务列表,查看调用的服务是否在,有则拿到服务地址、端口等,进行调用)
此处还有一个Eureka和zk的比较。
分布式系统领域著名的CAP定理:(最多同时实现两个)
C:数据一致性;A:服务可用性;P:服务对网络分区故障的容错性。
Eureka:基于AP原则;
ZK:基于CP原则。
Dubbo大部分基于zk,Springcloud基于Eureka。
网友评论