
微服务技术栈
文章平均质量分 88
该专栏主要对微服务技术进行讲解,涉及到微服务技术中遇到的一些问题,包括配置中心、服务治理、负载均衡、熔断、监控、通讯协议等。主要讲述Spring Cloud生态圈中涉及到的微服务相关技术,比如Spring Cloud NetFlix、Spring Cloud Alibaba等。
微服务技术栈
这个作者很懒,什么都没留下…
展开
-
Java 序列化与反序列化原理以及常用序列化技术详解
在平常的工作过程中,我们经常会提到并且用到序列化和反序列化,RPC的使用就是最好的一个例子,那么到底是序列化和反序列化呢,序列化和反序列化有什么用处,Java又是如何实现序列化和反序列化的呢?序列化是将对象的状态信息转换为可存储或者传输的形式的过程,简单的来讲就是将对象转换为字节序列的过程。反序列化就是序列化的逆过程,将字节数组反序列化为对象,恢复为对象的过程。那么序列化和反序列化解决哪些问题呢?将对象序列化为字节数组,使用对象可以通过网络进行进程之间传输并且可以将对象永久存储到存储设备。这就是序列原创 2020-09-23 19:31:27 · 660 阅读 · 0 评论 -
Java Service Provider Interface 之 SPI机制
SPI全称Service Provider Interface,是Java提供的一套用来被第三方实现或者扩展的接口,它可以用来启用框架扩展和替换组件。 SPI 的作用就是为这些被扩展的API寻找服务实现。Java中一个经典的SPI实现就是JDBC的Driver的加载机制,在最初我们学习JDBC时,我们需要使用Class.forName("com.mysql.jdbc.Driver")加载数据库驱动。其实在最新版本的JDK中我们可以省略该步骤,该步骤已经在JDK中通过SPI进行了驱动的加载。在DriverMa原创 2020-09-14 22:30:09 · 628 阅读 · 1 评论 -
Spring Cloud Gateway与Spring Cloud Alibaba Sentinel 网关限流的实现
在前面我们知道Spring Cloud Gateway实现了一个RequestRateLimiter的过滤器,该过滤器会对访问到当前网关的所有请求执行限流过滤器、如果被限流,默认情况下回响应Http-429-Too Many Requests。RequestRateLimiterGatewayFilterFactory默认提供了RedisRateLimiter的限流实现,它采用令牌桶的算法实现限流功能。Spring Cloud Alibaba Sentinel 从1.6版本提供了对Spring C.原创 2020-09-15 21:08:06 · 1134 阅读 · 0 评论 -
Spring Cloud Alibaba 限流与熔断 — 再谈Sentinel 限流与熔断
前面我们已经介绍了Sentinel的限流的简单使用,今天我们再次讲解Sentinel的限流与熔断的使用,并且介绍几种常见的限流的算法。 所谓限流就是通过限制并发访问数或者限制一个时间窗口内允许的请求数量来保护系统,一旦请求超过限制数量而采取一些处理策略,比如:跳转到错误页面、排队、降级等。限流以损失一部分用户的可用性而为大部分用户提供稳定的服务。下面我们介绍几种常见的限流算法。计数器算法...原创 2020-09-06 09:46:18 · 428 阅读 · 0 评论 -
Spring Cloud Alibaba Dubbo之集群容错、负载均衡、服务降级的使用
其实前面已经介绍过Ribbon负载均衡,在访问量较大的情况下,我们会通过水平扩容的方式增加多个节点来平衡请求的流量,从而提升整体服务的性能。Spring Cloud Alibaba作为一个微服务框架,使用Dubbo作为通讯框架,在Dubbo提供了四种负载均衡策略,分别为随机算法(random)、轮训(roundrobin)、最少活跃调用少(leastactive)、一致性hash算法(consistenthash)。其中随机算法可以针对性能较好的服务器设置权重,请求的概率也会越大,轮训算法是按照公约后的权重原创 2020-09-04 21:40:27 · 1135 阅读 · 0 评论 -
Spring Cloud 分布式消息—Spring Cloud Stream 自定义通道与分组分区应用
在Spring Cloud 分布式消息—Spring Cloud Stream 简介与入门一篇我们简单了介绍了Spring Cloud Stream,并且使用Spring Cloud Stream提供的默认通道input,output简单的做了一个示例,本篇我们将会使用自定义通道做一个示例,并且介绍Spring Cloud Stream的高级应用,如果对Spring Cloud Stream 不了解可以先去阅读Spring Cloud 分布式消息—Spring Cloud Stream 简介与入门一篇文章.原创 2020-09-04 17:38:37 · 1738 阅读 · 0 评论 -
Spring Cloud 分布式消息—Spring Cloud Stream 简介与入门
目前市面上有许多消息代理中间件(下面简称为消息代理),例如 ActiveMQ RabbitMQ、Kafka 、RocketMQ等,在使用这些框架时,我们需要调用它们的API用于发送和接收消息。本篇博客我们使用RabbitMQ作为示例。在单独使用RabbitMq时,我们需要创建RabbitMQ客户端连接,创建Channel,声明一个队列,然后通过Channel发布消息。代码如下所示:原创 2020-09-03 16:26:58 · 865 阅读 · 0 评论 -
Spring Cloud 网关路由—Spring Cloud Gateway 自定义过滤器
在Spring Cloud 网关路由—Spring Cloud Gateway 配置详解一篇我们详细介绍了Spring Cloud Gateway路由的配置与使用,并且介绍了部分过滤器的配置,不过我们配置的都是Spring Cloud Gateway内部定义的过滤器和断言,本篇博客讲解如何创建自定义断言与过滤器的使用。自定义断言工厂需要实现RoutePredicateFactory,不过Spring Cloud Gateway为我们提供了一个抽象类,我们只需要继承该抽象类AbstractRoutePre原创 2020-08-31 15:26:54 · 649 阅读 · 0 评论 -
Spring Cloud 网关路由—Spring Cloud Gateway 配置详解
前面我们简单的介绍了Spring Cloud Gateway的使用和原理,以及SpringCloud Gateway的三大组件:路由、断言和过滤器。而路由则是由一个ID、一个目的URL、一组断言工厂和一组Filter过滤器组成。本篇博客主要介绍路由的配置,ID表示一个路由的唯一标识,URL为要转发的地址,这两个比较简单。复杂的就是断言和过滤器的配置。首先我们介绍断言的配置,Spring Cloud Gateway将路由作为Spring WebFlux HandlerMapping基础设施的一部分进行匹配原创 2020-08-28 16:45:16 · 3309 阅读 · 0 评论 -
Spring Cloud Alibaba 限流与熔断 — Sentinel 限流入门案例
前面我们降解了Netflix 的限流与熔断组件Hystrix,了解了熔断与限流的基本概念与Hystrix的基本使用方式,本篇我们介绍Alibaba开源的熔断限流组件Sentinel。Sentinel 是面向分布式服务架构的高可用流量防护组件,主要以流量为切入点,从限流、流量整形、熔断降级、系统负载保护、热点防护等多个维度来帮助开发者保障微服务的稳定性。...原创 2020-08-24 15:56:55 · 309 阅读 · 0 评论 -
Spring Cloud Alibaba 服务注册与发现之 Zookeeper
在多次填坑之后,使用Spring Cloud Alibaba Nacos作为注册中心,成功的演示了一个Hello Name 案例,具体案例参考博客Spring Cloud Alibaba Nacos之服务注册与发现。然后就觉得自己有点飘飘欲仙的感觉,可能是突然不见了Bug的刀了,也可能是成功就会有动力,突发奇想的将服务注册中心Nacos换成Zookeeper。Spring Cloud官方为了方便Zookeeper作为配置和服务注册中心为我们提供了一个starter的jar包,Maven依赖如下: &l原创 2020-08-21 12:43:15 · 1038 阅读 · 1 评论 -
Spring Cloud 网关路由—Spring Cloud Gateway 简介与入门
前面已经介绍了Netflix提供的网关路由组件Zuul,提供统一的API地址访问我们的服务,唯一不足的是Zuul采用的是Servlet的堵塞IO,性能比较低,而作为网关,性能是至关重要的,因此Spring 团队重新打造了一个网关路由组件Spring Cloud Gateway,他不仅仅支持HTTP协议,还支持websocket等协议,本篇我们将介绍Spring Cloud Gateway的使用。为了转型的方便Spring Cloud Gateway采取了与Zuul相似的策略,学习完Zuul很容易对Sprin原创 2020-08-26 20:01:47 · 397 阅读 · 0 评论 -
Spring Cloud Alibaba Nacos 之配置中心
Nacos是什么?官方是这么介绍Nacos的,Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。在Nacos中,服务(Service)是 Nacos 世界的一等公民。Nacos 支持几乎所有主流类型的“服务”的发现、配置和管理:Kubernetes Service;gRPC & Dubbo RPC Service;Spring Cloud RESTful Service。它提供了服务发现和服务健康监测、原创 2020-08-19 20:01:03 · 171 阅读 · 0 评论 -
Spring Cloud 微服务之配置中心解决方案
关于注册中心这一篇博文,本来想分很多篇去介绍的,但是仔细想想,觉得太繁复而且啰嗦,所以还是写一篇介绍其中的核心原理,并不做任何示例,如果想要查看具体用法可以自行查看官方文档或者度娘。因为配置中心太多了,不说其他的Spring Cloud就集成了好几种框架作为配置中心比如:Spring Cloud Config, Archaiu,Consul, Spring Cloud Zookeeper ,Alibaba Nacos等。每个公司都有不同的选择,不可能一一的去列举,重点是掌握核心,当遇到新的配置中心的时候能够原创 2020-08-18 11:15:44 · 454 阅读 · 0 评论 -
Spring Cloud Netflix 路由和过滤器—Zuul原理与高级应用
前面介绍了Spring Cloud Zuul的入门案例以及使用Zuul路由的各种配置,本篇我们会简单的讲解Zuul的简单原理和一些高级应用,比如过滤器、授权等。在讲解Zuul的路由原理之前,我们先看一下Spring MVC的请求流程,简单的来说,在Spring MVC中DispatcherServlet拦截所有请求,然后根据路径交给对应的Controller去处理。同样Zuul的路由原理也是一样的,它是通过一个Servlet拦截所有请求,然后根据配置的path和请求的path去转发请求。如下代码为Zuul的原创 2020-08-14 14:26:43 · 204 阅读 · 0 评论 -
Spring Cloud Netflix 网关路由— Zuul 网关路由配置
在Zuul入门案例一篇我们讲述了Zuul简单用法,默认情况下通过网关的请求默认路径为http://ip:port/serviceId/**,除此之外Zuul还提供了自定义路由配置。Zuul通过zuul.routes进行配置路由转发规则。如下是一个简单的路由配置。zuul: routes: hystrixservice: #路由名称 path: /hyservcie/** #路由路径 serviceId: hystrix-consume #服务Id如上配置,我们添原创 2020-08-13 17:13:58 · 624 阅读 · 0 评论 -
Spring Cloud Netflix 网关路由— Zuul 入门案例
通过前面的Eureka、Ribbon、Hystrix我们很容易构建一个简单的微服务架构,服务提供方将服务注册到服务注册与发现中心,服务调用这从服务发现与调用中心拉取服务列表,并且通过Ribbon提供的负载均衡器进行调用,在服务提供方出现故障的时候可以通过Hystrix进行断路而防止整个服务崩溃。但是这样还会存在一些问题,比如每个服务调用者都需要维护一系列的服务提供者的地址列表,因为某种因素,可能各个服务提供者维护的列表不一致,又比如需要限流的时候需要每个服务提供者都有限流逻辑,造成臃肿,需要授权的时候也是一原创 2020-08-13 11:38:00 · 315 阅读 · 0 评论 -
Spring Cloud Netflix 熔断组件 —Hystrix @HystrixCommand配置详解
在微服务架构中, 我们将系统拆分成了很多服务单元,各个服务之间通过远程调用的方式执行,这样就有可能因为网络原因或其他原因出现调用故障或延迟,而这些问题会直接导致调用方的对外服务也出现延迟,若此时调用方的请求不断增加, 最后就会因等待出现故障的依赖方响应形成任务积压,最终导致自身服务的瘫痪。...原创 2020-08-11 17:22:15 · 1169 阅读 · 0 评论 -
Spring Cloud Netflix 熔断组件 — Hystrix入门案例
Hystrix是由Netflix开源的一个延迟和容错库,用于隔离访问远程系统、服务或者第三方,防止级联失败,从而提高系统的可用性和容错性。Hystrix主要通过一下几点实现延迟或者容错:包裹请求:使用HystrixCommon的或者HystrixObservableCommond包裹对依赖的调用逻辑,每个命令在独立线程执行,即设计模式中的命令模式。跳闸机制:当某服务错误率超过一定阀值,Hystrix可以自动或者手动跳闸,停止请求该服务一段时间。资源隔离:Hystrix为每个依赖都维护了一个小型线原创 2020-08-10 16:53:19 · 340 阅读 · 0 评论 -
Spring Cloud Netflix 负载均衡组件—Ribbon 高级应用
上一部分,我们使用Ribbon通过Sping 提供的RestTemplate了解了Ribbon负载均衡的使用,那么是如何通过RestTemplate实现客户端的负载均衡的呢?本篇我们将详细分析Ribbon是如何使用RestTemplate进行负载均衡的,并且会介绍Ribbon的一些自定义的配置。在Spring-Web中,我们使用RestTemplate调用远程服务时,不涉及负载均衡,URI只需要是IP+端口即可,而在Ribbon中则是服务名,因此Ribbon需要根据服务名获取要调用的服务的IP +端口地原创 2020-08-07 20:11:30 · 337 阅读 · 1 评论 -
Spring Cloud Netflix 负载均衡组件—Ribbon 入门案例
Ribbon是Spring Cloud Netflix提供的负载均衡组件,提供了很多算法,比如轮询、随机等帮助我们根据某种机制向服务提供端发送请求。在Netflix中,Ribbon可以从Eureka Server中获取服务提供者地址列表,并且基于负载均衡算法,请求其中的一个服务实例。引入Ribbon的组件非常简单,我们只需要在项目中引入Ribbon,请使用groupID为org.springframework.cloud和artifact ID为spring-cloud-starter-netflix-原创 2020-07-31 18:25:01 · 209 阅读 · 2 评论 -
Sprng Cloud Netflix 服务注册与发现—Eureka 高级应用
Eureka APIEureka Server 不仅仅可以用于Spring Cloud 应用程序,也可以用于注册其他类型的服务,因为其专门提供了一组用于注册服务的API。该Spring Cloud版本的API在eureka-core jar包中的com.netflix.eureka.resource包中,如下表为 Eureka Server 提供的Restful风格的API: 请求方式 URL 说明 GET原创 2020-07-30 17:19:07 · 187 阅读 · 0 评论 -
Spring Cloud Netflix 服务注册与发现—Eureka 配置详解
任何一个框架都必须有相应的配置才能够使得一系列的功能生效,Spring Cloud也不例外,虽然Spring Boot的使用使得我们省去了很多繁琐的Bean配置,但是当我们使用一些特定的功能时,我们不得不做Bean的属性配置。Eureka Server也同样需要配置Bean的一些属性才能让功能正常使用。总得来说Eureka 注册中心有三类配置:一是Eureka实例配置,而是Eureka Server配置、三是Eureka Client配置。Eureka Server 配置Eureka Server的原创 2020-07-29 19:32:39 · 395 阅读 · 0 评论 -
Spring Cloud Netflix 服务注册与发现 — Eureka 入门案例
Spring Cloud Netflix是Spring Cloud集成Netflix开源分布式组件所给出的一套微服务方案。包括注册中心(Eureka),Hystrix(熔断器)、Zuul(网关路由)、Archaius(配置管理)、Ribbon(负载均衡)、Turbine(监控)、Feign(声明式调用)等组件。本篇我们介绍Spring Cloud Netflix组件中的Eureka组件。Eureka是Netflix开源的服务发现组件,本身是一个基于REST的服务。它包含Server和Client两部分。原创 2020-07-29 14:59:26 · 192 阅读 · 0 评论 -
Spring Cloud Alibaba Nacos之服务注册与发现
Spring Cloud Alibaba是阿里巴巴为分布式开发提供的一站式解决方案,它包含了分布式开发所需的一切组件。其底层通信采用很多人都熟悉的Dubbo框架,并且提供了分布式事务,新的服务注册与发现模块等组件,简单的说Spring Cloud AliBaba就是Alibaba将原有组件整个Spring Boot与Spring Cloud之后的产物,在使用的过程中,我们只需要引入starter包,并且加入少许的配置即可以开发出分布式应用。本篇我们将讲述如何使用Spring Cloud Alibaba服务的原创 2020-08-20 20:07:24 · 415 阅读 · 0 评论 -
微服务架构中的问题以及解决方案
在单体架构时,项目的部署、修改都很简单,一旦服务器宕机,则整个服务都不可用。而在微服务中,一个服务可能部署在好几百甚至成千上万台节点上,我们如何管理这些节点的服务,调用服务时,该调用用那一台节点机上的服务,如果调用的服务出故障怎么办,如何监控服务的调用链路等等很多的问题,本篇我们会介绍微服务架构下遇到的问题,以及Spring Cloud给出的解决方案。配置中心为何需要配置中心,在微服务中,一个服务可能部署N多个节点,如果需要修改服务中的一个配置,难道我们要去手动修改成百上千个节点?我想就算是十几个或原创 2020-07-24 20:56:20 · 2536 阅读 · 0 评论 -
微服务与SOA以及服务间通讯协议
说到微服务,就一定会想到微服务、分布式、集群、SOA、SOAP、restful、Http、RPC等相关概念,而这些概念都一些界限都非常的模式,很难理清楚确切的概念,本篇主要是介绍我对微服务中常遇到的一些问题的理解,很多东西也是查看了很多书籍之后才有一个模糊的概念。分布式与集群首先说是分布式与集群的概念,关于分布式比较官方的术语就是一组不同且有相互关联的组件分布在网络计算机上,并且仅仅通过消息传递来通信并协调行动。而集群则是将同一种组件分布在网络计算机上。它们之间的区别在于是否是同一组件(服务)的部署原创 2020-07-24 20:56:02 · 1715 阅读 · 0 评论 -
微服务之Spring Cloud 解决方案
当前Spring Cloud几乎成了微服务的代名词,只要一提到Spring Cloud,必定会想到微服务,而一旦提到微服务必定会提到Spring Cloud,那么Spring Cloud的定位到底是什么呢。官方是这样定义Spring Cloud的:Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理、服务发现、熔断机制、智能路由、微代理、控制总线、一次性令牌、全局锁、leadership 选举、分布式sessions、群集状态)。开发人员使用SpringCloud可.原创 2020-07-24 20:56:39 · 416 阅读 · 1 评论 -
大型级网站架构演变与变迁
大型网站都是从小型网站发展而来,架构也是一样。任何一个大型网站的架构都不是从一开始都是一层不变的,而是随着用户量和数据量的不断增加不断演进的结果。比如腾讯最初是靠ICQ起家,而阿里最初则是使用LAMP架构模式。了解大型网站的架构变迁更有助于我们了解微服务的由来。单一应用架构在网站建立之初,可能并没有特别多的用户,我们仅仅用一个服务器就可以满足需求了,这个时候我们将所有业务打成一个war包,与数据库一起部署在一台机器上。如下图为最初时期的单一应用架构:应用于数据分离随着用户的增多,业务量.原创 2020-07-24 20:55:47 · 262 阅读 · 0 评论