自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(172)
  • 资源 (8)
  • 收藏
  • 关注

原创 分布式系统回滚机制

事务回滚发布回滚发布版本化增量发布灰度发布架构升级并行发布静态资源版本回滚回滚是指当程序或者数据出错时,恢复到最近的一个正确版本的行为。最常见的如事务回滚、代码库回滚、部署版本回滚、数据版本回滚、静态资源版本回滚等。通过回滚机制,可以在发布系统出现故障时,保证系统的可用性。事务回滚提到事务回滚,单库的事务就不再多说了。对于跨库的事务,比较常见的解决方案有:两阶...

2018-07-16 10:00:52 9281

原创 分布式系统超时重试

重试的分类Nginx代理层超时客户端超时设置DNS解析超时设置代理超时设置网络连接/读/写超时设置失败重试机制设置upstream存活超时设置ngx_lua超时设置Web容器超时在实际开发当中,很多故障的产生都是因为没有意识到超时设置的重要性而造成的。如果不设置超时机制,就有可能导致连锁反应,最终系统雪崩。有些中间件天然集成了超时重试的机制,但是在设计当中...

2018-07-16 09:53:07 2399

原创 Python3安装sqlite3

简单方式下载安装在运行scrapy脚本时,遇到了一下问题:raceback (most recent call last): File "/usr/local/python3/lib/python3.6/site-packages/Twisted-17.1.0-py3.6-linux-x86_64.egg/twisted/internet/defer.py", lin...

2018-07-16 09:45:16 8271

原创 阿里云申请免费CA认证

今天说一下在阿里云上面给域名申请免费CA证书,不过这里面的域名只能针对于单个域名,也就是要么是www.moguhu.com,要么是moguhu.com。首先在阿里云控制台里面找到CA证书服务,如下所示:然后点击右上角的“购买证书”:然后选择 保护类型:“1个域名”、选择品牌:“Symantec”,然后才能选择“免费型OV SSL”,最后如下所示:确认订单后...

2018-07-16 09:41:21 2184

原创 CentOS7防火墙设置

打开端口443查看防火墙规则关闭防火墙最近在给网站做https改造,在配置完成之后,页面总是跳出拒绝连接。查看服务器端口监听,已经80和443端口都是正常监听。因为用的阿里云的服务器,安全组的端口也已经开放了。最后发现CentOS的端口没有开放,因为CentOS7和6的设置不太一样。下面说明一下:打开端口443sudo firewall-cmd --zone=p...

2018-07-16 09:34:29 1037

原创 CentOS安装python3及scrapy

安装依赖安装python3添加软连接检查安装安装Twisted安装scrapy检查安装常用库安装当服务器在做数据迁移的时候,老是要安装相关的scrapy软件,今天来整理一下。安装依赖yum update -yyum groupinstall 'Development Tools'yum install gcc gcc-devel -yyum in...

2018-07-16 09:14:50 567

原创 CAS实现第三方免登录

(本文的介绍是基于CAS4.0的版本)登录流程逻辑实现HugeAutoLoginControllercas-servlet.xmlweb.xml今天介绍一下单点登录实现无页面的免登,场景是在微信公众号端(第三方登录),用户点击微信授权后,自动登录企业系统。主要涉及的系统,以及交互如下所示:登录流程逻辑实现上面的流程看似复杂,但是我们可以暂时不用看u...

2018-07-16 09:09:46 4801

原创 使用OpenResty进行图片代理(破解反盗链)

今天在使用scrapy爬取网站的时候,因为网站的容量有限,不能拉取图片进行存储。但是源站的图片又存在着反盗链的限制,所以利用OpenResty做了一个图片代理的接口,实现了破解反盗链的功能。(如果你要问我为什么使用OpenResty来做,我会告诉你因为网站就是用OpenResty开发的)lua-resty-http在OpenResty上面使用代理时,一般情况下会用proxy_pass或...

2018-07-16 09:04:31 1550

