openresty 学习笔记小结:综合应用实例
这个综合实验实现的功能其实很简单,用户访问一个页面,显示一个默认页面。输入参数(post或者get都可以),如果参数在数据库查询得到并满足一定条件,根据数据库记录的类型调转到不同页面,并记录下访问者的IP并记录到数据库,参数不符合要求返回默认页面。
其实也就用到之前记录下的那些功能点,这个实验也就被用在本网的www入口
这个综合实验实现的功能其实很简单,用户访问一个页面,显示一个默认页面。输入参数(post或者get都可以),如果参数在数据库查询得到并满足一定条件,根据数据库记录的类型调转到不同页面,并记录下访问者的IP并记录到数据库,参数不符合要求返回默认页面。
其实也就用到之前记录下的那些功能点,这个实验也就被用在本网的www入口
GIT操作小结,从一般常用操作,到有时候我们fork一个项目(比如本博就是fork了typecho)并做些修改提交,而原项目也做了些更新,修复了一下BUG等,那我希望跟随原项目更新的操作,还有子模块的使用,比如我是把自己写的主题和插件作为子模块添加,子模块都是放在oschina的私有库,那么这里需要添加子模块的操作和在拉取项目时把子模块也一起拉下来(这样也才可以运用到上篇写的自动部署)
代码提交需要版本控制,一方面是协同开发所必须,一方面也是可以有效做到代码保全和版本回退,再高级点还是可以通过分支或者子模块的形式减少重复工作量。
但代码开发完成后进行服务器部署的过程中,或者在生产过程中遇到需要紧急进行修改的情况下,又如何保证代码的完整性,和确保开发人员有对临时改动进行记录和准备好改动的回退方法。
GIT作为功能强大的版本控制工具,提供了Webhooks和Deploy Keys的功能,可以轻松实现通过git进行服务器部署。同时因为如果部署代码都是通过GIT进行提交,也有效的保证了代码的完整性和可回退。下面以gitlab为例记录具体的实现方法
要写一个可以使用的python程序还需要比如日志输出,读取配置文件,作为守护进程运行等
使用自带的ConfigParser模块
import os
import ConfigParser
获取配置文件路径并进行读取
path = os.path.realpath(__file__)
path = os.path.dirname(path)
configPath = path + '/config.cfg'
config = ConfigParser.ConfigParser()
config.read(configPath)
使用方法
agentConfig = {}
agentConfig['MYSQLport'] = config.get('MySQL', 'port')
python使用pika扩展库操作RabbitMQ的流程梳理。
作为生产者
客户端投递消息到exchange。
作为消费者
客户端通过队列接收消息,处理后进行应答。
之前通过比较选择,决定采用RabbitMQ这种消息队列来做中间件,目的舒缓是为了让整个架构的瓶颈环节。这里是做具体实施,用lua访问RabbitMQ消息队列。
RabbitMQ消息队列有几个比较重要的概念:生产者Producer,消费者Consumer,交换器Exchanges,队列Queues
毕竟redis是作为缓存,供程序的快速读写,虽然reidis也可以做持久化保存,但还是需要一个做数据存储的数据库。比如首次查询数据在redis查询不到则查询mysql,再将查询结果写过redis供下次查询。保存数据也可以先写入redis再通过队列使用另外的程序异步写入mysql。
后面会逐步把openresty写入rabbitmq和python通过订阅rabbitmq的队列将数据写入mysql得方法都整理一下。
先看看openresty如何对mysql进行连接和操作,并进行二次封装
openresty 因其非阻塞的调用,令服务器拥有高性能高并发,当涉及到数据库操作时,更应该选择有高速读写速度的redis进行数据处理。避免其应为读写数据而造成瓶颈。
openresty 默认就带了redis的库,这里先梳理下其自带redis连接库的操作流程,再根据存在问题进行二次封装。