原则上:
虽然做了服务划分和业务分治,但是全局只有一个中心,对外抽象成整体,子服务围绕中心构造。

红石系统贯彻落实集权架构,
主旨是维持大型系统稳定、可观测、高可用、主体性和一致性。

第一方法论是编排,服务最小职责化,由中央统筹规划。
第二方法论是替换,里氏替换,原子单元插件化、弹性化,可任意变动且不会破坏系统完整性。
第三方法论是矢量,系统级全面抽象,系统结构可支持弹性变动,在确保主体一致性的前提下,任意架构变动不会破坏系统一致性和高可用。(说人话就是确保最终一致性,目的主义地)

要义是使中央对子服务绝对可控且完全信息,且保证系统主体性。

根本方法是抽象,系统确保主体全面抽象,面向开发者、用户都是一个总服务,总体开发与单元开发一致,彻底简化开发架构。(说人话就是服务总线化、容器化、傻瓜化,复杂设计由框架内核完成,对观测者不可视)
// 解释:说人话就是一个复杂信息系统,底层由若干子服务构成,对于开发者而言无论这个系统多大,都像开发普通萌萌哒的项目一样,低代码化。就拿后端系统而言,一个巨型数据分析平台,由至少100个子服务构成,但是我们让这些子服务都像一个个容器一样,哪里需要new哪里,开发者仍然感官上和开发个学生管理系统一样的感觉。

实践中:
红石围绕服务总线,本质上是围绕ESB架构的功能推广。

后端级联系统阶级体系:
主系统.子系统(子服务).子系统1.子系统1_1…子系统1_**N.TinyServiceN.Service层

对于一个临界原子子服务(最小系统级服务单元,如一个Web子服务,下面无基于网络层的服务划分),内部可由多个迷你服务组成,这些迷你服务即红石块(通俗也称系统模块)。

简单来说,红石框架就是中级系统级,全局模块编排控制系统。使得系统中所有模块(无论你在哪),可被中央绝对控制和编排。
红石块保证性能优先,系统非必要不管制,即备案制,子系统自治,但中央系统保留绝对控制权。(应用场景: 如果子系统某模块奔溃,不用热替换整个子系统,而是快速干预和替换一个内部模块,且中央能够立即知道前线战况,即最小变动能力)

红石面向低代码设计,本质是一种基于策略模式、解释器模式的全局推广。

红石模块接口,其中子系统中任何一个类继承该接口,即升格为一个红色块,拥有红石块的全部特性。

  1. 编制化:编入中央系统,可以直接共享中央系统的资源和信息,远端就走RPC等机制
  2. 配置化:红石块在中央系统获得一块自己的配置和控制信息中心,可以在授权条件下访问其他服务配置,自己的配置也可以被其他服务访问
  3. 句柄化:每一个模块都有自己的句柄对象(操作系统内核化),对于外部控制单元,可以在授权情况下绝对操纵、访问该模块。
  4. 主体化:基于模板模式,每一个编入系统的模块,可以通过this域,直接使用现成操作和访问全局注册的Service 而不用重复实现,一方有需八方支援,一家人就要整整齐齐。

FQA:

  1. 为毛这样设计?
    Hydra 是一个基于高度中央集权方法论的设计,虽然支持联邦、链式等多种子架构,但是是在中央制导下的核心设计,全局拥有绝对的主体中央目标,其他子架构应该为中央目标服务。
    同时为了适应新时代的弹性、微服务等架构和任务需要,系统进一步模块化解耦,在保证主体一致性的基础下,最大化支持弹性拆分。
    而红石中级架构是对全局系统的进一步控制权衍生,确保全局对象(最大支持所有粒度的模块、类和结构体)的统一编制化,这样的好处是最大可能保证系统稳定、易用性、防重复建设性、一致性以及全局统一,由中央统筹规划从而集中力量办大事同时确保模块的弹性化。
    这种思想与其他操作系统的设计相似,本质是尽可能内核做事。
  2. 怎么实现?
    架构学上,这种思想主要基于模板模式、策略模式、解释器模式以及责任链模式等。核心参考PHP的典型实现,如PHP下可以直接访问全局魔法变量如$_POST、$_GET、$_CONFIG等。
    红石JAVA主要包括红石内核、红石Summer。
    红石内核:Hydra句柄模块、模块树、核心模板等。
    红石Summer:Spring 的二次封装,支持类PHP模式,对Controller和Service 层用AOP二次处理,使得子类可以直接使用$_POST、$_GET、$_CONFIG、$_SYSTEM等系统级和亚系统级全局函数和变量。
  3. 性能保障?
    看上去内核预判了用户各种可能的实现,导致不必要的大量浪费运算。实践中,红石基于懒汉式加载模型、分治化无锁设计,尽可能确保所有方法非必要不加载。
    实践中:如$_GET,用户必须显式调用时才能触发QueryString的二次处理,且每次Session一次对象,确保懒汉加载和线程安全。
Author:undefined  Create time:2024-12-05 12:32
Last editor:undefined  Update time:2024-12-06 14:41