19-02 基于业务量级的架构技术选型演进

news2024/11/24 19:27:38

从零开始——单服务应用

单体应用技术选型

  • (GitHub、Gitee…)搜索是否有线程的产品
  • 用最熟悉的技术,最快的速度上线
  • 如果有经费:考虑商业化解决方案

个人小程序怎么做技术选型的

  • 搜索是否有快速搭建下程序的软件
  • 技术选型
    • 后端技术选型
      • 用最熟悉的技术,达到最快的开发速度
      • MySQL、MyBatis、SoringBoot
    • 前端技术选型
      • 在这里插入图片描述

应用服务、数据服务分离

  • 企业级应用的起步阶段
  • 两个目的
    • 选择合适的技术实现项目的落地
    • 为项目未来的发展方向定好基调
    • 在这里插入图片描述

要考虑的问题

  • 运行平台的选择
  • 选择商业解决方案还是开源解决方案
  • 确定项目的研发模式
  • 确定具体使用的技术

事半功倍——引入缓存系统

要考虑的问题

  • 在哪个位置使用缓存
  • 采用什么类型的缓存
  • 采用那种缓存模式
  • 具体用什么缓存组件

缓存位置

  • 客户端缓存
    • 浏览器中的缓存
    • APP缓存
  • 网络中缓存
    • 代理服务器缓存
    • CDN缓存
  • 服务端缓存

如何确定缓存的位置

  • 没有性能瓶颈不考虑,那里慢就在那里用缓存

缓存类型

  • 内存缓存
    • 速度非常快,数据可能会丢失
    • 适用于速度要求非常高,容忍数据丢失的场景
    • 堆内缓存
      • 优点:
        • 无需序列化、反序列化
        • 性能很好
      • 缺点:
        • 会对GC造成影响
        • 容量受限于堆内存的大小
        • 一般为软引用或弱引用存储
      • 堆内缓存适用场景
        • 存储非常热的数据
  • 磁盘缓存
    • 性能比内存缓存差,数据不会丢失
    • 适用于需要持久化的场景

负载均衡

在这里插入图片描述

基于DNS的负载均衡

  • 在DNS服务器上为多个地址配置相同的解析记录
  • 优点:
    • 把负载均衡的工作交给了DNS服务器,减少了网站管理的维护工作
    • 技术实现比较灵活、方便、简单易行、成本低
    • 适用面广,能适用于大多数TCP/IP应用
  • 缺点:
    • 一般不能反映服务器当前运行状态
    • 某台服务器下线之后,即使修改了DNS记录,要想让记录生效可能需要很长时间
    • 保证DNS解析指向的目标地址高可用、地址不会经常修改
    • 一般来说,大型网站会用DNS作为一级负载均衡
      • DNS指向的IP,对应的并不是一台机器,而是高可用的服务器集群
      • dig命令可查询记录

基于反向代理的负载均衡

  • 请求经过反向代理,由反向代理组件提供负载均衡算法,计算出一个服务器地址返回
  • 代表实现
    • NGINX
    • HAProxy
    • Apache

互联网项目负载均衡器演变的典型过程(经验)

  • 项目初期:NGINX
  • 中期:结合Keepalived实现NGINX的高可用
  • 之后,再搭载LVS或F5,从而扩展多个NGINX
  • 如果一个LVS集群顶不住的饿话,会再结合DNS扩展LVS

有状态VS无状态

  • 状态:服务器是否要存储用户的登录状态
  • 服务器端是否要维护用户的会话

有状态

粘性会话

  • 当客户端在一台Web Server上登录后,以后的请求都会绑定到该Web Server实例
  • 在这里插入图片描述
  • 优缺点
    • 无需引入额外组件
    • 实现简单
    • 存在单点问题:需要额外实现故障转移
    • 可能有不均衡问题

会话共享

在这里插入图片描述

  • 使用session保持会话,多个应用实例存储到一个中央存储中去
  • 优缺点
    • 需要额外引入组件,即使任意Web应用崩溃依然可用
    • 但Session Store一旦崩溃,所有会话都会丢失

会话复制

在这里插入图片描述

  • Web Server实例之间互相复制会话
  • 优缺点
    • 无需实现故障转移
    • 无需引入额外组件
    • 会话复制消耗带宽和内存

无状态

  • 服务器端不去记录用户的登录状态:服务器端不再去维护会话
  • 用户登录时,办法一个token,这个token一般是加密的
  • 之后每个请求都会带上这个token(放在header、URL参数、Cookie中传递)
  • 有状态的缺点 = 无状态的优点
  • 无状态的缺点:
    • 一旦把token颁发给用户,就很难控制它的下线时间
      在这里插入图片描述

有状态 vs 无状态

在这里插入图片描述

读写分离

在这里插入图片描述

CDN

  • 静态文件:效果非常好
  • 动态数据:效果不佳
  • 动态内容静态化
  • 动静分离

