首页 > 其他分享 >高级系统架构师学习(五)软件架构设计-下篇

高级系统架构师学习(五)软件架构设计-下篇

时间:2023-09-17 12:57:12浏览次数:38  
标签:负载 下篇 请求 实现 软件架构 均衡 服务器 架构师 节点

一、大型网站系统架构演化【高速发展阶段】

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

  背景:

  • 用户的请求由谁来转发到具体的应用服务器?
  • 用户如果每次访问到的服务器不一样,那么如何维护session的一致性?

  负载均衡分类:

  • 基于特定软件的负均衡(HTTP重定向)【应用层】
  • 反向代理负载均衡【应用层】
  • 基于DNS(域名解析:通过域名解析到不同的服务节点)的负载均衡【传输层】
  • 基于NAT(网络地址转换:私有地址转互联网IP)的负载均衡【传输层】

应用层负载均衡

HTTP重定向

  实现思路:应用层转发,重定向

  特点:实现简单,性能较差

反向代理服务器

  实现思路:反向代理服务器转发请求

  特点:部署简单,但代理服务器可能成为性能的瓶颈

传输层负载均衡

DNS域名解析负载均衡

  实现思路:在用户请求DNS服务器获取域名对应的IP地址时,DNS服务器直接给出负载均衡后的服务器IP。

  特点:效率比HTTP重定向高,减少维护负载均衡服务器成本。

基于NAT的负载均衡

  实现思路:将一个外部IP地址映射为多个IP,对每次连接请求动态地转换为一个内部节点的地址。

  特点:技术较为成熟,一般在网关位置,可以通过硬件实现。

其他负载均衡实现

  • 硬件:F5
  • 软件:LVS、Nginx、HAproxy

算法分类

静态算法(不考虑动态负载)
  • 轮询:轮流将服务请求 (任务) 调度给不同的服务器节点。
  • 加权轮询:考虑不同节点处理能力的差异,加入权重。
  • 源地址哈希散列:根据请求的源IP,作为散列键从静态分配的散列表找出对应的节点。
  • 目标地址哈希散列:根据请求的目标IP做散列找出对应节点。
  • 随机算法:随机分配,简单,但不可控。
动态算法(考虑动态负载)
  • 最小连接数:新请求分配给当前活动请求数量最少的节点。
  • 加权最小连接数:根据节点处理能力不同,再按最小连接数分配。
  • 加权百分比:考虑了节点的利用率、硬盘速率、进程个数等,使用利用率来表现剩余处理能力。

Session共享机制

有状态与无状态

  无状态服务:对单次请求的处理,不依赖其他请求【处理一次请求所需的全部信息都在这次请求里,服务器本身不存储任何信息】

  有状态服务:会在自身保存一些数据,先后的请求有关联性

第五阶段【数据库读写分离】

  主从数据库结构特点:一主多从 / 多主多从

  主从分工:主库写从库读

  主从复制步骤:

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

第六阶段【使用反向代理和CDN加速网站响应】

  CDN定义:内容分发网络

  实现思路:尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输得更快、更稳定

 

第七阶段【使用分布式文件系统和分布式数据库系统】

第八阶段【使用NoSQL和搜索引擎】

第九阶段【业务拆分】

第十阶段【分布式服务】

Web应用服务器

  WEB服务器:其职能较为单一,就是把浏览器发过来的Request请求返回Html页面。

  应用服务器:进行业务逻辑的处理。  

  常见服务器:

  • lls:早期 Web 服务器,目前小规模站点仍有应用。
  • Tomcat:开源、运行Servlet和JSP Web应用软件的,基于Java的Web应用软件容器。
  • JBOSS:基于J2EE的开放源代码的应用服务器。一般与Tomcat或Jetty绑定使用。
  • WebLogic:一种多功能、基于标准的web应用服务器,为企业构建自己的应用提供了坚实的基础。
  • Jetty:Jetty是一个开源的Servlet容器,基于Java的web容器。

响应式Web设计

定义:一种网络页面设计布局。(类似自适应布局)【创建页面的图片排版大小,可以智能地根据用户行为以及使用的设备环境进行相对应的布局】

实现方式:

  • 采用流式布局和弹性化设计:使用相对单位,设定百分比而非具体值的方式设置页面元素的大小。
  • 响应式图片:不仅要同比例缩放图片,还要在小设备上降低图片自身的分辨率

中台

  定义:一套结合互联网技术和行业特性,将企业核心能力以共享服务形式沉淀,形成“大中台、小前台”的组织和业务机制,供企业快速低成本的进行业务创新的企业架构

  本质:对企业通用能力在不同层面的沉淀,并对外能力开放

  分类:

  • 业务中台:提供重用服务,例如学员中心、课程中心之类的开箱即用可重用能力。
  • 数据中台:提供数据整合分析能力,帮助企业从数据中学习改进,调整方向。
    • 1、数据汇聚整合
    • 2、数据提纯加工
    • 3、数据服务可视化
    • 4、价值变现
  • 技术中台:提供技术重用组件能力,帮助解决基础技术平台的复用。【如:中间件、分布式存储、AI、负载均衡等基础设施。】

