-
TCP:三次握手,四次握手,可靠数据传输、流量控制、拥塞控制
TCP有主要有两个特点:面向连接:需要客户端和服务器在发送数据之前有连接可靠传输:客户端与服务器之间发送的数据是可靠的(无损坏,按顺序)下面总结一下TCP的一些知识点:三次握手用于客户端和服务器建立连接第一步:客户端向服务器发送一个特殊的TCP报文段,表示想建立连接(SYN=1)第二步:服务器收到该报文,向客户端发送允许连接的报文段(SYN=1,ACK=1)第三步:客户端收到该...
-
SpringBoot RabbitMQ消息可靠发送与接收
环境: springboot2.2.11.RELEASE + RabbitMQ3.7.4RabbitMQ在以下情况会出现消息的丢失:交换机、队列、消息未持久化,mq重启后会出现消息丢失。生产者发出的消息第一步是投递到交换机,这一步可能因为网络原因导致失败。消息正常投递到交换机后,通过路由key路由到队列的时候出现失败。(没有符合的队列)代码层面,配置层面,考虑不全导致消息丢失。...
-
微服务架构下的API接口驱动开发,设计和集成
今天谈下在微服务架构下,接口设计和开发方面的思考。对于微服务架构,SOA和Http Rest API接口设计,在我前面的文章中均有专门的说明,因此对于基础方面的解释在本文不再重复。对于今天要写的内容,先总结一句话再展开说明。在SOA和微服务架构思想下,除了常说的面向对象,领域驱动,SOA等架构思想外。还需要增加基于API接口驱动进行的设计和开发工作。API接口的识别,定义,设计...
-
Spring Security登录优雅集成图形验证码
前言在SpringSecurity的默认登录支持组件formLogin中没有提供图形验证码的支持,目前大多数的方案都是通过新增Filter来实现。filter的方式可以实现功能,但是没有优雅的解决, 需要重新维护一套和登录相关的url,例如:loginProccessUrl,loginFailUrl,loginSuccessUrl,从软件设计角度来讲功能没有内聚。下面为大家介绍...
-
PHP的另一个高效缓存扩展:Yac
之前的文章中我们已经学习过一个 PHP 自带的扩展缓存 Apc ,今天我们来学习另一个缓存扩展:Yac 。什么是 Yac从名字其实就能看出,这又是鸟哥大神的作品。毕竟是 PHP 的核心开发人员,他的作品每次都不会让我们失望。鸟哥可以说是我们中国程序员的骄傲,他在 PHP 界有举足轻重的地位,大家可以自己搜索一下他的博客,虽说更新频率不高,但每篇文章都值得我们学习。Yac 是一个...
-
SpringBoot开发自己的Starter
SpringBoot starter机制SpringBoot中的starter是一种非常重要的机制,能够抛弃以前繁杂的配置,将其统一集成进starter,应用者只需要在maven中引入starter依赖,SpringBoot就能自动扫描到要加载的信息并启动相应的默认配置。starter让我们摆脱了各种依赖库的处理,需要配置各种信息的困扰。SpringBoot会自动通过class...
-
Spring Boot 优雅地实现接口参数校验
今天继续为大家分享在工作中如何优雅的校验接口的参数的合法性以及如何统一处理接口返回的json格式。每个字都是干货,原创不易,分享不易。validation主要是校验用户提交的数据的合法性,比如是否为空,密码是否符合规则,邮箱格式是否正确等等,校验框架比较多,用的比较多的是hibernate-validator, 也支持国际化,也可以自定义校验类型的注解,这里只是简单地演示校验框...
-
实用开源项目,基于Web的文件管理系统——DocSys
介绍DocSys是国内Gitee上开源的一个基于Web的文件管理系统,DocSys实现了日常本机文件管理的操作,某些方面比本地更加实用。DocSys基于开源协议GPL 2.0!DocSys主要用于企业或个人的文件存储管理,方便随时查看和统一管理。仓库地址https://gitee.com/RainyGao/DocSys功能特性支持文件权限管理和历史版本管理支持文件在线预览和在线...
-
mysql垂直分库,水平分库,垂直分表,水平分表
之前经常被问道这些分库分表的概念,只是大概知道,但是具体如何定义的,问什么这么定义还是不太理解,今天对着数据表中的数据沉思的时候,突然间醒悟,原来这些概念非常好理解,而且可以说水平和垂直这两个词用得恰到好处,非常形象地帮助我们理解它们。水平分表顾名思义,水平分表就是把表中的数据进行了水平切割,意味着按照行进行切割,也就是说不同行的数据被切割后可能在不同的表中。如图所示,根据水平...
-
Spring Boot如何利用AOP巧妙记录操作日志?
本篇要点简要回顾SpringAOP的相关知识点:关键术语,通知类型,切入点表达式等等。介绍SpringBoot快速启动测试AOP,巧妙打印日志信息。简单回顾SpringAOP的相关知识点SpringAOP的相关的知识点包括源码解析,为了加深印象,这边再做一个简短的回顾:1、AOP关键术语切面(Aspect):也就是我们定义的专注于提供辅助功能的模块,比如安全管理,日志信息等。连...
-
膜拜!来看大牛是如何设计微服务系统的,学会直接拥有架构师思维
前言毫无疑问,如何设计微服务系统是本书所要讨论的核心话题。本节我们将从服务拆分、服务测试、服务注册、服务发现、负载均衡、服务部署、服务发布等方面来展开讨论。服务拆分服务拆分首先要关注的是服务的颗粒度。通过DDD ( 领域驱动设计)的指导,我们可以将某个领域的功能进行聚合成为-一个服务。这个服务只负责某一个方面的功能。DDD其实没有太多新鲜的内容,它更多的是可以看作是面向对象思潮...
-
Redis学习知识点
1.Redis的应用场景? 1.Token令牌的生成 2.短信验证码的code 3.可以实现缓存查询数据 a. 减轻我们的数据库的访问压力 Redis与mysql数据库不同步的问题 4.Redis帮助实现计数器 5.分布式锁 6.延迟操作 分布式消息中间件 注意:Redis官方是没有windows版本的,只有linux,这是因为 在nio中epoll只有linux操...
-
SpringBoot2.x集成MongoDB,强化版CRUD
前言MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。什么是NoSQL?NoSQL,指的是非关系型的数据库。NoSQL有时也称作Not Only SQL的缩写,是对不同于传统的关系型数据库的数据库管理系统的统称。NoSQL用于超大规模数据的存储。(例如谷歌或Facebook每天为他们的用户收集万亿比特...
-
基于 Flink 实现解决数据库分库分表任务拆分
1、场景描述例如订单库进行了分库分表,其实例如下图所示:现在的需求是希望创建一个任务就将数据同步到MQ集群,而不是为每一个数据库实例单独创建一个任务,将其数据导入到MQ集群,因为同步任务除了库不同之外,表的结构、数据映射规则都是一致的。 2、flinkx 的解决方案详解 2.1 fink Stream API 开发基本流程使用 Flink Stream API 编程的通用步骤...
-
Nginx高性能优化配置实战总结
相信做过web的同学对于 Nginx 一定不陌生,它是一款轻量级的开源 Web 服务及代理程序。在 Nginx 出现之前市场上主流两款 Web 服务,一款是 IIS,另外一款是 Apache。而在 Nginx 诞生后,因其轻量化、支持高并发等特性,逐渐蚕食了这两款 Web 服务的市场份额。目前国内大量企业已经广泛使用 Nginx。那么我们在工作中如何对其进行优化和配置便成了重中...
-
6张图让你搞懂浏览器渲染网页过程
我的想法:如果我要构建快速可靠的网站,需要真正了解浏览器渲染网页的每个步骤机制,这样就可以在开发过程中对每个步骤进行优化。这篇文章是我在较高水平上对端到端过程的学习总结。好了,废话不多说,我们开始吧。这个过程可以分为以下几个主要阶段:开始解析HTML获取外部资源解析 CSS 并构建CSSOM执行 JavaScript合并 DOM 和 CSSOM 以构造渲染树计算布局和绘制1.开...
-
Nginx入门学习(1):一些概念
写在前面我们知道在传统的Web服务器中,每个客户端连接需要一个单独的进程或者线程来处理,在切换任务的时候需要将CPU切换到新的任务并创建一个新的运行时上下文,这样不仅会消耗额外的内存还会花费一定的CPU时间。当并发请求增加时,服务器负担将会加重,进而对性能产生一定影响。而本文将学习的Nginx服务器则很好的解决了这个问题。Nginx简介Nginx是一个高性能的HTTP(处理静态...
-
工作流Activiti初体验及在数据库中生成的表
工作流Activiti内置了一些表,一共是28张,在我们项目启动的时候会在我们配置的数据库中创建这些表,下面就搭建一个小demo,去look一下Activiti生产的这些表。首先到Spring的官网,找到生成模板工程的地方(https://start.spring.io/),生成项目模板:把生成的模板工程,导入到开发工具中,这里以eclipse为例,导入的项目如下:在pom.x...
-
工作流Activiti流程图各元素之开始事件和结束事件介绍
我们常见的工作流流程图,通过各元素的拖拽生成,如下图:要想生成根据业务需求制定的流程图,首先要知道这些构成元素代表的是什么,这篇就来将一下这些元素的作用。通过activiti集成eclipse,会在开发工具的右边显示这些元素:从一级分类中可以看出,分为开始事件、结束事件、任务、子流程和调用节点、网关、边界事件、捕获和触发事件、顺序流等,下面就来介绍一下里面的子元素:一、开始事...
-
分享10个很实用的CSS的代码片段
介绍以下是10个来自于网络收集的非常实用且重要的CSS代码片段CSS重置这是CSS浏览器重置的基本和常见的CSS代码段html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, big, cite, co...
-
Eureka+负载均衡+Hystrix+网关,我全给你讲清楚
一、 网站的架构相信大家应该都经历过一个普通地网站发展成大型网站过程中的一种较为典型的架构演变历程。因为这是你在大学期间的必修课,就是搭建一个简单的网站,说不定你的毕业实际就是一个什么管理系统,对吧,这就是最初的网站搭建,但是当你踏入工作岗位之后或者随着你学习内容的扩展和深入,一个项目中会由多个子项目构成,但是一旦有了多个子项目,比如把淘宝网的订单系统和会员系统分开来看,就回产...
-
一个架构师的缓存修炼之路
一位七牛的资深架构师曾经说过这样一句话:“Nginx+业务逻辑层+数据库+缓存层+消息队列,这种模型几乎能适配绝大部分的业务场景。这么多年过去了,这句话或深或浅地影响了我的技术选择,以至于后来我花了很多时间去重点学习缓存相关的技术。我在10年前开始使用缓存,从本地缓存、到分布式缓存、再到多级缓存,踩过很多坑。下面我结合自己使用缓存的历程,谈谈我对缓存的认识。01 本地缓存1. ...
-
微服务和API网关限流熔断实现关键逻辑思路
今天准备谈下微服务架构和API网关中的限流熔断,当前可以看到对于Spring Cloud框架本身也提供了Hystrix,主流的开源API网关产品类似Kong网关本身也包括了限流熔断能力。当然也有完全较为独立的限流熔断开源实现,比如阿里的Sentinel即是我们经常会用到的限流熔断开源产品,而且可以和Dubbo,SpringCloud等各种微服务框架无缝集成。由于网上大家能够搜索...
-
Spring框架是怎么解决Bean之间的循环依赖的
在我们的开发中,会不可避免的遇到Bean之间循环依赖的,所谓循环依赖,就是两个或者两个以上的Bean互相持有对方,这样在程序运行调用中,会出现这种循环依赖的现象,假设是两个Bean,当程序调用Bean A时,Bean A中依赖Bean B,在Bean A中调用Bean B时,Bean B中又依赖了Bean A,这样就形成了循环依赖,如下图:先从一个小例子来说明,使用Sprin...
-
性能测试 | Jmeter对数据库mysql压测就是这么简单
一、测试计划-----添加JDBC驱动链接这里我用的mysql数据库是8.5版本,那么我相对应的JDBC驱动选择了8.0.11版本,JDBC驱动可以在mys ql的官网下载,具体地址是:https://dev.mysql.com/downloadsdownload下载后解压文件夹,把文件夹中的mysql-connector-java-8.0.11.jarb copy到jmete...
-
高并发下的抽奖优化
一. 项目思考由于项目发起了一个抽奖活动,发起活动之前给所有用户发短信提示他们购买了我们的产品有抽奖权益。然后用户上来进入抽奖页面点击爆增,过了一会儿页面就打不开了。后面查看了下各种日志,发现了瓶颈在数据库,由于读写冲突严重,导致响应变慢,有不少连接都超时了。后面看到监控和日志留下的数据,发现负责抽奖的微服务集群qps暴涨12倍,db的qps也涨了10倍。这很明显是一个高并发下...
-
RabbitMQ分布式系统的应用
由于之前做的项目中需要在多个节点之间可靠地通信,所以废弃了之前使用的Redis pub/sub(因为集群有单点问题,且有诸多限制),改用了RabbitMQ。使用期间得到不少收获,也踩了不少坑,所以在此分享下心得。怎么保证可靠性的?RabbitMQ提供了几种特性,牺牲了一点性能代价,提供了可靠性的保证。持久化当RabbitMQ退出时,默认会将消息和队列都清除,所以需要在第一次声明...
-
消息模型:主题和队列有什么区别?
可以看到,技术圈的风向一直在变,大数据、云的热度已经在慢慢消退,现在当红的是 AI 和 IoT。这些火热的概念,它最终要从论文和 PPT 落地,变成真正能解决问题的系统,否则就是一个空中楼阁。那不变的是什么?(一些题外话的感触)主题和队列有什么区别?最初的消息队列,就是一个严格意义上的队列消费者之间实际上是竞争的关系,每个消费者只能收到队列中的一部分消息如果需要将一份消息数据分...
-
Spring Security 真正的前后分离实现
Spring Security网络上很多前后端分离的示例很多都不是完全的前后分离,而且大家实现的方式各不相同,有的是靠自己写拦截器去自己校验权限的,有的页面是使用themleaf来实现的不是真正的前后分离,看的越多对Spring Security越来越疑惑,此篇文章要用最简单的示例实现出真正的前后端完全分离的权限校验实现。1. pom.xml主要依赖是spring-boot-s...
-
shiro中setUnauthorizedUrl不起作用或setUnauthorizedUrl无效
SpringBoot中集成Shiro的时候, 配置setUnauthorizedUrl("/notPermit")了,但是不起作用,只会在控制台打印UnauthorizedException异常信息:原因: Shiro源码中是这样做的: private void applyUnauthorizedUrlIfNecessary(Filter filter) { St...