《微服务设计》阅读笔记五

《微服务设计》,Building Microservices,作者Sam Newman,译者崔力强、张骏,人民邮电出版社,2016年。

笔记中有些内容直接引用原书。

================================================================

第五章分解单块系统

1.关键是接缝。Michael Feathers在《修改代码的艺术》一书中定义了接缝的概念。从接缝处可以抽取出相对独立的一部分代码,对这部分代码进行修改不会影响系统的其他部分。接缝即边界,前面说的限界上下文就是一个比较好的接缝。

2.分解MusicCorp。MusicCorp是书中举的一个例子。根据业务识别出高层限界上下文。创建包结构表示这些上下文,把对应的代码挪过去。分析包之间的依赖关系,要和组织架构相匹配。使代码围绕接缝组织起来。

3.分解单块系统的原因。要考虑分解的速度、团队结构、安全审计、某些特殊技术实现的功能单独形成一个服务等因素。

4.杂乱的依赖。

要使拉出来的接缝尽量少被其他组件依赖。

5.数据库。不要用数据库集成。找到数据库中的接缝,分离出来。

6.找到问题的关键。把数据库映射相关的代码和功能代码放在同一个上下文,根据业务来组织。另外,数据库表和表之间有约束,可以通过工具来可视化这些约束,如SchemaSpy(http://schemaspy.sourceforge.net)。

7.例子:打破外键关系。将对属于其它上下文的表的访问转变为对其服务的访问,放弃外键关联,如果需要可以将约束从数据库转移到代码。

8.例子:共享静态数据。像国家代码这种存在数据库的情况,可以用三种方法解决:每个包复制一份该表;这些共享静态数据放入代码(如属性文件或一个枚举),比数据库修改简单;静态数据放入一个单独的服务(有些极端)。推荐第二种。

9.例子:共享数据。共享数据可以创建一个单独的包,提供该共享数据的服务。业务概念显性化了。

10.例子:共享表。不同上下文的共享表按上下文实际需要的信息分开。

11.重构数据库。数据库分离操作具体可参见Scott J. Ambler和Pramod J. Sadalage编写的Refactoring Databases。推荐先分离数据库,别先着急分离服务,观察一下效果,再考虑是否分离服务。

12.事物边界。使用单块表结构,可以通过事务来保证多个操作的全部完成或全部回退。但按服务分表之后,无法使用事务来提供保证了。那应该怎么办呢?

再试一次。可以把操作放在队列或日志中,之后再尝试触发。最终一致性。

终止整个操作。通过补偿事务来抵消之前的操作,可能还需要重试补偿事务。

分布式事务。手动编排补偿事务会比较难,可以采用分布式事务,使用事务管理器来统一编配。处理分布式事务常用算法:两阶段提交。投票,根据投票结果实施。不要自己实现,尽量使用现有实现。

应该怎么办呢。上述方法会增加复杂性。要考虑是否一定要一致性,还是最终一致性就能满足业务需求。最终一致性的系统构建和扩展都更容易。如果一定要一致性,可以显式创建一个概念来表示这个服务,这样更容易实现补偿事务等操作。

13.报告。存储分离后,需要考虑报告会出现的问题。

14.报告数据库。报告需要获得各个部分的数据生出输出。在单块系统中,数据在一个数据库中,报告所需要的数据容易获得。

15.通过服务调用来获取数据。依赖API调用获取数据只适合简单报告系统。使用SQL接口的问题在于不同的微服务暴露的API不一定能够很好适用于报告场景。缓存能够加快访问速度,但也会有无法命中的情况。可以通过提供批量API来简化过程,批量请求变为一个资源,处理好后通过共享文件给调用系统获取,减少HTTP开销。不过作者认为应该有更简单的方式。

16.数据导出。使用一个独立的程序直接访问其他服务使用的数据库,把这些数据库导出到单独的报告数据库。虽然该程序成为了一个数据库集成程序,违反了低耦合原则,但它使得报告很简单,因此可以接受。可以通过维护团队负责将服务数据库的数据导出到报告系统数据库,缓解耦合性。也可以通过数据库技术,如使用视图创建一个聚合,使得对于报告系统来说看到的是单块数据表,但修改数据库时会增加复杂性。还是建议数据导出方式。

17.事件数据导出。对于服务发出的事件可以通过事件订阅器导入到报告数据库中,比周期导入更及时,而且能够将服务内部实现和报告系统解耦。缺点是所需要的信息都要以事件形式广播出去,数据量大时,不容易像数据导出那样在数据库级别进行扩展。

18.数据导出的备份。Netflix使用Cassandra作为数据备份的标准方式,开源了Aegisthus项目(一个能够处理大量数据的流水线)。

19.走向实时。可以考虑将不同的数据按需路由到不同地方。

20.修改的代价。做小的、增量的修改。可以用白板便于思考。可以用CRC(类-职责-交互)卡片帮助设计。

21.理解根本原因。服务一定会慢慢变大,大到需要拆分。要及时发现需要拆分的时机。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,723评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,003评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,512评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,825评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,874评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,841评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,812评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,582评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,033评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,309评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,450评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,158评论 5 341
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,789评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,409评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,609评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,440评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,357评论 2 352

推荐阅读更多精彩内容