一个微服务框架的情节

创造与发展

记得14年初下定决心重构系统的那一刻 ,“一切从简”的欲望尤为强烈,只因事情已经被“复杂”堵得水泄不通,其实归根到底还是过往自身的工具化思维局限了问题“最优解”的选择。对于一个“入世未深”的小伙来说,“简单”仅仅是简单。但无论如何,能把“简法”付诸行动,就已经不很简单了。

简法一:为什么不把这坨该死的代码拆开?

每当代码打包发布的时候,一个上百兆的部署文件让我深感忧虑。我的担忧并非空穴来风,一次又一次的瓶颈让我验证了这该死的担忧。面对这样一个庞然怪物,就算无数个“通宵”也削减不了我对它的力不从心,“分解”成为了我当时的唯一想法。因为“分解”是我们人类处理复杂的一种常识化手段,它能让我把一条复杂的数学题逐一破解,也能让我把一项艰巨的任务分而治之,更让我看到了人类从“自给自足”到“专业化分工”的魅力。

专业化分工

简法二:除了MVC,我还能如何选择?

无可否认,MVC是互联网时代的“王者荣耀”,但随着移动互联网的发展,我试图寻找另一种更适合多端消费的服务化抽象模式。如果我只是单纯地把沉重的SSH切换到当时较为流行且轻量的SSM,其实并没有太多本质上的区别。我们当时的这种“服务化”分解其实更多地想给“消费者”提供一种轻量化、标准化、抽象化的服务支撑,如果要用专业术语来形容,可能SOA(面向服务架构)更为贴切。但ESB和WS作为当时SOA的主流实现和工具,它们的“沉重”让我望而却之。

服务化分解

简法三:继续找合适的“轮子”还是“自造”轮子?

有想法对于一个年轻人来说再正常不过,但把能把这想法付诸实现还是需要一定的付出、勇气和机遇。才疏学浅的我在当时并未看到“服务化”的普及,选择一款成熟且契合自己思路的工具也不是一件容易的事,又或许是我内心当时那份热血澎湃的重构欲望在日益膨胀。幸运的是,开放的平台给了我足够开放的心态、空间和信心去打造属于我们的“轮子”。

欲望驱动

简法四:轮子的思考

“简单”是我们设计的首要原则,因为简单赋予了灵活,提高了效率、增强了可控,而且自主研发的约束范围也会远远大于工具的选择,为“简化”创造了无限可能。开源工具的思考边界可能更多地会集中在技术引擎和技术规范二者之间,因为它必须抽象在应用场景之下才能达到一定的通用性,所以开源的考虑会非常周到且功能齐全,但会存在一定的“臃肿”和“个性化”局限,这也是我们“自造轮子”的重要考虑之一,但更重要的还是从本质出发。

系统边界思考

简法五:技术引擎的思考

“服务化”的设计理念会把应用根据“领域边界”分解成一个个独立的“服务进程”。其实,划分后的应用系统跟操作系统还是有几分相似之处,服务好比进程,线程好比服务的业务执行单元。事实上,它们在运行过程中就是这样一种上下层的对应关系。

服务与进程

线程的执行是基于栈帧的“跳进跳出”,而业务的执行是基于“流程”的线性执行。“流程”是业务执行的线性抽象,对“流程”的分解、定义、组织和管控恰恰就是我们对“技术引擎”设计的关键所在。

技术引擎流程抽象过程

简法六:技术引擎的实现

对流程的抽象并非想说明我们“轮子”的独特之处,而是尝试对流程本质进行重新理解。因为本质,所以无论SSH还是SSM都能作为该抽象流程的一种实现。但是,我们要做的是尝试重新透过现象看本质,然后基于本质之上一砖一瓦重新打造出我们“服务化”理念的另一种实现。

系统层次分解思考

