百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 优雅编程 > 正文

前端配置化平台——快速搞定活动页面

sinye56 2024-10-25 16:14 5 浏览 0 评论

痛点及要求

- 成本比较高:广告活动平台,一直以来都是变化最多耗用人力最多的一件事情,而且每次都要研发配合去开发新的页面,每个页面又只使用两三天。

- 业务对平台的基本要求:C端的稳定性,B端的灵活性。

- 技术对平台的要求:服务稳定要在 99.999%


项目介绍

配置化平台主要功能是可以灵活、方便、快捷生成活动等相关页面,降低开发成本,新活动生成无需额外的开发工作,只需简单配置即可快速上线。此次介绍内容分别从后台配置及用户端阐述,在开始之前先简单介绍一下 Openresty 和 Lua。


Openresty

OpenResty(又称:ngx_openresty)是一个基于 Nginx 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项,用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关。


OpenResty 的目标是让你的 Web 服务直接跑在 Nginx 服务内部,充分利用 Nginx 的非阻塞 I/O 模型,不仅仅对 HTTP 客户端请求,甚至于对远程后端诸如 MySQL、PostgreSQL、Memcached 以及 Redis 等都进行一致的高性能响应。所以对于一些高性能的服务来说,可以直接使用 OpenResty 访问 Mysql 或 Redis等,而不需要通过第三方语言(PHP、Python、Ruby)等来访问数据库再返回,这大大提高了应用的性能。


Lua

Lua 是一种轻量小巧的脚本语言,用标准 C 语言编写并以源代码形式开放,其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。


Lua特性


- 轻量级:它用标准 C 语言编写并以源代码形式开放,编译后仅仅一百余 K,可以很方便地嵌入别的程序里。

- 可扩展:Lua 提供了非常易于使用的扩展接口和机制,由宿主语言(通常是 C 或C++)提供这些功能。Lua 可以使用它们,就像是本来就内置的功能一样。

- 其它特性:

  • 支持面向过程(procedure-oriented)编程和函数式编程(functional programming);
  • 自动内存管理。只提供了一种通用类型的表(table),用它可以实现数组,哈希表,集合,对象;
  • 语言内置模式匹配;闭包(closure);函数也可以看做一个值;提供多线程(协同进程,并非操作系统所支持的线程)支持;
  • 通过闭包和 table 可以很方便地支持面向对象编程所需要的一些关键机制,比如数据抽象,虚函数,继承和重载等。

应用场景

  • 游戏开发
  • 独立应用脚本
  • Web 应用脚本
  • 扩展和数据库插件,如:MySQL Proxy 和 MySQL WorkBench
  • 安全系统,如入侵检测系统

后台配置


后台配置相关流程中涉及 Openresty、Nginx、Lua 脚本、ElasticSearch、Redis 等。



Nginx配置

部分 nginx.config 配置如下:

1、Server 配置



在 server 配置中还导入了 locations 下的部分配置,配置如下:


当请求 url 匹配到包含 /example/ 时,对于请求数据进行处理,其中包含:

  1. 单条JSON限制为5M
  2. lua对于请求访问阶段处理
  3. 转发到Es服务


单条 JSON 限制以及请求方式的拦截都可以在配置当中清晰地了解到,再看一下 Lua 到底做了些什么?


2、Lua 相关


在此配置化平台中,Lua 的主要作用是为了同步数据到 Redis 中,这样当用户端访问数据的时候,如果是已经存在 Redis 中且未过期的情况下,那么将会直接读取 Redis 中的数据,而不是通过 ES 服务来获取数据。


接下来看一下具体实现。首先,在 location 引入 lua 相关的配置,通过 access_by_lua_file 来嵌入 lua 相关处理。



(1)链接 Redis


(2)PUT、POST请求数据缓存


链接 Redis 成功之后,开始针对请求访问进行处理,如果是 PUT、POST 请求对数据进行缓存处理,并设置缓存过期时间,代码如下:



(3)DELETE 请求清除缓存


当请求方式为 DELETE 时,将数据从 Redis 数据中进行清除,并将缓存过期时间设置为0,代码如下:

ElasticSearch


ElasticSearch,简称 ES。ES 是一个开源的高扩展的分布式全文搜索引擎。它可以近乎实时地存储、检索数据。本身扩展性很好,可以扩展到上百台服务器,处理 PB 级别的数据。ES 也是用 Java 开发并使用 Lucene 作为其核心来实现所有索引和搜索的功能,但是他的目的是通过简单 RESTful API来隐藏 Lucene 的复杂性,从而让全文搜索变得简单。


