- 博客(56)
- 资源 (3)
- 收藏
- 关注
原创 Cassandra集群部署最优配置
内存选择Cassandra节点没有最合适的内存配置,内存的大小取决于节点需要处理的数据。一般来说,集群节点至少需要8GB的内存,所部署的服务器服务器至少需要有64GB到256GB的内存。如果Cassandra节点的内存给的太小,那么节点的memtables就会越小,这就意味着该Cassandra节点就会在硬盘上生成大量的小SSTable。查询的时候就会消耗更多的磁盘I/O。对性能影响很大。所以说,赋给Cassandra节点的内存越大,节点的性能就会越好。CPU选择Cassandra需要处理大量的写
2021-04-11 14:56:04
2018
原创 Zookeeper运维之四字命令
zookeeper提供四字命令来对zookeeper进行监控或管理。四字命令的打开方式:echo mntr | nc localhost 2181telnet localhost 2181 然后输入 mntr四字命令说明:四字命令说明confconf命令用于输出Zookeeper服务器运行时使用的基本配置信息。包括clientPort, dataDir和tickTime等,以便于运维人员快速地查看Zookeeper当前运行时的一些参数。conscons命令会用于输
2021-01-06 18:28:18
1310
原创 Spring Boot是如何启动Web Container和Spring MVC的
Spring Boot一般使用starter来整合第三方框架与扩展功能。其套路是:定义一个XXXXAutoConfiguration的类。其中XXXX一般可以写成所需集成的功能或框架。其上可定义@Conditional相关注解,指定何时可初始化该功能。 在该类上@Import一个ImportBeanDefinitionRegistrar接口的实现类来注入指定的Bean。 添加自定义的Bea...
2018-07-22 13:15:13
2278
原创 Spring Boot常用注解总结
Spring Boot是Spring框架对“约定优于配置(Convention Over Configuration)”理念的最佳实践产物。一个典型的Spring Boot应用本质上就是一个基于Spring框架的应用。Spring Boot使用注解的方式对Bean和配置进行收集,注册,分析和组装。简化了基于XML配置文件的开发。能够快速地构建出一个应用程序。以下注释基于Spring Boot 1....
2018-07-21 17:46:08
4793
原创 查看Linux环境下MySQL是哪个java进程在链接
首先,在mysql cli中执行如下命令:MySQL [appcpa_bitmap]> show processlist;+-----------+--------+--------------------+---------------+---------+-------+-------+------------------+| Id | User | Host ...
2018-06-10 10:17:11
1402
1
原创 ScyllaDB调研分析
ScyllaDB介绍ScyllaDB是用C++重写的Cassandra,其官网宣称其每节点每秒可处理100万TPS。ScyllaDB完全兼容Apache Cassandra,拥有比Cassandra多10X倍的吞吐量,并降低了延迟。ScyllaDB是性能优异的NoSQL列存储数据库。ScyllaDB在垃圾收集或者Compaction的时候不需要暂停(但是通过压测和Longevity测试发现Comp...
2018-05-19 21:01:59
9832
原创 MySQL中ID自增的远比记录数大的一个原因
创建一个表:CREATE TABLE `xxx_stat` ( `id` int(11) NOT NULL AUTO_INCREMENT, `appkey` varchar(100) DEFAULT NULL, `value` bigint(20) DEFAULT '0', `date` varchar(10) DEFAULT NULL, `hour` varchar(2) D...
2018-05-15 11:40:05
1908
转载 一篇文章,掌握所有开源数据库的现状
link from http://www.phpchina.com/portal.php?mod=view&aid=40116摘要:数据库作为业务的核心,在整个基础软件栈中是非常重要的一环。近几年社区也是新的方案和思想层出不穷,接下来我将总结一下近几年一些主流的开源数据库方案,其背后的设计思想以及适用场景。本人才疏学浅如有遗漏或者 ... 数据库作为业务的核心,在整个基础软件栈中是非常重要...
2018-05-09 10:14:12
494
原创 java中IP地址与long之间的转换
IP地址转为long型: public static long ipToLong(String ip) { String[] ipArray = ip.split("\\."); List ipNums = new ArrayList(); for (int i = 0; i < 4; ++i) { ipNums.add(Long.valueOf(Long.parseLon...
2018-05-04 08:52:42
4430
1
原创 Java生成二维码
首先,引入maven包: <!-- https://mvnrepository.com/artifact/com.google.zxing/core --> <dependency> <groupId>com.google.zxing</groupId> <artifactId>core</artifactId&g...
2018-05-03 09:40:44
191
原创 Druid源码分析之Query -- Sequence与Yielder
Druid设计了一种可以迭代的序列叫Sequence,其实现在java-util包中。它是对Iterator操作的高级封装。但是它与普通的Iterator不同,它不会为您提供从中提取值的方式,而是提供了一个累加器(Accumulator)并定义数据如何操作。这种控制反转(IoC)的方式是为了更好的让Sequence进行资源管理。当执行结束时,它可以强制调用close()方法来清除资源。如果没有这种...
2018-04-27 11:27:46
1630
原创 Druid解析之管理用的接口大全
在介绍之前,先列一下Druid各部分的端口号(在代码Main.java中):Coordinator8081Historical8083Broker8082Realtime8084Overlord8090MiddleManager8091Router8888下面是管理命令:1. 查询某个Meta Datasource下所有的segments:GET http://<coordinator>...
2018-04-26 09:33:41
3579
原创 Druid原理分析之内存池管理(转)
为了减轻JVM垃圾回收带来的性能波动,Druid尽量使用对外内存和系统内存。使用临时文件,在索引创建和合并的过程中,中间临时结果会占用大量的内存。为了减少JVM内存的使用,采用临时文件,通过文件IO的方式,巧妙地利用内核的Page Cache。为了提升IO的性能,Linux操作系统增加了Page Cahe。文件IO的写操作会写到Page Cache中立即返回,内核会定时将脏页也就是还没写到磁盘的页...
2018-04-24 21:52:00
1213
原创 Druid源码解析之Segment
上篇我们介绍了Druid的Column相关实现原理,本次介绍Segment的实现原理。Column在Druid中用于管理单列,Segment则用于管理一组列。这组列包括了Dimension和Metric。我们首先看下Segment的定义接口:public interface Segment extends Closeable { public String getIdentifier();...
2018-04-24 21:21:51
2589
原创 Druid源码解析之Column
Column是Druid中Segment的基础列的基础接口。其结构图如下所示:首先看下Column接口:public interface Column{ public static final String TIME_COLUMN_NAME = "__time"; public ColumnCapabilities getCapabilities(); public int get...
2018-04-23 22:05:34
1264
原创 Druid源码解析之HDFS存储
Druid自身为各种外围功能定义了很多接口,比如存储就定义了:DataSegmentArchiver:用于对segment文件进行archive与restore,可用在s3之类的存储上,将暂时不用的segment放入到别的bucket中。DataSegmentFinder:用于在特定的目录下查找Druid segment,有时会根据正确的loadSpec更新deep storage上所有的desc...
2018-04-23 09:21:09
1449
原创 Druid源码解析之Coordinator
Coordinator时Druid的中心协调模块,用于解耦各个模块之间的直接联系,负责Segment的管理与分发,控制历史节点上Segment的装载和删除,并保持Segment在各个历史节点上的负载均衡。Coordinator采用定期运行任务的设计模式。它包含一些不同的任务。Coordinator并不是直接和历史节点发生调用关系,而是通过Zookeeper作为桥梁,将指令发送到Zookeeper上...
2018-04-22 20:14:53
1694
原创 DynamoDB的分区与存储的注意事项
DynamoDB的分区如何计算呢?直接上公式:实际设置的读容量/最大读支持3000 + 实际设置的写容量/最大写支持1000 所得结果想上取整。即:(readCapacityUnits / 3000) + (writeCapacityUnits / 1000) = RoundUp(initPartitions).比如实际设置了1000个读和500个写,那么(1000 / 3000 ) + ( 50...
2018-04-22 18:35:27
1815
转载 JAVA 8:健壮、易用的时间/日期API
对很多应用来说,时间和日期的概念都是必须的。像生日,租赁期,事件的时间戳和商店营业时长,等等,都是基于时间和日期的;然而,Java却没有好的API来处理它们。在Java SE 8中,添加了一个新包:java.time,它提供了结构良好的API来处理时间和日期。历史在Java刚刚发布,也就是版本1.0的时候,对时间和日期仅有的支持就是java.util.Date类。大多数开发者对它的第一印象就是,它...
2018-04-22 17:11:51
295
转载 深入解析OutOfMemoryError
译文出处: shenzhang 原文出处:原文链接在Java中,所有对象都存储在堆中。他们通过new关键字来进行分配,JVM会检查是否所有线程都无法在访问他们了,并且会将他们进行回收。在大多数时候程序员都不会有一丝一毫的察觉,这些工作都被静悄悄的执行。但是,有时候在发布前的最后一天,程序挂了。1Exception in thread "main" java.lang.OutOfMemoryEr...
2018-04-20 17:24:37
560
原创 茴香豆系列之单例的几种写法
1. 懒汉式public class Singleton { private static Singleton instance; private Singleton(){} public static synchronized Singleton getInstance(){ if (instance == null) { inst...
2018-04-20 17:21:53
243
原创 Spring中使用Annotation来记录方法的运行时间
在Spring的Java程序中,每个方法写一句log来记录这个方法执行多久是一件很恶心的事情。记录下使用annotation来解决。1. 定义一个annotation@Target({java.lang.annotation.ElementType.METHOD})@Retention(RetentionPolicy.RUNTIME)@Documentedpublic @interface ...
2018-04-20 17:11:14
1427
1
转载 JVM相关参数解析
Java 8相关新特性请参考:https://docs.oracle.com/javase/8/docs/technotes/tools/unix/java.html以下为Java 7的参数:1 行为参数选项和默认值值描述-XX:-AllowUserSignalHandlers允许用户在应用中捕捉信号 (只和Solaris和Linux有关)-XX:AltStackSize=16384备用信号栈大小...
2018-04-20 09:52:39
333
原创 Java应用程序中的资源消耗分析
CPU的消耗查看CPU的消耗,目前最直接的办法就是通过linux系统的top命令来查看。如上文所述。对Java应用程序而言,CPU的消耗主要体现在us,sy两个值上,下面分析下这两个值:1. us当us值过高时,表示运行的应用程序消耗了大部分的CPU。在这种情况下,对Java程序而言,如何找到具体消耗CPU的线程所执行的代码呢?首先通过linux提供的命令找到消耗CPU严重的线程及其ID,将此ID...
2018-04-20 09:44:45
2600
转载 Linux的Top命令解析
top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,常用于服务端性能分析。top命令说明[www.linuxidc.com@linuxidc-t-tomcat-188-193 ~]$ toptop - 16:07:37 up 241 days, 20:11, 1 user, load average: 0.96, 1.13, 1.25Tasks: 231 ...
2018-04-19 22:55:32
210
原创 JVM性能调优监控工具解析
我们在企业级Java开发的过程中有时会遇到以下问题:内存泄漏线程死锁锁抢占CPU占用过高等等JVM提供了一些命令工具可以帮助我们来定位这些问题:1. Jps(Java Virtual Machine Process Status Tool)它主要用来输出JVM中正在运行的进程状态信息。其语法格式如下:usage: jps [-help] jps [-q] [-mlvV] [<h...
2018-04-19 22:49:54
308
翻译 【翻译】Flink + Kafka 0.11端到端精确一次处理语义实现
本文是翻译作品,作者是Piotr Nowojski和Michael Winters。前者是该方案的实现者。原文地址是https://data-artisans.com/blog/end-to-end-exactly-once-processing-apache-flink-apache-kafka2017年12月Apache Flink社区发布了1.4版本。该版本正式引入了一个里程碑式的功能:两阶...
2018-04-12 12:00:39
2053
1
原创 流式处理框架的特点
分布式的流处理是对无界的数据集进行连续不断的处理,聚合,分析的过程。延迟需要尽可能的低(毫秒级或秒级)。这类框架通常采用有向无环图(DAG)来描述和处理作业拓扑。(线性处理也是一种DAG)。他们一般会抽取此类系统的底层通用模型,保证其易用性,健壮性和可扩展性。让开发者专注于业务实现。流式处理框架一般会包含如下特点:消息传输正确性保证:此类保障有三种:At Most Once:在框架中每条消息传输零...
2018-04-10 22:08:04
4249
原创 Redis学习笔记--info命令结果解析
127.0.0.1:8376> info all# Server --- 服务器信息redis_version:2.8.20 -- redis服务器版本redis_git_sha1:00000000 -- Git SHA1redis_git_dirty:0 -- Git Dirty Flagredis_build_id:b873423ea3d4fc14 -- redis bu...
2018-04-10 10:18:34
726
原创 Flink开发中遇到的问题及解法
1. 当Source是Kafka的时候,如何设置Source Operator的并发度?如果没有指定,Source Operator的个数与集群中的TaskManager的个数相等。如果手动设置,建议使用的slot个数=Kafka Partition的个数/TaskManager的个数。此时,Slot的个数需大于等于2.因为其中有一个Source Operator。也不建议在一个Slot中启用多线...
2018-04-09 10:00:12
16848
原创 Druid中的负载均衡策略分析
在生产环境中,Druid查询通常能够命中多个(几十或几百个)segment。由于His节点的资源有限,所以segment需要被按照一定的策略均匀的分不到整个集群中,以确保集群的负载不会出现倾斜。要确定最佳的负载分布,需要对业务,查询模式和速度有一定的了解。通常,Druid查询回复改一个独立数据源中最近一段临近时间的一批segment。总体来说,查询更小的segment速度更快。通过以上,我们需要以...
2018-04-09 09:18:23
2093
原创 Druid中的Kafka Indexing Service源码分析
Kafka Indexing Service开发的目的是为了增强Kafka中数据的实时摄入。其特性如下:保障数据摄入的Exactly Once。可以摄入任意时间戳的数据,而不仅仅是当前数据。可以根据Kafka分区的变化二调整任务的数量。影响数据摄入Exactly Once的主要因素是Kafka的Offset管理。Kafka Indexing Service为了实现Exactly Once语义,去掉...
2018-04-08 22:23:15
2225
原创 Druid中的Extension在启动时是如何加载的?
Druid的Extension在开发时,按照Druid的Extension编写规则,启动Module写在文件:META-INF/services/io.druid.initialization.DruidModule中。如HDFS存储扩展,其文件内容就为:io.druid.storage.hdfs.HdfsStorageDruidModuleDruid在启动时,首先加载配置文件:在Main.jav...
2018-04-08 21:22:47
1347
原创 笔记-JVM的类加载过程
Java代码运行在JVM之上,JVM的运行情况对于Java程序至关重要。因此掌握JVM中的关键机制会对编写稳定的,高性能的Java程序至关重要。JVM规范中定义的标准结构如下图所示:JVM负责装载class文件并执行,class文件通常由类加载器(ClassLoader)来完成加载。class的执行在Sun JDK中有解析执行和编译为机器码执行两种方式。其中编译执行又分为client和server...
2018-04-08 10:05:23
313
原创 计算广告笔记 - 受众定向方法
先上个图:如上图所示,受众定向的一些典型方法:地域定向(geo-targeting):由于很多广告主的业务具有地域性。所以其作用相当重要,也是所有在线广告系统都必须支持的定向方式。人口属性定向(demographical targeting):其主要标签包括年龄,性别,教育程度,收入水平等。它主要是根据用户特征来判定的。频道定向(channel targeting):他是完全按照供应方的内容分类体...
2018-04-07 15:12:13
1984
原创 计算广告笔记-归因分析(Attribution Analysis)
归因是计算广告中最复杂的一个问题。难建模,难验证,难应用。但是它可以帮助回答计算广告中的一个最核心的问题:我的广告费用都浪费在哪里了?归因分析需要解决的问题就是如果用户先后访问了几个渠道的广告,最终转化成功。那么广告转化收益的功劳最终要归功于哪个渠道?以下是几种模型(图片来自网络):...
2018-04-07 14:54:16
5496
原创 计算广告笔记-计算广告综述
互联网关键的思维模式之一:正面的免费服务是为了获得流量和数据。背面的广告业务则是将这些流量和数据变成金钱。在能够获得充分的流量或高价值数据以后,所有能够传播信息的商品,其售价都会趋向其边际成本。广告业务的收益来自于三个方面:数据,流量和品牌属性。其中后两点是媒体的专属。而大量广告平台在做的事情,主要就是数据的加工与利用。其根本目的是广告主通过媒体达到低成本的用户接触。===============...
2018-04-07 14:44:25
594
转载 墨菲定律(设计系统)和康威定律(系统划分)
在设计系统时,应该多考虑 墨菲定律:任何事物都没有表面看起来那么简单。所有的事都会比你预计的时间长。可能出错的事总会出错。如果你担心某种情况发生,那么他就更有可能发生。在划分系统时,应该多考虑 康威定律:系统架构是公司组织架构的反映。应该按照业务闭环进行系统拆分/组织架构划分,实现闭环/高内聚/低耦合,减少沟通成本。如果沟通出现问题,那么应该考虑进行系统和组织架构的调整。在合适时机进行系统拆分,不...
2018-04-07 13:47:21
11165
1
原创 Spring Cloud中RestTemplate是如何通过注解与Ribbon结合的
我们在写Spring Cloud代码时,如何调用Spring Cloud中的其他服务呢?只需要定义一个RestTemplate,然后在其上加一个注解@LoadBalanced即可。如下:@Bean@LoadBalancedRestTemplate restTemplate() { return new RestTemplate();}我们就可以直接使用服务名称来调用该服务的接口。那使用了@...
2018-04-07 11:28:44
2238
原创 Netflix Ribbon原理与实践
Ribbon是什么?Ribbon是Netflix发布的开源项目,主要功能是提供客户端的软件负载均衡算法,将Netflix的中间层服务连接在一起。Ribbon客户端组件提供一系列完善的配置项如连接超时,重试等。简单的说,就是在配置文件中列出Load Balancer后面所有的机器,Ribbon会自动的帮助你基于某种规则(如简单轮询,随即连接等)去连接这些机器。我们也很容易使用Ribbon实现自定义的...
2018-04-06 22:02:15
6170
Apache Kylin权威指南
2017-10-16
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人