分布式系统 - 学习/实践_william_n的博客-CSDN博客

1.学习/操作

1. 应用场景

首先,我们需要阐述一下为什么需要分布式系统,而不是传统的单体架构。使用分布式系统主要有两方面原因

增大系统容量。我们的业务量越来越大,而要能应对越来越大的业务量,一台机器的性能已经无法满足了,我们需要多台机器才能应对大规模的应用场景。所以,我们需要垂直或是水平拆分业务系统,让其变成一个分布式的架构。

加强系统可用。我们的业务越来越关键,需要提高整个系统架构的可用性,这就意味着架构中不能存在单点故障。这样,整个系统不会因为一台机器出故障而导致整体不可用。所以,需要通过分布式架构来冗余系统以消除单点故障,从而提高系统的可用性

当然,分布式系统还有一些优势,比如:

因为模块化,所以系统模块重用度更高;

因为软件服务模块被拆分,开发和发布速度可以并行而变得更快;

系统扩展性更高;团队协作流程也会得到改善;

……

不过,这个世界上不存在完美的技术方案,采用任何技术方案都是“按下葫芦浮起瓢”,都是有得有失,都是一种 trade-off。也就是说,分布式系统在解决上述问题的同时,也给我们带来了其他的问题。因此,我们需要清楚地知道分布式系统所带来的问题。

2. 单体应用和分布式架构的优缺点

从上面的表格我们可以看到,分布式系统虽然有一些优势,但也存在一些问题。

-- 架构设计变得复杂(尤其是其中的分布式事务)。

-- 部署单个服务会比较快,但是如果一次部署需要多个服务,流程会变得复杂。

-- 系统的吞吐量会变大,但是响应时间会变长。运维复杂度会因为服务变多而变得很复杂。

-- 架构复杂导致学习曲线变大。

-- 测试和查错的复杂度增大。

-- 技术多元化,这会带来维护和运维的复杂度。

-- 管理分布式系统中的服务和调度变得困难和复杂。

也就是说, 分布式系统架构的难点在于系统设计,以及管理和运维。所以,分布式架构解决了“单点”和“性能容量”的问题,但却新增了一堆问题。而对于这些新增的问题,还会衍生出更多的子问题,这就需要我们不断地用各式各样的技术和手段来解决这些问题。这就出现了我前面所说的那些架构方式,以及各种相关的管理型的技术方法。这个世界就是这样变得复杂起来的。

这些架构方式和管理型的技术方法有:

各式各样的架构,如高并发架构、异地多活架构、容器化架构、微服务架构、高可用架构、弹性化架构等。还有和这些架构相关的管理型的技术方法,如 DevOps、应用监控、自动化运维、SOA 服务治理、去 IOE 等。

但是, 其实,只要我们能够找到分布式这张网的“纲”,我们就能比较方便和自如地打开整张网了.

3. 分布式系统的发展

从 20 世纪 70 年代的模块化编程,80 年代的面向事件设计,90 年代的基于接口 / 构件设计,这个世界很自然地演化出了 SOA——基于服务的架构。

SOA 架构是构造分布式计算应用程序的方法。它将应用程序功能作为服务发送给最终用户或者其他服务。它采用开放标准与软件资源进行交互,并采用标准的表示方式。

开发、维护和使用 SOA 要遵循以下几条基本原则。

-- 可重用,粒度合适,模块化,可组合,构件化以及有互操作性。

-- 符合开放标准(通用的或行业的)。

-- 服务的识别和分类,提供和发布,监控和跟踪。

打卡01

21 | 分布式系统架构的冰与火

1. 为什么需要分布式系统, 而不是传统的单体架构?

主要两个原因:

增大系统容量;

加强系统可用。

还有其他的优势好处.

模块化, 系统模块重用度更高;

软件服务模块被拆分,开发和发布速度可以并行而变得更快;

系统扩展性更高;

团队协作流程也会得到改善;

2. 分布式系统的发展历程

单体架构[软件模块高度耦合]-->SOA 架构[比较松耦合]--> 微服务架构[架构更为松耦合] [是以后的选择]

3. 编排和组织引擎方式?

通过工作流引擎,也可以是网关. 当然,还需要辅助于像容器化调度这样的技术方式,如 Kubernetes.

22 | 从亚马逊的实践,谈分布式系统的难点

1. 从目前已经公开的资料来看,分布式服务化架构思想实践最早的公司应该是亚马逊。

2. 亚马逊如何做分布式服务架构的,遇到了哪些问题,以及是如何解决的?

亚马逊 CEO 杰夫·贝索斯(Jeff Bezos)就向全公司颁布了下面的这几条架构规定.

-- 所有团队的程序模块都要通过 Service Interface 方式将其数据与功能开放出来。

