시스템이야기2012. 6. 26. 19:20

전직 페이스북(facebook) 개발자 Eric Frenkiel과 Nikita Shamgunov가 만든 MemSQL.



MemSQLMemSQL


1. 특징을 간단히 살펴보자.

1) 개발자가 주장하기는  MemSQL 개발자에 따른 disk기반 DB보다 30배까지 빠르다고 한다.
   MemSQL은 초당 8만쿼리를 처리했고 MySQL은 초당 3천500쿼리를 처리해서 MySQL보다는 23배 빠르다고.

2) MemSQL은 메모리에 데이터를 유지하고 있어서 빠른 성능을 달성했다.

페이스북이 PHP코드를 C로 변환하여 성능을 향상시켰는데, 이 때 PHP -> C++로 변환한 툴이 'HipHop'이다. 이 HipHop툴처럼 MemSQL은 SQL을 C++로 변환하여
성능을 급격히 높였다. 개발자인 Frenkiel은 이렇게 말했다. "This is like HipHop for SQL"

3) MemSQL은 MySQL API와 인터페이스를 사용한다.

그래서 관리적 이슈도 없고, 어떤것도 새로 배울 것이 없다.

4) 하지만, 아직 지원 안되는게 있다. 그래도 나온지 얼마안된 DB가 위의 말대로의 성능만 내준다면, 앞으로 엄청난 물건이 될게 분명하다.

* UNSUPPORTED FEATURES


- Views
- Prepared Queries
- Stored procedures
- User Defined Functions
- Triggers
- Foreign keys
- Charsets other than utf8



5) MemSQL 투자자에 애쉬튼 커쳐(Ashton Kutcher)가 있다.

애쉬튼 커쳐는 IT에 관심이 많은 것 같다. 사진 공유 SNS인 Path(※ Path 공동창업자 중의 한명이 냅스터의 공동차업자 '숀 패닝')에도 투자를 했다. flipboard에도 투자하고.

2. 실제 사용해보기

