分布式事务 2PC和3PC:都是以集中式的方式实现分布式事物,这种方法都存在两个共同的缺点,一个是同步执行性能差,一个是没有解决数据不一致的问题。分布式消息确保事物最终一致性的方案就出现了。TCC:适用于执行时间确定且较短,实时性要求高,对数据一致性要求高,比如互联网金融企业最核心的三个服务:交易、支付、账务。本地消息表/MQ 事务:适用于事务中参与方支持操作幂等,对一致性要求不高,业务上能容忍数据不一致到一个人工检查周期,事务涉及的参与方、参与环节较少,业务上有对账/校验系统兜底。
单元化架构的思考 还是以核心系统为例,核心系统在同城两个数据中心同时部署,共同对外提供服务,实现应用层的多活,但是该模式还是存在一个主库,所以在同城另外一个中心发起的交易存在跨中心的数据访问,对于SQL数较多的交易影响明显。如果可以用一种“轻量级”的解决方案解决“多活”建设的诉求,其实是为银行的“多活”架构建设提供了一条新的建设路径,尤其是针对很多科技能力、科技投入相对大行较低、较少的中小银行,既满足了诉求,又降低了建设难度。同时,在应用层可以实现故障面更小的影响,满足银行进行“多活”建设的最高诉求,既故障影响最小。
用户中心——银行业务中台设计 在传统银行,只有在银行开立了账户的个人和企业才称之为客户。以个人为例,只有在银行开了储蓄账户(I类户、II类户)才会被银行纳入客户管理范围,银行只对这些客户提供服务,或进行分析、营销、关系维护等管理工作。而互联网企业的客户定义范围则大得多,即使是没有进行用户注册的普通游客,也在互联网企业的客户范畴内。客户定义是传统银行与互联网企业的最大差异点,这让互联网企业可以经营的客户范围远远大于传统银行,因而经营效果也远超银行。
什么是Service Mesh Service Mesh 作为下一代微服务技术的代名词,初出茅庐却深得人心一鸣惊人,大有一统微服务时代的趋势。那么到底什么是 Service Mesh ?一言以蔽之:Service Mesh是微服务时代的TCP协议。有了这样一个感性的初步认知,我们再来看到底什么是 Service Mesh 。提到 Service Mesh ,就不得不提微服务。根据维基百科的定义:微服务 ( Microservices ) 是一种软件架构风格,它是以专注于单一责任与功能的小型功能区块 ( Small B
代码分层架构 传统三层架构表示层(web)业务逻辑层(business/service)数据访问层(dao)DDD经典四层架构用户接口层(User Interface)系统对外暴露的接口层(API)应用层(Application)系统用例层,负责对领域层的领域对象进行组织和编排,通过对领域层对象的编排,实现了用例。 调用domain层的对象完成一个业务。 调用领域服务读取数据 调用repository保存数据(包括事务处理)。领用层(Domain)基础设施层(Infrastr
分布式链路追踪 前言现代Internet服务通常被实现为复杂的、大规模的分布式系统。这些应用程序是由软件模块的集合构成的,这些模块可能由不同的团队开发,可能使用不同的编程语言,可能跨越多个物理设施的数千台机器。在这样的环境中,帮助理解系统行为和对性能问题进行推理的工具是非常宝贵的。 现有的分布式追踪工具基本都是借鉴了 google 的Dapper来实现的。google dapper(dapper原文共14页,建议下载阅读)原理分布式系统中的调用链: 通过收集每一个server接收和发送消息的信息(消息标识符.
ConcurrentSkipListMap 一、前言concurrentHashMap与ConcurrentSkipListMap性能测试在4线程1.6万数据的条件下,ConcurrentHashMap 存取速度是ConcurrentSkipListMap 的4倍左右。但ConcurrentSkipListMap有几个ConcurrentHashMap 不能比拟的优点:1、ConcurrentSkipListMap 的key是有序的。2、ConcurrentSkipListMap 支持更高的并发。ConcurrentSkipList.
HTTPS 与 SSL HTTPS = HTTP+ 加密 + 认证 + 完整性保护HTTPS 并非是应用层的一种新协议。 只是 HTTP 通信接口部分用SSL(Secure Socket Layer) 和 TLS(Transport Layer Security) 协议代替而已;通常, HTTP 直接和 TCP 通信。 当使用 SSL时, 则演变成先和 SSL通信, 再由 SSL和 TCP 通信了。 简言之, 所谓HTTPS, 其实就是身披SSL协议这层外壳的 HTTP。在采用 SSL后, HTTP 就拥有了 HTTPS 的
ThreadLocal - 内存泄露 1.内存泄漏内存溢出: Memory overflow 没有足够的内存提供申请者使用.内存泄漏: Memory Leak 程序中已经动态分配的堆内存由于某种原因, 程序未释放或者无法释放, 造成系统内部的浪费, 导致程序运行速度减缓甚至系统崩溃等严重结果. 内存泄漏的堆积终将导致内存溢出2. key=ThreadLocal是强引用假设ThreadLocalMap中的key使用了强引用, 那么会出现内存泄漏吗?假设在业务代码中使用完ThreadLocal, ThreadLocal r
java中对象的可达性 && 弱引用简介 package java.lang.ref;/** * 对象的可达到性(Reachability): * 1>被强引用的对象: * 定义:如果一个对象不需要遍历任何引用链就可以被某些线程访问,那么这个对象就是被强引用的对象。new出来的对象被创建它的线程强引用着。An object is strongly reachable if it can be reached by some thread without traversing any reference obj.
本地消息表实现最终一致性 背景传统的单体应用不会横跨多个数据库,可以通过单机事务保证一致性。然而在海量数据的场景下,我需要对数据库做拆分,即分库分表,而Cobar、MyCat这类分库分表中间件并不提供分布式事务的特性,并且基于二阶段提交的分布式事务性能较差,对于大多数业务场景来说,并不需要强一致,只需要保证最终一致性即可。实践下面我们举个下订单的场景,总共有3个实体,商品、用户、订单,我们按照user_id来sharding。所以相同user_id的用户和订单在同一个物理库下,而商品表中不存在user_id,所以商品表在
达尔文商品管理 什么是达尔文 达尔文是一套全新的商品管理体系,它不同于淘宝原来的分类法(基于类目属性体系)的管理思路,而是以最细粒度的产品节点(CSPU)为核心,使用系统+运营机制的方式维护一套丰富、准确的产品库,通过产品实现聚合、管控商品,以确保商品信息的确定性。为什么要实行达尔文 在实行达尔文体系之前,天猫商品管理存在以下问题: 1.最细粒度产品模型的缺失; 2.存在大量重复SPU,SPU信息不准确;以Apple iPhone 4为例,产品库中存在大量重复的...
Lombok注解 注解@AllArgsConstructor作用生成包含所有字段的构造器参数staticName : 不为空的话,生成一个静态方法返回实例,并把构造器设置为private@AllArgsConstructor(staticName = "create")public class Example { private int foo; private final String bar;}生成:public class Example { privat
MySQL MGR架构 一、MGR简介MGR全称MySQL Group Replication(Mysql组复制),是MySQL官方于2016年12月推出的一个全新的高可用与高扩展的解决方案。MGR提供了高可用、高扩展、高可靠的MySQL集群服务。在MGR出现之前,用户常见的MySQL高可用方式,无论怎么变化架构,本质就是Master-Slave架构。MySQL 5.7版本开始支持无损半同步复制(lossless semi-syncreplication),从而进一步提示数据复制的强一致性。MySQL Group Repl
DDD-领域驱动设计 目录一、前言二、DDD是什么?三、DDD的职责:复杂系统的应对:微服务架构:DDD架构:四、DDD相关概念:领域限界上下文(Bounded Context)统一语言五、DDD的实现:战略建模内容:划分限界上下文限界上下文之间的映射关系(Context Mapping)战术建模:内容:模块(Module):实体(Entity):值对象(Value Objects)聚合(Aggregate)领域服务(Domain Services)领域事件(Domain Events)代码分层架构:DDD落地应对的挑战:宏观上
UML建模-用例图 用例图主要用来描述角色以及角色与用例之间的连接关系。说明的是谁要使用系统,以及他们使用该系统可以做些什么。一个用例图包含了多个模型元素,如系统、参与者和用例,并且显示这些元素之间的各种关系,如泛化、关联和依赖。它展示了一个外部用户能够观察到的系统功能模型图。【用途】:帮助开发团队以一种可视化的方式理解系统的功能需求。一、用例图所包含的的元素1.参与者(Actor)——与应用程序或系统进行交互的用户、组织或外部系统。用一个小人表示。 2....