自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(245)
  • 资源 (2)
  • 论坛 (2)
  • 收藏
  • 关注

转载 监控工具选型对比

  监控维度可以分为节点资源监控(CPU、内存、带宽、磁盘)、应用探活监控(探活心跳)、应用服务能力监控(自动化回归测试)、应用服务性能监控等(全链路追踪),本文主要对比节点资源监控中常使用的prometheus和zabbix。一、监控工具1、prometheus  Kubernetes自从2012年开源以来便以不可阻挡之势成为容器领域调度和编排的领头羊,Kubernetes是Google Borg系统的开源实现,于此对应Prometheus则是Google BorgMon的开源实现。Promethe

2021-02-27 13:29:58 227

转载 全链路追踪选型对比

  监控维度可以分为节点资源监控(CPU、内存、带宽、磁盘)、应用探活监控(探活心跳)、应用服务能力监控(自动化回归测试)、应用服务性能监控等(全链路追踪),本文主要对比全链路追踪中常使用的Zipkin、Pinpoint、SkyWalking和CAT。一、全链路追踪工具1、Zipkin  Twitter开源的调用链分析工具,目前基于springcloud sleuth得到了广泛的使用,特点是轻量,使用部署简单。2、Pinpoint  韩国人开源的基于字节码注入的调用链分析,以及应用监控分析工具。特

2021-02-27 13:29:16 455

原创 远程调用选型对比

一、远程调用  一般来说服务间远程调用有两种方式,HTTP和RPC。HTTP主要包括Httpclient、OkHTTP、RestTemplate、Feign(对RestTemplate封装可集成Ribbon做负载均衡)等;RPC主要包括dubbo、grpc、brpc、motan、rpcx、thrift等。本文主要对比springcloud框架常使用的远程服务调用框架Feign和Dubbo二、远程调用对比对比项feigndubbo协议httprpc/rmi/http性能

2021-02-27 13:28:17 114

原创 网关选型对比

一、为什么使用网关  不同的微服务一般会有不同的网络地址,而外部客户端可能需要调用多个服务的接口才能完成一个业务需求,如果让客户端直接与各个微服务通信,会有以下的问题:  1)客户端会多次请求不同的微服务,增加了客户端的复杂性  2)存在跨域请求,在一定场景下处理相对复杂  3)认证复杂,每个服务都需要独立认证  4)难以重构,随着项目的迭代,可能需要重新划分微服务  5)某些微服务可能使用了防火墙 / 浏览器不友好的协议,直接访问会有一定的困难  典型的网关架构如下:二、常见网关对比1

2021-02-27 13:27:33 531

原创 配置中心选型对比

