分布式软件体系架构

分布式软件体系架构
    马上咨询

    张逸  现为深圳大眼科技有限公司的首席架构师,联合创始人  > 

    先后就职于中兴通讯、惠普GDCC、中软国际、ThoughtWorks等大型中外企业,任职角色为高级软件工程师,架构师,技术总监,首席咨询师。精通包括C#、Java、Ruby、Scala、Python、JavaScript等多种语言,熟练掌握面向对象思想、领域驱动设计、函数式语言、架构、大数据分析、敏捷与过程改进,并致力于大型软件企业的面向服务系统架构设计以及互联网Web系统架构设计。在ThoughtWorks期间,作为一名咨询师,主要为客户提供组织的敏捷转型、过程改进、系统架构监理、领域设计、代码质量提升等咨询工作。目前,作为公司产品的架构师,致力于商业智能产品与大数据分析平台的开发与架构设计。

    课程简介

    随着互联网的发展,大型分布式系统也越来越多、越来越复杂、越来越重要。如何有效地保证大型分布式系统7×24小时全天候持续稳定地运行也就成为了一个重要课题。

    课程大纲

    第一部分:分布式体系架构基础
    1.什么是分布式系统
    分布式系统是一种计算系统,系统中多个组件通过网络通信的方式互联。本部分内容将详细介绍分布式系统的历史演进以及主要的架构特点。
    2.典型分布式系统的演进
    引入分布式系统,其目的是满足高并发与高性能需求。例如引入缓存、代理等手段改进性能,又例如在架构层面上对系统进行物理便捷分割,然后通过引入消息队列或微服务实现系统的分布式设计。
    案例分析:订单业务模块的分布式架构演进
    3.分布式系统的优势与劣势
    Martin Fowler提出,分布式系统的第一原则就是不要分布式。之所以提出这个原则,就是告诫设计者要充分认识到分布式系统刚在带来优势的同时,自身的劣势可能会给系统带来障碍。
    第二部分:基于消息的分布式架构
    1.常见的消息模式
    介绍在企业分布式应用开发中常见的消息模式,如消息通道模式、发布者-订阅者模式、消息路由模式等。
    2.主流的消息队列中间件
    介绍主流的消息队列中间件,包括RabbitMQ、ActiveMQ、ZeroMQ、AKKA与目前最为流行的Kafka。分析它们各自的特性,对比这些中间件,给出合适的运用场景,并介绍技术决策的方法。
    案例分析:医疗卫生知识库系统。通过引入消息队列改善系统架构的质量。
    3.消息队列的设计原理
    深入探讨消息队列中间件的核心原理与设计思想,包括消息队列的架构、队列实现的基本功能与高级特性。
    4.KAFKA分布式消息系统
    介绍目前最为流行的分布式消息系统Kafka,包括Kafka的设计架构、组成元素和应用场景。同事,还将介绍Kafka与大数据流式处理的结合。
    案例分析:某手机场上的实时数据监控告警系统
    第三部分:REST架构风格
    REST描述了Web作为一个分布式超媒体的应用,相互链接的资源通过交换代表资源状态的表述来进行通信。它是WEB系统架构运用最为广泛的架构风格。
    1.理解REST的五个关键字
    要深入理解REST,需要理解REST的五个关键词,包括:资源(Resource)、资源的表述(Representation)、状态转移(State Transfer)、统一接口(Uniform Interface)、超文本驱动(Hypertext Driven)。
    2.REST的主要特征
    REST风格的架构所具有的6个主要特征,包括:面向资源(Resource Oriented)、可寻址(Addressability)、连通性(Connectedness)、无状态(Statelessness)、统一接口(Uniform Interface)、超文本驱动(Hypertext Driven)。
    3.REST的API设计
    采用Restful风格的架构设计,在API设计上,需要遵循REST的设计原则,它与传统的Web Service APIs设计以及组件的APIs设计并不相同,而是面向资源的角度考虑API的定义与设计。
    案例分析:某BI产品的REST API设计
    第四部分:微服务架构风格
    1.面向服务的软件架构
    面向服务体系架构(SOA)的风格在过去10年中已经成为设计大型分布式系统的主流模式。SOA背后的核心思想是设计一个作为交互服务网络的系统。服务通过定义良好的接口提供清晰具体的功能。
    案例分析:瑞士信贷的SOA架构
    2.微服务架构的核心概念与特征
    微服务设计是一个考量各方因素下的一个决策的过程,它提倡建立细粒度的独立服务,且服务支持物理上的单独部署,以便于更好地重用服务、满足服务水平伸缩与独立运维的需求。
    案例分析:某BI产品的微服务架构
    3.如何分解服务
    在设计层面,该如何界定微服务的边界,并确定服务与服务之间的通信方式。这牵涉到许多架构设计因素,包括可重用行,可扩展性,数据一致性以及部署等诸多方面。本部分将通过对Data Schema、DDD中的BoundedContext、、六边形架构模型等内容综合分析微服务的分解与设计。
    4.CQRS与Event Sourcing
    CQRS不仅限于微服务架构,但在微服务架构中,会被频繁地与Event Sourcing结合,并以事件驱动架构(EDA)思想来解决一些高并发和数据一致性问题。
    5.微服务架构的数据一致性
    分析传统的本地事务与分布式事务如何保证数据的一致性,然后讲解在微服务架构中,如何结合CAP原则实现数据一致性。
    6.从单体架构到微服务架构
    多数情况下,微服务架构都不是一蹴而就的,即使是一个新项目,保守起见,也建议从一开始设计为单体架构,只要在合适的情况下,才需要将架构演进到微服务架构。本部分将会介绍在这个演进过程中我们需要关注的问题,以及具体的实施路径。
    7.微服务的监控与告警
    在微服务架构中,每个服务都是一个可以独立运行的业务单元,同时每个服务都运行在独立的节点上。因此,我们需要为每个服务建立独立的监控以及告警机制,以监控服务的健康状况,并保证在异常发生时,随时恢复。本部分将介绍如何利用Nagios对微服务进行监控,以及Nagios的工作原理。
    案例分析:某金融系统的微服务演进
    第五部分 MMN:面向企业的架构设计过程
    MMN架构设计过程是指对系统架构从宏观、微观与纳米层面的整体设计过程。这是一个迭代和演进的设计过程,通过自顶向下结合自下而上的方式,对整个软件系统进行分析与设计,保证整个软件系统满足功能需求与质量属性。在整个架构设计过程中,会运用UML、OOAD、UDD和DDD等方法论,遵循MMN(宏观-微观-纳米)的层次对整个系统进行架构梳理和设计。
    1.宏观视图的架构因素与设计过程
    • 定义架构概图
      包括调查架构资源,明确架构的目标,根据架构目标作出重要的设计决策,并分析主要的用例场景,以建立一个粗略的架构概图。
      案例分析:企业应用套件的架构概图
    • 架构全局分析
      识别架构风险,并确定风险优先级。然后根据识别出来的风险编写架构因素表,制定具体的架构策略。同时确定整个系统的关键场景。
      案例分析:远程访问的架构策略
    • 构建概念模型
      确定技术框架与技术选型,识别并分析软件产品的设计约束,从而确定架构风格,并根据具体场景运用架构模式。最后,建立系统的逻辑视图和物理视图。
      案例分析:CIMS架构概念模型
    2.微观视图的架构因素与设计过程
    • 细化逻辑视图
      进行领域分析,确定系统的应用逻辑架构与业务逻辑架构,并设计整个系统的模块视图。
      案例分析:燃气集团解决方案
    • 纳米视图的架构因素与设计过程
      构建设计模型:讲解职责驱动设计,通过角色、职责与协作完成对象的职责分配,并通过识别变化点,利用抽象对变化进行封装,以及合理运用设计模式。
    • 代码视图:包括确定部署组件、配置管理、持续集成等与代码级别有关的内容。
      案例分析:数据分析器;商业智能SaaS平台引擎设计;商业智能SaaS平台的代码视图
    第六部分:架构关注点专题讨论
    专题一:高性能系统的设计
    高性能是软件系统设计无法绕过的话题,无论是企业架构还是互联网架构,设计时都需要考虑如何满足高性能的要求,尤其是在数据量越来越大,并发访问越来越多的前提下,高性能会成为架构师必须要解决的问题。
    本专题讨论会给出高性能设计的常见问题、解决方案与最佳实践。
    案例分析:Twitter的高性能分布式日志,满足了系统的可靠性、高吞吐量、低延迟、可扩展性等质量属性。
    专题二:分布式事务
    当今的大型软件系统都是分布式系统,随着硬件成本的逐渐降低,网络宽带的逐步增加,我们已经告别单机时代。分布式系统可以更大限度地利用硬件的水平扩展,也能够保证异构、异步系统的集成,但是带来的问题也很显著,除了运维方面的挑战外,如何保证业务服务的事务,成了棘手的问题。
    本专题会介绍分布式事务ACID约束的问题,并讲解BASE原则以及CAD原理。
    案例分析:通过对支付宝扣款到余额宝的案例分析分布式事务的解决方案。
    专题三:大数据处理
    大数据处理成为这几年最热门的话题,也是大多数软件企业需要解决的问题:即如何在海量数据中寻找到业务价值。本专题会从技术角度剖析大数据技术生态圈,并主要介绍Hadoop、Spark等大数据主流技术与平台框架。
    案例分析:Airbnb数据基础设施的主要架构