自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

陌上轩客

技术领域:涉猎Java、Go、Python、Groovy 等语言,高性能、高并发、高可用、异步与消息中间件、缓存与数据库、分布式与微服务、容器和自动化等领域; 兴趣爱好:篮球,骑行,读书,发呆; 职业规划:励志成为一名出色的服务器端系统架构师。

原创 深入剖析Linux IO原理和几种零拷贝机制的实现

前言零拷贝(Zero-copy)技术指在计算机执行操作时,CPU 不需要先将数据从一个内存区域复制到另一个内存区域,从而可以减少上下文切换以及 CPU 的拷贝时间。它的作用是在数据报从网络设备到用户程序空间传递的过程中,减少数据拷贝次数,减少系统调用,实现 CPU 的零参与,彻底消除 CPU 在这方面的负载。实现零拷贝用到的最主要技术是 DMA 数据传输技术和内存区域映射技术。...

2019-09-20 22:26:07 171

原创 干货:一千行 MySQL 学习笔记,值得大家收藏!

原文地址:https://shockerli.net/post/1000-line-mysql-note/作者:格物非常不错的总结,强烈建议保存下来,需要的时候看一看。基本操作/* Windows服务 */-- 启动MySQL net start mysql-- 创建Windows服务 sc create mysql binPath= mysqld_...

2019-09-15 22:34:26 130

原创 详解Go语言的内存模型及堆的分配管理

前言这篇文章主要介绍Go内存分配和Go内存管理,会轻微涉及内存申请和释放,以及Go垃圾回收。从非常宏观的角度看,Go的内存管理就是下图这个样子,我们今天主要关注其中标红的部分。Go这门语言抛弃了C/C++中的开发者管理内存的方式,实现了主动申请与主动释放管理,增加了逃逸分析和GC,将开发者从内存管理中释放出来,让开发者有更多的精力去关注软...

2019-08-06 15:52:00 78

原创 Redis 单线程却能支撑高并发

原文:https://draveness.me/redis-io-multiplexing最近在看 UNIX 网络编程并研究了一下 Redis 的实现,感觉 Redis 的源代码十分适合阅读和分析,其中 I/O 多路复用(mutiplexing)部分的实现非常干净和优雅,在这里想对这部分的内容进行简单的整理。几种 I/O 模型为什么 Redis ...

2019-06-09 08:11:00 140

原创 浅谈三种API设计风格RPC、REST、GraphQL

前言Web API设计其实是一个挺重要的设计话题,许多公司都会有公司层面的Web API设计规范,几乎所有的项目在详细设计阶段都会进行API设计,项目开发后都会有一份API文档供测试和联调。本文尝试根据自己的理解总结一下目前常见的四种API设计风格以及设计考虑点。正文1. RPC这是最常见的方式,RPC说的是本地调用远程的方法,面向的...

2019-02-17 19:56:00 2995

原创 Spring Cloud实战系列(十) - 单点登录JWT与Spring Security OAuth 2.0

前言通过 JWT 配合 Spring Security OAuth2 使用的方式,可以避免 每次请求 都 远程调度 认证授权服务。资源服务器 只需要从 授权服务器 验证一次,返回 JWT。返回的 JWT 包含了 用户 的所有信息,包括 权限信息。正文1. 什么是JWTJSON Web Token(JWT)是一种开放的标准(RFC 7519),JWT 定义了一种 紧凑 且 自包含 的标准,旨...

2019-02-11 11:14:36 7016 6

原创 Spring Cloud实战系列(九) - 服务授权Spring Cloud OAuth 2.0

前言OAuth 2.0 是介于 用户资源 和 第三方应用 之间的一个 中间层,它把 资源 和 第三方应用 隔开,使得 第三方应用 无法直接访问 资源,从而起到 保护资源 的作用。为了访问这种 受限资源,第三方应用(客户端)在访问的时候需要 提供凭证。正文1. OAuth 2.0简介在 认证 与 授权 的过程中,主要包含以下 3 种角色:服务提供方: Authorization Ser...

2019-02-11 11:12:23 2494 3

原创 Spring Cloud实战系列(八) - 微服务监控Spring Boot Admin

