自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(16)
  • 收藏
  • 关注

原创 网络连接对象能不能缓存?

背景由于某种认知的问题(或者其他个人原因),即使是面向对象的开发中,也总是不太确定过这样的问题:网络对象能不能缓存起来?2 聊聊这个事情前提是面向对象编程: 在面向对象语言中开发网络程序,一个网络对象,具体到一个类比如socket的实例是可以缓存的。 但是缓存的目的有很多(我能够想到的是为了后续使用而不再重复创建连接),由于这个socket是有一个有生命(周期)的对象,因此缓存后,那么就引

2017-08-31 15:09:11 585

原创 RabbitMQ的Qos

1.说明RabbitMQ提供了一种qos(服务质量保证)的一种功能,即非自动确认消息(消费完成),并在一定数目的消息未被确认前,不进行消费新的消息。这种机制一方面可以实现限速(将消息暂存到RabbitMQ内存中)的作用,一方面可以保证消息确认质量(比如确认了但是处理有异常的情况)。2. 注意事项消费确认模式必须是非自动ACK机制,然后设置basicQos的值;另外,还可以基于consume和chan

2017-08-31 14:49:34 8991

原创 ShardedJedisPool的连接池参数如何设置

ShardedJedisPool的连接池参数如何设置场景:客户端采用客户端分片使用redis集群(即每个redis之间无关联,每个redis都是master角色)说明:由于采用客户端hash,加上数据不可能均匀,因此最慢的一台redis就是天花板,所以下面都是按照一台redis的量来预估,这样是考虑最坏情况来进行容量评估;要面对的问题:单台客户端(指连接redis的服务)最多用多少连接?单台re

2017-08-30 13:35:50 5769 1

原创 redis命令:info 的简单介绍

1.背景如果客户端连接redis后,执行缓慢,那么可以通过redis的 INFO commandstats命令来了解下下命令执行的的一些统计信息;2.具体通过redis-cli连接一个redis 节点,然后执行如下命令: INFO commandstats 会显示命令统计信息,截图如下:

2017-08-29 14:04:39 1156

原创 剖析扩容redis后碰到的一个异常情况

1.背景一个服务依赖redis,采用了多线程模式进行并发操作redis(多实例); 使用的是Java的ShardedJedis;一开始,服务的表现是正常的,无异常; 后面对redis进行了增加加机器部署,通过日志发现这个服务的连接数竟然不够用了,大量报错,报错信息是从pool中获取不到连接数;2.具体的调用结构图待补充3.原因分析出现上面这种情景,算是一种非正常的情况,为什么这么讲呢?因为底层服

2017-08-25 21:04:51 710

原创 服务扩容可能引入的负面问题及解决方法

1.背景为了让复杂的业务变得简单化、模块化,代码具有可伸缩性(Scalability)、可维护性等,集中式的功能模块开始走向服务化; 服务化的具体实现是将一个个功能以一个相对“单一”的组件(独立)部署运行。服务之间通过网络通信完成调用; 服务不可能独立存在,服务之间存在必不可少的依赖关系。 当针对一个依赖链中的一个服务进行横向扩容时,一定要考虑全面,否则一个瓶颈的解决可能引入另外一个瓶颈问题;

2017-08-24 17:06:15 627

原创 简单的(资源或者任务)调度处理思考

