华为十年架构师实战经验总结:大规模分布式系统架构与设计实战
前言
本篇是从程序员到首席架构师十多年职业生涯的实战经验总结,系统讲解构建大规模分布式系统的核心技术与实现方法,包含开源的Fourinone系统的设计与实现过程,手把手教你掌握分布式技术。
通过学习这个系统的实现方法与相关的理论,读者可快速掌握分布式系统的理论并设计自己的分布式系统。
本篇从分布式计算的基本概念开始,解剖了众多流行概念的本质,深入讲解分布式系统的基本原理与实现方式,包括masterslave结构、消息中枢模式、网状直接交互模式、并行结合串行模式等,以及Fourinone系统的架构、实现分布式功能的示例。接下来详细介绍分布式协调、分布式缓存、消息队列,分布式文件系统、分布式作业调度平台的设计与实现方法,不仅包括详细的架构原理、算法,还给出了实现步骤、核心API、实现代码。
相关知识资料看我主页简介
或者加微信:yxqbkd
在大数据、云计算如火如荼的今天,各类技术产品顺应潮流层出不穷。大家是不是有这种感觉: Hadoop还没学完,Storm 就来了; Storm刚学会安装配置, Spark、 Hama、Yarn 等又一起出现了;同时国内外各大云平台厂商,如Google、亚马逊、阿里云等,还在推各自应用开发平....要学习的东西太多了,就是这样疲于奔命地学,刚学会了某个产品的安装配置与开发步骤,没多久它又过时了。
这么多千姿百态的分布式技术和产品背后有没有某些共性的东西呢?能让我们]换了马甲还能认出它,让我们超越学习每个产品的“安装配置开发”而掌握背后的精髓呢?有没有可能学一反三,学一招应万招,牢牢掌握好技术的船舵,穿越一次次颠覆性的技术浪潮?
本篇的目的就是为你揭示分布式技术的核心内幕,透彻理解其精髓,站在浪潮之巅。
因此,这不是讲如何使用Hadoop,而是讲如何实现Hadoop的功能,讲如何简化实现分布式技术核心功能。这是来源于作者十多年来在私企、港企、外包、创业、淘宝、华为等企业打拼,从底层程序员一路走到首席架构师的实战经验总结。。
本篇面向千千万万战斗在一线攻城拔寨的程序员、工程师们,你可以有很多基础,也可以从头开始,本篇尽量做到深人浅出和通俗易懂,希望帮助你降低分布式技术的学习成本,帮助你更容易完成工作任务,更轻松地挣钱。
本篇一共分为七个大章节,大家从头开始阅读就可以了。
第1章,概述
在概述分布式核心技术之前,我们有必要先概括阐述一-下分布式计算、并行计算、云计算等相关概念,以及市场上流行的相关技术产品,如Hadoop生态体系,然后再结合背景引出我们为什么要归纳出一个轻量级的分布式框架。本章为后续章节的背景。本章意在使读者对分布式技术话题的前因后果先有所了解。
由于只是概述,我们对涉及的分布式计算概念和Hadoop生态体系只是蜻蜓点水地带过,目的仅是让读者了解到这些内容大致是什么。
第2章,分布式并行计算的原理与实践
本章首先讲述分布式并行计算的各种设计模式和原理机制,并进一步说明Fourinone与市场上其他并行计算产品和技术的区别,最后手把手演示大量并行计算案例。
本章讲述的分布式并行计算思想、模式、技巧、实现,与编程语言无关,读者可以用多台计算机来尝试编程。
第3章,分布式协调的实现
分布式协调是分布式应用中不可缺少的,通常会设立专门的协调者角色,即将多机协调的职责从分布式应用中独立出来,以减少系统的耦合性和增强可扩展性。Apache的ZooKeeper、Google的Chubby都是分布式协调的实现者。Fourinone实际上可以单独当做ZooKeeper用,它使用最少的代码实现了ZooKeeper 的所有功能,并且力图做到功能更强、使用更简洁。
本章会从设计角度讲述分布式协调系统的实现原理,包括归纳出的API介绍,权限机制介绍,并详细阐述了在领导者选举机制上和Paxos算法的区别,最后再结合实践中的统一配置和集群管理等应用讲解demo,让读者有更直观的体会。
第4章,分布式缓存的实现
本章讲述小型缓存、大型分布式缓存的原理和实现机制,并且讲述经典的一致哈希算法原理,以及改进的基于日期key取模和分组算法去做集群负载均衡和扩容,最后讲述一个分布式Session的实现案例,以及相关的配置属性。
第5章,消息队列的实现
本章讲述了中间件和消息队列(MQ)的发展史JMS规范定义的发送/接收、主题订阅两种经典消息服务模式的机制原理,并详细举例说明如何在Fourinone中实现这两种经典模式。
第6章,分布式文件系统的实现
本章讲述如何使用FTTP去实现一个分布式文件系统,包括FTTP的架构原理和远程文件各种方式的访问和操作,以及整型数据处理等,包含了每一一步的具体操作,可帮助入门的读者快速上手。
在FTTP中通过FttpAdapter和FileAdapter实现文件I0的支持。其中,FttpAdapter 提供对远程文件的操作,FileAdapter 提供对本地文件的操作,两者的API和使用相似,这里主要说明FttpAdapter。
第7章,分布式作业调度平台的实现
在前面第2章介绍的分布式并行计算原理中,我们看到可以将工头工人程序部署到不同的机器_上运行,然后完成计算。但是,.当这样的并行计算应用非常多,而我们的机器数量有限时,我们需要排队依次来使用机器,第一个并行计算应用跑完了,再跑第二个应用,如果第一个并行计算应用只占部分机器,那么可以考虑同时跑第二个应用....这就涉及建立-个作业调度平台去完成。
我们知道Hadoop本身包含了作业调度的部分,按照Hadoop开发规范,开发好一个作业,打包后,Hadoop 会分发到相应的机器上去运行,但是实际上这仅仅是-种任务调度层面的实现,我们还需要资源层面的调度,比如对CPU、内存、带宽等的分配和管理。
本章会讲述调度平台的设计和实现,包括任务调度和资源调度的实现机制,各种资源调度算法,并以MPI调度器的为例讲述一个完整Demo,最后再讲述市场上常用的调度实现和框架,比如Torque、Mesos、Yarn 等。
现在的架构很多,各种各样的,如高并发架构、异地多活架构、容器化架构、微服务架构、高可用架构、弹性化架构等,还有和这些架构相关的管理型的技术方法,如 DevOps、应用监控、自动化运维、SOA 服务治理、去 IOE 等等,还有很多。
那什么是分布式系统?分布式系统是支持分布式处理的软件系统,是由通信网络互联的多处理机体系结构上执行任务的系统。包括分布式操作系统、分布式程序设计语言及其编译系统、分布式文件系统分布式数据库系统等,当然这些也是分布式的关键技术。
使用分布式系统主要有:
1.增大系统容量。我们的业务量越来越大,而要能应对越来越大的业务量,一台机器的性能已经无法满足了,我们需要多台机器才能应对大规模的应用场景。所以,我们需要垂直或是水平拆分业务系统,让其变成一个分布式的架构。
2.加强系统可用。我们的业务越来越关键,需要提高整个系统架构的可用性,这就意味着架构中不能存在单点故障。这样,整个系统不会因为一台机器出故障而导致整体不可用。所以,需要通过分布式架构来冗余系统以消除单点故障,从而提高系统的可用性。
3.因为模块化,所以系统模块重用度更高
4.因为软件服务模块被拆分,开发和发布速度可以并行而变得更快
5.系统扩展性更高
6.团队协作流程也会得到改善
分布式系统的类型有三种:
1.分布式处理,但只有一个总数据库,没有局部数据库
2.分层式处理,每一层都有自己的数据库
3.充分分散的分布式网络,没有中央控制部分,各节点之间的联系方式又可以有多种,如松散的联接,紧密的联接,动态的联接,广播通知式的联接等
然后来对比一下单体应用和分布式架构的优缺点:
1.从上面的表格可以看到,分布式系统虽然有一些优势,但也存在一些问题
2.架构设计变得复杂(尤其是其中的分布式事务)
3.部署单个服务会比较快,但是如果一次部署需要多个服务,部署会变得复杂
4.系统的吞吐量会变大,但是响应时间会变长
5.运维复杂度会因为服务变多而变得很复杂
6.架构复杂导致学习曲线变大
7.测试和查错的复杂度增大
8.技术可以很多样,这会带来维护和运维的复杂度
9.管理分布式系统中的服务和调度变得困难和复杂
所以总结一下,分布式系统架构的难点在于系统设计,以及管理和运维。所以分布式系统架构在解决了一些问题的同时,也增加了其他的问题,这就需要不断的再用各种各样的技术跟手段去解决这些新增的问题。后续会跟上分布式系统架构的搭建以及使用。
Hadoop伪分布式集群搭建使用
Hadoop HA 高可用关键搭建
相关知识资料看我主页简介
或者加微信:yxqbkd
共有 0 条评论