ZeroMQ 가 MySQL 에 원 격 분포 식 작업 처 리 를 제공 하도록 합 니 다.

어제 박문 한 편 을 썼 다
 
 신분증 검사, 주민등록번호 입력 이 정확 한 지 확인http://netkiller-github-com.iteye.com/blog/1997402
 
많은 사람들 이 성능 문 제 를 걱정 했 습 니 다. 저 는 나중에 C 로 확장 을 쓰 려 고 했 습 니 다. 그리고 어떤 사람들 은 성능 에 영향 을 미친다 고 말 했 습 니 다. 한 번 도 하지 않 으 면 쉬 지 않 고 아예 mq 에서 원 격 으로 부하 균형 을 통 해 해결 하 겠 습 니 다.
 
여 기 는 my sql 과 ZeroMQ 가 통신 하 는 플러그 인 만 제 공 했 을 뿐 신분증 검사 프로그램 을 쓰 지 않 았 습 니 다.하지만 MQ 서버 는 많은 언어 로 구현 할 수 있 습 니 다. c, 자바, phop, python, perl, ruby.
 
다운로드 주소:https://github.com/netkiller/mysql-zmq-plugin
 
데이터베이스 프로 세 스 간 통신 솔 루 션 MQ
http://netkiller.github.io/journal/mysql.plugin.mq.html
미스터 네 오 첸 (netkiller), 진경 봉 (BG7NYT)
용화 신 구, 선전, 중국 광 둥 성 13113668890+86 755 29812080 <>
$Id: mysql-plugin.xml 587 2013-12-16 14:00:00Z netkiller $
판권© 2011, 2012, 2013, 2014 http://netkiller.github.io
$Date: 2013-12-16 13:34:20 +0800 (Thu, 16 May 2013) $
요약
당신 은 데이터베이스 에 있 는 데이터 가 변화 할 때 어떤 조작 을 출발 할 생각 이 있 습 니까?그러나 데이터 가 다른 프로 세 스 와 통신 할 수 없 기 때문에 포기 하고 일정 시간 마다 데이터 변 화 를 조회 하 는 방법 으로 바 꿉 니까?아래 의 플러그 인 은 당신 의 문 제 를 해결 할 수 있 습 니 다.
출처
내 시리즈 문서
 
http://netkiller.github.io/journal/mysql.plugin.fifo.html
Netkiller 건축 가 의 친필 편지
Netkiller 개발 자 서찰
Netkiller PHP 서찰
Netkiller 파 이 썬 서찰
Netkiller 테스트 서찰
Netkiller Cryptography 서찰
Netkiller Linux 서찰
Netkiller CentOS 서찰
Netkiller FreeBSD 서찰
Netkiller 보안 서찰
Netkiller 버 전 서찰
Netkiller 웹 서찰
Netkiller 모니터링 서찰
Netkiller 스토리 지 서찰
Netkiller 메 일 편지
Netkiller Shell 서찰
Netkiller 네트워크 서찰
Netkiller 데이터베이스 서찰
Netkiller PostgreSQL 서찰
Netkiller MySQL 서찰
Netkiller NoSQL 서찰
Netkiller LDAP 서찰
Netkiller Cisco IOS 서찰
Netkiller H3C 서찰
Netkiller 멀티미디어 서찰
Netkiller Docbook 친필 편지
 
 
 
 
목차
Netkiller 오픈 소스 소프트웨어 서찰
1. 배경
2. 응용 장면
3. Mysql plugin
4. plugin 의 개발 과 사용
1. 배경
전에 제 가 글 을 발표 한 적 이 있어 요.http://netkiller.github.io/journal/mysql.plugin.fifo.html
이 글 은 fifo 파 이 프 를 통 해 데이터베이스 와 다른 프로 세 스 의 통신 을 실현 하 는 것 을 제시 했다.IPC 메커니즘 (같은 OS / 서버 내) 에 속 합 니 다. 그 후에 저 는 ZeroMQ 를 이용 하여 RPC 메커니즘 을 다시 실현 하 는 방안 이 있 습 니 다. 동시에 IPC (OS / 서버 를 뛰 어 넘 는) 를 호 환 합 니 다.
각종 약어 의 전 칭 IPC (IPC: Inter - Process Communication 프로 세 스 간 통신), ITC (ITC: Inter Thread Communication 스 레 드 간 통신) 와 RPC (RPC: Remote Procedure Calls 원 격 프로 세 스 호출).
지원 프로 토 콜
inproc://my_publisher
tcp://server001:5555
ipc:///tmp/feeds/0
		