一张白纸的背后可能隐藏着数十道工序的运作,我们“轮子”每砖瓦的堆砌同样少不了对系统从始至终、由里到外的无数次观察和思考。每一次的重构都千差万别,每一次的放弃都异常挣扎,但每一次都更接近于自己的内心。

服务技术引擎结构

除了服务交互协议层外(Service Interaction protocal),我们把框架总体划分为框架服务(Framework Service)、基础服务(Base Service)和业务服务(Business Service)三个层次,各层次服务都是由定时器模块组件(Timer)、初始化模块组件(Initor)、销毁模块组件(Destoryer)、业务前置模块组件( SB_Module)、业务后置模块组件(SA_Module)以及业务实现模块组件(Services)组成。从结构上看,每一层的服务都内嵌于它上一层的服务之中,让各种模块组件形成了一种高约定标准化插拔式的切面规则。

高约定标准模块化切面规则

从开发框架的切面结构上看,框架的规范化约束已经弱化了传统的三层结构模式,把一切非核心逻辑“边缘模块组件化”,重点关注业务的核心逻辑实现。

简法七:技术规范的定义

因“欲望”的驱动,“自由”成为人性放飞自我的向往,但无拘无束的“自由”往往会对人性的自我控制形成严峻的考验,否则不会“无规不成圆”。“自由”和“约束”看似一种鱼和熊掌的关系,实际上,“约束”是迈向“自由”必不可少的前提。所以,“约束”可以让我们尽量地减少了配置、封装和依赖,尽量以一种简洁、高效且通俗易懂的工具形态让执行者“自由地”聚焦在问题的本质之上。

服务定义与规范

以上的服务定义主要源于我们对技术引擎的流程抽象分析。但业务服务(BUSINESS)本身除了具备核心业务的能力支撑以外,背后还隐藏着一个对核心业务的管理职责(俗称服务信息管理平台)。因此,我们继续把服务按功能性类别分解为“面向服务支撑(SOP)”和“面向服务管理(SMP)”两大类服务类型,无论业务支撑还是信息管理都实现了前后端的分离,把轻量化SOA演绎得淋漓尽致。因为基础服务与业务服务的强关联性,基础服务同样被细分为BASESOP和BASESMP两大类基础服务。

服务目录结构与命名规范

服务目录命名规范中的xxx为业务服务自定义标识,模块组件命名规范中的XXX为三位纯数字组合,除了唯一性的约束以外,还具备了内部模块组件(除业务实现模块)执行顺序的规范化约束,这一点跟Linux的运行级别中的运行脚本命名规范还是有几分相似之处(KXX.../SXX...)。

服务依赖与执行

简法八:应用规范的定义

从某个角度来看,人性的“懒惰”是社会进步的动力,它激发了人类创造的欲望来释放自己并减少一系列人为的不稳定性。但在那些尚未被工具自动化或智能化所覆盖的领域,适当的提前约束和规范同样是对人为管理的一种自动化体现。

服务代理管控执行规范化标准

框架的会话上下文(SessionContext)是线程流程代理及其模块组件解耦的关键所在,它承载着整个线程生命周期的状态信息,如业务会话(抽象)对象、请求报文对象(JSON)、响应报文对象(JSON)、模块组件内部执行上下文以及关系数据库事务控制等数据和信息。而框架服务内更多地集成了流程的一些应用规范化实现,如服务并发控制拦截,数据统一解析、安全拦截验证 、数据统一响应输出以及统一规范化日志记录等基础应用实现。此外,框架还集成了如关系数据库、内存数据库、远程过程调用等规范化的“数据适配器组件”,让业务的核心逻辑更加轻量和清晰地聚焦在业务层面(Service)。最终,应用服务基于标准化的应用规范之上实现了全方位的流程代理及管控。

KingWorks-SDF(应用服务开发框架)

简法九:服务网络

