分布式系统基础( 二 )


同一个业务,部署在多个服务器上(不同的服务器运行同样的代码,干同一件事) 。
2.2 分布式
定义:分布式系统是一组计算机,通过网络相互连接传递消息与通信后并协调它们的行为而形成的系统 。组件之间彼此进行交互以实现一个共同的目标 。
一个业务分拆多个子业务,部署在不同的服务器上(不同的服务器,运行不同的代码,为了同一个目的)
2.3 节点
节点是指一个可以独立按照分布式协议完成一组逻辑的程序个体 。在具体的项目中,一个节点表示的是一个操作系统上的进程 。
2.4 副本机制
副本(/copy)指在分布式系统中为数据或服务提供的冗余 。数据副本指在不同的节点上持久化同一份数据,当出现某一个节点的数据丢失时,可以从副本上读取到数据 。数据副本是分 布式系统中解决数据丢失问题的唯一手段 。服务副本表示多个节点提供相同的服务,通过主从关系来实现服务的高可用方案 。
2.5 中间件
中间件位于操作系统提供的服务之外,又不属于应用,他是位 于应用和系统层之间为开发者方便的处理通信、输入输出的一 类软件,能够让用户关心自己应用的部分 。
3、架构的发展过程
一个成熟的大型网站系统架构并不是一开始就设计的非常完美,也不是一开始就具备高性能、高可用、安全性等特性,而是随着用户量的增加、业务功能的扩展逐步完善演变过来的 。
在这个过程中,开发模式、技术架构等都会发生非常大的变化 。而针对不同业务特征的系统,会有各自的侧重点,
比如像淘宝这类的网站,要解决的是海量商品搜索、下单、支付等问题;
腾讯,要解决的是数亿级别用户的实时消息传输;
百度,要解决的是海量数据的搜索 。

分布式系统基础

文章插图
每一个种类的业务都有自己不同的系统架构 。
假如我们系统具备以下功能:
用户模块:用户注册和管理
商品模块:商品展示和管理
交易模块:创建交易及支付结算
3.1 阶段一,单应用架构
网站的初期也可以认为是互联网发展的早起,我们经常会在单机上跑我们所有的程序和软件 。把所有软件和应用都部署在一台机器上,这样就完成一个简单系统的搭建,这个时候的讲究的是效率 。
3.2 应用服务器和数据库服务器分离
随着网站的上线,访问量逐步上升,服务器的负载慢慢提高,在服务器还没有超载的时候,我们应该做好规划,提升网站的负载能力 。假如代码层面的优化已经没办法继续提高,在不提高单台机器的性能,增加机器是一个比较好的方式,投入产出比非常高 。这个阶段增加机器的主要目的是讲 web 服务器和数据库服务器拆分,这样不仅提高了单机的负载能力,也提高了容灾能力 。
3.3 应用服务器集群-应用服务器负载告警,如何让应用服务器走向集群
随着访问量的继续增加,单台应用服务器已经无法满足需求 。在假设数据库服务器还没有遇到性能问题的时候,我们可以增加应用服务器,通过应用服务器集群将用户请求分流到各个服务器中,从而继续提升负载能力 。此时多台应用服务器之间没有直接的交互,他们都是依赖数据库各自对外提供服务 。
架构发展到这个阶段,各种问题也会慢慢呈现:
用户请求由谁来转发到具体的应用服务器用户如果每次访问到的服务器不一样,那么如何维护 ( 同步,第三方存储)
3.4 数据库压力变大,数据库读写分离
架构演变到这里,并不是终点 。上面我们把应用层的性能拉上来了,但是数据库的负载也在慢慢增大,那么怎么去提高数据库层面的负载呢?有了前面的思路以后,自然会想到增加服务器 。但是假如我们单纯的把数据库一分为二,然后对于后续数据库的请求,分别负载到两台数据库服务器上,那么一定会造成数据库不统一的问题 。所以我们一般先考虑读写分离的方式 。