SC中Eureka Server的HA和安全身份验证

摘要:在《跟我学Spring Cloud》中的上一篇文章中简单介绍了使用Eureka实现服务的注册与发现。在这篇文章中主要介绍一下Eureka Server注册中心的HA以及Eureka Server的身份验证。

查看更多

使用Spring Cloud Eureka实现服务注册与发现

摘要:由于目前,网上的Spring Cloud的学习的案列,比较凌乱而且没有形成整个体系,因此特开一个专题为跟我学Spring Cloud,希望帮助到有需要的人。本文主要介绍如何使用Spring Cloud中的Eureka组件快速实现微服务的服务注册与发现。至于安全模式和Eureka Server的HA,后面的文章会详细介绍。如果您觉得,有想了解的内容,参与评论留言。

查看更多

HashMap多线程死循环问题

摘要:一直都知道Java HashMap使用不当会导致CPU 达到100%的线上故障,以及怎么造成的,怎么在使用过程中进行规避,由于时间的关系。最近整理如本文所示。

一.HashMap出现死循环原因

1.1 什么是线程安全

多个线程访问某一个类(对象和方法)时,这个类的对象或方法都能始终表现出正确的行为或者我们想要的结果,我们就认为其是线程安全的,否则非线程安全。我们都知道HashMap是非线程安全的,那怎么使用HashMap会导致CPU占用率达到100%。

查看更多

Eclipse for Mac 快捷键

摘要:本文主要介绍了Mac下Eclipse的常用快捷键,开发环境切换到Mac下后原来Window下的快捷键很大一部分是不相容的,一方面不熟悉快捷键会导致开发效率明显降低,另一方面频繁录入错误的快捷键IDE也一脸懵逼,方便速查记录如下,尤其像我习惯了Eclipse IDE。

查看更多

数据库连性池性能测试(hikariCP,druid,tomcat-jdbc,dbcp,c3p0)

摘要: 本文根据唯品会中间件团队对外的测试报告整理,用于学习记录版权归原作者所有。主要是对这hikariCP,druid,tomcat-jdbc,dbcp,c3p0几种连接池的详细的功能和性能测试对比,通过这次测试对目前主流的一些连接池做一个全面的对比,从而给业务系统一个最佳的推荐。而唯品会venus-data支持三种连接池DBCP、C3P0、DRUID,其中C3P0作为默认的连接池。因此需要针对现状,研发一种分布式数据库连接池。

查看更多

爱油科技基于SpringCloud的微服务实践

爱油科技基于SpringCloud的微服务实践

个人简介

刘思贤(微博@starlight36),爱油科技架构师、PMP。主要负责业务平台架构设计,DevOps实施和研发过程持续改进等,关注领域驱动设计与微服务、建设高效团队和工程师文化培养。

摘要

本次分享主要介绍了爱油科技基于Docker和Spring Cloud将整体业务微服务化的一些实践经验,主要包括:

  • 微服务架构的分层和框架选型
  • 服务发现和配置管理
  • 服务集成和服务质量保证
  • 基于领域驱动设计
  • 实施DevOps

    查看更多

Spring Cloud Eureka服务下线(Cancel)源码分析

摘要:在本篇文章中主要对Eureka的Cancel(服务下线)进行源码分析,在Service Provider服务shut down的时候,需要及时通知Eureka Server把自己剔除,从而避免其它客户端调用已经下线的服务,导致服务不可用。

Cancel(服务下线)

概述

在Service Provider服务shut down的时候,需要及时通知Eureka Server把自己剔除,从而避免客户端调用已经下线的服务。

服务提供者端源码分析

  1. 在eureka-client-1.4.1中的com.netflix.discovery.DiscoveryClient中shutdown()的867行。

    查看更多

Spring Cloud Eureka服务续约(Renew)源码分析

摘要:在本篇文章中主要对Eureka的Renew(服务续约),从服务提供者发起续约请求开始分析,通过阅读源码和画时序图的方式,展示Eureka服务续约的整个生命周期。服务续约主要是把服务续约的信息更新到自身的Eureka Server中,然后再同步到其它Eureka Server中。

Renew(服务续约)

概述

Renew(服务续约)操作由Service Provider定期调用,类似于heartbeat。目的是隔一段时间Service Provider调用接口,告诉Eureka Server它还活着没挂,不要把它T了。通俗的说就是它们两之间的心跳检测,避免服务提供者被剔除掉。
请参考:Spring Cloud Eureka名词解释

