张逸 现为深圳大眼科技有限公司的首席架构师,联合创始人 >
先后就职于中兴通讯、惠普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数据基础设施的主要架构 |