自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Cumu Blog

cumu

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

原创 从零到日志采集索引可视化、监控报警、rpc trace跟踪-分布式唯一ID生成

在平时的工作中如果将数据库进行了分库分表,那么肯定需要分布式唯一ID的生成策略。rpc trace跟踪模块也需要一个分布式唯一ID的生成器,本文介绍基于snowflake改造的分布式唯一ID生成策略。根据snowflake的算法,做了些许改变,唯一ID是一个int64的值,第一位占位,接下来40位为毫秒级的时间,接下来13位(支持8192个)为app和host组合的分配的值(即在N个服务器上每个服

2017-04-26 09:46:47 3576 3

原创 从零到日志采集索引可视化、监控报警、rpc trace跟踪-系统上下线监控

之前说到注册中心的设计,zookeeper中的节点部署如下:kafkaAppender初始化向zk进行app节点注册,并写入相关的信息kafkaAppender发生异常暂停工作会向app节点写入相关信息,以便监控系统能够实时感知并发送报警app正常或者异常退出后,zk中的app临时节点会消失,shutdownhook会正常运行,监控系统能够实时感知并发送报警(这里就需要我们在自定义的log

2017-02-16 15:49:22 2169 4

原创 从零到日志采集索引可视化、监控报警、rpc trace跟踪-日志索引

之前说到日志事件的设计、如何埋点以及基于jvm的程序如何对接我们的系统,接下去我们说下日志如何进行索引。通过前三篇博客可以知道数据通过LOGGER.info等打印日志的函数就可以存入kafka,所以我们对日志建立索引只需要实时读kafka写入es,为了提高实时索引的速率,我们会部署3个实例实时消费kafka的9个partition,并且使用es的bulk load api,这样测试下来大概3台

2017-02-07 10:00:30 1752 2

原创 从零到日志采集索引可视化、监控报警、rpc trace跟踪-日志事件、埋点设计及对接

日志事件设计为了处理不同事件类型的日志,我们将不同业务含义的日志抽象成了日志事件,具体如下:public enum EventType { normal(Constants.EVENT_TYPE_NORMAL, "正常入库日志"), invoke_interface(Constants.EVENT_TYPE_INVOKE_INTERFACE, "api调用"),

2017-01-20 09:47:27 3284 2

原创 从零到日志采集索引可视化、监控报警、rpc trace跟踪-自定义日志框架

这里不去分析哪种日志采集方式最好,不对flume、logstash等其他软件做比较,我这边只会介绍适合我们公司使用的系统。由于我们公司部署的项目采用的都是java或者scala项目,日志的框架是log4j或者logback。日志的采集应该是不侵入或者最少侵入对接系统,所以我们使用轻量级的方式,自定义log4j和logback的kafka appender,将log输出的日志同时走kafka a

2017-01-19 09:20:49 2247

原创 从零到日志采集索引可视化、监控报警、rpc trace跟踪-架构介绍

接下去的几篇博客将介绍如何从零开发出一套集零侵入的日志采集、日志索引及可视化、基于日志监控报警、基于日志rpc trace跟踪进行系统性能分析的系统,之后都会称为监控中心系统。经测试,该系统的采集以及处理延迟在2秒以内,基本上做到了实时,其中日志采集模块在3台pc机器上测试下来大概每秒能够索引2.5w左右的日志,并且能够随着机器的增加性能水平扩展,每秒能够有效得处理50w+条的日志。本篇作为第

2017-01-18 10:37:11 7235 1

原创 feign-底层http请求组件剖析

这篇文章主要介绍下feign底层使用的http发送请求的组件,下面就一步步得来做剖析。     我们知道使用feign的时候两个重要的注解@FeignClient和@EnableFeignClients,这两个注解分别是标识是一个feign的client,在启动的时候需要去扫描和register相应的信息,和允许使用feign的client,我们查看源码可以知道这两个注解都来自于org.sprin

2017-06-15 09:48:14 11591 2

原创 feign-使用最佳实践

Spring Cloud提供的微服务都是基于http,那么在请求的时候如果用spring提供的RestTemplate再加一个Ribbon提供的@LoadBalanced注解也是可以比较方便的发起微服务的调用,并且也能做到负载均衡。但是如果服务提供者参数较多也较复杂,那么使用这种方式需要拼接url或者使用Map的形式,但总归是不便于开发的。     Spring Cloud全家桶提供了feign这

2017-06-14 20:37:27 10772 1

原创 spring-cloud logback日志初始化问题

记得在之前的博客中讨论过spring-boot中logback的启动问题,见:http://blog.csdn.net/jthink_/article/details/52513963     当时讨论了loback会初始化两次的问题以及如何只让logback自己初始化,当时的版本是1.3.6。     最近在调研spring cloud相关的技术,当加入spring cloud的时候发现logb

2017-06-12 14:54:40 6874 2

原创 高可用eureka server搭建

作为一个注册中心,为了确保微服务能够正常的注册和发现,单机的eureka server肯定不能满足这样的需求,如果注册中心挂掉,那么线上的所有服务都会有影响,那么需要有一个高可用的eureka server来支撑,本文主要介绍高可用的eureka server的搭建。     在eureka的服务治理设计中,所有的节点既是服务提供方,也是服务消费方,服务注册中心也是,那么eureka server

2017-06-06 14:24:39 2812

原创 基于jenkins构建应用的docker镜像做持续集成和部署

为了做持续的集成和部署,引入了jenkins,利用jenkins来构建应用的docker镜像并push到私有仓库,然后再基于应用的docker镜像来发布项目,这样减少了很多的手动操作,基本能实现持续集成和持续部署。项目基本骨架该项目是gradle的项目,代码类似于https://github.com/JThink/SkyEye/tree/master/skyeye-alarm,这里除了源码和gra

2017-04-27 10:11:09 12067 11

原创 基于docker compose的应用服务部署

接上文介绍docker的编排工具来部署,这里采用原生的compose方式,以后再介绍k8s如何做。本文介绍的例子为:https://github.com/JThink/SkyEye,4个服务提供了一组完整的应用。直接上docker-compose.ymlversion: '3'services:  skyeye-alarm:  image: 192.168.xx.xx:5000/xxx/sky

2017-04-24 15:50:44 1259 4

原创 基于docker的应用服务部署

docker部署一个服务将会有多种方式,本文将一步步介绍。创建应用镜像(简单的取队列发邮箱的项目,见:https://github.com/JThink/SkyEye/tree/master/skyeye-alarm)Dockerfile# build the base image: jdk# this is the docker file, use the ubuntu 14.04-jdk7#

2017-04-20 15:20:22 1970 4

原创 docker基础镜像制作

项目往基于容器上迁移,涉及到最基本的基础镜像制作,本文介绍制作一个基础的jdk的镜像并push到私有仓库。准备文件sources.list由于需要使用apt安装一些相关的组件,将源指向我们公司内部的源,内容如下:deb http://192.168.88.8/ubuntu/ trusty main restricted universe multiversedeb http://192.168.8

2017-04-18 15:55:29 6276 4

原创 创建认证授权的docker私有仓库

之前介绍过简单的搭建docker私有仓库的方法(见http://blog.csdn.net/jthink_/article/details/50596239),但是如果是在测试、开发、生产环境中都使用该私有仓库,必须做一些认证授权相关的限制,否则任何人都能创建和更改一个镜像,这样有可能会对镜像造成污染。安装docker简单方式,daocloud提供的方式:curl -sSL https://get

2017-04-18 11:23:29 2979 4

原创 自定义spring-boot-starter-dubbox

项目背景代码DubboAutoConfigurationDubboPropertiesDubboServicespringfactoriesgithub地址打包使用方式依赖集成使用生产者消费者项目背景公司越来越多的项目采用spring-boot+dubbox的soa服务架构,由于dubbox本身没有spring-boot的starter,故写出一个spring-boot

2017-03-21 15:55:24 3809 2

原创 自定义spring-boot-starter-hbase

项目背景代码DubboAutoConfigurationDubboPropertiesDubboServicespringfactoriesgithub地址打包使用方式依赖集成使用生产者消费者项目背景公司越来越多的项目采用spring-boot+dubbox的soa服务架构,由于dubbox本身没有spring-boot的starter,故写出一个spring-boot-

2017-03-21 15:52:30 6489 5

原创 scala java+spring boot写spark程序骨架

介绍下scala如何配合spring boot框架进行项目开发,由于scala和java一样都是运行在jvm中的,所以和java一样,scala配合spring boot使用几乎和java一样,由于java和scala各有各的特性,处理的场景不同(比如scala天生适合集合的处理),所以有的时候还是需要用java来处理较为方便,所以该骨架中将java和scala一起进行混编,最终打成jar包提供部

2017-01-17 15:20:22 10966

原创 httpclient 多线程高并发Get请求

最近公司需要对地址进行清洗,挑选了百度的LBS平台的Geocoding API v2接口,量级在千万级别。为了达到较高的效率,优化了下httpclient(版本:4.2.3)的get请求,具体的就是使用http的连接池,这样不需要每次get都需要3次握手,大大提高了并发能力,并且失败率降低了100倍,具体代码如下:public class HttpRequest {

2016-10-21 19:06:10 20532 8

原创 kafka java api 消费入es

最近在做日志监控,日志通过logback或者log4j写入kafka,需要用kafka的java api写个消费端。由于是进行日志消费,可以允许有一定的丢失和重复消费,但是应该尽量避免。代码:public class KafkaConsumerTest {    private static Logger LOGGER = LoggerFactory.getLogg

2016-09-30 10:34:45 5155

原创 es的java bulk load

es的java bulk load,直接贴代码public class BulkLoad {    public static void main(String[] args) {        if (args.length != 5) {            System.out.println("参数1 集群名字");            Sy

2016-09-30 10:15:05 1386

原创 kafka集群搭建

安装zookeeperkafka自带了zookeeper,建议还是用外部的zk集群,搭建步骤如下: 准备3台机器,假设我们叫c1、c2、c3,ip分别为ip1、ip2、ip3将附件zookeeper-3.4.6.tar.gz分别拷贝至3台机器c1机器上解压zookeeper-3.4.6.tar.gz得到zookeeper-3.4.6,在zookeeper-3.4.6上一级目录创建dat

2016-09-30 09:30:40 2127

原创 spring-boot使用logback的坑2

接上篇说道spring-boot在使用logback的坑之后又发现一个坑,自定义的appender以及原生的appender的stop()方法不会调用,导致部分清理工作无法完成。原因:上篇说到去掉了LoggingApplicationListener使spring-boot不再管理logback,导致没有add一个shutdownhook首先我们去掉上篇的方法,让spring-boot依旧

2016-09-21 22:03:09 18456

原创 spring-boot使用logback的坑

最近在写一个logback的kafka appender,无意中发现spring-boot在使用logback时的一个坑用ConsoleAppender.java来举例,假设在logback.xml中使用了该appender,那么这个类的相关的初始化方法都会调两次,如start()方法打断点进行debug,第一次进入start()方法如下:可以看到所有的调用链(除了自己代码的方

2016-09-12 15:30:00 19036 2

原创 elasticsearch集群安装部署、监控以及架设sql引擎

官网下载es(时间点:2016-07-06,版本:2.3.3)下载地址https://www.elastic.co/downloads解压配置文件修改配置文件在config下elasticsearch.yml,日志配置文件在config下logging.yml修改elasticsearch.yml(node.name需要每个节点不同),内容为:# 集群名称cluster

2016-07-11 10:18:36 2102

原创 hive udf写hbase

最近遇到新的需求,需要将hive脚本运行输出的结果存入hbase,故写出一个通用的hive udf来满足该需求,具体代码如下:import org.apache.hadoop.conf.Configuration;import org.apache.hadoop.hbase.HBaseConfiguration;import org.apache.hadoop.hbase.TableN

2016-02-24 10:36:18 2573 3

原创 docker创建disconf镜像并应用

由于disconf的环境比较复杂,不适合使用dockerfile的方式进行创建,我们使用commit的方式进行创建。启动容器选择一个ubuntu:14.04的基础镜像,进入镜像(sudo docker run -ti -d image /bin/bash   然后用docker-enter进入容器)首先修改软件源为本地的或者国内的,这样下载比较快。在/etc/apt/sources

2016-02-16 11:10:06 1793 2

原创 docker安装以及私有库搭建

安装14.04之前的版本先执行以下命令sudo apt-get updatesudo apt-get install linux-image-generic-lts-raring linux-headers-generic-lts-raringsudo reboot重启了之后执行如下命令sudo apt-get install apt-transport-httpssu

2016-01-27 19:24:53 2022

原创 disconf-基于xml分布式配置管理cronjob

本文介绍disconf如何管理cronjob的配置spring的cronjob有2种实现方式:存入哦你job和scheduler新建cronjob.properties,内容为:# cron jobtask.pool.size=20task.getMoney.delay=1000task.getCar.cronExpression=*/1 * * * * ?新建cronjo

2016-01-26 16:38:39 1023

原创 disconf-基于xml分布式配置管理hbase

本文介绍如何使用disconf管理hbase的配置新建hbase.properties,内容为:# hbase confighbase.quorum=iphdfs.namenode.host=iphdfs.namenode.port=8020hbase.contrast.trans.table=contrast_trans新建hbase.xml,内容为:xml versio

2016-01-26 16:37:54 1310 2

原创 disconf-基于xml分布式配置管理redis

本文介绍disconf如何管理redis(单机和集群)的配置redis单机注意,pom中jedis的版本必须2.4.2及以下版本,否则报错新建redis-single.properties,内容为:# redis jedis version 2.4.2redis.host=localhostredis.port=6379redis.password=新建redis-sing

2016-01-26 16:36:33 3117 6

原创 disconf-基于xml分布式配置管理mongo

mongodb目前有3种部署方式:单机、副本集(replica set)、分片(shard),本文结合disconf介绍这3种部署方式该如何和disconf配合使用单机版本a. 在resources文件夹下新建mongo-single.properties,内容为:# mongomongo.db.name=xxxdbmongo.host=localhostmongo.port=27

2016-01-26 16:35:54 1964 2

原创 disconf-基于xml分布式配置管理mysql

上一篇介绍了基于annotation的分布式配置管理,但该种方式对代码的侵入性太大,我们已有很多项目需要使用该配置平台,所以不能有太多的代码侵入性,这篇来介绍下基于xml的分布式配置管理,以mysql举例,我们项目中连接mysql是用的spring-data-jpa。     同基于annotation的分布式配置管理一样,我们需要首先在pom中引入disconf的依赖,准备好discon

2016-01-21 17:44:42 4180 2

原创 disconf-注解式分布式配置

disconf-web配置在disconf-web上点击新建app创建一个新的app,这里假设app名字为:app_test在disconf-web上点击新建配置文件新建一个配置文件,APP选择刚刚的app_test,版本自定义成:0.0.1,环境可选择local环境,直接选择上传文件,比如我们这里上传dev.properties,内容如下:disconf.test=disco

2016-01-21 17:44:15 11461 6

原创 disconf-搭建

环境配置disconf运行需要如下软件:mysql、nginx、tomcat、zookeeper、redis,这个网上可以找到很多种安装配置的方法clone disconfdisconf的代码在github上开源了,是一个很好的分布式配置管理平台,github上很多人fork了下载至本地cd work/githubgit clone https://github.com/kni

2016-01-18 20:03:08 17750 15

原创 mongodb集群搭建-分片

分片介绍当存入mongo的数据很大的时候,我们需要选择将数据分片存放到不同的机器上。分片不同于副本集,副本集中主从存放的数据都一样,但是不同分片存放的数据是不同的,所有的分片组成了集群,存放着所有的数据。配置服务器配置服务器相当于集群的大脑,保存着集群和分片的元数据(个人理解和hbase的meta root表类似),即各分片包含哪些数据的信息configsvr.conf内容如下:d

2016-01-15 15:24:54 800

原创 mongodb复制-副本集

复制简介       配置一个单节点的mongo服务器适用与学习和测试环境,在线上真正的生产环境中我们需要使用复制将数据副本保存在多台服务器上,一台或者多台服务器挂掉之后可以顺利得通过选举算法选举出新的主节点。       这样的多台服务器组成了mongo的副本集,副本集中有一个主节点和多个从节点,主节点用于读和写,从节点用于读(需要设置slaveOk为true,并且是在客户端设置),当主

2016-01-14 11:25:50 784

原创 redis3.0.6集群安装部署

前期准备目前官网最新的redis stable版本为:3.0.6(时间点:2015年12月21日下午14点54分),支持集群安装部署。首先下载最新版的tar包,scp到机器上(本文将会安装6个节点,3个主节点、3个从节点,由于redis默认需要3个主节点,如果想每个主节点有一个从节点这是最低配要求),端口都采用默认的6379修改配置将下载的tar包解压,修改redis-3.0.6下的r

2015-12-21 19:31:23 14752

原创 不等key的reduce

场景描述       假设有这样的场景,现在需要计算文章标题的相似度,具体算法见http://www.lanceyan.com/tech/arch/simhash_hamming_distance_similarity.html。接下去算下的结果为:标题相似度值A13B14C15

2015-12-15 14:17:03 888

原创 基于yarn的公平调度实例

场景描述      假设遇到这样的客户,需要在公司内部的集群上进行任务提交运行,客户的任务是每天跑取一些比较简单的mr程序(凌晨提交上来,需要在当天的6点之前运行结束),而公司内部自己需要用集群做相应的计算,计算主要是每个月的月初开始执行,一共100多个mr,大概需要执行半个月(前提是mr一个个得提交,资源利用率比较低下)。为了客户任务和公司内部自己的任务能够并行运行,同时确保在规定的时间内完

2015-12-01 17:19:57 4288

空空如也

空空如也

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

TA关注的人

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