我来到,我看见,我记录。

急雨收残暑,梧桐一叶惊。

tcc-fence 模式下日志的自动清除

issue 关联 先查出可以清理的数据 按索引删除数据 给delete加上limit 查询代码后发现,在 tcc-fence 模式下并不存在自动删除日志的功能,于是准备实现该功能。 pull request 1. 配置文件 在 config 模块中新增了 Config 结构体,用于配置 TCC Fence 日志清理功能的相关参数。 type Config struct { Enable bool `yaml:"enable" json:"enable" koanf:"enable"` Url string `yaml:"url" json:"url" koanf:"url"` LogTableName string `yaml:"log-table-name" json:"log-table-name" koanf:"log-table-name"` CleanPeriod time.Duration `yaml:"clean-period" json:"clean-period" koanf:"clean-period"` } Enable: 是否启用日志清理功能。 Url: 数据库连接字符串。 LogTableName: TCC 日志表的名称。 CleanPeriod: 清理任务的执行周期。 2. 初始化函数 在客户端的 InitTCC 函数中添加了对 fence 的初始化逻辑。 func InitTCC(cfg fence.Config) { fence.InitFenceConfig(cfg) rm.GetRmCacheInstance().RegisterResourceManager(GetTCCResourceManagerInstance()) } 3. 配置初始化 在 InitFenceConfig 函数中,根据配置参数初始化相关组件,并启动清理任务。...

February 21, 2025 · 2 min · 362 words · Similarityoung

issue: 双向流模式中 dubbo-go 无法关闭 Tcp 连接