前言Spring Boot Admin 是一个 管理 和 监控 Spring Boot 应用程序 的一款开源软件。Spring Boot Admin 分为 Server 端和 Client 端,Spring Boot Admin UI 部分使用 AngularJS 将数据展示在前端。正文1. 项目结构Eureka Server:服务注册中心,端口号为 8761。Admin Ser...

2019-02-11 11:10:03 388 1

原创 Spring Cloud实战系列(七) - 服务链路追踪Spring Cloud Sleuth

title: Spring Cloud实战系列(七) - 服务链路追踪Spring Cloud Sleuthtags:Spring CloudSpring Cloud SleuthZipkin服务链路追踪categories:微服务框架系列author: Vainlgorydate: 2019-01-29 22:20:00前言Spring Cloud Sleuth 的...

2019-02-11 11:06:08 254

原创 Spring Cloud实战系列(六) - 分布式配置中心Spring Cloud Config

前言在 分布式系统 中,由于服务数量巨多,为了方便 服务配置文件 的 统一管理 和 实时更新,所以需要 分布式配置中心 组件。 Spring Cloud 提供的 分布式配置中心 组件是 Spring Cloud Config,它支持将 配置服务 放在配置服务的 内存 中(即 本地),也支持放在 远程 Git 仓库中。Spring Cloud Config 提供了两个角色,其一是 Config S...

2019-02-11 11:04:27 140

原创 Spring Cloud实战系列(五) - 服务网关Zuul

前言Zuul 是 Netflix 开源的一个 API Gateway 服务器, 本质上是一个基于 Servlet 的 Web 应用。在微服务框架 Spring Cloud 中,Zuul 被作为 服务的网关,负责对 请求 进行一些 预处理,比如:安全验证、动态路由、负载分配 等等。正文1. 路由网关在前面几篇的基础上,新建一个 service-zuul 的项目模块,配置 pom.xml 如下...

2019-02-11 11:02:42 178

原创 Spring Cloud实战系列(四) - 熔断器Hystrix

前言在微服务框架 Spring Cloud 中,可以用 RestTemplate 配合 Ribbon 或 Feign 实现 服务与服务 之间的 相互调用。为了保证服务的 高可用,单个服务 通常会采用 集群部署。由于 网络原因,服务并不能保证 100% 的 可用性,如果 单个服务 出现问题,调用这个服务就会出现 线程阻塞,此时若有 大量的请求 涌入,Servlet 容器的 线程资源 会被耗尽,导...

2019-02-11 11:01:05 153

原创 Spring Cloud实战系列(三) - 声明式客户端Feign

title: Spring Cloud实战系列(三) - 声明式客户端Feigntags:Spring CloudFeign负载均衡categories:微服务框架系列author: Vainlgorydate: 2019-01-25 12:21:00前言上一篇文章,讲述了如何通过 RestTemplate 配合 Ribbon 去消费服务。Feign 是一个 声明式 的...

2019-02-11 10:58:34 152

原创 Spring Cloud实战系列(二) - 客户端调用Rest + Ribbon

title: Spring Cloud实战系列(二) - 客户端调用Rest + Ribbontags:Spring CloudRibbon负载均衡categories:微服务框架系列author: Vainlgorydate: 2019-01-24 09:21:00前言上一篇文章我们介绍了 Eureka 服务注册中心 的搭建,这篇文章介绍一下如何使用 Eureka 服...

2019-02-11 10:56:47 155

原创 Spring Cloud实战系列(一) - 服务注册与发现Eureka

title: Spring Cloud实战系列(一) - 服务注册与发现Eurekatags:Spring CloudEureka服务注册服务发现categories:微服务框架系列author: Vainlgorydate: 2019-01-22 09:11:00前言Spring Cloud 封装了 Netflix 公司开发的 Eureka 模块来实现 服务注册和发...

2019-02-11 10:54:38 234 1

原创 Spring Cloud实战系列(十) - 单点登录JWT与Spring Security OAuth

前言通过 JWT 配合 Spring Security OAuth2 使用的方式,可以避免 每次请求 都 远程调度 认证授权服务。资源服务器 只需要从 授权服务器 验证一次,返回 JWT。返回的 JWT 包含了 用户 的所有信息,包括 权限信息。正文1. 什么是JWTJSON Web Token(JWT)是一种开放的标准(RFC 7519),JWT...

