摘要:一、从变量声明开始 在.NET程序中定义一个变量时,会在RAM(随机存取存储器)中为其分配一些内存块。该内存块有3样东西:名称,数据类型、值。 变量究竟会被分配到那种类型的内存,取决于变量的数据类型。在.NET中有两种可分配的内存:堆和栈。 为了便于理解,用以下代码来说明: public void
阅读全文
摘要:一、简介 【VO】: View Object。用于表示一个与前端交互的对象; 【DTO】: Data Transfer Object。表示一个数据传输对象; 【BO】: Business Object。表示一个业务对象; 【PO】:Persistant Object。表示数据库中的一条映射对象 【D
阅读全文
摘要:一、简介 kafka是一个分布式流处理平台。有3个关键能力: 1、订阅发布记录流:类似于消息队列 或 企业消息传递系统; 2、以容错的方式存储记录流; 3、实时记录流; 二、应用 作为消息系统、存储系统、流处理器。可以建立流数据管道,可靠性的债系统或应用之间获取数据。建立流式应用传输和响应数据。 三
阅读全文
摘要:一、简介 为 ASP.NET 开发人员提供的一个库,可以简化开发人员将实时 Web 功能添加到应用程序的过程。实时 Web 功能是指这样一种功能(聊天室,股票交易,微信角标,站内消息):当所连接的客户端变得可用时服务器代码可以立即向其推送内容,而不是让服务器等待客户端请求新的数据。使用websock
阅读全文
摘要:一、简介 本篇文章,是对Redis部分内容的总结。 二、说明 BSD协议、开源免费; 内存 + 持久化; 高性能:读 11w/s,写8.1w/s; 单机模式、Master-slave sentinel模式【主从+哨兵】、Redis Cluster【集群模式】; Redis支持事务,但是不支持回滚;
阅读全文
摘要:一、架构图 二、批处理 批量思想:批量操作数据库,这个很好理解,我们在循环插入场景的接口中,可以在批处理执行完成后一次性插入或更新数据库,避免多次IO。 二、异步处理 异步思想:针对耗时比较长且不是结果必须的逻辑,我们可以考虑放到异步执行,这样能降低接口耗时。 例如一个理财的申购接口,入账和写入申购
阅读全文
摘要:一、简介 有两种同步方案: 通过MySQL自动同步刷新Redis,MySQL触发器+UDF函数实现。 解析MySQL的binlog实现,将数据库中的数据同步到Redis 。 二、方案一:UDF 2.1、场景分析 当我们对MySQL数据库进行数据操作时,同时将相应的数据同步到Redis中,同步到Red
阅读全文
摘要:一、过滤器(Filter) 一共5种、 Authorization Filter,Resource Filter,Exception Filter,Action Filter,Result Filter 1.1、Exception Filter 新增全局异常过滤器GlobalExceptionFil
阅读全文
摘要:一、简介 mysql官方推荐不要使用uuid或者不连续不重复的雪花id(long形且唯一,单机递增),而是推荐连续自增的主键id,官方的推荐是auto_increment,那么为什么不建议采用uuid,使用uuid究竟有什么坏处? 二、对比 2.1、自增主键id 自增的主键的值是顺序的,所以Inno
阅读全文
摘要:一、简介 文件上传是一个老话题了,在文件相对比较小的情况下,可以直接把文件转化为字节流上传到服务器,但在文件比较大的情况下,用普通的方式进行上传,这可不是一个好的办法,毕竟很少有人会忍受,当文件上传到一半中断后,继续上传却只能重头开始上传,这种让人不爽的体验。 二、秒传 2.1、定义 通俗的说,你把
阅读全文
摘要:一、内外网接口微服务隔离 1.1、方式 将对外暴露的接口和对内暴露的接口分别放到两个微服务上,一个服务里所有的接口均对外暴露,另一个服务的接口只能内网服务间调用。 该方案需要额外编写一个只对内部暴露接口的微服务,将所有只能对内暴露的业务接口聚合到这个微服务里,通过这个聚合的微服务,分别去各个业务侧获
阅读全文
摘要:sql查询一般都喜欢用 SELECT count(*) 会查询很多数据。建议换成下面这种: SELECT 1 FROM table WHERE a = 1 AND b = 2 LIMIT 1 只查询1条数据,让数据库查询时遇到一条就返回,不要再继续查找还有多少条了。
阅读全文
摘要:一、简介 为了数据安全我们在开发过程中经常会对重要的数据进行加密存储,常见的有:密码、手机号、电话号码、详细地址、银行卡号、信用卡验证码等信息,这些信息对加解密的要求也不一样,比如说密码我们需要加密存储,一般使用的都是不可逆的慢hash算法,慢hash算法可以避免暴力破解(典型的用时间换安全性)。
阅读全文
摘要:一、简介 【关键字】:RBAC模型、角色继承RBAC、带约束RBAC、用户组、组织、职位 从业务分类上来讲权限可以分为数据查看权限,数据修改权限等,对应到系统设计中有页面权限、菜单权限、按钮权限等。菜单也分一级菜单、二级菜单甚至三级菜单,我们在设计的时候最好把权限设计成树形结构,这样在申请权限的时候
阅读全文
摘要:一、应用场景 同一个公司的系统,每个系统都有一套用户名和密码,用户就会头大。所以需要一个鉴权中心,全部系统用同一套用户信息,同一个地方登录。 又比如同一套用户信息可以了,但进入每个系统都要输入一次账户密码,登录还是很麻烦。需要一次登录,处处登录。登录其中一个系统,进入其他系统的时候就不需要再次登录。
阅读全文
摘要:一、简介 由于ip taobao关闭,需要切换IP地址库,现在使用:Ip2region 开源项目 二、说明 目前最新已更新到了 v2.0 版本,ip2region v2.0 是一个离线 IP 地址定位库和 IP 定位数据管理框架,10 微秒级别的查询效率,准提供了众多主流编程语言的 xdb 数据生成
阅读全文
摘要:一、场景 在电商、支付等领域,往往会有这样的场景,用户下单后放弃支付了,那这笔订单会在指定的时间段后进行关闭操作。 像某宝、某东都有这样的逻辑,而且时间很准确,误差在 1s 内,那他们是怎么实现的呢? 一般实现方法有几种: 使用 RocketMQ、RabbitMQ、Pulsar 等消息队列的延时投递
阅读全文
摘要:一、简介 领域驱动设计(DDD)是由埃里克-埃文斯(Eric Evans)提出的,它是一套思想、原则和模式,有助于根据业务领域的基础模型设计软件系统。 二、实践架构 分层架构、整洁架构(洋葱架构)、六边形架构(端口适配器架构)、菱形对称架构 2.1、分层架构 架构图: 架构说明: 用户接口层。负责向
阅读全文
摘要:一、简介 JWT 和 OAuth2 没有可比性,是两个完全不同的东西! 【JWT】:一种认证协议。 提供了一种用于发布接入令牌(Access Token),并对发布的签名接入令牌进行验证的方法。令牌(Token)本身包含了一系列声明,应用程序可以根据这些声明限制用户对资源的访问。 【OAuth2】:
阅读全文
摘要:一、场景 程序A接受到这个消息M并完成消费逻辑之后,正想通知消息中间件“我已经消费成功了”的时候,程序就重启了,那么对于消息中间件来说,这个消息并没有成功消费过,所以他还会继续投递。这时候对于应用程序A来说,看起来就是这个消息明明消费成功了,但是消息中间件还在重复投递。 基于消息的投递可靠(消息不丢
阅读全文
摘要:一、流程图 二、消息丢失场景 2.1、场景1中生产者将消息发送给Rocket MQ的时候,如果出现了网络抖动或者通信异常等问题,消息就有可能会丢失。 2.2、场景2中消息需要持久化到磁盘中,这时会有两种情况导致消息丢失: 1、RocketMQ为了减少磁盘的IO,会先将消息写入到os cache中,而
阅读全文
摘要:一、架构图 微服务访问大致路径为:外部请求 → 负载均衡 → 服务网关(GateWay)→ 微服务 → 数据服务/消息服务。服务网关和微服务都会用到服务注册和发现来调用依赖的其他服务,各服务集群都能通过配置中心服务来获得配置信息。 二、服务网关(GateWay) 网关是外界系统(如:客户端浏览器、移
阅读全文
摘要:一、架构图 二、交易核心 2.1、基础交易类型抽象 2.2、多表聚合&订单关联 2.3、支付核心 2.4、支付编排 2.5、异常处理机制 2.6、渠道网关 2.7、资金核算体系 2.8、平台统一上下文 2.9、数据一致性挑战 2.9.1、CAS 2.9.2、幂等&异常补偿 2.9.3、对账 2.9.
阅读全文
摘要:一、业务场景 用户去登录项目,用户进行一个session会话,一般的大公司的项目都是有Nginx进行反向代理的。 在Nginx的反向代理下,一般会把用户的请求分发到不同的服务器上,但是如果用户请求的请求是存放在该请求的服务器A上。如果此时用户请求的一个服务模块可能需要调用到服务器B,当用户发起请求的
阅读全文
摘要:一、简介 服务调用有两种方式:RPC、Event-driven。 RPC方式,有RestFul,gRPC,Bubbo等,一般是同步的。可以马上得到结果,代码也更简单。 Event-driven方式,就是发消息方式。是松耦合方式,比紧耦合的RPC方式要优越,但RPC方式如果用在合适的场景也有它的用处。
阅读全文
摘要:一、简介 二、二叉搜索树 缩写BST,特点是任何一个节点的值都大于其左子树的所有节点的值,任何一个节点的值都小于其右子树的所有节点的值。
阅读全文
摘要:一、简介 Lambda表达式是JDK8的一个新特性,可以取代大部分的匿名内部类,更优雅的写出代码,特别是在集合的遍历和其他集合操作中,可以极大的优化代码结构。 二、接口要求 Lambda 规定接口中只能有一个需要被实现的方法,不是规定接口中只能有一个方法。 三、基础语法 语法形式为 () -> {}
阅读全文
摘要:一、分类图 二、悲观锁与乐观锁 乐观锁和悲观锁并不是一种真实存在的锁,而是一种设计思想。 2.1、悲观锁是一种悲观思想,它总认为最坏的情况可能会出现,它认为数据很可能会被其他人所修改,所以悲观锁在持有数据的时候总会把资源 或者 数据 锁住,这样其他线程想要请求这个资源的时候就会阻塞,直到等到悲观锁把
阅读全文
摘要:一、简介 Kubernetes、容器编排。 、 1.1、主要分为Master、Node、Etcd 1.2、核心概念 【pod】:最小调度单元。提供容器运行环境、定义容器执行方式。 【Volume】:Pod可访问的文件目录,支持多种存储抽象。 【Deployment】:管理Pod部署的副本、部署方案版
阅读全文
摘要:一、简介 金额存储不能使用float类型。 public class FloatTest { public static void main(String[] args) { float f1 = 6.6f; float f2 = 1.3f; System.out.println(f1 + f2);
阅读全文
摘要:一、简介 1.1、功能定位和承担职责不同。 Service Mesh:微服务的网络通信基础设施,负责(系统内部的)服务间的通讯。 API Gateway :负责将服务以API的形式暴露(给系统外部),以实现业务功能。 1.2、部署上不同 Service Mesh:部署在系统内部:因为原子微服务和组合
阅读全文
摘要:一、简介 ES在多线程并发访问修改情况下会用到锁机制。大致分为乐观锁和悲观锁。 二、乐观锁 通过_version来记录文档版本。在文档创建时会有一个初始version,默认为1.对文档修改或者删除时,version会递增,也可以指定。只有当版本号大鱼当前版本时,才会修改或者删除成功,否则失败。当并发
阅读全文
摘要:一、简介 Redission,一个基于Redis实现的分布式工具,为 Redis 官网分布式解决方案。 Redisson提供了使用Redis的最简单和最便捷的方法。Redisson的宗旨是促进使用者对Redis的关注分离(Separation of Concern),从而让使用者能够将精力更集中地放
阅读全文
摘要:一、定义 或是将多个模块中重复的部分进行拆分,或是纯粹为了拆分膨胀的单体应用,这些拆分出来的部分独立成一个服务单独部署与维护,便是微服务了。 拆分后的需求: 从本地方法调用的关系衍变成远程过程调用的关系,那么可靠的通信功能是首要的。 随着拆分工作的推进,资源调度关系会变得错综复杂,这时候需要完善的服
阅读全文
摘要:一、MySQL性能 1.1、最大数据量 抛开数据量和并发数,谈性能都是耍流氓。MySQL没有限制单表最大记录数,它取决于操作系统对文件大小的限制。 《阿里巴巴Java开发手册》提出单表行数超过500万行或者单表容量超过2GB,才推荐分库分表。性能由综合因素决定,抛开业务复杂度,影响程度依次是硬件配置
阅读全文
摘要:一、消息延迟如何监控 1、消息队列提供的工具,通过监控消息的堆积来完成。 2、通过生产监控消息对消息延时的监控。 二、详情 /2.1、消息队列工具 以kafka为例。不用版本消费者的消费进度不一样。 在 Kafka0.9 之前的版本中,消费进度是存储在 ZooKeeper 中的,消费者在消费消息的时
阅读全文
摘要:一、消息为何会丢失 消息从生产者到消息队列的过程。 消息在消息队列存储的过程。 消息在被消费的过程 。 二、分析 2.1、消息在写消息队列过程中丢失 消息生产者一般就是业务系统,消息队列是单独部署了在独立的服务器上的,所以业务服务器和消息队列服务器可能会出现网络抖动,当出现了网络抖动,消息就会丢失。
阅读全文
摘要:一、简介 二、应用场景 系统有很多的静态资源的,并且请求量也是超级大的。例如:移动端APP,有很多的图片,小视频以及流媒体等,对于网站来说,不仅有上面那些资源之外,还有大量的HTML 文件,css文件以及Javascript文件。目前这些静态资源均是放在Nginx服务器上的,请求量很大,并且这些文件
阅读全文
摘要:一、简介 二、作用 哨兵是Redis集群架构中一个非常重要的组件,主要功能如下: 集群监控。即时刻监控着redis的master和slave进程是否是在正常工作。 消息通知。就是说当它发现有redis实例有故障的话,就会发送消息给管理员。 自动故障转移。如果redis master 节点宕机了的话,
阅读全文
摘要:一、简介 上图所示,我们在服务层和数据库层之间增加一个缓存层,现在我们读取数据的时候,先从缓存里面读取,读不到的再去读数据库。 既然我们引入了缓存,那肯定是想更多的请求尽量落在缓存上,也就是说我们必须要关注缓存命中率,命中率越高就代表我们的后端存储就越不容易被拖垮成为性瓶颈,如果我们的缓存命中率下降
阅读全文
摘要:一、简介 一致性哈希算法在1997年由麻省理工学院提出,是一种特殊的哈希算法,在移除或者添加一个服务器时,能够尽可能小地改变已存在的服务请求与处理请求服务器之间的映射关系 。一致性哈希解决了简单哈希算法在分布式哈希表( Distributed Hash Table,DHT) 中存在的动态伸缩等问题。
阅读全文
摘要:一、简介 Cache Aside Pattern 旁路缓存策略,分为读策略和写策略。 二、读写策略 旁路缓存策略,以数据库的数据为基准的,而缓存是按需才加载。 2.1、读策略 先从缓存中读取数据。 如命中缓存,直接返回。 如未命中缓存,则去查数据库。 查到数据库的数据,回写缓存。 2.2、写策略 先
阅读全文
摘要:一、作用 异步化提升性能、系统间解耦、流量削峰。 二、类型 ActiveMQ、RabbitMQ、Kafka以及RocketMQ这四大类。 2.1、ActivwMQ 目前不活跃,前几年用的比较多,故略去。 2.2、Kafka 【优点】: Kafka最大优势就在于高吞吐量,在普通机器4CPU8G的配置下
阅读全文
摘要:为何一、应用场景 NoSql用于超大规模数据的存储。改类型数据存储不需要固定模式,无序多余操作就可以横向扩展。 二、常用类型 2.1、Redis:基于KV存储结构,由于是使用内存存储,所以读写性能都极高,也是高于现在的关系型数据库的。一般如果我们业务中对性能要求比较高的话,就可以使用redis。 2
阅读全文
摘要:一、场景 在我们项目部署上线的时候,我们是不是会经常去Linux服务器上查查服务器的CPU使用率,或者是运维经常会盯Linux的CPU使用率。如果CPU使用率一直100%,如何查找并解决问题? 二、步骤 2.1、定位到进程 使用top 和 ps分析工具报告的CPU 使用率,定位到进程。是那个进程占用
阅读全文
摘要:一、简介 每次访问的时候需要去取内存里的数据,没取到就添加到内存,但是,又不想取到的内存是过于陈旧的。 LRU【缓存淘汰算法】:最近最少使用策略来管理内存数据。根据数据的历史访问记录来进行淘汰缓存,即假如数据最近被访问过,那么它以后被访问到的几率会更高,也就不会被淘汰。 注:Redis的缓存过期实现
阅读全文
摘要:一、简介 可扩展即是通过增加相应的机器来达到抗住系统的突然流量激增的目的。 二、设计方案 2.1、存储扩展 比如订单系统,首先针对数据存储,按照基础业务进行拆分的,大体拆为用户库、运营库、权益库、基础数据库、订单库等,具体的酒店这些基础数据就放在基础数据库中,这样拆分还有个好处就是确保了故障的隔离,
阅读全文
摘要:一、简介 高可用(HA)是系统架构设计中必须考虑的,是指系统所能提供无故障服务的一种能力。即避免因为服务器宕机导致的服务不可用的情况。 二、衡量 可用性 = 平均故障间隔/(平均故障间隔 + 故障恢复平均时间) 三、如何设计高可用 想要高可用就要避免使用单点,你想想看你的单台服务器再强应用优化的再极
阅读全文
摘要:一、简介 高并发,即同一时刻系统能处理多少请求。 二、提高系统性能 首先该想到的是如何发挥单个服务器潜能,再考虑堆服务器。 2.1、如何知道单台服务器性能瓶颈 性能的衡量指标,在业界通常指的是响应时间或者吞吐量,但是单次的测试或者部分的测试响应时间是不足以来判断当前系统性能的好坏的,所以需要收集一段
阅读全文