【完结13章】高性能多级网关与多级缓存架构落地实战

huiguniang2008 · · 496 次点击 · 开始浏览    置顶
这是一个创建于 的主题,其中的信息可能已经有所发展或是发生改变。

【完结13章】高性能多级网关与多级缓存架构落地实战 给大家分享一套网关课程——高性能多级网关与多级缓存架构落地实战,已完结13章,附源码+电子书。 多级网关与多级缓存架构是一种常用的系统架构设计模式,用于提高系统性能和可扩展性。下面详细介绍一下这两种架构。 多级网关架构(Multi-tier Gateway Architecture): 多级网关架构是指将系统划分为多个层次或级别的网关,每个网关层次负责执行特定的功能。每个网关层次都有其特定的职责,可以是协议转换、数据加工、请求分发等。不同的网关层次可以部署在不同的服务器上,通过网络连接起来。 多级网关架构的主要优点包括: 1. 模块化和可扩展性:通过将系统划分为多个网关层次,可以方便地扩展和替换某个特定层次的功能模块,而无需影响整个系统。 2. 高可用性:通过将不同层次的网关部署在不同的服务器上,可以提高系统的可用性和容错性。当某个网关层次发生故障时,其他层次可以继续工作。 3. 安全性:通过在每个网关层次上实施相应的安全策略,可以提高系统的安全性和防护能力。不同层次的网关可以执行不同的安全检查和过滤操作。 多级缓存架构(Multi-level Cache Architecture): 多级缓存架构是指在系统中引入多个层次的缓存,用于提高系统的性能和响应速度。每个层次的缓存可以根据数据的使用频率和访问模式进行优化配置,以达到最佳的性能表现。 多级缓存架构的主要优点包括: 1. 提高读取性能:通过在多个层次上缓存数据,可以大大提高读取数据的速度。近距离的缓存层次(如内存缓存)可以快速响应请求,而远距离的缓存层次(如磁盘缓存)可以提供更大的存储容量。 2. 减轻后端负载:通过减少对后端数据源的直接访问,多级缓存可以降低后端系统的负载压力,提高系统的整体性能和可扩展性。 3. 改善用户体验:多级缓存可以降低网络延迟和响应时间,提高用户访问网站或应用的体验。用户可以更快地获取到所需的数据。 在每个分组下分别生成一个业务API,两个API均设置为APP鉴权模式,假设两个API相关属性为: API1: Method: GET Path: /business1 后端地址为: http://backend1.alicloudapi.com:8080/business1 API2 Method: GET Path: /business2 后端地址为: http://backend2.alicloudapi.com:8080/business2 创建路由插件,将路由插件绑定到分发API上。 --- parameters: target: "Query:target" routes: - name: backend1 condition: "$target = 'resource1'" backend: type: "HTTP" address: "17ff4c9189004a1d87b557606b767334-cn-huhehaote-intranet.alicloudapi.com" path: "/business1" - name: backend2 condition: "$target = 'resource2'" backend: type: "HTTP" address: "c6e984b2dd784c0fb843f7c2a8878b15-cn-huhehaote-intranet.alicloudapi.com" path: "/business2" 这个路由组件的意思是,绑定了这个插件的API,收到请求的时候,判断请求中query参数target,如果target的值为resource1,就给17ff4c9189004a1d87b557606b767334-cn-huhehaote-intranet.alicloudapi.com发送一个path为/business1的HTTP请求,target值为resource2时情况类似。 线下会议详情弹窗对应的是offline_meeting-info.vue页面,我们先来看看模型层都定义了什么东西? data: function() { return { visible: false, title: null, date: null, place: null, start: null, end: null, members: [], present: [], unpresent: [], status: null }; }, 会议概要信息是弹窗页面init()函数发出Ajax请求获取的,所以我们可以动手把这个init()给实现一下。 init: function(id, status) { let that = this; that.visible = true; that.$nextTick(() => { let data = { id: id, status: status }; that.$http('meeting/searchMeetingInfo', 'POST', data, true, function(resp) { that.title = resp.title; that.date = resp.date; that.place = resp.place; that.start = resp.start; that.end = resp.end; if (resp.status == 1) { that.status = '待审批'; } else if (resp.status == 3) { that.status = '未开始'; } else if (resp.status == 4) { that.status = '进行中'; } else if (resp.status == 5) { that.status = '已结束'; } if (resp.hasOwnProperty('members')) { that.members = JSON.parse(resp.members); } if (resp.hasOwnProperty('present')) { that.present = JSON.parse(resp.present); } if (resp.hasOwnProperty('unpresent')) { that.unpresent = JSON.parse(resp.unpresent); } }); }); } 我们首先看一下模型层定义的变量,除了有查询条件之外,还有与分页相关的变量。总体上来看,跟用户管理页面的模型层差不多。 data: function() { return { dataForm: { date: null, mold: '全部会议' }, dataList: [], pageIndex: 1, pageSize: 10, totalCount: 0, dataListLoading: false, addVisible: false, dataRule: {} }; }, 接下来我们看看前端页面的表单控件是怎么定义的。当用户点击查询按钮的时候,触发点击事件对应的回调函数是searchHandle(),这个函数是我们一会儿要声明的。 <el-form :inline="true" :model="dataForm" :rules="dataRule" ref="dataForm" class="form"> <el-form-item prop="date"> <el-date-picker v-model="dataForm.date" type="date" placeholder="选择日期" class="input" size="medium" ></el-date-picker> </el-form-item> <el-form-item> <el-button size="medium" type="primary" @click="searchHandle()">查询</el-button> <el-button size="medium" type="danger" @click="addHandle()">会议申请</el-button> </el-form-item> <el-form-item class="mold"> <el-radio-group v-model="dataForm.mold" size="medium" @change="changeHandle"> <el-radio-button label="全部会议"></el-radio-button> <el-radio-button label="我的会议"></el-radio-button> </el-radio-group> </el-form-item> </el-form> ![QQ截图20231215144445.png](https://static.golangjob.cn/231215/0ce905f78423605f9b02ec337be7ae23.png)

有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

496 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传