自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(118)
  • 资源 (1)
  • 收藏
  • 关注

原创 ipfs安装及私有网络组建

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar

2021-08-04 18:20:04 499

原创 hadoop无密码登录

ssh-keygen -t rsa~/.ssh下会多出两个文件id_rsa是私钥,.pub是公钥cat id_rsa.pub >> authorized_keys改下权限chmod 600 authorized_keyshdfs启动

2021-07-16 15:37:30 209

原创 mongodb基础3

mongodb和java加依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-mongodb</artifactId> </dependency>加配置spring: data: mongodb:

2021-07-02 18:32:06 215

原创 mongodb基础2

索引概念不多做介绍,需要提的是mongodb是b树。索引的类型mongodb的索引有很多种单字段索引:常见的索引复合索引:多字段的索引地理空间索引(Geospatial Index):为支持地理空间坐标数据的有效查询,mongodb提供两种特殊索引:返回结果使用平面几何的二维索引返回结果使用球面几何的二维球面索引文本索引(Text Index):支持在集合中搜索字符串内容。这些文本索引不存储特定语言的停止词(例如“the”、“a”、“or”),而将集合中的词作为词干,只存储根词。mo

2021-07-02 16:41:40 163

原创 mongodb基础1

​启动服务1.mongod --dbpath=..\data\db2.创建mongod.confstorage: dbPath: 绝对路径...\data命令:mongod -f ../conf/mongod.conf 或 mongod --config ../conf/mongod.conf启动控制台bin目录下:mongo --host=127.0.0.1一些命令选择/创建数据库:use 数据库名称查看数据库:show dbs / show da

2021-07-02 11:02:27 244 2

原创 WebFlux的WebClient框架

响应式编程,对于普通前端而言其实没有太大变化,该等多长时间还是要等多长时间,更多的是用在后台服务间的调用上。先写个小demo@Target(ElementType.TYPE)@Retention(RetentionPolicy.RUNTIME)public @interface ApiServer { String value() default "";}...

2021-06-15 23:35:23 720

原创 RouterFunction的webflux

RouterFunction可以运行在servlet或netty上,所以我们需要将两个容器间的不同点抽象出来。1.开发HandleFunction,实现输入ServerRequest,输出ServerResponse

2021-06-15 16:22:18 785

原创 响应式WebFlux的CURD

1.加依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-mongodb-reactive</artifactId> </dependency>2.加注解

2021-06-15 15:07:47 197 1

原创 Spring WebFlux介绍

关于概念,这里不多做介绍,原理之前写过,也不多说了。关于Servletservlet分为同步和异步两种。同步使我们常见的,当请求进来后,tomcat分给每个请求一个线程处

2021-06-12 17:47:13 308

原创 Reactive

概念不多做介绍,直接看代码,简易demopublic class FlowDemo { public static void main(String[] args) { //定义发布者 SubmissionPublisher<Integer> publisher = new SubmissionPublisher<>(); //定义订阅者 Subscriber<Integer> subscrib

2021-06-12 10:53:17 152

原创 stream流

关于stream说了很多,这里简单做补充,中间操作、终止操作。没有调用终止操作的情况下,中间操作也不会执行,这也可以叫惰性求值。关于流的创建有如下方法:

2021-06-11 18:02:05 207 1

原创 函数式编程,lambda相关

lambda,很基础的技术,这里做下回顾,查漏补缺。函数式接口写法,一般2用的比较多:@FunctionalInterfaceinterface Interface1{ int countNum(int i);}public class LambdaDemo { public static void main(String[] args) { Interface1 i1 = (i) -> i * 2; Interface1 i2

2021-06-10 16:07:04 124

原创 简易区块链demo

区块链原理就不加赘述,网上百度都是一堆,贴一下代码方便以后查看public class Block { //哈希值 private String hash; //前一节点哈希 private String previousHash; //数据 private String data; //时间戳 private long timeStamp; //随机数 private int nonce; public Blo

2021-05-25 15:58:49 727

原创 关于Optional

日常编码过程中,空指针异常非常常见。在jdk8以后,添加了Optional,用来解决这个问题。接下来简单介绍一下Optional:创建Optional其中第一行创建了一个空Optional,get()是从Optional实例中取回实际值对象的方法之一: public static void main(String[] args) { Optional<Haozi> emptyOpt = Optional.empty(); emptyOp..

2021-05-12 16:06:39 277 1

原创 springboot多数据源配置

不是什么稀罕玩意,一百度一大堆,只是为了方便自己copy代码。关于AbstractRoutingDataSource,看源码可以知道,这个是用来连数据库的,配置不同的数据库连接,根据不同的key选择不同的链接。/* * Copyright 2002-2017 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use

2020-12-29 17:54:15 412 1

原创 数据库主从搭建及应用数据源切换

数据库主从架构过程,参考https://www.cnblogs.com/cloudhere/p/10991520.html。java关于主从的应用在这里写一下: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring...

2020-04-15 19:57:02 379

原创 3.高并发下的系统优化-写操作压测

关于写操作,想了半天感觉和读操作差不多,那么这里就模拟一下秒杀的情景,看下500的数量,抢购时订单多久抢完,排队的情景。在之前配置下:...

2020-04-15 00:47:30 283

原创 2.高并发下的系统优化-动态资源集群读操作压测

接下来进行集群的压测,配置跟单机的一样,一台数据库+redis+mq,两台应用,一台nginx。没有任何优化的情况下:可以看出数据库压力很大,nginx压力很大,而且有很多错误连接优化一下数据库(同单机):tps变高了,访问500也变少了再优化一下tomcat并建立长连接(同单机):可以看到,和单机一样,建立长连接后性能反而下降,后面对这个进行研究。ngxi...

2020-04-13 21:08:07 193

原创 1.高并发下的系统优化-总览+单机压测

关于并发下的优化有很多,接下来总结一下并一一实践测试一下:读操作:首先是单机优化:1.数据库方面:优化语句,避免出现模糊查询、多表逗号等。2.数据库方面:读操作:给数据库加索引,增加查询速度。3.数据库方面:增加数据库socket连接数、增大缓存等。4.容器方面:增加tomcat等待队列长度、线程数等。5.容器方面:与客户端建立长连接接下来转为集群:6.ngin...

2020-04-13 02:18:39 474

原创 linux常用命令

查看防火墙开放的端口号:firewall-cmd --list-ports添加端口:firewall-cmd --zone=public --add-port=80/tcp --permanent关闭端口:firewall-cmd --remove-port=80/tcp --permanent重启防火墙:systemctl reload firewalld...

2020-04-12 18:10:10 180

原创 11.防刷限流

之前我们已经讲了流量削峰,接下来讲下防刷限流。首先我们可以使用比较通用的验证码,包装秒杀令牌前置,需要验证码来错峰。我们可以使用awt来生成图片:public class CodeUtil { private static int width = 90;// 定义图片的width private static int height = 20;// 定义图片的heigh...

2020-04-11 16:18:45 430

原创 10.秒杀削峰泄洪策略

关于削峰技术,常用场景例如秒杀。为什么要流量削峰?之所以叫秒杀,也就是第一秒的时候流量涌入的问题,瞬时流量变大可能对机器造成影响,因此我们需要把第一秒的流量平滑的过度掉,削弱峰值,把流量平滑的过渡到第二秒或者后面,让系统性能有平滑的提升。对于我们现在没有做任何操作的时候,秒杀下单的接口会被脚本不停地刷。秒杀验证逻辑和秒杀下单接口强关联,代码冗余度高。秒杀验证逻辑复杂,对交易系统产生无关联负载。...

2020-04-11 14:45:39 578

原创 9.交易性能优化-事务型消息

之前我们说了一个场景,在交易合法性验证后开始扣减库存,用mq来更改数据库,然后进行订单处理。但是这样有个问题就是,如果之后处理订单的时候出问题了,那么之前mq发的消息撤不回来,数据已经改了,那肯定就有问题了。基于这个情况,我们有一个简单的处理方式,由于我们使用了springboot的事务,他给我们提供了一个事务提交以后执行的接口TransactionSynchronizationManager:...

2020-04-10 16:07:54 332

原创 8.交易方面的优化,redis和rocketmq

我们对于交易进行一下200个线程压测,看下应用服务器的资源:再看下压测结果:接下来用1000个线程看下数据库资源:并且耗时也加大了:那么对于下单我们一般会有几个步骤:1.校验商品是否存在,用户是否合法,购买数量是否正确。2.落单减库存。3.订单入库,加商品销量。4.返回前端。通过上面步骤,其实我们对于数据库至少有6次操作,而且在减数据库的时候是根据id操作,那还...

2020-04-10 00:38:28 1114

原创 7.关于cdn、页面静态化

我们之前一直都在介绍动态请求的加速,接下来讲一下静态请求,也就是cdn。当请求来到服务器上时,如果是访问静态资源,那么就将请求解析到cdn加速域名中,再由cdn(海量的就近加速节点)就近看有没有存静态资源,有的话直接返回,没有的话去指定的http地址中抓取数据返回并缓存起来,下次就可以直接返回了。接下来配置一下,这里用的是阿里云的:在cdn上添加配置,ip就是nginx的ip:...

2020-04-08 12:02:47 2579

原创 6.nginx的共享字典、redis实战简介

首先创建一个lua文件ngx.log(ngx.ERR,"lua sucess");在nginx配置文件中加:启动nginx:也就是说这个脚本会在nginx启动的时候执行。当然,一般用的不多,用的更多的是content_by_lua来指定lua实现什么样的内容,接下来试一下:配置下nginx新建lua脚本:ngx.say("hello static ite...

2020-04-07 16:03:23 424

原创 5.查询性能优化

缓存设计对于缓存设计,有几个原则:用快速存取设备,例如内存将缓存推到离用户最近的地方脏缓存清理,也就是数据库变化后,缓存内的数据也要同步更新多级缓存redis缓存对于redis,不同太多介绍了。这里介绍一下单机版和sentinal哨兵模式和集群cluster模式对于哨兵模式,就是用一个sentinal节点管理redis,sentinal和主从redis有长连接,并发...

2020-04-07 14:33:55 281

原创 4.会话管理

基于cookie传输sessionid:java tomcat容器session实现对于传统实现,我们经常会用cookie来传输session,将登录状态等信息传到request的session中。基于token传输类似sessionid:java代码session实现在移动端或是很多浏览器会禁用cookie,导致通过cookie不奏效,因此出现了基于token的方式。具体实现后面再说...

2020-04-06 17:05:14 121

原创 3.nginx长连接优化

在单机的情况下的压测结果:分布式的压测结果:虽然tps还是比较少,但是还是有提升,主要是因为数据库的服务器的配置是很低的,所以扩展这里其实就更有帮助,这里就不再修改了。而对于nginx和服务之间的连接还是短连接,所以还是有性能消耗,接下来我们把nginx的连接改成长连接:由于数据库服务器配置问题,所以数字上看不出太多变化,如果配置好的机器,变化是非常大的。...

2020-04-03 16:18:40 720

原创 2.nginx分布式扩展

通过单机压测可以看到,吞吐量在200-300之间,对于服务器的数据库也有较大的压力。nginx反向代理负载均衡在单机的情况下,容量总归有上限,对于我们看服务器后台进程情况,有这样一个图:表象上:单机cpu使用率增高,内存占用增加,网络带宽使用增加。cpu us:用户空间的cpu使用情况(用户层代码)cpu sy:内核空间的cpu使用情况(系统调用)load aver...

2020-04-03 15:56:14 342

原创 1.springboot压测调优

通过压测可以找到服务器的上限,ps -ef |grep java找到java的进程号,然后通过pstree -p 12569 | wc -l可以看到当前java的线程数。当我们的压测到达一定数量的时候,请求会报错:这是可以去看下线程数:也就是由于server端并发线程数上不去,导致客户端请求被拒。首先看下spring-configuration-metadata.json文件...

2020-04-02 23:12:34 3087 1

原创 jemeter性能压测部署

性能压测所需工具:jemeter,可在阿帕奇下载。下载后windows下直接bin目录下cmd启动即可。关于jemeter工具,我们还需要知道几点:线程组:jemeter用来压测高并发下系统的表现,因此jemeter提供了一个线程组的工具,可以并发多个线程进行测试。http请求:发送http请求模块,不用多解释。查看结果树:发送请求的结果。聚合报告:性能压测报告。那么如何使...

2020-04-02 21:57:33 299

原创 linux部署java

安装jdk去官网下rpm包,cd到文件夹后运行命令来赋予权限:chmod 777 jdk-8u241-linux-x64.rpm接下来用rpm工具安装java:rpm -ivh jdk-8u241-linux-x64.rpm安装好后可以去usr/java/中查看文件。接下来运行vim ~/.bash_profile配置环境变量,加如图指令安装数据库直接运行yum...

2020-04-02 19:16:45 212

原创 mysql分布式性能优化

上面已经介绍了主从的方式,在这里完善一下。主从分布的优点是实现了备份和读写分离,master只需要专门负责写操作,读操作交给slave来执行,然后主从数据库通过bin_log来异步更新,当然这样也会有一个数据不同步的情况,那可以改成同步的吗?当然,mysql有一个半同步的方式,当写请求来到master上之后,必须保证至少一台slave更新了数据,才会返回写成功的信号,当然这种情况下,对于效率会...

2020-03-30 17:10:03 499

原创 mysql性能优化

通用性能优化关于通用性能优化,是在缓存、异步、批处理的范畴做优化。批处理关于mysql的应用优化(这里都是指innodb):写操作:批量insert、批量update。解释一下,例如一个支付场景,一个用户买了多个商品,一般我们会循环遍历来对表进行insert操作和update操作。如何优化?我们可以批量一次性的进行insert或是update操作。也就是说前端传来的集合的数据,我们...

2020-03-27 17:09:48 169

原创 使用Redisson实现分布式锁

Redisson是架设在Redis基础上的一个java驻内存数据网格,基于NIO的Netty框架上,充分利用了Redis键值数据库提供的一系列优势。并且在java实用工具包中的常用接口基础上,为使用者提供了一系列分布式特性的常用工具类。Redisson使原本作为协调单机多线程并发程序的工具包获得了协调分布式多机多线程并发系统的能力,大大降低了设计和研发大规模分布式系统的难度。同时结合各富特色的...

2020-03-27 15:13:13 242

原创 Redis分布式锁

先讲下流程:1.在redis中设置一个锁setnx(lockkey , currenttime+timeout)。2.返回1代表之前没有这个锁,那么就调用expire(lockkey)来重新设置超时时间,执行业务,接下来del(key),释放锁,最后结束。3.返回0代表有这个锁,那么传统流程中就直接结束。优化后,调用get(lockkey)来获取这个锁的超时时间的value。3.1...

2020-03-26 19:49:15 172

原创 Springboot集成SpringSession

在传统web应用中,session都是交给容器管理,但是对于分布式或是集群,如果交给web容器管理的话,自然是行不通的,除非是web容器共享session,但是这样做需要入侵web容器,提高问题的复杂度,并且集群机器之间要相互耦合。因此,springsession来了。springSession将session从web容器中剥离出来,单独存在服务器中。目前支持redis、database、mo...

2020-03-25 17:29:06 595

原创 Redis分布式

算法原理举个例子,有若干个redis服务,有一个文件,那么这个文件放在哪呢?通常来说先把这个文件进行哈希,然后用redis个数进行取模,hash(file) % num,余数就是对应的服务器编号。假如有4个redis节点,20个数据,根据上面的算法,redis1上存1,2上存2,以此类推。假如节点现在要扩展,变成5个节点,跟4个节点位置没有发生变化的元素是:redis1-1,redis2-...

2020-03-23 12:01:31 190

原创 基于Redis的单点登录

加依赖 <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>2.6.0</version> </dependency>配置:...

2020-03-19 23:07:33 153

go-ipfs_v0.9.0_linux-amd64.tar.gz

go-ipfs_v0.9.0_linux-amd64.tar.gz

2021-08-03

空空如也

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

TA关注的人

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