- 博客(331)
- 资源 (18)
- 收藏
- 关注
原创 GC问题分析&解决
现象:每次Full GC后老年代使用率呈现断崖式下跌,Full GC触发间隔低于预期。原因:大量无效对象晋升,导致Old区占用率增长过快。
2021-09-06 20:17:45 2283
原创 DDD-领域驱动设计
目录一、前言二、DDD是什么?三、DDD的职责:复杂系统的应对:微服务架构:DDD架构:四、DDD相关概念:领域限界上下文(Bounded Context)统一语言五、DDD的实现:战略建模内容:划分限界上下文限界上下文之间的映射关系(Context Mapping)战术建模:内容:模块(Module):实体(Entity):值对象(Value Objects)聚合(Aggregate)领域服务(Domain Services)领域事件(Domain Events)代码分层架构:DDD落地应对的挑战:宏观上
2021-03-05 00:25:48 8688 1
原创 JVM内存结构
目录一、官网:二、JVM内存结构2.1类加载器2.2运行时数据区2.2.1程序计数寄存器(Program Counter Register / PC Register)2.2.3方法区概念:运行时常量池:方法区的回收:元数据区:2.2.3Java虚拟机栈:概念:栈帧:局部变量表(Local Variables Table):操作数栈(Operand Stack):动态连接方法返回地址2.2.4本地方法栈(Native Method St
2020-03-11 22:34:38 1279
原创 分布式事务
2PC和3PC:都是以集中式的方式实现分布式事物,这种方法都存在两个共同的缺点,一个是同步执行性能差,一个是没有解决数据不一致的问题。分布式消息确保事物最终一致性的方案就出现了。TCC:适用于执行时间确定且较短,实时性要求高,对数据一致性要求高,比如互联网金融企业最核心的三个服务:交易、支付、账务。本地消息表/MQ 事务:适用于事务中参与方支持操作幂等,对一致性要求不高,业务上能容忍数据不一致到一个人工检查周期,事务涉及的参与方、参与环节较少,业务上有对账/校验系统兜底。
2023-11-29 22:11:58 1021
原创 单元化架构的思考
还是以核心系统为例,核心系统在同城两个数据中心同时部署,共同对外提供服务,实现应用层的多活,但是该模式还是存在一个主库,所以在同城另外一个中心发起的交易存在跨中心的数据访问,对于SQL数较多的交易影响明显。如果可以用一种“轻量级”的解决方案解决“多活”建设的诉求,其实是为银行的“多活”架构建设提供了一条新的建设路径,尤其是针对很多科技能力、科技投入相对大行较低、较少的中小银行,既满足了诉求,又降低了建设难度。同时,在应用层可以实现故障面更小的影响,满足银行进行“多活”建设的最高诉求,既故障影响最小。
2023-10-30 19:13:31 541
转载 用户中心——银行业务中台设计
在传统银行,只有在银行开立了账户的个人和企业才称之为客户。以个人为例,只有在银行开了储蓄账户(I类户、II类户)才会被银行纳入客户管理范围,银行只对这些客户提供服务,或进行分析、营销、关系维护等管理工作。而互联网企业的客户定义范围则大得多,即使是没有进行用户注册的普通游客,也在互联网企业的客户范畴内。客户定义是传统银行与互联网企业的最大差异点,这让互联网企业可以经营的客户范围远远大于传统银行,因而经营效果也远超银行。
2022-12-09 20:11:24 2068
转载 什么是Service Mesh
Service Mesh 作为下一代微服务技术的代名词,初出茅庐却深得人心一鸣惊人,大有一统微服务时代的趋势。那么到底什么是 Service Mesh ?一言以蔽之:Service Mesh是微服务时代的TCP协议。有了这样一个感性的初步认知,我们再来看到底什么是 Service Mesh 。提到 Service Mesh ,就不得不提微服务。根据维基百科的定义:微服务 ( Microservices ) 是一种软件架构风格,它是以专注于单一责任与功能的小型功能区块 ( Small B
2021-08-10 21:03:01 448
原创 代码分层架构
传统三层架构表示层(web)业务逻辑层(business/service)数据访问层(dao)DDD经典四层架构用户接口层(User Interface)系统对外暴露的接口层(API)应用层(Application)系统用例层,负责对领域层的领域对象进行组织和编排,通过对领域层对象的编排,实现了用例。 调用domain层的对象完成一个业务。 调用领域服务读取数据 调用repository保存数据(包括事务处理)。领用层(Domain)基础设施层(Infrastr
2021-07-19 19:40:02 2100
原创 分布式链路追踪
前言现代Internet服务通常被实现为复杂的、大规模的分布式系统。这些应用程序是由软件模块的集合构成的,这些模块可能由不同的团队开发,可能使用不同的编程语言,可能跨越多个物理设施的数千台机器。在这样的环境中,帮助理解系统行为和对性能问题进行推理的工具是非常宝贵的。 现有的分布式追踪工具基本都是借鉴了 google 的Dapper来实现的。google dapper(dapper原文共14页,建议下载阅读)原理分布式系统中的调用链: 通过收集每一个server接收和发送消息的信息(消息标识符.
2021-05-19 00:19:13 644
转载 ConcurrentSkipListMap
一、前言concurrentHashMap与ConcurrentSkipListMap性能测试在4线程1.6万数据的条件下,ConcurrentHashMap 存取速度是ConcurrentSkipListMap 的4倍左右。但ConcurrentSkipListMap有几个ConcurrentHashMap 不能比拟的优点:1、ConcurrentSkipListMap 的key是有序的。2、ConcurrentSkipListMap 支持更高的并发。ConcurrentSkipList.
2021-04-14 18:01:11 2162 2
转载 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 的
2021-04-01 16:03:21 2193
转载 ThreadLocal - 内存泄露
1.内存泄漏内存溢出: Memory overflow 没有足够的内存提供申请者使用.内存泄漏: Memory Leak 程序中已经动态分配的堆内存由于某种原因, 程序未释放或者无法释放, 造成系统内部的浪费, 导致程序运行速度减缓甚至系统崩溃等严重结果. 内存泄漏的堆积终将导致内存溢出2. key=ThreadLocal是强引用假设ThreadLocalMap中的key使用了强引用, 那么会出现内存泄漏吗?假设在业务代码中使用完ThreadLocal, ThreadLocal r
2021-03-31 15:52:10 678
原创 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.
2021-03-31 14:54:06 620
转载 本地消息表实现最终一致性
背景传统的单体应用不会横跨多个数据库,可以通过单机事务保证一致性。然而在海量数据的场景下,我需要对数据库做拆分,即分库分表,而Cobar、MyCat这类分库分表中间件并不提供分布式事务的特性,并且基于二阶段提交的分布式事务性能较差,对于大多数业务场景来说,并不需要强一致,只需要保证最终一致性即可。实践下面我们举个下订单的场景,总共有3个实体,商品、用户、订单,我们按照user_id来sharding。所以相同user_id的用户和订单在同一个物理库下,而商品表中不存在user_id,所以商品表在
2021-03-25 14:59:00 886
转载 达尔文商品管理
什么是达尔文 达尔文是一套全新的商品管理体系,它不同于淘宝原来的分类法(基于类目属性体系)的管理思路,而是以最细粒度的产品节点(CSPU)为核心,使用系统+运营机制的方式维护一套丰富、准确的产品库,通过产品实现聚合、管控商品,以确保商品信息的确定性。为什么要实行达尔文 在实行达尔文体系之前,天猫商品管理存在以下问题: 1.最细粒度产品模型的缺失; 2.存在大量重复SPU,SPU信息不准确;以Apple iPhone 4为例,产品库中存在大量重复的...
2021-03-24 10:58:15 5845 1
转载 Lombok注解
注解@AllArgsConstructor作用生成包含所有字段的构造器参数staticName : 不为空的话,生成一个静态方法返回实例,并把构造器设置为private@AllArgsConstructor(staticName = "create")public class Example { private int foo; private final String bar;}生成:public class Example { privat
2021-03-21 01:03:15 769
转载 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
2021-03-10 14:53:47 1215
转载 UML建模-用例图
用例图主要用来描述角色以及角色与用例之间的连接关系。说明的是谁要使用系统,以及他们使用该系统可以做些什么。一个用例图包含了多个模型元素,如系统、参与者和用例,并且显示这些元素之间的各种关系,如泛化、关联和依赖。它展示了一个外部用户能够观察到的系统功能模型图。【用途】:帮助开发团队以一种可视化的方式理解系统的功能需求。一、用例图所包含的的元素1.参与者(Actor)——与应用程序或系统进行交互的用户、组织或外部系统。用一个小人表示。 2....
2021-03-04 20:10:33 657 1
转载 SSRF漏洞
SSRF概述SSRF(Server-Side Request Forgery:服务器端请求伪造) 是一种由攻击者构造形成由服务端发起请求的一个安全漏洞。一般情况下,SSRF攻击的目标是从外网无法访问的内部系统。(正是因为它是由服务端发起的,所以它能够请求到与它相连而与外网隔离的内部系统)SSRF 形成的原因大都是由于服务端提供了从其他服务器应用获取数据的功能且没有对目标地址做过滤与限制。比如从指定URL地址获取网页文本内容,加载指定地址的图片,下载等等。SSRF 漏洞的寻找一、从WEB功能上
2021-03-03 20:15:53 817 1
转载 分布式事务
1、事务简介 事务(Transaction)是访问并可能更新数据库中各种数据项的一个程序执行单元(unit)。在关系数据库中,一个事务由一组SQL语句组成。事务应该具有4个属性:原子性、一致性、隔离性、持久性。这四个属性通常称为ACID特性。 原子性(atomicity):个事务是一个不可分割的工作单位,事务中包括的诸操作要么都做,要么都不做。 一致性(consistency):事务必须是使数据库从一个一致性状态变到另一个一致性状态,事务的中间状态不能被观察到的。...
2021-03-02 21:07:13 379
转载 数据库中间件
导读:本文详细介绍了中间件,主要从数据库拆分过程及挑战、主流数据库中间件设计方案、读写分离核心要点、分库分表核心要点展开说明。1. 数据库拆分过程及挑战垂直拆分、读写分离、分库分表(水平拆分)。每个拆分过程都能解决业务上的一些问题,但同时也面临了一些挑战。1.1 垂直拆分对于一个刚上线的互联网项目来说,由于前期活跃用户数量并不多,并发量也相对较小,所以此时企业一般都会选择将所有数据存放在一个数据库 中进行访问操作。举例来说,对于一个电商系统,其用户模块和产品模块的表刚开始都是位于一个库.
2021-03-02 20:57:04 896
转载 服务网关
一、什么是服务网关服务网关 = 路由转发 + 过滤器1、路由转发:接收一切外界请求,转发到后端的微服务上去;2、过滤器:在服务网关中可以完成一系列的横切功能,例如权限校验、限流以及监控等,这些都可以通过过滤器完成(其实路由转发也是通过过滤器实现的)。二、为什么需要服务网关上述所说的横切功能(以权限校验为例)可以写在三个位置:每个服务自己实现一遍 写到一个公共的服务中,然后其他所有服务都依赖这个服务 写到服务网关的前置过滤器中,所有请求过来进行权限校验第一种,缺点太明显,基.
2020-12-03 17:27:29 642
转载 分布式锁的实现之 redis 篇
一、引言我们在系统中修改已有数据时,需要先读取,然后进行修改保存,此时很容易遇到并发问题。由于修改和保存不是原子操作,在并发场景下,部分对数据的操作可能会丢失。在单服务器系统我们常用本地锁来避免并发带来的问题,然而,当服务采用集群方式部署时,本地锁无法在多个服务器之间生效,这时候保证数据的一致性就需要分布式锁来实现。二、实现Redis 锁主要利用 Redis 的 setnx 命令。加锁命令:SETNX key value,当键不存在时,对键进行设置操作并返回成功,否则返回失败。KEY 是
2020-11-13 18:22:29 583
原创 web服务架构演进
单体应用架构 概念:所有功能都在一个应用中实现。 场景:适合项目初期试错。 说明:用于简化增删改查工作量的数据访问框架(ORM)是关键。 优点:容易开发、测试,部署成本低(所需的机器很少)。 缺点:随着项目越来越复杂,团队不断扩大,单体应用的缺点就很容易显现出来了。 1>代码复杂度高:修改一个地方,很可能会影响到其它地方。 2>技术债越来越多:人员流动,不敢轻易动老代码。 3>持续部署困难:任何小的改动...
2020-10-23 20:39:13 398
原创 github搜索
输入location:China 可以搜索指定地区用户USER 输入 指定 star数 比如说stars:>50000,查找star数大于5万的项目
2020-10-21 19:44:45 246
原创 kafka
目录官方文档:一、简介:高性能分区的设计顺序读写零拷贝技术减少网络传输上的开销基础组件:kafka节点:broker主题:topic分区:partition副本:Replication同步副本集合ISR(in-sync replicas)概念:特点:非同步状态副本OSR(Outof-sync Replicas)partition中leader replication的选举:Kafka 为何不采用大多数投票机制(quorum算法)来选举l
2020-10-09 15:16:08 1352
转载 Databus架构分析
1. 简介Databus是一个低延迟、可靠的、支持事务的、保持一致性的数据变更抓取系统。由LinkedIn于2013年开源。Databus通过挖掘数据库日志的方式,将数据库变更实时、可靠的从数据库拉取出来,业务可以通过定制化client实时获取变更并进行其他业务逻辑。Databus有以下特点:数据源和消费者之间的隔离。 数据传输能保证顺序性和至少一次交付的高可用性。 从变化流的任意时间点进行消费,包括通过bootstrap获取所有数据。 分区消费 源一致性保存,消费不成...
2020-05-30 16:14:46 1475
原创 缓存场景问题处理
缓存雪崩 概念:大量的key使用相同的过期时间,导致大量的缓存在某一时刻集体失效,从而造成大量请求同时打到DB,造成DB瞬时压力太大导致雪崩。 解决:将key的过期时间分散开来。在原来的过期时间上加上一个随机值。 缓存击穿 概念:某个key在被高并发访问的时候,若该key的过期时间到了,则大量访问该key的请求就会直接打到DB上,造成DB的瞬时压力太大导致挂掉。 场景:某一个key...
2020-03-28 00:21:59 282
原创 redis的缓存淘汰策略
缓存淘汰策略: 背景: 当Redis内存超出物理内存限制时,内存的数据会开始和磁盘产生频繁的交换(swap),导致Redis的性能急剧下降,造成redis服务的不可用。 为了限制最大使用内存,Redis提供了配置参数maxmemory来限制内存的最大使用容量。 当实际内存超出maxmemory时,redis根据不同的缓存淘汰策略(maxmemory-policy)来对内存进行回收。...
2020-03-27 23:12:24 590
原创 redis的主从复制
主从复制: 场景: 执行slaveof命令后,复制过程便开始启动。 执行laveof no one命令后,终止从节点与主节点复制。 数据同步方式: 全量复制:第一次复制时采用全量复制,当数据量较大时,会对主从节点和网络造成很大的开销。 部分复制:主节点补发因网络闪断等原因丢失的数据给从节点。 主从延迟: 概念:主从复制是异步的,故会存在主从延迟的问题,一般延迟时...
2020-03-27 19:33:58 326
原创 redis中的数据结构和编码
基础知识:redis在内部使用redisObject结构体来定义存储的值对象。 每种类型都有至少两种内部编码,Redis会根据当前值的类型和长度来决定使用哪种编码实现。 编码类型转换在Redis写入数据时自动完成,这个转换过程是不可逆的,转换规则只能从小内存编码向大内存编码转换。源码:值对象redisObject:typedef struct redisObject { unsigned type:4; /* 对象类型 */ unsigned...
2020-03-27 00:41:29 691
转载 阿里云Redis开发规范
一、键值设计1. key名设计(1)【建议】: 可读性和可管理性以业务名(或数据库名)为前缀(防止key冲突),用冒号分隔,比如业务名:表名:idugc:video:1(2)【建议】:简洁性保证语义的前提下,控制key的长度,当key较多时,内存占用也不容忽视,例如:user:{uid}:friends:messages:{mid}简化为u:{uid}:fr:m:{mi...
2020-03-26 23:34:04 215
转载 缓存与数据库的双写一致性
分布式缓存是现在很多分布式应用中必不可少的组件,但是用到了分布式缓存,就可能会涉及到缓存与数据库双存储双写,你只要是双写,就一定会有数据一致性的问题,那么你如何解决一致性问题?Cache Aside Pattern最经典的缓存+数据库读写的模式,就是 Cache Aside Pattern。读的时候,先读缓存,缓存没有的话,就读数据库,然后取出数据后放入缓存,同时返回响应。更新的时...
2020-03-16 22:06:22 380
原创 设计模式 一一一 观察者模式
观察者模式(Observer) 概念: 又叫做发布-订阅(publish-subscribe)模式。 多个观察者同时监听某一个对象,当这个对象发生变化时,这个对象会通知所有感兴趣的观察者,以便于他们能够做出相应的处理。 jdk中的观察者模式: Observer 观察者 说明:观察(监听)着感兴趣的对象,通过将自身注册到感兴趣的对象中,并且由感兴趣的对象发通知来实现观察(监听...
2020-03-08 02:30:09 186
原创 设计模式 一一一 模板方法模式
模板方法: 目的:让模板的实现类来实现模板中固定逻辑(骨架)的具体步骤,从而达到一个固定逻辑可以对应n个具体的实现。 角色: 模板类 提供模板方法。 模板方法 指定逻辑的骨架,骨架由多个基本方法构成。 基本方法 骨架的一部分。 模板的具体实现类 继承模板类,对模板类中的基本方法进行自定义。 基本方法的具体实现 自定义基本方法的具体实现。 ...
2020-03-08 00:06:02 162
原创 设计模式 一一一 适配器模式
适配器模式: 目的:适配器暴露符合外界规范的接口,该接口的具体实现通过调用被适配对象的相应方法来完成。 应用:系统需要使用现有的一个类,但是这个类的接口不符合系统的需要,此时就需要新增一个适配器来解决这个问题。 角色: 目标接口:符合外界规范的接口 源对象(被适配的对象):提供相应的功能,但是接口的规范不符合外界的要求 适配器:暴露符合外界规范的接口,通过...
2020-03-07 11:22:53 164
原创 利用间接通信的思想来改善系统的设计 -- 装饰模式 vs 适配器模式 vs 代理模式
利用间接通信的思想来改善系统的设计:装饰模式: 目的:对对象的相应功能进行增强。 应用:对提供基础功能的类进行个性化增强。 说明:对象可能被装饰多次,最后的效果就是对象被包装了多层,故装饰器也包装器Wrapper。 eg: DecoratorBase封装了targetObj对象, DecoratorOne封装了DecoratorBase对象, DecoratorOneFo...
2020-03-06 23:19:14 178
原创 LRU - 最近最少访问缓存策略
Least Recently Used (LRU) cache最近最少访问缓存策略:/** * 基于LinkedHashMap自定义LRU的实现。 */class LRUCache extends LinkedHashMap<Integer, Integer>{ private int capacity; public LRUCache(int ...
2020-03-05 22:04:37 508
jQuery1.10.3(中文).chm
2014-12-25
Struts2.0中文教程.chm
2014-12-25
Spring2.5-中文参考手册.chm
2014-12-25
HTTP1.1.chm
2014-12-25
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人