原创 使用Hystrix实现降级熔断

之前有说到过,分布式系统降级的方式可以通过配置中心手动降级。今天介绍一下通过Hystrix实现自动降级。降级Demo话不多说,下面先来一个Demo(对于Hystrix的依赖,这里就不再介绍了)。GetStockServiceCommandpublic class GetStockServiceCommand extends HystrixCommand<Strin...

2018-07-13 10:19:40 2868

原创 笛卡尔积生成商品SKU

这一段时间在搞商品后台的系统,其中关于通过商品的销售属性,生成SKU的处理,这里说明一下。如上图所示,通过“毛色”和“体重”2个销售属性来生成商品的SKU。就需要对属性的值做笛卡尔积,其中核心代码如下所示:/** * 生成笛卡尔积 * @returns {*} */function descartes(array){ if( array.length < 2 ...

2018-07-13 10:05:02 10204 1

原创 OpenResty配置多域名反向代理

今天介绍一下单台服务器上面,配置多台子系统的反向代理配置(域名访问)。下面看一下详细的配置。nginx.conf配置#user nobody;worker_processes 1;error_log logs/error.log notice;pid logs/nginx.pid;worker_rlimit_nofile 65535;events...

2018-07-13 10:01:21 4329

原创 分布式系统降级策略(一)

在开发高并发系统时,有很多方法来保护系统,如:缓存、降级、限流等。下面将介绍一下降级的策略。当系统访问量增多,服务响应时间长或者非核心服务影响了核心服务的性能时。这是如果需要保证核心服务的可用性,就需要对非核心业务执行一些降级处理。系统可以根据关键数据进行自动降级,也可以配置开关进行人工降级。降级策略分类降级按照是否可以自动化分为:自动开关降级和人工开关降级。按照读写功能可以分为:读服...

2018-07-13 09:57:39 6843

原创 CKEditor图片上传跨域问题

在使用CKEditor上传图片时,如果要在本地起应用,图片上传至远程服务器,就有可能产生跨域问题。会有如下报错信息:ckeditor Blocked a frame with origin from accessing a cross-origin frame.如果要解决这个问题,就需要在上传图片之后,利用本地应用做一个重定向。下面看一下Demo:config.js首先修改...

2018-07-13 09:52:05 2893 1

原创 Linux的chkconfig命令

在Linux系统中配置自启动的服务,就需要使用chkconfig命令。下面介绍一下。语法chkconfig(选项)选项--add:增加所指定的系统服务,让chkconfig指令得以管理它,并同时在系统启动的叙述文件内增加相关数据;--del:删除所指定的系统服务,不再由chkconfig指令管理,并同时在系统启动的叙述文件内删除相关数据;--level<等级代...

2018-07-13 09:45:42 576

原创 分布式系统限流策略(二)

前文中介绍了系统限流的原理和基础的使用场景,本篇将介绍应用接入层(Nginx)、分布式应用如何限流。应用接入层限流(Nginx/OpenResty)接入层通常是指流量的入口,主要的目的有:负载均衡、非法请求过滤、请求聚合、缓存、降级、限流、A/B测试、服务质量监控等。对于流量接入层所使用的中间件一般都是:Nginx(OpenResty)。下面将分别介绍一下如何进行限流操作。Ng...

2018-07-13 09:40:29 2369

原创 分布式系统限流策略(一)

在开发高并发的系统时,有很多手段来保护系统,如缓存、降级和限流等。缓存可以提升系统的访问速度,降级可以暂时屏蔽掉非核心业务,使得核心业务不受影响。限流的目的通过对并发访问进行限速,一旦达到一定的速率就可以拒绝服务(定向到错误页或告知资源没有了)、排队等待(如秒杀、评论、下单等)、降级(直接返回兜底数据、如商品库存默认有货)。常见的限流方式有:限制总并发数(数据库连接池、线程池)、限制瞬时并发...

2018-07-13 09:26:18 9238

原创 Scrapy定时爬取任务(CentOS)

最近写了个自动采集电影和图片的网站,用的是Scrapy,下面介绍一下在Centos下面如何设置定时爬取任务。安装Crontab1、检查是否安装crontab执行crontab命令,如果报command not found,则表明没有安装。2、安装crontabyum install -y vixie-cron3、检查是否安装成功crontab -l...

2018-07-13 09:14:46 3511

原创 CAS单点登录脚手架

首先可以先下载一个脚手架项目,它是基于maven的overlays的无入侵的代码改造。下载地址:cas-server-overlays-templete脚手架下载完成之后,导入开发工具后,目录截图如下:从上面截图可以看出,overlays目录下面是依赖的CAS4.0版本的web项目依赖。当需要重写代码或者配置信息时,直接在src下面自定义代码和配置就可以了(maven在打包时,...

2018-07-13 09:06:02 1123

原创 CAS原理与基本概念

最近在搞公司的单点登录,后面会对CAS单点登录做详细的讲解,并一步一步的介绍如何搭建企业级的单点登录。并且会介绍如何对原生的CAS进行改造,然后支持WEB/WAP、第三方登录以及APP端的登录。系统原理集中式认证服务(英语:Central Authentication Service,缩写CAS)是一种针对万维网的单点登录协议。它的目的是允许一个用户访问多个应用程序,而只需提供一次凭证...

2018-07-12 13:03:03 1377

原创 Factory Method模式

Factory Method模式可以由Template Method演变而来。用Template Method模式来构建生成实例的工厂,这就是Factory Method。在Factory Method模式中,父类决定实例的生成方式,但是不决定具体要生成的类,具体的处理全部交给子类去负责。这样就可以将生成实例的框架(framework)和实际负责生成实例的类解耦。类图示例代...

2018-07-12 12:57:37 230

原创 Template Method模式

模板方法就是在父类中定义处理流程的框架,在子类中实现具体的处理。类图代码示例AbstractDisplay(只实现了display方法的抽象类)/** * 只实现了display方法的抽象类 * * Created by xuefeihu on 18/4/12. */public abstract class AbstractDisplay { /*...

2018-07-12 12:54:27 195

原创 Adapter模式

在编程的过程中,我们会发现有些程序无法直接使用,需要做适当的变换之后才能使用。这种用于填补“现有程序”和“所需程序”之间的差异的设计模式就是Adapter模式。Adapter模式有以下两种:类适配器模式(使用继承的适配器)对象适配器模式(使用委托的适配器)如果想让额定工作电压是12V的笔记本电脑在交流100V的电源下工作,通常会使用电源适配器。从而可以解决供需之间的电压不同。...

2018-07-12 12:50:28 218

原创 Iterator模式

Iterator模式角色我们在写Java代码的过程中,会经常用到集合类。在操作集合的过程中,会经常用到Iterator。下面介绍一下Iterator模式中的角色:Iterator(迭代器)该角色定义了按顺序逐个遍历元素的API,它定义了hasNext和next两个方法。(示例程序中的Iterator)ConcreteIterator(具体的迭代器)该角色负责实现Iter...

2018-07-12 12:40:46 325

原创 ZooKeeper的安装运行

ZooKeeper的安装模式可以大致分为3种:集群模式、单机模式和伪分布模式。其中ZK是由Java语言开发的,因此安装前需要保证本地已有JDK6及以上的Java环境。下载读者可以通过以下链接下载自己所需要的ZK版本:https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/。下载解压缩后,目录结构如下所示: bin:ZK的可执行脚本...

2018-07-12 12:33:56 253

原创 Linux安装Redis3.2.8

下载Rediswget http://download.redis.io/releases/redis-3.2.8.tar.gz tar -zxvf redis-3.2.8.tar.gz 编译解压缩后,进入目录并编译。cd redis-3.2.8make安装编译完成之后,会生成一个src目录,进入src并安装。cd srcmake insta...

2018-07-12 12:16:22 1264

原创 Linux安装MySQL

删除MySQLyum remove mysql mysql-server mysql-libs mysql-server将找到的相关目录或文件删除find / -name mysql查询出的结果,使用yum remove删除rpm -qa | grep mysql安装MySQLyum install mysql mysql-server mysql-...

2018-07-12 12:00:47 184

原创 ZooKeeper的ZAB协议

很多人认为ZooKeeper是Paxos算法的一个实现,但是ZK并没有完全采用Paxos算法,而是使用了一种叫做ZooKeeper Atomic Broadcast(ZAB,ZooKeeper原子消息广播协议)的协议作为数据一致性的核心算法。 ZAB协议的核心是定义了修改数据的事务处理请求: 所有事务请求必须由一个全局唯一的服务器(Leader)来协调处理,其他的服务器则成为Follower。...

2018-07-12 11:30:06 624 1

原创 ZooKeeper基本概念

Apache Zookeeper是由Apache Hadoop的子项目发展而来的,在2010年11月正式成为了Apache的顶级项目。ZK为分布式应用提供了高效可靠的分布式协调服务,如:统一命名、配置管理、分布式锁、发布/订阅、负载均衡等。它采用的是一种名为ZAB(ZooKeeper Atomic Broadcast)的一致性协议。ZK分布式一致性顺序一致性:从同一个客户端发起的请求,最终...

2018-07-12 11:07:05 256

原创 可视化性能监控工具VisualVM

VisualVM是一个功能强大的免费的可视化性能监控工具,它的功能基本上包含了JDK提供的其他的工具。除此之外,它还可以支持插件的拓展。下面介绍一下其使用。启动当jvisualvm命令在系统的PATH中时,在命令行中执行jvisualvm便可以启动工具。如下所示:...

2018-07-11 22:31:01 7239

原创 JVM垃圾收集器细节补充

禁用System.gc()        System.gc()会显式直接触发Full GC,同时对老年代和新生代进行回收。JVM的内存回收都是自动的,一般情况下不需要我们手动触发GC。因此如果要在程序中禁用,可以通过-XX:+DisableExplicitGC禁用。当程序中使用了System.gc(),就相当于调用了一个空函数。对象何时进入老年代        一般情况下,新创建的对

2017-10-28 15:29:32 385

原创 HotSpot的G1收集器(日志分析)

GC日志分析        笔者找了一个WEB项目,然后使用如下GC参数,获得G1的GC日志。-Xmx1024m -Xms1024m -XX:+UseG1GC -XX:+PrintGCDetails -XX:MaxGCPauseMillis=200 -Xloggc:/Users/xuefeihu/Desktop/gc.log        截取的部分GC日志如下所示:# 初

2017-10-28 15:21:08 2742

原创 HotSpot的G1收集器

G1收集器(Garbage-First)是在JDK7中正式使用的GC收集器。从长期看来,它是为了取代CMS收集器,并且在刚刚发布的JDK9中,G1已经成为默认的GC收集器。        G1和其他收集器截然不同,从分代上看,它仍然属于分代垃圾收集器,也会区分新生代、老年代,仍然有Eden区和Survivor区;从堆结构上看,它并不要求新生代、老年代都连续。作为CMS的长期替代方案,G1使用了

2017-10-28 15:06:00 766

原创 阿里云Centos7.2安装MySQL

安装可用的rpm包[root]# rpm -Uvh http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm查看可用安装资源[root]# yum repolist enabled | grep "mysql.*-community.*"安装[root]# yum -y install mysql-com

2017-10-28 14:59:01 806

原创 OpenResty安装(Centos7.2)

下载、解压安装包[root]# wget https://openresty.org/download/openresty-1.11.2.5.tar.gz安装libpq、pcre、openssllibpq[root]# yum install postgresql-devel        如果不安装libpq,则有可能报出以下错误:./configure:

2017-10-22 23:25:46 8219 1

原创 Java引用类型(Reference)

GC的基本思想是考察每个对象的可触及性(可达性),就是从GC Root开始是否可以访问到这个对象。如果可以,则可达,否则就是不可达。在Java中,可作为GC Roots的对象包括:        JVM栈(栈中的本地变量表)中的引用的对象        方法去中类静态属性引用的对象        方法区中常量引用的对象        本地方法栈中JNI(Native方法)引用的对象

2017-10-22 22:59:32 420

原创 ClassLoader类加载器

ClassLoader是Java的核心组件,所有的Class都是由ClassLoader进行加载的。ClassLoader通过各种方式,将CLass信息的二进制流读入系统,然后交给JVM进行连接、初始化等操作。比较两个类是否“相等”        比较两个类是否“相等”,只有在这两个类是由同一个类加载器加载的前提下才有意义。这里所指的相等,包括equals()、isAssignable

2017-09-17 20:40:47 476

原创 Class字节码指令解释执行

JVM指令主要包含了一下几种类型:加载和存储指令、运算指令、类型转换指令、对象创建与访问指令、操作数栈管理指令、控制转移指令、方法调用和返回指令、异常处理指令、同步指令等。基于栈的解释器执行过程        下面看一下一个简单的代码片段,如下所示:public class StackTest { public int calc() { int a = 100; int

2017-09-17 16:00:19 4183 1

原创 Class文件结构

Class文件是由Java语言或者其他语言编译而得到的,然后再交给JVM去加载和执行。对于Class文件,我们可以通过文本编辑器查看它的16进制编码,然后分析它的组成构造。下面我们看一下Class文件包含哪些模块:        对于Class字节码文件的查看,最初我们会用16进制的文本编辑器查看。但是这种方式并不常用,一般情况下我们会使用javap -verbose XX.cla

2017-09-17 15:37:08 774

原创 LongAdder | LongAccumulator简介

说到LongAdder,不得不提的就是AtomicLong。AtomicLong是JDK1.5开始出现的,里面主要使用了一个long类型的value作为成员变量。然后使用循环的CAS操作去操作value的值。优化思想        LongAdder是JDK1.8开始出现的,所提供的API基本上可以替换掉原先的AtomicLong。LongAdder所使用的思想就是热点分离,这一点可以类比

2017-09-03 20:18:23 5984

原创 StampedLock的简单用法

StampedLock是JDK1.8新引入的锁机制,可以简单的理解为读写锁的改进版本。我们知道读写锁可以让读和读之间完全并发,但是读和写之间是有阻塞的。StampedLock使用了一种乐观锁的读策略,这种机制类似于无锁的概念,使得获取锁的过程中不会阻塞写线程。简单例子        下面给出一个JDK官方给的Demo:public class Point { private d

2017-09-03 20:08:58 1835

Spring-data-redis(Version 1.6.0.RC1)中文版

该文档为Spring Data Redis1.6官方文档的翻译。其中有一些翻译不是很恰当,敬请谅解!

2015-09-14

Apache2.4+Tomcat8.0集群安装--测试项目

Apache2.4+Tomcat8.0集群安装--测试项目。集群配置地址为:

2015-06-28

spring security3.1英文版 PDF

此文档为spring security3.1英文版参考书籍,不是官方文档,英文原版。

2014-09-29

EXTjs4.1中文API

EXTJS4 1完全中文版API 该资源涵盖了 下载你就知道了

2014-04-21

面向对象分析与设计-麻志毅-PPT

面向对象分析与设计-麻志毅-PPT,官方课件!

2013-02-19

数据仓库与数据挖掘技术(第2版)[陈京民]PPT

数据仓库与数据挖掘技术(第2版)[陈京民]PPT

2013-02-19

spring3.1源码包

spring源码包,spring框架,java学习,web框架学习

2012-11-28

空空如也

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

TA关注的人

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