经济学认为“交换驱动发展”,这是人类从自给自足发展至全球化分工的一个演变“真理”。而互联网的出现更让交换出现了前所未有的低成本、大范围,甚至把数量庞大的“物”也“卷入”了交换的浪潮,把未来的一切想象无限放大。“服务化”应用同样是信息交换驱动发展的一种演变和趋势,一个个具有“独立领域行为”的个体服务在信息交互过程中增加了各种应用行为“涌现”的可能性。

去中心化分布式服务

服务发现中心(KingWorks-RDC)在服务网络中扮演了信息登记服务的角色,有点类似于DNS服务在互联网中的定位,“模糊”了主机的位置,解耦了服务之间的关联。归根到底,RDC是一个基于服务开发框架(KingWorks-SDF)建设的“动态解析”支撑类信息服务。而微网关(KingWorks-MSG)则是一个内置于服务开发框架的服务请求代理组件,除了具备基于RDC动态代理的实现,还兼顾了“静态解析”的预留,为一些“稳定”的服务应用场景省去了动态的消耗。

微网关请求代理细节

服务信息的动态解析是基于“服务信息中心”组件的周期更新,此外,RDC还预留了“服务变更”主动推送通知功能,需要此功能的服务只需要通过“推送开关”配置即可实现RDC的服务变更实时推送通知(非强一致性),提高本地服务对敏感信息更新的实时性。另外,对于一些存在多服务区域(多局域网)的应用场景,我们通过对本地服务信息(IP1&PORT1)和外部服务信息(IP2&PORT2)的区分让“混合云”的服务化应用成为可能。

简法十:自动化管控

凡事都有两面性,好坏优缺得失并存,但是善于“扬长补短”的人类注定不会让社会成为一个“零和游戏”。当我面对服务化多节点所导致的高额人工维护成本时,自动化工具将是这场“正值游戏”的重要手段。

KingWorks-OPS(自动化管控服务)

自动化管控服务(KingWorks-OPS)是整个服务化应用的管控平台。底层主要是由一个C/S模式的脚本任务调度引擎支撑,C是一个内嵌于应用服务的任务执行代理(OPS-Agent By Python),提供了定时和实时的执行入口,而S则是一个任务调用管控服务,集中式对所有服务任务进行管理、配置以及调用。基于引擎之上的,就是面向场景的集成,如服务统一配置与管控、数据集中可视化监控、自动化告警处理以及自动化实施等场景的扩展。

简法十一:服务化协作

人的一生其实可以归纳为只是自己与大脑的一场游戏,行动受控于思想,且行为上变化更多是自身的潜在思维与受控思维的一场较量,就像我们应用从传统到服务化的转变无非就是一场“自我驱动”对“随波续流”发起的挑战。改变了思维,改变了技术,当然,也改变了我们团队的协作方式......

服务化人员组织架构

“DEV-TEAM”主要是由1个组长+2~3个组员组成的服务开发小组,基于开发框架的模式我们把小组主要划分为前端小组(Android、iOS、H5)以及服务端小组(设计、开发、测试、实施、维护),各个服务开发小组灵活地游离于各个项目之间,每个项目必须配备一个项目经理,一个项目经理可以同时管控多个项目,就像一个服务开发小组同时服务于多个项目。各个服务小组都有自己擅长的业务领域,随着团队经验的积累以及自我驱动,服务组件的沉淀就是一件水到渠成的事情。当然,这一切的前提都是基于我们统一的服务化思想,集中力量于同一焦点,把效能最大化。

简法十二:服务化思想

服务化思想其实并不是什么新鲜事,它早已游离在我们的生活之中,因此会让我们产生一种似曾相识的感觉,这也许就是事物的相通性,而这种相通性的本质可能就是源于我们人性深处的某一种共性。

图片来源于网络

转眼间,十二一轮回,将近四年的服务化实践经历堪比十二载,但初衷还在,只是简单已不再是单纯的简单,更多地会是一份发自内心从容的简单。

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

推荐阅读更多精彩内容