来源:Redislabs作者:Martin Forstner 翻译:Kevin (公众号:中间件小哥) 以我的经验,将某些应用拆分成更小的.松耦合的.可协同工作的独立逻辑业务服务会更易于构建和维护.这些服务(也被称为微服务)各自管理自己的技术栈,因此很容易独立于其他服务进行开发和部署.前人已经总结了很多关于使用这种架构设计的好处,在此我就不再赘述了.关于这种设计,有一个方面我一直在重点关注,因为如果没有它,将会导致一些有趣的挑战.虽然构建松耦合的微服务是一个非常轻量级和快速的开发过程,但是这些服…
如何使用REDIS进行微服务间通讯 尽可能避免service - to - service通信.为此,需要在服务之间推一个消息队列.回顾一下微服务的概念小型的,非常集中的进程彼此独立运行并且易于维护,轻松的沟通,简单的水平扩展, 能够在不影响平台其余部分的情况下工作和更改单个服务.Redis提供了生产/消费模式和发布/订阅模式.生产消费模式适合那些一对一的,因为只能一个消费者去消费.发布订阅模式,只要订阅了某个频道,所有订阅者都能收到这频道的消息,然后来对此进行消费.…
本文已收录 https://github.com/lkxiaolou/lkxiaolou 欢迎star. 前言 说到redis,可能大家的脑海中蹦出的关键词是:NoSQL.KV.高性能.缓存等.但今天的文章从另一个角度--微服务来展开. 这篇文章的起因也是源自一次面试经历,在面试一位来自陌陌的候选人(就是那个交友的陌陌)时,他提到一点让我觉得很有意思,他说redis在陌陌被使用的非常广泛,除了常规的缓存外,某些场景下也当NoSQL数据库来使用,还用redis作为微服务的注册中心,甚至连RPC的调…
一:Redis 1,redis是一个高性能的键值对存储方式的数据库,同时还提供list,set,zset,hash等数据结构的存储. 2,Redis运行在内存中但是可以持久化到磁盘,所以在对不同数据集进行高速读写时需要权衡内存,因为数据量不能大于硬件内存.在内存数据库方面的另一个优点是,相比在磁盘上相同的复杂的数据结构,在内存中操作起来非常简单,这样Redis可以做很多内部复杂性很强的事情.同时,在磁盘格式方面他们是紧凑的以追加的方式产生的,因为他们并不需要进行随机访问.丰富的特性 – Redi…
前言 feign 是目前微服务间通信的主流方式,是springCloud中一个非常重要的组件.他涉及到了负载均衡.限流等组件.真正意义上掌握了feign可以说就掌握了微服务. 一.feign的使用 feign 的使用和dubbo的使用本质上非常相似.dubbo的理念是:像调用本地方法一样调用远程方法.那么套在feign上同样适用:像调用本地接口一样调用远程接口. 使用feign只需要2步:定义一个接口并用FeignClient注解说明接口所在服务和路径,服务启动类上添加@EnableFeignC…
前言 上一篇我们知道了feign调用实现负载均衡是通过集成ribbon实现的.也较为详细的了解到了集成的过程.现在我们看一下ribbo是如何实现负载均衡的.写到这里我尚未去阅读源代码,我在这里盲猜一下: 他肯定是有一个从注册中心拉取配置的模块,一个选择调用服务的模块.然后我们就带着这样的指导思想去看源码. 一.ribbo是何时从eurake加载的服务列表? 从上一篇文章我们知道,feign调用实际上调用的是AbstractLoadBalancerAwareClient.executeWithLo…
作为Spring Cloud的子项目之一,Spring Cloud OpenFeign以将OpenFeign集成到Spring Boot应用中的方式,为微服务架构下服务之间的调用提供了解决方案.首先,利用了OpenFeign的声明式方式定义Web服务客户端:其次还更进一步,通过集成Ribbon或Eureka实现负载均衡的HTTP客户端.   OpenFeign 可以使消费者将提供者提供的服务名伪装为接口进行消费,消费者只需使用"Service 接口+ 注解"的方式.即可直接调用 Ser…
前言 书接上文,feign接口是如何注册到容器想必已然清楚,现在我们着重关心一个问题,feign调用服务的时候是如何抉择的?上一篇主要是从读源码的角度入手,后续将会逐步从软件构架方面进行剖析. 一.ReflectiveFeign.FeignInvocationHandler 从上文知道feign接口调用实质上是调用的对应的动态代理接口的InvocationHandler,跟踪源码发现默认的InvocationHandler实现就是FeignInvocationHandler.现在我们看一下这个F…
前言 由上文我们知道针对某一个Feign接口,我们可以给他设置特定的配置类.那如果现在有一个服务,我们只想对A服务配置一个拦截器拦截请求而不影响其他服务,那应该怎么做呢? 一.feign接口配置 由前面的文章我们知道了feign的代理过程以及调用过程.现在我们看一下feign都有哪些配置? @FeignClient可配置属性列表 属性 值类型 含义 value string 服务名,无论是否有URL,服务名称都不能为空,它可以设置为属性值${server_name}这种形式 name strin…
近两年微服务架构流行,主流互联网厂商内部都已经微服务化,初创企业虽然技术积淀不行,但也通过各种开源工具拥抱微服务.再加上容器技术赋能,Kubernetes又添了一把火,微服务架构已然成为当前软件架构设计的首选.但微服务化易弄,服务治理难搞! 一.微服务的“痛点” 微服务化没有统一标准,多数是进行业务领域垂直切分,业务按一定的粒度划分职责,并形成清晰.职责单一的服务接口,这样每一块规划为一个微服务.微服务之间的通信方案相对成熟,开源领域选择较多的有RPC或RESTful API方案,比如:gRPC…