生活

博客公告

欢迎来到我的博客世界,本站致力于打造一个美丽与技术并肩的个人博客世界。 在这里我会展示与当下热门的技术和问题解决办法。同时也希望各位博友能遵纪守法,营造一个良好的学习交流氛围哈!

梦幻国度
zqliang
welcome

zqliang 我喜欢在博客中说一些我的感想,它就是我的日记, 我心灵的垃圾桶.最近有些事我想得明白了许多,正如很多人说的是我太小孩气,太较真, 把世界看得太简单也太美好.有些事,我不得不面对,即使是残酷的,不公平的,也要学会从容面对.

Eureka服务治理

背景 Eureka是Spring Cloud Netflix微服务全家桶中的一部分,通过与SpringBoot组合可以轻易的构建起微服务的注册中心,用于提供服务的注册与发现。Eureka很好的支持高可用配置,通过集群部署的Eureka可以在某个分片出现故障时继续提供服务发现和注册功能。与一般服务注册机制一样,Eureka会周期性的通过心跳机制来监听各客户端的在线情况,确保服务异常及时下线。 本文使用SpringCloud的Edgware.RELEASE版本使用Eureka 一、搭建服务注册中心 Eureka注册中心支持单机和集群方式配置,搭配SpringBoot可以十分

Spring Bean生命周期

前言 Spring现在可以说是主流必备WEB开发框架了,这个也得益于其完整且快速迭代的生态圈。不过现在很多人说起Spring都只知道SpringBoot、SpringCloud等,其实这些都是Spring生态圈里目前比较火的一些技术技术体系。Spring是一个独立的开发框架,对于能熟练运用Spring的开发人员更有利于学习其他的生态技术。Spring框架包含了很多的知识点,包括Bean管理、IOC依赖注入、AOP切面等。这些知识点中都是以Bean的管理为基础,假如一个Bean没有托管在Spring容器中,其他的都免谈。Bean生命周期 Bean生命周期指的是Bean对象重创建到销毁

RabbitMQ实战

前言 RabbitMQ是基于AMQP高级消息队列协议的消息中间件,基于Erlang语言编写。继承了Erlang的高性能,健壮及可伸缩的特性。当前业界常用的消息中间件主要包括ActiveMQ、RabbitMQ、RocketMQ以及kafka,其中RabbitMQ主要突出点在于其首次部署难度低、与接入开发语言无关。从一般企业使用情况来看,RabbitMQ较为适合中小型企业对非强关联业务的应用。RabbitMQ组成 在实际使用之前先有理解RabbitMQ在物理层面是由什么组成的。RabbitMQ实际应用上是一个第三方服务,类似Zookeeper等方式启动。通过代码对需要发送的消息投放到R

Nginx反向代理及负载均衡

前言 Nginx是一个高性能的http和反向代理服务,优点是运行占用内存少,并发能力强,比较突出的作用是反向代理及负载均衡。反向代理就是服务器根据客户端的请求按照已有的配置转发到对应的资源上,然后再将资源返回给客户端。从客户端的角度看只知道有反向代理这个服务存在,并不知道代理服务内部所做的转发操作(以上解析参照百度百科)。通过反向代理的特性其实就可以推出Nginx具备负载均衡的特性,那就是对请求进行分发。Nginx对于请求分发的策略有很多,包括轮询、权重、最少连接等。Nginx实现反向代理 Nginx作为一个http服务,可以接收到http请求并转发到相应的资源上。那这个资源

Redis多服务下主从复制

前言 Redis是一个key-value内存存储系统,由C语言编写并提供了多种语言API操作实现。数据存储在内存中会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,也就是说Redis在数据存储层面可通过文件的形式进行。从应用层面看,Redis目前多用作缓存服务。常用于Tomcat集群下Session共享,数据库数据缓存以及分布式锁操作。由此可见,Redis多处于高并发、高负荷情况下使用。那单服务必然存在性能瓶颈,服务集群化在大规模高并发下尤为突出。按个人理解,目前常用Redis集群有两类。 1、Sentinel 哨兵高可用 2、Cluster集群其实

业界常用分布式锁实现

前言 在互联网应用快速发展的今天,系统集成逐步庞大。系统内部分布式部署偏向大规模集群,加之会对外提供大量接口。对内会导致同一资源大量竞争性占用,对外则可能会导致同一业务重复调用,产生异常重复交易(虽然可以通过关系数据库来约束,但是大并发下数据库性能会成为瓶颈)。当竞争性操作产生第一想到的就是加锁,那再多个系统之间如何实现类似多线程竞争下的Synchronize呢?有需求就会有动力,这里就出现了分布式锁的概念。分布式锁顾名思义就是在处理分布式应用环境下对不同主机共享同一资源排斥手段,用于防止彼此之间的干扰以及竞争带来的性能及数据一致性问题。锁的定义 这里只列举常见的分布式锁类型,排他

Spring Boot初探!!

为什么要使用SpringBoot呢?主要是为了装。相信用过Spring的都知道,Spring虽然已经提供了跟多便利的操作了,但是每次搭建一套框架起来都很费时,而且还有可能出错,要么就是复制粘贴,要么就会出错。SpringBoot为我们提供套便利的接入,只要简单的一些配置,就可以很方便的介入Spring基本所有的技术。这一点正是现在公司所需要的(便捷高效开发)。静态资源访问在我们开发Web应用的时候,需要引用大量的js、css、图片等静态资源。默认配置Spring Boot默认提供静态资源目录位置需置于classpath下,目录名需符合如下规则:/static/publie/resources/

Dubbo便捷调试

