- 博客(151)
- 资源 (9)
- 收藏
- 关注
原创 Eureka源码分析-环境构建篇
承接上一篇文章《什么是微服务》,我们已经对微服务有一定了解,并且以一个实现了注册中心、服务提供者及消费者的例子作为文章的结尾,而本篇文章,主要介绍Eureka源代码的环境构建及示例调试。 环境构建 调试方式 运行原理 示例调试 一、环境构建学习一门新技术的原理和根本,最好的方式就是研究它的源代码,搞懂它是如何诞生的,同时,也考虑下为什么这样去设...
2018-10-23 12:56:47 3058
原创 什么是微服务?
什么是微服务? 很高兴与各位读者朋友见面,本篇内容是微服务系列的首篇文章,也是本人后期撰写原创微服务架构文章的开始,希望自己的一些经验分享,能够助力于各位读者朋友在微服务架构之路上顺风顺水。作为首篇文章,我会以最为基础的概念为开始,介绍下什么是微服务及其与SOA服务架构的异同;然后,会以一个整体的微服务架构图及详解作为第二部分内容;最后,会搭建一个基础入门的注册中心(HA)...
2018-10-15 11:11:00 1763
原创 RPC远程协议之Thrift非阻塞多线程处理
RPC远程协议之Thrift非阻塞多线程处理 在上一篇文章《RPC远程协议之Thrift入门》中,我已经介绍了Thrift的基本使用,并举例验证了如何使用,当然这个例子是阻塞单线程的模式,实际客户端请求增多,单线程处理时间变长时,无可厚非就会卡顿延迟,所以需要实现非阻塞多线程的通信模式,而Thrift已经想到,并且为我们提供好了几种Server的实现方式,以供在实际业务需求下做出合适的选择。本篇文...
2018-03-06 17:25:37 4194 3
原创 RPC远程协议之Thrift入门
RPC远程协议之Thrift入门 在上一篇文章《RPC远程协议之原理分析》中,我介绍了RPC的工作原理及欲实现RPC框架功能应该做哪些事情,因为要做的事情太多,完全由开发人员研发实现,不是很现实,所以市面上出现了诸多RPC快捷框架,目前主流的有Facebook的Thrift、谷歌的gRPC,以及Dubbo,但就性能角度考虑,Thrift相对好些,并且是跨语言的,所以这里先以Thrift的介绍开始。...
2018-03-03 20:21:47 2800
原创 RPC远程协议之原理分析
RPC远程协议之原理分析 在近几年工作中发现,功能服务化或微服务化越来越流行,逐渐成为实现中大型分布式系统架构的主要方式,而在分布式系统中的不同节点应用间的通信中,RPC远程协议扮演关键作用。实际上,在日常工作中,我们也多多少少使用过RPC协议方案,对于初级的程序员来说,RPC显得很神秘,而经验丰富些的程序员虽可使用,但对其工作原理理解的并不是很深刻,往往会误用,这里就我理解来详细介绍下。 l ...
2018-03-02 17:07:33 2507
原创 Spring整合Hibernate实现Spring Data JPA
Spring整合Hibernate实现Spring Data JPA在上一篇文章《Spring整合Hibernate实现JPA持久化》中,我们已经介绍了怎样在Spring容器中合理地集成Hibernate来实现JPA的ORM机制。但是,细心的读者会发现,上一篇文章中使用了EntityManager来直接与数据库交互,存在这一定的耦合度,更重要的是每当新增或修改新的实体Entity的管理时,都需要重复的实现EntityManager在Dao层的逻辑,有些过于模版化,重复劳动的问题存在,所以这篇文章就来介绍
2017-11-24 15:11:15 6194
原创 Spring整合Hibernate实现JPA持久化
Spring整合Hibernate实现JPA持久化本篇文章主要介绍Spring如何集成JPA的功能,并实现基本的CURD操作。JPA,全称为Java Persistence API,诞生与EJB2实体Bean之上,是一种新的Java持久化标准,也是基于POJO的持久化机制,它的设计灵感来源于Hibernate和Java数据对象(JDO)。 Maven管理软包依赖 配置实体管理器工厂 用JPA方式实现CURD
2017-11-21 13:28:25 7493
原创 Spring整合JMS异步消息
Spring整合JMS异步消息 在应用程序之间通信的消息,可分为同步消息和异步消息两种。前者就是当请求的程序端发出请求后,一直处于等待状态(阻塞),直到接收请求方反馈正确的结果后,请求方才能继续往下执行。而异步消息,则请求的程序端发出请求后,则可以继续向下执行,不需要阻塞当前流程,很多时候大大提高了用户的即时体验。当然,选择同步还是异步形式的通信,全凭应用的场景而做出合理的选择,比如:针对用户的即时操作要求较高的功能,则建议采用异步通信;而例如工作流或对即时性要求不高的功能实现,则可采用同步
2017-11-03 12:00:22 3011
原创 Nginx地址重定向使用
Nginx地址重定向使用在使用Nginx作为服务器时,经常遇到的需求就是对地址进行重定向(301重定向),而重定向可以解决很多服务器应用需求,而且Nginx实现这一切都比较简单。那么,我们常见的重定向有哪些?这里我就罗列几个常见的需求:http重定向到https、www自动补全、redirect对https的支持及动静访问分离。当然,也有很多人在使用rewrite重写地址实现重定向,但在这里并不推荐,因为它在不同的Nginx版本是有缺别的,而301是推荐使用的,因为它是http/https通信协议的标准,
2017-09-23 11:13:53 5284
原创 Nginx的CA证书使用总结
Nginx的CA证书使用总结今天给大家介绍下,在Nginx作为服务器时,网站的CA证书怎么添加?我们都知道,http方式通信是非常常见的,常用在对安全要求不高的站点的交互访问,那么对于有交易或存在敏感信息的网站,就需要我们使用http的另一变体https来替代,因为它基于http协议,并添加的ssl的安全处理,所以网站的交互数据是经过加密的,较安全,具体实现过程如下所示。
2017-09-08 14:38:17 15255
原创 网站优化篇
网站优化篇最近公司要大力推广官方网站,但是发现不论是PC网站还是手机网站的打开响应速度都比较卡顿,而每个人都知道官方网站,一般是企业对外用户打造品牌,进行宣传的第一道门,如果用户访问网站时遇到了卡顿,很多用户会选择拒绝入门,这是个大问题,所以就这个问题,我做了相关的调研和实践,已达到我们这期的要求效果。那么接下来就介绍下,优化网站的步骤及方法,供有需要的人参考。
2017-09-01 12:37:53 780 2
原创 分布式架构设计之Rest API版本管理
分布式架构设计之Rest API版本管理:随着互联网发展脚步的加快,产品项目的迭代也随之加快,所以就需要我们对产品的稳定提供一定的保障。而直接与用户接触的前端应用一般都是通过接口API与后台交互,一旦相关的API需求改版后,原来的API就不能使用,需要重新发布更新,如果前端产品是移动APP应用,比如:android/ios,那么就必须重新提交应用审核,等待若干天的审核发布是很不好的,严重影响用户的使用,所以建立API版本,使新改版的接口API不影响老版本的API使用,就显得很有必要了,那么接下来就介绍下。
2017-08-26 19:50:06 7656 5
原创 分布式架构设计之Rest API HAL
分布式架构设计之Rest API HAL在上一篇文章《分布式架构设计之Rest API》中,我对什么是Rest进行了详细的介绍,同时以书本的CRUD为例,实现了Rest API的基本操作。但是细心的读者可能会发现,所有接口返回的数据格式并不统一,没有一定的规范性,更重要的是接口通信的内容并未很明确地体现“资源”的概念,所以在这篇文章就来介绍下现在流行的HAL风格的数据格式,需要提及的是:HAL(Hypertext Application Language)是一种API数据格式风格,同时也能规范接口通信内
2017-08-15 16:06:18 4321
原创 分布式架构设计之Rest API
近几年,以资源为中心的表述性状态转移(Representational State Transfer,REST)越来越受欢迎,它完美地替代了传统的基于SOAP的Web服务方案,同时它关注的是数据的处理,而后者则关注于动作行为的处理。对于REST,常有人错误的将其视为“基于URL的Web服务”,也就将REST认为是另一种类型的远程调用(Remote Procedure Call,RPC)机制。实际上,REST与RPC几乎并没有任何关系,RPC是面向服务的,关注于行为和动作;而REST是面向资源的,关注在数据的
2017-08-05 14:07:47 4700
原创 分布式架构设计之基础软件系统架构
分布式架构设计之软件系统架构一个好的系统架构需要从三方面进行设计:首先,我们必须明确系统的整体需求功能是什么,进而再对这些需求分模块以及构建模块间的交互设计,同时要明确相关技术的选型;然后,针对物理节点上的拓扑结构是必不可少的,比如:Web Server的负载分发、数据的集群等,这部分是属于架构的“硬实现”部分;最后,就是整体的软件系统的设计,这部分是整个系统架构的“软实现”,主要从系统内部软件系统角度实现设计,比如:基础通信服务、数据安全服务等。对于前两者的设计,读者可以参考上一篇文章《分布式架构设计之
2017-07-02 17:14:58 16459
原创 Spring框架总结之Profile使用
在实际开发中,有一个比较大的挑战就是将程序从一个环境迁移或切换到另一个环境。我们知道,测试或开发环境与正式或生产环境中的某些配置是不同的,如:数据库配置、加密算法等。所以传统的做法就是每次发布或测试时,都手动修改相关配置信息,十分繁琐和低效率,并且在发布时容易忽略修改的信息导致环境切换不正确。虽然,在早期时,我们可以在服务器存放配置信息,然后通过程序动态读取配置,但这样作的效率、灵活性及安全方面不是和好,所以鉴于这些问题,Spring在3.1版引入了Bean Profile的功能,它的产生可以完美的解决上面
2017-06-25 22:58:40 13144 4
原创 Tomcat多个Web Server配置
试想下,实际项目中,我们只有一台服务器,并且在上面只部署一个Web Server服务(这里是Tomcat),我们将多个Web项目同时部署在这个Web Server中,此时,这些项目运行一切正常。而当我们调整了某个项目时,需要重新打包发布,需要重启Tomcat服务时,问题出现了:因为多个项目部署在同一个Tomcat中,重启时这些Web项目都会停止服务,等待Tomcat重启成功,恢复正常状态。此刻正在使用其中某个项目产品时,就不能访问和操作了,这是不允许的。所以,我们需要建立多个Tomcat服务,把各个Web
2017-03-26 13:17:51 1822
原创 Spring框架总结之面向切面(一)
AOP(Aspect Oriented Programming),称之为“面向切面编程”,它是Spring框架的又一核心模块,与其支持的DI功能同样处于重要地位。相比于Java传统的继承体系(柱体体系结构),AOP则实现了横向切割程序生产线,产生若干切面体,而每个切面体含有特定的横切动作、目标对象及触发动作的契机点,触发之后,在横向实现了各种方式的非业务相关的动作,将业务和非业务模块分离,一般用来处理日志、缓存、事务及其它非业务通用部分功能。而AOP的实现机制,实际上是通过代理方式实现,那么接下来从AOP的
2017-02-28 11:38:47 2972 1
原创 Spring框架总结之依赖注入(一)
DI(Depandency Injection),也叫“依赖注入”,与人也称其为“控制反转(IOC)”,而我更喜欢把它称之为DI。传统的Java对象,对其本身及关联的对象(Bean),都是自主创建和管理的,这样就导致高度耦合和难以测试的问题。而Spring框架则意识到这个问题,其提供的DI功能,可以完美的解决Bean及其依赖的Bean的创建、装配及生命周期等管理工作,这个管理机制称为“Spring容器”,也是Spring框架的核心模块。这里我会从Spring的DI原理、Bean生命周期及Bean装配三方面介
2017-02-26 14:46:02 2160
原创 RabbitMQ服务之运行管理篇
RabbitMQ服务之运行管理篇在实际使用中,我们必须要对RabbitMQ服务器进行管理,也要对其上创建的用户进行基本的权限配置和管理,以及也经常会对Rabbit服务的使用进行统计分析,接下来我们会逐一介绍它们。另外,我们知道,RabbitMQ服务是由Erlang语言所编写,一个RabbitMQ服务器实例是由Erlang节点和运行在其上的Rabbit程序所构成,一个Erlang节点上可以同时运行多个RabbitMQ程序,它们彼此之间可以通信,不论它们是否在同一个服务器上,这也是Erlang程序的特点所在
2017-01-09 14:50:57 18570 1
原创 RabbitMQ服务之键值匹配篇
RabbitMQ服务之键值匹配篇在上一篇文章中,我们介绍了RabbitMQ服务的主题订阅转发机制,该机制使接收端可以设置过滤条件,接收满足条件的类型消息,它需要接收端设置的主题条件或规则需要模糊匹配,然后接收到符合正则主题的对应消息,不清楚的同学,可以参看文章《RabbitMQ服务之主题订阅篇》。而在这里,我们继续介绍一种不常使用的转发器机制,称之为“键值匹配”。对于它的原理,这里不做赘述,在最开始的第一篇文章就已经介绍,不清的读者可以参考文章《RabbitMQ服务之入门篇》。
2017-01-06 12:24:51 2027
原创 RabbitMQ服务之主题订阅篇
RabbitMQ服务之主题订阅篇在上一篇文章中,我们介绍了RabbitMQ服务的路由转发机制,该机制使接收端可以设置过滤接收满足条件的类型消息,它需要接收端设置的路由条件或规则必须完全匹配,才能接收到对应消息,不清楚的同学,可以参看文章《RabbitMQ服务之路由篇》。而在这里,我们继续介绍一种更加灵活的转发器机制,称之为“主题订阅”。对于它的原理,这里不做赘述,在最开始的第一篇文章就已经介绍,不清的读者可以参考文章《RabbitMQ服务之入门篇》。
2017-01-05 11:49:10 1693
原创 RabbitMQ服务之路由篇
RabbitMQ服务之路由篇在上一篇文章中,我们介绍了RabbitMQ服务的发布订阅机制,也就是每个接收端都会接收到消息发送端发送的全部消息,不清楚的同学可以查看文章《RabbitMQ服务之发布/订阅》,这种方式不是很灵活,当然也要根据具体的业务需求来选择使用它。这里我们继续介绍另一种消息的转发机制,称之为“路由转发”,对应的转换器类型为“direct”,它可以让接收端可以有选择的接收自己喜欢的消息,具体的关于“direct”转发器的原理,请查看文章《RabbitMQ服务之入门篇》。
2017-01-04 12:23:35 763
原创 RabbitMQ服务之发布/订阅篇
RabbitMQ服务之发布/订阅篇在上一篇文章中,我们实现了RabbitMQ的应答、任务转发数及队列和消息的持久化操作,也就是一个消息只能发送给一个消费者,除非该消费者因意外被停掉后,才会转发给其它工作者,不清楚的同学可以回头看下《RabbitMQ服务之任务分发篇》;而在这里要介绍的是将消息发送给多个消费者,有点类似广播机制(观察者模式), 也就是在第一篇文章《RabbitMQ入门篇》中介绍的转发器,不清楚的读者可以去浏览。我们这里要说的是Fanout机制转发器,具体请往下俯看!
2017-01-03 16:24:51 1223
原创 Tomcat虚拟路径配置
Tomcat虚拟路径配置:实际项目中,我们经常需要上传下载文件,默认情况下,上传的文件是存放在Tomcat的webapps下,项目的根目录下;这样做没有问题,但是实际上,有时我们需要备份或者分割文件到其它地方时,最好将文件存放文职与Tomcat环境玻璃,所以Tomcat虚拟路径的配置很有必要了,具体操作比较简单,可以查看下面的步骤说明。
2016-12-29 13:27:33 457
原创 Zookeeper服务框架之介绍篇
Zookeeper是一种分布式服务框架,是apache hadoop的子项目,完全开源存在,它的诞生主要用来处理分布式环境中数据管理问题,比如:分布式应用程序配置、集群管理、状态同步服务及命名服务等。这里,我们以3.4.8版本为例展开介绍,其最新的版本下载可以从地址:http://hadoop.apache.org/zookeeper/ 中获取,并以java项目为例进行分析和使用Zookeeper,和以往文章一样,都是以安装配置开始!
2016-12-27 14:36:34 2772 1
原创 RabbitMQ之任务分发篇
在上一篇文章《消息队列研究之RabbitMQ入门篇》 中,介绍了关于RabbitMQ入门的第一个程序Hello World!,该程序演示了在RabbitMQ中,单个发送者和单个接收者的使用,而实际使用中,多线程环境是最为常见的,也就是同时有多个消息订阅者同时订阅,而发送者也可以同时有多个,而本篇文章就介绍下在多线程订阅时,该如何使用及注意的事项。
2016-12-17 13:49:00 2780
原创 RabbitMQ服务之入门篇
RabbitMQ是一种消息中间件,能够很好的处理来自客户端的异步消息发送及请求,将消息发送放入到服务端的队列池中,而接收端可以根据RabbitMQ配置的转发机制接收和过滤服务端转发来的消息。RabbitMQ可以根据指定的消息转发规则进行消息的转发、缓冲和持久化操作,这也是其根身立命的地方,但是其诞生的主要目的是为了均衡线程耗时操作的压力,前提是这些操作要满足没有要求即时反应,因为其不适合用在要求即时反应的需求,此时可以考虑使用缓存中间件Redis、Memcache等,另外,RabbitMQ主要用在多服务器间
2016-12-14 14:55:40 3786
原创 Java容器研究及优化篇(一)
Java容器研究及优化篇(一)在Java环境中,一切都是以对象角色而存在,我们需要一种机制来集中管理这些对象,并对其中每个对象进行方便的插入、检索、修改及删除操作,这种机制称之为集合,也叫做容器。而我们最为常用的容器包括:List、Set、Map、Stack及Queue,它们都有各自的特性和擅长,也有不同的继承接口,内部的数据存储算法或格式也有所不同。本篇为集合研究的第一部分,主要以满足使用为前提,对常用集合的使用进行介绍;而第二部分则为深入的研究下这些集合,并在最后给出个封装的工具供参考使用。
2016-10-19 17:11:05 3310
原创 分布式架构设计之电商平台
何为软件架构?不同人的答案会有所不同,而我认为一个好的软件架构除了要具备业务功能外,还应该具备一定的高性能、高可用、高伸缩性及可拓展等非功能需求。而软件架构是由业务架构和技术架构两部分组成,因为有了业务结构才会催生出软件架构,进而来满足业务上的需求,所以,在做软件架构设计时,需要分为业务架构设计和技术软件架构设计,二者不可分离哦!那么,接下来就以本人实际工作中的电商平台为例,进行说明电商平台架构设计,因为不同行业产品系统不同业务不同,而催生的系统软件的实现要求及架构设计就不同了!
2016-10-15 16:23:43 23858 4
原创 Spring框架研究总结之SpEL
在Spring3以后,引入了强大的表达式语言-Spring Expression Language,即SpEL语言。SpEL能够在运行时构建复杂的表达式,存取对象属性,对象方法及正则表达式匹配等功能,并且其都支持XML和注解两种实现方式,其语法格式为#{SpEL Expression},并需要spring-expression这个jar包。
2016-10-09 11:32:10 4432
原创 Spring框架研究总结之AOP(二)
Spring是一个开源的企业应用框架,是一个分层架构,由7个定义稳定的模块所组成,而所有的模块都是在核心容器基础上搭建;其体系本身提供了强大的IOC(控制反转)、AOP(面向切面)以及DI(依赖注入)等较显著的功能,那么下面就来详细介绍下Spring框架的模块组成及相关特点。 AspectJ使用 AOP的例子
2016-10-06 18:26:33 952
原创 MongoDB研究总结之索引部分
MongoDB研究总结之索引部分MongoDB是由C++语言所编写的一种面向文档的非关系型数据库(是一种NoSql数据库实现),也是介于关系型数据库和非关系型数据库之间的数据存储产品,其提供了高性能、高可用、高可拓展及基于分布式存储的数据库,是非关系型数据库中功能最丰富,最类似关系型数据库的一种集合、文档格式的数据库。 覆盖查询 高级索引 全文检索
2016-10-04 16:53:40 600
原创 Spring框架研究总结之AOP(一)
AOP(Aspect-Oriented Programming),即为面向切面或方面编程,被认为是OOP(Object-Oriented Programming),面向对象编程的拓展和完善。OOP引入了继承、封装及多态等特性来搭建一种对象层次结构,是垂直方向上的层级结构;而当我们要为分散的对象引入公共行为时,OOP则显得力不从心,也就是说OOP允许你定义从上到下的逻辑关系,却不适合定义从左到右的逻辑关系,比如:异常处理,它散布在所有对象结构中,这种散布在各处的无关代码片段被称之为横切代码片段,在OOP中导致
2016-10-04 11:27:21 740
原创 MongoDB高级部分及实现(二)
MongoDB是由C++语言所编写的一种面向文档的非关系型数据库(是一种NoSql数据库实现),也是介于关系型数据库和非关系型数据库之间的数据存储产品,其提供了高性能、高可用、高可拓展及基于分布式存储的数据库,是非关系型数据库中功能最丰富,最类似关系型数据库的一种集合、文档格式的数据库。 正则使用 管理工具 固定集合 自动赠长
2016-10-03 11:58:17 1309
原创 MongoDB高级部分及实现(一)
MongoDB是由C++语言所编写的一种面向文档的非关系型数据库(是一种NoSql数据库实现),也是介于关系型数据库和非关系型数据库之间的数据存储产品,其提供了高性能、高可用、高可拓展及基于分布式存储的数据库,是非关系型数据库中功能最丰富,最类似关系型数据库的一种集合、文档格式的数据库。 文档关系 原子操作 ObjectID Map Reduce GridFS
2016-09-29 17:54:36 2759
原创 Spring框架研究总结之IOC
Spring是一个开源的企业应用框架,是一个分层架构,由7个定义稳定的模块所组成,而所有的模块都是在核心容器基础上搭建;其体系本身提供了强大的IOC(控制反转)、AOP(面向切面)以及DI(依赖注入)等较显著的功能,那么下面就来详细介绍下Spring框架的模块组成及相关特点。 框架结构 依赖注入 控制反转
2016-09-27 15:45:16 847
原创 MongoDB基础部分及实现(二)
MongoDB是由C++语言所编写的一种面向文档的非关系型数据库(是一种NoSql数据库实现),也是介于关系型数据库和非关系型数据库之间的数据存储产品,其提供了高性能、高可用、高可拓展及基于分布式存储的数据库,是非关系型数据库中功能最丰富,最类似关系型数据库的一种集合、文档格式的数据库。 索引 分析 聚合 监控
2016-09-23 11:22:14 989
原创 MongoDB基础部分及实现(一)
MongoDB是由C++语言所编写的一种面向文档的非关系型数据库(是一种NoSql数据库实现),也是介于关系型数据库和非关系型数据库之间的数据存储产品,其提供了高性能、高可用、高可拓展及基于分布式存储的数据库,是非关系型数据库中功能最丰富,最类似关系型数据库的一种集合、文档格式的数据库。 优点区别 数据模型 数据操作 语言拓展
2016-09-20 19:20:39 2953
模版方法模式在android中使用
2015-05-04
观察者模式在android中使用
2015-05-03
适配器模式在android中使用
2015-05-01
代理模式在android中使用
2015-04-29
策略模式在android中使用
2015-04-25
android中使用jni对字符串加解密实现分析demo
2014-10-14
CameraAlbumSample
2014-10-03
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人