一、为什么使用配置中心1、配置的动态更新:修改配置后,不重启服务也能使修改后的配置生效2、配置集中式管理:如果每个节点自己维护配置文件,当有成百上千的服务节点时,维护起来成本太大3、配置内容的安全性和权限:有些密码、密钥等保存在代码库会被所有享有代码库权限的程序员看到,容易泄密4、多环境下的配置管理二、常见配置中心对比功能点SpringCloud ConfigApolloNacos开源时间2014.92016.52018.6配置实时推送支持(SpringCl

2021-02-27 13:26:50 189

原创 注册中心选型对比

一、为什么使用注册中心  服务注册中心本质上是为了解耦服务提供者和服务消费者。对于任何一个微服务,原则上都应存在或者支持多个提供者,这是由微服务的分布式属性决定的。更进一步,为了支持弹性扩缩容特性,一个微服务的提供者的数量和分布往往是动态变化的,也是无法预先确定的。因此,原本在单体应用阶段常用的静态LB机制就不再适用了,需要引入额外的组件来管理微服务提供者的注册与发现,而这个组件就是服务注册中心。二、常见注册中心对比对比项NacosEurekaConsulZookeeper数

2021-02-27 13:25:56 184

原创 基于Netty实现UDP双向通信

1、Channel继承关系关于ChannelPipeline原理可参考:https://blog.csdn.net/qq_21033663/article/details/1056742612、NIO Channel分类1)NioDatagramChannel:发送和接收数据包,支持TCP和UDP,对DatagramSocket和selector进行封装2)NioServerSocketChannel:服务端使用,对JDK的ServerSocketChannel进行了封装3)NioSocketC

2021-02-09 17:44:27 595 4

原创 Nginx Https 双向认证

1 基础知识1.1 单向认证 SSL 步骤1、客户端的浏览器向服务器传送客户端 SSL 协议的版本号,加密算法的种类,产生的随机数,以及其他服务器和客户端之间通讯所需要的各种信息2、服务器向客户端传送 SSL 协议的版本号,加密算法的种类,随机数以及其他相关信息,同时服务器还将向客户端传送自己的证书3、客户利用服务器传过来的信息验证服务器的合法性,服务器的合法性包括:证书是否过期,发行服务器证书的 CA 是否可靠,发行者证书的公钥能否正确解开服务器证书的“发行者的数字签名”,服务器证书上的域名是否和

2021-02-04 17:27:08 50

原创 工作五年经验总结

2020年终总结1、工作: 1)加入了百度自动驾驶(百度AI逆袭关键),并在新工作中成为骨干力量 2)意外收获:刚入职就赶上公司薪酬体系调整加了0.5薪,股票算是抄底目前已经double+了 3)机会成本:放弃了对标阿里P7的offer,此处应手动@谭小胖同学补顿酒,说好的能申请跨级转正呢2、生活: 1)30岁,而立之年,划过一道美丽的弧线 2)百善孝为先:奶奶去世了,到现在我也不太能接受,总觉得一回到老家就能见到奶奶,希望趁爸妈还未老去多陪陪他们,尽尽孝心,从未感受过能和家人在一起原来那么重

2021-01-01 12:31:13 3202 5

原创 分布式数据一致性/分布式事务总结

一、简述1、分布式事务/分布式数据一致性问题根源:存储资源的分布性,写多个资源,写入不能确保一定成功2、分布式事务模型: 1)AP:Application,应用程序 2)RM:Resource Manager,资源管理器 3)TM:Transation Manager,事务管理器 注:事务可分为全局事务和分支事务二、常见解决方案1、两阶段提交 1)实现思路:  a)准备阶段:事务管理器(TM)通知资源管理器(RM)准备分支事务,记录事务日志,并告知事务管理器的准备结果。即挨个资源管理器除

2020-11-14 19:34:35 168

原创 Protobuf序列化

Protobuf是Google出品的一款编解码框架。1、优点:  1)谷歌内部长期使用,成熟度高  2)跨语言,支持C++、Java、Python、JavaScript、PHP、Ruby、C#、Objective-C等  3)码流小  4)性能高2、缺点:  1)pojo生成方式增加额外复杂度  2)灵活性差,定义数据格式后不可修改,需要重新生成pojo  3)pojo不支持json操作综上所述:Protobuf序列化方式适用于跨语言通信、对码流大小和性能要求高、且pojo不经常变化的场

2020-05-17 11:51:02 570

原创 使用jclasslib修改字节码/源码

  查看源码很简单,一些常用IDE里如idea、eclipse都提供了查看class文件源码的功能,虽然跟源码有些出入(解语法糖等),但功能实现上是一致的,且比源码更贴近于JVM运行时的情况。  有时候我们需要修改源码以满足使用要求,对于java代码生成的字节码重新源码就比较简单了,一种方式是继承然后重新部分功能,另一种方式是直接创建一个同名类文件,把反编译的源码复制进去,修改后,将新生成的cl...

2020-05-05 11:38:31 639

原创 虚拟机字节码指令表

本文字节码指令图片来源于《深入理解Java虚拟机》第2版

2020-05-04 10:41:17 196

原创 gateway url适配

由于版本迭代,有的时候需要做老接口的兼容适配,有很多种方式,比如在nginx配置路由规则,在网关配置路由规则,本篇通过使用反射的方式在网关层全局过滤器中重写request请求的方式实现url适配。import lombok.extern.log4j.Log4j2;import org.apache.commons.lang3.StringUtils;import org.springfram...