持久化技术【ORM】

  ORM定义:对象与关系数据之间的映射。

MDA

  核心组成:

  • Model:客观事物的抽象表示
  • Architecture:构成系统的部件、连接件及其约束的规约
  • Model-Driven:使用模型完成软件的分析、设计、构建、部署、维护等各项开发活动。

  起源:分离系统规约和平台实现的思想。

  主要目标:可移植性互通性可重用性

  核心模型:

  • 平台独立模型(PIM):具有高抽象层次、独立于任何实现技术的模型。
  • 平台相关模型(PSM):为某种特定实现技术量身定做,以可用的实现构造来描述系统的模型PS:PIM会转换成一个或多个PSM
  • 代码(code):用源代码对系统的描述(规约)。每个PSM都将被变换成代码。

标签:负载,下篇,请求,实现,软件架构,均衡,服务器,架构师,节点
From: https://www.cnblogs.com/riches/p/17703396.html

相关文章

  • 【大数据OLAP技术新书推荐】 字节跳动、阿里巴巴大厂资深架构师程序员多年实践经验总
    ClickHouse领域集大成之作-ClickHouse入门进阶实战的标准参考书-日常工作案头必备!目录《ClickHouse入门、实战与进阶》简介图书评价作者简介内容简介为何写作本书本书主要特点如何阅读本书致谢全书目录目录《ClickHouse入门、实战与进阶》内容简介为何写作本书本书主要特点......
  • java架构师主要是干什么的,要注意什么?
    Java架构师当然是专注于Java开发架构设计的工程师。这里包含两层意思:1、Java架构师限定了工程师的专业范围,专注于Java开发;2、Java架构师明确了工作职责,主要从事Java架构设计。如果往深一层探讨,则需要明白,什么是Java开发,Java架构师的主要职责是什么?什么是JavaJava是一种程序......
  • Java进阶学习之Java架构师的学习路线
    Java架构师,首先要是一个高级Java攻城狮,熟练使用各种框架,并知道它们实现的原理。Java架构师的作用就是要满足业务需求,用低的硬件网络成本和技术维护成本。Java架构师还要根据业务发展阶段,提前预见发展到下一个阶段系统架构的解决方案,并且设计当前架构时将架构的升级扩展考虑进去,做......
  • 怎么成为一名Java架构师 都需要掌握哪些技术
    怎么成为一名Java架构师?都需要掌握哪些技术?Java架构师,首先要是一个高级Java攻城狮,熟练使用各种框架,并知道它们实现的原理。jvm虚拟机原理、调优,懂得jvm能让你写出性能更好的代码;池技术,什么对象池,连接池,线程池……Java构架师需要掌握的技术:1、熟练使用各种框架,并知道它们实现......
  • java架构师是做什么的 java架构师的工作内容
    Java架构师每天的工作是什么?Java架构师估计是每个java程序员都向往的职位吧,不过成为java架构师是需要经历漫长修炼的,不过我们可以先了解一下Java架构师每天的工作内容,感兴趣的小伙伴不妨看看吧。 java架构师是做什么的java架构师的工作内容1.负责设计和建设软件系统架构(平台......
  • 系统设计(架构师)指南3系统设计面试
    3系统设计面试你刚刚获得了梦想公司梦寐以求的现场面试机会。HR给你发来了当天的日程安排。扫了一眼名单,你感觉良好,直到你的目光落到了这个面试环节--系统设计面试。系统设计面试通常让人望而生畏。可能是"设计一款知名产品X"这样含糊不清的问题。问题模棱两可,似乎宽泛得不合......
  • 高级系统架构师学习(三)软件架构设计-上篇
    一、软件架构的概念什么是架构?【暂无定论】定义:架构设计就是需求分配,即将满足需求的职责分配到组件上。本质:为软件系统提供了一个结构、行为和属性的高级抽象。【软件架构==软件体系结构】作用:是项目干系人进行交流的手段,明确了对系统实现的约束条件,决定了开......
  • 关于软件架构设计的小笔记
    设计良好的计算机软件应该是易于扩展,同时抗拒修改。这就是著名的开闭原则(OCP)。换句话说,一个设计良好的计算机系统应该在不需要修改的前提下就可以轻易被扩展。其实这也是我们研究软件架构的根本目的。如果对原始需求的小小延伸就需要对原有的软件系统进行大幅修改,那么这个系统......
  • 系统设计(架构师)指南5设计一致哈希(HASHING)
    5设计一致哈希(HASHING)要实现横向扩展,就必须在服务器之间高效、均匀地分配请求/数据。一致哈希是实现这一目标的常用技术。不过,首先让我们深入了解一下这个问题。5.1重散列(rehashing)问题如果有n台缓存服务器,平衡负载的常用方法是使用下面的散列方法:serverIndex=hash(key)%N......
  • 构建可持续性软件架构:六大设计原则
    面试题分享2023最新面试合集链接2023大厂面试题PDF面试题PDF版本java、python面试题项目实战:AI文本OCR识别最佳实践AIGamma一键生成PPT工具直达链接玩转cloudStudio在线编码神器玩转GPUAI绘画、AI讲话、翻译,GPU点亮AI想象空间史上最全文档AI绘画stablediffusion资......