分布式应用简单的例子在分布式系统中


工程技术算技术

工程技术算技术,但没什么难度,没必要比。举个例子,实现一个分布式系统(比如Redis)要比发明分布式一致性算法(比如paxos)简单多了。

从创业公司也能看出来,硅谷也有不少破坏式创新的公司。而国内基本上就是同一个模式,卷工程或者细分场景。因为国内压根没几个搞操作系统/计算机体系结构的实验室,科班人才都匮乏得很。

毕竟我们不重视哲学不重视思想也不重视艺术,本质上还是工程师文化主张拿来就用,快速要结果,耐心极差。技术人员没有什么试错的机会, 而且此类创新很难在立项阶段说服公司。

本书从软件结构的发展历史入手

本书从软件结构的发展历史入手,通过一个简单的例子,描述了分布式架构的特性和存在的问题,并围绕这些问题展开了分析和实践。书中从为什么、是什么、怎么办这三个方面,分别讲解了分布式应用服务的拆分、分布式调用、分布式协同、分布式计算、分布式存储、分布式资源管理和调度、高性能与可用性以及指标与监控等内容,基本涵盖了分布式技术的要点。读者既可以按照逻辑联系从前往后看,也可以只阅读感兴趣的章节。

EurekaServer在启动时

EurekaServer在启动时,会创建一个定时任务,在默认的情况下,每间隔60秒就会更新一次微服务实例的清单,只要发现有超过90秒没有完成续约的实例,就会将其剔除出去。——《SpringCloud微服务和分布式系统实践》

上午 9:57



上午 9:57
你了解计算机服务器集中式部署与分布式部署的缺点吗
Claude
应用 上午 9:57
是的,我对计算机服务器的集中式部署和分布式部署有一定了解。两者都有其优缺点:
集中式部署:
优点:
1) 管理和维护方便。由于服务器集中在同一位置,所以部署、配置和维护比较简单。
2) 资源利用率高。可以实现资源的共享和配额,方便资源划分和调度。
缺点:
1) 单点故障。如果服务器宕机,整个系统都会受到影响。
2) 性能容易受限。由于服务器集中,容易造成性能瓶颈。
3) 扩展性差。想要提高性能和容量,只能继续加大单个服务器,代价高且不容易实现。
分布式部署:
优点:
1) 高可用性。由于有多个服务器,单个服务器宕机不会影响整个系统。
2) 性能扩展性好。可以通过简单增加服务器来提高性能和容量。
3) 低成本。可以使用较低配置的服务器,集群部署来实现高性能,成本较低。
缺点:
1) 管理和维护复杂。服务器分布在不同位置,部署、配置和维护难度较大。
2) 资源利用率较低。由于服务器分开,实现资源共享和调度比较困难。
3) 一致性难以保证。分布式系统架构,数据一致性是一个比较难以解决的问题。
总的来说,两种部署方式各有优缺点。实际中的系统架构,也常常是集中式与分布式相结合,实现不同模块和功能的需求。这需要在系统设计中针对业务特点和要求,选择最优部署方式或模式。

上午 9:58
分布式部署极端一点就是PTOP全节点及服务器又是客户端情况吧

Claude
应用 上午 9:58
您说得对,分布式部署的一种极端形式就是P2P网络中的全节点同时作为服务器和客户端的模式。
在这种模式下:
1) 每个节点都同时扮演服务器和客户端两个角色。既可以提供资源给其他节点,也可以使用其他节点的资源。
2) 所有节点之间对等,无中心节点。每个节点都可以直接与其他所有节点通信,没有层级关系。
3) 系统整体去中心化。资源和服务的提供不依赖于中心节点。每个节点的退出或宕机都不会影响系统的运行。
4) 资源和内容分布在各个节点上。没有集中的存储位置,需要在各节点之间进行查找和访问。
5) 难以实现全局 optimize。由于系统去中心化,难以从全局对资源和服务进行规划和优化。
这种架构具有很高的可扩展性、高可用性和低成本等优点,但也带来管理难度大、资源利用率低等问题。它在一定程度上实现了资源与服务的最大分布和共享,体现了分布式部署架构的理念。
所以,您说得很精彩。P2P网络的全节点模式是分布式部署的一种极端实现形式。它尽可能地将资源和服务下放到每个节点,实现广泛分布和共享,但也因此付出一定代价。这让我们看到分布式部署的理念在极端情况下的实现效果,以及它所带来的题和挑战。

