看完这篇单机服务到分布式架构的演变,感觉面试官的问题太简单

前言

单机的性能会遇到瓶颈,这仅仅是从性能来看。即使不从性能来看,如果一个机器的性能足够,那么也会存在单点故障的问题,所以我们需要分布式的高可用。

1946年,世界上第一台电子计算机在美国的宾夕法尼亚大学诞生,它的名字是:ENICAC ,这台计算机的体重比较大,计算速度也不快,但是而代表了计算机时代的到来,在以后的互联网的发展中也有基础性的意义。

计算机的组成是有五部分完成的,分别是:输入设备,输出设备,存储器,存储器里面由运算器和控制器,有一个冯诺依曼的模型非常形象的对象计算机的组成进行了描述,不过计算机也是有数据流,指令流,控制流来进行计算的和正常运转的。如图:

看完这篇单机服务到分布式架构的演变,感觉面试官的问题太简单

阶段一:单应用架构

系统的初级都是应用和数据库都放在一台服务器上。

看完这篇单机服务到分布式架构的演变,感觉面试官的问题太简单

阶段二,应用服务器和数据库服务器分离

随着网站的上线,访问量逐步上升,服务器的负载慢慢提高,在服务器还没有超载的时候,我们应该做好规划,提升网站的负载能力。假如代码层面的优化已经没办法继续提高,在不提高单台机器的性能,增加机器是一个比较好的方式,投入产出比非常高。这个阶段增加机器的主要目的是将web 服务器和数据库服务器拆分,这样不仅提高了单机的负载能力,也提高了容载能力。

看完这篇单机服务到分布式架构的演变,感觉面试官的问题太简单

阶段三:应用服务器集群-应用服务器负载告警

随着访问量和流量的增加,假设数据库没有遇到瓶颈,对应用服务器集群来对请求进行分流,提高程序的性能。存在的问题:用户的请求由谁来转发,session如何来管理的问题。

看完这篇单机服务到分布式架构的演变,感觉面试官的问题太简单

阶段四:数据库压力变大-数据库读写分离

读写分离的话,这样以后的请求,查询的请求就可以去从库里面读数据,写的数据可以到主库中了,但是会带来几个问题:

1.主从的数据库之间的数据同步:可以使用mysql自带的master-slave方式实现主从复制

2.对应的数据源的选择:采用第三方数据库中间件,例如:mycat

看完这篇单机服务到分布式架构的演变,感觉面试官的问题太简单

阶段五:使用搜索引擎缓解读库的压力

数据库做读库的话,常常对模糊查询的性能不是很好,特别是对于大型的互联网公司来说,想搜索的模块就比较核心了,这是可以使用搜索引擎了,虽然可以大幅度的提高查询的速度,但是同时也会带来一些问题比如索引的构建。

看完这篇单机服务到分布式架构的演变,感觉面试官的问题太简单

阶段六:引入缓存机制缓解数据库的压力

对一些热点的数据,可以使用redis,memcache来作为应用层的缓存;另外在某些场景下,可以使用mongodb来替代关系型数据库来存储。

阶段七:数据库的水平/垂直拆分

垂直拆分:把数据库中不同的业务数据拆分到不同的数据库中。

水平拆分:把同一个表中的数据拆分到两个甚至更多的数据库中,水平拆分的原因是某些业务量数据量大的已经达到了单个数据库的瓶颈,这时候可以采取将表拆分到多个数据库中。

看完这篇单机服务到分布式架构的演变,感觉面试官的问题太简单

阶段八:应用的拆分

随着业务的发展,业务越来越多,应用的压力越来越大。工程规模也越来越庞大。这个时候就可以考虑将应用拆分,按照领域模型将我们的用户,商品,交易分拆成子系统。

看完这篇单机服务到分布式架构的演变,感觉面试官的问题太简单

这样拆分以后,可能会有一些相同的代码,比如用户操作,商品的交易查询,所有会导致每个系统都会有用户查询和访问相关的操作。这些相同的代码和模块一定要抽象出来。这样有利于维护和管理。

看完这篇单机服务到分布式架构的演变,感觉面试官的问题太简单

阶段九,服务化

服务拆分以后,各个服务之间可以通过RPC 技术进行通信,比较典型的有:webservice、hessian、http、RMI等。

看完这篇单机服务到分布式架构的演变,感觉面试官的问题太简单

小编推荐:程序员失业2个月找不到工作,狂刷了5遍这份pdf终获字节跳动offer

                  Java开发两年多,全靠狂刷这份面试题,跳槽涨薪从10K到18K

猜你喜欢

转载自blog.csdn.net/kxkxyzyz/article/details/106101103