2. 응용 장면
만약 당신 이 데 이 터 를 처리 하고 싶다 면, 여러 가지 이유 로 프로그램 에서 실현 할 수 없다 면, 이 플러그 인 을 사용 할 수 있 습 니 다.데이터베이스 에 있 는 데이터 가 변 했 을 때 어떤 조작 을 시작 하면 이 플러그 인 을 사용 할 수 있 습 니 다.
때때로 당신 의 프로젝트 는 아웃 소 싱 일 수 있 습 니 다. 프로젝트 가 끝 난 후에 아웃 소 싱 측 이 당신 을 상관 하지 않 을 것 입 니 다. 당신 은 기 존 코드 를 바 꿀 수 없 거나 고 칠 수 없습니다.이 플러그 인 을 사용 할 수 있 습 니 다.
MQ 기술 을 사용 하여 데이터 베 이 스 를 아무런 압력 도 받 지 않 고 프로그램 으로 처리 하 는 것 과 다 르 지 않 으 며 코드 를 쓰 는 것 을 줄 였 다.
처리 방법 은 동기 화 또는 비동기 방식 을 사용 할 수 있다.
예. 1. 문 자 를 보내다
문자, 메 일 을 보 내 려 면 해당 휴대 전화 번 호 를 조회 하여 MQ 의 서버 로 보 내 고 서버 에서 휴대 전화 번 호 를 받 은 후 대기 열 에 넣 으 면 다 중 스 레 드 프로그램 이 대기 열 에서 임 무 를 받 아 문 자 를 보 냅 니 다.
select zmq_client('tcp://localhost:5555',mobile) from demo where subscribed='Y' ...;
			

여러 개의 매개 변 수 를 전달 하고 기호 로 구분 할 수 있 습 니 다.
select zmq_client('tcp://localhost:5555',concat(name,',',mobile,', news')) from demo;
select zmq_client('tcp://localhost:5555',concat(name,'|',mobile,'|news')) from demo;
			

json 형식
select zmq_client('tcp://localhost:5555',concat('{name:',name,', tel:',mobile,', template:news}')) from demo;
			

비동기 방식 을 사용 하 는 것 을 권장 합 니 다. MQ 측 에서 임 무 를 받 으 면 바로 '성공' 정 보 를 피드백 합 니 다. 우 리 는 성공 할 수 있 는 지 에 관심 이 없 기 때문에 그 자체 가 맹목적 으로 보 내 는 것 입 니 다. 핸드폰 번 호 를 사용 할 수 있 는 지 알 수 없습니다. 문자 나 메 일의 발송 도 착 률 은 100% 가 아니 기 때문에 대열 에 들 어간 후에 프로그램 이 스스로 처리 하도록 합 니 다.성공 이나 실패 정 보 를 로그 에 기록 하면 됩 니 다.
예. 2. 처리 그림
먼저 처리 해 야 할 그림 을 조회 한 다음, MQ 의 다른 한쪽 에 경로 와 해상 도 를 전달 하 는 처리 프로그램
select zmq_client('tcp://localhost:5555',concat(image,',800x600}')) from demo;
			

비동기 방식 을 사용 하 는 것 을 권장 합 니 다. MQ 단 은 작업 을 받 으 면 즉시 "성공" 정 보 를 피드백 합 니 다.
예. 3. 주민등록번호 검사
select zmq_client('tcp://localhost:5555',id_number) from demo;
			

MQ 형 처리 가 지연 되 지 않 기 때문에 동기 화 방안 을 사용 할 수 있 습 니 다. 처리 구 조 를 직접 피드백 할 수 있 습 니 다.
예. 4. 정적 사례
상황 시 뮬 레이 션, 당신 의 프로젝트 는 당신 의 전자상거래 프로젝트 입 니 다. 아웃 소 싱 모델 로 개발 하고 프로젝트 는 이미 개발 되 었 습 니 다.아웃 소 싱 은 더 이상 유 지 를 책임 지지 않 습 니 다. 당신 은 지금 정적 화 를 해 야 합 니 다.이 기능 을 추가 하려 면 상품 표 와 관련 된 여러 곳 의 조작 을 검사 해 야 한다.
코드 를 바 꾸 는 것 보다 프로그램 이 외부 에서 처리 하 는 것 이 더 안전 하 다.우 리 는 동적 URL 다운 로드 를 정적 으로 저장 하 는 프로그램 을 만 들 면 됩 니 다. 데이터 가 변 했 을 때 다시 다운로드 하여 덮어 쓰 면 됩 니 다.
CREATE DEFINER=`dba`@`%` TRIGGER `demo_after_insert` AFTER INSERT ON `demo` FOR EACH ROW BEGIN
	select zmq_client('tcp://localhost:5555', NEW.id);
END
CREATE DEFINER=`dba`@`%` TRIGGER `demo_after_update` AFTER UPDATE ON `demo` FOR EACH ROW BEGIN
	select zmq_client('tcp://localhost:5555', NEW.id);
END
CREATE DEFINER=`dba`@`%` TRIGGER `demo_after_delete` AFTER DELETE ON `demo` FOR EACH ROW BEGIN
	select zmq_client('tcp://localhost:5555', NEW.id);
END
			

MQ 다른 쪽 서 비 스 는 다운 받 습 니 다.http://www.example.com/goods.php?cid=111&id=100그리고 html 페이지 를 생 성 합 니 다.http://www.example.com/111/100.html
삽입 하면 새 페이지 를 만 들 고 업 데 이 트 는 페이지 를 덮어 쓰 며 삭제 하면 페이지 를 삭제 합 니 다.
이렇게 하면 상품 의 가격, 속성 변화 에 관 계 없 이 정태 화 절 차 는 상응하는 처 리 를 할 것 이다.
예. 5. 데이터 동기 화 사례
저 희 는 여러 개의 데이터 베 이 스 를 가지 고 있 습 니 다. A 라 이브 러 리 안의 데이터 가 변화 한 후에 책 고 를 B 라 이브 러 리 로 동기 화하 거나 결 과 를 처리 하거나 데이터 변환 을 통 해 다른 데이터 베 이 스 를 기록 해 야 합 니 다.
방법 도 트리거 나 이 벤트 를 사용 하 는 거 예요.
3. Mysql plugin
나 는 UDF 몇 개 를 개 발 했 는데, 모두 4 개의 function 이다.
UDF
zmq_client(sockt,message)
sockt. true 를 성공 적 으로 되 돌려 주 었 습 니 다. 실패 하면 flase 를 되 돌려 줍 니 다.
위의 function 이 있 으 면 begin, commt, rollback 에서 직접 삽입 하여 사용 하여 사물 처리 기간 에 당신 이 하고 싶 은 일 을 할 수 있 습 니 다.트리거 와 EVENT 정시 미 션 에 도 사용 할 수 있다.
4. plugin 개발 및 사용
UDF 를 컴 파일 하려 면 아래 패 키 지 를 설치 해 야 합 니 다.
sudo apt-get install pkg-config
sudo apt-get install libmysqlclient-dev

