`
baishancloud
  • 浏览: 7048 次
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

白山“乐高式松耦合”架构实战

阅读更多

作者:王康

   

    白山联合创始人兼产品副总裁

    王康先生主要负责产品的完善与升级、产品开发流程把控及进度协调、产品设计改进及定期优化、产品全生命周期管理等工作。他带领团队实现白山首款产品CDN-X的多项创新,降低CDN使用门槛,极大拓展了CDN客户资源,提升了白山品牌价值,促进整体CDN市场的扩大与发展。

    王康先生曾就职于网宿科技,任该公司产品及售前高级总监,负责技术团队的运营工作;拥有10年CDN行业经验,专注于提高产品输出的高质量和高可靠性。

    王康先生拥有三项发明专利。

 

现在很多公司都在做松耦合,因为随着业务发展、需求增加,紧耦合系统的问题会慢慢凸显,并日益加剧。

以云分发行业为例,其属性在逐渐发生变化。过去,极少人产生内容,绝大多数人消费内容,云分发主要以下行流量为主,而随着全民直播的兴起,云分发变成了云交互;物联网的发展使物与物的数据交流成为主要方式,例如智能家居每天会产生上千条数据,但其中只有几条会被消费;VR爆发,用户产生的数据逐渐会从图片、视频转变为VR内容;基于此我们可以预料到上行流量将逐步增加,并逐渐超过下行流量,成为基础网络架构的巨大挑战。

用户需求与网络基础环境的快速变化,使得我们需要越来越快的实现需求,然而紧耦合系统却为研发带来诸多困难,使功能实现越来越耗费精力与时间,所以在白山创立之初就决定做“乐高式松耦合”架构,来构建整个产品体系,像搭积木一般灵活自如。

 

一、 传统难点

(1)需求堆积,收敛周期长

很多创业公司在成立之初采用野蛮生长的模式,原则是越快越好。紧耦合架构可以很好的满足这些要求,他们可以快速的建立CMDB与资源管理平台,并配置自动化、portal、监控等功能。但随着功能增多与需求开发的增加,这个系统逐渐变为一盘散沙。当有新需求发生时,他们需要为其做很多硬编码动作,收敛周期越来越长。

(2)“老中医”资源的浪费

在紧耦合系统中,看似一个没有什么关系的小改动,极有可能会引起一个重大bug;为防止错误发生,只能将系统设计的越来越复杂。例如为防止客户端挂掉,研发通常会为其添加一个守护进程;当守护进程不稳定时,新入职的研发常用的解决方案是再添加一个守护进程,这就导致了系统越来越臃肿。

这时候,公司往往就需要经验丰富、了解系统整体情况的“老中医”才能对平台进行改造。而作为核心资产的“老中医”在忙于救火、进行技术攻坚,很难抽出时间来进行系统重构。

 

二、 乐高式松耦合架构落地

快速实现需求与需求实现越来越慢的矛盾如何解决?最终白山的产品架构聚焦在解耦上,方便平台快速迭代,减少系统间依赖程度,打通无关联项目,为运营互动提供高效支持,确保服务质量。

(1)第一层松耦合架构

以白山云分发CDN-X系统为例,其根本核心是运营。为使运营支撑系统通过解耦让公司的研发、运营灵活运转,需要进行第一层抽象。将运营支撑系统抽象为5个组件,包括:客户管理类、账单信息类、资源管理、运营监控和配置管理。并对这5个组件进行画像,确定边界、输入输出,按照运营场景描述用户场景。

几个组件之间通过消息总线交互指令,通过标准的rest接口交互数据;同时将5个组件投入到实际开发中,按照不同类型做实例化。



 

(第一层松耦合架构)

(2)第二层松耦合架构

做完第一层解耦之后,我们发现第二层还可以继续做抽象。以配置管理系统为例,又可抽象出4部分。

生成配置:主要负责配置的生成以及配置到git仓库;

分发控制:管理灰度发布过程;

执行分发:分发收到的指令,并通过一些工具(如:salt、ansible、http get)汇报给上面的组件;

执行测试:调用已经写好的测试用例仓库测试这一次配置分发过程的最后效果。



 

(第二层松耦合架构)

运营支撑系统中的各个组件都可以一直抽象下去,抽象概念贯穿整个设计平台的始末。

核心组件设计时再经过进一步抽象成工厂模式或单例模式,形成针对不同特性服务及场景,只需编写极小的落地代码即可获得整个运营支撑服务的可插拔架构。

 

(3)建设原则

组件即服务

研发中人人都是架构师,收到研发需求后不是研究输入输出与边界,而是了解业务。根据情况输出需求文档,并与业务方进行确认,按照需求设计架构。每一个组件,不再是功能,而是服务,有自己的服务对象;研发人员从最初的对代码质量、输入输出负责,发展为对服务质量负责。

事件组件化

在最初设计过程中,我们发现,很多运营中的动作称不上是平台上的动作,而是由事件组成。如果这些事件通过自动化来完成,就需要投入大量的精力。

以节点上架自动化为例:包括自动化扫描端口、监控、安装、配置下发管理,甚至可以将自动化加入当前系统平台为用户提供服务。组件自动后,如果包装成事件,将浪费不必要的人力成本。

如果将事件组件化,运维管理人员则可以在平台上方便的拖拽、引用、规范组件,通过拖拽、配置工作实现整体自动化。

数据聚合管理系统

数据往往是运营中的判断标志,通过数据与数据间的关系来组建成组件。由于数据源之间的API不同,会导致花费过长的时间来对接API。我们将机房质量、监控负载、慢速比、卡顿率等数据进行整理,部分进行二次转化,通过统一的接口调用,做成一个数据聚合管理系统。

 

实例分享-节点自动上线



 

(运维完成过程)

 

这个过程中运维人员完成了很多组件,如:配置管理、内部测试以及外部测试、入覆盖地区等;随后引入多种数据源进行追踪。事件模版完成后只需运维人员选择需上架的节点及其覆盖方案与地区,其余过程均有系统自动化完成。

此模版还可以根据需要不断修改,例如:丢包率组件等可以随时加入,不会影响业务的进行。

很多公司也在做同样的事件管理系统,不同的是其管理的是动作;而我们发现往往动作完成后还需要进行人工跟踪。鉴于此我们将事件做成一个完整的生命周期,同时引入数据源来跟踪异常服务状态码。

这个事件的完成过程中运维人员所需的操作已经从写脚本、人肉分析,简化为在模版上拖拽、引用组件,根据经验设置阀值,甚至使用其他的事件模版来完成事件。

   

三、 松耦合需要坚持的细节

(1)保持简单

随着时间的推移与功能的不断增加,系统必然会出现复杂性,而这种复杂性很多是由我们自身操作导致的,如上文提到的“守护进程”的例子,当使用复杂方案解决问题时往往会导致系统的臃肿。如果保证系统具备容错能力,组件运营不正常时系统可以自动修复,这个问题就会简化。

以消息管理机制为例,强消息管理机制要求确认消息确实可以被每台设备收到并执行。我们对此进行了改善,使消息病毒式传播,每台设备可以向周围5-6台设备发出消息,即便中间有一次失败,还会有其他设备再次向这台设备传输。这样的容错能力保证了系统可以简单地自动实现强研发、强跟踪等功能。

(2)在平台的基础上构建应用程序

例如在大数据平台上构建应用,研发人员在开发组件时无需考虑数据库的设计以及瓶颈优化问题,只需要对接数据聚合平台,大幅提高研发效率。

(3)不断迭代

以Facebook为例,目前每秒可以处理12亿张图片;而其第一版系统只能允许用户上传图片,并将其保存在数据库中,该系统只存续3个月;随着活跃用户的增加, 其后端压力不断增加,于是将存储改为二进制存储方式;Facebook的每一次迭代都不是为了某一特定目标,而是为了解决业务上的痛苦。

所以最开始做开发时,我们只需要考虑需求与业务,设计足够简单的方案,再进行不断迭代以满足新增需求。

   

四、 带来的变化

(1)快捷引入新特性

我们使用P2P消息管理机制结合收敛算法,将文件删除由5分钟改进至0.7秒,我们对系统没有进行大范围改变,只是替换了其中的消息机制,利用当前基础的通讯机制和基础数据,过去所做的优化与UI仍可以继续使用。引用这些新特性时保持轻量级,对其他组件几乎没有影响。

(2)开发效率高

例如游戏交互过程中的数字包交互,业内公认很难做到。目前我们正在进行尝试,我们引入开源的TCP代理软件,并规划新的应用服务类型,软件按指定好的打包方式放在指定位置,就可以实现软件的自动发布,同时调用其他组件接口对新业务进行监控,编写配置生成逻辑实现业务配置自动化。只需要编写非常轻量级的落地代码,整个组件落地之后就可以服务运营。

(3)运维自动化提高

在问题定位时,如果人工跟踪一般是“是与否选择”的串行计算,而在事件管理系统中,则进行并行计算,即:调用监控系统,判断节点是否正常;调用第三方数据进行及时测试,判断节点当前服务是否正常;调用客户App数据验证服务质量;使用ELK系统分析日志,精准、快速的定位问题,分析时间由10分钟大幅度缩减为3分钟。

  • 大小: 114.8 KB
  • 大小: 142.9 KB
  • 大小: 100.9 KB
分享到:
评论

相关推荐

    INS/GNSS松耦合matlab仿真

    【标题】"INS/GNSS松耦合matlab仿真的实现与理解" 在现代导航系统中,集成导航系统(Integrated Navigation System, INS)和全球导航卫星系统(Global Navigation Satellite System, GNSS)的松耦合结合是一种广泛...

    架构实战——软件架构设计的过程

    - **松耦合**:减少不同模块之间的依赖程度,使得每个模块都能够独立地进行修改和升级。 - **高内聚**:确保每个模块内部的功能紧密相关,这样可以提高代码的复用性和易于理解。 - **灵活性**:设计时要考虑未来可能...

    松耦合无界零售系统搭建之DDD和微服务实战.pdf

    《松耦合无界零售系统搭建之DDD和微服务实战》是一份深入探讨如何在零售行业中构建松耦合、可扩展系统的专业文档,由京东7FRESH的架构师阎华撰写。阎华在软件设计和开发领域有着超过15年的经验,尤其专注于复杂业务...

    架构实战(软件架构设计的过程).rar

    模块化设计和松耦合原则可以提高系统的可演化性。 9. **团队协作**:架构设计需要考虑团队的工作流程和沟通方式,确保开发人员能够有效地理解和实现架构设计。 10. **文档编写**:清晰、详尽的架构文档是沟通和...

    强内聚松耦合与测试的关系

    ### 强内聚松耦合的概念与重要性 在软件工程和系统设计领域,强...因此,在软件开发的初期阶段,就应该充分考虑如何设计出既满足业务需求又遵循强内聚松耦合原则的架构,为后续的开发、测试和维护工作奠定坚实的基础。

    INS&GNNS MATLAB_INS紧组合_松耦合_紧耦合算法_导航_紧组合

    本文将详细探讨在MATLAB环境中实现的INS与GNSS的紧组合(Tightly Coupled)和松耦合(Loosely Coupled)算法,以及它们在导航系统中的应用。 一、惯性导航系统(INS) 惯性导航系统基于牛顿第二定律,通过测量物体...

    com+松耦合实例

    松耦合是软件设计中的一个重要原则,它意味着各个组件之间的依赖关系尽可能小,使得每个组件可以独立地进行开发、测试和维护。在COM+中,通过接口和事件驱动机制,我们可以轻松地实现松耦合。 首先,COM+中的接口是...

    ANSYS 14.5热流固耦合实战指南

    这是朱红钧编著的《ANSYS 14.5热流固耦合实战指南》,书是全本的,无缺页。扫描质量良好

    com+松耦合事件教程

    #### 一、松耦合事件原理 在软件开发领域,特别是分布式应用中,事件处理机制是实现组件间通信的重要手段之一。COM+(Component Object Model Plus)作为Microsoft推出的一种面向组件的技术,提供了丰富的功能以...

    松耦合无界零售系统搭建和微服务实战.pptx

    本文将深入探讨松耦合无界零售系统搭建和微服务实战的核心概念、架构设计以及关键技术实现,以期为相关领域的实践者提供参考。 领域驱动设计(DDD)是一种专注于业务领域深度理解的设计方法论,它将复杂系统的开发...

    结合几种著名框架使应用达到松耦合

    在构建企业级应用程序时,松耦合是一种关键的设计原则,它可以提高系统的可维护性、可扩展性和可重用性。本文将探讨如何结合几种著名的Java框架——Struts、Spring和Hibernate,来实现应用的松耦合。 Struts作为...

    非接触式松耦合感应电能传输系统原理分析与设计.pdf

    非接触式松耦合感应电能传输系统(LCIPT)是一种在电能传输领域中得到广泛应用的新技术。该系统的主要优点是避免了传统接触式电能传输的固有缺陷,例如在矿井、石油钻采等危险场合,接触式电能传输可能会因接触摩擦...

    设计松耦合的FLEX组件

    FLEX 组件设计 教程,组件松耦合设计。

    ANSYS 14.5 workbench fluent热流固多场耦合实战指南07

    ANSYS 14.5 workbench fluent热流固多场耦合实战指南07

    ANSYS 14.5 workbench fluent热流固多场耦合实战指南01

    ANSYS 14.5 workbench fluent热流固多场耦合实战指南02

    零耦合的乐高积木式系统实战(26页).pdf

    【零耦合的乐高积木式系统实战】是一份深度探讨现代IT架构解决方案的文档,旨在解决传统系统中常见的复杂性和耦合性问题。该系统借鉴了乐高积木的构建理念,强调通过标准化、模块化的方式实现系统的灵活性和可扩展性...

    一种松耦合的生物医学命名实体识别算法

    综上所述,LCA算法作为一种松耦合的Bio-NER解决方案,通过综合运用启发式规则过滤器、词性模板匹配以及改良的隐马尔科夫模型等技术手段,成功地提高了生物医学命名实体识别的准确性和召回率。未来的研究可以进一步...

    未来工业互联网松耦合结构理论、分析、评估及实现平台.pdf

    文章《未来工业互联网松耦合结构理论、分析、评估及实现平台》着眼于解决工业互联网系统的复杂性难题,提出了一种新的松耦合系统结构,并通过理论分析、评估及实际平台的实现,对这一结构进行了深入探讨。...

    ANSYS 14.5 workbench fluent热流固多场耦合实战指南11

    ANSYS 14.5 workbench fluent热流固多场耦合实战指南11

Global site tag (gtag.js) - Google Analytics