说明
名不正则言不顺,言不顺则事不成
命名本身是非常重要的,具体不再展开讨论了;总之,目前的当务之急是建立命名体系,这样使得概念都能够有合适的逻辑承载点。
内容
1 事务
本质上都是元数据
人能够处理的也就是元数据。我归纳了一下,目前我需要处理的几类元数据:
1.1 基础服务。
我是通过一个微服务体系来完成相关的功能,体系里包含了数据库、代理、门户以及各式各样的功能服务。有些是长期运行的基础服务,无论在哪台主机上都该被启动的。
**有些时候机器会迁移,此时如何在装机后一键恢复所有的微服务呢?**想象中,应该有一个地方记录了所有的微服务,然后某个程序就可以去启动这些指定的微服务。
还有一种情况是自动依赖满足。 一个微服务在启动时可以自动确保(ensure)相关的微服务在运行。
1.2 特定服务(workers)
这些特定的服务通常可以认为是各种各样的"工人",执行各种各样的任务,来完成日常所有的业务需求。我将他们分为三类:
- 1 GTask: 通用的任务,处理最个性化的需求
- 2 FGTask:与GTask不同,FGTask不依赖于任务表,执行的通常是通用的、高稳定性的任务
- 3 STask: 周期任务,每分钟执行。
这几种任务通常是这么搭配:
STask进行嗅探,然后将变化更新到任务表;Workers会通过Manager执行这些任务(GTask),中间可能会调用FGTask辅助。
这些特定的服务都会使用一个核心逻辑工具(SCLC),SCLC会有数据表(sclc_df)和参数表(sclc_table)两类;要注意的是,sclc_table是元数据表,而sclc_df不一定是。
元数据的数据表会保存,但是普通数据的sclc_df是包含在任务内部的,是具体的明细数据。
1.3 要处理的数据(blocks)
这里认为要处理的数据一定有一个整型字段,按序排列。基本上可以认为就是mysql的自增主键。
会有一个主表,也是统计表。对于某一个目标数据(db.table)进行了区块划分。后面加的诸多统计都会体现在这里。另外还有一个与区块对应的任务表(Range)。
任务表除了Range还有Set。Set是离散方式的元数据任务,所以不能包含太多的id,mongo是比较合适列表的存储方式。
1.4 要执行的任务(tasks)
和数据区块类似,只不过是使用任务编号,这样会避免稀疏的问题。
2 存储
基于mongo
使用mongo的副本集进行存储。这样在进行分布式计算时就会非常自然,所有机器都有同样的数据。
元数据一定是存通用副本集的,而要处理的业务数据则视情况,看是否走副本集或单机mongo。
3 命名
到了最重要的部分,这里的命名空间全部是基于通用副本集下
序号 | 名字 | 解释 |
---|---|---|
1 | DataBlock.tier1_tier2 | 数据区块主表。【统计】:按照数据的id来做的区块。 |
2 | BatchTask.tier1_tier2_function_range | 区块任务。【任务】:实际要被执行的任务 |
3 | BatchTask.tier1_tier2_function_set | 离散任务。【任务】:实际要被执行的任务 |
4 | TaskBlock.tier1_tier2 | 任务区块主表。【统计】:按照任务id做的区块 |
5 | BaseService.tier1_tier2 | 【统计】主表,所有服务的定义在这里 |
6 | ServiceTask.tier1_tier2 | 【任务】启动主表服务的任务 |
7 | GTaskReg | GTask的定义信息。 【统计】GTask注册表 |
8 | GTask | 【任务】实际的任务 |
9 | STaskReg | 【统计】GTask注册表 |
10 | STask | 【任务】实际的任务 |
11 | FGTaskReg | 【统计】GTask注册表 |
12 | FGTask | 【任务】实际的任务 |