自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

张小平的博客

java分布式架构,后端研发

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

转载 Java 的几把 JVM 级锁

简介在计算机行业有一个定律叫 " 摩尔定律 ",在此定律下,计算机的性能突飞猛进,而且价格也随之越来越便宜, CPU 从单核到了多核,缓存性能也得到了很大提升,尤其是多核 CPU 技术的到来,计算机同一时刻可以处理多个任务。在硬件层面的发展带来的效率极大提升中,软件层面的多线程编程已经成为必然趋势,然而多线程编程就会引入数据安全性问题,有矛必有盾,于是发明了“锁”来解决线程安全问题。在这篇文章...

2020-02-19 10:58:07 257

转载 app端与服务端加密

在服务器与终端设备进行HTTP通讯时,常常会被网络抓包、反编译(Android APK反编译工具)等技术得到HTTP通讯接口地址和参数。为了确保信息的安全,我们采用AES+RSA组合的方式进行接口参数加密和解密。1.关于RSA加密机制:公钥用于对数据进行加密,私钥对数据进行解密,两者不可逆。公钥和私钥是同时生成的,一一对应。比如:A拥有公钥,B拥有公钥和私钥。A将数据通过公钥进行加密后,发送密文给

2018-01-24 14:30:59 12027 2

转载 Redis在京东到家的订单中的使用

Redis在京东到家的订单中的使用发表于 2017-06-30   |   分类于 架构背景Redis作为一款性能优异的内存数据库,在互联网公司有着多种应用场景,下面介绍下Redis在京东到家的订单列表中的使用场景。主要从以下几个方面来介绍:订单列表在Redis中的存储结构Redis和DB数据一致性保证Redis中的分布式锁缓存防穿透和雪崩订单列表在

2018-01-21 16:02:36 721

转载 select,epoll区别

select、poll、epoll之间的区别总结[整理]  select,poll,epoll都是IO多路复用的机制。I/O多路复用就通过一种机制,可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知程序进行相应的读写操作。但select,poll,epoll本质上都是同步I/O,因为他们都需要在读写事件就绪后自己负责进行读写,也就是说这个读写过程是阻塞的

2018-01-13 16:08:33 813

转载 防雪崩利器:熔断器 Hystrix 的原理与使用

本文转自:https://segmentfault.com/a/1190000005988895,请指正。前言分布式系统中经常会出现某个基础服务不可用造成整个系统不可用的情况, 这种现象被称为服务雪崩效应. 为了应对服务雪崩, 一种常见的做法是手动服务降级. 而Hystrix的出现,给我们提供了另一种选择.服务雪崩效应的定义服务雪崩效应是一种因 服务提供者 

2018-01-13 14:24:49 496

转载 zookeeper 大量连接断开重连原因排查

本文转自:http://blog.csdn.net/hengyunabc/article/details/41450003问题现象最后发现线上的zookeeper的日志zookeeper.out 文件居然有6G,后来设置下日志为滚动输出,参考:http://blog.csdn.net/hengyunabc/article/details/19006911但是改了之后

2017-09-12 13:53:42 3027

转载 如何编写Maven插件

转自:http://blog.csdn.net/vking_wang/article/details/8612981需求:在Maven编译项目的时候,统计代码量,即项目中的文件数目、代码行数,包括Java文件和配置文件两种;其中配置文件(sql、xml、properties)代码行数/4 处理。创建项目:首先确保已安装m2eclipse插件:http://ecl

2017-07-31 11:00:29 381

转载 SOCKET.IO,理解SOCKET.IO

原文:http://www.cnblogs.com/xiezhengcai/p/3957314.html要理解socket.io ,不得不谈谈websocket在html5之前,因为http协议是无状态的,要实现浏览器与服务器的实时通讯,如果不使用 flash、applet 等浏览器插件的话,就需要定期轮询服务器来获取信息。这造成了一定的延迟和大量的网络通讯。随着HTML5 的出现,这一情

2017-06-30 14:20:18 464