查看更多

基础架构及中间件体系概述

摘要: 本文主要是记录自己对基础架构职责和中间件技术体系理解的,渐进式理解记录。

一.基础架构职责

  • 设计和开发新一代的基础组件,为重构项目提供技术平台
  • 设计和构建统一的应用开发框架,提高应用开发效率和质量
  • 建立统一的应用构建标准,为实现对应用的管理,监控和治理的自动化建立基础
  • 评估和引进各种国外先进技术,提高公司平台的技术水准
  • 建立公司的开源项目,对内部开发的含金量高的项目实现开源,以提高公司的知名度

查看更多

Spring Cloud中@EnableEurekaClient源码分析

摘要:在这篇文章中主要介绍一下Spring Cloud中的@EnableEurekaClient注解,从源码的角度分析是如何work的,让大家能了解Spring Cloud如何通过@EnableEurekaClient注解对NetFlix Eureka Client进行封装为它所用。

NetFlix Eureka client简介

NetFlix Eureka client

Eureka client 负责与Eureka Server 配合向外提供注册与发现服务接口。首先看下eureka client是怎么定义,Netflix的 eureka client的行为在LookupService中定义,Lookup service for finding active instances,定义了,从outline中能看到起“规定”了如下几个最基本的方法。
服务发现必须实现的基本类:com.netflix.discovery.shared.LookupService,可以自行查看源码。

Eureka client与Spring Cloud类关系

Eureka client与Spring Cloud Eureka Client类图,如下所示:
类关系图
在上图中,我加了前缀,带有S的是Spring Cloud封装的,带有N是NetFlix原生的。

查看更多

使用Java Signal将应用程序从LVS中摘除

摘要:本文主要介绍了,如何使用Java Signal和SignalHandler实现,通过Linux 命令实现kill -s BUS pid和kill -s USR2 pid实现不kill应用进程,把应用程序从LVS中摘除。而不是通过Reset 请求调用。由于只允许本机操作,所以可选方案三种:1.reset 调用更改Status,2.Linux 信号量传递给Java程序 3.配置中心或者XX管理系统后台权限管理,调用reset服务。从安全性和快速解决需求的角度考虑使用Linux 信号量传递给Java程序方案。

Java Signal 概述

信号简介

信号是在软件层次上对中断机制的一种模拟,在原理上,一个进程收到一个信号与处理器收到一个中断请求可以说是一样的。通俗来讲,信号就是进程间的一种异步通信机制。
典型的例子:kill -s SIGKILL pid (即kill -9 pid) 立即杀死指定pid的进程。
在上面这个例子中,SIGKILL就是往pid进程发送的信号。

查看更多

Spring Cloud Eureka服务注册源码分析

摘要:在上一篇中,介绍了Eureka的相关的知识,解释了Eureka为什么适合做服务发现和注册。接下来,在本篇文章将通过源码分析的方式,看一下Eureka是怎么work的。本章主要介绍Eureka的服务注册。那eureka client如何将本地服务的注册信息发送到远端的注册服务器eureka server上。通过下面的源码分析,看出Eureka Client的定时任务调用Eureka Server的REST接口,而Eureka接收到调用请求后会处理服务的注册以及Eureka Server中的数据同步的问题。

服务注册

服务注册,想必大家并不陌生,就是服务提供者启动的时候,把自己提供的服务信息,例如 服务名,IP,端口号,版本号等信息注册到注册中心,比如注册到ZK中。那eureka client如何将本地服务的注册信息发送到远端的注册服务器eureka server上。通过下面的源码分析,看出服务注册可以认为是Eureka client自己完成,不需要服务本身来关心。

Eureka Client的定时任务调用Eureka Server的提供接口

实现思路其实也挺简单,在com.netflix.discovery.DiscoveryClient启动的时候,会初始化一个定时任务,定时的把本地的服务配置信息,即需要注册到远端的服务信息自动刷新到注册服务器上。
首先看一下Eureka的代码,在spring-cloud-netflix-eureka-server工程中可以找到这个依赖eureka-client-1.4.11.jar查看代码可以看到,
com.netflix.discovery.DiscoveryClient.java中的1240行可以看到Initializes all scheduled tasks,在1277行,可以看到InstanceInfoReplicator定时任务。

查看更多