<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          MySQL-fifo-Plugin進(jìn)程間通信解決方案

          聯(lián)合創(chuàng)作 · 2023-09-30 20:33

          MySQL fifo Plugin 是數(shù)據(jù)庫(kù)與其他第三方應(yīng)用程序進(jìn)程間通信解決方案。

          1. 背景

          你是否有這樣的需求:

          你需要監(jiān)控訪問(wèn)網(wǎng)站的IP,當(dāng)同一個(gè)IP地址訪問(wèn)次數(shù)過(guò)多需要做出處理,例如拉黑,直接丟進(jìn)iptables 防火墻規(guī)則連中。你的做法只能每個(gè)一段時(shí)間查詢一次數(shù)據(jù)庫(kù),并且判斷是否滿足拉黑需求?

          你是否需要監(jiān)控某些數(shù)據(jù)發(fā)生變化,并通知其他程序作出處理。例如新聞內(nèi)容修改后,需要立即做新頁(yè)面靜態(tài)化處理,生成新的靜態(tài)頁(yè)面

          你使用數(shù)據(jù)庫(kù)做隊(duì)列,例如發(fā)送郵件,短信等等。你要通知發(fā)送程序?qū)δ切┦謾C(jī)或者短線發(fā)送數(shù)據(jù)

          2. 解決思路

          需要讓數(shù)據(jù)庫(kù)與其他進(jìn)程通信,傳遞信號(hào)

          例如,發(fā)送短信這個(gè)需求,你只要告訴發(fā)短信的機(jī)器人發(fā)送的手機(jī)號(hào)碼即可,機(jī)器人永遠(yuǎn)守候那哪里,只要命令一下立即工作。

          監(jiān)控?cái)?shù)據(jù)庫(kù)變化的需求原理類(lèi)似,我們需要有一個(gè)守護(hù)進(jìn)程等待命令,一旦接到下達(dá)命令便立即生成需要的靜態(tài)頁(yè)面

          這里所提的方案是采用 fifo(First In First Out) 方案,通過(guò)管道相互傳遞信號(hào),使兩個(gè)進(jìn)程協(xié)同工作,這樣的效率遠(yuǎn)比定時(shí)任務(wù)高許多。fifo 是用于操作系統(tǒng)內(nèi)部進(jìn)程間通信,如果跨越操作系統(tǒng)需要 使用Socket,還有一個(gè)新名詞MQ(Message queue).

          這里只做 fifo 演示, 將本程序改為 Socket 方案,或者直接集成成熟的 MQ 也是分分鐘可以實(shí)現(xiàn)。

          3. Mysql plugin

          我開(kāi)發(fā)了幾個(gè) UDF, 共4個(gè) function

          UDF

          fifo_create(pipename)

          創(chuàng)建管道.成功返回true,失敗返回flase.

          fifo_remove(pipename)

          刪除管道.成功返回true,失敗返回flase.

          fifo_read(pipename)

          讀操作.

          fifo_write(pipename,message)

          寫(xiě)操作 pipename管道名,message消息正文.

          有了上面的function后你就可以在begin,commit,rollback 直接穿插使用,實(shí)現(xiàn)在事物處理期間做你愛(ài)做的事。也可以用在觸發(fā)器與EVENT定時(shí)任務(wù)中。

          4. plugin 的開(kāi)發(fā)與使用

          編譯UDF你需要安裝下面的軟件包

          sudo apt-get install pkg-config
          sudo apt-get install libmysqlclient-dev
          sudo apt-get install gcc gcc-c++ make automake autoconf		

          https://github.com/netkiller/mysql-fifo-plugin

          編譯udf,最后將so文件復(fù)制到 /usr/lib/mysql/plugin/

          git clone https://github.com/netkiller/mysql-image-plugin.git
          cd mysql-image-plugin
          gcc -O3  -g  -I/usr/include/mysql -I/usr/include  -fPIC -lm -lz -shared -o fifo.so fifo.c
          sudo mv fifo.so /usr/lib/mysql/plugin/		

          裝載

          create function fifo_create returns string soname 'fifo.so';
          create function fifo_remove returns string soname 'fifo.so';
          create function fifo_read returns string soname 'fifo.so';
          create function fifo_write returns string soname 'fifo.so';		

          卸載

          drop function fifo_create;
          drop function fifo_remove;
          drop function fifo_read;
          drop function fifo_write;		

          http://netkiller.github.io/journal/mysql.plugin.fifo.html

          瀏覽 24
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          編輯 分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          編輯 分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  可以看美女操逼视频的网站 | 日韩有码电影中文字幕 | 一级黄色电影免费观看 | 无码中文字幕无码视频在线观看 | 涩小说校园春色图片区视频区小说区 |