大型网站开发 广州,广西住建厅八大员报名网站,wordpress cms 教程,楼盘信息在哪里能查到目录
#x1f433;今日良言#xff1a;且视他人之疑目如盏盏鬼火#xff0c;大胆地去走自己的夜路
#x1f407;一、常见概念
#x1f407;二、发展史 今日良言#xff1a;且视他人之疑目如盏盏鬼火#xff0c;大胆地去走自己的夜路 一、常见概念
在正式介绍分布式系…目录
今日良言且视他人之疑目如盏盏鬼火大胆地去走自己的夜路
一、常见概念
二、发展史 今日良言且视他人之疑目如盏盏鬼火大胆地去走自己的夜路 一、常见概念
在正式介绍分布式系统之前让我们先来了解一下分布式相关的一些常见概念。
应用Application/ 系统System) 为了完成⼀整套服务的⼀个程序或者⼀组相互配合的程序群。 举例为了完成一项任务由此搭建的由一个人活着一群相配合的人组成的团队 模块Module/ 组件Component 当应用较复杂时为了分离职责将其中具有清晰职责的、内聚性强的部分抽象出概念便于理解。 举例军队中为了进⾏某据点的攻克将人员分为突击小组、爆破小组、掩护小组等。 分布式Distributed 系统中的多个模块被不属于不同服务器之上就可以将这个系统称为分布式系统。比如Web 服务器和数据库分别在不同服务器上工作或者多台 Web 服务器被分别部署在不同服务器上。
举例在疫情期间无法到公司上班因此为了某些工作需要原来在同一个办公室工作的的小组成员被分散到一个城市的不同场地或者多个城市的不同场地进行远程配合工作完成目标。
跨主机之间的模块间的通信基本要记住网络支撑完成。
集群Cluster
被部署于多台服务器上的为了实现特定目标的一个/组特定的组件整个整体被称为集群。
举例1多个MySQL工作在不同服务器上共同提供数据库目标服务由此可以被称为一组数据库集群。
举例2广义的集群只要是多个机器构成了分布式系统都可以称为是一个“集群”。
举例3狭义的集群redis 提供的集群模式这个集群模式之下主要是解决存储空间不足的问题拓展存储空间。
主Master/ 从(Slave)
集群中通常有一个程序需要承担更多的责任被称为主。其他承担附属职责的被称为从。
举例学校小组任务一般会选举一个组长组长就需要承担比组员更多的责任而组员就需要承担另外一些责任来配合组长完成任务。
中间件Middleware
可以理解成一种软件它可以帮助不同的应用系统之间进行沟通和数据交换。
举个例子可以想象一个邮局的场景
邮局作为中间件假设你住在城市A你的一个朋友住在城市B你们两个都想要互相寄送信件。如果没有邮局中间件你们可能需要自己亲自前往对方的城市去递送信件这不仅耗时耗力而且效率低下。而有了邮局这样的服务机构中间件你们只需要将信件交给邮局邮局会负责将信件从城市A运送到城市B并最终交到你朋友的手中。这样即使你们身处不同的地方也能轻松地通信。邮局提供的服务邮局不仅仅提供传递信件的服务还提供了如挂号、保险、快递等多种服务共性功能这些都是为了满足不同客户的需求而设计的。无论客户需要哪种服务邮局都能提供相应的解决方案这样就避免了每个人为了寄信而自己建立一套复杂的传送系统的情况。
总的来说中间件就像是一个连接不同应用和服务的桥梁它提供了一种便捷的方式来实现资源共享和功能共享。在技术领域中中间件的存在极大地简化了复杂系统的开发和维护工作提高了软件的复用性和效率。
二、发展史
在介绍完了分布式相关的一些常见概念之后接着就上主菜了让博主来介绍一下分布式系统是如何蓬勃发展如今这么火爆的。
2.1单机架构
在初始阶段小型系统的应用程序、数据库、文件等所有资源都部署在一台服务器上这通常被称为LAMPLinux, Apache, MySQL, PHP架构。
2.2 功能分离架构
随着系统上线我们收获了一些忠实用户这使得系统的访问量逐步上升逐渐逼近了硬件资源的极限。面对当前的性能压力我们需要进行系统重构以提升系统的承载能力以因此我们可以选择将应用和数据分离放到不同的主机上部署。 2.3应用服务器集群架构
我们的系统被广大用户所喜爱单台应用服务器已经无法满足需求了针对这种情况我们了解到右两种方案可以解决这个问题 垂直扩展 / 纵向扩展 Scale Up。 通过购买性能更优、价格更⾼的应⽤服务器来应对更多的流量。这种方案的优势在于完全不需要对系统软件做任何的调整但劣势也很明显硬件性能和价格的增长关系是⾮线性的意味着选择性能 2 倍的硬件可能需要花费超过 4 倍的价格其次硬件性能提升是 有明显上限的。 ⽔平扩展 / 横向扩展 Scale Out。 通过调整软件架构增加应用层硬件将用户流量分担到不同的 应用层服务器上来提升系统的承载能⼒。这种⽅案的优势在于成本相对较低并且提升的上限空间也很大。但劣势是带给系统更多的复杂性需要掌握更丰富的经验。 经过深思熟虑我们决定使用水平扩展的方案来解决这个问题但是和需要引入一个新的组件---负载均衡为了解决用户流量向哪台应用服务器分发的问题需要⼀个专门的系统组件做流量分发。 实际中负载均衡不仅仅指的是工作在应用层的甚至可能是其他的网络层之中。同时流量调度算法也有很多种这⾥简单介绍几种较为常见的 Round-Robin 轮询算法 即非常公平地将请求依次分给不同的应用服务器。 Weight-Round-Robin 轮询算法 为不同的服务器比如性能不同赋予不同的权重weight能者多劳 一致性哈希散列算法 通过计算⽤⼾的特征值比如 IP 地址得到哈希值根据哈希结果做分发优点是确保来相同用户的请求总是被分给指定的服务器。也就是我们平时遇到的专项客⼾经理服务。 2.4读写分离/主从分离架构
在上述的架构里无论扩展多少台服务器这些请求最终都会从数据库读写数据到一定程度之
后数据的压力就是系统承载能力的瓶颈点
此时不妨想想我们是否可以像扩展应用服务器一样扩展数据库服务器
答案是否定的因为数据库服务有特殊性。 如果将数据分散到各台服务器之后数据的⼀致性将⽆法得到保障。所谓数据的⼀致性此处是指针对同⼀个系统无论何时何地我们都应该看到⼀个始终维持统⼀的数据。想象⼀下 银行管理的账⼾⾦额如果收到⼀笔转账之后⼀份数据库的数据修改了但另外的数据库没有修改则用户得到的存款⾦额将是错误的。 因此就得采用另一种方法。 我们保留一个主要的数据库作为写入的主数据库其他的数据库作为从属数据库。从库的所有数据都来自主库经过数据同步后从库可以维护与主库一致的数据然后为了分担数据库的压力我们可以将写数据请求全部交给主库处理但读请求分散给所有从库。在绝大多数系统中读请求是远大于写请求的所以将读请求分散给各个从库以后数据库的压力就没那么大了。 2.5引入缓存-冷热分离架构
随着访问量持续增加我们发现业务中一些数据的读取频率远大于其他数据的读取频率。比如dy搜索框会展示每天的热搜词这部分数据就是当天读取频率比较多的数据。我们把这部分数据成为热点数据。与之相对应的就是冷数据。
针对热数据我们想要提高它们的读取相应时间因此可以增加本地缓存并在外部增加分布式缓存。通过缓存就能避免有大量的请求同时操作数据库作为一面护盾为数据库 “抵挡伤害”避免数据库宕机。 2.6 垂直分库分库分表 随着业务的数据量增大大量的数据存储在同⼀个库中已经显得有些力不从心了所以可以按照业务将数据分别存储。比如针对评论数据可按照商品ID进⾏hash路由到对应的表中存储针针对支付记录可按照小时创建表每个小时表继续拆分为小表使用用户ID或记录编号来路由数据。只要实时操作的表数据量足够小请求能够⾜够均匀的分发到多台服务器上的⼩表那数据库就能通过
水平扩展的方式来提⾼性能。这种做法显著的增加了数据库运维的难度对DBA的要求较⾼。数据库设计到这种结构时已经可以称为分布式数据库但是这只是⼀个逻辑的数据库整体数据库里不同的组成部分是由不同的组件单独来实现的如分库分表的管理和请求分发由Mycat实现SQL的解析由单机的数据库实现读写分离可能由网关和消息队列来实现查询结果的汇总可能由数据库接口层来实现等等这种架构其实是MPP大规模并行处理架构的⼀类实现。 2.7业务拆分-微服务 随着⼈员增加业务发展我们将业务分给不同的开发团队去维护每个团队独⽴实现自己的微 服务然后互相之间对数据的直接访问进⾏隔离可以利⽤ Gateway、消息总线等技术实现相互之间的调⽤关联。甚⾄可以把⼀些类似⽤⼾管理、安全管理、数据采集等业务提成公共服务。 总的来说分布式系统的发展是一个从简单到复杂从单一到复合的过程它不仅涉及技术的迭代和创新还包括对系统稳定性、扩展性和并发性的不断追求。所谓的分布式系统就是想办法引入更多的硬件资源。