MemSQL 사이트( http://memsql.com/ )에서 메일주소 입력하고 다운로드 받으면 된다.

- 64비트만 지원
- RHEL(또는 CentOS)의 경우 6.0 이상

바이너리 받아서 압축만 풀면 끝. 그리고, MySQL client 로 접속하니 정말 잘 되더라.


# ./memsqld -u root --port 3307 & <-- MemSQL 데몬 실행
#
# mysql -u root -h 127.0.0.1 -P 3307 --prompt="memsql> "
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 250
Server version: 5.5.8 MemSQL source distribution



쿼리를 실행하면 아래처럼 쿼리를 C++로 컴파일하게 된다. 그래서 초기 쿼리는 실행시간이 좀 걸리고, 그 이후는 MySQL보다 나은 성능을 보인다.
아래 'miliseconds'숫자는 생각보다 높긴한데, 실제 운영하는 DB서버라면 훨씬 낮은 수치를 보일 것이다.
맛보기 테스트를 하려고 듀얼코어, 4G 서버에서 설치한 것이다.


1688649195 2012-06-26 16:22:23 INFO: Query test.'select count(*) from test2' compiled in 669 miliseconds
2140046715 2012-06-26 16:29:55 INFO: Query test.'INSERT INTO test2(name, date) values (?, now())' compiled in 1369 miliseconds
3317465154 2012-06-26 16:49:32 INFO: Query test.'select name from test2 where id = @' compiled in 714 miliseconds
9867440156 2012-06-26 18:38:42 INFO: Query test.'update test2 set name = ^ where id = @' compiled in 1390 miliseconds


3. 성능은?

- php 5.3에서 microtime으로 시간 체크. 각 쿼리별로 5만회 실행한 시간 체크. 테스트는 3회씩.
- insert : INSERT INTO test2(name, date) VALUES ('aaaaa', now())
- select : SELECT name FROM test2 WHERE id = $i
- update : UPDATE test2 SET name = 'bbbbb' WHERE id = $i

테스트 환경은?

- 설정 튜닝이 제대로 되지 않은 상태에서 테스트가 이뤄졌고,
- MemSQL의 권장 메모리인 8G보다 적은 4G에서 테스트를 했다.
- 서비스에 투입할 수도 없는 상황이고,
- 서비스 환경에 근접하게 테스트 요청을 할 수도 없으므로

아래 수치는 성능이 MySQL보다 낫긴 낫구나라는 정도로만 이해해야 한다. 절대적인 것으로 봐서는 안된다. 정말 참고만.
수치상으로는 1.5~2배정도. 아래 수치 단위는 초.
서비스에서는 쿼리도 복잡하고, 다양한 쿼리가 한꺼번에 이뤄지므로 오히려 테스트 결과보다 성능이 더 나을 수 있을 것 같다.


1. INSERT

MemSQL 2.715 2.371 2.491
MySQL  4.004 3.974 3.982

2. SELECT

MemSQL 2.484 2.772 2.741
MySQL  4.271 4.296 4.088

3. UPDATE

MemSQL 2.380 2.527 2.177
MySQL  4.283 3.975 3.968


* 참고글 :
  Ex-Facebookers launch MemSQL to make your database fly (2012.6.18)

Posted by 좋은진호
IT이야기2010. 6. 16. 18:43
최근 월스트리트 저널(online.wsj.com)등을 포함한 MS IIS 서버와 ASP.net환경의 서버에 대량 SQL Injection(Mass SQL Injection) 공격이 이뤄지고 있으니 주의가 필요하다.

해킹된 사이트에는 _script src=http://ww.robint.us/u.js_ 스크립트가 삽입이 되었다. 그 이후에 2677.in/yahoo.js, 4589.in/yahoo.js 등의 도메인으로 스크립트를 삽입하고 있다. 최근 Adobe Flash 0-day 취약점(CVE-2010-1297)이 발생했다. 이 취약점을 패치하지 않은 유저가 해킹된 사이트를 방문하면 악성코드에 감염이 된다. Armorize Blog(상세한 분석 자료 있음)에 따르면 이 악성코드는 다음 3개 게임 사이트의 게임 계정을 가로채는 것으로 알려졌다.
 
aion.plaync.co.kr
aion.plaync.jp
df.nexon.com

구글에서 2677.in/yahoo.js 또는 4589.in/yahoo.js를 검색하면, 프레시안(현재는 정상 복구된 것으로 보임), 한국표준협회, 아산시 평생학습센터 등 다수의 국내 사이트들이 감염된 것을 확인할 수 있다.

[ 구글에서 '2677.in/yahoo.js' 검색 결과 ]


유저들은 KrCERT의 권고문을 살펴보고, 반드시 Adobe Flash Player(http://get.adobe.com/flashplayer/)를 업데이트해야 한다.

마지막으로 위 도메인의 등록정보를 살펴보자. 3개 모두 중국(CN)에서 등록을 했다. 등록일이 얼마되지 않았다. 스크립를 호스팅하기 위해 생성한 도메인이라는 것을 뜻한다. 그리고, 도메인이 차단될 경우에 유사 도메인으로 계속 등록을 시도할 가능성이 커보인다.

1. robint.us
   Domain Registration Date:                    Sun Mar 14 05:28:08 GMT 2010
   Domain Last Updated Date:                    Tue Jun 08 05:10:09 GMT 2010

2. 2677.in
   Created On:10-Jun-2010 10:33:51 UTC
   Last Updated On:12-Jun-2010 15:59:46 UTC

3. 4589.in
   Created On:13-Jun-2010 08:13:07 UTC
   Last Updated On:13-Jun-2010 08:13:08 UTC


* 관련 정보

  - Mass infection of IIS/ASP sites - robint.us
  - Mass infection of IIS/ASP sites - 2677.in/yahoo.js
  - 대량 SQL Injection 공격 주의 (2009.12월)
Posted by 좋은진호
시스템이야기2008. 12. 11. 00:34
GreenSQL( http://www.greensql.net/ )은 MySQL에 대한 SQL 인젝션(Injection) 공격을 방어하는 프락시 개념의 어플리케이션이다. 웹페이지를 호출하면 DB쿼리는 먼저 GreenSQL 로 넘어겨지고, 검사한 후 정상적이면 MySQL 서버로 요청하는 과정을 거친다.
GreenSQL을 설치하고 실행과정은 이렇다. MySQL 서버는 기존 그대로 실행(디폴트 3306 포트)하고, GreenSQL을 3305포트로 실행(127.0.0.1:3305)한다. 이 때 GreenSQL은 MySQL 서버로 커넥션이 이뤄진다. 웹페이지는 DB커넥션을 GreenSQL의 3305포트로 커넥션하도록 변경해주면 된다. (MySQL을 3305로, GreenSQL을 3306으로 실행할 수도 있을 것이다.)

[ 이미지 출처 : GreenSQL 홈페이지 ]

DB 쿼리의 정상, 비정상은 어떻게 판단하는가?

1) '관리자가 실행할 SQL 유형'이나 '민간한 형태의 SQL 유형'(flush privileges, show 명령, 불법적 형태 등)을 패턴 매칭 방식으로 찾아서 불법 요청으로 간주한다. 예를들면 DB관리 명령어, DB 스키마를 변경시도하는 경우, 시스템 파일을 액세스하려는 경우 등을 불법으로 간주한다. 이 패턴에 대해서는 설정 파일을 통해서 변경이 가능하다.

2) 그후 각 쿼리 유형에는 점수가 할당되어 있는데, 이 점수를 합산한다. 지정된 값 이상이 될 경우, 경고 메시지를 뿌려주거나 차단할 수 있다. 유형은 다음과 같다.

* Access to sensitive tables increases risk query (users, accounts, credit information)
* Comments inside SQL commands increases query risk
* Usage of an empty password string
* Found ‘or’ token inside query
* Found SQL expression that always return true (SQL tautology)
* Comparison of constant values (SQL tautology)
* ... 등 ...

점수는 설정 파일을 통해서 변경이 가능하다. 다음은 샘플 설정 파일의 일부이다.
# If query risk is bigger then specified value, query will be blocked
block_level = 30
# Level of risk used to generate warnings. It is recomended to run application
# in low warning level and then to acknowledge all valid queries and
# then to lower the block_level
warn_level=20
# Risk factor associated with SQL comments
risk_sql_comments=30

차단된 샘플 로그이다. (sCag님 제공. 감사합니다.)

2008-12-09 16:54:18 mysql SELECT * FROM user WHERE name = 'x' or 1=1; --' AND pwd=SHA('')  blocked

GreenSQL에 대한 결론이다.

  • 멋진 생각이다. ^^
  • 패턴 설정과 차단수준을 유동적으로 변경 가능하다.
  • 대부분의 리눅스 배포판을 지원하며, FreeBSD도 지원한다.
  • 성능 테스트 결과 약간의 성능 저하가 발생한다. (2~12%정도)
  • 대용량 서비스에서 사용하기는 무리가 있을 것 같다.
  • 소규모 사이트나 웹호스팅에서는 고려해볼만 하다.
  • SQL Relay(DB 풀링과 로드발런싱 등)에서 제공하는 기능 등이 하나로 합쳐진다면 멋질 것 같다.
※ 개인적으로 GreenSQL을 운영하지 않습니다. 소규모 사이트, 웹호스팅에서 유용할 것 같아 소개해드리는 것이며, 운영상 궁금한 점을 저에게 질문하셔도 답해드릴 수 없습니다. ^^
※ 글쓰고 나니깐 sCag님도 GreenSQL 글을 쓰셨네. 안쓰실 것 처럼 말씀하시더니. ㅋㅋ

Posted by 좋은진호