2019-02-10 10:11:00 768 1

原创 Spring Cloud实战系列(九) - 服务认证授权Spring Cloud OAuth 2.0

前言OAuth 2.0 是介于 用户资源 和 第三方应用 之间的一个 中间层,它把 资源 和 第三方应用 隔开,使得 第三方应用 无法直接访问 资源,从而起到 保护资源 的作用。为了访问这种 受限资源,第三方应用(客户端)在访问的时候需要 提供凭证。正文1. OAuth 2.0简介在 认证 与 授权 的过程中,主要包含以下 3 种角色:服务提供...

2019-02-07 09:19:00 212

原创 Spring Cloud实战系列(八) - 微服务监控Spring Boot Admin

前言Spring Boot Admin 是一个 管理 和 监控 Spring Boot 应用程序 的一款开源软件。Spring Boot Admin 分为 Server 端和 Client 端,Spring Boot Admin UI 部分使用 AngularJS 将数据展示在前端。正文1. 项目结构Eureka Server:服务注册中心,端口...

2019-02-05 16:24:00 64

原创 Spring Cloud实战系列(七) - 服务链路追踪Spring Cloud Sleuth

前言Spring Cloud Sleuth 的主要功能就是为 分布式系统 提供 追踪解决方案,并且兼容支持了 Zipkin,只需要在 pom.xml 文件中引入相应的 依赖 即可。本文主要讲述 服务追踪组件 Zipkin,Spring Cloud Sleuth 集成了 Zipkin 组件。它主要用于 聚集 来自各个 异构系统 的 实时监控数据,用来追踪 ...

2019-02-05 16:23:00 62

原创 Spring Cloud实战系列(六) - 分布式配置中心Spring Cloud Config

前言在 分布式系统 中,由于服务数量巨多,为了方便 服务配置文件 的 统一管理 和 实时更新,所以需要 分布式配置中心 组件。 Spring Cloud 提供的 分布式配置中心 组件是 Spring Cloud Config,它支持将 配置服务 放在配置服务的 内存 中(即 本地),也支持放在 远程 Git 仓库中。Spring Cloud Config...

2019-02-05 16:22:00 58

原创 Spring Cloud实战系列(五) - 服务网关Zuul

前言Zuul 是 Netflix 开源的一个 API Gateway 服务器, 本质上是一个基于 Servlet 的 Web 应用。在微服务框架 Spring Cloud 中,Zuul 被作为 服务的网关,负责对 请求 进行一些 预处理,比如:安全验证、动态路由、负载分配 等等。正文1. 路由网关在前面几篇的基础上,新建一个 service-zuu...

2019-02-05 16:21:00 47

原创 Spring Cloud实战系列(四) - 熔断器Hystrix

前言在微服务框架 Spring Cloud 中,可以用 RestTemplate 配合 Ribbon 或 Feign 实现 服务与服务 之间的 相互调用。为了保证服务的 高可用,单个服务 通常会采用 集群部署。由于 网络原因,服务并不能保证 100% 的 可用性,如果 单个服务 出现问题,调用这个服务就会出现 线程阻塞,此时若有 大量的请求 涌入,Se...

2019-02-05 16:20:00 72

原创 Spring Cloud实战系列(三) - 声明式客户端Feign

前言上一篇文章,讲述了如何通过 RestTemplate 配合 Ribbon 去消费服务。Feign 是一个 声明式 的 HTTP 伪客户端,提供 面向接口 的 HTTP 客户端调用 编程。本文进一步讲如何通过 Feign 去消费服务。Feign 只需要创建一个 接口 并提供 注解 即可调用。Feign 具有 可插拔 的注解特性,可使用 Feign...

2019-02-05 16:19:00 60

原创 Spring Cloud实战系列(二) - 客户端调用Rest + Ribbon

前言上一篇文章我们介绍了 Eureka 服务注册中心 的搭建,这篇文章介绍一下如何使用 Eureka 服务注册中心,搭建一个简单的 服务端注册服务,由 客户端 通过 Ribbon 负载均衡 地去调用服务案例。正文1. 创建服务提供者创建一个 service-hi 的 Module,创建完成后的 pom.xml 如下:<?xml versio...