CDN组成原理

在这里插入图片描述

CDN技术选型要考虑的问题

  • 自建 or 商用
    • 优先使用商用CDN
    • 当商用CDN满足不了业务需求,顶不住的时候,再考虑自建
    • 原因:自建很不划算
    • 小米、快手、大众点评 => 都是商用CDN
  • 如何挑选CDN
    • 速度
      • 节点数
      • 带宽能力
      • 节点分布
    • 功能
      • 加速优化

        • DNS优化
        • 在这里插入图片描述
      • 监控统计

        • 实时监控:点击率、命中率、占用流量
        • 访问日志监控
      • 安全性

        • 防盗链
        • IP黑白名单
    • 价格
      • 按带宽峰值计费
      • 按流量计费

全文检索

  • 减轻了数据库的查询压力
  • 提升应用性能,提高用户体验
  • 实现全文检索的五种路径
    • 使用数据库内置的全文搜索能力
    • 使用和数据库深度集成的全文搜索
    • 使用开源全文所搜引擎
    • 使用商用全文搜索引擎
    • 自研全文搜索引擎

使用数据库内置的全文搜索能力

在这里插入图片描述

  • 优点
    • 学习成本低
    • 方便
    • 无需引入新的组件,保持了架构上的简单性
  • 缺点
    • 搜索引擎没有和数据库分离,数据库的职责不够单一
    • 全文搜索的能力受限于数据库的查询能力
  • 不建议使用

使用和数据库深度集成的全文搜索

  • 代表实现:Sphinx
    • 可独立运行
    • 可以和MySQL、PostgreSQL深度集成
  • 选型建议
    • Sphinx在业界非常流行
    • 如果看中运维成本,同时对扩展性没有太高要求,可以尝试
  • Tips
    • Sphinx相对于其他全文搜索引擎来说,功能并不是很强
    • 国内文档不多
    • 越来越多的企业在从Sphinx往第三种模式迁移

使用开源全文所搜引擎

  • 目前最主流的方式
    • 选择丰富
    • 扩展性非常好
  • 缺点
    • 需要独立部署搜索引擎
    • 需使用搜索引擎特有语法操作搜索引擎
      • 既是缺点也有优点,缺点在于有学习成本,好处就是能够支持更加复杂的查询;另外像Elasticsearch之类的搜索引擎既支持DSL,也支持SQL
    • 搜索引擎和数据库是独立的两个软件,需要考虑数据一致性
      • 借助logstash-input-jdbc之类的插件同步
      • 应用写入数据库的同时也写到搜索引擎
  • 选型建议:可以放心使用

使用商用全文搜索引擎

  • 阿里云Open Search
  • 微软的Microsoft Azure Search
  • 成功案例不多
  • 选型建议
    • 商用产品有良好的服务,省事、省心,可以放心使用
    • 要考虑商用产品封闭性所带来的影响:例如厂商很难根据你的特殊需求专门定制

自研全文搜索引擎

  • 阿里、苏宁、万得资讯、东方财富
  • 优点:核心技术在自己手上,有更好的灵活度,遇到问题可以从底层调整与优化
  • 缺点:遂团队的技术要求会比较高,成本也非常高

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/566726.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

PX4从放弃到精通(二十五):EKF2

文章目录 前言一、主程序二、update()二、predictState()三、controlFusionModes()四、controlGpsFusion五、fuseGpsVelPos()六、fuseHorizontalVelocity()七、fuseVelPosHeight()八、calculateOutputStates()前言 PX4 1.13.2 PX4 ekf的传感器数据放在FIFO的环形缓冲区中,每…

智能综合交通(水运、航空)主题汇总(附下载链接)

根据我国现行的交通运输体制,公路以外的交通运输称为综合交通运输形式,包括铁路、航空和水运等。本部分包括航空和水运运输(铁路部分另外单独列出)。 智慧水运、航道、港口 (至2023年05月23日) 湛江市综合交…

容器编排器们的自我介绍

哈喽大家好,我是咸鱼 咸鱼在《一文带你了解容器技术的前世今生》有介绍过容器技术的由来以及Docker项目的发展 我们知道,Docker 及其他容器技术能够极大地简化应用程序的部署,做到了”开箱即用“ 俗话说:”凡是具有两面性“。容…

OSPF 5种报文、状态机、邻居建立的过程

OSPF 5种报文、状态机、邻居建立的过程 一、OSPF的5种报文二、OSPF状态机三、OSPF建立的过程 一、OSPF的5种报文 Hello 用于发现邻居,维持邻居的状态 DD DD报文有确定设备主从,同步DD序列号 包含着LSA的头部信息,有同步LSDB数据库的作用 LSA…

云原生|Kubernetes Operator测试实例