1.背景假设一个场景,然后分析这个场景并实现一个简单的任务调度系统。场景的描述如下:一个服务的上游会源源不断产生任务流,而当前服务的处理能力是有限的,另外上游的任务流中的任务有如下特点:每个任务根据其属性不同,其得到处理的重要程度是不同的;2.提取分析需求通过背景的描述,假设用户的需求是这样的:基于某个流程中的某个节点所能提供的服务有限的事实,对每个任务通过重要性这个原则进行排序并实现先后(重要性高

2017-08-19 12:42:56 1368

原创 elasticsearch5.x之Slice scroll

1.背景在使用ES的过程中,存在使用ES进行深度分页的需求,但是ES深度分页会占用大内存,吞吐量提升很难,因此进行调研ES特性,找到解决深度分页或者满足此类需求的解决方法。2.具体2.1 Sliced Scroll开始支持的最小版本:5.0.02.2 Search After由于对数据实时性没有严格的要求,因此暂时没有使用这个功能;下面的测试是Sliced Scroll2.3 压测及结论2.3.1

2017-08-18 09:43:08 3829

原创 Java多线程一般用法

1.背景例子import org.slf4j.Logger;import org.slf4j.LoggerFactory;import java.util.concurrent.*;import java.util.concurrent.atomic.AtomicInteger;/** * Created by Administrator on 2017/8/17. */public c

2017-08-17 17:44:38 315

原创 Java-NIO-Selector

1.背景在jdk1.4,nio引入到java中; C/C++代码的工具箱中,许多年前就已经有 select()和 poll()这两个POSIX(可移植性操作系统接口)系统调用可供使用了。许过操作系统也提供相似的功能,但对Java 程序员来说,就绪选择功能直到 JDK 1.4 才成为可行的方案。本文编写一个client-server小程序,都采用Selector来管理连接;2.例子2.1客户端imp

2017-08-17 17:10:50 267

原创 elasticsearch5.0.0安装笔记

1.背景旧集群在正常运行的情况下,在(旧)集群所在的机器上,部署5.5.0版本的elasticsearch集群,完成集群从2.4.4到5.5.0的升级操作(由于是离线数据,数据重新导入到5.5.0集群)。2.具体2.1 配置调整2.1.1 elasticsearch.yml配置主要配置如下:2.1.1.1 Cluster———————————- Cluster ———————————–设置clust

2017-08-17 16:56:04 404

原创 zookeeper的安装目录调整

1.背景当下zookeeper所在的目录经常告警,需要将目录调整到另外一个分区;2.方法2.1 将zookeeper安装部署到另外一个分区,调整zoo.cfg文件,将data目录和log目录调整下即dataDir和dataLogDir2.2 myid手动编写myid文件或者拷贝myid文件,放到新的data目录;2.3.关闭原来的zk,启动新zk;3.分析由于zk是运行在一个集群环境,另外,重新启动

2017-08-15 09:53:01 2219

原创 mysql-sql语句中变量的使用

1.问题有一个表,其中一列是城市(city),其中一列是人的姓名(personname), 怎么获取每个城市任意两个人的姓名?2.答案SELECT city, personnameFROM(SELECT CASE WHEN @mycity != city THEN @rownum:= 1 ELSE @rownum:= @rownum + 1 END

2017-08-14 22:03:40 4918 1

原创 集中式工程拆解为分布式(微服务)需要注意的一些事情

1. 背景可能存在种种原因,会使得一个工程(或者功能模块)是堆积的,臃肿的,维护困难的。下面说下如何化解这个问题。2. 走向服务化把集中式工程进行拆解的一般成熟的套路是:工程模块化,然后搭配(局域)网络完成通信交互;2.1 拆分步骤:2.1.1 从功能上拆分从功能上拆分后,可以进一步把粒度分的细一些。根据功能拆分,是有一定的判定依据可遵循的(即根据业务线来清晰划分)。 通过业务线划分后,可能粒度还

2017-08-12 13:15:01 980

原创 关系型数据表分表可能带来的问题

分表方法通过表中的一列(一般是主键)根据一定的映射,进行分表(将大表数据打撒到多个结构相同的分表中);引入的问题通过上述方法进行分表,假设使用另外一个字段(非分表字段)查询怎么办?分表补偿方法针对上面的查询的字段必须和分表的字段有关系(包含,映射等等关系),即如果分表字段是A,另外一个字段是B,那么必须能够有一种方法从B—>可导出A即可。问题原因分析通过分析可知,对关系结构(比如一个关系数据中的表)

2017-08-12 12:46:41 544

原创 Java Callable和Future学习

Java Callable和Future学习常见用法一般Callable和Future搭配使用的方法如下: 把Callable任务提交给线程池,线程池给我们返回一个Future对象; 然后我们通过Future拿到一个结果; 说明:线程池帮我们做了太多事情,而且封装起来,这样子我们理解底层机制就非常困难,毕竟距离冰冷的现实越远,对底层越难以理解;原理概述线程池背后做的事情如下: 把Callab

2017-08-11 17:18:38 241

空空如也

空空如也

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

TA关注的人

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