架构
文章平均质量分 78
ESOO
君子不器
展开
-
Java 并发编程 常见面试总结
目录一. Socket流阻塞二. wait和notify三. 线程实现的两种方式四. synchronized同步代码块示例五. ReentrantLock的方法示例六. Lock和synchronized的一些区别和选择考虑的因素七. Java并发包中的线程池种类及其特性介绍八. 线程池&Future九. BlockingQueue十. vola...原创 2019-08-04 09:05:18 · 718 阅读 · 0 评论 -
APM监控--(六)Dapper,大规模分布式系统的跟踪系统
目前apm监控一般都遵循Google公司发布的Dapper规范,特转载一篇,供广大网友交流概述当代的互联网的服务,通常都是用复杂的、大规模分布式集群来实现的。互联网应用构建在不同的软件模块集上,这些软件模块,有可能是由不同的团队开发、可能使用不同的编程语言来实现、有可能布在了几千台服务器,横跨多个不同的数据中心。因此,就需要一些可以帮助理解系统行为、用于分析性能问题的工具。 Da...转载 2018-04-09 15:00:07 · 4650 阅读 · 0 评论 -
APM监控--(五)pinpoint使用手册
最近在使用pinpoint进行应用监控,发现网上对安装介绍的很详细,但是如何使用介绍的不是非常好,特别整理一篇使用手册,供广大网友学习,如有不通看法,请评论区交流。0. 前提条件• 请参考接入《APM监控--(二)Pinpoint部署手册》pinpoint1. 查看调用关系1.1 访问地址http://yoururl1.2 选择应用默认两层展示调整层级深度:示例为前端调用4层追溯...原创 2018-04-09 14:51:42 · 19870 阅读 · 17 评论 -
大数据下的日志-flume(二)高并发下的优化
不得不读的flume优化文章!原创 2015-12-27 19:00:46 · 7166 阅读 · 4 评论 -
flume高并发优化——(16)解决offsets变小问题
offsets初始化在上篇博客中《flume高并发优化——(14)解决空行停止收集数据问题,及offsets变小问题 》我们遗留了一个小问题,就是offsets变小的问题,迟迟未解决,经过研究flume代码发现,flume中,是自己管理offsets关系的,每个kafkachannel的代码中保留了一份topic-offsets的关系,源码:@Override public void start原创 2017-07-31 10:24:51 · 2579 阅读 · 5 评论 -
flume高并发优化——(15)中间件版本升级
在系统平稳运行一年的基础上,为提供更好的服务,现针对java,kafka,flume,zk,统一进行版本升级,请各位小伙伴跟着走起来,不要掉队啊! 名称 老版本号 新版本号 jdk 1.7.0_25 1.8.0 kafka 2.10-0.8.0.1 2.10-0.10.2.1 flume 1.6.0 1.7.0 zookeeper 3.4.6原创 2017-07-21 16:10:53 · 3481 阅读 · 2 评论 -
flume高并发优化——(14)解决空行停止收集数据问题,及offsets变小问题
日志平台运行一段时间,发现日志有部分丢失,通过检查日志,发现有两个问题导致数据丢失,一个是遇到空行后,日志停止收集,还有就是kafka监控offsets时变小,通过分析代码,找到如下方法:空行问题: 在系统稳定运行一段时间之后,发现了一个致命性的bug就是在遇到空行时,无法自动跳过,导致识别为文件结束,再次读取还是空行,跳入了死循环解决办法: 解决的办法也非常简单,就是增加对文件大小与当前行数的原创 2017-07-21 15:42:48 · 2616 阅读 · 2 评论 -
一起学docker(3)--安装并运行ubuntu
看了前两篇博客,是否是已经摩拳擦掌了,我们马上开始1,docker安装(ubuntu系统) docker还是对linux做的最好,如果你是windows,建议先安装个虚拟机,装一个linux,然后在进行实验,毕竟线上环境大多是linux。sudo apt-get install docker.io静静等待,一路yes下去,docker就在你面前。2,下载镜像安装好docker后,启动原创 2016-09-30 16:19:46 · 6724 阅读 · 5 评论 -
一起学docker(2)--基本概念
学习docker,几个概念非常重要,总结一句话,安装过系统吗?和安装系统的概念是一样一样的: 镜像( Image) 容器( Container) 仓库( Repository)我们来一个个解释,我们虽然复用了系统底层,但是我们要启动一个服务,需要完整的一个操作系统服务(不是完整的操作系统,有地方调用就行),那么我们就要整合,而整合好的这些服务,我们和我们不原创 2016-09-30 15:57:30 · 1274 阅读 · 5 评论 -
一起学docker(1)--简介
最近几年docker非常火爆啊,正好公司也有需求,那么,自然就是学习docker的最佳时机,既有欲望,又有需求,对于程序员来说,就像是遇到了“林妹妹”一样,还要老办法,学习任何一种技术,我们都要带着这几个问题: docker是啥? docker怎么做? 为什么是docker? 下面我们就一步步开始解开这几个问题。docker是啥?原创 2016-09-30 15:26:18 · 1403 阅读 · 9 评论 -
flume高并发优化——(8)多文件source扩展断点续传
在很多情况下,我们为了不丢失数据,一般都会为数据收集端扩展断点续传,而随着公司日志系统的完善,我们在原有的基础上开发了断点续传的功能,以下是思路,大家共同讨论:核心流程图: 源码:/* * 作者:许恕 * 时间:2016年5月3日 * 功能:实现tail 某目录下的所有符合正则条件的文件 * Email:xvshu1@163.com * T原创 2016-06-22 18:21:43 · 9567 阅读 · 4 评论 -
翼龙贷——优化经验分享
原创 2016-05-31 13:38:53 · 5783 阅读 · 7 评论 -
flume高并发优化——(6)开发多文件检索source插件
To detect all files in a folderstep: 1,config one path 2,find all file with RegExp 3,tail one children file 4,batch to channal demo: demo.sources.s1.type = org.apache.flume.source.ExecTailSource demo.sources.s1.filepath=/export/原创 2016-05-03 18:20:01 · 8803 阅读 · 3 评论 -
flume高并发优化——(7)RandomAccessFile升级多文件source
本篇文章旨在解决tail文件io断裂问题,我们使用linux原生的tail ,启动多个线程,做到对多个文件的数据收集,但是,随着业务日志增多,日志以日期分割,是个常用的做法,但是这样,就使得我们的flume插件在日期交换的凌晨,出现io断裂,造成不能继续收集数据原创 2016-05-11 11:54:02 · 5474 阅读 · 2 评论 -
flume高并发优化——(2)精简结构
大家在上篇博客中,可以看到,对flume本身的优化,我们可以说是一个较大的进步,但是,后期梳理时,发现,数据的处理经过了很多没有必要的步骤,我们的处理有些多余,但是精简哪里,又成为了一个问题,本篇博客带领大家一起看看,精简的关键位置及效果。还是老样子,大家会议上篇博客的架构: 不难看出,有一个性能点就是从主端口下发的时候,三个端口到es的过程中,为了让数据有较好的缓冲,我们使用了ka原创 2016-04-25 16:51:27 · 8221 阅读 · 9 评论 -
APM监控--(一) 分布式系统服务跟踪技术选型参考
选型目的 随着公司业务的与日俱增,各个系统也越来越复杂,服务间的调用,服务的依赖,以及分析服务的性能问题也越棘手,因此引入服务追踪系统尤为重要。现有的服务追踪体系,基本都是参考Google的Dapper的体系来做的。通过跟踪请求的处理过程,来对应用系统在前后端处理、服务端调用的性能消耗进行跟踪(每个请求的完整调用链路,收集调用链路上每个服务的性能数据),方便工程师能够快速定位问题。主...原创 2018-03-27 15:45:02 · 4970 阅读 · 4 评论 -
APM监控--(二)Pinpoint部署手册
一,pinpoint是什么简单的说,Pinpoint是一款对Java编写的大规模分布式系统的APM工具,有些人也喜欢称呼这类工具为调用链系统、分布式跟踪系统。我们知道,前端向后台发起一个查询请求,后台服务可能要调用多个服务,每个服务可能又会调用其它服务,最终将结果返回,汇总到页面上。如果某个环节发生异常,工程师很难准确定位这个问题到底是由哪个服务调用造成的,Pinpoint等相关工具的作用就是追踪...原创 2018-03-27 15:52:09 · 7687 阅读 · 11 评论 -
APM监控--(三)zipkin部署手册
一,基础知识储备分布式跟踪的目标一个分布式系统由若干分布式服务构成,每一个请求会经过多个业务系统并留下足迹,但是这些分散的数据对于问题排查,或是流程优化都很有限,要能做到追踪每个请求的完整链路调用,收集链路调用上每个服务的性能数据,计算性能数据和比对性能指标(SLA),甚至能够再反馈到服务治理中,那么这就是分布式跟踪的目标。分布式跟踪的目的zipkin分布式跟踪系统的目的:zipkin为分布式链路...原创 2018-03-27 15:58:58 · 3018 阅读 · 3 评论 -
RPC框架几行代码就够了
原文博主就是阿里dubbo的作者,这里引用下大神的教学代码,给小白科普下最简单rpc如何实现:核心实现: /* * Copyright 2011 Alibaba.com All right reserved. This software is the * confidential and proprietary information of Alibaba....转载 2019-03-04 14:54:43 · 448 阅读 · 0 评论 -
了解下Mysql的间隙锁及产生的原因
什么是间隙锁当我们用范围条件而不是相等条件检索数据,并请求共享或排他锁时,InnoDB会给符合条件的已有数据记录的索引项加锁;对于键值在条件范围内但不存在的记录,叫做“间隙(GAP)”,InnoDB也会对这个“间隙”加锁,这种锁机制就是所谓的间隙锁(NEXT-KEY)锁。危害因为Query执行过程中通过范围查找的话,他会锁定整个范围内所有的索引键值,即使这个键值并不存在。间隙锁有一个比较致...转载 2019-03-03 14:38:03 · 1028 阅读 · 0 评论 -
mysql mvvc 简单理解
先说下我自己的理解,总结为图如下:MVCC的全称是“多版本并发控制”。这项技术使得InnoDB的事务隔离级别下执行一致性读操作有了保证,换言之,就是为了查询一些正在被另一个事务更新的行,并且可以看到它们被更新之前的值。这是一个可以用来增强并发性的强大的技术,因为这样的一来的话查询就不用等待另一个事务释放锁。这项技术在数据库领域并不是普遍使用的。一些其它的数据库产品,以及mysql其它的存储...转载 2019-03-03 10:55:31 · 7329 阅读 · 1 评论 -
Aviator表达式求值引擎
Aviator是一个轻量级、高性能的Java表达式执行引擎,它动态地将表达式编译成字节码并运行。特性包括:支持绝大多数运算操作符,包括算术操作符、关系运算符、逻辑操作符、位运算符、正则匹配操作符(=~)、三元表达式(?:) 支持操作符优先级和括号强制设定优先级 逻辑运算符支持短路运算。 支持丰富类型,例如nil、整数和浮点数、字符串、正则表达式、日期、变量等,支持自动类型转换。 内...转载 2018-12-08 15:04:44 · 4202 阅读 · 0 评论 -
flume高并发优化——(17)解决cpu占用高的问题
在博客中,我们通过《jstack分析cpu占用高应用》,发现flume占用过高,通过分析代码,发现了一个死循环,这里给大家看看两个代码的差别:old://读到空行 if(line==null||line.trim().length()<1){ while (true){ ...原创 2018-07-24 17:59:32 · 2890 阅读 · 0 评论 -
ElasticJobListener 2.1.5 分布式唯一性保证bug修复
最近执行esjob的时候,发现有一定的情况下,出现分布式监听执行了多次的情况,通过对比源码,我们发现一个问题old version: @Override public final void beforeJobExecuted(final ShardingContexts shardingContexts) { guaranteeService.registerStart(s...原创 2018-07-10 16:08:29 · 2270 阅读 · 2 评论 -
为什么不应该使用ZooKeeper做服务发现
本文作者通过ZooKeeper与Eureka作为 Service发现服务(注:WebServices 体系中的UDDI就是个发现服务)的优劣对比,分享了Knewton在云计算平台部署服务的经验。本文虽然略显偏激,但是看得出Knewton在云平台方 面是非常有经验的,这篇文章从实践角度出发分别从云平台特点、CAP原理以及运维三个方面对比了ZooKeeper与Eureka两个系统作为发布服务的 优劣,...转载 2018-06-19 14:58:46 · 1052 阅读 · 0 评论 -
elastic-job2 项目接入(spring,maven)
最近系统在使用esjob进行定时任务管理,现将接入过程分享给大家:引入依赖<dependency> <groupId>com.dangdang</groupId> <artifactId>elastic-job-lite-core</artifactId> <version>2.1.2<...原创 2018-06-21 10:04:53 · 7382 阅读 · 0 评论 -
二维码登录(三)扫码登录
承接上篇博客,在进行二维码生成之后,app进行扫码,扫码成功之后,手机点击登录,进行绑定登录关系,后台做自动关联与自动登录。本文git地址:https://github.com/xvshu/qrlogin1,扫码登录页面此页面是模拟app登录页面,功能是扫到二维码后,自动跳转授权页面,授权成功,调用后台服务进行登录关系绑定 代码:<%@ page ...原创 2018-06-04 20:24:00 · 16595 阅读 · 3 评论 -
二维码登录(二)生成二维码
承接上篇博客,本文旨在实现二维码生成的功能,并在redis中存储一个key方便后期APP端扫码时做映射本文代码git https://github.com/xvshu/qrlogin1,生成二维码请求action主要是生成一个唯一标识的key,本次以时间戳为测试key,存入redis,并传回前台,生成相关页面以供APP扫描 package com.el.qr.login.web;impor...原创 2018-06-04 20:13:10 · 5141 阅读 · 1 评论 -
二维码登录(一)概要设计
# 引言## 编写目的和范围随着智能机的普及,在手持设备端做用户验证是一种较为高效,安全的手段,而在pc端利用已经鉴权过的手持设备扫码登录不仅方便,而且安全。本文档旨在指导二维码登录功能的开发。#全局数据结构说明redis节点存储数据格式为hash结构: key:qrlogin_年月日 field:qrlogin_唯一标识 value:用户id 失效时间:2天#模块设计整...原创 2018-06-04 19:47:53 · 7136 阅读 · 1 评论 -
个人微信小程序--大叔工具箱
前言最近比较好奇微信推出的小程序,火爆的程序已经不需要过多介绍了,这篇文章待着大家一步一步搭建自己的微信小程序,大叔工具箱是我自己开发的小程序,目前进度是审核中,大家喜欢的可以玩一玩,源码全部分享在git上,喜欢的可以clone下(https://github.com/xvshu/WX_Uncle-s-Toolbox)原创 2018-05-09 16:54:46 · 4357 阅读 · 3 评论 -
P2P金融公司常见组织职责图
根据目前经历的P2P类金融服务的公司,总结了下常见的公司技术部组织职责,仅供参考原创 2018-04-24 17:56:56 · 1010 阅读 · 1 评论 -
APM监控--(四)Pinpoint扩展报警--超详细,各种问题解决之后的顺畅版本
部署完成pinpoint之后,并没有开放报警功能,而报警是每个公司都必要的功能,以下就跟着我一起开始开发报警功能并部署到服务器。1,下载源码包地址:https://github.com/naver/pinpoint/releases选择对应版本源码包,本次为1.7.1,单击下载2,编译源码在maven端增加了很多检查和限制,保证jdk版本1.8,maven为3.1.1就可以去除这些限制,修改后po...原创 2018-04-04 11:35:27 · 18427 阅读 · 2 评论 -
权限管理框架实现(3)--jquery自定义标签
上篇文章,介绍了,使用ValueStack对权限进行控制,但是还是需要前台工作者去写,其实,我们利用jquery,就可以做到对html标签的控制,基本思路如下:1,获取所有特殊标签集合2,ajax后台申请权限3,判断返回值,没有权限则消除标签具体js代码如下1,获取集合 var authObjs = $("auth[TestAuth='true']");2,ajax申请后台 $.ajax({原创 2016-04-12 15:07:33 · 5778 阅读 · 2 评论 -
权限管理框架实现(2)--Struts中ValueStack使用
众所周知,struts中,数据交互是走的ValueStack,在权限交互中,我们有些数据,存储到ValueStack中,更容易被用户利用,用户可以在jsp或者其他框架下,利用已有的数据,让前台不需要关心权限数据是如何存储的,只需要关心我们某一个权限标示是否被通过了,这是如何实现的呢?大家看源码。1,生命周期 在struts-default.xml文件中决定了在web容器启动时将会创建原创 2016-04-12 14:48:00 · 3221 阅读 · 1 评论 -
Java集群优化——必须了解的内存溢出与内存泄露
我们操作某些变量,ide环境给我们提供了非常好的便利性,jvm为我们封装了优秀的自动垃圾回收机制,但是,我们还是那句话,人是不可靠的,这句话使我们反复认识自己,同样,内存的问题,我们也要深入研究,因为这是大型软件优化不可避免的地方!原创 2015-08-14 20:25:04 · 3908 阅读 · 7 评论 -
Java集群优化——dubbo+zookeeper构建高可用分布式集群
互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,Dubbo是一个分布式服务框架,在这种情况下诞生的。现在核心业务抽取出来,作为独立的服务,使前端应用能更快速和稳定的响应。第一:介绍Dubbo背景 大规模服务化之前,应用可能只是通过RMI或Hessian等原创 2015-08-14 21:28:35 · 45245 阅读 · 7 评论 -
Java IO:了解I/O模型
初听IO,我也是一头雾水,难道除了写入,读出,还有其他的吗?的确在IO的世界中,只有写入读出,但是业务不同,选择的框架不同,IO也会表现不一,而在互联网编程中,IO编程,越来越成为瓶颈,这次,咱们一起来学习下,当下流线个IO概念,下面从同步和异步的概念 说起,然后是阻塞和非阻塞的区别及阻塞IO和非阻塞IO的区别,然后介绍同步IO和异步IO的区别,接下来介绍了5种IO模型,最后介绍了两种和高性能IO原创 2015-08-14 19:47:05 · 2155 阅读 · 5 评论 -
java集群优化——初探多线程
要想使用多线程,咱们就有必要先了解下多线程,在不久以前,我写过相关的文章,在这简单回顾下,一个程序加上数据,就构成了一个进程,就好比快递公司是个进程,快递公司的方法就是送快递,快递员好比线程,他们都是送快递,只是负责区域不同,那么最简单的多线程是怎么实现的呢? 简单说实现多线程有很多种方法,而java这里主要有两种,一种是继续Thread类,另外一种是实现Runable接口,我们今原创 2015-06-30 01:09:05 · 2687 阅读 · 6 评论 -
java集群优化——ORM框架查询优化原理
众所周知,当下的流行的企业级架构中,ORM一直是最基础的部分,在架构设计的底层,对逻辑层提供面向对象的操作支持,而事实总是和我们预想的有所偏差,ORM在提供了较好的操作体验时,也流失了一部分原生SQL的灵活性与高效性,当然,这个问题不影响我们使用ORM框架,但是却阻碍了我们网站流量的提升,尤其是在企业级的多关系复杂查询方面,性能瓶颈是不得不提的部分!原创 2015-07-27 17:32:23 · 1811 阅读 · 5 评论 -
java集群优化——多线程下的单例模式
在最初学习设计模式时,我为绝佳的设计思想激动不已,在以后的工程中,多次融合设计模式,而在当下的设计中,我们已经觉察出了当初设计模式的高瞻远瞩,但是也有一些不足,需要我们去改进,有人说过,世界上没有绝对的事,当然,再简单的事情,环境变了,也会发生变化,今天和大家一起分享在多线程下单例模式的优化。 细节的优化,就像雕琢一件艺术品,我们接触的高人越多,这样的思想就越浓厚,所以,我们常常判断一个人事怎么的品格与素质,通过他接触的人,朋友就可以推测出来,而计算机内,也是如此,我们接触的优秀框架多了,自原创 2015-07-28 17:13:23 · 4535 阅读 · 9 评论