首页
精选文章幂等性查看全文幂等性是源自数学上的概念,本意是一个函数多次调用的结果是一次调用的结果是相等的,用公式表示即f(f(x))=f(x)。例如一个数字乘以1就是一个幂等函数,k*1*1*1...*1=k*1,无论该函数执行多少次和执行一次是相同的。在分布式环境下,幂等性是基本的要求,因为分布式场景下失败或者未知结果是系统调用的常态,尤其对于未知结果而言,调用方不知道调用是否成功,一般会发起重试,而且对于很多中间件,例如消息队列也不能保证消息仅仅被触发一次,所以系统如果不支持幂等性,就会出现逻辑以及数据错误。 例如用户的转账,如果不支持幂等性,会出现一笔转账执行多次的可能性,不支持幂等是金融等系统出现资金损失最常见的场景。 幂等性本质是数据的幂等性,调用多次方法之后,数据不能因为重复执行而出现数据问题。 唯一主键 数据从使用场景上可以分为状态型数据和流水性数据。 流水型数据 流水性数据即每次业务业务操作都会产生一条明细流水的数据,例如评论数据,订单数据,消息数据,甚至点赞操作都可以产生一条流水,流水数据一般会有一个业务ID,该业务ID和本次业务操作关联,成为业务ID。 流水性数据一般需要幂等的场景都是插入操作,因为流水型数据一旦插入,其业务信息是不可变的,唯一可变的一般是业务状态,而业务状态一般通过状态机来保证状态的正确性。 流水型数据的幂等一般是通过业务ID实现,即通过业务ID的唯一性来实现幂等,业务ID的唯一性一般通过数据库的唯一主键进行约束。唯一主键的强约束会在系统被重复插入的时候抛出异常。 因为流水型数据的插入可能会经过多个系统,所以流水型数据的写入操作要在数据提交入口的时候就尽可能带有业务ID,但是部分业务场景没办法在插入数据前产生业务ID…微服务查看全文微服务一般指一种架构思想,即把应用程序拆解为很多独立的微型组件或者服务,服务之间通过远程过程调用(RPC)或者消息的方式进行交互。微服务架构一般会根据不同的功能模块,基于不同的业务,将系统拆分成若干个独立的进程,进程之间会通过同步RPC或者异步消息的方式进行通信。 微服务因为服务数量较多,所以一般会提供独立的网关服务提供统一的对外出口。 微服务架构相较传统的单体架构,有以下优势: 单体应用只能由单一的技术栈进行开发,而微服务架构下,可以采用混合技术栈研发的模式,每个组件可以使用自己的技术栈。 单体应用通用业务逻辑复杂,给开发带来的较高的复杂度,因为耦合的业务逻辑很容易出现变更风险,而且在发布阶段也会因为不同的功能版本耦合在一个应用中而产生更高的风险,而微服务架构下,每个组件的功能更加单一,逻辑更加简单,所以可以提升研发效率,也更方便部署运维。 微服务因为把业务逻辑打散在多个组件,所以提供更高的鲁棒性,天然实现了错误隔离,较少会出现整体不可用的情况。 原则 架构的第一性要求是简单,微服务架构存在数据一致性问题,性能消耗,维护成本高等问题,所以从单体架构迁移到微服务架构一定要有充分的推演逻辑进行支撑,比如单体架构的复杂度过高,已经不能满足后续的业务迭代,单体架构的性能出现问题,必须进行微服务拆分满足性能问题,或者单体服务在组织协助层面已经不能满足当前的需求等。 微服务的拆分可以分为水平拆分,垂直拆分,横向功能拆分等。 水平拆分主要是按照服务承担的职责进行划分,例如分为接入层,逻辑层,存储层等。 垂直拆分按照业务功能拆分为不同的微服务。 通信 微服务之间的通信可以采用Http,SOA,RPC等方式进行通信…TCP查看全文TCP/IP协议位于网络ISO的七层模型中的第四层,是一个面向链接的协议。传输控制协议(TCP,Transmission Control Protocol)是为了在不可靠的互联网络上提供可靠的端到端字节流而专门设计的一个传输协议。 互联网络与单个网络有很大的不同,因为互联网络的不同部分可能有截然不同的拓扑结构、带宽、延迟、数据包大小和其他参数。TCP的设计目标是能够动态地适应互联网络的这些特性,而且具备面对各种故障时的健壮性。 不同主机的应用层之间经常需要可靠的、像管道一样的连接,但是IP层不提供这样的流机制,而是提供不可靠的包交换。 应用层向TCP层发送用于网间传输的、用8位字节表示的数据流,然后TCP把数据流分区成适当长度的报文段(通常受该计算机连接的网络的数据链路层的最大传输单元(MTU)的限制)。之后TCP把结果包传给IP层,由它来通过网络将包传送给接收端实体的TCP层。TCP为了保证不发生丢包,就给每个包一个序号,同时序号也保证了传送到接收端实体的包的按序接收。然后接收端实体对已成功收到的包发回一个相应的确认(ACK);如果发送端实体在合理的往返时延(RTT)内未收到确认,那么对应的数据包就被假设为已丢失将会被进行重传。TCP用一个校验和函数来检验数据是否有错误;在发送和接收时都要计算校验和。 每台支持TCP的机器都有一个TCP传输实体。TCP实体可以是一个库过程、一个用户进程,或者内核的一部分。在所有这些情形下,它管理TCP流,以及与IP层之间的接口。TCP传输实体接受本地进程的用户数据流,将它们分割成不超过64KB(实际上去掉IP和TCP头,通常不超过1460数据字节)的分段,每个分段以单独的IP数据报形式发送… |
热门分类开源Golang消息队列JavaJavascriptLinuxMysqlNLPPHP事务内存管理分布式理论分类存储常用存储开源软件操作系统画图网络编程数据库算法虚拟化前端存储理论常用算法微服务数据结构算法应用计算机原理中间件共识算法分布式分治动态规划容器并发排序架构组件绘图工具网络协议编程语言理论算法思想树缓存架构C++字符串算法工程思想搜索
算法题库
精选内容 |