-- 团队间程序模块的信息通信,都要通过这些接口。除此之外没有其它的通信方式。其他形式一概不允许:不能直接链结别的程序(把--- 其他团队的程序当做动态链接库来链接),不能直接读取其他团队的数据库,不能使用共享内存模式,不能使用别人模块的后门,等等。唯一允许的通信方式是调用 Service Interface。

-- 任何技术都可以使用。比如:HTTP、CORBA、Pub/Sub、自定义的网络协议等。

-- 所有的 Service Interface,毫无例外,都必须从骨子里到表面上设计成能对外界开放的。也就是说,团队必须做好规划与设计,以便未来把接口开放给全世界的程序员,没有任何例外。

-- 不这样做的人会被炒鱿鱼。

备注

这也应是 AWS(Amazon Web Service)出现的基因.

出现的问题

-- 一个线上故障的工单会在不同的服务和不同的团队中转过来转过去。

-- 每个团队都可能成为一个潜在的 DDoS 攻击者,除非每个服务都要做好配额和限流。

-- 监控和查错变得更为复杂。除非有非常强大的监控手段。

-- 服务发现和服务治理也变得非常复杂。

解决方法

-- 分布式服务的架构需要分布式的团队架构

-- 分布式服务查错不容易

-- 没有专职的测试人员,也没有专职的运维人员,开发人员做所有的事情。

-- 运维优先,崇尚简化和自动化

-- 内部服务和外部服务一致。

备注

在进化的过程中,亚马逊遇到的问题很多,甚至还有很多几乎没有人会想到的非常生僻的东西,它都一一学习和总结了,而且都解决得很好.

3. 分布式系统中需要注意的问题

问题一:异构系统的不标准问题

问题二:系统架构中的服务依赖性问题

问题三:故障发生的概率更大

问题四:多层架构的运维复杂度更大

重点

分工不是问题,问题是分工后的协作是否统一和规范。

而且构建分布式服务需要从组织,到软件工程,再到技术上的一次大的改造,需要比较长的时间来磨合和改进,并不断地总结教训和成功经验。

2.补充

TBD

3.问题

1. 把一个单体应用拆解成服务化或是微服务中遇到的问题和难点是什么?踩过什么样的坑?你是如何应对的?

网友评论

javaee

微服务通常根据业务来划分边界,粒度通常是一个独立的业务,具体多大合适不是一开始就决定的,这是一个逐步拆分细化的过程,李智慧老师说任何复杂的架构都是从最简单的应用慢慢演化过来的,就像当年的淘宝发展到现在。单体应用,为了高可用,需要集群多实例部署。查询太慢,访问太慢,加缓存,DB读写分离。业务发展到一定复杂程度,单体应用太庞大,会产生一系列问题。例如开发方面,一个工程几十上百人不停的改动,如何协作,一个人的代码有问题,影响了所有业务。每一个版本的迭代与发布,开发、测试、沟通得花大把时间,可能还会出错,牵一发而可能动全身。运维上,发布一次可以睡个午觉,发布一次影响线上所有功能。资源方面,扩容到几十上百台机器的时候,DB、NoSQL等的连接数撑爆了……//怎么理解? TBD

扩展问题

Q: 分布式与集群的区别?

A: TBD

插入:

分布式是指将不同功能,或不同地点,或拥有不同数据的多台计算机通过网络连接起来,由控制系统统一管理,完成大规模信息处理的计算机系统。

集群是指将多台服务器集中在一起提供同一种服务,在逻辑上可以看做是一台服务器对外进行服务,这些服务器组合就是集群。

分布式和集群的区别是什么?

简单总结一句话:分布式是“并联”工作的,集群是“串联”工作的。

具体介绍一下两者的区别:

1、从概念上就可以看出两者最主要的区别就是分布式是将一种业务拆分成多个子业务部署在多台服务器上,进而对外提供服务;而集群就是将多台服务器组合在一起提供同一种服务;

2、集群强调在多台服务器位置集中,并且容易统一管理;而分布式没有具体要求,不论放置在哪个位置,只要通过网络连接起来就行;

3、集群是一种物理形态,即多台服务器在一起提供一种服务;而分布式是一种工作方式,即一个程序或业务分解到多台服务器分别完成;

总之,两者最明显的区别还是集群是多台服务器做相同类型的任务,分布式是多台服务器协同做一种任务。

2. 什么是单体架构?

文章正在审核中... - 简书  // 单体架构,SOA架构,微服务架构,分布式架构,集群架构 -- 已经打不开

后续补充

...

4.参考

21 | 分布式系统架构的冰与火-极客时间  // 21 | 分布式系统架构的冰与火

分布式与集群的区别是什么?  // 分布式与集群的区别

文章正在审核中... - 简书  // 单体架构,SOA架构,微服务架构,分布式架构,集群架构

后续补充

...

