- 博客(25)
- 收藏
- 关注
原创 SpringCloud 组件性能优化技巧
Ribbon进行客户端负载均衡的Client并不是在服务启动的时候就初始化好的,而是在调用的时候才会去创建相应的Client,所以第一次调用的耗时不仅仅包含发送HTTP请求的时间,还包含了创建RibbonClient的时间,这样一来如果创建时间速度较慢,同时设置的超时时间又比较短的话,很容易就会出现上面所描述的显现。其次,启用Hystrix后,很多服务当第一次访问的时候都会失败 是因为初始化负载均衡一系列操作已经超出了超时时间了,因为默认的超时时间为1S,需要修改超时时间参数,方可解决这个问题。
2023-08-31 11:04:28
346
原创 记一次K8S部署SpringBoot项目时接口大量报错问题的解决
完成以上的操作,springboot默认优雅关机的时间30秒+preStopHook50秒 < 强制杀掉的时间95秒,这样子就能保证旧的pod能完成正在处理中的请求,而且新的流量不会转发已经被删除掉的pod中。
2023-08-07 16:29:20
208
原创 电商系统的分布式事务调优
在同服务多数据源操作不同数据库的情况下,我们可以使用基于XA规范实现的分布式事务,在Spring中有成熟的JTA框架实现了XA规范的二阶事务提交。事实上,二阶事务除了性能方面存在严重的阻塞问题之外,还有可能导致数据不一致,我们应该慎重考虑使用这种二阶事务提交。在跨服务的分布式事务下,我们可以考虑基于TCC实现的分布式事务,常用的中间件有TCC-Transaction。TCC也是基于二阶事务提交原理实现的,但TCC的二阶事务提交是提到了服务层实现。
2023-06-19 17:13:03
2737
转载 转发:约瑟夫环
约瑟夫问题是个著名的问题:N个人围成一圈,第一个人从1开始报数,报M的将被杀掉,下一个人接着从1开始报。如此反复,最后剩下一个,求最后的胜利者。例如只有三个人,把他们叫做A、B、C,他们围成一圈,从A开始报数,假设报2的人被杀掉。
2022-10-09 11:43:18
116
转载 大厂爱问的HashMap的几个问题,看看你都答得上来吗?
面试官问你:HashMap熟悉吗?答:熟悉的,经常用。HashMap的底层是什么?答:数组+链表+红黑树。简单讲一下HashMap的实现原理!?答:嗯先用hash算法计算插入位置,然后插入到对应的位置,如果已经有值了判断是否一样,如果不一样就插入到其尾部。那好的,请你说一下HashMap的hash算法的实现,以及为什么?答:计算哈希值&(容量-1),这么做计算插入的位置那加载因子为什么是0.75,初始长度为什么是16?答:初始因子是一个折中的值,发生哈希碰撞的概率低,初始长度16,也是个比较折中
2022-09-21 11:09:34
111
原创 Spring Boot 自定义 starter
在autoconfigure包中配置使用META-INF/spring.factories中EnableAutoConfiguration的值,使得项目启动时加载指定的自动配置类注意:在spring boot2.7改变了自动配置的路径,需要自动装配的类被声明在META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports文件中大致流程:引入starter > 引入xxAutoConfiguration > 将相
2022-06-30 18:28:52
292
原创 Hystrix服务容错
Hystrix服务容错官方文档地址:Home · Netflix/Hystrix Wiki · GitHub1、什么是HystrixHystrix源自Netflix团队于2011开始研发,2012年Hystrix不断发展成熟,Netflix内部的许多团队都采用了它,如今,每天在Netflix上通过Hystrix执行数百亿个线程隔离和数千亿个信号量隔离的调用,极大地提高了系统的稳定性。在分布式环境中,不可避免会有很多服务依赖项中的某些服务失败导致雪崩效应,Hystrix是一个库,可以通过添加等待时间容
2022-05-09 20:36:28
328
原创 Feign声明式服务调用
Feign声明式服务调用1、什么是FeignFeign是Spring Cloud Netflix组件中的一个轻量级RESTful的HTTP服务客户端,实现了负载均衡和rest调用的开源框架,封装了Ribbon和RestTemplate,实现了WebService的面向接口编程,进一步降低了项目的耦合度。Feign本身并不支持Spring MVC的注解,它有一套自己的注解,为了更方便的使用,Spring Cloud孵化了OpenFeign。2、Feign解决什么问题Feign旨在使编写Java HT
2022-04-20 18:27:57
841
原创 Ribbon负载均衡
Ribbon负载均衡1、什么是RibbonRibbon是一个基于HTTP和TCP的客户端负载均衡工具,它是基于Netflix Ribbon实现的。它不像Spring Cloud服务注册中心、配置中心、API网关那样独立部署,但是它几乎存在于每个Spring Cloud微服务中,包括Feign提供的声明式服务调用也是基于该Ribbon实现的。Ribbon默认提供多种负载均衡算法,例如:轮训、随机等等。也可以自定义负载均衡算法。2、负载均衡不同方案的区别目前业界主流的负载均衡方案可分成两类:集中式
2022-04-15 14:56:11
710
原创 Eureka注册中心
Eureka注册中心一、什么是注册中心注册中心可以说是微服务架构中的“通讯录”,它记录了服务和服务地址的映射关系。在分布式架构中,服务会注册到这里,当服务需要调用其它服务时,就到这里找到服务的地址,进行调用。总结:服务注册中心的作用就是服务的注册和服务的发现二、常见的注册中心Netflix EurekaAlibaba NacosHashiCorp ConsulApache ZooKeeper特性EurekaNacosConsulZookeeperCAPAP
2022-04-14 12:19:40
389
原创 Spring WebFlux入门
Spring WebFlux一、SpringWebflux 介绍Webflux 是 Spring5 中新添加的模块,用于 web 开发,功能和 SpringMVC 类似,Webflux 是一种响应式编程框架。传统 web 框架,比如 SpringMVC,这些基于 Servlet 容器,Webflux 是一种异步非阻塞的框架,异步非阻塞的框架在 Servlet3.1 以后才支持,核心是基于 Reactor 的相关 API 实现的。Webflux 特点:非阻塞式:在有限资源下,提高系统吞吐量和伸
2022-03-20 18:01:47
1333
原创 MyBatis学习笔记
官网地址https://mybatis.org/mybatis-3/zh/index.html一、MyBatis简介1、MyBatis历史MyBatis最初是Apache的一个开源项目iBatis, 2010年6月这个项目由Apache Software Foundation迁 移到了Google Code。随着开发团队转投Google Code旗下, iBatis3.x正式更名为MyBatis。代码于 2013年11月迁移到Github。iBatis一词来源于“internet”和“abatis
2022-03-18 00:34:29
725
原创 Spring注解-IOC
Spring注解-IOC组件注册@Configuration&@Bean@Configuration:声明一个配置类@Bean:向容器中注册bean,bean的类型为方法返回值类型,ID默认就是方法名。可以通过修改@Bean注解的value属性或者方法名来修改beanID//配置类=配置文件@Configurationpublic class MainConfig { //向容器中注册bean,类型为返回值类型,ID默认就是方法名 @Bean("person")
2021-10-31 11:55:08
547
原创 volatile
volatileJava虚拟机提供的轻量级的同步机制三大特性保证可见性案例:package com.example.demo.juc;import java.security.interfaces.DSAPublicKey;import java.util.concurrent.TimeUnit;/** * @Author: junwe * @Date: 2021/3/14 17:44 */public class VolatileSee {// int num
2021-03-21 22:20:33
84
原创 java的i++和++i
java的i++和++i说来惭愧,最近在刷面试题,一道有关于i++和++i的题竟然做错了!网上查了一圈恍然大悟。下面结合我的理解来说说这个问题,避免面试踩坑啊。准备接招吧package com.example.demo;/** * @Author: junwe * @Date: 2021/2/27 23:15 */public class Test { public static void main(String[] args) { int i = 6;
2021-02-28 18:48:17
173
1
原创 shell编程学习笔记
shell是一个命令解释器,为用户提供了一个向Linux内核发送请求以便运行程序的界面系统程序,可以用shell来启动、挂起、停止、编写一些程序。快速入门脚本格式要求脚本以#!/bin/bash开头脚本需要有可执行权限编写一个shell脚本输出hello world新建一个myShell.sh脚本编辑脚本内容赋予脚本执行权限脚本的常用执行方式输入脚本的绝对路径或相对路径sh+脚本说明:这种方式可以不用赋予脚本可执行权限,直接运行即可.
2021-02-07 22:38:26
163
原创 Linux学习笔记
Linuxlinux基础介绍Linux是一款操作系统,免费、开源、安全、高效、稳定、处理高并发非常强悍,很多的企业级项目都部署到Linux/unit服务器运行。Linux目录结构Linux的文件系统采用级层式的目录结构,最上层是根目录“/”,然后再此目录下创建其他的目录。在Linux中,一切皆文件。具体目录结构:/bin(/usr/bin、/usr/local/bin)Binnary的缩写,存放最经常使用的命令。/sbin(/usr/sbin、/usr/local/sbin)s指supe
2021-02-06 00:07:03
482
原创 设计模式——策略模式
策略模式使用策略模式去除业务代码中的 if else抽象出业务处理器以及支持的各种业务类型将各业务处理器和其支持的业务类型绑定各业务处理器的实现测试最近在维护一个商城项目,对接是的各第三方购物平台,其中处理下单的类中包含了大量的if else语句public void order(String platform) { if ("taobao".equals(platform)) { // 淘宝下单 } else if ("jingdong".equals
2021-01-23 19:02:49
233
1
原创 设计模式学习笔记——代理模式
代理模式通过代理对象访问目标对象。可以在目标对象实现的基础上,增强额外的功能,即扩展目标对象的功能。被代理的对象可以是远程对象、创建开销大的对象或者需要安全控制的对象。代理模式有不同的形式,主要有三种:静态代理、动态代理(jdk代理、接口代理)和cglib代理。静态代理静态代理在使用时需要定义接口或者父类,被代理对象(目标对象)与代理对象一起实现相同的接口或者是继承相同的父类。应用实例定义一个接口IteacherDao目标对象TeacherDao实现IteacherDao使用静态
2020-12-17 22:51:37
67
原创 设计模式学习笔记——单例模式
单例模式单例设计模式,就是采取一定的方法保证在整个软件系统中,对某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法(静态方法)。单例模式的八种实现方式饿汉式(静态常量)饿汉式(静态代码块)懒汉式(线程不安全)懒汉式(线程安全,同步方法)懒汉式(线程安全,同步代码块)双重检查——推荐使用静态内部类——推荐使用枚举——推荐使用饿汉式(静态常量)实现步骤:私有化构造器创建静态实例对外暴露一个获取实例的静态方法代码实现:package com.test.
2020-12-06 22:39:55
129
原创 设计模式学习笔记——七大原则
设计模式设计模式的目的编写软件过程中,程序员面临着来自耦合性,内聚性以及可维护性,可扩展性,重用性,灵活性等多方面的挑战,设计模式是为了让程序具有更好的代码重用性(即:相同功能的代码,不用多次编写)可读性(即:编程规范性,便于其他程序员的阅读和理解)可扩展性(当需要增加新功能时,非常的方便,称为可维护)可靠性(当我们增加新的功能后,对原来的功能没有影响)使程序呈现高内聚,低耦合的特性设计模式的七大原则单一职责原则即一个类只负责一项职责。如类A负责两个不同的职责:职责1、职责2,当职
2020-12-06 15:46:38
130
原创 ES学习笔记——初识ElasticSearch
ElasticSearch介绍ES是一个使用Java语言并且基于Lucene编写的搜索引擎框架,它提供了分布式的全文搜索功能,提供了一个统一的基于RESTful风格的WEB接口,官方客户端也对多种语言都提供了相应的API。Lucene:本身就是一个搜索引擎的底层。直接使用成本高。官网地址:https://lucene.apache.org/分布式:突出的横向扩展能力(集群)全文检索:将一段词语进行分词,并且将分出的单个词语统一的放到分词库中,在搜索时,根据关键字去分词库中检索,找到匹配的内容。(倒
2020-12-05 22:21:38
435
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人