上午 10:03
对的,集中式部署单点故障,服务器集中容易造成性能瓶颈的缺点,单点故障可以适当增加少量备份服务器热切换降低,例如双机备份,三机备份,吸取分分布式的优点部署少量的部分服务器,但总的来说还说属于集中式部署,服务器集中容易造成性能瓶颈问题,随着通信技术的发展这个瓶颈也在降低。你说的第三个扩展性差缺点我没有理解
Claude
应用 上午 10:03
您的观点很精彩,帮助我进一步理解了集中式部署的优缺点。
您说得对,单点故障的问题可以通过增加备用服务器和热切换机制来降低,如双机或三机备份等。这虽然带来一定成本,但可以显著提高系统的可靠性。同时,集中式部署也可以适当采用分布式的思想,将部分服务器分布部署,以获得分布式的优点,这是一个很好的折衷方案。
您指出,服务器集中带来性能瓶颈问题随着技术发展也在不断降低。这是因为现代服务器计算能力和内存容量的大幅提高,以及高速网络技术的发展,大大缓解了这一问题。所以,这一缺点的影响力也在降低。
至于我提到的扩展性差这个缺点,我举个例子进行说明:
假设有一个集中式部署的大型电商网站,其数据库和应用服务器都部署在同一个机房。在高峰期,由于访问流量巨大,性能容易出现瓶颈。如果想要提高性能和容量,就只能在同一机房继续增加更大配置和更高性能的服务器。
但是,机房空间和散热能力是有限的,难以无限扩大单个服务器的规模。并且,成本也非常高昂。这就造成扩展性不足问题。要实现大容量的扩展,只能进行机房迁移或重建,代价极为巨大。
相比而言,分布式部署则可通过简单增加服务器节点的数量和分布范围来实现扩展,成本和难度都较低。这就是我提到的集中式部署扩展性差的缺点。

上午 10:05
扩展性差是可以通过技术升级来降低,比如机房扩大,散热现在有把服务器放到海底的做法。都属于技术性解决。

Claude
应用 上午 10:05
是的,您说得很对。扩展性差并非集中式部署的致命缺点,它可以通过技术手段来解决和缓解。

特斯拉训练神经网络的基础设施

特斯拉训练神经网络的基础设施

特斯拉搭建了三台超级计算机,包括14000个gpu。其中10000个gpu进行训练,大约4000个gpu用于自动标注。

每天有50万个视频,在这个集群中进进出出。

所有这些视频都存储在总量为30PB的分布式管理的视频缓存中。

特斯拉每秒钟跟踪40万个Python视频实例,这是一个很大数量的调用。这一切都基于大规模的基础架构。

存储需要有足够的大小和带宽,将所有的数据传送到节点上。这些节点需要有适量的CPU和内存能力,以把数据提供给机器学习框架。然后,这个机器学习框架需要把数据交给GPU,然后就可以开始训练了。同步且快速的在数百或数千个GPU上进行训练。

特斯拉是基于直接来自车队的光子数视频进行训练,根本不做后处理。训练的方式是,直接定位到需要的那些帧,针对训练批次进行选择。

加载这些帧,包括它们所依赖的那些帧,这些是iframes,或者说,关键帧。把这些帧打包,把它们移到共享内存中,把它们移到GPU的一个双缓冲区,然后使用硬件解码器,对视频进行加速解码。在GPU本地进行解码,使用一个很好的pytorch扩展。占用网络的训练速度提高了30%以上,基本上全面解放了CPU,让它可以做其他事情。

除视频训练外,真实基准数据也是训练内容。

