自定义博客皮肤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 等语言,高性能、高并发、高可用、异步与消息中间件、缓存与数据库、分布式与微服务、容器和自动化等领域; 兴趣爱好:篮球,骑行,读书,发呆; 职业规划:励志成为一名出色的服务器端系统架构师。

  • 博客(53)
  • 收藏
  • 关注

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

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

2018-09-22 18:23:53 1151

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

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

2018-09-22 18:22:43 1010

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

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

2018-09-22 18:21:08 9480

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

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

2018-09-22 18:18:52 174

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

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

2018-09-22 18:17:07 238

原创 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 325

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

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

2018-09-15 22:21:06 194

原创 聊聊Spring Reactor反应式编程

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

2018-09-15 22:18:09 2878 1

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

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

2018-09-14 23:07:00 142

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

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

2018-09-14 23:06:00 855

原创 深入剖析Redis系列(二) - Redis哨兵模式与高可用集群

前言Redis 的 主从复制 模式下,一旦 主节点 由于故障不能提供服务,需要手动将 从节点 晋升为 主节点,同时还要通知 客户端 更新 主节点地址,这种故障处理方式从一定程度上是无法接受的。Redis 2.8 以后提供了 Redis Sentinel 哨兵机制 来解决这个问题。image正文1. Redis高可用概述在 Web 服务...

2018-09-14 23:05:00 258

原创 深入剖析Redis系列(一) - Redis入门简介与主从搭建

前言Redis 是一种基于 键值对 的 NoSQL 数据库。与很多键值对数据库不同,Redis 提供了丰富的 值数据存储结构,包括 string(字符串)、hash(哈希)、list(列表)、set(集合)、zset(有序集合)、bitmap(位图)等等。image正文Redis 是一个使用 ANSI C 编写的开源、支持 网络、基于 ...

2018-09-14 23:04:00 142

原创 蚂蚁金服SOFA-Boot整合SOFA-RPC(下篇)

前言上文介绍了SOFA-RPC 的几种调用方式,包括单向调用、同步调用、Future调用、回调,引入了泛化调用和过滤器。本文将对 SOFA-RPC 的高级功能,包括参数配置、自定义线程池、预热权重和自动故障剔除等。image正文1. 参数配置SOFABoot RPC Starter 提供了方便的参数设置方式。这些参数目前可以分为两个部...

2018-09-14 23:02:00 2470

原创 基于Docker + Consul + Registrator的服务注册与发现集群搭建

前言近年微服务架构在互联网应用领域中愈来愈火,引入微服务主要解决了单体应用多个模块的紧耦合、无法扩展和运维困难等问题。微服务架构就是按照功能粒度将业务模块进行垂直拆分,对单体应用本身进行服务化和组件化,每个组件单独部署为小应用(从DB到UI)。微服务与微服务之间通过Service API进行交互,同时为了支持水平扩展、性能提升和服务可用性,单个服务允许同...

2018-09-14 23:01:00 898

原创 蚂蚁金服SOFA-Boot整合SOFA-RPC(上篇)

前言上文介绍了 SOFARPC 的简单使用。在生产环境中,通常会将 SOFARPC 整合到 SpringBoot 中。蚂蚁金服提供了 SOFABoot 框架,SOFABoot 是蚂蚁金服开源的基于 Spring Boot 的研发框架,它在 Spring Boot 的基础上,提供了诸如 Readiness Check,类隔离,日志空间隔离等等能力。...

2018-09-14 22:59:00 3807

原创 蚂蚁金服RPC框架SOFA-RPC - 初体验

前言SOFARPC 最早源于阿里内部的 HSF,是近期蚂蚁金服开源的一个高可扩展性、高性能、生产级的 Java RPC 框架。SOFA-RPC 在蚂蚁金服已经历了十多年的发展,致力于简化应用之间的 RPC 调用。为应用提供方便透明、稳定高效的点对点远程服务调用方案。image为了用户和开发者方便的进行功能扩展,SOFA-RPC 提供了丰富...

2018-09-14 22:57:00 1746

原创 基于Docker + Consul + Nginx + Consul-Template的服务负载均衡实现

前言上一篇文章使用 Consul 和 Registrator 在 docker 的容器环境中搭建了服务注册和发现集群。在服务发现和注册的基础上,本文将引入 Nginx反向代理服务器和 Consul-template 组件,实现动态的服务负载均衡。正文1. 工具介绍1.1. Nginx一个高性能的 HTTP 和反向代理服务器,用于前端访问流量到后...

2018-09-14 22:56:00 849

原创 蚂蚁金服SOFA-Boot整合SOFA-RPC(中篇)

前言上篇文章简单地介绍了 SOFA-Boot 的功能特性,对 Readiness 健康检查的配置举例说明。重点介绍了如何在 SOFA-Boot 中引入 SOFA-RPC 中间件,给出了基于 bolt、rest 和 dubbo 等不同协议通道的服务发布与消费的全流程。image本文将进一步介绍 SOFA-RPC 中间件提供的丰富而强大的功能...

2018-09-14 22:53:00 1143

