[소감]Thrift 프로 토 콜 및 관련 압력 측정 경험 구덩이 밟 기 총화

6616 단어 기술 노트
HTTP 기반 프로 토 콜 이 인터넷 에서 매우 유행 하고 있다.그 다음 에 전송 효율 이 더욱 중요 할 때 PB,Thrift 프로 토 콜 과 Facebook 2015 년 에 개 원 된 초고 속 데이터 전송 도구(Warp speed Data Transfer,WDT).
여기 서 thrift 프로 토 콜 에 대해 구덩이 밟 기 소 개 를 하 겠 습 니 다.현재 유행 하 는 서비스 호출 방식 은 SOAP 메시지 형식 을 기반 으로 하 는 웹 서비스,JSON 메시지 형식 을 기반 으로 하 는 RESTful 서비스 등 여러 가지 가 있다.
그 중에서 사용 하 는 데이터 전송 방식 은 XML,JSON 등 을 포함 하지만 XML 은 상대 적 으로 부피 가 너무 크 고 전송 효율 이 낮 으 며 JSON 은 부피 가 작고 참신 하지만 완선 되 지 않다.
페 이 스 북 이 개발 한 원 격 서비스 호출 프레임 워 크 Apache Thrift 는 인터페이스 기술 언어 로 정의 하고 서 비 스 를 만 들 며 확장 가능 한 크로스 언어 서비스 개발 을 지원 합 니 다.포 함 된 코드 생 성 엔진 은 다양한 언어 에서 효율 적 이 고 빈 틈 없 는 서 비 스 를 만 들 수 있 습 니 다.전송 데 이 터 는 바 이 너 리 형식 으로 XML 과 JSON 에 비해 부피 가 작고 높 은 병행,빅 데이터 양 과 다 국어 환경 이 유리 하 다.
thrift 목표 언어 코드 생 성,
thrift -gen java HelloWorld.thrift 

jar 가방 을 얻 기 위해 서 는 자바 가방 관리 도구 mvn 도 파악 해 야 합 니 다.
화면 음악 n 의 핵심 은 pom 의 개념,procject object model 이다.POM 대표 공정 대상 모델.Maven 작업 을 할 때 기본 구성 요소 로 xml 파일 입 니 다.프로젝트 루트 디 렉 터 리 에 놓 여 있 습 니 다.파일 이름 은 pom.xml 입 니 다.
POM 에서 설정 할 수 있 는 설정 은 다음 과 같 습 니 다.
project dependencies plugins goals build profiles project version developers mailing list
프로젝트 마다 POM 파일 이 하나 밖 에 없어 야 합 니 다.
모든 POM 파일 은 procject 요소 와 세 개의 필수 필드 가 필요 합 니 다:groupId,artifactId,version.창고 에 있 는 프로젝트 표 지 는 groupId:artifactId:version POM.xml 의 루트 요 소 는 procject 이 고 세 개의 주요 하위 노드 가 있 습 니 다.
노드
묘사 하 다.
groupId
이것 은 공사 팀 의 표식 이다.그것 은 한 조직 이나 프로젝트 에서 통상 적 으로 유일 하 다.예 를 들 어 한 은행 조직 인 com.company.bank 는 은행 과 관련 된 모든 프로젝트 를 가지 고 있다.
artifactId
이것 은 공사 의 표식 이다.그것 은 통상 적 으로 공사 의 명칭 이다.예 를 들 어 소비자 은행.groupId 는 artifactId 와 함께 아 티 팩 트 가 창고 에 있 는 위 치 를 정의 합 니 다.
version
이것 은 공사 의 판본 번호 다.아 티 팩 트 창고 에 서 는 버 전 을 구분 하 는 데 사 용 됩 니 다.예 를 들 어 com.company.bank:consumer-banking:1.0 com.company.bank:consumer-banking:1.1
특히 협의 문 제 를 주의해 서 당시 에 우 리 는 함정 에 빠 졌 다.다음은 자바 클 라 이언 트 의 예 입 니 다.
package com.tc.test;
/**
 * Created by topcoder on 16/11/23.
 */

import org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient;
import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
import org.apache.jmeter.samplers.SampleResult;
import org.apache.thrift.TException;
import org.apache.thrift.protocol.TBinaryProtocol;
import org.apache.thrift.protocol.TProtocol;
import org.apache.thrift.transport.TFramedTransport;
import org.apache.thrift.transport.TSocket;
import org.apache.thrift.transport.TTransport;
import org.apache.thrift.transport.TTransportException;
import query.*;

import java.io.Serializable;
import java.util.HashMap;
import java.util.Map;

/**
 * when jmeter working, one thred has one instance of this class
 */
public class ThriftClientTest extends AbstractJavaSamplerClient {
    private QueryService.Client query_client;
    private TTransport transport;
    private Query query = new Query();

    /**
     * do init job
     * @param context
     */
    public void setupTest(JavaSamplerContext context) {
        super.setupTest(context);
        transport = new TSocket("127.0.0.1", 8001);
        System.out.println(transport);
        transport = new TFramedTransport(transport);
        try {
            transport.open();
        } catch (TTransportException e){
            transport.close();
            throw new RuntimeException(e);
        }

        TProtocol protocol = new TBinaryProtocol(transport);
        query_client = new QueryService.Client(protocol);
    }

    /**
     * do clean up job
     * @param context
     */
    public void teardownTest(JavaSamplerContext context) {
        super.teardownTest(context);
        transport.close();
    }

    public SampleResult runTest(JavaSamplerContext context) {
        SampleResult result = new SampleResult();
        result.sampleStart();
        try {
            System.out.println(query);
            System.out.println(query_client.query_result(query));
        } catch (TException e) {
            result.setSuccessful(false);
        }
        result.sampleEnd();
        System.out.println(result);
        result.setSuccessful(true);
        result.setResponseCode("code");
        result.setResponseMessage("message");
        return result;
    }
}

코드 ready 후 프로젝트 디 렉 터 리 에서 mvn 명령 을 실행 하여 포장 합 니 다.
$ mvn clean package

그리고 jar 가방 을 jmeter 의 lib/ext 디 렉 터 리 에 복사 합 니 다.
마지막 으로 테스트 계획 에 thread group 과 sample 자바 request 를 설정 하면 됩 니 다.여기 구덩이 가 있 습 니 다.인터넷 에 있 는 jmeter 2.13 과 3.1 버 전의 아이콘 은 다 릅 니 다.그 러 니 조롱박 을 보고 바 가 지 를 그 리 려 면 잘 봐 야 지~

좋은 웹페이지 즐겨찾기