🔬
OpenResty 最佳实践
  • 序
  • 入门篇
  • Lua 入门
    • Lua 简介
    • Lua 环境搭建
    • Lua 编辑器选择
    • 基础数据类型
    • 表达式
    • 控制结构
      • if/else
      • while
      • repeat
      • for
      • break,return 和 goto
    • Lua 函数
      • 函数的定义
      • 函数的参数
      • 函数返回值
      • 全动态函数调用
    • 模块
    • String 库
    • Table 库
    • 日期时间函数
    • 数学库函数
    • 文件操作
  • Lua 高阶
    • 元表
    • 面向对象编程
    • 局部变量
    • 判断数组大小
    • 非空判断
    • 正则表达式
    • 虚变量
    • 抵制使用 module() 定义模块
    • 调用代码前先定义函数
    • 点号与冒号操作符的区别
    • module 是邪恶的
    • FFI
    • 什么是 JIT
  • Nginx
    • Nginx 新手起步
    • location 匹配规则
    • 静态文件服务
    • 日志
    • 反向代理
    • 负载均衡
    • 陷阱和常见错误
  • OpenResty
    • 环境搭建
      • Windows 平台
      • CentOS 平台
      • Ubuntu 平台
      • Mac OS X 平台
    • Hello World
    • 与其他 location 配合
    • 获取 uri 参数
    • 获取请求 body
    • 输出响应体
    • 日志输出
    • 简单 API Server 框架
    • 使用 Nginx 内置绑定变量
    • 子查询
    • 不同阶段共享变量
    • 防止 SQL 注入
    • 如何发起新 HTTP 请求
    • 如何完成 bit 操作
      • 一,复习二进制补码
      • 二,复习位运算
      • 三,LuaJIT 和 Lua BitOp Api
      • 四,位运算算法实例
      • 五,Lua BitOp 的安装
  • LuaRestyRedisLibrary
    • 访问有授权验证的 Redis
    • select+set_keepalive 组合操作引起的数据读写错误
    • redis 接口的二次封装(简化建连、拆连等细节)
    • redis 接口的二次封装(发布订阅)
    • pipeline 压缩请求数量
    • script 压缩复杂请求
    • 动态生成的 lua-resty-redis 模块方法
  • LuaCjsonLibrary
    • json 解析的异常捕获
    • 稀疏数组
    • 空 table 编码为 array 还是 object
  • PostgresNginxModule
    • 调用方式简介
    • 不支持事务
    • 超时
    • 健康监测
    • SQL 注入
  • LuaNginxModule
    • 执行阶段概念
    • 正确的记录日志
    • 热装载代码
    • 阻塞操作
    • 缓存
    • sleep
    • 定时任务
    • 禁止某些终端访问
    • 请求返回后继续执行
    • 调试
    • 请求中断后的处理
    • 我的 lua 代码需要调优么
    • 变量的共享范围
    • 动态限速
    • shared.dict 非队列性质
    • 正确使用长链接
    • 如何引用第三方 resty 库
    • 典型应用场景
    • 怎样理解 cosocket
    • 如何安全启动唯一实例的 timer
    • 如何正确的解析域名
  • LuaRestyDNSLibrary
    • 使用动态 DNS 来完成 HTTP 请求
  • LuaRestyLock
    • 缓存失效风暴
  • OpenResty 与 SSL
    • HTTPS 时代
    • 动态加载证书和 OCSP stapling
    • TLS session resumption
  • 测试
    • 代码静态分析
    • 单元测试
    • 代码覆盖率
    • API 测试
    • 性能测试
    • 持续集成
    • 灰度发布
      • 分流引擎设计
      • 控制台开发
      • 向运维平台发展
  • Web 服务
    • API 的设计
    • 数据合法性检测
    • 协议无痛升级
    • 代码规范
    • 连接池
    • C10K 编程
    • TIME_WAIT 问题
    • 与 Docker 使用的网络瓶颈
  • 火焰图
    • 什么是火焰图
    • 什么时候使用
    • 如何安装火焰图生成工具
    • 如何定位问题
    • 拓展阅读
    • FAQ
Powered by GitBook
On this page
  • 技术选型
  • Web页面渲染
  • 后端框架
  • webssh
  • 更新发布
  • 工作流
  • k8s
  • 其他
Edit on GitHub
  1. 测试
  2. 灰度发布

控制台开发

Previous分流引擎设计Next向运维平台发展

Last updated 2 years ago

一般一个复杂些的软件都需要配套一个 Web 控制台,方便人类进行配置和管理。

一个 Web 控制台的开发说容易也很容易,说复杂也很复杂,主要是看想做成什么样子。简单有简单做法复杂有复杂做法。

我这里主要讲讲我的控制台是怎么做出来的,不讲细节了。

这里先展示下功能架构是如何的

技术选型

为了统一技术栈,我并没有选择 Java 而是同样使用 OpenResty + MySQL + Redis 的结构。 目前 Redis 并不放太多数据,只放一些临时使用的需要持久化的数据,比如 Session,监控告警当前值。

Web页面渲染

由于几年前 vue 类的前端并不流行,我选择了使用 resty。template 做后端渲染。

后端框架

找了找后端框架相对有名成熟的是 lor 所以就使用了。另外添加了点模块,比如权限校验,请求参数校验。

webssh

目前使用的是 gotty 做能力实现,权限校验在 OpenResty 进行拦截判断

更新发布

最初我使用的是 ssh 完成应用更新的,后来发现 Ansible 更加的简便好用,也就使用 Ansible 来做更新发布了。

这里需要 着重介绍 的是,更新过程,如下:

  • 首先,更新分发规则到不更新的集群中;

  • 然后,执行更新和回退的;

  • 最后,也要用自动化手段验证这个集群更新是否成功。

这块后面讲。

工作流

工作流其实就是一个 ToDo List 顺序执行,主要在于配置好先后关系,依赖关系,顺序执行下去,减少人工操作带来的不确定性。和脚本差不多的样子。

k8s

使用 k8s 对系统进行云化,特别是内部私有云真的是很简单很方便。这里不得不安利一下了...

因为不适用分布式文件系统的情况下,一切都那么的简单明了。学习下网络模型,API 接口,k8s 的原理概念就好。

其他

其实一个控制台做起来是非常耗时的,一点界面调整,样式调整都要反复修改,或者接口修改。

考虑怎么展现比较合理又易用是需要很多思考的...

我这里由于是多年前的后端渲染模型,所以相对简单点,页面主要部分使用一个 div。

Get 后端渲染后的 html 页面插入这个 div 里面就完成主要界面展现了,虽然也在考虑使用 vue 实现,但是前端改变有点太大了不太划算。

更多其他什么的也不知道描述什么了。有想我写的联系我后面补充吧。