2020-05-03 13:28:05 898

原创 网关支持跨域

一、zuul跨域:配置方式application.ymlzuul: sensitive-headers: Access-Control-Allow-Origin ignored-headers:Access-Control-Allow-Origin,H-APP-Id,Token,APPToken二、gateway跨域:过滤器方式Spring Cloud Gateway 2.x Net...

2020-05-03 13:18:14 480

原创 java序列化框架码流、性能对比

本文对序列化框架:JDK、Kryo、Hession、FST、Fastjson、Gson进行对比,对比维度包括序列化后码流大小、10w次序列化反序列化性能耗时。1、依赖jar包 <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifa...

2020-04-25 11:57:34 299

转载 ChannelPipeline

Netty4Netty是一个和MINA类似的Java NIO框架,目前的最新版本是4.0.13,这两个框架的主要作者好像都是同一个韩国人。ChannelChannel是Netty最核心的接口,一个Channel就是一个联络Socket的通道,通过Channel,你可以对Socket进行各种操作。ChannelHandler用Netty编写网络程序的时候,你很少直接操纵Channel,而是...

2020-04-22 09:37:32 478

原创 将微服务运行在Docker上

 将微服务运行在Docker上,首先要把服务制作成镜像,然后将镜像推送到公有仓库或私有仓库(可选步骤),最后像使用其他镜像的方式一样,使用我们的镜像。 本文将展示三种将微服务运行在Docker上的方式:1)通过Dockerfile;2)通过maven插件;3)通过Docker Compose一、Dockerfile的方式 Dockerfile是一个文本文件,其中包含了若干指令,指令描述了构建...

2020-03-08 17:21:51 231

原创 springboot集成rocketmq

  本文是springboot集成rocketmq的入门篇,主要介绍单机环境下安装rocketmq,并集成到springboot框架中,实现字符串类型消息的生产和消费。  1)高可用集群部署方案请参考 待更新。。。  2)更多使用方式请参考 待更新。。。一、下载、安装、启动1、下载http://rocketmq.apache.org/dowloading/releases/2、安装...

2020-02-17 22:22:07 448

转载 使用Docker安装Nginx

本文主要讲述使用docker安装nginx镜像,并将docker内文件挂载到物理机上1、下载Nginx镜像docker pull nginx2、本地创建挂载文件夹/Users/zhanghao/data/nginx/conf//Users/zhanghao/data/nginx/conf.d//Users/zhanghao/data/nginx/html//Users/zhangh...

2020-01-30 23:27:45 386

原创 工作四年经验总结

  今年的年终总结做的比较迟,这个月发生了好多事:搬家、找工作、带娃过年、肺炎疫情、科比离开,虽然一直坚信唯一不变的是变化,但当很多事情同时发生时,还是需要一点时间来适应。2019年总结1、工作上:由于可控和不可控的一些因素,今年的两个小目标都没有实现,不想说太多,尽全力做最好的自己,来年继续奋斗,fire!!!2、生活上:收获了一枚可爱的猪宝宝(琛宝),过渡性的买了第一套房(昌平北六环)。...

2020-01-28 01:10:50 494 3

原创 如何设计一个秒杀系统

1、问题抽象:并发读、并发写、稳准快2、4要1不要:数据要尽量少、请求数要尽量少、路径要尽量短、依赖要尽量少(服务分级)、不要有单点3、秒杀思路:秒杀系统独立部署、热点数据进缓存、答题环节、动静分离、本地缓存、限流4、动静分离 1)做法:  a、把静态数据缓存到离用户最近的地方:浏览器、CDN、服务端Cache  b、静态化改造,直接缓存HTTP连接  c、代理层缓存 2)动静分离...

2019-11-20 21:54:27 150

原创 Kafka安装及使用

本示例使用docker安装,springboot使用1、安装zookeeper(示例中单点)1)下载:docker pull wurstmeister/zookeeper2)安装:docker run -d --name zookeeper -p 2181:2181 wurstmeister/zookeeper2、安装kafka(示例中两台broker组成的集群)1)下载:docker ...

2019-10-07 11:36:11 198