转载 Maven常用命令 - 构建反应堆中指定模块

转自:http://blog.csdn.net/jason5186/article/details/39530087mvn -h 可以看到很多命令及其用途;-am --also-make 同时构建所列模块的依赖模块;-amd -also-make-dependents 同时构建依赖于所列模块的模块;-pl --projects 构建制定的模块,模块间用逗号分隔;-rf -re

2017-05-02 14:05:05 456

转载 接口限流算法总结

转自:http://www.cnblogs.com/clds/p/5850070.html背景曾经在一个大神的博客里看到这样一句话:在开发高并发系统时,有三把利器用来保护系统:缓存、降级和限流。那么何为限流呢?顾名思义,限流就是限制流量,就像你宽带包了1个G的流量,用完了就没了。通过限流,我们可以很好地控制系统的qps,从而达到保护系统的目的。本篇文章将会介绍一下常用的限流算法以及

2017-04-11 19:06:09 3219

转载 如何合理地估算线程池大小?

如何合理地估算线程池大小?这个问题虽然看起来很小,却并不那么容易回答。大家如果有更好的方法欢迎赐教,先来一个天真的估算方法:假设要求一个系统的TPS(Transaction Per Second或者Task Per Second)至少为20,然后假设每个Transaction由一个线程完成,继续假设平均每个线程处理一个Transaction的时间为4s。那么问题转化为:如何设计线程

2017-03-16 16:49:30 411

转载 netty可靠性(相对于nio)

转自:http://blog.csdn.net/pentiumchen/article/details/45117233Selector空轮询处理在NIO中通过Selector的轮询当前是否有IO事件,根据JDK NIO api描述,Selector的select方法会一直阻塞,直到IO事件达到或超时,但是在Linux平台上这里有时会出现问题,在某些场景下select方法会直接返回,即使没

2017-03-16 16:43:47 1144

转载 Linux进程间通信——使用共享内存

一、什么是共享内存顾名思义,共享内存就是允许两个不相关的进程访问同一个逻辑内存。共享内存是在两个正在运行的进程之间共享和传递数据的一种非常有效的方式。不同进程之间共享的内存通常安排为同一段物理内存。进程可以将同一段共享内存连接到它们自己的地址空间中,所有进程都可以访问共享内存中的地址,就好像它们是由用C语言函数malloc分配的内存一样。而如果某个进程向共享内存写入数据,所做的改动将立即影响到

2017-03-06 18:09:42 254

转载 Object详解

Object类是Java中其他所有类的祖先,没有Object类Java面向对象无从谈起。作为其他所有类的基类,Object具有哪些属性和行为,是Java语言设计背后的思维体现。 Object类位于java.lang包中,java.lang包包含着Java最基础和核心的类,在编译时会自动导入。Object类没有定义属性,一共有13个方法,具体的类定义结构如下图:1.类

2017-02-28 17:08:55 622

转载 谈谈对CAP定理的理解

CAP定理的常规解释是任何分布式系统只能在一致性(Consitency),可用性(Availability)和分区容忍性(Partition Tolerance)中三选二。这个解释很让人费解,笔者在看了一些文章后谈谈我对它的理解,还请斧正。从问题出发假设我们用一台服务器A对外提供存储服务,为了避免这台服务器宕机导致服务不可用,我们又在另外一台服务器B上运行了同样的存储服务。

2017-02-21 16:34:03 446

转载 由 B-/B+树看 MySQL索引结构

转自:https://segmentfault.com/a/1190000004690721B-树B-树,这里的 B 表示 balance( 平衡的意思),B-树是一种多路自平衡的搜索树 它类似普通的平衡二叉树,不同的一点是B-树允许每个节点有更多的子节点。下图是 B-树的简化图.B-树有如下特点:所有键值分布在整颗树中;任何一个关键字出现且只出

2017-02-20 15:31:40 284

转载 平衡二叉查找树

