
架构设计
小小架构师
爱生活爱分享,将架构设计中的常用工具、知识分享给大家就是最大的快乐,喜欢就点个赞哦
展开
-
珍惜Redis,远离Bigkey
Redis是当前高并发场景下首选的分布式缓存组件,但是Redis并不是银弹,不合理的使用也会降低它的健康度,使Redis瞬间瘫痪。例如在系统开发过程中的不规范,经常会造成出现Redis Bigkey的情况,同时由于Redis主线程为单线程模型,Bigkey就会带来一些潜在隐患,比如:集群模式在slot分片均匀情况下,会出现数据和查询倾斜情况,部分有Bigkey的Redis节点占用内存多,QPS较高 Bigkey相关的删除或者自动过期时,会出现QPS突降或者突升的情况,极端情况下,会造成主从复制异常,R原创 2020-08-28 16:13:58 · 384 阅读 · 0 评论 -
一篇搞懂TCP“三次握手,四次挥手”
在排查网络通讯故障时,经常会说到“三次握手、四次挥手”,有人会问网络通讯为什么会握手和挥手,其实这只是一种通过拟人的手法让大家更好的来理解网络通讯中最关键的两个步骤,即网络建链和断链。===========================================================在搞懂TCP“三次握手、四次挥手”的具体过程前,有必要先对TCP/IP报头中的关键信息进行了解。IP报头 IP报头信息 信息作用和含义 .原创 2020-08-28 16:11:43 · 174 阅读 · 0 评论 -
无状态认证神器:JWT
说起身份认证,可能大家的第一反应就是Session认证,其通过在服务端保存一份用户登录信息,并返回一个SessionId保存在Cookie中,这样在下次请求时就可以通过SessionId来识别用户。我们通常会采用Spring-Session-Data-Redis组件来实现,正常使用情况下不会有任何问题,但是如果服务达到每秒万级别的调用量时,如何解决应用系统与Redis的远程调用开销导致的响应能力下降?如果Redis发生异常中断服务时,如何来保证认证服务?这些都值得我们去思考,是不是可以去中心化呢,是不是原创 2020-08-28 16:07:15 · 830 阅读 · 1 评论 -
提高代码开发质量的必备工具
我们知道代码缺陷不仅会对业务造成影响,而且往往也会给别人带来“不靠谱”的印象。对于开发人员来讲,一个业务流程往往由一系列复杂的方法或者函数体组成,所以一行小小的语句失败或者出错,就会导致整个业务流程的失败。那么我们在问是否有什么工具可以来提高自己的代码开发质量吗?没错,就是它,单元测试。它是对软件组成单元进行测试,其目的是检验软件基本组成单位的正确性,测试的对象是软件设计的最小单位,即方法或者函数。单元测试其实是软件开发中必不可少的一环,也是作为质量内建的核心所在,更是作为敏捷测试中测试前移的实践方法。原创 2020-08-28 16:04:02 · 286 阅读 · 0 评论 -
关于分布式唯一ID生成算法
应用系统为了满足高并发以及高可用的要求,经常会使用多台服务节点组成服务集群提供对外服务,在业务开发过程中我们需要生成一些全局唯一ID,比如会员ID或者订单ID,那么如何能够保证不同的服务节点生成的唯一ID不会冲突,最常见的有两种方式:方法一:UUIDUUID是通用唯一识别码 (Universally Unique Identifier),在其他语言中也叫GUID,可以生成一个长度32位的全局唯一识别码。可以通过如下代码自动生成结果=046b6c7f-0b8a-43b9-b35d-6489原创 2020-08-28 16:02:14 · 417 阅读 · 0 评论 -
浏览器加速器:HTTP缓存
HTTP缓存作为性能优化的重要手段,当客户端向服务器请求资源时,会先抵达浏览器缓存,如果浏览器有“要请求资源”的副本,就可以直接从浏览器缓存中提取而不是从原始服务器中提取这个资源。HTTP缓存都是从第二次请求开始的。第一次请求资源时,服务器返回资源,并在Response Header头中回传资源的缓存参数;第二次请求资源时,浏览器判断这些请求参数,命中强缓存就直接200,否则就把请求参数加到Request header头中传给服务器,看是否命中协商缓存,命中则返回304,否则服务器会返回新的资源。原创 2020-08-28 15:59:34 · 626 阅读 · 0 评论 -
程序员的老朋友“空指针”
程序员中的老朋友“空指针”,它无时不刻的会出现在你的身边,想必大家也并不陌生,所谓空指针,顾名思义,即当一个对象的值为null时,这个时候你试图访问这个对象的属性或者调用这个对象的方法,那么它就会出现。例如:从类结构图来看,空指针它是属于运行时异常 RuntimeException 的子类,它不是捕获型的,只有在程序运行时才可能报出来,而且会造成运行中断。如下列举了一些常见发生空指针的情况,可能还存在其他的的原因,不在此穷举调用未初始化的对象的方法 方法中传递的参数为空 对空对象原创 2020-08-28 15:56:47 · 315 阅读 · 0 评论 -
C4模型,软件架构图中的艺术品
软件架构图是架构设计中的一种表现方式,可以通过他们来清晰的表达一个软件系统是如何工作的,然而大多数的软件架构图只是一堆框和线的混乱组成,可能只有“画家”自己能看懂是什么东西,对于其他人员更多的是一脸懵逼。而C4模式的出现恰恰解决了这个史诗级难题,它通过抽象分层的方式来描绘出系统内部或者与外部之间的关系,并且每种抽象级别都与不同的受众有关。其中C4分别代表系统上下文(Context)、容器(Container)、组件(Component)和代码(Code)。=================.原创 2020-08-28 15:51:41 · 949 阅读 · 0 评论 -
理解分布式ID生成算法SnowFlake:送给爱折腾的你
理解分布式ID生成算法SnowFlake:送给爱折腾的你分布式ID生成算法的有很多种,常用的有UUID、数据库自增ID、Redis等。今天为大家介绍Twitter的SnowFlake算法,雪花算法(SnowFlake)是Twitter公司内部分布式项目采用的ID生成算法,开源后广受国内大厂的好评,在该算法影响下各大公司相继开发出各具特色的分布式生成器。概述SnowFlake算法(简称雪花算法)生成64位的二进制正整数,然后转换成10进制的数。64位二进制数由如下部分组成:[外链图片转存失败,源站可能原创 2020-08-27 18:55:15 · 166 阅读 · 0 评论 -
数据处理OLTP与OLAP的概念
数据处理OLTP与OLAP的概念在系统软件出现的初期,数据通常被保存在单个文件中进行管理,但随着业务的不断发展与系统数据处理逻辑的不断复杂,关系型数据库成为了主流的数据管理系统,例如Oracle、Mysql等,随后又出现了各式各样数据管理的解决方案,例如Elasticsearch、Redis、HBase等。然而,无论数据库管理系统如何更新与发展,涉及数据处理的核心术语与概念永远离不开这两个名词,即OLTP与OLAP。=======================================.原创 2020-08-27 18:47:23 · 880 阅读 · 0 评论 -
“阻塞”“非阻塞”“同步”“异步”这些你搞懂了吗
“阻塞”“非阻塞”“同步”“异步”这些你搞懂了吗作者:周霄龙 不管我们在系统设计还是编码开发的过程中,程序猿们在相互技术博弈的过程中经常会谈起“阻塞”“非阻塞”“同步”“异步”这些专业名词,那么它们到底有什么区别?你是不是都理解搞懂了呢?接下来我们对“阻塞”“非阻塞”与“同步”“异步”分别来介绍讲解。===========================================================“阻塞”“非阻塞”关注的是程序在等待调用结果,阻塞调用是指调用结果返..原创 2020-08-27 18:41:23 · 263 阅读 · 0 评论