• 一文讲懂高并发分布式系统,听不懂你来打我


    众所周知,在分布式系统的设计与建立中,其中一个要考虑的问题就是高并发。

    那么,到底什么是高并发呢?

    简单来说高并发就是指通过设计系统,使之实现可以同时处理多个请求的能力。

    现在的高并发系统主要存在有两种实现方式,一种是垂直扩展,一种是水平扩展;平常我们使用较多的通常是水平扩展,但这是到底是为什么呢?

    主要是由于垂直扩展就是提升单体计算机的性能,从而达到提升系统的效率和灵活性。

    然而,单体计算机的上限是十分有限的,除非再来一个乔布斯型天才选手并创新了硬件层面的技术,否则单体计算机的提升成本真的是远远高于提升系统效率,优化算法灵活度的提升成本。

    而且就效果来说,提升整体算法的收益是要远远大于单体计算机的提升的,不仅仅是因为系统更具有抗击风险的能力,更重要的是我们可以避免依赖于单个计算机的计算能力,这样在实际应用的过程中,如果有某个计算机下线无法实现该计算机应该实现的功能时,如果系统构建得当,系统应该会委任其他的计算机代偿实现该台计算机遗留的问题。

    而在这时,如果我们保持对于单体计算机计算能力的依赖,那么面对类似的风险时抗击风险和解决问题的能力就会相应地得到不重视。

    那么我们最终决定在水平扩展层面继续前进~

    其实在水平扩展层面是有很多选择的,比如反向代理层,站点层,服务层或者数据库层。

    那么具体应该如何选择呢?

    首先是反向代理层,可以通过DNS轮询来实现。

    DNS轮询主要是用于实现多个web服务器之间的负载平衡,每个用户的请求被轮番发给不同的服务器,并且一遍过后又会回到最开始的第一个IP。但是这不是最好的负载均衡方式,因为它只能实现分配的工作,而且会使客户端的缓存难以管理。、

    其次是站点层的水平扩展,在这个层面的扩展还是非常有前景的,主要有Nginx,这是一款免费的linux网页服务器,可以用于反向代理和缓存。唯一的问题在于他是一个static的软件,不是dynamic的,这导致了每次处理dynamic的事件时,他都需要把事件传输给PHP然后等待处理的结果,之后在传输给客户,所以效率上存在一点问题。这一步也可以用Apache代替,但是作为一个免费的开源软件来说,Nginx的适用面还是更加广阔的。

    再然后是服务层,一般通过服务连接池来扩展。一个程序在连接DB数据库的时候经常需要占用很长时间进行网络上的认证和确认,这占用了很多资源和时间成本,而为了加快效率出里和简化这些流程,优化服务器性能,使用服务连接池就是一个很好的方式。

    简单来说就是在遇到新的认证时候先查看数据连接池里是否有已经建立好的数据,如果有就可以节约时间和服务区直接使用,没有就建立一个新的连接放进去;放满了就检查一下已经用的是否已经用过了,用过了就删掉没有用过就留下。

    市面上现在常用的连接池有c3p0,dbcp与druid。

    最后是数据库层的水平扩展,一般通过数据Hash的方式,时间原因就不再这里展开叙述了。

    总结下来,一个共分为四个部分,而市面上的高并发系统大部分都在站点层进行扩展,那么你觉得还有什么地方可以创新一下呢?

    欢迎点赞留言,我们来一起探讨~ 

  • 相关阅读:
    警惕.Elbie[thekeyishere@cock.li].Elbie勒索病毒,您需要知道的预防和恢复方法。
    [数据集][目标检测]猕猴桃检测数据集VOC+YOLO格式1838张1类别
    Tronapi-波场接口-源码无加密-可二开--附接口文档-基于ThinkPHP5封装-作者详细指导-2022年7月1日08:43:06
    标准误与聚类稳健标准误的理解
    面试题-React(十三):React中获取Refs的几种方式
    UCloud 对象存储使用
    SAP S/4 HANA 与R3(ECC) 的区别
    Mathorcup数学建模竞赛第四届-【妈妈杯】C题:家庭暑假旅游套餐的设计(附MATLAB代码)
    Python---练习:使用for循环实现用户名+密码认证
    临近过年无情被裁,我面试大厂的这几个月…
  • 原文地址:https://blog.csdn.net/Mr_HelloWorldx/article/details/127954506