sudo apt-get install gcc gcc-c++ make cmake
		

5. 플러그 인 사용 방법
udf 를 컴 파일 하고 마지막 으로 so 파일 을 / usr / lib / mysql / plugin / 로 복사 합 니 다.
		
git clone https://github.com/netkiller/mysql-zmq-plugin.git
cd mysql-zmq-plugin

cmake .
make && make install
		
		

싣다
create function zmq_client returns string soname 'libzeromq.so';
create function zmq_publish returns string soname 'libzeromq.so';
		

마 운 트 해제
drop function zmq_client;
drop function zmq_publish;
		

설치 성공 확인
		
mysql> SELECT * FROM `mysql`.`func` where name like 'zmq%';
+-------------+-----+--------------+----------+
| name        | ret | dl           | type     |
+-------------+-----+--------------+----------+
| zmq_client  |   0 | libzeromq.so | function |
| zmq_publish |   0 | libzeromq.so | function |
+-------------+-----+--------------+----------+
2 rows in set (0.00 sec)
		
		

5. 플러그 인 은 어떻게 사용 합 니까?
플러그 인 은 여러 가지 용법 이 있 는데, 여 기 는 단지 하나의 예 일 뿐이다.
zeromq 서버 테스트 프로그램 컴 파일
cd test
cmake .
make
		

서비스 프로 세 스 시작
./server
		

Hello world 보 내기!
		
mysql> select zmq_client('tcp://localhost:5555','Hello world!');
+---------------------------------------------------+
| zmq_client('tcp://localhost:5555','Hello world!') |
+---------------------------------------------------+
| Hello world! OK                                   |
+---------------------------------------------------+
1 row in set (0.01 sec)
		
		

서버 쪽 에서 정 보 를 받 았 는 지 확인 합 니 다.
$ ./server
Received: Hello world!
		

우 리 는 위의 예 를 트리거 를 사용 하여 더욱 최적화 시 켰 다.
		
mysql> select zmq_client('tcp://localhost:5555',mobile) from demo;
+-------------------------------------------+
| zmq_client('tcp://localhost:5555',mobile) |
+-------------------------------------------+
| 13113668891 OK                            |
| 13113668892 OK                            |
| 13113668893 OK                            |
| 13322993040 OK                            |
| 13588997745 OK                            |
+-------------------------------------------+
5 rows in set (0.03 sec)
		
		

서버 쪽 에서 데이터베이스 에서 보 내 온 메 시 지 를 받 았 습 니 다.
$ ./server
Received: Hello world!
Received: 13113668891
Received: 13113668892
Received: 13113668893
Received: 13322993040
Received: 13588997745
		

우 리 는 json 이나 직렬 화 된 데 이 터 를 조합 하여 원 격 으로 보 낼 수 있다.
		
mysql> select zmq_client('tcp://localhost:5555',concat('{name:',name,', tel:',mobile,'}')) from demo;
+------------------------------------------------------------------------------+
| zmq_client('tcp://localhost:5555',concat('{name:',name,', tel:',mobile,'}')) |
+------------------------------------------------------------------------------+
| {name:neo, tel:13113668891} OK                                               |
| {name:jam, tel:13113668892} OK                                               |
| {name:leo, tel:13113668893} OK                                               |
| {name:jerry, tel:13322993040} OK                                             |
| {name:tom, tel:13588997745} OK                                               |
+------------------------------------------------------------------------------+
5 rows in set (0.03 sec)
		
		

데 이 터 를 되 돌려 주 는 것 은 서버 에서 처리 프로그램 을 어떻게 작성 하 느 냐 에 달 려 있 습 니 다. true / false 등 을 되 돌려 줄 수 있 습 니 다.
트리거 및 트 랜 잭 션 처리, 여 기 는 프 리 젠 테 이 션 하지 않 습 니 다.

좋은 웹페이지 즐겨찾기