2019-02-05 16:18:00 47

原创 Spring Cloud实战系列(一) - 服务注册与发现Eureka

前言Spring Cloud 封装了 Netflix 公司开发的 Eureka 模块来实现 服务注册和发现。Eureka 采用了 C-S 的 设计架构。Eureka Server 作为 服务注册中心,系统中的 其他微服务,使用 Eureka 的 客户端 连接到 Eureka Server,并通过 心跳连接 检测服务的 存活状态。正文Eureka S...

2019-02-05 16:16:00 49

原创 深入剖析Redis系列(八) - Redis数据结构之集合

前言集合(set)类型也是用来保存多个 字符串元素,但和 列表类型 不一样的是,集合中 不允许有重复元素,并且集合中的元素是 无序的,不能通过 索引下标 获取元素。image如图所示,集合 user:1:follow 包含着 "it"、"music"、"his"、"sports" 四个元素,一个 集合 最多可以存储 2 ^ 32 -...

2019-01-31 22:33:00 22

原创 深入剖析Redis系列(七) - Redis数据结构之列表

前言列表(list)类型是用来存储多个 有序 的 字符串。在 Redis 中,可以对列表的 两端 进行 插入(push)和 弹出(pop)操作,还可以获取 指定范围 的 元素列表、获取 指定索引下标 的 元素 等。image列表 是一种比较 灵活 的 数据结构,它可以充当 栈 和 队列 的角色,在实际开发上有很多应用场景。如图所示,a、...

2019-01-31 22:32:00 91

原创 深入剖析Redis系列(六) - Redis数据结构之哈希

前言大部分编程语言都提供了 哈希(hash)类型,它们的叫法可能是 哈希、字典、关联数组。在 Redis 中,哈希类型 是指键值本身又是一个 键值对结构。image哈希 形如 value={ {field1,value1},...{fieldN,valueN} },Redis 键值对 和 哈希类型 二者的关系如图所示:imag...

2019-01-31 22:31:00 37

原创 深入剖析Redis系列(五) - Redis数据结构之字符串

