随笔分类 - spring boot
1
摘要:# 一、背景 前段时间了解了泛化调用这个玩意儿,又想到自己之前写过一个RPC框架(参考《[手写一个RPC框架](https://www.cnblogs.com/2YSP/p/13545217.html)》),于是便想小试牛刀。 # 二、泛化调用简介 **什么是泛化调用** 泛化调用就是在不依赖服务方
阅读全文
摘要:# 一、前言 2018年写过一篇分库分表的文章《[SpringBoot使用sharding-jdbc分库分表](https://www.cnblogs.com/2YSP/p/9746981.html)》,但是存在很多不完美的地方比如: - sharding-jdbc的版本(1.4.2)过低,现在gi
阅读全文
摘要:一、前言 在之前的文章《自定义ConditionalOnXX注解》中,介绍了Conditional注解的实现原理和实现自定义Conditional注解的基础方法,但是有些场景我们需要用一个ConditionalOnXX注解来实现==多条件的与(AND)或(OR)非(NOT)逻辑==,本文就是介绍这种
阅读全文
摘要:一、Conditional注解介绍 对SpringBoot有足够了解的小伙伴应该都用过Conditional系列注解,该注解可用在类或者方法上用于控制Bean的初始化。 常用的Conditional注解有以下几种: @ConditionalOnBean:如果存在对应的Bean,则进行当前Bean的初
阅读全文
摘要:一、前言 最近在github上看了soul网关的设计,突然就来了兴趣准备自己从零开始写一个高性能的网关。折腾了大概三周时间,网关ship-gate核心功能基本都已完成,写这篇文章是记录我是如何从零开始手写一个网关的。 二、设计 2.1技术选型 网关是所有请求的入口,所以要求有很高的吞吐量,为了实
阅读全文
摘要:一、前言 前段时间看到一篇不错的文章《看了这篇你就会手写RPC框架了》,于是便来了兴趣对着实现了一遍,后面觉得还有很多优化的地方便对其进行了改进。 主要改动点如下: 除了Java序列化协议,增加了protobuf和kryo序列化协议,配置即用。 增加多种负载均衡算法(随机、轮询、加权轮询、平滑加权轮
阅读全文
摘要:一、背景 SpringBoot的应用监控方案比较多,SpringBoot+Prometheus+Grafana是目前比较常用的方案之一。它们三者之间的关系大概如下图: 关系图 二、开发SpringBoot应用 首先,创建一个SpringBoot项目,pom文件如下: <dependency> <gr
阅读全文
摘要:一、什么是Starter? 在开发过程中我们就经常使用到各种starter,比如mybatis-spring-boot-starter,只需要进行简单的配置即可使用,就像一个插件非常方便。这也是SpringBoot非常重要的一个特性——自动化配置。 二、实现 2.1创建一个maven项目并配置pom
阅读全文
摘要:一、前言 之前微服务这块只用过SpringCloud搭建,但是最近面试会被问到dubbo框架,虽然之前也学了但是都忘了,故写此博客加深印象。 二、原理简介 Dubbo是一个分布式服务框架,以及阿里巴巴内部的SOA服务化治理方案的核心框架。其功能主要包括:高性能NIO通讯及多协议集成,服务动态寻址与路
阅读全文
摘要:一、Memached介绍 Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态、数据库驱动网站的速度。Memcached基于一个存储键/值对的hashmap。其守护进程(daemon )是用C写
阅读全文
摘要:一、读取配置文件的四种方式 这四种配置文件放置方式的读取优先级依次递减,具体可以查看官方文档。 1.1jar包同级目录下的config文件夹里的配置文件 其实我以前就见过这种方式了,只是不知道怎么做的,这样便于修改服务器上的配置文件。 可以使用maven-source-plugin插件,然后运行命令
阅读全文
摘要:一、前言 一般来说,随着业务的发展数据库的数据量会越来越多,当单表数据超过上千万时执行一些查询sql语句就会遇到性能问题。一开始可以用主从复制读写分离来减轻db压力,但是后面还是要用分库分表把数据进行水平拆分和垂直拆分。 实现分库分表目前我知道的方式有两种,第一种是使用mycat中间件实现,第二种是
阅读全文
摘要:一、为什么要统一管理微服务配置 对于传统的单体应用而言,常使用配置文件来管理所有配置,比如SpringBoot的application.yml文件,但是在微服务架构中全部手动修改的话很麻烦而且不易维护。 微服务的配置管理一般有以下需求: 1.集中配置管理,一个微服务架构中可能有成百上千个微服务,所以
阅读全文
摘要:一、Hystrix简介 在微服务架构中经常包括多个服务层,比如A为B提供服务,B为C和D提供服务,如果A出故障了就会导致B也不可用,最终导致C和D也不可用,这就形成了雪崩效应。 所以为了应对这种情况,我们就需要一种容错机制,该机制需要实行以下两点: 为网络请求设置超时,以便尽快释放资源 使用断路器模
阅读全文
摘要:地址:http://www.ruanyifeng.com/blog/2016/07/yaml.html 原来三个横线( )是用来区分多个文件的,像下面就是指定了两个配置。
阅读全文
摘要:有时候eureka.instance.prefer-ip-address=true不管用,解决办法如下。
阅读全文
摘要:一、什么是MongoDB MongoDB是一个基于分布式文件存储的数据库,由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。 MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似json的bs
阅读全文
摘要:一、启动zookeeper和kafka 二、新建项目 新建一个SpringBoot项目,引入所需jar包。 这是主要用到的,注意版本问题,开始我就是spring-kafka版本写错了一直报错(技巧是这里不写具体版本,它会自动引入),具体参考这里。 配置文件application.properties
阅读全文
摘要:一般微服务架构会包含若干个微服务,而每个微服务可以有多个实例,如果每个微服务都有手动启停,那么效率就很低、维护量比较大。 所以我们可以使用Docker Compose来轻松、高效地管理容器。 一、安装Docker Compose 网上安装方法有很多,附上centos7的链接地址。 二、使用Sprin
阅读全文
摘要:前言 有很多种方案构建Docker镜像,包括Dockerfile构建、maven插件构建,这里我使用了最简单的Dockerfile构建的。 一、安装Docker 我的虚拟机系统是CentOS7,需要是64位系统内核版本3.1以上,否则无法安装。使用命令 uname -r可以查看内核版本。 输入命令y
阅读全文
1