微服务
文章平均质量分 70
司青-已停止更新
本博客已停更;
展开
-
使用Kafka时一定要注意防止消费速度过慢触发rebalance而导致的重复消费
在Java应用中,我们往往会使用spring-kafka组件简单的设置一下group_id, topic就开始消费消息了,其实这样会埋下巨大的安全隐患,即当消费速度过慢时有可能会触发rebalance, 这批消息被分配到另一个消费者,然后新的消费者还会消费过慢,再次rebalance, 这样一直恶性循环下去。发生这种情况最明显的标志就是日志里能看到CommitFailedException异常,然...原创 2020-04-02 22:26:06 · 7388 阅读 · 1 评论 -
Spring Cloud: 使用kill命令优雅关闭微服务, 解决退出时Eureka取消注册操作耗时过长的坑
关于Spring Cloud服务优雅关闭的方案有很多种了,这里介绍一下使用kill命令优雅关闭的方案,并解决会出现的问题。所谓的优雅指两方面,一是程序在退出时要主动向Eureka取消注册自己,二是完成资源清理工作。比如我的程序里用到了线程池来异步执行一些任务,如果退出时不做清理,那么就有异步任务被异常中断导致业务数据不一致的风险。首先我们不能使用kill -9。如果加了-9,那么系统就不会给J...原创 2018-05-23 11:40:52 · 11191 阅读 · 8 评论 -
Spring Cloud Netflix Eureka: 多网卡环境下Eureka服务注册IP选择问题
问题场景服务器上分别配置了eth0, eth1和eth2三块网卡,只有eth1的地址是可供其它机器访问,eth0和eth2的 IP 无效。在这种情况下,服务注册时Eureka Client会自动选择eth0作为服务ip, 导致其它服务无法调用。问题原因由于官方并没有写明Eureka Client探测本机IP的逻辑,所以只能翻阅源代码。Eureka Client的源码在eureka-client模块下原创 2016-11-11 11:08:38 · 37942 阅读 · 4 评论 -
Spring Cloud Eureka: 如何指定Zone
有坑。 先说结论:如果想给当前服务指定属于哪个zone, 使用eureka.instance.metadata-map.zone=myzone属性是无效的,而应该使用:eureka.client.availabilityZones.beijing=myzone # beijing是region同时指定region:eureka.client.region=beijing至于原因,可以在Eureka原创 2017-04-25 16:47:52 · 12057 阅读 · 2 评论 -
使用Spring Cloud Security OAuth2搭建授权服务
Spring Cloud Security OAuth2 是 Spring 对 OAuth2 的开源实现,优点是能与Spring Cloud技术线无缝集成,如果全部使用默认配置,开发者只需要添加注解就能完成 OAuth2 授权服务的搭建。添加依赖授权服务是基于Spring Security的,因此需要在项目中引入两个依赖: <dependency> <groupId>org.spri原创 2016-09-14 17:58:03 · 131332 阅读 · 88 评论 -
使用Spring Cloud Netflix技术栈实施微服务架构
前言系统一旦走向分布式,其复杂程度成倍增长,传统单体应用只考虑业务逻辑的开发方式已经不再适用。正因其复杂性,目前只有业务需求大的大型互联网公司才会(被迫)采用,而且需要投入大量的技术力量来开发基础设施,也造成了小公司“用不起”分布式架构的情况。现在这一局面正在逐渐被打破,因为Netflix开源了其经过实战考验的一系列基础设施构件,加上Spring Cloud的大力支持,开发分布式系统已经不再像以前那原创 2016-08-14 14:46:47 · 32207 阅读 · 8 评论 -
Spring Cloud Netflix负载均衡组件Ribbon介绍
LB方案分类目前主流的LB方案可分成两类:一种是集中式LB, 即在服务的消费方和提供方之间使用独立的LB设施(可以是硬件,如F5, 也可以是软件,如nginx), 由该设施负责把访问请求通过某种策略转发至服务的提供方;另一种是进程内LB,将LB逻辑集成到消费方,消费方从服务注册中心获知有哪些地址可用,然后自己再从这些地址中选择出一个合适的服务器。Ribbon就属于后者。Ribbon的主要组件与工作流原创 2017-01-01 17:57:11 · 4930 阅读 · 0 评论 -
使用Spring Cloud Feign作为HTTP客户端调用远程HTTP服务
在Spring Cloud Netflix栈中,各个微服务都是以HTTP接口的形式暴露自身服务的,因此在调用远程服务时就必须使用HTTP客户端。我们可以使用JDK原生的URLConnection、Apache的Http Client、Netty的异步HTTP Client, Spring的RestTemplate。但是,用起来最方便、最优雅的还是要属Feign了。Feign简介Feign是一种声明式原创 2016-09-06 14:50:02 · 155554 阅读 · 52 评论 -
微服务基础设施之服务注册中心: Spring Cloud Eureka
对服务注册中心的需求在微服务架构中,由于每一个服务的粒度相对传统SOA来说要小的多,所以服务的数量会成倍增加。这时如果有效管理服务的注册信息就尤为重要。我们对服务注册中心的期望主要有以下几条:简单易用:最好对开发者透明高可用:几台注册中心坏掉不会导致整个服务瘫痪,注册服务整体持续可用避免跨越机房调用:最好调用优先同一个机房的服务以减少网络延迟跨语言:允许开发者使用多种编程语言构建微服务Ne原创 2016-08-11 12:10:29 · 19726 阅读 · 2 评论 -
Spring Cloud(Netflix) Feign: 以Dubbo暴露服务的方式使用Feign
需求场景在微服务架构中,服务的请求者以何种方式调用远程服务是一项核心问题。在Spring Cloud(Netflix)技术栈中,每个微服务是以HTTP REST接口的形式暴露的,这样在执行远程调用时,正常情况下需要使用一个HTTP客户端,然后向服务发起HTTP请求。实际上,如果使用Netflix的Feign作为Http Client的话,我们就可以做到像Dubbo一样,服务的调用者直接调用接口方法调原创 2016-08-11 11:18:29 · 22497 阅读 · 4 评论 -
Spring Cloud与分布式系统
本文不是讲解如何使用Spring Cloud的教程,而是探讨Spring Cloud是什么,以及它诞生的背景和意义。背景2008年以后,国内互联网行业飞速发展,我们对软件系统的需求已经不再是过去”能用就行”这种很low的档次了,像抢红包、双十一这样的活动不断逼迫我们去突破软件系统的性能上限,传统的IT企业”能用就行”的开发思想已经不能满足互联网高并发、大流量的性能要求。系统架构走向分布式已经是服务器原创 2016-07-15 17:26:57 · 17980 阅读 · 18 评论