架构
文章平均质量分 89
HelloWorld搬运工
HelloWorld是学习程序的第一个程序,搬运工是将一件东西从一个地方运到另一个地方。HelloWorld搬运工,分享技术知识,有原创也有转发,彼此交流,一起学习,共同进步。
展开
-
RocketMQ环境搭建
在上篇《消息队列选型》中我们通过对目前比较流行的各个MQ产品的对比,结合公司具体业务需求,选择了RocketMQ做为我们的消息中间件,这篇分享我们介绍一下RocketMQ的安装配置。1、初步理解Producer/Consumer Group在安装RocketMQ之前我们先来理解Group概念,在RocketMQ中Group是很重要的。通过Group机制,让RocketMQ天然的支持消息负载...原创 2018-05-06 22:21:50 · 6831 阅读 · 1 评论 -
docker轻量级编排创建工具Humpback
Docker容器做为微服务的重要组成部分,伴随着微服务的流行,在很多公司已经落地并投入生产。不过,docker为dev和ops带来便利的同时,docker的编排和创建管理也带来了一些问题。纯手动操作docker,一个两个还好,多了估计能逼疯dev和ops,尤其是ops,用kubernetes, 仅仅是安装配置就够烦人,很多镜像都在google上,国内的网络环境大家都懂,并且kubernetes要分...原创 2018-05-06 22:25:49 · 4092 阅读 · 0 评论 -
高并发的核心技术-幂等的实现方案
一、背景我们实际系统中有很多操作,是不管做多少次,都应该产生一样的效果或返回一样的结果。例如:1. 前端重复提交选中的数据,应该后台只产生对应这个数据的一个反应结果。2. 我们发起一笔付款请求,应该只扣用户账户一次钱,当遇到网络重发或系统bug重发,也应该只扣一次钱;3. 发送消息,也应该只发一次,同样的短信发给用户,用户会哭的;4. 创建业务订单,一次业务请求只能创建一个,创...原创 2018-05-20 21:18:35 · 274 阅读 · 0 评论 -
Linux常用的日志查看命令
对于大型网站来说,很多网站在可用性方面提出4个9或者5个9的要求,如果是4个9,那么网站全年的不可用时间不能超过52.6分钟,如果是5个9,全年不可用时间不能超过5.2分钟。这其实是很难的,无论多么厉害的程序员,他写过的代码不可能完全没有问题。而且有些时候,在线上发生问题的时候,我们大部分时间都用在排查并定位问题上了。一个问题可能解决起来也就是几分钟,但是排查起来却要花费几个小时。在日常工作中...原创 2018-05-07 22:55:08 · 32405 阅读 · 1 评论 -
jvm基础总结概述
一、运行时数据区域程序计数器记录正在执行的虚拟机字节码指令的地址(如果正在执行的是本地方法则为空)。虚拟机栈每个 Java 方法在执行的同时会创建一个栈帧用于存储局部变量表、操作数栈、常量池引用等信息。每一个方法从调用直至执行完成的过程,就对应着一个栈帧在 Java 虚拟机栈中入栈和出栈的过程。可以通过 -Xss 这个虚拟机参数来指定一个程序的 Java 虚拟...原创 2018-05-14 21:13:07 · 289 阅读 · 0 评论 -
dubbo应用场景示例一
公司使用Dubbo做为服务治理工具搭建了微服务架构。幸运的是,Dubbo官方文档对于开发过程遇到的一些通用问题提供了解决办法。我们一起来看一下。1、启动时检查Dubbo缺省会在启动时检查依赖的服务是否可用,不可用时会抛出异常,阻止Spring初始化完成,以便上线时,能及早发现问题,默认check="true"。可以通过check="false"关闭检查,比如,测试时,有些服...原创 2018-05-21 18:53:11 · 6202 阅读 · 0 评论 -
dubbo应用场景示例二
《dubbo应用场景示例一》中我们介绍了3种dubbo应用场景,今天我们接着聊聊dubbo几种应用场景。1、线程模型如果事件处理的逻辑能迅速完成,并且不会发起新的 IO 请求,比如只是在内存中记个标识,则直接在 IO 线程上处理更快,因为减少了线程池调度。但如果事件处理逻辑较慢,或者需要发起新的 IO 请求,比如需要查询数据库,则必须派发到线程池,否则 IO 线程阻塞,将导致不能接收其...原创 2018-05-21 18:55:27 · 1111 阅读 · 0 评论 -
互联网金融消息队列ZeroMQ
之前对消息队列服务中间件进行了对比,具体可以参看《消息队列选型》。一般互联网公司都使用消息队列来实现系统解耦,提速,广播,流量削峰等应用场景。ZeroMQ,低延时、高性能特性,被应用于实时性要求高的系统解耦。1、什么是ZeroMQ:据官方文档介绍,ZeroMQ是一个可伸缩的分布式或者高并发的异步网络消息库。不同于其他的服务,例如RabbitMQ等消息队列服务,以一种可独立运营的服务...原创 2018-05-21 18:58:23 · 1696 阅读 · 0 评论 -
dubbo应用场景示例三
1、只注册如果有两个镜像环境,两个注册中心,有一个服务只在其中一个注册中心有部署,另一个注册中心还没来得及部署,而两个注册中心的其它应用都需要依赖此服务。这个时候,可以让服务提供者方只注册服务到另一注册中心,而不从另一注册中心订阅服务。禁用订阅配置<dubbo:registryid="hzRegistry" address="10.20.153.10:9090" />...原创 2018-05-22 07:40:55 · 1481 阅读 · 0 评论 -
常用 Git 命令清单
我们每天使用 Git ,但是很多命令记不住。一般来说,日常使用只要记住下图6个命令,就可以了。但是熟练使用,恐怕要记住60~100个命令。下面是我整理的常用 Git 命令清单,清单是供大家查缺补漏的,大家可以预览下以下清单,看自己有哪些是不太熟悉或者不知道的,然后针对性的了解其用法。熟练了这些命令可以大大提高效率。几个专用名词的译名如下。 Workspace:工作区...原创 2018-05-15 21:36:38 · 204 阅读 · 0 评论 -
jedis常用操作命令
1.对value操作的命令exists(key):确认一个key是否存在del(key):删除一个keytype(key):返回值的类型keys(pattern):返回满足给定pattern的所有keyrandomkey:随机返回key空间的一个keyrename(oldname,newname):将key由ol...原创 2018-05-15 21:56:35 · 3503 阅读 · 0 评论 -
dubbo spi扩展实现机制javassist
Dubbo为了实现基于spi思想的扩展特性,特别是能够灵活添加额外功能,要能够动态生成一个叫做控制或适配并实现扩展或策略选择功能的类。当然对应已知需求如Protocol, ProxyFactory他们的策略选择的适配类代码dubbo直接提供也无妨,但是dubbo作为一个高扩展性的框架,使得用户能够添加自己的需求,根据配置动态生成自己的适配类代码,这样就需要在运行的时候去编译加载这个适配类的代码。...原创 2018-05-28 18:30:20 · 1960 阅读 · 1 评论 -
如何解决秒杀的性能问题和超卖的讨论
进入正文前先说一点个人感受,之前看淘宝的ppt感觉都懂了,等到自己出解决方案的时候发现还是有很多想不到的地方其实都没懂,再次验证了“细节是魔鬼”的理论。并且一个人的能力有限,只有大家一起讨论才能想的更周全,更细致。好了,闲话少说,下面进入正文。一、秒杀带来了什么?秒杀或抢购活动一般会经过【预约】【抢订单】【支付】这3个大环节,而其中【抢订单】这个环节是最考验业务提供方的抗压能力的。抢订...原创 2018-06-04 21:17:31 · 467 阅读 · 0 评论 -
关于java流的几个概念:IO、BIO、NIO、AIO,有几个人全知道?
关于同步、阻塞的知识我之前的文章有介绍,所以关于流用到这些概念与之前多线程用的概念一样。下面具体来看看java中的几种流IO/BIOBIO就是指IO,即传统的Blocking IO,即同步并阻塞的IO。这也是jdk1.4之前的唯一选择,依赖于ServerSocket实现,即一个请求对应一个线程,如果线程数不够连接则会等待空余线程或者拒绝连接。所以用这种方式,在高并...原创 2018-06-04 21:28:50 · 696 阅读 · 1 评论 -
这 30 个常用的 Maven 命令你必须熟悉!
maven 命令除了常用的几个,大部分经常记不住,整理一下,方便查询。maven 命令的格式为 mvn [plugin-name]:[goal-name],可以接受的参数如下。-D 指定参数,如 -Dmaven.test.skip=true 跳过单元测试;-P 指定 Profile 配置,可以用于区分环境;-e 显示maven运行出错的信息...原创 2018-06-14 21:05:17 · 1264 阅读 · 1 评论 -
redis info信息详解
为了方便对redis进行监控管理,一些公司会自己开发监控,或在已有的系统中添加功能。对redis info信息的获取是必须要处理的。Redis Info信息包括Server,Clients,Memory,Persistence,Stats,Replication,CPU,Commandstats,Cluster,Keyspace等,下边我们详细介绍各部分对应信息。Server: re...原创 2018-06-20 10:51:50 · 19682 阅读 · 2 评论 -
redis监控系统redis-stat应用
Redis需要监控才知道具体运行信息,虽然Redis也提供了info等命令行,但是毕竟不方便而且不能保存历史信息。redis-stat是一个用ruby写成的监控redis的程序,基于info命令获取信息,而不是通过monitor获取信息。安装ruby环境Redis-stat用ruby写成,第一步当然是安装ruby环境。很多习惯于使用centos的同学会直接使用yuminstall ru...原创 2018-06-27 17:14:50 · 4459 阅读 · 3 评论 -
一文了解 Elasticsearch 及其与 Python 的对接实现
什么是 Elasticsearch想查数据就免不了搜索,搜索就离不开搜索引擎,百度、谷歌都是一个非常庞大复杂的搜索引擎,他们几乎索引了互联网上开放的所有网页和数据。然而对于我们自己的业务数据来说,肯定就没必要用这么复杂的技术了,如果我们想实现自己的搜索引擎,方便存储和检索,Elasticsearch 就是不二选择,它是一个全文搜索引擎,可以快速地储存、搜索和分析海量数据。为什么要用 Ela...原创 2018-08-02 21:53:31 · 17806 阅读 · 8 评论 -
10分钟了解ZooKeeper
ZooKeeper简介ZooKeeper是一个开放源码的分布式应用程序协调服务,它包含一个简单的原语集,分布式应用程序可以基于它实现同步服务,配置维护和命名服务等。ZooKeeper设计目的1.最终一致性:client不论连接到哪个Server,展示给它都是同一个视图,这是zookeeper最重要的功能。2.可靠性:具有简单、健壮、良好的性能,如果消息m被到一台服务器接受,那么...原创 2018-08-02 21:57:28 · 609 阅读 · 0 评论 -
用Python爬去今日头条美女图片
这是一篇福利教程.为什么这么说呢.我们要爬取的内容是美图网站(嘿嘿,老司机都懂的)废话不多说.开始今天的表演.这个图集网站不要问我怎么来的.绝对不是我刻意找的.(其实是看了别的发的一篇文章,就想自己动手实现一下)我们今天的任务就是 将这些图集保存下来。首先我们需要获取到所有的列表,我们往下拉动滚动条,拉到底,会继续自动加载内容,我们通过浏览器的NetWork可以发现请求的数据包...原创 2018-08-02 22:04:09 · 2141 阅读 · 1 评论 -
Python 3 入门,看这篇就够了
简介Python 是一种高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。Python 由 Guido van Rossum 于 1989 年底在荷兰国家数学和计算机科学研究所发明,第一个公开发行版发行于 1991 年。特点 易于学习:Python 有相对较少的关键字,结构简单,和一个明确定义的语法,学习起来更加简单。 易于阅读:Python 代码...原创 2018-08-22 12:48:12 · 1768 阅读 · 0 评论 -
内存模型是怎么解决缓存一致性的?
我们在文章中提到过,由于CPU和主存的处理速度上存在一定差别,为了匹配这种差距,提升计算机能力,人们在CPU和主存之间增加了多层高速缓存。每个CPU会有L1、L2甚至L3缓存,在多核计算机中会有多个CPU,那么就会存在多套缓存,那么这多套缓存之间的数据就可能出现不一致的现象。为了解决这个问题,有了内存模型。内存模型定义了共享内存系统中多线程程序读写操作行为的规范。通过这些规则来规范对内存的读写操作...原创 2018-08-20 22:17:09 · 423 阅读 · 0 评论 -
史上最全Redis高可用技术解决方案大全
Redis常见的几种主要使用方式: Redis 单副本 Redis 多副本(主从) Redis Sentinel(哨兵) Redis Cluster Redis 自研 Redis各种使用方式的优缺点:1Redis单副本Redis 单副本,采用单个Redis节点部署架构,没有备用节点实时同步数据,不提供数据持久化和备份策略,适用于数...原创 2018-08-24 13:01:08 · 429 阅读 · 0 评论 -
Redis的3个高级数据结构
平常接触最多的是5个入门级数据结构:String,Hash,List,Set,Sorted Set,本文介绍3个高级数据结构:Bitmaps,Hyperloglogs,GEO。Bitmapsbitmaps不是一个真实的数据结构。而是String类型上的一组面向bit操作的集合。由于strings是二进制安全的blob,并且它们的最大长度是512m,所以bitmaps能最大设置2^32个不同...原创 2018-08-24 13:04:32 · 5042 阅读 · 0 评论 -
图解Tomcat类加载机制
现在了解tomcat的类加载机制,原来一切是这么的简单。类加载在JVM中并不是一次性把所有的文件都加载到,而是一步一步的,按照需要来加载。比如JVM启动时,会通过不同的类加载器加载不同的类。当用户在自己的代码中,需要某些额外的类时,再通过加载机制加载到JVM中,并且存放一段时间,便于频繁使用。因此使用哪种类加载器、在什么位置加载类都是JVM中重要的知识。...原创 2018-09-10 21:45:06 · 174 阅读 · 0 评论 -
10 个提升逼格的 Redis 命令
keys我把这个命令放在第一位,是因为笔者曾经做过的项目,以及一些朋友的项目,都因为使用keys这个命令,导致出现性能毛刺。这个命令的时间复杂度是O(N),而且redis又是单线程执行,在执行keys时即使是时间复杂度只有O(1)例如SET或者GET这种简单命令也会堵塞,从而导致这个时间点性能抖动,甚至可能出现timeout。强烈建议生产环境屏蔽keys命令(后面会介绍如何屏蔽)。...原创 2018-09-19 12:45:36 · 1389 阅读 · 0 评论 -
Top K算法分析
TopK,是问得比较多的几个问题之一,到底有几种方法,这些方案里蕴含的优化思路究竟是怎么样的,今天和大家聊一聊。问题描述:从arr[1, n]这n个数中,找出最大的k个数,这就是经典的TopK问题。栗子:从arr[1, 12]={5,3,7,1,8,2,9,4,7,2,6,6}这n=12个数中,找出最大的k=5个。一、排序排序是最容易想到的方法,将n个数排序之后...原创 2018-10-04 20:35:33 · 27649 阅读 · 6 评论 -
Java堆外内存使用
JVM内部会把所有内存分成Java使用的堆内存和Native使用的内存,它们之间是不能共享的,就是说当你的Native内存用完了时,如果Java堆又有空闲内存,这时Native会重新向Jvm申请,而不是直接使用Java堆内存。使用堆外内存,就是为了能直接分配和释放内存,提高效率。JDK5.0之后,代码中能直接操作本地内存的方式有2种:使用未公开的Unsafe和NIO包下ByteBuffer。...原创 2018-10-24 21:49:21 · 2912 阅读 · 1 评论 -
读懂Netty的高性能架构之道
Netty是一个高性能、异步事件驱动的NIO框架,它提供了对TCP、UDP和文件传输的支持,作为一个异步NIO框架,Netty的所有IO操作都是异步非阻塞的,通过Future-Listener机制,用户可以方便的主动获取或者通过通知机制获得IO操作结果。作为当前最流行的NIO框架,Netty在互联网领域、大数据分布式计算领域、游戏行业、通信行业等获得了广泛的应用,一些业界著名的开源组件也基...原创 2018-11-12 22:09:15 · 235 阅读 · 0 评论 -
JVM性能调优监控工具jps、jstack、jmap、jhat、jstat、hprof使用详解
现实企业级Java应用开发、维护中,有时候我们会碰到下面这些问题: OutOfMemoryError,内存不足 内存泄露 线程死锁 锁争用(Lock Contention) Java进程消耗CPU过高 ...... 这些问题在日常开发、维护中可能被很多人忽视(比如有的人遇到上面的问题只是重启服务器或者调大内存,而不会深究问题根源)...原创 2018-11-15 12:48:48 · 311 阅读 · 1 评论 -
常用服务器日志分析Shell命令
1、查看有多少个IP访问:awk'{print$1}'log_file|sort|uniq|wc -l2、查看某一个页面被访问的次数:grep"/index.php"log_file | wc -l3、查看每一个IP访问了多少个页面:awk'{++S[$1]} END {for (a in S) print a,S[a]}'log_file >log...原创 2019-01-28 20:27:09 · 922 阅读 · 0 评论 -
SQL优化方案设计
在进行MySQL的优化之前,必须要了解的就是MySQL的查询过程,很多查询优化工作实际上就是遵循一些原则,让MySQL的优化器能够按照预想的合理方式运行而已。图-MySQL查询过程一、优化的哲学注:优化有风险,涉足需谨慎1、优化可能带来的问题?优化不总是对一个单纯的环境进行,还很可能是一个复杂的已投产的系统; 优化手段本来就有很大的风险,只不过你没能力意识到和预见到; ...原创 2019-01-28 21:06:09 · 487 阅读 · 0 评论 -
Java 各种锁小结
一. synchronized 二. 对象锁、类锁、私有锁 三. ReentrantLock 四. ReentrantReadWriteLock 五. CAS 六. Condition 七. Semaphore 八. CountDownLatch 九. 锁的分类 十. 总结一. synchronized在 JDK 1.6 之前,synchronized 是重量级锁,效率低下...原创 2019-02-17 18:09:18 · 464 阅读 · 0 评论 -
Java 自定义 ClassLoader 实现 JVM 类加载
定义需要加载的类 定义类加载器 编译需要加载的类文件 编译自定义的类加载器并支行程序 总结定义需要加载的类为了能够实现类加载,并展示效果,定义一个Hello类,再为其定义一个sayHello()方法,加载Hello类之后,调用它的sayHello()方法。publicclassHello{publicstaticvoidsayHello(){...原创 2019-02-17 20:08:59 · 258 阅读 · 0 评论 -
BAT 经典算法笔试题 —— 磁盘多路归并排序
在 LevelDB 数据库中高层数据下沉到低层时需要经历一次 Major Compaction,将高层文件的有序键值对和低层文件的多个有序键值对进行归并排序。磁盘多路归并排序算法的输入是来自多个磁盘文件的有序键值对,在内存中将这些文件的键值对进行排序,然后输出到一到多个新的磁盘文件中。多路归并排序在大数据领域也是常用的算法,常用于海量数据排序。当数据量特别大时,这些数据无法被单个机器内存容...原创 2019-02-17 20:43:54 · 479 阅读 · 0 评论 -
图解ZooKeeper的典型应用场景
zookeeper在很多框架中都有应用,例如:Dubbo,Hadoop,Kafka等,但典型的用法也就几种,掌握了这几种用法,再看zookeeper在相关框架中的应用就很轻松,下一篇文章将会详细介绍zookeeper在dubbo中的使用,以便有一个更深刻的了解本文参考了《从Paxos到ZooKeeper》,鉴于本文的定位是一篇科普性质的文章,因此对于一些诸如共享锁和分布式队列的具体实现没...原创 2019-02-17 21:14:25 · 963 阅读 · 1 评论 -
TCP的三次握手四次挥手
尽管TCP和UDP都使用相同的网络层(IP),TCP却向应用层提供与UDP完全不同的服务。TCP提供一种面向连接的、可靠的字节流服务。面向连接意味着两个使用TCP的应用(通常是一个客户和一个服务器)在彼此交换数据之前必须先建立一个TCP连接。这一过程与打电话很相似,先拨号振铃,等待对方摘机说“喂”,然后才说明是谁。这是一个互相确认的过程,以保证数据传输的可靠性。1、熟悉下tcp报文下面是...原创 2019-04-21 20:57:48 · 252 阅读 · 0 评论 -
黑客,一般用什么兵器来进行网络抓包呢?
这是一个什么工具呢?这么神奇"其实我相信大家很多人都听说过或者使用过,而且这个工具也是黑客或者从事网络工程的工作者必用的工具,它就是"网络抓包工具"。今天我们就详细介绍一下网络抓包的目的是什么?常用的网络抓包工具有哪些?网络抓包工具的使用方法和技巧!# 网络抓包目的是什么?官方定义:抓包(packet capture)就是将发送与接收的进行截获、重发、编辑、转存等操作,也用来检查网络安...原创 2019-05-22 07:58:40 · 1405 阅读 · 0 评论 -
每个程序员都应该收藏的算法复杂度速查表
这篇文章覆盖了计算机科学里面常见算法的时间和空间的Big-O 复杂度。我之前在参加面试前,经常需要花费很多时间从互联网上查找各种搜索和排序算法的优劣,以便我在面试时不会被问住。最近这几年,我面试了几家硅谷的初创企业和一些更大一些的公司,如 Yahoo、eBay、LinkedIn 和 Google,每次我都需要准备这个,我就在问自己,“为什么没有人创建一个漂亮的Big-O速查表呢?”所以,为了节省大...原创 2019-05-28 08:01:54 · 207 阅读 · 0 评论 -
一个 TCP 连接可以发多少个 HTTP 请求?
曾经有这么一道面试题:从 URL 在浏览器被被输入到页面展现的过程中发生了什么?相信大多数准备过的同学都能回答出来,但是如果继续问:收到的 HTML 如果包含几十个图片标签,这些图片是以什么方式、什么顺序、建立了多少连接、使用什么协议被下载下来的呢?要搞懂这个问题,我们需要先解决下面五个问题: 现代浏览器在与服务器建立了一个 TCP 连接后是否会在一个 HTTP 请求完成后断开?什么...原创 2020-11-29 14:20:38 · 8345 阅读 · 3 评论