issue 关联 client: dubbo-go: v3.2.0-rc2 server: dubbo v3.3.0 registry: zookeeper 问题 1:biStream 客户端没有关闭长连接的接口;如果服务端不调用 onCompleted,那么 Receive 会永久 block 客户端应当具有主动 Close 能力才对,底层使用的是 grpc,而 grpc 客户端是能够主动关闭连接的。 问题 2:Java 服务端调用 onCompleted() 后,biStream.Receive 返回 EOF 但是和服务端的 TCP 连接仍然存在;我知道 dubbo client 内部是连接池,但是我测试了一下,TCP 连接似乎并没有被复用 源码分析 func TestBiDiStream2(svc greet.GreetService) error { fmt.Printf("start to test triple bidi stream 2\n") stream, err := svc.GreetStream(context.Background()) if err != nil { return err } if sendErr := stream.Send(&greet.GreetStreamRequest{Name: "stream client!"}); sendErr != nil { return err } resp, err := stream....

January 17, 2025 · 6 min · 1264 words · Similarityoung

MapReduce 阅读笔记

1. 引言(Introduction) 我们意识到,我们的大部分计算都涉及对输入中的每个逻辑 “记录” 应用 map 操作,以便计算一组中间键 / 值对,然后将 reduce 操作应用于共享同一键的所有值,以便适当地组合派生数据。我们使用具有用户指定 map 和 reduce 操作的函数模型,使我们能够轻松地并行化大型计算,并使用重新执行作为容错的主要机制。 这项工作的主要贡献是一个简单的和强大的接口,可实现自动并行化和大规模计算的分布,结合起来使用此接口的实现大型商用PC集群上的高性能。 2. 编程模型(Programming Model) Map 和 Reduce 的定义与功能 Map(映射):是由用户编写的函数,它接受一个输入键值对,然后对输入数据进行处理,产生一组中间键值对。例如在单词计数的例子中,Map 函数会读取文档内容(值),将文档中的每个单词作为键,“1” 作为值,输出一系列 < 单词,“1”> 这样的中间键值对,表示每个单词出现了一次。其作用是将大规模数据的处理分解为对每个独立数据块(逻辑 “记录”)的操作,为后续的合并处理提供基础数据。 Reduce(归约):同样由用户编写,它接受一个中间键以及与该键相关联的一组值。Reduce 函数的主要任务是将具有相同键的值进行合并处理,通常是将这些值进行某种计算(如求和、连接等),最终生成可能更小的一组值,一般每个 Reduce 调用产生零个或一个输出值。以单词计数为例,Reduce 函数会接收一个单词(键)和该单词对应的所有计数(值的列表),然后将这些计数相加,得到该单词的总出现次数,输出 <单词,总次数> 这样的键值对。Reduce 操作实现了对中间数据的合并和聚合,从而得到最终想要的结果形式。 Map 和 Reduce 函数共同构成了 MapReduce 编程模型的核心,通过这种分而治之的方式,能够在大规模集群上高效地处理海量数据。 典型使用案例(如单词计数) 大型文档集合中每个单词的出现次数的问题 // key: document name // value: document contents map(String key, String value): for each word w in value: EmitIntermediate(w, "1"); // key: a word // values: a list of counts 迭代器,用于遍历与该单词相关联的所有计数 reduce(String key, Iterator values): int result = 0; for each v in values: result += ParseInt(v); Emit(AsString(result)); map: 遍历文档内容中的每个单词w。对于每个单词,使用EmitIntermediate(w, "1")发出一个中间键值对,其中键是单词w,值是字符串"1"。这表示该单词在当前文档中出现了一次(以简单的计数为 1 来表示每次出现)。...

December 29, 2024 · 4 min · 792 words · Similarityoung

Dubbo 集成 Spring Security 和 OAuth2

定义与基本概念 Spring Security 是一个基于 Spring 框架的安全框架,为 Java 企业级应用提供了全面的安全解决方案,涵盖了身份验证(用户登录)、授权(访问控制)、加密和防止常见的安全漏洞等功能。它可以集成到各种类型的 Spring 应用中,包括 Web 应用(如 Spring MVC、Spring Boot)和非 Web 应用。 OAuth2(开放授权 2.0)是一个开放标准的授权框架,旨在解决不同应用之间的授权问题,允许用户在不向第三方应用透露自己的用户名和密码的情况下,授权第三方应用访问他们存储在另一个服务提供商上的资源。它通过使用令牌Token来代表用户的授权,使得资源服务器能够验证请求是否被授权。 核心角色与流程 资源所有者:通常是用户,拥有受保护的资源。 资源服务器:存储资源的服务器,需要对请求进行授权验证。 客户端:请求访问资源的应用程序。 授权服务器:负责验证资源所有者的身份,并发放令牌给客户端 客户端请求资源所有者授权,资源所有者同意后,授权服务器向客户端发放令牌,客户端携带令牌访问资源服务器,资源服务器验证令牌的有效性后提供资源。 与 Dubbo 的协同 同时低版本 javax 和高版本 jakarta servlet API ,jakarta API 优先级更高,只需要引入jar即可使用HttpServletRequest和HttpServletResponse作为参数 使用 Filter 扩展: 实现 Filter 接口和 org.apache.dubbo.rpc.protocol.tri.rest.filter.RestExtension 接口,然后注册SPI 主要流程 由于 OAuth2 需要授权服务器,资源服务器,客户端,为了简化案例,就写授权服务器和资源服务器。 AuthorizationServer 采用默认配置 @Bean public SecurityFilterChain authorizationServerSecurityFilterChain(HttpSecurity http) throws Exception { OAuth2AuthorizationServerConfiguration.applyDefaultSecurity(http); return http.build(); } 1. 端点访问控制 授权端点(/authorize): 要求进行身份验证,只有已认证的用户才能发起授权请求。默认情况下,通常会使用 Spring Security 的标准身份验证机制,如基于表单的登录或 HTTP Basic 认证。 限制对该端点的请求方法,一般只允许 GET 和 POST 方法,以防止恶意的请求操作。 令牌端点(/token): 此端点用于发放访问令牌和刷新令牌,安全要求更高。默认配置会要求客户端进行身份验证,通常通过客户端 ID 和客户端密钥进行认证。 同样限制请求方法,一般只允许 POST 方法,以确保只有合法的请求才能获取令牌。 2....

December 26, 2024 · 4 min · 660 words · Similarityoung

一些较好的文章收藏

go 的代码风格 git commit 规范 git 教程 The Uber Go Style Guide

December 1, 2024 · 1 min · 12 words · Similarityoung