一.平衡二叉查找树平衡二叉查找树是带有平衡条件的二叉查找树。平衡条件:每个节点的左子树和右子树的高度差最多为1二叉查找树(其中空树的高度为-1)。二、平衡二叉树算法思想    若向平衡二叉树中插入一个新结点后破坏了平衡二叉树的平衡性。首先要找出插入新结点后失去平衡的最小子树根结点的指针。然后再调整这个子树中有关结点之间的链接关系,使之成为新的平衡子树。当失去平衡的最小子树被

2017-02-17 17:31:22 913

转载 数据库事务隔离级别

本文系转载,原文地址:http://singo107.iteye.com/blog/1175084数据库事务的隔离级别有4个,由低到高依次为Read uncommitted、Read committed、Repeatable read、Serializable,这四个级别可以逐个解决脏读、不可重复读、幻读这几类问题。√: 可能出现    ×: 不会出现

2017-02-17 11:49:11 226

转载 memcache与redis原理区别

说到redis就会联想到memcached,反之亦然。了解过两者的同学有那么个大致的印象:redis与memcached相比,比仅支持简单的key-value数据类型,同时还提供list,set,zset,hash等数据结构的存储;redis支持数据的备份,即master-slave模式的数据备份;redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用等

2017-02-17 10:32:19 3351

转载 最小生成树-Prim算法和Kruskal算法

Prim算法1.概览普里姆算法(Prim算法),图论中的一种算法,可在加权连通图里搜索最小生成树。意即由此算法搜索到的边子集所构成的树中,不但包括了连通图里的所有顶点(英语:Vertex (graph theory)),且其所有边的权值之和亦为最小。该算法于1930年由捷克数学家沃伊捷赫·亚尔尼克(英语:Vojtěch Jarník)发现;并在1957年由美国计算机科学家罗伯特·普

2017-02-15 17:27:03 316

转载 TCP三次握手四次挥手

TCP的三次握手(建立连接)和四次挥手(关闭连接)参照:http://course.ccniit.com/CSTD/Linux/reference/files/018.PDFhttp://hi.baidu.com/raycomer/item/944d23d9b502d13be3108f61 建立连接: 理解:窗口和滑动窗口TCP的流量控制TCP使用窗口机制进行流

2017-02-13 19:39:29 255

转载 java线程模型

1. 概述众所周知,线程 - Thread 是比进程 - Progress 更轻量级的调度单位。简单来说,引入线程带来的好处是:可以把一个进程 的资源分配和执行调度分开,各个线程 既可以共享进程 资源(内存地址、文件I/O等),又可以独立调度。线程实现方式: 主流的操作系统都实现了线程 ,而编程语言一般会提供关于线程 的统一API操作。那么,编程语言如何去调用系

2017-02-11 19:08:27 353

转载 Java 应用性能调优实践

Java 应用性能优化是一个老生常谈的话题,典型的性能问题如页面响应慢、接口超时,服务器负载高、并发数低,数据库频繁死锁等。尤其是在“糙快猛”的互联网开发模式大行其道的今天,随着系统访问量的日益增加和代码的臃肿,各种性能问题开始纷至沓来。Java 应用性能的瓶颈点非常多,比如磁盘、内存、网络 I/O 等系统因素,Java 应用代码,JVM GC,数据库,缓存等。笔者根据个人经验,将 Java 性能

2017-02-10 15:55:44 428

转载 通过jstack日志分析和问题排查

转自:http://www.ccblog.cn/84.htm前段事件公司出现了一个严重故障(调用dubbo服务一直处于超时,整个服务系统发生雪崩,系统彻底访问不了),一开始怎么都找不到问题的根源,日志的表现形式是dubbo线程池用完了,那么具体是什么导致的没有找到,后然通过jstack日志分析才找到问题的根源,根源就是系统日志代码写有问题。通过这个故障我们来了解下如何通过jstack日志分

2017-02-10 15:44:13 39050 2

原创 工作备忘

1:查看内存情况jmap -heap 49212:查看gc情况jstat -gcutil 4921

2017-01-23 16:48:03 315

转载 分布式事务一致性解决方案