原创 大型Web网站架构演变

前言我们以Java Web为例,来搭建一个简单的电商系统,看看这个系统可以如何一步步演变。该系统具备的功能:用户模块:用户注册和管理商品模块:商品展示和管理交易模块:创建交易和管理正文阶段一、单机构建网站网站的初期,我们经常会在单机上跑我们所有的程序和软件。此时我们使用一个容器,如Tomcat、Jetty、Jboss,然后直接使用JS...

2018-09-14 22:52:00 166

原创 Spring Cloud整合Thrift RPC(二) - 应用案例

前言上一篇简单的阐述了 spring-cloud-thrift-starter 这个插件的配置和使用,并引入了一个calculator的项目。本文将基于一个银行存款、取款的业务场景,给出一套thrift在生产环境的应用案例。首先设计如下几张简单的数据库表:银行(bank)、分支(branch)、银行卡(deposit_card)、客户(customer...

2018-09-14 22:50:00 1110

原创 Spring Cloud整合Thrift RPC(一) - 使用指南

前言前面几篇博客,着重对Apache Thrift的使用和原理做了介绍。在微服架构流行的今天,自然而然就会想到Spring Boot和Spring Cloud作为微服务的基础框架。然而,Spring Cloud从诞生以来,就基于HTTP协议的轻量级Restful API作为服务之间的通信方式。在微服务架构设计中,可以分为外部服务和内部服务。两者主要区别...

2018-09-14 22:49:00 4211

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

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

2018-09-14 22:47:00 938

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

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

2018-09-14 22:47:00 541

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

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

2018-09-14 22:45:00 263

原创 一天一个设计模式(五) - 适配器模式(Adapter)

前言适配器模式把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。适配器模式的用途最经典的就是电器的例子,笔记本电脑的插头一般都是三相的,即除了阳极、阴极之外,还有一个地极。而有些地方的电源插座却只有两极,没有地极。电源插座与笔记本电脑的电源插头不匹配使得笔记本电脑无法使用。这时候一个三相到两相...

2018-09-14 22:42:00 131

原创 一天一个设计模式(四) - 原型模式(Prototype)

前言原型模式属于对象的创建模式。通过给出一个原型对象来指明所有创建的对象的类型,然后用这个原型对象提供的复制办法创建出更多同类型的对象。原型模式的结构原型模式要求对象实现一个可以克隆自身的接口(类型)。这样一来,通过原型实例创建新的对象,就不需要关心这个实例本身的类型,只需要实现克隆自身的方法,也而无需再去通过new来创建。原型类型的表现形式简...

2018-09-14 22:40:00 110

原创 一天一个设计模式(三) - 建造者模式(Builder)

前言建造模式是对象的创建模式。建造模式可以将一个产品的内部表象(internal representation)与产品的生产过程分割开来,从而可以使一个建造过程生成具有不同的内部表象的产品对象。(一). 产品的内部表象一个产品常有不同的组成成分作为产品的零件,这些零件有可能是对象,也有可能不是对象,他们通常又称为产品的内部表象(internal r...

2018-09-14 22:38:00 151

原创 一天一个设计模式(二) -单例模式(Singleton)

前言单例模式 (Singleton) 是一种创建型模式,指某个类采用Singleton模式,则在这个类被创建后,只可能产生一个实例供外部访问,并且提供一个全局的访问点。正文(一). 优缺点Java中单例模式 (Singleton) 是一种广泛使用的设计模式。单例模式的主要作用是保证在Java程序中,某个类只有一个实例存在。一些管理器和控制器常被设计...

2018-09-14 22:36:00 132

原创 并发三剑客之限流方案总结

前言对于高并发的系统,有三把利器用来保护系统:缓存、降级 和 限流。限流常见的应用场景是秒杀、下单和评论等 突发性 并发问题。缓存 的目的是提升 系统访问速度 和 系统吞吐量。降级 是当服务 出问题 或者影响到核心流程的性能,则需要 暂时屏蔽掉,待 高峰 或者 问题解决后 再打开。有些场景并不能用 缓存 和 降级 来解决,比如稀缺资源(秒杀、抢购...

2018-09-14 22:30:00 185

原创 浅谈分布式唯一ID的几种生成方案

前言在互联网的业务系统中,涉及到各种各样的ID,如在支付系统中就会有支付ID、退款ID等。那一般生成ID都有哪些解决方案呢?特别是在复杂的分布式系统业务场景中,我们应该采用哪种适合自己的解决方案是十分重要的。下面我们一一来列举一下,不一定全部适合,这些解决方案仅供你参考,或许对你有用。正文分布式ID的特性唯一性:确保生成的ID是全网唯一的。有序...

2018-09-14 22:26:00 258

原创 浅谈消息队列及常见的消息中间件

前言消息队列 已经逐渐成为企业应用系统 内部通信 的核心手段。它具有 低耦合、可靠投递、广播、流量控制、最终一致性 等一系列功能。当前使用较多的 消息队列 有 RabbitMQ、RocketMQ、ActiveMQ、Kafka、ZeroMQ、MetaMQ 等,而部分 数据库 如 Redis、MySQL 以及 phxsql 也可实现消息队列的功能。...

2018-09-14 22:23:00 349

原创 浅谈常见的七种加密算法及实现

前言数字签名、信息加密 是前后端开发都经常需要使用到的技术,应用场景包括了用户登入、交易、信息通讯、oauth 等等,不同的应用场景也会需要使用到不同的签名加密算法,或者需要搭配不一样的 签名加密算法 来达到业务目标。这里简单的给大家介绍几种常见的签名加密算法和一些典型场景下的应用。正文1. 数字签名数字签名,简单来说就是通过提供 可鉴别 的 数字...

2018-09-14 22:11:00 442

原创 浅谈常见的NoSQL技术方案和选型

前言在互联网和大数据的背景下,越来越多的网站、应用系统需要支撑 海量数据存储、高并发请求、高可用、高可扩展性 等特性要求。传统的 关系型数据库 已经难以应对类似的需求,各种各样的 NoSQL(Not Only SQL)数据库因此而产生。image本文将分析 传统数据库 的存在的问题,以及几类 NoSQL 如何解决这些问题。在不同的 业务场...

2018-09-14 22:04:00 163

原创 浅谈分布式存储系统的数据分布算法

前言分布式存储系统 面临着的首要问题,就是如何将 大量的数据 分布在 不同的存储节点 上。无论上层接口是 KV 存储、对象存储、块存储、亦或是 列存储,在这个问题上大体是一致的。本文将介绍如何 分布式存储系统 中 做数据分布目标 及可选的 方案,并试着总结和权衡他们之间的关系及。正文(一) 指标这里假设 目标数据 是以 key 标识的 数据块 或 ...

2018-09-14 14:58:00 213

原创 浅谈SAML, OAuth, OpenID和SSO, JWT和Session

前言通常为了弄清楚一个概念,我们需要掌握十个概念。在判断 JWT(JsonWebToken) 是否能代替 session 管理之前,我们要了解什么是 token,以及 access token 和 refresh token 的区别。了解什么是 OAuth,什么是 SSO,SSO 下不同策略 OAuth 和 SAML 的不同,以及 OAuth 与 Op...

2018-09-14 14:52:00 732

原创 浅谈Nginx服务器的内部核心架构设计

前言Nginx 是一个 免费的,开源的,高性能 的 HTTP 服务器和 反向代理,以及 IMAP/POP3 代理服务器。 Nginx 以其高性能,稳定性,丰富的功能,简单的配置和低资源消耗而闻名。Nginx是一个 Web 服务器,也可以用作 反向代理,负载均衡器 和 HTTP 缓存。很多高知名度的网站都使用 Nginx,如:Netflix,GitHub...

2018-09-14 14:36:00 141

原创 实战Spring Boot 2.0系列(六) - 单机定时任务的几种实现

前言定时任务 一般会存在 中大型企业级 项目中,为了减少 服务器、数据库 的压力,往往会以 定时任务 的方式去完成某些业务逻辑。常见的就是 金融服务系统 推送回调,一般支付系统订单在没有收到成功的回调返回内容时会 持续性的回调,这种回调一般都是 定时任务 来完成。还有就是 报表的生成,我们一般会在客户 访问量小 时完成这个操作,也可以采用 定时任务 ...

2018-09-14 14:29:00 206

原创 实战Spring Boot 2.0系列(五) - Listener, Servlet和Filter, Controller和Interceptor

前言用户认证授权、日志记录 MDC、编码解码、UA 检查、多端对应等都需要通过 拦截请求 来进行处理。这时就需要 Servlet、Filter、Listener、Interceptor 这几种组件。而把非 Spring Boot 项目转换成 Spring Boot 项目,需要沿用以前的这些代码,所以有必要了解这它们的 用法 和 生命周期。im...

2018-09-14 14:27:00 476

原创 Docker Compose搭建MySQL主从复制集群

前言随着应用业务数据不断的增大,应用的 响应速度不断下降,在检测过程中我们不难发现大多数的请求都是 查询操作。此时,我们可以将数据库扩展成 主从复制模式,将 读操作 和 写操作 分离开来,多台数据库 分摊请求,从而 减少单库 的 访问压力,进而应用得到优化。正文主从复制的方式MySQL 5.6 开始主从复制有两种方式:基于日志(binlog)和 基于 GTID(全局事务...

2018-09-14 13:47:31 10192 2

原创 阿里云CentOS 7上安装配置Docker

前言Docker是一个开源工具,它可以让创建和管理Linux容器变得简单。容器就像是轻量级的虚拟机,并且可以以毫秒级的速度来启动或停止。Docker帮助系统管理员和程序员在容器中开发应用程序,并且可以扩展到成千上万的节点。这是一只鲸鱼,它托着许多集装箱。我们可以把宿主机可当做这只鲸鱼,把相互隔离的容器可看成集装箱,每个集装箱中都包含自己的应用程序。传送门Dock...

2018-09-14 13:45:07 3511 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

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