dubbo作为一个远程调用框架,虽与同类型的框架,不知道谁优谁劣,但是就公司层面使用来说,还是很棒的。这里简单的写一下怎么使用和调试技巧,就算是作个使用总结吧,供快速使用和问题解决! dubbo是基于spring做配置使用的,虽也提供其他方法,但是比较麻烦,所以使用spring还是有好处的吧。 先来一个整体架构图,这对于了解其是如何工作的是很有必要的。 下面是一个更完整架构图,可以更清晰的看到软件是如何工作的: (以下是官方说明,我觉得很有必要了解下,so)节点角色说明: Provider: 暴露服务的服务提供方。 Consume

深入理解泛型

泛型是Java中一个非常重要的知识点,在Java集合类框架中泛型被广泛应用。本文我们将从零开始来看一下Java泛型的设计,将会涉及到通配符处理,以及让人苦恼的类型擦除。 泛型类 首先定义一个简单的Box类: public class Box { private String object; public void set(String object) { this.object = object; } public String get() { return object; } } 这是最常见的做法

Docker实用理解篇

什么是 Docker Docker 是开源的应用容器引擎。 Docker 可以让你将所有应用软件以及它的以来打包成软件开发的标准化单元。 Docker 容器将软件以及它运行安装所需的一切文件(代码、运行时、系统工具、系统库)打包到一起,这就保证了不管是在什么样的运行环境,总是能以相同的方式运行。就好像 Java 虚拟机一样,“一次编写,到处运行(Write once, run anywhere)”,而 Docker 是“一次构建,到处运行(Build once,run anywhere)”。 Docker 是一种“容器即服务”(Docker Co

Kafka 基本原理

简介 Apache Kafka是分布式发布-订阅消息系统。它最初由LinkedIn公司开发,之后成为Apache项目的一部分。Kafka是一种快速、可扩展的、设计内在就是分布式的,分区的和可复制的提交日志服务。 Kafka架构 它的架构包括以下组件: 话题(Topic):是特定类型的消息流。消息是字节的有效负载(Payload),话题是消息的分类名或种子(Feed)名。 生产者(Producer):是能够发布消息到话题的任何对象。 服务代理(Broker):已发布的消息保存在一组服务器中,它们被称为代理(Broker)或Kafka

通用业务技术架构

1、通用架构实现总的来说我的通用架构还是以三层架构为基础进行演变的,在经典的三层架构中,最上层的是controller,中间是service,下层是dao。在我的架构中,最上层是网关层,controller只是网关的一种,中间是业务层,service只是业务层的入口,最下层是基础层,dao只是基础层中的数据存储组件。2.1、网关层网关层本质上是对不同的网络协议的请求进行处理,比如HTTP协议,TCP协议,当然,也可以对其他协议进行处理。具体见下图:2.1.1、HTTP请求一般来自PC端和APP端的请求都是基于HTTP协议的,对于处理HTTP请求的方案,业内已经非常成熟了。首先,tomcat容器

对Quartz的理解

入门简介: 基本上任何公司都会用到调度这个功能, 比如我们公司需要定期执行调度生成报表, 或者比如博客什么的定时更新之类的,都可以靠Quartz来完成。正如官网所说,小到独立应用大到大型电子商务网站, Quartz都能胜任。 Quartz体系结构: 明白Quartz怎么用,首先要了解Scheduler(调度器)、Job(任务)和Trigger(触发器)这3个核心的概念。 1. Job: 是一个接口,只定义一个方法execute(JobExecutionContext context),在实现接口的execute方法中编写所需要定

多线程理解与线程池调整

单线程模型 从一些基础的线程模型开始,然后再随着线程模型的演变进行更深一步的学习。你使用的任何应用服务器或框架,如Tomcat、Dropwizard、Jetty等,它们的基本原理其实是相同的。Web服务器的最底层实际上是一个socket。这个socket监听并接受到达的TCP连接。一旦一个连接被建立,就可以通过这个新建立的连接读取、解析信息,然后将这些信息包装成一个HTTP请求。这个HTTP请求还将被移交至web应用程序,来完成请求的动作。 我们将通过一个简单的服务器程序来展示线程在其中所起到的作用。这个服务器程序展示了大部分应用服务器的底层实现细节。让我们以一个简单

JVM内存分析

Java的内存结构: JVM内存结构主要有三大块:堆内存、方法区和栈。堆内存是JVM中最大的一块由年轻代和老年代组成,而年轻代内存又被分成三部分,Eden空间、From Survivor空间、To Survivor空间,默认情况下年轻代按照8:1:1的比例来分配; 方法区存储类信息、常量、静态变量等数据,是线程共享的区域,为与Java堆区分,方法区还有一个别名Non-Heap(非堆);栈又分为java虚拟机栈和本地方法栈主要用于方法的执行。 在通过一张图来了解如何通过参数来控制各区域的内存大小 控制参数 -Xms设置堆的最小空间大小。 -Xmx设置堆

Transaction理解篇

Transaction 也就是所谓的事务了,通俗理解就是一件事情。从小,父母就教育我们,做事情要有始有终,不能半途而废。 事务也是这样,不能做一般就不做了,要么做完,要么就不做。也就是说,事务必须是一个不可分割的整体,就像我们在化学课里学到的原子,原子是构成物质的最小单位。于是,人们就归纳出事务的第一个特性:原子性(Atomicity)。 特别是在数据库领域,事务是一个非常重要的概念,除了原子性以外,它还有一个极其重要的特性,那就是:一致性(Consistency)。也就是说,执行完数据库操作后,数据不会被破坏。打个比方,如果从 A 账户转账到 B 账户,不可能因为 A 账户扣了钱,而

Copyright Obscura 2017. Design by zqliang. All Rights Reserved.Collect from 小梁
粤ICP备18034967号