分享

【架构师案例备考】Web架构综合考察2

 芃篙君 2024-05-20 发布于浙江

   这是芃篙君的第225篇原创    

本文适合软件行业的朋友。大概2200字,阅读需要7分钟。


你好呀,我是芃(péng)篙,一个相信思考和努力能够拿到结果的家伙。
本文继续大型网站架构演进的内容,从单体架构,到垂直架构,再到应用其缓存。随着用户量的增加与业务丰富度的上升,对架构的需要时没有尽头的。

04. 第四阶段:使用服务集群改善网站并发处理能力

应用服务器集群的策略是:在业务继续扩张时,通过扩张服务器集群的方式,来提高并发处理能力。

但是服务器使用集群会带来新的问题:

1、用户的请求有谁来转发到具体的应用服务器 —— 【使用负载均衡解决】

2、用户如果每次访问到的服务器不一样,那么如何维护session的一致性 —— 【探讨有状态和无状态问题】


负载均衡
客户端发过来的请求,先到负载均衡器,负载均衡决定具体访问哪个应用服务器,服务器执行返回到负载均衡,负载均衡再返回到客户端。

四种实现方式和特点:



负载均衡算法
1、静态算法(不考虑动态负载)
  • 轮转:轮流将服务器请求任务调度给不同的节点
  • 加权轮转:考虑不同节点的能力差异
  • 源地址哈希散列:根据请求的源IP地址,作为散列键从静态分配的散列表找到对应的节点。对同一个源可以保持基本不变的分配节点
  • 目标地址哈希散列:根据请求目标IP做散列找出对应的节点
  • 随机算法:简单、不可控
2、动态算法
  • 最小连接数:分配给当前活动请求数量最少得节点,在节点能力相同的情况下
  • 加权最小连接数:考虑节点处理能力不同,按最小连接分配
  • 加权百分比:考虑了节点的利用率、硬盘速率、进程个数等,使用利用率来表现剩余处理能力
3、硬件负载均衡:F5
4、软件负载均衡:LVS、Nginx、HAproxy

有状态与无状态
无状态服务(stateless service):对单次请求的处理,不依赖其他请求,也就是说,处理一次请求所需的全部信息,要么都包含在这个请求里,要么可以从外部获取,服务器本身不存储任何信息。
有状态服务(stateful service):则相反,它会在自身保存一些数据,先后的请求是有关联的。

判断练习
  • 身份认证构件 -- 有状态(有前后文)
  • 资源发布构件 -- 无状态
  • 资源检索构件 -- 无状态
  • 在线编辑构件 -- 有状态(有交互性)
  • 统计分析构件 -- 无状态
更多的“无状态”是一种理想的状态,因为“无状态”更便于集群的伸缩性,也更利于维护和稳定。

Session共享机制

方案一:使用携带session的cookie,存在客户端;
方案二:服务器之间进行session的同步。当服务器数量较多时,同步比较复杂,容易出问题;
方案三:把session存入Redis

05. 第五阶段:数据库的读写分离

在大部分业务场景下,在交互端更多的是展示数据——即读数据库操作。相对来说,涉及到修改数据的交互,并不多。所以,把读和写数据库分离的思路,会让“只读”的业务请求有更快的响应。也就提高了整体的性能。

主从数据库结构特点:
1、一般一主多从,也可以多主多从
2、主库做写操作,从库做读操作
3、主从之间通过日志同步

主从复制步骤
1、主库(Master)更新数据完成前,将操作写binlog日志文件
2、从库(Slave)打开I/O线程与主库连接,做binlog dump process,并将事件写入中继日志
3、从库执行中继日志事件,保持与主库一致

另一部分,分布式缓存服务器,即使用缓存缓解读库的压力。前文有涉及,不再赘述。

06. 第六阶段:使用反向代理和CDN加速网站响应

这里提到的反向代理,就是前面内容中提到过的通过反向代理实现负载均衡,不再赘述;
CDN的全称是Content Delivery Network,即内容分发网络。其基本思路是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输得更快、更稳定。
本质上是把信息和内容存储到尽量离用户近的地方。CDN节点,是在外网去找,不是在内网找。

07. 第七阶段:使用分布式文件系统和分布式数据库系统

进一步使用集群思想,应用到数据库和文件服务器。是一种水平扩展思路。
文件服务器:策略比如根据文件类别划分
数据库:策略比如业务分库,不同的业务使用不同的数据库

08.  第八阶段:使用NoSQL和搜索引擎

业务体量发展这一步已经是超大规模的业务了,就不能使用常规的、传统的解决方案。需要发展演进自己的核心技术。
主要是了解下这部分的思想和理念。

09. 第九阶段:业务拆分

在分布式阶段,已经对数据库和文件系统进行了业务拆分。那么在这里,对应的是配套的应用服务器也进行拆分。
接收到应用请求时,就通过负载均衡根据业务进行分流。分发到不同的应用服务器,应用服务器之间使用消息队列通信。

10. 第十阶段:分布式服务

引入了分布式服务的服务器。把应用服务器里面的内容,进一步拆分成很多标准化的服务。然后应用服务器调用分布式服务器中的服务完成相应的职能。接近现在常规意义上的微服务概念。

这是视频案例备考的最后一篇了,本周末就要再赴考场。

内容整理完,其实可以看出来,机构老师去年的的备考视频思路是把过往的教学知识结合新教材进行了重新梳理。所以,某种程度上,也是去年考试画风突变后,不少报名机构的朋友被闪了腰的一个原因。

从芃篙的角度看,去年新教材都扫过一遍的,但是听这个视频仿佛都是新东西。也就是说教材看了,多半也是记不住。还是需要多维度的输入与练习才有效果。当然,最好是工作内容能关联得上,理解会更加深刻。

所以这应该具备梳理“传统”知识点的效果,在此基础上,最后一周,在案例方向,肯定需要再补齐一些其他视角的知识点。

最后,祝大家都能考个好成绩!

相关链接

【架构师案例备考】质量属性与架构评估

好了,今天的分享就到这里,如果觉得有收获,不妨给点鼓励,点赞、关注、加加星标;转发、在看、多多益善~ 谢谢~

   END    

  关注芃篙君⬇️,每日获取思考与践行的认知更新...

  可获取软考备考资料;

  亦可加微信探讨开发者、职场与管理、IoT行业等话题;

  共同成长,穿越周期!

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多