01 分布式系统架构的冰与火相关推荐

  1. 12.16 Day 1 - 分布式系统架构的冰与火

    大家好,我是 Snow Hide,作为<左耳听风>这个专栏的学员之一,这是我打卡的第一天,也是我第一次进行打卡这种操作. 今天我温习了该专栏里一篇叫<分布式系统架构的冰与火>的 ...

  2. 【分布式系统】分布式系统架构的冰与火

    什么是分布式系统 分布式系统(distributed system)是建立在网络之上的软件系统. 以上是摘自百度百科的解释,不可否则,分布式系统的基础是网络.计算.存储.比如常见的一个Web单体系统, ...

  3. 分布式系统的冰与火与技术栈

    最近在极客时间看到一个课程叫<左耳听风>,第一反应是叫这个名字,太不突出重点了,能好卖吗.但当了解作者后,发现是我错了.作者好牛比啊.所以要感受下骨灰级程序员的魅力.先从分布式系统入手学习 ...

  4. 左耳朵耗子:聊聊分布式系统架构

    点击关注 InfoQ,置顶公众号 程序员的 8 点技术早餐 作者|陈皓 编辑|杨爽 学习任何技术,善于提纲挈领总是事半功倍.学习分布式系统架构也是如此,只要找到这张网的纲,就能更有效率地做好架构和工程 ...

  5. 爆肝七天!终于把分布式系统架构整理出来了

    随着互联网的不断发展,企业积累的数据越来越多.当单台数据库难以存储海量数据时,人们便开始探索如何将这些数据分散地存储到多台服务器的多台数据库中,逐渐形成了分布式数据库.如果将数据分散存储,对于数据的增 ...

  6. iOS冰与火之歌番外篇 - App Hook答疑以及iOS 9砸壳

    蒸米 · 2016/03/16 10:29 0x00 序 上一章我们讲到了在非越狱的iOS上进行App Hook.利用这个技术,你可以在非越狱的iOS系统上实现各种hook功能(e.g., 微信自动抢 ...

  7. iOS冰与火之歌 – Objective-C Pwn and iOS arm64 ROP

    蒸米 · 2016/01/26 10:29 0x00 序 冰指的是用户态,火指的是内核态.如何突破像冰箱一样的用户态沙盒最终到达并控制如火焰一般燃烧的内核就是<iOS冰与火之歌>这一系列文 ...

  8. 人工智能的冰与火之歌:回顾2016,展望2017(余凯)丨硬创公开课

    作者:机智的大群主 链接:https://zhuanlan.zhihu.com/p/24501489 来源:知乎 著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 2016 年,人 ...

  9. 大型互联网分布式系统架构技术要点

    大型互联网分布式系统架构技术要点 解决问题的通用思路是将分而治之(divide-and-conquer),将大问题分为若干个小问题,各个击破.在大型互联网的架构实践中,无一不体现这种思想. 架构目标 ...

  10. 整理下.net分布式系统架构的思路

    最近看到有部分招聘信息,要求应聘者说一下分布式系统架构的思路.今天早晨正好有些时间,我也把我们实际在.net方面网站架构的演化路线整理一下,只是我自己的一些想法,欢迎大家批评指正. 首先说明的是.ne ...

最新文章

  1. 带头结点的线性表的链式实现
  2. 基于maven使用IDEA创建多模块项目
  3. mimo雷达信号处理_雷达学术入门脉冲雷达信号处理概述
  4. KOA中的ejs的基本使用
  5. 我们无法更新系统保留的分区_系统更新是我们手机的基本功能之一 安卓智能更新有哪些用途...
  6. Hadoop数据读写原理
  7. [Linux程序设计][调试][splint]
  8. 批量域名解析为IP地址
  9. 幅频特性曲线protues_【2017年整理】幅频相频特性multisim11.ppt
  10. u校园答题技巧 答题助手 最新可用
  11. 生意参谋指数转化算法(2021最新)
  12. ORACLE数据库日志路径在哪里,查询方式
  13. ps技巧学习之常用8种抠图方法
  14. C#如何消除按键提示声音?
  15. 网络创业成功的7堂课(读书笔记)
  16. Cannot lock file hash cache (E:\blackWu\github\X5WebView\WebViewX5\.gradle\4.6\fileHashes) as it has
  17. matlab 双y轴 三y轴
  18. 新产品常用的网络广告发布方法有哪些?
  19. Canvas 实用API详解
  20. JavaScript基础知识快速预览

热门文章

  1. 网络编辑员国家职业标准
  2. python 复制到剪贴板_Python脚本将文本复制到剪贴板
  3. Odin Inspector 系列教程 --- 初识Odin序列化
  4. 三年不重装:令电脑百毒不侵的13个妙招
  5. minimumsnap(1)微分平坦特性(Differential Flatness)
  6. 使用PC版Zune以全新的方式体验您的音乐
  7. 读书笔记之《薄世宁·医学通识50讲》
  8. 米家扩展程序初始化超时_Home · MiEcosystem/miot-plugin-sdk Wiki · GitHub
  9. 电脑QQ登录后将显示的界面由“空间”改为“消息”
  10. HLI测试 涉及书籍