ElasticSearch 对比传统关系型数据库:


- Elasticsearch-head 插件


对于 ES 具体的数据我们可以通过 elasticsearch-head 插件来查看索引、类型、分片、文档等信息,如下图所示:


- ES 后台配置


以栏目配置为例,其中包含 settings 中的分片设置,mappdings 中针对 menu 栏目配置的相关字段,elasticsearch-head 插件中的部分索引信息如下:


用户端



此前,我们通过配置化平台后台配置一些相关活动相关的数据,并存放在 ES 服务以及Redis 中。在用户端时,当有用户访问到我们生成好的活动页面时,首先在 Nginx 中通过 content_by_lua_file 配置使用 Lua 对于活动配置相关的请求处理,对于非 GET 方式的请求将会直接返回 403,否则会在 Redis 中去查询相关的数据并返回到用户端。


- 用户端 Nginx 中 server 配置



- Lua 在用户端的请求访问处理


在后台配置中已经提到 Lua 链接 Redis 以及针对不同的请求方式的拦截处理,接下来看一下在用户端相关处理,代码如下:



可以看到对于非 Get 方式的请求进行拦截,并返回 403,否则将链接 Redis,代码如下:


相关推荐

Linux在线安装JDK1.8

首先在服务器pingwww.baidu.com查看是否可以连网然后就可以在线下载一、下载安装JDK1.81、在下载安装的同时做好一些准备工作...

Linux安装JDK,超详细

1、了解RPMRPM是Red-HatPackageManager(RPM软件包管理器)的缩写,这一文件格式名称虽然打上了RedHat的标志,但是其原始设计理念是开放式的,现在包括OpenLinux...

Linux安装jdk1.8(超级详细)

前言最近刚购买了一台阿里云的服务器准备要搭建一个网站,正好将网站的一个完整搭建过程分享给大家!#一、下载jdk1.8首先我们需要去下载linux版本的jdk1.8安装包,我们有两种方式去下载安装...

Linux系统安装JDK教程

下载jdk-8u151-linux-x64.tar.gz下载地址:https://www.oracle.com/technetwork/java/javase/downloads/index.ht...

干货|JDK下载安装与环境变量配置图文教程「超详细」

1.JDK介绍1.1什么是JDK?SUN公司提供了一套Java开发环境,简称JDK(JavaDevelopmentKit),它是整个Java的核心,其中包括Java编译器、Java运行工具、Jav...

Linux下安装jdk1.8

一、安装环境操作系统:CentOSLinuxrelease7.6.1810(Core)JDK版本:1.8二、安装步骤1.下载安装包...

Linux上安装JDK

以CentOS为例。检查是否已安装过jdk。yumlist--installed|grepjdk或者...

Linux系统的一些常用目录以及介绍

根目录(/):“/”目录也称为根目录,位于Linux文件系统目录结构的顶层。在很多系统中,“/”目录是系统中的唯一分区。如果还有其他分区,必须挂载到“/”目录下某个位置。整个目录结构呈树形结构,因此也...

Linux系统目录结构

一、系统目录结构几乎所有的计算机操作系统都是使用目录结构组织文件。具体来说就是在一个目录中存放子目录和文件,而在子目录中又会进一步存放子目录和文件,以此类推形成一个树状的文件结构,由于其结构很像一棵树...

Linux文件查找

在Linux下通常find不很常用的,因为速度慢(find是直接查找硬盘),通常我们都是先使用whereis或者是locate来检查,如果真的找不到了,才以find来搜寻。为什么...

嵌入式linux基本操作之查找文件

对于很多初学者来说都习惯用windows操作系统,对于这个系统来说查找一个文件简直不在话下。而学习嵌入式开发行业之后,发现所用到的是嵌入式Linux操作系统,本想着跟windows类似,结果在操作的时...

linux系统查看软件安装目录的方法

linux系统下怎么查看软件安装的目录?方法1:whereis软件名以查询nginx为例子...

Linux下如何对目录中的文件进行统计

统计目录中的文件数量...

Linux常见文件目录管理命令

touch用于创建空白文件touch文件名称mkdir用于创建空白目录还可以通过参数-p创建递归的目录...

Linux常用查找文件方法总结

一、前言Linux系统提供了多种查找文件的命令,而且每种查找命令都具有其独特的优势,下面详细总结一下常用的几个Linux查找命令。二、which命令查找类型:二进制文件;...

取消回复欢迎 发表评论: