首页 2021年8月

2021年8月

  • 打破内卷,还得靠项目实战!


  • 现在几乎大部分的 App 都支持使用多个第三方账号进行登录,如:微信、QQ、微博等,我们把此称为多账号统一登陆。而这些账号的表设计,流程设计至关重要,不然后续扩展性贼差。

    本文不提供任何代码实操,但是梳理一下博主根据我司账号模块的设计,提供思路,仅供参考。

    一、 自建的登陆体系

    1.1.1 手机号登陆注册

    该设计的思路是每个手机号对应一个用户,手机号为必填项。

    流程:

    问题:

    1.1.2 优化注册登陆

    该方案的思路是弱化密码的必填性,即无论用户是否注册过,可通过 手机号+验证码 直接进行登陆(保留 手机号+密码登录的方式)。

    流程:

    用户表设计:

    1.2 引入第三方账户方案

    1.2.1 微博登录

    进入 Web2.0 时代 ,微博开放了第三方网站登录, 产品说, 这个我们得要, 加个用微博帐号就能登录我们的 App吧,而且得和我们自己的用户表关联。

    流程:

    微博用户信息表设计:

    1.2.2 噩梦来临

    紧接着, QQ又开放用户登录了, 微信开放用户登录了,网易开发用户登录了。。。。。。一下子要接入好多家第三方登录了, 只能按照 “微博用户信息表” 新建一个表,重写一套各个第三方登录。

    推荐下自己做的 Spring Boot 的实战项目:

    https://github.com/YunaiV/ruoyi-vue-pro

    二、 优化账号体系

    2.1 原账号体系分析

    2.2 新的账号体系

    2.2.1 数据表设计

    用户基础信息表:

    用户授权信息表:

    说明:

    2.2.2 登录流程

    沿用之前的方案。

    用户填写 邮箱/手机号+密码; 请求登录的时候, 先判断类型, 如手机号登录为例:

    使用 type='phone' 结合 identifier='手机号' 查找, 如有, 取出并判断 password_hash(密码)是否和该条目的 credential 相符, 相符则通过验证, 随后通过 user_id 获取用户信息;

    查询 type='weixin" alt="多账号统一登陆,账号模块的系统设计">

    多账号统一登陆,账号模块的系统设计

    来源:www.dustyblog.cn现在几乎大部分的 App 都支持使用多个第三方账号进行登录,如:微信、QQ、微博等,我们把此称为多账号统一登陆。而这些账号的表设计,流程设计至关重要,不然后续扩展性贼差。本文不提供任何代码实操,但是梳理一下博主根据我司账号模块的设计,提供思路,仅供参考。 一、 自建的登...

    Java知识 2021-08-31 89 0
  • 1. ShowDoc 是什么?

    咱先看看 ShowDoc 的自我介绍,贼长一大串:

    ShowDoc 是一个非常适合 IT 团队的在线 API 文档、技术文档工具。

    通过 ShowDoc,你可以方便地使用 Markdown 语法来书写出美观的 API 文档、数据字典文档、技术文档、在线 Excel 文档等等。

    如果不想编辑 Markdown 文档,你还可以利用 ShowDoc 的自动化能力,从程序注释中自动生成 API 文档,或者从搭配的 RunApi 客户端(类似 Postman 的 API 调试工具)中一边调试接口、一边自动生成文档。

    通过分配项目成员和团队成员,你可以很方便地进行项目文档的权限管理和团队协作,也可以分享文档出去给朋友查看。

    ShowDoc 还支持多平台客户端,有 Win 客户端、Mac 客户端、iOS、Android 等,更方便跨平台使用。目前超过 100000+ 的互联网团队正在使用 ShowDoc,包括知名公司内部的一些团队,比如腾讯、华为、百度、京东、字节跳动等等。

    干掉 Swagger + Postman?测试接口直接生成API文档,这个国产文档工具真香!

    干掉 Swagger + Postman?测试接口直接生成API文档,这个国产文档工具真香!

    大家好,我是艿艿,一个在某厂搬砖的小胖子。之前给大家分享过很多 API 接口文档工具,例如说:昨儿 狗芳 给我推荐了一款新工具 ShowDoc,说是最强国产 API 接口文档工具,可以干掉 Swagger + Postman!好家伙,这么强的么!搞一波搞一波,白嫖的快乐~? Talk is Cheap,胖友...

    Java知识 2021-08-31 83 0
  • 接私活渠道,你有技术,就有钱!

    接私活渠道,你有技术,就有钱!

    知乎上这个被浏览了948,816次的问题,看得我真是抓心挠肝:所以我强烈推荐想要赚外快的程序员兄弟,加入下面这个圈内大佬搞的程序员兼职外包赚钱群:利用业余时间接单搞钱!入群即可享受??进群享受企业合作专属通道,大大降低接单门槛,不间断地向你推送大量最新外包项目信息,可根据自身情况自由选择,群内小助理为你和需...

    Java知识 2021-08-30 92 0

  • 前言

    去年我们项目做了微服务1.0的架构转型,但是服务监控这块却没有跟上。这不,最近我就被分配了要将我们核心的微服务应用全部监控起来的任务。我们的微服务应用都是SpringBoot 应用,因此就自然而然的想到了借助Spring Boot 的Actuator 模块。(没吃过猪肉总听过猪叫见过猪跑吧?)。

    本篇是我在完成这个工单之后,对Spring Boot Actuator模块 学习应用的总结。在本篇文章中,你可以学习到:

    之后我还会介绍:

    推荐下自己做的 Spring Boot 的实战项目:

    https://github.com/YunaiV/ruoyi-vue-pro

    一、什么是 Spring Boot Actuator

    Spring Boot Actuator 模块提供了生产级别的功能,比如健康检查,审计,指标收集,HTTP 跟踪等,帮助我们监控和管理Spring Boot 应用。这个模块是一个采集应用内部信息暴露给外部的模块,上述的功能都可以通过HTTP 和 JMX 访问。

    因为暴露内部信息的特性,Actuator 也可以和一些外部的应用监控系统整合(Prometheus, Graphite, DataDog, Influx, Wavefront, New Relic等)。这些监控系统提供了出色的仪表板,图形,分析和警报,可帮助你通过一个统一友好的界面,监视和管理你的应用程序。

    Actuator使用Micrometer与这些外部应用程序监视系统集成。这样一来,只需很少的配置即可轻松集成外部的监控系统。

    Micrometer 为 Java 平台上的性能数据收集提供了一个通用的 API,应用程序只需要使用 Micrometer 的通用 API 来收集性能指标即可。Micrometer 会负责完成与不同监控系统的适配工作。这就使得切换监控系统变得很容易。

    对比 Slf4j 之于 Java Logger 中的定位。

    推荐下自己做的 Spring Cloud 的实战项目:

    https://github.com/YunaiV/onemall

    二、快速开始,创建一个Spring Boot Actuator Demo

    我们先创建一个demo应用。

    spring init -d=web,actuator -n=actuator-demo actuator-demo

    聊聊Spring Boot服务监控,健康检查,线程信息,JVM堆信息,指标收集,运行情况监控等!

    聊聊Spring Boot服务监控,健康检查,线程信息,JVM堆信息,指标收集,运行情况监控等!

    来源:juejin.im/post/5e2179def265da3e152d2561 前言 去年我们项目做了微服务1.0的架构转型,但是服务监控这块却没有跟上。这不,最近我就被分配了要将我们核心的微服务应用全部监控起来的任务。我们的微服务应用都是SpringBoot 应用,因此就自然而然的想到了借助Spri...

    Java知识 2021-08-30 78 0

  • 相信很多人知道石中剑这个典故,在此典故中,天命注定的亚瑟很容易的就拔出了这把石中剑,但是由于资历不被其他人认可,所以他颇费了一番周折才成为了真正意义上的英格兰全境之王,亚瑟王。

    说道这把剑,剑身上铭刻着这样一句话:ONLY THE KING CAN TAKE THE SWORD FROM THE STONE。

    虽然典故中的 the king 是指英明之主亚瑟王,但是在本章中,这个 king 就是读者自己。

    我们今天不仅要从百万并发基石上拔出这把 epoll 之剑,也就是 Netty,而且要利用这把剑大杀四方,一如当年的亚瑟王凭借此剑统一了英格兰全境一样。

    说到石中剑 Netty,我们知道他极其强悍的性能以及纯异步模型,释放出了极强的生产力,内置的各种编解码编排,心跳包检测,粘包拆包处理等,高效且易于使用,以至于很多耳熟能详的组件都在使用,比如 Hadoop,Dubbo 等。

    但是他是如何做到这些的呢?本章将会以庖丁解牛的方式,一步一步的来拔出此剑。

    Netty 的异步模型

    说起 Netty 的异步模型,我相信大多数人,只要是写过服务端的话,都是耳熟能详的,bossGroup 和 workerGroup 被 ServerBootstrap 所驱动,用起来简直是如虎添翼。

    再加上各种配置化的 handler 加持,组装起来也是行云流水,俯拾即是。但是,任何一个好的架构,都不是一蹴而就实现的,那她经历了怎样的心路历程呢?

    ①经典的多线程模型

    Netty如何做到单机百万并发?

    Netty如何做到单机百万并发?

    来源:cnblogs.com/scy251147/p/14763761.html相信很多人知道石中剑这个典故,在此典故中,天命注定的亚瑟很容易的就拔出了这把石中剑,但是由于资历不被其他人认可,所以他颇费了一番周折才成为了真正意义上的英格兰全境之王,亚瑟王。说道这把剑,剑身上铭刻着这样一句话:ONLY THE...

    Java知识 2021-08-30 84 0
  • 从MySQL 5.6升级到8.0,Facebook付出了惨痛代价……

    从MySQL 5.6升级到8.0,Facebook付出了惨痛代价……

    来源:CSDN(ID:CSDNnews)Facebook 称,他们最近的一次大版本升级到 MySQL 5.6 花了一年多时间才完成,还在 5.6 版上开发 LSM 树存储引擎,MyRocks。在升级到 5.7 的同时构建一个新的存储引擎,会大大减慢 MyRocks 的进度,因此我们选择继续使用 5.6,直到...

    Java知识 2021-08-29 94 0

  • 日志是 mysql 数据库的重要组成部分,记录着数据库运行期间各种状态信息。mysql日志主要包括错误日志、查询日志、慢查询日志、事务日志、二进制日志几大类。

    作为开发,我们重点需要关注的是二进制日志( binlog )和事务日志(包括redo logundo log ),本文接下来会详细介绍这三种日志。

    binlog

    binlog 用于记录数据库执行的写入性操作(不包括查询)信息,以二进制的形式保存在磁盘中。binlogmysql的逻辑日志,并且由 Server 层进行记录,使用任何存储引擎的 mysql 数据库都会记录 binlog 日志。

    binlog 是通过追加的方式进行写入的,可以通过max_binlog_size 参数设置每个 binlog文件的大小,当文件大小达到给定值之后,会生成新的文件来保存日志。

    binlog使用场景

    在实际应用中, binlog 的主要使用场景有两个,分别是 主从复制数据恢复

    binlog刷盘时机

    对于 InnoDB 存储引擎而言,只有在事务提交时才会记录biglog ,此时记录还在内存中,那么 biglog是什么时候刷到磁盘中的呢?

    mysql 通过 sync_binlog 参数控制 biglog 的刷盘时机,取值范围是 0-N

    从上面可以看出, sync_binlog 最安全的是设置是 1 ,这也是MySQL 5.7.7之后版本的默认值。但是设置一个大一些的值可以提升数据库性能,因此实际情况下也可以将值适当调大,牺牲一定的一致性来获取更好的性能。

    binlog日志格式

    binlog 日志有三种格式,分别为 STATMENTROWMIXED

    MySQL 5.7.7 之前,默认的格式是 STATEMENTMySQL 5.7.7 之后,默认值是 ROW。日志格式通过 binlog-format 指定。

    推荐下自己做的 Spring Boot 的实战项目:

    https://github.com/YunaiV/ruoyi-vue-pro

    redo log

    为什么需要redo log

    我们都知道,事务的四大特性里面有一个是 持久性 ,具体来说就是只要事务提交成功,那么对数据库做的修改就被永久保存下来了,不可能因为任何原因再回到原来的状态

    那么 mysql是如何保证一致性的呢?

    最简单的做法是在每次事务提交的时候,将该事务涉及修改的数据页全部刷新到磁盘中。但是这么做会有严重的性能问题,主要体现在两个方面:

    因此 mysql 设计了 redo log具体来说就是只记录事务对数据页做了哪些修改 ,这样就能完美地解决性能问题了(相对而言文件更小并且是顺序IO)。

    redo log基本概念

    redo log 包括两部分:一个是内存中的日志缓冲( redo log buffer ),另一个是磁盘上的日志文件( redo logfile)。

    mysql 每执行一条 DML 语句,先将记录写入 redo log buffer,后续某个时间点再一次性将多个操作记录写到 redo log file。这种 先写日志,再写磁盘 的技术就是 MySQL里经常说到的 WAL(Write-Ahead Logging) 技术。

    在计算机操作系统中,用户空间( user space )下的缓冲区数据一般情况下是无法直接写入磁盘的,中间必须经过操作系统内核空间( kernel space )缓冲区( OS Buffer )。

    因此, redo log buffer 写入 redo logfile 实际上是先写入 OS Buffer ,然后再通过系统调用 fsync() 将其刷到 redo log file中,过程如下:

    binlog/redo log/undo log?再也不会傻傻分不清楚了

    binlog/redo log/undo log?再也不会傻傻分不清楚了

    来源:juejin.cn/post/6860252224930070536日志是 mysql 数据库的重要组成部分,记录着数据库运行期间各种状态信息。mysql日志主要包括错误日志、查询日志、慢查询日志、事务日志、二进制日志几大类。作为开发,我们重点需要关注的是二进制日志( binlog )和事务日志(包括...

    Java知识 2021-08-29 96 0
  • 再见了,谷歌

    来源:suketk.com/why-i-quit-google作者:Suket Karnawat译者 | 弯月     责编 | 晋兆雨出品 | CSDN(ID:CSDNnews)每当人们听到我从Google辞职的消息,都会不约而同地问我:“那么,接下来你打算去哪儿?”“哪儿都...

    Java知识 2021-08-29 80 0

  • 我们先认识一下SpringCloud的各个组件,然后知其所以然。

    Spring Cloud架构的各个组件的原理分析

    Spring Cloud架构的各个组件的原理分析

    来源:toutiao.com/i6888099913867985422a我们先认识一下SpringCloud的各个组件,然后知其所以然。Spring Cloud架构的各个组件的原理分析原理讲解前,先看一个最经典的业务场景,如开发一个电商网站,要实现支付订单的功能,流程如下:Spring Cloud架构的各个...

    Java知识 2021-08-28 97 0
1 2 3 4 5 6 7 8 9 10 ››