Http调用工具spring-feign 设计文档

Feign是Netflix发布的一款轻量级Rest客户端框架,提供了一种声明式的服务调用组件,通过Feign只需声明一个接口并通过注解进行简单的配置即可实现对Http接口的绑定。然后就可以像调用本地方法一样来调用远程服务,而完全感觉不到是在进行远程调用。

Feign支持多种注解,比如Feign自带的注解以及JAX-RS注解,但遗憾的是Feign本身并不支持Spring mvc注解,这无疑会给广大Spring用户带来不便。于是Spring Cloud又对Feign进行了封装,使其方便集成到Spring项目中,并添加了对Spring mvc注解的支持,以及简化与负载均衡、服务注册发现、断路器等组件的集成,所以集成之后又叫Spring Cloud Feign

https://github.com/shanhm1991/spring-feign

任务管理工具spring-fom 设计文档

写这个工具最开始只是为了解决各种离线数据文件的处理,其中涉及比较多的任务处理。当时刚进入公司参与第一个项目,但是意识到公司的产品业务基本上都是围绕着数据做一些信息挖掘,尤其是离线数据,所以后续应该还会有很多各种各样的任务式场景。后来参与的各种项目也确实印证了自己的想法,所以确实能在一些项目中发挥作用,提高工作中的开发效率和质量,以及运维的能力。

目标是实现一个轻量级的通用任务管理框架,主要针对的是定时任务。在功能上除了能支持常见的场景外,希望也能支持一定的实时监控管理,而在结构设计上要有足够的扩展性以方便进行定制,同时在使用方式上要简洁清晰,对原代码尽量少的侵入。由于当时是设计用来处理文件的,又是基于spring容器管理的,所以取名为spring-fom。

https://github.com/shanhm1991/spring-fom

节点间数据同步设计

背景

对于数据的同步一般会想办法在数据库层解决,比较直接而且也有成熟的解决方案。但有时我们并不希望对整个库进行同步,只想对某些指定的业务模型数据进行同步。而且在有的场景下,可能希望在同步过程中插入一些操作,比如在合并时对变更的内容进行审查和修改,并在合并完成之前,仍然使用之前的数据;

所以希望设计一种通用的办法,让存在于各个系统节点中的数据能够各自进行变化,并保持数据一致,即便出现网络断开的情况。

节点间连接管理设计

问题

在一个拓扑结构中,每个节点都是独立的。如何让每个节点都感知到拓扑中其他节点的信息变化,以及节点之间的连接情况。