“NGINX邮件组历史”论坛上线了
NGINX 向云原生演进,All in OpenNJet
背景
长久以来,forum.nginx.org 作为nginx邮件讨论组的论坛形式,是NJet以及广大的NGINX开发人员交流、讨论的主要资源站点,尤其是方便的搜索能力,使得开发人员可以方便的查询历史讨论信息。但很遗憾,该站点已经下线,F5推出了community.nginx.org, 但并没有把历史数据迁移过来。
OpenNJet因此决定从NGINX email 讨论组的邮件归档中,重构一个论坛,便于开发人员进行搜索历史数据。同时,该论坛直接采用了NJet实现的python应用服务器框架,也是NJet能力的一个证明
设计
部署架构
出于对NJet应用服务器能力的展示要求,NJet选择了基于python语言,django架构的开源论坛软件spirit(https://github.com/nitely/Spirit),不需要采用传统的 nginx 代理+python应用服务器的模式,spirit安装后,将直接在NJet进程内部运行,如下图展示
Email archive到论坛的转换模型
受限于spirit的模型, email archive转换为论坛时,不能够根据email进行树状转换,而仅仅实现了一层的扁平转换。举例来说,Email A 首先创建了一个主题的讨论邮件,后续Email B ,C 做了回复, Email D 针对Email C做了回复。所有这4封邮件,会转换为一个topic(即通过邮件A 的subject创建的topic)的讨论,该topic下会存在4条讨论。
论坛的用户直接从邮件的发送者转化而来,发送者的姓名+邮件地址构建为一个唯一用户
配置实例
python环境和spirit项目初始化
安装pyenv 以及建立虚拟环境与安装django-spirit等包
安装与配置数据库
配置njet 使用wsgi启动spirit论坛
Bash load_module modules/njt_python_wsgi_module.so; python_stack_size 2m; http { ... server { server_name 192.168.40.40; listen 192.168.40.40:80; location / { root /home/njet/spirit/nginxform; wsgi nginxform; } location /static/ { root /home/njet/spirit/nginxform/; expires 1y; add_header Cache-Control public; } } <br/>... }
NJet启动
配置PYTHONPATH 后即可
Bash export PYTHONPATH="/home/njet/.pyenv/versions/spirit-env/lib/python3.8/site-packages:/home/njet/spirit/nginxform" /usr/local/njet_spirit/sbin/njet -p /usr/local/njet_spirit -c conf/njet.conf
参考说明
1.为什么采用python 应用直接部署在NJet的架构
该部署模式,具备传统的部署模式有部署简便、开发简化、高性能的优势。
部署简便:
避免了proxy+python应用服务器部署架构的由proxy处理静态资源,应用服务器出来动态请求的模型,仅仅一个server就可以利用NJet的高效IO处理静态资源
开发简化:
python应用开发人员,仅仅编写同步调用的代码,无需考虑线程、异步调用, 业务请求就可以得以在NJet内部以类似协程的模型执行,IO操作不会被阻塞,从而实现业务的并行
高性能:
NJet中运行python 应用会比常见的python应用服务器有10倍以上的性能提升
2.当前上线nginx-dev的历史
NGINX email archive从https://mailman.nginx.org/pipermail/nginx-devel/获得
3.从NGINX email archive转换为论坛的脚本,借助于deepseek编写完成,如果有类似的需求,可以联系 njet-user@njet.org.cn 获取
4.Spirit 论坛软件的安装,可以参考其readdocs站点
其支持多种数据库连接,在本项目中,选择了mysql数据库,并选择了基于纯python实现的mysql connector驱动,是因为可以利用NJet特有的“同步编写,异步IO执行能力”
5.请直接访问 https://forum.njet.org.cn
NJet 应用引擎通过内核重构实现了独特的运行时动态配置加载能力,是新一代高性能 Web 应用引擎。NJet 拥有高性能数据面处理能力,将集群、高可用、主动健康检查、声明式 API 等多种辅助功能,通过 NJet 独特的副驾驶 CoPilot 服务框架调度,从而方便功能扩展,隔离管理 / 控制功能对数据面的影响,NJet 应用引擎性能超过 CNCF 推荐 Envoy 应用引擎的三倍。 邮件组 官网

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Node.js技术原理分析系列——Node.js的perf_hooks模块作用和用法
Node.js 是一个开源的、跨平台的 JavaScript 运行时环境,它允许开发者在服务器端运行 JavaScript 代码。Node.js 是基于 Chrome V8 引擎构建的,专为高性能、高并发的网络应用而设计,广泛应用于构建服务器端应用程序、网络应用、命令行工具等。 本系列将分为9篇文章为大家介绍 Node.js 技术原理:从 Node.js调试能力分析到如何在Node.js中新增一个内置模块 ,从性能分析工具 perf_hooks 的用法到 Chrome DevTools 的性能问题剖析,再到 ABI 稳定的理解、基于 V8 封装 JavaScript 运行时、模块加载方式探究、内置模块外置以及 Node.js addon 的全面解读等主题,每一篇都干货满满。 在上一节中我们探讨了如何在Node.js中新增一个内置模块,在本节中则主要分享Node.js的perf_hooks模块作用和用法,本文内容为本系列第3篇,由体验技术团队屈金雄原创。以下为正文内容。 前言 在 Node.js 中,如何测量一段代码的耗时呢? 比如 for 循环遍历 100 次的耗时。让我们带着这个问题...
- 下一篇
Elasticsearch 自动补全搜索 - autocomplete
作者:来自 ElasticAmit Khandelwal 探索处理自动完成的不同方法,从基础到高级,包括输入时搜索、查询时间、完成建议器和索引时间。 在本文中,我们将介绍如何避免严重的性能错误、Elasticsearch 默认解决方案为何不适用以及重要的实施注意事项。 所有现代网站都在其搜索栏上提供自动补全(autocomplete)功能(输入时搜索),以改善用户体验(没有人愿意输入整个搜索词……)。自动补全必须比标准搜索更快,因为自动完成的全部目的是在用户输入时开始显示结果。如果延迟较高,则会导致用户体验不佳。 以下是著名问答网站 Quora 上的自动完成搜索示例。这是一个很好的自动完成示例:搜索 “elasticsearch auto” 时,以下帖子开始显示在搜索栏中: 注意搜索结果中,有与 Elasticsearch 的自动扩展、自动标记和自动完成功能相关的问题。用户可以进一步输入一些字符来细化搜索结果。 Elasticsearch 中自动完成的各种方法/输入时搜索 有多种方法可以实现自动完成功能,大致分为四大类: Search-as-you-type Query time Co...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS7,CentOS8安装Elasticsearch6.8.6
- SpringBoot2整合Redis,开启缓存,提高访问速度
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- 设置Eclipse缩进为4个空格,增强代码规范
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS8安装Docker,最新的服务器搭配容器使用
- SpringBoot2全家桶,快速入门学习开发网站教程
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作