原创 延迟队列浅析

        早期需要延迟处理的业务场景,更多的是通过定时任务扫表,然后执行满足条件的记录,具有频率高、命中低、资源消耗大的缺点。随着消息中间件的普及,延迟消息可以很好的处理这种场景,本文主要介绍延迟消息的使用场景以及基于常见的消息中间件如何实现延迟队列,最后给出了一个在网易公开课使用延迟队列的实践。一、使用场景...

2019-09-23 20:25:58 2236

原创 Feign实战

1、Feign  是一个声明式、模版化的HTTP客户端,有助于更便捷、优雅地调用HTTP API。在Spring Cloud中自动的为Feign整合了Ribbon和Eureka,使用时创建一个接口并添加@FeignClient即可2、使用Demo  1)添加Feign依赖<!-- Feign --><dependency> <groupId>org....

2019-06-15 09:48:14 622

原创 Ribbon实战

1、Ribbon简介Ribbon是Netflix发布的负载均衡器,配合Eureka使用时,可自动从Eureka Server获取服务提供者地址列表,并基于负载均衡算法,请求其中一个服务提供者实例2、使用Demo1)引入Ribbon依赖<dependency> <groupId>org.springframework.cloud</groupId> ...

2019-06-10 22:24:17 311

转载 ActiveMQ失效转移(Failover)

本文的ActiveMQ都基于5.10版本,参考了ActiveMQ官方文档:http://activemq.apache.org/failover-transport-reference.html。 集群是个比较广泛的概念,它有多种形式,关于消息服务的集群,大概分为Consumer集群(消费者集群)和Broker集群(消息服务器集群)两种。 对于消费者集群,对于队列消费者,主要是:1.保证...

2019-05-13 20:14:34 2304 3

原创 ActiveMQ基于JmsTemplate的持久化

持久化需要满足两个条件:  1)消息服务开启了持久化功能;  2)生产者发送持久化消息注:笔者建议MQ服务开启持久化功能,生产者根据消息内容的重要性、量级来合理使用持久化或不使用持久化本文主要描述,消息服务的默认持久化功能及存储,不涉及定制存储方式。本文描述JmsTemplate的发送消息时如何设置是否支持持久化,其他使用方式类同一、ActiveMQ开启持久化功能(默认开启)1、支持持...

2019-05-11 11:29:35 611

原创 Eureka实战

一、简介1、微服务架构中关键组件:服务提供者、服务消费者、服务发现组件2、服务发现组件的功能:  1)服务注册表:用来记录各个微服务的信息  2)服务注册:指微服务在启动时,将自己的信息注册到服务发现组件的过程  3)服务发现:指查询可用微服务列表及其网络地址的机制  4)服务检查:服务发现组件使用一定机制定时检测已注册的服务,如发现某实例长时间无法访问,就会从服务注册表中移除...

2019-05-03 13:07:01 561

原创 SpringCloud与SpringBoot版本兼容性

  Spring Cloud是在Spring Boot基础上构建的,用于快速构建分布式系统的通用模式工具集,适合在Docker或PaaS上部署,又叫云原生应用。(云原生指面向云环境的软件架构)一、SpringCloud版本1、命名规则:英文单词 RELEASE 或 英文单词 SRX2、解释: 1)英文单词:按照字母顺序发行 2)第一个稳定版本为:英文单词 RELEASE 3)SR1:...

2019-05-01 14:27:01 1246

转载 Maven中的SNAPSHOT版本和Release版本

Maven中建立的依赖管理方式基本已成为Java语言依赖管理的事实标准,Maven的替代者Gradle也基本沿用了Maven的依赖管理机制。在Maven依赖管理中,唯一标识一个依赖项是由该依赖项的三个属性构成的,分别是groupId、artifactId以及version。这三个属性可以唯一确定一个组件(Jar包或者War包)。其实在Nexus仓库中,一个仓库一般分为public(Release...

2019-03-09 08:58:55 2869

原创 Spring Integration

&nbsp;&nbsp;&nbsp;&nbsp;系统集成Spring Integration提供了基于Spring的EIP(Enterprise Integration Patterns,企业集成模式)的实现,主要解决不同系统之间的交互问题,通过异步消息驱动来达到系统交互时系统之间的松耦合,由Message、Channel、Message EndPoint组成。一、Message:用来在不同部分...

2019-02-16 13:02:45 1907

原创 Spring Batch

Spring Batch是用来处理大量数据操作的一个框架,读取大量数据然后进行一定处理后输出成指定的形式。组成部分:1)JobRepository:用来注册Job的容器2)JobLauncher:用来启动Job的接口3)Job:要实际执行的任务,包含一个或多个Step4)Step:执行步骤,包含5)6)7)5)ItemReader:用来读取数据的接口6)ItemProcessor:用...

2019-02-16 10:35:22 125

转载 package-info类

Java中有一个特殊的类:package-info类,它是专门为本包服务的。一、特殊性1、它不能随便被创建在一般的IDE中,Eclipse、package-info等文件是不能随便被创建的,会报“Type name is notvalid”错误,类名无效。在Java变量定义规范中规定如下字符是允许的:字母、数字、下划线,以及那个不怎么常用的$符号,不过中划线可不在之列,那怎么创建这个文件呢?...

2019-02-13 12:19:57 921

原创 Spring Cache

Spring对缓存的支持,org.springframework.cache.CacheManager是Spring提供的各种缓存技术抽象接口,org.springframework.cache.Cache接口包含缓存的各种操作(增删查)1、spring 定义的CacheManager实现CacheManager描述SimpleCacheManager使用简单的Colle...

2019-02-13 11:33:30 147

原创 WebSocket

一、双向通信常用解决方案常用单向通信,前端发出请求,服务端作出响应。很多场景下需要服务端主动向客户端发出通知,常见解决方案:1、轮询1)简单轮询:间隔固定时间,向服务端发送请求来刷新页面数据。缺点:建立连接,资源消耗2)变间隔轮询:间隔不固定,若返回数据无变化,则延长请求间隔时间,反之有变化则缩短请求间隔时间3)带缓存的轮询:设置数据失效时间,优先从客户端缓存中获取,失效后从服务端获取。...

2019-02-12 11:28:16 162

原创 RSA加密解密

一、简介RSA加密算法是一种非对称加密算法,基于公钥加密私钥解密和私钥加密公钥解密两种使用方式。RSA算法基于一个十分简单的数论事实:将两个大质数相乘十分容易,但是想要对其乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥。其中:E(Encryption), D(Decryption), N(Number)都是整数二、安全性RSA是目前最有影响力和最常用的公钥加密算法,它能够抵...

2019-01-26 09:39:31 1062

转载 MySQL order by和limit混用的坑

在Mysql中我们常常用order by来进行排序,使用limit来进行分页,当需要先排序后分页时我们往往使用类似的写法select * from 表名 order by 排序字段 limt M,N。但是这种写法却隐藏着较深的使用陷阱。在排序字段有数据重复的情况下,会很容易出现排序结果与预期不一致的问题。官方文档:https://dev.mysql.com/doc/refman/5.7/en/l...

2019-01-23 23:28:24 1489

原创 scp命令

1、scp -P 远程端口号 本地路径 登录用户@服务器地址:服务器保存路径例:scp -P 1024 /Users/a.txt zhanghao@server:/Home/data/a.txt2、chmod 修改文件的权限3、mv 移动到目标路径注:若登录用户对目标路径有操作权限,则可省略2、3两步...

2019-01-05 16:09:55 7057

原创 工作三年经验总结

一、职业规划&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;今年年初,职业规划方面愈发的清晰,将毕业时制定的前10年职业规划(前三步),拓展到了20年(后三步);&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp

2019-01-01 14:21:10 1503 7

jclasslib-猴子哥哥.zip

使用jclasslib修改字节码,使用说明参考:https://blog.csdn.net/qq_21033663/article/details/105928982

2020-05-05

中国省市区数据库(mysql)

最全的中国省市区三级联动数据库,mysql版

2016-01-09

空空如也

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

TA关注的人 TA的粉丝

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