mysql集群部署
Mysql常见集群方式 Mysql-MMM(mysql主主复制管理器) MHA(Mysql高可用方面是一个相对成熟的方案) InnoDB Cluster(支持自动Failover,强一致性,读写分离,读库高可用,读请求负载均衡,推荐方案) 主从同步创建Master实例并启动123456docker run -p 3307:3306 --name mysql-master \-v /mydata/mysql/master/log:/var/log/mysql \-v /mydata/mysql/master/data:/var/lib/mysql \-v /mydata/mysql/master/conf:/etc/mysql \-e MYSQL_ROOT_PASSWORD=root \-d mysql:5.7 参数说明: 123-p 3307:3306:将容器的3306映射到主机的3307端口-v 挂载-e 初始化root用户密码 修改master基本配置123456789101112131415161718vim /mydata/mysql/master/...
时间字段选择
MySQL 5.6 版本开始 DATETIME 和 TIMESTAMP 精度支持到毫秒 DATETIME 占用 8 个字节,TIMESTAMP 占用 4 个字节,DATETIME(6) 依然占用 8 个字节,TIMESTAMP(6) 占用 7 个字节 TIMESTAMP 日期存储的上限为 2038-01-19 03:14:07,业务用 TIMESTAMP 存在风险 使用 TIMESTAMP 必须显式地设置时区,不要使用默认系统时区,否则存在性能问题,推荐在配置文件中设置参数 time_zone = '+08:00' 推荐日期类型使用 DATETIME,而不是 TIMESTAMP 和 INT 类型 表结构设计时,每个核心业务表,推荐设计一个 last_modify_date 的字段,用以记录每条记录的最后修改时间
JWT知识小结
JWT/JWS/JWE/JWK JWT:指的是 JSON Web Token,由 header.payload.signture 组成。不存在签名的JWT是不安全的,存在签名的JWT是不可窜改的。 JWS:指的是签过名的JWT,即拥有签名的JWT。是一个有着简单的统一表达形式的字符串 ,基础三部分 (jwt实现方式之一) JWE:相对于JWS,JWE则同时保证了安全性与数据完整性(性能损失偏大)。JWE由五部分组成(jwt实现方式之一) JWK:既然涉及到签名,就涉及到签名算法,对称加密还是非对称加密,那么就需要加密的 密钥或者公私钥对。此处我们将 JWT的密钥或者公私钥对统一称为 JSON WEB KEY,即 JWK。 JWT工作流程 123456781. 用户登录:提供用户名和密码;2. JWT生成token和refresh_token,返回客户端;(注意:refresh_token的过期时间长于token的过期时间)3. 客户端保存token和refresh_token,并携带token,请求服务端资源;4. 服务端判断to...
gateway网关的使用
Gateway服务网关Spring Cloud Gateway 是 Spring Cloud 的一个全新项目,该项目是基于 Spring 5.0,Spring Boot 2.0 和 Project Reactor 等响应式编程和事件流技术开发的网关,它旨在为微服务架构提供一种简单有效的统一的 API 路由管理方式。 为什么需要网关Gateway网关是我们服务的守门神,所有微服务的统一入口。 网关的核心功能特性: 请求路由 权限控制 限流 架构图: 权限控制:网关作为微服务入口,需要校验用户是是否有请求资格,如果没有则进行拦截。 路由和负载均衡:一切请求都必须先经过gateway,但网关不处理业务,而是根据某种规则,把请求转发到某个微服务,这个过程叫做路由。当然路由的目标服务有多个时,还需要做负载均衡。 限流:当请求流量过高时,在网关中按照下流的微服务能够接受的速度来放行请求,避免服务压力过大。 在SpringCloud中网关的实现包括两种: gateway zuul Zuul是基于Servlet的实现,属于阻塞式编程。而SpringCloudGateway则是基于...
关于FeignClient参数fallbackFactory和fallback
首先两个参数都可以作为断容器使用,在抛出exception时,返回默认的配置数据 其次两个参数不能同时使用 区别:fallbackFactory可以识别到cause,也就是说如果需要得到错误原因,可以使用fallbackFactory,如下 fallbackFactory的使用 FeignClient 123456remote接口标注fallbackFactory,/** * @author 小五 */@FeignClient(contextId = "productFeign", value = ServiceNameConstants.PRODUCT_SERVICE, fallbackFactory = ProductFeignFallbackFactory.class) FeignClient实现类 12345678910111213@Slf4j@Componentpublic class ProductFeignFallbackImpl implements ProductFeign { @Setter ...
openfeign远程调用
Feign远程调用先来看我们以前利用RestTemplate发起远程调用的代码: 存在下面的问题: •代码可读性差,编程体验不统一 •参数复杂URL难以维护 Feign是一个声明式的http客户端,官方地址:https://github.com/OpenFeign/feign 其作用就是帮助我们优雅的实现http请求的发送,解决上面提到的问题。 2.1.Feign替代RestTemplateFegin的使用步骤如下: 1)引入依赖我们在order-service服务的pom文件中引入feign的依赖: 1234<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId></dependency> 2)添加注解在order-service的启动类添加注解开启Feign的功能: 3)编写Feign的客户端在o...
关于FeignClient注解中的contextId
contextId的使用一般是调用同一个服务,但是分多个接口 比如调用同一个member服务可以通过contextId来区分开,否则就会报错bean冲突 12345678/** * @author 小五 */@FeignClient(contextId = "MemberAFeign", value = ServiceNameConstants.MEMBER_SERVICE, fallbackFactory = MemberFeignAFallbackFactory.class)public interface MemberAFeign { ...} 12345678/** * @author 小五 */@FeignClient(contextId = "MemberBFeign", value = ServiceNameConstants.MEMBER_SERVICE, fallbackFactory = MemberFeignBFallbackFactory.class)publ...
关于rpc和http
1234567891011121314151617什么是RPC协议?RPC(Remote Procedure Call)远程过程调用协议是一个用于建立适当框架的协议。从本质上讲,它使一台机器上的程序能够调用另一台机器上的子程序,而不会意识到它是远程的。RPC 是一种软件通信协议,一个程序可以用来向位于网络上另一台计算机的程序请求服务,而不必了解网络的细节。RPC 被用来像本地系统一样调用远程系统上的其他进程。过程调用有时也被称为函数调用或子程序调用。HTTP是一种超文本传输协议。是WWW浏览器和WWW服务器之间的应用层通讯协议。RPC协议与HTTP协议的区别RPC1、RPC是一种API,HTTP是一种无状态的网络协议。RPC可以基于HTTP协议实现,也可以直接在TCP协议上实现。2、RPC主要是用在大型网站里面,因为大型网站里面系统繁多,业务线复杂,而且效率优势非常重要的一块,这个时候RPC的优势就比较明显了。HTTP主要是用在中小型企业里面,业务线没那么繁多的情况下。1、HTTP开发方便简单、直接。开发一个完善的RPC框架难度比较大。2、HTTP发明的初衷是为了传送超文本的资源...
关于springcloud
单体, 微服务, 分布式 1.1.单体架构单体架构:将业务的所有功能集中在一个项目中开发,打成一个包部署。 单体架构的优缺点如下: 优点: 架构简单 部署成本低 缺点: 耦合度高(维护困难、升级困难) 1.2.分布式架构分布式架构:根据业务功能对系统做拆分,每个业务功能模块作为独立项目开发,称为一个服务。 分布式架构的优缺点: 优点: 降低服务耦合 有利于服务升级和拓展 缺点: 服务调用关系错综复杂 分布式架构虽然降低了服务耦合,但是服务拆分时也有很多问题需要思考: 服务拆分的粒度如何界定? 服务之间如何调用? 服务的调用关系如何管理? 人们需要制定一套行之有效的标准来约束分布式架构。 1.3.微服务微服务的架构特征: 单一职责:微服务拆分粒度更小,每一个服务都对应唯一的业务能力,做到单一职责 自治:团队独立、技术独立、数据独立,独立部署和交付 面向服务:服务提供统一标准的接口,与语言和技术无关 隔离性强:服务调用做好隔离、容错、降级,避免出现级联问题 微服务的上述特性其实是在给分布式架构制定一个标准,进一步降低服务之间的耦合度,提供服...
学习sentinel
1.初识Sentinel1.1.雪崩问题及解决方案1.1.1.雪崩问题微服务中,服务间调用关系错综复杂,一个微服务往往依赖于多个其它微服务。 如图,如果服务提供者I发生了故障,当前的应用的部分业务因为依赖于服务I,因此也会被阻塞。此时,其它不依赖于服务I的业务似乎不受影响。 但是,依赖服务I的业务请求被阻塞,用户不会得到响应,则tomcat的这个线程不会释放,于是越来越多的用户请求到来,越来越多的线程会阻塞: 服务器支持的线程和并发数有限,请求一直阻塞,会导致服务器资源耗尽,从而导致所有其它服务都不可用,那么当前服务也就不可用了。 那么,依赖于当前服务的其它服务随着时间的推移,最终也都会变的不可用,形成级联失败,雪崩就发生了: 1.1.2.超时处理解决雪崩问题的常见方式有四种: •超时处理:设定超时时间,请求超过一定时间没有响应就返回错误信息,不会无休止等待 1.1.3.仓壁模式方案2:仓壁模式 仓壁模式来源于船舱的设计: 船舱都会被隔板分离为多个独立空间,当船体破损时,只会导致部分空间进入,将故障控制在一定范围内,避免整个船体都被淹没。...