前言字符串类型 是 Redis 最基础的数据结构。字符串类型 的值实际可以是 字符串(简单 和 复杂 的字符串,例如 JSON、XML)、数字(整数、浮点数),甚至是 二进制(图片、音频、视频),但是值最大不能超过 512MB。image正文1. 相关命令1.1. 常见命令1.1.1. 设置值set key value [ex ...

2019-01-31 22:31:00 99

原创 深入剖析Redis系列(四) - Redis数据结构与全局命令概述

前言Redis 提供了 5 种数据结构。理解每种数据结构的特点,对于 Redis 的 开发运维 非常重要,同时掌握 Redis 的 单线程命令处理 机制,会使 数据结构 和 命令 的选择事半功倍。image接下来的几篇文章,将从如下几个方面介绍 Redis 的几种数据结构,命令使用及其应用场景。预备知识:几个简单的 全局命令,数据结...

2019-01-31 22:30:00 29

原创 Apache Thrift系列详解(三) - 序列化机制

前言Thrift支持二进制,压缩格式,以及json格式数据的序列化和反序列化。开发人员可以更加灵活的选择协议的具体形式。协议是可自由扩展的,新版本的协议,完全兼容老的版本!正文数据交换格式简介当前流行的数据交换格式可以分为如下几类:(一) 自解析型序列化的数据包含完整的结构, 包含了field名称和value值。比如xml/json/java serizable,大百度的mcpack...

2018-09-22 18:23:53 641

原创 Apache Thrift系列详解(二) - 网络服务模型

前言Thrift提供的网络服务模型:单线程、多线程、事件驱动,从另一个角度划分为:阻塞服务模型、非阻塞服务模型。阻塞服务模型:TSimpleServer、TThreadPoolServer。非阻塞服务模型:TNonblockingServer、THsHaServer和TThreadedSelectorServer。TServer类的层次关系:正文TServerTSe...

2018-09-22 18:22:43 462

原创 Apache Thrift系列详解(一) - 概述与入门

前言Thrift是一个轻量级、跨语言的远程服务调用框架,最初由Facebook开发,后面进入Apache开源项目。它通过自身的IDL中间语言, 并借助代码生成引擎生成各种主流语言的RPC服务端/客户端模板代码。Thrift支持多种不同的编程语言,包括C++、Java、Python、PHP、Ruby等,本系列主要讲述基于Java语言的Thrift的配置方式和具体使用。正文Thrift的技术...

2018-09-22 18:21:08 3807

原创 Android异步框架RxJava 1.x系列(三) - 线程调度器Scheduler

前言RxJava 事件的发出和消费都在同一个线程,基于同步的观察者模式。观察者模式的核心是后台处理,前台回调的异步机制。要实现异步,需要引入 RxJava 的另一个概念 - 线程调度器 Scheduler。正文在不指定线程的情况下,RxJava 遵循的是线程不变的原则。即在哪个线程调用 subscribe() 方法,就在哪个线程生产事件;在哪个线程生产事件,就在哪个线程消费事件。如果需要...

2018-09-22 18:18:52 61

原创 Android异步框架RxJava 1.x系列(二) - 事件及事件序列转换原理

前言在介绍 RxJava 1.x 线程调度器之前,首先引入一个重要的概念 - 事件序列转换。RxJava 提供了对事件序列进行转换的支持,这是它的核心功能之一。正文1. 事件序列转换定义所谓转换,就是将事件序列中的对象或整个序列进行加工处理,转换成不同的事件或事件序列,有点类似 Java 1.8 中的流处理。2. 事件序列转换API首先看一个 map() 的例子:Observab...

2018-09-22 18:17:07 99

原创 Android异步框架RxJava 1.x系列(一) - 观察者模式及实现

前言RxJava 是一款基于 Java VM 实现的响应式编程扩展库 - 基于观察者模式的异步和事件处理框架。RxJava 官方目前同时维护了两个版本,分别是 1.x 和 2.x,区别是它们使用不同的 group id 和 namespaces。版本group idnamespacesv1.xio.reactivexio.reactivexv2.xio.r...

2018-09-22 18:14:40 103

原创 Java基础篇 - 强引用、弱引用、软引用和虚引用

前言Java执行GC判断对象是否存活有两种方式其中一种是引用计数。 引用计数:Java堆中每一个对象都有一个引用计数属性,引用每新增1次计数加1,引用每释放1次计数减1。在JDK 1.2以前的版本中,若一个对象不被任何变量引用,那么程序就无法再使用这个对象。也就是说,只有对象处于(reachable)可达状态,程序才能使用它。从JDK 1.2版本开始,对象的引用被划分为4...

2018-09-15 22:21:06 108

原创 聊聊Spring Reactor反应式编程

前言为了应对 高并发环境下 的服务端编程,微软提出了一个实现 异步编程 的方案 - Reactive Programming,中文名称 反应式编程。随后,其它技术也迅速地跟上了脚步,像 ES6 通过 Promise 引入了类似的异步编程方式。Java 社区也没有落后很多,Netflix 和 TypeSafe 公司提供了 RxJava 和 Akka Stream 技术,让 Java 平台也有了...

2018-09-15 22:18:09 1595

原创 一天一个设计模式(一) - 总体概述

前言最近在对设计模式进行了一系列总结,本文将给大家关于设计模式的一个整体的介绍。正文1. 定义设计模式是某类特定问题的代码设计解决方案,是一套代码设计的经验总结。2. 作用提高代码复用率,降低开发成本和周期提高代码可维护性、可拓展性使代码更加优雅,可读性更强让代码更容易被他人理解3. 设计原则在设计模式进行设计时需要遵循以下的面...

2018-09-14 23:07:00 51

原创 深入剖析Redis系列(三) - Redis集群模式搭建与原理详解

前言在 Redis 3.0 之前,使用 哨兵(sentinel)机制来监控各个节点之间的状态。Redis Cluster 是 Redis 的 分布式解决方案,在 3.0 版本正式推出,有效地解决了 Redis 在 分布式 方面的需求。当遇到 单机内存、并发、流量 等瓶颈时,可以采用 Cluster 架构方案达到 负载均衡 的目的。image...

2018-09-14 23:06:00 390

提示
确定要删除当前文章?
取消 删除