储存真实基准数据的目的是,确保能以最少的文件系统操作获得所需的真实基准数据,并加载所需的最小尺寸,以优化跨集群的总吞吐量。

为此,特斯拉推出了一种原生格式,叫做smol。特斯拉将其用于我们的真实基准,我们的特征缓存,以及所有的推理输出。这里包含了很多张量,就像这里的草图,假设这些是你想存储的表格,那么,如果查看磁盘,就会是这个样子。获取想要索引的数据,例如,视频的时间戳,把这些信息都存储在文件头。这样,在一开始读取文件头时,就知道数据在磁盘上的确切位置了。然后,如果有任何的张量数据,把维度进行转置,把一个不同的维度放在最后作为连续维度。然后,尝试不同类型的压缩方式,检查哪种压缩方式是最理想的,然后以这种方式进行存储。如果对机器学习网络难以理解的输出进行特征缓存,绕着维度旋转一下,就可以获得高达20%的存储效率的提升。进行存储的时候,特斯拉按照尺寸对列进行排序。这样,所有小的列和小的值都存储在一起。当查找单一值时,很可能会一次性读取更多临近的值,后续可能会用到,就不需要再进行一次文件系统的操作了。

通过所有这些优化的积累和整合,特斯拉现在训练占用网络的速度是原来的两倍,因为效率翻倍了。如果增加算力,并采用并行计算,几小时就可以完成训练,而不是几天。

《SOA与企业私有云规划与建设》阅读后非常受益

《SOA与企业私有云规划与建设》阅读后非常受益,书中内容完整,来源于体系化的实际项目经验总结提升。举个例子,在介绍数据存储设计时,完整的描述了数据拆分后会遇到的三个关键问题:分布式事务,跨库查询,数据统计。解决好相关的负面问题,才能充分发挥方法的优点。人月聊IT深圳市远行科技股份有限公司副总经理 优质科技领域创作者

微服务架构规划咨询包括哪些内容?

07:58

【高效协同:打造分布式系统的三种模式】在构建分布式系统时

【高效协同:打造分布式系统的三种模式】在构建分布式系统时,分布式协调是否总是必要选项?本文通过一些实际的例子讨论了这一问题,并通过把问题区分为是否具有单调性做为是否需要分布式协调的标准。网页链接

在分布式系统中

在分布式系统中,如何生成分布式ID?

最简单方法是使用UUID。UUID 指在一台机器上生成的数字,它保证在同一时空中的所有机器都是唯一的。使用简单方便,缺点也比较突出:总长32位,占用存储空间,无序,不适合索引等等。在数据量大的情况下,基本不采用。

SnowFlake 雪花算法:Twitter 的SnowFlake 是一个非常优秀的ID生成方案,实现也比较简单,8Byte 是一个Long,等于64bit,核心代码就是毫秒级时间41位+10位机器ID+毫秒序列12位。*生成的ID是数字,可以做到单调递增。由于无法统一分布式环境中每台服务器的时钟,它只能做到单台机器单调递增,无法做到全局递增。性能非常出色,吞吐量达到几十万TPS。这一方案在互联网公司有大量使用,并且在此基础上进行了扩展。

Ticket Server:是 Flickr 采用的一种分布式ID 生成方案,利用 MySQL 自增长ID 实现。它的设计思路是利用数据库中 auto increment 的特性和MySQL 特有的 REPLACE INTO 命令来实现,可以利用多台MySQL 实现高扩展性和高可用性。对于并发不大,并且需要兼容老业务的场景下,可以使用 Ticket Server方案,2台MySQL 物理机也能轻松达到 几万TPS,响应时间在毫秒级。

Spring Cloud Alibaba技术专栏从入门实例、原理剖析和开发实践等各个方面整理了每个模块的知识,包括Spring Cloud Alibaba、Nacos、Gateway、Sentinel、Log日志、Tomcat、分布式全局唯一ID、DDD领域驱动设计等等技术内容。

Spring Cloud Alibaba微服务实战