在OLTP系统领域,我们在很多业务场景下都会面临事务一致性方面的需求,例如最经典的Bob给Smith转账的案例。传统的企业开发,系统往往是以单体应用形式存在的,也没有横跨多个数据库。我们通常只需借助开发平台中特有数据访问技术和框架(例如Spring、JDBC、ADO.NET),结合关系型数据库自带的事务管理机制来实现事务性的需求。关系型数据库通常具有ACID特性:原子性(Atomicity)、一致

2017-01-17 14:46:58 380

转载 Spring Boot——开发新一代Spring Java应用

Spring官方网站本身使用Spring框架开发,随着功能以及业务逻辑的日益复杂,应用伴随着大量的XML配置文件以及复杂的Bean依赖关系。随着Spring 3.0的发布,Spring IO团队逐渐开始摆脱XML配置文件,并且在开发过程中大量使用“约定优先配置”(convention over configuration)的思想来摆脱Spring框架中各类繁复纷杂的配置(即时是Java Con

2017-01-16 14:54:46 333

转载 实施微服务,我们需要哪些基础框架?

微服务(MicroServices)架构是当前互联网业界的一个技术热点,圈里有不少同行朋友当前有计划在各自公司开展微服务化体系建设,他们都有相同的疑问:一个微服务架构有哪些技术关注点(technical concerns)?需要哪些基础框架或组件来支持微服务架构?这些框架或组件该如何选型?笔者之前在两家大型互联网公司参与和主导过大型服务化体系和框架建设,同时在这块也投入了很多时间去学习和研究,有一

2017-01-13 11:48:41 944

转载 RocketMQ大数据畅想

刚刚过去的双十一,阿里自主研发的消息中间件RocketMQ,充分展现了它的低延迟特性,大部分消息请求落在2ms内,慢请求也都落在20ms内,这无疑给追求快速响应的在线交易系统(OLTP)带去了福音。也是在今年11月份,RocketMQ进入Apache孵化。这款最初设计来为淘宝交易系统异步解耦、削峰填谷的消息中间件,开始走出国门,为世界上的用户提供服务。自然地,RocketMQ将来不仅仅只服务于

2017-01-12 15:46:37 1021 1

转载 分布式系统的思考

中心化一种是中心化的,由中心节点去存储集群信息并管理集群状态,其它节点只需响应数据请求,而无需知道集群中其它节点的情况。 这种模式的核心便是选举或者指定一个节点作为集群的管理者,由管理者去协调跨节点的操作、备份数据和处理故障等。一般的,对于跨节点的操作,为了保证事务的原子性,提出了两步提交协议或三步提交协议,下面分别介绍。2pc两步提交协议,顾名思义,就是将

2017-01-11 15:27:46 389

转载 构建高性能微服务架构(网易)

随着移动互联网时代的兴起,提供高性能、高可用性、高扩展性的服务已经不仅仅是大公司的专利,而逐渐成为所有互联网+公司的标配需求。本文介绍网易如何利用多年的互联网架构经验和网易蜂巢的平台,帮助客户进行架构改进、微服务化、性能调优。传统架构之痛当前的时代称为互联网的时代,互联网应用的特点往往是,新型的应用迅速出现颠覆旧的商业模式,一旦商业模式稍有起色便会有大量的厂商蜂拥而至,使得蓝海变成

2017-01-07 16:30:27 3318

转载 阿里飞天云平台架构简介

转自:http://blog.csdn.net/yangcs2009/article/details/39292097飞天是由阿里云开发的一个大规模分布式计算系统,其中包括飞天内核和飞天开放服务。飞天内核负责管理数据中心Linux集群的物理资源,控制分布式程序运行, 隐藏下层故障恢复和数据冗余等细节,有效提供弹性计算和负载均衡。如图所示,飞天体系架构主要包含四大块:1、资源管理、安

2016-12-26 10:33:19 3673

转载 京东评价系统海量数据存储高可用设计

转自:https://toutiao.io/posts/j98rp8/preview原文链接京东的商品评论目前已达到数十亿条,每天提供的服务调用也有数十亿次,而这些数据每年还在成倍增长,而数据存储是其中最重要的部分之一,接下来就介绍下京东评论系统的数据存储是如何设计的。整体数据存储包括基础数据存储、文本存储、数据索引、数据缓存几个部分。基础数据存储基础数据存储使用MyS

2016-12-25 15:02:53 606

转载 分布式系统高可用设计

理解高可用系统首先,我们需要理解什么是高可用,英文叫High Availability(Wikipedia词条),基本上来说,就是要让我们的计算环境(包括软硬件)做到full-time的可用性。在设计上一般来说,需要做好如下的设计:对软硬件的冗余,以消除单点故障。任何系统都会有一个或多个冗余系统做standby对故障的检测和恢复。检测故障以及用备份的结点接管故障点。这也就是

2016-12-25 14:09:38 2545 1

转载 服务治理过程演进

转自:http://javatar.iteye.com/blog/1345073 在大规模服务化之前,应用可能只是通过RMI或Hessian等工具,简单的暴露和引用远程服务,通过配置服务的URL地址进行调用,通过F5等硬件进行负载均衡。 (1) 当服务越来越多时,服务URL配置管理变得非常困难,F5硬件负载均衡器的单点压力也越来越大。 此时需要一个服务注册中心,动态

2016-12-23 10:51:41 398

转载 为什么容器技术(docker)将主宰世界,docker的意义

转自:http://blog.csdn.net/gaoyingju/article/details/49616295为什么容器技术将主宰世界由于本文篇幅较长(我竟然写了7千多字),为了帮助你快速理解,我先列出核心思想:先讲一个集装箱改变全球运输业的生动故事,再拿容器技术与集装箱做联系与对比,说明笔者是如何通过集装箱参悟了容器技术的发展命脉 —— Do

2016-12-22 14:59:04 9102

转载 从Java视角理解系统结构(三)伪共享

转自 转载自并发编程网 – ifeve.com http://ifeve.com/from-javaeye-false-sharing/从我的前一篇博文中, 我们知道了CPU缓存及缓存行的概念, 同时用一个例子说明了编写单线程Java代码时应该注意的问题. 下面我们讨论更为复杂, 而且更符合现实情况的多核编程时将会碰到的问题. 这些问题更容易犯, 连j.u.c包作者Doug Lea大师

2016-12-21 20:28:39 267

转载 从Java视角理解系统结构(二)CPU缓存

转载自并发编程网 – ifeve.com  http://ifeve.com/from-javaeye-cpu-cache/众所周知, CPU是计算机的大脑, 它负责执行程序的指令; 内存负责存数据, 包括程序自身数据. 同样大家都知道, 内存比CPU慢很多. 其实在30年前, CPU的频率和内存总线的频率在同一个级别, 访问内存只比访问CPU寄存器慢一点儿. 由于内存的发展都到技术及成本

2016-12-21 20:08:22 313

转载 从Java视角理解系统结构(一)CPU上下文切换

本文转自:转载自并发编程网 – ifeve.com http://ifeve.com/java-context-switch/ 在高性能编程时,经常接触到多线程. 起初我们的理解是, 多个线程并行地执行总比单个线程要快, 就像多个人一起干活总比一个人干要快. 然而实际情况是, 多线程之间需要竞争IO设备, 或者竞争锁资源,导致往往执行速度还不如单个线程. 在这里有一个经常提及的概念

2016-12-21 19:57:14 308

转载 storm架构及原理

storm 架构与原理1 storm简介1.1 storm是什么如果只用一句话来描述 storm 是什么的话:分布式 && 实时 计算系统。按照作者 Nathan Marz 的说法,storm对于实时计算的意义类似于hadoop对于批处理的意义。Hadoop(大数据分析领域无可争辩的王者)专注于批处理。这种模型对许多情形(比如为网页建立索引)已经足够,但还存

2016-12-20 15:25:57 4072 1

空空如也

空空如也

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

TA关注的人

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