目录 一、主要代码介绍 (一)变量定义: (二)测试程序入口 (三)before函数 (四)after函数 二、实际测试 (一)块划分 (二&#x…

【数据分享】1997-2017 年中国市县级能耗与能效数据集

能源既关乎国家经济命脉,又影响人民生活水平!能源相关的研究是各个行业的热门研究话题,能源相关的数据也是经常使用的数据! 我们发现在figshare平台上分享有1997-2017 年我国市县级的能耗与能效数据,数据格式为Excel&…

CMake常用命令总结与练习

CMake常用命令总结 前言cmake_minimum_required (VERSION XX):CMake最低版本project (demo):CMake工程名add_executable(main main.c):生成可执行文件aux_source_directory(dir var):指定源文件放入变量set(val src):指定源文件放入变量include_director…

js闭包的简单应用

闭包的概念:有权访问其他函数的内部变量的函数 闭包是作用域运用的特殊场景。 注:js中自由变量的查找是在函数定义的地方向上级作用域查找,不是在执行的地方。 闭包的使用场景概况为两种,一种是函数作为参数被传递,一种…

面试官:MySQL自增主键一定是连续的吗?

测试环境: MySQL版本:8.0 数据库表:T (主键id,唯一索引c,普通字段d) 如果你的业务设计依赖于自增主键的连续性,这个设计假设自增主键是连续的。但实际上,这样的假设是错的…

还在用System.out+System.currentTimeMillis打印耗时?Arthas是你不可或缺的神器!

如何分析一下自己的web项目的性能消耗,一般我们会在开始与结束加时间相减打印出消耗时间。这种方法侵入率太高了,如果想利用arthas整体调优一下自己web项目的性能点的话,可以使用以下的步骤或思路。(当然xrebel也是一个不错的选择…

进程的创建和回收

一、进程概念:程序运行的状态 程序: 1.存放在磁盘上的指令和数据的有序集合(文件) 2.静态的 进程: 1.执行一个程序所分配的资源的总称 2.动态的 进程和程序内容区别 进程包含的内容: BSS段&#xf…

Buffer Pool

Buffer Pool Innodb 存储引擎设计了一个缓冲池,来提升读写的性能。 在 MySQL 启动的时候,InnoDB 会为 Buffer Pool 申请一片连续的内存空间,然后按照默认的16KB的大小划分出一个个的页, Buffer Pool 中的页就叫做缓存页。此时这些…

java 社区人口管理系统Myeclipse开发mysql数据库web结构jsp编程计算机网页项目

一、源码特点 java 社区人口管理系统是一套完善的java web信息管理系统,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为 TOMCAT7.0,Myeclipse8.5开发,数据库为Mysql5.0…

Linux安装Zookeeper、Hadoop、Hive、Hbase全家桶系列

目录 Linux安装配置Zookeeper Linux安装配置Hadoop Linux安装Hbase Linux安装配置Zookeeper 新建文件夹 mkdir /home/zookeeper 下载到指定文件夹 官网 Apache ZooKeeper wget https://dlcdn.apache.org/zookeeper/zookeeper-3.8.1/apache-zookeeper-3.8.1-bin.tar.gz…

Jmeter的JSON断言

JSON断言是测试工作中经常用到的一种断言方法,一般用于断言某个字段值是否等于我们指定的值。所以JSON断言只能针对响应结果为applicaton/json格式的进行断言操作。 如果是其他类型(如:Test、html),则无法使用这种方式…

【神经网络】tenorflow实验11--人工神经网络(2)

1. 实验目的 ①掌握梯度下降法的优化算法; ②能够使用tf.keras构建Sequential模型,完成多分类任务。 2. 实验内容 ①下载MNIST数据集,建立神经网络模型,实现对MNIST手写数字数据集的识别,调整超参数和训练参数&…

公网对讲SDK——对讲应用场景

anyRTC 公网对讲 SDK的发布,解决了开发者想做公网对讲应用但没有技术的困境;SDK全平台支持的特性,让开发者可以在任何平台接入对讲能力;同时因为包体积小、对业务零入侵等特性被运用到各行各业中,下面咱们就来聊一聊公…

ansible——利用主机模式选择主机

一:主机模式:对目标主机的一种选择方式 1.以student用户身份并使用student作为密码登录workstations ssh studentworkstation 2.创建projects-host项目文件,并下载ansible配置文件 lab projects-host start 3.在 workstation上更改到/home…

恭喜星球又一名小伙伴上岸大厂

大家好,我是冰河~~ 星球里有不少小伙伴经过自己的努力,认真学习和总结,最终拿到了自己心仪的大厂Offer!本来想给大家分享下的,但是,过去挺长一段时间冰河都处于“全天候工作状态”,经常加班到晚…

业务连续性管理的重要性体现在哪里?

业务连续性管理的重要性体现在哪里?随着全球化、信息化和市场竞争加剧,企业面临的风险越来越多样化、复杂化。突发事件如自然灾害、供应链中断、网络攻击等都有可能对企业生产经营带来巨大影响,甚至导致公司破产倒闭。因此,保证业…